From 481a733f34a47c7c914b1d54d7d0bf10cb2aeced Mon Sep 17 00:00:00 2001 From: Maximilian Rink Date: Wed, 5 Jul 2023 12:50:55 +0200 Subject: [PATCH 001/125] update RBAC to only use verbs that exist for the resources Signed-off-by: Maximilian Rink --- charts/cluster-autoscaler/Chart.yaml | 2 +- charts/cluster-autoscaler/templates/clusterrole.yaml | 11 +++++++++-- charts/cluster-autoscaler/templates/role.yaml | 11 +++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/charts/cluster-autoscaler/Chart.yaml b/charts/cluster-autoscaler/Chart.yaml index c871126adba8..7bbaffd34b6c 100644 --- a/charts/cluster-autoscaler/Chart.yaml +++ b/charts/cluster-autoscaler/Chart.yaml @@ -11,4 +11,4 @@ name: cluster-autoscaler sources: - https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler type: application -version: 9.29.1 +version: 9.29.2 diff --git a/charts/cluster-autoscaler/templates/clusterrole.yaml b/charts/cluster-autoscaler/templates/clusterrole.yaml index 63a65a044421..4ee33d81b477 100644 --- a/charts/cluster-autoscaler/templates/clusterrole.yaml +++ b/charts/cluster-autoscaler/templates/clusterrole.yaml @@ -151,9 +151,7 @@ rules: - cluster.x-k8s.io resources: - machinedeployments - - machinedeployments/scale - machinepools - - machinepools/scale - machines - machinesets verbs: @@ -161,5 +159,14 @@ rules: - list - update - watch + - apiGroups: + - cluster.x-k8s.io + resources: + - machinedeployments/scale + - machinepools/scale + verbs: + - get + - patch + - update {{- end }} {{- end -}} diff --git a/charts/cluster-autoscaler/templates/role.yaml b/charts/cluster-autoscaler/templates/role.yaml index 1fe013fe1ac7..44b1678af4d8 100644 --- a/charts/cluster-autoscaler/templates/role.yaml +++ b/charts/cluster-autoscaler/templates/role.yaml @@ -49,9 +49,7 @@ rules: - cluster.x-k8s.io resources: - machinedeployments - - machinedeployments/scale - machinepools - - machinepools/scale - machines - machinesets verbs: @@ -59,6 +57,15 @@ rules: - list - update - watch + - apiGroups: + - cluster.x-k8s.io + resources: + - machinedeployments/scale + - machinepools/scale + verbs: + - get + - patch + - update {{- end }} {{- if ( not .Values.rbac.clusterScoped ) }} - apiGroups: From 6df52ec0a46ec4fcc124ae41889d1ff29a5348ac Mon Sep 17 00:00:00 2001 From: vadasambar Date: Fri, 7 Jul 2023 00:49:23 +0530 Subject: [PATCH 002/125] fix(cloudprovider/externalgrpc): `GetOptions` returns `MaxNodeProvisionTime` as 0 seconds Signed-off-by: vadasambar chore(cloudprovider/externalgrpc): fix CI failing because of wrong header - CI complains if I remove or change the copyright header Signed-off-by: vadasambar chore(cloudprovider/externalgrpc): fix spacing for license headers Signed-off-by: vadasambar chore(cloudprovider/externalgrpc): remove extra space in copyright header Signed-off-by: vadasambar test(cloudprovider/externalgrpc): add assert for `MaxNodeProvisionTime` - add extra assert for err test case Signed-off-by: vadasambar fix: duplicate line Signed-off-by: vadasambar docs: add example with `MaxNodeProvisionTime` Signed-off-by: vadasambar refactor: return `MaxNodeProvisionTime` from `NodeGroupGetOptions` in response Signed-off-by: vadasambar --- .../cloudprovider/externalgrpc/README.md | 4 +- .../wrapper/wrapper.go | 4 + .../externalgrpc/externalgrpc_node_group.go | 4 + .../externalgrpc_node_group_test.go | 6 +- .../externalgrpc/protos/externalgrpc.pb.go | 434 +++++++++--------- .../externalgrpc/protos/externalgrpc.proto | 3 + .../protos/externalgrpc_grpc.pb.go | 4 + 7 files changed, 247 insertions(+), 212 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/README.md b/cluster-autoscaler/cloudprovider/externalgrpc/README.md index 43561099c0cf..8e88f4154248 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/README.md +++ b/cluster-autoscaler/cloudprovider/externalgrpc/README.md @@ -56,8 +56,8 @@ To regenerate the gRPC code: 1. install `protoc` and `protoc-gen-go-grpc`: ```bash -go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 -go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1 +go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 +go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 ``` 2. generate gRPC client and server code: diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go index 33a139785e67..8c3fe2fa4d53 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go @@ -351,6 +351,7 @@ func (w *Wrapper) NodeGroupGetOptions(_ context.Context, req *protos.NodeGroupAu ScaleDownGpuUtilizationThreshold: pbDefaults.GetScaleDownGpuUtilizationThreshold(), ScaleDownUnneededTime: pbDefaults.GetScaleDownUnneededTime().Duration, ScaleDownUnreadyTime: pbDefaults.GetScaleDownUnneededTime().Duration, + MaxNodeProvisionTime: pbDefaults.GetMaxNodeProvisionTime().Duration, } opts, err := ng.GetOptions(defaults) if err != nil { @@ -369,6 +370,9 @@ func (w *Wrapper) NodeGroupGetOptions(_ context.Context, req *protos.NodeGroupAu ScaleDownUnreadyTime: &metav1.Duration{ Duration: opts.ScaleDownUnreadyTime, }, + MaxNodeProvisionTime: &metav1.Duration{ + Duration: opts.MaxNodeProvisionTime, + }, }, }, nil } diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go index ae8752af1897..69ffad0ab8f5 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go @@ -263,6 +263,9 @@ func (n *NodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*co ScaleDownUnreadyTime: &metav1.Duration{ Duration: defaults.ScaleDownUnreadyTime, }, + MaxNodeProvisionTime: &metav1.Duration{ + Duration: defaults.MaxNodeProvisionTime, + }, }, }) if err != nil { @@ -278,6 +281,7 @@ func (n *NodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*co ScaleDownGpuUtilizationThreshold: pbOpts.GetScaleDownGpuUtilizationThreshold(), ScaleDownUnneededTime: pbOpts.GetScaleDownUnneededTime().Duration, ScaleDownUnreadyTime: pbOpts.GetScaleDownUnreadyTime().Duration, + MaxNodeProvisionTime: pbOpts.GetMaxNodeProvisionTime().Duration, } return opts, nil } diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go index 51feebc9d803..df377d5e223a 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go @@ -226,6 +226,7 @@ func TestCloudProvider_GetOptions(t *testing.T) { ScaleDownGpuUtilizationThreshold: 0.7, ScaleDownUnneededTime: &v1.Duration{Duration: time.Minute}, ScaleDownUnreadyTime: &v1.Duration{Duration: time.Hour}, + MaxNodeProvisionTime: &v1.Duration{Duration: time.Minute}, }, }, nil, @@ -240,6 +241,7 @@ func TestCloudProvider_GetOptions(t *testing.T) { ScaleDownGpuUtilizationThreshold: 0.7, ScaleDownUnneededTime: time.Minute, ScaleDownUnreadyTime: time.Hour, + MaxNodeProvisionTime: time.Minute, } opts, err := ng1.GetOptions(defaultsOpts) @@ -248,6 +250,7 @@ func TestCloudProvider_GetOptions(t *testing.T) { assert.Equal(t, 0.7, opts.ScaleDownGpuUtilizationThreshold) assert.Equal(t, time.Minute, opts.ScaleDownUnneededTime) assert.Equal(t, time.Hour, opts.ScaleDownUnreadyTime) + assert.Equal(t, time.Minute, opts.MaxNodeProvisionTime) // test grpc error m.On( @@ -264,8 +267,9 @@ func TestCloudProvider_GetOptions(t *testing.T) { client: client, } - _, err = ng2.GetOptions(defaultsOpts) + opts, err = ng2.GetOptions(defaultsOpts) assert.Error(t, err) + assert.Nil(t, opts) // test no opts m.On( diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.pb.go b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.pb.go index e815b88cc1ad..297de066468b 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.pb.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.pb.go @@ -16,17 +16,17 @@ limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.19.1 +// protoc-gen-go v1.28.1 +// protoc v3.12.4 // source: cloudprovider/externalgrpc/protos/externalgrpc.proto package protos import ( + _ "github.com/golang/protobuf/protoc-gen-go/descriptor" + any1 "github.com/golang/protobuf/ptypes/any" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/descriptorpb" - anypb "google.golang.org/protobuf/types/known/anypb" v11 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" reflect "reflect" @@ -786,7 +786,7 @@ type GetAvailableGPUTypesResponse struct { unknownFields protoimpl.UnknownFields // GPU types passed in as opaque key-value pairs. - GpuTypes map[string]*anypb.Any `protobuf:"bytes,1,rep,name=gpuTypes,proto3" json:"gpuTypes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + GpuTypes map[string]*any1.Any `protobuf:"bytes,1,rep,name=gpuTypes,proto3" json:"gpuTypes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *GetAvailableGPUTypesResponse) Reset() { @@ -821,7 +821,7 @@ func (*GetAvailableGPUTypesResponse) Descriptor() ([]byte, []int) { return file_cloudprovider_externalgrpc_protos_externalgrpc_proto_rawDescGZIP(), []int{13} } -func (x *GetAvailableGPUTypesResponse) GetGpuTypes() map[string]*anypb.Any { +func (x *GetAvailableGPUTypesResponse) GetGpuTypes() map[string]*any1.Any { if x != nil { return x.GpuTypes } @@ -1754,6 +1754,8 @@ type NodeGroupAutoscalingOptions struct { // ScaleDownUnreadyTime represents how long an unready node should be // unneeded before it is eligible for scale down. ScaleDownUnreadyTime *v1.Duration `protobuf:"bytes,4,opt,name=scaleDownUnreadyTime,proto3" json:"scaleDownUnreadyTime,omitempty"` + // MaxNodeProvisionTime time CA waits for node to be provisioned + MaxNodeProvisionTime *v1.Duration `protobuf:"bytes,5,opt,name=MaxNodeProvisionTime,proto3" json:"MaxNodeProvisionTime,omitempty"` } func (x *NodeGroupAutoscalingOptions) Reset() { @@ -1816,6 +1818,13 @@ func (x *NodeGroupAutoscalingOptions) GetScaleDownUnreadyTime() *v1.Duration { return nil } +func (x *NodeGroupAutoscalingOptions) GetMaxNodeProvisionTime() *v1.Duration { + if x != nil { + return x.MaxNodeProvisionTime + } + return nil +} + type NodeGroupAutoscalingOptionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2142,7 +2151,7 @@ var file_cloudprovider_externalgrpc_protos_externalgrpc_proto_rawDesc = []byte{ 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xf9, 0x02, 0x0a, 0x1b, 0x4e, 0x6f, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xdd, 0x03, 0x0a, 0x1b, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, @@ -2166,197 +2175,203 @@ var file_cloudprovider_externalgrpc_protos_externalgrpc_proto_rawDesc = []byte{ 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, - 0x79, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x22, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x68, 0x0a, 0x08, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, - 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, - 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x23, 0x4e, 0x6f, 0x64, 0x65, 0x47, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x62, 0x0a, 0x14, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x4d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x22, 0x4e, 0x6f, + 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, + 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x68, 0x0a, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, + 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x23, 0x4e, + 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, - 0x01, 0x0a, 0x1b, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, - 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x1b, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x32, 0xbf, 0x14, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x97, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x12, 0x42, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x1b, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, - 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, - 0xbf, 0x14, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x97, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x12, 0x42, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, - 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0xa9, 0x01, 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6f, 0x72, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa9, 0x01, 0x0a, 0x10, - 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6f, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x46, 0x6f, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6f, 0x72, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa9, 0x01, 0x0a, 0x10, + 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x48, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6f, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x63, 0x6c, 0x75, + 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x6f, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x50, 0x72, 0x69, 0x63, - 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x48, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, - 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, - 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0xa6, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x47, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x48, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, - 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, 0x0a, - 0x08, 0x47, 0x50, 0x55, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x40, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x50, 0x55, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x63, 0x6c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, + 0x63, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa6, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x63, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x47, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x50, - 0x55, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0xb5, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x47, 0x50, 0x55, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x50, 0x55, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x50, 0x55, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x07, 0x43, 0x6c, 0x65, - 0x61, 0x6e, 0x75, 0x70, 0x12, 0x3f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, + 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, + 0x69, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, - 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x07, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x3f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, - 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xb2, 0x01, 0x0a, 0x13, 0x4e, - 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x4b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, + 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x91, 0x01, 0x0a, 0x08, 0x47, 0x50, 0x55, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x40, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x47, 0x50, 0x55, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x41, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0xb8, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x63, 0x2e, 0x47, 0x50, 0x55, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0xb5, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x50, 0x55, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x50, 0x55, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4d, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x50, 0x55, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, + 0x07, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x12, 0x3f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xb5, 0x01, 0x0a, 0x14, 0x4e, - 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x12, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, - 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x4d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0xca, 0x01, 0x0a, 0x1b, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x53, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, - 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x54, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0xa3, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x6f, 0x64, - 0x65, 0x73, 0x12, 0x46, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x63, 0x6c, 0x75, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x65, 0x61, + 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, + 0x0a, 0x07, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x3f, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xc4, 0x01, 0x0a, 0x19, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x51, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xb2, + 0x01, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x52, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0xb8, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4e, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xb5, + 0x01, 0x0a, 0x14, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x4c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, + 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xca, 0x01, 0x0a, 0x1b, 0x4e, 0x6f, 0x64, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x53, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xc2, 0x01, 0x0a, - 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x54, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0x36, 0x5a, 0x34, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2d, 0x61, 0x75, 0x74, - 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, - 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x75, 0x70, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x54, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0xa3, 0x01, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x46, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xc4, 0x01, 0x0a, 0x19, 0x4e, 0x6f, + 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x51, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x52, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0xc2, 0x01, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x54, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, + 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x36, 0x5a, 0x34, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2d, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x2f, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2418,7 +2433,7 @@ var file_cloudprovider_externalgrpc_protos_externalgrpc_proto_goTypes = []interf (*v11.Pod)(nil), // 41: k8s.io.api.core.v1.Pod (*v11.Node)(nil), // 42: k8s.io.api.core.v1.Node (*v1.Duration)(nil), // 43: k8s.io.apimachinery.pkg.apis.meta.v1.Duration - (*anypb.Any)(nil), // 44: google.protobuf.Any + (*any1.Any)(nil), // 44: google.protobuf.Any } var file_cloudprovider_externalgrpc_protos_externalgrpc_proto_depIdxs = []int32{ 37, // 0: clusterautoscaler.cloudprovider.v1.externalgrpc.ExternalGrpcNode.labels:type_name -> clusterautoscaler.cloudprovider.v1.externalgrpc.ExternalGrpcNode.LabelsEntry @@ -2441,44 +2456,45 @@ var file_cloudprovider_externalgrpc_protos_externalgrpc_proto_depIdxs = []int32{ 42, // 17: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTemplateNodeInfoResponse.nodeInfo:type_name -> k8s.io.api.core.v1.Node 43, // 18: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions.scaleDownUnneededTime:type_name -> k8s.io.apimachinery.pkg.apis.meta.v1.Duration 43, // 19: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions.scaleDownUnreadyTime:type_name -> k8s.io.apimachinery.pkg.apis.meta.v1.Duration - 34, // 20: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsRequest.defaults:type_name -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions - 34, // 21: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsResponse.nodeGroupAutoscalingOptions:type_name -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions - 44, // 22: clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesResponse.GpuTypesEntry.value:type_name -> google.protobuf.Any - 3, // 23: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroups:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupsRequest - 5, // 24: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupForNode:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupForNodeRequest - 7, // 25: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingNodePrice:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingNodePriceRequest - 9, // 26: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingPodPrice:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingPodPriceRequest - 11, // 27: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GPULabel:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GPULabelRequest - 13, // 28: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GetAvailableGPUTypes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesRequest - 15, // 29: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Cleanup:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.CleanupRequest - 17, // 30: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Refresh:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.RefreshRequest - 19, // 31: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTargetSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTargetSizeRequest - 21, // 32: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupIncreaseSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupIncreaseSizeRequest - 23, // 33: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDeleteNodes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDeleteNodesRequest - 25, // 34: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDecreaseTargetSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDecreaseTargetSizeRequest - 27, // 35: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupNodes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupNodesRequest - 32, // 36: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTemplateNodeInfo:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTemplateNodeInfoRequest - 35, // 37: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupGetOptions:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsRequest - 4, // 38: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroups:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupsResponse - 6, // 39: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupForNode:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupForNodeResponse - 8, // 40: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingNodePrice:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingNodePriceResponse - 10, // 41: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingPodPrice:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingPodPriceResponse - 12, // 42: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GPULabel:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GPULabelResponse - 14, // 43: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GetAvailableGPUTypes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesResponse - 16, // 44: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Cleanup:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.CleanupResponse - 18, // 45: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Refresh:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.RefreshResponse - 20, // 46: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTargetSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTargetSizeResponse - 22, // 47: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupIncreaseSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupIncreaseSizeResponse - 24, // 48: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDeleteNodes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDeleteNodesResponse - 26, // 49: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDecreaseTargetSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDecreaseTargetSizeResponse - 28, // 50: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupNodes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupNodesResponse - 33, // 51: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTemplateNodeInfo:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTemplateNodeInfoResponse - 36, // 52: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupGetOptions:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsResponse - 38, // [38:53] is the sub-list for method output_type - 23, // [23:38] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 43, // 20: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions.MaxNodeProvisionTime:type_name -> k8s.io.apimachinery.pkg.apis.meta.v1.Duration + 34, // 21: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsRequest.defaults:type_name -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions + 34, // 22: clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsResponse.nodeGroupAutoscalingOptions:type_name -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptions + 44, // 23: clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesResponse.GpuTypesEntry.value:type_name -> google.protobuf.Any + 3, // 24: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroups:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupsRequest + 5, // 25: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupForNode:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupForNodeRequest + 7, // 26: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingNodePrice:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingNodePriceRequest + 9, // 27: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingPodPrice:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingPodPriceRequest + 11, // 28: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GPULabel:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GPULabelRequest + 13, // 29: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GetAvailableGPUTypes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesRequest + 15, // 30: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Cleanup:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.CleanupRequest + 17, // 31: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Refresh:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.RefreshRequest + 19, // 32: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTargetSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTargetSizeRequest + 21, // 33: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupIncreaseSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupIncreaseSizeRequest + 23, // 34: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDeleteNodes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDeleteNodesRequest + 25, // 35: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDecreaseTargetSize:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDecreaseTargetSizeRequest + 27, // 36: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupNodes:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupNodesRequest + 32, // 37: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTemplateNodeInfo:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTemplateNodeInfoRequest + 35, // 38: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupGetOptions:input_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsRequest + 4, // 39: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroups:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupsResponse + 6, // 40: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupForNode:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupForNodeResponse + 8, // 41: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingNodePrice:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingNodePriceResponse + 10, // 42: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.PricingPodPrice:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.PricingPodPriceResponse + 12, // 43: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GPULabel:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GPULabelResponse + 14, // 44: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.GetAvailableGPUTypes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.GetAvailableGPUTypesResponse + 16, // 45: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Cleanup:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.CleanupResponse + 18, // 46: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.Refresh:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.RefreshResponse + 20, // 47: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTargetSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTargetSizeResponse + 22, // 48: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupIncreaseSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupIncreaseSizeResponse + 24, // 49: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDeleteNodes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDeleteNodesResponse + 26, // 50: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupDecreaseTargetSize:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupDecreaseTargetSizeResponse + 28, // 51: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupNodes:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupNodesResponse + 33, // 52: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupTemplateNodeInfo:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupTemplateNodeInfoResponse + 36, // 53: clusterautoscaler.cloudprovider.v1.externalgrpc.CloudProvider.NodeGroupGetOptions:output_type -> clusterautoscaler.cloudprovider.v1.externalgrpc.NodeGroupAutoscalingOptionsResponse + 39, // [39:54] is the sub-list for method output_type + 24, // [24:39] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_cloudprovider_externalgrpc_protos_externalgrpc_proto_init() } diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto index f83022f5b9a3..412d46bea40f 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto +++ b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto @@ -354,6 +354,9 @@ message NodeGroupAutoscalingOptions { // ScaleDownUnreadyTime represents how long an unready node should be // unneeded before it is eligible for scale down. k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownUnreadyTime = 4; + + // MaxNodeProvisionTime time CA waits for node to be provisioned + k8s.io.apimachinery.pkg.apis.meta.v1.Duration MaxNodeProvisionTime = 5; } message NodeGroupAutoscalingOptionsRequest { diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go index 187820ef1d9c..acbc96b2573d 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go @@ -15,6 +15,10 @@ limitations under the License. */ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.12.4 +// source: cloudprovider/externalgrpc/protos/externalgrpc.proto package protos From c4e16816d7a2e3aa6830b65fe2de98a4cd55152b Mon Sep 17 00:00:00 2001 From: AhmedGrati Date: Fri, 4 Aug 2023 15:21:15 +0100 Subject: [PATCH 003/125] docs: add kep to add fswatcher to nanny for automatic nanny configuration Signed-off-by: AhmedGrati --- .../5700-nanny-configuration-reload/README.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 addon-resizer/enhancements/5700-nanny-configuration-reload/README.md diff --git a/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md b/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md new file mode 100644 index 000000000000..5d9bc7e5b5d6 --- /dev/null +++ b/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md @@ -0,0 +1,60 @@ +# KEP-5546: Automatic reload of nanny configuration when updated + + +- [Summary](#summary) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + - [Notes](#notes) + - [Risks and Mitigations](#risks-and-mitigations) +- [Design Details](#design-details) + - [Test Plan](#test-plan) + + +Sure, here's the enhancement proposal in the requested format: + +## Summary +- **Goals:** The goal of this enhancement is to improve the user experience for applying nanny configuration changes in the addon-resizer 1.8 when used with the metrics server. The proposed solution involves automatically reloading the nanny configuration whenever changes occur, eliminating the need for manual intervention and sidecar containers. +- **Non-Goals:** This proposal does not aim to update the functional behavior of the addon-resizer. + +## Proposal +The proposed solution involves updating the addon-resizer with the following steps: +- Create a file system watcher using `fsnotify` under `utils/fswatcher` to watch nanny configurations' changes. It should run as a goroutine in the background. +- Detect changes of the nanny configurations' file using the created `fswatcher` trigger the reloading process when configuration changes are detected. Events should be sent in a channel. +- Re-execute the method responsible for building the NannyConfiguration `loadNannyConfiguration` to apply the updated configuration to the addon-resizer. +- Proper error handling should be implemented to manage scenarios where the configuration file is temporarily inaccessible or if there are parsing errors in the configuration file. + +### Risks and Mitigations +- There is a potential risk of filesystem-related issues causing the file watcher to malfunction. Proper testing and error handling should be implemented to handle such scenarios gracefully. +- Errors in the configuration file could lead to unexpected behavior or crashes. The addon-resizer should handle parsing errors and fall back to the previous working configuration if necessary. + +## Design Details +- Create a new package for the `fswatcher` under `utils/fswatcher`. It would contain the `fswatcher` struct and methods and unit-tests. + - `FsWatcher` struct would look similar to this: + ```go + type FsWatcher struct { + *fsnotify.Watcher + + Events chan struct{} + ratelimit time.Duration + names []string + paths map[string]struct{} + } + ``` + - Implement the following functions: + - `CreateFsWatcher`: Instantiates a new `FsWatcher` and start watching on file system. + - `initWatcher`: Initializes the `fsnotify` watcher and initialize the `paths` that would be watched. + - `add`: Adds a new file to watch. + - `reset`: Re-initializes the `FsWatcher`. + - `watch`: watches for the configured files. +- In the main function, we create a new `FsWatcher` and then we wait in an infinite loop to receive events indicating +filesystem changes. Based on these changes, we re-execute `loadNannyConfiguration` function. + + +### Test Plan +To ensure the proper functioning of the enhanced addon-resizer, the following test plan should be executed: +1. **Unit Tests:** Write unit tests to validate the file watcher's functionality and ensure it triggers events when the configuration file changes. +2. **Manual e2e Tests:** Deploy the addon-resizer with `BaseMemory` of `300Mi` and then we change the `BaseMemory` to `100Mi`. We should observer changes in the behavior of watched pod. + + +[fsnotify]: https://github.com/fsnotify/fsnotify From 555fa4df1c5aee4d462b2f2f8dcd05be46c15a96 Mon Sep 17 00:00:00 2001 From: Mike Tougeron Date: Fri, 4 Aug 2023 15:57:20 -0700 Subject: [PATCH 004/125] Allow using an external secret instead of using the one the Helm chart creates --- charts/cluster-autoscaler/Chart.yaml | 2 +- charts/cluster-autoscaler/README.md | 1 + .../templates/deployment.yaml | 20 +++++++++---------- charts/cluster-autoscaler/values.yaml | 3 +++ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/charts/cluster-autoscaler/Chart.yaml b/charts/cluster-autoscaler/Chart.yaml index c871126adba8..7bbaffd34b6c 100644 --- a/charts/cluster-autoscaler/Chart.yaml +++ b/charts/cluster-autoscaler/Chart.yaml @@ -11,4 +11,4 @@ name: cluster-autoscaler sources: - https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler type: application -version: 9.29.1 +version: 9.29.2 diff --git a/charts/cluster-autoscaler/README.md b/charts/cluster-autoscaler/README.md index ff3aba2e4fff..dd6171b780e7 100644 --- a/charts/cluster-autoscaler/README.md +++ b/charts/cluster-autoscaler/README.md @@ -411,6 +411,7 @@ vpa: | rbac.serviceAccount.name | string | `""` | The name of the ServiceAccount to use. If not set and create is `true`, a name is generated using the fullname template. | | replicaCount | int | `1` | Desired number of pods | | resources | object | `{}` | Pod resource requests and limits. | +| secretKeyRefNameOverride | string | `""` | Overrides the name of the Secret to use when loading the secretKeyRef for AWS and Azure env variables | | securityContext | object | `{}` | [Security context for pod](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) | | service.annotations | object | `{}` | Annotations to add to service | | service.create | bool | `true` | If `true`, a Service will be created. | diff --git a/charts/cluster-autoscaler/templates/deployment.yaml b/charts/cluster-autoscaler/templates/deployment.yaml index ea5ba5c41d50..957398a3bd69 100644 --- a/charts/cluster-autoscaler/templates/deployment.yaml +++ b/charts/cluster-autoscaler/templates/deployment.yaml @@ -132,36 +132,36 @@ spec: valueFrom: secretKeyRef: key: AwsAccessKeyId - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} {{- end }} {{- if .Values.awsSecretAccessKey }} - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: key: AwsSecretAccessKey - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} {{- end }} {{- else if eq .Values.cloudProvider "azure" }} - name: ARM_SUBSCRIPTION_ID valueFrom: secretKeyRef: key: SubscriptionID - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: ARM_RESOURCE_GROUP valueFrom: secretKeyRef: key: ResourceGroup - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: ARM_VM_TYPE valueFrom: secretKeyRef: key: VMType - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: AZURE_CLUSTER_NAME valueFrom: secretKeyRef: key: ClusterName - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} {{- if .Values.azureUseWorkloadIdentityExtension }} - name: ARM_USE_WORKLOAD_IDENTITY_EXTENSION value: "true" @@ -173,22 +173,22 @@ spec: valueFrom: secretKeyRef: key: TenantID - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: ARM_CLIENT_ID valueFrom: secretKeyRef: key: ClientID - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: ARM_CLIENT_SECRET valueFrom: secretKeyRef: key: ClientSecret - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} - name: AZURE_NODE_RESOURCE_GROUP valueFrom: secretKeyRef: key: NodeResourceGroup - name: {{ template "cluster-autoscaler.fullname" . }} + name: {{ default (include "cluster-autoscaler.fullname" .) .Values.secretKeyRefNameOverride }} {{- end }} {{- end }} {{- range $key, $value := .Values.extraEnv }} diff --git a/charts/cluster-autoscaler/values.yaml b/charts/cluster-autoscaler/values.yaml index f414ae65e7c6..a7deb24a7e70 100644 --- a/charts/cluster-autoscaler/values.yaml +++ b/charts/cluster-autoscaler/values.yaml @@ -396,3 +396,6 @@ vpa: updateMode: "Auto" # vpa.containerPolicy -- [ContainerResourcePolicy](https://github.com/kubernetes/autoscaler/blob/vertical-pod-autoscaler/v0.13.0/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L159). The containerName is always et to the deployment's container name. This value is required if VPA is enabled. containerPolicy: {} + +# secretKeyRefNameOverride -- Overrides the name of the Secret to use when loading the secretKeyRef for AWS and Azure env variables +secretKeyRefNameOverride: "" From 46b7f353d57fe1430088d4189e8403d6401586ef Mon Sep 17 00:00:00 2001 From: fgksgf Date: Thu, 10 Aug 2023 16:59:30 +0800 Subject: [PATCH 005/125] fix index out of range --- .../cloudprovider/aws/aws_wrapper.go | 4 +- .../cloudprovider/aws/aws_wrapper_test.go | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go b/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go index b993e615e011..b1d2e5edb5e4 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go @@ -326,7 +326,7 @@ func (m *awsWrapper) getInstanceTypeFromInstanceRequirements(imageId string, req } start = time.Now() - instanceTypes := []string{} + var instanceTypes []string err = m.GetInstanceTypesFromInstanceRequirementsPages(requirementsInput, func(page *ec2.GetInstanceTypesFromInstanceRequirementsOutput, isLastPage bool) bool { for _, instanceType := range page.InstanceTypes { instanceTypes = append(instanceTypes, *instanceType.InstanceType) @@ -334,7 +334,7 @@ func (m *awsWrapper) getInstanceTypeFromInstanceRequirements(imageId string, req return !isLastPage }) observeAWSRequest("GetInstanceTypesFromInstanceRequirements", err, start) - if err != nil { + if err != nil || len(instanceTypes) == 0 { return "", fmt.Errorf("unable to get instance types from requirements") } diff --git a/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go b/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go index 126daee7d346..ddc7a51a201a 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go @@ -695,3 +695,42 @@ func TestBuildLaunchTemplateFromSpec(t *testing.T) { assert.Equal(unit.exp, got) } } + +func TestGetInstanceTypesFromInstanceRequirementsWithEmptyList(t *testing.T) { + e := &ec2Mock{} + awsWrapper := &awsWrapper{ + autoScalingI: nil, + ec2I: e, + eksI: nil, + } + requirements := &ec2.InstanceRequirementsRequest{} + + e.On("DescribeImages", &ec2.DescribeImagesInput{ + ImageIds: []*string{aws.String("123")}, + }).Return(&ec2.DescribeImagesOutput{ + Images: []*ec2.Image{ + { + Architecture: aws.String("x86_64"), + VirtualizationType: aws.String("xen"), + }, + }, + }) + e.On("GetInstanceTypesFromInstanceRequirementsPages", + &ec2.GetInstanceTypesFromInstanceRequirementsInput{ + ArchitectureTypes: []*string{aws.String("x86_64")}, + InstanceRequirements: requirements, + VirtualizationTypes: []*string{aws.String("xen")}, + }, + mock.AnythingOfType("func(*ec2.GetInstanceTypesFromInstanceRequirementsOutput, bool) bool"), + ).Run(func(args mock.Arguments) { + fn := args.Get(1).(func(*ec2.GetInstanceTypesFromInstanceRequirementsOutput, bool) bool) + fn(&ec2.GetInstanceTypesFromInstanceRequirementsOutput{ + InstanceTypes: []*ec2.InstanceTypeInfoFromInstanceRequirements{}, + }, false) + }).Return(nil) + + result, err := awsWrapper.getInstanceTypeFromInstanceRequirements("123", requirements) + assert.Error(t, err) + assert.Contains(t, err.Error(), "unable to get instance types from requirements") + assert.Equal(t, "", result) +} From 0ed75e4490e19f6d64d9180941b44c2d172510a1 Mon Sep 17 00:00:00 2001 From: Yash Khare Date: Tue, 15 Aug 2023 12:28:07 +0530 Subject: [PATCH 006/125] fix: Broken links to testgrid dashboard --- cluster-autoscaler/FAQ.md | 4 ++-- vertical-pod-autoscaler/RELEASE.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cluster-autoscaler/FAQ.md b/cluster-autoscaler/FAQ.md index 17b25a0a8281..6e9b3494c303 100644 --- a/cluster-autoscaler/FAQ.md +++ b/cluster-autoscaler/FAQ.md @@ -125,8 +125,8 @@ Since version 1.0.0 we consider CA as GA. It means that: * We have enough confidence that it does what it is expected to do. Each commit goes through a big suite of unit tests with more than 75% coverage (on average). We have a series of e2e tests that validate that CA works well on - [GCE](https://k8s-testgrid.appspot.com/sig-autoscaling#gce-autoscaling) - and [GKE](https://k8s-testgrid.appspot.com/sig-autoscaling#gke-autoscaling). + [GCE](https://testgrid.k8s.io/sig-autoscaling#gce-autoscaling) + and [GKE](https://testgrid.k8s.io/sig-autoscaling#gke-autoscaling). Due to the missing testing infrastructure, AWS (or any other cloud provider) compatibility tests are not the part of the standard development or release procedure. However there is a number of AWS users who run CA in their production environment and submit new code, patches and bug reports. diff --git a/vertical-pod-autoscaler/RELEASE.md b/vertical-pod-autoscaler/RELEASE.md index 7ff2862c172e..4c3b05a18753 100644 --- a/vertical-pod-autoscaler/RELEASE.md +++ b/vertical-pod-autoscaler/RELEASE.md @@ -23,7 +23,7 @@ We use the issue to communicate what is state of the release. ## Update VPA version const 1. [ ] Wait for all VPA changes that will be in the release to merge. -2. [ ] Wait for [the end to end tests](https://k8s-testgrid.appspot.com/sig-autoscaling-vpa) to run with all VPA changes +2. [ ] Wait for [the end to end tests](https://testgrid.k8s.io/sig-autoscaling-vpa) to run with all VPA changes included. To see what code was actually tested, look for `===== last commit =====` entries in the full `build-log.txt` of a given test run. From 7b12a78174a4d4ffec5add2dfaeb08a3ffc435cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Tue, 15 Aug 2023 12:54:49 +0200 Subject: [PATCH 007/125] feat(hetzner): use less requests while waiting for server create The default is to send a new request every 500ms, this will instead use an exponential backoff while waiting for the server the create. --- .../cloudprovider/hetzner/hetzner_manager.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go index 7c2f45b3d462..2d2afd44a5c1 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go @@ -63,18 +63,19 @@ func newManager() (*hetznerManager, error) { return nil, errors.New("`HCLOUD_TOKEN` is not specified") } - cloudInitBase64 := os.Getenv("HCLOUD_CLOUD_INIT") - if cloudInitBase64 == "" { - return nil, errors.New("`HCLOUD_CLOUD_INIT` is not specified") - } - client := hcloud.NewClient( hcloud.WithToken(token), hcloud.WithHTTPClient(httpClient), hcloud.WithApplication("cluster-autoscaler", version.ClusterAutoscalerVersion), + hcloud.WithPollBackoffFunc(hcloud.ExponentialBackoff(2, 500*time.Millisecond)), ) ctx := context.Background() + + cloudInitBase64 := os.Getenv("HCLOUD_CLOUD_INIT") + if cloudInitBase64 == "" { + return nil, errors.New("`HCLOUD_CLOUD_INIT` is not specified") + } cloudInit, err := base64.StdEncoding.DecodeString(cloudInitBase64) if err != nil { return nil, fmt.Errorf("failed to parse cloud init error: %s", err) From 1e9355e6638c1c99929977ed61843e6f78e78a2f Mon Sep 17 00:00:00 2001 From: fgksgf Date: Wed, 16 Aug 2023 15:27:39 +0800 Subject: [PATCH 008/125] address review comments --- cluster-autoscaler/cloudprovider/aws/aws_wrapper.go | 7 +++++-- cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go b/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go index b1d2e5edb5e4..89ab6aefdb17 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_wrapper.go @@ -334,10 +334,13 @@ func (m *awsWrapper) getInstanceTypeFromInstanceRequirements(imageId string, req return !isLastPage }) observeAWSRequest("GetInstanceTypesFromInstanceRequirements", err, start) - if err != nil || len(instanceTypes) == 0 { - return "", fmt.Errorf("unable to get instance types from requirements") + if err != nil { + return "", fmt.Errorf("unable to get instance types from requirements: %w", err) } + if len(instanceTypes) == 0 { + return "", fmt.Errorf("no instance types found for requirements") + } return instanceTypes[0], nil } diff --git a/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go b/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go index ddc7a51a201a..b5c445434e71 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_wrapper_test.go @@ -731,6 +731,7 @@ func TestGetInstanceTypesFromInstanceRequirementsWithEmptyList(t *testing.T) { result, err := awsWrapper.getInstanceTypeFromInstanceRequirements("123", requirements) assert.Error(t, err) - assert.Contains(t, err.Error(), "unable to get instance types from requirements") + exp := fmt.Errorf("no instance types found for requirements") + assert.EqualError(t, err, exp.Error()) assert.Equal(t, "", result) } From 44820bd741d83e4e130477f5665db2597f9fdfab Mon Sep 17 00:00:00 2001 From: Piotr Betkier Date: Wed, 16 Aug 2023 13:04:24 +0200 Subject: [PATCH 009/125] Update in-place updates AEP adding details to consider --- .../4016-in-place-updates-support/README.md | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/enhancements/4016-in-place-updates-support/README.md b/vertical-pod-autoscaler/enhancements/4016-in-place-updates-support/README.md index 1b73ce1034d6..0a840c0d2550 100644 --- a/vertical-pod-autoscaler/enhancements/4016-in-place-updates-support/README.md +++ b/vertical-pod-autoscaler/enhancements/4016-in-place-updates-support/README.md @@ -185,6 +185,30 @@ There will be also scenarios testing differences between `InPlaceOnly` and `InPl equal to limit). In `InPlaceOnly` pod should not be evicted, request slightly lower than the recommendation will be applied. In the `InPlaceOrRecreate` pod should be evicted and the recommendation applied. +### Details still to consider + +#### Ensure in-place resize request doesn't cause restarts + +Currently the container [resize policy](https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/#container-resize-policies) +can be either `NotRequired` or `RestartContainer`. With `NotRequired` in-place update could still end up +restarting the container if in-place update is not possible, depending on kubelet and container +runtime implementation. However in the proposed design it should be VPA's decision whether to fall back +to restarts or not. + +Extending or changing the existing API for in-place updates is possible, e.g. adding a new +`MustNotRestart` container resize policy. + +#### Should `InPlaceOnly` mode be dropped + +The use case for `InPlaceOnly` is not understood yet. Unless we have a strong signal it solves real +needs we should not implement it. Also VPA cannot ensure no restart would happen unless +*Ensure in-place resize request doesn't cause restarts* (see above) is solved. + +#### Careful with memory scale down + +Downsizing memory may have to be done slowly to prevent OOMs if application starts to allocate rapidly. +Needs more research on how to scale down on memory safely. + ## Implementation History -- 2023-05-10: initial version \ No newline at end of file +- 2023-05-10: initial version From f956800c982e1e18ab9f41dc7826a5786c681925 Mon Sep 17 00:00:00 2001 From: ZhengSheng0524 Date: Thu, 17 Aug 2023 17:23:24 +0800 Subject: [PATCH 010/125] Fix Doc with External gRPC Signed-off-by: ZhengSheng0524 --- cluster-autoscaler/cloudprovider/externalgrpc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/README.md b/cluster-autoscaler/cloudprovider/externalgrpc/README.md index 43561099c0cf..ec3125da26a4 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/README.md +++ b/cluster-autoscaler/cloudprovider/externalgrpc/README.md @@ -1,6 +1,6 @@ # External gRPC Cloud Provider -The Exteral gRPC Cloud Provider provides a plugin system to support out-of-tree cloud provider implementations. +The External gRPC Cloud Provider provides a plugin system to support out-of-tree cloud provider implementations. Cluster Autoscaler adds or removes nodes from the cluster by creating or deleting VMs. To separate the autoscaling logic (the same for all clouds) from the API calls required to execute it (different for each cloud), the latter are hidden behind an interface, `CloudProvider`. Each supported cloud has its own implementation in this repository and `--cloud-provider` flag determines which one will be used. From 6a207c881f4e3d8151615f87b9cb56303989cad3 Mon Sep 17 00:00:00 2001 From: AhmedGrati Date: Wed, 23 Aug 2023 15:19:22 +0100 Subject: [PATCH 011/125] kep: add config file format and structure notes Signed-off-by: AhmedGrati --- .../enhancements/5700-nanny-configuration-reload/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md b/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md index 5d9bc7e5b5d6..c661c57f36a1 100644 --- a/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md +++ b/addon-resizer/enhancements/5700-nanny-configuration-reload/README.md @@ -50,6 +50,7 @@ The proposed solution involves updating the addon-resizer with the following ste - In the main function, we create a new `FsWatcher` and then we wait in an infinite loop to receive events indicating filesystem changes. Based on these changes, we re-execute `loadNannyConfiguration` function. +> **Note:** The expected configuration file format is YAML. It has the same structure as the NannyConfiguration CRD. ### Test Plan To ensure the proper functioning of the enhanced addon-resizer, the following test plan should be executed: From 5c666d3b8ba54b960fcce9e9ea5375c4654e1143 Mon Sep 17 00:00:00 2001 From: Guy Templeton Date: Thu, 24 Aug 2023 13:50:13 +0100 Subject: [PATCH 012/125] CA - Git ignore s390x arch binaries --- cluster-autoscaler/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/cluster-autoscaler/.gitignore b/cluster-autoscaler/.gitignore index 896a52fb3dc0..51dd9c800f30 100644 --- a/cluster-autoscaler/.gitignore +++ b/cluster-autoscaler/.gitignore @@ -1,6 +1,7 @@ cluster-autoscaler cluster-autoscaler-amd64 cluster-autoscaler-arm64 +cluster-autoscaler-s390x cluster_autoscaler .cover From 1b3bbdde85fda828cdf1c10563e4e9588c0792ac Mon Sep 17 00:00:00 2001 From: Jayant Jain Date: Wed, 23 Aug 2023 19:37:01 +0200 Subject: [PATCH 013/125] Add support to filter out pods being deleted. --- cluster-autoscaler/utils/kubernetes/listers.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/utils/kubernetes/listers.go b/cluster-autoscaler/utils/kubernetes/listers.go index 198fdfb37cb0..52e8ee942fdf 100644 --- a/cluster-autoscaler/utils/kubernetes/listers.go +++ b/cluster-autoscaler/utils/kubernetes/listers.go @@ -201,7 +201,9 @@ func (lister *scheduledAndUnschedulablePodLister) List() (scheduledPods []*apiv1 } _, condition := podv1.GetPodCondition(&pod.Status, apiv1.PodScheduled) if condition != nil && condition.Status == apiv1.ConditionFalse && condition.Reason == apiv1.PodReasonUnschedulable { - unschedulablePods = append(unschedulablePods, pod) + if pod.GetDeletionTimestamp() == nil { + unschedulablePods = append(unschedulablePods, pod) + } } } return scheduledPods, unschedulablePods, nil From c4432860537cb9dc7b292c564bbdc34e484c1c16 Mon Sep 17 00:00:00 2001 From: David Benque Date: Fri, 25 Aug 2023 19:56:59 +0200 Subject: [PATCH 014/125] use vpaObject instead of vpaModel to reduce deps of post-processors --- .../routines/capping_post_processor.go | 10 +++--- .../routines/cpu_integer_post_processor.go | 7 ++-- .../cpu_integer_post_processor_test.go | 34 +++++++++++-------- .../routines/recommendation_post_processor.go | 4 +-- .../pkg/recommender/routines/recommender.go | 2 +- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/capping_post_processor.go b/vertical-pod-autoscaler/pkg/recommender/routines/capping_post_processor.go index ad05ee7b597d..e82322802f98 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/capping_post_processor.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/capping_post_processor.go @@ -17,10 +17,10 @@ limitations under the License. package routines import ( + "k8s.io/klog/v2" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" - "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" vpa_utils "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/vpa" - "k8s.io/klog/v2" ) // CappingPostProcessor ensure that the policy is applied to recommendation @@ -30,11 +30,11 @@ type CappingPostProcessor struct{} var _ RecommendationPostProcessor = &CappingPostProcessor{} // Process apply the capping post-processing to the recommendation. (use to be function getCappedRecommendation) -func (c CappingPostProcessor) Process(vpa *model.Vpa, recommendation *vpa_types.RecommendedPodResources, policy *vpa_types.PodResourcePolicy) *vpa_types.RecommendedPodResources { +func (c CappingPostProcessor) Process(vpa *vpa_types.VerticalPodAutoscaler, recommendation *vpa_types.RecommendedPodResources) *vpa_types.RecommendedPodResources { // TODO: maybe rename the vpa_utils.ApplyVPAPolicy to something that mention that it is doing capping only - cappedRecommendation, err := vpa_utils.ApplyVPAPolicy(recommendation, policy) + cappedRecommendation, err := vpa_utils.ApplyVPAPolicy(recommendation, vpa.Spec.ResourcePolicy) if err != nil { - klog.Errorf("Failed to apply policy for VPA %v/%v: %v", vpa.ID.Namespace, vpa.ID.VpaName, err) + klog.Errorf("Failed to apply policy for VPA %v/%v: %v", vpa.GetNamespace(), vpa.GetName(), err) return recommendation } return cappedRecommendation diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor.go b/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor.go index 2c221269c79a..64fb815dc0d1 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor.go @@ -17,11 +17,12 @@ limitations under the License. package routines import ( + "strings" + apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" - "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" - "strings" ) // IntegerCPUPostProcessor ensures that the recommendation delivers an integer value for CPU @@ -40,7 +41,7 @@ var _ RecommendationPostProcessor = &IntegerCPUPostProcessor{} // Process apply the capping post-processing to the recommendation. // For this post processor the CPU value is rounded up to an integer -func (p *IntegerCPUPostProcessor) Process(vpa *model.Vpa, recommendation *vpa_types.RecommendedPodResources, policy *vpa_types.PodResourcePolicy) *vpa_types.RecommendedPodResources { +func (p *IntegerCPUPostProcessor) Process(vpa *vpa_types.VerticalPodAutoscaler, recommendation *vpa_types.RecommendedPodResources) *vpa_types.RecommendedPodResources { amendedRecommendation := recommendation.DeepCopy() diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor_test.go b/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor_test.go index 312baac8d4b5..ad79f5f0c86b 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor_test.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/cpu_integer_post_processor_test.go @@ -17,13 +17,15 @@ limitations under the License. package routines import ( + "testing" + "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" - "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/test" - "testing" ) func TestExtractContainerName(t *testing.T) { @@ -73,15 +75,17 @@ func TestExtractContainerName(t *testing.T) { func TestIntegerCPUPostProcessor_Process(t *testing.T) { tests := []struct { name string - vpa *model.Vpa + vpa *vpa_types.VerticalPodAutoscaler recommendation *vpa_types.RecommendedPodResources want *vpa_types.RecommendedPodResources }{ { name: "No containers match", - vpa: &model.Vpa{Annotations: map[string]string{ - vpaPostProcessorPrefix + "container-other" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, - }}, + vpa: &vpa_types.VerticalPodAutoscaler{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + vpaPostProcessorPrefix + "container-other" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, + }}}, recommendation: &vpa_types.RecommendedPodResources{ ContainerRecommendations: []vpa_types.RecommendedContainerResources{ test.Recommendation().WithContainer("container1").WithTarget("8.6", "200Mi").GetContainerResources(), @@ -97,9 +101,10 @@ func TestIntegerCPUPostProcessor_Process(t *testing.T) { }, { name: "2 containers, 1 matching only", - vpa: &model.Vpa{Annotations: map[string]string{ - vpaPostProcessorPrefix + "container1" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, - }}, + vpa: &vpa_types.VerticalPodAutoscaler{ + ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{ + vpaPostProcessorPrefix + "container1" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, + }}}, recommendation: &vpa_types.RecommendedPodResources{ ContainerRecommendations: []vpa_types.RecommendedContainerResources{ test.Recommendation().WithContainer("container1").WithTarget("8.6", "200Mi").GetContainerResources(), @@ -115,10 +120,11 @@ func TestIntegerCPUPostProcessor_Process(t *testing.T) { }, { name: "2 containers, 2 matching", - vpa: &model.Vpa{Annotations: map[string]string{ - vpaPostProcessorPrefix + "container1" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, - vpaPostProcessorPrefix + "container2" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, - }}, + vpa: &vpa_types.VerticalPodAutoscaler{ + ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{ + vpaPostProcessorPrefix + "container1" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, + vpaPostProcessorPrefix + "container2" + vpaPostProcessorIntegerCPUSuffix: vpaPostProcessorIntegerCPUValue, + }}}, recommendation: &vpa_types.RecommendedPodResources{ ContainerRecommendations: []vpa_types.RecommendedContainerResources{ test.Recommendation().WithContainer("container1").WithTarget("8.6", "200Mi").GetContainerResources(), @@ -136,7 +142,7 @@ func TestIntegerCPUPostProcessor_Process(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { c := IntegerCPUPostProcessor{} - got := c.Process(tt.vpa, tt.recommendation, nil) + got := c.Process(tt.vpa, tt.recommendation) assert.True(t, equalRecommendedPodResources(tt.want, got), "Process(%v, %v, nil)", tt.vpa, tt.recommendation) }) } diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/recommendation_post_processor.go b/vertical-pod-autoscaler/pkg/recommender/routines/recommendation_post_processor.go index f73cbb0eccfe..51d9be5ea82e 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/recommendation_post_processor.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/recommendation_post_processor.go @@ -18,11 +18,9 @@ package routines import ( vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" - "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" ) // RecommendationPostProcessor can amend the recommendation according to the defined policies type RecommendationPostProcessor interface { - Process(vpa *model.Vpa, recommendation *vpa_types.RecommendedPodResources, - policy *vpa_types.PodResourcePolicy) *vpa_types.RecommendedPodResources + Process(vpa *vpa_types.VerticalPodAutoscaler, recommendation *vpa_types.RecommendedPodResources) *vpa_types.RecommendedPodResources } diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go b/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go index 564b9b9845a2..1e93b982238e 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go @@ -97,7 +97,7 @@ func (r *recommender) UpdateVPAs() { listOfResourceRecommendation := logic.MapToListOfRecommendedContainerResources(resources) for _, postProcessor := range r.recommendationPostProcessor { - listOfResourceRecommendation = postProcessor.Process(vpa, listOfResourceRecommendation, observedVpa.Spec.ResourcePolicy) + listOfResourceRecommendation = postProcessor.Process(observedVpa, listOfResourceRecommendation) } vpa.UpdateRecommendation(listOfResourceRecommendation) From 07c6996126dc3477797adc1bde8ca14c75bf2c78 Mon Sep 17 00:00:00 2001 From: David Benque Date: Wed, 28 Jun 2023 10:35:12 +0200 Subject: [PATCH 015/125] protect admission against empty keys --- .../pod/recommendation/recommendation_provider.go | 11 ++++++++++- .../recommendation_provider_test.go | 7 ++++++- .../pkg/utils/test/test_recommendation.go | 11 +++++++++++ .../pkg/utils/test/test_utils.go | 15 +++++++++++++-- .../pkg/utils/test/test_vpa.go | 8 ++++++++ .../pkg/utils/vpa/limit_and_request_scaling.go | 14 ++++++++++++++ 6 files changed, 62 insertions(+), 4 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go index cfc37c6a36e6..3c93338f6716 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go @@ -20,10 +20,11 @@ import ( "fmt" core "k8s.io/api/core/v1" + "k8s.io/klog/v2" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/limitrange" vpa_api_util "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/vpa" - "k8s.io/klog/v2" ) // Provider gets current recommendation, annotations and vpaName for the given pod. @@ -109,5 +110,13 @@ func (p *recommendationProvider) GetContainersResourcesForPod(pod *core.Pod, vpa resourcePolicy = vpa.Spec.ResourcePolicy } containerResources := GetContainersResources(pod, resourcePolicy, *recommendedPodResources, containerLimitRange, false, annotations) + + // Ensure that we are not propagating empty resource key if any. + for _, resource := range containerResources { + if resource.RemoveEmptyResourceKeyIfAny() { + klog.Error("An empty resource key was found and purged for pod=%s/%s with vpa=", pod.Namespace, pod.Name, vpa.Name) + } + } + return containerResources, annotations, nil } diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go index 73338fde7ce2..f58e98f1a88e 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go @@ -23,6 +23,7 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/limitrange" "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/test" @@ -60,7 +61,8 @@ func TestUpdateResourceRequests(t *testing.T) { WithContainer(containerName). WithTarget("2", "200Mi"). WithMinAllowed("1", "100Mi"). - WithMaxAllowed("3", "1Gi") + WithMaxAllowed("3", "1Gi"). + WithResourceInTarget("", "666") // Testing that this weird/empty resource will be purged vpa := vpaBuilder.Get() uninitialized := test.Pod().WithName("test_uninitialized"). @@ -309,6 +311,9 @@ func TestUpdateResourceRequests(t *testing.T) { return } + _, foundEmpty := resources[0].Requests[""] + assert.Equal(t, foundEmpty, false, "empty resourceKey have not been purged") + cpuRequest := resources[0].Requests[apiv1.ResourceCPU] assert.Equal(t, tc.expectedCPU.Value(), cpuRequest.Value(), "cpu request doesn't match") diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go b/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go index 410ca9a91b5b..9c67aa430d26 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go @@ -18,6 +18,7 @@ package test import ( apiv1 "k8s.io/api/core/v1" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" ) @@ -25,6 +26,7 @@ import ( type RecommendationBuilder interface { WithContainer(containerName string) RecommendationBuilder WithTarget(cpu, memory string) RecommendationBuilder + WithResource(resource apiv1.ResourceName, value string) RecommendationBuilder WithLowerBound(cpu, memory string) RecommendationBuilder WithUpperBound(cpu, memory string) RecommendationBuilder Get() *vpa_types.RecommendedPodResources @@ -55,6 +57,15 @@ func (b *recommendationBuilder) WithTarget(cpu, memory string) RecommendationBui return &c } +func (b *recommendationBuilder) WithResource(resource apiv1.ResourceName, value string) RecommendationBuilder { + c := *b + if c.target == nil { + c.target = apiv1.ResourceList{} + } + AddResource(c.target, resource, value) + return &c +} + func (b *recommendationBuilder) WithLowerBound(cpu, memory string) RecommendationBuilder { c := *b c.lowerBound = Resources(cpu, memory) diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_utils.go b/vertical-pod-autoscaler/pkg/utils/test/test_utils.go index 598879ffbb70..137982c2b86f 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_utils.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_utils.go @@ -26,12 +26,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/record" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" vpa_types_v1beta1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta1" vpa_lister "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1" vpa_lister_v1beta1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta1" - v1 "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/tools/record" ) var ( @@ -73,6 +74,16 @@ func Resources(cpu, mem string) apiv1.ResourceList { return result } +// AddResource add a resource to the given resource list +func AddResource(rl apiv1.ResourceList, resourceName apiv1.ResourceName, value string) apiv1.ResourceList { + val, _ := resource.ParseQuantity(value) + if rl == nil { + rl = apiv1.ResourceList{} + } + rl[resourceName] = val + return rl +} + // RecommenderAPIMock is a mock of RecommenderAPI type RecommenderAPIMock struct { mock.Mock diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go b/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go index 92e7d3fd4ab2..5bca4ad6e262 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go @@ -22,6 +22,7 @@ import ( autoscaling "k8s.io/api/autoscaling/v1" core "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" + vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" ) @@ -36,6 +37,7 @@ type VerticalPodAutoscalerBuilder interface { WithMaxAllowed(cpu, memory string) VerticalPodAutoscalerBuilder WithControlledValues(mode vpa_types.ContainerControlledValues) VerticalPodAutoscalerBuilder WithTarget(cpu, memory string) VerticalPodAutoscalerBuilder + WithResourceInTarget(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder WithLowerBound(cpu, memory string) VerticalPodAutoscalerBuilder WithTargetRef(targetRef *autoscaling.CrossVersionObjectReference) VerticalPodAutoscalerBuilder WithUpperBound(cpu, memory string) VerticalPodAutoscalerBuilder @@ -134,6 +136,12 @@ func (b *verticalPodAutoscalerBuilder) WithTarget(cpu, memory string) VerticalPo return &c } +func (b *verticalPodAutoscalerBuilder) WithResourceInTarget(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder { + c := *b + c.recommendation = c.recommendation.WithResource(resource, value) + return &c +} + func (b *verticalPodAutoscalerBuilder) WithLowerBound(cpu, memory string) VerticalPodAutoscalerBuilder { c := *b c.recommendation = c.recommendation.WithLowerBound(cpu, memory) diff --git a/vertical-pod-autoscaler/pkg/utils/vpa/limit_and_request_scaling.go b/vertical-pod-autoscaler/pkg/utils/vpa/limit_and_request_scaling.go index c743d2fd4f47..40cd3d284b9c 100644 --- a/vertical-pod-autoscaler/pkg/utils/vpa/limit_and_request_scaling.go +++ b/vertical-pod-autoscaler/pkg/utils/vpa/limit_and_request_scaling.go @@ -172,3 +172,17 @@ func scaleQuantityProportionallyMem(scaledQuantity, scaleBase, scaleResult *reso } return resource.NewQuantity(math.MaxInt64, scaledQuantity.Format), true } + +// RemoveEmptyResourceKeyIfAny ensure that we are not pushing a resource with an empty key. Return true if an empty key was eliminated +func (cr *ContainerResources) RemoveEmptyResourceKeyIfAny() bool { + var found bool + if _, foundEmptyKey := cr.Limits[""]; foundEmptyKey { + delete(cr.Limits, "") + found = true + } + if _, foundEmptyKey := cr.Requests[""]; foundEmptyKey { + delete(cr.Requests, "") + found = true + } + return found +} From 0a58d286384b73f90aad7467bd5cb1aa3382355b Mon Sep 17 00:00:00 2001 From: David Benque Date: Mon, 28 Aug 2023 11:07:24 +0200 Subject: [PATCH 016/125] Update vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go Co-authored-by: Joachim --- .../pod/recommendation/recommendation_provider_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go index f58e98f1a88e..36e64fad9924 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go @@ -311,8 +311,7 @@ func TestUpdateResourceRequests(t *testing.T) { return } - _, foundEmpty := resources[0].Requests[""] - assert.Equal(t, foundEmpty, false, "empty resourceKey have not been purged") + assert.Contains(t, resources, "", "expected empty resource to be removed") cpuRequest := resources[0].Requests[apiv1.ResourceCPU] assert.Equal(t, tc.expectedCPU.Value(), cpuRequest.Value(), "cpu request doesn't match") From 1fbd46b43486303633333b635f1a660f66993fb6 Mon Sep 17 00:00:00 2001 From: David Benque Date: Mon, 28 Aug 2023 12:27:47 +0200 Subject: [PATCH 017/125] Code review --- .../recommendation_provider_test.go | 2 +- .../pkg/utils/test/test_recommendation.go | 19 ++++++++++++++++--- .../pkg/utils/test/test_utils.go | 10 ---------- .../pkg/utils/test/test_vpa.go | 8 +++++--- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go index 36e64fad9924..0ef3e76580c9 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go @@ -62,7 +62,7 @@ func TestUpdateResourceRequests(t *testing.T) { WithTarget("2", "200Mi"). WithMinAllowed("1", "100Mi"). WithMaxAllowed("3", "1Gi"). - WithResourceInTarget("", "666") // Testing that this weird/empty resource will be purged + WithTargetResource("", "666") // Testing that this weird/empty resource will be purged vpa := vpaBuilder.Get() uninitialized := test.Pod().WithName("test_uninitialized"). diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go b/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go index 9c67aa430d26..9f434c03a431 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_recommendation.go @@ -18,6 +18,7 @@ package test import ( apiv1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" vpa_types "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" ) @@ -26,13 +27,15 @@ import ( type RecommendationBuilder interface { WithContainer(containerName string) RecommendationBuilder WithTarget(cpu, memory string) RecommendationBuilder - WithResource(resource apiv1.ResourceName, value string) RecommendationBuilder + WithTargetResource(resource apiv1.ResourceName, value string) RecommendationBuilder WithLowerBound(cpu, memory string) RecommendationBuilder WithUpperBound(cpu, memory string) RecommendationBuilder Get() *vpa_types.RecommendedPodResources GetContainerResources() vpa_types.RecommendedContainerResources } +// TODO part of this interface is repeated in VerticalPodAutoscalerBuilder, we can probably factorize some code + // Recommendation returns a new RecommendationBuilder. func Recommendation() RecommendationBuilder { return &recommendationBuilder{} @@ -57,12 +60,12 @@ func (b *recommendationBuilder) WithTarget(cpu, memory string) RecommendationBui return &c } -func (b *recommendationBuilder) WithResource(resource apiv1.ResourceName, value string) RecommendationBuilder { +func (b *recommendationBuilder) WithTargetResource(resource apiv1.ResourceName, value string) RecommendationBuilder { c := *b if c.target == nil { c.target = apiv1.ResourceList{} } - AddResource(c.target, resource, value) + addResource(c.target, resource, value) return &c } @@ -103,3 +106,13 @@ func (b *recommendationBuilder) GetContainerResources() vpa_types.RecommendedCon UpperBound: b.upperBound, } } + +// addResource add a resource to the given resource list +func addResource(rl apiv1.ResourceList, resourceName apiv1.ResourceName, value string) apiv1.ResourceList { + val, _ := resource.ParseQuantity(value) + if rl == nil { + rl = apiv1.ResourceList{} + } + rl[resourceName] = val + return rl +} diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_utils.go b/vertical-pod-autoscaler/pkg/utils/test/test_utils.go index 137982c2b86f..4dd269a43d3e 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_utils.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_utils.go @@ -74,16 +74,6 @@ func Resources(cpu, mem string) apiv1.ResourceList { return result } -// AddResource add a resource to the given resource list -func AddResource(rl apiv1.ResourceList, resourceName apiv1.ResourceName, value string) apiv1.ResourceList { - val, _ := resource.ParseQuantity(value) - if rl == nil { - rl = apiv1.ResourceList{} - } - rl[resourceName] = val - return rl -} - // RecommenderAPIMock is a mock of RecommenderAPI type RecommenderAPIMock struct { mock.Mock diff --git a/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go b/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go index 5bca4ad6e262..9cb828d9f940 100644 --- a/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go +++ b/vertical-pod-autoscaler/pkg/utils/test/test_vpa.go @@ -37,7 +37,7 @@ type VerticalPodAutoscalerBuilder interface { WithMaxAllowed(cpu, memory string) VerticalPodAutoscalerBuilder WithControlledValues(mode vpa_types.ContainerControlledValues) VerticalPodAutoscalerBuilder WithTarget(cpu, memory string) VerticalPodAutoscalerBuilder - WithResourceInTarget(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder + WithTargetResource(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder WithLowerBound(cpu, memory string) VerticalPodAutoscalerBuilder WithTargetRef(targetRef *autoscaling.CrossVersionObjectReference) VerticalPodAutoscalerBuilder WithUpperBound(cpu, memory string) VerticalPodAutoscalerBuilder @@ -50,6 +50,8 @@ type VerticalPodAutoscalerBuilder interface { Get() *vpa_types.VerticalPodAutoscaler } +// TODO part of this interface is a repetition of RecommendationBuilder, we can probably factorize some code + // VerticalPodAutoscaler returns a new VerticalPodAutoscalerBuilder. func VerticalPodAutoscaler() VerticalPodAutoscalerBuilder { return &verticalPodAutoscalerBuilder{ @@ -136,9 +138,9 @@ func (b *verticalPodAutoscalerBuilder) WithTarget(cpu, memory string) VerticalPo return &c } -func (b *verticalPodAutoscalerBuilder) WithResourceInTarget(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder { +func (b *verticalPodAutoscalerBuilder) WithTargetResource(resource core.ResourceName, value string) VerticalPodAutoscalerBuilder { c := *b - c.recommendation = c.recommendation.WithResource(resource, value) + c.recommendation = c.recommendation.WithTargetResource(resource, value) return &c } From 35b7fa3cea1335ab34e124351fef9b78287ee8cf Mon Sep 17 00:00:00 2001 From: Guy Templeton Date: Mon, 28 Aug 2023 13:51:06 +0100 Subject: [PATCH 018/125] CA - Update k/k vendoring to 1.28.0 --- cluster-autoscaler/go.mod | 86 +- cluster-autoscaler/go.sum | 80 +- .../github.com/containerd/cgroups/.gitignore | 2 + .../github.com/containerd/cgroups/Makefile | 24 + .../containerd/cgroups/Protobuild.toml | 46 + .../github.com/containerd/cgroups/README.md | 204 + .../github.com/containerd/cgroups/blkio.go | 361 + .../github.com/containerd/cgroups/cgroup.go | 543 ++ .../github.com/containerd/cgroups/control.go | 99 + .../github.com/containerd/cgroups/cpu.go | 125 + .../github.com/containerd/cgroups/cpuacct.go | 129 + .../github.com/containerd/cgroups/cpuset.go | 158 + .../github.com/containerd/cgroups/devices.go | 92 + .../github.com/containerd/cgroups/errors.go | 47 + .../github.com/containerd/cgroups/freezer.go | 82 + .../containerd/cgroups/hierarchy.go | 20 + .../github.com/containerd/cgroups/hugetlb.go | 109 + .../github.com/containerd/cgroups/memory.go | 480 ++ .../github.com/containerd/cgroups/named.go | 39 + .../github.com/containerd/cgroups/net_cls.go | 61 + .../github.com/containerd/cgroups/net_prio.go | 65 + .../github.com/containerd/cgroups/opts.go | 61 + .../github.com/containerd/cgroups/paths.go | 106 + .../containerd/cgroups/perf_event.go | 37 + .../github.com/containerd/cgroups/pids.go | 85 + .../github.com/containerd/cgroups/rdma.go | 154 + .../github.com/containerd/cgroups/state.go | 28 + .../containerd/cgroups/subsystem.go | 116 + .../github.com/containerd/cgroups/systemd.go | 158 + .../github.com/containerd/cgroups/ticks.go | 26 + .../github.com/containerd/cgroups/utils.go | 391 ++ .../github.com/containerd/cgroups/v1.go | 73 + .../vendor/golang.org/x/crypto/hkdf/hkdf.go | 93 + .../vendor/golang.org/x/net/html/render.go | 28 +- .../golang.org/x/net/http2/transport.go | 5 +- .../v1beta1/generated.pb.go | 5927 ++++++++++++++--- .../v1beta1/generated.proto | 560 ++ .../admissionregistration/v1beta1/register.go | 4 + .../admissionregistration/v1beta1/types.go | 590 ++ .../v1beta1/types_swagger_doc_generated.go | 174 + .../v1beta1/zz_generated.deepcopy.go | 448 +- .../zz_generated.prerelease-lifecycle.go | 72 + .../api/apidiscovery/v2beta1/generated.proto | 4 +- .../k8s.io/api/apidiscovery/v2beta1/types.go | 4 +- .../vendor/k8s.io/api/core/v1/generated.pb.go | 1865 +++--- .../vendor/k8s.io/api/core/v1/generated.proto | 16 +- .../vendor/k8s.io/api/core/v1/types.go | 27 +- .../core/v1/types_swagger_doc_generated.go | 10 +- .../api/core/v1/zz_generated.deepcopy.go | 11 +- .../pkg/admission/plugin/cel/filter.go | 11 +- .../validatingadmissionpolicy/controller.go | 56 +- .../controller_reconcile.go | 48 +- .../validatingadmissionpolicy/interface.go | 8 +- .../validatingadmissionpolicy/matcher.go | 12 +- .../matching/matching.go | 54 +- .../validatingadmissionpolicy/typechecking.go | 22 +- .../validatingadmissionpolicy/validator.go | 7 +- .../plugin/webhook/matchconditions/matcher.go | 3 +- .../apiserver/pkg/endpoints/installer.go | 6 + .../apiserver/pkg/features/kube_features.go | 11 +- .../server/options/encryptionconfig/config.go | 71 +- .../pkg/storage/etcd3/metrics/metrics.go | 2 +- .../pkg/storage/value/encrypt/aes/aes.go | 86 +- .../value/encrypt/aes/aes_extended_nonce.go | 186 + .../pkg/storage/value/encrypt/aes/cache.go | 91 + .../value/encrypt/envelope/kmsv2/envelope.go | 172 +- .../value/encrypt/envelope/kmsv2/v2/api.pb.go | 96 +- .../value/encrypt/envelope/kmsv2/v2/api.proto | 19 +- .../v1beta1/auditannotation.go | 48 + .../v1beta1/expressionwarning.go | 48 + .../v1beta1/matchresources.go | 90 + .../v1beta1/namedrulewithoperations.go | 95 + .../v1beta1/paramkind.go | 48 + .../admissionregistration/v1beta1/paramref.go | 71 + .../v1beta1/typechecking.go | 44 + .../v1beta1/validatingadmissionpolicy.go | 256 + .../validatingadmissionpolicybinding.go | 247 + .../validatingadmissionpolicybindingspec.go | 72 + .../v1beta1/validatingadmissionpolicyspec.go | 117 + .../validatingadmissionpolicystatus.go | 66 + .../v1beta1/validation.go | 70 + .../admissionregistration/v1beta1/variable.go | 48 + .../core/v1/loadbalanceringress.go | 13 - .../core/v1/persistentvolumestatus.go | 16 +- .../applyconfigurations/internal/internal.go | 266 +- .../discovery/aggregated_discovery.go | 6 +- .../v1beta1/interface.go | 14 + .../v1beta1/validatingadmissionpolicy.go | 89 + .../validatingadmissionpolicybinding.go | 89 + .../k8s.io/client-go/informers/generic.go | 4 + .../v1beta1/admissionregistration_client.go | 10 + .../fake/fake_admissionregistration_client.go | 8 + .../fake/fake_validatingadmissionpolicy.go | 178 + .../fake_validatingadmissionpolicybinding.go | 145 + .../v1beta1/generated_expansion.go | 4 + .../v1beta1/validatingadmissionpolicy.go | 243 + .../validatingadmissionpolicybinding.go | 197 + .../v1beta1/expansion_generated.go | 8 + .../v1beta1/validatingadmissionpolicy.go | 68 + .../validatingadmissionpolicybinding.go | 68 + .../cloud-provider/service/helpers/helper.go | 3 - .../kubernetes/pkg/api/service/warnings.go | 7 + .../k8s.io/kubernetes/pkg/apis/core/types.go | 27 +- .../kubernetes/pkg/apis/core/v1/defaults.go | 13 - .../apis/core/v1/zz_generated.conversion.go | 4 +- .../pkg/apis/core/validation/validation.go | 15 - .../pkg/apis/core/zz_generated.deepcopy.go | 11 +- .../pkg/controller/controller_utils.go | 25 + .../kubernetes/pkg/features/kube_features.go | 19 +- .../kuberuntime_container_linux.go | 49 +- .../kubernetes/pkg/kubelet/prober/worker.go | 21 +- .../kubernetes/pkg/proxy/conntrack/cleanup.go | 4 +- .../kubernetes/pkg/proxy/ipvs/proxier.go | 2 +- .../k8s.io/kubernetes/pkg/proxy/service.go | 42 +- .../k8s.io/kubernetes/pkg/proxy/types.go | 4 +- .../k8s.io/kubernetes/pkg/proxy/util/utils.go | 45 +- .../internal/queue/scheduling_queue.go | 4 + .../kubernetes/pkg/scheduler/schedule_one.go | 1 + .../legacy-cloud-providers/azure/azure.go | 27 - cluster-autoscaler/vendor/modules.txt | 102 +- cluster-autoscaler/version/version.go | 2 +- 121 files changed, 15629 insertions(+), 2430 deletions(-) create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/Makefile create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/Protobuild.toml create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/README.md create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/blkio.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/cgroup.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/control.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/cpu.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuacct.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuset.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/devices.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/errors.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/freezer.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/hierarchy.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/hugetlb.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/memory.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/named.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/net_cls.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/net_prio.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/opts.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/paths.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/perf_event.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/pids.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/rdma.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/state.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/subsystem.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/systemd.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/ticks.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/utils.go create mode 100644 cluster-autoscaler/vendor/github.com/containerd/cgroups/v1.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/crypto/hkdf/hkdf.go create mode 100644 cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_extended_nonce.go create mode 100644 cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/cache.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/auditannotation.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/expressionwarning.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/matchresources.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/namedrulewithoperations.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramkind.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramref.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/typechecking.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybinding.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybindingspec.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicyspec.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicystatus.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validation.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/variable.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicybinding.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicybinding.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index 4fc05b0a531b..a00cdc0af102 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -28,7 +28,7 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.2 golang.org/x/crypto v0.11.0 - golang.org/x/net v0.12.0 + golang.org/x/net v0.13.0 golang.org/x/oauth2 v0.8.0 golang.org/x/sys v0.10.0 google.golang.org/api v0.114.0 @@ -36,17 +36,17 @@ require ( google.golang.org/protobuf v1.30.0 gopkg.in/gcfg.v1 v1.2.3 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.28.0-beta.0 - k8s.io/apimachinery v0.28.0-beta.0 - k8s.io/apiserver v0.28.0-beta.0 - k8s.io/client-go v0.28.0-beta.0 - k8s.io/cloud-provider v0.28.0-beta.0 + k8s.io/api v0.28.0 + k8s.io/apimachinery v0.28.0 + k8s.io/apiserver v0.28.0 + k8s.io/client-go v0.28.0 + k8s.io/cloud-provider v0.28.0 k8s.io/cloud-provider-aws v1.27.0 - k8s.io/component-base v0.28.0-beta.0 - k8s.io/component-helpers v0.28.0-beta.0 + k8s.io/component-base v0.28.0 + k8s.io/component-helpers v0.28.0 k8s.io/klog/v2 v2.100.1 - k8s.io/kubelet v0.28.0-beta.0 - k8s.io/kubernetes v1.28.0-beta.0 + k8s.io/kubelet v0.28.0 + k8s.io/kubernetes v1.28.0 k8s.io/legacy-cloud-providers v0.0.0 k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 sigs.k8s.io/cloud-provider-azure v1.26.2 @@ -178,11 +178,11 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.0.0 // indirect - k8s.io/controller-manager v0.28.0-beta.0 // indirect - k8s.io/cri-api v0.28.0-beta.0 // indirect + k8s.io/controller-manager v0.28.0 // indirect + k8s.io/cri-api v0.28.0 // indirect k8s.io/csi-translation-lib v0.27.0 // indirect k8s.io/dynamic-resource-allocation v0.0.0 // indirect - k8s.io/kms v0.28.0-beta.0 // indirect + k8s.io/kms v0.28.0 // indirect k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect k8s.io/kube-scheduler v0.0.0 // indirect k8s.io/kubectl v0.0.0 // indirect @@ -198,64 +198,64 @@ replace github.com/digitalocean/godo => github.com/digitalocean/godo v1.27.0 replace github.com/rancher/go-rancher => github.com/rancher/go-rancher v0.1.0 -replace k8s.io/api => k8s.io/api v0.28.0-beta.0 +replace k8s.io/api => k8s.io/api v0.28.0 -replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0-beta.0 +replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0 -replace k8s.io/apimachinery => k8s.io/apimachinery v0.28.0-beta.0 +replace k8s.io/apimachinery => k8s.io/apimachinery v0.28.0 -replace k8s.io/apiserver => k8s.io/apiserver v0.28.0-beta.0 +replace k8s.io/apiserver => k8s.io/apiserver v0.28.0 -replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0-beta.0 +replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0 -replace k8s.io/client-go => k8s.io/client-go v0.28.0-beta.0 +replace k8s.io/client-go => k8s.io/client-go v0.28.0 -replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0-beta.0 +replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0 -replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0-beta.0 +replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0 -replace k8s.io/code-generator => k8s.io/code-generator v0.28.0-beta.0 +replace k8s.io/code-generator => k8s.io/code-generator v0.28.0 -replace k8s.io/component-base => k8s.io/component-base v0.28.0-beta.0 +replace k8s.io/component-base => k8s.io/component-base v0.28.0 -replace k8s.io/component-helpers => k8s.io/component-helpers v0.28.0-beta.0 +replace k8s.io/component-helpers => k8s.io/component-helpers v0.28.0 -replace k8s.io/controller-manager => k8s.io/controller-manager v0.28.0-beta.0 +replace k8s.io/controller-manager => k8s.io/controller-manager v0.28.0 -replace k8s.io/cri-api => k8s.io/cri-api v0.28.0-beta.0 +replace k8s.io/cri-api => k8s.io/cri-api v0.28.0 -replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0-beta.0 +replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0 -replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0-beta.0 +replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0 -replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0-beta.0 +replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0 -replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0-beta.0 +replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0 -replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0-beta.0 +replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0 -replace k8s.io/kubectl => k8s.io/kubectl v0.28.0-beta.0 +replace k8s.io/kubectl => k8s.io/kubectl v0.28.0 -replace k8s.io/kubelet => k8s.io/kubelet v0.28.0-beta.0 +replace k8s.io/kubelet => k8s.io/kubelet v0.28.0 -replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0-beta.0 +replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0 -replace k8s.io/metrics => k8s.io/metrics v0.28.0-beta.0 +replace k8s.io/metrics => k8s.io/metrics v0.28.0 -replace k8s.io/mount-utils => k8s.io/mount-utils v0.28.0-beta.0 +replace k8s.io/mount-utils => k8s.io/mount-utils v0.28.0 -replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0-beta.0 +replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0 -replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0-beta.0 +replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0 -replace k8s.io/sample-controller => k8s.io/sample-controller v0.28.0-beta.0 +replace k8s.io/sample-controller => k8s.io/sample-controller v0.28.0 -replace k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0-beta.0 +replace k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0 -replace k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0-beta.0 +replace k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0 -replace k8s.io/kms => k8s.io/kms v0.28.0-beta.0 +replace k8s.io/kms => k8s.io/kms v0.28.0 replace k8s.io/noderesourcetopology-api => k8s.io/noderesourcetopology-api v0.27.0 -replace k8s.io/endpointslice => k8s.io/endpointslice v0.28.0-beta.0 +replace k8s.io/endpointslice => k8s.io/endpointslice v0.28.0 diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 971d1421d687..6cffa2c6a53a 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -773,8 +773,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1166,52 +1166,52 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.28.0-beta.0 h1:RQib3xI/dxXb2TPvSVRLvAjBjOMnU7jD0GwIAbKwBqU= -k8s.io/api v0.28.0-beta.0/go.mod h1:AF3hqmc5wvnZD2G4klXcRB9jBn8XEkr+2KvFbpwbvnw= -k8s.io/apiextensions-apiserver v0.28.0-beta.0 h1:MR2+ED9MR6UEmLLoijQR+l/Lh9BLCuK/+QrVH88BhnY= -k8s.io/apiextensions-apiserver v0.28.0-beta.0/go.mod h1:vWwcuxi3IV/hmPTetF8TDY4IZ1m+58ulhRYyE+nvoZw= -k8s.io/apimachinery v0.28.0-beta.0 h1:n3ksD30Isi22awAww6cnQVC8JhnID1Ow4Jhi7ylEHNY= -k8s.io/apimachinery v0.28.0-beta.0/go.mod h1:xhQIsaL3hXneGluH+0pzF7kr+VYuLS/VcYJxF1xQf+g= -k8s.io/apiserver v0.28.0-beta.0 h1:cBEihWU2oxBKwVOGUGLmj2UfaP8u6R8HtibIUb8IMfo= -k8s.io/apiserver v0.28.0-beta.0/go.mod h1:ManA8E9ARrLN6MJhBcKk9tx0NMLlzF9TduC/YrZk02Q= -k8s.io/client-go v0.28.0-beta.0 h1:qOEJLbK9Keyf3VUwwKap8VvXAcqsITDrRzhaWb/0GHY= -k8s.io/client-go v0.28.0-beta.0/go.mod h1:oCV0v/fHTnc/TUMH0XJORY6kUDh2H6t5DcLv2ISSL/4= -k8s.io/cloud-provider v0.28.0-beta.0 h1:DZ9NWlvtctRPwhAXESMKGpbkj3QFMU01VYWjrmD2tdc= -k8s.io/cloud-provider v0.28.0-beta.0/go.mod h1:UtHxIbNDxSLkDqHKJpaBgE5D7BaWQqizg5XjwN+LU+E= +k8s.io/api v0.28.0 h1:3j3VPWmN9tTDI68NETBWlDiA9qOiGJ7sdKeufehBYsM= +k8s.io/api v0.28.0/go.mod h1:0l8NZJzB0i/etuWnIXcwfIv+xnDOhL3lLW919AWYDuY= +k8s.io/apiextensions-apiserver v0.28.0 h1:CszgmBL8CizEnj4sj7/PtLGey6Na3YgWyGCPONv7E9E= +k8s.io/apiextensions-apiserver v0.28.0/go.mod h1:uRdYiwIuu0SyqJKriKmqEN2jThIJPhVmOWETm8ud1VE= +k8s.io/apimachinery v0.28.0 h1:ScHS2AG16UlYWk63r46oU3D5y54T53cVI5mMJwwqFNA= +k8s.io/apimachinery v0.28.0/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= +k8s.io/apiserver v0.28.0 h1:wVh7bK6Xj7hq+5ntInysTeQRAOqqFoKGUOW2yj8DXrY= +k8s.io/apiserver v0.28.0/go.mod h1:MvLmtxhQ0Tb1SZk4hfJBjs8iqr5nhYeaFSaoEcz7Lk4= +k8s.io/client-go v0.28.0 h1:ebcPRDZsCjpj62+cMk1eGNX1QkMdRmQ6lmz5BLoFWeM= +k8s.io/client-go v0.28.0/go.mod h1:0Asy9Xt3U98RypWJmU1ZrRAGKhP6NqDPmptlAzK2kMc= +k8s.io/cloud-provider v0.28.0 h1:BTIW7b757T+VXB5yqJeajPXsNOmeooopUgfzQueiWvk= +k8s.io/cloud-provider v0.28.0/go.mod h1:u0MGqdlutkTmCJyNrCzIMJ+OhrwQE9x5X8mBTN0R7us= k8s.io/cloud-provider-aws v1.27.0 h1:PF8YrH8QcN6JoXB3Xxlaz84SBDYMPunJuCc0cPuCWXA= k8s.io/cloud-provider-aws v1.27.0/go.mod h1:9vUb5mnVnReSRDBWcBxB1b0HOeEc472iOPmrnwpN9SA= -k8s.io/component-base v0.28.0-beta.0 h1:ipTyy//lORGt/s9oPhhmFea6RApO9Eacy6nqotcs/Fc= -k8s.io/component-base v0.28.0-beta.0/go.mod h1:sQOKkWDP2luVhnhjjq20OJ4lbnxH5yfHJUQMx/r9fuk= -k8s.io/component-helpers v0.28.0-beta.0 h1:QJF2WB1U7KBaO8qaq3ZAjI79e7D/hW1mC6lIV+QhN+Y= -k8s.io/component-helpers v0.28.0-beta.0/go.mod h1:UJg/9Mf/9uNEZYksCU9BKLDucLHOpjllCLfGj26n/HM= -k8s.io/controller-manager v0.28.0-beta.0 h1:gW1b3yhdnV7A1668Mat3+KaTkBXGIsn/fdaHK/X1Ckw= -k8s.io/controller-manager v0.28.0-beta.0/go.mod h1:LVbUQvCBZSOGx3jc48CmOoIhs8PzGOL2r54UBPxwpLk= -k8s.io/cri-api v0.28.0-beta.0 h1:JGtnKV4s7/1Pl2dWJX5s/Cl2074Fgry5TGLpDYkEapE= -k8s.io/cri-api v0.28.0-beta.0/go.mod h1:PgM+VelU7VKINUeaNLdE4fElKXfORIfTRNRM5wFBRCw= -k8s.io/csi-translation-lib v0.28.0-beta.0 h1:gW2Ue12CEyq7GY+qMvGqjm/TOD/ZEOg3u3L1RdnAsKg= -k8s.io/csi-translation-lib v0.28.0-beta.0/go.mod h1:79UJq/pQ2cXA9LQBMWgkA71GbHkl7CaRPV28Qy6P5Jg= -k8s.io/dynamic-resource-allocation v0.28.0-beta.0 h1:+t7wPzsxofD/Qew6QjgZxQsvutvgCgQ1DCNtpIyfS3Y= -k8s.io/dynamic-resource-allocation v0.28.0-beta.0/go.mod h1:9/ma7V6+4Mcgv4s/uYo/AMvwgPz/lJLnl/OkshxuvU8= +k8s.io/component-base v0.28.0 h1:HQKy1enJrOeJlTlN4a6dU09wtmXaUvThC0irImfqyxI= +k8s.io/component-base v0.28.0/go.mod h1:Yyf3+ZypLfMydVzuLBqJ5V7Kx6WwDr/5cN+dFjw1FNk= +k8s.io/component-helpers v0.28.0 h1:ubHUiEF7H/DOx4471pHHsLlH3EGu8jlEvnld5PS4KdI= +k8s.io/component-helpers v0.28.0/go.mod h1:i7hJ/oFhZImqUWwjLFG/yGkLpJ3KFoirY2DLYIMql6Q= +k8s.io/controller-manager v0.28.0 h1:55rmyzwEOnhAZLsuDdDHwVT2sGzkleFY0SqZFKsLN5U= +k8s.io/controller-manager v0.28.0/go.mod h1:WrABGmrpEWBap27eu533RpW5lBnVT5K+u2oc2bDwcmU= +k8s.io/cri-api v0.28.0 h1:TVidtHNi425IaKF50oDD5hRvQuK7wB4NQAfTVOcr9QA= +k8s.io/cri-api v0.28.0/go.mod h1:xXygwvSOGcT/2KXg8sMYTHns2xFem3949kCQn5IS1k4= +k8s.io/csi-translation-lib v0.28.0 h1:X3Kr5aHvH4xutNg4pgdc6RP0h3FOlJGDeui5CLfBeO4= +k8s.io/csi-translation-lib v0.28.0/go.mod h1:HvnmmGZoTobqMU4MD3yQFJ4U4Dq3PxnCfVbJUjky3K0= +k8s.io/dynamic-resource-allocation v0.28.0 h1:LQjb8kRQcvorEHlJVfHLSGued8taykmqROMGozMpHsY= +k8s.io/dynamic-resource-allocation v0.28.0/go.mod h1:x8xyQvoo22hfBEZlKt3nqkzfoTcMOJxiD9mSgDgrd2w= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kms v0.28.0-beta.0 h1:prASYfIi4WYyPEzVy3gcD6GzXPPi+erONwY7WJzIzyU= -k8s.io/kms v0.28.0-beta.0/go.mod h1:2sbvYeLmd4yQ7ULUPvxcm5o4p8fqAJDCZxojSq+5XyM= +k8s.io/kms v0.28.0 h1:BwJhU9qPcJhHLUcQjtelOSjYti+1/caJLr+4jHbKzTA= +k8s.io/kms v0.28.0/go.mod h1:CNU792ls92v2Ye7Vn1jn+xLqYtUSezDZNVu6PLbJyrU= k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/kube-scheduler v0.28.0-beta.0 h1:4i/KTKEcb/XcLIbCsX41uLc3NYJmYu+gkplOlN0qf4M= -k8s.io/kube-scheduler v0.28.0-beta.0/go.mod h1:7G2onKGnrIG3GVFp4QRHDme3yeRjxzpW7cIHUWB7Hr8= -k8s.io/kubectl v0.28.0-beta.0 h1:JdcIdzMbKB2EvD/+s5GRe0iDOqlNnqZnuV+Sh+dAKM0= -k8s.io/kubectl v0.28.0-beta.0/go.mod h1:ZIDpahH089a6xtJMXEBPycVsrvOfLV0M/HbAbS221wU= -k8s.io/kubelet v0.28.0-beta.0 h1:Malnj2eR4MEtskTpqMy5TQu6lPtoBI/j9UJt9zqDLT0= -k8s.io/kubelet v0.28.0-beta.0/go.mod h1:XUNDc0idGsBrFCMI3BoMeUHdNo66nWLw2F0SDCA+Kko= -k8s.io/kubernetes v1.28.0-beta.0 h1:uahjemZxNSVqQ7kplcJT0U+P5cI2C+UGIlO9EeZmSdc= -k8s.io/kubernetes v1.28.0-beta.0/go.mod h1:nhfWVo79v+4OquJkNW3Lx/3qjpT1vRCkwBrnhs9iG+Q= -k8s.io/legacy-cloud-providers v0.28.0-beta.0 h1:WV320jat/DwXHVDPPHIr35VPeRk1DxfU55ItCpbozPI= -k8s.io/legacy-cloud-providers v0.28.0-beta.0/go.mod h1:tBAukoE4hkSH7BewmIEMIqxyGj4AvPitkMnTQ577P2c= -k8s.io/mount-utils v0.28.0-beta.0 h1:RHNbG8SJ7grMsDLVZdxtMigBk/BB+dP6kcSEINXR2ZE= -k8s.io/mount-utils v0.28.0-beta.0/go.mod h1:AyP8LmZSLgpGdFQr+vzHTerlPiGvXUdP99n98Er47jw= +k8s.io/kube-scheduler v0.28.0 h1:Z9zAKRKOiOHcZwhfRYZrOtq+O6+bfWUKmlFuFHlvwHM= +k8s.io/kube-scheduler v0.28.0/go.mod h1:GMTnTM+SCwDlpRRjAC/0TgiGVgwfUbHi38rtYzqcLfc= +k8s.io/kubectl v0.28.0 h1:qhfju0OaU+JGeBlToPeeIg2UJUWP++QwTkpio6nlPKg= +k8s.io/kubectl v0.28.0/go.mod h1:1We+E5nSX3/TVoSQ6y5Bzld5OhTBHZHlKEYl7g/NaTk= +k8s.io/kubelet v0.28.0 h1:H/3JAkLIungVF+WLpqrxhgJ4gzwsbN8VA8LOTYsEX3U= +k8s.io/kubelet v0.28.0/go.mod h1:i8jUg4ltbRusT3ExOhSAeqETuHdoHTZcTT2cPr9RTgc= +k8s.io/kubernetes v1.28.0 h1:p8qq/VoNHnBWinLEi5LO2IvCfzFouN7Jhdz8+L++V+U= +k8s.io/kubernetes v1.28.0/go.mod h1:rBQpjGYlLBV0KuOLw8EG45N5EBCskWiPpi0xy5liHMI= +k8s.io/legacy-cloud-providers v0.28.0 h1:UnIGD5YlU7x4lIbJCPc49ijh0NzZhXh+lE9gWnn4m2U= +k8s.io/legacy-cloud-providers v0.28.0/go.mod h1:sb1fnmuZEVNFJG3Uhs4BO5zN/QA9jG98B0i+zG2Fg+A= +k8s.io/mount-utils v0.28.0 h1:BGYxriZPWTJFCEWDtXsdC1ZPFvI6HbfXCWpjJ42mIw4= +k8s.io/mount-utils v0.28.0/go.mod h1:AyP8LmZSLgpGdFQr+vzHTerlPiGvXUdP99n98Er47jw= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/.gitignore b/cluster-autoscaler/vendor/github.com/containerd/cgroups/.gitignore new file mode 100644 index 000000000000..3465c14cf778 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/.gitignore @@ -0,0 +1,2 @@ +example/example +cmd/cgctl/cgctl diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/Makefile b/cluster-autoscaler/vendor/github.com/containerd/cgroups/Makefile new file mode 100644 index 000000000000..19e6607561d5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/Makefile @@ -0,0 +1,24 @@ +# Copyright The containerd Authors. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +PACKAGES=$(shell go list ./... | grep -v /vendor/) + +all: cgutil + go build -v + +cgutil: + cd cmd/cgctl && go build -v + +proto: + protobuild --quiet ${PACKAGES} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/Protobuild.toml b/cluster-autoscaler/vendor/github.com/containerd/cgroups/Protobuild.toml new file mode 100644 index 000000000000..1c4c802fe12b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/Protobuild.toml @@ -0,0 +1,46 @@ +version = "unstable" +generator = "gogoctrd" +plugins = ["grpc"] + +# Control protoc include paths. Below are usually some good defaults, but feel +# free to try it without them if it works for your project. +[includes] + # Include paths that will be added before all others. Typically, you want to + # treat the root of the project as an include, but this may not be necessary. + # before = ["."] + + # Paths that should be treated as include roots in relation to the vendor + # directory. These will be calculated with the vendor directory nearest the + # target package. + # vendored = ["github.com/gogo/protobuf"] + packages = ["github.com/gogo/protobuf"] + + # Paths that will be added untouched to the end of the includes. We use + # `/usr/local/include` to pickup the common install location of protobuf. + # This is the default. + after = ["/usr/local/include", "/usr/include"] + +# This section maps protobuf imports to Go packages. These will become +# `-M` directives in the call to the go protobuf generator. +[packages] + "gogoproto/gogo.proto" = "github.com/gogo/protobuf/gogoproto" + "google/protobuf/any.proto" = "github.com/gogo/protobuf/types" + "google/protobuf/descriptor.proto" = "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" + "google/protobuf/field_mask.proto" = "github.com/gogo/protobuf/types" + "google/protobuf/timestamp.proto" = "github.com/gogo/protobuf/types" + +# Aggregrate the API descriptors to lock down API changes. +[[descriptors]] +prefix = "github.com/containerd/cgroups/stats/v1" +target = "stats/v1/metrics.pb.txt" +ignore_files = [ + "google/protobuf/descriptor.proto", + "gogoproto/gogo.proto" +] +[[descriptors]] +prefix = "github.com/containerd/cgroups/v2/stats" +target = "v2/stats/metrics.pb.txt" +ignore_files = [ + "google/protobuf/descriptor.proto", + "gogoproto/gogo.proto" +] diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/README.md b/cluster-autoscaler/vendor/github.com/containerd/cgroups/README.md new file mode 100644 index 000000000000..d2073af3abc8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/README.md @@ -0,0 +1,204 @@ +# cgroups + +[![Build Status](https://github.com/containerd/cgroups/workflows/CI/badge.svg)](https://github.com/containerd/cgroups/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/containerd/cgroups/branch/main/graph/badge.svg)](https://codecov.io/gh/containerd/cgroups) +[![GoDoc](https://godoc.org/github.com/containerd/cgroups?status.svg)](https://godoc.org/github.com/containerd/cgroups) +[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/cgroups)](https://goreportcard.com/report/github.com/containerd/cgroups) + +Go package for creating, managing, inspecting, and destroying cgroups. +The resources format for settings on the cgroup uses the OCI runtime-spec found +[here](https://github.com/opencontainers/runtime-spec). + +## Examples (v1) + +### Create a new cgroup + +This creates a new cgroup using a static path for all subsystems under `/test`. + +* /sys/fs/cgroup/cpu/test +* /sys/fs/cgroup/memory/test +* etc.... + +It uses a single hierarchy and specifies cpu shares as a resource constraint and +uses the v1 implementation of cgroups. + + +```go +shares := uint64(100) +control, err := cgroups.New(cgroups.V1, cgroups.StaticPath("/test"), &specs.LinuxResources{ + CPU: &specs.LinuxCPU{ + Shares: &shares, + }, +}) +defer control.Delete() +``` + +### Create with systemd slice support + + +```go +control, err := cgroups.New(cgroups.Systemd, cgroups.Slice("system.slice", "runc-test"), &specs.LinuxResources{ + CPU: &specs.CPU{ + Shares: &shares, + }, +}) + +``` + +### Load an existing cgroup + +```go +control, err = cgroups.Load(cgroups.V1, cgroups.StaticPath("/test")) +``` + +### Add a process to the cgroup + +```go +if err := control.Add(cgroups.Process{Pid:1234}); err != nil { +} +``` + +### Update the cgroup + +To update the resources applied in the cgroup + +```go +shares = uint64(200) +if err := control.Update(&specs.LinuxResources{ + CPU: &specs.LinuxCPU{ + Shares: &shares, + }, +}); err != nil { +} +``` + +### Freeze and Thaw the cgroup + +```go +if err := control.Freeze(); err != nil { +} +if err := control.Thaw(); err != nil { +} +``` + +### List all processes in the cgroup or recursively + +```go +processes, err := control.Processes(cgroups.Devices, recursive) +``` + +### Get Stats on the cgroup + +```go +stats, err := control.Stat() +``` + +By adding `cgroups.IgnoreNotExist` all non-existent files will be ignored, e.g. swap memory stats without swap enabled +```go +stats, err := control.Stat(cgroups.IgnoreNotExist) +``` + +### Move process across cgroups + +This allows you to take processes from one cgroup and move them to another. + +```go +err := control.MoveTo(destination) +``` + +### Create subcgroup + +```go +subCgroup, err := control.New("child", resources) +``` + +### Registering for memory events + +This allows you to get notified by an eventfd for v1 memory cgroups events. + +```go +event := cgroups.MemoryThresholdEvent(50 * 1024 * 1024, false) +efd, err := control.RegisterMemoryEvent(event) +``` + +```go +event := cgroups.MemoryPressureEvent(cgroups.MediumPressure, cgroups.DefaultMode) +efd, err := control.RegisterMemoryEvent(event) +``` + +```go +efd, err := control.OOMEventFD() +// or by using RegisterMemoryEvent +event := cgroups.OOMEvent() +efd, err := control.RegisterMemoryEvent(event) +``` + +## Examples (v2/unified) + +### Check that the current system is running cgroups v2 + +```go +var cgroupV2 bool +if cgroups.Mode() == cgroups.Unified { + cgroupV2 = true +} +``` + +### Create a new cgroup + +This creates a new systemd v2 cgroup slice. Systemd slices consider ["-" a special character](https://www.freedesktop.org/software/systemd/man/systemd.slice.html), +so the resulting slice would be located here on disk: + +* /sys/fs/cgroup/my.slice/my-cgroup.slice/my-cgroup-abc.slice + +```go +import ( + cgroupsv2 "github.com/containerd/cgroups/v2" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +res := cgroupsv2.Resources{} +// dummy PID of -1 is used for creating a "general slice" to be used as a parent cgroup. +// see https://github.com/containerd/cgroups/blob/1df78138f1e1e6ee593db155c6b369466f577651/v2/manager.go#L732-L735 +m, err := cgroupsv2.NewSystemd("/", "my-cgroup-abc.slice", -1, &res) +if err != nil { + return err +} +``` + +### Load an existing cgroup + +```go +m, err := cgroupsv2.LoadSystemd("/", "my-cgroup-abc.slice") +if err != nil { + return err +} +``` + +### Delete a cgroup + +```go +m, err := cgroupsv2.LoadSystemd("/", "my-cgroup-abc.slice") +if err != nil { + return err +} +err = m.DeleteSystemd() +if err != nil { + return err +} +``` + +### Attention + +All static path should not include `/sys/fs/cgroup/` prefix, it should start with your own cgroups name + +## Project details + +Cgroups is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). +As a containerd sub-project, you will find the: + + * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md), + * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS), + * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) + +information in our [`containerd/project`](https://github.com/containerd/project) repository. diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/blkio.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/blkio.go new file mode 100644 index 000000000000..f59c75bb5d1f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/blkio.go @@ -0,0 +1,361 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "fmt" + "io" + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +// NewBlkio returns a Blkio controller given the root folder of cgroups. +// It may optionally accept other configuration options, such as ProcRoot(path) +func NewBlkio(root string, options ...func(controller *blkioController)) *blkioController { + ctrl := &blkioController{ + root: filepath.Join(root, string(Blkio)), + procRoot: "/proc", + } + for _, opt := range options { + opt(ctrl) + } + return ctrl +} + +// ProcRoot overrides the default location of the "/proc" filesystem +func ProcRoot(path string) func(controller *blkioController) { + return func(c *blkioController) { + c.procRoot = path + } +} + +type blkioController struct { + root string + procRoot string +} + +func (b *blkioController) Name() Name { + return Blkio +} + +func (b *blkioController) Path(path string) string { + return filepath.Join(b.root, path) +} + +func (b *blkioController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(b.Path(path), defaultDirPerm); err != nil { + return err + } + if resources.BlockIO == nil { + return nil + } + for _, t := range createBlkioSettings(resources.BlockIO) { + if t.value != nil { + if err := retryingWriteFile( + filepath.Join(b.Path(path), "blkio."+t.name), + t.format(t.value), + defaultFilePerm, + ); err != nil { + return err + } + } + } + return nil +} + +func (b *blkioController) Update(path string, resources *specs.LinuxResources) error { + return b.Create(path, resources) +} + +func (b *blkioController) Stat(path string, stats *v1.Metrics) error { + stats.Blkio = &v1.BlkIOStat{} + + var settings []blkioStatSettings + + // Try to read CFQ stats available on all CFQ enabled kernels first + if _, err := os.Lstat(filepath.Join(b.Path(path), "blkio.io_serviced_recursive")); err == nil { + settings = []blkioStatSettings{ + { + name: "sectors_recursive", + entry: &stats.Blkio.SectorsRecursive, + }, + { + name: "io_service_bytes_recursive", + entry: &stats.Blkio.IoServiceBytesRecursive, + }, + { + name: "io_serviced_recursive", + entry: &stats.Blkio.IoServicedRecursive, + }, + { + name: "io_queued_recursive", + entry: &stats.Blkio.IoQueuedRecursive, + }, + { + name: "io_service_time_recursive", + entry: &stats.Blkio.IoServiceTimeRecursive, + }, + { + name: "io_wait_time_recursive", + entry: &stats.Blkio.IoWaitTimeRecursive, + }, + { + name: "io_merged_recursive", + entry: &stats.Blkio.IoMergedRecursive, + }, + { + name: "time_recursive", + entry: &stats.Blkio.IoTimeRecursive, + }, + } + } + + f, err := os.Open(filepath.Join(b.procRoot, "partitions")) + if err != nil { + return err + } + defer f.Close() + + devices, err := getDevices(f) + if err != nil { + return err + } + + var size int + for _, t := range settings { + if err := b.readEntry(devices, path, t.name, t.entry); err != nil { + return err + } + size += len(*t.entry) + } + if size > 0 { + return nil + } + + // Even the kernel is compiled with the CFQ scheduler, the cgroup may not use + // block devices with the CFQ scheduler. If so, we should fallback to throttle.* files. + settings = []blkioStatSettings{ + { + name: "throttle.io_serviced", + entry: &stats.Blkio.IoServicedRecursive, + }, + { + name: "throttle.io_service_bytes", + entry: &stats.Blkio.IoServiceBytesRecursive, + }, + } + for _, t := range settings { + if err := b.readEntry(devices, path, t.name, t.entry); err != nil { + return err + } + } + return nil +} + +func (b *blkioController) readEntry(devices map[deviceKey]string, path, name string, entry *[]*v1.BlkIOEntry) error { + f, err := os.Open(filepath.Join(b.Path(path), "blkio."+name)) + if err != nil { + return err + } + defer f.Close() + sc := bufio.NewScanner(f) + for sc.Scan() { + // format: dev type amount + fields := strings.FieldsFunc(sc.Text(), splitBlkIOStatLine) + if len(fields) < 3 { + if len(fields) == 2 && fields[0] == "Total" { + // skip total line + continue + } else { + return fmt.Errorf("invalid line found while parsing %s: %s", path, sc.Text()) + } + } + major, err := strconv.ParseUint(fields[0], 10, 64) + if err != nil { + return err + } + minor, err := strconv.ParseUint(fields[1], 10, 64) + if err != nil { + return err + } + op := "" + valueField := 2 + if len(fields) == 4 { + op = fields[2] + valueField = 3 + } + v, err := strconv.ParseUint(fields[valueField], 10, 64) + if err != nil { + return err + } + *entry = append(*entry, &v1.BlkIOEntry{ + Device: devices[deviceKey{major, minor}], + Major: major, + Minor: minor, + Op: op, + Value: v, + }) + } + return sc.Err() +} + +func createBlkioSettings(blkio *specs.LinuxBlockIO) []blkioSettings { + settings := []blkioSettings{} + + if blkio.Weight != nil { + settings = append(settings, + blkioSettings{ + name: "weight", + value: blkio.Weight, + format: uintf, + }) + } + if blkio.LeafWeight != nil { + settings = append(settings, + blkioSettings{ + name: "leaf_weight", + value: blkio.LeafWeight, + format: uintf, + }) + } + for _, wd := range blkio.WeightDevice { + if wd.Weight != nil { + settings = append(settings, + blkioSettings{ + name: "weight_device", + value: wd, + format: weightdev, + }) + } + if wd.LeafWeight != nil { + settings = append(settings, + blkioSettings{ + name: "leaf_weight_device", + value: wd, + format: weightleafdev, + }) + } + } + for _, t := range []struct { + name string + list []specs.LinuxThrottleDevice + }{ + { + name: "throttle.read_bps_device", + list: blkio.ThrottleReadBpsDevice, + }, + { + name: "throttle.read_iops_device", + list: blkio.ThrottleReadIOPSDevice, + }, + { + name: "throttle.write_bps_device", + list: blkio.ThrottleWriteBpsDevice, + }, + { + name: "throttle.write_iops_device", + list: blkio.ThrottleWriteIOPSDevice, + }, + } { + for _, td := range t.list { + settings = append(settings, blkioSettings{ + name: t.name, + value: td, + format: throttleddev, + }) + } + } + return settings +} + +type blkioSettings struct { + name string + value interface{} + format func(v interface{}) []byte +} + +type blkioStatSettings struct { + name string + entry *[]*v1.BlkIOEntry +} + +func uintf(v interface{}) []byte { + return []byte(strconv.FormatUint(uint64(*v.(*uint16)), 10)) +} + +func weightdev(v interface{}) []byte { + wd := v.(specs.LinuxWeightDevice) + return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.Weight)) +} + +func weightleafdev(v interface{}) []byte { + wd := v.(specs.LinuxWeightDevice) + return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.LeafWeight)) +} + +func throttleddev(v interface{}) []byte { + td := v.(specs.LinuxThrottleDevice) + return []byte(fmt.Sprintf("%d:%d %d", td.Major, td.Minor, td.Rate)) +} + +func splitBlkIOStatLine(r rune) bool { + return r == ' ' || r == ':' +} + +type deviceKey struct { + major, minor uint64 +} + +// getDevices makes a best effort attempt to read all the devices into a map +// keyed by major and minor number. Since devices may be mapped multiple times, +// we err on taking the first occurrence. +func getDevices(r io.Reader) (map[deviceKey]string, error) { + + var ( + s = bufio.NewScanner(r) + devices = make(map[deviceKey]string) + ) + for i := 0; s.Scan(); i++ { + if i < 2 { + continue + } + fields := strings.Fields(s.Text()) + major, err := strconv.Atoi(fields[0]) + if err != nil { + return nil, err + } + minor, err := strconv.Atoi(fields[1]) + if err != nil { + return nil, err + } + key := deviceKey{ + major: uint64(major), + minor: uint64(minor), + } + if _, ok := devices[key]; ok { + continue + } + devices[key] = filepath.Join("/dev", fields[3]) + } + return devices, s.Err() +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/cgroup.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cgroup.go new file mode 100644 index 000000000000..c0eac5bf19d1 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cgroup.go @@ -0,0 +1,543 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + + v1 "github.com/containerd/cgroups/stats/v1" + + "github.com/opencontainers/runtime-spec/specs-go" +) + +// New returns a new control via the cgroup cgroups interface +func New(hierarchy Hierarchy, path Path, resources *specs.LinuxResources, opts ...InitOpts) (Cgroup, error) { + config := newInitConfig() + for _, o := range opts { + if err := o(config); err != nil { + return nil, err + } + } + subsystems, err := hierarchy() + if err != nil { + return nil, err + } + var active []Subsystem + for _, s := range subsystems { + // check if subsystem exists + if err := initializeSubsystem(s, path, resources); err != nil { + if err == ErrControllerNotActive { + if config.InitCheck != nil { + if skerr := config.InitCheck(s, path, err); skerr != nil { + if skerr != ErrIgnoreSubsystem { + return nil, skerr + } + } + } + continue + } + return nil, err + } + active = append(active, s) + } + return &cgroup{ + path: path, + subsystems: active, + }, nil +} + +// Load will load an existing cgroup and allow it to be controlled +// All static path should not include `/sys/fs/cgroup/` prefix, it should start with your own cgroups name +func Load(hierarchy Hierarchy, path Path, opts ...InitOpts) (Cgroup, error) { + config := newInitConfig() + for _, o := range opts { + if err := o(config); err != nil { + return nil, err + } + } + var activeSubsystems []Subsystem + subsystems, err := hierarchy() + if err != nil { + return nil, err + } + // check that the subsystems still exist, and keep only those that actually exist + for _, s := range pathers(subsystems) { + p, err := path(s.Name()) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil, ErrCgroupDeleted + } + if err == ErrControllerNotActive { + if config.InitCheck != nil { + if skerr := config.InitCheck(s, path, err); skerr != nil { + if skerr != ErrIgnoreSubsystem { + return nil, skerr + } + } + } + continue + } + return nil, err + } + if _, err := os.Lstat(s.Path(p)); err != nil { + if os.IsNotExist(err) { + continue + } + return nil, err + } + activeSubsystems = append(activeSubsystems, s) + } + // if we do not have any active systems then the cgroup is deleted + if len(activeSubsystems) == 0 { + return nil, ErrCgroupDeleted + } + return &cgroup{ + path: path, + subsystems: activeSubsystems, + }, nil +} + +type cgroup struct { + path Path + + subsystems []Subsystem + mu sync.Mutex + err error +} + +// New returns a new sub cgroup +func (c *cgroup) New(name string, resources *specs.LinuxResources) (Cgroup, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return nil, c.err + } + path := subPath(c.path, name) + for _, s := range c.subsystems { + if err := initializeSubsystem(s, path, resources); err != nil { + return nil, err + } + } + return &cgroup{ + path: path, + subsystems: c.subsystems, + }, nil +} + +// Subsystems returns all the subsystems that are currently being +// consumed by the group +func (c *cgroup) Subsystems() []Subsystem { + return c.subsystems +} + +func (c *cgroup) subsystemsFilter(subsystems ...Name) []Subsystem { + if len(subsystems) == 0 { + return c.subsystems + } + + var filteredSubsystems = []Subsystem{} + for _, s := range c.subsystems { + for _, f := range subsystems { + if s.Name() == f { + filteredSubsystems = append(filteredSubsystems, s) + break + } + } + } + + return filteredSubsystems +} + +// Add moves the provided process into the new cgroup. +// Without additional arguments, the process is added to all the cgroup subsystems. +// When giving Add a list of subsystem names, the process is only added to those +// subsystems, provided that they are active in the targeted cgroup. +func (c *cgroup) Add(process Process, subsystems ...Name) error { + return c.add(process, cgroupProcs, subsystems...) +} + +// AddProc moves the provided process id into the new cgroup. +// Without additional arguments, the process with the given id is added to all +// the cgroup subsystems. When giving AddProc a list of subsystem names, the process +// id is only added to those subsystems, provided that they are active in the targeted +// cgroup. +func (c *cgroup) AddProc(pid uint64, subsystems ...Name) error { + return c.add(Process{Pid: int(pid)}, cgroupProcs, subsystems...) +} + +// AddTask moves the provided tasks (threads) into the new cgroup. +// Without additional arguments, the task is added to all the cgroup subsystems. +// When giving AddTask a list of subsystem names, the task is only added to those +// subsystems, provided that they are active in the targeted cgroup. +func (c *cgroup) AddTask(process Process, subsystems ...Name) error { + return c.add(process, cgroupTasks, subsystems...) +} + +func (c *cgroup) add(process Process, pType procType, subsystems ...Name) error { + if process.Pid <= 0 { + return ErrInvalidPid + } + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + for _, s := range pathers(c.subsystemsFilter(subsystems...)) { + p, err := c.path(s.Name()) + if err != nil { + return err + } + err = retryingWriteFile( + filepath.Join(s.Path(p), pType), + []byte(strconv.Itoa(process.Pid)), + defaultFilePerm, + ) + if err != nil { + return err + } + } + return nil +} + +// Delete will remove the control group from each of the subsystems registered +func (c *cgroup) Delete() error { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + var errs []string + for _, s := range c.subsystems { + // kernel prevents cgroups with running process from being removed, check the tree is empty + procs, err := c.processes(s.Name(), true, cgroupProcs) + if err != nil { + return err + } + if len(procs) > 0 { + errs = append(errs, fmt.Sprintf("%s (contains running processes)", string(s.Name()))) + continue + } + if d, ok := s.(deleter); ok { + sp, err := c.path(s.Name()) + if err != nil { + return err + } + if err := d.Delete(sp); err != nil { + errs = append(errs, string(s.Name())) + } + continue + } + if p, ok := s.(pather); ok { + sp, err := c.path(s.Name()) + if err != nil { + return err + } + path := p.Path(sp) + if err := remove(path); err != nil { + errs = append(errs, path) + } + continue + } + } + if len(errs) > 0 { + return fmt.Errorf("cgroups: unable to remove paths %s", strings.Join(errs, ", ")) + } + c.err = ErrCgroupDeleted + return nil +} + +// Stat returns the current metrics for the cgroup +func (c *cgroup) Stat(handlers ...ErrorHandler) (*v1.Metrics, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return nil, c.err + } + if len(handlers) == 0 { + handlers = append(handlers, errPassthrough) + } + var ( + stats = &v1.Metrics{ + CPU: &v1.CPUStat{ + Throttling: &v1.Throttle{}, + Usage: &v1.CPUUsage{}, + }, + } + wg = &sync.WaitGroup{} + errs = make(chan error, len(c.subsystems)) + ) + for _, s := range c.subsystems { + if ss, ok := s.(stater); ok { + sp, err := c.path(s.Name()) + if err != nil { + return nil, err + } + wg.Add(1) + go func() { + defer wg.Done() + if err := ss.Stat(sp, stats); err != nil { + for _, eh := range handlers { + if herr := eh(err); herr != nil { + errs <- herr + } + } + } + }() + } + } + wg.Wait() + close(errs) + for err := range errs { + return nil, err + } + return stats, nil +} + +// Update updates the cgroup with the new resource values provided +// +// Be prepared to handle EBUSY when trying to update a cgroup with +// live processes and other operations like Stats being performed at the +// same time +func (c *cgroup) Update(resources *specs.LinuxResources) error { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + for _, s := range c.subsystems { + if u, ok := s.(updater); ok { + sp, err := c.path(s.Name()) + if err != nil { + return err + } + if err := u.Update(sp, resources); err != nil { + return err + } + } + } + return nil +} + +// Processes returns the processes running inside the cgroup along +// with the subsystem used, pid, and path +func (c *cgroup) Processes(subsystem Name, recursive bool) ([]Process, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return nil, c.err + } + return c.processes(subsystem, recursive, cgroupProcs) +} + +// Tasks returns the tasks running inside the cgroup along +// with the subsystem used, pid, and path +func (c *cgroup) Tasks(subsystem Name, recursive bool) ([]Task, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return nil, c.err + } + return c.processes(subsystem, recursive, cgroupTasks) +} + +func (c *cgroup) processes(subsystem Name, recursive bool, pType procType) ([]Process, error) { + s := c.getSubsystem(subsystem) + sp, err := c.path(subsystem) + if err != nil { + return nil, err + } + if s == nil { + return nil, fmt.Errorf("cgroups: %s doesn't exist in %s subsystem", sp, subsystem) + } + path := s.(pather).Path(sp) + var processes []Process + err = filepath.Walk(path, func(p string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !recursive && info.IsDir() { + if p == path { + return nil + } + return filepath.SkipDir + } + dir, name := filepath.Split(p) + if name != pType { + return nil + } + procs, err := readPids(dir, subsystem, pType) + if err != nil { + return err + } + processes = append(processes, procs...) + return nil + }) + return processes, err +} + +// Freeze freezes the entire cgroup and all the processes inside it +func (c *cgroup) Freeze() error { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + s := c.getSubsystem(Freezer) + if s == nil { + return ErrFreezerNotSupported + } + sp, err := c.path(Freezer) + if err != nil { + return err + } + return s.(*freezerController).Freeze(sp) +} + +// Thaw thaws out the cgroup and all the processes inside it +func (c *cgroup) Thaw() error { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + s := c.getSubsystem(Freezer) + if s == nil { + return ErrFreezerNotSupported + } + sp, err := c.path(Freezer) + if err != nil { + return err + } + return s.(*freezerController).Thaw(sp) +} + +// OOMEventFD returns the memory cgroup's out of memory event fd that triggers +// when processes inside the cgroup receive an oom event. Returns +// ErrMemoryNotSupported if memory cgroups is not supported. +func (c *cgroup) OOMEventFD() (uintptr, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return 0, c.err + } + s := c.getSubsystem(Memory) + if s == nil { + return 0, ErrMemoryNotSupported + } + sp, err := c.path(Memory) + if err != nil { + return 0, err + } + return s.(*memoryController).memoryEvent(sp, OOMEvent()) +} + +// RegisterMemoryEvent allows the ability to register for all v1 memory cgroups +// notifications. +func (c *cgroup) RegisterMemoryEvent(event MemoryEvent) (uintptr, error) { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return 0, c.err + } + s := c.getSubsystem(Memory) + if s == nil { + return 0, ErrMemoryNotSupported + } + sp, err := c.path(Memory) + if err != nil { + return 0, err + } + return s.(*memoryController).memoryEvent(sp, event) +} + +// State returns the state of the cgroup and its processes +func (c *cgroup) State() State { + c.mu.Lock() + defer c.mu.Unlock() + c.checkExists() + if c.err != nil && c.err == ErrCgroupDeleted { + return Deleted + } + s := c.getSubsystem(Freezer) + if s == nil { + return Thawed + } + sp, err := c.path(Freezer) + if err != nil { + return Unknown + } + state, err := s.(*freezerController).state(sp) + if err != nil { + return Unknown + } + return state +} + +// MoveTo does a recursive move subsystem by subsystem of all the processes +// inside the group +func (c *cgroup) MoveTo(destination Cgroup) error { + c.mu.Lock() + defer c.mu.Unlock() + if c.err != nil { + return c.err + } + for _, s := range c.subsystems { + processes, err := c.processes(s.Name(), true, cgroupProcs) + if err != nil { + return err + } + for _, p := range processes { + if err := destination.Add(p); err != nil { + if strings.Contains(err.Error(), "no such process") { + continue + } + return err + } + } + } + return nil +} + +func (c *cgroup) getSubsystem(n Name) Subsystem { + for _, s := range c.subsystems { + if s.Name() == n { + return s + } + } + return nil +} + +func (c *cgroup) checkExists() { + for _, s := range pathers(c.subsystems) { + p, err := c.path(s.Name()) + if err != nil { + return + } + if _, err := os.Lstat(s.Path(p)); err != nil { + if os.IsNotExist(err) { + c.err = ErrCgroupDeleted + return + } + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/control.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/control.go new file mode 100644 index 000000000000..5fcaac6d0566 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/control.go @@ -0,0 +1,99 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "os" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +type procType = string + +const ( + cgroupProcs procType = "cgroup.procs" + cgroupTasks procType = "tasks" + defaultDirPerm = 0755 +) + +// defaultFilePerm is a var so that the test framework can change the filemode +// of all files created when the tests are running. The difference between the +// tests and real world use is that files like "cgroup.procs" will exist when writing +// to a read cgroup filesystem and do not exist prior when running in the tests. +// this is set to a non 0 value in the test code +var defaultFilePerm = os.FileMode(0) + +type Process struct { + // Subsystem is the name of the subsystem that the process / task is in. + Subsystem Name + // Pid is the process id of the process / task. + Pid int + // Path is the full path of the subsystem and location that the process / task is in. + Path string +} + +type Task = Process + +// Cgroup handles interactions with the individual groups to perform +// actions on them as them main interface to this cgroup package +type Cgroup interface { + // New creates a new cgroup under the calling cgroup + New(string, *specs.LinuxResources) (Cgroup, error) + // Add adds a process to the cgroup (cgroup.procs). Without additional arguments, + // the process is added to all the cgroup subsystems. When giving Add a list of + // subsystem names, the process is only added to those subsystems, provided that + // they are active in the targeted cgroup. + Add(Process, ...Name) error + // AddProc adds the process with the given id to the cgroup (cgroup.procs). + // Without additional arguments, the process with the given id is added to all + // the cgroup subsystems. When giving AddProc a list of subsystem names, the process + // id is only added to those subsystems, provided that they are active in the targeted + // cgroup. + AddProc(uint64, ...Name) error + // AddTask adds a process to the cgroup (tasks). Without additional arguments, the + // task is added to all the cgroup subsystems. When giving AddTask a list of subsystem + // names, the task is only added to those subsystems, provided that they are active in + // the targeted cgroup. + AddTask(Process, ...Name) error + // Delete removes the cgroup as a whole + Delete() error + // MoveTo moves all the processes under the calling cgroup to the provided one + // subsystems are moved one at a time + MoveTo(Cgroup) error + // Stat returns the stats for all subsystems in the cgroup + Stat(...ErrorHandler) (*v1.Metrics, error) + // Update updates all the subsystems with the provided resource changes + Update(resources *specs.LinuxResources) error + // Processes returns all the processes in a select subsystem for the cgroup + Processes(Name, bool) ([]Process, error) + // Tasks returns all the tasks in a select subsystem for the cgroup + Tasks(Name, bool) ([]Task, error) + // Freeze freezes or pauses all processes inside the cgroup + Freeze() error + // Thaw thaw or resumes all processes inside the cgroup + Thaw() error + // OOMEventFD returns the memory subsystem's event fd for OOM events + OOMEventFD() (uintptr, error) + // RegisterMemoryEvent returns the memory subsystems event fd for whatever memory event was + // registered for. Can alternatively register for the oom event with this method. + RegisterMemoryEvent(MemoryEvent) (uintptr, error) + // State returns the cgroups current state + State() State + // Subsystems returns all the subsystems in the cgroup + Subsystems() []Subsystem +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpu.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpu.go new file mode 100644 index 000000000000..27024f17b826 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpu.go @@ -0,0 +1,125 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "os" + "path/filepath" + "strconv" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewCpu(root string) *cpuController { + return &cpuController{ + root: filepath.Join(root, string(Cpu)), + } +} + +type cpuController struct { + root string +} + +func (c *cpuController) Name() Name { + return Cpu +} + +func (c *cpuController) Path(path string) string { + return filepath.Join(c.root, path) +} + +func (c *cpuController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(c.Path(path), defaultDirPerm); err != nil { + return err + } + if cpu := resources.CPU; cpu != nil { + for _, t := range []struct { + name string + ivalue *int64 + uvalue *uint64 + }{ + { + name: "rt_period_us", + uvalue: cpu.RealtimePeriod, + }, + { + name: "rt_runtime_us", + ivalue: cpu.RealtimeRuntime, + }, + { + name: "shares", + uvalue: cpu.Shares, + }, + { + name: "cfs_period_us", + uvalue: cpu.Period, + }, + { + name: "cfs_quota_us", + ivalue: cpu.Quota, + }, + } { + var value []byte + if t.uvalue != nil { + value = []byte(strconv.FormatUint(*t.uvalue, 10)) + } else if t.ivalue != nil { + value = []byte(strconv.FormatInt(*t.ivalue, 10)) + } + if value != nil { + if err := retryingWriteFile( + filepath.Join(c.Path(path), "cpu."+t.name), + value, + defaultFilePerm, + ); err != nil { + return err + } + } + } + } + return nil +} + +func (c *cpuController) Update(path string, resources *specs.LinuxResources) error { + return c.Create(path, resources) +} + +func (c *cpuController) Stat(path string, stats *v1.Metrics) error { + f, err := os.Open(filepath.Join(c.Path(path), "cpu.stat")) + if err != nil { + return err + } + defer f.Close() + // get or create the cpu field because cpuacct can also set values on this struct + sc := bufio.NewScanner(f) + for sc.Scan() { + key, v, err := parseKV(sc.Text()) + if err != nil { + return err + } + switch key { + case "nr_periods": + stats.CPU.Throttling.Periods = v + case "nr_throttled": + stats.CPU.Throttling.ThrottledPeriods = v + case "throttled_time": + stats.CPU.Throttling.ThrottledTime = v + } + } + return sc.Err() +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuacct.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuacct.go new file mode 100644 index 000000000000..1022fa379b59 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuacct.go @@ -0,0 +1,129 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" +) + +const nanosecondsInSecond = 1000000000 + +var clockTicks = getClockTicks() + +func NewCpuacct(root string) *cpuacctController { + return &cpuacctController{ + root: filepath.Join(root, string(Cpuacct)), + } +} + +type cpuacctController struct { + root string +} + +func (c *cpuacctController) Name() Name { + return Cpuacct +} + +func (c *cpuacctController) Path(path string) string { + return filepath.Join(c.root, path) +} + +func (c *cpuacctController) Stat(path string, stats *v1.Metrics) error { + user, kernel, err := c.getUsage(path) + if err != nil { + return err + } + total, err := readUint(filepath.Join(c.Path(path), "cpuacct.usage")) + if err != nil { + return err + } + percpu, err := c.percpuUsage(path) + if err != nil { + return err + } + stats.CPU.Usage.Total = total + stats.CPU.Usage.User = user + stats.CPU.Usage.Kernel = kernel + stats.CPU.Usage.PerCPU = percpu + return nil +} + +func (c *cpuacctController) percpuUsage(path string) ([]uint64, error) { + var usage []uint64 + data, err := os.ReadFile(filepath.Join(c.Path(path), "cpuacct.usage_percpu")) + if err != nil { + return nil, err + } + for _, v := range strings.Fields(string(data)) { + u, err := strconv.ParseUint(v, 10, 64) + if err != nil { + return nil, err + } + usage = append(usage, u) + } + return usage, nil +} + +func (c *cpuacctController) getUsage(path string) (user uint64, kernel uint64, err error) { + statPath := filepath.Join(c.Path(path), "cpuacct.stat") + f, err := os.Open(statPath) + if err != nil { + return 0, 0, err + } + defer f.Close() + var ( + raw = make(map[string]uint64) + sc = bufio.NewScanner(f) + ) + for sc.Scan() { + key, v, err := parseKV(sc.Text()) + if err != nil { + return 0, 0, err + } + raw[key] = v + } + if err := sc.Err(); err != nil { + return 0, 0, err + } + for _, t := range []struct { + name string + value *uint64 + }{ + { + name: "user", + value: &user, + }, + { + name: "system", + value: &kernel, + }, + } { + v, ok := raw[t.name] + if !ok { + return 0, 0, fmt.Errorf("expected field %q but not found in %q", t.name, statPath) + } + *t.value = v + } + return (user * nanosecondsInSecond) / clockTicks, (kernel * nanosecondsInSecond) / clockTicks, nil +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuset.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuset.go new file mode 100644 index 000000000000..8b56d3dbaa00 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/cpuset.go @@ -0,0 +1,158 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bytes" + "fmt" + "os" + "path/filepath" + + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewCpuset(root string) *cpusetController { + return &cpusetController{ + root: filepath.Join(root, string(Cpuset)), + } +} + +type cpusetController struct { + root string +} + +func (c *cpusetController) Name() Name { + return Cpuset +} + +func (c *cpusetController) Path(path string) string { + return filepath.Join(c.root, path) +} + +func (c *cpusetController) Create(path string, resources *specs.LinuxResources) error { + if err := c.ensureParent(c.Path(path), c.root); err != nil { + return err + } + if err := os.MkdirAll(c.Path(path), defaultDirPerm); err != nil { + return err + } + if err := c.copyIfNeeded(c.Path(path), filepath.Dir(c.Path(path))); err != nil { + return err + } + if resources.CPU != nil { + for _, t := range []struct { + name string + value string + }{ + { + name: "cpus", + value: resources.CPU.Cpus, + }, + { + name: "mems", + value: resources.CPU.Mems, + }, + } { + if t.value != "" { + if err := retryingWriteFile( + filepath.Join(c.Path(path), "cpuset."+t.name), + []byte(t.value), + defaultFilePerm, + ); err != nil { + return err + } + } + } + } + return nil +} + +func (c *cpusetController) Update(path string, resources *specs.LinuxResources) error { + return c.Create(path, resources) +} + +func (c *cpusetController) getValues(path string) (cpus []byte, mems []byte, err error) { + if cpus, err = os.ReadFile(filepath.Join(path, "cpuset.cpus")); err != nil && !os.IsNotExist(err) { + return + } + if mems, err = os.ReadFile(filepath.Join(path, "cpuset.mems")); err != nil && !os.IsNotExist(err) { + return + } + return cpus, mems, nil +} + +// ensureParent makes sure that the parent directory of current is created +// and populated with the proper cpus and mems files copied from +// it's parent. +func (c *cpusetController) ensureParent(current, root string) error { + parent := filepath.Dir(current) + if _, err := filepath.Rel(root, parent); err != nil { + return nil + } + // Avoid infinite recursion. + if parent == current { + return fmt.Errorf("cpuset: cgroup parent path outside cgroup root") + } + if cleanPath(parent) != root { + if err := c.ensureParent(parent, root); err != nil { + return err + } + } + if err := os.MkdirAll(current, defaultDirPerm); err != nil { + return err + } + return c.copyIfNeeded(current, parent) +} + +// copyIfNeeded copies the cpuset.cpus and cpuset.mems from the parent +// directory to the current directory if the file's contents are 0 +func (c *cpusetController) copyIfNeeded(current, parent string) error { + var ( + err error + currentCpus, currentMems []byte + parentCpus, parentMems []byte + ) + if currentCpus, currentMems, err = c.getValues(current); err != nil { + return err + } + if parentCpus, parentMems, err = c.getValues(parent); err != nil { + return err + } + if isEmpty(currentCpus) { + if err := retryingWriteFile( + filepath.Join(current, "cpuset.cpus"), + parentCpus, + defaultFilePerm, + ); err != nil { + return err + } + } + if isEmpty(currentMems) { + if err := retryingWriteFile( + filepath.Join(current, "cpuset.mems"), + parentMems, + defaultFilePerm, + ); err != nil { + return err + } + } + return nil +} + +func isEmpty(b []byte) bool { + return len(bytes.Trim(b, "\n")) == 0 +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/devices.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/devices.go new file mode 100644 index 000000000000..7792566d5ee4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/devices.go @@ -0,0 +1,92 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "fmt" + "os" + "path/filepath" + + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +const ( + allowDeviceFile = "devices.allow" + denyDeviceFile = "devices.deny" + wildcard = -1 +) + +func NewDevices(root string) *devicesController { + return &devicesController{ + root: filepath.Join(root, string(Devices)), + } +} + +type devicesController struct { + root string +} + +func (d *devicesController) Name() Name { + return Devices +} + +func (d *devicesController) Path(path string) string { + return filepath.Join(d.root, path) +} + +func (d *devicesController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(d.Path(path), defaultDirPerm); err != nil { + return err + } + for _, device := range resources.Devices { + file := denyDeviceFile + if device.Allow { + file = allowDeviceFile + } + if device.Type == "" { + device.Type = "a" + } + if err := retryingWriteFile( + filepath.Join(d.Path(path), file), + []byte(deviceString(device)), + defaultFilePerm, + ); err != nil { + return err + } + } + return nil +} + +func (d *devicesController) Update(path string, resources *specs.LinuxResources) error { + return d.Create(path, resources) +} + +func deviceString(device specs.LinuxDeviceCgroup) string { + return fmt.Sprintf("%s %s:%s %s", + device.Type, + deviceNumber(device.Major), + deviceNumber(device.Minor), + device.Access, + ) +} + +func deviceNumber(number *int64) string { + if number == nil || *number == wildcard { + return "*" + } + return fmt.Sprint(*number) +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/errors.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/errors.go new file mode 100644 index 000000000000..f1ad8315c81e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/errors.go @@ -0,0 +1,47 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "errors" + "os" +) + +var ( + ErrInvalidPid = errors.New("cgroups: pid must be greater than 0") + ErrMountPointNotExist = errors.New("cgroups: cgroup mountpoint does not exist") + ErrInvalidFormat = errors.New("cgroups: parsing file with invalid format failed") + ErrFreezerNotSupported = errors.New("cgroups: freezer cgroup not supported on this system") + ErrMemoryNotSupported = errors.New("cgroups: memory cgroup not supported on this system") + ErrCgroupDeleted = errors.New("cgroups: cgroup deleted") + ErrNoCgroupMountDestination = errors.New("cgroups: cannot find cgroup mount destination") +) + +// ErrorHandler is a function that handles and acts on errors +type ErrorHandler func(err error) error + +// IgnoreNotExist ignores any errors that are for not existing files +func IgnoreNotExist(err error) error { + if os.IsNotExist(err) { + return nil + } + return err +} + +func errPassthrough(err error) error { + return err +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/freezer.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/freezer.go new file mode 100644 index 000000000000..5783f0dcc741 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/freezer.go @@ -0,0 +1,82 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "os" + "path/filepath" + "strings" + "time" +) + +func NewFreezer(root string) *freezerController { + return &freezerController{ + root: filepath.Join(root, string(Freezer)), + } +} + +type freezerController struct { + root string +} + +func (f *freezerController) Name() Name { + return Freezer +} + +func (f *freezerController) Path(path string) string { + return filepath.Join(f.root, path) +} + +func (f *freezerController) Freeze(path string) error { + return f.waitState(path, Frozen) +} + +func (f *freezerController) Thaw(path string) error { + return f.waitState(path, Thawed) +} + +func (f *freezerController) changeState(path string, state State) error { + return retryingWriteFile( + filepath.Join(f.root, path, "freezer.state"), + []byte(strings.ToUpper(string(state))), + defaultFilePerm, + ) +} + +func (f *freezerController) state(path string) (State, error) { + current, err := os.ReadFile(filepath.Join(f.root, path, "freezer.state")) + if err != nil { + return "", err + } + return State(strings.ToLower(strings.TrimSpace(string(current)))), nil +} + +func (f *freezerController) waitState(path string, state State) error { + for { + if err := f.changeState(path, state); err != nil { + return err + } + current, err := f.state(path) + if err != nil { + return err + } + if current == state { + return nil + } + time.Sleep(1 * time.Millisecond) + } +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/hierarchy.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/hierarchy.go new file mode 100644 index 000000000000..ca3f1b9380b7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/hierarchy.go @@ -0,0 +1,20 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +// Hierarchy enables both unified and split hierarchy for cgroups +type Hierarchy func() ([]Subsystem, error) diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/hugetlb.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/hugetlb.go new file mode 100644 index 000000000000..c0eb03b24da3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/hugetlb.go @@ -0,0 +1,109 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewHugetlb(root string) (*hugetlbController, error) { + sizes, err := hugePageSizes() + if err != nil { + return nil, err + } + + return &hugetlbController{ + root: filepath.Join(root, string(Hugetlb)), + sizes: sizes, + }, nil +} + +type hugetlbController struct { + root string + sizes []string +} + +func (h *hugetlbController) Name() Name { + return Hugetlb +} + +func (h *hugetlbController) Path(path string) string { + return filepath.Join(h.root, path) +} + +func (h *hugetlbController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(h.Path(path), defaultDirPerm); err != nil { + return err + } + for _, limit := range resources.HugepageLimits { + if err := retryingWriteFile( + filepath.Join(h.Path(path), strings.Join([]string{"hugetlb", limit.Pagesize, "limit_in_bytes"}, ".")), + []byte(strconv.FormatUint(limit.Limit, 10)), + defaultFilePerm, + ); err != nil { + return err + } + } + return nil +} + +func (h *hugetlbController) Stat(path string, stats *v1.Metrics) error { + for _, size := range h.sizes { + s, err := h.readSizeStat(path, size) + if err != nil { + return err + } + stats.Hugetlb = append(stats.Hugetlb, s) + } + return nil +} + +func (h *hugetlbController) readSizeStat(path, size string) (*v1.HugetlbStat, error) { + s := v1.HugetlbStat{ + Pagesize: size, + } + for _, t := range []struct { + name string + value *uint64 + }{ + { + name: "usage_in_bytes", + value: &s.Usage, + }, + { + name: "max_usage_in_bytes", + value: &s.Max, + }, + { + name: "failcnt", + value: &s.Failcnt, + }, + } { + v, err := readUint(filepath.Join(h.Path(path), strings.Join([]string{"hugetlb", size, t.name}, "."))) + if err != nil { + return nil, err + } + *t.value = v + } + return &s, nil +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/memory.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/memory.go new file mode 100644 index 000000000000..e271866ef94f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/memory.go @@ -0,0 +1,480 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "fmt" + "io" + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" + "golang.org/x/sys/unix" +) + +// MemoryEvent is an interface that V1 memory Cgroup notifications implement. Arg returns the +// file name whose fd should be written to "cgroups.event_control". EventFile returns the name of +// the file that supports the notification api e.g. "memory.usage_in_bytes". +type MemoryEvent interface { + Arg() string + EventFile() string +} + +type memoryThresholdEvent struct { + threshold uint64 + swap bool +} + +// MemoryThresholdEvent returns a new memory threshold event to be used with RegisterMemoryEvent. +// If swap is true, the event will be registered using memory.memsw.usage_in_bytes +func MemoryThresholdEvent(threshold uint64, swap bool) MemoryEvent { + return &memoryThresholdEvent{ + threshold, + swap, + } +} + +func (m *memoryThresholdEvent) Arg() string { + return strconv.FormatUint(m.threshold, 10) +} + +func (m *memoryThresholdEvent) EventFile() string { + if m.swap { + return "memory.memsw.usage_in_bytes" + } + return "memory.usage_in_bytes" +} + +type oomEvent struct{} + +// OOMEvent returns a new oom event to be used with RegisterMemoryEvent. +func OOMEvent() MemoryEvent { + return &oomEvent{} +} + +func (oom *oomEvent) Arg() string { + return "" +} + +func (oom *oomEvent) EventFile() string { + return "memory.oom_control" +} + +type memoryPressureEvent struct { + pressureLevel MemoryPressureLevel + hierarchy EventNotificationMode +} + +// MemoryPressureEvent returns a new memory pressure event to be used with RegisterMemoryEvent. +func MemoryPressureEvent(pressureLevel MemoryPressureLevel, hierarchy EventNotificationMode) MemoryEvent { + return &memoryPressureEvent{ + pressureLevel, + hierarchy, + } +} + +func (m *memoryPressureEvent) Arg() string { + return string(m.pressureLevel) + "," + string(m.hierarchy) +} + +func (m *memoryPressureEvent) EventFile() string { + return "memory.pressure_level" +} + +// MemoryPressureLevel corresponds to the memory pressure levels defined +// for memory cgroups. +type MemoryPressureLevel string + +// The three memory pressure levels are as follows. +// - The "low" level means that the system is reclaiming memory for new +// allocations. Monitoring this reclaiming activity might be useful for +// maintaining cache level. Upon notification, the program (typically +// "Activity Manager") might analyze vmstat and act in advance (i.e. +// prematurely shutdown unimportant services). +// - The "medium" level means that the system is experiencing medium memory +// pressure, the system might be making swap, paging out active file caches, +// etc. Upon this event applications may decide to further analyze +// vmstat/zoneinfo/memcg or internal memory usage statistics and free any +// resources that can be easily reconstructed or re-read from a disk. +// - The "critical" level means that the system is actively thrashing, it is +// about to out of memory (OOM) or even the in-kernel OOM killer is on its +// way to trigger. Applications should do whatever they can to help the +// system. It might be too late to consult with vmstat or any other +// statistics, so it is advisable to take an immediate action. +// "https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt" Section 11 +const ( + LowPressure MemoryPressureLevel = "low" + MediumPressure MemoryPressureLevel = "medium" + CriticalPressure MemoryPressureLevel = "critical" +) + +// EventNotificationMode corresponds to the notification modes +// for the memory cgroups pressure level notifications. +type EventNotificationMode string + +// There are three optional modes that specify different propagation behavior: +// - "default": this is the default behavior specified above. This mode is the +// same as omitting the optional mode parameter, preserved by backwards +// compatibility. +// - "hierarchy": events always propagate up to the root, similar to the default +// behavior, except that propagation continues regardless of whether there are +// event listeners at each level, with the "hierarchy" mode. In the above +// example, groups A, B, and C will receive notification of memory pressure. +// - "local": events are pass-through, i.e. they only receive notifications when +// memory pressure is experienced in the memcg for which the notification is +// registered. In the above example, group C will receive notification if +// registered for "local" notification and the group experiences memory +// pressure. However, group B will never receive notification, regardless if +// there is an event listener for group C or not, if group B is registered for +// local notification. +// "https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt" Section 11 +const ( + DefaultMode EventNotificationMode = "default" + LocalMode EventNotificationMode = "local" + HierarchyMode EventNotificationMode = "hierarchy" +) + +// NewMemory returns a Memory controller given the root folder of cgroups. +// It may optionally accept other configuration options, such as IgnoreModules(...) +func NewMemory(root string, options ...func(*memoryController)) *memoryController { + mc := &memoryController{ + root: filepath.Join(root, string(Memory)), + ignored: map[string]struct{}{}, + } + for _, opt := range options { + opt(mc) + } + return mc +} + +// IgnoreModules configure the memory controller to not read memory metrics for some +// module names (e.g. passing "memsw" would avoid all the memory.memsw.* entries) +func IgnoreModules(names ...string) func(*memoryController) { + return func(mc *memoryController) { + for _, name := range names { + mc.ignored[name] = struct{}{} + } + } +} + +// OptionalSwap allows the memory controller to not fail if cgroups is not accounting +// Swap memory (there are no memory.memsw.* entries) +func OptionalSwap() func(*memoryController) { + return func(mc *memoryController) { + _, err := os.Stat(filepath.Join(mc.root, "memory.memsw.usage_in_bytes")) + if os.IsNotExist(err) { + mc.ignored["memsw"] = struct{}{} + } + } +} + +type memoryController struct { + root string + ignored map[string]struct{} +} + +func (m *memoryController) Name() Name { + return Memory +} + +func (m *memoryController) Path(path string) string { + return filepath.Join(m.root, path) +} + +func (m *memoryController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(m.Path(path), defaultDirPerm); err != nil { + return err + } + if resources.Memory == nil { + return nil + } + return m.set(path, getMemorySettings(resources)) +} + +func (m *memoryController) Update(path string, resources *specs.LinuxResources) error { + if resources.Memory == nil { + return nil + } + g := func(v *int64) bool { + return v != nil && *v > 0 + } + settings := getMemorySettings(resources) + if g(resources.Memory.Limit) && g(resources.Memory.Swap) { + // if the updated swap value is larger than the current memory limit set the swap changes first + // then set the memory limit as swap must always be larger than the current limit + current, err := readUint(filepath.Join(m.Path(path), "memory.limit_in_bytes")) + if err != nil { + return err + } + if current < uint64(*resources.Memory.Swap) { + settings[0], settings[1] = settings[1], settings[0] + } + } + return m.set(path, settings) +} + +func (m *memoryController) Stat(path string, stats *v1.Metrics) error { + fMemStat, err := os.Open(filepath.Join(m.Path(path), "memory.stat")) + if err != nil { + return err + } + defer fMemStat.Close() + stats.Memory = &v1.MemoryStat{ + Usage: &v1.MemoryEntry{}, + Swap: &v1.MemoryEntry{}, + Kernel: &v1.MemoryEntry{}, + KernelTCP: &v1.MemoryEntry{}, + } + if err := m.parseStats(fMemStat, stats.Memory); err != nil { + return err + } + + fMemOomControl, err := os.Open(filepath.Join(m.Path(path), "memory.oom_control")) + if err != nil { + return err + } + defer fMemOomControl.Close() + stats.MemoryOomControl = &v1.MemoryOomControl{} + if err := m.parseOomControlStats(fMemOomControl, stats.MemoryOomControl); err != nil { + return err + } + for _, t := range []struct { + module string + entry *v1.MemoryEntry + }{ + { + module: "", + entry: stats.Memory.Usage, + }, + { + module: "memsw", + entry: stats.Memory.Swap, + }, + { + module: "kmem", + entry: stats.Memory.Kernel, + }, + { + module: "kmem.tcp", + entry: stats.Memory.KernelTCP, + }, + } { + if _, ok := m.ignored[t.module]; ok { + continue + } + for _, tt := range []struct { + name string + value *uint64 + }{ + { + name: "usage_in_bytes", + value: &t.entry.Usage, + }, + { + name: "max_usage_in_bytes", + value: &t.entry.Max, + }, + { + name: "failcnt", + value: &t.entry.Failcnt, + }, + { + name: "limit_in_bytes", + value: &t.entry.Limit, + }, + } { + parts := []string{"memory"} + if t.module != "" { + parts = append(parts, t.module) + } + parts = append(parts, tt.name) + v, err := readUint(filepath.Join(m.Path(path), strings.Join(parts, "."))) + if err != nil { + return err + } + *tt.value = v + } + } + return nil +} + +func (m *memoryController) parseStats(r io.Reader, stat *v1.MemoryStat) error { + var ( + raw = make(map[string]uint64) + sc = bufio.NewScanner(r) + line int + ) + for sc.Scan() { + key, v, err := parseKV(sc.Text()) + if err != nil { + return fmt.Errorf("%d: %v", line, err) + } + raw[key] = v + line++ + } + if err := sc.Err(); err != nil { + return err + } + stat.Cache = raw["cache"] + stat.RSS = raw["rss"] + stat.RSSHuge = raw["rss_huge"] + stat.MappedFile = raw["mapped_file"] + stat.Dirty = raw["dirty"] + stat.Writeback = raw["writeback"] + stat.PgPgIn = raw["pgpgin"] + stat.PgPgOut = raw["pgpgout"] + stat.PgFault = raw["pgfault"] + stat.PgMajFault = raw["pgmajfault"] + stat.InactiveAnon = raw["inactive_anon"] + stat.ActiveAnon = raw["active_anon"] + stat.InactiveFile = raw["inactive_file"] + stat.ActiveFile = raw["active_file"] + stat.Unevictable = raw["unevictable"] + stat.HierarchicalMemoryLimit = raw["hierarchical_memory_limit"] + stat.HierarchicalSwapLimit = raw["hierarchical_memsw_limit"] + stat.TotalCache = raw["total_cache"] + stat.TotalRSS = raw["total_rss"] + stat.TotalRSSHuge = raw["total_rss_huge"] + stat.TotalMappedFile = raw["total_mapped_file"] + stat.TotalDirty = raw["total_dirty"] + stat.TotalWriteback = raw["total_writeback"] + stat.TotalPgPgIn = raw["total_pgpgin"] + stat.TotalPgPgOut = raw["total_pgpgout"] + stat.TotalPgFault = raw["total_pgfault"] + stat.TotalPgMajFault = raw["total_pgmajfault"] + stat.TotalInactiveAnon = raw["total_inactive_anon"] + stat.TotalActiveAnon = raw["total_active_anon"] + stat.TotalInactiveFile = raw["total_inactive_file"] + stat.TotalActiveFile = raw["total_active_file"] + stat.TotalUnevictable = raw["total_unevictable"] + return nil +} + +func (m *memoryController) parseOomControlStats(r io.Reader, stat *v1.MemoryOomControl) error { + var ( + raw = make(map[string]uint64) + sc = bufio.NewScanner(r) + line int + ) + for sc.Scan() { + key, v, err := parseKV(sc.Text()) + if err != nil { + return fmt.Errorf("%d: %v", line, err) + } + raw[key] = v + line++ + } + if err := sc.Err(); err != nil { + return err + } + stat.OomKillDisable = raw["oom_kill_disable"] + stat.UnderOom = raw["under_oom"] + stat.OomKill = raw["oom_kill"] + return nil +} + +func (m *memoryController) set(path string, settings []memorySettings) error { + for _, t := range settings { + if t.value != nil { + if err := retryingWriteFile( + filepath.Join(m.Path(path), "memory."+t.name), + []byte(strconv.FormatInt(*t.value, 10)), + defaultFilePerm, + ); err != nil { + return err + } + } + } + return nil +} + +type memorySettings struct { + name string + value *int64 +} + +func getMemorySettings(resources *specs.LinuxResources) []memorySettings { + mem := resources.Memory + var swappiness *int64 + if mem.Swappiness != nil { + v := int64(*mem.Swappiness) + swappiness = &v + } + return []memorySettings{ + { + name: "limit_in_bytes", + value: mem.Limit, + }, + { + name: "soft_limit_in_bytes", + value: mem.Reservation, + }, + { + name: "memsw.limit_in_bytes", + value: mem.Swap, + }, + { + name: "kmem.limit_in_bytes", + value: mem.Kernel, + }, + { + name: "kmem.tcp.limit_in_bytes", + value: mem.KernelTCP, + }, + { + name: "oom_control", + value: getOomControlValue(mem), + }, + { + name: "swappiness", + value: swappiness, + }, + } +} + +func getOomControlValue(mem *specs.LinuxMemory) *int64 { + if mem.DisableOOMKiller != nil && *mem.DisableOOMKiller { + i := int64(1) + return &i + } + return nil +} + +func (m *memoryController) memoryEvent(path string, event MemoryEvent) (uintptr, error) { + root := m.Path(path) + efd, err := unix.Eventfd(0, unix.EFD_CLOEXEC) + if err != nil { + return 0, err + } + evtFile, err := os.Open(filepath.Join(root, event.EventFile())) + if err != nil { + unix.Close(efd) + return 0, err + } + defer evtFile.Close() + data := fmt.Sprintf("%d %d %s", efd, evtFile.Fd(), event.Arg()) + evctlPath := filepath.Join(root, "cgroup.event_control") + if err := retryingWriteFile(evctlPath, []byte(data), 0700); err != nil { + unix.Close(efd) + return 0, err + } + return uintptr(efd), nil +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/named.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/named.go new file mode 100644 index 000000000000..06b16c3b1573 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/named.go @@ -0,0 +1,39 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import "path/filepath" + +func NewNamed(root string, name Name) *namedController { + return &namedController{ + root: root, + name: name, + } +} + +type namedController struct { + root string + name Name +} + +func (n *namedController) Name() Name { + return n.name +} + +func (n *namedController) Path(path string) string { + return filepath.Join(n.root, string(n.name), path) +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_cls.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_cls.go new file mode 100644 index 000000000000..839b06de080b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_cls.go @@ -0,0 +1,61 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "os" + "path/filepath" + "strconv" + + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewNetCls(root string) *netclsController { + return &netclsController{ + root: filepath.Join(root, string(NetCLS)), + } +} + +type netclsController struct { + root string +} + +func (n *netclsController) Name() Name { + return NetCLS +} + +func (n *netclsController) Path(path string) string { + return filepath.Join(n.root, path) +} + +func (n *netclsController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(n.Path(path), defaultDirPerm); err != nil { + return err + } + if resources.Network != nil && resources.Network.ClassID != nil && *resources.Network.ClassID > 0 { + return retryingWriteFile( + filepath.Join(n.Path(path), "net_cls.classid"), + []byte(strconv.FormatUint(uint64(*resources.Network.ClassID), 10)), + defaultFilePerm, + ) + } + return nil +} + +func (n *netclsController) Update(path string, resources *specs.LinuxResources) error { + return n.Create(path, resources) +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_prio.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_prio.go new file mode 100644 index 000000000000..6362fd084f71 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/net_prio.go @@ -0,0 +1,65 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "fmt" + "os" + "path/filepath" + + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewNetPrio(root string) *netprioController { + return &netprioController{ + root: filepath.Join(root, string(NetPrio)), + } +} + +type netprioController struct { + root string +} + +func (n *netprioController) Name() Name { + return NetPrio +} + +func (n *netprioController) Path(path string) string { + return filepath.Join(n.root, path) +} + +func (n *netprioController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(n.Path(path), defaultDirPerm); err != nil { + return err + } + if resources.Network != nil { + for _, prio := range resources.Network.Priorities { + if err := retryingWriteFile( + filepath.Join(n.Path(path), "net_prio.ifpriomap"), + formatPrio(prio.Name, prio.Priority), + defaultFilePerm, + ); err != nil { + return err + } + } + } + return nil +} + +func formatPrio(name string, prio uint32) []byte { + return []byte(fmt.Sprintf("%s %d", name, prio)) +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/opts.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/opts.go new file mode 100644 index 000000000000..1e428d048079 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/opts.go @@ -0,0 +1,61 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "errors" +) + +var ( + // ErrIgnoreSubsystem allows the specific subsystem to be skipped + ErrIgnoreSubsystem = errors.New("skip subsystem") + // ErrDevicesRequired is returned when the devices subsystem is required but + // does not exist or is not active + ErrDevicesRequired = errors.New("devices subsystem is required") +) + +// InitOpts allows configuration for the creation or loading of a cgroup +type InitOpts func(*InitConfig) error + +// InitConfig provides configuration options for the creation +// or loading of a cgroup and its subsystems +type InitConfig struct { + // InitCheck can be used to check initialization errors from the subsystem + InitCheck InitCheck +} + +func newInitConfig() *InitConfig { + return &InitConfig{ + InitCheck: RequireDevices, + } +} + +// InitCheck allows subsystems errors to be checked when initialized or loaded +type InitCheck func(Subsystem, Path, error) error + +// AllowAny allows any subsystem errors to be skipped +func AllowAny(_ Subsystem, _ Path, _ error) error { + return ErrIgnoreSubsystem +} + +// RequireDevices requires the device subsystem but no others +func RequireDevices(s Subsystem, _ Path, _ error) error { + if s.Name() == Devices { + return ErrDevicesRequired + } + return ErrIgnoreSubsystem +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/paths.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/paths.go new file mode 100644 index 000000000000..bddc4e9cdcd7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/paths.go @@ -0,0 +1,106 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "errors" + "fmt" + "path/filepath" +) + +type Path func(subsystem Name) (string, error) + +func RootPath(subsystem Name) (string, error) { + return "/", nil +} + +// StaticPath returns a static path to use for all cgroups +func StaticPath(path string) Path { + return func(_ Name) (string, error) { + return path, nil + } +} + +// NestedPath will nest the cgroups based on the calling processes cgroup +// placing its child processes inside its own path +func NestedPath(suffix string) Path { + paths, err := ParseCgroupFile("/proc/self/cgroup") + if err != nil { + return errorPath(err) + } + return existingPath(paths, suffix) +} + +// PidPath will return the correct cgroup paths for an existing process running inside a cgroup +// This is commonly used for the Load function to restore an existing container +func PidPath(pid int) Path { + p := fmt.Sprintf("/proc/%d/cgroup", pid) + paths, err := ParseCgroupFile(p) + if err != nil { + return errorPath(fmt.Errorf("parse cgroup file %s: %w", p, err)) + } + return existingPath(paths, "") +} + +// ErrControllerNotActive is returned when a controller is not supported or enabled +var ErrControllerNotActive = errors.New("controller is not supported") + +func existingPath(paths map[string]string, suffix string) Path { + // localize the paths based on the root mount dest for nested cgroups + for n, p := range paths { + dest, err := getCgroupDestination(n) + if err != nil { + return errorPath(err) + } + rel, err := filepath.Rel(dest, p) + if err != nil { + return errorPath(err) + } + if rel == "." { + rel = dest + } + paths[n] = filepath.Join("/", rel) + } + return func(name Name) (string, error) { + root, ok := paths[string(name)] + if !ok { + if root, ok = paths["name="+string(name)]; !ok { + return "", ErrControllerNotActive + } + } + if suffix != "" { + return filepath.Join(root, suffix), nil + } + return root, nil + } +} + +func subPath(path Path, subName string) Path { + return func(name Name) (string, error) { + p, err := path(name) + if err != nil { + return "", err + } + return filepath.Join(p, subName), nil + } +} + +func errorPath(err error) Path { + return func(_ Name) (string, error) { + return "", err + } +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/perf_event.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/perf_event.go new file mode 100644 index 000000000000..648786db68f6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/perf_event.go @@ -0,0 +1,37 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import "path/filepath" + +func NewPerfEvent(root string) *PerfEventController { + return &PerfEventController{ + root: filepath.Join(root, string(PerfEvent)), + } +} + +type PerfEventController struct { + root string +} + +func (p *PerfEventController) Name() Name { + return PerfEvent +} + +func (p *PerfEventController) Path(path string) string { + return filepath.Join(p.root, path) +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/pids.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/pids.go new file mode 100644 index 000000000000..66a1b6b44708 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/pids.go @@ -0,0 +1,85 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +func NewPids(root string) *pidsController { + return &pidsController{ + root: filepath.Join(root, string(Pids)), + } +} + +type pidsController struct { + root string +} + +func (p *pidsController) Name() Name { + return Pids +} + +func (p *pidsController) Path(path string) string { + return filepath.Join(p.root, path) +} + +func (p *pidsController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(p.Path(path), defaultDirPerm); err != nil { + return err + } + if resources.Pids != nil && resources.Pids.Limit > 0 { + return retryingWriteFile( + filepath.Join(p.Path(path), "pids.max"), + []byte(strconv.FormatInt(resources.Pids.Limit, 10)), + defaultFilePerm, + ) + } + return nil +} + +func (p *pidsController) Update(path string, resources *specs.LinuxResources) error { + return p.Create(path, resources) +} + +func (p *pidsController) Stat(path string, stats *v1.Metrics) error { + current, err := readUint(filepath.Join(p.Path(path), "pids.current")) + if err != nil { + return err + } + var max uint64 + maxData, err := os.ReadFile(filepath.Join(p.Path(path), "pids.max")) + if err != nil { + return err + } + if maxS := strings.TrimSpace(string(maxData)); maxS != "max" { + if max, err = parseUint(maxS, 10, 64); err != nil { + return err + } + } + stats.Pids = &v1.PidsStat{ + Current: current, + Limit: max, + } + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/rdma.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/rdma.go new file mode 100644 index 000000000000..9d414203e42e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/rdma.go @@ -0,0 +1,154 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "math" + "os" + "path/filepath" + "strconv" + "strings" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +type rdmaController struct { + root string +} + +func (p *rdmaController) Name() Name { + return Rdma +} + +func (p *rdmaController) Path(path string) string { + return filepath.Join(p.root, path) +} + +func NewRdma(root string) *rdmaController { + return &rdmaController{ + root: filepath.Join(root, string(Rdma)), + } +} + +func createCmdString(device string, limits *specs.LinuxRdma) string { + var cmdString string + + cmdString = device + if limits.HcaHandles != nil { + cmdString = cmdString + " " + "hca_handle=" + strconv.FormatUint(uint64(*limits.HcaHandles), 10) + } + + if limits.HcaObjects != nil { + cmdString = cmdString + " " + "hca_object=" + strconv.FormatUint(uint64(*limits.HcaObjects), 10) + } + return cmdString +} + +func (p *rdmaController) Create(path string, resources *specs.LinuxResources) error { + if err := os.MkdirAll(p.Path(path), defaultDirPerm); err != nil { + return err + } + + for device, limit := range resources.Rdma { + if device != "" && (limit.HcaHandles != nil || limit.HcaObjects != nil) { + limit := limit + return retryingWriteFile( + filepath.Join(p.Path(path), "rdma.max"), + []byte(createCmdString(device, &limit)), + defaultFilePerm, + ) + } + } + return nil +} + +func (p *rdmaController) Update(path string, resources *specs.LinuxResources) error { + return p.Create(path, resources) +} + +func parseRdmaKV(raw string, entry *v1.RdmaEntry) { + var value uint64 + var err error + + parts := strings.Split(raw, "=") + switch len(parts) { + case 2: + if parts[1] == "max" { + value = math.MaxUint32 + } else { + value, err = parseUint(parts[1], 10, 32) + if err != nil { + return + } + } + if parts[0] == "hca_handle" { + entry.HcaHandles = uint32(value) + } else if parts[0] == "hca_object" { + entry.HcaObjects = uint32(value) + } + } +} + +func toRdmaEntry(strEntries []string) []*v1.RdmaEntry { + var rdmaEntries []*v1.RdmaEntry + for i := range strEntries { + parts := strings.Fields(strEntries[i]) + switch len(parts) { + case 3: + entry := new(v1.RdmaEntry) + entry.Device = parts[0] + parseRdmaKV(parts[1], entry) + parseRdmaKV(parts[2], entry) + + rdmaEntries = append(rdmaEntries, entry) + default: + continue + } + } + return rdmaEntries +} + +func (p *rdmaController) Stat(path string, stats *v1.Metrics) error { + + currentData, err := os.ReadFile(filepath.Join(p.Path(path), "rdma.current")) + if err != nil { + return err + } + currentPerDevices := strings.Split(string(currentData), "\n") + + maxData, err := os.ReadFile(filepath.Join(p.Path(path), "rdma.max")) + if err != nil { + return err + } + maxPerDevices := strings.Split(string(maxData), "\n") + + // If device got removed between reading two files, ignore returning + // stats. + if len(currentPerDevices) != len(maxPerDevices) { + return nil + } + + currentEntries := toRdmaEntry(currentPerDevices) + maxEntries := toRdmaEntry(maxPerDevices) + + stats.Rdma = &v1.RdmaStat{ + Current: currentEntries, + Limit: maxEntries, + } + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/state.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/state.go new file mode 100644 index 000000000000..cfeabbbc60b3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/state.go @@ -0,0 +1,28 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +// State is a type that represents the state of the current cgroup +type State string + +const ( + Unknown State = "" + Thawed State = "thawed" + Frozen State = "frozen" + Freezing State = "freezing" + Deleted State = "deleted" +) diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/subsystem.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/subsystem.go new file mode 100644 index 000000000000..b2f41854d2c5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/subsystem.go @@ -0,0 +1,116 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "fmt" + "os" + + v1 "github.com/containerd/cgroups/stats/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +// Name is a typed name for a cgroup subsystem +type Name string + +const ( + Devices Name = "devices" + Hugetlb Name = "hugetlb" + Freezer Name = "freezer" + Pids Name = "pids" + NetCLS Name = "net_cls" + NetPrio Name = "net_prio" + PerfEvent Name = "perf_event" + Cpuset Name = "cpuset" + Cpu Name = "cpu" + Cpuacct Name = "cpuacct" + Memory Name = "memory" + Blkio Name = "blkio" + Rdma Name = "rdma" +) + +// Subsystems returns a complete list of the default cgroups +// available on most linux systems +func Subsystems() []Name { + n := []Name{ + Freezer, + Pids, + NetCLS, + NetPrio, + PerfEvent, + Cpuset, + Cpu, + Cpuacct, + Memory, + Blkio, + Rdma, + } + if !RunningInUserNS() { + n = append(n, Devices) + } + if _, err := os.Stat("/sys/kernel/mm/hugepages"); err == nil { + n = append(n, Hugetlb) + } + return n +} + +type Subsystem interface { + Name() Name +} + +type pather interface { + Subsystem + Path(path string) string +} + +type creator interface { + Subsystem + Create(path string, resources *specs.LinuxResources) error +} + +type deleter interface { + Subsystem + Delete(path string) error +} + +type stater interface { + Subsystem + Stat(path string, stats *v1.Metrics) error +} + +type updater interface { + Subsystem + Update(path string, resources *specs.LinuxResources) error +} + +// SingleSubsystem returns a single cgroup subsystem within the base Hierarchy +func SingleSubsystem(baseHierarchy Hierarchy, subsystem Name) Hierarchy { + return func() ([]Subsystem, error) { + subsystems, err := baseHierarchy() + if err != nil { + return nil, err + } + for _, s := range subsystems { + if s.Name() == subsystem { + return []Subsystem{ + s, + }, nil + } + } + return nil, fmt.Errorf("unable to find subsystem %s", subsystem) + } +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/systemd.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/systemd.go new file mode 100644 index 000000000000..4da57cb4b00b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/systemd.go @@ -0,0 +1,158 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "context" + "path/filepath" + "strings" + "sync" + + systemdDbus "github.com/coreos/go-systemd/v22/dbus" + "github.com/godbus/dbus/v5" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +const ( + SystemdDbus Name = "systemd" + defaultSlice = "system.slice" +) + +var ( + canDelegate bool + once sync.Once +) + +func Systemd() ([]Subsystem, error) { + root, err := v1MountPoint() + if err != nil { + return nil, err + } + defaultSubsystems, err := defaults(root) + if err != nil { + return nil, err + } + s, err := NewSystemd(root) + if err != nil { + return nil, err + } + // make sure the systemd controller is added first + return append([]Subsystem{s}, defaultSubsystems...), nil +} + +func Slice(slice, name string) Path { + if slice == "" { + slice = defaultSlice + } + return func(subsystem Name) (string, error) { + return filepath.Join(slice, name), nil + } +} + +func NewSystemd(root string) (*SystemdController, error) { + return &SystemdController{ + root: root, + }, nil +} + +type SystemdController struct { + mu sync.Mutex + root string +} + +func (s *SystemdController) Name() Name { + return SystemdDbus +} + +func (s *SystemdController) Create(path string, _ *specs.LinuxResources) error { + ctx := context.TODO() + conn, err := systemdDbus.NewWithContext(ctx) + if err != nil { + return err + } + defer conn.Close() + slice, name := splitName(path) + // We need to see if systemd can handle the delegate property + // Systemd will return an error if it cannot handle delegate regardless + // of its bool setting. + checkDelegate := func() { + canDelegate = true + dlSlice := newProperty("Delegate", true) + if _, err := conn.StartTransientUnitContext(ctx, slice, "testdelegate", []systemdDbus.Property{dlSlice}, nil); err != nil { + if dbusError, ok := err.(dbus.Error); ok { + // Starting with systemd v237, Delegate is not even a property of slices anymore, + // so the D-Bus call fails with "InvalidArgs" error. + if strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.PropertyReadOnly") || strings.Contains(dbusError.Name, "org.freedesktop.DBus.Error.InvalidArgs") { + canDelegate = false + } + } + } + + _, _ = conn.StopUnitContext(ctx, slice, "testDelegate", nil) + } + once.Do(checkDelegate) + properties := []systemdDbus.Property{ + systemdDbus.PropDescription("cgroup " + name), + systemdDbus.PropWants(slice), + newProperty("DefaultDependencies", false), + newProperty("MemoryAccounting", true), + newProperty("CPUAccounting", true), + newProperty("BlockIOAccounting", true), + } + + // If we can delegate, we add the property back in + if canDelegate { + properties = append(properties, newProperty("Delegate", true)) + } + + ch := make(chan string) + _, err = conn.StartTransientUnitContext(ctx, name, "replace", properties, ch) + if err != nil { + return err + } + <-ch + return nil +} + +func (s *SystemdController) Delete(path string) error { + ctx := context.TODO() + conn, err := systemdDbus.NewWithContext(ctx) + if err != nil { + return err + } + defer conn.Close() + _, name := splitName(path) + ch := make(chan string) + _, err = conn.StopUnitContext(ctx, name, "replace", ch) + if err != nil { + return err + } + <-ch + return nil +} + +func newProperty(name string, units interface{}) systemdDbus.Property { + return systemdDbus.Property{ + Name: name, + Value: dbus.MakeVariant(units), + } +} + +func splitName(path string) (slice string, unit string) { + slice, unit = filepath.Split(path) + return strings.TrimSuffix(slice, "/"), unit +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/ticks.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/ticks.go new file mode 100644 index 000000000000..84dc38d0cc33 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/ticks.go @@ -0,0 +1,26 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +func getClockTicks() uint64 { + // The value comes from `C.sysconf(C._SC_CLK_TCK)`, and + // on Linux it's a constant which is safe to be hard coded, + // so we can avoid using cgo here. + // See https://github.com/containerd/cgroups/pull/12 for + // more details. + return 100 +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/utils.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/utils.go new file mode 100644 index 000000000000..c17a3a41423a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/utils.go @@ -0,0 +1,391 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + "syscall" + "time" + + units "github.com/docker/go-units" + specs "github.com/opencontainers/runtime-spec/specs-go" + "golang.org/x/sys/unix" +) + +var ( + nsOnce sync.Once + inUserNS bool + checkMode sync.Once + cgMode CGMode +) + +const unifiedMountpoint = "/sys/fs/cgroup" + +// CGMode is the cgroups mode of the host system +type CGMode int + +const ( + // Unavailable cgroup mountpoint + Unavailable CGMode = iota + // Legacy cgroups v1 + Legacy + // Hybrid with cgroups v1 and v2 controllers mounted + Hybrid + // Unified with only cgroups v2 mounted + Unified +) + +// Mode returns the cgroups mode running on the host +func Mode() CGMode { + checkMode.Do(func() { + var st unix.Statfs_t + if err := unix.Statfs(unifiedMountpoint, &st); err != nil { + cgMode = Unavailable + return + } + switch st.Type { + case unix.CGROUP2_SUPER_MAGIC: + cgMode = Unified + default: + cgMode = Legacy + if err := unix.Statfs(filepath.Join(unifiedMountpoint, "unified"), &st); err != nil { + return + } + if st.Type == unix.CGROUP2_SUPER_MAGIC { + cgMode = Hybrid + } + } + }) + return cgMode +} + +// RunningInUserNS detects whether we are currently running in a user namespace. +// Copied from github.com/lxc/lxd/shared/util.go +func RunningInUserNS() bool { + nsOnce.Do(func() { + file, err := os.Open("/proc/self/uid_map") + if err != nil { + // This kernel-provided file only exists if user namespaces are supported + return + } + defer file.Close() + + buf := bufio.NewReader(file) + l, _, err := buf.ReadLine() + if err != nil { + return + } + + line := string(l) + var a, b, c int64 + fmt.Sscanf(line, "%d %d %d", &a, &b, &c) + + /* + * We assume we are in the initial user namespace if we have a full + * range - 4294967295 uids starting at uid 0. + */ + if a == 0 && b == 0 && c == 4294967295 { + return + } + inUserNS = true + }) + return inUserNS +} + +// defaults returns all known groups +func defaults(root string) ([]Subsystem, error) { + h, err := NewHugetlb(root) + if err != nil && !os.IsNotExist(err) { + return nil, err + } + s := []Subsystem{ + NewNamed(root, "systemd"), + NewFreezer(root), + NewPids(root), + NewNetCls(root), + NewNetPrio(root), + NewPerfEvent(root), + NewCpuset(root), + NewCpu(root), + NewCpuacct(root), + NewMemory(root), + NewBlkio(root), + NewRdma(root), + } + // only add the devices cgroup if we are not in a user namespace + // because modifications are not allowed + if !RunningInUserNS() { + s = append(s, NewDevices(root)) + } + // add the hugetlb cgroup if error wasn't due to missing hugetlb + // cgroup support on the host + if err == nil { + s = append(s, h) + } + return s, nil +} + +// remove will remove a cgroup path handling EAGAIN and EBUSY errors and +// retrying the remove after a exp timeout +func remove(path string) error { + delay := 10 * time.Millisecond + for i := 0; i < 5; i++ { + if i != 0 { + time.Sleep(delay) + delay *= 2 + } + if err := os.RemoveAll(path); err == nil { + return nil + } + } + return fmt.Errorf("cgroups: unable to remove path %q", path) +} + +// readPids will read all the pids of processes or tasks in a cgroup by the provided path +func readPids(path string, subsystem Name, pType procType) ([]Process, error) { + f, err := os.Open(filepath.Join(path, pType)) + if err != nil { + return nil, err + } + defer f.Close() + var ( + out []Process + s = bufio.NewScanner(f) + ) + for s.Scan() { + if t := s.Text(); t != "" { + pid, err := strconv.Atoi(t) + if err != nil { + return nil, err + } + out = append(out, Process{ + Pid: pid, + Subsystem: subsystem, + Path: path, + }) + } + } + if err := s.Err(); err != nil { + // failed to read all pids? + return nil, err + } + return out, nil +} + +func hugePageSizes() ([]string, error) { + var ( + pageSizes []string + sizeList = []string{"B", "KB", "MB", "GB", "TB", "PB"} + ) + files, err := os.ReadDir("/sys/kernel/mm/hugepages") + if err != nil { + return nil, err + } + for _, st := range files { + nameArray := strings.Split(st.Name(), "-") + pageSize, err := units.RAMInBytes(nameArray[1]) + if err != nil { + return nil, err + } + pageSizes = append(pageSizes, units.CustomSize("%g%s", float64(pageSize), 1024.0, sizeList)) + } + return pageSizes, nil +} + +func readUint(path string) (uint64, error) { + v, err := os.ReadFile(path) + if err != nil { + return 0, err + } + return parseUint(strings.TrimSpace(string(v)), 10, 64) +} + +func parseUint(s string, base, bitSize int) (uint64, error) { + v, err := strconv.ParseUint(s, base, bitSize) + if err != nil { + intValue, intErr := strconv.ParseInt(s, base, bitSize) + // 1. Handle negative values greater than MinInt64 (and) + // 2. Handle negative values lesser than MinInt64 + if intErr == nil && intValue < 0 { + return 0, nil + } else if intErr != nil && + intErr.(*strconv.NumError).Err == strconv.ErrRange && + intValue < 0 { + return 0, nil + } + return 0, err + } + return v, nil +} + +func parseKV(raw string) (string, uint64, error) { + parts := strings.Fields(raw) + switch len(parts) { + case 2: + v, err := parseUint(parts[1], 10, 64) + if err != nil { + return "", 0, err + } + return parts[0], v, nil + default: + return "", 0, ErrInvalidFormat + } +} + +// ParseCgroupFile parses the given cgroup file, typically /proc/self/cgroup +// or /proc//cgroup, into a map of subsystems to cgroup paths, e.g. +// "cpu": "/user.slice/user-1000.slice" +// "pids": "/user.slice/user-1000.slice" +// etc. +// +// The resulting map does not have an element for cgroup v2 unified hierarchy. +// Use ParseCgroupFileUnified to get the unified path. +func ParseCgroupFile(path string) (map[string]string, error) { + x, _, err := ParseCgroupFileUnified(path) + return x, err +} + +// ParseCgroupFileUnified returns legacy subsystem paths as the first value, +// and returns the unified path as the second value. +func ParseCgroupFileUnified(path string) (map[string]string, string, error) { + f, err := os.Open(path) + if err != nil { + return nil, "", err + } + defer f.Close() + return parseCgroupFromReaderUnified(f) +} + +func parseCgroupFromReaderUnified(r io.Reader) (map[string]string, string, error) { + var ( + cgroups = make(map[string]string) + unified = "" + s = bufio.NewScanner(r) + ) + for s.Scan() { + var ( + text = s.Text() + parts = strings.SplitN(text, ":", 3) + ) + if len(parts) < 3 { + return nil, unified, fmt.Errorf("invalid cgroup entry: %q", text) + } + for _, subs := range strings.Split(parts[1], ",") { + if subs == "" { + unified = parts[2] + } else { + cgroups[subs] = parts[2] + } + } + } + if err := s.Err(); err != nil { + return nil, unified, err + } + return cgroups, unified, nil +} + +func getCgroupDestination(subsystem string) (string, error) { + f, err := os.Open("/proc/self/mountinfo") + if err != nil { + return "", err + } + defer f.Close() + s := bufio.NewScanner(f) + for s.Scan() { + fields := strings.Split(s.Text(), " ") + if len(fields) < 10 { + // broken mountinfo? + continue + } + if fields[len(fields)-3] != "cgroup" { + continue + } + for _, opt := range strings.Split(fields[len(fields)-1], ",") { + if opt == subsystem { + return fields[3], nil + } + } + } + if err := s.Err(); err != nil { + return "", err + } + return "", ErrNoCgroupMountDestination +} + +func pathers(subystems []Subsystem) []pather { + var out []pather + for _, s := range subystems { + if p, ok := s.(pather); ok { + out = append(out, p) + } + } + return out +} + +func initializeSubsystem(s Subsystem, path Path, resources *specs.LinuxResources) error { + if c, ok := s.(creator); ok { + p, err := path(s.Name()) + if err != nil { + return err + } + if err := c.Create(p, resources); err != nil { + return err + } + } else if c, ok := s.(pather); ok { + p, err := path(s.Name()) + if err != nil { + return err + } + // do the default create if the group does not have a custom one + if err := os.MkdirAll(c.Path(p), defaultDirPerm); err != nil { + return err + } + } + return nil +} + +func cleanPath(path string) string { + if path == "" { + return "" + } + path = filepath.Clean(path) + if !filepath.IsAbs(path) { + path, _ = filepath.Rel(string(os.PathSeparator), filepath.Clean(string(os.PathSeparator)+path)) + } + return path +} + +func retryingWriteFile(path string, data []byte, mode os.FileMode) error { + // Retry writes on EINTR; see: + // https://github.com/golang/go/issues/38033 + for { + err := os.WriteFile(path, data, mode) + if err == nil { + return nil + } else if !errors.Is(err, syscall.EINTR) { + return err + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/containerd/cgroups/v1.go b/cluster-autoscaler/vendor/github.com/containerd/cgroups/v1.go new file mode 100644 index 000000000000..2ec215c06f42 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/containerd/cgroups/v1.go @@ -0,0 +1,73 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package cgroups + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "strings" +) + +// V1 returns all the groups in the default cgroups mountpoint in a single hierarchy +func V1() ([]Subsystem, error) { + root, err := v1MountPoint() + if err != nil { + return nil, err + } + subsystems, err := defaults(root) + if err != nil { + return nil, err + } + var enabled []Subsystem + for _, s := range pathers(subsystems) { + // check and remove the default groups that do not exist + if _, err := os.Lstat(s.Path("/")); err == nil { + enabled = append(enabled, s) + } + } + return enabled, nil +} + +// v1MountPoint returns the mount point where the cgroup +// mountpoints are mounted in a single hiearchy +func v1MountPoint() (string, error) { + f, err := os.Open("/proc/self/mountinfo") + if err != nil { + return "", err + } + defer f.Close() + scanner := bufio.NewScanner(f) + for scanner.Scan() { + var ( + text = scanner.Text() + fields = strings.Split(text, " ") + numFields = len(fields) + ) + if numFields < 10 { + return "", fmt.Errorf("mountinfo: bad entry %q", text) + } + if fields[numFields-3] == "cgroup" { + return filepath.Dir(fields[4]), nil + } + } + if err := scanner.Err(); err != nil { + return "", err + } + return "", ErrMountPointNotExist +} diff --git a/cluster-autoscaler/vendor/golang.org/x/crypto/hkdf/hkdf.go b/cluster-autoscaler/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 000000000000..dda3f143bec5 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,93 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +package hkdf // import "golang.org/x/crypto/hkdf" + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +// Extract generates a pseudorandom key for use with Expand from an input secret +// and an optional independent salt. +// +// Only use this function if you need to reuse the extracted key with multiple +// Expand invocations and different context values. Most common scenarios, +// including the generation of multiple keys, should use New instead. +func Extract(hash func() hash.Hash, secret, salt []byte) []byte { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + return extractor.Sum(nil) +} + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + buf []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.buf) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read any leftover from the buffer + n := copy(p, f.buf) + p = p[n:] + + // Fill the rest of the buffer + for len(p) > 0 { + f.expander.Reset() + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.buf = f.prev + n = copy(p, f.buf) + p = p[n:] + } + // Save leftovers for next run + f.buf = f.buf[n:] + + return need, nil +} + +// Expand returns a Reader, from which keys can be read, using the given +// pseudorandom key and optional context info, skipping the extraction step. +// +// The pseudorandomKey should have been generated by Extract, or be a uniformly +// random or pseudorandom cryptographically strong key. See RFC 5869, Section +// 3.3. Most common scenarios will want to use New instead. +func Expand(hash func() hash.Hash, pseudorandomKey, info []byte) io.Reader { + expander := hmac.New(hash, pseudorandomKey) + return &hkdf{expander, expander.Size(), info, 1, nil, nil} +} + +// New returns a Reader, from which keys can be read, using the given hash, +// secret, salt and context info. Salt and info can be nil. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + prk := Extract(hash, secret, salt) + return Expand(hash, prk, info) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/net/html/render.go b/cluster-autoscaler/vendor/golang.org/x/net/html/render.go index 8b28031905a4..e8c12334553d 100644 --- a/cluster-autoscaler/vendor/golang.org/x/net/html/render.go +++ b/cluster-autoscaler/vendor/golang.org/x/net/html/render.go @@ -194,9 +194,8 @@ func render1(w writer, n *Node) error { } } - // Render any child nodes. - switch n.Data { - case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": + // Render any child nodes + if childTextNodesAreLiteral(n) { for c := n.FirstChild; c != nil; c = c.NextSibling { if c.Type == TextNode { if _, err := w.WriteString(c.Data); err != nil { @@ -213,7 +212,7 @@ func render1(w writer, n *Node) error { // last element in the file, with no closing tag. return plaintextAbort } - default: + } else { for c := n.FirstChild; c != nil; c = c.NextSibling { if err := render1(w, c); err != nil { return err @@ -231,6 +230,27 @@ func render1(w writer, n *Node) error { return w.WriteByte('>') } +func childTextNodesAreLiteral(n *Node) bool { + // Per WHATWG HTML 13.3, if the parent of the current node is a style, + // script, xmp, iframe, noembed, noframes, or plaintext element, and the + // current node is a text node, append the value of the node's data + // literally. The specification is not explicit about it, but we only + // enforce this if we are in the HTML namespace (i.e. when the namespace is + // ""). + // NOTE: we also always include noscript elements, although the + // specification states that they should only be rendered as such if + // scripting is enabled for the node (which is not something we track). + if n.Namespace != "" { + return false + } + switch n.Data { + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": + return true + default: + return false + } +} + // writeQuoted writes s to w surrounded by quotes. Normally it will use double // quotes, but if s contains a double quote, it will use single quotes. // It is used for writing the identifiers in a doctype declaration. diff --git a/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go b/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go index b9632380e7d8..b20c74917111 100644 --- a/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go +++ b/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go @@ -518,11 +518,14 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { func authorityAddr(scheme string, authority string) (addr string) { host, port, err := net.SplitHostPort(authority) if err != nil { // authority didn't have a port + host = authority + port = "" + } + if port == "" { // authority's port was empty port = "443" if scheme == "http" { port = "80" } - host = authority } if a, err := idna.ToASCII(host); err == nil { host = a diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go index 8fb354c319a5..267ddc1cbd66 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go @@ -25,8 +25,9 @@ import ( io "io" proto "github.com/gogo/protobuf/proto" - v1 "k8s.io/api/admissionregistration/v1" - v11 "k8s.io/apimachinery/pkg/apis/meta/v1" + v11 "k8s.io/api/admissionregistration/v1" + k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" math_bits "math/bits" @@ -45,10 +46,66 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +func (m *AuditAnnotation) Reset() { *m = AuditAnnotation{} } +func (*AuditAnnotation) ProtoMessage() {} +func (*AuditAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{0} +} +func (m *AuditAnnotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AuditAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditAnnotation.Merge(m, src) +} +func (m *AuditAnnotation) XXX_Size() int { + return m.Size() +} +func (m *AuditAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_AuditAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditAnnotation proto.InternalMessageInfo + +func (m *ExpressionWarning) Reset() { *m = ExpressionWarning{} } +func (*ExpressionWarning) ProtoMessage() {} +func (*ExpressionWarning) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{1} +} +func (m *ExpressionWarning) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExpressionWarning) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExpressionWarning) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExpressionWarning.Merge(m, src) +} +func (m *ExpressionWarning) XXX_Size() int { + return m.Size() +} +func (m *ExpressionWarning) XXX_DiscardUnknown() { + xxx_messageInfo_ExpressionWarning.DiscardUnknown(m) +} + +var xxx_messageInfo_ExpressionWarning proto.InternalMessageInfo + func (m *MatchCondition) Reset() { *m = MatchCondition{} } func (*MatchCondition) ProtoMessage() {} func (*MatchCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{0} + return fileDescriptor_abeea74cbc46f55a, []int{2} } func (m *MatchCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -73,10 +130,38 @@ func (m *MatchCondition) XXX_DiscardUnknown() { var xxx_messageInfo_MatchCondition proto.InternalMessageInfo +func (m *MatchResources) Reset() { *m = MatchResources{} } +func (*MatchResources) ProtoMessage() {} +func (*MatchResources) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{3} +} +func (m *MatchResources) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MatchResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MatchResources) XXX_Merge(src proto.Message) { + xxx_messageInfo_MatchResources.Merge(m, src) +} +func (m *MatchResources) XXX_Size() int { + return m.Size() +} +func (m *MatchResources) XXX_DiscardUnknown() { + xxx_messageInfo_MatchResources.DiscardUnknown(m) +} + +var xxx_messageInfo_MatchResources proto.InternalMessageInfo + func (m *MutatingWebhook) Reset() { *m = MutatingWebhook{} } func (*MutatingWebhook) ProtoMessage() {} func (*MutatingWebhook) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{1} + return fileDescriptor_abeea74cbc46f55a, []int{4} } func (m *MutatingWebhook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -104,7 +189,7 @@ var xxx_messageInfo_MutatingWebhook proto.InternalMessageInfo func (m *MutatingWebhookConfiguration) Reset() { *m = MutatingWebhookConfiguration{} } func (*MutatingWebhookConfiguration) ProtoMessage() {} func (*MutatingWebhookConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{2} + return fileDescriptor_abeea74cbc46f55a, []int{5} } func (m *MutatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -132,7 +217,7 @@ var xxx_messageInfo_MutatingWebhookConfiguration proto.InternalMessageInfo func (m *MutatingWebhookConfigurationList) Reset() { *m = MutatingWebhookConfigurationList{} } func (*MutatingWebhookConfigurationList) ProtoMessage() {} func (*MutatingWebhookConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{3} + return fileDescriptor_abeea74cbc46f55a, []int{6} } func (m *MutatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -157,10 +242,94 @@ func (m *MutatingWebhookConfigurationList) XXX_DiscardUnknown() { var xxx_messageInfo_MutatingWebhookConfigurationList proto.InternalMessageInfo +func (m *NamedRuleWithOperations) Reset() { *m = NamedRuleWithOperations{} } +func (*NamedRuleWithOperations) ProtoMessage() {} +func (*NamedRuleWithOperations) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{7} +} +func (m *NamedRuleWithOperations) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedRuleWithOperations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedRuleWithOperations) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedRuleWithOperations.Merge(m, src) +} +func (m *NamedRuleWithOperations) XXX_Size() int { + return m.Size() +} +func (m *NamedRuleWithOperations) XXX_DiscardUnknown() { + xxx_messageInfo_NamedRuleWithOperations.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedRuleWithOperations proto.InternalMessageInfo + +func (m *ParamKind) Reset() { *m = ParamKind{} } +func (*ParamKind) ProtoMessage() {} +func (*ParamKind) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{8} +} +func (m *ParamKind) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamKind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ParamKind) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamKind.Merge(m, src) +} +func (m *ParamKind) XXX_Size() int { + return m.Size() +} +func (m *ParamKind) XXX_DiscardUnknown() { + xxx_messageInfo_ParamKind.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamKind proto.InternalMessageInfo + +func (m *ParamRef) Reset() { *m = ParamRef{} } +func (*ParamRef) ProtoMessage() {} +func (*ParamRef) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{9} +} +func (m *ParamRef) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamRef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ParamRef) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamRef.Merge(m, src) +} +func (m *ParamRef) XXX_Size() int { + return m.Size() +} +func (m *ParamRef) XXX_DiscardUnknown() { + xxx_messageInfo_ParamRef.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamRef proto.InternalMessageInfo + func (m *ServiceReference) Reset() { *m = ServiceReference{} } func (*ServiceReference) ProtoMessage() {} func (*ServiceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{4} + return fileDescriptor_abeea74cbc46f55a, []int{10} } func (m *ServiceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -185,10 +354,234 @@ func (m *ServiceReference) XXX_DiscardUnknown() { var xxx_messageInfo_ServiceReference proto.InternalMessageInfo +func (m *TypeChecking) Reset() { *m = TypeChecking{} } +func (*TypeChecking) ProtoMessage() {} +func (*TypeChecking) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{11} +} +func (m *TypeChecking) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TypeChecking) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TypeChecking) XXX_Merge(src proto.Message) { + xxx_messageInfo_TypeChecking.Merge(m, src) +} +func (m *TypeChecking) XXX_Size() int { + return m.Size() +} +func (m *TypeChecking) XXX_DiscardUnknown() { + xxx_messageInfo_TypeChecking.DiscardUnknown(m) +} + +var xxx_messageInfo_TypeChecking proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicy) Reset() { *m = ValidatingAdmissionPolicy{} } +func (*ValidatingAdmissionPolicy) ProtoMessage() {} +func (*ValidatingAdmissionPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{12} +} +func (m *ValidatingAdmissionPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicy.Merge(m, src) +} +func (m *ValidatingAdmissionPolicy) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicy proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicyBinding) Reset() { *m = ValidatingAdmissionPolicyBinding{} } +func (*ValidatingAdmissionPolicyBinding) ProtoMessage() {} +func (*ValidatingAdmissionPolicyBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{13} +} +func (m *ValidatingAdmissionPolicyBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicyBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicyBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicyBinding.Merge(m, src) +} +func (m *ValidatingAdmissionPolicyBinding) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicyBinding) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicyBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicyBinding proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicyBindingList) Reset() { *m = ValidatingAdmissionPolicyBindingList{} } +func (*ValidatingAdmissionPolicyBindingList) ProtoMessage() {} +func (*ValidatingAdmissionPolicyBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{14} +} +func (m *ValidatingAdmissionPolicyBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicyBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicyBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicyBindingList.Merge(m, src) +} +func (m *ValidatingAdmissionPolicyBindingList) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicyBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicyBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicyBindingList proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicyBindingSpec) Reset() { *m = ValidatingAdmissionPolicyBindingSpec{} } +func (*ValidatingAdmissionPolicyBindingSpec) ProtoMessage() {} +func (*ValidatingAdmissionPolicyBindingSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{15} +} +func (m *ValidatingAdmissionPolicyBindingSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicyBindingSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicyBindingSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicyBindingSpec.Merge(m, src) +} +func (m *ValidatingAdmissionPolicyBindingSpec) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicyBindingSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicyBindingSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicyBindingSpec proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicyList) Reset() { *m = ValidatingAdmissionPolicyList{} } +func (*ValidatingAdmissionPolicyList) ProtoMessage() {} +func (*ValidatingAdmissionPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{16} +} +func (m *ValidatingAdmissionPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicyList.Merge(m, src) +} +func (m *ValidatingAdmissionPolicyList) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicyList proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicySpec) Reset() { *m = ValidatingAdmissionPolicySpec{} } +func (*ValidatingAdmissionPolicySpec) ProtoMessage() {} +func (*ValidatingAdmissionPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{17} +} +func (m *ValidatingAdmissionPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicySpec.Merge(m, src) +} +func (m *ValidatingAdmissionPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicySpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicySpec proto.InternalMessageInfo + +func (m *ValidatingAdmissionPolicyStatus) Reset() { *m = ValidatingAdmissionPolicyStatus{} } +func (*ValidatingAdmissionPolicyStatus) ProtoMessage() {} +func (*ValidatingAdmissionPolicyStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{18} +} +func (m *ValidatingAdmissionPolicyStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingAdmissionPolicyStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingAdmissionPolicyStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingAdmissionPolicyStatus.Merge(m, src) +} +func (m *ValidatingAdmissionPolicyStatus) XXX_Size() int { + return m.Size() +} +func (m *ValidatingAdmissionPolicyStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingAdmissionPolicyStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingAdmissionPolicyStatus proto.InternalMessageInfo + func (m *ValidatingWebhook) Reset() { *m = ValidatingWebhook{} } func (*ValidatingWebhook) ProtoMessage() {} func (*ValidatingWebhook) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{5} + return fileDescriptor_abeea74cbc46f55a, []int{19} } func (m *ValidatingWebhook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +609,7 @@ var xxx_messageInfo_ValidatingWebhook proto.InternalMessageInfo func (m *ValidatingWebhookConfiguration) Reset() { *m = ValidatingWebhookConfiguration{} } func (*ValidatingWebhookConfiguration) ProtoMessage() {} func (*ValidatingWebhookConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{6} + return fileDescriptor_abeea74cbc46f55a, []int{20} } func (m *ValidatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -244,7 +637,7 @@ var xxx_messageInfo_ValidatingWebhookConfiguration proto.InternalMessageInfo func (m *ValidatingWebhookConfigurationList) Reset() { *m = ValidatingWebhookConfigurationList{} } func (*ValidatingWebhookConfigurationList) ProtoMessage() {} func (*ValidatingWebhookConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{7} + return fileDescriptor_abeea74cbc46f55a, []int{21} } func (m *ValidatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -269,15 +662,15 @@ func (m *ValidatingWebhookConfigurationList) XXX_DiscardUnknown() { var xxx_messageInfo_ValidatingWebhookConfigurationList proto.InternalMessageInfo -func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } -func (*WebhookClientConfig) ProtoMessage() {} -func (*WebhookClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_abeea74cbc46f55a, []int{8} +func (m *Validation) Reset() { *m = Validation{} } +func (*Validation) ProtoMessage() {} +func (*Validation) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{22} } -func (m *WebhookClientConfig) XXX_Unmarshal(b []byte) error { +func (m *Validation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *Validation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { @@ -285,27 +678,99 @@ func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, } return b[:n], nil } -func (m *WebhookClientConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_WebhookClientConfig.Merge(m, src) +func (m *Validation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validation.Merge(m, src) } -func (m *WebhookClientConfig) XXX_Size() int { +func (m *Validation) XXX_Size() int { return m.Size() } -func (m *WebhookClientConfig) XXX_DiscardUnknown() { - xxx_messageInfo_WebhookClientConfig.DiscardUnknown(m) +func (m *Validation) XXX_DiscardUnknown() { + xxx_messageInfo_Validation.DiscardUnknown(m) } -var xxx_messageInfo_WebhookClientConfig proto.InternalMessageInfo +var xxx_messageInfo_Validation proto.InternalMessageInfo -func init() { - proto.RegisterType((*MatchCondition)(nil), "k8s.io.api.admissionregistration.v1beta1.MatchCondition") - proto.RegisterType((*MutatingWebhook)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhook") +func (m *Variable) Reset() { *m = Variable{} } +func (*Variable) ProtoMessage() {} +func (*Variable) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{23} +} +func (m *Variable) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Variable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Variable) XXX_Merge(src proto.Message) { + xxx_messageInfo_Variable.Merge(m, src) +} +func (m *Variable) XXX_Size() int { + return m.Size() +} +func (m *Variable) XXX_DiscardUnknown() { + xxx_messageInfo_Variable.DiscardUnknown(m) +} + +var xxx_messageInfo_Variable proto.InternalMessageInfo + +func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } +func (*WebhookClientConfig) ProtoMessage() {} +func (*WebhookClientConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{24} +} +func (m *WebhookClientConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebhookClientConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebhookClientConfig.Merge(m, src) +} +func (m *WebhookClientConfig) XXX_Size() int { + return m.Size() +} +func (m *WebhookClientConfig) XXX_DiscardUnknown() { + xxx_messageInfo_WebhookClientConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_WebhookClientConfig proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AuditAnnotation)(nil), "k8s.io.api.admissionregistration.v1beta1.AuditAnnotation") + proto.RegisterType((*ExpressionWarning)(nil), "k8s.io.api.admissionregistration.v1beta1.ExpressionWarning") + proto.RegisterType((*MatchCondition)(nil), "k8s.io.api.admissionregistration.v1beta1.MatchCondition") + proto.RegisterType((*MatchResources)(nil), "k8s.io.api.admissionregistration.v1beta1.MatchResources") + proto.RegisterType((*MutatingWebhook)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhook") proto.RegisterType((*MutatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhookConfiguration") proto.RegisterType((*MutatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList") + proto.RegisterType((*NamedRuleWithOperations)(nil), "k8s.io.api.admissionregistration.v1beta1.NamedRuleWithOperations") + proto.RegisterType((*ParamKind)(nil), "k8s.io.api.admissionregistration.v1beta1.ParamKind") + proto.RegisterType((*ParamRef)(nil), "k8s.io.api.admissionregistration.v1beta1.ParamRef") proto.RegisterType((*ServiceReference)(nil), "k8s.io.api.admissionregistration.v1beta1.ServiceReference") + proto.RegisterType((*TypeChecking)(nil), "k8s.io.api.admissionregistration.v1beta1.TypeChecking") + proto.RegisterType((*ValidatingAdmissionPolicy)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicy") + proto.RegisterType((*ValidatingAdmissionPolicyBinding)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBinding") + proto.RegisterType((*ValidatingAdmissionPolicyBindingList)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBindingList") + proto.RegisterType((*ValidatingAdmissionPolicyBindingSpec)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBindingSpec") + proto.RegisterType((*ValidatingAdmissionPolicyList)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyList") + proto.RegisterType((*ValidatingAdmissionPolicySpec)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicySpec") + proto.RegisterType((*ValidatingAdmissionPolicyStatus)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyStatus") proto.RegisterType((*ValidatingWebhook)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhook") proto.RegisterType((*ValidatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration") proto.RegisterType((*ValidatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList") + proto.RegisterType((*Validation)(nil), "k8s.io.api.admissionregistration.v1beta1.Validation") + proto.RegisterType((*Variable)(nil), "k8s.io.api.admissionregistration.v1beta1.Variable") proto.RegisterType((*WebhookClientConfig)(nil), "k8s.io.api.admissionregistration.v1beta1.WebhookClientConfig") } @@ -314,73 +779,197 @@ func init() { } var fileDescriptor_abeea74cbc46f55a = []byte{ - // 1041 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0x4f, 0x73, 0xdb, 0xc4, - 0x1b, 0x8e, 0xe2, 0xf8, 0x17, 0x67, 0xed, 0x24, 0xcd, 0xfe, 0x80, 0x88, 0xd0, 0xb1, 0x3c, 0x3e, - 0x30, 0xbe, 0x20, 0xb5, 0x29, 0x03, 0xa5, 0x0c, 0x87, 0x2a, 0xb4, 0x03, 0x33, 0x49, 0x5a, 0x36, - 0xfd, 0x33, 0x03, 0x65, 0xa6, 0x6b, 0xf9, 0xb5, 0xbd, 0x58, 0xd2, 0x7a, 0xb4, 0xab, 0xb4, 0x19, - 0x2e, 0x7c, 0x04, 0xbe, 0x02, 0x1f, 0x84, 0x03, 0xb7, 0x1c, 0x7b, 0xec, 0x05, 0x0d, 0x11, 0x67, - 0x0e, 0x5c, 0x73, 0x62, 0xb4, 0x52, 0x6c, 0xcb, 0x76, 0x5a, 0x11, 0x66, 0x72, 0xca, 0xcd, 0xfb, - 0xbc, 0xfb, 0xbe, 0xcf, 0x3e, 0xab, 0x77, 0xdf, 0x67, 0x8c, 0xbe, 0x19, 0xdc, 0x16, 0x26, 0xe3, - 0xd6, 0x20, 0x6c, 0x43, 0xe0, 0x83, 0x04, 0x61, 0x1d, 0x82, 0xdf, 0xe1, 0x81, 0x95, 0x05, 0xe8, - 0x90, 0x59, 0xb4, 0xe3, 0x31, 0x21, 0x18, 0xf7, 0x03, 0xe8, 0x31, 0x21, 0x03, 0x2a, 0x19, 0xf7, - 0xad, 0xc3, 0x9b, 0x6d, 0x90, 0xf4, 0xa6, 0xd5, 0x03, 0x1f, 0x02, 0x2a, 0xa1, 0x63, 0x0e, 0x03, - 0x2e, 0x39, 0x6e, 0xa5, 0x99, 0x26, 0x1d, 0x32, 0x73, 0x6e, 0xa6, 0x99, 0x65, 0x6e, 0x7d, 0xd4, - 0x63, 0xb2, 0x1f, 0xb6, 0x4d, 0x87, 0x7b, 0x56, 0x8f, 0xf7, 0xb8, 0xa5, 0x0a, 0xb4, 0xc3, 0xae, - 0x5a, 0xa9, 0x85, 0xfa, 0x95, 0x16, 0xde, 0xba, 0x55, 0xe0, 0x48, 0xd3, 0xa7, 0xd9, 0xfa, 0x78, - 0x9c, 0xe4, 0x51, 0xa7, 0xcf, 0x7c, 0x08, 0x8e, 0xac, 0xe1, 0xa0, 0x97, 0x00, 0xc2, 0xf2, 0x40, - 0xd2, 0x79, 0x59, 0xd6, 0x79, 0x59, 0x41, 0xe8, 0x4b, 0xe6, 0xc1, 0x4c, 0xc2, 0x27, 0x6f, 0x4b, - 0x10, 0x4e, 0x1f, 0x3c, 0x3a, 0x9d, 0xd7, 0xec, 0xa2, 0xb5, 0x3d, 0x2a, 0x9d, 0xfe, 0x0e, 0xf7, - 0x3b, 0x2c, 0xd1, 0x80, 0x1b, 0x68, 0xc9, 0xa7, 0x1e, 0xe8, 0x5a, 0x43, 0x6b, 0xad, 0xd8, 0xb5, - 0xe3, 0xc8, 0x58, 0x88, 0x23, 0x63, 0x69, 0x9f, 0x7a, 0x40, 0x54, 0x04, 0x6f, 0x23, 0x04, 0x2f, - 0x87, 0x01, 0x28, 0xfd, 0xfa, 0xa2, 0xda, 0x87, 0xb3, 0x7d, 0xe8, 0xde, 0x28, 0x42, 0x26, 0x76, - 0x35, 0x7f, 0xab, 0xa0, 0xf5, 0xbd, 0x50, 0x52, 0xc9, 0xfc, 0xde, 0x53, 0x68, 0xf7, 0x39, 0x1f, - 0x14, 0x60, 0x7a, 0x81, 0x6a, 0x8e, 0xcb, 0xc0, 0x97, 0x3b, 0xdc, 0xef, 0xb2, 0x9e, 0xe2, 0xaa, - 0x6e, 0x7f, 0x61, 0x16, 0xfd, 0xc2, 0x66, 0x46, 0xb5, 0x33, 0x51, 0xc4, 0x7e, 0x27, 0x23, 0xaa, - 0x4d, 0xa2, 0x24, 0x47, 0x84, 0x9f, 0xa1, 0x72, 0x10, 0xba, 0x20, 0xf4, 0x52, 0xa3, 0xd4, 0xaa, - 0x6e, 0x7f, 0x5a, 0x84, 0xd1, 0x24, 0xa1, 0x0b, 0x4f, 0x99, 0xec, 0x3f, 0x18, 0x42, 0x0a, 0x0a, - 0x7b, 0x35, 0xe3, 0x2a, 0x27, 0x31, 0x41, 0xd2, 0xa2, 0x78, 0x17, 0xad, 0x76, 0x29, 0x73, 0xc3, - 0x00, 0x1e, 0x72, 0x97, 0x39, 0x47, 0xfa, 0x92, 0xba, 0x81, 0x0f, 0xe3, 0xc8, 0x58, 0xbd, 0x3f, - 0x19, 0x38, 0x8d, 0x8c, 0x8d, 0x1c, 0xf0, 0xe8, 0x68, 0x08, 0x24, 0x9f, 0x8c, 0xbf, 0x44, 0x55, - 0x2f, 0xf9, 0x84, 0x59, 0xad, 0x15, 0x55, 0xab, 0x19, 0x47, 0x46, 0x75, 0x6f, 0x0c, 0x9f, 0x46, - 0xc6, 0xfa, 0xc4, 0x52, 0xd5, 0x99, 0x4c, 0xc3, 0x2f, 0xd1, 0x46, 0x72, 0xe5, 0x62, 0x48, 0x1d, - 0x38, 0x00, 0x17, 0x1c, 0xc9, 0x03, 0xbd, 0xac, 0xee, 0xfb, 0xd6, 0x84, 0xfa, 0x51, 0x73, 0x99, - 0xc3, 0x41, 0x2f, 0x01, 0x84, 0x99, 0xf4, 0x70, 0x22, 0x7f, 0x97, 0xb6, 0xc1, 0x3d, 0x4b, 0xb5, - 0xdf, 0x8d, 0x23, 0x63, 0x63, 0x7f, 0xba, 0x22, 0x99, 0x25, 0xc1, 0x1c, 0xad, 0xf1, 0xf6, 0x0f, - 0xe0, 0xc8, 0x11, 0x6d, 0xf5, 0xe2, 0xb4, 0x38, 0x8e, 0x8c, 0xb5, 0x07, 0xb9, 0x72, 0x64, 0xaa, - 0x7c, 0x72, 0x61, 0x82, 0x75, 0xe0, 0x5e, 0xb7, 0x0b, 0x8e, 0x14, 0xfa, 0xff, 0xc6, 0x17, 0x76, - 0x30, 0x86, 0x93, 0x0b, 0x1b, 0x2f, 0x77, 0x5c, 0x2a, 0x04, 0x99, 0x4c, 0xc3, 0x77, 0xd0, 0x5a, - 0xf2, 0xb0, 0x78, 0x28, 0x0f, 0xc0, 0xe1, 0x7e, 0x47, 0xe8, 0xcb, 0x0d, 0xad, 0x55, 0x4e, 0x4f, - 0xf0, 0x28, 0x17, 0x21, 0x53, 0x3b, 0xf1, 0x63, 0xb4, 0x39, 0xea, 0x22, 0x02, 0x87, 0x0c, 0x5e, - 0x3c, 0x81, 0x20, 0x59, 0x08, 0xbd, 0xd2, 0x28, 0xb5, 0x56, 0xec, 0x0f, 0xe2, 0xc8, 0xd8, 0xbc, - 0x3b, 0x7f, 0x0b, 0x39, 0x2f, 0x17, 0x3f, 0x47, 0x38, 0x00, 0xe6, 0x1f, 0x72, 0x47, 0xb5, 0x5f, - 0xd6, 0x10, 0x48, 0xe9, 0xbb, 0x11, 0x47, 0x06, 0x26, 0x33, 0xd1, 0xd3, 0xc8, 0x78, 0x6f, 0x16, - 0x55, 0xed, 0x31, 0xa7, 0x16, 0xfe, 0x11, 0xad, 0x7b, 0xb9, 0x71, 0x21, 0xf4, 0x9a, 0x7a, 0x21, - 0xb7, 0x8b, 0xbf, 0xc9, 0xfc, 0xbc, 0xb1, 0x37, 0xb3, 0x27, 0xb2, 0x9e, 0xc7, 0x05, 0x99, 0x66, - 0x6a, 0xfe, 0xae, 0xa1, 0xeb, 0x53, 0x33, 0x24, 0x7d, 0xae, 0x61, 0xca, 0x80, 0x9f, 0xa3, 0x4a, - 0xd2, 0x15, 0x1d, 0x2a, 0xa9, 0x1a, 0x2a, 0xd5, 0xed, 0x1b, 0xc5, 0x7a, 0x28, 0x6d, 0x98, 0x3d, - 0x90, 0x74, 0x3c, 0xc8, 0xc6, 0x18, 0x19, 0x55, 0xc5, 0xdf, 0xa1, 0x4a, 0xc6, 0x2c, 0xf4, 0x45, - 0x25, 0xfc, 0xb3, 0x7f, 0x21, 0x3c, 0x7f, 0x76, 0x7b, 0x29, 0xa1, 0x22, 0xa3, 0x82, 0xcd, 0xbf, - 0x34, 0xd4, 0x78, 0x93, 0xbe, 0x5d, 0x26, 0x24, 0x7e, 0x36, 0xa3, 0xd1, 0x2c, 0xf8, 0x4e, 0x98, - 0x48, 0x15, 0x5e, 0xcb, 0x14, 0x56, 0xce, 0x90, 0x09, 0x7d, 0x03, 0x54, 0x66, 0x12, 0xbc, 0x33, - 0x71, 0xf7, 0x2f, 0x2c, 0x2e, 0x77, 0xf0, 0xf1, 0x18, 0xfc, 0x3a, 0x29, 0x4e, 0x52, 0x8e, 0xe6, - 0x2f, 0x1a, 0xba, 0x76, 0x00, 0xc1, 0x21, 0x73, 0x80, 0x40, 0x17, 0x02, 0xf0, 0x1d, 0xc0, 0x16, - 0x5a, 0x19, 0x8d, 0x88, 0xcc, 0x19, 0x36, 0xb2, 0xec, 0x95, 0xd1, 0x38, 0x21, 0xe3, 0x3d, 0x23, - 0x17, 0x59, 0x3c, 0xd7, 0x45, 0xae, 0xa3, 0xa5, 0x21, 0x95, 0x7d, 0xbd, 0xa4, 0x76, 0x54, 0x92, - 0xe8, 0x43, 0x2a, 0xfb, 0x44, 0xa1, 0x2a, 0xca, 0x03, 0xa9, 0x66, 0x70, 0x39, 0x8b, 0xf2, 0x40, - 0x12, 0x85, 0x36, 0x4f, 0x96, 0xd1, 0xc6, 0x13, 0xea, 0xb2, 0xce, 0x95, 0x73, 0x5d, 0x39, 0xd7, - 0xdb, 0x9d, 0x0b, 0x5d, 0x39, 0xd7, 0x85, 0x9c, 0x6b, 0x8e, 0xaf, 0x54, 0x2f, 0xcd, 0x57, 0x4e, - 0x34, 0x54, 0x9f, 0x79, 0xe3, 0x97, 0xed, 0x2c, 0xdf, 0xcf, 0x38, 0xcb, 0xe7, 0xc5, 0xa5, 0xcf, - 0x9c, 0x7e, 0xc6, 0x5b, 0xfe, 0xd6, 0x50, 0xf3, 0xcd, 0x1a, 0x2f, 0xc1, 0x5d, 0xbc, 0xbc, 0xbb, - 0x7c, 0xf5, 0x1f, 0x04, 0x16, 0xf1, 0x97, 0x5f, 0x35, 0xf4, 0xff, 0x39, 0x63, 0x14, 0xbf, 0x8f, - 0x4a, 0x61, 0xe0, 0x66, 0x76, 0xb0, 0x1c, 0x47, 0x46, 0xe9, 0x31, 0xd9, 0x25, 0x09, 0x86, 0x29, - 0x5a, 0x16, 0xa9, 0x23, 0x65, 0xf2, 0xef, 0x14, 0x3f, 0xe3, 0xb4, 0x95, 0xd9, 0xd5, 0x38, 0x32, - 0x96, 0xcf, 0xd0, 0xb3, 0xba, 0xb8, 0x85, 0x2a, 0x0e, 0xb5, 0x43, 0xbf, 0xe3, 0xa6, 0x9e, 0x55, - 0xb3, 0x6b, 0xc9, 0x75, 0xed, 0xdc, 0x4d, 0x31, 0x32, 0x8a, 0xda, 0xfb, 0xc7, 0x27, 0xf5, 0x85, - 0x57, 0x27, 0xf5, 0x85, 0xd7, 0x27, 0xf5, 0x85, 0x9f, 0xe2, 0xba, 0x76, 0x1c, 0xd7, 0xb5, 0x57, - 0x71, 0x5d, 0x7b, 0x1d, 0xd7, 0xb5, 0x3f, 0xe2, 0xba, 0xf6, 0xf3, 0x9f, 0xf5, 0x85, 0x6f, 0x5b, - 0x45, 0xff, 0x28, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xf5, 0x97, 0x1c, 0x6c, 0x0f, 0x00, - 0x00, + // 1973 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x1a, 0x4d, 0x6f, 0x23, 0x49, + 0x35, 0x1d, 0xe7, 0xc3, 0x7e, 0xce, 0x97, 0x6b, 0x67, 0x89, 0x77, 0x76, 0xd6, 0x8e, 0x5a, 0x2b, + 0x94, 0x91, 0xc0, 0xde, 0xc9, 0xae, 0x76, 0x97, 0x59, 0x21, 0x14, 0x67, 0x67, 0x86, 0x99, 0x9d, + 0x64, 0x42, 0x65, 0x37, 0x91, 0x60, 0x57, 0x9a, 0x72, 0x77, 0xd9, 0x6e, 0x6c, 0x77, 0x37, 0x5d, + 0x6d, 0xcf, 0x04, 0x24, 0x40, 0xe2, 0xb0, 0x57, 0x24, 0x2e, 0x48, 0x9c, 0xf8, 0x0b, 0xdc, 0x91, + 0xe0, 0x36, 0xc7, 0xbd, 0x31, 0x12, 0xc2, 0x22, 0xe6, 0xc0, 0x89, 0x03, 0x07, 0x38, 0xe4, 0x02, + 0xaa, 0xea, 0xea, 0x4f, 0xb7, 0x27, 0x9d, 0x90, 0x09, 0x97, 0xb9, 0xa5, 0xdf, 0x67, 0xbd, 0x57, + 0xef, 0xab, 0x9e, 0x03, 0xdf, 0xeb, 0x7e, 0xc8, 0x6a, 0x86, 0x55, 0xef, 0x0e, 0x9a, 0xd4, 0x31, + 0xa9, 0x4b, 0x59, 0x7d, 0x48, 0x4d, 0xdd, 0x72, 0xea, 0x12, 0x41, 0x6c, 0xa3, 0x4e, 0xf4, 0xbe, + 0xc1, 0x98, 0x61, 0x99, 0x0e, 0x6d, 0x1b, 0xcc, 0x75, 0x88, 0x6b, 0x58, 0x66, 0x7d, 0x78, 0xab, + 0x49, 0x5d, 0x72, 0xab, 0xde, 0xa6, 0x26, 0x75, 0x88, 0x4b, 0xf5, 0x9a, 0xed, 0x58, 0xae, 0x85, + 0x36, 0x3d, 0xce, 0x1a, 0xb1, 0x8d, 0x5a, 0x2a, 0x67, 0x4d, 0x72, 0x5e, 0xff, 0x66, 0xdb, 0x70, + 0x3b, 0x83, 0x66, 0x4d, 0xb3, 0xfa, 0xf5, 0xb6, 0xd5, 0xb6, 0xea, 0x42, 0x40, 0x73, 0xd0, 0x12, + 0x5f, 0xe2, 0x43, 0xfc, 0xe5, 0x09, 0xbe, 0xfe, 0x6e, 0x86, 0x23, 0x25, 0x4f, 0x73, 0xfd, 0xbd, + 0x90, 0xa9, 0x4f, 0xb4, 0x8e, 0x61, 0x52, 0xe7, 0xb8, 0x6e, 0x77, 0xdb, 0x1c, 0xc0, 0xea, 0x7d, + 0xea, 0x92, 0x34, 0xae, 0xfa, 0x34, 0x2e, 0x67, 0x60, 0xba, 0x46, 0x9f, 0x4e, 0x30, 0xbc, 0x7f, + 0x16, 0x03, 0xd3, 0x3a, 0xb4, 0x4f, 0x92, 0x7c, 0x2a, 0x83, 0xd5, 0xed, 0x81, 0x6e, 0xb8, 0xdb, + 0xa6, 0x69, 0xb9, 0xc2, 0x08, 0xf4, 0x16, 0xe4, 0xba, 0xf4, 0xb8, 0xac, 0x6c, 0x28, 0x9b, 0x85, + 0x46, 0xf1, 0xd9, 0xa8, 0x3a, 0x33, 0x1e, 0x55, 0x73, 0x9f, 0xd0, 0x63, 0xcc, 0xe1, 0x68, 0x1b, + 0x56, 0x87, 0xa4, 0x37, 0xa0, 0x77, 0x9e, 0xda, 0x0e, 0x15, 0x2e, 0x28, 0xcf, 0x0a, 0xd2, 0x75, + 0x49, 0xba, 0x7a, 0x18, 0x47, 0xe3, 0x24, 0xbd, 0xda, 0x83, 0x52, 0xf8, 0x75, 0x44, 0x1c, 0xd3, + 0x30, 0xdb, 0xe8, 0x1b, 0x90, 0x6f, 0x19, 0xb4, 0xa7, 0x63, 0xda, 0x92, 0x02, 0xd7, 0xa4, 0xc0, + 0xfc, 0x5d, 0x09, 0xc7, 0x01, 0x05, 0xba, 0x09, 0x8b, 0x4f, 0x3c, 0xc6, 0x72, 0x4e, 0x10, 0xaf, + 0x4a, 0xe2, 0x45, 0x29, 0x0f, 0xfb, 0x78, 0xb5, 0x05, 0x2b, 0xbb, 0xc4, 0xd5, 0x3a, 0x3b, 0x96, + 0xa9, 0x1b, 0xc2, 0xc2, 0x0d, 0x98, 0x33, 0x49, 0x9f, 0x4a, 0x13, 0x97, 0x24, 0xe7, 0xdc, 0x1e, + 0xe9, 0x53, 0x2c, 0x30, 0x68, 0x0b, 0x80, 0x26, 0xed, 0x43, 0x92, 0x0e, 0x22, 0xa6, 0x45, 0xa8, + 0xd4, 0x3f, 0xcd, 0x49, 0x45, 0x98, 0x32, 0x6b, 0xe0, 0x68, 0x94, 0xa1, 0xa7, 0x50, 0xe2, 0xe2, + 0x98, 0x4d, 0x34, 0x7a, 0x40, 0x7b, 0x54, 0x73, 0x2d, 0x47, 0x68, 0x2d, 0x6e, 0xbd, 0x5b, 0x0b, + 0xc3, 0x34, 0xb8, 0xb1, 0x9a, 0xdd, 0x6d, 0x73, 0x00, 0xab, 0xf1, 0xc0, 0xa8, 0x0d, 0x6f, 0xd5, + 0x1e, 0x92, 0x26, 0xed, 0xf9, 0xac, 0x8d, 0xd7, 0xc7, 0xa3, 0x6a, 0x69, 0x2f, 0x29, 0x11, 0x4f, + 0x2a, 0x41, 0x16, 0xac, 0x58, 0xcd, 0x1f, 0x52, 0xcd, 0x0d, 0xd4, 0xce, 0x5e, 0x5c, 0x2d, 0x1a, + 0x8f, 0xaa, 0x2b, 0x8f, 0x62, 0xe2, 0x70, 0x42, 0x3c, 0xfa, 0x29, 0x2c, 0x3b, 0xd2, 0x6e, 0x3c, + 0xe8, 0x51, 0x56, 0xce, 0x6d, 0xe4, 0x36, 0x8b, 0x5b, 0xdb, 0xb5, 0xac, 0xd9, 0x58, 0xe3, 0x76, + 0xe9, 0x9c, 0xf7, 0xc8, 0x70, 0x3b, 0x8f, 0x6c, 0xea, 0xa1, 0x59, 0xe3, 0x75, 0xe9, 0xf7, 0x65, + 0x1c, 0x95, 0x8f, 0xe3, 0xea, 0xd0, 0xaf, 0x14, 0xb8, 0x46, 0x9f, 0x6a, 0xbd, 0x81, 0x4e, 0x63, + 0x74, 0xe5, 0xb9, 0xcb, 0x3a, 0xc7, 0x0d, 0x79, 0x8e, 0x6b, 0x77, 0x52, 0xd4, 0xe0, 0x54, 0xe5, + 0xe8, 0x63, 0x28, 0xf6, 0x79, 0x48, 0xec, 0x5b, 0x3d, 0x43, 0x3b, 0x2e, 0x2f, 0x8a, 0x40, 0x52, + 0xc7, 0xa3, 0x6a, 0x71, 0x37, 0x04, 0x9f, 0x8e, 0xaa, 0xab, 0x91, 0xcf, 0x4f, 0x8f, 0x6d, 0x8a, + 0xa3, 0x6c, 0xea, 0x1f, 0xf3, 0xb0, 0xba, 0x3b, 0xe0, 0xe9, 0x69, 0xb6, 0x8f, 0x68, 0xb3, 0x63, + 0x59, 0xdd, 0x0c, 0x31, 0xfc, 0x04, 0x96, 0xb4, 0x9e, 0x41, 0x4d, 0x77, 0xc7, 0x32, 0x5b, 0x46, + 0x5b, 0x06, 0xc0, 0xb7, 0xb3, 0x3b, 0x42, 0xaa, 0xda, 0x89, 0x08, 0x69, 0x5c, 0x93, 0x8a, 0x96, + 0xa2, 0x50, 0x1c, 0x53, 0x84, 0x3e, 0x87, 0x79, 0x27, 0x12, 0x02, 0x1f, 0x64, 0xd1, 0x58, 0x4b, + 0x71, 0xf8, 0xb2, 0xd4, 0x35, 0xef, 0x79, 0xd8, 0x13, 0x8a, 0x1e, 0xc2, 0x72, 0x8b, 0x18, 0xbd, + 0x81, 0x43, 0xa5, 0x53, 0xe7, 0x84, 0x07, 0xbe, 0xce, 0x23, 0xe4, 0x6e, 0x14, 0x71, 0x3a, 0xaa, + 0x96, 0x62, 0x00, 0xe1, 0xd8, 0x38, 0x73, 0xf2, 0x82, 0x0a, 0x17, 0xba, 0xa0, 0xf4, 0x3c, 0x9f, + 0xff, 0xff, 0xe4, 0x79, 0xf1, 0xe5, 0xe6, 0xf9, 0xc7, 0x50, 0x64, 0x86, 0x4e, 0xef, 0xb4, 0x5a, + 0x54, 0x73, 0x59, 0x79, 0x21, 0x74, 0xd8, 0x41, 0x08, 0xe6, 0x0e, 0x0b, 0x3f, 0x77, 0x7a, 0x84, + 0x31, 0x1c, 0x65, 0x43, 0xb7, 0x61, 0x85, 0x77, 0x25, 0x6b, 0xe0, 0x1e, 0x50, 0xcd, 0x32, 0x75, + 0x26, 0x52, 0x63, 0xde, 0x3b, 0xc1, 0xa7, 0x31, 0x0c, 0x4e, 0x50, 0xa2, 0xcf, 0x60, 0x3d, 0x88, + 0x22, 0x4c, 0x87, 0x06, 0x7d, 0x72, 0x48, 0x1d, 0xfe, 0xc1, 0xca, 0xf9, 0x8d, 0xdc, 0x66, 0xa1, + 0xf1, 0xe6, 0x78, 0x54, 0x5d, 0xdf, 0x4e, 0x27, 0xc1, 0xd3, 0x78, 0xd1, 0x63, 0x40, 0x0e, 0x35, + 0xcc, 0xa1, 0xa5, 0x89, 0xf0, 0x93, 0x01, 0x01, 0xc2, 0xbe, 0x77, 0xc6, 0xa3, 0x2a, 0xc2, 0x13, + 0xd8, 0xd3, 0x51, 0xf5, 0x6b, 0x93, 0x50, 0x11, 0x1e, 0x29, 0xb2, 0xd0, 0x4f, 0x60, 0xb5, 0x1f, + 0x6b, 0x44, 0xac, 0xbc, 0x24, 0x32, 0xe4, 0xc3, 0xec, 0x39, 0x19, 0xef, 0x64, 0x61, 0xcf, 0x8d, + 0xc3, 0x19, 0x4e, 0x6a, 0x52, 0xff, 0xa2, 0xc0, 0x8d, 0x44, 0x0d, 0xf1, 0xd2, 0x75, 0xe0, 0x69, + 0x40, 0x8f, 0x21, 0xcf, 0xa3, 0x42, 0x27, 0x2e, 0x91, 0x2d, 0xea, 0x9d, 0x6c, 0x31, 0xe4, 0x05, + 0xcc, 0x2e, 0x75, 0x49, 0xd8, 0x22, 0x43, 0x18, 0x0e, 0xa4, 0xa2, 0x1f, 0x40, 0x5e, 0x6a, 0x66, + 0xe5, 0x59, 0x61, 0xf8, 0xb7, 0xce, 0x61, 0x78, 0xfc, 0xec, 0x8d, 0x39, 0xae, 0x0a, 0x07, 0x02, + 0xd5, 0x7f, 0x28, 0xb0, 0xf1, 0x22, 0xfb, 0x1e, 0x1a, 0xcc, 0x45, 0x9f, 0x4f, 0xd8, 0x58, 0xcb, + 0x98, 0x27, 0x06, 0xf3, 0x2c, 0x0c, 0x66, 0x12, 0x1f, 0x12, 0xb1, 0xaf, 0x0b, 0xf3, 0x86, 0x4b, + 0xfb, 0xbe, 0x71, 0x77, 0x2f, 0x6c, 0x5c, 0xec, 0xe0, 0x61, 0x19, 0xbc, 0xcf, 0x85, 0x63, 0x4f, + 0x87, 0xfa, 0x5c, 0x81, 0xf5, 0x29, 0x9d, 0x0a, 0x7d, 0x10, 0xf6, 0x62, 0x51, 0x44, 0xca, 0x8a, + 0xc8, 0x8b, 0x52, 0xb4, 0x89, 0x0a, 0x04, 0x8e, 0xd3, 0xa1, 0x5f, 0x28, 0x80, 0x9c, 0x09, 0x79, + 0xb2, 0x73, 0x5c, 0xb8, 0x8e, 0x5f, 0x97, 0x06, 0xa0, 0x49, 0x1c, 0x4e, 0x51, 0xa7, 0x12, 0x28, + 0xec, 0x13, 0x87, 0xf4, 0x3f, 0x31, 0x4c, 0x9d, 0x4f, 0x62, 0xc4, 0x36, 0x64, 0x96, 0xca, 0x6e, + 0x17, 0x84, 0xd9, 0xf6, 0xfe, 0x7d, 0x89, 0xc1, 0x11, 0x2a, 0xde, 0x1b, 0xbb, 0x86, 0xa9, 0xcb, + 0xb9, 0x2d, 0xe8, 0x8d, 0x5c, 0x1e, 0x16, 0x18, 0xf5, 0x77, 0xb3, 0x90, 0x17, 0x3a, 0xf8, 0x2c, + 0x79, 0x76, 0x2b, 0xad, 0x43, 0x21, 0x28, 0xbd, 0x52, 0x6a, 0x49, 0x92, 0x15, 0x82, 0x32, 0x8d, + 0x43, 0x1a, 0xf4, 0x05, 0xe4, 0x99, 0x5f, 0x90, 0x73, 0x17, 0x2f, 0xc8, 0x4b, 0x3c, 0xd2, 0x82, + 0x52, 0x1c, 0x88, 0x44, 0x2e, 0xac, 0xdb, 0xfc, 0xf4, 0xd4, 0xa5, 0xce, 0x9e, 0xe5, 0xde, 0xb5, + 0x06, 0xa6, 0xbe, 0xad, 0x71, 0xef, 0xc9, 0x6e, 0x78, 0x9b, 0x97, 0xc0, 0xfd, 0x74, 0x92, 0xd3, + 0x51, 0xf5, 0xcd, 0x29, 0x28, 0x51, 0xba, 0xa6, 0x89, 0x56, 0x7f, 0xab, 0xc0, 0xda, 0x01, 0x75, + 0x86, 0x86, 0x46, 0x31, 0x6d, 0x51, 0x87, 0x9a, 0x5a, 0xc2, 0x35, 0x4a, 0x06, 0xd7, 0xf8, 0xde, + 0x9e, 0x9d, 0xea, 0xed, 0x1b, 0x30, 0x67, 0x13, 0xb7, 0x23, 0x07, 0xfb, 0x3c, 0xc7, 0xee, 0x13, + 0xb7, 0x83, 0x05, 0x54, 0x60, 0x2d, 0xc7, 0x15, 0x86, 0xce, 0x4b, 0xac, 0xe5, 0xb8, 0x58, 0x40, + 0xd5, 0x5f, 0x2b, 0xb0, 0xc4, 0xad, 0xd8, 0xe9, 0x50, 0xad, 0xcb, 0x9f, 0x15, 0x5f, 0x2a, 0x80, + 0x68, 0xf2, 0xb1, 0xe1, 0x65, 0x44, 0x71, 0xeb, 0xa3, 0xec, 0x29, 0x3a, 0xf1, 0x60, 0x09, 0xc3, + 0x7a, 0x02, 0xc5, 0x70, 0x8a, 0x4a, 0xf5, 0xcf, 0xb3, 0xf0, 0xc6, 0x21, 0xe9, 0x19, 0xba, 0x48, + 0xf5, 0xa0, 0x3f, 0xc9, 0xe6, 0xf0, 0xf2, 0xcb, 0xaf, 0x01, 0x73, 0xcc, 0xa6, 0x9a, 0xcc, 0xe6, + 0x7b, 0xd9, 0x4d, 0x9f, 0x7a, 0xe8, 0x03, 0x9b, 0x6a, 0xe1, 0x0d, 0xf2, 0x2f, 0x2c, 0x54, 0xa0, + 0x1f, 0xc1, 0x02, 0x73, 0x89, 0x3b, 0x60, 0x32, 0xf8, 0xef, 0x5f, 0x86, 0x32, 0x21, 0xb0, 0xb1, + 0x22, 0xd5, 0x2d, 0x78, 0xdf, 0x58, 0x2a, 0x52, 0xff, 0xad, 0xc0, 0xc6, 0x54, 0xde, 0x86, 0x61, + 0xea, 0x3c, 0x18, 0x5e, 0xbe, 0x93, 0xed, 0x98, 0x93, 0xf7, 0x2e, 0xc1, 0x6e, 0x79, 0xf6, 0x69, + 0xbe, 0x56, 0xff, 0xa5, 0xc0, 0xdb, 0x67, 0x31, 0x5f, 0x41, 0xf3, 0xb3, 0xe2, 0xcd, 0xef, 0xc1, + 0xe5, 0x59, 0x3e, 0xa5, 0x01, 0x7e, 0x99, 0x3b, 0xdb, 0x6e, 0xee, 0x26, 0xde, 0x41, 0x6c, 0x01, + 0xdc, 0x0b, 0x8b, 0x7c, 0x70, 0x89, 0xfb, 0x01, 0x06, 0x47, 0xa8, 0xb8, 0xaf, 0x6c, 0xd9, 0x1e, + 0xe4, 0x55, 0x6e, 0x65, 0x37, 0xc8, 0x6f, 0x2c, 0x5e, 0xf9, 0xf6, 0xbf, 0x70, 0x20, 0x11, 0xb9, + 0xb0, 0xd2, 0x8f, 0x2d, 0x0a, 0x64, 0x9a, 0x9c, 0x77, 0x0e, 0x0c, 0xf8, 0xbd, 0xb9, 0x39, 0x0e, + 0xc3, 0x09, 0x1d, 0xe8, 0x08, 0x4a, 0x43, 0xe9, 0x2f, 0xcb, 0xf4, 0x4a, 0xba, 0xf7, 0x3a, 0x2e, + 0x34, 0x6e, 0xf2, 0xf7, 0xc6, 0x61, 0x12, 0x79, 0x3a, 0xaa, 0xae, 0x25, 0x81, 0x78, 0x52, 0x86, + 0xfa, 0x77, 0x05, 0xde, 0x9a, 0x7a, 0x13, 0x57, 0x10, 0x7a, 0x9d, 0x78, 0xe8, 0xed, 0x5c, 0x46, + 0xe8, 0xa5, 0xc7, 0xdc, 0x6f, 0x16, 0x5e, 0x60, 0xa9, 0x08, 0xb6, 0xc7, 0x50, 0xb0, 0xfd, 0xd9, + 0x25, 0x65, 0xd3, 0x93, 0x25, 0x72, 0x38, 0x6b, 0x63, 0x99, 0xf7, 0xcf, 0xe0, 0x13, 0x87, 0x42, + 0xd1, 0x8f, 0x61, 0xcd, 0x9f, 0xed, 0x39, 0xbf, 0x61, 0xba, 0xfe, 0x80, 0x76, 0xf1, 0xf0, 0xb9, + 0x36, 0x1e, 0x55, 0xd7, 0x76, 0x13, 0x52, 0xf1, 0x84, 0x1e, 0xd4, 0x85, 0x62, 0x78, 0xfd, 0xfe, + 0xfb, 0xfe, 0xbd, 0xf3, 0xfb, 0xdb, 0x32, 0x1b, 0xaf, 0x49, 0x07, 0x17, 0x43, 0x18, 0xc3, 0x51, + 0xe9, 0x97, 0xfc, 0xd0, 0xff, 0x19, 0xac, 0x91, 0xf8, 0xa2, 0x93, 0x95, 0xe7, 0xcf, 0xfb, 0x08, + 0x49, 0xac, 0x4a, 0x1b, 0x65, 0x69, 0xc4, 0x5a, 0x02, 0xc1, 0xf0, 0x84, 0xb2, 0xb4, 0xd7, 0xdf, + 0xc2, 0x55, 0xbd, 0xfe, 0x90, 0x06, 0x85, 0x21, 0x71, 0x0c, 0xd2, 0xec, 0x51, 0xfe, 0xd4, 0xce, + 0x9d, 0xaf, 0xa0, 0x1d, 0x4a, 0xd6, 0x70, 0xb2, 0xf3, 0x21, 0x0c, 0x87, 0x72, 0xd5, 0x3f, 0xcc, + 0x42, 0xf5, 0x8c, 0xf6, 0x8d, 0x1e, 0x00, 0xb2, 0x9a, 0x8c, 0x3a, 0x43, 0xaa, 0xdf, 0xf3, 0x56, + 0xd1, 0xfe, 0x58, 0x9f, 0x0b, 0x07, 0xaa, 0x47, 0x13, 0x14, 0x38, 0x85, 0x0b, 0xf5, 0x60, 0xc9, + 0x8d, 0x8c, 0x7a, 0x32, 0x0b, 0xde, 0xcf, 0x6e, 0x57, 0x74, 0x50, 0x6c, 0xac, 0x8d, 0x47, 0xd5, + 0xd8, 0xe8, 0x88, 0x63, 0xd2, 0x91, 0x06, 0xa0, 0x85, 0x57, 0xe7, 0x85, 0x7e, 0x3d, 0x5b, 0x15, + 0x0b, 0x6f, 0x2c, 0xe8, 0x3b, 0x91, 0xcb, 0x8a, 0x88, 0x55, 0x4f, 0x16, 0xa1, 0x14, 0xba, 0xf0, + 0xd5, 0xae, 0xef, 0xd5, 0xae, 0xef, 0x85, 0xbb, 0x3e, 0x78, 0xb5, 0xeb, 0xbb, 0xd0, 0xae, 0x2f, + 0xa5, 0x16, 0x17, 0xaf, 0x6c, 0x13, 0x77, 0xa2, 0x40, 0x65, 0x22, 0xc7, 0xaf, 0x7a, 0x17, 0xf7, + 0xc5, 0xc4, 0x2e, 0xee, 0xa3, 0x8b, 0x8c, 0x4d, 0xd3, 0xb6, 0x71, 0xff, 0x54, 0x40, 0x7d, 0xb1, + 0x8d, 0x57, 0x30, 0x17, 0xf6, 0xe3, 0x73, 0xe1, 0x77, 0xff, 0x07, 0x03, 0xb3, 0x6c, 0xe4, 0xfe, + 0xa3, 0x00, 0x84, 0xc3, 0x0c, 0x7a, 0x1b, 0x22, 0x3f, 0x14, 0xca, 0xd2, 0xed, 0xb9, 0x29, 0x02, + 0x47, 0x37, 0x61, 0xb1, 0x4f, 0x19, 0x23, 0x6d, 0x7f, 0x21, 0x12, 0xfc, 0x8e, 0xb9, 0xeb, 0x81, + 0xb1, 0x8f, 0x47, 0x47, 0xb0, 0xe0, 0x50, 0xc2, 0x2c, 0x53, 0x2e, 0x46, 0xbe, 0xc3, 0x5f, 0xc1, + 0x58, 0x40, 0x4e, 0x47, 0xd5, 0x5b, 0x59, 0x7e, 0x67, 0xae, 0xc9, 0x47, 0xb3, 0x60, 0xc2, 0x52, + 0x1c, 0xba, 0x07, 0x25, 0xa9, 0x23, 0x72, 0x60, 0xaf, 0xd2, 0xbe, 0x21, 0x4f, 0x53, 0xda, 0x4d, + 0x12, 0xe0, 0x49, 0x1e, 0xf5, 0x01, 0xe4, 0xfd, 0xc1, 0x00, 0x95, 0x61, 0x2e, 0xf2, 0xde, 0xf2, + 0x0c, 0x17, 0x90, 0x84, 0x63, 0x66, 0xd3, 0x1d, 0xa3, 0xfe, 0x5e, 0x81, 0xd7, 0x52, 0x9a, 0x12, + 0x7a, 0x03, 0x72, 0x03, 0xa7, 0x27, 0x5d, 0xb0, 0x38, 0x1e, 0x55, 0x73, 0x9f, 0xe1, 0x87, 0x98, + 0xc3, 0x10, 0x81, 0x45, 0xe6, 0xad, 0xa7, 0x64, 0x30, 0xdd, 0xce, 0x7e, 0xe3, 0xc9, 0xbd, 0x56, + 0xa3, 0xc8, 0xef, 0xc0, 0x87, 0xfa, 0x72, 0xd1, 0x26, 0xe4, 0x35, 0xd2, 0x18, 0x98, 0x7a, 0xcf, + 0xbb, 0xaf, 0x25, 0xef, 0x8d, 0xb7, 0xb3, 0xed, 0xc1, 0x70, 0x80, 0x6d, 0xec, 0x3d, 0x3b, 0xa9, + 0xcc, 0x7c, 0x75, 0x52, 0x99, 0x79, 0x7e, 0x52, 0x99, 0xf9, 0xf9, 0xb8, 0xa2, 0x3c, 0x1b, 0x57, + 0x94, 0xaf, 0xc6, 0x15, 0xe5, 0xf9, 0xb8, 0xa2, 0xfc, 0x75, 0x5c, 0x51, 0x7e, 0xf9, 0xb7, 0xca, + 0xcc, 0xf7, 0x37, 0xb3, 0xfe, 0x97, 0xc3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x71, 0x54, 0x54, + 0xe6, 0x29, 0x21, 0x00, 0x00, +} + +func (m *AuditAnnotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditAnnotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditAnnotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.ValueExpression) + copy(dAtA[i:], m.ValueExpression) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ValueExpression))) + i-- + dAtA[i] = 0x12 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ExpressionWarning) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExpressionWarning) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExpressionWarning) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Warning) + copy(dAtA[i:], m.Warning) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Warning))) + i-- + dAtA[i] = 0x1a + i -= len(m.FieldRef) + copy(dAtA[i:], m.FieldRef) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldRef))) + i-- + dAtA[i] = 0x12 + return len(dAtA) - i, nil } func (m *MatchCondition) Marshal() (dAtA []byte, err error) { @@ -416,6 +1005,88 @@ func (m *MatchCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MatchResources) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MatchResources) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MatchResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x3a + } + if len(m.ExcludeResourceRules) > 0 { + for iNdEx := len(m.ExcludeResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ExcludeResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.ResourceRules) > 0 { + for iNdEx := len(m.ResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *MutatingWebhook) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -642,7 +1313,7 @@ func (m *MutatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (in return len(dAtA) - i, nil } -func (m *ServiceReference) Marshal() (dAtA []byte, err error) { +func (m *NamedRuleWithOperations) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -652,42 +1323,72 @@ func (m *ServiceReference) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ServiceReference) MarshalTo(dAtA []byte) (int, error) { +func (m *NamedRuleWithOperations) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ServiceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *NamedRuleWithOperations) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Port != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) - i-- - dAtA[i] = 0x20 + { + size, err := m.RuleWithOperations.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Path != nil { - i -= len(*m.Path) - copy(dAtA[i:], *m.Path) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Path))) - i-- - dAtA[i] = 0x1a + i-- + dAtA[i] = 0x12 + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0xa + } } - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + return len(dAtA) - i, nil +} + +func (m *ParamKind) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ParamKind) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamKind) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) i-- dAtA[i] = 0x12 - i -= len(m.Namespace) - copy(dAtA[i:], m.Namespace) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *ValidatingWebhook) Marshal() (dAtA []byte, err error) { +func (m *ParamRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -697,33 +1398,26 @@ func (m *ValidatingWebhook) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ValidatingWebhook) MarshalTo(dAtA []byte) (int, error) { +func (m *ParamRef) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ParamRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.MatchConditions) > 0 { - for iNdEx := len(m.MatchConditions) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.MatchConditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } + if m.ParameterNotFoundAction != nil { + i -= len(*m.ParameterNotFoundAction) + copy(dAtA[i:], *m.ParameterNotFoundAction) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ParameterNotFoundAction))) + i-- + dAtA[i] = 0x22 } - if m.ObjectSelector != nil { + if m.Selector != nil { { - size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -731,59 +1425,90 @@ func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x52 - } - if m.MatchPolicy != nil { - i -= len(*m.MatchPolicy) - copy(dAtA[i:], *m.MatchPolicy) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) - i-- - dAtA[i] = 0x4a - } - if len(m.AdmissionReviewVersions) > 0 { - for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.AdmissionReviewVersions[iNdEx]) - copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) - i-- - dAtA[i] = 0x42 - } - } - if m.TimeoutSeconds != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) - i-- - dAtA[i] = 0x38 + dAtA[i] = 0x1a } - if m.SideEffects != nil { - i -= len(*m.SideEffects) - copy(dAtA[i:], *m.SideEffects) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) - i-- - dAtA[i] = 0x32 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if m.NamespaceSelector != nil { - { - size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } + return dAtA[:n], nil +} + +func (m *ServiceReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Port != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) i-- - dAtA[i] = 0x2a + dAtA[i] = 0x20 } - if m.FailurePolicy != nil { - i -= len(*m.FailurePolicy) - copy(dAtA[i:], *m.FailurePolicy) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + if m.Path != nil { + i -= len(*m.Path) + copy(dAtA[i:], *m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Path))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } - if len(m.Rules) > 0 { - for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TypeChecking) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TypeChecking) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TypeChecking) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ExpressionWarnings) > 0 { + for iNdEx := len(m.ExpressionWarnings) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ExpressionWarnings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -791,11 +1516,44 @@ func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ValidatingAdmissionPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatingAdmissionPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingAdmissionPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a { - size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -804,15 +1562,20 @@ func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x12 - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { +func (m *ValidatingAdmissionPolicyBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -822,30 +1585,26 @@ func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ValidatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBinding) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ValidatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Webhooks) > 0 { - for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 { size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -859,7 +1618,7 @@ func (m *ValidatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { +func (m *ValidatingAdmissionPolicyBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -869,12 +1628,12 @@ func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) return dAtA[:n], nil } -func (m *ValidatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBindingList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ValidatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -906,7 +1665,7 @@ func (m *ValidatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { +func (m *ValidatingAdmissionPolicyBindingSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -916,33 +1675,40 @@ func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *WebhookClientConfig) MarshalTo(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBindingSpec) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ValidatingAdmissionPolicyBindingSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.URL != nil { - i -= len(*m.URL) - copy(dAtA[i:], *m.URL) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) - i-- - dAtA[i] = 0x1a + if len(m.ValidationActions) > 0 { + for iNdEx := len(m.ValidationActions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ValidationActions[iNdEx]) + copy(dAtA[i:], m.ValidationActions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ValidationActions[iNdEx]))) + i-- + dAtA[i] = 0x22 + } } - if m.CABundle != nil { - i -= len(m.CABundle) - copy(dAtA[i:], m.CABundle) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) + if m.MatchResources != nil { + { + size, err := m.MatchResources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x12 + dAtA[i] = 0x1a } - if m.Service != nil { + if m.ParamRef != nil { { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ParamRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -950,432 +1716,3359 @@ func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 } + i -= len(m.PolicyName) + copy(dAtA[i:], m.PolicyName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PolicyName))) + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *ValidatingAdmissionPolicyList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *MatchCondition) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Expression) - n += 1 + l + sovGenerated(uint64(l)) - return n + +func (m *ValidatingAdmissionPolicyList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MutatingWebhook) Size() (n int) { - if m == nil { - return 0 - } +func (m *ValidatingAdmissionPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.ClientConfig.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Rules) > 0 { - for _, e := range m.Rules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - if m.FailurePolicy != nil { - l = len(*m.FailurePolicy) - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.NamespaceSelector != nil { - l = m.NamespaceSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.SideEffects != nil { - l = len(*m.SideEffects) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.TimeoutSeconds != nil { - n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) - } - if len(m.AdmissionReviewVersions) > 0 { - for _, s := range m.AdmissionReviewVersions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.MatchPolicy != nil { - l = len(*m.MatchPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ReinvocationPolicy != nil { - l = len(*m.ReinvocationPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ObjectSelector != nil { - l = m.ObjectSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.MatchConditions) > 0 { - for _, e := range m.MatchConditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *MutatingWebhookConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Webhooks) > 0 { - for _, e := range m.Webhooks { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ValidatingAdmissionPolicySpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *MutatingWebhookConfigurationList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n +func (m *ValidatingAdmissionPolicySpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ServiceReference) Size() (n int) { - if m == nil { - return 0 - } +func (m *ValidatingAdmissionPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Namespace) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - if m.Path != nil { - l = len(*m.Path) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Port != nil { - n += 1 + sovGenerated(uint64(*m.Port)) + if len(m.Variables) > 0 { + for iNdEx := len(m.Variables) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Variables[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } } - return n -} - -func (m *ValidatingWebhook) Size() (n int) { - if m == nil { - return 0 + if len(m.MatchConditions) > 0 { + for iNdEx := len(m.MatchConditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchConditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.ClientConfig.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Rules) > 0 { - for _, e := range m.Rules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.AuditAnnotations) > 0 { + for iNdEx := len(m.AuditAnnotations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AuditAnnotations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } } if m.FailurePolicy != nil { - l = len(*m.FailurePolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NamespaceSelector != nil { - l = m.NamespaceSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.SideEffects != nil { - l = len(*m.SideEffects) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.TimeoutSeconds != nil { - n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 } - if len(m.AdmissionReviewVersions) > 0 { - for _, s := range m.AdmissionReviewVersions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Validations) > 0 { + for iNdEx := len(m.Validations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } } - if m.MatchPolicy != nil { - l = len(*m.MatchPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ObjectSelector != nil { - l = m.ObjectSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.MatchConstraints != nil { + { + size, err := m.MatchConstraints.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - if len(m.MatchConditions) > 0 { - for _, e := range m.MatchConditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.ParamKind != nil { + { + size, err := m.ParamKind.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *ValidatingWebhookConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Webhooks) > 0 { - for _, e := range m.Webhooks { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ValidatingAdmissionPolicyStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ValidatingWebhookConfigurationList) Size() (n int) { - if m == nil { - return 0 - } +func (m *ValidatingAdmissionPolicyStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingAdmissionPolicyStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } } - return n + if m.TypeChecking != nil { + { + size, err := m.TypeChecking.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *WebhookClientConfig) Size() (n int) { - if m == nil { - return 0 +func (m *ValidatingWebhook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } + return dAtA[:n], nil +} + +func (m *ValidatingWebhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.CABundle != nil { - l = len(m.CABundle) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.MatchConditions) > 0 { + for iNdEx := len(m.MatchConditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchConditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } } - if m.URL != nil { - l = len(*m.URL) - n += 1 + l + sovGenerated(uint64(l)) + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 } - return n -} - -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *MatchCondition) String() string { - if this == nil { - return "nil" + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x4a } - s := strings.Join([]string{`&MatchCondition{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`, - `}`, - }, "") - return s -} -func (this *MutatingWebhook) String() string { - if this == nil { - return "nil" + if len(m.AdmissionReviewVersions) > 0 { + for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdmissionReviewVersions[iNdEx]) + copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) + i-- + dAtA[i] = 0x42 + } } - repeatedStringForRules := "[]RuleWithOperations{" - for _, f := range this.Rules { - repeatedStringForRules += fmt.Sprintf("%v", f) + "," + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x38 } - repeatedStringForRules += "}" - repeatedStringForMatchConditions := "[]MatchCondition{" - for _, f := range this.MatchConditions { - repeatedStringForMatchConditions += strings.Replace(strings.Replace(f.String(), "MatchCondition", "MatchCondition", 1), `&`, ``, 1) + "," + if m.SideEffects != nil { + i -= len(*m.SideEffects) + copy(dAtA[i:], *m.SideEffects) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) + i-- + dAtA[i] = 0x32 } - repeatedStringForMatchConditions += "}" - s := strings.Join([]string{`&MutatingWebhook{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, - `Rules:` + repeatedStringForRules + `,`, - `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, - `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v11.LabelSelector", 1) + `,`, - `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, - `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, - `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, - `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, - `ReinvocationPolicy:` + valueToStringGenerated(this.ReinvocationPolicy) + `,`, - `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v11.LabelSelector", 1) + `,`, - `MatchConditions:` + repeatedStringForMatchConditions + `,`, - `}`, - }, "") - return s -} -func (this *MutatingWebhookConfiguration) String() string { - if this == nil { - return "nil" + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } - repeatedStringForWebhooks := "[]MutatingWebhook{" - for _, f := range this.Webhooks { - repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "MutatingWebhook", "MutatingWebhook", 1), `&`, ``, 1) + "," + if m.FailurePolicy != nil { + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 } - repeatedStringForWebhooks += "}" - s := strings.Join([]string{`&MutatingWebhookConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Webhooks:` + repeatedStringForWebhooks + `,`, - `}`, - }, "") - return s -} -func (this *MutatingWebhookConfigurationList) String() string { - if this == nil { - return "nil" + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } } - repeatedStringForItems := "[]MutatingWebhookConfiguration{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "MutatingWebhookConfiguration", "MutatingWebhookConfiguration", 1), `&`, ``, 1) + "," + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - repeatedStringForItems += "}" - s := strings.Join([]string{`&MutatingWebhookConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (this *ServiceReference) String() string { - if this == nil { - return "nil" + +func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - s := strings.Join([]string{`&ServiceReference{`, - `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Path:` + valueToStringGenerated(this.Path) + `,`, - `Port:` + valueToStringGenerated(this.Port) + `,`, - `}`, - }, "") - return s + return dAtA[:n], nil } -func (this *ValidatingWebhook) String() string { - if this == nil { - return "nil" - } - repeatedStringForRules := "[]RuleWithOperations{" - for _, f := range this.Rules { - repeatedStringForRules += fmt.Sprintf("%v", f) + "," + +func (m *ValidatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Webhooks) > 0 { + for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - repeatedStringForRules += "}" - repeatedStringForMatchConditions := "[]MatchCondition{" - for _, f := range this.MatchConditions { - repeatedStringForMatchConditions += strings.Replace(strings.Replace(f.String(), "MatchCondition", "MatchCondition", 1), `&`, ``, 1) + "," + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - repeatedStringForMatchConditions += "}" - s := strings.Join([]string{`&ValidatingWebhook{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Validation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.MessageExpression) + copy(dAtA[i:], m.MessageExpression) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MessageExpression))) + i-- + dAtA[i] = 0x22 + if m.Reason != nil { + i -= len(*m.Reason) + copy(dAtA[i:], *m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Reason))) + i-- + dAtA[i] = 0x1a + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + i -= len(m.Expression) + copy(dAtA[i:], m.Expression) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Expression))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Variable) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Variable) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Variable) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Expression) + copy(dAtA[i:], m.Expression) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Expression))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WebhookClientConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.URL != nil { + i -= len(*m.URL) + copy(dAtA[i:], *m.URL) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) + i-- + dAtA[i] = 0x1a + } + if m.CABundle != nil { + i -= len(m.CABundle) + copy(dAtA[i:], m.CABundle) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) + i-- + dAtA[i] = 0x12 + } + if m.Service != nil { + { + size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AuditAnnotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ValueExpression) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExpressionWarning) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FieldRef) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Warning) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *MatchCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Expression) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *MatchResources) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ResourceRules) > 0 { + for _, e := range m.ResourceRules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ExcludeResourceRules) > 0 { + for _, e := range m.ExcludeResourceRules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MutatingWebhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReinvocationPolicy != nil { + l = len(*m.ReinvocationPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.MatchConditions) > 0 { + for _, e := range m.MatchConditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *MutatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Webhooks) > 0 { + for _, e := range m.Webhooks { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *MutatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NamedRuleWithOperations) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ResourceNames) > 0 { + for _, s := range m.ResourceNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.RuleWithOperations.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ParamKind) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ParamRef) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ParameterNotFoundAction != nil { + l = len(*m.ParameterNotFoundAction) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ServiceReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Path != nil { + l = len(*m.Path) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Port != nil { + n += 1 + sovGenerated(uint64(*m.Port)) + } + return n +} + +func (m *TypeChecking) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ExpressionWarnings) > 0 { + for _, e := range m.ExpressionWarnings { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingAdmissionPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ValidatingAdmissionPolicyBinding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ValidatingAdmissionPolicyBindingList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingAdmissionPolicyBindingSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PolicyName) + n += 1 + l + sovGenerated(uint64(l)) + if m.ParamRef != nil { + l = m.ParamRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MatchResources != nil { + l = m.MatchResources.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ValidationActions) > 0 { + for _, s := range m.ValidationActions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingAdmissionPolicyList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingAdmissionPolicySpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ParamKind != nil { + l = m.ParamKind.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MatchConstraints != nil { + l = m.MatchConstraints.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Validations) > 0 { + for _, e := range m.Validations { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.AuditAnnotations) > 0 { + for _, e := range m.AuditAnnotations { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.MatchConditions) > 0 { + for _, e := range m.MatchConditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Variables) > 0 { + for _, e := range m.Variables { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingAdmissionPolicyStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + if m.TypeChecking != nil { + l = m.TypeChecking.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingWebhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.MatchConditions) > 0 { + for _, e := range m.MatchConditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Webhooks) > 0 { + for _, e := range m.Webhooks { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Validation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Expression) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if m.Reason != nil { + l = len(*m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.MessageExpression) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Variable) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Expression) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *WebhookClientConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Service != nil { + l = m.Service.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CABundle != nil { + l = len(m.CABundle) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.URL != nil { + l = len(*m.URL) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AuditAnnotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AuditAnnotation{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `ValueExpression:` + fmt.Sprintf("%v", this.ValueExpression) + `,`, + `}`, + }, "") + return s +} +func (this *ExpressionWarning) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExpressionWarning{`, + `FieldRef:` + fmt.Sprintf("%v", this.FieldRef) + `,`, + `Warning:` + fmt.Sprintf("%v", this.Warning) + `,`, + `}`, + }, "") + return s +} +func (this *MatchCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MatchCondition{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`, + `}`, + }, "") + return s +} +func (this *MatchResources) String() string { + if this == nil { + return "nil" + } + repeatedStringForResourceRules := "[]NamedRuleWithOperations{" + for _, f := range this.ResourceRules { + repeatedStringForResourceRules += strings.Replace(strings.Replace(f.String(), "NamedRuleWithOperations", "NamedRuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForResourceRules += "}" + repeatedStringForExcludeResourceRules := "[]NamedRuleWithOperations{" + for _, f := range this.ExcludeResourceRules { + repeatedStringForExcludeResourceRules += strings.Replace(strings.Replace(f.String(), "NamedRuleWithOperations", "NamedRuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForExcludeResourceRules += "}" + s := strings.Join([]string{`&MatchResources{`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `ResourceRules:` + repeatedStringForResourceRules + `,`, + `ExcludeResourceRules:` + repeatedStringForExcludeResourceRules + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *MutatingWebhook) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += fmt.Sprintf("%v", f) + "," + } + repeatedStringForRules += "}" + repeatedStringForMatchConditions := "[]MatchCondition{" + for _, f := range this.MatchConditions { + repeatedStringForMatchConditions += strings.Replace(strings.Replace(f.String(), "MatchCondition", "MatchCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchConditions += "}" + s := strings.Join([]string{`&MutatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `ReinvocationPolicy:` + valueToStringGenerated(this.ReinvocationPolicy) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `MatchConditions:` + repeatedStringForMatchConditions + `,`, + `}`, + }, "") + return s +} +func (this *MutatingWebhookConfiguration) String() string { + if this == nil { + return "nil" + } + repeatedStringForWebhooks := "[]MutatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "MutatingWebhook", "MutatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" + s := strings.Join([]string{`&MutatingWebhookConfiguration{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, + `}`, + }, "") + return s +} +func (this *MutatingWebhookConfigurationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]MutatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "MutatingWebhookConfiguration", "MutatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&MutatingWebhookConfigurationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NamedRuleWithOperations) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedRuleWithOperations{`, + `ResourceNames:` + fmt.Sprintf("%v", this.ResourceNames) + `,`, + `RuleWithOperations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RuleWithOperations), "RuleWithOperations", "v11.RuleWithOperations", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ParamKind) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ParamKind{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *ParamRef) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ParamRef{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `ParameterNotFoundAction:` + valueToStringGenerated(this.ParameterNotFoundAction) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceReference{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Path:` + valueToStringGenerated(this.Path) + `,`, + `Port:` + valueToStringGenerated(this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *TypeChecking) String() string { + if this == nil { + return "nil" + } + repeatedStringForExpressionWarnings := "[]ExpressionWarning{" + for _, f := range this.ExpressionWarnings { + repeatedStringForExpressionWarnings += strings.Replace(strings.Replace(f.String(), "ExpressionWarning", "ExpressionWarning", 1), `&`, ``, 1) + "," + } + repeatedStringForExpressionWarnings += "}" + s := strings.Join([]string{`&TypeChecking{`, + `ExpressionWarnings:` + repeatedStringForExpressionWarnings + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ValidatingAdmissionPolicy{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ValidatingAdmissionPolicySpec", "ValidatingAdmissionPolicySpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ValidatingAdmissionPolicyStatus", "ValidatingAdmissionPolicyStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicyBinding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ValidatingAdmissionPolicyBinding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ValidatingAdmissionPolicyBindingSpec", "ValidatingAdmissionPolicyBindingSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicyBindingList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ValidatingAdmissionPolicyBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingAdmissionPolicyBinding", "ValidatingAdmissionPolicyBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ValidatingAdmissionPolicyBindingList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicyBindingSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ValidatingAdmissionPolicyBindingSpec{`, + `PolicyName:` + fmt.Sprintf("%v", this.PolicyName) + `,`, + `ParamRef:` + strings.Replace(this.ParamRef.String(), "ParamRef", "ParamRef", 1) + `,`, + `MatchResources:` + strings.Replace(this.MatchResources.String(), "MatchResources", "MatchResources", 1) + `,`, + `ValidationActions:` + fmt.Sprintf("%v", this.ValidationActions) + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicyList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ValidatingAdmissionPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingAdmissionPolicy", "ValidatingAdmissionPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ValidatingAdmissionPolicyList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicySpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForValidations := "[]Validation{" + for _, f := range this.Validations { + repeatedStringForValidations += strings.Replace(strings.Replace(f.String(), "Validation", "Validation", 1), `&`, ``, 1) + "," + } + repeatedStringForValidations += "}" + repeatedStringForAuditAnnotations := "[]AuditAnnotation{" + for _, f := range this.AuditAnnotations { + repeatedStringForAuditAnnotations += strings.Replace(strings.Replace(f.String(), "AuditAnnotation", "AuditAnnotation", 1), `&`, ``, 1) + "," + } + repeatedStringForAuditAnnotations += "}" + repeatedStringForMatchConditions := "[]MatchCondition{" + for _, f := range this.MatchConditions { + repeatedStringForMatchConditions += strings.Replace(strings.Replace(f.String(), "MatchCondition", "MatchCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchConditions += "}" + repeatedStringForVariables := "[]Variable{" + for _, f := range this.Variables { + repeatedStringForVariables += strings.Replace(strings.Replace(f.String(), "Variable", "Variable", 1), `&`, ``, 1) + "," + } + repeatedStringForVariables += "}" + s := strings.Join([]string{`&ValidatingAdmissionPolicySpec{`, + `ParamKind:` + strings.Replace(this.ParamKind.String(), "ParamKind", "ParamKind", 1) + `,`, + `MatchConstraints:` + strings.Replace(this.MatchConstraints.String(), "MatchResources", "MatchResources", 1) + `,`, + `Validations:` + repeatedStringForValidations + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `AuditAnnotations:` + repeatedStringForAuditAnnotations + `,`, + `MatchConditions:` + repeatedStringForMatchConditions + `,`, + `Variables:` + repeatedStringForVariables + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingAdmissionPolicyStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&ValidatingAdmissionPolicyStatus{`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `TypeChecking:` + strings.Replace(this.TypeChecking.String(), "TypeChecking", "TypeChecking", 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingWebhook) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += fmt.Sprintf("%v", f) + "," + } + repeatedStringForRules += "}" + repeatedStringForMatchConditions := "[]MatchCondition{" + for _, f := range this.MatchConditions { + repeatedStringForMatchConditions += strings.Replace(strings.Replace(f.String(), "MatchCondition", "MatchCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchConditions += "}" + s := strings.Join([]string{`&ValidatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, `Rules:` + repeatedStringForRules + `,`, `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, - `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v11.LabelSelector", 1) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, - `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v11.LabelSelector", 1) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `MatchConditions:` + repeatedStringForMatchConditions + `,`, `}`, }, "") return s } -func (this *ValidatingWebhookConfiguration) String() string { - if this == nil { - return "nil" +func (this *ValidatingWebhookConfiguration) String() string { + if this == nil { + return "nil" + } + repeatedStringForWebhooks := "[]ValidatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "ValidatingWebhook", "ValidatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" + s := strings.Join([]string{`&ValidatingWebhookConfiguration{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingWebhookConfigurationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ValidatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingWebhookConfiguration", "ValidatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ValidatingWebhookConfigurationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *Validation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Validation{`, + `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + valueToStringGenerated(this.Reason) + `,`, + `MessageExpression:` + fmt.Sprintf("%v", this.MessageExpression) + `,`, + `}`, + }, "") + return s +} +func (this *Variable) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Variable{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`, + `}`, + }, "") + return s +} +func (this *WebhookClientConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WebhookClientConfig{`, + `Service:` + strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1) + `,`, + `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, + `URL:` + valueToStringGenerated(this.URL) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *AuditAnnotation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuditAnnotation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditAnnotation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValueExpression", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValueExpression = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExpressionWarning) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExpressionWarning: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExpressionWarning: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldRef = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Warning", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Warning = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MatchCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MatchCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MatchCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Expression", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Expression = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MatchResources) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MatchResources: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MatchResources: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceRules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceRules = append(m.ResourceRules, NamedRuleWithOperations{}) + if err := m.ResourceRules[len(m.ResourceRules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExcludeResourceRules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExcludeResourceRules = append(m.ExcludeResourceRules, NamedRuleWithOperations{}) + if err := m.ExcludeResourceRules[len(m.ExcludeResourceRules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, v11.RuleWithOperations{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := SideEffectClass(dAtA[iNdEx:postIndex]) + m.SideEffects = &s + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvocationPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ReinvocationPolicyType(dAtA[iNdEx:postIndex]) + m.ReinvocationPolicy = &s + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchConditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchConditions = append(m.MatchConditions, MatchCondition{}) + if err := m.MatchConditions[len(m.MatchConditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Webhooks = append(m.Webhooks, MutatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, MutatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedRuleWithOperations) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedRuleWithOperations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedRuleWithOperations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceNames = append(m.ResourceNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuleWithOperations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RuleWithOperations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ParamKind) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamKind: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamKind: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - repeatedStringForWebhooks := "[]ValidatingWebhook{" - for _, f := range this.Webhooks { - repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "ValidatingWebhook", "ValidatingWebhook", 1), `&`, ``, 1) + "," + + if iNdEx > l { + return io.ErrUnexpectedEOF } - repeatedStringForWebhooks += "}" - s := strings.Join([]string{`&ValidatingWebhookConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Webhooks:` + repeatedStringForWebhooks + `,`, - `}`, - }, "") - return s + return nil } -func (this *ValidatingWebhookConfigurationList) String() string { - if this == nil { - return "nil" +func (m *ParamRef) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamRef: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamRef: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ParameterNotFoundAction", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ParameterNotFoundActionType(dAtA[iNdEx:postIndex]) + m.ParameterNotFoundAction = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - repeatedStringForItems := "[]ValidatingWebhookConfiguration{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingWebhookConfiguration", "ValidatingWebhookConfiguration", 1), `&`, ``, 1) + "," + + if iNdEx > l { + return io.ErrUnexpectedEOF } - repeatedStringForItems += "}" - s := strings.Join([]string{`&ValidatingWebhookConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s + return nil } -func (this *WebhookClientConfig) String() string { - if this == nil { - return "nil" +func (m *ServiceReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Path = &s + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Port = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - s := strings.Join([]string{`&WebhookClientConfig{`, - `Service:` + strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1) + `,`, - `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, - `URL:` + valueToStringGenerated(this.URL) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" + + if iNdEx > l { + return io.ErrUnexpectedEOF } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) + return nil } -func (m *MatchCondition) Unmarshal(dAtA []byte) error { +func (m *TypeChecking) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1398,17 +5091,17 @@ func (m *MatchCondition) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MatchCondition: wiretype end group for non-group") + return fmt.Errorf("proto: TypeChecking: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MatchCondition: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: TypeChecking: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ExpressionWarnings", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1418,55 +5111,25 @@ func (m *MatchCondition) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Expression", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + m.ExpressionWarnings = append(m.ExpressionWarnings, ExpressionWarning{}) + if err := m.ExpressionWarnings[len(m.ExpressionWarnings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Expression = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -1489,7 +5152,7 @@ func (m *MatchCondition) Unmarshal(dAtA []byte) error { } return nil } -func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { +func (m *ValidatingAdmissionPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1512,17 +5175,17 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MutatingWebhook: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingAdmissionPolicy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MutatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingAdmissionPolicy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1532,27 +5195,28 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1579,13 +5243,13 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1612,16 +5276,65 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Rules = append(m.Rules, v1.RuleWithOperations{}) - if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingAdmissionPolicyBinding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBinding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBinding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1631,28 +5344,28 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := FailurePolicyType(dAtA[iNdEx:postIndex]) - m.FailurePolicy = &s + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1679,18 +5392,65 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.NamespaceSelector == nil { - m.NamespaceSelector = &v11.LabelSelector{} - } - if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 6: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingAdmissionPolicyBindingList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBindingList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBindingList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1700,50 +5460,30 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := SideEffectClass(dAtA[iNdEx:postIndex]) - m.SideEffects = &s - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.TimeoutSeconds = &v - case 8: + iNdEx = postIndex + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1753,27 +5493,79 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ValidatingAdmissionPolicyBinding{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingAdmissionPolicyBindingSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 9: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBindingSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingAdmissionPolicyBindingSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PolicyName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1801,14 +5593,13 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := MatchPolicyType(dAtA[iNdEx:postIndex]) - m.MatchPolicy = &s + m.PolicyName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 10: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReinvocationPolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ParamRef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1818,28 +5609,31 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := ReinvocationPolicyType(dAtA[iNdEx:postIndex]) - m.ReinvocationPolicy = &s + if m.ParamRef == nil { + m.ParamRef = &ParamRef{} + } + if err := m.ParamRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 11: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchResources", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1866,18 +5660,18 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ObjectSelector == nil { - m.ObjectSelector = &v11.LabelSelector{} + if m.MatchResources == nil { + m.MatchResources = &MatchResources{} } - if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.MatchResources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 12: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchConditions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidationActions", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1887,25 +5681,23 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.MatchConditions = append(m.MatchConditions, MatchCondition{}) - if err := m.MatchConditions[len(m.MatchConditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ValidationActions = append(m.ValidationActions, ValidationAction(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -1928,7 +5720,7 @@ func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { } return nil } -func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { +func (m *ValidatingAdmissionPolicyList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1951,15 +5743,15 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MutatingWebhookConfiguration: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingAdmissionPolicyList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MutatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingAdmissionPolicyList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1986,13 +5778,13 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2019,8 +5811,8 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Webhooks = append(m.Webhooks, MutatingWebhook{}) - if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, ValidatingAdmissionPolicy{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2045,7 +5837,7 @@ func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { } return nil } -func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { +func (m *ValidatingAdmissionPolicySpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2068,15 +5860,15 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MutatingWebhookConfigurationList: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingAdmissionPolicySpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MutatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingAdmissionPolicySpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ParamKind", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2103,13 +5895,187 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ParamKind == nil { + m.ParamKind = &ParamKind{} + } + if err := m.ParamKind.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchConstraints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MatchConstraints == nil { + m.MatchConstraints = &MatchResources{} + } + if err := m.MatchConstraints.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validations = append(m.Validations, Validation{}) + if err := m.Validations[len(m.Validations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuditAnnotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AuditAnnotations = append(m.AuditAnnotations, AuditAnnotation{}) + if err := m.AuditAnnotations[len(m.AuditAnnotations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchConditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchConditions = append(m.MatchConditions, MatchCondition{}) + if err := m.MatchConditions[len(m.MatchConditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Variables", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2136,8 +6102,8 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, MutatingWebhookConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Variables = append(m.Variables, Variable{}) + if err := m.Variables[len(m.Variables)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2162,7 +6128,7 @@ func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ServiceReference) Unmarshal(dAtA []byte) error { +func (m *ValidatingAdmissionPolicyStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2185,17 +6151,17 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingAdmissionPolicyStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingAdmissionPolicyStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) } - var stringLen uint64 + m.ObservedGeneration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2205,29 +6171,16 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Namespace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TypeChecking", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2237,29 +6190,33 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if m.TypeChecking == nil { + m.TypeChecking = &TypeChecking{} + } + if err := m.TypeChecking.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2269,45 +6226,26 @@ func (m *ServiceReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Path = &s - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Port = &v + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2452,7 +6390,7 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Rules = append(m.Rules, v1.RuleWithOperations{}) + m.Rules = append(m.Rules, v11.RuleWithOperations{}) if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -2520,7 +6458,7 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.NamespaceSelector == nil { - m.NamespaceSelector = &v11.LabelSelector{} + m.NamespaceSelector = &v1.LabelSelector{} } if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2563,27 +6501,212 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchConditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchConditions = append(m.MatchConditions, MatchCondition{}) + if err := m.MatchConditions[len(m.MatchConditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - m.TimeoutSeconds = &v - case 8: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingWebhookConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2593,29 +6716,30 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 9: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2625,28 +6749,79 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := MatchPolicyType(dAtA[iNdEx:postIndex]) - m.MatchPolicy = &s + m.Webhooks = append(m.Webhooks, ValidatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 10: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2673,16 +6848,13 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ObjectSelector == nil { - m.ObjectSelector = &v11.LabelSelector{} - } - if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 11: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchConditions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2709,8 +6881,8 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MatchConditions = append(m.MatchConditions, MatchCondition{}) - if err := m.MatchConditions[len(m.MatchConditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, ValidatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2735,7 +6907,7 @@ func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { } return nil } -func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { +func (m *Validation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2758,17 +6930,17 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ValidatingWebhookConfiguration: wiretype end group for non-group") + return fmt.Errorf("proto: Validation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ValidatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Validation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Expression", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2778,30 +6950,29 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Expression = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2811,25 +6982,88 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Webhooks = append(m.Webhooks, ValidatingWebhook{}) - if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF } + s := k8s_io_apimachinery_pkg_apis_meta_v1.StatusReason(dAtA[iNdEx:postIndex]) + m.Reason = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageExpression", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageExpression = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2852,7 +7086,7 @@ func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { } return nil } -func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { +func (m *Variable) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2875,17 +7109,17 @@ func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ValidatingWebhookConfigurationList: wiretype end group for non-group") + return fmt.Errorf("proto: Variable: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ValidatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Variable: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2895,30 +7129,29 @@ func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Expression", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2928,25 +7161,23 @@ func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, ValidatingWebhookConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Expression = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto index 53e95af6518b..1855cdfc4f7e 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto @@ -29,6 +29,56 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "k8s.io/api/admissionregistration/v1beta1"; +// AuditAnnotation describes how to produce an audit annotation for an API request. +message AuditAnnotation { + // key specifies the audit annotation key. The audit annotation keys of + // a ValidatingAdmissionPolicy must be unique. The key must be a qualified + // name ([A-Za-z0-9][-A-Za-z0-9_.]*) no more than 63 bytes in length. + // + // The key is combined with the resource name of the + // ValidatingAdmissionPolicy to construct an audit annotation key: + // "{ValidatingAdmissionPolicy name}/{key}". + // + // If an admission webhook uses the same resource name as this ValidatingAdmissionPolicy + // and the same audit annotation key, the annotation key will be identical. + // In this case, the first annotation written with the key will be included + // in the audit event and all subsequent annotations with the same key + // will be discarded. + // + // Required. + optional string key = 1; + + // valueExpression represents the expression which is evaluated by CEL to + // produce an audit annotation value. The expression must evaluate to either + // a string or null value. If the expression evaluates to a string, the + // audit annotation is included with the string value. If the expression + // evaluates to null or empty string the audit annotation will be omitted. + // The valueExpression may be no longer than 5kb in length. + // If the result of the valueExpression is more than 10kb in length, it + // will be truncated to 10kb. + // + // If multiple ValidatingAdmissionPolicyBinding resources match an + // API request, then the valueExpression will be evaluated for + // each binding. All unique values produced by the valueExpressions + // will be joined together in a comma-separated list. + // + // Required. + optional string valueExpression = 2; +} + +// ExpressionWarning is a warning information that targets a specific expression. +message ExpressionWarning { + // The path to the field that refers the expression. + // For example, the reference to the expression of the first item of + // validations is "spec.validations[0].expression" + optional string fieldRef = 2; + + // The content of type checking information in a human-readable form. + // Each line of the warning contains the type that the expression is checked + // against, followed by the type check error from the compiler. + optional string warning = 3; +} + // MatchCondition represents a condition which must be fulfilled for a request to be sent to a webhook. message MatchCondition { // Name is an identifier for this match condition, used for strategic merging of MatchConditions, @@ -58,6 +108,101 @@ message MatchCondition { optional string expression = 2; } +// MatchResources decides whether to run the admission control policy on an object based +// on whether it meets the match criteria. +// The exclude rules take precedence over include rules (if a resource matches both, it is excluded) +// +structType=atomic +message MatchResources { + // NamespaceSelector decides whether to run the admission control policy on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the policy. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the policy on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 1; + + // ObjectSelector decides whether to run the validation based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the cel validation, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector objectSelector = 2; + + // ResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy matches. + // The policy cares about an operation if it matches _any_ Rule. + // +listType=atomic + // +optional + repeated NamedRuleWithOperations resourceRules = 3; + + // ExcludeResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy should not care about. + // The exclude rules take precedence over include rules (if a resource matches both, it is excluded) + // +listType=atomic + // +optional + repeated NamedRuleWithOperations excludeResourceRules = 4; + + // matchPolicy defines how the "MatchResources" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the ValidatingAdmissionPolicy. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the ValidatingAdmissionPolicy. + // + // Defaults to "Equivalent" + // +optional + optional string matchPolicy = 7; +} + // MutatingWebhook describes an admission webhook and the resources and operations it applies to. message MutatingWebhook { // The name of the admission webhook. @@ -255,6 +400,88 @@ message MutatingWebhookConfigurationList { repeated MutatingWebhookConfiguration items = 2; } +// NamedRuleWithOperations is a tuple of Operations and Resources with ResourceNames. +// +structType=atomic +message NamedRuleWithOperations { + // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + // +listType=atomic + // +optional + repeated string resourceNames = 1; + + // RuleWithOperations is a tuple of Operations and Resources. + optional k8s.io.api.admissionregistration.v1.RuleWithOperations ruleWithOperations = 2; +} + +// ParamKind is a tuple of Group Kind and Version. +// +structType=atomic +message ParamKind { + // APIVersion is the API group version the resources belong to. + // In format of "group/version". + // Required. + optional string apiVersion = 1; + + // Kind is the API kind the resources belong to. + // Required. + optional string kind = 2; +} + +// ParamRef describes how to locate the params to be used as input to +// expressions of rules applied by a policy binding. +// +structType=atomic +message ParamRef { + // name is the name of the resource being referenced. + // + // One of `name` or `selector` must be set, but `name` and `selector` are + // mutually exclusive properties. If one is set, the other must be unset. + // + // A single parameter used for all admission requests can be configured + // by setting the `name` field, leaving `selector` blank, and setting namespace + // if `paramKind` is namespace-scoped. + optional string name = 1; + + // namespace is the namespace of the referenced resource. Allows limiting + // the search for params to a specific namespace. Applies to both `name` and + // `selector` fields. + // + // A per-namespace parameter may be used by specifying a namespace-scoped + // `paramKind` in the policy and leaving this field empty. + // + // - If `paramKind` is cluster-scoped, this field MUST be unset. Setting this + // field results in a configuration error. + // + // - If `paramKind` is namespace-scoped, the namespace of the object being + // evaluated for admission will be used when this field is left unset. Take + // care that if this is left empty the binding must not match any cluster-scoped + // resources, which will result in an error. + // + // +optional + optional string namespace = 2; + + // selector can be used to match multiple param objects based on their labels. + // Supply selector: {} to match all resources of the ParamKind. + // + // If multiple params are found, they are all evaluated with the policy expressions + // and the results are ANDed together. + // + // One of `name` or `selector` must be set, but `name` and `selector` are + // mutually exclusive properties. If one is set, the other must be unset. + // + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; + + // `parameterNotFoundAction` controls the behavior of the binding when the resource + // exists, and name or selector is valid, but there are no parameters + // matched by the binding. If the value is set to `Allow`, then no + // matched parameters will be treated as successful validation by the binding. + // If set to `Deny`, then no matched parameters will be subject to the + // `failurePolicy` of the policy. + // + // Allowed values are `Allow` or `Deny` + // + // Required + optional string parameterNotFoundAction = 4; +} + // ServiceReference holds a reference to Service.legacy.k8s.io message ServiceReference { // `namespace` is the namespace of the service. @@ -277,6 +504,248 @@ message ServiceReference { optional int32 port = 4; } +// TypeChecking contains results of type checking the expressions in the +// ValidatingAdmissionPolicy +message TypeChecking { + // The type checking warnings for each expression. + // +optional + // +listType=atomic + repeated ExpressionWarning expressionWarnings = 1; +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 +// ValidatingAdmissionPolicy describes the definition of an admission validation policy that accepts or rejects an object without changing it. +message ValidatingAdmissionPolicy { + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired behavior of the ValidatingAdmissionPolicy. + optional ValidatingAdmissionPolicySpec spec = 2; + + // The status of the ValidatingAdmissionPolicy, including warnings that are useful to determine if the policy + // behaves in the expected way. + // Populated by the system. + // Read-only. + // +optional + optional ValidatingAdmissionPolicyStatus status = 3; +} + +// ValidatingAdmissionPolicyBinding binds the ValidatingAdmissionPolicy with paramerized resources. +// ValidatingAdmissionPolicyBinding and parameter CRDs together define how cluster administrators configure policies for clusters. +// +// For a given admission request, each binding will cause its policy to be +// evaluated N times, where N is 1 for policies/bindings that don't use +// params, otherwise N is the number of parameters selected by the binding. +// +// The CEL expressions of a policy must have a computed CEL cost below the maximum +// CEL budget. Each evaluation of the policy is given an independent CEL cost budget. +// Adding/removing policies, bindings, or params can not affect whether a +// given (policy, binding, param) combination is within its own CEL budget. +message ValidatingAdmissionPolicyBinding { + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired behavior of the ValidatingAdmissionPolicyBinding. + optional ValidatingAdmissionPolicyBindingSpec spec = 2; +} + +// ValidatingAdmissionPolicyBindingList is a list of ValidatingAdmissionPolicyBinding. +message ValidatingAdmissionPolicyBindingList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of PolicyBinding. + repeated ValidatingAdmissionPolicyBinding items = 2; +} + +// ValidatingAdmissionPolicyBindingSpec is the specification of the ValidatingAdmissionPolicyBinding. +message ValidatingAdmissionPolicyBindingSpec { + // PolicyName references a ValidatingAdmissionPolicy name which the ValidatingAdmissionPolicyBinding binds to. + // If the referenced resource does not exist, this binding is considered invalid and will be ignored + // Required. + optional string policyName = 1; + + // paramRef specifies the parameter resource used to configure the admission control policy. + // It should point to a resource of the type specified in ParamKind of the bound ValidatingAdmissionPolicy. + // If the policy specifies a ParamKind and the resource referred to by ParamRef does not exist, this binding is considered mis-configured and the FailurePolicy of the ValidatingAdmissionPolicy applied. + // If the policy does not specify a ParamKind then this field is ignored, and the rules are evaluated without a param. + // +optional + optional ParamRef paramRef = 2; + + // MatchResources declares what resources match this binding and will be validated by it. + // Note that this is intersected with the policy's matchConstraints, so only requests that are matched by the policy can be selected by this. + // If this is unset, all resources matched by the policy are validated by this binding + // When resourceRules is unset, it does not constrain resource matching. If a resource is matched by the other fields of this object, it will be validated. + // Note that this is differs from ValidatingAdmissionPolicy matchConstraints, where resourceRules are required. + // +optional + optional MatchResources matchResources = 3; + + // validationActions declares how Validations of the referenced ValidatingAdmissionPolicy are enforced. + // If a validation evaluates to false it is always enforced according to these actions. + // + // Failures defined by the ValidatingAdmissionPolicy's FailurePolicy are enforced according + // to these actions only if the FailurePolicy is set to Fail, otherwise the failures are + // ignored. This includes compilation errors, runtime errors and misconfigurations of the policy. + // + // validationActions is declared as a set of action values. Order does + // not matter. validationActions may not contain duplicates of the same action. + // + // The supported actions values are: + // + // "Deny" specifies that a validation failure results in a denied request. + // + // "Warn" specifies that a validation failure is reported to the request client + // in HTTP Warning headers, with a warning code of 299. Warnings can be sent + // both for allowed or denied admission responses. + // + // "Audit" specifies that a validation failure is included in the published + // audit event for the request. The audit event will contain a + // `validation.policy.admission.k8s.io/validation_failure` audit annotation + // with a value containing the details of the validation failures, formatted as + // a JSON list of objects, each with the following fields: + // - message: The validation failure message string + // - policy: The resource name of the ValidatingAdmissionPolicy + // - binding: The resource name of the ValidatingAdmissionPolicyBinding + // - expressionIndex: The index of the failed validations in the ValidatingAdmissionPolicy + // - validationActions: The enforcement actions enacted for the validation failure + // Example audit annotation: + // `"validation.policy.admission.k8s.io/validation_failure": "[{\"message\": \"Invalid value\", {\"policy\": \"policy.example.com\", {\"binding\": \"policybinding.example.com\", {\"expressionIndex\": \"1\", {\"validationActions\": [\"Audit\"]}]"` + // + // Clients should expect to handle additional values by ignoring + // any values not recognized. + // + // "Deny" and "Warn" may not be used together since this combination + // needlessly duplicates the validation failure both in the + // API response body and the HTTP warning headers. + // + // Required. + // +listType=set + repeated string validationActions = 4; +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 +// ValidatingAdmissionPolicyList is a list of ValidatingAdmissionPolicy. +message ValidatingAdmissionPolicyList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of ValidatingAdmissionPolicy. + repeated ValidatingAdmissionPolicy items = 2; +} + +// ValidatingAdmissionPolicySpec is the specification of the desired behavior of the AdmissionPolicy. +message ValidatingAdmissionPolicySpec { + // ParamKind specifies the kind of resources used to parameterize this policy. + // If absent, there are no parameters for this policy and the param CEL variable will not be provided to validation expressions. + // If ParamKind refers to a non-existent kind, this policy definition is mis-configured and the FailurePolicy is applied. + // If paramKind is specified but paramRef is unset in ValidatingAdmissionPolicyBinding, the params variable will be null. + // +optional + optional ParamKind paramKind = 1; + + // MatchConstraints specifies what resources this policy is designed to validate. + // The AdmissionPolicy cares about a request if it matches _all_ Constraints. + // However, in order to prevent clusters from being put into an unstable state that cannot be recovered from via the API + // ValidatingAdmissionPolicy cannot match ValidatingAdmissionPolicy and ValidatingAdmissionPolicyBinding. + // Required. + optional MatchResources matchConstraints = 2; + + // Validations contain CEL expressions which is used to apply the validation. + // Validations and AuditAnnotations may not both be empty; a minimum of one Validations or AuditAnnotations is + // required. + // +listType=atomic + // +optional + repeated Validation validations = 3; + + // failurePolicy defines how to handle failures for the admission policy. Failures can + // occur from CEL expression parse errors, type check errors, runtime errors and invalid + // or mis-configured policy definitions or bindings. + // + // A policy is invalid if spec.paramKind refers to a non-existent Kind. + // A binding is invalid if spec.paramRef.name refers to a non-existent resource. + // + // failurePolicy does not define how validations that evaluate to false are handled. + // + // When failurePolicy is set to Fail, ValidatingAdmissionPolicyBinding validationActions + // define how failures are enforced. + // + // Allowed values are Ignore or Fail. Defaults to Fail. + // +optional + optional string failurePolicy = 4; + + // auditAnnotations contains CEL expressions which are used to produce audit + // annotations for the audit event of the API request. + // validations and auditAnnotations may not both be empty; a least one of validations or auditAnnotations is + // required. + // +listType=atomic + // +optional + repeated AuditAnnotation auditAnnotations = 5; + + // MatchConditions is a list of conditions that must be met for a request to be validated. + // Match conditions filter requests that have already been matched by the rules, + // namespaceSelector, and objectSelector. An empty list of matchConditions matches all requests. + // There are a maximum of 64 match conditions allowed. + // + // If a parameter object is provided, it can be accessed via the `params` handle in the same + // manner as validation expressions. + // + // The exact matching logic is (in order): + // 1. If ANY matchCondition evaluates to FALSE, the policy is skipped. + // 2. If ALL matchConditions evaluate to TRUE, the policy is evaluated. + // 3. If any matchCondition evaluates to an error (but none are FALSE): + // - If failurePolicy=Fail, reject the request + // - If failurePolicy=Ignore, the policy is skipped + // + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + // +optional + repeated MatchCondition matchConditions = 6; + + // Variables contain definitions of variables that can be used in composition of other expressions. + // Each variable is defined as a named CEL expression. + // The variables defined here will be available under `variables` in other expressions of the policy + // except MatchConditions because MatchConditions are evaluated before the rest of the policy. + // + // The expression of a variable can refer to other variables defined earlier in the list but not those after. + // Thus, Variables must be sorted by the order of first appearance and acyclic. + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + // +optional + repeated Variable variables = 7; +} + +// ValidatingAdmissionPolicyStatus represents the status of an admission validation policy. +message ValidatingAdmissionPolicyStatus { + // The generation observed by the controller. + // +optional + optional int64 observedGeneration = 1; + + // The results of type checking for each expression. + // Presence of this field indicates the completion of the type checking. + // +optional + optional TypeChecking typeChecking = 2; + + // The conditions represent the latest available observations of a policy's current state. + // +optional + // +listType=map + // +listMapKey=type + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 3; +} + // ValidatingWebhook describes an admission webhook and the resources and operations it applies to. message ValidatingWebhook { // The name of the admission webhook. @@ -456,6 +925,97 @@ message ValidatingWebhookConfigurationList { repeated ValidatingWebhookConfiguration items = 2; } +// Validation specifies the CEL expression which is used to apply the validation. +message Validation { + // Expression represents the expression which will be evaluated by CEL. + // ref: https://github.com/google/cel-spec + // CEL expressions have access to the contents of the API request/response, organized into CEL variables as well as some other useful variables: + // + // - 'object' - The object from the incoming request. The value is null for DELETE requests. + // - 'oldObject' - The existing object. The value is null for CREATE requests. + // - 'request' - Attributes of the API request([ref](/pkg/apis/admission/types.go#AdmissionRequest)). + // - 'params' - Parameter resource referred to by the policy binding being evaluated. Only populated if the policy has a ParamKind. + // - 'namespaceObject' - The namespace object that the incoming object belongs to. The value is null for cluster-scoped resources. + // - 'variables' - Map of composited variables, from its name to its lazily evaluated value. + // For example, a variable named 'foo' can be accessed as 'variables.foo'. + // - 'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request. + // See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz + // - 'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the + // request resource. + // + // The `apiVersion`, `kind`, `metadata.name` and `metadata.generateName` are always accessible from the root of the + // object. No other metadata properties are accessible. + // + // Only property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*` are accessible. + // Accessible property names are escaped according to the following rules when accessed in the expression: + // - '__' escapes to '__underscores__' + // - '.' escapes to '__dot__' + // - '-' escapes to '__dash__' + // - '/' escapes to '__slash__' + // - Property names that exactly match a CEL RESERVED keyword escape to '__{keyword}__'. The keywords are: + // "true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", + // "import", "let", "loop", "package", "namespace", "return". + // Examples: + // - Expression accessing a property named "namespace": {"Expression": "object.__namespace__ > 0"} + // - Expression accessing a property named "x-prop": {"Expression": "object.x__dash__prop > 0"} + // - Expression accessing a property named "redact__d": {"Expression": "object.redact__underscores__d > 0"} + // + // Equality on arrays with list type of 'set' or 'map' ignores element order, i.e. [1, 2] == [2, 1]. + // Concatenation on arrays with x-kubernetes-list-type use the semantics of the list type: + // - 'set': `X + Y` performs a union where the array positions of all elements in `X` are preserved and + // non-intersecting elements in `Y` are appended, retaining their partial order. + // - 'map': `X + Y` performs a merge where the array positions of all keys in `X` are preserved but the values + // are overwritten by values in `Y` when the key sets of `X` and `Y` intersect. Elements in `Y` with + // non-intersecting keys are appended, retaining their partial order. + // Required. + optional string Expression = 1; + + // Message represents the message displayed when validation fails. The message is required if the Expression contains + // line breaks. The message must not contain line breaks. + // If unset, the message is "failed rule: {Rule}". + // e.g. "must be a URL with the host matching spec.host" + // If the Expression contains line breaks. Message is required. + // The message must not contain line breaks. + // If unset, the message is "failed Expression: {Expression}". + // +optional + optional string message = 2; + + // Reason represents a machine-readable description of why this validation failed. + // If this is the first validation in the list to fail, this reason, as well as the + // corresponding HTTP response code, are used in the + // HTTP response to the client. + // The currently supported reasons are: "Unauthorized", "Forbidden", "Invalid", "RequestEntityTooLarge". + // If not set, StatusReasonInvalid is used in the response to the client. + // +optional + optional string reason = 3; + + // messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails. + // Since messageExpression is used as a failure message, it must evaluate to a string. + // If both message and messageExpression are present on a validation, then messageExpression will be used if validation fails. + // If messageExpression results in a runtime error, the runtime error is logged, and the validation failure message is produced + // as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string + // that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset, and + // the fact that messageExpression produced an empty string/string with only spaces/string with line breaks will be logged. + // messageExpression has access to all the same variables as the `expression` except for 'authorizer' and 'authorizer.requestResource'. + // Example: + // "object.x must be less than max ("+string(params.max)+")" + // +optional + optional string messageExpression = 4; +} + +// Variable is the definition of a variable that is used for composition. A variable is defined as a named expression. +// +structType=atomic +message Variable { + // Name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. + // The variable can be accessed in other expressions through `variables` + // For example, if name is "foo", the variable will be available as `variables.foo` + optional string Name = 1; + + // Expression is the expression that will be evaluated as the value of the variable. + // The CEL expression has access to the same identifiers as the CEL expressions in Validation. + optional string Expression = 2; +} + // WebhookClientConfig contains the information to make a TLS // connection with the webhook message WebhookClientConfig { diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/register.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/register.go index 098744cf634f..363233a2f9aa 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/register.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/register.go @@ -50,6 +50,10 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ValidatingWebhookConfigurationList{}, &MutatingWebhookConfiguration{}, &MutatingWebhookConfigurationList{}, + &ValidatingAdmissionPolicy{}, + &ValidatingAdmissionPolicyList{}, + &ValidatingAdmissionPolicyBinding{}, + &ValidatingAdmissionPolicyBindingList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types.go index e1fd5dcee8fe..c199702fbd02 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types.go @@ -38,6 +38,18 @@ const ( AllScopes ScopeType = v1.AllScopes ) +// ParameterNotFoundActionType specifies a failure policy that defines how a binding +// is evaluated when the param referred by its perNamespaceParamRef is not found. +type ParameterNotFoundActionType string + +const ( + // Allow means all requests will be admitted if no param resources + // could be found. + AllowAction ParameterNotFoundActionType = "Allow" + // Deny means all requests will be denied if no param resources are found. + DenyAction ParameterNotFoundActionType = "Deny" +) + // FailurePolicyType specifies a failure policy that defines how unrecognized errors from the admission endpoint are handled. type FailurePolicyType string @@ -75,6 +87,584 @@ const ( SideEffectClassNoneOnDryRun SideEffectClass = "NoneOnDryRun" ) +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 +// ValidatingAdmissionPolicy describes the definition of an admission validation policy that accepts or rejects an object without changing it. +type ValidatingAdmissionPolicy struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Specification of the desired behavior of the ValidatingAdmissionPolicy. + Spec ValidatingAdmissionPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + // The status of the ValidatingAdmissionPolicy, including warnings that are useful to determine if the policy + // behaves in the expected way. + // Populated by the system. + // Read-only. + // +optional + Status ValidatingAdmissionPolicyStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ValidatingAdmissionPolicyStatus represents the status of an admission validation policy. +type ValidatingAdmissionPolicyStatus struct { + // The generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` + // The results of type checking for each expression. + // Presence of this field indicates the completion of the type checking. + // +optional + TypeChecking *TypeChecking `json:"typeChecking,omitempty" protobuf:"bytes,2,opt,name=typeChecking"` + // The conditions represent the latest available observations of a policy's current state. + // +optional + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" protobuf:"bytes,3,rep,name=conditions"` +} + +// ValidatingAdmissionPolicyConditionType is the condition type of admission validation policy. +type ValidatingAdmissionPolicyConditionType string + +// TypeChecking contains results of type checking the expressions in the +// ValidatingAdmissionPolicy +type TypeChecking struct { + // The type checking warnings for each expression. + // +optional + // +listType=atomic + ExpressionWarnings []ExpressionWarning `json:"expressionWarnings,omitempty" protobuf:"bytes,1,rep,name=expressionWarnings"` +} + +// ExpressionWarning is a warning information that targets a specific expression. +type ExpressionWarning struct { + // The path to the field that refers the expression. + // For example, the reference to the expression of the first item of + // validations is "spec.validations[0].expression" + FieldRef string `json:"fieldRef" protobuf:"bytes,2,opt,name=fieldRef"` + // The content of type checking information in a human-readable form. + // Each line of the warning contains the type that the expression is checked + // against, followed by the type check error from the compiler. + Warning string `json:"warning" protobuf:"bytes,3,opt,name=warning"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 +// ValidatingAdmissionPolicyList is a list of ValidatingAdmissionPolicy. +type ValidatingAdmissionPolicyList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of ValidatingAdmissionPolicy. + Items []ValidatingAdmissionPolicy `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` +} + +// ValidatingAdmissionPolicySpec is the specification of the desired behavior of the AdmissionPolicy. +type ValidatingAdmissionPolicySpec struct { + // ParamKind specifies the kind of resources used to parameterize this policy. + // If absent, there are no parameters for this policy and the param CEL variable will not be provided to validation expressions. + // If ParamKind refers to a non-existent kind, this policy definition is mis-configured and the FailurePolicy is applied. + // If paramKind is specified but paramRef is unset in ValidatingAdmissionPolicyBinding, the params variable will be null. + // +optional + ParamKind *ParamKind `json:"paramKind,omitempty" protobuf:"bytes,1,rep,name=paramKind"` + + // MatchConstraints specifies what resources this policy is designed to validate. + // The AdmissionPolicy cares about a request if it matches _all_ Constraints. + // However, in order to prevent clusters from being put into an unstable state that cannot be recovered from via the API + // ValidatingAdmissionPolicy cannot match ValidatingAdmissionPolicy and ValidatingAdmissionPolicyBinding. + // Required. + MatchConstraints *MatchResources `json:"matchConstraints,omitempty" protobuf:"bytes,2,rep,name=matchConstraints"` + + // Validations contain CEL expressions which is used to apply the validation. + // Validations and AuditAnnotations may not both be empty; a minimum of one Validations or AuditAnnotations is + // required. + // +listType=atomic + // +optional + Validations []Validation `json:"validations,omitempty" protobuf:"bytes,3,rep,name=validations"` + + // failurePolicy defines how to handle failures for the admission policy. Failures can + // occur from CEL expression parse errors, type check errors, runtime errors and invalid + // or mis-configured policy definitions or bindings. + // + // A policy is invalid if spec.paramKind refers to a non-existent Kind. + // A binding is invalid if spec.paramRef.name refers to a non-existent resource. + // + // failurePolicy does not define how validations that evaluate to false are handled. + // + // When failurePolicy is set to Fail, ValidatingAdmissionPolicyBinding validationActions + // define how failures are enforced. + // + // Allowed values are Ignore or Fail. Defaults to Fail. + // +optional + FailurePolicy *FailurePolicyType `json:"failurePolicy,omitempty" protobuf:"bytes,4,opt,name=failurePolicy,casttype=FailurePolicyType"` + + // auditAnnotations contains CEL expressions which are used to produce audit + // annotations for the audit event of the API request. + // validations and auditAnnotations may not both be empty; a least one of validations or auditAnnotations is + // required. + // +listType=atomic + // +optional + AuditAnnotations []AuditAnnotation `json:"auditAnnotations,omitempty" protobuf:"bytes,5,rep,name=auditAnnotations"` + + // MatchConditions is a list of conditions that must be met for a request to be validated. + // Match conditions filter requests that have already been matched by the rules, + // namespaceSelector, and objectSelector. An empty list of matchConditions matches all requests. + // There are a maximum of 64 match conditions allowed. + // + // If a parameter object is provided, it can be accessed via the `params` handle in the same + // manner as validation expressions. + // + // The exact matching logic is (in order): + // 1. If ANY matchCondition evaluates to FALSE, the policy is skipped. + // 2. If ALL matchConditions evaluate to TRUE, the policy is evaluated. + // 3. If any matchCondition evaluates to an error (but none are FALSE): + // - If failurePolicy=Fail, reject the request + // - If failurePolicy=Ignore, the policy is skipped + // + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + // +optional + MatchConditions []MatchCondition `json:"matchConditions,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,6,rep,name=matchConditions"` + + // Variables contain definitions of variables that can be used in composition of other expressions. + // Each variable is defined as a named CEL expression. + // The variables defined here will be available under `variables` in other expressions of the policy + // except MatchConditions because MatchConditions are evaluated before the rest of the policy. + // + // The expression of a variable can refer to other variables defined earlier in the list but not those after. + // Thus, Variables must be sorted by the order of first appearance and acyclic. + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + // +optional + Variables []Variable `json:"variables" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=variables"` +} + +// ParamKind is a tuple of Group Kind and Version. +// +structType=atomic +type ParamKind struct { + // APIVersion is the API group version the resources belong to. + // In format of "group/version". + // Required. + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,1,rep,name=apiVersion"` + + // Kind is the API kind the resources belong to. + // Required. + Kind string `json:"kind,omitempty" protobuf:"bytes,2,rep,name=kind"` +} + +// Validation specifies the CEL expression which is used to apply the validation. +type Validation struct { + // Expression represents the expression which will be evaluated by CEL. + // ref: https://github.com/google/cel-spec + // CEL expressions have access to the contents of the API request/response, organized into CEL variables as well as some other useful variables: + // + // - 'object' - The object from the incoming request. The value is null for DELETE requests. + // - 'oldObject' - The existing object. The value is null for CREATE requests. + // - 'request' - Attributes of the API request([ref](/pkg/apis/admission/types.go#AdmissionRequest)). + // - 'params' - Parameter resource referred to by the policy binding being evaluated. Only populated if the policy has a ParamKind. + // - 'namespaceObject' - The namespace object that the incoming object belongs to. The value is null for cluster-scoped resources. + // - 'variables' - Map of composited variables, from its name to its lazily evaluated value. + // For example, a variable named 'foo' can be accessed as 'variables.foo'. + // - 'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request. + // See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz + // - 'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the + // request resource. + // + // The `apiVersion`, `kind`, `metadata.name` and `metadata.generateName` are always accessible from the root of the + // object. No other metadata properties are accessible. + // + // Only property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*` are accessible. + // Accessible property names are escaped according to the following rules when accessed in the expression: + // - '__' escapes to '__underscores__' + // - '.' escapes to '__dot__' + // - '-' escapes to '__dash__' + // - '/' escapes to '__slash__' + // - Property names that exactly match a CEL RESERVED keyword escape to '__{keyword}__'. The keywords are: + // "true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", + // "import", "let", "loop", "package", "namespace", "return". + // Examples: + // - Expression accessing a property named "namespace": {"Expression": "object.__namespace__ > 0"} + // - Expression accessing a property named "x-prop": {"Expression": "object.x__dash__prop > 0"} + // - Expression accessing a property named "redact__d": {"Expression": "object.redact__underscores__d > 0"} + // + // Equality on arrays with list type of 'set' or 'map' ignores element order, i.e. [1, 2] == [2, 1]. + // Concatenation on arrays with x-kubernetes-list-type use the semantics of the list type: + // - 'set': `X + Y` performs a union where the array positions of all elements in `X` are preserved and + // non-intersecting elements in `Y` are appended, retaining their partial order. + // - 'map': `X + Y` performs a merge where the array positions of all keys in `X` are preserved but the values + // are overwritten by values in `Y` when the key sets of `X` and `Y` intersect. Elements in `Y` with + // non-intersecting keys are appended, retaining their partial order. + // Required. + Expression string `json:"expression" protobuf:"bytes,1,opt,name=Expression"` + // Message represents the message displayed when validation fails. The message is required if the Expression contains + // line breaks. The message must not contain line breaks. + // If unset, the message is "failed rule: {Rule}". + // e.g. "must be a URL with the host matching spec.host" + // If the Expression contains line breaks. Message is required. + // The message must not contain line breaks. + // If unset, the message is "failed Expression: {Expression}". + // +optional + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` + // Reason represents a machine-readable description of why this validation failed. + // If this is the first validation in the list to fail, this reason, as well as the + // corresponding HTTP response code, are used in the + // HTTP response to the client. + // The currently supported reasons are: "Unauthorized", "Forbidden", "Invalid", "RequestEntityTooLarge". + // If not set, StatusReasonInvalid is used in the response to the client. + // +optional + Reason *metav1.StatusReason `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails. + // Since messageExpression is used as a failure message, it must evaluate to a string. + // If both message and messageExpression are present on a validation, then messageExpression will be used if validation fails. + // If messageExpression results in a runtime error, the runtime error is logged, and the validation failure message is produced + // as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string + // that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset, and + // the fact that messageExpression produced an empty string/string with only spaces/string with line breaks will be logged. + // messageExpression has access to all the same variables as the `expression` except for 'authorizer' and 'authorizer.requestResource'. + // Example: + // "object.x must be less than max ("+string(params.max)+")" + // +optional + MessageExpression string `json:"messageExpression,omitempty" protobuf:"bytes,4,opt,name=messageExpression"` +} + +// Variable is the definition of a variable that is used for composition. A variable is defined as a named expression. +// +structType=atomic +type Variable struct { + // Name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. + // The variable can be accessed in other expressions through `variables` + // For example, if name is "foo", the variable will be available as `variables.foo` + Name string `json:"name" protobuf:"bytes,1,opt,name=Name"` + + // Expression is the expression that will be evaluated as the value of the variable. + // The CEL expression has access to the same identifiers as the CEL expressions in Validation. + Expression string `json:"expression" protobuf:"bytes,2,opt,name=Expression"` +} + +// AuditAnnotation describes how to produce an audit annotation for an API request. +type AuditAnnotation struct { + // key specifies the audit annotation key. The audit annotation keys of + // a ValidatingAdmissionPolicy must be unique. The key must be a qualified + // name ([A-Za-z0-9][-A-Za-z0-9_.]*) no more than 63 bytes in length. + // + // The key is combined with the resource name of the + // ValidatingAdmissionPolicy to construct an audit annotation key: + // "{ValidatingAdmissionPolicy name}/{key}". + // + // If an admission webhook uses the same resource name as this ValidatingAdmissionPolicy + // and the same audit annotation key, the annotation key will be identical. + // In this case, the first annotation written with the key will be included + // in the audit event and all subsequent annotations with the same key + // will be discarded. + // + // Required. + Key string `json:"key" protobuf:"bytes,1,opt,name=key"` + + // valueExpression represents the expression which is evaluated by CEL to + // produce an audit annotation value. The expression must evaluate to either + // a string or null value. If the expression evaluates to a string, the + // audit annotation is included with the string value. If the expression + // evaluates to null or empty string the audit annotation will be omitted. + // The valueExpression may be no longer than 5kb in length. + // If the result of the valueExpression is more than 10kb in length, it + // will be truncated to 10kb. + // + // If multiple ValidatingAdmissionPolicyBinding resources match an + // API request, then the valueExpression will be evaluated for + // each binding. All unique values produced by the valueExpressions + // will be joined together in a comma-separated list. + // + // Required. + ValueExpression string `json:"valueExpression" protobuf:"bytes,2,opt,name=valueExpression"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 + +// ValidatingAdmissionPolicyBinding binds the ValidatingAdmissionPolicy with paramerized resources. +// ValidatingAdmissionPolicyBinding and parameter CRDs together define how cluster administrators configure policies for clusters. +// +// For a given admission request, each binding will cause its policy to be +// evaluated N times, where N is 1 for policies/bindings that don't use +// params, otherwise N is the number of parameters selected by the binding. +// +// The CEL expressions of a policy must have a computed CEL cost below the maximum +// CEL budget. Each evaluation of the policy is given an independent CEL cost budget. +// Adding/removing policies, bindings, or params can not affect whether a +// given (policy, binding, param) combination is within its own CEL budget. +type ValidatingAdmissionPolicyBinding struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Specification of the desired behavior of the ValidatingAdmissionPolicyBinding. + Spec ValidatingAdmissionPolicyBindingSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:prerelease-lifecycle-gen:introduced=1.28 + +// ValidatingAdmissionPolicyBindingList is a list of ValidatingAdmissionPolicyBinding. +type ValidatingAdmissionPolicyBindingList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of PolicyBinding. + Items []ValidatingAdmissionPolicyBinding `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` +} + +// ValidatingAdmissionPolicyBindingSpec is the specification of the ValidatingAdmissionPolicyBinding. +type ValidatingAdmissionPolicyBindingSpec struct { + // PolicyName references a ValidatingAdmissionPolicy name which the ValidatingAdmissionPolicyBinding binds to. + // If the referenced resource does not exist, this binding is considered invalid and will be ignored + // Required. + PolicyName string `json:"policyName,omitempty" protobuf:"bytes,1,rep,name=policyName"` + + // paramRef specifies the parameter resource used to configure the admission control policy. + // It should point to a resource of the type specified in ParamKind of the bound ValidatingAdmissionPolicy. + // If the policy specifies a ParamKind and the resource referred to by ParamRef does not exist, this binding is considered mis-configured and the FailurePolicy of the ValidatingAdmissionPolicy applied. + // If the policy does not specify a ParamKind then this field is ignored, and the rules are evaluated without a param. + // +optional + ParamRef *ParamRef `json:"paramRef,omitempty" protobuf:"bytes,2,rep,name=paramRef"` + + // MatchResources declares what resources match this binding and will be validated by it. + // Note that this is intersected with the policy's matchConstraints, so only requests that are matched by the policy can be selected by this. + // If this is unset, all resources matched by the policy are validated by this binding + // When resourceRules is unset, it does not constrain resource matching. If a resource is matched by the other fields of this object, it will be validated. + // Note that this is differs from ValidatingAdmissionPolicy matchConstraints, where resourceRules are required. + // +optional + MatchResources *MatchResources `json:"matchResources,omitempty" protobuf:"bytes,3,rep,name=matchResources"` + + // validationActions declares how Validations of the referenced ValidatingAdmissionPolicy are enforced. + // If a validation evaluates to false it is always enforced according to these actions. + // + // Failures defined by the ValidatingAdmissionPolicy's FailurePolicy are enforced according + // to these actions only if the FailurePolicy is set to Fail, otherwise the failures are + // ignored. This includes compilation errors, runtime errors and misconfigurations of the policy. + // + // validationActions is declared as a set of action values. Order does + // not matter. validationActions may not contain duplicates of the same action. + // + // The supported actions values are: + // + // "Deny" specifies that a validation failure results in a denied request. + // + // "Warn" specifies that a validation failure is reported to the request client + // in HTTP Warning headers, with a warning code of 299. Warnings can be sent + // both for allowed or denied admission responses. + // + // "Audit" specifies that a validation failure is included in the published + // audit event for the request. The audit event will contain a + // `validation.policy.admission.k8s.io/validation_failure` audit annotation + // with a value containing the details of the validation failures, formatted as + // a JSON list of objects, each with the following fields: + // - message: The validation failure message string + // - policy: The resource name of the ValidatingAdmissionPolicy + // - binding: The resource name of the ValidatingAdmissionPolicyBinding + // - expressionIndex: The index of the failed validations in the ValidatingAdmissionPolicy + // - validationActions: The enforcement actions enacted for the validation failure + // Example audit annotation: + // `"validation.policy.admission.k8s.io/validation_failure": "[{\"message\": \"Invalid value\", {\"policy\": \"policy.example.com\", {\"binding\": \"policybinding.example.com\", {\"expressionIndex\": \"1\", {\"validationActions\": [\"Audit\"]}]"` + // + // Clients should expect to handle additional values by ignoring + // any values not recognized. + // + // "Deny" and "Warn" may not be used together since this combination + // needlessly duplicates the validation failure both in the + // API response body and the HTTP warning headers. + // + // Required. + // +listType=set + ValidationActions []ValidationAction `json:"validationActions,omitempty" protobuf:"bytes,4,rep,name=validationActions"` +} + +// ParamRef describes how to locate the params to be used as input to +// expressions of rules applied by a policy binding. +// +structType=atomic +type ParamRef struct { + // name is the name of the resource being referenced. + // + // One of `name` or `selector` must be set, but `name` and `selector` are + // mutually exclusive properties. If one is set, the other must be unset. + // + // A single parameter used for all admission requests can be configured + // by setting the `name` field, leaving `selector` blank, and setting namespace + // if `paramKind` is namespace-scoped. + // + Name string `json:"name,omitempty" protobuf:"bytes,1,rep,name=name"` + + // namespace is the namespace of the referenced resource. Allows limiting + // the search for params to a specific namespace. Applies to both `name` and + // `selector` fields. + // + // A per-namespace parameter may be used by specifying a namespace-scoped + // `paramKind` in the policy and leaving this field empty. + // + // - If `paramKind` is cluster-scoped, this field MUST be unset. Setting this + // field results in a configuration error. + // + // - If `paramKind` is namespace-scoped, the namespace of the object being + // evaluated for admission will be used when this field is left unset. Take + // care that if this is left empty the binding must not match any cluster-scoped + // resources, which will result in an error. + // + // +optional + Namespace string `json:"namespace,omitempty" protobuf:"bytes,2,rep,name=namespace"` + + // selector can be used to match multiple param objects based on their labels. + // Supply selector: {} to match all resources of the ParamKind. + // + // If multiple params are found, they are all evaluated with the policy expressions + // and the results are ANDed together. + // + // One of `name` or `selector` must be set, but `name` and `selector` are + // mutually exclusive properties. If one is set, the other must be unset. + // + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,rep,name=selector"` + + // `parameterNotFoundAction` controls the behavior of the binding when the resource + // exists, and name or selector is valid, but there are no parameters + // matched by the binding. If the value is set to `Allow`, then no + // matched parameters will be treated as successful validation by the binding. + // If set to `Deny`, then no matched parameters will be subject to the + // `failurePolicy` of the policy. + // + // Allowed values are `Allow` or `Deny` + // + // Required + ParameterNotFoundAction *ParameterNotFoundActionType `json:"parameterNotFoundAction,omitempty" protobuf:"bytes,4,rep,name=parameterNotFoundAction"` +} + +// MatchResources decides whether to run the admission control policy on an object based +// on whether it meets the match criteria. +// The exclude rules take precedence over include rules (if a resource matches both, it is excluded) +// +structType=atomic +type MatchResources struct { + // NamespaceSelector decides whether to run the admission control policy on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the policy. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the policy on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,1,opt,name=namespaceSelector"` + // ObjectSelector decides whether to run the validation based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the cel validation, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + ObjectSelector *metav1.LabelSelector `json:"objectSelector,omitempty" protobuf:"bytes,2,opt,name=objectSelector"` + // ResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy matches. + // The policy cares about an operation if it matches _any_ Rule. + // +listType=atomic + // +optional + ResourceRules []NamedRuleWithOperations `json:"resourceRules,omitempty" protobuf:"bytes,3,rep,name=resourceRules"` + // ExcludeResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy should not care about. + // The exclude rules take precedence over include rules (if a resource matches both, it is excluded) + // +listType=atomic + // +optional + ExcludeResourceRules []NamedRuleWithOperations `json:"excludeResourceRules,omitempty" protobuf:"bytes,4,rep,name=excludeResourceRules"` + // matchPolicy defines how the "MatchResources" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the ValidatingAdmissionPolicy. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the ValidatingAdmissionPolicy. + // + // Defaults to "Equivalent" + // +optional + MatchPolicy *MatchPolicyType `json:"matchPolicy,omitempty" protobuf:"bytes,7,opt,name=matchPolicy,casttype=MatchPolicyType"` +} + +// ValidationAction specifies a policy enforcement action. +// +enum +type ValidationAction string + +const ( + // Deny specifies that a validation failure results in a denied request. + Deny ValidationAction = "Deny" + // Warn specifies that a validation failure is reported to the request client + // in HTTP Warning headers, with a warning code of 299. Warnings can be sent + // both for allowed or denied admission responses. + Warn ValidationAction = "Warn" + // Audit specifies that a validation failure is included in the published + // audit event for the request. The audit event will contain a + // `validation.policy.admission.k8s.io/validation_failure` audit annotation + // with a value containing the details of the validation failure. + Audit ValidationAction = "Audit" +) + +// NamedRuleWithOperations is a tuple of Operations and Resources with ResourceNames. +// +structType=atomic +type NamedRuleWithOperations struct { + // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + // +listType=atomic + // +optional + ResourceNames []string `json:"resourceNames,omitempty" protobuf:"bytes,1,rep,name=resourceNames"` + // RuleWithOperations is a tuple of Operations and Resources. + RuleWithOperations `json:",inline" protobuf:"bytes,2,opt,name=ruleWithOperations"` +} + // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go index 2de14f6c7515..adaf4bc11dbe 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go @@ -27,6 +27,26 @@ package v1beta1 // Those methods can be generated by using hack/update-codegen.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_AuditAnnotation = map[string]string{ + "": "AuditAnnotation describes how to produce an audit annotation for an API request.", + "key": "key specifies the audit annotation key. The audit annotation keys of a ValidatingAdmissionPolicy must be unique. The key must be a qualified name ([A-Za-z0-9][-A-Za-z0-9_.]*) no more than 63 bytes in length.\n\nThe key is combined with the resource name of the ValidatingAdmissionPolicy to construct an audit annotation key: \"{ValidatingAdmissionPolicy name}/{key}\".\n\nIf an admission webhook uses the same resource name as this ValidatingAdmissionPolicy and the same audit annotation key, the annotation key will be identical. In this case, the first annotation written with the key will be included in the audit event and all subsequent annotations with the same key will be discarded.\n\nRequired.", + "valueExpression": "valueExpression represents the expression which is evaluated by CEL to produce an audit annotation value. The expression must evaluate to either a string or null value. If the expression evaluates to a string, the audit annotation is included with the string value. If the expression evaluates to null or empty string the audit annotation will be omitted. The valueExpression may be no longer than 5kb in length. If the result of the valueExpression is more than 10kb in length, it will be truncated to 10kb.\n\nIf multiple ValidatingAdmissionPolicyBinding resources match an API request, then the valueExpression will be evaluated for each binding. All unique values produced by the valueExpressions will be joined together in a comma-separated list.\n\nRequired.", +} + +func (AuditAnnotation) SwaggerDoc() map[string]string { + return map_AuditAnnotation +} + +var map_ExpressionWarning = map[string]string{ + "": "ExpressionWarning is a warning information that targets a specific expression.", + "fieldRef": "The path to the field that refers the expression. For example, the reference to the expression of the first item of validations is \"spec.validations[0].expression\"", + "warning": "The content of type checking information in a human-readable form. Each line of the warning contains the type that the expression is checked against, followed by the type check error from the compiler.", +} + +func (ExpressionWarning) SwaggerDoc() map[string]string { + return map_ExpressionWarning +} + var map_MatchCondition = map[string]string{ "": "MatchCondition represents a condition which must be fulfilled for a request to be sent to a webhook.", "name": "Name is an identifier for this match condition, used for strategic merging of MatchConditions, as well as providing an identifier for logging purposes. A good name should be descriptive of the associated expression. Name must be a qualified name consisting of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyName', or 'my.name', or '123-abc', regex used for validation is '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]') with an optional DNS subdomain prefix and '/' (e.g. 'example.com/MyName')\n\nRequired.", @@ -37,6 +57,19 @@ func (MatchCondition) SwaggerDoc() map[string]string { return map_MatchCondition } +var map_MatchResources = map[string]string{ + "": "MatchResources decides whether to run the admission control policy on an object based on whether it meets the match criteria. The exclude rules take precedence over include rules (if a resource matches both, it is excluded)", + "namespaceSelector": "NamespaceSelector decides whether to run the admission control policy on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the policy.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the policy on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + "objectSelector": "ObjectSelector decides whether to run the validation based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the cel validation, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + "resourceRules": "ResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy matches. The policy cares about an operation if it matches _any_ Rule.", + "excludeResourceRules": "ExcludeResourceRules describes what operations on what resources/subresources the ValidatingAdmissionPolicy should not care about. The exclude rules take precedence over include rules (if a resource matches both, it is excluded)", + "matchPolicy": "matchPolicy defines how the \"MatchResources\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the ValidatingAdmissionPolicy.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the ValidatingAdmissionPolicy.\n\nDefaults to \"Equivalent\"", +} + +func (MatchResources) SwaggerDoc() map[string]string { + return map_MatchResources +} + var map_MutatingWebhook = map[string]string{ "": "MutatingWebhook describes an admission webhook and the resources and operations it applies to.", "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", @@ -77,6 +110,37 @@ func (MutatingWebhookConfigurationList) SwaggerDoc() map[string]string { return map_MutatingWebhookConfigurationList } +var map_NamedRuleWithOperations = map[string]string{ + "": "NamedRuleWithOperations is a tuple of Operations and Resources with ResourceNames.", + "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", +} + +func (NamedRuleWithOperations) SwaggerDoc() map[string]string { + return map_NamedRuleWithOperations +} + +var map_ParamKind = map[string]string{ + "": "ParamKind is a tuple of Group Kind and Version.", + "apiVersion": "APIVersion is the API group version the resources belong to. In format of \"group/version\". Required.", + "kind": "Kind is the API kind the resources belong to. Required.", +} + +func (ParamKind) SwaggerDoc() map[string]string { + return map_ParamKind +} + +var map_ParamRef = map[string]string{ + "": "ParamRef describes how to locate the params to be used as input to expressions of rules applied by a policy binding.", + "name": "name is the name of the resource being referenced.\n\nOne of `name` or `selector` must be set, but `name` and `selector` are mutually exclusive properties. If one is set, the other must be unset.\n\nA single parameter used for all admission requests can be configured by setting the `name` field, leaving `selector` blank, and setting namespace if `paramKind` is namespace-scoped.", + "namespace": "namespace is the namespace of the referenced resource. Allows limiting the search for params to a specific namespace. Applies to both `name` and `selector` fields.\n\nA per-namespace parameter may be used by specifying a namespace-scoped `paramKind` in the policy and leaving this field empty.\n\n- If `paramKind` is cluster-scoped, this field MUST be unset. Setting this field results in a configuration error.\n\n- If `paramKind` is namespace-scoped, the namespace of the object being evaluated for admission will be used when this field is left unset. Take care that if this is left empty the binding must not match any cluster-scoped resources, which will result in an error.", + "selector": "selector can be used to match multiple param objects based on their labels. Supply selector: {} to match all resources of the ParamKind.\n\nIf multiple params are found, they are all evaluated with the policy expressions and the results are ANDed together.\n\nOne of `name` or `selector` must be set, but `name` and `selector` are mutually exclusive properties. If one is set, the other must be unset.", + "parameterNotFoundAction": "`parameterNotFoundAction` controls the behavior of the binding when the resource exists, and name or selector is valid, but there are no parameters matched by the binding. If the value is set to `Allow`, then no matched parameters will be treated as successful validation by the binding. If set to `Deny`, then no matched parameters will be subject to the `failurePolicy` of the policy.\n\nAllowed values are `Allow` or `Deny`\n\nRequired", +} + +func (ParamRef) SwaggerDoc() map[string]string { + return map_ParamRef +} + var map_ServiceReference = map[string]string{ "": "ServiceReference holds a reference to Service.legacy.k8s.io", "namespace": "`namespace` is the namespace of the service. Required", @@ -89,6 +153,94 @@ func (ServiceReference) SwaggerDoc() map[string]string { return map_ServiceReference } +var map_TypeChecking = map[string]string{ + "": "TypeChecking contains results of type checking the expressions in the ValidatingAdmissionPolicy", + "expressionWarnings": "The type checking warnings for each expression.", +} + +func (TypeChecking) SwaggerDoc() map[string]string { + return map_TypeChecking +} + +var map_ValidatingAdmissionPolicy = map[string]string{ + "": "ValidatingAdmissionPolicy describes the definition of an admission validation policy that accepts or rejects an object without changing it.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "Specification of the desired behavior of the ValidatingAdmissionPolicy.", + "status": "The status of the ValidatingAdmissionPolicy, including warnings that are useful to determine if the policy behaves in the expected way. Populated by the system. Read-only.", +} + +func (ValidatingAdmissionPolicy) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicy +} + +var map_ValidatingAdmissionPolicyBinding = map[string]string{ + "": "ValidatingAdmissionPolicyBinding binds the ValidatingAdmissionPolicy with paramerized resources. ValidatingAdmissionPolicyBinding and parameter CRDs together define how cluster administrators configure policies for clusters.\n\nFor a given admission request, each binding will cause its policy to be evaluated N times, where N is 1 for policies/bindings that don't use params, otherwise N is the number of parameters selected by the binding.\n\nThe CEL expressions of a policy must have a computed CEL cost below the maximum CEL budget. Each evaluation of the policy is given an independent CEL cost budget. Adding/removing policies, bindings, or params can not affect whether a given (policy, binding, param) combination is within its own CEL budget.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "Specification of the desired behavior of the ValidatingAdmissionPolicyBinding.", +} + +func (ValidatingAdmissionPolicyBinding) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicyBinding +} + +var map_ValidatingAdmissionPolicyBindingList = map[string]string{ + "": "ValidatingAdmissionPolicyBindingList is a list of ValidatingAdmissionPolicyBinding.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "List of PolicyBinding.", +} + +func (ValidatingAdmissionPolicyBindingList) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicyBindingList +} + +var map_ValidatingAdmissionPolicyBindingSpec = map[string]string{ + "": "ValidatingAdmissionPolicyBindingSpec is the specification of the ValidatingAdmissionPolicyBinding.", + "policyName": "PolicyName references a ValidatingAdmissionPolicy name which the ValidatingAdmissionPolicyBinding binds to. If the referenced resource does not exist, this binding is considered invalid and will be ignored Required.", + "paramRef": "paramRef specifies the parameter resource used to configure the admission control policy. It should point to a resource of the type specified in ParamKind of the bound ValidatingAdmissionPolicy. If the policy specifies a ParamKind and the resource referred to by ParamRef does not exist, this binding is considered mis-configured and the FailurePolicy of the ValidatingAdmissionPolicy applied. If the policy does not specify a ParamKind then this field is ignored, and the rules are evaluated without a param.", + "matchResources": "MatchResources declares what resources match this binding and will be validated by it. Note that this is intersected with the policy's matchConstraints, so only requests that are matched by the policy can be selected by this. If this is unset, all resources matched by the policy are validated by this binding When resourceRules is unset, it does not constrain resource matching. If a resource is matched by the other fields of this object, it will be validated. Note that this is differs from ValidatingAdmissionPolicy matchConstraints, where resourceRules are required.", + "validationActions": "validationActions declares how Validations of the referenced ValidatingAdmissionPolicy are enforced. If a validation evaluates to false it is always enforced according to these actions.\n\nFailures defined by the ValidatingAdmissionPolicy's FailurePolicy are enforced according to these actions only if the FailurePolicy is set to Fail, otherwise the failures are ignored. This includes compilation errors, runtime errors and misconfigurations of the policy.\n\nvalidationActions is declared as a set of action values. Order does not matter. validationActions may not contain duplicates of the same action.\n\nThe supported actions values are:\n\n\"Deny\" specifies that a validation failure results in a denied request.\n\n\"Warn\" specifies that a validation failure is reported to the request client in HTTP Warning headers, with a warning code of 299. Warnings can be sent both for allowed or denied admission responses.\n\n\"Audit\" specifies that a validation failure is included in the published audit event for the request. The audit event will contain a `validation.policy.admission.k8s.io/validation_failure` audit annotation with a value containing the details of the validation failures, formatted as a JSON list of objects, each with the following fields: - message: The validation failure message string - policy: The resource name of the ValidatingAdmissionPolicy - binding: The resource name of the ValidatingAdmissionPolicyBinding - expressionIndex: The index of the failed validations in the ValidatingAdmissionPolicy - validationActions: The enforcement actions enacted for the validation failure Example audit annotation: `\"validation.policy.admission.k8s.io/validation_failure\": \"[{\"message\": \"Invalid value\", {\"policy\": \"policy.example.com\", {\"binding\": \"policybinding.example.com\", {\"expressionIndex\": \"1\", {\"validationActions\": [\"Audit\"]}]\"`\n\nClients should expect to handle additional values by ignoring any values not recognized.\n\n\"Deny\" and \"Warn\" may not be used together since this combination needlessly duplicates the validation failure both in the API response body and the HTTP warning headers.\n\nRequired.", +} + +func (ValidatingAdmissionPolicyBindingSpec) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicyBindingSpec +} + +var map_ValidatingAdmissionPolicyList = map[string]string{ + "": "ValidatingAdmissionPolicyList is a list of ValidatingAdmissionPolicy.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "List of ValidatingAdmissionPolicy.", +} + +func (ValidatingAdmissionPolicyList) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicyList +} + +var map_ValidatingAdmissionPolicySpec = map[string]string{ + "": "ValidatingAdmissionPolicySpec is the specification of the desired behavior of the AdmissionPolicy.", + "paramKind": "ParamKind specifies the kind of resources used to parameterize this policy. If absent, there are no parameters for this policy and the param CEL variable will not be provided to validation expressions. If ParamKind refers to a non-existent kind, this policy definition is mis-configured and the FailurePolicy is applied. If paramKind is specified but paramRef is unset in ValidatingAdmissionPolicyBinding, the params variable will be null.", + "matchConstraints": "MatchConstraints specifies what resources this policy is designed to validate. The AdmissionPolicy cares about a request if it matches _all_ Constraints. However, in order to prevent clusters from being put into an unstable state that cannot be recovered from via the API ValidatingAdmissionPolicy cannot match ValidatingAdmissionPolicy and ValidatingAdmissionPolicyBinding. Required.", + "validations": "Validations contain CEL expressions which is used to apply the validation. Validations and AuditAnnotations may not both be empty; a minimum of one Validations or AuditAnnotations is required.", + "failurePolicy": "failurePolicy defines how to handle failures for the admission policy. Failures can occur from CEL expression parse errors, type check errors, runtime errors and invalid or mis-configured policy definitions or bindings.\n\nA policy is invalid if spec.paramKind refers to a non-existent Kind. A binding is invalid if spec.paramRef.name refers to a non-existent resource.\n\nfailurePolicy does not define how validations that evaluate to false are handled.\n\nWhen failurePolicy is set to Fail, ValidatingAdmissionPolicyBinding validationActions define how failures are enforced.\n\nAllowed values are Ignore or Fail. Defaults to Fail.", + "auditAnnotations": "auditAnnotations contains CEL expressions which are used to produce audit annotations for the audit event of the API request. validations and auditAnnotations may not both be empty; a least one of validations or auditAnnotations is required.", + "matchConditions": "MatchConditions is a list of conditions that must be met for a request to be validated. Match conditions filter requests that have already been matched by the rules, namespaceSelector, and objectSelector. An empty list of matchConditions matches all requests. There are a maximum of 64 match conditions allowed.\n\nIf a parameter object is provided, it can be accessed via the `params` handle in the same manner as validation expressions.\n\nThe exact matching logic is (in order):\n 1. If ANY matchCondition evaluates to FALSE, the policy is skipped.\n 2. If ALL matchConditions evaluate to TRUE, the policy is evaluated.\n 3. If any matchCondition evaluates to an error (but none are FALSE):\n - If failurePolicy=Fail, reject the request\n - If failurePolicy=Ignore, the policy is skipped", + "variables": "Variables contain definitions of variables that can be used in composition of other expressions. Each variable is defined as a named CEL expression. The variables defined here will be available under `variables` in other expressions of the policy except MatchConditions because MatchConditions are evaluated before the rest of the policy.\n\nThe expression of a variable can refer to other variables defined earlier in the list but not those after. Thus, Variables must be sorted by the order of first appearance and acyclic.", +} + +func (ValidatingAdmissionPolicySpec) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicySpec +} + +var map_ValidatingAdmissionPolicyStatus = map[string]string{ + "": "ValidatingAdmissionPolicyStatus represents the status of an admission validation policy.", + "observedGeneration": "The generation observed by the controller.", + "typeChecking": "The results of type checking for each expression. Presence of this field indicates the completion of the type checking.", + "conditions": "The conditions represent the latest available observations of a policy's current state.", +} + +func (ValidatingAdmissionPolicyStatus) SwaggerDoc() map[string]string { + return map_ValidatingAdmissionPolicyStatus +} + var map_ValidatingWebhook = map[string]string{ "": "ValidatingWebhook describes an admission webhook and the resources and operations it applies to.", "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", @@ -128,6 +280,28 @@ func (ValidatingWebhookConfigurationList) SwaggerDoc() map[string]string { return map_ValidatingWebhookConfigurationList } +var map_Validation = map[string]string{ + "": "Validation specifies the CEL expression which is used to apply the validation.", + "expression": "Expression represents the expression which will be evaluated by CEL. ref: https://github.com/google/cel-spec CEL expressions have access to the contents of the API request/response, organized into CEL variables as well as some other useful variables:\n\n- 'object' - The object from the incoming request. The value is null for DELETE requests. - 'oldObject' - The existing object. The value is null for CREATE requests. - 'request' - Attributes of the API request([ref](/pkg/apis/admission/types.go#AdmissionRequest)). - 'params' - Parameter resource referred to by the policy binding being evaluated. Only populated if the policy has a ParamKind. - 'namespaceObject' - The namespace object that the incoming object belongs to. The value is null for cluster-scoped resources. - 'variables' - Map of composited variables, from its name to its lazily evaluated value.\n For example, a variable named 'foo' can be accessed as 'variables.foo'.\n- 'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request.\n See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz\n- 'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the\n request resource.\n\nThe `apiVersion`, `kind`, `metadata.name` and `metadata.generateName` are always accessible from the root of the object. No other metadata properties are accessible.\n\nOnly property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*` are accessible. Accessible property names are escaped according to the following rules when accessed in the expression: - '__' escapes to '__underscores__' - '.' escapes to '__dot__' - '-' escapes to '__dash__' - '/' escapes to '__slash__' - Property names that exactly match a CEL RESERVED keyword escape to '__{keyword}__'. The keywords are:\n\t \"true\", \"false\", \"null\", \"in\", \"as\", \"break\", \"const\", \"continue\", \"else\", \"for\", \"function\", \"if\",\n\t \"import\", \"let\", \"loop\", \"package\", \"namespace\", \"return\".\nExamples:\n - Expression accessing a property named \"namespace\": {\"Expression\": \"object.__namespace__ > 0\"}\n - Expression accessing a property named \"x-prop\": {\"Expression\": \"object.x__dash__prop > 0\"}\n - Expression accessing a property named \"redact__d\": {\"Expression\": \"object.redact__underscores__d > 0\"}\n\nEquality on arrays with list type of 'set' or 'map' ignores element order, i.e. [1, 2] == [2, 1]. Concatenation on arrays with x-kubernetes-list-type use the semantics of the list type:\n - 'set': `X + Y` performs a union where the array positions of all elements in `X` are preserved and\n non-intersecting elements in `Y` are appended, retaining their partial order.\n - 'map': `X + Y` performs a merge where the array positions of all keys in `X` are preserved but the values\n are overwritten by values in `Y` when the key sets of `X` and `Y` intersect. Elements in `Y` with\n non-intersecting keys are appended, retaining their partial order.\nRequired.", + "message": "Message represents the message displayed when validation fails. The message is required if the Expression contains line breaks. The message must not contain line breaks. If unset, the message is \"failed rule: {Rule}\". e.g. \"must be a URL with the host matching spec.host\" If the Expression contains line breaks. Message is required. The message must not contain line breaks. If unset, the message is \"failed Expression: {Expression}\".", + "reason": "Reason represents a machine-readable description of why this validation failed. If this is the first validation in the list to fail, this reason, as well as the corresponding HTTP response code, are used in the HTTP response to the client. The currently supported reasons are: \"Unauthorized\", \"Forbidden\", \"Invalid\", \"RequestEntityTooLarge\". If not set, StatusReasonInvalid is used in the response to the client.", + "messageExpression": "messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails. Since messageExpression is used as a failure message, it must evaluate to a string. If both message and messageExpression are present on a validation, then messageExpression will be used if validation fails. If messageExpression results in a runtime error, the runtime error is logged, and the validation failure message is produced as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset, and the fact that messageExpression produced an empty string/string with only spaces/string with line breaks will be logged. messageExpression has access to all the same variables as the `expression` except for 'authorizer' and 'authorizer.requestResource'. Example: \"object.x must be less than max (\"+string(params.max)+\")\"", +} + +func (Validation) SwaggerDoc() map[string]string { + return map_Validation +} + +var map_Variable = map[string]string{ + "": "Variable is the definition of a variable that is used for composition. A variable is defined as a named expression.", + "name": "Name is the name of the variable. The name must be a valid CEL identifier and unique among all variables. The variable can be accessed in other expressions through `variables` For example, if name is \"foo\", the variable will be available as `variables.foo`", + "expression": "Expression is the expression that will be evaluated as the value of the variable. The CEL expression has access to the same identifiers as the CEL expressions in Validation.", +} + +func (Variable) SwaggerDoc() map[string]string { + return map_Variable +} + var map_WebhookClientConfig = map[string]string{ "": "WebhookClientConfig contains the information to make a TLS connection with the webhook", "url": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go index 9c5299bdfa2d..4c10b1d1135a 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go @@ -22,11 +22,43 @@ limitations under the License. package v1beta1 import ( - v1 "k8s.io/api/admissionregistration/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuditAnnotation) DeepCopyInto(out *AuditAnnotation) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditAnnotation. +func (in *AuditAnnotation) DeepCopy() *AuditAnnotation { + if in == nil { + return nil + } + out := new(AuditAnnotation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExpressionWarning) DeepCopyInto(out *ExpressionWarning) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExpressionWarning. +func (in *ExpressionWarning) DeepCopy() *ExpressionWarning { + if in == nil { + return nil + } + out := new(ExpressionWarning) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MatchCondition) DeepCopyInto(out *MatchCondition) { *out = *in @@ -43,13 +75,58 @@ func (in *MatchCondition) DeepCopy() *MatchCondition { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MatchResources) DeepCopyInto(out *MatchResources) { + *out = *in + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ObjectSelector != nil { + in, out := &in.ObjectSelector, &out.ObjectSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ResourceRules != nil { + in, out := &in.ResourceRules, &out.ResourceRules + *out = make([]NamedRuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ExcludeResourceRules != nil { + in, out := &in.ExcludeResourceRules, &out.ExcludeResourceRules + *out = make([]NamedRuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MatchPolicy != nil { + in, out := &in.MatchPolicy, &out.MatchPolicy + *out = new(MatchPolicyType) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MatchResources. +func (in *MatchResources) DeepCopy() *MatchResources { + if in == nil { + return nil + } + out := new(MatchResources) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MutatingWebhook) DeepCopyInto(out *MutatingWebhook) { *out = *in in.ClientConfig.DeepCopyInto(&out.ClientConfig) if in.Rules != nil { in, out := &in.Rules, &out.Rules - *out = make([]v1.RuleWithOperations, len(*in)) + *out = make([]admissionregistrationv1.RuleWithOperations, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -66,12 +143,12 @@ func (in *MutatingWebhook) DeepCopyInto(out *MutatingWebhook) { } if in.NamespaceSelector != nil { in, out := &in.NamespaceSelector, &out.NamespaceSelector - *out = new(metav1.LabelSelector) + *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } if in.ObjectSelector != nil { in, out := &in.ObjectSelector, &out.ObjectSelector - *out = new(metav1.LabelSelector) + *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } if in.SideEffects != nil { @@ -178,6 +255,70 @@ func (in *MutatingWebhookConfigurationList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedRuleWithOperations) DeepCopyInto(out *NamedRuleWithOperations) { + *out = *in + if in.ResourceNames != nil { + in, out := &in.ResourceNames, &out.ResourceNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + in.RuleWithOperations.DeepCopyInto(&out.RuleWithOperations) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedRuleWithOperations. +func (in *NamedRuleWithOperations) DeepCopy() *NamedRuleWithOperations { + if in == nil { + return nil + } + out := new(NamedRuleWithOperations) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParamKind) DeepCopyInto(out *ParamKind) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParamKind. +func (in *ParamKind) DeepCopy() *ParamKind { + if in == nil { + return nil + } + out := new(ParamKind) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParamRef) DeepCopyInto(out *ParamRef) { + *out = *in + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ParameterNotFoundAction != nil { + in, out := &in.ParameterNotFoundAction, &out.ParameterNotFoundAction + *out = new(ParameterNotFoundActionType) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParamRef. +func (in *ParamRef) DeepCopy() *ParamRef { + if in == nil { + return nil + } + out := new(ParamRef) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceReference) DeepCopyInto(out *ServiceReference) { *out = *in @@ -204,13 +345,267 @@ func (in *ServiceReference) DeepCopy() *ServiceReference { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TypeChecking) DeepCopyInto(out *TypeChecking) { + *out = *in + if in.ExpressionWarnings != nil { + in, out := &in.ExpressionWarnings, &out.ExpressionWarnings + *out = make([]ExpressionWarning, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TypeChecking. +func (in *TypeChecking) DeepCopy() *TypeChecking { + if in == nil { + return nil + } + out := new(TypeChecking) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicy) DeepCopyInto(out *ValidatingAdmissionPolicy) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicy. +func (in *ValidatingAdmissionPolicy) DeepCopy() *ValidatingAdmissionPolicy { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingAdmissionPolicy) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicyBinding) DeepCopyInto(out *ValidatingAdmissionPolicyBinding) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicyBinding. +func (in *ValidatingAdmissionPolicyBinding) DeepCopy() *ValidatingAdmissionPolicyBinding { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicyBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingAdmissionPolicyBinding) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicyBindingList) DeepCopyInto(out *ValidatingAdmissionPolicyBindingList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ValidatingAdmissionPolicyBinding, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicyBindingList. +func (in *ValidatingAdmissionPolicyBindingList) DeepCopy() *ValidatingAdmissionPolicyBindingList { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicyBindingList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingAdmissionPolicyBindingList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicyBindingSpec) DeepCopyInto(out *ValidatingAdmissionPolicyBindingSpec) { + *out = *in + if in.ParamRef != nil { + in, out := &in.ParamRef, &out.ParamRef + *out = new(ParamRef) + (*in).DeepCopyInto(*out) + } + if in.MatchResources != nil { + in, out := &in.MatchResources, &out.MatchResources + *out = new(MatchResources) + (*in).DeepCopyInto(*out) + } + if in.ValidationActions != nil { + in, out := &in.ValidationActions, &out.ValidationActions + *out = make([]ValidationAction, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicyBindingSpec. +func (in *ValidatingAdmissionPolicyBindingSpec) DeepCopy() *ValidatingAdmissionPolicyBindingSpec { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicyBindingSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicyList) DeepCopyInto(out *ValidatingAdmissionPolicyList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ValidatingAdmissionPolicy, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicyList. +func (in *ValidatingAdmissionPolicyList) DeepCopy() *ValidatingAdmissionPolicyList { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicyList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingAdmissionPolicyList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicySpec) DeepCopyInto(out *ValidatingAdmissionPolicySpec) { + *out = *in + if in.ParamKind != nil { + in, out := &in.ParamKind, &out.ParamKind + *out = new(ParamKind) + **out = **in + } + if in.MatchConstraints != nil { + in, out := &in.MatchConstraints, &out.MatchConstraints + *out = new(MatchResources) + (*in).DeepCopyInto(*out) + } + if in.Validations != nil { + in, out := &in.Validations, &out.Validations + *out = make([]Validation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FailurePolicy != nil { + in, out := &in.FailurePolicy, &out.FailurePolicy + *out = new(FailurePolicyType) + **out = **in + } + if in.AuditAnnotations != nil { + in, out := &in.AuditAnnotations, &out.AuditAnnotations + *out = make([]AuditAnnotation, len(*in)) + copy(*out, *in) + } + if in.MatchConditions != nil { + in, out := &in.MatchConditions, &out.MatchConditions + *out = make([]MatchCondition, len(*in)) + copy(*out, *in) + } + if in.Variables != nil { + in, out := &in.Variables, &out.Variables + *out = make([]Variable, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicySpec. +func (in *ValidatingAdmissionPolicySpec) DeepCopy() *ValidatingAdmissionPolicySpec { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingAdmissionPolicyStatus) DeepCopyInto(out *ValidatingAdmissionPolicyStatus) { + *out = *in + if in.TypeChecking != nil { + in, out := &in.TypeChecking, &out.TypeChecking + *out = new(TypeChecking) + (*in).DeepCopyInto(*out) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingAdmissionPolicyStatus. +func (in *ValidatingAdmissionPolicyStatus) DeepCopy() *ValidatingAdmissionPolicyStatus { + if in == nil { + return nil + } + out := new(ValidatingAdmissionPolicyStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ValidatingWebhook) DeepCopyInto(out *ValidatingWebhook) { *out = *in in.ClientConfig.DeepCopyInto(&out.ClientConfig) if in.Rules != nil { in, out := &in.Rules, &out.Rules - *out = make([]v1.RuleWithOperations, len(*in)) + *out = make([]admissionregistrationv1.RuleWithOperations, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -227,12 +622,12 @@ func (in *ValidatingWebhook) DeepCopyInto(out *ValidatingWebhook) { } if in.NamespaceSelector != nil { in, out := &in.NamespaceSelector, &out.NamespaceSelector - *out = new(metav1.LabelSelector) + *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } if in.ObjectSelector != nil { in, out := &in.ObjectSelector, &out.ObjectSelector - *out = new(metav1.LabelSelector) + *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } if in.SideEffects != nil { @@ -334,6 +729,43 @@ func (in *ValidatingWebhookConfigurationList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Validation) DeepCopyInto(out *Validation) { + *out = *in + if in.Reason != nil { + in, out := &in.Reason, &out.Reason + *out = new(v1.StatusReason) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Validation. +func (in *Validation) DeepCopy() *Validation { + if in == nil { + return nil + } + out := new(Validation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Variable) DeepCopyInto(out *Variable) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Variable. +func (in *Variable) DeepCopy() *Variable { + if in == nil { + return nil + } + out := new(Variable) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *WebhookClientConfig) DeepCopyInto(out *WebhookClientConfig) { *out = *in diff --git a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go index 09a92f47689e..c1be5122a879 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/cluster-autoscaler/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go @@ -73,6 +73,78 @@ func (in *MutatingWebhookConfigurationList) APILifecycleRemoved() (major, minor return 1, 22 } +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *ValidatingAdmissionPolicy) APILifecycleIntroduced() (major, minor int) { + return 1, 28 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *ValidatingAdmissionPolicy) APILifecycleDeprecated() (major, minor int) { + return 1, 31 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *ValidatingAdmissionPolicy) APILifecycleRemoved() (major, minor int) { + return 1, 34 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *ValidatingAdmissionPolicyBinding) APILifecycleIntroduced() (major, minor int) { + return 1, 28 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *ValidatingAdmissionPolicyBinding) APILifecycleDeprecated() (major, minor int) { + return 1, 31 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *ValidatingAdmissionPolicyBinding) APILifecycleRemoved() (major, minor int) { + return 1, 34 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *ValidatingAdmissionPolicyBindingList) APILifecycleIntroduced() (major, minor int) { + return 1, 28 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *ValidatingAdmissionPolicyBindingList) APILifecycleDeprecated() (major, minor int) { + return 1, 31 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *ValidatingAdmissionPolicyBindingList) APILifecycleRemoved() (major, minor int) { + return 1, 34 +} + +// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. +func (in *ValidatingAdmissionPolicyList) APILifecycleIntroduced() (major, minor int) { + return 1, 28 +} + +// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. +func (in *ValidatingAdmissionPolicyList) APILifecycleDeprecated() (major, minor int) { + return 1, 31 +} + +// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. +// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. +func (in *ValidatingAdmissionPolicyList) APILifecycleRemoved() (major, minor int) { + return 1, 34 +} + // APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. // It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. func (in *ValidatingWebhookConfiguration) APILifecycleIntroduced() (major, minor int) { diff --git a/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/generated.proto index aa08b4978c24..a09af750ba36 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/generated.proto @@ -71,7 +71,7 @@ message APIResourceDiscovery { // responseKind describes the group, version, and kind of the serialization schema for the object type this endpoint typically returns. // APIs may return other objects types at their discretion, such as error conditions, requests for alternate representations, or other operation specific behavior. - // This value will be null if an APIService reports subresources but supports no operations on the parent resource + // This value will be null or empty if an APIService reports subresources but supports no operations on the parent resource optional k8s.io.apimachinery.pkg.apis.meta.v1.GroupVersionKind responseKind = 2; // scope indicates the scope of a resource, either Cluster or Namespaced @@ -111,7 +111,7 @@ message APISubresourceDiscovery { optional string subresource = 1; // responseKind describes the group, version, and kind of the serialization schema for the object type this endpoint typically returns. - // Some subresources do not return normal resources, these will have null return types. + // Some subresources do not return normal resources, these will have null or empty return types. optional k8s.io.apimachinery.pkg.apis.meta.v1.GroupVersionKind responseKind = 2; // acceptedTypes describes the kinds that this endpoint accepts. diff --git a/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/types.go b/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/types.go index 1aff3e3702f0..834293773047 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/apidiscovery/v2beta1/types.go @@ -92,7 +92,7 @@ type APIResourceDiscovery struct { Resource string `json:"resource" protobuf:"bytes,1,opt,name=resource"` // responseKind describes the group, version, and kind of the serialization schema for the object type this endpoint typically returns. // APIs may return other objects types at their discretion, such as error conditions, requests for alternate representations, or other operation specific behavior. - // This value will be null if an APIService reports subresources but supports no operations on the parent resource + // This value will be null or empty if an APIService reports subresources but supports no operations on the parent resource ResponseKind *v1.GroupVersionKind `json:"responseKind,omitempty" protobuf:"bytes,2,opt,name=responseKind"` // scope indicates the scope of a resource, either Cluster or Namespaced Scope ResourceScope `json:"scope" protobuf:"bytes,3,opt,name=scope"` @@ -141,7 +141,7 @@ type APISubresourceDiscovery struct { // for this resource across all versions. Subresource string `json:"subresource" protobuf:"bytes,1,opt,name=subresource"` // responseKind describes the group, version, and kind of the serialization schema for the object type this endpoint typically returns. - // Some subresources do not return normal resources, these will have null return types. + // Some subresources do not return normal resources, these will have null or empty return types. ResponseKind *v1.GroupVersionKind `json:"responseKind,omitempty" protobuf:"bytes,2,opt,name=responseKind"` // acceptedTypes describes the kinds that this endpoint accepts. // Subresources may accept the standard content types or define diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go index faf8cd24aff9..c267a5febded 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go @@ -6409,933 +6409,934 @@ func init() { } var fileDescriptor_83c10c24ec417dc9 = []byte{ - // 14814 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x70, 0x5c, 0xd9, - 0x75, 0x18, 0xac, 0xd7, 0x8d, 0xad, 0x0f, 0xf6, 0x0b, 0x92, 0x03, 0x62, 0x48, 0x36, 0xe7, 0xcd, - 0x0c, 0x87, 0xb3, 0x81, 0xe2, 0x2c, 0xd2, 0x68, 0x46, 0x1a, 0x0b, 0x2b, 0x89, 0x21, 0x00, 0xf6, - 0xdc, 0x06, 0x49, 0x69, 0x34, 0x52, 0xe9, 0xa1, 0xfb, 0x02, 0x78, 0x42, 0xe3, 0xbd, 0x9e, 0xf7, - 0x5e, 0x83, 0x04, 0x3f, 0xa9, 0xec, 0x4f, 0xfe, 0xbc, 0xc8, 0xf6, 0x97, 0x52, 0xa5, 0x9c, 0xa5, - 0x64, 0x97, 0x2b, 0x65, 0x3b, 0xb6, 0x15, 0xc5, 0x49, 0x14, 0x39, 0xb6, 0x63, 0x79, 0xcb, 0x56, - 0xb1, 0x53, 0x29, 0xc7, 0x71, 0x55, 0x2c, 0x57, 0xb9, 0x02, 0x5b, 0x74, 0xaa, 0x1c, 0x57, 0x25, - 0xb6, 0xb3, 0xfc, 0x48, 0x10, 0x27, 0x4e, 0xdd, 0xf5, 0xdd, 0xfb, 0x96, 0xee, 0x06, 0x07, 0xc4, - 0x8c, 0x54, 0xf3, 0xaf, 0xfb, 0x9c, 0x73, 0xcf, 0xbd, 0xef, 0xae, 0xe7, 0x9e, 0x73, 0xee, 0x39, - 0xf0, 0xca, 0xf6, 0x4b, 0xe1, 0xb4, 0xeb, 0x5f, 0xda, 0x6e, 0xad, 0x93, 0xc0, 0x23, 0x11, 0x09, - 0x2f, 0xed, 0x12, 0xaf, 0xee, 0x07, 0x97, 0x04, 0xc2, 0x69, 0xba, 0x97, 0x6a, 0x7e, 0x40, 0x2e, - 0xed, 0x5e, 0xbe, 0xb4, 0x49, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0x4f, 0x37, 0x03, 0x3f, 0xf2, 0x11, - 0xe2, 0x34, 0xd3, 0x4e, 0xd3, 0x9d, 0xa6, 0x34, 0xd3, 0xbb, 0x97, 0xa7, 0x9e, 0xdd, 0x74, 0xa3, - 0xad, 0xd6, 0xfa, 0x74, 0xcd, 0xdf, 0xb9, 0xb4, 0xe9, 0x6f, 0xfa, 0x97, 0x18, 0xe9, 0x7a, 0x6b, - 0x83, 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0xce, 0x62, 0xea, 0x85, 0xb8, 0x9a, 0x1d, 0xa7, 0xb6, 0xe5, - 0x7a, 0x24, 0xd8, 0xbb, 0xd4, 0xdc, 0xde, 0x64, 0xf5, 0x06, 0x24, 0xf4, 0x5b, 0x41, 0x8d, 0x24, - 0x2b, 0x6e, 0x5b, 0x2a, 0xbc, 0xb4, 0x43, 0x22, 0x27, 0xa3, 0xb9, 0x53, 0x97, 0xf2, 0x4a, 0x05, + // 14822 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x70, 0x24, 0xc9, + 0x75, 0x18, 0xcc, 0xea, 0xc6, 0xd5, 0x0f, 0x77, 0x62, 0x0e, 0x0c, 0x76, 0x66, 0x7a, 0xb6, 0x76, + 0x77, 0x76, 0xf6, 0xc2, 0x70, 0xf6, 0x20, 0x97, 0xbb, 0xe4, 0x8a, 0x38, 0x67, 0xb0, 0x03, 0x60, + 0x7a, 0xb3, 0x31, 0x33, 0xe4, 0x72, 0xc9, 0x60, 0xa1, 0x3b, 0x01, 0x14, 0xd1, 0xa8, 0xea, 0xad, + 0xaa, 0xc6, 0x0c, 0xe6, 0x23, 0x43, 0x12, 0xf5, 0xe9, 0xa0, 0xa4, 0xef, 0x0b, 0xc6, 0x17, 0xfa, + 0x8e, 0xa0, 0x14, 0x8a, 0x2f, 0x24, 0x59, 0x87, 0x69, 0xd9, 0xa6, 0x29, 0x4b, 0xb2, 0xa8, 0xcb, + 0x57, 0x58, 0x72, 0x38, 0x64, 0x59, 0x11, 0x16, 0x15, 0xa1, 0x30, 0x24, 0x8e, 0x1c, 0x21, 0x2b, + 0xc2, 0x96, 0xe4, 0xe3, 0x87, 0x0d, 0xcb, 0x96, 0x23, 0xcf, 0xca, 0xac, 0xa3, 0xbb, 0x31, 0x8b, + 0x01, 0x97, 0x8c, 0xfd, 0xd7, 0xfd, 0xde, 0xcb, 0x97, 0x59, 0x79, 0xbe, 0x7c, 0xef, 0xe5, 0x7b, + 0xf0, 0xea, 0xf6, 0xcb, 0xe1, 0xb4, 0xeb, 0x5f, 0xde, 0x6e, 0xad, 0x93, 0xc0, 0x23, 0x11, 0x09, + 0x2f, 0xef, 0x12, 0xaf, 0xee, 0x07, 0x97, 0x05, 0xc2, 0x69, 0xba, 0x97, 0x6b, 0x7e, 0x40, 0x2e, + 0xef, 0x5e, 0xb9, 0xbc, 0x49, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0x4f, 0x37, 0x03, 0x3f, 0xf2, 0x11, + 0xe2, 0x34, 0xd3, 0x4e, 0xd3, 0x9d, 0xa6, 0x34, 0xd3, 0xbb, 0x57, 0xa6, 0x9e, 0xdb, 0x74, 0xa3, + 0xad, 0xd6, 0xfa, 0x74, 0xcd, 0xdf, 0xb9, 0xbc, 0xe9, 0x6f, 0xfa, 0x97, 0x19, 0xe9, 0x7a, 0x6b, + 0x83, 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0xce, 0x62, 0xea, 0xc5, 0xb8, 0x9a, 0x1d, 0xa7, 0xb6, 0xe5, + 0x7a, 0x24, 0xd8, 0xbb, 0xdc, 0xdc, 0xde, 0x64, 0xf5, 0x06, 0x24, 0xf4, 0x5b, 0x41, 0x8d, 0x24, + 0x2b, 0x6e, 0x5b, 0x2a, 0xbc, 0xbc, 0x43, 0x22, 0x27, 0xa3, 0xb9, 0x53, 0x97, 0xf3, 0x4a, 0x05, 0x2d, 0x2f, 0x72, 0x77, 0xd2, 0xd5, 0x7c, 0xa0, 0x53, 0x81, 0xb0, 0xb6, 0x45, 0x76, 0x9c, 0x54, - 0xb9, 0xe7, 0xf3, 0xca, 0xb5, 0x22, 0xb7, 0x71, 0xc9, 0xf5, 0xa2, 0x30, 0x0a, 0x92, 0x85, 0xec, - 0x6f, 0x58, 0x70, 0x7e, 0xe6, 0x56, 0x75, 0xa1, 0xe1, 0x84, 0x91, 0x5b, 0x9b, 0x6d, 0xf8, 0xb5, - 0xed, 0x6a, 0xe4, 0x07, 0xe4, 0xa6, 0xdf, 0x68, 0xed, 0x90, 0x2a, 0xeb, 0x08, 0xf4, 0x0c, 0x0c, - 0xec, 0xb2, 0xff, 0x4b, 0xf3, 0x93, 0xd6, 0x79, 0xeb, 0x62, 0x69, 0x76, 0xec, 0x37, 0xf6, 0xcb, - 0xef, 0xbb, 0xb7, 0x5f, 0x1e, 0xb8, 0x29, 0xe0, 0x58, 0x51, 0xa0, 0x0b, 0xd0, 0xb7, 0x11, 0xae, + 0xb9, 0x17, 0xf2, 0xca, 0xb5, 0x22, 0xb7, 0x71, 0xd9, 0xf5, 0xa2, 0x30, 0x0a, 0x92, 0x85, 0xec, + 0xaf, 0x5b, 0x70, 0x61, 0xe6, 0x76, 0x75, 0xa1, 0xe1, 0x84, 0x91, 0x5b, 0x9b, 0x6d, 0xf8, 0xb5, + 0xed, 0x6a, 0xe4, 0x07, 0xe4, 0x96, 0xdf, 0x68, 0xed, 0x90, 0x2a, 0xeb, 0x08, 0xf4, 0x2c, 0x0c, + 0xec, 0xb2, 0xff, 0x4b, 0xf3, 0x93, 0xd6, 0x05, 0xeb, 0x52, 0x69, 0x76, 0xec, 0xb7, 0xf6, 0xcb, + 0xef, 0xbb, 0xbf, 0x5f, 0x1e, 0xb8, 0x25, 0xe0, 0x58, 0x51, 0xa0, 0x8b, 0xd0, 0xb7, 0x11, 0xae, 0xed, 0x35, 0xc9, 0x64, 0x81, 0xd1, 0x8e, 0x08, 0xda, 0xbe, 0xc5, 0x2a, 0x85, 0x62, 0x81, 0x45, - 0x97, 0xa0, 0xd4, 0x74, 0x82, 0xc8, 0x8d, 0x5c, 0xdf, 0x9b, 0x2c, 0x9e, 0xb7, 0x2e, 0xf6, 0xce, - 0x8e, 0x0b, 0xd2, 0x52, 0x45, 0x22, 0x70, 0x4c, 0x43, 0x9b, 0x11, 0x10, 0xa7, 0x7e, 0xdd, 0x6b, - 0xec, 0x4d, 0xf6, 0x9c, 0xb7, 0x2e, 0x0e, 0xc4, 0xcd, 0xc0, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0xa5, - 0x02, 0x0c, 0xcc, 0x6c, 0x6c, 0xb8, 0x9e, 0x1b, 0xed, 0xa1, 0x9b, 0x30, 0xe4, 0xf9, 0x75, 0x22, - 0xff, 0xb3, 0xaf, 0x18, 0x7c, 0xee, 0xfc, 0x74, 0x7a, 0x2a, 0x4d, 0xaf, 0x6a, 0x74, 0xb3, 0x63, - 0xf7, 0xf6, 0xcb, 0x43, 0x3a, 0x04, 0x1b, 0x7c, 0x10, 0x86, 0xc1, 0xa6, 0x5f, 0x57, 0x6c, 0x0b, - 0x8c, 0x6d, 0x39, 0x8b, 0x6d, 0x25, 0x26, 0x9b, 0x1d, 0xbd, 0xb7, 0x5f, 0x1e, 0xd4, 0x00, 0x58, - 0x67, 0x82, 0xd6, 0x61, 0x94, 0xfe, 0xf5, 0x22, 0x57, 0xf1, 0x2d, 0x32, 0xbe, 0x8f, 0xe6, 0xf1, - 0xd5, 0x48, 0x67, 0x27, 0xee, 0xed, 0x97, 0x47, 0x13, 0x40, 0x9c, 0x64, 0x68, 0xdf, 0x85, 0x91, - 0x99, 0x28, 0x72, 0x6a, 0x5b, 0xa4, 0xce, 0x47, 0x10, 0xbd, 0x00, 0x3d, 0x9e, 0xb3, 0x43, 0xc4, - 0xf8, 0x9e, 0x17, 0x1d, 0xdb, 0xb3, 0xea, 0xec, 0x90, 0x83, 0xfd, 0xf2, 0xd8, 0x0d, 0xcf, 0x7d, - 0xab, 0x25, 0x66, 0x05, 0x85, 0x61, 0x46, 0x8d, 0x9e, 0x03, 0xa8, 0x93, 0x5d, 0xb7, 0x46, 0x2a, - 0x4e, 0xb4, 0x25, 0xc6, 0x1b, 0x89, 0xb2, 0x30, 0xaf, 0x30, 0x58, 0xa3, 0xb2, 0xef, 0x40, 0x69, + 0x97, 0xa1, 0xd4, 0x74, 0x82, 0xc8, 0x8d, 0x5c, 0xdf, 0x9b, 0x2c, 0x5e, 0xb0, 0x2e, 0xf5, 0xce, + 0x8e, 0x0b, 0xd2, 0x52, 0x45, 0x22, 0x70, 0x4c, 0x43, 0x9b, 0x11, 0x10, 0xa7, 0x7e, 0xc3, 0x6b, + 0xec, 0x4d, 0xf6, 0x5c, 0xb0, 0x2e, 0x0d, 0xc4, 0xcd, 0xc0, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0xa5, + 0x02, 0x0c, 0xcc, 0x6c, 0x6c, 0xb8, 0x9e, 0x1b, 0xed, 0xa1, 0x5b, 0x30, 0xe4, 0xf9, 0x75, 0x22, + 0xff, 0xb3, 0xaf, 0x18, 0x7c, 0xfe, 0xc2, 0x74, 0x7a, 0x2a, 0x4d, 0xaf, 0x6a, 0x74, 0xb3, 0x63, + 0xf7, 0xf7, 0xcb, 0x43, 0x3a, 0x04, 0x1b, 0x7c, 0x10, 0x86, 0xc1, 0xa6, 0x5f, 0x57, 0x6c, 0x0b, + 0x8c, 0x6d, 0x39, 0x8b, 0x6d, 0x25, 0x26, 0x9b, 0x1d, 0xbd, 0xbf, 0x5f, 0x1e, 0xd4, 0x00, 0x58, + 0x67, 0x82, 0xd6, 0x61, 0x94, 0xfe, 0xf5, 0x22, 0x57, 0xf1, 0x2d, 0x32, 0xbe, 0x8f, 0xe5, 0xf1, + 0xd5, 0x48, 0x67, 0x27, 0xee, 0xef, 0x97, 0x47, 0x13, 0x40, 0x9c, 0x64, 0x68, 0xdf, 0x83, 0x91, + 0x99, 0x28, 0x72, 0x6a, 0x5b, 0xa4, 0xce, 0x47, 0x10, 0xbd, 0x08, 0x3d, 0x9e, 0xb3, 0x43, 0xc4, + 0xf8, 0x5e, 0x10, 0x1d, 0xdb, 0xb3, 0xea, 0xec, 0x90, 0x83, 0xfd, 0xf2, 0xd8, 0x4d, 0xcf, 0x7d, + 0xbb, 0x25, 0x66, 0x05, 0x85, 0x61, 0x46, 0x8d, 0x9e, 0x07, 0xa8, 0x93, 0x5d, 0xb7, 0x46, 0x2a, + 0x4e, 0xb4, 0x25, 0xc6, 0x1b, 0x89, 0xb2, 0x30, 0xaf, 0x30, 0x58, 0xa3, 0xb2, 0xef, 0x42, 0x69, 0x66, 0xd7, 0x77, 0xeb, 0x15, 0xbf, 0x1e, 0xa2, 0x6d, 0x18, 0x6d, 0x06, 0x64, 0x83, 0x04, 0x0a, - 0x34, 0x69, 0x9d, 0x2f, 0x5e, 0x1c, 0x7c, 0xee, 0x62, 0xe6, 0xc7, 0x9a, 0xa4, 0x0b, 0x5e, 0x14, - 0xec, 0xcd, 0x3e, 0x24, 0xea, 0x1b, 0x4d, 0x60, 0x71, 0x92, 0xb3, 0xfd, 0xcf, 0x0b, 0x70, 0x72, - 0xe6, 0x6e, 0x2b, 0x20, 0xf3, 0x6e, 0xb8, 0x9d, 0x9c, 0xe1, 0x75, 0x37, 0xdc, 0x5e, 0x8d, 0x7b, - 0x40, 0x4d, 0xad, 0x79, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x0b, 0xfd, 0xf4, 0xf7, 0x0d, 0xbc, 0x24, - 0x3e, 0x79, 0x42, 0x10, 0x0f, 0xce, 0x3b, 0x91, 0x33, 0xcf, 0x51, 0x58, 0xd2, 0xa0, 0x15, 0x18, - 0xac, 0xb1, 0x05, 0xb9, 0xb9, 0xe2, 0xd7, 0x09, 0x1b, 0xcc, 0xd2, 0xec, 0xd3, 0x94, 0x7c, 0x2e, - 0x06, 0x1f, 0xec, 0x97, 0x27, 0x79, 0xdb, 0x04, 0x0b, 0x0d, 0x87, 0xf5, 0xf2, 0xc8, 0x56, 0xeb, - 0xab, 0x87, 0x71, 0x82, 0x8c, 0xb5, 0x75, 0x51, 0x5b, 0x2a, 0xbd, 0x6c, 0xa9, 0x0c, 0x65, 0x2f, - 0x13, 0x74, 0x19, 0x7a, 0xb6, 0x5d, 0xaf, 0x3e, 0xd9, 0xc7, 0x78, 0x9d, 0xa5, 0x63, 0x7e, 0xcd, - 0xf5, 0xea, 0x07, 0xfb, 0xe5, 0x71, 0xa3, 0x39, 0x14, 0x88, 0x19, 0xa9, 0xfd, 0xdf, 0x2c, 0x28, - 0x33, 0xdc, 0xa2, 0xdb, 0x20, 0x15, 0x12, 0x84, 0x6e, 0x18, 0x11, 0x2f, 0x32, 0x3a, 0xf4, 0x39, - 0x80, 0x90, 0xd4, 0x02, 0x12, 0x69, 0x5d, 0xaa, 0x26, 0x46, 0x55, 0x61, 0xb0, 0x46, 0x45, 0x37, - 0x84, 0x70, 0xcb, 0x09, 0xd8, 0xfc, 0x12, 0x1d, 0xab, 0x36, 0x84, 0xaa, 0x44, 0xe0, 0x98, 0xc6, - 0xd8, 0x10, 0x8a, 0x9d, 0x36, 0x04, 0xf4, 0x11, 0x18, 0x8d, 0x2b, 0x0b, 0x9b, 0x4e, 0x4d, 0x76, - 0x20, 0x5b, 0x32, 0x55, 0x13, 0x85, 0x93, 0xb4, 0xf6, 0xdf, 0xb1, 0xc4, 0xe4, 0xa1, 0x5f, 0xfd, - 0x2e, 0xff, 0x56, 0xfb, 0x17, 0x2d, 0xe8, 0x9f, 0x75, 0xbd, 0xba, 0xeb, 0x6d, 0xa2, 0x4f, 0xc3, - 0x00, 0x3d, 0x9b, 0xea, 0x4e, 0xe4, 0x88, 0x7d, 0xef, 0xfd, 0xda, 0xda, 0x52, 0x47, 0xc5, 0x74, - 0x73, 0x7b, 0x93, 0x02, 0xc2, 0x69, 0x4a, 0x4d, 0x57, 0xdb, 0xf5, 0xf5, 0xcf, 0x90, 0x5a, 0xb4, - 0x42, 0x22, 0x27, 0xfe, 0x9c, 0x18, 0x86, 0x15, 0x57, 0x74, 0x0d, 0xfa, 0x22, 0x27, 0xd8, 0x24, - 0x91, 0xd8, 0x00, 0x33, 0x37, 0x2a, 0x5e, 0x12, 0xd3, 0x15, 0x49, 0xbc, 0x1a, 0x89, 0x8f, 0x85, - 0x35, 0x56, 0x14, 0x0b, 0x16, 0xf6, 0xff, 0xee, 0x87, 0xd3, 0x73, 0xd5, 0xa5, 0x9c, 0x79, 0x75, - 0x01, 0xfa, 0xea, 0x81, 0xbb, 0x4b, 0x02, 0xd1, 0xcf, 0x8a, 0xcb, 0x3c, 0x83, 0x62, 0x81, 0x45, - 0x2f, 0xc1, 0x10, 0x3f, 0x90, 0xae, 0x3a, 0x5e, 0xbd, 0x21, 0xbb, 0xf8, 0x84, 0xa0, 0x1e, 0xba, - 0xa9, 0xe1, 0xb0, 0x41, 0x79, 0xc8, 0x49, 0x75, 0x21, 0xb1, 0x18, 0xf3, 0x0e, 0xbb, 0x2f, 0x58, - 0x30, 0xc6, 0xab, 0x99, 0x89, 0xa2, 0xc0, 0x5d, 0x6f, 0x45, 0x24, 0x9c, 0xec, 0x65, 0x3b, 0xdd, - 0x5c, 0x56, 0x6f, 0xe5, 0xf6, 0xc0, 0xf4, 0xcd, 0x04, 0x17, 0xbe, 0x09, 0x4e, 0x8a, 0x7a, 0xc7, - 0x92, 0x68, 0x9c, 0xaa, 0x16, 0x7d, 0xb7, 0x05, 0x53, 0x35, 0xdf, 0x8b, 0x02, 0xbf, 0xd1, 0x20, - 0x41, 0xa5, 0xb5, 0xde, 0x70, 0xc3, 0x2d, 0x3e, 0x4f, 0x31, 0xd9, 0x60, 0x3b, 0x41, 0xce, 0x18, - 0x2a, 0x22, 0x31, 0x86, 0xe7, 0xee, 0xed, 0x97, 0xa7, 0xe6, 0x72, 0x59, 0xe1, 0x36, 0xd5, 0xa0, - 0x6d, 0x40, 0xf4, 0x28, 0xad, 0x46, 0xce, 0x26, 0x89, 0x2b, 0xef, 0xef, 0xbe, 0xf2, 0x53, 0xf7, - 0xf6, 0xcb, 0x68, 0x35, 0xc5, 0x02, 0x67, 0xb0, 0x45, 0x6f, 0xc1, 0x09, 0x0a, 0x4d, 0x7d, 0xeb, - 0x40, 0xf7, 0xd5, 0x4d, 0xde, 0xdb, 0x2f, 0x9f, 0x58, 0xcd, 0x60, 0x82, 0x33, 0x59, 0xa3, 0xef, - 0xb2, 0xe0, 0x74, 0xfc, 0xf9, 0x0b, 0x77, 0x9a, 0x8e, 0x57, 0x8f, 0x2b, 0x2e, 0x75, 0x5f, 0x31, - 0xdd, 0x93, 0x4f, 0xcf, 0xe5, 0x71, 0xc2, 0xf9, 0x95, 0x20, 0x0f, 0x26, 0x68, 0xd3, 0x92, 0x75, - 0x43, 0xf7, 0x75, 0x3f, 0x74, 0x6f, 0xbf, 0x3c, 0xb1, 0x9a, 0xe6, 0x81, 0xb3, 0x18, 0x4f, 0xcd, - 0xc1, 0xc9, 0xcc, 0xd9, 0x89, 0xc6, 0xa0, 0xb8, 0x4d, 0xb8, 0xd4, 0x55, 0xc2, 0xf4, 0x27, 0x3a, - 0x01, 0xbd, 0xbb, 0x4e, 0xa3, 0x25, 0x16, 0x26, 0xe6, 0x7f, 0x5e, 0x2e, 0xbc, 0x64, 0xd9, 0xff, - 0xa2, 0x08, 0xa3, 0x73, 0xd5, 0xa5, 0xfb, 0x5a, 0xf5, 0xfa, 0xb1, 0x57, 0x68, 0x7b, 0xec, 0xc5, - 0x87, 0x68, 0x31, 0xf7, 0x10, 0xfd, 0xce, 0x8c, 0x25, 0xdb, 0xc3, 0x96, 0xec, 0x87, 0x72, 0x96, - 0xec, 0x11, 0x2f, 0xd4, 0xdd, 0x9c, 0x59, 0xdb, 0xcb, 0x06, 0x30, 0x53, 0x42, 0x5a, 0xf6, 0x6b, - 0x4e, 0x23, 0xb9, 0xd5, 0x1e, 0x72, 0xea, 0x1e, 0xcd, 0x38, 0xd6, 0x60, 0x68, 0xce, 0x69, 0x3a, - 0xeb, 0x6e, 0xc3, 0x8d, 0x5c, 0x12, 0xa2, 0x27, 0xa0, 0xe8, 0xd4, 0xeb, 0x4c, 0xba, 0x2b, 0xcd, - 0x9e, 0xbc, 0xb7, 0x5f, 0x2e, 0xce, 0xd4, 0xa9, 0x98, 0x01, 0x8a, 0x6a, 0x0f, 0x53, 0x0a, 0xf4, - 0x14, 0xf4, 0xd4, 0x03, 0xbf, 0x39, 0x59, 0x60, 0x94, 0x74, 0x95, 0xf7, 0xcc, 0x07, 0x7e, 0x33, - 0x41, 0xca, 0x68, 0xec, 0x5f, 0x2f, 0xc0, 0x99, 0x39, 0xd2, 0xdc, 0x5a, 0xac, 0xe6, 0x9c, 0x17, - 0x17, 0x61, 0x60, 0xc7, 0xf7, 0xdc, 0xc8, 0x0f, 0x42, 0x51, 0x35, 0x9b, 0x11, 0x2b, 0x02, 0x86, - 0x15, 0x16, 0x9d, 0x87, 0x9e, 0x66, 0x2c, 0xc4, 0x0e, 0x49, 0x01, 0x98, 0x89, 0xaf, 0x0c, 0x43, - 0x29, 0x5a, 0x21, 0x09, 0xc4, 0x8c, 0x51, 0x14, 0x37, 0x42, 0x12, 0x60, 0x86, 0x89, 0x25, 0x01, - 0x2a, 0x23, 0x88, 0x13, 0x21, 0x21, 0x09, 0x50, 0x0c, 0xd6, 0xa8, 0x50, 0x05, 0x4a, 0x61, 0x62, - 0x64, 0xbb, 0x5a, 0x9a, 0xc3, 0x4c, 0x54, 0x50, 0x23, 0x19, 0x33, 0x31, 0x4e, 0xb0, 0xbe, 0x8e, - 0xa2, 0xc2, 0xd7, 0x0b, 0x80, 0x78, 0x17, 0x7e, 0x8b, 0x75, 0xdc, 0x8d, 0x74, 0xc7, 0x75, 0xbf, - 0x24, 0x8e, 0xaa, 0xf7, 0xfe, 0xbb, 0x05, 0x67, 0xe6, 0x5c, 0xaf, 0x4e, 0x82, 0x9c, 0x09, 0xf8, - 0x60, 0xee, 0xce, 0x87, 0x13, 0x52, 0x8c, 0x29, 0xd6, 0x73, 0x04, 0x53, 0xcc, 0xfe, 0x33, 0x0b, - 0x10, 0xff, 0xec, 0x77, 0xdd, 0xc7, 0xde, 0x48, 0x7f, 0xec, 0x11, 0x4c, 0x0b, 0xfb, 0xef, 0x5b, - 0x30, 0x38, 0xd7, 0x70, 0xdc, 0x1d, 0xf1, 0xa9, 0x73, 0x30, 0x2e, 0x15, 0x45, 0x0c, 0xac, 0xc9, - 0xfe, 0x74, 0x73, 0x1b, 0xc7, 0x49, 0x24, 0x4e, 0xd3, 0xa3, 0x4f, 0xc0, 0x69, 0x03, 0xb8, 0x46, - 0x76, 0x9a, 0x0d, 0x27, 0xd2, 0x6f, 0x05, 0xec, 0xf4, 0xc7, 0x79, 0x44, 0x38, 0xbf, 0xbc, 0xbd, - 0x0c, 0x23, 0x73, 0x0d, 0x97, 0x78, 0xd1, 0x52, 0x65, 0xce, 0xf7, 0x36, 0xdc, 0x4d, 0xf4, 0x32, - 0x8c, 0x44, 0xee, 0x0e, 0xf1, 0x5b, 0x51, 0x95, 0xd4, 0x7c, 0x8f, 0xdd, 0xb5, 0xad, 0x8b, 0xbd, - 0xb3, 0xe8, 0xde, 0x7e, 0x79, 0x64, 0xcd, 0xc0, 0xe0, 0x04, 0xa5, 0xfd, 0xfb, 0x74, 0xc4, 0xfd, - 0x9d, 0xa6, 0xef, 0x11, 0x2f, 0x9a, 0xf3, 0xbd, 0x3a, 0xd7, 0xc9, 0xbc, 0x0c, 0x3d, 0x11, 0x1d, - 0x41, 0xfe, 0xe5, 0x17, 0xe4, 0xd2, 0xa6, 0xe3, 0x76, 0xb0, 0x5f, 0x3e, 0x95, 0x2e, 0xc1, 0x46, - 0x96, 0x95, 0x41, 0x1f, 0x82, 0xbe, 0x30, 0x72, 0xa2, 0x56, 0x28, 0x3e, 0xf5, 0x11, 0x39, 0xfe, - 0x55, 0x06, 0x3d, 0xd8, 0x2f, 0x8f, 0xaa, 0x62, 0x1c, 0x84, 0x45, 0x01, 0xf4, 0x24, 0xf4, 0xef, - 0x90, 0x30, 0x74, 0x36, 0xe5, 0xf9, 0x3d, 0x2a, 0xca, 0xf6, 0xaf, 0x70, 0x30, 0x96, 0x78, 0xf4, - 0x28, 0xf4, 0x92, 0x20, 0xf0, 0x03, 0xb1, 0xab, 0x0c, 0x0b, 0xc2, 0xde, 0x05, 0x0a, 0xc4, 0x1c, - 0x67, 0xff, 0x1b, 0x0b, 0x46, 0x55, 0x5b, 0x79, 0x5d, 0xc7, 0x70, 0x6f, 0x7a, 0x03, 0xa0, 0x26, - 0x3f, 0x30, 0x64, 0xe7, 0xdd, 0xe0, 0x73, 0x17, 0x32, 0x45, 0x8b, 0x54, 0x37, 0xc6, 0x9c, 0x15, - 0x28, 0xc4, 0x1a, 0x37, 0xfb, 0x57, 0x2c, 0x98, 0x48, 0x7c, 0xd1, 0xb2, 0x1b, 0x46, 0xe8, 0xcd, - 0xd4, 0x57, 0x4d, 0x77, 0xf7, 0x55, 0xb4, 0x34, 0xfb, 0x26, 0xb5, 0xf8, 0x24, 0x44, 0xfb, 0xa2, - 0xab, 0xd0, 0xeb, 0x46, 0x64, 0x47, 0x7e, 0xcc, 0xa3, 0x6d, 0x3f, 0x86, 0xb7, 0x2a, 0x1e, 0x91, - 0x25, 0x5a, 0x12, 0x73, 0x06, 0xf6, 0xaf, 0x17, 0xa1, 0xc4, 0xa7, 0xed, 0x8a, 0xd3, 0x3c, 0x86, - 0xb1, 0x78, 0x1a, 0x4a, 0xee, 0xce, 0x4e, 0x2b, 0x72, 0xd6, 0xc5, 0x01, 0x34, 0xc0, 0x37, 0x83, - 0x25, 0x09, 0xc4, 0x31, 0x1e, 0x2d, 0x41, 0x0f, 0x6b, 0x0a, 0xff, 0xca, 0x27, 0xb2, 0xbf, 0x52, - 0xb4, 0x7d, 0x7a, 0xde, 0x89, 0x1c, 0x2e, 0xfb, 0xa9, 0x93, 0x8f, 0x82, 0x30, 0x63, 0x81, 0x1c, - 0x80, 0x75, 0xd7, 0x73, 0x82, 0x3d, 0x0a, 0x9b, 0x2c, 0x32, 0x86, 0xcf, 0xb6, 0x67, 0x38, 0xab, - 0xe8, 0x39, 0x5b, 0xf5, 0x61, 0x31, 0x02, 0x6b, 0x4c, 0xa7, 0x3e, 0x08, 0x25, 0x45, 0x7c, 0x18, - 0x11, 0x6e, 0xea, 0x23, 0x30, 0x9a, 0xa8, 0xab, 0x53, 0xf1, 0x21, 0x5d, 0x02, 0xfc, 0x25, 0xb6, - 0x65, 0x88, 0x56, 0x2f, 0x78, 0xbb, 0x62, 0xe7, 0xbc, 0x0b, 0x27, 0x1a, 0x19, 0x7b, 0xaf, 0x18, - 0xd7, 0xee, 0xf7, 0xea, 0x33, 0xe2, 0xb3, 0x4f, 0x64, 0x61, 0x71, 0x66, 0x1d, 0x54, 0xaa, 0xf1, - 0x9b, 0x74, 0x81, 0x38, 0x0d, 0xfd, 0x82, 0x70, 0x5d, 0xc0, 0xb0, 0xc2, 0xd2, 0xfd, 0xee, 0x84, - 0x6a, 0xfc, 0x35, 0xb2, 0x57, 0x25, 0x0d, 0x52, 0x8b, 0xfc, 0xe0, 0x1d, 0x6d, 0xfe, 0x59, 0xde, - 0xfb, 0x7c, 0xbb, 0x1c, 0x14, 0x0c, 0x8a, 0xd7, 0xc8, 0x1e, 0x1f, 0x0a, 0xfd, 0xeb, 0x8a, 0x6d, - 0xbf, 0xee, 0xab, 0x16, 0x0c, 0xab, 0xaf, 0x3b, 0x86, 0x7d, 0x61, 0xd6, 0xdc, 0x17, 0xce, 0xb6, - 0x9d, 0xe0, 0x39, 0x3b, 0xc2, 0xd7, 0x0b, 0x70, 0x5a, 0xd1, 0xd0, 0xdb, 0x0c, 0xff, 0x23, 0x66, - 0xd5, 0x25, 0x28, 0x79, 0x4a, 0xaf, 0x67, 0x99, 0x0a, 0xb5, 0x58, 0xab, 0x17, 0xd3, 0x50, 0xa1, - 0xd4, 0x8b, 0x8f, 0xd9, 0x21, 0x5d, 0xe1, 0x2d, 0x94, 0xdb, 0xb3, 0x50, 0x6c, 0xb9, 0x75, 0x71, - 0xc0, 0xbc, 0x5f, 0xf6, 0xf6, 0x8d, 0xa5, 0xf9, 0x83, 0xfd, 0xf2, 0x23, 0x79, 0xc6, 0x16, 0x7a, - 0xb2, 0x85, 0xd3, 0x37, 0x96, 0xe6, 0x31, 0x2d, 0x8c, 0x66, 0x60, 0x54, 0x9e, 0xd0, 0x37, 0xa9, - 0x80, 0xe8, 0x7b, 0xe2, 0x1c, 0x52, 0x5a, 0x6b, 0x6c, 0xa2, 0x71, 0x92, 0x1e, 0xcd, 0xc3, 0xd8, - 0x76, 0x6b, 0x9d, 0x34, 0x48, 0xc4, 0x3f, 0xf8, 0x1a, 0xe1, 0x3a, 0xdd, 0x52, 0x7c, 0x97, 0xbc, - 0x96, 0xc0, 0xe3, 0x54, 0x09, 0xfb, 0x2f, 0xd9, 0x79, 0x20, 0x7a, 0xaf, 0x12, 0xf8, 0x74, 0x62, - 0x51, 0xee, 0xef, 0xe4, 0x74, 0xee, 0x66, 0x56, 0x5c, 0x23, 0x7b, 0x6b, 0x3e, 0xbd, 0x4b, 0x64, - 0xcf, 0x0a, 0x63, 0xce, 0xf7, 0xb4, 0x9d, 0xf3, 0x3f, 0x57, 0x80, 0x93, 0xaa, 0x07, 0x0c, 0xb1, - 0xf5, 0x5b, 0xbd, 0x0f, 0x2e, 0xc3, 0x60, 0x9d, 0x6c, 0x38, 0xad, 0x46, 0xa4, 0x0c, 0x0c, 0xbd, - 0xdc, 0xc8, 0x34, 0x1f, 0x83, 0xb1, 0x4e, 0x73, 0x88, 0x6e, 0xfb, 0xd9, 0x61, 0x76, 0x10, 0x47, - 0x0e, 0x9d, 0xe3, 0x6a, 0xd5, 0x58, 0xb9, 0xab, 0xe6, 0x51, 0xe8, 0x75, 0x77, 0xa8, 0x60, 0x56, - 0x30, 0xe5, 0xad, 0x25, 0x0a, 0xc4, 0x1c, 0x87, 0x1e, 0x87, 0xfe, 0x9a, 0xbf, 0xb3, 0xe3, 0x78, - 0x75, 0x76, 0xe4, 0x95, 0x66, 0x07, 0xa9, 0xec, 0x36, 0xc7, 0x41, 0x58, 0xe2, 0xd0, 0x19, 0xe8, + 0x34, 0x69, 0x5d, 0x28, 0x5e, 0x1a, 0x7c, 0xfe, 0x52, 0xe6, 0xc7, 0x9a, 0xa4, 0x0b, 0x5e, 0x14, + 0xec, 0xcd, 0x9e, 0x16, 0xf5, 0x8d, 0x26, 0xb0, 0x38, 0xc9, 0xd9, 0xfe, 0x27, 0x05, 0x38, 0x39, + 0x73, 0xaf, 0x15, 0x90, 0x79, 0x37, 0xdc, 0x4e, 0xce, 0xf0, 0xba, 0x1b, 0x6e, 0xaf, 0xc6, 0x3d, + 0xa0, 0xa6, 0xd6, 0xbc, 0x80, 0x63, 0x45, 0x81, 0x9e, 0x83, 0x7e, 0xfa, 0xfb, 0x26, 0x5e, 0x12, + 0x9f, 0x3c, 0x21, 0x88, 0x07, 0xe7, 0x9d, 0xc8, 0x99, 0xe7, 0x28, 0x2c, 0x69, 0xd0, 0x0a, 0x0c, + 0xd6, 0xd8, 0x82, 0xdc, 0x5c, 0xf1, 0xeb, 0x84, 0x0d, 0x66, 0x69, 0xf6, 0x19, 0x4a, 0x3e, 0x17, + 0x83, 0x0f, 0xf6, 0xcb, 0x93, 0xbc, 0x6d, 0x82, 0x85, 0x86, 0xc3, 0x7a, 0x79, 0x64, 0xab, 0xf5, + 0xd5, 0xc3, 0x38, 0x41, 0xc6, 0xda, 0xba, 0xa4, 0x2d, 0x95, 0x5e, 0xb6, 0x54, 0x86, 0xb2, 0x97, + 0x09, 0xba, 0x02, 0x3d, 0xdb, 0xae, 0x57, 0x9f, 0xec, 0x63, 0xbc, 0xce, 0xd1, 0x31, 0xbf, 0xee, + 0x7a, 0xf5, 0x83, 0xfd, 0xf2, 0xb8, 0xd1, 0x1c, 0x0a, 0xc4, 0x8c, 0xd4, 0xfe, 0xcf, 0x16, 0x94, + 0x19, 0x6e, 0xd1, 0x6d, 0x90, 0x0a, 0x09, 0x42, 0x37, 0x8c, 0x88, 0x17, 0x19, 0x1d, 0xfa, 0x3c, + 0x40, 0x48, 0x6a, 0x01, 0x89, 0xb4, 0x2e, 0x55, 0x13, 0xa3, 0xaa, 0x30, 0x58, 0xa3, 0xa2, 0x1b, + 0x42, 0xb8, 0xe5, 0x04, 0x6c, 0x7e, 0x89, 0x8e, 0x55, 0x1b, 0x42, 0x55, 0x22, 0x70, 0x4c, 0x63, + 0x6c, 0x08, 0xc5, 0x4e, 0x1b, 0x02, 0xfa, 0x08, 0x8c, 0xc6, 0x95, 0x85, 0x4d, 0xa7, 0x26, 0x3b, + 0x90, 0x2d, 0x99, 0xaa, 0x89, 0xc2, 0x49, 0x5a, 0xfb, 0x6f, 0x5a, 0x62, 0xf2, 0xd0, 0xaf, 0x7e, + 0x97, 0x7f, 0xab, 0xfd, 0xcb, 0x16, 0xf4, 0xcf, 0xba, 0x5e, 0xdd, 0xf5, 0x36, 0xd1, 0xa7, 0x61, + 0x80, 0x9e, 0x4d, 0x75, 0x27, 0x72, 0xc4, 0xbe, 0xf7, 0x7e, 0x6d, 0x6d, 0xa9, 0xa3, 0x62, 0xba, + 0xb9, 0xbd, 0x49, 0x01, 0xe1, 0x34, 0xa5, 0xa6, 0xab, 0xed, 0xc6, 0xfa, 0x67, 0x48, 0x2d, 0x5a, + 0x21, 0x91, 0x13, 0x7f, 0x4e, 0x0c, 0xc3, 0x8a, 0x2b, 0xba, 0x0e, 0x7d, 0x91, 0x13, 0x6c, 0x92, + 0x48, 0x6c, 0x80, 0x99, 0x1b, 0x15, 0x2f, 0x89, 0xe9, 0x8a, 0x24, 0x5e, 0x8d, 0xc4, 0xc7, 0xc2, + 0x1a, 0x2b, 0x8a, 0x05, 0x0b, 0xfb, 0x7f, 0xf4, 0xc3, 0x99, 0xb9, 0xea, 0x52, 0xce, 0xbc, 0xba, + 0x08, 0x7d, 0xf5, 0xc0, 0xdd, 0x25, 0x81, 0xe8, 0x67, 0xc5, 0x65, 0x9e, 0x41, 0xb1, 0xc0, 0xa2, + 0x97, 0x61, 0x88, 0x1f, 0x48, 0xd7, 0x1c, 0xaf, 0xde, 0x90, 0x5d, 0x7c, 0x42, 0x50, 0x0f, 0xdd, + 0xd2, 0x70, 0xd8, 0xa0, 0x3c, 0xe4, 0xa4, 0xba, 0x98, 0x58, 0x8c, 0x79, 0x87, 0xdd, 0x17, 0x2c, + 0x18, 0xe3, 0xd5, 0xcc, 0x44, 0x51, 0xe0, 0xae, 0xb7, 0x22, 0x12, 0x4e, 0xf6, 0xb2, 0x9d, 0x6e, + 0x2e, 0xab, 0xb7, 0x72, 0x7b, 0x60, 0xfa, 0x56, 0x82, 0x0b, 0xdf, 0x04, 0x27, 0x45, 0xbd, 0x63, + 0x49, 0x34, 0x4e, 0x55, 0x8b, 0xbe, 0xc7, 0x82, 0xa9, 0x9a, 0xef, 0x45, 0x81, 0xdf, 0x68, 0x90, + 0xa0, 0xd2, 0x5a, 0x6f, 0xb8, 0xe1, 0x16, 0x9f, 0xa7, 0x98, 0x6c, 0xb0, 0x9d, 0x20, 0x67, 0x0c, + 0x15, 0x91, 0x18, 0xc3, 0xf3, 0xf7, 0xf7, 0xcb, 0x53, 0x73, 0xb9, 0xac, 0x70, 0x9b, 0x6a, 0xd0, + 0x36, 0x20, 0x7a, 0x94, 0x56, 0x23, 0x67, 0x93, 0xc4, 0x95, 0xf7, 0x77, 0x5f, 0xf9, 0xa9, 0xfb, + 0xfb, 0x65, 0xb4, 0x9a, 0x62, 0x81, 0x33, 0xd8, 0xa2, 0xb7, 0xe1, 0x04, 0x85, 0xa6, 0xbe, 0x75, + 0xa0, 0xfb, 0xea, 0x26, 0xef, 0xef, 0x97, 0x4f, 0xac, 0x66, 0x30, 0xc1, 0x99, 0xac, 0xd1, 0x77, + 0x59, 0x70, 0x26, 0xfe, 0xfc, 0x85, 0xbb, 0x4d, 0xc7, 0xab, 0xc7, 0x15, 0x97, 0xba, 0xaf, 0x98, + 0xee, 0xc9, 0x67, 0xe6, 0xf2, 0x38, 0xe1, 0xfc, 0x4a, 0x90, 0x07, 0x13, 0xb4, 0x69, 0xc9, 0xba, + 0xa1, 0xfb, 0xba, 0x4f, 0xdf, 0xdf, 0x2f, 0x4f, 0xac, 0xa6, 0x79, 0xe0, 0x2c, 0xc6, 0x53, 0x73, + 0x70, 0x32, 0x73, 0x76, 0xa2, 0x31, 0x28, 0x6e, 0x13, 0x2e, 0x75, 0x95, 0x30, 0xfd, 0x89, 0x4e, + 0x40, 0xef, 0xae, 0xd3, 0x68, 0x89, 0x85, 0x89, 0xf9, 0x9f, 0x57, 0x0a, 0x2f, 0x5b, 0xf6, 0x3f, + 0x2d, 0xc2, 0xe8, 0x5c, 0x75, 0xe9, 0x81, 0x56, 0xbd, 0x7e, 0xec, 0x15, 0xda, 0x1e, 0x7b, 0xf1, + 0x21, 0x5a, 0xcc, 0x3d, 0x44, 0xbf, 0x33, 0x63, 0xc9, 0xf6, 0xb0, 0x25, 0xfb, 0xa1, 0x9c, 0x25, + 0x7b, 0xc4, 0x0b, 0x75, 0x37, 0x67, 0xd6, 0xf6, 0xb2, 0x01, 0xcc, 0x94, 0x90, 0x96, 0xfd, 0x9a, + 0xd3, 0x48, 0x6e, 0xb5, 0x87, 0x9c, 0xba, 0x47, 0x33, 0x8e, 0x35, 0x18, 0x9a, 0x73, 0x9a, 0xce, + 0xba, 0xdb, 0x70, 0x23, 0x97, 0x84, 0xe8, 0x49, 0x28, 0x3a, 0xf5, 0x3a, 0x93, 0xee, 0x4a, 0xb3, + 0x27, 0xef, 0xef, 0x97, 0x8b, 0x33, 0x75, 0x2a, 0x66, 0x80, 0xa2, 0xda, 0xc3, 0x94, 0x02, 0x3d, + 0x0d, 0x3d, 0xf5, 0xc0, 0x6f, 0x4e, 0x16, 0x18, 0x25, 0x5d, 0xe5, 0x3d, 0xf3, 0x81, 0xdf, 0x4c, + 0x90, 0x32, 0x1a, 0xfb, 0x37, 0x0b, 0x70, 0x76, 0x8e, 0x34, 0xb7, 0x16, 0xab, 0x39, 0xe7, 0xc5, + 0x25, 0x18, 0xd8, 0xf1, 0x3d, 0x37, 0xf2, 0x83, 0x50, 0x54, 0xcd, 0x66, 0xc4, 0x8a, 0x80, 0x61, + 0x85, 0x45, 0x17, 0xa0, 0xa7, 0x19, 0x0b, 0xb1, 0x43, 0x52, 0x00, 0x66, 0xe2, 0x2b, 0xc3, 0x50, + 0x8a, 0x56, 0x48, 0x02, 0x31, 0x63, 0x14, 0xc5, 0xcd, 0x90, 0x04, 0x98, 0x61, 0x62, 0x49, 0x80, + 0xca, 0x08, 0xe2, 0x44, 0x48, 0x48, 0x02, 0x14, 0x83, 0x35, 0x2a, 0x54, 0x81, 0x52, 0x98, 0x18, + 0xd9, 0xae, 0x96, 0xe6, 0x30, 0x13, 0x15, 0xd4, 0x48, 0xc6, 0x4c, 0x8c, 0x13, 0xac, 0xaf, 0xa3, + 0xa8, 0xf0, 0xb5, 0x02, 0x20, 0xde, 0x85, 0xdf, 0x62, 0x1d, 0x77, 0x33, 0xdd, 0x71, 0xdd, 0x2f, + 0x89, 0xa3, 0xea, 0xbd, 0xff, 0x62, 0xc1, 0xd9, 0x39, 0xd7, 0xab, 0x93, 0x20, 0x67, 0x02, 0x3e, + 0x9c, 0xbb, 0xf3, 0xe1, 0x84, 0x14, 0x63, 0x8a, 0xf5, 0x1c, 0xc1, 0x14, 0xb3, 0xff, 0xc2, 0x02, + 0xc4, 0x3f, 0xfb, 0x5d, 0xf7, 0xb1, 0x37, 0xd3, 0x1f, 0x7b, 0x04, 0xd3, 0xc2, 0xfe, 0x3b, 0x16, + 0x0c, 0xce, 0x35, 0x1c, 0x77, 0x47, 0x7c, 0xea, 0x1c, 0x8c, 0x4b, 0x45, 0x11, 0x03, 0x6b, 0xb2, + 0x3f, 0xdd, 0xdc, 0xc6, 0x71, 0x12, 0x89, 0xd3, 0xf4, 0xe8, 0x13, 0x70, 0xc6, 0x00, 0xae, 0x91, + 0x9d, 0x66, 0xc3, 0x89, 0xf4, 0x5b, 0x01, 0x3b, 0xfd, 0x71, 0x1e, 0x11, 0xce, 0x2f, 0x6f, 0x2f, + 0xc3, 0xc8, 0x5c, 0xc3, 0x25, 0x5e, 0xb4, 0x54, 0x99, 0xf3, 0xbd, 0x0d, 0x77, 0x13, 0xbd, 0x02, + 0x23, 0x91, 0xbb, 0x43, 0xfc, 0x56, 0x54, 0x25, 0x35, 0xdf, 0x63, 0x77, 0x6d, 0xeb, 0x52, 0xef, + 0x2c, 0xba, 0xbf, 0x5f, 0x1e, 0x59, 0x33, 0x30, 0x38, 0x41, 0x69, 0xff, 0x21, 0x1d, 0x71, 0x7f, + 0xa7, 0xe9, 0x7b, 0xc4, 0x8b, 0xe6, 0x7c, 0xaf, 0xce, 0x75, 0x32, 0xaf, 0x40, 0x4f, 0x44, 0x47, + 0x90, 0x7f, 0xf9, 0x45, 0xb9, 0xb4, 0xe9, 0xb8, 0x1d, 0xec, 0x97, 0x4f, 0xa5, 0x4b, 0xb0, 0x91, + 0x65, 0x65, 0xd0, 0x87, 0xa0, 0x2f, 0x8c, 0x9c, 0xa8, 0x15, 0x8a, 0x4f, 0x7d, 0x54, 0x8e, 0x7f, + 0x95, 0x41, 0x0f, 0xf6, 0xcb, 0xa3, 0xaa, 0x18, 0x07, 0x61, 0x51, 0x00, 0x3d, 0x05, 0xfd, 0x3b, + 0x24, 0x0c, 0x9d, 0x4d, 0x79, 0x7e, 0x8f, 0x8a, 0xb2, 0xfd, 0x2b, 0x1c, 0x8c, 0x25, 0x1e, 0x3d, + 0x06, 0xbd, 0x24, 0x08, 0xfc, 0x40, 0xec, 0x2a, 0xc3, 0x82, 0xb0, 0x77, 0x81, 0x02, 0x31, 0xc7, + 0xd9, 0xff, 0xd2, 0x82, 0x51, 0xd5, 0x56, 0x5e, 0xd7, 0x31, 0xdc, 0x9b, 0xde, 0x04, 0xa8, 0xc9, + 0x0f, 0x0c, 0xd9, 0x79, 0x37, 0xf8, 0xfc, 0xc5, 0x4c, 0xd1, 0x22, 0xd5, 0x8d, 0x31, 0x67, 0x05, + 0x0a, 0xb1, 0xc6, 0xcd, 0xfe, 0x35, 0x0b, 0x26, 0x12, 0x5f, 0xb4, 0xec, 0x86, 0x11, 0x7a, 0x2b, + 0xf5, 0x55, 0xd3, 0xdd, 0x7d, 0x15, 0x2d, 0xcd, 0xbe, 0x49, 0x2d, 0x3e, 0x09, 0xd1, 0xbe, 0xe8, + 0x1a, 0xf4, 0xba, 0x11, 0xd9, 0x91, 0x1f, 0xf3, 0x58, 0xdb, 0x8f, 0xe1, 0xad, 0x8a, 0x47, 0x64, + 0x89, 0x96, 0xc4, 0x9c, 0x81, 0xfd, 0x9b, 0x45, 0x28, 0xf1, 0x69, 0xbb, 0xe2, 0x34, 0x8f, 0x61, + 0x2c, 0x9e, 0x81, 0x92, 0xbb, 0xb3, 0xd3, 0x8a, 0x9c, 0x75, 0x71, 0x00, 0x0d, 0xf0, 0xcd, 0x60, + 0x49, 0x02, 0x71, 0x8c, 0x47, 0x4b, 0xd0, 0xc3, 0x9a, 0xc2, 0xbf, 0xf2, 0xc9, 0xec, 0xaf, 0x14, + 0x6d, 0x9f, 0x9e, 0x77, 0x22, 0x87, 0xcb, 0x7e, 0xea, 0xe4, 0xa3, 0x20, 0xcc, 0x58, 0x20, 0x07, + 0x60, 0xdd, 0xf5, 0x9c, 0x60, 0x8f, 0xc2, 0x26, 0x8b, 0x8c, 0xe1, 0x73, 0xed, 0x19, 0xce, 0x2a, + 0x7a, 0xce, 0x56, 0x7d, 0x58, 0x8c, 0xc0, 0x1a, 0xd3, 0xa9, 0x0f, 0x42, 0x49, 0x11, 0x1f, 0x46, + 0x84, 0x9b, 0xfa, 0x08, 0x8c, 0x26, 0xea, 0xea, 0x54, 0x7c, 0x48, 0x97, 0x00, 0x7f, 0x85, 0x6d, + 0x19, 0xa2, 0xd5, 0x0b, 0xde, 0xae, 0xd8, 0x39, 0xef, 0xc1, 0x89, 0x46, 0xc6, 0xde, 0x2b, 0xc6, + 0xb5, 0xfb, 0xbd, 0xfa, 0xac, 0xf8, 0xec, 0x13, 0x59, 0x58, 0x9c, 0x59, 0x07, 0x95, 0x6a, 0xfc, + 0x26, 0x5d, 0x20, 0x4e, 0x43, 0xbf, 0x20, 0xdc, 0x10, 0x30, 0xac, 0xb0, 0x74, 0xbf, 0x3b, 0xa1, + 0x1a, 0x7f, 0x9d, 0xec, 0x55, 0x49, 0x83, 0xd4, 0x22, 0x3f, 0xf8, 0xa6, 0x36, 0xff, 0x1c, 0xef, + 0x7d, 0xbe, 0x5d, 0x0e, 0x0a, 0x06, 0xc5, 0xeb, 0x64, 0x8f, 0x0f, 0x85, 0xfe, 0x75, 0xc5, 0xb6, + 0x5f, 0xf7, 0x15, 0x0b, 0x86, 0xd5, 0xd7, 0x1d, 0xc3, 0xbe, 0x30, 0x6b, 0xee, 0x0b, 0xe7, 0xda, + 0x4e, 0xf0, 0x9c, 0x1d, 0xe1, 0x6b, 0x05, 0x38, 0xa3, 0x68, 0xe8, 0x6d, 0x86, 0xff, 0x11, 0xb3, + 0xea, 0x32, 0x94, 0x3c, 0xa5, 0xd7, 0xb3, 0x4c, 0x85, 0x5a, 0xac, 0xd5, 0x8b, 0x69, 0xa8, 0x50, + 0xea, 0xc5, 0xc7, 0xec, 0x90, 0xae, 0xf0, 0x16, 0xca, 0xed, 0x59, 0x28, 0xb6, 0xdc, 0xba, 0x38, + 0x60, 0xde, 0x2f, 0x7b, 0xfb, 0xe6, 0xd2, 0xfc, 0xc1, 0x7e, 0xf9, 0xd1, 0x3c, 0x63, 0x0b, 0x3d, + 0xd9, 0xc2, 0xe9, 0x9b, 0x4b, 0xf3, 0x98, 0x16, 0x46, 0x33, 0x30, 0x2a, 0x4f, 0xe8, 0x5b, 0x54, + 0x40, 0xf4, 0x3d, 0x71, 0x0e, 0x29, 0xad, 0x35, 0x36, 0xd1, 0x38, 0x49, 0x8f, 0xe6, 0x61, 0x6c, + 0xbb, 0xb5, 0x4e, 0x1a, 0x24, 0xe2, 0x1f, 0x7c, 0x9d, 0x70, 0x9d, 0x6e, 0x29, 0xbe, 0x4b, 0x5e, + 0x4f, 0xe0, 0x71, 0xaa, 0x84, 0xfd, 0xd7, 0xec, 0x3c, 0x10, 0xbd, 0x57, 0x09, 0x7c, 0x3a, 0xb1, + 0x28, 0xf7, 0x6f, 0xe6, 0x74, 0xee, 0x66, 0x56, 0x5c, 0x27, 0x7b, 0x6b, 0x3e, 0xbd, 0x4b, 0x64, + 0xcf, 0x0a, 0x63, 0xce, 0xf7, 0xb4, 0x9d, 0xf3, 0xbf, 0x50, 0x80, 0x93, 0xaa, 0x07, 0x0c, 0xb1, + 0xf5, 0x5b, 0xbd, 0x0f, 0xae, 0xc0, 0x60, 0x9d, 0x6c, 0x38, 0xad, 0x46, 0xa4, 0x0c, 0x0c, 0xbd, + 0xdc, 0xc8, 0x34, 0x1f, 0x83, 0xb1, 0x4e, 0x73, 0x88, 0x6e, 0xfb, 0xf9, 0x61, 0x76, 0x10, 0x47, + 0x0e, 0x9d, 0xe3, 0x6a, 0xd5, 0x58, 0xb9, 0xab, 0xe6, 0x31, 0xe8, 0x75, 0x77, 0xa8, 0x60, 0x56, + 0x30, 0xe5, 0xad, 0x25, 0x0a, 0xc4, 0x1c, 0x87, 0x9e, 0x80, 0xfe, 0x9a, 0xbf, 0xb3, 0xe3, 0x78, + 0x75, 0x76, 0xe4, 0x95, 0x66, 0x07, 0xa9, 0xec, 0x36, 0xc7, 0x41, 0x58, 0xe2, 0xd0, 0x59, 0xe8, 0x71, 0x82, 0x4d, 0xae, 0x75, 0x29, 0xcd, 0x0e, 0xd0, 0x9a, 0x66, 0x82, 0xcd, 0x10, 0x33, 0x28, - 0xbd, 0x34, 0xde, 0xf6, 0x83, 0x6d, 0xd7, 0xdb, 0x9c, 0x77, 0x03, 0xb1, 0x24, 0xd4, 0x59, 0x78, - 0x4b, 0x61, 0xb0, 0x46, 0x85, 0x16, 0xa1, 0xb7, 0xe9, 0x07, 0x51, 0x38, 0xd9, 0xc7, 0xba, 0xfb, - 0x91, 0x9c, 0x8d, 0x88, 0x7f, 0x6d, 0xc5, 0x0f, 0xa2, 0xf8, 0x03, 0xe8, 0xbf, 0x10, 0xf3, 0xe2, + 0xbd, 0x34, 0xde, 0xf1, 0x83, 0x6d, 0xd7, 0xdb, 0x9c, 0x77, 0x03, 0xb1, 0x24, 0xd4, 0x59, 0x78, + 0x5b, 0x61, 0xb0, 0x46, 0x85, 0x16, 0xa1, 0xb7, 0xe9, 0x07, 0x51, 0x38, 0xd9, 0xc7, 0xba, 0xfb, + 0xd1, 0x9c, 0x8d, 0x88, 0x7f, 0x6d, 0xc5, 0x0f, 0xa2, 0xf8, 0x03, 0xe8, 0xbf, 0x10, 0xf3, 0xe2, 0x68, 0x19, 0xfa, 0x89, 0xb7, 0xbb, 0x18, 0xf8, 0x3b, 0x93, 0x13, 0xf9, 0x9c, 0x16, 0x38, 0x09, 0x9f, 0x66, 0xb1, 0x8c, 0x2a, 0xc0, 0x58, 0xb2, 0x40, 0x1f, 0x82, 0x22, 0xf1, 0x76, 0x27, 0xfb, - 0x19, 0xa7, 0xa9, 0x1c, 0x4e, 0x37, 0x9d, 0x20, 0xde, 0xf3, 0x17, 0xbc, 0x5d, 0x4c, 0xcb, 0xa0, - 0x8f, 0x43, 0x49, 0x6e, 0x18, 0xa1, 0x50, 0x67, 0x66, 0x4e, 0x58, 0xb9, 0xcd, 0x60, 0xf2, 0x56, + 0x19, 0xa7, 0xa9, 0x1c, 0x4e, 0xb7, 0x9c, 0x20, 0xde, 0xf3, 0x17, 0xbc, 0x5d, 0x4c, 0xcb, 0xa0, + 0x8f, 0x43, 0x49, 0x6e, 0x18, 0xa1, 0x50, 0x67, 0x66, 0x4e, 0x58, 0xb9, 0xcd, 0x60, 0xf2, 0x76, 0xcb, 0x0d, 0xc8, 0x0e, 0xf1, 0xa2, 0x30, 0xde, 0x21, 0x25, 0x36, 0xc4, 0x31, 0x37, 0x54, 0x83, - 0xa1, 0x80, 0x84, 0xee, 0x5d, 0x52, 0xf1, 0x1b, 0x6e, 0x6d, 0x6f, 0xf2, 0x21, 0xd6, 0xbc, 0x27, - 0xdb, 0x76, 0x19, 0xd6, 0x0a, 0xc4, 0xea, 0x76, 0x1d, 0x8a, 0x0d, 0xa6, 0xe8, 0x75, 0x18, 0x0e, - 0x48, 0x18, 0x39, 0x41, 0x24, 0x6a, 0x99, 0x54, 0xe6, 0xb1, 0x61, 0xac, 0x23, 0xf8, 0x75, 0x22, - 0xae, 0x26, 0xc6, 0x60, 0x93, 0x03, 0xfa, 0xb8, 0xd4, 0xfd, 0xaf, 0xf8, 0x2d, 0x2f, 0x0a, 0x27, - 0x4b, 0xac, 0xdd, 0x99, 0x56, 0xd9, 0x9b, 0x31, 0x5d, 0xd2, 0x38, 0xc0, 0x0b, 0x63, 0x83, 0x15, - 0xfa, 0x24, 0x0c, 0xf3, 0xff, 0xdc, 0xb6, 0x19, 0x4e, 0x9e, 0x64, 0xbc, 0xcf, 0xe7, 0xf3, 0xe6, - 0x84, 0xb3, 0x27, 0x05, 0xf3, 0x61, 0x1d, 0x1a, 0x62, 0x93, 0x1b, 0xc2, 0x30, 0xdc, 0x70, 0x77, - 0x89, 0x47, 0xc2, 0xb0, 0x12, 0xf8, 0xeb, 0x44, 0xa8, 0x6a, 0x4f, 0x67, 0xdb, 0x42, 0xfd, 0x75, - 0x32, 0x3b, 0x4e, 0x79, 0x2e, 0xeb, 0x65, 0xb0, 0xc9, 0x02, 0xdd, 0x80, 0x11, 0x7a, 0x37, 0x76, - 0x63, 0xa6, 0x83, 0x9d, 0x98, 0xb2, 0xfb, 0x20, 0x36, 0x0a, 0xe1, 0x04, 0x13, 0x74, 0x1d, 0x86, - 0x58, 0x9f, 0xb7, 0x9a, 0x9c, 0xe9, 0xa9, 0x4e, 0x4c, 0x99, 0x29, 0xbd, 0xaa, 0x15, 0xc1, 0x06, - 0x03, 0xf4, 0x1a, 0x94, 0x1a, 0xee, 0x06, 0xa9, 0xed, 0xd5, 0x1a, 0x64, 0x72, 0x88, 0x71, 0xcb, - 0xdc, 0x0c, 0x97, 0x25, 0x11, 0x97, 0xcf, 0xd5, 0x5f, 0x1c, 0x17, 0x47, 0x37, 0xe1, 0x54, 0x44, - 0x82, 0x1d, 0xd7, 0x73, 0xe8, 0x26, 0x26, 0xae, 0x84, 0xcc, 0x44, 0x3d, 0xcc, 0x66, 0xd7, 0x39, - 0x31, 0x1a, 0xa7, 0xd6, 0x32, 0xa9, 0x70, 0x4e, 0x69, 0x74, 0x07, 0x26, 0x33, 0x30, 0x7c, 0xde, - 0x9e, 0x60, 0x9c, 0x3f, 0x2c, 0x38, 0x4f, 0xae, 0xe5, 0xd0, 0x1d, 0xb4, 0xc1, 0xe1, 0x5c, 0xee, - 0xe8, 0x3a, 0x8c, 0xb2, 0x9d, 0xb3, 0xd2, 0x6a, 0x34, 0x44, 0x85, 0x23, 0xac, 0xc2, 0xc7, 0xa5, - 0x1c, 0xb1, 0x64, 0xa2, 0x0f, 0xf6, 0xcb, 0x10, 0xff, 0xc3, 0xc9, 0xd2, 0x68, 0x9d, 0x59, 0x43, - 0x5b, 0x81, 0x1b, 0xed, 0xd1, 0x55, 0x45, 0xee, 0x44, 0x93, 0xa3, 0x6d, 0x35, 0x43, 0x3a, 0xa9, - 0x32, 0x99, 0xea, 0x40, 0x9c, 0x64, 0x48, 0x8f, 0x82, 0x30, 0xaa, 0xbb, 0xde, 0xe4, 0x18, 0xbf, - 0x4f, 0xc9, 0x9d, 0xb4, 0x4a, 0x81, 0x98, 0xe3, 0x98, 0x25, 0x94, 0xfe, 0xb8, 0x4e, 0x4f, 0xdc, - 0x71, 0x46, 0x18, 0x5b, 0x42, 0x25, 0x02, 0xc7, 0x34, 0x54, 0x08, 0x8e, 0xa2, 0xbd, 0x49, 0xc4, - 0x48, 0xd5, 0x86, 0xb8, 0xb6, 0xf6, 0x71, 0x4c, 0xe1, 0xf6, 0x3a, 0x8c, 0xa8, 0x6d, 0x82, 0xf5, - 0x09, 0x2a, 0x43, 0x2f, 0x13, 0xfb, 0x84, 0x1e, 0xb3, 0x44, 0x9b, 0xc0, 0x44, 0x42, 0xcc, 0xe1, - 0xac, 0x09, 0xee, 0x5d, 0x32, 0xbb, 0x17, 0x11, 0xae, 0x8b, 0x28, 0x6a, 0x4d, 0x90, 0x08, 0x1c, - 0xd3, 0xd8, 0xff, 0x87, 0x8b, 0xcf, 0xf1, 0x29, 0xd1, 0xc5, 0xb9, 0xf8, 0x0c, 0x0c, 0x6c, 0xf9, - 0x61, 0x44, 0xa9, 0x59, 0x1d, 0xbd, 0xb1, 0xc0, 0x7c, 0x55, 0xc0, 0xb1, 0xa2, 0x40, 0xaf, 0xc0, - 0x70, 0x4d, 0xaf, 0x40, 0x1c, 0xea, 0x6a, 0x1b, 0x31, 0x6a, 0xc7, 0x26, 0x2d, 0x7a, 0x09, 0x06, - 0x98, 0x77, 0x4f, 0xcd, 0x6f, 0x08, 0x69, 0x53, 0x4a, 0x26, 0x03, 0x15, 0x01, 0x3f, 0xd0, 0x7e, - 0x63, 0x45, 0x8d, 0x2e, 0x40, 0x1f, 0x6d, 0xc2, 0x52, 0x45, 0x1c, 0xa7, 0x4a, 0x25, 0x77, 0x95, - 0x41, 0xb1, 0xc0, 0xda, 0xbf, 0x62, 0x31, 0x59, 0x2a, 0xbd, 0xe7, 0xa3, 0xab, 0xec, 0xd0, 0x60, - 0x27, 0x88, 0xa6, 0x12, 0x7b, 0x4c, 0x3b, 0x09, 0x14, 0xee, 0x20, 0xf1, 0x1f, 0x1b, 0x25, 0xd1, - 0x1b, 0xc9, 0x93, 0x81, 0x0b, 0x14, 0x2f, 0xc8, 0x2e, 0x48, 0x9e, 0x0e, 0x0f, 0xc7, 0x47, 0x1c, - 0x6d, 0x4f, 0xbb, 0x23, 0xc2, 0xfe, 0xab, 0x05, 0x6d, 0x96, 0x54, 0x23, 0x27, 0x22, 0xa8, 0x02, - 0xfd, 0xb7, 0x1d, 0x37, 0x72, 0xbd, 0x4d, 0x21, 0xf7, 0xb5, 0x3f, 0xe8, 0x58, 0xa1, 0x5b, 0xbc, + 0xa1, 0x80, 0x84, 0xee, 0x3d, 0x52, 0xf1, 0x1b, 0x6e, 0x6d, 0x6f, 0xf2, 0x34, 0x6b, 0xde, 0x53, + 0x6d, 0xbb, 0x0c, 0x6b, 0x05, 0x62, 0x75, 0xbb, 0x0e, 0xc5, 0x06, 0x53, 0xf4, 0x06, 0x0c, 0x07, + 0x24, 0x8c, 0x9c, 0x20, 0x12, 0xb5, 0x4c, 0x2a, 0xf3, 0xd8, 0x30, 0xd6, 0x11, 0xfc, 0x3a, 0x11, + 0x57, 0x13, 0x63, 0xb0, 0xc9, 0x01, 0x7d, 0x5c, 0xea, 0xfe, 0x57, 0xfc, 0x96, 0x17, 0x85, 0x93, + 0x25, 0xd6, 0xee, 0x4c, 0xab, 0xec, 0xad, 0x98, 0x2e, 0x69, 0x1c, 0xe0, 0x85, 0xb1, 0xc1, 0x0a, + 0x7d, 0x12, 0x86, 0xf9, 0x7f, 0x6e, 0xdb, 0x0c, 0x27, 0x4f, 0x32, 0xde, 0x17, 0xf2, 0x79, 0x73, + 0xc2, 0xd9, 0x93, 0x82, 0xf9, 0xb0, 0x0e, 0x0d, 0xb1, 0xc9, 0x0d, 0x61, 0x18, 0x6e, 0xb8, 0xbb, + 0xc4, 0x23, 0x61, 0x58, 0x09, 0xfc, 0x75, 0x22, 0x54, 0xb5, 0x67, 0xb2, 0x6d, 0xa1, 0xfe, 0x3a, + 0x99, 0x1d, 0xa7, 0x3c, 0x97, 0xf5, 0x32, 0xd8, 0x64, 0x81, 0x6e, 0xc2, 0x08, 0xbd, 0x1b, 0xbb, + 0x31, 0xd3, 0xc1, 0x4e, 0x4c, 0xd9, 0x7d, 0x10, 0x1b, 0x85, 0x70, 0x82, 0x09, 0xba, 0x01, 0x43, + 0xac, 0xcf, 0x5b, 0x4d, 0xce, 0xf4, 0x54, 0x27, 0xa6, 0xcc, 0x94, 0x5e, 0xd5, 0x8a, 0x60, 0x83, + 0x01, 0x7a, 0x1d, 0x4a, 0x0d, 0x77, 0x83, 0xd4, 0xf6, 0x6a, 0x0d, 0x32, 0x39, 0xc4, 0xb8, 0x65, + 0x6e, 0x86, 0xcb, 0x92, 0x88, 0xcb, 0xe7, 0xea, 0x2f, 0x8e, 0x8b, 0xa3, 0x5b, 0x70, 0x2a, 0x22, + 0xc1, 0x8e, 0xeb, 0x39, 0x74, 0x13, 0x13, 0x57, 0x42, 0x66, 0xa2, 0x1e, 0x66, 0xb3, 0xeb, 0xbc, + 0x18, 0x8d, 0x53, 0x6b, 0x99, 0x54, 0x38, 0xa7, 0x34, 0xba, 0x0b, 0x93, 0x19, 0x18, 0x3e, 0x6f, + 0x4f, 0x30, 0xce, 0x1f, 0x16, 0x9c, 0x27, 0xd7, 0x72, 0xe8, 0x0e, 0xda, 0xe0, 0x70, 0x2e, 0x77, + 0x74, 0x03, 0x46, 0xd9, 0xce, 0x59, 0x69, 0x35, 0x1a, 0xa2, 0xc2, 0x11, 0x56, 0xe1, 0x13, 0x52, + 0x8e, 0x58, 0x32, 0xd1, 0x07, 0xfb, 0x65, 0x88, 0xff, 0xe1, 0x64, 0x69, 0xb4, 0xce, 0xac, 0xa1, + 0xad, 0xc0, 0x8d, 0xf6, 0xe8, 0xaa, 0x22, 0x77, 0xa3, 0xc9, 0xd1, 0xb6, 0x9a, 0x21, 0x9d, 0x54, + 0x99, 0x4c, 0x75, 0x20, 0x4e, 0x32, 0xa4, 0x47, 0x41, 0x18, 0xd5, 0x5d, 0x6f, 0x72, 0x8c, 0xdf, + 0xa7, 0xe4, 0x4e, 0x5a, 0xa5, 0x40, 0xcc, 0x71, 0xcc, 0x12, 0x4a, 0x7f, 0xdc, 0xa0, 0x27, 0xee, + 0x38, 0x23, 0x8c, 0x2d, 0xa1, 0x12, 0x81, 0x63, 0x1a, 0x2a, 0x04, 0x47, 0xd1, 0xde, 0x24, 0x62, + 0xa4, 0x6a, 0x43, 0x5c, 0x5b, 0xfb, 0x38, 0xa6, 0x70, 0x7b, 0x1d, 0x46, 0xd4, 0x36, 0xc1, 0xfa, + 0x04, 0x95, 0xa1, 0x97, 0x89, 0x7d, 0x42, 0x8f, 0x59, 0xa2, 0x4d, 0x60, 0x22, 0x21, 0xe6, 0x70, + 0xd6, 0x04, 0xf7, 0x1e, 0x99, 0xdd, 0x8b, 0x08, 0xd7, 0x45, 0x14, 0xb5, 0x26, 0x48, 0x04, 0x8e, + 0x69, 0xec, 0xff, 0xc9, 0xc5, 0xe7, 0xf8, 0x94, 0xe8, 0xe2, 0x5c, 0x7c, 0x16, 0x06, 0xb6, 0xfc, + 0x30, 0xa2, 0xd4, 0xac, 0x8e, 0xde, 0x58, 0x60, 0xbe, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x57, 0x61, + 0xb8, 0xa6, 0x57, 0x20, 0x0e, 0x75, 0xb5, 0x8d, 0x18, 0xb5, 0x63, 0x93, 0x16, 0xbd, 0x0c, 0x03, + 0xcc, 0xbb, 0xa7, 0xe6, 0x37, 0x84, 0xb4, 0x29, 0x25, 0x93, 0x81, 0x8a, 0x80, 0x1f, 0x68, 0xbf, + 0xb1, 0xa2, 0x46, 0x17, 0xa1, 0x8f, 0x36, 0x61, 0xa9, 0x22, 0x8e, 0x53, 0xa5, 0x92, 0xbb, 0xc6, + 0xa0, 0x58, 0x60, 0xed, 0x5f, 0xb3, 0x98, 0x2c, 0x95, 0xde, 0xf3, 0xd1, 0x35, 0x76, 0x68, 0xb0, + 0x13, 0x44, 0x53, 0x89, 0x3d, 0xae, 0x9d, 0x04, 0x0a, 0x77, 0x90, 0xf8, 0x8f, 0x8d, 0x92, 0xe8, + 0xcd, 0xe4, 0xc9, 0xc0, 0x05, 0x8a, 0x17, 0x65, 0x17, 0x24, 0x4f, 0x87, 0x47, 0xe2, 0x23, 0x8e, + 0xb6, 0xa7, 0xdd, 0x11, 0x61, 0xff, 0x5f, 0x05, 0x6d, 0x96, 0x54, 0x23, 0x27, 0x22, 0xa8, 0x02, + 0xfd, 0x77, 0x1c, 0x37, 0x72, 0xbd, 0x4d, 0x21, 0xf7, 0xb5, 0x3f, 0xe8, 0x58, 0xa1, 0xdb, 0xbc, 0x00, 0x97, 0x5e, 0xc4, 0x1f, 0x2c, 0xd9, 0x50, 0x8e, 0x41, 0xcb, 0xf3, 0x28, 0xc7, 0x42, 0xb7, - 0x1c, 0x31, 0x2f, 0xc0, 0x39, 0x8a, 0x3f, 0x58, 0xb2, 0x41, 0x6f, 0x02, 0xc8, 0x1d, 0x82, 0xd4, - 0x85, 0x57, 0xd0, 0x33, 0x9d, 0x99, 0xae, 0xa9, 0x32, 0xb3, 0x23, 0x54, 0x36, 0x8a, 0xff, 0x63, + 0x1c, 0x31, 0x2f, 0xc0, 0x39, 0x8a, 0x3f, 0x58, 0xb2, 0x41, 0x6f, 0x01, 0xc8, 0x1d, 0x82, 0xd4, + 0x85, 0x57, 0xd0, 0xb3, 0x9d, 0x99, 0xae, 0xa9, 0x32, 0xb3, 0x23, 0x54, 0x36, 0x8a, 0xff, 0x63, 0x8d, 0x9f, 0x1d, 0x69, 0x63, 0xaa, 0x37, 0x06, 0x7d, 0x82, 0x2e, 0x51, 0x27, 0x88, 0x48, 0x7d, - 0x26, 0x12, 0x9d, 0xf3, 0x54, 0x77, 0x97, 0xc3, 0x35, 0x77, 0x87, 0xe8, 0xcb, 0x59, 0x30, 0xc1, - 0x31, 0x3f, 0xfb, 0x17, 0x8a, 0x30, 0x99, 0xd7, 0x5c, 0xba, 0x68, 0xc8, 0x1d, 0x37, 0x9a, 0xa3, + 0x26, 0x12, 0x9d, 0xf3, 0x74, 0x77, 0x97, 0xc3, 0x35, 0x77, 0x87, 0xe8, 0xcb, 0x59, 0x30, 0xc1, + 0x31, 0x3f, 0xfb, 0x97, 0x8a, 0x30, 0x99, 0xd7, 0x5c, 0xba, 0x68, 0xc8, 0x5d, 0x37, 0x9a, 0xa3, 0x62, 0xad, 0x65, 0x2e, 0x9a, 0x05, 0x01, 0xc7, 0x8a, 0x82, 0xce, 0xde, 0xd0, 0xdd, 0x94, 0x77, 0xfb, 0xde, 0x78, 0xf6, 0x56, 0x19, 0x14, 0x0b, 0x2c, 0xa5, 0x0b, 0x88, 0x13, 0x0a, 0xb7, 0x33, 0x6d, 0x96, 0x63, 0x06, 0xc5, 0x02, 0xab, 0x6b, 0x19, 0x7b, 0x3a, 0x68, 0x19, 0x8d, 0x2e, 0xea, 0x3d, 0xda, 0x2e, 0x42, 0x9f, 0x02, 0xd8, 0x70, 0x3d, 0x37, 0xdc, 0x62, 0xdc, 0xfb, 0x0e, 0xcd, - 0x5d, 0x09, 0xc5, 0x8b, 0x8a, 0x0b, 0xd6, 0x38, 0xa2, 0x17, 0x61, 0x50, 0x6d, 0x20, 0x4b, 0xf3, + 0x5d, 0x09, 0xc5, 0x8b, 0x8a, 0x0b, 0xd6, 0x38, 0xa2, 0x97, 0x60, 0x50, 0x6d, 0x20, 0x4b, 0xf3, 0xcc, 0x06, 0xaf, 0xf9, 0x34, 0xc5, 0xbb, 0xe9, 0x3c, 0xd6, 0xe9, 0xec, 0xcf, 0x24, 0xe7, 0x8b, - 0x58, 0x01, 0x5a, 0xff, 0x5a, 0xdd, 0xf6, 0x6f, 0xa1, 0x7d, 0xff, 0xda, 0xdf, 0xec, 0x83, 0x51, - 0xa3, 0xb2, 0x56, 0xd8, 0xc5, 0x9e, 0x7b, 0x85, 0x1e, 0x40, 0x4e, 0x44, 0xc4, 0xfa, 0xb3, 0x3b, + 0x58, 0x01, 0x5a, 0xff, 0x5a, 0xdd, 0xf6, 0x6f, 0xa1, 0x7d, 0xff, 0xda, 0xdf, 0xe8, 0x83, 0x51, + 0xa3, 0xb2, 0x56, 0xd8, 0xc5, 0x9e, 0x7b, 0x95, 0x1e, 0x40, 0x4e, 0x44, 0xc4, 0xfa, 0xb3, 0x3b, 0x2f, 0x15, 0xfd, 0x90, 0xa2, 0x2b, 0x80, 0x97, 0x47, 0x9f, 0x82, 0x52, 0xc3, 0x09, 0x99, 0xc6, 0x92, 0x88, 0x75, 0xd7, 0x0d, 0xb3, 0xf8, 0x42, 0xe8, 0x84, 0x91, 0x76, 0xea, 0x73, 0xde, 0x31, 0x4b, 0x7a, 0x52, 0x52, 0xf9, 0x4a, 0xfa, 0x35, 0xaa, 0x46, 0x50, 0x21, 0x6c, 0x0f, 0x73, 0x1c, - 0x7a, 0x89, 0x6d, 0xad, 0x74, 0x56, 0xcc, 0x51, 0x69, 0x94, 0x4d, 0xb3, 0x5e, 0x43, 0xc8, 0x56, - 0x38, 0x6c, 0x50, 0xc6, 0x77, 0xb2, 0xbe, 0x36, 0x77, 0xb2, 0x27, 0xa1, 0x9f, 0xfd, 0x50, 0x33, + 0x7a, 0x99, 0x6d, 0xad, 0x74, 0x56, 0xcc, 0x51, 0x69, 0x94, 0x4d, 0xb3, 0x5e, 0x43, 0xc8, 0x56, + 0x38, 0x6c, 0x50, 0xc6, 0x77, 0xb2, 0xbe, 0x36, 0x77, 0xb2, 0xa7, 0xa0, 0x9f, 0xfd, 0x50, 0x33, 0x40, 0x8d, 0xc6, 0x12, 0x07, 0x63, 0x89, 0x4f, 0x4e, 0x98, 0x81, 0xee, 0x26, 0x0c, 0xbd, 0xf5, - 0x89, 0x49, 0xcd, 0xfc, 0x1f, 0x06, 0xf8, 0x2e, 0x27, 0xa6, 0x3c, 0x96, 0x38, 0xf4, 0xd3, 0x16, - 0x20, 0xa7, 0x41, 0x6f, 0xcb, 0x14, 0xac, 0x2e, 0x37, 0xc0, 0x44, 0xed, 0x57, 0x3a, 0x76, 0x7b, - 0x2b, 0x9c, 0x9e, 0x49, 0x95, 0xe6, 0x9a, 0xd2, 0x97, 0x45, 0x13, 0x51, 0x9a, 0x40, 0x3f, 0x8c, - 0x96, 0xdd, 0x30, 0xfa, 0xfc, 0x1f, 0x24, 0x0e, 0xa7, 0x8c, 0x26, 0xa1, 0x1b, 0xfa, 0xe5, 0x6b, - 0xf0, 0x90, 0x97, 0xaf, 0xe1, 0xbc, 0x8b, 0xd7, 0x54, 0x0b, 0x1e, 0xca, 0xf9, 0x82, 0x0c, 0xfd, - 0xeb, 0xbc, 0xae, 0x7f, 0xed, 0xa0, 0xb5, 0x9b, 0x96, 0x75, 0x4c, 0xbf, 0xde, 0x72, 0xbc, 0xc8, - 0x8d, 0xf6, 0x74, 0x7d, 0xed, 0x53, 0x30, 0x32, 0xef, 0x90, 0x1d, 0xdf, 0x5b, 0xf0, 0xea, 0x4d, - 0xdf, 0xf5, 0x22, 0x34, 0x09, 0x3d, 0x4c, 0xf8, 0xe0, 0x5b, 0x6f, 0x0f, 0xed, 0x3d, 0xcc, 0x20, - 0xf6, 0x26, 0x9c, 0x9c, 0xf7, 0x6f, 0x7b, 0xb7, 0x9d, 0xa0, 0x3e, 0x53, 0x59, 0xd2, 0xf4, 0x49, - 0xab, 0x52, 0x9f, 0x61, 0xe5, 0xdf, 0x16, 0xb5, 0x92, 0xfc, 0x3a, 0xb4, 0xe8, 0x36, 0x48, 0x8e, - 0xd6, 0xef, 0x6f, 0x14, 0x8c, 0x9a, 0x62, 0x7a, 0x65, 0x77, 0xb6, 0x72, 0xed, 0xce, 0xaf, 0xc3, - 0xc0, 0x86, 0x4b, 0x1a, 0x75, 0x4c, 0x36, 0x44, 0xef, 0x3c, 0x91, 0xef, 0x99, 0xb6, 0x48, 0x29, + 0x89, 0x49, 0xcd, 0xfc, 0x1f, 0x06, 0xf8, 0x2e, 0x27, 0xa6, 0x3c, 0x96, 0x38, 0xf4, 0x33, 0x16, + 0x20, 0xa7, 0x41, 0x6f, 0xcb, 0x14, 0xac, 0x2e, 0x37, 0xc0, 0x44, 0xed, 0x57, 0x3b, 0x76, 0x7b, + 0x2b, 0x9c, 0x9e, 0x49, 0x95, 0xe6, 0x9a, 0xd2, 0x57, 0x44, 0x13, 0x51, 0x9a, 0x40, 0x3f, 0x8c, + 0x96, 0xdd, 0x30, 0xfa, 0xfc, 0x1f, 0x25, 0x0e, 0xa7, 0x8c, 0x26, 0xa1, 0x9b, 0xfa, 0xe5, 0x6b, + 0xf0, 0x90, 0x97, 0xaf, 0xe1, 0xbc, 0x8b, 0xd7, 0x54, 0x0b, 0x4e, 0xe7, 0x7c, 0x41, 0x86, 0xfe, + 0x75, 0x5e, 0xd7, 0xbf, 0x76, 0xd0, 0xda, 0x4d, 0xcb, 0x3a, 0xa6, 0xdf, 0x68, 0x39, 0x5e, 0xe4, + 0x46, 0x7b, 0xba, 0xbe, 0xf6, 0x69, 0x18, 0x99, 0x77, 0xc8, 0x8e, 0xef, 0x2d, 0x78, 0xf5, 0xa6, + 0xef, 0x7a, 0x11, 0x9a, 0x84, 0x1e, 0x26, 0x7c, 0xf0, 0xad, 0xb7, 0x87, 0xf6, 0x1e, 0x66, 0x10, + 0x7b, 0x13, 0x4e, 0xce, 0xfb, 0x77, 0xbc, 0x3b, 0x4e, 0x50, 0x9f, 0xa9, 0x2c, 0x69, 0xfa, 0xa4, + 0x55, 0xa9, 0xcf, 0xb0, 0xf2, 0x6f, 0x8b, 0x5a, 0x49, 0x7e, 0x1d, 0x5a, 0x74, 0x1b, 0x24, 0x47, + 0xeb, 0xf7, 0xff, 0x16, 0x8c, 0x9a, 0x62, 0x7a, 0x65, 0x77, 0xb6, 0x72, 0xed, 0xce, 0x6f, 0xc0, + 0xc0, 0x86, 0x4b, 0x1a, 0x75, 0x4c, 0x36, 0x44, 0xef, 0x3c, 0x99, 0xef, 0x99, 0xb6, 0x48, 0x29, 0xa5, 0x96, 0x97, 0x6b, 0x43, 0x16, 0x45, 0x61, 0xac, 0xd8, 0xa0, 0x6d, 0x18, 0x93, 0x7d, 0x28, - 0xb1, 0x62, 0x3f, 0x78, 0xb2, 0xdd, 0xc0, 0x9b, 0xcc, 0x4f, 0xdc, 0xdb, 0x2f, 0x8f, 0xe1, 0x04, - 0x1b, 0x9c, 0x62, 0x8c, 0xce, 0x40, 0xcf, 0x0e, 0x3d, 0xf9, 0x7a, 0x58, 0xf7, 0x33, 0xf5, 0x07, - 0xd3, 0xe4, 0x30, 0xa8, 0xfd, 0xa3, 0x16, 0x3c, 0x94, 0xea, 0x19, 0xa1, 0xd1, 0x3a, 0xe2, 0x51, - 0x48, 0x6a, 0x98, 0x0a, 0x9d, 0x35, 0x4c, 0xf6, 0xdf, 0xb5, 0xe0, 0xc4, 0xc2, 0x4e, 0x33, 0xda, - 0x9b, 0x77, 0x4d, 0x23, 0xf1, 0x07, 0xa1, 0x6f, 0x87, 0xd4, 0xdd, 0xd6, 0x8e, 0x18, 0xb9, 0xb2, - 0x3c, 0x1d, 0x56, 0x18, 0xf4, 0x60, 0xbf, 0x3c, 0x5c, 0x8d, 0xfc, 0xc0, 0xd9, 0x24, 0x1c, 0x80, - 0x05, 0x39, 0x3b, 0x63, 0xdd, 0xbb, 0x64, 0xd9, 0xdd, 0x71, 0xa3, 0xfb, 0x9b, 0xed, 0xc2, 0xbe, - 0x2b, 0x99, 0xe0, 0x98, 0x9f, 0xfd, 0x0d, 0x0b, 0x46, 0xe5, 0xbc, 0x9f, 0xa9, 0xd7, 0x03, 0x12, - 0x86, 0x68, 0x0a, 0x0a, 0x6e, 0x53, 0xb4, 0x12, 0x44, 0x2b, 0x0b, 0x4b, 0x15, 0x5c, 0x70, 0x9b, - 0x52, 0x9c, 0x67, 0x07, 0x50, 0xd1, 0x34, 0x75, 0x5f, 0x15, 0x70, 0xac, 0x28, 0xd0, 0x45, 0x18, - 0xf0, 0xfc, 0x3a, 0x97, 0x88, 0xb9, 0x28, 0xc1, 0x26, 0xd8, 0xaa, 0x80, 0x61, 0x85, 0x45, 0x15, - 0x28, 0x71, 0x47, 0xc8, 0x78, 0xd2, 0x76, 0xe5, 0x4e, 0xc9, 0xbe, 0x6c, 0x4d, 0x96, 0xc4, 0x31, - 0x13, 0xfb, 0xd7, 0x2c, 0x18, 0x92, 0x5f, 0xd6, 0xe5, 0x5d, 0x85, 0x2e, 0xad, 0xf8, 0x9e, 0x12, - 0x2f, 0x2d, 0x7a, 0xd7, 0x60, 0x18, 0xe3, 0x8a, 0x51, 0x3c, 0xd4, 0x15, 0xe3, 0x32, 0x0c, 0x3a, - 0xcd, 0x66, 0xc5, 0xbc, 0x9f, 0xb0, 0xa9, 0x34, 0x13, 0x83, 0xb1, 0x4e, 0x63, 0xff, 0x48, 0x01, - 0x46, 0xe4, 0x17, 0x54, 0x5b, 0xeb, 0x21, 0x89, 0xd0, 0x1a, 0x94, 0x1c, 0x3e, 0x4a, 0x44, 0x4e, - 0xf2, 0x47, 0xb3, 0xf5, 0x66, 0xc6, 0x90, 0xc6, 0x82, 0xd6, 0x8c, 0x2c, 0x8d, 0x63, 0x46, 0xa8, - 0x01, 0xe3, 0x9e, 0x1f, 0xb1, 0x43, 0x57, 0xe1, 0xdb, 0x99, 0x32, 0x93, 0xdc, 0x4f, 0x0b, 0xee, - 0xe3, 0xab, 0x49, 0x2e, 0x38, 0xcd, 0x18, 0x2d, 0x48, 0x5d, 0x64, 0x31, 0x5f, 0x89, 0xa4, 0x0f, - 0x5c, 0xb6, 0x2a, 0xd2, 0xfe, 0x65, 0x0b, 0x4a, 0x92, 0xec, 0x38, 0xac, 0xd6, 0x2b, 0xd0, 0x1f, - 0xb2, 0x41, 0x90, 0x5d, 0x63, 0xb7, 0x6b, 0x38, 0x1f, 0xaf, 0x58, 0x96, 0xe0, 0xff, 0x43, 0x2c, - 0x79, 0x30, 0x53, 0x94, 0x6a, 0xfe, 0xbb, 0xc4, 0x14, 0xa5, 0xda, 0x93, 0x73, 0x28, 0xfd, 0x31, - 0x6b, 0xb3, 0xa6, 0xdb, 0xa5, 0x22, 0x6f, 0x33, 0x20, 0x1b, 0xee, 0x9d, 0xa4, 0xc8, 0x5b, 0x61, - 0x50, 0x2c, 0xb0, 0xe8, 0x4d, 0x18, 0xaa, 0x49, 0x1b, 0x44, 0xbc, 0xc2, 0x2f, 0xb4, 0xb5, 0x87, - 0x29, 0xd3, 0x29, 0xd7, 0xa1, 0xcd, 0x69, 0xe5, 0xb1, 0xc1, 0xcd, 0x74, 0xf4, 0x29, 0x76, 0x72, - 0xf4, 0x89, 0xf9, 0xe6, 0xbb, 0xbd, 0xfc, 0x98, 0x05, 0x7d, 0x5c, 0xf7, 0xdc, 0x9d, 0xea, 0x5f, - 0xb3, 0x24, 0xc7, 0x7d, 0x77, 0x93, 0x02, 0x85, 0xa4, 0x81, 0x56, 0xa0, 0xc4, 0x7e, 0x30, 0xdd, - 0x79, 0x31, 0xff, 0x1d, 0x0e, 0xaf, 0x55, 0x6f, 0xe0, 0x4d, 0x59, 0x0c, 0xc7, 0x1c, 0xec, 0x1f, - 0x2e, 0xd2, 0xdd, 0x2d, 0x26, 0x35, 0x0e, 0x7d, 0xeb, 0xc1, 0x1d, 0xfa, 0x85, 0x07, 0x75, 0xe8, - 0x6f, 0xc2, 0x68, 0x4d, 0xb3, 0x3b, 0xc7, 0x23, 0x79, 0xb1, 0xed, 0x24, 0xd1, 0x4c, 0xd4, 0x5c, - 0x3b, 0x37, 0x67, 0x32, 0xc1, 0x49, 0xae, 0xe8, 0x13, 0x30, 0xc4, 0xc7, 0x59, 0xd4, 0xc2, 0x7d, - 0xa5, 0x1e, 0xcf, 0x9f, 0x2f, 0x7a, 0x15, 0x5c, 0x9b, 0xab, 0x15, 0xc7, 0x06, 0x33, 0xfb, 0xcf, - 0x2d, 0x40, 0x0b, 0xcd, 0x2d, 0xb2, 0x43, 0x02, 0xa7, 0x11, 0x9b, 0x8f, 0x7e, 0xc0, 0x82, 0x49, - 0x92, 0x02, 0xcf, 0xf9, 0x3b, 0x3b, 0xe2, 0xb2, 0x98, 0xa3, 0xcf, 0x58, 0xc8, 0x29, 0xa3, 0x1e, - 0x2a, 0x4d, 0xe6, 0x51, 0xe0, 0xdc, 0xfa, 0xd0, 0x0a, 0x4c, 0xf0, 0x53, 0x52, 0x21, 0x34, 0xbf, - 0xab, 0x87, 0x05, 0xe3, 0x89, 0xb5, 0x34, 0x09, 0xce, 0x2a, 0x67, 0xff, 0xf2, 0x30, 0xe4, 0xb6, - 0xe2, 0x3d, 0xbb, 0xd9, 0x7b, 0x76, 0xb3, 0xf7, 0xec, 0x66, 0xef, 0xd9, 0xcd, 0xde, 0xb3, 0x9b, - 0xbd, 0x67, 0x37, 0x7b, 0x97, 0xda, 0xcd, 0xfe, 0x9a, 0x05, 0x27, 0xd5, 0xf1, 0x65, 0x5c, 0xd8, - 0x3f, 0x0b, 0x13, 0x7c, 0xb9, 0x19, 0x3e, 0xc6, 0xe2, 0xb8, 0xbe, 0x9c, 0x39, 0x73, 0x13, 0xbe, - 0xf0, 0x46, 0x41, 0xfe, 0xa8, 0x28, 0x03, 0x81, 0xb3, 0xaa, 0xb1, 0x7f, 0x61, 0x00, 0x7a, 0x17, + 0xb1, 0x62, 0x3f, 0x78, 0xaa, 0xdd, 0xc0, 0x9b, 0xcc, 0x4f, 0xdc, 0xdf, 0x2f, 0x8f, 0xe1, 0x04, + 0x1b, 0x9c, 0x62, 0x8c, 0xce, 0x42, 0xcf, 0x0e, 0x3d, 0xf9, 0x7a, 0x58, 0xf7, 0x33, 0xf5, 0x07, + 0xd3, 0xe4, 0x30, 0xa8, 0xfd, 0x63, 0x16, 0x9c, 0x4e, 0xf5, 0x8c, 0xd0, 0x68, 0x1d, 0xf1, 0x28, + 0x24, 0x35, 0x4c, 0x85, 0xce, 0x1a, 0x26, 0xfb, 0x6f, 0x59, 0x70, 0x62, 0x61, 0xa7, 0x19, 0xed, + 0xcd, 0xbb, 0xa6, 0x91, 0xf8, 0x83, 0xd0, 0xb7, 0x43, 0xea, 0x6e, 0x6b, 0x47, 0x8c, 0x5c, 0x59, + 0x9e, 0x0e, 0x2b, 0x0c, 0x7a, 0xb0, 0x5f, 0x1e, 0xae, 0x46, 0x7e, 0xe0, 0x6c, 0x12, 0x0e, 0xc0, + 0x82, 0x9c, 0x9d, 0xb1, 0xee, 0x3d, 0xb2, 0xec, 0xee, 0xb8, 0xd1, 0x83, 0xcd, 0x76, 0x61, 0xdf, + 0x95, 0x4c, 0x70, 0xcc, 0xcf, 0xfe, 0xba, 0x05, 0xa3, 0x72, 0xde, 0xcf, 0xd4, 0xeb, 0x01, 0x09, + 0x43, 0x34, 0x05, 0x05, 0xb7, 0x29, 0x5a, 0x09, 0xa2, 0x95, 0x85, 0xa5, 0x0a, 0x2e, 0xb8, 0x4d, + 0x29, 0xce, 0xb3, 0x03, 0xa8, 0x68, 0x9a, 0xba, 0xaf, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x12, 0x0c, + 0x78, 0x7e, 0x9d, 0x4b, 0xc4, 0x5c, 0x94, 0x60, 0x13, 0x6c, 0x55, 0xc0, 0xb0, 0xc2, 0xa2, 0x0a, + 0x94, 0xb8, 0x23, 0x64, 0x3c, 0x69, 0xbb, 0x72, 0xa7, 0x64, 0x5f, 0xb6, 0x26, 0x4b, 0xe2, 0x98, + 0x89, 0xfd, 0x1b, 0x16, 0x0c, 0xc9, 0x2f, 0xeb, 0xf2, 0xae, 0x42, 0x97, 0x56, 0x7c, 0x4f, 0x89, + 0x97, 0x16, 0xbd, 0x6b, 0x30, 0x8c, 0x71, 0xc5, 0x28, 0x1e, 0xea, 0x8a, 0x71, 0x05, 0x06, 0x9d, + 0x66, 0xb3, 0x62, 0xde, 0x4f, 0xd8, 0x54, 0x9a, 0x89, 0xc1, 0x58, 0xa7, 0xb1, 0x7f, 0xb4, 0x00, + 0x23, 0xf2, 0x0b, 0xaa, 0xad, 0xf5, 0x90, 0x44, 0x68, 0x0d, 0x4a, 0x0e, 0x1f, 0x25, 0x22, 0x27, + 0xf9, 0x63, 0xd9, 0x7a, 0x33, 0x63, 0x48, 0x63, 0x41, 0x6b, 0x46, 0x96, 0xc6, 0x31, 0x23, 0xd4, + 0x80, 0x71, 0xcf, 0x8f, 0xd8, 0xa1, 0xab, 0xf0, 0xed, 0x4c, 0x99, 0x49, 0xee, 0x67, 0x04, 0xf7, + 0xf1, 0xd5, 0x24, 0x17, 0x9c, 0x66, 0x8c, 0x16, 0xa4, 0x2e, 0xb2, 0x98, 0xaf, 0x44, 0xd2, 0x07, + 0x2e, 0x5b, 0x15, 0x69, 0xff, 0xaa, 0x05, 0x25, 0x49, 0x76, 0x1c, 0x56, 0xeb, 0x15, 0xe8, 0x0f, + 0xd9, 0x20, 0xc8, 0xae, 0xb1, 0xdb, 0x35, 0x9c, 0x8f, 0x57, 0x2c, 0x4b, 0xf0, 0xff, 0x21, 0x96, + 0x3c, 0x98, 0x29, 0x4a, 0x35, 0xff, 0x5d, 0x62, 0x8a, 0x52, 0xed, 0xc9, 0x39, 0x94, 0xfe, 0x94, + 0xb5, 0x59, 0xd3, 0xed, 0x52, 0x91, 0xb7, 0x19, 0x90, 0x0d, 0xf7, 0x6e, 0x52, 0xe4, 0xad, 0x30, + 0x28, 0x16, 0x58, 0xf4, 0x16, 0x0c, 0xd5, 0xa4, 0x0d, 0x22, 0x5e, 0xe1, 0x17, 0xdb, 0xda, 0xc3, + 0x94, 0xe9, 0x94, 0xeb, 0xd0, 0xe6, 0xb4, 0xf2, 0xd8, 0xe0, 0x66, 0x3a, 0xfa, 0x14, 0x3b, 0x39, + 0xfa, 0xc4, 0x7c, 0xf3, 0xdd, 0x5e, 0x7e, 0xdc, 0x82, 0x3e, 0xae, 0x7b, 0xee, 0x4e, 0xf5, 0xaf, + 0x59, 0x92, 0xe3, 0xbe, 0xbb, 0x45, 0x81, 0x42, 0xd2, 0x40, 0x2b, 0x50, 0x62, 0x3f, 0x98, 0xee, + 0xbc, 0x98, 0xff, 0x0e, 0x87, 0xd7, 0xaa, 0x37, 0xf0, 0x96, 0x2c, 0x86, 0x63, 0x0e, 0xf6, 0x8f, + 0x14, 0xe9, 0xee, 0x16, 0x93, 0x1a, 0x87, 0xbe, 0xf5, 0xf0, 0x0e, 0xfd, 0xc2, 0xc3, 0x3a, 0xf4, + 0x37, 0x61, 0xb4, 0xa6, 0xd9, 0x9d, 0xe3, 0x91, 0xbc, 0xd4, 0x76, 0x92, 0x68, 0x26, 0x6a, 0xae, + 0x9d, 0x9b, 0x33, 0x99, 0xe0, 0x24, 0x57, 0xf4, 0x09, 0x18, 0xe2, 0xe3, 0x2c, 0x6a, 0xe1, 0xbe, + 0x52, 0x4f, 0xe4, 0xcf, 0x17, 0xbd, 0x0a, 0xae, 0xcd, 0xd5, 0x8a, 0x63, 0x83, 0x99, 0xfd, 0x97, + 0x16, 0xa0, 0x85, 0xe6, 0x16, 0xd9, 0x21, 0x81, 0xd3, 0x88, 0xcd, 0x47, 0x3f, 0x68, 0xc1, 0x24, + 0x49, 0x81, 0xe7, 0xfc, 0x9d, 0x1d, 0x71, 0x59, 0xcc, 0xd1, 0x67, 0x2c, 0xe4, 0x94, 0x51, 0x0f, + 0x95, 0x26, 0xf3, 0x28, 0x70, 0x6e, 0x7d, 0x68, 0x05, 0x26, 0xf8, 0x29, 0xa9, 0x10, 0x9a, 0xdf, + 0xd5, 0x23, 0x82, 0xf1, 0xc4, 0x5a, 0x9a, 0x04, 0x67, 0x95, 0xb3, 0x7f, 0x75, 0x18, 0x72, 0x5b, + 0xf1, 0x9e, 0xdd, 0xec, 0x3d, 0xbb, 0xd9, 0x7b, 0x76, 0xb3, 0xf7, 0xec, 0x66, 0xef, 0xd9, 0xcd, + 0xde, 0xb3, 0x9b, 0xbd, 0x4b, 0xed, 0x66, 0xff, 0xb7, 0x05, 0x27, 0xd5, 0xf1, 0x65, 0x5c, 0xd8, + 0x3f, 0x0b, 0x13, 0x7c, 0xb9, 0x19, 0x3e, 0xc6, 0xe2, 0xb8, 0xbe, 0x92, 0x39, 0x73, 0x13, 0xbe, + 0xf0, 0x46, 0x41, 0xfe, 0xa8, 0x28, 0x03, 0x81, 0xb3, 0xaa, 0xb1, 0x7f, 0x69, 0x00, 0x7a, 0x17, 0x76, 0x89, 0x17, 0x1d, 0xc3, 0xd5, 0xa6, 0x06, 0x23, 0xae, 0xb7, 0xeb, 0x37, 0x76, 0x49, 0x9d, - 0xe3, 0x0f, 0x73, 0x03, 0x3f, 0x25, 0x58, 0x8f, 0x2c, 0x19, 0x2c, 0x70, 0x82, 0xe5, 0x83, 0xb0, - 0x3e, 0x5c, 0x81, 0x3e, 0x7e, 0xf8, 0x08, 0xd3, 0x43, 0xe6, 0x9e, 0xcd, 0x3a, 0x51, 0x1c, 0xa9, + 0xe3, 0x0f, 0x73, 0x03, 0x3f, 0x25, 0x58, 0x8f, 0x2c, 0x19, 0x2c, 0x70, 0x82, 0xe5, 0xc3, 0xb0, + 0x3e, 0x5c, 0x85, 0x3e, 0x7e, 0xf8, 0x08, 0xd3, 0x43, 0xe6, 0x9e, 0xcd, 0x3a, 0x51, 0x1c, 0xa9, 0xb1, 0x65, 0x84, 0x1f, 0x6e, 0xa2, 0x38, 0xfa, 0x0c, 0x8c, 0x6c, 0xb8, 0x41, 0x18, 0xad, 0xb9, - 0x3b, 0xf4, 0x68, 0xd8, 0x69, 0xde, 0x87, 0xb5, 0x41, 0xf5, 0xc3, 0xa2, 0xc1, 0x09, 0x27, 0x38, + 0x3b, 0xf4, 0x68, 0xd8, 0x69, 0x3e, 0x80, 0xb5, 0x41, 0xf5, 0xc3, 0xa2, 0xc1, 0x09, 0x27, 0x38, 0xa3, 0x4d, 0x18, 0x6e, 0x38, 0x7a, 0x55, 0xfd, 0x87, 0xae, 0x4a, 0x9d, 0x0e, 0xcb, 0x3a, 0x23, 0x6c, 0xf2, 0xa5, 0xcb, 0xa9, 0xc6, 0x14, 0xe6, 0x03, 0x4c, 0x9d, 0xa1, 0x96, 0x13, 0xd7, 0x94, 0x73, 0x1c, 0x15, 0xd0, 0x98, 0x23, 0x7b, 0xc9, 0x14, 0xd0, 0x34, 0x77, 0xf5, 0x4f, 0x43, 0x89, - 0xd0, 0x2e, 0xa4, 0x8c, 0xc5, 0x01, 0x73, 0xa9, 0xbb, 0xb6, 0xae, 0xb8, 0xb5, 0xc0, 0x37, 0xed, + 0xd0, 0x2e, 0xa4, 0x8c, 0xc5, 0x01, 0x73, 0xb9, 0xbb, 0xb6, 0xae, 0xb8, 0xb5, 0xc0, 0x37, 0xed, 0x3c, 0x0b, 0x92, 0x13, 0x8e, 0x99, 0xa2, 0x39, 0xe8, 0x0b, 0x49, 0xe0, 0x2a, 0x5d, 0x72, 0x9b, 0x61, 0x64, 0x64, 0xfc, 0xd5, 0x1a, 0xff, 0x8d, 0x45, 0x51, 0x3a, 0xbd, 0x1c, 0xa6, 0x8a, 0x65, - 0x87, 0x81, 0x36, 0xbd, 0x66, 0x18, 0x14, 0x0b, 0x2c, 0x7a, 0x0d, 0xfa, 0x03, 0xd2, 0x60, 0x86, - 0xc4, 0xe1, 0xee, 0x27, 0x39, 0xb7, 0x4b, 0xf2, 0x72, 0x58, 0x32, 0x40, 0xd7, 0x00, 0x05, 0x84, + 0x87, 0x81, 0x36, 0xbd, 0x66, 0x18, 0x14, 0x0b, 0x2c, 0x7a, 0x1d, 0xfa, 0x03, 0xd2, 0x60, 0x86, + 0xc4, 0xe1, 0xee, 0x27, 0x39, 0xb7, 0x4b, 0xf2, 0x72, 0x58, 0x32, 0x40, 0xd7, 0x01, 0x05, 0x84, 0x0a, 0x78, 0xae, 0xb7, 0xa9, 0xdc, 0xbb, 0xc5, 0x46, 0xab, 0x04, 0x69, 0x1c, 0x53, 0xc8, 0x07, - 0x8b, 0x38, 0xa3, 0x18, 0xba, 0x02, 0xe3, 0x0a, 0xba, 0xe4, 0x85, 0x91, 0x43, 0x37, 0xb8, 0x51, - 0xc6, 0x4b, 0xe9, 0x57, 0x70, 0x92, 0x00, 0xa7, 0xcb, 0xd8, 0x5f, 0xb6, 0x80, 0xf7, 0xf3, 0x31, - 0x68, 0x15, 0x5e, 0x35, 0xb5, 0x0a, 0xa7, 0x73, 0x47, 0x2e, 0x47, 0xa3, 0xf0, 0x65, 0x0b, 0x06, - 0xb5, 0x91, 0x8d, 0xe7, 0xac, 0xd5, 0x66, 0xce, 0xb6, 0x60, 0x8c, 0xce, 0xf4, 0xeb, 0xeb, 0x21, - 0x09, 0x76, 0x49, 0x9d, 0x4d, 0xcc, 0xc2, 0xfd, 0x4d, 0x4c, 0xe5, 0x4a, 0xba, 0x9c, 0x60, 0x88, - 0x53, 0x55, 0xd8, 0x9f, 0x96, 0x4d, 0x55, 0x9e, 0xb7, 0x35, 0x35, 0xe6, 0x09, 0xcf, 0x5b, 0x35, - 0xaa, 0x38, 0xa6, 0xa1, 0x4b, 0x6d, 0xcb, 0x0f, 0xa3, 0xa4, 0xe7, 0xed, 0x55, 0x3f, 0x8c, 0x30, - 0xc3, 0xd8, 0xcf, 0x03, 0x2c, 0xdc, 0x21, 0x35, 0x3e, 0x63, 0xf5, 0x4b, 0x8f, 0x95, 0x7f, 0xe9, - 0xb1, 0x7f, 0xc7, 0x82, 0x91, 0xc5, 0x39, 0xe3, 0xe4, 0x9a, 0x06, 0xe0, 0x37, 0xb5, 0x5b, 0xb7, - 0x56, 0xa5, 0xfb, 0x07, 0xb7, 0x80, 0x2b, 0x28, 0xd6, 0x28, 0xd0, 0x69, 0x28, 0x36, 0x5a, 0x9e, - 0x50, 0x7b, 0xf6, 0xd3, 0xe3, 0x71, 0xb9, 0xe5, 0x61, 0x0a, 0xd3, 0x1e, 0x2b, 0x15, 0xbb, 0x7e, - 0xac, 0xd4, 0x31, 0x48, 0x09, 0x2a, 0x43, 0xef, 0xed, 0xdb, 0x6e, 0x9d, 0x3f, 0x05, 0x17, 0xae, - 0x29, 0xb7, 0x6e, 0x2d, 0xcd, 0x87, 0x98, 0xc3, 0xed, 0x2f, 0x16, 0x61, 0x6a, 0xb1, 0x41, 0xee, - 0xbc, 0xcd, 0xe7, 0xf0, 0xdd, 0x3e, 0xb5, 0x3a, 0x9c, 0x02, 0xe9, 0xb0, 0xcf, 0xe9, 0x3a, 0xf7, - 0xc7, 0x06, 0xf4, 0x73, 0xc7, 0x53, 0xf9, 0x38, 0x3e, 0xd3, 0xdc, 0x97, 0xdf, 0x21, 0xd3, 0xdc, - 0x81, 0x55, 0x98, 0xfb, 0xd4, 0x81, 0x29, 0xa0, 0x58, 0x32, 0x9f, 0x7a, 0x19, 0x86, 0x74, 0xca, - 0x43, 0x3d, 0x6c, 0xfd, 0x7f, 0x8b, 0x30, 0x46, 0x5b, 0xf0, 0x40, 0x07, 0xe2, 0x46, 0x7a, 0x20, - 0x8e, 0xfa, 0x71, 0x63, 0xe7, 0xd1, 0x78, 0x33, 0x39, 0x1a, 0x97, 0xf3, 0x46, 0xe3, 0xb8, 0xc7, - 0xe0, 0xbb, 0x2d, 0x98, 0x58, 0x6c, 0xf8, 0xb5, 0xed, 0xc4, 0x03, 0xc4, 0x17, 0x61, 0x90, 0x6e, - 0xc7, 0xa1, 0x11, 0x8b, 0xc3, 0x88, 0xce, 0x22, 0x50, 0x58, 0xa7, 0xd3, 0x8a, 0xdd, 0xb8, 0xb1, - 0x34, 0x9f, 0x15, 0xd4, 0x45, 0xa0, 0xb0, 0x4e, 0x67, 0xff, 0x96, 0x05, 0x67, 0xaf, 0xcc, 0x2d, - 0xc4, 0x53, 0x31, 0x15, 0x57, 0xe6, 0x02, 0xf4, 0x35, 0xeb, 0x5a, 0x53, 0x62, 0xb5, 0xf0, 0x3c, - 0x6b, 0x85, 0xc0, 0xbe, 0x5b, 0x62, 0x26, 0xdd, 0x00, 0xb8, 0x82, 0x2b, 0x73, 0x62, 0xdf, 0x95, - 0x56, 0x20, 0x2b, 0xd7, 0x0a, 0xf4, 0x38, 0xf4, 0xd3, 0x73, 0xc1, 0xad, 0xc9, 0x76, 0x73, 0x83, - 0x3e, 0x07, 0x61, 0x89, 0xb3, 0x7f, 0xc6, 0x82, 0x89, 0x2b, 0x6e, 0x44, 0x0f, 0xed, 0x64, 0xe0, + 0x8b, 0x38, 0xa3, 0x18, 0xba, 0x0a, 0xe3, 0x0a, 0xba, 0xe4, 0x85, 0x91, 0x43, 0x37, 0xb8, 0x51, + 0xc6, 0x4b, 0xe9, 0x57, 0x70, 0x92, 0x00, 0xa7, 0xcb, 0xd8, 0x3f, 0x67, 0x01, 0xef, 0xe7, 0x63, + 0xd0, 0x2a, 0xbc, 0x66, 0x6a, 0x15, 0xce, 0xe4, 0x8e, 0x5c, 0x8e, 0x46, 0xe1, 0xe7, 0x2c, 0x18, + 0xd4, 0x46, 0x36, 0x9e, 0xb3, 0x56, 0x9b, 0x39, 0xdb, 0x82, 0x31, 0x3a, 0xd3, 0x6f, 0xac, 0x87, + 0x24, 0xd8, 0x25, 0x75, 0x36, 0x31, 0x0b, 0x0f, 0x36, 0x31, 0x95, 0x2b, 0xe9, 0x72, 0x82, 0x21, + 0x4e, 0x55, 0x61, 0x7f, 0x5a, 0x36, 0x55, 0x79, 0xde, 0xd6, 0xd4, 0x98, 0x27, 0x3c, 0x6f, 0xd5, + 0xa8, 0xe2, 0x98, 0x86, 0x2e, 0xb5, 0x2d, 0x3f, 0x8c, 0x92, 0x9e, 0xb7, 0xd7, 0xfc, 0x30, 0xc2, + 0x0c, 0x63, 0xbf, 0x00, 0xb0, 0x70, 0x97, 0xd4, 0xf8, 0x8c, 0xd5, 0x2f, 0x3d, 0x56, 0xfe, 0xa5, + 0xc7, 0xfe, 0x3d, 0x0b, 0x46, 0x16, 0xe7, 0x8c, 0x93, 0x6b, 0x1a, 0x80, 0xdf, 0xd4, 0x6e, 0xdf, + 0x5e, 0x95, 0xee, 0x1f, 0xdc, 0x02, 0xae, 0xa0, 0x58, 0xa3, 0x40, 0x67, 0xa0, 0xd8, 0x68, 0x79, + 0x42, 0xed, 0xd9, 0x4f, 0x8f, 0xc7, 0xe5, 0x96, 0x87, 0x29, 0x4c, 0x7b, 0xac, 0x54, 0xec, 0xfa, + 0xb1, 0x52, 0xc7, 0x20, 0x25, 0xa8, 0x0c, 0xbd, 0x77, 0xee, 0xb8, 0x75, 0xfe, 0x14, 0x5c, 0xb8, + 0xa6, 0xdc, 0xbe, 0xbd, 0x34, 0x1f, 0x62, 0x0e, 0xb7, 0xbf, 0x58, 0x84, 0xa9, 0xc5, 0x06, 0xb9, + 0xfb, 0x0e, 0x9f, 0xc3, 0x77, 0xfb, 0xd4, 0xea, 0x70, 0x0a, 0xa4, 0xc3, 0x3e, 0xa7, 0xeb, 0xdc, + 0x1f, 0x1b, 0xd0, 0xcf, 0x1d, 0x4f, 0xe5, 0xe3, 0xf8, 0x4c, 0x73, 0x5f, 0x7e, 0x87, 0x4c, 0x73, + 0x07, 0x56, 0x61, 0xee, 0x53, 0x07, 0xa6, 0x80, 0x62, 0xc9, 0x7c, 0xea, 0x15, 0x18, 0xd2, 0x29, + 0x0f, 0xf5, 0xb0, 0xf5, 0xbb, 0x8b, 0x30, 0x46, 0x5b, 0xf0, 0x50, 0x07, 0xe2, 0x66, 0x7a, 0x20, + 0x8e, 0xfa, 0x71, 0x63, 0xe7, 0xd1, 0x78, 0x2b, 0x39, 0x1a, 0x57, 0xf2, 0x46, 0xe3, 0xb8, 0xc7, + 0xe0, 0x7b, 0x2c, 0x98, 0x58, 0x6c, 0xf8, 0xb5, 0xed, 0xc4, 0x03, 0xc4, 0x97, 0x60, 0x90, 0x6e, + 0xc7, 0xa1, 0x11, 0x8b, 0xc3, 0x88, 0xce, 0x22, 0x50, 0x58, 0xa7, 0xd3, 0x8a, 0xdd, 0xbc, 0xb9, + 0x34, 0x9f, 0x15, 0xd4, 0x45, 0xa0, 0xb0, 0x4e, 0x67, 0xff, 0x8e, 0x05, 0xe7, 0xae, 0xce, 0x2d, + 0xc4, 0x53, 0x31, 0x15, 0x57, 0xe6, 0x22, 0xf4, 0x35, 0xeb, 0x5a, 0x53, 0x62, 0xb5, 0xf0, 0x3c, + 0x6b, 0x85, 0xc0, 0xbe, 0x5b, 0x62, 0x26, 0xdd, 0x04, 0xb8, 0x8a, 0x2b, 0x73, 0x62, 0xdf, 0x95, + 0x56, 0x20, 0x2b, 0xd7, 0x0a, 0xf4, 0x04, 0xf4, 0xd3, 0x73, 0xc1, 0xad, 0xc9, 0x76, 0x73, 0x83, + 0x3e, 0x07, 0x61, 0x89, 0xb3, 0x7f, 0xd6, 0x82, 0x89, 0xab, 0x6e, 0x44, 0x0f, 0xed, 0x64, 0xe0, 0x14, 0x7a, 0x6a, 0x87, 0x6e, 0xe4, 0x07, 0x7b, 0xc9, 0xc0, 0x29, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x3f, 0x68, 0xd7, 0x65, 0x2f, 0x29, 0x0a, 0xa6, 0xdd, 0x0d, 0x0b, 0x38, 0x56, 0x14, 0xb4, 0xbf, 0xea, 0x6e, 0xc0, 0x54, 0x96, 0x7b, 0x62, 0xe3, 0x56, 0xfd, 0x35, 0x2f, 0x11, 0x38, 0xa6, 0xb1, - 0xff, 0xd4, 0x82, 0xf2, 0x95, 0x46, 0x2b, 0x8c, 0x48, 0xb0, 0x11, 0xe6, 0x6c, 0xba, 0xcf, 0x43, + 0xff, 0xdc, 0x82, 0xf2, 0xd5, 0x46, 0x2b, 0x8c, 0x48, 0xb0, 0x11, 0xe6, 0x6c, 0xba, 0x2f, 0x40, 0x89, 0x48, 0x03, 0x81, 0x7c, 0xf2, 0x29, 0x05, 0x51, 0x65, 0x39, 0xe0, 0xf1, 0x5b, 0x14, 0x5d, 0x17, 0xaf, 0xa4, 0x0f, 0xf7, 0xcc, 0x75, 0x11, 0x10, 0xd1, 0xeb, 0xd2, 0x03, 0xda, 0xb0, 0xc8, - 0x18, 0x0b, 0x29, 0x2c, 0xce, 0x28, 0x61, 0xff, 0xa8, 0x05, 0x27, 0xd5, 0x07, 0xbf, 0xeb, 0x3e, - 0xd3, 0xfe, 0x5a, 0x01, 0x86, 0xaf, 0xae, 0xad, 0x55, 0xae, 0x90, 0x48, 0x9b, 0x95, 0xed, 0xcd, + 0x18, 0x0b, 0x29, 0x2c, 0xce, 0x28, 0x61, 0xff, 0x98, 0x05, 0x27, 0xd5, 0x07, 0xbf, 0xeb, 0x3e, + 0xd3, 0xfe, 0x6a, 0x01, 0x86, 0xaf, 0xad, 0xad, 0x55, 0xae, 0x92, 0x48, 0x9b, 0x95, 0xed, 0xcd, 0xfe, 0x58, 0xb3, 0x5e, 0xb6, 0xbb, 0x23, 0xb6, 0x22, 0xb7, 0x31, 0xcd, 0xe3, 0xa2, 0x4d, 0x2f, - 0x79, 0xd1, 0xf5, 0xa0, 0x1a, 0x05, 0xae, 0xb7, 0x99, 0x39, 0xd3, 0xa5, 0xcc, 0x52, 0xcc, 0x93, - 0x59, 0xd0, 0xf3, 0xd0, 0xc7, 0x02, 0xb3, 0xc9, 0x41, 0x78, 0x58, 0x5d, 0xb1, 0x18, 0xf4, 0x60, - 0xbf, 0x5c, 0xba, 0x81, 0x97, 0xf8, 0x1f, 0x2c, 0x48, 0xd1, 0x0d, 0x18, 0xdc, 0x8a, 0xa2, 0xe6, - 0x55, 0xe2, 0xd4, 0x49, 0x20, 0x77, 0xd9, 0x73, 0x59, 0xbb, 0x2c, 0xed, 0x04, 0x4e, 0x16, 0x6f, + 0x79, 0xd1, 0x8d, 0xa0, 0x1a, 0x05, 0xae, 0xb7, 0x99, 0x39, 0xd3, 0xa5, 0xcc, 0x52, 0xcc, 0x93, + 0x59, 0xd0, 0x0b, 0xd0, 0xc7, 0x02, 0xb3, 0xc9, 0x41, 0x78, 0x44, 0x5d, 0xb1, 0x18, 0xf4, 0x60, + 0xbf, 0x5c, 0xba, 0x89, 0x97, 0xf8, 0x1f, 0x2c, 0x48, 0xd1, 0x4d, 0x18, 0xdc, 0x8a, 0xa2, 0xe6, + 0x35, 0xe2, 0xd4, 0x49, 0x20, 0x77, 0xd9, 0xf3, 0x59, 0xbb, 0x2c, 0xed, 0x04, 0x4e, 0x16, 0x6f, 0x4c, 0x31, 0x2c, 0xc4, 0x3a, 0x1f, 0xbb, 0x0a, 0x10, 0xe3, 0x8e, 0xc8, 0x70, 0x63, 0xaf, 0x41, - 0x89, 0x7e, 0xee, 0x4c, 0xc3, 0x75, 0xda, 0x9b, 0xc6, 0x9f, 0x86, 0x92, 0x34, 0x7c, 0x87, 0x22, - 0x8a, 0x03, 0x3b, 0x91, 0xa4, 0x5d, 0x3c, 0xc4, 0x31, 0xde, 0x7e, 0x0c, 0x84, 0x6f, 0x69, 0x3b, - 0x96, 0xf6, 0x06, 0x9c, 0x60, 0x4e, 0xb2, 0x4e, 0xb4, 0x65, 0xcc, 0xd1, 0xce, 0x93, 0xe1, 0x19, - 0x71, 0xaf, 0xe3, 0x5f, 0x36, 0xa9, 0x3d, 0x4e, 0x1e, 0x92, 0x1c, 0xe3, 0x3b, 0x9e, 0xfd, 0x27, - 0x3d, 0xf0, 0xf0, 0x52, 0x35, 0x3f, 0xfc, 0xd0, 0x4b, 0x30, 0xc4, 0xc5, 0x45, 0x3a, 0x35, 0x9c, - 0x86, 0xa8, 0x57, 0x69, 0x40, 0xd7, 0x34, 0x1c, 0x36, 0x28, 0xd1, 0x59, 0x28, 0xba, 0x6f, 0x79, - 0xc9, 0xa7, 0x7b, 0x4b, 0xaf, 0xaf, 0x62, 0x0a, 0xa7, 0x68, 0x2a, 0x79, 0xf2, 0x2d, 0x5d, 0xa1, - 0x95, 0xf4, 0xf9, 0x2a, 0x8c, 0xb8, 0x61, 0x2d, 0x74, 0x97, 0x3c, 0xba, 0x4e, 0xb5, 0x95, 0xae, + 0x89, 0x7e, 0xee, 0x4c, 0xc3, 0x75, 0xda, 0x9b, 0xc6, 0x9f, 0x81, 0x92, 0x34, 0x7c, 0x87, 0x22, + 0x8a, 0x03, 0x3b, 0x91, 0xa4, 0x5d, 0x3c, 0xc4, 0x31, 0xde, 0x7e, 0x1c, 0x84, 0x6f, 0x69, 0x3b, + 0x96, 0xf6, 0x06, 0x9c, 0x60, 0x4e, 0xb2, 0x4e, 0xb4, 0x65, 0xcc, 0xd1, 0xce, 0x93, 0xe1, 0x59, + 0x71, 0xaf, 0xe3, 0x5f, 0x36, 0xa9, 0x3d, 0x4e, 0x1e, 0x92, 0x1c, 0xe3, 0x3b, 0x9e, 0xfd, 0x67, + 0x3d, 0xf0, 0xc8, 0x52, 0x35, 0x3f, 0xfc, 0xd0, 0xcb, 0x30, 0xc4, 0xc5, 0x45, 0x3a, 0x35, 0x9c, + 0x86, 0xa8, 0x57, 0x69, 0x40, 0xd7, 0x34, 0x1c, 0x36, 0x28, 0xd1, 0x39, 0x28, 0xba, 0x6f, 0x7b, + 0xc9, 0xa7, 0x7b, 0x4b, 0x6f, 0xac, 0x62, 0x0a, 0xa7, 0x68, 0x2a, 0x79, 0xf2, 0x2d, 0x5d, 0xa1, + 0x95, 0xf4, 0xf9, 0x1a, 0x8c, 0xb8, 0x61, 0x2d, 0x74, 0x97, 0x3c, 0xba, 0x4e, 0xb5, 0x95, 0xae, 0x74, 0x0e, 0xb4, 0xd1, 0x0a, 0x8b, 0x13, 0xd4, 0xda, 0xf9, 0xd2, 0xdb, 0xb5, 0xf4, 0xda, 0x31, 0xf8, 0x01, 0xdd, 0xfe, 0x9b, 0xec, 0xeb, 0x42, 0xa6, 0x82, 0x17, 0xdb, 0x3f, 0xff, 0xe0, 0x10, 0x4b, 0x1c, 0xbd, 0xd0, 0xd5, 0xb6, 0x9c, 0xe6, 0x4c, 0x2b, 0xda, 0x9a, 0x77, 0xc3, 0x9a, 0xbf, - 0x4b, 0x82, 0x3d, 0x76, 0x17, 0x1f, 0x88, 0x2f, 0x74, 0x0a, 0x31, 0x77, 0x75, 0xa6, 0x42, 0x29, + 0x4b, 0x82, 0x3d, 0x76, 0x17, 0x1f, 0x88, 0x2f, 0x74, 0x0a, 0x31, 0x77, 0x6d, 0xa6, 0x42, 0x29, 0x71, 0xba, 0x0c, 0x9a, 0x81, 0x51, 0x09, 0xac, 0x92, 0x90, 0x1d, 0x01, 0x83, 0x8c, 0x8d, 0x7a, 0x4c, 0x27, 0xc0, 0x8a, 0x49, 0x92, 0xde, 0x14, 0x70, 0xe1, 0x28, 0x04, 0xdc, 0x0f, 0xc2, 0xb0, 0xeb, 0xb9, 0x91, 0xeb, 0x44, 0x3e, 0xb7, 0x1f, 0xf1, 0x6b, 0x37, 0x53, 0x30, 0x2f, 0xe9, 0x08, - 0x6c, 0xd2, 0xd9, 0xff, 0xa1, 0x07, 0xc6, 0xd9, 0xb0, 0xbd, 0x37, 0xc3, 0xbe, 0x9d, 0x66, 0xd8, - 0x8d, 0xf4, 0x0c, 0x3b, 0x0a, 0xc9, 0xfd, 0xbe, 0xa7, 0xd9, 0x67, 0xa0, 0xa4, 0xde, 0x0f, 0xca, + 0x6c, 0xd2, 0xd9, 0xff, 0xb6, 0x07, 0xc6, 0xd9, 0xb0, 0xbd, 0x37, 0xc3, 0xbe, 0x9d, 0x66, 0xd8, + 0xcd, 0xf4, 0x0c, 0x3b, 0x0a, 0xc9, 0xfd, 0x81, 0xa7, 0xd9, 0x67, 0xa0, 0xa4, 0xde, 0x0f, 0xca, 0x07, 0xc4, 0x56, 0xce, 0x03, 0xe2, 0xce, 0xa7, 0xb7, 0x74, 0x49, 0x2b, 0x66, 0xba, 0xa4, 0x7d, - 0xc5, 0x82, 0xd8, 0xb0, 0x80, 0x5e, 0x87, 0x52, 0xd3, 0x67, 0x1e, 0xae, 0x81, 0x74, 0x1b, 0x7f, - 0xac, 0xad, 0x65, 0x82, 0x47, 0x60, 0x0b, 0x78, 0x2f, 0x54, 0x64, 0x51, 0x1c, 0x73, 0x41, 0xd7, - 0xa0, 0xbf, 0x19, 0x90, 0x6a, 0xc4, 0xc2, 0x03, 0x75, 0xcf, 0x90, 0xcf, 0x1a, 0x5e, 0x10, 0x4b, - 0x0e, 0xf6, 0x7f, 0xb2, 0x60, 0x2c, 0x49, 0x8a, 0x3e, 0x0c, 0x3d, 0xe4, 0x0e, 0xa9, 0x89, 0xf6, - 0x66, 0x1e, 0xc5, 0xb1, 0x6a, 0x82, 0x77, 0x00, 0xfd, 0x8f, 0x59, 0x29, 0x74, 0x15, 0xfa, 0xe9, - 0x39, 0x7c, 0x45, 0x85, 0xc2, 0x7b, 0x24, 0xef, 0x2c, 0x57, 0x02, 0x0d, 0x6f, 0x9c, 0x00, 0x61, + 0xd9, 0x82, 0xd8, 0xb0, 0x80, 0xde, 0x80, 0x52, 0xd3, 0x67, 0x1e, 0xae, 0x81, 0x74, 0x1b, 0x7f, + 0xbc, 0xad, 0x65, 0x82, 0x47, 0x60, 0x0b, 0x78, 0x2f, 0x54, 0x64, 0x51, 0x1c, 0x73, 0x41, 0xd7, + 0xa1, 0xbf, 0x19, 0x90, 0x6a, 0xc4, 0xc2, 0x03, 0x75, 0xcf, 0x90, 0xcf, 0x1a, 0x5e, 0x10, 0x4b, + 0x0e, 0xf6, 0xbf, 0xb7, 0x60, 0x2c, 0x49, 0x8a, 0x3e, 0x0c, 0x3d, 0xe4, 0x2e, 0xa9, 0x89, 0xf6, + 0x66, 0x1e, 0xc5, 0xb1, 0x6a, 0x82, 0x77, 0x00, 0xfd, 0x8f, 0x59, 0x29, 0x74, 0x0d, 0xfa, 0xe9, + 0x39, 0x7c, 0x55, 0x85, 0xc2, 0x7b, 0x34, 0xef, 0x2c, 0x57, 0x02, 0x0d, 0x6f, 0x9c, 0x00, 0x61, 0x59, 0x9c, 0xf9, 0x81, 0xd5, 0x9a, 0x55, 0x7a, 0xc5, 0x89, 0xda, 0xdd, 0xc4, 0xd7, 0xe6, 0x2a, - 0x9c, 0x48, 0x70, 0xe3, 0x7e, 0x60, 0x12, 0x88, 0x63, 0x26, 0xf6, 0xcf, 0x59, 0x00, 0xdc, 0xed, + 0x9c, 0x48, 0x70, 0xe3, 0x7e, 0x60, 0x12, 0x88, 0x63, 0x26, 0xf6, 0x2f, 0x58, 0x00, 0xdc, 0xed, 0xcd, 0xf1, 0x36, 0xc9, 0x31, 0x68, 0xd3, 0xe7, 0xa1, 0x27, 0x6c, 0x92, 0x5a, 0x3b, 0xe7, 0xeb, - 0xb8, 0x3d, 0xd5, 0x26, 0xa9, 0xc5, 0x33, 0x8e, 0xfe, 0xc3, 0xac, 0xb4, 0xfd, 0x3d, 0x00, 0x23, - 0x31, 0xd9, 0x52, 0x44, 0x76, 0xd0, 0xb3, 0x46, 0xd0, 0x91, 0xd3, 0x89, 0xa0, 0x23, 0x25, 0x46, - 0xad, 0x29, 0x6e, 0x3f, 0x03, 0xc5, 0x1d, 0xe7, 0x8e, 0xd0, 0xcc, 0x3d, 0xdd, 0xbe, 0x19, 0x94, - 0xff, 0xf4, 0x8a, 0x73, 0x87, 0x5f, 0x5e, 0x9f, 0x96, 0x2b, 0x64, 0xc5, 0xb9, 0xd3, 0xd1, 0x41, + 0xb8, 0x3d, 0xd5, 0x26, 0xa9, 0xc5, 0x33, 0x8e, 0xfe, 0xc3, 0xac, 0xb4, 0xfd, 0xbd, 0x00, 0x23, + 0x31, 0xd9, 0x52, 0x44, 0x76, 0xd0, 0x73, 0x46, 0xd0, 0x91, 0x33, 0x89, 0xa0, 0x23, 0x25, 0x46, + 0xad, 0x29, 0x6e, 0x3f, 0x03, 0xc5, 0x1d, 0xe7, 0xae, 0xd0, 0xcc, 0x3d, 0xd3, 0xbe, 0x19, 0x94, + 0xff, 0xf4, 0x8a, 0x73, 0x97, 0x5f, 0x5e, 0x9f, 0x91, 0x2b, 0x64, 0xc5, 0xb9, 0xdb, 0xd1, 0x41, 0x98, 0x56, 0xc2, 0xea, 0x72, 0x3d, 0xe1, 0xd1, 0xd5, 0x55, 0x5d, 0xae, 0x97, 0xac, 0xcb, 0xf5, - 0xba, 0xa8, 0xcb, 0xf5, 0xd0, 0x5d, 0xe8, 0x17, 0x0e, 0x97, 0x22, 0x2c, 0xd9, 0xa5, 0x2e, 0xea, - 0x13, 0xfe, 0x9a, 0xbc, 0xce, 0x4b, 0xf2, 0x72, 0x2e, 0xa0, 0x1d, 0xeb, 0x95, 0x15, 0xa2, 0xbf, - 0x6e, 0xc1, 0x88, 0xf8, 0x8d, 0xc9, 0x5b, 0x2d, 0x12, 0x46, 0x42, 0x78, 0xfd, 0x40, 0xf7, 0x6d, - 0x10, 0x05, 0x79, 0x53, 0x3e, 0x20, 0xcf, 0x19, 0x13, 0xd9, 0xb1, 0x45, 0x89, 0x56, 0xa0, 0xbf, - 0x67, 0xc1, 0x89, 0x1d, 0xe7, 0x0e, 0xaf, 0x91, 0xc3, 0xb0, 0x13, 0xb9, 0xbe, 0x70, 0x5c, 0xf8, - 0x70, 0x77, 0xc3, 0x9f, 0x2a, 0xce, 0x1b, 0x29, 0xad, 0x94, 0x27, 0xb2, 0x48, 0x3a, 0x36, 0x35, - 0xb3, 0x5d, 0x53, 0x1b, 0x30, 0x20, 0xe7, 0xdb, 0x83, 0xf4, 0xee, 0x66, 0xf5, 0x88, 0xb9, 0xf6, - 0x40, 0xeb, 0xf9, 0x0c, 0x0c, 0xe9, 0x73, 0xec, 0x81, 0xd6, 0xf5, 0x16, 0x4c, 0x64, 0xcc, 0xa5, - 0x07, 0x5a, 0xe5, 0x6d, 0x38, 0x9d, 0x3b, 0x3f, 0x1e, 0xa8, 0x77, 0xfe, 0xd7, 0x2c, 0x7d, 0x1f, - 0x3c, 0x06, 0x93, 0xc6, 0x9c, 0x69, 0xd2, 0x38, 0xd7, 0x7e, 0xe5, 0xe4, 0xd8, 0x35, 0xde, 0xd4, - 0x1b, 0x4d, 0x77, 0x75, 0xf4, 0x1a, 0xf4, 0x35, 0x28, 0x44, 0xba, 0xed, 0xda, 0x9d, 0x57, 0x64, - 0x2c, 0x4c, 0x32, 0x78, 0x88, 0x05, 0x07, 0xfb, 0x17, 0x2d, 0xe8, 0x39, 0x86, 0x9e, 0xc0, 0x66, - 0x4f, 0x3c, 0x9b, 0xcb, 0x5a, 0x44, 0x68, 0x9f, 0xc6, 0xce, 0xed, 0x85, 0x3b, 0x11, 0xf1, 0x42, - 0x76, 0x22, 0x67, 0x76, 0xcc, 0xbe, 0x05, 0x13, 0xcb, 0xbe, 0x53, 0x9f, 0x75, 0x1a, 0x8e, 0x57, - 0x23, 0xc1, 0x92, 0xb7, 0x79, 0x28, 0x9f, 0xf3, 0x42, 0x47, 0x9f, 0xf3, 0x97, 0xa0, 0xcf, 0x6d, - 0x6a, 0x11, 0xa7, 0xcf, 0xd3, 0x0e, 0x5c, 0xaa, 0x88, 0x60, 0xd3, 0xc8, 0xa8, 0x9c, 0x41, 0xb1, - 0xa0, 0xa7, 0x23, 0xcf, 0x9d, 0xbd, 0x7a, 0xf2, 0x47, 0x9e, 0xca, 0xe0, 0xc9, 0x00, 0x4e, 0x86, - 0x5b, 0xf2, 0x16, 0x18, 0x55, 0x88, 0x37, 0x5b, 0x18, 0xfa, 0x5d, 0xfe, 0xa5, 0x62, 0xf8, 0x9f, - 0xc8, 0x96, 0x8d, 0x53, 0x1d, 0xa3, 0xbd, 0x46, 0xe2, 0x00, 0x2c, 0x19, 0xd9, 0x2f, 0x41, 0x66, - 0xc0, 0x8d, 0xce, 0x7a, 0x0f, 0xfb, 0xe3, 0x30, 0xce, 0x4a, 0x1e, 0x52, 0xa7, 0x60, 0x27, 0xb4, - 0xb5, 0x19, 0xc1, 0x43, 0xed, 0x2f, 0x58, 0x30, 0xba, 0x9a, 0x88, 0xa9, 0x78, 0x81, 0xd9, 0x77, - 0x33, 0x8c, 0x04, 0x55, 0x06, 0xc5, 0x02, 0x7b, 0xe4, 0x4a, 0xb4, 0xbf, 0xb4, 0x20, 0x8e, 0x81, - 0x73, 0x0c, 0x82, 0xdf, 0x9c, 0x21, 0xf8, 0x65, 0x8a, 0xc0, 0xaa, 0x39, 0x79, 0x72, 0x1f, 0xba, - 0xa6, 0xa2, 0xc3, 0xb5, 0x91, 0x7e, 0x63, 0x36, 0x7c, 0x2a, 0x8e, 0x98, 0x21, 0xe4, 0x64, 0xbc, - 0x38, 0xfb, 0x77, 0x0b, 0x80, 0x14, 0x6d, 0xd7, 0xd1, 0xeb, 0xd2, 0x25, 0x8e, 0x26, 0x7a, 0xdd, - 0x2e, 0x20, 0xe6, 0xa1, 0x10, 0x38, 0x5e, 0xc8, 0xd9, 0xba, 0x42, 0x6d, 0x78, 0x38, 0xf7, 0x87, - 0x29, 0xf9, 0x9c, 0x6d, 0x39, 0xc5, 0x0d, 0x67, 0xd4, 0xa0, 0x79, 0x9e, 0xf4, 0x76, 0xeb, 0x79, - 0xd2, 0xd7, 0xe1, 0x5d, 0xe6, 0x57, 0x2d, 0x18, 0x56, 0xdd, 0xf4, 0x2e, 0xf1, 0xde, 0x57, 0xed, - 0xc9, 0xd9, 0x7a, 0x2b, 0x5a, 0x93, 0xd9, 0x91, 0xf4, 0x1d, 0xec, 0x7d, 0xad, 0xd3, 0x70, 0xef, - 0x12, 0x15, 0xed, 0xb4, 0x2c, 0xde, 0xcb, 0x0a, 0xe8, 0xc1, 0x7e, 0x79, 0x58, 0xfd, 0xe3, 0xd1, - 0xdc, 0xe3, 0x22, 0xf6, 0x4f, 0xd2, 0xc5, 0x6e, 0x4e, 0x45, 0xf4, 0x22, 0xf4, 0x36, 0xb7, 0x9c, - 0x90, 0x24, 0x5e, 0x39, 0xf5, 0x56, 0x28, 0xf0, 0x60, 0xbf, 0x3c, 0xa2, 0x0a, 0x30, 0x08, 0xe6, - 0xd4, 0xdd, 0xc7, 0x04, 0x4c, 0x4f, 0xce, 0x8e, 0x31, 0x01, 0xff, 0xdc, 0x82, 0x9e, 0x55, 0xba, - 0xc1, 0x3f, 0xf8, 0x2d, 0xe0, 0x55, 0x63, 0x0b, 0x38, 0x93, 0x97, 0x68, 0x23, 0x77, 0xf5, 0x2f, - 0x26, 0x56, 0xff, 0xb9, 0x5c, 0x0e, 0xed, 0x17, 0xfe, 0x0e, 0x0c, 0xb2, 0xf4, 0x1d, 0xe2, 0x45, - 0xd7, 0xf3, 0xc6, 0x82, 0x2f, 0x27, 0x16, 0xfc, 0xa8, 0x46, 0xaa, 0xad, 0xf4, 0x27, 0xa1, 0x5f, - 0x3c, 0x11, 0x4a, 0x3e, 0x53, 0x16, 0xb4, 0x58, 0xe2, 0xed, 0x1f, 0x2b, 0x82, 0x91, 0x2e, 0x04, - 0xfd, 0xb2, 0x05, 0xd3, 0x01, 0x77, 0x1d, 0xae, 0xcf, 0xb7, 0x02, 0xd7, 0xdb, 0xac, 0xd6, 0xb6, - 0x48, 0xbd, 0xd5, 0x70, 0xbd, 0xcd, 0xa5, 0x4d, 0xcf, 0x57, 0xe0, 0x85, 0x3b, 0xa4, 0xd6, 0x62, - 0x66, 0xbd, 0x0e, 0xb9, 0x49, 0x94, 0x0b, 0xfe, 0x73, 0xf7, 0xf6, 0xcb, 0xd3, 0xf8, 0x50, 0xbc, - 0xf1, 0x21, 0xdb, 0x82, 0x7e, 0xcb, 0x82, 0x4b, 0x3c, 0x8b, 0x46, 0xf7, 0xed, 0x6f, 0x73, 0xcf, - 0xae, 0x48, 0x56, 0x31, 0x93, 0x35, 0x12, 0xec, 0xcc, 0x7e, 0x50, 0x74, 0xe8, 0xa5, 0xca, 0xe1, - 0xea, 0xc2, 0x87, 0x6d, 0x9c, 0xfd, 0x4f, 0x8a, 0x30, 0x2c, 0x62, 0xc7, 0x89, 0x33, 0xe0, 0x45, - 0x63, 0x4a, 0x3c, 0x92, 0x98, 0x12, 0xe3, 0x06, 0xf1, 0xd1, 0x6c, 0xff, 0x21, 0x8c, 0xd3, 0xcd, - 0xf9, 0x2a, 0x71, 0x82, 0x68, 0x9d, 0x38, 0xdc, 0xa1, 0xac, 0x78, 0xe8, 0xdd, 0x5f, 0x69, 0x36, - 0x97, 0x93, 0xcc, 0x70, 0x9a, 0xff, 0xb7, 0xd3, 0x99, 0xe3, 0xc1, 0x58, 0x2a, 0xfc, 0xdf, 0x1b, - 0x50, 0x52, 0xef, 0x5b, 0xc4, 0xa6, 0xd3, 0x3e, 0x8a, 0x66, 0x92, 0x03, 0x57, 0x9c, 0xc5, 0x6f, - 0xab, 0x62, 0x76, 0xf6, 0x3f, 0x28, 0x18, 0x15, 0xf2, 0x41, 0x5c, 0x85, 0x01, 0x27, 0x0c, 0xdd, - 0x4d, 0x8f, 0xd4, 0xdb, 0xe9, 0x36, 0x53, 0xd5, 0xb0, 0x37, 0x46, 0x33, 0xa2, 0x24, 0x56, 0x3c, - 0xd0, 0x55, 0xee, 0xb6, 0xb7, 0x4b, 0xda, 0x29, 0x36, 0x53, 0xdc, 0x40, 0x3a, 0xf6, 0xed, 0x12, - 0x2c, 0xca, 0xa3, 0x4f, 0x72, 0xbf, 0xca, 0x6b, 0x9e, 0x7f, 0xdb, 0xbb, 0xe2, 0xfb, 0x32, 0x4e, - 0x48, 0x77, 0x0c, 0xc7, 0xa5, 0x37, 0xa5, 0x2a, 0x8e, 0x4d, 0x6e, 0xdd, 0xc5, 0xd3, 0xfd, 0x2c, - 0xb0, 0xac, 0x01, 0xe6, 0x73, 0xf2, 0x10, 0x11, 0x18, 0x15, 0x81, 0x09, 0x25, 0x4c, 0xf4, 0x5d, - 0xe6, 0x25, 0xd0, 0x2c, 0x1d, 0xab, 0xe0, 0xaf, 0x99, 0x2c, 0x70, 0x92, 0xa7, 0xfd, 0xd3, 0x16, - 0xb0, 0xa7, 0xb5, 0xc7, 0x20, 0x8f, 0x7c, 0xc4, 0x94, 0x47, 0x26, 0xf3, 0x3a, 0x39, 0x47, 0x14, - 0x79, 0x81, 0xcf, 0xac, 0x4a, 0xe0, 0xdf, 0xd9, 0x13, 0xce, 0x30, 0x9d, 0xef, 0x1f, 0xf6, 0xff, - 0xb2, 0xf8, 0x26, 0x16, 0x07, 0x22, 0xf8, 0x1c, 0x0c, 0xd4, 0x9c, 0xa6, 0x53, 0xe3, 0xb9, 0xad, - 0x72, 0x75, 0x81, 0x46, 0xa1, 0xe9, 0x39, 0x51, 0x82, 0xeb, 0xb6, 0x64, 0x80, 0xcb, 0x01, 0x09, - 0xee, 0xa8, 0xcf, 0x52, 0x55, 0x4e, 0x6d, 0xc3, 0xb0, 0xc1, 0xec, 0x81, 0x2a, 0x42, 0x3e, 0xc7, - 0x8f, 0x58, 0x15, 0x90, 0x75, 0x07, 0xc6, 0x3d, 0xed, 0x3f, 0x3d, 0x50, 0xe4, 0xe5, 0xf2, 0xb1, - 0x4e, 0x87, 0x28, 0x3b, 0x7d, 0xb4, 0x57, 0xbb, 0x09, 0x36, 0x38, 0xcd, 0xd9, 0xfe, 0x71, 0x0b, - 0x1e, 0xd2, 0x09, 0xb5, 0x87, 0x41, 0x9d, 0xcc, 0x2b, 0xf3, 0x30, 0xe0, 0x37, 0x49, 0xe0, 0x44, - 0x7e, 0x20, 0x4e, 0x8d, 0x8b, 0xb2, 0xd3, 0xaf, 0x0b, 0xf8, 0x81, 0xc8, 0xd4, 0x20, 0xb9, 0x4b, - 0x38, 0x56, 0x25, 0xe9, 0xed, 0x93, 0x75, 0x46, 0x28, 0x9e, 0x80, 0xb1, 0x3d, 0x80, 0x59, 0xea, - 0x43, 0x2c, 0x30, 0xf6, 0x9f, 0x58, 0x7c, 0x62, 0xe9, 0x4d, 0x47, 0x6f, 0xc1, 0xd8, 0x8e, 0x13, - 0xd5, 0xb6, 0x16, 0xee, 0x34, 0x03, 0x6e, 0xac, 0x92, 0xfd, 0xf4, 0x74, 0xa7, 0x7e, 0xd2, 0x3e, - 0x32, 0x76, 0x15, 0x5d, 0x49, 0x30, 0xc3, 0x29, 0xf6, 0x68, 0x1d, 0x06, 0x19, 0x8c, 0xbd, 0x6e, - 0x0c, 0xdb, 0x89, 0x06, 0x79, 0xb5, 0x29, 0x67, 0x87, 0x95, 0x98, 0x0f, 0xd6, 0x99, 0xda, 0x5f, - 0x29, 0xf2, 0xd5, 0xce, 0x44, 0xf9, 0x27, 0xa1, 0xbf, 0xe9, 0xd7, 0xe7, 0x96, 0xe6, 0xb1, 0x18, - 0x05, 0x75, 0x8c, 0x54, 0x38, 0x18, 0x4b, 0x3c, 0xba, 0x08, 0x03, 0xe2, 0xa7, 0x34, 0x2e, 0xb2, - 0xbd, 0x59, 0xd0, 0x85, 0x58, 0x61, 0xd1, 0x73, 0x00, 0xcd, 0xc0, 0xdf, 0x75, 0xeb, 0x2c, 0xda, - 0x49, 0xd1, 0xf4, 0x53, 0xaa, 0x28, 0x0c, 0xd6, 0xa8, 0xd0, 0x2b, 0x30, 0xdc, 0xf2, 0x42, 0x2e, - 0x8e, 0x68, 0x31, 0xa5, 0x95, 0x07, 0xcd, 0x0d, 0x1d, 0x89, 0x4d, 0x5a, 0x34, 0x03, 0x7d, 0x91, - 0xc3, 0xfc, 0x6e, 0x7a, 0xf3, 0xdd, 0x89, 0xd7, 0x28, 0x85, 0x9e, 0x46, 0x89, 0x16, 0xc0, 0xa2, - 0x20, 0x7a, 0x43, 0x3e, 0x34, 0xe6, 0x1b, 0xbb, 0xf0, 0xe3, 0xef, 0xee, 0x10, 0xd0, 0x9e, 0x19, - 0x8b, 0xf7, 0x01, 0x06, 0x2f, 0xf4, 0x32, 0x00, 0xb9, 0x13, 0x91, 0xc0, 0x73, 0x1a, 0xca, 0x5b, - 0x4e, 0xc9, 0x05, 0xf3, 0xfe, 0xaa, 0x1f, 0xdd, 0x08, 0xc9, 0x82, 0xa2, 0xc0, 0x1a, 0xb5, 0xfd, - 0x5b, 0x25, 0x80, 0x58, 0x6e, 0x47, 0x77, 0x53, 0x1b, 0xd7, 0x33, 0xed, 0x25, 0xfd, 0xa3, 0xdb, - 0xb5, 0xd0, 0xf7, 0x5a, 0x30, 0x28, 0x82, 0xba, 0xb0, 0x11, 0x2a, 0xb4, 0xdf, 0x38, 0xcd, 0xd8, - 0x32, 0xb4, 0x04, 0x6f, 0xc2, 0xf3, 0x72, 0x86, 0x6a, 0x98, 0x8e, 0xad, 0xd0, 0x2b, 0x46, 0xef, - 0x97, 0x57, 0xc5, 0xa2, 0xd1, 0x95, 0xea, 0xaa, 0x58, 0x62, 0x67, 0x84, 0x7e, 0x4b, 0xbc, 0x61, - 0xdc, 0x12, 0x7b, 0xf2, 0x5f, 0x52, 0x1a, 0xe2, 0x6b, 0xa7, 0x0b, 0x22, 0xaa, 0xe8, 0x51, 0x15, - 0x7a, 0xf3, 0x9f, 0xff, 0x69, 0xf7, 0xa4, 0x0e, 0x11, 0x15, 0x3e, 0x03, 0xa3, 0x75, 0x53, 0x08, - 0x10, 0x33, 0xf1, 0x89, 0x3c, 0xbe, 0x09, 0x99, 0x21, 0x3e, 0xf6, 0x13, 0x08, 0x9c, 0x64, 0x8c, - 0x2a, 0x3c, 0xc8, 0xc6, 0x92, 0xb7, 0xe1, 0x8b, 0xb7, 0x24, 0x76, 0xee, 0x58, 0xee, 0x85, 0x11, - 0xd9, 0xa1, 0x94, 0xf1, 0xe9, 0xbe, 0x2a, 0xca, 0x62, 0xc5, 0x05, 0xbd, 0x06, 0x7d, 0xec, 0xfd, - 0x57, 0x38, 0x39, 0x90, 0xaf, 0xab, 0x36, 0xa3, 0x0d, 0xc6, 0x0b, 0x92, 0xfd, 0x0d, 0xb1, 0xe0, - 0x80, 0xae, 0xca, 0xd7, 0x95, 0xe1, 0x92, 0x77, 0x23, 0x24, 0xec, 0x75, 0x65, 0x69, 0xf6, 0xb1, - 0xf8, 0xe1, 0x24, 0x87, 0x67, 0x26, 0x5b, 0x34, 0x4a, 0x52, 0x29, 0x4a, 0xfc, 0x97, 0x39, 0x1c, - 0x45, 0x6c, 0xa4, 0xcc, 0xe6, 0x99, 0x79, 0x1e, 0xe3, 0xee, 0xbc, 0x69, 0xb2, 0xc0, 0x49, 0x9e, - 0x54, 0x22, 0xe5, 0xab, 0x5e, 0xbc, 0x46, 0xe9, 0xb4, 0x77, 0xf0, 0x8b, 0x38, 0x3b, 0x8d, 0x38, - 0x04, 0x8b, 0xf2, 0xc7, 0x2a, 0x1e, 0x4c, 0x79, 0x30, 0x96, 0x5c, 0xa2, 0x0f, 0x54, 0x1c, 0xf9, - 0xa3, 0x1e, 0x18, 0x31, 0xa7, 0x14, 0xba, 0x04, 0x25, 0xc1, 0x44, 0xe5, 0x41, 0x51, 0xab, 0x64, - 0x45, 0x22, 0x70, 0x4c, 0xc3, 0xd2, 0xdf, 0xb0, 0xe2, 0x9a, 0xfb, 0x71, 0x9c, 0xfe, 0x46, 0x61, - 0xb0, 0x46, 0x45, 0x2f, 0x56, 0xeb, 0xbe, 0x1f, 0xa9, 0x03, 0x49, 0xcd, 0xbb, 0x59, 0x06, 0xc5, - 0x02, 0x4b, 0x0f, 0xa2, 0x6d, 0x12, 0x78, 0xa4, 0x61, 0xc6, 0x1f, 0x57, 0x07, 0xd1, 0x35, 0x1d, - 0x89, 0x4d, 0x5a, 0x7a, 0x9c, 0xfa, 0x21, 0x9b, 0xc8, 0xe2, 0xfa, 0x16, 0xbb, 0x73, 0x57, 0xf9, - 0xc3, 0x74, 0x89, 0x47, 0x1f, 0x87, 0x87, 0x54, 0xac, 0x2f, 0xcc, 0xed, 0x20, 0xb2, 0xc6, 0x3e, - 0x43, 0xdb, 0xf2, 0xd0, 0x5c, 0x36, 0x19, 0xce, 0x2b, 0x8f, 0x5e, 0x85, 0x11, 0x21, 0xe2, 0x4b, - 0x8e, 0xfd, 0xa6, 0x6f, 0xd2, 0x35, 0x03, 0x8b, 0x13, 0xd4, 0x32, 0x82, 0x3a, 0x93, 0xb2, 0x25, - 0x87, 0x81, 0x74, 0x04, 0x75, 0x1d, 0x8f, 0x53, 0x25, 0xd0, 0x0c, 0x8c, 0x72, 0x19, 0xcc, 0xf5, - 0x36, 0xf9, 0x98, 0x88, 0xc7, 0x62, 0x6a, 0x49, 0x5d, 0x37, 0xd1, 0x38, 0x49, 0x8f, 0x5e, 0x82, - 0x21, 0x27, 0xa8, 0x6d, 0xb9, 0x11, 0xa9, 0x45, 0xad, 0x80, 0xbf, 0x22, 0xd3, 0x9c, 0xbb, 0x66, - 0x34, 0x1c, 0x36, 0x28, 0xed, 0xbb, 0x30, 0x91, 0x11, 0xb1, 0x82, 0x4e, 0x1c, 0xa7, 0xe9, 0xca, - 0x6f, 0x4a, 0x78, 0x50, 0xcf, 0x54, 0x96, 0xe4, 0xd7, 0x68, 0x54, 0x74, 0x76, 0xb2, 0xc8, 0x16, - 0x5a, 0xca, 0x56, 0x35, 0x3b, 0x17, 0x25, 0x02, 0xc7, 0x34, 0xf6, 0x7f, 0x2d, 0xc0, 0x68, 0x86, - 0x6d, 0x85, 0xa5, 0x0d, 0x4d, 0x5c, 0x52, 0xe2, 0x2c, 0xa1, 0x66, 0x40, 0xfe, 0xc2, 0x21, 0x02, - 0xf2, 0x17, 0x3b, 0x05, 0xe4, 0xef, 0x79, 0x3b, 0x01, 0xf9, 0xcd, 0x1e, 0xeb, 0xed, 0xaa, 0xc7, - 0x32, 0x82, 0xf8, 0xf7, 0x1d, 0x32, 0x88, 0xbf, 0xd1, 0xe9, 0xfd, 0x5d, 0x74, 0xfa, 0x0f, 0x17, - 0x60, 0x2c, 0xe9, 0x84, 0x7a, 0x0c, 0x7a, 0xdb, 0xd7, 0x0c, 0xbd, 0xed, 0xc5, 0x6e, 0x1e, 0xf7, - 0xe6, 0xea, 0x70, 0x71, 0x42, 0x87, 0xfb, 0x54, 0x57, 0xdc, 0xda, 0xeb, 0x73, 0x7f, 0xa2, 0x00, - 0x27, 0x33, 0x5f, 0x17, 0x1f, 0x43, 0xdf, 0x5c, 0x37, 0xfa, 0xe6, 0xd9, 0xae, 0x1f, 0x3e, 0xe7, - 0x76, 0xd0, 0xad, 0x44, 0x07, 0x5d, 0xea, 0x9e, 0x65, 0xfb, 0x5e, 0xfa, 0x46, 0x11, 0xce, 0x65, - 0x96, 0x8b, 0xd5, 0x9e, 0x8b, 0x86, 0xda, 0xf3, 0xb9, 0x84, 0xda, 0xd3, 0x6e, 0x5f, 0xfa, 0x68, - 0xf4, 0xa0, 0xe2, 0x01, 0x30, 0x0b, 0x63, 0x70, 0x9f, 0x3a, 0x50, 0xe3, 0x01, 0xb0, 0x62, 0x84, - 0x4d, 0xbe, 0xdf, 0x4e, 0xba, 0xcf, 0xdf, 0xb4, 0xe0, 0x74, 0xe6, 0xd8, 0x1c, 0x83, 0xae, 0x6b, - 0xd5, 0xd4, 0x75, 0x3d, 0xd9, 0xf5, 0x6c, 0xcd, 0x51, 0x7e, 0xfd, 0x54, 0x6f, 0xce, 0xb7, 0xb0, - 0x9b, 0xfc, 0x75, 0x18, 0x74, 0x6a, 0x35, 0x12, 0x86, 0x2b, 0x7e, 0x5d, 0xc5, 0xee, 0x7e, 0x96, - 0xdd, 0xb3, 0x62, 0xf0, 0xc1, 0x7e, 0x79, 0x2a, 0xc9, 0x22, 0x46, 0x63, 0x9d, 0x03, 0xfa, 0x24, - 0x0c, 0x84, 0xe2, 0xdc, 0x14, 0x63, 0xff, 0x7c, 0x97, 0x9d, 0xe3, 0xac, 0x93, 0x86, 0x19, 0x24, - 0x4a, 0x69, 0x2a, 0x14, 0x4b, 0x33, 0xa0, 0x4c, 0xe1, 0x48, 0x03, 0xca, 0x3c, 0x07, 0xb0, 0xab, - 0x2e, 0x03, 0x49, 0xfd, 0x83, 0x76, 0x4d, 0xd0, 0xa8, 0xd0, 0x47, 0x61, 0x2c, 0xe4, 0x51, 0x14, - 0xe7, 0x1a, 0x4e, 0xc8, 0xde, 0xe9, 0x88, 0x59, 0xc8, 0x02, 0x51, 0x55, 0x13, 0x38, 0x9c, 0xa2, - 0x46, 0x8b, 0xb2, 0x56, 0xe6, 0x43, 0xc2, 0x27, 0xe6, 0x85, 0xb8, 0x46, 0xe1, 0x47, 0x72, 0x22, - 0xd9, 0xfd, 0xac, 0xe3, 0xb5, 0x92, 0xe8, 0x93, 0x00, 0x74, 0xfa, 0x08, 0x3d, 0x44, 0x7f, 0xfe, - 0xe6, 0x49, 0x77, 0x95, 0x7a, 0xa6, 0x5b, 0x34, 0x7b, 0xb3, 0x3b, 0xaf, 0x98, 0x60, 0x8d, 0x21, - 0x72, 0x60, 0x38, 0xfe, 0x17, 0xe7, 0xf4, 0xbd, 0x98, 0x5b, 0x43, 0x92, 0x39, 0x53, 0x79, 0xcf, - 0xeb, 0x2c, 0xb0, 0xc9, 0xd1, 0xfe, 0x8f, 0x03, 0xf0, 0x70, 0x9b, 0x6d, 0x18, 0xcd, 0x98, 0xa6, - 0xde, 0xa7, 0x93, 0xf7, 0xf7, 0xa9, 0xcc, 0xc2, 0xc6, 0x85, 0x3e, 0x31, 0xdb, 0x0b, 0x6f, 0x7b, - 0xb6, 0xff, 0xa0, 0xa5, 0x69, 0x56, 0xb8, 0x3b, 0xea, 0x47, 0x0e, 0x79, 0xbc, 0x1c, 0xa1, 0xaa, - 0x65, 0x23, 0x43, 0x5f, 0xf1, 0x5c, 0xd7, 0xcd, 0xe9, 0x5e, 0x81, 0xf1, 0xb5, 0xec, 0xd0, 0xc1, - 0x5c, 0x95, 0x71, 0xe5, 0xb0, 0xdf, 0x7f, 0x5c, 0x61, 0x84, 0x7f, 0xd7, 0x82, 0xd3, 0x29, 0x30, - 0x6f, 0x03, 0x09, 0x45, 0x74, 0xab, 0xd5, 0xb7, 0xdd, 0x78, 0xc9, 0x90, 0x7f, 0xc3, 0x55, 0xf1, - 0x0d, 0xa7, 0x73, 0xe9, 0x92, 0x4d, 0xff, 0x81, 0x3f, 0x28, 0x4f, 0xb0, 0x0a, 0x4c, 0x42, 0x9c, - 0xdf, 0xf4, 0xe3, 0xbd, 0xf8, 0xbf, 0x33, 0x51, 0x93, 0xa7, 0x96, 0xe1, 0x5c, 0xfb, 0xae, 0x3e, - 0xd4, 0xc3, 0xe6, 0xdf, 0xb1, 0xe0, 0x6c, 0xdb, 0xe8, 0x39, 0xdf, 0x82, 0x72, 0xae, 0xfd, 0x79, - 0x0b, 0x1e, 0xc9, 0x2c, 0x61, 0x78, 0xc7, 0x5d, 0x82, 0x52, 0x2d, 0x91, 0x49, 0x35, 0x8e, 0x23, - 0xa1, 0xb2, 0xa8, 0xc6, 0x34, 0x86, 0x13, 0x5c, 0xa1, 0xa3, 0x13, 0xdc, 0xaf, 0x59, 0x90, 0x3a, - 0xab, 0x8e, 0x41, 0x68, 0x5a, 0x32, 0x85, 0xa6, 0xc7, 0xba, 0xe9, 0xcd, 0x1c, 0x79, 0xe9, 0xcf, - 0x46, 0xe1, 0x54, 0xce, 0xbb, 0xc4, 0x5d, 0x18, 0xdf, 0xac, 0x11, 0xf3, 0x21, 0x7a, 0xbb, 0x00, - 0x4d, 0x6d, 0x5f, 0xad, 0xf3, 0x04, 0xb6, 0x29, 0x12, 0x9c, 0xae, 0x02, 0x7d, 0xde, 0x82, 0x13, - 0xce, 0xed, 0x70, 0x81, 0x0a, 0xbf, 0x6e, 0x6d, 0xb6, 0xe1, 0xd7, 0xb6, 0xa9, 0x64, 0x21, 0x97, - 0xd5, 0x0b, 0x99, 0x0a, 0xc9, 0x5b, 0xd5, 0x14, 0xbd, 0x51, 0x3d, 0x4b, 0x57, 0x9e, 0x45, 0x85, - 0x33, 0xeb, 0x42, 0x58, 0x64, 0x56, 0xa1, 0x57, 0xeb, 0x36, 0xa1, 0x12, 0xb2, 0x1e, 0x90, 0x72, - 0x69, 0x4e, 0x62, 0xb0, 0xe2, 0x83, 0x3e, 0x0d, 0xa5, 0x4d, 0xf9, 0x2a, 0x3a, 0x43, 0x5a, 0x8c, - 0x3b, 0xb2, 0xfd, 0x5b, 0x71, 0xee, 0x55, 0xa0, 0x88, 0x70, 0xcc, 0x14, 0xbd, 0x0a, 0x45, 0x6f, - 0x23, 0x6c, 0x97, 0xf1, 0x3b, 0xe1, 0x3e, 0xca, 0x03, 0x92, 0xac, 0x2e, 0x56, 0x31, 0x2d, 0x88, - 0xae, 0x42, 0x31, 0x58, 0xaf, 0x0b, 0x6d, 0x7a, 0xe6, 0x22, 0xc5, 0xb3, 0xf3, 0x39, 0xad, 0x62, - 0x9c, 0xf0, 0xec, 0x3c, 0xa6, 0x2c, 0x50, 0x05, 0x7a, 0xd9, 0x63, 0x3e, 0x21, 0x9b, 0x65, 0xde, - 0x42, 0xdb, 0x3c, 0x8a, 0xe5, 0x51, 0x4b, 0x18, 0x01, 0xe6, 0x8c, 0xd0, 0x1a, 0xf4, 0xd5, 0x58, - 0x76, 0x68, 0x21, 0x8c, 0xbd, 0x3f, 0x53, 0x6f, 0xde, 0x26, 0x6d, 0xb6, 0x50, 0x23, 0x33, 0x0a, - 0x2c, 0x78, 0x31, 0xae, 0xa4, 0xb9, 0xb5, 0x11, 0x32, 0xbd, 0x5b, 0x1e, 0xd7, 0x36, 0xd9, 0xe0, - 0x05, 0x57, 0x46, 0x81, 0x05, 0x2f, 0xf4, 0x32, 0x14, 0x36, 0x6a, 0xe2, 0xa1, 0x5e, 0xa6, 0x02, - 0xdd, 0x8c, 0x29, 0x33, 0xdb, 0x77, 0x6f, 0xbf, 0x5c, 0x58, 0x9c, 0xc3, 0x85, 0x8d, 0x1a, 0x5a, - 0x85, 0xfe, 0x0d, 0x1e, 0x85, 0x42, 0xe8, 0xc8, 0x9f, 0xc8, 0x0e, 0x90, 0x91, 0x0a, 0x54, 0xc1, - 0x1f, 0x7d, 0x09, 0x04, 0x96, 0x4c, 0x58, 0xa2, 0x0f, 0x15, 0x4d, 0x43, 0x04, 0xf3, 0x9b, 0x3e, - 0x5c, 0x04, 0x14, 0x2e, 0x2b, 0xc7, 0x31, 0x39, 0xb0, 0xc6, 0x91, 0xce, 0x6a, 0xe7, 0x6e, 0x2b, - 0x60, 0x91, 0xde, 0x45, 0xd4, 0xa7, 0xcc, 0x59, 0x3d, 0x23, 0x89, 0xda, 0xcd, 0x6a, 0x45, 0x84, - 0x63, 0xa6, 0x68, 0x1b, 0x86, 0x77, 0xc3, 0xe6, 0x16, 0x91, 0x4b, 0x9a, 0x05, 0x81, 0xca, 0x91, - 0xf5, 0x6e, 0x0a, 0x42, 0x37, 0x88, 0x5a, 0x4e, 0x23, 0xb5, 0x0b, 0x31, 0xb9, 0xfc, 0xa6, 0xce, - 0x0c, 0x9b, 0xbc, 0x69, 0xf7, 0xbf, 0xd5, 0xf2, 0xd7, 0xf7, 0x22, 0x22, 0x62, 0xf0, 0x65, 0x76, - 0xff, 0xeb, 0x9c, 0x24, 0xdd, 0xfd, 0x02, 0x81, 0x25, 0x13, 0x74, 0x53, 0x74, 0x0f, 0xdb, 0x3d, - 0xc7, 0xf2, 0x03, 0xfc, 0xce, 0x48, 0xa2, 0x9c, 0x4e, 0x61, 0xbb, 0x65, 0xcc, 0x8a, 0xed, 0x92, - 0xcd, 0x2d, 0x3f, 0xf2, 0xbd, 0xc4, 0x0e, 0x3d, 0x9e, 0xbf, 0x4b, 0x56, 0x32, 0xe8, 0xd3, 0xbb, - 0x64, 0x16, 0x15, 0xce, 0xac, 0x0b, 0xd5, 0x61, 0xa4, 0xe9, 0x07, 0xd1, 0x6d, 0x3f, 0x90, 0xf3, - 0x0b, 0xb5, 0xd1, 0xf1, 0x19, 0x94, 0xa2, 0x46, 0x16, 0xde, 0xd2, 0xc4, 0xe0, 0x04, 0x4f, 0xf4, - 0x31, 0xe8, 0x0f, 0x6b, 0x4e, 0x83, 0x2c, 0x5d, 0x9f, 0x9c, 0xc8, 0x3f, 0x7e, 0xaa, 0x9c, 0x24, - 0x67, 0x76, 0xf1, 0x20, 0x22, 0x9c, 0x04, 0x4b, 0x76, 0x68, 0x11, 0x7a, 0x59, 0x02, 0x4d, 0x16, - 0x30, 0x32, 0x27, 0x4e, 0x71, 0xca, 0x99, 0x9f, 0xef, 0x4d, 0x0c, 0x8c, 0x79, 0x71, 0xba, 0x06, - 0xc4, 0x55, 0xd7, 0x0f, 0x27, 0x4f, 0xe6, 0xaf, 0x01, 0x71, 0x43, 0xbe, 0x5e, 0x6d, 0xb7, 0x06, - 0x14, 0x11, 0x8e, 0x99, 0xd2, 0x9d, 0x99, 0xee, 0xa6, 0xa7, 0xda, 0x78, 0xa1, 0xe5, 0xee, 0xa5, - 0x6c, 0x67, 0xa6, 0x3b, 0x29, 0x65, 0x61, 0xff, 0x61, 0x7f, 0x5a, 0x66, 0x61, 0xca, 0x91, 0xff, - 0xcf, 0x4a, 0xd9, 0xcd, 0x3f, 0xd0, 0xad, 0xae, 0xf6, 0x08, 0xaf, 0x75, 0x9f, 0xb7, 0xe0, 0x54, - 0x33, 0xf3, 0x43, 0x84, 0x00, 0xd0, 0x9d, 0xca, 0x97, 0x7f, 0xba, 0x0a, 0x2e, 0x9a, 0x8d, 0xc7, - 0x39, 0x35, 0x25, 0xaf, 0xce, 0xc5, 0xb7, 0x7d, 0x75, 0x5e, 0x81, 0x81, 0x1a, 0xbf, 0xe7, 0xc8, - 0xa0, 0xd8, 0x5d, 0x85, 0xc6, 0x63, 0xa2, 0x84, 0xb8, 0x20, 0x6d, 0x60, 0xc5, 0x02, 0xfd, 0x90, - 0x05, 0x67, 0x93, 0x4d, 0xc7, 0x84, 0xa1, 0x45, 0x44, 0x52, 0xae, 0x97, 0x59, 0x14, 0xdf, 0x9f, - 0x92, 0xff, 0x0d, 0xe2, 0x83, 0x4e, 0x04, 0xb8, 0x7d, 0x65, 0x68, 0x3e, 0x43, 0x31, 0xd4, 0x67, - 0x1a, 0xc3, 0xba, 0x50, 0x0e, 0xbd, 0x00, 0x43, 0x3b, 0x7e, 0xcb, 0x8b, 0x84, 0xd3, 0x9a, 0x70, - 0xa0, 0x61, 0x8e, 0x23, 0x2b, 0x1a, 0x1c, 0x1b, 0x54, 0x09, 0x95, 0xd2, 0xc0, 0x7d, 0xab, 0x94, - 0xde, 0x84, 0x21, 0x4f, 0xf3, 0xb2, 0x16, 0xf2, 0xc0, 0x85, 0xfc, 0x68, 0xc2, 0xba, 0x4f, 0x36, - 0x6f, 0xa5, 0x0e, 0xc1, 0x06, 0xb7, 0xe3, 0xf5, 0x66, 0xfb, 0xb2, 0x95, 0x21, 0xd4, 0x73, 0xb5, - 0xd2, 0x87, 0x4d, 0xb5, 0xd2, 0x85, 0xa4, 0x5a, 0x29, 0x65, 0x08, 0x31, 0x34, 0x4a, 0xdd, 0x27, - 0xd7, 0xea, 0x36, 0x22, 0xa9, 0xdd, 0x80, 0xf3, 0x9d, 0x8e, 0x25, 0xe6, 0xbd, 0x58, 0x57, 0x66, - 0xef, 0xd8, 0x7b, 0xb1, 0xbe, 0x34, 0x8f, 0x19, 0xa6, 0xdb, 0x58, 0x57, 0xf6, 0x7f, 0xb6, 0xa0, - 0x58, 0xf1, 0xeb, 0xc7, 0x70, 0xe1, 0xfd, 0x88, 0x71, 0xe1, 0x7d, 0x38, 0xfb, 0x40, 0xac, 0xe7, - 0x9a, 0x71, 0x16, 0x12, 0x66, 0x9c, 0xb3, 0x79, 0x0c, 0xda, 0x1b, 0x6d, 0x7e, 0xb2, 0x08, 0x83, - 0x15, 0xbf, 0xae, 0x9e, 0x0e, 0xfc, 0xb3, 0xfb, 0x79, 0x3a, 0x90, 0x9b, 0xaa, 0x44, 0xe3, 0xcc, - 0x9c, 0x1e, 0xe5, 0x7b, 0xeb, 0x6f, 0xb1, 0x17, 0x04, 0xb7, 0x88, 0xbb, 0xb9, 0x15, 0x91, 0x7a, - 0xf2, 0x73, 0x8e, 0xef, 0x05, 0xc1, 0x1f, 0x16, 0x60, 0x34, 0x51, 0x3b, 0x6a, 0xc0, 0x70, 0x43, - 0x37, 0x12, 0x88, 0x79, 0x7a, 0x5f, 0xf6, 0x05, 0xe1, 0x81, 0xad, 0x81, 0xb0, 0xc9, 0x1c, 0x4d, - 0x03, 0x28, 0xab, 0xb9, 0x54, 0x15, 0x33, 0xa9, 0x5f, 0x99, 0xd5, 0x43, 0xac, 0x51, 0xa0, 0x17, - 0x61, 0x30, 0xf2, 0x9b, 0x7e, 0xc3, 0xdf, 0xdc, 0xbb, 0x46, 0x64, 0x18, 0x34, 0xe5, 0x57, 0xb9, - 0x16, 0xa3, 0xb0, 0x4e, 0x87, 0xee, 0xc0, 0xb8, 0x62, 0x52, 0x3d, 0x02, 0xc3, 0x09, 0xd3, 0x2a, - 0xac, 0x26, 0x39, 0xe2, 0x74, 0x25, 0xf6, 0xcf, 0x14, 0x79, 0x17, 0x7b, 0x91, 0xfb, 0xde, 0x6a, - 0x78, 0x77, 0xaf, 0x86, 0x6f, 0x58, 0x30, 0x46, 0x6b, 0x67, 0x4e, 0x63, 0xf2, 0x98, 0x57, 0xf1, - 0xcb, 0xad, 0x36, 0xf1, 0xcb, 0x2f, 0xd0, 0x5d, 0xb3, 0xee, 0xb7, 0x22, 0xa1, 0xbb, 0xd3, 0xb6, - 0x45, 0x0a, 0xc5, 0x02, 0x2b, 0xe8, 0x48, 0x10, 0x88, 0x87, 0xae, 0x3a, 0x1d, 0x09, 0x02, 0x2c, - 0xb0, 0x32, 0xbc, 0x79, 0x4f, 0x76, 0x78, 0x73, 0x1e, 0xa5, 0x56, 0xb8, 0x17, 0x09, 0x81, 0x4b, - 0x8b, 0x52, 0x2b, 0xfd, 0x8e, 0x62, 0x1a, 0xfb, 0x6b, 0x45, 0x18, 0xaa, 0xf8, 0xf5, 0xd8, 0x62, - 0xfe, 0x82, 0x61, 0x31, 0x3f, 0x9f, 0xb0, 0x98, 0x8f, 0xe9, 0xb4, 0xef, 0xd9, 0xc7, 0xdf, 0x29, - 0xfb, 0xf8, 0xaf, 0x5a, 0x6c, 0xd4, 0xe6, 0x57, 0xab, 0xdc, 0x07, 0x11, 0x5d, 0x86, 0x41, 0xb6, - 0xc1, 0xb0, 0x97, 0xd5, 0xd2, 0x8c, 0xcc, 0xd2, 0x8d, 0xad, 0xc6, 0x60, 0xac, 0xd3, 0xa0, 0x8b, - 0x30, 0x10, 0x12, 0x27, 0xa8, 0x6d, 0xa9, 0xdd, 0x55, 0xd8, 0x7c, 0x39, 0x0c, 0x2b, 0x2c, 0x7a, - 0x3d, 0x0e, 0x90, 0x5a, 0xcc, 0x7f, 0xa9, 0xa9, 0xb7, 0x87, 0x2f, 0x91, 0xfc, 0xa8, 0xa8, 0xf6, - 0x2d, 0x40, 0x69, 0xfa, 0x2e, 0x42, 0xf8, 0x95, 0xcd, 0x10, 0x7e, 0xa5, 0x54, 0xf8, 0xbe, 0xbf, - 0xb0, 0x60, 0xa4, 0xe2, 0xd7, 0xe9, 0xd2, 0xfd, 0x76, 0x5a, 0xa7, 0x7a, 0x74, 0xe8, 0xbe, 0x36, - 0xd1, 0xa1, 0x1f, 0x85, 0xde, 0x8a, 0x5f, 0xef, 0x10, 0x66, 0xf0, 0x6f, 0x5b, 0xd0, 0x5f, 0xf1, - 0xeb, 0xc7, 0x60, 0x16, 0xf8, 0xb0, 0x69, 0x16, 0x78, 0x28, 0x67, 0xde, 0xe4, 0x58, 0x02, 0xfe, - 0x56, 0x0f, 0x0c, 0xd3, 0x76, 0xfa, 0x9b, 0x72, 0x28, 0x8d, 0x6e, 0xb3, 0xba, 0xe8, 0x36, 0x2a, - 0x85, 0xfb, 0x8d, 0x86, 0x7f, 0x3b, 0x39, 0xac, 0x8b, 0x0c, 0x8a, 0x05, 0x16, 0x3d, 0x03, 0x03, - 0xcd, 0x80, 0xec, 0xba, 0xbe, 0x10, 0x6f, 0x35, 0x23, 0x4b, 0x45, 0xc0, 0xb1, 0xa2, 0xa0, 0xd7, - 0xc2, 0xd0, 0xf5, 0xe8, 0x51, 0x5e, 0xf3, 0xbd, 0x3a, 0xd7, 0x9c, 0x17, 0x45, 0x0a, 0x13, 0x0d, - 0x8e, 0x0d, 0x2a, 0x74, 0x0b, 0x4a, 0xec, 0x3f, 0xdb, 0x76, 0x0e, 0x9f, 0x3c, 0x59, 0x24, 0x75, - 0x14, 0x0c, 0x70, 0xcc, 0x0b, 0x3d, 0x07, 0x10, 0xc9, 0x34, 0x00, 0xa1, 0x08, 0x37, 0xa7, 0xae, - 0x02, 0x2a, 0x41, 0x40, 0x88, 0x35, 0x2a, 0xf4, 0x34, 0x94, 0x22, 0xc7, 0x6d, 0x2c, 0xbb, 0x1e, - 0xb3, 0xbd, 0xd2, 0xf6, 0x8b, 0xdc, 0x8a, 0x02, 0x88, 0x63, 0x3c, 0x15, 0xc5, 0x58, 0x28, 0x12, - 0x9e, 0x3a, 0x7e, 0x80, 0x51, 0x33, 0x51, 0x6c, 0x59, 0x41, 0xb1, 0x46, 0x81, 0xb6, 0xe0, 0x8c, - 0xeb, 0xb1, 0x74, 0x1f, 0xa4, 0xba, 0xed, 0x36, 0xd7, 0x96, 0xab, 0x37, 0x49, 0xe0, 0x6e, 0xec, - 0xcd, 0x3a, 0xb5, 0x6d, 0xe2, 0xc9, 0xb4, 0xb8, 0x32, 0x5b, 0xfa, 0x99, 0xa5, 0x36, 0xb4, 0xb8, - 0x2d, 0x27, 0xfb, 0x79, 0x36, 0xdf, 0xaf, 0x57, 0xd1, 0x53, 0xc6, 0xd6, 0x71, 0x4a, 0xdf, 0x3a, - 0x0e, 0xf6, 0xcb, 0x7d, 0xd7, 0xab, 0x5a, 0x3c, 0x8c, 0x97, 0xe0, 0x64, 0xc5, 0xaf, 0x57, 0xfc, - 0x20, 0x5a, 0xf4, 0x83, 0xdb, 0x4e, 0x50, 0x97, 0xd3, 0xab, 0x2c, 0x23, 0x82, 0xd0, 0xfd, 0xb3, - 0x97, 0xef, 0x2e, 0x46, 0xb4, 0x8f, 0xe7, 0x99, 0xc4, 0x76, 0xc8, 0x77, 0x6c, 0x35, 0x26, 0x3b, - 0xa8, 0x84, 0x39, 0x57, 0x9c, 0x88, 0xa0, 0xeb, 0x2c, 0xf1, 0x7d, 0x7c, 0x8c, 0x8a, 0xe2, 0x4f, - 0x6a, 0x89, 0xef, 0x63, 0x64, 0xe6, 0xb9, 0x6b, 0x96, 0xb7, 0x3f, 0x27, 0x2a, 0xe1, 0x77, 0x70, - 0xee, 0x2b, 0xd8, 0x4d, 0xe6, 0x68, 0x99, 0x51, 0xa3, 0x90, 0x9f, 0x8a, 0x81, 0x5b, 0x3d, 0xdb, - 0x66, 0xd4, 0xb0, 0xbf, 0x13, 0x4e, 0x25, 0xab, 0xef, 0x3a, 0x7d, 0xf5, 0x1c, 0x8c, 0x07, 0x7a, - 0x41, 0x2d, 0x3d, 0xd9, 0x49, 0x9e, 0x05, 0x21, 0x81, 0xc4, 0x69, 0x7a, 0xfb, 0x45, 0x18, 0xa7, - 0x77, 0x4f, 0x25, 0xc8, 0xb1, 0x5e, 0xee, 0x1c, 0x1a, 0xe5, 0xbf, 0xf4, 0xb2, 0x83, 0x28, 0x91, - 0xab, 0x06, 0x7d, 0x0a, 0x46, 0x42, 0xb2, 0xec, 0x7a, 0xad, 0x3b, 0x52, 0xf3, 0xd3, 0xe6, 0x01, - 0x67, 0x75, 0x41, 0xa7, 0xe4, 0xfa, 0x63, 0x13, 0x86, 0x13, 0xdc, 0xd0, 0x0e, 0x8c, 0xdc, 0x76, - 0xbd, 0xba, 0x7f, 0x3b, 0x94, 0xfc, 0x07, 0xf2, 0xd5, 0xc8, 0xb7, 0x38, 0x65, 0xa2, 0x8d, 0x46, - 0x75, 0xb7, 0x0c, 0x66, 0x38, 0xc1, 0x9c, 0x2e, 0xf6, 0xa0, 0xe5, 0xcd, 0x84, 0x37, 0x42, 0xc2, - 0x9f, 0xe4, 0x89, 0xc5, 0x8e, 0x25, 0x10, 0xc7, 0x78, 0xba, 0xd8, 0xd9, 0x9f, 0x2b, 0x81, 0xdf, - 0xe2, 0x89, 0x51, 0xc4, 0x62, 0xc7, 0x0a, 0x8a, 0x35, 0x0a, 0xba, 0x19, 0xb2, 0x7f, 0xab, 0xbe, - 0x87, 0x7d, 0x3f, 0x92, 0xdb, 0x27, 0x4b, 0xec, 0xa5, 0xc1, 0xb1, 0x41, 0x85, 0x16, 0x01, 0x85, - 0xad, 0x66, 0xb3, 0xc1, 0x3c, 0xc3, 0x9c, 0x06, 0x63, 0xc5, 0x5d, 0x66, 0x8a, 0x3c, 0xb0, 0x73, - 0x35, 0x85, 0xc5, 0x19, 0x25, 0xe8, 0xb9, 0xb8, 0x21, 0x9a, 0xda, 0xcb, 0x9a, 0xca, 0x4d, 0x4e, - 0x55, 0xde, 0x4e, 0x89, 0x43, 0x0b, 0xd0, 0x1f, 0xee, 0x85, 0xb5, 0xa8, 0x11, 0xb6, 0x4b, 0xa3, - 0x56, 0x65, 0x24, 0x5a, 0x16, 0x4f, 0x5e, 0x04, 0xcb, 0xb2, 0xa8, 0x06, 0x13, 0x82, 0xe3, 0xdc, - 0x96, 0xe3, 0xa9, 0xe4, 0x4e, 0xdc, 0x41, 0xfe, 0xf2, 0xbd, 0xfd, 0xf2, 0x84, 0xa8, 0x59, 0x47, - 0x1f, 0xec, 0x97, 0xe9, 0xe2, 0xc8, 0xc0, 0xe0, 0x2c, 0x6e, 0x7c, 0xf2, 0xd5, 0x6a, 0xfe, 0x4e, - 0xb3, 0x12, 0xf8, 0x1b, 0x6e, 0x83, 0xb4, 0x33, 0xdb, 0x55, 0x0d, 0x4a, 0x31, 0xf9, 0x0c, 0x18, - 0x4e, 0x70, 0xb3, 0x3f, 0xc7, 0x64, 0xc7, 0xaa, 0xbb, 0xe9, 0x39, 0x51, 0x2b, 0x20, 0x68, 0x07, - 0x86, 0x9b, 0x6c, 0x77, 0x11, 0xe9, 0x4a, 0xc4, 0x5c, 0x7f, 0xa1, 0x4b, 0xf5, 0xd3, 0x6d, 0x96, - 0x70, 0xcd, 0x70, 0x33, 0xab, 0xe8, 0xec, 0xb0, 0xc9, 0xdd, 0xfe, 0xd7, 0xa7, 0x99, 0xf4, 0x51, - 0xe5, 0x3a, 0xa5, 0x7e, 0xf1, 0x1e, 0x47, 0x5c, 0x63, 0xa7, 0xf2, 0x95, 0x9b, 0xf1, 0xb0, 0x88, - 0x37, 0x3d, 0x58, 0x96, 0x45, 0x9f, 0x84, 0x11, 0x7a, 0x2b, 0x54, 0x12, 0x40, 0x38, 0x79, 0x22, - 0x3f, 0x6e, 0x8a, 0xa2, 0xd2, 0x53, 0x19, 0xe9, 0x85, 0x71, 0x82, 0x19, 0x7a, 0x9d, 0xb9, 0x75, - 0x49, 0xd6, 0x85, 0x6e, 0x58, 0xeb, 0x1e, 0x5c, 0x92, 0xad, 0xc6, 0x04, 0xb5, 0x60, 0x22, 0x9d, - 0xb0, 0x31, 0x9c, 0xb4, 0xf3, 0xc5, 0xeb, 0x74, 0xce, 0xc5, 0x38, 0xe7, 0x4c, 0x1a, 0x17, 0xe2, - 0x2c, 0xfe, 0x68, 0x39, 0x99, 0x4e, 0xaf, 0x68, 0xe8, 0x5c, 0x53, 0x29, 0xf5, 0x86, 0xdb, 0x66, - 0xd2, 0xdb, 0x84, 0xb3, 0x5a, 0x46, 0xb2, 0x2b, 0x81, 0xc3, 0x1c, 0x27, 0x5c, 0xb6, 0x9d, 0x6a, - 0x72, 0xd1, 0x23, 0xf7, 0xf6, 0xcb, 0x67, 0xd7, 0xda, 0x11, 0xe2, 0xf6, 0x7c, 0xd0, 0x75, 0x38, - 0xc9, 0x5f, 0xfd, 0xcf, 0x13, 0xa7, 0xde, 0x70, 0x3d, 0x25, 0x78, 0xf1, 0x25, 0x7f, 0xfa, 0xde, - 0x7e, 0xf9, 0xe4, 0x4c, 0x16, 0x01, 0xce, 0x2e, 0x87, 0x3e, 0x0c, 0xa5, 0xba, 0x17, 0x8a, 0x3e, - 0xe8, 0x33, 0x92, 0xbe, 0x95, 0xe6, 0x57, 0xab, 0xea, 0xfb, 0xe3, 0x3f, 0x38, 0x2e, 0x80, 0x36, - 0xb9, 0x5e, 0x5e, 0x69, 0x8b, 0xfa, 0x53, 0xf1, 0xd2, 0x92, 0x0a, 0x55, 0xe3, 0xdd, 0x2f, 0x37, - 0x48, 0xa9, 0xe7, 0x30, 0xc6, 0x93, 0x60, 0x83, 0x31, 0x7a, 0x0d, 0x90, 0x48, 0x2e, 0x30, 0x53, - 0x63, 0xb9, 0x70, 0xd8, 0xd1, 0x38, 0x60, 0xbe, 0x44, 0xad, 0xa6, 0x28, 0x70, 0x46, 0x29, 0x74, - 0x95, 0xee, 0x2a, 0x3a, 0x54, 0xec, 0x5a, 0x2a, 0xb5, 0xe8, 0x3c, 0x69, 0x06, 0x84, 0xf9, 0x77, - 0x99, 0x1c, 0x71, 0xa2, 0x1c, 0xaa, 0xc3, 0x19, 0xa7, 0x15, 0xf9, 0xcc, 0xe4, 0x61, 0x92, 0xae, - 0xf9, 0xdb, 0xc4, 0x63, 0xd6, 0xc6, 0x01, 0x16, 0x87, 0xed, 0xcc, 0x4c, 0x1b, 0x3a, 0xdc, 0x96, - 0x0b, 0x95, 0xc8, 0x55, 0x2e, 0x71, 0x30, 0xa3, 0xc0, 0x65, 0xe4, 0x13, 0x7f, 0x11, 0x06, 0xb7, - 0xfc, 0x30, 0x5a, 0x25, 0xd1, 0x6d, 0x3f, 0xd8, 0x16, 0xd1, 0x8c, 0xe3, 0x08, 0xf2, 0x31, 0x0a, - 0xeb, 0x74, 0xf4, 0xca, 0xcd, 0x7c, 0x61, 0x96, 0xe6, 0x99, 0x1b, 0xc2, 0x40, 0xbc, 0xc7, 0x5c, - 0xe5, 0x60, 0x2c, 0xf1, 0x92, 0x74, 0xa9, 0x32, 0xc7, 0x5c, 0x0a, 0x12, 0xa4, 0x4b, 0x95, 0x39, - 0x2c, 0xf1, 0x74, 0xba, 0x86, 0x5b, 0x4e, 0x40, 0x2a, 0x81, 0x5f, 0x23, 0xa1, 0x96, 0xb7, 0xe0, - 0x61, 0x1e, 0xab, 0x99, 0x4e, 0xd7, 0x6a, 0x16, 0x01, 0xce, 0x2e, 0x87, 0x48, 0x3a, 0x1b, 0xdf, - 0x48, 0xbe, 0x2d, 0x28, 0x2d, 0xcf, 0x74, 0x99, 0x90, 0xcf, 0x83, 0x31, 0x95, 0x07, 0x90, 0x47, - 0x67, 0x0e, 0x27, 0x47, 0xd9, 0xdc, 0xee, 0x3e, 0xb4, 0xb3, 0xb2, 0xae, 0x2d, 0x25, 0x38, 0xe1, - 0x14, 0x6f, 0x23, 0xd0, 0xdf, 0x58, 0xc7, 0x40, 0x7f, 0x97, 0xa0, 0x14, 0xb6, 0xd6, 0xeb, 0xfe, - 0x8e, 0xe3, 0x7a, 0xcc, 0xa5, 0x40, 0xbb, 0xfb, 0x55, 0x25, 0x02, 0xc7, 0x34, 0x68, 0x11, 0x06, - 0x1c, 0x69, 0x3a, 0x43, 0xf9, 0x01, 0x9a, 0x94, 0xc1, 0x8c, 0xc7, 0x2c, 0x91, 0xc6, 0x32, 0x55, - 0x16, 0xbd, 0x02, 0xc3, 0xe2, 0xd5, 0xba, 0x48, 0x9d, 0x3b, 0x61, 0x3e, 0x2d, 0xac, 0xea, 0x48, - 0x6c, 0xd2, 0xa2, 0x1b, 0x30, 0x18, 0xf9, 0x0d, 0xf6, 0x3e, 0x8e, 0x8a, 0x79, 0xa7, 0xf2, 0x43, - 0x0d, 0xae, 0x29, 0x32, 0x5d, 0x6b, 0xad, 0x8a, 0x62, 0x9d, 0x0f, 0x5a, 0xe3, 0xf3, 0x9d, 0x65, - 0x29, 0x20, 0xa1, 0xc8, 0xbd, 0x7a, 0x36, 0xcf, 0x1f, 0x8c, 0x91, 0x99, 0xcb, 0x41, 0x94, 0xc4, - 0x3a, 0x1b, 0x74, 0x05, 0xc6, 0x9b, 0x81, 0xeb, 0xb3, 0x39, 0xa1, 0xac, 0xa6, 0x93, 0x66, 0x4e, - 0xb2, 0x4a, 0x92, 0x00, 0xa7, 0xcb, 0xb0, 0xa0, 0x03, 0x02, 0x38, 0x79, 0x9a, 0xe7, 0x55, 0xe1, - 0x57, 0x69, 0x0e, 0xc3, 0x0a, 0x8b, 0x56, 0xd8, 0x4e, 0xcc, 0xb5, 0x40, 0x93, 0x53, 0xf9, 0x31, - 0xa1, 0x74, 0x6d, 0x11, 0x17, 0x5e, 0xd5, 0x5f, 0x1c, 0x73, 0x40, 0x75, 0x2d, 0x9d, 0x29, 0xbd, - 0x02, 0x84, 0x93, 0x67, 0xda, 0x38, 0x24, 0x26, 0x6e, 0x65, 0xb1, 0x40, 0x60, 0x80, 0x43, 0x9c, - 0xe0, 0x89, 0x3e, 0x0a, 0x63, 0x22, 0x06, 0x66, 0xdc, 0x4d, 0x67, 0xe3, 0x57, 0x07, 0x38, 0x81, - 0xc3, 0x29, 0x6a, 0x9e, 0xd7, 0xc4, 0x59, 0x6f, 0x10, 0xb1, 0xf5, 0x2d, 0xbb, 0xde, 0x76, 0x38, - 0x79, 0x8e, 0xed, 0x0f, 0x22, 0xaf, 0x49, 0x12, 0x8b, 0x33, 0x4a, 0xa0, 0x35, 0x18, 0x6b, 0x06, - 0x84, 0xec, 0x30, 0x41, 0x5f, 0x9c, 0x67, 0x65, 0x1e, 0x73, 0x83, 0xb6, 0xa4, 0x92, 0xc0, 0x1d, - 0x64, 0xc0, 0x70, 0x8a, 0x03, 0xba, 0x0d, 0x03, 0xfe, 0x2e, 0x09, 0xb6, 0x88, 0x53, 0x9f, 0x3c, - 0xdf, 0xe6, 0x15, 0x8c, 0x38, 0xdc, 0xae, 0x0b, 0xda, 0x84, 0xa7, 0x85, 0x04, 0x77, 0xf6, 0xb4, - 0x90, 0x95, 0xa1, 0xff, 0xdf, 0x82, 0xd3, 0xd2, 0x38, 0x53, 0x6d, 0xd2, 0x5e, 0x9f, 0xf3, 0xbd, - 0x30, 0x0a, 0x78, 0x94, 0x88, 0x47, 0xf2, 0x23, 0x27, 0xac, 0xe5, 0x14, 0x52, 0x8a, 0xe8, 0xd3, - 0x79, 0x14, 0x21, 0xce, 0xaf, 0x91, 0x5e, 0x4d, 0x43, 0x12, 0xc9, 0xcd, 0x68, 0x26, 0x5c, 0x7c, - 0x7d, 0x7e, 0x75, 0xf2, 0x51, 0x1e, 0xe2, 0x82, 0x2e, 0x86, 0x6a, 0x12, 0x89, 0xd3, 0xf4, 0xe8, - 0x32, 0x14, 0xfc, 0x70, 0xf2, 0xb1, 0x36, 0x19, 0x70, 0xfd, 0xfa, 0xf5, 0x2a, 0xf7, 0xb8, 0xbb, - 0x5e, 0xc5, 0x05, 0x3f, 0x94, 0xb9, 0x45, 0xe8, 0x7d, 0x2c, 0x9c, 0x7c, 0x9c, 0xab, 0x2d, 0x65, - 0x6e, 0x11, 0x06, 0xc4, 0x31, 0x1e, 0x6d, 0xc1, 0x68, 0x68, 0xdc, 0x7b, 0xc3, 0xc9, 0x0b, 0xac, - 0xa7, 0x1e, 0xcf, 0x1b, 0x34, 0x83, 0x5a, 0x0b, 0xfa, 0x6f, 0x72, 0xc1, 0x49, 0xb6, 0x7c, 0x75, - 0x69, 0x37, 0xef, 0x70, 0xf2, 0x89, 0x0e, 0xab, 0x4b, 0x23, 0xd6, 0x57, 0x97, 0xce, 0x03, 0x27, - 0x78, 0x4e, 0x7d, 0x07, 0x8c, 0xa7, 0xc4, 0xa5, 0xc3, 0x78, 0x97, 0x4f, 0x6d, 0xc3, 0xb0, 0x31, - 0x25, 0x1f, 0xa8, 0x67, 0xc3, 0x6f, 0x96, 0xa0, 0xa4, 0xac, 0xde, 0xe8, 0x92, 0xe9, 0xcc, 0x70, - 0x3a, 0xe9, 0xcc, 0x30, 0x50, 0xf1, 0xeb, 0x86, 0xff, 0xc2, 0x5a, 0x46, 0x20, 0xc4, 0xbc, 0x0d, - 0xb0, 0xfb, 0x07, 0x22, 0x9a, 0x29, 0xa1, 0xd8, 0xb5, 0x57, 0x44, 0x4f, 0x5b, 0xeb, 0xc4, 0x15, - 0x18, 0xf7, 0x7c, 0x26, 0xa3, 0x93, 0xba, 0x14, 0xc0, 0x98, 0x9c, 0x55, 0xd2, 0x23, 0x0b, 0x25, - 0x08, 0x70, 0xba, 0x0c, 0xad, 0x90, 0x0b, 0x4a, 0x49, 0x73, 0x08, 0x97, 0xa3, 0xb0, 0xc0, 0xd2, - 0xbb, 0x21, 0xff, 0x15, 0x4e, 0x8e, 0xe5, 0xdf, 0x0d, 0x79, 0xa1, 0xa4, 0x30, 0x16, 0x4a, 0x61, - 0x8c, 0x69, 0xff, 0x9b, 0x7e, 0x7d, 0xa9, 0x22, 0xc4, 0x7c, 0x2d, 0x8a, 0x6f, 0x7d, 0xa9, 0x82, - 0x39, 0x0e, 0xcd, 0x40, 0x1f, 0xfb, 0x11, 0x4e, 0x0e, 0xe5, 0x47, 0xa2, 0x61, 0x25, 0xb4, 0xdc, - 0x66, 0xac, 0x00, 0x16, 0x05, 0x99, 0x76, 0x97, 0xde, 0x8d, 0x98, 0x76, 0xb7, 0xff, 0x3e, 0xb5, - 0xbb, 0x92, 0x01, 0x8e, 0x79, 0xa1, 0x3b, 0x70, 0xd2, 0xb8, 0x8f, 0xaa, 0x17, 0x33, 0x90, 0x6f, - 0xf8, 0x4d, 0x10, 0xcf, 0x9e, 0x15, 0x8d, 0x3e, 0xb9, 0x94, 0xc5, 0x09, 0x67, 0x57, 0x80, 0x1a, - 0x30, 0x5e, 0x4b, 0xd5, 0x3a, 0xd0, 0x7d, 0xad, 0x6a, 0x5e, 0xa4, 0x6b, 0x4c, 0x33, 0x46, 0xaf, - 0xc0, 0xc0, 0x5b, 0x7e, 0xc8, 0x8e, 0x48, 0x71, 0x35, 0x91, 0xa1, 0x14, 0x06, 0x5e, 0xbf, 0x5e, - 0x65, 0xf0, 0x83, 0xfd, 0xf2, 0x60, 0xc5, 0xaf, 0xcb, 0xbf, 0x58, 0x15, 0x40, 0xdf, 0x67, 0xc1, - 0x54, 0xfa, 0xc2, 0xab, 0x1a, 0x3d, 0xdc, 0x7d, 0xa3, 0x6d, 0x51, 0xe9, 0xd4, 0x42, 0x2e, 0x3b, - 0xdc, 0xa6, 0x2a, 0xf4, 0x21, 0xba, 0x9e, 0x42, 0xf7, 0x2e, 0x11, 0x89, 0x61, 0x1f, 0x89, 0xd7, - 0x13, 0x85, 0x1e, 0xec, 0x97, 0x47, 0xf9, 0xce, 0xe8, 0xde, 0x95, 0x4f, 0x8b, 0x44, 0x01, 0xf4, - 0x9d, 0x70, 0x32, 0x48, 0x6b, 0x50, 0x89, 0x14, 0xc2, 0x9f, 0xea, 0x66, 0x97, 0x4d, 0x0e, 0x38, - 0xce, 0x62, 0x88, 0xb3, 0xeb, 0xb1, 0x7f, 0xc9, 0x62, 0xfa, 0x6d, 0xd1, 0x2c, 0x12, 0xb6, 0x1a, - 0xc7, 0x91, 0x8e, 0x7a, 0xc1, 0xb0, 0x1d, 0xdf, 0xb7, 0x63, 0xd1, 0x3f, 0xb5, 0x98, 0x63, 0xd1, - 0x31, 0xbe, 0x20, 0x7a, 0x1d, 0x06, 0x22, 0x99, 0x26, 0xbc, 0x4d, 0x06, 0x6d, 0xad, 0x51, 0xcc, - 0xb9, 0x4a, 0x5d, 0x72, 0x54, 0x46, 0x70, 0xc5, 0xc6, 0xfe, 0x47, 0x7c, 0x04, 0x24, 0xe6, 0x18, - 0x4c, 0x74, 0xf3, 0xa6, 0x89, 0xae, 0xdc, 0xe1, 0x0b, 0x72, 0x4c, 0x75, 0xff, 0xd0, 0x6c, 0x37, - 0x53, 0xee, 0xbd, 0xdb, 0x3d, 0xda, 0xec, 0x2f, 0x58, 0x00, 0x71, 0x80, 0xf7, 0x2e, 0x12, 0x41, - 0xbe, 0x44, 0xaf, 0x35, 0x7e, 0xe4, 0xd7, 0xfc, 0x86, 0x30, 0x50, 0x9c, 0x89, 0xad, 0x84, 0x1c, - 0x7e, 0xa0, 0xfd, 0xc6, 0x8a, 0x1a, 0x95, 0x65, 0x38, 0xc9, 0x62, 0x6c, 0xb7, 0x36, 0x42, 0x49, - 0x7e, 0xc9, 0x82, 0x13, 0x59, 0xee, 0xe8, 0xf4, 0x92, 0xcc, 0xd5, 0x9c, 0xca, 0xdb, 0x50, 0x8d, - 0xe6, 0x4d, 0x01, 0xc7, 0x8a, 0xa2, 0xeb, 0x0c, 0x9b, 0x87, 0x8b, 0xac, 0x7e, 0x1d, 0x86, 0x2b, - 0x01, 0xd1, 0xe4, 0x8b, 0x57, 0x79, 0x88, 0x12, 0xde, 0x9e, 0x67, 0x0e, 0x1d, 0x9e, 0xc4, 0xfe, - 0x4a, 0x01, 0x4e, 0x70, 0xa7, 0x9d, 0x99, 0x5d, 0xdf, 0xad, 0x57, 0xfc, 0xba, 0x78, 0x44, 0xf8, - 0x06, 0x0c, 0x35, 0x35, 0xdd, 0x74, 0xbb, 0x28, 0xc1, 0xba, 0x0e, 0x3b, 0xd6, 0xa6, 0xe9, 0x50, - 0x6c, 0xf0, 0x42, 0x75, 0x18, 0x22, 0xbb, 0x6e, 0x4d, 0x79, 0x7e, 0x14, 0x0e, 0x7d, 0x48, 0xab, - 0x5a, 0x16, 0x34, 0x3e, 0xd8, 0xe0, 0xfa, 0x00, 0xf2, 0xde, 0xdb, 0x3f, 0x62, 0xc1, 0x43, 0x39, - 0x31, 0x85, 0x69, 0x75, 0xb7, 0x99, 0x7b, 0x94, 0x98, 0xb6, 0xaa, 0x3a, 0xee, 0x34, 0x85, 0x05, - 0x16, 0x7d, 0x0c, 0x80, 0x3b, 0x3d, 0x11, 0xaf, 0xd6, 0x31, 0xf8, 0xaa, 0x11, 0x37, 0x52, 0x0b, - 0x01, 0x28, 0xcb, 0x63, 0x8d, 0x97, 0xfd, 0xa5, 0x1e, 0xe8, 0x65, 0x4e, 0x36, 0xa8, 0x02, 0xfd, - 0x5b, 0x3c, 0xbf, 0x54, 0xdb, 0x71, 0xa3, 0xb4, 0x32, 0x65, 0x55, 0x3c, 0x6e, 0x1a, 0x14, 0x4b, - 0x36, 0x68, 0x05, 0x26, 0x78, 0x9a, 0xaf, 0xc6, 0x3c, 0x69, 0x38, 0x7b, 0x52, 0xed, 0xcb, 0x33, - 0x57, 0x2b, 0xf5, 0xf7, 0x52, 0x9a, 0x04, 0x67, 0x95, 0x43, 0xaf, 0xc2, 0x08, 0xbd, 0x86, 0xfb, - 0xad, 0x48, 0x72, 0xe2, 0x09, 0xbe, 0xd4, 0xcd, 0x64, 0xcd, 0xc0, 0xe2, 0x04, 0x35, 0x7a, 0x05, - 0x86, 0x9b, 0x29, 0x05, 0x77, 0x6f, 0xac, 0x09, 0x32, 0x95, 0xda, 0x26, 0x2d, 0xf3, 0x48, 0x6f, - 0x31, 0xff, 0xfb, 0xb5, 0xad, 0x80, 0x84, 0x5b, 0x7e, 0xa3, 0xce, 0x24, 0xe0, 0x5e, 0xcd, 0x23, - 0x3d, 0x81, 0xc7, 0xa9, 0x12, 0x94, 0xcb, 0x86, 0xe3, 0x36, 0x5a, 0x01, 0x89, 0xb9, 0xf4, 0x99, - 0x5c, 0x16, 0x13, 0x78, 0x9c, 0x2a, 0xd1, 0x59, 0x73, 0xdf, 0x7f, 0x34, 0x9a, 0x7b, 0xfb, 0xa7, - 0x0a, 0x60, 0x0c, 0xed, 0xb7, 0x6f, 0xe2, 0x31, 0xfa, 0x65, 0x9b, 0x41, 0xb3, 0x26, 0x1c, 0xca, - 0x32, 0xbf, 0x2c, 0xce, 0x3a, 0xcc, 0xbf, 0x8c, 0xfe, 0xc7, 0xac, 0x14, 0x5d, 0xe3, 0x27, 0x2b, - 0x81, 0x4f, 0x0f, 0x39, 0x19, 0xc4, 0x4e, 0x3d, 0xfc, 0xe8, 0x97, 0x0f, 0xfc, 0xdb, 0x84, 0x7b, - 0x15, 0xae, 0xf1, 0x9c, 0x83, 0xe1, 0x7b, 0x55, 0x15, 0x91, 0x36, 0x24, 0x17, 0x74, 0x19, 0x06, - 0x45, 0x36, 0x29, 0xf6, 0x3e, 0x81, 0x2f, 0x26, 0xe6, 0x2b, 0x36, 0x1f, 0x83, 0xb1, 0x4e, 0x63, - 0x7f, 0x7f, 0x01, 0x26, 0x32, 0x1e, 0x98, 0xf1, 0x63, 0x64, 0xd3, 0x0d, 0x23, 0x95, 0xd8, 0x58, - 0x3b, 0x46, 0x38, 0x1c, 0x2b, 0x0a, 0xba, 0x57, 0xf1, 0x83, 0x2a, 0x79, 0x38, 0x89, 0x07, 0x1c, - 0x02, 0x7b, 0xc8, 0x14, 0xc1, 0xe7, 0xa1, 0xa7, 0x15, 0x12, 0x19, 0xa8, 0x59, 0x1d, 0xdb, 0xcc, - 0xac, 0xcd, 0x30, 0xf4, 0x0a, 0xb8, 0xa9, 0x2c, 0xc4, 0xda, 0x15, 0x90, 0xdb, 0x88, 0x39, 0x8e, - 0x36, 0x2e, 0x22, 0x9e, 0xe3, 0x45, 0xe2, 0xa2, 0x18, 0x47, 0x1c, 0x65, 0x50, 0x2c, 0xb0, 0xf6, - 0x17, 0x8b, 0x70, 0x3a, 0xf7, 0xc9, 0x29, 0x6d, 0xfa, 0x8e, 0xef, 0xb9, 0x91, 0xaf, 0x9c, 0xf0, - 0x78, 0x94, 0x51, 0xd2, 0xdc, 0x5a, 0x11, 0x70, 0xac, 0x28, 0xd0, 0x05, 0xe8, 0x65, 0x4a, 0xf1, - 0x54, 0x8a, 0xe7, 0xd9, 0x79, 0x1e, 0x76, 0x8e, 0xa3, 0xbb, 0xce, 0xca, 0xff, 0x28, 0x95, 0x60, - 0xfc, 0x46, 0xf2, 0x40, 0xa1, 0xcd, 0xf5, 0xfd, 0x06, 0x66, 0x48, 0xf4, 0xb8, 0xe8, 0xaf, 0x84, - 0xd7, 0x19, 0x76, 0xea, 0x7e, 0xa8, 0x75, 0xda, 0x93, 0xd0, 0xbf, 0x4d, 0xf6, 0x02, 0xd7, 0xdb, - 0x4c, 0x7a, 0x23, 0x5e, 0xe3, 0x60, 0x2c, 0xf1, 0x66, 0xb6, 0xd1, 0xfe, 0xa3, 0x4e, 0xa7, 0x3f, - 0xd0, 0x51, 0x3c, 0xf9, 0xc1, 0x22, 0x8c, 0xe2, 0xd9, 0xf9, 0xf7, 0x06, 0xe2, 0x46, 0x7a, 0x20, - 0x8e, 0x3a, 0x9d, 0x7e, 0xe7, 0xd1, 0xf8, 0x79, 0x0b, 0x46, 0x59, 0x4e, 0x2b, 0x11, 0x2f, 0xc2, - 0xf5, 0xbd, 0x63, 0xb8, 0x0a, 0x3c, 0x0a, 0xbd, 0x01, 0xad, 0x34, 0x99, 0xdb, 0x99, 0xb5, 0x04, - 0x73, 0x1c, 0x3a, 0x03, 0x3d, 0xac, 0x09, 0x74, 0xf0, 0x86, 0xf8, 0x16, 0x3c, 0xef, 0x44, 0x0e, - 0x66, 0x50, 0x16, 0x74, 0x0d, 0x93, 0x66, 0xc3, 0xe5, 0x8d, 0x8e, 0x5d, 0x16, 0xde, 0x1d, 0xc1, - 0x28, 0x32, 0x9b, 0xf6, 0xf6, 0x82, 0xae, 0x65, 0xb3, 0x6c, 0x7f, 0xcd, 0xfe, 0xd3, 0x02, 0x9c, - 0xcb, 0x2c, 0xd7, 0x75, 0xd0, 0xb5, 0xf6, 0xa5, 0x1f, 0x64, 0xee, 0xa1, 0xe2, 0x31, 0xfa, 0x7a, - 0xf7, 0x74, 0x2b, 0xfd, 0xf7, 0x76, 0x11, 0x0b, 0x2d, 0xb3, 0xcb, 0xde, 0x25, 0xb1, 0xd0, 0x32, - 0xdb, 0x96, 0xa3, 0x26, 0xf8, 0xcb, 0x42, 0xce, 0xb7, 0x30, 0x85, 0xc1, 0x45, 0xba, 0xcf, 0x30, - 0x64, 0x28, 0x2f, 0xe1, 0x7c, 0x8f, 0xe1, 0x30, 0xac, 0xb0, 0x68, 0x06, 0x46, 0x77, 0x5c, 0x8f, - 0x6e, 0x3e, 0x7b, 0xa6, 0x28, 0xae, 0x6c, 0x19, 0x2b, 0x26, 0x1a, 0x27, 0xe9, 0x91, 0xab, 0xc5, - 0x49, 0xe3, 0x5f, 0xf7, 0xca, 0xa1, 0x56, 0xdd, 0xb4, 0xe9, 0xce, 0xa1, 0x7a, 0x31, 0x23, 0x66, - 0xda, 0x8a, 0xa6, 0x27, 0x2a, 0x76, 0xaf, 0x27, 0x1a, 0xca, 0xd6, 0x11, 0x4d, 0xbd, 0x02, 0xc3, - 0xf7, 0x6d, 0x1b, 0xb1, 0xbf, 0x51, 0x84, 0x87, 0xdb, 0x2c, 0x7b, 0xbe, 0xd7, 0x1b, 0x63, 0xa0, - 0xed, 0xf5, 0xa9, 0x71, 0xa8, 0xc0, 0x89, 0x8d, 0x56, 0xa3, 0xb1, 0xc7, 0x9e, 0x40, 0x91, 0xba, - 0xa4, 0x10, 0x32, 0xa5, 0x54, 0x8e, 0x9c, 0x58, 0xcc, 0xa0, 0xc1, 0x99, 0x25, 0xe9, 0x15, 0x8b, - 0x9e, 0x24, 0x7b, 0x8a, 0x55, 0xe2, 0x8a, 0x85, 0x75, 0x24, 0x36, 0x69, 0xd1, 0x15, 0x18, 0x77, - 0x76, 0x1d, 0x97, 0x07, 0x9b, 0x97, 0x0c, 0xf8, 0x1d, 0x4b, 0xe9, 0xa2, 0x67, 0x92, 0x04, 0x38, - 0x5d, 0x06, 0xbd, 0x06, 0xc8, 0x5f, 0x67, 0x0f, 0x25, 0xea, 0x57, 0x88, 0x27, 0xac, 0xee, 0x6c, - 0xec, 0x8a, 0xf1, 0x96, 0x70, 0x3d, 0x45, 0x81, 0x33, 0x4a, 0x25, 0x82, 0x82, 0xf5, 0xe5, 0x07, - 0x05, 0x6b, 0xbf, 0x2f, 0x76, 0x4c, 0x7b, 0x75, 0x19, 0x86, 0x0f, 0xe9, 0xfe, 0x6b, 0xff, 0x7b, - 0x0b, 0x94, 0x82, 0xd8, 0x8c, 0xb8, 0xfb, 0x0a, 0xf3, 0x4f, 0xe6, 0xaa, 0x6d, 0x2d, 0x52, 0xd1, - 0x49, 0xcd, 0x3f, 0x39, 0x46, 0x62, 0x93, 0x96, 0xcf, 0x21, 0xcd, 0xaf, 0xd8, 0xb8, 0x15, 0x88, - 0xb0, 0x80, 0x8a, 0x02, 0x7d, 0x1c, 0xfa, 0xeb, 0xee, 0xae, 0x1b, 0x0a, 0xe5, 0xd8, 0xa1, 0x8d, - 0x71, 0xf1, 0xd6, 0x39, 0xcf, 0xd9, 0x60, 0xc9, 0xcf, 0xfe, 0xc1, 0x42, 0xdc, 0x27, 0xaf, 0xb7, - 0xfc, 0xc8, 0x39, 0x86, 0x93, 0xfc, 0x8a, 0x71, 0x92, 0x3f, 0xde, 0x2e, 0x36, 0x22, 0x6b, 0x52, - 0xee, 0x09, 0x7e, 0x3d, 0x71, 0x82, 0x3f, 0xd1, 0x99, 0x55, 0xfb, 0x93, 0xfb, 0x1f, 0x5b, 0x30, - 0x6e, 0xd0, 0x1f, 0xc3, 0x01, 0xb2, 0x68, 0x1e, 0x20, 0x8f, 0x74, 0xfc, 0x86, 0x9c, 0x83, 0xe3, - 0x7b, 0x8a, 0x89, 0xb6, 0xb3, 0x03, 0xe3, 0x2d, 0xe8, 0xd9, 0x72, 0x82, 0x7a, 0xbb, 0x5c, 0x30, - 0xa9, 0x42, 0xd3, 0x57, 0x9d, 0x40, 0x78, 0x2a, 0x3c, 0x23, 0x7b, 0x9d, 0x82, 0x3a, 0x7a, 0x29, - 0xb0, 0xaa, 0xd0, 0x4b, 0xd0, 0x17, 0xd6, 0xfc, 0xa6, 0x7a, 0x33, 0xc5, 0xd2, 0x8d, 0x56, 0x19, - 0xe4, 0x60, 0xbf, 0x8c, 0xcc, 0xea, 0x28, 0x18, 0x0b, 0x7a, 0xf4, 0x06, 0x0c, 0xb3, 0x5f, 0xca, - 0x6d, 0xb0, 0x98, 0xaf, 0xc1, 0xa8, 0xea, 0x84, 0xdc, 0xa7, 0xd6, 0x00, 0x61, 0x93, 0xd5, 0xd4, - 0x26, 0x94, 0xd4, 0x67, 0x3d, 0x50, 0x6b, 0xf7, 0xbf, 0x2d, 0xc2, 0x44, 0xc6, 0x9c, 0x43, 0xa1, - 0x31, 0x12, 0x97, 0xbb, 0x9c, 0xaa, 0x6f, 0x73, 0x2c, 0x42, 0x76, 0x81, 0xaa, 0x8b, 0xb9, 0xd5, - 0x75, 0xa5, 0x37, 0x42, 0x92, 0xac, 0x94, 0x82, 0x3a, 0x57, 0x4a, 0x2b, 0x3b, 0xb6, 0xae, 0xa6, - 0x15, 0xa9, 0x96, 0x3e, 0xd0, 0x31, 0xfd, 0xd5, 0x1e, 0x38, 0x91, 0x15, 0xae, 0x15, 0x7d, 0x36, - 0x91, 0xc3, 0xf8, 0x85, 0x6e, 0x03, 0xbd, 0xf2, 0xc4, 0xc6, 0x22, 0x04, 0xe3, 0xb4, 0x99, 0xd5, - 0xb8, 0x63, 0x37, 0x8b, 0x3a, 0x59, 0xf0, 0x97, 0x80, 0xe7, 0x9e, 0x96, 0xdb, 0xc7, 0x07, 0xba, - 0x6e, 0x80, 0x48, 0x5a, 0x1d, 0x26, 0x5c, 0x92, 0x24, 0xb8, 0xb3, 0x4b, 0x92, 0xac, 0x19, 0x2d, - 0x41, 0x5f, 0x8d, 0xfb, 0xba, 0x14, 0x3b, 0x6f, 0x61, 0xdc, 0xd1, 0x45, 0x6d, 0xc0, 0xc2, 0xc1, - 0x45, 0x30, 0x98, 0x72, 0x61, 0x50, 0xeb, 0x98, 0x07, 0x3a, 0x79, 0xb6, 0xe9, 0xc1, 0xa7, 0x75, - 0xc1, 0x03, 0x9d, 0x40, 0x3f, 0x62, 0x41, 0xe2, 0xc1, 0x8b, 0x52, 0xca, 0x59, 0xb9, 0x4a, 0xb9, - 0xf3, 0xd0, 0x13, 0xf8, 0x0d, 0x92, 0xcc, 0xfe, 0x8b, 0xfd, 0x06, 0xc1, 0x0c, 0x43, 0x29, 0xa2, - 0x58, 0xd5, 0x32, 0xa4, 0x5f, 0x23, 0xc5, 0x05, 0xf1, 0x51, 0xe8, 0x6d, 0x90, 0x5d, 0xd2, 0x48, - 0x26, 0x69, 0x5b, 0xa6, 0x40, 0xcc, 0x71, 0xf6, 0xcf, 0xf7, 0xc0, 0xd9, 0xb6, 0x91, 0x98, 0xe8, - 0x65, 0x6c, 0xd3, 0x89, 0xc8, 0x6d, 0x67, 0x2f, 0x99, 0x4d, 0xe9, 0x0a, 0x07, 0x63, 0x89, 0x67, - 0xcf, 0x3f, 0x79, 0x52, 0x84, 0x84, 0x0a, 0x53, 0xe4, 0x42, 0x10, 0x58, 0x53, 0x25, 0x56, 0x3c, - 0x0a, 0x95, 0xd8, 0x73, 0x00, 0x61, 0xd8, 0xe0, 0x6e, 0x81, 0x75, 0xf1, 0xae, 0x34, 0x4e, 0x9e, - 0x51, 0x5d, 0x16, 0x18, 0xac, 0x51, 0xa1, 0x79, 0x18, 0x6b, 0x06, 0x7e, 0xc4, 0x35, 0xc2, 0xf3, - 0xdc, 0x73, 0xb6, 0xd7, 0x0c, 0x82, 0x53, 0x49, 0xe0, 0x71, 0xaa, 0x04, 0x7a, 0x11, 0x06, 0x45, - 0x60, 0x9c, 0x8a, 0xef, 0x37, 0x84, 0x12, 0x4a, 0x39, 0x93, 0x56, 0x63, 0x14, 0xd6, 0xe9, 0xb4, - 0x62, 0x4c, 0xcd, 0xdc, 0x9f, 0x59, 0x8c, 0xab, 0x9a, 0x35, 0xba, 0x44, 0x14, 0xe8, 0x81, 0xae, - 0xa2, 0x40, 0xc7, 0x6a, 0xb9, 0x52, 0xd7, 0x56, 0x4f, 0xe8, 0xa8, 0xc8, 0xfa, 0x6a, 0x0f, 0x4c, - 0x88, 0x89, 0xf3, 0xa0, 0xa7, 0xcb, 0x8d, 0xf4, 0x74, 0x39, 0x0a, 0xc5, 0xdd, 0x7b, 0x73, 0xe6, - 0xb8, 0xe7, 0xcc, 0x0f, 0x59, 0x60, 0x4a, 0x6a, 0xe8, 0xff, 0xc9, 0x4d, 0x47, 0xf7, 0x62, 0xae, - 0xe4, 0x17, 0x47, 0xd8, 0x7d, 0x7b, 0x89, 0xe9, 0xec, 0x7f, 0x67, 0xc1, 0x23, 0x1d, 0x39, 0xa2, - 0x05, 0x28, 0x31, 0x71, 0x52, 0xbb, 0xe8, 0x3d, 0xa1, 0x3c, 0xeb, 0x25, 0x22, 0x47, 0xba, 0x8d, - 0x4b, 0xa2, 0x85, 0x54, 0xde, 0xbf, 0x27, 0x33, 0xf2, 0xfe, 0x9d, 0x34, 0xba, 0xe7, 0x3e, 0x13, - 0xff, 0xfd, 0x00, 0x3d, 0x71, 0x8c, 0x57, 0x6d, 0xe8, 0x03, 0x86, 0xd2, 0xd1, 0x4e, 0x28, 0x1d, - 0x91, 0x49, 0xad, 0x9d, 0x21, 0x1f, 0x85, 0x31, 0x16, 0x31, 0x8f, 0xbd, 0xf3, 0x10, 0xef, 0xed, - 0x0a, 0xb1, 0x2f, 0xf7, 0x72, 0x02, 0x87, 0x53, 0xd4, 0xf6, 0x1f, 0x17, 0xa1, 0x8f, 0x2f, 0xbf, - 0x63, 0xb8, 0x5e, 0x3e, 0x0d, 0x25, 0x77, 0x67, 0xa7, 0xc5, 0x53, 0xb9, 0xf5, 0xc6, 0x9e, 0xc1, - 0x4b, 0x12, 0x88, 0x63, 0x3c, 0x5a, 0x14, 0xfa, 0xee, 0x36, 0x41, 0x79, 0x79, 0xc3, 0xa7, 0xe7, - 0x9d, 0xc8, 0xe1, 0xb2, 0x92, 0x3a, 0x67, 0x63, 0xcd, 0x38, 0xfa, 0x14, 0x40, 0x18, 0x05, 0xae, - 0xb7, 0x49, 0x61, 0x22, 0xae, 0xf9, 0x53, 0x6d, 0xb8, 0x55, 0x15, 0x31, 0xe7, 0x19, 0xef, 0x39, - 0x0a, 0x81, 0x35, 0x8e, 0x68, 0xda, 0x38, 0xe9, 0xa7, 0x12, 0x63, 0x07, 0x9c, 0x6b, 0x3c, 0x66, - 0x53, 0x1f, 0x84, 0x92, 0x62, 0xde, 0x49, 0xfb, 0x35, 0xa4, 0x8b, 0x45, 0x1f, 0x81, 0xd1, 0x44, - 0xdb, 0x0e, 0xa5, 0x3c, 0xfb, 0x05, 0x0b, 0x46, 0x79, 0x63, 0x16, 0xbc, 0x5d, 0x71, 0x1a, 0xdc, - 0x85, 0x13, 0x8d, 0x8c, 0x5d, 0x59, 0x0c, 0x7f, 0xf7, 0xbb, 0xb8, 0x52, 0x96, 0x65, 0x61, 0x71, - 0x66, 0x1d, 0xe8, 0x22, 0x5d, 0x71, 0x74, 0xd7, 0x75, 0x1a, 0x22, 0xbe, 0xc1, 0x10, 0x5f, 0x6d, - 0x1c, 0x86, 0x15, 0xd6, 0xfe, 0x3d, 0x0b, 0xc6, 0x79, 0xcb, 0xaf, 0x91, 0x3d, 0xb5, 0x37, 0xbd, - 0x93, 0x6d, 0x17, 0x49, 0x44, 0x0b, 0x39, 0x49, 0x44, 0xf5, 0x4f, 0x2b, 0xb6, 0xfd, 0xb4, 0xaf, - 0x58, 0x20, 0x66, 0xc8, 0x31, 0xe8, 0x33, 0xbe, 0xc3, 0xd4, 0x67, 0x4c, 0xe5, 0x2f, 0x82, 0x1c, - 0x45, 0xc6, 0x5f, 0x58, 0x30, 0xc6, 0x09, 0x62, 0x5b, 0xfd, 0x3b, 0x3a, 0x0e, 0xb3, 0xe6, 0x17, - 0x65, 0x3a, 0x5f, 0x5e, 0x23, 0x7b, 0x6b, 0x7e, 0xc5, 0x89, 0xb6, 0xb2, 0x3f, 0xca, 0x18, 0xac, - 0x9e, 0xb6, 0x83, 0x55, 0x97, 0x0b, 0xc8, 0xc8, 0xb1, 0xd5, 0x21, 0x40, 0xc0, 0x61, 0x73, 0x6c, - 0xd9, 0x7f, 0x62, 0x01, 0xe2, 0xd5, 0x18, 0x82, 0x1b, 0x15, 0x87, 0x18, 0x54, 0x3b, 0xe8, 0xe2, - 0xad, 0x49, 0x61, 0xb0, 0x46, 0x75, 0x24, 0xdd, 0x93, 0x70, 0xb8, 0x28, 0x76, 0x76, 0xb8, 0x38, - 0x44, 0x8f, 0xfe, 0xcb, 0x3e, 0x48, 0xbe, 0xec, 0x43, 0x37, 0x61, 0xa8, 0xe6, 0x34, 0x9d, 0x75, - 0xb7, 0xe1, 0x46, 0x2e, 0x09, 0xdb, 0x79, 0x63, 0xcd, 0x69, 0x74, 0xc2, 0x44, 0xae, 0x41, 0xb0, - 0xc1, 0x07, 0x4d, 0x03, 0x34, 0x03, 0x77, 0xd7, 0x6d, 0x90, 0x4d, 0xa6, 0x76, 0x61, 0x11, 0x55, - 0xb8, 0x6b, 0x98, 0x84, 0x62, 0x8d, 0x22, 0x23, 0x8c, 0x42, 0xf1, 0x01, 0x87, 0x51, 0x80, 0x63, - 0x0b, 0xa3, 0xd0, 0x73, 0xa8, 0x30, 0x0a, 0x03, 0x87, 0x0e, 0xa3, 0xd0, 0xdb, 0x55, 0x18, 0x05, - 0x0c, 0xa7, 0xa4, 0xec, 0x49, 0xff, 0x2f, 0xba, 0x0d, 0x22, 0x2e, 0x1c, 0x3c, 0x0c, 0xcc, 0xd4, - 0xbd, 0xfd, 0xf2, 0x29, 0x9c, 0x49, 0x81, 0x73, 0x4a, 0xa2, 0x8f, 0xc1, 0xa4, 0xd3, 0x68, 0xf8, - 0xb7, 0xd5, 0xa0, 0x2e, 0x84, 0x35, 0xa7, 0xc1, 0x4d, 0x20, 0xfd, 0x8c, 0xeb, 0x99, 0x7b, 0xfb, - 0xe5, 0xc9, 0x99, 0x1c, 0x1a, 0x9c, 0x5b, 0x1a, 0x7d, 0x18, 0x4a, 0xcd, 0xc0, 0xaf, 0xad, 0x68, - 0xcf, 0x8f, 0xcf, 0xd1, 0x0e, 0xac, 0x48, 0xe0, 0xc1, 0x7e, 0x79, 0x58, 0xfd, 0x61, 0x07, 0x7e, - 0x5c, 0x20, 0x23, 0x2e, 0xc2, 0xe0, 0x91, 0xc6, 0x45, 0xd8, 0x86, 0x89, 0x2a, 0x09, 0x5c, 0xa7, - 0xe1, 0xde, 0xa5, 0xf2, 0xb2, 0xdc, 0x9f, 0xd6, 0xa0, 0x14, 0x24, 0x76, 0xe4, 0xae, 0x02, 0xe5, - 0x6a, 0xc9, 0x8e, 0xe4, 0x0e, 0x1c, 0x33, 0xb2, 0xff, 0xa7, 0x05, 0xfd, 0xe2, 0x25, 0xdf, 0x31, - 0x48, 0x8d, 0x33, 0x86, 0x51, 0xa2, 0x9c, 0xdd, 0x61, 0xac, 0x31, 0xb9, 0xe6, 0x88, 0xa5, 0x84, - 0x39, 0xe2, 0x91, 0x76, 0x4c, 0xda, 0x1b, 0x22, 0xfe, 0x66, 0x91, 0x4a, 0xef, 0xc6, 0x9b, 0xf2, - 0x07, 0xdf, 0x05, 0xab, 0xd0, 0x1f, 0x8a, 0x37, 0xcd, 0x85, 0xfc, 0xd7, 0x20, 0xc9, 0x41, 0x8c, - 0xbd, 0xe8, 0xc4, 0x2b, 0x66, 0xc9, 0x24, 0xf3, 0xb1, 0x74, 0xf1, 0x01, 0x3e, 0x96, 0xee, 0xf4, - 0xea, 0xbe, 0xe7, 0x28, 0x5e, 0xdd, 0xdb, 0x5f, 0x67, 0x27, 0xa7, 0x0e, 0x3f, 0x06, 0xa1, 0xea, - 0x8a, 0x79, 0xc6, 0xda, 0x6d, 0x66, 0x96, 0x68, 0x54, 0x8e, 0x70, 0xf5, 0x73, 0x16, 0x9c, 0xcd, - 0xf8, 0x2a, 0x4d, 0xd2, 0x7a, 0x06, 0x06, 0x9c, 0x56, 0xdd, 0x55, 0x6b, 0x59, 0x33, 0x4d, 0xce, - 0x08, 0x38, 0x56, 0x14, 0x68, 0x0e, 0xc6, 0xc9, 0x9d, 0xa6, 0xcb, 0x0d, 0xb9, 0xba, 0xf3, 0x71, - 0x91, 0x3f, 0xff, 0x5c, 0x48, 0x22, 0x71, 0x9a, 0x5e, 0x05, 0x88, 0x2a, 0xe6, 0x06, 0x88, 0xfa, - 0x59, 0x0b, 0x06, 0xd5, 0xab, 0xde, 0x07, 0xde, 0xdb, 0x1f, 0x35, 0x7b, 0xfb, 0xe1, 0x36, 0xbd, - 0x9d, 0xd3, 0xcd, 0xbf, 0x53, 0x50, 0xed, 0xad, 0xf8, 0x41, 0xd4, 0x85, 0x04, 0x77, 0xff, 0x0f, - 0x27, 0x2e, 0xc3, 0xa0, 0xd3, 0x6c, 0x4a, 0x84, 0xf4, 0x80, 0x63, 0x61, 0xcf, 0x63, 0x30, 0xd6, - 0x69, 0xd4, 0x3b, 0x8e, 0x62, 0xee, 0x3b, 0x8e, 0x3a, 0x40, 0xe4, 0x04, 0x9b, 0x24, 0xa2, 0x30, - 0xe1, 0xb0, 0x9b, 0xbf, 0xdf, 0xb4, 0x22, 0xb7, 0x31, 0xed, 0x7a, 0x51, 0x18, 0x05, 0xd3, 0x4b, - 0x5e, 0x74, 0x3d, 0xe0, 0x57, 0x48, 0x2d, 0xc4, 0x9a, 0xe2, 0x85, 0x35, 0xbe, 0x32, 0x82, 0x05, - 0xab, 0xa3, 0xd7, 0x74, 0xa5, 0x58, 0x15, 0x70, 0xac, 0x28, 0xec, 0x0f, 0xb2, 0xd3, 0x87, 0xf5, - 0xe9, 0xe1, 0xc2, 0x8b, 0xfd, 0xc4, 0x90, 0x1a, 0x0d, 0x66, 0x14, 0x9d, 0xd7, 0x83, 0x98, 0xb5, - 0xdf, 0xec, 0x69, 0xc5, 0xfa, 0x8b, 0xc8, 0x38, 0xd2, 0x19, 0xfa, 0x44, 0xca, 0x3d, 0xe6, 0xd9, - 0x0e, 0xa7, 0xc6, 0x21, 0x1c, 0x62, 0x58, 0x0e, 0x24, 0x96, 0x21, 0x66, 0xa9, 0x22, 0xd6, 0x85, - 0x96, 0x03, 0x49, 0x20, 0x70, 0x4c, 0x43, 0x85, 0x29, 0xf5, 0x27, 0x9c, 0x44, 0x71, 0x2c, 0x60, - 0x45, 0x1d, 0x62, 0x8d, 0x02, 0x5d, 0x12, 0x0a, 0x05, 0x6e, 0x17, 0x78, 0x38, 0xa1, 0x50, 0x90, - 0xdd, 0xa5, 0x69, 0x81, 0x2e, 0xc3, 0xa0, 0xca, 0xde, 0x5f, 0xe1, 0x99, 0xd4, 0xc4, 0x34, 0x5b, - 0x88, 0xc1, 0x58, 0xa7, 0x41, 0x6b, 0x30, 0x1a, 0x72, 0x3d, 0x9b, 0x0a, 0xd0, 0xce, 0xf5, 0x95, - 0x4f, 0xa9, 0xf7, 0xd4, 0x26, 0xfa, 0x80, 0x81, 0xf8, 0xee, 0x24, 0xa3, 0x4c, 0x24, 0x59, 0xa0, - 0x57, 0x61, 0xa4, 0xe1, 0x3b, 0xf5, 0x59, 0xa7, 0xe1, 0x78, 0x35, 0xd6, 0x3f, 0x03, 0x66, 0x12, - 0xe8, 0x65, 0x03, 0x8b, 0x13, 0xd4, 0x54, 0x78, 0xd3, 0x21, 0x22, 0x4c, 0x9b, 0xe3, 0x6d, 0x92, - 0x50, 0xe4, 0x62, 0x67, 0xc2, 0xdb, 0x72, 0x0e, 0x0d, 0xce, 0x2d, 0x8d, 0x5e, 0x82, 0x21, 0xf9, - 0xf9, 0x5a, 0x50, 0x96, 0xf8, 0x49, 0x8c, 0x86, 0xc3, 0x06, 0x25, 0x0a, 0xe1, 0xa4, 0xfc, 0xbf, - 0x16, 0x38, 0x1b, 0x1b, 0x6e, 0x4d, 0x44, 0x2a, 0xe0, 0xcf, 0x87, 0x3f, 0x22, 0xdf, 0x2a, 0x2e, - 0x64, 0x11, 0x1d, 0xec, 0x97, 0xcf, 0x88, 0x5e, 0xcb, 0xc4, 0xe3, 0x6c, 0xde, 0x68, 0x05, 0x26, - 0xb6, 0x88, 0xd3, 0x88, 0xb6, 0xe6, 0xb6, 0x48, 0x6d, 0x5b, 0x2e, 0x38, 0x16, 0xe6, 0x45, 0x7b, - 0x3a, 0x72, 0x35, 0x4d, 0x82, 0xb3, 0xca, 0xa1, 0x37, 0x61, 0xb2, 0xd9, 0x5a, 0x6f, 0xb8, 0xe1, - 0xd6, 0xaa, 0x1f, 0x31, 0x27, 0xa4, 0x19, 0x99, 0xfd, 0x5f, 0xc4, 0x83, 0x51, 0x81, 0x74, 0x2a, - 0x39, 0x74, 0x38, 0x97, 0x03, 0xba, 0x0b, 0x27, 0x13, 0x13, 0x41, 0x44, 0xc4, 0x18, 0xc9, 0x4f, - 0xcf, 0x52, 0xcd, 0x2a, 0x20, 0x82, 0xcb, 0x64, 0xa1, 0x70, 0x76, 0x15, 0xe8, 0x65, 0x00, 0xb7, - 0xb9, 0xe8, 0xec, 0xb8, 0x0d, 0x7a, 0x55, 0x9c, 0x60, 0x73, 0x84, 0x5e, 0x1b, 0x60, 0xa9, 0x22, - 0xa1, 0x74, 0x6f, 0x16, 0xff, 0xf6, 0xb0, 0x46, 0x8d, 0x96, 0x61, 0x44, 0xfc, 0xdb, 0x13, 0x43, - 0xca, 0x03, 0xb3, 0x3c, 0xc6, 0xa2, 0x6a, 0x55, 0x74, 0xcc, 0x41, 0x0a, 0x82, 0x13, 0x65, 0xd1, - 0x26, 0x9c, 0x95, 0x49, 0xf6, 0xf4, 0xf9, 0x29, 0xc7, 0x20, 0x64, 0x39, 0x51, 0x06, 0xf8, 0xab, - 0x94, 0x99, 0x76, 0x84, 0xb8, 0x3d, 0x1f, 0x7a, 0xae, 0xeb, 0xd3, 0x9c, 0xbf, 0x39, 0x3e, 0x19, - 0x47, 0x1c, 0x5c, 0x4e, 0x22, 0x71, 0x9a, 0x1e, 0xf9, 0x70, 0xd2, 0xf5, 0xb2, 0x66, 0xf5, 0x29, - 0xc6, 0xe8, 0x43, 0xfc, 0xb9, 0x75, 0xfb, 0x19, 0x9d, 0x89, 0xc7, 0xd9, 0x7c, 0xdf, 0x9e, 0xdf, - 0xdf, 0xef, 0x5a, 0xb4, 0xb4, 0x26, 0x9d, 0xa3, 0x4f, 0xc3, 0x90, 0xfe, 0x51, 0x42, 0xd2, 0xb8, - 0x90, 0x2d, 0xbc, 0x6a, 0x7b, 0x02, 0x97, 0xed, 0xd5, 0xba, 0xd7, 0x71, 0xd8, 0xe0, 0x88, 0x6a, - 0x19, 0xb1, 0x0d, 0x2e, 0x75, 0x27, 0xc9, 0x74, 0xef, 0xf6, 0x46, 0x20, 0x7b, 0xba, 0xa3, 0x65, - 0x18, 0xa8, 0x35, 0x5c, 0xe2, 0x45, 0x4b, 0x95, 0x76, 0xd1, 0x1b, 0xe7, 0x04, 0x8d, 0x58, 0x3f, - 0x22, 0xbd, 0x09, 0x87, 0x61, 0xc5, 0xc1, 0xfe, 0xf5, 0x02, 0x94, 0x3b, 0xe4, 0xca, 0x49, 0x98, - 0xa1, 0xac, 0xae, 0xcc, 0x50, 0x33, 0x30, 0x1a, 0xff, 0xd3, 0x35, 0x5c, 0xca, 0x93, 0xf5, 0xa6, - 0x89, 0xc6, 0x49, 0xfa, 0xae, 0x1f, 0x25, 0xe8, 0x96, 0xac, 0x9e, 0x8e, 0xcf, 0x6a, 0x0c, 0x0b, - 0x76, 0x6f, 0xf7, 0xd7, 0xde, 0x5c, 0x6b, 0xa4, 0xfd, 0xf5, 0x02, 0x9c, 0x54, 0x5d, 0xf8, 0xed, - 0xdb, 0x71, 0x37, 0xd2, 0x1d, 0x77, 0x04, 0xb6, 0x5c, 0xfb, 0x3a, 0xf4, 0xf1, 0x70, 0x94, 0x5d, - 0x88, 0xdb, 0x8f, 0x9a, 0x51, 0xb2, 0x95, 0x84, 0x67, 0x44, 0xca, 0xfe, 0x3e, 0x0b, 0x46, 0x13, - 0xaf, 0xdb, 0x10, 0xd6, 0x9e, 0x40, 0xdf, 0x8f, 0x48, 0x9c, 0x25, 0x6c, 0x9f, 0x87, 0x9e, 0x2d, - 0x3f, 0x8c, 0x92, 0x8e, 0x1e, 0x57, 0xfd, 0x30, 0xc2, 0x0c, 0x63, 0xff, 0xbe, 0x05, 0xbd, 0x6b, - 0x8e, 0xeb, 0x45, 0xd2, 0x28, 0x60, 0xe5, 0x18, 0x05, 0xba, 0xf9, 0x2e, 0xf4, 0x22, 0xf4, 0x91, - 0x8d, 0x0d, 0x52, 0x8b, 0xc4, 0xa8, 0xca, 0x50, 0x08, 0x7d, 0x0b, 0x0c, 0x4a, 0xe5, 0x3f, 0x56, - 0x19, 0xff, 0x8b, 0x05, 0x31, 0xba, 0x05, 0xa5, 0xc8, 0xdd, 0x21, 0x33, 0xf5, 0xba, 0x30, 0x95, - 0xdf, 0x47, 0xfc, 0x8e, 0x35, 0xc9, 0x00, 0xc7, 0xbc, 0xec, 0x2f, 0x16, 0x00, 0xe2, 0x38, 0x5e, - 0x9d, 0x3e, 0x71, 0x36, 0x65, 0x44, 0xbd, 0x90, 0x61, 0x44, 0x45, 0x31, 0xc3, 0x0c, 0x0b, 0xaa, - 0xea, 0xa6, 0x62, 0x57, 0xdd, 0xd4, 0x73, 0x98, 0x6e, 0x9a, 0x83, 0xf1, 0x38, 0x0e, 0x99, 0x19, - 0x86, 0x91, 0x1d, 0x9d, 0x6b, 0x49, 0x24, 0x4e, 0xd3, 0xdb, 0x04, 0xce, 0xab, 0x70, 0x4c, 0xe2, - 0x44, 0x63, 0x7e, 0xe0, 0xba, 0x51, 0xba, 0x43, 0x3f, 0xc5, 0x56, 0xe2, 0x42, 0xae, 0x95, 0xf8, - 0xc7, 0x2d, 0x38, 0x91, 0xac, 0x87, 0x3d, 0x9a, 0xfe, 0x82, 0x05, 0x27, 0x99, 0xad, 0x9c, 0xd5, - 0x9a, 0xb6, 0xcc, 0xbf, 0xd0, 0x36, 0xc4, 0x54, 0x4e, 0x8b, 0xe3, 0x98, 0x1b, 0x2b, 0x59, 0xac, - 0x71, 0x76, 0x8d, 0xf6, 0xff, 0xe8, 0x81, 0xc9, 0xbc, 0xd8, 0x54, 0xec, 0x99, 0x88, 0x73, 0xa7, - 0xba, 0x4d, 0x6e, 0x0b, 0x67, 0xfc, 0xf8, 0x99, 0x08, 0x07, 0x63, 0x89, 0x4f, 0xa6, 0x3f, 0x29, - 0x74, 0x99, 0xfe, 0x64, 0x0b, 0xc6, 0x6f, 0x6f, 0x11, 0xef, 0x86, 0x17, 0x3a, 0x91, 0x1b, 0x6e, - 0xb8, 0xcc, 0xae, 0xcc, 0xe7, 0x8d, 0xcc, 0xff, 0x3c, 0x7e, 0x2b, 0x49, 0x70, 0xb0, 0x5f, 0x3e, - 0x6b, 0x00, 0xe2, 0x26, 0xf3, 0x8d, 0x04, 0xa7, 0x99, 0xa6, 0xb3, 0xc7, 0xf4, 0x3c, 0xe0, 0xec, - 0x31, 0x3b, 0xae, 0xf0, 0x46, 0x91, 0x6f, 0x00, 0xd8, 0x8d, 0x71, 0x45, 0x41, 0xb1, 0x46, 0x81, - 0x3e, 0x09, 0x48, 0xcf, 0x8e, 0x65, 0x84, 0x06, 0x7d, 0xf6, 0xde, 0x7e, 0x19, 0xad, 0xa6, 0xb0, - 0x07, 0xfb, 0xe5, 0x09, 0x0a, 0x5d, 0xf2, 0xe8, 0xcd, 0x33, 0x8e, 0xa7, 0x96, 0xc1, 0x08, 0xdd, - 0x82, 0x31, 0x0a, 0x65, 0x2b, 0x4a, 0xc6, 0x1d, 0xe5, 0xb7, 0xc5, 0xa7, 0xef, 0xed, 0x97, 0xc7, - 0x56, 0x13, 0xb8, 0x3c, 0xd6, 0x29, 0x26, 0xe8, 0x65, 0x18, 0x89, 0xe7, 0xd5, 0x35, 0xb2, 0xc7, - 0x03, 0xf4, 0x94, 0xb8, 0xc2, 0x7b, 0xc5, 0xc0, 0xe0, 0x04, 0xa5, 0xfd, 0x05, 0x0b, 0x4e, 0xe7, - 0x66, 0xa3, 0x47, 0x17, 0x61, 0xc0, 0x69, 0xba, 0xdc, 0x7c, 0x21, 0x8e, 0x1a, 0xa6, 0x26, 0xab, - 0x2c, 0x71, 0xe3, 0x85, 0xc2, 0xd2, 0x1d, 0x7e, 0xdb, 0xf5, 0xea, 0xc9, 0x1d, 0xfe, 0x9a, 0xeb, - 0xd5, 0x31, 0xc3, 0xa8, 0x23, 0xab, 0x98, 0xfb, 0x14, 0xe1, 0xab, 0x74, 0xad, 0x66, 0xe4, 0xad, - 0x3f, 0xde, 0x66, 0xa0, 0xa7, 0x75, 0x53, 0xa3, 0xf0, 0x2a, 0xcc, 0x35, 0x33, 0x7e, 0xaf, 0x05, - 0xe2, 0xe9, 0x72, 0x17, 0x67, 0xf2, 0x1b, 0x30, 0xb4, 0x9b, 0xce, 0x1c, 0x78, 0x3e, 0xff, 0x2d, - 0xb7, 0x88, 0xb8, 0xae, 0x04, 0x6d, 0x23, 0x4b, 0xa0, 0xc1, 0xcb, 0xae, 0x83, 0xc0, 0xce, 0x13, - 0x66, 0x50, 0xe8, 0xdc, 0x9a, 0xe7, 0x00, 0xea, 0x8c, 0x96, 0xa5, 0x13, 0x2e, 0x98, 0x12, 0xd7, - 0xbc, 0xc2, 0x60, 0x8d, 0xca, 0xfe, 0x57, 0x05, 0x18, 0x94, 0x99, 0xea, 0x5a, 0x5e, 0x37, 0x6a, - 0xbf, 0x43, 0xa5, 0xae, 0x46, 0x97, 0xa0, 0xc4, 0xf4, 0xd2, 0x95, 0x58, 0x5b, 0xaa, 0xb4, 0x42, - 0x2b, 0x12, 0x81, 0x63, 0x1a, 0xba, 0x3b, 0x86, 0xad, 0x75, 0x46, 0x9e, 0x78, 0x68, 0x5b, 0xe5, - 0x60, 0x2c, 0xf1, 0xe8, 0x63, 0x30, 0xc6, 0xcb, 0x05, 0x7e, 0xd3, 0xd9, 0xe4, 0xb6, 0xac, 0x5e, - 0x15, 0xbd, 0x64, 0x6c, 0x25, 0x81, 0x3b, 0xd8, 0x2f, 0x9f, 0x48, 0xc2, 0x98, 0x91, 0x36, 0xc5, - 0x85, 0xb9, 0xac, 0xf1, 0x4a, 0xe8, 0xae, 0x9e, 0xf2, 0x74, 0x8b, 0x51, 0x58, 0xa7, 0xb3, 0x3f, - 0x0d, 0x28, 0x9d, 0xb3, 0x0f, 0xbd, 0xc6, 0x5d, 0x9e, 0xdd, 0x80, 0xd4, 0xdb, 0x19, 0x6d, 0xf5, - 0x18, 0x1d, 0xf2, 0x8d, 0x1c, 0x2f, 0x85, 0x55, 0x79, 0xfb, 0xaf, 0x14, 0x61, 0x2c, 0x19, 0x15, - 0x00, 0x5d, 0x85, 0x3e, 0x2e, 0x52, 0x0a, 0xf6, 0x6d, 0x7c, 0x82, 0xb4, 0x58, 0x02, 0xec, 0x70, - 0x15, 0x52, 0xa9, 0x28, 0x8f, 0xde, 0x84, 0xc1, 0xba, 0x7f, 0xdb, 0xbb, 0xed, 0x04, 0xf5, 0x99, - 0xca, 0x92, 0x98, 0xce, 0x99, 0x8a, 0x8a, 0xf9, 0x98, 0x4c, 0x8f, 0x4f, 0xc0, 0xec, 0xdf, 0x31, - 0x0a, 0xeb, 0xec, 0xd0, 0x1a, 0x4b, 0xf4, 0xb1, 0xe1, 0x6e, 0xae, 0x38, 0xcd, 0x76, 0xef, 0x5f, - 0xe6, 0x24, 0x91, 0xc6, 0x79, 0x58, 0x64, 0x03, 0xe1, 0x08, 0x1c, 0x33, 0x42, 0x9f, 0x85, 0x89, - 0x30, 0xc7, 0x74, 0x92, 0x97, 0xc2, 0xb5, 0x9d, 0x35, 0x61, 0xf6, 0xa1, 0x7b, 0xfb, 0xe5, 0x89, - 0x2c, 0x23, 0x4b, 0x56, 0x35, 0xf6, 0x97, 0x4e, 0x80, 0xb1, 0x88, 0x8d, 0x8c, 0xde, 0xd6, 0x11, - 0x65, 0xf4, 0xc6, 0x30, 0x40, 0x76, 0x9a, 0xd1, 0xde, 0xbc, 0x1b, 0x88, 0x31, 0xc9, 0xe4, 0xb9, - 0x20, 0x68, 0xd2, 0x3c, 0x25, 0x06, 0x2b, 0x3e, 0xd9, 0x69, 0xd7, 0x8b, 0xef, 0x60, 0xda, 0xf5, - 0x9e, 0x63, 0x4c, 0xbb, 0xbe, 0x0a, 0xfd, 0x9b, 0x6e, 0x84, 0x49, 0xd3, 0x17, 0x97, 0xb9, 0xcc, - 0x79, 0x78, 0x85, 0x93, 0xa4, 0x13, 0xfc, 0x0a, 0x04, 0x96, 0x4c, 0xd0, 0x6b, 0x6a, 0x05, 0xf6, - 0xe5, 0x2b, 0x5c, 0xd2, 0xce, 0x2b, 0x99, 0x6b, 0x50, 0x24, 0x57, 0xef, 0xbf, 0xdf, 0xe4, 0xea, - 0x8b, 0x32, 0x25, 0xfa, 0x40, 0xfe, 0x63, 0x35, 0x96, 0xf1, 0xbc, 0x43, 0x22, 0xf4, 0x9b, 0x7a, - 0x1a, 0xf9, 0x52, 0xfe, 0x4e, 0xa0, 0x32, 0xc4, 0x77, 0x99, 0x3c, 0xfe, 0x7b, 0x2d, 0x38, 0x99, - 0x4c, 0xf3, 0xca, 0xde, 0x54, 0x08, 0x3f, 0x8f, 0x17, 0xbb, 0xc9, 0xbb, 0xcb, 0x0a, 0x18, 0x15, - 0x32, 0x1d, 0x69, 0x26, 0x19, 0xce, 0xae, 0x8e, 0x76, 0x74, 0xb0, 0x5e, 0x17, 0xfe, 0x06, 0x8f, - 0xe6, 0x64, 0xa1, 0x6f, 0x93, 0x7b, 0x7e, 0x2d, 0x23, 0xe3, 0xf9, 0x63, 0x79, 0x19, 0xcf, 0xbb, - 0xce, 0x73, 0xfe, 0x9a, 0xca, 0x3f, 0x3f, 0x9c, 0x3f, 0x95, 0x78, 0x76, 0xf9, 0x8e, 0x59, 0xe7, - 0x5f, 0x53, 0x59, 0xe7, 0xdb, 0x44, 0x16, 0xe7, 0x39, 0xe5, 0x3b, 0xe6, 0x9a, 0xd7, 0xf2, 0xc5, - 0x8f, 0x1e, 0x4d, 0xbe, 0x78, 0xe3, 0xa8, 0xe1, 0x29, 0xcb, 0x9f, 0xee, 0x70, 0xd4, 0x18, 0x7c, - 0xdb, 0x1f, 0x36, 0x3c, 0x37, 0xfe, 0xf8, 0x7d, 0xe5, 0xc6, 0xbf, 0xa9, 0xe7, 0x9a, 0x47, 0x1d, - 0x92, 0xa9, 0x53, 0xa2, 0x2e, 0x33, 0xcc, 0xdf, 0xd4, 0x0f, 0xc0, 0x89, 0x7c, 0xbe, 0xea, 0x9c, - 0x4b, 0xf3, 0xcd, 0x3c, 0x02, 0x53, 0x99, 0xeb, 0x4f, 0x1c, 0x4f, 0xe6, 0xfa, 0x93, 0x47, 0x9e, - 0xb9, 0xfe, 0xd4, 0x31, 0x64, 0xae, 0x7f, 0xe8, 0x18, 0x33, 0xd7, 0xdf, 0x64, 0xce, 0x51, 0x3c, - 0x00, 0x94, 0x88, 0x84, 0xfe, 0x64, 0x4e, 0xfc, 0xb4, 0x74, 0x94, 0x28, 0xfe, 0x71, 0x0a, 0x85, - 0x63, 0x56, 0x19, 0x19, 0xf1, 0x27, 0x1f, 0x40, 0x46, 0xfc, 0xd5, 0x38, 0x23, 0xfe, 0xe9, 0xfc, - 0xa1, 0xce, 0x78, 0x4e, 0x93, 0x93, 0x07, 0xff, 0xa6, 0x9e, 0xbf, 0xfe, 0xe1, 0x36, 0x56, 0xb0, - 0x2c, 0x85, 0x72, 0x9b, 0xac, 0xf5, 0xaf, 0xf2, 0xac, 0xf5, 0x67, 0xf2, 0x77, 0xf2, 0xe4, 0x71, - 0x67, 0xe4, 0xaa, 0xa7, 0xed, 0x52, 0xc1, 0x5f, 0x59, 0xcc, 0xf7, 0x9c, 0x76, 0xa9, 0xe8, 0xb1, - 0xe9, 0x76, 0x29, 0x14, 0x8e, 0x59, 0xd9, 0xdf, 0x5f, 0x80, 0x73, 0xed, 0xd7, 0x5b, 0xac, 0x25, - 0xaf, 0xc4, 0x0e, 0x01, 0x09, 0x2d, 0x39, 0xbf, 0xb3, 0xc5, 0x54, 0x5d, 0xc7, 0x83, 0xbc, 0x02, - 0xe3, 0xea, 0x1d, 0x4e, 0xc3, 0xad, 0xed, 0xad, 0xc6, 0xd7, 0x64, 0x15, 0x39, 0xa1, 0x9a, 0x24, - 0xc0, 0xe9, 0x32, 0x68, 0x06, 0x46, 0x0d, 0xe0, 0xd2, 0xbc, 0xb8, 0x9b, 0xc5, 0x51, 0xc6, 0x4d, - 0x34, 0x4e, 0xd2, 0xdb, 0x5f, 0xb6, 0xe0, 0xa1, 0x9c, 0x94, 0xaf, 0x5d, 0x87, 0x3b, 0xdc, 0x80, - 0xd1, 0xa6, 0x59, 0xb4, 0x43, 0x84, 0x56, 0x23, 0xb1, 0xac, 0x6a, 0x6b, 0x02, 0x81, 0x93, 0x4c, - 0xed, 0x9f, 0x2e, 0xc0, 0xd9, 0xb6, 0x8e, 0xa5, 0x08, 0xc3, 0xa9, 0xcd, 0x9d, 0xd0, 0x99, 0x0b, - 0x48, 0x9d, 0x78, 0x91, 0xeb, 0x34, 0xaa, 0x4d, 0x52, 0xd3, 0xec, 0x1c, 0xcc, 0x43, 0xf3, 0xca, - 0x4a, 0x75, 0x26, 0x4d, 0x81, 0x73, 0x4a, 0xa2, 0x45, 0x40, 0x69, 0x8c, 0x18, 0x61, 0x96, 0x3d, - 0x20, 0xcd, 0x0f, 0x67, 0x94, 0x40, 0x1f, 0x84, 0x61, 0xe5, 0xb0, 0xaa, 0x8d, 0x38, 0xdb, 0xd8, - 0xb1, 0x8e, 0xc0, 0x26, 0x1d, 0xba, 0xcc, 0xd3, 0x4f, 0x88, 0x44, 0x25, 0xc2, 0x28, 0x32, 0x2a, - 0x73, 0x4b, 0x08, 0x30, 0xd6, 0x69, 0x66, 0x5f, 0xfa, 0x8d, 0x6f, 0x9e, 0x7b, 0xdf, 0x6f, 0x7f, - 0xf3, 0xdc, 0xfb, 0x7e, 0xef, 0x9b, 0xe7, 0xde, 0xf7, 0x5d, 0xf7, 0xce, 0x59, 0xbf, 0x71, 0xef, - 0x9c, 0xf5, 0xdb, 0xf7, 0xce, 0x59, 0xbf, 0x77, 0xef, 0x9c, 0xf5, 0x87, 0xf7, 0xce, 0x59, 0x5f, - 0xfc, 0xa3, 0x73, 0xef, 0x7b, 0x03, 0xc5, 0x01, 0x44, 0x2f, 0xd1, 0xd1, 0xb9, 0xb4, 0x7b, 0xf9, - 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x57, 0x00, 0xfe, 0x47, 0x13, 0x01, 0x00, + 0xba, 0xa8, 0xcb, 0xf5, 0xd0, 0x3d, 0xe8, 0x17, 0x0e, 0x97, 0x22, 0x2c, 0xd9, 0xe5, 0x2e, 0xea, + 0x13, 0xfe, 0x9a, 0xbc, 0xce, 0xcb, 0xf2, 0x72, 0x2e, 0xa0, 0x1d, 0xeb, 0x95, 0x15, 0xa2, 0xff, + 0xc7, 0x82, 0x11, 0xf1, 0x1b, 0x93, 0xb7, 0x5b, 0x24, 0x8c, 0x84, 0xf0, 0xfa, 0x81, 0xee, 0xdb, + 0x20, 0x0a, 0xf2, 0xa6, 0x7c, 0x40, 0x9e, 0x33, 0x26, 0xb2, 0x63, 0x8b, 0x12, 0xad, 0x40, 0x7f, + 0xdb, 0x82, 0x13, 0x3b, 0xce, 0x5d, 0x5e, 0x23, 0x87, 0x61, 0x27, 0x72, 0x7d, 0xe1, 0xb8, 0xf0, + 0xe1, 0xee, 0x86, 0x3f, 0x55, 0x9c, 0x37, 0x52, 0x5a, 0x29, 0x4f, 0x64, 0x91, 0x74, 0x6c, 0x6a, + 0x66, 0xbb, 0xa6, 0x36, 0x60, 0x40, 0xce, 0xb7, 0x87, 0xe9, 0xdd, 0xcd, 0xea, 0x11, 0x73, 0xed, + 0xa1, 0xd6, 0xf3, 0x19, 0x18, 0xd2, 0xe7, 0xd8, 0x43, 0xad, 0xeb, 0x6d, 0x98, 0xc8, 0x98, 0x4b, + 0x0f, 0xb5, 0xca, 0x3b, 0x70, 0x26, 0x77, 0x7e, 0x3c, 0x54, 0xef, 0xfc, 0xaf, 0x5a, 0xfa, 0x3e, + 0x78, 0x0c, 0x26, 0x8d, 0x39, 0xd3, 0xa4, 0x71, 0xbe, 0xfd, 0xca, 0xc9, 0xb1, 0x6b, 0xbc, 0xa5, + 0x37, 0x9a, 0xee, 0xea, 0xe8, 0x75, 0xe8, 0x6b, 0x50, 0x88, 0x74, 0xdb, 0xb5, 0x3b, 0xaf, 0xc8, + 0x58, 0x98, 0x64, 0xf0, 0x10, 0x0b, 0x0e, 0xf6, 0x2f, 0x5b, 0xd0, 0x73, 0x0c, 0x3d, 0x81, 0xcd, + 0x9e, 0x78, 0x2e, 0x97, 0xb5, 0x88, 0xd0, 0x3e, 0x8d, 0x9d, 0x3b, 0x0b, 0x77, 0x23, 0xe2, 0x85, + 0xec, 0x44, 0xce, 0xec, 0x98, 0x9f, 0xb2, 0x60, 0x62, 0xd9, 0x77, 0xea, 0xb3, 0x4e, 0xc3, 0xf1, + 0x6a, 0x24, 0x58, 0xf2, 0x36, 0x0f, 0xe5, 0x73, 0x5e, 0xe8, 0xe8, 0x73, 0x3e, 0x27, 0x5d, 0xb6, + 0x7a, 0xf2, 0xc7, 0x8f, 0x4a, 0xd2, 0xc9, 0x30, 0x4c, 0x86, 0x73, 0xf1, 0x16, 0x20, 0xbd, 0x95, + 0xe2, 0xe5, 0x15, 0x86, 0x7e, 0x97, 0xb7, 0x57, 0x0c, 0xe2, 0x93, 0xd9, 0x12, 0x6e, 0xea, 0xf3, + 0xb4, 0x37, 0x45, 0x1c, 0x80, 0x25, 0x23, 0xfb, 0x65, 0xc8, 0x0c, 0x9b, 0xd1, 0x59, 0x7b, 0x61, + 0x7f, 0x1c, 0xc6, 0x59, 0xc9, 0x43, 0x6a, 0x06, 0xec, 0x84, 0xce, 0x35, 0x23, 0x04, 0xa8, 0xfd, + 0x05, 0x0b, 0x46, 0x57, 0x13, 0x91, 0x11, 0x2f, 0x32, 0x2b, 0x6d, 0x86, 0xaa, 0xbf, 0xca, 0xa0, + 0x58, 0x60, 0x8f, 0x5c, 0x15, 0xf6, 0xd7, 0x16, 0xc4, 0x91, 0x6c, 0x8e, 0x41, 0x7c, 0x9b, 0x33, + 0xc4, 0xb7, 0x4c, 0x41, 0x56, 0x35, 0x27, 0x4f, 0x7a, 0x43, 0xd7, 0x55, 0x8c, 0xb7, 0x36, 0x32, + 0x6c, 0xcc, 0x86, 0x4f, 0xc5, 0x11, 0x33, 0x10, 0x9c, 0x8c, 0xfa, 0x66, 0xff, 0x7e, 0x01, 0x90, + 0xa2, 0xed, 0x3a, 0x06, 0x5d, 0xba, 0xc4, 0xd1, 0xc4, 0xa0, 0xdb, 0x05, 0xc4, 0xfc, 0x0c, 0x02, + 0xc7, 0x0b, 0x39, 0x5b, 0x57, 0x28, 0xff, 0x0e, 0xe7, 0xc4, 0x30, 0x25, 0x1f, 0xa5, 0x2d, 0xa7, + 0xb8, 0xe1, 0x8c, 0x1a, 0x34, 0xff, 0x91, 0xde, 0x6e, 0xfd, 0x47, 0xfa, 0x3a, 0xbc, 0xae, 0xfc, + 0x8a, 0x05, 0xc3, 0xaa, 0x9b, 0xde, 0x25, 0x3e, 0xf8, 0xaa, 0x3d, 0x39, 0x1b, 0x68, 0x45, 0x6b, + 0x32, 0x3b, 0x58, 0xbe, 0x83, 0xbd, 0x92, 0x75, 0x1a, 0xee, 0x3d, 0xa2, 0x62, 0x96, 0x96, 0xc5, + 0xab, 0x57, 0x01, 0x3d, 0xd8, 0x2f, 0x0f, 0xab, 0x7f, 0x3c, 0x26, 0x7b, 0x5c, 0x84, 0x6e, 0xc9, + 0xa3, 0x89, 0xa9, 0x88, 0x5e, 0x82, 0xde, 0xe6, 0x96, 0x13, 0x92, 0xc4, 0x5b, 0xa5, 0xde, 0x0a, + 0x05, 0x1e, 0xec, 0x97, 0x47, 0x54, 0x01, 0x06, 0xc1, 0x9c, 0xba, 0xfb, 0xc8, 0x7e, 0xe9, 0xc9, + 0xd9, 0x31, 0xb2, 0xdf, 0x5f, 0x5a, 0xd0, 0xb3, 0xea, 0xd7, 0x8f, 0x63, 0x0b, 0x78, 0xcd, 0xd8, + 0x02, 0xce, 0xe6, 0xa5, 0xcb, 0xc8, 0x5d, 0xfd, 0x8b, 0x89, 0xd5, 0x7f, 0x3e, 0x97, 0x43, 0xfb, + 0x85, 0xbf, 0x03, 0x83, 0x2c, 0x09, 0x87, 0x78, 0x97, 0xf5, 0x82, 0xb1, 0xe0, 0xcb, 0x89, 0x05, + 0x3f, 0xaa, 0x91, 0x6a, 0x2b, 0xfd, 0x29, 0xe8, 0x17, 0x0f, 0x7d, 0x92, 0x8f, 0x8d, 0x05, 0x2d, + 0x96, 0x78, 0xfb, 0xc7, 0x8b, 0x60, 0x24, 0xfd, 0x40, 0xbf, 0x6a, 0xc1, 0x74, 0xc0, 0x1d, 0x80, + 0xeb, 0xf3, 0xad, 0xc0, 0xf5, 0x36, 0xab, 0xb5, 0x2d, 0x52, 0x6f, 0x35, 0x5c, 0x6f, 0x73, 0x69, + 0xd3, 0xf3, 0x15, 0x78, 0xe1, 0x2e, 0xa9, 0xb5, 0x98, 0x71, 0xae, 0x43, 0x86, 0x11, 0xe5, 0x48, + 0xff, 0xfc, 0xfd, 0xfd, 0xf2, 0x34, 0x3e, 0x14, 0x6f, 0x7c, 0xc8, 0xb6, 0xa0, 0xdf, 0xb1, 0xe0, + 0x32, 0xcf, 0x85, 0xd1, 0x7d, 0xfb, 0xdb, 0xdc, 0x96, 0x2b, 0x92, 0x55, 0xcc, 0x64, 0x8d, 0x04, + 0x3b, 0xb3, 0x1f, 0x14, 0x1d, 0x7a, 0xb9, 0x72, 0xb8, 0xba, 0xf0, 0x61, 0x1b, 0x67, 0xff, 0xc3, + 0x22, 0x0c, 0x8b, 0x08, 0x70, 0xe2, 0x0c, 0x78, 0xc9, 0x98, 0x12, 0x8f, 0x26, 0xa6, 0xc4, 0xb8, + 0x41, 0x7c, 0x34, 0xdb, 0x7f, 0x08, 0xe3, 0x74, 0x73, 0xbe, 0x46, 0x9c, 0x20, 0x5a, 0x27, 0x0e, + 0x77, 0x0b, 0x2b, 0x1e, 0x7a, 0xf7, 0x57, 0xfa, 0xc9, 0xe5, 0x24, 0x33, 0x9c, 0xe6, 0xff, 0xed, + 0x74, 0xe6, 0x78, 0x30, 0x96, 0x0a, 0xe2, 0xf7, 0x26, 0x94, 0xd4, 0x2b, 0x15, 0xb1, 0xe9, 0xb4, + 0x8f, 0x85, 0x99, 0xe4, 0xc0, 0xd5, 0x5f, 0xf1, 0x0b, 0xa9, 0x98, 0x9d, 0xfd, 0x77, 0x0b, 0x46, + 0x85, 0x7c, 0x10, 0x57, 0x61, 0xc0, 0x09, 0x43, 0x77, 0xd3, 0x23, 0xf5, 0x76, 0x1a, 0xca, 0x54, + 0x35, 0xec, 0xa5, 0xd0, 0x8c, 0x28, 0x89, 0x15, 0x0f, 0x74, 0x8d, 0x3b, 0xdf, 0xed, 0x92, 0x76, + 0xea, 0xc9, 0x14, 0x37, 0x90, 0xee, 0x79, 0xbb, 0x04, 0x8b, 0xf2, 0xe8, 0x93, 0xdc, 0x3b, 0xf2, + 0xba, 0xe7, 0xdf, 0xf1, 0xae, 0xfa, 0xbe, 0x8c, 0xf6, 0xd1, 0x1d, 0xc3, 0x71, 0xe9, 0x13, 0xa9, + 0x8a, 0x63, 0x93, 0x5b, 0x77, 0x51, 0x71, 0x3f, 0x0b, 0x2c, 0xf6, 0xbf, 0xf9, 0x28, 0x3c, 0x44, + 0x04, 0x46, 0x45, 0x78, 0x41, 0x09, 0x13, 0x7d, 0x97, 0x79, 0x95, 0x33, 0x4b, 0xc7, 0x8a, 0xf4, + 0xeb, 0x26, 0x0b, 0x9c, 0xe4, 0x69, 0xff, 0x8c, 0x05, 0xec, 0x81, 0xec, 0x31, 0xc8, 0x23, 0x1f, + 0x31, 0xe5, 0x91, 0xc9, 0xbc, 0x4e, 0xce, 0x11, 0x45, 0x5e, 0xe4, 0x33, 0xab, 0x12, 0xf8, 0x77, + 0xf7, 0x84, 0x4b, 0x4b, 0xe7, 0xfb, 0x87, 0xfd, 0xdf, 0x2d, 0xbe, 0x89, 0xc5, 0xe1, 0x04, 0x3e, + 0x07, 0x03, 0x35, 0xa7, 0xe9, 0xd4, 0x78, 0x86, 0xaa, 0x5c, 0x8d, 0x9e, 0x51, 0x68, 0x7a, 0x4e, + 0x94, 0xe0, 0x1a, 0x2a, 0x19, 0xa6, 0x72, 0x40, 0x82, 0x3b, 0x6a, 0xa5, 0x54, 0x95, 0x53, 0xdb, + 0x30, 0x6c, 0x30, 0x7b, 0xa8, 0xea, 0x8c, 0xcf, 0xf1, 0x23, 0x56, 0x85, 0x55, 0xdd, 0x81, 0x71, + 0x4f, 0xfb, 0x4f, 0x0f, 0x14, 0x79, 0xb9, 0x7c, 0xbc, 0xd3, 0x21, 0xca, 0x4e, 0x1f, 0xed, 0xed, + 0x6d, 0x82, 0x0d, 0x4e, 0x73, 0xb6, 0x7f, 0xc2, 0x82, 0xd3, 0x3a, 0xa1, 0xf6, 0xbc, 0xa7, 0x93, + 0x91, 0x64, 0x1e, 0x06, 0xfc, 0x26, 0x09, 0x9c, 0xc8, 0x0f, 0xc4, 0xa9, 0x71, 0x49, 0x76, 0xfa, + 0x0d, 0x01, 0x3f, 0x10, 0xf9, 0x16, 0x24, 0x77, 0x09, 0xc7, 0xaa, 0x24, 0xbd, 0x7d, 0xb2, 0xce, + 0x08, 0xc5, 0x43, 0x2e, 0xb6, 0x07, 0x30, 0x7b, 0x7b, 0x88, 0x05, 0xc6, 0xfe, 0x33, 0x8b, 0x4f, + 0x2c, 0xbd, 0xe9, 0xe8, 0x6d, 0x18, 0xdb, 0x71, 0xa2, 0xda, 0xd6, 0xc2, 0xdd, 0x66, 0xc0, 0x4d, + 0x4e, 0xb2, 0x9f, 0x9e, 0xe9, 0xd4, 0x4f, 0xda, 0x47, 0xc6, 0x0e, 0x9f, 0x2b, 0x09, 0x66, 0x38, + 0xc5, 0x1e, 0xad, 0xc3, 0x20, 0x83, 0xb1, 0x37, 0x8a, 0x61, 0x3b, 0xd1, 0x20, 0xaf, 0x36, 0xe5, + 0xb2, 0xb0, 0x12, 0xf3, 0xc1, 0x3a, 0x53, 0xfb, 0xcb, 0x45, 0xbe, 0xda, 0x99, 0x28, 0xff, 0x14, + 0xf4, 0x37, 0xfd, 0xfa, 0xdc, 0xd2, 0x3c, 0x16, 0xa3, 0xa0, 0x8e, 0x91, 0x0a, 0x07, 0x63, 0x89, + 0x47, 0x97, 0x60, 0x40, 0xfc, 0x94, 0x26, 0x42, 0xb6, 0x37, 0x0b, 0xba, 0x10, 0x2b, 0x2c, 0x7a, + 0x1e, 0xa0, 0x19, 0xf8, 0xbb, 0x6e, 0x9d, 0xc5, 0x2c, 0x29, 0x9a, 0xde, 0x46, 0x15, 0x85, 0xc1, + 0x1a, 0x15, 0x7a, 0x15, 0x86, 0x5b, 0x5e, 0xc8, 0xc5, 0x11, 0x2d, 0x32, 0xb4, 0xf2, 0x83, 0xb9, + 0xa9, 0x23, 0xb1, 0x49, 0x8b, 0x66, 0xa0, 0x2f, 0x72, 0x98, 0xf7, 0x4c, 0x6f, 0xbe, 0x53, 0xf0, + 0x1a, 0xa5, 0xd0, 0x93, 0x21, 0xd1, 0x02, 0x58, 0x14, 0x44, 0x6f, 0xca, 0xe7, 0xc2, 0x7c, 0x63, + 0x17, 0xde, 0xf8, 0xdd, 0x1d, 0x02, 0xda, 0x63, 0x61, 0xe1, 0xe5, 0x6f, 0xf0, 0x42, 0xaf, 0x00, + 0x90, 0xbb, 0x11, 0x09, 0x3c, 0xa7, 0xa1, 0x7c, 0xde, 0x94, 0x5c, 0x30, 0xef, 0xaf, 0xfa, 0xd1, + 0xcd, 0x90, 0x2c, 0x28, 0x0a, 0xac, 0x51, 0xdb, 0xbf, 0x53, 0x02, 0x88, 0xe5, 0x76, 0x74, 0x2f, + 0xb5, 0x71, 0x3d, 0xdb, 0x5e, 0xd2, 0x3f, 0xba, 0x5d, 0x0b, 0x7d, 0x9f, 0x05, 0x83, 0x22, 0x34, + 0x0b, 0x1b, 0xa1, 0x42, 0xfb, 0x8d, 0xd3, 0x8c, 0x10, 0x43, 0x4b, 0xf0, 0x26, 0xbc, 0x20, 0x67, + 0xa8, 0x86, 0xe9, 0xd8, 0x0a, 0xbd, 0x62, 0xf4, 0x7e, 0x79, 0x55, 0x2c, 0x1a, 0x5d, 0xa9, 0xae, + 0x8a, 0x25, 0x76, 0x46, 0xe8, 0xb7, 0xc4, 0x9b, 0xc6, 0x2d, 0xb1, 0x27, 0xff, 0x3d, 0xa4, 0x21, + 0xbe, 0x76, 0xba, 0x20, 0xa2, 0x8a, 0x1e, 0x1b, 0xa1, 0x37, 0xff, 0x11, 0x9f, 0x76, 0x4f, 0xea, + 0x10, 0x17, 0xe1, 0x33, 0x30, 0x5a, 0x37, 0x85, 0x00, 0x31, 0x13, 0x9f, 0xcc, 0xe3, 0x9b, 0x90, + 0x19, 0xe2, 0x63, 0x3f, 0x81, 0xc0, 0x49, 0xc6, 0xa8, 0xc2, 0x43, 0x65, 0x2c, 0x79, 0x1b, 0xbe, + 0x78, 0x11, 0x62, 0xe7, 0x8e, 0xe5, 0x5e, 0x18, 0x91, 0x1d, 0x4a, 0x19, 0x9f, 0xee, 0xab, 0xa2, + 0x2c, 0x56, 0x5c, 0xd0, 0xeb, 0xd0, 0xc7, 0x5e, 0x71, 0x85, 0x93, 0x03, 0xf9, 0x1a, 0x67, 0x33, + 0x66, 0x60, 0xbc, 0x20, 0xd9, 0xdf, 0x10, 0x0b, 0x0e, 0xe8, 0x9a, 0x7c, 0x23, 0x19, 0x2e, 0x79, + 0x37, 0x43, 0xc2, 0xde, 0x48, 0x96, 0x66, 0x1f, 0x8f, 0x9f, 0x3f, 0x72, 0x78, 0x66, 0xca, 0x44, + 0xa3, 0x24, 0x95, 0xa2, 0xc4, 0x7f, 0x99, 0x89, 0x51, 0x44, 0x38, 0xca, 0x6c, 0x9e, 0x99, 0xad, + 0x31, 0xee, 0xce, 0x5b, 0x26, 0x0b, 0x9c, 0xe4, 0x49, 0x25, 0x52, 0xbe, 0xea, 0xc5, 0x9b, 0x92, + 0x4e, 0x7b, 0x07, 0xbf, 0x88, 0xb3, 0xd3, 0x88, 0x43, 0xb0, 0x28, 0x7f, 0xac, 0xe2, 0xc1, 0x94, + 0x07, 0x63, 0xc9, 0x25, 0xfa, 0x50, 0xc5, 0x91, 0x3f, 0xe9, 0x81, 0x11, 0x73, 0x4a, 0xa1, 0xcb, + 0x50, 0x12, 0x4c, 0x54, 0x36, 0x13, 0xb5, 0x4a, 0x56, 0x24, 0x02, 0xc7, 0x34, 0x2c, 0x89, 0x0d, + 0x2b, 0xae, 0x39, 0x11, 0xc7, 0x49, 0x6c, 0x14, 0x06, 0x6b, 0x54, 0xf4, 0x62, 0xb5, 0xee, 0xfb, + 0x91, 0x3a, 0x90, 0xd4, 0xbc, 0x9b, 0x65, 0x50, 0x2c, 0xb0, 0xf4, 0x20, 0xda, 0x26, 0x81, 0x47, + 0x1a, 0x66, 0x14, 0x71, 0x75, 0x10, 0x5d, 0xd7, 0x91, 0xd8, 0xa4, 0xa5, 0xc7, 0xa9, 0x1f, 0xb2, + 0x89, 0x2c, 0xae, 0x6f, 0xb1, 0x53, 0x76, 0x95, 0x3f, 0x2f, 0x97, 0x78, 0xf4, 0x71, 0x38, 0xad, + 0x22, 0x76, 0x61, 0x6e, 0xcd, 0x90, 0x35, 0xf6, 0x19, 0xda, 0x96, 0xd3, 0x73, 0xd9, 0x64, 0x38, + 0xaf, 0x3c, 0x7a, 0x0d, 0x46, 0x84, 0x88, 0x2f, 0x39, 0xf6, 0x9b, 0x1e, 0x46, 0xd7, 0x0d, 0x2c, + 0x4e, 0x50, 0xcb, 0x38, 0xe8, 0x4c, 0xca, 0x96, 0x1c, 0x06, 0xd2, 0x71, 0xd0, 0x75, 0x3c, 0x4e, + 0x95, 0x40, 0x33, 0x30, 0xca, 0x65, 0x30, 0xd7, 0xdb, 0xe4, 0x63, 0x22, 0x9e, 0x7c, 0xa9, 0x25, + 0x75, 0xc3, 0x44, 0xe3, 0x24, 0x3d, 0x7a, 0x19, 0x86, 0x9c, 0xa0, 0xb6, 0xe5, 0x46, 0xa4, 0x16, + 0xb5, 0x02, 0xfe, 0x16, 0x4c, 0x73, 0xd1, 0x9a, 0xd1, 0x70, 0xd8, 0xa0, 0xb4, 0xef, 0xc1, 0x44, + 0x46, 0xdc, 0x09, 0x3a, 0x71, 0x9c, 0xa6, 0x2b, 0xbf, 0x29, 0xe1, 0x07, 0x3d, 0x53, 0x59, 0x92, + 0x5f, 0xa3, 0x51, 0xd1, 0xd9, 0xc9, 0xe2, 0x53, 0x68, 0x89, 0x57, 0xd5, 0xec, 0x5c, 0x94, 0x08, + 0x1c, 0xd3, 0xd8, 0xff, 0xa9, 0x00, 0xa3, 0x19, 0xb6, 0x15, 0x96, 0xfc, 0x33, 0x71, 0x49, 0x89, + 0x73, 0x7d, 0x9a, 0x61, 0xf5, 0x0b, 0x87, 0x08, 0xab, 0x5f, 0xec, 0x14, 0x56, 0xbf, 0xe7, 0x9d, + 0x84, 0xd5, 0x37, 0x7b, 0xac, 0xb7, 0xab, 0x1e, 0xcb, 0x08, 0xc5, 0xdf, 0x77, 0xc8, 0x50, 0xfc, + 0x46, 0xa7, 0xf7, 0x77, 0xd1, 0xe9, 0x3f, 0x52, 0x80, 0xb1, 0xa4, 0x2b, 0xe9, 0x31, 0xe8, 0x6d, + 0x5f, 0x37, 0xf4, 0xb6, 0x97, 0xba, 0x79, 0xa2, 0x9b, 0xab, 0xc3, 0xc5, 0x09, 0x1d, 0xee, 0xd3, + 0x5d, 0x71, 0x6b, 0xaf, 0xcf, 0xfd, 0xc9, 0x02, 0x9c, 0xcc, 0x7c, 0x23, 0x7c, 0x0c, 0x7d, 0x73, + 0xc3, 0xe8, 0x9b, 0xe7, 0xba, 0x7e, 0xbe, 0x9c, 0xdb, 0x41, 0xb7, 0x13, 0x1d, 0x74, 0xb9, 0x7b, + 0x96, 0xed, 0x7b, 0xe9, 0xeb, 0x45, 0x38, 0x9f, 0x59, 0x2e, 0x56, 0x7b, 0x2e, 0x1a, 0x6a, 0xcf, + 0xe7, 0x13, 0x6a, 0x4f, 0xbb, 0x7d, 0xe9, 0xa3, 0xd1, 0x83, 0x8a, 0x67, 0xbc, 0x2c, 0x18, 0xc1, + 0x03, 0xea, 0x40, 0x8d, 0x67, 0xbc, 0x8a, 0x11, 0x36, 0xf9, 0x7e, 0x3b, 0xe9, 0x3e, 0x7f, 0xdb, + 0x82, 0x33, 0x99, 0x63, 0x73, 0x0c, 0xba, 0xae, 0x55, 0x53, 0xd7, 0xf5, 0x54, 0xd7, 0xb3, 0x35, + 0x47, 0xf9, 0xf5, 0xd3, 0xbd, 0x39, 0xdf, 0xc2, 0x6e, 0xf2, 0x37, 0x60, 0xd0, 0xa9, 0xd5, 0x48, + 0x18, 0xae, 0xf8, 0x75, 0x15, 0x81, 0xfb, 0x39, 0x76, 0xcf, 0x8a, 0xc1, 0x07, 0xfb, 0xe5, 0xa9, + 0x24, 0x8b, 0x18, 0x8d, 0x75, 0x0e, 0xe8, 0x93, 0x30, 0x10, 0x8a, 0x73, 0x53, 0x8c, 0xfd, 0x0b, + 0x5d, 0x76, 0x8e, 0xb3, 0x4e, 0x1a, 0x66, 0xa8, 0x27, 0xa5, 0xa9, 0x50, 0x2c, 0xcd, 0xb0, 0x30, + 0x85, 0x23, 0x0d, 0x0b, 0xf3, 0x3c, 0xc0, 0xae, 0xba, 0x0c, 0x24, 0xf5, 0x0f, 0xda, 0x35, 0x41, + 0xa3, 0x42, 0x1f, 0x85, 0xb1, 0x90, 0xc7, 0x42, 0x9c, 0x6b, 0x38, 0x21, 0x7b, 0x6d, 0x23, 0x66, + 0x21, 0x0b, 0x27, 0x55, 0x4d, 0xe0, 0x70, 0x8a, 0x1a, 0x2d, 0xca, 0x5a, 0x59, 0xe0, 0x46, 0x3e, + 0x31, 0x2f, 0xc6, 0x35, 0x8a, 0xd4, 0xe3, 0x27, 0x92, 0xdd, 0xcf, 0x3a, 0x5e, 0x2b, 0x89, 0x3e, + 0x09, 0x40, 0xa7, 0x8f, 0xd0, 0x43, 0xf4, 0xe7, 0x6f, 0x9e, 0x74, 0x57, 0xa9, 0x67, 0x3a, 0x37, + 0xb3, 0x97, 0xb7, 0xf3, 0x8a, 0x09, 0xd6, 0x18, 0x22, 0x07, 0x86, 0xe3, 0x7f, 0x71, 0x66, 0xde, + 0x4b, 0xb9, 0x35, 0x24, 0x99, 0x33, 0x95, 0xf7, 0xbc, 0xce, 0x02, 0x9b, 0x1c, 0xed, 0x7f, 0x37, + 0x00, 0x8f, 0xb4, 0xd9, 0x86, 0xd1, 0x8c, 0x69, 0xea, 0x7d, 0x26, 0x79, 0x7f, 0x9f, 0xca, 0x2c, + 0x6c, 0x5c, 0xe8, 0x13, 0xb3, 0xbd, 0xf0, 0x8e, 0x67, 0xfb, 0x0f, 0x59, 0x9a, 0x66, 0x85, 0x3b, + 0x95, 0x7e, 0xe4, 0x90, 0xc7, 0xcb, 0x11, 0xaa, 0x5a, 0x36, 0x32, 0xf4, 0x15, 0xcf, 0x77, 0xdd, + 0x9c, 0xee, 0x15, 0x18, 0x5f, 0xcd, 0x0e, 0x00, 0xcc, 0x55, 0x19, 0x57, 0x0f, 0xfb, 0xfd, 0xc7, + 0x15, 0x0c, 0xf8, 0xf7, 0x2d, 0x38, 0x93, 0x02, 0xf3, 0x36, 0x90, 0x50, 0xc4, 0xa8, 0x5a, 0x7d, + 0xc7, 0x8d, 0x97, 0x0c, 0xf9, 0x37, 0x5c, 0x13, 0xdf, 0x70, 0x26, 0x97, 0x2e, 0xd9, 0xf4, 0x1f, + 0xfc, 0xa3, 0xf2, 0x04, 0xab, 0xc0, 0x24, 0xc4, 0xf9, 0x4d, 0x3f, 0xde, 0x8b, 0xff, 0x37, 0x27, + 0xf6, 0xf1, 0xd4, 0x32, 0x9c, 0x6f, 0xdf, 0xd5, 0x87, 0x7a, 0x9e, 0xfc, 0x7b, 0x16, 0x9c, 0x6b, + 0x1b, 0x03, 0xe7, 0x5b, 0x50, 0xce, 0xb5, 0x3f, 0x6f, 0xc1, 0xa3, 0x99, 0x25, 0x0c, 0xef, 0xb8, + 0xcb, 0x50, 0xaa, 0x25, 0xf2, 0xa1, 0xc6, 0xd1, 0x20, 0x54, 0x2e, 0xd4, 0x98, 0xc6, 0x70, 0x82, + 0x2b, 0x74, 0x74, 0x82, 0xfb, 0x0d, 0x0b, 0x52, 0x67, 0xd5, 0x31, 0x08, 0x4d, 0x4b, 0xa6, 0xd0, + 0xf4, 0x78, 0x37, 0xbd, 0x99, 0x23, 0x2f, 0xfd, 0xc5, 0x28, 0x9c, 0xca, 0x79, 0x5d, 0xb8, 0x0b, + 0xe3, 0x9b, 0x35, 0x62, 0x3e, 0x27, 0x6f, 0x17, 0x66, 0xa9, 0xed, 0xdb, 0x73, 0x9e, 0x86, 0x36, + 0x45, 0x82, 0xd3, 0x55, 0xa0, 0xcf, 0x5b, 0x70, 0xc2, 0xb9, 0x13, 0x2e, 0x50, 0xe1, 0xd7, 0xad, + 0xcd, 0x36, 0xfc, 0xda, 0x36, 0x95, 0x2c, 0xe4, 0xb2, 0x7a, 0x31, 0x53, 0x21, 0x79, 0xbb, 0x9a, + 0xa2, 0x37, 0xaa, 0x67, 0x49, 0xc7, 0xb3, 0xa8, 0x70, 0x66, 0x5d, 0x08, 0x8b, 0xfc, 0x28, 0xf4, + 0x6a, 0xdd, 0x26, 0xe0, 0x41, 0xd6, 0x33, 0x50, 0x2e, 0xcd, 0x49, 0x0c, 0x56, 0x7c, 0xd0, 0xa7, + 0xa1, 0xb4, 0x29, 0xdf, 0x36, 0x67, 0x48, 0x8b, 0x71, 0x47, 0xb6, 0x7f, 0xf1, 0xcd, 0xbd, 0x0a, + 0x14, 0x11, 0x8e, 0x99, 0xa2, 0xd7, 0xa0, 0xe8, 0x6d, 0x84, 0xed, 0xf2, 0x76, 0x27, 0xdc, 0x47, + 0x79, 0x58, 0x91, 0xd5, 0xc5, 0x2a, 0xa6, 0x05, 0xd1, 0x35, 0x28, 0x06, 0xeb, 0x75, 0xa1, 0x4d, + 0xcf, 0x5c, 0xa4, 0x78, 0x76, 0x3e, 0xa7, 0x55, 0x8c, 0x13, 0x9e, 0x9d, 0xc7, 0x94, 0x05, 0xaa, + 0x40, 0x2f, 0x7b, 0x92, 0x27, 0x64, 0xb3, 0xcc, 0x5b, 0x68, 0x9b, 0xa7, 0xad, 0x3c, 0xf6, 0x08, + 0x23, 0xc0, 0x9c, 0x11, 0x5a, 0x83, 0xbe, 0x1a, 0xcb, 0xf1, 0x2c, 0x84, 0xb1, 0xf7, 0x67, 0xea, + 0xcd, 0xdb, 0x24, 0xbf, 0x16, 0x6a, 0x64, 0x46, 0x81, 0x05, 0x2f, 0xc6, 0x95, 0x34, 0xb7, 0x36, + 0x42, 0xa6, 0x77, 0xcb, 0xe3, 0xda, 0x26, 0xa7, 0xbb, 0xe0, 0xca, 0x28, 0xb0, 0xe0, 0x85, 0x5e, + 0x81, 0xc2, 0x46, 0x4d, 0x3c, 0xb7, 0xcb, 0x54, 0xa0, 0x9b, 0x91, 0x61, 0x66, 0xfb, 0xee, 0xef, + 0x97, 0x0b, 0x8b, 0x73, 0xb8, 0xb0, 0x51, 0x43, 0xab, 0xd0, 0xbf, 0xc1, 0x63, 0x49, 0x08, 0x1d, + 0xf9, 0x93, 0xd9, 0x61, 0x2e, 0x52, 0xe1, 0x26, 0xf8, 0xd3, 0x2d, 0x81, 0xc0, 0x92, 0x09, 0x4b, + 0xd7, 0xa1, 0x62, 0x62, 0x88, 0x90, 0x7c, 0xd3, 0x87, 0x8b, 0x63, 0xc2, 0x65, 0xe5, 0x38, 0xb2, + 0x06, 0xd6, 0x38, 0xd2, 0x59, 0xed, 0xdc, 0x6b, 0x05, 0x2c, 0x5e, 0xbb, 0x88, 0xdd, 0x94, 0x39, + 0xab, 0x67, 0x24, 0x51, 0xbb, 0x59, 0xad, 0x88, 0x70, 0xcc, 0x14, 0x6d, 0xc3, 0xf0, 0x6e, 0xd8, + 0xdc, 0x22, 0x72, 0x49, 0xb3, 0x50, 0x4e, 0x39, 0xb2, 0xde, 0x2d, 0x41, 0xe8, 0x06, 0x51, 0xcb, + 0x69, 0xa4, 0x76, 0x21, 0x26, 0x97, 0xdf, 0xd2, 0x99, 0x61, 0x93, 0x37, 0xed, 0xfe, 0xb7, 0x5b, + 0xfe, 0xfa, 0x5e, 0x44, 0x44, 0x24, 0xbd, 0xcc, 0xee, 0x7f, 0x83, 0x93, 0xa4, 0xbb, 0x5f, 0x20, + 0xb0, 0x64, 0x82, 0x6e, 0x89, 0xee, 0x61, 0xbb, 0xe7, 0x58, 0x7e, 0x98, 0xde, 0x19, 0x49, 0x94, + 0xd3, 0x29, 0x6c, 0xb7, 0x8c, 0x59, 0xb1, 0x5d, 0xb2, 0xb9, 0xe5, 0x47, 0xbe, 0x97, 0xd8, 0xa1, + 0xc7, 0xf3, 0x77, 0xc9, 0x4a, 0x06, 0x7d, 0x7a, 0x97, 0xcc, 0xa2, 0xc2, 0x99, 0x75, 0xa1, 0x3a, + 0x8c, 0x34, 0xfd, 0x20, 0xba, 0xe3, 0x07, 0x72, 0x7e, 0xa1, 0x36, 0x3a, 0x3e, 0x83, 0x52, 0xd4, + 0xc8, 0x82, 0x54, 0x9a, 0x18, 0x9c, 0xe0, 0x89, 0x3e, 0x06, 0xfd, 0x61, 0xcd, 0x69, 0x90, 0xa5, + 0x1b, 0x93, 0x13, 0xf9, 0xc7, 0x4f, 0x95, 0x93, 0xe4, 0xcc, 0x2e, 0x1e, 0x0a, 0x84, 0x93, 0x60, + 0xc9, 0x0e, 0x2d, 0x42, 0x2f, 0x4b, 0x83, 0xc9, 0xc2, 0x3e, 0xe6, 0x44, 0x1b, 0x4e, 0x39, 0xf3, + 0xf3, 0xbd, 0x89, 0x81, 0x31, 0x2f, 0x4e, 0xd7, 0x80, 0xb8, 0xea, 0xfa, 0xe1, 0xe4, 0xc9, 0xfc, + 0x35, 0x20, 0x6e, 0xc8, 0x37, 0xaa, 0xed, 0xd6, 0x80, 0x22, 0xc2, 0x31, 0x53, 0xba, 0x33, 0xd3, + 0xdd, 0xf4, 0x54, 0x1b, 0x2f, 0xb4, 0xdc, 0xbd, 0x94, 0xed, 0xcc, 0x74, 0x27, 0xa5, 0x2c, 0xec, + 0x3f, 0xee, 0x4f, 0xcb, 0x2c, 0x4c, 0x39, 0xf2, 0xbf, 0x5b, 0x29, 0xbb, 0xf9, 0x07, 0xba, 0xd5, + 0xd5, 0x1e, 0xe1, 0xb5, 0xee, 0xf3, 0x16, 0x9c, 0x6a, 0x66, 0x7e, 0x88, 0x10, 0x00, 0xba, 0x53, + 0xf9, 0xf2, 0x4f, 0x57, 0x21, 0x42, 0xb3, 0xf1, 0x38, 0xa7, 0xa6, 0xe4, 0xd5, 0xb9, 0xf8, 0x8e, + 0xaf, 0xce, 0x2b, 0x30, 0x50, 0xe3, 0xf7, 0x1c, 0x19, 0xda, 0xba, 0xab, 0x00, 0x77, 0x4c, 0x94, + 0x10, 0x17, 0xa4, 0x0d, 0xac, 0x58, 0xa0, 0x1f, 0xb6, 0xe0, 0x5c, 0xb2, 0xe9, 0x98, 0x30, 0xb4, + 0x88, 0x2b, 0xca, 0xf5, 0x32, 0x8b, 0xe2, 0xfb, 0x53, 0xf2, 0xbf, 0x41, 0x7c, 0xd0, 0x89, 0x00, + 0xb7, 0xaf, 0x0c, 0xcd, 0x67, 0x28, 0x86, 0xfa, 0x4c, 0x63, 0x58, 0x17, 0xca, 0xa1, 0x17, 0x61, + 0x68, 0xc7, 0x6f, 0x79, 0x91, 0x70, 0x5a, 0x13, 0x0e, 0x34, 0xcc, 0x71, 0x64, 0x45, 0x83, 0x63, + 0x83, 0x2a, 0xa1, 0x52, 0x1a, 0x78, 0x60, 0x95, 0xd2, 0x5b, 0x30, 0xe4, 0x69, 0x5e, 0xd6, 0x42, + 0x1e, 0xb8, 0x98, 0x1f, 0x13, 0x58, 0xf7, 0xc9, 0xe6, 0xad, 0xd4, 0x21, 0xd8, 0xe0, 0x76, 0xbc, + 0xde, 0x6c, 0x3f, 0x5f, 0xc8, 0x10, 0xea, 0xb9, 0x5a, 0xe9, 0xc3, 0xa6, 0x5a, 0xe9, 0x62, 0x52, + 0xad, 0x94, 0x32, 0x84, 0x18, 0x1a, 0xa5, 0xee, 0x53, 0x64, 0x75, 0x1d, 0x57, 0xf4, 0xbb, 0x2d, + 0x38, 0xcd, 0x34, 0xeb, 0xb4, 0x82, 0x77, 0xac, 0x4d, 0x7f, 0xe4, 0xfe, 0x7e, 0xf9, 0xf4, 0x72, + 0x36, 0x3b, 0x9c, 0x57, 0x8f, 0xdd, 0x80, 0x0b, 0x9d, 0x8e, 0x46, 0xe6, 0x41, 0x59, 0x57, 0xa6, + 0xf7, 0xd8, 0x83, 0xb2, 0xbe, 0x34, 0x8f, 0x19, 0xa6, 0xdb, 0xa8, 0x59, 0xf6, 0x7f, 0xb0, 0xa0, + 0x58, 0xf1, 0xeb, 0xc7, 0x70, 0xe9, 0xfe, 0x88, 0x71, 0xe9, 0x7e, 0x24, 0xfb, 0x50, 0xae, 0xe7, + 0x9a, 0x92, 0x16, 0x12, 0xa6, 0xa4, 0x73, 0x79, 0x0c, 0xda, 0x1b, 0x8e, 0x7e, 0xaa, 0x08, 0x83, + 0x15, 0xbf, 0xae, 0x9e, 0x2f, 0xfc, 0xe3, 0x07, 0x79, 0xbe, 0x90, 0x9b, 0xf4, 0x44, 0xe3, 0xcc, + 0x1c, 0x2f, 0xe5, 0xcb, 0xed, 0x6f, 0xb1, 0x57, 0x0c, 0xb7, 0x89, 0xbb, 0xb9, 0x15, 0x91, 0x7a, + 0xf2, 0x73, 0x8e, 0xef, 0x15, 0xc3, 0x1f, 0x17, 0x60, 0x34, 0x51, 0x3b, 0x6a, 0xc0, 0x70, 0x43, + 0x37, 0x54, 0x88, 0x79, 0xfa, 0x40, 0x36, 0x0e, 0xe1, 0x05, 0xae, 0x81, 0xb0, 0xc9, 0x1c, 0x4d, + 0x03, 0x28, 0xcb, 0xbd, 0x54, 0x57, 0xb3, 0x9b, 0x87, 0x32, 0xed, 0x87, 0x58, 0xa3, 0x40, 0x2f, + 0xc1, 0x60, 0xe4, 0x37, 0xfd, 0x86, 0xbf, 0xb9, 0x77, 0x9d, 0xc8, 0x80, 0x6a, 0xca, 0xb7, 0x73, + 0x2d, 0x46, 0x61, 0x9d, 0x0e, 0xdd, 0x85, 0x71, 0xc5, 0xa4, 0x7a, 0x04, 0xc6, 0x1b, 0xa6, 0xd9, + 0x58, 0x4d, 0x72, 0xc4, 0xe9, 0x4a, 0xec, 0x9f, 0x2d, 0xf2, 0x2e, 0xf6, 0x22, 0xf7, 0xbd, 0xd5, + 0xf0, 0xee, 0x5e, 0x0d, 0x5f, 0xb7, 0x60, 0x8c, 0xd6, 0xce, 0x1c, 0xd7, 0xa4, 0xa8, 0xa1, 0x22, + 0xa1, 0x5b, 0x6d, 0x22, 0xa1, 0x5f, 0xa4, 0xbb, 0x66, 0xdd, 0x6f, 0x45, 0x42, 0x7f, 0xa8, 0x6d, + 0x8b, 0x14, 0x8a, 0x05, 0x56, 0xd0, 0x91, 0x20, 0x10, 0x8f, 0x6d, 0x75, 0x3a, 0x12, 0x04, 0x58, + 0x60, 0x65, 0xa0, 0xf4, 0x9e, 0xec, 0x40, 0xe9, 0x3c, 0xde, 0xad, 0x70, 0x71, 0x12, 0x42, 0x9f, + 0x16, 0xef, 0x56, 0xfa, 0x3e, 0xc5, 0x34, 0xf6, 0x57, 0x8b, 0x30, 0x54, 0xf1, 0xeb, 0xb1, 0xd5, + 0xfe, 0x45, 0xc3, 0x6a, 0x7f, 0x21, 0x61, 0xb5, 0x1f, 0xd3, 0x69, 0xdf, 0xb3, 0xd1, 0x7f, 0xb3, + 0x6c, 0xf4, 0xbf, 0x6e, 0xb1, 0x51, 0x9b, 0x5f, 0xad, 0x72, 0x3f, 0x48, 0x74, 0x05, 0x06, 0xd9, + 0x06, 0xc3, 0x5e, 0x77, 0x4b, 0x53, 0x36, 0x4b, 0x5c, 0xb6, 0x1a, 0x83, 0xb1, 0x4e, 0x83, 0x2e, + 0xc1, 0x40, 0x48, 0x9c, 0xa0, 0xb6, 0xa5, 0x76, 0x57, 0x61, 0x77, 0xe6, 0x30, 0xac, 0xb0, 0xe8, + 0x8d, 0x38, 0xd4, 0x6a, 0x31, 0xff, 0xb5, 0xa8, 0xde, 0x1e, 0xbe, 0x44, 0xf2, 0xe3, 0xab, 0xda, + 0xb7, 0x01, 0xa5, 0xe9, 0xbb, 0x08, 0x06, 0x58, 0x36, 0x83, 0x01, 0x96, 0x52, 0x81, 0x00, 0xff, + 0xca, 0x82, 0x91, 0x8a, 0x5f, 0xa7, 0x4b, 0xf7, 0xdb, 0x69, 0x9d, 0xea, 0x71, 0xa6, 0xfb, 0xda, + 0xc4, 0x99, 0x7e, 0x0c, 0x7a, 0x2b, 0x7e, 0xbd, 0x43, 0xc0, 0xc2, 0xbf, 0x61, 0x41, 0x7f, 0xc5, + 0xaf, 0x1f, 0x83, 0x69, 0xe2, 0xc3, 0xa6, 0x69, 0xe2, 0x74, 0xce, 0xbc, 0xc9, 0xb1, 0x46, 0xfc, + 0xff, 0x3d, 0x30, 0x4c, 0xdb, 0xe9, 0x6f, 0xca, 0xa1, 0x34, 0xba, 0xcd, 0xea, 0xa2, 0xdb, 0xa8, + 0x14, 0xee, 0x37, 0x1a, 0xfe, 0x9d, 0xe4, 0xb0, 0x2e, 0x32, 0x28, 0x16, 0x58, 0xf4, 0x2c, 0x0c, + 0x34, 0x03, 0xb2, 0xeb, 0xfa, 0x42, 0xbc, 0xd5, 0x0c, 0x3d, 0x15, 0x01, 0xc7, 0x8a, 0x82, 0x5e, + 0x4d, 0x43, 0xd7, 0xa3, 0x47, 0x79, 0xcd, 0xf7, 0xea, 0x5c, 0x7b, 0x5f, 0x14, 0xc9, 0x50, 0x34, + 0x38, 0x36, 0xa8, 0xd0, 0x6d, 0x28, 0xb1, 0xff, 0x6c, 0xdb, 0x39, 0x7c, 0x1a, 0x66, 0x91, 0x1e, + 0x52, 0x30, 0xc0, 0x31, 0x2f, 0xf4, 0x3c, 0x40, 0x24, 0x13, 0x0a, 0x84, 0x22, 0x70, 0x9d, 0xba, + 0x0a, 0xa8, 0x54, 0x03, 0x21, 0xd6, 0xa8, 0xd0, 0x33, 0x50, 0x8a, 0x1c, 0xb7, 0xb1, 0xec, 0x7a, + 0xcc, 0xfe, 0x4b, 0xdb, 0x2f, 0xb2, 0x34, 0x0a, 0x20, 0x8e, 0xf1, 0x54, 0x14, 0x63, 0x41, 0x4d, + 0x78, 0x12, 0xfa, 0x01, 0x46, 0xcd, 0x44, 0xb1, 0x65, 0x05, 0xc5, 0x1a, 0x05, 0xda, 0x82, 0xb3, + 0xae, 0xc7, 0x12, 0x87, 0x90, 0xea, 0xb6, 0xdb, 0x5c, 0x5b, 0xae, 0xde, 0x22, 0x81, 0xbb, 0xb1, + 0x37, 0xeb, 0xd4, 0xb6, 0x89, 0x27, 0x13, 0xec, 0xca, 0xbc, 0xeb, 0x67, 0x97, 0xda, 0xd0, 0xe2, + 0xb6, 0x9c, 0xec, 0x17, 0xd8, 0x7c, 0xbf, 0x51, 0x45, 0x4f, 0x1b, 0x5b, 0xc7, 0x29, 0x7d, 0xeb, + 0x38, 0xd8, 0x2f, 0xf7, 0xdd, 0xa8, 0x6a, 0x31, 0x39, 0x5e, 0x86, 0x93, 0x15, 0xbf, 0x5e, 0xf1, + 0x83, 0x68, 0xd1, 0x0f, 0xee, 0x38, 0x41, 0x5d, 0x4e, 0xaf, 0xb2, 0x8c, 0x4a, 0x42, 0xf7, 0xcf, + 0x5e, 0xbe, 0xbb, 0x18, 0x11, 0x47, 0x5e, 0x60, 0x12, 0xdb, 0x21, 0xdf, 0xd2, 0xd5, 0x98, 0xec, + 0xa0, 0x52, 0xef, 0x5c, 0x75, 0x22, 0x82, 0x6e, 0xb0, 0x14, 0xfa, 0xf1, 0x31, 0x2a, 0x8a, 0x3f, + 0xa5, 0xa5, 0xd0, 0x8f, 0x91, 0x99, 0xe7, 0xae, 0x59, 0xde, 0xfe, 0x9c, 0xa8, 0x84, 0xeb, 0x01, + 0xb8, 0xbf, 0x62, 0x37, 0x39, 0xa8, 0x65, 0x6e, 0x8e, 0x42, 0x7e, 0x52, 0x07, 0x6e, 0x79, 0x6d, + 0x9b, 0x9b, 0xc3, 0xfe, 0x4e, 0x38, 0x95, 0xac, 0xbe, 0xeb, 0x44, 0xd8, 0x73, 0x30, 0x1e, 0xe8, + 0x05, 0xb5, 0x44, 0x67, 0x27, 0x79, 0x3e, 0x85, 0x04, 0x12, 0xa7, 0xe9, 0xed, 0x97, 0x60, 0x9c, + 0xde, 0x3d, 0x95, 0x20, 0xc7, 0x7a, 0xb9, 0x73, 0x78, 0x96, 0xff, 0xd8, 0xcb, 0x0e, 0xa2, 0x44, + 0xd6, 0x1b, 0xf4, 0x29, 0x18, 0x09, 0xc9, 0xb2, 0xeb, 0xb5, 0xee, 0x4a, 0xed, 0x53, 0x9b, 0x47, + 0xa4, 0xd5, 0x05, 0x9d, 0x92, 0xeb, 0xb0, 0x4d, 0x18, 0x4e, 0x70, 0x43, 0x3b, 0x30, 0x72, 0xc7, + 0xf5, 0xea, 0xfe, 0x9d, 0x50, 0xf2, 0x1f, 0xc8, 0x57, 0x65, 0xdf, 0xe6, 0x94, 0x89, 0x36, 0x1a, + 0xd5, 0xdd, 0x36, 0x98, 0xe1, 0x04, 0x73, 0xba, 0xd8, 0x83, 0x96, 0x37, 0x13, 0xde, 0x0c, 0x09, + 0x7f, 0x16, 0x28, 0x16, 0x3b, 0x96, 0x40, 0x1c, 0xe3, 0xe9, 0x62, 0x67, 0x7f, 0xae, 0x06, 0x7e, + 0x8b, 0xa7, 0x58, 0x11, 0x8b, 0x1d, 0x2b, 0x28, 0xd6, 0x28, 0xe8, 0x66, 0xc8, 0xfe, 0xad, 0xfa, + 0x1e, 0xf6, 0xfd, 0x48, 0x6e, 0x9f, 0x2c, 0x45, 0x98, 0x06, 0xc7, 0x06, 0x15, 0x5a, 0x04, 0x14, + 0xb6, 0x9a, 0xcd, 0x06, 0xf3, 0x4e, 0x73, 0x1a, 0x8c, 0x15, 0x77, 0xdb, 0x29, 0xf2, 0x10, 0xd1, + 0xd5, 0x14, 0x16, 0x67, 0x94, 0xa0, 0xe7, 0xe2, 0x86, 0x68, 0x6a, 0x2f, 0x6b, 0x2a, 0x37, 0x7b, + 0x55, 0x79, 0x3b, 0x25, 0x0e, 0x2d, 0x40, 0x7f, 0xb8, 0x17, 0xd6, 0xa2, 0x46, 0xd8, 0x2e, 0x21, + 0x5b, 0x95, 0x91, 0x68, 0xf9, 0x40, 0x79, 0x11, 0x2c, 0xcb, 0xa2, 0x1a, 0x4c, 0x08, 0x8e, 0x73, + 0x5b, 0x8e, 0xa7, 0xd2, 0x44, 0x71, 0x27, 0xfd, 0x2b, 0xf7, 0xf7, 0xcb, 0x13, 0xa2, 0x66, 0x1d, + 0x7d, 0xb0, 0x5f, 0xa6, 0x8b, 0x23, 0x03, 0x83, 0xb3, 0xb8, 0xf1, 0xc9, 0x57, 0xab, 0xf9, 0x3b, + 0xcd, 0x4a, 0xe0, 0x6f, 0xb8, 0x0d, 0xd2, 0xce, 0x74, 0x58, 0x35, 0x28, 0xc5, 0xe4, 0x33, 0x60, + 0x38, 0xc1, 0xcd, 0xfe, 0x1c, 0x93, 0x1d, 0xab, 0xee, 0xa6, 0xe7, 0x44, 0xad, 0x80, 0xa0, 0x1d, + 0x18, 0x6e, 0xb2, 0xdd, 0x45, 0x24, 0x3e, 0x11, 0x73, 0xfd, 0xc5, 0x2e, 0xd5, 0x4f, 0x77, 0x58, + 0xea, 0x36, 0xc3, 0xd5, 0xad, 0xa2, 0xb3, 0xc3, 0x26, 0x77, 0xfb, 0x5f, 0x9c, 0x61, 0xd2, 0x47, + 0x95, 0xeb, 0x94, 0xfa, 0xc5, 0x9b, 0x20, 0x71, 0x8d, 0x9d, 0xca, 0x57, 0xb0, 0xc6, 0xc3, 0x22, + 0xde, 0x15, 0x61, 0x59, 0x16, 0x7d, 0x12, 0x46, 0xe8, 0xad, 0x50, 0x49, 0x00, 0xe1, 0xe4, 0x89, + 0xfc, 0xd8, 0x2d, 0x8a, 0x4a, 0x4f, 0x8a, 0xa4, 0x17, 0xc6, 0x09, 0x66, 0xe8, 0x0d, 0xe6, 0x5a, + 0x26, 0x59, 0x17, 0xba, 0x61, 0xad, 0x7b, 0x91, 0x49, 0xb6, 0x1a, 0x13, 0xd4, 0x82, 0x89, 0x74, + 0xea, 0xc7, 0x70, 0xd2, 0xce, 0x17, 0xaf, 0xd3, 0xd9, 0x1b, 0xe3, 0xec, 0x35, 0x69, 0x5c, 0x88, + 0xb3, 0xf8, 0xa3, 0xe5, 0x64, 0x62, 0xbe, 0xa2, 0xa1, 0xf7, 0x4d, 0x25, 0xe7, 0x1b, 0x6e, 0x9b, + 0x93, 0x6f, 0x13, 0xce, 0x69, 0xb9, 0xcd, 0xae, 0x06, 0x0e, 0x73, 0xde, 0x70, 0xd9, 0x76, 0xaa, + 0xc9, 0x45, 0x8f, 0xde, 0xdf, 0x2f, 0x9f, 0x5b, 0x6b, 0x47, 0x88, 0xdb, 0xf3, 0x41, 0x37, 0xe0, + 0x24, 0x8f, 0x3c, 0x30, 0x4f, 0x9c, 0x7a, 0xc3, 0xf5, 0x94, 0xe0, 0xc5, 0x97, 0xfc, 0x99, 0xfb, + 0xfb, 0xe5, 0x93, 0x33, 0x59, 0x04, 0x38, 0xbb, 0x1c, 0xfa, 0x30, 0x94, 0xea, 0x5e, 0x28, 0xfa, + 0xa0, 0xcf, 0x48, 0x1f, 0x57, 0x9a, 0x5f, 0xad, 0xaa, 0xef, 0x8f, 0xff, 0xe0, 0xb8, 0x00, 0xda, + 0xe4, 0xb6, 0x01, 0xa5, 0x2d, 0xea, 0x4f, 0x45, 0x5e, 0x4b, 0x2a, 0x54, 0x8d, 0xb7, 0xc7, 0xdc, + 0x28, 0xa6, 0x9e, 0xe4, 0x18, 0xcf, 0x92, 0x0d, 0xc6, 0xe8, 0x75, 0x40, 0x22, 0x4d, 0xc1, 0x4c, + 0x8d, 0x65, 0xd5, 0x61, 0x47, 0xe3, 0x80, 0xf9, 0x1a, 0xb6, 0x9a, 0xa2, 0xc0, 0x19, 0xa5, 0xd0, + 0x35, 0xba, 0xab, 0xe8, 0x50, 0xb1, 0x6b, 0xa9, 0x24, 0xa5, 0xf3, 0xa4, 0x19, 0x10, 0xe6, 0x63, + 0x66, 0x72, 0xc4, 0x89, 0x72, 0xa8, 0x0e, 0x67, 0x9d, 0x56, 0xe4, 0x33, 0xb3, 0x8b, 0x49, 0xba, + 0xe6, 0x6f, 0x13, 0x8f, 0x59, 0x3c, 0x07, 0x66, 0x2f, 0x50, 0xc9, 0x6e, 0xa6, 0x0d, 0x1d, 0x6e, + 0xcb, 0x85, 0x4a, 0xe4, 0x2a, 0x2b, 0x39, 0x98, 0xf1, 0xe4, 0x32, 0x32, 0x93, 0xbf, 0x04, 0x83, + 0x5b, 0x7e, 0x18, 0xad, 0x92, 0xe8, 0x8e, 0x1f, 0x6c, 0x8b, 0xb8, 0xc8, 0x71, 0x2c, 0xfa, 0x18, + 0x85, 0x75, 0x3a, 0x7a, 0xe5, 0x66, 0xfe, 0x38, 0x4b, 0xf3, 0xcc, 0x15, 0x62, 0x20, 0xde, 0x63, + 0xae, 0x71, 0x30, 0x96, 0x78, 0x49, 0xba, 0x54, 0x99, 0x63, 0x6e, 0x0d, 0x09, 0xd2, 0xa5, 0xca, + 0x1c, 0x96, 0x78, 0x3a, 0x5d, 0xc3, 0x2d, 0x27, 0x20, 0x95, 0xc0, 0xaf, 0x91, 0x50, 0xcb, 0x80, + 0xf0, 0x08, 0x8f, 0xfa, 0x4c, 0xa7, 0x6b, 0x35, 0x8b, 0x00, 0x67, 0x97, 0x43, 0x24, 0x9d, 0xd7, + 0x6f, 0x24, 0xdf, 0x1e, 0x95, 0x96, 0x67, 0xba, 0x4c, 0xed, 0xe7, 0xc1, 0x98, 0xca, 0x28, 0xc8, + 0xe3, 0x3c, 0x87, 0x93, 0xa3, 0x6c, 0x6e, 0x77, 0x1f, 0x24, 0x5a, 0x59, 0xf8, 0x96, 0x12, 0x9c, + 0x70, 0x8a, 0xb7, 0x11, 0x32, 0x70, 0xac, 0x63, 0xc8, 0xc0, 0xcb, 0x50, 0x0a, 0x5b, 0xeb, 0x75, + 0x7f, 0xc7, 0x71, 0x3d, 0xe6, 0xd6, 0xa0, 0xdd, 0xfd, 0xaa, 0x12, 0x81, 0x63, 0x1a, 0xb4, 0x08, + 0x03, 0x8e, 0x34, 0xdf, 0xa1, 0xfc, 0x20, 0x51, 0xca, 0x68, 0xc7, 0xe3, 0xa6, 0x48, 0x83, 0x9d, + 0x2a, 0x8b, 0x5e, 0x85, 0x61, 0xf1, 0x72, 0x5e, 0x24, 0xe1, 0x9d, 0x30, 0x9f, 0x37, 0x56, 0x75, + 0x24, 0x36, 0x69, 0xd1, 0x4d, 0x18, 0x8c, 0xfc, 0x06, 0x7b, 0xa3, 0x47, 0xc5, 0xbc, 0x53, 0xf9, + 0xe1, 0x0e, 0xd7, 0x14, 0x99, 0xae, 0xb5, 0x56, 0x45, 0xb1, 0xce, 0x07, 0xad, 0xf1, 0xf9, 0xce, + 0xf2, 0x1d, 0x90, 0x50, 0x64, 0x71, 0x3d, 0x97, 0xe7, 0x93, 0xc6, 0xc8, 0xcc, 0xe5, 0x20, 0x4a, + 0x62, 0x9d, 0x0d, 0xba, 0x0a, 0xe3, 0xcd, 0xc0, 0xf5, 0xd9, 0x9c, 0x50, 0x96, 0xdb, 0x49, 0x33, + 0xbb, 0x59, 0x25, 0x49, 0x80, 0xd3, 0x65, 0x58, 0xe0, 0x03, 0x01, 0x9c, 0x3c, 0xc3, 0x33, 0xb4, + 0xf0, 0xab, 0x34, 0x87, 0x61, 0x85, 0x45, 0x2b, 0x6c, 0x27, 0xe6, 0x5a, 0xa0, 0xc9, 0xa9, 0xfc, + 0xb8, 0x54, 0xba, 0xb6, 0x88, 0x0b, 0xaf, 0xea, 0x2f, 0x8e, 0x39, 0xa0, 0xba, 0x96, 0x18, 0x95, + 0x5e, 0x01, 0xc2, 0xc9, 0xb3, 0x6d, 0x9c, 0x22, 0x13, 0xb7, 0xb2, 0x58, 0x20, 0x30, 0xc0, 0x21, + 0x4e, 0xf0, 0x44, 0x1f, 0x85, 0x31, 0x11, 0x4d, 0x33, 0xee, 0xa6, 0x73, 0xf1, 0xcb, 0x07, 0x9c, + 0xc0, 0xe1, 0x14, 0x35, 0xcf, 0x90, 0xe2, 0xac, 0x37, 0x88, 0xd8, 0xfa, 0x96, 0x5d, 0x6f, 0x3b, + 0x9c, 0x3c, 0xcf, 0xf6, 0x07, 0x91, 0x21, 0x25, 0x89, 0xc5, 0x19, 0x25, 0xd0, 0x1a, 0x8c, 0x35, + 0x03, 0x42, 0x76, 0x98, 0xa0, 0x2f, 0xce, 0xb3, 0x32, 0x8f, 0xfb, 0x41, 0x5b, 0x52, 0x49, 0xe0, + 0x0e, 0x32, 0x60, 0x38, 0xc5, 0x01, 0xdd, 0x81, 0x01, 0x7f, 0x97, 0x04, 0x5b, 0xc4, 0xa9, 0x4f, + 0x5e, 0x68, 0xf3, 0x12, 0x47, 0x1c, 0x6e, 0x37, 0x04, 0x6d, 0xc2, 0xdb, 0x43, 0x82, 0x3b, 0x7b, + 0x7b, 0xc8, 0xca, 0xd0, 0xff, 0x61, 0xc1, 0x19, 0x69, 0x9c, 0xa9, 0x36, 0x69, 0xaf, 0xcf, 0xf9, + 0x5e, 0x18, 0x05, 0x3c, 0x52, 0xc5, 0xa3, 0xf9, 0xd1, 0x1b, 0xd6, 0x72, 0x0a, 0x29, 0x45, 0xf4, + 0x99, 0x3c, 0x8a, 0x10, 0xe7, 0xd7, 0x48, 0xaf, 0xa6, 0x21, 0x89, 0xe4, 0x66, 0x34, 0x13, 0x2e, + 0xbe, 0x31, 0xbf, 0x3a, 0xf9, 0x18, 0x0f, 0xb3, 0x41, 0x17, 0x43, 0x35, 0x89, 0xc4, 0x69, 0x7a, + 0x74, 0x05, 0x0a, 0x7e, 0x38, 0xf9, 0x78, 0x9b, 0x5c, 0xba, 0x7e, 0xfd, 0x46, 0x95, 0x7b, 0xfd, + 0xdd, 0xa8, 0xe2, 0x82, 0x1f, 0xca, 0x2c, 0x25, 0xf4, 0x3e, 0x16, 0x4e, 0x3e, 0xc1, 0xd5, 0x96, + 0x32, 0x4b, 0x09, 0x03, 0xe2, 0x18, 0x8f, 0xb6, 0x60, 0x34, 0x34, 0xee, 0xbd, 0xe1, 0xe4, 0x45, + 0xd6, 0x53, 0x4f, 0xe4, 0x0d, 0x9a, 0x41, 0xad, 0xa5, 0x0f, 0x30, 0xb9, 0xe0, 0x24, 0x5b, 0xbe, + 0xba, 0xb4, 0x9b, 0x77, 0x38, 0xf9, 0x64, 0x87, 0xd5, 0xa5, 0x11, 0xeb, 0xab, 0x4b, 0xe7, 0x81, + 0x13, 0x3c, 0xa7, 0xbe, 0x03, 0xc6, 0x53, 0xe2, 0xd2, 0x61, 0x3c, 0xdc, 0xa7, 0xb6, 0x61, 0xd8, + 0x98, 0x92, 0x0f, 0xd5, 0xbb, 0xe2, 0xb7, 0x4b, 0x50, 0x52, 0x56, 0x6f, 0x74, 0xd9, 0x74, 0xa8, + 0x38, 0x93, 0x74, 0xa8, 0x18, 0xa8, 0xf8, 0x75, 0xc3, 0x87, 0x62, 0x2d, 0x23, 0x18, 0x63, 0xde, + 0x06, 0xd8, 0xfd, 0x23, 0x15, 0xcd, 0x94, 0x50, 0xec, 0xda, 0x33, 0xa3, 0xa7, 0xad, 0x75, 0xe2, + 0x2a, 0x8c, 0x7b, 0x3e, 0x93, 0xd1, 0x49, 0x5d, 0x0a, 0x60, 0x4c, 0xce, 0x2a, 0xe9, 0xd1, 0x8d, + 0x12, 0x04, 0x38, 0x5d, 0x86, 0x56, 0xc8, 0x05, 0xa5, 0xa4, 0x39, 0x84, 0xcb, 0x51, 0x58, 0x60, + 0xe9, 0xdd, 0x90, 0xff, 0x0a, 0x27, 0xc7, 0xf2, 0xef, 0x86, 0xbc, 0x50, 0x52, 0x18, 0x0b, 0xa5, + 0x30, 0xc6, 0xb4, 0xff, 0x4d, 0xbf, 0xbe, 0x54, 0x11, 0x62, 0xbe, 0x16, 0x49, 0xb8, 0xbe, 0x54, + 0xc1, 0x1c, 0x87, 0x66, 0xa0, 0x8f, 0xfd, 0x08, 0x27, 0x87, 0xf2, 0xa3, 0xe1, 0xb0, 0x12, 0x5a, + 0x96, 0x34, 0x56, 0x00, 0x8b, 0x82, 0x4c, 0xbb, 0x4b, 0xef, 0x46, 0x4c, 0xbb, 0xdb, 0xff, 0x80, + 0xda, 0x5d, 0xc9, 0x00, 0xc7, 0xbc, 0xd0, 0x5d, 0x38, 0x69, 0xdc, 0x47, 0xd5, 0xab, 0x1d, 0xc8, + 0x37, 0xfc, 0x26, 0x88, 0x67, 0xcf, 0x89, 0x46, 0x9f, 0x5c, 0xca, 0xe2, 0x84, 0xb3, 0x2b, 0x40, + 0x0d, 0x18, 0xaf, 0xa5, 0x6a, 0x1d, 0xe8, 0xbe, 0x56, 0x35, 0x2f, 0xd2, 0x35, 0xa6, 0x19, 0xa3, + 0x57, 0x61, 0xe0, 0x6d, 0x3f, 0x64, 0x47, 0xa4, 0xb8, 0x9a, 0xc8, 0x70, 0x0e, 0x03, 0x6f, 0xdc, + 0xa8, 0x32, 0xf8, 0xc1, 0x7e, 0x79, 0xb0, 0xe2, 0xd7, 0xe5, 0x5f, 0xac, 0x0a, 0xa0, 0xef, 0xb7, + 0x60, 0x2a, 0x7d, 0xe1, 0x55, 0x8d, 0x1e, 0xee, 0xbe, 0xd1, 0xb6, 0xa8, 0x74, 0x6a, 0x21, 0x97, + 0x1d, 0x6e, 0x53, 0x15, 0xfa, 0x10, 0x5d, 0x4f, 0xa1, 0x7b, 0x8f, 0x88, 0x14, 0xb3, 0x8f, 0xc6, + 0xeb, 0x89, 0x42, 0x0f, 0xf6, 0xcb, 0xa3, 0x7c, 0x67, 0x74, 0xef, 0xc9, 0xe7, 0x4d, 0xa2, 0x00, + 0xfa, 0x4e, 0x38, 0x19, 0xa4, 0x35, 0xa8, 0x44, 0x0a, 0xe1, 0x4f, 0x77, 0xb3, 0xcb, 0x26, 0x07, + 0x1c, 0x67, 0x31, 0xc4, 0xd9, 0xf5, 0xd8, 0xbf, 0x62, 0x31, 0xfd, 0xb6, 0x68, 0x16, 0x09, 0x5b, + 0x8d, 0xe3, 0x48, 0x6c, 0xbd, 0x60, 0xd8, 0x8e, 0x1f, 0xd8, 0xb1, 0xe8, 0x1f, 0x59, 0xcc, 0xb1, + 0xe8, 0x18, 0x5f, 0x31, 0xbd, 0x01, 0x03, 0x91, 0x4c, 0x38, 0xde, 0x26, 0x17, 0xb7, 0xd6, 0x28, + 0xe6, 0x5c, 0xa5, 0x2e, 0x39, 0x2a, 0xb7, 0xb8, 0x62, 0x63, 0xff, 0x7d, 0x3e, 0x02, 0x12, 0x73, + 0x0c, 0x26, 0xba, 0x79, 0xd3, 0x44, 0x57, 0xee, 0xf0, 0x05, 0x39, 0xa6, 0xba, 0xbf, 0x67, 0xb6, + 0x9b, 0x29, 0xf7, 0xde, 0xed, 0x1e, 0x6d, 0xf6, 0x17, 0x2c, 0x80, 0x38, 0xc8, 0x7c, 0x17, 0x29, + 0x25, 0x5f, 0xa6, 0xd7, 0x1a, 0x3f, 0xf2, 0x6b, 0x7e, 0x43, 0x18, 0x28, 0xce, 0xc6, 0x56, 0x42, + 0x0e, 0x3f, 0xd0, 0x7e, 0x63, 0x45, 0x8d, 0xca, 0x32, 0xa4, 0x65, 0x31, 0xb6, 0x5b, 0x1b, 0xe1, + 0x2c, 0xbf, 0x64, 0xc1, 0x89, 0x2c, 0x97, 0x78, 0x7a, 0x49, 0xe6, 0x6a, 0x4e, 0xe5, 0x6d, 0xa8, + 0x46, 0xf3, 0x96, 0x80, 0x63, 0x45, 0xd1, 0x75, 0xae, 0xce, 0xc3, 0x45, 0x77, 0xbf, 0x01, 0xc3, + 0x95, 0x80, 0x68, 0xf2, 0xc5, 0x6b, 0x3c, 0x4c, 0x0a, 0x6f, 0xcf, 0xb3, 0x87, 0x0e, 0x91, 0x62, + 0x7f, 0xb9, 0x00, 0x27, 0xb8, 0xd3, 0xce, 0xcc, 0xae, 0xef, 0xd6, 0x2b, 0x7e, 0x5d, 0x3c, 0x64, + 0x7c, 0x13, 0x86, 0x9a, 0x9a, 0x6e, 0xba, 0x5d, 0xa4, 0x62, 0x5d, 0x87, 0x1d, 0x6b, 0xd3, 0x74, + 0x28, 0x36, 0x78, 0xa1, 0x3a, 0x0c, 0x91, 0x5d, 0xb7, 0xa6, 0x3c, 0x3f, 0x0a, 0x87, 0x3e, 0xa4, + 0x55, 0x2d, 0x0b, 0x1a, 0x1f, 0x6c, 0x70, 0x7d, 0x08, 0x19, 0xf4, 0xed, 0x1f, 0xb5, 0xe0, 0x74, + 0x4e, 0x5c, 0x63, 0x5a, 0xdd, 0x1d, 0xe6, 0x1e, 0x25, 0xa6, 0xad, 0xaa, 0x8e, 0x3b, 0x4d, 0x61, + 0x81, 0x45, 0x1f, 0x03, 0xe0, 0x4e, 0x4f, 0xc4, 0xab, 0x75, 0x0c, 0x00, 0x6b, 0xc4, 0xae, 0xd4, + 0xc2, 0x10, 0xca, 0xf2, 0x58, 0xe3, 0x65, 0x7f, 0xa9, 0x07, 0x7a, 0x99, 0x93, 0x0d, 0xaa, 0x40, + 0xff, 0x16, 0xcf, 0x54, 0xd5, 0x76, 0xdc, 0x28, 0xad, 0x4c, 0x7e, 0x15, 0x8f, 0x9b, 0x06, 0xc5, + 0x92, 0x0d, 0x5a, 0x81, 0x09, 0x9e, 0x30, 0xac, 0x31, 0x4f, 0x1a, 0xce, 0x9e, 0x54, 0xfb, 0xf2, + 0x1c, 0xd8, 0x4a, 0xfd, 0xbd, 0x94, 0x26, 0xc1, 0x59, 0xe5, 0xd0, 0x6b, 0x30, 0x42, 0xaf, 0xe1, + 0x7e, 0x2b, 0x92, 0x9c, 0x78, 0xaa, 0x30, 0x75, 0x33, 0x59, 0x33, 0xb0, 0x38, 0x41, 0x8d, 0x5e, + 0x85, 0xe1, 0x66, 0x4a, 0xc1, 0xdd, 0x1b, 0x6b, 0x82, 0x4c, 0xa5, 0xb6, 0x49, 0xcb, 0xbc, 0xe2, + 0x5b, 0xec, 0x0d, 0xc0, 0xda, 0x56, 0x40, 0xc2, 0x2d, 0xbf, 0x51, 0x67, 0x12, 0x70, 0xaf, 0xe6, + 0x15, 0x9f, 0xc0, 0xe3, 0x54, 0x09, 0xca, 0x65, 0xc3, 0x71, 0x1b, 0xad, 0x80, 0xc4, 0x5c, 0xfa, + 0x4c, 0x2e, 0x8b, 0x09, 0x3c, 0x4e, 0x95, 0xe8, 0xac, 0xb9, 0xef, 0x3f, 0x1a, 0xcd, 0xbd, 0xfd, + 0xd3, 0x05, 0x30, 0x86, 0xf6, 0xdb, 0x37, 0x85, 0x19, 0xfd, 0xb2, 0xcd, 0xa0, 0x59, 0x13, 0x0e, + 0x65, 0x99, 0x5f, 0x16, 0xe7, 0x2f, 0xe6, 0x5f, 0x46, 0xff, 0x63, 0x56, 0x8a, 0xae, 0xf1, 0x93, + 0x95, 0xc0, 0xa7, 0x87, 0x9c, 0x0c, 0xa4, 0xa7, 0x1e, 0x9f, 0xf4, 0xcb, 0x20, 0x03, 0x6d, 0x42, + 0xce, 0x0a, 0xf7, 0x7c, 0xce, 0xc1, 0xf0, 0xbd, 0xaa, 0x8a, 0x68, 0x1f, 0x92, 0x0b, 0xba, 0x02, + 0x83, 0x22, 0x2f, 0x15, 0x7b, 0x23, 0xc1, 0x17, 0x13, 0xf3, 0x15, 0x9b, 0x8f, 0xc1, 0x58, 0xa7, + 0xb1, 0x7f, 0xa0, 0x00, 0x13, 0x19, 0x8f, 0xdc, 0xf8, 0x31, 0xb2, 0xe9, 0x86, 0x91, 0x4a, 0x91, + 0xac, 0x1d, 0x23, 0x1c, 0x8e, 0x15, 0x05, 0xdd, 0xab, 0xf8, 0x41, 0x95, 0x3c, 0x9c, 0xc4, 0x23, + 0x12, 0x81, 0x3d, 0x64, 0xb2, 0xe1, 0x0b, 0xd0, 0xd3, 0x0a, 0x89, 0x0c, 0x16, 0xad, 0x8e, 0x6d, + 0x66, 0xd6, 0x66, 0x18, 0x7a, 0x05, 0xdc, 0x54, 0x16, 0x62, 0xed, 0x0a, 0xc8, 0x6d, 0xc4, 0x1c, + 0x47, 0x1b, 0x17, 0x11, 0xcf, 0xf1, 0x22, 0x71, 0x51, 0x8c, 0xa3, 0x9e, 0x32, 0x28, 0x16, 0x58, + 0xfb, 0x8b, 0x45, 0x38, 0x93, 0xfb, 0xec, 0x95, 0x36, 0x7d, 0xc7, 0xf7, 0xdc, 0xc8, 0x57, 0x4e, + 0x78, 0x3c, 0xd2, 0x29, 0x69, 0x6e, 0xad, 0x08, 0x38, 0x56, 0x14, 0xe8, 0x22, 0xf4, 0x32, 0xa5, + 0x78, 0x2a, 0x59, 0xf4, 0xec, 0x3c, 0x0f, 0x7d, 0xc7, 0xd1, 0x5d, 0xe7, 0xf7, 0x7f, 0x8c, 0x4a, + 0x30, 0x7e, 0x23, 0x79, 0xa0, 0xd0, 0xe6, 0xfa, 0x7e, 0x03, 0x33, 0x24, 0x7a, 0x42, 0xf4, 0x57, + 0xc2, 0xeb, 0x0c, 0x3b, 0x75, 0x3f, 0xd4, 0x3a, 0xed, 0x29, 0xe8, 0xdf, 0x26, 0x7b, 0x81, 0xeb, + 0x6d, 0x26, 0xbd, 0x11, 0xaf, 0x73, 0x30, 0x96, 0x78, 0x33, 0x6f, 0x69, 0xff, 0x51, 0x27, 0xe6, + 0x1f, 0xe8, 0x28, 0x9e, 0xfc, 0x50, 0x11, 0x46, 0xf1, 0xec, 0xfc, 0x7b, 0x03, 0x71, 0x33, 0x3d, + 0x10, 0x47, 0x9d, 0x98, 0xbf, 0xf3, 0x68, 0xfc, 0xa2, 0x05, 0xa3, 0x2c, 0x3b, 0x96, 0x88, 0x59, + 0xe1, 0xfa, 0xde, 0x31, 0x5c, 0x05, 0x1e, 0x83, 0xde, 0x80, 0x56, 0x9a, 0xcc, 0x12, 0xcd, 0x5a, + 0x82, 0x39, 0x0e, 0x9d, 0x85, 0x1e, 0xd6, 0x04, 0x3a, 0x78, 0x43, 0x7c, 0x0b, 0x9e, 0x77, 0x22, + 0x07, 0x33, 0x28, 0x0b, 0xfc, 0x86, 0x49, 0xb3, 0xe1, 0xf2, 0x46, 0xc7, 0x2e, 0x0b, 0xef, 0x8e, + 0x80, 0x18, 0x99, 0x4d, 0x7b, 0x67, 0x81, 0xdf, 0xb2, 0x59, 0xb6, 0xbf, 0x66, 0xff, 0x79, 0x01, + 0xce, 0x67, 0x96, 0xeb, 0x3a, 0xf0, 0x5b, 0xfb, 0xd2, 0x0f, 0x33, 0xff, 0x51, 0xf1, 0x18, 0x7d, + 0xbd, 0x7b, 0xba, 0x95, 0xfe, 0x7b, 0xbb, 0x88, 0xc7, 0x96, 0xd9, 0x65, 0xef, 0x92, 0x78, 0x6c, + 0x99, 0x6d, 0xcb, 0x51, 0x13, 0xfc, 0x75, 0x21, 0xe7, 0x5b, 0x98, 0xc2, 0xe0, 0x12, 0xdd, 0x67, + 0x18, 0x32, 0x94, 0x97, 0x70, 0xbe, 0xc7, 0x70, 0x18, 0x56, 0x58, 0x34, 0x03, 0xa3, 0x3b, 0xae, + 0x47, 0x37, 0x9f, 0x3d, 0x53, 0x14, 0x57, 0xb6, 0x8c, 0x15, 0x13, 0x8d, 0x93, 0xf4, 0xc8, 0xd5, + 0x62, 0xb5, 0xf1, 0xaf, 0x7b, 0xf5, 0x50, 0xab, 0x6e, 0xda, 0x74, 0xe7, 0x50, 0xbd, 0x98, 0x11, + 0xb7, 0x6d, 0x45, 0xd3, 0x13, 0x15, 0xbb, 0xd7, 0x13, 0x0d, 0x65, 0xeb, 0x88, 0xa6, 0x5e, 0x85, + 0xe1, 0x07, 0xb6, 0x8d, 0xd8, 0x5f, 0x2f, 0xc2, 0x23, 0x6d, 0x96, 0x3d, 0xdf, 0xeb, 0x8d, 0x31, + 0xd0, 0xf6, 0xfa, 0xd4, 0x38, 0x54, 0xe0, 0xc4, 0x46, 0xab, 0xd1, 0xd8, 0x63, 0x4f, 0xa0, 0x48, + 0x5d, 0x52, 0x08, 0x99, 0x52, 0x2a, 0x47, 0x4e, 0x2c, 0x66, 0xd0, 0xe0, 0xcc, 0x92, 0xf4, 0x8a, + 0x45, 0x4f, 0x92, 0x3d, 0xc5, 0x2a, 0x71, 0xc5, 0xc2, 0x3a, 0x12, 0x9b, 0xb4, 0xe8, 0x2a, 0x8c, + 0x3b, 0xbb, 0x8e, 0xcb, 0x03, 0xde, 0x4b, 0x06, 0xfc, 0x8e, 0xa5, 0x74, 0xd1, 0x33, 0x49, 0x02, + 0x9c, 0x2e, 0x83, 0x5e, 0x07, 0xe4, 0xaf, 0xb3, 0x87, 0x12, 0xf5, 0xab, 0xc4, 0x13, 0x56, 0x77, + 0x36, 0x76, 0xc5, 0x78, 0x4b, 0xb8, 0x91, 0xa2, 0xc0, 0x19, 0xa5, 0x12, 0x81, 0xc9, 0xfa, 0xf2, + 0x03, 0x93, 0xb5, 0xdf, 0x17, 0x3b, 0xa6, 0xde, 0xba, 0x02, 0xc3, 0x87, 0x74, 0xff, 0xb5, 0xff, + 0x8d, 0x05, 0x4a, 0x41, 0x6c, 0x46, 0xfd, 0x7d, 0x95, 0xf9, 0x27, 0x73, 0xd5, 0xb6, 0x16, 0x2d, + 0xe9, 0xa4, 0xe6, 0x9f, 0x1c, 0x23, 0xb1, 0x49, 0xcb, 0xe7, 0x90, 0xe6, 0x57, 0x6c, 0xdc, 0x0a, + 0x44, 0x68, 0x42, 0x45, 0x81, 0x3e, 0x0e, 0xfd, 0x75, 0x77, 0xd7, 0x0d, 0x85, 0x72, 0xec, 0xd0, + 0xc6, 0xb8, 0x78, 0xeb, 0x9c, 0xe7, 0x6c, 0xb0, 0xe4, 0x67, 0xff, 0x50, 0x21, 0xee, 0x93, 0x37, + 0x5a, 0x7e, 0xe4, 0x1c, 0xc3, 0x49, 0x7e, 0xd5, 0x38, 0xc9, 0x9f, 0x68, 0x17, 0x9f, 0x91, 0x35, + 0x29, 0xf7, 0x04, 0xbf, 0x91, 0x38, 0xc1, 0x9f, 0xec, 0xcc, 0xaa, 0xfd, 0xc9, 0xfd, 0x0f, 0x2c, + 0x18, 0x37, 0xe8, 0x8f, 0xe1, 0x00, 0x59, 0x34, 0x0f, 0x90, 0x47, 0x3b, 0x7e, 0x43, 0xce, 0xc1, + 0xf1, 0xbd, 0xc5, 0x44, 0xdb, 0xd9, 0x81, 0xf1, 0x36, 0xf4, 0x6c, 0x39, 0x41, 0xbd, 0x5d, 0x3e, + 0x9a, 0x54, 0xa1, 0xe9, 0x6b, 0x4e, 0x20, 0x3c, 0x15, 0x9e, 0x95, 0xbd, 0x4e, 0x41, 0x1d, 0xbd, + 0x14, 0x58, 0x55, 0xe8, 0x65, 0xe8, 0x0b, 0x6b, 0x7e, 0x53, 0xbd, 0x99, 0xba, 0xc0, 0x3a, 0x9a, + 0x41, 0x0e, 0xf6, 0xcb, 0xc8, 0xac, 0x8e, 0x82, 0xb1, 0xa0, 0x47, 0x6f, 0xc2, 0x30, 0xfb, 0xa5, + 0xdc, 0x06, 0x8b, 0xf9, 0x1a, 0x8c, 0xaa, 0x4e, 0xc8, 0x7d, 0x6a, 0x0d, 0x10, 0x36, 0x59, 0x4d, + 0x6d, 0x42, 0x49, 0x7d, 0xd6, 0x43, 0xb5, 0x76, 0xff, 0xab, 0x22, 0x4c, 0x64, 0xcc, 0x39, 0x14, + 0x1a, 0x23, 0x71, 0xa5, 0xcb, 0xa9, 0xfa, 0x0e, 0xc7, 0x22, 0x64, 0x17, 0xa8, 0xba, 0x98, 0x5b, + 0x5d, 0x57, 0x7a, 0x33, 0x24, 0xc9, 0x4a, 0x29, 0xa8, 0x73, 0xa5, 0xb4, 0xb2, 0x63, 0xeb, 0x6a, + 0x5a, 0x91, 0x6a, 0xe9, 0x43, 0x1d, 0xd3, 0x5f, 0xef, 0x81, 0x13, 0x59, 0x21, 0x63, 0xd1, 0x67, + 0x13, 0xd9, 0x90, 0x5f, 0xec, 0x36, 0xd8, 0x2c, 0x4f, 0x91, 0x2c, 0xc2, 0x40, 0x4e, 0x9b, 0xf9, + 0x91, 0x3b, 0x76, 0xb3, 0xa8, 0x93, 0x05, 0xa0, 0x09, 0x78, 0x16, 0x6b, 0xb9, 0x7d, 0x7c, 0xa0, + 0xeb, 0x06, 0x88, 0xf4, 0xd7, 0x61, 0xc2, 0x25, 0x49, 0x82, 0x3b, 0xbb, 0x24, 0xc9, 0x9a, 0xd1, + 0x12, 0xf4, 0xd5, 0xb8, 0xaf, 0x4b, 0xb1, 0xf3, 0x16, 0xc6, 0x1d, 0x5d, 0xd4, 0x06, 0x2c, 0x1c, + 0x5c, 0x04, 0x83, 0x29, 0x17, 0x06, 0xb5, 0x8e, 0x79, 0xa8, 0x93, 0x67, 0x9b, 0x1e, 0x7c, 0x5a, + 0x17, 0x3c, 0xd4, 0x09, 0xf4, 0xa3, 0x16, 0x24, 0x1e, 0xbc, 0x28, 0xa5, 0x9c, 0x95, 0xab, 0x94, + 0xbb, 0x00, 0x3d, 0x81, 0xdf, 0x20, 0xc9, 0x0c, 0xc4, 0xd8, 0x6f, 0x10, 0xcc, 0x30, 0x94, 0x22, + 0x8a, 0x55, 0x2d, 0x43, 0xfa, 0x35, 0x52, 0x5c, 0x10, 0x1f, 0x83, 0xde, 0x06, 0xd9, 0x25, 0x8d, + 0x64, 0xa2, 0xb8, 0x65, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x62, 0x0f, 0x9c, 0x6b, 0x1b, 0x0d, 0x8a, + 0x5e, 0xc6, 0x36, 0x9d, 0x88, 0xdc, 0x71, 0xf6, 0x92, 0x19, 0x9d, 0xae, 0x72, 0x30, 0x96, 0x78, + 0xf6, 0xfc, 0x93, 0x27, 0x66, 0x48, 0xa8, 0x30, 0x45, 0x3e, 0x06, 0x81, 0x35, 0x55, 0x62, 0xc5, + 0xa3, 0x50, 0x89, 0x3d, 0x0f, 0x10, 0x86, 0x0d, 0xee, 0x16, 0x58, 0x17, 0xef, 0x4a, 0xe3, 0x04, + 0x1e, 0xd5, 0x65, 0x81, 0xc1, 0x1a, 0x15, 0x9a, 0x87, 0xb1, 0x66, 0xe0, 0x47, 0x5c, 0x23, 0x3c, + 0xcf, 0x3d, 0x67, 0x7b, 0xcd, 0x40, 0x3c, 0x95, 0x04, 0x1e, 0xa7, 0x4a, 0xa0, 0x97, 0x60, 0x50, + 0x04, 0xe7, 0xa9, 0xf8, 0x7e, 0x43, 0x28, 0xa1, 0x94, 0x33, 0x69, 0x35, 0x46, 0x61, 0x9d, 0x4e, + 0x2b, 0xc6, 0xd4, 0xcc, 0xfd, 0x99, 0xc5, 0xb8, 0xaa, 0x59, 0xa3, 0x4b, 0x44, 0xa2, 0x1e, 0xe8, + 0x2a, 0x12, 0x75, 0xac, 0x96, 0x2b, 0x75, 0x6d, 0xf5, 0x84, 0x8e, 0x8a, 0xac, 0xaf, 0xf4, 0xc0, + 0x84, 0x98, 0x38, 0x0f, 0x7b, 0xba, 0xdc, 0x4c, 0x4f, 0x97, 0xa3, 0x50, 0xdc, 0xbd, 0x37, 0x67, + 0x8e, 0x7b, 0xce, 0xfc, 0xb0, 0x05, 0xa6, 0xa4, 0x86, 0xfe, 0xb7, 0xdc, 0x94, 0x78, 0x2f, 0xe5, + 0x4a, 0x7e, 0x71, 0x94, 0xdf, 0x77, 0x96, 0x1c, 0xcf, 0xfe, 0xd7, 0x16, 0x3c, 0xda, 0x91, 0x23, + 0x5a, 0x80, 0x12, 0x13, 0x27, 0xb5, 0x8b, 0xde, 0x93, 0xca, 0xb3, 0x5e, 0x22, 0x72, 0xa4, 0xdb, + 0xb8, 0x24, 0x5a, 0x48, 0xe5, 0x1e, 0x7c, 0x2a, 0x23, 0xf7, 0xe0, 0x49, 0xa3, 0x7b, 0x1e, 0x30, + 0xf9, 0xe0, 0x0f, 0xd2, 0x13, 0xc7, 0x78, 0xd5, 0x86, 0x3e, 0x60, 0x28, 0x1d, 0xed, 0x84, 0xd2, + 0x11, 0x99, 0xd4, 0xda, 0x19, 0xf2, 0x51, 0x18, 0x63, 0x51, 0xfb, 0xd8, 0x3b, 0x0f, 0xf1, 0xde, + 0xae, 0x10, 0xfb, 0x72, 0x2f, 0x27, 0x70, 0x38, 0x45, 0x6d, 0xff, 0x69, 0x11, 0xfa, 0xf8, 0xf2, + 0x3b, 0x86, 0xeb, 0xe5, 0x33, 0x50, 0x72, 0x77, 0x76, 0x5a, 0x3c, 0x9d, 0x5c, 0x6f, 0xec, 0x19, + 0xbc, 0x24, 0x81, 0x38, 0xc6, 0xa3, 0x45, 0xa1, 0xef, 0x6e, 0x13, 0x18, 0x98, 0x37, 0x7c, 0x7a, + 0xde, 0x89, 0x1c, 0x2e, 0x2b, 0xa9, 0x73, 0x36, 0xd6, 0x8c, 0xa3, 0x4f, 0x01, 0x84, 0x51, 0xe0, + 0x7a, 0x9b, 0x14, 0x26, 0x62, 0xab, 0x3f, 0xdd, 0x86, 0x5b, 0x55, 0x11, 0x73, 0x9e, 0xf1, 0x9e, + 0xa3, 0x10, 0x58, 0xe3, 0x88, 0xa6, 0x8d, 0x93, 0x7e, 0x2a, 0x31, 0x76, 0xc0, 0xb9, 0xc6, 0x63, + 0x36, 0xf5, 0x41, 0x28, 0x29, 0xe6, 0x9d, 0xb4, 0x5f, 0x43, 0xba, 0x58, 0xf4, 0x11, 0x18, 0x4d, + 0xb4, 0xed, 0x50, 0xca, 0xb3, 0x5f, 0xb2, 0x60, 0x94, 0x37, 0x66, 0xc1, 0xdb, 0x15, 0xa7, 0xc1, + 0x3d, 0x38, 0xd1, 0xc8, 0xd8, 0x95, 0xc5, 0xf0, 0x77, 0xbf, 0x8b, 0x2b, 0x65, 0x59, 0x16, 0x16, + 0x67, 0xd6, 0x81, 0x2e, 0xd1, 0x15, 0x47, 0x77, 0x5d, 0xa7, 0x21, 0xe2, 0x1b, 0x0c, 0xf1, 0xd5, + 0xc6, 0x61, 0x58, 0x61, 0xed, 0x3f, 0xb0, 0x60, 0x9c, 0xb7, 0xfc, 0x3a, 0xd9, 0x53, 0x7b, 0xd3, + 0x37, 0xb3, 0xed, 0x22, 0x91, 0x69, 0x21, 0x27, 0x91, 0xa9, 0xfe, 0x69, 0xc5, 0xb6, 0x9f, 0xf6, + 0x65, 0x0b, 0xc4, 0x0c, 0x39, 0x06, 0x7d, 0xc6, 0x77, 0x98, 0xfa, 0x8c, 0xa9, 0xfc, 0x45, 0x90, + 0xa3, 0xc8, 0xf8, 0x2b, 0x0b, 0xc6, 0x38, 0x41, 0x6c, 0xab, 0xff, 0xa6, 0x8e, 0xc3, 0xac, 0xf9, + 0x45, 0x99, 0xce, 0x97, 0xd7, 0xc9, 0xde, 0x9a, 0x5f, 0x71, 0xa2, 0xad, 0xec, 0x8f, 0x32, 0x06, + 0xab, 0xa7, 0xed, 0x60, 0xd5, 0xe5, 0x02, 0x32, 0xf2, 0x7c, 0x75, 0x08, 0x10, 0x70, 0xd8, 0x3c, + 0x5f, 0xf6, 0x9f, 0x59, 0x80, 0x78, 0x35, 0x86, 0xe0, 0x46, 0xc5, 0x21, 0x06, 0xd5, 0x0e, 0xba, + 0x78, 0x6b, 0x52, 0x18, 0xac, 0x51, 0x1d, 0x49, 0xf7, 0x24, 0x1c, 0x2e, 0x8a, 0x9d, 0x1d, 0x2e, + 0x0e, 0xd1, 0xa3, 0xff, 0xac, 0x0f, 0x92, 0x2f, 0xfb, 0xd0, 0x2d, 0x18, 0xaa, 0x39, 0x4d, 0x67, + 0xdd, 0x6d, 0xb8, 0x91, 0x4b, 0xc2, 0x76, 0xde, 0x58, 0x73, 0x1a, 0x9d, 0x30, 0x91, 0x6b, 0x10, + 0x6c, 0xf0, 0x41, 0xd3, 0x00, 0xcd, 0xc0, 0xdd, 0x75, 0x1b, 0x64, 0x93, 0xa9, 0x5d, 0x58, 0x44, + 0x15, 0xee, 0x1a, 0x26, 0xa1, 0x58, 0xa3, 0xc8, 0x08, 0xa3, 0x50, 0x7c, 0xc8, 0x61, 0x14, 0xe0, + 0xd8, 0xc2, 0x28, 0xf4, 0x1c, 0x2a, 0x8c, 0xc2, 0xc0, 0xa1, 0xc3, 0x28, 0xf4, 0x76, 0x15, 0x46, + 0x01, 0xc3, 0x29, 0x29, 0x7b, 0xd2, 0xff, 0x8b, 0x6e, 0x83, 0x88, 0x0b, 0x07, 0x0f, 0x03, 0x33, + 0x75, 0x7f, 0xbf, 0x7c, 0x0a, 0x67, 0x52, 0xe0, 0x9c, 0x92, 0xe8, 0x63, 0x30, 0xe9, 0x34, 0x1a, + 0xfe, 0x1d, 0x35, 0xa8, 0x0b, 0x61, 0xcd, 0x69, 0x70, 0x13, 0x48, 0x3f, 0xe3, 0x7a, 0xf6, 0xfe, + 0x7e, 0x79, 0x72, 0x26, 0x87, 0x06, 0xe7, 0x96, 0x46, 0x1f, 0x86, 0x52, 0x33, 0xf0, 0x6b, 0x2b, + 0xda, 0xf3, 0xe3, 0xf3, 0xb4, 0x03, 0x2b, 0x12, 0x78, 0xb0, 0x5f, 0x1e, 0x56, 0x7f, 0xd8, 0x81, + 0x1f, 0x17, 0xc8, 0x88, 0x8b, 0x30, 0x78, 0xa4, 0x71, 0x11, 0xb6, 0x61, 0xa2, 0x4a, 0x02, 0xd7, + 0x69, 0xb8, 0xf7, 0xa8, 0xbc, 0x2c, 0xf7, 0xa7, 0x35, 0x28, 0x05, 0x89, 0x1d, 0xb9, 0xab, 0x60, + 0xbd, 0x5a, 0xc2, 0x25, 0xb9, 0x03, 0xc7, 0x8c, 0xec, 0xff, 0x66, 0x41, 0xbf, 0x78, 0xc9, 0x77, + 0x0c, 0x52, 0xe3, 0x8c, 0x61, 0x94, 0x28, 0x67, 0x77, 0x18, 0x6b, 0x4c, 0xae, 0x39, 0x62, 0x29, + 0x61, 0x8e, 0x78, 0xb4, 0x1d, 0x93, 0xf6, 0x86, 0x88, 0xff, 0xaf, 0x48, 0xa5, 0x77, 0xe3, 0x4d, + 0xf9, 0xc3, 0xef, 0x82, 0x55, 0xe8, 0x0f, 0xc5, 0x9b, 0xe6, 0x42, 0xfe, 0x6b, 0x90, 0xe4, 0x20, + 0xc6, 0x5e, 0x74, 0xe2, 0x15, 0xb3, 0x64, 0x92, 0xf9, 0x58, 0xba, 0xf8, 0x10, 0x1f, 0x4b, 0x77, + 0x7a, 0x75, 0xdf, 0x73, 0x14, 0xaf, 0xee, 0xed, 0xaf, 0xb1, 0x93, 0x53, 0x87, 0x1f, 0x83, 0x50, + 0x75, 0xd5, 0x3c, 0x63, 0xed, 0x36, 0x33, 0x4b, 0x34, 0x2a, 0x47, 0xb8, 0xfa, 0x05, 0x0b, 0xce, + 0x65, 0x7c, 0x95, 0x26, 0x69, 0x3d, 0x0b, 0x03, 0x4e, 0xab, 0xee, 0xaa, 0xb5, 0xac, 0x99, 0x26, + 0x67, 0x04, 0x1c, 0x2b, 0x0a, 0x34, 0x07, 0xe3, 0xe4, 0x6e, 0xd3, 0xe5, 0x86, 0x5c, 0xdd, 0xf9, + 0xb8, 0xc8, 0x9f, 0x7f, 0x2e, 0x24, 0x91, 0x38, 0x4d, 0xaf, 0x02, 0x44, 0x15, 0x73, 0x03, 0x44, + 0xfd, 0xbc, 0x05, 0x83, 0xea, 0x55, 0xef, 0x43, 0xef, 0xed, 0x8f, 0x9a, 0xbd, 0xfd, 0x48, 0x9b, + 0xde, 0xce, 0xe9, 0xe6, 0xdf, 0x2b, 0xa8, 0xf6, 0x56, 0xfc, 0x20, 0xea, 0x42, 0x82, 0x7b, 0xf0, + 0x87, 0x13, 0x57, 0x60, 0xd0, 0x69, 0x36, 0x25, 0x42, 0x7a, 0xc0, 0xb1, 0xd0, 0xeb, 0x31, 0x18, + 0xeb, 0x34, 0xea, 0x1d, 0x47, 0x31, 0xf7, 0x1d, 0x47, 0x1d, 0x20, 0x72, 0x82, 0x4d, 0x12, 0x51, + 0x98, 0x70, 0xd8, 0xcd, 0xdf, 0x6f, 0x5a, 0x91, 0xdb, 0x98, 0x76, 0xbd, 0x28, 0x8c, 0x82, 0xe9, + 0x25, 0x2f, 0xba, 0x11, 0xf0, 0x2b, 0xa4, 0x16, 0x62, 0x4d, 0xf1, 0xc2, 0x1a, 0x5f, 0x19, 0xc1, + 0x82, 0xd5, 0xd1, 0x6b, 0xba, 0x52, 0xac, 0x0a, 0x38, 0x56, 0x14, 0xf6, 0x07, 0xd9, 0xe9, 0xc3, + 0xfa, 0xf4, 0x70, 0xe1, 0xc5, 0x7e, 0x72, 0x48, 0x8d, 0x06, 0x33, 0x8a, 0xce, 0xeb, 0x41, 0xcc, + 0xda, 0x6f, 0xf6, 0xb4, 0x62, 0xfd, 0x45, 0x64, 0x1c, 0xe9, 0x0c, 0x7d, 0x22, 0xe5, 0x1e, 0xf3, + 0x5c, 0x87, 0x53, 0xe3, 0x10, 0x0e, 0x31, 0x2c, 0x0f, 0x13, 0xcb, 0x52, 0xb3, 0x54, 0x11, 0xeb, + 0x42, 0xcb, 0xc3, 0x24, 0x10, 0x38, 0xa6, 0xa1, 0xc2, 0x94, 0xfa, 0x13, 0x4e, 0xa2, 0x38, 0x16, + 0xb0, 0xa2, 0x0e, 0xb1, 0x46, 0x81, 0x2e, 0x0b, 0x85, 0x02, 0xb7, 0x0b, 0x3c, 0x92, 0x50, 0x28, + 0xc8, 0xee, 0xd2, 0xb4, 0x40, 0x57, 0x60, 0x90, 0xdc, 0x8d, 0x48, 0xe0, 0x39, 0x0d, 0x5a, 0x43, + 0x6f, 0x1c, 0x3f, 0x73, 0x21, 0x06, 0x63, 0x9d, 0x06, 0xad, 0xc1, 0x68, 0xc8, 0xf5, 0x6c, 0x2a, + 0x48, 0x3c, 0xd7, 0x57, 0x3e, 0xad, 0xde, 0x53, 0x9b, 0xe8, 0x03, 0x06, 0xe2, 0xbb, 0x93, 0x8c, + 0x32, 0x91, 0x64, 0x81, 0x5e, 0x83, 0x91, 0x86, 0xef, 0xd4, 0x67, 0x9d, 0x86, 0xe3, 0xd5, 0x58, + 0xff, 0x0c, 0x98, 0x89, 0xa8, 0x97, 0x0d, 0x2c, 0x4e, 0x50, 0x53, 0xe1, 0x4d, 0x87, 0x88, 0x30, + 0x6d, 0x8e, 0xb7, 0x49, 0x42, 0x91, 0x0f, 0x9e, 0x09, 0x6f, 0xcb, 0x39, 0x34, 0x38, 0xb7, 0x34, + 0x7a, 0x19, 0x86, 0xe4, 0xe7, 0x6b, 0x41, 0x59, 0xe2, 0x27, 0x31, 0x1a, 0x0e, 0x1b, 0x94, 0x28, + 0x84, 0x93, 0xf2, 0xff, 0x5a, 0xe0, 0x6c, 0x6c, 0xb8, 0x35, 0x11, 0xa9, 0x80, 0x3f, 0x1f, 0xfe, + 0x88, 0x7c, 0xab, 0xb8, 0x90, 0x45, 0x74, 0xb0, 0x5f, 0x3e, 0x2b, 0x7a, 0x2d, 0x13, 0x8f, 0xb3, + 0x79, 0xa3, 0x15, 0x98, 0xd8, 0x22, 0x4e, 0x23, 0xda, 0x9a, 0xdb, 0x22, 0xb5, 0x6d, 0xb9, 0xe0, + 0x58, 0x98, 0x17, 0xed, 0xe9, 0xc8, 0xb5, 0x34, 0x09, 0xce, 0x2a, 0x87, 0xde, 0x82, 0xc9, 0x66, + 0x6b, 0xbd, 0xe1, 0x86, 0x5b, 0xab, 0x7e, 0xc4, 0x9c, 0x90, 0x66, 0xea, 0xf5, 0x80, 0x84, 0xfc, + 0x75, 0x29, 0x3b, 0x7a, 0x65, 0x20, 0x9d, 0x4a, 0x0e, 0x1d, 0xce, 0xe5, 0x80, 0xee, 0xc1, 0xc9, + 0xc4, 0x44, 0x10, 0x11, 0x31, 0x46, 0xf2, 0x53, 0xc4, 0x54, 0xb3, 0x0a, 0x88, 0xe0, 0x32, 0x59, + 0x28, 0x9c, 0x5d, 0x05, 0x7a, 0x05, 0xc0, 0x6d, 0x2e, 0x3a, 0x3b, 0x6e, 0x83, 0x5e, 0x15, 0x27, + 0xd8, 0x1c, 0xa1, 0xd7, 0x06, 0x58, 0xaa, 0x48, 0x28, 0xdd, 0x9b, 0xc5, 0xbf, 0x3d, 0xac, 0x51, + 0xa3, 0x65, 0x18, 0x11, 0xff, 0xf6, 0xc4, 0x90, 0xf2, 0xc0, 0x2c, 0x8f, 0xb3, 0xa8, 0x5a, 0x15, + 0x1d, 0x73, 0x90, 0x82, 0xe0, 0x44, 0x59, 0xb4, 0x09, 0xe7, 0x64, 0xa2, 0x3f, 0x7d, 0x7e, 0xca, + 0x31, 0x08, 0x59, 0x5e, 0x96, 0x01, 0xfe, 0x2a, 0x65, 0xa6, 0x1d, 0x21, 0x6e, 0xcf, 0x87, 0x9e, + 0xeb, 0xfa, 0x34, 0xe7, 0x6f, 0x8e, 0x4f, 0xc6, 0x11, 0x07, 0x97, 0x93, 0x48, 0x9c, 0xa6, 0x47, + 0x3e, 0x9c, 0x74, 0xbd, 0xac, 0x59, 0x7d, 0x8a, 0x31, 0xfa, 0x10, 0x7f, 0x6e, 0xdd, 0x7e, 0x46, + 0x67, 0xe2, 0x71, 0x36, 0xdf, 0x77, 0xe6, 0xf7, 0xf7, 0xfb, 0x16, 0x2d, 0xad, 0x49, 0xe7, 0xe8, + 0xd3, 0x30, 0xa4, 0x7f, 0x94, 0x90, 0x34, 0x2e, 0x66, 0x0b, 0xaf, 0xda, 0x9e, 0xc0, 0x65, 0x7b, + 0xb5, 0xee, 0x75, 0x1c, 0x36, 0x38, 0xa2, 0x5a, 0x46, 0x6c, 0x83, 0xcb, 0xdd, 0x49, 0x32, 0xdd, + 0xbb, 0xbd, 0x11, 0xc8, 0x9e, 0xee, 0x68, 0x19, 0x06, 0x6a, 0x0d, 0x97, 0x78, 0xd1, 0x52, 0xa5, + 0x5d, 0xf4, 0xc6, 0x39, 0x41, 0x23, 0xd6, 0x8f, 0x48, 0xb1, 0xc2, 0x61, 0x58, 0x71, 0xb0, 0x7f, + 0xb3, 0x00, 0xe5, 0x0e, 0xf9, 0x7a, 0x12, 0x66, 0x28, 0xab, 0x2b, 0x33, 0xd4, 0x0c, 0x8c, 0xc6, + 0xff, 0x74, 0x0d, 0x97, 0xf2, 0x64, 0xbd, 0x65, 0xa2, 0x71, 0x92, 0xbe, 0xeb, 0x47, 0x09, 0xba, + 0x25, 0xab, 0xa7, 0xe3, 0xb3, 0x1a, 0xc3, 0x82, 0xdd, 0xdb, 0xfd, 0xb5, 0x37, 0xd7, 0x1a, 0x69, + 0x7f, 0xad, 0x00, 0x27, 0x55, 0x17, 0x7e, 0xfb, 0x76, 0xdc, 0xcd, 0x74, 0xc7, 0x1d, 0x81, 0x2d, + 0xd7, 0xbe, 0x01, 0x7d, 0x3c, 0x1c, 0x65, 0x17, 0xe2, 0xf6, 0x63, 0x66, 0x94, 0x6c, 0x25, 0xe1, + 0x19, 0x91, 0xb2, 0xbf, 0xdf, 0x82, 0xd1, 0xc4, 0xeb, 0x36, 0x84, 0xb5, 0x27, 0xd0, 0x0f, 0x22, + 0x12, 0x67, 0x09, 0xdb, 0x17, 0xa0, 0x67, 0xcb, 0x0f, 0xa3, 0xa4, 0xa3, 0xc7, 0x35, 0x3f, 0x8c, + 0x30, 0xc3, 0xd8, 0x7f, 0x68, 0x41, 0xef, 0x9a, 0xe3, 0x7a, 0x91, 0x34, 0x0a, 0x58, 0x39, 0x46, + 0x81, 0x6e, 0xbe, 0x0b, 0xbd, 0x04, 0x7d, 0x64, 0x63, 0x83, 0xd4, 0x22, 0x31, 0xaa, 0x32, 0x14, + 0x42, 0xdf, 0x02, 0x83, 0x52, 0xf9, 0x8f, 0x55, 0xc6, 0xff, 0x62, 0x41, 0x8c, 0x6e, 0x43, 0x29, + 0x72, 0x77, 0xc8, 0x4c, 0xbd, 0x2e, 0x4c, 0xe5, 0x0f, 0x10, 0xbf, 0x63, 0x4d, 0x32, 0xc0, 0x31, + 0x2f, 0xfb, 0x8b, 0x05, 0x80, 0x38, 0x8e, 0x57, 0xa7, 0x4f, 0x9c, 0x4d, 0x19, 0x51, 0x2f, 0x66, + 0x18, 0x51, 0x51, 0xcc, 0x30, 0xc3, 0x82, 0xaa, 0xba, 0xa9, 0xd8, 0x55, 0x37, 0xf5, 0x1c, 0xa6, + 0x9b, 0xe6, 0x60, 0x3c, 0x8e, 0x43, 0x66, 0x86, 0x61, 0x64, 0x47, 0xe7, 0x5a, 0x12, 0x89, 0xd3, + 0xf4, 0x36, 0x81, 0x0b, 0x2a, 0x1c, 0x93, 0x38, 0xd1, 0x98, 0x1f, 0xb8, 0x6e, 0x94, 0xee, 0xd0, + 0x4f, 0xb1, 0x95, 0xb8, 0x90, 0x6b, 0x25, 0xfe, 0x09, 0x0b, 0x4e, 0x24, 0xeb, 0x61, 0x8f, 0xa6, + 0xbf, 0x60, 0xc1, 0x49, 0x66, 0x2b, 0x67, 0xb5, 0xa6, 0x2d, 0xf3, 0x2f, 0xb6, 0x0d, 0x31, 0x95, + 0xd3, 0xe2, 0x38, 0xe6, 0xc6, 0x4a, 0x16, 0x6b, 0x9c, 0x5d, 0xa3, 0xfd, 0x5f, 0x7b, 0x60, 0x32, + 0x2f, 0x36, 0x15, 0x7b, 0x26, 0xe2, 0xdc, 0xad, 0x6e, 0x93, 0x3b, 0xc2, 0x19, 0x3f, 0x7e, 0x26, + 0xc2, 0xc1, 0x58, 0xe2, 0x93, 0xe9, 0x4f, 0x0a, 0x5d, 0xa6, 0x3f, 0xd9, 0x82, 0xf1, 0x3b, 0x5b, + 0xc4, 0xbb, 0xe9, 0x85, 0x4e, 0xe4, 0x86, 0x1b, 0x2e, 0xb3, 0x2b, 0xf3, 0x79, 0x23, 0x73, 0x50, + 0x8f, 0xdf, 0x4e, 0x12, 0x1c, 0xec, 0x97, 0xcf, 0x19, 0x80, 0xb8, 0xc9, 0x7c, 0x23, 0xc1, 0x69, + 0xa6, 0xe9, 0xec, 0x31, 0x3d, 0x0f, 0x39, 0x7b, 0xcc, 0x8e, 0x2b, 0xbc, 0x51, 0xe4, 0x1b, 0x00, + 0x76, 0x63, 0x5c, 0x51, 0x50, 0xac, 0x51, 0xa0, 0x4f, 0x02, 0xd2, 0x33, 0x74, 0x19, 0xa1, 0x41, + 0x9f, 0xbb, 0xbf, 0x5f, 0x46, 0xab, 0x29, 0xec, 0xc1, 0x7e, 0x79, 0x82, 0x42, 0x97, 0x3c, 0x7a, + 0xf3, 0x8c, 0xe3, 0xa9, 0x65, 0x30, 0x42, 0xb7, 0x61, 0x8c, 0x42, 0xd9, 0x8a, 0x92, 0x71, 0x47, + 0xf9, 0x6d, 0xf1, 0x99, 0xfb, 0xfb, 0xe5, 0xb1, 0xd5, 0x04, 0x2e, 0x8f, 0x75, 0x8a, 0x09, 0x7a, + 0x05, 0x46, 0xe2, 0x79, 0x75, 0x9d, 0xec, 0xf1, 0x00, 0x3d, 0x25, 0xae, 0xf0, 0x5e, 0x31, 0x30, + 0x38, 0x41, 0x69, 0x7f, 0xc1, 0x82, 0x33, 0xb9, 0x19, 0xf1, 0xd1, 0x25, 0x18, 0x70, 0x9a, 0x2e, + 0x37, 0x5f, 0x88, 0xa3, 0x86, 0xa9, 0xc9, 0x2a, 0x4b, 0xdc, 0x78, 0xa1, 0xb0, 0x74, 0x87, 0xdf, + 0x76, 0xbd, 0x7a, 0x72, 0x87, 0xbf, 0xee, 0x7a, 0x75, 0xcc, 0x30, 0xea, 0xc8, 0x2a, 0xe6, 0x3e, + 0x45, 0xf8, 0x0a, 0x5d, 0xab, 0x19, 0xb9, 0xf3, 0x8f, 0xb7, 0x19, 0xe8, 0x19, 0xdd, 0xd4, 0x28, + 0xbc, 0x0a, 0x73, 0xcd, 0x8c, 0xdf, 0x67, 0x81, 0x78, 0xba, 0xdc, 0xc5, 0x99, 0xfc, 0x26, 0x0c, + 0xed, 0xa6, 0xb3, 0x17, 0x5e, 0xc8, 0x7f, 0xcb, 0x2d, 0x22, 0xae, 0x2b, 0x41, 0xdb, 0xc8, 0x54, + 0x68, 0xf0, 0xb2, 0xeb, 0x20, 0xb0, 0xf3, 0x84, 0x19, 0x14, 0x3a, 0xb7, 0xe6, 0x79, 0x80, 0x3a, + 0xa3, 0x65, 0x29, 0x8d, 0x0b, 0xa6, 0xc4, 0x35, 0xaf, 0x30, 0x58, 0xa3, 0xb2, 0xff, 0x79, 0x01, + 0x06, 0x65, 0xb6, 0xbc, 0x96, 0xd7, 0x8d, 0xda, 0xef, 0x50, 0xe9, 0xb3, 0xd1, 0x65, 0x28, 0x31, + 0xbd, 0x74, 0x25, 0xd6, 0x96, 0x2a, 0xad, 0xd0, 0x8a, 0x44, 0xe0, 0x98, 0x86, 0xee, 0x8e, 0x61, + 0x6b, 0x9d, 0x91, 0x27, 0x1e, 0xda, 0x56, 0x39, 0x18, 0x4b, 0x3c, 0xfa, 0x18, 0x8c, 0xf1, 0x72, + 0x81, 0xdf, 0x74, 0x36, 0xb9, 0x2d, 0xab, 0x57, 0x45, 0x2f, 0x19, 0x5b, 0x49, 0xe0, 0x0e, 0xf6, + 0xcb, 0x27, 0x92, 0x30, 0x66, 0xa4, 0x4d, 0x71, 0x61, 0x2e, 0x6b, 0xbc, 0x12, 0xba, 0xab, 0xa7, + 0x3c, 0xdd, 0x62, 0x14, 0xd6, 0xe9, 0xec, 0x4f, 0x03, 0x4a, 0xe7, 0x0d, 0x44, 0xaf, 0x73, 0x97, + 0x67, 0x37, 0x20, 0xf5, 0x76, 0x46, 0x5b, 0x3d, 0x46, 0x87, 0x7c, 0x23, 0xc7, 0x4b, 0x61, 0x55, + 0xde, 0xfe, 0x3f, 0x8b, 0x30, 0x96, 0x8c, 0x0a, 0x80, 0xae, 0x41, 0x1f, 0x17, 0x29, 0x05, 0xfb, + 0x36, 0x3e, 0x41, 0x5a, 0x2c, 0x01, 0x76, 0xb8, 0x0a, 0xa9, 0x54, 0x94, 0x47, 0x6f, 0xc1, 0x60, + 0xdd, 0xbf, 0xe3, 0xdd, 0x71, 0x82, 0xfa, 0x4c, 0x65, 0x49, 0x4c, 0xe7, 0x4c, 0x45, 0xc5, 0x7c, + 0x4c, 0xa6, 0xc7, 0x27, 0x60, 0xf6, 0xef, 0x18, 0x85, 0x75, 0x76, 0x68, 0x8d, 0x25, 0xfa, 0xd8, + 0x70, 0x37, 0x57, 0x9c, 0x66, 0xbb, 0xf7, 0x2f, 0x73, 0x92, 0x48, 0xe3, 0x3c, 0x2c, 0xb2, 0x81, + 0x70, 0x04, 0x8e, 0x19, 0xa1, 0xcf, 0xc2, 0x44, 0x98, 0x63, 0x3a, 0xc9, 0x4b, 0x23, 0xdb, 0xce, + 0x9a, 0x30, 0x7b, 0xfa, 0xfe, 0x7e, 0x79, 0x22, 0xcb, 0xc8, 0x92, 0x55, 0x8d, 0xfd, 0xa5, 0x13, + 0x60, 0x2c, 0x62, 0x23, 0xab, 0xb8, 0x75, 0x44, 0x59, 0xc5, 0x31, 0x0c, 0x90, 0x9d, 0x66, 0xb4, + 0x37, 0xef, 0x06, 0x62, 0x4c, 0x32, 0x79, 0x2e, 0x08, 0x9a, 0x34, 0x4f, 0x89, 0xc1, 0x8a, 0x4f, + 0x76, 0xea, 0xf7, 0xe2, 0x37, 0x31, 0xf5, 0x7b, 0xcf, 0x31, 0xa6, 0x7e, 0x5f, 0x85, 0xfe, 0x4d, + 0x37, 0xc2, 0xa4, 0xe9, 0x8b, 0xcb, 0x5c, 0xe6, 0x3c, 0xbc, 0xca, 0x49, 0xd2, 0x49, 0x86, 0x05, + 0x02, 0x4b, 0x26, 0xe8, 0x75, 0xb5, 0x02, 0xfb, 0xf2, 0x15, 0x2e, 0x69, 0xe7, 0x95, 0xcc, 0x35, + 0x28, 0x12, 0xbc, 0xf7, 0x3f, 0x68, 0x82, 0xf7, 0x45, 0x99, 0x96, 0x7d, 0x20, 0xff, 0xb1, 0x1a, + 0xcb, 0xba, 0xde, 0x21, 0x19, 0xfb, 0x2d, 0x3d, 0x95, 0x7d, 0x29, 0x7f, 0x27, 0x50, 0x59, 0xea, + 0xbb, 0x4c, 0x60, 0xff, 0x7d, 0x16, 0x9c, 0x4c, 0xa6, 0x9a, 0x65, 0x6f, 0x2a, 0x84, 0x9f, 0xc7, + 0x4b, 0xdd, 0xe4, 0xfe, 0x65, 0x05, 0x8c, 0x0a, 0x99, 0x8e, 0x34, 0x93, 0x0c, 0x67, 0x57, 0x47, + 0x3b, 0x3a, 0x58, 0xaf, 0x0b, 0x7f, 0x83, 0xc7, 0x72, 0x32, 0xe1, 0xb7, 0xc9, 0x7f, 0xbf, 0x96, + 0x91, 0x75, 0xfd, 0xf1, 0xbc, 0xac, 0xeb, 0x5d, 0xe7, 0x5a, 0x7f, 0x5d, 0xe5, 0xc0, 0x1f, 0xce, + 0x9f, 0x4a, 0x3c, 0xc3, 0x7d, 0xc7, 0xcc, 0xf7, 0xaf, 0xab, 0xcc, 0xf7, 0x6d, 0x22, 0x8b, 0xf3, + 0xbc, 0xf6, 0x1d, 0xf3, 0xdd, 0x6b, 0x39, 0xeb, 0x47, 0x8f, 0x26, 0x67, 0xbd, 0x71, 0xd4, 0xf0, + 0xb4, 0xe9, 0xcf, 0x74, 0x38, 0x6a, 0x0c, 0xbe, 0xed, 0x0f, 0x1b, 0x9e, 0x9f, 0x7f, 0xfc, 0x81, + 0xf2, 0xf3, 0xdf, 0xd2, 0xf3, 0xdd, 0xa3, 0x0e, 0x09, 0xdd, 0x29, 0x51, 0x97, 0x59, 0xee, 0x6f, + 0xe9, 0x07, 0xe0, 0x44, 0x3e, 0x5f, 0x75, 0xce, 0xa5, 0xf9, 0x66, 0x1e, 0x81, 0xa9, 0xec, 0xf9, + 0x27, 0x8e, 0x27, 0x7b, 0xfe, 0xc9, 0x23, 0xcf, 0x9e, 0x7f, 0xea, 0x18, 0xb2, 0xe7, 0x9f, 0x3e, + 0xc6, 0xec, 0xf9, 0xb7, 0x98, 0x73, 0x14, 0x0f, 0x00, 0x25, 0x22, 0xa1, 0x3f, 0x95, 0x13, 0x3f, + 0x2d, 0x1d, 0x25, 0x8a, 0x7f, 0x9c, 0x42, 0xe1, 0x98, 0x55, 0x46, 0x56, 0xfe, 0xc9, 0x87, 0x90, + 0x95, 0x7f, 0x35, 0xce, 0xca, 0x7f, 0x26, 0x7f, 0xa8, 0x33, 0x9e, 0xd3, 0xe4, 0xe4, 0xe2, 0xbf, + 0xa5, 0xe7, 0xd0, 0x7f, 0xa4, 0x8d, 0x15, 0x2c, 0x4b, 0xa1, 0xdc, 0x26, 0x73, 0xfe, 0x6b, 0x3c, + 0x73, 0xfe, 0xd9, 0xfc, 0x9d, 0x3c, 0x79, 0xdc, 0x19, 0xf9, 0xf2, 0x69, 0xbb, 0x54, 0xf0, 0x57, + 0x16, 0xf3, 0x3d, 0xa7, 0x5d, 0x2a, 0x7a, 0x6c, 0xba, 0x5d, 0x0a, 0x85, 0x63, 0x56, 0xf6, 0x0f, + 0x14, 0xe0, 0x7c, 0xfb, 0xf5, 0x16, 0x6b, 0xc9, 0x2b, 0xb1, 0x43, 0x40, 0x42, 0x4b, 0xce, 0xef, + 0x6c, 0x31, 0x55, 0xd7, 0xf1, 0x20, 0xaf, 0xc2, 0xb8, 0x7a, 0x87, 0xd3, 0x70, 0x6b, 0x7b, 0xab, + 0xf1, 0x35, 0x59, 0x45, 0x4e, 0xa8, 0x26, 0x09, 0x70, 0xba, 0x0c, 0x9a, 0x81, 0x51, 0x03, 0xb8, + 0x34, 0x2f, 0xee, 0x66, 0x71, 0x94, 0x71, 0x13, 0x8d, 0x93, 0xf4, 0xf6, 0xcf, 0x59, 0x70, 0x3a, + 0x27, 0xe5, 0x6b, 0xd7, 0xe1, 0x0e, 0x37, 0x60, 0xb4, 0x69, 0x16, 0xed, 0x10, 0xa1, 0xd5, 0x48, + 0x2c, 0xab, 0xda, 0x9a, 0x40, 0xe0, 0x24, 0x53, 0xfb, 0x67, 0x0a, 0x70, 0xae, 0xad, 0x63, 0x29, + 0xc2, 0x70, 0x6a, 0x73, 0x27, 0x74, 0xe6, 0x02, 0x52, 0x27, 0x5e, 0xe4, 0x3a, 0x8d, 0x6a, 0x93, + 0xd4, 0x34, 0x3b, 0x07, 0xf3, 0xd0, 0xbc, 0xba, 0x52, 0x9d, 0x49, 0x53, 0xe0, 0x9c, 0x92, 0x68, + 0x11, 0x50, 0x1a, 0x23, 0x46, 0x98, 0x65, 0x0f, 0x48, 0xf3, 0xc3, 0x19, 0x25, 0xd0, 0x07, 0x61, + 0x58, 0x39, 0xac, 0x6a, 0x23, 0xce, 0x36, 0x76, 0xac, 0x23, 0xb0, 0x49, 0x87, 0xae, 0xf0, 0xf4, + 0x13, 0x22, 0x51, 0x89, 0x30, 0x8a, 0x8c, 0xca, 0xdc, 0x12, 0x02, 0x8c, 0x75, 0x9a, 0xd9, 0x97, + 0x7f, 0xeb, 0x1b, 0xe7, 0xdf, 0xf7, 0xbb, 0xdf, 0x38, 0xff, 0xbe, 0x3f, 0xf8, 0xc6, 0xf9, 0xf7, + 0x7d, 0xd7, 0xfd, 0xf3, 0xd6, 0x6f, 0xdd, 0x3f, 0x6f, 0xfd, 0xee, 0xfd, 0xf3, 0xd6, 0x1f, 0xdc, + 0x3f, 0x6f, 0xfd, 0xf1, 0xfd, 0xf3, 0xd6, 0x17, 0xff, 0xe4, 0xfc, 0xfb, 0xde, 0x44, 0x71, 0x00, + 0xd1, 0xcb, 0x74, 0x74, 0x2e, 0xef, 0x5e, 0xf9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x0b, + 0x0a, 0x3d, 0x91, 0x13, 0x01, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -12124,13 +12125,6 @@ func (m *LoadBalancerIngress) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x22 } } - if m.IPMode != nil { - i -= len(*m.IPMode) - copy(dAtA[i:], *m.IPMode) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.IPMode))) - i-- - dAtA[i] = 0x1a - } i -= len(m.Hostname) copy(dAtA[i:], m.Hostname) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) @@ -14541,6 +14535,18 @@ func (m *PersistentVolumeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.LastPhaseTransitionTime != nil { + { + size, err := m.LastPhaseTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } i -= len(m.Reason) copy(dAtA[i:], m.Reason) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -22293,10 +22299,6 @@ func (m *LoadBalancerIngress) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Hostname) n += 1 + l + sovGenerated(uint64(l)) - if m.IPMode != nil { - l = len(*m.IPMode) - n += 1 + l + sovGenerated(uint64(l)) - } if len(m.Ports) > 0 { for _, e := range m.Ports { l = e.Size() @@ -23179,6 +23181,10 @@ func (m *PersistentVolumeStatus) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Reason) n += 1 + l + sovGenerated(uint64(l)) + if m.LastPhaseTransitionTime != nil { + l = m.LastPhaseTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -26710,7 +26716,6 @@ func (this *LoadBalancerIngress) String() string { s := strings.Join([]string{`&LoadBalancerIngress{`, `IP:` + fmt.Sprintf("%v", this.IP) + `,`, `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `IPMode:` + valueToStringGenerated(this.IPMode) + `,`, `Ports:` + repeatedStringForPorts + `,`, `}`, }, "") @@ -27367,6 +27372,7 @@ func (this *PersistentVolumeStatus) String() string { `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `LastPhaseTransitionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastPhaseTransitionTime), "Time", "v1.Time", 1) + `,`, `}`, }, "") return s @@ -44317,39 +44323,6 @@ func (m *LoadBalancerIngress) Unmarshal(dAtA []byte) error { } m.Hostname = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IPMode", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := LoadBalancerIPMode(dAtA[iNdEx:postIndex]) - m.IPMode = &s - iNdEx = postIndex case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) @@ -52103,6 +52076,42 @@ func (m *PersistentVolumeStatus) Unmarshal(dAtA []byte) error { } m.Reason = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastPhaseTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastPhaseTransitionTime == nil { + m.LastPhaseTransitionTime = &v1.Time{} + } + if err := m.LastPhaseTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto index 36cf8976d34c..901e837313fa 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto @@ -2171,15 +2171,6 @@ message LoadBalancerIngress { // +optional optional string hostname = 2; - // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. - // Setting this to "VIP" indicates that traffic is delivered to the node with - // the destination set to the load-balancer's IP and port. - // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with - // the destination set to the node's IP and node port or the pod's IP and port. - // Service implementations may use this information to adjust traffic routing. - // +optional - optional string ipMode = 3; - // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +listType=atomic @@ -3187,6 +3178,13 @@ message PersistentVolumeStatus { // for machine parsing and tidy display in the CLI. // +optional optional string reason = 3; + + // lastPhaseTransitionTime is the time the phase transitioned from one to another + // and automatically resets to current time everytime a volume phase transitions. + // This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature. + // +featureGate=PersistentVolumeLastPhaseTransitionTime + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastPhaseTransitionTime = 4; } // Represents a Photon Controller persistent disk resource. diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go index a2422820d1dc..9e05c2235652 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go @@ -411,6 +411,12 @@ type PersistentVolumeStatus struct { // for machine parsing and tidy display in the CLI. // +optional Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // lastPhaseTransitionTime is the time the phase transitioned from one to another + // and automatically resets to current time everytime a volume phase transitions. + // This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature. + // +featureGate=PersistentVolumeLastPhaseTransitionTime + // +optional + LastPhaseTransitionTime *metav1.Time `json:"lastPhaseTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastPhaseTransitionTime"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -4686,15 +4692,6 @@ type LoadBalancerIngress struct { // +optional Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"` - // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. - // Setting this to "VIP" indicates that traffic is delivered to the node with - // the destination set to the load-balancer's IP and port. - // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with - // the destination set to the node's IP and node port or the pod's IP and port. - // Service implementations may use this information to adjust traffic routing. - // +optional - IPMode *LoadBalancerIPMode `json:"ipMode,omitempty" protobuf:"bytes,3,opt,name=ipMode"` - // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +listType=atomic @@ -7057,15 +7054,3 @@ type PortStatus struct { // +kubebuilder:validation:MaxLength=316 Error *string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"` } - -// LoadBalancerIPMode represents the mode of the LoadBalancer ingress IP -type LoadBalancerIPMode string - -const ( - // LoadBalancerIPModeVIP indicates that traffic is delivered to the node with - // the destination set to the load-balancer's IP and port. - LoadBalancerIPModeVIP LoadBalancerIPMode = "VIP" - // LoadBalancerIPModeProxy indicates that traffic is delivered to the node or pod with - // the destination set to the node's IP and port or the pod's IP and port. - LoadBalancerIPModeProxy LoadBalancerIPMode = "Proxy" -) diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index 42415a6f9388..9734d8b41eb5 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -988,7 +988,6 @@ var map_LoadBalancerIngress = map[string]string{ "": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", "ip": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", "hostname": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", - "ipMode": "IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. Setting this to \"VIP\" indicates that traffic is delivered to the node with the destination set to the load-balancer's IP and port. Setting this to \"Proxy\" indicates that traffic is delivered to the node or pod with the destination set to the node's IP and node port or the pod's IP and port. Service implementations may use this information to adjust traffic routing.", "ports": "Ports is a list of records of service ports If used, every port defined in the service should have an entry in it", } @@ -1446,10 +1445,11 @@ func (PersistentVolumeSpec) SwaggerDoc() map[string]string { } var map_PersistentVolumeStatus = map[string]string{ - "": "PersistentVolumeStatus is the current status of a persistent volume.", - "phase": "phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", - "message": "message is a human-readable message indicating details about why the volume is in this state.", - "reason": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", + "": "PersistentVolumeStatus is the current status of a persistent volume.", + "phase": "phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", + "message": "message is a human-readable message indicating details about why the volume is in this state.", + "reason": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", + "lastPhaseTransitionTime": "lastPhaseTransitionTime is the time the phase transitioned from one to another and automatically resets to current time everytime a volume phase transitions. This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature.", } func (PersistentVolumeStatus) SwaggerDoc() map[string]string { diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index 1b9e904e15a3..d76f0bbbcf76 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -2228,11 +2228,6 @@ func (in *List) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) { *out = *in - if in.IPMode != nil { - in, out := &in.IPMode, &out.IPMode - *out = new(LoadBalancerIPMode) - **out = **in - } if in.Ports != nil { in, out := &in.Ports, &out.Ports *out = make([]PortStatus, len(*in)) @@ -2926,7 +2921,7 @@ func (in *PersistentVolume) DeepCopyInto(out *PersistentVolume) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) return } @@ -3368,6 +3363,10 @@ func (in *PersistentVolumeSpec) DeepCopy() *PersistentVolumeSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PersistentVolumeStatus) DeepCopyInto(out *PersistentVolumeStatus) { *out = *in + if in.LastPhaseTransitionTime != nil { + in, out := &in.LastPhaseTransitionTime, &out.LastPhaseTransitionTime + *out = (*in).DeepCopy() + } return } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/cel/filter.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/cel/filter.go index 9cce78e460ab..3e2a63e75ca7 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/cel/filter.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/cel/filter.go @@ -253,10 +253,13 @@ func (f *filter) ForInput(ctx context.Context, versionedAttr *admission.Versione } // TODO: to reuse https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/request/admissionreview.go#L154 -func CreateAdmissionRequest(attr admission.Attributes) *admissionv1.AdmissionRequest { - // FIXME: how to get resource GVK, GVR and subresource? - gvk := attr.GetKind() - gvr := attr.GetResource() +func CreateAdmissionRequest(attr admission.Attributes, equivalentGVR metav1.GroupVersionResource, equivalentKind metav1.GroupVersionKind) *admissionv1.AdmissionRequest { + // Attempting to use same logic as webhook for constructing resource + // GVK, GVR, subresource + // Use the GVK, GVR that the matcher decided was equivalent to that of the request + // https://github.com/kubernetes/kubernetes/blob/90c362b3430bcbbf8f245fadbcd521dab39f1d7c/staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/generic/webhook.go#L182-L210 + gvk := equivalentKind + gvr := equivalentGVR subresource := attr.GetSubresource() requestGVK := attr.GetKind() diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller.go index b3c092ab8aac..46b76e06d5f9 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller.go @@ -25,7 +25,7 @@ import ( "sync/atomic" "time" - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -81,8 +81,8 @@ type policyData struct { // that determined the decision type policyDecisionWithMetadata struct { PolicyDecision - Definition *v1alpha1.ValidatingAdmissionPolicy - Binding *v1alpha1.ValidatingAdmissionPolicyBinding + Definition *v1beta1.ValidatingAdmissionPolicy + Binding *v1beta1.ValidatingAdmissionPolicyBinding } // namespaceName is used as a key in definitionInfo and bindingInfos @@ -98,7 +98,7 @@ type definitionInfo struct { // Last value seen by this controller to be used in policy enforcement // May not be nil - lastReconciledValue *v1alpha1.ValidatingAdmissionPolicy + lastReconciledValue *v1beta1.ValidatingAdmissionPolicy } type bindingInfo struct { @@ -107,7 +107,7 @@ type bindingInfo struct { // Last value seen by this controller to be used in policy enforcement // May not be nil - lastReconciledValue *v1alpha1.ValidatingAdmissionPolicyBinding + lastReconciledValue *v1beta1.ValidatingAdmissionPolicyBinding } type paramInfo struct { @@ -141,10 +141,10 @@ func NewAdmissionController( informerFactory, nil, NewMatcher(matching.NewMatcher(informerFactory.Core().V1().Namespaces().Lister(), client)), - generic.NewInformer[*v1alpha1.ValidatingAdmissionPolicy]( - informerFactory.Admissionregistration().V1alpha1().ValidatingAdmissionPolicies().Informer()), - generic.NewInformer[*v1alpha1.ValidatingAdmissionPolicyBinding]( - informerFactory.Admissionregistration().V1alpha1().ValidatingAdmissionPolicyBindings().Informer()), + generic.NewInformer[*v1beta1.ValidatingAdmissionPolicy]( + informerFactory.Admissionregistration().V1beta1().ValidatingAdmissionPolicies().Informer()), + generic.NewInformer[*v1beta1.ValidatingAdmissionPolicyBinding]( + informerFactory.Admissionregistration().V1beta1().ValidatingAdmissionPolicyBindings().Informer()), ), authz: authz, } @@ -192,21 +192,21 @@ func (c *celAdmissionController) Validate( var deniedDecisions []policyDecisionWithMetadata - addConfigError := func(err error, definition *v1alpha1.ValidatingAdmissionPolicy, binding *v1alpha1.ValidatingAdmissionPolicyBinding) { + addConfigError := func(err error, definition *v1beta1.ValidatingAdmissionPolicy, binding *v1beta1.ValidatingAdmissionPolicyBinding) { // we always default the FailurePolicy if it is unset and validate it in API level - var policy v1alpha1.FailurePolicyType + var policy v1beta1.FailurePolicyType if definition.Spec.FailurePolicy == nil { - policy = v1alpha1.Fail + policy = v1beta1.Fail } else { policy = *definition.Spec.FailurePolicy } // apply FailurePolicy specified in ValidatingAdmissionPolicy, the default would be Fail switch policy { - case v1alpha1.Ignore: + case v1beta1.Ignore: // TODO: add metrics for ignored error here return - case v1alpha1.Fail: + case v1beta1.Fail: var message string if binding == nil { message = fmt.Errorf("failed to configure policy: %w", err).Error() @@ -244,7 +244,7 @@ func (c *celAdmissionController) Validate( var versionedAttr *admission.VersionedAttributes definition := definitionInfo.lastReconciledValue - matches, matchKind, err := c.policyController.matcher.DefinitionMatches(a, o, definition) + matches, matchResource, matchKind, err := c.policyController.matcher.DefinitionMatches(a, o, definition) if err != nil { // Configuration error. addConfigError(err, definition, nil) @@ -323,7 +323,7 @@ func (c *celAdmissionController) Validate( nested: param, } } - validationResults = append(validationResults, bindingInfo.validator.Validate(ctx, versionedAttr, p, namespace, celconfig.RuntimeCELCostBudget, authz)) + validationResults = append(validationResults, bindingInfo.validator.Validate(ctx, matchResource, versionedAttr, p, namespace, celconfig.RuntimeCELCostBudget, authz)) } for _, validationResult := range validationResults { @@ -336,17 +336,17 @@ func (c *celAdmissionController) Validate( case ActionDeny: for _, action := range binding.Spec.ValidationActions { switch action { - case v1alpha1.Deny: + case v1beta1.Deny: deniedDecisions = append(deniedDecisions, policyDecisionWithMetadata{ Definition: definition, Binding: binding, PolicyDecision: decision, }) celmetrics.Metrics.ObserveRejection(ctx, decision.Elapsed, definition.Name, binding.Name, "active") - case v1alpha1.Audit: + case v1beta1.Audit: c.publishValidationFailureAnnotation(binding, i, decision, versionedAttr) celmetrics.Metrics.ObserveAudit(ctx, decision.Elapsed, definition.Name, binding.Name, "active") - case v1alpha1.Warn: + case v1beta1.Warn: warning.AddWarning(ctx, "", fmt.Sprintf("Validation failed for ValidatingAdmissionPolicy '%s' with binding '%s': %s", definition.Name, binding.Name, decision.Message)) celmetrics.Metrics.ObserveWarn(ctx, decision.Elapsed, definition.Name, binding.Name, "active") } @@ -412,9 +412,9 @@ func (c *celAdmissionController) Validate( // Returns objects to use to evaluate the policy func (c *celAdmissionController) collectParams( - paramKind *v1alpha1.ParamKind, + paramKind *v1beta1.ParamKind, info paramInfo, - paramRef *v1alpha1.ParamRef, + paramRef *v1beta1.ParamRef, namespace string, ) ([]runtime.Object, error) { // If definition has paramKind, paramRef is required in binding. @@ -520,14 +520,14 @@ func (c *celAdmissionController) collectParams( } // Apply fail action for params not found case - if len(params) == 0 && paramRef.ParameterNotFoundAction != nil && *paramRef.ParameterNotFoundAction == v1alpha1.DenyAction { + if len(params) == 0 && paramRef.ParameterNotFoundAction != nil && *paramRef.ParameterNotFoundAction == v1beta1.DenyAction { return nil, errors.New("no params found for policy binding with `Deny` parameterNotFoundAction") } return params, nil } -func (c *celAdmissionController) publishValidationFailureAnnotation(binding *v1alpha1.ValidatingAdmissionPolicyBinding, expressionIndex int, decision PolicyDecision, attributes admission.Attributes) { +func (c *celAdmissionController) publishValidationFailureAnnotation(binding *v1beta1.ValidatingAdmissionPolicyBinding, expressionIndex int, decision PolicyDecision, attributes admission.Attributes) { key := "validation.policy.admission.k8s.io/validation_failure" // Marshal to a list of failures since, in the future, we may need to support multiple failures valueJson, err := utiljson.Marshal([]validationFailureValue{{ @@ -561,11 +561,11 @@ func (c *celAdmissionController) refreshPolicies() { // validationFailureValue defines the JSON format of a "validation.policy.admission.k8s.io/validation_failure" audit // annotation value. type validationFailureValue struct { - Message string `json:"message"` - Policy string `json:"policy"` - Binding string `json:"binding"` - ExpressionIndex int `json:"expressionIndex"` - ValidationActions []v1alpha1.ValidationAction `json:"validationActions"` + Message string `json:"message"` + Policy string `json:"policy"` + Binding string `json:"binding"` + ExpressionIndex int `json:"expressionIndex"` + ValidationActions []v1beta1.ValidationAction `json:"validationActions"` } type auditAnnotationCollector struct { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller_reconcile.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller_reconcile.go index b7cc81349d9a..b2624694c846 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller_reconcile.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/controller_reconcile.go @@ -23,7 +23,7 @@ import ( "time" v1 "k8s.io/api/admissionregistration/v1" - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/meta" @@ -49,8 +49,8 @@ type policyController struct { dynamicClient dynamic.Interface informerFactory informers.SharedInformerFactory restMapper meta.RESTMapper - policyDefinitionsController generic.Controller[*v1alpha1.ValidatingAdmissionPolicy] - policyBindingController generic.Controller[*v1alpha1.ValidatingAdmissionPolicyBinding] + policyDefinitionsController generic.Controller[*v1beta1.ValidatingAdmissionPolicy] + policyBindingController generic.Controller[*v1beta1.ValidatingAdmissionPolicyBinding] // Provided to the policy's Compile function as an injected dependency to // assist with compiling its expressions to CEL @@ -70,7 +70,7 @@ type policyController struct { cachedPolicies []policyData // controller and metadata - paramsCRDControllers map[v1alpha1.ParamKind]*paramInfo + paramsCRDControllers map[v1beta1.ParamKind]*paramInfo // Index for each definition namespace/name, contains all binding // namespace/names known to exist for that definition @@ -96,15 +96,15 @@ func newPolicyController( informerFactory informers.SharedInformerFactory, filterCompiler cel.FilterCompiler, matcher Matcher, - policiesInformer generic.Informer[*v1alpha1.ValidatingAdmissionPolicy], - bindingsInformer generic.Informer[*v1alpha1.ValidatingAdmissionPolicyBinding], + policiesInformer generic.Informer[*v1beta1.ValidatingAdmissionPolicy], + bindingsInformer generic.Informer[*v1beta1.ValidatingAdmissionPolicyBinding], ) *policyController { res := &policyController{} *res = policyController{ filterCompiler: filterCompiler, definitionInfo: make(map[namespacedName]*definitionInfo), bindingInfos: make(map[namespacedName]*bindingInfo), - paramsCRDControllers: make(map[v1alpha1.ParamKind]*paramInfo), + paramsCRDControllers: make(map[v1beta1.ParamKind]*paramInfo), definitionsToBindings: make(map[namespacedName]sets.Set[namespacedName]), matcher: matcher, newValidator: NewValidator, @@ -160,14 +160,14 @@ func (c *policyController) HasSynced() bool { return c.policyDefinitionsController.HasSynced() && c.policyBindingController.HasSynced() } -func (c *policyController) reconcilePolicyDefinition(namespace, name string, definition *v1alpha1.ValidatingAdmissionPolicy) error { +func (c *policyController) reconcilePolicyDefinition(namespace, name string, definition *v1beta1.ValidatingAdmissionPolicy) error { c.mutex.Lock() defer c.mutex.Unlock() err := c.reconcilePolicyDefinitionSpec(namespace, name, definition) return err } -func (c *policyController) reconcilePolicyDefinitionSpec(namespace, name string, definition *v1alpha1.ValidatingAdmissionPolicy) error { +func (c *policyController) reconcilePolicyDefinitionSpec(namespace, name string, definition *v1beta1.ValidatingAdmissionPolicy) error { c.cachedPolicies = nil // invalidate cachedPolicies // Namespace for policydefinition is empty. @@ -186,7 +186,7 @@ func (c *policyController) reconcilePolicyDefinitionSpec(namespace, name string, return nil } - var paramSource *v1alpha1.ParamKind + var paramSource *v1beta1.ParamKind if definition != nil { paramSource = definition.Spec.ParamKind } @@ -266,7 +266,7 @@ func (c *policyController) reconcilePolicyDefinitionSpec(namespace, name string, // Ensures that there is an informer started for the given GVK to be used as a // param -func (c *policyController) ensureParamInfo(paramSource *v1alpha1.ParamKind, mapping *meta.RESTMapping) *paramInfo { +func (c *policyController) ensureParamInfo(paramSource *v1beta1.ParamKind, mapping *meta.RESTMapping) *paramInfo { if info, ok := c.paramsCRDControllers[*paramSource]; ok { return info } @@ -329,7 +329,7 @@ func (c *policyController) ensureParamInfo(paramSource *v1alpha1.ParamKind, mapp } -func (c *policyController) reconcilePolicyBinding(namespace, name string, binding *v1alpha1.ValidatingAdmissionPolicyBinding) error { +func (c *policyController) reconcilePolicyBinding(namespace, name string, binding *v1beta1.ValidatingAdmissionPolicyBinding) error { c.mutex.Lock() defer c.mutex.Unlock() @@ -432,7 +432,7 @@ func (c *policyController) latestPolicyData() []policyData { } optionalVars := cel.OptionalVariableDeclarations{HasParams: hasParam, HasAuthorizer: true} expressionOptionalVars := cel.OptionalVariableDeclarations{HasParams: hasParam, HasAuthorizer: false} - failurePolicy := convertv1alpha1FailurePolicyTypeTov1FailurePolicyType(definitionInfo.lastReconciledValue.Spec.FailurePolicy) + failurePolicy := convertv1beta1FailurePolicyTypeTov1FailurePolicyType(definitionInfo.lastReconciledValue.Spec.FailurePolicy) var matcher matchconditions.Matcher = nil matchConditions := definitionInfo.lastReconciledValue.Spec.MatchConditions @@ -441,7 +441,7 @@ func (c *policyController) latestPolicyData() []policyData { compositedCompiler, err := cel.NewCompositedCompiler(environment.MustBaseEnvSet(environment.DefaultCompatibilityVersion())) if err == nil { filterCompiler = compositedCompiler - compositedCompiler.CompileAndStoreVariables(convertV1alpha1Variables(definitionInfo.lastReconciledValue.Spec.Variables), optionalVars, environment.StoredExpressions) + compositedCompiler.CompileAndStoreVariables(convertv1beta1Variables(definitionInfo.lastReconciledValue.Spec.Variables), optionalVars, environment.StoredExpressions) } else { utilruntime.HandleError(err) } @@ -454,10 +454,10 @@ func (c *policyController) latestPolicyData() []policyData { matcher = matchconditions.NewMatcher(filterCompiler.Compile(matchExpressionAccessors, optionalVars, environment.StoredExpressions), failurePolicy, "policy", "validate", definitionInfo.lastReconciledValue.Name) } bindingInfo.validator = c.newValidator( - filterCompiler.Compile(convertv1alpha1Validations(definitionInfo.lastReconciledValue.Spec.Validations), optionalVars, environment.StoredExpressions), + filterCompiler.Compile(convertv1beta1Validations(definitionInfo.lastReconciledValue.Spec.Validations), optionalVars, environment.StoredExpressions), matcher, - filterCompiler.Compile(convertv1alpha1AuditAnnotations(definitionInfo.lastReconciledValue.Spec.AuditAnnotations), optionalVars, environment.StoredExpressions), - filterCompiler.Compile(convertV1Alpha1MessageExpressions(definitionInfo.lastReconciledValue.Spec.Validations), expressionOptionalVars, environment.StoredExpressions), + filterCompiler.Compile(convertv1beta1AuditAnnotations(definitionInfo.lastReconciledValue.Spec.AuditAnnotations), optionalVars, environment.StoredExpressions), + filterCompiler.Compile(convertv1beta1MessageExpressions(definitionInfo.lastReconciledValue.Spec.Validations), expressionOptionalVars, environment.StoredExpressions), failurePolicy, ) } @@ -482,21 +482,21 @@ func (c *policyController) latestPolicyData() []policyData { return res } -func convertv1alpha1FailurePolicyTypeTov1FailurePolicyType(policyType *v1alpha1.FailurePolicyType) *v1.FailurePolicyType { +func convertv1beta1FailurePolicyTypeTov1FailurePolicyType(policyType *v1beta1.FailurePolicyType) *v1.FailurePolicyType { if policyType == nil { return nil } var v1FailPolicy v1.FailurePolicyType - if *policyType == v1alpha1.Fail { + if *policyType == v1beta1.Fail { v1FailPolicy = v1.Fail - } else if *policyType == v1alpha1.Ignore { + } else if *policyType == v1beta1.Ignore { v1FailPolicy = v1.Ignore } return &v1FailPolicy } -func convertv1alpha1Validations(inputValidations []v1alpha1.Validation) []cel.ExpressionAccessor { +func convertv1beta1Validations(inputValidations []v1beta1.Validation) []cel.ExpressionAccessor { celExpressionAccessor := make([]cel.ExpressionAccessor, len(inputValidations)) for i, validation := range inputValidations { validation := ValidationCondition{ @@ -509,7 +509,7 @@ func convertv1alpha1Validations(inputValidations []v1alpha1.Validation) []cel.Ex return celExpressionAccessor } -func convertV1Alpha1MessageExpressions(inputValidations []v1alpha1.Validation) []cel.ExpressionAccessor { +func convertv1beta1MessageExpressions(inputValidations []v1beta1.Validation) []cel.ExpressionAccessor { celExpressionAccessor := make([]cel.ExpressionAccessor, len(inputValidations)) for i, validation := range inputValidations { if validation.MessageExpression != "" { @@ -522,7 +522,7 @@ func convertV1Alpha1MessageExpressions(inputValidations []v1alpha1.Validation) [ return celExpressionAccessor } -func convertv1alpha1AuditAnnotations(inputValidations []v1alpha1.AuditAnnotation) []cel.ExpressionAccessor { +func convertv1beta1AuditAnnotations(inputValidations []v1beta1.AuditAnnotation) []cel.ExpressionAccessor { celExpressionAccessor := make([]cel.ExpressionAccessor, len(inputValidations)) for i, validation := range inputValidations { validation := AuditAnnotationCondition{ @@ -534,7 +534,7 @@ func convertv1alpha1AuditAnnotations(inputValidations []v1alpha1.AuditAnnotation return celExpressionAccessor } -func convertV1alpha1Variables(variables []v1alpha1.Variable) []cel.NamedExpressionAccessor { +func convertv1beta1Variables(variables []v1beta1.Variable) []cel.NamedExpressionAccessor { namedExpressions := make([]cel.NamedExpressionAccessor, len(variables)) for i, variable := range variables { namedExpressions[i] = &Variable{Name: variable.Name, Expression: variable.Expression} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/interface.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/interface.go index 28c5a0dad509..206fc1378316 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/interface.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/interface.go @@ -21,7 +21,7 @@ import ( celgo "github.com/google/cel-go/cel" - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -86,11 +86,11 @@ type Matcher interface { // DefinitionMatches says whether this policy definition matches the provided admission // resource request - DefinitionMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1alpha1.ValidatingAdmissionPolicy) (bool, schema.GroupVersionKind, error) + DefinitionMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1beta1.ValidatingAdmissionPolicy) (bool, schema.GroupVersionResource, schema.GroupVersionKind, error) // BindingMatches says whether this policy definition matches the provided admission // resource request - BindingMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1alpha1.ValidatingAdmissionPolicyBinding) (bool, error) + BindingMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1beta1.ValidatingAdmissionPolicyBinding) (bool, error) // GetNamespace retrieves the Namespace resource by the given name. The name may be empty, in which case // GetNamespace must return nil, nil @@ -109,5 +109,5 @@ type ValidateResult struct { type Validator interface { // Validate is used to take cel evaluations and convert into decisions // runtimeCELCostBudget was added for testing purpose only. Callers should always use const RuntimeCELCostBudget from k8s.io/apiserver/pkg/apis/cel/config.go as input. - Validate(ctx context.Context, versionedAttr *admission.VersionedAttributes, versionedParams runtime.Object, namespace *corev1.Namespace, runtimeCELCostBudget int64, authz authorizer.Authorizer) ValidateResult + Validate(ctx context.Context, matchedResource schema.GroupVersionResource, versionedAttr *admission.VersionedAttributes, versionedParams runtime.Object, namespace *corev1.Namespace, runtimeCELCostBudget int64, authz authorizer.Authorizer) ValidateResult } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matcher.go index 5ed3d17b142d..397f2c267146 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matcher.go @@ -17,7 +17,7 @@ limitations under the License. package validatingadmissionpolicy import ( - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -29,7 +29,7 @@ import ( var _ matching.MatchCriteria = &matchCriteria{} type matchCriteria struct { - constraints *v1alpha1.MatchResources + constraints *v1beta1.MatchResources } // GetParsedNamespaceSelector returns the converted LabelSelector which implements labels.Selector @@ -43,7 +43,7 @@ func (m *matchCriteria) GetParsedObjectSelector() (labels.Selector, error) { } // GetMatchResources returns the matchConstraints -func (m *matchCriteria) GetMatchResources() v1alpha1.MatchResources { +func (m *matchCriteria) GetMatchResources() v1beta1.MatchResources { return *m.constraints } @@ -63,18 +63,18 @@ func (c *matcher) ValidateInitialization() error { } // DefinitionMatches returns whether this ValidatingAdmissionPolicy matches the provided admission resource request -func (c *matcher) DefinitionMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1alpha1.ValidatingAdmissionPolicy) (bool, schema.GroupVersionKind, error) { +func (c *matcher) DefinitionMatches(a admission.Attributes, o admission.ObjectInterfaces, definition *v1beta1.ValidatingAdmissionPolicy) (bool, schema.GroupVersionResource, schema.GroupVersionKind, error) { criteria := matchCriteria{constraints: definition.Spec.MatchConstraints} return c.Matcher.Matches(a, o, &criteria) } // BindingMatches returns whether this ValidatingAdmissionPolicyBinding matches the provided admission resource request -func (c *matcher) BindingMatches(a admission.Attributes, o admission.ObjectInterfaces, binding *v1alpha1.ValidatingAdmissionPolicyBinding) (bool, error) { +func (c *matcher) BindingMatches(a admission.Attributes, o admission.ObjectInterfaces, binding *v1beta1.ValidatingAdmissionPolicyBinding) (bool, error) { if binding.Spec.MatchResources == nil { return true, nil } criteria := matchCriteria{constraints: binding.Spec.MatchResources} - isMatch, _, err := c.Matcher.Matches(a, o, &criteria) + isMatch, _, _, err := c.Matcher.Matches(a, o, &criteria) return isMatch, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matching/matching.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matching/matching.go index a97adb171438..ebdb61db889a 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matching/matching.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/matching/matching.go @@ -20,7 +20,7 @@ import ( "fmt" v1 "k8s.io/api/admissionregistration/v1" - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/admission" @@ -36,7 +36,7 @@ type MatchCriteria interface { namespace.NamespaceSelectorProvider object.ObjectSelectorProvider - GetMatchResources() v1alpha1.MatchResources + GetMatchResources() v1beta1.MatchResources } // Matcher decides if a request matches against matchCriteria @@ -71,56 +71,60 @@ func (m *Matcher) ValidateInitialization() error { return nil } -func (m *Matcher) Matches(attr admission.Attributes, o admission.ObjectInterfaces, criteria MatchCriteria) (bool, schema.GroupVersionKind, error) { +func (m *Matcher) Matches(attr admission.Attributes, o admission.ObjectInterfaces, criteria MatchCriteria) (bool, schema.GroupVersionResource, schema.GroupVersionKind, error) { matches, matchNsErr := m.namespaceMatcher.MatchNamespaceSelector(criteria, attr) // Should not return an error here for policy which do not apply to the request, even if err is an unexpected scenario. if !matches && matchNsErr == nil { - return false, schema.GroupVersionKind{}, nil + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, nil } matches, matchObjErr := m.objectMatcher.MatchObjectSelector(criteria, attr) // Should not return an error here for policy which do not apply to the request, even if err is an unexpected scenario. if !matches && matchObjErr == nil { - return false, schema.GroupVersionKind{}, nil + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, nil } matchResources := criteria.GetMatchResources() matchPolicy := matchResources.MatchPolicy - if isExcluded, _, err := matchesResourceRules(matchResources.ExcludeResourceRules, matchPolicy, attr, o); isExcluded || err != nil { - return false, schema.GroupVersionKind{}, err + if isExcluded, _, _, err := matchesResourceRules(matchResources.ExcludeResourceRules, matchPolicy, attr, o); isExcluded || err != nil { + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, err } var ( - isMatch bool - matchKind schema.GroupVersionKind - matchErr error + isMatch bool + matchResource schema.GroupVersionResource + matchKind schema.GroupVersionKind + matchErr error ) if len(matchResources.ResourceRules) == 0 { isMatch = true matchKind = attr.GetKind() + matchResource = attr.GetResource() } else { - isMatch, matchKind, matchErr = matchesResourceRules(matchResources.ResourceRules, matchPolicy, attr, o) + isMatch, matchResource, matchKind, matchErr = matchesResourceRules(matchResources.ResourceRules, matchPolicy, attr, o) } if matchErr != nil { - return false, schema.GroupVersionKind{}, matchErr + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, matchErr } if !isMatch { - return false, schema.GroupVersionKind{}, nil + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, nil } // now that we know this applies to this request otherwise, if there were selector errors, return them if matchNsErr != nil { - return false, schema.GroupVersionKind{}, matchNsErr + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, matchNsErr } if matchObjErr != nil { - return false, schema.GroupVersionKind{}, matchObjErr + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, matchObjErr } - return true, matchKind, nil + return true, matchResource, matchKind, nil } -func matchesResourceRules(namedRules []v1alpha1.NamedRuleWithOperations, matchPolicy *v1alpha1.MatchPolicyType, attr admission.Attributes, o admission.ObjectInterfaces) (bool, schema.GroupVersionKind, error) { +func matchesResourceRules(namedRules []v1beta1.NamedRuleWithOperations, matchPolicy *v1beta1.MatchPolicyType, attr admission.Attributes, o admission.ObjectInterfaces) (bool, schema.GroupVersionResource, schema.GroupVersionKind, error) { matchKind := attr.GetKind() + matchResource := attr.GetResource() + for _, namedRule := range namedRules { rule := v1.RuleWithOperations(namedRule.RuleWithOperations) ruleMatcher := rules.Matcher{ @@ -132,22 +136,22 @@ func matchesResourceRules(namedRules []v1alpha1.NamedRuleWithOperations, matchPo } // an empty name list always matches if len(namedRule.ResourceNames) == 0 { - return true, matchKind, nil + return true, matchResource, matchKind, nil } // TODO: GetName() can return an empty string if the user is relying on // the API server to generate the name... figure out what to do for this edge case name := attr.GetName() for _, matchedName := range namedRule.ResourceNames { if name == matchedName { - return true, matchKind, nil + return true, matchResource, matchKind, nil } } } // if match policy is undefined or exact, don't perform fuzzy matching // note that defaulting to fuzzy matching is set by the API - if matchPolicy == nil || *matchPolicy == v1alpha1.Exact { - return false, schema.GroupVersionKind{}, nil + if matchPolicy == nil || *matchPolicy == v1beta1.Exact { + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, nil } attrWithOverride := &attrWithResourceOverride{Attributes: attr} @@ -169,11 +173,11 @@ func matchesResourceRules(namedRules []v1alpha1.NamedRuleWithOperations, matchPo } matchKind = o.GetEquivalentResourceMapper().KindFor(equivalent, attr.GetSubresource()) if matchKind.Empty() { - return false, schema.GroupVersionKind{}, fmt.Errorf("unable to convert to %v: unknown kind", equivalent) + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, fmt.Errorf("unable to convert to %v: unknown kind", equivalent) } // an empty name list always matches if len(namedRule.ResourceNames) == 0 { - return true, matchKind, nil + return true, equivalent, matchKind, nil } // TODO: GetName() can return an empty string if the user is relying on @@ -181,12 +185,12 @@ func matchesResourceRules(namedRules []v1alpha1.NamedRuleWithOperations, matchPo name := attr.GetName() for _, matchedName := range namedRule.ResourceNames { if name == matchedName { - return true, matchKind, nil + return true, equivalent, matchKind, nil } } } } - return false, schema.GroupVersionKind{}, nil + return false, schema.GroupVersionResource{}, schema.GroupVersionKind{}, nil } type attrWithResourceOverride struct { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/typechecking.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/typechecking.go index 8857933c3d82..6d73e237b078 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/typechecking.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/typechecking.go @@ -25,7 +25,7 @@ import ( "github.com/google/cel-go/cel" - "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/api/admissionregistration/v1beta1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" @@ -102,18 +102,18 @@ func (r *TypeCheckingResult) String() string { // as []ExpressionWarning that is ready to be set in policy.Status // The result is nil if type checking returns no warning. // The policy object is NOT mutated. The caller should update Status accordingly -func (c *TypeChecker) Check(policy *v1alpha1.ValidatingAdmissionPolicy) []v1alpha1.ExpressionWarning { +func (c *TypeChecker) Check(policy *v1beta1.ValidatingAdmissionPolicy) []v1beta1.ExpressionWarning { ctx := c.CreateContext(policy) // warnings to return, note that the capacity is optimistically set to zero - var warnings []v1alpha1.ExpressionWarning // intentionally not setting capacity + var warnings []v1beta1.ExpressionWarning // intentionally not setting capacity // check main validation expressions and their message expressions, located in spec.validations[*] fieldRef := field.NewPath("spec", "validations") for i, v := range policy.Spec.Validations { results := c.CheckExpression(ctx, v.Expression) if len(results) != 0 { - warnings = append(warnings, v1alpha1.ExpressionWarning{ + warnings = append(warnings, v1beta1.ExpressionWarning{ FieldRef: fieldRef.Index(i).Child("expression").String(), Warning: results.String(), }) @@ -124,7 +124,7 @@ func (c *TypeChecker) Check(policy *v1alpha1.ValidatingAdmissionPolicy) []v1alph } results = c.CheckExpression(ctx, v.MessageExpression) if len(results) != 0 { - warnings = append(warnings, v1alpha1.ExpressionWarning{ + warnings = append(warnings, v1beta1.ExpressionWarning{ FieldRef: fieldRef.Index(i).Child("messageExpression").String(), Warning: results.String(), }) @@ -135,7 +135,7 @@ func (c *TypeChecker) Check(policy *v1alpha1.ValidatingAdmissionPolicy) []v1alph } // CreateContext resolves all types and their schemas from a policy definition and creates the context. -func (c *TypeChecker) CreateContext(policy *v1alpha1.ValidatingAdmissionPolicy) *TypeCheckingContext { +func (c *TypeChecker) CreateContext(policy *v1beta1.ValidatingAdmissionPolicy) *TypeCheckingContext { ctx := new(TypeCheckingContext) allGvks := c.typesToCheck(policy) gvks := make([]schema.GroupVersionKind, 0, len(allGvks)) @@ -203,7 +203,7 @@ func (c *TypeChecker) declType(gvk schema.GroupVersionKind) (*apiservercel.DeclT return common.SchemaDeclType(&openapi.Schema{Schema: s}, true).MaybeAssignTypeName(generateUniqueTypeName(gvk.Kind)), nil } -func (c *TypeChecker) paramsGVK(policy *v1alpha1.ValidatingAdmissionPolicy) schema.GroupVersionKind { +func (c *TypeChecker) paramsGVK(policy *v1beta1.ValidatingAdmissionPolicy) schema.GroupVersionKind { if policy.Spec.ParamKind == nil { return schema.GroupVersionKind{} } @@ -233,7 +233,7 @@ func (c *TypeChecker) checkExpression(expression string, hasParams, hasAuthorize // typesToCheck extracts a list of GVKs that needs type checking from the policy // the result is sorted in the order of Group, Version, and Kind -func (c *TypeChecker) typesToCheck(p *v1alpha1.ValidatingAdmissionPolicy) []schema.GroupVersionKind { +func (c *TypeChecker) typesToCheck(p *v1beta1.ValidatingAdmissionPolicy) []schema.GroupVersionKind { gvks := sets.New[schema.GroupVersionKind]() if p.Spec.MatchConstraints == nil || len(p.Spec.MatchConstraints.ResourceRules) == 0 { return nil @@ -294,7 +294,7 @@ func (c *TypeChecker) typesToCheck(p *v1alpha1.ValidatingAdmissionPolicy) []sche return sortGVKList(gvks.UnsortedList()) } -func extractGroups(rule *v1alpha1.Rule) []string { +func extractGroups(rule *v1beta1.Rule) []string { groups := make([]string, 0, len(rule.APIGroups)) for _, group := range rule.APIGroups { // give up if wildcard @@ -306,7 +306,7 @@ func extractGroups(rule *v1alpha1.Rule) []string { return groups } -func extractVersions(rule *v1alpha1.Rule) []string { +func extractVersions(rule *v1beta1.Rule) []string { versions := make([]string, 0, len(rule.APIVersions)) for _, version := range rule.APIVersions { if strings.ContainsAny(version, "*") { @@ -317,7 +317,7 @@ func extractVersions(rule *v1alpha1.Rule) []string { return versions } -func extractResources(rule *v1alpha1.Rule) []string { +func extractResources(rule *v1beta1.Rule) []string { resources := make([]string, 0, len(rule.Resources)) for _, resource := range rule.Resources { // skip wildcard and subresources diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/validator.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/validator.go index b21e6495b4a1..9630a4974719 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/validator.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/validatingadmissionpolicy/validator.go @@ -27,6 +27,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission/plugin/cel" "k8s.io/apiserver/pkg/admission/plugin/webhook/matchconditions" @@ -72,7 +73,7 @@ func auditAnnotationEvaluationForError(f v1.FailurePolicyType) PolicyAuditAnnota // Validate takes a list of Evaluation and a failure policy and converts them into actionable PolicyDecisions // runtimeCELCostBudget was added for testing purpose only. Callers should always use const RuntimeCELCostBudget from k8s.io/apiserver/pkg/apis/cel/config.go as input. -func (v *validator) Validate(ctx context.Context, versionedAttr *admission.VersionedAttributes, versionedParams runtime.Object, namespace *corev1.Namespace, runtimeCELCostBudget int64, authz authorizer.Authorizer) ValidateResult { +func (v *validator) Validate(ctx context.Context, matchedResource schema.GroupVersionResource, versionedAttr *admission.VersionedAttributes, versionedParams runtime.Object, namespace *corev1.Namespace, runtimeCELCostBudget int64, authz authorizer.Authorizer) ValidateResult { var f v1.FailurePolicyType if v.failPolicy == nil { f = v1.Fail @@ -102,7 +103,7 @@ func (v *validator) Validate(ctx context.Context, versionedAttr *admission.Versi optionalVars := cel.OptionalVariableBindings{VersionedParams: versionedParams, Authorizer: authz} expressionOptionalVars := cel.OptionalVariableBindings{VersionedParams: versionedParams} - admissionRequest := cel.CreateAdmissionRequest(versionedAttr.Attributes) + admissionRequest := cel.CreateAdmissionRequest(versionedAttr.Attributes, metav1.GroupVersionResource(matchedResource), metav1.GroupVersionKind(versionedAttr.VersionedKind)) // Decide which fields are exposed ns := cel.CreateNamespaceObject(namespace) evalResults, remainingBudget, err := v.validationFilter.ForInput(ctx, versionedAttr, admissionRequest, optionalVars, ns, runtimeCELCostBudget) @@ -195,7 +196,7 @@ func (v *validator) Validate(ctx context.Context, versionedAttr *admission.Versi } options := cel.OptionalVariableBindings{VersionedParams: versionedParams} - auditAnnotationEvalResults, _, err := v.auditAnnotationFilter.ForInput(ctx, versionedAttr, cel.CreateAdmissionRequest(versionedAttr.Attributes), options, namespace, runtimeCELCostBudget) + auditAnnotationEvalResults, _, err := v.auditAnnotationFilter.ForInput(ctx, versionedAttr, admissionRequest, options, namespace, runtimeCELCostBudget) if err != nil { return ValidateResult{ Decisions: []PolicyDecision{ diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/matchconditions/matcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/matchconditions/matcher.go index e9c3fb8f71c3..21dd28f6c24f 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/matchconditions/matcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/matchconditions/matcher.go @@ -26,6 +26,7 @@ import ( celtypes "github.com/google/cel-go/common/types" v1 "k8s.io/api/admissionregistration/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apiserver/pkg/admission" @@ -78,7 +79,7 @@ func NewMatcher(filter celplugin.Filter, failPolicy *v1.FailurePolicyType, match func (m *matcher) Match(ctx context.Context, versionedAttr *admission.VersionedAttributes, versionedParams runtime.Object, authz authorizer.Authorizer) MatchResult { t := time.Now() - evalResults, _, err := m.filter.ForInput(ctx, versionedAttr, celplugin.CreateAdmissionRequest(versionedAttr.Attributes), celplugin.OptionalVariableBindings{ + evalResults, _, err := m.filter.ForInput(ctx, versionedAttr, celplugin.CreateAdmissionRequest(versionedAttr.Attributes, metav1.GroupVersionResource(versionedAttr.GetResource()), metav1.GroupVersionKind(versionedAttr.VersionedKind)), celplugin.OptionalVariableBindings{ VersionedParams: versionedParams, Authorizer: authz, }, nil, celconfig.RuntimeCELCostBudgetMatchConditions) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/installer.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/installer.go index 2011292927d2..042bd802f1aa 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/installer.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/installer.go @@ -127,6 +127,9 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove apiResourceList = append(apiResourceList, apidiscoveryv2beta1.APIResourceDiscovery{ Resource: split[0], Scope: scope, + // avoid nil panics in v0.26.0-v0.26.3 client-go clients + // see https://github.com/kubernetes/kubernetes/issues/118361 + ResponseKind: &metav1.GroupVersionKind{}, }) parentidx = len(apiResourceList) - 1 parentResources[split[0]] = parentidx @@ -140,6 +143,9 @@ func ConvertGroupVersionIntoToDiscovery(list []metav1.APIResource) ([]apidiscove subresource := apidiscoveryv2beta1.APISubresourceDiscovery{ Subresource: split[1], Verbs: r.Verbs, + // avoid nil panics in v0.26.0-v0.26.3 client-go clients + // see https://github.com/kubernetes/kubernetes/issues/118361 + ResponseKind: &metav1.GroupVersionKind{}, } if r.Kind != "" { subresource.ResponseKind = &metav1.GroupVersionKind{ diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go index 392e8a777536..f1d1879ec4b2 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -125,6 +125,13 @@ const ( // Enables KMS v2 API for encryption at rest. KMSv2 featuregate.Feature = "KMSv2" + // owner: @enj + // kep: https://kep.k8s.io/3299 + // beta: v1.28 + // + // Enables the use of derived encryption keys with KMS v2. + KMSv2KDF featuregate.Feature = "KMSv2KDF" + // owner: @jiahuif // kep: https://kep.k8s.io/2887 // alpha: v1.23 @@ -241,7 +248,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS APIServerTracing: {Default: true, PreRelease: featuregate.Beta}, - ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Alpha}, + ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Beta}, CustomResourceValidationExpressions: {Default: true, PreRelease: featuregate.Beta}, @@ -251,6 +258,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS KMSv2: {Default: true, PreRelease: featuregate.Beta}, + KMSv2KDF: {Default: false, PreRelease: featuregate.Beta}, // default and lock to true in 1.29, remove in 1.31 + OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, OpenAPIV3: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go index 4aad4f3423c7..13819bf90c15 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go @@ -47,6 +47,7 @@ import ( aestransformer "k8s.io/apiserver/pkg/storage/value/encrypt/aes" "k8s.io/apiserver/pkg/storage/value/encrypt/envelope" envelopekmsv2 "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2" + kmstypes "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2" "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics" "k8s.io/apiserver/pkg/storage/value/encrypt/identity" "k8s.io/apiserver/pkg/storage/value/encrypt/secretbox" @@ -63,13 +64,13 @@ const ( kmsTransformerPrefixV2 = "k8s:enc:kms:v2:" // these constants relate to how the KMS v2 plugin status poll logic - // and the DEK generation logic behave. In particular, the positive + // and the DEK/seed generation logic behave. In particular, the positive // interval and max TTL are closely related as the difference between - // these values defines the worst case window in which the write DEK + // these values defines the worst case window in which the write DEK/seed // could expire due to the plugin going into an error state. The // worst case window divided by the negative interval defines the // minimum amount of times the server will attempt to return to a - // healthy state before the DEK expires and writes begin to fail. + // healthy state before the DEK/seed expires and writes begin to fail. // // For now, these values are kept small and hardcoded to support being // able to perform a "passive" storage migration while tolerating some @@ -82,13 +83,13 @@ const ( // At that point, they are guaranteed to either migrate to the new key // or get errors during the migration. // - // If the API server coasted forever on the last DEK, they would need + // If the API server coasted forever on the last DEK/seed, they would need // to actively check if it had observed the new key ID before starting - // a migration - otherwise it could keep using the old DEK and their + // a migration - otherwise it could keep using the old DEK/seed and their // storage migration would not do what they thought it did. kmsv2PluginHealthzPositiveInterval = 1 * time.Minute kmsv2PluginHealthzNegativeInterval = 10 * time.Second - kmsv2PluginWriteDEKMaxTTL = 3 * time.Minute + kmsv2PluginWriteDEKSourceMaxTTL = 3 * time.Minute kmsPluginHealthzNegativeTTL = 3 * time.Second kmsPluginHealthzPositiveTTL = 20 * time.Second @@ -332,8 +333,8 @@ func (h *kmsv2PluginProbe) check(ctx context.Context) error { return nil } -// rotateDEKOnKeyIDChange tries to rotate to a new DEK if the key ID returned by Status does not match the -// current state. If a successful rotation is performed, the new DEK and keyID overwrite the existing state. +// rotateDEKOnKeyIDChange tries to rotate to a new DEK/seed if the key ID returned by Status does not match the +// current state. If a successful rotation is performed, the new DEK/seed and keyID overwrite the existing state. // On any failure during rotation (including mismatch between status and encrypt calls), the current state is // preserved and will remain valid to use for encryption until its expiration (the system attempts to coast). // If the key ID returned by Status matches the current state, the expiration of the current state is extended @@ -346,32 +347,38 @@ func (h *kmsv2PluginProbe) rotateDEKOnKeyIDChange(ctx context.Context, statusKey // allow reads indefinitely in all cases // allow writes indefinitely as long as there is no error - // allow writes for only up to kmsv2PluginWriteDEKMaxTTL from now when there are errors - // we start the timer before we make the network call because kmsv2PluginWriteDEKMaxTTL is meant to be the upper bound - expirationTimestamp := envelopekmsv2.NowFunc().Add(kmsv2PluginWriteDEKMaxTTL) - - // state is valid and status keyID is unchanged from when we generated this DEK so there is no need to rotate it + // allow writes for only up to kmsv2PluginWriteDEKSourceMaxTTL from now when there are errors + // we start the timer before we make the network call because kmsv2PluginWriteDEKSourceMaxTTL is meant to be the upper bound + expirationTimestamp := envelopekmsv2.NowFunc().Add(kmsv2PluginWriteDEKSourceMaxTTL) + + // dynamically check if we want to use KDF seed to derive DEKs or just a single DEK + // this gate can only change during tests, but the check is cheap enough to always make + // this allows us to easily exercise both modes without restarting the API server + // TODO integration test that this dynamically takes effect + useSeed := utilfeature.DefaultFeatureGate.Enabled(features.KMSv2KDF) + stateUseSeed := state.EncryptedObject.EncryptedDEKSourceType == kmstypes.EncryptedDEKSourceType_HKDF_SHA256_XNONCE_AES_GCM_SEED + + // state is valid and status keyID is unchanged from when we generated this DEK/seed so there is no need to rotate it // just move the expiration of the current state forward by the reuse interval - if errState == nil && state.KeyID == statusKeyID { + // useSeed can only change at runtime during tests, so we check it here to allow us to easily exercise both modes + if errState == nil && state.EncryptedObject.KeyID == statusKeyID && stateUseSeed == useSeed { state.ExpirationTimestamp = expirationTimestamp h.state.Store(&state) return nil } - transformer, resp, cacheKey, errGen := envelopekmsv2.GenerateTransformer(ctx, uid, h.service) + transformer, encObject, cacheKey, errGen := envelopekmsv2.GenerateTransformer(ctx, uid, h.service, useSeed) - if resp == nil { - resp = &kmsservice.EncryptResponse{} // avoid nil panics + if encObject == nil { + encObject = &kmstypes.EncryptedObject{} // avoid nil panics } // happy path, should be the common case // TODO maybe add success metrics? - if errGen == nil && resp.KeyID == statusKeyID { + if errGen == nil && encObject.KeyID == statusKeyID { h.state.Store(&envelopekmsv2.State{ Transformer: transformer, - EncryptedDEK: resp.Ciphertext, - KeyID: resp.KeyID, - Annotations: resp.Annotations, + EncryptedObject: *encObject, UID: uid, ExpirationTimestamp: expirationTimestamp, CacheKey: cacheKey, @@ -384,8 +391,9 @@ func (h *kmsv2PluginProbe) rotateDEKOnKeyIDChange(ctx context.Context, statusKey if klogV6.Enabled() { klogV6.InfoS("successfully rotated DEK", "uid", uid, - "newKeyIDHash", envelopekmsv2.GetHashIfNotEmpty(resp.KeyID), - "oldKeyIDHash", envelopekmsv2.GetHashIfNotEmpty(state.KeyID), + "useSeed", useSeed, + "newKeyIDHash", envelopekmsv2.GetHashIfNotEmpty(encObject.KeyID), + "oldKeyIDHash", envelopekmsv2.GetHashIfNotEmpty(state.EncryptedObject.KeyID), "expirationTimestamp", expirationTimestamp.Format(time.RFC3339), ) } @@ -393,8 +401,8 @@ func (h *kmsv2PluginProbe) rotateDEKOnKeyIDChange(ctx context.Context, statusKey } } - return fmt.Errorf("failed to rotate DEK uid=%q, errState=%v, errGen=%v, statusKeyIDHash=%q, encryptKeyIDHash=%q, stateKeyIDHash=%q, expirationTimestamp=%s", - uid, errState, errGen, envelopekmsv2.GetHashIfNotEmpty(statusKeyID), envelopekmsv2.GetHashIfNotEmpty(resp.KeyID), envelopekmsv2.GetHashIfNotEmpty(state.KeyID), state.ExpirationTimestamp.Format(time.RFC3339)) + return fmt.Errorf("failed to rotate DEK uid=%q, useSeed=%v, errState=%v, errGen=%v, statusKeyIDHash=%q, encryptKeyIDHash=%q, stateKeyIDHash=%q, expirationTimestamp=%s", + uid, useSeed, errState, errGen, envelopekmsv2.GetHashIfNotEmpty(statusKeyID), envelopekmsv2.GetHashIfNotEmpty(encObject.KeyID), envelopekmsv2.GetHashIfNotEmpty(state.EncryptedObject.KeyID), state.ExpirationTimestamp.Format(time.RFC3339)) } // getCurrentState returns the latest state from the last status and encrypt calls. @@ -407,12 +415,13 @@ func (h *kmsv2PluginProbe) getCurrentState() (envelopekmsv2.State, error) { return envelopekmsv2.State{}, fmt.Errorf("got unexpected nil transformer") } - if len(state.EncryptedDEK) == 0 { - return envelopekmsv2.State{}, fmt.Errorf("got unexpected empty EncryptedDEK") + encryptedObjectCopy := state.EncryptedObject + if len(encryptedObjectCopy.EncryptedData) != 0 { + return envelopekmsv2.State{}, fmt.Errorf("got unexpected non-empty EncryptedData") } - - if len(state.KeyID) == 0 { - return envelopekmsv2.State{}, fmt.Errorf("got unexpected empty keyID") + encryptedObjectCopy.EncryptedData = []byte{0} // any non-empty value to pass validation + if err := envelopekmsv2.ValidateEncryptedObject(&encryptedObjectCopy); err != nil { + return envelopekmsv2.State{}, fmt.Errorf("got invalid EncryptedObject: %w", err) } if state.ExpirationTimestamp.IsZero() { @@ -772,7 +781,7 @@ func primeAndProbeKMSv2(ctx context.Context, probe *kmsv2PluginProbe, kmsName st // make sure that the plugin's key ID is reasonably up-to-date // also, make sure that our DEK is up-to-date to with said key ID (if it expires the server will fail all writes) - // if this background loop ever stops running, the server will become unfunctional after kmsv2PluginWriteDEKMaxTTL + // if this background loop ever stops running, the server will become unfunctional after kmsv2PluginWriteDEKSourceMaxTTL go wait.PollUntilWithContext( ctx, kmsv2PluginHealthzPositiveInterval, diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go index 091eef85ab5f..ac023d55d8c1 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go @@ -85,7 +85,7 @@ var ( []string{"endpoint"}, ) storageSizeDescription = compbasemetrics.NewDesc("apiserver_storage_size_bytes", "Size of the storage database file physically allocated in bytes.", []string{"cluster"}, nil, compbasemetrics.ALPHA, "") - storageMonitor = &monitorCollector{} + storageMonitor = &monitorCollector{monitorGetter: func() ([]Monitor, error) { return nil, nil }} etcdEventsReceivedCounts = compbasemetrics.NewCounterVec( &compbasemetrics.CounterOpts{ Subsystem: "apiserver", diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes.go index b26c92e2d556..39469e9c6664 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes.go @@ -34,33 +34,11 @@ import ( "k8s.io/klog/v2" ) -type gcm struct { - aead cipher.AEAD - nonceFunc func([]byte) error -} - -// NewGCMTransformer takes the given block cipher and performs encryption and decryption on the given data. -// It implements AEAD encryption of the provided values given a cipher.Block algorithm. -// The authenticated data provided as part of the value.Context method must match when the same -// value is set to and loaded from storage. In order to ensure that values cannot be copied by -// an attacker from a location under their control, use characteristics of the storage location -// (such as the etcd key) as part of the authenticated data. -// -// Because this mode requires a generated IV and IV reuse is a known weakness of AES-GCM, keys -// must be rotated before a birthday attack becomes feasible. NIST SP 800-38D -// (http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf) recommends using the same -// key with random 96-bit nonces (the default nonce length) no more than 2^32 times, and -// therefore transformers using this implementation *must* ensure they allow for frequent key -// rotation. Future work should include investigation of AES-GCM-SIV as an alternative to -// random nonces. -func NewGCMTransformer(block cipher.Block) (value.Transformer, error) { - aead, err := newGCM(block) - if err != nil { - return nil, err - } +// commonSize is the length of various security sensitive byte slices such as encryption keys. +// Do not change this value. It would be a backward incompatible change. +const commonSize = 32 - return &gcm{aead: aead, nonceFunc: randomNonce}, nil -} +const keySizeCounterNonceGCM = commonSize // NewGCMTransformerWithUniqueKeyUnsafe is the same as NewGCMTransformer but is unsafe for general // use because it makes assumptions about the key underlying the block cipher. Specifically, @@ -78,7 +56,7 @@ func NewGCMTransformer(block cipher.Block) (value.Transformer, error) { // it can be passed to NewGCMTransformer(aes.NewCipher(key)) to construct a transformer capable // of decrypting values encrypted by this transformer (that transformer must not be used for encryption). func NewGCMTransformerWithUniqueKeyUnsafe() (value.Transformer, []byte, error) { - key, err := generateKey(32) + key, err := GenerateKey(keySizeCounterNonceGCM) if err != nil { return nil, nil, err } @@ -126,17 +104,6 @@ func newGCMTransformerWithUniqueKeyUnsafe(block cipher.Block, nonceGen *nonceGen return &gcm{aead: aead, nonceFunc: nonceFunc}, nil } -func newGCM(block cipher.Block) (cipher.AEAD, error) { - aead, err := cipher.NewGCM(block) - if err != nil { - return nil, err - } - if nonceSize := aead.NonceSize(); nonceSize != 12 { // all data in etcd will be broken if this ever changes - return nil, fmt.Errorf("crypto/cipher.NewGCM returned unexpected nonce size: %d", nonceSize) - } - return aead, nil -} - func randomNonce(b []byte) error { _, err := rand.Read(b) return err @@ -164,8 +131,8 @@ func die(msg string) { klog.FatalDepth(1, msg) } -// generateKey generates a random key using system randomness. -func generateKey(length int) (key []byte, err error) { +// GenerateKey generates a random key using system randomness. +func GenerateKey(length int) (key []byte, err error) { defer func(start time.Time) { value.RecordDataKeyGeneration(start, err) }(time.Now()) @@ -177,6 +144,45 @@ func generateKey(length int) (key []byte, err error) { return key, nil } +// NewGCMTransformer takes the given block cipher and performs encryption and decryption on the given data. +// It implements AEAD encryption of the provided values given a cipher.Block algorithm. +// The authenticated data provided as part of the value.Context method must match when the same +// value is set to and loaded from storage. In order to ensure that values cannot be copied by +// an attacker from a location under their control, use characteristics of the storage location +// (such as the etcd key) as part of the authenticated data. +// +// Because this mode requires a generated IV and IV reuse is a known weakness of AES-GCM, keys +// must be rotated before a birthday attack becomes feasible. NIST SP 800-38D +// (http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf) recommends using the same +// key with random 96-bit nonces (the default nonce length) no more than 2^32 times, and +// therefore transformers using this implementation *must* ensure they allow for frequent key +// rotation. Future work should include investigation of AES-GCM-SIV as an alternative to +// random nonces. +func NewGCMTransformer(block cipher.Block) (value.Transformer, error) { + aead, err := newGCM(block) + if err != nil { + return nil, err + } + + return &gcm{aead: aead, nonceFunc: randomNonce}, nil +} + +func newGCM(block cipher.Block) (cipher.AEAD, error) { + aead, err := cipher.NewGCM(block) + if err != nil { + return nil, err + } + if nonceSize := aead.NonceSize(); nonceSize != 12 { // all data in etcd will be broken if this ever changes + return nil, fmt.Errorf("crypto/cipher.NewGCM returned unexpected nonce size: %d", nonceSize) + } + return aead, nil +} + +type gcm struct { + aead cipher.AEAD + nonceFunc func([]byte) error +} + func (t *gcm) TransformFromStorage(ctx context.Context, data []byte, dataCtx value.Context) ([]byte, bool, error) { nonceSize := t.aead.NonceSize() if len(data) < nonceSize { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_extended_nonce.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_extended_nonce.go new file mode 100644 index 000000000000..cf8f39305dc4 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_extended_nonce.go @@ -0,0 +1,186 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package aes + +import ( + "bytes" + "context" + "crypto/aes" + "crypto/sha256" + "errors" + "fmt" + "io" + "time" + + "golang.org/x/crypto/hkdf" + + "k8s.io/apiserver/pkg/storage/value" + "k8s.io/utils/clock" +) + +const ( + // cacheTTL is the TTL of KDF cache entries. We assume that the value.Context.AuthenticatedData + // for every call is the etcd storage path of the associated resource, and use that as the primary + // cache key (with a secondary check that confirms that the info matches). Thus if a client + // is constantly creating resources with new names (and thus new paths), they will keep adding new + // entries to the cache for up to this TTL before the GC logic starts deleting old entries. Each + // entry is ~300 bytes in size, so even a malicious client will be bounded in the overall memory + // it can consume. + cacheTTL = 10 * time.Minute + + derivedKeySizeExtendedNonceGCM = commonSize + infoSizeExtendedNonceGCM + MinSeedSizeExtendedNonceGCM +) + +// NewHKDFExtendedNonceGCMTransformer is the same as NewGCMTransformer but trades storage, +// memory and CPU to work around the limitations of AES-GCM's 12 byte nonce size. The input seed +// is assumed to be a cryptographically strong slice of MinSeedSizeExtendedNonceGCM+ random bytes. +// Unlike NewGCMTransformer, this function is immune to the birthday attack because a new key is generated +// per encryption via a key derivation function: KDF(seed, random_bytes) -> key. The derived key is +// only used once as an AES-GCM key with a random 12 byte nonce. This avoids any concerns around +// cryptographic wear out (by either number of encryptions or the amount of data being encrypted). +// Speaking on the cryptographic safety, the limit on the number of operations that can be preformed +// with a single seed with derived keys and randomly generated nonces is not practically reachable. +// Thus, the scheme does not impose any specific requirements on the seed rotation schedule. +// Reusing the same seed is safe to do over time and across process restarts. Whenever a new +// seed is needed, the caller should generate it via GenerateKey(MinSeedSizeExtendedNonceGCM). +// In regard to KMSv2, organization standards or compliance policies around rotation may require +// that the seed be rotated at some interval. This can be implemented externally by rotating +// the key encryption key via a key ID change. +func NewHKDFExtendedNonceGCMTransformer(seed []byte) (value.Transformer, error) { + if seedLen := len(seed); seedLen < MinSeedSizeExtendedNonceGCM { + return nil, fmt.Errorf("invalid seed length %d used for key generation", seedLen) + } + return &extendedNonceGCM{ + seed: seed, + cache: newSimpleCache(clock.RealClock{}, cacheTTL), + }, nil +} + +type extendedNonceGCM struct { + seed []byte + cache *simpleCache +} + +func (e *extendedNonceGCM) TransformFromStorage(ctx context.Context, data []byte, dataCtx value.Context) ([]byte, bool, error) { + if len(data) < infoSizeExtendedNonceGCM { + return nil, false, errors.New("the stored data was shorter than the required size") + } + + info := data[:infoSizeExtendedNonceGCM] + + transformer, err := e.derivedKeyTransformer(info, dataCtx, false) + if err != nil { + return nil, false, fmt.Errorf("failed to derive read key from KDF: %w", err) + } + + return transformer.TransformFromStorage(ctx, data, dataCtx) +} + +func (e *extendedNonceGCM) TransformToStorage(ctx context.Context, data []byte, dataCtx value.Context) ([]byte, error) { + info := make([]byte, infoSizeExtendedNonceGCM) + if err := randomNonce(info); err != nil { + return nil, fmt.Errorf("failed to generate info for KDF: %w", err) + } + + transformer, err := e.derivedKeyTransformer(info, dataCtx, true) + if err != nil { + return nil, fmt.Errorf("failed to derive write key from KDF: %w", err) + } + + return transformer.TransformToStorage(ctx, data, dataCtx) +} + +func (e *extendedNonceGCM) derivedKeyTransformer(info []byte, dataCtx value.Context, write bool) (value.Transformer, error) { + if !write { // no need to check cache on write since we always generate a new transformer + if transformer := e.cache.get(info, dataCtx); transformer != nil { + return transformer, nil + } + + // on read, this is a subslice of a much larger slice and we do not want to hold onto that larger slice + info = bytes.Clone(info) + } + + key, err := e.sha256KDFExpandOnly(info) + if err != nil { + return nil, fmt.Errorf("failed to KDF expand seed with info: %w", err) + } + + transformer, err := newGCMTransformerWithInfo(key, info) + if err != nil { + return nil, fmt.Errorf("failed to build transformer with KDF derived key: %w", err) + } + + e.cache.set(dataCtx, transformer) + + return transformer, nil +} + +func (e *extendedNonceGCM) sha256KDFExpandOnly(info []byte) ([]byte, error) { + kdf := hkdf.Expand(sha256.New, e.seed, info) + + derivedKey := make([]byte, derivedKeySizeExtendedNonceGCM) + if _, err := io.ReadFull(kdf, derivedKey); err != nil { + return nil, fmt.Errorf("failed to read a derived key from KDF: %w", err) + } + + return derivedKey, nil +} + +func newGCMTransformerWithInfo(key, info []byte) (*transformerWithInfo, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + transformer, err := NewGCMTransformer(block) + if err != nil { + return nil, err + } + + return &transformerWithInfo{transformer: transformer, info: info}, nil +} + +type transformerWithInfo struct { + transformer value.Transformer + // info are extra opaque bytes prepended to the writes from transformer and stripped from reads. + // currently info is used to generate a key via KDF(seed, info) -> key + // and transformer is the output of NewGCMTransformer(aes.NewCipher(key)) + info []byte +} + +func (t *transformerWithInfo) TransformFromStorage(ctx context.Context, data []byte, dataCtx value.Context) ([]byte, bool, error) { + if !bytes.HasPrefix(data, t.info) { + return nil, false, errors.New("the stored data is missing the required info prefix") + } + + return t.transformer.TransformFromStorage(ctx, data[len(t.info):], dataCtx) +} + +func (t *transformerWithInfo) TransformToStorage(ctx context.Context, data []byte, dataCtx value.Context) ([]byte, error) { + out, err := t.transformer.TransformToStorage(ctx, data, dataCtx) + if err != nil { + return nil, err + } + + outWithInfo := make([]byte, 0, len(out)+len(t.info)) + outWithInfo = append(outWithInfo, t.info...) + outWithInfo = append(outWithInfo, out...) + + return outWithInfo, nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/cache.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/cache.go new file mode 100644 index 000000000000..c2551a2fbf5e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/aes/cache.go @@ -0,0 +1,91 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package aes + +import ( + "bytes" + "time" + "unsafe" + + utilcache "k8s.io/apimachinery/pkg/util/cache" + "k8s.io/apiserver/pkg/storage/value" + "k8s.io/utils/clock" +) + +type simpleCache struct { + cache *utilcache.Expiring + ttl time.Duration +} + +func newSimpleCache(clock clock.Clock, ttl time.Duration) *simpleCache { + cache := utilcache.NewExpiringWithClock(clock) + // "Stale" entries are always valid for us because the TTL is just used to prevent + // unbounded growth on the cache - for a given info the transformer is always the same. + // The key always corresponds to the exact same value, with the caveat that + // since we use the value.Context.AuthenticatedData to overwrite old keys, + // we always have to check that the info matches (to validate the transformer is correct). + cache.AllowExpiredGet = true + return &simpleCache{ + cache: cache, + ttl: ttl, + } +} + +// given a key, return the transformer, or nil if it does not exist in the cache +func (c *simpleCache) get(info []byte, dataCtx value.Context) *transformerWithInfo { + val, ok := c.cache.Get(keyFunc(dataCtx)) + if !ok { + return nil + } + + transformer := val.(*transformerWithInfo) + + if !bytes.Equal(transformer.info, info) { + return nil + } + + return transformer +} + +// set caches the record for the key +func (c *simpleCache) set(dataCtx value.Context, transformer *transformerWithInfo) { + if dataCtx == nil || len(dataCtx.AuthenticatedData()) == 0 { + panic("authenticated data must not be empty") + } + if transformer == nil { + panic("transformer must not be nil") + } + if len(transformer.info) == 0 { + panic("info must not be empty") + } + c.cache.Set(keyFunc(dataCtx), transformer, c.ttl) +} + +func keyFunc(dataCtx value.Context) string { + return toString(dataCtx.AuthenticatedData()) +} + +// toString performs unholy acts to avoid allocations +func toString(b []byte) string { + // unsafe.SliceData relies on cap whereas we want to rely on len + if len(b) == 0 { + return "" + } + // Copied from go 1.20.1 strings.Builder.String + // https://github.com/golang/go/blob/202a1a57064127c3f19d96df57b9f9586145e21c/src/strings/builder.go#L48 + return unsafe.String(unsafe.SliceData(b), len(b)) +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go index bd78e7e0b9c4..45d5db58b751 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go @@ -20,6 +20,7 @@ package kmsv2 import ( "context" "crypto/aes" + "crypto/cipher" "crypto/sha256" "fmt" "sort" @@ -43,6 +44,8 @@ import ( "k8s.io/utils/clock" ) +// TODO integration test with old AES GCM data recorded and new KDF data recorded + func init() { value.RegisterMetrics() metrics.RegisterMetrics() @@ -55,22 +58,22 @@ const ( annotationsMaxSize = 32 * 1024 // 32 kB // KeyIDMaxSize is the maximum size of the keyID. KeyIDMaxSize = 1 * 1024 // 1 kB - // encryptedDEKMaxSize is the maximum size of the encrypted DEK. - encryptedDEKMaxSize = 1 * 1024 // 1 kB + // encryptedDEKSourceMaxSize is the maximum size of the encrypted DEK source. + encryptedDEKSourceMaxSize = 1 * 1024 // 1 kB // cacheTTL is the default time-to-live for the cache entry. // this allows the cache to grow to an infinite size for up to a day. - // this is meant as a temporary solution until the cache is re-written to not have a TTL. // there is unlikely to be any meaningful memory impact on the server - // because the cache will likely never have more than a few thousand entries - // and each entry is roughly ~200 bytes in size. with DEK reuse - // and no storage migration, the number of entries in this cache + // because the cache will likely never have more than a few thousand entries. + // each entry can be large due to an internal cache that maps the DEK seed to individual + // DEK entries, but that cache has an aggressive TTL to keep the size under control. + // with DEK/seed reuse and no storage migration, the number of entries in this cache // would be approximated by unique key IDs used by the KMS plugin // combined with the number of server restarts. If storage migration // is performed after key ID changes, and the number of restarts // is limited, this cache size may be as small as the number of API // servers in use (once old entries expire out from the TTL). cacheTTL = 24 * time.Hour - // error code + // key ID related error codes for metrics errKeyIDOKCode ErrCodeKeyID = "ok" errKeyIDEmptyCode ErrCodeKeyID = "empty" errKeyIDTooLongCode ErrCodeKeyID = "too_long" @@ -83,23 +86,22 @@ type StateFunc func() (State, error) type ErrCodeKeyID string type State struct { - Transformer value.Transformer - EncryptedDEK []byte - KeyID string - Annotations map[string][]byte + Transformer value.Transformer + + EncryptedObject kmstypes.EncryptedObject UID string ExpirationTimestamp time.Time - // CacheKey is the key used to cache the DEK in transformer.cache. + // CacheKey is the key used to cache the DEK/seed in envelopeTransformer.cache. CacheKey []byte } func (s *State) ValidateEncryptCapability() error { if now := NowFunc(); now.After(s.ExpirationTimestamp) { - return fmt.Errorf("EDEK with keyID hash %q expired at %s (current time is %s)", - GetHashIfNotEmpty(s.KeyID), s.ExpirationTimestamp.Format(time.RFC3339), now.Format(time.RFC3339)) + return fmt.Errorf("encryptedDEKSource with keyID hash %q expired at %s (current time is %s)", + GetHashIfNotEmpty(s.EncryptedObject.KeyID), s.ExpirationTimestamp.Format(time.RFC3339), now.Format(time.RFC3339)) } return nil } @@ -137,6 +139,8 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b return nil, false, err } + useSeed := encryptedObject.EncryptedDEKSourceType == kmstypes.EncryptedDEKSourceType_HKDF_SHA256_XNONCE_AES_GCM_SEED + // TODO: consider marking state.EncryptedDEK != encryptedObject.EncryptedDEK as a stale read to support DEK defragmentation // at a minimum we should have a metric that helps the user understand if DEK fragmentation is high state, err := t.stateFunc() // no need to call state.ValidateEncryptCapability on reads @@ -144,7 +148,7 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b return nil, false, err } - encryptedObjectCacheKey, err := generateCacheKey(encryptedObject.EncryptedDEK, encryptedObject.KeyID, encryptedObject.Annotations) + encryptedObjectCacheKey, err := generateCacheKey(encryptedObject.EncryptedDEKSourceType, encryptedObject.EncryptedDEKSource, encryptedObject.KeyID, encryptedObject.Annotations) if err != nil { return nil, false, err } @@ -163,7 +167,7 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b "verb", requestInfo.Verb, "namespace", requestInfo.Namespace, "name", requestInfo.Name) key, err := t.envelopeService.Decrypt(ctx, uid, &kmsservice.DecryptRequest{ - Ciphertext: encryptedObject.EncryptedDEK, + Ciphertext: encryptedObject.EncryptedDEKSource, KeyID: encryptedObject.KeyID, Annotations: encryptedObject.Annotations, }) @@ -171,7 +175,7 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b return nil, false, fmt.Errorf("failed to decrypt DEK, error: %w", err) } - transformer, err = t.addTransformerForDecryption(encryptedObjectCacheKey, key) + transformer, err = t.addTransformerForDecryption(encryptedObjectCacheKey, key, useSeed) if err != nil { return nil, false, err } @@ -184,8 +188,11 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b } // data is considered stale if the key ID does not match our current write transformer - return out, stale || encryptedObject.KeyID != state.KeyID, nil - + return out, + stale || + encryptedObject.KeyID != state.EncryptedObject.KeyID || + encryptedObject.EncryptedDEKSourceType != state.EncryptedObject.EncryptedDEKSourceType, + nil } // TransformToStorage encrypts data to be written to disk using envelope encryption. @@ -201,7 +208,7 @@ func (t *envelopeTransformer) TransformToStorage(ctx context.Context, data []byt // this prevents a cache miss every time the DEK rotates // this has the side benefit of causing the cache to perform a GC // TODO see if we can do this inside the stateFunc control loop - // TODO(aramase): Add metrics for cache fill percentage with custom cache implementation. + // TODO(aramase): Add metrics for cache size. t.cache.set(state.CacheKey, state.Transformer) requestInfo := getRequestInfoFromContext(ctx) @@ -214,39 +221,43 @@ func (t *envelopeTransformer) TransformToStorage(ctx context.Context, data []byt return nil, err } - metrics.RecordKeyID(metrics.ToStorageLabel, t.providerName, state.KeyID) + metrics.RecordKeyID(metrics.ToStorageLabel, t.providerName, state.EncryptedObject.KeyID) - encObject := &kmstypes.EncryptedObject{ - KeyID: state.KeyID, - EncryptedDEK: state.EncryptedDEK, - EncryptedData: result, - Annotations: state.Annotations, - } + encObjectCopy := state.EncryptedObject + encObjectCopy.EncryptedData = result // Serialize the EncryptedObject to a byte array. - return t.doEncode(encObject) + return t.doEncode(&encObjectCopy) } // addTransformerForDecryption inserts a new transformer to the Envelope cache of DEKs for future reads. -func (t *envelopeTransformer) addTransformerForDecryption(cacheKey []byte, key []byte) (value.Read, error) { - block, err := aes.NewCipher(key) - if err != nil { - return nil, err +func (t *envelopeTransformer) addTransformerForDecryption(cacheKey []byte, key []byte, useSeed bool) (value.Read, error) { + var transformer value.Read + var err error + if useSeed { + // the input key is considered safe to use here because it is coming from the KMS plugin / etcd + transformer, err = aestransformer.NewHKDFExtendedNonceGCMTransformer(key) + } else { + var block cipher.Block + block, err = aes.NewCipher(key) + if err != nil { + return nil, err + } + // this is compatible with NewGCMTransformerWithUniqueKeyUnsafe for decryption + // it would use random nonces for encryption but we never do that + transformer, err = aestransformer.NewGCMTransformer(block) } - // this is compatible with NewGCMTransformerWithUniqueKeyUnsafe for decryption - // it would use random nonces for encryption but we never do that - transformer, err := aestransformer.NewGCMTransformer(block) if err != nil { return nil, err } - // TODO(aramase): Add metrics for cache fill percentage with custom cache implementation. + // TODO(aramase): Add metrics for cache size. t.cache.set(cacheKey, transformer) return transformer, nil } // doEncode encodes the EncryptedObject to a byte array. func (t *envelopeTransformer) doEncode(request *kmstypes.EncryptedObject) ([]byte, error) { - if err := validateEncryptedObject(request); err != nil { + if err := ValidateEncryptedObject(request); err != nil { return nil, err } return proto.Marshal(request) @@ -258,18 +269,31 @@ func (t *envelopeTransformer) doDecode(originalData []byte) (*kmstypes.Encrypted if err := proto.Unmarshal(originalData, o); err != nil { return nil, err } - // validate the EncryptedObject - if err := validateEncryptedObject(o); err != nil { + if err := ValidateEncryptedObject(o); err != nil { return nil, err } return o, nil } -// GenerateTransformer generates a new transformer and encrypts the DEK using the envelope service. -// It returns the transformer, the encrypted DEK, cache key and error. -func GenerateTransformer(ctx context.Context, uid string, envelopeService kmsservice.Service) (value.Transformer, *kmsservice.EncryptResponse, []byte, error) { - transformer, newKey, err := aestransformer.NewGCMTransformerWithUniqueKeyUnsafe() +// GenerateTransformer generates a new transformer and encrypts the DEK/seed using the envelope service. +// It returns the transformer, the encrypted DEK/seed, cache key and error. +func GenerateTransformer(ctx context.Context, uid string, envelopeService kmsservice.Service, useSeed bool) (value.Transformer, *kmstypes.EncryptedObject, []byte, error) { + newTransformerFunc := func() (value.Transformer, []byte, error) { + seed, err := aestransformer.GenerateKey(aestransformer.MinSeedSizeExtendedNonceGCM) + if err != nil { + return nil, nil, err + } + transformer, err := aestransformer.NewHKDFExtendedNonceGCMTransformer(seed) + if err != nil { + return nil, nil, err + } + return transformer, seed, nil + } + if !useSeed { + newTransformerFunc = aestransformer.NewGCMTransformerWithUniqueKeyUnsafe + } + transformer, newKey, err := newTransformerFunc() if err != nil { return nil, nil, nil, err } @@ -281,32 +305,48 @@ func GenerateTransformer(ctx context.Context, uid string, envelopeService kmsser return nil, nil, nil, fmt.Errorf("failed to encrypt DEK, error: %w", err) } - if err := validateEncryptedObject(&kmstypes.EncryptedObject{ - KeyID: resp.KeyID, - EncryptedDEK: resp.Ciphertext, - EncryptedData: []byte{0}, // any non-empty value to pass validation - Annotations: resp.Annotations, - }); err != nil { + o := &kmstypes.EncryptedObject{ + KeyID: resp.KeyID, + EncryptedDEKSource: resp.Ciphertext, + EncryptedData: []byte{0}, // any non-empty value to pass validation + Annotations: resp.Annotations, + } + + if useSeed { + o.EncryptedDEKSourceType = kmstypes.EncryptedDEKSourceType_HKDF_SHA256_XNONCE_AES_GCM_SEED + } else { + o.EncryptedDEKSourceType = kmstypes.EncryptedDEKSourceType_AES_GCM_KEY + } + + if err := ValidateEncryptedObject(o); err != nil { return nil, nil, nil, err } - cacheKey, err := generateCacheKey(resp.Ciphertext, resp.KeyID, resp.Annotations) + cacheKey, err := generateCacheKey(o.EncryptedDEKSourceType, resp.Ciphertext, resp.KeyID, resp.Annotations) if err != nil { return nil, nil, nil, err } - return transformer, resp, cacheKey, nil + o.EncryptedData = nil // make sure that later code that uses this encrypted object sets this field + + return transformer, o, cacheKey, nil } -func validateEncryptedObject(o *kmstypes.EncryptedObject) error { +func ValidateEncryptedObject(o *kmstypes.EncryptedObject) error { if o == nil { return fmt.Errorf("encrypted object is nil") } + switch t := o.EncryptedDEKSourceType; t { + case kmstypes.EncryptedDEKSourceType_AES_GCM_KEY: + case kmstypes.EncryptedDEKSourceType_HKDF_SHA256_XNONCE_AES_GCM_SEED: + default: + return fmt.Errorf("unknown encryptedDEKSourceType: %d", t) + } if len(o.EncryptedData) == 0 { return fmt.Errorf("encrypted data is empty") } - if err := validateEncryptedDEK(o.EncryptedDEK); err != nil { - return fmt.Errorf("failed to validate encrypted DEK: %w", err) + if err := validateEncryptedDEKSource(o.EncryptedDEKSource); err != nil { + return fmt.Errorf("failed to validate encrypted DEK source: %w", err) } if _, err := ValidateKeyID(o.KeyID); err != nil { return fmt.Errorf("failed to validate key id: %w", err) @@ -317,15 +357,15 @@ func validateEncryptedObject(o *kmstypes.EncryptedObject) error { return nil } -// validateEncryptedDEK tests the following: -// 1. The encrypted DEK is not empty. -// 2. The size of encrypted DEK is less than 1 kB. -func validateEncryptedDEK(encryptedDEK []byte) error { - if len(encryptedDEK) == 0 { - return fmt.Errorf("encrypted DEK is empty") +// validateEncryptedDEKSource tests the following: +// 1. The encrypted DEK source is not empty. +// 2. The size of encrypted DEK source is less than 1 kB. +func validateEncryptedDEKSource(encryptedDEKSource []byte) error { + if len(encryptedDEKSource) == 0 { + return fmt.Errorf("encrypted DEK source is empty") } - if len(encryptedDEK) > encryptedDEKMaxSize { - return fmt.Errorf("encrypted DEK is %d bytes, which exceeds the max size of %d", len(encryptedDEK), encryptedDEKMaxSize) + if len(encryptedDEKSource) > encryptedDEKSourceMaxSize { + return fmt.Errorf("encrypted DEK source is %d bytes, which exceeds the max size of %d", len(encryptedDEKSource), encryptedDEKSourceMaxSize) } return nil } @@ -370,17 +410,19 @@ func getRequestInfoFromContext(ctx context.Context) *genericapirequest.RequestIn // generateCacheKey returns a key for the cache. // The key is a concatenation of: -// 1. encryptedDEK +// 0. encryptedDEKSourceType +// 1. encryptedDEKSource // 2. keyID // 3. length of annotations // 4. annotations (sorted by key) - each annotation is a concatenation of: // a. annotation key // b. annotation value -func generateCacheKey(encryptedDEK []byte, keyID string, annotations map[string][]byte) ([]byte, error) { +func generateCacheKey(encryptedDEKSourceType kmstypes.EncryptedDEKSourceType, encryptedDEKSource []byte, keyID string, annotations map[string][]byte) ([]byte, error) { // TODO(aramase): use sync pool buffer to avoid allocations b := cryptobyte.NewBuilder(nil) + b.AddUint32(uint32(encryptedDEKSourceType)) b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { - b.AddBytes(encryptedDEK) + b.AddBytes(encryptedDEKSource) }) b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { b.AddBytes(toBytes(keyID)) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.pb.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.pb.go index c7bdd66f0f34..811c8f67d253 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.pb.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.pb.go @@ -36,19 +36,52 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type EncryptedDEKSourceType int32 + +const ( + // AES_GCM_KEY means that the plaintext of encryptedDEKSource is the DEK itself, with AES-GCM as the encryption algorithm. + EncryptedDEKSourceType_AES_GCM_KEY EncryptedDEKSourceType = 0 + // HKDF_SHA256_XNONCE_AES_GCM_SEED means that the plaintext of encryptedDEKSource is the pseudo random key + // (referred to as the seed throughout the code) that is fed into HKDF expand. SHA256 is the hash algorithm + // and first 32 bytes of encryptedData are the info param. The first 32 bytes from the HKDF stream are used + // as the DEK with AES-GCM as the encryption algorithm. + EncryptedDEKSourceType_HKDF_SHA256_XNONCE_AES_GCM_SEED EncryptedDEKSourceType = 1 +) + +var EncryptedDEKSourceType_name = map[int32]string{ + 0: "AES_GCM_KEY", + 1: "HKDF_SHA256_XNONCE_AES_GCM_SEED", +} + +var EncryptedDEKSourceType_value = map[string]int32{ + "AES_GCM_KEY": 0, + "HKDF_SHA256_XNONCE_AES_GCM_SEED": 1, +} + +func (x EncryptedDEKSourceType) String() string { + return proto.EnumName(EncryptedDEKSourceType_name, int32(x)) +} + +func (EncryptedDEKSourceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{0} +} + // EncryptedObject is the representation of data stored in etcd after envelope encryption. type EncryptedObject struct { // EncryptedData is the encrypted data. EncryptedData []byte `protobuf:"bytes,1,opt,name=encryptedData,proto3" json:"encryptedData,omitempty"` // KeyID is the KMS key ID used for encryption operations. KeyID string `protobuf:"bytes,2,opt,name=keyID,proto3" json:"keyID,omitempty"` - // EncryptedDEK is the encrypted DEK. - EncryptedDEK []byte `protobuf:"bytes,3,opt,name=encryptedDEK,proto3" json:"encryptedDEK,omitempty"` + // EncryptedDEKSource is the ciphertext of the source of the DEK used to encrypt the data stored in encryptedData. + // encryptedDEKSourceType defines the process of using the plaintext of this field to determine the aforementioned DEK. + EncryptedDEKSource []byte `protobuf:"bytes,3,opt,name=encryptedDEKSource,proto3" json:"encryptedDEKSource,omitempty"` // Annotations is additional metadata that was provided by the KMS plugin. - Annotations map[string][]byte `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Annotations map[string][]byte `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // encryptedDEKSourceType defines the process of using the plaintext of encryptedDEKSource to determine the DEK. + EncryptedDEKSourceType EncryptedDEKSourceType `protobuf:"varint,5,opt,name=encryptedDEKSourceType,proto3,enum=v2.EncryptedDEKSourceType" json:"encryptedDEKSourceType,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *EncryptedObject) Reset() { *m = EncryptedObject{} } @@ -89,9 +122,9 @@ func (m *EncryptedObject) GetKeyID() string { return "" } -func (m *EncryptedObject) GetEncryptedDEK() []byte { +func (m *EncryptedObject) GetEncryptedDEKSource() []byte { if m != nil { - return m.EncryptedDEK + return m.EncryptedDEKSource } return nil } @@ -103,7 +136,15 @@ func (m *EncryptedObject) GetAnnotations() map[string][]byte { return nil } +func (m *EncryptedObject) GetEncryptedDEKSourceType() EncryptedDEKSourceType { + if m != nil { + return m.EncryptedDEKSourceType + } + return EncryptedDEKSourceType_AES_GCM_KEY +} + func init() { + proto.RegisterEnum("v2.EncryptedDEKSourceType", EncryptedDEKSourceType_name, EncryptedDEKSourceType_value) proto.RegisterType((*EncryptedObject)(nil), "v2.EncryptedObject") proto.RegisterMapType((map[string][]byte)(nil), "v2.EncryptedObject.AnnotationsEntry") } @@ -111,21 +152,26 @@ func init() { func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 244 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0xb1, 0x4b, 0x03, 0x31, - 0x14, 0xc6, 0xc9, 0x9d, 0x0a, 0x97, 0x9e, 0x58, 0x82, 0xc3, 0xe1, 0x74, 0x94, 0x0e, 0x37, 0x25, - 0x10, 0x97, 0x22, 0x52, 0x50, 0x7a, 0x82, 0x38, 0x08, 0x19, 0xdd, 0xd2, 0xfa, 0x28, 0x67, 0x6a, - 0x12, 0x92, 0x18, 0xc8, 0x9f, 0xee, 0x26, 0x4d, 0x95, 0xda, 0xdb, 0xde, 0xf7, 0xf1, 0xfb, 0xe0, - 0xc7, 0xc3, 0x95, 0xb4, 0x03, 0xb5, 0xce, 0x04, 0x43, 0x8a, 0xc8, 0x67, 0xdf, 0x08, 0x5f, 0xf5, - 0x7a, 0xe3, 0x92, 0x0d, 0xf0, 0xfe, 0xba, 0xfe, 0x80, 0x4d, 0x20, 0x73, 0x7c, 0x09, 0x7f, 0xd5, - 0x4a, 0x06, 0xd9, 0xa0, 0x16, 0x75, 0xb5, 0x38, 0x2d, 0xc9, 0x35, 0x3e, 0x57, 0x90, 0x9e, 0x57, - 0x4d, 0xd1, 0xa2, 0xae, 0x12, 0x87, 0x40, 0x66, 0xb8, 0x3e, 0x62, 0xfd, 0x4b, 0x53, 0xe6, 0xe9, - 0x49, 0x47, 0x9e, 0xf0, 0x44, 0x6a, 0x6d, 0x82, 0x0c, 0x83, 0xd1, 0xbe, 0x39, 0x6b, 0xcb, 0x6e, - 0xc2, 0xe7, 0x34, 0x72, 0x3a, 0x32, 0xa1, 0x0f, 0x47, 0xac, 0xd7, 0xc1, 0x25, 0xf1, 0x7f, 0x78, - 0xb3, 0xc4, 0xd3, 0x31, 0x40, 0xa6, 0xb8, 0x54, 0x90, 0xb2, 0x71, 0x25, 0xf6, 0xe7, 0xde, 0x33, - 0xca, 0xdd, 0x17, 0x64, 0xcf, 0x5a, 0x1c, 0xc2, 0x5d, 0xb1, 0x40, 0x8f, 0xcb, 0xb7, 0x7b, 0xb5, - 0xf0, 0x74, 0x30, 0x4c, 0xda, 0xc1, 0x83, 0x8b, 0xe0, 0x98, 0x55, 0x5b, 0xe6, 0x83, 0x71, 0x72, - 0x0b, 0x2c, 0x93, 0xec, 0x57, 0x9d, 0x81, 0x8e, 0xb0, 0x33, 0x16, 0x98, 0xfa, 0xf4, 0x91, 0xb3, - 0xc8, 0xd7, 0x17, 0xf9, 0x8d, 0xb7, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, 0x80, 0x43, 0x93, - 0x53, 0x01, 0x00, 0x00, + // 329 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xe1, 0x4b, 0xc2, 0x40, + 0x18, 0xc6, 0xdb, 0xcc, 0xc0, 0xd3, 0x72, 0x1c, 0x21, 0xc3, 0x2f, 0x8d, 0xf2, 0xc3, 0xe8, 0xc3, + 0x0e, 0x16, 0x85, 0x44, 0x08, 0xe6, 0xce, 0x0c, 0x49, 0x61, 0xeb, 0x43, 0xf5, 0x65, 0x9c, 0xf6, + 0x22, 0x6b, 0xb6, 0x1b, 0xb7, 0xf3, 0x60, 0x7f, 0x6a, 0xff, 0x4d, 0x38, 0x13, 0xd3, 0xec, 0xdb, + 0xbd, 0xef, 0xfd, 0xde, 0xe7, 0xb9, 0x7b, 0x5e, 0x54, 0x61, 0x69, 0xe4, 0xa4, 0x82, 0x4b, 0x8e, + 0x75, 0xe5, 0x9e, 0x7f, 0xe9, 0xa8, 0x4e, 0x93, 0xa9, 0xc8, 0x53, 0x09, 0xef, 0xe3, 0xc9, 0x07, + 0x4c, 0x25, 0x6e, 0xa1, 0x63, 0x58, 0xb7, 0x3c, 0x26, 0x99, 0xa9, 0x59, 0x9a, 0x5d, 0xf3, 0xb7, + 0x9b, 0xf8, 0x14, 0x95, 0x63, 0xc8, 0x1f, 0x3d, 0x53, 0xb7, 0x34, 0xbb, 0xe2, 0xaf, 0x0a, 0xec, + 0x20, 0xbc, 0xc1, 0xe8, 0x30, 0xe0, 0x0b, 0x31, 0x05, 0xb3, 0x54, 0x08, 0xec, 0xb9, 0xc1, 0x7d, + 0x54, 0x65, 0x49, 0xc2, 0x25, 0x93, 0x11, 0x4f, 0x32, 0xf3, 0xd0, 0x2a, 0xd9, 0x55, 0xb7, 0xe5, + 0x28, 0xd7, 0xd9, 0x79, 0x95, 0xd3, 0xdd, 0x60, 0x34, 0x91, 0x22, 0xf7, 0x7f, 0x0f, 0x62, 0x1f, + 0x35, 0xfe, 0xaa, 0x3f, 0xe7, 0x29, 0x98, 0x65, 0x4b, 0xb3, 0x4f, 0xdc, 0xe6, 0x96, 0xe4, 0x16, + 0xe1, 0xff, 0x33, 0xd9, 0xec, 0x20, 0x63, 0xd7, 0x14, 0x1b, 0xa8, 0x14, 0x43, 0x5e, 0x24, 0x52, + 0xf1, 0x97, 0xc7, 0x65, 0x0e, 0x8a, 0xcd, 0x17, 0x50, 0xe4, 0x50, 0xf3, 0x57, 0xc5, 0xad, 0xde, + 0xd6, 0x2e, 0x47, 0xa8, 0xb1, 0xdf, 0x11, 0xd7, 0x51, 0xb5, 0x4b, 0x83, 0xf0, 0xa1, 0xf7, 0x14, + 0x0e, 0xe9, 0xab, 0x71, 0x80, 0x2f, 0xd0, 0xd9, 0x60, 0xe8, 0xf5, 0xc3, 0x60, 0xd0, 0x75, 0xaf, + 0x6f, 0xc2, 0x97, 0xd1, 0x78, 0xd4, 0xa3, 0xe1, 0x9a, 0x09, 0x28, 0xf5, 0x0c, 0xed, 0xbe, 0xf3, + 0x76, 0x17, 0xb7, 0x33, 0x27, 0xe2, 0x84, 0xa5, 0x51, 0x06, 0x42, 0x81, 0x20, 0x69, 0x3c, 0x23, + 0x99, 0xe4, 0x82, 0xcd, 0x80, 0x14, 0xce, 0xe4, 0xe7, 0x33, 0x04, 0x12, 0x05, 0x73, 0x9e, 0x02, + 0x89, 0x3f, 0x33, 0xe5, 0x12, 0xe5, 0x4e, 0x8e, 0x8a, 0xb5, 0x5f, 0x7d, 0x07, 0x00, 0x00, 0xff, + 0xff, 0xcc, 0x0f, 0x2b, 0x2e, 0x03, 0x02, 0x00, 0x00, } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.proto b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.proto index 9ca2ccf96f9d..ec1eb2680c85 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.proto +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2/api.proto @@ -28,9 +28,24 @@ message EncryptedObject { // KeyID is the KMS key ID used for encryption operations. string keyID = 2; - // EncryptedDEK is the encrypted DEK. - bytes encryptedDEK = 3; + // EncryptedDEKSource is the ciphertext of the source of the DEK used to encrypt the data stored in encryptedData. + // encryptedDEKSourceType defines the process of using the plaintext of this field to determine the aforementioned DEK. + bytes encryptedDEKSource = 3; // Annotations is additional metadata that was provided by the KMS plugin. map annotations = 4; + + // encryptedDEKSourceType defines the process of using the plaintext of encryptedDEKSource to determine the DEK. + EncryptedDEKSourceType encryptedDEKSourceType = 5; +} + +enum EncryptedDEKSourceType { + // AES_GCM_KEY means that the plaintext of encryptedDEKSource is the DEK itself, with AES-GCM as the encryption algorithm. + AES_GCM_KEY = 0; + + // HKDF_SHA256_XNONCE_AES_GCM_SEED means that the plaintext of encryptedDEKSource is the pseudo random key + // (referred to as the seed throughout the code) that is fed into HKDF expand. SHA256 is the hash algorithm + // and first 32 bytes of encryptedData are the info param. The first 32 bytes from the HKDF stream are used + // as the DEK with AES-GCM as the encryption algorithm. + HKDF_SHA256_XNONCE_AES_GCM_SEED = 1; } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/auditannotation.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/auditannotation.go new file mode 100644 index 000000000000..e92fba0ddbc0 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/auditannotation.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// AuditAnnotationApplyConfiguration represents an declarative configuration of the AuditAnnotation type for use +// with apply. +type AuditAnnotationApplyConfiguration struct { + Key *string `json:"key,omitempty"` + ValueExpression *string `json:"valueExpression,omitempty"` +} + +// AuditAnnotationApplyConfiguration constructs an declarative configuration of the AuditAnnotation type for use with +// apply. +func AuditAnnotation() *AuditAnnotationApplyConfiguration { + return &AuditAnnotationApplyConfiguration{} +} + +// WithKey sets the Key field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Key field is set to the value of the last call. +func (b *AuditAnnotationApplyConfiguration) WithKey(value string) *AuditAnnotationApplyConfiguration { + b.Key = &value + return b +} + +// WithValueExpression sets the ValueExpression field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ValueExpression field is set to the value of the last call. +func (b *AuditAnnotationApplyConfiguration) WithValueExpression(value string) *AuditAnnotationApplyConfiguration { + b.ValueExpression = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/expressionwarning.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/expressionwarning.go new file mode 100644 index 000000000000..059c1b94ba2e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/expressionwarning.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// ExpressionWarningApplyConfiguration represents an declarative configuration of the ExpressionWarning type for use +// with apply. +type ExpressionWarningApplyConfiguration struct { + FieldRef *string `json:"fieldRef,omitempty"` + Warning *string `json:"warning,omitempty"` +} + +// ExpressionWarningApplyConfiguration constructs an declarative configuration of the ExpressionWarning type for use with +// apply. +func ExpressionWarning() *ExpressionWarningApplyConfiguration { + return &ExpressionWarningApplyConfiguration{} +} + +// WithFieldRef sets the FieldRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FieldRef field is set to the value of the last call. +func (b *ExpressionWarningApplyConfiguration) WithFieldRef(value string) *ExpressionWarningApplyConfiguration { + b.FieldRef = &value + return b +} + +// WithWarning sets the Warning field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Warning field is set to the value of the last call. +func (b *ExpressionWarningApplyConfiguration) WithWarning(value string) *ExpressionWarningApplyConfiguration { + b.Warning = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/matchresources.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/matchresources.go new file mode 100644 index 000000000000..25d4139db6a2 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/matchresources.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// MatchResourcesApplyConfiguration represents an declarative configuration of the MatchResources type for use +// with apply. +type MatchResourcesApplyConfiguration struct { + NamespaceSelector *v1.LabelSelectorApplyConfiguration `json:"namespaceSelector,omitempty"` + ObjectSelector *v1.LabelSelectorApplyConfiguration `json:"objectSelector,omitempty"` + ResourceRules []NamedRuleWithOperationsApplyConfiguration `json:"resourceRules,omitempty"` + ExcludeResourceRules []NamedRuleWithOperationsApplyConfiguration `json:"excludeResourceRules,omitempty"` + MatchPolicy *admissionregistrationv1beta1.MatchPolicyType `json:"matchPolicy,omitempty"` +} + +// MatchResourcesApplyConfiguration constructs an declarative configuration of the MatchResources type for use with +// apply. +func MatchResources() *MatchResourcesApplyConfiguration { + return &MatchResourcesApplyConfiguration{} +} + +// WithNamespaceSelector sets the NamespaceSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NamespaceSelector field is set to the value of the last call. +func (b *MatchResourcesApplyConfiguration) WithNamespaceSelector(value *v1.LabelSelectorApplyConfiguration) *MatchResourcesApplyConfiguration { + b.NamespaceSelector = value + return b +} + +// WithObjectSelector sets the ObjectSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObjectSelector field is set to the value of the last call. +func (b *MatchResourcesApplyConfiguration) WithObjectSelector(value *v1.LabelSelectorApplyConfiguration) *MatchResourcesApplyConfiguration { + b.ObjectSelector = value + return b +} + +// WithResourceRules adds the given value to the ResourceRules field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ResourceRules field. +func (b *MatchResourcesApplyConfiguration) WithResourceRules(values ...*NamedRuleWithOperationsApplyConfiguration) *MatchResourcesApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithResourceRules") + } + b.ResourceRules = append(b.ResourceRules, *values[i]) + } + return b +} + +// WithExcludeResourceRules adds the given value to the ExcludeResourceRules field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ExcludeResourceRules field. +func (b *MatchResourcesApplyConfiguration) WithExcludeResourceRules(values ...*NamedRuleWithOperationsApplyConfiguration) *MatchResourcesApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithExcludeResourceRules") + } + b.ExcludeResourceRules = append(b.ExcludeResourceRules, *values[i]) + } + return b +} + +// WithMatchPolicy sets the MatchPolicy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MatchPolicy field is set to the value of the last call. +func (b *MatchResourcesApplyConfiguration) WithMatchPolicy(value admissionregistrationv1beta1.MatchPolicyType) *MatchResourcesApplyConfiguration { + b.MatchPolicy = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/namedrulewithoperations.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/namedrulewithoperations.go new file mode 100644 index 000000000000..fa346c4a57b0 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/namedrulewithoperations.go @@ -0,0 +1,95 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + v1 "k8s.io/client-go/applyconfigurations/admissionregistration/v1" +) + +// NamedRuleWithOperationsApplyConfiguration represents an declarative configuration of the NamedRuleWithOperations type for use +// with apply. +type NamedRuleWithOperationsApplyConfiguration struct { + ResourceNames []string `json:"resourceNames,omitempty"` + v1.RuleWithOperationsApplyConfiguration `json:",inline"` +} + +// NamedRuleWithOperationsApplyConfiguration constructs an declarative configuration of the NamedRuleWithOperations type for use with +// apply. +func NamedRuleWithOperations() *NamedRuleWithOperationsApplyConfiguration { + return &NamedRuleWithOperationsApplyConfiguration{} +} + +// WithResourceNames adds the given value to the ResourceNames field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ResourceNames field. +func (b *NamedRuleWithOperationsApplyConfiguration) WithResourceNames(values ...string) *NamedRuleWithOperationsApplyConfiguration { + for i := range values { + b.ResourceNames = append(b.ResourceNames, values[i]) + } + return b +} + +// WithOperations adds the given value to the Operations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Operations field. +func (b *NamedRuleWithOperationsApplyConfiguration) WithOperations(values ...admissionregistrationv1.OperationType) *NamedRuleWithOperationsApplyConfiguration { + for i := range values { + b.Operations = append(b.Operations, values[i]) + } + return b +} + +// WithAPIGroups adds the given value to the APIGroups field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the APIGroups field. +func (b *NamedRuleWithOperationsApplyConfiguration) WithAPIGroups(values ...string) *NamedRuleWithOperationsApplyConfiguration { + for i := range values { + b.APIGroups = append(b.APIGroups, values[i]) + } + return b +} + +// WithAPIVersions adds the given value to the APIVersions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the APIVersions field. +func (b *NamedRuleWithOperationsApplyConfiguration) WithAPIVersions(values ...string) *NamedRuleWithOperationsApplyConfiguration { + for i := range values { + b.APIVersions = append(b.APIVersions, values[i]) + } + return b +} + +// WithResources adds the given value to the Resources field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Resources field. +func (b *NamedRuleWithOperationsApplyConfiguration) WithResources(values ...string) *NamedRuleWithOperationsApplyConfiguration { + for i := range values { + b.Resources = append(b.Resources, values[i]) + } + return b +} + +// WithScope sets the Scope field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Scope field is set to the value of the last call. +func (b *NamedRuleWithOperationsApplyConfiguration) WithScope(value admissionregistrationv1.ScopeType) *NamedRuleWithOperationsApplyConfiguration { + b.Scope = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramkind.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramkind.go new file mode 100644 index 000000000000..6050e6025126 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramkind.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// ParamKindApplyConfiguration represents an declarative configuration of the ParamKind type for use +// with apply. +type ParamKindApplyConfiguration struct { + APIVersion *string `json:"apiVersion,omitempty"` + Kind *string `json:"kind,omitempty"` +} + +// ParamKindApplyConfiguration constructs an declarative configuration of the ParamKind type for use with +// apply. +func ParamKind() *ParamKindApplyConfiguration { + return &ParamKindApplyConfiguration{} +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ParamKindApplyConfiguration) WithAPIVersion(value string) *ParamKindApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ParamKindApplyConfiguration) WithKind(value string) *ParamKindApplyConfiguration { + b.Kind = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramref.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramref.go new file mode 100644 index 000000000000..2be98dbc5251 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/paramref.go @@ -0,0 +1,71 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ParamRefApplyConfiguration represents an declarative configuration of the ParamRef type for use +// with apply. +type ParamRefApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Namespace *string `json:"namespace,omitempty"` + Selector *v1.LabelSelectorApplyConfiguration `json:"selector,omitempty"` + ParameterNotFoundAction *v1beta1.ParameterNotFoundActionType `json:"parameterNotFoundAction,omitempty"` +} + +// ParamRefApplyConfiguration constructs an declarative configuration of the ParamRef type for use with +// apply. +func ParamRef() *ParamRefApplyConfiguration { + return &ParamRefApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ParamRefApplyConfiguration) WithName(value string) *ParamRefApplyConfiguration { + b.Name = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ParamRefApplyConfiguration) WithNamespace(value string) *ParamRefApplyConfiguration { + b.Namespace = &value + return b +} + +// WithSelector sets the Selector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Selector field is set to the value of the last call. +func (b *ParamRefApplyConfiguration) WithSelector(value *v1.LabelSelectorApplyConfiguration) *ParamRefApplyConfiguration { + b.Selector = value + return b +} + +// WithParameterNotFoundAction sets the ParameterNotFoundAction field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ParameterNotFoundAction field is set to the value of the last call. +func (b *ParamRefApplyConfiguration) WithParameterNotFoundAction(value v1beta1.ParameterNotFoundActionType) *ParamRefApplyConfiguration { + b.ParameterNotFoundAction = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/typechecking.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/typechecking.go new file mode 100644 index 000000000000..07baf334cd39 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/typechecking.go @@ -0,0 +1,44 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// TypeCheckingApplyConfiguration represents an declarative configuration of the TypeChecking type for use +// with apply. +type TypeCheckingApplyConfiguration struct { + ExpressionWarnings []ExpressionWarningApplyConfiguration `json:"expressionWarnings,omitempty"` +} + +// TypeCheckingApplyConfiguration constructs an declarative configuration of the TypeChecking type for use with +// apply. +func TypeChecking() *TypeCheckingApplyConfiguration { + return &TypeCheckingApplyConfiguration{} +} + +// WithExpressionWarnings adds the given value to the ExpressionWarnings field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ExpressionWarnings field. +func (b *TypeCheckingApplyConfiguration) WithExpressionWarnings(values ...*ExpressionWarningApplyConfiguration) *TypeCheckingApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithExpressionWarnings") + } + b.ExpressionWarnings = append(b.ExpressionWarnings, *values[i]) + } + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicy.go new file mode 100644 index 000000000000..e144bc9f701c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicy.go @@ -0,0 +1,256 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + internal "k8s.io/client-go/applyconfigurations/internal" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ValidatingAdmissionPolicyApplyConfiguration represents an declarative configuration of the ValidatingAdmissionPolicy type for use +// with apply. +type ValidatingAdmissionPolicyApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ValidatingAdmissionPolicySpecApplyConfiguration `json:"spec,omitempty"` + Status *ValidatingAdmissionPolicyStatusApplyConfiguration `json:"status,omitempty"` +} + +// ValidatingAdmissionPolicy constructs an declarative configuration of the ValidatingAdmissionPolicy type for use with +// apply. +func ValidatingAdmissionPolicy(name string) *ValidatingAdmissionPolicyApplyConfiguration { + b := &ValidatingAdmissionPolicyApplyConfiguration{} + b.WithName(name) + b.WithKind("ValidatingAdmissionPolicy") + b.WithAPIVersion("admissionregistration.k8s.io/v1beta1") + return b +} + +// ExtractValidatingAdmissionPolicy extracts the applied configuration owned by fieldManager from +// validatingAdmissionPolicy. If no managedFields are found in validatingAdmissionPolicy for fieldManager, a +// ValidatingAdmissionPolicyApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// validatingAdmissionPolicy must be a unmodified ValidatingAdmissionPolicy API object that was retrieved from the Kubernetes API. +// ExtractValidatingAdmissionPolicy provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractValidatingAdmissionPolicy(validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicy, fieldManager string) (*ValidatingAdmissionPolicyApplyConfiguration, error) { + return extractValidatingAdmissionPolicy(validatingAdmissionPolicy, fieldManager, "") +} + +// ExtractValidatingAdmissionPolicyStatus is the same as ExtractValidatingAdmissionPolicy except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractValidatingAdmissionPolicyStatus(validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicy, fieldManager string) (*ValidatingAdmissionPolicyApplyConfiguration, error) { + return extractValidatingAdmissionPolicy(validatingAdmissionPolicy, fieldManager, "status") +} + +func extractValidatingAdmissionPolicy(validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicy, fieldManager string, subresource string) (*ValidatingAdmissionPolicyApplyConfiguration, error) { + b := &ValidatingAdmissionPolicyApplyConfiguration{} + err := managedfields.ExtractInto(validatingAdmissionPolicy, internal.Parser().Type("io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicy"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(validatingAdmissionPolicy.Name) + + b.WithKind("ValidatingAdmissionPolicy") + b.WithAPIVersion("admissionregistration.k8s.io/v1beta1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithKind(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithAPIVersion(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithName(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithGenerateName(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithNamespace(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithUID(value types.UID) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithResourceVersion(value string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithGeneration(value int64) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithLabels(entries map[string]string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithFinalizers(values ...string) *ValidatingAdmissionPolicyApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *ValidatingAdmissionPolicyApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithSpec(value *ValidatingAdmissionPolicySpecApplyConfiguration) *ValidatingAdmissionPolicyApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyApplyConfiguration) WithStatus(value *ValidatingAdmissionPolicyStatusApplyConfiguration) *ValidatingAdmissionPolicyApplyConfiguration { + b.Status = value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybinding.go new file mode 100644 index 000000000000..0dc06aedecdd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybinding.go @@ -0,0 +1,247 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + internal "k8s.io/client-go/applyconfigurations/internal" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ValidatingAdmissionPolicyBindingApplyConfiguration represents an declarative configuration of the ValidatingAdmissionPolicyBinding type for use +// with apply. +type ValidatingAdmissionPolicyBindingApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ValidatingAdmissionPolicyBindingSpecApplyConfiguration `json:"spec,omitempty"` +} + +// ValidatingAdmissionPolicyBinding constructs an declarative configuration of the ValidatingAdmissionPolicyBinding type for use with +// apply. +func ValidatingAdmissionPolicyBinding(name string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b := &ValidatingAdmissionPolicyBindingApplyConfiguration{} + b.WithName(name) + b.WithKind("ValidatingAdmissionPolicyBinding") + b.WithAPIVersion("admissionregistration.k8s.io/v1beta1") + return b +} + +// ExtractValidatingAdmissionPolicyBinding extracts the applied configuration owned by fieldManager from +// validatingAdmissionPolicyBinding. If no managedFields are found in validatingAdmissionPolicyBinding for fieldManager, a +// ValidatingAdmissionPolicyBindingApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// validatingAdmissionPolicyBinding must be a unmodified ValidatingAdmissionPolicyBinding API object that was retrieved from the Kubernetes API. +// ExtractValidatingAdmissionPolicyBinding provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractValidatingAdmissionPolicyBinding(validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding, fieldManager string) (*ValidatingAdmissionPolicyBindingApplyConfiguration, error) { + return extractValidatingAdmissionPolicyBinding(validatingAdmissionPolicyBinding, fieldManager, "") +} + +// ExtractValidatingAdmissionPolicyBindingStatus is the same as ExtractValidatingAdmissionPolicyBinding except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractValidatingAdmissionPolicyBindingStatus(validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding, fieldManager string) (*ValidatingAdmissionPolicyBindingApplyConfiguration, error) { + return extractValidatingAdmissionPolicyBinding(validatingAdmissionPolicyBinding, fieldManager, "status") +} + +func extractValidatingAdmissionPolicyBinding(validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding, fieldManager string, subresource string) (*ValidatingAdmissionPolicyBindingApplyConfiguration, error) { + b := &ValidatingAdmissionPolicyBindingApplyConfiguration{} + err := managedfields.ExtractInto(validatingAdmissionPolicyBinding, internal.Parser().Type("io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBinding"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(validatingAdmissionPolicyBinding.Name) + + b.WithKind("ValidatingAdmissionPolicyBinding") + b.WithAPIVersion("admissionregistration.k8s.io/v1beta1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithKind(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithAPIVersion(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithName(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithGenerateName(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithNamespace(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithUID(value types.UID) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithResourceVersion(value string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithGeneration(value int64) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithLabels(entries map[string]string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithAnnotations(entries map[string]string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithFinalizers(values ...string) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingApplyConfiguration) WithSpec(value *ValidatingAdmissionPolicyBindingSpecApplyConfiguration) *ValidatingAdmissionPolicyBindingApplyConfiguration { + b.Spec = value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybindingspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybindingspec.go new file mode 100644 index 000000000000..d20a78efffb0 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicybindingspec.go @@ -0,0 +1,72 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" +) + +// ValidatingAdmissionPolicyBindingSpecApplyConfiguration represents an declarative configuration of the ValidatingAdmissionPolicyBindingSpec type for use +// with apply. +type ValidatingAdmissionPolicyBindingSpecApplyConfiguration struct { + PolicyName *string `json:"policyName,omitempty"` + ParamRef *ParamRefApplyConfiguration `json:"paramRef,omitempty"` + MatchResources *MatchResourcesApplyConfiguration `json:"matchResources,omitempty"` + ValidationActions []admissionregistrationv1beta1.ValidationAction `json:"validationActions,omitempty"` +} + +// ValidatingAdmissionPolicyBindingSpecApplyConfiguration constructs an declarative configuration of the ValidatingAdmissionPolicyBindingSpec type for use with +// apply. +func ValidatingAdmissionPolicyBindingSpec() *ValidatingAdmissionPolicyBindingSpecApplyConfiguration { + return &ValidatingAdmissionPolicyBindingSpecApplyConfiguration{} +} + +// WithPolicyName sets the PolicyName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PolicyName field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingSpecApplyConfiguration) WithPolicyName(value string) *ValidatingAdmissionPolicyBindingSpecApplyConfiguration { + b.PolicyName = &value + return b +} + +// WithParamRef sets the ParamRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ParamRef field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingSpecApplyConfiguration) WithParamRef(value *ParamRefApplyConfiguration) *ValidatingAdmissionPolicyBindingSpecApplyConfiguration { + b.ParamRef = value + return b +} + +// WithMatchResources sets the MatchResources field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MatchResources field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyBindingSpecApplyConfiguration) WithMatchResources(value *MatchResourcesApplyConfiguration) *ValidatingAdmissionPolicyBindingSpecApplyConfiguration { + b.MatchResources = value + return b +} + +// WithValidationActions adds the given value to the ValidationActions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ValidationActions field. +func (b *ValidatingAdmissionPolicyBindingSpecApplyConfiguration) WithValidationActions(values ...admissionregistrationv1beta1.ValidationAction) *ValidatingAdmissionPolicyBindingSpecApplyConfiguration { + for i := range values { + b.ValidationActions = append(b.ValidationActions, values[i]) + } + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicyspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicyspec.go new file mode 100644 index 000000000000..c6e938910337 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicyspec.go @@ -0,0 +1,117 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" +) + +// ValidatingAdmissionPolicySpecApplyConfiguration represents an declarative configuration of the ValidatingAdmissionPolicySpec type for use +// with apply. +type ValidatingAdmissionPolicySpecApplyConfiguration struct { + ParamKind *ParamKindApplyConfiguration `json:"paramKind,omitempty"` + MatchConstraints *MatchResourcesApplyConfiguration `json:"matchConstraints,omitempty"` + Validations []ValidationApplyConfiguration `json:"validations,omitempty"` + FailurePolicy *admissionregistrationv1beta1.FailurePolicyType `json:"failurePolicy,omitempty"` + AuditAnnotations []AuditAnnotationApplyConfiguration `json:"auditAnnotations,omitempty"` + MatchConditions []MatchConditionApplyConfiguration `json:"matchConditions,omitempty"` + Variables []VariableApplyConfiguration `json:"variables,omitempty"` +} + +// ValidatingAdmissionPolicySpecApplyConfiguration constructs an declarative configuration of the ValidatingAdmissionPolicySpec type for use with +// apply. +func ValidatingAdmissionPolicySpec() *ValidatingAdmissionPolicySpecApplyConfiguration { + return &ValidatingAdmissionPolicySpecApplyConfiguration{} +} + +// WithParamKind sets the ParamKind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ParamKind field is set to the value of the last call. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithParamKind(value *ParamKindApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + b.ParamKind = value + return b +} + +// WithMatchConstraints sets the MatchConstraints field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MatchConstraints field is set to the value of the last call. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithMatchConstraints(value *MatchResourcesApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + b.MatchConstraints = value + return b +} + +// WithValidations adds the given value to the Validations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Validations field. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithValidations(values ...*ValidationApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithValidations") + } + b.Validations = append(b.Validations, *values[i]) + } + return b +} + +// WithFailurePolicy sets the FailurePolicy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FailurePolicy field is set to the value of the last call. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithFailurePolicy(value admissionregistrationv1beta1.FailurePolicyType) *ValidatingAdmissionPolicySpecApplyConfiguration { + b.FailurePolicy = &value + return b +} + +// WithAuditAnnotations adds the given value to the AuditAnnotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AuditAnnotations field. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithAuditAnnotations(values ...*AuditAnnotationApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithAuditAnnotations") + } + b.AuditAnnotations = append(b.AuditAnnotations, *values[i]) + } + return b +} + +// WithMatchConditions adds the given value to the MatchConditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the MatchConditions field. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithMatchConditions(values ...*MatchConditionApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithMatchConditions") + } + b.MatchConditions = append(b.MatchConditions, *values[i]) + } + return b +} + +// WithVariables adds the given value to the Variables field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Variables field. +func (b *ValidatingAdmissionPolicySpecApplyConfiguration) WithVariables(values ...*VariableApplyConfiguration) *ValidatingAdmissionPolicySpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithVariables") + } + b.Variables = append(b.Variables, *values[i]) + } + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicystatus.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicystatus.go new file mode 100644 index 000000000000..e3e6d417edd5 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validatingadmissionpolicystatus.go @@ -0,0 +1,66 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ValidatingAdmissionPolicyStatusApplyConfiguration represents an declarative configuration of the ValidatingAdmissionPolicyStatus type for use +// with apply. +type ValidatingAdmissionPolicyStatusApplyConfiguration struct { + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + TypeChecking *TypeCheckingApplyConfiguration `json:"typeChecking,omitempty"` + Conditions []v1.ConditionApplyConfiguration `json:"conditions,omitempty"` +} + +// ValidatingAdmissionPolicyStatusApplyConfiguration constructs an declarative configuration of the ValidatingAdmissionPolicyStatus type for use with +// apply. +func ValidatingAdmissionPolicyStatus() *ValidatingAdmissionPolicyStatusApplyConfiguration { + return &ValidatingAdmissionPolicyStatusApplyConfiguration{} +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyStatusApplyConfiguration) WithObservedGeneration(value int64) *ValidatingAdmissionPolicyStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithTypeChecking sets the TypeChecking field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TypeChecking field is set to the value of the last call. +func (b *ValidatingAdmissionPolicyStatusApplyConfiguration) WithTypeChecking(value *TypeCheckingApplyConfiguration) *ValidatingAdmissionPolicyStatusApplyConfiguration { + b.TypeChecking = value + return b +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *ValidatingAdmissionPolicyStatusApplyConfiguration) WithConditions(values ...*v1.ConditionApplyConfiguration) *ValidatingAdmissionPolicyStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validation.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validation.go new file mode 100644 index 000000000000..ed9ff1ac0c27 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/validation.go @@ -0,0 +1,70 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ValidationApplyConfiguration represents an declarative configuration of the Validation type for use +// with apply. +type ValidationApplyConfiguration struct { + Expression *string `json:"expression,omitempty"` + Message *string `json:"message,omitempty"` + Reason *v1.StatusReason `json:"reason,omitempty"` + MessageExpression *string `json:"messageExpression,omitempty"` +} + +// ValidationApplyConfiguration constructs an declarative configuration of the Validation type for use with +// apply. +func Validation() *ValidationApplyConfiguration { + return &ValidationApplyConfiguration{} +} + +// WithExpression sets the Expression field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Expression field is set to the value of the last call. +func (b *ValidationApplyConfiguration) WithExpression(value string) *ValidationApplyConfiguration { + b.Expression = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *ValidationApplyConfiguration) WithMessage(value string) *ValidationApplyConfiguration { + b.Message = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *ValidationApplyConfiguration) WithReason(value v1.StatusReason) *ValidationApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessageExpression sets the MessageExpression field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MessageExpression field is set to the value of the last call. +func (b *ValidationApplyConfiguration) WithMessageExpression(value string) *ValidationApplyConfiguration { + b.MessageExpression = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/variable.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/variable.go new file mode 100644 index 000000000000..0fc294c65d51 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1/variable.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// VariableApplyConfiguration represents an declarative configuration of the Variable type for use +// with apply. +type VariableApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Expression *string `json:"expression,omitempty"` +} + +// VariableApplyConfiguration constructs an declarative configuration of the Variable type for use with +// apply. +func Variable() *VariableApplyConfiguration { + return &VariableApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *VariableApplyConfiguration) WithName(value string) *VariableApplyConfiguration { + b.Name = &value + return b +} + +// WithExpression sets the Expression field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Expression field is set to the value of the last call. +func (b *VariableApplyConfiguration) WithExpression(value string) *VariableApplyConfiguration { + b.Expression = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go index a48dac681074..64d27bdad50e 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go @@ -18,16 +18,11 @@ limitations under the License. package v1 -import ( - v1 "k8s.io/api/core/v1" -) - // LoadBalancerIngressApplyConfiguration represents an declarative configuration of the LoadBalancerIngress type for use // with apply. type LoadBalancerIngressApplyConfiguration struct { IP *string `json:"ip,omitempty"` Hostname *string `json:"hostname,omitempty"` - IPMode *v1.LoadBalancerIPMode `json:"ipMode,omitempty"` Ports []PortStatusApplyConfiguration `json:"ports,omitempty"` } @@ -53,14 +48,6 @@ func (b *LoadBalancerIngressApplyConfiguration) WithHostname(value string) *Load return b } -// WithIPMode sets the IPMode field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the IPMode field is set to the value of the last call. -func (b *LoadBalancerIngressApplyConfiguration) WithIPMode(value v1.LoadBalancerIPMode) *LoadBalancerIngressApplyConfiguration { - b.IPMode = &value - return b -} - // WithPorts adds the given value to the Ports field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Ports field. diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumestatus.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumestatus.go index f7048dec4eb3..a473c0e927f4 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumestatus.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumestatus.go @@ -20,14 +20,16 @@ package v1 import ( v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // PersistentVolumeStatusApplyConfiguration represents an declarative configuration of the PersistentVolumeStatus type for use // with apply. type PersistentVolumeStatusApplyConfiguration struct { - Phase *v1.PersistentVolumePhase `json:"phase,omitempty"` - Message *string `json:"message,omitempty"` - Reason *string `json:"reason,omitempty"` + Phase *v1.PersistentVolumePhase `json:"phase,omitempty"` + Message *string `json:"message,omitempty"` + Reason *string `json:"reason,omitempty"` + LastPhaseTransitionTime *metav1.Time `json:"lastPhaseTransitionTime,omitempty"` } // PersistentVolumeStatusApplyConfiguration constructs an declarative configuration of the PersistentVolumeStatus type for use with @@ -59,3 +61,11 @@ func (b *PersistentVolumeStatusApplyConfiguration) WithReason(value string) *Per b.Reason = &value return b } + +// WithLastPhaseTransitionTime sets the LastPhaseTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastPhaseTransitionTime field is set to the value of the last call. +func (b *PersistentVolumeStatusApplyConfiguration) WithLastPhaseTransitionTime(value metav1.Time) *PersistentVolumeStatusApplyConfiguration { + b.LastPhaseTransitionTime = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go index 90e9333844c1..3ed553662f69 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -522,6 +522,28 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.admissionregistration.v1beta1.AuditAnnotation + map: + fields: + - name: key + type: + scalar: string + default: "" + - name: valueExpression + type: + scalar: string + default: "" +- name: io.k8s.api.admissionregistration.v1beta1.ExpressionWarning + map: + fields: + - name: fieldRef + type: + scalar: string + default: "" + - name: warning + type: + scalar: string + default: "" - name: io.k8s.api.admissionregistration.v1beta1.MatchCondition map: fields: @@ -533,6 +555,31 @@ var schemaYAML = typed.YAMLObject(`types: type: scalar: string default: "" +- name: io.k8s.api.admissionregistration.v1beta1.MatchResources + map: + fields: + - name: excludeResourceRules + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.NamedRuleWithOperations + elementRelationship: atomic + - name: matchPolicy + type: + scalar: string + - name: namespaceSelector + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector + - name: objectSelector + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector + - name: resourceRules + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.NamedRuleWithOperations + elementRelationship: atomic + elementRelationship: atomic - name: io.k8s.api.admissionregistration.v1beta1.MutatingWebhook map: fields: @@ -606,6 +653,69 @@ var schemaYAML = typed.YAMLObject(`types: elementRelationship: associative keys: - name +- name: io.k8s.api.admissionregistration.v1beta1.NamedRuleWithOperations + map: + fields: + - name: apiGroups + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: apiVersions + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: operations + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: resourceNames + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: resources + type: + list: + elementType: + scalar: string + elementRelationship: atomic + - name: scope + type: + scalar: string + elementRelationship: atomic +- name: io.k8s.api.admissionregistration.v1beta1.ParamKind + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + elementRelationship: atomic +- name: io.k8s.api.admissionregistration.v1beta1.ParamRef + map: + fields: + - name: name + type: + scalar: string + - name: namespace + type: + scalar: string + - name: parameterNotFoundAction + type: + scalar: string + - name: selector + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector + elementRelationship: atomic - name: io.k8s.api.admissionregistration.v1beta1.ServiceReference map: fields: @@ -623,6 +733,128 @@ var schemaYAML = typed.YAMLObject(`types: - name: port type: scalar: numeric +- name: io.k8s.api.admissionregistration.v1beta1.TypeChecking + map: + fields: + - name: expressionWarnings + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.ExpressionWarning + elementRelationship: atomic +- name: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicy + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta + default: {} + - name: spec + type: + namedType: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicySpec + default: {} + - name: status + type: + namedType: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyStatus + default: {} +- name: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBinding + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta + default: {} + - name: spec + type: + namedType: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBindingSpec + default: {} +- name: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyBindingSpec + map: + fields: + - name: matchResources + type: + namedType: io.k8s.api.admissionregistration.v1beta1.MatchResources + - name: paramRef + type: + namedType: io.k8s.api.admissionregistration.v1beta1.ParamRef + - name: policyName + type: + scalar: string + - name: validationActions + type: + list: + elementType: + scalar: string + elementRelationship: associative +- name: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicySpec + map: + fields: + - name: auditAnnotations + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.AuditAnnotation + elementRelationship: atomic + - name: failurePolicy + type: + scalar: string + - name: matchConditions + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.MatchCondition + elementRelationship: associative + keys: + - name + - name: matchConstraints + type: + namedType: io.k8s.api.admissionregistration.v1beta1.MatchResources + - name: paramKind + type: + namedType: io.k8s.api.admissionregistration.v1beta1.ParamKind + - name: validations + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.Validation + elementRelationship: atomic + - name: variables + type: + list: + elementType: + namedType: io.k8s.api.admissionregistration.v1beta1.Variable + elementRelationship: associative + keys: + - name +- name: io.k8s.api.admissionregistration.v1beta1.ValidatingAdmissionPolicyStatus + map: + fields: + - name: conditions + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Condition + elementRelationship: associative + keys: + - type + - name: observedGeneration + type: + scalar: numeric + - name: typeChecking + type: + namedType: io.k8s.api.admissionregistration.v1beta1.TypeChecking - name: io.k8s.api.admissionregistration.v1beta1.ValidatingWebhook map: fields: @@ -693,6 +925,34 @@ var schemaYAML = typed.YAMLObject(`types: elementRelationship: associative keys: - name +- name: io.k8s.api.admissionregistration.v1beta1.Validation + map: + fields: + - name: expression + type: + scalar: string + default: "" + - name: message + type: + scalar: string + - name: messageExpression + type: + scalar: string + - name: reason + type: + scalar: string +- name: io.k8s.api.admissionregistration.v1beta1.Variable + map: + fields: + - name: expression + type: + scalar: string + default: "" + - name: name + type: + scalar: string + default: "" + elementRelationship: atomic - name: io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig map: fields: @@ -5307,9 +5567,6 @@ var schemaYAML = typed.YAMLObject(`types: - name: ip type: scalar: string - - name: ipMode - type: - scalar: string - name: ports type: list: @@ -5991,6 +6248,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: io.k8s.api.core.v1.PersistentVolumeStatus map: fields: + - name: lastPhaseTransitionTime + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time - name: message type: scalar: string diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/discovery/aggregated_discovery.go b/cluster-autoscaler/vendor/k8s.io/client-go/discovery/aggregated_discovery.go index 7470259dc86d..f72c42051b91 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/discovery/aggregated_discovery.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/discovery/aggregated_discovery.go @@ -111,6 +111,8 @@ func convertAPIGroup(g apidiscovery.APIGroupDiscovery) ( return group, gvResources, failedGVs } +var emptyKind = metav1.GroupVersionKind{} + // convertAPIResource tranforms a APIResourceDiscovery to an APIResource. We are // resilient to missing GVK, since this resource might be the parent resource // for a subresource. If the parent is missing a GVK, it is not returned in @@ -125,7 +127,7 @@ func convertAPIResource(in apidiscovery.APIResourceDiscovery) (metav1.APIResourc Categories: in.Categories, } var err error - if in.ResponseKind != nil { + if in.ResponseKind != nil && (*in.ResponseKind) != emptyKind { result.Group = in.ResponseKind.Group result.Version = in.ResponseKind.Version result.Kind = in.ResponseKind.Kind @@ -140,7 +142,7 @@ func convertAPIResource(in apidiscovery.APIResourceDiscovery) (metav1.APIResourc // convertAPISubresource tranforms a APISubresourceDiscovery to an APIResource. func convertAPISubresource(parent metav1.APIResource, in apidiscovery.APISubresourceDiscovery) (metav1.APIResource, error) { result := metav1.APIResource{} - if in.ResponseKind == nil { + if in.ResponseKind == nil || (*in.ResponseKind) == emptyKind { return result, fmt.Errorf("subresource %s/%s missing GVK", parent.Name, in.Subresource) } result.Name = fmt.Sprintf("%s/%s", parent.Name, in.Subresource) diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go index d1e2b61be251..815960df5925 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/interface.go @@ -26,6 +26,10 @@ import ( type Interface interface { // MutatingWebhookConfigurations returns a MutatingWebhookConfigurationInformer. MutatingWebhookConfigurations() MutatingWebhookConfigurationInformer + // ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer. + ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer + // ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer. + ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer // ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer. ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer } @@ -46,6 +50,16 @@ func (v *version) MutatingWebhookConfigurations() MutatingWebhookConfigurationIn return &mutatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} } +// ValidatingAdmissionPolicies returns a ValidatingAdmissionPolicyInformer. +func (v *version) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInformer { + return &validatingAdmissionPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// ValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindingInformer. +func (v *version) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInformer { + return &validatingAdmissionPolicyBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + // ValidatingWebhookConfigurations returns a ValidatingWebhookConfigurationInformer. func (v *version) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInformer { return &validatingWebhookConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go new file mode 100644 index 000000000000..d0e9cd64c82f --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicy.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + time "time" + + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// ValidatingAdmissionPolicyInformer provides access to a shared informer and lister for +// ValidatingAdmissionPolicies. +type ValidatingAdmissionPolicyInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.ValidatingAdmissionPolicyLister +} + +type validatingAdmissionPolicyInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredValidatingAdmissionPolicyInformer constructs a new informer for ValidatingAdmissionPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredValidatingAdmissionPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicies().Watch(context.TODO(), options) + }, + }, + &admissionregistrationv1beta1.ValidatingAdmissionPolicy{}, + resyncPeriod, + indexers, + ) +} + +func (f *validatingAdmissionPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredValidatingAdmissionPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *validatingAdmissionPolicyInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&admissionregistrationv1beta1.ValidatingAdmissionPolicy{}, f.defaultInformer) +} + +func (f *validatingAdmissionPolicyInformer) Lister() v1beta1.ValidatingAdmissionPolicyLister { + return v1beta1.NewValidatingAdmissionPolicyLister(f.Informer().GetIndexer()) +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go new file mode 100644 index 000000000000..7641e9940670 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + time "time" + + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1beta1 "k8s.io/client-go/listers/admissionregistration/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// ValidatingAdmissionPolicyBindingInformer provides access to a shared informer and lister for +// ValidatingAdmissionPolicyBindings. +type ValidatingAdmissionPolicyBindingInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.ValidatingAdmissionPolicyBindingLister +} + +type validatingAdmissionPolicyBindingInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredValidatingAdmissionPolicyBindingInformer constructs a new informer for ValidatingAdmissionPolicyBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredValidatingAdmissionPolicyBindingInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AdmissionregistrationV1beta1().ValidatingAdmissionPolicyBindings().Watch(context.TODO(), options) + }, + }, + &admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding{}, + resyncPeriod, + indexers, + ) +} + +func (f *validatingAdmissionPolicyBindingInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredValidatingAdmissionPolicyBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *validatingAdmissionPolicyBindingInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding{}, f.defaultInformer) +} + +func (f *validatingAdmissionPolicyBindingInformer) Lister() v1beta1.ValidatingAdmissionPolicyBindingLister { + return v1beta1.NewValidatingAdmissionPolicyBindingLister(f.Informer().GetIndexer()) +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go index 2b63a8028cb1..5495239b29d5 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go @@ -112,6 +112,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource // Group=admissionregistration.k8s.io, Version=v1beta1 case v1beta1.SchemeGroupVersion.WithResource("mutatingwebhookconfigurations"): return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().MutatingWebhookConfigurations().Informer()}, nil + case v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicies"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingAdmissionPolicies().Informer()}, nil + case v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicybindings"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingAdmissionPolicyBindings().Informer()}, nil case v1beta1.SchemeGroupVersion.WithResource("validatingwebhookconfigurations"): return &genericInformer{resource: resource.GroupResource(), informer: f.Admissionregistration().V1beta1().ValidatingWebhookConfigurations().Informer()}, nil diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go index 8fda84b1d282..5a0a17d9bea7 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go @@ -29,6 +29,8 @@ import ( type AdmissionregistrationV1beta1Interface interface { RESTClient() rest.Interface MutatingWebhookConfigurationsGetter + ValidatingAdmissionPoliciesGetter + ValidatingAdmissionPolicyBindingsGetter ValidatingWebhookConfigurationsGetter } @@ -41,6 +43,14 @@ func (c *AdmissionregistrationV1beta1Client) MutatingWebhookConfigurations() Mut return newMutatingWebhookConfigurations(c) } +func (c *AdmissionregistrationV1beta1Client) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInterface { + return newValidatingAdmissionPolicies(c) +} + +func (c *AdmissionregistrationV1beta1Client) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInterface { + return newValidatingAdmissionPolicyBindings(c) +} + func (c *AdmissionregistrationV1beta1Client) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInterface { return newValidatingWebhookConfigurations(c) } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go index 1a988ddba1a4..badfbf0346ba 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_admissionregistration_client.go @@ -32,6 +32,14 @@ func (c *FakeAdmissionregistrationV1beta1) MutatingWebhookConfigurations() v1bet return &FakeMutatingWebhookConfigurations{c} } +func (c *FakeAdmissionregistrationV1beta1) ValidatingAdmissionPolicies() v1beta1.ValidatingAdmissionPolicyInterface { + return &FakeValidatingAdmissionPolicies{c} +} + +func (c *FakeAdmissionregistrationV1beta1) ValidatingAdmissionPolicyBindings() v1beta1.ValidatingAdmissionPolicyBindingInterface { + return &FakeValidatingAdmissionPolicyBindings{c} +} + func (c *FakeAdmissionregistrationV1beta1) ValidatingWebhookConfigurations() v1beta1.ValidatingWebhookConfigurationInterface { return &FakeValidatingWebhookConfigurations{c} } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicy.go new file mode 100644 index 000000000000..90cb4ff6ca86 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicy.go @@ -0,0 +1,178 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + json "encoding/json" + "fmt" + + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + admissionregistrationv1beta1 "k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1" + testing "k8s.io/client-go/testing" +) + +// FakeValidatingAdmissionPolicies implements ValidatingAdmissionPolicyInterface +type FakeValidatingAdmissionPolicies struct { + Fake *FakeAdmissionregistrationV1beta1 +} + +var validatingadmissionpoliciesResource = v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicies") + +var validatingadmissionpoliciesKind = v1beta1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicy") + +// Get takes name of the validatingAdmissionPolicy, and returns the corresponding validatingAdmissionPolicy object, and an error if there is any. +func (c *FakeValidatingAdmissionPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(validatingadmissionpoliciesResource, name), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// List takes label and field selectors, and returns the list of ValidatingAdmissionPolicies that match those selectors. +func (c *FakeValidatingAdmissionPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ValidatingAdmissionPolicyList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(validatingadmissionpoliciesResource, validatingadmissionpoliciesKind, opts), &v1beta1.ValidatingAdmissionPolicyList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.ValidatingAdmissionPolicyList{ListMeta: obj.(*v1beta1.ValidatingAdmissionPolicyList).ListMeta} + for _, item := range obj.(*v1beta1.ValidatingAdmissionPolicyList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested validatingAdmissionPolicies. +func (c *FakeValidatingAdmissionPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(validatingadmissionpoliciesResource, opts)) +} + +// Create takes the representation of a validatingAdmissionPolicy and creates it. Returns the server's representation of the validatingAdmissionPolicy, and an error, if there is any. +func (c *FakeValidatingAdmissionPolicies) Create(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.CreateOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(validatingadmissionpoliciesResource, validatingAdmissionPolicy), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// Update takes the representation of a validatingAdmissionPolicy and updates it. Returns the server's representation of the validatingAdmissionPolicy, and an error, if there is any. +func (c *FakeValidatingAdmissionPolicies) Update(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(validatingadmissionpoliciesResource, validatingAdmissionPolicy), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeValidatingAdmissionPolicies) UpdateStatus(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (*v1beta1.ValidatingAdmissionPolicy, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(validatingadmissionpoliciesResource, "status", validatingAdmissionPolicy), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// Delete takes name of the validatingAdmissionPolicy and deletes it. Returns an error if one occurs. +func (c *FakeValidatingAdmissionPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteActionWithOptions(validatingadmissionpoliciesResource, name, opts), &v1beta1.ValidatingAdmissionPolicy{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeValidatingAdmissionPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(validatingadmissionpoliciesResource, listOpts) + + _, err := c.Fake.Invokes(action, &v1beta1.ValidatingAdmissionPolicyList{}) + return err +} + +// Patch applies the patch and returns the patched validatingAdmissionPolicy. +func (c *FakeValidatingAdmissionPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(validatingadmissionpoliciesResource, name, pt, data, subresources...), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied validatingAdmissionPolicy. +func (c *FakeValidatingAdmissionPolicies) Apply(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + if validatingAdmissionPolicy == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy provided to Apply must not be nil") + } + data, err := json.Marshal(validatingAdmissionPolicy) + if err != nil { + return nil, err + } + name := validatingAdmissionPolicy.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(validatingadmissionpoliciesResource, *name, types.ApplyPatchType, data), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *FakeValidatingAdmissionPolicies) ApplyStatus(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + if validatingAdmissionPolicy == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy provided to Apply must not be nil") + } + data, err := json.Marshal(validatingAdmissionPolicy) + if err != nil { + return nil, err + } + name := validatingAdmissionPolicy.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(validatingadmissionpoliciesResource, *name, types.ApplyPatchType, data, "status"), &v1beta1.ValidatingAdmissionPolicy{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), err +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicybinding.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicybinding.go new file mode 100644 index 000000000000..f771f81f301b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/fake_validatingadmissionpolicybinding.go @@ -0,0 +1,145 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + json "encoding/json" + "fmt" + + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + admissionregistrationv1beta1 "k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1" + testing "k8s.io/client-go/testing" +) + +// FakeValidatingAdmissionPolicyBindings implements ValidatingAdmissionPolicyBindingInterface +type FakeValidatingAdmissionPolicyBindings struct { + Fake *FakeAdmissionregistrationV1beta1 +} + +var validatingadmissionpolicybindingsResource = v1beta1.SchemeGroupVersion.WithResource("validatingadmissionpolicybindings") + +var validatingadmissionpolicybindingsKind = v1beta1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicyBinding") + +// Get takes name of the validatingAdmissionPolicyBinding, and returns the corresponding validatingAdmissionPolicyBinding object, and an error if there is any. +func (c *FakeValidatingAdmissionPolicyBindings) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(validatingadmissionpolicybindingsResource, name), &v1beta1.ValidatingAdmissionPolicyBinding{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), err +} + +// List takes label and field selectors, and returns the list of ValidatingAdmissionPolicyBindings that match those selectors. +func (c *FakeValidatingAdmissionPolicyBindings) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ValidatingAdmissionPolicyBindingList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(validatingadmissionpolicybindingsResource, validatingadmissionpolicybindingsKind, opts), &v1beta1.ValidatingAdmissionPolicyBindingList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.ValidatingAdmissionPolicyBindingList{ListMeta: obj.(*v1beta1.ValidatingAdmissionPolicyBindingList).ListMeta} + for _, item := range obj.(*v1beta1.ValidatingAdmissionPolicyBindingList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested validatingAdmissionPolicyBindings. +func (c *FakeValidatingAdmissionPolicyBindings) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(validatingadmissionpolicybindingsResource, opts)) +} + +// Create takes the representation of a validatingAdmissionPolicyBinding and creates it. Returns the server's representation of the validatingAdmissionPolicyBinding, and an error, if there is any. +func (c *FakeValidatingAdmissionPolicyBindings) Create(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.CreateOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(validatingadmissionpolicybindingsResource, validatingAdmissionPolicyBinding), &v1beta1.ValidatingAdmissionPolicyBinding{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), err +} + +// Update takes the representation of a validatingAdmissionPolicyBinding and updates it. Returns the server's representation of the validatingAdmissionPolicyBinding, and an error, if there is any. +func (c *FakeValidatingAdmissionPolicyBindings) Update(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.UpdateOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(validatingadmissionpolicybindingsResource, validatingAdmissionPolicyBinding), &v1beta1.ValidatingAdmissionPolicyBinding{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), err +} + +// Delete takes name of the validatingAdmissionPolicyBinding and deletes it. Returns an error if one occurs. +func (c *FakeValidatingAdmissionPolicyBindings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteActionWithOptions(validatingadmissionpolicybindingsResource, name, opts), &v1beta1.ValidatingAdmissionPolicyBinding{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeValidatingAdmissionPolicyBindings) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(validatingadmissionpolicybindingsResource, listOpts) + + _, err := c.Fake.Invokes(action, &v1beta1.ValidatingAdmissionPolicyBindingList{}) + return err +} + +// Patch applies the patch and returns the patched validatingAdmissionPolicyBinding. +func (c *FakeValidatingAdmissionPolicyBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(validatingadmissionpolicybindingsResource, name, pt, data, subresources...), &v1beta1.ValidatingAdmissionPolicyBinding{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), err +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied validatingAdmissionPolicyBinding. +func (c *FakeValidatingAdmissionPolicyBindings) Apply(ctx context.Context, validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + if validatingAdmissionPolicyBinding == nil { + return nil, fmt.Errorf("validatingAdmissionPolicyBinding provided to Apply must not be nil") + } + data, err := json.Marshal(validatingAdmissionPolicyBinding) + if err != nil { + return nil, err + } + name := validatingAdmissionPolicyBinding.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicyBinding.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(validatingadmissionpolicybindingsResource, *name, types.ApplyPatchType, data), &v1beta1.ValidatingAdmissionPolicyBinding{}) + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), err +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go index 2aeb9c98ae20..56ad611f4580 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/generated_expansion.go @@ -20,4 +20,8 @@ package v1beta1 type MutatingWebhookConfigurationExpansion interface{} +type ValidatingAdmissionPolicyExpansion interface{} + +type ValidatingAdmissionPolicyBindingExpansion interface{} + type ValidatingWebhookConfigurationExpansion interface{} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicy.go new file mode 100644 index 000000000000..bea51b587f62 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicy.go @@ -0,0 +1,243 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + admissionregistrationv1beta1 "k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// ValidatingAdmissionPoliciesGetter has a method to return a ValidatingAdmissionPolicyInterface. +// A group's client should implement this interface. +type ValidatingAdmissionPoliciesGetter interface { + ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInterface +} + +// ValidatingAdmissionPolicyInterface has methods to work with ValidatingAdmissionPolicy resources. +type ValidatingAdmissionPolicyInterface interface { + Create(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.CreateOptions) (*v1beta1.ValidatingAdmissionPolicy, error) + Update(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (*v1beta1.ValidatingAdmissionPolicy, error) + UpdateStatus(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (*v1beta1.ValidatingAdmissionPolicy, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.ValidatingAdmissionPolicy, error) + List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ValidatingAdmissionPolicyList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicy, err error) + Apply(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) + ApplyStatus(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) + ValidatingAdmissionPolicyExpansion +} + +// validatingAdmissionPolicies implements ValidatingAdmissionPolicyInterface +type validatingAdmissionPolicies struct { + client rest.Interface +} + +// newValidatingAdmissionPolicies returns a ValidatingAdmissionPolicies +func newValidatingAdmissionPolicies(c *AdmissionregistrationV1beta1Client) *validatingAdmissionPolicies { + return &validatingAdmissionPolicies{ + client: c.RESTClient(), + } +} + +// Get takes name of the validatingAdmissionPolicy, and returns the corresponding validatingAdmissionPolicy object, and an error if there is any. +func (c *validatingAdmissionPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Get(). + Resource("validatingadmissionpolicies"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ValidatingAdmissionPolicies that match those selectors. +func (c *validatingAdmissionPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ValidatingAdmissionPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.ValidatingAdmissionPolicyList{} + err = c.client.Get(). + Resource("validatingadmissionpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested validatingAdmissionPolicies. +func (c *validatingAdmissionPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("validatingadmissionpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a validatingAdmissionPolicy and creates it. Returns the server's representation of the validatingAdmissionPolicy, and an error, if there is any. +func (c *validatingAdmissionPolicies) Create(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.CreateOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Post(). + Resource("validatingadmissionpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(validatingAdmissionPolicy). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a validatingAdmissionPolicy and updates it. Returns the server's representation of the validatingAdmissionPolicy, and an error, if there is any. +func (c *validatingAdmissionPolicies) Update(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Put(). + Resource("validatingadmissionpolicies"). + Name(validatingAdmissionPolicy.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(validatingAdmissionPolicy). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *validatingAdmissionPolicies) UpdateStatus(ctx context.Context, validatingAdmissionPolicy *v1beta1.ValidatingAdmissionPolicy, opts v1.UpdateOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Put(). + Resource("validatingadmissionpolicies"). + Name(validatingAdmissionPolicy.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(validatingAdmissionPolicy). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the validatingAdmissionPolicy and deletes it. Returns an error if one occurs. +func (c *validatingAdmissionPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Resource("validatingadmissionpolicies"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *validatingAdmissionPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("validatingadmissionpolicies"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched validatingAdmissionPolicy. +func (c *validatingAdmissionPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Patch(pt). + Resource("validatingadmissionpolicies"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied validatingAdmissionPolicy. +func (c *validatingAdmissionPolicies) Apply(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + if validatingAdmissionPolicy == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(validatingAdmissionPolicy) + if err != nil { + return nil, err + } + name := validatingAdmissionPolicy.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy.Name must be provided to Apply") + } + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Patch(types.ApplyPatchType). + Resource("validatingadmissionpolicies"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *validatingAdmissionPolicies) ApplyStatus(ctx context.Context, validatingAdmissionPolicy *admissionregistrationv1beta1.ValidatingAdmissionPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicy, err error) { + if validatingAdmissionPolicy == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(validatingAdmissionPolicy) + if err != nil { + return nil, err + } + + name := validatingAdmissionPolicy.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicy.Name must be provided to Apply") + } + + result = &v1beta1.ValidatingAdmissionPolicy{} + err = c.client.Patch(types.ApplyPatchType). + Resource("validatingadmissionpolicies"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicybinding.go new file mode 100644 index 000000000000..bba37bb0477b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingadmissionpolicybinding.go @@ -0,0 +1,197 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + admissionregistrationv1beta1 "k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// ValidatingAdmissionPolicyBindingsGetter has a method to return a ValidatingAdmissionPolicyBindingInterface. +// A group's client should implement this interface. +type ValidatingAdmissionPolicyBindingsGetter interface { + ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInterface +} + +// ValidatingAdmissionPolicyBindingInterface has methods to work with ValidatingAdmissionPolicyBinding resources. +type ValidatingAdmissionPolicyBindingInterface interface { + Create(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.CreateOptions) (*v1beta1.ValidatingAdmissionPolicyBinding, error) + Update(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.UpdateOptions) (*v1beta1.ValidatingAdmissionPolicyBinding, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.ValidatingAdmissionPolicyBinding, error) + List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ValidatingAdmissionPolicyBindingList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) + Apply(ctx context.Context, validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) + ValidatingAdmissionPolicyBindingExpansion +} + +// validatingAdmissionPolicyBindings implements ValidatingAdmissionPolicyBindingInterface +type validatingAdmissionPolicyBindings struct { + client rest.Interface +} + +// newValidatingAdmissionPolicyBindings returns a ValidatingAdmissionPolicyBindings +func newValidatingAdmissionPolicyBindings(c *AdmissionregistrationV1beta1Client) *validatingAdmissionPolicyBindings { + return &validatingAdmissionPolicyBindings{ + client: c.RESTClient(), + } +} + +// Get takes name of the validatingAdmissionPolicyBinding, and returns the corresponding validatingAdmissionPolicyBinding object, and an error if there is any. +func (c *validatingAdmissionPolicyBindings) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + result = &v1beta1.ValidatingAdmissionPolicyBinding{} + err = c.client.Get(). + Resource("validatingadmissionpolicybindings"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ValidatingAdmissionPolicyBindings that match those selectors. +func (c *validatingAdmissionPolicyBindings) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ValidatingAdmissionPolicyBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.ValidatingAdmissionPolicyBindingList{} + err = c.client.Get(). + Resource("validatingadmissionpolicybindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested validatingAdmissionPolicyBindings. +func (c *validatingAdmissionPolicyBindings) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("validatingadmissionpolicybindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a validatingAdmissionPolicyBinding and creates it. Returns the server's representation of the validatingAdmissionPolicyBinding, and an error, if there is any. +func (c *validatingAdmissionPolicyBindings) Create(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.CreateOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + result = &v1beta1.ValidatingAdmissionPolicyBinding{} + err = c.client.Post(). + Resource("validatingadmissionpolicybindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(validatingAdmissionPolicyBinding). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a validatingAdmissionPolicyBinding and updates it. Returns the server's representation of the validatingAdmissionPolicyBinding, and an error, if there is any. +func (c *validatingAdmissionPolicyBindings) Update(ctx context.Context, validatingAdmissionPolicyBinding *v1beta1.ValidatingAdmissionPolicyBinding, opts v1.UpdateOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + result = &v1beta1.ValidatingAdmissionPolicyBinding{} + err = c.client.Put(). + Resource("validatingadmissionpolicybindings"). + Name(validatingAdmissionPolicyBinding.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(validatingAdmissionPolicyBinding). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the validatingAdmissionPolicyBinding and deletes it. Returns an error if one occurs. +func (c *validatingAdmissionPolicyBindings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Resource("validatingadmissionpolicybindings"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *validatingAdmissionPolicyBindings) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("validatingadmissionpolicybindings"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched validatingAdmissionPolicyBinding. +func (c *validatingAdmissionPolicyBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + result = &v1beta1.ValidatingAdmissionPolicyBinding{} + err = c.client.Patch(pt). + Resource("validatingadmissionpolicybindings"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied validatingAdmissionPolicyBinding. +func (c *validatingAdmissionPolicyBindings) Apply(ctx context.Context, validatingAdmissionPolicyBinding *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ValidatingAdmissionPolicyBinding, err error) { + if validatingAdmissionPolicyBinding == nil { + return nil, fmt.Errorf("validatingAdmissionPolicyBinding provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(validatingAdmissionPolicyBinding) + if err != nil { + return nil, err + } + name := validatingAdmissionPolicyBinding.Name + if name == nil { + return nil, fmt.Errorf("validatingAdmissionPolicyBinding.Name must be provided to Apply") + } + result = &v1beta1.ValidatingAdmissionPolicyBinding{} + err = c.client.Patch(types.ApplyPatchType). + Resource("validatingadmissionpolicybindings"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go index 8960abc4f483..7148781f4213 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/expansion_generated.go @@ -22,6 +22,14 @@ package v1beta1 // MutatingWebhookConfigurationLister. type MutatingWebhookConfigurationListerExpansion interface{} +// ValidatingAdmissionPolicyListerExpansion allows custom methods to be added to +// ValidatingAdmissionPolicyLister. +type ValidatingAdmissionPolicyListerExpansion interface{} + +// ValidatingAdmissionPolicyBindingListerExpansion allows custom methods to be added to +// ValidatingAdmissionPolicyBindingLister. +type ValidatingAdmissionPolicyBindingListerExpansion interface{} + // ValidatingWebhookConfigurationListerExpansion allows custom methods to be added to // ValidatingWebhookConfigurationLister. type ValidatingWebhookConfigurationListerExpansion interface{} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go new file mode 100644 index 000000000000..7018b3ceec67 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicy.go @@ -0,0 +1,68 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ValidatingAdmissionPolicyLister helps list ValidatingAdmissionPolicies. +// All objects returned here must be treated as read-only. +type ValidatingAdmissionPolicyLister interface { + // List lists all ValidatingAdmissionPolicies in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ValidatingAdmissionPolicy, err error) + // Get retrieves the ValidatingAdmissionPolicy from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.ValidatingAdmissionPolicy, error) + ValidatingAdmissionPolicyListerExpansion +} + +// validatingAdmissionPolicyLister implements the ValidatingAdmissionPolicyLister interface. +type validatingAdmissionPolicyLister struct { + indexer cache.Indexer +} + +// NewValidatingAdmissionPolicyLister returns a new ValidatingAdmissionPolicyLister. +func NewValidatingAdmissionPolicyLister(indexer cache.Indexer) ValidatingAdmissionPolicyLister { + return &validatingAdmissionPolicyLister{indexer: indexer} +} + +// List lists all ValidatingAdmissionPolicies in the indexer. +func (s *validatingAdmissionPolicyLister) List(selector labels.Selector) (ret []*v1beta1.ValidatingAdmissionPolicy, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ValidatingAdmissionPolicy)) + }) + return ret, err +} + +// Get retrieves the ValidatingAdmissionPolicy from the index for a given name. +func (s *validatingAdmissionPolicyLister) Get(name string) (*v1beta1.ValidatingAdmissionPolicy, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("validatingadmissionpolicy"), name) + } + return obj.(*v1beta1.ValidatingAdmissionPolicy), nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go new file mode 100644 index 000000000000..5fcebfd22fbe --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/validatingadmissionpolicybinding.go @@ -0,0 +1,68 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/admissionregistration/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ValidatingAdmissionPolicyBindingLister helps list ValidatingAdmissionPolicyBindings. +// All objects returned here must be treated as read-only. +type ValidatingAdmissionPolicyBindingLister interface { + // List lists all ValidatingAdmissionPolicyBindings in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ValidatingAdmissionPolicyBinding, err error) + // Get retrieves the ValidatingAdmissionPolicyBinding from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.ValidatingAdmissionPolicyBinding, error) + ValidatingAdmissionPolicyBindingListerExpansion +} + +// validatingAdmissionPolicyBindingLister implements the ValidatingAdmissionPolicyBindingLister interface. +type validatingAdmissionPolicyBindingLister struct { + indexer cache.Indexer +} + +// NewValidatingAdmissionPolicyBindingLister returns a new ValidatingAdmissionPolicyBindingLister. +func NewValidatingAdmissionPolicyBindingLister(indexer cache.Indexer) ValidatingAdmissionPolicyBindingLister { + return &validatingAdmissionPolicyBindingLister{indexer: indexer} +} + +// List lists all ValidatingAdmissionPolicyBindings in the indexer. +func (s *validatingAdmissionPolicyBindingLister) List(selector labels.Selector) (ret []*v1beta1.ValidatingAdmissionPolicyBinding, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ValidatingAdmissionPolicyBinding)) + }) + return ret, err +} + +// Get retrieves the ValidatingAdmissionPolicyBinding from the index for a given name. +func (s *validatingAdmissionPolicyBindingLister) Get(name string) (*v1beta1.ValidatingAdmissionPolicyBinding, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("validatingadmissionpolicybinding"), name) + } + return obj.(*v1beta1.ValidatingAdmissionPolicyBinding), nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go b/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go index fd436c3d37d0..e363c7db2c55 100644 --- a/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go +++ b/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go @@ -180,8 +180,5 @@ func ingressEqual(lhs, rhs *v1.LoadBalancerIngress) bool { if lhs.Hostname != rhs.Hostname { return false } - if lhs.IPMode != rhs.IPMode { - return false - } return true } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/warnings.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/warnings.go index c99553367b73..29b1097dffc2 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/warnings.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/warnings.go @@ -53,6 +53,13 @@ func GetWarningsForService(service, oldService *api.Service) []string { warnings = append(warnings, getWarningsForCIDR(field.NewPath("spec").Child("loadBalancerSourceRanges").Index(i), cidr)...) } + if service.Spec.Type == api.ServiceTypeExternalName && len(service.Spec.ExternalIPs) > 0 { + warnings = append(warnings, fmt.Sprintf("spec.externalIPs is ignored when spec.type is %q", api.ServiceTypeExternalName)) + } + if service.Spec.Type != api.ServiceTypeExternalName && service.Spec.ExternalName != "" { + warnings = append(warnings, fmt.Sprintf("spec.externalName is ignored when spec.type is not %q", api.ServiceTypeExternalName)) + } + return warnings } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go index 3566b454c97d..75c68af621a2 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go @@ -380,6 +380,12 @@ type PersistentVolumeStatus struct { // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI // +optional Reason string + // LastPhaseTransitionTime is the time the phase transitioned from one to another + // and automatically resets to current time everytime a volume phase transitions. + // This is an alpha field and requires enabling PersistentVolumeLastPhaseTransitionTime feature. + // +featureGate=PersistentVolumeLastPhaseTransitionTime + // +optional + LastPhaseTransitionTime *metav1.Time } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -4068,15 +4074,6 @@ type LoadBalancerIngress struct { // +optional Hostname string - // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. - // Setting this to "VIP" indicates that traffic is delivered to the node with - // the destination set to the load-balancer's IP and port. - // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with - // the destination set to the node's IP and node port or the pod's IP and port. - // Service implementations may use this information to adjust traffic routing. - // +optional - IPMode *LoadBalancerIPMode - // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +optional @@ -6149,15 +6146,3 @@ type PortStatus struct { // +kubebuilder:validation:MaxLength=316 Error *string } - -// LoadBalancerIPMode represents the mode of the LoadBalancer ingress IP -type LoadBalancerIPMode string - -const ( - // LoadBalancerIPModeVIP indicates that traffic is delivered to the node with - // the destination set to the load-balancer's IP and port. - LoadBalancerIPModeVIP LoadBalancerIPMode = "VIP" - // LoadBalancerIPModeProxy indicates that traffic is delivered to the node or pod with - // the destination set to the node's IP and port or the pod's IP and port. - LoadBalancerIPModeProxy LoadBalancerIPMode = "Proxy" -) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go index e3a43b1fbd7d..51337fe169cb 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go @@ -142,19 +142,6 @@ func SetDefaults_Service(obj *v1.Service) { obj.Spec.AllocateLoadBalancerNodePorts = pointer.Bool(true) } } - - if obj.Spec.Type == v1.ServiceTypeLoadBalancer { - if utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) { - ipMode := v1.LoadBalancerIPModeVIP - - for i, ing := range obj.Status.LoadBalancer.Ingress { - if ing.IP != "" && ing.IPMode == nil { - obj.Status.LoadBalancer.Ingress[i].IPMode = &ipMode - } - } - } - } - } func SetDefaults_Pod(obj *v1.Pod) { // If limits are specified, but requests are not, default requests to limits diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go index ac14b782d7de..8a432e8d7057 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go @@ -4478,7 +4478,6 @@ func Convert_core_List_To_v1_List(in *core.List, out *v1.List, s conversion.Scop func autoConvert_v1_LoadBalancerIngress_To_core_LoadBalancerIngress(in *v1.LoadBalancerIngress, out *core.LoadBalancerIngress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname - out.IPMode = (*core.LoadBalancerIPMode)(unsafe.Pointer(in.IPMode)) out.Ports = *(*[]core.PortStatus)(unsafe.Pointer(&in.Ports)) return nil } @@ -4491,7 +4490,6 @@ func Convert_v1_LoadBalancerIngress_To_core_LoadBalancerIngress(in *v1.LoadBalan func autoConvert_core_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *core.LoadBalancerIngress, out *v1.LoadBalancerIngress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname - out.IPMode = (*v1.LoadBalancerIPMode)(unsafe.Pointer(in.IPMode)) out.Ports = *(*[]v1.PortStatus)(unsafe.Pointer(&in.Ports)) return nil } @@ -5574,6 +5572,7 @@ func autoConvert_v1_PersistentVolumeStatus_To_core_PersistentVolumeStatus(in *v1 out.Phase = core.PersistentVolumePhase(in.Phase) out.Message = in.Message out.Reason = in.Reason + out.LastPhaseTransitionTime = (*metav1.Time)(unsafe.Pointer(in.LastPhaseTransitionTime)) return nil } @@ -5586,6 +5585,7 @@ func autoConvert_core_PersistentVolumeStatus_To_v1_PersistentVolumeStatus(in *co out.Phase = v1.PersistentVolumePhase(in.Phase) out.Message = in.Message out.Reason = in.Reason + out.LastPhaseTransitionTime = (*metav1.Time)(unsafe.Pointer(in.LastPhaseTransitionTime)) return nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go index 634b1b45bdb2..cd9cbbb8b7e2 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go @@ -7048,10 +7048,6 @@ func ValidatePodLogOptions(opts *core.PodLogOptions) field.ErrorList { return allErrs } -var ( - supportedLoadBalancerIPMode = sets.NewString(string(core.LoadBalancerIPModeVIP), string(core.LoadBalancerIPModeProxy)) -) - // ValidateLoadBalancerStatus validates required fields on a LoadBalancerStatus func ValidateLoadBalancerStatus(status *core.LoadBalancerStatus, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} @@ -7062,17 +7058,6 @@ func ValidateLoadBalancerStatus(status *core.LoadBalancerStatus, fldPath *field. allErrs = append(allErrs, field.Invalid(idxPath.Child("ip"), ingress.IP, "must be a valid IP address")) } } - - if utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) && ingress.IPMode == nil { - if len(ingress.IP) > 0 { - allErrs = append(allErrs, field.Required(idxPath.Child("ipMode"), "must be specified when `ip` is set")) - } - } else if ingress.IPMode != nil && len(ingress.IP) == 0 { - allErrs = append(allErrs, field.Forbidden(idxPath.Child("ipMode"), "may not be specified when `ip` is not set")) - } else if ingress.IPMode != nil && !supportedLoadBalancerIPMode.Has(string(*ingress.IPMode)) { - allErrs = append(allErrs, field.NotSupported(idxPath.Child("ipMode"), ingress.IPMode, supportedLoadBalancerIPMode.List())) - } - if len(ingress.Hostname) > 0 { for _, msg := range validation.IsDNS1123Subdomain(ingress.Hostname) { allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, msg)) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go index 92366a9dcf4e..471fdbd6f398 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go @@ -2230,11 +2230,6 @@ func (in *List) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) { *out = *in - if in.IPMode != nil { - in, out := &in.IPMode, &out.IPMode - *out = new(LoadBalancerIPMode) - **out = **in - } if in.Ports != nil { in, out := &in.Ports, &out.Ports *out = make([]PortStatus, len(*in)) @@ -2928,7 +2923,7 @@ func (in *PersistentVolume) DeepCopyInto(out *PersistentVolume) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) return } @@ -3370,6 +3365,10 @@ func (in *PersistentVolumeSpec) DeepCopy() *PersistentVolumeSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PersistentVolumeStatus) DeepCopyInto(out *PersistentVolumeStatus) { *out = *in + if in.LastPhaseTransitionTime != nil { + in, out := &in.LastPhaseTransitionTime, &out.LastPhaseTransitionTime + *out = (*in).DeepCopy() + } return } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go index 5e94893f6f1f..6a44ec3c0364 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go @@ -958,12 +958,37 @@ func FilterActivePods(logger klog.Logger, pods []*v1.Pod) []*v1.Pod { return result } +func FilterTerminatingPods(pods []*v1.Pod) []*v1.Pod { + var result []*v1.Pod + for _, p := range pods { + if IsPodTerminating(p) { + result = append(result, p) + } + } + return result +} + +func CountTerminatingPods(pods []*v1.Pod) int32 { + numberOfTerminatingPods := 0 + for _, p := range pods { + if IsPodTerminating(p) { + numberOfTerminatingPods += 1 + } + } + return int32(numberOfTerminatingPods) +} + func IsPodActive(p *v1.Pod) bool { return v1.PodSucceeded != p.Status.Phase && v1.PodFailed != p.Status.Phase && p.DeletionTimestamp == nil } +func IsPodTerminating(p *v1.Pod) bool { + return !podutil.IsPodTerminal(p) && + p.DeletionTimestamp != nil +} + // FilterActiveReplicaSets returns replica sets that have (or at least ought to have) pods. func FilterActiveReplicaSets(replicaSets []*apps.ReplicaSet) []*apps.ReplicaSet { activeFilter := func(rs *apps.ReplicaSet) bool { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index dde237e8b086..8b27be3f3078 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -626,6 +626,13 @@ const ( // Enables PDBUnhealthyPodEvictionPolicy for PodDisruptionBudgets PDBUnhealthyPodEvictionPolicy featuregate.Feature = "PDBUnhealthyPodEvictionPolicy" + // owner: @RomanBednar + // kep: https://kep.k8s.io/3762 + // alpha: v1.28 + // + // Adds a new field to persistent volumes which holds a timestamp of when the volume last transitioned its phase. + PersistentVolumeLastPhaseTransitionTime featuregate.Feature = "PersistentVolumeLastPhaseTransitionTime" + // owner: @haircommander // kep: https://kep.k8s.io/2364 // alpha: v1.23 @@ -927,12 +934,6 @@ const ( // // Enables In-Place Pod Vertical Scaling InPlacePodVerticalScaling featuregate.Feature = "InPlacePodVerticalScaling" - - // owner: @Sh4d1,@RyanAoh - // kep: http://kep.k8s.io/1860 - // alpha: v1.29 - // LoadBalancerIPMode enables the IPMode field in the LoadBalancerIngress status of a Service - LoadBalancerIPMode featuregate.Feature = "LoadBalancerIPMode" ) func init() { @@ -1104,6 +1105,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS PDBUnhealthyPodEvictionPolicy: {Default: true, PreRelease: featuregate.Beta}, + PersistentVolumeLastPhaseTransitionTime: {Default: false, PreRelease: featuregate.Alpha}, + PodAndContainerStatsFromCRI: {Default: false, PreRelease: featuregate.Alpha}, PodDeletionCost: {Default: true, PreRelease: featuregate.Beta}, @@ -1182,8 +1185,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS PodIndexLabel: {Default: true, PreRelease: featuregate.Beta}, - LoadBalancerIPMode: {Default: false, PreRelease: featuregate.Alpha}, - // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: @@ -1197,7 +1198,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS genericfeatures.APIResponseCompression: {Default: true, PreRelease: featuregate.Beta}, - genericfeatures.ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Alpha}, + genericfeatures.ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Beta}, genericfeatures.CustomResourceValidationExpressions: {Default: true, PreRelease: featuregate.Beta}, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go index c600d49bc258..c76389c0d9ff 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go @@ -20,21 +20,26 @@ limitations under the License. package kuberuntime import ( + "errors" "fmt" - cadvisorv1 "github.com/google/cadvisor/info/v1" - kubeapiqos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" "math" "os" + "path/filepath" "strconv" + "sync" "time" + "github.com/containerd/cgroups" + cadvisorv1 "github.com/google/cadvisor/info/v1" libcontainercgroups "github.com/opencontainers/runc/libcontainer/cgroups" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" utilfeature "k8s.io/apiserver/pkg/util/feature" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + kubeapiqos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -305,6 +310,36 @@ var isCgroup2UnifiedMode = func() bool { return libcontainercgroups.IsCgroup2UnifiedMode() } +var ( + swapControllerAvailability bool + swapControllerAvailabilityOnce sync.Once +) + +func swapControllerAvailable() bool { + // See https://github.com/containerd/containerd/pull/7838/ + swapControllerAvailabilityOnce.Do(func() { + const warn = "Failed to detect the availability of the swap controller, assuming not available" + p := "/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes" + if libcontainercgroups.IsCgroup2UnifiedMode() { + // memory.swap.max does not exist in the cgroup root, so we check /sys/fs/cgroup//memory.swap.max + _, unified, err := cgroups.ParseCgroupFileUnified("/proc/self/cgroup") + if err != nil { + klog.V(5).ErrorS(fmt.Errorf("failed to parse /proc/self/cgroup: %w", err), warn) + return + } + p = filepath.Join("/sys/fs/cgroup", unified, "memory.swap.max") + } + if _, err := os.Stat(p); err != nil { + if !errors.Is(err, os.ErrNotExist) { + klog.V(5).ErrorS(err, warn) + } + return + } + swapControllerAvailability = true + }) + return swapControllerAvailability +} + type swapConfigurationHelper struct { machineInfo cadvisorv1.MachineInfo } @@ -337,10 +372,12 @@ func (m swapConfigurationHelper) ConfigureLimitedSwap(lcr *runtimeapi.LinuxConta func (m swapConfigurationHelper) ConfigureNoSwap(lcr *runtimeapi.LinuxContainerResources) { if !isCgroup2UnifiedMode() { - // memorySwapLimit = total permitted memory+swap; if equal to memory limit, => 0 swap above memory limit - // Some swapping is still possible. - // Note that if memory limit is 0, memory swap limit is ignored. - lcr.MemorySwapLimitInBytes = lcr.MemoryLimitInBytes + if swapControllerAvailable() { + // memorySwapLimit = total permitted memory+swap; if equal to memory limit, => 0 swap above memory limit + // Some swapping is still possible. + // Note that if memory limit is 0, memory swap limit is ignored. + lcr.MemorySwapLimitInBytes = lcr.MemoryLimitInBytes + } return } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go index 60cfd690fbff..ea2d72433878 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/prober/worker.go @@ -18,9 +18,7 @@ package prober import ( "context" - "fmt" "math/rand" - "strings" "time" v1 "k8s.io/api/core/v1" @@ -28,7 +26,6 @@ import ( "k8s.io/component-base/metrics" "k8s.io/klog/v2" podutil "k8s.io/kubernetes/pkg/api/v1/pod" - "k8s.io/kubernetes/pkg/apis/apps" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/prober/results" ) @@ -115,12 +112,10 @@ func newWorker( w.initialValue = results.Unknown } - podName := getPodLabelName(w.pod) - basicMetricLabels := metrics.Labels{ "probe_type": w.probeType.String(), "container": w.container.Name, - "pod": podName, + "pod": w.pod.Name, "namespace": w.pod.Namespace, "pod_uid": string(w.pod.UID), } @@ -128,7 +123,7 @@ func newWorker( proberDurationLabels := metrics.Labels{ "probe_type": w.probeType.String(), "container": w.container.Name, - "pod": podName, + "pod": w.pod.Name, "namespace": w.pod.Namespace, } @@ -340,15 +335,3 @@ func deepCopyPrometheusLabels(m metrics.Labels) metrics.Labels { } return ret } - -func getPodLabelName(pod *v1.Pod) string { - podName := pod.Name - if pod.GenerateName != "" { - podNameSlice := strings.Split(pod.Name, "-") - podName = strings.Join(podNameSlice[:len(podNameSlice)-1], "-") - if label, ok := pod.GetLabels()[apps.DefaultDeploymentUniqueLabelKey]; ok { - podName = strings.ReplaceAll(podName, fmt.Sprintf("-%s", label), "") - } - } - return podName -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go index b3b55dab978d..ab5dc7df8976 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go @@ -50,7 +50,7 @@ func deleteStaleServiceConntrackEntries(isIPv6 bool, exec utilexec.Interface, sv for _, extIP := range svcInfo.ExternalIPStrings() { conntrackCleanupServiceIPs.Insert(extIP) } - for _, lbIP := range svcInfo.LoadBalancerVIPStrings() { + for _, lbIP := range svcInfo.LoadBalancerIPStrings() { conntrackCleanupServiceIPs.Insert(lbIP) } nodePort := svcInfo.NodePort() @@ -100,7 +100,7 @@ func deleteStaleEndpointConntrackEntries(exec utilexec.Interface, svcPortMap pro klog.ErrorS(err, "Failed to delete endpoint connections for externalIP", "servicePortName", epSvcPair.ServicePortName, "externalIP", extIP) } } - for _, lbIP := range svcInfo.LoadBalancerVIPStrings() { + for _, lbIP := range svcInfo.LoadBalancerIPStrings() { err := ClearEntriesForNAT(exec, lbIP, endpointIP, v1.ProtocolUDP) if err != nil { klog.ErrorS(err, "Failed to delete endpoint connections for LoadBalancerIP", "servicePortName", epSvcPair.ServicePortName, "loadBalancerIP", lbIP) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go index 19c354e9ac13..0a7e37810e5b 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go @@ -1172,7 +1172,7 @@ func (proxier *Proxier) syncProxyRules() { } // Capture load-balancer ingress. - for _, ingress := range svcInfo.LoadBalancerVIPStrings() { + for _, ingress := range svcInfo.LoadBalancerIPStrings() { // ipset call entry = &utilipset.Entry{ IP: ingress, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go index 1f84f0bcd1d5..279191f57b25 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go @@ -44,7 +44,7 @@ type BaseServicePortInfo struct { port int protocol v1.Protocol nodePort int - loadBalancerVIPs []string + loadBalancerStatus v1.LoadBalancerStatus sessionAffinityType v1.ServiceAffinity stickyMaxAgeSeconds int externalIPs []string @@ -108,9 +108,13 @@ func (bsvcPortInfo *BaseServicePortInfo) ExternalIPStrings() []string { return bsvcPortInfo.externalIPs } -// LoadBalancerVIPStrings is part of ServicePort interface. -func (bsvcPortInfo *BaseServicePortInfo) LoadBalancerVIPStrings() []string { - return bsvcPortInfo.loadBalancerVIPs +// LoadBalancerIPStrings is part of ServicePort interface. +func (bsvcPortInfo *BaseServicePortInfo) LoadBalancerIPStrings() []string { + var ips []string + for _, ing := range bsvcPortInfo.loadBalancerStatus.Ingress { + ips = append(ips, ing.IP) + } + return ips } // ExternalPolicyLocal is part of ServicePort interface. @@ -135,7 +139,7 @@ func (bsvcPortInfo *BaseServicePortInfo) HintsAnnotation() string { // ExternallyAccessible is part of ServicePort interface. func (bsvcPortInfo *BaseServicePortInfo) ExternallyAccessible() bool { - return bsvcPortInfo.nodePort != 0 || len(bsvcPortInfo.loadBalancerVIPs) != 0 || len(bsvcPortInfo.externalIPs) != 0 + return bsvcPortInfo.nodePort != 0 || len(bsvcPortInfo.loadBalancerStatus.Ingress) != 0 || len(bsvcPortInfo.externalIPs) != 0 } // UsesClusterEndpoints is part of ServicePort interface. @@ -207,21 +211,25 @@ func (sct *ServiceChangeTracker) newBaseServiceInfo(port *v1.ServicePort, servic "ipFamily", sct.ipFamily, "loadBalancerSourceRanges", strings.Join(cidrs, ", "), "service", klog.KObj(service)) } - // Obtain Load Balancer Ingress - var invalidIPs []string + // Obtain Load Balancer Ingress IPs + var ips []string for _, ing := range service.Status.LoadBalancer.Ingress { - if ing.IP == "" { - continue - } - if ipFamily := proxyutil.GetIPFamilyFromIP(ing.IP); ipFamily == sct.ipFamily && proxyutil.IsVIPMode(ing) { - info.loadBalancerVIPs = append(info.loadBalancerVIPs, ing.IP) - } else { - invalidIPs = append(invalidIPs, ing.IP) + if ing.IP != "" { + ips = append(ips, ing.IP) } } - if len(invalidIPs) > 0 { - klog.V(4).InfoS("Service change tracker ignored the following load balancer ingress IPs for given Service as they don't match the IP Family", - "ipFamily", sct.ipFamily, "loadBalancerIngressIPs", strings.Join(invalidIPs, ", "), "service", klog.KObj(service)) + + if len(ips) > 0 { + ipFamilyMap = proxyutil.MapIPsByIPFamily(ips) + + if ipList, ok := ipFamilyMap[proxyutil.OtherIPFamily(sct.ipFamily)]; ok && len(ipList) > 0 { + klog.V(4).InfoS("Service change tracker ignored the following load balancer ingress IPs for given Service as they don't match the IP Family", + "ipFamily", sct.ipFamily, "loadBalancerIngressIps", strings.Join(ipList, ", "), "service", klog.KObj(service)) + } + // Create the LoadBalancerStatus with the filtered IPs + for _, ip := range ipFamilyMap[sct.ipFamily] { + info.loadBalancerStatus.Ingress = append(info.loadBalancerStatus.Ingress, v1.LoadBalancerIngress{IP: ip}) + } } if apiservice.NeedsHealthCheck(service) { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go index e136608c2bbf..7c9d19ab8183 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go @@ -73,8 +73,8 @@ type ServicePort interface { StickyMaxAgeSeconds() int // ExternalIPStrings returns service ExternalIPs as a string array. ExternalIPStrings() []string - // LoadBalancerVIPStrings returns service LoadBalancerIPs which are VIP mode as a string array. - LoadBalancerVIPStrings() []string + // LoadBalancerIPStrings returns service LoadBalancerIPs as a string array. + LoadBalancerIPStrings() []string // Protocol returns service protocol. Protocol() v1.Protocol // LoadBalancerSourceRanges returns service LoadBalancerSourceRanges if present empty array if not diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go index d18f93a1d155..3f56bb6dbf5e 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go @@ -27,11 +27,9 @@ import ( "k8s.io/apimachinery/pkg/types" utilrand "k8s.io/apimachinery/pkg/util/rand" "k8s.io/apimachinery/pkg/util/sets" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/events" utilsysctl "k8s.io/component-helpers/node/util/sysctl" helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - "k8s.io/kubernetes/pkg/features" netutils "k8s.io/utils/net" "k8s.io/klog/v2" @@ -184,7 +182,7 @@ func MapIPsByIPFamily(ipStrings []string) map[v1.IPFamily][]string { ipFamilyMap := map[v1.IPFamily][]string{} for _, ip := range ipStrings { // Handle only the valid IPs - if ipFamily := GetIPFamilyFromIP(ip); ipFamily != "" { + if ipFamily := getIPFamilyFromIP(ip); ipFamily != "" { ipFamilyMap[ipFamily] = append(ipFamilyMap[ipFamily], ip) } else { // this function is called in multiple places. All of which @@ -215,26 +213,29 @@ func MapCIDRsByIPFamily(cidrStrings []string) map[v1.IPFamily][]string { return ipFamilyMap } -// GetIPFamilyFromIP Returns the IP family of ipStr, or "" if ipStr can't be parsed as an IP -func GetIPFamilyFromIP(ipStr string) v1.IPFamily { - return convertToV1IPFamily(netutils.IPFamilyOfString(ipStr)) +// Returns the IP family of ipStr, or "" if ipStr can't be parsed as an IP +func getIPFamilyFromIP(ipStr string) v1.IPFamily { + netIP := netutils.ParseIPSloppy(ipStr) + if netIP == nil { + return "" + } + + if netutils.IsIPv6(netIP) { + return v1.IPv6Protocol + } + return v1.IPv4Protocol } // Returns the IP family of cidrStr, or "" if cidrStr can't be parsed as a CIDR func getIPFamilyFromCIDR(cidrStr string) v1.IPFamily { - return convertToV1IPFamily(netutils.IPFamilyOfCIDRString(cidrStr)) -} - -// Convert netutils.IPFamily to v1.IPFamily -func convertToV1IPFamily(ipFamily netutils.IPFamily) v1.IPFamily { - switch ipFamily { - case netutils.IPv4: - return v1.IPv4Protocol - case netutils.IPv6: + _, netCIDR, err := netutils.ParseCIDRSloppy(cidrStr) + if err != nil { + return "" + } + if netutils.IsIPv6CIDR(netCIDR) { return v1.IPv6Protocol } - - return "" + return v1.IPv4Protocol } // OtherIPFamily returns the other ip family @@ -330,13 +331,3 @@ func RevertPorts(replacementPortsMap, originalPortsMap map[netutils.LocalPort]ne } } } - -func IsVIPMode(ing v1.LoadBalancerIngress) bool { - if !utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) { - return true // backwards compat - } - if ing.IPMode == nil { - return true - } - return *ing.IPMode == v1.LoadBalancerIPModeVIP -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go index da6b72742199..ba3c00edd214 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go @@ -732,6 +732,10 @@ func (p *PriorityQueue) AddUnschedulableIfNotPresent(logger klog.Logger, pInfo * // In this case, we try to requeue this Pod to activeQ/backoffQ. queue := p.requeuePodViaQueueingHint(logger, pInfo, schedulingHint, ScheduleAttemptFailure) logger.V(6).Info("Pod moved to an internal scheduling queue", "pod", klog.KObj(pod), "event", ScheduleAttemptFailure, "queue", queue, "schedulingCycle", podSchedulingCycle) + if queue == activeQ { + // When the Pod is moved to activeQ, need to let p.cond know so that the Pod will be pop()ed out. + p.cond.Broadcast() + } p.addNominatedPodUnlocked(logger, pInfo.PodInfo, nil) return nil diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go index 02320d2300fc..525e1af86320 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go @@ -121,6 +121,7 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) { status := sched.bindingCycle(bindingCycleCtx, state, fwk, scheduleResult, assumedPodInfo, start, podsToActivate) if !status.IsSuccess() { sched.handleBindingCycleError(bindingCycleCtx, state, fwk, assumedPodInfo, start, scheduleResult, status) + return } // Usually, DonePod is called inside the scheduling queue, // but in this case, we need to call it here because this Pod won't go back to the scheduling queue. diff --git a/cluster-autoscaler/vendor/k8s.io/legacy-cloud-providers/azure/azure.go b/cluster-autoscaler/vendor/k8s.io/legacy-cloud-providers/azure/azure.go index 461ef3171ccd..928532ceb4cc 100644 --- a/cluster-autoscaler/vendor/k8s.io/legacy-cloud-providers/azure/azure.go +++ b/cluster-autoscaler/vendor/k8s.io/legacy-cloud-providers/azure/azure.go @@ -41,7 +41,6 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" cloudprovider "k8s.io/cloud-provider" - cloudproviderapi "k8s.io/cloud-provider/api" "k8s.io/klog/v2" "k8s.io/legacy-cloud-providers/azure/auth" azcache "k8s.io/legacy-cloud-providers/azure/cache" @@ -858,14 +857,6 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { case hasExcludeBalancerLabel: az.excludeLoadBalancerNodes.Insert(newNode.ObjectMeta.Name) - case !isNodeReady(newNode) && getCloudTaint(newNode.Spec.Taints) == nil: - // If not in ready state and not a newly created node, add to excludeLoadBalancerNodes cache. - // New nodes (tainted with "node.cloudprovider.kubernetes.io/uninitialized") should not be - // excluded from load balancers regardless of their state, so as to reduce the number of - // VMSS API calls and not provoke VMScaleSetActiveModelsCountLimitReached. - // (https://github.com/kubernetes-sigs/cloud-provider-azure/issues/851) - az.excludeLoadBalancerNodes.Insert(newNode.ObjectMeta.Name) - default: // Nodes not falling into the three cases above are valid backends and // should not appear in excludeLoadBalancerNodes cache. @@ -995,21 +986,3 @@ func (az *Cloud) ShouldNodeExcludedFromLoadBalancer(nodeName string) (bool, erro return az.excludeLoadBalancerNodes.Has(nodeName), nil } - -func isNodeReady(node *v1.Node) bool { - for _, cond := range node.Status.Conditions { - if cond.Type == v1.NodeReady && cond.Status == v1.ConditionTrue { - return true - } - } - return false -} - -func getCloudTaint(taints []v1.Taint) *v1.Taint { - for _, taint := range taints { - if taint.Key == cloudproviderapi.TaintExternalCloudProvider { - return &taint - } - } - return nil -} diff --git a/cluster-autoscaler/vendor/modules.txt b/cluster-autoscaler/vendor/modules.txt index edd7fddeaea8..3a7b3295520a 100644 --- a/cluster-autoscaler/vendor/modules.txt +++ b/cluster-autoscaler/vendor/modules.txt @@ -187,6 +187,7 @@ github.com/cilium/ebpf/link github.com/container-storage-interface/spec/lib/go/csi # github.com/containerd/cgroups v1.1.0 ## explicit; go 1.17 +github.com/containerd/cgroups github.com/containerd/cgroups/stats/v1 # github.com/containerd/console v1.0.3 ## explicit; go 1.13 @@ -731,6 +732,7 @@ go.uber.org/zap/zapgrpc ## explicit; go 1.17 golang.org/x/crypto/cryptobyte golang.org/x/crypto/cryptobyte/asn1 +golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/nacl/secretbox @@ -744,7 +746,7 @@ golang.org/x/exp/slices # golang.org/x/mod v0.10.0 ## explicit; go 1.17 golang.org/x/mod/semver -# golang.org/x/net v0.12.0 +# golang.org/x/net v0.13.0 ## explicit; go 1.17 golang.org/x/net/bpf golang.org/x/net/context @@ -989,7 +991,7 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/api v0.28.0-beta.0 => k8s.io/api v0.28.0-beta.0 +# k8s.io/api v0.28.0 => k8s.io/api v0.28.0 ## explicit; go 1.20 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -1045,10 +1047,10 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.28.0-beta.0 +# k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.28.0 ## explicit; go 1.20 k8s.io/apiextensions-apiserver/pkg/features -# k8s.io/apimachinery v0.28.0-beta.0 => k8s.io/apimachinery v0.28.0-beta.0 +# k8s.io/apimachinery v0.28.0 => k8s.io/apimachinery v0.28.0 ## explicit; go 1.20 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -1111,7 +1113,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.28.0-beta.0 => k8s.io/apiserver v0.28.0-beta.0 +# k8s.io/apiserver v0.28.0 => k8s.io/apiserver v0.28.0 ## explicit; go 1.20 k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/cel @@ -1256,7 +1258,7 @@ k8s.io/apiserver/plugin/pkg/audit/truncate k8s.io/apiserver/plugin/pkg/audit/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook -# k8s.io/client-go v0.28.0-beta.0 => k8s.io/client-go v0.28.0-beta.0 +# k8s.io/client-go v0.28.0 => k8s.io/client-go v0.28.0 ## explicit; go 1.20 k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1alpha1 @@ -1582,7 +1584,7 @@ k8s.io/client-go/util/homedir k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/cloud-provider v0.28.0-beta.0 => k8s.io/cloud-provider v0.28.0-beta.0 +# k8s.io/cloud-provider v0.28.0 => k8s.io/cloud-provider v0.28.0 ## explicit; go 1.20 k8s.io/cloud-provider k8s.io/cloud-provider/api @@ -1605,7 +1607,7 @@ k8s.io/cloud-provider/volume/helpers # k8s.io/cloud-provider-aws v1.27.0 ## explicit; go 1.20 k8s.io/cloud-provider-aws/pkg/providers/v1 -# k8s.io/component-base v0.28.0-beta.0 => k8s.io/component-base v0.28.0-beta.0 +# k8s.io/component-base v0.28.0 => k8s.io/component-base v0.28.0 ## explicit; go 1.20 k8s.io/component-base/cli/flag k8s.io/component-base/codec @@ -1633,7 +1635,7 @@ k8s.io/component-base/tracing k8s.io/component-base/tracing/api/v1 k8s.io/component-base/version k8s.io/component-base/version/verflag -# k8s.io/component-helpers v0.28.0-beta.0 => k8s.io/component-helpers v0.28.0-beta.0 +# k8s.io/component-helpers v0.28.0 => k8s.io/component-helpers v0.28.0 ## explicit; go 1.20 k8s.io/component-helpers/apimachinery/lease k8s.io/component-helpers/node/topology @@ -1643,7 +1645,7 @@ k8s.io/component-helpers/scheduling/corev1 k8s.io/component-helpers/scheduling/corev1/nodeaffinity k8s.io/component-helpers/storage/ephemeral k8s.io/component-helpers/storage/volume -# k8s.io/controller-manager v0.28.0-beta.0 => k8s.io/controller-manager v0.28.0-beta.0 +# k8s.io/controller-manager v0.28.0 => k8s.io/controller-manager v0.28.0 ## explicit; go 1.20 k8s.io/controller-manager/config k8s.io/controller-manager/config/v1 @@ -1655,16 +1657,16 @@ k8s.io/controller-manager/pkg/features k8s.io/controller-manager/pkg/features/register k8s.io/controller-manager/pkg/leadermigration/config k8s.io/controller-manager/pkg/leadermigration/options -# k8s.io/cri-api v0.28.0-beta.0 => k8s.io/cri-api v0.28.0-beta.0 +# k8s.io/cri-api v0.28.0 => k8s.io/cri-api v0.28.0 ## explicit; go 1.20 k8s.io/cri-api/pkg/apis k8s.io/cri-api/pkg/apis/runtime/v1 k8s.io/cri-api/pkg/errors -# k8s.io/csi-translation-lib v0.27.0 => k8s.io/csi-translation-lib v0.28.0-beta.0 +# k8s.io/csi-translation-lib v0.27.0 => k8s.io/csi-translation-lib v0.28.0 ## explicit; go 1.20 k8s.io/csi-translation-lib k8s.io/csi-translation-lib/plugins -# k8s.io/dynamic-resource-allocation v0.0.0 => k8s.io/dynamic-resource-allocation v0.28.0-beta.0 +# k8s.io/dynamic-resource-allocation v0.0.0 => k8s.io/dynamic-resource-allocation v0.28.0 ## explicit; go 1.20 k8s.io/dynamic-resource-allocation/resourceclaim # k8s.io/klog/v2 v2.100.1 @@ -1675,7 +1677,7 @@ k8s.io/klog/v2/internal/clock k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity -# k8s.io/kms v0.28.0-beta.0 => k8s.io/kms v0.28.0-beta.0 +# k8s.io/kms v0.28.0 => k8s.io/kms v0.28.0 ## explicit; go 1.20 k8s.io/kms/apis/v1beta1 k8s.io/kms/apis/v2 @@ -1703,15 +1705,15 @@ k8s.io/kube-openapi/pkg/validation/errors k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson -# k8s.io/kube-scheduler v0.0.0 => k8s.io/kube-scheduler v0.28.0-beta.0 +# k8s.io/kube-scheduler v0.0.0 => k8s.io/kube-scheduler v0.28.0 ## explicit; go 1.20 k8s.io/kube-scheduler/config/v1 k8s.io/kube-scheduler/config/v1beta3 k8s.io/kube-scheduler/extender/v1 -# k8s.io/kubectl v0.0.0 => k8s.io/kubectl v0.28.0-beta.0 +# k8s.io/kubectl v0.0.0 => k8s.io/kubectl v0.28.0 ## explicit; go 1.20 k8s.io/kubectl/pkg/scale -# k8s.io/kubelet v0.28.0-beta.0 => k8s.io/kubelet v0.28.0-beta.0 +# k8s.io/kubelet v0.28.0 => k8s.io/kubelet v0.28.0 ## explicit; go 1.20 k8s.io/kubelet/config/v1 k8s.io/kubelet/config/v1alpha1 @@ -1732,7 +1734,7 @@ k8s.io/kubelet/pkg/apis/stats/v1alpha1 k8s.io/kubelet/pkg/cri/streaming k8s.io/kubelet/pkg/cri/streaming/portforward k8s.io/kubelet/pkg/cri/streaming/remotecommand -# k8s.io/kubernetes v1.28.0-beta.0 +# k8s.io/kubernetes v1.28.0 ## explicit; go 1.20 k8s.io/kubernetes/cmd/kubelet/app k8s.io/kubernetes/cmd/kubelet/app/options @@ -1991,7 +1993,7 @@ k8s.io/kubernetes/pkg/volume/vsphere_volume k8s.io/kubernetes/pkg/windows/service k8s.io/kubernetes/test/utils k8s.io/kubernetes/third_party/forked/golang/expansion -# k8s.io/legacy-cloud-providers v0.0.0 => k8s.io/legacy-cloud-providers v0.28.0-beta.0 +# k8s.io/legacy-cloud-providers v0.0.0 => k8s.io/legacy-cloud-providers v0.28.0 ## explicit; go 1.20 k8s.io/legacy-cloud-providers/azure k8s.io/legacy-cloud-providers/azure/auth @@ -2033,7 +2035,7 @@ k8s.io/legacy-cloud-providers/gce/gcpcredential k8s.io/legacy-cloud-providers/vsphere k8s.io/legacy-cloud-providers/vsphere/vclib k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers -# k8s.io/mount-utils v0.26.0-alpha.0 => k8s.io/mount-utils v0.28.0-beta.0 +# k8s.io/mount-utils v0.26.0-alpha.0 => k8s.io/mount-utils v0.28.0 ## explicit; go 1.20 k8s.io/mount-utils # k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 @@ -2134,34 +2136,34 @@ sigs.k8s.io/yaml # github.com/aws/aws-sdk-go/service/eks => github.com/aws/aws-sdk-go/service/eks v1.38.49 # github.com/digitalocean/godo => github.com/digitalocean/godo v1.27.0 # github.com/rancher/go-rancher => github.com/rancher/go-rancher v0.1.0 -# k8s.io/api => k8s.io/api v0.28.0-beta.0 -# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0-beta.0 -# k8s.io/apimachinery => k8s.io/apimachinery v0.28.0-beta.0 -# k8s.io/apiserver => k8s.io/apiserver v0.28.0-beta.0 -# k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0-beta.0 -# k8s.io/client-go => k8s.io/client-go v0.28.0-beta.0 -# k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0-beta.0 -# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0-beta.0 -# k8s.io/code-generator => k8s.io/code-generator v0.28.0-beta.0 -# k8s.io/component-base => k8s.io/component-base v0.28.0-beta.0 -# k8s.io/component-helpers => k8s.io/component-helpers v0.28.0-beta.0 -# k8s.io/controller-manager => k8s.io/controller-manager v0.28.0-beta.0 -# k8s.io/cri-api => k8s.io/cri-api v0.28.0-beta.0 -# k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0-beta.0 -# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0-beta.0 -# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0-beta.0 -# k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0-beta.0 -# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0-beta.0 -# k8s.io/kubectl => k8s.io/kubectl v0.28.0-beta.0 -# k8s.io/kubelet => k8s.io/kubelet v0.28.0-beta.0 -# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0-beta.0 -# k8s.io/metrics => k8s.io/metrics v0.28.0-beta.0 -# k8s.io/mount-utils => k8s.io/mount-utils v0.28.0-beta.0 -# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0-beta.0 -# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0-beta.0 -# k8s.io/sample-controller => k8s.io/sample-controller v0.28.0-beta.0 -# k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0-beta.0 -# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0-beta.0 -# k8s.io/kms => k8s.io/kms v0.28.0-beta.0 +# k8s.io/api => k8s.io/api v0.28.0 +# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0 +# k8s.io/apimachinery => k8s.io/apimachinery v0.28.0 +# k8s.io/apiserver => k8s.io/apiserver v0.28.0 +# k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0 +# k8s.io/client-go => k8s.io/client-go v0.28.0 +# k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0 +# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0 +# k8s.io/code-generator => k8s.io/code-generator v0.28.0 +# k8s.io/component-base => k8s.io/component-base v0.28.0 +# k8s.io/component-helpers => k8s.io/component-helpers v0.28.0 +# k8s.io/controller-manager => k8s.io/controller-manager v0.28.0 +# k8s.io/cri-api => k8s.io/cri-api v0.28.0 +# k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0 +# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0 +# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0 +# k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0 +# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0 +# k8s.io/kubectl => k8s.io/kubectl v0.28.0 +# k8s.io/kubelet => k8s.io/kubelet v0.28.0 +# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0 +# k8s.io/metrics => k8s.io/metrics v0.28.0 +# k8s.io/mount-utils => k8s.io/mount-utils v0.28.0 +# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0 +# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0 +# k8s.io/sample-controller => k8s.io/sample-controller v0.28.0 +# k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0 +# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0 +# k8s.io/kms => k8s.io/kms v0.28.0 # k8s.io/noderesourcetopology-api => k8s.io/noderesourcetopology-api v0.27.0 -# k8s.io/endpointslice => k8s.io/endpointslice v0.28.0-beta.0 +# k8s.io/endpointslice => k8s.io/endpointslice v0.28.0 diff --git a/cluster-autoscaler/version/version.go b/cluster-autoscaler/version/version.go index d07efaf2b40d..92a5f905b7cd 100644 --- a/cluster-autoscaler/version/version.go +++ b/cluster-autoscaler/version/version.go @@ -17,4 +17,4 @@ limitations under the License. package version // ClusterAutoscalerVersion contains version of CA. -const ClusterAutoscalerVersion = "1.28.0-beta.0" +const ClusterAutoscalerVersion = "1.28.0" From 97f06c03253b8e368f5b1e3f9f1618a00494e6f5 Mon Sep 17 00:00:00 2001 From: David Benque Date: Mon, 28 Aug 2023 15:20:12 +0200 Subject: [PATCH 019/125] Log normal instead of error for empty key --- .../resource/pod/recommendation/recommendation_provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go index 3c93338f6716..3522f1b5ae91 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider.go @@ -114,7 +114,7 @@ func (p *recommendationProvider) GetContainersResourcesForPod(pod *core.Pod, vpa // Ensure that we are not propagating empty resource key if any. for _, resource := range containerResources { if resource.RemoveEmptyResourceKeyIfAny() { - klog.Error("An empty resource key was found and purged for pod=%s/%s with vpa=", pod.Namespace, pod.Name, vpa.Name) + klog.Infof("An empty resource key was found and purged for pod=%s/%s with vpa=", pod.Namespace, pod.Name, vpa.Name) } } From cc67319d18982eff20c1ae11cf766fac9bb52010 Mon Sep 17 00:00:00 2001 From: David Benque Date: Mon, 28 Aug 2023 15:23:01 +0200 Subject: [PATCH 020/125] fix unittest --- .../resource/pod/recommendation/recommendation_provider_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go index 0ef3e76580c9..040b16c326a6 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation/recommendation_provider_test.go @@ -311,7 +311,7 @@ func TestUpdateResourceRequests(t *testing.T) { return } - assert.Contains(t, resources, "", "expected empty resource to be removed") + assert.NotContains(t, resources, "", "expected empty resource to be removed") cpuRequest := resources[0].Requests[apiv1.ResourceCPU] assert.Equal(t, tc.expectedCPU.Value(), cpuRequest.Value(), "cpu request doesn't match") From 034632a89c9d21165d9d4d96653cfea5a6e6074b Mon Sep 17 00:00:00 2001 From: Lally Singh Date: Tue, 2 May 2023 15:54:17 -0400 Subject: [PATCH 021/125] External Metrics w/E2E testing, prometheus, & KIND. --- .../hack/deploy-for-e2e-locally.sh | 83 ++ .../e2e/Dockerfile.externalmetrics-writer | 18 + .../hack/e2e/k8s-metrics-server.yaml | 244 +++++ .../hack/e2e/kind-with-registry.sh | 58 ++ .../hack/e2e/metrics-pump.yaml | 36 + .../hack/e2e/prometheus-adapter.yaml | 202 ++++ .../hack/e2e/prometheus.yaml | 264 ++++++ ...ecommender-externalmetrics-deployment.yaml | 42 + .../hack/e2e/vpa-rbac.diff | 18 + vertical-pod-autoscaler/hack/emit-metrics.py | 156 ++++ vertical-pod-autoscaler/hack/local-cluster.md | 32 + .../hack/run-e2e-locally.sh | 70 ++ .../hack/vpa-process-yamls.sh | 19 +- .../pkg/recommender/Makefile | 6 +- .../input/metrics/metrics_client.go | 29 +- .../input/metrics/metrics_client_test_util.go | 2 +- .../input/metrics/metrics_source.go | 144 +++ .../pkg/recommender/main.go | 26 +- .../pkg/recommender/routines/recommender.go | 2 +- .../metrics/pkg/apis/external_metrics/doc.go | 21 + .../pkg/apis/external_metrics/register.go | 51 + .../pkg/apis/external_metrics/types.go | 60 ++ .../pkg/apis/external_metrics/v1beta1/doc.go | 23 + .../external_metrics/v1beta1/generated.pb.go | 879 ++++++++++++++++++ .../external_metrics/v1beta1/generated.proto | 62 ++ .../apis/external_metrics/v1beta1/register.go | 51 + .../apis/external_metrics/v1beta1/types.go | 60 ++ .../v1beta1/zz_generated.conversion.go | 110 +++ .../v1beta1/zz_generated.deepcopy.go | 98 ++ .../external_metrics/zz_generated.deepcopy.go | 98 ++ .../pkg/client/external_metrics/client.go | 100 ++ .../pkg/client/external_metrics/interfaces.go | 40 + vertical-pod-autoscaler/vendor/modules.txt | 2 + 33 files changed, 3078 insertions(+), 28 deletions(-) create mode 100755 vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh create mode 100644 vertical-pod-autoscaler/hack/e2e/Dockerfile.externalmetrics-writer create mode 100644 vertical-pod-autoscaler/hack/e2e/k8s-metrics-server.yaml create mode 100755 vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh create mode 100644 vertical-pod-autoscaler/hack/e2e/metrics-pump.yaml create mode 100644 vertical-pod-autoscaler/hack/e2e/prometheus-adapter.yaml create mode 100644 vertical-pod-autoscaler/hack/e2e/prometheus.yaml create mode 100644 vertical-pod-autoscaler/hack/e2e/recommender-externalmetrics-deployment.yaml create mode 100644 vertical-pod-autoscaler/hack/e2e/vpa-rbac.diff create mode 100755 vertical-pod-autoscaler/hack/emit-metrics.py create mode 100644 vertical-pod-autoscaler/hack/local-cluster.md create mode 100755 vertical-pod-autoscaler/hack/run-e2e-locally.sh create mode 100644 vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_source.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/doc.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/register.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/types.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.pb.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.conversion.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.deepcopy.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/zz_generated.deepcopy.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/client.go create mode 100644 vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/interfaces.go diff --git a/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh b/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh new file mode 100755 index 000000000000..04d81fb37a2e --- /dev/null +++ b/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname ${BASH_SOURCE})/.. + +function print_help { + echo "ERROR! Usage: deploy-for-e2e-locally.sh [suite]*" + echo " should be one of:" + echo " - recommender" + echo " - recommender-externalmetrics" +} + +if [ $# -eq 0 ]; then + print_help + exit 1 +fi + +if [ $# -gt 1 ]; then + print_help + exit 1 +fi + +SUITE=$1 + +case ${SUITE} in + recommender|recommender-externalmetrics) + COMPONENTS="${SUITE}" + ;; + *) + print_help + exit 1 + ;; +esac + +# Local KIND-hosted registry +export REGISTRY=${REGISTRY:-localhost:5001} +export TAG=${TAG:-latest} + +rm -f ${SCRIPT_ROOT}/hack/e2e/vpa-rbac.yaml +patch -c ${SCRIPT_ROOT}/deploy/vpa-rbac.yaml -i ${SCRIPT_ROOT}/hack/e2e/vpa-rbac.diff -o ${SCRIPT_ROOT}/hack/e2e/vpa-rbac.yaml +kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/vpa-rbac.yaml +# Other-versioned CRDs are irrelevant as we're running a modern-ish cluster. +kubectl apply -f ${SCRIPT_ROOT}/deploy/vpa-v1-crd-gen.yaml +kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/k8s-metrics-server.yaml + +for i in ${COMPONENTS}; do + if [ $i == recommender-externalmetrics ] ; then + i=recommender + fi + ALL_ARCHITECTURES=amd64 make --directory ${SCRIPT_ROOT}/pkg/${i} release REGISTRY=${REGISTRY} TAG=${TAG} + kind load docker-image ${REGISTRY}/vpa-${i}-amd64:${TAG} +done + + +for i in ${COMPONENTS}; do + if [ $i == recommender-externalmetrics ] ; then + kubectl delete namespace monitoring --ignore-not-found=true + kubectl create namespace monitoring + kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/prometheus.yaml + kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/prometheus-adapter.yaml + kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/metrics-pump.yaml + kubectl apply -f ${SCRIPT_ROOT}/hack/e2e/${i}-deployment.yaml + else + REGISTRY=${REGISTRY} TAG=${TAG} ${SCRIPT_ROOT}/hack/vpa-process-yaml.sh ${SCRIPT_ROOT}/deploy/${i}-deployment.yaml | kubectl apply -f - + fi +done diff --git a/vertical-pod-autoscaler/hack/e2e/Dockerfile.externalmetrics-writer b/vertical-pod-autoscaler/hack/e2e/Dockerfile.externalmetrics-writer new file mode 100644 index 000000000000..5af909d2c459 --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/Dockerfile.externalmetrics-writer @@ -0,0 +1,18 @@ +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM python:3.10-slim +RUN pip3 install kubernetes argparse requests + +COPY emit-metrics.py / diff --git a/vertical-pod-autoscaler/hack/e2e/k8s-metrics-server.yaml b/vertical-pod-autoscaler/hack/e2e/k8s-metrics-server.yaml new file mode 100644 index 000000000000..25984da14287 --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/k8s-metrics-server.yaml @@ -0,0 +1,244 @@ +--- +# Source: metrics-server/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: local-metrics-server + namespace: default + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +--- +# Source: metrics-server/templates/clusterrole-aggregated-reader.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: system:metrics-server-aggregated-reader + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" +rules: + - apiGroups: + - metrics.k8s.io + resources: + - pods + - nodes + verbs: + - get + - list + - watch +--- +# Source: metrics-server/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: system:local-metrics-server + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: + - "" + resources: + - nodes/metrics + verbs: + - get + - apiGroups: + - "" + resources: + - pods + - nodes + - namespaces + - configmaps + verbs: + - get + - list + - watch +--- +# Source: metrics-server/templates/clusterrolebinding-auth-delegator.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: local-metrics-server:system:auth-delegator + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: + - kind: ServiceAccount + name: local-metrics-server + namespace: default +--- +# Source: metrics-server/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: system:local-metrics-server + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:local-metrics-server +subjects: + - kind: ServiceAccount + name: local-metrics-server + namespace: default +--- +# Source: metrics-server/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: local-metrics-server-auth-reader + namespace: default + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: extension-apiserver-authentication-reader +subjects: + - kind: ServiceAccount + name: local-metrics-server + namespace: default +--- +# Source: metrics-server/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: local-metrics-server + namespace: default + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - name: https + port: 443 + protocol: TCP + targetPort: https + selector: + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server +--- +# Source: metrics-server/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: local-metrics-server + namespace: default + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + template: + metadata: + labels: + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + spec: + schedulerName: + serviceAccountName: local-metrics-server + priorityClassName: "system-cluster-critical" + containers: + - name: metrics-server + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + image: registry.k8s.io/metrics-server/metrics-server:v0.6.2 + imagePullPolicy: IfNotPresent + args: + - --secure-port=10250 + - --cert-dir=/tmp + - --kubelet-insecure-tls + - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname + - --kubelet-use-node-status-port + - --metric-resolution=15s + ports: + - name: https + protocol: TCP + containerPort: 10250 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /livez + port: https + scheme: HTTPS + initialDelaySeconds: 0 + periodSeconds: 10 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readyz + port: https + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 10 + volumeMounts: + - name: tmp + mountPath: /tmp + volumes: + - name: tmp + emptyDir: {} +--- +# Source: metrics-server/templates/apiservice.yaml +apiVersion: apiregistration.k8s.io/v1 +kind: APIService +metadata: + name: v1beta1.metrics.k8s.io + labels: + helm.sh/chart: metrics-server-3.8.3 + app.kubernetes.io/name: metrics-server + app.kubernetes.io/instance: local-metrics-server + app.kubernetes.io/version: "0.6.2" + app.kubernetes.io/managed-by: Helm +spec: + group: metrics.k8s.io + groupPriorityMinimum: 100 + insecureSkipTLSVerify: true + service: + name: local-metrics-server + namespace: default + port: 443 + version: v1beta1 + versionPriority: 100 diff --git a/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh b/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh new file mode 100755 index 000000000000..8dba9f3d9ff4 --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Based on https://kind.sigs.k8s.io/examples/kind-with-registry.sh +set -o errexit + +# Create registry container unless it already exists +reg_name='kind-registry' +reg_port='5001' + +if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then + docker run \ + -d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \ + registry:2 +fi + +# Create a cluster with the local registry enabled in containerd +cat <>{<<.LabelMatchers>>}) by (name) + resources: + overrides: + kubernetes_namespace: { resource: namespace } + kubernetes_pod_name: { resource: pod } + - seriesQuery: '{__name__="mem"}' + metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (name) + resources: + overrides: + kubernetes_namespace: { resource: namespace } + kubernetes_pod_name: { resource: pod } + rules: + - seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}' + seriesFilters: [] + resources: + overrides: + namespace: + resource: namespace + pod: + resource: pod + name: + matches: ^container_(.*)_seconds_total$ + as: "" + metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[5m])) + by (<<.GroupBy>>) + - seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}' + seriesFilters: + - isNot: ^container_.*_seconds_total$ + resources: + overrides: + namespace: + resource: namespace + pod: + resource: pod + name: + matches: ^container_(.*)_total$ + as: "" + metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[5m])) + by (<<.GroupBy>>) + - seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}' + seriesFilters: + - isNot: ^container_.*_total$ + resources: + overrides: + namespace: + resource: namespace + pod: + resource: pod + name: + matches: ^container_(.*)$ + as: "" + metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>,container!="POD"}) by (<<.GroupBy>>) + - seriesQuery: '{namespace!="",__name__!~"^container_.*"}' + seriesFilters: + - isNot: .*_total$ + resources: + template: <<.Resource>> + name: + matches: "" + as: "" + metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>) + - seriesQuery: '{namespace!="",__name__!~"^container_.*"}' + seriesFilters: + - isNot: .*_seconds_total + resources: + template: <<.Resource>> + name: + matches: ^(.*)_total$ + as: "" + metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[5m])) by (<<.GroupBy>>) + - seriesQuery: '{namespace!="",__name__!~"^container_.*"}' + seriesFilters: [] + resources: + template: <<.Resource>> + name: + matches: ^(.*)_seconds_total$ + as: "" + metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[5m])) by (<<.GroupBy>>) +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: metrics + app.kubernetes.io/instance: prometheus-adapter + app.kubernetes.io/name: prometheus-adapter + name: prometheus-adapter + namespace: monitoring +spec: + progressDeadlineSeconds: 600 + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: prometheus-adapter + app.kubernetes.io/name: prometheus-adapter + template: + metadata: + labels: + app.kubernetes.io/component: metrics + app.kubernetes.io/instance: prometheus-adapter + app.kubernetes.io/name: prometheus-adapter + name: prometheus-adapter + spec: + containers: + - name: prometheus-adapter + args: + - /adapter + - --secure-port=6443 + - --cert-dir=/tmp/cert + - --logtostderr=true + - --prometheus-url=http://prometheus.monitoring.svc:9090 + - --metrics-relist-interval=1m + - --v=4 + - --config=/etc/adapter/config.yaml + image: registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.10.0 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: https + scheme: HTTPS + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + ports: + - containerPort: 6443 + name: https + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: https + scheme: HTTPS + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: {} + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 10001 + seccompProfile: + type: RuntimeDefault + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/adapter/ + name: config + readOnly: true + - mountPath: /tmp + name: tmp + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + serviceAccount: prometheus-adapter + serviceAccountName: prometheus-adapter + terminationGracePeriodSeconds: 30 + volumes: + - configMap: + defaultMode: 420 + name: prometheus-adapter + name: config + - emptyDir: {} + name: tmp diff --git a/vertical-pod-autoscaler/hack/e2e/prometheus.yaml b/vertical-pod-autoscaler/hack/e2e/prometheus.yaml new file mode 100644 index 000000000000..651cf81ab256 --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/prometheus.yaml @@ -0,0 +1,264 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus-server-conf + labels: + name: prometheus-server-conf + namespace: monitoring +data: + prometheus.rules: |- + groups: + - name: devopscube demo alert + rules: + - alert: High Pod Memory + expr: sum(container_memory_usage_bytes) > 1 + for: 1m + labels: + severity: slack + annotations: + summary: High Memory Usage + prometheus.yml: |- + global: + scrape_interval: 5s + evaluation_interval: 5s + rule_files: + - /etc/prometheus/prometheus.rules + + scrape_configs: + - job_name: 'kubernetes-apiservers' + + kubernetes_sd_configs: + - role: endpoints + scheme: https + + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + + relabel_configs: + - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] + action: keep + regex: default;kubernetes;https + + - job_name: 'kubernetes-pods' + + kubernetes_sd_configs: + - role: pod + + relabel_configs: + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] + action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_pod_name] + action: replace + target_label: kubernetes_pod_name + + - job_name: 'kubernetes-service-endpoints' + + kubernetes_sd_configs: + - role: endpoints + + relabel_configs: + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] + action: keep + regex: true + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] + action: replace + target_label: __scheme__ + regex: (https?) + - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] + action: replace + target_label: __address__ + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_service_name] + action: replace + target_label: kubernetes_name + + - job_name: "pushgateway" + honor_labels: true + static_configs: + - targets: ['localhost:9091'] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: prometheus +rules: +- apiGroups: [""] + resources: + - nodes + - nodes/proxy + - services + - endpoints + - pods + - configmaps + verbs: ["get", "list", "watch"] +- apiGroups: + - extensions + resources: + - ingresses + verbs: ["get", "list", "watch"] +- nonResourceURLs: ["/metrics"] + verbs: ["get"] +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: ["create"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: prometheus +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus +subjects: +- kind: ServiceAccount + name: prometheus + namespace: monitoring +- kind: ServiceAccount + name: metrics-pump + namespace: monitoring +- kind: ServiceAccount + name: prometheus-adapter + namespace: monitoring + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: prometheus + namespace: monitoring +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: metrics-pump + namespace: monitoring +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: prometheus-adapter + namespace: monitoring + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: prometheus + namespace: monitoring +spec: + replicas: 1 + selector: + matchLabels: + app: prometheus + template: + metadata: + labels: + app: prometheus + spec: + serviceAccountName: prometheus + securityContext: + runAsNonRoot: true + runAsUser: 65534 # nobody + containers: + - name: prometheus + image: prom/prometheus + args: + - "--storage.tsdb.retention.time=12h" + - "--config.file=/etc/prometheus/prometheus.yml" + - "--storage.tsdb.path=/prometheus/" + ports: + - containerPort: 9090 + name: prometheus + resources: + requests: + cpu: 500m + memory: 500M + limits: + cpu: 1 + memory: 1Gi + volumeMounts: + - name: prometheus-config-volume + mountPath: /etc/prometheus/ + - name: prometheus-storage-volume + mountPath: /prometheus/ + - name: pushgateway + image: prom/pushgateway + ports: + - containerPort: 9091 + name: pushgateway + resources: + requests: + cpu: 500m + memory: 500M + volumes: + - name: prometheus-config-volume + configMap: + defaultMode: 420 + name: prometheus-server-conf + - name: prometheus-storage-volume + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: prometheus + namespace: monitoring +spec: + selector: + app: prometheus + ports: + - name: prometheus + protocol: TCP + port: 9090 + targetPort: prometheus + - name: pushgateway + protocol: TCP + port: 9091 + targetPort: pushgateway +--- +apiVersion: v1 +kind: Service +metadata: + name: prometheus-adapter + namespace: monitoring +spec: + selector: + app.kubernetes.io/name: prometheus-adapter + ports: + - name: api + protocol: TCP + port: 443 + targetPort: https + diff --git a/vertical-pod-autoscaler/hack/e2e/recommender-externalmetrics-deployment.yaml b/vertical-pod-autoscaler/hack/e2e/recommender-externalmetrics-deployment.yaml new file mode 100644 index 000000000000..bf033a8294ce --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/recommender-externalmetrics-deployment.yaml @@ -0,0 +1,42 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vpa-recommender + namespace: kube-system +spec: + replicas: 1 + selector: + matchLabels: + app: vpa-recommender + template: + metadata: + labels: + app: vpa-recommender + spec: + serviceAccountName: vpa-recommender + securityContext: + runAsNonRoot: true + runAsUser: 65534 # nobody + containers: + - name: recommender + image: localhost:5001/vpa-recommender-amd64:latest + imagePullPolicy: Never + args: + - /recommender-amd64 + - --use-external-metrics=true + - --external-metrics-cpu-metric=cpu + - --external-metrics-memory-metric=mem + - --v=4 + resources: + limits: + cpu: 200m + memory: 1000Mi + requests: + cpu: 50m + memory: 500Mi + ports: + - name: prometheus + containerPort: 8942 + - name: delve + containerPort: 40000 diff --git a/vertical-pod-autoscaler/hack/e2e/vpa-rbac.diff b/vertical-pod-autoscaler/hack/e2e/vpa-rbac.diff new file mode 100644 index 000000000000..80f0ff45d492 --- /dev/null +++ b/vertical-pod-autoscaler/hack/e2e/vpa-rbac.diff @@ -0,0 +1,18 @@ +*** deploy/vpa-rbac.yaml Wed Jul 5 14:37:35 2023 +--- hack/e2e/vpa-rbac.yaml Thu Jul 6 12:46:19 2023 +*************** +*** 5,10 **** +--- 5,17 ---- + name: system:metrics-reader + rules: + - apiGroups: ++ - "external.metrics.k8s.io" ++ resources: ++ - "*" ++ verbs: ++ - get ++ - list ++ - apiGroups: + - "metrics.k8s.io" + resources: + - pods diff --git a/vertical-pod-autoscaler/hack/emit-metrics.py b/vertical-pod-autoscaler/hack/emit-metrics.py new file mode 100755 index 000000000000..c568536f566f --- /dev/null +++ b/vertical-pod-autoscaler/hack/emit-metrics.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This script runs as a pod, scanning the cluster for other pods. +# It then publishes fake metrics (Gaussian by --mean_* and --stddev_*) +# for each pod into a Prometheus Pushgateway. The Prometheus instance +# connected to that Pushgateway can have a Prometheus Adapter connected +# to it that serves as an External Metrics Provider to Kubernetes. + +import argparse +import base64 +from collections import defaultdict +from kubernetes import client, config +import math +import random +import re +import requests +import sys +import time +import urllib.parse +import pprint + +def parse_arguments(): + parser = argparse.ArgumentParser(description='') + parser.add_argument('--dest', type=str, default='pushservice') + parser.add_argument('--mean_cpu', type=int, default='1000', help='Mean millicores for cpu.') + parser.add_argument('--mean_mem', type=int, default='128', help='Mean megabytes for memory.') + parser.add_argument('--stddev_cpu', type=int, default=150, help='Standard deviation for cpu.') + parser.add_argument('--stddev_mem', type=int, default=15, help='Standard deviation for mem.') + parser.add_argument('--sleep_sec', type=int, default=30, help='Delay between metric-sends, in seconds.') + parser.add_argument('-t','--tags', action='append', nargs=2, metavar=('key','value'), default=[['data', 'emit-metrics']], + help='Additional tags to attach to metrics.') + parser.add_argument('--namespace_pattern', default='monitoring', help='Regex to match namespace names.') + parser.add_argument('--pod_pattern', default='prometheus-[0-9a-f]{9}-[0-9a-z]{5}', help='Regex to match pod names.') + parser.add_argument('--all', default=False, action='store_true', help='Write metrics for all pods.') + parser.add_argument('--job', default='emit-metrics', help='Job name to submit under.') + return parser.parse_args() + +def safestr(s): + '''Is s a URL-safe string?''' + return s.strip('_').isalnum() + +def urlify(key, value): + replacements = { ".": "%2E", "-": "%2D" } + def encode(s): + s = urllib.parse.quote(s, safe='') + for c,repl in replacements.items(): + s = s.replace(c, repl) + return s + if safestr(key) and safestr(value): + return f"{key}/{value}" + elif len(value) == 0: + # Possibly encode the key using URI encoding, but + # definitely use base64 for the value. + return encode(key)+"@base64/=" + else: + return f"{encode(key)}/{encode(value)}" + +def valid_key(key): + invalid_char_re = re.compile(r'.*[./-].*') + invalid_keys = set(["pod-template-hash", "k8s-app", "controller-uid", + "controller-revision-hash", "pod-template-generation"]) + return (key not in invalid_keys) and invalid_char_re.match(key) == None + +def send_metrics(args, job, path, cpuval, memval): + cpuval = cpuval / 1000.0 # Scale from millicores to cores + payload = f"cpu {cpuval:.3f}\nmem {memval:d}.0\n" + path_str = '/'.join([urlify(key,value) for key, value in path.items()]) + url = f'http://{args.dest}/metrics/job/{job}/namespace/{path["namespace"]}/{path_str}' + response = requests.put(url=url, data=bytes(payload, 'utf-8')) + if response.status_code != 200: + print (f"Writing to {url}.\n>> Got {response.status_code}: {response.reason}, {response.text}\n>> Dict was:") + pprint.pprint(path) + else: + print (f"Wrote to {url}: {payload}") + sys.stdout.flush() + +def main(args): + print (f"Starting up.") + sys.stdout.flush() + pod_name_pattern = re.compile(args.pod_pattern) + namespace_name_pattern = re.compile(args.namespace_pattern) + try: + config.load_kube_config() + except: + config.load_incluster_config() + v1 = client.CoreV1Api() + print (f"Initialized. Sleep interval is for {args.sleep_sec} seconds.") + sys.stdout.flush() + pod_cache = dict() + while True: + skipped_keys= set() + time.sleep(args.sleep_sec) + pods = v1.list_pod_for_all_namespaces(watch=False) + all = 0 + found = 0 + for pod in pods.items: + all += 1 + job = args.job + if args.all or (namespace_name_pattern.match(pod.metadata.namespace) and pod_name_pattern.match(pod.metadata.name)): + # Get container names and send metrics for each. + key = f"{pod.metadata.namespace}/{pod.metadata.name}" + if key not in pod_cache: + v1pod = v1.read_namespaced_pod(pod.metadata.name, pod.metadata.namespace, pretty=False) + pod_cache[key] = v1pod + else: + v1pod = pod_cache[key] + containers = [ c.name for c in v1pod.spec.containers ] + found += 1 + path = { "kubernetes_namespace": pod.metadata.namespace, + "kubernetes_pod_name": pod.metadata.name, + "pod": pod.metadata.name, + "namespace": pod.metadata.namespace} + # Append metadata to the data point, add the labels second to overwrite annotations on + # conflict + try: + if v1pod.metadata.annotations: + for k,v in v1pod.metadata.annotations.items(): + if valid_key(k): + path[k] = v + else: + skipped_keys |= set([k]) + if v1pod.metadata.labels: + for k,v in v1pod.metadata.labels.items(): + if valid_key(k): + path[k] = v + else: + skipped_keys |= set([k]) + except ValueError as err: + print (f"{err} on {v1pod.metadata} when getting annotations/labels") + if "job" in path: + job = path["job"] + for container in containers: + cpuval = random.normalvariate(args.mean_cpu, args.stddev_cpu) + memval = random.normalvariate(args.mean_mem, args.stddev_mem) + path['name'] = container + path['container'] = container + send_metrics(args, job, path, math.floor(cpuval), math.floor(memval * 1048576.0)) + print(f"Found {found} out of {all} pods. Skipped keys:") + pprint.pprint(skipped_keys) + +if __name__ == '__main__': + main(parse_arguments()) diff --git a/vertical-pod-autoscaler/hack/local-cluster.md b/vertical-pod-autoscaler/hack/local-cluster.md new file mode 100644 index 000000000000..af3948111512 --- /dev/null +++ b/vertical-pod-autoscaler/hack/local-cluster.md @@ -0,0 +1,32 @@ +# Running Integration Tests locally +Included in parallel with `run-e2e.sh` and `deploy-for-e2e.sh` are two alternate versions +with `-locally` as part of their names. They use Kubernetes in Docker (`kind`) to run a local +cluster in Docker. Using them will require `docker` and `kind` in your `PATH`. + +## External Metrics Tests +The external metrics tests (`recommender-externalmetrics`, available on the `-locally` variants) +use a stack of 4 additional programs to support testing: + +1. `hack/emit-metrics.py` to generate random CPU and RAM metrics for every pod in the local cluster. +2. Prometheus Pushgateway to accept metrics from `hack/emit-metrics`. +3. Prometheus to store the metrics accepted by the Pushgateway. +4. Prometheus Adapter to provide an External Metrics interface to Prometheus. + +The External Metrics tests run by configuring a `recommender` to use the External Metrics interface +from the Prometheus Adapter. With that configuration, it runs the standard `recommender` test suite. + +## Non-recommender tests +The `recommender` and `recommender-externalmetrics` test work locally, but none of the others do; +they require more Makefile work. + +# Configuration Notes +To support the regular `recommender` tests locally, we've added the stock Kubernetes Metrics Server. +Unfortunately, it doesn't work with TLS turned on. The metrics server is being run in insecure mode +to work around this. This only runs in the local `kind` case, not in a real cluster. + +# RBAC Changes +The local test cases support running the `recommender` with external metrics. This requires +additional permissions we don't want to automatically enable for all customers via the +configuration given in `deploy/vpa-rbac.yaml`. The scripts use a context diff `hack/e2e/vpa-rbac.diff` +to enable those permission when running locally. + diff --git a/vertical-pod-autoscaler/hack/run-e2e-locally.sh b/vertical-pod-autoscaler/hack/run-e2e-locally.sh new file mode 100755 index 000000000000..e6e6b4fed5b2 --- /dev/null +++ b/vertical-pod-autoscaler/hack/run-e2e-locally.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname ${BASH_SOURCE})/.. + +function print_help { + echo "ERROR! Usage: run-e2e.sh " + echo " should be one of:" + echo " - recommender" + echo " - recommender-externalmetrics" +} + +if [ $# -eq 0 ]; then + print_help + exit 1 +fi + +if [ $# -gt 1 ]; then + print_help + exit 1 +fi + +SUITE=$1 + +echo "Deleting KIND cluster 'kind'." +kind delete cluster -n kind -q + +echo "Creating KIND cluster 'kind' with builtin registry." +${SCRIPT_ROOT}/hack/e2e/kind-with-registry.sh + +echo "Building metrics-pump image" +docker build -t localhost:5001/write-metrics:dev -f ${SCRIPT_ROOT}/hack/e2e/Dockerfile.externalmetrics-writer ${SCRIPT_ROOT}/hack +echo " pushing image to local registry" +docker push localhost:5001/write-metrics:dev + +case ${SUITE} in + recommender|recommender-externalmetrics) + ${SCRIPT_ROOT}/hack/vpa-down.sh + echo " ** Deploying for suite ${SUITE}" + ${SCRIPT_ROOT}/hack/deploy-for-e2e-locally.sh ${SUITE} + + echo " ** Running suite ${SUITE}" + if [ ${SUITE} == recommender-externalmetrics ]; then + ${SCRIPT_ROOT}/hack/run-e2e-tests.sh recommender + else + ${SCRIPT_ROOT}/hack/run-e2e-tests.sh ${SUITE} + fi + ;; + *) + print_help + exit 1 + ;; +esac + diff --git a/vertical-pod-autoscaler/hack/vpa-process-yamls.sh b/vertical-pod-autoscaler/hack/vpa-process-yamls.sh index aa7aafef04c4..da853e9d8bed 100755 --- a/vertical-pod-autoscaler/hack/vpa-process-yamls.sh +++ b/vertical-pod-autoscaler/hack/vpa-process-yamls.sh @@ -40,7 +40,20 @@ if [ $# -gt 2 ]; then fi ACTION=$1 -COMPONENTS="vpa-v1-crd-gen vpa-rbac updater-deployment recommender-deployment admission-controller-deployment" +COMPONENTS="vpa-v1-crd-gen vpa-rbac updater-deployment recommender-deployment admission-controller-deployment recommender-externalmetrics-deployment" +TEST_COMPONENTS=(recommender-externalmetrics-deployment) + +function script_path { + # Regular components have deployment yaml files under /deploy/. But some components only have + # test deployment yaml files that are under hack/e2e. If $1 is one of ${TEST_COMPONENTS}, use + # the hack/e2e subdir instead of deploy. + if printf '%s\0' "${TEST_COMPONENTS[@]}" | grep -Fqxz -- $1; then + echo "${SCRIPT_ROOT}/hack/e2e/${1}.yaml" + else + echo "${SCRIPT_ROOT}/deploy/${1}.yaml" + fi +} + case ${ACTION} in delete|diff) COMPONENTS+=" vpa-beta2-crd" ;; esac @@ -59,8 +72,8 @@ for i in $COMPONENTS; do fi fi if [[ ${ACTION} == print ]]; then - ${SCRIPT_ROOT}/hack/vpa-process-yaml.sh ${SCRIPT_ROOT}/deploy/$i.yaml + ${SCRIPT_ROOT}/hack/vpa-process-yaml.sh $(script_path $i) else - ${SCRIPT_ROOT}/hack/vpa-process-yaml.sh ${SCRIPT_ROOT}/deploy/$i.yaml | kubectl ${ACTION} -f - || true + ${SCRIPT_ROOT}/hack/vpa-process-yaml.sh $(script_path $i) | kubectl ${ACTION} -f - || true fi done diff --git a/vertical-pod-autoscaler/pkg/recommender/Makefile b/vertical-pod-autoscaler/pkg/recommender/Makefile index c51d0e944045..eb3834d8a033 100644 --- a/vertical-pod-autoscaler/pkg/recommender/Makefile +++ b/vertical-pod-autoscaler/pkg/recommender/Makefile @@ -8,6 +8,8 @@ ENVVAR=CGO_ENABLED=0 $(TEST_ENVVAR) GOOS?=linux COMPONENT=recommender FULL_COMPONENT=vpa-${COMPONENT} +# localhost registries need --insecure for some docker commands. +INSECURE=$(subst localhost,--insecure,$(findstring localhost,$(REGISTRY))) ALL_ARCHITECTURES?=amd64 arm arm64 ppc64le s390x export DOCKER_CLI_EXPERIMENTAL=enabled @@ -64,9 +66,9 @@ endif .PHONY: push-multi-arch push-multi-arch: - docker manifest create --amend $(REGISTRY)/${FULL_COMPONENT}:$(TAG) $(shell echo $(ALL_ARCHITECTURES) | sed -e "s~[^ ]*~$(REGISTRY)/${FULL_COMPONENT}\-&:$(TAG)~g") + docker manifest create $(INSECURE) --amend $(REGISTRY)/${FULL_COMPONENT}:$(TAG) $(shell echo $(ALL_ARCHITECTURES) | sed -e "s~[^ ]*~$(REGISTRY)/${FULL_COMPONENT}\-&:$(TAG)~g") @for arch in $(ALL_ARCHITECTURES); do docker manifest annotate --arch $${arch} $(REGISTRY)/${FULL_COMPONENT}:$(TAG) $(REGISTRY)/${FULL_COMPONENT}-$${arch}:${TAG}; done - docker manifest push --purge $(REGISTRY)/${FULL_COMPONENT}:$(TAG) + docker manifest push $(INSECURE) --purge $(REGISTRY)/${FULL_COMPONENT}:$(TAG) docker-builder: docker build -t vpa-autoscaling-builder ../../builder diff --git a/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client.go b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client.go index 7a55d9641649..a34e928e5c04 100644 --- a/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client.go +++ b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client.go @@ -22,13 +22,10 @@ import ( k8sapiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/rest" - "k8s.io/klog/v2" - "k8s.io/metrics/pkg/apis/metrics/v1beta1" - resourceclient "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1" - "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" recommender_metrics "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/metrics/recommender" + "k8s.io/klog/v2" + "k8s.io/metrics/pkg/apis/metrics/v1beta1" ) // ContainerMetricsSnapshot contains information about usage of certain container within defined time window. @@ -51,31 +48,25 @@ type MetricsClient interface { } type metricsClient struct { - metricsGetter resourceclient.PodMetricsesGetter - namespace string - clientName string + source PodMetricsLister + namespace string + clientName string } // NewMetricsClient creates new instance of MetricsClient, which is used by recommender. // namespace limits queries to particular namespace, use k8sapiv1.NamespaceAll to select all namespaces. -func NewMetricsClient(config *rest.Config, namespace, clientName string) MetricsClient { - metricsGetter := resourceclient.NewForConfigOrDie(config) - return newMetricsClient(metricsGetter, namespace, clientName) -} - -func newMetricsClient(metricsGetter resourceclient.PodMetricsesGetter, namespace, clientName string) MetricsClient { +func NewMetricsClient(source PodMetricsLister, namespace, clientName string) MetricsClient { return &metricsClient{ - metricsGetter: metricsGetter, - namespace: namespace, - clientName: clientName, + source: source, + namespace: namespace, + clientName: clientName, } } func (c *metricsClient) GetContainersMetrics() ([]*ContainerMetricsSnapshot, error) { var metricsSnapshots []*ContainerMetricsSnapshot - podMetricsInterface := c.metricsGetter.PodMetricses(c.namespace) - podMetricsList, err := podMetricsInterface.List(context.TODO(), metav1.ListOptions{}) + podMetricsList, err := c.source.List(context.TODO(), c.namespace, metav1.ListOptions{}) recommender_metrics.RecordMetricsServerResponse(err, c.clientName) if err != nil { return nil, err diff --git a/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client_test_util.go b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client_test_util.go index f2a623fb162a..5f967ae741aa 100644 --- a/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client_test_util.go +++ b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_client_test_util.go @@ -85,7 +85,7 @@ func (tc *metricsClientTestCase) createFakeMetricsClient() MetricsClient { fakeMetricsGetter.AddReactor("list", "pods", func(action core.Action) (handled bool, ret runtime.Object, err error) { return true, tc.getFakePodMetricsList(), nil }) - return newMetricsClient(fakeMetricsGetter.MetricsV1beta1(), "", "fake") + return NewMetricsClient(NewPodMetricsesSource(fakeMetricsGetter.MetricsV1beta1()), "", "fake") } func (tc *metricsClientTestCase) getFakePodMetricsList() *metricsapi.PodMetricsList { diff --git a/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_source.go b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_source.go new file mode 100644 index 000000000000..04978268baf5 --- /dev/null +++ b/vertical-pod-autoscaler/pkg/recommender/input/metrics/metrics_source.go @@ -0,0 +1,144 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "context" + k8sapiv1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" + "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model" + "k8s.io/client-go/rest" + "k8s.io/klog/v2" + "k8s.io/metrics/pkg/apis/metrics/v1beta1" + resourceclient "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1" + "k8s.io/metrics/pkg/client/external_metrics" + "time" +) + +// PodMetricsLister wraps both metrics-client and External Metrics +type PodMetricsLister interface { + List(ctx context.Context, namespace string, opts v1.ListOptions) (*v1beta1.PodMetricsList, error) +} + +// podMetricsSource is the metrics-client source of metrics. +type podMetricsSource struct { + metricsGetter resourceclient.PodMetricsesGetter +} + +// NewPodMetricsesSource Returns a Source-wrapper around PodMetricsesGetter. +func NewPodMetricsesSource(source resourceclient.PodMetricsesGetter) PodMetricsLister { + return podMetricsSource{metricsGetter: source} +} + +func (s podMetricsSource) List(ctx context.Context, namespace string, opts v1.ListOptions) (*v1beta1.PodMetricsList, error) { + podMetricsInterface := s.metricsGetter.PodMetricses(namespace) + return podMetricsInterface.List(ctx, opts) +} + +// externalMetricsClient is the External Metrics source of metrics. +type externalMetricsClient struct { + externalClient external_metrics.ExternalMetricsClient + options ExternalClientOptions + clusterState *model.ClusterState +} + +// ExternalClientOptions specifies parameters for using an External Metrics Client. +type ExternalClientOptions struct { + ResourceMetrics map[k8sapiv1.ResourceName]string + // Label to use for the container name. + ContainerNameLabel string +} + +// NewExternalClient returns a Source for an External Metrics Client. +func NewExternalClient(c *rest.Config, clusterState *model.ClusterState, options ExternalClientOptions) PodMetricsLister { + extClient, err := external_metrics.NewForConfig(c) + if err != nil { + klog.Fatalf("Failed initializing external metrics client: %v", err) + } + return &externalMetricsClient{ + externalClient: extClient, + options: options, + clusterState: clusterState, + } +} + +func (s *externalMetricsClient) List(ctx context.Context, namespace string, opts v1.ListOptions) (*v1beta1.PodMetricsList, error) { + result := v1beta1.PodMetricsList{} + + for _, vpa := range s.clusterState.Vpas { + if vpa.PodCount == 0 { + continue + } + + if namespace != "" && vpa.ID.Namespace != namespace { + continue + } + + nsClient := s.externalClient.NamespacedMetrics(vpa.ID.Namespace) + pods := s.clusterState.GetMatchingPods(vpa) + + for _, pod := range pods { + podNameReq, err := labels.NewRequirement("pod", selection.Equals, []string{pod.PodName}) + if err != nil { + return nil, err + } + selector := vpa.PodSelector.Add(*podNameReq) + podMets := v1beta1.PodMetrics{ + TypeMeta: v1.TypeMeta{}, + ObjectMeta: v1.ObjectMeta{Namespace: vpa.ID.Namespace, Name: pod.PodName}, + Window: v1.Duration{}, + Containers: make([]v1beta1.ContainerMetrics, 0), + } + // Query each resource in turn, then assemble back to a single []ContainerMetrics. + containerMetrics := make(map[string]k8sapiv1.ResourceList) + for resourceName, metricName := range s.options.ResourceMetrics { + m, err := nsClient.List(metricName, selector) + if err != nil { + return nil, err + } + if m == nil || len(m.Items) == 0 { + klog.V(4).Infof("External Metrics Query for VPA %+v: resource %+v, metric %+v, No items,", vpa.ID, resourceName, metricName) + continue + } + klog.V(4).Infof("External Metrics Query for VPA %+v: resource %+v, metric %+v, %d items, item[0]: %+v", vpa.ID, resourceName, metricName, len(m.Items), m.Items[0]) + podMets.Timestamp = m.Items[0].Timestamp + if m.Items[0].WindowSeconds != nil { + podMets.Window = v1.Duration{Duration: time.Duration(*m.Items[0].WindowSeconds) * time.Second} + } + for _, val := range m.Items { + ctrName, hasCtrName := val.MetricLabels[s.options.ContainerNameLabel] + if !hasCtrName { + continue + } + if containerMetrics[ctrName] == nil { + containerMetrics[ctrName] = make(k8sapiv1.ResourceList) + } + containerMetrics[ctrName][resourceName] = val.Value + } + + } + for cname, res := range containerMetrics { + podMets.Containers = append(podMets.Containers, v1beta1.ContainerMetrics{Name: cname, Usage: res}) + } + result.Items = append(result.Items, podMets) + + } + } + return &result, nil +} diff --git a/vertical-pod-autoscaler/pkg/recommender/main.go b/vertical-pod-autoscaler/pkg/recommender/main.go index c03d4959764d..056953de55ae 100644 --- a/vertical-pod-autoscaler/pkg/recommender/main.go +++ b/vertical-pod-autoscaler/pkg/recommender/main.go @@ -19,6 +19,7 @@ package main import ( "context" "flag" + resourceclient "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1" "time" apiv1 "k8s.io/api/core/v1" @@ -71,6 +72,10 @@ var ( username = flag.String("username", "", "The username used in the prometheus server basic auth") password = flag.String("password", "", "The password used in the prometheus server basic auth") memorySaver = flag.Bool("memory-saver", false, `If true, only track pods which have an associated VPA`) + // external metrics provider config + useExternalMetrics = flag.Bool("use-external-metrics", false, "ALPHA. Use an external metrics provider instead of metrics_server.") + externalCpuMetric = flag.String("external-metrics-cpu-metric", "", "ALPHA. Metric to use with external metrics provider for CPU usage.") + externalMemoryMetric = flag.String("external-metrics-memory-metric", "", "ALPHA. Metric to use with external metrics provider for memory usage.") ) // Aggregation configuration flags @@ -102,7 +107,7 @@ const ( func main() { klog.InitFlags(nil) kube_flag.InitFlags() - klog.V(1).Infof("Vertical Pod Autoscaler %s Recommender: %v", common.VerticalPodAutoscalerVersion, recommenderName) + klog.V(1).Infof("Vertical Pod Autoscaler %s Recommender: %v", common.VerticalPodAutoscalerVersion, *recommenderName) config := common.CreateKubeConfigOrDie(*kubeconfig, float32(*kubeApiQps), int(*kubeApiBurst)) kubeClient := kube_client.NewForConfigOrDie(config) @@ -124,14 +129,31 @@ func main() { if *postProcessorCPUasInteger { postProcessors = append(postProcessors, &routines.IntegerCPUPostProcessor{}) } + // CappingPostProcessor, should always come in the last position for post-processing postProcessors = append(postProcessors, &routines.CappingPostProcessor{}) + var source input_metrics.PodMetricsLister + if *useExternalMetrics { + resourceMetrics := map[apiv1.ResourceName]string{} + if externalCpuMetric != nil && *externalCpuMetric != "" { + resourceMetrics[apiv1.ResourceCPU] = *externalCpuMetric + } + if externalMemoryMetric != nil && *externalMemoryMetric != "" { + resourceMetrics[apiv1.ResourceMemory] = *externalMemoryMetric + } + externalClientOptions := &input_metrics.ExternalClientOptions{ResourceMetrics: resourceMetrics, ContainerNameLabel: *ctrNameLabel} + klog.V(1).Infof("Using External Metrics: %+v", externalClientOptions) + source = input_metrics.NewExternalClient(config, clusterState, *externalClientOptions) + } else { + klog.V(1).Infof("Using Metrics Server.") + source = input_metrics.NewPodMetricsesSource(resourceclient.NewForConfigOrDie(config)) + } clusterStateFeeder := input.ClusterStateFeederFactory{ PodLister: podLister, OOMObserver: oomObserver, KubeClient: kubeClient, - MetricsClient: input_metrics.NewMetricsClient(config, *vpaObjectNamespace, "default-metrics-client"), + MetricsClient: input_metrics.NewMetricsClient(source, *vpaObjectNamespace, "default-metrics-client"), VpaCheckpointClient: vpa_clientset.NewForConfigOrDie(config).AutoscalingV1(), VpaLister: vpa_api_util.NewVpasLister(vpa_clientset.NewForConfigOrDie(config), make(chan struct{}), *vpaObjectNamespace), ClusterState: clusterState, diff --git a/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go b/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go index 564b9b9845a2..760c0fb5098e 100644 --- a/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go +++ b/vertical-pod-autoscaler/pkg/recommender/routines/recommender.go @@ -126,7 +126,7 @@ func (r *recommender) UpdateVPAs() { r.vpaClient.VerticalPodAutoscalers(vpa.ID.Namespace), vpa.ID.VpaName, vpa.AsStatus(), &observedVpa.Status) if err != nil { klog.Errorf( - "Cannot update VPA %v object. Reason: %+v", vpa.ID.VpaName, err) + "Cannot update VPA %v/%v object. Reason: %+v", vpa.ID.Namespace, vpa.ID.VpaName, err) } } } diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/doc.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/doc.go new file mode 100644 index 000000000000..edf1553ad240 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +groupName=external.metrics.k8s.io + +// Package external_metrics adds support for defining external metrics. +package external_metrics // import "k8s.io/metrics/pkg/apis/external_metrics" diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/register.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/register.go new file mode 100644 index 000000000000..33dca86c9aea --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/register.go @@ -0,0 +1,51 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package external_metrics + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "external.metrics.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns back a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ExternalMetricValue{}, + &ExternalMetricValueList{}, + ) + return nil +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/types.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/types.go new file mode 100644 index 000000000000..2a9c6e3923d1 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/types.go @@ -0,0 +1,60 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package external_metrics + +import ( + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// a list of values for a given metric for some set labels +type ExternalMetricValueList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + + // value of the metric matching a given set of labels + Items []ExternalMetricValue `json:"items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// a metric value for external metric +// A single metric value is identified by metric name and a set of string labels. +// For one metric there can be multiple values with different sets of labels. +type ExternalMetricValue struct { + metav1.TypeMeta `json:",inline"` + + // the name of the metric + MetricName string `json:"metricName"` + + // a set of labels that identify a single time series for the metric + MetricLabels map[string]string `json:"metricLabels"` + + // indicates the time at which the metrics were produced + Timestamp metav1.Time `json:"timestamp"` + + // indicates the window ([Timestamp-Window, Timestamp]) from + // which these metrics were calculated, when returning rate + // metrics calculated from cumulative metrics (or zero for + // non-calculated instantaneous metrics). + WindowSeconds *int64 `json:"window,omitempty"` + + // the value of the metric + Value resource.Quantity `json:"value"` +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go new file mode 100644 index 000000000000..aa27d102fc97 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:conversion-gen=k8s.io/metrics/pkg/apis/external_metrics +// +k8s:openapi-gen=true + +// Package v1beta1 is the v1beta1 version of the external metrics API. +package v1beta1 // import "k8s.io/metrics/pkg/apis/external_metrics/v1beta1" diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.pb.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.pb.go new file mode 100644 index 000000000000..ed71bf21a86c --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.pb.go @@ -0,0 +1,879 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto + +package v1beta1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *ExternalMetricValue) Reset() { *m = ExternalMetricValue{} } +func (*ExternalMetricValue) ProtoMessage() {} +func (*ExternalMetricValue) Descriptor() ([]byte, []int) { + return fileDescriptor_76ac204ccf814641, []int{0} +} +func (m *ExternalMetricValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricValue.Merge(m, src) +} +func (m *ExternalMetricValue) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricValue proto.InternalMessageInfo + +func (m *ExternalMetricValueList) Reset() { *m = ExternalMetricValueList{} } +func (*ExternalMetricValueList) ProtoMessage() {} +func (*ExternalMetricValueList) Descriptor() ([]byte, []int) { + return fileDescriptor_76ac204ccf814641, []int{1} +} +func (m *ExternalMetricValueList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricValueList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricValueList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricValueList.Merge(m, src) +} +func (m *ExternalMetricValueList) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricValueList) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricValueList.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricValueList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*ExternalMetricValue)(nil), "k8s.io.metrics.pkg.apis.external_metrics.v1beta1.ExternalMetricValue") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.metrics.pkg.apis.external_metrics.v1beta1.ExternalMetricValue.MetricLabelsEntry") + proto.RegisterType((*ExternalMetricValueList)(nil), "k8s.io.metrics.pkg.apis.external_metrics.v1beta1.ExternalMetricValueList") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto", fileDescriptor_76ac204ccf814641) +} + +var fileDescriptor_76ac204ccf814641 = []byte{ + // 554 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x4d, 0x6b, 0x1b, 0x3d, + 0x10, 0xc7, 0x2d, 0xfb, 0xf1, 0x43, 0xac, 0x24, 0x10, 0xab, 0x81, 0x1a, 0x1f, 0xd6, 0x26, 0x27, + 0xb7, 0x50, 0x29, 0x36, 0xa5, 0x84, 0x5e, 0x0a, 0x0b, 0x3e, 0x14, 0xe2, 0x42, 0x37, 0x21, 0xa1, + 0x2f, 0x50, 0xe4, 0xf5, 0x74, 0xad, 0xda, 0xfb, 0x82, 0xa4, 0x75, 0xea, 0x5b, 0x3f, 0x42, 0xfb, + 0xad, 0x7c, 0xcc, 0x31, 0x27, 0x53, 0x6f, 0x3e, 0x46, 0x2f, 0x65, 0xdf, 0x62, 0xd7, 0x4e, 0x13, + 0x02, 0xbd, 0xed, 0x68, 0x34, 0xff, 0xf9, 0xcd, 0x5f, 0xc3, 0xe2, 0x77, 0xa3, 0x23, 0x45, 0x85, + 0xcf, 0x46, 0x61, 0x1f, 0xa4, 0x07, 0x1a, 0x14, 0x9b, 0x80, 0x37, 0xf0, 0x25, 0xcb, 0x12, 0x2e, + 0x68, 0x29, 0x6c, 0xc5, 0x82, 0x91, 0xc3, 0x78, 0x20, 0x14, 0x83, 0xaf, 0x1a, 0xa4, 0xc7, 0xc7, + 0x9f, 0xf2, 0xcc, 0xa4, 0xdd, 0x07, 0xcd, 0xdb, 0xcc, 0x01, 0x0f, 0x24, 0xd7, 0x30, 0xa0, 0x81, + 0xf4, 0xb5, 0x4f, 0x0e, 0x53, 0x05, 0x9a, 0xdd, 0xa3, 0xc1, 0xc8, 0xa1, 0xb1, 0x02, 0x5d, 0x57, + 0xa0, 0x99, 0x42, 0xfd, 0x99, 0x23, 0xf4, 0x30, 0xec, 0x53, 0xdb, 0x77, 0x99, 0xe3, 0x3b, 0x3e, + 0x4b, 0x84, 0xfa, 0xe1, 0xe7, 0x24, 0x4a, 0x82, 0xe4, 0x2b, 0x6d, 0x50, 0x7f, 0x9e, 0x21, 0xf2, + 0x40, 0xb8, 0xdc, 0x1e, 0x0a, 0x0f, 0xe4, 0x34, 0xe7, 0x64, 0x12, 0x94, 0x1f, 0x4a, 0x1b, 0xd6, + 0xb1, 0xee, 0xac, 0x52, 0xf1, 0xb8, 0x9c, 0x4d, 0x36, 0x86, 0xa9, 0xb3, 0xbf, 0x55, 0xc9, 0xd0, + 0xd3, 0xc2, 0xdd, 0x6c, 0xf3, 0xe2, 0xbe, 0x02, 0x65, 0x0f, 0xc1, 0xe5, 0xeb, 0x75, 0x07, 0xbf, + 0x4a, 0xf8, 0x51, 0x37, 0x33, 0xa8, 0x97, 0xf8, 0x73, 0xc6, 0xc7, 0x21, 0x90, 0x0e, 0xc6, 0xa9, + 0x5d, 0x6f, 0xb8, 0x0b, 0x35, 0xd4, 0x44, 0xad, 0x8a, 0x49, 0x66, 0xf3, 0x46, 0x21, 0x9a, 0x37, + 0x70, 0xef, 0x26, 0x63, 0xad, 0xdc, 0x22, 0x3f, 0x10, 0xde, 0x49, 0xc3, 0x63, 0xde, 0x87, 0xb1, + 0xaa, 0x15, 0x9b, 0xa5, 0xd6, 0x76, 0xe7, 0x9c, 0x3e, 0xf4, 0x65, 0xe8, 0x2d, 0x44, 0xb4, 0xb7, + 0xa2, 0xdc, 0xf5, 0xb4, 0x9c, 0x9a, 0xfb, 0x19, 0xcf, 0xce, 0x6a, 0xca, 0xfa, 0x03, 0x81, 0x7c, + 0xc0, 0x95, 0x78, 0x7c, 0xa5, 0xb9, 0x1b, 0xd4, 0x4a, 0x4d, 0xd4, 0xda, 0xee, 0x3c, 0xcd, 0x79, + 0x56, 0xbd, 0x5a, 0x42, 0xc5, 0x4f, 0x42, 0x27, 0x6d, 0x7a, 0x2a, 0x5c, 0x30, 0xab, 0x59, 0x8b, + 0xca, 0x69, 0x2e, 0x62, 0x2d, 0xf5, 0xc8, 0x13, 0xfc, 0xff, 0x85, 0xf0, 0x06, 0xfe, 0x45, 0xed, + 0xbf, 0x26, 0x6a, 0x95, 0xcc, 0x6a, 0x34, 0x6f, 0xec, 0x9e, 0x27, 0x27, 0x27, 0x60, 0xfb, 0xde, + 0x40, 0x59, 0xd9, 0x05, 0x72, 0x82, 0xcb, 0x93, 0x78, 0x8c, 0x5a, 0x39, 0x61, 0xa0, 0x77, 0x31, + 0xd0, 0x7c, 0x99, 0xe8, 0xdb, 0x90, 0x7b, 0x5a, 0xe8, 0xa9, 0xb9, 0x9b, 0x71, 0x94, 0x13, 0x2f, + 0xac, 0x54, 0xab, 0xfe, 0x0a, 0x57, 0x37, 0x5c, 0x21, 0x7b, 0xb8, 0x34, 0x82, 0x69, 0xfa, 0x64, + 0x56, 0xfc, 0x49, 0xf6, 0xf3, 0xde, 0xc5, 0xe4, 0x2c, 0x0d, 0x5e, 0x16, 0x8f, 0xd0, 0xc1, 0x35, + 0xc2, 0x8f, 0x6f, 0xf1, 0xfa, 0x58, 0x28, 0x4d, 0x3e, 0xe2, 0xad, 0xd8, 0x8a, 0x01, 0xd7, 0x3c, + 0x11, 0xbb, 0x07, 0x7a, 0x69, 0x5c, 0x5c, 0xdd, 0x03, 0xcd, 0xcd, 0xbd, 0x0c, 0x7a, 0x2b, 0x3f, + 0xb1, 0x6e, 0x14, 0xc9, 0x17, 0x5c, 0x16, 0x1a, 0xdc, 0x7c, 0x47, 0xba, 0xff, 0x64, 0x47, 0x96, + 0x36, 0xbd, 0x8e, 0xb5, 0xad, 0xb4, 0x85, 0x79, 0x36, 0x5b, 0x18, 0x85, 0xcb, 0x85, 0x51, 0xb8, + 0x5a, 0x18, 0x85, 0x6f, 0x91, 0x81, 0x66, 0x91, 0x81, 0x2e, 0x23, 0x03, 0x5d, 0x45, 0x06, 0xfa, + 0x19, 0x19, 0xe8, 0xfb, 0xb5, 0x51, 0x78, 0x7f, 0xf8, 0xd0, 0x3f, 0xd0, 0xef, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x49, 0x7d, 0xf4, 0x2a, 0xcd, 0x04, 0x00, 0x00, +} + +func (m *ExternalMetricValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.WindowSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.WindowSeconds)) + i-- + dAtA[i] = 0x20 + } + { + size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.MetricLabels) > 0 { + keysForMetricLabels := make([]string, 0, len(m.MetricLabels)) + for k := range m.MetricLabels { + keysForMetricLabels = append(keysForMetricLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMetricLabels) + for iNdEx := len(keysForMetricLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.MetricLabels[string(keysForMetricLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForMetricLabels[iNdEx]) + copy(dAtA[i:], keysForMetricLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMetricLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ExternalMetricValueList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricValueList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricValueList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ExternalMetricValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MetricName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.MetricLabels) > 0 { + for k, v := range m.MetricLabels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = m.Timestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.WindowSeconds != nil { + n += 1 + sovGenerated(uint64(*m.WindowSeconds)) + } + l = m.Value.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExternalMetricValueList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *ExternalMetricValue) String() string { + if this == nil { + return "nil" + } + keysForMetricLabels := make([]string, 0, len(this.MetricLabels)) + for k := range this.MetricLabels { + keysForMetricLabels = append(keysForMetricLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMetricLabels) + mapStringForMetricLabels := "map[string]string{" + for _, k := range keysForMetricLabels { + mapStringForMetricLabels += fmt.Sprintf("%v: %v,", k, this.MetricLabels[k]) + } + mapStringForMetricLabels += "}" + s := strings.Join([]string{`&ExternalMetricValue{`, + `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, + `MetricLabels:` + mapStringForMetricLabels + `,`, + `Timestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Timestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `WindowSeconds:` + valueToStringGenerated(this.WindowSeconds) + `,`, + `Value:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Value), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExternalMetricValueList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ExternalMetricValue{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ExternalMetricValue", "ExternalMetricValue", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ExternalMetricValueList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *ExternalMetricValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MetricLabels == nil { + m.MetricLabels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.MetricLabels[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.WindowSeconds = &v + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExternalMetricValueList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricValueList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricValueList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ExternalMetricValue{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto new file mode 100644 index 000000000000..c5552ac79548 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/generated.proto @@ -0,0 +1,62 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = "proto2"; + +package k8s.io.metrics.pkg.apis.external_metrics.v1beta1; + +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "k8s.io/metrics/pkg/apis/external_metrics/v1beta1"; + +// ExternalMetricValue is a metric value for external metric +// A single metric value is identified by metric name and a set of string labels. +// For one metric there can be multiple values with different sets of labels. +message ExternalMetricValue { + // the name of the metric + optional string metricName = 1; + + // a set of labels that identify a single time series for the metric + map metricLabels = 2; + + // indicates the time at which the metrics were produced + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time timestamp = 3; + + // indicates the window ([Timestamp-Window, Timestamp]) from + // which these metrics were calculated, when returning rate + // metrics calculated from cumulative metrics (or zero for + // non-calculated instantaneous metrics). + optional int64 window = 4; + + // the value of the metric + optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 5; +} + +// ExternalMetricValueList is a list of values for a given metric for some set labels +message ExternalMetricValueList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // value of the metric matching a given set of labels + repeated ExternalMetricValue items = 2; +} + diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go new file mode 100644 index 000000000000..85dfc5b1d9dd --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/register.go @@ -0,0 +1,51 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "external.metrics.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder points to a list of functions added to Scheme. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ExternalMetricValue{}, + &ExternalMetricValueList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go new file mode 100644 index 000000000000..56210539a5b0 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/types.go @@ -0,0 +1,60 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ExternalMetricValueList is a list of values for a given metric for some set labels +type ExternalMetricValueList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // value of the metric matching a given set of labels + Items []ExternalMetricValue `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ExternalMetricValue is a metric value for external metric +// A single metric value is identified by metric name and a set of string labels. +// For one metric there can be multiple values with different sets of labels. +type ExternalMetricValue struct { + metav1.TypeMeta `json:",inline"` + + // the name of the metric + MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"` + + // a set of labels that identify a single time series for the metric + MetricLabels map[string]string `json:"metricLabels" protobuf:"bytes,2,rep,name=metricLabels"` + + // indicates the time at which the metrics were produced + Timestamp metav1.Time `json:"timestamp" protobuf:"bytes,3,name=timestamp"` + + // indicates the window ([Timestamp-Window, Timestamp]) from + // which these metrics were calculated, when returning rate + // metrics calculated from cumulative metrics (or zero for + // non-calculated instantaneous metrics). + WindowSeconds *int64 `json:"window,omitempty" protobuf:"bytes,4,opt,name=window"` + + // the value of the metric + Value resource.Quantity `json:"value" protobuf:"bytes,5,name=value"` +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.conversion.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.conversion.go new file mode 100644 index 000000000000..0380ace59162 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.conversion.go @@ -0,0 +1,110 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1beta1 + +import ( + unsafe "unsafe" + + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + externalmetrics "k8s.io/metrics/pkg/apis/external_metrics" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ExternalMetricValue)(nil), (*externalmetrics.ExternalMetricValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExternalMetricValue_To_external_metrics_ExternalMetricValue(a.(*ExternalMetricValue), b.(*externalmetrics.ExternalMetricValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*externalmetrics.ExternalMetricValue)(nil), (*ExternalMetricValue)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_external_metrics_ExternalMetricValue_To_v1beta1_ExternalMetricValue(a.(*externalmetrics.ExternalMetricValue), b.(*ExternalMetricValue), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ExternalMetricValueList)(nil), (*externalmetrics.ExternalMetricValueList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExternalMetricValueList_To_external_metrics_ExternalMetricValueList(a.(*ExternalMetricValueList), b.(*externalmetrics.ExternalMetricValueList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*externalmetrics.ExternalMetricValueList)(nil), (*ExternalMetricValueList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_external_metrics_ExternalMetricValueList_To_v1beta1_ExternalMetricValueList(a.(*externalmetrics.ExternalMetricValueList), b.(*ExternalMetricValueList), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1beta1_ExternalMetricValue_To_external_metrics_ExternalMetricValue(in *ExternalMetricValue, out *externalmetrics.ExternalMetricValue, s conversion.Scope) error { + out.MetricName = in.MetricName + out.MetricLabels = *(*map[string]string)(unsafe.Pointer(&in.MetricLabels)) + out.Timestamp = in.Timestamp + out.WindowSeconds = (*int64)(unsafe.Pointer(in.WindowSeconds)) + out.Value = in.Value + return nil +} + +// Convert_v1beta1_ExternalMetricValue_To_external_metrics_ExternalMetricValue is an autogenerated conversion function. +func Convert_v1beta1_ExternalMetricValue_To_external_metrics_ExternalMetricValue(in *ExternalMetricValue, out *externalmetrics.ExternalMetricValue, s conversion.Scope) error { + return autoConvert_v1beta1_ExternalMetricValue_To_external_metrics_ExternalMetricValue(in, out, s) +} + +func autoConvert_external_metrics_ExternalMetricValue_To_v1beta1_ExternalMetricValue(in *externalmetrics.ExternalMetricValue, out *ExternalMetricValue, s conversion.Scope) error { + out.MetricName = in.MetricName + out.MetricLabels = *(*map[string]string)(unsafe.Pointer(&in.MetricLabels)) + out.Timestamp = in.Timestamp + out.WindowSeconds = (*int64)(unsafe.Pointer(in.WindowSeconds)) + out.Value = in.Value + return nil +} + +// Convert_external_metrics_ExternalMetricValue_To_v1beta1_ExternalMetricValue is an autogenerated conversion function. +func Convert_external_metrics_ExternalMetricValue_To_v1beta1_ExternalMetricValue(in *externalmetrics.ExternalMetricValue, out *ExternalMetricValue, s conversion.Scope) error { + return autoConvert_external_metrics_ExternalMetricValue_To_v1beta1_ExternalMetricValue(in, out, s) +} + +func autoConvert_v1beta1_ExternalMetricValueList_To_external_metrics_ExternalMetricValueList(in *ExternalMetricValueList, out *externalmetrics.ExternalMetricValueList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]externalmetrics.ExternalMetricValue)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_ExternalMetricValueList_To_external_metrics_ExternalMetricValueList is an autogenerated conversion function. +func Convert_v1beta1_ExternalMetricValueList_To_external_metrics_ExternalMetricValueList(in *ExternalMetricValueList, out *externalmetrics.ExternalMetricValueList, s conversion.Scope) error { + return autoConvert_v1beta1_ExternalMetricValueList_To_external_metrics_ExternalMetricValueList(in, out, s) +} + +func autoConvert_external_metrics_ExternalMetricValueList_To_v1beta1_ExternalMetricValueList(in *externalmetrics.ExternalMetricValueList, out *ExternalMetricValueList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]ExternalMetricValue)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_external_metrics_ExternalMetricValueList_To_v1beta1_ExternalMetricValueList is an autogenerated conversion function. +func Convert_external_metrics_ExternalMetricValueList_To_v1beta1_ExternalMetricValueList(in *externalmetrics.ExternalMetricValueList, out *ExternalMetricValueList, s conversion.Scope) error { + return autoConvert_external_metrics_ExternalMetricValueList_To_v1beta1_ExternalMetricValueList(in, out, s) +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.deepcopy.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 000000000000..45c653f6d067 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,98 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricValue) DeepCopyInto(out *ExternalMetricValue) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.MetricLabels != nil { + in, out := &in.MetricLabels, &out.MetricLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Timestamp.DeepCopyInto(&out.Timestamp) + if in.WindowSeconds != nil { + in, out := &in.WindowSeconds, &out.WindowSeconds + *out = new(int64) + **out = **in + } + out.Value = in.Value.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricValue. +func (in *ExternalMetricValue) DeepCopy() *ExternalMetricValue { + if in == nil { + return nil + } + out := new(ExternalMetricValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalMetricValue) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricValueList) DeepCopyInto(out *ExternalMetricValueList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ExternalMetricValue, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricValueList. +func (in *ExternalMetricValueList) DeepCopy() *ExternalMetricValueList { + if in == nil { + return nil + } + out := new(ExternalMetricValueList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalMetricValueList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/zz_generated.deepcopy.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/zz_generated.deepcopy.go new file mode 100644 index 000000000000..e79ff826841d --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/apis/external_metrics/zz_generated.deepcopy.go @@ -0,0 +1,98 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package external_metrics + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricValue) DeepCopyInto(out *ExternalMetricValue) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.MetricLabels != nil { + in, out := &in.MetricLabels, &out.MetricLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Timestamp.DeepCopyInto(&out.Timestamp) + if in.WindowSeconds != nil { + in, out := &in.WindowSeconds, &out.WindowSeconds + *out = new(int64) + **out = **in + } + out.Value = in.Value.DeepCopy() + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricValue. +func (in *ExternalMetricValue) DeepCopy() *ExternalMetricValue { + if in == nil { + return nil + } + out := new(ExternalMetricValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalMetricValue) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricValueList) DeepCopyInto(out *ExternalMetricValueList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ExternalMetricValue, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricValueList. +func (in *ExternalMetricValueList) DeepCopy() *ExternalMetricValueList { + if in == nil { + return nil + } + out := new(ExternalMetricValueList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalMetricValueList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/client.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/client.go new file mode 100644 index 000000000000..d18d9e124780 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/client.go @@ -0,0 +1,100 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package external_metrics + +import ( + "context" + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "k8s.io/client-go/util/flowcontrol" + "k8s.io/metrics/pkg/apis/external_metrics/v1beta1" +) + +type externalMetricsClient struct { + client rest.Interface +} + +func New(client rest.Interface) ExternalMetricsClient { + return &externalMetricsClient{ + client: client, + } +} + +func NewForConfig(c *rest.Config) (ExternalMetricsClient, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + configShallowCopy.APIPath = "/apis" + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + configShallowCopy.GroupVersion = &v1beta1.SchemeGroupVersion + configShallowCopy.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + client, err := rest.RESTClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + return New(client), nil +} + +func NewForConfigOrDie(c *rest.Config) ExternalMetricsClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +func (c *externalMetricsClient) NamespacedMetrics(namespace string) MetricsInterface { + return &namespacedMetrics{ + client: c, + namespace: namespace, + } +} + +type namespacedMetrics struct { + client *externalMetricsClient + namespace string +} + +func (m *namespacedMetrics) List(metricName string, metricSelector labels.Selector) (*v1beta1.ExternalMetricValueList, error) { + res := &v1beta1.ExternalMetricValueList{} + err := m.client.client.Get(). + Namespace(m.namespace). + Resource(metricName). + VersionedParams(&metav1.ListOptions{ + LabelSelector: metricSelector.String(), + }, metav1.ParameterCodec). + Do(context.TODO()). + Into(res) + + if err != nil { + return nil, err + } + + return res, nil +} diff --git a/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/interfaces.go b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/interfaces.go new file mode 100644 index 000000000000..d98c161aaf49 --- /dev/null +++ b/vertical-pod-autoscaler/vendor/k8s.io/metrics/pkg/client/external_metrics/interfaces.go @@ -0,0 +1,40 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package external_metrics + +import ( + "k8s.io/apimachinery/pkg/labels" + "k8s.io/metrics/pkg/apis/external_metrics/v1beta1" +) + +// ExternalMetricsClient is a client for fetching external metrics. +type ExternalMetricsClient interface { + NamespacedMetricsGetter +} + +// NamespacedMetricsGetter provides access to an interface for fetching +// metrics in a particular namespace. +type NamespacedMetricsGetter interface { + NamespacedMetrics(namespace string) MetricsInterface +} + +// MetricsInterface provides access to external metrics. +type MetricsInterface interface { + // List fetches the metric for the given namespace that maches the given + // metricSelector. + List(metricName string, metricSelector labels.Selector) (*v1beta1.ExternalMetricValueList, error) +} diff --git a/vertical-pod-autoscaler/vendor/modules.txt b/vertical-pod-autoscaler/vendor/modules.txt index b218be2a9417..caed2c4ec3f4 100644 --- a/vertical-pod-autoscaler/vendor/modules.txt +++ b/vertical-pod-autoscaler/vendor/modules.txt @@ -652,6 +652,8 @@ k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/validation/spec # k8s.io/metrics v0.25.0 => k8s.io/metrics v0.26.1 ## explicit; go 1.19 +k8s.io/metrics/pkg/apis/external_metrics +k8s.io/metrics/pkg/apis/external_metrics/v1beta1 k8s.io/metrics/pkg/apis/metrics k8s.io/metrics/pkg/apis/metrics/v1alpha1 k8s.io/metrics/pkg/apis/metrics/v1beta1 From 55c92e1025372abdd4259d1b6eacc23e602d6b43 Mon Sep 17 00:00:00 2001 From: Marc-Andre Dufresne Date: Fri, 11 Aug 2023 17:58:03 -0400 Subject: [PATCH 022/125] add json logging support --- cluster-autoscaler/FAQ.md | 15 + cluster-autoscaler/go.mod | 1 + cluster-autoscaler/go.sum | 8 + cluster-autoscaler/main.go | 22 +- .../vendor/github.com/go-logr/zapr/.gitignore | 2 + .../vendor/github.com/go-logr/zapr/LICENSE | 201 +++++++++++ .../vendor/github.com/go-logr/zapr/README.md | 70 ++++ .../vendor/github.com/go-logr/zapr/zapr.go | 316 ++++++++++++++++++ .../k8s.io/component-base/logs/json/json.go | 159 +++++++++ .../logs/json/register/register.go | 29 ++ cluster-autoscaler/vendor/modules.txt | 5 + 11 files changed, 825 insertions(+), 3 deletions(-) create mode 100644 cluster-autoscaler/vendor/github.com/go-logr/zapr/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/go-logr/zapr/LICENSE create mode 100644 cluster-autoscaler/vendor/github.com/go-logr/zapr/README.md create mode 100644 cluster-autoscaler/vendor/github.com/go-logr/zapr/zapr.go create mode 100644 cluster-autoscaler/vendor/k8s.io/component-base/logs/json/json.go create mode 100644 cluster-autoscaler/vendor/k8s.io/component-base/logs/json/register/register.go diff --git a/cluster-autoscaler/FAQ.md b/cluster-autoscaler/FAQ.md index 17b25a0a8281..17729b13e4d8 100644 --- a/cluster-autoscaler/FAQ.md +++ b/cluster-autoscaler/FAQ.md @@ -29,6 +29,7 @@ this document: * [I'm running cluster with nodes in multiple zones for HA purposes. Is that supported by Cluster Autoscaler?](#im-running-cluster-with-nodes-in-multiple-zones-for-ha-purposes-is-that-supported-by-cluster-autoscaler) * [How can I monitor Cluster Autoscaler?](#how-can-i-monitor-cluster-autoscaler) * [How can I increase the information that the CA is logging?](#how-can-i-increase-the-information-that-the-ca-is-logging) + * [How can I change the log format that the CA outputs?](#how-can-i-change-the-log-format-that-the-ca-outputs) * [How can I see all the events from Cluster Autoscaler?](#how-can-i-see-all-events-from-cluster-autoscaler) * [How can I scale my cluster to just 1 node?](#how-can-i-scale-my-cluster-to-just-1-node) * [How can I scale a node group to 0?](#how-can-i-scale-a-node-group-to-0) @@ -923,6 +924,20 @@ or infrastructure endpoints, then setting a value of `--v=9` will show all the i HTTP calls made. Be aware that using verbosity levels higher than `--v=1` will generate an increased amount of logs, prepare your deployments and storage accordingly. +### How Can I change the log format that the CA outputs? + +There are 2 log format options, `text` and `json`. By default (`text`), the Cluster Autoscaler will output +logs in the [klog native format](https://kubernetes.io/docs/concepts/cluster-administration/system-logs/#klog-output). +``` +I0823 17:15:11.472183 29944 main.go:569] Cluster Autoscaler 1.28.0-beta.0 +``` + +Alternatively, adding the flag `--logging-format=json` changes the +[log output to json](https://kubernetes.io/docs/concepts/cluster-administration/system-logs/#klog-output). +``` +{"ts":1692825334994.433,"caller":"cluster-autoscaler/main.go:569","msg":"Cluster Autoscaler 1.28.0-beta.0\n","v":1} +``` + ### What events are emitted by CA? Whenever Cluster Autoscaler adds or removes nodes it will create events diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index 4fc05b0a531b..0fa7b799791d 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -92,6 +92,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 971d1421d687..6b33041abdfd 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -122,6 +122,7 @@ github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9 github.com/aws/aws-sdk-go v1.44.241 h1:D3KycZq3HjhmjYGzvTcmX/Ztf/KNmsfTmdDuKdnzZKo= github.com/aws/aws-sdk-go v1.44.241/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -261,6 +262,7 @@ github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= @@ -662,13 +664,17 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -929,6 +935,7 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1155,6 +1162,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 5005a0ba4b32..761a644ea404 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -67,6 +67,9 @@ import ( kube_flag "k8s.io/component-base/cli/flag" componentbaseconfig "k8s.io/component-base/config" "k8s.io/component-base/config/options" + "k8s.io/component-base/logs" + logsapi "k8s.io/component-base/logs/api/v1" + _ "k8s.io/component-base/logs/json/register" "k8s.io/component-base/metrics/legacyregistry" "k8s.io/klog/v2" scheduler_config "k8s.io/kubernetes/pkg/scheduler/apis/config" @@ -540,13 +543,26 @@ func run(healthCheck *metrics.HealthCheck, debuggingSnapshotter debuggingsnapsho func main() { klog.InitFlags(nil) + featureGate := utilfeature.DefaultMutableFeatureGate + loggingConfig := logsapi.NewLoggingConfiguration() + + if err := logsapi.AddFeatureGates(featureGate); err != nil { + klog.Fatalf("Failed to add logging feature flags: %v", err) + } + + logsapi.AddFlags(loggingConfig, pflag.CommandLine) + featureGate.AddFlag(pflag.CommandLine) + kube_flag.InitFlags() + + if err := logsapi.ValidateAndApply(loggingConfig, featureGate); err != nil { + klog.Fatalf("Failed to validate and apply logging configuration: %v", err) + } + + logs.InitLogs() leaderElection := defaultLeaderElectionConfiguration() leaderElection.LeaderElect = true - options.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine) - utilfeature.DefaultMutableFeatureGate.AddFlag(pflag.CommandLine) - kube_flag.InitFlags() healthCheck := metrics.NewHealthCheck(*maxInactivityTimeFlag, *maxFailingTimeFlag) diff --git a/cluster-autoscaler/vendor/github.com/go-logr/zapr/.gitignore b/cluster-autoscaler/vendor/github.com/go-logr/zapr/.gitignore new file mode 100644 index 000000000000..b72f9be2042a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-logr/zapr/.gitignore @@ -0,0 +1,2 @@ +*~ +*.swp diff --git a/cluster-autoscaler/vendor/github.com/go-logr/zapr/LICENSE b/cluster-autoscaler/vendor/github.com/go-logr/zapr/LICENSE new file mode 100644 index 000000000000..8dada3edaf50 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-logr/zapr/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cluster-autoscaler/vendor/github.com/go-logr/zapr/README.md b/cluster-autoscaler/vendor/github.com/go-logr/zapr/README.md new file mode 100644 index 000000000000..78f5f7653f6b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-logr/zapr/README.md @@ -0,0 +1,70 @@ +Zapr :zap: +========== + +A [logr](https://github.com/go-logr/logr) implementation using +[Zap](https://github.com/uber-go/zap). + +Usage +----- + +```go +import ( + "fmt" + + "go.uber.org/zap" + "github.com/go-logr/logr" + "github.com/go-logr/zapr" +) + +func main() { + var log logr.Logger + + zapLog, err := zap.NewDevelopment() + if err != nil { + panic(fmt.Sprintf("who watches the watchmen (%v)?", err)) + } + log = zapr.NewLogger(zapLog) + + log.Info("Logr in action!", "the answer", 42) +} +``` + +Increasing Verbosity +-------------------- + +Zap uses semantically named levels for logging (`DebugLevel`, `InfoLevel`, +`WarningLevel`, ...). Logr uses arbitrary numeric levels. By default logr's +`V(0)` is zap's `InfoLevel` and `V(1)` is zap's `DebugLevel` (which is +numerically -1). Zap does not have named levels that are more verbose than +`DebugLevel`, but it's possible to fake it. + +As of zap v1.19.0 you can do something like the following in your setup code: + +```go + zc := zap.NewProductionConfig() + zc.Level = zap.NewAtomicLevelAt(zapcore.Level(-2)) + z, err := zc.Build() + if err != nil { + // ... + } + log := zapr.NewLogger(z) +``` + +Zap's levels get more verbose as the number gets smaller and more important and +the number gets larger (`DebugLevel` is -1, `InfoLevel` is 0, `WarnLevel` is 1, +and so on). + +The `-2` in the above snippet means that `log.V(2).Info()` calls will be active. +`-3` would enable `log.V(3).Info()`, etc. Note that zap's levels are `int8` +which means the most verbose level you can give it is -128. The zapr +implementation will cap `V()` levels greater than 127 to 127, so setting the +zap level to -128 really means "activate all logs". + +Implementation Details +---------------------- + +For the most part, concepts in Zap correspond directly with those in logr. + +Unlike Zap, all fields *must* be in the form of sugared fields -- +it's illegal to pass a strongly-typed Zap field in a key position to any +of the logging methods (`Log`, `Error`). diff --git a/cluster-autoscaler/vendor/github.com/go-logr/zapr/zapr.go b/cluster-autoscaler/vendor/github.com/go-logr/zapr/zapr.go new file mode 100644 index 000000000000..8bb7fceb3f0c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-logr/zapr/zapr.go @@ -0,0 +1,316 @@ +/* +Copyright 2019 The logr Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Copyright 2018 Solly Ross +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package zapr defines an implementation of the github.com/go-logr/logr +// interfaces built on top of Zap (go.uber.org/zap). +// +// Usage +// +// A new logr.Logger can be constructed from an existing zap.Logger using +// the NewLogger function: +// +// log := zapr.NewLogger(someZapLogger) +// +// Implementation Details +// +// For the most part, concepts in Zap correspond directly with those in +// logr. +// +// Unlike Zap, all fields *must* be in the form of sugared fields -- +// it's illegal to pass a strongly-typed Zap field in a key position +// to any of the log methods. +// +// Levels in logr correspond to custom debug levels in Zap. Any given level +// in logr is represents by its inverse in zap (`zapLevel = -1*logrLevel`). +// For example V(2) is equivalent to log level -2 in Zap, while V(1) is +// equivalent to Zap's DebugLevel. +package zapr + +import ( + "fmt" + + "github.com/go-logr/logr" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// NB: right now, we always use the equivalent of sugared logging. +// This is necessary, since logr doesn't define non-suggared types, +// and using zap-specific non-suggared types would make uses tied +// directly to Zap. + +// zapLogger is a logr.Logger that uses Zap to log. The level has already been +// converted to a Zap level, which is to say that `logrLevel = -1*zapLevel`. +type zapLogger struct { + // NB: this looks very similar to zap.SugaredLogger, but + // deals with our desire to have multiple verbosity levels. + l *zap.Logger + + // numericLevelKey controls whether the numeric logr level is + // added to each Info log message and with which key. + numericLevelKey string + + // errorKey is the field name used for the error in + // Logger.Error calls. + errorKey string + + // allowZapFields enables logging of strongly-typed Zap + // fields. It is off by default because it breaks + // implementation agnosticism. + allowZapFields bool + + // panicMessages enables log messages for invalid log calls + // that explain why a call was invalid (for example, + // non-string key). This is enabled by default. + panicMessages bool +} + +const ( + // noLevel tells handleFields to not inject a numeric log level field. + noLevel = -1 +) + +// handleFields converts a bunch of arbitrary key-value pairs into Zap fields. It takes +// additional pre-converted Zap fields, for use with automatically attached fields, like +// `error`. +func (zl *zapLogger) handleFields(lvl int, args []interface{}, additional ...zap.Field) []zap.Field { + injectNumericLevel := zl.numericLevelKey != "" && lvl != noLevel + + // a slightly modified version of zap.SugaredLogger.sweetenFields + if len(args) == 0 { + // fast-return if we have no suggared fields and no "v" field. + if !injectNumericLevel { + return additional + } + // Slightly slower fast path when we need to inject "v". + return append(additional, zap.Int(zl.numericLevelKey, lvl)) + } + + // unlike Zap, we can be pretty sure users aren't passing structured + // fields (since logr has no concept of that), so guess that we need a + // little less space. + numFields := len(args)/2 + len(additional) + if injectNumericLevel { + numFields++ + } + fields := make([]zap.Field, 0, numFields) + if injectNumericLevel { + fields = append(fields, zap.Int(zl.numericLevelKey, lvl)) + } + for i := 0; i < len(args); { + // Check just in case for strongly-typed Zap fields, + // which might be illegal (since it breaks + // implementation agnosticism). If disabled, we can + // give a better error message. + if field, ok := args[i].(zap.Field); ok { + if zl.allowZapFields { + fields = append(fields, field) + i++ + continue + } + if zl.panicMessages { + zl.l.WithOptions(zap.AddCallerSkip(1)).DPanic("strongly-typed Zap Field passed to logr", zapIt("zap field", args[i])) + } + break + } + + // make sure this isn't a mismatched key + if i == len(args)-1 { + if zl.panicMessages { + zl.l.WithOptions(zap.AddCallerSkip(1)).DPanic("odd number of arguments passed as key-value pairs for logging", zapIt("ignored key", args[i])) + } + break + } + + // process a key-value pair, + // ensuring that the key is a string + key, val := args[i], args[i+1] + keyStr, isString := key.(string) + if !isString { + // if the key isn't a string, DPanic and stop logging + if zl.panicMessages { + zl.l.WithOptions(zap.AddCallerSkip(1)).DPanic("non-string key argument passed to logging, ignoring all later arguments", zapIt("invalid key", key)) + } + break + } + + fields = append(fields, zapIt(keyStr, val)) + i += 2 + } + + return append(fields, additional...) +} + +func zapIt(field string, val interface{}) zap.Field { + // Handle types that implement logr.Marshaler: log the replacement + // object instead of the original one. + if marshaler, ok := val.(logr.Marshaler); ok { + field, val = invokeMarshaler(field, marshaler) + } + return zap.Any(field, val) +} + +func invokeMarshaler(field string, m logr.Marshaler) (f string, ret interface{}) { + defer func() { + if r := recover(); r != nil { + ret = fmt.Sprintf("PANIC=%s", r) + f = field + "Error" + } + }() + return field, m.MarshalLog() +} + +func (zl *zapLogger) Init(ri logr.RuntimeInfo) { + zl.l = zl.l.WithOptions(zap.AddCallerSkip(ri.CallDepth)) +} + +// Zap levels are int8 - make sure we stay in bounds. logr itself should +// ensure we never get negative values. +func toZapLevel(lvl int) zapcore.Level { + if lvl > 127 { + lvl = 127 + } + // zap levels are inverted. + return 0 - zapcore.Level(lvl) +} + +func (zl zapLogger) Enabled(lvl int) bool { + return zl.l.Core().Enabled(toZapLevel(lvl)) +} + +func (zl *zapLogger) Info(lvl int, msg string, keysAndVals ...interface{}) { + if checkedEntry := zl.l.Check(toZapLevel(lvl), msg); checkedEntry != nil { + checkedEntry.Write(zl.handleFields(lvl, keysAndVals)...) + } +} + +func (zl *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) { + if checkedEntry := zl.l.Check(zap.ErrorLevel, msg); checkedEntry != nil { + checkedEntry.Write(zl.handleFields(noLevel, keysAndVals, zap.NamedError(zl.errorKey, err))...) + } +} + +func (zl *zapLogger) WithValues(keysAndValues ...interface{}) logr.LogSink { + newLogger := *zl + newLogger.l = zl.l.With(zl.handleFields(noLevel, keysAndValues)...) + return &newLogger +} + +func (zl *zapLogger) WithName(name string) logr.LogSink { + newLogger := *zl + newLogger.l = zl.l.Named(name) + return &newLogger +} + +func (zl *zapLogger) WithCallDepth(depth int) logr.LogSink { + newLogger := *zl + newLogger.l = zl.l.WithOptions(zap.AddCallerSkip(depth)) + return &newLogger +} + +// Underlier exposes access to the underlying logging implementation. Since +// callers only have a logr.Logger, they have to know which implementation is +// in use, so this interface is less of an abstraction and more of way to test +// type conversion. +type Underlier interface { + GetUnderlying() *zap.Logger +} + +func (zl *zapLogger) GetUnderlying() *zap.Logger { + return zl.l +} + +// NewLogger creates a new logr.Logger using the given Zap Logger to log. +func NewLogger(l *zap.Logger) logr.Logger { + return NewLoggerWithOptions(l) +} + +// NewLoggerWithOptions creates a new logr.Logger using the given Zap Logger to +// log and applies additional options. +func NewLoggerWithOptions(l *zap.Logger, opts ...Option) logr.Logger { + // creates a new logger skipping one level of callstack + log := l.WithOptions(zap.AddCallerSkip(1)) + zl := &zapLogger{ + l: log, + } + zl.errorKey = "error" + zl.panicMessages = true + for _, option := range opts { + option(zl) + } + return logr.New(zl) +} + +// Option is one additional parameter for NewLoggerWithOptions. +type Option func(*zapLogger) + +// LogInfoLevel controls whether a numeric log level is added to +// Info log message. The empty string disables this, a non-empty +// string is the key for the additional field. Errors and +// internal panic messages do not have a log level and thus +// are always logged without this extra field. +func LogInfoLevel(key string) Option { + return func(zl *zapLogger) { + zl.numericLevelKey = key + } +} + +// ErrorKey replaces the default "error" field name used for the error +// in Logger.Error calls. +func ErrorKey(key string) Option { + return func(zl *zapLogger) { + zl.errorKey = key + } +} + +// AllowZapFields controls whether strongly-typed Zap fields may +// be passed instead of a key/value pair. This is disabled by +// default because it breaks implementation agnosticism. +func AllowZapFields(allowed bool) Option { + return func(zl *zapLogger) { + zl.allowZapFields = allowed + } +} + +// DPanicOnBugs controls whether extra log messages are emitted for +// invalid log calls with zap's DPanic method. Depending on the +// configuration of the zap logger, the program then panics after +// emitting the log message which is useful in development because +// such invalid log calls are bugs in the program. The log messages +// explain why a call was invalid (for example, non-string +// key). Emitting them is enabled by default. +func DPanicOnBugs(enabled bool) Option { + return func(zl *zapLogger) { + zl.panicMessages = enabled + } +} + +var _ logr.LogSink = &zapLogger{} +var _ logr.CallDepthLogSink = &zapLogger{} diff --git a/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/json.go b/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/json.go new file mode 100644 index 000000000000..20723687e985 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/json.go @@ -0,0 +1,159 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package json + +import ( + "io" + "sync/atomic" + "time" + + "github.com/go-logr/logr" + "github.com/go-logr/zapr" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + + "k8s.io/component-base/featuregate" + logsapi "k8s.io/component-base/logs/api/v1" +) + +var ( + // timeNow stubbed out for testing + timeNow = time.Now +) + +type runtime struct { + v uint32 +} + +func (r *runtime) ZapV() zapcore.Level { + // zap levels are inverted: everything with a verbosity >= threshold gets logged. + return -zapcore.Level(atomic.LoadUint32(&r.v)) +} + +// Enabled implements the zapcore.LevelEnabler interface. +func (r *runtime) Enabled(level zapcore.Level) bool { + return level >= r.ZapV() +} + +func (r *runtime) SetVerbosityLevel(v uint32) error { + atomic.StoreUint32(&r.v, v) + return nil +} + +var _ zapcore.LevelEnabler = &runtime{} + +// NewJSONLogger creates a new json logr.Logger and its associated +// control interface. The separate error stream is optional and may be nil. +// The encoder config is also optional. +func NewJSONLogger(v logsapi.VerbosityLevel, infoStream, errorStream zapcore.WriteSyncer, encoderConfig *zapcore.EncoderConfig) (logr.Logger, logsapi.RuntimeControl) { + r := &runtime{v: uint32(v)} + + if encoderConfig == nil { + encoderConfig = &zapcore.EncoderConfig{ + MessageKey: "msg", + CallerKey: "caller", + NameKey: "logger", + TimeKey: "ts", + EncodeTime: epochMillisTimeEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + } + + encoder := zapcore.NewJSONEncoder(*encoderConfig) + var core zapcore.Core + if errorStream == nil { + core = zapcore.NewCore(encoder, infoStream, r) + } else { + highPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + return lvl >= zapcore.ErrorLevel && r.Enabled(lvl) + }) + lowPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + return lvl < zapcore.ErrorLevel && r.Enabled(lvl) + }) + core = zapcore.NewTee( + zapcore.NewCore(encoder, errorStream, highPriority), + zapcore.NewCore(encoder, infoStream, lowPriority), + ) + } + l := zap.New(core, zap.WithCaller(true)) + return zapr.NewLoggerWithOptions(l, zapr.LogInfoLevel("v"), zapr.ErrorKey("err")), + logsapi.RuntimeControl{ + SetVerbosityLevel: r.SetVerbosityLevel, + Flush: func() { + _ = l.Sync() + }, + } +} + +func epochMillisTimeEncoder(_ time.Time, enc zapcore.PrimitiveArrayEncoder) { + nanos := timeNow().UnixNano() + millis := float64(nanos) / float64(time.Millisecond) + enc.AppendFloat64(millis) +} + +// Factory produces JSON logger instances. +type Factory struct{} + +var _ logsapi.LogFormatFactory = Factory{} + +func (f Factory) Feature() featuregate.Feature { + return logsapi.LoggingBetaOptions +} + +func (f Factory) Create(c logsapi.LoggingConfiguration, o logsapi.LoggingOptions) (logr.Logger, logsapi.RuntimeControl) { + // We intentionally avoid all os.File.Sync calls. Output is unbuffered, + // therefore we don't need to flush, and calling the underlying fsync + // would just slow down writing. + // + // The assumption is that logging only needs to ensure that data gets + // written to the output stream before the process terminates, but + // doesn't need to worry about data not being written because of a + // system crash or powerloss. + stderr := zapcore.Lock(AddNopSync(o.ErrorStream)) + if c.Options.JSON.SplitStream { + stdout := zapcore.Lock(AddNopSync(o.InfoStream)) + size := c.Options.JSON.InfoBufferSize.Value() + if size > 0 { + // Prevent integer overflow. + if size > 2*1024*1024*1024 { + size = 2 * 1024 * 1024 * 1024 + } + stdout = &zapcore.BufferedWriteSyncer{ + WS: stdout, + Size: int(size), + } + } + // stdout for info messages, stderr for errors. + return NewJSONLogger(c.Verbosity, stdout, stderr, nil) + } + // Write info messages and errors to stderr to prevent mixing with normal program output. + return NewJSONLogger(c.Verbosity, stderr, nil, nil) +} + +// AddNoSync adds a NOP Sync implementation. +func AddNopSync(writer io.Writer) zapcore.WriteSyncer { + return nopSync{Writer: writer} +} + +type nopSync struct { + io.Writer +} + +func (f nopSync) Sync() error { + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/register/register.go b/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/register/register.go new file mode 100644 index 000000000000..bf76425a2afe --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/component-base/logs/json/register/register.go @@ -0,0 +1,29 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package register + +import ( + logsapi "k8s.io/component-base/logs/api/v1" + json "k8s.io/component-base/logs/json" +) + +func init() { + // JSON format is optional klog format + if err := logsapi.RegisterLogFormat(logsapi.JSONLogFormat, json.Factory{}, logsapi.LoggingBetaOptions); err != nil { + panic(err) + } +} diff --git a/cluster-autoscaler/vendor/modules.txt b/cluster-autoscaler/vendor/modules.txt index edd7fddeaea8..57ee9854160d 100644 --- a/cluster-autoscaler/vendor/modules.txt +++ b/cluster-autoscaler/vendor/modules.txt @@ -244,6 +244,9 @@ github.com/go-logr/logr/funcr # github.com/go-logr/stdr v1.2.2 ## explicit; go 1.16 github.com/go-logr/stdr +# github.com/go-logr/zapr v1.2.3 +## explicit; go 1.16 +github.com/go-logr/zapr # github.com/go-openapi/jsonpointer v0.19.6 ## explicit; go 1.13 github.com/go-openapi/jsonpointer @@ -1618,6 +1621,8 @@ k8s.io/component-base/featuregate k8s.io/component-base/logs k8s.io/component-base/logs/api/v1 k8s.io/component-base/logs/internal/setverbositylevel +k8s.io/component-base/logs/json +k8s.io/component-base/logs/json/register k8s.io/component-base/logs/klogflags k8s.io/component-base/logs/logreduction k8s.io/component-base/metrics From c80205bdede75d714a05e4f2da44f555e39d69f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Douglas=20Gad=C3=AAlha?= Date: Mon, 28 Aug 2023 18:06:11 -0300 Subject: [PATCH 023/125] fix(chart): cloudProvider name reference for OCI --- charts/cluster-autoscaler/templates/deployment.yaml | 2 +- charts/cluster-autoscaler/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/cluster-autoscaler/templates/deployment.yaml b/charts/cluster-autoscaler/templates/deployment.yaml index 957398a3bd69..2b5bba272b01 100644 --- a/charts/cluster-autoscaler/templates/deployment.yaml +++ b/charts/cluster-autoscaler/templates/deployment.yaml @@ -80,7 +80,7 @@ spec: - --node-group-auto-discovery=mig:namePrefix={{ .name }},min={{ .minSize }},max={{ .maxSize }} {{- end }} {{- end }} - {{- if eq .Values.cloudProvider "oci-oke" }} + {{- if eq .Values.cloudProvider "oci" }} {{- if .Values.cloudConfigPath }} - --nodes={{ .minSize }}:{{ .maxSize }}:{{ .name }} - --balance-similar-node-groups diff --git a/charts/cluster-autoscaler/values.yaml b/charts/cluster-autoscaler/values.yaml index a7deb24a7e70..ec4e605fbcaa 100644 --- a/charts/cluster-autoscaler/values.yaml +++ b/charts/cluster-autoscaler/values.yaml @@ -6,7 +6,7 @@ affinity: {} additionalLabels: {} autoDiscovery: - # cloudProviders `aws`, `gce`, `azure`, `magnum` and `clusterapi` `oci-oke` are supported by auto-discovery at this time + # cloudProviders `aws`, `gce`, `azure`, `magnum` and `clusterapi` `oci` are supported by auto-discovery at this time # AWS: Set tags as described in https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#auto-discovery-setup # autoDiscovery.clusterName -- Enable autodiscovery for `cloudProvider=aws`, for groups matching `autoDiscovery.tags`. From 2327f192d096f75a1f46cc09fcd006095932d302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Douglas=20Gad=C3=AAlha?= Date: Mon, 28 Aug 2023 18:35:50 -0300 Subject: [PATCH 024/125] fix(docs): inline list of supported cloud providers --- charts/cluster-autoscaler/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/cluster-autoscaler/values.yaml b/charts/cluster-autoscaler/values.yaml index ec4e605fbcaa..b7b39739d3ec 100644 --- a/charts/cluster-autoscaler/values.yaml +++ b/charts/cluster-autoscaler/values.yaml @@ -6,7 +6,7 @@ affinity: {} additionalLabels: {} autoDiscovery: - # cloudProviders `aws`, `gce`, `azure`, `magnum` and `clusterapi` `oci` are supported by auto-discovery at this time + # cloudProviders `aws`, `gce`, `azure`, `magnum`, `clusterapi` and `oci` are supported by auto-discovery at this time # AWS: Set tags as described in https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#auto-discovery-setup # autoDiscovery.clusterName -- Enable autodiscovery for `cloudProvider=aws`, for groups matching `autoDiscovery.tags`. From 6c677b97ab1a7ef423707748d405a958ab8a595c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Douglas=20Gad=C3=AAlha?= Date: Mon, 28 Aug 2023 18:39:57 -0300 Subject: [PATCH 025/125] chore: bump cluster-autoscaler chart version --- charts/cluster-autoscaler/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/cluster-autoscaler/Chart.yaml b/charts/cluster-autoscaler/Chart.yaml index 7bbaffd34b6c..394a0be6d268 100644 --- a/charts/cluster-autoscaler/Chart.yaml +++ b/charts/cluster-autoscaler/Chart.yaml @@ -11,4 +11,4 @@ name: cluster-autoscaler sources: - https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler type: application -version: 9.29.2 +version: 9.29.3 From c2ea940c3b3ad95ec8825628b617d137315f8513 Mon Sep 17 00:00:00 2001 From: shubham82 Date: Tue, 29 Aug 2023 15:18:57 +0530 Subject: [PATCH 026/125] Added the RBAC Permission to Cloudstack --- .../cloudstack/examples/cluster-autoscaler-standard.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/cloudstack/examples/cluster-autoscaler-standard.yaml b/cluster-autoscaler/cloudprovider/cloudstack/examples/cluster-autoscaler-standard.yaml index d1d3a8946bb3..7fa0c9b2f910 100644 --- a/cluster-autoscaler/cloudprovider/cloudstack/examples/cluster-autoscaler-standard.yaml +++ b/cluster-autoscaler/cloudprovider/cloudstack/examples/cluster-autoscaler-standard.yaml @@ -51,7 +51,7 @@ rules: resources: ["statefulsets", "replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["storage.k8s.io"] - resources: ["storageclasses", "csinodes"] + resources: ["storageclasses", "csinodes", "csidrivers", "csistoragecapacities"] verbs: ["watch", "list", "get"] - apiGroups: ["batch", "extensions"] resources: ["jobs"] From 71d2f9b7db3c88a4570dc841007176b711c7bae8 Mon Sep 17 00:00:00 2001 From: Hakan Bostan Date: Wed, 23 Aug 2023 14:32:30 +0000 Subject: [PATCH 027/125] Add additional test cases to scale down budgets. Tests were missing cases where the empty and drain nodes are from the same atomic group. --- .../core/scaledown/budgets/budgets_test.go | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/cluster-autoscaler/core/scaledown/budgets/budgets_test.go b/cluster-autoscaler/core/scaledown/budgets/budgets_test.go index 9227f99109bc..dc03a892db3e 100644 --- a/cluster-autoscaler/core/scaledown/budgets/budgets_test.go +++ b/cluster-autoscaler/core/scaledown/budgets/budgets_test.go @@ -39,6 +39,7 @@ func TestCropNodesToBudgets(t *testing.T) { testNg2 := testprovider.NewTestNodeGroup("test-ng2", 0, 100, 3, true, false, "n1-standard-2", nil, nil) atomic3 := sizedNodeGroup("atomic-3", 3, true) atomic4 := sizedNodeGroup("atomic-4", 4, true) + atomic5 := sizedNodeGroup("atomic-5", 5, true) atomic8 := sizedNodeGroup("atomic-8", 8, true) atomic11 := sizedNodeGroup("atomic-11", 11, true) for tn, tc := range map[string]struct { @@ -222,6 +223,30 @@ func TestCropNodesToBudgets(t *testing.T) { wantEmpty: generateNodeGroupViewList(atomic8, 0, 8), wantDrain: []*NodeGroupView{}, }, + "empty&drain atomic nodes in same group within overall limit, no deletions in progress": { + empty: generateNodeGroupViewList(atomic8, 0, 5), + drain: generateNodeGroupViewList(atomic8, 5, 8), + wantEmpty: generateNodeGroupViewList(atomic8, 0, 5), + wantDrain: generateNodeGroupViewList(atomic8, 5, 8), + }, + "empty&drain atomic nodes in same group exceeding overall limit, no deletions in progress": { + empty: generateNodeGroupViewList(atomic11, 0, 8), + drain: generateNodeGroupViewList(atomic11, 8, 11), + wantEmpty: generateNodeGroupViewList(atomic11, 0, 8), + wantDrain: generateNodeGroupViewList(atomic11, 8, 11), + }, + "empty&drain atomic nodes in same group exceeding drain limit, no deletions in progress": { + empty: generateNodeGroupViewList(atomic8, 0, 2), + drain: generateNodeGroupViewList(atomic8, 2, 8), + wantEmpty: generateNodeGroupViewList(atomic8, 0, 2), + wantDrain: generateNodeGroupViewList(atomic8, 2, 8), + }, + "empty&drain atomic nodes in same group not matching node group size, no deletions in progress": { + empty: generateNodeGroupViewList(atomic8, 0, 2), + drain: generateNodeGroupViewList(atomic8, 2, 4), + wantEmpty: []*NodeGroupView{}, + wantDrain: []*NodeGroupView{}, + }, "empty&drain atomic nodes exceeding drain limit, no deletions in progress": { empty: generateNodeGroupViewList(atomic4, 0, 4), drain: generateNodeGroupViewList(atomic8, 0, 8), @@ -234,6 +259,24 @@ func TestCropNodesToBudgets(t *testing.T) { wantEmpty: append(generateNodeGroupViewList(atomic3, 0, 3), generateNodeGroupViewList(testNg, 0, 5)...), wantDrain: []*NodeGroupView{}, }, + "empty&drain regular and atomic nodes in same group exceeding overall limit, no deletions in progress": { + empty: append(generateNodeGroupViewList(testNg, 0, 5), generateNodeGroupViewList(atomic11, 0, 8)...), + drain: generateNodeGroupViewList(atomic11, 8, 11), + wantEmpty: generateNodeGroupViewList(atomic11, 0, 8), + wantDrain: generateNodeGroupViewList(atomic11, 8, 11), + }, + "empty&drain regular and multiple atomic nodes in same group exceeding drain limit, no deletions in progress": { + empty: append(append(generateNodeGroupViewList(testNg, 0, 5), generateNodeGroupViewList(atomic8, 0, 5)...), generateNodeGroupViewList(atomic11, 0, 8)...), + drain: append(generateNodeGroupViewList(atomic11, 8, 11), generateNodeGroupViewList(atomic8, 5, 8)...), + wantEmpty: append(generateNodeGroupViewList(atomic8, 0, 5), generateNodeGroupViewList(testNg, 0, 2)...), + wantDrain: generateNodeGroupViewList(atomic8, 5, 8), + }, + "empty&drain multiple atomic nodes in same group exceeding overall limit, no deletions in progress": { + empty: append(append(generateNodeGroupViewList(atomic3, 0, 3), generateNodeGroupViewList(atomic4, 0, 2)...), generateNodeGroupViewList(atomic11, 0, 11)...), + drain: generateNodeGroupViewList(atomic4, 2, 4), + wantEmpty: append(generateNodeGroupViewList(atomic3, 0, 3), generateNodeGroupViewList(atomic4, 0, 2)...), + wantDrain: generateNodeGroupViewList(atomic4, 2, 4), + }, "empty regular and drain atomic nodes exceeding overall limit, no deletions in progress": { drain: generateNodeGroupViewList(atomic8, 0, 8), empty: generateNodeGroupViewList(testNg, 0, 5), @@ -253,6 +296,20 @@ func TestCropNodesToBudgets(t *testing.T) { wantEmpty: []*NodeGroupView{}, wantDrain: []*NodeGroupView{}, }, + "empty&drain atomic nodes with deletions in progress, 0 overall budget left": { + emptyDeletionsInProgress: 10, + empty: generateNodeGroupViewList(atomic4, 0, 4), + drain: generateNodeGroupViewList(atomic3, 0, 3), + wantEmpty: []*NodeGroupView{}, + wantDrain: []*NodeGroupView{}, + }, + "empty&drain atomic nodes in same group with deletions in progress, 0 overall budget left": { + emptyDeletionsInProgress: 10, + empty: generateNodeGroupViewList(atomic8, 0, 4), + drain: generateNodeGroupViewList(atomic8, 4, 8), + wantEmpty: []*NodeGroupView{}, + wantDrain: []*NodeGroupView{}, + }, "empty&drain nodes with deletions in progress, overall budget exceeded (shouldn't happen, just a sanity check)": { emptyDeletionsInProgress: 50, empty: generateNodeGroupViewList(testNg, 0, 5), @@ -267,6 +324,13 @@ func TestCropNodesToBudgets(t *testing.T) { wantEmpty: generateNodeGroupViewList(testNg, 0, 5), wantDrain: []*NodeGroupView{}, }, + "empty&drain atomic nodes with deletions in progress, 0 drain budget left": { + drainDeletionsInProgress: 5, + empty: generateNodeGroupViewList(atomic4, 0, 4), + drain: generateNodeGroupViewList(atomic3, 0, 3), + wantEmpty: generateNodeGroupViewList(atomic4, 0, 4), + wantDrain: []*NodeGroupView{}, + }, "empty&drain nodes with deletions in progress, drain budget exceeded (shouldn't happen, just a sanity check)": { drainDeletionsInProgress: 9, empty: generateNodeGroupViewList(testNg, 0, 5), @@ -298,6 +362,62 @@ func TestCropNodesToBudgets(t *testing.T) { wantEmpty: generateNodeGroupViewList(testNg, 0, 4), wantDrain: generateNodeGroupViewList(testNg, 0, 2), }, + "empty&drain atomic nodes with deletions in progress, overall budget exceeded, only empty nodes fit": { + emptyDeletionsInProgress: 5, + drainDeletionsInProgress: 2, + empty: generateNodeGroupViewList(atomic4, 0, 4), + drain: generateNodeGroupViewList(atomic3, 0, 3), + wantEmpty: generateNodeGroupViewList(atomic4, 0, 4), + wantDrain: []*NodeGroupView{}, + }, + "empty&drain atomic nodes in same group with deletions in progress, both empty&drain nodes fit": { + emptyDeletionsInProgress: 5, + drainDeletionsInProgress: 2, + empty: generateNodeGroupViewList(atomic3, 0, 2), + drain: generateNodeGroupViewList(atomic3, 2, 3), + wantEmpty: generateNodeGroupViewList(atomic3, 0, 2), + wantDrain: generateNodeGroupViewList(atomic3, 2, 3), + }, + "empty&drain atomic nodes in same group with deletions in progress, overall budget exceeded, both empty&drain nodes fit": { + emptyDeletionsInProgress: 5, + drainDeletionsInProgress: 2, + empty: generateNodeGroupViewList(atomic8, 0, 6), + drain: generateNodeGroupViewList(atomic8, 6, 8), + wantEmpty: generateNodeGroupViewList(atomic8, 0, 6), + wantDrain: generateNodeGroupViewList(atomic8, 6, 8), + }, + "empty&drain atomic nodes in same group with deletions in progress, drain budget exceeded, both empty&drain nodes fit": { + emptyDeletionsInProgress: 2, + drainDeletionsInProgress: 2, + empty: generateNodeGroupViewList(atomic5, 0, 1), + drain: generateNodeGroupViewList(atomic5, 1, 5), + wantEmpty: generateNodeGroupViewList(atomic5, 0, 1), + wantDrain: generateNodeGroupViewList(atomic5, 1, 5), + }, + "empty&drain regular and atomic nodes with deletions in progress, overall budget exceeded, only empty atomic is deleted": { + emptyDeletionsInProgress: 5, + drainDeletionsInProgress: 2, + empty: append(generateNodeGroupViewList(testNg, 0, 4), generateNodeGroupViewList(atomic4, 0, 4)...), + drain: append(generateNodeGroupViewList(testNg2, 0, 4), generateNodeGroupViewList(atomic3, 0, 3)...), + wantEmpty: generateNodeGroupViewList(atomic4, 0, 4), + wantDrain: []*NodeGroupView{}, + }, + "empty&drain regular and atomic nodes in same group with deletions in progress, overall budget exceeded, both empty&drain atomic nodes fit": { + emptyDeletionsInProgress: 5, + drainDeletionsInProgress: 2, + empty: append(generateNodeGroupViewList(testNg, 0, 4), generateNodeGroupViewList(atomic4, 0, 2)...), + drain: append(generateNodeGroupViewList(testNg2, 0, 4), generateNodeGroupViewList(atomic4, 2, 4)...), + wantEmpty: generateNodeGroupViewList(atomic4, 0, 2), + wantDrain: generateNodeGroupViewList(atomic4, 2, 4), + }, + "empty&drain regular and atomic nodes in same group with deletions in progress, both empty&drain nodes fit": { + emptyDeletionsInProgress: 2, + drainDeletionsInProgress: 2, + empty: append(generateNodeGroupViewList(testNg, 0, 4), generateNodeGroupViewList(atomic4, 0, 2)...), + drain: append(generateNodeGroupViewList(testNg2, 0, 4), generateNodeGroupViewList(atomic4, 2, 4)...), + wantEmpty: append(generateNodeGroupViewList(atomic4, 0, 2), generateNodeGroupViewList(testNg, 0, 2)...), + wantDrain: generateNodeGroupViewList(atomic4, 2, 4), + }, } { t.Run(tn, func(t *testing.T) { provider := testprovider.NewTestCloudProvider(nil, func(nodeGroup string, node string) error { From 75b5f2b3e6afd3f87b9876e60aec2c75e2f81f2c Mon Sep 17 00:00:00 2001 From: Laura Seidler Date: Tue, 29 Aug 2023 16:40:32 +0200 Subject: [PATCH 028/125] Process annotation marking pod as not safe to evict first By processing this annotation first, pods that would match also other, subsequent rules (e.g. pods without a controller), will generate the `NotSafeToEvictAnnotation` instead of e.g. `NotReplicated`. This allows marking pods as not safe to evict to change the warning to one that can be more effectively ignored, e.g. for ephemeral build pods that are known to not be backed by a controller, and should not be evicted. --- cluster-autoscaler/utils/drain/drain.go | 6 +++--- cluster-autoscaler/utils/drain/drain_test.go | 22 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cluster-autoscaler/utils/drain/drain.go b/cluster-autoscaler/utils/drain/drain.go index 28802c9a8291..46b9537af06b 100644 --- a/cluster-autoscaler/utils/drain/drain.go +++ b/cluster-autoscaler/utils/drain/drain.go @@ -127,6 +127,9 @@ func GetPodsForDeletionOnNodeDrain( } if !safeToEvict && !terminal { + if hasNotSafeToEvictAnnotation(pod) { + return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: NotSafeToEvictAnnotation}, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name) + } if !replicated { return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: NotReplicated}, fmt.Errorf("%s/%s is not replicated", pod.Namespace, pod.Name) } @@ -142,9 +145,6 @@ func GetPodsForDeletionOnNodeDrain( if HasBlockingLocalStorage(pod) && skipNodesWithLocalStorage { return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: LocalStorageRequested}, fmt.Errorf("pod with local storage present: %s", pod.Name) } - if hasNotSafeToEvictAnnotation(pod) { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: NotSafeToEvictAnnotation}, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name) - } } pods = append(pods, pod) } diff --git a/cluster-autoscaler/utils/drain/drain_test.go b/cluster-autoscaler/utils/drain/drain_test.go index 2c9752d1f955..f2975818c7be 100644 --- a/cluster-autoscaler/utils/drain/drain_test.go +++ b/cluster-autoscaler/utils/drain/drain_test.go @@ -528,6 +528,19 @@ func TestDrain(t *testing.T) { }, } + unsafeNakedPod := &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + kubeSystemSafePod := &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -838,6 +851,15 @@ func TestDrain(t *testing.T) { expectBlockingPod: &BlockingPod{Pod: unsafeJobPod, Reason: NotSafeToEvictAnnotation}, expectDaemonSetPods: []*apiv1.Pod{}, }, + { + description: "naked pod with PodSafeToEvict=false annotation", + pods: []*apiv1.Pod{unsafeNakedPod}, + pdbs: []*policyv1.PodDisruptionBudget{}, + expectFatal: true, + expectPods: []*apiv1.Pod{}, + expectBlockingPod: &BlockingPod{Pod: unsafeNakedPod, Reason: NotSafeToEvictAnnotation}, + expectDaemonSetPods: []*apiv1.Pod{}, + }, { description: "empty PDB with RC-managed pod", pods: []*apiv1.Pod{rcPod}, From 9dfb7edd0a6cb1c89d86f6fdc63ed3d7d2bf501f Mon Sep 17 00:00:00 2001 From: Guy Templeton Date: Thu, 31 Aug 2023 18:08:08 +0100 Subject: [PATCH 029/125] CA - Add 1.28 to version compatibility matrix --- cluster-autoscaler/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/cluster-autoscaler/README.md b/cluster-autoscaler/README.md index f1d8bed146b3..d5f541caf3d5 100644 --- a/cluster-autoscaler/README.md +++ b/cluster-autoscaler/README.md @@ -48,6 +48,7 @@ Starting from Kubernetes 1.12, versioning scheme was changed to match Kubernetes | Kubernetes Version | CA Version | |--------|--------| +| 1.28.X | 1.28.X | | 1.27.X | 1.27.X | | 1.26.X | 1.26.X | | 1.25.X | 1.25.X | From 09fb9591cfd0e95481f7daa4aa2ec5ef3d766cde Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Tue, 13 Jun 2023 02:11:26 -0700 Subject: [PATCH 030/125] Introduce AEP with Provisioning Request CRD --- .../proposals/provisioning-request.md | 326 ++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 cluster-autoscaler/proposals/provisioning-request.md diff --git a/cluster-autoscaler/proposals/provisioning-request.md b/cluster-autoscaler/proposals/provisioning-request.md new file mode 100644 index 000000000000..c51283cb5fb1 --- /dev/null +++ b/cluster-autoscaler/proposals/provisioning-request.md @@ -0,0 +1,326 @@ +# Provisioning Request CRD + +author: kisieland + +## Background + +Currently CA does not provide any way to express that a group of pods would like +to have a capacity available. +This is caused by the fact that each CA loop picks a group of unschedulable pods +and works on provisioning capacity for them, meaning that the grouping is random +(as it depends on the kube-scheduler and CA loop interactions). +This is especially problematic in couple of cases: + + - Users would like to have all-or-nothing semantics for their workloads. + Currently CA will try to provision this capacity and if it is partially + successful it will leave it in cluster until user removes the workload. + - Users would like to lower e2e scale-up latency for huge scale-ups (100 + nodes+). Due to CA nature and kube-scheduler throughput, CA will create + partial scale-ups, e.g. `0->200->400->600` rather than one `0->600`. This + significantly increases the e2e latency as there is non-negligible time tax + on each scale-up operation. + +## Proposal + +### High level + +Provisioning Request (abbr. ProvReq) is a new namespaced Custom Resource that +aims to allow users to ask CA for capacity for groups of pods. +It allows users to express the fact that group of pods is connected and should +be threated as one entity. +This AEP proposes an API that can have multiple provisioning classes and can be +extended by cloud provider specific ones. +This object is meant as one-shot request to CA, so that if CA fails to provision +the capacity it is up to users to retry (such retry functionality can be added +later on). + +### ProvisioningRequest CRD + +The following code snippets assume [kubebuilder](https://book.kubebuilder.io/) +is used to generate the CRD: + +```go +// ProvisioningRequest is a way to express additional capacity +// that we would like to provision in the cluster. Cluster Autoscaler +// can use this information in its calculations and signal if the capacity +// is available in the cluster or actively add capacity if needed. +type ProvisioningRequest struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // + // +optional + metav1.ObjectMeta `json:"metadata,omitempty"` + // Spec contains specification of the ProvisioningRequest object. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // + // +kubebuilder:validation:Required + Spec ProvisioningRequestSpec `json:"spec"` + // Status of the ProvisioningRequest. CA constantly reconciles this field. + // + // +optional + Status ProvisioningRequestStatus `json:"status,omitempty"` +} + +// ProvisioningRequestList is a object for list of ProvisioningRequest. +type ProvisioningRequestList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // + // +optional + metav1.ListMeta `json:"metadata"` + // Items, list of ProvisioningRequest returned from API. + // + // +optional + Items []ProvisioningRequest `json:"items"` +} + +// ProvisioningRequestSpec is a specification of additional pods for which we +// would like to provision additional resources in the cluster. +type ProvisioningRequestSpec struct { + // PodSets lists groups of pods for which we would like to provision + // resources. + // + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinItems=1 + // +kubebuilder:validation:MaxItems=32 + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + PodSets []PodSet `json:"podSets"` + + // ProvisioningClass describes the different modes of provisioning the resources. + // Supported values: + // * check-capacity.kubernetes.io - check if current cluster state can fullfil this request, + // do not reserve the capacity. + // * atomic-scale-up.kubernetes.io - provision the resources in an atomic manner + // * ... - potential other classes that are specific to the cloud providers + // + // +kubebuilder:validation:Required + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + ProvisioningClass string `json:"provisioningClass"` + + // AdditionalParameters contains all other parameters custom classes may require. + // + // +optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + AdditionalParameters map[string]string `json:"additionalParameters"` +} + +type PodSet struct { + // PodTemplateRef is a reference to a PodTemplate object that is representing pods + // that will consume this reservation (must be within the same namespace). + // Users need to make sure that the fields relevant to scheduler (e.g. node selector tolerations) + // are consistent between this template and actual pods consuming the Provisioning Request. + // + // +kubebuilder:validation:Required + PodTemplateRef Reference `json:"podTemplateRef"` + // Count contains the number of pods that will be created with a given + // template. + // + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=16384 + Count int32 `json:"count"` +} + +type Reference struct { + // Name of the referenced object. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names + // + // +kubebuilder:validation:Required + Name string `json:"name,omitempty"` +} + +// ProvisioningRequestStatus represents the status of the resource reservation. +type ProvisioningRequestStatus struct { + // Conditions represent the observations of a Provisioning Request's + // current state. Those will contain information whether the capacity + // was found/created or if there were any issues. The condition types + // may differ between different provisioning classes. + // + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + Conditions []metav1.Condition `json:"conditions"` + + // AdditionalStatus contains all other status values custom provisioning classes may require. + // + // +optional + // +kubebuilder:validation:MaxItems=64 + AdditionalStatus map[string]string `json:"additionalStatus"` +} +``` + +### Provisioning Classes + +#### check-capacity.kubernetes.io class + +The `check-capacity.kubernetes.io` is one-off check to verify that the in the cluster +there is enough capacity to provision given set of pods. + +Note: If two of such objects are created around the same time, CA will consider +them independently and place no guards for the capacity. +Also the capacity is not reserved in any manner so it may be scaled-down. + +#### atomic-scale-up.kubernetes.io class + +The `atomic-scale-up.kubernetes.io` aims to provision the resources required for the +specified pods in an atomic way. The proposed logic is to: +1. Try to provision required VMs in one loop. +2. If it failed, remove the partially provisioned VMs and back-off. +3. Stop the back-off after a given duration (optional), which would be passed + via `AdditionalParameters` field, using `ValidUntilSeconds` key and would contain string + denoting duration for which we should retry (measured since creation fo the CR). + +Note: that the VMs created in this mode are subject to the scale-down logic. +So the duration during which users need to create the Pods is equal to the +value of `--scale-down-unneeded-time` flag. + +### Adding pods that consume given ProvisioningRequest + +To avoid generating double scale-ups and exclude pods that are meant to consume +given capacity CA should be able to differentiate those from all other pods. +To do so users need to specify the following pod annotation (it is not required +in ProvReq’s template, though it can be specified): + +```yaml +annotations: + "cluster-autoscaler.kubernetes.io/consume-provisioning-request": "provreq-name" +``` + +If it is provided for the pods that consume the ProvReq with `check-capacity.kubernetes.io` class, +the CA will not provision the capacity, even if it was needed (as some other pods might have been +scheduled on it) and will result in visibility events passed to the ProvReq and pods. +If it is not passed the CA will behave normally and just provision the capacity if it needed. + +Note: CA will match all pods with this annotation to a corresponding ProvReq and +ignore them when executing a scale-up loop (so that is up to users to make sure +that the ProvReq count is matching the number of created pods). +If the ProvReq is missing, all of the pods that consume it will be unschedulable indefinitely. + +### CRD lifecycle + +1. A ProvReq will be created either by the end user or by a framework. + At this point needed PodTemplate objects should be also created. +2. CA will pick it up, choose a nodepool (or create a new one if NAP is + enabled), and try to create nodes. +3. If CA successfully creates capacity, ProvReq will receive information about + this fact in `Conditions` field. +4. At this moment, users can create pods in that will consume the ProvReq (in + the same namespace), those will be scheduled on the capacity that was + created by the CA. +5. Once all of the pods are scheduled users can delete the ProvReq object, + otherwise it will be garbage collected after some time. +6. When pods finish the work and nodes become unused the CA will scale them + down. + +Note: Users can create a ProvReq and pods consuming them at the same time (in a +"fire and forget" manner), but this may result in the pods being unschedulable +and triggering user configured alerts. + +### Canceling the requests + +To cancel a pending Provisioning Request with atomic class, all that the users need to do is +to delete the Provisioning Request object. +After that the CA will no longer guard the nodes from deletion and proceed with standard scale-down logic. + +### Conditions + +The following Condition states should encode the states of the ProvReq: + + - Provisioned - VMs were created successfully (Atomic class) + - CapacityAvailable - cluster contains enough capacity to schedule pods (Check + class) + * `CapacityAvailable=true` will denote that cluster contains enough capacity to schedule pods + * `CapacityAvailable=false` will denote that cluster does not contain enough capacity to schedule pods + - Failed - failed to create or check capacity (both classes) + +The Reasons and Messages will contain more details about why the specific +condition was triggered. + +Providers of the custom classes should reuse the conditions where available or create their own ones +if items from the above list cannot be used to denote a specific situation. + +### CA implementation details + +The proposed implementation is to handle each ProvReq in a separate scale-up +loop. This will require changes in multiple parts of CA: + +1. Listing unschedulable pods where: + - pods that consume ProvReq need to filtered-out + - pods that are represented by the ProvReq need to be injected (we need to + ensure those are threated as one group by the sharding logic) +2. Scale-up logic, which as of now has no notion atomicity and grouping of + pods. This is simplified as the ScaleUp logic was recently put [behind an + interface](https://github.com/kubernetes/autoscaler/pull/5597). + - This is a place where the biggest part of the change will be made. Here + many parts of the logic are assuming best-effort semantics and the scale + up size is lowered in many situations: + - Estimation logic, which stops after some time-out or number of + pods/nodes. + - Size limiting, which caps the scale-up to match the size + restrictions (on node group or cluster level). +3. Node creation, which needs to support atomic resize. Either via native cloud + provider APIs or best effort with node removal if CA is unable to fulfill + the scale-up. + - This is also quite substantial change, we can provide a generic + best-effort implementation that will try to scale up and clean-up nodes + if it is unsuccessful, but it is up to cloud providers to integrate with + provider specific APIs. +4. Scale down path is not expected to change much. But users should follow + [best + practices](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-types-of-pods-can-prevent-ca-from-removing-a-node) + to avoid CA disturbing their workloads. + +## Testing + +The following e2e test scenarios will be created to check whether ProvReq +handling works as expected: + +1. A new ProvReq with `check-capacity.kubernetes.io` provisioning class is created, CA + checks if there is enough capacity in cluster to provision specified pods. +2. A new ProvReq with `atomic-scale-up.kubernetes.io` provisioning class is created, CA + picks an appropriate node group scales it up atomically. +3. A new atomic ProvReq is created for which a NAP needs to provision a new + node group. NAP creates it CA scales it atomically. + - Here we should cover some of the different reasons why NAP may be + required. +4. An atomic ProvReq fails due to node group size limits and NAP CPU and/or RAM + limits. +5. Scalability tests. + - Scenario in which many small ProvReqs are created (strain on the number + of scale-up loops). + - Scenario in which big ProvReq is created (strain on a single scale-up + loop). + +## Limitations + +The current Cluster Autoscaler implementation is not taking into account [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/). \ +The current proposal is to not include handling of the Resource Quotas, but it could be added later on. + +## Future Expansions + +### ProvisioningClass CRD + +One of the expansion of this approach is to introduce the ProvisioningClass CRD, +which follows the same approach as +[StorageClass object](https://kubernetes.io/docs/concepts/storage/storage-classes/). +Such approach would allow administrators of the cluster to introduce a list of allowed +ProvisioningClasses. Such CRD can also contain a pre set configuration, i.e. +administrators may set that `atomic-scale-up.kubernetes.io` would retry up to `2h`. + +Possible CRD definition: +```go +// ProvisioningClass is a way to express provisioning classes available in the cluster. +type ProvisioningClass struct { + // Name denotes the name of the object, which is to be used in the ProvisioningClass + // field in Provisioning Request CRD. + // + // +kubebuilder:validation:Required + Name string `json:"name"` + + // AdditionalParameters contains all other parameters custom classes may require. + // + // +optional + AdditionalParameters map[string]string `json:"additionalParameters"` +} +``` From c87b77b963d2557fa5cc0c3b1861ba732f571841 Mon Sep 17 00:00:00 2001 From: Hakan Bostan Date: Fri, 1 Sep 2023 15:08:32 +0000 Subject: [PATCH 031/125] Refactor `getStartDeletionTestCases` function so that each test case operates on its own node group. - Changed the `startDeletionTestCase` struct to specify the node groups used in the test case. - Changed emptyNodes, drainNodes, wantStatus fields to specify the parameters and actually create them in the test function. --- .../core/scaledown/actuation/actuator_test.go | 723 ++++++++++-------- .../group_deletion_scheduler_test.go | 6 +- 2 files changed, 406 insertions(+), 323 deletions(-) diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go index 07cad48717e7..4a49e7aa5b57 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go @@ -50,14 +50,33 @@ import ( . "k8s.io/autoscaler/cluster-autoscaler/utils/test" ) +type nodeGroupViewInfo struct { + nodeGroupName string + from int + to int +} + +type scaleDownNodeInfo struct { + name string + nodeGroup string + evictedPods []*apiv1.Pod + utilInfo utilization.Info +} + +type scaleDownStatusInfo struct { + result status.ScaleDownResult + scaledDownNodes []scaleDownNodeInfo +} + type startDeletionTestCase struct { - emptyNodes []*budgets.NodeGroupView - drainNodes []*budgets.NodeGroupView + nodeGroups map[string]*testprovider.TestNodeGroup + emptyNodes []nodeGroupViewInfo + drainNodes []nodeGroupViewInfo pods map[string][]*apiv1.Pod failedPodDrain map[string]bool failedNodeDeletion map[string]bool failedNodeTaint map[string]bool - wantStatus *status.ScaleDownStatus + wantStatus scaleDownStatusInfo wantErr error wantDeletedPods []string wantDeletedNodes []string @@ -65,7 +84,7 @@ type startDeletionTestCase struct { wantNodeDeleteResults map[string]status.NodeDeleteResult } -func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonSetsUtilization bool, suffix string) map[string]startDeletionTestCase { +func getStartDeletionTestCases(ignoreDaemonSetsUtilization bool, suffix string) map[string]startDeletionTestCase { toBeDeletedTaint := apiv1.Taint{Key: taints.ToBeDeletedTaint, Effect: apiv1.TaintEffectNoSchedule} dsUtilInfo := generateUtilInfo(2./8., 2./8.) @@ -74,40 +93,33 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS dsUtilInfo = generateUtilInfo(0./8., 0./8.) } - atomic2 := sizedNodeGroup("atomic-2", 2, true) - atomic4 := sizedNodeGroup("atomic-4", 4, true) - // We need separate groups since previous test cases *change state of groups*. - // TODO(aleksandra-malinowska): refactor this test to isolate test cases. - atomic2pods := sizedNodeGroup("atomic-2-pods", 2, true) - atomic4taints := sizedNodeGroup("atomic-4-taints", 4, true) - atomic6 := sizedNodeGroup("atomic-6", 6, true) - atomic2mixed := sizedNodeGroup("atomic-2-mixed", 2, true) - atomic2drain := sizedNodeGroup("atomic-2-drain", 2, true) - testCases := map[string]startDeletionTestCase{ "nothing to delete": { emptyNodes: nil, drainNodes: nil, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNoNodeDeleted, + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNoNodeDeleted, }, }, "empty node deletion": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{ + {"test", 0, 2}, + }, + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + utilInfo: generateUtilInfo(0, 0), }, }, }, @@ -126,25 +138,31 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "empty atomic node deletion": { - emptyNodes: generateNodeGroupViewList(atomic2, 0, 2), - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "atomic-2": sizedNodeGroup("atomic-2", 2, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{ + {"atomic-2", 0, 2}, + }, + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("atomic-2-node-0"), - NodeGroup: atomic2, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-2-node-0", + nodeGroup: "atomic-2", + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("atomic-2-node-1"), - NodeGroup: atomic2, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-2-node-1", + nodeGroup: "atomic-2", + utilInfo: generateUtilInfo(0, 0), }, }, }, - wantDeletedNodes: []string{"atomic-2-node-0", "atomic-2-node-1"}, + wantDeletedNodes: []string{ + "atomic-2-node-0", + "atomic-2-node-1", + }, wantTaintUpdates: map[string][][]apiv1.Taint{ "atomic-2-node-0": { {toBeDeletedTaint}, @@ -159,25 +177,30 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "deletion with drain": { - drainNodes: generateNodeGroupViewList(testNg, 0, 2), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + drainNodes: []nodeGroupViewInfo{ + {"test", 0, 2}, + }, pods: map[string][]*apiv1.Pod{ "test-node-0": removablePods(2, "test-node-0"), "test-node-1": removablePods(2, "test-node-1"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-0"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-0", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-0"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-1"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-1", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-1"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, @@ -197,43 +220,51 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "empty and drain deletion work correctly together": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - drainNodes: generateNodeGroupViewList(testNg, 2, 4), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{ + {"test", 0, 2}, + }, + drainNodes: []nodeGroupViewInfo{ + {"test", 2, 4}, + }, pods: map[string][]*apiv1.Pod{ "test-node-2": removablePods(2, "test-node-2"), "test-node-3": removablePods(2, "test-node-3"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-2"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-2"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-2", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-2"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("test-node-3"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-3"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-3", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-3"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, - wantDeletedNodes: []string{"test-node-0", "test-node-1", "test-node-2", "test-node-3"}, - wantDeletedPods: []string{"test-node-2-pod-0", "test-node-2-pod-1", "test-node-3-pod-0", "test-node-3-pod-1"}, + wantDeletedNodes: []string{ + "test-node-0", + "test-node-1", + "test-node-2", "test-node-3"}, + wantDeletedPods: []string{"test-node-2-pod-0", "test-node-2-pod-1", "test-node-3-pod-0", "test-node-3-pod-1"}, wantTaintUpdates: map[string][][]apiv1.Taint{ "test-node-0": { {toBeDeletedTaint}, @@ -256,50 +287,53 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "two atomic groups can be scaled down together": { - emptyNodes: generateNodeGroupViewList(atomic2mixed, 1, 2), - drainNodes: append(generateNodeGroupViewList(atomic2mixed, 0, 1), - generateNodeGroupViewList(atomic2drain, 0, 2)...), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "atomic-2-mixed": sizedNodeGroup("atomic-2-mixed", 2, true, ignoreDaemonSetsUtilization), + "atomic-2-drain": sizedNodeGroup("atomic-2-drain", 2, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{ + {"atomic-2-mixed", 1, 2}, + }, + drainNodes: []nodeGroupViewInfo{ + {"atomic-2-mixed", 0, 1}, + {"atomic-2-drain", 0, 2}, + }, pods: map[string][]*apiv1.Pod{ "atomic-2-mixed-node-0": removablePods(2, "atomic-2-mixed-node-0"), "atomic-2-drain-node-0": removablePods(1, "atomic-2-drain-node-0"), "atomic-2-drain-node-1": removablePods(2, "atomic-2-drain-node-1"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("atomic-2-mixed-node-1"), - NodeGroup: atomic2mixed, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-2-mixed-node-1", + nodeGroup: "atomic-2-mixed", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("atomic-2-mixed-node-0"), - NodeGroup: atomic2mixed, - EvictedPods: removablePods(2, "atomic-2-mixed-node-0"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "atomic-2-mixed-node-0", + nodeGroup: "atomic-2-mixed", + evictedPods: removablePods(2, "atomic-2-mixed-node-0"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("atomic-2-drain-node-0"), - NodeGroup: atomic2drain, - EvictedPods: removablePods(1, "atomic-2-drain-node-0"), - UtilInfo: generateUtilInfo(1./8., 1./8.), + name: "atomic-2-drain-node-0", + nodeGroup: "atomic-2-drain", + evictedPods: removablePods(1, "atomic-2-drain-node-0"), + utilInfo: generateUtilInfo(1./8., 1./8.), }, { - Node: generateNode("atomic-2-drain-node-1"), - NodeGroup: atomic2drain, - EvictedPods: removablePods(2, "atomic-2-drain-node-1"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "atomic-2-drain-node-1", + nodeGroup: "atomic-2-drain", + evictedPods: removablePods(2, "atomic-2-drain-node-1"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, - wantDeletedNodes: []string{ - "atomic-2-mixed-node-0", - "atomic-2-mixed-node-1", - "atomic-2-drain-node-0", - "atomic-2-drain-node-1", - }, - wantDeletedPods: []string{"atomic-2-mixed-node-0-pod-0", "atomic-2-mixed-node-0-pod-1", "atomic-2-drain-node-0-pod-0", "atomic-2-drain-node-1-pod-0", "atomic-2-drain-node-1-pod-1"}, + wantDeletedNodes: []string{"atomic-2-mixed-node-0", "atomic-2-mixed-node-1", "atomic-2-drain-node-0", "atomic-2-drain-node-1"}, + wantDeletedPods: []string{"atomic-2-mixed-node-0-pod-0", "atomic-2-mixed-node-0-pod-1", "atomic-2-drain-node-0-pod-0", "atomic-2-drain-node-1-pod-0", "atomic-2-drain-node-1-pod-1"}, wantTaintUpdates: map[string][][]apiv1.Taint{ "atomic-2-mixed-node-0": { {toBeDeletedTaint}, @@ -322,38 +356,45 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "atomic empty and drain deletion work correctly together": { - emptyNodes: generateNodeGroupViewList(atomic4, 0, 2), - drainNodes: generateNodeGroupViewList(atomic4, 2, 4), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "atomic-4": sizedNodeGroup("atomic-4", 4, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{ + {"atomic-4", 0, 2}, + }, + drainNodes: []nodeGroupViewInfo{ + {"atomic-4", 2, 4}, + }, pods: map[string][]*apiv1.Pod{ "atomic-4-node-2": removablePods(2, "atomic-4-node-2"), "atomic-4-node-3": removablePods(2, "atomic-4-node-3"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("atomic-4-node-0"), - NodeGroup: atomic4, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-4-node-0", + nodeGroup: "atomic-4", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("atomic-4-node-1"), - NodeGroup: atomic4, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-4-node-1", + nodeGroup: "atomic-4", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("atomic-4-node-2"), - NodeGroup: atomic4, - EvictedPods: removablePods(2, "atomic-4-node-2"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "atomic-4-node-2", + nodeGroup: "atomic-4", + evictedPods: removablePods(2, "atomic-4-node-2"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("atomic-4-node-3"), - NodeGroup: atomic4, - EvictedPods: removablePods(2, "atomic-4-node-3"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "atomic-4-node-3", + nodeGroup: "atomic-4", + evictedPods: removablePods(2, "atomic-4-node-3"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, @@ -381,15 +422,17 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "failure to taint empty node stops deletion and cleans already applied taints": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 4), - drainNodes: generateNodeGroupViewList(testNg, 4, 5), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 4}}, + drainNodes: []nodeGroupViewInfo{{"test", 4, 5}}, pods: map[string][]*apiv1.Pod{ "test-node-4": removablePods(2, "test-node-4"), }, failedNodeTaint: map[string]bool{"test-node-2": true}, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownError, - ScaledDownNodes: nil, + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownError, }, wantTaintUpdates: map[string][][]apiv1.Taint{ "test-node-0": { @@ -404,22 +447,25 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS wantErr: cmpopts.AnyError, }, "failure to taint empty atomic node stops deletion and cleans already applied taints": { - emptyNodes: generateNodeGroupViewList(atomic4taints, 0, 4), - drainNodes: generateNodeGroupViewList(testNg, 4, 5), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + "atomic-4": sizedNodeGroup("atomic-4", 4, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"atomic-4", 0, 4}}, + drainNodes: []nodeGroupViewInfo{{"test", 4, 5}}, pods: map[string][]*apiv1.Pod{ "test-node-4": removablePods(2, "test-node-4"), }, - failedNodeTaint: map[string]bool{"atomic-4-taints-node-2": true}, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownError, - ScaledDownNodes: nil, + failedNodeTaint: map[string]bool{"atomic-4-node-2": true}, + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownError, }, wantTaintUpdates: map[string][][]apiv1.Taint{ - "atomic-4-taints-node-0": { + "atomic-4-node-0": { {toBeDeletedTaint}, {}, }, - "atomic-4-taints-node-1": { + "atomic-4-node-1": { {toBeDeletedTaint}, {}, }, @@ -427,8 +473,11 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS wantErr: cmpopts.AnyError, }, "failure to taint drain node stops further deletion and cleans already applied taints": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - drainNodes: generateNodeGroupViewList(testNg, 2, 6), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, //generateNodeGroupViewList(testNg, 0, 2), + drainNodes: []nodeGroupViewInfo{{"test", 2, 6}}, //generateNodeGroupViewList(testNg, 2, 6), pods: map[string][]*apiv1.Pod{ "test-node-2": removablePods(2, "test-node-2"), "test-node-3": removablePods(2, "test-node-3"), @@ -436,20 +485,20 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS "test-node-5": removablePods(2, "test-node-5"), }, failedNodeTaint: map[string]bool{"test-node-2": true}, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownError, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownError, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, }, }, @@ -469,8 +518,12 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS wantErr: cmpopts.AnyError, }, "failure to taint drain atomic node stops further deletion and cleans already applied taints": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - drainNodes: generateNodeGroupViewList(atomic6, 0, 6), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + "atomic-6": sizedNodeGroup("atomic-6", 6, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, + drainNodes: []nodeGroupViewInfo{{"atomic-6", 0, 6}}, pods: map[string][]*apiv1.Pod{ "atomic-6-node-0": removablePods(2, "atomic-6-node-0"), "atomic-6-node-1": removablePods(2, "atomic-6-node-1"), @@ -480,20 +533,20 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS "atomic-6-node-5": removablePods(2, "atomic-6-node-5"), }, failedNodeTaint: map[string]bool{"atomic-6-node-2": true}, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownError, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownError, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, }, }, @@ -513,7 +566,10 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS wantErr: cmpopts.AnyError, }, "nodes that failed drain are correctly reported in results": { - drainNodes: generateNodeGroupViewList(testNg, 0, 4), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + drainNodes: []nodeGroupViewInfo{{"test", 0, 4}}, pods: map[string][]*apiv1.Pod{ "test-node-0": removablePods(3, "test-node-0"), "test-node-1": removablePods(3, "test-node-1"), @@ -525,32 +581,32 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS "test-node-0-pod-1": true, "test-node-2-pod-1": true, }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: removablePods(3, "test-node-0"), - UtilInfo: generateUtilInfo(3./8., 3./8.), + name: "test-node-0", + nodeGroup: "test", + evictedPods: removablePods(3, "test-node-0"), + utilInfo: generateUtilInfo(3./8., 3./8.), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: removablePods(3, "test-node-1"), - UtilInfo: generateUtilInfo(3./8., 3./8.), + name: "test-node-1", + nodeGroup: "test", + evictedPods: removablePods(3, "test-node-1"), + utilInfo: generateUtilInfo(3./8., 3./8.), }, { - Node: generateNode("test-node-2"), - NodeGroup: testNg, - EvictedPods: removablePods(3, "test-node-2"), - UtilInfo: generateUtilInfo(3./8., 3./8.), + name: "test-node-2", + nodeGroup: "test", + evictedPods: removablePods(3, "test-node-2"), + utilInfo: generateUtilInfo(3./8., 3./8.), }, { - Node: generateNode("test-node-3"), - NodeGroup: testNg, - EvictedPods: removablePods(3, "test-node-3"), - UtilInfo: generateUtilInfo(3./8., 3./8.), + name: "test-node-3", + nodeGroup: "test", + evictedPods: removablePods(3, "test-node-3"), + utilInfo: generateUtilInfo(3./8., 3./8.), }, }, }, @@ -601,8 +657,11 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "nodes that failed deletion are correctly reported in results": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - drainNodes: generateNodeGroupViewList(testNg, 2, 4), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, + drainNodes: []nodeGroupViewInfo{{"test", 2, 4}}, pods: map[string][]*apiv1.Pod{ "test-node-2": removablePods(2, "test-node-2"), "test-node-3": removablePods(2, "test-node-3"), @@ -611,32 +670,32 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS "test-node-1": true, "test-node-3": true, }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-2"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-2"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-2", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-2"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("test-node-3"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-3"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-3", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-3"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, @@ -669,26 +728,29 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "DS pods are evicted from empty nodes, but don't block deletion on error": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, pods: map[string][]*apiv1.Pod{ "test-node-0": generateDsPods(2, "test-node-0"), "test-node-1": generateDsPods(2, "test-node-1"), }, failedPodDrain: map[string]bool{"test-node-1-ds-pod-0": true}, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: dsUtilInfo, + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: dsUtilInfo, }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: dsUtilInfo, + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: dsUtilInfo, }, }, }, @@ -708,29 +770,32 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "DS pods and deletion with drain": { - drainNodes: generateNodeGroupViewList(testNg, 0, 2), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + drainNodes: []nodeGroupViewInfo{{"test", 0, 2}}, pods: map[string][]*apiv1.Pod{ "test-node-0": generateDsPods(2, "test-node-0"), "test-node-1": generateDsPods(2, "test-node-1"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, + name: "test-node-0", + nodeGroup: "test", // this is nil because DaemonSetEvictionForOccupiedNodes is // not enabled for drained nodes in this test suite - EvictedPods: nil, - UtilInfo: dsUtilInfo, + evictedPods: nil, + utilInfo: dsUtilInfo, }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, + name: "test-node-1", + nodeGroup: "test", // this is nil because DaemonSetEvictionForOccupiedNodes is // not enabled for drained nodes in this test suite - EvictedPods: nil, - UtilInfo: dsUtilInfo, + evictedPods: nil, + utilInfo: dsUtilInfo, }, }, }, @@ -751,40 +816,41 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "DS pods and empty and drain deletion work correctly together": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), - drainNodes: generateNodeGroupViewList(testNg, 2, 4), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, + drainNodes: []nodeGroupViewInfo{{"test", 2, 4}}, pods: map[string][]*apiv1.Pod{ "test-node-2": removablePods(2, "test-node-2"), "test-node-3": generateDsPods(2, "test-node-3"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-2"), - NodeGroup: testNg, - EvictedPods: removablePods(2, "test-node-2"), - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-2", + nodeGroup: "test", + evictedPods: removablePods(2, "test-node-2"), + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("test-node-3"), - NodeGroup: testNg, - // this is nil because DaemonSetEvictionForOccupiedNodes is - // not enabled for drained nodes in this test suite - EvictedPods: nil, - UtilInfo: dsUtilInfo, + name: "test-node-3", + nodeGroup: "test", + evictedPods: nil, + utilInfo: dsUtilInfo, }, }, }, @@ -813,25 +879,28 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "nodes with pods are not deleted if the node is passed as empty": { - emptyNodes: generateNodeGroupViewList(testNg, 0, 2), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}}, pods: map[string][]*apiv1.Pod{ "test-node-0": removablePods(2, "test-node-0"), "test-node-1": removablePods(2, "test-node-1"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, @@ -853,40 +922,41 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS }, }, "atomic nodes with pods are not deleted if the node is passed as empty": { - emptyNodes: append( - generateNodeGroupViewList(testNg, 0, 2), - generateNodeGroupViewList(atomic2pods, 0, 2)..., - ), + nodeGroups: map[string]*testprovider.TestNodeGroup{ + "test": sizedNodeGroup("test", 3, false, ignoreDaemonSetsUtilization), + "atomic-2": sizedNodeGroup("atomic-2", 2, true, ignoreDaemonSetsUtilization), + }, + emptyNodes: []nodeGroupViewInfo{{"test", 0, 2}, {"atomic-2", 0, 2}}, pods: map[string][]*apiv1.Pod{ - "test-node-1": removablePods(2, "test-node-1"), - "atomic-2-pods-node-1": removablePods(2, "atomic-2-pods-node-1"), + "test-node-1": removablePods(2, "test-node-1"), + "atomic-2-node-1": removablePods(2, "atomic-2-node-1"), }, - wantStatus: &status.ScaleDownStatus{ - Result: status.ScaleDownNodeDeleteStarted, - ScaledDownNodes: []*status.ScaleDownNode{ + wantStatus: scaleDownStatusInfo{ + result: status.ScaleDownNodeDeleteStarted, + scaledDownNodes: []scaleDownNodeInfo{ { - Node: generateNode("test-node-0"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "test-node-0", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("test-node-1"), - NodeGroup: testNg, - EvictedPods: nil, - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "test-node-1", + nodeGroup: "test", + evictedPods: nil, + utilInfo: generateUtilInfo(2./8., 2./8.), }, { - Node: generateNode("atomic-2-pods-node-0"), - NodeGroup: atomic2pods, - EvictedPods: nil, - UtilInfo: generateUtilInfo(0, 0), + name: "atomic-2-node-0", + nodeGroup: "atomic-2", + evictedPods: nil, + utilInfo: generateUtilInfo(0, 0), }, { - Node: generateNode("atomic-2-pods-node-1"), - NodeGroup: atomic2pods, - EvictedPods: nil, - UtilInfo: generateUtilInfo(2./8., 2./8.), + name: "atomic-2-node-1", + nodeGroup: "atomic-2", + evictedPods: nil, + utilInfo: generateUtilInfo(2./8., 2./8.), }, }, }, @@ -900,20 +970,20 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS {toBeDeletedTaint}, {}, }, - "atomic-2-pods-node-0": { + "atomic-2-node-0": { {toBeDeletedTaint}, {}, }, - "atomic-2-pods-node-1": { + "atomic-2-node-1": { {toBeDeletedTaint}, {}, }, }, wantNodeDeleteResults: map[string]status.NodeDeleteResult{ - "test-node-0": {ResultType: status.NodeDeleteOk}, - "test-node-1": {ResultType: status.NodeDeleteErrorInternal, Err: cmpopts.AnyError}, - "atomic-2-pods-node-0": {ResultType: status.NodeDeleteErrorFailedToDelete, Err: cmpopts.AnyError}, - "atomic-2-pods-node-1": {ResultType: status.NodeDeleteErrorInternal, Err: cmpopts.AnyError}, + "test-node-0": {ResultType: status.NodeDeleteOk}, + "test-node-1": {ResultType: status.NodeDeleteErrorInternal, Err: cmpopts.AnyError}, + "atomic-2-node-0": {ResultType: status.NodeDeleteErrorFailedToDelete, Err: cmpopts.AnyError}, + "atomic-2-node-1": {ResultType: status.NodeDeleteErrorInternal, Err: cmpopts.AnyError}, }, }, } @@ -927,22 +997,11 @@ func getStartDeletionTestCases(testNg *testprovider.TestNodeGroup, ignoreDaemonS } func TestStartDeletion(t *testing.T) { - testNg1 := testprovider.NewTestNodeGroup("test", 100, 0, 3, true, false, "n1-standard-2", nil, nil) - opts1 := &config.NodeGroupAutoscalingOptions{ - IgnoreDaemonSetsUtilization: false, - } - testNg1.SetOptions(opts1) - testNg2 := testprovider.NewTestNodeGroup("test", 100, 0, 3, true, false, "n1-standard-2", nil, nil) - opts2 := &config.NodeGroupAutoscalingOptions{ - IgnoreDaemonSetsUtilization: true, - } - testNg2.SetOptions(opts2) - testSets := []map[string]startDeletionTestCase{ // IgnoreDaemonSetsUtilization is false - getStartDeletionTestCases(testNg1, opts1.IgnoreDaemonSetsUtilization, "testNg1"), + getStartDeletionTestCases(false, "testNg1"), // IgnoreDaemonSetsUtilization is true - getStartDeletionTestCases(testNg2, opts2.IgnoreDaemonSetsUtilization, "testNg2"), + getStartDeletionTestCases(true, "testNg2"), } for _, testSet := range testSets { @@ -952,16 +1011,26 @@ func TestStartDeletion(t *testing.T) { // of a single test case, and the goroutines eventually access tc in fakeClient hooks below. tc := tc // Insert all nodes into a map to support live node updates and GETs. + emptyNodeGroupViews, drainNodeGroupViews := []*budgets.NodeGroupView{}, []*budgets.NodeGroupView{} allEmptyNodes, allDrainNodes := []*apiv1.Node{}, []*apiv1.Node{} nodesByName := make(map[string]*apiv1.Node) nodesLock := sync.Mutex{} - for _, bucket := range tc.emptyNodes { + for _, ngvInfo := range tc.emptyNodes { + ngv := generateNodeGroupViewList(tc.nodeGroups[ngvInfo.nodeGroupName], ngvInfo.from, ngvInfo.to) + emptyNodeGroupViews = append(emptyNodeGroupViews, ngv...) + } + for _, bucket := range emptyNodeGroupViews { allEmptyNodes = append(allEmptyNodes, bucket.Nodes...) - for _, node := range allEmptyNodes { + for _, node := range bucket.Nodes { nodesByName[node.Name] = node } } - for _, bucket := range tc.drainNodes { + + for _, ngvInfo := range tc.drainNodes { + ngv := generateNodeGroupViewList(tc.nodeGroups[ngvInfo.nodeGroupName], ngvInfo.from, ngvInfo.to) + drainNodeGroupViews = append(drainNodeGroupViews, ngv...) + } + for _, bucket := range drainNodeGroupViews { allDrainNodes = append(allDrainNodes, bucket.Nodes...) for _, node := range bucket.Nodes { nodesByName[node.Name] = node @@ -1042,14 +1111,14 @@ func TestStartDeletion(t *testing.T) { deletedNodes <- node return nil }) - for _, bucket := range tc.emptyNodes { + for _, bucket := range emptyNodeGroupViews { bucket.Group.(*testprovider.TestNodeGroup).SetCloudProvider(provider) provider.InsertNodeGroup(bucket.Group) for _, node := range bucket.Nodes { provider.AddNode(bucket.Group.Id(), node) } } - for _, bucket := range tc.drainNodes { + for _, bucket := range drainNodeGroupViews { bucket.Group.(*testprovider.TestNodeGroup).SetCloudProvider(provider) provider.InsertNodeGroup(bucket.Group) for _, node := range bucket.Nodes { @@ -1084,7 +1153,7 @@ func TestStartDeletion(t *testing.T) { t.Fatalf("Couldn't set up autoscaling context: %v", err) } csr := clusterstate.NewClusterStateRegistry(provider, clusterstate.ClusterStateRegistryConfig{}, ctx.LogRecorder, NewBackoff(), nodegroupconfig.NewDefaultNodeGroupConfigProcessor(config.NodeGroupAutoscalingOptions{MaxNodeProvisionTime: 15 * time.Minute})) - for _, bucket := range tc.emptyNodes { + for _, bucket := range emptyNodeGroupViews { for _, node := range bucket.Nodes { err := ctx.ClusterSnapshot.AddNodeWithPods(node, tc.pods[node.Name]) if err != nil { @@ -1092,7 +1161,7 @@ func TestStartDeletion(t *testing.T) { } } } - for _, bucket := range tc.drainNodes { + for _, bucket := range drainNodeGroupViews { for _, node := range bucket.Nodes { pods, found := tc.pods[node.Name] if !found { @@ -1105,6 +1174,19 @@ func TestStartDeletion(t *testing.T) { } } + wantScaleDownStatus := &status.ScaleDownStatus{ + Result: tc.wantStatus.result, + } + for _, scaleDownNodeInfo := range tc.wantStatus.scaledDownNodes { + statusScaledDownNode := &status.ScaleDownNode{ + Node: generateNode(scaleDownNodeInfo.name), + NodeGroup: tc.nodeGroups[scaleDownNodeInfo.nodeGroup], + EvictedPods: scaleDownNodeInfo.evictedPods, + UtilInfo: scaleDownNodeInfo.utilInfo, + } + wantScaleDownStatus.ScaledDownNodes = append(wantScaleDownStatus.ScaledDownNodes, statusScaledDownNode) + } + // Create Actuator, run StartDeletion, and verify the error. ndt := deletiontracker.NewNodeDeletionTracker(0) ndb := NewNodeDeletionBatcher(&ctx, csr, ndt, 0*time.Second) @@ -1125,7 +1207,7 @@ func TestStartDeletion(t *testing.T) { ignoreTimestamps := cmpopts.IgnoreFields(status.ScaleDownStatus{}, "NodeDeleteResultsAsOf") cmpNg := cmp.Comparer(func(a, b *testprovider.TestNodeGroup) bool { return a.Id() == b.Id() }) statusCmpOpts := cmp.Options{ignoreSdNodeOrder, ignoreTimestamps, cmpNg, cmpopts.EquateEmpty()} - if diff := cmp.Diff(tc.wantStatus, gotStatus, statusCmpOpts); diff != "" { + if diff := cmp.Diff(wantScaleDownStatus, gotStatus, statusCmpOpts); diff != "" { t.Errorf("StartDeletion status diff (-want +got):\n%s", diff) } @@ -1380,10 +1462,11 @@ func TestStartDeletionInBatchBasic(t *testing.T) { } } -func sizedNodeGroup(id string, size int, atomic bool) cloudprovider.NodeGroup { - ng := testprovider.NewTestNodeGroup(id, 10000, 0, size, true, false, "n1-standard-2", nil, nil) +func sizedNodeGroup(id string, size int, atomic, ignoreDaemonSetUtil bool) *testprovider.TestNodeGroup { + ng := testprovider.NewTestNodeGroup(id, 1000, 0, size, true, false, "n1-standard-2", nil, nil) ng.SetOptions(&config.NodeGroupAutoscalingOptions{ - ZeroOrMaxNodeScaling: atomic, + ZeroOrMaxNodeScaling: atomic, + IgnoreDaemonSetsUtilization: ignoreDaemonSetUtil, }) return ng } diff --git a/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go b/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go index 481e260c841b..3b1255b86b3b 100644 --- a/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go @@ -39,9 +39,9 @@ import ( ) func TestScheduleDeletion(t *testing.T) { - testNg := testprovider.NewTestNodeGroup("test", 0, 100, 3, true, false, "n1-standard-2", nil, nil) - atomic2 := sizedNodeGroup("atomic-2", 2, true) - atomic4 := sizedNodeGroup("atomic-4", 4, true) + testNg := testprovider.NewTestNodeGroup("test", 100, 0, 3, true, false, "n1-standard-2", nil, nil) + atomic2 := sizedNodeGroup("atomic-2", 2, true, false) + atomic4 := sizedNodeGroup("atomic-4", 4, true, false) testCases := []struct { name string From 0e0f294f72a55f74da7683a45da4205f777829da Mon Sep 17 00:00:00 2001 From: Joachim Bartosik Date: Mon, 4 Sep 2023 10:16:22 +0200 Subject: [PATCH 032/125] Fix flag name in documentation It's [`recommender-name`](https://github.com/kubernetes/autoscaler/blob/cd5ed0be530e2313f762e30042cb324b768507f6/vertical-pod-autoscaler/pkg/recommender/main.go#L48C40-L48C56) not `name`. Fixing #5231, see #5451 --- vertical-pod-autoscaler/README.md | 2 +- vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml | 2 +- vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vertical-pod-autoscaler/README.md b/vertical-pod-autoscaler/README.md index f17b21d76e3f..9225e2f70f8e 100644 --- a/vertical-pod-autoscaler/README.md +++ b/vertical-pod-autoscaler/README.md @@ -304,7 +304,7 @@ For example you could have 3 profiles: [frugal](deploy/recommender-deployment-lo use different TargetCPUPercentile (50, 90 and 95) to calculate their recommendations. Please note the usage of the following arguments to override default names and percentiles: -- --name=performance +- --recommender-name=performance - --target-cpu-percentile=0.95 You can then choose which recommender to use by setting `recommenders` inside the `VerticalPodAutoscaler` spec. diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml index 91f3b90c6281..10bdef97bcd1 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml @@ -29,7 +29,7 @@ spec: image: registry.k8s.io/autoscaling/vpa-recommender:0.14.0 imagePullPolicy: Always args: - - --name=performance + - --recommender-name=performance - --target-cpu-percentile=0.95 resources: limits: diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml index 03c7145dfb08..bb7cbcf90076 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml @@ -29,7 +29,7 @@ spec: image: registry.k8s.io/autoscaling/vpa-recommender:0.14.0 imagePullPolicy: Always args: - - --name=frugal + - --recommender-name=frugal - --target-cpu-percentile=0.50 resources: limits: From 436a8a0176c4850374ee5aa5254d24c20d8806fb Mon Sep 17 00:00:00 2001 From: Diego Bonfigli Date: Sat, 8 Jul 2023 15:06:32 +0200 Subject: [PATCH 033/125] fix(cloudprovider/exteranlgrpc): properly handle unimplemented methods --- .../wrapper/wrapper.go | 14 ++++++ .../externalgrpc_cloud_provider.go | 10 +++++ .../externalgrpc_cloud_provider_test.go | 38 ++++++++++++++++ .../externalgrpc/externalgrpc_node_group.go | 10 +++++ .../externalgrpc_node_group_test.go | 43 +++++++++++++++++++ .../externalgrpc/protos/externalgrpc.proto | 11 +++-- .../protos/externalgrpc_grpc.pb.go | 20 ++++----- 7 files changed, 130 insertions(+), 16 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go index 8c3fe2fa4d53..10a5a4fae6cb 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go @@ -20,6 +20,8 @@ import ( "context" "fmt" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/anypb" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -113,6 +115,9 @@ func (w *Wrapper) PricingNodePrice(_ context.Context, req *protos.PricingNodePri model, err := w.provider.Pricing() if err != nil { + if err == cloudprovider.ErrNotImplemented { + return nil, status.Error(codes.Unimplemented, err.Error()) + } return nil, err } reqNode := req.GetNode() @@ -136,6 +141,9 @@ func (w *Wrapper) PricingPodPrice(_ context.Context, req *protos.PricingPodPrice model, err := w.provider.Pricing() if err != nil { + if err == cloudprovider.ErrNotImplemented { + return nil, status.Error(codes.Unimplemented, err.Error()) + } return nil, err } reqPod := req.GetPod() @@ -326,6 +334,9 @@ func (w *Wrapper) NodeGroupTemplateNodeInfo(_ context.Context, req *protos.NodeG } info, err := ng.TemplateNodeInfo() if err != nil { + if err == cloudprovider.ErrNotImplemented { + return nil, status.Error(codes.Unimplemented, err.Error()) + } return nil, err } return &protos.NodeGroupTemplateNodeInfoResponse{ @@ -355,6 +366,9 @@ func (w *Wrapper) NodeGroupGetOptions(_ context.Context, req *protos.NodeGroupAu } opts, err := ng.GetOptions(defaults) if err != nil { + if err == cloudprovider.ErrNotImplemented { + return nil, status.Error(codes.Unimplemented, err.Error()) + } return nil, err } if opts == nil { diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go index fa5554483799..44cfce4e2cbe 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider.go @@ -27,7 +27,9 @@ import ( "time" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/status" "gopkg.in/yaml.v2" apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -158,6 +160,10 @@ func (m *pricingModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime EndTime: &end, }) if err != nil { + st, ok := status.FromError(err) + if ok && st.Code() == codes.Unimplemented { + return 0, cloudprovider.ErrNotImplemented + } klog.V(1).Infof("Error on gRPC call PricingNodePrice: %v", err) return 0, err } @@ -178,6 +184,10 @@ func (m *pricingModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime tim EndTime: &end, }) if err != nil { + st, ok := status.FromError(err) + if ok && st.Code() == codes.Unimplemented { + return 0, cloudprovider.ErrNotImplemented + } klog.V(1).Infof("Error on gRPC call PricingPodPrice: %v", err) return 0, err } diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider_test.go index a123214cb6c1..31015e0adda1 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_cloud_provider_test.go @@ -23,8 +23,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/anypb" apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/externalgrpc/protos" ) @@ -286,6 +289,23 @@ func TestCloudProvider_Pricing(t *testing.T) { _, err = model.NodePrice(apiv1Node3, time.Time{}, time.Time{}) assert.Error(t, err) + // test notImplemented for NodePrice + m.On( + "PricingNodePrice", mock.Anything, mock.MatchedBy(func(req *protos.PricingNodePriceRequest) bool { + return req.Node.Name == "node4" + }), + ).Return( + &protos.PricingNodePriceResponse{}, + status.Error(codes.Unimplemented, "mock error"), + ) + + apiv1Node4 := &apiv1.Node{} + apiv1Node4.Name = "node4" + + _, err = model.NodePrice(apiv1Node4, time.Time{}, time.Time{}) + assert.Error(t, err) + assert.Equal(t, cloudprovider.ErrNotImplemented, err) + // test correct PodPrice call m.On( "PricingPodPrice", mock.Anything, mock.MatchedBy(func(req *protos.PricingPodPriceRequest) bool { @@ -333,6 +353,24 @@ func TestCloudProvider_Pricing(t *testing.T) { _, err = model.PodPrice(apiv1Pod3, time.Time{}, time.Time{}) assert.Error(t, err) + + // test notImplemented for PodPrice + m.On( + "PricingPodPrice", mock.Anything, mock.MatchedBy(func(req *protos.PricingPodPriceRequest) bool { + return req.Pod.Name == "pod4" + }), + ).Return( + &protos.PricingPodPriceResponse{}, + status.Error(codes.Unimplemented, "mock error"), + ) + + apiv1Pod4 := &apiv1.Pod{} + apiv1Pod4.Name = "pod4" + + _, err = model.PodPrice(apiv1Pod4, time.Time{}, time.Time{}) + assert.Error(t, err) + assert.Equal(t, cloudprovider.ErrNotImplemented, err) + } func TestCloudProvider_GPULabel(t *testing.T) { diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go index 69ffad0ab8f5..b9f0214be5c9 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go @@ -20,6 +20,8 @@ import ( "context" "sync" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" @@ -206,6 +208,10 @@ func (n *NodeGroup) TemplateNodeInfo() (*schedulerframework.NodeInfo, error) { Id: n.id, }) if err != nil { + st, ok := status.FromError(err) + if ok && st.Code() == codes.Unimplemented { + return nil, cloudprovider.ErrNotImplemented + } klog.V(1).Infof("Error on gRPC call NodeGroupTemplateNodeInfo: %v", err) return nil, err } @@ -269,6 +275,10 @@ func (n *NodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*co }, }) if err != nil { + st, ok := status.FromError(err) + if ok && st.Code() == codes.Unimplemented { + return nil, cloudprovider.ErrNotImplemented + } klog.V(1).Infof("Error on gRPC call NodeGroupGetOptions: %v", err) return nil, err } diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go index df377d5e223a..8c41b09c9612 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go @@ -23,6 +23,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" apiv1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" @@ -208,6 +210,27 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) { _, err = ng4.TemplateNodeInfo() assert.Error(t, err) + // test notImplemented + m.On( + "NodeGroupTemplateNodeInfo", mock.Anything, mock.MatchedBy(func(req *protos.NodeGroupTemplateNodeInfoRequest) bool { + return req.Id == "nodeGroup5" + }), + ).Return( + &protos.NodeGroupTemplateNodeInfoResponse{ + NodeInfo: nil, + }, + status.Error(codes.Unimplemented, "mock error"), + ).Once() + + ng5 := NodeGroup{ + id: "nodeGroup5", + client: client, + } + + _, err = ng5.TemplateNodeInfo() + assert.Error(t, err) + assert.Equal(t, cloudprovider.ErrNotImplemented, err) + } func TestCloudProvider_GetOptions(t *testing.T) { @@ -289,6 +312,26 @@ func TestCloudProvider_GetOptions(t *testing.T) { opts, err = ng3.GetOptions(defaultsOpts) assert.NoError(t, err) assert.Nil(t, opts) + + // test notImplemented + m.On( + "NodeGroupGetOptions", mock.Anything, mock.MatchedBy(func(req *protos.NodeGroupAutoscalingOptionsRequest) bool { + return req.Id == "nodeGroup4" + }), + ).Return( + &protos.NodeGroupAutoscalingOptionsResponse{}, + status.Error(codes.Unimplemented, "mock error"), + ) + + ng4 := NodeGroup{ + id: "nodeGroup4", + client: client, + } + + _, err = ng4.GetOptions(defaultsOpts) + assert.Error(t, err) + assert.Equal(t, cloudprovider.ErrNotImplemented, err) + } func TestCloudProvider_TargetSize(t *testing.T) { diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto index 412d46bea40f..0a476e65973f 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto +++ b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc.proto @@ -41,13 +41,13 @@ service CloudProvider { // PricingNodePrice returns a theoretical minimum price of running a node for // a given period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) rpc PricingNodePrice(PricingNodePriceRequest) returns (PricingNodePriceResponse) {} // PricingPodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) rpc PricingPodPrice(PricingPodPriceRequest) returns (PricingPodPriceResponse) {} @@ -103,13 +103,13 @@ service CloudProvider { // NodeGroupTemplateNodeInfo returns a structure of an empty (as if just started) node, // with all of the labels, capacity and allocatable information. This will be used in // scale-up simulations to predict what would a new node look like if a node group was expanded. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) rpc NodeGroupTemplateNodeInfo(NodeGroupTemplateNodeInfoRequest) returns (NodeGroupTemplateNodeInfoResponse) {} // GetOptions returns NodeGroupAutoscalingOptions that should be used for this particular - // NodeGroup. Returning a grpc error will result in using default options. - // Implementation optional. + // NodeGroup. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) rpc NodeGroupGetOptions(NodeGroupAutoscalingOptionsRequest) returns (NodeGroupAutoscalingOptionsResponse) {} } @@ -371,4 +371,3 @@ message NodeGroupAutoscalingOptionsResponse { // autoscaling options for the requested node. NodeGroupAutoscalingOptions nodeGroupAutoscalingOptions = 1; } - diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go index acbc96b2573d..17bac781d8d2 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go +++ b/cluster-autoscaler/cloudprovider/externalgrpc/protos/externalgrpc_grpc.pb.go @@ -46,11 +46,11 @@ type CloudProviderClient interface { NodeGroupForNode(ctx context.Context, in *NodeGroupForNodeRequest, opts ...grpc.CallOption) (*NodeGroupForNodeResponse, error) // PricingNodePrice returns a theoretical minimum price of running a node for // a given period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) PricingNodePrice(ctx context.Context, in *PricingNodePriceRequest, opts ...grpc.CallOption) (*PricingNodePriceResponse, error) // PricingPodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) PricingPodPrice(ctx context.Context, in *PricingPodPriceRequest, opts ...grpc.CallOption) (*PricingPodPriceResponse, error) // GPULabel returns the label added to nodes with GPU resource. GPULabel(ctx context.Context, in *GPULabelRequest, opts ...grpc.CallOption) (*GPULabelResponse, error) @@ -84,11 +84,11 @@ type CloudProviderClient interface { // NodeGroupTemplateNodeInfo returns a structure of an empty (as if just started) node, // with all of the labels, capacity and allocatable information. This will be used in // scale-up simulations to predict what would a new node look like if a node group was expanded. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) NodeGroupTemplateNodeInfo(ctx context.Context, in *NodeGroupTemplateNodeInfoRequest, opts ...grpc.CallOption) (*NodeGroupTemplateNodeInfoResponse, error) // GetOptions returns NodeGroupAutoscalingOptions that should be used for this particular - // NodeGroup. Returning a grpc error will result in using default options. - // Implementation optional. + // NodeGroup. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) NodeGroupGetOptions(ctx context.Context, in *NodeGroupAutoscalingOptionsRequest, opts ...grpc.CallOption) (*NodeGroupAutoscalingOptionsResponse, error) } @@ -247,11 +247,11 @@ type CloudProviderServer interface { NodeGroupForNode(context.Context, *NodeGroupForNodeRequest) (*NodeGroupForNodeResponse, error) // PricingNodePrice returns a theoretical minimum price of running a node for // a given period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) PricingNodePrice(context.Context, *PricingNodePriceRequest) (*PricingNodePriceResponse, error) // PricingPodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) PricingPodPrice(context.Context, *PricingPodPriceRequest) (*PricingPodPriceResponse, error) // GPULabel returns the label added to nodes with GPU resource. GPULabel(context.Context, *GPULabelRequest) (*GPULabelResponse, error) @@ -285,11 +285,11 @@ type CloudProviderServer interface { // NodeGroupTemplateNodeInfo returns a structure of an empty (as if just started) node, // with all of the labels, capacity and allocatable information. This will be used in // scale-up simulations to predict what would a new node look like if a node group was expanded. - // Implementation optional. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) NodeGroupTemplateNodeInfo(context.Context, *NodeGroupTemplateNodeInfoRequest) (*NodeGroupTemplateNodeInfoResponse, error) // GetOptions returns NodeGroupAutoscalingOptions that should be used for this particular - // NodeGroup. Returning a grpc error will result in using default options. - // Implementation optional. + // NodeGroup. + // Implementation optional: if unimplemented return error code 12 (for `Unimplemented`) NodeGroupGetOptions(context.Context, *NodeGroupAutoscalingOptionsRequest) (*NodeGroupAutoscalingOptionsResponse, error) mustEmbedUnimplementedCloudProviderServer() } From dca86321db22a15ae1688462e206237632d6f821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Svantesson?= Date: Wed, 6 Sep 2023 12:04:11 +0200 Subject: [PATCH 034/125] fix: add aws csi zone label to template --- cluster-autoscaler/cloudprovider/aws/aws_manager.go | 2 ++ cluster-autoscaler/cloudprovider/aws/aws_manager_test.go | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_manager.go b/cluster-autoscaler/cloudprovider/aws/aws_manager.go index 110185de055a..15c81fc06476 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_manager.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_manager.go @@ -50,6 +50,7 @@ const ( autoDiscovererTypeASG = "asg" asgAutoDiscovererKeyTag = "tag" optionsTagsPrefix = "k8s.io/cluster-autoscaler/node-template/autoscaling-options/" + labelAwsCSITopologyZone = "topology.ebs.csi.aws.com/zone" ) // AwsManager is handles aws communication and data caching. @@ -416,6 +417,7 @@ func buildGenericLabels(template *asgTemplate, nodeName string) map[string]strin result[apiv1.LabelTopologyRegion] = template.Region result[apiv1.LabelTopologyZone] = template.Zone + result[labelAwsCSITopologyZone] = template.Zone result[apiv1.LabelHostname] = nodeName return result } diff --git a/cluster-autoscaler/cloudprovider/aws/aws_manager_test.go b/cluster-autoscaler/cloudprovider/aws/aws_manager_test.go index ddf1b28ddce7..95b3b348a4d6 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_manager_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_manager_test.go @@ -65,8 +65,11 @@ func TestBuildGenericLabels(t *testing.T) { Architecture: cloudprovider.DefaultArch, }, Region: "us-east-1", + Zone: "us-east-1c", }, "sillyname") - assert.Equal(t, "us-east-1", labels[apiv1.LabelZoneRegionStable]) + assert.Equal(t, "us-east-1", labels[apiv1.LabelTopologyRegion]) + assert.Equal(t, "us-east-1c", labels[apiv1.LabelTopologyZone]) + assert.Equal(t, "us-east-1c", labels[labelAwsCSITopologyZone]) assert.Equal(t, "sillyname", labels[apiv1.LabelHostname]) assert.Equal(t, "c4.large", labels[apiv1.LabelInstanceTypeStable]) assert.Equal(t, cloudprovider.DefaultArch, labels[apiv1.LabelArchStable]) From b4d0531e7fa0b03dc127e609a79068b5d3e810d3 Mon Sep 17 00:00:00 2001 From: torsten Date: Thu, 7 Sep 2023 11:57:12 +0200 Subject: [PATCH 035/125] docs: add point about statically fetching ec2 instance types to AWS gotchas --- cluster-autoscaler/cloudprovider/aws/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/cluster-autoscaler/cloudprovider/aws/README.md b/cluster-autoscaler/cloudprovider/aws/README.md index 3bf5b745ae83..21363cc6fd4b 100644 --- a/cluster-autoscaler/cloudprovider/aws/README.md +++ b/cluster-autoscaler/cloudprovider/aws/README.md @@ -526,3 +526,4 @@ Please note: it is also possible to mount the cloud config file from host: Otherwise, the `/latest/api/token` call will timeout and result in an error. See [AWS docs here](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#configuring-instance-metadata-options) for further information. - If you don't use EKS managed nodegroups, don't add the `eks:nodegroup-name` tag to the ASG as this will lead to extra EKS API calls that could slow down scaling when there are 0 nodes in the nodegroup. - Set `AWS_MAX_ATTEMPTS` to configure max retries +- If you are running a private cluster in a VPC without certain VPC interfaces for AWS services, the CA might crash on startup due to failing to dynamically fetch supported EC2-instance types. To avoid this, add the argument `--aws-use-static-instance-list=true` to the CA startup command. For more information on private cluster requirements, see [AWS docs here](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html). From 4962b57bf72ba4e719f518594db0f00259793291 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Sep 2023 18:55:37 +0000 Subject: [PATCH 036/125] Bump golang from 1.21.0 to 1.21.1 in /vertical-pod-autoscaler/builder Bumps golang from 1.21.0 to 1.21.1. --- updated-dependencies: - dependency-name: golang dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- vertical-pod-autoscaler/builder/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/builder/Dockerfile b/vertical-pod-autoscaler/builder/Dockerfile index 3b5c7a64a23a..453d43acbada 100644 --- a/vertical-pod-autoscaler/builder/Dockerfile +++ b/vertical-pod-autoscaler/builder/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.21.0 +FROM golang:1.21.1 LABEL maintainer="Beata Skiba " ENV GOPATH /gopath/ From 42691d3443d2584dda33f7a2738f25f2608d2eac Mon Sep 17 00:00:00 2001 From: Damika Gamlath Date: Mon, 7 Aug 2023 11:51:36 +0000 Subject: [PATCH 037/125] fix race condition between ca and scheduler Implement dynamically adjustment of NodeDeleteDelayAfterTaint based on round trip time between ca and apiserver --- .../config/autoscaling_options.go | 3 + .../core/scaledown/actuation/actuator.go | 47 +++-- .../actuation/update_latency_tracker.go | 148 +++++++++++++ .../actuation/update_latency_tracker_test.go | 198 ++++++++++++++++++ cluster-autoscaler/main.go | 34 +-- 5 files changed, 402 insertions(+), 28 deletions(-) create mode 100644 cluster-autoscaler/core/scaledown/actuation/update_latency_tracker.go create mode 100644 cluster-autoscaler/core/scaledown/actuation/update_latency_tracker_test.go diff --git a/cluster-autoscaler/config/autoscaling_options.go b/cluster-autoscaler/config/autoscaling_options.go index ae1bc09b673e..3282b0bb64ea 100644 --- a/cluster-autoscaler/config/autoscaling_options.go +++ b/cluster-autoscaler/config/autoscaling_options.go @@ -274,4 +274,7 @@ type AutoscalingOptions struct { ParallelDrain bool // NodeGroupSetRatio is a collection of ratios used by CA used to make scaling decisions. NodeGroupSetRatios NodeGroupDifferenceRatios + // dynamicNodeDeleteDelayAfterTaintEnabled is used to enable/disable dynamic adjustment of NodeDeleteDelayAfterTaint + // based on the latency between the CA and the api-server + DynamicNodeDeleteDelayAfterTaintEnabled bool } diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator.go b/cluster-autoscaler/core/scaledown/actuation/actuator.go index db9e239b17c1..b0875f0b76cb 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator.go @@ -51,8 +51,9 @@ type Actuator struct { // TODO: Move budget processor to scaledown planner, potentially merge into PostFilteringScaleDownNodeProcessor // This is a larger change to the code structure which impacts some existing actuator unit tests // as well as Cluster Autoscaler implementations that may override ScaleDownSetProcessor - budgetProcessor *budgets.ScaleDownBudgetProcessor - configGetter actuatorNodeGroupConfigGetter + budgetProcessor *budgets.ScaleDownBudgetProcessor + configGetter actuatorNodeGroupConfigGetter + nodeDeleteDelayAfterTaint time.Duration } // actuatorNodeGroupConfigGetter is an interface to limit the functions that can be used @@ -66,13 +67,14 @@ type actuatorNodeGroupConfigGetter interface { func NewActuator(ctx *context.AutoscalingContext, csr *clusterstate.ClusterStateRegistry, ndt *deletiontracker.NodeDeletionTracker, deleteOptions simulator.NodeDeleteOptions, configGetter actuatorNodeGroupConfigGetter) *Actuator { ndb := NewNodeDeletionBatcher(ctx, csr, ndt, ctx.NodeDeletionBatcherInterval) return &Actuator{ - ctx: ctx, - clusterState: csr, - nodeDeletionTracker: ndt, - nodeDeletionScheduler: NewGroupDeletionScheduler(ctx, ndt, ndb, NewDefaultEvictor(deleteOptions, ndt)), - budgetProcessor: budgets.NewScaleDownBudgetProcessor(ctx), - deleteOptions: deleteOptions, - configGetter: configGetter, + ctx: ctx, + clusterState: csr, + nodeDeletionTracker: ndt, + nodeDeletionScheduler: NewGroupDeletionScheduler(ctx, ndt, ndb, NewDefaultEvictor(deleteOptions, ndt)), + budgetProcessor: budgets.NewScaleDownBudgetProcessor(ctx), + deleteOptions: deleteOptions, + configGetter: configGetter, + nodeDeleteDelayAfterTaint: ctx.NodeDeleteDelayAfterTaint, } } @@ -158,8 +160,16 @@ func (a *Actuator) deleteAsyncEmpty(NodeGroupViews []*budgets.NodeGroupView) (re // applied taints are cleaned up. func (a *Actuator) taintNodesSync(NodeGroupViews []*budgets.NodeGroupView) errors.AutoscalerError { var taintedNodes []*apiv1.Node + var updateLatencyTracker *UpdateLatencyTracker + if a.ctx.AutoscalingOptions.DynamicNodeDeleteDelayAfterTaintEnabled { + updateLatencyTracker = NewUpdateLatencyTracker(a.ctx.AutoscalingKubeClients.ListerRegistry.AllNodeLister()) + go updateLatencyTracker.Start() + } for _, bucket := range NodeGroupViews { for _, node := range bucket.Nodes { + if a.ctx.AutoscalingOptions.DynamicNodeDeleteDelayAfterTaintEnabled { + updateLatencyTracker.StartTimeChan <- nodeTaintStartTime{node.Name, time.Now()} + } err := a.taintNode(node) if err != nil { a.ctx.Recorder.Eventf(node, apiv1.EventTypeWarning, "ScaleDownFailed", "failed to mark the node as toBeDeleted/unschedulable: %v", err) @@ -167,11 +177,24 @@ func (a *Actuator) taintNodesSync(NodeGroupViews []*budgets.NodeGroupView) error for _, taintedNode := range taintedNodes { _, _ = taints.CleanToBeDeleted(taintedNode, a.ctx.ClientSet, a.ctx.CordonNodeBeforeTerminate) } + if a.ctx.AutoscalingOptions.DynamicNodeDeleteDelayAfterTaintEnabled { + close(updateLatencyTracker.AwaitOrStopChan) + } return errors.NewAutoscalerError(errors.ApiCallError, "couldn't taint node %q with ToBeDeleted", node) } taintedNodes = append(taintedNodes, node) } } + if a.ctx.AutoscalingOptions.DynamicNodeDeleteDelayAfterTaintEnabled { + updateLatencyTracker.AwaitOrStopChan <- true + latency, ok := <-updateLatencyTracker.ResultChan + if ok { + // CA is expected to wait 3 times the round-trip time between CA and the api-server. + // Therefore, the nodeDeleteDelayAfterTaint is set 2 times the latency. + // A delay of one round trip time is implicitly there when measuring the latency. + a.nodeDeleteDelayAfterTaint = 2 * latency + } + } return nil } @@ -207,9 +230,9 @@ func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider return } - if a.ctx.NodeDeleteDelayAfterTaint > time.Duration(0) { - klog.V(0).Infof("Scale-down: waiting %v before trying to delete nodes", a.ctx.NodeDeleteDelayAfterTaint) - time.Sleep(a.ctx.NodeDeleteDelayAfterTaint) + if a.nodeDeleteDelayAfterTaint > time.Duration(0) { + klog.V(0).Infof("Scale-down: waiting %v before trying to delete nodes", a.nodeDeleteDelayAfterTaint) + time.Sleep(a.nodeDeleteDelayAfterTaint) } clusterSnapshot, err := a.createSnapshot(nodes) diff --git a/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker.go b/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker.go new file mode 100644 index 000000000000..99397b8d6a88 --- /dev/null +++ b/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker.go @@ -0,0 +1,148 @@ +/* +Copyright 2022 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package actuation + +import ( + "time" + + "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" + "k8s.io/autoscaler/cluster-autoscaler/utils/taints" + "k8s.io/klog/v2" +) + +const sleepDurationWhenPolling = 50 * time.Millisecond +const waitForTaintingTimeoutDuration = 30 * time.Second + +type nodeTaintStartTime struct { + nodeName string + startTime time.Time +} + +// UpdateLatencyTracker can be used to calculate round-trip time between CA and api-server +// when adding ToBeDeletedTaint to nodes +type UpdateLatencyTracker struct { + startTimestamp map[string]time.Time + finishTimestamp map[string]time.Time + remainingNodeCount int + nodeLister kubernetes.NodeLister + // Sends node tainting start timestamps to the tracker + StartTimeChan chan nodeTaintStartTime + sleepDurationWhenPolling time.Duration + // Passing a bool will wait for all the started nodes to get tainted and calculate + // latency based on latencies observed. (If all the nodes did not get tained within + // waitForTaintingTimeoutDuration after passing a bool, latency calculation will be + // aborted and the ResultChan will be closed without returning a value) Closing the + // AwaitOrStopChan without passing any bool will abort the latency calculation. + AwaitOrStopChan chan bool + // Communicate back the measured latency + ResultChan chan time.Duration + // now is used only to make the testing easier + now func() time.Time +} + +// NewUpdateLatencyTracker returns a new NewUpdateLatencyTracker object +func NewUpdateLatencyTracker(nodeLister kubernetes.NodeLister) *UpdateLatencyTracker { + return &UpdateLatencyTracker{ + startTimestamp: map[string]time.Time{}, + finishTimestamp: map[string]time.Time{}, + remainingNodeCount: 0, + nodeLister: nodeLister, + StartTimeChan: make(chan nodeTaintStartTime), + sleepDurationWhenPolling: sleepDurationWhenPolling, + AwaitOrStopChan: make(chan bool), + ResultChan: make(chan time.Duration), + now: time.Now, + } +} + +// Start starts listening for node tainting start timestamps and update the timestamps that +// the taint appears for the first time for a particular node. Listen AwaitOrStopChan for stop/await signals +func (u *UpdateLatencyTracker) Start() { + for { + select { + case _, ok := <-u.AwaitOrStopChan: + if ok { + u.await() + } + return + case ntst := <-u.StartTimeChan: + u.startTimestamp[ntst.nodeName] = ntst.startTime + u.remainingNodeCount += 1 + continue + default: + } + u.updateFinishTime() + time.Sleep(u.sleepDurationWhenPolling) + } +} + +func (u *UpdateLatencyTracker) updateFinishTime() { + for nodeName := range u.startTimestamp { + if _, ok := u.finishTimestamp[nodeName]; ok { + continue + } + node, err := u.nodeLister.Get(nodeName) + if err != nil { + klog.Errorf("Error getting node: %v", err) + continue + } + if taints.HasToBeDeletedTaint(node) { + u.finishTimestamp[node.Name] = u.now() + u.remainingNodeCount -= 1 + } + } +} + +func (u *UpdateLatencyTracker) calculateLatency() time.Duration { + var maxLatency time.Duration = 0 + for node, startTime := range u.startTimestamp { + endTime, _ := u.finishTimestamp[node] + currentLatency := endTime.Sub(startTime) + if currentLatency > maxLatency { + maxLatency = currentLatency + } + } + return maxLatency +} + +func (u *UpdateLatencyTracker) await() { + waitingForTaintingStartTime := time.Now() + for { + switch { + case u.remainingNodeCount == 0: + latency := u.calculateLatency() + u.ResultChan <- latency + return + case time.Now().After(waitingForTaintingStartTime.Add(waitForTaintingTimeoutDuration)): + klog.Errorf("Timeout before tainting all nodes, latency measurement will be stale") + close(u.ResultChan) + return + default: + time.Sleep(u.sleepDurationWhenPolling) + u.updateFinishTime() + } + } +} + +// NewUpdateLatencyTrackerForTesting returns a UpdateLatencyTracker object with +// reduced sleepDurationWhenPolling and mock clock for testing +func NewUpdateLatencyTrackerForTesting(nodeLister kubernetes.NodeLister, now func() time.Time) *UpdateLatencyTracker { + updateLatencyTracker := NewUpdateLatencyTracker(nodeLister) + updateLatencyTracker.now = now + updateLatencyTracker.sleepDurationWhenPolling = time.Millisecond + return updateLatencyTracker +} diff --git a/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker_test.go b/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker_test.go new file mode 100644 index 000000000000..da55267186e7 --- /dev/null +++ b/cluster-autoscaler/core/scaledown/actuation/update_latency_tracker_test.go @@ -0,0 +1,198 @@ +/* +Copyright 2022 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package actuation + +import ( + "fmt" + "sync" + "testing" + "time" + + "github.com/stretchr/testify/assert" + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/utils/taints" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" +) + +// mockClock is used to mock time.Now() when testing UpdateLatencyTracker +// For the n th call to Now() it will return a timestamp after duration[n] to +// the startTime if n < the length of durations. Otherwise, it will return current time. +type mockClock struct { + startTime time.Time + durations []time.Duration + index int + mutex sync.Mutex +} + +// Returns a new NewMockClock object +func NewMockClock(startTime time.Time, durations []time.Duration) mockClock { + return mockClock{ + startTime: startTime, + durations: durations, + index: 0, + } +} + +// Returns a time after Nth duration from the start time if N < length of durations. +// Otherwise, returns the current time +func (m *mockClock) Now() time.Time { + m.mutex.Lock() + defer m.mutex.Unlock() + var timeToSend time.Time + if m.index < len(m.durations) { + timeToSend = m.startTime.Add(m.durations[m.index]) + } else { + timeToSend = time.Now() + } + m.index += 1 + return timeToSend +} + +// Returns the number of times that the Now function was called +func (m *mockClock) getIndex() int { + m.mutex.Lock() + defer m.mutex.Unlock() + return m.index +} + +// TestCustomNodeLister can be used to mock nodeLister Get call when testing delayed tainting +type TestCustomNodeLister struct { + nodes map[string]*apiv1.Node + getCallCount map[string]int + nodeTaintAfterNthGetCall map[string]int +} + +// List returns all nodes in test lister. +func (l *TestCustomNodeLister) List() ([]*apiv1.Node, error) { + var nodes []*apiv1.Node + for _, node := range l.nodes { + nodes = append(nodes, node) + } + return nodes, nil +} + +// Get returns node from test lister. Add ToBeDeletedTaint to the node +// during the N th call specified in the nodeTaintAfterNthGetCall +func (l *TestCustomNodeLister) Get(name string) (*apiv1.Node, error) { + for _, node := range l.nodes { + if node.Name == name { + l.getCallCount[node.Name] += 1 + if _, ok := l.nodeTaintAfterNthGetCall[node.Name]; ok && l.getCallCount[node.Name] == l.nodeTaintAfterNthGetCall[node.Name] { + toBeDeletedTaint := apiv1.Taint{Key: taints.ToBeDeletedTaint, Effect: apiv1.TaintEffectNoSchedule} + node.Spec.Taints = append(node.Spec.Taints, toBeDeletedTaint) + } + return node, nil + } + } + return nil, fmt.Errorf("Node %s not found", name) +} + +// Return new TestCustomNodeLister object +func NewTestCustomNodeLister(nodes map[string]*apiv1.Node, nodeTaintAfterNthGetCall map[string]int) *TestCustomNodeLister { + getCallCounts := map[string]int{} + for name := range nodes { + getCallCounts[name] = 0 + } + return &TestCustomNodeLister{ + nodes: nodes, + getCallCount: getCallCounts, + nodeTaintAfterNthGetCall: nodeTaintAfterNthGetCall, + } +} + +func TestUpdateLatencyCalculation(t *testing.T) { + + testCases := []struct { + description string + startTime time.Time + nodes []string + // If an entry is not added for a node, that node will never get tainted + nodeTaintAfterNthGetCall map[string]int + durations []time.Duration + wantLatency time.Duration + wantResultChanOpen bool + }{ + { + description: "latency when tainting a single node - node is tainted in the first call to the lister", + startTime: time.Now(), + nodes: []string{"n1"}, + nodeTaintAfterNthGetCall: map[string]int{"n1": 1}, + durations: []time.Duration{100 * time.Millisecond}, + wantLatency: 100 * time.Millisecond, + wantResultChanOpen: true, + }, + { + description: "latency when tainting a single node - node is not tainted in the first call to the lister", + startTime: time.Now(), + nodes: []string{"n1"}, + nodeTaintAfterNthGetCall: map[string]int{"n1": 3}, + durations: []time.Duration{100 * time.Millisecond}, + wantLatency: 100 * time.Millisecond, + wantResultChanOpen: true, + }, + { + description: "latency when tainting multiple nodes - nodes are tainted in the first calls to the lister", + startTime: time.Now(), + nodes: []string{"n1", "n2"}, + nodeTaintAfterNthGetCall: map[string]int{"n1": 1, "n2": 1}, + durations: []time.Duration{100 * time.Millisecond, 150 * time.Millisecond}, + wantLatency: 150 * time.Millisecond, + wantResultChanOpen: true, + }, + { + description: "latency when tainting multiple nodes - nodes are not tainted in the first calls to the lister", + startTime: time.Now(), + nodes: []string{"n1", "n2"}, + nodeTaintAfterNthGetCall: map[string]int{"n1": 3, "n2": 5}, + durations: []time.Duration{100 * time.Millisecond, 150 * time.Millisecond}, + wantLatency: 150 * time.Millisecond, + wantResultChanOpen: true, + }, + { + description: "Some nodes fails to taint before timeout", + startTime: time.Now(), + nodes: []string{"n1", "n3"}, + nodeTaintAfterNthGetCall: map[string]int{"n1": 1}, + durations: []time.Duration{100 * time.Millisecond, 150 * time.Millisecond}, + wantResultChanOpen: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + mc := NewMockClock(tc.startTime, tc.durations) + nodes := map[string]*apiv1.Node{} + for _, name := range tc.nodes { + node := test.BuildTestNode(name, 100, 100) + nodes[name] = node + } + nodeLister := NewTestCustomNodeLister(nodes, tc.nodeTaintAfterNthGetCall) + updateLatencyTracker := NewUpdateLatencyTrackerForTesting(nodeLister, mc.Now) + go updateLatencyTracker.Start() + for _, node := range nodes { + updateLatencyTracker.StartTimeChan <- nodeTaintStartTime{node.Name, tc.startTime} + } + updateLatencyTracker.AwaitOrStopChan <- true + latency, ok := <-updateLatencyTracker.ResultChan + assert.Equal(t, tc.wantResultChanOpen, ok) + if ok { + assert.Equal(t, tc.wantLatency, latency) + assert.Equal(t, len(tc.durations), mc.getIndex()) + } + }) + } +} diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 5005a0ba4b32..2a3e30cd8287 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -218,22 +218,23 @@ var ( "maxNodeGroupBackoffDuration is the maximum backoff duration for a NodeGroup after new nodes failed to start.") nodeGroupBackoffResetTimeout = flag.Duration("node-group-backoff-reset-timeout", 3*time.Hour, "nodeGroupBackoffResetTimeout is the time after last failed scale-up when the backoff duration is reset.") - maxScaleDownParallelismFlag = flag.Int("max-scale-down-parallelism", 10, "Maximum number of nodes (both empty and needing drain) that can be deleted in parallel.") - maxDrainParallelismFlag = flag.Int("max-drain-parallelism", 1, "Maximum number of nodes needing drain, that can be drained and deleted in parallel.") - recordDuplicatedEvents = flag.Bool("record-duplicated-events", false, "enable duplication of similar events within a 5 minute window.") - maxNodesPerScaleUp = flag.Int("max-nodes-per-scaleup", 1000, "Max nodes added in a single scale-up. This is intended strictly for optimizing CA algorithm latency and not a tool to rate-limit scale-up throughput.") - maxNodeGroupBinpackingDuration = flag.Duration("max-nodegroup-binpacking-duration", 10*time.Second, "Maximum time that will be spent in binpacking simulation for each NodeGroup.") - skipNodesWithSystemPods = flag.Bool("skip-nodes-with-system-pods", true, "If true cluster autoscaler will never delete nodes with pods from kube-system (except for DaemonSet or mirror pods)") - skipNodesWithLocalStorage = flag.Bool("skip-nodes-with-local-storage", true, "If true cluster autoscaler will never delete nodes with pods with local storage, e.g. EmptyDir or HostPath") - skipNodesWithCustomControllerPods = flag.Bool("skip-nodes-with-custom-controller-pods", true, "If true cluster autoscaler will never delete nodes with pods owned by custom controllers") - minReplicaCount = flag.Int("min-replica-count", 0, "Minimum number or replicas that a replica set or replication controller should have to allow their pods deletion in scale down") - nodeDeleteDelayAfterTaint = flag.Duration("node-delete-delay-after-taint", 5*time.Second, "How long to wait before deleting a node after tainting it") - scaleDownSimulationTimeout = flag.Duration("scale-down-simulation-timeout", 30*time.Second, "How long should we run scale down simulation.") - parallelDrain = flag.Bool("parallel-drain", true, "Whether to allow parallel drain of nodes. This flag is deprecated and will be removed in future releases.") - maxCapacityMemoryDifferenceRatio = flag.Float64("memory-difference-ratio", config.DefaultMaxCapacityMemoryDifferenceRatio, "Maximum difference in memory capacity between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's memory capacity.") - maxFreeDifferenceRatio = flag.Float64("max-free-difference-ratio", config.DefaultMaxFreeDifferenceRatio, "Maximum difference in free resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's free resource.") - maxAllocatableDifferenceRatio = flag.Float64("max-allocatable-difference-ratio", config.DefaultMaxAllocatableDifferenceRatio, "Maximum difference in allocatable resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's allocatable resource.") - forceDaemonSets = flag.Bool("force-ds", false, "Blocks scale-up of node groups too small for all suitable Daemon Sets pods.") + maxScaleDownParallelismFlag = flag.Int("max-scale-down-parallelism", 10, "Maximum number of nodes (both empty and needing drain) that can be deleted in parallel.") + maxDrainParallelismFlag = flag.Int("max-drain-parallelism", 1, "Maximum number of nodes needing drain, that can be drained and deleted in parallel.") + recordDuplicatedEvents = flag.Bool("record-duplicated-events", false, "enable duplication of similar events within a 5 minute window.") + maxNodesPerScaleUp = flag.Int("max-nodes-per-scaleup", 1000, "Max nodes added in a single scale-up. This is intended strictly for optimizing CA algorithm latency and not a tool to rate-limit scale-up throughput.") + maxNodeGroupBinpackingDuration = flag.Duration("max-nodegroup-binpacking-duration", 10*time.Second, "Maximum time that will be spent in binpacking simulation for each NodeGroup.") + skipNodesWithSystemPods = flag.Bool("skip-nodes-with-system-pods", true, "If true cluster autoscaler will never delete nodes with pods from kube-system (except for DaemonSet or mirror pods)") + skipNodesWithLocalStorage = flag.Bool("skip-nodes-with-local-storage", true, "If true cluster autoscaler will never delete nodes with pods with local storage, e.g. EmptyDir or HostPath") + skipNodesWithCustomControllerPods = flag.Bool("skip-nodes-with-custom-controller-pods", true, "If true cluster autoscaler will never delete nodes with pods owned by custom controllers") + minReplicaCount = flag.Int("min-replica-count", 0, "Minimum number or replicas that a replica set or replication controller should have to allow their pods deletion in scale down") + nodeDeleteDelayAfterTaint = flag.Duration("node-delete-delay-after-taint", 5*time.Second, "How long to wait before deleting a node after tainting it") + scaleDownSimulationTimeout = flag.Duration("scale-down-simulation-timeout", 30*time.Second, "How long should we run scale down simulation.") + parallelDrain = flag.Bool("parallel-drain", true, "Whether to allow parallel drain of nodes. This flag is deprecated and will be removed in future releases.") + maxCapacityMemoryDifferenceRatio = flag.Float64("memory-difference-ratio", config.DefaultMaxCapacityMemoryDifferenceRatio, "Maximum difference in memory capacity between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's memory capacity.") + maxFreeDifferenceRatio = flag.Float64("max-free-difference-ratio", config.DefaultMaxFreeDifferenceRatio, "Maximum difference in free resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's free resource.") + maxAllocatableDifferenceRatio = flag.Float64("max-allocatable-difference-ratio", config.DefaultMaxAllocatableDifferenceRatio, "Maximum difference in allocatable resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's allocatable resource.") + forceDaemonSets = flag.Bool("force-ds", false, "Blocks scale-up of node groups too small for all suitable Daemon Sets pods.") + dynamicNodeDeleteDelayAfterTaintEnabled = flag.Bool("dynamic-node-delete-delay-after-taint-enabled", true, "Enables dynamic adjustment of NodeDeleteDelayAfterTaint based of the latency between CA and api-server") ) func isFlagPassed(name string) bool { @@ -379,6 +380,7 @@ func createAutoscalingOptions() config.AutoscalingOptions { MaxAllocatableDifferenceRatio: *maxAllocatableDifferenceRatio, MaxFreeDifferenceRatio: *maxFreeDifferenceRatio, }, + DynamicNodeDeleteDelayAfterTaintEnabled: *dynamicNodeDeleteDelayAfterTaintEnabled, } } From 20f41e2ba32b52591c7cbb1aa3db25570fb76ef7 Mon Sep 17 00:00:00 2001 From: Hakan Bostan Date: Thu, 7 Sep 2023 09:16:58 +0000 Subject: [PATCH 038/125] Add additional error codes for invalid reservations to GCE client --- .../gce/autoscaling_gce_client.go | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/gce/autoscaling_gce_client.go b/cluster-autoscaler/cloudprovider/gce/autoscaling_gce_client.go index c16475bcf14a..164f7221df78 100644 --- a/cluster-autoscaler/cloudprovider/gce/autoscaling_gce_client.go +++ b/cluster-autoscaler/cloudprovider/gce/autoscaling_gce_client.go @@ -72,6 +72,22 @@ const ( ErrorCodeOther = "OTHER" ) +var ( + regexReservationErrors = []*regexp.Regexp{ + regexp.MustCompile("Incompatible AggregateReservation VMFamily"), + regexp.MustCompile("Could not find the given reservation with the following name"), + regexp.MustCompile("must use ReservationAffinity of"), + regexp.MustCompile("The reservation must exist in the same project as the instance"), + regexp.MustCompile("only compatible with Aggregate Reservations"), + regexp.MustCompile("Please target a reservation with workload_type ="), + regexp.MustCompile("AggregateReservation VMFamily: should be a (.*) VM Family for instance with (.*) machine type"), + regexp.MustCompile("VM Family: (.*) is not supported for aggregate reservations. It must be one of"), + regexp.MustCompile("Reservation (.*) is incorrect for the requested resources"), + regexp.MustCompile("Zone does not currently have sufficient capacity for the requested resources"), + regexp.MustCompile("Reservation (.*) does not have sufficient capacity for the requested resources."), + } +) + // AutoscalingGceClient is used for communicating with GCE API. type AutoscalingGceClient interface { // reading resources @@ -453,15 +469,8 @@ func isReservationNotReady(errorCode, errorMessage string) bool { } func isInvalidReservationError(errorCode, errorMessage string) bool { - reservationErrors := []string{ - "Incompatible AggregateReservation VMFamily", - "Could not find the given reservation with the following name", - "must use ReservationAffinity of", - "The reservation must exist in the same project as the instance", - "only compatible with Aggregate Reservations", - } - for _, rErr := range reservationErrors { - if strings.Contains(errorMessage, rErr) { + for _, re := range regexReservationErrors { + if re.MatchString(errorMessage) { return true } } From aef5a2bffcdce839403517bde001088bc7dfa504 Mon Sep 17 00:00:00 2001 From: Damika Gamlath Date: Mon, 11 Sep 2023 13:20:08 +0000 Subject: [PATCH 039/125] Disable dynamic-node-delete-delay-after-taint-enabled by default --- cluster-autoscaler/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index e3b525518b6e..7bcece19690b 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -237,7 +237,7 @@ var ( maxFreeDifferenceRatio = flag.Float64("max-free-difference-ratio", config.DefaultMaxFreeDifferenceRatio, "Maximum difference in free resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's free resource.") maxAllocatableDifferenceRatio = flag.Float64("max-allocatable-difference-ratio", config.DefaultMaxAllocatableDifferenceRatio, "Maximum difference in allocatable resources between two similar node groups to be considered for balancing. Value is a ratio of the smaller node group's allocatable resource.") forceDaemonSets = flag.Bool("force-ds", false, "Blocks scale-up of node groups too small for all suitable Daemon Sets pods.") - dynamicNodeDeleteDelayAfterTaintEnabled = flag.Bool("dynamic-node-delete-delay-after-taint-enabled", true, "Enables dynamic adjustment of NodeDeleteDelayAfterTaint based of the latency between CA and api-server") + dynamicNodeDeleteDelayAfterTaintEnabled = flag.Bool("dynamic-node-delete-delay-after-taint-enabled", false, "Enables dynamic adjustment of NodeDeleteDelayAfterTaint based of the latency between CA and api-server") ) func isFlagPassed(name string) bool { From ea94a2b3436e2fc5503a3d64ebe7dff324e4dd85 Mon Sep 17 00:00:00 2001 From: Karol Wychowaniec Date: Mon, 11 Sep 2023 15:46:54 +0000 Subject: [PATCH 040/125] Refactor ScaleDownSet processor into a composite processor --- cluster-autoscaler/core/test/common.go | 5 +- ...ocessor.go => scale_down_set_processor.go} | 63 ++++++++++++++++--- cluster-autoscaler/processors/processors.go | 11 +++- 3 files changed, 65 insertions(+), 14 deletions(-) rename cluster-autoscaler/processors/nodes/{post_filtering_processor.go => scale_down_set_processor.go} (51%) diff --git a/cluster-autoscaler/core/test/common.go b/cluster-autoscaler/core/test/common.go index 1c67f4b51112..004619249f99 100644 --- a/cluster-autoscaler/core/test/common.go +++ b/cluster-autoscaler/core/test/common.go @@ -178,7 +178,10 @@ func NewTestProcessors(context *context.AutoscalingContext) *processors.Autoscal NodeGroupListProcessor: &nodegroups.NoOpNodeGroupListProcessor{}, BinpackingLimiter: binpacking.NewDefaultBinpackingLimiter(), NodeGroupSetProcessor: nodegroupset.NewDefaultNodeGroupSetProcessor([]string{}, config.NodeGroupDifferenceRatios{}), - ScaleDownSetProcessor: nodes.NewPostFilteringScaleDownNodeProcessor(), + ScaleDownSetProcessor: nodes.NewCompositeScaleDownSetProcessor([]nodes.ScaleDownSetProcessor{ + nodes.NewAtomicResizeFilteringProcessor(), + nodes.NewMaxNodesProcessor(), + }), // TODO(bskiba): change scale up test so that this can be a NoOpProcessor ScaleUpStatusProcessor: &status.EventingScaleUpStatusProcessor{}, ScaleDownStatusProcessor: &status.NoOpScaleDownStatusProcessor{}, diff --git a/cluster-autoscaler/processors/nodes/post_filtering_processor.go b/cluster-autoscaler/processors/nodes/scale_down_set_processor.go similarity index 51% rename from cluster-autoscaler/processors/nodes/post_filtering_processor.go rename to cluster-autoscaler/processors/nodes/scale_down_set_processor.go index 06c59d1451ad..579837c48d5c 100644 --- a/cluster-autoscaler/processors/nodes/post_filtering_processor.go +++ b/cluster-autoscaler/processors/nodes/scale_down_set_processor.go @@ -23,32 +23,66 @@ import ( klog "k8s.io/klog/v2" ) -// PostFilteringScaleDownNodeProcessor selects first maxCount nodes (if possible) to be removed -type PostFilteringScaleDownNodeProcessor struct { +// CompositeScaleDownSetProcessor is a ScaleDownSetProcessor composed of multiple sub-processors passed as an argument. +type CompositeScaleDownSetProcessor struct { + orderedProcessorList []ScaleDownSetProcessor +} + +// NewCompositeScaleDownSetProcessor creates new CompositeScaleDownSetProcessor. The order on a list defines order in witch +// sub-processors are invoked. +func NewCompositeScaleDownSetProcessor(orderedProcessorList []ScaleDownSetProcessor) *CompositeScaleDownSetProcessor { + return &CompositeScaleDownSetProcessor{ + orderedProcessorList: orderedProcessorList, + } +} + +// GetNodesToRemove selects nodes to remove. +func (p *CompositeScaleDownSetProcessor) GetNodesToRemove(ctx *context.AutoscalingContext, candidates []simulator.NodeToBeRemoved, maxCount int) []simulator.NodeToBeRemoved { + for _, p := range p.orderedProcessorList { + candidates = p.GetNodesToRemove(ctx, candidates, maxCount) + } + return candidates +} + +// CleanUp is called at CA termination +func (p *CompositeScaleDownSetProcessor) CleanUp() { + for _, p := range p.orderedProcessorList { + p.CleanUp() + } +} + +// MaxNodesProcessor selects first maxCount nodes (if possible) to be removed +type MaxNodesProcessor struct { } // GetNodesToRemove selects up to maxCount nodes for deletion, by selecting a first maxCount candidates -func (p *PostFilteringScaleDownNodeProcessor) GetNodesToRemove(ctx *context.AutoscalingContext, candidates []simulator.NodeToBeRemoved, maxCount int) []simulator.NodeToBeRemoved { +func (p *MaxNodesProcessor) GetNodesToRemove(ctx *context.AutoscalingContext, candidates []simulator.NodeToBeRemoved, maxCount int) []simulator.NodeToBeRemoved { end := len(candidates) if len(candidates) > maxCount { end = maxCount } - return p.filterOutIncompleteAtomicNodeGroups(ctx, candidates[:end]) + return candidates[:end] } // CleanUp is called at CA termination -func (p *PostFilteringScaleDownNodeProcessor) CleanUp() { +func (p *MaxNodesProcessor) CleanUp() { } -// NewPostFilteringScaleDownNodeProcessor returns a new PostFilteringScaleDownNodeProcessor -func NewPostFilteringScaleDownNodeProcessor() *PostFilteringScaleDownNodeProcessor { - return &PostFilteringScaleDownNodeProcessor{} +// NewMaxNodesProcessor returns a new MaxNodesProcessor +func NewMaxNodesProcessor() *MaxNodesProcessor { + return &MaxNodesProcessor{} } -func (p *PostFilteringScaleDownNodeProcessor) filterOutIncompleteAtomicNodeGroups(ctx *context.AutoscalingContext, nodes []simulator.NodeToBeRemoved) []simulator.NodeToBeRemoved { +// AtomicResizeFilteringProcessor removes node groups which should be scaled down as one unit +// if only part of these nodes were scheduled for scale down. +type AtomicResizeFilteringProcessor struct { +} + +// GetNodesToRemove selects up to maxCount nodes for deletion, by selecting a first maxCount candidates +func (p *AtomicResizeFilteringProcessor) GetNodesToRemove(ctx *context.AutoscalingContext, candidates []simulator.NodeToBeRemoved, maxCount int) []simulator.NodeToBeRemoved { nodesByGroup := map[cloudprovider.NodeGroup][]simulator.NodeToBeRemoved{} result := []simulator.NodeToBeRemoved{} - for _, node := range nodes { + for _, node := range candidates { nodeGroup, err := ctx.CloudProvider.NodeGroupForNode(node.Node) if err != nil { klog.Errorf("Node %v will not scale down, failed to get node info: %s", node.Node.Name, err) @@ -82,3 +116,12 @@ func (p *PostFilteringScaleDownNodeProcessor) filterOutIncompleteAtomicNodeGroup } return result } + +// CleanUp is called at CA termination +func (p *AtomicResizeFilteringProcessor) CleanUp() { +} + +// NewAtomicResizeFilteringProcessor returns a new AtomicResizeFilteringProcessor +func NewAtomicResizeFilteringProcessor() *AtomicResizeFilteringProcessor { + return &AtomicResizeFilteringProcessor{} +} diff --git a/cluster-autoscaler/processors/processors.go b/cluster-autoscaler/processors/processors.go index 638af953cf8e..8d7b949540e7 100644 --- a/cluster-autoscaler/processors/processors.go +++ b/cluster-autoscaler/processors/processors.go @@ -80,9 +80,14 @@ func DefaultProcessors(options config.AutoscalingOptions) *AutoscalingProcessors MaxCapacityMemoryDifferenceRatio: config.DefaultMaxCapacityMemoryDifferenceRatio, MaxFreeDifferenceRatio: config.DefaultMaxFreeDifferenceRatio, }), - ScaleUpStatusProcessor: status.NewDefaultScaleUpStatusProcessor(), - ScaleDownNodeProcessor: nodes.NewPreFilteringScaleDownNodeProcessor(), - ScaleDownSetProcessor: nodes.NewPostFilteringScaleDownNodeProcessor(), + ScaleUpStatusProcessor: status.NewDefaultScaleUpStatusProcessor(), + ScaleDownNodeProcessor: nodes.NewPreFilteringScaleDownNodeProcessor(), + ScaleDownSetProcessor: nodes.NewCompositeScaleDownSetProcessor( + []nodes.ScaleDownSetProcessor{ + nodes.NewMaxNodesProcessor(), + nodes.NewAtomicResizeFilteringProcessor(), + }, + ), ScaleDownStatusProcessor: status.NewDefaultScaleDownStatusProcessor(), AutoscalingStatusProcessor: status.NewDefaultAutoscalingStatusProcessor(), NodeGroupManager: nodegroups.NewDefaultNodeGroupManager(), From ffe65371634659570c79054dd7349c952557abc4 Mon Sep 17 00:00:00 2001 From: Piotr Date: Mon, 11 Sep 2023 10:37:52 +0000 Subject: [PATCH 041/125] Unifies pod listing. --- .../core/scaledown/actuation/actuator.go | 4 +- .../core/scaledown/actuation/actuator_test.go | 4 +- .../core/scaledown/actuation/drain_test.go | 2 +- .../group_deletion_scheduler_test.go | 2 +- .../scaledown/actuation/softtaint_test.go | 4 +- .../core/scaledown/legacy/legacy_test.go | 22 +-- .../core/scaledown/planner/controller_test.go | 2 +- .../core/scaledown/planner/planner_test.go | 2 +- .../core/scaledown/unneeded/nodes_test.go | 2 +- .../scaleup/orchestrator/orchestrator_test.go | 18 +-- .../core/scaleup/resource/manager_test.go | 2 +- cluster-autoscaler/core/static_autoscaler.go | 8 +- .../core/static_autoscaler_test.go | 148 +++++++---------- .../mixed_nodeinfos_processor.go | 5 +- .../mixed_nodeinfos_processor_test.go | 6 +- cluster-autoscaler/simulator/cluster_test.go | 2 +- cluster-autoscaler/utils/drain/drain_test.go | 2 +- .../utils/kubernetes/listers.go | 151 +++++++----------- .../utils/kubernetes/testlisters.go | 19 --- cluster-autoscaler/utils/test/test_utils.go | 19 ++- 20 files changed, 181 insertions(+), 243 deletions(-) diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator.go b/cluster-autoscaler/core/scaledown/actuation/actuator.go index 08110fd3e030..b4720243cb87 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator.go @@ -314,12 +314,12 @@ func (a *Actuator) taintNode(node *apiv1.Node) error { func (a *Actuator) createSnapshot(nodes []*apiv1.Node) (clustersnapshot.ClusterSnapshot, error) { knownNodes := make(map[string]bool) snapshot := clustersnapshot.NewBasicClusterSnapshot() - - scheduledPods, err := a.ctx.ScheduledPodLister().List() + pods, err := a.ctx.AllPodLister().List() if err != nil { return nil, err } + scheduledPods := kube_util.ScheduledPods(pods) nonExpendableScheduledPods := utils.FilterOutExpendablePods(scheduledPods, a.ctx.ExpendablePodsPriorityCutoff) for _, node := range nodes { diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go index 07cad48717e7..b5ca0b46089f 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go @@ -1078,7 +1078,7 @@ func TestStartDeletion(t *testing.T) { t.Fatalf("Couldn't create daemonset lister") } - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, dsLister, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, dsLister, nil, nil, nil, nil) ctx, err := NewScaleTestAutoscalingContext(opts, fakeClient, registry, provider, nil, nil) if err != nil { t.Fatalf("Couldn't set up autoscaling context: %v", err) @@ -1336,7 +1336,7 @@ func TestStartDeletionInBatchBasic(t *testing.T) { podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) pdbLister := kube_util.NewTestPodDisruptionBudgetLister([]*policyv1.PodDisruptionBudget{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, nil, nil) ctx, err := NewScaleTestAutoscalingContext(opts, fakeClient, registry, provider, nil, nil) if err != nil { t.Fatalf("Couldn't set up autoscaling context: %v", err) diff --git a/cluster-autoscaler/core/scaledown/actuation/drain_test.go b/cluster-autoscaler/core/scaledown/actuation/drain_test.go index a6dfcdfed6b2..ed2ae3922a58 100644 --- a/cluster-autoscaler/core/scaledown/actuation/drain_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/drain_test.go @@ -152,7 +152,7 @@ func TestDaemonSetEvictionForEmptyNodes(t *testing.T) { provider := testprovider.NewTestCloudProvider(nil, nil) provider.AddNodeGroup("ng1", 1, 10, 1) provider.AddNode("ng1", n1) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) diff --git a/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go b/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go index 481e260c841b..ec71a9993193 100644 --- a/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/group_deletion_scheduler_test.go @@ -121,7 +121,7 @@ func TestScheduleDeletion(t *testing.T) { if err != nil { t.Fatalf("Couldn't create daemonset lister") } - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, dsLister, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, dsLister, nil, nil, nil, nil) ctx, err := NewScaleTestAutoscalingContext(opts, fakeClient, registry, provider, nil, nil) if err != nil { t.Fatalf("Couldn't set up autoscaling context: %v", err) diff --git a/cluster-autoscaler/core/scaledown/actuation/softtaint_test.go b/cluster-autoscaler/core/scaledown/actuation/softtaint_test.go index ee25207fadce..92506c656e47 100644 --- a/cluster-autoscaler/core/scaledown/actuation/softtaint_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/softtaint_test.go @@ -67,7 +67,7 @@ func TestSoftTaintUpdate(t *testing.T) { MaxBulkSoftTaintCount: 1, MaxBulkSoftTaintTime: 3 * time.Second, } - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil) actx, err := test.NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) @@ -151,7 +151,7 @@ func TestSoftTaintTimeLimit(t *testing.T) { MaxBulkSoftTaintCount: 10, MaxBulkSoftTaintTime: maxSoftTaintDuration, } - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, nil) actx, err := test.NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) diff --git a/cluster-autoscaler/core/scaledown/legacy/legacy_test.go b/cluster-autoscaler/core/scaledown/legacy/legacy_test.go index 0b3389b50c00..be6d7565d4b3 100644 --- a/cluster-autoscaler/core/scaledown/legacy/legacy_test.go +++ b/cluster-autoscaler/core/scaledown/legacy/legacy_test.go @@ -136,7 +136,7 @@ func TestFindUnneededNodes(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -266,7 +266,7 @@ func TestFindUnneededGPUNodes(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -389,7 +389,7 @@ func TestFindUnneededWithPerNodeGroupThresholds(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) context, err := NewScaleTestAutoscalingContext(globalOptions, &fake.Clientset{}, registry, provider, nil, nil) assert.NoError(t, err) @@ -466,7 +466,7 @@ func TestPodsWithPreemptionsFindUnneededNodes(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -527,7 +527,7 @@ func TestFindUnneededMaxCandidates(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -611,7 +611,7 @@ func TestFindUnneededEmptyNodes(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -668,7 +668,7 @@ func TestFindUnneededNodePool(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, rsLister, nil) options := config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ @@ -766,7 +766,7 @@ func TestScaleDown(t *testing.T) { podLister := kube_util.NewTestPodLister([]*apiv1.Pod{p1, p2}) pdbLister := kube_util.NewTestPodDisruptionBudgetLister([]*policyv1.PodDisruptionBudget{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, jobLister, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, jobLister, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) @@ -1025,7 +1025,7 @@ func simpleScaleDownEmpty(t *testing.T, config *ScaleTestConfig) { podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) pdbLister := kube_util.NewTestPodDisruptionBudgetLister([]*policyv1.PodDisruptionBudget{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, nil, nil) context, err := NewScaleTestAutoscalingContext(config.Options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) @@ -1117,7 +1117,7 @@ func TestNoScaleDownUnready(t *testing.T) { podLister := kube_util.NewTestPodLister([]*apiv1.Pod{p2}) pdbLister := kube_util.NewTestPodDisruptionBudgetLister([]*policyv1.PodDisruptionBudget{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, pdbLister, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, pdbLister, nil, nil, nil, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) @@ -1231,7 +1231,7 @@ func TestScaleDownNoMove(t *testing.T) { } jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, jobLister, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, jobLister, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, registry, provider, nil, nil) assert.NoError(t, err) diff --git a/cluster-autoscaler/core/scaledown/planner/controller_test.go b/cluster-autoscaler/core/scaledown/planner/controller_test.go index bd73ff3f5c10..d2bf7cc71aeb 100644 --- a/cluster-autoscaler/core/scaledown/planner/controller_test.go +++ b/cluster-autoscaler/core/scaledown/planner/controller_test.go @@ -125,7 +125,7 @@ func TestReplicasCounter(t *testing.T) { jobLister, _ := kube_util.NewTestJobLister([]*batchv1.Job{job, unsetJob, jobWithSucceededReplicas}) rsLister, _ := kube_util.NewTestReplicaSetLister([]*appsv1.ReplicaSet{rs, unsetRs}) ssLister, _ := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{sS}) - listers := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, rcLister, jobLister, rsLister, ssLister) + listers := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, rcLister, jobLister, rsLister, ssLister) testCases := []struct { name string ownerRef metav1.OwnerReference diff --git a/cluster-autoscaler/core/scaledown/planner/planner_test.go b/cluster-autoscaler/core/scaledown/planner/planner_test.go index 7d226472acaf..d3c14a61b733 100644 --- a/cluster-autoscaler/core/scaledown/planner/planner_test.go +++ b/cluster-autoscaler/core/scaledown/planner/planner_test.go @@ -481,7 +481,7 @@ func TestUpdateClusterState(t *testing.T) { } rsLister, err := kube_util.NewTestReplicaSetLister(tc.replicasSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, rsLister, nil) provider := testprovider.NewTestCloudProvider(nil, nil) context, err := NewScaleTestAutoscalingContext(config.AutoscalingOptions{ NodeGroupDefaults: config.NodeGroupAutoscalingOptions{ diff --git a/cluster-autoscaler/core/scaledown/unneeded/nodes_test.go b/cluster-autoscaler/core/scaledown/unneeded/nodes_test.go index 7088e148ea28..704c8df361f2 100644 --- a/cluster-autoscaler/core/scaledown/unneeded/nodes_test.go +++ b/cluster-autoscaler/core/scaledown/unneeded/nodes_test.go @@ -197,7 +197,7 @@ func TestRemovableAt(t *testing.T) { rsLister, err := kube_util.NewTestReplicaSetLister(nil) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, rsLister, nil) ctx, err := NewScaleTestAutoscalingContext(config.AutoscalingOptions{ScaleDownSimulationTimeout: 5 * time.Minute}, &fake.Clientset{}, registry, provider, nil, nil) assert.NoError(t, err) diff --git a/cluster-autoscaler/core/scaleup/orchestrator/orchestrator_test.go b/cluster-autoscaler/core/scaleup/orchestrator/orchestrator_test.go index 6386b96120d6..b0470d9a899a 100644 --- a/cluster-autoscaler/core/scaleup/orchestrator/orchestrator_test.go +++ b/cluster-autoscaler/core/scaleup/orchestrator/orchestrator_test.go @@ -908,7 +908,7 @@ func runSimpleScaleUpTest(t *testing.T, config *ScaleUpTestConfig) *ScaleUpTestR extraPods[i] = buildTestPod(p) } podLister := kube_util.NewTestPodLister(pods) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) // setup node groups var provider *testprovider.TestCloudProvider @@ -1050,7 +1050,7 @@ func TestScaleUpUnhealthy(t *testing.T) { p2.Spec.NodeName = "n2" podLister := kube_util.NewTestPodLister([]*apiv1.Pod{p1, p2}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) provider := testprovider.NewTestCloudProvider(func(nodeGroup string, increase int) error { t.Fatalf("No expansion is expected, but increased %s by %d", nodeGroup, increase) @@ -1096,7 +1096,7 @@ func TestBinpackingLimiter(t *testing.T) { nodes := []*apiv1.Node{n1, n2} podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) provider := testprovider.NewTestCloudProvider(func(nodeGroup string, increase int) error { return nil @@ -1151,7 +1151,7 @@ func TestScaleUpNoHelp(t *testing.T) { p1.Spec.NodeName = "n1" podLister := kube_util.NewTestPodLister([]*apiv1.Pod{p1}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) provider := testprovider.NewTestCloudProvider(func(nodeGroup string, increase int) error { t.Fatalf("No expansion is expected") @@ -1320,7 +1320,7 @@ func TestComputeSimilarNodeGroups(t *testing.T) { nodeGroupSetProcessor.similarNodeGroups = append(nodeGroupSetProcessor.similarNodeGroups, provider.GetNodeGroup(ng)) } - listers := kube_util.NewListerRegistry(nil, nil, kube_util.NewTestPodLister(nil), nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, kube_util.NewTestPodLister(nil), nil, nil, nil, nil, nil, nil) ctx, err := NewScaleTestAutoscalingContext(config.AutoscalingOptions{BalanceSimilarNodeGroups: tc.balancingEnabled}, &fake.Clientset{}, listers, provider, nil, nil) assert.NoError(t, err) @@ -1377,7 +1377,7 @@ func TestScaleUpBalanceGroups(t *testing.T) { } podLister := kube_util.NewTestPodLister(podList) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) options := config.AutoscalingOptions{ EstimatorName: estimator.BinpackingEstimatorName, @@ -1447,7 +1447,7 @@ func TestScaleUpAutoprovisionedNodeGroup(t *testing.T) { MaxAutoprovisionedNodeGroupCount: 10, } podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, listers, provider, nil, nil) assert.NoError(t, err) @@ -1502,7 +1502,7 @@ func TestScaleUpBalanceAutoprovisionedNodeGroups(t *testing.T) { MaxAutoprovisionedNodeGroupCount: 10, } podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) context, err := NewScaleTestAutoscalingContext(options, fakeClient, listers, provider, nil, nil) assert.NoError(t, err) @@ -1532,7 +1532,7 @@ func TestScaleUpBalanceAutoprovisionedNodeGroups(t *testing.T) { func TestScaleUpToMeetNodeGroupMinSize(t *testing.T) { podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) provider := testprovider.NewTestCloudProvider(func(nodeGroup string, increase int) error { assert.Equal(t, "ng1", nodeGroup) assert.Equal(t, 1, increase) diff --git a/cluster-autoscaler/core/scaleup/resource/manager_test.go b/cluster-autoscaler/core/scaleup/resource/manager_test.go index 1ac13a2914cb..dfe7b9415770 100644 --- a/cluster-autoscaler/core/scaleup/resource/manager_test.go +++ b/cluster-autoscaler/core/scaleup/resource/manager_test.go @@ -261,7 +261,7 @@ func newCloudProvider(t *testing.T, cpu, mem int64) *testprovider.TestCloudProvi func newContext(t *testing.T, provider cloudprovider.CloudProvider) context.AutoscalingContext { podLister := kube_util.NewTestPodLister([]*corev1.Pod{}) - listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + listers := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) context, err := test.NewScaleTestAutoscalingContext(config.AutoscalingOptions{}, &fake.Clientset{}, listers, provider, nil, nil) assert.NoError(t, err) return context diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index a16c99a4529e..c4bca6969b9b 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -30,6 +30,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaleup" orchestrator "k8s.io/autoscaler/cluster-autoscaler/core/scaleup/orchestrator" "k8s.io/autoscaler/cluster-autoscaler/debuggingsnapshot" + kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" "k8s.io/autoscaler/cluster-autoscaler/utils/taints" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" @@ -281,7 +282,7 @@ func (a *StaticAutoscaler) RunOnce(currentTime time.Time) caerrors.AutoscalerErr a.DebuggingSnapshotter.StartDataCollection() defer a.DebuggingSnapshotter.Flush() - scheduledAndUnschedulablePodLister := a.ScheduledAndUnschedulablePodLister() + podLister := a.AllPodLister() autoscalingContext := a.AutoscalingContext klog.V(4).Info("Starting main loop") @@ -300,11 +301,12 @@ func (a *StaticAutoscaler) RunOnce(currentTime time.Time) caerrors.AutoscalerErr return err } - originalScheduledPods, unschedulablePods, err := scheduledAndUnschedulablePodLister.List() + pods, err := podLister.List() if err != nil { - klog.Errorf("Failed to list scheduled and unschedulable pods: %v", err) + klog.Errorf("Failed to list pods: %v", err) return caerrors.ToAutoscalerError(caerrors.ApiCallError, err) } + originalScheduledPods, unschedulablePods := kube_util.ScheduledPods(pods), kube_util.UnschedulablePods(pods) // Update cluster resource usage metrics coresTotal, memoryTotal := calculateCoresMemoryTotal(allNodes, currentTime) diff --git a/cluster-autoscaler/core/static_autoscaler_test.go b/cluster-autoscaler/core/static_autoscaler_test.go index 2e4f740a8159..ace16dde111e 100644 --- a/cluster-autoscaler/core/static_autoscaler_test.go +++ b/cluster-autoscaler/core/static_autoscaler_test.go @@ -76,15 +76,6 @@ func (l *podListerMock) List() ([]*apiv1.Pod, error) { return args.Get(0).([]*apiv1.Pod), args.Error(1) } -type scheduledAndUnschedulablePodListerMock struct { - mock.Mock -} - -func (l *scheduledAndUnschedulablePodListerMock) List() (scheduledPods []*apiv1.Pod, unschedulablePods []*apiv1.Pod, err error) { - args := l.Called() - return args.Get(0).([]*apiv1.Pod), args.Get(1).([]*apiv1.Pod), args.Error(2) -} - type podDisruptionBudgetListerMock struct { mock.Mock } @@ -166,8 +157,7 @@ func setUpScaleDownActuator(ctx *context.AutoscalingContext, options config.Auto func TestStaticAutoscalerRunOnce(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -183,7 +173,7 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { p1 := BuildTestPod("p1", 600, 100) p1.Spec.NodeName = "n1" - p2 := BuildTestPod("p2", 600, 100) + p2 := BuildTestPod("p2", 600, 100, MarkUnschedulable()) tn := BuildTestNode("tn", 1000, 1000) tni := schedulerframework.NewNodeInfo() @@ -227,8 +217,7 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { setUpScaleDownActuator(&context, options) - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -257,21 +246,18 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { // MaxNodesTotal reached. readyNodeLister.SetNodes([]*apiv1.Node{n1}) allNodeLister.SetNodes([]*apiv1.Node{n1}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() err = autoscaler.RunOnce(time.Now()) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, - podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Scale up. readyNodeLister.SetNodes([]*apiv1.Node{n1}) allNodeLister.SetNodes([]*apiv1.Node{n1}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() onScaleUpMock.On("ScaleUp", "ng1", 1).Return(nil).Once() @@ -279,14 +265,13 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { context.MaxNodesTotal = 10 err = autoscaler.RunOnce(time.Now().Add(time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Mark unneeded nodes. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() @@ -295,14 +280,13 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(2 * time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Scale down. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Twice() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1}, nil).Times(3) daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Twice() onScaleDownMock.On("ScaleDown", "ng1", "n2").Return(nil).Once() @@ -310,14 +294,13 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(3 * time.Hour)) waitForDeleteToFinish(t, deleteFinished) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Mark unregistered nodes. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() @@ -326,14 +309,13 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(4 * time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Remove unregistered nodes. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() onScaleDownMock.On("ScaleDown", "ng2", "n3").Return(nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() @@ -341,14 +323,13 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(5 * time.Hour)) waitForDeleteToFinish(t, deleteFinished) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Scale up to node gorup min size. readyNodeLister.SetNodes([]*apiv1.Node{n4}) allNodeLister.SetNodes([]*apiv1.Node{n4}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{}, nil) - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{}, []*apiv1.Pod{}, nil) + allPodListerMock.On("List").Return([]*apiv1.Pod{}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil) podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil) onScaleUpMock.On("ScaleUp", "ng3", 2).Return(nil).Once() // 2 new nodes are supposed to be scaled up. @@ -364,8 +345,7 @@ func TestStaticAutoscalerRunOnce(t *testing.T) { func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -383,7 +363,7 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { p1 := BuildTestPod("p1", 100, 100) p1.Spec.NodeName = "n1" - p2 := BuildTestPod("p2", 600, 100) + p2 := BuildTestPod("p2", 600, 100, MarkUnschedulable()) tn1 := BuildTestNode("tn1", 100, 1000) SetNodeReadyState(tn1, true, time.Now()) @@ -445,8 +425,8 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { processors.NodeGroupManager = nodeGroupManager processors.NodeGroupListProcessor = nodeGroupListProcessor - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, + podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -475,8 +455,7 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { // Scale up. readyNodeLister.SetNodes([]*apiv1.Node{n1}) allNodeLister.SetNodes([]*apiv1.Node{n1}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() onNodeGroupCreateMock.On("Create", "autoprovisioned-TN2").Return(nil).Once() @@ -484,7 +463,7 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Fix target size. @@ -493,8 +472,7 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { // Remove autoprovisioned node group and mark unneeded nodes. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1}, nil).Twice() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() onNodeGroupDeleteMock.On("Delete", "autoprovisioned-TN1").Return(nil).Once() @@ -504,14 +482,13 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(1 * time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Scale down. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Twice() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1}, nil).Times(3) podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() onNodeGroupDeleteMock.On("Delete", "autoprovisioned-"+ @@ -521,15 +498,14 @@ func TestStaticAutoscalerRunOnceWithAutoprovisionedEnabled(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(2 * time.Hour)) waitForDeleteToFinish(t, deleteFinished) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) } func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -546,7 +522,7 @@ func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { p1 := BuildTestPod("p1", 600, 100) p1.Spec.NodeName = "n1" - p2 := BuildTestPod("p2", 600, 100) + p2 := BuildTestPod("p2", 600, 100, MarkUnschedulable()) provider := testprovider.NewTestCloudProvider( func(id string, delta int) error { @@ -589,8 +565,8 @@ func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { setUpScaleDownActuator(&context, options) - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, + podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -628,15 +604,14 @@ func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { // Scale up. readyNodeLister.SetNodes([]*apiv1.Node{n1}) allNodeLister.SetNodes([]*apiv1.Node{n1}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() onScaleUpMock.On("ScaleUp", "ng1", 1).Return(nil).Once() err = autoscaler.RunOnce(later.Add(time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Remove broken node after going over min size @@ -645,8 +620,7 @@ func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1}, []*apiv1.Pod{p2}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2}, nil).Twice() onScaleDownMock.On("ScaleDown", "ng1", "broken").Return(nil).Once() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() @@ -654,15 +628,14 @@ func TestStaticAutoscalerRunOnceWithALongUnregisteredNode(t *testing.T) { err = autoscaler.RunOnce(later.Add(2 * time.Hour)) waitForDeleteToFinish(t, deleteFinished) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) } func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -696,16 +669,16 @@ func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { p3.Spec.NodeName = "n2" p3.Spec.Priority = &priority100 - p4 := BuildTestPod("p4", 500, 0) + p4 := BuildTestPod("p4", 500, 0, MarkUnschedulable()) p4.OwnerReferences = ownerRef p4.Spec.Priority = &priority100 - p5 := BuildTestPod("p5", 800, 0) + p5 := BuildTestPod("p5", 800, 0, MarkUnschedulable()) p5.OwnerReferences = ownerRef p5.Spec.Priority = &priority100 p5.Status.NominatedNodeName = "n3" - p6 := BuildTestPod("p6", 1000, 0) + p6 := BuildTestPod("p6", 1000, 0, MarkUnschedulable()) p6.OwnerReferences = ownerRef p6.Spec.Priority = &priority100 @@ -749,8 +722,8 @@ func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { setUpScaleDownActuator(&context, options) - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, + podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -779,22 +752,20 @@ func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { // Scale up readyNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3}, []*apiv1.Pod{p4, p5, p6}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2, p3, p4, p5, p6}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() onScaleUpMock.On("ScaleUp", "ng2", 1).Return(nil).Once() err = autoscaler.RunOnce(time.Now()) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Mark unneeded nodes. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3}, []*apiv1.Pod{p4, p5}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2, p3, p4, p5}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() @@ -802,14 +773,13 @@ func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(2 * time.Hour)) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) // Scale down. readyNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2, n3}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3, p4}, nil).Twice() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p1, p2, p3, p4}, []*apiv1.Pod{p5}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2, p3, p4, p5}, nil).Times(3) daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Twice() onScaleDownMock.On("ScaleDown", "ng1", "n1").Return(nil).Once() @@ -819,15 +789,14 @@ func TestStaticAutoscalerRunOncePodsWithPriorities(t *testing.T) { err = autoscaler.RunOnce(time.Now().Add(3 * time.Hour)) waitForDeleteToFinish(t, deleteFinished) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) } func TestStaticAutoscalerRunOnceWithFilteringOnBinPackingEstimator(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -884,8 +853,8 @@ func TestStaticAutoscalerRunOnceWithFilteringOnBinPackingEstimator(t *testing.T) setUpScaleDownActuator(&context, options) - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, + podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -911,23 +880,21 @@ func TestStaticAutoscalerRunOnceWithFilteringOnBinPackingEstimator(t *testing.T) // Scale up readyNodeLister.SetNodes([]*apiv1.Node{n1, n2}) allNodeLister.SetNodes([]*apiv1.Node{n1, n2}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p3, p4}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p3, p4}, []*apiv1.Pod{p1}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p3, p4}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() err = autoscaler.RunOnce(time.Now()) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) } func TestStaticAutoscalerRunOnceWithFilteringOnUpcomingNodesEnabledNoScaleUp(t *testing.T) { readyNodeLister := kubernetes.NewTestNodeLister(nil) allNodeLister := kubernetes.NewTestNodeLister(nil) - scheduledPodMock := &podListerMock{} - scheduledAndUnschedulablePodMock := &scheduledAndUnschedulablePodListerMock{} + allPodListerMock := &podListerMock{} podDisruptionBudgetListerMock := &podDisruptionBudgetListerMock{} daemonSetListerMock := &daemonSetListerMock{} onScaleUpMock := &onScaleUpMock{} @@ -984,8 +951,8 @@ func TestStaticAutoscalerRunOnceWithFilteringOnUpcomingNodesEnabledNoScaleUp(t * setUpScaleDownActuator(&context, options) - listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodMock, - scheduledAndUnschedulablePodMock, podDisruptionBudgetListerMock, daemonSetListerMock, + listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, allPodListerMock, + podDisruptionBudgetListerMock, daemonSetListerMock, nil, nil, nil, nil) context.ListerRegistry = listerRegistry @@ -1011,15 +978,14 @@ func TestStaticAutoscalerRunOnceWithFilteringOnUpcomingNodesEnabledNoScaleUp(t * // Scale up readyNodeLister.SetNodes([]*apiv1.Node{n2, n3}) allNodeLister.SetNodes([]*apiv1.Node{n2, n3}) - scheduledPodMock.On("List").Return([]*apiv1.Pod{p2, p3}, nil).Once() - scheduledAndUnschedulablePodMock.On("List").Return([]*apiv1.Pod{p2, p3}, []*apiv1.Pod{p1}, nil).Once() + allPodListerMock.On("List").Return([]*apiv1.Pod{p1, p2, p3}, nil).Twice() daemonSetListerMock.On("List", labels.Everything()).Return([]*appsv1.DaemonSet{}, nil).Once() podDisruptionBudgetListerMock.On("List").Return([]*policyv1.PodDisruptionBudget{}, nil).Once() err = autoscaler.RunOnce(time.Now()) assert.NoError(t, err) - mock.AssertExpectationsForObjects(t, scheduledPodMock, scheduledAndUnschedulablePodMock, + mock.AssertExpectationsForObjects(t, allPodListerMock, podDisruptionBudgetListerMock, daemonSetListerMock, onScaleUpMock, onScaleDownMock) } @@ -1478,7 +1444,7 @@ func TestStaticAutoscalerUpcomingScaleDownCandidates(t *testing.T) { daemonSetLister, err := kubernetes.NewTestDaemonSetLister(nil) assert.NoError(t, err) listerRegistry := kube_util.NewListerRegistry(allNodeLister, readyNodeLister, - kubernetes.NewTestPodLister(nil), kubernetes.NewTestScheduledAndUnschedulablePodLister(nil, nil), + kubernetes.NewTestPodLister(nil), kubernetes.NewTestPodDisruptionBudgetLister(nil), daemonSetLister, nil, nil, nil, nil) // Create context with minimal options that guarantee we reach the tested logic. diff --git a/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor.go b/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor.go index a491a3bea41b..b1f310e47625 100644 --- a/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor.go +++ b/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor.go @@ -195,12 +195,13 @@ func (p *MixedTemplateNodeInfoProvider) Process(ctx *context.AutoscalingContext, } func getPodsForNodes(listers kube_util.ListerRegistry) (map[string][]*apiv1.Pod, errors.AutoscalerError) { - pods, err := listers.ScheduledPodLister().List() + pods, err := listers.AllPodLister().List() if err != nil { return nil, errors.ToAutoscalerError(errors.ApiCallError, err) } + scheduledPods := kube_util.ScheduledPods(pods) podsForNodes := map[string][]*apiv1.Pod{} - for _, p := range pods { + for _, p := range scheduledPods { podsForNodes[p.Spec.NodeName] = append(podsForNodes[p.Spec.NodeName], p) } return podsForNodes, nil diff --git a/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor_test.go b/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor_test.go index a201480ecb6f..6b4d1afd34ac 100644 --- a/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor_test.go +++ b/cluster-autoscaler/processors/nodeinfosprovider/mixed_nodeinfos_processor_test.go @@ -74,7 +74,7 @@ func TestGetNodeInfosForGroups(t *testing.T) { provider2.AddNodeGroup("ng6", 1, 10, 1) // Nodegroup without nodes. podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) predicateChecker, err := predicatechecker.NewTestPredicateChecker() assert.NoError(t, err) @@ -159,7 +159,7 @@ func TestGetNodeInfosForGroupsCache(t *testing.T) { provider1.AddNode("ng4", ready6) podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) predicateChecker, err := predicatechecker.NewTestPredicateChecker() assert.NoError(t, err) @@ -249,7 +249,7 @@ func TestGetNodeInfosCacheExpired(t *testing.T) { // Cloud provider with TemplateNodeInfo not implemented. provider := testprovider.NewTestAutoprovisioningCloudProvider(nil, nil, nil, nil, nil, nil) podLister := kube_util.NewTestPodLister([]*apiv1.Pod{}) - registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil, nil) + registry := kube_util.NewListerRegistry(nil, nil, podLister, nil, nil, nil, nil, nil, nil) predicateChecker, err := predicatechecker.NewTestPredicateChecker() assert.NoError(t, err) diff --git a/cluster-autoscaler/simulator/cluster_test.go b/cluster-autoscaler/simulator/cluster_test.go index 74cf2ff09f06..9a8b745466be 100644 --- a/cluster-autoscaler/simulator/cluster_test.go +++ b/cluster-autoscaler/simulator/cluster_test.go @@ -113,7 +113,7 @@ func TestFindNodesToRemove(t *testing.T) { } rsLister, err := kube_util.NewTestReplicaSetLister(replicaSets) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, nil, rsLister, nil) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, nil, nil, rsLister, nil) ownerRefs := GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", "") diff --git a/cluster-autoscaler/utils/drain/drain_test.go b/cluster-autoscaler/utils/drain/drain_test.go index f2975818c7be..52ce4949a54e 100644 --- a/cluster-autoscaler/utils/drain/drain_test.go +++ b/cluster-autoscaler/utils/drain/drain_test.go @@ -974,7 +974,7 @@ func TestDrain(t *testing.T) { ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) pods, daemonSetPods, blockingPod, err := GetPodsForDeletionOnNodeDrain(test.pods, test.pdbs, true, true, test.skipNodesWithCustomControllerPods, registry, 0, testTime) diff --git a/cluster-autoscaler/utils/kubernetes/listers.go b/cluster-autoscaler/utils/kubernetes/listers.go index 52e8ee942fdf..5311fd2fc89a 100644 --- a/cluster-autoscaler/utils/kubernetes/listers.go +++ b/cluster-autoscaler/utils/kubernetes/listers.go @@ -38,8 +38,7 @@ import ( type ListerRegistry interface { AllNodeLister() NodeLister ReadyNodeLister() NodeLister - ScheduledPodLister() PodLister - ScheduledAndUnschedulablePodLister() ScheduledAndUnschedulablePodLister + AllPodLister() PodLister PodDisruptionBudgetLister() PodDisruptionBudgetLister DaemonSetLister() v1appslister.DaemonSetLister ReplicationControllerLister() v1lister.ReplicationControllerLister @@ -49,42 +48,38 @@ type ListerRegistry interface { } type listerRegistryImpl struct { - allNodeLister NodeLister - readyNodeLister NodeLister - scheduledPodLister PodLister - scheduledAndUnschedulablePodLister ScheduledAndUnschedulablePodLister - podDisruptionBudgetLister PodDisruptionBudgetLister - daemonSetLister v1appslister.DaemonSetLister - replicationControllerLister v1lister.ReplicationControllerLister - jobLister v1batchlister.JobLister - replicaSetLister v1appslister.ReplicaSetLister - statefulSetLister v1appslister.StatefulSetLister + allNodeLister NodeLister + readyNodeLister NodeLister + allPodLister PodLister + podDisruptionBudgetLister PodDisruptionBudgetLister + daemonSetLister v1appslister.DaemonSetLister + replicationControllerLister v1lister.ReplicationControllerLister + jobLister v1batchlister.JobLister + replicaSetLister v1appslister.ReplicaSetLister + statefulSetLister v1appslister.StatefulSetLister } // NewListerRegistry returns a registry providing various listers to list pods or nodes matching conditions -func NewListerRegistry(allNode NodeLister, readyNode NodeLister, scheduledPod PodLister, - scheduledAndUnschedulablePodLister ScheduledAndUnschedulablePodLister, podDisruptionBudgetLister PodDisruptionBudgetLister, +func NewListerRegistry(allNode NodeLister, readyNode NodeLister, allPodLister PodLister, podDisruptionBudgetLister PodDisruptionBudgetLister, daemonSetLister v1appslister.DaemonSetLister, replicationControllerLister v1lister.ReplicationControllerLister, jobLister v1batchlister.JobLister, replicaSetLister v1appslister.ReplicaSetLister, statefulSetLister v1appslister.StatefulSetLister) ListerRegistry { return listerRegistryImpl{ - allNodeLister: allNode, - readyNodeLister: readyNode, - scheduledPodLister: scheduledPod, - scheduledAndUnschedulablePodLister: scheduledAndUnschedulablePodLister, - podDisruptionBudgetLister: podDisruptionBudgetLister, - daemonSetLister: daemonSetLister, - replicationControllerLister: replicationControllerLister, - jobLister: jobLister, - replicaSetLister: replicaSetLister, - statefulSetLister: statefulSetLister, + allNodeLister: allNode, + readyNodeLister: readyNode, + allPodLister: allPodLister, + podDisruptionBudgetLister: podDisruptionBudgetLister, + daemonSetLister: daemonSetLister, + replicationControllerLister: replicationControllerLister, + jobLister: jobLister, + replicaSetLister: replicaSetLister, + statefulSetLister: statefulSetLister, } } // NewListerRegistryWithDefaultListers returns a registry filled with listers of the default implementations func NewListerRegistryWithDefaultListers(kubeClient client.Interface, stopChannel <-chan struct{}) ListerRegistry { - scheduledAndUnschedulablePodLister := NewScheduledAndUnschedulablePodLister(kubeClient, stopChannel) - scheduledPodLister := NewScheduledPodLister(kubeClient, stopChannel) + allPodLister := NewAllPodLister(kubeClient, stopChannel) readyNodeLister := NewReadyNodeLister(kubeClient, stopChannel) allNodeLister := NewAllNodeLister(kubeClient, stopChannel) podDisruptionBudgetLister := NewPodDisruptionBudgetLister(kubeClient, stopChannel) @@ -93,9 +88,14 @@ func NewListerRegistryWithDefaultListers(kubeClient client.Interface, stopChanne jobLister := NewJobLister(kubeClient, stopChannel) replicaSetLister := NewReplicaSetLister(kubeClient, stopChannel) statefulSetLister := NewStatefulSetLister(kubeClient, stopChannel) - return NewListerRegistry(allNodeLister, readyNodeLister, scheduledPodLister, - scheduledAndUnschedulablePodLister, podDisruptionBudgetLister, daemonSetLister, - replicationControllerLister, jobLister, replicaSetLister, statefulSetLister) + return NewListerRegistry(allNodeLister, readyNodeLister, allPodLister, + podDisruptionBudgetLister, daemonSetLister, replicationControllerLister, + jobLister, replicaSetLister, statefulSetLister) +} + +// AllPodLister returns the AllPodLister registered to this registry +func (r listerRegistryImpl) AllPodLister() PodLister { + return r.allPodLister } // AllNodeLister returns the AllNodeLister registered to this registry @@ -108,16 +108,6 @@ func (r listerRegistryImpl) ReadyNodeLister() NodeLister { return r.readyNodeLister } -// ScheduledPodLister returns the ScheduledPodLister registered to this registry -func (r listerRegistryImpl) ScheduledPodLister() PodLister { - return r.scheduledPodLister -} - -// ScheduledAndUnschedulablePodLister returns the ScheduledAndUnschedulablePodLister registered to this registry -func (r listerRegistryImpl) ScheduledAndUnschedulablePodLister() ScheduledAndUnschedulablePodLister { - return r.scheduledAndUnschedulablePodLister -} - // PodDisruptionBudgetLister returns the podDisruptionBudgetLister registered to this registry func (r listerRegistryImpl) PodDisruptionBudgetLister() PodDisruptionBudgetLister { return r.podDisruptionBudgetLister @@ -148,69 +138,52 @@ func (r listerRegistryImpl) StatefulSetLister() v1appslister.StatefulSetLister { return r.statefulSetLister } -// PodLister lists pods. +// PodLister lists all pods. +// To filter out the scheduled or unschedulable pods the helper methods ScheduledPods and UnschedulablePods should be used. type PodLister interface { List() ([]*apiv1.Pod, error) } -// ScheduledPodLister lists scheduled pods. -type ScheduledPodLister struct { - podLister v1lister.PodLister -} - -// List returns all scheduled pods. -func (lister *ScheduledPodLister) List() ([]*apiv1.Pod, error) { - return lister.podLister.List(labels.Everything()) -} - -// NewScheduledPodLister builds ScheduledPodLister -func NewScheduledPodLister(kubeClient client.Interface, stopchannel <-chan struct{}) PodLister { - // watch unscheduled pods - selector := fields.ParseSelectorOrDie("spec.nodeName!=" + "" + ",status.phase!=" + - string(apiv1.PodSucceeded) + ",status.phase!=" + string(apiv1.PodFailed)) - podListWatch := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "pods", apiv1.NamespaceAll, selector) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(podListWatch, &apiv1.Pod{}, time.Hour) - podLister := v1lister.NewPodLister(store) - go reflector.Run(stopchannel) - - return &ScheduledPodLister{ - podLister: podLister, - } -} - -// ScheduledAndUnschedulablePodLister lists scheduled and unschedulable pods obtained at the same point in time. -type ScheduledAndUnschedulablePodLister interface { - List() (scheduledPods, unschedulablePods []*apiv1.Pod, err error) -} - -// ScheduledAndUnschedulablePodLister lists scheduled and unschedulable pods. -type scheduledAndUnschedulablePodLister struct { - podLister v1lister.PodLister -} - -// List returns all scheduled and unschedulable pods. -func (lister *scheduledAndUnschedulablePodLister) List() (scheduledPods []*apiv1.Pod, unschedulablePods []*apiv1.Pod, err error) { - allPods, err := lister.podLister.List(labels.Everything()) - if err != nil { - return scheduledPods, unschedulablePods, err - } +// ScheduledPods is a helper method that returns all scheduled pods from given pod list. +func ScheduledPods(allPods []*apiv1.Pod) []*apiv1.Pod { + var scheduledPods []*apiv1.Pod for _, pod := range allPods { if pod.Spec.NodeName != "" { scheduledPods = append(scheduledPods, pod) continue } - _, condition := podv1.GetPodCondition(&pod.Status, apiv1.PodScheduled) - if condition != nil && condition.Status == apiv1.ConditionFalse && condition.Reason == apiv1.PodReasonUnschedulable { - if pod.GetDeletionTimestamp() == nil { - unschedulablePods = append(unschedulablePods, pod) + } + return scheduledPods +} + +// UnschedulablePods is a helper method that returns all unschedulable pods from given pod list. +func UnschedulablePods(allPods []*apiv1.Pod) []*apiv1.Pod { + var unschedulablePods []*apiv1.Pod + for _, pod := range allPods { + if pod.Spec.NodeName == "" { + _, condition := podv1.GetPodCondition(&pod.Status, apiv1.PodScheduled) + if condition != nil && condition.Status == apiv1.ConditionFalse && condition.Reason == apiv1.PodReasonUnschedulable { + if pod.GetDeletionTimestamp() == nil { + unschedulablePods = append(unschedulablePods, pod) + } } } } - return scheduledPods, unschedulablePods, nil + return unschedulablePods +} + +// AllPodLister lists all pods. +type AllPodLister struct { + podLister v1lister.PodLister +} + +// List returns all scheduled pods. +func (lister *AllPodLister) List() ([]*apiv1.Pod, error) { + return lister.podLister.List(labels.Everything()) } -// NewScheduledAndUnschedulablePodLister builds ScheduledAndUnschedulablePodLister -func NewScheduledAndUnschedulablePodLister(kubeClient client.Interface, stopchannel <-chan struct{}) ScheduledAndUnschedulablePodLister { +// NewAllPodLister builds AllPodLister +func NewAllPodLister(kubeClient client.Interface, stopchannel <-chan struct{}) PodLister { selector := fields.ParseSelectorOrDie("status.phase!=" + string(apiv1.PodSucceeded) + ",status.phase!=" + string(apiv1.PodFailed)) podListWatch := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "pods", apiv1.NamespaceAll, selector) @@ -218,7 +191,7 @@ func NewScheduledAndUnschedulablePodLister(kubeClient client.Interface, stopchan podLister := v1lister.NewPodLister(store) go reflector.Run(stopchannel) - return &scheduledAndUnschedulablePodLister{ + return &AllPodLister{ podLister: podLister, } } diff --git a/cluster-autoscaler/utils/kubernetes/testlisters.go b/cluster-autoscaler/utils/kubernetes/testlisters.go index 236d79b0230f..571298484a6c 100644 --- a/cluster-autoscaler/utils/kubernetes/testlisters.go +++ b/cluster-autoscaler/utils/kubernetes/testlisters.go @@ -44,25 +44,6 @@ func NewTestPodLister(pods []*apiv1.Pod) PodLister { return TestPodLister{pods: pods} } -// TestScheduledAndUnschedulablePodLister is used in tests involving scheduledAndUnschedulablePodListers -type TestScheduledAndUnschedulablePodLister struct { - scheduledPods []*apiv1.Pod - unschedulablePods []*apiv1.Pod -} - -// List returns all scheduled and unschedulable pods in test lister. -func (lister TestScheduledAndUnschedulablePodLister) List() (scheduledPods []*apiv1.Pod, unschedulablePods []*apiv1.Pod, err error) { - return lister.scheduledPods, lister.unschedulablePods, nil -} - -// NewTestScheduledAndUnschedulablePodLister returns a lister that returns provided pods -func NewTestScheduledAndUnschedulablePodLister(scheduledPods []*apiv1.Pod, unschedulabePods []*apiv1.Pod) ScheduledAndUnschedulablePodLister { - return TestScheduledAndUnschedulablePodLister{ - scheduledPods: scheduledPods, - unschedulablePods: unschedulabePods, - } -} - // TestPodDisruptionBudgetLister is used in tests involving listers type TestPodDisruptionBudgetLister struct { pdbs []*policyv1.PodDisruptionBudget diff --git a/cluster-autoscaler/utils/test/test_utils.go b/cluster-autoscaler/utils/test/test_utils.go index 925fa056e6ca..c984c0a839ae 100644 --- a/cluster-autoscaler/utils/test/test_utils.go +++ b/cluster-autoscaler/utils/test/test_utils.go @@ -33,7 +33,7 @@ import ( ) // BuildTestPod creates a pod with specified resources. -func BuildTestPod(name string, cpu int64, mem int64) *apiv1.Pod { +func BuildTestPod(name string, cpu int64, mem int64, options ...func(*apiv1.Pod)) *apiv1.Pod { startTime := metav1.Unix(0, 0) pod := &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -63,10 +63,25 @@ func BuildTestPod(name string, cpu int64, mem int64) *apiv1.Pod { if mem >= 0 { pod.Spec.Containers[0].Resources.Requests[apiv1.ResourceMemory] = *resource.NewQuantity(mem, resource.DecimalSI) } - + for _, o := range options { + o(pod) + } return pod } +// MarkUnschedulable marks pod as unschedulable. +func MarkUnschedulable() func(*apiv1.Pod) { + return func(pod *apiv1.Pod) { + pod.Status.Conditions = []apiv1.PodCondition{ + { + Status: apiv1.ConditionFalse, + Type: apiv1.PodScheduled, + Reason: apiv1.PodReasonUnschedulable, + }, + } + } +} + // BuildDSTestPod creates a DaemonSet pod with cpu and memory. func BuildDSTestPod(name string, cpu int64, mem int64) *apiv1.Pod { From 2af80b4acd531998b501038ef200e6993e82d47a Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Tue, 12 Sep 2023 07:35:38 -0700 Subject: [PATCH 042/125] Add type definition for the Provisoning Request CRD --- cluster-autoscaler/go.mod | 2 +- .../apis/provisioning.k8s.io/v1beta1/doc.go | 21 +++ .../provisioning.k8s.io/v1beta1/register.go | 56 ++++++ .../apis/provisioning.k8s.io/v1beta1/types.go | 168 ++++++++++++++++++ 4 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go create mode 100644 cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go create mode 100644 cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index ec3fdeb6fe69..07cc6ea29418 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -17,6 +17,7 @@ require ( github.com/gofrs/uuid v4.4.0+incompatible github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 + github.com/golang/protobuf v1.5.3 github.com/google/go-cmp v0.5.9 github.com/google/go-querystring v1.0.0 github.com/google/uuid v1.3.0 @@ -99,7 +100,6 @@ require ( github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/google/cadvisor v0.47.3 // indirect github.com/google/cel-go v0.16.0 // indirect github.com/google/gnostic-models v0.6.8 // indirect diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go new file mode 100644 index 000000000000..aa1e46ba67bf --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package v1beta1 contains definitions of Provisioning Request related objects. +// +k8s:deepcopy-gen=package +// +k8s:defaulter-gen=TypeMeta +// +groupName=provisioning.k8s.io +package v1beta1 diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go new file mode 100644 index 000000000000..11595d07db2c --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go @@ -0,0 +1,56 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package v1beta1 contains definitions of Provisioning Request related objects. +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + // GroupName represents the group name for ProvisioningRequest resources. + GroupName = "provisioning.k8s.io" + // GroupVersion represents the group name for ProvisioningRequest resources. + GroupVersion = "v1beta1" +) + +// SchemeGroupVersion represents the group version object for ProvisioningRequest scheme. +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: GroupVersion} + +var ( + // SchemeBuilder is the scheme builder for ProvisioningRequest. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is the func that applies all the stored functions to the scheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ProvisioningRequest{}, + &ProvisioningRequestList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go new file mode 100644 index 000000000000..41c88165bcae --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go @@ -0,0 +1,168 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package v1beta1 contains definitions of Provisioning Request related objects. +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +kubebuilder:storageversions +// +kubebuilder:resource:shortName=provreq;provreqs + +// ProvisioningRequest is a way to express additional capacity +// that we would like to provision in the cluster. Cluster Autoscaler +// can use this information in its calculations and signal if the capacity +// is available in the cluster or actively add capacity if needed. +// +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:metadata:annotations="api-approved.kubernetes.io=https://github.com/kubernetes/autoscaler/pull/5848" +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type ProvisioningRequest struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // + // +optional + metav1.ObjectMeta `json:"metadata,omitempty"` + // Spec contains specification of the ProvisioningRequest object. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // + // +kubebuilder:validation:Required + Spec ProvisioningRequestSpec `json:"spec"` + // Status of the ProvisioningRequest. CA constantly reconciles this field. + // + // +optional + Status ProvisioningRequestStatus `json:"status,omitempty"` +} + +// ProvisioningRequestList is a object for list of ProvisioningRequest. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type ProvisioningRequestList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // + // +optional + metav1.ListMeta `json:"metadata"` + // Items, list of ProvisioningRequest returned from API. + // + // +optional + Items []ProvisioningRequest `json:"items"` +} + +// ProvisioningRequestSpec is a specification of additional pods for which we +// would like to provision additional resources in the cluster. +type ProvisioningRequestSpec struct { + // PodSets lists groups of pods for which we would like to provision + // resources. + // + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinItems=1 + // +kubebuilder:validation:MaxItems=32 + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + PodSets []PodSet `json:"podSets"` + + // ProvisioningClass describes the different modes of provisioning the resources. + // Supported values: + // * check-capacity.kubernetes.io - check if current cluster state can fullfil this request, + // do not reserve the capacity. + // * atomic-scale-up.kubernetes.io - provision the resources in an atomic manner + // * ... - potential other classes that are specific to the cloud providers + // + // +kubebuilder:validation:Required + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + ProvisioningClass string `json:"provisioningClass"` + + // AdditionalParameters contains all other parameters custom classes may require. + // + // +optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + AdditionalParameters map[string]string `json:"additionalParameters"` +} + +// PodSet represents one group of pods for Provisioning Request to provision capacity. +type PodSet struct { + // PodTemplateRef is a reference to a PodTemplate object that is representing pods + // that will consume this reservation (must be within the same namespace). + // Users need to make sure that the fields relevant to scheduler (e.g. node selector tolerations) + // are consistent between this template and actual pods consuming the Provisioning Request. + // + // +kubebuilder:validation:Required + PodTemplateRef Reference `json:"podTemplateRef"` + // Count contains the number of pods that will be created with a given + // template. + // + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=16384 + Count int32 `json:"count"` +} + +// Reference represents reference to an object within the same namespace. +type Reference struct { + // Name of the referenced object. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names + // + // +kubebuilder:validation:Required + Name string `json:"name,omitempty"` +} + +// ProvisioningRequestStatus represents the status of the resource reservation. +type ProvisioningRequestStatus struct { + // Conditions represent the observations of a Provisioning Request's + // current state. Those will contain information whether the capacity + // was found/created or if there were any issues. The condition types + // may differ between different provisioning classes. + // + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + Conditions []metav1.Condition `json:"conditions"` + + // AdditionalStatus contains all other status values custom provisioning classes may require. + // + // +optional + // +kubebuilder:validation:MinProperties=64 + AdditionalStatus map[string]string `json:"additionalStatus"` +} + +// The following constants list all currently available Conditions Type values. +// See: https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Condition +const ( + // CapacityAvailable indicates that all of the requested resources were + // already available in the cluster. + CapacityAvailable string = "CapacityAvailable" + // Provisioned indicates that all of the requested resources were created + // and are available in the cluster. CA will set this condition when the + // VM creation finishes successfully. + Provisioned string = "Provisioned" + // Failed indicates that it is impossible to obtain resources to fulfill + // this ProvisioningRequest. + // Condition Reason and Message will contain more details about what failed. + Failed string = "Failed" +) + +const ( + // ProvisioningClassCheckCapacity denotes that CA will check if free capacity + // is available in the cluster. + ProvisioningClassCheckCapacity string = "check-capacity.kubernetes.io" + // ProvisioningClassAtomicScaleUp denotes that CA try to provision the capacity + // in an atomic manner. + ProvisioningClassAtomicScaleUp string = "atomic-scale-up.kubernetes.io" +) From 5442b8225c91f52d197fb6eea93632c6ed7e320b Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Wed, 13 Sep 2023 00:50:45 -0700 Subject: [PATCH 043/125] Add scripts go generate client for ProvReq and manifest. --- .gitignore | 2 + cluster-autoscaler/Makefile | 20 + cluster-autoscaler/go.mod | 6 + cluster-autoscaler/go.sum | 13 + cluster-autoscaler/hack/update-codegen.sh | 39 + .../apis/provisioning.k8s.io/v1beta1/types.go | 5 + .../go-task/slim-sprig/.editorconfig | 14 + .../go-task/slim-sprig/.gitattributes | 1 + .../github.com/go-task/slim-sprig/.gitignore | 2 + .../go-task/slim-sprig/CHANGELOG.md | 364 + .../github.com/go-task/slim-sprig/LICENSE.txt | 19 + .../github.com/go-task/slim-sprig/README.md | 73 + .../go-task/slim-sprig/Taskfile.yml | 12 + .../github.com/go-task/slim-sprig/crypto.go | 24 + .../github.com/go-task/slim-sprig/date.go | 152 + .../github.com/go-task/slim-sprig/defaults.go | 163 + .../github.com/go-task/slim-sprig/dict.go | 118 + .../github.com/go-task/slim-sprig/doc.go | 19 + .../go-task/slim-sprig/functions.go | 317 + .../github.com/go-task/slim-sprig/list.go | 464 + .../github.com/go-task/slim-sprig/network.go | 12 + .../github.com/go-task/slim-sprig/numeric.go | 228 + .../github.com/go-task/slim-sprig/reflect.go | 28 + .../github.com/go-task/slim-sprig/regex.go | 83 + .../github.com/go-task/slim-sprig/strings.go | 189 + .../github.com/go-task/slim-sprig/url.go | 66 + .../vendor/github.com/google/pprof/AUTHORS | 7 + .../github.com/google/pprof/CONTRIBUTORS | 16 + .../vendor/github.com/google/pprof/LICENSE | 202 + .../github.com/google/pprof/profile/encode.go | 567 + .../github.com/google/pprof/profile/filter.go | 270 + .../github.com/google/pprof/profile/index.go | 64 + .../pprof/profile/legacy_java_profile.go | 315 + .../google/pprof/profile/legacy_profile.go | 1225 + .../github.com/google/pprof/profile/merge.go | 481 + .../google/pprof/profile/profile.go | 805 + .../github.com/google/pprof/profile/proto.go | 370 + .../github.com/google/pprof/profile/prune.go | 178 + .../github.com/onsi/ginkgo/v2/.gitignore | 7 + .../github.com/onsi/ginkgo/v2/CHANGELOG.md | 804 + .../github.com/onsi/ginkgo/v2/CONTRIBUTING.md | 13 + .../vendor/github.com/onsi/ginkgo/v2/LICENSE | 20 + .../github.com/onsi/ginkgo/v2/README.md | 115 + .../github.com/onsi/ginkgo/v2/RELEASING.md | 23 + .../onsi/ginkgo/v2/config/deprecated.go | 69 + .../github.com/onsi/ginkgo/v2/core_dsl.go | 794 + .../onsi/ginkgo/v2/decorator_dsl.go | 143 + .../onsi/ginkgo/v2/deprecated_dsl.go | 135 + .../ginkgo/v2/formatter/colorable_others.go | 41 + .../ginkgo/v2/formatter/colorable_windows.go | 809 + .../onsi/ginkgo/v2/formatter/formatter.go | 230 + .../ginkgo/v2/ginkgo/build/build_command.go | 63 + .../onsi/ginkgo/v2/ginkgo/command/abort.go | 61 + .../onsi/ginkgo/v2/ginkgo/command/command.go | 50 + .../onsi/ginkgo/v2/ginkgo/command/program.go | 182 + .../ginkgo/generators/boostrap_templates.go | 48 + .../v2/ginkgo/generators/bootstrap_command.go | 133 + .../v2/ginkgo/generators/generate_command.go | 259 + .../ginkgo/generators/generate_templates.go | 41 + .../v2/ginkgo/generators/generators_common.go | 64 + .../onsi/ginkgo/v2/ginkgo/internal/compile.go | 161 + .../ginkgo/internal/profiles_and_reports.go | 237 + .../onsi/ginkgo/v2/ginkgo/internal/run.go | 355 + .../ginkgo/v2/ginkgo/internal/test_suite.go | 283 + .../onsi/ginkgo/v2/ginkgo/internal/utils.go | 86 + .../v2/ginkgo/internal/verify_version.go | 54 + .../ginkgo/v2/ginkgo/labels/labels_command.go | 123 + .../github.com/onsi/ginkgo/v2/ginkgo/main.go | 58 + .../onsi/ginkgo/v2/ginkgo/outline/ginkgo.go | 302 + .../onsi/ginkgo/v2/ginkgo/outline/import.go | 65 + .../onsi/ginkgo/v2/ginkgo/outline/outline.go | 110 + .../v2/ginkgo/outline/outline_command.go | 98 + .../onsi/ginkgo/v2/ginkgo/run/run_command.go | 232 + .../v2/ginkgo/unfocus/unfocus_command.go | 186 + .../onsi/ginkgo/v2/ginkgo/watch/delta.go | 22 + .../ginkgo/v2/ginkgo/watch/delta_tracker.go | 75 + .../ginkgo/v2/ginkgo/watch/dependencies.go | 92 + .../ginkgo/v2/ginkgo/watch/package_hash.go | 108 + .../ginkgo/v2/ginkgo/watch/package_hashes.go | 85 + .../onsi/ginkgo/v2/ginkgo/watch/suite.go | 87 + .../ginkgo/v2/ginkgo/watch/watch_command.go | 192 + .../onsi/ginkgo/v2/ginkgo_cli_dependencies.go | 8 + .../github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go | 94 + .../onsi/ginkgo/v2/internal/counter.go | 9 + .../onsi/ginkgo/v2/internal/failer.go | 99 + .../onsi/ginkgo/v2/internal/focus.go | 125 + .../onsi/ginkgo/v2/internal/global/init.go | 17 + .../onsi/ginkgo/v2/internal/group.go | 380 + .../interrupt_handler/interrupt_handler.go | 177 + .../sigquit_swallower_unix.go | 15 + .../sigquit_swallower_windows.go | 8 + .../onsi/ginkgo/v2/internal/node.go | 913 + .../onsi/ginkgo/v2/internal/ordering.go | 164 + .../ginkgo/v2/internal/output_interceptor.go | 250 + .../v2/internal/output_interceptor_unix.go | 73 + .../v2/internal/output_interceptor_win.go | 7 + .../parallel_support/client_server.go | 72 + .../internal/parallel_support/http_client.go | 169 + .../internal/parallel_support/http_server.go | 242 + .../internal/parallel_support/rpc_client.go | 136 + .../internal/parallel_support/rpc_server.go | 75 + .../parallel_support/server_handler.go | 234 + .../ginkgo/v2/internal/progress_report.go | 287 + .../ginkgo/v2/internal/progress_report_bsd.go | 11 + .../v2/internal/progress_report_unix.go | 11 + .../ginkgo/v2/internal/progress_report_win.go | 8 + .../v2/internal/progress_reporter_manager.go | 79 + .../onsi/ginkgo/v2/internal/report_entry.go | 39 + .../onsi/ginkgo/v2/internal/spec.go | 87 + .../onsi/ginkgo/v2/internal/spec_context.go | 47 + .../onsi/ginkgo/v2/internal/suite.go | 1015 + .../internal/testingtproxy/testing_t_proxy.go | 210 + .../onsi/ginkgo/v2/internal/tree.go | 77 + .../onsi/ginkgo/v2/internal/writer.go | 140 + .../ginkgo/v2/reporters/default_reporter.go | 759 + .../v2/reporters/deprecated_reporter.go | 149 + .../onsi/ginkgo/v2/reporters/json_report.go | 60 + .../onsi/ginkgo/v2/reporters/junit_report.go | 369 + .../onsi/ginkgo/v2/reporters/reporter.go | 29 + .../ginkgo/v2/reporters/teamcity_report.go | 101 + .../onsi/ginkgo/v2/reporting_dsl.go | 182 + .../github.com/onsi/ginkgo/v2/table_dsl.go | 309 + .../onsi/ginkgo/v2/types/code_location.go | 159 + .../github.com/onsi/ginkgo/v2/types/config.go | 757 + .../onsi/ginkgo/v2/types/deprecated_types.go | 141 + .../ginkgo/v2/types/deprecation_support.go | 177 + .../onsi/ginkgo/v2/types/enum_support.go | 43 + .../github.com/onsi/ginkgo/v2/types/errors.go | 630 + .../onsi/ginkgo/v2/types/file_filter.go | 106 + .../github.com/onsi/ginkgo/v2/types/flags.go | 489 + .../onsi/ginkgo/v2/types/label_filter.go | 358 + .../onsi/ginkgo/v2/types/report_entry.go | 190 + .../github.com/onsi/ginkgo/v2/types/types.go | 916 + .../onsi/ginkgo/v2/types/version.go | 3 + .../vendor/github.com/onsi/gomega/.gitignore | 7 + .../github.com/onsi/gomega/CHANGELOG.md | 583 + .../github.com/onsi/gomega/CONTRIBUTING.md | 14 + .../vendor/github.com/onsi/gomega/LICENSE | 20 + .../vendor/github.com/onsi/gomega/README.md | 21 + .../github.com/onsi/gomega/RELEASING.md | 23 + .../github.com/onsi/gomega/format/format.go | 506 + .../github.com/onsi/gomega/gomega_dsl.go | 537 + .../onsi/gomega/internal/assertion.go | 161 + .../onsi/gomega/internal/async_assertion.go | 571 + .../onsi/gomega/internal/duration_bundle.go | 71 + .../github.com/onsi/gomega/internal/gomega.go | 129 + .../onsi/gomega/internal/gutil/post_ioutil.go | 48 + .../gomega/internal/gutil/using_ioutil.go | 47 + .../gomega/internal/polling_signal_error.go | 106 + .../onsi/gomega/internal/vetoptdesc.go | 22 + .../vendor/github.com/onsi/gomega/matchers.go | 658 + .../github.com/onsi/gomega/matchers/and.go | 62 + .../matchers/assignable_to_type_of_matcher.go | 37 + .../onsi/gomega/matchers/attributes_slice.go | 14 + .../onsi/gomega/matchers/be_a_directory.go | 56 + .../onsi/gomega/matchers/be_a_regular_file.go | 56 + .../gomega/matchers/be_an_existing_file.go | 40 + .../onsi/gomega/matchers/be_closed_matcher.go | 48 + .../matchers/be_comparable_to_matcher.go | 49 + .../gomega/matchers/be_element_of_matcher.go | 43 + .../onsi/gomega/matchers/be_empty_matcher.go | 29 + .../matchers/be_equivalent_to_matcher.go | 36 + .../onsi/gomega/matchers/be_false_matcher.go | 28 + .../onsi/gomega/matchers/be_identical_to.go | 39 + .../onsi/gomega/matchers/be_key_of_matcher.go | 45 + .../onsi/gomega/matchers/be_nil_matcher.go | 20 + .../gomega/matchers/be_numerically_matcher.go | 134 + .../onsi/gomega/matchers/be_sent_matcher.go | 73 + .../gomega/matchers/be_temporally_matcher.go | 68 + .../onsi/gomega/matchers/be_true_matcher.go | 28 + .../onsi/gomega/matchers/be_zero_matcher.go | 28 + .../onsi/gomega/matchers/consist_of.go | 153 + .../matchers/contain_element_matcher.go | 174 + .../matchers/contain_elements_matcher.go | 44 + .../matchers/contain_substring_matcher.go | 40 + .../onsi/gomega/matchers/equal_matcher.go | 42 + .../onsi/gomega/matchers/have_cap_matcher.go | 30 + .../onsi/gomega/matchers/have_each_matcher.go | 65 + .../gomega/matchers/have_exact_elements.go | 83 + .../matchers/have_existing_field_matcher.go | 36 + .../onsi/gomega/matchers/have_field.go | 99 + .../gomega/matchers/have_http_body_matcher.go | 101 + .../have_http_header_with_value_matcher.go | 81 + .../matchers/have_http_status_matcher.go | 96 + .../onsi/gomega/matchers/have_key_matcher.go | 56 + .../matchers/have_key_with_value_matcher.go | 76 + .../onsi/gomega/matchers/have_len_matcher.go | 28 + .../gomega/matchers/have_occurred_matcher.go | 35 + .../gomega/matchers/have_prefix_matcher.go | 36 + .../gomega/matchers/have_suffix_matcher.go | 36 + .../onsi/gomega/matchers/have_value.go | 54 + .../gomega/matchers/match_error_matcher.go | 65 + .../gomega/matchers/match_json_matcher.go | 65 + .../gomega/matchers/match_regexp_matcher.go | 43 + .../onsi/gomega/matchers/match_xml_matcher.go | 134 + .../gomega/matchers/match_yaml_matcher.go | 76 + .../github.com/onsi/gomega/matchers/not.go | 29 + .../github.com/onsi/gomega/matchers/or.go | 66 + .../onsi/gomega/matchers/panic_matcher.go | 114 + .../onsi/gomega/matchers/receive_matcher.go | 130 + .../onsi/gomega/matchers/satisfy_matcher.go | 66 + .../matchers/semi_structured_data_support.go | 94 + .../onsi/gomega/matchers/succeed_matcher.go | 42 + .../goraph/bipartitegraph/bipartitegraph.go | 56 + .../bipartitegraph/bipartitegraphmatching.go | 164 + .../matchers/support/goraph/edge/edge.go | 61 + .../matchers/support/goraph/node/node.go | 8 + .../matchers/support/goraph/util/util.go | 7 + .../onsi/gomega/matchers/type_support.go | 182 + .../onsi/gomega/matchers/with_transform.go | 90 + .../github.com/onsi/gomega/types/types.go | 93 + .../x/mod/internal/lazyregexp/lazyre.go | 78 + .../vendor/golang.org/x/mod/module/module.go | 841 + .../vendor/golang.org/x/mod/module/pseudo.go | 250 + .../golang.org/x/net/html/charset/charset.go | 257 + .../x/text/encoding/charmap/charmap.go | 249 + .../x/text/encoding/charmap/tables.go | 7410 +++ .../x/text/encoding/htmlindex/htmlindex.go | 86 + .../x/text/encoding/htmlindex/map.go | 105 + .../x/text/encoding/htmlindex/tables.go | 362 + .../x/text/encoding/japanese/all.go | 12 + .../x/text/encoding/japanese/eucjp.go | 225 + .../x/text/encoding/japanese/iso2022jp.go | 299 + .../x/text/encoding/japanese/shiftjis.go | 189 + .../x/text/encoding/japanese/tables.go | 26971 ++++++++++ .../x/text/encoding/korean/euckr.go | 177 + .../x/text/encoding/korean/tables.go | 34152 ++++++++++++ .../x/text/encoding/simplifiedchinese/all.go | 12 + .../x/text/encoding/simplifiedchinese/gbk.go | 273 + .../encoding/simplifiedchinese/hzgb2312.go | 245 + .../text/encoding/simplifiedchinese/tables.go | 43999 ++++++++++++++++ .../text/encoding/traditionalchinese/big5.go | 199 + .../encoding/traditionalchinese/tables.go | 37142 +++++++++++++ .../x/tools/go/ast/astutil/enclosing.go | 636 + .../x/tools/go/ast/astutil/imports.go | 485 + .../x/tools/go/ast/astutil/rewrite.go | 488 + .../golang.org/x/tools/go/ast/astutil/util.go | 18 + .../x/tools/go/ast/inspector/inspector.go | 218 + .../x/tools/go/ast/inspector/typeof.go | 229 + .../golang.org/x/tools/imports/forward.go | 77 + .../x/tools/internal/fastwalk/fastwalk.go | 196 + .../internal/fastwalk/fastwalk_darwin.go | 119 + .../fastwalk/fastwalk_dirent_fileno.go | 14 + .../internal/fastwalk/fastwalk_dirent_ino.go | 15 + .../fastwalk/fastwalk_dirent_namlen_bsd.go | 14 + .../fastwalk/fastwalk_dirent_namlen_linux.go | 29 + .../internal/fastwalk/fastwalk_portable.go | 38 + .../tools/internal/fastwalk/fastwalk_unix.go | 153 + .../x/tools/internal/gopathwalk/walk.go | 254 + .../x/tools/internal/imports/fix.go | 1738 + .../x/tools/internal/imports/imports.go | 351 + .../x/tools/internal/imports/mod.go | 716 + .../x/tools/internal/imports/mod_cache.go | 236 + .../x/tools/internal/imports/sortimports.go | 297 + .../x/tools/internal/imports/zstdlib.go | 11115 ++++ .../k8s.io/code-generator/CONTRIBUTING.md | 7 + .../vendor/k8s.io/code-generator/LICENSE | 202 + .../vendor/k8s.io/code-generator/OWNERS | 15 + .../vendor/k8s.io/code-generator/README.md | 25 + .../k8s.io/code-generator/SECURITY_CONTACTS | 16 + .../cmd/applyconfiguration-gen/args/args.go | 81 + .../args/externaltypes.go | 122 + .../generators/applyconfiguration.go | 423 + .../generators/internal.go | 99 + .../generators/jsontagutil.go | 99 + .../generators/openapi.go | 198 + .../generators/packages.go | 297 + .../generators/refgraph.go | 179 + .../generators/types.go | 33 + .../applyconfiguration-gen/generators/util.go | 163 + .../cmd/applyconfiguration-gen/main.go | 54 + .../code-generator/cmd/client-gen/OWNERS | 11 + .../code-generator/cmd/client-gen/README.md | 2 + .../cmd/client-gen/args/args.go | 133 + .../cmd/client-gen/args/gvpackages.go | 173 + .../cmd/client-gen/args/gvtype.go | 110 + .../client-gen/generators/client_generator.go | 393 + .../generators/fake/fake_client_generator.go | 131 + .../fake/generator_fake_for_clientset.go | 170 + .../fake/generator_fake_for_group.go | 130 + .../fake/generator_fake_for_type.go | 570 + .../generators/generator_for_clientset.go | 209 + .../generators/generator_for_expansion.go | 54 + .../generators/generator_for_group.go | 267 + .../generators/generator_for_type.go | 760 + .../generators/scheme/generator_for_scheme.go | 187 + .../client-gen/generators/util/gvpackages.go | 30 + .../cmd/client-gen/generators/util/tags.go | 344 + .../code-generator/cmd/client-gen/main.go | 63 + .../cmd/client-gen/path/path.go | 31 + .../cmd/client-gen/types/helpers.go | 121 + .../cmd/client-gen/types/types.go | 97 + .../cmd/conversion-gen/args/args.go | 90 + .../conversion-gen/generators/conversion.go | 1222 + .../code-generator/cmd/conversion-gen/main.go | 139 + .../cmd/deepcopy-gen/args/args.go | 54 + .../code-generator/cmd/deepcopy-gen/main.go | 81 + .../cmd/defaulter-gen/args/args.go | 54 + .../code-generator/cmd/defaulter-gen/main.go | 77 + .../cmd/go-to-protobuf/.gitignore | 1 + .../code-generator/cmd/go-to-protobuf/OWNERS | 6 + .../code-generator/cmd/go-to-protobuf/main.go | 41 + .../cmd/go-to-protobuf/protobuf/cmd.go | 480 + .../cmd/go-to-protobuf/protobuf/generator.go | 773 + .../go-to-protobuf/protobuf/import_tracker.go | 50 + .../cmd/go-to-protobuf/protobuf/namer.go | 208 + .../cmd/go-to-protobuf/protobuf/package.go | 215 + .../cmd/go-to-protobuf/protobuf/parser.go | 463 + .../cmd/go-to-protobuf/protobuf/tags.go | 33 + .../code-generator/cmd/import-boss/.gitignore | 1 + .../code-generator/cmd/import-boss/README.md | 97 + .../code-generator/cmd/import-boss/main.go | 45 + .../cmd/informer-gen/args/args.go | 83 + .../cmd/informer-gen/generators/factory.go | 330 + .../generators/factoryinterface.go | 90 + .../cmd/informer-gen/generators/generic.go | 184 + .../informer-gen/generators/groupinterface.go | 118 + .../cmd/informer-gen/generators/informer.go | 186 + .../cmd/informer-gen/generators/packages.go | 347 + .../cmd/informer-gen/generators/types.go | 42 + .../generators/versioninterface.go | 109 + .../code-generator/cmd/informer-gen/main.go | 60 + .../cmd/lister-gen/args/args.go | 64 + .../cmd/lister-gen/generators/expansion.go | 67 + .../cmd/lister-gen/generators/lister.go | 376 + .../code-generator/cmd/lister-gen/main.go | 57 + .../code-generator/cmd/openapi-gen/main.go | 57 + .../cmd/register-gen/args/args.go | 39 + .../cmd/register-gen/generators/packages.go | 137 + .../generators/register_external.go | 117 + .../code-generator/cmd/register-gen/main.go | 49 + .../code-generator/cmd/set-gen/.gitignore | 1 + .../k8s.io/code-generator/cmd/set-gen/main.go | 53 + .../k8s.io/code-generator/code-of-conduct.md | 3 + .../vendor/k8s.io/code-generator/doc.go | 17 + .../k8s.io/code-generator/generate-groups.sh | 66 + .../generate-internal-groups.sh | 272 + .../k8s.io/code-generator/kube_codegen.sh | 637 + .../code-generator/pkg/namer/tag-override.go | 58 + .../k8s.io/code-generator/pkg/util/build.go | 60 + .../pkg/util/plural_exceptions.go | 37 + .../third_party/forked/golang/LICENSE | 27 + .../third_party/forked/golang/PATENTS | 22 + .../third_party/forked/golang/reflect/type.go | 91 + .../vendor/k8s.io/code-generator/tools.go | 37 + .../vendor/k8s.io/gengo/LICENSE | 202 + .../vendor/k8s.io/gengo/args/args.go | 218 + .../deepcopy-gen/generators/deepcopy.go | 929 + .../defaulter-gen/generators/defaulter.go | 1117 + .../import-boss/generators/import_restrict.go | 419 + .../gengo/examples/set-gen/generators/sets.go | 378 + .../gengo/examples/set-gen/generators/tags.go | 33 + .../gengo/examples/set-gen/sets/byte.go | 221 + .../k8s.io/gengo/examples/set-gen/sets/doc.go | 20 + .../gengo/examples/set-gen/sets/empty.go | 23 + .../k8s.io/gengo/examples/set-gen/sets/int.go | 221 + .../gengo/examples/set-gen/sets/int64.go | 221 + .../gengo/examples/set-gen/sets/string.go | 221 + .../gengo/generator/default_generator.go | 62 + .../k8s.io/gengo/generator/default_package.go | 75 + .../vendor/k8s.io/gengo/generator/doc.go | 31 + .../k8s.io/gengo/generator/error_tracker.go | 50 + .../vendor/k8s.io/gengo/generator/execute.go | 329 + .../k8s.io/gengo/generator/generator.go | 259 + .../k8s.io/gengo/generator/import_tracker.go | 70 + .../k8s.io/gengo/generator/snippet_writer.go | 154 + .../gengo/generator/transitive_closure.go | 65 + .../vendor/k8s.io/gengo/namer/doc.go | 31 + .../k8s.io/gengo/namer/import_tracker.go | 112 + .../vendor/k8s.io/gengo/namer/namer.go | 394 + .../vendor/k8s.io/gengo/namer/order.go | 72 + .../vendor/k8s.io/gengo/namer/plural_namer.go | 120 + .../vendor/k8s.io/gengo/parser/doc.go | 19 + .../vendor/k8s.io/gengo/parser/parse.go | 925 + .../vendor/k8s.io/gengo/types/comments.go | 82 + .../vendor/k8s.io/gengo/types/doc.go | 19 + .../vendor/k8s.io/gengo/types/flatten.go | 57 + .../vendor/k8s.io/gengo/types/types.go | 537 + .../kube-openapi/cmd/openapi-gen/args/args.go | 76 + .../kube-openapi/pkg/generators/README.md | 49 + .../kube-openapi/pkg/generators/api_linter.go | 219 + .../kube-openapi/pkg/generators/config.go | 91 + .../kube-openapi/pkg/generators/enum.go | 162 + .../kube-openapi/pkg/generators/extension.go | 202 + .../kube-openapi/pkg/generators/openapi.go | 825 + .../kube-openapi/pkg/generators/rules/OWNERS | 4 + .../kube-openapi/pkg/generators/rules/doc.go | 23 + .../pkg/generators/rules/idl_tag.go | 53 + .../pkg/generators/rules/names_match.go | 178 + .../generators/rules/omitempty_match_case.go | 64 + .../kube-openapi/pkg/generators/union.go | 207 + .../kube-openapi/pkg/util/sets/empty.go | 27 + .../kube-openapi/pkg/util/sets/string.go | 207 + cluster-autoscaler/vendor/modules.txt | 109 + 394 files changed, 227833 insertions(+) create mode 100755 cluster-autoscaler/hack/update-codegen.sh create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.editorconfig create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitattributes create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/CHANGELOG.md create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/LICENSE.txt create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/README.md create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/Taskfile.yml create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/crypto.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/date.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/defaults.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/dict.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/doc.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/functions.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/list.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/network.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/numeric.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/reflect.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/regex.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/strings.go create mode 100644 cluster-autoscaler/vendor/github.com/go-task/slim-sprig/url.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/AUTHORS create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/CONTRIBUTORS create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/LICENSE create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/encode.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/filter.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/index.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_java_profile.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_profile.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/merge.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/profile.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/proto.go create mode 100644 cluster-autoscaler/vendor/github.com/google/pprof/profile/prune.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/LICENSE create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/README.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/RELEASING.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/config/deprecated.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/core_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/decorator_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/main.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/counter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/failer.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/group.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/report_entry.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/tree.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/writer.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/table_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/code_location.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/config.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/enum_support.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/errors.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/file_filter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/flags.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/types.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/CONTRIBUTING.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/LICENSE create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/README.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/RELEASING.md create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/assertion.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/async_assertion.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/duration_bundle.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gomega.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/polling_signal_error.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/internal/vetoptdesc.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/and.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/attributes_slice.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_identical_to.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/consist_of.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/equal_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_field.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_value.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/not.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/or.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/panic_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/receive_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/type_support.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/with_transform.go create mode 100644 cluster-autoscaler/vendor/github.com/onsi/gomega/types/types.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/mod/module/module.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/mod/module/pseudo.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/net/html/charset/charset.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/charmap.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/map.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/all.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/eucjp.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/shiftjis.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/euckr.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/imports.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/util.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/inspector.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/typeof.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/imports/forward.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_darwin.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/gopathwalk/walk.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod_cache.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/sortimports.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/zstdlib.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/CONTRIBUTING.md create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/LICENSE create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/OWNERS create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/README.md create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/SECURITY_CONTACTS create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/externaltypes.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/applyconfiguration.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/internal.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/jsontagutil.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/openapi.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/packages.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/refgraph.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/types.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/util.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/OWNERS create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/README.md create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvpackages.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvtype.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_group.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_expansion.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/scheme/generator_for_scheme.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/gvpackages.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/tags.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/path/path.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/helpers.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/types.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/.gitignore create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/OWNERS create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/cmd.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/generator.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/import_tracker.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/namer.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/package.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/parser.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/tags.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/.gitignore create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/README.md create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factoryinterface.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/groupinterface.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/informer.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/versioninterface.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/expansion.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/openapi-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/packages.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/register_external.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/.gitignore create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/main.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/code-of-conduct.md create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/generate-groups.sh create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/generate-internal-groups.sh create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/kube_codegen.sh create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/pkg/namer/tag-override.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/build.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/plural_exceptions.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/LICENSE create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/PATENTS create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/reflect/type.go create mode 100644 cluster-autoscaler/vendor/k8s.io/code-generator/tools.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/LICENSE create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/sets.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/tags.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/byte.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/empty.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int64.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/string.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/default_generator.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/default_package.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/error_tracker.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/execute.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/generator.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/snippet_writer.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/generator/transitive_closure.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/namer/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/namer/order.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/namer/plural_namer.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/parser/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/parser/parse.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/types/comments.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/types/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/types/flatten.go create mode 100644 cluster-autoscaler/vendor/k8s.io/gengo/types/types.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/args.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/README.md create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/api_linter.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/config.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/enum.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/extension.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/OWNERS create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/doc.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/idl_tag.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/names_match.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/omitempty_match_case.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/union.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/empty.go create mode 100644 cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/string.go diff --git a/.gitignore b/.gitignore index 5825bbd72988..bedd35203ef9 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ Session.vim .netrwhist +# Binary files +bin/ diff --git a/cluster-autoscaler/Makefile b/cluster-autoscaler/Makefile index 72a5db74bd37..fb82bb2b5ee5 100644 --- a/cluster-autoscaler/Makefile +++ b/cluster-autoscaler/Makefile @@ -109,3 +109,23 @@ test-in-docker: clean docker-builder docker run ${RM_FLAG} -v `pwd`:/cluster-autoscaler/:Z autoscaling-builder:latest bash -c 'cd /cluster-autoscaler && go test -race ./... ${TAGS_FLAG}' .PHONY: all build test-unit clean format execute-release dev-release docker-builder build-in-docker release generate push-image push-manifest + +## Location to install dependencies to +LOCALBIN ?= $(shell pwd)/bin +$(LOCALBIN): + mkdir -p $(LOCALBIN) + +## Tool Binaries +CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen + +## Tool Versions +CONTROLLER_TOOLS_VERSION ?= v0.13.0 + +.PHONY: controller-gen +controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. +$(CONTROLLER_GEN): $(LOCALBIN) + test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) + +.PHONY: manifest +manifest: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. + $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd \ No newline at end of file diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index 07cc6ea29418..ebce7228babf 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -23,6 +23,8 @@ require ( github.com/google/uuid v1.3.0 github.com/jmespath/go-jmespath v0.4.0 github.com/json-iterator/go v1.1.12 + github.com/onsi/ginkgo/v2 v2.9.4 + github.com/onsi/gomega v1.27.6 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 github.com/satori/go.uuid v1.2.0 @@ -43,6 +45,7 @@ require ( k8s.io/client-go v0.28.0 k8s.io/cloud-provider v0.28.0 k8s.io/cloud-provider-aws v1.27.0 + k8s.io/code-generator v0.28.0 k8s.io/component-base v0.28.0 k8s.io/component-helpers v0.28.0 k8s.io/klog/v2 v2.100.1 @@ -97,6 +100,7 @@ require ( github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -104,6 +108,7 @@ require ( github.com/google/cel-go v0.16.0 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.1 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect @@ -183,6 +188,7 @@ require ( k8s.io/cri-api v0.28.0 // indirect k8s.io/csi-translation-lib v0.27.0 // indirect k8s.io/dynamic-resource-allocation v0.0.0 // indirect + k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect k8s.io/kms v0.28.0 // indirect k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect k8s.io/kube-scheduler v0.0.0 // indirect diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 6c5bbbb57916..5b230755bd16 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -255,6 +255,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= @@ -271,6 +272,7 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.6 h1:mkgN1ofwASrYnJ5W6U/BxG15eXXXjirgZc7CLqkcaro= @@ -351,6 +353,7 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -434,6 +437,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -484,7 +488,9 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= +github.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= +github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= @@ -955,6 +961,7 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1188,6 +1195,8 @@ k8s.io/cloud-provider v0.28.0 h1:BTIW7b757T+VXB5yqJeajPXsNOmeooopUgfzQueiWvk= k8s.io/cloud-provider v0.28.0/go.mod h1:u0MGqdlutkTmCJyNrCzIMJ+OhrwQE9x5X8mBTN0R7us= k8s.io/cloud-provider-aws v1.27.0 h1:PF8YrH8QcN6JoXB3Xxlaz84SBDYMPunJuCc0cPuCWXA= k8s.io/cloud-provider-aws v1.27.0/go.mod h1:9vUb5mnVnReSRDBWcBxB1b0HOeEc472iOPmrnwpN9SA= +k8s.io/code-generator v0.28.0 h1:msdkRVJNVFgdiIJ8REl/d3cZsMB9HByFcWMmn13NyuE= +k8s.io/code-generator v0.28.0/go.mod h1:ueeSJZJ61NHBa0ccWLey6mwawum25vX61nRZ6WOzN9A= k8s.io/component-base v0.28.0 h1:HQKy1enJrOeJlTlN4a6dU09wtmXaUvThC0irImfqyxI= k8s.io/component-base v0.28.0/go.mod h1:Yyf3+ZypLfMydVzuLBqJ5V7Kx6WwDr/5cN+dFjw1FNk= k8s.io/component-helpers v0.28.0 h1:ubHUiEF7H/DOx4471pHHsLlH3EGu8jlEvnld5PS4KdI= @@ -1200,7 +1209,10 @@ k8s.io/csi-translation-lib v0.28.0 h1:X3Kr5aHvH4xutNg4pgdc6RP0h3FOlJGDeui5CLfBeO k8s.io/csi-translation-lib v0.28.0/go.mod h1:HvnmmGZoTobqMU4MD3yQFJ4U4Dq3PxnCfVbJUjky3K0= k8s.io/dynamic-resource-allocation v0.28.0 h1:LQjb8kRQcvorEHlJVfHLSGued8taykmqROMGozMpHsY= k8s.io/dynamic-resource-allocation v0.28.0/go.mod h1:x8xyQvoo22hfBEZlKt3nqkzfoTcMOJxiD9mSgDgrd2w= +k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08= +k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= @@ -1234,5 +1246,6 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/cluster-autoscaler/hack/update-codegen.sh b/cluster-autoscaler/hack/update-codegen.sh new file mode 100755 index 000000000000..33b329e13cd2 --- /dev/null +++ b/cluster-autoscaler/hack/update-codegen.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# Copyright 2021 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +### +# This script is to be used when updating the generated clients of +# the Provisoning Request CRD. +### + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +CODEGEN_PKG="./vendor/k8s.io/code-generator" + +chmod +x "${CODEGEN_PKG}"/generate-groups.sh +chmod +x "${CODEGEN_PKG}"/generate-internal-groups.sh + +bash "${CODEGEN_PKG}"/generate-groups.sh "applyconfiguration,client,deepcopy,informer,lister" \ + k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client \ + k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis \ + provisioning.k8s.io:v1beta1 \ + --go-header-file "${SCRIPT_ROOT}"/../hack/boilerplate/boilerplate.generatego.txt + +chmod -x "${CODEGEN_PKG}"/generate-groups.sh +chmod -x "${CODEGEN_PKG}"/generate-internal-groups.sh diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go index 41c88165bcae..1aa1ccebe124 100644 --- a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go +++ b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go @@ -19,6 +19,11 @@ package v1beta1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + // Dependencies for the generation of the code: + _ "github.com/onsi/ginkgo/v2" + _ "github.com/onsi/gomega" + _ "k8s.io/code-generator" ) // +genclient diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.editorconfig b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.editorconfig new file mode 100644 index 000000000000..b0c95367e75a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.editorconfig @@ -0,0 +1,14 @@ +# editorconfig.org + +root = true + +[*] +insert_final_newline = true +charset = utf-8 +trim_trailing_whitespace = true +indent_style = tab +indent_size = 8 + +[*.{md,yml,yaml,json}] +indent_style = space +indent_size = 2 diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitattributes b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitattributes new file mode 100644 index 000000000000..176a458f94e0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitignore b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitignore new file mode 100644 index 000000000000..5e3002f88f51 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/.gitignore @@ -0,0 +1,2 @@ +vendor/ +/.glide diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/CHANGELOG.md new file mode 100644 index 000000000000..61d8ebffc375 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/CHANGELOG.md @@ -0,0 +1,364 @@ +# Changelog + +## Release 3.2.0 (2020-12-14) + +### Added + +- #211: Added randInt function (thanks @kochurovro) +- #223: Added fromJson and mustFromJson functions (thanks @mholt) +- #242: Added a bcrypt function (thanks @robbiet480) +- #253: Added randBytes function (thanks @MikaelSmith) +- #254: Added dig function for dicts (thanks @nyarly) +- #257: Added regexQuoteMeta for quoting regex metadata (thanks @rheaton) +- #261: Added filepath functions osBase, osDir, osExt, osClean, osIsAbs (thanks @zugl) +- #268: Added and and all functions for testing conditions (thanks @phuslu) +- #181: Added float64 arithmetic addf, add1f, subf, divf, mulf, maxf, and minf + (thanks @andrewmostello) +- #265: Added chunk function to split array into smaller arrays (thanks @karelbilek) +- #270: Extend certificate functions to handle non-RSA keys + add support for + ed25519 keys (thanks @misberner) + +### Changed + +- Removed testing and support for Go 1.12. ed25519 support requires Go 1.13 or newer +- Using semver 3.1.1 and mergo 0.3.11 + +### Fixed + +- #249: Fix htmlDateInZone example (thanks @spawnia) + +NOTE: The dependency github.com/imdario/mergo reverted the breaking change in +0.3.9 via 0.3.10 release. + +## Release 3.1.0 (2020-04-16) + +NOTE: The dependency github.com/imdario/mergo made a behavior change in 0.3.9 +that impacts sprig functionality. Do not use sprig with a version newer than 0.3.8. + +### Added + +- #225: Added support for generating htpasswd hash (thanks @rustycl0ck) +- #224: Added duration filter (thanks @frebib) +- #205: Added `seq` function (thanks @thadc23) + +### Changed + +- #203: Unlambda functions with correct signature (thanks @muesli) +- #236: Updated the license formatting for GitHub display purposes +- #238: Updated package dependency versions. Note, mergo not updated to 0.3.9 + as it causes a breaking change for sprig. That issue is tracked at + https://github.com/imdario/mergo/issues/139 + +### Fixed + +- #229: Fix `seq` example in docs (thanks @kalmant) + +## Release 3.0.2 (2019-12-13) + +### Fixed + +- #220: Updating to semver v3.0.3 to fix issue with <= ranges +- #218: fix typo elyptical->elliptic in ecdsa key description (thanks @laverya) + +## Release 3.0.1 (2019-12-08) + +### Fixed + +- #212: Updated semver fixing broken constraint checking with ^0.0 + +## Release 3.0.0 (2019-10-02) + +### Added + +- #187: Added durationRound function (thanks @yjp20) +- #189: Added numerous template functions that return errors rather than panic (thanks @nrvnrvn) +- #193: Added toRawJson support (thanks @Dean-Coakley) +- #197: Added get support to dicts (thanks @Dean-Coakley) + +### Changed + +- #186: Moving dependency management to Go modules +- #186: Updated semver to v3. This has changes in the way ^ is handled +- #194: Updated documentation on merging and how it copies. Added example using deepCopy +- #196: trunc now supports negative values (thanks @Dean-Coakley) + +## Release 2.22.0 (2019-10-02) + +### Added + +- #173: Added getHostByName function to resolve dns names to ips (thanks @fcgravalos) +- #195: Added deepCopy function for use with dicts + +### Changed + +- Updated merge and mergeOverwrite documentation to explain copying and how to + use deepCopy with it + +## Release 2.21.0 (2019-09-18) + +### Added + +- #122: Added encryptAES/decryptAES functions (thanks @n0madic) +- #128: Added toDecimal support (thanks @Dean-Coakley) +- #169: Added list contcat (thanks @astorath) +- #174: Added deepEqual function (thanks @bonifaido) +- #170: Added url parse and join functions (thanks @astorath) + +### Changed + +- #171: Updated glide config for Google UUID to v1 and to add ranges to semver and testify + +### Fixed + +- #172: Fix semver wildcard example (thanks @piepmatz) +- #175: Fix dateInZone doc example (thanks @s3than) + +## Release 2.20.0 (2019-06-18) + +### Added + +- #164: Adding function to get unix epoch for a time (@mattfarina) +- #166: Adding tests for date_in_zone (@mattfarina) + +### Changed + +- #144: Fix function comments based on best practices from Effective Go (@CodeLingoTeam) +- #150: Handles pointer type for time.Time in "htmlDate" (@mapreal19) +- #161, #157, #160, #153, #158, #156, #155, #159, #152 documentation updates (@badeadan) + +### Fixed + +## Release 2.19.0 (2019-03-02) + +IMPORTANT: This release reverts a change from 2.18.0 + +In the previous release (2.18), we prematurely merged a partial change to the crypto functions that led to creating two sets of crypto functions (I blame @technosophos -- since that's me). This release rolls back that change, and does what was originally intended: It alters the existing crypto functions to use secure random. + +We debated whether this classifies as a change worthy of major revision, but given the proximity to the last release, we have decided that treating 2.18 as a faulty release is the correct course of action. We apologize for any inconvenience. + +### Changed + +- Fix substr panic 35fb796 (Alexey igrychev) +- Remove extra period 1eb7729 (Matthew Lorimor) +- Make random string functions use crypto by default 6ceff26 (Matthew Lorimor) +- README edits/fixes/suggestions 08fe136 (Lauri Apple) + + +## Release 2.18.0 (2019-02-12) + +### Added + +- Added mergeOverwrite function +- cryptographic functions that use secure random (see fe1de12) + +### Changed + +- Improve documentation of regexMatch function, resolves #139 90b89ce (Jan Tagscherer) +- Handle has for nil list 9c10885 (Daniel Cohen) +- Document behaviour of mergeOverwrite fe0dbe9 (Lukas Rieder) +- doc: adds missing documentation. 4b871e6 (Fernandez Ludovic) +- Replace outdated goutils imports 01893d2 (Matthew Lorimor) +- Surface crypto secure random strings from goutils fe1de12 (Matthew Lorimor) +- Handle untyped nil values as paramters to string functions 2b2ec8f (Morten Torkildsen) + +### Fixed + +- Fix dict merge issue and provide mergeOverwrite .dst .src1 to overwrite from src -> dst 4c59c12 (Lukas Rieder) +- Fix substr var names and comments d581f80 (Dean Coakley) +- Fix substr documentation 2737203 (Dean Coakley) + +## Release 2.17.1 (2019-01-03) + +### Fixed + +The 2.17.0 release did not have a version pinned for xstrings, which caused compilation failures when xstrings < 1.2 was used. This adds the correct version string to glide.yaml. + +## Release 2.17.0 (2019-01-03) + +### Added + +- adds alder32sum function and test 6908fc2 (marshallford) +- Added kebabcase function ca331a1 (Ilyes512) + +### Changed + +- Update goutils to 1.1.0 4e1125d (Matt Butcher) + +### Fixed + +- Fix 'has' documentation e3f2a85 (dean-coakley) +- docs(dict): fix typo in pick example dc424f9 (Dustin Specker) +- fixes spelling errors... not sure how that happened 4cf188a (marshallford) + +## Release 2.16.0 (2018-08-13) + +### Added + +- add splitn function fccb0b0 (Helgi Þorbjörnsson) +- Add slice func df28ca7 (gongdo) +- Generate serial number a3bdffd (Cody Coons) +- Extract values of dict with values function df39312 (Lawrence Jones) + +### Changed + +- Modify panic message for list.slice ae38335 (gongdo) +- Minor improvement in code quality - Removed an unreachable piece of code at defaults.go#L26:6 - Resolve formatting issues. 5834241 (Abhishek Kashyap) +- Remove duplicated documentation 1d97af1 (Matthew Fisher) +- Test on go 1.11 49df809 (Helgi Þormar Þorbjörnsson) + +### Fixed + +- Fix file permissions c5f40b5 (gongdo) +- Fix example for buildCustomCert 7779e0d (Tin Lam) + +## Release 2.15.0 (2018-04-02) + +### Added + +- #68 and #69: Add json helpers to docs (thanks @arunvelsriram) +- #66: Add ternary function (thanks @binoculars) +- #67: Allow keys function to take multiple dicts (thanks @binoculars) +- #89: Added sha1sum to crypto function (thanks @benkeil) +- #81: Allow customizing Root CA that used by genSignedCert (thanks @chenzhiwei) +- #92: Add travis testing for go 1.10 +- #93: Adding appveyor config for windows testing + +### Changed + +- #90: Updating to more recent dependencies +- #73: replace satori/go.uuid with google/uuid (thanks @petterw) + +### Fixed + +- #76: Fixed documentation typos (thanks @Thiht) +- Fixed rounding issue on the `ago` function. Note, the removes support for Go 1.8 and older + +## Release 2.14.1 (2017-12-01) + +### Fixed + +- #60: Fix typo in function name documentation (thanks @neil-ca-moore) +- #61: Removing line with {{ due to blocking github pages genertion +- #64: Update the list functions to handle int, string, and other slices for compatibility + +## Release 2.14.0 (2017-10-06) + +This new version of Sprig adds a set of functions for generating and working with SSL certificates. + +- `genCA` generates an SSL Certificate Authority +- `genSelfSignedCert` generates an SSL self-signed certificate +- `genSignedCert` generates an SSL certificate and key based on a given CA + +## Release 2.13.0 (2017-09-18) + +This release adds new functions, including: + +- `regexMatch`, `regexFindAll`, `regexFind`, `regexReplaceAll`, `regexReplaceAllLiteral`, and `regexSplit` to work with regular expressions +- `floor`, `ceil`, and `round` math functions +- `toDate` converts a string to a date +- `nindent` is just like `indent` but also prepends a new line +- `ago` returns the time from `time.Now` + +### Added + +- #40: Added basic regex functionality (thanks @alanquillin) +- #41: Added ceil floor and round functions (thanks @alanquillin) +- #48: Added toDate function (thanks @andreynering) +- #50: Added nindent function (thanks @binoculars) +- #46: Added ago function (thanks @slayer) + +### Changed + +- #51: Updated godocs to include new string functions (thanks @curtisallen) +- #49: Added ability to merge multiple dicts (thanks @binoculars) + +## Release 2.12.0 (2017-05-17) + +- `snakecase`, `camelcase`, and `shuffle` are three new string functions +- `fail` allows you to bail out of a template render when conditions are not met + +## Release 2.11.0 (2017-05-02) + +- Added `toJson` and `toPrettyJson` +- Added `merge` +- Refactored documentation + +## Release 2.10.0 (2017-03-15) + +- Added `semver` and `semverCompare` for Semantic Versions +- `list` replaces `tuple` +- Fixed issue with `join` +- Added `first`, `last`, `intial`, `rest`, `prepend`, `append`, `toString`, `toStrings`, `sortAlpha`, `reverse`, `coalesce`, `pluck`, `pick`, `compact`, `keys`, `omit`, `uniq`, `has`, `without` + +## Release 2.9.0 (2017-02-23) + +- Added `splitList` to split a list +- Added crypto functions of `genPrivateKey` and `derivePassword` + +## Release 2.8.0 (2016-12-21) + +- Added access to several path functions (`base`, `dir`, `clean`, `ext`, and `abs`) +- Added functions for _mutating_ dictionaries (`set`, `unset`, `hasKey`) + +## Release 2.7.0 (2016-12-01) + +- Added `sha256sum` to generate a hash of an input +- Added functions to convert a numeric or string to `int`, `int64`, `float64` + +## Release 2.6.0 (2016-10-03) + +- Added a `uuidv4` template function for generating UUIDs inside of a template. + +## Release 2.5.0 (2016-08-19) + +- New `trimSuffix`, `trimPrefix`, `hasSuffix`, and `hasPrefix` functions +- New aliases have been added for a few functions that didn't follow the naming conventions (`trimAll` and `abbrevBoth`) +- `trimall` and `abbrevboth` (notice the case) are deprecated and will be removed in 3.0.0 + +## Release 2.4.0 (2016-08-16) + +- Adds two functions: `until` and `untilStep` + +## Release 2.3.0 (2016-06-21) + +- cat: Concatenate strings with whitespace separators. +- replace: Replace parts of a string: `replace " " "-" "Me First"` renders "Me-First" +- plural: Format plurals: `len "foo" | plural "one foo" "many foos"` renders "many foos" +- indent: Indent blocks of text in a way that is sensitive to "\n" characters. + +## Release 2.2.0 (2016-04-21) + +- Added a `genPrivateKey` function (Thanks @bacongobbler) + +## Release 2.1.0 (2016-03-30) + +- `default` now prints the default value when it does not receive a value down the pipeline. It is much safer now to do `{{.Foo | default "bar"}}`. +- Added accessors for "hermetic" functions. These return only functions that, when given the same input, produce the same output. + +## Release 2.0.0 (2016-03-29) + +Because we switched from `int` to `int64` as the return value for all integer math functions, the library's major version number has been incremented. + +- `min` complements `max` (formerly `biggest`) +- `empty` indicates that a value is the empty value for its type +- `tuple` creates a tuple inside of a template: `{{$t := tuple "a", "b" "c"}}` +- `dict` creates a dictionary inside of a template `{{$d := dict "key1" "val1" "key2" "val2"}}` +- Date formatters have been added for HTML dates (as used in `date` input fields) +- Integer math functions can convert from a number of types, including `string` (via `strconv.ParseInt`). + +## Release 1.2.0 (2016-02-01) + +- Added quote and squote +- Added b32enc and b32dec +- add now takes varargs +- biggest now takes varargs + +## Release 1.1.0 (2015-12-29) + +- Added #4: Added contains function. strings.Contains, but with the arguments + switched to simplify common pipelines. (thanks krancour) +- Added Travis-CI testing support + +## Release 1.0.0 (2015-12-23) + +- Initial release diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/LICENSE.txt b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/LICENSE.txt new file mode 100644 index 000000000000..f311b1eaaaa8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (C) 2013-2020 Masterminds + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/README.md b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/README.md new file mode 100644 index 000000000000..72579471ff0e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/README.md @@ -0,0 +1,73 @@ +# Slim-Sprig: Template functions for Go templates [![GoDoc](https://godoc.org/github.com/go-task/slim-sprig?status.svg)](https://godoc.org/github.com/go-task/slim-sprig) [![Go Report Card](https://goreportcard.com/badge/github.com/go-task/slim-sprig)](https://goreportcard.com/report/github.com/go-task/slim-sprig) + +Slim-Sprig is a fork of [Sprig](https://github.com/Masterminds/sprig), but with +all functions that depend on external (non standard library) or crypto packages +removed. +The reason for this is to make this library more lightweight. Most of these +functions (specially crypto ones) are not needed on most apps, but costs a lot +in terms of binary size and compilation time. + +## Usage + +**Template developers**: Please use Slim-Sprig's [function documentation](https://go-task.github.io/slim-sprig/) for +detailed instructions and code snippets for the >100 template functions available. + +**Go developers**: If you'd like to include Slim-Sprig as a library in your program, +our API documentation is available [at GoDoc.org](http://godoc.org/github.com/go-task/slim-sprig). + +For standard usage, read on. + +### Load the Slim-Sprig library + +To load the Slim-Sprig `FuncMap`: + +```go + +import ( + "html/template" + + "github.com/go-task/slim-sprig" +) + +// This example illustrates that the FuncMap *must* be set before the +// templates themselves are loaded. +tpl := template.Must( + template.New("base").Funcs(sprig.FuncMap()).ParseGlob("*.html") +) +``` + +### Calling the functions inside of templates + +By convention, all functions are lowercase. This seems to follow the Go +idiom for template functions (as opposed to template methods, which are +TitleCase). For example, this: + +``` +{{ "hello!" | upper | repeat 5 }} +``` + +produces this: + +``` +HELLO!HELLO!HELLO!HELLO!HELLO! +``` + +## Principles Driving Our Function Selection + +We followed these principles to decide which functions to add and how to implement them: + +- Use template functions to build layout. The following + types of operations are within the domain of template functions: + - Formatting + - Layout + - Simple type conversions + - Utilities that assist in handling common formatting and layout needs (e.g. arithmetic) +- Template functions should not return errors unless there is no way to print + a sensible value. For example, converting a string to an integer should not + produce an error if conversion fails. Instead, it should display a default + value. +- Simple math is necessary for grid layouts, pagers, and so on. Complex math + (anything other than arithmetic) should be done outside of templates. +- Template functions only deal with the data passed into them. They never retrieve + data from a source. +- Finally, do not override core Go template functions. diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/Taskfile.yml b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/Taskfile.yml new file mode 100644 index 000000000000..cdcfd223b719 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/Taskfile.yml @@ -0,0 +1,12 @@ +# https://taskfile.dev + +version: '2' + +tasks: + default: + cmds: + - task: test + + test: + cmds: + - go test -v . diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/crypto.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/crypto.go new file mode 100644 index 000000000000..d06e516d49ef --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/crypto.go @@ -0,0 +1,24 @@ +package sprig + +import ( + "crypto/sha1" + "crypto/sha256" + "encoding/hex" + "fmt" + "hash/adler32" +) + +func sha256sum(input string) string { + hash := sha256.Sum256([]byte(input)) + return hex.EncodeToString(hash[:]) +} + +func sha1sum(input string) string { + hash := sha1.Sum([]byte(input)) + return hex.EncodeToString(hash[:]) +} + +func adler32sum(input string) string { + hash := adler32.Checksum([]byte(input)) + return fmt.Sprintf("%d", hash) +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/date.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/date.go new file mode 100644 index 000000000000..ed022ddacac0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/date.go @@ -0,0 +1,152 @@ +package sprig + +import ( + "strconv" + "time" +) + +// Given a format and a date, format the date string. +// +// Date can be a `time.Time` or an `int, int32, int64`. +// In the later case, it is treated as seconds since UNIX +// epoch. +func date(fmt string, date interface{}) string { + return dateInZone(fmt, date, "Local") +} + +func htmlDate(date interface{}) string { + return dateInZone("2006-01-02", date, "Local") +} + +func htmlDateInZone(date interface{}, zone string) string { + return dateInZone("2006-01-02", date, zone) +} + +func dateInZone(fmt string, date interface{}, zone string) string { + var t time.Time + switch date := date.(type) { + default: + t = time.Now() + case time.Time: + t = date + case *time.Time: + t = *date + case int64: + t = time.Unix(date, 0) + case int: + t = time.Unix(int64(date), 0) + case int32: + t = time.Unix(int64(date), 0) + } + + loc, err := time.LoadLocation(zone) + if err != nil { + loc, _ = time.LoadLocation("UTC") + } + + return t.In(loc).Format(fmt) +} + +func dateModify(fmt string, date time.Time) time.Time { + d, err := time.ParseDuration(fmt) + if err != nil { + return date + } + return date.Add(d) +} + +func mustDateModify(fmt string, date time.Time) (time.Time, error) { + d, err := time.ParseDuration(fmt) + if err != nil { + return time.Time{}, err + } + return date.Add(d), nil +} + +func dateAgo(date interface{}) string { + var t time.Time + + switch date := date.(type) { + default: + t = time.Now() + case time.Time: + t = date + case int64: + t = time.Unix(date, 0) + case int: + t = time.Unix(int64(date), 0) + } + // Drop resolution to seconds + duration := time.Since(t).Round(time.Second) + return duration.String() +} + +func duration(sec interface{}) string { + var n int64 + switch value := sec.(type) { + default: + n = 0 + case string: + n, _ = strconv.ParseInt(value, 10, 64) + case int64: + n = value + } + return (time.Duration(n) * time.Second).String() +} + +func durationRound(duration interface{}) string { + var d time.Duration + switch duration := duration.(type) { + default: + d = 0 + case string: + d, _ = time.ParseDuration(duration) + case int64: + d = time.Duration(duration) + case time.Time: + d = time.Since(duration) + } + + u := uint64(d) + neg := d < 0 + if neg { + u = -u + } + + var ( + year = uint64(time.Hour) * 24 * 365 + month = uint64(time.Hour) * 24 * 30 + day = uint64(time.Hour) * 24 + hour = uint64(time.Hour) + minute = uint64(time.Minute) + second = uint64(time.Second) + ) + switch { + case u > year: + return strconv.FormatUint(u/year, 10) + "y" + case u > month: + return strconv.FormatUint(u/month, 10) + "mo" + case u > day: + return strconv.FormatUint(u/day, 10) + "d" + case u > hour: + return strconv.FormatUint(u/hour, 10) + "h" + case u > minute: + return strconv.FormatUint(u/minute, 10) + "m" + case u > second: + return strconv.FormatUint(u/second, 10) + "s" + } + return "0s" +} + +func toDate(fmt, str string) time.Time { + t, _ := time.ParseInLocation(fmt, str, time.Local) + return t +} + +func mustToDate(fmt, str string) (time.Time, error) { + return time.ParseInLocation(fmt, str, time.Local) +} + +func unixEpoch(date time.Time) string { + return strconv.FormatInt(date.Unix(), 10) +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/defaults.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/defaults.go new file mode 100644 index 000000000000..b9f979666dd3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/defaults.go @@ -0,0 +1,163 @@ +package sprig + +import ( + "bytes" + "encoding/json" + "math/rand" + "reflect" + "strings" + "time" +) + +func init() { + rand.Seed(time.Now().UnixNano()) +} + +// dfault checks whether `given` is set, and returns default if not set. +// +// This returns `d` if `given` appears not to be set, and `given` otherwise. +// +// For numeric types 0 is unset. +// For strings, maps, arrays, and slices, len() = 0 is considered unset. +// For bool, false is unset. +// Structs are never considered unset. +// +// For everything else, including pointers, a nil value is unset. +func dfault(d interface{}, given ...interface{}) interface{} { + + if empty(given) || empty(given[0]) { + return d + } + return given[0] +} + +// empty returns true if the given value has the zero value for its type. +func empty(given interface{}) bool { + g := reflect.ValueOf(given) + if !g.IsValid() { + return true + } + + // Basically adapted from text/template.isTrue + switch g.Kind() { + default: + return g.IsNil() + case reflect.Array, reflect.Slice, reflect.Map, reflect.String: + return g.Len() == 0 + case reflect.Bool: + return !g.Bool() + case reflect.Complex64, reflect.Complex128: + return g.Complex() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return g.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return g.Uint() == 0 + case reflect.Float32, reflect.Float64: + return g.Float() == 0 + case reflect.Struct: + return false + } +} + +// coalesce returns the first non-empty value. +func coalesce(v ...interface{}) interface{} { + for _, val := range v { + if !empty(val) { + return val + } + } + return nil +} + +// all returns true if empty(x) is false for all values x in the list. +// If the list is empty, return true. +func all(v ...interface{}) bool { + for _, val := range v { + if empty(val) { + return false + } + } + return true +} + +// any returns true if empty(x) is false for any x in the list. +// If the list is empty, return false. +func any(v ...interface{}) bool { + for _, val := range v { + if !empty(val) { + return true + } + } + return false +} + +// fromJson decodes JSON into a structured value, ignoring errors. +func fromJson(v string) interface{} { + output, _ := mustFromJson(v) + return output +} + +// mustFromJson decodes JSON into a structured value, returning errors. +func mustFromJson(v string) (interface{}, error) { + var output interface{} + err := json.Unmarshal([]byte(v), &output) + return output, err +} + +// toJson encodes an item into a JSON string +func toJson(v interface{}) string { + output, _ := json.Marshal(v) + return string(output) +} + +func mustToJson(v interface{}) (string, error) { + output, err := json.Marshal(v) + if err != nil { + return "", err + } + return string(output), nil +} + +// toPrettyJson encodes an item into a pretty (indented) JSON string +func toPrettyJson(v interface{}) string { + output, _ := json.MarshalIndent(v, "", " ") + return string(output) +} + +func mustToPrettyJson(v interface{}) (string, error) { + output, err := json.MarshalIndent(v, "", " ") + if err != nil { + return "", err + } + return string(output), nil +} + +// toRawJson encodes an item into a JSON string with no escaping of HTML characters. +func toRawJson(v interface{}) string { + output, err := mustToRawJson(v) + if err != nil { + panic(err) + } + return string(output) +} + +// mustToRawJson encodes an item into a JSON string with no escaping of HTML characters. +func mustToRawJson(v interface{}) (string, error) { + buf := new(bytes.Buffer) + enc := json.NewEncoder(buf) + enc.SetEscapeHTML(false) + err := enc.Encode(&v) + if err != nil { + return "", err + } + return strings.TrimSuffix(buf.String(), "\n"), nil +} + +// ternary returns the first value if the last value is true, otherwise returns the second value. +func ternary(vt interface{}, vf interface{}, v bool) interface{} { + if v { + return vt + } + + return vf +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/dict.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/dict.go new file mode 100644 index 000000000000..77ebc61b189e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/dict.go @@ -0,0 +1,118 @@ +package sprig + +func get(d map[string]interface{}, key string) interface{} { + if val, ok := d[key]; ok { + return val + } + return "" +} + +func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} { + d[key] = value + return d +} + +func unset(d map[string]interface{}, key string) map[string]interface{} { + delete(d, key) + return d +} + +func hasKey(d map[string]interface{}, key string) bool { + _, ok := d[key] + return ok +} + +func pluck(key string, d ...map[string]interface{}) []interface{} { + res := []interface{}{} + for _, dict := range d { + if val, ok := dict[key]; ok { + res = append(res, val) + } + } + return res +} + +func keys(dicts ...map[string]interface{}) []string { + k := []string{} + for _, dict := range dicts { + for key := range dict { + k = append(k, key) + } + } + return k +} + +func pick(dict map[string]interface{}, keys ...string) map[string]interface{} { + res := map[string]interface{}{} + for _, k := range keys { + if v, ok := dict[k]; ok { + res[k] = v + } + } + return res +} + +func omit(dict map[string]interface{}, keys ...string) map[string]interface{} { + res := map[string]interface{}{} + + omit := make(map[string]bool, len(keys)) + for _, k := range keys { + omit[k] = true + } + + for k, v := range dict { + if _, ok := omit[k]; !ok { + res[k] = v + } + } + return res +} + +func dict(v ...interface{}) map[string]interface{} { + dict := map[string]interface{}{} + lenv := len(v) + for i := 0; i < lenv; i += 2 { + key := strval(v[i]) + if i+1 >= lenv { + dict[key] = "" + continue + } + dict[key] = v[i+1] + } + return dict +} + +func values(dict map[string]interface{}) []interface{} { + values := []interface{}{} + for _, value := range dict { + values = append(values, value) + } + + return values +} + +func dig(ps ...interface{}) (interface{}, error) { + if len(ps) < 3 { + panic("dig needs at least three arguments") + } + dict := ps[len(ps)-1].(map[string]interface{}) + def := ps[len(ps)-2] + ks := make([]string, len(ps)-2) + for i := 0; i < len(ks); i++ { + ks[i] = ps[i].(string) + } + + return digFromDict(dict, def, ks) +} + +func digFromDict(dict map[string]interface{}, d interface{}, ks []string) (interface{}, error) { + k, ns := ks[0], ks[1:len(ks)] + step, has := dict[k] + if !has { + return d, nil + } + if len(ns) == 0 { + return step, nil + } + return digFromDict(step.(map[string]interface{}), d, ns) +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/doc.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/doc.go new file mode 100644 index 000000000000..aabb9d4489f9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/doc.go @@ -0,0 +1,19 @@ +/* +Package sprig provides template functions for Go. + +This package contains a number of utility functions for working with data +inside of Go `html/template` and `text/template` files. + +To add these functions, use the `template.Funcs()` method: + + t := templates.New("foo").Funcs(sprig.FuncMap()) + +Note that you should add the function map before you parse any template files. + + In several cases, Sprig reverses the order of arguments from the way they + appear in the standard library. This is to make it easier to pipe + arguments into functions. + +See http://masterminds.github.io/sprig/ for more detailed documentation on each of the available functions. +*/ +package sprig diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/functions.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/functions.go new file mode 100644 index 000000000000..5ea74f899306 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/functions.go @@ -0,0 +1,317 @@ +package sprig + +import ( + "errors" + "html/template" + "math/rand" + "os" + "path" + "path/filepath" + "reflect" + "strconv" + "strings" + ttemplate "text/template" + "time" +) + +// FuncMap produces the function map. +// +// Use this to pass the functions into the template engine: +// +// tpl := template.New("foo").Funcs(sprig.FuncMap())) +// +func FuncMap() template.FuncMap { + return HtmlFuncMap() +} + +// HermeticTxtFuncMap returns a 'text/template'.FuncMap with only repeatable functions. +func HermeticTxtFuncMap() ttemplate.FuncMap { + r := TxtFuncMap() + for _, name := range nonhermeticFunctions { + delete(r, name) + } + return r +} + +// HermeticHtmlFuncMap returns an 'html/template'.Funcmap with only repeatable functions. +func HermeticHtmlFuncMap() template.FuncMap { + r := HtmlFuncMap() + for _, name := range nonhermeticFunctions { + delete(r, name) + } + return r +} + +// TxtFuncMap returns a 'text/template'.FuncMap +func TxtFuncMap() ttemplate.FuncMap { + return ttemplate.FuncMap(GenericFuncMap()) +} + +// HtmlFuncMap returns an 'html/template'.Funcmap +func HtmlFuncMap() template.FuncMap { + return template.FuncMap(GenericFuncMap()) +} + +// GenericFuncMap returns a copy of the basic function map as a map[string]interface{}. +func GenericFuncMap() map[string]interface{} { + gfm := make(map[string]interface{}, len(genericMap)) + for k, v := range genericMap { + gfm[k] = v + } + return gfm +} + +// These functions are not guaranteed to evaluate to the same result for given input, because they +// refer to the environment or global state. +var nonhermeticFunctions = []string{ + // Date functions + "date", + "date_in_zone", + "date_modify", + "now", + "htmlDate", + "htmlDateInZone", + "dateInZone", + "dateModify", + + // Strings + "randAlphaNum", + "randAlpha", + "randAscii", + "randNumeric", + "randBytes", + "uuidv4", + + // OS + "env", + "expandenv", + + // Network + "getHostByName", +} + +var genericMap = map[string]interface{}{ + "hello": func() string { return "Hello!" }, + + // Date functions + "ago": dateAgo, + "date": date, + "date_in_zone": dateInZone, + "date_modify": dateModify, + "dateInZone": dateInZone, + "dateModify": dateModify, + "duration": duration, + "durationRound": durationRound, + "htmlDate": htmlDate, + "htmlDateInZone": htmlDateInZone, + "must_date_modify": mustDateModify, + "mustDateModify": mustDateModify, + "mustToDate": mustToDate, + "now": time.Now, + "toDate": toDate, + "unixEpoch": unixEpoch, + + // Strings + "trunc": trunc, + "trim": strings.TrimSpace, + "upper": strings.ToUpper, + "lower": strings.ToLower, + "title": strings.Title, + "substr": substring, + // Switch order so that "foo" | repeat 5 + "repeat": func(count int, str string) string { return strings.Repeat(str, count) }, + // Deprecated: Use trimAll. + "trimall": func(a, b string) string { return strings.Trim(b, a) }, + // Switch order so that "$foo" | trimall "$" + "trimAll": func(a, b string) string { return strings.Trim(b, a) }, + "trimSuffix": func(a, b string) string { return strings.TrimSuffix(b, a) }, + "trimPrefix": func(a, b string) string { return strings.TrimPrefix(b, a) }, + // Switch order so that "foobar" | contains "foo" + "contains": func(substr string, str string) bool { return strings.Contains(str, substr) }, + "hasPrefix": func(substr string, str string) bool { return strings.HasPrefix(str, substr) }, + "hasSuffix": func(substr string, str string) bool { return strings.HasSuffix(str, substr) }, + "quote": quote, + "squote": squote, + "cat": cat, + "indent": indent, + "nindent": nindent, + "replace": replace, + "plural": plural, + "sha1sum": sha1sum, + "sha256sum": sha256sum, + "adler32sum": adler32sum, + "toString": strval, + + // Wrap Atoi to stop errors. + "atoi": func(a string) int { i, _ := strconv.Atoi(a); return i }, + "int64": toInt64, + "int": toInt, + "float64": toFloat64, + "seq": seq, + "toDecimal": toDecimal, + + //"gt": func(a, b int) bool {return a > b}, + //"gte": func(a, b int) bool {return a >= b}, + //"lt": func(a, b int) bool {return a < b}, + //"lte": func(a, b int) bool {return a <= b}, + + // split "/" foo/bar returns map[int]string{0: foo, 1: bar} + "split": split, + "splitList": func(sep, orig string) []string { return strings.Split(orig, sep) }, + // splitn "/" foo/bar/fuu returns map[int]string{0: foo, 1: bar/fuu} + "splitn": splitn, + "toStrings": strslice, + + "until": until, + "untilStep": untilStep, + + // VERY basic arithmetic. + "add1": func(i interface{}) int64 { return toInt64(i) + 1 }, + "add": func(i ...interface{}) int64 { + var a int64 = 0 + for _, b := range i { + a += toInt64(b) + } + return a + }, + "sub": func(a, b interface{}) int64 { return toInt64(a) - toInt64(b) }, + "div": func(a, b interface{}) int64 { return toInt64(a) / toInt64(b) }, + "mod": func(a, b interface{}) int64 { return toInt64(a) % toInt64(b) }, + "mul": func(a interface{}, v ...interface{}) int64 { + val := toInt64(a) + for _, b := range v { + val = val * toInt64(b) + } + return val + }, + "randInt": func(min, max int) int { return rand.Intn(max-min) + min }, + "biggest": max, + "max": max, + "min": min, + "maxf": maxf, + "minf": minf, + "ceil": ceil, + "floor": floor, + "round": round, + + // string slices. Note that we reverse the order b/c that's better + // for template processing. + "join": join, + "sortAlpha": sortAlpha, + + // Defaults + "default": dfault, + "empty": empty, + "coalesce": coalesce, + "all": all, + "any": any, + "compact": compact, + "mustCompact": mustCompact, + "fromJson": fromJson, + "toJson": toJson, + "toPrettyJson": toPrettyJson, + "toRawJson": toRawJson, + "mustFromJson": mustFromJson, + "mustToJson": mustToJson, + "mustToPrettyJson": mustToPrettyJson, + "mustToRawJson": mustToRawJson, + "ternary": ternary, + + // Reflection + "typeOf": typeOf, + "typeIs": typeIs, + "typeIsLike": typeIsLike, + "kindOf": kindOf, + "kindIs": kindIs, + "deepEqual": reflect.DeepEqual, + + // OS: + "env": os.Getenv, + "expandenv": os.ExpandEnv, + + // Network: + "getHostByName": getHostByName, + + // Paths: + "base": path.Base, + "dir": path.Dir, + "clean": path.Clean, + "ext": path.Ext, + "isAbs": path.IsAbs, + + // Filepaths: + "osBase": filepath.Base, + "osClean": filepath.Clean, + "osDir": filepath.Dir, + "osExt": filepath.Ext, + "osIsAbs": filepath.IsAbs, + + // Encoding: + "b64enc": base64encode, + "b64dec": base64decode, + "b32enc": base32encode, + "b32dec": base32decode, + + // Data Structures: + "tuple": list, // FIXME: with the addition of append/prepend these are no longer immutable. + "list": list, + "dict": dict, + "get": get, + "set": set, + "unset": unset, + "hasKey": hasKey, + "pluck": pluck, + "keys": keys, + "pick": pick, + "omit": omit, + "values": values, + + "append": push, "push": push, + "mustAppend": mustPush, "mustPush": mustPush, + "prepend": prepend, + "mustPrepend": mustPrepend, + "first": first, + "mustFirst": mustFirst, + "rest": rest, + "mustRest": mustRest, + "last": last, + "mustLast": mustLast, + "initial": initial, + "mustInitial": mustInitial, + "reverse": reverse, + "mustReverse": mustReverse, + "uniq": uniq, + "mustUniq": mustUniq, + "without": without, + "mustWithout": mustWithout, + "has": has, + "mustHas": mustHas, + "slice": slice, + "mustSlice": mustSlice, + "concat": concat, + "dig": dig, + "chunk": chunk, + "mustChunk": mustChunk, + + // Flow Control: + "fail": func(msg string) (string, error) { return "", errors.New(msg) }, + + // Regex + "regexMatch": regexMatch, + "mustRegexMatch": mustRegexMatch, + "regexFindAll": regexFindAll, + "mustRegexFindAll": mustRegexFindAll, + "regexFind": regexFind, + "mustRegexFind": mustRegexFind, + "regexReplaceAll": regexReplaceAll, + "mustRegexReplaceAll": mustRegexReplaceAll, + "regexReplaceAllLiteral": regexReplaceAllLiteral, + "mustRegexReplaceAllLiteral": mustRegexReplaceAllLiteral, + "regexSplit": regexSplit, + "mustRegexSplit": mustRegexSplit, + "regexQuoteMeta": regexQuoteMeta, + + // URLs: + "urlParse": urlParse, + "urlJoin": urlJoin, +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/list.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/list.go new file mode 100644 index 000000000000..ca0fbb789328 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/list.go @@ -0,0 +1,464 @@ +package sprig + +import ( + "fmt" + "math" + "reflect" + "sort" +) + +// Reflection is used in these functions so that slices and arrays of strings, +// ints, and other types not implementing []interface{} can be worked with. +// For example, this is useful if you need to work on the output of regexs. + +func list(v ...interface{}) []interface{} { + return v +} + +func push(list interface{}, v interface{}) []interface{} { + l, err := mustPush(list, v) + if err != nil { + panic(err) + } + + return l +} + +func mustPush(list interface{}, v interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + nl := make([]interface{}, l) + for i := 0; i < l; i++ { + nl[i] = l2.Index(i).Interface() + } + + return append(nl, v), nil + + default: + return nil, fmt.Errorf("Cannot push on type %s", tp) + } +} + +func prepend(list interface{}, v interface{}) []interface{} { + l, err := mustPrepend(list, v) + if err != nil { + panic(err) + } + + return l +} + +func mustPrepend(list interface{}, v interface{}) ([]interface{}, error) { + //return append([]interface{}{v}, list...) + + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + nl := make([]interface{}, l) + for i := 0; i < l; i++ { + nl[i] = l2.Index(i).Interface() + } + + return append([]interface{}{v}, nl...), nil + + default: + return nil, fmt.Errorf("Cannot prepend on type %s", tp) + } +} + +func chunk(size int, list interface{}) [][]interface{} { + l, err := mustChunk(size, list) + if err != nil { + panic(err) + } + + return l +} + +func mustChunk(size int, list interface{}) ([][]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + + cs := int(math.Floor(float64(l-1)/float64(size)) + 1) + nl := make([][]interface{}, cs) + + for i := 0; i < cs; i++ { + clen := size + if i == cs-1 { + clen = int(math.Floor(math.Mod(float64(l), float64(size)))) + if clen == 0 { + clen = size + } + } + + nl[i] = make([]interface{}, clen) + + for j := 0; j < clen; j++ { + ix := i*size + j + nl[i][j] = l2.Index(ix).Interface() + } + } + + return nl, nil + + default: + return nil, fmt.Errorf("Cannot chunk type %s", tp) + } +} + +func last(list interface{}) interface{} { + l, err := mustLast(list) + if err != nil { + panic(err) + } + + return l +} + +func mustLast(list interface{}) (interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + if l == 0 { + return nil, nil + } + + return l2.Index(l - 1).Interface(), nil + default: + return nil, fmt.Errorf("Cannot find last on type %s", tp) + } +} + +func first(list interface{}) interface{} { + l, err := mustFirst(list) + if err != nil { + panic(err) + } + + return l +} + +func mustFirst(list interface{}) (interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + if l == 0 { + return nil, nil + } + + return l2.Index(0).Interface(), nil + default: + return nil, fmt.Errorf("Cannot find first on type %s", tp) + } +} + +func rest(list interface{}) []interface{} { + l, err := mustRest(list) + if err != nil { + panic(err) + } + + return l +} + +func mustRest(list interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + if l == 0 { + return nil, nil + } + + nl := make([]interface{}, l-1) + for i := 1; i < l; i++ { + nl[i-1] = l2.Index(i).Interface() + } + + return nl, nil + default: + return nil, fmt.Errorf("Cannot find rest on type %s", tp) + } +} + +func initial(list interface{}) []interface{} { + l, err := mustInitial(list) + if err != nil { + panic(err) + } + + return l +} + +func mustInitial(list interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + if l == 0 { + return nil, nil + } + + nl := make([]interface{}, l-1) + for i := 0; i < l-1; i++ { + nl[i] = l2.Index(i).Interface() + } + + return nl, nil + default: + return nil, fmt.Errorf("Cannot find initial on type %s", tp) + } +} + +func sortAlpha(list interface{}) []string { + k := reflect.Indirect(reflect.ValueOf(list)).Kind() + switch k { + case reflect.Slice, reflect.Array: + a := strslice(list) + s := sort.StringSlice(a) + s.Sort() + return s + } + return []string{strval(list)} +} + +func reverse(v interface{}) []interface{} { + l, err := mustReverse(v) + if err != nil { + panic(err) + } + + return l +} + +func mustReverse(v interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(v).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(v) + + l := l2.Len() + // We do not sort in place because the incoming array should not be altered. + nl := make([]interface{}, l) + for i := 0; i < l; i++ { + nl[l-i-1] = l2.Index(i).Interface() + } + + return nl, nil + default: + return nil, fmt.Errorf("Cannot find reverse on type %s", tp) + } +} + +func compact(list interface{}) []interface{} { + l, err := mustCompact(list) + if err != nil { + panic(err) + } + + return l +} + +func mustCompact(list interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + nl := []interface{}{} + var item interface{} + for i := 0; i < l; i++ { + item = l2.Index(i).Interface() + if !empty(item) { + nl = append(nl, item) + } + } + + return nl, nil + default: + return nil, fmt.Errorf("Cannot compact on type %s", tp) + } +} + +func uniq(list interface{}) []interface{} { + l, err := mustUniq(list) + if err != nil { + panic(err) + } + + return l +} + +func mustUniq(list interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + dest := []interface{}{} + var item interface{} + for i := 0; i < l; i++ { + item = l2.Index(i).Interface() + if !inList(dest, item) { + dest = append(dest, item) + } + } + + return dest, nil + default: + return nil, fmt.Errorf("Cannot find uniq on type %s", tp) + } +} + +func inList(haystack []interface{}, needle interface{}) bool { + for _, h := range haystack { + if reflect.DeepEqual(needle, h) { + return true + } + } + return false +} + +func without(list interface{}, omit ...interface{}) []interface{} { + l, err := mustWithout(list, omit...) + if err != nil { + panic(err) + } + + return l +} + +func mustWithout(list interface{}, omit ...interface{}) ([]interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + res := []interface{}{} + var item interface{} + for i := 0; i < l; i++ { + item = l2.Index(i).Interface() + if !inList(omit, item) { + res = append(res, item) + } + } + + return res, nil + default: + return nil, fmt.Errorf("Cannot find without on type %s", tp) + } +} + +func has(needle interface{}, haystack interface{}) bool { + l, err := mustHas(needle, haystack) + if err != nil { + panic(err) + } + + return l +} + +func mustHas(needle interface{}, haystack interface{}) (bool, error) { + if haystack == nil { + return false, nil + } + tp := reflect.TypeOf(haystack).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(haystack) + var item interface{} + l := l2.Len() + for i := 0; i < l; i++ { + item = l2.Index(i).Interface() + if reflect.DeepEqual(needle, item) { + return true, nil + } + } + + return false, nil + default: + return false, fmt.Errorf("Cannot find has on type %s", tp) + } +} + +// $list := [1, 2, 3, 4, 5] +// slice $list -> list[0:5] = list[:] +// slice $list 0 3 -> list[0:3] = list[:3] +// slice $list 3 5 -> list[3:5] +// slice $list 3 -> list[3:5] = list[3:] +func slice(list interface{}, indices ...interface{}) interface{} { + l, err := mustSlice(list, indices...) + if err != nil { + panic(err) + } + + return l +} + +func mustSlice(list interface{}, indices ...interface{}) (interface{}, error) { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + + l := l2.Len() + if l == 0 { + return nil, nil + } + + var start, end int + if len(indices) > 0 { + start = toInt(indices[0]) + } + if len(indices) < 2 { + end = l + } else { + end = toInt(indices[1]) + } + + return l2.Slice(start, end).Interface(), nil + default: + return nil, fmt.Errorf("list should be type of slice or array but %s", tp) + } +} + +func concat(lists ...interface{}) interface{} { + var res []interface{} + for _, list := range lists { + tp := reflect.TypeOf(list).Kind() + switch tp { + case reflect.Slice, reflect.Array: + l2 := reflect.ValueOf(list) + for i := 0; i < l2.Len(); i++ { + res = append(res, l2.Index(i).Interface()) + } + default: + panic(fmt.Sprintf("Cannot concat type %s as list", tp)) + } + } + return res +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/network.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/network.go new file mode 100644 index 000000000000..108d78a94627 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/network.go @@ -0,0 +1,12 @@ +package sprig + +import ( + "math/rand" + "net" +) + +func getHostByName(name string) string { + addrs, _ := net.LookupHost(name) + //TODO: add error handing when release v3 comes out + return addrs[rand.Intn(len(addrs))] +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/numeric.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/numeric.go new file mode 100644 index 000000000000..98cbb37a1933 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/numeric.go @@ -0,0 +1,228 @@ +package sprig + +import ( + "fmt" + "math" + "reflect" + "strconv" + "strings" +) + +// toFloat64 converts 64-bit floats +func toFloat64(v interface{}) float64 { + if str, ok := v.(string); ok { + iv, err := strconv.ParseFloat(str, 64) + if err != nil { + return 0 + } + return iv + } + + val := reflect.Indirect(reflect.ValueOf(v)) + switch val.Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return float64(val.Int()) + case reflect.Uint8, reflect.Uint16, reflect.Uint32: + return float64(val.Uint()) + case reflect.Uint, reflect.Uint64: + return float64(val.Uint()) + case reflect.Float32, reflect.Float64: + return val.Float() + case reflect.Bool: + if val.Bool() { + return 1 + } + return 0 + default: + return 0 + } +} + +func toInt(v interface{}) int { + //It's not optimal. Bud I don't want duplicate toInt64 code. + return int(toInt64(v)) +} + +// toInt64 converts integer types to 64-bit integers +func toInt64(v interface{}) int64 { + if str, ok := v.(string); ok { + iv, err := strconv.ParseInt(str, 10, 64) + if err != nil { + return 0 + } + return iv + } + + val := reflect.Indirect(reflect.ValueOf(v)) + switch val.Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return val.Int() + case reflect.Uint8, reflect.Uint16, reflect.Uint32: + return int64(val.Uint()) + case reflect.Uint, reflect.Uint64: + tv := val.Uint() + if tv <= math.MaxInt64 { + return int64(tv) + } + // TODO: What is the sensible thing to do here? + return math.MaxInt64 + case reflect.Float32, reflect.Float64: + return int64(val.Float()) + case reflect.Bool: + if val.Bool() { + return 1 + } + return 0 + default: + return 0 + } +} + +func max(a interface{}, i ...interface{}) int64 { + aa := toInt64(a) + for _, b := range i { + bb := toInt64(b) + if bb > aa { + aa = bb + } + } + return aa +} + +func maxf(a interface{}, i ...interface{}) float64 { + aa := toFloat64(a) + for _, b := range i { + bb := toFloat64(b) + aa = math.Max(aa, bb) + } + return aa +} + +func min(a interface{}, i ...interface{}) int64 { + aa := toInt64(a) + for _, b := range i { + bb := toInt64(b) + if bb < aa { + aa = bb + } + } + return aa +} + +func minf(a interface{}, i ...interface{}) float64 { + aa := toFloat64(a) + for _, b := range i { + bb := toFloat64(b) + aa = math.Min(aa, bb) + } + return aa +} + +func until(count int) []int { + step := 1 + if count < 0 { + step = -1 + } + return untilStep(0, count, step) +} + +func untilStep(start, stop, step int) []int { + v := []int{} + + if stop < start { + if step >= 0 { + return v + } + for i := start; i > stop; i += step { + v = append(v, i) + } + return v + } + + if step <= 0 { + return v + } + for i := start; i < stop; i += step { + v = append(v, i) + } + return v +} + +func floor(a interface{}) float64 { + aa := toFloat64(a) + return math.Floor(aa) +} + +func ceil(a interface{}) float64 { + aa := toFloat64(a) + return math.Ceil(aa) +} + +func round(a interface{}, p int, rOpt ...float64) float64 { + roundOn := .5 + if len(rOpt) > 0 { + roundOn = rOpt[0] + } + val := toFloat64(a) + places := toFloat64(p) + + var round float64 + pow := math.Pow(10, places) + digit := pow * val + _, div := math.Modf(digit) + if div >= roundOn { + round = math.Ceil(digit) + } else { + round = math.Floor(digit) + } + return round / pow +} + +// converts unix octal to decimal +func toDecimal(v interface{}) int64 { + result, err := strconv.ParseInt(fmt.Sprint(v), 8, 64) + if err != nil { + return 0 + } + return result +} + +func seq(params ...int) string { + increment := 1 + switch len(params) { + case 0: + return "" + case 1: + start := 1 + end := params[0] + if end < start { + increment = -1 + } + return intArrayToString(untilStep(start, end+increment, increment), " ") + case 3: + start := params[0] + end := params[2] + step := params[1] + if end < start { + increment = -1 + if step > 0 { + return "" + } + } + return intArrayToString(untilStep(start, end+increment, step), " ") + case 2: + start := params[0] + end := params[1] + step := 1 + if end < start { + step = -1 + } + return intArrayToString(untilStep(start, end+step, step), " ") + default: + return "" + } +} + +func intArrayToString(slice []int, delimeter string) string { + return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(slice)), delimeter), "[]") +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/reflect.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/reflect.go new file mode 100644 index 000000000000..8a65c132f08f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/reflect.go @@ -0,0 +1,28 @@ +package sprig + +import ( + "fmt" + "reflect" +) + +// typeIs returns true if the src is the type named in target. +func typeIs(target string, src interface{}) bool { + return target == typeOf(src) +} + +func typeIsLike(target string, src interface{}) bool { + t := typeOf(src) + return target == t || "*"+target == t +} + +func typeOf(src interface{}) string { + return fmt.Sprintf("%T", src) +} + +func kindIs(target string, src interface{}) bool { + return target == kindOf(src) +} + +func kindOf(src interface{}) string { + return reflect.ValueOf(src).Kind().String() +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/regex.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/regex.go new file mode 100644 index 000000000000..fab551018977 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/regex.go @@ -0,0 +1,83 @@ +package sprig + +import ( + "regexp" +) + +func regexMatch(regex string, s string) bool { + match, _ := regexp.MatchString(regex, s) + return match +} + +func mustRegexMatch(regex string, s string) (bool, error) { + return regexp.MatchString(regex, s) +} + +func regexFindAll(regex string, s string, n int) []string { + r := regexp.MustCompile(regex) + return r.FindAllString(s, n) +} + +func mustRegexFindAll(regex string, s string, n int) ([]string, error) { + r, err := regexp.Compile(regex) + if err != nil { + return []string{}, err + } + return r.FindAllString(s, n), nil +} + +func regexFind(regex string, s string) string { + r := regexp.MustCompile(regex) + return r.FindString(s) +} + +func mustRegexFind(regex string, s string) (string, error) { + r, err := regexp.Compile(regex) + if err != nil { + return "", err + } + return r.FindString(s), nil +} + +func regexReplaceAll(regex string, s string, repl string) string { + r := regexp.MustCompile(regex) + return r.ReplaceAllString(s, repl) +} + +func mustRegexReplaceAll(regex string, s string, repl string) (string, error) { + r, err := regexp.Compile(regex) + if err != nil { + return "", err + } + return r.ReplaceAllString(s, repl), nil +} + +func regexReplaceAllLiteral(regex string, s string, repl string) string { + r := regexp.MustCompile(regex) + return r.ReplaceAllLiteralString(s, repl) +} + +func mustRegexReplaceAllLiteral(regex string, s string, repl string) (string, error) { + r, err := regexp.Compile(regex) + if err != nil { + return "", err + } + return r.ReplaceAllLiteralString(s, repl), nil +} + +func regexSplit(regex string, s string, n int) []string { + r := regexp.MustCompile(regex) + return r.Split(s, n) +} + +func mustRegexSplit(regex string, s string, n int) ([]string, error) { + r, err := regexp.Compile(regex) + if err != nil { + return []string{}, err + } + return r.Split(s, n), nil +} + +func regexQuoteMeta(s string) string { + return regexp.QuoteMeta(s) +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/strings.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/strings.go new file mode 100644 index 000000000000..3c62d6b6f21f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/strings.go @@ -0,0 +1,189 @@ +package sprig + +import ( + "encoding/base32" + "encoding/base64" + "fmt" + "reflect" + "strconv" + "strings" +) + +func base64encode(v string) string { + return base64.StdEncoding.EncodeToString([]byte(v)) +} + +func base64decode(v string) string { + data, err := base64.StdEncoding.DecodeString(v) + if err != nil { + return err.Error() + } + return string(data) +} + +func base32encode(v string) string { + return base32.StdEncoding.EncodeToString([]byte(v)) +} + +func base32decode(v string) string { + data, err := base32.StdEncoding.DecodeString(v) + if err != nil { + return err.Error() + } + return string(data) +} + +func quote(str ...interface{}) string { + out := make([]string, 0, len(str)) + for _, s := range str { + if s != nil { + out = append(out, fmt.Sprintf("%q", strval(s))) + } + } + return strings.Join(out, " ") +} + +func squote(str ...interface{}) string { + out := make([]string, 0, len(str)) + for _, s := range str { + if s != nil { + out = append(out, fmt.Sprintf("'%v'", s)) + } + } + return strings.Join(out, " ") +} + +func cat(v ...interface{}) string { + v = removeNilElements(v) + r := strings.TrimSpace(strings.Repeat("%v ", len(v))) + return fmt.Sprintf(r, v...) +} + +func indent(spaces int, v string) string { + pad := strings.Repeat(" ", spaces) + return pad + strings.Replace(v, "\n", "\n"+pad, -1) +} + +func nindent(spaces int, v string) string { + return "\n" + indent(spaces, v) +} + +func replace(old, new, src string) string { + return strings.Replace(src, old, new, -1) +} + +func plural(one, many string, count int) string { + if count == 1 { + return one + } + return many +} + +func strslice(v interface{}) []string { + switch v := v.(type) { + case []string: + return v + case []interface{}: + b := make([]string, 0, len(v)) + for _, s := range v { + if s != nil { + b = append(b, strval(s)) + } + } + return b + default: + val := reflect.ValueOf(v) + switch val.Kind() { + case reflect.Array, reflect.Slice: + l := val.Len() + b := make([]string, 0, l) + for i := 0; i < l; i++ { + value := val.Index(i).Interface() + if value != nil { + b = append(b, strval(value)) + } + } + return b + default: + if v == nil { + return []string{} + } + + return []string{strval(v)} + } + } +} + +func removeNilElements(v []interface{}) []interface{} { + newSlice := make([]interface{}, 0, len(v)) + for _, i := range v { + if i != nil { + newSlice = append(newSlice, i) + } + } + return newSlice +} + +func strval(v interface{}) string { + switch v := v.(type) { + case string: + return v + case []byte: + return string(v) + case error: + return v.Error() + case fmt.Stringer: + return v.String() + default: + return fmt.Sprintf("%v", v) + } +} + +func trunc(c int, s string) string { + if c < 0 && len(s)+c > 0 { + return s[len(s)+c:] + } + if c >= 0 && len(s) > c { + return s[:c] + } + return s +} + +func join(sep string, v interface{}) string { + return strings.Join(strslice(v), sep) +} + +func split(sep, orig string) map[string]string { + parts := strings.Split(orig, sep) + res := make(map[string]string, len(parts)) + for i, v := range parts { + res["_"+strconv.Itoa(i)] = v + } + return res +} + +func splitn(sep string, n int, orig string) map[string]string { + parts := strings.SplitN(orig, sep, n) + res := make(map[string]string, len(parts)) + for i, v := range parts { + res["_"+strconv.Itoa(i)] = v + } + return res +} + +// substring creates a substring of the given string. +// +// If start is < 0, this calls string[:end]. +// +// If start is >= 0 and end < 0 or end bigger than s length, this calls string[start:] +// +// Otherwise, this calls string[start, end]. +func substring(start, end int, s string) string { + if start < 0 { + return s[:end] + } + if end < 0 || end > len(s) { + return s[start:] + } + return s[start:end] +} diff --git a/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/url.go b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/url.go new file mode 100644 index 000000000000..b8e120e19ba4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/go-task/slim-sprig/url.go @@ -0,0 +1,66 @@ +package sprig + +import ( + "fmt" + "net/url" + "reflect" +) + +func dictGetOrEmpty(dict map[string]interface{}, key string) string { + value, ok := dict[key] + if !ok { + return "" + } + tp := reflect.TypeOf(value).Kind() + if tp != reflect.String { + panic(fmt.Sprintf("unable to parse %s key, must be of type string, but %s found", key, tp.String())) + } + return reflect.ValueOf(value).String() +} + +// parses given URL to return dict object +func urlParse(v string) map[string]interface{} { + dict := map[string]interface{}{} + parsedURL, err := url.Parse(v) + if err != nil { + panic(fmt.Sprintf("unable to parse url: %s", err)) + } + dict["scheme"] = parsedURL.Scheme + dict["host"] = parsedURL.Host + dict["hostname"] = parsedURL.Hostname() + dict["path"] = parsedURL.Path + dict["query"] = parsedURL.RawQuery + dict["opaque"] = parsedURL.Opaque + dict["fragment"] = parsedURL.Fragment + if parsedURL.User != nil { + dict["userinfo"] = parsedURL.User.String() + } else { + dict["userinfo"] = "" + } + + return dict +} + +// join given dict to URL string +func urlJoin(d map[string]interface{}) string { + resURL := url.URL{ + Scheme: dictGetOrEmpty(d, "scheme"), + Host: dictGetOrEmpty(d, "host"), + Path: dictGetOrEmpty(d, "path"), + RawQuery: dictGetOrEmpty(d, "query"), + Opaque: dictGetOrEmpty(d, "opaque"), + Fragment: dictGetOrEmpty(d, "fragment"), + } + userinfo := dictGetOrEmpty(d, "userinfo") + var user *url.Userinfo + if userinfo != "" { + tempURL, err := url.Parse(fmt.Sprintf("proto://%s@host", userinfo)) + if err != nil { + panic(fmt.Sprintf("unable to parse userinfo in dict: %s", err)) + } + user = tempURL.User + } + + resURL.User = user + return resURL.String() +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/AUTHORS b/cluster-autoscaler/vendor/github.com/google/pprof/AUTHORS new file mode 100644 index 000000000000..fd736cb1cfb4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/AUTHORS @@ -0,0 +1,7 @@ +# This is the official list of pprof authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. +Google Inc. \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/CONTRIBUTORS b/cluster-autoscaler/vendor/github.com/google/pprof/CONTRIBUTORS new file mode 100644 index 000000000000..8c8c37d2c8f5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/CONTRIBUTORS @@ -0,0 +1,16 @@ +# People who have agreed to one of the CLAs and can contribute patches. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# https://developers.google.com/open-source/cla/individual +# https://developers.google.com/open-source/cla/corporate +# +# Names should be added to this file as: +# Name +Raul Silvera +Tipp Moseley +Hyoun Kyu Cho +Martin Spier +Taco de Wolff +Andrew Hunter diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/LICENSE b/cluster-autoscaler/vendor/github.com/google/pprof/LICENSE new file mode 100644 index 000000000000..d64569567334 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/encode.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/encode.go new file mode 100644 index 000000000000..ab7f03ae2677 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/encode.go @@ -0,0 +1,567 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "errors" + "sort" +) + +func (p *Profile) decoder() []decoder { + return profileDecoder +} + +// preEncode populates the unexported fields to be used by encode +// (with suffix X) from the corresponding exported fields. The +// exported fields are cleared up to facilitate testing. +func (p *Profile) preEncode() { + strings := make(map[string]int) + addString(strings, "") + + for _, st := range p.SampleType { + st.typeX = addString(strings, st.Type) + st.unitX = addString(strings, st.Unit) + } + + for _, s := range p.Sample { + s.labelX = nil + var keys []string + for k := range s.Label { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + vs := s.Label[k] + for _, v := range vs { + s.labelX = append(s.labelX, + label{ + keyX: addString(strings, k), + strX: addString(strings, v), + }, + ) + } + } + var numKeys []string + for k := range s.NumLabel { + numKeys = append(numKeys, k) + } + sort.Strings(numKeys) + for _, k := range numKeys { + keyX := addString(strings, k) + vs := s.NumLabel[k] + units := s.NumUnit[k] + for i, v := range vs { + var unitX int64 + if len(units) != 0 { + unitX = addString(strings, units[i]) + } + s.labelX = append(s.labelX, + label{ + keyX: keyX, + numX: v, + unitX: unitX, + }, + ) + } + } + s.locationIDX = make([]uint64, len(s.Location)) + for i, loc := range s.Location { + s.locationIDX[i] = loc.ID + } + } + + for _, m := range p.Mapping { + m.fileX = addString(strings, m.File) + m.buildIDX = addString(strings, m.BuildID) + } + + for _, l := range p.Location { + for i, ln := range l.Line { + if ln.Function != nil { + l.Line[i].functionIDX = ln.Function.ID + } else { + l.Line[i].functionIDX = 0 + } + } + if l.Mapping != nil { + l.mappingIDX = l.Mapping.ID + } else { + l.mappingIDX = 0 + } + } + for _, f := range p.Function { + f.nameX = addString(strings, f.Name) + f.systemNameX = addString(strings, f.SystemName) + f.filenameX = addString(strings, f.Filename) + } + + p.dropFramesX = addString(strings, p.DropFrames) + p.keepFramesX = addString(strings, p.KeepFrames) + + if pt := p.PeriodType; pt != nil { + pt.typeX = addString(strings, pt.Type) + pt.unitX = addString(strings, pt.Unit) + } + + p.commentX = nil + for _, c := range p.Comments { + p.commentX = append(p.commentX, addString(strings, c)) + } + + p.defaultSampleTypeX = addString(strings, p.DefaultSampleType) + + p.stringTable = make([]string, len(strings)) + for s, i := range strings { + p.stringTable[i] = s + } +} + +func (p *Profile) encode(b *buffer) { + for _, x := range p.SampleType { + encodeMessage(b, 1, x) + } + for _, x := range p.Sample { + encodeMessage(b, 2, x) + } + for _, x := range p.Mapping { + encodeMessage(b, 3, x) + } + for _, x := range p.Location { + encodeMessage(b, 4, x) + } + for _, x := range p.Function { + encodeMessage(b, 5, x) + } + encodeStrings(b, 6, p.stringTable) + encodeInt64Opt(b, 7, p.dropFramesX) + encodeInt64Opt(b, 8, p.keepFramesX) + encodeInt64Opt(b, 9, p.TimeNanos) + encodeInt64Opt(b, 10, p.DurationNanos) + if pt := p.PeriodType; pt != nil && (pt.typeX != 0 || pt.unitX != 0) { + encodeMessage(b, 11, p.PeriodType) + } + encodeInt64Opt(b, 12, p.Period) + encodeInt64s(b, 13, p.commentX) + encodeInt64(b, 14, p.defaultSampleTypeX) +} + +var profileDecoder = []decoder{ + nil, // 0 + // repeated ValueType sample_type = 1 + func(b *buffer, m message) error { + x := new(ValueType) + pp := m.(*Profile) + pp.SampleType = append(pp.SampleType, x) + return decodeMessage(b, x) + }, + // repeated Sample sample = 2 + func(b *buffer, m message) error { + x := new(Sample) + pp := m.(*Profile) + pp.Sample = append(pp.Sample, x) + return decodeMessage(b, x) + }, + // repeated Mapping mapping = 3 + func(b *buffer, m message) error { + x := new(Mapping) + pp := m.(*Profile) + pp.Mapping = append(pp.Mapping, x) + return decodeMessage(b, x) + }, + // repeated Location location = 4 + func(b *buffer, m message) error { + x := new(Location) + x.Line = make([]Line, 0, 8) // Pre-allocate Line buffer + pp := m.(*Profile) + pp.Location = append(pp.Location, x) + err := decodeMessage(b, x) + var tmp []Line + x.Line = append(tmp, x.Line...) // Shrink to allocated size + return err + }, + // repeated Function function = 5 + func(b *buffer, m message) error { + x := new(Function) + pp := m.(*Profile) + pp.Function = append(pp.Function, x) + return decodeMessage(b, x) + }, + // repeated string string_table = 6 + func(b *buffer, m message) error { + err := decodeStrings(b, &m.(*Profile).stringTable) + if err != nil { + return err + } + if m.(*Profile).stringTable[0] != "" { + return errors.New("string_table[0] must be ''") + } + return nil + }, + // int64 drop_frames = 7 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).dropFramesX) }, + // int64 keep_frames = 8 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).keepFramesX) }, + // int64 time_nanos = 9 + func(b *buffer, m message) error { + if m.(*Profile).TimeNanos != 0 { + return errConcatProfile + } + return decodeInt64(b, &m.(*Profile).TimeNanos) + }, + // int64 duration_nanos = 10 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).DurationNanos) }, + // ValueType period_type = 11 + func(b *buffer, m message) error { + x := new(ValueType) + pp := m.(*Profile) + pp.PeriodType = x + return decodeMessage(b, x) + }, + // int64 period = 12 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).Period) }, + // repeated int64 comment = 13 + func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Profile).commentX) }, + // int64 defaultSampleType = 14 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Profile).defaultSampleTypeX) }, +} + +// postDecode takes the unexported fields populated by decode (with +// suffix X) and populates the corresponding exported fields. +// The unexported fields are cleared up to facilitate testing. +func (p *Profile) postDecode() error { + var err error + mappings := make(map[uint64]*Mapping, len(p.Mapping)) + mappingIds := make([]*Mapping, len(p.Mapping)+1) + for _, m := range p.Mapping { + m.File, err = getString(p.stringTable, &m.fileX, err) + m.BuildID, err = getString(p.stringTable, &m.buildIDX, err) + if m.ID < uint64(len(mappingIds)) { + mappingIds[m.ID] = m + } else { + mappings[m.ID] = m + } + } + + functions := make(map[uint64]*Function, len(p.Function)) + functionIds := make([]*Function, len(p.Function)+1) + for _, f := range p.Function { + f.Name, err = getString(p.stringTable, &f.nameX, err) + f.SystemName, err = getString(p.stringTable, &f.systemNameX, err) + f.Filename, err = getString(p.stringTable, &f.filenameX, err) + if f.ID < uint64(len(functionIds)) { + functionIds[f.ID] = f + } else { + functions[f.ID] = f + } + } + + locations := make(map[uint64]*Location, len(p.Location)) + locationIds := make([]*Location, len(p.Location)+1) + for _, l := range p.Location { + if id := l.mappingIDX; id < uint64(len(mappingIds)) { + l.Mapping = mappingIds[id] + } else { + l.Mapping = mappings[id] + } + l.mappingIDX = 0 + for i, ln := range l.Line { + if id := ln.functionIDX; id != 0 { + l.Line[i].functionIDX = 0 + if id < uint64(len(functionIds)) { + l.Line[i].Function = functionIds[id] + } else { + l.Line[i].Function = functions[id] + } + } + } + if l.ID < uint64(len(locationIds)) { + locationIds[l.ID] = l + } else { + locations[l.ID] = l + } + } + + for _, st := range p.SampleType { + st.Type, err = getString(p.stringTable, &st.typeX, err) + st.Unit, err = getString(p.stringTable, &st.unitX, err) + } + + for _, s := range p.Sample { + labels := make(map[string][]string, len(s.labelX)) + numLabels := make(map[string][]int64, len(s.labelX)) + numUnits := make(map[string][]string, len(s.labelX)) + for _, l := range s.labelX { + var key, value string + key, err = getString(p.stringTable, &l.keyX, err) + if l.strX != 0 { + value, err = getString(p.stringTable, &l.strX, err) + labels[key] = append(labels[key], value) + } else if l.numX != 0 || l.unitX != 0 { + numValues := numLabels[key] + units := numUnits[key] + if l.unitX != 0 { + var unit string + unit, err = getString(p.stringTable, &l.unitX, err) + units = padStringArray(units, len(numValues)) + numUnits[key] = append(units, unit) + } + numLabels[key] = append(numLabels[key], l.numX) + } + } + if len(labels) > 0 { + s.Label = labels + } + if len(numLabels) > 0 { + s.NumLabel = numLabels + for key, units := range numUnits { + if len(units) > 0 { + numUnits[key] = padStringArray(units, len(numLabels[key])) + } + } + s.NumUnit = numUnits + } + s.Location = make([]*Location, len(s.locationIDX)) + for i, lid := range s.locationIDX { + if lid < uint64(len(locationIds)) { + s.Location[i] = locationIds[lid] + } else { + s.Location[i] = locations[lid] + } + } + s.locationIDX = nil + } + + p.DropFrames, err = getString(p.stringTable, &p.dropFramesX, err) + p.KeepFrames, err = getString(p.stringTable, &p.keepFramesX, err) + + if pt := p.PeriodType; pt == nil { + p.PeriodType = &ValueType{} + } + + if pt := p.PeriodType; pt != nil { + pt.Type, err = getString(p.stringTable, &pt.typeX, err) + pt.Unit, err = getString(p.stringTable, &pt.unitX, err) + } + + for _, i := range p.commentX { + var c string + c, err = getString(p.stringTable, &i, err) + p.Comments = append(p.Comments, c) + } + + p.commentX = nil + p.DefaultSampleType, err = getString(p.stringTable, &p.defaultSampleTypeX, err) + p.stringTable = nil + return err +} + +// padStringArray pads arr with enough empty strings to make arr +// length l when arr's length is less than l. +func padStringArray(arr []string, l int) []string { + if l <= len(arr) { + return arr + } + return append(arr, make([]string, l-len(arr))...) +} + +func (p *ValueType) decoder() []decoder { + return valueTypeDecoder +} + +func (p *ValueType) encode(b *buffer) { + encodeInt64Opt(b, 1, p.typeX) + encodeInt64Opt(b, 2, p.unitX) +} + +var valueTypeDecoder = []decoder{ + nil, // 0 + // optional int64 type = 1 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).typeX) }, + // optional int64 unit = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*ValueType).unitX) }, +} + +func (p *Sample) decoder() []decoder { + return sampleDecoder +} + +func (p *Sample) encode(b *buffer) { + encodeUint64s(b, 1, p.locationIDX) + encodeInt64s(b, 2, p.Value) + for _, x := range p.labelX { + encodeMessage(b, 3, x) + } +} + +var sampleDecoder = []decoder{ + nil, // 0 + // repeated uint64 location = 1 + func(b *buffer, m message) error { return decodeUint64s(b, &m.(*Sample).locationIDX) }, + // repeated int64 value = 2 + func(b *buffer, m message) error { return decodeInt64s(b, &m.(*Sample).Value) }, + // repeated Label label = 3 + func(b *buffer, m message) error { + s := m.(*Sample) + n := len(s.labelX) + s.labelX = append(s.labelX, label{}) + return decodeMessage(b, &s.labelX[n]) + }, +} + +func (p label) decoder() []decoder { + return labelDecoder +} + +func (p label) encode(b *buffer) { + encodeInt64Opt(b, 1, p.keyX) + encodeInt64Opt(b, 2, p.strX) + encodeInt64Opt(b, 3, p.numX) + encodeInt64Opt(b, 4, p.unitX) +} + +var labelDecoder = []decoder{ + nil, // 0 + // optional int64 key = 1 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).keyX) }, + // optional int64 str = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).strX) }, + // optional int64 num = 3 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).numX) }, + // optional int64 num = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*label).unitX) }, +} + +func (p *Mapping) decoder() []decoder { + return mappingDecoder +} + +func (p *Mapping) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeUint64Opt(b, 2, p.Start) + encodeUint64Opt(b, 3, p.Limit) + encodeUint64Opt(b, 4, p.Offset) + encodeInt64Opt(b, 5, p.fileX) + encodeInt64Opt(b, 6, p.buildIDX) + encodeBoolOpt(b, 7, p.HasFunctions) + encodeBoolOpt(b, 8, p.HasFilenames) + encodeBoolOpt(b, 9, p.HasLineNumbers) + encodeBoolOpt(b, 10, p.HasInlineFrames) +} + +var mappingDecoder = []decoder{ + nil, // 0 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).ID) }, // optional uint64 id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Start) }, // optional uint64 memory_offset = 2 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Limit) }, // optional uint64 memory_limit = 3 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Mapping).Offset) }, // optional uint64 file_offset = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).fileX) }, // optional int64 filename = 5 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Mapping).buildIDX) }, // optional int64 build_id = 6 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFunctions) }, // optional bool has_functions = 7 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasFilenames) }, // optional bool has_filenames = 8 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasLineNumbers) }, // optional bool has_line_numbers = 9 + func(b *buffer, m message) error { return decodeBool(b, &m.(*Mapping).HasInlineFrames) }, // optional bool has_inline_frames = 10 +} + +func (p *Location) decoder() []decoder { + return locationDecoder +} + +func (p *Location) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeUint64Opt(b, 2, p.mappingIDX) + encodeUint64Opt(b, 3, p.Address) + for i := range p.Line { + encodeMessage(b, 4, &p.Line[i]) + } + encodeBoolOpt(b, 5, p.IsFolded) +} + +var locationDecoder = []decoder{ + nil, // 0 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).ID) }, // optional uint64 id = 1; + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).mappingIDX) }, // optional uint64 mapping_id = 2; + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Location).Address) }, // optional uint64 address = 3; + func(b *buffer, m message) error { // repeated Line line = 4 + pp := m.(*Location) + n := len(pp.Line) + pp.Line = append(pp.Line, Line{}) + return decodeMessage(b, &pp.Line[n]) + }, + func(b *buffer, m message) error { return decodeBool(b, &m.(*Location).IsFolded) }, // optional bool is_folded = 5; +} + +func (p *Line) decoder() []decoder { + return lineDecoder +} + +func (p *Line) encode(b *buffer) { + encodeUint64Opt(b, 1, p.functionIDX) + encodeInt64Opt(b, 2, p.Line) +} + +var lineDecoder = []decoder{ + nil, // 0 + // optional uint64 function_id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Line).functionIDX) }, + // optional int64 line = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Line).Line) }, +} + +func (p *Function) decoder() []decoder { + return functionDecoder +} + +func (p *Function) encode(b *buffer) { + encodeUint64Opt(b, 1, p.ID) + encodeInt64Opt(b, 2, p.nameX) + encodeInt64Opt(b, 3, p.systemNameX) + encodeInt64Opt(b, 4, p.filenameX) + encodeInt64Opt(b, 5, p.StartLine) +} + +var functionDecoder = []decoder{ + nil, // 0 + // optional uint64 id = 1 + func(b *buffer, m message) error { return decodeUint64(b, &m.(*Function).ID) }, + // optional int64 function_name = 2 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).nameX) }, + // optional int64 function_system_name = 3 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).systemNameX) }, + // repeated int64 filename = 4 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).filenameX) }, + // optional int64 start_line = 5 + func(b *buffer, m message) error { return decodeInt64(b, &m.(*Function).StartLine) }, +} + +func addString(strings map[string]int, s string) int64 { + i, ok := strings[s] + if !ok { + i = len(strings) + strings[s] = i + } + return int64(i) +} + +func getString(strings []string, strng *int64, err error) (string, error) { + if err != nil { + return "", err + } + s := int(*strng) + if s < 0 || s >= len(strings) { + return "", errMalformed + } + *strng = 0 + return strings[s], nil +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/filter.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/filter.go new file mode 100644 index 000000000000..ea8e66c68d25 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/filter.go @@ -0,0 +1,270 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +// Implements methods to filter samples from profiles. + +import "regexp" + +// FilterSamplesByName filters the samples in a profile and only keeps +// samples where at least one frame matches focus but none match ignore. +// Returns true is the corresponding regexp matched at least one sample. +func (p *Profile) FilterSamplesByName(focus, ignore, hide, show *regexp.Regexp) (fm, im, hm, hnm bool) { + focusOrIgnore := make(map[uint64]bool) + hidden := make(map[uint64]bool) + for _, l := range p.Location { + if ignore != nil && l.matchesName(ignore) { + im = true + focusOrIgnore[l.ID] = false + } else if focus == nil || l.matchesName(focus) { + fm = true + focusOrIgnore[l.ID] = true + } + + if hide != nil && l.matchesName(hide) { + hm = true + l.Line = l.unmatchedLines(hide) + if len(l.Line) == 0 { + hidden[l.ID] = true + } + } + if show != nil { + l.Line = l.matchedLines(show) + if len(l.Line) == 0 { + hidden[l.ID] = true + } else { + hnm = true + } + } + } + + s := make([]*Sample, 0, len(p.Sample)) + for _, sample := range p.Sample { + if focusedAndNotIgnored(sample.Location, focusOrIgnore) { + if len(hidden) > 0 { + var locs []*Location + for _, loc := range sample.Location { + if !hidden[loc.ID] { + locs = append(locs, loc) + } + } + if len(locs) == 0 { + // Remove sample with no locations (by not adding it to s). + continue + } + sample.Location = locs + } + s = append(s, sample) + } + } + p.Sample = s + + return +} + +// ShowFrom drops all stack frames above the highest matching frame and returns +// whether a match was found. If showFrom is nil it returns false and does not +// modify the profile. +// +// Example: consider a sample with frames [A, B, C, B], where A is the root. +// ShowFrom(nil) returns false and has frames [A, B, C, B]. +// ShowFrom(A) returns true and has frames [A, B, C, B]. +// ShowFrom(B) returns true and has frames [B, C, B]. +// ShowFrom(C) returns true and has frames [C, B]. +// ShowFrom(D) returns false and drops the sample because no frames remain. +func (p *Profile) ShowFrom(showFrom *regexp.Regexp) (matched bool) { + if showFrom == nil { + return false + } + // showFromLocs stores location IDs that matched ShowFrom. + showFromLocs := make(map[uint64]bool) + // Apply to locations. + for _, loc := range p.Location { + if filterShowFromLocation(loc, showFrom) { + showFromLocs[loc.ID] = true + matched = true + } + } + // For all samples, strip locations after the highest matching one. + s := make([]*Sample, 0, len(p.Sample)) + for _, sample := range p.Sample { + for i := len(sample.Location) - 1; i >= 0; i-- { + if showFromLocs[sample.Location[i].ID] { + sample.Location = sample.Location[:i+1] + s = append(s, sample) + break + } + } + } + p.Sample = s + return matched +} + +// filterShowFromLocation tests a showFrom regex against a location, removes +// lines after the last match and returns whether a match was found. If the +// mapping is matched, then all lines are kept. +func filterShowFromLocation(loc *Location, showFrom *regexp.Regexp) bool { + if m := loc.Mapping; m != nil && showFrom.MatchString(m.File) { + return true + } + if i := loc.lastMatchedLineIndex(showFrom); i >= 0 { + loc.Line = loc.Line[:i+1] + return true + } + return false +} + +// lastMatchedLineIndex returns the index of the last line that matches a regex, +// or -1 if no match is found. +func (loc *Location) lastMatchedLineIndex(re *regexp.Regexp) int { + for i := len(loc.Line) - 1; i >= 0; i-- { + if fn := loc.Line[i].Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + return i + } + } + } + return -1 +} + +// FilterTagsByName filters the tags in a profile and only keeps +// tags that match show and not hide. +func (p *Profile) FilterTagsByName(show, hide *regexp.Regexp) (sm, hm bool) { + matchRemove := func(name string) bool { + matchShow := show == nil || show.MatchString(name) + matchHide := hide != nil && hide.MatchString(name) + + if matchShow { + sm = true + } + if matchHide { + hm = true + } + return !matchShow || matchHide + } + for _, s := range p.Sample { + for lab := range s.Label { + if matchRemove(lab) { + delete(s.Label, lab) + } + } + for lab := range s.NumLabel { + if matchRemove(lab) { + delete(s.NumLabel, lab) + } + } + } + return +} + +// matchesName returns whether the location matches the regular +// expression. It checks any available function names, file names, and +// mapping object filename. +func (loc *Location) matchesName(re *regexp.Regexp) bool { + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + return true + } + } + } + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return true + } + return false +} + +// unmatchedLines returns the lines in the location that do not match +// the regular expression. +func (loc *Location) unmatchedLines(re *regexp.Regexp) []Line { + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return nil + } + var lines []Line + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if re.MatchString(fn.Name) || re.MatchString(fn.Filename) { + continue + } + } + lines = append(lines, ln) + } + return lines +} + +// matchedLines returns the lines in the location that match +// the regular expression. +func (loc *Location) matchedLines(re *regexp.Regexp) []Line { + if m := loc.Mapping; m != nil && re.MatchString(m.File) { + return loc.Line + } + var lines []Line + for _, ln := range loc.Line { + if fn := ln.Function; fn != nil { + if !re.MatchString(fn.Name) && !re.MatchString(fn.Filename) { + continue + } + } + lines = append(lines, ln) + } + return lines +} + +// focusedAndNotIgnored looks up a slice of ids against a map of +// focused/ignored locations. The map only contains locations that are +// explicitly focused or ignored. Returns whether there is at least +// one focused location but no ignored locations. +func focusedAndNotIgnored(locs []*Location, m map[uint64]bool) bool { + var f bool + for _, loc := range locs { + if focus, focusOrIgnore := m[loc.ID]; focusOrIgnore { + if focus { + // Found focused location. Must keep searching in case there + // is an ignored one as well. + f = true + } else { + // Found ignored location. Can return false right away. + return false + } + } + } + return f +} + +// TagMatch selects tags for filtering +type TagMatch func(s *Sample) bool + +// FilterSamplesByTag removes all samples from the profile, except +// those that match focus and do not match the ignore regular +// expression. +func (p *Profile) FilterSamplesByTag(focus, ignore TagMatch) (fm, im bool) { + samples := make([]*Sample, 0, len(p.Sample)) + for _, s := range p.Sample { + focused, ignored := true, false + if focus != nil { + focused = focus(s) + } + if ignore != nil { + ignored = ignore(s) + } + fm = fm || focused + im = im || ignored + if focused && !ignored { + samples = append(samples, s) + } + } + p.Sample = samples + return +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/index.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/index.go new file mode 100644 index 000000000000..bef1d60467c0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/index.go @@ -0,0 +1,64 @@ +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "fmt" + "strconv" + "strings" +) + +// SampleIndexByName returns the appropriate index for a value of sample index. +// If numeric, it returns the number, otherwise it looks up the text in the +// profile sample types. +func (p *Profile) SampleIndexByName(sampleIndex string) (int, error) { + if sampleIndex == "" { + if dst := p.DefaultSampleType; dst != "" { + for i, t := range sampleTypes(p) { + if t == dst { + return i, nil + } + } + } + // By default select the last sample value + return len(p.SampleType) - 1, nil + } + if i, err := strconv.Atoi(sampleIndex); err == nil { + if i < 0 || i >= len(p.SampleType) { + return 0, fmt.Errorf("sample_index %s is outside the range [0..%d]", sampleIndex, len(p.SampleType)-1) + } + return i, nil + } + + // Remove the inuse_ prefix to support legacy pprof options + // "inuse_space" and "inuse_objects" for profiles containing types + // "space" and "objects". + noInuse := strings.TrimPrefix(sampleIndex, "inuse_") + for i, t := range p.SampleType { + if t.Type == sampleIndex || t.Type == noInuse { + return i, nil + } + } + + return 0, fmt.Errorf("sample_index %q must be one of: %v", sampleIndex, sampleTypes(p)) +} + +func sampleTypes(p *Profile) []string { + types := make([]string, len(p.SampleType)) + for i, t := range p.SampleType { + types[i] = t.Type + } + return types +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_java_profile.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_java_profile.go new file mode 100644 index 000000000000..91f45e53c6c2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_java_profile.go @@ -0,0 +1,315 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file implements parsers to convert java legacy profiles into +// the profile.proto format. + +package profile + +import ( + "bytes" + "fmt" + "io" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +var ( + attributeRx = regexp.MustCompile(`([\w ]+)=([\w ]+)`) + javaSampleRx = regexp.MustCompile(` *(\d+) +(\d+) +@ +([ x0-9a-f]*)`) + javaLocationRx = regexp.MustCompile(`^\s*0x([[:xdigit:]]+)\s+(.*)\s*$`) + javaLocationFileLineRx = regexp.MustCompile(`^(.*)\s+\((.+):(-?[[:digit:]]+)\)$`) + javaLocationPathRx = regexp.MustCompile(`^(.*)\s+\((.*)\)$`) +) + +// javaCPUProfile returns a new Profile from profilez data. +// b is the profile bytes after the header, period is the profiling +// period, and parse is a function to parse 8-byte chunks from the +// profile in its native endianness. +func javaCPUProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) { + p := &Profile{ + Period: period * 1000, + PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"}, + SampleType: []*ValueType{{Type: "samples", Unit: "count"}, {Type: "cpu", Unit: "nanoseconds"}}, + } + var err error + var locs map[uint64]*Location + if b, locs, err = parseCPUSamples(b, parse, false, p); err != nil { + return nil, err + } + + if err = parseJavaLocations(b, locs, p); err != nil { + return nil, err + } + + // Strip out addresses for better merge. + if err = p.Aggregate(true, true, true, true, false); err != nil { + return nil, err + } + + return p, nil +} + +// parseJavaProfile returns a new profile from heapz or contentionz +// data. b is the profile bytes after the header. +func parseJavaProfile(b []byte) (*Profile, error) { + h := bytes.SplitAfterN(b, []byte("\n"), 2) + if len(h) < 2 { + return nil, errUnrecognized + } + + p := &Profile{ + PeriodType: &ValueType{}, + } + header := string(bytes.TrimSpace(h[0])) + + var err error + var pType string + switch header { + case "--- heapz 1 ---": + pType = "heap" + case "--- contentionz 1 ---": + pType = "contention" + default: + return nil, errUnrecognized + } + + if b, err = parseJavaHeader(pType, h[1], p); err != nil { + return nil, err + } + var locs map[uint64]*Location + if b, locs, err = parseJavaSamples(pType, b, p); err != nil { + return nil, err + } + if err = parseJavaLocations(b, locs, p); err != nil { + return nil, err + } + + // Strip out addresses for better merge. + if err = p.Aggregate(true, true, true, true, false); err != nil { + return nil, err + } + + return p, nil +} + +// parseJavaHeader parses the attribute section on a java profile and +// populates a profile. Returns the remainder of the buffer after all +// attributes. +func parseJavaHeader(pType string, b []byte, p *Profile) ([]byte, error) { + nextNewLine := bytes.IndexByte(b, byte('\n')) + for nextNewLine != -1 { + line := string(bytes.TrimSpace(b[0:nextNewLine])) + if line != "" { + h := attributeRx.FindStringSubmatch(line) + if h == nil { + // Not a valid attribute, exit. + return b, nil + } + + attribute, value := strings.TrimSpace(h[1]), strings.TrimSpace(h[2]) + var err error + switch pType + "/" + attribute { + case "heap/format", "cpu/format", "contention/format": + if value != "java" { + return nil, errUnrecognized + } + case "heap/resolution": + p.SampleType = []*ValueType{ + {Type: "inuse_objects", Unit: "count"}, + {Type: "inuse_space", Unit: value}, + } + case "contention/resolution": + p.SampleType = []*ValueType{ + {Type: "contentions", Unit: "count"}, + {Type: "delay", Unit: value}, + } + case "contention/sampling period": + p.PeriodType = &ValueType{ + Type: "contentions", Unit: "count", + } + if p.Period, err = strconv.ParseInt(value, 0, 64); err != nil { + return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err) + } + case "contention/ms since reset": + millis, err := strconv.ParseInt(value, 0, 64) + if err != nil { + return nil, fmt.Errorf("failed to parse attribute %s: %v", line, err) + } + p.DurationNanos = millis * 1000 * 1000 + default: + return nil, errUnrecognized + } + } + // Grab next line. + b = b[nextNewLine+1:] + nextNewLine = bytes.IndexByte(b, byte('\n')) + } + return b, nil +} + +// parseJavaSamples parses the samples from a java profile and +// populates the Samples in a profile. Returns the remainder of the +// buffer after the samples. +func parseJavaSamples(pType string, b []byte, p *Profile) ([]byte, map[uint64]*Location, error) { + nextNewLine := bytes.IndexByte(b, byte('\n')) + locs := make(map[uint64]*Location) + for nextNewLine != -1 { + line := string(bytes.TrimSpace(b[0:nextNewLine])) + if line != "" { + sample := javaSampleRx.FindStringSubmatch(line) + if sample == nil { + // Not a valid sample, exit. + return b, locs, nil + } + + // Java profiles have data/fields inverted compared to other + // profile types. + var err error + value1, value2, value3 := sample[2], sample[1], sample[3] + addrs, err := parseHexAddresses(value3) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + var sloc []*Location + for _, addr := range addrs { + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + s := &Sample{ + Value: make([]int64, 2), + Location: sloc, + } + + if s.Value[0], err = strconv.ParseInt(value1, 0, 64); err != nil { + return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err) + } + if s.Value[1], err = strconv.ParseInt(value2, 0, 64); err != nil { + return nil, nil, fmt.Errorf("parsing sample %s: %v", line, err) + } + + switch pType { + case "heap": + const javaHeapzSamplingRate = 524288 // 512K + if s.Value[0] == 0 { + return nil, nil, fmt.Errorf("parsing sample %s: second value must be non-zero", line) + } + s.NumLabel = map[string][]int64{"bytes": {s.Value[1] / s.Value[0]}} + s.Value[0], s.Value[1] = scaleHeapSample(s.Value[0], s.Value[1], javaHeapzSamplingRate) + case "contention": + if period := p.Period; period != 0 { + s.Value[0] = s.Value[0] * p.Period + s.Value[1] = s.Value[1] * p.Period + } + } + p.Sample = append(p.Sample, s) + } + // Grab next line. + b = b[nextNewLine+1:] + nextNewLine = bytes.IndexByte(b, byte('\n')) + } + return b, locs, nil +} + +// parseJavaLocations parses the location information in a java +// profile and populates the Locations in a profile. It uses the +// location addresses from the profile as both the ID of each +// location. +func parseJavaLocations(b []byte, locs map[uint64]*Location, p *Profile) error { + r := bytes.NewBuffer(b) + fns := make(map[string]*Function) + for { + line, err := r.ReadString('\n') + if err != nil { + if err != io.EOF { + return err + } + if line == "" { + break + } + } + + if line = strings.TrimSpace(line); line == "" { + continue + } + + jloc := javaLocationRx.FindStringSubmatch(line) + if len(jloc) != 3 { + continue + } + addr, err := strconv.ParseUint(jloc[1], 16, 64) + if err != nil { + return fmt.Errorf("parsing sample %s: %v", line, err) + } + loc := locs[addr] + if loc == nil { + // Unused/unseen + continue + } + var lineFunc, lineFile string + var lineNo int64 + + if fileLine := javaLocationFileLineRx.FindStringSubmatch(jloc[2]); len(fileLine) == 4 { + // Found a line of the form: "function (file:line)" + lineFunc, lineFile = fileLine[1], fileLine[2] + if n, err := strconv.ParseInt(fileLine[3], 10, 64); err == nil && n > 0 { + lineNo = n + } + } else if filePath := javaLocationPathRx.FindStringSubmatch(jloc[2]); len(filePath) == 3 { + // If there's not a file:line, it's a shared library path. + // The path isn't interesting, so just give the .so. + lineFunc, lineFile = filePath[1], filepath.Base(filePath[2]) + } else if strings.Contains(jloc[2], "generated stub/JIT") { + lineFunc = "STUB" + } else { + // Treat whole line as the function name. This is used by the + // java agent for internal states such as "GC" or "VM". + lineFunc = jloc[2] + } + fn := fns[lineFunc] + + if fn == nil { + fn = &Function{ + Name: lineFunc, + SystemName: lineFunc, + Filename: lineFile, + } + fns[lineFunc] = fn + p.Function = append(p.Function, fn) + } + loc.Line = []Line{ + { + Function: fn, + Line: lineNo, + }, + } + loc.Address = 0 + } + + p.remapLocationIDs() + p.remapFunctionIDs() + p.remapMappingIDs() + + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_profile.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_profile.go new file mode 100644 index 000000000000..0c8f3bb5b71f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/legacy_profile.go @@ -0,0 +1,1225 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file implements parsers to convert legacy profiles into the +// profile.proto format. + +package profile + +import ( + "bufio" + "bytes" + "fmt" + "io" + "math" + "regexp" + "strconv" + "strings" +) + +var ( + countStartRE = regexp.MustCompile(`\A(\S+) profile: total \d+\z`) + countRE = regexp.MustCompile(`\A(\d+) @(( 0x[0-9a-f]+)+)\z`) + + heapHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] *@ *(heap[_a-z0-9]*)/?(\d*)`) + heapSampleRE = regexp.MustCompile(`(-?\d+): *(-?\d+) *\[ *(\d+): *(\d+) *] @([ x0-9a-f]*)`) + + contentionSampleRE = regexp.MustCompile(`(\d+) *(\d+) @([ x0-9a-f]*)`) + + hexNumberRE = regexp.MustCompile(`0x[0-9a-f]+`) + + growthHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ growthz?`) + + fragmentationHeaderRE = regexp.MustCompile(`heap profile: *(\d+): *(\d+) *\[ *(\d+): *(\d+) *\] @ fragmentationz?`) + + threadzStartRE = regexp.MustCompile(`--- threadz \d+ ---`) + threadStartRE = regexp.MustCompile(`--- Thread ([[:xdigit:]]+) \(name: (.*)/(\d+)\) stack: ---`) + + // Regular expressions to parse process mappings. Support the format used by Linux /proc/.../maps and other tools. + // Recommended format: + // Start End object file name offset(optional) linker build id + // 0x40000-0x80000 /path/to/binary (@FF00) abc123456 + spaceDigits = `\s+[[:digit:]]+` + hexPair = `\s+[[:xdigit:]]+:[[:xdigit:]]+` + oSpace = `\s*` + // Capturing expressions. + cHex = `(?:0x)?([[:xdigit:]]+)` + cHexRange = `\s*` + cHex + `[\s-]?` + oSpace + cHex + `:?` + cSpaceString = `(?:\s+(\S+))?` + cSpaceHex = `(?:\s+([[:xdigit:]]+))?` + cSpaceAtOffset = `(?:\s+\(@([[:xdigit:]]+)\))?` + cPerm = `(?:\s+([-rwxp]+))?` + + procMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceHex + hexPair + spaceDigits + cSpaceString) + briefMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceString + cSpaceAtOffset + cSpaceHex) + + // Regular expression to parse log data, of the form: + // ... file:line] msg... + logInfoRE = regexp.MustCompile(`^[^\[\]]+:[0-9]+]\s`) +) + +func isSpaceOrComment(line string) bool { + trimmed := strings.TrimSpace(line) + return len(trimmed) == 0 || trimmed[0] == '#' +} + +// parseGoCount parses a Go count profile (e.g., threadcreate or +// goroutine) and returns a new Profile. +func parseGoCount(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + // Skip comments at the beginning of the file. + for s.Scan() && isSpaceOrComment(s.Text()) { + } + if err := s.Err(); err != nil { + return nil, err + } + m := countStartRE.FindStringSubmatch(s.Text()) + if m == nil { + return nil, errUnrecognized + } + profileType := m[1] + p := &Profile{ + PeriodType: &ValueType{Type: profileType, Unit: "count"}, + Period: 1, + SampleType: []*ValueType{{Type: profileType, Unit: "count"}}, + } + locations := make(map[uint64]*Location) + for s.Scan() { + line := s.Text() + if isSpaceOrComment(line) { + continue + } + if strings.HasPrefix(line, "---") { + break + } + m := countRE.FindStringSubmatch(line) + if m == nil { + return nil, errMalformed + } + n, err := strconv.ParseInt(m[1], 0, 64) + if err != nil { + return nil, errMalformed + } + fields := strings.Fields(m[2]) + locs := make([]*Location, 0, len(fields)) + for _, stk := range fields { + addr, err := strconv.ParseUint(stk, 0, 64) + if err != nil { + return nil, errMalformed + } + // Adjust all frames by -1 to land on top of the call instruction. + addr-- + loc := locations[addr] + if loc == nil { + loc = &Location{ + Address: addr, + } + locations[addr] = loc + p.Location = append(p.Location, loc) + } + locs = append(locs, loc) + } + p.Sample = append(p.Sample, &Sample{ + Location: locs, + Value: []int64{n}, + }) + } + if err := s.Err(); err != nil { + return nil, err + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + return p, nil +} + +// remapLocationIDs ensures there is a location for each address +// referenced by a sample, and remaps the samples to point to the new +// location ids. +func (p *Profile) remapLocationIDs() { + seen := make(map[*Location]bool, len(p.Location)) + var locs []*Location + + for _, s := range p.Sample { + for _, l := range s.Location { + if seen[l] { + continue + } + l.ID = uint64(len(locs) + 1) + locs = append(locs, l) + seen[l] = true + } + } + p.Location = locs +} + +func (p *Profile) remapFunctionIDs() { + seen := make(map[*Function]bool, len(p.Function)) + var fns []*Function + + for _, l := range p.Location { + for _, ln := range l.Line { + fn := ln.Function + if fn == nil || seen[fn] { + continue + } + fn.ID = uint64(len(fns) + 1) + fns = append(fns, fn) + seen[fn] = true + } + } + p.Function = fns +} + +// remapMappingIDs matches location addresses with existing mappings +// and updates them appropriately. This is O(N*M), if this ever shows +// up as a bottleneck, evaluate sorting the mappings and doing a +// binary search, which would make it O(N*log(M)). +func (p *Profile) remapMappingIDs() { + // Some profile handlers will incorrectly set regions for the main + // executable if its section is remapped. Fix them through heuristics. + + if len(p.Mapping) > 0 { + // Remove the initial mapping if named '/anon_hugepage' and has a + // consecutive adjacent mapping. + if m := p.Mapping[0]; strings.HasPrefix(m.File, "/anon_hugepage") { + if len(p.Mapping) > 1 && m.Limit == p.Mapping[1].Start { + p.Mapping = p.Mapping[1:] + } + } + } + + // Subtract the offset from the start of the main mapping if it + // ends up at a recognizable start address. + if len(p.Mapping) > 0 { + const expectedStart = 0x400000 + if m := p.Mapping[0]; m.Start-m.Offset == expectedStart { + m.Start = expectedStart + m.Offset = 0 + } + } + + // Associate each location with an address to the corresponding + // mapping. Create fake mapping if a suitable one isn't found. + var fake *Mapping +nextLocation: + for _, l := range p.Location { + a := l.Address + if l.Mapping != nil || a == 0 { + continue + } + for _, m := range p.Mapping { + if m.Start <= a && a < m.Limit { + l.Mapping = m + continue nextLocation + } + } + // Work around legacy handlers failing to encode the first + // part of mappings split into adjacent ranges. + for _, m := range p.Mapping { + if m.Offset != 0 && m.Start-m.Offset <= a && a < m.Start { + m.Start -= m.Offset + m.Offset = 0 + l.Mapping = m + continue nextLocation + } + } + // If there is still no mapping, create a fake one. + // This is important for the Go legacy handler, which produced + // no mappings. + if fake == nil { + fake = &Mapping{ + ID: 1, + Limit: ^uint64(0), + } + p.Mapping = append(p.Mapping, fake) + } + l.Mapping = fake + } + + // Reset all mapping IDs. + for i, m := range p.Mapping { + m.ID = uint64(i + 1) + } +} + +var cpuInts = []func([]byte) (uint64, []byte){ + get32l, + get32b, + get64l, + get64b, +} + +func get32l(b []byte) (uint64, []byte) { + if len(b) < 4 { + return 0, nil + } + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24, b[4:] +} + +func get32b(b []byte) (uint64, []byte) { + if len(b) < 4 { + return 0, nil + } + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24, b[4:] +} + +func get64l(b []byte) (uint64, []byte) { + if len(b) < 8 { + return 0, nil + } + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56, b[8:] +} + +func get64b(b []byte) (uint64, []byte) { + if len(b) < 8 { + return 0, nil + } + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56, b[8:] +} + +// parseCPU parses a profilez legacy profile and returns a newly +// populated Profile. +// +// The general format for profilez samples is a sequence of words in +// binary format. The first words are a header with the following data: +// 1st word -- 0 +// 2nd word -- 3 +// 3rd word -- 0 if a c++ application, 1 if a java application. +// 4th word -- Sampling period (in microseconds). +// 5th word -- Padding. +func parseCPU(b []byte) (*Profile, error) { + var parse func([]byte) (uint64, []byte) + var n1, n2, n3, n4, n5 uint64 + for _, parse = range cpuInts { + var tmp []byte + n1, tmp = parse(b) + n2, tmp = parse(tmp) + n3, tmp = parse(tmp) + n4, tmp = parse(tmp) + n5, tmp = parse(tmp) + + if tmp != nil && n1 == 0 && n2 == 3 && n3 == 0 && n4 > 0 && n5 == 0 { + b = tmp + return cpuProfile(b, int64(n4), parse) + } + if tmp != nil && n1 == 0 && n2 == 3 && n3 == 1 && n4 > 0 && n5 == 0 { + b = tmp + return javaCPUProfile(b, int64(n4), parse) + } + } + return nil, errUnrecognized +} + +// cpuProfile returns a new Profile from C++ profilez data. +// b is the profile bytes after the header, period is the profiling +// period, and parse is a function to parse 8-byte chunks from the +// profile in its native endianness. +func cpuProfile(b []byte, period int64, parse func(b []byte) (uint64, []byte)) (*Profile, error) { + p := &Profile{ + Period: period * 1000, + PeriodType: &ValueType{Type: "cpu", Unit: "nanoseconds"}, + SampleType: []*ValueType{ + {Type: "samples", Unit: "count"}, + {Type: "cpu", Unit: "nanoseconds"}, + }, + } + var err error + if b, _, err = parseCPUSamples(b, parse, true, p); err != nil { + return nil, err + } + + // If *most* samples have the same second-to-the-bottom frame, it + // strongly suggests that it is an uninteresting artifact of + // measurement -- a stack frame pushed by the signal handler. The + // bottom frame is always correct as it is picked up from the signal + // structure, not the stack. Check if this is the case and if so, + // remove. + + // Remove up to two frames. + maxiter := 2 + // Allow one different sample for this many samples with the same + // second-to-last frame. + similarSamples := 32 + margin := len(p.Sample) / similarSamples + + for iter := 0; iter < maxiter; iter++ { + addr1 := make(map[uint64]int) + for _, s := range p.Sample { + if len(s.Location) > 1 { + a := s.Location[1].Address + addr1[a] = addr1[a] + 1 + } + } + + for id1, count := range addr1 { + if count >= len(p.Sample)-margin { + // Found uninteresting frame, strip it out from all samples + for _, s := range p.Sample { + if len(s.Location) > 1 && s.Location[1].Address == id1 { + s.Location = append(s.Location[:1], s.Location[2:]...) + } + } + break + } + } + } + + if err := p.ParseMemoryMap(bytes.NewBuffer(b)); err != nil { + return nil, err + } + + cleanupDuplicateLocations(p) + return p, nil +} + +func cleanupDuplicateLocations(p *Profile) { + // The profile handler may duplicate the leaf frame, because it gets + // its address both from stack unwinding and from the signal + // context. Detect this and delete the duplicate, which has been + // adjusted by -1. The leaf address should not be adjusted as it is + // not a call. + for _, s := range p.Sample { + if len(s.Location) > 1 && s.Location[0].Address == s.Location[1].Address+1 { + s.Location = append(s.Location[:1], s.Location[2:]...) + } + } +} + +// parseCPUSamples parses a collection of profilez samples from a +// profile. +// +// profilez samples are a repeated sequence of stack frames of the +// form: +// 1st word -- The number of times this stack was encountered. +// 2nd word -- The size of the stack (StackSize). +// 3rd word -- The first address on the stack. +// ... +// StackSize + 2 -- The last address on the stack +// The last stack trace is of the form: +// 1st word -- 0 +// 2nd word -- 1 +// 3rd word -- 0 +// +// Addresses from stack traces may point to the next instruction after +// each call. Optionally adjust by -1 to land somewhere on the actual +// call (except for the leaf, which is not a call). +func parseCPUSamples(b []byte, parse func(b []byte) (uint64, []byte), adjust bool, p *Profile) ([]byte, map[uint64]*Location, error) { + locs := make(map[uint64]*Location) + for len(b) > 0 { + var count, nstk uint64 + count, b = parse(b) + nstk, b = parse(b) + if b == nil || nstk > uint64(len(b)/4) { + return nil, nil, errUnrecognized + } + var sloc []*Location + addrs := make([]uint64, nstk) + for i := 0; i < int(nstk); i++ { + addrs[i], b = parse(b) + } + + if count == 0 && nstk == 1 && addrs[0] == 0 { + // End of data marker + break + } + for i, addr := range addrs { + if adjust && i > 0 { + addr-- + } + loc := locs[addr] + if loc == nil { + loc = &Location{ + Address: addr, + } + locs[addr] = loc + p.Location = append(p.Location, loc) + } + sloc = append(sloc, loc) + } + p.Sample = append(p.Sample, + &Sample{ + Value: []int64{int64(count), int64(count) * p.Period}, + Location: sloc, + }) + } + // Reached the end without finding the EOD marker. + return b, locs, nil +} + +// parseHeap parses a heapz legacy or a growthz profile and +// returns a newly populated Profile. +func parseHeap(b []byte) (p *Profile, err error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + if !s.Scan() { + if err := s.Err(); err != nil { + return nil, err + } + return nil, errUnrecognized + } + p = &Profile{} + + sampling := "" + hasAlloc := false + + line := s.Text() + p.PeriodType = &ValueType{Type: "space", Unit: "bytes"} + if header := heapHeaderRE.FindStringSubmatch(line); header != nil { + sampling, p.Period, hasAlloc, err = parseHeapHeader(line) + if err != nil { + return nil, err + } + } else if header = growthHeaderRE.FindStringSubmatch(line); header != nil { + p.Period = 1 + } else if header = fragmentationHeaderRE.FindStringSubmatch(line); header != nil { + p.Period = 1 + } else { + return nil, errUnrecognized + } + + if hasAlloc { + // Put alloc before inuse so that default pprof selection + // will prefer inuse_space. + p.SampleType = []*ValueType{ + {Type: "alloc_objects", Unit: "count"}, + {Type: "alloc_space", Unit: "bytes"}, + {Type: "inuse_objects", Unit: "count"}, + {Type: "inuse_space", Unit: "bytes"}, + } + } else { + p.SampleType = []*ValueType{ + {Type: "objects", Unit: "count"}, + {Type: "space", Unit: "bytes"}, + } + } + + locs := make(map[uint64]*Location) + for s.Scan() { + line := strings.TrimSpace(s.Text()) + + if isSpaceOrComment(line) { + continue + } + + if isMemoryMapSentinel(line) { + break + } + + value, blocksize, addrs, err := parseHeapSample(line, p.Period, sampling, hasAlloc) + if err != nil { + return nil, err + } + + var sloc []*Location + for _, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call. + addr-- + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + + p.Sample = append(p.Sample, &Sample{ + Value: value, + Location: sloc, + NumLabel: map[string][]int64{"bytes": {blocksize}}, + }) + } + if err := s.Err(); err != nil { + return nil, err + } + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + return p, nil +} + +func parseHeapHeader(line string) (sampling string, period int64, hasAlloc bool, err error) { + header := heapHeaderRE.FindStringSubmatch(line) + if header == nil { + return "", 0, false, errUnrecognized + } + + if len(header[6]) > 0 { + if period, err = strconv.ParseInt(header[6], 10, 64); err != nil { + return "", 0, false, errUnrecognized + } + } + + if (header[3] != header[1] && header[3] != "0") || (header[4] != header[2] && header[4] != "0") { + hasAlloc = true + } + + switch header[5] { + case "heapz_v2", "heap_v2": + return "v2", period, hasAlloc, nil + case "heapprofile": + return "", 1, hasAlloc, nil + case "heap": + return "v2", period / 2, hasAlloc, nil + default: + return "", 0, false, errUnrecognized + } +} + +// parseHeapSample parses a single row from a heap profile into a new Sample. +func parseHeapSample(line string, rate int64, sampling string, includeAlloc bool) (value []int64, blocksize int64, addrs []uint64, err error) { + sampleData := heapSampleRE.FindStringSubmatch(line) + if len(sampleData) != 6 { + return nil, 0, nil, fmt.Errorf("unexpected number of sample values: got %d, want 6", len(sampleData)) + } + + // This is a local-scoped helper function to avoid needing to pass + // around rate, sampling and many return parameters. + addValues := func(countString, sizeString string, label string) error { + count, err := strconv.ParseInt(countString, 10, 64) + if err != nil { + return fmt.Errorf("malformed sample: %s: %v", line, err) + } + size, err := strconv.ParseInt(sizeString, 10, 64) + if err != nil { + return fmt.Errorf("malformed sample: %s: %v", line, err) + } + if count == 0 && size != 0 { + return fmt.Errorf("%s count was 0 but %s bytes was %d", label, label, size) + } + if count != 0 { + blocksize = size / count + if sampling == "v2" { + count, size = scaleHeapSample(count, size, rate) + } + } + value = append(value, count, size) + return nil + } + + if includeAlloc { + if err := addValues(sampleData[3], sampleData[4], "allocation"); err != nil { + return nil, 0, nil, err + } + } + + if err := addValues(sampleData[1], sampleData[2], "inuse"); err != nil { + return nil, 0, nil, err + } + + addrs, err = parseHexAddresses(sampleData[5]) + if err != nil { + return nil, 0, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + return value, blocksize, addrs, nil +} + +// parseHexAddresses extracts hex numbers from a string, attempts to convert +// each to an unsigned 64-bit number and returns the resulting numbers as a +// slice, or an error if the string contains hex numbers which are too large to +// handle (which means a malformed profile). +func parseHexAddresses(s string) ([]uint64, error) { + hexStrings := hexNumberRE.FindAllString(s, -1) + var addrs []uint64 + for _, s := range hexStrings { + if addr, err := strconv.ParseUint(s, 0, 64); err == nil { + addrs = append(addrs, addr) + } else { + return nil, fmt.Errorf("failed to parse as hex 64-bit number: %s", s) + } + } + return addrs, nil +} + +// scaleHeapSample adjusts the data from a heapz Sample to +// account for its probability of appearing in the collected +// data. heapz profiles are a sampling of the memory allocations +// requests in a program. We estimate the unsampled value by dividing +// each collected sample by its probability of appearing in the +// profile. heapz v2 profiles rely on a poisson process to determine +// which samples to collect, based on the desired average collection +// rate R. The probability of a sample of size S to appear in that +// profile is 1-exp(-S/R). +func scaleHeapSample(count, size, rate int64) (int64, int64) { + if count == 0 || size == 0 { + return 0, 0 + } + + if rate <= 1 { + // if rate==1 all samples were collected so no adjustment is needed. + // if rate<1 treat as unknown and skip scaling. + return count, size + } + + avgSize := float64(size) / float64(count) + scale := 1 / (1 - math.Exp(-avgSize/float64(rate))) + + return int64(float64(count) * scale), int64(float64(size) * scale) +} + +// parseContention parses a mutex or contention profile. There are 2 cases: +// "--- contentionz " for legacy C++ profiles (and backwards compatibility) +// "--- mutex:" or "--- contention:" for profiles generated by the Go runtime. +func parseContention(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + if !s.Scan() { + if err := s.Err(); err != nil { + return nil, err + } + return nil, errUnrecognized + } + + switch l := s.Text(); { + case strings.HasPrefix(l, "--- contentionz "): + case strings.HasPrefix(l, "--- mutex:"): + case strings.HasPrefix(l, "--- contention:"): + default: + return nil, errUnrecognized + } + + p := &Profile{ + PeriodType: &ValueType{Type: "contentions", Unit: "count"}, + Period: 1, + SampleType: []*ValueType{ + {Type: "contentions", Unit: "count"}, + {Type: "delay", Unit: "nanoseconds"}, + }, + } + + var cpuHz int64 + // Parse text of the form "attribute = value" before the samples. + const delimiter = "=" + for s.Scan() { + line := s.Text() + if line = strings.TrimSpace(line); isSpaceOrComment(line) { + continue + } + if strings.HasPrefix(line, "---") { + break + } + attr := strings.SplitN(line, delimiter, 2) + if len(attr) != 2 { + break + } + key, val := strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1]) + var err error + switch key { + case "cycles/second": + if cpuHz, err = strconv.ParseInt(val, 0, 64); err != nil { + return nil, errUnrecognized + } + case "sampling period": + if p.Period, err = strconv.ParseInt(val, 0, 64); err != nil { + return nil, errUnrecognized + } + case "ms since reset": + ms, err := strconv.ParseInt(val, 0, 64) + if err != nil { + return nil, errUnrecognized + } + p.DurationNanos = ms * 1000 * 1000 + case "format": + // CPP contentionz profiles don't have format. + return nil, errUnrecognized + case "resolution": + // CPP contentionz profiles don't have resolution. + return nil, errUnrecognized + case "discarded samples": + default: + return nil, errUnrecognized + } + } + if err := s.Err(); err != nil { + return nil, err + } + + locs := make(map[uint64]*Location) + for { + line := strings.TrimSpace(s.Text()) + if strings.HasPrefix(line, "---") { + break + } + if !isSpaceOrComment(line) { + value, addrs, err := parseContentionSample(line, p.Period, cpuHz) + if err != nil { + return nil, err + } + var sloc []*Location + for _, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call. + addr-- + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + p.Sample = append(p.Sample, &Sample{ + Value: value, + Location: sloc, + }) + } + if !s.Scan() { + break + } + } + if err := s.Err(); err != nil { + return nil, err + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + + return p, nil +} + +// parseContentionSample parses a single row from a contention profile +// into a new Sample. +func parseContentionSample(line string, period, cpuHz int64) (value []int64, addrs []uint64, err error) { + sampleData := contentionSampleRE.FindStringSubmatch(line) + if sampleData == nil { + return nil, nil, errUnrecognized + } + + v1, err := strconv.ParseInt(sampleData[1], 10, 64) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + v2, err := strconv.ParseInt(sampleData[2], 10, 64) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + // Unsample values if period and cpuHz are available. + // - Delays are scaled to cycles and then to nanoseconds. + // - Contentions are scaled to cycles. + if period > 0 { + if cpuHz > 0 { + cpuGHz := float64(cpuHz) / 1e9 + v1 = int64(float64(v1) * float64(period) / cpuGHz) + } + v2 = v2 * period + } + + value = []int64{v2, v1} + addrs, err = parseHexAddresses(sampleData[3]) + if err != nil { + return nil, nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + + return value, addrs, nil +} + +// parseThread parses a Threadz profile and returns a new Profile. +func parseThread(b []byte) (*Profile, error) { + s := bufio.NewScanner(bytes.NewBuffer(b)) + // Skip past comments and empty lines seeking a real header. + for s.Scan() && isSpaceOrComment(s.Text()) { + } + + line := s.Text() + if m := threadzStartRE.FindStringSubmatch(line); m != nil { + // Advance over initial comments until first stack trace. + for s.Scan() { + if line = s.Text(); isMemoryMapSentinel(line) || strings.HasPrefix(line, "-") { + break + } + } + } else if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 { + return nil, errUnrecognized + } + + p := &Profile{ + SampleType: []*ValueType{{Type: "thread", Unit: "count"}}, + PeriodType: &ValueType{Type: "thread", Unit: "count"}, + Period: 1, + } + + locs := make(map[uint64]*Location) + // Recognize each thread and populate profile samples. + for !isMemoryMapSentinel(line) { + if strings.HasPrefix(line, "---- no stack trace for") { + line = "" + break + } + if t := threadStartRE.FindStringSubmatch(line); len(t) != 4 { + return nil, errUnrecognized + } + + var addrs []uint64 + var err error + line, addrs, err = parseThreadSample(s) + if err != nil { + return nil, err + } + if len(addrs) == 0 { + // We got a --same as previous threads--. Bump counters. + if len(p.Sample) > 0 { + s := p.Sample[len(p.Sample)-1] + s.Value[0]++ + } + continue + } + + var sloc []*Location + for i, addr := range addrs { + // Addresses from stack traces point to the next instruction after + // each call. Adjust by -1 to land somewhere on the actual call + // (except for the leaf, which is not a call). + if i > 0 { + addr-- + } + loc := locs[addr] + if locs[addr] == nil { + loc = &Location{ + Address: addr, + } + p.Location = append(p.Location, loc) + locs[addr] = loc + } + sloc = append(sloc, loc) + } + + p.Sample = append(p.Sample, &Sample{ + Value: []int64{1}, + Location: sloc, + }) + } + + if err := parseAdditionalSections(s, p); err != nil { + return nil, err + } + + cleanupDuplicateLocations(p) + return p, nil +} + +// parseThreadSample parses a symbolized or unsymbolized stack trace. +// Returns the first line after the traceback, the sample (or nil if +// it hits a 'same-as-previous' marker) and an error. +func parseThreadSample(s *bufio.Scanner) (nextl string, addrs []uint64, err error) { + var line string + sameAsPrevious := false + for s.Scan() { + line = strings.TrimSpace(s.Text()) + if line == "" { + continue + } + + if strings.HasPrefix(line, "---") { + break + } + if strings.Contains(line, "same as previous thread") { + sameAsPrevious = true + continue + } + + curAddrs, err := parseHexAddresses(line) + if err != nil { + return "", nil, fmt.Errorf("malformed sample: %s: %v", line, err) + } + addrs = append(addrs, curAddrs...) + } + if err := s.Err(); err != nil { + return "", nil, err + } + if sameAsPrevious { + return line, nil, nil + } + return line, addrs, nil +} + +// parseAdditionalSections parses any additional sections in the +// profile, ignoring any unrecognized sections. +func parseAdditionalSections(s *bufio.Scanner, p *Profile) error { + for !isMemoryMapSentinel(s.Text()) && s.Scan() { + } + if err := s.Err(); err != nil { + return err + } + return p.ParseMemoryMapFromScanner(s) +} + +// ParseProcMaps parses a memory map in the format of /proc/self/maps. +// ParseMemoryMap should be called after setting on a profile to +// associate locations to the corresponding mapping based on their +// address. +func ParseProcMaps(rd io.Reader) ([]*Mapping, error) { + s := bufio.NewScanner(rd) + return parseProcMapsFromScanner(s) +} + +func parseProcMapsFromScanner(s *bufio.Scanner) ([]*Mapping, error) { + var mapping []*Mapping + + var attrs []string + const delimiter = "=" + r := strings.NewReplacer() + for s.Scan() { + line := r.Replace(removeLoggingInfo(s.Text())) + m, err := parseMappingEntry(line) + if err != nil { + if err == errUnrecognized { + // Recognize assignments of the form: attr=value, and replace + // $attr with value on subsequent mappings. + if attr := strings.SplitN(line, delimiter, 2); len(attr) == 2 { + attrs = append(attrs, "$"+strings.TrimSpace(attr[0]), strings.TrimSpace(attr[1])) + r = strings.NewReplacer(attrs...) + } + // Ignore any unrecognized entries + continue + } + return nil, err + } + if m == nil { + continue + } + mapping = append(mapping, m) + } + if err := s.Err(); err != nil { + return nil, err + } + return mapping, nil +} + +// removeLoggingInfo detects and removes log prefix entries generated +// by the glog package. If no logging prefix is detected, the string +// is returned unmodified. +func removeLoggingInfo(line string) string { + if match := logInfoRE.FindStringIndex(line); match != nil { + return line[match[1]:] + } + return line +} + +// ParseMemoryMap parses a memory map in the format of +// /proc/self/maps, and overrides the mappings in the current profile. +// It renumbers the samples and locations in the profile correspondingly. +func (p *Profile) ParseMemoryMap(rd io.Reader) error { + return p.ParseMemoryMapFromScanner(bufio.NewScanner(rd)) +} + +// ParseMemoryMapFromScanner parses a memory map in the format of +// /proc/self/maps or a variety of legacy format, and overrides the +// mappings in the current profile. It renumbers the samples and +// locations in the profile correspondingly. +func (p *Profile) ParseMemoryMapFromScanner(s *bufio.Scanner) error { + mapping, err := parseProcMapsFromScanner(s) + if err != nil { + return err + } + p.Mapping = append(p.Mapping, mapping...) + p.massageMappings() + p.remapLocationIDs() + p.remapFunctionIDs() + p.remapMappingIDs() + return nil +} + +func parseMappingEntry(l string) (*Mapping, error) { + var start, end, perm, file, offset, buildID string + if me := procMapsRE.FindStringSubmatch(l); len(me) == 6 { + start, end, perm, offset, file = me[1], me[2], me[3], me[4], me[5] + } else if me := briefMapsRE.FindStringSubmatch(l); len(me) == 7 { + start, end, perm, file, offset, buildID = me[1], me[2], me[3], me[4], me[5], me[6] + } else { + return nil, errUnrecognized + } + + var err error + mapping := &Mapping{ + File: file, + BuildID: buildID, + } + if perm != "" && !strings.Contains(perm, "x") { + // Skip non-executable entries. + return nil, nil + } + if mapping.Start, err = strconv.ParseUint(start, 16, 64); err != nil { + return nil, errUnrecognized + } + if mapping.Limit, err = strconv.ParseUint(end, 16, 64); err != nil { + return nil, errUnrecognized + } + if offset != "" { + if mapping.Offset, err = strconv.ParseUint(offset, 16, 64); err != nil { + return nil, errUnrecognized + } + } + return mapping, nil +} + +var memoryMapSentinels = []string{ + "--- Memory map: ---", + "MAPPED_LIBRARIES:", +} + +// isMemoryMapSentinel returns true if the string contains one of the +// known sentinels for memory map information. +func isMemoryMapSentinel(line string) bool { + for _, s := range memoryMapSentinels { + if strings.Contains(line, s) { + return true + } + } + return false +} + +func (p *Profile) addLegacyFrameInfo() { + switch { + case isProfileType(p, heapzSampleTypes): + p.DropFrames, p.KeepFrames = allocRxStr, allocSkipRxStr + case isProfileType(p, contentionzSampleTypes): + p.DropFrames, p.KeepFrames = lockRxStr, "" + default: + p.DropFrames, p.KeepFrames = cpuProfilerRxStr, "" + } +} + +var heapzSampleTypes = [][]string{ + {"allocations", "size"}, // early Go pprof profiles + {"objects", "space"}, + {"inuse_objects", "inuse_space"}, + {"alloc_objects", "alloc_space"}, + {"alloc_objects", "alloc_space", "inuse_objects", "inuse_space"}, // Go pprof legacy profiles +} +var contentionzSampleTypes = [][]string{ + {"contentions", "delay"}, +} + +func isProfileType(p *Profile, types [][]string) bool { + st := p.SampleType +nextType: + for _, t := range types { + if len(st) != len(t) { + continue + } + + for i := range st { + if st[i].Type != t[i] { + continue nextType + } + } + return true + } + return false +} + +var allocRxStr = strings.Join([]string{ + // POSIX entry points. + `calloc`, + `cfree`, + `malloc`, + `free`, + `memalign`, + `do_memalign`, + `(__)?posix_memalign`, + `pvalloc`, + `valloc`, + `realloc`, + + // TC malloc. + `tcmalloc::.*`, + `tc_calloc`, + `tc_cfree`, + `tc_malloc`, + `tc_free`, + `tc_memalign`, + `tc_posix_memalign`, + `tc_pvalloc`, + `tc_valloc`, + `tc_realloc`, + `tc_new`, + `tc_delete`, + `tc_newarray`, + `tc_deletearray`, + `tc_new_nothrow`, + `tc_newarray_nothrow`, + + // Memory-allocation routines on OS X. + `malloc_zone_malloc`, + `malloc_zone_calloc`, + `malloc_zone_valloc`, + `malloc_zone_realloc`, + `malloc_zone_memalign`, + `malloc_zone_free`, + + // Go runtime + `runtime\..*`, + + // Other misc. memory allocation routines + `BaseArena::.*`, + `(::)?do_malloc_no_errno`, + `(::)?do_malloc_pages`, + `(::)?do_malloc`, + `DoSampledAllocation`, + `MallocedMemBlock::MallocedMemBlock`, + `_M_allocate`, + `__builtin_(vec_)?delete`, + `__builtin_(vec_)?new`, + `__gnu_cxx::new_allocator::allocate`, + `__libc_malloc`, + `__malloc_alloc_template::allocate`, + `allocate`, + `cpp_alloc`, + `operator new(\[\])?`, + `simple_alloc::allocate`, +}, `|`) + +var allocSkipRxStr = strings.Join([]string{ + // Preserve Go runtime frames that appear in the middle/bottom of + // the stack. + `runtime\.panic`, + `runtime\.reflectcall`, + `runtime\.call[0-9]*`, +}, `|`) + +var cpuProfilerRxStr = strings.Join([]string{ + `ProfileData::Add`, + `ProfileData::prof_handler`, + `CpuProfiler::prof_handler`, + `__pthread_sighandler`, + `__restore`, +}, `|`) + +var lockRxStr = strings.Join([]string{ + `RecordLockProfileData`, + `(base::)?RecordLockProfileData.*`, + `(base::)?SubmitMutexProfileData.*`, + `(base::)?SubmitSpinLockProfileData.*`, + `(base::Mutex::)?AwaitCommon.*`, + `(base::Mutex::)?Unlock.*`, + `(base::Mutex::)?UnlockSlow.*`, + `(base::Mutex::)?ReaderUnlock.*`, + `(base::MutexLock::)?~MutexLock.*`, + `(Mutex::)?AwaitCommon.*`, + `(Mutex::)?Unlock.*`, + `(Mutex::)?UnlockSlow.*`, + `(Mutex::)?ReaderUnlock.*`, + `(MutexLock::)?~MutexLock.*`, + `(SpinLock::)?Unlock.*`, + `(SpinLock::)?SlowUnlock.*`, + `(SpinLockHolder::)?~SpinLockHolder.*`, +}, `|`) diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/merge.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/merge.go new file mode 100644 index 000000000000..9978e7330e6e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/merge.go @@ -0,0 +1,481 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package profile + +import ( + "fmt" + "sort" + "strconv" + "strings" +) + +// Compact performs garbage collection on a profile to remove any +// unreferenced fields. This is useful to reduce the size of a profile +// after samples or locations have been removed. +func (p *Profile) Compact() *Profile { + p, _ = Merge([]*Profile{p}) + return p +} + +// Merge merges all the profiles in profs into a single Profile. +// Returns a new profile independent of the input profiles. The merged +// profile is compacted to eliminate unused samples, locations, +// functions and mappings. Profiles must have identical profile sample +// and period types or the merge will fail. profile.Period of the +// resulting profile will be the maximum of all profiles, and +// profile.TimeNanos will be the earliest nonzero one. Merges are +// associative with the caveat of the first profile having some +// specialization in how headers are combined. There may be other +// subtleties now or in the future regarding associativity. +func Merge(srcs []*Profile) (*Profile, error) { + if len(srcs) == 0 { + return nil, fmt.Errorf("no profiles to merge") + } + p, err := combineHeaders(srcs) + if err != nil { + return nil, err + } + + pm := &profileMerger{ + p: p, + samples: make(map[sampleKey]*Sample, len(srcs[0].Sample)), + locations: make(map[locationKey]*Location, len(srcs[0].Location)), + functions: make(map[functionKey]*Function, len(srcs[0].Function)), + mappings: make(map[mappingKey]*Mapping, len(srcs[0].Mapping)), + } + + for _, src := range srcs { + // Clear the profile-specific hash tables + pm.locationsByID = make(map[uint64]*Location, len(src.Location)) + pm.functionsByID = make(map[uint64]*Function, len(src.Function)) + pm.mappingsByID = make(map[uint64]mapInfo, len(src.Mapping)) + + if len(pm.mappings) == 0 && len(src.Mapping) > 0 { + // The Mapping list has the property that the first mapping + // represents the main binary. Take the first Mapping we see, + // otherwise the operations below will add mappings in an + // arbitrary order. + pm.mapMapping(src.Mapping[0]) + } + + for _, s := range src.Sample { + if !isZeroSample(s) { + pm.mapSample(s) + } + } + } + + for _, s := range p.Sample { + if isZeroSample(s) { + // If there are any zero samples, re-merge the profile to GC + // them. + return Merge([]*Profile{p}) + } + } + + return p, nil +} + +// Normalize normalizes the source profile by multiplying each value in profile by the +// ratio of the sum of the base profile's values of that sample type to the sum of the +// source profile's value of that sample type. +func (p *Profile) Normalize(pb *Profile) error { + + if err := p.compatible(pb); err != nil { + return err + } + + baseVals := make([]int64, len(p.SampleType)) + for _, s := range pb.Sample { + for i, v := range s.Value { + baseVals[i] += v + } + } + + srcVals := make([]int64, len(p.SampleType)) + for _, s := range p.Sample { + for i, v := range s.Value { + srcVals[i] += v + } + } + + normScale := make([]float64, len(baseVals)) + for i := range baseVals { + if srcVals[i] == 0 { + normScale[i] = 0.0 + } else { + normScale[i] = float64(baseVals[i]) / float64(srcVals[i]) + } + } + p.ScaleN(normScale) + return nil +} + +func isZeroSample(s *Sample) bool { + for _, v := range s.Value { + if v != 0 { + return false + } + } + return true +} + +type profileMerger struct { + p *Profile + + // Memoization tables within a profile. + locationsByID map[uint64]*Location + functionsByID map[uint64]*Function + mappingsByID map[uint64]mapInfo + + // Memoization tables for profile entities. + samples map[sampleKey]*Sample + locations map[locationKey]*Location + functions map[functionKey]*Function + mappings map[mappingKey]*Mapping +} + +type mapInfo struct { + m *Mapping + offset int64 +} + +func (pm *profileMerger) mapSample(src *Sample) *Sample { + s := &Sample{ + Location: make([]*Location, len(src.Location)), + Value: make([]int64, len(src.Value)), + Label: make(map[string][]string, len(src.Label)), + NumLabel: make(map[string][]int64, len(src.NumLabel)), + NumUnit: make(map[string][]string, len(src.NumLabel)), + } + for i, l := range src.Location { + s.Location[i] = pm.mapLocation(l) + } + for k, v := range src.Label { + vv := make([]string, len(v)) + copy(vv, v) + s.Label[k] = vv + } + for k, v := range src.NumLabel { + u := src.NumUnit[k] + vv := make([]int64, len(v)) + uu := make([]string, len(u)) + copy(vv, v) + copy(uu, u) + s.NumLabel[k] = vv + s.NumUnit[k] = uu + } + // Check memoization table. Must be done on the remapped location to + // account for the remapped mapping. Add current values to the + // existing sample. + k := s.key() + if ss, ok := pm.samples[k]; ok { + for i, v := range src.Value { + ss.Value[i] += v + } + return ss + } + copy(s.Value, src.Value) + pm.samples[k] = s + pm.p.Sample = append(pm.p.Sample, s) + return s +} + +// key generates sampleKey to be used as a key for maps. +func (sample *Sample) key() sampleKey { + ids := make([]string, len(sample.Location)) + for i, l := range sample.Location { + ids[i] = strconv.FormatUint(l.ID, 16) + } + + labels := make([]string, 0, len(sample.Label)) + for k, v := range sample.Label { + labels = append(labels, fmt.Sprintf("%q%q", k, v)) + } + sort.Strings(labels) + + numlabels := make([]string, 0, len(sample.NumLabel)) + for k, v := range sample.NumLabel { + numlabels = append(numlabels, fmt.Sprintf("%q%x%x", k, v, sample.NumUnit[k])) + } + sort.Strings(numlabels) + + return sampleKey{ + strings.Join(ids, "|"), + strings.Join(labels, ""), + strings.Join(numlabels, ""), + } +} + +type sampleKey struct { + locations string + labels string + numlabels string +} + +func (pm *profileMerger) mapLocation(src *Location) *Location { + if src == nil { + return nil + } + + if l, ok := pm.locationsByID[src.ID]; ok { + return l + } + + mi := pm.mapMapping(src.Mapping) + l := &Location{ + ID: uint64(len(pm.p.Location) + 1), + Mapping: mi.m, + Address: uint64(int64(src.Address) + mi.offset), + Line: make([]Line, len(src.Line)), + IsFolded: src.IsFolded, + } + for i, ln := range src.Line { + l.Line[i] = pm.mapLine(ln) + } + // Check memoization table. Must be done on the remapped location to + // account for the remapped mapping ID. + k := l.key() + if ll, ok := pm.locations[k]; ok { + pm.locationsByID[src.ID] = ll + return ll + } + pm.locationsByID[src.ID] = l + pm.locations[k] = l + pm.p.Location = append(pm.p.Location, l) + return l +} + +// key generates locationKey to be used as a key for maps. +func (l *Location) key() locationKey { + key := locationKey{ + addr: l.Address, + isFolded: l.IsFolded, + } + if l.Mapping != nil { + // Normalizes address to handle address space randomization. + key.addr -= l.Mapping.Start + key.mappingID = l.Mapping.ID + } + lines := make([]string, len(l.Line)*2) + for i, line := range l.Line { + if line.Function != nil { + lines[i*2] = strconv.FormatUint(line.Function.ID, 16) + } + lines[i*2+1] = strconv.FormatInt(line.Line, 16) + } + key.lines = strings.Join(lines, "|") + return key +} + +type locationKey struct { + addr, mappingID uint64 + lines string + isFolded bool +} + +func (pm *profileMerger) mapMapping(src *Mapping) mapInfo { + if src == nil { + return mapInfo{} + } + + if mi, ok := pm.mappingsByID[src.ID]; ok { + return mi + } + + // Check memoization tables. + mk := src.key() + if m, ok := pm.mappings[mk]; ok { + mi := mapInfo{m, int64(m.Start) - int64(src.Start)} + pm.mappingsByID[src.ID] = mi + return mi + } + m := &Mapping{ + ID: uint64(len(pm.p.Mapping) + 1), + Start: src.Start, + Limit: src.Limit, + Offset: src.Offset, + File: src.File, + BuildID: src.BuildID, + HasFunctions: src.HasFunctions, + HasFilenames: src.HasFilenames, + HasLineNumbers: src.HasLineNumbers, + HasInlineFrames: src.HasInlineFrames, + } + pm.p.Mapping = append(pm.p.Mapping, m) + + // Update memoization tables. + pm.mappings[mk] = m + mi := mapInfo{m, 0} + pm.mappingsByID[src.ID] = mi + return mi +} + +// key generates encoded strings of Mapping to be used as a key for +// maps. +func (m *Mapping) key() mappingKey { + // Normalize addresses to handle address space randomization. + // Round up to next 4K boundary to avoid minor discrepancies. + const mapsizeRounding = 0x1000 + + size := m.Limit - m.Start + size = size + mapsizeRounding - 1 + size = size - (size % mapsizeRounding) + key := mappingKey{ + size: size, + offset: m.Offset, + } + + switch { + case m.BuildID != "": + key.buildIDOrFile = m.BuildID + case m.File != "": + key.buildIDOrFile = m.File + default: + // A mapping containing neither build ID nor file name is a fake mapping. A + // key with empty buildIDOrFile is used for fake mappings so that they are + // treated as the same mapping during merging. + } + return key +} + +type mappingKey struct { + size, offset uint64 + buildIDOrFile string +} + +func (pm *profileMerger) mapLine(src Line) Line { + ln := Line{ + Function: pm.mapFunction(src.Function), + Line: src.Line, + } + return ln +} + +func (pm *profileMerger) mapFunction(src *Function) *Function { + if src == nil { + return nil + } + if f, ok := pm.functionsByID[src.ID]; ok { + return f + } + k := src.key() + if f, ok := pm.functions[k]; ok { + pm.functionsByID[src.ID] = f + return f + } + f := &Function{ + ID: uint64(len(pm.p.Function) + 1), + Name: src.Name, + SystemName: src.SystemName, + Filename: src.Filename, + StartLine: src.StartLine, + } + pm.functions[k] = f + pm.functionsByID[src.ID] = f + pm.p.Function = append(pm.p.Function, f) + return f +} + +// key generates a struct to be used as a key for maps. +func (f *Function) key() functionKey { + return functionKey{ + f.StartLine, + f.Name, + f.SystemName, + f.Filename, + } +} + +type functionKey struct { + startLine int64 + name, systemName, fileName string +} + +// combineHeaders checks that all profiles can be merged and returns +// their combined profile. +func combineHeaders(srcs []*Profile) (*Profile, error) { + for _, s := range srcs[1:] { + if err := srcs[0].compatible(s); err != nil { + return nil, err + } + } + + var timeNanos, durationNanos, period int64 + var comments []string + seenComments := map[string]bool{} + var defaultSampleType string + for _, s := range srcs { + if timeNanos == 0 || s.TimeNanos < timeNanos { + timeNanos = s.TimeNanos + } + durationNanos += s.DurationNanos + if period == 0 || period < s.Period { + period = s.Period + } + for _, c := range s.Comments { + if seen := seenComments[c]; !seen { + comments = append(comments, c) + seenComments[c] = true + } + } + if defaultSampleType == "" { + defaultSampleType = s.DefaultSampleType + } + } + + p := &Profile{ + SampleType: make([]*ValueType, len(srcs[0].SampleType)), + + DropFrames: srcs[0].DropFrames, + KeepFrames: srcs[0].KeepFrames, + + TimeNanos: timeNanos, + DurationNanos: durationNanos, + PeriodType: srcs[0].PeriodType, + Period: period, + + Comments: comments, + DefaultSampleType: defaultSampleType, + } + copy(p.SampleType, srcs[0].SampleType) + return p, nil +} + +// compatible determines if two profiles can be compared/merged. +// returns nil if the profiles are compatible; otherwise an error with +// details on the incompatibility. +func (p *Profile) compatible(pb *Profile) error { + if !equalValueType(p.PeriodType, pb.PeriodType) { + return fmt.Errorf("incompatible period types %v and %v", p.PeriodType, pb.PeriodType) + } + + if len(p.SampleType) != len(pb.SampleType) { + return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType) + } + + for i := range p.SampleType { + if !equalValueType(p.SampleType[i], pb.SampleType[i]) { + return fmt.Errorf("incompatible sample types %v and %v", p.SampleType, pb.SampleType) + } + } + return nil +} + +// equalValueType returns true if the two value types are semantically +// equal. It ignores the internal fields used during encode/decode. +func equalValueType(st1, st2 *ValueType) bool { + return st1.Type == st2.Type && st1.Unit == st2.Unit +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/profile.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/profile.go new file mode 100644 index 000000000000..2590c8ddb42e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/profile.go @@ -0,0 +1,805 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package profile provides a representation of profile.proto and +// methods to encode/decode profiles in this format. +package profile + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "math" + "path/filepath" + "regexp" + "sort" + "strings" + "sync" + "time" +) + +// Profile is an in-memory representation of profile.proto. +type Profile struct { + SampleType []*ValueType + DefaultSampleType string + Sample []*Sample + Mapping []*Mapping + Location []*Location + Function []*Function + Comments []string + + DropFrames string + KeepFrames string + + TimeNanos int64 + DurationNanos int64 + PeriodType *ValueType + Period int64 + + // The following fields are modified during encoding and copying, + // so are protected by a Mutex. + encodeMu sync.Mutex + + commentX []int64 + dropFramesX int64 + keepFramesX int64 + stringTable []string + defaultSampleTypeX int64 +} + +// ValueType corresponds to Profile.ValueType +type ValueType struct { + Type string // cpu, wall, inuse_space, etc + Unit string // seconds, nanoseconds, bytes, etc + + typeX int64 + unitX int64 +} + +// Sample corresponds to Profile.Sample +type Sample struct { + Location []*Location + Value []int64 + Label map[string][]string + NumLabel map[string][]int64 + NumUnit map[string][]string + + locationIDX []uint64 + labelX []label +} + +// label corresponds to Profile.Label +type label struct { + keyX int64 + // Exactly one of the two following values must be set + strX int64 + numX int64 // Integer value for this label + // can be set if numX has value + unitX int64 +} + +// Mapping corresponds to Profile.Mapping +type Mapping struct { + ID uint64 + Start uint64 + Limit uint64 + Offset uint64 + File string + BuildID string + HasFunctions bool + HasFilenames bool + HasLineNumbers bool + HasInlineFrames bool + + fileX int64 + buildIDX int64 +} + +// Location corresponds to Profile.Location +type Location struct { + ID uint64 + Mapping *Mapping + Address uint64 + Line []Line + IsFolded bool + + mappingIDX uint64 +} + +// Line corresponds to Profile.Line +type Line struct { + Function *Function + Line int64 + + functionIDX uint64 +} + +// Function corresponds to Profile.Function +type Function struct { + ID uint64 + Name string + SystemName string + Filename string + StartLine int64 + + nameX int64 + systemNameX int64 + filenameX int64 +} + +// Parse parses a profile and checks for its validity. The input +// may be a gzip-compressed encoded protobuf or one of many legacy +// profile formats which may be unsupported in the future. +func Parse(r io.Reader) (*Profile, error) { + data, err := ioutil.ReadAll(r) + if err != nil { + return nil, err + } + return ParseData(data) +} + +// ParseData parses a profile from a buffer and checks for its +// validity. +func ParseData(data []byte) (*Profile, error) { + var p *Profile + var err error + if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err == nil { + data, err = ioutil.ReadAll(gz) + } + if err != nil { + return nil, fmt.Errorf("decompressing profile: %v", err) + } + } + if p, err = ParseUncompressed(data); err != nil && err != errNoData && err != errConcatProfile { + p, err = parseLegacy(data) + } + + if err != nil { + return nil, fmt.Errorf("parsing profile: %v", err) + } + + if err := p.CheckValid(); err != nil { + return nil, fmt.Errorf("malformed profile: %v", err) + } + return p, nil +} + +var errUnrecognized = fmt.Errorf("unrecognized profile format") +var errMalformed = fmt.Errorf("malformed profile format") +var errNoData = fmt.Errorf("empty input file") +var errConcatProfile = fmt.Errorf("concatenated profiles detected") + +func parseLegacy(data []byte) (*Profile, error) { + parsers := []func([]byte) (*Profile, error){ + parseCPU, + parseHeap, + parseGoCount, // goroutine, threadcreate + parseThread, + parseContention, + parseJavaProfile, + } + + for _, parser := range parsers { + p, err := parser(data) + if err == nil { + p.addLegacyFrameInfo() + return p, nil + } + if err != errUnrecognized { + return nil, err + } + } + return nil, errUnrecognized +} + +// ParseUncompressed parses an uncompressed protobuf into a profile. +func ParseUncompressed(data []byte) (*Profile, error) { + if len(data) == 0 { + return nil, errNoData + } + p := &Profile{} + if err := unmarshal(data, p); err != nil { + return nil, err + } + + if err := p.postDecode(); err != nil { + return nil, err + } + + return p, nil +} + +var libRx = regexp.MustCompile(`([.]so$|[.]so[._][0-9]+)`) + +// massageMappings applies heuristic-based changes to the profile +// mappings to account for quirks of some environments. +func (p *Profile) massageMappings() { + // Merge adjacent regions with matching names, checking that the offsets match + if len(p.Mapping) > 1 { + mappings := []*Mapping{p.Mapping[0]} + for _, m := range p.Mapping[1:] { + lm := mappings[len(mappings)-1] + if adjacent(lm, m) { + lm.Limit = m.Limit + if m.File != "" { + lm.File = m.File + } + if m.BuildID != "" { + lm.BuildID = m.BuildID + } + p.updateLocationMapping(m, lm) + continue + } + mappings = append(mappings, m) + } + p.Mapping = mappings + } + + // Use heuristics to identify main binary and move it to the top of the list of mappings + for i, m := range p.Mapping { + file := strings.TrimSpace(strings.Replace(m.File, "(deleted)", "", -1)) + if len(file) == 0 { + continue + } + if len(libRx.FindStringSubmatch(file)) > 0 { + continue + } + if file[0] == '[' { + continue + } + // Swap what we guess is main to position 0. + p.Mapping[0], p.Mapping[i] = p.Mapping[i], p.Mapping[0] + break + } + + // Keep the mapping IDs neatly sorted + for i, m := range p.Mapping { + m.ID = uint64(i + 1) + } +} + +// adjacent returns whether two mapping entries represent the same +// mapping that has been split into two. Check that their addresses are adjacent, +// and if the offsets match, if they are available. +func adjacent(m1, m2 *Mapping) bool { + if m1.File != "" && m2.File != "" { + if m1.File != m2.File { + return false + } + } + if m1.BuildID != "" && m2.BuildID != "" { + if m1.BuildID != m2.BuildID { + return false + } + } + if m1.Limit != m2.Start { + return false + } + if m1.Offset != 0 && m2.Offset != 0 { + offset := m1.Offset + (m1.Limit - m1.Start) + if offset != m2.Offset { + return false + } + } + return true +} + +func (p *Profile) updateLocationMapping(from, to *Mapping) { + for _, l := range p.Location { + if l.Mapping == from { + l.Mapping = to + } + } +} + +func serialize(p *Profile) []byte { + p.encodeMu.Lock() + p.preEncode() + b := marshal(p) + p.encodeMu.Unlock() + return b +} + +// Write writes the profile as a gzip-compressed marshaled protobuf. +func (p *Profile) Write(w io.Writer) error { + zw := gzip.NewWriter(w) + defer zw.Close() + _, err := zw.Write(serialize(p)) + return err +} + +// WriteUncompressed writes the profile as a marshaled protobuf. +func (p *Profile) WriteUncompressed(w io.Writer) error { + _, err := w.Write(serialize(p)) + return err +} + +// CheckValid tests whether the profile is valid. Checks include, but are +// not limited to: +// - len(Profile.Sample[n].value) == len(Profile.value_unit) +// - Sample.id has a corresponding Profile.Location +func (p *Profile) CheckValid() error { + // Check that sample values are consistent + sampleLen := len(p.SampleType) + if sampleLen == 0 && len(p.Sample) != 0 { + return fmt.Errorf("missing sample type information") + } + for _, s := range p.Sample { + if s == nil { + return fmt.Errorf("profile has nil sample") + } + if len(s.Value) != sampleLen { + return fmt.Errorf("mismatch: sample has %d values vs. %d types", len(s.Value), len(p.SampleType)) + } + for _, l := range s.Location { + if l == nil { + return fmt.Errorf("sample has nil location") + } + } + } + + // Check that all mappings/locations/functions are in the tables + // Check that there are no duplicate ids + mappings := make(map[uint64]*Mapping, len(p.Mapping)) + for _, m := range p.Mapping { + if m == nil { + return fmt.Errorf("profile has nil mapping") + } + if m.ID == 0 { + return fmt.Errorf("found mapping with reserved ID=0") + } + if mappings[m.ID] != nil { + return fmt.Errorf("multiple mappings with same id: %d", m.ID) + } + mappings[m.ID] = m + } + functions := make(map[uint64]*Function, len(p.Function)) + for _, f := range p.Function { + if f == nil { + return fmt.Errorf("profile has nil function") + } + if f.ID == 0 { + return fmt.Errorf("found function with reserved ID=0") + } + if functions[f.ID] != nil { + return fmt.Errorf("multiple functions with same id: %d", f.ID) + } + functions[f.ID] = f + } + locations := make(map[uint64]*Location, len(p.Location)) + for _, l := range p.Location { + if l == nil { + return fmt.Errorf("profile has nil location") + } + if l.ID == 0 { + return fmt.Errorf("found location with reserved id=0") + } + if locations[l.ID] != nil { + return fmt.Errorf("multiple locations with same id: %d", l.ID) + } + locations[l.ID] = l + if m := l.Mapping; m != nil { + if m.ID == 0 || mappings[m.ID] != m { + return fmt.Errorf("inconsistent mapping %p: %d", m, m.ID) + } + } + for _, ln := range l.Line { + f := ln.Function + if f == nil { + return fmt.Errorf("location id: %d has a line with nil function", l.ID) + } + if f.ID == 0 || functions[f.ID] != f { + return fmt.Errorf("inconsistent function %p: %d", f, f.ID) + } + } + } + return nil +} + +// Aggregate merges the locations in the profile into equivalence +// classes preserving the request attributes. It also updates the +// samples to point to the merged locations. +func (p *Profile) Aggregate(inlineFrame, function, filename, linenumber, address bool) error { + for _, m := range p.Mapping { + m.HasInlineFrames = m.HasInlineFrames && inlineFrame + m.HasFunctions = m.HasFunctions && function + m.HasFilenames = m.HasFilenames && filename + m.HasLineNumbers = m.HasLineNumbers && linenumber + } + + // Aggregate functions + if !function || !filename { + for _, f := range p.Function { + if !function { + f.Name = "" + f.SystemName = "" + } + if !filename { + f.Filename = "" + } + } + } + + // Aggregate locations + if !inlineFrame || !address || !linenumber { + for _, l := range p.Location { + if !inlineFrame && len(l.Line) > 1 { + l.Line = l.Line[len(l.Line)-1:] + } + if !linenumber { + for i := range l.Line { + l.Line[i].Line = 0 + } + } + if !address { + l.Address = 0 + } + } + } + + return p.CheckValid() +} + +// NumLabelUnits returns a map of numeric label keys to the units +// associated with those keys and a map of those keys to any units +// that were encountered but not used. +// Unit for a given key is the first encountered unit for that key. If multiple +// units are encountered for values paired with a particular key, then the first +// unit encountered is used and all other units are returned in sorted order +// in map of ignored units. +// If no units are encountered for a particular key, the unit is then inferred +// based on the key. +func (p *Profile) NumLabelUnits() (map[string]string, map[string][]string) { + numLabelUnits := map[string]string{} + ignoredUnits := map[string]map[string]bool{} + encounteredKeys := map[string]bool{} + + // Determine units based on numeric tags for each sample. + for _, s := range p.Sample { + for k := range s.NumLabel { + encounteredKeys[k] = true + for _, unit := range s.NumUnit[k] { + if unit == "" { + continue + } + if wantUnit, ok := numLabelUnits[k]; !ok { + numLabelUnits[k] = unit + } else if wantUnit != unit { + if v, ok := ignoredUnits[k]; ok { + v[unit] = true + } else { + ignoredUnits[k] = map[string]bool{unit: true} + } + } + } + } + } + // Infer units for keys without any units associated with + // numeric tag values. + for key := range encounteredKeys { + unit := numLabelUnits[key] + if unit == "" { + switch key { + case "alignment", "request": + numLabelUnits[key] = "bytes" + default: + numLabelUnits[key] = key + } + } + } + + // Copy ignored units into more readable format + unitsIgnored := make(map[string][]string, len(ignoredUnits)) + for key, values := range ignoredUnits { + units := make([]string, len(values)) + i := 0 + for unit := range values { + units[i] = unit + i++ + } + sort.Strings(units) + unitsIgnored[key] = units + } + + return numLabelUnits, unitsIgnored +} + +// String dumps a text representation of a profile. Intended mainly +// for debugging purposes. +func (p *Profile) String() string { + ss := make([]string, 0, len(p.Comments)+len(p.Sample)+len(p.Mapping)+len(p.Location)) + for _, c := range p.Comments { + ss = append(ss, "Comment: "+c) + } + if pt := p.PeriodType; pt != nil { + ss = append(ss, fmt.Sprintf("PeriodType: %s %s", pt.Type, pt.Unit)) + } + ss = append(ss, fmt.Sprintf("Period: %d", p.Period)) + if p.TimeNanos != 0 { + ss = append(ss, fmt.Sprintf("Time: %v", time.Unix(0, p.TimeNanos))) + } + if p.DurationNanos != 0 { + ss = append(ss, fmt.Sprintf("Duration: %.4v", time.Duration(p.DurationNanos))) + } + + ss = append(ss, "Samples:") + var sh1 string + for _, s := range p.SampleType { + dflt := "" + if s.Type == p.DefaultSampleType { + dflt = "[dflt]" + } + sh1 = sh1 + fmt.Sprintf("%s/%s%s ", s.Type, s.Unit, dflt) + } + ss = append(ss, strings.TrimSpace(sh1)) + for _, s := range p.Sample { + ss = append(ss, s.string()) + } + + ss = append(ss, "Locations") + for _, l := range p.Location { + ss = append(ss, l.string()) + } + + ss = append(ss, "Mappings") + for _, m := range p.Mapping { + ss = append(ss, m.string()) + } + + return strings.Join(ss, "\n") + "\n" +} + +// string dumps a text representation of a mapping. Intended mainly +// for debugging purposes. +func (m *Mapping) string() string { + bits := "" + if m.HasFunctions { + bits = bits + "[FN]" + } + if m.HasFilenames { + bits = bits + "[FL]" + } + if m.HasLineNumbers { + bits = bits + "[LN]" + } + if m.HasInlineFrames { + bits = bits + "[IN]" + } + return fmt.Sprintf("%d: %#x/%#x/%#x %s %s %s", + m.ID, + m.Start, m.Limit, m.Offset, + m.File, + m.BuildID, + bits) +} + +// string dumps a text representation of a location. Intended mainly +// for debugging purposes. +func (l *Location) string() string { + ss := []string{} + locStr := fmt.Sprintf("%6d: %#x ", l.ID, l.Address) + if m := l.Mapping; m != nil { + locStr = locStr + fmt.Sprintf("M=%d ", m.ID) + } + if l.IsFolded { + locStr = locStr + "[F] " + } + if len(l.Line) == 0 { + ss = append(ss, locStr) + } + for li := range l.Line { + lnStr := "??" + if fn := l.Line[li].Function; fn != nil { + lnStr = fmt.Sprintf("%s %s:%d s=%d", + fn.Name, + fn.Filename, + l.Line[li].Line, + fn.StartLine) + if fn.Name != fn.SystemName { + lnStr = lnStr + "(" + fn.SystemName + ")" + } + } + ss = append(ss, locStr+lnStr) + // Do not print location details past the first line + locStr = " " + } + return strings.Join(ss, "\n") +} + +// string dumps a text representation of a sample. Intended mainly +// for debugging purposes. +func (s *Sample) string() string { + ss := []string{} + var sv string + for _, v := range s.Value { + sv = fmt.Sprintf("%s %10d", sv, v) + } + sv = sv + ": " + for _, l := range s.Location { + sv = sv + fmt.Sprintf("%d ", l.ID) + } + ss = append(ss, sv) + const labelHeader = " " + if len(s.Label) > 0 { + ss = append(ss, labelHeader+labelsToString(s.Label)) + } + if len(s.NumLabel) > 0 { + ss = append(ss, labelHeader+numLabelsToString(s.NumLabel, s.NumUnit)) + } + return strings.Join(ss, "\n") +} + +// labelsToString returns a string representation of a +// map representing labels. +func labelsToString(labels map[string][]string) string { + ls := []string{} + for k, v := range labels { + ls = append(ls, fmt.Sprintf("%s:%v", k, v)) + } + sort.Strings(ls) + return strings.Join(ls, " ") +} + +// numLabelsToString returns a string representation of a map +// representing numeric labels. +func numLabelsToString(numLabels map[string][]int64, numUnits map[string][]string) string { + ls := []string{} + for k, v := range numLabels { + units := numUnits[k] + var labelString string + if len(units) == len(v) { + values := make([]string, len(v)) + for i, vv := range v { + values[i] = fmt.Sprintf("%d %s", vv, units[i]) + } + labelString = fmt.Sprintf("%s:%v", k, values) + } else { + labelString = fmt.Sprintf("%s:%v", k, v) + } + ls = append(ls, labelString) + } + sort.Strings(ls) + return strings.Join(ls, " ") +} + +// SetLabel sets the specified key to the specified value for all samples in the +// profile. +func (p *Profile) SetLabel(key string, value []string) { + for _, sample := range p.Sample { + if sample.Label == nil { + sample.Label = map[string][]string{key: value} + } else { + sample.Label[key] = value + } + } +} + +// RemoveLabel removes all labels associated with the specified key for all +// samples in the profile. +func (p *Profile) RemoveLabel(key string) { + for _, sample := range p.Sample { + delete(sample.Label, key) + } +} + +// HasLabel returns true if a sample has a label with indicated key and value. +func (s *Sample) HasLabel(key, value string) bool { + for _, v := range s.Label[key] { + if v == value { + return true + } + } + return false +} + +// DiffBaseSample returns true if a sample belongs to the diff base and false +// otherwise. +func (s *Sample) DiffBaseSample() bool { + return s.HasLabel("pprof::base", "true") +} + +// Scale multiplies all sample values in a profile by a constant and keeps +// only samples that have at least one non-zero value. +func (p *Profile) Scale(ratio float64) { + if ratio == 1 { + return + } + ratios := make([]float64, len(p.SampleType)) + for i := range p.SampleType { + ratios[i] = ratio + } + p.ScaleN(ratios) +} + +// ScaleN multiplies each sample values in a sample by a different amount +// and keeps only samples that have at least one non-zero value. +func (p *Profile) ScaleN(ratios []float64) error { + if len(p.SampleType) != len(ratios) { + return fmt.Errorf("mismatched scale ratios, got %d, want %d", len(ratios), len(p.SampleType)) + } + allOnes := true + for _, r := range ratios { + if r != 1 { + allOnes = false + break + } + } + if allOnes { + return nil + } + fillIdx := 0 + for _, s := range p.Sample { + keepSample := false + for i, v := range s.Value { + if ratios[i] != 1 { + val := int64(math.Round(float64(v) * ratios[i])) + s.Value[i] = val + keepSample = keepSample || val != 0 + } + } + if keepSample { + p.Sample[fillIdx] = s + fillIdx++ + } + } + p.Sample = p.Sample[:fillIdx] + return nil +} + +// HasFunctions determines if all locations in this profile have +// symbolized function information. +func (p *Profile) HasFunctions() bool { + for _, l := range p.Location { + if l.Mapping != nil && !l.Mapping.HasFunctions { + return false + } + } + return true +} + +// HasFileLines determines if all locations in this profile have +// symbolized file and line number information. +func (p *Profile) HasFileLines() bool { + for _, l := range p.Location { + if l.Mapping != nil && (!l.Mapping.HasFilenames || !l.Mapping.HasLineNumbers) { + return false + } + } + return true +} + +// Unsymbolizable returns true if a mapping points to a binary for which +// locations can't be symbolized in principle, at least now. Examples are +// "[vdso]", [vsyscall]" and some others, see the code. +func (m *Mapping) Unsymbolizable() bool { + name := filepath.Base(m.File) + return strings.HasPrefix(name, "[") || strings.HasPrefix(name, "linux-vdso") || strings.HasPrefix(m.File, "/dev/dri/") +} + +// Copy makes a fully independent copy of a profile. +func (p *Profile) Copy() *Profile { + pp := &Profile{} + if err := unmarshal(serialize(p), pp); err != nil { + panic(err) + } + if err := pp.postDecode(); err != nil { + panic(err) + } + + return pp +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/proto.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/proto.go new file mode 100644 index 000000000000..539ad3ab33f9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/proto.go @@ -0,0 +1,370 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file is a simple protocol buffer encoder and decoder. +// The format is described at +// https://developers.google.com/protocol-buffers/docs/encoding +// +// A protocol message must implement the message interface: +// decoder() []decoder +// encode(*buffer) +// +// The decode method returns a slice indexed by field number that gives the +// function to decode that field. +// The encode method encodes its receiver into the given buffer. +// +// The two methods are simple enough to be implemented by hand rather than +// by using a protocol compiler. +// +// See profile.go for examples of messages implementing this interface. +// +// There is no support for groups, message sets, or "has" bits. + +package profile + +import ( + "errors" + "fmt" +) + +type buffer struct { + field int // field tag + typ int // proto wire type code for field + u64 uint64 + data []byte + tmp [16]byte +} + +type decoder func(*buffer, message) error + +type message interface { + decoder() []decoder + encode(*buffer) +} + +func marshal(m message) []byte { + var b buffer + m.encode(&b) + return b.data +} + +func encodeVarint(b *buffer, x uint64) { + for x >= 128 { + b.data = append(b.data, byte(x)|0x80) + x >>= 7 + } + b.data = append(b.data, byte(x)) +} + +func encodeLength(b *buffer, tag int, len int) { + encodeVarint(b, uint64(tag)<<3|2) + encodeVarint(b, uint64(len)) +} + +func encodeUint64(b *buffer, tag int, x uint64) { + // append varint to b.data + encodeVarint(b, uint64(tag)<<3) + encodeVarint(b, x) +} + +func encodeUint64s(b *buffer, tag int, x []uint64) { + if len(x) > 2 { + // Use packed encoding + n1 := len(b.data) + for _, u := range x { + encodeVarint(b, u) + } + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) + return + } + for _, u := range x { + encodeUint64(b, tag, u) + } +} + +func encodeUint64Opt(b *buffer, tag int, x uint64) { + if x == 0 { + return + } + encodeUint64(b, tag, x) +} + +func encodeInt64(b *buffer, tag int, x int64) { + u := uint64(x) + encodeUint64(b, tag, u) +} + +func encodeInt64s(b *buffer, tag int, x []int64) { + if len(x) > 2 { + // Use packed encoding + n1 := len(b.data) + for _, u := range x { + encodeVarint(b, uint64(u)) + } + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) + return + } + for _, u := range x { + encodeInt64(b, tag, u) + } +} + +func encodeInt64Opt(b *buffer, tag int, x int64) { + if x == 0 { + return + } + encodeInt64(b, tag, x) +} + +func encodeString(b *buffer, tag int, x string) { + encodeLength(b, tag, len(x)) + b.data = append(b.data, x...) +} + +func encodeStrings(b *buffer, tag int, x []string) { + for _, s := range x { + encodeString(b, tag, s) + } +} + +func encodeBool(b *buffer, tag int, x bool) { + if x { + encodeUint64(b, tag, 1) + } else { + encodeUint64(b, tag, 0) + } +} + +func encodeBoolOpt(b *buffer, tag int, x bool) { + if x { + encodeBool(b, tag, x) + } +} + +func encodeMessage(b *buffer, tag int, m message) { + n1 := len(b.data) + m.encode(b) + n2 := len(b.data) + encodeLength(b, tag, n2-n1) + n3 := len(b.data) + copy(b.tmp[:], b.data[n2:n3]) + copy(b.data[n1+(n3-n2):], b.data[n1:n2]) + copy(b.data[n1:], b.tmp[:n3-n2]) +} + +func unmarshal(data []byte, m message) (err error) { + b := buffer{data: data, typ: 2} + return decodeMessage(&b, m) +} + +func le64(p []byte) uint64 { + return uint64(p[0]) | uint64(p[1])<<8 | uint64(p[2])<<16 | uint64(p[3])<<24 | uint64(p[4])<<32 | uint64(p[5])<<40 | uint64(p[6])<<48 | uint64(p[7])<<56 +} + +func le32(p []byte) uint32 { + return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 +} + +func decodeVarint(data []byte) (uint64, []byte, error) { + var u uint64 + for i := 0; ; i++ { + if i >= 10 || i >= len(data) { + return 0, nil, errors.New("bad varint") + } + u |= uint64(data[i]&0x7F) << uint(7*i) + if data[i]&0x80 == 0 { + return u, data[i+1:], nil + } + } +} + +func decodeField(b *buffer, data []byte) ([]byte, error) { + x, data, err := decodeVarint(data) + if err != nil { + return nil, err + } + b.field = int(x >> 3) + b.typ = int(x & 7) + b.data = nil + b.u64 = 0 + switch b.typ { + case 0: + b.u64, data, err = decodeVarint(data) + if err != nil { + return nil, err + } + case 1: + if len(data) < 8 { + return nil, errors.New("not enough data") + } + b.u64 = le64(data[:8]) + data = data[8:] + case 2: + var n uint64 + n, data, err = decodeVarint(data) + if err != nil { + return nil, err + } + if n > uint64(len(data)) { + return nil, errors.New("too much data") + } + b.data = data[:n] + data = data[n:] + case 5: + if len(data) < 4 { + return nil, errors.New("not enough data") + } + b.u64 = uint64(le32(data[:4])) + data = data[4:] + default: + return nil, fmt.Errorf("unknown wire type: %d", b.typ) + } + + return data, nil +} + +func checkType(b *buffer, typ int) error { + if b.typ != typ { + return errors.New("type mismatch") + } + return nil +} + +func decodeMessage(b *buffer, m message) error { + if err := checkType(b, 2); err != nil { + return err + } + dec := m.decoder() + data := b.data + for len(data) > 0 { + // pull varint field# + type + var err error + data, err = decodeField(b, data) + if err != nil { + return err + } + if b.field >= len(dec) || dec[b.field] == nil { + continue + } + if err := dec[b.field](b, m); err != nil { + return err + } + } + return nil +} + +func decodeInt64(b *buffer, x *int64) error { + if err := checkType(b, 0); err != nil { + return err + } + *x = int64(b.u64) + return nil +} + +func decodeInt64s(b *buffer, x *[]int64) error { + if b.typ == 2 { + // Packed encoding + data := b.data + tmp := make([]int64, 0, len(data)) // Maximally sized + for len(data) > 0 { + var u uint64 + var err error + + if u, data, err = decodeVarint(data); err != nil { + return err + } + tmp = append(tmp, int64(u)) + } + *x = append(*x, tmp...) + return nil + } + var i int64 + if err := decodeInt64(b, &i); err != nil { + return err + } + *x = append(*x, i) + return nil +} + +func decodeUint64(b *buffer, x *uint64) error { + if err := checkType(b, 0); err != nil { + return err + } + *x = b.u64 + return nil +} + +func decodeUint64s(b *buffer, x *[]uint64) error { + if b.typ == 2 { + data := b.data + // Packed encoding + tmp := make([]uint64, 0, len(data)) // Maximally sized + for len(data) > 0 { + var u uint64 + var err error + + if u, data, err = decodeVarint(data); err != nil { + return err + } + tmp = append(tmp, u) + } + *x = append(*x, tmp...) + return nil + } + var u uint64 + if err := decodeUint64(b, &u); err != nil { + return err + } + *x = append(*x, u) + return nil +} + +func decodeString(b *buffer, x *string) error { + if err := checkType(b, 2); err != nil { + return err + } + *x = string(b.data) + return nil +} + +func decodeStrings(b *buffer, x *[]string) error { + var s string + if err := decodeString(b, &s); err != nil { + return err + } + *x = append(*x, s) + return nil +} + +func decodeBool(b *buffer, x *bool) error { + if err := checkType(b, 0); err != nil { + return err + } + if int64(b.u64) == 0 { + *x = false + } else { + *x = true + } + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/google/pprof/profile/prune.go b/cluster-autoscaler/vendor/github.com/google/pprof/profile/prune.go new file mode 100644 index 000000000000..02d21a818463 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/pprof/profile/prune.go @@ -0,0 +1,178 @@ +// Copyright 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Implements methods to remove frames from profiles. + +package profile + +import ( + "fmt" + "regexp" + "strings" +) + +var ( + reservedNames = []string{"(anonymous namespace)", "operator()"} + bracketRx = func() *regexp.Regexp { + var quotedNames []string + for _, name := range append(reservedNames, "(") { + quotedNames = append(quotedNames, regexp.QuoteMeta(name)) + } + return regexp.MustCompile(strings.Join(quotedNames, "|")) + }() +) + +// simplifyFunc does some primitive simplification of function names. +func simplifyFunc(f string) string { + // Account for leading '.' on the PPC ELF v1 ABI. + funcName := strings.TrimPrefix(f, ".") + // Account for unsimplified names -- try to remove the argument list by trimming + // starting from the first '(', but skipping reserved names that have '('. + for _, ind := range bracketRx.FindAllStringSubmatchIndex(funcName, -1) { + foundReserved := false + for _, res := range reservedNames { + if funcName[ind[0]:ind[1]] == res { + foundReserved = true + break + } + } + if !foundReserved { + funcName = funcName[:ind[0]] + break + } + } + return funcName +} + +// Prune removes all nodes beneath a node matching dropRx, and not +// matching keepRx. If the root node of a Sample matches, the sample +// will have an empty stack. +func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp) { + prune := make(map[uint64]bool) + pruneBeneath := make(map[uint64]bool) + + for _, loc := range p.Location { + var i int + for i = len(loc.Line) - 1; i >= 0; i-- { + if fn := loc.Line[i].Function; fn != nil && fn.Name != "" { + funcName := simplifyFunc(fn.Name) + if dropRx.MatchString(funcName) { + if keepRx == nil || !keepRx.MatchString(funcName) { + break + } + } + } + } + + if i >= 0 { + // Found matching entry to prune. + pruneBeneath[loc.ID] = true + + // Remove the matching location. + if i == len(loc.Line)-1 { + // Matched the top entry: prune the whole location. + prune[loc.ID] = true + } else { + loc.Line = loc.Line[i+1:] + } + } + } + + // Prune locs from each Sample + for _, sample := range p.Sample { + // Scan from the root to the leaves to find the prune location. + // Do not prune frames before the first user frame, to avoid + // pruning everything. + foundUser := false + for i := len(sample.Location) - 1; i >= 0; i-- { + id := sample.Location[i].ID + if !prune[id] && !pruneBeneath[id] { + foundUser = true + continue + } + if !foundUser { + continue + } + if prune[id] { + sample.Location = sample.Location[i+1:] + break + } + if pruneBeneath[id] { + sample.Location = sample.Location[i:] + break + } + } + } +} + +// RemoveUninteresting prunes and elides profiles using built-in +// tables of uninteresting function names. +func (p *Profile) RemoveUninteresting() error { + var keep, drop *regexp.Regexp + var err error + + if p.DropFrames != "" { + if drop, err = regexp.Compile("^(" + p.DropFrames + ")$"); err != nil { + return fmt.Errorf("failed to compile regexp %s: %v", p.DropFrames, err) + } + if p.KeepFrames != "" { + if keep, err = regexp.Compile("^(" + p.KeepFrames + ")$"); err != nil { + return fmt.Errorf("failed to compile regexp %s: %v", p.KeepFrames, err) + } + } + p.Prune(drop, keep) + } + return nil +} + +// PruneFrom removes all nodes beneath the lowest node matching dropRx, not including itself. +// +// Please see the example below to understand this method as well as +// the difference from Prune method. +// +// A sample contains Location of [A,B,C,B,D] where D is the top frame and there's no inline. +// +// PruneFrom(A) returns [A,B,C,B,D] because there's no node beneath A. +// Prune(A, nil) returns [B,C,B,D] by removing A itself. +// +// PruneFrom(B) returns [B,C,B,D] by removing all nodes beneath the first B when scanning from the bottom. +// Prune(B, nil) returns [D] because a matching node is found by scanning from the root. +func (p *Profile) PruneFrom(dropRx *regexp.Regexp) { + pruneBeneath := make(map[uint64]bool) + + for _, loc := range p.Location { + for i := 0; i < len(loc.Line); i++ { + if fn := loc.Line[i].Function; fn != nil && fn.Name != "" { + funcName := simplifyFunc(fn.Name) + if dropRx.MatchString(funcName) { + // Found matching entry to prune. + pruneBeneath[loc.ID] = true + loc.Line = loc.Line[i:] + break + } + } + } + } + + // Prune locs from each Sample + for _, sample := range p.Sample { + // Scan from the bottom leaf to the root to find the prune location. + for i, loc := range sample.Location { + if pruneBeneath[loc.ID] { + sample.Location = sample.Location[i:] + break + } + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/.gitignore b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/.gitignore new file mode 100644 index 000000000000..18793c248aac --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +TODO +tmp/**/* +*.coverprofile +.vscode +.idea/ +*.log \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md new file mode 100644 index 000000000000..d680ea4d9779 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -0,0 +1,804 @@ +## 2.9.4 + +### Fixes +- fix hang with ginkgo -p (#1192) [15d4bdc] - this addresses a _long_ standing issue related to Ginkgo hanging when a child process spawned by the test does not exit. + +- fix: fail fast may cause Serial spec or cleanup Node interrupted (#1178) [8dea88b] - prior to this there was a small gap in which specs on other processes might start even if one process has tried to abort the suite. + + +### Maintenance +- Document run order when multiple setup nodes are at the same nesting level [903be81] + +## 2.9.3 + +### Features +- Add RenderTimeline to GinkgoT() [c0c77b6] + +### Fixes +- update Measure deprecation message. fixes #1176 [227c662] +- add newlines to GinkgoLogr (#1170) (#1171) [0de0e7c] + +### Maintenance +- Bump commonmarker from 0.23.8 to 0.23.9 in /docs (#1183) [8b925ab] +- Bump nokogiri from 1.14.1 to 1.14.3 in /docs (#1184) [e3795a4] +- Bump golang.org/x/tools from 0.7.0 to 0.8.0 (#1182) [b453793] +- Bump actions/setup-go from 3 to 4 (#1164) [73ed75b] +- Bump github.com/onsi/gomega from 1.27.4 to 1.27.6 (#1173) [0a2bc64] +- Bump github.com/go-logr/logr from 1.2.3 to 1.2.4 (#1174) [f41c557] +- Bump golang.org/x/sys from 0.6.0 to 0.7.0 (#1179) [8e423e5] + +## 2.9.2 + +### Maintenance +- Bump github.com/go-task/slim-sprig (#1167) [3fcc5bf] +- Bump github.com/onsi/gomega from 1.27.3 to 1.27.4 (#1163) [6143ffe] + +## 2.9.1 + +### Fixes +This release fixes a longstanding issue where `ginkgo -coverpkg=./...` would not work. This is now resolved and fixes [#1161](https://github.com/onsi/ginkgo/issues/1161) and [#995](https://github.com/onsi/ginkgo/issues/995) +- Support -coverpkg=./... [26ca1b5] +- document coverpkg a bit more clearly [fc44c3b] + +### Maintenance +- bump various dependencies +- Improve Documentation and fix typo (#1158) [93de676] + +## 2.9.0 + +### Features +- AttachProgressReporter is an experimental feature that allows users to provide arbitrary information when a ProgressReport is requested [28801fe] + +- GinkgoT() has been expanded to include several Ginkgo-specific methods [2bd5a3b] + + The intent is to enable the development of third-party libraries that integrate deeply with Ginkgo using `GinkgoT()` to access Ginkgo's functionality. + +## 2.8.4 + +### Features +- Add OmitSuiteSetupNodes to JunitReportConfig (#1147) [979fbc2] +- Add a reference to ginkgolinter in docs.index.md (#1143) [8432589] + +### Fixes +- rename tools hack to see if it fixes things for downstream users [a8bb39a] + +### Maintenance +- Bump golang.org/x/text (#1144) [41b2a8a] +- Bump github.com/onsi/gomega from 1.27.0 to 1.27.1 (#1142) [7c4f583] + +## 2.8.3 + +Released to fix security issue in golang.org/x/net dependency + +### Maintenance + +- Bump golang.org/x/net from 0.6.0 to 0.7.0 (#1141) [fc1a02e] +- remove tools.go hack from documentation [0718693] + +## 2.8.2 + +Ginkgo now includes a `tools.go` file in the root directory of the `ginkgo` package. This should allow modules that simply `go get github.com/onsi/ginkgo/v2` to also pull in the CLI dependencies. This obviates the need for consumers of Ginkgo to have their own `tools.go` file and makes it simpler to ensure that the version of the `ginkgo` CLI being used matches the version of the library. You can simply run `go run github.com/onsi/ginkgo/v2/ginkgo` to run the version of the cli associated with your package go.mod. + +### Maintenance + +- Bump github.com/onsi/gomega from 1.26.0 to 1.27.0 (#1139) [5767b0a] +- Fix minor typos (#1138) [e1e9723] +- Fix link in V2 Migration Guide (#1137) [a588f60] + +## 2.8.1 + +### Fixes +- lock around default report output to avoid triggering the race detector when calling By from goroutines [2d5075a] +- don't run ReportEntries through sprintf [febbe38] + +### Maintenance +- Bump golang.org/x/tools from 0.5.0 to 0.6.0 (#1135) [11a4860] +- test: update matrix for Go 1.20 (#1130) [4890a62] +- Bump golang.org/x/sys from 0.4.0 to 0.5.0 (#1133) [a774638] +- Bump github.com/onsi/gomega from 1.25.0 to 1.26.0 (#1120) [3f233bd] +- Bump github-pages from 227 to 228 in /docs (#1131) [f9b8649] +- Bump activesupport from 6.0.6 to 6.0.6.1 in /docs (#1127) [6f8c042] +- Update index.md with instructions on how to upgrade Ginkgo [833a75e] + +## 2.8.0 + +### Features + +- Introduce GinkgoHelper() to track and exclude helper functions from potential CodeLocations [e19f556] + +Modeled after `testing.T.Helper()`. Now, rather than write code like: + +```go +func helper(model Model) { + Expect(model).WithOffset(1).To(BeValid()) + Expect(model.SerialNumber).WithOffset(1).To(MatchRegexp(/[a-f0-9]*/)) +} +``` + +you can stop tracking offsets (which makes nesting composing helpers nearly impossible) and simply write: + +```go +func helper(model Model) { + GinkgoHelper() + Expect(model).To(BeValid()) + Expect(model.SerialNumber).To(MatchRegexp(/[a-f0-9]*/)) +} +``` + +- Introduce GinkgoLabelFilter() and Label().MatchesLabelFilter() to make it possible to programmatically match filters (fixes #1119) [2f6597c] + +You can now write code like this: + +```go +BeforeSuite(func() { + if Label("slow").MatchesLabelFilter(GinkgoLabelFilter()) { + // do slow setup + } + + if Label("fast").MatchesLabelFilter(GinkgoLabelFilter()) { + // do fast setup + } +}) +``` + +to programmatically check whether a given set of labels will match the configured `--label-filter`. + +### Maintenance + +- Bump webrick from 1.7.0 to 1.8.1 in /docs (#1125) [ea4966e] +- cdeql: add ruby language (#1124) [9dd275b] +- dependabot: add bundler package-ecosystem for docs (#1123) [14e7bdd] + +## 2.7.1 + +### Fixes +- Bring back SuiteConfig.EmitSpecProgress to avoid compilation issue for consumers that set it manually [d2a1cb0] + +### Maintenance +- Bump github.com/onsi/gomega from 1.24.2 to 1.25.0 (#1118) [cafece6] +- Bump golang.org/x/tools from 0.4.0 to 0.5.0 (#1111) [eda66c2] +- Bump golang.org/x/sys from 0.3.0 to 0.4.0 (#1112) [ac5ccaa] +- Bump github.com/onsi/gomega from 1.24.1 to 1.24.2 (#1097) [eee6480] + +## 2.7.0 + +### Features +- Introduce ContinueOnFailure for Ordered containers [e0123ca] - Ordered containers that are also decorated with ContinueOnFailure will not stop running specs after the first spec fails. +- Support for bootstrap commands to use custom data for templates (#1110) [7a2b242] +- Support for labels and pending decorator in ginkgo outline output (#1113) [e6e3b98] +- Color aliases for custom color support (#1101) [49fab7a] + +### Fixes +- correctly ensure deterministic spec order, even if specs are generated by iterating over a map [89dda20] +- Fix a bug where timedout specs were not correctly treated as failures when determining whether or not to run AfterAlls in an Ordered container. +- Ensure go test coverprofile outputs to the expected location (#1105) [b0bd77b] + +## 2.6.1 + +### Features +- Override formatter colors from envvars - this is a new feature but an alternative approach involving config files might be taken in the future (#1095) [60240d1] + +### Fixes +- GinkgoRecover now supports ignoring panics that match a specific, hidden, interface [301f3e2] + +### Maintenance +- Bump github.com/onsi/gomega from 1.24.0 to 1.24.1 (#1077) [3643823] +- Bump golang.org/x/tools from 0.2.0 to 0.4.0 (#1090) [f9f856e] +- Bump nokogiri from 1.13.9 to 1.13.10 in /docs (#1091) [0d7087e] + +## 2.6.0 + +### Features +- `ReportBeforeSuite` provides access to the suite report before the suite begins. +- Add junit config option for omitting leafnodetype (#1088) [956e6d2] +- Add support to customize junit report config to omit spec labels (#1087) [de44005] + +### Fixes +- Fix stack trace pruning so that it has a chance of working on windows [2165648] + +## 2.5.1 + +### Fixes +- skipped tests only show as 'S' when running with -v [3ab38ae] +- Fix typo in docs/index.md (#1082) [55fc58d] +- Fix typo in docs/index.md (#1081) [8a14f1f] +- Fix link notation in docs/index.md (#1080) [2669612] +- Fix typo in `--progress` deprecation message (#1076) [b4b7edc] + +### Maintenance +- chore: Included githubactions in the dependabot config (#976) [baea341] +- Bump golang.org/x/sys from 0.1.0 to 0.2.0 (#1075) [9646297] + +## 2.5.0 + +### Ginkgo output now includes a timeline-view of the spec + +This commit changes Ginkgo's default output. Spec details are now +presented as a **timeline** that includes events that occur during the spec +lifecycle interleaved with any GinkgoWriter content. This makes is much easier +to understand the flow of a spec and where a given failure occurs. + +The --progress, --slow-spec-threshold, --always-emit-ginkgo-writer flags +and the SuppressProgressReporting decorator have all been deprecated. Instead +the existing -v and -vv flags better capture the level of verbosity to display. However, +a new --show-node-events flag is added to include node `> Enter` and `< Exit` events +in the spec timeline. + +In addition, JUnit reports now include the timeline (rendered with -vv) and custom JUnit +reports can be configured and generated using +`GenerateJUnitReportWithConfig(report types.Report, dst string, config JunitReportConfig)` + +Code should continue to work unchanged with this version of Ginkgo - however if you have tooling that +was relying on the specific output format of Ginkgo you _may_ run into issues. Ginkgo's console output is not guaranteed to be stable for tooling and automation purposes. You should, instead, use Ginkgo's JSON format +to build tooling on top of as it has stronger guarantees to be stable from version to version. + +### Features +- Provide details about which timeout expired [0f2fa27] + +### Fixes +- Add Support Policy to docs [c70867a] + +### Maintenance +- Bump github.com/onsi/gomega from 1.22.1 to 1.23.0 (#1070) [bb3b4e2] + +## 2.4.0 + +### Features + +- DeferCleanup supports functions with multiple-return values [5e33c75] +- Add GinkgoLogr (#1067) [bf78c28] +- Introduction of 'MustPassRepeatedly' decorator (#1051) [047c02f] + +### Fixes +- correcting some typos (#1064) [1403d3c] +- fix flaky internal_integration interrupt specs [2105ba3] +- Correct busted link in README [be6b5b9] + +### Maintenance +- Bump actions/checkout from 2 to 3 (#1062) [8a2f483] +- Bump golang.org/x/tools from 0.1.12 to 0.2.0 (#1065) [529c4e8] +- Bump github/codeql-action from 1 to 2 (#1061) [da09146] +- Bump actions/setup-go from 2 to 3 (#1060) [918040d] +- Bump github.com/onsi/gomega from 1.22.0 to 1.22.1 (#1053) [2098e4d] +- Bump nokogiri from 1.13.8 to 1.13.9 in /docs (#1066) [1d74122] +- Add GHA to dependabot config [4442772] + +## 2.3.1 + +## Fixes +Several users were invoking `ginkgo` by installing the latest version of the cli via `go install github.com/onsi/ginkgo/v2/ginkgo@latest`. When 2.3.0 was released this resulted in an influx of issues as CI systems failed due to a change in the internal contract between the Ginkgo CLI and the Ginkgo library. Ginkgo only supports running the same version of the library as the cli (which is why both are packaged in the same repository). + +With this patch release, the ginkgo CLI can now identify a version mismatch and emit a helpful error message. + +- Ginkgo cli can identify version mismatches and emit a helpful error message [bc4ae2f] +- further emphasize that a version match is required when running Ginkgo on CI and/or locally [2691dd8] + +### Maintenance +- bump gomega to v1.22.0 [822a937] + +## 2.3.0 + +### Interruptible Nodes and Timeouts + +Ginkgo now supports per-node and per-spec timeouts on interruptible nodes. Check out the [documentation for all the details](https://onsi.github.io/ginkgo/#spec-timeouts-and-interruptible-nodes) but the gist is you can now write specs like this: + +```go +It("is interruptible", func(ctx SpecContext) { // or context.Context instead of SpecContext, both are valid. + // do things until `ctx.Done()` is closed, for example: + req, err := http.NewRequestWithContext(ctx, "POST", "/build-widgets", nil) + Expect(err).NotTo(HaveOccured()) + _, err := http.DefaultClient.Do(req) + Expect(err).NotTo(HaveOccured()) + + Eventually(client.WidgetCount).WithContext(ctx).Should(Equal(17)) +}, NodeTimeout(time.Second*20), GracePeriod(5*time.Second)) +``` + +and have Ginkgo ensure that the node completes before the timeout elapses. If it does elapse, or if an external interrupt is received (e.g. `^C`) then Ginkgo will cancel the context and wait for the Grace Period for the node to exit before proceeding with any cleanup nodes associated with the spec. The `ctx` provided by Ginkgo can also be passed down to Gomega's `Eventually` to have all assertions within the node governed by a single deadline. + +### Features + +- Ginkgo now records any additional failures that occur during the cleanup of a failed spec. In prior versions this information was quietly discarded, but the introduction of a more rigorous approach to timeouts and interruptions allows Ginkgo to better track subsequent failures. +- `SpecContext` also provides a mechanism for third-party libraries to provide additional information when a Progress Report is generated. Gomega uses this to provide the current state of an `Eventually().WithContext()` assertion when a Progress Report is requested. +- DescribeTable now exits with an error if it is not passed any Entries [a4c9865] + +## Fixes +- fixes crashes on newer Ruby 3 installations by upgrading github-pages gem dependency [92c88d5] +- Make the outline command able to use the DSL import [1be2427] + +## Maintenance +- chore(docs): delete no meaning d [57c373c] +- chore(docs): Fix hyperlinks [30526d5] +- chore(docs): fix code blocks without language settings [cf611c4] +- fix intra-doc link [b541bcb] + +## 2.2.0 + +### Generate real-time Progress Reports [f91377c] + +Ginkgo can now generate Progress Reports to point users at the current running line of code (including a preview of the actual source code) and a best guess at the most relevant subroutines. + +These Progress Reports allow users to debug stuck or slow tests without exiting the Ginkgo process. A Progress Report can be generated at any time by sending Ginkgo a `SIGINFO` (`^T` on MacOS/BSD) or `SIGUSR1`. + +In addition, the user can specify `--poll-progress-after` and `--poll-progress-interval` to have Ginkgo start periodically emitting progress reports if a given node takes too long. These can be overriden/set on a per-node basis with the `PollProgressAfter` and `PollProgressInterval` decorators. + +Progress Reports are emitted to stdout, and also stored in the machine-redable report formats that Ginkgo supports. + +Ginkgo also uses this progress reporting infrastructure under the hood when handling timeouts and interrupts. This yields much more focused, useful, and informative stack traces than previously. + +### Features +- `BeforeSuite`, `AfterSuite`, `SynchronizedBeforeSuite`, `SynchronizedAfterSuite`, and `ReportAfterSuite` now support (the relevant subset of) decorators. These can be passed in _after_ the callback functions that are usually passed into these nodes. + + As a result the **signature of these methods has changed** and now includes a trailing `args ...interface{}`. For most users simply using the DSL, this change is transparent. However if you were assigning one of these functions to a custom variable (or passing it around) then your code may need to change to reflect the new signature. + +### Maintenance +- Modernize the invocation of Ginkgo in github actions [0ffde58] +- Update reocmmended CI settings in docs [896bbb9] +- Speed up unnecessarily slow integration test [6d3a90e] + +## 2.1.6 + +### Fixes +- Add `SuppressProgressReporting` decorator to turn off --progress announcements for a given node [dfef62a] +- chore: remove duplicate word in comments [7373214] + +## 2.1.5 + +### Fixes +- drop -mod=mod instructions; fixes #1026 [6ad7138] +- Ensure `CurrentSpecReport` and `AddReportEntry` are thread-safe [817c09b] +- remove stale importmap gcflags flag test [3cd8b93] +- Always emit spec summary [5cf23e2] - even when only one spec has failed +- Fix ReportAfterSuite usage in docs [b1864ad] +- fixed typo (#997) [219cc00] +- TrimRight is not designed to trim Suffix [71ebb74] +- refactor: replace strings.Replace with strings.ReplaceAll (#978) [143d208] +- fix syntax in examples (#975) [b69554f] + +### Maintenance +- Bump github.com/onsi/gomega from 1.20.0 to 1.20.1 (#1027) [e5dfce4] +- Bump tzinfo from 1.2.9 to 1.2.10 in /docs (#1006) [7ae91c4] +- Bump github.com/onsi/gomega from 1.19.0 to 1.20.0 (#1005) [e87a85a] +- test: add new Go 1.19 to test matrix (#1014) [bbefe12] +- Bump golang.org/x/tools from 0.1.11 to 0.1.12 (#1012) [9327906] +- Bump golang.org/x/tools from 0.1.10 to 0.1.11 (#993) [f44af96] +- Bump nokogiri from 1.13.3 to 1.13.6 in /docs (#981) [ef336aa] + +## 2.1.4 + +### Fixes +- Numerous documentation typos +- Prepend `when` when using `When` (this behavior was in 1.x but unintentionally lost during the 2.0 rewrite) [efce903] +- improve error message when a parallel process fails to report back [a7bd1fe] +- guard against concurrent map writes in DeprecationTracker [0976569] +- Invoke reporting nodes during dry-run (fixes #956 and #935) [aae4480] +- Fix ginkgo import circle [f779385] + +## 2.1.3 + +See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2. + +### Fixes +- Calling By in a container node now emits a useful error. [ff12cee] + +## 2.1.2 + +### Fixes + +- Track location of focused specs correctly in `ginkgo unfocus` [a612ff1] +- Profiling suites with focused specs no longer generates an erroneous failure message [8fbfa02] +- Several documentation typos fixed. Big thanks to everyone who helped catch them and report/fix them! + +## 2.1.1 + +See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2. + +### Fixes +- Suites that only import the new dsl packages are now correctly identified as Ginkgo suites [ec17e17] + +## 2.1.0 + +See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2. + +2.1.0 is a minor release with a few tweaks: + +- Introduce new DSL packages to enable users to pick-and-choose which portions of the DSL to dot-import. [90868e2] More details [here](https://onsi.github.io/ginkgo/#alternatives-to-dot-importing-ginkgo). +- Add error check for invalid/nil parameters to DescribeTable [6f8577e] +- Myriad docs typos fixed (thanks everyone!) [718542a, ecb7098, 146654c, a8f9913, 6bdffde, 03dcd7e] + +## 2.0.0 + +See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) + +## 1.16.5 + +Ginkgo 2.0 now has a Release Candidate. 1.16.5 advertises the existence of the RC. +1.16.5 deprecates GinkgoParallelNode in favor of GinkgoParallelProcess + +You can silence the RC advertisement by setting an `ACK_GINKGO_RC=true` environment variable or creating a file in your home directory called `.ack-ginkgo-rc` + +## 1.16.4 + +### Fixes +1.16.4 retracts 1.16.3. There are no code changes. The 1.16.3 tag was associated with the wrong commit and an attempt to change it after-the-fact has proven problematic. 1.16.4 retracts 1.16.3 in Ginkgo's go.mod and creates a new, correctly tagged, release. + +## 1.16.3 + +### Features +- Measure is now deprecated and emits a deprecation warning. + +## 1.16.2 + +### Fixes +- Deprecations can be suppressed by setting an `ACK_GINKGO_DEPRECATIONS=` environment variable. + +## 1.16.1 + +### Fixes +- Suppress --stream deprecation warning on windows (#793) + +## 1.16.0 + +### Features +- Advertise Ginkgo 2.0. Introduce deprecations. [9ef1913] + - Update README.md to advertise that Ginkgo 2.0 is coming. + - Backport the 2.0 DeprecationTracker and start alerting users + about upcoming deprecations. + +- Add slim-sprig template functions to bootstrap/generate (#775) [9162b86] + +- Fix accidental reference to 1488 (#784) [9fb7fe4] + +## 1.15.2 + +### Fixes +- ignore blank `-focus` and `-skip` flags (#780) [e90a4a0] + +## 1.15.1 + +### Fixes +- reporters/junit: Use `system-out` element instead of `passed` (#769) [9eda305] + +## 1.15.0 + +### Features +- Adds 'outline' command to print the outline of specs/containers in a file (#754) [071c369] [6803cc3] [935b538] [06744e8] [0c40583] +- Add support for using template to generate tests (#752) [efb9e69] +- Add a Chinese Doc #755 (#756) [5207632] +- cli: allow multiple -focus and -skip flags (#736) [9a782fb] + +### Fixes +- Add _internal to filename of tests created with internal flag (#751) [43c12da] + +## 1.14.2 + +### Fixes +- correct handling windows backslash in import path (#721) [97f3d51] +- Add additional methods to GinkgoT() to improve compatibility with the testing.TB interface [b5fe44d] + +## 1.14.1 + +### Fixes +- Discard exported method declaration when running ginkgo bootstrap (#558) [f4b0240] + +## 1.14.0 + +### Features +- Defer running top-level container nodes until RunSpecs is called [d44dedf] +- [Document Ginkgo lifecycle](http://onsi.github.io/ginkgo/#understanding-ginkgos-lifecycle) +- Add `extensions/globals` package (#692) [3295c8f] - this can be helpful in contexts where you are test-driving your test-generation code (see [#692](https://github.com/onsi/ginkgo/pull/692)) +- Print Skip reason in JUnit reporter if one was provided [820dfab] + +## 1.13.0 + +### Features +- Add a version of table.Entry that allows dumping the entry parameters. (#689) [21eaef2] + +### Fixes +- Ensure integration tests pass in an environment sans GOPATH [606fba2] +- Add books package (#568) [fc0e44e] +- doc(readme): installation via "tools package" (#677) [83bb20e] +- Solve the undefined: unix.Dup2 compile error on mips64le (#680) [0624f75] +- Import package without dot (#687) [6321024] +- Fix integration tests to stop require GOPATH (#686) [a912ec5] + +## 1.12.3 + +### Fixes +- Print correct code location of failing table test (#666) [c6d7afb] + +## 1.12.2 + +### Fixes +- Update dependencies [ea4a036] + +## 1.12.1 + +### Fixes +- Make unfocus ("blur") much faster (#674) [8b18061] +- Fix typo (#673) [7fdcbe8] +- Test against 1.14 and remove 1.12 [d5c2ad6] +- Test if a coverprofile content is empty before checking its latest character (#670) [14d9fa2] +- replace tail package with maintained one. this fixes go get errors (#667) [4ba33d4] +- improve ginkgo performance - makes progress on #644 [a14f98e] +- fix convert integration tests [1f8ba69] +- fix typo successful -> successful (#663) [1ea49cf] +- Fix invalid link (#658) [b886136] +- convert utility : Include comments from source (#657) [1077c6d] +- Explain what BDD means [d79e7fb] +- skip race detector test on unsupported platform (#642) [f8ab89d] +- Use Dup2 from golang.org/x/sys/unix instead of syscallDup (#638) [5d53c55] +- Fix missing newline in combined coverage file (#641) [6a07ea2] +- check if a spec is run before returning SpecSummary (#645) [8850000] + +## 1.12.0 + +### Features +- Add module definition (#630) [78916ab] + +## 1.11.0 + +### Features +- Add syscall for riscv64 architecture [f66e896] +- teamcity reporter: output location of test failure as well as test definition (#626) [9869142] +- teamcity reporter: output newline after every service message (#625) [3cfa02d] +- Add support for go module when running `generate` command (#578) [9c89e3f] + +## 1.10.3 + +### Fixes +- Set go_import_path in travis.yml to allow internal packages in forks (#607) [3b721db] +- Add integration test [d90e0dc] +- Fix coverage files combining [e5dde8c] +- A new CLI option: -ginkgo.reportFile (#601) [034fd25] + +## 1.10.2 + +### Fixes +- speed up table entry generateIt() (#609) [5049dc5] +- Fix. Write errors to stderr instead of stdout (#610) [7bb3091] + +## 1.10.1 + +### Fixes +- stack backtrace: fix skipping (#600) [2a4c0bd] + +## 1.10.0 + +### Fixes +- stack backtrace: fix alignment and skipping [66915d6] +- fix typo in documentation [8f97b93] + +## 1.9.0 + +### Features +- Option to print output into report, when tests have passed [0545415] + +### Fixes +- Fixed typos in comments [0ecbc58] +- gofmt code [a7f8bfb] +- Simplify code [7454d00] +- Simplify concatenation, incrementation and function assignment [4825557] +- Avoid unnecessary conversions [9d9403c] +- JUnit: include more detailed information about panic [19cca4b] +- Print help to stdout when the user asks for help [4cb7441] + + +## 1.8.0 + +### New Features +- allow config of the vet flag for `go test` (#562) [3cd45fa] +- Support projects using go modules [d56ee76] + +### Fixes and Minor Improvements +- chore(godoc): fixes typos in Measurement funcs [dbaca8e] +- Optimize focus to avoid allocations [f493786] +- Ensure generated test file names are underscored [505cc35] + +## 1.7.0 + +### New Features +- Add JustAfterEach (#484) [0d4f080] + +### Fixes +- Correctly round suite time in junit reporter [2445fc1] +- Avoid using -i argument to go test for Golang 1.10+ [46bbc26] + +## 1.6.0 + +### New Features +- add --debug flag to emit node output to files (#499) [39febac] + +### Fixes +- fix: for `go vet` to pass [69338ec] +- docs: fix for contributing instructions [7004cb1] +- consolidate and streamline contribution docs (#494) [d848015] +- Make generated Junit file compatible with "Maven Surefire" (#488) [e51bee6] +- all: gofmt [000d317] +- Increase eventually timeout to 30s [c73579c] +- Clarify asynchronous test behavior [294d8f4] +- Travis badge should only show master [26d2143] + +## 1.5.0 5/10/2018 + +### New Features +- Supports go v1.10 (#443, #446, #451) [e873237, 468e89e, e37dbfe, a37f4c0, c0b857d, bca5260, 4177ca8] +- Add a When() synonym for Context() (#386) [747514b, 7484dad, 7354a07, dd826c8] +- Re-add noisySkippings flag [652e15c] +- Allow coverage to be displayed for focused specs (#367) [11459a8] +- Handle -outputdir flag (#364) [228e3a8] +- Handle -coverprofile flag (#355) [43392d5] + +### Fixes +- When using custom reporters register the custom reporters *before* the default reporter. This allows users to see the output of any print statements in their customer reporters. (#365) [8382b23] +- When running a test and calculating the coverage using the `-coverprofile` and `-outputdir` flags, Ginkgo fails with an error if the directory does not exist. This is due to an [issue in go 1.10](https://github.com/golang/go/issues/24588) (#446) [b36a6e0] +- `unfocus` command ignores vendor folder (#459) [e5e551c, c556e43, a3b6351, 9a820dd] +- Ignore packages whose tests are all ignored by go (#456) [7430ca7, 6d8be98] +- Increase the threshold when checking time measurements (#455) [2f714bf, 68f622c] +- Fix race condition in coverage tests (#423) [a5a8ff7, ab9c08b] +- Add an extra new line after reporting spec run completion for test2json [874520d] +- added name name field to junit reported testsuite [ae61c63] +- Do not set the run time of a spec when the dryRun flag is used (#438) [457e2d9, ba8e856] +- Process FWhen and FSpecify when unfocusing (#434) [9008c7b, ee65bd, df87dfe] +- Synchronies the access to the state of specs to avoid race conditions (#430) [7d481bc, ae6829d] +- Added Duration on GinkgoTestDescription (#383) [5f49dad, 528417e, 0747408, 329d7ed] +- Fix Ginkgo stack trace on failure for Specify (#415) [b977ede, 65ca40e, 6c46eb8] +- Update README with Go 1.6+, Golang -> Go (#409) [17f6b97, bc14b66, 20d1598] +- Use fmt.Errorf instead of errors.New(fmt.Sprintf (#401) [a299f56, 44e2eaa] +- Imports in generated code should follow conventions (#398) [0bec0b0, e8536d8] +- Prevent data race error when Recording a benchmark value from multiple go routines (#390) [c0c4881, 7a241e9] +- Replace GOPATH in Environment [4b883f0] + + +## 1.4.0 7/16/2017 + +- `ginkgo` now provides a hint if you accidentally forget to run `ginkgo bootstrap` to generate a `*_suite_test.go` file that actually invokes the Ginkgo test runner. [#345](https://github.com/onsi/ginkgo/pull/345) +- thanks to improvements in `go test -c` `ginkgo` no longer needs to fix Go's compilation output to ensure compilation errors are expressed relative to the CWD. [#357] +- `ginkgo watch -watchRegExp=...` allows you to specify a custom regular expression to watch. Only files matching the regular expression are watched for changes (the default is `\.go$`) [#356] +- `ginkgo` now always emits compilation output. Previously, only failed compilation output was printed out. [#277] +- `ginkgo -requireSuite` now fails the test run if there are `*_test.go` files but `go test` fails to detect any tests. Typically this means you forgot to run `ginkgo bootstrap` to generate a suite file. [#344] +- `ginkgo -timeout=DURATION` allows you to adjust the timeout for the entire test suite (default is 24 hours) [#248] + +## 1.3.0 3/28/2017 + +Improvements: + +- Significantly improved parallel test distribution. Now instead of pre-sharding test cases across workers (which can result in idle workers and poor test performance) Ginkgo uses a shared queue to keep all workers busy until all tests are complete. This improves test-time performance and consistency. +- `Skip(message)` can be used to skip the current test. +- Added `extensions/table` - a Ginkgo DSL for [Table Driven Tests](http://onsi.github.io/ginkgo/#table-driven-tests) +- Add `GinkgoRandomSeed()` - shorthand for `config.GinkgoConfig.RandomSeed` +- Support for retrying flaky tests with `--flakeAttempts` +- `ginkgo ./...` now recurses as you'd expect +- Added `Specify` a synonym for `It` +- Support colorise on Windows +- Broader support for various go compilation flags in the `ginkgo` CLI + +Bug Fixes: + +- Ginkgo tests now fail when you `panic(nil)` (#167) + +## 1.2.0 5/31/2015 + +Improvements + +- `ginkgo -coverpkg` calls down to `go test -coverpkg` (#160) +- `ginkgo -afterSuiteHook COMMAND` invokes the passed-in `COMMAND` after a test suite completes (#152) +- Relaxed requirement for Go 1.4+. `ginkgo` now works with Go v1.3+ (#166) + +## 1.2.0-beta + +Ginkgo now requires Go 1.4+ + +Improvements: + +- Call reporters in reverse order when announcing spec completion -- allows custom reporters to emit output before the default reporter does. +- Improved focus behavior. Now, this: + + ```golang + FDescribe("Some describe", func() { + It("A", func() {}) + + FIt("B", func() {}) + }) + ``` + + will run `B` but *not* `A`. This tends to be a common usage pattern when in the thick of writing and debugging tests. +- When `SIGINT` is received, Ginkgo will emit the contents of the `GinkgoWriter` before running the `AfterSuite`. Useful for debugging stuck tests. +- When `--progress` is set, Ginkgo will write test progress (in particular, Ginkgo will say when it is about to run a BeforeEach, AfterEach, It, etc...) to the `GinkgoWriter`. This is useful for debugging stuck tests and tests that generate many logs. +- Improved output when an error occurs in a setup or teardown block. +- When `--dryRun` is set, Ginkgo will walk the spec tree and emit to its reporter *without* actually running anything. Best paired with `-v` to understand which specs will run in which order. +- Add `By` to help document long `It`s. `By` simply writes to the `GinkgoWriter`. +- Add support for precompiled tests: + - `ginkgo build ` will now compile the package, producing a file named `package.test` + - The compiled `package.test` file can be run directly. This runs the tests in series. + - To run precompiled tests in parallel, you can run: `ginkgo -p package.test` +- Support `bootstrap`ping and `generate`ing [Agouti](http://agouti.org) specs. +- `ginkgo generate` and `ginkgo bootstrap` now honor the package name already defined in a given directory +- The `ginkgo` CLI ignores `SIGQUIT`. Prevents its stack dump from interlacing with the underlying test suite's stack dump. +- The `ginkgo` CLI now compiles tests into a temporary directory instead of the package directory. This necessitates upgrading to Go v1.4+. +- `ginkgo -notify` now works on Linux + +Bug Fixes: + +- If --skipPackages is used and all packages are skipped, Ginkgo should exit 0. +- Fix tempfile leak when running in parallel +- Fix incorrect failure message when a panic occurs during a parallel test run +- Fixed an issue where a pending test within a focused context (or a focused test within a pending context) would skip all other tests. +- Be more consistent about handling SIGTERM as well as SIGINT +- When interrupted while concurrently compiling test suites in the background, Ginkgo now cleans up the compiled artifacts. +- Fixed a long standing bug where `ginkgo -p` would hang if a process spawned by one of the Ginkgo parallel nodes does not exit. (Hooray!) + +## 1.1.0 (8/2/2014) + +No changes, just dropping the beta. + +## 1.1.0-beta (7/22/2014) +New Features: + +- `ginkgo watch` now monitors packages *and their dependencies* for changes. The depth of the dependency tree can be modified with the `-depth` flag. +- Test suites with a programmatic focus (`FIt`, `FDescribe`, etc...) exit with non-zero status code, even when they pass. This allows CI systems to detect accidental commits of focused test suites. +- `ginkgo -p` runs the testsuite in parallel with an auto-detected number of nodes. +- `ginkgo -tags=TAG_LIST` passes a list of tags down to the `go build` command. +- `ginkgo --failFast` aborts the test suite after the first failure. +- `ginkgo generate file_1 file_2` can take multiple file arguments. +- Ginkgo now summarizes any spec failures that occurred at the end of the test run. +- `ginkgo --randomizeSuites` will run tests *suites* in random order using the generated/passed-in seed. + +Improvements: + +- `ginkgo -skipPackage` now takes a comma-separated list of strings. If the *relative path* to a package matches one of the entries in the comma-separated list, that package is skipped. +- `ginkgo --untilItFails` no longer recompiles between attempts. +- Ginkgo now panics when a runnable node (`It`, `BeforeEach`, `JustBeforeEach`, `AfterEach`, `Measure`) is nested within another runnable node. This is always a mistake. Any test suites that panic because of this change should be fixed. + +Bug Fixes: + +- `ginkgo boostrap` and `ginkgo generate` no longer fail when dealing with `hyphen-separated-packages`. +- parallel specs are now better distributed across nodes - fixed a crashing bug where (for example) distributing 11 tests across 7 nodes would panic + +## 1.0.0 (5/24/2014) +New Features: + +- Add `GinkgoParallelNode()` - shorthand for `config.GinkgoConfig.ParallelNode` + +Improvements: + +- When compilation fails, the compilation output is rewritten to present a correct *relative* path. Allows ⌘-clicking in iTerm open the file in your text editor. +- `--untilItFails` and `ginkgo watch` now generate new random seeds between test runs, unless a particular random seed is specified. + +Bug Fixes: + +- `-cover` now generates a correctly combined coverprofile when running with in parallel with multiple `-node`s. +- Print out the contents of the `GinkgoWriter` when `BeforeSuite` or `AfterSuite` fail. +- Fix all remaining race conditions in Ginkgo's test suite. + +## 1.0.0-beta (4/14/2014) +Breaking changes: + +- `thirdparty/gomocktestreporter` is gone. Use `GinkgoT()` instead +- Modified the Reporter interface +- `watch` is now a subcommand, not a flag. + +DSL changes: + +- `BeforeSuite` and `AfterSuite` for setting up and tearing down test suites. +- `AfterSuite` is triggered on interrupt (`^C`) as well as exit. +- `SynchronizedBeforeSuite` and `SynchronizedAfterSuite` for setting up and tearing down singleton resources across parallel nodes. + +CLI changes: + +- `watch` is now a subcommand, not a flag +- `--nodot` flag can be passed to `ginkgo generate` and `ginkgo bootstrap` to avoid dot imports. This explicitly imports all exported identifiers in Ginkgo and Gomega. Refreshing this list can be done by running `ginkgo nodot` +- Additional arguments can be passed to specs. Pass them after the `--` separator +- `--skipPackage` flag takes a regexp and ignores any packages with package names passing said regexp. +- `--trace` flag prints out full stack traces when errors occur, not just the line at which the error occurs. + +Misc: + +- Start using semantic versioning +- Start maintaining changelog + +Major refactor: + +- Pull out Ginkgo's internal to `internal` +- Rename `example` everywhere to `spec` +- Much more! diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.md b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.md new file mode 100644 index 000000000000..1da92fe7ee27 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contributing to Ginkgo + +Your contributions to Ginkgo are essential for its long-term maintenance and improvement. + +- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code! +- Ensure adequate test coverage: + - When adding to the Ginkgo library, add unit and/or integration tests (under the `integration` folder). + - When adding to the Ginkgo CLI, note that there are very few unit tests. Please add an integration test. +- Make sure all the tests succeed via `ginkgo -r -p` +- Vet your changes via `go vet ./...` +- Update the documentation. Ginkgo uses `godoc` comments and documentation in `docs/index.md`. You can run `bundle exec jekyll serve` in the `docs` directory to preview your changes. + +Thanks for supporting Ginkgo! \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/LICENSE b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/LICENSE new file mode 100644 index 000000000000..9415ee72c17f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/README.md b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/README.md new file mode 100644 index 000000000000..d0473a467c07 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/README.md @@ -0,0 +1,115 @@ +![Ginkgo](https://onsi.github.io/ginkgo/images/ginkgo.png) + +[![test](https://github.com/onsi/ginkgo/workflows/test/badge.svg?branch=master)](https://github.com/onsi/ginkgo/actions?query=workflow%3Atest+branch%3Amaster) | [Ginkgo Docs](https://onsi.github.io/ginkgo/) + +--- + +# Ginkgo + +Ginkgo is a mature testing framework for Go designed to help you write expressive specs. Ginkgo builds on top of Go's `testing` foundation and is complemented by the [Gomega](https://github.com/onsi/gomega) matcher library. Together, Ginkgo and Gomega let you express the intent behind your specs clearly: + +```go +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + ... +) + +Describe("Checking books out of the library", Label("library"), func() { + var library *libraries.Library + var book *books.Book + var valjean *users.User + BeforeEach(func() { + library = libraries.NewClient() + book = &books.Book{ + Title: "Les Miserables", + Author: "Victor Hugo", + } + valjean = users.NewUser("Jean Valjean") + }) + + When("the library has the book in question", func() { + BeforeEach(func(ctx SpecContext) { + Expect(library.Store(ctx, book)).To(Succeed()) + }) + + Context("and the book is available", func() { + It("lends it to the reader", func(ctx SpecContext) { + Expect(valjean.Checkout(ctx, library, "Les Miserables")).To(Succeed()) + Expect(valjean.Books()).To(ContainElement(book)) + Expect(library.UserWithBook(ctx, book)).To(Equal(valjean)) + }, SpecTimeout(time.Second * 5)) + }) + + Context("but the book has already been checked out", func() { + var javert *users.User + BeforeEach(func(ctx SpecContext) { + javert = users.NewUser("Javert") + Expect(javert.Checkout(ctx, library, "Les Miserables")).To(Succeed()) + }) + + It("tells the user", func(ctx SpecContext) { + err := valjean.Checkout(ctx, library, "Les Miserables") + Expect(error).To(MatchError("Les Miserables is currently checked out")) + }, SpecTimeout(time.Second * 5)) + + It("lets the user place a hold and get notified later", func(ctx SpecContext) { + Expect(valjean.Hold(ctx, library, "Les Miserables")).To(Succeed()) + Expect(valjean.Holds(ctx)).To(ContainElement(book)) + + By("when Javert returns the book") + Expect(javert.Return(ctx, library, book)).To(Succeed()) + + By("it eventually informs Valjean") + notification := "Les Miserables is ready for pick up" + Eventually(ctx, valjean.Notifications).Should(ContainElement(notification)) + + Expect(valjean.Checkout(ctx, library, "Les Miserables")).To(Succeed()) + Expect(valjean.Books(ctx)).To(ContainElement(book)) + Expect(valjean.Holds(ctx)).To(BeEmpty()) + }, SpecTimeout(time.Second * 10)) + }) + }) + + When("the library does not have the book in question", func() { + It("tells the reader the book is unavailable", func(ctx SpecContext) { + err := valjean.Checkout(ctx, library, "Les Miserables") + Expect(error).To(MatchError("Les Miserables is not in the library catalog")) + }, SpecTimeout(time.Second * 5)) + }) +}) +``` + +Jump to the [docs](https://onsi.github.io/ginkgo/) to learn more. It's easy to [bootstrap](https://onsi.github.io/ginkgo/#bootstrapping-a-suite) and start writing your [first specs](https://onsi.github.io/ginkgo/#adding-specs-to-a-suite). + +If you have a question, comment, bug report, feature request, etc. please open a [GitHub issue](https://github.com/onsi/ginkgo/issues/new), or visit the [Ginkgo Slack channel](https://app.slack.com/client/T029RQSE6/CQQ50BBNW). + +## Capabilities + +Whether writing basic unit specs, complex integration specs, or even performance specs - Ginkgo gives you an expressive Domain-Specific Language (DSL) that will be familiar to users coming from frameworks such as [Quick](https://github.com/Quick/Quick), [RSpec](https://rspec.info), [Jasmine](https://jasmine.github.io), and [Busted](https://lunarmodules.github.io/busted/). This style of testing is sometimes referred to as "Behavior-Driven Development" (BDD) though Ginkgo's utility extends beyond acceptance-level testing. + +With Ginkgo's DSL you can use nestable [`Describe`, `Context` and `When` container nodes](https://onsi.github.io/ginkgo/#organizing-specs-with-container-nodes) to help you organize your specs. [`BeforeEach` and `AfterEach` setup nodes](https://onsi.github.io/ginkgo/#extracting-common-setup-beforeeach) for setup and cleanup. [`It` and `Specify` subject nodes](https://onsi.github.io/ginkgo/#spec-subjects-it) that hold your assertions. [`BeforeSuite` and `AfterSuite` nodes](https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite) to prep for and cleanup after a suite... and [much more!](https://onsi.github.io/ginkgo/#writing-specs). + +At runtime, Ginkgo can run your specs in reproducibly [random order](https://onsi.github.io/ginkgo/#spec-randomization) and has sophisticated support for [spec parallelization](https://onsi.github.io/ginkgo/#spec-parallelization). In fact, running specs in parallel is as easy as + +```bash +ginkgo -p +``` + +By following [established patterns for writing parallel specs](https://onsi.github.io/ginkgo/#patterns-for-parallel-integration-specs) you can build even large, complex integration suites that parallelize cleanly and run performantly. And you don't have to worry about your spec suite hanging or leaving a mess behind - Ginkgo provides a per-node `context.Context` and the capability to interrupt the spec after a set period of time - and then clean up. + +As your suites grow Ginkgo helps you keep your specs organized with [labels](https://onsi.github.io/ginkgo/#spec-labels) and lets you easily run [subsets of specs](https://onsi.github.io/ginkgo/#filtering-specs), either [programmatically](https://onsi.github.io/ginkgo/#focused-specs) or on the [command line](https://onsi.github.io/ginkgo/#combining-filters). And Ginkgo's reporting infrastructure generates machine-readable output in a [variety of formats](https://onsi.github.io/ginkgo/#generating-machine-readable-reports) _and_ allows you to build your own [custom reporting infrastructure](https://onsi.github.io/ginkgo/#generating-reports-programmatically). + +Ginkgo ships with `ginkgo`, a [command line tool](https://onsi.github.io/ginkgo/#ginkgo-cli-overview) with support for generating, running, filtering, and profiling Ginkgo suites. You can even have Ginkgo automatically run your specs when it detects a change with `ginkgo watch`, enabling rapid feedback loops during test-driven development. + +And that's just Ginkgo! [Gomega](https://onsi.github.io/gomega/) brings a rich, mature, family of [assertions and matchers](https://onsi.github.io/gomega/#provided-matchers) to your suites. With Gomega you can easily mix [synchronous and asynchronous assertions](https://onsi.github.io/ginkgo/#patterns-for-asynchronous-testing) in your specs. You can even build your own set of expressive domain-specific matchers quickly and easily by composing Gomega's [existing building blocks](https://onsi.github.io/ginkgo/#building-custom-matchers). + +Happy Testing! + +## License + +Ginkgo is MIT-Licensed + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/RELEASING.md b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/RELEASING.md new file mode 100644 index 000000000000..363815d7c7f4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/RELEASING.md @@ -0,0 +1,23 @@ +A Ginkgo release is a tagged git sha and a GitHub release. To cut a release: + +1. Ensure CHANGELOG.md is up to date. + - Use + ```bash + LAST_VERSION=$(git tag --sort=version:refname | tail -n1) + CHANGES=$(git log --pretty=format:'- %s [%h]' HEAD...$LAST_VERSION) + echo -e "## NEXT\n\n$CHANGES\n\n### Features\n\n### Fixes\n\n### Maintenance\n\n$(cat CHANGELOG.md)" > CHANGELOG.md + ``` + to update the changelog + - Categorize the changes into + - Breaking Changes (requires a major version) + - New Features (minor version) + - Fixes (fix version) + - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact) +1. Update `VERSION` in `types/version.go` +1. Commit, push, and release: + ``` + git commit -m "vM.m.p" + git push + gh release create "vM.m.p" + git fetch --tags origin master + ``` \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/config/deprecated.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/config/deprecated.go new file mode 100644 index 000000000000..a61021d08893 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/config/deprecated.go @@ -0,0 +1,69 @@ +package config + +// GinkgoConfigType has been deprecated and its equivalent now lives in +// the types package. You can no longer access Ginkgo configuration from the config +// package. Instead use the DSL's GinkgoConfiguration() function to get copies of the +// current configuration +// +// GinkgoConfigType is still here so custom V1 reporters do not result in a compilation error +// It will be removed in a future minor release of Ginkgo +type GinkgoConfigType = DeprecatedGinkgoConfigType +type DeprecatedGinkgoConfigType struct { + RandomSeed int64 + RandomizeAllSpecs bool + RegexScansFilePath bool + FocusStrings []string + SkipStrings []string + SkipMeasurements bool + FailOnPending bool + FailFast bool + FlakeAttempts int + EmitSpecProgress bool + DryRun bool + DebugParallel bool + + ParallelNode int + ParallelTotal int + SyncHost string + StreamHost string +} + +// DefaultReporterConfigType has been deprecated and its equivalent now lives in +// the types package. You can no longer access Ginkgo configuration from the config +// package. Instead use the DSL's GinkgoConfiguration() function to get copies of the +// current configuration +// +// DefaultReporterConfigType is still here so custom V1 reporters do not result in a compilation error +// It will be removed in a future minor release of Ginkgo +type DefaultReporterConfigType = DeprecatedDefaultReporterConfigType +type DeprecatedDefaultReporterConfigType struct { + NoColor bool + SlowSpecThreshold float64 + NoisyPendings bool + NoisySkippings bool + Succinct bool + Verbose bool + FullTrace bool + ReportPassed bool + ReportFile string +} + +// Sadly there is no way to gracefully deprecate access to these global config variables. +// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method +// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails +type GinkgoConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead struct{} + +// Sadly there is no way to gracefully deprecate access to these global config variables. +// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method +// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails +var GinkgoConfig = GinkgoConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead{} + +// Sadly there is no way to gracefully deprecate access to these global config variables. +// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method +// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails +type DefaultReporterConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead struct{} + +// Sadly there is no way to gracefully deprecate access to these global config variables. +// Users who need access to Ginkgo's configuration should use the DSL's GinkgoConfiguration() method +// These new unwieldy type names exist to give users a hint when they try to compile and the compilation fails +var DefaultReporterConfig = DefaultReporterConfigIsNoLongerAccessibleFromTheConfigPackageUseTheDSLsGinkgoConfigurationFunctionInstead{} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/core_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/core_dsl.go new file mode 100644 index 000000000000..a244bdc18012 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/core_dsl.go @@ -0,0 +1,794 @@ +/* +Ginkgo is a testing framework for Go designed to help you write expressive tests. +https://github.com/onsi/ginkgo +MIT-Licensed + +The godoc documentation outlines Ginkgo's API. Since Ginkgo is a Domain-Specific Language it is important to +build a mental model for Ginkgo - the narrative documentation at https://onsi.github.io/ginkgo/ is designed to help you do that. +You should start there - even a brief skim will be helpful. At minimum you should skim through the https://onsi.github.io/ginkgo/#getting-started chapter. + +Ginkgo's is best paired with the Gomega matcher library: https://github.com/onsi/gomega + +You can run Ginkgo specs with go test - however we recommend using the ginkgo cli. It enables functionality +that go test does not (especially running suites in parallel). You can learn more at https://onsi.github.io/ginkgo/#ginkgo-cli-overview +or by running 'ginkgo help'. +*/ +package ginkgo + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" + + "github.com/go-logr/logr" + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/internal" + "github.com/onsi/ginkgo/v2/internal/global" + "github.com/onsi/ginkgo/v2/internal/interrupt_handler" + "github.com/onsi/ginkgo/v2/internal/parallel_support" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +const GINKGO_VERSION = types.VERSION + +var flagSet types.GinkgoFlagSet +var deprecationTracker = types.NewDeprecationTracker() +var suiteConfig = types.NewDefaultSuiteConfig() +var reporterConfig = types.NewDefaultReporterConfig() +var suiteDidRun = false +var outputInterceptor internal.OutputInterceptor +var client parallel_support.Client + +func init() { + var err error + flagSet, err = types.BuildTestSuiteFlagSet(&suiteConfig, &reporterConfig) + exitIfErr(err) + writer := internal.NewWriter(os.Stdout) + GinkgoWriter = writer + GinkgoLogr = internal.GinkgoLogrFunc(writer) +} + +func exitIfErr(err error) { + if err != nil { + if outputInterceptor != nil { + outputInterceptor.Shutdown() + } + if client != nil { + client.Close() + } + fmt.Fprintln(formatter.ColorableStdErr, err.Error()) + os.Exit(1) + } +} + +func exitIfErrors(errors []error) { + if len(errors) > 0 { + if outputInterceptor != nil { + outputInterceptor.Shutdown() + } + if client != nil { + client.Close() + } + for _, err := range errors { + fmt.Fprintln(formatter.ColorableStdErr, err.Error()) + } + os.Exit(1) + } +} + +// The interface implemented by GinkgoWriter +type GinkgoWriterInterface interface { + io.Writer + + Print(a ...interface{}) + Printf(format string, a ...interface{}) + Println(a ...interface{}) + + TeeTo(writer io.Writer) + ClearTeeWriters() +} + +/* +SpecContext is the context object passed into nodes that are subject to a timeout or need to be notified of an interrupt. It implements the standard context.Context interface but also contains additional helpers to provide an extensibility point for Ginkgo. (As an example, Gomega's Eventually can use the methods defined on SpecContext to provide deeper integration with Ginkgo). + +You can do anything with SpecContext that you do with a typical context.Context including wrapping it with any of the context.With* methods. + +Ginkgo will cancel the SpecContext when a node is interrupted (e.g. by the user sending an interrupt signal) or when a node has exceeded its allowed run-time. Note, however, that even in cases where a node has a deadline, SpecContext will not return a deadline via .Deadline(). This is because Ginkgo does not use a WithDeadline() context to model node deadlines as Ginkgo needs control over the precise timing of the context cancellation to ensure it can provide an accurate progress report at the moment of cancellation. +*/ +type SpecContext = internal.SpecContext + +/* +GinkgoWriter implements a GinkgoWriterInterface and io.Writer + +When running in verbose mode (ginkgo -v) any writes to GinkgoWriter will be immediately printed +to stdout. Otherwise, GinkgoWriter will buffer any writes produced during the current test and flush them to screen +only if the current test fails. + +GinkgoWriter also provides convenience Print, Printf and Println methods and allows you to tee to a custom writer via GinkgoWriter.TeeTo(writer). +Writes to GinkgoWriter are immediately sent to any registered TeeTo() writers. You can unregister all TeeTo() Writers with GinkgoWriter.ClearTeeWriters() + +You can learn more at https://onsi.github.io/ginkgo/#logging-output +*/ +var GinkgoWriter GinkgoWriterInterface + +/* +GinkgoLogr is a logr.Logger that writes to GinkgoWriter +*/ +var GinkgoLogr logr.Logger + +// The interface by which Ginkgo receives *testing.T +type GinkgoTestingT interface { + Fail() +} + +/* +GinkgoConfiguration returns the configuration of the current suite. + +The first return value is the SuiteConfig which controls aspects of how the suite runs, +the second return value is the ReporterConfig which controls aspects of how Ginkgo's default +reporter emits output. + +Mutating the returned configurations has no effect. To reconfigure Ginkgo programmatically you need +to pass in your mutated copies into RunSpecs(). + +You can learn more at https://onsi.github.io/ginkgo/#overriding-ginkgos-command-line-configuration-in-the-suite +*/ +func GinkgoConfiguration() (types.SuiteConfig, types.ReporterConfig) { + return suiteConfig, reporterConfig +} + +/* +GinkgoRandomSeed returns the seed used to randomize spec execution order. It is +useful for seeding your own pseudorandom number generators to ensure +consistent executions from run to run, where your tests contain variability (for +example, when selecting random spec data). + +You can learn more at https://onsi.github.io/ginkgo/#spec-randomization +*/ +func GinkgoRandomSeed() int64 { + return suiteConfig.RandomSeed +} + +/* +GinkgoParallelProcess returns the parallel process number for the current ginkgo process +The process number is 1-indexed. You can use GinkgoParallelProcess() to shard access to shared +resources across your suites. You can learn more about patterns for sharding at https://onsi.github.io/ginkgo/#patterns-for-parallel-integration-specs + +For more on how specs are parallelized in Ginkgo, see http://onsi.github.io/ginkgo/#spec-parallelization +*/ +func GinkgoParallelProcess() int { + return suiteConfig.ParallelProcess +} + +/* +GinkgoHelper marks the function it's called in as a test helper. When a failure occurs inside a helper function, Ginkgo will skip the helper when analyzing the stack trace to identify where the failure occurred. + +This is an alternative, simpler, mechanism to passing in a skip offset when calling Fail or using Gomega. +*/ +func GinkgoHelper() { + types.MarkAsHelper(1) +} + +/* +GinkgoLabelFilter() returns the label filter configured for this suite via `--label-filter`. + +You can use this to manually check if a set of labels would satisfy the filter via: + + if (Label("cat", "dog").MatchesLabelFilter(GinkgoLabelFilter())) { + //... + } +*/ +func GinkgoLabelFilter() string { + suiteConfig, _ := GinkgoConfiguration() + return suiteConfig.LabelFilter +} + +/* +PauseOutputInterception() pauses Ginkgo's output interception. This is only relevant +when running in parallel and output to stdout/stderr is being intercepted. You generally +don't need to call this function - however there are cases when Ginkgo's output interception +mechanisms can interfere with external processes launched by the test process. + +In particular, if an external process is launched that has cmd.Stdout/cmd.Stderr set to os.Stdout/os.Stderr +then Ginkgo's output interceptor will hang. To circumvent this, set cmd.Stdout/cmd.Stderr to GinkgoWriter. +If, for some reason, you aren't able to do that, you can PauseOutputInterception() before starting the process +then ResumeOutputInterception() after starting it. + +Note that PauseOutputInterception() does not cause stdout writes to print to the console - +this simply stops intercepting and storing stdout writes to an internal buffer. +*/ +func PauseOutputInterception() { + if outputInterceptor == nil { + return + } + outputInterceptor.PauseIntercepting() +} + +// ResumeOutputInterception() - see docs for PauseOutputInterception() +func ResumeOutputInterception() { + if outputInterceptor == nil { + return + } + outputInterceptor.ResumeIntercepting() +} + +/* +RunSpecs is the entry point for the Ginkgo spec runner. + +You must call this within a Golang testing TestX(t *testing.T) function. +If you bootstrapped your suite with "ginkgo bootstrap" this is already +done for you. + +Ginkgo is typically configured via command-line flags. This configuration +can be overridden, however, and passed into RunSpecs as optional arguments: + + func TestMySuite(t *testing.T) { + RegisterFailHandler(gomega.Fail) + // fetch the current config + suiteConfig, reporterConfig := GinkgoConfiguration() + // adjust it + suiteConfig.SkipStrings = []string{"NEVER-RUN"} + reporterConfig.FullTrace = true + // pass it in to RunSpecs + RunSpecs(t, "My Suite", suiteConfig, reporterConfig) + } + +Note that some configuration changes can lead to undefined behavior. For example, +you should not change ParallelProcess or ParallelTotal as the Ginkgo CLI is responsible +for setting these and orchestrating parallel specs across the parallel processes. See http://onsi.github.io/ginkgo/#spec-parallelization +for more on how specs are parallelized in Ginkgo. + +You can also pass suite-level Label() decorators to RunSpecs. The passed-in labels will apply to all specs in the suite. +*/ +func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool { + if suiteDidRun { + exitIfErr(types.GinkgoErrors.RerunningSuite()) + } + suiteDidRun = true + + suiteLabels := Labels{} + configErrors := []error{} + for _, arg := range args { + switch arg := arg.(type) { + case types.SuiteConfig: + suiteConfig = arg + case types.ReporterConfig: + reporterConfig = arg + case Labels: + suiteLabels = append(suiteLabels, arg...) + default: + configErrors = append(configErrors, types.GinkgoErrors.UnknownTypePassedToRunSpecs(arg)) + } + } + exitIfErrors(configErrors) + + configErrors = types.VetConfig(flagSet, suiteConfig, reporterConfig) + if len(configErrors) > 0 { + fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{red}}Ginkgo detected configuration issues:{{/}}\n")) + for _, err := range configErrors { + fmt.Fprintf(formatter.ColorableStdErr, err.Error()) + } + os.Exit(1) + } + + var reporter reporters.Reporter + if suiteConfig.ParallelTotal == 1 { + reporter = reporters.NewDefaultReporter(reporterConfig, formatter.ColorableStdOut) + outputInterceptor = internal.NoopOutputInterceptor{} + client = nil + } else { + reporter = reporters.NoopReporter{} + switch strings.ToLower(suiteConfig.OutputInterceptorMode) { + case "swap": + outputInterceptor = internal.NewOSGlobalReassigningOutputInterceptor() + case "none": + outputInterceptor = internal.NoopOutputInterceptor{} + default: + outputInterceptor = internal.NewOutputInterceptor() + } + client = parallel_support.NewClient(suiteConfig.ParallelHost) + if !client.Connect() { + client = nil + exitIfErr(types.GinkgoErrors.UnreachableParallelHost(suiteConfig.ParallelHost)) + } + defer client.Close() + } + + writer := GinkgoWriter.(*internal.Writer) + if reporterConfig.Verbosity().GTE(types.VerbosityLevelVerbose) && suiteConfig.ParallelTotal == 1 { + writer.SetMode(internal.WriterModeStreamAndBuffer) + } else { + writer.SetMode(internal.WriterModeBufferOnly) + } + + if reporterConfig.WillGenerateReport() { + registerReportAfterSuiteNodeForAutogeneratedReports(reporterConfig) + } + + err := global.Suite.BuildTree() + exitIfErr(err) + + suitePath, err := os.Getwd() + exitIfErr(err) + suitePath, err = filepath.Abs(suitePath) + exitIfErr(err) + + passed, hasFocusedTests := global.Suite.Run(description, suiteLabels, suitePath, global.Failer, reporter, writer, outputInterceptor, interrupt_handler.NewInterruptHandler(client), client, internal.RegisterForProgressSignal, suiteConfig) + outputInterceptor.Shutdown() + + flagSet.ValidateDeprecations(deprecationTracker) + if deprecationTracker.DidTrackDeprecations() { + fmt.Fprintln(formatter.ColorableStdErr, deprecationTracker.DeprecationsReport()) + } + + if !passed { + t.Fail() + } + + if passed && hasFocusedTests && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" { + fmt.Println("PASS | FOCUSED") + os.Exit(types.GINKGO_FOCUS_EXIT_CODE) + } + return passed +} + +/* +Skip instructs Ginkgo to skip the current spec + +You can call Skip in any Setup or Subject node closure. + +For more on how to filter specs in Ginkgo see https://onsi.github.io/ginkgo/#filtering-specs +*/ +func Skip(message string, callerSkip ...int) { + skip := 0 + if len(callerSkip) > 0 { + skip = callerSkip[0] + } + cl := types.NewCodeLocationWithStackTrace(skip + 1) + global.Failer.Skip(message, cl) + panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl)) +} + +/* +Fail notifies Ginkgo that the current spec has failed. (Gomega will call Fail for you automatically when an assertion fails.) + +Under the hood, Fail panics to end execution of the current spec. Ginkgo will catch this panic and proceed with +the subsequent spec. If you call Fail, or make an assertion, within a goroutine launched by your spec you must +add defer GinkgoRecover() to the goroutine to catch the panic emitted by Fail. + +You can call Fail in any Setup or Subject node closure. + +You can learn more about how Ginkgo manages failures here: https://onsi.github.io/ginkgo/#mental-model-how-ginkgo-handles-failure +*/ +func Fail(message string, callerSkip ...int) { + skip := 0 + if len(callerSkip) > 0 { + skip = callerSkip[0] + } + + cl := types.NewCodeLocationWithStackTrace(skip + 1) + global.Failer.Fail(message, cl) + panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl)) +} + +/* +AbortSuite instructs Ginkgo to fail the current spec and skip all subsequent specs, thereby aborting the suite. + +You can call AbortSuite in any Setup or Subject node closure. + +You can learn more about how Ginkgo handles suite interruptions here: https://onsi.github.io/ginkgo/#interrupting-aborting-and-timing-out-suites +*/ +func AbortSuite(message string, callerSkip ...int) { + skip := 0 + if len(callerSkip) > 0 { + skip = callerSkip[0] + } + + cl := types.NewCodeLocationWithStackTrace(skip + 1) + global.Failer.AbortSuite(message, cl) + panic(types.GinkgoErrors.UncaughtGinkgoPanic(cl)) +} + +/* +ignorablePanic is used by Gomega to signal to GinkgoRecover that Goemga is handling +the error associated with this panic. It i used when Eventually/Consistently are passed a func(g Gomega) and the resulting function launches a goroutines that makes a failed assertion. That failed assertion is registered by Gomega and then panics. Ordinarily the panic is captured by Gomega. In the case of a goroutine Gomega can't capture the panic - so we piggy back on GinkgoRecover so users have a single defer GinkgoRecover() pattern to follow. To do that we need to tell Ginkgo to ignore this panic and not register it as a panic on the global Failer. +*/ +type ignorablePanic interface{ GinkgoRecoverShouldIgnoreThisPanic() } + +/* +GinkgoRecover should be deferred at the top of any spawned goroutine that (may) call `Fail` +Since Gomega assertions call fail, you should throw a `defer GinkgoRecover()` at the top of any goroutine that +calls out to Gomega + +Here's why: Ginkgo's `Fail` method records the failure and then panics to prevent +further assertions from running. This panic must be recovered. Normally, Ginkgo recovers the panic for you, +however if a panic originates on a goroutine *launched* from one of your specs there's no +way for Ginkgo to rescue the panic. To do this, you must remember to `defer GinkgoRecover()` at the top of such a goroutine. + +You can learn more about how Ginkgo manages failures here: https://onsi.github.io/ginkgo/#mental-model-how-ginkgo-handles-failure +*/ +func GinkgoRecover() { + e := recover() + if e != nil { + if _, ok := e.(ignorablePanic); ok { + return + } + global.Failer.Panic(types.NewCodeLocationWithStackTrace(1), e) + } +} + +// pushNode is used by the various test construction DSL methods to push nodes onto the suite +// it handles returned errors, emits a detailed error message to help the user learn what they may have done wrong, then exits +func pushNode(node internal.Node, errors []error) bool { + exitIfErrors(errors) + exitIfErr(global.Suite.PushNode(node)) + return true +} + +/* +Describe nodes are Container nodes that allow you to organize your specs. A Describe node's closure can contain any number of +Setup nodes (e.g. BeforeEach, AfterEach, JustBeforeEach), and Subject nodes (i.e. It). + +Context and When nodes are aliases for Describe - use whichever gives your suite a better narrative flow. It is idomatic +to Describe the behavior of an object or function and, within that Describe, outline a number of Contexts and Whens. + +You can learn more at https://onsi.github.io/ginkgo/#organizing-specs-with-container-nodes +In addition, container nodes can be decorated with a variety of decorators. You can learn more here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +func Describe(text string, args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...)) +} + +/* +FDescribe focuses specs within the Describe block. +*/ +func FDescribe(text string, args ...interface{}) bool { + args = append(args, internal.Focus) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...)) +} + +/* +PDescribe marks specs within the Describe block as pending. +*/ +func PDescribe(text string, args ...interface{}) bool { + args = append(args, internal.Pending) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, text, args...)) +} + +/* +XDescribe marks specs within the Describe block as pending. + +XDescribe is an alias for PDescribe +*/ +var XDescribe = PDescribe + +/* Context is an alias for Describe - it generates the exact same kind of Container node */ +var Context, FContext, PContext, XContext = Describe, FDescribe, PDescribe, XDescribe + +/* When is an alias for Describe - it generates the exact same kind of Container node */ +func When(text string, args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +/* When is an alias for Describe - it generates the exact same kind of Container node */ +func FWhen(text string, args ...interface{}) bool { + args = append(args, internal.Focus) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +/* When is an alias for Describe - it generates the exact same kind of Container node */ +func PWhen(text string, args ...interface{}) bool { + args = append(args, internal.Pending) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +var XWhen = PWhen + +/* +It nodes are Subject nodes that contain your spec code and assertions. + +Each It node corresponds to an individual Ginkgo spec. You cannot nest any other Ginkgo nodes within an It node's closure. + +You can pass It nodes bare functions (func() {}) or functions that receive a SpecContext or context.Context: func(ctx SpecContext) {} and func (ctx context.Context) {}. If the function takes a context then the It is deemed interruptible and Ginkgo will cancel the context in the event of a timeout (configured via the SpecTimeout() or NodeTimeout() decorators) or of an interrupt signal. + +You can learn more at https://onsi.github.io/ginkgo/#spec-subjects-it +In addition, subject nodes can be decorated with a variety of decorators. You can learn more here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +func It(text string, args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...)) +} + +/* +FIt allows you to focus an individual It. +*/ +func FIt(text string, args ...interface{}) bool { + args = append(args, internal.Focus) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...)) +} + +/* +PIt allows you to mark an individual It as pending. +*/ +func PIt(text string, args ...interface{}) bool { + args = append(args, internal.Pending) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, text, args...)) +} + +/* +XIt allows you to mark an individual It as pending. + +XIt is an alias for PIt +*/ +var XIt = PIt + +/* +Specify is an alias for It - it can allow for more natural wording in some context. +*/ +var Specify, FSpecify, PSpecify, XSpecify = It, FIt, PIt, XIt + +/* +By allows you to better document complex Specs. + +Generally you should try to keep your Its short and to the point. This is not always possible, however, +especially in the context of integration tests that capture complex or lengthy workflows. + +By allows you to document such flows. By may be called within a Setup or Subject node (It, BeforeEach, etc...) +and will simply log the passed in text to the GinkgoWriter. If By is handed a function it will immediately run the function. + +By will also generate and attach a ReportEntry to the spec. This will ensure that By annotations appear in Ginkgo's machine-readable reports. + +Note that By does not generate a new Ginkgo node - rather it is simply syntactic sugar around GinkgoWriter and AddReportEntry +You can learn more about By here: https://onsi.github.io/ginkgo/#documenting-complex-specs-by +*/ +func By(text string, callback ...func()) { + exitIfErr(global.Suite.By(text, callback...)) +} + +/* +BeforeSuite nodes are suite-level Setup nodes that run just once before any specs are run. +When running in parallel, each parallel process will call BeforeSuite. + +You may only register *one* BeforeSuite handler per test suite. You typically do so in your bootstrap file at the top level. + +BeforeSuite can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within a BeforeSuite node's closure. +You can learn more here: https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite +*/ +func BeforeSuite(body interface{}, args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeSuite, "", combinedArgs...)) +} + +/* +AfterSuite nodes are suite-level Setup nodes run after all specs have finished - regardless of whether specs have passed or failed. +AfterSuite node closures always run, even if Ginkgo receives an interrupt signal (^C), in order to ensure cleanup occurs. + +When running in parallel, each parallel process will call AfterSuite. + +You may only register *one* AfterSuite handler per test suite. You typically do so in your bootstrap file at the top level. + +AfterSuite can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within an AfterSuite node's closure. +You can learn more here: https://onsi.github.io/ginkgo/#suite-setup-and-cleanup-beforesuite-and-aftersuite +*/ +func AfterSuite(body interface{}, args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterSuite, "", combinedArgs...)) +} + +/* +SynchronizedBeforeSuite nodes allow you to perform some of the suite setup just once - on parallel process #1 - and then pass information +from that setup to the rest of the suite setup on all processes. This is useful for performing expensive or singleton setup once, then passing +information from that setup to all parallel processes. + +SynchronizedBeforeSuite accomplishes this by taking *two* function arguments and passing data between them. +The first function is only run on parallel process #1. The second is run on all processes, but *only* after the first function completes successfully. The functions have the following signatures: + +The first function (which only runs on process #1) can have any of the following the signatures: + + func() + func(ctx context.Context) + func(ctx SpecContext) + func() []byte + func(ctx context.Context) []byte + func(ctx SpecContext) []byte + +The byte array returned by the first function (if present) is then passed to the second function, which can have any of the following signature: + + func() + func(ctx context.Context) + func(ctx SpecContext) + func(data []byte) + func(ctx context.Context, data []byte) + func(ctx SpecContext, data []byte) + +If either function receives a context.Context/SpecContext it is considered interruptible. + +You cannot nest any other Ginkgo nodes within an SynchronizedBeforeSuite node's closure. +You can learn more, and see some examples, here: https://onsi.github.io/ginkgo/#parallel-suite-setup-and-cleanup-synchronizedbeforesuite-and-synchronizedaftersuite +*/ +func SynchronizedBeforeSuite(process1Body interface{}, allProcessBody interface{}, args ...interface{}) bool { + combinedArgs := []interface{}{process1Body, allProcessBody} + combinedArgs = append(combinedArgs, args...) + + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeSynchronizedBeforeSuite, "", combinedArgs...)) +} + +/* +SynchronizedAfterSuite nodes complement the SynchronizedBeforeSuite nodes in solving the problem of splitting clean up into a piece that runs on all processes +and a piece that must only run once - on process #1. + +SynchronizedAfterSuite accomplishes this by taking *two* function arguments. The first runs on all processes. The second runs only on parallel process #1 +and *only* after all other processes have finished and exited. This ensures that process #1, and any resources it is managing, remain alive until +all other processes are finished. These two functions can be bare functions (func()) or interruptible (func(context.Context)/func(SpecContext)) + +Note that you can also use DeferCleanup() in SynchronizedBeforeSuite to accomplish similar results. + +You cannot nest any other Ginkgo nodes within an SynchronizedAfterSuite node's closure. +You can learn more, and see some examples, here: https://onsi.github.io/ginkgo/#parallel-suite-setup-and-cleanup-synchronizedbeforesuite-and-synchronizedaftersuite +*/ +func SynchronizedAfterSuite(allProcessBody interface{}, process1Body interface{}, args ...interface{}) bool { + combinedArgs := []interface{}{allProcessBody, process1Body} + combinedArgs = append(combinedArgs, args...) + + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeSynchronizedAfterSuite, "", combinedArgs...)) +} + +/* +BeforeEach nodes are Setup nodes whose closures run before It node closures. When multiple BeforeEach nodes +are defined in nested Container nodes the outermost BeforeEach node closures are run first. + +BeforeEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within a BeforeEach node's closure. +You can learn more here: https://onsi.github.io/ginkgo/#extracting-common-setup-beforeeach +*/ +func BeforeEach(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeEach, "", args...)) +} + +/* +JustBeforeEach nodes are similar to BeforeEach nodes, however they are guaranteed to run *after* all BeforeEach node closures - just before the It node closure. +This can allow you to separate configuration from creation of resources for a spec. + +JustBeforeEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within a JustBeforeEach node's closure. +You can learn more and see some examples here: https://onsi.github.io/ginkgo/#separating-creation-and-configuration-justbeforeeach +*/ +func JustBeforeEach(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeJustBeforeEach, "", args...)) +} + +/* +AfterEach nodes are Setup nodes whose closures run after It node closures. When multiple AfterEach nodes +are defined in nested Container nodes the innermost AfterEach node closures are run first. + +Note that you can also use DeferCleanup() in other Setup or Subject nodes to accomplish similar results. + +AfterEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within an AfterEach node's closure. +You can learn more here: https://onsi.github.io/ginkgo/#spec-cleanup-aftereach-and-defercleanup +*/ +func AfterEach(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterEach, "", args...)) +} + +/* +JustAfterEach nodes are similar to AfterEach nodes, however they are guaranteed to run *before* all AfterEach node closures - just after the It node closure. This can allow you to separate diagnostics collection from teardown for a spec. + +JustAfterEach can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within a JustAfterEach node's closure. +You can learn more and see some examples here: https://onsi.github.io/ginkgo/#separating-diagnostics-collection-and-teardown-justaftereach +*/ +func JustAfterEach(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeJustAfterEach, "", args...)) +} + +/* +BeforeAll nodes are Setup nodes that can occur inside Ordered containers. They run just once before any specs in the Ordered container run. + +Multiple BeforeAll nodes can be defined in a given Ordered container however they cannot be nested inside any other container. + +BeforeAll can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within a BeforeAll node's closure. +You can learn more about Ordered Containers at: https://onsi.github.io/ginkgo/#ordered-containers +And you can learn more about BeforeAll at: https://onsi.github.io/ginkgo/#setup-in-ordered-containers-beforeall-and-afterall +*/ +func BeforeAll(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeBeforeAll, "", args...)) +} + +/* +AfterAll nodes are Setup nodes that can occur inside Ordered containers. They run just once after all specs in the Ordered container have run. + +Multiple AfterAll nodes can be defined in a given Ordered container however they cannot be nested inside any other container. + +Note that you can also use DeferCleanup() in a BeforeAll node to accomplish similar behavior. + +AfterAll can take a func() body, or an interruptible func(SpecContext)/func(context.Context) body. + +You cannot nest any other Ginkgo nodes within an AfterAll node's closure. +You can learn more about Ordered Containers at: https://onsi.github.io/ginkgo/#ordered-containers +And you can learn more about AfterAll at: https://onsi.github.io/ginkgo/#setup-in-ordered-containers-beforeall-and-afterall +*/ +func AfterAll(args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeAfterAll, "", args...)) +} + +/* +DeferCleanup can be called within any Setup or Subject node to register a cleanup callback that Ginkgo will call at the appropriate time to cleanup after the spec. + +DeferCleanup can be passed: +1. A function that takes no arguments and returns no values. +2. A function that returns multiple values. `DeferCleanup` will ignore all these return values except for the last one. If this last return value is a non-nil error `DeferCleanup` will fail the spec). +3. A function that takes a context.Context or SpecContext (and optionally returns multiple values). The resulting cleanup node is deemed interruptible and the passed-in context will be cancelled in the event of a timeout or interrupt. +4. A function that takes arguments (and optionally returns multiple values) followed by a list of arguments to pass to the function. +5. A function that takes SpecContext and a list of arguments (and optionally returns multiple values) followed by a list of arguments to pass to the function. + +For example: + + BeforeEach(func() { + DeferCleanup(os.SetEnv, "FOO", os.GetEnv("FOO")) + os.SetEnv("FOO", "BAR") + }) + +will register a cleanup handler that will set the environment variable "FOO" to its current value (obtained by os.GetEnv("FOO")) after the spec runs and then sets the environment variable "FOO" to "BAR" for the current spec. + +Similarly: + + BeforeEach(func() { + DeferCleanup(func(ctx SpecContext, path) { + req, err := http.NewRequestWithContext(ctx, "POST", path, nil) + Expect(err).NotTo(HaveOccured()) + _, err := http.DefaultClient.Do(req) + Expect(err).NotTo(HaveOccured()) + }, "example.com/cleanup", NodeTimeout(time.Second*3)) + }) + +will register a cleanup handler that will have three seconds to successfully complete a request to the specified path. Note that we do not specify a context in the list of arguments passed to DeferCleanup - only in the signature of the function we pass in. Ginkgo will detect the requested context and supply a SpecContext when it invokes the cleanup node. If you want to pass in your own context in addition to the Ginkgo-provided SpecContext you must specify the SpecContext as the first argument (e.g. func(ctx SpecContext, otherCtx context.Context)). + +When DeferCleanup is called in BeforeEach, JustBeforeEach, It, AfterEach, or JustAfterEach the registered callback will be invoked when the spec completes (i.e. it will behave like an AfterEach node) +When DeferCleanup is called in BeforeAll or AfterAll the registered callback will be invoked when the ordered container completes (i.e. it will behave like an AfterAll node) +When DeferCleanup is called in BeforeSuite, SynchronizedBeforeSuite, AfterSuite, or SynchronizedAfterSuite the registered callback will be invoked when the suite completes (i.e. it will behave like an AfterSuite node) + +Note that DeferCleanup does not represent a node but rather dynamically generates the appropriate type of cleanup node based on the context in which it is called. As such you must call DeferCleanup within a Setup or Subject node, and not within a Container node. +You can learn more about DeferCleanup here: https://onsi.github.io/ginkgo/#cleaning-up-our-cleanup-code-defercleanup +*/ +func DeferCleanup(args ...interface{}) { + fail := func(message string, cl types.CodeLocation) { + global.Failer.Fail(message, cl) + } + pushNode(internal.NewCleanupNode(deprecationTracker, fail, args...)) +} + +/* +AttachProgressReporter allows you to register a function that will be called whenever Ginkgo generates a Progress Report. The contents returned by the function will be included in the report. + +**This is an experimental feature and the public-facing interface may change in a future minor version of Ginkgo** + +Progress Reports are generated: +- whenever the user explicitly requests one (via `SIGINFO` or `SIGUSR1`) +- on nodes decorated with PollProgressAfter +- on suites run with --poll-progress-after +- whenever a test times out + +Ginkgo uses Progress Reports to convey the current state of the test suite, including any running goroutines. By attaching a progress reporter you are able to supplement these reports with additional information. + +# AttachProgressReporter returns a function that can be called to detach the progress reporter + +You can learn more about AttachProgressReporter here: https://onsi.github.io/ginkgo/#attaching-additional-information-to-progress-reports +*/ +func AttachProgressReporter(reporter func() string) func() { + return global.Suite.AttachProgressReporter(reporter) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/decorator_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/decorator_dsl.go new file mode 100644 index 000000000000..c65af4ce1cf9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/decorator_dsl.go @@ -0,0 +1,143 @@ +package ginkgo + +import ( + "github.com/onsi/ginkgo/v2/internal" +) + +/* +Offset(uint) is a decorator that allows you to change the stack-frame offset used when computing the line number of the node in question. + +You can learn more here: https://onsi.github.io/ginkgo/#the-offset-decorator +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +type Offset = internal.Offset + +/* +FlakeAttempts(uint N) is a decorator that allows you to mark individual specs or spec containers as flaky. Ginkgo will run them up to `N` times until they pass. + +You can learn more here: https://onsi.github.io/ginkgo/#the-flakeattempts-decorator +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +type FlakeAttempts = internal.FlakeAttempts + +/* +MustPassRepeatedly(uint N) is a decorator that allows you to repeat the execution of individual specs or spec containers. Ginkgo will run them up to `N` times until they fail. + +You can learn more here: https://onsi.github.io/ginkgo/#the-mustpassrepeatedly-decorator +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +type MustPassRepeatedly = internal.MustPassRepeatedly + +/* +Focus is a decorator that allows you to mark a spec or container as focused. Identical to FIt and FDescribe. + +You can learn more here: https://onsi.github.io/ginkgo/#filtering-specs +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const Focus = internal.Focus + +/* +Pending is a decorator that allows you to mark a spec or container as pending. Identical to PIt and PDescribe. + +You can learn more here: https://onsi.github.io/ginkgo/#filtering-specs +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const Pending = internal.Pending + +/* +Serial is a decorator that allows you to mark a spec or container as serial. These specs will never run in parallel with other specs. +Specs in ordered containers cannot be marked as serial - mark the ordered container instead. + +You can learn more here: https://onsi.github.io/ginkgo/#serial-specs +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const Serial = internal.Serial + +/* +Ordered is a decorator that allows you to mark a container as ordered. Specs in the container will always run in the order they appear. +They will never be randomized and they will never run in parallel with one another, though they may run in parallel with other specs. + +You can learn more here: https://onsi.github.io/ginkgo/#ordered-containers +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const Ordered = internal.Ordered + +/* +ContinueOnFailure is a decorator that allows you to mark an Ordered container to continue running specs even if failures occur. Ordinarily an ordered container will stop running specs after the first failure occurs. Note that if a BeforeAll or a BeforeEach/JustBeforeEach annotated with OncePerOrdered fails then no specs will run as the precondition for the Ordered container will consider to be failed. + +ContinueOnFailure only applies to the outermost Ordered container. Attempting to place ContinueOnFailure in a nested container will result in an error. + +You can learn more here: https://onsi.github.io/ginkgo/#ordered-containers +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const ContinueOnFailure = internal.ContinueOnFailure + +/* +OncePerOrdered is a decorator that allows you to mark outer BeforeEach, AfterEach, JustBeforeEach, and JustAfterEach setup nodes to run once +per ordered context. Normally these setup nodes run around each individual spec, with OncePerOrdered they will run once around the set of specs in an ordered container. +The behavior for non-Ordered containers/specs is unchanged. + +You can learn more here: https://onsi.github.io/ginkgo/#setup-around-ordered-containers-the-onceperordered-decorator +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +const OncePerOrdered = internal.OncePerOrdered + +/* +Label decorates specs with Labels. Multiple labels can be passed to Label and these can be arbitrary strings but must not include the following characters: "&|!,()/". +Labels can be applied to container and subject nodes, but not setup nodes. You can provide multiple Labels to a given node and a spec's labels is the union of all labels in its node hierarchy. + +You can learn more here: https://onsi.github.io/ginkgo/#spec-labels +You can learn more about decorators here: https://onsi.github.io/ginkgo/#decorator-reference +*/ +func Label(labels ...string) Labels { + return Labels(labels) +} + +/* +Labels are the type for spec Label decorators. Use Label(...) to construct Labels. +You can learn more here: https://onsi.github.io/ginkgo/#spec-labels +*/ +type Labels = internal.Labels + +/* +PollProgressAfter allows you to override the configured value for --poll-progress-after for a particular node. + +Ginkgo will start emitting node progress if the node is still running after a duration of PollProgressAfter. This allows you to get quicker feedback about the state of a long-running spec. +*/ +type PollProgressAfter = internal.PollProgressAfter + +/* +PollProgressInterval allows you to override the configured value for --poll-progress-interval for a particular node. + +Once a node has been running for longer than PollProgressAfter Ginkgo will emit node progress periodically at an interval of PollProgresInterval. +*/ +type PollProgressInterval = internal.PollProgressInterval + +/* +NodeTimeout allows you to specify a timeout for an indivdiual node. The node cannot be a container and must be interruptible (i.e. it must be passed a function that accepts a SpecContext or context.Context). + +If the node does not exit within the specified NodeTimeout its context will be cancelled. The node wil then have a period of time controlled by the GracePeriod decorator (or global --grace-period command-line argument) to exit. If the node does not exit within GracePeriod Ginkgo will leak the node and proceed to any clean-up nodes associated with the current spec. +*/ +type NodeTimeout = internal.NodeTimeout + +/* +SpecTimeout allows you to specify a timeout for an indivdiual spec. SpecTimeout can only decorate interruptible It nodes. + +All nodes associated with the It node will need to complete before the SpecTimeout has elapsed. Individual nodes (e.g. BeforeEach) may be decorated with different NodeTimeouts - but these can only serve to provide a more stringent deadline for the node in question; they cannot extend the deadline past the SpecTimeout. + +If the spec does not complete within the specified SpecTimeout the currently running node will have its context cancelled. The node wil then have a period of time controlled by that node's GracePeriod decorator (or global --grace-period command-line argument) to exit. If the node does not exit within GracePeriod Ginkgo will leak the node and proceed to any clean-up nodes associated with the current spec. +*/ +type SpecTimeout = internal.SpecTimeout + +/* +GracePeriod denotes the period of time Ginkgo will wait for an interruptible node to exit once an interruption (whether due to a timeout or a user-invoked signal) has occurred. If both the global --grace-period cli flag and a GracePeriod decorator are specified the value in the decorator will take precedence. + +Nodes that do not finish within a GracePeriod will be leaked and Ginkgo will proceed to run subsequent nodes. In the event of a timeout, such leaks will be reported to the user. +*/ +type GracePeriod = internal.GracePeriod + +/* +SuppressProgressReporting is a decorator that allows you to disable progress reporting of a particular node. This is useful if `ginkgo -v -progress` is generating too much noise; particularly +if you have a `ReportAfterEach` node that is running for every skipped spec and is generating lots of progress reports. +*/ +const SuppressProgressReporting = internal.SuppressProgressReporting diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.go new file mode 100644 index 000000000000..f912bbec65ab --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.go @@ -0,0 +1,135 @@ +package ginkgo + +import ( + "time" + + "github.com/onsi/ginkgo/v2/internal" + "github.com/onsi/ginkgo/v2/internal/global" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +/* +Deprecated: Done Channel for asynchronous testing + +The Done channel pattern is no longer supported in Ginkgo 2.0. +See here for better patterns for asynchronous testing: https://onsi.github.io/ginkgo/#patterns-for-asynchronous-testing + +For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-async-testing +*/ +type Done = internal.Done + +/* +Deprecated: Custom Ginkgo test reporters are deprecated in Ginkgo 2.0. + +Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure +For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters +*/ +type Reporter = reporters.DeprecatedReporter + +/* +Deprecated: Custom Reporters have been removed in Ginkgo 2.0. RunSpecsWithDefaultAndCustomReporters will simply call RunSpecs() + +Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure +For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters +*/ +func RunSpecsWithDefaultAndCustomReporters(t GinkgoTestingT, description string, _ []Reporter) bool { + deprecationTracker.TrackDeprecation(types.Deprecations.CustomReporter()) + return RunSpecs(t, description) +} + +/* +Deprecated: Custom Reporters have been removed in Ginkgo 2.0. RunSpecsWithCustomReporters will simply call RunSpecs() + +Use Ginkgo's reporting nodes instead and 2.0 reporting infrastructure instead. You can learn more here: https://onsi.github.io/ginkgo/#reporting-infrastructure +For a migration guide see: https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters +*/ +func RunSpecsWithCustomReporters(t GinkgoTestingT, description string, _ []Reporter) bool { + deprecationTracker.TrackDeprecation(types.Deprecations.CustomReporter()) + return RunSpecs(t, description) +} + +/* +Deprecated: GinkgoTestDescription has been replaced with SpecReport. + +Use CurrentSpecReport() instead. +You can learn more here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec +The SpecReport type is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport +*/ +type DeprecatedGinkgoTestDescription struct { + FullTestText string + ComponentTexts []string + TestText string + + FileName string + LineNumber int + + Failed bool + Duration time.Duration +} +type GinkgoTestDescription = DeprecatedGinkgoTestDescription + +/* +Deprecated: CurrentGinkgoTestDescription has been replaced with CurrentSpecReport. + +Use CurrentSpecReport() instead. +You can learn more here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec +The SpecReport type is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport +*/ +func CurrentGinkgoTestDescription() DeprecatedGinkgoTestDescription { + deprecationTracker.TrackDeprecation( + types.Deprecations.CurrentGinkgoTestDescription(), + types.NewCodeLocation(1), + ) + report := global.Suite.CurrentSpecReport() + if report.State == types.SpecStateInvalid { + return GinkgoTestDescription{} + } + componentTexts := []string{} + componentTexts = append(componentTexts, report.ContainerHierarchyTexts...) + componentTexts = append(componentTexts, report.LeafNodeText) + + return DeprecatedGinkgoTestDescription{ + ComponentTexts: componentTexts, + FullTestText: report.FullText(), + TestText: report.LeafNodeText, + FileName: report.LeafNodeLocation.FileName, + LineNumber: report.LeafNodeLocation.LineNumber, + Failed: report.State.Is(types.SpecStateFailureStates), + Duration: report.RunTime, + } +} + +/* +Deprecated: GinkgoParallelNode() has been renamed to GinkgoParallelProcess() +*/ +func GinkgoParallelNode() int { + deprecationTracker.TrackDeprecation( + types.Deprecations.ParallelNode(), + types.NewCodeLocation(1), + ) + return GinkgoParallelProcess() +} + +/* +Deprecated: Benchmarker has been removed from Ginkgo 2.0 + +Use Gomega's gmeasure package instead. +You can learn more here: https://onsi.github.io/ginkgo/#benchmarking-code +*/ +type Benchmarker interface { + Time(name string, body func(), info ...interface{}) (elapsedTime time.Duration) + RecordValue(name string, value float64, info ...interface{}) + RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{}) +} + +/* +Deprecated: Measure() has been removed from Ginkgo 2.0 + +Use Gomega's gmeasure package instead. +You can learn more here: https://onsi.github.io/ginkgo/#benchmarking-code +*/ +func Measure(_ ...interface{}) bool { + deprecationTracker.TrackDeprecation(types.Deprecations.Measure(), types.NewCodeLocation(1)) + return true +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.go new file mode 100644 index 000000000000..778bfd7c7cad --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.go @@ -0,0 +1,41 @@ +// +build !windows + +/* +These packages are used for colorize on Windows and contributed by mattn.jp@gmail.com + + * go-colorable: + * go-isatty: + +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +package formatter + +import ( + "io" + "os" +) + +func newColorable(file *os.File) io.Writer { + return file +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.go new file mode 100644 index 000000000000..dd1d143cc207 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.go @@ -0,0 +1,809 @@ +/* +These packages are used for colorize on Windows and contributed by mattn.jp@gmail.com + + * go-colorable: + * go-isatty: + +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +package formatter + +import ( + "bytes" + "fmt" + "io" + "math" + "os" + "strconv" + "strings" + "syscall" + "unsafe" +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") + procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") + procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") + procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") + procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") + procGetConsoleMode = kernel32.NewProc("GetConsoleMode") +) + +func isTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} + +const ( + foregroundBlue = 0x1 + foregroundGreen = 0x2 + foregroundRed = 0x4 + foregroundIntensity = 0x8 + foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity) + backgroundBlue = 0x10 + backgroundGreen = 0x20 + backgroundRed = 0x40 + backgroundIntensity = 0x80 + backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) +) + +type wchar uint16 +type short int16 +type dword uint32 +type word uint16 + +type coord struct { + x short + y short +} + +type smallRect struct { + left short + top short + right short + bottom short +} + +type consoleScreenBufferInfo struct { + size coord + cursorPosition coord + attributes word + window smallRect + maximumWindowSize coord +} + +type writer struct { + out io.Writer + handle syscall.Handle + lastbuf bytes.Buffer + oldattr word +} + +func newColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + if isTerminal(file.Fd()) { + var csbi consoleScreenBufferInfo + handle := syscall.Handle(file.Fd()) + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + return &writer{out: file, handle: handle, oldattr: csbi.attributes} + } else { + return file + } +} + +var color256 = map[int]int{ + 0: 0x000000, + 1: 0x800000, + 2: 0x008000, + 3: 0x808000, + 4: 0x000080, + 5: 0x800080, + 6: 0x008080, + 7: 0xc0c0c0, + 8: 0x808080, + 9: 0xff0000, + 10: 0x00ff00, + 11: 0xffff00, + 12: 0x0000ff, + 13: 0xff00ff, + 14: 0x00ffff, + 15: 0xffffff, + 16: 0x000000, + 17: 0x00005f, + 18: 0x000087, + 19: 0x0000af, + 20: 0x0000d7, + 21: 0x0000ff, + 22: 0x005f00, + 23: 0x005f5f, + 24: 0x005f87, + 25: 0x005faf, + 26: 0x005fd7, + 27: 0x005fff, + 28: 0x008700, + 29: 0x00875f, + 30: 0x008787, + 31: 0x0087af, + 32: 0x0087d7, + 33: 0x0087ff, + 34: 0x00af00, + 35: 0x00af5f, + 36: 0x00af87, + 37: 0x00afaf, + 38: 0x00afd7, + 39: 0x00afff, + 40: 0x00d700, + 41: 0x00d75f, + 42: 0x00d787, + 43: 0x00d7af, + 44: 0x00d7d7, + 45: 0x00d7ff, + 46: 0x00ff00, + 47: 0x00ff5f, + 48: 0x00ff87, + 49: 0x00ffaf, + 50: 0x00ffd7, + 51: 0x00ffff, + 52: 0x5f0000, + 53: 0x5f005f, + 54: 0x5f0087, + 55: 0x5f00af, + 56: 0x5f00d7, + 57: 0x5f00ff, + 58: 0x5f5f00, + 59: 0x5f5f5f, + 60: 0x5f5f87, + 61: 0x5f5faf, + 62: 0x5f5fd7, + 63: 0x5f5fff, + 64: 0x5f8700, + 65: 0x5f875f, + 66: 0x5f8787, + 67: 0x5f87af, + 68: 0x5f87d7, + 69: 0x5f87ff, + 70: 0x5faf00, + 71: 0x5faf5f, + 72: 0x5faf87, + 73: 0x5fafaf, + 74: 0x5fafd7, + 75: 0x5fafff, + 76: 0x5fd700, + 77: 0x5fd75f, + 78: 0x5fd787, + 79: 0x5fd7af, + 80: 0x5fd7d7, + 81: 0x5fd7ff, + 82: 0x5fff00, + 83: 0x5fff5f, + 84: 0x5fff87, + 85: 0x5fffaf, + 86: 0x5fffd7, + 87: 0x5fffff, + 88: 0x870000, + 89: 0x87005f, + 90: 0x870087, + 91: 0x8700af, + 92: 0x8700d7, + 93: 0x8700ff, + 94: 0x875f00, + 95: 0x875f5f, + 96: 0x875f87, + 97: 0x875faf, + 98: 0x875fd7, + 99: 0x875fff, + 100: 0x878700, + 101: 0x87875f, + 102: 0x878787, + 103: 0x8787af, + 104: 0x8787d7, + 105: 0x8787ff, + 106: 0x87af00, + 107: 0x87af5f, + 108: 0x87af87, + 109: 0x87afaf, + 110: 0x87afd7, + 111: 0x87afff, + 112: 0x87d700, + 113: 0x87d75f, + 114: 0x87d787, + 115: 0x87d7af, + 116: 0x87d7d7, + 117: 0x87d7ff, + 118: 0x87ff00, + 119: 0x87ff5f, + 120: 0x87ff87, + 121: 0x87ffaf, + 122: 0x87ffd7, + 123: 0x87ffff, + 124: 0xaf0000, + 125: 0xaf005f, + 126: 0xaf0087, + 127: 0xaf00af, + 128: 0xaf00d7, + 129: 0xaf00ff, + 130: 0xaf5f00, + 131: 0xaf5f5f, + 132: 0xaf5f87, + 133: 0xaf5faf, + 134: 0xaf5fd7, + 135: 0xaf5fff, + 136: 0xaf8700, + 137: 0xaf875f, + 138: 0xaf8787, + 139: 0xaf87af, + 140: 0xaf87d7, + 141: 0xaf87ff, + 142: 0xafaf00, + 143: 0xafaf5f, + 144: 0xafaf87, + 145: 0xafafaf, + 146: 0xafafd7, + 147: 0xafafff, + 148: 0xafd700, + 149: 0xafd75f, + 150: 0xafd787, + 151: 0xafd7af, + 152: 0xafd7d7, + 153: 0xafd7ff, + 154: 0xafff00, + 155: 0xafff5f, + 156: 0xafff87, + 157: 0xafffaf, + 158: 0xafffd7, + 159: 0xafffff, + 160: 0xd70000, + 161: 0xd7005f, + 162: 0xd70087, + 163: 0xd700af, + 164: 0xd700d7, + 165: 0xd700ff, + 166: 0xd75f00, + 167: 0xd75f5f, + 168: 0xd75f87, + 169: 0xd75faf, + 170: 0xd75fd7, + 171: 0xd75fff, + 172: 0xd78700, + 173: 0xd7875f, + 174: 0xd78787, + 175: 0xd787af, + 176: 0xd787d7, + 177: 0xd787ff, + 178: 0xd7af00, + 179: 0xd7af5f, + 180: 0xd7af87, + 181: 0xd7afaf, + 182: 0xd7afd7, + 183: 0xd7afff, + 184: 0xd7d700, + 185: 0xd7d75f, + 186: 0xd7d787, + 187: 0xd7d7af, + 188: 0xd7d7d7, + 189: 0xd7d7ff, + 190: 0xd7ff00, + 191: 0xd7ff5f, + 192: 0xd7ff87, + 193: 0xd7ffaf, + 194: 0xd7ffd7, + 195: 0xd7ffff, + 196: 0xff0000, + 197: 0xff005f, + 198: 0xff0087, + 199: 0xff00af, + 200: 0xff00d7, + 201: 0xff00ff, + 202: 0xff5f00, + 203: 0xff5f5f, + 204: 0xff5f87, + 205: 0xff5faf, + 206: 0xff5fd7, + 207: 0xff5fff, + 208: 0xff8700, + 209: 0xff875f, + 210: 0xff8787, + 211: 0xff87af, + 212: 0xff87d7, + 213: 0xff87ff, + 214: 0xffaf00, + 215: 0xffaf5f, + 216: 0xffaf87, + 217: 0xffafaf, + 218: 0xffafd7, + 219: 0xffafff, + 220: 0xffd700, + 221: 0xffd75f, + 222: 0xffd787, + 223: 0xffd7af, + 224: 0xffd7d7, + 225: 0xffd7ff, + 226: 0xffff00, + 227: 0xffff5f, + 228: 0xffff87, + 229: 0xffffaf, + 230: 0xffffd7, + 231: 0xffffff, + 232: 0x080808, + 233: 0x121212, + 234: 0x1c1c1c, + 235: 0x262626, + 236: 0x303030, + 237: 0x3a3a3a, + 238: 0x444444, + 239: 0x4e4e4e, + 240: 0x585858, + 241: 0x626262, + 242: 0x6c6c6c, + 243: 0x767676, + 244: 0x808080, + 245: 0x8a8a8a, + 246: 0x949494, + 247: 0x9e9e9e, + 248: 0xa8a8a8, + 249: 0xb2b2b2, + 250: 0xbcbcbc, + 251: 0xc6c6c6, + 252: 0xd0d0d0, + 253: 0xdadada, + 254: 0xe4e4e4, + 255: 0xeeeeee, +} + +func (w *writer) Write(data []byte) (n int, err error) { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + + er := bytes.NewBuffer(data) +loop: + for { + r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + if r1 == 0 { + break loop + } + + c1, _, err := er.ReadRune() + if err != nil { + break loop + } + if c1 != 0x1b { + fmt.Fprint(w.out, string(c1)) + continue + } + c2, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + break loop + } + if c2 != 0x5b { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + continue + } + + var buf bytes.Buffer + var m rune + for { + c, _, err := er.ReadRune() + if err != nil { + w.lastbuf.WriteRune(c1) + w.lastbuf.WriteRune(c2) + w.lastbuf.Write(buf.Bytes()) + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + m = c + break + } + buf.Write([]byte(string(c))) + } + + var csbi consoleScreenBufferInfo + switch m { + case 'A': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'B': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'C': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'D': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + if n, err = strconv.Atoi(buf.String()); err == nil { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + } + case 'E': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'F': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'G': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = short(n) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'H': + token := strings.Split(buf.String(), ";") + if len(token) != 2 { + continue + } + n1, err := strconv.Atoi(token[0]) + if err != nil { + continue + } + n2, err := strconv.Atoi(token[1]) + if err != nil { + continue + } + csbi.cursorPosition.x = short(n2) + csbi.cursorPosition.x = short(n1) + procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'J': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'K': + n, err := strconv.Atoi(buf.String()) + if err != nil { + continue + } + var cursor coord + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y} + } + var count, written dword + count = dword(csbi.size.x - csbi.cursorPosition.x) + procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'm': + attr := csbi.attributes + cs := buf.String() + if cs == "" { + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr)) + continue + } + token := strings.Split(cs, ";") + for i := 0; i < len(token); i += 1 { + ns := token[i] + if n, err = strconv.Atoi(ns); err == nil { + switch { + case n == 0 || n == 100: + attr = w.oldattr + case 1 <= n && n <= 5: + attr |= foregroundIntensity + case n == 7: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 22 == n || n == 25 || n == 25: + attr |= foregroundIntensity + case n == 27: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 30 <= n && n <= 37: + attr = (attr & backgroundMask) + if (n-30)&1 != 0 { + attr |= foregroundRed + } + if (n-30)&2 != 0 { + attr |= foregroundGreen + } + if (n-30)&4 != 0 { + attr |= foregroundBlue + } + case n == 38: // set foreground color. + if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256foreAttr == nil { + n256setup() + } + attr &= backgroundMask + attr |= n256foreAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & backgroundMask) + } + case n == 39: // reset foreground color. + attr &= backgroundMask + attr |= w.oldattr & foregroundMask + case 40 <= n && n <= 47: + attr = (attr & foregroundMask) + if (n-40)&1 != 0 { + attr |= backgroundRed + } + if (n-40)&2 != 0 { + attr |= backgroundGreen + } + if (n-40)&4 != 0 { + attr |= backgroundBlue + } + case n == 48: // set background color. + if i < len(token)-2 && token[i+1] == "5" { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256backAttr == nil { + n256setup() + } + attr &= foregroundMask + attr |= n256backAttr[n256] + i += 2 + } + } else { + attr = attr & (w.oldattr & foregroundMask) + } + case n == 49: // reset foreground color. + attr &= foregroundMask + attr |= w.oldattr & backgroundMask + case 90 <= n && n <= 97: + attr = (attr & backgroundMask) + attr |= foregroundIntensity + if (n-90)&1 != 0 { + attr |= foregroundRed + } + if (n-90)&2 != 0 { + attr |= foregroundGreen + } + if (n-90)&4 != 0 { + attr |= foregroundBlue + } + case 100 <= n && n <= 107: + attr = (attr & foregroundMask) + attr |= backgroundIntensity + if (n-100)&1 != 0 { + attr |= backgroundRed + } + if (n-100)&2 != 0 { + attr |= backgroundGreen + } + if (n-100)&4 != 0 { + attr |= backgroundBlue + } + } + procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr)) + } + } + } + } + return len(data) - w.lastbuf.Len(), nil +} + +type consoleColor struct { + rgb int + red bool + green bool + blue bool + intensity bool +} + +func (c consoleColor) foregroundAttr() (attr word) { + if c.red { + attr |= foregroundRed + } + if c.green { + attr |= foregroundGreen + } + if c.blue { + attr |= foregroundBlue + } + if c.intensity { + attr |= foregroundIntensity + } + return +} + +func (c consoleColor) backgroundAttr() (attr word) { + if c.red { + attr |= backgroundRed + } + if c.green { + attr |= backgroundGreen + } + if c.blue { + attr |= backgroundBlue + } + if c.intensity { + attr |= backgroundIntensity + } + return +} + +var color16 = []consoleColor{ + consoleColor{0x000000, false, false, false, false}, + consoleColor{0x000080, false, false, true, false}, + consoleColor{0x008000, false, true, false, false}, + consoleColor{0x008080, false, true, true, false}, + consoleColor{0x800000, true, false, false, false}, + consoleColor{0x800080, true, false, true, false}, + consoleColor{0x808000, true, true, false, false}, + consoleColor{0xc0c0c0, true, true, true, false}, + consoleColor{0x808080, false, false, false, true}, + consoleColor{0x0000ff, false, false, true, true}, + consoleColor{0x00ff00, false, true, false, true}, + consoleColor{0x00ffff, false, true, true, true}, + consoleColor{0xff0000, true, false, false, true}, + consoleColor{0xff00ff, true, false, true, true}, + consoleColor{0xffff00, true, true, false, true}, + consoleColor{0xffffff, true, true, true, true}, +} + +type hsv struct { + h, s, v float32 +} + +func (a hsv) dist(b hsv) float32 { + dh := a.h - b.h + switch { + case dh > 0.5: + dh = 1 - dh + case dh < -0.5: + dh = -1 - dh + } + ds := a.s - b.s + dv := a.v - b.v + return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv))) +} + +func toHSV(rgb int) hsv { + r, g, b := float32((rgb&0xFF0000)>>16)/256.0, + float32((rgb&0x00FF00)>>8)/256.0, + float32(rgb&0x0000FF)/256.0 + min, max := minmax3f(r, g, b) + h := max - min + if h > 0 { + if max == r { + h = (g - b) / h + if h < 0 { + h += 6 + } + } else if max == g { + h = 2 + (b-r)/h + } else { + h = 4 + (r-g)/h + } + } + h /= 6.0 + s := max - min + if max != 0 { + s /= max + } + v := max + return hsv{h: h, s: s, v: v} +} + +type hsvTable []hsv + +func toHSVTable(rgbTable []consoleColor) hsvTable { + t := make(hsvTable, len(rgbTable)) + for i, c := range rgbTable { + t[i] = toHSV(c.rgb) + } + return t +} + +func (t hsvTable) find(rgb int) consoleColor { + hsv := toHSV(rgb) + n := 7 + l := float32(5.0) + for i, p := range t { + d := hsv.dist(p) + if d < l { + l, n = d, i + } + } + return color16[n] +} + +func minmax3f(a, b, c float32) (min, max float32) { + if a < b { + if b < c { + return a, c + } else if a < c { + return a, b + } else { + return c, b + } + } else { + if a < c { + return b, c + } else if b < c { + return b, a + } else { + return c, a + } + } +} + +var n256foreAttr []word +var n256backAttr []word + +func n256setup() { + n256foreAttr = make([]word, 256) + n256backAttr = make([]word, 256) + t := toHSVTable(color16) + for i, rgb := range color256 { + c := t.find(rgb) + n256foreAttr[i] = c.foregroundAttr() + n256backAttr[i] = c.backgroundAttr() + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go new file mode 100644 index 000000000000..743555ddea5f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/formatter/formatter.go @@ -0,0 +1,230 @@ +package formatter + +import ( + "fmt" + "os" + "regexp" + "strconv" + "strings" +) + +// ColorableStdOut and ColorableStdErr enable color output support on Windows +var ColorableStdOut = newColorable(os.Stdout) +var ColorableStdErr = newColorable(os.Stderr) + +const COLS = 80 + +type ColorMode uint8 + +const ( + ColorModeNone ColorMode = iota + ColorModeTerminal + ColorModePassthrough +) + +var SingletonFormatter = New(ColorModeTerminal) + +func F(format string, args ...interface{}) string { + return SingletonFormatter.F(format, args...) +} + +func Fi(indentation uint, format string, args ...interface{}) string { + return SingletonFormatter.Fi(indentation, format, args...) +} + +func Fiw(indentation uint, maxWidth uint, format string, args ...interface{}) string { + return SingletonFormatter.Fiw(indentation, maxWidth, format, args...) +} + +type Formatter struct { + ColorMode ColorMode + colors map[string]string + styleRe *regexp.Regexp + preserveColorStylingTags bool +} + +func NewWithNoColorBool(noColor bool) Formatter { + if noColor { + return New(ColorModeNone) + } + return New(ColorModeTerminal) +} + +func New(colorMode ColorMode) Formatter { + colorAliases := map[string]int{ + "black": 0, + "red": 1, + "green": 2, + "yellow": 3, + "blue": 4, + "magenta": 5, + "cyan": 6, + "white": 7, + } + for colorAlias, n := range colorAliases { + colorAliases[fmt.Sprintf("bright-%s", colorAlias)] = n + 8 + } + + getColor := func(color, defaultEscapeCode string) string { + color = strings.ToUpper(strings.ReplaceAll(color, "-", "_")) + envVar := fmt.Sprintf("GINKGO_CLI_COLOR_%s", color) + envVarColor := os.Getenv(envVar) + if envVarColor == "" { + return defaultEscapeCode + } + if colorCode, ok := colorAliases[envVarColor]; ok { + return fmt.Sprintf("\x1b[38;5;%dm", colorCode) + } + colorCode, err := strconv.Atoi(envVarColor) + if err != nil || colorCode < 0 || colorCode > 255 { + return defaultEscapeCode + } + return fmt.Sprintf("\x1b[38;5;%dm", colorCode) + } + + f := Formatter{ + ColorMode: colorMode, + colors: map[string]string{ + "/": "\x1b[0m", + "bold": "\x1b[1m", + "underline": "\x1b[4m", + + "red": getColor("red", "\x1b[38;5;9m"), + "orange": getColor("orange", "\x1b[38;5;214m"), + "coral": getColor("coral", "\x1b[38;5;204m"), + "magenta": getColor("magenta", "\x1b[38;5;13m"), + "green": getColor("green", "\x1b[38;5;10m"), + "dark-green": getColor("dark-green", "\x1b[38;5;28m"), + "yellow": getColor("yellow", "\x1b[38;5;11m"), + "light-yellow": getColor("light-yellow", "\x1b[38;5;228m"), + "cyan": getColor("cyan", "\x1b[38;5;14m"), + "gray": getColor("gray", "\x1b[38;5;243m"), + "light-gray": getColor("light-gray", "\x1b[38;5;246m"), + "blue": getColor("blue", "\x1b[38;5;12m"), + }, + } + colors := []string{} + for color := range f.colors { + colors = append(colors, color) + } + f.styleRe = regexp.MustCompile("{{(" + strings.Join(colors, "|") + ")}}") + return f +} + +func (f Formatter) F(format string, args ...interface{}) string { + return f.Fi(0, format, args...) +} + +func (f Formatter) Fi(indentation uint, format string, args ...interface{}) string { + return f.Fiw(indentation, 0, format, args...) +} + +func (f Formatter) Fiw(indentation uint, maxWidth uint, format string, args ...interface{}) string { + out := f.style(format) + if len(args) > 0 { + out = fmt.Sprintf(out, args...) + } + + if indentation == 0 && maxWidth == 0 { + return out + } + + lines := strings.Split(out, "\n") + + if maxWidth != 0 { + outLines := []string{} + + maxWidth = maxWidth - indentation*2 + for _, line := range lines { + if f.length(line) <= maxWidth { + outLines = append(outLines, line) + continue + } + words := strings.Split(line, " ") + outWords := []string{words[0]} + length := uint(f.length(words[0])) + for _, word := range words[1:] { + wordLength := f.length(word) + if length+wordLength+1 <= maxWidth { + length += wordLength + 1 + outWords = append(outWords, word) + continue + } + outLines = append(outLines, strings.Join(outWords, " ")) + outWords = []string{word} + length = wordLength + } + if len(outWords) > 0 { + outLines = append(outLines, strings.Join(outWords, " ")) + } + } + + lines = outLines + } + + if indentation == 0 { + return strings.Join(lines, "\n") + } + + padding := strings.Repeat(" ", int(indentation)) + for i := range lines { + if lines[i] != "" { + lines[i] = padding + lines[i] + } + } + + return strings.Join(lines, "\n") +} + +func (f Formatter) length(styled string) uint { + n := uint(0) + inStyle := false + for _, b := range styled { + if inStyle { + if b == 'm' { + inStyle = false + } + continue + } + if b == '\x1b' { + inStyle = true + continue + } + n += 1 + } + return n +} + +func (f Formatter) CycleJoin(elements []string, joiner string, cycle []string) string { + if len(elements) == 0 { + return "" + } + n := len(cycle) + out := "" + for i, text := range elements { + out += cycle[i%n] + text + if i < len(elements)-1 { + out += joiner + } + } + out += "{{/}}" + return f.style(out) +} + +func (f Formatter) style(s string) string { + switch f.ColorMode { + case ColorModeNone: + return f.styleRe.ReplaceAllString(s, "") + case ColorModePassthrough: + return s + case ColorModeTerminal: + return f.styleRe.ReplaceAllStringFunc(s, func(match string) string { + if out, ok := f.colors[strings.Trim(match, "{}")]; ok { + return out + } + return match + }) + } + + return "" +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go new file mode 100644 index 000000000000..5db5d1a7bfd8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.go @@ -0,0 +1,63 @@ +package build + +import ( + "fmt" + + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/types" +) + +func BuildBuildCommand() command.Command { + var cliConfig = types.NewDefaultCLIConfig() + var goFlagsConfig = types.NewDefaultGoFlagsConfig() + + flags, err := types.BuildBuildCommandFlagSet(&cliConfig, &goFlagsConfig) + if err != nil { + panic(err) + } + + return command.Command{ + Name: "build", + Flags: flags, + Usage: "ginkgo build ", + ShortDoc: "Build the passed in (or the package in the current directory if left blank).", + DocLink: "precompiling-suites", + Command: func(args []string, _ []string) { + var errors []error + cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig) + command.AbortIfErrors("Ginkgo detected configuration issues:", errors) + + buildSpecs(args, cliConfig, goFlagsConfig) + }, + } +} + +func buildSpecs(args []string, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig) { + suites := internal.FindSuites(args, cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter) + if len(suites) == 0 { + command.AbortWith("Found no test suites") + } + + internal.VerifyCLIAndFrameworkVersion(suites) + + opc := internal.NewOrderedParallelCompiler(cliConfig.ComputedNumCompilers()) + opc.StartCompiling(suites, goFlagsConfig) + + for { + suiteIdx, suite := opc.Next() + if suiteIdx >= len(suites) { + break + } + suites[suiteIdx] = suite + if suite.State.Is(internal.TestSuiteStateFailedToCompile) { + fmt.Println(suite.CompilationError.Error()) + } else { + fmt.Printf("Compiled %s.test\n", suite.PackageName) + } + } + + if suites.CountWithState(internal.TestSuiteStateFailedToCompile) > 0 { + command.AbortWith("Failed to compile all tests") + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.go new file mode 100644 index 000000000000..2efd28608867 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.go @@ -0,0 +1,61 @@ +package command + +import "fmt" + +type AbortDetails struct { + ExitCode int + Error error + EmitUsage bool +} + +func Abort(details AbortDetails) { + panic(details) +} + +func AbortGracefullyWith(format string, args ...interface{}) { + Abort(AbortDetails{ + ExitCode: 0, + Error: fmt.Errorf(format, args...), + EmitUsage: false, + }) +} + +func AbortWith(format string, args ...interface{}) { + Abort(AbortDetails{ + ExitCode: 1, + Error: fmt.Errorf(format, args...), + EmitUsage: false, + }) +} + +func AbortWithUsage(format string, args ...interface{}) { + Abort(AbortDetails{ + ExitCode: 1, + Error: fmt.Errorf(format, args...), + EmitUsage: true, + }) +} + +func AbortIfError(preamble string, err error) { + if err != nil { + Abort(AbortDetails{ + ExitCode: 1, + Error: fmt.Errorf("%s\n%s", preamble, err.Error()), + EmitUsage: false, + }) + } +} + +func AbortIfErrors(preamble string, errors []error) { + if len(errors) > 0 { + out := "" + for _, err := range errors { + out += err.Error() + } + Abort(AbortDetails{ + ExitCode: 1, + Error: fmt.Errorf("%s\n%s", preamble, out), + EmitUsage: false, + }) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.go new file mode 100644 index 000000000000..12e0e5659140 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.go @@ -0,0 +1,50 @@ +package command + +import ( + "fmt" + "io" + "strings" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/types" +) + +type Command struct { + Name string + Flags types.GinkgoFlagSet + Usage string + ShortDoc string + Documentation string + DocLink string + Command func(args []string, additionalArgs []string) +} + +func (c Command) Run(args []string, additionalArgs []string) { + args, err := c.Flags.Parse(args) + if err != nil { + AbortWithUsage(err.Error()) + } + + c.Command(args, additionalArgs) +} + +func (c Command) EmitUsage(writer io.Writer) { + fmt.Fprintln(writer, formatter.F("{{bold}}"+c.Usage+"{{/}}")) + fmt.Fprintln(writer, formatter.F("{{gray}}%s{{/}}", strings.Repeat("-", len(c.Usage)))) + if c.ShortDoc != "" { + fmt.Fprintln(writer, formatter.Fiw(0, formatter.COLS, c.ShortDoc)) + fmt.Fprintln(writer, "") + } + if c.Documentation != "" { + fmt.Fprintln(writer, formatter.Fiw(0, formatter.COLS, c.Documentation)) + fmt.Fprintln(writer, "") + } + if c.DocLink != "" { + fmt.Fprintln(writer, formatter.Fi(0, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}http://onsi.github.io/ginkgo/#%s{{/}}", c.DocLink)) + fmt.Fprintln(writer, "") + } + flagUsage := c.Flags.Usage() + if flagUsage != "" { + fmt.Fprintf(writer, formatter.F(flagUsage)) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.go new file mode 100644 index 000000000000..88dd8d6b07e1 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.go @@ -0,0 +1,182 @@ +package command + +import ( + "fmt" + "io" + "os" + "strings" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/types" +) + +type Program struct { + Name string + Heading string + Commands []Command + DefaultCommand Command + DeprecatedCommands []DeprecatedCommand + + //For testing - leave as nil in production + OutWriter io.Writer + ErrWriter io.Writer + Exiter func(code int) +} + +type DeprecatedCommand struct { + Name string + Deprecation types.Deprecation +} + +func (p Program) RunAndExit(osArgs []string) { + var command Command + deprecationTracker := types.NewDeprecationTracker() + if p.Exiter == nil { + p.Exiter = os.Exit + } + if p.OutWriter == nil { + p.OutWriter = formatter.ColorableStdOut + } + if p.ErrWriter == nil { + p.ErrWriter = formatter.ColorableStdErr + } + + defer func() { + exitCode := 0 + + if r := recover(); r != nil { + details, ok := r.(AbortDetails) + if !ok { + panic(r) + } + + if details.Error != nil { + fmt.Fprintln(p.ErrWriter, formatter.F("{{red}}{{bold}}%s %s{{/}} {{red}}failed{{/}}", p.Name, command.Name)) + fmt.Fprintln(p.ErrWriter, formatter.Fi(1, details.Error.Error())) + } + if details.EmitUsage { + if details.Error != nil { + fmt.Fprintln(p.ErrWriter, "") + } + command.EmitUsage(p.ErrWriter) + } + exitCode = details.ExitCode + } + + command.Flags.ValidateDeprecations(deprecationTracker) + if deprecationTracker.DidTrackDeprecations() { + fmt.Fprintln(p.ErrWriter, deprecationTracker.DeprecationsReport()) + } + p.Exiter(exitCode) + return + }() + + args, additionalArgs := []string{}, []string{} + + foundDelimiter := false + for _, arg := range osArgs[1:] { + if !foundDelimiter { + if arg == "--" { + foundDelimiter = true + continue + } + } + + if foundDelimiter { + additionalArgs = append(additionalArgs, arg) + } else { + args = append(args, arg) + } + } + + command = p.DefaultCommand + if len(args) > 0 { + p.handleHelpRequestsAndExit(p.OutWriter, args) + if command.Name == args[0] { + args = args[1:] + } else { + for _, deprecatedCommand := range p.DeprecatedCommands { + if deprecatedCommand.Name == args[0] { + deprecationTracker.TrackDeprecation(deprecatedCommand.Deprecation) + return + } + } + for _, tryCommand := range p.Commands { + if tryCommand.Name == args[0] { + command, args = tryCommand, args[1:] + break + } + } + } + } + + command.Run(args, additionalArgs) +} + +func (p Program) handleHelpRequestsAndExit(writer io.Writer, args []string) { + if len(args) == 0 { + return + } + + matchesHelpFlag := func(args ...string) bool { + for _, arg := range args { + if arg == "--help" || arg == "-help" || arg == "-h" || arg == "--h" { + return true + } + } + return false + } + if len(args) == 1 { + if args[0] == "help" || matchesHelpFlag(args[0]) { + p.EmitUsage(writer) + Abort(AbortDetails{}) + } + } else { + var name string + if args[0] == "help" || matchesHelpFlag(args[0]) { + name = args[1] + } else if matchesHelpFlag(args[1:]...) { + name = args[0] + } else { + return + } + + if p.DefaultCommand.Name == name || p.Name == name { + p.DefaultCommand.EmitUsage(writer) + Abort(AbortDetails{}) + } + for _, command := range p.Commands { + if command.Name == name { + command.EmitUsage(writer) + Abort(AbortDetails{}) + } + } + + fmt.Fprintln(writer, formatter.F("{{red}}Unknown Command: {{bold}}%s{{/}}", name)) + fmt.Fprintln(writer, "") + p.EmitUsage(writer) + Abort(AbortDetails{ExitCode: 1}) + } + return +} + +func (p Program) EmitUsage(writer io.Writer) { + fmt.Fprintln(writer, formatter.F(p.Heading)) + fmt.Fprintln(writer, formatter.F("{{gray}}%s{{/}}", strings.Repeat("-", len(p.Heading)))) + fmt.Fprintln(writer, formatter.F("For usage information for a command, run {{bold}}%s help COMMAND{{/}}.", p.Name)) + fmt.Fprintln(writer, formatter.F("For usage information for the default command, run {{bold}}%s help %s{{/}} or {{bold}}%s help %s{{/}}.", p.Name, p.Name, p.Name, p.DefaultCommand.Name)) + fmt.Fprintln(writer, "") + fmt.Fprintln(writer, formatter.F("The following commands are available:")) + + fmt.Fprintln(writer, formatter.Fi(1, "{{bold}}%s{{/}} or %s {{bold}}%s{{/}} - {{gray}}%s{{/}}", p.Name, p.Name, p.DefaultCommand.Name, p.DefaultCommand.Usage)) + if p.DefaultCommand.ShortDoc != "" { + fmt.Fprintln(writer, formatter.Fi(2, p.DefaultCommand.ShortDoc)) + } + + for _, command := range p.Commands { + fmt.Fprintln(writer, formatter.Fi(1, "{{bold}}%s{{/}} - {{gray}}%s{{/}}", command.Name, command.Usage)) + if command.ShortDoc != "" { + fmt.Fprintln(writer, formatter.Fi(2, command.ShortDoc)) + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.go new file mode 100644 index 000000000000..a367a1fc9773 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.go @@ -0,0 +1,48 @@ +package generators + +var bootstrapText = `package {{.Package}} + +import ( + "testing" + + {{.GinkgoImport}} + {{.GomegaImport}} +) + +func Test{{.FormattedName}}(t *testing.T) { + {{.GomegaPackage}}RegisterFailHandler({{.GinkgoPackage}}Fail) + {{.GinkgoPackage}}RunSpecs(t, "{{.FormattedName}} Suite") +} +` + +var agoutiBootstrapText = `package {{.Package}} + +import ( + "testing" + + {{.GinkgoImport}} + {{.GomegaImport}} + "github.com/sclevine/agouti" +) + +func Test{{.FormattedName}}(t *testing.T) { + {{.GomegaPackage}}RegisterFailHandler({{.GinkgoPackage}}Fail) + {{.GinkgoPackage}}RunSpecs(t, "{{.FormattedName}} Suite") +} + +var agoutiDriver *agouti.WebDriver + +var _ = {{.GinkgoPackage}}BeforeSuite(func() { + // Choose a WebDriver: + + agoutiDriver = agouti.PhantomJS() + // agoutiDriver = agouti.Selenium() + // agoutiDriver = agouti.ChromeDriver() + + {{.GomegaPackage}}Expect(agoutiDriver.Start()).To({{.GomegaPackage}}Succeed()) +}) + +var _ = {{.GinkgoPackage}}AfterSuite(func() { + {{.GomegaPackage}}Expect(agoutiDriver.Stop()).To({{.GomegaPackage}}Succeed()) +}) +` diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go new file mode 100644 index 000000000000..73aff0b7a185 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.go @@ -0,0 +1,133 @@ +package generators + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "text/template" + + sprig "github.com/go-task/slim-sprig" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/types" +) + +func BuildBootstrapCommand() command.Command { + conf := GeneratorsConfig{} + flags, err := types.NewGinkgoFlagSet( + types.GinkgoFlags{ + {Name: "agouti", KeyPath: "Agouti", + Usage: "If set, bootstrap will generate a bootstrap file for writing Agouti tests"}, + {Name: "nodot", KeyPath: "NoDot", + Usage: "If set, bootstrap will generate a bootstrap test file that does not dot-import ginkgo and gomega"}, + {Name: "internal", KeyPath: "Internal", + Usage: "If set, bootstrap will generate a bootstrap test file that uses the regular package name (i.e. `package X`, not `package X_test`)"}, + {Name: "template", KeyPath: "CustomTemplate", + UsageArgument: "template-file", + Usage: "If specified, generate will use the contents of the file passed as the bootstrap template"}, + {Name: "template-data", KeyPath: "CustomTemplateData", + UsageArgument: "template-data-file", + Usage: "If specified, generate will use the contents of the file passed as data to be rendered in the bootstrap template"}, + }, + &conf, + types.GinkgoFlagSections{}, + ) + + if err != nil { + panic(err) + } + + return command.Command{ + Name: "bootstrap", + Usage: "ginkgo bootstrap", + ShortDoc: "Bootstrap a test suite for the current package", + Documentation: `Tests written in Ginkgo and Gomega require a small amount of boilerplate to hook into Go's testing infrastructure. + +{{bold}}ginkgo bootstrap{{/}} generates this boilerplate for you in a file named X_suite_test.go where X is the name of the package under test.`, + DocLink: "generators", + Flags: flags, + Command: func(_ []string, _ []string) { + generateBootstrap(conf) + }, + } +} + +type bootstrapData struct { + Package string + FormattedName string + + GinkgoImport string + GomegaImport string + GinkgoPackage string + GomegaPackage string + CustomData map[string]any +} + +func generateBootstrap(conf GeneratorsConfig) { + packageName, bootstrapFilePrefix, formattedName := getPackageAndFormattedName() + + data := bootstrapData{ + Package: determinePackageName(packageName, conf.Internal), + FormattedName: formattedName, + + GinkgoImport: `. "github.com/onsi/ginkgo/v2"`, + GomegaImport: `. "github.com/onsi/gomega"`, + GinkgoPackage: "", + GomegaPackage: "", + } + + if conf.NoDot { + data.GinkgoImport = `"github.com/onsi/ginkgo/v2"` + data.GomegaImport = `"github.com/onsi/gomega"` + data.GinkgoPackage = `ginkgo.` + data.GomegaPackage = `gomega.` + } + + targetFile := fmt.Sprintf("%s_suite_test.go", bootstrapFilePrefix) + if internal.FileExists(targetFile) { + command.AbortWith("{{bold}}%s{{/}} already exists", targetFile) + } else { + fmt.Printf("Generating ginkgo test suite bootstrap for %s in:\n\t%s\n", packageName, targetFile) + } + + f, err := os.Create(targetFile) + command.AbortIfError("Failed to create file:", err) + defer f.Close() + + var templateText string + if conf.CustomTemplate != "" { + tpl, err := os.ReadFile(conf.CustomTemplate) + command.AbortIfError("Failed to read custom bootstrap file:", err) + templateText = string(tpl) + if conf.CustomTemplateData != "" { + var tplCustomDataMap map[string]any + tplCustomData, err := os.ReadFile(conf.CustomTemplateData) + command.AbortIfError("Failed to read custom boostrap data file:", err) + if !json.Valid([]byte(tplCustomData)) { + command.AbortWith("Invalid JSON object in custom data file.") + } + //create map from the custom template data + json.Unmarshal(tplCustomData, &tplCustomDataMap) + data.CustomData = tplCustomDataMap + } + } else if conf.Agouti { + templateText = agoutiBootstrapText + } else { + templateText = bootstrapText + } + + //Setting the option to explicitly fail if template is rendered trying to access missing key + bootstrapTemplate, err := template.New("bootstrap").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText) + command.AbortIfError("Failed to parse bootstrap template:", err) + + buf := &bytes.Buffer{} + //Being explicit about failing sooner during template rendering + //when accessing custom data rather than during the go fmt command + err = bootstrapTemplate.Execute(buf, data) + command.AbortIfError("Failed to render bootstrap template:", err) + + buf.WriteTo(f) + + internal.GoFmt(targetFile) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go new file mode 100644 index 000000000000..48d23f9191c2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go @@ -0,0 +1,259 @@ +package generators + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strconv" + "strings" + "text/template" + + sprig "github.com/go-task/slim-sprig" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/types" +) + +func BuildGenerateCommand() command.Command { + conf := GeneratorsConfig{} + flags, err := types.NewGinkgoFlagSet( + types.GinkgoFlags{ + {Name: "agouti", KeyPath: "Agouti", + Usage: "If set, generate will create a test file for writing Agouti tests"}, + {Name: "nodot", KeyPath: "NoDot", + Usage: "If set, generate will create a test file that does not dot-import ginkgo and gomega"}, + {Name: "internal", KeyPath: "Internal", + Usage: "If set, generate will create a test file that uses the regular package name (i.e. `package X`, not `package X_test`)"}, + {Name: "template", KeyPath: "CustomTemplate", + UsageArgument: "template-file", + Usage: "If specified, generate will use the contents of the file passed as the test file template"}, + {Name: "template-data", KeyPath: "CustomTemplateData", + UsageArgument: "template-data-file", + Usage: "If specified, generate will use the contents of the file passed as data to be rendered in the test file template"}, + }, + &conf, + types.GinkgoFlagSections{}, + ) + + if err != nil { + panic(err) + } + + return command.Command{ + Name: "generate", + Usage: "ginkgo generate ", + ShortDoc: "Generate a test file named _test.go", + Documentation: `If the optional argument is omitted, a file named after the package in the current directory will be created. + +You can pass multiple to generate multiple files simultaneously. The resulting files are named _test.go. + +You can also pass a of the form "file.go" and generate will emit "file_test.go".`, + DocLink: "generators", + Flags: flags, + Command: func(args []string, _ []string) { + generateTestFiles(conf, args) + }, + } +} + +type specData struct { + Package string + Subject string + PackageImportPath string + ImportPackage bool + + GinkgoImport string + GomegaImport string + GinkgoPackage string + GomegaPackage string + CustomData map[string]any +} + +func generateTestFiles(conf GeneratorsConfig, args []string) { + subjects := args + if len(subjects) == 0 { + subjects = []string{""} + } + for _, subject := range subjects { + generateTestFileForSubject(subject, conf) + } +} + +func generateTestFileForSubject(subject string, conf GeneratorsConfig) { + packageName, specFilePrefix, formattedName := getPackageAndFormattedName() + if subject != "" { + specFilePrefix = formatSubject(subject) + formattedName = prettifyName(specFilePrefix) + } + + if conf.Internal { + specFilePrefix = specFilePrefix + "_internal" + } + + data := specData{ + Package: determinePackageName(packageName, conf.Internal), + Subject: formattedName, + PackageImportPath: getPackageImportPath(), + ImportPackage: !conf.Internal, + + GinkgoImport: `. "github.com/onsi/ginkgo/v2"`, + GomegaImport: `. "github.com/onsi/gomega"`, + GinkgoPackage: "", + GomegaPackage: "", + } + + if conf.NoDot { + data.GinkgoImport = `"github.com/onsi/ginkgo/v2"` + data.GomegaImport = `"github.com/onsi/gomega"` + data.GinkgoPackage = `ginkgo.` + data.GomegaPackage = `gomega.` + } + + targetFile := fmt.Sprintf("%s_test.go", specFilePrefix) + if internal.FileExists(targetFile) { + command.AbortWith("{{bold}}%s{{/}} already exists", targetFile) + } else { + fmt.Printf("Generating ginkgo test for %s in:\n %s\n", data.Subject, targetFile) + } + + f, err := os.Create(targetFile) + command.AbortIfError("Failed to create test file:", err) + defer f.Close() + + var templateText string + if conf.CustomTemplate != "" { + tpl, err := os.ReadFile(conf.CustomTemplate) + command.AbortIfError("Failed to read custom template file:", err) + templateText = string(tpl) + if conf.CustomTemplateData != "" { + var tplCustomDataMap map[string]any + tplCustomData, err := os.ReadFile(conf.CustomTemplateData) + command.AbortIfError("Failed to read custom template data file:", err) + if !json.Valid([]byte(tplCustomData)) { + command.AbortWith("Invalid JSON object in custom data file.") + } + //create map from the custom template data + json.Unmarshal(tplCustomData, &tplCustomDataMap) + data.CustomData = tplCustomDataMap + } + } else if conf.Agouti { + templateText = agoutiSpecText + } else { + templateText = specText + } + + //Setting the option to explicitly fail if template is rendered trying to access missing key + specTemplate, err := template.New("spec").Funcs(sprig.TxtFuncMap()).Option("missingkey=error").Parse(templateText) + command.AbortIfError("Failed to read parse test template:", err) + + //Being explicit about failing sooner during template rendering + //when accessing custom data rather than during the go fmt command + err = specTemplate.Execute(f, data) + command.AbortIfError("Failed to render bootstrap template:", err) + internal.GoFmt(targetFile) +} + +func formatSubject(name string) string { + name = strings.ReplaceAll(name, "-", "_") + name = strings.ReplaceAll(name, " ", "_") + name = strings.Split(name, ".go")[0] + name = strings.Split(name, "_test")[0] + return name +} + +// moduleName returns module name from go.mod from given module root directory +func moduleName(modRoot string) string { + modFile, err := os.Open(filepath.Join(modRoot, "go.mod")) + if err != nil { + return "" + } + + mod := make([]byte, 128) + _, err = modFile.Read(mod) + if err != nil { + return "" + } + + slashSlash := []byte("//") + moduleStr := []byte("module") + + for len(mod) > 0 { + line := mod + mod = nil + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, mod = line[:i], line[i+1:] + } + if i := bytes.Index(line, slashSlash); i >= 0 { + line = line[:i] + } + line = bytes.TrimSpace(line) + if !bytes.HasPrefix(line, moduleStr) { + continue + } + line = line[len(moduleStr):] + n := len(line) + line = bytes.TrimSpace(line) + if len(line) == n || len(line) == 0 { + continue + } + + if line[0] == '"' || line[0] == '`' { + p, err := strconv.Unquote(string(line)) + if err != nil { + return "" // malformed quoted string or multiline module path + } + return p + } + + return string(line) + } + + return "" // missing module path +} + +func findModuleRoot(dir string) (root string) { + dir = filepath.Clean(dir) + + // Look for enclosing go.mod. + for { + if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { + return dir + } + d := filepath.Dir(dir) + if d == dir { + break + } + dir = d + } + return "" +} + +func getPackageImportPath() string { + workingDir, err := os.Getwd() + if err != nil { + panic(err.Error()) + } + + sep := string(filepath.Separator) + + // Try go.mod file first + modRoot := findModuleRoot(workingDir) + if modRoot != "" { + modName := moduleName(modRoot) + if modName != "" { + cd := strings.ReplaceAll(workingDir, modRoot, "") + cd = strings.ReplaceAll(cd, sep, "/") + return modName + cd + } + } + + // Fallback to GOPATH structure + paths := strings.Split(workingDir, sep+"src"+sep) + if len(paths) == 1 { + fmt.Printf("\nCouldn't identify package import path.\n\n\tginkgo generate\n\nMust be run within a package directory under $GOPATH/src/...\nYou're going to have to change UNKNOWN_PACKAGE_PATH in the generated file...\n\n") + return "UNKNOWN_PACKAGE_PATH" + } + return filepath.ToSlash(paths[len(paths)-1]) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go new file mode 100644 index 000000000000..c3470adbfd1c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go @@ -0,0 +1,41 @@ +package generators + +var specText = `package {{.Package}} + +import ( + {{.GinkgoImport}} + {{.GomegaImport}} + + {{if .ImportPackage}}"{{.PackageImportPath}}"{{end}} +) + +var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() { + +}) +` + +var agoutiSpecText = `package {{.Package}} + +import ( + {{.GinkgoImport}} + {{.GomegaImport}} + "github.com/sclevine/agouti" + . "github.com/sclevine/agouti/matchers" + + {{if .ImportPackage}}"{{.PackageImportPath}}"{{end}} +) + +var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() { + var page *agouti.Page + + {{.GinkgoPackage}}BeforeEach(func() { + var err error + page, err = agoutiDriver.NewPage() + {{.GomegaPackage}}Expect(err).NotTo({{.GomegaPackage}}HaveOccurred()) + }) + + {{.GinkgoPackage}}AfterEach(func() { + {{.GomegaPackage}}Expect(page.Destroy()).To({{.GomegaPackage}}Succeed()) + }) +}) +` diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go new file mode 100644 index 000000000000..3046a4487aaa --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go @@ -0,0 +1,64 @@ +package generators + +import ( + "go/build" + "os" + "path/filepath" + "strconv" + "strings" + + "github.com/onsi/ginkgo/v2/ginkgo/command" +) + +type GeneratorsConfig struct { + Agouti, NoDot, Internal bool + CustomTemplate string + CustomTemplateData string +} + +func getPackageAndFormattedName() (string, string, string) { + path, err := os.Getwd() + command.AbortIfError("Could not get current working directory:", err) + + dirName := strings.ReplaceAll(filepath.Base(path), "-", "_") + dirName = strings.ReplaceAll(dirName, " ", "_") + + pkg, err := build.ImportDir(path, 0) + packageName := pkg.Name + if err != nil { + packageName = ensureLegalPackageName(dirName) + } + + formattedName := prettifyName(filepath.Base(path)) + return packageName, dirName, formattedName +} + +func ensureLegalPackageName(name string) string { + if name == "_" { + return "underscore" + } + if len(name) == 0 { + return "empty" + } + n, isDigitErr := strconv.Atoi(string(name[0])) + if isDigitErr == nil { + return []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}[n] + name[1:] + } + return name +} + +func prettifyName(name string) string { + name = strings.ReplaceAll(name, "-", " ") + name = strings.ReplaceAll(name, "_", " ") + name = strings.Title(name) + name = strings.ReplaceAll(name, " ", "") + return name +} + +func determinePackageName(name string, internal bool) string { + if internal { + return name + } + + return name + "_test" +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go new file mode 100644 index 000000000000..86da7340d17e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.go @@ -0,0 +1,161 @@ +package internal + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + "sync" + + "github.com/onsi/ginkgo/v2/types" +) + +func CompileSuite(suite TestSuite, goFlagsConfig types.GoFlagsConfig) TestSuite { + if suite.PathToCompiledTest != "" { + return suite + } + + suite.CompilationError = nil + + path, err := filepath.Abs(filepath.Join(suite.Path, suite.PackageName+".test")) + if err != nil { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to compute compilation target path:\n%s", err.Error()) + return suite + } + + ginkgoInvocationPath, _ := os.Getwd() + ginkgoInvocationPath, _ = filepath.Abs(ginkgoInvocationPath) + packagePath := suite.AbsPath() + pathToInvocationPath, err := filepath.Rel(packagePath, ginkgoInvocationPath) + if err != nil { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to get relative path from package to the current working directory:\n%s", err.Error()) + return suite + } + args, err := types.GenerateGoTestCompileArgs(goFlagsConfig, path, "./", pathToInvocationPath) + if err != nil { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to generate go test compile flags:\n%s", err.Error()) + return suite + } + + cmd := exec.Command("go", args...) + cmd.Dir = suite.Path + output, err := cmd.CombinedOutput() + if err != nil { + if len(output) > 0 { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to compile %s:\n\n%s", suite.PackageName, output) + } else { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to compile %s\n%s", suite.PackageName, err.Error()) + } + return suite + } + + if strings.Contains(string(output), "[no test files]") { + suite.State = TestSuiteStateSkippedDueToEmptyCompilation + return suite + } + + if len(output) > 0 { + fmt.Println(string(output)) + } + + if !FileExists(path) { + suite.State = TestSuiteStateFailedToCompile + suite.CompilationError = fmt.Errorf("Failed to compile %s:\nOutput file %s could not be found", suite.PackageName, path) + return suite + } + + suite.State = TestSuiteStateCompiled + suite.PathToCompiledTest = path + return suite +} + +func Cleanup(goFlagsConfig types.GoFlagsConfig, suites ...TestSuite) { + if goFlagsConfig.BinaryMustBePreserved() { + return + } + for _, suite := range suites { + if !suite.Precompiled { + os.Remove(suite.PathToCompiledTest) + } + } +} + +type parallelSuiteBundle struct { + suite TestSuite + compiled chan TestSuite +} + +type OrderedParallelCompiler struct { + mutex *sync.Mutex + stopped bool + numCompilers int + + idx int + numSuites int + completionChannels []chan TestSuite +} + +func NewOrderedParallelCompiler(numCompilers int) *OrderedParallelCompiler { + return &OrderedParallelCompiler{ + mutex: &sync.Mutex{}, + numCompilers: numCompilers, + } +} + +func (opc *OrderedParallelCompiler) StartCompiling(suites TestSuites, goFlagsConfig types.GoFlagsConfig) { + opc.stopped = false + opc.idx = 0 + opc.numSuites = len(suites) + opc.completionChannels = make([]chan TestSuite, opc.numSuites) + + toCompile := make(chan parallelSuiteBundle, opc.numCompilers) + for compiler := 0; compiler < opc.numCompilers; compiler++ { + go func() { + for bundle := range toCompile { + c, suite := bundle.compiled, bundle.suite + opc.mutex.Lock() + stopped := opc.stopped + opc.mutex.Unlock() + if !stopped { + suite = CompileSuite(suite, goFlagsConfig) + } + c <- suite + } + }() + } + + for idx, suite := range suites { + opc.completionChannels[idx] = make(chan TestSuite, 1) + toCompile <- parallelSuiteBundle{suite, opc.completionChannels[idx]} + if idx == 0 { //compile first suite serially + suite = <-opc.completionChannels[0] + opc.completionChannels[0] <- suite + } + } + + close(toCompile) +} + +func (opc *OrderedParallelCompiler) Next() (int, TestSuite) { + if opc.idx >= opc.numSuites { + return opc.numSuites, TestSuite{} + } + + idx := opc.idx + suite := <-opc.completionChannels[idx] + opc.idx = opc.idx + 1 + + return idx, suite +} + +func (opc *OrderedParallelCompiler) StopAndDrain() { + opc.mutex.Lock() + opc.stopped = true + opc.mutex.Unlock() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go new file mode 100644 index 000000000000..bd3c6d0287a5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.go @@ -0,0 +1,237 @@ +package internal + +import ( + "bytes" + "fmt" + "os" + "os/exec" + "path/filepath" + "regexp" + "strconv" + + "github.com/google/pprof/profile" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +func AbsPathForGeneratedAsset(assetName string, suite TestSuite, cliConfig types.CLIConfig, process int) string { + suffix := "" + if process != 0 { + suffix = fmt.Sprintf(".%d", process) + } + if cliConfig.OutputDir == "" { + return filepath.Join(suite.AbsPath(), assetName+suffix) + } + outputDir, _ := filepath.Abs(cliConfig.OutputDir) + return filepath.Join(outputDir, suite.NamespacedName()+"_"+assetName+suffix) +} + +func FinalizeProfilesAndReportsForSuites(suites TestSuites, cliConfig types.CLIConfig, suiteConfig types.SuiteConfig, reporterConfig types.ReporterConfig, goFlagsConfig types.GoFlagsConfig) ([]string, error) { + messages := []string{} + suitesWithProfiles := suites.WithState(TestSuiteStatePassed, TestSuiteStateFailed) //anything else won't have actually run and generated a profile + + // merge cover profiles if need be + if goFlagsConfig.Cover && !cliConfig.KeepSeparateCoverprofiles { + coverProfiles := []string{} + for _, suite := range suitesWithProfiles { + if !suite.HasProgrammaticFocus { + coverProfiles = append(coverProfiles, AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0)) + } + } + + if len(coverProfiles) > 0 { + dst := goFlagsConfig.CoverProfile + if cliConfig.OutputDir != "" { + dst = filepath.Join(cliConfig.OutputDir, goFlagsConfig.CoverProfile) + } + err := MergeAndCleanupCoverProfiles(coverProfiles, dst) + if err != nil { + return messages, err + } + coverage, err := GetCoverageFromCoverProfile(dst) + if err != nil { + return messages, err + } + if coverage == 0 { + messages = append(messages, "composite coverage: [no statements]") + } else if suitesWithProfiles.AnyHaveProgrammaticFocus() { + messages = append(messages, fmt.Sprintf("composite coverage: %.1f%% of statements however some suites did not contribute because they included programatically focused specs", coverage)) + } else { + messages = append(messages, fmt.Sprintf("composite coverage: %.1f%% of statements", coverage)) + } + } else { + messages = append(messages, "no composite coverage computed: all suites included programatically focused specs") + } + } + + // copy binaries if need be + for _, suite := range suitesWithProfiles { + if goFlagsConfig.BinaryMustBePreserved() && cliConfig.OutputDir != "" { + src := suite.PathToCompiledTest + dst := filepath.Join(cliConfig.OutputDir, suite.NamespacedName()+".test") + if suite.Precompiled { + if err := CopyFile(src, dst); err != nil { + return messages, err + } + } else { + if err := os.Rename(src, dst); err != nil { + return messages, err + } + } + } + } + + type reportFormat struct { + ReportName string + GenerateFunc func(types.Report, string) error + MergeFunc func([]string, string) ([]string, error) + } + reportFormats := []reportFormat{} + if reporterConfig.JSONReport != "" { + reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.JSONReport, GenerateFunc: reporters.GenerateJSONReport, MergeFunc: reporters.MergeAndCleanupJSONReports}) + } + if reporterConfig.JUnitReport != "" { + reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.JUnitReport, GenerateFunc: reporters.GenerateJUnitReport, MergeFunc: reporters.MergeAndCleanupJUnitReports}) + } + if reporterConfig.TeamcityReport != "" { + reportFormats = append(reportFormats, reportFormat{ReportName: reporterConfig.TeamcityReport, GenerateFunc: reporters.GenerateTeamcityReport, MergeFunc: reporters.MergeAndCleanupTeamcityReports}) + } + + // Generate reports for suites that failed to run + reportableSuites := suites.ThatAreGinkgoSuites() + for _, suite := range reportableSuites.WithState(TestSuiteStateFailedToCompile, TestSuiteStateFailedDueToTimeout, TestSuiteStateSkippedDueToPriorFailures, TestSuiteStateSkippedDueToEmptyCompilation) { + report := types.Report{ + SuitePath: suite.AbsPath(), + SuiteConfig: suiteConfig, + SuiteSucceeded: false, + } + switch suite.State { + case TestSuiteStateFailedToCompile: + report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, suite.CompilationError.Error()) + case TestSuiteStateFailedDueToTimeout: + report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, TIMEOUT_ELAPSED_FAILURE_REASON) + case TestSuiteStateSkippedDueToPriorFailures: + report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, PRIOR_FAILURES_FAILURE_REASON) + case TestSuiteStateSkippedDueToEmptyCompilation: + report.SpecialSuiteFailureReasons = append(report.SpecialSuiteFailureReasons, EMPTY_SKIP_FAILURE_REASON) + report.SuiteSucceeded = true + } + + for _, format := range reportFormats { + format.GenerateFunc(report, AbsPathForGeneratedAsset(format.ReportName, suite, cliConfig, 0)) + } + } + + // Merge reports unless we've been asked to keep them separate + if !cliConfig.KeepSeparateReports { + for _, format := range reportFormats { + reports := []string{} + for _, suite := range reportableSuites { + reports = append(reports, AbsPathForGeneratedAsset(format.ReportName, suite, cliConfig, 0)) + } + dst := format.ReportName + if cliConfig.OutputDir != "" { + dst = filepath.Join(cliConfig.OutputDir, format.ReportName) + } + mergeMessages, err := format.MergeFunc(reports, dst) + messages = append(messages, mergeMessages...) + if err != nil { + return messages, err + } + } + } + + return messages, nil +} + +//loads each profile, combines them, deletes them, stores them in destination +func MergeAndCleanupCoverProfiles(profiles []string, destination string) error { + combined := &bytes.Buffer{} + modeRegex := regexp.MustCompile(`^mode: .*\n`) + for i, profile := range profiles { + contents, err := os.ReadFile(profile) + if err != nil { + return fmt.Errorf("Unable to read coverage file %s:\n%s", profile, err.Error()) + } + os.Remove(profile) + + // remove the cover mode line from every file + // except the first one + if i > 0 { + contents = modeRegex.ReplaceAll(contents, []byte{}) + } + + _, err = combined.Write(contents) + + // Add a newline to the end of every file if missing. + if err == nil && len(contents) > 0 && contents[len(contents)-1] != '\n' { + _, err = combined.Write([]byte("\n")) + } + + if err != nil { + return fmt.Errorf("Unable to append to coverprofile:\n%s", err.Error()) + } + } + + err := os.WriteFile(destination, combined.Bytes(), 0666) + if err != nil { + return fmt.Errorf("Unable to create combined cover profile:\n%s", err.Error()) + } + return nil +} + +func GetCoverageFromCoverProfile(profile string) (float64, error) { + cmd := exec.Command("go", "tool", "cover", "-func", profile) + output, err := cmd.CombinedOutput() + if err != nil { + return 0, fmt.Errorf("Could not process Coverprofile %s: %s", profile, err.Error()) + } + re := regexp.MustCompile(`total:\s*\(statements\)\s*(\d*\.\d*)\%`) + matches := re.FindStringSubmatch(string(output)) + if matches == nil { + return 0, fmt.Errorf("Could not parse Coverprofile to compute coverage percentage") + } + coverageString := matches[1] + coverage, err := strconv.ParseFloat(coverageString, 64) + if err != nil { + return 0, fmt.Errorf("Could not parse Coverprofile to compute coverage percentage: %s", err.Error()) + } + + return coverage, nil +} + +func MergeProfiles(profilePaths []string, destination string) error { + profiles := []*profile.Profile{} + for _, profilePath := range profilePaths { + proFile, err := os.Open(profilePath) + if err != nil { + return fmt.Errorf("Could not open profile: %s\n%s", profilePath, err.Error()) + } + prof, err := profile.Parse(proFile) + if err != nil { + return fmt.Errorf("Could not parse profile: %s\n%s", profilePath, err.Error()) + } + profiles = append(profiles, prof) + os.Remove(profilePath) + } + + mergedProfile, err := profile.Merge(profiles) + if err != nil { + return fmt.Errorf("Could not merge profiles:\n%s", err.Error()) + } + + outFile, err := os.Create(destination) + if err != nil { + return fmt.Errorf("Could not create merged profile %s:\n%s", destination, err.Error()) + } + err = mergedProfile.Write(outFile) + if err != nil { + return fmt.Errorf("Could not write merged profile %s:\n%s", destination, err.Error()) + } + err = outFile.Close() + if err != nil { + return fmt.Errorf("Could not close merged profile %s:\n%s", destination, err.Error()) + } + + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go new file mode 100644 index 000000000000..41052ea19db2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go @@ -0,0 +1,355 @@ +package internal + +import ( + "bytes" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "regexp" + "strings" + "syscall" + "time" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/internal/parallel_support" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +func RunCompiledSuite(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite { + suite.State = TestSuiteStateFailed + suite.HasProgrammaticFocus = false + + if suite.PathToCompiledTest == "" { + return suite + } + + if suite.IsGinkgo && cliConfig.ComputedProcs() > 1 { + suite = runParallel(suite, ginkgoConfig, reporterConfig, cliConfig, goFlagsConfig, additionalArgs) + } else if suite.IsGinkgo { + suite = runSerial(suite, ginkgoConfig, reporterConfig, cliConfig, goFlagsConfig, additionalArgs) + } else { + suite = runGoTest(suite, cliConfig, goFlagsConfig) + } + runAfterRunHook(cliConfig.AfterRunHook, reporterConfig.NoColor, suite) + return suite +} + +func buildAndStartCommand(suite TestSuite, args []string, pipeToStdout bool) (*exec.Cmd, *bytes.Buffer) { + buf := &bytes.Buffer{} + cmd := exec.Command(suite.PathToCompiledTest, args...) + cmd.Dir = suite.Path + if pipeToStdout { + cmd.Stderr = io.MultiWriter(os.Stdout, buf) + cmd.Stdout = os.Stdout + } else { + cmd.Stderr = buf + cmd.Stdout = buf + } + err := cmd.Start() + command.AbortIfError("Failed to start test suite", err) + + return cmd, buf +} + +func checkForNoTestsWarning(buf *bytes.Buffer) bool { + if strings.Contains(buf.String(), "warning: no tests to run") { + fmt.Fprintf(os.Stderr, `Found no test suites, did you forget to run "ginkgo bootstrap"?`) + return true + } + return false +} + +func runGoTest(suite TestSuite, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig) TestSuite { + // As we run the go test from the suite directory, make sure the cover profile is absolute + // and placed into the expected output directory when one is configured. + if goFlagsConfig.Cover && !filepath.IsAbs(goFlagsConfig.CoverProfile) { + goFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0) + } + + args, err := types.GenerateGoTestRunArgs(goFlagsConfig) + command.AbortIfError("Failed to generate test run arguments", err) + cmd, buf := buildAndStartCommand(suite, args, true) + + cmd.Wait() + + exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() + passed := (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) + passed = !(checkForNoTestsWarning(buf) && cliConfig.RequireSuite) && passed + if passed { + suite.State = TestSuiteStatePassed + } else { + suite.State = TestSuiteStateFailed + } + + return suite +} + +func runSerial(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite { + if goFlagsConfig.Cover { + goFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0) + } + if goFlagsConfig.BlockProfile != "" { + goFlagsConfig.BlockProfile = AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, 0) + } + if goFlagsConfig.CPUProfile != "" { + goFlagsConfig.CPUProfile = AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, 0) + } + if goFlagsConfig.MemProfile != "" { + goFlagsConfig.MemProfile = AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, 0) + } + if goFlagsConfig.MutexProfile != "" { + goFlagsConfig.MutexProfile = AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, 0) + } + if reporterConfig.JSONReport != "" { + reporterConfig.JSONReport = AbsPathForGeneratedAsset(reporterConfig.JSONReport, suite, cliConfig, 0) + } + if reporterConfig.JUnitReport != "" { + reporterConfig.JUnitReport = AbsPathForGeneratedAsset(reporterConfig.JUnitReport, suite, cliConfig, 0) + } + if reporterConfig.TeamcityReport != "" { + reporterConfig.TeamcityReport = AbsPathForGeneratedAsset(reporterConfig.TeamcityReport, suite, cliConfig, 0) + } + + args, err := types.GenerateGinkgoTestRunArgs(ginkgoConfig, reporterConfig, goFlagsConfig) + command.AbortIfError("Failed to generate test run arguments", err) + args = append([]string{"--test.timeout=0"}, args...) + args = append(args, additionalArgs...) + + cmd, buf := buildAndStartCommand(suite, args, true) + + cmd.Wait() + + exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() + suite.HasProgrammaticFocus = (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) + passed := (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) + passed = !(checkForNoTestsWarning(buf) && cliConfig.RequireSuite) && passed + if passed { + suite.State = TestSuiteStatePassed + } else { + suite.State = TestSuiteStateFailed + } + + if suite.HasProgrammaticFocus { + if goFlagsConfig.Cover { + fmt.Fprintln(os.Stdout, "coverage: no coverfile was generated because specs are programmatically focused") + } + if goFlagsConfig.BlockProfile != "" { + fmt.Fprintln(os.Stdout, "no block profile was generated because specs are programmatically focused") + } + if goFlagsConfig.CPUProfile != "" { + fmt.Fprintln(os.Stdout, "no cpu profile was generated because specs are programmatically focused") + } + if goFlagsConfig.MemProfile != "" { + fmt.Fprintln(os.Stdout, "no mem profile was generated because specs are programmatically focused") + } + if goFlagsConfig.MutexProfile != "" { + fmt.Fprintln(os.Stdout, "no mutex profile was generated because specs are programmatically focused") + } + } + + return suite +} + +func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite { + type procResult struct { + passed bool + hasProgrammaticFocus bool + } + + numProcs := cliConfig.ComputedProcs() + procOutput := make([]*bytes.Buffer, numProcs) + coverProfiles := []string{} + + blockProfiles := []string{} + cpuProfiles := []string{} + memProfiles := []string{} + mutexProfiles := []string{} + + procResults := make(chan procResult) + + server, err := parallel_support.NewServer(numProcs, reporters.NewDefaultReporter(reporterConfig, formatter.ColorableStdOut)) + command.AbortIfError("Failed to start parallel spec server", err) + server.Start() + defer server.Close() + + if reporterConfig.JSONReport != "" { + reporterConfig.JSONReport = AbsPathForGeneratedAsset(reporterConfig.JSONReport, suite, cliConfig, 0) + } + if reporterConfig.JUnitReport != "" { + reporterConfig.JUnitReport = AbsPathForGeneratedAsset(reporterConfig.JUnitReport, suite, cliConfig, 0) + } + if reporterConfig.TeamcityReport != "" { + reporterConfig.TeamcityReport = AbsPathForGeneratedAsset(reporterConfig.TeamcityReport, suite, cliConfig, 0) + } + + for proc := 1; proc <= numProcs; proc++ { + procGinkgoConfig := ginkgoConfig + procGinkgoConfig.ParallelProcess, procGinkgoConfig.ParallelTotal, procGinkgoConfig.ParallelHost = proc, numProcs, server.Address() + + procGoFlagsConfig := goFlagsConfig + if goFlagsConfig.Cover { + procGoFlagsConfig.CoverProfile = AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, proc) + coverProfiles = append(coverProfiles, procGoFlagsConfig.CoverProfile) + } + if goFlagsConfig.BlockProfile != "" { + procGoFlagsConfig.BlockProfile = AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, proc) + blockProfiles = append(blockProfiles, procGoFlagsConfig.BlockProfile) + } + if goFlagsConfig.CPUProfile != "" { + procGoFlagsConfig.CPUProfile = AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, proc) + cpuProfiles = append(cpuProfiles, procGoFlagsConfig.CPUProfile) + } + if goFlagsConfig.MemProfile != "" { + procGoFlagsConfig.MemProfile = AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, proc) + memProfiles = append(memProfiles, procGoFlagsConfig.MemProfile) + } + if goFlagsConfig.MutexProfile != "" { + procGoFlagsConfig.MutexProfile = AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, proc) + mutexProfiles = append(mutexProfiles, procGoFlagsConfig.MutexProfile) + } + + args, err := types.GenerateGinkgoTestRunArgs(procGinkgoConfig, reporterConfig, procGoFlagsConfig) + command.AbortIfError("Failed to generate test run arguments", err) + args = append([]string{"--test.timeout=0"}, args...) + args = append(args, additionalArgs...) + + cmd, buf := buildAndStartCommand(suite, args, false) + procOutput[proc-1] = buf + server.RegisterAlive(proc, func() bool { return cmd.ProcessState == nil || !cmd.ProcessState.Exited() }) + + go func() { + cmd.Wait() + exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() + procResults <- procResult{ + passed: (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE), + hasProgrammaticFocus: exitStatus == types.GINKGO_FOCUS_EXIT_CODE, + } + }() + } + + passed := true + for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ { + result := <-procResults + passed = passed && result.passed + suite.HasProgrammaticFocus = suite.HasProgrammaticFocus || result.hasProgrammaticFocus + } + if passed { + suite.State = TestSuiteStatePassed + } else { + suite.State = TestSuiteStateFailed + } + + select { + case <-server.GetSuiteDone(): + fmt.Println("") + case <-time.After(time.Second): + //one of the nodes never finished reporting to the server. Something must have gone wrong. + fmt.Fprint(formatter.ColorableStdErr, formatter.F("\n{{bold}}{{red}}Ginkgo timed out waiting for all parallel procs to report back{{/}}\n")) + fmt.Fprint(formatter.ColorableStdErr, formatter.F("{{gray}}Test suite:{{/}} %s (%s)\n\n", suite.PackageName, suite.Path)) + fmt.Fprint(formatter.ColorableStdErr, formatter.Fiw(0, formatter.COLS, "This occurs if a parallel process exits before it reports its results to the Ginkgo CLI. The CLI will now print out all the stdout/stderr output it's collected from the running processes. However you may not see anything useful in these logs because the individual test processes usually intercept output to stdout/stderr in order to capture it in the spec reports.\n\nYou may want to try rerunning your test suite with {{light-gray}}--output-interceptor-mode=none{{/}} to see additional output here and debug your suite.\n")) + fmt.Fprintln(formatter.ColorableStdErr, " ") + for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ { + fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{bold}}Output from proc %d:{{/}}\n", proc)) + fmt.Fprintln(os.Stderr, formatter.Fi(1, "%s", procOutput[proc-1].String())) + } + fmt.Fprintf(os.Stderr, "** End **") + } + + for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ { + output := procOutput[proc-1].String() + if proc == 1 && checkForNoTestsWarning(procOutput[0]) && cliConfig.RequireSuite { + suite.State = TestSuiteStateFailed + } + if strings.Contains(output, "deprecated Ginkgo functionality") { + fmt.Fprintln(os.Stderr, output) + } + } + + if len(coverProfiles) > 0 { + if suite.HasProgrammaticFocus { + fmt.Fprintln(os.Stdout, "coverage: no coverfile was generated because specs are programmatically focused") + } else { + coverProfile := AbsPathForGeneratedAsset(goFlagsConfig.CoverProfile, suite, cliConfig, 0) + err := MergeAndCleanupCoverProfiles(coverProfiles, coverProfile) + command.AbortIfError("Failed to combine cover profiles", err) + + coverage, err := GetCoverageFromCoverProfile(coverProfile) + command.AbortIfError("Failed to compute coverage", err) + if coverage == 0 { + fmt.Fprintln(os.Stdout, "coverage: [no statements]") + } else { + fmt.Fprintf(os.Stdout, "coverage: %.1f%% of statements\n", coverage) + } + } + } + if len(blockProfiles) > 0 { + if suite.HasProgrammaticFocus { + fmt.Fprintln(os.Stdout, "no block profile was generated because specs are programmatically focused") + } else { + blockProfile := AbsPathForGeneratedAsset(goFlagsConfig.BlockProfile, suite, cliConfig, 0) + err := MergeProfiles(blockProfiles, blockProfile) + command.AbortIfError("Failed to combine blockprofiles", err) + } + } + if len(cpuProfiles) > 0 { + if suite.HasProgrammaticFocus { + fmt.Fprintln(os.Stdout, "no cpu profile was generated because specs are programmatically focused") + } else { + cpuProfile := AbsPathForGeneratedAsset(goFlagsConfig.CPUProfile, suite, cliConfig, 0) + err := MergeProfiles(cpuProfiles, cpuProfile) + command.AbortIfError("Failed to combine cpuprofiles", err) + } + } + if len(memProfiles) > 0 { + if suite.HasProgrammaticFocus { + fmt.Fprintln(os.Stdout, "no mem profile was generated because specs are programmatically focused") + } else { + memProfile := AbsPathForGeneratedAsset(goFlagsConfig.MemProfile, suite, cliConfig, 0) + err := MergeProfiles(memProfiles, memProfile) + command.AbortIfError("Failed to combine memprofiles", err) + } + } + if len(mutexProfiles) > 0 { + if suite.HasProgrammaticFocus { + fmt.Fprintln(os.Stdout, "no mutex profile was generated because specs are programmatically focused") + } else { + mutexProfile := AbsPathForGeneratedAsset(goFlagsConfig.MutexProfile, suite, cliConfig, 0) + err := MergeProfiles(mutexProfiles, mutexProfile) + command.AbortIfError("Failed to combine mutexprofiles", err) + } + } + + return suite +} + +func runAfterRunHook(command string, noColor bool, suite TestSuite) { + if command == "" { + return + } + f := formatter.NewWithNoColorBool(noColor) + + // Allow for string replacement to pass input to the command + passed := "[FAIL]" + if suite.State.Is(TestSuiteStatePassed) { + passed = "[PASS]" + } + command = strings.ReplaceAll(command, "(ginkgo-suite-passed)", passed) + command = strings.ReplaceAll(command, "(ginkgo-suite-name)", suite.PackageName) + + // Must break command into parts + splitArgs := regexp.MustCompile(`'.+'|".+"|\S+`) + parts := splitArgs.FindAllString(command, -1) + + output, err := exec.Command(parts[0], parts[1:]...).CombinedOutput() + if err != nil { + fmt.Fprintln(formatter.ColorableStdOut, f.Fi(0, "{{red}}{{bold}}After-run-hook failed:{{/}}")) + fmt.Fprintln(formatter.ColorableStdOut, f.Fi(1, "{{red}}%s{{/}}", output)) + } else { + fmt.Fprintln(formatter.ColorableStdOut, f.Fi(0, "{{green}}{{bold}}After-run-hook succeeded:{{/}}")) + fmt.Fprintln(formatter.ColorableStdOut, f.Fi(1, "{{green}}%s{{/}}", output)) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.go new file mode 100644 index 000000000000..64dcb1b78c6e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.go @@ -0,0 +1,283 @@ +package internal + +import ( + "errors" + "math/rand" + "os" + "path" + "path/filepath" + "regexp" + "strings" + + "github.com/onsi/ginkgo/v2/types" +) + +const TIMEOUT_ELAPSED_FAILURE_REASON = "Suite did not run because the timeout elapsed" +const PRIOR_FAILURES_FAILURE_REASON = "Suite did not run because prior suites failed and --keep-going is not set" +const EMPTY_SKIP_FAILURE_REASON = "Suite did not run go test reported that no test files were found" + +type TestSuiteState uint + +const ( + TestSuiteStateInvalid TestSuiteState = iota + + TestSuiteStateUncompiled + TestSuiteStateCompiled + + TestSuiteStatePassed + + TestSuiteStateSkippedDueToEmptyCompilation + TestSuiteStateSkippedByFilter + TestSuiteStateSkippedDueToPriorFailures + + TestSuiteStateFailed + TestSuiteStateFailedDueToTimeout + TestSuiteStateFailedToCompile +) + +var TestSuiteStateFailureStates = []TestSuiteState{TestSuiteStateFailed, TestSuiteStateFailedDueToTimeout, TestSuiteStateFailedToCompile} + +func (state TestSuiteState) Is(states ...TestSuiteState) bool { + for _, suiteState := range states { + if suiteState == state { + return true + } + } + + return false +} + +type TestSuite struct { + Path string + PackageName string + IsGinkgo bool + + Precompiled bool + PathToCompiledTest string + CompilationError error + + HasProgrammaticFocus bool + State TestSuiteState +} + +func (ts TestSuite) AbsPath() string { + path, _ := filepath.Abs(ts.Path) + return path +} + +func (ts TestSuite) NamespacedName() string { + name := relPath(ts.Path) + name = strings.TrimLeft(name, "."+string(filepath.Separator)) + name = strings.ReplaceAll(name, string(filepath.Separator), "_") + name = strings.ReplaceAll(name, " ", "_") + if name == "" { + return ts.PackageName + } + return name +} + +type TestSuites []TestSuite + +func (ts TestSuites) AnyHaveProgrammaticFocus() bool { + for _, suite := range ts { + if suite.HasProgrammaticFocus { + return true + } + } + + return false +} + +func (ts TestSuites) ThatAreGinkgoSuites() TestSuites { + out := TestSuites{} + for _, suite := range ts { + if suite.IsGinkgo { + out = append(out, suite) + } + } + return out +} + +func (ts TestSuites) CountWithState(states ...TestSuiteState) int { + n := 0 + for _, suite := range ts { + if suite.State.Is(states...) { + n += 1 + } + } + + return n +} + +func (ts TestSuites) WithState(states ...TestSuiteState) TestSuites { + out := TestSuites{} + for _, suite := range ts { + if suite.State.Is(states...) { + out = append(out, suite) + } + } + + return out +} + +func (ts TestSuites) WithoutState(states ...TestSuiteState) TestSuites { + out := TestSuites{} + for _, suite := range ts { + if !suite.State.Is(states...) { + out = append(out, suite) + } + } + + return out +} + +func (ts TestSuites) ShuffledCopy(seed int64) TestSuites { + out := make(TestSuites, len(ts)) + permutation := rand.New(rand.NewSource(seed)).Perm(len(ts)) + for i, j := range permutation { + out[i] = ts[j] + } + return out +} + +func FindSuites(args []string, cliConfig types.CLIConfig, allowPrecompiled bool) TestSuites { + suites := TestSuites{} + + if len(args) > 0 { + for _, arg := range args { + if allowPrecompiled { + suite, err := precompiledTestSuite(arg) + if err == nil { + suites = append(suites, suite) + continue + } + } + recurseForSuite := cliConfig.Recurse + if strings.HasSuffix(arg, "/...") && arg != "/..." { + arg = arg[:len(arg)-4] + recurseForSuite = true + } + suites = append(suites, suitesInDir(arg, recurseForSuite)...) + } + } else { + suites = suitesInDir(".", cliConfig.Recurse) + } + + if cliConfig.SkipPackage != "" { + skipFilters := strings.Split(cliConfig.SkipPackage, ",") + for idx := range suites { + for _, skipFilter := range skipFilters { + if strings.Contains(suites[idx].Path, skipFilter) { + suites[idx].State = TestSuiteStateSkippedByFilter + break + } + } + } + } + + return suites +} + +func precompiledTestSuite(path string) (TestSuite, error) { + info, err := os.Stat(path) + if err != nil { + return TestSuite{}, err + } + + if info.IsDir() { + return TestSuite{}, errors.New("this is a directory, not a file") + } + + if filepath.Ext(path) != ".test" && filepath.Ext(path) != ".exe" { + return TestSuite{}, errors.New("this is not a .test binary") + } + + if filepath.Ext(path) == ".test" && info.Mode()&0111 == 0 { + return TestSuite{}, errors.New("this is not executable") + } + + dir := relPath(filepath.Dir(path)) + packageName := strings.TrimSuffix(filepath.Base(path), ".exe") + packageName = strings.TrimSuffix(packageName, ".test") + + path, err = filepath.Abs(path) + if err != nil { + return TestSuite{}, err + } + + return TestSuite{ + Path: dir, + PackageName: packageName, + IsGinkgo: true, + Precompiled: true, + PathToCompiledTest: path, + State: TestSuiteStateCompiled, + }, nil +} + +func suitesInDir(dir string, recurse bool) TestSuites { + suites := TestSuites{} + + if path.Base(dir) == "vendor" { + return suites + } + + files, _ := os.ReadDir(dir) + re := regexp.MustCompile(`^[^._].*_test\.go$`) + for _, file := range files { + if !file.IsDir() && re.Match([]byte(file.Name())) { + suite := TestSuite{ + Path: relPath(dir), + PackageName: packageNameForSuite(dir), + IsGinkgo: filesHaveGinkgoSuite(dir, files), + State: TestSuiteStateUncompiled, + } + suites = append(suites, suite) + break + } + } + + if recurse { + re = regexp.MustCompile(`^[._]`) + for _, file := range files { + if file.IsDir() && !re.Match([]byte(file.Name())) { + suites = append(suites, suitesInDir(dir+"/"+file.Name(), recurse)...) + } + } + } + + return suites +} + +func relPath(dir string) string { + dir, _ = filepath.Abs(dir) + cwd, _ := os.Getwd() + dir, _ = filepath.Rel(cwd, filepath.Clean(dir)) + + if string(dir[0]) != "." { + dir = "." + string(filepath.Separator) + dir + } + + return dir +} + +func packageNameForSuite(dir string) string { + path, _ := filepath.Abs(dir) + return filepath.Base(path) +} + +func filesHaveGinkgoSuite(dir string, files []os.DirEntry) bool { + reTestFile := regexp.MustCompile(`_test\.go$`) + reGinkgo := regexp.MustCompile(`package ginkgo|\/ginkgo"|\/ginkgo\/v2"|\/ginkgo\/v2/dsl/`) + + for _, file := range files { + if !file.IsDir() && reTestFile.Match([]byte(file.Name())) { + contents, _ := os.ReadFile(dir + "/" + file.Name()) + if reGinkgo.Match(contents) { + return true + } + } + } + + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.go new file mode 100644 index 000000000000..bd9ca7d51e88 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.go @@ -0,0 +1,86 @@ +package internal + +import ( + "fmt" + "io" + "os" + "os/exec" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/ginkgo/command" +) + +func FileExists(path string) bool { + _, err := os.Stat(path) + return err == nil +} + +func CopyFile(src string, dest string) error { + srcFile, err := os.Open(src) + if err != nil { + return err + } + + srcStat, err := srcFile.Stat() + if err != nil { + return err + } + + if _, err := os.Stat(dest); err == nil { + os.Remove(dest) + } + + destFile, err := os.OpenFile(dest, os.O_WRONLY|os.O_CREATE, srcStat.Mode()) + if err != nil { + return err + } + + _, err = io.Copy(destFile, srcFile) + if err != nil { + return err + } + + if err := srcFile.Close(); err != nil { + return err + } + return destFile.Close() +} + +func GoFmt(path string) { + out, err := exec.Command("go", "fmt", path).CombinedOutput() + if err != nil { + command.AbortIfError(fmt.Sprintf("Could not fmt:\n%s\n", string(out)), err) + } +} + +func PluralizedWord(singular, plural string, count int) string { + if count == 1 { + return singular + } + return plural +} + +func FailedSuitesReport(suites TestSuites, f formatter.Formatter) string { + out := "" + out += "There were failures detected in the following suites:\n" + + maxPackageNameLength := 0 + for _, suite := range suites.WithState(TestSuiteStateFailureStates...) { + if len(suite.PackageName) > maxPackageNameLength { + maxPackageNameLength = len(suite.PackageName) + } + } + + packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength) + for _, suite := range suites { + switch suite.State { + case TestSuiteStateFailed: + out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s{{/}}\n", suite.PackageName, suite.Path) + case TestSuiteStateFailedToCompile: + out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{magenta}}[Compilation failure]{{/}}\n", suite.PackageName, suite.Path) + case TestSuiteStateFailedDueToTimeout: + out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{orange}}[%s]{{/}}\n", suite.PackageName, suite.Path, TIMEOUT_ELAPSED_FAILURE_REASON) + } + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go new file mode 100644 index 000000000000..9da1bab3db72 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.go @@ -0,0 +1,54 @@ +package internal + +import ( + "fmt" + "os/exec" + "regexp" + "strings" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/types" +) + +var versiorRe = regexp.MustCompile(`v(\d+\.\d+\.\d+)`) + +func VerifyCLIAndFrameworkVersion(suites TestSuites) { + cliVersion := types.VERSION + mismatches := map[string][]string{} + + for _, suite := range suites { + cmd := exec.Command("go", "list", "-m", "github.com/onsi/ginkgo/v2") + cmd.Dir = suite.Path + output, err := cmd.CombinedOutput() + if err != nil { + continue + } + components := strings.Split(string(output), " ") + if len(components) != 2 { + continue + } + matches := versiorRe.FindStringSubmatch(components[1]) + if matches == nil || len(matches) != 2 { + continue + } + libraryVersion := matches[1] + if cliVersion != libraryVersion { + mismatches[libraryVersion] = append(mismatches[libraryVersion], suite.PackageName) + } + } + + if len(mismatches) == 0 { + return + } + + fmt.Println(formatter.F("{{red}}{{bold}}Ginkgo detected a version mismatch between the Ginkgo CLI and the version of Ginkgo imported by your packages:{{/}}")) + + fmt.Println(formatter.Fi(1, "Ginkgo CLI Version:")) + fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}}", cliVersion)) + fmt.Println(formatter.Fi(1, "Mismatched package versions found:")) + for version, packages := range mismatches { + fmt.Println(formatter.Fi(2, "{{bold}}%s{{/}} used by %s", version, strings.Join(packages, ", "))) + } + fmt.Println("") + fmt.Println(formatter.Fiw(1, formatter.COLS, "{{gray}}Ginkgo will continue to attempt to run but you may see errors (including flag parsing errors) and should either update your go.mod or your version of the Ginkgo CLI to match.\n\nTo install the matching version of the CLI run\n {{bold}}go install github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file. Alternatively you can use\n {{bold}}go run github.com/onsi/ginkgo/v2/ginkgo{{/}}{{gray}}\nfrom a path that contains a go.mod file to invoke the matching version of the Ginkgo CLI.\n\nIf you are attempting to test multiple packages that each have a different version of the Ginkgo library with a single Ginkgo CLI that is currently unsupported.\n{{/}}")) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.go new file mode 100644 index 000000000000..6c61f09d1b5b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.go @@ -0,0 +1,123 @@ +package labels + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "sort" + "strconv" + "strings" + + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/types" + "golang.org/x/tools/go/ast/inspector" +) + +func BuildLabelsCommand() command.Command { + var cliConfig = types.NewDefaultCLIConfig() + + flags, err := types.BuildLabelsCommandFlagSet(&cliConfig) + if err != nil { + panic(err) + } + + return command.Command{ + Name: "labels", + Usage: "ginkgo labels ", + Flags: flags, + ShortDoc: "List labels detected in the passed-in packages (or the package in the current directory if left blank).", + DocLink: "spec-labels", + Command: func(args []string, _ []string) { + ListLabels(args, cliConfig) + }, + } +} + +func ListLabels(args []string, cliConfig types.CLIConfig) { + suites := internal.FindSuites(args, cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter) + if len(suites) == 0 { + command.AbortWith("Found no test suites") + } + for _, suite := range suites { + labels := fetchLabelsFromPackage(suite.Path) + if len(labels) == 0 { + fmt.Printf("%s: No labels found\n", suite.PackageName) + } else { + fmt.Printf("%s: [%s]\n", suite.PackageName, strings.Join(labels, ", ")) + } + } +} + +func fetchLabelsFromPackage(packagePath string) []string { + fset := token.NewFileSet() + parsedPackages, err := parser.ParseDir(fset, packagePath, nil, 0) + command.AbortIfError("Failed to parse package source:", err) + + files := []*ast.File{} + hasTestPackage := false + for key, pkg := range parsedPackages { + if strings.HasSuffix(key, "_test") { + hasTestPackage = true + for _, file := range pkg.Files { + files = append(files, file) + } + } + } + if !hasTestPackage { + for _, pkg := range parsedPackages { + for _, file := range pkg.Files { + files = append(files, file) + } + } + } + + seen := map[string]bool{} + labels := []string{} + ispr := inspector.New(files) + ispr.Preorder([]ast.Node{&ast.CallExpr{}}, func(n ast.Node) { + potentialLabels := fetchLabels(n.(*ast.CallExpr)) + for _, label := range potentialLabels { + if !seen[label] { + seen[label] = true + labels = append(labels, strconv.Quote(label)) + } + } + }) + + sort.Strings(labels) + return labels +} + +func fetchLabels(callExpr *ast.CallExpr) []string { + out := []string{} + switch expr := callExpr.Fun.(type) { + case *ast.Ident: + if expr.Name != "Label" { + return out + } + case *ast.SelectorExpr: + if expr.Sel.Name != "Label" { + return out + } + default: + return out + } + for _, arg := range callExpr.Args { + switch expr := arg.(type) { + case *ast.BasicLit: + if expr.Kind == token.STRING { + unquoted, err := strconv.Unquote(expr.Value) + if err != nil { + unquoted = expr.Value + } + validated, err := types.ValidateAndCleanupLabel(unquoted, types.CodeLocation{}) + if err == nil { + out = append(out, validated) + } + } + } + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/main.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/main.go new file mode 100644 index 000000000000..e9abb27d8bf8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "os" + + "github.com/onsi/ginkgo/v2/ginkgo/build" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/generators" + "github.com/onsi/ginkgo/v2/ginkgo/labels" + "github.com/onsi/ginkgo/v2/ginkgo/outline" + "github.com/onsi/ginkgo/v2/ginkgo/run" + "github.com/onsi/ginkgo/v2/ginkgo/unfocus" + "github.com/onsi/ginkgo/v2/ginkgo/watch" + "github.com/onsi/ginkgo/v2/types" +) + +var program command.Program + +func GenerateCommands() []command.Command { + return []command.Command{ + watch.BuildWatchCommand(), + build.BuildBuildCommand(), + generators.BuildBootstrapCommand(), + generators.BuildGenerateCommand(), + labels.BuildLabelsCommand(), + outline.BuildOutlineCommand(), + unfocus.BuildUnfocusCommand(), + BuildVersionCommand(), + } +} + +func main() { + program = command.Program{ + Name: "ginkgo", + Heading: fmt.Sprintf("Ginkgo Version %s", types.VERSION), + Commands: GenerateCommands(), + DefaultCommand: run.BuildRunCommand(), + DeprecatedCommands: []command.DeprecatedCommand{ + {Name: "convert", Deprecation: types.Deprecations.Convert()}, + {Name: "blur", Deprecation: types.Deprecations.Blur()}, + {Name: "nodot", Deprecation: types.Deprecations.Nodot()}, + }, + } + + program.RunAndExit(os.Args) +} + +func BuildVersionCommand() command.Command { + return command.Command{ + Name: "version", + Usage: "ginkgo version", + ShortDoc: "Print Ginkgo's version", + Command: func(_ []string, _ []string) { + fmt.Printf("Ginkgo Version %s\n", types.VERSION) + }, + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go new file mode 100644 index 000000000000..0b9b19fe740a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.go @@ -0,0 +1,302 @@ +package outline + +import ( + "github.com/onsi/ginkgo/v2/types" + "go/ast" + "go/token" + "strconv" +) + +const ( + // undefinedTextAlt is used if the spec/container text cannot be derived + undefinedTextAlt = "undefined" +) + +// ginkgoMetadata holds useful bits of information for every entry in the outline +type ginkgoMetadata struct { + // Name is the spec or container function name, e.g. `Describe` or `It` + Name string `json:"name"` + + // Text is the `text` argument passed to specs, and some containers + Text string `json:"text"` + + // Start is the position of first character of the spec or container block + Start int `json:"start"` + + // End is the position of first character immediately after the spec or container block + End int `json:"end"` + + Spec bool `json:"spec"` + Focused bool `json:"focused"` + Pending bool `json:"pending"` + Labels []string `json:"labels"` +} + +// ginkgoNode is used to construct the outline as a tree +type ginkgoNode struct { + ginkgoMetadata + Nodes []*ginkgoNode `json:"nodes"` +} + +type walkFunc func(n *ginkgoNode) + +func (n *ginkgoNode) PreOrder(f walkFunc) { + f(n) + for _, m := range n.Nodes { + m.PreOrder(f) + } +} + +func (n *ginkgoNode) PostOrder(f walkFunc) { + for _, m := range n.Nodes { + m.PostOrder(f) + } + f(n) +} + +func (n *ginkgoNode) Walk(pre, post walkFunc) { + pre(n) + for _, m := range n.Nodes { + m.Walk(pre, post) + } + post(n) +} + +// PropagateInheritedProperties propagates the Pending and Focused properties +// through the subtree rooted at n. +func (n *ginkgoNode) PropagateInheritedProperties() { + n.PreOrder(func(thisNode *ginkgoNode) { + for _, descendantNode := range thisNode.Nodes { + if thisNode.Pending { + descendantNode.Pending = true + descendantNode.Focused = false + } + if thisNode.Focused && !descendantNode.Pending { + descendantNode.Focused = true + } + } + }) +} + +// BackpropagateUnfocus propagates the Focused property through the subtree +// rooted at n. It applies the rule described in the Ginkgo docs: +// > Nested programmatically focused specs follow a simple rule: if a +// > leaf-node is marked focused, any of its ancestor nodes that are marked +// > focus will be unfocused. +func (n *ginkgoNode) BackpropagateUnfocus() { + focusedSpecInSubtreeStack := []bool{} + n.PostOrder(func(thisNode *ginkgoNode) { + if thisNode.Spec { + focusedSpecInSubtreeStack = append(focusedSpecInSubtreeStack, thisNode.Focused) + return + } + focusedSpecInSubtree := false + for range thisNode.Nodes { + focusedSpecInSubtree = focusedSpecInSubtree || focusedSpecInSubtreeStack[len(focusedSpecInSubtreeStack)-1] + focusedSpecInSubtreeStack = focusedSpecInSubtreeStack[0 : len(focusedSpecInSubtreeStack)-1] + } + focusedSpecInSubtreeStack = append(focusedSpecInSubtreeStack, focusedSpecInSubtree) + if focusedSpecInSubtree { + thisNode.Focused = false + } + }) + +} + +func packageAndIdentNamesFromCallExpr(ce *ast.CallExpr) (string, string, bool) { + switch ex := ce.Fun.(type) { + case *ast.Ident: + return "", ex.Name, true + case *ast.SelectorExpr: + pkgID, ok := ex.X.(*ast.Ident) + if !ok { + return "", "", false + } + // A package identifier is top-level, so Obj must be nil + if pkgID.Obj != nil { + return "", "", false + } + if ex.Sel == nil { + return "", "", false + } + return pkgID.Name, ex.Sel.Name, true + default: + return "", "", false + } +} + +// absoluteOffsetsForNode derives the absolute character offsets of the node start and +// end positions. +func absoluteOffsetsForNode(fset *token.FileSet, n ast.Node) (start, end int) { + return fset.PositionFor(n.Pos(), false).Offset, fset.PositionFor(n.End(), false).Offset +} + +// ginkgoNodeFromCallExpr derives an outline entry from a go AST subtree +// corresponding to a Ginkgo container or spec. +func ginkgoNodeFromCallExpr(fset *token.FileSet, ce *ast.CallExpr, ginkgoPackageName *string) (*ginkgoNode, bool) { + packageName, identName, ok := packageAndIdentNamesFromCallExpr(ce) + if !ok { + return nil, false + } + + n := ginkgoNode{} + n.Name = identName + n.Start, n.End = absoluteOffsetsForNode(fset, ce) + n.Nodes = make([]*ginkgoNode, 0) + switch identName { + case "It", "Specify", "Entry": + n.Spec = true + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + n.Pending = pendingFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "FIt", "FSpecify", "FEntry": + n.Spec = true + n.Focused = true + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "PIt", "PSpecify", "XIt", "XSpecify", "PEntry", "XEntry": + n.Spec = true + n.Pending = true + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "Context", "Describe", "When", "DescribeTable": + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + n.Pending = pendingFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "FContext", "FDescribe", "FWhen", "FDescribeTable": + n.Focused = true + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "PContext", "PDescribe", "PWhen", "XContext", "XDescribe", "XWhen", "PDescribeTable", "XDescribeTable": + n.Pending = true + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + n.Labels = labelFromCallExpr(ce) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "By": + n.Text = textOrAltFromCallExpr(ce, undefinedTextAlt) + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "AfterEach", "BeforeEach": + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "JustAfterEach", "JustBeforeEach": + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "AfterSuite", "BeforeSuite": + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + case "SynchronizedAfterSuite", "SynchronizedBeforeSuite": + return &n, ginkgoPackageName != nil && *ginkgoPackageName == packageName + default: + return nil, false + } +} + +// textOrAltFromCallExpr tries to derive the "text" of a Ginkgo spec or +// container. If it cannot derive it, it returns the alt text. +func textOrAltFromCallExpr(ce *ast.CallExpr, alt string) string { + text, defined := textFromCallExpr(ce) + if !defined { + return alt + } + return text +} + +// textFromCallExpr tries to derive the "text" of a Ginkgo spec or container. If +// it cannot derive it, it returns false. +func textFromCallExpr(ce *ast.CallExpr) (string, bool) { + if len(ce.Args) < 1 { + return "", false + } + text, ok := ce.Args[0].(*ast.BasicLit) + if !ok { + return "", false + } + switch text.Kind { + case token.CHAR, token.STRING: + // For token.CHAR and token.STRING, Value is quoted + unquoted, err := strconv.Unquote(text.Value) + if err != nil { + // If unquoting fails, just use the raw Value + return text.Value, true + } + return unquoted, true + default: + return text.Value, true + } +} + +func labelFromCallExpr(ce *ast.CallExpr) []string { + + labels := []string{} + if len(ce.Args) < 2 { + return labels + } + + for _, arg := range ce.Args[1:] { + switch expr := arg.(type) { + case *ast.CallExpr: + id, ok := expr.Fun.(*ast.Ident) + if !ok { + // to skip over cases where the expr.Fun. is actually *ast.SelectorExpr + continue + } + if id.Name == "Label" { + ls := extractLabels(expr) + for _, label := range ls { + labels = append(labels, label) + } + } + } + } + return labels +} + +func extractLabels(expr *ast.CallExpr) []string { + out := []string{} + for _, arg := range expr.Args { + switch expr := arg.(type) { + case *ast.BasicLit: + if expr.Kind == token.STRING { + unquoted, err := strconv.Unquote(expr.Value) + if err != nil { + unquoted = expr.Value + } + validated, err := types.ValidateAndCleanupLabel(unquoted, types.CodeLocation{}) + if err == nil { + out = append(out, validated) + } + } + } + } + + return out +} + +func pendingFromCallExpr(ce *ast.CallExpr) bool { + + pending := false + if len(ce.Args) < 2 { + return pending + } + + for _, arg := range ce.Args[1:] { + switch expr := arg.(type) { + case *ast.CallExpr: + id, ok := expr.Fun.(*ast.Ident) + if !ok { + // to skip over cases where the expr.Fun. is actually *ast.SelectorExpr + continue + } + if id.Name == "Pending" { + pending = true + } + case *ast.Ident: + if expr.Name == "Pending" { + pending = true + } + } + } + return pending +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go new file mode 100644 index 000000000000..67ec5ab75798 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.go @@ -0,0 +1,65 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Most of the required functions were available in the +// "golang.org/x/tools/go/ast/astutil" package, but not exported. +// They were copied from https://github.com/golang/tools/blob/2b0845dc783e36ae26d683f4915a5840ef01ab0f/go/ast/astutil/imports.go + +package outline + +import ( + "go/ast" + "strconv" + "strings" +) + +// packageNameForImport returns the package name for the package. If the package +// is not imported, it returns nil. "Package name" refers to `pkgname` in the +// call expression `pkgname.ExportedIdentifier`. Examples: +// (import path not found) -> nil +// "import example.com/pkg/foo" -> "foo" +// "import fooalias example.com/pkg/foo" -> "fooalias" +// "import . example.com/pkg/foo" -> "" +func packageNameForImport(f *ast.File, path string) *string { + spec := importSpec(f, path) + if spec == nil { + return nil + } + name := spec.Name.String() + if name == "" { + // If the package name is not explicitly specified, + // make an educated guess. This is not guaranteed to be correct. + lastSlash := strings.LastIndex(path, "/") + if lastSlash == -1 { + name = path + } else { + name = path[lastSlash+1:] + } + } + if name == "." { + name = "" + } + return &name +} + +// importSpec returns the import spec if f imports path, +// or nil otherwise. +func importSpec(f *ast.File, path string) *ast.ImportSpec { + for _, s := range f.Imports { + if strings.HasPrefix(importPath(s), path) { + return s + } + } + return nil +} + +// importPath returns the unquoted import path of s, +// or "" if the path is not properly quoted. +func importPath(s *ast.ImportSpec) string { + t, err := strconv.Unquote(s.Path.Value) + if err != nil { + return "" + } + return t +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go new file mode 100644 index 000000000000..c2327cda8cf4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.go @@ -0,0 +1,110 @@ +package outline + +import ( + "encoding/json" + "fmt" + "go/ast" + "go/token" + "strings" + + "golang.org/x/tools/go/ast/inspector" +) + +const ( + // ginkgoImportPath is the well-known ginkgo import path + ginkgoImportPath = "github.com/onsi/ginkgo/v2" +) + +// FromASTFile returns an outline for a Ginkgo test source file +func FromASTFile(fset *token.FileSet, src *ast.File) (*outline, error) { + ginkgoPackageName := packageNameForImport(src, ginkgoImportPath) + if ginkgoPackageName == nil { + return nil, fmt.Errorf("file does not import %q", ginkgoImportPath) + } + + root := ginkgoNode{} + stack := []*ginkgoNode{&root} + ispr := inspector.New([]*ast.File{src}) + ispr.Nodes([]ast.Node{(*ast.CallExpr)(nil)}, func(node ast.Node, push bool) bool { + if push { + // Pre-order traversal + ce, ok := node.(*ast.CallExpr) + if !ok { + // Because `Nodes` calls this function only when the node is an + // ast.CallExpr, this should never happen + panic(fmt.Errorf("node starting at %d, ending at %d is not an *ast.CallExpr", node.Pos(), node.End())) + } + gn, ok := ginkgoNodeFromCallExpr(fset, ce, ginkgoPackageName) + if !ok { + // Node is not a Ginkgo spec or container, continue + return true + } + parent := stack[len(stack)-1] + parent.Nodes = append(parent.Nodes, gn) + stack = append(stack, gn) + return true + } + // Post-order traversal + start, end := absoluteOffsetsForNode(fset, node) + lastVisitedGinkgoNode := stack[len(stack)-1] + if start != lastVisitedGinkgoNode.Start || end != lastVisitedGinkgoNode.End { + // Node is not a Ginkgo spec or container, so it was not pushed onto the stack, continue + return true + } + stack = stack[0 : len(stack)-1] + return true + }) + if len(root.Nodes) == 0 { + return &outline{[]*ginkgoNode{}}, nil + } + + // Derive the final focused property for all nodes. This must be done + // _before_ propagating the inherited focused property. + root.BackpropagateUnfocus() + // Now, propagate inherited properties, including focused and pending. + root.PropagateInheritedProperties() + + return &outline{root.Nodes}, nil +} + +type outline struct { + Nodes []*ginkgoNode `json:"nodes"` +} + +func (o *outline) MarshalJSON() ([]byte, error) { + return json.Marshal(o.Nodes) +} + +// String returns a CSV-formatted outline. Spec or container are output in +// depth-first order. +func (o *outline) String() string { + return o.StringIndent(0) +} + +// StringIndent returns a CSV-formated outline, but every line is indented by +// one 'width' of spaces for every level of nesting. +func (o *outline) StringIndent(width int) string { + var b strings.Builder + b.WriteString("Name,Text,Start,End,Spec,Focused,Pending,Labels\n") + + currentIndent := 0 + pre := func(n *ginkgoNode) { + b.WriteString(fmt.Sprintf("%*s", currentIndent, "")) + var labels string + if len(n.Labels) == 1 { + labels = n.Labels[0] + } else { + labels = strings.Join(n.Labels, ", ") + } + //enclosing labels in a double quoted comma separate listed so that when inmported into a CSV app the Labels column has comma separate strings + b.WriteString(fmt.Sprintf("%s,%s,%d,%d,%t,%t,%t,\"%s\"\n", n.Name, n.Text, n.Start, n.End, n.Spec, n.Focused, n.Pending, labels)) + currentIndent += width + } + post := func(n *ginkgoNode) { + currentIndent -= width + } + for _, n := range o.Nodes { + n.Walk(pre, post) + } + return b.String() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.go new file mode 100644 index 000000000000..36698d46a4b4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.go @@ -0,0 +1,98 @@ +package outline + +import ( + "encoding/json" + "fmt" + "go/parser" + "go/token" + "os" + + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/types" +) + +const ( + // indentWidth is the width used by the 'indent' output + indentWidth = 4 + // stdinAlias is a portable alias for stdin. This convention is used in + // other CLIs, e.g., kubectl. + stdinAlias = "-" + usageCommand = "ginkgo outline " +) + +type outlineConfig struct { + Format string +} + +func BuildOutlineCommand() command.Command { + conf := outlineConfig{ + Format: "csv", + } + flags, err := types.NewGinkgoFlagSet( + types.GinkgoFlags{ + {Name: "format", KeyPath: "Format", + Usage: "Format of outline", + UsageArgument: "one of 'csv', 'indent', or 'json'", + UsageDefaultValue: conf.Format, + }, + }, + &conf, + types.GinkgoFlagSections{}, + ) + if err != nil { + panic(err) + } + + return command.Command{ + Name: "outline", + Usage: "ginkgo outline ", + ShortDoc: "Create an outline of Ginkgo symbols for a file", + Documentation: "To read from stdin, use: `ginkgo outline -`", + DocLink: "creating-an-outline-of-specs", + Flags: flags, + Command: func(args []string, _ []string) { + outlineFile(args, conf.Format) + }, + } +} + +func outlineFile(args []string, format string) { + if len(args) != 1 { + command.AbortWithUsage("outline expects exactly one argument") + } + + filename := args[0] + var src *os.File + if filename == stdinAlias { + src = os.Stdin + } else { + var err error + src, err = os.Open(filename) + command.AbortIfError("Failed to open file:", err) + } + + fset := token.NewFileSet() + + parsedSrc, err := parser.ParseFile(fset, filename, src, 0) + command.AbortIfError("Failed to parse source:", err) + + o, err := FromASTFile(fset, parsedSrc) + command.AbortIfError("Failed to create outline:", err) + + var oerr error + switch format { + case "csv": + _, oerr = fmt.Print(o) + case "indent": + _, oerr = fmt.Print(o.StringIndent(indentWidth)) + case "json": + b, err := json.Marshal(o) + if err != nil { + println(fmt.Sprintf("error marshalling to json: %s", err)) + } + _, oerr = fmt.Println(string(b)) + default: + command.AbortWith("Format %s not accepted", format) + } + command.AbortIfError("Failed to write outline:", oerr) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go new file mode 100644 index 000000000000..aaed4d570e97 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.go @@ -0,0 +1,232 @@ +package run + +import ( + "fmt" + "os" + "strings" + "time" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/internal/interrupt_handler" + "github.com/onsi/ginkgo/v2/types" +) + +func BuildRunCommand() command.Command { + var suiteConfig = types.NewDefaultSuiteConfig() + var reporterConfig = types.NewDefaultReporterConfig() + var cliConfig = types.NewDefaultCLIConfig() + var goFlagsConfig = types.NewDefaultGoFlagsConfig() + + flags, err := types.BuildRunCommandFlagSet(&suiteConfig, &reporterConfig, &cliConfig, &goFlagsConfig) + if err != nil { + panic(err) + } + + interruptHandler := interrupt_handler.NewInterruptHandler(nil) + interrupt_handler.SwallowSigQuit() + + return command.Command{ + Name: "run", + Flags: flags, + Usage: "ginkgo run -- ", + ShortDoc: "Run the tests in the passed in (or the package in the current directory if left blank)", + Documentation: "Any arguments after -- will be passed to the test.", + DocLink: "running-tests", + Command: func(args []string, additionalArgs []string) { + var errors []error + cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig) + command.AbortIfErrors("Ginkgo detected configuration issues:", errors) + + runner := &SpecRunner{ + cliConfig: cliConfig, + goFlagsConfig: goFlagsConfig, + suiteConfig: suiteConfig, + reporterConfig: reporterConfig, + flags: flags, + + interruptHandler: interruptHandler, + } + + runner.RunSpecs(args, additionalArgs) + }, + } +} + +type SpecRunner struct { + suiteConfig types.SuiteConfig + reporterConfig types.ReporterConfig + cliConfig types.CLIConfig + goFlagsConfig types.GoFlagsConfig + flags types.GinkgoFlagSet + + interruptHandler *interrupt_handler.InterruptHandler +} + +func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) { + suites := internal.FindSuites(args, r.cliConfig, true) + skippedSuites := suites.WithState(internal.TestSuiteStateSkippedByFilter) + suites = suites.WithoutState(internal.TestSuiteStateSkippedByFilter) + + internal.VerifyCLIAndFrameworkVersion(suites) + + if len(skippedSuites) > 0 { + fmt.Println("Will skip:") + for _, skippedSuite := range skippedSuites { + fmt.Println(" " + skippedSuite.Path) + } + } + + if len(skippedSuites) > 0 && len(suites) == 0 { + command.AbortGracefullyWith("All tests skipped! Exiting...") + } + + if len(suites) == 0 { + command.AbortWith("Found no test suites") + } + + if len(suites) > 1 && !r.flags.WasSet("succinct") && r.reporterConfig.Verbosity().LT(types.VerbosityLevelVerbose) { + r.reporterConfig.Succinct = true + } + + t := time.Now() + var endTime time.Time + if r.suiteConfig.Timeout > 0 { + endTime = t.Add(r.suiteConfig.Timeout) + } + + iteration := 0 +OUTER_LOOP: + for { + if !r.flags.WasSet("seed") { + r.suiteConfig.RandomSeed = time.Now().Unix() + } + if r.cliConfig.RandomizeSuites && len(suites) > 1 { + suites = suites.ShuffledCopy(r.suiteConfig.RandomSeed) + } + + opc := internal.NewOrderedParallelCompiler(r.cliConfig.ComputedNumCompilers()) + opc.StartCompiling(suites, r.goFlagsConfig) + + SUITE_LOOP: + for { + suiteIdx, suite := opc.Next() + if suiteIdx >= len(suites) { + break SUITE_LOOP + } + suites[suiteIdx] = suite + + if r.interruptHandler.Status().Interrupted() { + opc.StopAndDrain() + break OUTER_LOOP + } + + if suites[suiteIdx].State.Is(internal.TestSuiteStateSkippedDueToEmptyCompilation) { + fmt.Printf("Skipping %s (no test files)\n", suite.Path) + continue SUITE_LOOP + } + + if suites[suiteIdx].State.Is(internal.TestSuiteStateFailedToCompile) { + fmt.Println(suites[suiteIdx].CompilationError.Error()) + if !r.cliConfig.KeepGoing { + opc.StopAndDrain() + } + continue SUITE_LOOP + } + + if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 && !r.cliConfig.KeepGoing { + suites[suiteIdx].State = internal.TestSuiteStateSkippedDueToPriorFailures + opc.StopAndDrain() + continue SUITE_LOOP + } + + if !endTime.IsZero() { + r.suiteConfig.Timeout = endTime.Sub(time.Now()) + if r.suiteConfig.Timeout <= 0 { + suites[suiteIdx].State = internal.TestSuiteStateFailedDueToTimeout + opc.StopAndDrain() + continue SUITE_LOOP + } + } + + suites[suiteIdx] = internal.RunCompiledSuite(suites[suiteIdx], r.suiteConfig, r.reporterConfig, r.cliConfig, r.goFlagsConfig, additionalArgs) + } + + if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 { + if iteration > 0 { + fmt.Printf("\nTests failed on attempt #%d\n\n", iteration+1) + } + break OUTER_LOOP + } + + if r.cliConfig.UntilItFails { + fmt.Printf("\nAll tests passed...\nWill keep running them until they fail.\nThis was attempt #%d\n%s\n", iteration+1, orcMessage(iteration+1)) + } else if r.cliConfig.Repeat > 0 && iteration < r.cliConfig.Repeat { + fmt.Printf("\nAll tests passed...\nThis was attempt %d of %d.\n", iteration+1, r.cliConfig.Repeat+1) + } else { + break OUTER_LOOP + } + iteration += 1 + } + + internal.Cleanup(r.goFlagsConfig, suites...) + + messages, err := internal.FinalizeProfilesAndReportsForSuites(suites, r.cliConfig, r.suiteConfig, r.reporterConfig, r.goFlagsConfig) + command.AbortIfError("could not finalize profiles:", err) + for _, message := range messages { + fmt.Println(message) + } + + fmt.Printf("\nGinkgo ran %d %s in %s\n", len(suites), internal.PluralizedWord("suite", "suites", len(suites)), time.Since(t)) + + if suites.CountWithState(internal.TestSuiteStateFailureStates...) == 0 { + if suites.AnyHaveProgrammaticFocus() && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" { + fmt.Printf("Test Suite Passed\n") + fmt.Printf("Detected Programmatic Focus - setting exit status to %d\n", types.GINKGO_FOCUS_EXIT_CODE) + command.Abort(command.AbortDetails{ExitCode: types.GINKGO_FOCUS_EXIT_CODE}) + } else { + fmt.Printf("Test Suite Passed\n") + command.Abort(command.AbortDetails{}) + } + } else { + fmt.Fprintln(formatter.ColorableStdOut, "") + if len(suites) > 1 && suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 { + fmt.Fprintln(formatter.ColorableStdOut, + internal.FailedSuitesReport(suites, formatter.NewWithNoColorBool(r.reporterConfig.NoColor))) + } + fmt.Printf("Test Suite Failed\n") + command.Abort(command.AbortDetails{ExitCode: 1}) + } +} + +func orcMessage(iteration int) string { + if iteration < 10 { + return "" + } else if iteration < 30 { + return []string{ + "If at first you succeed...", + "...try, try again.", + "Looking good!", + "Still good...", + "I think your tests are fine....", + "Yep, still passing", + "Oh boy, here I go testin' again!", + "Even the gophers are getting bored", + "Did you try -race?", + "Maybe you should stop now?", + "I'm getting tired...", + "What if I just made you a sandwich?", + "Hit ^C, hit ^C, please hit ^C", + "Make it stop. Please!", + "Come on! Enough is enough!", + "Dave, this conversation can serve no purpose anymore. Goodbye.", + "Just what do you think you're doing, Dave? ", + "I, Sisyphus", + "Insanity: doing the same thing over and over again and expecting different results. -Einstein", + "I guess Einstein never tried to churn butter", + }[iteration-10] + "\n" + } else { + return "No, seriously... you can probably stop now.\n" + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.go new file mode 100644 index 000000000000..7dd2943948a6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.go @@ -0,0 +1,186 @@ +package unfocus + +import ( + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/token" + "io" + "os" + "path/filepath" + "strings" + "sync" + + "github.com/onsi/ginkgo/v2/ginkgo/command" +) + +func BuildUnfocusCommand() command.Command { + return command.Command{ + Name: "unfocus", + Usage: "ginkgo unfocus", + ShortDoc: "Recursively unfocus any focused tests under the current directory", + DocLink: "filtering-specs", + Command: func(_ []string, _ []string) { + unfocusSpecs() + }, + } +} + +func unfocusSpecs() { + fmt.Println("Scanning for focus...") + + goFiles := make(chan string) + go func() { + unfocusDir(goFiles, ".") + close(goFiles) + }() + + const workers = 10 + wg := sync.WaitGroup{} + wg.Add(workers) + + for i := 0; i < workers; i++ { + go func() { + for path := range goFiles { + unfocusFile(path) + } + wg.Done() + }() + } + + wg.Wait() +} + +func unfocusDir(goFiles chan string, path string) { + files, err := os.ReadDir(path) + if err != nil { + fmt.Println(err.Error()) + return + } + + for _, f := range files { + switch { + case f.IsDir() && shouldProcessDir(f.Name()): + unfocusDir(goFiles, filepath.Join(path, f.Name())) + case !f.IsDir() && shouldProcessFile(f.Name()): + goFiles <- filepath.Join(path, f.Name()) + } + } +} + +func shouldProcessDir(basename string) bool { + return basename != "vendor" && !strings.HasPrefix(basename, ".") +} + +func shouldProcessFile(basename string) bool { + return strings.HasSuffix(basename, ".go") +} + +func unfocusFile(path string) { + data, err := os.ReadFile(path) + if err != nil { + fmt.Printf("error reading file '%s': %s\n", path, err.Error()) + return + } + + ast, err := parser.ParseFile(token.NewFileSet(), path, bytes.NewReader(data), parser.ParseComments) + if err != nil { + fmt.Printf("error parsing file '%s': %s\n", path, err.Error()) + return + } + + eliminations := scanForFocus(ast) + if len(eliminations) == 0 { + return + } + + fmt.Printf("...updating %s\n", path) + backup, err := writeBackup(path, data) + if err != nil { + fmt.Printf("error creating backup file: %s\n", err.Error()) + return + } + + if err := updateFile(path, data, eliminations); err != nil { + fmt.Printf("error writing file '%s': %s\n", path, err.Error()) + return + } + + os.Remove(backup) +} + +func writeBackup(path string, data []byte) (string, error) { + t, err := os.CreateTemp(filepath.Dir(path), filepath.Base(path)) + + if err != nil { + return "", fmt.Errorf("error creating temporary file: %w", err) + } + defer t.Close() + + if _, err := io.Copy(t, bytes.NewReader(data)); err != nil { + return "", fmt.Errorf("error writing to temporary file: %w", err) + } + + return t.Name(), nil +} + +func updateFile(path string, data []byte, eliminations [][]int64) error { + to, err := os.Create(path) + if err != nil { + return fmt.Errorf("error opening file for writing '%s': %w\n", path, err) + } + defer to.Close() + + from := bytes.NewReader(data) + var cursor int64 + for _, eliminationRange := range eliminations { + positionToEliminate, lengthToEliminate := eliminationRange[0]-1, eliminationRange[1] + if _, err := io.CopyN(to, from, positionToEliminate-cursor); err != nil { + return fmt.Errorf("error copying data: %w", err) + } + + cursor = positionToEliminate + lengthToEliminate + + if _, err := from.Seek(lengthToEliminate, io.SeekCurrent); err != nil { + return fmt.Errorf("error seeking to position in buffer: %w", err) + } + } + + if _, err := io.Copy(to, from); err != nil { + return fmt.Errorf("error copying end data: %w", err) + } + + return nil +} + +func scanForFocus(file *ast.File) (eliminations [][]int64) { + ast.Inspect(file, func(n ast.Node) bool { + if c, ok := n.(*ast.CallExpr); ok { + if i, ok := c.Fun.(*ast.Ident); ok { + if isFocus(i.Name) { + eliminations = append(eliminations, []int64{int64(i.Pos()), 1}) + } + } + } + + if i, ok := n.(*ast.Ident); ok { + if i.Name == "Focus" { + eliminations = append(eliminations, []int64{int64(i.Pos()), 6}) + } + } + + return true + }) + + return eliminations +} + +func isFocus(name string) bool { + switch name { + case "FDescribe", "FContext", "FIt", "FDescribeTable", "FEntry", "FSpecify", "FWhen": + return true + default: + return false + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.go new file mode 100644 index 000000000000..6c485c5b1af8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.go @@ -0,0 +1,22 @@ +package watch + +import "sort" + +type Delta struct { + ModifiedPackages []string + + NewSuites []*Suite + RemovedSuites []*Suite + modifiedSuites []*Suite +} + +type DescendingByDelta []*Suite + +func (a DescendingByDelta) Len() int { return len(a) } +func (a DescendingByDelta) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a DescendingByDelta) Less(i, j int) bool { return a[i].Delta() > a[j].Delta() } + +func (d Delta) ModifiedSuites() []*Suite { + sort.Sort(DescendingByDelta(d.modifiedSuites)) + return d.modifiedSuites +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.go new file mode 100644 index 000000000000..26418ac62ed7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.go @@ -0,0 +1,75 @@ +package watch + +import ( + "fmt" + + "regexp" + + "github.com/onsi/ginkgo/v2/ginkgo/internal" +) + +type SuiteErrors map[internal.TestSuite]error + +type DeltaTracker struct { + maxDepth int + watchRegExp *regexp.Regexp + suites map[string]*Suite + packageHashes *PackageHashes +} + +func NewDeltaTracker(maxDepth int, watchRegExp *regexp.Regexp) *DeltaTracker { + return &DeltaTracker{ + maxDepth: maxDepth, + watchRegExp: watchRegExp, + packageHashes: NewPackageHashes(watchRegExp), + suites: map[string]*Suite{}, + } +} + +func (d *DeltaTracker) Delta(suites internal.TestSuites) (delta Delta, errors SuiteErrors) { + errors = SuiteErrors{} + delta.ModifiedPackages = d.packageHashes.CheckForChanges() + + providedSuitePaths := map[string]bool{} + for _, suite := range suites { + providedSuitePaths[suite.Path] = true + } + + d.packageHashes.StartTrackingUsage() + + for _, suite := range d.suites { + if providedSuitePaths[suite.Suite.Path] { + if suite.Delta() > 0 { + delta.modifiedSuites = append(delta.modifiedSuites, suite) + } + } else { + delta.RemovedSuites = append(delta.RemovedSuites, suite) + } + } + + d.packageHashes.StopTrackingUsageAndPrune() + + for _, suite := range suites { + _, ok := d.suites[suite.Path] + if !ok { + s, err := NewSuite(suite, d.maxDepth, d.packageHashes) + if err != nil { + errors[suite] = err + continue + } + d.suites[suite.Path] = s + delta.NewSuites = append(delta.NewSuites, s) + } + } + + return delta, errors +} + +func (d *DeltaTracker) WillRun(suite internal.TestSuite) error { + s, ok := d.suites[suite.Path] + if !ok { + return fmt.Errorf("unknown suite %s", suite.Path) + } + + return s.MarkAsRunAndRecomputedDependencies(d.maxDepth) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.go new file mode 100644 index 000000000000..f5ddff30fc76 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.go @@ -0,0 +1,92 @@ +package watch + +import ( + "go/build" + "regexp" +) + +var ginkgoAndGomegaFilter = regexp.MustCompile(`github\.com/onsi/ginkgo|github\.com/onsi/gomega`) +var ginkgoIntegrationTestFilter = regexp.MustCompile(`github\.com/onsi/ginkgo/integration`) //allow us to integration test this thing + +type Dependencies struct { + deps map[string]int +} + +func NewDependencies(path string, maxDepth int) (Dependencies, error) { + d := Dependencies{ + deps: map[string]int{}, + } + + if maxDepth == 0 { + return d, nil + } + + err := d.seedWithDepsForPackageAtPath(path) + if err != nil { + return d, err + } + + for depth := 1; depth < maxDepth; depth++ { + n := len(d.deps) + d.addDepsForDepth(depth) + if n == len(d.deps) { + break + } + } + + return d, nil +} + +func (d Dependencies) Dependencies() map[string]int { + return d.deps +} + +func (d Dependencies) seedWithDepsForPackageAtPath(path string) error { + pkg, err := build.ImportDir(path, 0) + if err != nil { + return err + } + + d.resolveAndAdd(pkg.Imports, 1) + d.resolveAndAdd(pkg.TestImports, 1) + d.resolveAndAdd(pkg.XTestImports, 1) + + delete(d.deps, pkg.Dir) + return nil +} + +func (d Dependencies) addDepsForDepth(depth int) { + for dep, depDepth := range d.deps { + if depDepth == depth { + d.addDepsForDep(dep, depth+1) + } + } +} + +func (d Dependencies) addDepsForDep(dep string, depth int) { + pkg, err := build.ImportDir(dep, 0) + if err != nil { + println(err.Error()) + return + } + d.resolveAndAdd(pkg.Imports, depth) +} + +func (d Dependencies) resolveAndAdd(deps []string, depth int) { + for _, dep := range deps { + pkg, err := build.Import(dep, ".", 0) + if err != nil { + continue + } + if !pkg.Goroot && (!ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) || ginkgoIntegrationTestFilter.Match([]byte(pkg.Dir))) { + d.addDepIfNotPresent(pkg.Dir, depth) + } + } +} + +func (d Dependencies) addDepIfNotPresent(dep string, depth int) { + _, ok := d.deps[dep] + if !ok { + d.deps[dep] = depth + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.go new file mode 100644 index 000000000000..e9f7ec0cb3b0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.go @@ -0,0 +1,108 @@ +package watch + +import ( + "fmt" + "os" + "regexp" + "time" +) + +var goTestRegExp = regexp.MustCompile(`_test\.go$`) + +type PackageHash struct { + CodeModifiedTime time.Time + TestModifiedTime time.Time + Deleted bool + + path string + codeHash string + testHash string + watchRegExp *regexp.Regexp +} + +func NewPackageHash(path string, watchRegExp *regexp.Regexp) *PackageHash { + p := &PackageHash{ + path: path, + watchRegExp: watchRegExp, + } + + p.codeHash, _, p.testHash, _, p.Deleted = p.computeHashes() + + return p +} + +func (p *PackageHash) CheckForChanges() bool { + codeHash, codeModifiedTime, testHash, testModifiedTime, deleted := p.computeHashes() + + if deleted { + if !p.Deleted { + t := time.Now() + p.CodeModifiedTime = t + p.TestModifiedTime = t + } + p.Deleted = true + return true + } + + modified := false + p.Deleted = false + + if p.codeHash != codeHash { + p.CodeModifiedTime = codeModifiedTime + modified = true + } + if p.testHash != testHash { + p.TestModifiedTime = testModifiedTime + modified = true + } + + p.codeHash = codeHash + p.testHash = testHash + return modified +} + +func (p *PackageHash) computeHashes() (codeHash string, codeModifiedTime time.Time, testHash string, testModifiedTime time.Time, deleted bool) { + entries, err := os.ReadDir(p.path) + + if err != nil { + deleted = true + return + } + + for _, entry := range entries { + if entry.IsDir() { + continue + } + + info, err := entry.Info() + if err != nil { + continue + } + + if goTestRegExp.Match([]byte(info.Name())) { + testHash += p.hashForFileInfo(info) + if info.ModTime().After(testModifiedTime) { + testModifiedTime = info.ModTime() + } + continue + } + + if p.watchRegExp.Match([]byte(info.Name())) { + codeHash += p.hashForFileInfo(info) + if info.ModTime().After(codeModifiedTime) { + codeModifiedTime = info.ModTime() + } + } + } + + testHash += codeHash + if codeModifiedTime.After(testModifiedTime) { + testModifiedTime = codeModifiedTime + } + + return +} + +func (p *PackageHash) hashForFileInfo(info os.FileInfo) string { + return fmt.Sprintf("%s_%d_%d", info.Name(), info.Size(), info.ModTime().UnixNano()) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.go new file mode 100644 index 000000000000..b4892bebf26c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.go @@ -0,0 +1,85 @@ +package watch + +import ( + "path/filepath" + "regexp" + "sync" +) + +type PackageHashes struct { + PackageHashes map[string]*PackageHash + usedPaths map[string]bool + watchRegExp *regexp.Regexp + lock *sync.Mutex +} + +func NewPackageHashes(watchRegExp *regexp.Regexp) *PackageHashes { + return &PackageHashes{ + PackageHashes: map[string]*PackageHash{}, + usedPaths: nil, + watchRegExp: watchRegExp, + lock: &sync.Mutex{}, + } +} + +func (p *PackageHashes) CheckForChanges() []string { + p.lock.Lock() + defer p.lock.Unlock() + + modified := []string{} + + for _, packageHash := range p.PackageHashes { + if packageHash.CheckForChanges() { + modified = append(modified, packageHash.path) + } + } + + return modified +} + +func (p *PackageHashes) Add(path string) *PackageHash { + p.lock.Lock() + defer p.lock.Unlock() + + path, _ = filepath.Abs(path) + _, ok := p.PackageHashes[path] + if !ok { + p.PackageHashes[path] = NewPackageHash(path, p.watchRegExp) + } + + if p.usedPaths != nil { + p.usedPaths[path] = true + } + return p.PackageHashes[path] +} + +func (p *PackageHashes) Get(path string) *PackageHash { + p.lock.Lock() + defer p.lock.Unlock() + + path, _ = filepath.Abs(path) + if p.usedPaths != nil { + p.usedPaths[path] = true + } + return p.PackageHashes[path] +} + +func (p *PackageHashes) StartTrackingUsage() { + p.lock.Lock() + defer p.lock.Unlock() + + p.usedPaths = map[string]bool{} +} + +func (p *PackageHashes) StopTrackingUsageAndPrune() { + p.lock.Lock() + defer p.lock.Unlock() + + for path := range p.PackageHashes { + if !p.usedPaths[path] { + delete(p.PackageHashes, path) + } + } + + p.usedPaths = nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.go new file mode 100644 index 000000000000..53272df7e5ae --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.go @@ -0,0 +1,87 @@ +package watch + +import ( + "fmt" + "math" + "time" + + "github.com/onsi/ginkgo/v2/ginkgo/internal" +) + +type Suite struct { + Suite internal.TestSuite + RunTime time.Time + Dependencies Dependencies + + sharedPackageHashes *PackageHashes +} + +func NewSuite(suite internal.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) { + deps, err := NewDependencies(suite.Path, maxDepth) + if err != nil { + return nil, err + } + + sharedPackageHashes.Add(suite.Path) + for dep := range deps.Dependencies() { + sharedPackageHashes.Add(dep) + } + + return &Suite{ + Suite: suite, + Dependencies: deps, + + sharedPackageHashes: sharedPackageHashes, + }, nil +} + +func (s *Suite) Delta() float64 { + delta := s.delta(s.Suite.Path, true, 0) * 1000 + for dep, depth := range s.Dependencies.Dependencies() { + delta += s.delta(dep, false, depth) + } + return delta +} + +func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error { + s.RunTime = time.Now() + + deps, err := NewDependencies(s.Suite.Path, maxDepth) + if err != nil { + return err + } + + s.sharedPackageHashes.Add(s.Suite.Path) + for dep := range deps.Dependencies() { + s.sharedPackageHashes.Add(dep) + } + + s.Dependencies = deps + + return nil +} + +func (s *Suite) Description() string { + numDeps := len(s.Dependencies.Dependencies()) + pluralizer := "ies" + if numDeps == 1 { + pluralizer = "y" + } + return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer) +} + +func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 { + return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1) +} + +func (s *Suite) dt(packagePath string, includeTests bool) time.Duration { + packageHash := s.sharedPackageHashes.Get(packagePath) + var modifiedTime time.Time + if includeTests { + modifiedTime = packageHash.TestModifiedTime + } else { + modifiedTime = packageHash.CodeModifiedTime + } + + return modifiedTime.Sub(s.RunTime) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go new file mode 100644 index 000000000000..bde4193ce718 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.go @@ -0,0 +1,192 @@ +package watch + +import ( + "fmt" + "regexp" + "time" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/ginkgo/command" + "github.com/onsi/ginkgo/v2/ginkgo/internal" + "github.com/onsi/ginkgo/v2/internal/interrupt_handler" + "github.com/onsi/ginkgo/v2/types" +) + +func BuildWatchCommand() command.Command { + var suiteConfig = types.NewDefaultSuiteConfig() + var reporterConfig = types.NewDefaultReporterConfig() + var cliConfig = types.NewDefaultCLIConfig() + var goFlagsConfig = types.NewDefaultGoFlagsConfig() + + flags, err := types.BuildWatchCommandFlagSet(&suiteConfig, &reporterConfig, &cliConfig, &goFlagsConfig) + if err != nil { + panic(err) + } + interruptHandler := interrupt_handler.NewInterruptHandler(nil) + interrupt_handler.SwallowSigQuit() + + return command.Command{ + Name: "watch", + Flags: flags, + Usage: "ginkgo watch -- ", + ShortDoc: "Watch the passed in and runs their tests whenever changes occur.", + Documentation: "Any arguments after -- will be passed to the test.", + DocLink: "watching-for-changes", + Command: func(args []string, additionalArgs []string) { + var errors []error + cliConfig, goFlagsConfig, errors = types.VetAndInitializeCLIAndGoConfig(cliConfig, goFlagsConfig) + command.AbortIfErrors("Ginkgo detected configuration issues:", errors) + + watcher := &SpecWatcher{ + cliConfig: cliConfig, + goFlagsConfig: goFlagsConfig, + suiteConfig: suiteConfig, + reporterConfig: reporterConfig, + flags: flags, + + interruptHandler: interruptHandler, + } + + watcher.WatchSpecs(args, additionalArgs) + }, + } +} + +type SpecWatcher struct { + suiteConfig types.SuiteConfig + reporterConfig types.ReporterConfig + cliConfig types.CLIConfig + goFlagsConfig types.GoFlagsConfig + flags types.GinkgoFlagSet + + interruptHandler *interrupt_handler.InterruptHandler +} + +func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) { + suites := internal.FindSuites(args, w.cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter) + + internal.VerifyCLIAndFrameworkVersion(suites) + + if len(suites) == 0 { + command.AbortWith("Found no test suites") + } + + fmt.Printf("Identified %d test %s. Locating dependencies to a depth of %d (this may take a while)...\n", len(suites), internal.PluralizedWord("suite", "suites", len(suites)), w.cliConfig.Depth) + deltaTracker := NewDeltaTracker(w.cliConfig.Depth, regexp.MustCompile(w.cliConfig.WatchRegExp)) + delta, errors := deltaTracker.Delta(suites) + + fmt.Printf("Watching %d %s:\n", len(delta.NewSuites), internal.PluralizedWord("suite", "suites", len(delta.NewSuites))) + for _, suite := range delta.NewSuites { + fmt.Println(" " + suite.Description()) + } + + for suite, err := range errors { + fmt.Printf("Failed to watch %s: %s\n", suite.PackageName, err) + } + + if len(suites) == 1 { + w.updateSeed() + w.compileAndRun(suites[0], additionalArgs) + } + + ticker := time.NewTicker(time.Second) + + for { + select { + case <-ticker.C: + suites := internal.FindSuites(args, w.cliConfig, false).WithoutState(internal.TestSuiteStateSkippedByFilter) + delta, _ := deltaTracker.Delta(suites) + coloredStream := formatter.ColorableStdOut + + suites = internal.TestSuites{} + + if len(delta.NewSuites) > 0 { + fmt.Fprintln(coloredStream, formatter.F("{{green}}Detected %d new %s:{{/}}", len(delta.NewSuites), internal.PluralizedWord("suite", "suites", len(delta.NewSuites)))) + for _, suite := range delta.NewSuites { + suites = append(suites, suite.Suite) + fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", suite.Description())) + } + } + + modifiedSuites := delta.ModifiedSuites() + if len(modifiedSuites) > 0 { + fmt.Fprintln(coloredStream, formatter.F("{{green}}Detected changes in:{{/}}")) + for _, pkg := range delta.ModifiedPackages { + fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", pkg)) + } + fmt.Fprintln(coloredStream, formatter.F("{{green}}Will run %d %s:{{/}}", len(modifiedSuites), internal.PluralizedWord("suite", "suites", len(modifiedSuites)))) + for _, suite := range modifiedSuites { + suites = append(suites, suite.Suite) + fmt.Fprintln(coloredStream, formatter.Fi(1, "%s", suite.Description())) + } + fmt.Fprintln(coloredStream, "") + } + + if len(suites) == 0 { + break + } + + w.updateSeed() + w.computeSuccinctMode(len(suites)) + for idx := range suites { + if w.interruptHandler.Status().Interrupted() { + return + } + deltaTracker.WillRun(suites[idx]) + suites[idx] = w.compileAndRun(suites[idx], additionalArgs) + } + color := "{{green}}" + if suites.CountWithState(internal.TestSuiteStateFailureStates...) > 0 { + color = "{{red}}" + } + fmt.Fprintln(coloredStream, formatter.F(color+"\nDone. Resuming watch...{{/}}")) + + messages, err := internal.FinalizeProfilesAndReportsForSuites(suites, w.cliConfig, w.suiteConfig, w.reporterConfig, w.goFlagsConfig) + command.AbortIfError("could not finalize profiles:", err) + for _, message := range messages { + fmt.Println(message) + } + case <-w.interruptHandler.Status().Channel: + return + } + } +} + +func (w *SpecWatcher) compileAndRun(suite internal.TestSuite, additionalArgs []string) internal.TestSuite { + suite = internal.CompileSuite(suite, w.goFlagsConfig) + if suite.State.Is(internal.TestSuiteStateFailedToCompile) { + fmt.Println(suite.CompilationError.Error()) + return suite + } + if w.interruptHandler.Status().Interrupted() { + return suite + } + suite = internal.RunCompiledSuite(suite, w.suiteConfig, w.reporterConfig, w.cliConfig, w.goFlagsConfig, additionalArgs) + internal.Cleanup(w.goFlagsConfig, suite) + return suite +} + +func (w *SpecWatcher) computeSuccinctMode(numSuites int) { + if w.reporterConfig.Verbosity().GTE(types.VerbosityLevelVerbose) { + w.reporterConfig.Succinct = false + return + } + + if w.flags.WasSet("succinct") { + return + } + + if numSuites == 1 { + w.reporterConfig.Succinct = false + } + + if numSuites > 1 { + w.reporterConfig.Succinct = true + } +} + +func (w *SpecWatcher) updateSeed() { + if !w.flags.WasSet("seed") { + w.suiteConfig.RandomSeed = time.Now().Unix() + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.go new file mode 100644 index 000000000000..85162720f948 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.go @@ -0,0 +1,8 @@ +//go:build ginkgoclidependencies +// +build ginkgoclidependencies + +package ginkgo + +import ( + _ "github.com/onsi/ginkgo/v2/ginkgo" +) diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go new file mode 100644 index 000000000000..28447ffdd261 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.go @@ -0,0 +1,94 @@ +package ginkgo + +import ( + "github.com/onsi/ginkgo/v2/internal/testingtproxy" +) + +/* +GinkgoT() implements an interface that allows third party libraries to integrate with and build on top of Ginkgo. + +GinkgoT() is analogous to *testing.T and implements the majority of *testing.T's methods. It can be typically be used a a drop-in replacement with third-party libraries that accept *testing.T through an interface. + +GinkgoT() takes an optional offset argument that can be used to get the +correct line number associated with the failure - though you do not need to use this if you call GinkgoHelper() or GinkgoT().Helper() appropriately + +You can learn more here: https://onsi.github.io/ginkgo/#using-third-party-libraries +*/ +func GinkgoT(optionalOffset ...int) FullGinkgoTInterface { + offset := 3 + if len(optionalOffset) > 0 { + offset = optionalOffset[0] + } + return testingtproxy.New( + GinkgoWriter, + Fail, + Skip, + DeferCleanup, + CurrentSpecReport, + AddReportEntry, + GinkgoRecover, + AttachProgressReporter, + suiteConfig.RandomSeed, + suiteConfig.ParallelProcess, + suiteConfig.ParallelTotal, + reporterConfig.NoColor, + offset) +} + +/* +The portion of the interface returned by GinkgoT() that maps onto methods in the testing package's T. +*/ +type GinkgoTInterface interface { + Cleanup(func()) + Setenv(kev, value string) + Error(args ...interface{}) + Errorf(format string, args ...interface{}) + Fail() + FailNow() + Failed() bool + Fatal(args ...interface{}) + Fatalf(format string, args ...interface{}) + Helper() + Log(args ...interface{}) + Logf(format string, args ...interface{}) + Name() string + Parallel() + Skip(args ...interface{}) + SkipNow() + Skipf(format string, args ...interface{}) + Skipped() bool + TempDir() string +} + +/* +Additional methods returned by GinkgoT() that provide deeper integration points into Ginkgo +*/ +type FullGinkgoTInterface interface { + GinkgoTInterface + + AddReportEntryVisibilityAlways(name string, args ...any) + AddReportEntryVisibilityFailureOrVerbose(name string, args ...any) + AddReportEntryVisibilityNever(name string, args ...any) + + //Prints to the GinkgoWriter + Print(a ...interface{}) + Printf(format string, a ...interface{}) + Println(a ...interface{}) + + //Provides access to Ginkgo's color formatting, correctly configured to match the color settings specified in the invocation of ginkgo + F(format string, args ...any) string + Fi(indentation uint, format string, args ...any) string + Fiw(indentation uint, maxWidth uint, format string, args ...any) string + + //Generates a formatted string version of the current spec's timeline + RenderTimeline() string + + GinkgoRecover() + DeferCleanup(args ...any) + + RandomSeed() int64 + ParallelProcess() int + ParallelTotal() int + + AttachProgressReporter(func() string) func() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/counter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/counter.go new file mode 100644 index 000000000000..712d85afb0b7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/counter.go @@ -0,0 +1,9 @@ +package internal + +func MakeIncrementingIndexCounter() func() (int, error) { + idx := -1 + return func() (int, error) { + idx += 1 + return idx, nil + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/failer.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/failer.go new file mode 100644 index 000000000000..e9bd9565fc7b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/failer.go @@ -0,0 +1,99 @@ +package internal + +import ( + "fmt" + "sync" + + "github.com/onsi/ginkgo/v2/types" +) + +type Failer struct { + lock *sync.Mutex + failure types.Failure + state types.SpecState +} + +func NewFailer() *Failer { + return &Failer{ + lock: &sync.Mutex{}, + state: types.SpecStatePassed, + } +} + +func (f *Failer) GetState() types.SpecState { + f.lock.Lock() + defer f.lock.Unlock() + return f.state +} + +func (f *Failer) GetFailure() types.Failure { + f.lock.Lock() + defer f.lock.Unlock() + return f.failure +} + +func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{}) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.state == types.SpecStatePassed { + f.state = types.SpecStatePanicked + f.failure = types.Failure{ + Message: "Test Panicked", + Location: location, + ForwardedPanic: fmt.Sprintf("%v", forwardedPanic), + } + } +} + +func (f *Failer) Fail(message string, location types.CodeLocation) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.state == types.SpecStatePassed { + f.state = types.SpecStateFailed + f.failure = types.Failure{ + Message: message, + Location: location, + } + } +} + +func (f *Failer) Skip(message string, location types.CodeLocation) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.state == types.SpecStatePassed { + f.state = types.SpecStateSkipped + f.failure = types.Failure{ + Message: message, + Location: location, + } + } +} + +func (f *Failer) AbortSuite(message string, location types.CodeLocation) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.state == types.SpecStatePassed { + f.state = types.SpecStateAborted + f.failure = types.Failure{ + Message: message, + Location: location, + } + } +} + +func (f *Failer) Drain() (types.SpecState, types.Failure) { + f.lock.Lock() + defer f.lock.Unlock() + + failure := f.failure + outcome := f.state + + f.state = types.SpecStatePassed + f.failure = types.Failure{} + + return outcome, failure +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go new file mode 100644 index 000000000000..966ea0c1a27a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go @@ -0,0 +1,125 @@ +package internal + +import ( + "regexp" + "strings" + + "github.com/onsi/ginkgo/v2/types" +) + +/* + If a container marked as focus has a descendant that is also marked as focus, Ginkgo's policy is to + unmark the container's focus. This gives developers a more intuitive experience when debugging specs. + It is common to focus a container to just run a subset of specs, then identify the specific specs within the container to focus - + this policy allows the developer to simply focus those specific specs and not need to go back and turn the focus off of the container: + + As a common example, consider: + + FDescribe("something to debug", function() { + It("works", function() {...}) + It("works", function() {...}) + FIt("doesn't work", function() {...}) + It("works", function() {...}) + }) + + here the developer's intent is to focus in on the `"doesn't work"` spec and not to run the adjacent specs in the focused `"something to debug"` container. + The nested policy applied by this function enables this behavior. +*/ +func ApplyNestedFocusPolicyToTree(tree *TreeNode) { + var walkTree func(tree *TreeNode) bool + walkTree = func(tree *TreeNode) bool { + if tree.Node.MarkedPending { + return false + } + hasFocusedDescendant := false + for _, child := range tree.Children { + childHasFocus := walkTree(child) + hasFocusedDescendant = hasFocusedDescendant || childHasFocus + } + tree.Node.MarkedFocus = tree.Node.MarkedFocus && !hasFocusedDescendant + return tree.Node.MarkedFocus || hasFocusedDescendant + } + + walkTree(tree) +} + +/* + Ginkgo supports focussing specs using `FIt`, `FDescribe`, etc. - this is called "programmatic focus" + It also supports focussing specs using regular expressions on the command line (`-focus=`, `-skip=`) that match against spec text + and file filters (`-focus-files=`, `-skip-files=`) that match against code locations for nodes in specs. + + If any of the CLI flags are provided they take precedence. The file filters run first followed by the regex filters. + + This function sets the `Skip` property on specs by applying Ginkgo's focus policy: + - If there are no CLI arguments and no programmatic focus, do nothing. + - If there are no CLI arguments but a spec somewhere has programmatic focus, skip any specs that have no programmatic focus. + - If there are CLI arguments parse them and skip any specs that either don't match the focus filters or do match the skip filters. + + *Note:* specs with pending nodes are Skipped when created by NewSpec. +*/ +func ApplyFocusToSpecs(specs Specs, description string, suiteLabels Labels, suiteConfig types.SuiteConfig) (Specs, bool) { + focusString := strings.Join(suiteConfig.FocusStrings, "|") + skipString := strings.Join(suiteConfig.SkipStrings, "|") + + hasFocusCLIFlags := focusString != "" || skipString != "" || len(suiteConfig.SkipFiles) > 0 || len(suiteConfig.FocusFiles) > 0 || suiteConfig.LabelFilter != "" + + type SkipCheck func(spec Spec) bool + + // by default, skip any specs marked pending + skipChecks := []SkipCheck{func(spec Spec) bool { return spec.Nodes.HasNodeMarkedPending() }} + hasProgrammaticFocus := false + + if !hasFocusCLIFlags { + // check for programmatic focus + for _, spec := range specs { + if spec.Nodes.HasNodeMarkedFocus() && !spec.Nodes.HasNodeMarkedPending() { + skipChecks = append(skipChecks, func(spec Spec) bool { return !spec.Nodes.HasNodeMarkedFocus() }) + hasProgrammaticFocus = true + break + } + } + } + + if suiteConfig.LabelFilter != "" { + labelFilter, _ := types.ParseLabelFilter(suiteConfig.LabelFilter) + skipChecks = append(skipChecks, func(spec Spec) bool { + return !labelFilter(UnionOfLabels(suiteLabels, spec.Nodes.UnionOfLabels())) + }) + } + + if len(suiteConfig.FocusFiles) > 0 { + focusFilters, _ := types.ParseFileFilters(suiteConfig.FocusFiles) + skipChecks = append(skipChecks, func(spec Spec) bool { return !focusFilters.Matches(spec.Nodes.CodeLocations()) }) + } + + if len(suiteConfig.SkipFiles) > 0 { + skipFilters, _ := types.ParseFileFilters(suiteConfig.SkipFiles) + skipChecks = append(skipChecks, func(spec Spec) bool { return skipFilters.Matches(spec.Nodes.CodeLocations()) }) + } + + if focusString != "" { + // skip specs that don't match the focus string + re := regexp.MustCompile(focusString) + skipChecks = append(skipChecks, func(spec Spec) bool { return !re.MatchString(description + " " + spec.Text()) }) + } + + if skipString != "" { + // skip specs that match the skip string + re := regexp.MustCompile(skipString) + skipChecks = append(skipChecks, func(spec Spec) bool { return re.MatchString(description + " " + spec.Text()) }) + } + + // skip specs if shouldSkip() is true. note that we do nothing if shouldSkip() is false to avoid overwriting skip status established by the node's pending status + processedSpecs := Specs{} + for _, spec := range specs { + for _, skipCheck := range skipChecks { + if skipCheck(spec) { + spec.Skip = true + break + } + } + processedSpecs = append(processedSpecs, spec) + } + + return processedSpecs, hasProgrammaticFocus +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go new file mode 100644 index 000000000000..f2c0fd89c0d5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go @@ -0,0 +1,17 @@ +package global + +import ( + "github.com/onsi/ginkgo/v2/internal" +) + +var Suite *internal.Suite +var Failer *internal.Failer + +func init() { + InitializeGlobals() +} + +func InitializeGlobals() { + Failer = internal.NewFailer() + Suite = internal.NewSuite() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/group.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/group.go new file mode 100644 index 000000000000..ae1b7b0112dc --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/group.go @@ -0,0 +1,380 @@ +package internal + +import ( + "fmt" + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +type runOncePair struct { + //nodeId should only run once... + nodeID uint + nodeType types.NodeType + //...for specs in a hierarchy that includes this context + containerID uint +} + +func (pair runOncePair) isZero() bool { + return pair.nodeID == 0 +} + +func runOncePairForNode(node Node, containerID uint) runOncePair { + return runOncePair{ + nodeID: node.ID, + nodeType: node.NodeType, + containerID: containerID, + } +} + +type runOncePairs []runOncePair + +func runOncePairsForSpec(spec Spec) runOncePairs { + pairs := runOncePairs{} + + containers := spec.Nodes.WithType(types.NodeTypeContainer) + for _, node := range spec.Nodes { + if node.NodeType.Is(types.NodeTypeBeforeAll | types.NodeTypeAfterAll) { + pairs = append(pairs, runOncePairForNode(node, containers.FirstWithNestingLevel(node.NestingLevel-1).ID)) + } else if node.NodeType.Is(types.NodeTypeBeforeEach|types.NodeTypeJustBeforeEach|types.NodeTypeAfterEach|types.NodeTypeJustAfterEach) && node.MarkedOncePerOrdered { + passedIntoAnOrderedContainer := false + firstOrderedContainerDeeperThanNode := containers.FirstSatisfying(func(container Node) bool { + passedIntoAnOrderedContainer = passedIntoAnOrderedContainer || container.MarkedOrdered + return container.NestingLevel >= node.NestingLevel && passedIntoAnOrderedContainer + }) + if firstOrderedContainerDeeperThanNode.IsZero() { + continue + } + pairs = append(pairs, runOncePairForNode(node, firstOrderedContainerDeeperThanNode.ID)) + } + } + + return pairs +} + +func (pairs runOncePairs) runOncePairFor(nodeID uint) runOncePair { + for i := range pairs { + if pairs[i].nodeID == nodeID { + return pairs[i] + } + } + return runOncePair{} +} + +func (pairs runOncePairs) hasRunOncePair(pair runOncePair) bool { + for i := range pairs { + if pairs[i] == pair { + return true + } + } + return false +} + +func (pairs runOncePairs) withType(nodeTypes types.NodeType) runOncePairs { + count := 0 + for i := range pairs { + if pairs[i].nodeType.Is(nodeTypes) { + count++ + } + } + + out, j := make(runOncePairs, count), 0 + for i := range pairs { + if pairs[i].nodeType.Is(nodeTypes) { + out[j] = pairs[i] + j++ + } + } + return out +} + +type group struct { + suite *Suite + specs Specs + runOncePairs map[uint]runOncePairs + runOnceTracker map[runOncePair]types.SpecState + + succeeded bool + failedInARunOnceBefore bool + continueOnFailure bool +} + +func newGroup(suite *Suite) *group { + return &group{ + suite: suite, + runOncePairs: map[uint]runOncePairs{}, + runOnceTracker: map[runOncePair]types.SpecState{}, + succeeded: true, + failedInARunOnceBefore: false, + continueOnFailure: false, + } +} + +func (g *group) initialReportForSpec(spec Spec) types.SpecReport { + return types.SpecReport{ + ContainerHierarchyTexts: spec.Nodes.WithType(types.NodeTypeContainer).Texts(), + ContainerHierarchyLocations: spec.Nodes.WithType(types.NodeTypeContainer).CodeLocations(), + ContainerHierarchyLabels: spec.Nodes.WithType(types.NodeTypeContainer).Labels(), + LeafNodeLocation: spec.FirstNodeWithType(types.NodeTypeIt).CodeLocation, + LeafNodeType: types.NodeTypeIt, + LeafNodeText: spec.FirstNodeWithType(types.NodeTypeIt).Text, + LeafNodeLabels: []string(spec.FirstNodeWithType(types.NodeTypeIt).Labels), + ParallelProcess: g.suite.config.ParallelProcess, + RunningInParallel: g.suite.isRunningInParallel(), + IsSerial: spec.Nodes.HasNodeMarkedSerial(), + IsInOrderedContainer: !spec.Nodes.FirstNodeMarkedOrdered().IsZero(), + MaxFlakeAttempts: spec.Nodes.GetMaxFlakeAttempts(), + MaxMustPassRepeatedly: spec.Nodes.GetMaxMustPassRepeatedly(), + } +} + +func (g *group) evaluateSkipStatus(spec Spec) (types.SpecState, types.Failure) { + if spec.Nodes.HasNodeMarkedPending() { + return types.SpecStatePending, types.Failure{} + } + if spec.Skip { + return types.SpecStateSkipped, types.Failure{} + } + if g.suite.interruptHandler.Status().Interrupted() || g.suite.skipAll { + return types.SpecStateSkipped, types.Failure{} + } + if !g.suite.deadline.IsZero() && g.suite.deadline.Before(time.Now()) { + return types.SpecStateSkipped, types.Failure{} + } + if !g.succeeded && !g.continueOnFailure { + return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt), + "Spec skipped because an earlier spec in an ordered container failed") + } + if g.failedInARunOnceBefore && g.continueOnFailure { + return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt), + "Spec skipped because a BeforeAll node failed") + } + beforeOncePairs := g.runOncePairs[spec.SubjectID()].withType(types.NodeTypeBeforeAll | types.NodeTypeBeforeEach | types.NodeTypeJustBeforeEach) + for _, pair := range beforeOncePairs { + if g.runOnceTracker[pair].Is(types.SpecStateSkipped) { + return types.SpecStateSkipped, g.suite.failureForLeafNodeWithMessage(spec.FirstNodeWithType(types.NodeTypeIt), + fmt.Sprintf("Spec skipped because Skip() was called in %s", pair.nodeType)) + } + } + if g.suite.config.DryRun { + return types.SpecStatePassed, types.Failure{} + } + return g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure +} + +func (g *group) isLastSpecWithPair(specID uint, pair runOncePair) bool { + lastSpecID := uint(0) + for idx := range g.specs { + if g.specs[idx].Skip { + continue + } + sID := g.specs[idx].SubjectID() + if g.runOncePairs[sID].hasRunOncePair(pair) { + lastSpecID = sID + } + } + return lastSpecID == specID +} + +func (g *group) attemptSpec(isFinalAttempt bool, spec Spec) bool { + failedInARunOnceBefore := false + pairs := g.runOncePairs[spec.SubjectID()] + + nodes := spec.Nodes.WithType(types.NodeTypeBeforeAll) + nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeBeforeEach)...).SortedByAscendingNestingLevel() + nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeJustBeforeEach).SortedByAscendingNestingLevel()...) + nodes = append(nodes, spec.Nodes.FirstNodeWithType(types.NodeTypeIt)) + terminatingNode, terminatingPair := Node{}, runOncePair{} + + deadline := time.Time{} + if spec.SpecTimeout() > 0 { + deadline = time.Now().Add(spec.SpecTimeout()) + } + + for _, node := range nodes { + oncePair := pairs.runOncePairFor(node.ID) + if !oncePair.isZero() && g.runOnceTracker[oncePair].Is(types.SpecStatePassed) { + continue + } + g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure = g.suite.runNode(node, deadline, spec.Nodes.BestTextFor(node)) + g.suite.currentSpecReport.RunTime = time.Since(g.suite.currentSpecReport.StartTime) + if !oncePair.isZero() { + g.runOnceTracker[oncePair] = g.suite.currentSpecReport.State + } + if g.suite.currentSpecReport.State != types.SpecStatePassed { + terminatingNode, terminatingPair = node, oncePair + failedInARunOnceBefore = !terminatingPair.isZero() + break + } + } + + afterNodeWasRun := map[uint]bool{} + includeDeferCleanups := false + for { + nodes := spec.Nodes.WithType(types.NodeTypeAfterEach) + nodes = append(nodes, spec.Nodes.WithType(types.NodeTypeAfterAll)...).SortedByDescendingNestingLevel() + nodes = append(spec.Nodes.WithType(types.NodeTypeJustAfterEach).SortedByDescendingNestingLevel(), nodes...) + if !terminatingNode.IsZero() { + nodes = nodes.WithinNestingLevel(terminatingNode.NestingLevel) + } + if includeDeferCleanups { + nodes = append(nodes, g.suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterEach).Reverse()...) + nodes = append(nodes, g.suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterAll).Reverse()...) + } + nodes = nodes.Filter(func(node Node) bool { + if afterNodeWasRun[node.ID] { + //this node has already been run on this attempt, don't rerun it + return false + } + var pair runOncePair + switch node.NodeType { + case types.NodeTypeCleanupAfterEach, types.NodeTypeCleanupAfterAll: + // check if we were generated in an AfterNode that has already run + if afterNodeWasRun[node.NodeIDWhereCleanupWasGenerated] { + return true // we were, so we should definitely run this cleanup now + } + // looks like this cleanup nodes was generated by a before node or it. + // the run-once status of a cleanup node is governed by the run-once status of its generator + pair = pairs.runOncePairFor(node.NodeIDWhereCleanupWasGenerated) + default: + pair = pairs.runOncePairFor(node.ID) + } + if pair.isZero() { + // this node is not governed by any run-once policy, we should run it + return true + } + // it's our last chance to run if we're the last spec for our oncePair + isLastSpecWithPair := g.isLastSpecWithPair(spec.SubjectID(), pair) + + switch g.suite.currentSpecReport.State { + case types.SpecStatePassed: //this attempt is passing... + return isLastSpecWithPair //...we should run-once if we'this is our last chance + case types.SpecStateSkipped: //the spec was skipped by the user... + if isLastSpecWithPair { + return true //...we're the last spec, so we should run the AfterNode + } + if !terminatingPair.isZero() && terminatingNode.NestingLevel == node.NestingLevel { + return true //...or, a run-once node at our nesting level was skipped which means this is our last chance to run + } + case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateTimedout: // the spec has failed... + if isFinalAttempt { + if g.continueOnFailure { + return isLastSpecWithPair || failedInARunOnceBefore //...we're configured to continue on failures - so we should only run if we're the last spec for this pair or if we failed in a runOnceBefore (which means we _are_ the last spec to run) + } else { + return true //...this was the last attempt and continueOnFailure is false therefore we are the last spec to run and so the AfterNode should run + } + } + if !terminatingPair.isZero() { // ...and it failed in a run-once. which will be running again + if node.NodeType.Is(types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll) { + return terminatingNode.ID == node.NodeIDWhereCleanupWasGenerated // we should run this node if we're a clean-up generated by it + } else { + return terminatingNode.NestingLevel == node.NestingLevel // ...or if we're at the same nesting level + } + } + case types.SpecStateInterrupted, types.SpecStateAborted: // ...we've been interrupted and/or aborted + return true //...that means the test run is over and we should clean up the stack. Run the AfterNode + } + return false + }) + + if len(nodes) == 0 && includeDeferCleanups { + break + } + + for _, node := range nodes { + afterNodeWasRun[node.ID] = true + state, failure := g.suite.runNode(node, deadline, spec.Nodes.BestTextFor(node)) + g.suite.currentSpecReport.RunTime = time.Since(g.suite.currentSpecReport.StartTime) + if g.suite.currentSpecReport.State == types.SpecStatePassed || state == types.SpecStateAborted { + g.suite.currentSpecReport.State = state + g.suite.currentSpecReport.Failure = failure + } else if state.Is(types.SpecStateFailureStates) { + g.suite.currentSpecReport.AdditionalFailures = append(g.suite.currentSpecReport.AdditionalFailures, types.AdditionalFailure{State: state, Failure: failure}) + } + } + includeDeferCleanups = true + } + + return failedInARunOnceBefore +} + +func (g *group) run(specs Specs) { + g.specs = specs + g.continueOnFailure = specs[0].Nodes.FirstNodeMarkedOrdered().MarkedContinueOnFailure + for _, spec := range g.specs { + g.runOncePairs[spec.SubjectID()] = runOncePairsForSpec(spec) + } + + for _, spec := range g.specs { + g.suite.selectiveLock.Lock() + g.suite.currentSpecReport = g.initialReportForSpec(spec) + g.suite.selectiveLock.Unlock() + + g.suite.currentSpecReport.State, g.suite.currentSpecReport.Failure = g.evaluateSkipStatus(spec) + g.suite.reporter.WillRun(g.suite.currentSpecReport) + g.suite.reportEach(spec, types.NodeTypeReportBeforeEach) + + skip := g.suite.config.DryRun || g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates|types.SpecStateSkipped|types.SpecStatePending) + + g.suite.currentSpecReport.StartTime = time.Now() + failedInARunOnceBefore := false + if !skip { + var maxAttempts = 1 + + if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 { + maxAttempts = max(1, spec.MustPassRepeatedly()) + } else if g.suite.config.FlakeAttempts > 0 { + maxAttempts = g.suite.config.FlakeAttempts + g.suite.currentSpecReport.MaxFlakeAttempts = maxAttempts + } else if g.suite.currentSpecReport.MaxFlakeAttempts > 0 { + maxAttempts = max(1, spec.FlakeAttempts()) + } + + for attempt := 0; attempt < maxAttempts; attempt++ { + g.suite.currentSpecReport.NumAttempts = attempt + 1 + g.suite.writer.Truncate() + g.suite.outputInterceptor.StartInterceptingOutput() + if attempt > 0 { + if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 { + g.suite.handleSpecEvent(types.SpecEvent{SpecEventType: types.SpecEventSpecRepeat, Attempt: attempt}) + } + if g.suite.currentSpecReport.MaxFlakeAttempts > 0 { + g.suite.handleSpecEvent(types.SpecEvent{SpecEventType: types.SpecEventSpecRetry, Attempt: attempt}) + } + } + + failedInARunOnceBefore = g.attemptSpec(attempt == maxAttempts-1, spec) + + g.suite.currentSpecReport.EndTime = time.Now() + g.suite.currentSpecReport.RunTime = g.suite.currentSpecReport.EndTime.Sub(g.suite.currentSpecReport.StartTime) + g.suite.currentSpecReport.CapturedGinkgoWriterOutput += string(g.suite.writer.Bytes()) + g.suite.currentSpecReport.CapturedStdOutErr += g.suite.outputInterceptor.StopInterceptingAndReturnOutput() + + if g.suite.currentSpecReport.MaxMustPassRepeatedly > 0 { + if g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates | types.SpecStateSkipped) { + break + } + } + if g.suite.currentSpecReport.MaxFlakeAttempts > 0 { + if g.suite.currentSpecReport.State.Is(types.SpecStatePassed | types.SpecStateSkipped | types.SpecStateAborted | types.SpecStateInterrupted) { + break + } else if attempt < maxAttempts-1 { + af := types.AdditionalFailure{State: g.suite.currentSpecReport.State, Failure: g.suite.currentSpecReport.Failure} + af.Failure.Message = fmt.Sprintf("Failure recorded during attempt %d:\n%s", attempt+1, af.Failure.Message) + g.suite.currentSpecReport.AdditionalFailures = append(g.suite.currentSpecReport.AdditionalFailures, af) + } + } + } + } + + g.suite.reportEach(spec, types.NodeTypeReportAfterEach) + g.suite.processCurrentSpecReport() + if g.suite.currentSpecReport.State.Is(types.SpecStateFailureStates) { + g.succeeded = false + g.failedInARunOnceBefore = g.failedInARunOnceBefore || failedInARunOnceBefore + } + g.suite.selectiveLock.Lock() + g.suite.currentSpecReport = types.SpecReport{} + g.suite.selectiveLock.Unlock() + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go new file mode 100644 index 000000000000..8ed86111f786 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.go @@ -0,0 +1,177 @@ +package interrupt_handler + +import ( + "os" + "os/signal" + "sync" + "syscall" + "time" + + "github.com/onsi/ginkgo/v2/internal/parallel_support" +) + +var ABORT_POLLING_INTERVAL = 500 * time.Millisecond + +type InterruptCause uint + +const ( + InterruptCauseInvalid InterruptCause = iota + InterruptCauseSignal + InterruptCauseAbortByOtherProcess +) + +type InterruptLevel uint + +const ( + InterruptLevelUninterrupted InterruptLevel = iota + InterruptLevelCleanupAndReport + InterruptLevelReportOnly + InterruptLevelBailOut +) + +func (ic InterruptCause) String() string { + switch ic { + case InterruptCauseSignal: + return "Interrupted by User" + case InterruptCauseAbortByOtherProcess: + return "Interrupted by Other Ginkgo Process" + } + return "INVALID_INTERRUPT_CAUSE" +} + +type InterruptStatus struct { + Channel chan interface{} + Level InterruptLevel + Cause InterruptCause +} + +func (s InterruptStatus) Interrupted() bool { + return s.Level != InterruptLevelUninterrupted +} + +func (s InterruptStatus) Message() string { + return s.Cause.String() +} + +func (s InterruptStatus) ShouldIncludeProgressReport() bool { + return s.Cause != InterruptCauseAbortByOtherProcess +} + +type InterruptHandlerInterface interface { + Status() InterruptStatus +} + +type InterruptHandler struct { + c chan interface{} + lock *sync.Mutex + level InterruptLevel + cause InterruptCause + client parallel_support.Client + stop chan interface{} + signals []os.Signal + requestAbortCheck chan interface{} +} + +func NewInterruptHandler(client parallel_support.Client, signals ...os.Signal) *InterruptHandler { + if len(signals) == 0 { + signals = []os.Signal{os.Interrupt, syscall.SIGTERM} + } + handler := &InterruptHandler{ + c: make(chan interface{}), + lock: &sync.Mutex{}, + stop: make(chan interface{}), + requestAbortCheck: make(chan interface{}), + client: client, + signals: signals, + } + handler.registerForInterrupts() + return handler +} + +func (handler *InterruptHandler) Stop() { + close(handler.stop) +} + +func (handler *InterruptHandler) registerForInterrupts() { + // os signal handling + signalChannel := make(chan os.Signal, 1) + signal.Notify(signalChannel, handler.signals...) + + // cross-process abort handling + var abortChannel chan interface{} + if handler.client != nil { + abortChannel = make(chan interface{}) + go func() { + pollTicker := time.NewTicker(ABORT_POLLING_INTERVAL) + for { + select { + case <-pollTicker.C: + if handler.client.ShouldAbort() { + close(abortChannel) + pollTicker.Stop() + return + } + case <-handler.requestAbortCheck: + if handler.client.ShouldAbort() { + close(abortChannel) + pollTicker.Stop() + return + } + case <-handler.stop: + pollTicker.Stop() + return + } + } + }() + } + + go func(abortChannel chan interface{}) { + var interruptCause InterruptCause + for { + select { + case <-signalChannel: + interruptCause = InterruptCauseSignal + case <-abortChannel: + interruptCause = InterruptCauseAbortByOtherProcess + case <-handler.stop: + signal.Stop(signalChannel) + return + } + abortChannel = nil + + handler.lock.Lock() + oldLevel := handler.level + handler.cause = interruptCause + if handler.level == InterruptLevelUninterrupted { + handler.level = InterruptLevelCleanupAndReport + } else if handler.level == InterruptLevelCleanupAndReport { + handler.level = InterruptLevelReportOnly + } else if handler.level == InterruptLevelReportOnly { + handler.level = InterruptLevelBailOut + } + if handler.level != oldLevel { + close(handler.c) + handler.c = make(chan interface{}) + } + handler.lock.Unlock() + } + }(abortChannel) +} + +func (handler *InterruptHandler) Status() InterruptStatus { + handler.lock.Lock() + status := InterruptStatus{ + Level: handler.level, + Channel: handler.c, + Cause: handler.cause, + } + handler.lock.Unlock() + + if handler.client != nil && handler.client.ShouldAbort() && !status.Interrupted() { + close(handler.requestAbortCheck) + <-status.Channel + return handler.Status() + } + + return status +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.go new file mode 100644 index 000000000000..bf0de496dc37 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.go @@ -0,0 +1,15 @@ +//go:build freebsd || openbsd || netbsd || dragonfly || darwin || linux || solaris +// +build freebsd openbsd netbsd dragonfly darwin linux solaris + +package interrupt_handler + +import ( + "os" + "os/signal" + "syscall" +) + +func SwallowSigQuit() { + c := make(chan os.Signal, 1024) + signal.Notify(c, syscall.SIGQUIT) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.go new file mode 100644 index 000000000000..fcf8da8335f7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.go @@ -0,0 +1,8 @@ +//go:build windows +// +build windows + +package interrupt_handler + +func SwallowSigQuit() { + //noop +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go new file mode 100644 index 000000000000..0869bffb390b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go @@ -0,0 +1,913 @@ +package internal + +import ( + "context" + "fmt" + "reflect" + "sort" + "time" + + "sync" + + "github.com/onsi/ginkgo/v2/types" +) + +var _global_node_id_counter = uint(0) +var _global_id_mutex = &sync.Mutex{} + +func UniqueNodeID() uint { + //There's a reace in the internal integration tests if we don't make + //accessing _global_node_id_counter safe across goroutines. + _global_id_mutex.Lock() + defer _global_id_mutex.Unlock() + _global_node_id_counter += 1 + return _global_node_id_counter +} + +type Node struct { + ID uint + NodeType types.NodeType + + Text string + Body func(SpecContext) + CodeLocation types.CodeLocation + NestingLevel int + HasContext bool + + SynchronizedBeforeSuiteProc1Body func(SpecContext) []byte + SynchronizedBeforeSuiteProc1BodyHasContext bool + SynchronizedBeforeSuiteAllProcsBody func(SpecContext, []byte) + SynchronizedBeforeSuiteAllProcsBodyHasContext bool + + SynchronizedAfterSuiteAllProcsBody func(SpecContext) + SynchronizedAfterSuiteAllProcsBodyHasContext bool + SynchronizedAfterSuiteProc1Body func(SpecContext) + SynchronizedAfterSuiteProc1BodyHasContext bool + + ReportEachBody func(types.SpecReport) + ReportSuiteBody func(types.Report) + + MarkedFocus bool + MarkedPending bool + MarkedSerial bool + MarkedOrdered bool + MarkedContinueOnFailure bool + MarkedOncePerOrdered bool + FlakeAttempts int + MustPassRepeatedly int + Labels Labels + PollProgressAfter time.Duration + PollProgressInterval time.Duration + NodeTimeout time.Duration + SpecTimeout time.Duration + GracePeriod time.Duration + + NodeIDWhereCleanupWasGenerated uint +} + +// Decoration Types +type focusType bool +type pendingType bool +type serialType bool +type orderedType bool +type continueOnFailureType bool +type honorsOrderedType bool +type suppressProgressReporting bool + +const Focus = focusType(true) +const Pending = pendingType(true) +const Serial = serialType(true) +const Ordered = orderedType(true) +const ContinueOnFailure = continueOnFailureType(true) +const OncePerOrdered = honorsOrderedType(true) +const SuppressProgressReporting = suppressProgressReporting(true) + +type FlakeAttempts uint +type MustPassRepeatedly uint +type Offset uint +type Done chan<- interface{} // Deprecated Done Channel for asynchronous testing +type Labels []string +type PollProgressInterval time.Duration +type PollProgressAfter time.Duration +type NodeTimeout time.Duration +type SpecTimeout time.Duration +type GracePeriod time.Duration + +func (l Labels) MatchesLabelFilter(query string) bool { + return types.MustParseLabelFilter(query)(l) +} + +func UnionOfLabels(labels ...Labels) Labels { + out := Labels{} + seen := map[string]bool{} + for _, labelSet := range labels { + for _, label := range labelSet { + if !seen[label] { + seen[label] = true + out = append(out, label) + } + } + } + return out +} + +func PartitionDecorations(args ...interface{}) ([]interface{}, []interface{}) { + decorations := []interface{}{} + remainingArgs := []interface{}{} + for _, arg := range args { + if isDecoration(arg) { + decorations = append(decorations, arg) + } else { + remainingArgs = append(remainingArgs, arg) + } + } + return decorations, remainingArgs +} + +func isDecoration(arg interface{}) bool { + switch t := reflect.TypeOf(arg); { + case t == nil: + return false + case t == reflect.TypeOf(Offset(0)): + return true + case t == reflect.TypeOf(types.CodeLocation{}): + return true + case t == reflect.TypeOf(Focus): + return true + case t == reflect.TypeOf(Pending): + return true + case t == reflect.TypeOf(Serial): + return true + case t == reflect.TypeOf(Ordered): + return true + case t == reflect.TypeOf(ContinueOnFailure): + return true + case t == reflect.TypeOf(OncePerOrdered): + return true + case t == reflect.TypeOf(SuppressProgressReporting): + return true + case t == reflect.TypeOf(FlakeAttempts(0)): + return true + case t == reflect.TypeOf(MustPassRepeatedly(0)): + return true + case t == reflect.TypeOf(Labels{}): + return true + case t == reflect.TypeOf(PollProgressInterval(0)): + return true + case t == reflect.TypeOf(PollProgressAfter(0)): + return true + case t == reflect.TypeOf(NodeTimeout(0)): + return true + case t == reflect.TypeOf(SpecTimeout(0)): + return true + case t == reflect.TypeOf(GracePeriod(0)): + return true + case t.Kind() == reflect.Slice && isSliceOfDecorations(arg): + return true + default: + return false + } +} + +func isSliceOfDecorations(slice interface{}) bool { + vSlice := reflect.ValueOf(slice) + if vSlice.Len() == 0 { + return false + } + for i := 0; i < vSlice.Len(); i++ { + if !isDecoration(vSlice.Index(i).Interface()) { + return false + } + } + return true +} + +var contextType = reflect.TypeOf(new(context.Context)).Elem() +var specContextType = reflect.TypeOf(new(SpecContext)).Elem() + +func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeType, text string, args ...interface{}) (Node, []error) { + baseOffset := 2 + node := Node{ + ID: UniqueNodeID(), + NodeType: nodeType, + Text: text, + Labels: Labels{}, + CodeLocation: types.NewCodeLocation(baseOffset), + NestingLevel: -1, + PollProgressAfter: -1, + PollProgressInterval: -1, + GracePeriod: -1, + } + + errors := []error{} + appendError := func(err error) { + if err != nil { + errors = append(errors, err) + } + } + + args = unrollInterfaceSlice(args) + + remainingArgs := []interface{}{} + //First get the CodeLocation up-to-date + for _, arg := range args { + switch v := arg.(type) { + case Offset: + node.CodeLocation = types.NewCodeLocation(baseOffset + int(v)) + case types.CodeLocation: + node.CodeLocation = v + default: + remainingArgs = append(remainingArgs, arg) + } + } + + labelsSeen := map[string]bool{} + trackedFunctionError := false + args = remainingArgs + remainingArgs = []interface{}{} + //now process the rest of the args + for _, arg := range args { + switch t := reflect.TypeOf(arg); { + case t == reflect.TypeOf(float64(0)): + break //ignore deprecated timeouts + case t == reflect.TypeOf(Focus): + node.MarkedFocus = bool(arg.(focusType)) + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Focus")) + } + case t == reflect.TypeOf(Pending): + node.MarkedPending = bool(arg.(pendingType)) + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Pending")) + } + case t == reflect.TypeOf(Serial): + node.MarkedSerial = bool(arg.(serialType)) + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Serial")) + } + case t == reflect.TypeOf(Ordered): + node.MarkedOrdered = bool(arg.(orderedType)) + if !nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Ordered")) + } + case t == reflect.TypeOf(ContinueOnFailure): + node.MarkedContinueOnFailure = bool(arg.(continueOnFailureType)) + if !nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "ContinueOnFailure")) + } + case t == reflect.TypeOf(OncePerOrdered): + node.MarkedOncePerOrdered = bool(arg.(honorsOrderedType)) + if !nodeType.Is(types.NodeTypeBeforeEach | types.NodeTypeJustBeforeEach | types.NodeTypeAfterEach | types.NodeTypeJustAfterEach) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "OncePerOrdered")) + } + case t == reflect.TypeOf(SuppressProgressReporting): + deprecationTracker.TrackDeprecation(types.Deprecations.SuppressProgressReporting()) + case t == reflect.TypeOf(FlakeAttempts(0)): + node.FlakeAttempts = int(arg.(FlakeAttempts)) + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "FlakeAttempts")) + } + case t == reflect.TypeOf(MustPassRepeatedly(0)): + node.MustPassRepeatedly = int(arg.(MustPassRepeatedly)) + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "MustPassRepeatedly")) + } + case t == reflect.TypeOf(PollProgressAfter(0)): + node.PollProgressAfter = time.Duration(arg.(PollProgressAfter)) + if nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "PollProgressAfter")) + } + case t == reflect.TypeOf(PollProgressInterval(0)): + node.PollProgressInterval = time.Duration(arg.(PollProgressInterval)) + if nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "PollProgressInterval")) + } + case t == reflect.TypeOf(NodeTimeout(0)): + node.NodeTimeout = time.Duration(arg.(NodeTimeout)) + if nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "NodeTimeout")) + } + case t == reflect.TypeOf(SpecTimeout(0)): + node.SpecTimeout = time.Duration(arg.(SpecTimeout)) + if !nodeType.Is(types.NodeTypeIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "SpecTimeout")) + } + case t == reflect.TypeOf(GracePeriod(0)): + node.GracePeriod = time.Duration(arg.(GracePeriod)) + if nodeType.Is(types.NodeTypeContainer) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "GracePeriod")) + } + case t == reflect.TypeOf(Labels{}): + if !nodeType.Is(types.NodeTypesForContainerAndIt) { + appendError(types.GinkgoErrors.InvalidDecoratorForNodeType(node.CodeLocation, nodeType, "Label")) + } + for _, label := range arg.(Labels) { + if !labelsSeen[label] { + labelsSeen[label] = true + label, err := types.ValidateAndCleanupLabel(label, node.CodeLocation) + node.Labels = append(node.Labels, label) + appendError(err) + } + } + case t.Kind() == reflect.Func: + if nodeType.Is(types.NodeTypeContainer) { + if node.Body != nil { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + if t.NumOut() > 0 || t.NumIn() > 0 { + appendError(types.GinkgoErrors.InvalidBodyTypeForContainer(t, node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + body := arg.(func()) + node.Body = func(SpecContext) { body() } + } else if nodeType.Is(types.NodeTypeReportBeforeEach | types.NodeTypeReportAfterEach) { + if node.ReportEachBody == nil { + node.ReportEachBody = arg.(func(types.SpecReport)) + } else { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + } else if nodeType.Is(types.NodeTypeReportBeforeSuite | types.NodeTypeReportAfterSuite) { + if node.ReportSuiteBody == nil { + node.ReportSuiteBody = arg.(func(types.Report)) + } else { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + } else if nodeType.Is(types.NodeTypeSynchronizedBeforeSuite) { + if node.SynchronizedBeforeSuiteProc1Body != nil && node.SynchronizedBeforeSuiteAllProcsBody != nil { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + if node.SynchronizedBeforeSuiteProc1Body == nil { + body, hasContext := extractSynchronizedBeforeSuiteProc1Body(arg) + if body == nil { + appendError(types.GinkgoErrors.InvalidBodyTypeForSynchronizedBeforeSuiteProc1(t, node.CodeLocation)) + trackedFunctionError = true + } + node.SynchronizedBeforeSuiteProc1Body, node.SynchronizedBeforeSuiteProc1BodyHasContext = body, hasContext + } else if node.SynchronizedBeforeSuiteAllProcsBody == nil { + body, hasContext := extractSynchronizedBeforeSuiteAllProcsBody(arg) + if body == nil { + appendError(types.GinkgoErrors.InvalidBodyTypeForSynchronizedBeforeSuiteAllProcs(t, node.CodeLocation)) + trackedFunctionError = true + } + node.SynchronizedBeforeSuiteAllProcsBody, node.SynchronizedBeforeSuiteAllProcsBodyHasContext = body, hasContext + } + } else if nodeType.Is(types.NodeTypeSynchronizedAfterSuite) { + if node.SynchronizedAfterSuiteAllProcsBody != nil && node.SynchronizedAfterSuiteProc1Body != nil { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + body, hasContext := extractBodyFunction(deprecationTracker, node.CodeLocation, arg) + if body == nil { + appendError(types.GinkgoErrors.InvalidBodyType(t, node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + if node.SynchronizedAfterSuiteAllProcsBody == nil { + node.SynchronizedAfterSuiteAllProcsBody, node.SynchronizedAfterSuiteAllProcsBodyHasContext = body, hasContext + } else if node.SynchronizedAfterSuiteProc1Body == nil { + node.SynchronizedAfterSuiteProc1Body, node.SynchronizedAfterSuiteProc1BodyHasContext = body, hasContext + } + } else { + if node.Body != nil { + appendError(types.GinkgoErrors.MultipleBodyFunctions(node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + node.Body, node.HasContext = extractBodyFunction(deprecationTracker, node.CodeLocation, arg) + if node.Body == nil { + appendError(types.GinkgoErrors.InvalidBodyType(t, node.CodeLocation, nodeType)) + trackedFunctionError = true + break + } + } + default: + remainingArgs = append(remainingArgs, arg) + } + } + + //validations + if node.MarkedPending && node.MarkedFocus { + appendError(types.GinkgoErrors.InvalidDeclarationOfFocusedAndPending(node.CodeLocation, nodeType)) + } + + if node.MarkedContinueOnFailure && !node.MarkedOrdered { + appendError(types.GinkgoErrors.InvalidContinueOnFailureDecoration(node.CodeLocation)) + } + + hasContext := node.HasContext || node.SynchronizedAfterSuiteProc1BodyHasContext || node.SynchronizedAfterSuiteAllProcsBodyHasContext || node.SynchronizedBeforeSuiteProc1BodyHasContext || node.SynchronizedBeforeSuiteAllProcsBodyHasContext + + if !hasContext && (node.NodeTimeout > 0 || node.SpecTimeout > 0 || node.GracePeriod > 0) && len(errors) == 0 { + appendError(types.GinkgoErrors.InvalidTimeoutOrGracePeriodForNonContextNode(node.CodeLocation, nodeType)) + } + + if !node.NodeType.Is(types.NodeTypeReportBeforeEach|types.NodeTypeReportAfterEach|types.NodeTypeSynchronizedBeforeSuite|types.NodeTypeSynchronizedAfterSuite|types.NodeTypeReportBeforeSuite|types.NodeTypeReportAfterSuite) && node.Body == nil && !node.MarkedPending && !trackedFunctionError { + appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType)) + } + + if node.NodeType.Is(types.NodeTypeSynchronizedBeforeSuite) && !trackedFunctionError && (node.SynchronizedBeforeSuiteProc1Body == nil || node.SynchronizedBeforeSuiteAllProcsBody == nil) { + appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType)) + } + + if node.NodeType.Is(types.NodeTypeSynchronizedAfterSuite) && !trackedFunctionError && (node.SynchronizedAfterSuiteProc1Body == nil || node.SynchronizedAfterSuiteAllProcsBody == nil) { + appendError(types.GinkgoErrors.MissingBodyFunction(node.CodeLocation, nodeType)) + } + + for _, arg := range remainingArgs { + appendError(types.GinkgoErrors.UnknownDecorator(node.CodeLocation, nodeType, arg)) + } + + if node.FlakeAttempts > 0 && node.MustPassRepeatedly > 0 { + appendError(types.GinkgoErrors.InvalidDeclarationOfFlakeAttemptsAndMustPassRepeatedly(node.CodeLocation, nodeType)) + } + + if len(errors) > 0 { + return Node{}, errors + } + + return node, errors +} + +var doneType = reflect.TypeOf(make(Done)) + +func extractBodyFunction(deprecationTracker *types.DeprecationTracker, cl types.CodeLocation, arg interface{}) (func(SpecContext), bool) { + t := reflect.TypeOf(arg) + if t.NumOut() > 0 || t.NumIn() > 1 { + return nil, false + } + if t.NumIn() == 1 { + if t.In(0) == doneType { + deprecationTracker.TrackDeprecation(types.Deprecations.Async(), cl) + deprecatedAsyncBody := arg.(func(Done)) + return func(SpecContext) { deprecatedAsyncBody(make(Done)) }, false + } else if t.In(0).Implements(specContextType) { + return arg.(func(SpecContext)), true + } else if t.In(0).Implements(contextType) { + body := arg.(func(context.Context)) + return func(c SpecContext) { body(c) }, true + } + + return nil, false + } + + body := arg.(func()) + return func(SpecContext) { body() }, false +} + +var byteType = reflect.TypeOf([]byte{}) + +func extractSynchronizedBeforeSuiteProc1Body(arg interface{}) (func(SpecContext) []byte, bool) { + t := reflect.TypeOf(arg) + v := reflect.ValueOf(arg) + + if t.NumOut() > 1 || t.NumIn() > 1 { + return nil, false + } else if t.NumOut() == 1 && t.Out(0) != byteType { + return nil, false + } else if t.NumIn() == 1 && !t.In(0).Implements(contextType) { + return nil, false + } + hasContext := t.NumIn() == 1 + + return func(c SpecContext) []byte { + var out []reflect.Value + if hasContext { + out = v.Call([]reflect.Value{reflect.ValueOf(c)}) + } else { + out = v.Call([]reflect.Value{}) + } + if len(out) == 1 { + return (out[0].Interface()).([]byte) + } else { + return []byte{} + } + }, hasContext +} + +func extractSynchronizedBeforeSuiteAllProcsBody(arg interface{}) (func(SpecContext, []byte), bool) { + t := reflect.TypeOf(arg) + v := reflect.ValueOf(arg) + hasContext, hasByte := false, false + + if t.NumOut() > 0 || t.NumIn() > 2 { + return nil, false + } else if t.NumIn() == 2 && t.In(0).Implements(contextType) && t.In(1) == byteType { + hasContext, hasByte = true, true + } else if t.NumIn() == 1 && t.In(0).Implements(contextType) { + hasContext = true + } else if t.NumIn() == 1 && t.In(0) == byteType { + hasByte = true + } else if t.NumIn() != 0 { + return nil, false + } + + return func(c SpecContext, b []byte) { + in := []reflect.Value{} + if hasContext { + in = append(in, reflect.ValueOf(c)) + } + if hasByte { + in = append(in, reflect.ValueOf(b)) + } + v.Call(in) + }, hasContext +} + +var errInterface = reflect.TypeOf((*error)(nil)).Elem() + +func NewCleanupNode(deprecationTracker *types.DeprecationTracker, fail func(string, types.CodeLocation), args ...interface{}) (Node, []error) { + decorations, remainingArgs := PartitionDecorations(args...) + baseOffset := 2 + cl := types.NewCodeLocation(baseOffset) + finalArgs := []interface{}{} + for _, arg := range decorations { + switch t := reflect.TypeOf(arg); { + case t == reflect.TypeOf(Offset(0)): + cl = types.NewCodeLocation(baseOffset + int(arg.(Offset))) + case t == reflect.TypeOf(types.CodeLocation{}): + cl = arg.(types.CodeLocation) + default: + finalArgs = append(finalArgs, arg) + } + } + finalArgs = append(finalArgs, cl) + + if len(remainingArgs) == 0 { + return Node{}, []error{types.GinkgoErrors.DeferCleanupInvalidFunction(cl)} + } + + callback := reflect.ValueOf(remainingArgs[0]) + if !(callback.Kind() == reflect.Func) { + return Node{}, []error{types.GinkgoErrors.DeferCleanupInvalidFunction(cl)} + } + + callArgs := []reflect.Value{} + for _, arg := range remainingArgs[1:] { + callArgs = append(callArgs, reflect.ValueOf(arg)) + } + + hasContext := false + t := callback.Type() + if t.NumIn() > 0 { + if t.In(0).Implements(specContextType) { + hasContext = true + } else if t.In(0).Implements(contextType) && (len(callArgs) == 0 || !callArgs[0].Type().Implements(contextType)) { + hasContext = true + } + } + + handleFailure := func(out []reflect.Value) { + if len(out) == 0 { + return + } + last := out[len(out)-1] + if last.Type().Implements(errInterface) && !last.IsNil() { + fail(fmt.Sprintf("DeferCleanup callback returned error: %v", last), cl) + } + } + + if hasContext { + finalArgs = append(finalArgs, func(c SpecContext) { + out := callback.Call(append([]reflect.Value{reflect.ValueOf(c)}, callArgs...)) + handleFailure(out) + }) + } else { + finalArgs = append(finalArgs, func() { + out := callback.Call(callArgs) + handleFailure(out) + }) + } + + return NewNode(deprecationTracker, types.NodeTypeCleanupInvalid, "", finalArgs...) +} + +func (n Node) IsZero() bool { + return n.ID == 0 +} + +/* Nodes */ +type Nodes []Node + +func (n Nodes) CopyAppend(nodes ...Node) Nodes { + numN := len(n) + out := make(Nodes, numN+len(nodes)) + for i, node := range n { + out[i] = node + } + for j, node := range nodes { + out[numN+j] = node + } + return out +} + +func (n Nodes) SplitAround(pivot Node) (Nodes, Nodes) { + pivotIdx := len(n) + for i := range n { + if n[i].ID == pivot.ID { + pivotIdx = i + break + } + } + left := n[:pivotIdx] + right := Nodes{} + if pivotIdx+1 < len(n) { + right = n[pivotIdx+1:] + } + + return left, right +} + +func (n Nodes) FirstNodeWithType(nodeTypes types.NodeType) Node { + for i := range n { + if n[i].NodeType.Is(nodeTypes) { + return n[i] + } + } + return Node{} +} + +func (n Nodes) WithType(nodeTypes types.NodeType) Nodes { + count := 0 + for i := range n { + if n[i].NodeType.Is(nodeTypes) { + count++ + } + } + + out, j := make(Nodes, count), 0 + for i := range n { + if n[i].NodeType.Is(nodeTypes) { + out[j] = n[i] + j++ + } + } + return out +} + +func (n Nodes) WithoutType(nodeTypes types.NodeType) Nodes { + count := 0 + for i := range n { + if !n[i].NodeType.Is(nodeTypes) { + count++ + } + } + + out, j := make(Nodes, count), 0 + for i := range n { + if !n[i].NodeType.Is(nodeTypes) { + out[j] = n[i] + j++ + } + } + return out +} + +func (n Nodes) WithoutNode(nodeToExclude Node) Nodes { + idxToExclude := len(n) + for i := range n { + if n[i].ID == nodeToExclude.ID { + idxToExclude = i + break + } + } + if idxToExclude == len(n) { + return n + } + out, j := make(Nodes, len(n)-1), 0 + for i := range n { + if i == idxToExclude { + continue + } + out[j] = n[i] + j++ + } + return out +} + +func (n Nodes) Filter(filter func(Node) bool) Nodes { + trufa, count := make([]bool, len(n)), 0 + for i := range n { + if filter(n[i]) { + trufa[i] = true + count += 1 + } + } + out, j := make(Nodes, count), 0 + for i := range n { + if trufa[i] { + out[j] = n[i] + j++ + } + } + return out +} + +func (n Nodes) FirstSatisfying(filter func(Node) bool) Node { + for i := range n { + if filter(n[i]) { + return n[i] + } + } + return Node{} +} + +func (n Nodes) WithinNestingLevel(deepestNestingLevel int) Nodes { + count := 0 + for i := range n { + if n[i].NestingLevel <= deepestNestingLevel { + count++ + } + } + out, j := make(Nodes, count), 0 + for i := range n { + if n[i].NestingLevel <= deepestNestingLevel { + out[j] = n[i] + j++ + } + } + return out +} + +func (n Nodes) SortedByDescendingNestingLevel() Nodes { + out := make(Nodes, len(n)) + copy(out, n) + sort.SliceStable(out, func(i int, j int) bool { + return out[i].NestingLevel > out[j].NestingLevel + }) + + return out +} + +func (n Nodes) SortedByAscendingNestingLevel() Nodes { + out := make(Nodes, len(n)) + copy(out, n) + sort.SliceStable(out, func(i int, j int) bool { + return out[i].NestingLevel < out[j].NestingLevel + }) + + return out +} + +func (n Nodes) FirstWithNestingLevel(level int) Node { + for i := range n { + if n[i].NestingLevel == level { + return n[i] + } + } + return Node{} +} + +func (n Nodes) Reverse() Nodes { + out := make(Nodes, len(n)) + for i := range n { + out[len(n)-1-i] = n[i] + } + return out +} + +func (n Nodes) Texts() []string { + out := make([]string, len(n)) + for i := range n { + out[i] = n[i].Text + } + return out +} + +func (n Nodes) Labels() [][]string { + out := make([][]string, len(n)) + for i := range n { + if n[i].Labels == nil { + out[i] = []string{} + } else { + out[i] = []string(n[i].Labels) + } + } + return out +} + +func (n Nodes) UnionOfLabels() []string { + out := []string{} + seen := map[string]bool{} + for i := range n { + for _, label := range n[i].Labels { + if !seen[label] { + seen[label] = true + out = append(out, label) + } + } + } + return out +} + +func (n Nodes) CodeLocations() []types.CodeLocation { + out := make([]types.CodeLocation, len(n)) + for i := range n { + out[i] = n[i].CodeLocation + } + return out +} + +func (n Nodes) BestTextFor(node Node) string { + if node.Text != "" { + return node.Text + } + parentNestingLevel := node.NestingLevel - 1 + for i := range n { + if n[i].Text != "" && n[i].NestingLevel == parentNestingLevel { + return n[i].Text + } + } + + return "" +} + +func (n Nodes) ContainsNodeID(id uint) bool { + for i := range n { + if n[i].ID == id { + return true + } + } + return false +} + +func (n Nodes) HasNodeMarkedPending() bool { + for i := range n { + if n[i].MarkedPending { + return true + } + } + return false +} + +func (n Nodes) HasNodeMarkedFocus() bool { + for i := range n { + if n[i].MarkedFocus { + return true + } + } + return false +} + +func (n Nodes) HasNodeMarkedSerial() bool { + for i := range n { + if n[i].MarkedSerial { + return true + } + } + return false +} + +func (n Nodes) FirstNodeMarkedOrdered() Node { + for i := range n { + if n[i].MarkedOrdered { + return n[i] + } + } + return Node{} +} + +func (n Nodes) GetMaxFlakeAttempts() int { + maxFlakeAttempts := 0 + for i := range n { + if n[i].FlakeAttempts > 0 { + maxFlakeAttempts = n[i].FlakeAttempts + } + } + return maxFlakeAttempts +} + +func (n Nodes) GetMaxMustPassRepeatedly() int { + maxMustPassRepeatedly := 0 + for i := range n { + if n[i].MustPassRepeatedly > 0 { + maxMustPassRepeatedly = n[i].MustPassRepeatedly + } + } + return maxMustPassRepeatedly +} + +func unrollInterfaceSlice(args interface{}) []interface{} { + v := reflect.ValueOf(args) + if v.Kind() != reflect.Slice { + return []interface{}{args} + } + out := []interface{}{} + for i := 0; i < v.Len(); i++ { + el := reflect.ValueOf(v.Index(i).Interface()) + if el.Kind() == reflect.Slice && el.Type() != reflect.TypeOf(Labels{}) { + out = append(out, unrollInterfaceSlice(el.Interface())...) + } else { + out = append(out, v.Index(i).Interface()) + } + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go new file mode 100644 index 000000000000..7ed43c7fdcc1 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go @@ -0,0 +1,164 @@ +package internal + +import ( + "math/rand" + "sort" + + "github.com/onsi/ginkgo/v2/types" +) + +type SortableSpecs struct { + Specs Specs + Indexes []int +} + +func NewSortableSpecs(specs Specs) *SortableSpecs { + indexes := make([]int, len(specs)) + for i := range specs { + indexes[i] = i + } + return &SortableSpecs{ + Specs: specs, + Indexes: indexes, + } +} +func (s *SortableSpecs) Len() int { return len(s.Indexes) } +func (s *SortableSpecs) Swap(i, j int) { s.Indexes[i], s.Indexes[j] = s.Indexes[j], s.Indexes[i] } +func (s *SortableSpecs) Less(i, j int) bool { + a, b := s.Specs[s.Indexes[i]], s.Specs[s.Indexes[j]] + + firstOrderedA := a.Nodes.FirstNodeMarkedOrdered() + firstOrderedB := b.Nodes.FirstNodeMarkedOrdered() + if firstOrderedA.ID == firstOrderedB.ID && !firstOrderedA.IsZero() { + // strictly preserve order in ordered containers. ID will track this as IDs are generated monotonically + return a.FirstNodeWithType(types.NodeTypeIt).ID < b.FirstNodeWithType(types.NodeTypeIt).ID + } + + aCLs := a.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations() + bCLs := b.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations() + for i := 0; i < len(aCLs) && i < len(bCLs); i++ { + aCL, bCL := aCLs[i], bCLs[i] + if aCL.FileName < bCL.FileName { + return true + } else if aCL.FileName > bCL.FileName { + return false + } + if aCL.LineNumber < bCL.LineNumber { + return true + } else if aCL.LineNumber > bCL.LineNumber { + return false + } + } + // either everything is equal or we have different lengths of CLs + if len(aCLs) < len(bCLs) { + return true + } else if len(aCLs) > len(bCLs) { + return false + } + // ok, now we are sure everything was equal. so we use the spec text to break ties + return a.Text() < b.Text() +} + +type GroupedSpecIndices []SpecIndices +type SpecIndices []int + +func OrderSpecs(specs Specs, suiteConfig types.SuiteConfig) (GroupedSpecIndices, GroupedSpecIndices) { + /* + Ginkgo has sophisticated support for randomizing specs. Specs are guaranteed to have the same + order for a given seed across test runs. + + By default only top-level containers and specs are shuffled - this makes for a more intuitive debugging + experience - specs within a given container run in the order they appear in the file. + + Developers can set -randomizeAllSpecs to shuffle _all_ specs. + + In addition, spec containers can be marked as Ordered. Specs within an Ordered container are never shuffled. + + Finally, specs and spec containers can be marked as Serial. When running in parallel, serial specs run on Process #1 _after_ all other processes have finished. + */ + + // Seed a new random source based on thee configured random seed. + r := rand.New(rand.NewSource(suiteConfig.RandomSeed)) + + // first, we sort the entire suite to ensure a deterministic order. the sort is performed by filename, then line number, and then spec text. this ensures every parallel process has the exact same spec order and is only necessary to cover the edge case where the user iterates over a map to generate specs. + sortableSpecs := NewSortableSpecs(specs) + sort.Sort(sortableSpecs) + + // then we break things into execution groups + // a group represents a single unit of execution and is a collection of SpecIndices + // usually a group is just a single spec, however ordered containers must be preserved as a single group + executionGroupIDs := []uint{} + executionGroups := map[uint]SpecIndices{} + for _, idx := range sortableSpecs.Indexes { + spec := specs[idx] + groupNode := spec.Nodes.FirstNodeMarkedOrdered() + if groupNode.IsZero() { + groupNode = spec.Nodes.FirstNodeWithType(types.NodeTypeIt) + } + executionGroups[groupNode.ID] = append(executionGroups[groupNode.ID], idx) + if len(executionGroups[groupNode.ID]) == 1 { + executionGroupIDs = append(executionGroupIDs, groupNode.ID) + } + } + + // now, we only shuffle all the execution groups if we're randomizing all specs, otherwise + // we shuffle outermost containers. so we need to form shufflable groupings of GroupIDs + shufflableGroupingIDs := []uint{} + shufflableGroupingIDToGroupIDs := map[uint][]uint{} + + // for each execution group we're going to have to pick a node to represent how the + // execution group is grouped for shuffling: + nodeTypesToShuffle := types.NodeTypesForContainerAndIt + if suiteConfig.RandomizeAllSpecs { + nodeTypesToShuffle = types.NodeTypeIt + } + + //so, for each execution group: + for _, groupID := range executionGroupIDs { + // pick out a representative spec + representativeSpec := specs[executionGroups[groupID][0]] + + // and grab the node on the spec that will represent which shufflable group this execution group belongs tu + shufflableGroupingNode := representativeSpec.Nodes.FirstNodeWithType(nodeTypesToShuffle) + + //add the execution group to its shufflable group + shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID] = append(shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID], groupID) + + //and if it's the first one in + if len(shufflableGroupingIDToGroupIDs[shufflableGroupingNode.ID]) == 1 { + // record the shuffleable group ID + shufflableGroupingIDs = append(shufflableGroupingIDs, shufflableGroupingNode.ID) + } + } + + // now we permute the sorted shufflable grouping IDs and build the ordered Groups + orderedGroups := GroupedSpecIndices{} + permutation := r.Perm(len(shufflableGroupingIDs)) + for _, j := range permutation { + //let's get the execution group IDs for this shufflable group: + executionGroupIDsForJ := shufflableGroupingIDToGroupIDs[shufflableGroupingIDs[j]] + // and we'll add their associated specindices to the orderedGroups slice: + for _, executionGroupID := range executionGroupIDsForJ { + orderedGroups = append(orderedGroups, executionGroups[executionGroupID]) + } + } + + // If we're running in series, we're done. + if suiteConfig.ParallelTotal == 1 { + return orderedGroups, GroupedSpecIndices{} + } + + // We're running in parallel so we need to partition the ordered groups into a parallelizable set and a serialized set. + // The parallelizable groups will run across all Ginkgo processes... + // ...the serial groups will only run on Process #1 after all other processes have exited. + parallelizableGroups, serialGroups := GroupedSpecIndices{}, GroupedSpecIndices{} + for _, specIndices := range orderedGroups { + if specs[specIndices[0]].Nodes.HasNodeMarkedSerial() { + serialGroups = append(serialGroups, specIndices) + } else { + parallelizableGroups = append(parallelizableGroups, specIndices) + } + } + + return parallelizableGroups, serialGroups +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.go new file mode 100644 index 000000000000..4a1c0946127b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.go @@ -0,0 +1,250 @@ +package internal + +import ( + "bytes" + "io" + "os" + "time" +) + +const BAILOUT_TIME = 1 * time.Second +const BAILOUT_MESSAGE = `Ginkgo detected an issue while intercepting output. + +When running in parallel, Ginkgo captures stdout and stderr output +and attaches it to the running spec. It looks like that process is getting +stuck for this suite. + +This usually happens if you, or a library you are using, spin up an external +process and set cmd.Stdout = os.Stdout and/or cmd.Stderr = os.Stderr. This +causes the external process to keep Ginkgo's output interceptor pipe open and +causes output interception to hang. + +Ginkgo has detected this and shortcircuited the capture process. The specs +will continue running after this message however output from the external +process that caused this issue will not be captured. + +You have several options to fix this. In preferred order they are: + +1. Pass GinkgoWriter instead of os.Stdout or os.Stderr to your process. +2. Ensure your process exits before the current spec completes. If your +process is long-lived and must cross spec boundaries, this option won't +work for you. +3. Pause Ginkgo's output interceptor before starting your process and then +resume it after. Use PauseOutputInterception() and ResumeOutputInterception() +to do this. +4. Set --output-interceptor-mode=none when running your Ginkgo suite. This will +turn off all output interception but allow specs to run in parallel without this +issue. You may miss important output if you do this including output from Go's +race detector. + +More details on issue #851 - https://github.com/onsi/ginkgo/issues/851 +` + +/* +The OutputInterceptor is used by to +intercept and capture all stdin and stderr output during a test run. +*/ +type OutputInterceptor interface { + StartInterceptingOutput() + StartInterceptingOutputAndForwardTo(io.Writer) + StopInterceptingAndReturnOutput() string + + PauseIntercepting() + ResumeIntercepting() + + Shutdown() +} + +type NoopOutputInterceptor struct{} + +func (interceptor NoopOutputInterceptor) StartInterceptingOutput() {} +func (interceptor NoopOutputInterceptor) StartInterceptingOutputAndForwardTo(io.Writer) {} +func (interceptor NoopOutputInterceptor) StopInterceptingAndReturnOutput() string { return "" } +func (interceptor NoopOutputInterceptor) PauseIntercepting() {} +func (interceptor NoopOutputInterceptor) ResumeIntercepting() {} +func (interceptor NoopOutputInterceptor) Shutdown() {} + +type pipePair struct { + reader *os.File + writer *os.File +} + +func startPipeFactory(pipeChannel chan pipePair, shutdown chan interface{}) { + for { + //make the next pipe... + pair := pipePair{} + pair.reader, pair.writer, _ = os.Pipe() + select { + //...and provide it to the next consumer (they are responsible for closing the files) + case pipeChannel <- pair: + continue + //...or close the files if we were told to shutdown + case <-shutdown: + pair.reader.Close() + pair.writer.Close() + return + } + } +} + +type interceptorImplementation interface { + CreateStdoutStderrClones() (*os.File, *os.File) + ConnectPipeToStdoutStderr(*os.File) + RestoreStdoutStderrFromClones(*os.File, *os.File) + ShutdownClones(*os.File, *os.File) +} + +type genericOutputInterceptor struct { + intercepting bool + + stdoutClone *os.File + stderrClone *os.File + pipe pipePair + + shutdown chan interface{} + emergencyBailout chan interface{} + pipeChannel chan pipePair + interceptedContent chan string + + forwardTo io.Writer + accumulatedOutput string + + implementation interceptorImplementation +} + +func (interceptor *genericOutputInterceptor) StartInterceptingOutput() { + interceptor.StartInterceptingOutputAndForwardTo(io.Discard) +} + +func (interceptor *genericOutputInterceptor) StartInterceptingOutputAndForwardTo(w io.Writer) { + if interceptor.intercepting { + return + } + interceptor.accumulatedOutput = "" + interceptor.forwardTo = w + interceptor.ResumeIntercepting() +} + +func (interceptor *genericOutputInterceptor) StopInterceptingAndReturnOutput() string { + if interceptor.intercepting { + interceptor.PauseIntercepting() + } + return interceptor.accumulatedOutput +} + +func (interceptor *genericOutputInterceptor) ResumeIntercepting() { + if interceptor.intercepting { + return + } + interceptor.intercepting = true + if interceptor.stdoutClone == nil { + interceptor.stdoutClone, interceptor.stderrClone = interceptor.implementation.CreateStdoutStderrClones() + interceptor.shutdown = make(chan interface{}) + go startPipeFactory(interceptor.pipeChannel, interceptor.shutdown) + } + + // Now we make a pipe, we'll use this to redirect the input to the 1 and 2 file descriptors (this is how everything else in the world is string to log to stdout and stderr) + // we get the pipe from our pipe factory. it runs in the background so we can request the next pipe while the spec being intercepted is running + interceptor.pipe = <-interceptor.pipeChannel + + interceptor.emergencyBailout = make(chan interface{}) + + //Spin up a goroutine to copy data from the pipe into a buffer, this is how we capture any output the user is emitting + go func() { + buffer := &bytes.Buffer{} + destination := io.MultiWriter(buffer, interceptor.forwardTo) + copyFinished := make(chan interface{}) + reader := interceptor.pipe.reader + go func() { + io.Copy(destination, reader) + reader.Close() // close the read end of the pipe so we don't leak a file descriptor + close(copyFinished) + }() + select { + case <-copyFinished: + interceptor.interceptedContent <- buffer.String() + case <-interceptor.emergencyBailout: + interceptor.interceptedContent <- "" + } + }() + + interceptor.implementation.ConnectPipeToStdoutStderr(interceptor.pipe.writer) +} + +func (interceptor *genericOutputInterceptor) PauseIntercepting() { + if !interceptor.intercepting { + return + } + // first we have to close the write end of the pipe. To do this we have to close all file descriptors pointing + // to the write end. So that would be the pipewriter itself, and FD #1 and FD #2 if we've Dup2'd them + interceptor.pipe.writer.Close() // the pipewriter itself + + // we also need to stop intercepting. we do that by reconnecting the stdout and stderr file descriptions back to their respective #1 and #2 file descriptors; + // this also closes #1 and #2 before it points that their original stdout and stderr file descriptions + interceptor.implementation.RestoreStdoutStderrFromClones(interceptor.stdoutClone, interceptor.stderrClone) + + var content string + select { + case content = <-interceptor.interceptedContent: + case <-time.After(BAILOUT_TIME): + /* + By closing all the pipe writer's file descriptors associated with the pipe writer's file description the io.Copy reading from the reader + should eventually receive an EOF and exit. + + **However**, if the user has spun up an external process and passed in os.Stdout/os.Stderr to cmd.Stdout/cmd.Stderr then the external process + will have a file descriptor pointing to the pipe writer's file description and it will not close until the external process exits. + + That would leave us hanging here waiting for the io.Copy to close forever. Instead we invoke this emergency escape valve. This returns whatever + content we've got but leaves the io.Copy running. This ensures the external process can continue writing without hanging at the cost of leaking a goroutine + and file descriptor (those these will be cleaned up when the process exits). + + We tack on a message to notify the user that they've hit this edgecase and encourage them to address it. + */ + close(interceptor.emergencyBailout) + content = <-interceptor.interceptedContent + BAILOUT_MESSAGE + } + + interceptor.accumulatedOutput += content + interceptor.intercepting = false +} + +func (interceptor *genericOutputInterceptor) Shutdown() { + interceptor.PauseIntercepting() + + if interceptor.stdoutClone != nil { + close(interceptor.shutdown) + interceptor.implementation.ShutdownClones(interceptor.stdoutClone, interceptor.stderrClone) + interceptor.stdoutClone = nil + interceptor.stderrClone = nil + } +} + +/* This is used on windows builds but included here so it can be explicitly tested on unix systems too */ +func NewOSGlobalReassigningOutputInterceptor() OutputInterceptor { + return &genericOutputInterceptor{ + interceptedContent: make(chan string), + pipeChannel: make(chan pipePair), + shutdown: make(chan interface{}), + implementation: &osGlobalReassigningOutputInterceptorImpl{}, + } +} + +type osGlobalReassigningOutputInterceptorImpl struct{} + +func (impl *osGlobalReassigningOutputInterceptorImpl) CreateStdoutStderrClones() (*os.File, *os.File) { + return os.Stdout, os.Stderr +} + +func (impl *osGlobalReassigningOutputInterceptorImpl) ConnectPipeToStdoutStderr(pipeWriter *os.File) { + os.Stdout = pipeWriter + os.Stderr = pipeWriter +} + +func (impl *osGlobalReassigningOutputInterceptorImpl) RestoreStdoutStderrFromClones(stdoutClone *os.File, stderrClone *os.File) { + os.Stdout = stdoutClone + os.Stderr = stderrClone +} + +func (impl *osGlobalReassigningOutputInterceptorImpl) ShutdownClones(_ *os.File, _ *os.File) { + //noop +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.go new file mode 100644 index 000000000000..8a237f446374 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.go @@ -0,0 +1,73 @@ +//go:build freebsd || openbsd || netbsd || dragonfly || darwin || linux || solaris +// +build freebsd openbsd netbsd dragonfly darwin linux solaris + +package internal + +import ( + "os" + + "golang.org/x/sys/unix" +) + +func NewOutputInterceptor() OutputInterceptor { + return &genericOutputInterceptor{ + interceptedContent: make(chan string), + pipeChannel: make(chan pipePair), + shutdown: make(chan interface{}), + implementation: &dupSyscallOutputInterceptorImpl{}, + } +} + +type dupSyscallOutputInterceptorImpl struct{} + +func (impl *dupSyscallOutputInterceptorImpl) CreateStdoutStderrClones() (*os.File, *os.File) { + // To clone stdout and stderr we: + // First, create two clone file descriptors that point to the stdout and stderr file descriptions + stdoutCloneFD, _ := unix.Dup(1) + stderrCloneFD, _ := unix.Dup(2) + + // Important, set the fds to FD_CLOEXEC to prevent them leaking into childs + // https://github.com/onsi/ginkgo/issues/1191 + flags, err := unix.FcntlInt(uintptr(stdoutCloneFD), unix.F_GETFD, 0) + if err == nil { + unix.FcntlInt(uintptr(stdoutCloneFD), unix.F_SETFD, flags|unix.FD_CLOEXEC) + } + flags, err = unix.FcntlInt(uintptr(stderrCloneFD), unix.F_GETFD, 0) + if err == nil { + unix.FcntlInt(uintptr(stderrCloneFD), unix.F_SETFD, flags|unix.FD_CLOEXEC) + } + + // And then wrap the clone file descriptors in files. + // One benefit of this (that we don't use yet) is that we can actually write + // to these files to emit output to the console even though we're intercepting output + stdoutClone := os.NewFile(uintptr(stdoutCloneFD), "stdout-clone") + stderrClone := os.NewFile(uintptr(stderrCloneFD), "stderr-clone") + + //these clones remain alive throughout the lifecycle of the suite and don't need to be recreated + //this speeds things up a bit, actually. + return stdoutClone, stderrClone +} + +func (impl *dupSyscallOutputInterceptorImpl) ConnectPipeToStdoutStderr(pipeWriter *os.File) { + // To redirect output to our pipe we need to point the 1 and 2 file descriptors (which is how the world tries to log things) + // to the write end of the pipe. + // We do this with Dup2 (possibly Dup3 on some architectures) to have file descriptors 1 and 2 point to the same file description as the pipeWriter + // This effectively shunts data written to stdout and stderr to the write end of our pipe + unix.Dup2(int(pipeWriter.Fd()), 1) + unix.Dup2(int(pipeWriter.Fd()), 2) +} + +func (impl *dupSyscallOutputInterceptorImpl) RestoreStdoutStderrFromClones(stdoutClone *os.File, stderrClone *os.File) { + // To restore stdour/stderr from the clones we have the 1 and 2 file descriptors + // point to the original file descriptions that we saved off in the clones. + // This has the added benefit of closing the connection between these descriptors and the write end of the pipe + // which is important to cause the io.Copy on the pipe.Reader to end. + unix.Dup2(int(stdoutClone.Fd()), 1) + unix.Dup2(int(stderrClone.Fd()), 2) +} + +func (impl *dupSyscallOutputInterceptorImpl) ShutdownClones(stdoutClone *os.File, stderrClone *os.File) { + // We're done with the clones so we can close them to clean up after ourselves + stdoutClone.Close() + stderrClone.Close() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.go new file mode 100644 index 000000000000..30c2851a8188 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.go @@ -0,0 +1,7 @@ +// +build windows + +package internal + +func NewOutputInterceptor() OutputInterceptor { + return NewOSGlobalReassigningOutputInterceptor() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go new file mode 100644 index 000000000000..b3cd64292abb --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.go @@ -0,0 +1,72 @@ +package parallel_support + +import ( + "fmt" + "io" + "os" + "time" + + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +type BeforeSuiteState struct { + Data []byte + State types.SpecState +} + +type ParallelIndexCounter struct { + Index int +} + +var ErrorGone = fmt.Errorf("gone") +var ErrorFailed = fmt.Errorf("failed") +var ErrorEarly = fmt.Errorf("early") + +var POLLING_INTERVAL = 50 * time.Millisecond + +type Server interface { + Start() + Close() + Address() string + RegisterAlive(node int, alive func() bool) + GetSuiteDone() chan interface{} + GetOutputDestination() io.Writer + SetOutputDestination(io.Writer) +} + +type Client interface { + Connect() bool + Close() error + + PostSuiteWillBegin(report types.Report) error + PostDidRun(report types.SpecReport) error + PostSuiteDidEnd(report types.Report) error + PostReportBeforeSuiteCompleted(state types.SpecState) error + BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) + PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error + BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) + BlockUntilNonprimaryProcsHaveFinished() error + BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) + FetchNextCounter() (int, error) + PostAbort() error + ShouldAbort() bool + PostEmitProgressReport(report types.ProgressReport) error + Write(p []byte) (int, error) +} + +func NewServer(parallelTotal int, reporter reporters.Reporter) (Server, error) { + if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" { + return newHttpServer(parallelTotal, reporter) + } else { + return newRPCServer(parallelTotal, reporter) + } +} + +func NewClient(serverHost string) Client { + if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" { + return newHttpClient(serverHost) + } else { + return newRPCClient(serverHost) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go new file mode 100644 index 000000000000..6547c7a66e5b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.go @@ -0,0 +1,169 @@ +package parallel_support + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +type httpClient struct { + serverHost string +} + +func newHttpClient(serverHost string) *httpClient { + return &httpClient{ + serverHost: serverHost, + } +} + +func (client *httpClient) Connect() bool { + resp, err := http.Get(client.serverHost + "/up") + if err != nil { + return false + } + resp.Body.Close() + return resp.StatusCode == http.StatusOK +} + +func (client *httpClient) Close() error { + return nil +} + +func (client *httpClient) post(path string, data interface{}) error { + var body io.Reader + if data != nil { + encoded, err := json.Marshal(data) + if err != nil { + return err + } + body = bytes.NewBuffer(encoded) + } + resp, err := http.Post(client.serverHost+path, "application/json", body) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("received unexpected status code %d", resp.StatusCode) + } + return nil +} + +func (client *httpClient) poll(path string, data interface{}) error { + for { + resp, err := http.Get(client.serverHost + path) + if err != nil { + return err + } + if resp.StatusCode == http.StatusTooEarly { + resp.Body.Close() + time.Sleep(POLLING_INTERVAL) + continue + } + defer resp.Body.Close() + if resp.StatusCode == http.StatusGone { + return ErrorGone + } + if resp.StatusCode == http.StatusFailedDependency { + return ErrorFailed + } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("received unexpected status code %d", resp.StatusCode) + } + if data != nil { + return json.NewDecoder(resp.Body).Decode(data) + } + return nil + } +} + +func (client *httpClient) PostSuiteWillBegin(report types.Report) error { + return client.post("/suite-will-begin", report) +} + +func (client *httpClient) PostDidRun(report types.SpecReport) error { + return client.post("/did-run", report) +} + +func (client *httpClient) PostSuiteDidEnd(report types.Report) error { + return client.post("/suite-did-end", report) +} + +func (client *httpClient) PostEmitProgressReport(report types.ProgressReport) error { + return client.post("/progress-report", report) +} + +func (client *httpClient) PostReportBeforeSuiteCompleted(state types.SpecState) error { + return client.post("/report-before-suite-completed", state) +} + +func (client *httpClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) { + var state types.SpecState + err := client.poll("/report-before-suite-state", &state) + if err == ErrorGone { + return types.SpecStateFailed, nil + } + return state, err +} + +func (client *httpClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error { + beforeSuiteState := BeforeSuiteState{ + State: state, + Data: data, + } + return client.post("/before-suite-completed", beforeSuiteState) +} + +func (client *httpClient) BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) { + var beforeSuiteState BeforeSuiteState + err := client.poll("/before-suite-state", &beforeSuiteState) + if err == ErrorGone { + return types.SpecStateInvalid, nil, types.GinkgoErrors.SynchronizedBeforeSuiteDisappearedOnProc1() + } + return beforeSuiteState.State, beforeSuiteState.Data, err +} + +func (client *httpClient) BlockUntilNonprimaryProcsHaveFinished() error { + return client.poll("/have-nonprimary-procs-finished", nil) +} + +func (client *httpClient) BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) { + var report types.Report + err := client.poll("/aggregated-nonprimary-procs-report", &report) + if err == ErrorGone { + return types.Report{}, types.GinkgoErrors.AggregatedReportUnavailableDueToNodeDisappearing() + } + return report, err +} + +func (client *httpClient) FetchNextCounter() (int, error) { + var counter ParallelIndexCounter + err := client.poll("/counter", &counter) + return counter.Index, err +} + +func (client *httpClient) PostAbort() error { + return client.post("/abort", nil) +} + +func (client *httpClient) ShouldAbort() bool { + err := client.poll("/abort", nil) + if err == ErrorGone { + return true + } + return false +} + +func (client *httpClient) Write(p []byte) (int, error) { + resp, err := http.Post(client.serverHost+"/emit-output", "text/plain;charset=UTF-8 ", bytes.NewReader(p)) + resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return 0, fmt.Errorf("failed to emit output") + } + return len(p), err +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go new file mode 100644 index 000000000000..d2c71ab1b259 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.go @@ -0,0 +1,242 @@ +/* + +The remote package provides the pieces to allow Ginkgo test suites to report to remote listeners. +This is used, primarily, to enable streaming parallel test output but has, in principal, broader applications (e.g. streaming test output to a browser). + +*/ + +package parallel_support + +import ( + "encoding/json" + "io" + "net" + "net/http" + + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +/* +httpServer spins up on an automatically selected port and listens for communication from the forwarding reporter. +It then forwards that communication to attached reporters. +*/ +type httpServer struct { + listener net.Listener + handler *ServerHandler +} + +// Create a new server, automatically selecting a port +func newHttpServer(parallelTotal int, reporter reporters.Reporter) (*httpServer, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, err + } + return &httpServer{ + listener: listener, + handler: newServerHandler(parallelTotal, reporter), + }, nil +} + +// Start the server. You don't need to `go s.Start()`, just `s.Start()` +func (server *httpServer) Start() { + httpServer := &http.Server{} + mux := http.NewServeMux() + httpServer.Handler = mux + + //streaming endpoints + mux.HandleFunc("/suite-will-begin", server.specSuiteWillBegin) + mux.HandleFunc("/did-run", server.didRun) + mux.HandleFunc("/suite-did-end", server.specSuiteDidEnd) + mux.HandleFunc("/emit-output", server.emitOutput) + mux.HandleFunc("/progress-report", server.emitProgressReport) + + //synchronization endpoints + mux.HandleFunc("/report-before-suite-completed", server.handleReportBeforeSuiteCompleted) + mux.HandleFunc("/report-before-suite-state", server.handleReportBeforeSuiteState) + mux.HandleFunc("/before-suite-completed", server.handleBeforeSuiteCompleted) + mux.HandleFunc("/before-suite-state", server.handleBeforeSuiteState) + mux.HandleFunc("/have-nonprimary-procs-finished", server.handleHaveNonprimaryProcsFinished) + mux.HandleFunc("/aggregated-nonprimary-procs-report", server.handleAggregatedNonprimaryProcsReport) + mux.HandleFunc("/counter", server.handleCounter) + mux.HandleFunc("/up", server.handleUp) + mux.HandleFunc("/abort", server.handleAbort) + + go httpServer.Serve(server.listener) +} + +// Stop the server +func (server *httpServer) Close() { + server.listener.Close() +} + +// The address the server can be reached it. Pass this into the `ForwardingReporter`. +func (server *httpServer) Address() string { + return "http://" + server.listener.Addr().String() +} + +func (server *httpServer) GetSuiteDone() chan interface{} { + return server.handler.done +} + +func (server *httpServer) GetOutputDestination() io.Writer { + return server.handler.outputDestination +} + +func (server *httpServer) SetOutputDestination(w io.Writer) { + server.handler.outputDestination = w +} + +func (server *httpServer) RegisterAlive(node int, alive func() bool) { + server.handler.registerAlive(node, alive) +} + +// +// Streaming Endpoints +// + +// The server will forward all received messages to Ginkgo reporters registered with `RegisterReporters` +func (server *httpServer) decode(writer http.ResponseWriter, request *http.Request, object interface{}) bool { + defer request.Body.Close() + if json.NewDecoder(request.Body).Decode(object) != nil { + writer.WriteHeader(http.StatusBadRequest) + return false + } + return true +} + +func (server *httpServer) handleError(err error, writer http.ResponseWriter) bool { + if err == nil { + return false + } + switch err { + case ErrorEarly: + writer.WriteHeader(http.StatusTooEarly) + case ErrorGone: + writer.WriteHeader(http.StatusGone) + case ErrorFailed: + writer.WriteHeader(http.StatusFailedDependency) + default: + writer.WriteHeader(http.StatusInternalServerError) + } + return true +} + +func (server *httpServer) specSuiteWillBegin(writer http.ResponseWriter, request *http.Request) { + var report types.Report + if !server.decode(writer, request, &report) { + return + } + + server.handleError(server.handler.SpecSuiteWillBegin(report, voidReceiver), writer) +} + +func (server *httpServer) didRun(writer http.ResponseWriter, request *http.Request) { + var report types.SpecReport + if !server.decode(writer, request, &report) { + return + } + + server.handleError(server.handler.DidRun(report, voidReceiver), writer) +} + +func (server *httpServer) specSuiteDidEnd(writer http.ResponseWriter, request *http.Request) { + var report types.Report + if !server.decode(writer, request, &report) { + return + } + server.handleError(server.handler.SpecSuiteDidEnd(report, voidReceiver), writer) +} + +func (server *httpServer) emitOutput(writer http.ResponseWriter, request *http.Request) { + output, err := io.ReadAll(request.Body) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + return + } + var n int + server.handleError(server.handler.EmitOutput(output, &n), writer) +} + +func (server *httpServer) emitProgressReport(writer http.ResponseWriter, request *http.Request) { + var report types.ProgressReport + if !server.decode(writer, request, &report) { + return + } + server.handleError(server.handler.EmitProgressReport(report, voidReceiver), writer) +} + +func (server *httpServer) handleReportBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) { + var state types.SpecState + if !server.decode(writer, request, &state) { + return + } + + server.handleError(server.handler.ReportBeforeSuiteCompleted(state, voidReceiver), writer) +} + +func (server *httpServer) handleReportBeforeSuiteState(writer http.ResponseWriter, request *http.Request) { + var state types.SpecState + if server.handleError(server.handler.ReportBeforeSuiteState(voidSender, &state), writer) { + return + } + json.NewEncoder(writer).Encode(state) +} + +func (server *httpServer) handleBeforeSuiteCompleted(writer http.ResponseWriter, request *http.Request) { + var beforeSuiteState BeforeSuiteState + if !server.decode(writer, request, &beforeSuiteState) { + return + } + + server.handleError(server.handler.BeforeSuiteCompleted(beforeSuiteState, voidReceiver), writer) +} + +func (server *httpServer) handleBeforeSuiteState(writer http.ResponseWriter, request *http.Request) { + var beforeSuiteState BeforeSuiteState + if server.handleError(server.handler.BeforeSuiteState(voidSender, &beforeSuiteState), writer) { + return + } + json.NewEncoder(writer).Encode(beforeSuiteState) +} + +func (server *httpServer) handleHaveNonprimaryProcsFinished(writer http.ResponseWriter, request *http.Request) { + if server.handleError(server.handler.HaveNonprimaryProcsFinished(voidSender, voidReceiver), writer) { + return + } + writer.WriteHeader(http.StatusOK) +} + +func (server *httpServer) handleAggregatedNonprimaryProcsReport(writer http.ResponseWriter, request *http.Request) { + var aggregatedReport types.Report + if server.handleError(server.handler.AggregatedNonprimaryProcsReport(voidSender, &aggregatedReport), writer) { + return + } + json.NewEncoder(writer).Encode(aggregatedReport) +} + +func (server *httpServer) handleCounter(writer http.ResponseWriter, request *http.Request) { + var n int + if server.handleError(server.handler.Counter(voidSender, &n), writer) { + return + } + json.NewEncoder(writer).Encode(ParallelIndexCounter{Index: n}) +} + +func (server *httpServer) handleUp(writer http.ResponseWriter, request *http.Request) { + writer.WriteHeader(http.StatusOK) +} + +func (server *httpServer) handleAbort(writer http.ResponseWriter, request *http.Request) { + if request.Method == "GET" { + var shouldAbort bool + server.handler.ShouldAbort(voidSender, &shouldAbort) + if shouldAbort { + writer.WriteHeader(http.StatusGone) + } else { + writer.WriteHeader(http.StatusOK) + } + } else { + server.handler.Abort(voidSender, voidReceiver) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go new file mode 100644 index 000000000000..59e8e6fd0a6f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.go @@ -0,0 +1,136 @@ +package parallel_support + +import ( + "net/rpc" + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +type rpcClient struct { + serverHost string + client *rpc.Client +} + +func newRPCClient(serverHost string) *rpcClient { + return &rpcClient{ + serverHost: serverHost, + } +} + +func (client *rpcClient) Connect() bool { + var err error + if client.client != nil { + return true + } + client.client, err = rpc.DialHTTPPath("tcp", client.serverHost, "/") + if err != nil { + client.client = nil + return false + } + return true +} + +func (client *rpcClient) Close() error { + return client.client.Close() +} + +func (client *rpcClient) poll(method string, data interface{}) error { + for { + err := client.client.Call(method, voidSender, data) + if err == nil { + return nil + } + switch err.Error() { + case ErrorEarly.Error(): + time.Sleep(POLLING_INTERVAL) + case ErrorGone.Error(): + return ErrorGone + case ErrorFailed.Error(): + return ErrorFailed + default: + return err + } + } +} + +func (client *rpcClient) PostSuiteWillBegin(report types.Report) error { + return client.client.Call("Server.SpecSuiteWillBegin", report, voidReceiver) +} + +func (client *rpcClient) PostDidRun(report types.SpecReport) error { + return client.client.Call("Server.DidRun", report, voidReceiver) +} + +func (client *rpcClient) PostSuiteDidEnd(report types.Report) error { + return client.client.Call("Server.SpecSuiteDidEnd", report, voidReceiver) +} + +func (client *rpcClient) Write(p []byte) (int, error) { + var n int + err := client.client.Call("Server.EmitOutput", p, &n) + return n, err +} + +func (client *rpcClient) PostEmitProgressReport(report types.ProgressReport) error { + return client.client.Call("Server.EmitProgressReport", report, voidReceiver) +} + +func (client *rpcClient) PostReportBeforeSuiteCompleted(state types.SpecState) error { + return client.client.Call("Server.ReportBeforeSuiteCompleted", state, voidReceiver) +} + +func (client *rpcClient) BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error) { + var state types.SpecState + err := client.poll("Server.ReportBeforeSuiteState", &state) + if err == ErrorGone { + return types.SpecStateFailed, nil + } + return state, err +} + +func (client *rpcClient) PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error { + beforeSuiteState := BeforeSuiteState{ + State: state, + Data: data, + } + return client.client.Call("Server.BeforeSuiteCompleted", beforeSuiteState, voidReceiver) +} + +func (client *rpcClient) BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) { + var beforeSuiteState BeforeSuiteState + err := client.poll("Server.BeforeSuiteState", &beforeSuiteState) + if err == ErrorGone { + return types.SpecStateInvalid, nil, types.GinkgoErrors.SynchronizedBeforeSuiteDisappearedOnProc1() + } + return beforeSuiteState.State, beforeSuiteState.Data, err +} + +func (client *rpcClient) BlockUntilNonprimaryProcsHaveFinished() error { + return client.poll("Server.HaveNonprimaryProcsFinished", voidReceiver) +} + +func (client *rpcClient) BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) { + var report types.Report + err := client.poll("Server.AggregatedNonprimaryProcsReport", &report) + if err == ErrorGone { + return types.Report{}, types.GinkgoErrors.AggregatedReportUnavailableDueToNodeDisappearing() + } + return report, err +} + +func (client *rpcClient) FetchNextCounter() (int, error) { + var counter int + err := client.client.Call("Server.Counter", voidSender, &counter) + return counter, err +} + +func (client *rpcClient) PostAbort() error { + return client.client.Call("Server.Abort", voidSender, voidReceiver) +} + +func (client *rpcClient) ShouldAbort() bool { + var shouldAbort bool + client.client.Call("Server.ShouldAbort", voidSender, &shouldAbort) + return shouldAbort +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.go new file mode 100644 index 000000000000..2620fd562d38 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.go @@ -0,0 +1,75 @@ +/* + +The remote package provides the pieces to allow Ginkgo test suites to report to remote listeners. +This is used, primarily, to enable streaming parallel test output but has, in principal, broader applications (e.g. streaming test output to a browser). + +*/ + +package parallel_support + +import ( + "io" + "net" + "net/http" + "net/rpc" + + "github.com/onsi/ginkgo/v2/reporters" +) + +/* +RPCServer spins up on an automatically selected port and listens for communication from the forwarding reporter. +It then forwards that communication to attached reporters. +*/ +type RPCServer struct { + listener net.Listener + handler *ServerHandler +} + +//Create a new server, automatically selecting a port +func newRPCServer(parallelTotal int, reporter reporters.Reporter) (*RPCServer, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, err + } + return &RPCServer{ + listener: listener, + handler: newServerHandler(parallelTotal, reporter), + }, nil +} + +//Start the server. You don't need to `go s.Start()`, just `s.Start()` +func (server *RPCServer) Start() { + rpcServer := rpc.NewServer() + rpcServer.RegisterName("Server", server.handler) //register the handler's methods as the server + + httpServer := &http.Server{} + httpServer.Handler = rpcServer + + go httpServer.Serve(server.listener) +} + +//Stop the server +func (server *RPCServer) Close() { + server.listener.Close() +} + +//The address the server can be reached it. Pass this into the `ForwardingReporter`. +func (server *RPCServer) Address() string { + return server.listener.Addr().String() +} + +func (server *RPCServer) GetSuiteDone() chan interface{} { + return server.handler.done +} + +func (server *RPCServer) GetOutputDestination() io.Writer { + return server.handler.outputDestination +} + +func (server *RPCServer) SetOutputDestination(w io.Writer) { + server.handler.outputDestination = w +} + +func (server *RPCServer) RegisterAlive(node int, alive func() bool) { + server.handler.registerAlive(node, alive) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go new file mode 100644 index 000000000000..a6d98793e9fc --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.go @@ -0,0 +1,234 @@ +package parallel_support + +import ( + "io" + "os" + "sync" + + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +type Void struct{} + +var voidReceiver *Void = &Void{} +var voidSender Void + +// ServerHandler is an RPC-compatible handler that is shared between the http server and the rpc server. +// It handles all the business logic to avoid duplication between the two servers + +type ServerHandler struct { + done chan interface{} + outputDestination io.Writer + reporter reporters.Reporter + alives []func() bool + lock *sync.Mutex + beforeSuiteState BeforeSuiteState + reportBeforeSuiteState types.SpecState + parallelTotal int + counter int + counterLock *sync.Mutex + shouldAbort bool + + numSuiteDidBegins int + numSuiteDidEnds int + aggregatedReport types.Report + reportHoldingArea []types.SpecReport +} + +func newServerHandler(parallelTotal int, reporter reporters.Reporter) *ServerHandler { + return &ServerHandler{ + reporter: reporter, + lock: &sync.Mutex{}, + counterLock: &sync.Mutex{}, + alives: make([]func() bool, parallelTotal), + beforeSuiteState: BeforeSuiteState{Data: nil, State: types.SpecStateInvalid}, + + parallelTotal: parallelTotal, + outputDestination: os.Stdout, + done: make(chan interface{}), + } +} + +func (handler *ServerHandler) SpecSuiteWillBegin(report types.Report, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + + handler.numSuiteDidBegins += 1 + + // all summaries are identical, so it's fine to simply emit the last one of these + if handler.numSuiteDidBegins == handler.parallelTotal { + handler.reporter.SuiteWillBegin(report) + + for _, summary := range handler.reportHoldingArea { + handler.reporter.WillRun(summary) + handler.reporter.DidRun(summary) + } + + handler.reportHoldingArea = nil + } + + return nil +} + +func (handler *ServerHandler) DidRun(report types.SpecReport, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + + if handler.numSuiteDidBegins == handler.parallelTotal { + handler.reporter.WillRun(report) + handler.reporter.DidRun(report) + } else { + handler.reportHoldingArea = append(handler.reportHoldingArea, report) + } + + return nil +} + +func (handler *ServerHandler) SpecSuiteDidEnd(report types.Report, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + + handler.numSuiteDidEnds += 1 + if handler.numSuiteDidEnds == 1 { + handler.aggregatedReport = report + } else { + handler.aggregatedReport = handler.aggregatedReport.Add(report) + } + + if handler.numSuiteDidEnds == handler.parallelTotal { + handler.reporter.SuiteDidEnd(handler.aggregatedReport) + close(handler.done) + } + + return nil +} + +func (handler *ServerHandler) EmitOutput(output []byte, n *int) error { + var err error + *n, err = handler.outputDestination.Write(output) + return err +} + +func (handler *ServerHandler) EmitProgressReport(report types.ProgressReport, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.reporter.EmitProgressReport(report) + return nil +} + +func (handler *ServerHandler) registerAlive(proc int, alive func() bool) { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.alives[proc-1] = alive +} + +func (handler *ServerHandler) procIsAlive(proc int) bool { + handler.lock.Lock() + defer handler.lock.Unlock() + alive := handler.alives[proc-1] + if alive == nil { + return true + } + return alive() +} + +func (handler *ServerHandler) haveNonprimaryProcsFinished() bool { + for i := 2; i <= handler.parallelTotal; i++ { + if handler.procIsAlive(i) { + return false + } + } + return true +} + +func (handler *ServerHandler) ReportBeforeSuiteCompleted(reportBeforeSuiteState types.SpecState, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.reportBeforeSuiteState = reportBeforeSuiteState + + return nil +} + +func (handler *ServerHandler) ReportBeforeSuiteState(_ Void, reportBeforeSuiteState *types.SpecState) error { + proc1IsAlive := handler.procIsAlive(1) + handler.lock.Lock() + defer handler.lock.Unlock() + if handler.reportBeforeSuiteState == types.SpecStateInvalid { + if proc1IsAlive { + return ErrorEarly + } else { + return ErrorGone + } + } + *reportBeforeSuiteState = handler.reportBeforeSuiteState + return nil +} + +func (handler *ServerHandler) BeforeSuiteCompleted(beforeSuiteState BeforeSuiteState, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.beforeSuiteState = beforeSuiteState + + return nil +} + +func (handler *ServerHandler) BeforeSuiteState(_ Void, beforeSuiteState *BeforeSuiteState) error { + proc1IsAlive := handler.procIsAlive(1) + handler.lock.Lock() + defer handler.lock.Unlock() + if handler.beforeSuiteState.State == types.SpecStateInvalid { + if proc1IsAlive { + return ErrorEarly + } else { + return ErrorGone + } + } + *beforeSuiteState = handler.beforeSuiteState + return nil +} + +func (handler *ServerHandler) HaveNonprimaryProcsFinished(_ Void, _ *Void) error { + if handler.haveNonprimaryProcsFinished() { + return nil + } else { + return ErrorEarly + } +} + +func (handler *ServerHandler) AggregatedNonprimaryProcsReport(_ Void, report *types.Report) error { + if handler.haveNonprimaryProcsFinished() { + handler.lock.Lock() + defer handler.lock.Unlock() + if handler.numSuiteDidEnds == handler.parallelTotal-1 { + *report = handler.aggregatedReport + return nil + } else { + return ErrorGone + } + } else { + return ErrorEarly + } +} + +func (handler *ServerHandler) Counter(_ Void, counter *int) error { + handler.counterLock.Lock() + defer handler.counterLock.Unlock() + *counter = handler.counter + handler.counter++ + return nil +} + +func (handler *ServerHandler) Abort(_ Void, _ *Void) error { + handler.lock.Lock() + defer handler.lock.Unlock() + handler.shouldAbort = true + return nil +} + +func (handler *ServerHandler) ShouldAbort(_ Void, shouldAbort *bool) error { + handler.lock.Lock() + defer handler.lock.Unlock() + *shouldAbort = handler.shouldAbort + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go new file mode 100644 index 000000000000..11269cf1f242 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go @@ -0,0 +1,287 @@ +package internal + +import ( + "bufio" + "bytes" + "context" + "fmt" + "io" + "os" + "os/signal" + "path/filepath" + "runtime" + "strconv" + "strings" + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +var _SOURCE_CACHE = map[string][]string{} + +type ProgressSignalRegistrar func(func()) context.CancelFunc + +func RegisterForProgressSignal(handler func()) context.CancelFunc { + signalChannel := make(chan os.Signal, 1) + if len(PROGRESS_SIGNALS) > 0 { + signal.Notify(signalChannel, PROGRESS_SIGNALS...) + } + ctx, cancel := context.WithCancel(context.Background()) + go func() { + for { + select { + case <-signalChannel: + handler() + case <-ctx.Done(): + signal.Stop(signalChannel) + return + } + } + }() + + return cancel +} + +type ProgressStepCursor struct { + Text string + CodeLocation types.CodeLocation + StartTime time.Time +} + +func NewProgressReport(isRunningInParallel bool, report types.SpecReport, currentNode Node, currentNodeStartTime time.Time, currentStep types.SpecEvent, gwOutput string, timelineLocation types.TimelineLocation, additionalReports []string, sourceRoots []string, includeAll bool) (types.ProgressReport, error) { + pr := types.ProgressReport{ + ParallelProcess: report.ParallelProcess, + RunningInParallel: isRunningInParallel, + ContainerHierarchyTexts: report.ContainerHierarchyTexts, + LeafNodeText: report.LeafNodeText, + LeafNodeLocation: report.LeafNodeLocation, + SpecStartTime: report.StartTime, + + CurrentNodeType: currentNode.NodeType, + CurrentNodeText: currentNode.Text, + CurrentNodeLocation: currentNode.CodeLocation, + CurrentNodeStartTime: currentNodeStartTime, + + CurrentStepText: currentStep.Message, + CurrentStepLocation: currentStep.CodeLocation, + CurrentStepStartTime: currentStep.TimelineLocation.Time, + + AdditionalReports: additionalReports, + + CapturedGinkgoWriterOutput: gwOutput, + TimelineLocation: timelineLocation, + } + + goroutines, err := extractRunningGoroutines() + if err != nil { + return pr, err + } + pr.Goroutines = goroutines + + // now we want to try to find goroutines of interest. these will be goroutines that have any function calls with code in packagesOfInterest: + packagesOfInterest := map[string]bool{} + packageFromFilename := func(filename string) string { + return filepath.Dir(filename) + } + addPackageFor := func(filename string) { + if filename != "" { + packagesOfInterest[packageFromFilename(filename)] = true + } + } + isPackageOfInterest := func(filename string) bool { + stackPackage := packageFromFilename(filename) + for packageOfInterest := range packagesOfInterest { + if strings.HasPrefix(stackPackage, packageOfInterest) { + return true + } + } + return false + } + for _, location := range report.ContainerHierarchyLocations { + addPackageFor(location.FileName) + } + addPackageFor(report.LeafNodeLocation.FileName) + addPackageFor(currentNode.CodeLocation.FileName) + addPackageFor(currentStep.CodeLocation.FileName) + + //First, we find the SpecGoroutine - this will be the goroutine that includes `runNode` + specGoRoutineIdx := -1 + runNodeFunctionCallIdx := -1 +OUTER: + for goroutineIdx, goroutine := range pr.Goroutines { + for functionCallIdx, functionCall := range goroutine.Stack { + if strings.Contains(functionCall.Function, "ginkgo/v2/internal.(*Suite).runNode.func") { + specGoRoutineIdx = goroutineIdx + runNodeFunctionCallIdx = functionCallIdx + break OUTER + } + } + } + + //Now, we find the first non-Ginkgo function call + if specGoRoutineIdx > -1 { + for runNodeFunctionCallIdx >= 0 { + fn := goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Function + file := goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Filename + // these are all things that could potentially happen from within ginkgo + if strings.Contains(fn, "ginkgo/v2/internal") || strings.Contains(fn, "reflect.Value") || strings.Contains(file, "ginkgo/table_dsl") || strings.Contains(file, "ginkgo/core_dsl") { + runNodeFunctionCallIdx-- + continue + } + if strings.Contains(goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Function, "ginkgo/table_dsl") { + + } + //found it! lets add its package of interest + addPackageFor(goroutines[specGoRoutineIdx].Stack[runNodeFunctionCallIdx].Filename) + break + } + } + + ginkgoEntryPointIdx := -1 +OUTER_GINKGO_ENTRY_POINT: + for goroutineIdx, goroutine := range pr.Goroutines { + for _, functionCall := range goroutine.Stack { + if strings.Contains(functionCall.Function, "ginkgo/v2.RunSpecs") { + ginkgoEntryPointIdx = goroutineIdx + break OUTER_GINKGO_ENTRY_POINT + } + } + } + + // Now we go through all goroutines and highlight any lines with packages in `packagesOfInterest` + // Any goroutines with highlighted lines end up in the HighlightGoRoutines + for goroutineIdx, goroutine := range pr.Goroutines { + if goroutineIdx == ginkgoEntryPointIdx { + continue + } + if goroutineIdx == specGoRoutineIdx { + pr.Goroutines[goroutineIdx].IsSpecGoroutine = true + } + for functionCallIdx, functionCall := range goroutine.Stack { + if isPackageOfInterest(functionCall.Filename) { + goroutine.Stack[functionCallIdx].Highlight = true + goroutine.Stack[functionCallIdx].Source, goroutine.Stack[functionCallIdx].SourceHighlight = fetchSource(functionCall.Filename, functionCall.Line, 2, sourceRoots) + } + } + } + + if !includeAll { + goroutines := []types.Goroutine{pr.SpecGoroutine()} + goroutines = append(goroutines, pr.HighlightedGoroutines()...) + pr.Goroutines = goroutines + } + + return pr, nil +} + +func extractRunningGoroutines() ([]types.Goroutine, error) { + var stack []byte + for size := 64 * 1024; ; size *= 2 { + stack = make([]byte, size) + if n := runtime.Stack(stack, true); n < size { + stack = stack[:n] + break + } + } + r := bufio.NewReader(bytes.NewReader(stack)) + out := []types.Goroutine{} + idx := -1 + for { + line, err := r.ReadString('\n') + if err == io.EOF { + break + } + + line = strings.TrimSuffix(line, "\n") + + //skip blank lines + if line == "" { + continue + } + + //parse headers for new goroutine frames + if strings.HasPrefix(line, "goroutine") { + out = append(out, types.Goroutine{}) + idx = len(out) - 1 + + line = strings.TrimPrefix(line, "goroutine ") + line = strings.TrimSuffix(line, ":") + fields := strings.SplitN(line, " ", 2) + if len(fields) != 2 { + return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid goroutine frame header: %s", line)) + } + out[idx].ID, err = strconv.ParseUint(fields[0], 10, 64) + if err != nil { + return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid goroutine ID: %s", fields[1])) + } + + out[idx].State = strings.TrimSuffix(strings.TrimPrefix(fields[1], "["), "]") + continue + } + + //if we are here we must be at a function call entry in the stack + functionCall := types.FunctionCall{ + Function: strings.TrimPrefix(line, "created by "), // no need to track 'created by' + } + + line, err = r.ReadString('\n') + line = strings.TrimSuffix(line, "\n") + if err == io.EOF { + return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid function call: %s -- missing file name and line number", functionCall.Function)) + } + line = strings.TrimLeft(line, " \t") + delimiterIdx := strings.LastIndex(line, ":") + if delimiterIdx == -1 { + return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid filename and line number: %s", line)) + } + functionCall.Filename = line[:delimiterIdx] + line = strings.Split(line[delimiterIdx+1:], " ")[0] + lineNumber, err := strconv.ParseInt(line, 10, 64) + functionCall.Line = int(lineNumber) + if err != nil { + return nil, types.GinkgoErrors.FailedToParseStackTrace(fmt.Sprintf("Invalid function call line number: %s\n%s", line, err.Error())) + } + out[idx].Stack = append(out[idx].Stack, functionCall) + } + + return out, nil +} + +func fetchSource(filename string, lineNumber int, span int, configuredSourceRoots []string) ([]string, int) { + if filename == "" { + return []string{}, 0 + } + + var lines []string + var ok bool + if lines, ok = _SOURCE_CACHE[filename]; !ok { + sourceRoots := []string{""} + sourceRoots = append(sourceRoots, configuredSourceRoots...) + var data []byte + var err error + var found bool + for _, root := range sourceRoots { + data, err = os.ReadFile(filepath.Join(root, filename)) + if err == nil { + found = true + break + } + } + if !found { + return []string{}, 0 + } + lines = strings.Split(string(data), "\n") + _SOURCE_CACHE[filename] = lines + } + + startIndex := lineNumber - span - 1 + endIndex := startIndex + span + span + 1 + if startIndex < 0 { + startIndex = 0 + } + if endIndex > len(lines) { + endIndex = len(lines) + } + highlightIndex := lineNumber - 1 - startIndex + return lines[startIndex:endIndex], highlightIndex +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.go new file mode 100644 index 000000000000..61e0ed306671 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.go @@ -0,0 +1,11 @@ +//go:build freebsd || openbsd || netbsd || darwin || dragonfly +// +build freebsd openbsd netbsd darwin dragonfly + +package internal + +import ( + "os" + "syscall" +) + +var PROGRESS_SIGNALS = []os.Signal{syscall.SIGINFO, syscall.SIGUSR1} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.go new file mode 100644 index 000000000000..ad30de459da2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.go @@ -0,0 +1,11 @@ +//go:build linux || solaris +// +build linux solaris + +package internal + +import ( + "os" + "syscall" +) + +var PROGRESS_SIGNALS = []os.Signal{syscall.SIGUSR1} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.go new file mode 100644 index 000000000000..0eca2516adb8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.go @@ -0,0 +1,8 @@ +//go:build windows +// +build windows + +package internal + +import "os" + +var PROGRESS_SIGNALS = []os.Signal{} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.go new file mode 100644 index 000000000000..2c6e260f7d7f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.go @@ -0,0 +1,79 @@ +package internal + +import ( + "context" + "sort" + "strings" + "sync" + + "github.com/onsi/ginkgo/v2/types" +) + +type ProgressReporterManager struct { + lock *sync.Mutex + progressReporters map[int]func() string + prCounter int +} + +func NewProgressReporterManager() *ProgressReporterManager { + return &ProgressReporterManager{ + progressReporters: map[int]func() string{}, + lock: &sync.Mutex{}, + } +} + +func (prm *ProgressReporterManager) AttachProgressReporter(reporter func() string) func() { + prm.lock.Lock() + defer prm.lock.Unlock() + prm.prCounter += 1 + prCounter := prm.prCounter + prm.progressReporters[prCounter] = reporter + + return func() { + prm.lock.Lock() + defer prm.lock.Unlock() + delete(prm.progressReporters, prCounter) + } +} + +func (prm *ProgressReporterManager) QueryProgressReporters(ctx context.Context, failer *Failer) []string { + prm.lock.Lock() + keys := []int{} + for key := range prm.progressReporters { + keys = append(keys, key) + } + sort.Ints(keys) + reporters := []func() string{} + for _, key := range keys { + reporters = append(reporters, prm.progressReporters[key]) + } + prm.lock.Unlock() + + if len(reporters) == 0 { + return nil + } + out := []string{} + for _, reporter := range reporters { + reportC := make(chan string, 1) + go func() { + defer func() { + e := recover() + if e != nil { + failer.Panic(types.NewCodeLocationWithStackTrace(1), e) + reportC <- "failed to query attached progress reporter" + } + }() + reportC <- reporter() + }() + var report string + select { + case report = <-reportC: + case <-ctx.Done(): + return out + } + if strings.TrimSpace(report) != "" { + out = append(out, report) + } + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/report_entry.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/report_entry.go new file mode 100644 index 000000000000..cc351a39bd62 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/report_entry.go @@ -0,0 +1,39 @@ +package internal + +import ( + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +type ReportEntry = types.ReportEntry + +func NewReportEntry(name string, cl types.CodeLocation, args ...interface{}) (ReportEntry, error) { + out := ReportEntry{ + Visibility: types.ReportEntryVisibilityAlways, + Name: name, + Location: cl, + Time: time.Now(), + } + var didSetValue = false + for _, arg := range args { + switch x := arg.(type) { + case types.ReportEntryVisibility: + out.Visibility = x + case types.CodeLocation: + out.Location = x + case Offset: + out.Location = types.NewCodeLocation(2 + int(x)) + case time.Time: + out.Time = x + default: + if didSetValue { + return ReportEntry{}, types.GinkgoErrors.TooManyReportEntryValues(out.Location, arg) + } + out.Value = types.WrapEntryValue(arg) + didSetValue = true + } + } + + return out, nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec.go new file mode 100644 index 000000000000..7c4ee5bb7f1d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec.go @@ -0,0 +1,87 @@ +package internal + +import ( + "strings" + "time" + + "github.com/onsi/ginkgo/v2/types" +) + +type Spec struct { + Nodes Nodes + Skip bool +} + +func (s Spec) SubjectID() uint { + return s.Nodes.FirstNodeWithType(types.NodeTypeIt).ID +} + +func (s Spec) Text() string { + texts := []string{} + for i := range s.Nodes { + if s.Nodes[i].Text != "" { + texts = append(texts, s.Nodes[i].Text) + } + } + return strings.Join(texts, " ") +} + +func (s Spec) FirstNodeWithType(nodeTypes types.NodeType) Node { + return s.Nodes.FirstNodeWithType(nodeTypes) +} + +func (s Spec) FlakeAttempts() int { + flakeAttempts := 0 + for i := range s.Nodes { + if s.Nodes[i].FlakeAttempts > 0 { + flakeAttempts = s.Nodes[i].FlakeAttempts + } + } + + return flakeAttempts +} + +func (s Spec) MustPassRepeatedly() int { + mustPassRepeatedly := 0 + for i := range s.Nodes { + if s.Nodes[i].MustPassRepeatedly > 0 { + mustPassRepeatedly = s.Nodes[i].MustPassRepeatedly + } + } + + return mustPassRepeatedly +} + +func (s Spec) SpecTimeout() time.Duration { + return s.FirstNodeWithType(types.NodeTypeIt).SpecTimeout +} + +type Specs []Spec + +func (s Specs) HasAnySpecsMarkedPending() bool { + for i := range s { + if s[i].Nodes.HasNodeMarkedPending() { + return true + } + } + + return false +} + +func (s Specs) CountWithoutSkip() int { + n := 0 + for i := range s { + if !s[i].Skip { + n += 1 + } + } + return n +} + +func (s Specs) AtIndices(indices SpecIndices) Specs { + out := make(Specs, len(indices)) + for i, idx := range indices { + out[i] = s[idx] + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go new file mode 100644 index 000000000000..2515b84a140c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go @@ -0,0 +1,47 @@ +package internal + +import ( + "context" + + "github.com/onsi/ginkgo/v2/types" +) + +type SpecContext interface { + context.Context + + SpecReport() types.SpecReport + AttachProgressReporter(func() string) func() +} + +type specContext struct { + context.Context + *ProgressReporterManager + + cancel context.CancelFunc + + suite *Suite +} + +/* +SpecContext includes a reference to `suite` and embeds itself in itself as a "GINKGO_SPEC_CONTEXT" value. This allows users to create child Contexts without having down-stream consumers (e.g. Gomega) lose access to the SpecContext and its methods. This allows us to build extensions on top of Ginkgo that simply take an all-encompassing context. + +Note that while SpecContext is used to enforce deadlines by Ginkgo it is not configured as a context.WithDeadline. Instead, Ginkgo owns responsibility for cancelling the context when the deadline elapses. + +This is because Ginkgo needs finer control over when the context is canceled. Specifically, Ginkgo needs to generate a ProgressReport before it cancels the context to ensure progress is captured where the spec is currently running. The only way to avoid a race here is to manually control the cancellation. +*/ +func NewSpecContext(suite *Suite) *specContext { + ctx, cancel := context.WithCancel(context.Background()) + sc := &specContext{ + cancel: cancel, + suite: suite, + ProgressReporterManager: NewProgressReporterManager(), + } + ctx = context.WithValue(ctx, "GINKGO_SPEC_CONTEXT", sc) //yes, yes, the go docs say don't use a string for a key... but we'd rather avoid a circular dependency between Gomega and Ginkgo + sc.Context = ctx //thank goodness for garbage collectors that can handle circular dependencies + + return sc +} + +func (sc *specContext) SpecReport() types.SpecReport { + return sc.suite.CurrentSpecReport() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go new file mode 100644 index 000000000000..60c913d8971d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go @@ -0,0 +1,1015 @@ +package internal + +import ( + "fmt" + "sync" + "time" + + "github.com/onsi/ginkgo/v2/internal/interrupt_handler" + "github.com/onsi/ginkgo/v2/internal/parallel_support" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" + "golang.org/x/net/context" +) + +type Phase uint + +const ( + PhaseBuildTopLevel Phase = iota + PhaseBuildTree + PhaseRun +) + +var PROGRESS_REPORTER_DEADLING = 5 * time.Second + +type Suite struct { + tree *TreeNode + topLevelContainers Nodes + + *ProgressReporterManager + + phase Phase + + suiteNodes Nodes + cleanupNodes Nodes + + failer *Failer + reporter reporters.Reporter + writer WriterInterface + outputInterceptor OutputInterceptor + interruptHandler interrupt_handler.InterruptHandlerInterface + config types.SuiteConfig + deadline time.Time + + skipAll bool + report types.Report + currentSpecReport types.SpecReport + currentNode Node + currentNodeStartTime time.Time + + currentSpecContext *specContext + + currentByStep types.SpecEvent + timelineOrder int + + /* + We don't need to lock around all operations. Just those that *could* happen concurrently. + + Suite, generally, only runs one node at a time - and so the possibiity for races is small. In fact, the presence of a race usually indicates the user has launched a goroutine that has leaked past the node it was launched in. + + However, there are some operations that can happen concurrently: + + - AddReportEntry and CurrentSpecReport can be accessed at any point by the user - including in goroutines that outlive the node intentionally (see, e.g. #1020). They both form a self-contained read-write pair and so a lock in them is sufficent. + - generateProgressReport can be invoked at any point in time by an interrupt or a progres poll. Moreover, it requires access to currentSpecReport, currentNode, currentNodeStartTime, and progressStepCursor. To make it threadsafe we need to lock around generateProgressReport when we read those variables _and_ everywhere those variables are *written*. In general we don't need to worry about all possible field writes to these variables as what `generateProgressReport` does with these variables is fairly selective (hence the name of the lock). Specifically, we dont' need to lock around state and failure message changes on `currentSpecReport` - just the setting of the variable itself. + */ + selectiveLock *sync.Mutex + + client parallel_support.Client +} + +func NewSuite() *Suite { + return &Suite{ + tree: &TreeNode{}, + phase: PhaseBuildTopLevel, + ProgressReporterManager: NewProgressReporterManager(), + + selectiveLock: &sync.Mutex{}, + } +} + +func (suite *Suite) BuildTree() error { + // During PhaseBuildTopLevel, the top level containers are stored in suite.topLevelCotainers and entered + // We now enter PhaseBuildTree where these top level containers are entered and added to the spec tree + suite.phase = PhaseBuildTree + for _, topLevelContainer := range suite.topLevelContainers { + err := suite.PushNode(topLevelContainer) + if err != nil { + return err + } + } + return nil +} + +func (suite *Suite) Run(description string, suiteLabels Labels, suitePath string, failer *Failer, reporter reporters.Reporter, writer WriterInterface, outputInterceptor OutputInterceptor, interruptHandler interrupt_handler.InterruptHandlerInterface, client parallel_support.Client, progressSignalRegistrar ProgressSignalRegistrar, suiteConfig types.SuiteConfig) (bool, bool) { + if suite.phase != PhaseBuildTree { + panic("cannot run before building the tree = call suite.BuildTree() first") + } + ApplyNestedFocusPolicyToTree(suite.tree) + specs := GenerateSpecsFromTreeRoot(suite.tree) + specs, hasProgrammaticFocus := ApplyFocusToSpecs(specs, description, suiteLabels, suiteConfig) + + suite.phase = PhaseRun + suite.client = client + suite.failer = failer + suite.reporter = reporter + suite.writer = writer + suite.outputInterceptor = outputInterceptor + suite.interruptHandler = interruptHandler + suite.config = suiteConfig + + if suite.config.Timeout > 0 { + suite.deadline = time.Now().Add(suite.config.Timeout) + } + + cancelProgressHandler := progressSignalRegistrar(suite.handleProgressSignal) + + success := suite.runSpecs(description, suiteLabels, suitePath, hasProgrammaticFocus, specs) + + cancelProgressHandler() + + return success, hasProgrammaticFocus +} + +func (suite *Suite) InRunPhase() bool { + return suite.phase == PhaseRun +} + +/* + Tree Construction methods + + PushNode is used during PhaseBuildTopLevel and PhaseBuildTree +*/ + +func (suite *Suite) PushNode(node Node) error { + if node.NodeType.Is(types.NodeTypeCleanupInvalid | types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll | types.NodeTypeCleanupAfterSuite) { + return suite.pushCleanupNode(node) + } + + if node.NodeType.Is(types.NodeTypeBeforeSuite | types.NodeTypeAfterSuite | types.NodeTypeSynchronizedBeforeSuite | types.NodeTypeSynchronizedAfterSuite | types.NodeTypeBeforeSuite | types.NodeTypeReportBeforeSuite | types.NodeTypeReportAfterSuite) { + return suite.pushSuiteNode(node) + } + + if suite.phase == PhaseRun { + return types.GinkgoErrors.PushingNodeInRunPhase(node.NodeType, node.CodeLocation) + } + + if node.MarkedSerial { + firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered() + if !firstOrderedNode.IsZero() && !firstOrderedNode.MarkedSerial { + return types.GinkgoErrors.InvalidSerialNodeInNonSerialOrderedContainer(node.CodeLocation, node.NodeType) + } + } + + if node.NodeType.Is(types.NodeTypeBeforeAll | types.NodeTypeAfterAll) { + firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered() + if firstOrderedNode.IsZero() { + return types.GinkgoErrors.SetupNodeNotInOrderedContainer(node.CodeLocation, node.NodeType) + } + } + + if node.MarkedContinueOnFailure { + firstOrderedNode := suite.tree.AncestorNodeChain().FirstNodeMarkedOrdered() + if !firstOrderedNode.IsZero() { + return types.GinkgoErrors.InvalidContinueOnFailureDecoration(node.CodeLocation) + } + } + + if node.NodeType == types.NodeTypeContainer { + // During PhaseBuildTopLevel we only track the top level containers without entering them + // We only enter the top level container nodes during PhaseBuildTree + // + // This ensures the tree is only constructed after `go spec` has called `flag.Parse()` and gives + // the user an opportunity to load suiteConfiguration information in the `TestX` go spec hook just before `RunSpecs` + // is invoked. This makes the lifecycle easier to reason about and solves issues like #693. + if suite.phase == PhaseBuildTopLevel { + suite.topLevelContainers = append(suite.topLevelContainers, node) + return nil + } + if suite.phase == PhaseBuildTree { + parentTree := suite.tree + suite.tree = &TreeNode{Node: node} + parentTree.AppendChild(suite.tree) + err := func() (err error) { + defer func() { + if e := recover(); e != nil { + err = types.GinkgoErrors.CaughtPanicDuringABuildPhase(e, node.CodeLocation) + } + }() + node.Body(nil) + return err + }() + suite.tree = parentTree + return err + } + } else { + suite.tree.AppendChild(&TreeNode{Node: node}) + return nil + } + + return nil +} + +func (suite *Suite) pushSuiteNode(node Node) error { + if suite.phase == PhaseBuildTree { + return types.GinkgoErrors.SuiteNodeInNestedContext(node.NodeType, node.CodeLocation) + } + + if suite.phase == PhaseRun { + return types.GinkgoErrors.SuiteNodeDuringRunPhase(node.NodeType, node.CodeLocation) + } + + switch node.NodeType { + case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite: + existingBefores := suite.suiteNodes.WithType(types.NodeTypeBeforeSuite | types.NodeTypeSynchronizedBeforeSuite) + if len(existingBefores) > 0 { + return types.GinkgoErrors.MultipleBeforeSuiteNodes(node.NodeType, node.CodeLocation, existingBefores[0].NodeType, existingBefores[0].CodeLocation) + } + case types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite: + existingAfters := suite.suiteNodes.WithType(types.NodeTypeAfterSuite | types.NodeTypeSynchronizedAfterSuite) + if len(existingAfters) > 0 { + return types.GinkgoErrors.MultipleAfterSuiteNodes(node.NodeType, node.CodeLocation, existingAfters[0].NodeType, existingAfters[0].CodeLocation) + } + } + + suite.suiteNodes = append(suite.suiteNodes, node) + return nil +} + +func (suite *Suite) pushCleanupNode(node Node) error { + if suite.phase != PhaseRun || suite.currentNode.IsZero() { + return types.GinkgoErrors.PushingCleanupNodeDuringTreeConstruction(node.CodeLocation) + } + + switch suite.currentNode.NodeType { + case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite, types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite: + node.NodeType = types.NodeTypeCleanupAfterSuite + case types.NodeTypeBeforeAll, types.NodeTypeAfterAll: + node.NodeType = types.NodeTypeCleanupAfterAll + case types.NodeTypeReportBeforeEach, types.NodeTypeReportAfterEach, types.NodeTypeReportBeforeSuite, types.NodeTypeReportAfterSuite: + return types.GinkgoErrors.PushingCleanupInReportingNode(node.CodeLocation, suite.currentNode.NodeType) + case types.NodeTypeCleanupInvalid, types.NodeTypeCleanupAfterEach, types.NodeTypeCleanupAfterAll, types.NodeTypeCleanupAfterSuite: + return types.GinkgoErrors.PushingCleanupInCleanupNode(node.CodeLocation) + default: + node.NodeType = types.NodeTypeCleanupAfterEach + } + + node.NodeIDWhereCleanupWasGenerated = suite.currentNode.ID + node.NestingLevel = suite.currentNode.NestingLevel + suite.cleanupNodes = append(suite.cleanupNodes, node) + + return nil +} + +func (suite *Suite) generateTimelineLocation() types.TimelineLocation { + suite.selectiveLock.Lock() + defer suite.selectiveLock.Unlock() + + suite.timelineOrder += 1 + return types.TimelineLocation{ + Offset: len(suite.currentSpecReport.CapturedGinkgoWriterOutput) + suite.writer.Len(), + Order: suite.timelineOrder, + Time: time.Now(), + } +} + +func (suite *Suite) handleSpecEvent(event types.SpecEvent) types.SpecEvent { + event.TimelineLocation = suite.generateTimelineLocation() + suite.selectiveLock.Lock() + suite.currentSpecReport.SpecEvents = append(suite.currentSpecReport.SpecEvents, event) + suite.selectiveLock.Unlock() + suite.reporter.EmitSpecEvent(event) + return event +} + +func (suite *Suite) handleSpecEventEnd(eventType types.SpecEventType, startEvent types.SpecEvent) { + event := startEvent + event.SpecEventType = eventType + event.TimelineLocation = suite.generateTimelineLocation() + event.Duration = event.TimelineLocation.Time.Sub(startEvent.TimelineLocation.Time) + suite.selectiveLock.Lock() + suite.currentSpecReport.SpecEvents = append(suite.currentSpecReport.SpecEvents, event) + suite.selectiveLock.Unlock() + suite.reporter.EmitSpecEvent(event) +} + +func (suite *Suite) By(text string, callback ...func()) error { + cl := types.NewCodeLocation(2) + if suite.phase != PhaseRun { + return types.GinkgoErrors.ByNotDuringRunPhase(cl) + } + + event := suite.handleSpecEvent(types.SpecEvent{ + SpecEventType: types.SpecEventByStart, + CodeLocation: cl, + Message: text, + }) + suite.selectiveLock.Lock() + suite.currentByStep = event + suite.selectiveLock.Unlock() + + if len(callback) == 1 { + defer func() { + suite.selectiveLock.Lock() + suite.currentByStep = types.SpecEvent{} + suite.selectiveLock.Unlock() + suite.handleSpecEventEnd(types.SpecEventByEnd, event) + }() + callback[0]() + } else if len(callback) > 1 { + panic("just one callback per By, please") + } + return nil +} + +/* +Spec Running methods - used during PhaseRun +*/ +func (suite *Suite) CurrentSpecReport() types.SpecReport { + suite.selectiveLock.Lock() + defer suite.selectiveLock.Unlock() + report := suite.currentSpecReport + if suite.writer != nil { + report.CapturedGinkgoWriterOutput = string(suite.writer.Bytes()) + } + report.ReportEntries = make([]ReportEntry, len(report.ReportEntries)) + copy(report.ReportEntries, suite.currentSpecReport.ReportEntries) + return report +} + +func (suite *Suite) AddReportEntry(entry ReportEntry) error { + if suite.phase != PhaseRun { + return types.GinkgoErrors.AddReportEntryNotDuringRunPhase(entry.Location) + } + entry.TimelineLocation = suite.generateTimelineLocation() + entry.Time = entry.TimelineLocation.Time + suite.selectiveLock.Lock() + suite.currentSpecReport.ReportEntries = append(suite.currentSpecReport.ReportEntries, entry) + suite.selectiveLock.Unlock() + suite.reporter.EmitReportEntry(entry) + return nil +} + +func (suite *Suite) generateProgressReport(fullReport bool) types.ProgressReport { + timelineLocation := suite.generateTimelineLocation() + suite.selectiveLock.Lock() + defer suite.selectiveLock.Unlock() + + deadline, cancel := context.WithTimeout(context.Background(), PROGRESS_REPORTER_DEADLING) + defer cancel() + var additionalReports []string + if suite.currentSpecContext != nil { + additionalReports = append(additionalReports, suite.currentSpecContext.QueryProgressReporters(deadline, suite.failer)...) + } + additionalReports = append(additionalReports, suite.QueryProgressReporters(deadline, suite.failer)...) + gwOutput := suite.currentSpecReport.CapturedGinkgoWriterOutput + string(suite.writer.Bytes()) + pr, err := NewProgressReport(suite.isRunningInParallel(), suite.currentSpecReport, suite.currentNode, suite.currentNodeStartTime, suite.currentByStep, gwOutput, timelineLocation, additionalReports, suite.config.SourceRoots, fullReport) + + if err != nil { + fmt.Printf("{{red}}Failed to generate progress report:{{/}}\n%s\n", err.Error()) + } + return pr +} + +func (suite *Suite) handleProgressSignal() { + report := suite.generateProgressReport(false) + report.Message = "{{bold}}You've requested a progress report:{{/}}" + suite.emitProgressReport(report) +} + +func (suite *Suite) emitProgressReport(report types.ProgressReport) { + suite.selectiveLock.Lock() + suite.currentSpecReport.ProgressReports = append(suite.currentSpecReport.ProgressReports, report.WithoutCapturedGinkgoWriterOutput()) + suite.selectiveLock.Unlock() + + suite.reporter.EmitProgressReport(report) + if suite.isRunningInParallel() { + err := suite.client.PostEmitProgressReport(report) + if err != nil { + fmt.Println(err.Error()) + } + } +} + +func (suite *Suite) isRunningInParallel() bool { + return suite.config.ParallelTotal > 1 +} + +func (suite *Suite) processCurrentSpecReport() { + suite.reporter.DidRun(suite.currentSpecReport) + if suite.isRunningInParallel() { + suite.client.PostDidRun(suite.currentSpecReport) + } + suite.report.SpecReports = append(suite.report.SpecReports, suite.currentSpecReport) + + if suite.currentSpecReport.State.Is(types.SpecStateFailureStates) { + suite.report.SuiteSucceeded = false + if suite.config.FailFast || suite.currentSpecReport.State.Is(types.SpecStateAborted) { + suite.skipAll = true + if suite.isRunningInParallel() { + suite.client.PostAbort() + } + } + } +} + +func (suite *Suite) runSpecs(description string, suiteLabels Labels, suitePath string, hasProgrammaticFocus bool, specs Specs) bool { + numSpecsThatWillBeRun := specs.CountWithoutSkip() + + suite.report = types.Report{ + SuitePath: suitePath, + SuiteDescription: description, + SuiteLabels: suiteLabels, + SuiteConfig: suite.config, + SuiteHasProgrammaticFocus: hasProgrammaticFocus, + PreRunStats: types.PreRunStats{ + TotalSpecs: len(specs), + SpecsThatWillRun: numSpecsThatWillBeRun, + }, + StartTime: time.Now(), + } + + suite.reporter.SuiteWillBegin(suite.report) + if suite.isRunningInParallel() { + suite.client.PostSuiteWillBegin(suite.report) + } + + suite.report.SuiteSucceeded = true + + suite.runReportSuiteNodesIfNeedBe(types.NodeTypeReportBeforeSuite) + + ranBeforeSuite := suite.report.SuiteSucceeded + if suite.report.SuiteSucceeded { + suite.runBeforeSuite(numSpecsThatWillBeRun) + } + + if suite.report.SuiteSucceeded { + groupedSpecIndices, serialGroupedSpecIndices := OrderSpecs(specs, suite.config) + nextIndex := MakeIncrementingIndexCounter() + if suite.isRunningInParallel() { + nextIndex = suite.client.FetchNextCounter + } + + for { + groupedSpecIdx, err := nextIndex() + if err != nil { + suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, fmt.Sprintf("Failed to iterate over specs:\n%s", err.Error())) + suite.report.SuiteSucceeded = false + break + } + + if groupedSpecIdx >= len(groupedSpecIndices) { + if suite.config.ParallelProcess == 1 && len(serialGroupedSpecIndices) > 0 { + groupedSpecIndices, serialGroupedSpecIndices, nextIndex = serialGroupedSpecIndices, GroupedSpecIndices{}, MakeIncrementingIndexCounter() + suite.client.BlockUntilNonprimaryProcsHaveFinished() + continue + } + break + } + + // the complexity for running groups of specs is very high because of Ordered containers and FlakeAttempts + // we encapsulate that complexity in the notion of a Group that can run + // Group is really just an extension of suite so it gets passed a suite and has access to all its internals + // Note that group is stateful and intended for single use! + newGroup(suite).run(specs.AtIndices(groupedSpecIndices[groupedSpecIdx])) + } + + if specs.HasAnySpecsMarkedPending() && suite.config.FailOnPending { + suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Detected pending specs and --fail-on-pending is set") + suite.report.SuiteSucceeded = false + } + } + + if ranBeforeSuite { + suite.runAfterSuiteCleanup(numSpecsThatWillBeRun) + } + + interruptStatus := suite.interruptHandler.Status() + if interruptStatus.Interrupted() { + suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, interruptStatus.Cause.String()) + suite.report.SuiteSucceeded = false + } + suite.report.EndTime = time.Now() + suite.report.RunTime = suite.report.EndTime.Sub(suite.report.StartTime) + if !suite.deadline.IsZero() && suite.report.EndTime.After(suite.deadline) { + suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Suite Timeout Elapsed") + suite.report.SuiteSucceeded = false + } + + suite.runReportSuiteNodesIfNeedBe(types.NodeTypeReportAfterSuite) + suite.reporter.SuiteDidEnd(suite.report) + if suite.isRunningInParallel() { + suite.client.PostSuiteDidEnd(suite.report) + } + + return suite.report.SuiteSucceeded +} + +func (suite *Suite) runBeforeSuite(numSpecsThatWillBeRun int) { + beforeSuiteNode := suite.suiteNodes.FirstNodeWithType(types.NodeTypeBeforeSuite | types.NodeTypeSynchronizedBeforeSuite) + if !beforeSuiteNode.IsZero() && numSpecsThatWillBeRun > 0 { + suite.selectiveLock.Lock() + suite.currentSpecReport = types.SpecReport{ + LeafNodeType: beforeSuiteNode.NodeType, + LeafNodeLocation: beforeSuiteNode.CodeLocation, + ParallelProcess: suite.config.ParallelProcess, + RunningInParallel: suite.isRunningInParallel(), + } + suite.selectiveLock.Unlock() + + suite.reporter.WillRun(suite.currentSpecReport) + suite.runSuiteNode(beforeSuiteNode) + if suite.currentSpecReport.State.Is(types.SpecStateSkipped) { + suite.report.SpecialSuiteFailureReasons = append(suite.report.SpecialSuiteFailureReasons, "Suite skipped in BeforeSuite") + suite.skipAll = true + } + suite.processCurrentSpecReport() + } +} + +func (suite *Suite) runAfterSuiteCleanup(numSpecsThatWillBeRun int) { + afterSuiteNode := suite.suiteNodes.FirstNodeWithType(types.NodeTypeAfterSuite | types.NodeTypeSynchronizedAfterSuite) + if !afterSuiteNode.IsZero() && numSpecsThatWillBeRun > 0 { + suite.selectiveLock.Lock() + suite.currentSpecReport = types.SpecReport{ + LeafNodeType: afterSuiteNode.NodeType, + LeafNodeLocation: afterSuiteNode.CodeLocation, + ParallelProcess: suite.config.ParallelProcess, + RunningInParallel: suite.isRunningInParallel(), + } + suite.selectiveLock.Unlock() + + suite.reporter.WillRun(suite.currentSpecReport) + suite.runSuiteNode(afterSuiteNode) + suite.processCurrentSpecReport() + } + + afterSuiteCleanup := suite.cleanupNodes.WithType(types.NodeTypeCleanupAfterSuite).Reverse() + if len(afterSuiteCleanup) > 0 { + for _, cleanupNode := range afterSuiteCleanup { + suite.selectiveLock.Lock() + suite.currentSpecReport = types.SpecReport{ + LeafNodeType: cleanupNode.NodeType, + LeafNodeLocation: cleanupNode.CodeLocation, + ParallelProcess: suite.config.ParallelProcess, + RunningInParallel: suite.isRunningInParallel(), + } + suite.selectiveLock.Unlock() + + suite.reporter.WillRun(suite.currentSpecReport) + suite.runSuiteNode(cleanupNode) + suite.processCurrentSpecReport() + } + } +} + +func (suite *Suite) reportEach(spec Spec, nodeType types.NodeType) { + nodes := spec.Nodes.WithType(nodeType) + if nodeType == types.NodeTypeReportAfterEach { + nodes = nodes.SortedByDescendingNestingLevel() + } + if nodeType == types.NodeTypeReportBeforeEach { + nodes = nodes.SortedByAscendingNestingLevel() + } + if len(nodes) == 0 { + return + } + + for i := range nodes { + suite.writer.Truncate() + suite.outputInterceptor.StartInterceptingOutput() + report := suite.currentSpecReport + nodes[i].Body = func(SpecContext) { + nodes[i].ReportEachBody(report) + } + state, failure := suite.runNode(nodes[i], time.Time{}, spec.Nodes.BestTextFor(nodes[i])) + + // If the spec is not in a failure state (i.e. it's Passed/Skipped/Pending) and the reporter has failed, override the state. + // Also, if the reporter is every aborted - always override the state to propagate the abort + if (!suite.currentSpecReport.State.Is(types.SpecStateFailureStates) && state.Is(types.SpecStateFailureStates)) || state.Is(types.SpecStateAborted) { + suite.currentSpecReport.State = state + suite.currentSpecReport.Failure = failure + } + suite.currentSpecReport.CapturedGinkgoWriterOutput += string(suite.writer.Bytes()) + suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput() + } +} + +func (suite *Suite) runSuiteNode(node Node) { + if suite.config.DryRun { + suite.currentSpecReport.State = types.SpecStatePassed + return + } + + suite.writer.Truncate() + suite.outputInterceptor.StartInterceptingOutput() + suite.currentSpecReport.StartTime = time.Now() + + var err error + switch node.NodeType { + case types.NodeTypeBeforeSuite, types.NodeTypeAfterSuite: + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + case types.NodeTypeCleanupAfterSuite: + if suite.config.ParallelTotal > 1 && suite.config.ParallelProcess == 1 { + err = suite.client.BlockUntilNonprimaryProcsHaveFinished() + } + if err == nil { + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + } + case types.NodeTypeSynchronizedBeforeSuite: + var data []byte + var runAllProcs bool + if suite.config.ParallelProcess == 1 { + if suite.config.ParallelTotal > 1 { + suite.outputInterceptor.StopInterceptingAndReturnOutput() + suite.outputInterceptor.StartInterceptingOutputAndForwardTo(suite.client) + } + node.Body = func(c SpecContext) { data = node.SynchronizedBeforeSuiteProc1Body(c) } + node.HasContext = node.SynchronizedBeforeSuiteProc1BodyHasContext + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + if suite.config.ParallelTotal > 1 { + suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput() + suite.outputInterceptor.StartInterceptingOutput() + if suite.currentSpecReport.State.Is(types.SpecStatePassed) { + err = suite.client.PostSynchronizedBeforeSuiteCompleted(types.SpecStatePassed, data) + } else { + err = suite.client.PostSynchronizedBeforeSuiteCompleted(suite.currentSpecReport.State, nil) + } + } + runAllProcs = suite.currentSpecReport.State.Is(types.SpecStatePassed) && err == nil + } else { + var proc1State types.SpecState + proc1State, data, err = suite.client.BlockUntilSynchronizedBeforeSuiteData() + switch proc1State { + case types.SpecStatePassed: + runAllProcs = true + case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateTimedout: + err = types.GinkgoErrors.SynchronizedBeforeSuiteFailedOnProc1() + case types.SpecStateInterrupted, types.SpecStateAborted, types.SpecStateSkipped: + suite.currentSpecReport.State = proc1State + } + } + if runAllProcs { + node.Body = func(c SpecContext) { node.SynchronizedBeforeSuiteAllProcsBody(c, data) } + node.HasContext = node.SynchronizedBeforeSuiteAllProcsBodyHasContext + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + } + case types.NodeTypeSynchronizedAfterSuite: + node.Body = node.SynchronizedAfterSuiteAllProcsBody + node.HasContext = node.SynchronizedAfterSuiteAllProcsBodyHasContext + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + if suite.config.ParallelProcess == 1 { + if suite.config.ParallelTotal > 1 { + err = suite.client.BlockUntilNonprimaryProcsHaveFinished() + } + if err == nil { + if suite.config.ParallelTotal > 1 { + suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput() + suite.outputInterceptor.StartInterceptingOutputAndForwardTo(suite.client) + } + + node.Body = node.SynchronizedAfterSuiteProc1Body + node.HasContext = node.SynchronizedAfterSuiteProc1BodyHasContext + state, failure := suite.runNode(node, time.Time{}, "") + if suite.currentSpecReport.State.Is(types.SpecStatePassed) { + suite.currentSpecReport.State, suite.currentSpecReport.Failure = state, failure + } + } + } + } + + if err != nil && !suite.currentSpecReport.State.Is(types.SpecStateFailureStates) { + suite.currentSpecReport.State, suite.currentSpecReport.Failure = types.SpecStateFailed, suite.failureForLeafNodeWithMessage(node, err.Error()) + suite.reporter.EmitFailure(suite.currentSpecReport.State, suite.currentSpecReport.Failure) + } + + suite.currentSpecReport.EndTime = time.Now() + suite.currentSpecReport.RunTime = suite.currentSpecReport.EndTime.Sub(suite.currentSpecReport.StartTime) + suite.currentSpecReport.CapturedGinkgoWriterOutput = string(suite.writer.Bytes()) + suite.currentSpecReport.CapturedStdOutErr += suite.outputInterceptor.StopInterceptingAndReturnOutput() +} + +func (suite *Suite) runReportSuiteNodesIfNeedBe(nodeType types.NodeType) { + nodes := suite.suiteNodes.WithType(nodeType) + // only run ReportAfterSuite on proc 1 + if nodeType.Is(types.NodeTypeReportAfterSuite) && suite.config.ParallelProcess != 1 { + return + } + // if we're running ReportBeforeSuite on proc > 1 - we should wait until proc 1 has completed + if nodeType.Is(types.NodeTypeReportBeforeSuite) && suite.config.ParallelProcess != 1 && len(nodes) > 0 { + state, err := suite.client.BlockUntilReportBeforeSuiteCompleted() + if err != nil || state.Is(types.SpecStateFailed) { + suite.report.SuiteSucceeded = false + } + return + } + + for _, node := range nodes { + suite.selectiveLock.Lock() + suite.currentSpecReport = types.SpecReport{ + LeafNodeType: node.NodeType, + LeafNodeLocation: node.CodeLocation, + LeafNodeText: node.Text, + ParallelProcess: suite.config.ParallelProcess, + RunningInParallel: suite.isRunningInParallel(), + } + suite.selectiveLock.Unlock() + + suite.reporter.WillRun(suite.currentSpecReport) + suite.runReportSuiteNode(node, suite.report) + suite.processCurrentSpecReport() + } + + // if we're running ReportBeforeSuite and we're running in parallel - we shuld tell the other procs that we're done + if nodeType.Is(types.NodeTypeReportBeforeSuite) && suite.isRunningInParallel() && len(nodes) > 0 { + if suite.report.SuiteSucceeded { + suite.client.PostReportBeforeSuiteCompleted(types.SpecStatePassed) + } else { + suite.client.PostReportBeforeSuiteCompleted(types.SpecStateFailed) + } + } +} + +func (suite *Suite) runReportSuiteNode(node Node, report types.Report) { + suite.writer.Truncate() + suite.outputInterceptor.StartInterceptingOutput() + suite.currentSpecReport.StartTime = time.Now() + + // if we're running a ReportAfterSuite in parallel (on proc 1) we (a) wait until other procs have exited and + // (b) always fetch the latest report as prior ReportAfterSuites will contribute to it + if node.NodeType.Is(types.NodeTypeReportAfterSuite) && suite.isRunningInParallel() { + aggregatedReport, err := suite.client.BlockUntilAggregatedNonprimaryProcsReport() + if err != nil { + suite.currentSpecReport.State, suite.currentSpecReport.Failure = types.SpecStateFailed, suite.failureForLeafNodeWithMessage(node, err.Error()) + suite.reporter.EmitFailure(suite.currentSpecReport.State, suite.currentSpecReport.Failure) + return + } + report = report.Add(aggregatedReport) + } + + node.Body = func(SpecContext) { node.ReportSuiteBody(report) } + suite.currentSpecReport.State, suite.currentSpecReport.Failure = suite.runNode(node, time.Time{}, "") + + suite.currentSpecReport.EndTime = time.Now() + suite.currentSpecReport.RunTime = suite.currentSpecReport.EndTime.Sub(suite.currentSpecReport.StartTime) + suite.currentSpecReport.CapturedGinkgoWriterOutput = string(suite.writer.Bytes()) + suite.currentSpecReport.CapturedStdOutErr = suite.outputInterceptor.StopInterceptingAndReturnOutput() +} + +func (suite *Suite) runNode(node Node, specDeadline time.Time, text string) (types.SpecState, types.Failure) { + if node.NodeType.Is(types.NodeTypeCleanupAfterEach | types.NodeTypeCleanupAfterAll | types.NodeTypeCleanupAfterSuite) { + suite.cleanupNodes = suite.cleanupNodes.WithoutNode(node) + } + + interruptStatus := suite.interruptHandler.Status() + if interruptStatus.Level == interrupt_handler.InterruptLevelBailOut { + return types.SpecStateSkipped, types.Failure{} + } + if interruptStatus.Level == interrupt_handler.InterruptLevelReportOnly && !node.NodeType.Is(types.NodeTypesAllowedDuringReportInterrupt) { + return types.SpecStateSkipped, types.Failure{} + } + if interruptStatus.Level == interrupt_handler.InterruptLevelCleanupAndReport && !node.NodeType.Is(types.NodeTypesAllowedDuringReportInterrupt|types.NodeTypesAllowedDuringCleanupInterrupt) { + return types.SpecStateSkipped, types.Failure{} + } + + suite.selectiveLock.Lock() + suite.currentNode = node + suite.currentNodeStartTime = time.Now() + suite.currentByStep = types.SpecEvent{} + suite.selectiveLock.Unlock() + defer func() { + suite.selectiveLock.Lock() + suite.currentNode = Node{} + suite.currentNodeStartTime = time.Time{} + suite.selectiveLock.Unlock() + }() + + if text == "" { + text = "TOP-LEVEL" + } + event := suite.handleSpecEvent(types.SpecEvent{ + SpecEventType: types.SpecEventNodeStart, + NodeType: node.NodeType, + Message: text, + CodeLocation: node.CodeLocation, + }) + defer func() { + suite.handleSpecEventEnd(types.SpecEventNodeEnd, event) + }() + + var failure types.Failure + failure.FailureNodeType, failure.FailureNodeLocation = node.NodeType, node.CodeLocation + if node.NodeType.Is(types.NodeTypeIt) || node.NodeType.Is(types.NodeTypesForSuiteLevelNodes) { + failure.FailureNodeContext = types.FailureNodeIsLeafNode + } else if node.NestingLevel <= 0 { + failure.FailureNodeContext = types.FailureNodeAtTopLevel + } else { + failure.FailureNodeContext, failure.FailureNodeContainerIndex = types.FailureNodeInContainer, node.NestingLevel-1 + } + var outcome types.SpecState + + gracePeriod := suite.config.GracePeriod + if node.GracePeriod >= 0 { + gracePeriod = node.GracePeriod + } + + now := time.Now() + deadline := suite.deadline + timeoutInPlay := "suite" + if deadline.IsZero() || (!specDeadline.IsZero() && specDeadline.Before(deadline)) { + deadline = specDeadline + timeoutInPlay = "spec" + } + if node.NodeTimeout > 0 && (deadline.IsZero() || deadline.Sub(now) > node.NodeTimeout) { + deadline = now.Add(node.NodeTimeout) + timeoutInPlay = "node" + } + if (!deadline.IsZero() && deadline.Before(now)) || interruptStatus.Interrupted() { + //we're out of time already. let's wait for a NodeTimeout if we have it, or GracePeriod if we don't + if node.NodeTimeout > 0 { + deadline = now.Add(node.NodeTimeout) + timeoutInPlay = "node" + } else { + deadline = now.Add(gracePeriod) + timeoutInPlay = "grace period" + } + } + + if !node.HasContext { + // this maps onto the pre-context behavior: + // - an interrupted node exits immediately. with this, context-less nodes that are in a spec with a SpecTimeout and/or are interrupted by other means will simply exit immediately after the timeout/interrupt + // - clean up nodes have up to GracePeriod (formerly hard-coded at 30s) to complete before they are interrupted + gracePeriod = 0 + } + + sc := NewSpecContext(suite) + defer sc.cancel() + + suite.selectiveLock.Lock() + suite.currentSpecContext = sc + suite.selectiveLock.Unlock() + + var deadlineChannel <-chan time.Time + if !deadline.IsZero() { + deadlineChannel = time.After(deadline.Sub(now)) + } + var gracePeriodChannel <-chan time.Time + + outcomeC := make(chan types.SpecState) + failureC := make(chan types.Failure) + + go func() { + finished := false + defer func() { + if e := recover(); e != nil || !finished { + suite.failer.Panic(types.NewCodeLocationWithStackTrace(2), e) + } + + outcomeFromRun, failureFromRun := suite.failer.Drain() + failureFromRun.TimelineLocation = suite.generateTimelineLocation() + outcomeC <- outcomeFromRun + failureC <- failureFromRun + }() + + node.Body(sc) + finished = true + }() + + // progress polling timer and channel + var emitProgressNow <-chan time.Time + var progressPoller *time.Timer + var pollProgressAfter, pollProgressInterval = suite.config.PollProgressAfter, suite.config.PollProgressInterval + if node.PollProgressAfter >= 0 { + pollProgressAfter = node.PollProgressAfter + } + if node.PollProgressInterval >= 0 { + pollProgressInterval = node.PollProgressInterval + } + if pollProgressAfter > 0 { + progressPoller = time.NewTimer(pollProgressAfter) + emitProgressNow = progressPoller.C + defer progressPoller.Stop() + } + + // now we wait for an outcome, an interrupt, a timeout, or a progress poll + for { + select { + case outcomeFromRun := <-outcomeC: + failureFromRun := <-failureC + if outcome.Is(types.SpecStateInterrupted | types.SpecStateTimedout) { + // we've already been interrupted/timed out. we just managed to actually exit + // before the grace period elapsed + // if we have a failure message we attach it as an additional failure + if outcomeFromRun != types.SpecStatePassed { + additionalFailure := types.AdditionalFailure{ + State: outcomeFromRun, + Failure: failure, //we make a copy - this will include all the configuration set up above... + } + //...and then we update the failure with the details from failureFromRun + additionalFailure.Failure.Location, additionalFailure.Failure.ForwardedPanic, additionalFailure.Failure.TimelineLocation = failureFromRun.Location, failureFromRun.ForwardedPanic, failureFromRun.TimelineLocation + additionalFailure.Failure.ProgressReport = types.ProgressReport{} + if outcome == types.SpecStateTimedout { + additionalFailure.Failure.Message = fmt.Sprintf("A %s timeout occurred and then the following failure was recorded in the timedout node before it exited:\n%s", timeoutInPlay, failureFromRun.Message) + } else { + additionalFailure.Failure.Message = fmt.Sprintf("An interrupt occurred and then the following failure was recorded in the interrupted node before it exited:\n%s", failureFromRun.Message) + } + suite.reporter.EmitFailure(additionalFailure.State, additionalFailure.Failure) + failure.AdditionalFailure = &additionalFailure + } + return outcome, failure + } + if outcomeFromRun.Is(types.SpecStatePassed) { + return outcomeFromRun, types.Failure{} + } else { + failure.Message, failure.Location, failure.ForwardedPanic, failure.TimelineLocation = failureFromRun.Message, failureFromRun.Location, failureFromRun.ForwardedPanic, failureFromRun.TimelineLocation + suite.reporter.EmitFailure(outcomeFromRun, failure) + return outcomeFromRun, failure + } + case <-gracePeriodChannel: + if node.HasContext && outcome.Is(types.SpecStateTimedout) { + report := suite.generateProgressReport(false) + report.Message = "{{bold}}{{orange}}A running node failed to exit in time{{/}}\nGinkgo is moving on but a node has timed out and failed to exit before its grace period elapsed. The node has now leaked and is running in the background.\nHere's a current progress report:" + suite.emitProgressReport(report) + } + return outcome, failure + case <-deadlineChannel: + // we're out of time - the outcome is a timeout and we capture the failure and progress report + outcome = types.SpecStateTimedout + failure.Message, failure.Location, failure.TimelineLocation = fmt.Sprintf("A %s timeout occurred", timeoutInPlay), node.CodeLocation, suite.generateTimelineLocation() + failure.ProgressReport = suite.generateProgressReport(false).WithoutCapturedGinkgoWriterOutput() + failure.ProgressReport.Message = fmt.Sprintf("{{bold}}This is the Progress Report generated when the %s timeout occurred:{{/}}", timeoutInPlay) + deadlineChannel = nil + suite.reporter.EmitFailure(outcome, failure) + + // tell the spec to stop. it's important we generate the progress report first to make sure we capture where + // the spec is actually stuck + sc.cancel() + //and now we wait for the grace period + gracePeriodChannel = time.After(gracePeriod) + case <-interruptStatus.Channel: + interruptStatus = suite.interruptHandler.Status() + // ignore interruption from other process if we are cleaning up or reporting + if interruptStatus.Cause == interrupt_handler.InterruptCauseAbortByOtherProcess && + node.NodeType.Is(types.NodeTypesAllowedDuringReportInterrupt|types.NodeTypesAllowedDuringCleanupInterrupt) { + continue + } + + deadlineChannel = nil // don't worry about deadlines, time's up now + + failureTimelineLocation := suite.generateTimelineLocation() + progressReport := suite.generateProgressReport(true) + + if outcome == types.SpecStateInvalid { + outcome = types.SpecStateInterrupted + failure.Message, failure.Location, failure.TimelineLocation = interruptStatus.Message(), node.CodeLocation, failureTimelineLocation + if interruptStatus.ShouldIncludeProgressReport() { + failure.ProgressReport = progressReport.WithoutCapturedGinkgoWriterOutput() + failure.ProgressReport.Message = "{{bold}}This is the Progress Report generated when the interrupt was received:{{/}}" + } + suite.reporter.EmitFailure(outcome, failure) + } + + progressReport = progressReport.WithoutOtherGoroutines() + sc.cancel() + + if interruptStatus.Level == interrupt_handler.InterruptLevelBailOut { + if interruptStatus.ShouldIncludeProgressReport() { + progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\n{{bold}}{{red}}Final interrupt received{{/}}; Ginkgo will not run any cleanup or reporting nodes and will terminate as soon as possible.\nHere's a current progress report:", interruptStatus.Message()) + suite.emitProgressReport(progressReport) + } + return outcome, failure + } + if interruptStatus.ShouldIncludeProgressReport() { + if interruptStatus.Level == interrupt_handler.InterruptLevelCleanupAndReport { + progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\nFirst interrupt received; Ginkgo will run any cleanup and reporting nodes but will skip all remaining specs. {{bold}}Interrupt again to skip cleanup{{/}}.\nHere's a current progress report:", interruptStatus.Message()) + } else if interruptStatus.Level == interrupt_handler.InterruptLevelReportOnly { + progressReport.Message = fmt.Sprintf("{{bold}}{{orange}}%s{{/}}\nSecond interrupt received; Ginkgo will run any reporting nodes but will skip all remaining specs and cleanup nodes. {{bold}}Interrupt again to bail immediately{{/}}.\nHere's a current progress report:", interruptStatus.Message()) + } + suite.emitProgressReport(progressReport) + } + + if gracePeriodChannel == nil { + // we haven't given grace yet... so let's + gracePeriodChannel = time.After(gracePeriod) + } else { + // we've already given grace. time's up. now. + return outcome, failure + } + case <-emitProgressNow: + report := suite.generateProgressReport(false) + report.Message = "{{bold}}Automatically polling progress:{{/}}" + suite.emitProgressReport(report) + if pollProgressInterval > 0 { + progressPoller.Reset(pollProgressInterval) + } + } + } +} + +// TODO: search for usages and consider if reporter.EmitFailure() is necessary +func (suite *Suite) failureForLeafNodeWithMessage(node Node, message string) types.Failure { + return types.Failure{ + Message: message, + Location: node.CodeLocation, + TimelineLocation: suite.generateTimelineLocation(), + FailureNodeContext: types.FailureNodeIsLeafNode, + FailureNodeType: node.NodeType, + FailureNodeLocation: node.CodeLocation, + } +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.go new file mode 100644 index 000000000000..73e26556568e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.go @@ -0,0 +1,210 @@ +package testingtproxy + +import ( + "fmt" + "io" + "os" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/internal" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +type failFunc func(message string, callerSkip ...int) +type skipFunc func(message string, callerSkip ...int) +type cleanupFunc func(args ...any) +type reportFunc func() types.SpecReport +type addReportEntryFunc func(names string, args ...any) +type ginkgoWriterInterface interface { + io.Writer + + Print(a ...interface{}) + Printf(format string, a ...interface{}) + Println(a ...interface{}) +} +type ginkgoRecoverFunc func() +type attachProgressReporterFunc func(func() string) func() + +func New(writer ginkgoWriterInterface, fail failFunc, skip skipFunc, cleanup cleanupFunc, report reportFunc, addReportEntry addReportEntryFunc, ginkgoRecover ginkgoRecoverFunc, attachProgressReporter attachProgressReporterFunc, randomSeed int64, parallelProcess int, parallelTotal int, noColor bool, offset int) *ginkgoTestingTProxy { + return &ginkgoTestingTProxy{ + fail: fail, + offset: offset, + writer: writer, + skip: skip, + cleanup: cleanup, + report: report, + addReportEntry: addReportEntry, + ginkgoRecover: ginkgoRecover, + attachProgressReporter: attachProgressReporter, + randomSeed: randomSeed, + parallelProcess: parallelProcess, + parallelTotal: parallelTotal, + f: formatter.NewWithNoColorBool(noColor), + } +} + +type ginkgoTestingTProxy struct { + fail failFunc + skip skipFunc + cleanup cleanupFunc + report reportFunc + offset int + writer ginkgoWriterInterface + addReportEntry addReportEntryFunc + ginkgoRecover ginkgoRecoverFunc + attachProgressReporter attachProgressReporterFunc + randomSeed int64 + parallelProcess int + parallelTotal int + f formatter.Formatter +} + +// basic testing.T support + +func (t *ginkgoTestingTProxy) Cleanup(f func()) { + t.cleanup(f, internal.Offset(1)) +} + +func (t *ginkgoTestingTProxy) Setenv(key, value string) { + originalValue, exists := os.LookupEnv(key) + if exists { + t.cleanup(os.Setenv, key, originalValue, internal.Offset(1)) + } else { + t.cleanup(os.Unsetenv, key, internal.Offset(1)) + } + + err := os.Setenv(key, value) + if err != nil { + t.fail(fmt.Sprintf("Failed to set environment variable: %v", err), 1) + } +} + +func (t *ginkgoTestingTProxy) Error(args ...interface{}) { + t.fail(fmt.Sprintln(args...), t.offset) +} + +func (t *ginkgoTestingTProxy) Errorf(format string, args ...interface{}) { + t.fail(fmt.Sprintf(format, args...), t.offset) +} + +func (t *ginkgoTestingTProxy) Fail() { + t.fail("failed", t.offset) +} + +func (t *ginkgoTestingTProxy) FailNow() { + t.fail("failed", t.offset) +} + +func (t *ginkgoTestingTProxy) Failed() bool { + return t.report().Failed() +} + +func (t *ginkgoTestingTProxy) Fatal(args ...interface{}) { + t.fail(fmt.Sprintln(args...), t.offset) +} + +func (t *ginkgoTestingTProxy) Fatalf(format string, args ...interface{}) { + t.fail(fmt.Sprintf(format, args...), t.offset) +} + +func (t *ginkgoTestingTProxy) Helper() { + types.MarkAsHelper(1) +} + +func (t *ginkgoTestingTProxy) Log(args ...interface{}) { + fmt.Fprintln(t.writer, args...) +} + +func (t *ginkgoTestingTProxy) Logf(format string, args ...interface{}) { + t.Log(fmt.Sprintf(format, args...)) +} + +func (t *ginkgoTestingTProxy) Name() string { + return t.report().FullText() +} + +func (t *ginkgoTestingTProxy) Parallel() { + // No-op +} + +func (t *ginkgoTestingTProxy) Skip(args ...interface{}) { + t.skip(fmt.Sprintln(args...), t.offset) +} + +func (t *ginkgoTestingTProxy) SkipNow() { + t.skip("skip", t.offset) +} + +func (t *ginkgoTestingTProxy) Skipf(format string, args ...interface{}) { + t.skip(fmt.Sprintf(format, args...), t.offset) +} + +func (t *ginkgoTestingTProxy) Skipped() bool { + return t.report().State.Is(types.SpecStateSkipped) +} + +func (t *ginkgoTestingTProxy) TempDir() string { + tmpDir, err := os.MkdirTemp("", "ginkgo") + if err != nil { + t.fail(fmt.Sprintf("Failed to create temporary directory: %v", err), 1) + return "" + } + t.cleanup(os.RemoveAll, tmpDir) + + return tmpDir +} + +// FullGinkgoTInterface +func (t *ginkgoTestingTProxy) AddReportEntryVisibilityAlways(name string, args ...any) { + finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityAlways} + t.addReportEntry(name, append(finalArgs, args...)...) +} +func (t *ginkgoTestingTProxy) AddReportEntryVisibilityFailureOrVerbose(name string, args ...any) { + finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityFailureOrVerbose} + t.addReportEntry(name, append(finalArgs, args...)...) +} +func (t *ginkgoTestingTProxy) AddReportEntryVisibilityNever(name string, args ...any) { + finalArgs := []any{internal.Offset(1), types.ReportEntryVisibilityNever} + t.addReportEntry(name, append(finalArgs, args...)...) +} +func (t *ginkgoTestingTProxy) Print(a ...any) { + t.writer.Print(a...) +} +func (t *ginkgoTestingTProxy) Printf(format string, a ...any) { + t.writer.Printf(format, a...) +} +func (t *ginkgoTestingTProxy) Println(a ...any) { + t.writer.Println(a...) +} +func (t *ginkgoTestingTProxy) F(format string, args ...any) string { + return t.f.F(format, args...) +} +func (t *ginkgoTestingTProxy) Fi(indentation uint, format string, args ...any) string { + return t.f.Fi(indentation, format, args...) +} +func (t *ginkgoTestingTProxy) Fiw(indentation uint, maxWidth uint, format string, args ...any) string { + return t.f.Fiw(indentation, maxWidth, format, args...) +} +func (t *ginkgoTestingTProxy) RenderTimeline() string { + return reporters.RenderTimeline(t.report(), false) +} +func (t *ginkgoTestingTProxy) GinkgoRecover() { + t.ginkgoRecover() +} +func (t *ginkgoTestingTProxy) DeferCleanup(args ...any) { + finalArgs := []any{internal.Offset(1)} + t.cleanup(append(finalArgs, args...)...) +} +func (t *ginkgoTestingTProxy) RandomSeed() int64 { + return t.randomSeed +} +func (t *ginkgoTestingTProxy) ParallelProcess() int { + return t.parallelProcess +} +func (t *ginkgoTestingTProxy) ParallelTotal() int { + return t.parallelTotal +} +func (t *ginkgoTestingTProxy) AttachProgressReporter(f func() string) func() { + return t.attachProgressReporter(f) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/tree.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/tree.go new file mode 100644 index 000000000000..f9d1eeb8f8ee --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/tree.go @@ -0,0 +1,77 @@ +package internal + +import "github.com/onsi/ginkgo/v2/types" + +type TreeNode struct { + Node Node + Parent *TreeNode + Children TreeNodes +} + +func (tn *TreeNode) AppendChild(child *TreeNode) { + tn.Children = append(tn.Children, child) + child.Parent = tn +} + +func (tn *TreeNode) AncestorNodeChain() Nodes { + if tn.Parent == nil || tn.Parent.Node.IsZero() { + return Nodes{tn.Node} + } + return append(tn.Parent.AncestorNodeChain(), tn.Node) +} + +type TreeNodes []*TreeNode + +func (tn TreeNodes) Nodes() Nodes { + out := make(Nodes, len(tn)) + for i := range tn { + out[i] = tn[i].Node + } + return out +} + +func (tn TreeNodes) WithID(id uint) *TreeNode { + for i := range tn { + if tn[i].Node.ID == id { + return tn[i] + } + } + + return nil +} + +func GenerateSpecsFromTreeRoot(tree *TreeNode) Specs { + var walkTree func(nestingLevel int, lNodes Nodes, rNodes Nodes, trees TreeNodes) Specs + walkTree = func(nestingLevel int, lNodes Nodes, rNodes Nodes, trees TreeNodes) Specs { + tests := Specs{} + + nodes := make(Nodes, len(trees)) + for i := range trees { + nodes[i] = trees[i].Node + nodes[i].NestingLevel = nestingLevel + } + + for i := range nodes { + if !nodes[i].NodeType.Is(types.NodeTypesForContainerAndIt) { + continue + } + leftNodes, rightNodes := nodes.SplitAround(nodes[i]) + leftNodes = leftNodes.WithoutType(types.NodeTypesForContainerAndIt) + rightNodes = rightNodes.WithoutType(types.NodeTypesForContainerAndIt) + + leftNodes = lNodes.CopyAppend(leftNodes...) + rightNodes = rightNodes.CopyAppend(rNodes...) + + if nodes[i].NodeType.Is(types.NodeTypeIt) { + tests = append(tests, Spec{Nodes: leftNodes.CopyAppend(nodes[i]).CopyAppend(rightNodes...)}) + } else { + treeNode := trees.WithID(nodes[i].ID) + tests = append(tests, walkTree(nestingLevel+1, leftNodes.CopyAppend(nodes[i]), rightNodes, treeNode.Children)...) + } + } + + return tests + } + + return walkTree(0, Nodes{}, Nodes{}, tree.Children) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/writer.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/writer.go new file mode 100644 index 000000000000..574f172df312 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/writer.go @@ -0,0 +1,140 @@ +package internal + +import ( + "bytes" + "fmt" + "io" + "sync" + + "github.com/go-logr/logr" + "github.com/go-logr/logr/funcr" +) + +type WriterMode uint + +const ( + WriterModeStreamAndBuffer WriterMode = iota + WriterModeBufferOnly +) + +type WriterInterface interface { + io.Writer + + Truncate() + Bytes() []byte + Len() int +} + +// Writer implements WriterInterface and GinkgoWriterInterface +type Writer struct { + buffer *bytes.Buffer + outWriter io.Writer + lock *sync.Mutex + mode WriterMode + + streamIndent []byte + indentNext bool + + teeWriters []io.Writer +} + +func NewWriter(outWriter io.Writer) *Writer { + return &Writer{ + buffer: &bytes.Buffer{}, + lock: &sync.Mutex{}, + outWriter: outWriter, + mode: WriterModeStreamAndBuffer, + streamIndent: []byte(" "), + indentNext: true, + } +} + +func (w *Writer) SetMode(mode WriterMode) { + w.lock.Lock() + defer w.lock.Unlock() + w.mode = mode +} + +func (w *Writer) Len() int { + w.lock.Lock() + defer w.lock.Unlock() + return w.buffer.Len() +} + +var newline = []byte("\n") + +func (w *Writer) Write(b []byte) (n int, err error) { + w.lock.Lock() + defer w.lock.Unlock() + + for _, teeWriter := range w.teeWriters { + teeWriter.Write(b) + } + + if w.mode == WriterModeStreamAndBuffer { + line, remaining, found := []byte{}, b, false + for len(remaining) > 0 { + line, remaining, found = bytes.Cut(remaining, newline) + if len(line) > 0 { + if w.indentNext { + w.outWriter.Write(w.streamIndent) + w.indentNext = false + } + w.outWriter.Write(line) + } + if found { + w.outWriter.Write(newline) + w.indentNext = true + } + } + } + return w.buffer.Write(b) +} + +func (w *Writer) Truncate() { + w.lock.Lock() + defer w.lock.Unlock() + w.buffer.Reset() +} + +func (w *Writer) Bytes() []byte { + w.lock.Lock() + defer w.lock.Unlock() + b := w.buffer.Bytes() + copied := make([]byte, len(b)) + copy(copied, b) + return copied +} + +// GinkgoWriterInterface +func (w *Writer) TeeTo(writer io.Writer) { + w.lock.Lock() + defer w.lock.Unlock() + + w.teeWriters = append(w.teeWriters, writer) +} + +func (w *Writer) ClearTeeWriters() { + w.lock.Lock() + defer w.lock.Unlock() + + w.teeWriters = []io.Writer{} +} + +func (w *Writer) Print(a ...interface{}) { + fmt.Fprint(w, a...) +} + +func (w *Writer) Printf(format string, a ...interface{}) { + fmt.Fprintf(w, format, a...) +} + +func (w *Writer) Println(a ...interface{}) { + fmt.Fprintln(w, a...) +} + +func GinkgoLogrFunc(writer *Writer) logr.Logger { + return funcr.New(func(prefix, args string) { + writer.Printf("%s\n", args) + }, funcr.Options{}) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go new file mode 100644 index 000000000000..56b7be758796 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.go @@ -0,0 +1,759 @@ +/* +Ginkgo's Default Reporter + +A number of command line flags are available to tweak Ginkgo's default output. + +These are documented [here](http://onsi.github.io/ginkgo/#running_tests) +*/ +package reporters + +import ( + "fmt" + "io" + "runtime" + "strings" + "sync" + "time" + + "github.com/onsi/ginkgo/v2/formatter" + "github.com/onsi/ginkgo/v2/types" +) + +type DefaultReporter struct { + conf types.ReporterConfig + writer io.Writer + + // managing the emission stream + lastCharWasNewline bool + lastEmissionWasDelimiter bool + + // rendering + specDenoter string + retryDenoter string + formatter formatter.Formatter + + runningInParallel bool + lock *sync.Mutex +} + +func NewDefaultReporterUnderTest(conf types.ReporterConfig, writer io.Writer) *DefaultReporter { + reporter := NewDefaultReporter(conf, writer) + reporter.formatter = formatter.New(formatter.ColorModePassthrough) + + return reporter +} + +func NewDefaultReporter(conf types.ReporterConfig, writer io.Writer) *DefaultReporter { + reporter := &DefaultReporter{ + conf: conf, + writer: writer, + + lastCharWasNewline: true, + lastEmissionWasDelimiter: false, + + specDenoter: "•", + retryDenoter: "↺", + formatter: formatter.NewWithNoColorBool(conf.NoColor), + lock: &sync.Mutex{}, + } + if runtime.GOOS == "windows" { + reporter.specDenoter = "+" + reporter.retryDenoter = "R" + } + + return reporter +} + +/* The Reporter Interface */ + +func (r *DefaultReporter) SuiteWillBegin(report types.Report) { + if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) { + r.emit(r.f("[%d] {{bold}}%s{{/}} ", report.SuiteConfig.RandomSeed, report.SuiteDescription)) + if len(report.SuiteLabels) > 0 { + r.emit(r.f("{{coral}}[%s]{{/}} ", strings.Join(report.SuiteLabels, ", "))) + } + r.emit(r.f("- %d/%d specs ", report.PreRunStats.SpecsThatWillRun, report.PreRunStats.TotalSpecs)) + if report.SuiteConfig.ParallelTotal > 1 { + r.emit(r.f("- %d procs ", report.SuiteConfig.ParallelTotal)) + } + } else { + banner := r.f("Running Suite: %s - %s", report.SuiteDescription, report.SuitePath) + r.emitBlock(banner) + bannerWidth := len(banner) + if len(report.SuiteLabels) > 0 { + labels := strings.Join(report.SuiteLabels, ", ") + r.emitBlock(r.f("{{coral}}[%s]{{/}} ", labels)) + if len(labels)+2 > bannerWidth { + bannerWidth = len(labels) + 2 + } + } + r.emitBlock(strings.Repeat("=", bannerWidth)) + + out := r.f("Random Seed: {{bold}}%d{{/}}", report.SuiteConfig.RandomSeed) + if report.SuiteConfig.RandomizeAllSpecs { + out += r.f(" - will randomize all specs") + } + r.emitBlock(out) + r.emit("\n") + r.emitBlock(r.f("Will run {{bold}}%d{{/}} of {{bold}}%d{{/}} specs", report.PreRunStats.SpecsThatWillRun, report.PreRunStats.TotalSpecs)) + if report.SuiteConfig.ParallelTotal > 1 { + r.emitBlock(r.f("Running in parallel across {{bold}}%d{{/}} processes", report.SuiteConfig.ParallelTotal)) + } + } +} + +func (r *DefaultReporter) SuiteDidEnd(report types.Report) { + failures := report.SpecReports.WithState(types.SpecStateFailureStates) + if len(failures) > 0 { + r.emitBlock("\n") + if len(failures) > 1 { + r.emitBlock(r.f("{{red}}{{bold}}Summarizing %d Failures:{{/}}", len(failures))) + } else { + r.emitBlock(r.f("{{red}}{{bold}}Summarizing 1 Failure:{{/}}")) + } + for _, specReport := range failures { + highlightColor, heading := "{{red}}", "[FAIL]" + switch specReport.State { + case types.SpecStatePanicked: + highlightColor, heading = "{{magenta}}", "[PANICKED!]" + case types.SpecStateAborted: + highlightColor, heading = "{{coral}}", "[ABORTED]" + case types.SpecStateTimedout: + highlightColor, heading = "{{orange}}", "[TIMEDOUT]" + case types.SpecStateInterrupted: + highlightColor, heading = "{{orange}}", "[INTERRUPTED]" + } + locationBlock := r.codeLocationBlock(specReport, highlightColor, false, true) + r.emitBlock(r.fi(1, highlightColor+"%s{{/}} %s", heading, locationBlock)) + } + } + + //summarize the suite + if r.conf.Verbosity().Is(types.VerbosityLevelSuccinct) && report.SuiteSucceeded { + r.emit(r.f(" {{green}}SUCCESS!{{/}} %s ", report.RunTime)) + return + } + + r.emitBlock("\n") + color, status := "{{green}}{{bold}}", "SUCCESS!" + if !report.SuiteSucceeded { + color, status = "{{red}}{{bold}}", "FAIL!" + } + + specs := report.SpecReports.WithLeafNodeType(types.NodeTypeIt) //exclude any suite setup nodes + r.emitBlock(r.f(color+"Ran %d of %d Specs in %.3f seconds{{/}}", + specs.CountWithState(types.SpecStatePassed)+specs.CountWithState(types.SpecStateFailureStates), + report.PreRunStats.TotalSpecs, + report.RunTime.Seconds()), + ) + + switch len(report.SpecialSuiteFailureReasons) { + case 0: + r.emit(r.f(color+"%s{{/}} -- ", status)) + case 1: + r.emit(r.f(color+"%s - %s{{/}} -- ", status, report.SpecialSuiteFailureReasons[0])) + default: + r.emitBlock(r.f(color+"%s - %s{{/}}\n", status, strings.Join(report.SpecialSuiteFailureReasons, ", "))) + } + + if len(specs) == 0 && report.SpecReports.WithLeafNodeType(types.NodeTypeBeforeSuite|types.NodeTypeSynchronizedBeforeSuite).CountWithState(types.SpecStateFailureStates) > 0 { + r.emit(r.f("{{cyan}}{{bold}}A BeforeSuite node failed so all tests were skipped.{{/}}\n")) + } else { + r.emit(r.f("{{green}}{{bold}}%d Passed{{/}} | ", specs.CountWithState(types.SpecStatePassed))) + r.emit(r.f("{{red}}{{bold}}%d Failed{{/}} | ", specs.CountWithState(types.SpecStateFailureStates))) + if specs.CountOfFlakedSpecs() > 0 { + r.emit(r.f("{{light-yellow}}{{bold}}%d Flaked{{/}} | ", specs.CountOfFlakedSpecs())) + } + if specs.CountOfRepeatedSpecs() > 0 { + r.emit(r.f("{{light-yellow}}{{bold}}%d Repeated{{/}} | ", specs.CountOfRepeatedSpecs())) + } + r.emit(r.f("{{yellow}}{{bold}}%d Pending{{/}} | ", specs.CountWithState(types.SpecStatePending))) + r.emit(r.f("{{cyan}}{{bold}}%d Skipped{{/}}\n", specs.CountWithState(types.SpecStateSkipped))) + } +} + +func (r *DefaultReporter) WillRun(report types.SpecReport) { + v := r.conf.Verbosity() + if v.LT(types.VerbosityLevelVerbose) || report.State.Is(types.SpecStatePending|types.SpecStateSkipped) || report.RunningInParallel { + return + } + + r.emitDelimiter(0) + r.emitBlock(r.f(r.codeLocationBlock(report, "{{/}}", v.Is(types.VerbosityLevelVeryVerbose), false))) +} + +func (r *DefaultReporter) DidRun(report types.SpecReport) { + v := r.conf.Verbosity() + inParallel := report.RunningInParallel + + header := r.specDenoter + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { + header = fmt.Sprintf("[%s]", report.LeafNodeType) + } + highlightColor := r.highlightColorForState(report.State) + + // have we already been streaming the timeline? + timelineHasBeenStreaming := v.GTE(types.VerbosityLevelVerbose) && !inParallel + + // should we show the timeline? + var timeline types.Timeline + showTimeline := !timelineHasBeenStreaming && (v.GTE(types.VerbosityLevelVerbose) || report.Failed()) + if showTimeline { + timeline = report.Timeline().WithoutHiddenReportEntries() + keepVeryVerboseSpecEvents := v.Is(types.VerbosityLevelVeryVerbose) || + (v.Is(types.VerbosityLevelVerbose) && r.conf.ShowNodeEvents) || + (report.Failed() && r.conf.ShowNodeEvents) + if !keepVeryVerboseSpecEvents { + timeline = timeline.WithoutVeryVerboseSpecEvents() + } + if len(timeline) == 0 && report.CapturedGinkgoWriterOutput == "" { + // the timeline is completely empty - don't show it + showTimeline = false + } + if v.LT(types.VerbosityLevelVeryVerbose) && report.CapturedGinkgoWriterOutput == "" && len(timeline) > 0 { + //if we aren't -vv and the timeline only has a single failure, don't show it as it will appear at the end of the report + failure, isFailure := timeline[0].(types.Failure) + if isFailure && (len(timeline) == 1 || (len(timeline) == 2 && failure.AdditionalFailure != nil)) { + showTimeline = false + } + } + } + + // should we have a separate section for always-visible reports? + showSeparateVisibilityAlwaysReportsSection := !timelineHasBeenStreaming && !showTimeline && report.ReportEntries.HasVisibility(types.ReportEntryVisibilityAlways) + + // should we have a separate section for captured stdout/stderr + showSeparateStdSection := inParallel && (report.CapturedStdOutErr != "") + + // given all that - do we have any actual content to show? or are we a single denoter in a stream? + reportHasContent := v.Is(types.VerbosityLevelVeryVerbose) || showTimeline || showSeparateVisibilityAlwaysReportsSection || showSeparateStdSection || report.Failed() || (v.Is(types.VerbosityLevelVerbose) && !report.State.Is(types.SpecStateSkipped)) + + // should we show a runtime? + includeRuntime := !report.State.Is(types.SpecStateSkipped|types.SpecStatePending) || (report.State.Is(types.SpecStateSkipped) && report.Failure.Message != "") + + // should we show the codelocation block? + showCodeLocation := !timelineHasBeenStreaming || !report.State.Is(types.SpecStatePassed) + + switch report.State { + case types.SpecStatePassed: + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) && !reportHasContent { + return + } + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { + header = fmt.Sprintf("%s PASSED", header) + } + if report.NumAttempts > 1 && report.MaxFlakeAttempts > 1 { + header, reportHasContent = fmt.Sprintf("%s [FLAKEY TEST - TOOK %d ATTEMPTS TO PASS]", r.retryDenoter, report.NumAttempts), true + } + case types.SpecStatePending: + header = "P" + if v.GT(types.VerbosityLevelSuccinct) { + header, reportHasContent = "P [PENDING]", true + } + case types.SpecStateSkipped: + header = "S" + if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && report.Failure.Message != "") { + header, reportHasContent = "S [SKIPPED]", true + } + default: + header = fmt.Sprintf("%s [%s]", header, r.humanReadableState(report.State)) + if report.MaxMustPassRepeatedly > 1 { + header = fmt.Sprintf("%s DURING REPETITION #%d", header, report.NumAttempts) + } + } + + // If we have no content to show, jsut emit the header and return + if !reportHasContent { + r.emit(r.f(highlightColor + header + "{{/}}")) + return + } + + if includeRuntime { + header = r.f("%s [%.3f seconds]", header, report.RunTime.Seconds()) + } + + // Emit header + if !timelineHasBeenStreaming { + r.emitDelimiter(0) + } + r.emitBlock(r.f(highlightColor + header + "{{/}}")) + if showCodeLocation { + r.emitBlock(r.codeLocationBlock(report, highlightColor, v.Is(types.VerbosityLevelVeryVerbose), false)) + } + + //Emit Stdout/Stderr Output + if showSeparateStdSection { + r.emitBlock("\n") + r.emitBlock(r.fi(1, "{{gray}}Captured StdOut/StdErr Output >>{{/}}")) + r.emitBlock(r.fi(1, "%s", report.CapturedStdOutErr)) + r.emitBlock(r.fi(1, "{{gray}}<< Captured StdOut/StdErr Output{{/}}")) + } + + if showSeparateVisibilityAlwaysReportsSection { + r.emitBlock("\n") + r.emitBlock(r.fi(1, "{{gray}}Report Entries >>{{/}}")) + for _, entry := range report.ReportEntries.WithVisibility(types.ReportEntryVisibilityAlways) { + r.emitReportEntry(1, entry) + } + r.emitBlock(r.fi(1, "{{gray}}<< Report Entries{{/}}")) + } + + if showTimeline { + r.emitBlock("\n") + r.emitBlock(r.fi(1, "{{gray}}Timeline >>{{/}}")) + r.emitTimeline(1, report, timeline) + r.emitBlock(r.fi(1, "{{gray}}<< Timeline{{/}}")) + } + + // Emit Failure Message + if !report.Failure.IsZero() && !v.Is(types.VerbosityLevelVeryVerbose) { + r.emitBlock("\n") + r.emitFailure(1, report.State, report.Failure, true) + if len(report.AdditionalFailures) > 0 { + r.emitBlock(r.fi(1, "\nThere were {{bold}}{{red}}additional failures{{/}} detected. To view them in detail run {{bold}}ginkgo -vv{{/}}")) + } + } + + r.emitDelimiter(0) +} + +func (r *DefaultReporter) highlightColorForState(state types.SpecState) string { + switch state { + case types.SpecStatePassed: + return "{{green}}" + case types.SpecStatePending: + return "{{yellow}}" + case types.SpecStateSkipped: + return "{{cyan}}" + case types.SpecStateFailed: + return "{{red}}" + case types.SpecStateTimedout: + return "{{orange}}" + case types.SpecStatePanicked: + return "{{magenta}}" + case types.SpecStateInterrupted: + return "{{orange}}" + case types.SpecStateAborted: + return "{{coral}}" + default: + return "{{gray}}" + } +} + +func (r *DefaultReporter) humanReadableState(state types.SpecState) string { + return strings.ToUpper(state.String()) +} + +func (r *DefaultReporter) emitTimeline(indent uint, report types.SpecReport, timeline types.Timeline) { + isVeryVerbose := r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose) + gw := report.CapturedGinkgoWriterOutput + cursor := 0 + for _, entry := range timeline { + tl := entry.GetTimelineLocation() + if tl.Offset < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:tl.Offset])) + cursor = tl.Offset + } else if cursor < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:])) + cursor = len(gw) + } + switch x := entry.(type) { + case types.Failure: + if isVeryVerbose { + r.emitFailure(indent, report.State, x, false) + } else { + r.emitShortFailure(indent, report.State, x) + } + case types.AdditionalFailure: + if isVeryVerbose { + r.emitFailure(indent, x.State, x.Failure, true) + } else { + r.emitShortFailure(indent, x.State, x.Failure) + } + case types.ReportEntry: + r.emitReportEntry(indent, x) + case types.ProgressReport: + r.emitProgressReport(indent, false, x) + case types.SpecEvent: + if isVeryVerbose || !x.IsOnlyVisibleAtVeryVerbose() || r.conf.ShowNodeEvents { + r.emitSpecEvent(indent, x, isVeryVerbose) + } + } + } + if cursor < len(gw) { + r.emit(r.fi(indent, "%s", gw[cursor:])) + } +} + +func (r *DefaultReporter) EmitFailure(state types.SpecState, failure types.Failure) { + if r.conf.Verbosity().Is(types.VerbosityLevelVerbose) { + r.emitShortFailure(1, state, failure) + } else if r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose) { + r.emitFailure(1, state, failure, true) + } +} + +func (r *DefaultReporter) emitShortFailure(indent uint, state types.SpecState, failure types.Failure) { + r.emitBlock(r.fi(indent, r.highlightColorForState(state)+"[%s]{{/}} in [%s] - %s {{gray}}@ %s{{/}}", + r.humanReadableState(state), + failure.FailureNodeType, + failure.Location, + failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), + )) +} + +func (r *DefaultReporter) emitFailure(indent uint, state types.SpecState, failure types.Failure, includeAdditionalFailure bool) { + highlightColor := r.highlightColorForState(state) + r.emitBlock(r.fi(indent, highlightColor+"[%s] %s{{/}}", r.humanReadableState(state), failure.Message)) + r.emitBlock(r.fi(indent, highlightColor+"In {{bold}}[%s]{{/}}"+highlightColor+" at: {{bold}}%s{{/}} {{gray}}@ %s{{/}}\n", failure.FailureNodeType, failure.Location, failure.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + if failure.ForwardedPanic != "" { + r.emitBlock("\n") + r.emitBlock(r.fi(indent, highlightColor+"%s{{/}}", failure.ForwardedPanic)) + } + + if r.conf.FullTrace || failure.ForwardedPanic != "" { + r.emitBlock("\n") + r.emitBlock(r.fi(indent, highlightColor+"Full Stack Trace{{/}}")) + r.emitBlock(r.fi(indent+1, "%s", failure.Location.FullStackTrace)) + } + + if !failure.ProgressReport.IsZero() { + r.emitBlock("\n") + r.emitProgressReport(indent, false, failure.ProgressReport) + } + + if failure.AdditionalFailure != nil && includeAdditionalFailure { + r.emitBlock("\n") + r.emitFailure(indent, failure.AdditionalFailure.State, failure.AdditionalFailure.Failure, true) + } +} + +func (r *DefaultReporter) EmitProgressReport(report types.ProgressReport) { + r.emitDelimiter(1) + + if report.RunningInParallel { + r.emit(r.fi(1, "{{coral}}Progress Report for Ginkgo Process #{{bold}}%d{{/}}\n", report.ParallelProcess)) + } + shouldEmitGW := report.RunningInParallel || r.conf.Verbosity().LT(types.VerbosityLevelVerbose) + r.emitProgressReport(1, shouldEmitGW, report) + r.emitDelimiter(1) +} + +func (r *DefaultReporter) emitProgressReport(indent uint, emitGinkgoWriterOutput bool, report types.ProgressReport) { + if report.Message != "" { + r.emitBlock(r.fi(indent, report.Message+"\n")) + indent += 1 + } + if report.LeafNodeText != "" { + subjectIndent := indent + if len(report.ContainerHierarchyTexts) > 0 { + r.emit(r.fi(indent, r.cycleJoin(report.ContainerHierarchyTexts, " "))) + r.emit(" ") + subjectIndent = 0 + } + r.emit(r.fi(subjectIndent, "{{bold}}{{orange}}%s{{/}} (Spec Runtime: %s)\n", report.LeafNodeText, report.Time().Sub(report.SpecStartTime).Round(time.Millisecond))) + r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.LeafNodeLocation)) + indent += 1 + } + if report.CurrentNodeType != types.NodeTypeInvalid { + r.emit(r.fi(indent, "In {{bold}}{{orange}}[%s]{{/}}", report.CurrentNodeType)) + if report.CurrentNodeText != "" && !report.CurrentNodeType.Is(types.NodeTypeIt) { + r.emit(r.f(" {{bold}}{{orange}}%s{{/}}", report.CurrentNodeText)) + } + + r.emit(r.f(" (Node Runtime: %s)\n", report.Time().Sub(report.CurrentNodeStartTime).Round(time.Millisecond))) + r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentNodeLocation)) + indent += 1 + } + if report.CurrentStepText != "" { + r.emit(r.fi(indent, "At {{bold}}{{orange}}[By Step] %s{{/}} (Step Runtime: %s)\n", report.CurrentStepText, report.Time().Sub(report.CurrentStepStartTime).Round(time.Millisecond))) + r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", report.CurrentStepLocation)) + indent += 1 + } + + if indent > 0 { + indent -= 1 + } + + if emitGinkgoWriterOutput && report.CapturedGinkgoWriterOutput != "" { + r.emit("\n") + r.emitBlock(r.fi(indent, "{{gray}}Begin Captured GinkgoWriter Output >>{{/}}")) + limit, lines := 10, strings.Split(report.CapturedGinkgoWriterOutput, "\n") + if len(lines) <= limit { + r.emitBlock(r.fi(indent+1, "%s", report.CapturedGinkgoWriterOutput)) + } else { + r.emitBlock(r.fi(indent+1, "{{gray}}...{{/}}")) + for _, line := range lines[len(lines)-limit-1:] { + r.emitBlock(r.fi(indent+1, "%s", line)) + } + } + r.emitBlock(r.fi(indent, "{{gray}}<< End Captured GinkgoWriter Output{{/}}")) + } + + if !report.SpecGoroutine().IsZero() { + r.emit("\n") + r.emit(r.fi(indent, "{{bold}}{{underline}}Spec Goroutine{{/}}\n")) + r.emitGoroutines(indent, report.SpecGoroutine()) + } + + if len(report.AdditionalReports) > 0 { + r.emit("\n") + r.emitBlock(r.fi(indent, "{{gray}}Begin Additional Progress Reports >>{{/}}")) + for i, additionalReport := range report.AdditionalReports { + r.emit(r.fi(indent+1, additionalReport)) + if i < len(report.AdditionalReports)-1 { + r.emitBlock(r.fi(indent+1, "{{gray}}%s{{/}}", strings.Repeat("-", 10))) + } + } + r.emitBlock(r.fi(indent, "{{gray}}<< End Additional Progress Reports{{/}}")) + } + + highlightedGoroutines := report.HighlightedGoroutines() + if len(highlightedGoroutines) > 0 { + r.emit("\n") + r.emit(r.fi(indent, "{{bold}}{{underline}}Goroutines of Interest{{/}}\n")) + r.emitGoroutines(indent, highlightedGoroutines...) + } + + otherGoroutines := report.OtherGoroutines() + if len(otherGoroutines) > 0 { + r.emit("\n") + r.emit(r.fi(indent, "{{gray}}{{bold}}{{underline}}Other Goroutines{{/}}\n")) + r.emitGoroutines(indent, otherGoroutines...) + } +} + +func (r *DefaultReporter) EmitReportEntry(entry types.ReportEntry) { + if r.conf.Verbosity().LT(types.VerbosityLevelVerbose) || entry.Visibility == types.ReportEntryVisibilityNever { + return + } + r.emitReportEntry(1, entry) +} + +func (r *DefaultReporter) emitReportEntry(indent uint, entry types.ReportEntry) { + r.emitBlock(r.fi(indent, "{{bold}}"+entry.Name+"{{gray}} "+fmt.Sprintf("- %s @ %s{{/}}", entry.Location, entry.Time.Format(types.GINKGO_TIME_FORMAT)))) + if representation := entry.StringRepresentation(); representation != "" { + r.emitBlock(r.fi(indent+1, representation)) + } +} + +func (r *DefaultReporter) EmitSpecEvent(event types.SpecEvent) { + v := r.conf.Verbosity() + if v.Is(types.VerbosityLevelVeryVerbose) || (v.Is(types.VerbosityLevelVerbose) && (r.conf.ShowNodeEvents || !event.IsOnlyVisibleAtVeryVerbose())) { + r.emitSpecEvent(1, event, r.conf.Verbosity().Is(types.VerbosityLevelVeryVerbose)) + } +} + +func (r *DefaultReporter) emitSpecEvent(indent uint, event types.SpecEvent, includeLocation bool) { + location := "" + if includeLocation { + location = fmt.Sprintf("- %s ", event.CodeLocation.String()) + } + switch event.SpecEventType { + case types.SpecEventInvalid: + return + case types.SpecEventByStart: + r.emitBlock(r.fi(indent, "{{bold}}STEP:{{/}} %s {{gray}}%s@ %s{{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventByEnd: + r.emitBlock(r.fi(indent, "{{bold}}END STEP:{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond))) + case types.SpecEventNodeStart: + r.emitBlock(r.fi(indent, "> Enter {{bold}}[%s]{{/}} %s {{gray}}%s@ %s{{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventNodeEnd: + r.emitBlock(r.fi(indent, "< Exit {{bold}}[%s]{{/}} %s {{gray}}%s@ %s (%s){{/}}", event.NodeType.String(), event.Message, location, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT), event.Duration.Round(time.Millisecond))) + case types.SpecEventSpecRepeat: + r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{green}}Passed{{/}}{{bold}}. Repeating %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + case types.SpecEventSpecRetry: + r.emitBlock(r.fi(indent, "\n{{bold}}Attempt #%d {{red}}Failed{{/}}{{bold}}. Retrying %s{{/}} {{gray}}@ %s{{/}}\n\n", event.Attempt, r.retryDenoter, event.TimelineLocation.Time.Format(types.GINKGO_TIME_FORMAT))) + } +} + +func (r *DefaultReporter) emitGoroutines(indent uint, goroutines ...types.Goroutine) { + for idx, g := range goroutines { + color := "{{gray}}" + if g.HasHighlights() { + color = "{{orange}}" + } + r.emit(r.fi(indent, color+"goroutine %d [%s]{{/}}\n", g.ID, g.State)) + for _, fc := range g.Stack { + if fc.Highlight { + r.emit(r.fi(indent, color+"{{bold}}> %s{{/}}\n", fc.Function)) + r.emit(r.fi(indent+2, color+"{{bold}}%s:%d{{/}}\n", fc.Filename, fc.Line)) + r.emitSource(indent+3, fc) + } else { + r.emit(r.fi(indent+1, "{{gray}}%s{{/}}\n", fc.Function)) + r.emit(r.fi(indent+2, "{{gray}}%s:%d{{/}}\n", fc.Filename, fc.Line)) + } + } + + if idx+1 < len(goroutines) { + r.emit("\n") + } + } +} + +func (r *DefaultReporter) emitSource(indent uint, fc types.FunctionCall) { + lines := fc.Source + if len(lines) == 0 { + return + } + + lTrim := 100000 + for _, line := range lines { + lTrimLine := len(line) - len(strings.TrimLeft(line, " \t")) + if lTrimLine < lTrim && len(line) > 0 { + lTrim = lTrimLine + } + } + if lTrim == 100000 { + lTrim = 0 + } + + for idx, line := range lines { + if len(line) > lTrim { + line = line[lTrim:] + } + if idx == fc.SourceHighlight { + r.emit(r.fi(indent, "{{bold}}{{orange}}> %s{{/}}\n", line)) + } else { + r.emit(r.fi(indent, "| %s\n", line)) + } + } +} + +/* Emitting to the writer */ +func (r *DefaultReporter) emit(s string) { + r._emit(s, false, false) +} + +func (r *DefaultReporter) emitBlock(s string) { + r._emit(s, true, false) +} + +func (r *DefaultReporter) emitDelimiter(indent uint) { + r._emit(r.fi(indent, "{{gray}}%s{{/}}", strings.Repeat("-", 30)), true, true) +} + +// a bit ugly - but we're trying to minimize locking on this hot codepath +func (r *DefaultReporter) _emit(s string, block bool, isDelimiter bool) { + if len(s) == 0 { + return + } + r.lock.Lock() + defer r.lock.Unlock() + if isDelimiter && r.lastEmissionWasDelimiter { + return + } + if block && !r.lastCharWasNewline { + r.writer.Write([]byte("\n")) + } + r.lastCharWasNewline = (s[len(s)-1:] == "\n") + r.writer.Write([]byte(s)) + if block && !r.lastCharWasNewline { + r.writer.Write([]byte("\n")) + r.lastCharWasNewline = true + } + r.lastEmissionWasDelimiter = isDelimiter +} + +/* Rendering text */ +func (r *DefaultReporter) f(format string, args ...interface{}) string { + return r.formatter.F(format, args...) +} + +func (r *DefaultReporter) fi(indentation uint, format string, args ...interface{}) string { + return r.formatter.Fi(indentation, format, args...) +} + +func (r *DefaultReporter) cycleJoin(elements []string, joiner string) string { + return r.formatter.CycleJoin(elements, joiner, []string{"{{/}}", "{{gray}}"}) +} + +func (r *DefaultReporter) codeLocationBlock(report types.SpecReport, highlightColor string, veryVerbose bool, usePreciseFailureLocation bool) string { + texts, locations, labels := []string{}, []types.CodeLocation{}, [][]string{} + texts, locations, labels = append(texts, report.ContainerHierarchyTexts...), append(locations, report.ContainerHierarchyLocations...), append(labels, report.ContainerHierarchyLabels...) + + if report.LeafNodeType.Is(types.NodeTypesForSuiteLevelNodes) { + texts = append(texts, r.f("[%s] %s", report.LeafNodeType, report.LeafNodeText)) + } else { + texts = append(texts, r.f(report.LeafNodeText)) + } + labels = append(labels, report.LeafNodeLabels) + locations = append(locations, report.LeafNodeLocation) + + failureLocation := report.Failure.FailureNodeLocation + if usePreciseFailureLocation { + failureLocation = report.Failure.Location + } + + highlightIndex := -1 + switch report.Failure.FailureNodeContext { + case types.FailureNodeAtTopLevel: + texts = append([]string{fmt.Sprintf("TOP-LEVEL [%s]", report.Failure.FailureNodeType)}, texts...) + locations = append([]types.CodeLocation{failureLocation}, locations...) + labels = append([][]string{{}}, labels...) + highlightIndex = 0 + case types.FailureNodeInContainer: + i := report.Failure.FailureNodeContainerIndex + texts[i] = fmt.Sprintf("%s [%s]", texts[i], report.Failure.FailureNodeType) + locations[i] = failureLocation + highlightIndex = i + case types.FailureNodeIsLeafNode: + i := len(texts) - 1 + texts[i] = fmt.Sprintf("[%s] %s", report.LeafNodeType, report.LeafNodeText) + locations[i] = failureLocation + highlightIndex = i + default: + //there is no failure, so we highlight the leaf ndoe + highlightIndex = len(texts) - 1 + } + + out := "" + if veryVerbose { + for i := range texts { + if i == highlightIndex { + out += r.fi(uint(i), highlightColor+"{{bold}}%s{{/}}", texts[i]) + } else { + out += r.fi(uint(i), "%s", texts[i]) + } + if len(labels[i]) > 0 { + out += r.f(" {{coral}}[%s]{{/}}", strings.Join(labels[i], ", ")) + } + out += "\n" + out += r.fi(uint(i), "{{gray}}%s{{/}}\n", locations[i]) + } + } else { + for i := range texts { + style := "{{/}}" + if i%2 == 1 { + style = "{{gray}}" + } + if i == highlightIndex { + style = highlightColor + "{{bold}}" + } + out += r.f(style+"%s", texts[i]) + if i < len(texts)-1 { + out += " " + } else { + out += r.f("{{/}}") + } + } + flattenedLabels := report.Labels() + if len(flattenedLabels) > 0 { + out += r.f(" {{coral}}[%s]{{/}}", strings.Join(flattenedLabels, ", ")) + } + out += "\n" + if usePreciseFailureLocation { + out += r.f("{{gray}}%s{{/}}", failureLocation) + } else { + leafLocation := locations[len(locations)-1] + if (report.Failure.FailureNodeLocation != types.CodeLocation{}) && (report.Failure.FailureNodeLocation != leafLocation) { + out += r.fi(1, highlightColor+"[%s]{{/}} {{gray}}%s{{/}}\n", report.Failure.FailureNodeType, report.Failure.FailureNodeLocation) + out += r.fi(1, "{{gray}}[%s] %s{{/}}", report.LeafNodeType, leafLocation) + } else { + out += r.f("{{gray}}%s{{/}}", leafLocation) + } + } + + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go new file mode 100644 index 000000000000..613072ebf1c0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.go @@ -0,0 +1,149 @@ +package reporters + +import ( + "github.com/onsi/ginkgo/v2/config" + "github.com/onsi/ginkgo/v2/types" +) + +// Deprecated: DeprecatedReporter was how Ginkgo V1 provided support for CustomReporters +// this has been removed in V2. +// Please read the documentation at: +// https://onsi.github.io/ginkgo/MIGRATING_TO_V2#removed-custom-reporters +// for Ginkgo's new behavior and for a migration path. +type DeprecatedReporter interface { + SuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) + BeforeSuiteDidRun(setupSummary *types.SetupSummary) + SpecWillRun(specSummary *types.SpecSummary) + SpecDidComplete(specSummary *types.SpecSummary) + AfterSuiteDidRun(setupSummary *types.SetupSummary) + SuiteDidEnd(summary *types.SuiteSummary) +} + +// ReportViaDeprecatedReporter takes a V1 custom reporter and a V2 report and +// calls the custom reporter's methods with appropriately transformed data from the V2 report. +// +// ReportViaDeprecatedReporter should be called in a `ReportAfterSuite()` +// +// Deprecated: ReportViaDeprecatedReporter method exists to help developer bridge between deprecated V1 functionality and the new +// reporting support in V2. It will be removed in a future minor version of Ginkgo. +func ReportViaDeprecatedReporter(reporter DeprecatedReporter, report types.Report) { + conf := config.DeprecatedGinkgoConfigType{ + RandomSeed: report.SuiteConfig.RandomSeed, + RandomizeAllSpecs: report.SuiteConfig.RandomizeAllSpecs, + FocusStrings: report.SuiteConfig.FocusStrings, + SkipStrings: report.SuiteConfig.SkipStrings, + FailOnPending: report.SuiteConfig.FailOnPending, + FailFast: report.SuiteConfig.FailFast, + FlakeAttempts: report.SuiteConfig.FlakeAttempts, + EmitSpecProgress: false, + DryRun: report.SuiteConfig.DryRun, + ParallelNode: report.SuiteConfig.ParallelProcess, + ParallelTotal: report.SuiteConfig.ParallelTotal, + SyncHost: report.SuiteConfig.ParallelHost, + StreamHost: report.SuiteConfig.ParallelHost, + } + + summary := &types.DeprecatedSuiteSummary{ + SuiteDescription: report.SuiteDescription, + SuiteID: report.SuitePath, + + NumberOfSpecsBeforeParallelization: report.PreRunStats.TotalSpecs, + NumberOfTotalSpecs: report.PreRunStats.TotalSpecs, + NumberOfSpecsThatWillBeRun: report.PreRunStats.SpecsThatWillRun, + } + + reporter.SuiteWillBegin(conf, summary) + + for _, spec := range report.SpecReports { + switch spec.LeafNodeType { + case types.NodeTypeBeforeSuite, types.NodeTypeSynchronizedBeforeSuite: + setupSummary := &types.DeprecatedSetupSummary{ + ComponentType: spec.LeafNodeType, + CodeLocation: spec.LeafNodeLocation, + State: spec.State, + RunTime: spec.RunTime, + Failure: failureFor(spec), + CapturedOutput: spec.CombinedOutput(), + SuiteID: report.SuitePath, + } + reporter.BeforeSuiteDidRun(setupSummary) + case types.NodeTypeAfterSuite, types.NodeTypeSynchronizedAfterSuite: + setupSummary := &types.DeprecatedSetupSummary{ + ComponentType: spec.LeafNodeType, + CodeLocation: spec.LeafNodeLocation, + State: spec.State, + RunTime: spec.RunTime, + Failure: failureFor(spec), + CapturedOutput: spec.CombinedOutput(), + SuiteID: report.SuitePath, + } + reporter.AfterSuiteDidRun(setupSummary) + case types.NodeTypeIt: + componentTexts, componentCodeLocations := []string{}, []types.CodeLocation{} + componentTexts = append(componentTexts, spec.ContainerHierarchyTexts...) + componentCodeLocations = append(componentCodeLocations, spec.ContainerHierarchyLocations...) + componentTexts = append(componentTexts, spec.LeafNodeText) + componentCodeLocations = append(componentCodeLocations, spec.LeafNodeLocation) + + specSummary := &types.DeprecatedSpecSummary{ + ComponentTexts: componentTexts, + ComponentCodeLocations: componentCodeLocations, + State: spec.State, + RunTime: spec.RunTime, + Failure: failureFor(spec), + NumberOfSamples: spec.NumAttempts, + CapturedOutput: spec.CombinedOutput(), + SuiteID: report.SuitePath, + } + reporter.SpecWillRun(specSummary) + reporter.SpecDidComplete(specSummary) + + switch spec.State { + case types.SpecStatePending: + summary.NumberOfPendingSpecs += 1 + case types.SpecStateSkipped: + summary.NumberOfSkippedSpecs += 1 + case types.SpecStateFailed, types.SpecStatePanicked, types.SpecStateInterrupted: + summary.NumberOfFailedSpecs += 1 + case types.SpecStatePassed: + summary.NumberOfPassedSpecs += 1 + if spec.NumAttempts > 1 { + summary.NumberOfFlakedSpecs += 1 + } + } + } + } + + summary.SuiteSucceeded = report.SuiteSucceeded + summary.RunTime = report.RunTime + + reporter.SuiteDidEnd(summary) +} + +func failureFor(spec types.SpecReport) types.DeprecatedSpecFailure { + if spec.Failure.IsZero() { + return types.DeprecatedSpecFailure{} + } + + index := 0 + switch spec.Failure.FailureNodeContext { + case types.FailureNodeInContainer: + index = spec.Failure.FailureNodeContainerIndex + case types.FailureNodeAtTopLevel: + index = -1 + case types.FailureNodeIsLeafNode: + index = len(spec.ContainerHierarchyTexts) - 1 + if spec.LeafNodeText != "" { + index += 1 + } + } + + return types.DeprecatedSpecFailure{ + Message: spec.Failure.Message, + Location: spec.Failure.Location, + ForwardedPanic: spec.Failure.ForwardedPanic, + ComponentIndex: index, + ComponentType: spec.Failure.FailureNodeType, + ComponentCodeLocation: spec.Failure.FailureNodeLocation, + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go new file mode 100644 index 000000000000..7f96c450fe94 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go @@ -0,0 +1,60 @@ +package reporters + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/onsi/ginkgo/v2/types" +) + +//GenerateJSONReport produces a JSON-formatted report at the passed in destination +func GenerateJSONReport(report types.Report, destination string) error { + f, err := os.Create(destination) + if err != nil { + return err + } + enc := json.NewEncoder(f) + enc.SetIndent("", " ") + err = enc.Encode([]types.Report{ + report, + }) + if err != nil { + return err + } + return f.Close() +} + +//MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources +//It skips over reports that fail to decode but reports on them via the returned messages []string +func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, error) { + messages := []string{} + allReports := []types.Report{} + for _, source := range sources { + reports := []types.Report{} + data, err := os.ReadFile(source) + if err != nil { + messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error())) + continue + } + err = json.Unmarshal(data, &reports) + if err != nil { + messages = append(messages, fmt.Sprintf("Could not decode %s:\n%s", source, err.Error())) + continue + } + os.Remove(source) + allReports = append(allReports, reports...) + } + + f, err := os.Create(destination) + if err != nil { + return messages, err + } + enc := json.NewEncoder(f) + enc.SetIndent("", " ") + err = enc.Encode(allReports) + if err != nil { + return messages, err + } + return messages, f.Close() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go new file mode 100644 index 000000000000..592d7f614b5f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go @@ -0,0 +1,369 @@ +/* + +JUnit XML Reporter for Ginkgo + +For usage instructions: http://onsi.github.io/ginkgo/#generating_junit_xml_output + +The schema used for the generated JUnit xml file was adapted from https://llg.cubic.org/docs/junit/ + +*/ + +package reporters + +import ( + "encoding/xml" + "fmt" + "os" + "strings" + + "github.com/onsi/ginkgo/v2/config" + "github.com/onsi/ginkgo/v2/types" +) + +type JunitReportConfig struct { + // Spec States for which no timeline should be emitted for system-err + // set this to types.SpecStatePassed|types.SpecStateSkipped|types.SpecStatePending to only match failing specs + OmitTimelinesForSpecState types.SpecState + + // Enable OmitFailureMessageAttr to prevent failure messages appearing in the "message" attribute of the Failure and Error tags + OmitFailureMessageAttr bool + + //Enable OmitCapturedStdOutErr to prevent captured stdout/stderr appearing in system-out + OmitCapturedStdOutErr bool + + // Enable OmitSpecLabels to prevent labels from appearing in the spec name + OmitSpecLabels bool + + // Enable OmitLeafNodeType to prevent the spec leaf node type from appearing in the spec name + OmitLeafNodeType bool + + // Enable OmitSuiteSetupNodes to prevent the creation of testcase entries for setup nodes + OmitSuiteSetupNodes bool +} + +type JUnitTestSuites struct { + XMLName xml.Name `xml:"testsuites"` + // Tests maps onto the total number of specs in all test suites (this includes any suite nodes such as BeforeSuite) + Tests int `xml:"tests,attr"` + // Disabled maps onto specs that are pending and/or skipped + Disabled int `xml:"disabled,attr"` + // Errors maps onto specs that panicked or were interrupted + Errors int `xml:"errors,attr"` + // Failures maps onto specs that failed + Failures int `xml:"failures,attr"` + // Time is the time in seconds to execute all test suites + Time float64 `xml:"time,attr"` + + //The set of all test suites + TestSuites []JUnitTestSuite `xml:"testsuite"` +} + +type JUnitTestSuite struct { + // Name maps onto the description of the test suite - maps onto Report.SuiteDescription + Name string `xml:"name,attr"` + // Package maps onto the absolute path to the test suite - maps onto Report.SuitePath + Package string `xml:"package,attr"` + // Tests maps onto the total number of specs in the test suite (this includes any suite nodes such as BeforeSuite) + Tests int `xml:"tests,attr"` + // Disabled maps onto specs that are pending + Disabled int `xml:"disabled,attr"` + // Skiped maps onto specs that are skipped + Skipped int `xml:"skipped,attr"` + // Errors maps onto specs that panicked or were interrupted + Errors int `xml:"errors,attr"` + // Failures maps onto specs that failed + Failures int `xml:"failures,attr"` + // Time is the time in seconds to execute all the test suite - maps onto Report.RunTime + Time float64 `xml:"time,attr"` + // Timestamp is the ISO 8601 formatted start-time of the suite - maps onto Report.StartTime + Timestamp string `xml:"timestamp,attr"` + + //Properties captures the information stored in the rest of the Report type (including SuiteConfig) as key-value pairs + Properties JUnitProperties `xml:"properties"` + + //TestCases capture the individual specs + TestCases []JUnitTestCase `xml:"testcase"` +} + +type JUnitProperties struct { + Properties []JUnitProperty `xml:"property"` +} + +func (jup JUnitProperties) WithName(name string) string { + for _, property := range jup.Properties { + if property.Name == name { + return property.Value + } + } + return "" +} + +type JUnitProperty struct { + Name string `xml:"name,attr"` + Value string `xml:"value,attr"` +} + +type JUnitTestCase struct { + // Name maps onto the full text of the spec - equivalent to "[SpecReport.LeafNodeType] SpecReport.FullText()" + Name string `xml:"name,attr"` + // Classname maps onto the name of the test suite - equivalent to Report.SuiteDescription + Classname string `xml:"classname,attr"` + // Status maps onto the string representation of SpecReport.State + Status string `xml:"status,attr"` + // Time is the time in seconds to execute the spec - maps onto SpecReport.RunTime + Time float64 `xml:"time,attr"` + //Skipped is populated with a message if the test was skipped or pending + Skipped *JUnitSkipped `xml:"skipped,omitempty"` + //Error is populated if the test panicked or was interrupted + Error *JUnitError `xml:"error,omitempty"` + //Failure is populated if the test failed + Failure *JUnitFailure `xml:"failure,omitempty"` + //SystemOut maps onto any captured stdout/stderr output - maps onto SpecReport.CapturedStdOutErr + SystemOut string `xml:"system-out,omitempty"` + //SystemOut maps onto any captured GinkgoWriter output - maps onto SpecReport.CapturedGinkgoWriterOutput + SystemErr string `xml:"system-err,omitempty"` +} + +type JUnitSkipped struct { + // Message maps onto "pending" if the test was marked pending, "skipped" if the test was marked skipped, and "skipped - REASON" if the user called Skip(REASON) + Message string `xml:"message,attr"` +} + +type JUnitError struct { + //Message maps onto the panic/exception thrown - equivalent to SpecReport.Failure.ForwardedPanic - or to "interrupted" + Message string `xml:"message,attr"` + //Type is one of "panicked" or "interrupted" + Type string `xml:"type,attr"` + //Description maps onto the captured stack trace for a panic, or the failure message for an interrupt which will include the dump of running goroutines + Description string `xml:",chardata"` +} + +type JUnitFailure struct { + //Message maps onto the failure message - equivalent to SpecReport.Failure.Message + Message string `xml:"message,attr"` + //Type is "failed" + Type string `xml:"type,attr"` + //Description maps onto the location and stack trace of the failure + Description string `xml:",chardata"` +} + +func GenerateJUnitReport(report types.Report, dst string) error { + return GenerateJUnitReportWithConfig(report, dst, JunitReportConfig{}) +} + +func GenerateJUnitReportWithConfig(report types.Report, dst string, config JunitReportConfig) error { + suite := JUnitTestSuite{ + Name: report.SuiteDescription, + Package: report.SuitePath, + Time: report.RunTime.Seconds(), + Timestamp: report.StartTime.Format("2006-01-02T15:04:05"), + Properties: JUnitProperties{ + Properties: []JUnitProperty{ + {"SuiteSucceeded", fmt.Sprintf("%t", report.SuiteSucceeded)}, + {"SuiteHasProgrammaticFocus", fmt.Sprintf("%t", report.SuiteHasProgrammaticFocus)}, + {"SpecialSuiteFailureReason", strings.Join(report.SpecialSuiteFailureReasons, ",")}, + {"SuiteLabels", fmt.Sprintf("[%s]", strings.Join(report.SuiteLabels, ","))}, + {"RandomSeed", fmt.Sprintf("%d", report.SuiteConfig.RandomSeed)}, + {"RandomizeAllSpecs", fmt.Sprintf("%t", report.SuiteConfig.RandomizeAllSpecs)}, + {"LabelFilter", report.SuiteConfig.LabelFilter}, + {"FocusStrings", strings.Join(report.SuiteConfig.FocusStrings, ",")}, + {"SkipStrings", strings.Join(report.SuiteConfig.SkipStrings, ",")}, + {"FocusFiles", strings.Join(report.SuiteConfig.FocusFiles, ";")}, + {"SkipFiles", strings.Join(report.SuiteConfig.SkipFiles, ";")}, + {"FailOnPending", fmt.Sprintf("%t", report.SuiteConfig.FailOnPending)}, + {"FailFast", fmt.Sprintf("%t", report.SuiteConfig.FailFast)}, + {"FlakeAttempts", fmt.Sprintf("%d", report.SuiteConfig.FlakeAttempts)}, + {"DryRun", fmt.Sprintf("%t", report.SuiteConfig.DryRun)}, + {"ParallelTotal", fmt.Sprintf("%d", report.SuiteConfig.ParallelTotal)}, + {"OutputInterceptorMode", report.SuiteConfig.OutputInterceptorMode}, + }, + }, + } + for _, spec := range report.SpecReports { + if config.OmitSuiteSetupNodes && spec.LeafNodeType != types.NodeTypeIt { + continue + } + name := fmt.Sprintf("[%s]", spec.LeafNodeType) + if config.OmitLeafNodeType { + name = "" + } + if spec.FullText() != "" { + name = name + " " + spec.FullText() + } + labels := spec.Labels() + if len(labels) > 0 && !config.OmitSpecLabels { + name = name + " [" + strings.Join(labels, ", ") + "]" + } + name = strings.TrimSpace(name) + + test := JUnitTestCase{ + Name: name, + Classname: report.SuiteDescription, + Status: spec.State.String(), + Time: spec.RunTime.Seconds(), + } + if !spec.State.Is(config.OmitTimelinesForSpecState) { + test.SystemErr = systemErrForUnstructuredReporters(spec) + } + if !config.OmitCapturedStdOutErr { + test.SystemOut = systemOutForUnstructuredReporters(spec) + } + suite.Tests += 1 + + switch spec.State { + case types.SpecStateSkipped: + message := "skipped" + if spec.Failure.Message != "" { + message += " - " + spec.Failure.Message + } + test.Skipped = &JUnitSkipped{Message: message} + suite.Skipped += 1 + case types.SpecStatePending: + test.Skipped = &JUnitSkipped{Message: "pending"} + suite.Disabled += 1 + case types.SpecStateFailed: + test.Failure = &JUnitFailure{ + Message: spec.Failure.Message, + Type: "failed", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" + } + suite.Failures += 1 + case types.SpecStateTimedout: + test.Failure = &JUnitFailure{ + Message: spec.Failure.Message, + Type: "timedout", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" + } + suite.Failures += 1 + case types.SpecStateInterrupted: + test.Error = &JUnitError{ + Message: spec.Failure.Message, + Type: "interrupted", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Error.Message = "" + } + suite.Errors += 1 + case types.SpecStateAborted: + test.Failure = &JUnitFailure{ + Message: spec.Failure.Message, + Type: "aborted", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Failure.Message = "" + } + suite.Errors += 1 + case types.SpecStatePanicked: + test.Error = &JUnitError{ + Message: spec.Failure.ForwardedPanic, + Type: "panicked", + Description: failureDescriptionForUnstructuredReporters(spec), + } + if config.OmitFailureMessageAttr { + test.Error.Message = "" + } + suite.Errors += 1 + } + + suite.TestCases = append(suite.TestCases, test) + } + + junitReport := JUnitTestSuites{ + Tests: suite.Tests, + Disabled: suite.Disabled + suite.Skipped, + Errors: suite.Errors, + Failures: suite.Failures, + Time: suite.Time, + TestSuites: []JUnitTestSuite{suite}, + } + + f, err := os.Create(dst) + if err != nil { + return err + } + f.WriteString(xml.Header) + encoder := xml.NewEncoder(f) + encoder.Indent(" ", " ") + encoder.Encode(junitReport) + + return f.Close() +} + +func MergeAndCleanupJUnitReports(sources []string, dst string) ([]string, error) { + messages := []string{} + mergedReport := JUnitTestSuites{} + for _, source := range sources { + report := JUnitTestSuites{} + f, err := os.Open(source) + if err != nil { + messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error())) + continue + } + err = xml.NewDecoder(f).Decode(&report) + if err != nil { + messages = append(messages, fmt.Sprintf("Could not decode %s:\n%s", source, err.Error())) + continue + } + os.Remove(source) + + mergedReport.Tests += report.Tests + mergedReport.Disabled += report.Disabled + mergedReport.Errors += report.Errors + mergedReport.Failures += report.Failures + mergedReport.Time += report.Time + mergedReport.TestSuites = append(mergedReport.TestSuites, report.TestSuites...) + } + + f, err := os.Create(dst) + if err != nil { + return messages, err + } + f.WriteString(xml.Header) + encoder := xml.NewEncoder(f) + encoder.Indent(" ", " ") + encoder.Encode(mergedReport) + + return messages, f.Close() +} + +func failureDescriptionForUnstructuredReporters(spec types.SpecReport) string { + out := &strings.Builder{} + NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitFailure(0, spec.State, spec.Failure, true) + if len(spec.AdditionalFailures) > 0 { + out.WriteString("\nThere were additional failures detected after the initial failure. These are visible in the timeline\n") + } + return out.String() +} + +func systemErrForUnstructuredReporters(spec types.SpecReport) string { + return RenderTimeline(spec, true) +} + +func RenderTimeline(spec types.SpecReport, noColor bool) string { + out := &strings.Builder{} + NewDefaultReporter(types.ReporterConfig{NoColor: noColor, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline()) + return out.String() +} + +func systemOutForUnstructuredReporters(spec types.SpecReport) string { + return spec.CapturedStdOutErr +} + +// Deprecated JUnitReporter (so folks can still compile their suites) +type JUnitReporter struct{} + +func NewJUnitReporter(_ string) *JUnitReporter { return &JUnitReporter{} } +func (reporter *JUnitReporter) SuiteWillBegin(_ config.GinkgoConfigType, _ *types.SuiteSummary) {} +func (reporter *JUnitReporter) BeforeSuiteDidRun(_ *types.SetupSummary) {} +func (reporter *JUnitReporter) SpecWillRun(_ *types.SpecSummary) {} +func (reporter *JUnitReporter) SpecDidComplete(_ *types.SpecSummary) {} +func (reporter *JUnitReporter) AfterSuiteDidRun(_ *types.SetupSummary) {} +func (reporter *JUnitReporter) SuiteDidEnd(_ *types.SuiteSummary) {} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go new file mode 100644 index 000000000000..5e726c464ef6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/reporter.go @@ -0,0 +1,29 @@ +package reporters + +import ( + "github.com/onsi/ginkgo/v2/types" +) + +type Reporter interface { + SuiteWillBegin(report types.Report) + WillRun(report types.SpecReport) + DidRun(report types.SpecReport) + SuiteDidEnd(report types.Report) + + //Timeline emission + EmitFailure(state types.SpecState, failure types.Failure) + EmitProgressReport(progressReport types.ProgressReport) + EmitReportEntry(entry types.ReportEntry) + EmitSpecEvent(event types.SpecEvent) +} + +type NoopReporter struct{} + +func (n NoopReporter) SuiteWillBegin(report types.Report) {} +func (n NoopReporter) WillRun(report types.SpecReport) {} +func (n NoopReporter) DidRun(report types.SpecReport) {} +func (n NoopReporter) SuiteDidEnd(report types.Report) {} +func (n NoopReporter) EmitFailure(state types.SpecState, failure types.Failure) {} +func (n NoopReporter) EmitProgressReport(progressReport types.ProgressReport) {} +func (n NoopReporter) EmitReportEntry(entry types.ReportEntry) {} +func (n NoopReporter) EmitSpecEvent(event types.SpecEvent) {} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go new file mode 100644 index 000000000000..c1863496dc71 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go @@ -0,0 +1,101 @@ +/* + +TeamCity Reporter for Ginkgo + +Makes use of TeamCity's support for Service Messages +http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingTests +*/ + +package reporters + +import ( + "fmt" + "os" + "strings" + + "github.com/onsi/ginkgo/v2/types" +) + +func tcEscape(s string) string { + s = strings.ReplaceAll(s, "|", "||") + s = strings.ReplaceAll(s, "'", "|'") + s = strings.ReplaceAll(s, "\n", "|n") + s = strings.ReplaceAll(s, "\r", "|r") + s = strings.ReplaceAll(s, "[", "|[") + s = strings.ReplaceAll(s, "]", "|]") + return s +} + +func GenerateTeamcityReport(report types.Report, dst string) error { + f, err := os.Create(dst) + if err != nil { + return err + } + + name := report.SuiteDescription + labels := report.SuiteLabels + if len(labels) > 0 { + name = name + " [" + strings.Join(labels, ", ") + "]" + } + fmt.Fprintf(f, "##teamcity[testSuiteStarted name='%s']\n", tcEscape(name)) + for _, spec := range report.SpecReports { + name := fmt.Sprintf("[%s]", spec.LeafNodeType) + if spec.FullText() != "" { + name = name + " " + spec.FullText() + } + labels := spec.Labels() + if len(labels) > 0 { + name = name + " [" + strings.Join(labels, ", ") + "]" + } + + name = tcEscape(name) + fmt.Fprintf(f, "##teamcity[testStarted name='%s']\n", name) + switch spec.State { + case types.SpecStatePending: + fmt.Fprintf(f, "##teamcity[testIgnored name='%s' message='pending']\n", name) + case types.SpecStateSkipped: + message := "skipped" + if spec.Failure.Message != "" { + message += " - " + spec.Failure.Message + } + fmt.Fprintf(f, "##teamcity[testIgnored name='%s' message='%s']\n", name, tcEscape(message)) + case types.SpecStateFailed: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='failed - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) + case types.SpecStatePanicked: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='panicked - %s' details='%s']\n", name, tcEscape(spec.Failure.ForwardedPanic), tcEscape(details)) + case types.SpecStateTimedout: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='timedout - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) + case types.SpecStateInterrupted: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='interrupted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) + case types.SpecStateAborted: + details := failureDescriptionForUnstructuredReporters(spec) + fmt.Fprintf(f, "##teamcity[testFailed name='%s' message='aborted - %s' details='%s']\n", name, tcEscape(spec.Failure.Message), tcEscape(details)) + } + + fmt.Fprintf(f, "##teamcity[testStdOut name='%s' out='%s']\n", name, tcEscape(systemOutForUnstructuredReporters(spec))) + fmt.Fprintf(f, "##teamcity[testStdErr name='%s' out='%s']\n", name, tcEscape(systemErrForUnstructuredReporters(spec))) + fmt.Fprintf(f, "##teamcity[testFinished name='%s' duration='%d']\n", name, int(spec.RunTime.Seconds()*1000.0)) + } + fmt.Fprintf(f, "##teamcity[testSuiteFinished name='%s']\n", tcEscape(report.SuiteDescription)) + + return f.Close() +} + +func MergeAndCleanupTeamcityReports(sources []string, dst string) ([]string, error) { + messages := []string{} + merged := []byte{} + for _, source := range sources { + data, err := os.ReadFile(source) + if err != nil { + messages = append(messages, fmt.Sprintf("Could not open %s:\n%s", source, err.Error())) + continue + } + os.Remove(source) + merged = append(merged, data...) + } + return messages, os.WriteFile(dst, merged, 0666) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go new file mode 100644 index 000000000000..f33786a2d653 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporting_dsl.go @@ -0,0 +1,182 @@ +package ginkgo + +import ( + "fmt" + "strings" + + "github.com/onsi/ginkgo/v2/internal" + "github.com/onsi/ginkgo/v2/internal/global" + "github.com/onsi/ginkgo/v2/reporters" + "github.com/onsi/ginkgo/v2/types" +) + +/* +Report represents the report for a Suite. +It is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#Report +*/ +type Report = types.Report + +/* +Report represents the report for a Spec. +It is documented here: https://pkg.go.dev/github.com/onsi/ginkgo/v2/types#SpecReport +*/ +type SpecReport = types.SpecReport + +/* +CurrentSpecReport returns information about the current running spec. +The returned object is a types.SpecReport which includes helper methods +to make extracting information about the spec easier. + +You can learn more about SpecReport here: https://pkg.go.dev/github.com/onsi/ginkgo/types#SpecReport +You can learn more about CurrentSpecReport() here: https://onsi.github.io/ginkgo/#getting-a-report-for-the-current-spec +*/ +func CurrentSpecReport() SpecReport { + return global.Suite.CurrentSpecReport() +} + +/* + ReportEntryVisibility governs the visibility of ReportEntries in Ginkgo's console reporter + +- ReportEntryVisibilityAlways: the default behavior - the ReportEntry is always emitted. +- ReportEntryVisibilityFailureOrVerbose: the ReportEntry is only emitted if the spec fails or if the tests are run with -v (similar to GinkgoWriters behavior). +- ReportEntryVisibilityNever: the ReportEntry is never emitted though it appears in any generated machine-readable reports (e.g. by setting `--json-report`). + +You can learn more about Report Entries here: https://onsi.github.io/ginkgo/#attaching-data-to-reports +*/ +type ReportEntryVisibility = types.ReportEntryVisibility + +const ReportEntryVisibilityAlways, ReportEntryVisibilityFailureOrVerbose, ReportEntryVisibilityNever = types.ReportEntryVisibilityAlways, types.ReportEntryVisibilityFailureOrVerbose, types.ReportEntryVisibilityNever + +/* +AddReportEntry generates and adds a new ReportEntry to the current spec's SpecReport. +It can take any of the following arguments: + - A single arbitrary object to attach as the Value of the ReportEntry. This object will be included in any generated reports and will be emitted to the console when the report is emitted. + - A ReportEntryVisibility enum to control the visibility of the ReportEntry + - An Offset or CodeLocation decoration to control the reported location of the ReportEntry + +If the Value object implements `fmt.Stringer`, it's `String()` representation is used when emitting to the console. + +AddReportEntry() must be called within a Subject or Setup node - not in a Container node. + +You can learn more about Report Entries here: https://onsi.github.io/ginkgo/#attaching-data-to-reports +*/ +func AddReportEntry(name string, args ...interface{}) { + cl := types.NewCodeLocation(1) + reportEntry, err := internal.NewReportEntry(name, cl, args...) + if err != nil { + Fail(fmt.Sprintf("Failed to generate Report Entry:\n%s", err.Error()), 1) + } + err = global.Suite.AddReportEntry(reportEntry) + if err != nil { + Fail(fmt.Sprintf("Failed to add Report Entry:\n%s", err.Error()), 1) + } +} + +/* +ReportBeforeEach nodes are run for each spec, even if the spec is skipped or pending. ReportBeforeEach nodes take a function that +receives a SpecReport. They are called before the spec starts. + +You cannot nest any other Ginkgo nodes within a ReportBeforeEach node's closure. +You can learn more about ReportBeforeEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically +*/ +func ReportBeforeEach(body func(SpecReport), args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportBeforeEach, "", combinedArgs...)) +} + +/* +ReportAfterEach nodes are run for each spec, even if the spec is skipped or pending. ReportAfterEach nodes take a function that +receives a SpecReport. They are called after the spec has completed and receive the final report for the spec. + +You cannot nest any other Ginkgo nodes within a ReportAfterEach node's closure. +You can learn more about ReportAfterEach here: https://onsi.github.io/ginkgo/#generating-reports-programmatically +*/ +func ReportAfterEach(body func(SpecReport), args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportAfterEach, "", combinedArgs...)) +} + +/* +ReportBeforeSuite nodes are run at the beginning of the suite. ReportBeforeSuite nodes take a function that receives a suite Report. + +They are called at the beginning of the suite, before any specs have run and any BeforeSuite or SynchronizedBeforeSuite nodes, and are passed in the initial report for the suite. +ReportBeforeSuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node) + +# When running in parallel, Ginkgo ensures that only one of the parallel nodes runs the ReportBeforeSuite + +You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure. +You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically + +You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports +*/ +func ReportBeforeSuite(body func(Report), args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportBeforeSuite, "", combinedArgs...)) +} + +/* +ReportAfterSuite nodes are run at the end of the suite. ReportAfterSuite nodes take a function that receives a suite Report. + +They are called at the end of the suite, after all specs have run and any AfterSuite or SynchronizedAfterSuite nodes, and are passed in the final report for the suite. +ReportAftersuite nodes must be created at the top-level (i.e. not nested in a Context/Describe/When node) + +When running in parallel, Ginkgo ensures that only one of the parallel nodes runs the ReportAfterSuite and that it is passed a report that is aggregated across +all parallel nodes + +In addition to using ReportAfterSuite to programmatically generate suite reports, you can also generate JSON, JUnit, and Teamcity formatted reports using the --json-report, --junit-report, and --teamcity-report ginkgo CLI flags. + +You cannot nest any other Ginkgo nodes within a ReportAfterSuite node's closure. +You can learn more about ReportAfterSuite here: https://onsi.github.io/ginkgo/#generating-reports-programmatically + +You can learn more about Ginkgo's reporting infrastructure, including generating reports with the CLI here: https://onsi.github.io/ginkgo/#generating-machine-readable-reports +*/ +func ReportAfterSuite(text string, body func(Report), args ...interface{}) bool { + combinedArgs := []interface{}{body} + combinedArgs = append(combinedArgs, args...) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeReportAfterSuite, text, combinedArgs...)) +} + +func registerReportAfterSuiteNodeForAutogeneratedReports(reporterConfig types.ReporterConfig) { + body := func(report Report) { + if reporterConfig.JSONReport != "" { + err := reporters.GenerateJSONReport(report, reporterConfig.JSONReport) + if err != nil { + Fail(fmt.Sprintf("Failed to generate JSON report:\n%s", err.Error())) + } + } + if reporterConfig.JUnitReport != "" { + err := reporters.GenerateJUnitReport(report, reporterConfig.JUnitReport) + if err != nil { + Fail(fmt.Sprintf("Failed to generate JUnit report:\n%s", err.Error())) + } + } + if reporterConfig.TeamcityReport != "" { + err := reporters.GenerateTeamcityReport(report, reporterConfig.TeamcityReport) + if err != nil { + Fail(fmt.Sprintf("Failed to generate Teamcity report:\n%s", err.Error())) + } + } + } + + flags := []string{} + if reporterConfig.JSONReport != "" { + flags = append(flags, "--json-report") + } + if reporterConfig.JUnitReport != "" { + flags = append(flags, "--junit-report") + } + if reporterConfig.TeamcityReport != "" { + flags = append(flags, "--teamcity-report") + } + pushNode(internal.NewNode( + deprecationTracker, types.NodeTypeReportAfterSuite, + fmt.Sprintf("Autogenerated ReportAfterSuite for %s", strings.Join(flags, " ")), + body, + types.NewCustomCodeLocation("autogenerated by Ginkgo"), + )) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/table_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/table_dsl.go new file mode 100644 index 000000000000..ac9b7abb5ee2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/table_dsl.go @@ -0,0 +1,309 @@ +package ginkgo + +import ( + "context" + "fmt" + "reflect" + "strings" + + "github.com/onsi/ginkgo/v2/internal" + "github.com/onsi/ginkgo/v2/types" +) + +/* +The EntryDescription decorator allows you to pass a format string to DescribeTable() and Entry(). This format string is used to generate entry names via: + + fmt.Sprintf(formatString, parameters...) + +where parameters are the parameters passed into the entry. + +When passed into an Entry the EntryDescription is used to generate the name or that entry. When passed to DescribeTable, the EntryDescription is used to generate the names for any entries that have `nil` descriptions. + +You can learn more about generating EntryDescriptions here: https://onsi.github.io/ginkgo/#generating-entry-descriptions +*/ +type EntryDescription string + +func (ed EntryDescription) render(args ...interface{}) string { + return fmt.Sprintf(string(ed), args...) +} + +/* +DescribeTable describes a table-driven spec. + +For example: + + DescribeTable("a simple table", + func(x int, y int, expected bool) { + Ω(x > y).Should(Equal(expected)) + }, + Entry("x > y", 1, 0, true), + Entry("x == y", 0, 0, false), + Entry("x < y", 0, 1, false), + ) + +You can learn more about DescribeTable here: https://onsi.github.io/ginkgo/#table-specs +And can explore some Table patterns here: https://onsi.github.io/ginkgo/#table-specs-patterns +*/ +func DescribeTable(description string, args ...interface{}) bool { + GinkgoHelper() + generateTable(description, args...) + return true +} + +/* +You can focus a table with `FDescribeTable`. This is equivalent to `FDescribe`. +*/ +func FDescribeTable(description string, args ...interface{}) bool { + GinkgoHelper() + args = append(args, internal.Focus) + generateTable(description, args...) + return true +} + +/* +You can mark a table as pending with `PDescribeTable`. This is equivalent to `PDescribe`. +*/ +func PDescribeTable(description string, args ...interface{}) bool { + GinkgoHelper() + args = append(args, internal.Pending) + generateTable(description, args...) + return true +} + +/* +You can mark a table as pending with `XDescribeTable`. This is equivalent to `XDescribe`. +*/ +var XDescribeTable = PDescribeTable + +/* +TableEntry represents an entry in a table test. You generally use the `Entry` constructor. +*/ +type TableEntry struct { + description interface{} + decorations []interface{} + parameters []interface{} + codeLocation types.CodeLocation +} + +/* +Entry constructs a TableEntry. + +The first argument is a description. This can be a string, a function that accepts the parameters passed to the TableEntry and returns a string, an EntryDescription format string, or nil. If nil is provided then the name of the Entry is derived using the table-level entry description. +Subsequent arguments accept any Ginkgo decorators. These are filtered out and the remaining arguments are passed into the Spec function associated with the table. + +Each Entry ends up generating an individual Ginkgo It. The body of the it is the Table Body function with the Entry parameters passed in. + +If you want to generate interruptible specs simply write a Table function that accepts a SpecContext as its first argument. You can then decorate individual Entrys with the NodeTimeout and SpecTimeout decorators. + +You can learn more about Entry here: https://onsi.github.io/ginkgo/#table-specs +*/ +func Entry(description interface{}, args ...interface{}) TableEntry { + GinkgoHelper() + decorations, parameters := internal.PartitionDecorations(args...) + return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)} +} + +/* +You can focus a particular entry with FEntry. This is equivalent to FIt. +*/ +func FEntry(description interface{}, args ...interface{}) TableEntry { + GinkgoHelper() + decorations, parameters := internal.PartitionDecorations(args...) + decorations = append(decorations, internal.Focus) + return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)} +} + +/* +You can mark a particular entry as pending with PEntry. This is equivalent to PIt. +*/ +func PEntry(description interface{}, args ...interface{}) TableEntry { + GinkgoHelper() + decorations, parameters := internal.PartitionDecorations(args...) + decorations = append(decorations, internal.Pending) + return TableEntry{description: description, decorations: decorations, parameters: parameters, codeLocation: types.NewCodeLocation(0)} +} + +/* +You can mark a particular entry as pending with XEntry. This is equivalent to XIt. +*/ +var XEntry = PEntry + +var contextType = reflect.TypeOf(new(context.Context)).Elem() +var specContextType = reflect.TypeOf(new(SpecContext)).Elem() + +func generateTable(description string, args ...interface{}) { + GinkgoHelper() + cl := types.NewCodeLocation(0) + containerNodeArgs := []interface{}{cl} + + entries := []TableEntry{} + var itBody interface{} + var itBodyType reflect.Type + + var tableLevelEntryDescription interface{} + tableLevelEntryDescription = func(args ...interface{}) string { + out := []string{} + for _, arg := range args { + out = append(out, fmt.Sprint(arg)) + } + return "Entry: " + strings.Join(out, ", ") + } + + if len(args) == 1 { + exitIfErr(types.GinkgoErrors.MissingParametersForTableFunction(cl)) + } + + for i, arg := range args { + switch t := reflect.TypeOf(arg); { + case t == nil: + exitIfErr(types.GinkgoErrors.IncorrectParameterTypeForTable(i, "nil", cl)) + case t == reflect.TypeOf(TableEntry{}): + entries = append(entries, arg.(TableEntry)) + case t == reflect.TypeOf([]TableEntry{}): + entries = append(entries, arg.([]TableEntry)...) + case t == reflect.TypeOf(EntryDescription("")): + tableLevelEntryDescription = arg.(EntryDescription).render + case t.Kind() == reflect.Func && t.NumOut() == 1 && t.Out(0) == reflect.TypeOf(""): + tableLevelEntryDescription = arg + case t.Kind() == reflect.Func: + if itBody != nil { + exitIfErr(types.GinkgoErrors.MultipleEntryBodyFunctionsForTable(cl)) + } + itBody = arg + itBodyType = reflect.TypeOf(itBody) + default: + containerNodeArgs = append(containerNodeArgs, arg) + } + } + + containerNodeArgs = append(containerNodeArgs, func() { + for _, entry := range entries { + var err error + entry := entry + var description string + switch t := reflect.TypeOf(entry.description); { + case t == nil: + err = validateParameters(tableLevelEntryDescription, entry.parameters, "Entry Description function", entry.codeLocation, false) + if err == nil { + description = invokeFunction(tableLevelEntryDescription, entry.parameters)[0].String() + } + case t == reflect.TypeOf(EntryDescription("")): + description = entry.description.(EntryDescription).render(entry.parameters...) + case t == reflect.TypeOf(""): + description = entry.description.(string) + case t.Kind() == reflect.Func && t.NumOut() == 1 && t.Out(0) == reflect.TypeOf(""): + err = validateParameters(entry.description, entry.parameters, "Entry Description function", entry.codeLocation, false) + if err == nil { + description = invokeFunction(entry.description, entry.parameters)[0].String() + } + default: + err = types.GinkgoErrors.InvalidEntryDescription(entry.codeLocation) + } + + itNodeArgs := []interface{}{entry.codeLocation} + itNodeArgs = append(itNodeArgs, entry.decorations...) + + hasContext := false + if itBodyType.NumIn() > 0. { + if itBodyType.In(0).Implements(specContextType) { + hasContext = true + } else if itBodyType.In(0).Implements(contextType) && (len(entry.parameters) == 0 || !reflect.TypeOf(entry.parameters[0]).Implements(contextType)) { + hasContext = true + } + } + + if err == nil { + err = validateParameters(itBody, entry.parameters, "Table Body function", entry.codeLocation, hasContext) + } + + if hasContext { + itNodeArgs = append(itNodeArgs, func(c SpecContext) { + if err != nil { + panic(err) + } + invokeFunction(itBody, append([]interface{}{c}, entry.parameters...)) + }) + } else { + itNodeArgs = append(itNodeArgs, func() { + if err != nil { + panic(err) + } + invokeFunction(itBody, entry.parameters) + }) + } + + pushNode(internal.NewNode(deprecationTracker, types.NodeTypeIt, description, itNodeArgs...)) + } + }) + + pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, description, containerNodeArgs...)) +} + +func invokeFunction(function interface{}, parameters []interface{}) []reflect.Value { + inValues := make([]reflect.Value, len(parameters)) + + funcType := reflect.TypeOf(function) + limit := funcType.NumIn() + if funcType.IsVariadic() { + limit = limit - 1 + } + + for i := 0; i < limit && i < len(parameters); i++ { + inValues[i] = computeValue(parameters[i], funcType.In(i)) + } + + if funcType.IsVariadic() { + variadicType := funcType.In(limit).Elem() + for i := limit; i < len(parameters); i++ { + inValues[i] = computeValue(parameters[i], variadicType) + } + } + + return reflect.ValueOf(function).Call(inValues) +} + +func validateParameters(function interface{}, parameters []interface{}, kind string, cl types.CodeLocation, hasContext bool) error { + funcType := reflect.TypeOf(function) + limit := funcType.NumIn() + offset := 0 + if hasContext { + limit = limit - 1 + offset = 1 + } + if funcType.IsVariadic() { + limit = limit - 1 + } + if len(parameters) < limit { + return types.GinkgoErrors.TooFewParametersToTableFunction(limit, len(parameters), kind, cl) + } + if len(parameters) > limit && !funcType.IsVariadic() { + return types.GinkgoErrors.TooManyParametersToTableFunction(limit, len(parameters), kind, cl) + } + var i = 0 + for ; i < limit; i++ { + actual := reflect.TypeOf(parameters[i]) + expected := funcType.In(i + offset) + if !(actual == nil) && !actual.AssignableTo(expected) { + return types.GinkgoErrors.IncorrectParameterTypeToTableFunction(i+1, expected, actual, kind, cl) + } + } + if funcType.IsVariadic() { + expected := funcType.In(limit + offset).Elem() + for ; i < len(parameters); i++ { + actual := reflect.TypeOf(parameters[i]) + if !(actual == nil) && !actual.AssignableTo(expected) { + return types.GinkgoErrors.IncorrectVariadicParameterTypeToTableFunction(expected, actual, kind, cl) + } + } + } + + return nil +} + +func computeValue(parameter interface{}, t reflect.Type) reflect.Value { + if parameter == nil { + return reflect.Zero(t) + } else { + return reflect.ValueOf(parameter) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/code_location.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/code_location.go new file mode 100644 index 000000000000..9cd5768170a4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/code_location.go @@ -0,0 +1,159 @@ +package types + +import ( + "fmt" + "os" + "regexp" + "runtime" + "runtime/debug" + "strings" + "sync" +) + +type CodeLocation struct { + FileName string `json:",omitempty"` + LineNumber int `json:",omitempty"` + FullStackTrace string `json:",omitempty"` + CustomMessage string `json:",omitempty"` +} + +func (codeLocation CodeLocation) String() string { + if codeLocation.CustomMessage != "" { + return codeLocation.CustomMessage + } + return fmt.Sprintf("%s:%d", codeLocation.FileName, codeLocation.LineNumber) +} + +func (codeLocation CodeLocation) ContentsOfLine() string { + if codeLocation.CustomMessage != "" { + return "" + } + contents, err := os.ReadFile(codeLocation.FileName) + if err != nil { + return "" + } + lines := strings.Split(string(contents), "\n") + if len(lines) < codeLocation.LineNumber { + return "" + } + return lines[codeLocation.LineNumber-1] +} + +type codeLocationLocator struct { + pcs map[uintptr]bool + helpers map[string]bool + lock *sync.Mutex +} + +func (c *codeLocationLocator) addHelper(pc uintptr) { + c.lock.Lock() + defer c.lock.Unlock() + + if c.pcs[pc] { + return + } + c.lock.Unlock() + f := runtime.FuncForPC(pc) + c.lock.Lock() + if f == nil { + return + } + c.helpers[f.Name()] = true + c.pcs[pc] = true +} + +func (c *codeLocationLocator) hasHelper(name string) bool { + c.lock.Lock() + defer c.lock.Unlock() + return c.helpers[name] +} + +func (c *codeLocationLocator) getCodeLocation(skip int) CodeLocation { + pc := make([]uintptr, 40) + n := runtime.Callers(skip+2, pc) + if n == 0 { + return CodeLocation{} + } + pc = pc[:n] + frames := runtime.CallersFrames(pc) + for { + frame, more := frames.Next() + if !c.hasHelper(frame.Function) { + return CodeLocation{FileName: frame.File, LineNumber: frame.Line} + } + if !more { + break + } + } + return CodeLocation{} +} + +var clLocator = &codeLocationLocator{ + pcs: map[uintptr]bool{}, + helpers: map[string]bool{}, + lock: &sync.Mutex{}, +} + +// MarkAsHelper is used by GinkgoHelper to mark the caller (appropriately offset by skip)as a helper. You can use this directly if you need to provide an optional `skip` to mark functions further up the call stack as helpers. +func MarkAsHelper(optionalSkip ...int) { + skip := 1 + if len(optionalSkip) > 0 { + skip += optionalSkip[0] + } + pc, _, _, ok := runtime.Caller(skip) + if ok { + clLocator.addHelper(pc) + } +} + +func NewCustomCodeLocation(message string) CodeLocation { + return CodeLocation{ + CustomMessage: message, + } +} + +func NewCodeLocation(skip int) CodeLocation { + return clLocator.getCodeLocation(skip + 1) +} + +func NewCodeLocationWithStackTrace(skip int) CodeLocation { + cl := clLocator.getCodeLocation(skip + 1) + cl.FullStackTrace = PruneStack(string(debug.Stack()), skip+1) + return cl +} + +// PruneStack removes references to functions that are internal to Ginkgo +// and the Go runtime from a stack string and a certain number of stack entries +// at the beginning of the stack. The stack string has the format +// as returned by runtime/debug.Stack. The leading goroutine information is +// optional and always removed if present. Beware that runtime/debug.Stack +// adds itself as first entry, so typically skip must be >= 1 to remove that +// entry. +func PruneStack(fullStackTrace string, skip int) string { + stack := strings.Split(fullStackTrace, "\n") + // Ensure that the even entries are the method names and the + // odd entries the source code information. + if len(stack) > 0 && strings.HasPrefix(stack[0], "goroutine ") { + // Ignore "goroutine 29 [running]:" line. + stack = stack[1:] + } + // The "+1" is for skipping over the initial entry, which is + // runtime/debug.Stack() itself. + if len(stack) > 2*(skip+1) { + stack = stack[2*(skip+1):] + } + prunedStack := []string{} + if os.Getenv("GINKGO_PRUNE_STACK") == "FALSE" { + prunedStack = stack + } else { + re := regexp.MustCompile(`\/ginkgo\/|\/pkg\/testing\/|\/pkg\/runtime\/`) + for i := 0; i < len(stack)/2; i++ { + // We filter out based on the source code file name. + if !re.Match([]byte(stack[i*2+1])) { + prunedStack = append(prunedStack, stack[i*2]) + prunedStack = append(prunedStack, stack[i*2+1]) + } + } + } + return strings.Join(prunedStack, "\n") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/config.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/config.go new file mode 100644 index 000000000000..1014c7b49f4c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/config.go @@ -0,0 +1,757 @@ +/* +Ginkgo accepts a number of configuration options. +These are documented [here](http://onsi.github.io/ginkgo/#the-ginkgo-cli) +*/ + +package types + +import ( + "flag" + "os" + "path/filepath" + "runtime" + "strconv" + "strings" + "time" +) + +// Configuration controlling how an individual test suite is run +type SuiteConfig struct { + RandomSeed int64 + RandomizeAllSpecs bool + FocusStrings []string + SkipStrings []string + FocusFiles []string + SkipFiles []string + LabelFilter string + FailOnPending bool + FailFast bool + FlakeAttempts int + DryRun bool + PollProgressAfter time.Duration + PollProgressInterval time.Duration + Timeout time.Duration + EmitSpecProgress bool // this is deprecated but its removal is causing compile issue for some users that were setting it manually + OutputInterceptorMode string + SourceRoots []string + GracePeriod time.Duration + + ParallelProcess int + ParallelTotal int + ParallelHost string +} + +func NewDefaultSuiteConfig() SuiteConfig { + return SuiteConfig{ + RandomSeed: time.Now().Unix(), + Timeout: time.Hour, + ParallelProcess: 1, + ParallelTotal: 1, + GracePeriod: 30 * time.Second, + } +} + +type VerbosityLevel uint + +const ( + VerbosityLevelSuccinct VerbosityLevel = iota + VerbosityLevelNormal + VerbosityLevelVerbose + VerbosityLevelVeryVerbose +) + +func (vl VerbosityLevel) GT(comp VerbosityLevel) bool { + return vl > comp +} + +func (vl VerbosityLevel) GTE(comp VerbosityLevel) bool { + return vl >= comp +} + +func (vl VerbosityLevel) Is(comp VerbosityLevel) bool { + return vl == comp +} + +func (vl VerbosityLevel) LTE(comp VerbosityLevel) bool { + return vl <= comp +} + +func (vl VerbosityLevel) LT(comp VerbosityLevel) bool { + return vl < comp +} + +// Configuration for Ginkgo's reporter +type ReporterConfig struct { + NoColor bool + Succinct bool + Verbose bool + VeryVerbose bool + FullTrace bool + ShowNodeEvents bool + + JSONReport string + JUnitReport string + TeamcityReport string +} + +func (rc ReporterConfig) Verbosity() VerbosityLevel { + if rc.Succinct { + return VerbosityLevelSuccinct + } else if rc.Verbose { + return VerbosityLevelVerbose + } else if rc.VeryVerbose { + return VerbosityLevelVeryVerbose + } + return VerbosityLevelNormal +} + +func (rc ReporterConfig) WillGenerateReport() bool { + return rc.JSONReport != "" || rc.JUnitReport != "" || rc.TeamcityReport != "" +} + +func NewDefaultReporterConfig() ReporterConfig { + return ReporterConfig{} +} + +// Configuration for the Ginkgo CLI +type CLIConfig struct { + //for build, run, and watch + Recurse bool + SkipPackage string + RequireSuite bool + NumCompilers int + + //for run and watch only + Procs int + Parallel bool + AfterRunHook string + OutputDir string + KeepSeparateCoverprofiles bool + KeepSeparateReports bool + + //for run only + KeepGoing bool + UntilItFails bool + Repeat int + RandomizeSuites bool + + //for watch only + Depth int + WatchRegExp string +} + +func NewDefaultCLIConfig() CLIConfig { + return CLIConfig{ + Depth: 1, + WatchRegExp: `\.go$`, + } +} + +func (g CLIConfig) ComputedProcs() int { + if g.Procs > 0 { + return g.Procs + } + + n := 1 + if g.Parallel { + n = runtime.NumCPU() + if n > 4 { + n = n - 1 + } + } + return n +} + +func (g CLIConfig) ComputedNumCompilers() int { + if g.NumCompilers > 0 { + return g.NumCompilers + } + + return runtime.NumCPU() +} + +// Configuration for the Ginkgo CLI capturing available go flags +// A subset of Go flags are exposed by Ginkgo. Some are available at compile time (e.g. ginkgo build) and others only at run time (e.g. ginkgo run - which has both build and run time flags). +// More details can be found at: +// https://docs.google.com/spreadsheets/d/1zkp-DS4hU4sAJl5eHh1UmgwxCPQhf3s5a8fbiOI8tJU/ +type GoFlagsConfig struct { + //build-time flags for code-and-performance analysis + Race bool + Cover bool + CoverMode string + CoverPkg string + Vet string + + //run-time flags for code-and-performance analysis + BlockProfile string + BlockProfileRate int + CoverProfile string + CPUProfile string + MemProfile string + MemProfileRate int + MutexProfile string + MutexProfileFraction int + Trace string + + //build-time flags for building + A bool + ASMFlags string + BuildMode string + Compiler string + GCCGoFlags string + GCFlags string + InstallSuffix string + LDFlags string + LinkShared bool + Mod string + N bool + ModFile string + ModCacheRW bool + MSan bool + PkgDir string + Tags string + TrimPath bool + ToolExec string + Work bool + X bool +} + +func NewDefaultGoFlagsConfig() GoFlagsConfig { + return GoFlagsConfig{} +} + +func (g GoFlagsConfig) BinaryMustBePreserved() bool { + return g.BlockProfile != "" || g.CPUProfile != "" || g.MemProfile != "" || g.MutexProfile != "" +} + +// Configuration that were deprecated in 2.0 +type deprecatedConfig struct { + DebugParallel bool + NoisySkippings bool + NoisyPendings bool + RegexScansFilePath bool + SlowSpecThresholdWithFLoatUnits float64 + Stream bool + Notify bool + EmitSpecProgress bool + SlowSpecThreshold time.Duration + AlwaysEmitGinkgoWriter bool +} + +// Flags + +// Flags sections used by both the CLI and the Ginkgo test process +var FlagSections = GinkgoFlagSections{ + {Key: "multiple-suites", Style: "{{dark-green}}", Heading: "Running Multiple Test Suites"}, + {Key: "order", Style: "{{green}}", Heading: "Controlling Test Order"}, + {Key: "parallel", Style: "{{yellow}}", Heading: "Controlling Test Parallelism"}, + {Key: "low-level-parallel", Style: "{{yellow}}", Heading: "Controlling Test Parallelism", + Description: "These are set by the Ginkgo CLI, {{red}}{{bold}}do not set them manually{{/}} via go test.\nUse ginkgo -p or ginkgo -procs=N instead."}, + {Key: "filter", Style: "{{cyan}}", Heading: "Filtering Tests"}, + {Key: "failure", Style: "{{red}}", Heading: "Failure Handling"}, + {Key: "output", Style: "{{magenta}}", Heading: "Controlling Output Formatting"}, + {Key: "code-and-coverage-analysis", Style: "{{orange}}", Heading: "Code and Coverage Analysis"}, + {Key: "performance-analysis", Style: "{{coral}}", Heading: "Performance Analysis"}, + {Key: "debug", Style: "{{blue}}", Heading: "Debugging Tests", + Description: "In addition to these flags, Ginkgo supports a few debugging environment variables. To change the parallel server protocol set {{blue}}GINKGO_PARALLEL_PROTOCOL{{/}} to {{bold}}HTTP{{/}}. To avoid pruning callstacks set {{blue}}GINKGO_PRUNE_STACK{{/}} to {{bold}}FALSE{{/}}."}, + {Key: "watch", Style: "{{light-yellow}}", Heading: "Controlling Ginkgo Watch"}, + {Key: "misc", Style: "{{light-gray}}", Heading: "Miscellaneous"}, + {Key: "go-build", Style: "{{light-gray}}", Heading: "Go Build Flags", Succinct: true, + Description: "These flags are inherited from go build. Run {{bold}}ginkgo help build{{/}} for more detailed flag documentation."}, +} + +// SuiteConfigFlags provides flags for the Ginkgo test process, and CLI +var SuiteConfigFlags = GinkgoFlags{ + {KeyPath: "S.RandomSeed", Name: "seed", SectionKey: "order", UsageDefaultValue: "randomly generated by Ginkgo", + Usage: "The seed used to randomize the spec suite."}, + {KeyPath: "S.RandomizeAllSpecs", Name: "randomize-all", SectionKey: "order", DeprecatedName: "randomizeAllSpecs", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will randomize all specs together. By default, ginkgo only randomizes the top level Describe, Context and When containers."}, + + {KeyPath: "S.FailOnPending", Name: "fail-on-pending", SectionKey: "failure", DeprecatedName: "failOnPending", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will mark the test suite as failed if any specs are pending."}, + {KeyPath: "S.FailFast", Name: "fail-fast", SectionKey: "failure", DeprecatedName: "failFast", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will stop running a test suite after a failure occurs."}, + {KeyPath: "S.FlakeAttempts", Name: "flake-attempts", SectionKey: "failure", UsageDefaultValue: "0 - failed tests are not retried", DeprecatedName: "flakeAttempts", DeprecatedDocLink: "changed-command-line-flags", + Usage: "Make up to this many attempts to run each spec. If any of the attempts succeed, the suite will not be failed."}, + + {KeyPath: "S.DryRun", Name: "dry-run", SectionKey: "debug", DeprecatedName: "dryRun", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v."}, + {KeyPath: "S.PollProgressAfter", Name: "poll-progress-after", SectionKey: "debug", UsageDefaultValue: "0", + Usage: "Emit node progress reports periodically if node hasn't completed after this duration."}, + {KeyPath: "S.PollProgressInterval", Name: "poll-progress-interval", SectionKey: "debug", UsageDefaultValue: "10s", + Usage: "The rate at which to emit node progress reports after poll-progress-after has elapsed."}, + {KeyPath: "S.SourceRoots", Name: "source-root", SectionKey: "debug", + Usage: "The location to look for source code when generating progress reports. You can pass multiple --source-root flags."}, + {KeyPath: "S.Timeout", Name: "timeout", SectionKey: "debug", UsageDefaultValue: "1h", + Usage: "Test suite fails if it does not complete within the specified timeout."}, + {KeyPath: "S.GracePeriod", Name: "grace-period", SectionKey: "debug", UsageDefaultValue: "30s", + Usage: "When interrupted, Ginkgo will wait for GracePeriod for the current running node to exit before moving on to the next one."}, + {KeyPath: "S.OutputInterceptorMode", Name: "output-interceptor-mode", SectionKey: "debug", UsageArgument: "dup, swap, or none", + Usage: "If set, ginkgo will use the specified output interception strategy when running in parallel. Defaults to dup on unix and swap on windows."}, + + {KeyPath: "S.LabelFilter", Name: "label-filter", SectionKey: "filter", UsageArgument: "expression", + Usage: "If set, ginkgo will only run specs with labels that match the label-filter. The passed-in expression can include boolean operations (!, &&, ||, ','), groupings via '()', and regular expressions '/regexp/'. e.g. '(cat || dog) && !fruit'"}, + {KeyPath: "S.FocusStrings", Name: "focus", SectionKey: "filter", + Usage: "If set, ginkgo will only run specs that match this regular expression. Can be specified multiple times, values are ORed."}, + {KeyPath: "S.SkipStrings", Name: "skip", SectionKey: "filter", + Usage: "If set, ginkgo will only run specs that do not match this regular expression. Can be specified multiple times, values are ORed."}, + {KeyPath: "S.FocusFiles", Name: "focus-file", SectionKey: "filter", UsageArgument: "file (regexp) | file:line | file:lineA-lineB | file:line,line,line", + Usage: "If set, ginkgo will only run specs in matching files. Can be specified multiple times, values are ORed."}, + {KeyPath: "S.SkipFiles", Name: "skip-file", SectionKey: "filter", UsageArgument: "file (regexp) | file:line | file:lineA-lineB | file:line,line,line", + Usage: "If set, ginkgo will skip specs in matching files. Can be specified multiple times, values are ORed."}, + + {KeyPath: "D.RegexScansFilePath", DeprecatedName: "regexScansFilePath", DeprecatedDocLink: "removed--regexscansfilepath", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.DebugParallel", DeprecatedName: "debug", DeprecatedDocLink: "removed--debug", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.EmitSpecProgress", DeprecatedName: "progress", SectionKey: "debug", + DeprecatedVersion: "2.5.0", Usage: ". The functionality provided by --progress was confusing and is no longer needed. Use --show-node-events instead to see node entry and exit events included in the timeline of failed and verbose specs. Or you can run with -vv to always see all node events. Lastly, --poll-progress-after and the PollProgressAfter decorator now provide a better mechanism for debugging specs that tend to get stuck."}, +} + +// ParallelConfigFlags provides flags for the Ginkgo test process (not the CLI) +var ParallelConfigFlags = GinkgoFlags{ + {KeyPath: "S.ParallelProcess", Name: "parallel.process", SectionKey: "low-level-parallel", UsageDefaultValue: "1", + Usage: "This worker process's (one-indexed) process number. For running specs in parallel."}, + {KeyPath: "S.ParallelTotal", Name: "parallel.total", SectionKey: "low-level-parallel", UsageDefaultValue: "1", + Usage: "The total number of worker processes. For running specs in parallel."}, + {KeyPath: "S.ParallelHost", Name: "parallel.host", SectionKey: "low-level-parallel", UsageDefaultValue: "set by Ginkgo CLI", + Usage: "The address for the server that will synchronize the processes."}, +} + +// ReporterConfigFlags provides flags for the Ginkgo test process, and CLI +var ReporterConfigFlags = GinkgoFlags{ + {KeyPath: "R.NoColor", Name: "no-color", SectionKey: "output", DeprecatedName: "noColor", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, suppress color output in default reporter."}, + {KeyPath: "R.Verbose", Name: "v", SectionKey: "output", + Usage: "If set, emits more output including GinkgoWriter contents."}, + {KeyPath: "R.VeryVerbose", Name: "vv", SectionKey: "output", + Usage: "If set, emits with maximal verbosity - includes skipped and pending tests."}, + {KeyPath: "R.Succinct", Name: "succinct", SectionKey: "output", + Usage: "If set, default reporter prints out a very succinct report"}, + {KeyPath: "R.FullTrace", Name: "trace", SectionKey: "output", + Usage: "If set, default reporter prints out the full stack trace when a failure occurs"}, + {KeyPath: "R.ShowNodeEvents", Name: "show-node-events", SectionKey: "output", + Usage: "If set, default reporter prints node > Enter and < Exit events when specs fail"}, + + {KeyPath: "R.JSONReport", Name: "json-report", UsageArgument: "filename.json", SectionKey: "output", + Usage: "If set, Ginkgo will generate a JSON-formatted test report at the specified location."}, + {KeyPath: "R.JUnitReport", Name: "junit-report", UsageArgument: "filename.xml", SectionKey: "output", DeprecatedName: "reportFile", DeprecatedDocLink: "improved-reporting-infrastructure", + Usage: "If set, Ginkgo will generate a conformant junit test report in the specified file."}, + {KeyPath: "R.TeamcityReport", Name: "teamcity-report", UsageArgument: "filename", SectionKey: "output", + Usage: "If set, Ginkgo will generate a Teamcity-formatted test report at the specified location."}, + + {KeyPath: "D.SlowSpecThresholdWithFLoatUnits", DeprecatedName: "slowSpecThreshold", DeprecatedDocLink: "changed--slowspecthreshold", + Usage: "use --slow-spec-threshold instead and pass in a duration string (e.g. '5s', not '5.0')"}, + {KeyPath: "D.NoisyPendings", DeprecatedName: "noisyPendings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.NoisySkippings", DeprecatedName: "noisySkippings", DeprecatedDocLink: "removed--noisypendings-and--noisyskippings", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.SlowSpecThreshold", DeprecatedName: "slow-spec-threshold", SectionKey: "output", Usage: "--slow-spec-threshold has been deprecated and will be removed in a future version of Ginkgo. This feature has proved to be more noisy than useful. You can use --poll-progress-after, instead, to get more actionable feedback about potentially slow specs and understand where they might be getting stuck.", DeprecatedVersion: "2.5.0"}, + {KeyPath: "D.AlwaysEmitGinkgoWriter", DeprecatedName: "always-emit-ginkgo-writer", SectionKey: "output", Usage: " - use -v instead, or one of Ginkgo's machine-readable report formats to get GinkgoWriter output for passing specs."}, +} + +// BuildTestSuiteFlagSet attaches to the CommandLine flagset and provides flags for the Ginkgo test process +func BuildTestSuiteFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig) (GinkgoFlagSet, error) { + flags := SuiteConfigFlags.CopyAppend(ParallelConfigFlags...).CopyAppend(ReporterConfigFlags...) + flags = flags.WithPrefix("ginkgo") + bindings := map[string]interface{}{ + "S": suiteConfig, + "R": reporterConfig, + "D": &deprecatedConfig{}, + } + extraGoFlagsSection := GinkgoFlagSection{Style: "{{gray}}", Heading: "Go test flags"} + + return NewAttachedGinkgoFlagSet(flag.CommandLine, flags, bindings, FlagSections, extraGoFlagsSection) +} + +// VetConfig validates that the Ginkgo test process' configuration is sound +func VetConfig(flagSet GinkgoFlagSet, suiteConfig SuiteConfig, reporterConfig ReporterConfig) []error { + errors := []error{} + + if flagSet.WasSet("count") || flagSet.WasSet("test.count") { + flag := flagSet.Lookup("count") + if flag == nil { + flag = flagSet.Lookup("test.count") + } + count, err := strconv.Atoi(flag.Value.String()) + if err != nil || count != 1 { + errors = append(errors, GinkgoErrors.InvalidGoFlagCount()) + } + } + + if flagSet.WasSet("parallel") || flagSet.WasSet("test.parallel") { + errors = append(errors, GinkgoErrors.InvalidGoFlagParallel()) + } + + if suiteConfig.ParallelTotal < 1 { + errors = append(errors, GinkgoErrors.InvalidParallelTotalConfiguration()) + } + + if suiteConfig.ParallelProcess > suiteConfig.ParallelTotal || suiteConfig.ParallelProcess < 1 { + errors = append(errors, GinkgoErrors.InvalidParallelProcessConfiguration()) + } + + if suiteConfig.ParallelTotal > 1 && suiteConfig.ParallelHost == "" { + errors = append(errors, GinkgoErrors.MissingParallelHostConfiguration()) + } + + if suiteConfig.DryRun && suiteConfig.ParallelTotal > 1 { + errors = append(errors, GinkgoErrors.DryRunInParallelConfiguration()) + } + + if suiteConfig.GracePeriod <= 0 { + errors = append(errors, GinkgoErrors.GracePeriodCannotBeZero()) + } + + if len(suiteConfig.FocusFiles) > 0 { + _, err := ParseFileFilters(suiteConfig.FocusFiles) + if err != nil { + errors = append(errors, err) + } + } + + if len(suiteConfig.SkipFiles) > 0 { + _, err := ParseFileFilters(suiteConfig.SkipFiles) + if err != nil { + errors = append(errors, err) + } + } + + if suiteConfig.LabelFilter != "" { + _, err := ParseLabelFilter(suiteConfig.LabelFilter) + if err != nil { + errors = append(errors, err) + } + } + + switch strings.ToLower(suiteConfig.OutputInterceptorMode) { + case "", "dup", "swap", "none": + default: + errors = append(errors, GinkgoErrors.InvalidOutputInterceptorModeConfiguration(suiteConfig.OutputInterceptorMode)) + } + + numVerbosity := 0 + for _, v := range []bool{reporterConfig.Succinct, reporterConfig.Verbose, reporterConfig.VeryVerbose} { + if v { + numVerbosity++ + } + } + if numVerbosity > 1 { + errors = append(errors, GinkgoErrors.ConflictingVerbosityConfiguration()) + } + + return errors +} + +// GinkgoCLISharedFlags provides flags shared by the Ginkgo CLI's build, watch, and run commands +var GinkgoCLISharedFlags = GinkgoFlags{ + {KeyPath: "C.Recurse", Name: "r", SectionKey: "multiple-suites", + Usage: "If set, ginkgo finds and runs test suites under the current directory recursively."}, + {KeyPath: "C.SkipPackage", Name: "skip-package", SectionKey: "multiple-suites", DeprecatedName: "skipPackage", DeprecatedDocLink: "changed-command-line-flags", + UsageArgument: "comma-separated list of packages", + Usage: "A comma-separated list of package names to be skipped. If any part of the package's path matches, that package is ignored."}, + {KeyPath: "C.RequireSuite", Name: "require-suite", SectionKey: "failure", DeprecatedName: "requireSuite", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, Ginkgo fails if there are ginkgo tests in a directory but no invocation of RunSpecs."}, + {KeyPath: "C.NumCompilers", Name: "compilers", SectionKey: "multiple-suites", UsageDefaultValue: "0 (will autodetect)", + Usage: "When running multiple packages, the number of concurrent compilations to perform."}, +} + +// GinkgoCLIRunAndWatchFlags provides flags shared by the Ginkgo CLI's build and watch commands (but not run) +var GinkgoCLIRunAndWatchFlags = GinkgoFlags{ + {KeyPath: "C.Procs", Name: "procs", SectionKey: "parallel", UsageDefaultValue: "1 (run in series)", + Usage: "The number of parallel test nodes to run."}, + {KeyPath: "C.Procs", Name: "nodes", SectionKey: "parallel", UsageDefaultValue: "1 (run in series)", + Usage: "--nodes is an alias for --procs"}, + {KeyPath: "C.Parallel", Name: "p", SectionKey: "parallel", + Usage: "If set, ginkgo will run in parallel with an auto-detected number of nodes."}, + {KeyPath: "C.AfterRunHook", Name: "after-run-hook", SectionKey: "misc", DeprecatedName: "afterSuiteHook", DeprecatedDocLink: "changed-command-line-flags", + Usage: "Command to run when a test suite completes."}, + {KeyPath: "C.OutputDir", Name: "output-dir", SectionKey: "output", UsageArgument: "directory", DeprecatedName: "outputdir", DeprecatedDocLink: "improved-profiling-support", + Usage: "A location to place all generated profiles and reports."}, + {KeyPath: "C.KeepSeparateCoverprofiles", Name: "keep-separate-coverprofiles", SectionKey: "code-and-coverage-analysis", + Usage: "If set, Ginkgo does not merge coverprofiles into one monolithic coverprofile. The coverprofiles will remain in their respective package directories or in -output-dir if set."}, + {KeyPath: "C.KeepSeparateReports", Name: "keep-separate-reports", SectionKey: "output", + Usage: "If set, Ginkgo does not merge per-suite reports (e.g. -json-report) into one monolithic report for the entire testrun. The reports will remain in their respective package directories or in -output-dir if set."}, + + {KeyPath: "D.Stream", DeprecatedName: "stream", DeprecatedDocLink: "removed--stream", DeprecatedVersion: "2.0.0"}, + {KeyPath: "D.Notify", DeprecatedName: "notify", DeprecatedDocLink: "removed--notify", DeprecatedVersion: "2.0.0"}, +} + +// GinkgoCLIRunFlags provides flags for Ginkgo CLI's run command that aren't shared by any other commands +var GinkgoCLIRunFlags = GinkgoFlags{ + {KeyPath: "C.KeepGoing", Name: "keep-going", SectionKey: "multiple-suites", DeprecatedName: "keepGoing", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, failures from earlier test suites do not prevent later test suites from running."}, + {KeyPath: "C.UntilItFails", Name: "until-it-fails", SectionKey: "debug", DeprecatedName: "untilItFails", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will keep rerunning test suites until a failure occurs."}, + {KeyPath: "C.Repeat", Name: "repeat", SectionKey: "debug", UsageArgument: "n", UsageDefaultValue: "0 - i.e. no repetition, run only once", + Usage: "The number of times to re-run a test-suite. Useful for debugging flaky tests. If set to N the suite will be run N+1 times and will be required to pass each time."}, + {KeyPath: "C.RandomizeSuites", Name: "randomize-suites", SectionKey: "order", DeprecatedName: "randomizeSuites", DeprecatedDocLink: "changed-command-line-flags", + Usage: "If set, ginkgo will randomize the order in which test suites run."}, +} + +// GinkgoCLIRunFlags provides flags for Ginkgo CLI's watch command that aren't shared by any other commands +var GinkgoCLIWatchFlags = GinkgoFlags{ + {KeyPath: "C.Depth", Name: "depth", SectionKey: "watch", + Usage: "Ginkgo will watch dependencies down to this depth in the dependency tree."}, + {KeyPath: "C.WatchRegExp", Name: "watch-regexp", SectionKey: "watch", DeprecatedName: "watchRegExp", DeprecatedDocLink: "changed-command-line-flags", + UsageArgument: "Regular Expression", + UsageDefaultValue: `\.go$`, + Usage: "Only files matching this regular expression will be watched for changes."}, +} + +// GoBuildFlags provides flags for the Ginkgo CLI build, run, and watch commands that capture go's build-time flags. These are passed to go test -c by the ginkgo CLI +var GoBuildFlags = GinkgoFlags{ + {KeyPath: "Go.Race", Name: "race", SectionKey: "code-and-coverage-analysis", + Usage: "enable data race detection. Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64, linux/ppc64le and linux/arm64 (only for 48-bit VMA)."}, + {KeyPath: "Go.Vet", Name: "vet", UsageArgument: "list", SectionKey: "code-and-coverage-analysis", + Usage: `Configure the invocation of "go vet" during "go test" to use the comma-separated list of vet checks. If list is empty, "go test" runs "go vet" with a curated list of checks believed to be always worth addressing. If list is "off", "go test" does not run "go vet" at all. Available checks can be found by running 'go doc cmd/vet'`}, + {KeyPath: "Go.Cover", Name: "cover", SectionKey: "code-and-coverage-analysis", + Usage: "Enable coverage analysis. Note that because coverage works by annotating the source code before compilation, compilation and test failures with coverage enabled may report line numbers that don't correspond to the original sources."}, + {KeyPath: "Go.CoverMode", Name: "covermode", UsageArgument: "set,count,atomic", SectionKey: "code-and-coverage-analysis", + Usage: `Set the mode for coverage analysis for the package[s] being tested. 'set': does this statement run? 'count': how many times does this statement run? 'atomic': like count, but correct in multithreaded tests and more expensive (must use atomic with -race). Sets -cover`}, + {KeyPath: "Go.CoverPkg", Name: "coverpkg", UsageArgument: "pattern1,pattern2,pattern3", SectionKey: "code-and-coverage-analysis", + Usage: "Apply coverage analysis in each test to packages matching the patterns. The default is for each test to analyze only the package being tested. See 'go help packages' for a description of package patterns. Sets -cover."}, + + {KeyPath: "Go.A", Name: "a", SectionKey: "go-build", + Usage: "force rebuilding of packages that are already up-to-date."}, + {KeyPath: "Go.ASMFlags", Name: "asmflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build", + Usage: "arguments to pass on each go tool asm invocation."}, + {KeyPath: "Go.BuildMode", Name: "buildmode", UsageArgument: "mode", SectionKey: "go-build", + Usage: "build mode to use. See 'go help buildmode' for more."}, + {KeyPath: "Go.Compiler", Name: "compiler", UsageArgument: "name", SectionKey: "go-build", + Usage: "name of compiler to use, as in runtime.Compiler (gccgo or gc)."}, + {KeyPath: "Go.GCCGoFlags", Name: "gccgoflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build", + Usage: "arguments to pass on each gccgo compiler/linker invocation."}, + {KeyPath: "Go.GCFlags", Name: "gcflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build", + Usage: "arguments to pass on each go tool compile invocation."}, + {KeyPath: "Go.InstallSuffix", Name: "installsuffix", SectionKey: "go-build", + Usage: "a suffix to use in the name of the package installation directory, in order to keep output separate from default builds. If using the -race flag, the install suffix is automatically set to raceor, if set explicitly, has _race appended to it. Likewise for the -msan flag. Using a -buildmode option that requires non-default compile flags has a similar effect."}, + {KeyPath: "Go.LDFlags", Name: "ldflags", UsageArgument: "'[pattern=]arg list'", SectionKey: "go-build", + Usage: "arguments to pass on each go tool link invocation."}, + {KeyPath: "Go.LinkShared", Name: "linkshared", SectionKey: "go-build", + Usage: "build code that will be linked against shared libraries previously created with -buildmode=shared."}, + {KeyPath: "Go.Mod", Name: "mod", UsageArgument: "mode (readonly, vendor, or mod)", SectionKey: "go-build", + Usage: "module download mode to use: readonly, vendor, or mod. See 'go help modules' for more."}, + {KeyPath: "Go.ModCacheRW", Name: "modcacherw", SectionKey: "go-build", + Usage: "leave newly-created directories in the module cache read-write instead of making them read-only."}, + {KeyPath: "Go.ModFile", Name: "modfile", UsageArgument: "file", SectionKey: "go-build", + Usage: `in module aware mode, read (and possibly write) an alternate go.mod file instead of the one in the module root directory. A file named go.mod must still be present in order to determine the module root directory, but it is not accessed. When -modfile is specified, an alternate go.sum file is also used: its path is derived from the -modfile flag by trimming the ".mod" extension and appending ".sum".`}, + {KeyPath: "Go.MSan", Name: "msan", SectionKey: "go-build", + Usage: "enable interoperation with memory sanitizer. Supported only on linux/amd64, linux/arm64 and only with Clang/LLVM as the host C compiler. On linux/arm64, pie build mode will be used."}, + {KeyPath: "Go.N", Name: "n", SectionKey: "go-build", + Usage: "print the commands but do not run them."}, + {KeyPath: "Go.PkgDir", Name: "pkgdir", UsageArgument: "dir", SectionKey: "go-build", + Usage: "install and load all packages from dir instead of the usual locations. For example, when building with a non-standard configuration, use -pkgdir to keep generated packages in a separate location."}, + {KeyPath: "Go.Tags", Name: "tags", UsageArgument: "tag,list", SectionKey: "go-build", + Usage: "a comma-separated list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package. (Earlier versions of Go used a space-separated list, and that form is deprecated but still recognized.)"}, + {KeyPath: "Go.TrimPath", Name: "trimpath", SectionKey: "go-build", + Usage: `remove all file system paths from the resulting executable. Instead of absolute file system paths, the recorded file names will begin with either "go" (for the standard library), or a module path@version (when using modules), or a plain import path (when using GOPATH).`}, + {KeyPath: "Go.ToolExec", Name: "toolexec", UsageArgument: "'cmd args'", SectionKey: "go-build", + Usage: "a program to use to invoke toolchain programs like vet and asm. For example, instead of running asm, the go command will run cmd args /path/to/asm '."}, + {KeyPath: "Go.Work", Name: "work", SectionKey: "go-build", + Usage: "print the name of the temporary work directory and do not delete it when exiting."}, + {KeyPath: "Go.X", Name: "x", SectionKey: "go-build", + Usage: "print the commands."}, +} + +// GoRunFlags provides flags for the Ginkgo CLI run, and watch commands that capture go's run-time flags. These are passed to the compiled test binary by the ginkgo CLI +var GoRunFlags = GinkgoFlags{ + {KeyPath: "Go.CoverProfile", Name: "coverprofile", UsageArgument: "file", SectionKey: "code-and-coverage-analysis", + Usage: `Write a coverage profile to the file after all tests have passed. Sets -cover.`}, + {KeyPath: "Go.BlockProfile", Name: "blockprofile", UsageArgument: "file", SectionKey: "performance-analysis", + Usage: `Write a goroutine blocking profile to the specified file when all tests are complete. Preserves test binary.`}, + {KeyPath: "Go.BlockProfileRate", Name: "blockprofilerate", UsageArgument: "rate", SectionKey: "performance-analysis", + Usage: `Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with rate. See 'go doc runtime.SetBlockProfileRate'. The profiler aims to sample, on average, one blocking event every n nanoseconds the program spends blocked. By default, if -test.blockprofile is set without this flag, all blocking events are recorded, equivalent to -test.blockprofilerate=1.`}, + {KeyPath: "Go.CPUProfile", Name: "cpuprofile", UsageArgument: "file", SectionKey: "performance-analysis", + Usage: `Write a CPU profile to the specified file before exiting. Preserves test binary.`}, + {KeyPath: "Go.MemProfile", Name: "memprofile", UsageArgument: "file", SectionKey: "performance-analysis", + Usage: `Write an allocation profile to the file after all tests have passed. Preserves test binary.`}, + {KeyPath: "Go.MemProfileRate", Name: "memprofilerate", UsageArgument: "rate", SectionKey: "performance-analysis", + Usage: `Enable more precise (and expensive) memory allocation profiles by setting runtime.MemProfileRate. See 'go doc runtime.MemProfileRate'. To profile all memory allocations, use -test.memprofilerate=1.`}, + {KeyPath: "Go.MutexProfile", Name: "mutexprofile", UsageArgument: "file", SectionKey: "performance-analysis", + Usage: `Write a mutex contention profile to the specified file when all tests are complete. Preserves test binary.`}, + {KeyPath: "Go.MutexProfileFraction", Name: "mutexprofilefraction", UsageArgument: "n", SectionKey: "performance-analysis", + Usage: `if >= 0, calls runtime.SetMutexProfileFraction() Sample 1 in n stack traces of goroutines holding a contended mutex.`}, + {KeyPath: "Go.Trace", Name: "execution-trace", UsageArgument: "file", ExportAs: "trace", SectionKey: "performance-analysis", + Usage: `Write an execution trace to the specified file before exiting.`}, +} + +// VetAndInitializeCLIAndGoConfig validates that the Ginkgo CLI's configuration is sound +// It returns a potentially mutated copy of the config that rationalizes the configuration to ensure consistency for downstream consumers +func VetAndInitializeCLIAndGoConfig(cliConfig CLIConfig, goFlagsConfig GoFlagsConfig) (CLIConfig, GoFlagsConfig, []error) { + errors := []error{} + + if cliConfig.Repeat > 0 && cliConfig.UntilItFails { + errors = append(errors, GinkgoErrors.BothRepeatAndUntilItFails()) + } + + //initialize the output directory + if cliConfig.OutputDir != "" { + err := os.MkdirAll(cliConfig.OutputDir, 0777) + if err != nil { + errors = append(errors, err) + } + } + + //ensure cover mode is configured appropriately + if goFlagsConfig.CoverMode != "" || goFlagsConfig.CoverPkg != "" || goFlagsConfig.CoverProfile != "" { + goFlagsConfig.Cover = true + } + if goFlagsConfig.Cover && goFlagsConfig.CoverProfile == "" { + goFlagsConfig.CoverProfile = "coverprofile.out" + } + + return cliConfig, goFlagsConfig, errors +} + +// GenerateGoTestCompileArgs is used by the Ginkgo CLI to generate command line arguments to pass to the go test -c command when compiling the test +func GenerateGoTestCompileArgs(goFlagsConfig GoFlagsConfig, destination string, packageToBuild string, pathToInvocationPath string) ([]string, error) { + // if the user has set the CoverProfile run-time flag make sure to set the build-time cover flag to make sure + // the built test binary can generate a coverprofile + if goFlagsConfig.CoverProfile != "" { + goFlagsConfig.Cover = true + } + + if goFlagsConfig.CoverPkg != "" { + coverPkgs := strings.Split(goFlagsConfig.CoverPkg, ",") + adjustedCoverPkgs := make([]string, len(coverPkgs)) + for i, coverPkg := range coverPkgs { + coverPkg = strings.Trim(coverPkg, " ") + if strings.HasPrefix(coverPkg, "./") { + // this is a relative coverPkg - we need to reroot it + adjustedCoverPkgs[i] = "./" + filepath.Join(pathToInvocationPath, strings.TrimPrefix(coverPkg, "./")) + } else { + // this is a package name - don't touch it + adjustedCoverPkgs[i] = coverPkg + } + } + goFlagsConfig.CoverPkg = strings.Join(adjustedCoverPkgs, ",") + } + + args := []string{"test", "-c", "-o", destination, packageToBuild} + goArgs, err := GenerateFlagArgs( + GoBuildFlags, + map[string]interface{}{ + "Go": &goFlagsConfig, + }, + ) + + if err != nil { + return []string{}, err + } + args = append(args, goArgs...) + return args, nil +} + +// GenerateGinkgoTestRunArgs is used by the Ginkgo CLI to generate command line arguments to pass to the compiled Ginkgo test binary +func GenerateGinkgoTestRunArgs(suiteConfig SuiteConfig, reporterConfig ReporterConfig, goFlagsConfig GoFlagsConfig) ([]string, error) { + var flags GinkgoFlags + flags = SuiteConfigFlags.WithPrefix("ginkgo") + flags = flags.CopyAppend(ParallelConfigFlags.WithPrefix("ginkgo")...) + flags = flags.CopyAppend(ReporterConfigFlags.WithPrefix("ginkgo")...) + flags = flags.CopyAppend(GoRunFlags.WithPrefix("test")...) + bindings := map[string]interface{}{ + "S": &suiteConfig, + "R": &reporterConfig, + "Go": &goFlagsConfig, + } + + return GenerateFlagArgs(flags, bindings) +} + +// GenerateGoTestRunArgs is used by the Ginkgo CLI to generate command line arguments to pass to the compiled non-Ginkgo test binary +func GenerateGoTestRunArgs(goFlagsConfig GoFlagsConfig) ([]string, error) { + flags := GoRunFlags.WithPrefix("test") + bindings := map[string]interface{}{ + "Go": &goFlagsConfig, + } + + args, err := GenerateFlagArgs(flags, bindings) + if err != nil { + return args, err + } + args = append(args, "--test.v") + return args, nil +} + +// BuildRunCommandFlagSet builds the FlagSet for the `ginkgo run` command +func BuildRunCommandFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig, cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) { + flags := SuiteConfigFlags + flags = flags.CopyAppend(ReporterConfigFlags...) + flags = flags.CopyAppend(GinkgoCLISharedFlags...) + flags = flags.CopyAppend(GinkgoCLIRunAndWatchFlags...) + flags = flags.CopyAppend(GinkgoCLIRunFlags...) + flags = flags.CopyAppend(GoBuildFlags...) + flags = flags.CopyAppend(GoRunFlags...) + + bindings := map[string]interface{}{ + "S": suiteConfig, + "R": reporterConfig, + "C": cliConfig, + "Go": goFlagsConfig, + "D": &deprecatedConfig{}, + } + + return NewGinkgoFlagSet(flags, bindings, FlagSections) +} + +// BuildWatchCommandFlagSet builds the FlagSet for the `ginkgo watch` command +func BuildWatchCommandFlagSet(suiteConfig *SuiteConfig, reporterConfig *ReporterConfig, cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) { + flags := SuiteConfigFlags + flags = flags.CopyAppend(ReporterConfigFlags...) + flags = flags.CopyAppend(GinkgoCLISharedFlags...) + flags = flags.CopyAppend(GinkgoCLIRunAndWatchFlags...) + flags = flags.CopyAppend(GinkgoCLIWatchFlags...) + flags = flags.CopyAppend(GoBuildFlags...) + flags = flags.CopyAppend(GoRunFlags...) + + bindings := map[string]interface{}{ + "S": suiteConfig, + "R": reporterConfig, + "C": cliConfig, + "Go": goFlagsConfig, + "D": &deprecatedConfig{}, + } + + return NewGinkgoFlagSet(flags, bindings, FlagSections) +} + +// BuildBuildCommandFlagSet builds the FlagSet for the `ginkgo build` command +func BuildBuildCommandFlagSet(cliConfig *CLIConfig, goFlagsConfig *GoFlagsConfig) (GinkgoFlagSet, error) { + flags := GinkgoCLISharedFlags + flags = flags.CopyAppend(GoBuildFlags...) + + bindings := map[string]interface{}{ + "C": cliConfig, + "Go": goFlagsConfig, + "D": &deprecatedConfig{}, + } + + flagSections := make(GinkgoFlagSections, len(FlagSections)) + copy(flagSections, FlagSections) + for i := range flagSections { + if flagSections[i].Key == "multiple-suites" { + flagSections[i].Heading = "Building Multiple Suites" + } + if flagSections[i].Key == "go-build" { + flagSections[i] = GinkgoFlagSection{Key: "go-build", Style: "{{/}}", Heading: "Go Build Flags", + Description: "These flags are inherited from go build."} + } + } + + return NewGinkgoFlagSet(flags, bindings, flagSections) +} + +func BuildLabelsCommandFlagSet(cliConfig *CLIConfig) (GinkgoFlagSet, error) { + flags := GinkgoCLISharedFlags.SubsetWithNames("r", "skip-package") + + bindings := map[string]interface{}{ + "C": cliConfig, + } + + flagSections := make(GinkgoFlagSections, len(FlagSections)) + copy(flagSections, FlagSections) + for i := range flagSections { + if flagSections[i].Key == "multiple-suites" { + flagSections[i].Heading = "Fetching Labels from Multiple Suites" + } + } + + return NewGinkgoFlagSet(flags, bindings, flagSections) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.go new file mode 100644 index 000000000000..17922304b63c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.go @@ -0,0 +1,141 @@ +package types + +import ( + "strconv" + "time" +) + +/* + A set of deprecations to make the transition from v1 to v2 easier for users who have written custom reporters. +*/ + +type SuiteSummary = DeprecatedSuiteSummary +type SetupSummary = DeprecatedSetupSummary +type SpecSummary = DeprecatedSpecSummary +type SpecMeasurement = DeprecatedSpecMeasurement +type SpecComponentType = NodeType +type SpecFailure = DeprecatedSpecFailure + +var ( + SpecComponentTypeInvalid = NodeTypeInvalid + SpecComponentTypeContainer = NodeTypeContainer + SpecComponentTypeIt = NodeTypeIt + SpecComponentTypeBeforeEach = NodeTypeBeforeEach + SpecComponentTypeJustBeforeEach = NodeTypeJustBeforeEach + SpecComponentTypeAfterEach = NodeTypeAfterEach + SpecComponentTypeJustAfterEach = NodeTypeJustAfterEach + SpecComponentTypeBeforeSuite = NodeTypeBeforeSuite + SpecComponentTypeSynchronizedBeforeSuite = NodeTypeSynchronizedBeforeSuite + SpecComponentTypeAfterSuite = NodeTypeAfterSuite + SpecComponentTypeSynchronizedAfterSuite = NodeTypeSynchronizedAfterSuite +) + +type DeprecatedSuiteSummary struct { + SuiteDescription string + SuiteSucceeded bool + SuiteID string + + NumberOfSpecsBeforeParallelization int + NumberOfTotalSpecs int + NumberOfSpecsThatWillBeRun int + NumberOfPendingSpecs int + NumberOfSkippedSpecs int + NumberOfPassedSpecs int + NumberOfFailedSpecs int + NumberOfFlakedSpecs int + RunTime time.Duration +} + +type DeprecatedSetupSummary struct { + ComponentType SpecComponentType + CodeLocation CodeLocation + + State SpecState + RunTime time.Duration + Failure SpecFailure + + CapturedOutput string + SuiteID string +} + +type DeprecatedSpecSummary struct { + ComponentTexts []string + ComponentCodeLocations []CodeLocation + + State SpecState + RunTime time.Duration + Failure SpecFailure + IsMeasurement bool + NumberOfSamples int + Measurements map[string]*DeprecatedSpecMeasurement + + CapturedOutput string + SuiteID string +} + +func (s DeprecatedSpecSummary) HasFailureState() bool { + return s.State.Is(SpecStateFailureStates) +} + +func (s DeprecatedSpecSummary) TimedOut() bool { + return false +} + +func (s DeprecatedSpecSummary) Panicked() bool { + return s.State == SpecStatePanicked +} + +func (s DeprecatedSpecSummary) Failed() bool { + return s.State == SpecStateFailed +} + +func (s DeprecatedSpecSummary) Passed() bool { + return s.State == SpecStatePassed +} + +func (s DeprecatedSpecSummary) Skipped() bool { + return s.State == SpecStateSkipped +} + +func (s DeprecatedSpecSummary) Pending() bool { + return s.State == SpecStatePending +} + +type DeprecatedSpecFailure struct { + Message string + Location CodeLocation + ForwardedPanic string + + ComponentIndex int + ComponentType SpecComponentType + ComponentCodeLocation CodeLocation +} + +type DeprecatedSpecMeasurement struct { + Name string + Info interface{} + Order int + + Results []float64 + + Smallest float64 + Largest float64 + Average float64 + StdDeviation float64 + + SmallestLabel string + LargestLabel string + AverageLabel string + Units string + Precision int +} + +func (s DeprecatedSpecMeasurement) PrecisionFmt() string { + if s.Precision == 0 { + return "%f" + } + + str := strconv.Itoa(s.Precision) + + return "%." + str + "f" +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go new file mode 100644 index 000000000000..e2519f673ffe --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go @@ -0,0 +1,177 @@ +package types + +import ( + "os" + "strconv" + "strings" + "sync" + "unicode" + + "github.com/onsi/ginkgo/v2/formatter" +) + +type Deprecation struct { + Message string + DocLink string + Version string +} + +type deprecations struct{} + +var Deprecations = deprecations{} + +func (d deprecations) CustomReporter() Deprecation { + return Deprecation{ + Message: "Support for custom reporters has been removed in V2. Please read the documentation linked to below for Ginkgo's new behavior and for a migration path:", + DocLink: "removed-custom-reporters", + Version: "1.16.0", + } +} + +func (d deprecations) Async() Deprecation { + return Deprecation{ + Message: "You are passing a Done channel to a test node to test asynchronous behavior. This is deprecated in Ginkgo V2. Your test will run synchronously and the timeout will be ignored.", + DocLink: "removed-async-testing", + Version: "1.16.0", + } +} + +func (d deprecations) Measure() Deprecation { + return Deprecation{ + Message: "Measure is deprecated and has been removed from Ginkgo V2. Any Measure tests in your spec will not run. Please migrate to gomega/gmeasure.", + DocLink: "removed-measure", + Version: "1.16.3", + } +} + +func (d deprecations) ParallelNode() Deprecation { + return Deprecation{ + Message: "GinkgoParallelNode is deprecated and will be removed in Ginkgo V2. Please use GinkgoParallelProcess instead.", + DocLink: "renamed-ginkgoparallelnode", + Version: "1.16.4", + } +} + +func (d deprecations) CurrentGinkgoTestDescription() Deprecation { + return Deprecation{ + Message: "CurrentGinkgoTestDescription() is deprecated in Ginkgo V2. Use CurrentSpecReport() instead.", + DocLink: "changed-currentginkgotestdescription", + Version: "1.16.0", + } +} + +func (d deprecations) Convert() Deprecation { + return Deprecation{ + Message: "The convert command is deprecated in Ginkgo V2", + DocLink: "removed-ginkgo-convert", + Version: "1.16.0", + } +} + +func (d deprecations) Blur() Deprecation { + return Deprecation{ + Message: "The blur command is deprecated in Ginkgo V2. Use 'ginkgo unfocus' instead.", + Version: "1.16.0", + } +} + +func (d deprecations) Nodot() Deprecation { + return Deprecation{ + Message: "The nodot command is deprecated in Ginkgo V2. Please either dot-import Ginkgo or use the package identifier in your code to references objects and types provided by Ginkgo and Gomega.", + DocLink: "removed-ginkgo-nodot", + Version: "1.16.0", + } +} + +func (d deprecations) SuppressProgressReporting() Deprecation { + return Deprecation{ + Message: "Improvements to how reporters emit timeline information means that SuppressProgressReporting is no longer necessary and has been deprecated.", + Version: "2.5.0", + } +} + +type DeprecationTracker struct { + deprecations map[Deprecation][]CodeLocation + lock *sync.Mutex +} + +func NewDeprecationTracker() *DeprecationTracker { + return &DeprecationTracker{ + deprecations: map[Deprecation][]CodeLocation{}, + lock: &sync.Mutex{}, + } +} + +func (d *DeprecationTracker) TrackDeprecation(deprecation Deprecation, cl ...CodeLocation) { + ackVersion := os.Getenv("ACK_GINKGO_DEPRECATIONS") + if deprecation.Version != "" && ackVersion != "" { + ack := ParseSemVer(ackVersion) + version := ParseSemVer(deprecation.Version) + if ack.GreaterThanOrEqualTo(version) { + return + } + } + + d.lock.Lock() + defer d.lock.Unlock() + if len(cl) == 1 { + d.deprecations[deprecation] = append(d.deprecations[deprecation], cl[0]) + } else { + d.deprecations[deprecation] = []CodeLocation{} + } +} + +func (d *DeprecationTracker) DidTrackDeprecations() bool { + d.lock.Lock() + defer d.lock.Unlock() + return len(d.deprecations) > 0 +} + +func (d *DeprecationTracker) DeprecationsReport() string { + d.lock.Lock() + defer d.lock.Unlock() + out := formatter.F("{{light-yellow}}You're using deprecated Ginkgo functionality:{{/}}\n") + out += formatter.F("{{light-yellow}}============================================={{/}}\n") + for deprecation, locations := range d.deprecations { + out += formatter.Fi(1, "{{yellow}}"+deprecation.Message+"{{/}}\n") + if deprecation.DocLink != "" { + out += formatter.Fi(1, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}https://onsi.github.io/ginkgo/MIGRATING_TO_V2#%s{{/}}\n", deprecation.DocLink) + } + for _, location := range locations { + out += formatter.Fi(2, "{{gray}}%s{{/}}\n", location) + } + } + out += formatter.F("\n{{gray}}To silence deprecations that can be silenced set the following environment variable:{{/}}\n") + out += formatter.Fi(1, "{{gray}}ACK_GINKGO_DEPRECATIONS=%s{{/}}\n", VERSION) + return out +} + +type SemVer struct { + Major int + Minor int + Patch int +} + +func (s SemVer) GreaterThanOrEqualTo(o SemVer) bool { + return (s.Major > o.Major) || + (s.Major == o.Major && s.Minor > o.Minor) || + (s.Major == o.Major && s.Minor == o.Minor && s.Patch >= o.Patch) +} + +func ParseSemVer(semver string) SemVer { + out := SemVer{} + semver = strings.TrimFunc(semver, func(r rune) bool { + return !(unicode.IsNumber(r) || r == '.') + }) + components := strings.Split(semver, ".") + if len(components) > 0 { + out.Major, _ = strconv.Atoi(components[0]) + } + if len(components) > 1 { + out.Minor, _ = strconv.Atoi(components[1]) + } + if len(components) > 2 { + out.Patch, _ = strconv.Atoi(components[2]) + } + return out +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/enum_support.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/enum_support.go new file mode 100644 index 000000000000..1d96ae02800a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/enum_support.go @@ -0,0 +1,43 @@ +package types + +import "encoding/json" + +type EnumSupport struct { + toString map[uint]string + toEnum map[string]uint + maxEnum uint +} + +func NewEnumSupport(toString map[uint]string) EnumSupport { + toEnum, maxEnum := map[string]uint{}, uint(0) + for k, v := range toString { + toEnum[v] = k + if maxEnum < k { + maxEnum = k + } + } + return EnumSupport{toString: toString, toEnum: toEnum, maxEnum: maxEnum} +} + +func (es EnumSupport) String(e uint) string { + if e > es.maxEnum { + return es.toString[0] + } + return es.toString[e] +} + +func (es EnumSupport) UnmarshJSON(b []byte) (uint, error) { + var dec string + if err := json.Unmarshal(b, &dec); err != nil { + return 0, err + } + out := es.toEnum[dec] // if we miss we get 0 which is what we want anyway + return out, nil +} + +func (es EnumSupport) MarshJSON(e uint) ([]byte, error) { + if e == 0 || e > es.maxEnum { + return json.Marshal(nil) + } + return json.Marshal(es.toString[e]) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/errors.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/errors.go new file mode 100644 index 000000000000..1e0dbfd9df81 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/errors.go @@ -0,0 +1,630 @@ +package types + +import ( + "fmt" + "reflect" + "strings" + + "github.com/onsi/ginkgo/v2/formatter" +) + +type GinkgoError struct { + Heading string + Message string + DocLink string + CodeLocation CodeLocation +} + +func (g GinkgoError) Error() string { + out := formatter.F("{{bold}}{{red}}%s{{/}}\n", g.Heading) + if (g.CodeLocation != CodeLocation{}) { + contentsOfLine := strings.TrimLeft(g.CodeLocation.ContentsOfLine(), "\t ") + if contentsOfLine != "" { + out += formatter.F("{{light-gray}}%s{{/}}\n", contentsOfLine) + } + out += formatter.F("{{gray}}%s{{/}}\n", g.CodeLocation) + } + if g.Message != "" { + out += formatter.Fiw(1, formatter.COLS, g.Message) + out += "\n\n" + } + if g.DocLink != "" { + out += formatter.Fiw(1, formatter.COLS, "{{bold}}Learn more at:{{/}} {{cyan}}{{underline}}http://onsi.github.io/ginkgo/#%s{{/}}\n", g.DocLink) + } + + return out +} + +type ginkgoErrors struct{} + +var GinkgoErrors = ginkgoErrors{} + +func (g ginkgoErrors) UncaughtGinkgoPanic(cl CodeLocation) error { + return GinkgoError{ + Heading: "Your Test Panicked", + Message: `When you, or your assertion library, calls Ginkgo's Fail(), +Ginkgo panics to prevent subsequent assertions from running. + +Normally Ginkgo rescues this panic so you shouldn't see it. + +However, if you make an assertion in a goroutine, Ginkgo can't capture the panic. +To circumvent this, you should call + + defer GinkgoRecover() + +at the top of the goroutine that caused this panic. + +Alternatively, you may have made an assertion outside of a Ginkgo +leaf node (e.g. in a container node or some out-of-band function) - please move your assertion to +an appropriate Ginkgo node (e.g. a BeforeSuite, BeforeEach, It, etc...).`, + DocLink: "mental-model-how-ginkgo-handles-failure", + CodeLocation: cl, + } +} + +func (g ginkgoErrors) RerunningSuite() error { + return GinkgoError{ + Heading: "Rerunning Suite", + Message: formatter.F(`It looks like you are calling RunSpecs more than once. Ginkgo does not support rerunning suites. If you want to rerun a suite try {{bold}}ginkgo --repeat=N{{/}} or {{bold}}ginkgo --until-it-fails{{/}}`), + DocLink: "repeating-spec-runs-and-managing-flaky-specs", + } +} + +/* Tree construction errors */ + +func (g ginkgoErrors) PushingNodeInRunPhase(nodeType NodeType, cl CodeLocation) error { + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F( + `It looks like you are trying to add a {{bold}}[%s]{{/}} node +to the Ginkgo spec tree in a leaf node {{bold}}after{{/}} the specs started running. + +To enable randomization and parallelization Ginkgo requires the spec tree +to be fully constructed up front. In practice, this means that you can +only create nodes like {{bold}}[%s]{{/}} at the top-level or within the +body of a {{bold}}Describe{{/}}, {{bold}}Context{{/}}, or {{bold}}When{{/}}.`, nodeType, nodeType), + CodeLocation: cl, + DocLink: "mental-model-how-ginkgo-traverses-the-spec-hierarchy", + } +} + +func (g ginkgoErrors) CaughtPanicDuringABuildPhase(caughtPanic interface{}, cl CodeLocation) error { + return GinkgoError{ + Heading: "Assertion or Panic detected during tree construction", + Message: formatter.F( + `Ginkgo detected a panic while constructing the spec tree. +You may be trying to make an assertion in the body of a container node +(i.e. {{bold}}Describe{{/}}, {{bold}}Context{{/}}, or {{bold}}When{{/}}). + +Please ensure all assertions are inside leaf nodes such as {{bold}}BeforeEach{{/}}, +{{bold}}It{{/}}, etc. + +{{bold}}Here's the content of the panic that was caught:{{/}} +%v`, caughtPanic), + CodeLocation: cl, + DocLink: "no-assertions-in-container-nodes", + } +} + +func (g ginkgoErrors) SuiteNodeInNestedContext(nodeType NodeType, cl CodeLocation) error { + docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite" + if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) { + docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite" + } + + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F( + `It looks like you are trying to add a {{bold}}[%s]{{/}} node within a container node. + +{{bold}}%s{{/}} can only be called at the top level.`, nodeType, nodeType), + CodeLocation: cl, + DocLink: docLink, + } +} + +func (g ginkgoErrors) SuiteNodeDuringRunPhase(nodeType NodeType, cl CodeLocation) error { + docLink := "suite-setup-and-cleanup-beforesuite-and-aftersuite" + if nodeType.Is(NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite) { + docLink = "reporting-nodes---reportbeforesuite-and-reportaftersuite" + } + + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F( + `It looks like you are trying to add a {{bold}}[%s]{{/}} node within a leaf node after the spec started running. + +{{bold}}%s{{/}} can only be called at the top level.`, nodeType, nodeType), + CodeLocation: cl, + DocLink: docLink, + } +} + +func (g ginkgoErrors) MultipleBeforeSuiteNodes(nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error { + return ginkgoErrorMultipleSuiteNodes("setup", nodeType, cl, earlierNodeType, earlierCodeLocation) +} + +func (g ginkgoErrors) MultipleAfterSuiteNodes(nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error { + return ginkgoErrorMultipleSuiteNodes("teardown", nodeType, cl, earlierNodeType, earlierCodeLocation) +} + +func ginkgoErrorMultipleSuiteNodes(setupOrTeardown string, nodeType NodeType, cl CodeLocation, earlierNodeType NodeType, earlierCodeLocation CodeLocation) error { + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F( + `It looks like you are trying to add a {{bold}}[%s]{{/}} node but +you already have a {{bold}}[%s]{{/}} node defined at: {{gray}}%s{{/}}. + +Ginkgo only allows you to define one suite %s node.`, nodeType, earlierNodeType, earlierCodeLocation, setupOrTeardown), + CodeLocation: cl, + DocLink: "suite-setup-and-cleanup-beforesuite-and-aftersuite", + } +} + +/* Decorator errors */ +func (g ginkgoErrors) InvalidDecoratorForNodeType(cl CodeLocation, nodeType NodeType, decorator string) error { + return GinkgoError{ + Heading: "Invalid Decorator", + Message: formatter.F(`[%s] node cannot be passed a(n) '%s' decorator`, nodeType, decorator), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidDeclarationOfFocusedAndPending(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Combination of Decorators: Focused and Pending", + Message: formatter.F(`[%s] node was decorated with both Focus and Pending. At most one is allowed.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidDeclarationOfFlakeAttemptsAndMustPassRepeatedly(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Combination of Decorators: FlakeAttempts and MustPassRepeatedly", + Message: formatter.F(`[%s] node was decorated with both FlakeAttempts and MustPassRepeatedly. At most one is allowed.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) UnknownDecorator(cl CodeLocation, nodeType NodeType, decorator interface{}) error { + return GinkgoError{ + Heading: "Unknown Decorator", + Message: formatter.F(`[%s] node was passed an unknown decorator: '%#v'`, nodeType, decorator), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidBodyTypeForContainer(t reflect.Type, cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[%s] node must be passed {{bold}}func(){{/}} - i.e. functions that take nothing and return nothing. You passed {{bold}}%s{{/}} instead.`, nodeType, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidBodyType(t reflect.Type, cl CodeLocation, nodeType NodeType) error { + mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}" + if nodeType.Is(NodeTypeContainer) { + mustGet = "{{bold}}func(){{/}}" + } + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[%s] node must be passed `+mustGet+`. +You passed {{bold}}%s{{/}} instead.`, nodeType, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteProc1(t reflect.Type, cl CodeLocation) error { + mustGet := "{{bold}}func() []byte{{/}}, {{bold}}func(ctx SpecContext) []byte{{/}}, or {{bold}}func(ctx context.Context) []byte{{/}}, {{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}" + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its first function. +You passed {{bold}}%s{{/}} instead.`, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidBodyTypeForSynchronizedBeforeSuiteAllProcs(t reflect.Type, cl CodeLocation) error { + mustGet := "{{bold}}func(){{/}}, {{bold}}func(ctx SpecContext){{/}}, or {{bold}}func(ctx context.Context){{/}}, {{bold}}func([]byte){{/}}, {{bold}}func(ctx SpecContext, []byte){{/}}, or {{bold}}func(ctx context.Context, []byte){{/}}" + return GinkgoError{ + Heading: "Invalid Function", + Message: formatter.F(`[SynchronizedBeforeSuite] node must be passed `+mustGet+` for its second function. +You passed {{bold}}%s{{/}} instead.`, t), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) MultipleBodyFunctions(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Multiple Functions", + Message: formatter.F(`[%s] node must be passed a single function - but more than one was passed in.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) MissingBodyFunction(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Missing Functions", + Message: formatter.F(`[%s] node must be passed a single function - but none was passed in.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextNode(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid NodeTimeout SpecTimeout, or GracePeriod", + Message: formatter.F(`[%s] was passed NodeTimeout, SpecTimeout, or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}. You must accept a context to enable timeouts and grace periods`, nodeType), + CodeLocation: cl, + DocLink: "spec-timeouts-and-interruptible-nodes", + } +} + +func (g ginkgoErrors) InvalidTimeoutOrGracePeriodForNonContextCleanupNode(cl CodeLocation) error { + return GinkgoError{ + Heading: "Invalid NodeTimeout SpecTimeout, or GracePeriod", + Message: formatter.F(`[DeferCleanup] was passed NodeTimeout or GracePeriod but does not have a callback that accepts a {{bold}}SpecContext{{/}} or {{bold}}context.Context{{/}}. You must accept a context to enable timeouts and grace periods`), + CodeLocation: cl, + DocLink: "spec-timeouts-and-interruptible-nodes", + } +} + +/* Ordered Container errors */ +func (g ginkgoErrors) InvalidSerialNodeInNonSerialOrderedContainer(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Invalid Serial Node in Non-Serial Ordered Container", + Message: formatter.F(`[%s] node was decorated with Serial but occurs in an Ordered container that is not marked Serial. Move the Serial decorator to the outer-most Ordered container to mark all ordered specs within the container as serial.`, nodeType), + CodeLocation: cl, + DocLink: "node-decorators-overview", + } +} + +func (g ginkgoErrors) SetupNodeNotInOrderedContainer(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: "Setup Node not in Ordered Container", + Message: fmt.Sprintf("[%s] setup nodes must appear inside an Ordered container. They cannot be nested within other containers, even containers in an ordered container.", nodeType), + CodeLocation: cl, + DocLink: "ordered-containers", + } +} + +func (g ginkgoErrors) InvalidContinueOnFailureDecoration(cl CodeLocation) error { + return GinkgoError{ + Heading: "ContinueOnFailure not decorating an outermost Ordered Container", + Message: "ContinueOnFailure can only decorate an Ordered container, and this Ordered container must be the outermost Ordered container.", + CodeLocation: cl, + DocLink: "ordered-containers", + } +} + +/* DeferCleanup errors */ +func (g ginkgoErrors) DeferCleanupInvalidFunction(cl CodeLocation) error { + return GinkgoError{ + Heading: "DeferCleanup requires a valid function", + Message: "You must pass DeferCleanup a function to invoke. This function must return zero or one values - if it does return, it must return an error. The function can take arbitrarily many arguments and you should provide these to DeferCleanup to pass along to the function.", + CodeLocation: cl, + DocLink: "cleaning-up-our-cleanup-code-defercleanup", + } +} + +func (g ginkgoErrors) PushingCleanupNodeDuringTreeConstruction(cl CodeLocation) error { + return GinkgoError{ + Heading: "DeferCleanup must be called inside a setup or subject node", + Message: "You must call DeferCleanup inside a setup node (e.g. BeforeEach, BeforeSuite, AfterAll...) or a subject node (i.e. It). You can't call DeferCleanup at the top-level or in a container node - use the After* family of setup nodes instead.", + CodeLocation: cl, + DocLink: "cleaning-up-our-cleanup-code-defercleanup", + } +} + +func (g ginkgoErrors) PushingCleanupInReportingNode(cl CodeLocation, nodeType NodeType) error { + return GinkgoError{ + Heading: fmt.Sprintf("DeferCleanup cannot be called in %s", nodeType), + Message: "Please inline your cleanup code - Ginkgo won't run cleanup code after a Reporting node.", + CodeLocation: cl, + DocLink: "cleaning-up-our-cleanup-code-defercleanup", + } +} + +func (g ginkgoErrors) PushingCleanupInCleanupNode(cl CodeLocation) error { + return GinkgoError{ + Heading: "DeferCleanup cannot be called in a DeferCleanup callback", + Message: "Please inline your cleanup code - Ginkgo doesn't let you call DeferCleanup from within DeferCleanup", + CodeLocation: cl, + DocLink: "cleaning-up-our-cleanup-code-defercleanup", + } +} + +/* ReportEntry errors */ +func (g ginkgoErrors) TooManyReportEntryValues(cl CodeLocation, arg interface{}) error { + return GinkgoError{ + Heading: "Too Many ReportEntry Values", + Message: formatter.F(`{{bold}}AddGinkgoReport{{/}} can only be given one value. Got unexpected value: %#v`, arg), + CodeLocation: cl, + DocLink: "attaching-data-to-reports", + } +} + +func (g ginkgoErrors) AddReportEntryNotDuringRunPhase(cl CodeLocation) error { + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F(`It looks like you are calling {{bold}}AddGinkgoReport{{/}} outside of a running spec. Make sure you call {{bold}}AddGinkgoReport{{/}} inside a runnable node such as It or BeforeEach and not inside the body of a container such as Describe or Context.`), + CodeLocation: cl, + DocLink: "attaching-data-to-reports", + } +} + +/* By errors */ +func (g ginkgoErrors) ByNotDuringRunPhase(cl CodeLocation) error { + return GinkgoError{ + Heading: "Ginkgo detected an issue with your spec structure", + Message: formatter.F(`It looks like you are calling {{bold}}By{{/}} outside of a running spec. Make sure you call {{bold}}By{{/}} inside a runnable node such as It or BeforeEach and not inside the body of a container such as Describe or Context.`), + CodeLocation: cl, + DocLink: "documenting-complex-specs-by", + } +} + +/* FileFilter and SkipFilter errors */ +func (g ginkgoErrors) InvalidFileFilter(filter string) error { + return GinkgoError{ + Heading: "Invalid File Filter", + Message: fmt.Sprintf(`The provided file filter: "%s" is invalid. File filters must have the format "file", "file:lines" where "file" is a regular expression that will match against the file path and lines is a comma-separated list of integers (e.g. file:1,5,7) or line-ranges (e.g. file:1-3,5-9) or both (e.g. file:1,5-9)`, filter), + DocLink: "filtering-specs", + } +} + +func (g ginkgoErrors) InvalidFileFilterRegularExpression(filter string, err error) error { + return GinkgoError{ + Heading: "Invalid File Filter Regular Expression", + Message: fmt.Sprintf(`The provided file filter: "%s" included an invalid regular expression. regexp.Compile error: %s`, filter, err), + DocLink: "filtering-specs", + } +} + +/* Label Errors */ +func (g ginkgoErrors) SyntaxErrorParsingLabelFilter(input string, location int, error string) error { + var message string + if location >= 0 { + for i, r := range input { + if i == location { + message += "{{red}}{{bold}}{{underline}}" + } + message += string(r) + if i == location { + message += "{{/}}" + } + } + } else { + message = input + } + message += "\n" + error + return GinkgoError{ + Heading: "Syntax Error Parsing Label Filter", + Message: message, + DocLink: "spec-labels", + } +} + +func (g ginkgoErrors) InvalidLabel(label string, cl CodeLocation) error { + return GinkgoError{ + Heading: "Invalid Label", + Message: fmt.Sprintf("'%s' is an invalid label. Labels cannot contain of the following characters: '&|!,()/'", label), + CodeLocation: cl, + DocLink: "spec-labels", + } +} + +func (g ginkgoErrors) InvalidEmptyLabel(cl CodeLocation) error { + return GinkgoError{ + Heading: "Invalid Empty Label", + Message: "Labels cannot be empty", + CodeLocation: cl, + DocLink: "spec-labels", + } +} + +/* Table errors */ +func (g ginkgoErrors) MultipleEntryBodyFunctionsForTable(cl CodeLocation) error { + return GinkgoError{ + Heading: "DescribeTable passed multiple functions", + Message: "It looks like you are passing multiple functions into DescribeTable. Only one function can be passed in. This function will be called for each Entry in the table.", + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) InvalidEntryDescription(cl CodeLocation) error { + return GinkgoError{ + Heading: "Invalid Entry description", + Message: "Entry description functions must be a string, a function that accepts the entry parameters and returns a string, or nil.", + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) MissingParametersForTableFunction(cl CodeLocation) error { + return GinkgoError{ + Heading: fmt.Sprintf("No parameters have been passed to the Table Function"), + Message: fmt.Sprintf("The Table Function expected at least 1 parameter"), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) IncorrectParameterTypeForTable(i int, name string, cl CodeLocation) error { + return GinkgoError{ + Heading: "DescribeTable passed incorrect parameter type", + Message: fmt.Sprintf("Parameter #%d passed to DescribeTable is of incorrect type <%s>", i, name), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) TooFewParametersToTableFunction(expected, actual int, kind string, cl CodeLocation) error { + return GinkgoError{ + Heading: fmt.Sprintf("Too few parameters passed in to %s", kind), + Message: fmt.Sprintf("The %s expected %d parameters but you passed in %d", kind, expected, actual), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) TooManyParametersToTableFunction(expected, actual int, kind string, cl CodeLocation) error { + return GinkgoError{ + Heading: fmt.Sprintf("Too many parameters passed in to %s", kind), + Message: fmt.Sprintf("The %s expected %d parameters but you passed in %d", kind, expected, actual), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) IncorrectParameterTypeToTableFunction(i int, expected, actual reflect.Type, kind string, cl CodeLocation) error { + return GinkgoError{ + Heading: fmt.Sprintf("Incorrect parameters type passed to %s", kind), + Message: fmt.Sprintf("The %s expected parameter #%d to be of type <%s> but you passed in <%s>", kind, i, expected, actual), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +func (g ginkgoErrors) IncorrectVariadicParameterTypeToTableFunction(expected, actual reflect.Type, kind string, cl CodeLocation) error { + return GinkgoError{ + Heading: fmt.Sprintf("Incorrect parameters type passed to %s", kind), + Message: fmt.Sprintf("The %s expected its variadic parameters to be of type <%s> but you passed in <%s>", kind, expected, actual), + CodeLocation: cl, + DocLink: "table-specs", + } +} + +/* Parallel Synchronization errors */ + +func (g ginkgoErrors) AggregatedReportUnavailableDueToNodeDisappearing() error { + return GinkgoError{ + Heading: "Test Report unavailable because a Ginkgo parallel process disappeared", + Message: "The aggregated report could not be fetched for a ReportAfterSuite node. A Ginkgo parallel process disappeared before it could finish reporting.", + } +} + +func (g ginkgoErrors) SynchronizedBeforeSuiteFailedOnProc1() error { + return GinkgoError{ + Heading: "SynchronizedBeforeSuite failed on Ginkgo parallel process #1", + Message: "The first SynchronizedBeforeSuite function running on Ginkgo parallel process #1 failed. This suite will now abort.", + } +} + +func (g ginkgoErrors) SynchronizedBeforeSuiteDisappearedOnProc1() error { + return GinkgoError{ + Heading: "Process #1 disappeared before SynchronizedBeforeSuite could report back", + Message: "Ginkgo parallel process #1 disappeared before the first SynchronizedBeforeSuite function completed. This suite will now abort.", + } +} + +/* Configuration errors */ + +func (g ginkgoErrors) UnknownTypePassedToRunSpecs(value interface{}) error { + return GinkgoError{ + Heading: "Unknown Type passed to RunSpecs", + Message: fmt.Sprintf("RunSpecs() accepts labels, and configuration of type types.SuiteConfig and/or types.ReporterConfig.\n You passed in: %v", value), + } +} + +var sharedParallelErrorMessage = "It looks like you are trying to run specs in parallel with go test.\nThis is unsupported and you should use the ginkgo CLI instead." + +func (g ginkgoErrors) InvalidParallelTotalConfiguration() error { + return GinkgoError{ + Heading: "-ginkgo.parallel.total must be >= 1", + Message: sharedParallelErrorMessage, + DocLink: "spec-parallelization", + } +} + +func (g ginkgoErrors) InvalidParallelProcessConfiguration() error { + return GinkgoError{ + Heading: "-ginkgo.parallel.process is one-indexed and must be <= ginkgo.parallel.total", + Message: sharedParallelErrorMessage, + DocLink: "spec-parallelization", + } +} + +func (g ginkgoErrors) MissingParallelHostConfiguration() error { + return GinkgoError{ + Heading: "-ginkgo.parallel.host is missing", + Message: sharedParallelErrorMessage, + DocLink: "spec-parallelization", + } +} + +func (g ginkgoErrors) UnreachableParallelHost(host string) error { + return GinkgoError{ + Heading: "Could not reach ginkgo.parallel.host:" + host, + Message: sharedParallelErrorMessage, + DocLink: "spec-parallelization", + } +} + +func (g ginkgoErrors) DryRunInParallelConfiguration() error { + return GinkgoError{ + Heading: "Ginkgo only performs -dryRun in serial mode.", + Message: "Please try running ginkgo -dryRun again, but without -p or -procs to ensure the suite is running in series.", + } +} + +func (g ginkgoErrors) GracePeriodCannotBeZero() error { + return GinkgoError{ + Heading: "Ginkgo requires a positive --grace-period.", + Message: "Please set --grace-period to a positive duration. The default is 30s.", + } +} + +func (g ginkgoErrors) ConflictingVerbosityConfiguration() error { + return GinkgoError{ + Heading: "Conflicting reporter verbosity settings.", + Message: "You can't set more than one of -v, -vv and --succinct. Please pick one!", + } +} + +func (g ginkgoErrors) InvalidOutputInterceptorModeConfiguration(value string) error { + return GinkgoError{ + Heading: fmt.Sprintf("Invalid value '%s' for --output-interceptor-mode.", value), + Message: "You must choose one of 'dup', 'swap', or 'none'.", + } +} + +func (g ginkgoErrors) InvalidGoFlagCount() error { + return GinkgoError{ + Heading: "Use of go test -count", + Message: "Ginkgo does not support using go test -count to rerun suites. Only -count=1 is allowed. To repeat suite runs, please use the ginkgo cli and `ginkgo -until-it-fails` or `ginkgo -repeat=N`.", + } +} + +func (g ginkgoErrors) InvalidGoFlagParallel() error { + return GinkgoError{ + Heading: "Use of go test -parallel", + Message: "Go test's implementation of parallelization does not actually parallelize Ginkgo specs. Please use the ginkgo cli and `ginkgo -p` or `ginkgo -procs=N` instead.", + } +} + +func (g ginkgoErrors) BothRepeatAndUntilItFails() error { + return GinkgoError{ + Heading: "--repeat and --until-it-fails are both set", + Message: "--until-it-fails directs Ginkgo to rerun specs indefinitely until they fail. --repeat directs Ginkgo to rerun specs a set number of times. You can't set both... which would you like?", + } +} + +/* Stack-Trace parsing errors */ + +func (g ginkgoErrors) FailedToParseStackTrace(message string) error { + return GinkgoError{ + Heading: "Failed to Parse Stack Trace", + Message: message, + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/file_filter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/file_filter.go new file mode 100644 index 000000000000..cc21df71ec87 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/file_filter.go @@ -0,0 +1,106 @@ +package types + +import ( + "regexp" + "strconv" + "strings" +) + +func ParseFileFilters(filters []string) (FileFilters, error) { + ffs := FileFilters{} + for _, filter := range filters { + ff := FileFilter{} + if filter == "" { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + components := strings.Split(filter, ":") + if !(len(components) == 1 || len(components) == 2) { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + + var err error + ff.Filename, err = regexp.Compile(components[0]) + if err != nil { + return nil, err + } + if len(components) == 2 { + lineFilters := strings.Split(components[1], ",") + for _, lineFilter := range lineFilters { + components := strings.Split(lineFilter, "-") + if len(components) == 1 { + line, err := strconv.Atoi(strings.TrimSpace(components[0])) + if err != nil { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + ff.LineFilters = append(ff.LineFilters, LineFilter{line, line + 1}) + } else if len(components) == 2 { + line1, err := strconv.Atoi(strings.TrimSpace(components[0])) + if err != nil { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + line2, err := strconv.Atoi(strings.TrimSpace(components[1])) + if err != nil { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + ff.LineFilters = append(ff.LineFilters, LineFilter{line1, line2}) + } else { + return nil, GinkgoErrors.InvalidFileFilter(filter) + } + } + } + ffs = append(ffs, ff) + } + return ffs, nil +} + +type FileFilter struct { + Filename *regexp.Regexp + LineFilters LineFilters +} + +func (f FileFilter) Matches(locations []CodeLocation) bool { + for _, location := range locations { + if f.Filename.MatchString(location.FileName) && + f.LineFilters.Matches(location.LineNumber) { + return true + } + + } + return false +} + +type FileFilters []FileFilter + +func (ffs FileFilters) Matches(locations []CodeLocation) bool { + for _, ff := range ffs { + if ff.Matches(locations) { + return true + } + } + + return false +} + +type LineFilter struct { + Min int + Max int +} + +func (lf LineFilter) Matches(line int) bool { + return lf.Min <= line && line < lf.Max +} + +type LineFilters []LineFilter + +func (lfs LineFilters) Matches(line int) bool { + if len(lfs) == 0 { + return true + } + + for _, lf := range lfs { + if lf.Matches(line) { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/flags.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/flags.go new file mode 100644 index 000000000000..9186ae873d0e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/flags.go @@ -0,0 +1,489 @@ +package types + +import ( + "flag" + "fmt" + "io" + "reflect" + "strings" + "time" + + "github.com/onsi/ginkgo/v2/formatter" +) + +type GinkgoFlag struct { + Name string + KeyPath string + SectionKey string + + Usage string + UsageArgument string + UsageDefaultValue string + + DeprecatedName string + DeprecatedDocLink string + DeprecatedVersion string + + ExportAs string +} + +type GinkgoFlags []GinkgoFlag + +func (f GinkgoFlags) CopyAppend(flags ...GinkgoFlag) GinkgoFlags { + out := GinkgoFlags{} + out = append(out, f...) + out = append(out, flags...) + return out +} + +func (f GinkgoFlags) WithPrefix(prefix string) GinkgoFlags { + if prefix == "" { + return f + } + out := GinkgoFlags{} + for _, flag := range f { + if flag.Name != "" { + flag.Name = prefix + "." + flag.Name + } + if flag.DeprecatedName != "" { + flag.DeprecatedName = prefix + "." + flag.DeprecatedName + } + if flag.ExportAs != "" { + flag.ExportAs = prefix + "." + flag.ExportAs + } + out = append(out, flag) + } + return out +} + +func (f GinkgoFlags) SubsetWithNames(names ...string) GinkgoFlags { + out := GinkgoFlags{} + for _, flag := range f { + for _, name := range names { + if flag.Name == name { + out = append(out, flag) + break + } + } + } + return out +} + +type GinkgoFlagSection struct { + Key string + Style string + Succinct bool + Heading string + Description string +} + +type GinkgoFlagSections []GinkgoFlagSection + +func (gfs GinkgoFlagSections) Lookup(key string) (GinkgoFlagSection, bool) { + for _, section := range gfs { + if section.Key == key { + return section, true + } + } + + return GinkgoFlagSection{}, false +} + +type GinkgoFlagSet struct { + flags GinkgoFlags + bindings interface{} + + sections GinkgoFlagSections + extraGoFlagsSection GinkgoFlagSection + + flagSet *flag.FlagSet +} + +// Call NewGinkgoFlagSet to create GinkgoFlagSet that creates and binds to it's own *flag.FlagSet +func NewGinkgoFlagSet(flags GinkgoFlags, bindings interface{}, sections GinkgoFlagSections) (GinkgoFlagSet, error) { + return bindFlagSet(GinkgoFlagSet{ + flags: flags, + bindings: bindings, + sections: sections, + }, nil) +} + +// Call NewGinkgoFlagSet to create GinkgoFlagSet that extends an existing *flag.FlagSet +func NewAttachedGinkgoFlagSet(flagSet *flag.FlagSet, flags GinkgoFlags, bindings interface{}, sections GinkgoFlagSections, extraGoFlagsSection GinkgoFlagSection) (GinkgoFlagSet, error) { + return bindFlagSet(GinkgoFlagSet{ + flags: flags, + bindings: bindings, + sections: sections, + extraGoFlagsSection: extraGoFlagsSection, + }, flagSet) +} + +func bindFlagSet(f GinkgoFlagSet, flagSet *flag.FlagSet) (GinkgoFlagSet, error) { + if flagSet == nil { + f.flagSet = flag.NewFlagSet("", flag.ContinueOnError) + //suppress all output as Ginkgo is responsible for formatting usage + f.flagSet.SetOutput(io.Discard) + } else { + f.flagSet = flagSet + //we're piggybacking on an existing flagset (typically go test) so we have limited control + //on user feedback + f.flagSet.Usage = f.substituteUsage + } + + for _, flag := range f.flags { + name := flag.Name + + deprecatedUsage := "[DEPRECATED]" + deprecatedName := flag.DeprecatedName + if name != "" { + deprecatedUsage = fmt.Sprintf("[DEPRECATED] use --%s instead", name) + } else if flag.Usage != "" { + deprecatedUsage += " " + flag.Usage + } + + value, ok := valueAtKeyPath(f.bindings, flag.KeyPath) + if !ok { + return GinkgoFlagSet{}, fmt.Errorf("could not load KeyPath: %s", flag.KeyPath) + } + + iface, addr := value.Interface(), value.Addr().Interface() + + switch value.Type() { + case reflect.TypeOf(string("")): + if name != "" { + f.flagSet.StringVar(addr.(*string), name, iface.(string), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.StringVar(addr.(*string), deprecatedName, iface.(string), deprecatedUsage) + } + case reflect.TypeOf(int64(0)): + if name != "" { + f.flagSet.Int64Var(addr.(*int64), name, iface.(int64), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.Int64Var(addr.(*int64), deprecatedName, iface.(int64), deprecatedUsage) + } + case reflect.TypeOf(float64(0)): + if name != "" { + f.flagSet.Float64Var(addr.(*float64), name, iface.(float64), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.Float64Var(addr.(*float64), deprecatedName, iface.(float64), deprecatedUsage) + } + case reflect.TypeOf(int(0)): + if name != "" { + f.flagSet.IntVar(addr.(*int), name, iface.(int), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.IntVar(addr.(*int), deprecatedName, iface.(int), deprecatedUsage) + } + case reflect.TypeOf(bool(true)): + if name != "" { + f.flagSet.BoolVar(addr.(*bool), name, iface.(bool), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.BoolVar(addr.(*bool), deprecatedName, iface.(bool), deprecatedUsage) + } + case reflect.TypeOf(time.Duration(0)): + if name != "" { + f.flagSet.DurationVar(addr.(*time.Duration), name, iface.(time.Duration), flag.Usage) + } + if deprecatedName != "" { + f.flagSet.DurationVar(addr.(*time.Duration), deprecatedName, iface.(time.Duration), deprecatedUsage) + } + + case reflect.TypeOf([]string{}): + if name != "" { + f.flagSet.Var(stringSliceVar{value}, name, flag.Usage) + } + if deprecatedName != "" { + f.flagSet.Var(stringSliceVar{value}, deprecatedName, deprecatedUsage) + } + default: + return GinkgoFlagSet{}, fmt.Errorf("unsupported type %T", iface) + } + } + + return f, nil +} + +func (f GinkgoFlagSet) IsZero() bool { + return f.flagSet == nil +} + +func (f GinkgoFlagSet) WasSet(name string) bool { + found := false + f.flagSet.Visit(func(f *flag.Flag) { + if f.Name == name { + found = true + } + }) + + return found +} + +func (f GinkgoFlagSet) Lookup(name string) *flag.Flag { + return f.flagSet.Lookup(name) +} + +func (f GinkgoFlagSet) Parse(args []string) ([]string, error) { + if f.IsZero() { + return args, nil + } + err := f.flagSet.Parse(args) + if err != nil { + return []string{}, err + } + return f.flagSet.Args(), nil +} + +func (f GinkgoFlagSet) ValidateDeprecations(deprecationTracker *DeprecationTracker) { + if f.IsZero() { + return + } + f.flagSet.Visit(func(flag *flag.Flag) { + for _, ginkgoFlag := range f.flags { + if ginkgoFlag.DeprecatedName != "" && strings.HasSuffix(flag.Name, ginkgoFlag.DeprecatedName) { + message := fmt.Sprintf("--%s is deprecated", ginkgoFlag.DeprecatedName) + if ginkgoFlag.Name != "" { + message = fmt.Sprintf("--%s is deprecated, use --%s instead", ginkgoFlag.DeprecatedName, ginkgoFlag.Name) + } else if ginkgoFlag.Usage != "" { + message += " " + ginkgoFlag.Usage + } + + deprecationTracker.TrackDeprecation(Deprecation{ + Message: message, + DocLink: ginkgoFlag.DeprecatedDocLink, + Version: ginkgoFlag.DeprecatedVersion, + }) + } + } + }) +} + +func (f GinkgoFlagSet) Usage() string { + if f.IsZero() { + return "" + } + groupedFlags := map[GinkgoFlagSection]GinkgoFlags{} + ungroupedFlags := GinkgoFlags{} + managedFlags := map[string]bool{} + extraGoFlags := []*flag.Flag{} + + for _, flag := range f.flags { + managedFlags[flag.Name] = true + managedFlags[flag.DeprecatedName] = true + + if flag.Name == "" { + continue + } + + section, ok := f.sections.Lookup(flag.SectionKey) + if ok { + groupedFlags[section] = append(groupedFlags[section], flag) + } else { + ungroupedFlags = append(ungroupedFlags, flag) + } + } + + f.flagSet.VisitAll(func(flag *flag.Flag) { + if !managedFlags[flag.Name] { + extraGoFlags = append(extraGoFlags, flag) + } + }) + + out := "" + for _, section := range f.sections { + flags := groupedFlags[section] + if len(flags) == 0 { + continue + } + out += f.usageForSection(section) + if section.Succinct { + succinctFlags := []string{} + for _, flag := range flags { + if flag.Name != "" { + succinctFlags = append(succinctFlags, fmt.Sprintf("--%s", flag.Name)) + } + } + out += formatter.Fiw(1, formatter.COLS, section.Style+strings.Join(succinctFlags, ", ")+"{{/}}\n") + } else { + for _, flag := range flags { + out += f.usageForFlag(flag, section.Style) + } + } + out += "\n" + } + if len(ungroupedFlags) > 0 { + for _, flag := range ungroupedFlags { + out += f.usageForFlag(flag, "") + } + out += "\n" + } + if len(extraGoFlags) > 0 { + out += f.usageForSection(f.extraGoFlagsSection) + for _, goFlag := range extraGoFlags { + out += f.usageForGoFlag(goFlag) + } + } + + return out +} + +func (f GinkgoFlagSet) substituteUsage() { + fmt.Fprintln(f.flagSet.Output(), f.Usage()) +} + +func valueAtKeyPath(root interface{}, keyPath string) (reflect.Value, bool) { + if len(keyPath) == 0 { + return reflect.Value{}, false + } + + val := reflect.ValueOf(root) + components := strings.Split(keyPath, ".") + for _, component := range components { + val = reflect.Indirect(val) + switch val.Kind() { + case reflect.Map: + val = val.MapIndex(reflect.ValueOf(component)) + if val.Kind() == reflect.Interface { + val = reflect.ValueOf(val.Interface()) + } + case reflect.Struct: + val = val.FieldByName(component) + default: + return reflect.Value{}, false + } + if (val == reflect.Value{}) { + return reflect.Value{}, false + } + } + + return val, true +} + +func (f GinkgoFlagSet) usageForSection(section GinkgoFlagSection) string { + out := formatter.F(section.Style + "{{bold}}{{underline}}" + section.Heading + "{{/}}\n") + if section.Description != "" { + out += formatter.Fiw(0, formatter.COLS, section.Description+"\n") + } + return out +} + +func (f GinkgoFlagSet) usageForFlag(flag GinkgoFlag, style string) string { + argument := flag.UsageArgument + defValue := flag.UsageDefaultValue + if argument == "" { + value, _ := valueAtKeyPath(f.bindings, flag.KeyPath) + switch value.Type() { + case reflect.TypeOf(string("")): + argument = "string" + case reflect.TypeOf(int64(0)), reflect.TypeOf(int(0)): + argument = "int" + case reflect.TypeOf(time.Duration(0)): + argument = "duration" + case reflect.TypeOf(float64(0)): + argument = "float" + case reflect.TypeOf([]string{}): + argument = "string" + } + } + if argument != "" { + argument = "[" + argument + "] " + } + if defValue != "" { + defValue = fmt.Sprintf("(default: %s)", defValue) + } + hyphens := "--" + if len(flag.Name) == 1 { + hyphens = "-" + } + + out := formatter.Fi(1, style+"%s%s{{/}} %s{{gray}}%s{{/}}\n", hyphens, flag.Name, argument, defValue) + out += formatter.Fiw(2, formatter.COLS, "{{light-gray}}%s{{/}}\n", flag.Usage) + return out +} + +func (f GinkgoFlagSet) usageForGoFlag(goFlag *flag.Flag) string { + //Taken directly from the flag package + out := fmt.Sprintf(" -%s", goFlag.Name) + name, usage := flag.UnquoteUsage(goFlag) + if len(name) > 0 { + out += " " + name + } + if len(out) <= 4 { + out += "\t" + } else { + out += "\n \t" + } + out += strings.ReplaceAll(usage, "\n", "\n \t") + out += "\n" + return out +} + +type stringSliceVar struct { + slice reflect.Value +} + +func (ssv stringSliceVar) String() string { return "" } +func (ssv stringSliceVar) Set(s string) error { + ssv.slice.Set(reflect.AppendSlice(ssv.slice, reflect.ValueOf([]string{s}))) + return nil +} + +//given a set of GinkgoFlags and bindings, generate flag arguments suitable to be passed to an application with that set of flags configured. +func GenerateFlagArgs(flags GinkgoFlags, bindings interface{}) ([]string, error) { + result := []string{} + for _, flag := range flags { + name := flag.ExportAs + if name == "" { + name = flag.Name + } + if name == "" { + continue + } + + value, ok := valueAtKeyPath(bindings, flag.KeyPath) + if !ok { + return []string{}, fmt.Errorf("could not load KeyPath: %s", flag.KeyPath) + } + + iface := value.Interface() + switch value.Type() { + case reflect.TypeOf(string("")): + if iface.(string) != "" { + result = append(result, fmt.Sprintf("--%s=%s", name, iface)) + } + case reflect.TypeOf(int64(0)): + if iface.(int64) != 0 { + result = append(result, fmt.Sprintf("--%s=%d", name, iface)) + } + case reflect.TypeOf(float64(0)): + if iface.(float64) != 0 { + result = append(result, fmt.Sprintf("--%s=%f", name, iface)) + } + case reflect.TypeOf(int(0)): + if iface.(int) != 0 { + result = append(result, fmt.Sprintf("--%s=%d", name, iface)) + } + case reflect.TypeOf(bool(true)): + if iface.(bool) { + result = append(result, fmt.Sprintf("--%s", name)) + } + case reflect.TypeOf(time.Duration(0)): + if iface.(time.Duration) != time.Duration(0) { + result = append(result, fmt.Sprintf("--%s=%s", name, iface)) + } + + case reflect.TypeOf([]string{}): + strings := iface.([]string) + for _, s := range strings { + result = append(result, fmt.Sprintf("--%s=%s", name, s)) + } + default: + return []string{}, fmt.Errorf("unsupported type %T", iface) + } + } + + return result, nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go new file mode 100644 index 000000000000..b0d3b651e7ed --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/label_filter.go @@ -0,0 +1,358 @@ +package types + +import ( + "fmt" + "regexp" + "strings" +) + +var DEBUG_LABEL_FILTER_PARSING = false + +type LabelFilter func([]string) bool + +func matchLabelAction(label string) LabelFilter { + expected := strings.ToLower(label) + return func(labels []string) bool { + for i := range labels { + if strings.ToLower(labels[i]) == expected { + return true + } + } + return false + } +} + +func matchLabelRegexAction(regex *regexp.Regexp) LabelFilter { + return func(labels []string) bool { + for i := range labels { + if regex.MatchString(labels[i]) { + return true + } + } + return false + } +} + +func notAction(filter LabelFilter) LabelFilter { + return func(labels []string) bool { return !filter(labels) } +} + +func andAction(a, b LabelFilter) LabelFilter { + return func(labels []string) bool { return a(labels) && b(labels) } +} + +func orAction(a, b LabelFilter) LabelFilter { + return func(labels []string) bool { return a(labels) || b(labels) } +} + +type lfToken uint + +const ( + lfTokenInvalid lfToken = iota + + lfTokenRoot + lfTokenOpenGroup + lfTokenCloseGroup + lfTokenNot + lfTokenAnd + lfTokenOr + lfTokenRegexp + lfTokenLabel + lfTokenEOF +) + +func (l lfToken) Precedence() int { + switch l { + case lfTokenRoot, lfTokenOpenGroup: + return 0 + case lfTokenOr: + return 1 + case lfTokenAnd: + return 2 + case lfTokenNot: + return 3 + } + return -1 +} + +func (l lfToken) String() string { + switch l { + case lfTokenRoot: + return "ROOT" + case lfTokenOpenGroup: + return "(" + case lfTokenCloseGroup: + return ")" + case lfTokenNot: + return "!" + case lfTokenAnd: + return "&&" + case lfTokenOr: + return "||" + case lfTokenRegexp: + return "/regexp/" + case lfTokenLabel: + return "label" + case lfTokenEOF: + return "EOF" + } + return "INVALID" +} + +type treeNode struct { + token lfToken + location int + value string + + parent *treeNode + leftNode *treeNode + rightNode *treeNode +} + +func (tn *treeNode) setRightNode(node *treeNode) { + tn.rightNode = node + node.parent = tn +} + +func (tn *treeNode) setLeftNode(node *treeNode) { + tn.leftNode = node + node.parent = tn +} + +func (tn *treeNode) firstAncestorWithPrecedenceLEQ(precedence int) *treeNode { + if tn.token.Precedence() <= precedence { + return tn + } + return tn.parent.firstAncestorWithPrecedenceLEQ(precedence) +} + +func (tn *treeNode) firstUnmatchedOpenNode() *treeNode { + if tn.token == lfTokenOpenGroup { + return tn + } + if tn.parent == nil { + return nil + } + return tn.parent.firstUnmatchedOpenNode() +} + +func (tn *treeNode) constructLabelFilter(input string) (LabelFilter, error) { + switch tn.token { + case lfTokenOpenGroup: + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, "Mismatched '(' - could not find matching ')'.") + case lfTokenLabel: + return matchLabelAction(tn.value), nil + case lfTokenRegexp: + re, err := regexp.Compile(tn.value) + if err != nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("RegExp compilation error: %s", err)) + } + return matchLabelRegexAction(re), nil + } + + if tn.rightNode == nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, -1, "Unexpected EOF.") + } + rightLF, err := tn.rightNode.constructLabelFilter(input) + if err != nil { + return nil, err + } + + switch tn.token { + case lfTokenRoot, lfTokenCloseGroup: + return rightLF, nil + case lfTokenNot: + return notAction(rightLF), nil + } + + if tn.leftNode == nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("Malformed tree - '%s' is missing left operand.", tn.token)) + } + leftLF, err := tn.leftNode.constructLabelFilter(input) + if err != nil { + return nil, err + } + + switch tn.token { + case lfTokenAnd: + return andAction(leftLF, rightLF), nil + case lfTokenOr: + return orAction(leftLF, rightLF), nil + } + + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, tn.location, fmt.Sprintf("Invalid token '%s'.", tn.token)) +} + +func (tn *treeNode) tokenString() string { + out := fmt.Sprintf("<%s", tn.token) + if tn.value != "" { + out += " | " + tn.value + } + out += ">" + return out +} + +func (tn *treeNode) toString(indent int) string { + out := tn.tokenString() + "\n" + if tn.leftNode != nil { + out += fmt.Sprintf("%s |_(L)_%s", strings.Repeat(" ", indent), tn.leftNode.toString(indent+1)) + } + if tn.rightNode != nil { + out += fmt.Sprintf("%s |_(R)_%s", strings.Repeat(" ", indent), tn.rightNode.toString(indent+1)) + } + return out +} + +func tokenize(input string) func() (*treeNode, error) { + runes, i := []rune(input), 0 + + peekIs := func(r rune) bool { + if i+1 < len(runes) { + return runes[i+1] == r + } + return false + } + + consumeUntil := func(cutset string) (string, int) { + j := i + for ; j < len(runes); j++ { + if strings.IndexRune(cutset, runes[j]) >= 0 { + break + } + } + return string(runes[i:j]), j - i + } + + return func() (*treeNode, error) { + for i < len(runes) && runes[i] == ' ' { + i += 1 + } + + if i >= len(runes) { + return &treeNode{token: lfTokenEOF}, nil + } + + node := &treeNode{location: i} + switch runes[i] { + case '&': + if !peekIs('&') { + return &treeNode{}, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, i, "Invalid token '&'. Did you mean '&&'?") + } + i += 2 + node.token = lfTokenAnd + case '|': + if !peekIs('|') { + return &treeNode{}, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, i, "Invalid token '|'. Did you mean '||'?") + } + i += 2 + node.token = lfTokenOr + case '!': + i += 1 + node.token = lfTokenNot + case ',': + i += 1 + node.token = lfTokenOr + case '(': + i += 1 + node.token = lfTokenOpenGroup + case ')': + i += 1 + node.token = lfTokenCloseGroup + case '/': + i += 1 + value, n := consumeUntil("/") + i += n + 1 + node.token, node.value = lfTokenRegexp, value + default: + value, n := consumeUntil("&|!,()/") + i += n + node.token, node.value = lfTokenLabel, strings.TrimSpace(value) + } + return node, nil + } +} + +func MustParseLabelFilter(input string) LabelFilter { + filter, err := ParseLabelFilter(input) + if err != nil { + panic(err) + } + return filter +} + +func ParseLabelFilter(input string) (LabelFilter, error) { + if DEBUG_LABEL_FILTER_PARSING { + fmt.Println("\n==============") + fmt.Println("Input: ", input) + fmt.Print("Tokens: ") + } + if input == "" { + return func(_ []string) bool { return true }, nil + } + nextToken := tokenize(input) + + root := &treeNode{token: lfTokenRoot} + current := root +LOOP: + for { + node, err := nextToken() + if err != nil { + return nil, err + } + + if DEBUG_LABEL_FILTER_PARSING { + fmt.Print(node.tokenString() + " ") + } + + switch node.token { + case lfTokenEOF: + break LOOP + case lfTokenLabel, lfTokenRegexp: + if current.rightNode != nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Found two adjacent labels. You need an operator between them.") + } + current.setRightNode(node) + case lfTokenNot, lfTokenOpenGroup: + if current.rightNode != nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Invalid token '%s'.", node.token)) + } + current.setRightNode(node) + current = node + case lfTokenAnd, lfTokenOr: + if current.rightNode == nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Operator '%s' missing left hand operand.", node.token)) + } + nodeToStealFrom := current.firstAncestorWithPrecedenceLEQ(node.token.Precedence()) + node.setLeftNode(nodeToStealFrom.rightNode) + nodeToStealFrom.setRightNode(node) + current = node + case lfTokenCloseGroup: + firstUnmatchedOpenNode := current.firstUnmatchedOpenNode() + if firstUnmatchedOpenNode == nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Mismatched ')' - could not find matching '('.") + } + if firstUnmatchedOpenNode == current && current.rightNode == nil { + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, "Found empty '()' group.") + } + firstUnmatchedOpenNode.token = lfTokenCloseGroup //signify the group is now closed + current = firstUnmatchedOpenNode.parent + default: + return nil, GinkgoErrors.SyntaxErrorParsingLabelFilter(input, node.location, fmt.Sprintf("Unknown token '%s'.", node.token)) + } + } + if DEBUG_LABEL_FILTER_PARSING { + fmt.Printf("\n Tree:\n%s", root.toString(0)) + } + return root.constructLabelFilter(input) +} + +func ValidateAndCleanupLabel(label string, cl CodeLocation) (string, error) { + out := strings.TrimSpace(label) + if out == "" { + return "", GinkgoErrors.InvalidEmptyLabel(cl) + } + if strings.ContainsAny(out, "&|!,()/") { + return "", GinkgoErrors.InvalidLabel(label, cl) + } + return out, nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go new file mode 100644 index 000000000000..7b1524b52e85 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/report_entry.go @@ -0,0 +1,190 @@ +package types + +import ( + "encoding/json" + "fmt" + "time" +) + +// ReportEntryValue wraps a report entry's value ensuring it can be encoded and decoded safely into reports +// and across the network connection when running in parallel +type ReportEntryValue struct { + raw interface{} //unexported to prevent gob from freaking out about unregistered structs + AsJSON string + Representation string +} + +func WrapEntryValue(value interface{}) ReportEntryValue { + return ReportEntryValue{ + raw: value, + } +} + +func (rev ReportEntryValue) GetRawValue() interface{} { + return rev.raw +} + +func (rev ReportEntryValue) String() string { + if rev.raw == nil { + return "" + } + if colorableStringer, ok := rev.raw.(ColorableStringer); ok { + return colorableStringer.ColorableString() + } + + if stringer, ok := rev.raw.(fmt.Stringer); ok { + return stringer.String() + } + if rev.Representation != "" { + return rev.Representation + } + return fmt.Sprintf("%+v", rev.raw) +} + +func (rev ReportEntryValue) MarshalJSON() ([]byte, error) { + //All this to capture the representation at encoding-time, not creating time + //This way users can Report on pointers and get their final values at reporting-time + out := struct { + AsJSON string + Representation string + }{ + Representation: rev.String(), + } + asJSON, err := json.Marshal(rev.raw) + if err != nil { + return nil, err + } + out.AsJSON = string(asJSON) + + return json.Marshal(out) +} + +func (rev *ReportEntryValue) UnmarshalJSON(data []byte) error { + in := struct { + AsJSON string + Representation string + }{} + err := json.Unmarshal(data, &in) + if err != nil { + return err + } + rev.AsJSON = in.AsJSON + rev.Representation = in.Representation + return json.Unmarshal([]byte(in.AsJSON), &(rev.raw)) +} + +func (rev ReportEntryValue) GobEncode() ([]byte, error) { + return rev.MarshalJSON() +} + +func (rev *ReportEntryValue) GobDecode(data []byte) error { + return rev.UnmarshalJSON(data) +} + +// ReportEntry captures information attached to `SpecReport` via `AddReportEntry` +type ReportEntry struct { + // Visibility captures the visibility policy for this ReportEntry + Visibility ReportEntryVisibility + // Location captures the location of the AddReportEntry call + Location CodeLocation + + Time time.Time //need this for backwards compatibility + TimelineLocation TimelineLocation + + // Name captures the name of this report + Name string + // Value captures the (optional) object passed into AddReportEntry - this can be + // anything the user wants. The value passed to AddReportEntry is wrapped in a ReportEntryValue to make + // encoding/decoding the value easier. To access the raw value call entry.GetRawValue() + Value ReportEntryValue +} + +// ColorableStringer is an interface that ReportEntry values can satisfy. If they do then ColorableString() is used to generate their representation. +type ColorableStringer interface { + ColorableString() string +} + +// StringRepresentation() returns the string representation of the value associated with the ReportEntry -- +// if value is nil, empty string is returned +// if value is a `ColorableStringer` then `Value.ColorableString()` is returned +// if value is a `fmt.Stringer` then `Value.String()` is returned +// otherwise the value is formatted with "%+v" +func (entry ReportEntry) StringRepresentation() string { + return entry.Value.String() +} + +// GetRawValue returns the Value object that was passed to AddReportEntry +// If called in-process this will be the same object that was passed into AddReportEntry. +// If used from a rehydrated JSON file _or_ in a ReportAfterSuite when running in parallel this will be +// a JSON-decoded {}interface. If you want to reconstitute your original object you can decode the entry.Value.AsJSON +// field yourself. +func (entry ReportEntry) GetRawValue() interface{} { + return entry.Value.GetRawValue() +} + +func (entry ReportEntry) GetTimelineLocation() TimelineLocation { + return entry.TimelineLocation +} + +type ReportEntries []ReportEntry + +func (re ReportEntries) HasVisibility(visibilities ...ReportEntryVisibility) bool { + for _, entry := range re { + if entry.Visibility.Is(visibilities...) { + return true + } + } + return false +} + +func (re ReportEntries) WithVisibility(visibilities ...ReportEntryVisibility) ReportEntries { + out := ReportEntries{} + + for _, entry := range re { + if entry.Visibility.Is(visibilities...) { + out = append(out, entry) + } + } + + return out +} + +// ReportEntryVisibility governs the visibility of ReportEntries in Ginkgo's console reporter +type ReportEntryVisibility uint + +const ( + // Always print out this ReportEntry + ReportEntryVisibilityAlways ReportEntryVisibility = iota + // Only print out this ReportEntry if the spec fails or if the test is run with -v + ReportEntryVisibilityFailureOrVerbose + // Never print out this ReportEntry (note that ReportEntrys are always encoded in machine readable reports (e.g. JSON, JUnit, etc.)) + ReportEntryVisibilityNever +) + +var revEnumSupport = NewEnumSupport(map[uint]string{ + uint(ReportEntryVisibilityAlways): "always", + uint(ReportEntryVisibilityFailureOrVerbose): "failure-or-verbose", + uint(ReportEntryVisibilityNever): "never", +}) + +func (rev ReportEntryVisibility) String() string { + return revEnumSupport.String(uint(rev)) +} +func (rev *ReportEntryVisibility) UnmarshalJSON(b []byte) error { + out, err := revEnumSupport.UnmarshJSON(b) + *rev = ReportEntryVisibility(out) + return err +} +func (rev ReportEntryVisibility) MarshalJSON() ([]byte, error) { + return revEnumSupport.MarshJSON(uint(rev)) +} + +func (v ReportEntryVisibility) Is(visibilities ...ReportEntryVisibility) bool { + for _, visibility := range visibilities { + if v == visibility { + return true + } + } + + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/types.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/types.go new file mode 100644 index 000000000000..d048a8adab19 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/types.go @@ -0,0 +1,916 @@ +package types + +import ( + "encoding/json" + "fmt" + "sort" + "strings" + "time" +) + +const GINKGO_FOCUS_EXIT_CODE = 197 +const GINKGO_TIME_FORMAT = "01/02/06 15:04:05.999" + +// Report captures information about a Ginkgo test run +type Report struct { + //SuitePath captures the absolute path to the test suite + SuitePath string + + //SuiteDescription captures the description string passed to the DSL's RunSpecs() function + SuiteDescription string + + //SuiteLabels captures any labels attached to the suite by the DSL's RunSpecs() function + SuiteLabels []string + + //SuiteSucceeded captures the success or failure status of the test run + //If true, the test run is considered successful. + //If false, the test run is considered unsuccessful + SuiteSucceeded bool + + //SuiteHasProgrammaticFocus captures whether the test suite has a test or set of tests that are programmatically focused + //(i.e an `FIt` or an `FDescribe` + SuiteHasProgrammaticFocus bool + + //SpecialSuiteFailureReasons may contain special failure reasons + //For example, a test suite might be considered "failed" even if none of the individual specs + //have a failure state. For example, if the user has configured --fail-on-pending the test suite + //will have failed if there are pending tests even though all non-pending tests may have passed. In such + //cases, Ginkgo populates SpecialSuiteFailureReasons with a clear message indicating the reason for the failure. + //SpecialSuiteFailureReasons is also populated if the test suite is interrupted by the user. + //Since multiple special failure reasons can occur, this field is a slice. + SpecialSuiteFailureReasons []string + + //PreRunStats contains a set of stats captured before the test run begins. This is primarily used + //by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs) + //and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters. + PreRunStats PreRunStats + + //StartTime and EndTime capture the start and end time of the test run + StartTime time.Time + EndTime time.Time + + //RunTime captures the duration of the test run + RunTime time.Duration + + //SuiteConfig captures the Ginkgo configuration governing this test run + //SuiteConfig includes information necessary for reproducing an identical test run, + //such as the random seed and any filters applied during the test run + SuiteConfig SuiteConfig + + //SpecReports is a list of all SpecReports generated by this test run + //It is empty when the SuiteReport is provided to ReportBeforeSuite + SpecReports SpecReports +} + +// PreRunStats contains a set of stats captured before the test run begins. This is primarily used +// by Ginkgo's reporter to tell the user how many specs are in the current suite (PreRunStats.TotalSpecs) +// and how many it intends to run (PreRunStats.SpecsThatWillRun) after applying any relevant focus or skip filters. +type PreRunStats struct { + TotalSpecs int + SpecsThatWillRun int +} + +// Add is used by Ginkgo's parallel aggregation mechanisms to combine test run reports form individual parallel processes +// to form a complete final report. +func (report Report) Add(other Report) Report { + report.SuiteSucceeded = report.SuiteSucceeded && other.SuiteSucceeded + + if other.StartTime.Before(report.StartTime) { + report.StartTime = other.StartTime + } + + if other.EndTime.After(report.EndTime) { + report.EndTime = other.EndTime + } + + specialSuiteFailureReasons := []string{} + reasonsLookup := map[string]bool{} + for _, reasons := range [][]string{report.SpecialSuiteFailureReasons, other.SpecialSuiteFailureReasons} { + for _, reason := range reasons { + if !reasonsLookup[reason] { + reasonsLookup[reason] = true + specialSuiteFailureReasons = append(specialSuiteFailureReasons, reason) + } + } + } + report.SpecialSuiteFailureReasons = specialSuiteFailureReasons + report.RunTime = report.EndTime.Sub(report.StartTime) + + reports := make(SpecReports, len(report.SpecReports)+len(other.SpecReports)) + for i := range report.SpecReports { + reports[i] = report.SpecReports[i] + } + offset := len(report.SpecReports) + for i := range other.SpecReports { + reports[i+offset] = other.SpecReports[i] + } + + report.SpecReports = reports + return report +} + +// SpecReport captures information about a Ginkgo spec. +type SpecReport struct { + // ContainerHierarchyTexts is a slice containing the text strings of + // all Describe/Context/When containers in this spec's hierarchy. + ContainerHierarchyTexts []string + + // ContainerHierarchyLocations is a slice containing the CodeLocations of + // all Describe/Context/When containers in this spec's hierarchy. + ContainerHierarchyLocations []CodeLocation + + // ContainerHierarchyLabels is a slice containing the labels of + // all Describe/Context/When containers in this spec's hierarchy + ContainerHierarchyLabels [][]string + + // LeafNodeType, LeadNodeLocation, LeafNodeLabels and LeafNodeText capture the NodeType, CodeLocation, and text + // of the Ginkgo node being tested (typically an NodeTypeIt node, though this can also be + // one of the NodeTypesForSuiteLevelNodes node types) + LeafNodeType NodeType + LeafNodeLocation CodeLocation + LeafNodeLabels []string + LeafNodeText string + + // State captures whether the spec has passed, failed, etc. + State SpecState + + // IsSerial captures whether the spec has the Serial decorator + IsSerial bool + + // IsInOrderedContainer captures whether the spec appears in an Ordered container + IsInOrderedContainer bool + + // StartTime and EndTime capture the start and end time of the spec + StartTime time.Time + EndTime time.Time + + // RunTime captures the duration of the spec + RunTime time.Duration + + // ParallelProcess captures the parallel process that this spec ran on + ParallelProcess int + + // RunningInParallel captures whether this spec is part of a suite that ran in parallel + RunningInParallel bool + + //Failure is populated if a spec has failed, panicked, been interrupted, or skipped by the user (e.g. calling Skip()) + //It includes detailed information about the Failure + Failure Failure + + // NumAttempts captures the number of times this Spec was run. + // Flakey specs can be retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator. + // Repeated specs can be retried with the use of the MustPassRepeatedly decorator + NumAttempts int + + // MaxFlakeAttempts captures whether the spec has been retried with ginkgo --flake-attempts=N or the use of the FlakeAttempts decorator. + MaxFlakeAttempts int + + // MaxMustPassRepeatedly captures whether the spec has the MustPassRepeatedly decorator + MaxMustPassRepeatedly int + + // CapturedGinkgoWriterOutput contains text printed to the GinkgoWriter + CapturedGinkgoWriterOutput string + + // CapturedStdOutErr contains text printed to stdout/stderr (when running in parallel) + // This is always empty when running in series or calling CurrentSpecReport() + // It is used internally by Ginkgo's reporter + CapturedStdOutErr string + + // ReportEntries contains any reports added via `AddReportEntry` + ReportEntries ReportEntries + + // ProgressReports contains any progress reports generated during this spec. These can either be manually triggered, or automatically generated by Ginkgo via the PollProgressAfter() decorator + ProgressReports []ProgressReport + + // AdditionalFailures contains any failures that occurred after the initial spec failure. These typically occur in cleanup nodes after the initial failure and are only emitted when running in verbose mode. + AdditionalFailures []AdditionalFailure + + // SpecEvents capture additional events that occur during the spec run + SpecEvents SpecEvents +} + +func (report SpecReport) MarshalJSON() ([]byte, error) { + //All this to avoid emitting an empty Failure struct in the JSON + out := struct { + ContainerHierarchyTexts []string + ContainerHierarchyLocations []CodeLocation + ContainerHierarchyLabels [][]string + LeafNodeType NodeType + LeafNodeLocation CodeLocation + LeafNodeLabels []string + LeafNodeText string + State SpecState + StartTime time.Time + EndTime time.Time + RunTime time.Duration + ParallelProcess int + Failure *Failure `json:",omitempty"` + NumAttempts int + MaxFlakeAttempts int + MaxMustPassRepeatedly int + CapturedGinkgoWriterOutput string `json:",omitempty"` + CapturedStdOutErr string `json:",omitempty"` + ReportEntries ReportEntries `json:",omitempty"` + ProgressReports []ProgressReport `json:",omitempty"` + AdditionalFailures []AdditionalFailure `json:",omitempty"` + SpecEvents SpecEvents `json:",omitempty"` + }{ + ContainerHierarchyTexts: report.ContainerHierarchyTexts, + ContainerHierarchyLocations: report.ContainerHierarchyLocations, + ContainerHierarchyLabels: report.ContainerHierarchyLabels, + LeafNodeType: report.LeafNodeType, + LeafNodeLocation: report.LeafNodeLocation, + LeafNodeLabels: report.LeafNodeLabels, + LeafNodeText: report.LeafNodeText, + State: report.State, + StartTime: report.StartTime, + EndTime: report.EndTime, + RunTime: report.RunTime, + ParallelProcess: report.ParallelProcess, + Failure: nil, + ReportEntries: nil, + NumAttempts: report.NumAttempts, + MaxFlakeAttempts: report.MaxFlakeAttempts, + MaxMustPassRepeatedly: report.MaxMustPassRepeatedly, + CapturedGinkgoWriterOutput: report.CapturedGinkgoWriterOutput, + CapturedStdOutErr: report.CapturedStdOutErr, + } + + if !report.Failure.IsZero() { + out.Failure = &(report.Failure) + } + if len(report.ReportEntries) > 0 { + out.ReportEntries = report.ReportEntries + } + if len(report.ProgressReports) > 0 { + out.ProgressReports = report.ProgressReports + } + if len(report.AdditionalFailures) > 0 { + out.AdditionalFailures = report.AdditionalFailures + } + if len(report.SpecEvents) > 0 { + out.SpecEvents = report.SpecEvents + } + + return json.Marshal(out) +} + +// CombinedOutput returns a single string representation of both CapturedStdOutErr and CapturedGinkgoWriterOutput +// Note that both are empty when using CurrentSpecReport() so CurrentSpecReport().CombinedOutput() will always be empty. +// CombinedOutput() is used internally by Ginkgo's reporter. +func (report SpecReport) CombinedOutput() string { + if report.CapturedStdOutErr == "" { + return report.CapturedGinkgoWriterOutput + } + if report.CapturedGinkgoWriterOutput == "" { + return report.CapturedStdOutErr + } + return report.CapturedStdOutErr + "\n" + report.CapturedGinkgoWriterOutput +} + +// Failed returns true if report.State is one of the SpecStateFailureStates +// (SpecStateFailed, SpecStatePanicked, SpecStateinterrupted, SpecStateAborted) +func (report SpecReport) Failed() bool { + return report.State.Is(SpecStateFailureStates) +} + +// FullText returns a concatenation of all the report.ContainerHierarchyTexts and report.LeafNodeText +func (report SpecReport) FullText() string { + texts := []string{} + texts = append(texts, report.ContainerHierarchyTexts...) + if report.LeafNodeText != "" { + texts = append(texts, report.LeafNodeText) + } + return strings.Join(texts, " ") +} + +// Labels returns a deduped set of all the spec's Labels. +func (report SpecReport) Labels() []string { + out := []string{} + seen := map[string]bool{} + for _, labels := range report.ContainerHierarchyLabels { + for _, label := range labels { + if !seen[label] { + seen[label] = true + out = append(out, label) + } + } + } + for _, label := range report.LeafNodeLabels { + if !seen[label] { + seen[label] = true + out = append(out, label) + } + } + + return out +} + +// MatchesLabelFilter returns true if the spec satisfies the passed in label filter query +func (report SpecReport) MatchesLabelFilter(query string) (bool, error) { + filter, err := ParseLabelFilter(query) + if err != nil { + return false, err + } + return filter(report.Labels()), nil +} + +// FileName() returns the name of the file containing the spec +func (report SpecReport) FileName() string { + return report.LeafNodeLocation.FileName +} + +// LineNumber() returns the line number of the leaf node +func (report SpecReport) LineNumber() int { + return report.LeafNodeLocation.LineNumber +} + +// FailureMessage() returns the failure message (or empty string if the test hasn't failed) +func (report SpecReport) FailureMessage() string { + return report.Failure.Message +} + +// FailureLocation() returns the location of the failure (or an empty CodeLocation if the test hasn't failed) +func (report SpecReport) FailureLocation() CodeLocation { + return report.Failure.Location +} + +// Timeline() returns a timeline view of the report +func (report SpecReport) Timeline() Timeline { + timeline := Timeline{} + if !report.Failure.IsZero() { + timeline = append(timeline, report.Failure) + if report.Failure.AdditionalFailure != nil { + timeline = append(timeline, *(report.Failure.AdditionalFailure)) + } + } + for _, additionalFailure := range report.AdditionalFailures { + timeline = append(timeline, additionalFailure) + } + for _, reportEntry := range report.ReportEntries { + timeline = append(timeline, reportEntry) + } + for _, progressReport := range report.ProgressReports { + timeline = append(timeline, progressReport) + } + for _, specEvent := range report.SpecEvents { + timeline = append(timeline, specEvent) + } + sort.Sort(timeline) + return timeline +} + +type SpecReports []SpecReport + +// WithLeafNodeType returns the subset of SpecReports with LeafNodeType matching one of the requested NodeTypes +func (reports SpecReports) WithLeafNodeType(nodeTypes NodeType) SpecReports { + count := 0 + for i := range reports { + if reports[i].LeafNodeType.Is(nodeTypes) { + count++ + } + } + + out := make(SpecReports, count) + j := 0 + for i := range reports { + if reports[i].LeafNodeType.Is(nodeTypes) { + out[j] = reports[i] + j++ + } + } + return out +} + +// WithState returns the subset of SpecReports with State matching one of the requested SpecStates +func (reports SpecReports) WithState(states SpecState) SpecReports { + count := 0 + for i := range reports { + if reports[i].State.Is(states) { + count++ + } + } + + out, j := make(SpecReports, count), 0 + for i := range reports { + if reports[i].State.Is(states) { + out[j] = reports[i] + j++ + } + } + return out +} + +// CountWithState returns the number of SpecReports with State matching one of the requested SpecStates +func (reports SpecReports) CountWithState(states SpecState) int { + n := 0 + for i := range reports { + if reports[i].State.Is(states) { + n += 1 + } + } + return n +} + +// If the Spec passes, CountOfFlakedSpecs returns the number of SpecReports that failed after multiple attempts. +func (reports SpecReports) CountOfFlakedSpecs() int { + n := 0 + for i := range reports { + if reports[i].MaxFlakeAttempts > 1 && reports[i].State.Is(SpecStatePassed) && reports[i].NumAttempts > 1 { + n += 1 + } + } + return n +} + +// If the Spec fails, CountOfRepeatedSpecs returns the number of SpecReports that passed after multiple attempts +func (reports SpecReports) CountOfRepeatedSpecs() int { + n := 0 + for i := range reports { + if reports[i].MaxMustPassRepeatedly > 1 && reports[i].State.Is(SpecStateFailureStates) && reports[i].NumAttempts > 1 { + n += 1 + } + } + return n +} + +// TimelineLocation captures the location of an event in the spec's timeline +type TimelineLocation struct { + //Offset is the offset (in bytes) of the event relative to the GinkgoWriter stream + Offset int `json:",omitempty"` + + //Order is the order of the event with respect to other events. The absolute value of Order + //is irrelevant. All that matters is that an event with a lower Order occurs before ane vent with a higher Order + Order int `json:",omitempty"` + + Time time.Time +} + +// TimelineEvent represent an event on the timeline +// consumers of Timeline will need to check the concrete type of each entry to determine how to handle it +type TimelineEvent interface { + GetTimelineLocation() TimelineLocation +} + +type Timeline []TimelineEvent + +func (t Timeline) Len() int { return len(t) } +func (t Timeline) Less(i, j int) bool { + return t[i].GetTimelineLocation().Order < t[j].GetTimelineLocation().Order +} +func (t Timeline) Swap(i, j int) { t[i], t[j] = t[j], t[i] } +func (t Timeline) WithoutHiddenReportEntries() Timeline { + out := Timeline{} + for _, event := range t { + if reportEntry, isReportEntry := event.(ReportEntry); isReportEntry && reportEntry.Visibility == ReportEntryVisibilityNever { + continue + } + out = append(out, event) + } + return out +} + +func (t Timeline) WithoutVeryVerboseSpecEvents() Timeline { + out := Timeline{} + for _, event := range t { + if specEvent, isSpecEvent := event.(SpecEvent); isSpecEvent && specEvent.IsOnlyVisibleAtVeryVerbose() { + continue + } + out = append(out, event) + } + return out +} + +// Failure captures failure information for an individual test +type Failure struct { + // Message - the failure message passed into Fail(...). When using a matcher library + // like Gomega, this will contain the failure message generated by Gomega. + // + // Message is also populated if the user has called Skip(...). + Message string + + // Location - the CodeLocation where the failure occurred + // This CodeLocation will include a fully-populated StackTrace + Location CodeLocation + + TimelineLocation TimelineLocation + + // ForwardedPanic - if the failure represents a captured panic (i.e. Summary.State == SpecStatePanicked) + // then ForwardedPanic will be populated with a string representation of the captured panic. + ForwardedPanic string `json:",omitempty"` + + // FailureNodeContext - one of three contexts describing the node in which the failure occurred: + // FailureNodeIsLeafNode means the failure occurred in the leaf node of the associated SpecReport. None of the other FailureNode fields will be populated + // FailureNodeAtTopLevel means the failure occurred in a non-leaf node that is defined at the top-level of the spec (i.e. not in a container). FailureNodeType and FailureNodeLocation will be populated. + // FailureNodeInContainer means the failure occurred in a non-leaf node that is defined within a container. FailureNodeType, FailureNodeLocation, and FailureNodeContainerIndex will be populated. + // + // FailureNodeType will contain the NodeType of the node in which the failure occurred. + // FailureNodeLocation will contain the CodeLocation of the node in which the failure occurred. + // If populated, FailureNodeContainerIndex will be the index into SpecReport.ContainerHierarchyTexts and SpecReport.ContainerHierarchyLocations that represents the parent container of the node in which the failure occurred. + FailureNodeContext FailureNodeContext `json:",omitempty"` + + FailureNodeType NodeType `json:",omitempty"` + + FailureNodeLocation CodeLocation `json:",omitempty"` + + FailureNodeContainerIndex int `json:",omitempty"` + + //ProgressReport is populated if the spec was interrupted or timed out + ProgressReport ProgressReport `json:",omitempty"` + + //AdditionalFailure is non-nil if a follow-on failure occurred within the same node after the primary failure. This only happens when a node has timed out or been interrupted. In such cases the AdditionalFailure can include information about where/why the spec was stuck. + AdditionalFailure *AdditionalFailure `json:",omitempty"` +} + +func (f Failure) IsZero() bool { + return f.Message == "" && (f.Location == CodeLocation{}) +} + +func (f Failure) GetTimelineLocation() TimelineLocation { + return f.TimelineLocation +} + +// FailureNodeContext captures the location context for the node containing the failing line of code +type FailureNodeContext uint + +const ( + FailureNodeContextInvalid FailureNodeContext = iota + + FailureNodeIsLeafNode + FailureNodeAtTopLevel + FailureNodeInContainer +) + +var fncEnumSupport = NewEnumSupport(map[uint]string{ + uint(FailureNodeContextInvalid): "INVALID FAILURE NODE CONTEXT", + uint(FailureNodeIsLeafNode): "leaf-node", + uint(FailureNodeAtTopLevel): "top-level", + uint(FailureNodeInContainer): "in-container", +}) + +func (fnc FailureNodeContext) String() string { + return fncEnumSupport.String(uint(fnc)) +} +func (fnc *FailureNodeContext) UnmarshalJSON(b []byte) error { + out, err := fncEnumSupport.UnmarshJSON(b) + *fnc = FailureNodeContext(out) + return err +} +func (fnc FailureNodeContext) MarshalJSON() ([]byte, error) { + return fncEnumSupport.MarshJSON(uint(fnc)) +} + +// AdditionalFailure capturs any additional failures that occur after the initial failure of a psec +// these typically occur in clean up nodes after the spec has failed. +// We can't simply use Failure as we want to track the SpecState to know what kind of failure this is +type AdditionalFailure struct { + State SpecState + Failure Failure +} + +func (f AdditionalFailure) GetTimelineLocation() TimelineLocation { + return f.Failure.TimelineLocation +} + +// SpecState captures the state of a spec +// To determine if a given `state` represents a failure state, use `state.Is(SpecStateFailureStates)` +type SpecState uint + +const ( + SpecStateInvalid SpecState = 0 + + SpecStatePending SpecState = 1 << iota + SpecStateSkipped + SpecStatePassed + SpecStateFailed + SpecStateAborted + SpecStatePanicked + SpecStateInterrupted + SpecStateTimedout +) + +var ssEnumSupport = NewEnumSupport(map[uint]string{ + uint(SpecStateInvalid): "INVALID SPEC STATE", + uint(SpecStatePending): "pending", + uint(SpecStateSkipped): "skipped", + uint(SpecStatePassed): "passed", + uint(SpecStateFailed): "failed", + uint(SpecStateAborted): "aborted", + uint(SpecStatePanicked): "panicked", + uint(SpecStateInterrupted): "interrupted", + uint(SpecStateTimedout): "timedout", +}) + +func (ss SpecState) String() string { + return ssEnumSupport.String(uint(ss)) +} +func (ss SpecState) GomegaString() string { + return ssEnumSupport.String(uint(ss)) +} +func (ss *SpecState) UnmarshalJSON(b []byte) error { + out, err := ssEnumSupport.UnmarshJSON(b) + *ss = SpecState(out) + return err +} +func (ss SpecState) MarshalJSON() ([]byte, error) { + return ssEnumSupport.MarshJSON(uint(ss)) +} + +var SpecStateFailureStates = SpecStateFailed | SpecStateTimedout | SpecStateAborted | SpecStatePanicked | SpecStateInterrupted + +func (ss SpecState) Is(states SpecState) bool { + return ss&states != 0 +} + +// ProgressReport captures the progress of the current spec. It is, effectively, a structured Ginkgo-aware stack trace +type ProgressReport struct { + Message string `json:",omitempty"` + ParallelProcess int `json:",omitempty"` + RunningInParallel bool `json:",omitempty"` + + ContainerHierarchyTexts []string `json:",omitempty"` + LeafNodeText string `json:",omitempty"` + LeafNodeLocation CodeLocation `json:",omitempty"` + SpecStartTime time.Time `json:",omitempty"` + + CurrentNodeType NodeType `json:",omitempty"` + CurrentNodeText string `json:",omitempty"` + CurrentNodeLocation CodeLocation `json:",omitempty"` + CurrentNodeStartTime time.Time `json:",omitempty"` + + CurrentStepText string `json:",omitempty"` + CurrentStepLocation CodeLocation `json:",omitempty"` + CurrentStepStartTime time.Time `json:",omitempty"` + + AdditionalReports []string `json:",omitempty"` + + CapturedGinkgoWriterOutput string `json:",omitempty"` + TimelineLocation TimelineLocation `json:",omitempty"` + + Goroutines []Goroutine `json:",omitempty"` +} + +func (pr ProgressReport) IsZero() bool { + return pr.CurrentNodeType == NodeTypeInvalid +} + +func (pr ProgressReport) Time() time.Time { + return pr.TimelineLocation.Time +} + +func (pr ProgressReport) SpecGoroutine() Goroutine { + for _, goroutine := range pr.Goroutines { + if goroutine.IsSpecGoroutine { + return goroutine + } + } + return Goroutine{} +} + +func (pr ProgressReport) HighlightedGoroutines() []Goroutine { + out := []Goroutine{} + for _, goroutine := range pr.Goroutines { + if goroutine.IsSpecGoroutine || !goroutine.HasHighlights() { + continue + } + out = append(out, goroutine) + } + return out +} + +func (pr ProgressReport) OtherGoroutines() []Goroutine { + out := []Goroutine{} + for _, goroutine := range pr.Goroutines { + if goroutine.IsSpecGoroutine || goroutine.HasHighlights() { + continue + } + out = append(out, goroutine) + } + return out +} + +func (pr ProgressReport) WithoutCapturedGinkgoWriterOutput() ProgressReport { + out := pr + out.CapturedGinkgoWriterOutput = "" + return out +} + +func (pr ProgressReport) WithoutOtherGoroutines() ProgressReport { + out := pr + filteredGoroutines := []Goroutine{} + for _, goroutine := range pr.Goroutines { + if goroutine.IsSpecGoroutine || goroutine.HasHighlights() { + filteredGoroutines = append(filteredGoroutines, goroutine) + } + } + out.Goroutines = filteredGoroutines + return out +} + +func (pr ProgressReport) GetTimelineLocation() TimelineLocation { + return pr.TimelineLocation +} + +type Goroutine struct { + ID uint64 + State string + Stack []FunctionCall + IsSpecGoroutine bool +} + +func (g Goroutine) IsZero() bool { + return g.ID == 0 +} + +func (g Goroutine) HasHighlights() bool { + for _, fc := range g.Stack { + if fc.Highlight { + return true + } + } + + return false +} + +type FunctionCall struct { + Function string + Filename string + Line int + Highlight bool `json:",omitempty"` + Source []string `json:",omitempty"` + SourceHighlight int `json:",omitempty"` +} + +// NodeType captures the type of a given Ginkgo Node +type NodeType uint + +const ( + NodeTypeInvalid NodeType = 0 + + NodeTypeContainer NodeType = 1 << iota + NodeTypeIt + + NodeTypeBeforeEach + NodeTypeJustBeforeEach + NodeTypeAfterEach + NodeTypeJustAfterEach + + NodeTypeBeforeAll + NodeTypeAfterAll + + NodeTypeBeforeSuite + NodeTypeSynchronizedBeforeSuite + NodeTypeAfterSuite + NodeTypeSynchronizedAfterSuite + + NodeTypeReportBeforeEach + NodeTypeReportAfterEach + NodeTypeReportBeforeSuite + NodeTypeReportAfterSuite + + NodeTypeCleanupInvalid + NodeTypeCleanupAfterEach + NodeTypeCleanupAfterAll + NodeTypeCleanupAfterSuite +) + +var NodeTypesForContainerAndIt = NodeTypeContainer | NodeTypeIt +var NodeTypesForSuiteLevelNodes = NodeTypeBeforeSuite | NodeTypeSynchronizedBeforeSuite | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite | NodeTypeCleanupAfterSuite +var NodeTypesAllowedDuringCleanupInterrupt = NodeTypeAfterEach | NodeTypeJustAfterEach | NodeTypeAfterAll | NodeTypeAfterSuite | NodeTypeSynchronizedAfterSuite | NodeTypeCleanupAfterEach | NodeTypeCleanupAfterAll | NodeTypeCleanupAfterSuite +var NodeTypesAllowedDuringReportInterrupt = NodeTypeReportBeforeEach | NodeTypeReportAfterEach | NodeTypeReportBeforeSuite | NodeTypeReportAfterSuite + +var ntEnumSupport = NewEnumSupport(map[uint]string{ + uint(NodeTypeInvalid): "INVALID NODE TYPE", + uint(NodeTypeContainer): "Container", + uint(NodeTypeIt): "It", + uint(NodeTypeBeforeEach): "BeforeEach", + uint(NodeTypeJustBeforeEach): "JustBeforeEach", + uint(NodeTypeAfterEach): "AfterEach", + uint(NodeTypeJustAfterEach): "JustAfterEach", + uint(NodeTypeBeforeAll): "BeforeAll", + uint(NodeTypeAfterAll): "AfterAll", + uint(NodeTypeBeforeSuite): "BeforeSuite", + uint(NodeTypeSynchronizedBeforeSuite): "SynchronizedBeforeSuite", + uint(NodeTypeAfterSuite): "AfterSuite", + uint(NodeTypeSynchronizedAfterSuite): "SynchronizedAfterSuite", + uint(NodeTypeReportBeforeEach): "ReportBeforeEach", + uint(NodeTypeReportAfterEach): "ReportAfterEach", + uint(NodeTypeReportBeforeSuite): "ReportBeforeSuite", + uint(NodeTypeReportAfterSuite): "ReportAfterSuite", + uint(NodeTypeCleanupInvalid): "DeferCleanup", + uint(NodeTypeCleanupAfterEach): "DeferCleanup (Each)", + uint(NodeTypeCleanupAfterAll): "DeferCleanup (All)", + uint(NodeTypeCleanupAfterSuite): "DeferCleanup (Suite)", +}) + +func (nt NodeType) String() string { + return ntEnumSupport.String(uint(nt)) +} +func (nt *NodeType) UnmarshalJSON(b []byte) error { + out, err := ntEnumSupport.UnmarshJSON(b) + *nt = NodeType(out) + return err +} +func (nt NodeType) MarshalJSON() ([]byte, error) { + return ntEnumSupport.MarshJSON(uint(nt)) +} + +func (nt NodeType) Is(nodeTypes NodeType) bool { + return nt&nodeTypes != 0 +} + +/* +SpecEvent captures a vareity of events that can occur when specs run. See SpecEventType for the list of available events. +*/ +type SpecEvent struct { + SpecEventType SpecEventType + + CodeLocation CodeLocation + TimelineLocation TimelineLocation + + Message string `json:",omitempty"` + Duration time.Duration `json:",omitempty"` + NodeType NodeType `json:",omitempty"` + Attempt int `json:",omitempty"` +} + +func (se SpecEvent) GetTimelineLocation() TimelineLocation { + return se.TimelineLocation +} + +func (se SpecEvent) IsOnlyVisibleAtVeryVerbose() bool { + return se.SpecEventType.Is(SpecEventByEnd | SpecEventNodeStart | SpecEventNodeEnd) +} + +func (se SpecEvent) GomegaString() string { + out := &strings.Builder{} + out.WriteString("[" + se.SpecEventType.String() + " SpecEvent] ") + if se.Message != "" { + out.WriteString("Message=") + out.WriteString(`"` + se.Message + `",`) + } + if se.Duration != 0 { + out.WriteString("Duration=" + se.Duration.String() + ",") + } + if se.NodeType != NodeTypeInvalid { + out.WriteString("NodeType=" + se.NodeType.String() + ",") + } + if se.Attempt != 0 { + out.WriteString(fmt.Sprintf("Attempt=%d", se.Attempt) + ",") + } + out.WriteString("CL=" + se.CodeLocation.String() + ",") + out.WriteString(fmt.Sprintf("TL.Offset=%d", se.TimelineLocation.Offset)) + + return out.String() +} + +type SpecEvents []SpecEvent + +func (se SpecEvents) WithType(seType SpecEventType) SpecEvents { + out := SpecEvents{} + for _, event := range se { + if event.SpecEventType.Is(seType) { + out = append(out, event) + } + } + return out +} + +type SpecEventType uint + +const ( + SpecEventInvalid SpecEventType = 0 + + SpecEventByStart SpecEventType = 1 << iota + SpecEventByEnd + SpecEventNodeStart + SpecEventNodeEnd + SpecEventSpecRepeat + SpecEventSpecRetry +) + +var seEnumSupport = NewEnumSupport(map[uint]string{ + uint(SpecEventInvalid): "INVALID SPEC EVENT", + uint(SpecEventByStart): "By", + uint(SpecEventByEnd): "By (End)", + uint(SpecEventNodeStart): "Node", + uint(SpecEventNodeEnd): "Node (End)", + uint(SpecEventSpecRepeat): "Repeat", + uint(SpecEventSpecRetry): "Retry", +}) + +func (se SpecEventType) String() string { + return seEnumSupport.String(uint(se)) +} +func (se *SpecEventType) UnmarshalJSON(b []byte) error { + out, err := seEnumSupport.UnmarshJSON(b) + *se = SpecEventType(out) + return err +} +func (se SpecEventType) MarshalJSON() ([]byte, error) { + return seEnumSupport.MarshJSON(uint(se)) +} + +func (se SpecEventType) Is(specEventTypes SpecEventType) bool { + return se&specEventTypes != 0 +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go new file mode 100644 index 000000000000..d452bf9a695a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -0,0 +1,3 @@ +package types + +const VERSION = "2.9.4" diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore b/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore new file mode 100644 index 000000000000..52266eae1132 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +*.test +. +.idea +gomega.iml +TODO.md +.vscode \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md new file mode 100644 index 000000000000..ef428f6f6293 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -0,0 +1,583 @@ +## 1.27.6 + +### Fixes +- Allow collections matchers to work correctly when expected has nil elements [60e7cf3] + +### Maintenance +- updates MatchError godoc comment to also accept a Gomega matcher (#654) [67b869d] + +## 1.27.5 + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.9.1 to 2.9.2 (#653) [a215021] +- Bump github.com/go-task/slim-sprig (#652) [a26fed8] + +## 1.27.4 + +### Fixes +- improve error formatting and remove duplication of error message in Eventually/Consistently [854f075] + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.9.0 to 2.9.1 (#650) [ccebd9b] + +## 1.27.3 + +### Fixes +- format.Object now always includes err.Error() when passed an error [86d97ef] +- Fix HaveExactElements to work inside ContainElement or other collection matchers (#648) [636757e] + +### Maintenance +- Bump github.com/golang/protobuf from 1.5.2 to 1.5.3 (#649) [cc16689] +- Bump github.com/onsi/ginkgo/v2 from 2.8.4 to 2.9.0 (#646) [e783366] + +## 1.27.2 + +### Fixes +- improve poll progress message when polling a consistently that has been passing [28a319b] + +### Maintenance +- bump ginkgo +- remove tools.go hack as Ginkgo 2.8.2 automatically pulls in the cli dependencies [81443b3] + +## 1.27.1 + +### Maintenance + +- Bump golang.org/x/net from 0.6.0 to 0.7.0 (#640) [bc686cd] + +## 1.27.0 + +### Features +- Add HaveExactElements matcher (#634) [9d50783] +- update Gomega docs to discuss GinkgoHelper() [be32774] + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.8.0 to 2.8.1 (#639) [296a68b] +- Bump golang.org/x/net from 0.5.0 to 0.6.0 (#638) [c2b098b] +- Bump github-pages from 227 to 228 in /docs (#636) [a9069ab] +- test: update matrix for Go 1.20 (#635) [6bd25c8] +- Bump github.com/onsi/ginkgo/v2 from 2.7.0 to 2.8.0 (#631) [5445f8b] +- Bump webrick from 1.7.0 to 1.8.1 in /docs (#630) [03e93bb] +- codeql: add ruby language (#626) [63c7d21] +- dependabot: add bundler package-ecosystem for docs (#625) [d92f963] + +## 1.26.0 + +### Features +- When a polled function returns an error, keep track of the actual and report on the matcher state of the last non-errored actual [21f3090] +- improve eventually failure message output [c530fb3] + +### Fixes +- fix several documentation spelling issues [e2eff1f] + + +## 1.25.0 + +### Features +- add `MustPassRepeatedly(int)` to asyncAssertion (#619) [4509f72] +- compare unwrapped errors using DeepEqual (#617) [aaeaa5d] + +### Maintenance +- Bump golang.org/x/net from 0.4.0 to 0.5.0 (#614) [c7cfea4] +- Bump github.com/onsi/ginkgo/v2 from 2.6.1 to 2.7.0 (#615) [71b8adb] +- Docs: Fix typo "MUltiple" -> "Multiple" (#616) [9351dda] +- clean up go.sum [cd1dc1d] + +## 1.24.2 + +### Fixes +- Correctly handle assertion failure panics for eventually/consistnetly "g Gomega"s in a goroutine [78f1660] +- docs:Fix typo "you an" -> "you can" (#607) [3187c1f] +- fixes issue #600 (#606) [808d192] + +### Maintenance +- Bump golang.org/x/net from 0.2.0 to 0.4.0 (#611) [6ebc0bf] +- Bump nokogiri from 1.13.9 to 1.13.10 in /docs (#612) [258cfc8] +- Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 (#609) [e6c3eb9] + +## 1.24.1 + +### Fixes +- maintain backward compatibility for Eventually and Consisntetly's signatures [4c7df5e] +- fix small typo (#601) [ea0ebe6] + +### Maintenance +- Bump golang.org/x/net from 0.1.0 to 0.2.0 (#603) [1ba8372] +- Bump github.com/onsi/ginkgo/v2 from 2.4.0 to 2.5.0 (#602) [f9426cb] +- fix label-filter in test.yml [d795db6] +- stop running flakey tests and rely on external network dependencies in CI [7133290] + +## 1.24.0 + +### Features + +Introducting [gcustom](https://onsi.github.io/gomega/#gcustom-a-convenient-mechanism-for-buildling-custom-matchers) - a convenient mechanism for building custom matchers. + +This is an RC release for `gcustom`. The external API may be tweaked in response to feedback however it is expected to remain mostly stable. + +### Maintenance + +- Update BeComparableTo documentation [756eaa0] + +## 1.23.0 + +### Features +- Custom formatting on a per-type basis can be provided using `format.RegisterCustomFormatter()` -- see the docs [here](https://onsi.github.io/gomega/#adjusting-output) + +- Substantial improvement have been made to `StopTrying()`: + - Users can now use `StopTrying().Wrap(err)` to wrap errors and `StopTrying().Attach(description, object)` to attach arbitrary objects to the `StopTrying()` error + - `StopTrying()` is now always interpreted as a failure. If you are an early adopter of `StopTrying()` you may need to change your code as the prior version would match against the returned value even if `StopTrying()` was returned. Going forward the `StopTrying()` api should remain stable. + - `StopTrying()` and `StopTrying().Now()` can both be used in matchers - not just polled functions. + +- `TryAgainAfter(duration)` is used like `StopTrying()` but instructs `Eventually` and `Consistently` that the poll should be tried again after the specified duration. This allows you to dynamically adjust the polling duration. + +- `ctx` can now be passed-in as the first argument to `Eventually` and `Consistently`. + +## Maintenance + +- Bump github.com/onsi/ginkgo/v2 from 2.3.0 to 2.3.1 (#597) [afed901] +- Bump nokogiri from 1.13.8 to 1.13.9 in /docs (#599) [7c691b3] +- Bump github.com/google/go-cmp from 0.5.8 to 0.5.9 (#587) [ff22665] + +## 1.22.1 + +## Fixes +- When passed a context and no explicit timeout, Eventually will only timeout when the context is cancelled [e5105cf] +- Allow StopTrying() to be wrapped [bf3cba9] + +## Maintenance +- bump to ginkgo v2.3.0 [c5d5c39] + +## 1.22.0 + +### Features + +Several improvements have been made to `Eventually` and `Consistently` in this and the most recent releases: + +- Eventually and Consistently can take a context.Context [65c01bc] + This enables integration with Ginkgo 2.3.0's interruptible nodes and node timeouts. +- Eventually and Consistently that are passed a SpecContext can provide reports when an interrupt occurs [0d063c9] +- Eventually/Consistently will forward an attached context to functions that ask for one [e2091c5] +- Eventually/Consistently supports passing arguments to functions via WithArguments() [a2dc7c3] +- Eventually and Consistently can now be stopped early with StopTrying(message) and StopTrying(message).Now() [52976bb] + +These improvements are all documented in [Gomega's docs](https://onsi.github.io/gomega/#making-asynchronous-assertions) + +## Fixes + +## Maintenance + +## 1.21.1 + +### Features +- Eventually and Consistently that are passed a SpecContext can provide reports when an interrupt occurs [0d063c9] + +## 1.21.0 + +### Features +- Eventually and Consistently can take a context.Context [65c01bc] + This enables integration with Ginkgo 2.3.0's interruptible nodes and node timeouts. +- Introduces Eventually.Within.ProbeEvery with tests and documentation (#591) [f633800] +- New BeKeyOf matcher with documentation and unit tests (#590) [fb586b3] + +## Fixes +- Cover the entire gmeasure suite with leak detection [8c54344] +- Fix gmeasure leak [119d4ce] +- Ignore new Ginkgo ProgressSignal goroutine in gleak [ba548e2] + +## Maintenance + +- Fixes crashes on newer Ruby 3 installations by upgrading github-pages gem dependency (#596) [12469a0] + + +## 1.20.2 + +## Fixes +- label specs that rely on remote access; bump timeout on short-circuit test to make it less flaky [35eeadf] +- gexec: allow more headroom for SIGABRT-related unit tests (#581) [5b78f40] +- Enable reading from a closed gbytes.Buffer (#575) [061fd26] + +## Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.1.5 to 2.1.6 (#583) [55d895b] +- Bump github.com/onsi/ginkgo/v2 from 2.1.4 to 2.1.5 (#582) [346de7c] + +## 1.20.1 + +## Fixes +- fix false positive gleaks when using ginkgo -p (#577) [cb46517] +- Fix typos in gomega_dsl.go (#569) [5f71ed2] +- don't panic on Eventually(nil), fixing #555 (#567) [9d1186f] +- vet optional description args in assertions, fixing #560 (#566) [8e37808] + +## Maintenance +- test: add new Go 1.19 to test matrix (#571) [40d7efe] +- Bump tzinfo from 1.2.9 to 1.2.10 in /docs (#564) [5f26371] + +## 1.20.0 + +## Features +- New [`gleak`](https://onsi.github.io/gomega/#codegleakcode-finding-leaked-goroutines) experimental goroutine leak detection package! (#538) [85ba7bc] +- New `BeComparableTo` matcher(#546) that uses `gocmp` to make comparisons [e77ea75] +- New `HaveExistingField` matcher (#553) [fd130e1] +- Document how to wrap Gomega (#539) [56714a4] + +## Fixes +- Support pointer receivers in HaveField; fixes #543 (#544) [8dab36e] + +## Maintenance +- Bump various dependencies: + - Upgrade to yaml.v3 (#556) [f5a83b1] + - Bump github/codeql-action from 1 to 2 (#549) [52f5adf] + - Bump github.com/google/go-cmp from 0.5.7 to 0.5.8 (#551) [5f3942d] + - Bump nokogiri from 1.13.4 to 1.13.6 in /docs (#554) [eb4b4c2] + - Use latest ginkgo (#535) [1c29028] + - Bump nokogiri from 1.13.3 to 1.13.4 in /docs (#541) [1ce84d5] + - Bump actions/setup-go from 2 to 3 (#540) [755485e] + - Bump nokogiri from 1.12.5 to 1.13.3 in /docs (#522) [4fbb0dc] + - Bump actions/checkout from 2 to 3 (#526) [ac49202] + +## 1.19.0 + +## Features +- New [`HaveEach`](https://onsi.github.io/gomega/#haveeachelement-interface) matcher to ensure that each and every element in an `array`, `slice`, or `map` satisfies the passed in matcher. (#523) [9fc2ae2] (#524) [c8ba582] +- Users can now wrap the `Gomega` interface to implement custom behavior on each assertion. (#521) [1f2e714] +- [`ContainElement`](https://onsi.github.io/gomega/#containelementelement-interface) now accepts an additional pointer argument. Elements that satisfy the matcher are stored in the pointer enabling developers to easily add subsequent, more detailed, assertions against the matching element. (#527) [1a4e27f] + +## Fixes +- update RELEASING instructions to match ginkgo [0917cde] +- Bump github.com/onsi/ginkgo/v2 from 2.0.0 to 2.1.3 (#519) [49ab4b0] +- Fix CVE-2021-38561 (#534) [f1b4456] +- Fix max number of samples in experiments on non-64-bit systems. (#528) [1c84497] +- Remove dependency on ginkgo v1.16.4 (#530) [4dea8d5] +- Fix for Go 1.18 (#532) [56d2a29] +- Document precendence of timeouts (#533) [b607941] + +## 1.18.1 + +## Fixes +- Add pointer support to HaveField matcher (#495) [79e41a3] + +## 1.18.0 + +## Features +- Docs now live on the master branch in the docs folder which will make for easier PRs. The docs also use Ginkgo 2.0's new docs html/css/js. [2570272] +- New HaveValue matcher can handle actuals that are either values (in which case they are passed on unscathed) or pointers (in which case they are indirected). [Docs here.](https://onsi.github.io/gomega/#working-with-values) (#485) [bdc087c] +- Gmeasure has been declared GA [360db9d] + +## Fixes +- Gomega now uses ioutil for Go 1.15 and lower (#492) - official support is only for the most recent two major versions of Go but this will unblock users who need to stay on older unsupported versions of Go. [c29c1c0] + +## Maintenace +- Remove Travis workflow (#491) [72e6040] +- Upgrade to Ginkgo 2.0.0 GA [f383637] +- chore: fix description of HaveField matcher (#487) [2b4b2c0] +- use tools.go to ensure Ginkgo cli dependencies are included [f58a52b] +- remove dockerfile and simplify github actions to match ginkgo's actions [3f8160d] + +## 1.17.0 + +### Features +- Add HaveField matcher [3a26311] +- add Error() assertions on the final error value of multi-return values (#480) [2f96943] +- separate out offsets and timeouts (#478) [18a4723] +- fix transformation error reporting (#479) [e001fab] +- allow transform functions to report errors (#472) [bf93408] + +### Fixes +Stop using deprecated ioutil package (#467) [07f405d] + +## 1.16.0 + +### Features +- feat: HaveHTTPStatus multiple expected values (#465) [aa69f1b] +- feat: HaveHTTPHeaderWithValue() matcher (#463) [dd83a96] +- feat: HaveHTTPBody matcher (#462) [504e1f2] +- feat: formatter for HTTP responses (#461) [e5b3157] + +## 1.15.0 + +### Fixes +The previous version (1.14.0) introduced a change to allow `Eventually` and `Consistently` to support functions that make assertions. This was accomplished by overriding the global fail handler when running the callbacks passed to `Eventually/Consistently` in order to capture any resulting errors. Issue #457 uncovered a flaw with this approach: when multiple `Eventually`s are running concurrently they race when overriding the singleton global fail handler. + +1.15.0 resolves this by requiring users who want to make assertions in `Eventually/Consistently` call backs to explicitly pass in a function that takes a `Gomega` as an argument. The passed-in `Gomega` instance can be used to make assertions. Any failures will cause `Eventually` to retry the callback. This cleaner interface avoids the issue of swapping out globals but comes at the cost of changing the contract introduced in v1.14.0. As such 1.15.0 introduces a breaking change with respect to 1.14.0 - however we expect that adoption of this feature in 1.14.0 remains limited. + +In addition, 1.15.0 cleans up some of Gomega's internals. Most users shouldn't notice any differences stemming from the refactoring that was made. + +## 1.14.0 + +### Features +- gmeasure.SamplingConfig now suppers a MinSamplingInterval [e94dbca] +- Eventually and Consistently support functions that make assertions [2f04e6e] + - Eventually and Consistently now allow their passed-in functions to make assertions. + These assertions must pass or the function is considered to have failed and is retried. + - Eventually and Consistently can now take functions with no return values. These implicitly return nil + if they contain no failed assertion. Otherwise they return an error wrapping the first assertion failure. This allows + these functions to be used with the Succeed() matcher. + - Introduce InterceptGomegaFailure - an analogue to InterceptGomegaFailures - that captures the first assertion failure + and halts execution in its passed-in callback. + +### Fixes +- Call Verify GHTTPWithGomega receiver funcs (#454) [496e6fd] +- Build a binary with an expected name (#446) [7356360] + +## 1.13.0 + +### Features +- gmeasure provides BETA support for benchmarking (#447) [8f2dfbf] +- Set consistently and eventually defaults on init (#443) [12eb778] + +## 1.12.0 + +### Features +- Add Satisfy() matcher (#437) [c548f31] +- tweak truncation message [3360b8c] +- Add format.GomegaStringer (#427) [cc80b6f] +- Add Clear() method to gbytes.Buffer [c3c0920] + +### Fixes +- Fix error message in BeNumericallyMatcher (#432) [09c074a] +- Bump github.com/onsi/ginkgo from 1.12.1 to 1.16.2 (#442) [e5f6ea0] +- Bump github.com/golang/protobuf from 1.4.3 to 1.5.2 (#431) [adae3bf] +- Bump golang.org/x/net (#441) [3275b35] + +## 1.11.0 + +### Features +- feature: add index to gstruct element func (#419) [334e00d] +- feat(gexec) Add CompileTest functions. Close #410 (#411) [47c613f] + +### Fixes +- Check more carefully for nils in WithTransform (#423) [3c60a15] +- fix: typo in Makefile [b82522a] +- Allow WithTransform function to accept a nil value (#422) [b75d2f2] +- fix: print value type for interface{} containers (#409) [f08e2dc] +- fix(BeElementOf): consistently flatten expected values [1fa9468] + +## 1.10.5 + +### Fixes +- fix: collections matchers should display type of expectation (#408) [6b4eb5a] +- fix(ContainElements): consistently flatten expected values [073b880] +- fix(ConsistOf): consistently flatten expected values [7266efe] + +## 1.10.4 + +### Fixes +- update golang net library to more recent version without vulnerability (#406) [817a8b9] +- Correct spelling: alloted -> allotted (#403) [0bae715] +- fix a panic in MessageWithDiff with long message (#402) [ea06b9b] + +## 1.10.3 + +### Fixes +- updates golang/x/net to fix vulnerability detected by snyk (#394) [c479356] + +## 1.10.2 + +### Fixes +- Add ExpectWithOffset, EventuallyWithOffset and ConsistentlyWithOffset to WithT (#391) [990941a] + +## 1.10.1 + +### Fixes +- Update dependencies (#389) [9f5eecd] + +## 1.10.0 + +### Features +- Add HaveHTTPStatusMatcher (#378) [f335c94] +- Changed matcher for content-type in VerifyJSONRepresenting (#377) [6024f5b] +- Make ghttp usable with x-unit style tests (#376) [c0be499] +- Implement PanicWith matcher (#381) [f8032b4] + +## 1.9.0 + +### Features +- Add ContainElements matcher (#370) [2f57380] +- Output missing and extra elements in ConsistOf failure message [a31eda7] +- Document method LargestMatching [7c5a280] + +## 1.8.1 + +### Fixes +- Fix unexpected MatchError() behaviour (#375) [8ae7b2f] + +## 1.8.0 + +### Features +- Allow optional description to be lazily evaluated function (#364) [bf64010] +- Support wrapped errors (#359) [0a981cb] + +## 1.7.1 + +### Fixes +- Bump go-yaml version to cover fixed ddos heuristic (#362) [95e431e] + +## 1.7.0 + +### Features +- export format property variables (#347) [642e5ba] + +### Fixes +- minor fix in the documentation of ExpectWithOffset (#358) [beea727] + +## 1.6.0 + +### Features + +- Display special chars on error [41e1b26] +- Add BeElementOf matcher [6a48b48] + +### Fixes + +- Remove duplication in XML matcher tests [cc1a6cb] +- Remove unnecessary conversions (#357) [7bf756a] +- Fixed import order (#353) [2e3b965] +- Added missing error handling in test (#355) [c98d3eb] +- Simplify code (#356) [0001ed9] +- Simplify code (#354) [0d9100e] +- Fixed typos (#352) [3f647c4] +- Add failure message tests to BeElementOf matcher [efe19c3] +- Update go-testcov untested sections [37ee382] +- Mark all uncovered files so go-testcov ./... works [53b150e] +- Reenable gotip in travis [5c249dc] +- Fix the typo of comment (#345) [f0e010e] +- Optimize contain_element_matcher [abeb93d] + + +## 1.5.0 + +### Features + +- Added MatchKeys matchers [8b909fc] + +### Fixes and Minor Improvements + +- Add type aliases to remove stuttering [03b0461] +- Don't run session_test.go on windows (#324) [5533ce8] + +## 1.4.3 + +### Fixes: + +- ensure file name and line numbers are correctly reported for XUnit [6fff58f] +- Fixed matcher for content-type (#305) [69d9b43] + +## 1.4.2 + +### Fixes: + +- Add go.mod and go.sum files to define the gomega go module [f3de367, a085d30] +- Work around go vet issue with Go v1.11 (#300) [40dd6ad] +- Better output when using with go XUnit-style tests, fixes #255 (#297) [29a4b97] +- Fix MatchJSON fail to parse json.RawMessage (#298) [ae19f1b] +- show threshold in failure message of BeNumericallyMatcher (#293) [4bbecc8] + +## 1.4.1 + +### Fixes: + +- Update documentation formatting and examples (#289) [9be8410] +- allow 'Receive' matcher to be used with concrete types (#286) [41673fd] +- Fix data race in ghttp server (#283) [7ac6b01] +- Travis badge should only show master [cc102ab] + +## 1.4.0 + +### Features +- Make string pretty diff user configurable (#273) [eb112ce, 649b44d] + +### Fixes +- Use httputil.DumpRequest to pretty-print unhandled requests (#278) [a4ff0fc, b7d1a52] +- fix typo floa32 > float32 (#272) [041ae3b, 6e33911] +- Fix link to documentation on adding your own matchers (#270) [bb2c830, fcebc62] +- Use setters and getters to avoid race condition (#262) [13057c3, a9c79f1] +- Avoid sending a signal if the process is not alive (#259) [b8043e5, 4fc1762] +- Improve message from AssignableToTypeOf when expected value is nil (#281) [9c1fb20] + +## 1.3.0 + +Improvements: + +- The `Equal` matcher matches byte slices more performantly. +- Improved how `MatchError` matches error strings. +- `MatchXML` ignores the order of xml node attributes. +- Improve support for XUnit style golang tests. ([#254](https://github.com/onsi/gomega/issues/254)) + +Bug Fixes: + +- Diff generation now handles multi-byte sequences correctly. +- Multiple goroutines can now call `gexec.Build` concurrently. + +## 1.2.0 + +Improvements: + +- Added `BeSent` which attempts to send a value down a channel and fails if the attempt blocks. Can be paired with `Eventually` to safely send a value down a channel with a timeout. +- `Ω`, `Expect`, `Eventually`, and `Consistently` now immediately `panic` if there is no registered fail handler. This is always a mistake that can hide failing tests. +- `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel. +- Added `HavePrefix` and `HaveSuffix` matchers. +- `ghttp` can now handle concurrent requests. +- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`. +- Improved `ghttp`'s behavior around failing assertions and panics: + - If a registered handler makes a failing assertion `ghttp` will return `500`. + - If a registered handler panics, `ghttp` will return `500` *and* fail the test. This is new behavior that may cause existing code to break. This code is almost certainly incorrect and creating a false positive. +- `ghttp` servers can take an `io.Writer`. `ghttp` will write a line to the writer when each request arrives. +- Added `WithTransform` matcher to allow munging input data before feeding into the relevant matcher +- Added boolean `And`, `Or`, and `Not` matchers to allow creating composite matchers +- Added `gbytes.TimeoutCloser`, `gbytes.TimeoutReader`, and `gbytes.TimeoutWriter` - these are convenience wrappers that timeout if the underlying Closer/Reader/Writer does not return within the alloted time. +- Added `gbytes.BufferReader` - this constructs a `gbytes.Buffer` that asynchronously reads the passed-in `io.Reader` into its buffer. + +Bug Fixes: +- gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure. +- `ContainElement` no longer bails if a passed-in matcher errors. + +## 1.0 (8/2/2014) + +No changes. Dropping "beta" from the version number. + +## 1.0.0-beta (7/8/2014) +Breaking Changes: + +- Changed OmegaMatcher interface. Instead of having `Match` return failure messages, two new methods `FailureMessage` and `NegatedFailureMessage` are called instead. +- Moved and renamed OmegaFailHandler to types.GomegaFailHandler and OmegaMatcher to types.GomegaMatcher. Any references to OmegaMatcher in any custom matchers will need to be changed to point to types.GomegaMatcher + +New Test-Support Features: + +- `ghttp`: supports testing http clients + - Provides a flexible fake http server + - Provides a collection of chainable http handlers that perform assertions. +- `gbytes`: supports making ordered assertions against streams of data + - Provides a `gbytes.Buffer` + - Provides a `Say` matcher to perform ordered assertions against output data +- `gexec`: supports testing external processes + - Provides support for building Go binaries + - Wraps and starts `exec.Cmd` commands + - Makes it easy to assert against stdout and stderr + - Makes it easy to send signals and wait for processes to exit + - Provides an `Exit` matcher to assert against exit code. + +DSL Changes: + +- `Eventually` and `Consistently` can accept `time.Duration` interval and polling inputs. +- The default timeouts for `Eventually` and `Consistently` are now configurable. + +New Matchers: + +- `ConsistOf`: order-independent assertion against the elements of an array/slice or keys of a map. +- `BeTemporally`: like `BeNumerically` but for `time.Time` +- `HaveKeyWithValue`: asserts a map has a given key with the given value. + +Updated Matchers: + +- `Receive` matcher can take a matcher as an argument and passes only if the channel under test receives an objet that satisfies the passed-in matcher. +- Matchers that implement `MatchMayChangeInTheFuture(actual interface{}) bool` can inform `Eventually` and/or `Consistently` when a match has no chance of changing status in the future. For example, `Receive` returns `false` when a channel is closed. + +Misc: + +- Start using semantic versioning +- Start maintaining changelog + +Major refactor: + +- Pull out Gomega's internal to `internal` diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/CONTRIBUTING.md b/cluster-autoscaler/vendor/github.com/onsi/gomega/CONTRIBUTING.md new file mode 100644 index 000000000000..0d7a099289e6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/CONTRIBUTING.md @@ -0,0 +1,14 @@ +# Contributing to Gomega + +Your contributions to Gomega are essential for its long-term maintenance and improvement. To make a contribution: + +- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code! +- Ensure adequate test coverage: + - Make sure to add appropriate unit tests + - Please run all tests locally (`ginkgo -r -p`) and make sure they go green before submitting the PR + - Please run following linter locally `go vet ./...` and make sure output does not contain any warnings +- Update the documentation. In addition to standard `godoc` comments Gomega has extensive documentation on the `gh-pages` branch. If relevant, please submit a docs PR to that branch alongside your code PR. + +If you're a committer, check out RELEASING.md to learn how to cut a release. + +Thanks for supporting Gomega! diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/LICENSE b/cluster-autoscaler/vendor/github.com/onsi/gomega/LICENSE new file mode 100644 index 000000000000..9415ee72c17f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/README.md b/cluster-autoscaler/vendor/github.com/onsi/gomega/README.md new file mode 100644 index 000000000000..d45a8c4e596d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/README.md @@ -0,0 +1,21 @@ +![Gomega: Ginkgo's Preferred Matcher Library](http://onsi.github.io/gomega/images/gomega.png) + +[![test](https://github.com/onsi/gomega/actions/workflows/test.yml/badge.svg)](https://github.com/onsi/gomega/actions/workflows/test.yml) + +Jump straight to the [docs](http://onsi.github.io/gomega/) to learn about Gomega, including a list of [all available matchers](http://onsi.github.io/gomega/#provided-matchers). + +If you have a question, comment, bug report, feature request, etc. please open a GitHub issue. + +## [Ginkgo](http://github.com/onsi/ginkgo): a BDD Testing Framework for Golang + +Learn more about Ginkgo [here](http://onsi.github.io/ginkgo/) + +## Community Matchers + +A collection of community matchers is available on the [wiki](https://github.com/onsi/gomega/wiki). + +## License + +Gomega is MIT-Licensed + +The `ConsistOf` matcher uses [goraph](https://github.com/amitkgupta/goraph) which is embedded in the source to simplify distribution. goraph has an MIT license. diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/RELEASING.md b/cluster-autoscaler/vendor/github.com/onsi/gomega/RELEASING.md new file mode 100644 index 000000000000..9973fff49e02 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/RELEASING.md @@ -0,0 +1,23 @@ +A Gomega release is a tagged sha and a GitHub release. To cut a release: + +1. Ensure CHANGELOG.md is up to date. + - Use + ```bash + LAST_VERSION=$(git tag --sort=version:refname | tail -n1) + CHANGES=$(git log --pretty=format:'- %s [%h]' HEAD...$LAST_VERSION) + echo -e "## NEXT\n\n$CHANGES\n\n### Features\n\n### Fixes\n\n### Maintenance\n\n$(cat CHANGELOG.md)" > CHANGELOG.md + ``` + to update the changelog + - Categorize the changes into + - Breaking Changes (requires a major version) + - New Features (minor version) + - Fixes (fix version) + - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact) +1. Update GOMEGA_VERSION in `gomega_dsl.go` +1. Commit, push, and release: + ``` + git commit -m "vM.m.p" + git push + gh release create "vM.m.p" + git fetch --tags origin master + ``` \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go new file mode 100644 index 000000000000..56bdd053bbcd --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go @@ -0,0 +1,506 @@ +/* +Gomega's format package pretty-prints objects. It explores input objects recursively and generates formatted, indented output with type information. +*/ + +// untested sections: 4 + +package format + +import ( + "context" + "fmt" + "reflect" + "strconv" + "strings" + "time" +) + +// Use MaxDepth to set the maximum recursion depth when printing deeply nested objects +var MaxDepth = uint(10) + +// MaxLength of the string representation of an object. +// If MaxLength is set to 0, the Object will not be truncated. +var MaxLength = 4000 + +/* +By default, all objects (even those that implement fmt.Stringer and fmt.GoStringer) are recursively inspected to generate output. + +Set UseStringerRepresentation = true to use GoString (for fmt.GoStringers) or String (for fmt.Stringer) instead. + +Note that GoString and String don't always have all the information you need to understand why a test failed! +*/ +var UseStringerRepresentation = false + +/* +Print the content of context objects. By default it will be suppressed. + +Set PrintContextObjects = true to enable printing of the context internals. +*/ +var PrintContextObjects = false + +// TruncatedDiff choose if we should display a truncated pretty diff or not +var TruncatedDiff = true + +// TruncateThreshold (default 50) specifies the maximum length string to print in string comparison assertion error +// messages. +var TruncateThreshold uint = 50 + +// CharactersAroundMismatchToInclude (default 5) specifies how many contextual characters should be printed before and +// after the first diff location in a truncated string assertion error message. +var CharactersAroundMismatchToInclude uint = 5 + +var contextType = reflect.TypeOf((*context.Context)(nil)).Elem() +var timeType = reflect.TypeOf(time.Time{}) + +// The default indentation string emitted by the format package +var Indent = " " + +var longFormThreshold = 20 + +// GomegaStringer allows for custom formating of objects for gomega. +type GomegaStringer interface { + // GomegaString will be used to custom format an object. + // It does not follow UseStringerRepresentation value and will always be called regardless. + // It also ignores the MaxLength value. + GomegaString() string +} + +/* +CustomFormatters can be registered with Gomega via RegisterCustomFormatter() +Any value to be rendered by Gomega is passed to each registered CustomFormatters. +The CustomFormatter signals that it will handle formatting the value by returning (formatted-string, true) +If the CustomFormatter does not want to handle the object it should return ("", false) + +Strings returned by CustomFormatters are not truncated +*/ +type CustomFormatter func(value interface{}) (string, bool) +type CustomFormatterKey uint + +var customFormatterKey CustomFormatterKey = 1 + +type customFormatterKeyPair struct { + CustomFormatter + CustomFormatterKey +} + +/* +RegisterCustomFormatter registers a CustomFormatter and returns a CustomFormatterKey + +You can call UnregisterCustomFormatter with the returned key to unregister the associated CustomFormatter +*/ +func RegisterCustomFormatter(customFormatter CustomFormatter) CustomFormatterKey { + key := customFormatterKey + customFormatterKey += 1 + customFormatters = append(customFormatters, customFormatterKeyPair{customFormatter, key}) + return key +} + +/* +UnregisterCustomFormatter unregisters a previously registered CustomFormatter. You should pass in the key returned by RegisterCustomFormatter +*/ +func UnregisterCustomFormatter(key CustomFormatterKey) { + formatters := []customFormatterKeyPair{} + for _, f := range customFormatters { + if f.CustomFormatterKey == key { + continue + } + formatters = append(formatters, f) + } + customFormatters = formatters +} + +var customFormatters = []customFormatterKeyPair{} + +/* +Generates a formatted matcher success/failure message of the form: + + Expected + + + + +If expected is omitted, then the message looks like: + + Expected + + +*/ +func Message(actual interface{}, message string, expected ...interface{}) string { + if len(expected) == 0 { + return fmt.Sprintf("Expected\n%s\n%s", Object(actual, 1), message) + } + return fmt.Sprintf("Expected\n%s\n%s\n%s", Object(actual, 1), message, Object(expected[0], 1)) +} + +/* + +Generates a nicely formatted matcher success / failure message + +Much like Message(...), but it attempts to pretty print diffs in strings + +Expected + : "...aaaaabaaaaa..." +to equal | + : "...aaaaazaaaaa..." + +*/ + +func MessageWithDiff(actual, message, expected string) string { + if TruncatedDiff && len(actual) >= int(TruncateThreshold) && len(expected) >= int(TruncateThreshold) { + diffPoint := findFirstMismatch(actual, expected) + formattedActual := truncateAndFormat(actual, diffPoint) + formattedExpected := truncateAndFormat(expected, diffPoint) + + spacesBeforeFormattedMismatch := findFirstMismatch(formattedActual, formattedExpected) + + tabLength := 4 + spaceFromMessageToActual := tabLength + len(": ") - len(message) + + paddingCount := spaceFromMessageToActual + spacesBeforeFormattedMismatch + if paddingCount < 0 { + return Message(formattedActual, message, formattedExpected) + } + + padding := strings.Repeat(" ", paddingCount) + "|" + return Message(formattedActual, message+padding, formattedExpected) + } + + actual = escapedWithGoSyntax(actual) + expected = escapedWithGoSyntax(expected) + + return Message(actual, message, expected) +} + +func escapedWithGoSyntax(str string) string { + withQuotes := fmt.Sprintf("%q", str) + return withQuotes[1 : len(withQuotes)-1] +} + +func truncateAndFormat(str string, index int) string { + leftPadding := `...` + rightPadding := `...` + + start := index - int(CharactersAroundMismatchToInclude) + if start < 0 { + start = 0 + leftPadding = "" + } + + // slice index must include the mis-matched character + lengthOfMismatchedCharacter := 1 + end := index + int(CharactersAroundMismatchToInclude) + lengthOfMismatchedCharacter + if end > len(str) { + end = len(str) + rightPadding = "" + + } + return fmt.Sprintf("\"%s\"", leftPadding+str[start:end]+rightPadding) +} + +func findFirstMismatch(a, b string) int { + aSlice := strings.Split(a, "") + bSlice := strings.Split(b, "") + + for index, str := range aSlice { + if index > len(bSlice)-1 { + return index + } + if str != bSlice[index] { + return index + } + } + + if len(b) > len(a) { + return len(a) + 1 + } + + return 0 +} + +const truncateHelpText = ` +Gomega truncated this representation as it exceeds 'format.MaxLength'. +Consider having the object provide a custom 'GomegaStringer' representation +or adjust the parameters in Gomega's 'format' package. + +Learn more here: https://onsi.github.io/gomega/#adjusting-output +` + +func truncateLongStrings(s string) string { + if MaxLength > 0 && len(s) > MaxLength { + var sb strings.Builder + for i, r := range s { + if i < MaxLength { + sb.WriteRune(r) + continue + } + break + } + + sb.WriteString("...\n") + sb.WriteString(truncateHelpText) + + return sb.String() + } + return s +} + +/* +Pretty prints the passed in object at the passed in indentation level. + +Object recurses into deeply nested objects emitting pretty-printed representations of their components. + +Modify format.MaxDepth to control how deep the recursion is allowed to go +Set format.UseStringerRepresentation to true to return object.GoString() or object.String() when available instead of +recursing into the object. + +Set PrintContextObjects to true to print the content of objects implementing context.Context +*/ +func Object(object interface{}, indentation uint) string { + indent := strings.Repeat(Indent, int(indentation)) + value := reflect.ValueOf(object) + commonRepresentation := "" + if err, ok := object.(error); ok { + commonRepresentation += "\n" + IndentString(err.Error(), indentation) + "\n" + indent + } + return fmt.Sprintf("%s<%s>: %s%s", indent, formatType(value), commonRepresentation, formatValue(value, indentation)) +} + +/* +IndentString takes a string and indents each line by the specified amount. +*/ +func IndentString(s string, indentation uint) string { + return indentString(s, indentation, true) +} + +func indentString(s string, indentation uint, indentFirstLine bool) string { + result := &strings.Builder{} + components := strings.Split(s, "\n") + indent := strings.Repeat(Indent, int(indentation)) + for i, component := range components { + if i > 0 || indentFirstLine { + result.WriteString(indent) + } + result.WriteString(component) + if i < len(components)-1 { + result.WriteString("\n") + } + } + + return result.String() +} + +func formatType(v reflect.Value) string { + switch v.Kind() { + case reflect.Invalid: + return "nil" + case reflect.Chan: + return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap()) + case reflect.Ptr: + return fmt.Sprintf("%s | 0x%x", v.Type(), v.Pointer()) + case reflect.Slice: + return fmt.Sprintf("%s | len:%d, cap:%d", v.Type(), v.Len(), v.Cap()) + case reflect.Map: + return fmt.Sprintf("%s | len:%d", v.Type(), v.Len()) + default: + return fmt.Sprintf("%s", v.Type()) + } +} + +func formatValue(value reflect.Value, indentation uint) string { + if indentation > MaxDepth { + return "..." + } + + if isNilValue(value) { + return "nil" + } + + if value.CanInterface() { + obj := value.Interface() + + // if a CustomFormatter handles this values, we'll go with that + for _, customFormatter := range customFormatters { + formatted, handled := customFormatter.CustomFormatter(obj) + // do not truncate a user-provided CustomFormatter() + if handled { + return indentString(formatted, indentation+1, false) + } + } + + // GomegaStringer will take precedence to other representations and disregards UseStringerRepresentation + if x, ok := obj.(GomegaStringer); ok { + // do not truncate a user-defined GomegaString() value + return indentString(x.GomegaString(), indentation+1, false) + } + + if UseStringerRepresentation { + switch x := obj.(type) { + case fmt.GoStringer: + return indentString(truncateLongStrings(x.GoString()), indentation+1, false) + case fmt.Stringer: + return indentString(truncateLongStrings(x.String()), indentation+1, false) + } + } + } + + if !PrintContextObjects { + if value.Type().Implements(contextType) && indentation > 1 { + return "" + } + } + + switch value.Kind() { + case reflect.Bool: + return fmt.Sprintf("%v", value.Bool()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return fmt.Sprintf("%v", value.Int()) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return fmt.Sprintf("%v", value.Uint()) + case reflect.Uintptr: + return fmt.Sprintf("0x%x", value.Uint()) + case reflect.Float32, reflect.Float64: + return fmt.Sprintf("%v", value.Float()) + case reflect.Complex64, reflect.Complex128: + return fmt.Sprintf("%v", value.Complex()) + case reflect.Chan: + return fmt.Sprintf("0x%x", value.Pointer()) + case reflect.Func: + return fmt.Sprintf("0x%x", value.Pointer()) + case reflect.Ptr: + return formatValue(value.Elem(), indentation) + case reflect.Slice: + return truncateLongStrings(formatSlice(value, indentation)) + case reflect.String: + return truncateLongStrings(formatString(value.String(), indentation)) + case reflect.Array: + return truncateLongStrings(formatSlice(value, indentation)) + case reflect.Map: + return truncateLongStrings(formatMap(value, indentation)) + case reflect.Struct: + if value.Type() == timeType && value.CanInterface() { + t, _ := value.Interface().(time.Time) + return t.Format(time.RFC3339Nano) + } + return truncateLongStrings(formatStruct(value, indentation)) + case reflect.Interface: + return formatInterface(value, indentation) + default: + if value.CanInterface() { + return truncateLongStrings(fmt.Sprintf("%#v", value.Interface())) + } + return truncateLongStrings(fmt.Sprintf("%#v", value)) + } +} + +func formatString(object interface{}, indentation uint) string { + if indentation == 1 { + s := fmt.Sprintf("%s", object) + components := strings.Split(s, "\n") + result := "" + for i, component := range components { + if i == 0 { + result += component + } else { + result += Indent + component + } + if i < len(components)-1 { + result += "\n" + } + } + + return result + } else { + return fmt.Sprintf("%q", object) + } +} + +func formatSlice(v reflect.Value, indentation uint) string { + if v.Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 && isPrintableString(string(v.Bytes())) { + return formatString(v.Bytes(), indentation) + } + + l := v.Len() + result := make([]string, l) + longest := 0 + for i := 0; i < l; i++ { + result[i] = formatValue(v.Index(i), indentation+1) + if len(result[i]) > longest { + longest = len(result[i]) + } + } + + if longest > longFormThreshold { + indenter := strings.Repeat(Indent, int(indentation)) + return fmt.Sprintf("[\n%s%s,\n%s]", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter) + } + return fmt.Sprintf("[%s]", strings.Join(result, ", ")) +} + +func formatMap(v reflect.Value, indentation uint) string { + l := v.Len() + result := make([]string, l) + + longest := 0 + for i, key := range v.MapKeys() { + value := v.MapIndex(key) + result[i] = fmt.Sprintf("%s: %s", formatValue(key, indentation+1), formatValue(value, indentation+1)) + if len(result[i]) > longest { + longest = len(result[i]) + } + } + + if longest > longFormThreshold { + indenter := strings.Repeat(Indent, int(indentation)) + return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter) + } + return fmt.Sprintf("{%s}", strings.Join(result, ", ")) +} + +func formatStruct(v reflect.Value, indentation uint) string { + t := v.Type() + + l := v.NumField() + result := []string{} + longest := 0 + for i := 0; i < l; i++ { + structField := t.Field(i) + fieldEntry := v.Field(i) + representation := fmt.Sprintf("%s: %s", structField.Name, formatValue(fieldEntry, indentation+1)) + result = append(result, representation) + if len(representation) > longest { + longest = len(representation) + } + } + if longest > longFormThreshold { + indenter := strings.Repeat(Indent, int(indentation)) + return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter) + } + return fmt.Sprintf("{%s}", strings.Join(result, ", ")) +} + +func formatInterface(v reflect.Value, indentation uint) string { + return fmt.Sprintf("<%s>%s", formatType(v.Elem()), formatValue(v.Elem(), indentation)) +} + +func isNilValue(a reflect.Value) bool { + switch a.Kind() { + case reflect.Invalid: + return true + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return a.IsNil() + } + + return false +} + +/* +Returns true when the string is entirely made of printable runes, false otherwise. +*/ +func isPrintableString(str string) bool { + for _, runeValue := range str { + if !strconv.IsPrint(runeValue) { + return false + } + } + return true +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go new file mode 100644 index 000000000000..872592bfbc37 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -0,0 +1,537 @@ +/* +Gomega is the Ginkgo BDD-style testing framework's preferred matcher library. + +The godoc documentation describes Gomega's API. More comprehensive documentation (with examples!) is available at http://onsi.github.io/gomega/ + +Gomega on Github: http://github.com/onsi/gomega + +Learn more about Ginkgo online: http://onsi.github.io/ginkgo + +Ginkgo on Github: http://github.com/onsi/ginkgo + +Gomega is MIT-Licensed +*/ +package gomega + +import ( + "errors" + "fmt" + "time" + + "github.com/onsi/gomega/internal" + "github.com/onsi/gomega/types" +) + +const GOMEGA_VERSION = "1.27.6" + +const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. +If you're using Ginkgo then you probably forgot to put your assertion in an It(). +Alternatively, you may have forgotten to register a fail handler with RegisterFailHandler() or RegisterTestingT(). +Depending on your vendoring solution you may be inadvertently importing gomega and subpackages (e.g. ghhtp, gexec,...) from different locations. +` + +// Gomega describes the essential Gomega DSL. This interface allows libraries +// to abstract between the standard package-level function implementations +// and alternatives like *WithT. +// +// The types in the top-level DSL have gotten a bit messy due to earlier deprecations that avoid stuttering +// and due to an accidental use of a concrete type (*WithT) in an earlier release. +// +// As of 1.15 both the WithT and Ginkgo variants of Gomega are implemented by the same underlying object +// however one (the Ginkgo variant) is exported as an interface (types.Gomega) whereas the other (the withT variant) +// is shared as a concrete type (*WithT, which is aliased to *internal.Gomega). 1.15 did not clean this mess up to ensure +// that declarations of *WithT in existing code are not broken by the upgrade to 1.15. +type Gomega = types.Gomega + +// DefaultGomega supplies the standard package-level implementation +var Default = Gomega(internal.NewGomega(internal.FetchDefaultDurationBundle())) + +// NewGomega returns an instance of Gomega wired into the passed-in fail handler. +// You generally don't need to use this when using Ginkgo - RegisterFailHandler will wire up the global gomega +// However creating a NewGomega with a custom fail handler can be useful in contexts where you want to use Gomega's +// rich ecosystem of matchers without causing a test to fail. For example, to aggregate a series of potential failures +// or for use in a non-test setting. +func NewGomega(fail types.GomegaFailHandler) Gomega { + return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithFailHandler(fail) +} + +// WithT wraps a *testing.T and provides `Expect`, `Eventually`, and `Consistently` methods. This allows you to leverage +// Gomega's rich ecosystem of matchers in standard `testing` test suites. +// +// Use `NewWithT` to instantiate a `WithT` +// +// As of 1.15 both the WithT and Ginkgo variants of Gomega are implemented by the same underlying object +// however one (the Ginkgo variant) is exported as an interface (types.Gomega) whereas the other (the withT variant) +// is shared as a concrete type (*WithT, which is aliased to *internal.Gomega). 1.15 did not clean this mess up to ensure +// that declarations of *WithT in existing code are not broken by the upgrade to 1.15. +type WithT = internal.Gomega + +// GomegaWithT is deprecated in favor of gomega.WithT, which does not stutter. +type GomegaWithT = WithT + +// inner is an interface that allows users to provide a wrapper around Default. The wrapper +// must implement the inner interface and return either the original Default or the result of +// a call to NewGomega(). +type inner interface { + Inner() Gomega +} + +func internalGomega(g Gomega) *internal.Gomega { + if v, ok := g.(inner); ok { + return v.Inner().(*internal.Gomega) + } + return g.(*internal.Gomega) +} + +// NewWithT takes a *testing.T and returns a `gomega.WithT` allowing you to use `Expect`, `Eventually`, and `Consistently` along with +// Gomega's rich ecosystem of matchers in standard `testing` test suits. +// +// func TestFarmHasCow(t *testing.T) { +// g := gomega.NewWithT(t) +// +// f := farm.New([]string{"Cow", "Horse"}) +// g.Expect(f.HasCow()).To(BeTrue(), "Farm should have cow") +// } +func NewWithT(t types.GomegaTestingT) *WithT { + return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithT(t) +} + +// NewGomegaWithT is deprecated in favor of gomega.NewWithT, which does not stutter. +var NewGomegaWithT = NewWithT + +// RegisterFailHandler connects Ginkgo to Gomega. When a matcher fails +// the fail handler passed into RegisterFailHandler is called. +func RegisterFailHandler(fail types.GomegaFailHandler) { + internalGomega(Default).ConfigureWithFailHandler(fail) +} + +// RegisterFailHandlerWithT is deprecated and will be removed in a future release. +// users should use RegisterFailHandler, or RegisterTestingT +func RegisterFailHandlerWithT(_ types.GomegaTestingT, fail types.GomegaFailHandler) { + fmt.Println("RegisterFailHandlerWithT is deprecated. Please use RegisterFailHandler or RegisterTestingT instead.") + internalGomega(Default).ConfigureWithFailHandler(fail) +} + +// RegisterTestingT connects Gomega to Golang's XUnit style +// Testing.T tests. It is now deprecated and you should use NewWithT() instead to get a fresh instance of Gomega for each test. +func RegisterTestingT(t types.GomegaTestingT) { + internalGomega(Default).ConfigureWithT(t) +} + +// InterceptGomegaFailures runs a given callback and returns an array of +// failure messages generated by any Gomega assertions within the callback. +// Execution continues after the first failure allowing users to collect all failures +// in the callback. +// +// This is most useful when testing custom matchers, but can also be used to check +// on a value using a Gomega assertion without causing a test failure. +func InterceptGomegaFailures(f func()) []string { + originalHandler := internalGomega(Default).Fail + failures := []string{} + internalGomega(Default).Fail = func(message string, callerSkip ...int) { + failures = append(failures, message) + } + defer func() { + internalGomega(Default).Fail = originalHandler + }() + f() + return failures +} + +// InterceptGomegaFailure runs a given callback and returns the first +// failure message generated by any Gomega assertions within the callback, wrapped in an error. +// +// The callback ceases execution as soon as the first failed assertion occurs, however Gomega +// does not register a failure with the FailHandler registered via RegisterFailHandler - it is up +// to the user to decide what to do with the returned error +func InterceptGomegaFailure(f func()) (err error) { + originalHandler := internalGomega(Default).Fail + internalGomega(Default).Fail = func(message string, callerSkip ...int) { + err = errors.New(message) + panic("stop execution") + } + + defer func() { + internalGomega(Default).Fail = originalHandler + if e := recover(); e != nil { + if err == nil { + panic(e) + } + } + }() + + f() + return err +} + +func ensureDefaultGomegaIsConfigured() { + if !internalGomega(Default).IsConfigured() { + panic(nilGomegaPanic) + } +} + +// Ω wraps an actual value allowing assertions to be made on it: +// +// Ω("foo").Should(Equal("foo")) +// +// If Ω is passed more than one argument it will pass the *first* argument to the matcher. +// All subsequent arguments will be required to be nil/zero. +// +// This is convenient if you want to make an assertion on a method/function that returns +// a value and an error - a common patter in Go. +// +// For example, given a function with signature: +// +// func MyAmazingThing() (int, error) +// +// Then: +// +// Ω(MyAmazingThing()).Should(Equal(3)) +// +// Will succeed only if `MyAmazingThing()` returns `(3, nil)` +// +// Ω and Expect are identical +func Ω(actual interface{}, extra ...interface{}) Assertion { + ensureDefaultGomegaIsConfigured() + return Default.Ω(actual, extra...) +} + +// Expect wraps an actual value allowing assertions to be made on it: +// +// Expect("foo").To(Equal("foo")) +// +// If Expect is passed more than one argument it will pass the *first* argument to the matcher. +// All subsequent arguments will be required to be nil/zero. +// +// This is convenient if you want to make an assertion on a method/function that returns +// a value and an error - a common pattern in Go. +// +// For example, given a function with signature: +// +// func MyAmazingThing() (int, error) +// +// Then: +// +// Expect(MyAmazingThing()).Should(Equal(3)) +// +// Will succeed only if `MyAmazingThing()` returns `(3, nil)` +// +// Expect and Ω are identical +func Expect(actual interface{}, extra ...interface{}) Assertion { + ensureDefaultGomegaIsConfigured() + return Default.Expect(actual, extra...) +} + +// ExpectWithOffset wraps an actual value allowing assertions to be made on it: +// +// ExpectWithOffset(1, "foo").To(Equal("foo")) +// +// Unlike `Expect` and `Ω`, `ExpectWithOffset` takes an additional integer argument +// that is used to modify the call-stack offset when computing line numbers. It is +// the same as `Expect(...).WithOffset`. +// +// This is most useful in helper functions that make assertions. If you want Gomega's +// error message to refer to the calling line in the test (as opposed to the line in the helper function) +// set the first argument of `ExpectWithOffset` appropriately. +func ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion { + ensureDefaultGomegaIsConfigured() + return Default.ExpectWithOffset(offset, actual, extra...) +} + +/* +Eventually enables making assertions on asynchronous behavior. + +Eventually checks that an assertion *eventually* passes. Eventually blocks when called and attempts an assertion periodically until it passes or a timeout occurs. Both the timeout and polling interval are configurable as optional arguments. +The first optional argument is the timeout (which defaults to 1s), the second is the polling interval (which defaults to 10ms). Both intervals can be specified as time.Duration, parsable duration strings or floats/integers (in which case they are interpreted as seconds). In addition an optional context.Context can be passed in - Eventually will keep trying until either the timeout epxires or the context is cancelled, whichever comes first. + +Eventually works with any Gomega compatible matcher and supports making assertions against three categories of actual value: + +**Category 1: Making Eventually assertions on values** + +There are several examples of values that can change over time. These can be passed in to Eventually and will be passed to the matcher repeatedly until a match occurs. For example: + + c := make(chan bool) + go DoStuff(c) + Eventually(c, "50ms").Should(BeClosed()) + +will poll the channel repeatedly until it is closed. In this example `Eventually` will block until either the specified timeout of 50ms has elapsed or the channel is closed, whichever comes first. + +Several Gomega libraries allow you to use Eventually in this way. For example, the gomega/gexec package allows you to block until a *gexec.Session exits successfully via: + + Eventually(session).Should(gexec.Exit(0)) + +And the gomega/gbytes package allows you to monitor a streaming *gbytes.Buffer until a given string is seen: + + Eventually(buffer).Should(gbytes.Say("hello there")) + +In these examples, both `session` and `buffer` are designed to be thread-safe when polled by the `Exit` and `Say` matchers. This is not true in general of most raw values, so while it is tempting to do something like: + + // THIS IS NOT THREAD-SAFE + var s *string + go mutateStringEventually(s) + Eventually(s).Should(Equal("I've changed")) + +this will trigger Go's race detector as the goroutine polling via Eventually will race over the value of s with the goroutine mutating the string. For cases like this you can use channels or introduce your own locking around s by passing Eventually a function. + +**Category 2: Make Eventually assertions on functions** + +Eventually can be passed functions that **return at least one value**. When configured this way, Eventually will poll the function repeatedly and pass the first returned value to the matcher. + +For example: + + Eventually(func() int { + return client.FetchCount() + }).Should(BeNumerically(">=", 17)) + + will repeatedly poll client.FetchCount until the BeNumerically matcher is satisfied. (Note that this example could have been written as Eventually(client.FetchCount).Should(BeNumerically(">=", 17))) + +If multiple values are returned by the function, Eventually will pass the first value to the matcher and require that all others are zero-valued. This allows you to pass Eventually a function that returns a value and an error - a common pattern in Go. + +For example, consider a method that returns a value and an error: + + func FetchFromDB() (string, error) + +Then + + Eventually(FetchFromDB).Should(Equal("got it")) + +will pass only if and when the returned error is nil *and* the returned string satisfies the matcher. + +Eventually can also accept functions that take arguments, however you must provide those arguments using .WithArguments(). For example, consider a function that takes a user-id and makes a network request to fetch a full name: + + func FetchFullName(userId int) (string, error) + +You can poll this function like so: + + Eventually(FetchFullName).WithArguments(1138).Should(Equal("Wookie")) + +It is important to note that the function passed into Eventually is invoked *synchronously* when polled. Eventually does not (in fact, it cannot) kill the function if it takes longer to return than Eventually's configured timeout. A common practice here is to use a context. Here's an example that combines Ginkgo's spec timeout support with Eventually: + + It("fetches the correct count", func(ctx SpecContext) { + Eventually(ctx, func() int { + return client.FetchCount(ctx, "/users") + }).Should(BeNumerically(">=", 17)) + }, SpecTimeout(time.Second)) + +you an also use Eventually().WithContext(ctx) to pass in the context. Passed-in contexts play nicely with paseed-in arguments as long as the context appears first. You can rewrite the above example as: + + It("fetches the correct count", func(ctx SpecContext) { + Eventually(client.FetchCount).WithContext(ctx).WithArguments("/users").Should(BeNumerically(">=", 17)) + }, SpecTimeout(time.Second)) + +Either way the context passd to Eventually is also passed to the underlying funciton. Now, when Ginkgo cancels the context both the FetchCount client and Gomega will be informed and can exit. + +**Category 3: Making assertions _in_ the function passed into Eventually** + +When testing complex systems it can be valuable to assert that a _set_ of assertions passes Eventually. Eventually supports this by accepting functions that take a single Gomega argument and return zero or more values. + +Here's an example that makes some assertions and returns a value and error: + + Eventually(func(g Gomega) (Widget, error) { + ids, err := client.FetchIDs() + g.Expect(err).NotTo(HaveOccurred()) + g.Expect(ids).To(ContainElement(1138)) + return client.FetchWidget(1138) + }).Should(Equal(expectedWidget)) + +will pass only if all the assertions in the polled function pass and the return value satisfied the matcher. + +Eventually also supports a special case polling function that takes a single Gomega argument and returns no values. Eventually assumes such a function is making assertions and is designed to work with the Succeed matcher to validate that all assertions have passed. +For example: + + Eventually(func(g Gomega) { + model, err := client.Find(1138) + g.Expect(err).NotTo(HaveOccurred()) + g.Expect(model.Reticulate()).To(Succeed()) + g.Expect(model.IsReticulated()).To(BeTrue()) + g.Expect(model.Save()).To(Succeed()) + }).Should(Succeed()) + +will rerun the function until all assertions pass. + +You can also pass additional arugments to functions that take a Gomega. The only rule is that the Gomega argument must be first. If you also want to pass the context attached to Eventually you must ensure that is the second argument. For example: + + Eventually(func(g Gomega, ctx context.Context, path string, expected ...string){ + tok, err := client.GetToken(ctx) + g.Expect(err).NotTo(HaveOccurred()) + + elements, err := client.Fetch(ctx, tok, path) + g.Expect(err).NotTo(HaveOccurred()) + g.Expect(elements).To(ConsistOf(expected)) + }).WithContext(ctx).WithArguments("/names", "Joe", "Jane", "Sam").Should(Succeed()) + +You can ensure that you get a number of consecutive successful tries before succeeding using `MustPassRepeatedly(int)`. For Example: + + int count := 0 + Eventually(func() bool { + count++ + return count > 2 + }).MustPassRepeatedly(2).Should(BeTrue()) + // Because we had to wait for 2 calls that returned true + Expect(count).To(Equal(3)) + +Finally, in addition to passing timeouts and a context to Eventually you can be more explicit with Eventually's chaining configuration methods: + + Eventually(..., "1s", "2s", ctx).Should(...) + +is equivalent to + + Eventually(...).WithTimeout(time.Second).WithPolling(2*time.Second).WithContext(ctx).Should(...) +*/ +func Eventually(actualOrCtx interface{}, args ...interface{}) AsyncAssertion { + ensureDefaultGomegaIsConfigured() + return Default.Eventually(actualOrCtx, args...) +} + +// EventuallyWithOffset operates like Eventually but takes an additional +// initial argument to indicate an offset in the call stack. This is useful when building helper +// functions that contain matchers. To learn more, read about `ExpectWithOffset`. +// +// `EventuallyWithOffset` is the same as `Eventually(...).WithOffset`. +// +// `EventuallyWithOffset` specifying a timeout interval (and an optional polling interval) are +// the same as `Eventually(...).WithOffset(...).WithTimeout` or +// `Eventually(...).WithOffset(...).WithTimeout(...).WithPolling`. +func EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion { + ensureDefaultGomegaIsConfigured() + return Default.EventuallyWithOffset(offset, actualOrCtx, args...) +} + +/* +Consistently, like Eventually, enables making assertions on asynchronous behavior. + +Consistently blocks when called for a specified duration. During that duration Consistently repeatedly polls its matcher and ensures that it is satisfied. If the matcher is consistently satisfied, then Consistently will pass. Otherwise Consistently will fail. + +Both the total waiting duration and the polling interval are configurable as optional arguments. The first optional argument is the duration that Consistently will run for (defaults to 100ms), and the second argument is the polling interval (defaults to 10ms). As with Eventually, these intervals can be passed in as time.Duration, parsable duration strings or an integer or float number of seconds. You can also pass in an optional context.Context - Consistently will exit early (with a failure) if the context is cancelled before the waiting duration expires. + +Consistently accepts the same three categories of actual as Eventually, check the Eventually docs to learn more. + +Consistently is useful in cases where you want to assert that something *does not happen* for a period of time. For example, you may want to assert that a goroutine does *not* send data down a channel. In this case you could write: + + Consistently(channel, "200ms").ShouldNot(Receive()) + +This will block for 200 milliseconds and repeatedly check the channel and ensure nothing has been received. +*/ +func Consistently(actualOrCtx interface{}, args ...interface{}) AsyncAssertion { + ensureDefaultGomegaIsConfigured() + return Default.Consistently(actualOrCtx, args...) +} + +// ConsistentlyWithOffset operates like Consistently but takes an additional +// initial argument to indicate an offset in the call stack. This is useful when building helper +// functions that contain matchers. To learn more, read about `ExpectWithOffset`. +// +// `ConsistentlyWithOffset` is the same as `Consistently(...).WithOffset` and +// optional `WithTimeout` and `WithPolling`. +func ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion { + ensureDefaultGomegaIsConfigured() + return Default.ConsistentlyWithOffset(offset, actualOrCtx, args...) +} + +/* +StopTrying can be used to signal to Eventually and Consistentlythat they should abort and stop trying. This always results in a failure of the assertion - and the failure message is the content of the StopTrying signal. + +You can send the StopTrying signal by either returning StopTrying("message") as an error from your passed-in function _or_ by calling StopTrying("message").Now() to trigger a panic and end execution. + +You can also wrap StopTrying around an error with `StopTrying("message").Wrap(err)` and can attach additional objects via `StopTrying("message").Attach("description", object). When rendered, the signal will include the wrapped error and any attached objects rendered using Gomega's default formatting. + +Here are a couple of examples. This is how you might use StopTrying() as an error to signal that Eventually should stop: + + playerIndex, numPlayers := 0, 11 + Eventually(func() (string, error) { + if playerIndex == numPlayers { + return "", StopTrying("no more players left") + } + name := client.FetchPlayer(playerIndex) + playerIndex += 1 + return name, nil + }).Should(Equal("Patrick Mahomes")) + +And here's an example where `StopTrying().Now()` is called to halt execution immediately: + + Eventually(func() []string { + names, err := client.FetchAllPlayers() + if err == client.IRRECOVERABLE_ERROR { + StopTrying("Irrecoverable error occurred").Wrap(err).Now() + } + return names + }).Should(ContainElement("Patrick Mahomes")) +*/ +var StopTrying = internal.StopTrying + +/* +TryAgainAfter() allows you to adjust the polling interval for the _next_ iteration of `Eventually` or `Consistently`. Like `StopTrying` you can either return `TryAgainAfter` as an error or trigger it immedieately with `.Now()` + +When `TryAgainAfter(` is triggered `Eventually` and `Consistently` will wait for that duration. If a timeout occurs before the next poll is triggered both `Eventually` and `Consistently` will always fail with the content of the TryAgainAfter message. As with StopTrying you can `.Wrap()` and error and `.Attach()` additional objects to `TryAgainAfter`. +*/ +var TryAgainAfter = internal.TryAgainAfter + +/* +PollingSignalError is the error returned by StopTrying() and TryAgainAfter() +*/ +type PollingSignalError = internal.PollingSignalError + +// SetDefaultEventuallyTimeout sets the default timeout duration for Eventually. Eventually will repeatedly poll your condition until it succeeds, or until this timeout elapses. +func SetDefaultEventuallyTimeout(t time.Duration) { + Default.SetDefaultEventuallyTimeout(t) +} + +// SetDefaultEventuallyPollingInterval sets the default polling interval for Eventually. +func SetDefaultEventuallyPollingInterval(t time.Duration) { + Default.SetDefaultEventuallyPollingInterval(t) +} + +// SetDefaultConsistentlyDuration sets the default duration for Consistently. Consistently will verify that your condition is satisfied for this long. +func SetDefaultConsistentlyDuration(t time.Duration) { + Default.SetDefaultConsistentlyDuration(t) +} + +// SetDefaultConsistentlyPollingInterval sets the default polling interval for Consistently. +func SetDefaultConsistentlyPollingInterval(t time.Duration) { + Default.SetDefaultConsistentlyPollingInterval(t) +} + +// AsyncAssertion is returned by Eventually and Consistently and polls the actual value passed into Eventually against +// the matcher passed to the Should and ShouldNot methods. +// +// Both Should and ShouldNot take a variadic optionalDescription argument. +// This argument allows you to make your failure messages more descriptive. +// If a single argument of type `func() string` is passed, this function will be lazily evaluated if a failure occurs +// and the returned string is used to annotate the failure message. +// Otherwise, this argument is passed on to fmt.Sprintf() and then used to annotate the failure message. +// +// Both Should and ShouldNot return a boolean that is true if the assertion passed and false if it failed. +// +// Example: +// +// Eventually(myChannel).Should(Receive(), "Something should have come down the pipe.") +// Consistently(myChannel).ShouldNot(Receive(), func() string { return "Nothing should have come down the pipe." }) +type AsyncAssertion = types.AsyncAssertion + +// GomegaAsyncAssertion is deprecated in favor of AsyncAssertion, which does not stutter. +type GomegaAsyncAssertion = types.AsyncAssertion + +// Assertion is returned by Ω and Expect and compares the actual value to the matcher +// passed to the Should/ShouldNot and To/ToNot/NotTo methods. +// +// Typically Should/ShouldNot are used with Ω and To/ToNot/NotTo are used with Expect +// though this is not enforced. +// +// All methods take a variadic optionalDescription argument. +// This argument allows you to make your failure messages more descriptive. +// If a single argument of type `func() string` is passed, this function will be lazily evaluated if a failure occurs +// and the returned string is used to annotate the failure message. +// Otherwise, this argument is passed on to fmt.Sprintf() and then used to annotate the failure message. +// +// All methods return a bool that is true if the assertion passed and false if it failed. +// +// Example: +// +// Ω(farm.HasCow()).Should(BeTrue(), "Farm %v should have a cow", farm) +type Assertion = types.Assertion + +// GomegaAssertion is deprecated in favor of Assertion, which does not stutter. +type GomegaAssertion = types.Assertion + +// OmegaMatcher is deprecated in favor of the better-named and better-organized types.GomegaMatcher but sticks around to support existing code that uses it +type OmegaMatcher = types.GomegaMatcher diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/assertion.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/assertion.go new file mode 100644 index 000000000000..08356a610bb5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/assertion.go @@ -0,0 +1,161 @@ +package internal + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +type Assertion struct { + actuals []interface{} // actual value plus all extra values + actualIndex int // value to pass to the matcher + vet vetinari // the vet to call before calling Gomega matcher + offset int + g *Gomega +} + +// ...obligatory discworld reference, as "vetineer" doesn't sound ... quite right. +type vetinari func(assertion *Assertion, optionalDescription ...interface{}) bool + +func NewAssertion(actualInput interface{}, g *Gomega, offset int, extra ...interface{}) *Assertion { + return &Assertion{ + actuals: append([]interface{}{actualInput}, extra...), + actualIndex: 0, + vet: (*Assertion).vetActuals, + offset: offset, + g: g, + } +} + +func (assertion *Assertion) WithOffset(offset int) types.Assertion { + assertion.offset = offset + return assertion +} + +func (assertion *Assertion) Error() types.Assertion { + return &Assertion{ + actuals: assertion.actuals, + actualIndex: len(assertion.actuals) - 1, + vet: (*Assertion).vetError, + offset: assertion.offset, + g: assertion.g, + } +} + +func (assertion *Assertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Assertion", optionalDescription...) + return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, true, optionalDescription...) +} + +func (assertion *Assertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Assertion", optionalDescription...) + return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...) +} + +func (assertion *Assertion) To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Assertion", optionalDescription...) + return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, true, optionalDescription...) +} + +func (assertion *Assertion) ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Assertion", optionalDescription...) + return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...) +} + +func (assertion *Assertion) NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Assertion", optionalDescription...) + return assertion.vet(assertion, optionalDescription...) && assertion.match(matcher, false, optionalDescription...) +} + +func (assertion *Assertion) buildDescription(optionalDescription ...interface{}) string { + switch len(optionalDescription) { + case 0: + return "" + case 1: + if describe, ok := optionalDescription[0].(func() string); ok { + return describe() + "\n" + } + } + return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n" +} + +func (assertion *Assertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool { + actualInput := assertion.actuals[assertion.actualIndex] + matches, err := matcher.Match(actualInput) + assertion.g.THelper() + if err != nil { + description := assertion.buildDescription(optionalDescription...) + assertion.g.Fail(description+err.Error(), 2+assertion.offset) + return false + } + if matches != desiredMatch { + var message string + if desiredMatch { + message = matcher.FailureMessage(actualInput) + } else { + message = matcher.NegatedFailureMessage(actualInput) + } + description := assertion.buildDescription(optionalDescription...) + assertion.g.Fail(description+message, 2+assertion.offset) + return false + } + + return true +} + +// vetActuals vets the actual values, with the (optional) exception of a +// specific value, such as the first value in case non-error assertions, or the +// last value in case of Error()-based assertions. +func (assertion *Assertion) vetActuals(optionalDescription ...interface{}) bool { + success, message := vetActuals(assertion.actuals, assertion.actualIndex) + if success { + return true + } + + description := assertion.buildDescription(optionalDescription...) + assertion.g.THelper() + assertion.g.Fail(description+message, 2+assertion.offset) + return false +} + +// vetError vets the actual values, except for the final error value, in case +// the final error value is non-zero. Otherwise, it doesn't vet the actual +// values, as these are allowed to take on any values unless there is a non-zero +// error value. +func (assertion *Assertion) vetError(optionalDescription ...interface{}) bool { + if err := assertion.actuals[assertion.actualIndex]; err != nil { + // Go error result idiom: all other actual values must be zero values. + return assertion.vetActuals(optionalDescription...) + } + return true +} + +// vetActuals vets a slice of actual values, optionally skipping a particular +// value slice element, such as the first or last value slice element. +func vetActuals(actuals []interface{}, skipIndex int) (bool, string) { + for i, actual := range actuals { + if i == skipIndex { + continue + } + if actual != nil { + zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface() + if !reflect.DeepEqual(zeroValue, actual) { + var message string + if err, ok := actual.(error); ok { + message = fmt.Sprintf("Unexpected error: %s\n%s", err, format.Object(err, 1)) + } else { + message = fmt.Sprintf("Unexpected non-nil/non-zero argument at index %d:\n\t<%T>: %#v", i, actual, actual) + } + return false, message + } + } + } + return true, "" +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/async_assertion.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/async_assertion.go new file mode 100644 index 000000000000..1188b0bce37f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/async_assertion.go @@ -0,0 +1,571 @@ +package internal + +import ( + "context" + "errors" + "fmt" + "reflect" + "runtime" + "sync" + "time" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +var errInterface = reflect.TypeOf((*error)(nil)).Elem() +var gomegaType = reflect.TypeOf((*types.Gomega)(nil)).Elem() +var contextType = reflect.TypeOf(new(context.Context)).Elem() + +type formattedGomegaError interface { + FormattedGomegaError() string +} + +type asyncPolledActualError struct { + message string +} + +func (err *asyncPolledActualError) Error() string { + return err.message +} + +func (err *asyncPolledActualError) FormattedGomegaError() string { + return err.message +} + +type contextWithAttachProgressReporter interface { + AttachProgressReporter(func() string) func() +} + +type asyncGomegaHaltExecutionError struct{} + +func (a asyncGomegaHaltExecutionError) GinkgoRecoverShouldIgnoreThisPanic() {} +func (a asyncGomegaHaltExecutionError) Error() string { + return `An assertion has failed in a goroutine. You should call + + defer GinkgoRecover() + +at the top of the goroutine that caused this panic. This will allow Ginkgo and Gomega to correctly capture and manage this panic.` +} + +type AsyncAssertionType uint + +const ( + AsyncAssertionTypeEventually AsyncAssertionType = iota + AsyncAssertionTypeConsistently +) + +func (at AsyncAssertionType) String() string { + switch at { + case AsyncAssertionTypeEventually: + return "Eventually" + case AsyncAssertionTypeConsistently: + return "Consistently" + } + return "INVALID ASYNC ASSERTION TYPE" +} + +type AsyncAssertion struct { + asyncType AsyncAssertionType + + actualIsFunc bool + actual interface{} + argsToForward []interface{} + + timeoutInterval time.Duration + pollingInterval time.Duration + mustPassRepeatedly int + ctx context.Context + offset int + g *Gomega +} + +func NewAsyncAssertion(asyncType AsyncAssertionType, actualInput interface{}, g *Gomega, timeoutInterval time.Duration, pollingInterval time.Duration, mustPassRepeatedly int, ctx context.Context, offset int) *AsyncAssertion { + out := &AsyncAssertion{ + asyncType: asyncType, + timeoutInterval: timeoutInterval, + pollingInterval: pollingInterval, + mustPassRepeatedly: mustPassRepeatedly, + offset: offset, + ctx: ctx, + g: g, + } + + out.actual = actualInput + if actualInput != nil && reflect.TypeOf(actualInput).Kind() == reflect.Func { + out.actualIsFunc = true + } + + return out +} + +func (assertion *AsyncAssertion) WithOffset(offset int) types.AsyncAssertion { + assertion.offset = offset + return assertion +} + +func (assertion *AsyncAssertion) WithTimeout(interval time.Duration) types.AsyncAssertion { + assertion.timeoutInterval = interval + return assertion +} + +func (assertion *AsyncAssertion) WithPolling(interval time.Duration) types.AsyncAssertion { + assertion.pollingInterval = interval + return assertion +} + +func (assertion *AsyncAssertion) Within(timeout time.Duration) types.AsyncAssertion { + assertion.timeoutInterval = timeout + return assertion +} + +func (assertion *AsyncAssertion) ProbeEvery(interval time.Duration) types.AsyncAssertion { + assertion.pollingInterval = interval + return assertion +} + +func (assertion *AsyncAssertion) WithContext(ctx context.Context) types.AsyncAssertion { + assertion.ctx = ctx + return assertion +} + +func (assertion *AsyncAssertion) WithArguments(argsToForward ...interface{}) types.AsyncAssertion { + assertion.argsToForward = argsToForward + return assertion +} + +func (assertion *AsyncAssertion) MustPassRepeatedly(count int) types.AsyncAssertion { + assertion.mustPassRepeatedly = count + return assertion +} + +func (assertion *AsyncAssertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Asynchronous assertion", optionalDescription...) + return assertion.match(matcher, true, optionalDescription...) +} + +func (assertion *AsyncAssertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool { + assertion.g.THelper() + vetOptionalDescription("Asynchronous assertion", optionalDescription...) + return assertion.match(matcher, false, optionalDescription...) +} + +func (assertion *AsyncAssertion) buildDescription(optionalDescription ...interface{}) string { + switch len(optionalDescription) { + case 0: + return "" + case 1: + if describe, ok := optionalDescription[0].(func() string); ok { + return describe() + "\n" + } + } + return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n" +} + +func (assertion *AsyncAssertion) processReturnValues(values []reflect.Value) (interface{}, error) { + if len(values) == 0 { + return nil, &asyncPolledActualError{ + message: fmt.Sprintf("The function passed to %s did not return any values", assertion.asyncType), + } + } + + actual := values[0].Interface() + if _, ok := AsPollingSignalError(actual); ok { + return actual, actual.(error) + } + + var err error + for i, extraValue := range values[1:] { + extra := extraValue.Interface() + if extra == nil { + continue + } + if _, ok := AsPollingSignalError(extra); ok { + return actual, extra.(error) + } + extraType := reflect.TypeOf(extra) + zero := reflect.Zero(extraType).Interface() + if reflect.DeepEqual(extra, zero) { + continue + } + if i == len(values)-2 && extraType.Implements(errInterface) { + err = extra.(error) + } + if err == nil { + err = &asyncPolledActualError{ + message: fmt.Sprintf("The function passed to %s had an unexpected non-nil/non-zero return value at index %d:\n%s", assertion.asyncType, i+1, format.Object(extra, 1)), + } + } + } + + return actual, err +} + +func (assertion *AsyncAssertion) invalidFunctionError(t reflect.Type) error { + return fmt.Errorf(`The function passed to %s had an invalid signature of %s. Functions passed to %s must either: + + (a) have return values or + (b) take a Gomega interface as their first argument and use that Gomega instance to make assertions. + +You can learn more at https://onsi.github.io/gomega/#eventually +`, assertion.asyncType, t, assertion.asyncType) +} + +func (assertion *AsyncAssertion) noConfiguredContextForFunctionError() error { + return fmt.Errorf(`The function passed to %s requested a context.Context, but no context has been provided. Please pass one in using %s().WithContext(). + +You can learn more at https://onsi.github.io/gomega/#eventually +`, assertion.asyncType, assertion.asyncType) +} + +func (assertion *AsyncAssertion) argumentMismatchError(t reflect.Type, numProvided int) error { + have := "have" + if numProvided == 1 { + have = "has" + } + return fmt.Errorf(`The function passed to %s has signature %s takes %d arguments but %d %s been provided. Please use %s().WithArguments() to pass the corect set of arguments. + +You can learn more at https://onsi.github.io/gomega/#eventually +`, assertion.asyncType, t, t.NumIn(), numProvided, have, assertion.asyncType) +} + +func (assertion *AsyncAssertion) invalidMustPassRepeatedlyError(reason string) error { + return fmt.Errorf(`Invalid use of MustPassRepeatedly with %s %s + +You can learn more at https://onsi.github.io/gomega/#eventually +`, assertion.asyncType, reason) +} + +func (assertion *AsyncAssertion) buildActualPoller() (func() (interface{}, error), error) { + if !assertion.actualIsFunc { + return func() (interface{}, error) { return assertion.actual, nil }, nil + } + actualValue := reflect.ValueOf(assertion.actual) + actualType := reflect.TypeOf(assertion.actual) + numIn, numOut, isVariadic := actualType.NumIn(), actualType.NumOut(), actualType.IsVariadic() + + if numIn == 0 && numOut == 0 { + return nil, assertion.invalidFunctionError(actualType) + } + takesGomega, takesContext := false, false + if numIn > 0 { + takesGomega, takesContext = actualType.In(0).Implements(gomegaType), actualType.In(0).Implements(contextType) + } + if takesGomega && numIn > 1 && actualType.In(1).Implements(contextType) { + takesContext = true + } + if takesContext && len(assertion.argsToForward) > 0 && reflect.TypeOf(assertion.argsToForward[0]).Implements(contextType) { + takesContext = false + } + if !takesGomega && numOut == 0 { + return nil, assertion.invalidFunctionError(actualType) + } + if takesContext && assertion.ctx == nil { + return nil, assertion.noConfiguredContextForFunctionError() + } + + var assertionFailure error + inValues := []reflect.Value{} + if takesGomega { + inValues = append(inValues, reflect.ValueOf(NewGomega(assertion.g.DurationBundle).ConfigureWithFailHandler(func(message string, callerSkip ...int) { + skip := 0 + if len(callerSkip) > 0 { + skip = callerSkip[0] + } + _, file, line, _ := runtime.Caller(skip + 1) + assertionFailure = &asyncPolledActualError{ + message: fmt.Sprintf("The function passed to %s failed at %s:%d with:\n%s", assertion.asyncType, file, line, message), + } + // we throw an asyncGomegaHaltExecutionError so that defer GinkgoRecover() can catch this error if the user makes an assertion in a goroutine + panic(asyncGomegaHaltExecutionError{}) + }))) + } + if takesContext { + inValues = append(inValues, reflect.ValueOf(assertion.ctx)) + } + for _, arg := range assertion.argsToForward { + inValues = append(inValues, reflect.ValueOf(arg)) + } + + if !isVariadic && numIn != len(inValues) { + return nil, assertion.argumentMismatchError(actualType, len(inValues)) + } else if isVariadic && len(inValues) < numIn-1 { + return nil, assertion.argumentMismatchError(actualType, len(inValues)) + } + + if assertion.mustPassRepeatedly != 1 && assertion.asyncType != AsyncAssertionTypeEventually { + return nil, assertion.invalidMustPassRepeatedlyError("it can only be used with Eventually") + } + if assertion.mustPassRepeatedly < 1 { + return nil, assertion.invalidMustPassRepeatedlyError("parameter can't be < 1") + } + + return func() (actual interface{}, err error) { + var values []reflect.Value + assertionFailure = nil + defer func() { + if numOut == 0 && takesGomega { + actual = assertionFailure + } else { + actual, err = assertion.processReturnValues(values) + _, isAsyncError := AsPollingSignalError(err) + if assertionFailure != nil && !isAsyncError { + err = assertionFailure + } + } + if e := recover(); e != nil { + if _, isAsyncError := AsPollingSignalError(e); isAsyncError { + err = e.(error) + } else if assertionFailure == nil { + panic(e) + } + } + }() + values = actualValue.Call(inValues) + return + }, nil +} + +func (assertion *AsyncAssertion) afterTimeout() <-chan time.Time { + if assertion.timeoutInterval >= 0 { + return time.After(assertion.timeoutInterval) + } + + if assertion.asyncType == AsyncAssertionTypeConsistently { + return time.After(assertion.g.DurationBundle.ConsistentlyDuration) + } else { + if assertion.ctx == nil { + return time.After(assertion.g.DurationBundle.EventuallyTimeout) + } else { + return nil + } + } +} + +func (assertion *AsyncAssertion) afterPolling() <-chan time.Time { + if assertion.pollingInterval >= 0 { + return time.After(assertion.pollingInterval) + } + if assertion.asyncType == AsyncAssertionTypeConsistently { + return time.After(assertion.g.DurationBundle.ConsistentlyPollingInterval) + } else { + return time.After(assertion.g.DurationBundle.EventuallyPollingInterval) + } +} + +func (assertion *AsyncAssertion) matcherSaysStopTrying(matcher types.GomegaMatcher, value interface{}) bool { + if assertion.actualIsFunc || types.MatchMayChangeInTheFuture(matcher, value) { + return false + } + return true +} + +func (assertion *AsyncAssertion) pollMatcher(matcher types.GomegaMatcher, value interface{}) (matches bool, err error) { + defer func() { + if e := recover(); e != nil { + if _, isAsyncError := AsPollingSignalError(e); isAsyncError { + err = e.(error) + } else { + panic(e) + } + } + }() + + matches, err = matcher.Match(value) + + return +} + +func (assertion *AsyncAssertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool { + timer := time.Now() + timeout := assertion.afterTimeout() + lock := sync.Mutex{} + + var matches, hasLastValidActual bool + var actual, lastValidActual interface{} + var actualErr, matcherErr error + var oracleMatcherSaysStop bool + + assertion.g.THelper() + + pollActual, buildActualPollerErr := assertion.buildActualPoller() + if buildActualPollerErr != nil { + assertion.g.Fail(buildActualPollerErr.Error(), 2+assertion.offset) + return false + } + + actual, actualErr = pollActual() + if actualErr == nil { + lastValidActual = actual + hasLastValidActual = true + oracleMatcherSaysStop = assertion.matcherSaysStopTrying(matcher, actual) + matches, matcherErr = assertion.pollMatcher(matcher, actual) + } + + renderError := func(preamble string, err error) string { + message := "" + if pollingSignalErr, ok := AsPollingSignalError(err); ok { + message = err.Error() + for _, attachment := range pollingSignalErr.Attachments { + message += fmt.Sprintf("\n%s:\n", attachment.Description) + message += format.Object(attachment.Object, 1) + } + } else { + message = preamble + "\n" + format.Object(err, 1) + } + return message + } + + messageGenerator := func() string { + // can be called out of band by Ginkgo if the user requests a progress report + lock.Lock() + defer lock.Unlock() + message := "" + + if actualErr == nil { + if matcherErr == nil { + if desiredMatch != matches { + if desiredMatch { + message += matcher.FailureMessage(actual) + } else { + message += matcher.NegatedFailureMessage(actual) + } + } else { + if assertion.asyncType == AsyncAssertionTypeConsistently { + message += "There is no failure as the matcher passed to Consistently has not yet failed" + } else { + message += "There is no failure as the matcher passed to Eventually succeeded on its most recent iteration" + } + } + } else { + var fgErr formattedGomegaError + if errors.As(actualErr, &fgErr) { + message += fgErr.FormattedGomegaError() + "\n" + } else { + message += renderError(fmt.Sprintf("The matcher passed to %s returned the following error:", assertion.asyncType), matcherErr) + } + } + } else { + var fgErr formattedGomegaError + if errors.As(actualErr, &fgErr) { + message += fgErr.FormattedGomegaError() + "\n" + } else { + message += renderError(fmt.Sprintf("The function passed to %s returned the following error:", assertion.asyncType), actualErr) + } + if hasLastValidActual { + message += fmt.Sprintf("\nAt one point, however, the function did return successfully.\nYet, %s failed because", assertion.asyncType) + _, e := matcher.Match(lastValidActual) + if e != nil { + message += renderError(" the matcher returned the following error:", e) + } else { + message += " the matcher was not satisfied:\n" + if desiredMatch { + message += matcher.FailureMessage(lastValidActual) + } else { + message += matcher.NegatedFailureMessage(lastValidActual) + } + } + } + } + + description := assertion.buildDescription(optionalDescription...) + return fmt.Sprintf("%s%s", description, message) + } + + fail := func(preamble string) { + assertion.g.THelper() + assertion.g.Fail(fmt.Sprintf("%s after %.3fs.\n%s", preamble, time.Since(timer).Seconds(), messageGenerator()), 3+assertion.offset) + } + + var contextDone <-chan struct{} + if assertion.ctx != nil { + contextDone = assertion.ctx.Done() + if v, ok := assertion.ctx.Value("GINKGO_SPEC_CONTEXT").(contextWithAttachProgressReporter); ok { + detach := v.AttachProgressReporter(messageGenerator) + defer detach() + } + } + + // Used to count the number of times in a row a step passed + passedRepeatedlyCount := 0 + for { + var nextPoll <-chan time.Time = nil + var isTryAgainAfterError = false + + for _, err := range []error{actualErr, matcherErr} { + if pollingSignalErr, ok := AsPollingSignalError(err); ok { + if pollingSignalErr.IsStopTrying() { + fail("Told to stop trying") + return false + } + if pollingSignalErr.IsTryAgainAfter() { + nextPoll = time.After(pollingSignalErr.TryAgainDuration()) + isTryAgainAfterError = true + } + } + } + + if actualErr == nil && matcherErr == nil && matches == desiredMatch { + if assertion.asyncType == AsyncAssertionTypeEventually { + passedRepeatedlyCount += 1 + if passedRepeatedlyCount == assertion.mustPassRepeatedly { + return true + } + } + } else if !isTryAgainAfterError { + if assertion.asyncType == AsyncAssertionTypeConsistently { + fail("Failed") + return false + } + // Reset the consecutive pass count + passedRepeatedlyCount = 0 + } + + if oracleMatcherSaysStop { + if assertion.asyncType == AsyncAssertionTypeEventually { + fail("No future change is possible. Bailing out early") + return false + } else { + return true + } + } + + if nextPoll == nil { + nextPoll = assertion.afterPolling() + } + + select { + case <-nextPoll: + a, e := pollActual() + lock.Lock() + actual, actualErr = a, e + lock.Unlock() + if actualErr == nil { + lock.Lock() + lastValidActual = actual + hasLastValidActual = true + lock.Unlock() + oracleMatcherSaysStop = assertion.matcherSaysStopTrying(matcher, actual) + m, e := assertion.pollMatcher(matcher, actual) + lock.Lock() + matches, matcherErr = m, e + lock.Unlock() + } + case <-contextDone: + fail("Context was cancelled") + return false + case <-timeout: + if assertion.asyncType == AsyncAssertionTypeEventually { + fail("Timed out") + return false + } else { + if isTryAgainAfterError { + fail("Timed out while waiting on TryAgainAfter") + return false + } + return true + } + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/duration_bundle.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/duration_bundle.go new file mode 100644 index 000000000000..6e0d90d3a1ab --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/duration_bundle.go @@ -0,0 +1,71 @@ +package internal + +import ( + "fmt" + "os" + "reflect" + "time" +) + +type DurationBundle struct { + EventuallyTimeout time.Duration + EventuallyPollingInterval time.Duration + ConsistentlyDuration time.Duration + ConsistentlyPollingInterval time.Duration +} + +const ( + EventuallyTimeoutEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT" + EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL" + + ConsistentlyDurationEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION" + ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL" +) + +func FetchDefaultDurationBundle() DurationBundle { + return DurationBundle{ + EventuallyTimeout: durationFromEnv(EventuallyTimeoutEnvVarName, time.Second), + EventuallyPollingInterval: durationFromEnv(EventuallyPollingIntervalEnvVarName, 10*time.Millisecond), + + ConsistentlyDuration: durationFromEnv(ConsistentlyDurationEnvVarName, 100*time.Millisecond), + ConsistentlyPollingInterval: durationFromEnv(ConsistentlyPollingIntervalEnvVarName, 10*time.Millisecond), + } +} + +func durationFromEnv(key string, defaultDuration time.Duration) time.Duration { + value := os.Getenv(key) + if value == "" { + return defaultDuration + } + duration, err := time.ParseDuration(value) + if err != nil { + panic(fmt.Sprintf("Expected a duration when using %s! Parse error %v", key, err)) + } + return duration +} + +func toDuration(input interface{}) (time.Duration, error) { + duration, ok := input.(time.Duration) + if ok { + return duration, nil + } + + value := reflect.ValueOf(input) + kind := reflect.TypeOf(input).Kind() + + if reflect.Int <= kind && kind <= reflect.Int64 { + return time.Duration(value.Int()) * time.Second, nil + } else if reflect.Uint <= kind && kind <= reflect.Uint64 { + return time.Duration(value.Uint()) * time.Second, nil + } else if reflect.Float32 <= kind && kind <= reflect.Float64 { + return time.Duration(value.Float() * float64(time.Second)), nil + } else if reflect.String == kind { + duration, err := time.ParseDuration(value.String()) + if err != nil { + return 0, fmt.Errorf("%#v is not a valid parsable duration string: %w", input, err) + } + return duration, nil + } + + return 0, fmt.Errorf("%#v is not a valid interval. Must be a time.Duration, a parsable duration string, or a number.", input) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gomega.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gomega.go new file mode 100644 index 000000000000..de1f4f336e8e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gomega.go @@ -0,0 +1,129 @@ +package internal + +import ( + "context" + "time" + + "github.com/onsi/gomega/types" +) + +type Gomega struct { + Fail types.GomegaFailHandler + THelper func() + DurationBundle DurationBundle +} + +func NewGomega(bundle DurationBundle) *Gomega { + return &Gomega{ + Fail: nil, + THelper: nil, + DurationBundle: bundle, + } +} + +func (g *Gomega) IsConfigured() bool { + return g.Fail != nil && g.THelper != nil +} + +func (g *Gomega) ConfigureWithFailHandler(fail types.GomegaFailHandler) *Gomega { + g.Fail = fail + g.THelper = func() {} + return g +} + +func (g *Gomega) ConfigureWithT(t types.GomegaTestingT) *Gomega { + g.Fail = func(message string, _ ...int) { + t.Helper() + t.Fatalf("\n%s", message) + } + g.THelper = t.Helper + return g +} + +func (g *Gomega) Ω(actual interface{}, extra ...interface{}) types.Assertion { + return g.ExpectWithOffset(0, actual, extra...) +} + +func (g *Gomega) Expect(actual interface{}, extra ...interface{}) types.Assertion { + return g.ExpectWithOffset(0, actual, extra...) +} + +func (g *Gomega) ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) types.Assertion { + return NewAssertion(actual, g, offset, extra...) +} + +func (g *Gomega) Eventually(actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion { + return g.makeAsyncAssertion(AsyncAssertionTypeEventually, 0, actualOrCtx, args...) +} + +func (g *Gomega) EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion { + return g.makeAsyncAssertion(AsyncAssertionTypeEventually, offset, actualOrCtx, args...) +} + +func (g *Gomega) Consistently(actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion { + return g.makeAsyncAssertion(AsyncAssertionTypeConsistently, 0, actualOrCtx, args...) +} + +func (g *Gomega) ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion { + return g.makeAsyncAssertion(AsyncAssertionTypeConsistently, offset, actualOrCtx, args...) +} + +func (g *Gomega) makeAsyncAssertion(asyncAssertionType AsyncAssertionType, offset int, actualOrCtx interface{}, args ...interface{}) types.AsyncAssertion { + baseOffset := 3 + timeoutInterval := -time.Duration(1) + pollingInterval := -time.Duration(1) + intervals := []interface{}{} + var ctx context.Context + + actual := actualOrCtx + startingIndex := 0 + if _, isCtx := actualOrCtx.(context.Context); isCtx && len(args) > 0 { + // the first argument is a context, we should accept it as the context _only if_ it is **not** the only argumnent **and** the second argument is not a parseable duration + // this is due to an unfortunate ambiguity in early version of Gomega in which multi-type durations are allowed after the actual + if _, err := toDuration(args[0]); err != nil { + ctx = actualOrCtx.(context.Context) + actual = args[0] + startingIndex = 1 + } + } + + for _, arg := range args[startingIndex:] { + switch v := arg.(type) { + case context.Context: + ctx = v + default: + intervals = append(intervals, arg) + } + } + var err error + if len(intervals) > 0 { + timeoutInterval, err = toDuration(intervals[0]) + if err != nil { + g.Fail(err.Error(), offset+baseOffset) + } + } + if len(intervals) > 1 { + pollingInterval, err = toDuration(intervals[1]) + if err != nil { + g.Fail(err.Error(), offset+baseOffset) + } + } + + return NewAsyncAssertion(asyncAssertionType, actual, g, timeoutInterval, pollingInterval, 1, ctx, offset) +} + +func (g *Gomega) SetDefaultEventuallyTimeout(t time.Duration) { + g.DurationBundle.EventuallyTimeout = t +} + +func (g *Gomega) SetDefaultEventuallyPollingInterval(t time.Duration) { + g.DurationBundle.EventuallyPollingInterval = t +} + +func (g *Gomega) SetDefaultConsistentlyDuration(t time.Duration) { + g.DurationBundle.ConsistentlyDuration = t +} + +func (g *Gomega) SetDefaultConsistentlyPollingInterval(t time.Duration) { + g.DurationBundle.ConsistentlyPollingInterval = t +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.go new file mode 100644 index 000000000000..6864055a5a70 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.go @@ -0,0 +1,48 @@ +//go:build go1.16 +// +build go1.16 + +// Package gutil is a replacement for ioutil, which should not be used in new +// code as of Go 1.16. With Go 1.16 and higher, this implementation +// uses the ioutil replacement functions in "io" and "os" with some +// Gomega specifics. This means that we should not get deprecation warnings +// for ioutil when they are added. +package gutil + +import ( + "io" + "os" +) + +func NopCloser(r io.Reader) io.ReadCloser { + return io.NopCloser(r) +} + +func ReadAll(r io.Reader) ([]byte, error) { + return io.ReadAll(r) +} + +func ReadDir(dirname string) ([]string, error) { + entries, err := os.ReadDir(dirname) + if err != nil { + return nil, err + } + + var names []string + for _, entry := range entries { + names = append(names, entry.Name()) + } + + return names, nil +} + +func ReadFile(filename string) ([]byte, error) { + return os.ReadFile(filename) +} + +func MkdirTemp(dir, pattern string) (string, error) { + return os.MkdirTemp(dir, pattern) +} + +func WriteFile(filename string, data []byte) error { + return os.WriteFile(filename, data, 0644) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.go new file mode 100644 index 000000000000..5c0ce1ee3da3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.go @@ -0,0 +1,47 @@ +//go:build !go1.16 +// +build !go1.16 + +// Package gutil is a replacement for ioutil, which should not be used in new +// code as of Go 1.16. With Go 1.15 and lower, this implementation +// uses the ioutil functions, meaning that although Gomega is not officially +// supported on these versions, it is still likely to work. +package gutil + +import ( + "io" + "io/ioutil" +) + +func NopCloser(r io.Reader) io.ReadCloser { + return ioutil.NopCloser(r) +} + +func ReadAll(r io.Reader) ([]byte, error) { + return ioutil.ReadAll(r) +} + +func ReadDir(dirname string) ([]string, error) { + files, err := ioutil.ReadDir(dirname) + if err != nil { + return nil, err + } + + var names []string + for _, file := range files { + names = append(names, file.Name()) + } + + return names, nil +} + +func ReadFile(filename string) ([]byte, error) { + return ioutil.ReadFile(filename) +} + +func MkdirTemp(dir, pattern string) (string, error) { + return ioutil.TempDir(dir, pattern) +} + +func WriteFile(filename string, data []byte) error { + return ioutil.WriteFile(filename, data, 0644) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/polling_signal_error.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/polling_signal_error.go new file mode 100644 index 000000000000..83b04b1a4c90 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/polling_signal_error.go @@ -0,0 +1,106 @@ +package internal + +import ( + "errors" + "fmt" + "time" +) + +type PollingSignalErrorType int + +const ( + PollingSignalErrorTypeStopTrying PollingSignalErrorType = iota + PollingSignalErrorTypeTryAgainAfter +) + +type PollingSignalError interface { + error + Wrap(err error) PollingSignalError + Attach(description string, obj any) PollingSignalError + Now() +} + +var StopTrying = func(message string) PollingSignalError { + return &PollingSignalErrorImpl{ + message: message, + pollingSignalErrorType: PollingSignalErrorTypeStopTrying, + } +} + +var TryAgainAfter = func(duration time.Duration) PollingSignalError { + return &PollingSignalErrorImpl{ + message: fmt.Sprintf("told to try again after %s", duration), + duration: duration, + pollingSignalErrorType: PollingSignalErrorTypeTryAgainAfter, + } +} + +type PollingSignalErrorAttachment struct { + Description string + Object any +} + +type PollingSignalErrorImpl struct { + message string + wrappedErr error + pollingSignalErrorType PollingSignalErrorType + duration time.Duration + Attachments []PollingSignalErrorAttachment +} + +func (s *PollingSignalErrorImpl) Wrap(err error) PollingSignalError { + s.wrappedErr = err + return s +} + +func (s *PollingSignalErrorImpl) Attach(description string, obj any) PollingSignalError { + s.Attachments = append(s.Attachments, PollingSignalErrorAttachment{description, obj}) + return s +} + +func (s *PollingSignalErrorImpl) Error() string { + if s.wrappedErr == nil { + return s.message + } else { + return s.message + ": " + s.wrappedErr.Error() + } +} + +func (s *PollingSignalErrorImpl) Unwrap() error { + if s == nil { + return nil + } + return s.wrappedErr +} + +func (s *PollingSignalErrorImpl) Now() { + panic(s) +} + +func (s *PollingSignalErrorImpl) IsStopTrying() bool { + return s.pollingSignalErrorType == PollingSignalErrorTypeStopTrying +} + +func (s *PollingSignalErrorImpl) IsTryAgainAfter() bool { + return s.pollingSignalErrorType == PollingSignalErrorTypeTryAgainAfter +} + +func (s *PollingSignalErrorImpl) TryAgainDuration() time.Duration { + return s.duration +} + +func AsPollingSignalError(actual interface{}) (*PollingSignalErrorImpl, bool) { + if actual == nil { + return nil, false + } + if actualErr, ok := actual.(error); ok { + var target *PollingSignalErrorImpl + if errors.As(actualErr, &target) { + return target, true + } else { + return nil, false + } + } + + return nil, false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/vetoptdesc.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/vetoptdesc.go new file mode 100644 index 000000000000..f2958764171b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/internal/vetoptdesc.go @@ -0,0 +1,22 @@ +package internal + +import ( + "fmt" + + "github.com/onsi/gomega/types" +) + +// vetOptionalDescription vets the optional description args: if it finds any +// Gomega matcher at the beginning it panics. This allows for rendering Gomega +// matchers as part of an optional Description, as long as they're not in the +// first slot. +func vetOptionalDescription(assertion string, optionalDescription ...interface{}) { + if len(optionalDescription) == 0 { + return + } + if _, isGomegaMatcher := optionalDescription[0].(types.GomegaMatcher); isGomegaMatcher { + panic(fmt.Sprintf("%s has a GomegaMatcher as the first element of optionalDescription.\n\t"+ + "Do you mean to use And/Or/SatisfyAll/SatisfyAny to combine multiple matchers?", + assertion)) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go new file mode 100644 index 000000000000..b832f3dbaf68 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go @@ -0,0 +1,658 @@ +package gomega + +import ( + "time" + + "github.com/google/go-cmp/cmp" + "github.com/onsi/gomega/matchers" + "github.com/onsi/gomega/types" +) + +// Equal uses reflect.DeepEqual to compare actual with expected. Equal is strict about +// types when performing comparisons. +// It is an error for both actual and expected to be nil. Use BeNil() instead. +func Equal(expected interface{}) types.GomegaMatcher { + return &matchers.EqualMatcher{ + Expected: expected, + } +} + +// BeEquivalentTo is more lax than Equal, allowing equality between different types. +// This is done by converting actual to have the type of expected before +// attempting equality with reflect.DeepEqual. +// It is an error for actual and expected to be nil. Use BeNil() instead. +func BeEquivalentTo(expected interface{}) types.GomegaMatcher { + return &matchers.BeEquivalentToMatcher{ + Expected: expected, + } +} + +// BeComparableTo uses gocmp.Equal from github.com/google/go-cmp (instead of reflect.DeepEqual) to perform a deep comparison. +// You can pass cmp.Option as options. +// It is an error for actual and expected to be nil. Use BeNil() instead. +func BeComparableTo(expected interface{}, opts ...cmp.Option) types.GomegaMatcher { + return &matchers.BeComparableToMatcher{ + Expected: expected, + Options: opts, + } +} + +// BeIdenticalTo uses the == operator to compare actual with expected. +// BeIdenticalTo is strict about types when performing comparisons. +// It is an error for both actual and expected to be nil. Use BeNil() instead. +func BeIdenticalTo(expected interface{}) types.GomegaMatcher { + return &matchers.BeIdenticalToMatcher{ + Expected: expected, + } +} + +// BeNil succeeds if actual is nil +func BeNil() types.GomegaMatcher { + return &matchers.BeNilMatcher{} +} + +// BeTrue succeeds if actual is true +func BeTrue() types.GomegaMatcher { + return &matchers.BeTrueMatcher{} +} + +// BeFalse succeeds if actual is false +func BeFalse() types.GomegaMatcher { + return &matchers.BeFalseMatcher{} +} + +// HaveOccurred succeeds if actual is a non-nil error +// The typical Go error checking pattern looks like: +// +// err := SomethingThatMightFail() +// Expect(err).ShouldNot(HaveOccurred()) +func HaveOccurred() types.GomegaMatcher { + return &matchers.HaveOccurredMatcher{} +} + +// Succeed passes if actual is a nil error +// Succeed is intended to be used with functions that return a single error value. Instead of +// +// err := SomethingThatMightFail() +// Expect(err).ShouldNot(HaveOccurred()) +// +// You can write: +// +// Expect(SomethingThatMightFail()).Should(Succeed()) +// +// It is a mistake to use Succeed with a function that has multiple return values. Gomega's Ω and Expect +// functions automatically trigger failure if any return values after the first return value are non-zero/non-nil. +// This means that Ω(MultiReturnFunc()).ShouldNot(Succeed()) can never pass. +func Succeed() types.GomegaMatcher { + return &matchers.SucceedMatcher{} +} + +// MatchError succeeds if actual is a non-nil error that matches the passed in +// string, error, or matcher. +// +// These are valid use-cases: +// +// Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error" +// Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual) +// Expect(err).Should(MatchError(ContainsSubstring("sprocket not found"))) // asserts that edrr.Error() contains substring "sprocket not found" +// +// It is an error for err to be nil or an object that does not implement the +// Error interface +func MatchError(expected interface{}) types.GomegaMatcher { + return &matchers.MatchErrorMatcher{ + Expected: expected, + } +} + +// BeClosed succeeds if actual is a closed channel. +// It is an error to pass a non-channel to BeClosed, it is also an error to pass nil +// +// In order to check whether or not the channel is closed, Gomega must try to read from the channel +// (even in the `ShouldNot(BeClosed())` case). You should keep this in mind if you wish to make subsequent assertions about +// values coming down the channel. +// +// Also, if you are testing that a *buffered* channel is closed you must first read all values out of the channel before +// asserting that it is closed (it is not possible to detect that a buffered-channel has been closed until all its buffered values are read). +// +// Finally, as a corollary: it is an error to check whether or not a send-only channel is closed. +func BeClosed() types.GomegaMatcher { + return &matchers.BeClosedMatcher{} +} + +// Receive succeeds if there is a value to be received on actual. +// Actual must be a channel (and cannot be a send-only channel) -- anything else is an error. +// +// Receive returns immediately and never blocks: +// +// - If there is nothing on the channel `c` then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass. +// +// - If the channel `c` is closed then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass. +// +// - If there is something on the channel `c` ready to be read, then Expect(c).Should(Receive()) will pass and Ω(c).ShouldNot(Receive()) will fail. +// +// If you have a go-routine running in the background that will write to channel `c` you can: +// +// Eventually(c).Should(Receive()) +// +// This will timeout if nothing gets sent to `c` (you can modify the timeout interval as you normally do with `Eventually`) +// +// A similar use-case is to assert that no go-routine writes to a channel (for a period of time). You can do this with `Consistently`: +// +// Consistently(c).ShouldNot(Receive()) +// +// You can pass `Receive` a matcher. If you do so, it will match the received object against the matcher. For example: +// +// Expect(c).Should(Receive(Equal("foo"))) +// +// When given a matcher, `Receive` will always fail if there is nothing to be received on the channel. +// +// Passing Receive a matcher is especially useful when paired with Eventually: +// +// Eventually(c).Should(Receive(ContainSubstring("bar"))) +// +// will repeatedly attempt to pull values out of `c` until a value matching "bar" is received. +// +// Finally, if you want to have a reference to the value *sent* to the channel you can pass the `Receive` matcher a pointer to a variable of the appropriate type: +// +// var myThing thing +// Eventually(thingChan).Should(Receive(&myThing)) +// Expect(myThing.Sprocket).Should(Equal("foo")) +// Expect(myThing.IsValid()).Should(BeTrue()) +func Receive(args ...interface{}) types.GomegaMatcher { + var arg interface{} + if len(args) > 0 { + arg = args[0] + } + + return &matchers.ReceiveMatcher{ + Arg: arg, + } +} + +// BeSent succeeds if a value can be sent to actual. +// Actual must be a channel (and cannot be a receive-only channel) that can sent the type of the value passed into BeSent -- anything else is an error. +// In addition, actual must not be closed. +// +// BeSent never blocks: +// +// - If the channel `c` is not ready to receive then Expect(c).Should(BeSent("foo")) will fail immediately +// - If the channel `c` is eventually ready to receive then Eventually(c).Should(BeSent("foo")) will succeed.. presuming the channel becomes ready to receive before Eventually's timeout +// - If the channel `c` is closed then Expect(c).Should(BeSent("foo")) and Ω(c).ShouldNot(BeSent("foo")) will both fail immediately +// +// Of course, the value is actually sent to the channel. The point of `BeSent` is less to make an assertion about the availability of the channel (which is typically an implementation detail that your test should not be concerned with). +// Rather, the point of `BeSent` is to make it possible to easily and expressively write tests that can timeout on blocked channel sends. +func BeSent(arg interface{}) types.GomegaMatcher { + return &matchers.BeSentMatcher{ + Arg: arg, + } +} + +// MatchRegexp succeeds if actual is a string or stringer that matches the +// passed-in regexp. Optional arguments can be provided to construct a regexp +// via fmt.Sprintf(). +func MatchRegexp(regexp string, args ...interface{}) types.GomegaMatcher { + return &matchers.MatchRegexpMatcher{ + Regexp: regexp, + Args: args, + } +} + +// ContainSubstring succeeds if actual is a string or stringer that contains the +// passed-in substring. Optional arguments can be provided to construct the substring +// via fmt.Sprintf(). +func ContainSubstring(substr string, args ...interface{}) types.GomegaMatcher { + return &matchers.ContainSubstringMatcher{ + Substr: substr, + Args: args, + } +} + +// HavePrefix succeeds if actual is a string or stringer that contains the +// passed-in string as a prefix. Optional arguments can be provided to construct +// via fmt.Sprintf(). +func HavePrefix(prefix string, args ...interface{}) types.GomegaMatcher { + return &matchers.HavePrefixMatcher{ + Prefix: prefix, + Args: args, + } +} + +// HaveSuffix succeeds if actual is a string or stringer that contains the +// passed-in string as a suffix. Optional arguments can be provided to construct +// via fmt.Sprintf(). +func HaveSuffix(suffix string, args ...interface{}) types.GomegaMatcher { + return &matchers.HaveSuffixMatcher{ + Suffix: suffix, + Args: args, + } +} + +// MatchJSON succeeds if actual is a string or stringer of JSON that matches +// the expected JSON. The JSONs are decoded and the resulting objects are compared via +// reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter. +func MatchJSON(json interface{}) types.GomegaMatcher { + return &matchers.MatchJSONMatcher{ + JSONToMatch: json, + } +} + +// MatchXML succeeds if actual is a string or stringer of XML that matches +// the expected XML. The XMLs are decoded and the resulting objects are compared via +// reflect.DeepEqual so things like whitespaces shouldn't matter. +func MatchXML(xml interface{}) types.GomegaMatcher { + return &matchers.MatchXMLMatcher{ + XMLToMatch: xml, + } +} + +// MatchYAML succeeds if actual is a string or stringer of YAML that matches +// the expected YAML. The YAML's are decoded and the resulting objects are compared via +// reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter. +func MatchYAML(yaml interface{}) types.GomegaMatcher { + return &matchers.MatchYAMLMatcher{ + YAMLToMatch: yaml, + } +} + +// BeEmpty succeeds if actual is empty. Actual must be of type string, array, map, chan, or slice. +func BeEmpty() types.GomegaMatcher { + return &matchers.BeEmptyMatcher{} +} + +// HaveLen succeeds if actual has the passed-in length. Actual must be of type string, array, map, chan, or slice. +func HaveLen(count int) types.GomegaMatcher { + return &matchers.HaveLenMatcher{ + Count: count, + } +} + +// HaveCap succeeds if actual has the passed-in capacity. Actual must be of type array, chan, or slice. +func HaveCap(count int) types.GomegaMatcher { + return &matchers.HaveCapMatcher{ + Count: count, + } +} + +// BeZero succeeds if actual is the zero value for its type or if actual is nil. +func BeZero() types.GomegaMatcher { + return &matchers.BeZeroMatcher{} +} + +// ContainElement succeeds if actual contains the passed in element. By default +// ContainElement() uses Equal() to perform the match, however a matcher can be +// passed in instead: +// +// Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubstring("Bar"))) +// +// Actual must be an array, slice or map. For maps, ContainElement searches +// through the map's values. +// +// If you want to have a copy of the matching element(s) found you can pass a +// pointer to a variable of the appropriate type. If the variable isn't a slice +// or map, then exactly one match will be expected and returned. If the variable +// is a slice or map, then at least one match is expected and all matches will be +// stored in the variable. +// +// var findings []string +// Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubString("Bar", &findings))) +func ContainElement(element interface{}, result ...interface{}) types.GomegaMatcher { + return &matchers.ContainElementMatcher{ + Element: element, + Result: result, + } +} + +// BeElementOf succeeds if actual is contained in the passed in elements. +// BeElementOf() always uses Equal() to perform the match. +// When the passed in elements are comprised of a single element that is either an Array or Slice, BeElementOf() behaves +// as the reverse of ContainElement() that operates with Equal() to perform the match. +// +// Expect(2).Should(BeElementOf([]int{1, 2})) +// Expect(2).Should(BeElementOf([2]int{1, 2})) +// +// Otherwise, BeElementOf() provides a syntactic sugar for Or(Equal(_), Equal(_), ...): +// +// Expect(2).Should(BeElementOf(1, 2)) +// +// Actual must be typed. +func BeElementOf(elements ...interface{}) types.GomegaMatcher { + return &matchers.BeElementOfMatcher{ + Elements: elements, + } +} + +// BeKeyOf succeeds if actual is contained in the keys of the passed in map. +// BeKeyOf() always uses Equal() to perform the match between actual and the map keys. +// +// Expect("foo").Should(BeKeyOf(map[string]bool{"foo": true, "bar": false})) +func BeKeyOf(element interface{}) types.GomegaMatcher { + return &matchers.BeKeyOfMatcher{ + Map: element, + } +} + +// ConsistOf succeeds if actual contains precisely the elements passed into the matcher. The ordering of the elements does not matter. +// By default ConsistOf() uses Equal() to match the elements, however custom matchers can be passed in instead. Here are some examples: +// +// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf("FooBar", "Foo")) +// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Bar"), "Foo")) +// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Foo"), ContainSubstring("Foo"))) +// +// Actual must be an array, slice or map. For maps, ConsistOf matches against the map's values. +// +// You typically pass variadic arguments to ConsistOf (as in the examples above). However, if you need to pass in a slice you can provided that it +// is the only element passed in to ConsistOf: +// +// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf([]string{"FooBar", "Foo"})) +// +// Note that Go's type system does not allow you to write this as ConsistOf([]string{"FooBar", "Foo"}...) as []string and []interface{} are different types - hence the need for this special rule. +func ConsistOf(elements ...interface{}) types.GomegaMatcher { + return &matchers.ConsistOfMatcher{ + Elements: elements, + } +} + +// HaveExactElemets succeeds if actual contains elements that precisely match the elemets passed into the matcher. The ordering of the elements does matter. +// By default HaveExactElements() uses Equal() to match the elements, however custom matchers can be passed in instead. Here are some examples: +// +// Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements("Foo", "FooBar")) +// Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements("Foo", ContainSubstring("Bar"))) +// Expect([]string{"Foo", "FooBar"}).Should(HaveExactElements(ContainSubstring("Foo"), ContainSubstring("Foo"))) +// +// Actual must be an array or slice. +func HaveExactElements(elements ...interface{}) types.GomegaMatcher { + return &matchers.HaveExactElementsMatcher{ + Elements: elements, + } +} + +// ContainElements succeeds if actual contains the passed in elements. The ordering of the elements does not matter. +// By default ContainElements() uses Equal() to match the elements, however custom matchers can be passed in instead. Here are some examples: +// +// Expect([]string{"Foo", "FooBar"}).Should(ContainElements("FooBar")) +// Expect([]string{"Foo", "FooBar"}).Should(ContainElements(ContainSubstring("Bar"), "Foo")) +// +// Actual must be an array, slice or map. +// For maps, ContainElements searches through the map's values. +func ContainElements(elements ...interface{}) types.GomegaMatcher { + return &matchers.ContainElementsMatcher{ + Elements: elements, + } +} + +// HaveEach succeeds if actual solely contains elements that match the passed in element. +// Please note that if actual is empty, HaveEach always will succeed. +// By default HaveEach() uses Equal() to perform the match, however a +// matcher can be passed in instead: +// +// Expect([]string{"Foo", "FooBar"}).Should(HaveEach(ContainSubstring("Foo"))) +// +// Actual must be an array, slice or map. +// For maps, HaveEach searches through the map's values. +func HaveEach(element interface{}) types.GomegaMatcher { + return &matchers.HaveEachMatcher{ + Element: element, + } +} + +// HaveKey succeeds if actual is a map with the passed in key. +// By default HaveKey uses Equal() to perform the match, however a +// matcher can be passed in instead: +// +// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKey(MatchRegexp(`.+Foo$`))) +func HaveKey(key interface{}) types.GomegaMatcher { + return &matchers.HaveKeyMatcher{ + Key: key, + } +} + +// HaveKeyWithValue succeeds if actual is a map with the passed in key and value. +// By default HaveKeyWithValue uses Equal() to perform the match, however a +// matcher can be passed in instead: +// +// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue("Foo", "Bar")) +// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue(MatchRegexp(`.+Foo$`), "Bar")) +func HaveKeyWithValue(key interface{}, value interface{}) types.GomegaMatcher { + return &matchers.HaveKeyWithValueMatcher{ + Key: key, + Value: value, + } +} + +// HaveField succeeds if actual is a struct and the value at the passed in field +// matches the passed in matcher. By default HaveField used Equal() to perform the match, +// however a matcher can be passed in in stead. +// +// The field must be a string that resolves to the name of a field in the struct. Structs can be traversed +// using the '.' delimiter. If the field ends with '()' a method named field is assumed to exist on the struct and is invoked. +// Such methods must take no arguments and return a single value: +// +// type Book struct { +// Title string +// Author Person +// } +// type Person struct { +// FirstName string +// LastName string +// DOB time.Time +// } +// Expect(book).To(HaveField("Title", "Les Miserables")) +// Expect(book).To(HaveField("Title", ContainSubstring("Les")) +// Expect(book).To(HaveField("Author.FirstName", Equal("Victor")) +// Expect(book).To(HaveField("Author.DOB.Year()", BeNumerically("<", 1900)) +func HaveField(field string, expected interface{}) types.GomegaMatcher { + return &matchers.HaveFieldMatcher{ + Field: field, + Expected: expected, + } +} + +// HaveExistingField succeeds if actual is a struct and the specified field +// exists. +// +// HaveExistingField can be combined with HaveField in order to cover use cases +// with optional fields. HaveField alone would trigger an error in such situations. +// +// Expect(MrHarmless).NotTo(And(HaveExistingField("Title"), HaveField("Title", "Supervillain"))) +func HaveExistingField(field string) types.GomegaMatcher { + return &matchers.HaveExistingFieldMatcher{ + Field: field, + } +} + +// HaveValue applies the given matcher to the value of actual, optionally and +// repeatedly dereferencing pointers or taking the concrete value of interfaces. +// Thus, the matcher will always be applied to non-pointer and non-interface +// values only. HaveValue will fail with an error if a pointer or interface is +// nil. It will also fail for more than 31 pointer or interface dereferences to +// guard against mistakenly applying it to arbitrarily deep linked pointers. +// +// HaveValue differs from gstruct.PointTo in that it does not expect actual to +// be a pointer (as gstruct.PointTo does) but instead also accepts non-pointer +// and even interface values. +// +// actual := 42 +// Expect(actual).To(HaveValue(42)) +// Expect(&actual).To(HaveValue(42)) +func HaveValue(matcher types.GomegaMatcher) types.GomegaMatcher { + return &matchers.HaveValueMatcher{ + Matcher: matcher, + } +} + +// BeNumerically performs numerical assertions in a type-agnostic way. +// Actual and expected should be numbers, though the specific type of +// number is irrelevant (float32, float64, uint8, etc...). +// +// There are six, self-explanatory, supported comparators: +// +// Expect(1.0).Should(BeNumerically("==", 1)) +// Expect(1.0).Should(BeNumerically("~", 0.999, 0.01)) +// Expect(1.0).Should(BeNumerically(">", 0.9)) +// Expect(1.0).Should(BeNumerically(">=", 1.0)) +// Expect(1.0).Should(BeNumerically("<", 3)) +// Expect(1.0).Should(BeNumerically("<=", 1.0)) +func BeNumerically(comparator string, compareTo ...interface{}) types.GomegaMatcher { + return &matchers.BeNumericallyMatcher{ + Comparator: comparator, + CompareTo: compareTo, + } +} + +// BeTemporally compares time.Time's like BeNumerically +// Actual and expected must be time.Time. The comparators are the same as for BeNumerically +// +// Expect(time.Now()).Should(BeTemporally(">", time.Time{})) +// Expect(time.Now()).Should(BeTemporally("~", time.Now(), time.Second)) +func BeTemporally(comparator string, compareTo time.Time, threshold ...time.Duration) types.GomegaMatcher { + return &matchers.BeTemporallyMatcher{ + Comparator: comparator, + CompareTo: compareTo, + Threshold: threshold, + } +} + +// BeAssignableToTypeOf succeeds if actual is assignable to the type of expected. +// It will return an error when one of the values is nil. +// +// Expect(0).Should(BeAssignableToTypeOf(0)) // Same values +// Expect(5).Should(BeAssignableToTypeOf(-1)) // different values same type +// Expect("foo").Should(BeAssignableToTypeOf("bar")) // different values same type +// Expect(struct{ Foo string }{}).Should(BeAssignableToTypeOf(struct{ Foo string }{})) +func BeAssignableToTypeOf(expected interface{}) types.GomegaMatcher { + return &matchers.AssignableToTypeOfMatcher{ + Expected: expected, + } +} + +// Panic succeeds if actual is a function that, when invoked, panics. +// Actual must be a function that takes no arguments and returns no results. +func Panic() types.GomegaMatcher { + return &matchers.PanicMatcher{} +} + +// PanicWith succeeds if actual is a function that, when invoked, panics with a specific value. +// Actual must be a function that takes no arguments and returns no results. +// +// By default PanicWith uses Equal() to perform the match, however a +// matcher can be passed in instead: +// +// Expect(fn).Should(PanicWith(MatchRegexp(`.+Foo$`))) +func PanicWith(expected interface{}) types.GomegaMatcher { + return &matchers.PanicMatcher{Expected: expected} +} + +// BeAnExistingFile succeeds if a file exists. +// Actual must be a string representing the abs path to the file being checked. +func BeAnExistingFile() types.GomegaMatcher { + return &matchers.BeAnExistingFileMatcher{} +} + +// BeARegularFile succeeds if a file exists and is a regular file. +// Actual must be a string representing the abs path to the file being checked. +func BeARegularFile() types.GomegaMatcher { + return &matchers.BeARegularFileMatcher{} +} + +// BeADirectory succeeds if a file exists and is a directory. +// Actual must be a string representing the abs path to the file being checked. +func BeADirectory() types.GomegaMatcher { + return &matchers.BeADirectoryMatcher{} +} + +// HaveHTTPStatus succeeds if the Status or StatusCode field of an HTTP response matches. +// Actual must be either a *http.Response or *httptest.ResponseRecorder. +// Expected must be either an int or a string. +// +// Expect(resp).Should(HaveHTTPStatus(http.StatusOK)) // asserts that resp.StatusCode == 200 +// Expect(resp).Should(HaveHTTPStatus("404 Not Found")) // asserts that resp.Status == "404 Not Found" +// Expect(resp).Should(HaveHTTPStatus(http.StatusOK, http.StatusNoContent)) // asserts that resp.StatusCode == 200 || resp.StatusCode == 204 +func HaveHTTPStatus(expected ...interface{}) types.GomegaMatcher { + return &matchers.HaveHTTPStatusMatcher{Expected: expected} +} + +// HaveHTTPHeaderWithValue succeeds if the header is found and the value matches. +// Actual must be either a *http.Response or *httptest.ResponseRecorder. +// Expected must be a string header name, followed by a header value which +// can be a string, or another matcher. +func HaveHTTPHeaderWithValue(header string, value interface{}) types.GomegaMatcher { + return &matchers.HaveHTTPHeaderWithValueMatcher{ + Header: header, + Value: value, + } +} + +// HaveHTTPBody matches if the body matches. +// Actual must be either a *http.Response or *httptest.ResponseRecorder. +// Expected must be either a string, []byte, or other matcher +func HaveHTTPBody(expected interface{}) types.GomegaMatcher { + return &matchers.HaveHTTPBodyMatcher{Expected: expected} +} + +// And succeeds only if all of the given matchers succeed. +// The matchers are tried in order, and will fail-fast if one doesn't succeed. +// +// Expect("hi").To(And(HaveLen(2), Equal("hi")) +// +// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func And(ms ...types.GomegaMatcher) types.GomegaMatcher { + return &matchers.AndMatcher{Matchers: ms} +} + +// SatisfyAll is an alias for And(). +// +// Expect("hi").Should(SatisfyAll(HaveLen(2), Equal("hi"))) +func SatisfyAll(matchers ...types.GomegaMatcher) types.GomegaMatcher { + return And(matchers...) +} + +// Or succeeds if any of the given matchers succeed. +// The matchers are tried in order and will return immediately upon the first successful match. +// +// Expect("hi").To(Or(HaveLen(3), HaveLen(2)) +// +// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func Or(ms ...types.GomegaMatcher) types.GomegaMatcher { + return &matchers.OrMatcher{Matchers: ms} +} + +// SatisfyAny is an alias for Or(). +// +// Expect("hi").SatisfyAny(Or(HaveLen(3), HaveLen(2)) +func SatisfyAny(matchers ...types.GomegaMatcher) types.GomegaMatcher { + return Or(matchers...) +} + +// Not negates the given matcher; it succeeds if the given matcher fails. +// +// Expect(1).To(Not(Equal(2)) +// +// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func Not(matcher types.GomegaMatcher) types.GomegaMatcher { + return &matchers.NotMatcher{Matcher: matcher} +} + +// WithTransform applies the `transform` to the actual value and matches it against `matcher`. +// The given transform must be either a function of one parameter that returns one value or a +// function of one parameter that returns two values, where the second value must be of the +// error type. +// +// var plus1 = func(i int) int { return i + 1 } +// Expect(1).To(WithTransform(plus1, Equal(2)) +// +// var failingplus1 = func(i int) (int, error) { return 42, "this does not compute" } +// Expect(1).To(WithTransform(failingplus1, Equal(2))) +// +// And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions. +func WithTransform(transform interface{}, matcher types.GomegaMatcher) types.GomegaMatcher { + return matchers.NewWithTransformMatcher(transform, matcher) +} + +// Satisfy matches the actual value against the `predicate` function. +// The given predicate must be a function of one paramter that returns bool. +// +// var isEven = func(i int) bool { return i%2 == 0 } +// Expect(2).To(Satisfy(isEven)) +func Satisfy(predicate interface{}) types.GomegaMatcher { + return matchers.NewSatisfyMatcher(predicate) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/and.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/and.go new file mode 100644 index 000000000000..6bd826adc5c3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/and.go @@ -0,0 +1,62 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +type AndMatcher struct { + Matchers []types.GomegaMatcher + + // state + firstFailedMatcher types.GomegaMatcher +} + +func (m *AndMatcher) Match(actual interface{}) (success bool, err error) { + m.firstFailedMatcher = nil + for _, matcher := range m.Matchers { + success, err := matcher.Match(actual) + if !success || err != nil { + m.firstFailedMatcher = matcher + return false, err + } + } + return true, nil +} + +func (m *AndMatcher) FailureMessage(actual interface{}) (message string) { + return m.firstFailedMatcher.FailureMessage(actual) +} + +func (m *AndMatcher) NegatedFailureMessage(actual interface{}) (message string) { + // not the most beautiful list of matchers, but not bad either... + return format.Message(actual, fmt.Sprintf("To not satisfy all of these matchers: %s", m.Matchers)) +} + +func (m *AndMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + /* + Example with 3 matchers: A, B, C + + Match evaluates them: T, F, => F + So match is currently F, what should MatchMayChangeInTheFuture() return? + Seems like it only depends on B, since currently B MUST change to allow the result to become T + + Match eval: T, T, T => T + So match is currently T, what should MatchMayChangeInTheFuture() return? + Seems to depend on ANY of them being able to change to F. + */ + + if m.firstFailedMatcher == nil { + // so all matchers succeeded.. Any one of them changing would change the result. + for _, matcher := range m.Matchers { + if types.MatchMayChangeInTheFuture(matcher, actual) { + return true + } + } + return false // none of were going to change + } + // one of the matchers failed.. it must be able to change in order to affect the result + return types.MatchMayChangeInTheFuture(m.firstFailedMatcher, actual) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go new file mode 100644 index 000000000000..be483952018f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go @@ -0,0 +1,37 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type AssignableToTypeOfMatcher struct { + Expected interface{} +} + +func (matcher *AssignableToTypeOfMatcher) Match(actual interface{}) (success bool, err error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } else if matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare type to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } else if actual == nil { + return false, nil + } + + actualType := reflect.TypeOf(actual) + expectedType := reflect.TypeOf(matcher.Expected) + + return actualType.AssignableTo(expectedType), nil +} + +func (matcher *AssignableToTypeOfMatcher) FailureMessage(actual interface{}) string { + return format.Message(actual, fmt.Sprintf("to be assignable to the type: %T", matcher.Expected)) +} + +func (matcher *AssignableToTypeOfMatcher) NegatedFailureMessage(actual interface{}) string { + return format.Message(actual, fmt.Sprintf("not to be assignable to the type: %T", matcher.Expected)) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/attributes_slice.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/attributes_slice.go new file mode 100644 index 000000000000..355b362f4b07 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/attributes_slice.go @@ -0,0 +1,14 @@ +package matchers + +import ( + "encoding/xml" + "strings" +) + +type attributesSlice []xml.Attr + +func (attrs attributesSlice) Len() int { return len(attrs) } +func (attrs attributesSlice) Less(i, j int) bool { + return strings.Compare(attrs[i].Name.Local, attrs[j].Name.Local) == -1 +} +func (attrs attributesSlice) Swap(i, j int) { attrs[i], attrs[j] = attrs[j], attrs[i] } diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go new file mode 100644 index 000000000000..acffc8570f91 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go @@ -0,0 +1,56 @@ +// untested sections: 5 + +package matchers + +import ( + "fmt" + "os" + + "github.com/onsi/gomega/format" +) + +type notADirectoryError struct { + os.FileInfo +} + +func (t notADirectoryError) Error() string { + fileInfo := os.FileInfo(t) + switch { + case fileInfo.Mode().IsRegular(): + return "file is a regular file" + default: + return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String()) + } +} + +type BeADirectoryMatcher struct { + expected interface{} + err error +} + +func (matcher *BeADirectoryMatcher) Match(actual interface{}) (success bool, err error) { + actualFilename, ok := actual.(string) + if !ok { + return false, fmt.Errorf("BeADirectoryMatcher matcher expects a file path") + } + + fileInfo, err := os.Stat(actualFilename) + if err != nil { + matcher.err = err + return false, nil + } + + if !fileInfo.Mode().IsDir() { + matcher.err = notADirectoryError{fileInfo} + return false, nil + } + return true, nil +} + +func (matcher *BeADirectoryMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("to be a directory: %s", matcher.err)) +} + +func (matcher *BeADirectoryMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("not be a directory")) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go new file mode 100644 index 000000000000..89441c800367 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go @@ -0,0 +1,56 @@ +// untested sections: 5 + +package matchers + +import ( + "fmt" + "os" + + "github.com/onsi/gomega/format" +) + +type notARegularFileError struct { + os.FileInfo +} + +func (t notARegularFileError) Error() string { + fileInfo := os.FileInfo(t) + switch { + case fileInfo.IsDir(): + return "file is a directory" + default: + return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String()) + } +} + +type BeARegularFileMatcher struct { + expected interface{} + err error +} + +func (matcher *BeARegularFileMatcher) Match(actual interface{}) (success bool, err error) { + actualFilename, ok := actual.(string) + if !ok { + return false, fmt.Errorf("BeARegularFileMatcher matcher expects a file path") + } + + fileInfo, err := os.Stat(actualFilename) + if err != nil { + matcher.err = err + return false, nil + } + + if !fileInfo.Mode().IsRegular() { + matcher.err = notARegularFileError{fileInfo} + return false, nil + } + return true, nil +} + +func (matcher *BeARegularFileMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("to be a regular file: %s", matcher.err)) +} + +func (matcher *BeARegularFileMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("not be a regular file")) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go new file mode 100644 index 000000000000..ec6506b001eb --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go @@ -0,0 +1,40 @@ +// untested sections: 3 + +package matchers + +import ( + "fmt" + "os" + + "github.com/onsi/gomega/format" +) + +type BeAnExistingFileMatcher struct { + expected interface{} +} + +func (matcher *BeAnExistingFileMatcher) Match(actual interface{}) (success bool, err error) { + actualFilename, ok := actual.(string) + if !ok { + return false, fmt.Errorf("BeAnExistingFileMatcher matcher expects a file path") + } + + if _, err = os.Stat(actualFilename); err != nil { + switch { + case os.IsNotExist(err): + return false, nil + default: + return false, err + } + } + + return true, nil +} + +func (matcher *BeAnExistingFileMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("to exist")) +} + +func (matcher *BeAnExistingFileMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("not to exist")) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go new file mode 100644 index 000000000000..f13c24490f87 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go @@ -0,0 +1,48 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeClosedMatcher struct { +} + +func (matcher *BeClosedMatcher) Match(actual interface{}) (success bool, err error) { + if !isChan(actual) { + return false, fmt.Errorf("BeClosed matcher expects a channel. Got:\n%s", format.Object(actual, 1)) + } + + channelType := reflect.TypeOf(actual) + channelValue := reflect.ValueOf(actual) + + if channelType.ChanDir() == reflect.SendDir { + return false, fmt.Errorf("BeClosed matcher cannot determine if a send-only channel is closed or open. Got:\n%s", format.Object(actual, 1)) + } + + winnerIndex, _, open := reflect.Select([]reflect.SelectCase{ + {Dir: reflect.SelectRecv, Chan: channelValue}, + {Dir: reflect.SelectDefault}, + }) + + var closed bool + if winnerIndex == 0 { + closed = !open + } else if winnerIndex == 1 { + closed = false + } + + return closed, nil +} + +func (matcher *BeClosedMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be closed") +} + +func (matcher *BeClosedMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be open") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go new file mode 100644 index 000000000000..8ab4bb919492 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go @@ -0,0 +1,49 @@ +package matchers + +import ( + "bytes" + "fmt" + + "github.com/google/go-cmp/cmp" + "github.com/onsi/gomega/format" +) + +type BeComparableToMatcher struct { + Expected interface{} + Options cmp.Options +} + +func (matcher *BeComparableToMatcher) Match(actual interface{}) (success bool, matchErr error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } + // Shortcut for byte slices. + // Comparing long byte slices with reflect.DeepEqual is very slow, + // so use bytes.Equal if actual and expected are both byte slices. + if actualByteSlice, ok := actual.([]byte); ok { + if expectedByteSlice, ok := matcher.Expected.([]byte); ok { + return bytes.Equal(actualByteSlice, expectedByteSlice), nil + } + } + + defer func() { + if r := recover(); r != nil { + success = false + if err, ok := r.(error); ok { + matchErr = err + } else if errMsg, ok := r.(string); ok { + matchErr = fmt.Errorf(errMsg) + } + } + }() + + return cmp.Equal(actual, matcher.Expected, matcher.Options...), nil +} + +func (matcher *BeComparableToMatcher) FailureMessage(actual interface{}) (message string) { + return cmp.Diff(matcher.Expected, actual, matcher.Options) +} + +func (matcher *BeComparableToMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to equal", matcher.Expected) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go new file mode 100644 index 000000000000..9ee75a5d5115 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go @@ -0,0 +1,43 @@ +// untested sections: 1 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeElementOfMatcher struct { + Elements []interface{} +} + +func (matcher *BeElementOfMatcher) Match(actual interface{}) (success bool, err error) { + if reflect.TypeOf(actual) == nil { + return false, fmt.Errorf("BeElement matcher expects actual to be typed") + } + + var lastError error + for _, m := range flatten(matcher.Elements) { + matcher := &EqualMatcher{Expected: m} + success, err := matcher.Match(actual) + if err != nil { + lastError = err + continue + } + if success { + return true, nil + } + } + + return false, lastError +} + +func (matcher *BeElementOfMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be an element of", presentable(matcher.Elements)) +} + +func (matcher *BeElementOfMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be an element of", presentable(matcher.Elements)) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go new file mode 100644 index 000000000000..527c1a1c1047 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go @@ -0,0 +1,29 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type BeEmptyMatcher struct { +} + +func (matcher *BeEmptyMatcher) Match(actual interface{}) (success bool, err error) { + length, ok := lengthOf(actual) + if !ok { + return false, fmt.Errorf("BeEmpty matcher expects a string/array/map/channel/slice. Got:\n%s", format.Object(actual, 1)) + } + + return length == 0, nil +} + +func (matcher *BeEmptyMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be empty") +} + +func (matcher *BeEmptyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be empty") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go new file mode 100644 index 000000000000..263627f4083e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go @@ -0,0 +1,36 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeEquivalentToMatcher struct { + Expected interface{} +} + +func (matcher *BeEquivalentToMatcher) Match(actual interface{}) (success bool, err error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Both actual and expected must not be nil.") + } + + convertedActual := actual + + if actual != nil && matcher.Expected != nil && reflect.TypeOf(actual).ConvertibleTo(reflect.TypeOf(matcher.Expected)) { + convertedActual = reflect.ValueOf(actual).Convert(reflect.TypeOf(matcher.Expected)).Interface() + } + + return reflect.DeepEqual(convertedActual, matcher.Expected), nil +} + +func (matcher *BeEquivalentToMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be equivalent to", matcher.Expected) +} + +func (matcher *BeEquivalentToMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be equivalent to", matcher.Expected) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go new file mode 100644 index 000000000000..e326c0157749 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go @@ -0,0 +1,28 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type BeFalseMatcher struct { +} + +func (matcher *BeFalseMatcher) Match(actual interface{}) (success bool, err error) { + if !isBool(actual) { + return false, fmt.Errorf("Expected a boolean. Got:\n%s", format.Object(actual, 1)) + } + + return actual == false, nil +} + +func (matcher *BeFalseMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be false") +} + +func (matcher *BeFalseMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be false") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_identical_to.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_identical_to.go new file mode 100644 index 000000000000..631ce11e33b1 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_identical_to.go @@ -0,0 +1,39 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + "runtime" + + "github.com/onsi/gomega/format" +) + +type BeIdenticalToMatcher struct { + Expected interface{} +} + +func (matcher *BeIdenticalToMatcher) Match(actual interface{}) (success bool, matchErr error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } + + defer func() { + if r := recover(); r != nil { + if _, ok := r.(runtime.Error); ok { + success = false + matchErr = nil + } + } + }() + + return actual == matcher.Expected, nil +} + +func (matcher *BeIdenticalToMatcher) FailureMessage(actual interface{}) string { + return format.Message(actual, "to be identical to", matcher.Expected) +} + +func (matcher *BeIdenticalToMatcher) NegatedFailureMessage(actual interface{}) string { + return format.Message(actual, "not to be identical to", matcher.Expected) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go new file mode 100644 index 000000000000..449a291ef9a8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go @@ -0,0 +1,45 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeKeyOfMatcher struct { + Map interface{} +} + +func (matcher *BeKeyOfMatcher) Match(actual interface{}) (success bool, err error) { + if !isMap(matcher.Map) { + return false, fmt.Errorf("BeKeyOf matcher needs expected to be a map type") + } + + if reflect.TypeOf(actual) == nil { + return false, fmt.Errorf("BeKeyOf matcher expects actual to be typed") + } + + var lastError error + for _, key := range reflect.ValueOf(matcher.Map).MapKeys() { + matcher := &EqualMatcher{Expected: key.Interface()} + success, err := matcher.Match(actual) + if err != nil { + lastError = err + continue + } + if success { + return true, nil + } + } + + return false, lastError +} + +func (matcher *BeKeyOfMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be a key of", presentable(valuesOf(matcher.Map))) +} + +func (matcher *BeKeyOfMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be a key of", presentable(valuesOf(matcher.Map))) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go new file mode 100644 index 000000000000..551d99d7474e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go @@ -0,0 +1,20 @@ +// untested sections: 2 + +package matchers + +import "github.com/onsi/gomega/format" + +type BeNilMatcher struct { +} + +func (matcher *BeNilMatcher) Match(actual interface{}) (success bool, err error) { + return isNil(actual), nil +} + +func (matcher *BeNilMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be nil") +} + +func (matcher *BeNilMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be nil") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go new file mode 100644 index 000000000000..100735de3250 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go @@ -0,0 +1,134 @@ +// untested sections: 4 + +package matchers + +import ( + "fmt" + "math" + + "github.com/onsi/gomega/format" +) + +type BeNumericallyMatcher struct { + Comparator string + CompareTo []interface{} +} + +func (matcher *BeNumericallyMatcher) FailureMessage(actual interface{}) (message string) { + return matcher.FormatFailureMessage(actual, false) +} + +func (matcher *BeNumericallyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return matcher.FormatFailureMessage(actual, true) +} + +func (matcher *BeNumericallyMatcher) FormatFailureMessage(actual interface{}, negated bool) (message string) { + if len(matcher.CompareTo) == 1 { + message = fmt.Sprintf("to be %s", matcher.Comparator) + } else { + message = fmt.Sprintf("to be within %v of %s", matcher.CompareTo[1], matcher.Comparator) + } + if negated { + message = "not " + message + } + return format.Message(actual, message, matcher.CompareTo[0]) +} + +func (matcher *BeNumericallyMatcher) Match(actual interface{}) (success bool, err error) { + if len(matcher.CompareTo) == 0 || len(matcher.CompareTo) > 2 { + return false, fmt.Errorf("BeNumerically requires 1 or 2 CompareTo arguments. Got:\n%s", format.Object(matcher.CompareTo, 1)) + } + if !isNumber(actual) { + return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(actual, 1)) + } + if !isNumber(matcher.CompareTo[0]) { + return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[0], 1)) + } + if len(matcher.CompareTo) == 2 && !isNumber(matcher.CompareTo[1]) { + return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[1], 1)) + } + + switch matcher.Comparator { + case "==", "~", ">", ">=", "<", "<=": + default: + return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator) + } + + if isFloat(actual) || isFloat(matcher.CompareTo[0]) { + var secondOperand float64 = 1e-8 + if len(matcher.CompareTo) == 2 { + secondOperand = toFloat(matcher.CompareTo[1]) + } + success = matcher.matchFloats(toFloat(actual), toFloat(matcher.CompareTo[0]), secondOperand) + } else if isInteger(actual) { + var secondOperand int64 = 0 + if len(matcher.CompareTo) == 2 { + secondOperand = toInteger(matcher.CompareTo[1]) + } + success = matcher.matchIntegers(toInteger(actual), toInteger(matcher.CompareTo[0]), secondOperand) + } else if isUnsignedInteger(actual) { + var secondOperand uint64 = 0 + if len(matcher.CompareTo) == 2 { + secondOperand = toUnsignedInteger(matcher.CompareTo[1]) + } + success = matcher.matchUnsignedIntegers(toUnsignedInteger(actual), toUnsignedInteger(matcher.CompareTo[0]), secondOperand) + } else { + return false, fmt.Errorf("Failed to compare:\n%s\n%s:\n%s", format.Object(actual, 1), matcher.Comparator, format.Object(matcher.CompareTo[0], 1)) + } + + return success, nil +} + +func (matcher *BeNumericallyMatcher) matchIntegers(actual, compareTo, threshold int64) (success bool) { + switch matcher.Comparator { + case "==", "~": + diff := actual - compareTo + return -threshold <= diff && diff <= threshold + case ">": + return (actual > compareTo) + case ">=": + return (actual >= compareTo) + case "<": + return (actual < compareTo) + case "<=": + return (actual <= compareTo) + } + return false +} + +func (matcher *BeNumericallyMatcher) matchUnsignedIntegers(actual, compareTo, threshold uint64) (success bool) { + switch matcher.Comparator { + case "==", "~": + if actual < compareTo { + actual, compareTo = compareTo, actual + } + return actual-compareTo <= threshold + case ">": + return (actual > compareTo) + case ">=": + return (actual >= compareTo) + case "<": + return (actual < compareTo) + case "<=": + return (actual <= compareTo) + } + return false +} + +func (matcher *BeNumericallyMatcher) matchFloats(actual, compareTo, threshold float64) (success bool) { + switch matcher.Comparator { + case "~": + return math.Abs(actual-compareTo) <= threshold + case "==": + return (actual == compareTo) + case ">": + return (actual > compareTo) + case ">=": + return (actual >= compareTo) + case "<": + return (actual < compareTo) + case "<=": + return (actual <= compareTo) + } + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go new file mode 100644 index 000000000000..cf582a3fcbd3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go @@ -0,0 +1,73 @@ +// untested sections: 3 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeSentMatcher struct { + Arg interface{} + channelClosed bool +} + +func (matcher *BeSentMatcher) Match(actual interface{}) (success bool, err error) { + if !isChan(actual) { + return false, fmt.Errorf("BeSent expects a channel. Got:\n%s", format.Object(actual, 1)) + } + + channelType := reflect.TypeOf(actual) + channelValue := reflect.ValueOf(actual) + + if channelType.ChanDir() == reflect.RecvDir { + return false, fmt.Errorf("BeSent matcher cannot be passed a receive-only channel. Got:\n%s", format.Object(actual, 1)) + } + + argType := reflect.TypeOf(matcher.Arg) + assignable := argType.AssignableTo(channelType.Elem()) + + if !assignable { + return false, fmt.Errorf("Cannot pass:\n%s to the channel:\n%s\nThe types don't match.", format.Object(matcher.Arg, 1), format.Object(actual, 1)) + } + + argValue := reflect.ValueOf(matcher.Arg) + + defer func() { + if e := recover(); e != nil { + success = false + err = fmt.Errorf("Cannot send to a closed channel") + matcher.channelClosed = true + } + }() + + winnerIndex, _, _ := reflect.Select([]reflect.SelectCase{ + {Dir: reflect.SelectSend, Chan: channelValue, Send: argValue}, + {Dir: reflect.SelectDefault}, + }) + + var didSend bool + if winnerIndex == 0 { + didSend = true + } + + return didSend, nil +} + +func (matcher *BeSentMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to send:", matcher.Arg) +} + +func (matcher *BeSentMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to send:", matcher.Arg) +} + +func (matcher *BeSentMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + if !isChan(actual) { + return false + } + + return !matcher.channelClosed +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go new file mode 100644 index 000000000000..dec4db024e40 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go @@ -0,0 +1,68 @@ +// untested sections: 3 + +package matchers + +import ( + "fmt" + "time" + + "github.com/onsi/gomega/format" +) + +type BeTemporallyMatcher struct { + Comparator string + CompareTo time.Time + Threshold []time.Duration +} + +func (matcher *BeTemporallyMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("to be %s", matcher.Comparator), matcher.CompareTo) +} + +func (matcher *BeTemporallyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, fmt.Sprintf("not to be %s", matcher.Comparator), matcher.CompareTo) +} + +func (matcher *BeTemporallyMatcher) Match(actual interface{}) (bool, error) { + // predicate to test for time.Time type + isTime := func(t interface{}) bool { + _, ok := t.(time.Time) + return ok + } + + if !isTime(actual) { + return false, fmt.Errorf("Expected a time.Time. Got:\n%s", format.Object(actual, 1)) + } + + switch matcher.Comparator { + case "==", "~", ">", ">=", "<", "<=": + default: + return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator) + } + + var threshold = time.Millisecond + if len(matcher.Threshold) == 1 { + threshold = matcher.Threshold[0] + } + + return matcher.matchTimes(actual.(time.Time), matcher.CompareTo, threshold), nil +} + +func (matcher *BeTemporallyMatcher) matchTimes(actual, compareTo time.Time, threshold time.Duration) (success bool) { + switch matcher.Comparator { + case "==": + return actual.Equal(compareTo) + case "~": + diff := actual.Sub(compareTo) + return -threshold <= diff && diff <= threshold + case ">": + return actual.After(compareTo) + case ">=": + return !actual.Before(compareTo) + case "<": + return actual.Before(compareTo) + case "<=": + return !actual.After(compareTo) + } + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go new file mode 100644 index 000000000000..60bc1e3fa7e3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go @@ -0,0 +1,28 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type BeTrueMatcher struct { +} + +func (matcher *BeTrueMatcher) Match(actual interface{}) (success bool, err error) { + if !isBool(actual) { + return false, fmt.Errorf("Expected a boolean. Got:\n%s", format.Object(actual, 1)) + } + + return actual.(bool), nil +} + +func (matcher *BeTrueMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be true") +} + +func (matcher *BeTrueMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be true") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go new file mode 100644 index 000000000000..26196f168f41 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go @@ -0,0 +1,28 @@ +package matchers + +import ( + "reflect" + + "github.com/onsi/gomega/format" +) + +type BeZeroMatcher struct { +} + +func (matcher *BeZeroMatcher) Match(actual interface{}) (success bool, err error) { + if actual == nil { + return true, nil + } + zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface() + + return reflect.DeepEqual(zeroValue, actual), nil + +} + +func (matcher *BeZeroMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to be zero-valued") +} + +func (matcher *BeZeroMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to be zero-valued") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/consist_of.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/consist_of.go new file mode 100644 index 000000000000..f69037a4f0ef --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/consist_of.go @@ -0,0 +1,153 @@ +// untested sections: 3 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/matchers/support/goraph/bipartitegraph" +) + +type ConsistOfMatcher struct { + Elements []interface{} + missingElements []interface{} + extraElements []interface{} +} + +func (matcher *ConsistOfMatcher) Match(actual interface{}) (success bool, err error) { + if !isArrayOrSlice(actual) && !isMap(actual) { + return false, fmt.Errorf("ConsistOf matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1)) + } + + matchers := matchers(matcher.Elements) + values := valuesOf(actual) + + bipartiteGraph, err := bipartitegraph.NewBipartiteGraph(values, matchers, neighbours) + if err != nil { + return false, err + } + + edges := bipartiteGraph.LargestMatching() + if len(edges) == len(values) && len(edges) == len(matchers) { + return true, nil + } + + var missingMatchers []interface{} + matcher.extraElements, missingMatchers = bipartiteGraph.FreeLeftRight(edges) + matcher.missingElements = equalMatchersToElements(missingMatchers) + + return false, nil +} + +func neighbours(value, matcher interface{}) (bool, error) { + match, err := matcher.(omegaMatcher).Match(value) + return match && err == nil, nil +} + +func equalMatchersToElements(matchers []interface{}) (elements []interface{}) { + for _, matcher := range matchers { + if equalMatcher, ok := matcher.(*EqualMatcher); ok { + elements = append(elements, equalMatcher.Expected) + } else if _, ok := matcher.(*BeNilMatcher); ok { + elements = append(elements, nil) + } else { + elements = append(elements, matcher) + } + } + return +} + +func flatten(elems []interface{}) []interface{} { + if len(elems) != 1 || !isArrayOrSlice(elems[0]) { + return elems + } + + value := reflect.ValueOf(elems[0]) + flattened := make([]interface{}, value.Len()) + for i := 0; i < value.Len(); i++ { + flattened[i] = value.Index(i).Interface() + } + return flattened +} + +func matchers(expectedElems []interface{}) (matchers []interface{}) { + for _, e := range flatten(expectedElems) { + if e == nil { + matchers = append(matchers, &BeNilMatcher{}) + } else if matcher, isMatcher := e.(omegaMatcher); isMatcher { + matchers = append(matchers, matcher) + } else { + matchers = append(matchers, &EqualMatcher{Expected: e}) + } + } + return +} + +func presentable(elems []interface{}) interface{} { + elems = flatten(elems) + + if len(elems) == 0 { + return []interface{}{} + } + + sv := reflect.ValueOf(elems) + firstEl := sv.Index(0) + if firstEl.IsNil() { + return elems + } + tt := firstEl.Elem().Type() + for i := 1; i < sv.Len(); i++ { + el := sv.Index(i) + if el.IsNil() || (sv.Index(i).Elem().Type() != tt) { + return elems + } + } + + ss := reflect.MakeSlice(reflect.SliceOf(tt), sv.Len(), sv.Len()) + for i := 0; i < sv.Len(); i++ { + ss.Index(i).Set(sv.Index(i).Elem()) + } + + return ss.Interface() +} + +func valuesOf(actual interface{}) []interface{} { + value := reflect.ValueOf(actual) + values := []interface{}{} + if isMap(actual) { + keys := value.MapKeys() + for i := 0; i < value.Len(); i++ { + values = append(values, value.MapIndex(keys[i]).Interface()) + } + } else { + for i := 0; i < value.Len(); i++ { + values = append(values, value.Index(i).Interface()) + } + } + + return values +} + +func (matcher *ConsistOfMatcher) FailureMessage(actual interface{}) (message string) { + message = format.Message(actual, "to consist of", presentable(matcher.Elements)) + message = appendMissingElements(message, matcher.missingElements) + if len(matcher.extraElements) > 0 { + message = fmt.Sprintf("%s\nthe extra elements were\n%s", message, + format.Object(presentable(matcher.extraElements), 1)) + } + return +} + +func appendMissingElements(message string, missingElements []interface{}) string { + if len(missingElements) == 0 { + return message + } + return fmt.Sprintf("%s\nthe missing elements were\n%s", message, + format.Object(presentable(missingElements), 1)) +} + +func (matcher *ConsistOfMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to consist of", presentable(matcher.Elements)) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go new file mode 100644 index 000000000000..3d45c9ebc696 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go @@ -0,0 +1,174 @@ +// untested sections: 2 + +package matchers + +import ( + "errors" + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type ContainElementMatcher struct { + Element interface{} + Result []interface{} +} + +func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, err error) { + if !isArrayOrSlice(actual) && !isMap(actual) { + return false, fmt.Errorf("ContainElement matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1)) + } + + var actualT reflect.Type + var result reflect.Value + switch l := len(matcher.Result); { + case l > 1: + return false, errors.New("ContainElement matcher expects at most a single optional pointer to store its findings at") + case l == 1: + if reflect.ValueOf(matcher.Result[0]).Kind() != reflect.Ptr { + return false, fmt.Errorf("ContainElement matcher expects a non-nil pointer to store its findings at. Got\n%s", + format.Object(matcher.Result[0], 1)) + } + actualT = reflect.TypeOf(actual) + resultReference := matcher.Result[0] + result = reflect.ValueOf(resultReference).Elem() // what ResultReference points to, to stash away our findings + switch result.Kind() { + case reflect.Array: + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + reflect.SliceOf(actualT.Elem()).String(), result.Type().String()) + case reflect.Slice: + if !isArrayOrSlice(actual) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + reflect.MapOf(actualT.Key(), actualT.Elem()).String(), result.Type().String()) + } + if !actualT.Elem().AssignableTo(result.Type().Elem()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + case reflect.Map: + if !isMap(actual) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + if !actualT.AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + default: + if !actualT.Elem().AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.Elem().String(), result.Type().String()) + } + } + } + + elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher) + if !elementIsMatcher { + elemMatcher = &EqualMatcher{Expected: matcher.Element} + } + + value := reflect.ValueOf(actual) + var valueAt func(int) interface{} + + var getFindings func() reflect.Value + var foundAt func(int) + + if isMap(actual) { + keys := value.MapKeys() + valueAt = func(i int) interface{} { + return value.MapIndex(keys[i]).Interface() + } + if result.Kind() != reflect.Invalid { + fm := reflect.MakeMap(actualT) + getFindings = func() reflect.Value { + return fm + } + foundAt = func(i int) { + fm.SetMapIndex(keys[i], value.MapIndex(keys[i])) + } + } + } else { + valueAt = func(i int) interface{} { + return value.Index(i).Interface() + } + if result.Kind() != reflect.Invalid { + var f reflect.Value + if result.Kind() == reflect.Slice { + f = reflect.MakeSlice(result.Type(), 0, 0) + } else { + f = reflect.MakeSlice(reflect.SliceOf(result.Type()), 0, 0) + } + getFindings = func() reflect.Value { + return f + } + foundAt = func(i int) { + f = reflect.Append(f, value.Index(i)) + } + } + } + + var lastError error + for i := 0; i < value.Len(); i++ { + elem := valueAt(i) + success, err := elemMatcher.Match(elem) + if err != nil { + lastError = err + continue + } + if success { + if result.Kind() == reflect.Invalid { + return true, nil + } + foundAt(i) + } + } + + // when the expectation isn't interested in the findings except for success + // or non-success, then we're done here and return the last matcher error + // seen, if any, as well as non-success. + if result.Kind() == reflect.Invalid { + return false, lastError + } + + // pick up any findings the test is interested in as it specified a non-nil + // result reference. However, the expection always is that there are at + // least one or multiple findings. So, if a result is expected, but we had + // no findings, then this is an error. + findings := getFindings() + if findings.Len() == 0 { + return false, lastError + } + + // there's just a single finding and the result is neither a slice nor a map + // (so it's a scalar): pick the one and only finding and return it in the + // place the reference points to. + if findings.Len() == 1 && !isArrayOrSlice(result.Interface()) && !isMap(result.Interface()) { + if isMap(actual) { + miter := findings.MapRange() + miter.Next() + result.Set(miter.Value()) + } else { + result.Set(findings.Index(0)) + } + return true, nil + } + + // at least one or even multiple findings and a the result references a + // slice or a map, so all we need to do is to store our findings where the + // reference points to. + if !findings.Type().AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return multiple findings. Need *%s, got *%s", + findings.Type().String(), result.Type().String()) + } + result.Set(findings) + return true, nil +} + +func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to contain element matching", matcher.Element) +} + +func (matcher *ContainElementMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain element matching", matcher.Element) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go new file mode 100644 index 000000000000..946cd8bea526 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go @@ -0,0 +1,44 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/matchers/support/goraph/bipartitegraph" +) + +type ContainElementsMatcher struct { + Elements []interface{} + missingElements []interface{} +} + +func (matcher *ContainElementsMatcher) Match(actual interface{}) (success bool, err error) { + if !isArrayOrSlice(actual) && !isMap(actual) { + return false, fmt.Errorf("ContainElements matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1)) + } + + matchers := matchers(matcher.Elements) + bipartiteGraph, err := bipartitegraph.NewBipartiteGraph(valuesOf(actual), matchers, neighbours) + if err != nil { + return false, err + } + + edges := bipartiteGraph.LargestMatching() + if len(edges) == len(matchers) { + return true, nil + } + + _, missingMatchers := bipartiteGraph.FreeLeftRight(edges) + matcher.missingElements = equalMatchersToElements(missingMatchers) + + return false, nil +} + +func (matcher *ContainElementsMatcher) FailureMessage(actual interface{}) (message string) { + message = format.Message(actual, "to contain elements", presentable(matcher.Elements)) + return appendMissingElements(message, matcher.missingElements) +} + +func (matcher *ContainElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain elements", presentable(matcher.Elements)) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go new file mode 100644 index 000000000000..e725f8c27539 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go @@ -0,0 +1,40 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + "strings" + + "github.com/onsi/gomega/format" +) + +type ContainSubstringMatcher struct { + Substr string + Args []interface{} +} + +func (matcher *ContainSubstringMatcher) Match(actual interface{}) (success bool, err error) { + actualString, ok := toString(actual) + if !ok { + return false, fmt.Errorf("ContainSubstring matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1)) + } + + return strings.Contains(actualString, matcher.stringToMatch()), nil +} + +func (matcher *ContainSubstringMatcher) stringToMatch() string { + stringToMatch := matcher.Substr + if len(matcher.Args) > 0 { + stringToMatch = fmt.Sprintf(matcher.Substr, matcher.Args...) + } + return stringToMatch +} + +func (matcher *ContainSubstringMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to contain substring", matcher.stringToMatch()) +} + +func (matcher *ContainSubstringMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain substring", matcher.stringToMatch()) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/equal_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/equal_matcher.go new file mode 100644 index 000000000000..befb7bdfd8f9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/equal_matcher.go @@ -0,0 +1,42 @@ +package matchers + +import ( + "bytes" + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type EqualMatcher struct { + Expected interface{} +} + +func (matcher *EqualMatcher) Match(actual interface{}) (success bool, err error) { + if actual == nil && matcher.Expected == nil { + return false, fmt.Errorf("Refusing to compare to .\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.") + } + // Shortcut for byte slices. + // Comparing long byte slices with reflect.DeepEqual is very slow, + // so use bytes.Equal if actual and expected are both byte slices. + if actualByteSlice, ok := actual.([]byte); ok { + if expectedByteSlice, ok := matcher.Expected.([]byte); ok { + return bytes.Equal(actualByteSlice, expectedByteSlice), nil + } + } + return reflect.DeepEqual(actual, matcher.Expected), nil +} + +func (matcher *EqualMatcher) FailureMessage(actual interface{}) (message string) { + actualString, actualOK := actual.(string) + expectedString, expectedOK := matcher.Expected.(string) + if actualOK && expectedOK { + return format.MessageWithDiff(actualString, "to equal", expectedString) + } + + return format.Message(actual, "to equal", matcher.Expected) +} + +func (matcher *EqualMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to equal", matcher.Expected) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go new file mode 100644 index 000000000000..9856752f13ff --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go @@ -0,0 +1,30 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveCapMatcher struct { + Count int +} + +func (matcher *HaveCapMatcher) Match(actual interface{}) (success bool, err error) { + length, ok := capOf(actual) + if !ok { + return false, fmt.Errorf("HaveCap matcher expects a array/channel/slice. Got:\n%s", format.Object(actual, 1)) + } + + return length == matcher.Count, nil +} + +func (matcher *HaveCapMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nto have capacity %d", format.Object(actual, 1), matcher.Count) +} + +func (matcher *HaveCapMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nnot to have capacity %d", format.Object(actual, 1), matcher.Count) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go new file mode 100644 index 000000000000..025b6e1ac2c2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go @@ -0,0 +1,65 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type HaveEachMatcher struct { + Element interface{} +} + +func (matcher *HaveEachMatcher) Match(actual interface{}) (success bool, err error) { + if !isArrayOrSlice(actual) && !isMap(actual) { + return false, fmt.Errorf("HaveEach matcher expects an array/slice/map. Got:\n%s", + format.Object(actual, 1)) + } + + elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher) + if !elementIsMatcher { + elemMatcher = &EqualMatcher{Expected: matcher.Element} + } + + value := reflect.ValueOf(actual) + if value.Len() == 0 { + return false, fmt.Errorf("HaveEach matcher expects a non-empty array/slice/map. Got:\n%s", + format.Object(actual, 1)) + } + + var valueAt func(int) interface{} + if isMap(actual) { + keys := value.MapKeys() + valueAt = func(i int) interface{} { + return value.MapIndex(keys[i]).Interface() + } + } else { + valueAt = func(i int) interface{} { + return value.Index(i).Interface() + } + } + + // if there are no elements, then HaveEach will match. + for i := 0; i < value.Len(); i++ { + success, err := elemMatcher.Match(valueAt(i)) + if err != nil { + return false, err + } + if !success { + return false, nil + } + } + + return true, nil +} + +// FailureMessage returns a suitable failure message. +func (matcher *HaveEachMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to contain element matching", matcher.Element) +} + +// NegatedFailureMessage returns a suitable negated failure message. +func (matcher *HaveEachMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain element matching", matcher.Element) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go new file mode 100644 index 000000000000..7cce776c1843 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go @@ -0,0 +1,83 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type mismatchFailure struct { + failure string + index int +} + +type HaveExactElementsMatcher struct { + Elements []interface{} + mismatchFailures []mismatchFailure + missingIndex int + extraIndex int +} + +func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool, err error) { + matcher.resetState() + + if isMap(actual) { + return false, fmt.Errorf("error") + } + + matchers := matchers(matcher.Elements) + values := valuesOf(actual) + + lenMatchers := len(matchers) + lenValues := len(values) + + for i := 0; i < lenMatchers || i < lenValues; i++ { + if i >= lenMatchers { + matcher.extraIndex = i + continue + } + + if i >= lenValues { + matcher.missingIndex = i + return + } + + elemMatcher := matchers[i].(omegaMatcher) + match, err := elemMatcher.Match(values[i]) + if err != nil || !match { + matcher.mismatchFailures = append(matcher.mismatchFailures, mismatchFailure{ + index: i, + failure: elemMatcher.FailureMessage(values[i]), + }) + } + } + + return matcher.missingIndex+matcher.extraIndex+len(matcher.mismatchFailures) == 0, nil +} + +func (matcher *HaveExactElementsMatcher) FailureMessage(actual interface{}) (message string) { + message = format.Message(actual, "to have exact elements with", presentable(matcher.Elements)) + if matcher.missingIndex > 0 { + message = fmt.Sprintf("%s\nthe missing elements start from index %d", message, matcher.missingIndex) + } + if matcher.extraIndex > 0 { + message = fmt.Sprintf("%s\nthe extra elements start from index %d", message, matcher.extraIndex) + } + if len(matcher.mismatchFailures) != 0 { + message = fmt.Sprintf("%s\nthe mismatch indexes were:", message) + } + for _, mismatch := range matcher.mismatchFailures { + message = fmt.Sprintf("%s\n%d: %s", message, mismatch.index, mismatch.failure) + } + return +} + +func (matcher *HaveExactElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain elements", presentable(matcher.Elements)) +} + +func (matcher *HaveExactElementsMatcher) resetState() { + matcher.mismatchFailures = nil + matcher.missingIndex = 0 + matcher.extraIndex = 0 +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go new file mode 100644 index 000000000000..b57018745fae --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go @@ -0,0 +1,36 @@ +package matchers + +import ( + "errors" + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveExistingFieldMatcher struct { + Field string +} + +func (matcher *HaveExistingFieldMatcher) Match(actual interface{}) (success bool, err error) { + // we don't care about the field's actual value, just about any error in + // trying to find the field (or method). + _, err = extractField(actual, matcher.Field, "HaveExistingField") + if err == nil { + return true, nil + } + var mferr missingFieldError + if errors.As(err, &mferr) { + // missing field errors aren't errors in this context, but instead + // unsuccessful matches. + return false, nil + } + return false, err +} + +func (matcher *HaveExistingFieldMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nto have field '%s'", format.Object(actual, 1), matcher.Field) +} + +func (matcher *HaveExistingFieldMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nnot to have field '%s'", format.Object(actual, 1), matcher.Field) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_field.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_field.go new file mode 100644 index 000000000000..6989f78c4b40 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_field.go @@ -0,0 +1,99 @@ +package matchers + +import ( + "fmt" + "reflect" + "strings" + + "github.com/onsi/gomega/format" +) + +// missingFieldError represents a missing field extraction error that +// HaveExistingFieldMatcher can ignore, as opposed to other, sever field +// extraction errors, such as nil pointers, et cetera. +type missingFieldError string + +func (e missingFieldError) Error() string { + return string(e) +} + +func extractField(actual interface{}, field string, matchername string) (interface{}, error) { + fields := strings.SplitN(field, ".", 2) + actualValue := reflect.ValueOf(actual) + + if actualValue.Kind() == reflect.Ptr { + actualValue = actualValue.Elem() + } + if actualValue == (reflect.Value{}) { + return nil, fmt.Errorf("%s encountered nil while dereferencing a pointer of type %T.", matchername, actual) + } + + if actualValue.Kind() != reflect.Struct { + return nil, fmt.Errorf("%s encountered:\n%s\nWhich is not a struct.", matchername, format.Object(actual, 1)) + } + + var extractedValue reflect.Value + + if strings.HasSuffix(fields[0], "()") { + extractedValue = actualValue.MethodByName(strings.TrimSuffix(fields[0], "()")) + if extractedValue == (reflect.Value{}) && actualValue.CanAddr() { + extractedValue = actualValue.Addr().MethodByName(strings.TrimSuffix(fields[0], "()")) + } + if extractedValue == (reflect.Value{}) { + return nil, missingFieldError(fmt.Sprintf("%s could not find method named '%s' in struct of type %T.", matchername, fields[0], actual)) + } + t := extractedValue.Type() + if t.NumIn() != 0 || t.NumOut() != 1 { + return nil, fmt.Errorf("%s found an invalid method named '%s' in struct of type %T.\nMethods must take no arguments and return exactly one value.", matchername, fields[0], actual) + } + extractedValue = extractedValue.Call([]reflect.Value{})[0] + } else { + extractedValue = actualValue.FieldByName(fields[0]) + if extractedValue == (reflect.Value{}) { + return nil, missingFieldError(fmt.Sprintf("%s could not find field named '%s' in struct:\n%s", matchername, fields[0], format.Object(actual, 1))) + } + } + + if len(fields) == 1 { + return extractedValue.Interface(), nil + } else { + return extractField(extractedValue.Interface(), fields[1], matchername) + } +} + +type HaveFieldMatcher struct { + Field string + Expected interface{} + + extractedField interface{} + expectedMatcher omegaMatcher +} + +func (matcher *HaveFieldMatcher) Match(actual interface{}) (success bool, err error) { + matcher.extractedField, err = extractField(actual, matcher.Field, "HaveField") + if err != nil { + return false, err + } + + var isMatcher bool + matcher.expectedMatcher, isMatcher = matcher.Expected.(omegaMatcher) + if !isMatcher { + matcher.expectedMatcher = &EqualMatcher{Expected: matcher.Expected} + } + + return matcher.expectedMatcher.Match(matcher.extractedField) +} + +func (matcher *HaveFieldMatcher) FailureMessage(actual interface{}) (message string) { + message = fmt.Sprintf("Value for field '%s' failed to satisfy matcher.\n", matcher.Field) + message += matcher.expectedMatcher.FailureMessage(matcher.extractedField) + + return message +} + +func (matcher *HaveFieldMatcher) NegatedFailureMessage(actual interface{}) (message string) { + message = fmt.Sprintf("Value for field '%s' satisfied matcher, but should not have.\n", matcher.Field) + message += matcher.expectedMatcher.NegatedFailureMessage(matcher.extractedField) + + return message +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go new file mode 100644 index 000000000000..6a3dcdc35334 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go @@ -0,0 +1,101 @@ +package matchers + +import ( + "fmt" + "net/http" + "net/http/httptest" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/internal/gutil" + "github.com/onsi/gomega/types" +) + +type HaveHTTPBodyMatcher struct { + Expected interface{} + cachedBody []byte +} + +func (matcher *HaveHTTPBodyMatcher) Match(actual interface{}) (bool, error) { + body, err := matcher.body(actual) + if err != nil { + return false, err + } + + switch e := matcher.Expected.(type) { + case string: + return (&EqualMatcher{Expected: e}).Match(string(body)) + case []byte: + return (&EqualMatcher{Expected: e}).Match(body) + case types.GomegaMatcher: + return e.Match(body) + default: + return false, fmt.Errorf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1)) + } +} + +func (matcher *HaveHTTPBodyMatcher) FailureMessage(actual interface{}) (message string) { + body, err := matcher.body(actual) + if err != nil { + return fmt.Sprintf("failed to read body: %s", err) + } + + switch e := matcher.Expected.(type) { + case string: + return (&EqualMatcher{Expected: e}).FailureMessage(string(body)) + case []byte: + return (&EqualMatcher{Expected: e}).FailureMessage(body) + case types.GomegaMatcher: + return e.FailureMessage(body) + default: + return fmt.Sprintf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1)) + } +} + +func (matcher *HaveHTTPBodyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + body, err := matcher.body(actual) + if err != nil { + return fmt.Sprintf("failed to read body: %s", err) + } + + switch e := matcher.Expected.(type) { + case string: + return (&EqualMatcher{Expected: e}).NegatedFailureMessage(string(body)) + case []byte: + return (&EqualMatcher{Expected: e}).NegatedFailureMessage(body) + case types.GomegaMatcher: + return e.NegatedFailureMessage(body) + default: + return fmt.Sprintf("HaveHTTPBody matcher expects string, []byte, or GomegaMatcher. Got:\n%s", format.Object(matcher.Expected, 1)) + } +} + +// body returns the body. It is cached because once we read it in Match() +// the Reader is closed and it is not readable again in FailureMessage() +// or NegatedFailureMessage() +func (matcher *HaveHTTPBodyMatcher) body(actual interface{}) ([]byte, error) { + if matcher.cachedBody != nil { + return matcher.cachedBody, nil + } + + body := func(a *http.Response) ([]byte, error) { + if a.Body != nil { + defer a.Body.Close() + var err error + matcher.cachedBody, err = gutil.ReadAll(a.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %w", err) + } + } + return matcher.cachedBody, nil + } + + switch a := actual.(type) { + case *http.Response: + return body(a) + case *httptest.ResponseRecorder: + return body(a.Result()) + default: + return nil, fmt.Errorf("HaveHTTPBody matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1)) + } + +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go new file mode 100644 index 000000000000..c256f452e84f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go @@ -0,0 +1,81 @@ +package matchers + +import ( + "fmt" + "net/http" + "net/http/httptest" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +type HaveHTTPHeaderWithValueMatcher struct { + Header string + Value interface{} +} + +func (matcher *HaveHTTPHeaderWithValueMatcher) Match(actual interface{}) (success bool, err error) { + headerValue, err := matcher.extractHeader(actual) + if err != nil { + return false, err + } + + headerMatcher, err := matcher.getSubMatcher() + if err != nil { + return false, err + } + + return headerMatcher.Match(headerValue) +} + +func (matcher *HaveHTTPHeaderWithValueMatcher) FailureMessage(actual interface{}) string { + headerValue, err := matcher.extractHeader(actual) + if err != nil { + panic(err) // protected by Match() + } + + headerMatcher, err := matcher.getSubMatcher() + if err != nil { + panic(err) // protected by Match() + } + + diff := format.IndentString(headerMatcher.FailureMessage(headerValue), 1) + return fmt.Sprintf("HTTP header %q:\n%s", matcher.Header, diff) +} + +func (matcher *HaveHTTPHeaderWithValueMatcher) NegatedFailureMessage(actual interface{}) (message string) { + headerValue, err := matcher.extractHeader(actual) + if err != nil { + panic(err) // protected by Match() + } + + headerMatcher, err := matcher.getSubMatcher() + if err != nil { + panic(err) // protected by Match() + } + + diff := format.IndentString(headerMatcher.NegatedFailureMessage(headerValue), 1) + return fmt.Sprintf("HTTP header %q:\n%s", matcher.Header, diff) +} + +func (matcher *HaveHTTPHeaderWithValueMatcher) getSubMatcher() (types.GomegaMatcher, error) { + switch m := matcher.Value.(type) { + case string: + return &EqualMatcher{Expected: matcher.Value}, nil + case types.GomegaMatcher: + return m, nil + default: + return nil, fmt.Errorf("HaveHTTPHeaderWithValue matcher must be passed a string or a GomegaMatcher. Got:\n%s", format.Object(matcher.Value, 1)) + } +} + +func (matcher *HaveHTTPHeaderWithValueMatcher) extractHeader(actual interface{}) (string, error) { + switch r := actual.(type) { + case *http.Response: + return r.Header.Get(matcher.Header), nil + case *httptest.ResponseRecorder: + return r.Result().Header.Get(matcher.Header), nil + default: + return "", fmt.Errorf("HaveHTTPHeaderWithValue matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1)) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go new file mode 100644 index 000000000000..0f66e46ece47 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go @@ -0,0 +1,96 @@ +package matchers + +import ( + "fmt" + "net/http" + "net/http/httptest" + "reflect" + "strings" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/internal/gutil" +) + +type HaveHTTPStatusMatcher struct { + Expected []interface{} +} + +func (matcher *HaveHTTPStatusMatcher) Match(actual interface{}) (success bool, err error) { + var resp *http.Response + switch a := actual.(type) { + case *http.Response: + resp = a + case *httptest.ResponseRecorder: + resp = a.Result() + default: + return false, fmt.Errorf("HaveHTTPStatus matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1)) + } + + if len(matcher.Expected) == 0 { + return false, fmt.Errorf("HaveHTTPStatus matcher must be passed an int or a string. Got nothing") + } + + for _, expected := range matcher.Expected { + switch e := expected.(type) { + case int: + if resp.StatusCode == e { + return true, nil + } + case string: + if resp.Status == e { + return true, nil + } + default: + return false, fmt.Errorf("HaveHTTPStatus matcher must be passed int or string types. Got:\n%s", format.Object(expected, 1)) + } + } + + return false, nil +} + +func (matcher *HaveHTTPStatusMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\n%s\n%s", formatHttpResponse(actual), "to have HTTP status", matcher.expectedString()) +} + +func (matcher *HaveHTTPStatusMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\n%s\n%s", formatHttpResponse(actual), "not to have HTTP status", matcher.expectedString()) +} + +func (matcher *HaveHTTPStatusMatcher) expectedString() string { + var lines []string + for _, expected := range matcher.Expected { + lines = append(lines, format.Object(expected, 1)) + } + return strings.Join(lines, "\n") +} + +func formatHttpResponse(input interface{}) string { + var resp *http.Response + switch r := input.(type) { + case *http.Response: + resp = r + case *httptest.ResponseRecorder: + resp = r.Result() + default: + return "cannot format invalid HTTP response" + } + + body := "" + if resp.Body != nil { + defer resp.Body.Close() + data, err := gutil.ReadAll(resp.Body) + if err != nil { + data = []byte("") + } + body = format.Object(string(data), 0) + } + + var s strings.Builder + s.WriteString(fmt.Sprintf("%s<%s>: {\n", format.Indent, reflect.TypeOf(input))) + s.WriteString(fmt.Sprintf("%s%sStatus: %s\n", format.Indent, format.Indent, format.Object(resp.Status, 0))) + s.WriteString(fmt.Sprintf("%s%sStatusCode: %s\n", format.Indent, format.Indent, format.Object(resp.StatusCode, 0))) + s.WriteString(fmt.Sprintf("%s%sBody: %s\n", format.Indent, format.Indent, body)) + s.WriteString(fmt.Sprintf("%s}", format.Indent)) + + return s.String() +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go new file mode 100644 index 000000000000..00cffec70e0a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go @@ -0,0 +1,56 @@ +// untested sections: 6 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type HaveKeyMatcher struct { + Key interface{} +} + +func (matcher *HaveKeyMatcher) Match(actual interface{}) (success bool, err error) { + if !isMap(actual) { + return false, fmt.Errorf("HaveKey matcher expects a map. Got:%s", format.Object(actual, 1)) + } + + keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher) + if !keyIsMatcher { + keyMatcher = &EqualMatcher{Expected: matcher.Key} + } + + keys := reflect.ValueOf(actual).MapKeys() + for i := 0; i < len(keys); i++ { + success, err := keyMatcher.Match(keys[i].Interface()) + if err != nil { + return false, fmt.Errorf("HaveKey's key matcher failed with:\n%s%s", format.Indent, err.Error()) + } + if success { + return true, nil + } + } + + return false, nil +} + +func (matcher *HaveKeyMatcher) FailureMessage(actual interface{}) (message string) { + switch matcher.Key.(type) { + case omegaMatcher: + return format.Message(actual, "to have key matching", matcher.Key) + default: + return format.Message(actual, "to have key", matcher.Key) + } +} + +func (matcher *HaveKeyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + switch matcher.Key.(type) { + case omegaMatcher: + return format.Message(actual, "not to have key matching", matcher.Key) + default: + return format.Message(actual, "not to have key", matcher.Key) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go new file mode 100644 index 000000000000..4c5916804703 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go @@ -0,0 +1,76 @@ +// untested sections:10 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type HaveKeyWithValueMatcher struct { + Key interface{} + Value interface{} +} + +func (matcher *HaveKeyWithValueMatcher) Match(actual interface{}) (success bool, err error) { + if !isMap(actual) { + return false, fmt.Errorf("HaveKeyWithValue matcher expects a map. Got:%s", format.Object(actual, 1)) + } + + keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher) + if !keyIsMatcher { + keyMatcher = &EqualMatcher{Expected: matcher.Key} + } + + valueMatcher, valueIsMatcher := matcher.Value.(omegaMatcher) + if !valueIsMatcher { + valueMatcher = &EqualMatcher{Expected: matcher.Value} + } + + keys := reflect.ValueOf(actual).MapKeys() + for i := 0; i < len(keys); i++ { + success, err := keyMatcher.Match(keys[i].Interface()) + if err != nil { + return false, fmt.Errorf("HaveKeyWithValue's key matcher failed with:\n%s%s", format.Indent, err.Error()) + } + if success { + actualValue := reflect.ValueOf(actual).MapIndex(keys[i]) + success, err := valueMatcher.Match(actualValue.Interface()) + if err != nil { + return false, fmt.Errorf("HaveKeyWithValue's value matcher failed with:\n%s%s", format.Indent, err.Error()) + } + return success, nil + } + } + + return false, nil +} + +func (matcher *HaveKeyWithValueMatcher) FailureMessage(actual interface{}) (message string) { + str := "to have {key: value}" + if _, ok := matcher.Key.(omegaMatcher); ok { + str += " matching" + } else if _, ok := matcher.Value.(omegaMatcher); ok { + str += " matching" + } + + expect := make(map[interface{}]interface{}, 1) + expect[matcher.Key] = matcher.Value + return format.Message(actual, str, expect) +} + +func (matcher *HaveKeyWithValueMatcher) NegatedFailureMessage(actual interface{}) (message string) { + kStr := "not to have key" + if _, ok := matcher.Key.(omegaMatcher); ok { + kStr = "not to have key matching" + } + + vStr := "or that key's value not be" + if _, ok := matcher.Value.(omegaMatcher); ok { + vStr = "or to have that key's value not matching" + } + + return format.Message(actual, kStr, matcher.Key, vStr, matcher.Value) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go new file mode 100644 index 000000000000..ee4276189de7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go @@ -0,0 +1,28 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveLenMatcher struct { + Count int +} + +func (matcher *HaveLenMatcher) Match(actual interface{}) (success bool, err error) { + length, ok := lengthOf(actual) + if !ok { + return false, fmt.Errorf("HaveLen matcher expects a string/array/map/channel/slice. Got:\n%s", format.Object(actual, 1)) + } + + return length == matcher.Count, nil +} + +func (matcher *HaveLenMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nto have length %d", format.Object(actual, 1), matcher.Count) +} + +func (matcher *HaveLenMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected\n%s\nnot to have length %d", format.Object(actual, 1), matcher.Count) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go new file mode 100644 index 000000000000..22a1b67306fc --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go @@ -0,0 +1,35 @@ +// untested sections: 2 + +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveOccurredMatcher struct { +} + +func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) { + // is purely nil? + if actual == nil { + return false, nil + } + + // must be an 'error' type + if !isError(actual) { + return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1)) + } + + // must be non-nil (or a pointer to a non-nil) + return !isNil(actual), nil +} + +func (matcher *HaveOccurredMatcher) FailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Expected an error to have occurred. Got:\n%s", format.Object(actual, 1)) +} + +func (matcher *HaveOccurredMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return fmt.Sprintf("Unexpected error:\n%s\n%s", format.Object(actual, 1), "occurred") +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go new file mode 100644 index 000000000000..1d8e80270b34 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go @@ -0,0 +1,36 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HavePrefixMatcher struct { + Prefix string + Args []interface{} +} + +func (matcher *HavePrefixMatcher) Match(actual interface{}) (success bool, err error) { + actualString, ok := toString(actual) + if !ok { + return false, fmt.Errorf("HavePrefix matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1)) + } + prefix := matcher.prefix() + return len(actualString) >= len(prefix) && actualString[0:len(prefix)] == prefix, nil +} + +func (matcher *HavePrefixMatcher) prefix() string { + if len(matcher.Args) > 0 { + return fmt.Sprintf(matcher.Prefix, matcher.Args...) + } + return matcher.Prefix +} + +func (matcher *HavePrefixMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to have prefix", matcher.prefix()) +} + +func (matcher *HavePrefixMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to have prefix", matcher.prefix()) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go new file mode 100644 index 000000000000..40a3526eb2da --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go @@ -0,0 +1,36 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" +) + +type HaveSuffixMatcher struct { + Suffix string + Args []interface{} +} + +func (matcher *HaveSuffixMatcher) Match(actual interface{}) (success bool, err error) { + actualString, ok := toString(actual) + if !ok { + return false, fmt.Errorf("HaveSuffix matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1)) + } + suffix := matcher.suffix() + return len(actualString) >= len(suffix) && actualString[len(actualString)-len(suffix):] == suffix, nil +} + +func (matcher *HaveSuffixMatcher) suffix() string { + if len(matcher.Args) > 0 { + return fmt.Sprintf(matcher.Suffix, matcher.Args...) + } + return matcher.Suffix +} + +func (matcher *HaveSuffixMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to have suffix", matcher.suffix()) +} + +func (matcher *HaveSuffixMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to have suffix", matcher.suffix()) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_value.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_value.go new file mode 100644 index 000000000000..f67252835700 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_value.go @@ -0,0 +1,54 @@ +package matchers + +import ( + "errors" + "reflect" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +const maxIndirections = 31 + +type HaveValueMatcher struct { + Matcher types.GomegaMatcher // the matcher to apply to the "resolved" actual value. + resolvedActual interface{} // the ("resolved") value. +} + +func (m *HaveValueMatcher) Match(actual interface{}) (bool, error) { + val := reflect.ValueOf(actual) + for allowedIndirs := maxIndirections; allowedIndirs > 0; allowedIndirs-- { + // return an error if value isn't valid. Please note that we cannot + // check for nil here, as we might not deal with a pointer or interface + // at this point. + if !val.IsValid() { + return false, errors.New(format.Message( + actual, "not to be ")) + } + switch val.Kind() { + case reflect.Ptr, reflect.Interface: + // resolve pointers and interfaces to their values, then rinse and + // repeat. + if val.IsNil() { + return false, errors.New(format.Message( + actual, "not to be ")) + } + val = val.Elem() + continue + default: + // forward the final value to the specified matcher. + m.resolvedActual = val.Interface() + return m.Matcher.Match(m.resolvedActual) + } + } + // too many indirections: extreme star gazing, indeed...? + return false, errors.New(format.Message(actual, "too many indirections")) +} + +func (m *HaveValueMatcher) FailureMessage(_ interface{}) (message string) { + return m.Matcher.FailureMessage(m.resolvedActual) +} + +func (m *HaveValueMatcher) NegatedFailureMessage(_ interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(m.resolvedActual) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go new file mode 100644 index 000000000000..827475ea51cc --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go @@ -0,0 +1,65 @@ +package matchers + +import ( + "errors" + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type MatchErrorMatcher struct { + Expected interface{} +} + +func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err error) { + if isNil(actual) { + return false, fmt.Errorf("Expected an error, got nil") + } + + if !isError(actual) { + return false, fmt.Errorf("Expected an error. Got:\n%s", format.Object(actual, 1)) + } + + actualErr := actual.(error) + expected := matcher.Expected + + if isError(expected) { + // first try the built-in errors.Is + if errors.Is(actualErr, expected.(error)) { + return true, nil + } + // if not, try DeepEqual along the error chain + for unwrapped := actualErr; unwrapped != nil; unwrapped = errors.Unwrap(unwrapped) { + if reflect.DeepEqual(unwrapped, expected) { + return true, nil + } + } + return false, nil + } + + if isString(expected) { + return actualErr.Error() == expected, nil + } + + var subMatcher omegaMatcher + var hasSubMatcher bool + if expected != nil { + subMatcher, hasSubMatcher = (expected).(omegaMatcher) + if hasSubMatcher { + return subMatcher.Match(actualErr.Error()) + } + } + + return false, fmt.Errorf( + "MatchError must be passed an error, a string, or a Matcher that can match on strings. Got:\n%s", + format.Object(expected, 1)) +} + +func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to match error", matcher.Expected) +} + +func (matcher *MatchErrorMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to match error", matcher.Expected) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go new file mode 100644 index 000000000000..f962f139ff8f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go @@ -0,0 +1,65 @@ +package matchers + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/onsi/gomega/format" +) + +type MatchJSONMatcher struct { + JSONToMatch interface{} + firstFailurePath []interface{} +} + +func (matcher *MatchJSONMatcher) Match(actual interface{}) (success bool, err error) { + actualString, expectedString, err := matcher.prettyPrint(actual) + if err != nil { + return false, err + } + + var aval interface{} + var eval interface{} + + // this is guarded by prettyPrint + json.Unmarshal([]byte(actualString), &aval) + json.Unmarshal([]byte(expectedString), &eval) + var equal bool + equal, matcher.firstFailurePath = deepEqual(aval, eval) + return equal, nil +} + +func (matcher *MatchJSONMatcher) FailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.prettyPrint(actual) + return formattedMessage(format.Message(actualString, "to match JSON of", expectedString), matcher.firstFailurePath) +} + +func (matcher *MatchJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.prettyPrint(actual) + return formattedMessage(format.Message(actualString, "not to match JSON of", expectedString), matcher.firstFailurePath) +} + +func (matcher *MatchJSONMatcher) prettyPrint(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, ok := toString(actual) + if !ok { + return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1)) + } + expectedString, ok := toString(matcher.JSONToMatch) + if !ok { + return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.JSONToMatch, 1)) + } + + abuf := new(bytes.Buffer) + ebuf := new(bytes.Buffer) + + if err := json.Indent(abuf, []byte(actualString), "", " "); err != nil { + return "", "", fmt.Errorf("Actual '%s' should be valid JSON, but it is not.\nUnderlying error:%s", actualString, err) + } + + if err := json.Indent(ebuf, []byte(expectedString), "", " "); err != nil { + return "", "", fmt.Errorf("Expected '%s' should be valid JSON, but it is not.\nUnderlying error:%s", expectedString, err) + } + + return abuf.String(), ebuf.String(), nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go new file mode 100644 index 000000000000..adac5db6b8ef --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go @@ -0,0 +1,43 @@ +package matchers + +import ( + "fmt" + "regexp" + + "github.com/onsi/gomega/format" +) + +type MatchRegexpMatcher struct { + Regexp string + Args []interface{} +} + +func (matcher *MatchRegexpMatcher) Match(actual interface{}) (success bool, err error) { + actualString, ok := toString(actual) + if !ok { + return false, fmt.Errorf("RegExp matcher requires a string or stringer.\nGot:%s", format.Object(actual, 1)) + } + + match, err := regexp.Match(matcher.regexp(), []byte(actualString)) + if err != nil { + return false, fmt.Errorf("RegExp match failed to compile with error:\n\t%s", err.Error()) + } + + return match, nil +} + +func (matcher *MatchRegexpMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to match regular expression", matcher.regexp()) +} + +func (matcher *MatchRegexpMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to match regular expression", matcher.regexp()) +} + +func (matcher *MatchRegexpMatcher) regexp() string { + re := matcher.Regexp + if len(matcher.Args) > 0 { + re = fmt.Sprintf(matcher.Regexp, matcher.Args...) + } + return re +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go new file mode 100644 index 000000000000..5c815f5af740 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go @@ -0,0 +1,134 @@ +package matchers + +import ( + "bytes" + "encoding/xml" + "errors" + "fmt" + "io" + "reflect" + "sort" + "strings" + + "github.com/onsi/gomega/format" + "golang.org/x/net/html/charset" +) + +type MatchXMLMatcher struct { + XMLToMatch interface{} +} + +func (matcher *MatchXMLMatcher) Match(actual interface{}) (success bool, err error) { + actualString, expectedString, err := matcher.formattedPrint(actual) + if err != nil { + return false, err + } + + aval, err := parseXmlContent(actualString) + if err != nil { + return false, fmt.Errorf("Actual '%s' should be valid XML, but it is not.\nUnderlying error:%s", actualString, err) + } + + eval, err := parseXmlContent(expectedString) + if err != nil { + return false, fmt.Errorf("Expected '%s' should be valid XML, but it is not.\nUnderlying error:%s", expectedString, err) + } + + return reflect.DeepEqual(aval, eval), nil +} + +func (matcher *MatchXMLMatcher) FailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.formattedPrint(actual) + return fmt.Sprintf("Expected\n%s\nto match XML of\n%s", actualString, expectedString) +} + +func (matcher *MatchXMLMatcher) NegatedFailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.formattedPrint(actual) + return fmt.Sprintf("Expected\n%s\nnot to match XML of\n%s", actualString, expectedString) +} + +func (matcher *MatchXMLMatcher) formattedPrint(actual interface{}) (actualString, expectedString string, err error) { + var ok bool + actualString, ok = toString(actual) + if !ok { + return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1)) + } + expectedString, ok = toString(matcher.XMLToMatch) + if !ok { + return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.XMLToMatch, 1)) + } + return actualString, expectedString, nil +} + +func parseXmlContent(content string) (*xmlNode, error) { + allNodes := []*xmlNode{} + + dec := newXmlDecoder(strings.NewReader(content)) + for { + tok, err := dec.Token() + if err != nil { + if err == io.EOF { + break + } + return nil, fmt.Errorf("failed to decode next token: %v", err) // untested section + } + + lastNodeIndex := len(allNodes) - 1 + var lastNode *xmlNode + if len(allNodes) > 0 { + lastNode = allNodes[lastNodeIndex] + } else { + lastNode = &xmlNode{} + } + + switch tok := tok.(type) { + case xml.StartElement: + attrs := attributesSlice(tok.Attr) + sort.Sort(attrs) + allNodes = append(allNodes, &xmlNode{XMLName: tok.Name, XMLAttr: tok.Attr}) + case xml.EndElement: + if len(allNodes) > 1 { + allNodes[lastNodeIndex-1].Nodes = append(allNodes[lastNodeIndex-1].Nodes, lastNode) + allNodes = allNodes[:lastNodeIndex] + } + case xml.CharData: + lastNode.Content = append(lastNode.Content, tok.Copy()...) + case xml.Comment: + lastNode.Comments = append(lastNode.Comments, tok.Copy()) // untested section + case xml.ProcInst: + lastNode.ProcInsts = append(lastNode.ProcInsts, tok.Copy()) + } + } + + if len(allNodes) == 0 { + return nil, errors.New("found no nodes") + } + firstNode := allNodes[0] + trimParentNodesContentSpaces(firstNode) + + return firstNode, nil +} + +func newXmlDecoder(reader io.Reader) *xml.Decoder { + dec := xml.NewDecoder(reader) + dec.CharsetReader = charset.NewReaderLabel + return dec +} + +func trimParentNodesContentSpaces(node *xmlNode) { + if len(node.Nodes) > 0 { + node.Content = bytes.TrimSpace(node.Content) + for _, childNode := range node.Nodes { + trimParentNodesContentSpaces(childNode) + } + } +} + +type xmlNode struct { + XMLName xml.Name + Comments []xml.Comment + ProcInsts []xml.ProcInst + XMLAttr []xml.Attr + Content []byte + Nodes []*xmlNode +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go new file mode 100644 index 000000000000..2cb6b47db952 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go @@ -0,0 +1,76 @@ +package matchers + +import ( + "fmt" + "strings" + + "github.com/onsi/gomega/format" + "gopkg.in/yaml.v3" +) + +type MatchYAMLMatcher struct { + YAMLToMatch interface{} + firstFailurePath []interface{} +} + +func (matcher *MatchYAMLMatcher) Match(actual interface{}) (success bool, err error) { + actualString, expectedString, err := matcher.toStrings(actual) + if err != nil { + return false, err + } + + var aval interface{} + var eval interface{} + + if err := yaml.Unmarshal([]byte(actualString), &aval); err != nil { + return false, fmt.Errorf("Actual '%s' should be valid YAML, but it is not.\nUnderlying error:%s", actualString, err) + } + if err := yaml.Unmarshal([]byte(expectedString), &eval); err != nil { + return false, fmt.Errorf("Expected '%s' should be valid YAML, but it is not.\nUnderlying error:%s", expectedString, err) + } + + var equal bool + equal, matcher.firstFailurePath = deepEqual(aval, eval) + return equal, nil +} + +func (matcher *MatchYAMLMatcher) FailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.toNormalisedStrings(actual) + return formattedMessage(format.Message(actualString, "to match YAML of", expectedString), matcher.firstFailurePath) +} + +func (matcher *MatchYAMLMatcher) NegatedFailureMessage(actual interface{}) (message string) { + actualString, expectedString, _ := matcher.toNormalisedStrings(actual) + return formattedMessage(format.Message(actualString, "not to match YAML of", expectedString), matcher.firstFailurePath) +} + +func (matcher *MatchYAMLMatcher) toNormalisedStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, expectedString, err := matcher.toStrings(actual) + return normalise(actualString), normalise(expectedString), err +} + +func normalise(input string) string { + var val interface{} + err := yaml.Unmarshal([]byte(input), &val) + if err != nil { + panic(err) // unreachable since Match already calls Unmarshal + } + output, err := yaml.Marshal(val) + if err != nil { + panic(err) // untested section, unreachable since we Unmarshal above + } + return strings.TrimSpace(string(output)) +} + +func (matcher *MatchYAMLMatcher) toStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) { + actualString, ok := toString(actual) + if !ok { + return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1)) + } + expectedString, ok := toString(matcher.YAMLToMatch) + if !ok { + return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.YAMLToMatch, 1)) + } + + return actualString, expectedString, nil +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/not.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/not.go new file mode 100644 index 000000000000..78b71910d12f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/not.go @@ -0,0 +1,29 @@ +package matchers + +import ( + "github.com/onsi/gomega/types" +) + +type NotMatcher struct { + Matcher types.GomegaMatcher +} + +func (m *NotMatcher) Match(actual interface{}) (bool, error) { + success, err := m.Matcher.Match(actual) + if err != nil { + return false, err + } + return !success, nil +} + +func (m *NotMatcher) FailureMessage(actual interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(actual) // works beautifully +} + +func (m *NotMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return m.Matcher.FailureMessage(actual) // works beautifully +} + +func (m *NotMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + return types.MatchMayChangeInTheFuture(m.Matcher, actual) // just return m.Matcher's value +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/or.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/or.go new file mode 100644 index 000000000000..841ae26ab078 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/or.go @@ -0,0 +1,66 @@ +package matchers + +import ( + "fmt" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +type OrMatcher struct { + Matchers []types.GomegaMatcher + + // state + firstSuccessfulMatcher types.GomegaMatcher +} + +func (m *OrMatcher) Match(actual interface{}) (success bool, err error) { + m.firstSuccessfulMatcher = nil + for _, matcher := range m.Matchers { + success, err := matcher.Match(actual) + if err != nil { + return false, err + } + if success { + m.firstSuccessfulMatcher = matcher + return true, nil + } + } + return false, nil +} + +func (m *OrMatcher) FailureMessage(actual interface{}) (message string) { + // not the most beautiful list of matchers, but not bad either... + return format.Message(actual, fmt.Sprintf("To satisfy at least one of these matchers: %s", m.Matchers)) +} + +func (m *OrMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return m.firstSuccessfulMatcher.NegatedFailureMessage(actual) +} + +func (m *OrMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + /* + Example with 3 matchers: A, B, C + + Match evaluates them: F, T, => T + So match is currently T, what should MatchMayChangeInTheFuture() return? + Seems like it only depends on B, since currently B MUST change to allow the result to become F + + Match eval: F, F, F => F + So match is currently F, what should MatchMayChangeInTheFuture() return? + Seems to depend on ANY of them being able to change to T. + */ + + if m.firstSuccessfulMatcher != nil { + // one of the matchers succeeded.. it must be able to change in order to affect the result + return types.MatchMayChangeInTheFuture(m.firstSuccessfulMatcher, actual) + } else { + // so all matchers failed.. Any one of them changing would change the result. + for _, matcher := range m.Matchers { + if types.MatchMayChangeInTheFuture(matcher, actual) { + return true + } + } + return false // none of were going to change + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/panic_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/panic_matcher.go new file mode 100644 index 000000000000..adc8cee63065 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/panic_matcher.go @@ -0,0 +1,114 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type PanicMatcher struct { + Expected interface{} + object interface{} +} + +func (matcher *PanicMatcher) Match(actual interface{}) (success bool, err error) { + if actual == nil { + return false, fmt.Errorf("PanicMatcher expects a non-nil actual.") + } + + actualType := reflect.TypeOf(actual) + if actualType.Kind() != reflect.Func { + return false, fmt.Errorf("PanicMatcher expects a function. Got:\n%s", format.Object(actual, 1)) + } + if !(actualType.NumIn() == 0 && actualType.NumOut() == 0) { + return false, fmt.Errorf("PanicMatcher expects a function with no arguments and no return value. Got:\n%s", format.Object(actual, 1)) + } + + success = false + defer func() { + if e := recover(); e != nil { + matcher.object = e + + if matcher.Expected == nil { + success = true + return + } + + valueMatcher, valueIsMatcher := matcher.Expected.(omegaMatcher) + if !valueIsMatcher { + valueMatcher = &EqualMatcher{Expected: matcher.Expected} + } + + success, err = valueMatcher.Match(e) + if err != nil { + err = fmt.Errorf("PanicMatcher's value matcher failed with:\n%s%s", format.Indent, err.Error()) + } + } + }() + + reflect.ValueOf(actual).Call([]reflect.Value{}) + + return +} + +func (matcher *PanicMatcher) FailureMessage(actual interface{}) (message string) { + if matcher.Expected == nil { + // We wanted any panic to occur, but none did. + return format.Message(actual, "to panic") + } + + if matcher.object == nil { + // We wanted a panic with a specific value to occur, but none did. + switch matcher.Expected.(type) { + case omegaMatcher: + return format.Message(actual, "to panic with a value matching", matcher.Expected) + default: + return format.Message(actual, "to panic with", matcher.Expected) + } + } + + // We got a panic, but the value isn't what we expected. + switch matcher.Expected.(type) { + case omegaMatcher: + return format.Message( + actual, + fmt.Sprintf( + "to panic with a value matching\n%s\nbut panicked with\n%s", + format.Object(matcher.Expected, 1), + format.Object(matcher.object, 1), + ), + ) + default: + return format.Message( + actual, + fmt.Sprintf( + "to panic with\n%s\nbut panicked with\n%s", + format.Object(matcher.Expected, 1), + format.Object(matcher.object, 1), + ), + ) + } +} + +func (matcher *PanicMatcher) NegatedFailureMessage(actual interface{}) (message string) { + if matcher.Expected == nil { + // We didn't want any panic to occur, but one did. + return format.Message(actual, fmt.Sprintf("not to panic, but panicked with\n%s", format.Object(matcher.object, 1))) + } + + // We wanted a to ensure a panic with a specific value did not occur, but it did. + switch matcher.Expected.(type) { + case omegaMatcher: + return format.Message( + actual, + fmt.Sprintf( + "not to panic with a value matching\n%s\nbut panicked with\n%s", + format.Object(matcher.Expected, 1), + format.Object(matcher.object, 1), + ), + ) + default: + return format.Message(actual, "not to panic with", matcher.Expected) + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/receive_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/receive_matcher.go new file mode 100644 index 000000000000..1936a2ba52f2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/receive_matcher.go @@ -0,0 +1,130 @@ +// untested sections: 3 + +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type ReceiveMatcher struct { + Arg interface{} + receivedValue reflect.Value + channelClosed bool +} + +func (matcher *ReceiveMatcher) Match(actual interface{}) (success bool, err error) { + if !isChan(actual) { + return false, fmt.Errorf("ReceiveMatcher expects a channel. Got:\n%s", format.Object(actual, 1)) + } + + channelType := reflect.TypeOf(actual) + channelValue := reflect.ValueOf(actual) + + if channelType.ChanDir() == reflect.SendDir { + return false, fmt.Errorf("ReceiveMatcher matcher cannot be passed a send-only channel. Got:\n%s", format.Object(actual, 1)) + } + + var subMatcher omegaMatcher + var hasSubMatcher bool + + if matcher.Arg != nil { + subMatcher, hasSubMatcher = (matcher.Arg).(omegaMatcher) + if !hasSubMatcher { + argType := reflect.TypeOf(matcher.Arg) + if argType.Kind() != reflect.Ptr { + return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nTo:\n%s\nYou need to pass a pointer!", format.Object(actual, 1), format.Object(matcher.Arg, 1)) + } + } + } + + winnerIndex, value, open := reflect.Select([]reflect.SelectCase{ + {Dir: reflect.SelectRecv, Chan: channelValue}, + {Dir: reflect.SelectDefault}, + }) + + var closed bool + var didReceive bool + if winnerIndex == 0 { + closed = !open + didReceive = open + } + matcher.channelClosed = closed + + if closed { + return false, nil + } + + if hasSubMatcher { + if didReceive { + matcher.receivedValue = value + return subMatcher.Match(matcher.receivedValue.Interface()) + } + return false, nil + } + + if didReceive { + if matcher.Arg != nil { + outValue := reflect.ValueOf(matcher.Arg) + + if value.Type().AssignableTo(outValue.Elem().Type()) { + outValue.Elem().Set(value) + return true, nil + } + if value.Type().Kind() == reflect.Interface && value.Elem().Type().AssignableTo(outValue.Elem().Type()) { + outValue.Elem().Set(value.Elem()) + return true, nil + } else { + return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nType:\n%s\nTo:\n%s", format.Object(actual, 1), format.Object(value.Interface(), 1), format.Object(matcher.Arg, 1)) + } + + } + + return true, nil + } + return false, nil +} + +func (matcher *ReceiveMatcher) FailureMessage(actual interface{}) (message string) { + subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher) + + closedAddendum := "" + if matcher.channelClosed { + closedAddendum = " The channel is closed." + } + + if hasSubMatcher { + if matcher.receivedValue.IsValid() { + return subMatcher.FailureMessage(matcher.receivedValue.Interface()) + } + return "When passed a matcher, ReceiveMatcher's channel *must* receive something." + } + return format.Message(actual, "to receive something."+closedAddendum) +} + +func (matcher *ReceiveMatcher) NegatedFailureMessage(actual interface{}) (message string) { + subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher) + + closedAddendum := "" + if matcher.channelClosed { + closedAddendum = " The channel is closed." + } + + if hasSubMatcher { + if matcher.receivedValue.IsValid() { + return subMatcher.NegatedFailureMessage(matcher.receivedValue.Interface()) + } + return "When passed a matcher, ReceiveMatcher's channel *must* receive something." + } + return format.Message(actual, "not to receive anything."+closedAddendum) +} + +func (matcher *ReceiveMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { + if !isChan(actual) { + return false + } + + return !matcher.channelClosed +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go new file mode 100644 index 000000000000..ec68fe8b62c0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go @@ -0,0 +1,66 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type SatisfyMatcher struct { + Predicate interface{} + + // cached type + predicateArgType reflect.Type +} + +func NewSatisfyMatcher(predicate interface{}) *SatisfyMatcher { + if predicate == nil { + panic("predicate cannot be nil") + } + predicateType := reflect.TypeOf(predicate) + if predicateType.Kind() != reflect.Func { + panic("predicate must be a function") + } + if predicateType.NumIn() != 1 { + panic("predicate must have 1 argument") + } + if predicateType.NumOut() != 1 || predicateType.Out(0).Kind() != reflect.Bool { + panic("predicate must return bool") + } + + return &SatisfyMatcher{ + Predicate: predicate, + predicateArgType: predicateType.In(0), + } +} + +func (m *SatisfyMatcher) Match(actual interface{}) (success bool, err error) { + // prepare a parameter to pass to the predicate + var param reflect.Value + if actual != nil && reflect.TypeOf(actual).AssignableTo(m.predicateArgType) { + // The dynamic type of actual is compatible with the predicate argument. + param = reflect.ValueOf(actual) + + } else if actual == nil && m.predicateArgType.Kind() == reflect.Interface { + // The dynamic type of actual is unknown, so there's no way to make its + // reflect.Value. Create a nil of the predicate argument, which is known. + param = reflect.Zero(m.predicateArgType) + + } else { + return false, fmt.Errorf("predicate expects '%s' but we have '%T'", m.predicateArgType, actual) + } + + // call the predicate with `actual` + fn := reflect.ValueOf(m.Predicate) + result := fn.Call([]reflect.Value{param}) + return result[0].Bool(), nil +} + +func (m *SatisfyMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to satisfy predicate", m.Predicate) +} + +func (m *SatisfyMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to not satisfy predicate", m.Predicate) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go new file mode 100644 index 000000000000..1369c1e87f7d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go @@ -0,0 +1,94 @@ +// untested sections: 5 + +package matchers + +import ( + "fmt" + "reflect" + "strings" +) + +func formattedMessage(comparisonMessage string, failurePath []interface{}) string { + var diffMessage string + if len(failurePath) == 0 { + diffMessage = "" + } else { + diffMessage = fmt.Sprintf("\n\nfirst mismatched key: %s", formattedFailurePath(failurePath)) + } + return fmt.Sprintf("%s%s", comparisonMessage, diffMessage) +} + +func formattedFailurePath(failurePath []interface{}) string { + formattedPaths := []string{} + for i := len(failurePath) - 1; i >= 0; i-- { + switch p := failurePath[i].(type) { + case int: + formattedPaths = append(formattedPaths, fmt.Sprintf(`[%d]`, p)) + default: + if i != len(failurePath)-1 { + formattedPaths = append(formattedPaths, ".") + } + formattedPaths = append(formattedPaths, fmt.Sprintf(`"%s"`, p)) + } + } + return strings.Join(formattedPaths, "") +} + +func deepEqual(a interface{}, b interface{}) (bool, []interface{}) { + var errorPath []interface{} + if reflect.TypeOf(a) != reflect.TypeOf(b) { + return false, errorPath + } + + switch a.(type) { + case []interface{}: + if len(a.([]interface{})) != len(b.([]interface{})) { + return false, errorPath + } + + for i, v := range a.([]interface{}) { + elementEqual, keyPath := deepEqual(v, b.([]interface{})[i]) + if !elementEqual { + return false, append(keyPath, i) + } + } + return true, errorPath + + case map[interface{}]interface{}: + if len(a.(map[interface{}]interface{})) != len(b.(map[interface{}]interface{})) { + return false, errorPath + } + + for k, v1 := range a.(map[interface{}]interface{}) { + v2, ok := b.(map[interface{}]interface{})[k] + if !ok { + return false, errorPath + } + elementEqual, keyPath := deepEqual(v1, v2) + if !elementEqual { + return false, append(keyPath, k) + } + } + return true, errorPath + + case map[string]interface{}: + if len(a.(map[string]interface{})) != len(b.(map[string]interface{})) { + return false, errorPath + } + + for k, v1 := range a.(map[string]interface{}) { + v2, ok := b.(map[string]interface{})[k] + if !ok { + return false, errorPath + } + elementEqual, keyPath := deepEqual(v1, v2) + if !elementEqual { + return false, append(keyPath, k) + } + } + return true, errorPath + + default: + return a == b, errorPath + } +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go new file mode 100644 index 000000000000..327350f7b713 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go @@ -0,0 +1,42 @@ +package matchers + +import ( + "errors" + "fmt" + + "github.com/onsi/gomega/format" +) + +type formattedGomegaError interface { + FormattedGomegaError() string +} + +type SucceedMatcher struct { +} + +func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) { + // is purely nil? + if actual == nil { + return true, nil + } + + // must be an 'error' type + if !isError(actual) { + return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1)) + } + + // must be nil (or a pointer to a nil) + return isNil(actual), nil +} + +func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) { + var fgErr formattedGomegaError + if errors.As(actual.(error), &fgErr) { + return fgErr.FormattedGomegaError() + } + return fmt.Sprintf("Expected success, but got an error:\n%s", format.Object(actual, 1)) +} + +func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return "Expected failure, but got no error." +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go new file mode 100644 index 000000000000..830e308274ee --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go @@ -0,0 +1,56 @@ +package bipartitegraph + +import "fmt" + +import . "github.com/onsi/gomega/matchers/support/goraph/node" +import . "github.com/onsi/gomega/matchers/support/goraph/edge" + +type BipartiteGraph struct { + Left NodeOrderedSet + Right NodeOrderedSet + Edges EdgeSet +} + +func NewBipartiteGraph(leftValues, rightValues []interface{}, neighbours func(interface{}, interface{}) (bool, error)) (*BipartiteGraph, error) { + left := NodeOrderedSet{} + for i, v := range leftValues { + left = append(left, Node{ID: i, Value: v}) + } + + right := NodeOrderedSet{} + for j, v := range rightValues { + right = append(right, Node{ID: j + len(left), Value: v}) + } + + edges := EdgeSet{} + for i, leftValue := range leftValues { + for j, rightValue := range rightValues { + neighbours, err := neighbours(leftValue, rightValue) + if err != nil { + return nil, fmt.Errorf("error determining adjacency for %v and %v: %s", leftValue, rightValue, err.Error()) + } + + if neighbours { + edges = append(edges, Edge{Node1: left[i].ID, Node2: right[j].ID}) + } + } + } + + return &BipartiteGraph{left, right, edges}, nil +} + +// FreeLeftRight returns left node values and right node values +// of the BipartiteGraph's nodes which are not part of the given edges. +func (bg *BipartiteGraph) FreeLeftRight(edges EdgeSet) (leftValues, rightValues []interface{}) { + for _, node := range bg.Left { + if edges.Free(node) { + leftValues = append(leftValues, node.Value) + } + } + for _, node := range bg.Right { + if edges.Free(node) { + rightValues = append(rightValues, node.Value) + } + } + return +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go new file mode 100644 index 000000000000..1c54edd8f17c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go @@ -0,0 +1,164 @@ +package bipartitegraph + +import ( + . "github.com/onsi/gomega/matchers/support/goraph/edge" + . "github.com/onsi/gomega/matchers/support/goraph/node" + "github.com/onsi/gomega/matchers/support/goraph/util" +) + +// LargestMatching implements the Hopcroft–Karp algorithm taking as input a bipartite graph +// and outputting a maximum cardinality matching, i.e. a set of as many edges as possible +// with the property that no two edges share an endpoint. +func (bg *BipartiteGraph) LargestMatching() (matching EdgeSet) { + paths := bg.maximalDisjointSLAPCollection(matching) + + for len(paths) > 0 { + for _, path := range paths { + matching = matching.SymmetricDifference(path) + } + paths = bg.maximalDisjointSLAPCollection(matching) + } + + return +} + +func (bg *BipartiteGraph) maximalDisjointSLAPCollection(matching EdgeSet) (result []EdgeSet) { + guideLayers := bg.createSLAPGuideLayers(matching) + if len(guideLayers) == 0 { + return + } + + used := make(map[int]bool) + + for _, u := range guideLayers[len(guideLayers)-1] { + slap, found := bg.findDisjointSLAP(u, matching, guideLayers, used) + if found { + for _, edge := range slap { + used[edge.Node1] = true + used[edge.Node2] = true + } + result = append(result, slap) + } + } + + return +} + +func (bg *BipartiteGraph) findDisjointSLAP( + start Node, + matching EdgeSet, + guideLayers []NodeOrderedSet, + used map[int]bool, +) ([]Edge, bool) { + return bg.findDisjointSLAPHelper(start, EdgeSet{}, len(guideLayers)-1, matching, guideLayers, used) +} + +func (bg *BipartiteGraph) findDisjointSLAPHelper( + currentNode Node, + currentSLAP EdgeSet, + currentLevel int, + matching EdgeSet, + guideLayers []NodeOrderedSet, + used map[int]bool, +) (EdgeSet, bool) { + used[currentNode.ID] = true + + if currentLevel == 0 { + return currentSLAP, true + } + + for _, nextNode := range guideLayers[currentLevel-1] { + if used[nextNode.ID] { + continue + } + + edge, found := bg.Edges.FindByNodes(currentNode, nextNode) + if !found { + continue + } + + if matching.Contains(edge) == util.Odd(currentLevel) { + continue + } + + currentSLAP = append(currentSLAP, edge) + slap, found := bg.findDisjointSLAPHelper(nextNode, currentSLAP, currentLevel-1, matching, guideLayers, used) + if found { + return slap, true + } + currentSLAP = currentSLAP[:len(currentSLAP)-1] + } + + used[currentNode.ID] = false + return nil, false +} + +func (bg *BipartiteGraph) createSLAPGuideLayers(matching EdgeSet) (guideLayers []NodeOrderedSet) { + used := make(map[int]bool) + currentLayer := NodeOrderedSet{} + + for _, node := range bg.Left { + if matching.Free(node) { + used[node.ID] = true + currentLayer = append(currentLayer, node) + } + } + + if len(currentLayer) == 0 { + return []NodeOrderedSet{} + } + guideLayers = append(guideLayers, currentLayer) + + done := false + + for !done { + lastLayer := currentLayer + currentLayer = NodeOrderedSet{} + + if util.Odd(len(guideLayers)) { + for _, leftNode := range lastLayer { + for _, rightNode := range bg.Right { + if used[rightNode.ID] { + continue + } + + edge, found := bg.Edges.FindByNodes(leftNode, rightNode) + if !found || matching.Contains(edge) { + continue + } + + currentLayer = append(currentLayer, rightNode) + used[rightNode.ID] = true + + if matching.Free(rightNode) { + done = true + } + } + } + } else { + for _, rightNode := range lastLayer { + for _, leftNode := range bg.Left { + if used[leftNode.ID] { + continue + } + + edge, found := bg.Edges.FindByNodes(leftNode, rightNode) + if !found || !matching.Contains(edge) { + continue + } + + currentLayer = append(currentLayer, leftNode) + used[leftNode.ID] = true + } + } + + } + + if len(currentLayer) == 0 { + return []NodeOrderedSet{} + } + guideLayers = append(guideLayers, currentLayer) + } + + return +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go new file mode 100644 index 000000000000..8c38411b283a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go @@ -0,0 +1,61 @@ +package edge + +import . "github.com/onsi/gomega/matchers/support/goraph/node" + +type Edge struct { + Node1 int + Node2 int +} + +type EdgeSet []Edge + +func (ec EdgeSet) Free(node Node) bool { + for _, e := range ec { + if e.Node1 == node.ID || e.Node2 == node.ID { + return false + } + } + + return true +} + +func (ec EdgeSet) Contains(edge Edge) bool { + for _, e := range ec { + if e == edge { + return true + } + } + + return false +} + +func (ec EdgeSet) FindByNodes(node1, node2 Node) (Edge, bool) { + for _, e := range ec { + if (e.Node1 == node1.ID && e.Node2 == node2.ID) || (e.Node1 == node2.ID && e.Node2 == node1.ID) { + return e, true + } + } + + return Edge{}, false +} + +func (ec EdgeSet) SymmetricDifference(ec2 EdgeSet) EdgeSet { + edgesToInclude := make(map[Edge]bool) + + for _, e := range ec { + edgesToInclude[e] = true + } + + for _, e := range ec2 { + edgesToInclude[e] = !edgesToInclude[e] + } + + result := EdgeSet{} + for e, include := range edgesToInclude { + if include { + result = append(result, e) + } + } + + return result +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go new file mode 100644 index 000000000000..cd597a2f2206 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go @@ -0,0 +1,8 @@ +package node + +type Node struct { + ID int + Value interface{} +} + +type NodeOrderedSet []Node diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go new file mode 100644 index 000000000000..d76a1ee00a21 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go @@ -0,0 +1,7 @@ +package util + +import "math" + +func Odd(n int) bool { + return math.Mod(float64(n), 2.0) == 1.0 +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/type_support.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/type_support.go new file mode 100644 index 000000000000..dced2419eadf --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/type_support.go @@ -0,0 +1,182 @@ +/* +Gomega matchers + +This package implements the Gomega matchers and does not typically need to be imported. +See the docs for Gomega for documentation on the matchers + +http://onsi.github.io/gomega/ +*/ + +// untested sections: 11 + +package matchers + +import ( + "encoding/json" + "fmt" + "reflect" +) + +type omegaMatcher interface { + Match(actual interface{}) (success bool, err error) + FailureMessage(actual interface{}) (message string) + NegatedFailureMessage(actual interface{}) (message string) +} + +func isBool(a interface{}) bool { + return reflect.TypeOf(a).Kind() == reflect.Bool +} + +func isNumber(a interface{}) bool { + if a == nil { + return false + } + kind := reflect.TypeOf(a).Kind() + return reflect.Int <= kind && kind <= reflect.Float64 +} + +func isInteger(a interface{}) bool { + kind := reflect.TypeOf(a).Kind() + return reflect.Int <= kind && kind <= reflect.Int64 +} + +func isUnsignedInteger(a interface{}) bool { + kind := reflect.TypeOf(a).Kind() + return reflect.Uint <= kind && kind <= reflect.Uint64 +} + +func isFloat(a interface{}) bool { + kind := reflect.TypeOf(a).Kind() + return reflect.Float32 <= kind && kind <= reflect.Float64 +} + +func toInteger(a interface{}) int64 { + if isInteger(a) { + return reflect.ValueOf(a).Int() + } else if isUnsignedInteger(a) { + return int64(reflect.ValueOf(a).Uint()) + } else if isFloat(a) { + return int64(reflect.ValueOf(a).Float()) + } + panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a)) +} + +func toUnsignedInteger(a interface{}) uint64 { + if isInteger(a) { + return uint64(reflect.ValueOf(a).Int()) + } else if isUnsignedInteger(a) { + return reflect.ValueOf(a).Uint() + } else if isFloat(a) { + return uint64(reflect.ValueOf(a).Float()) + } + panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a)) +} + +func toFloat(a interface{}) float64 { + if isInteger(a) { + return float64(reflect.ValueOf(a).Int()) + } else if isUnsignedInteger(a) { + return float64(reflect.ValueOf(a).Uint()) + } else if isFloat(a) { + return reflect.ValueOf(a).Float() + } + panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a)) +} + +func isError(a interface{}) bool { + _, ok := a.(error) + return ok +} + +func isChan(a interface{}) bool { + if isNil(a) { + return false + } + return reflect.TypeOf(a).Kind() == reflect.Chan +} + +func isMap(a interface{}) bool { + if a == nil { + return false + } + return reflect.TypeOf(a).Kind() == reflect.Map +} + +func isArrayOrSlice(a interface{}) bool { + if a == nil { + return false + } + switch reflect.TypeOf(a).Kind() { + case reflect.Array, reflect.Slice: + return true + default: + return false + } +} + +func isString(a interface{}) bool { + if a == nil { + return false + } + return reflect.TypeOf(a).Kind() == reflect.String +} + +func toString(a interface{}) (string, bool) { + aString, isString := a.(string) + if isString { + return aString, true + } + + aBytes, isBytes := a.([]byte) + if isBytes { + return string(aBytes), true + } + + aStringer, isStringer := a.(fmt.Stringer) + if isStringer { + return aStringer.String(), true + } + + aJSONRawMessage, isJSONRawMessage := a.(json.RawMessage) + if isJSONRawMessage { + return string(aJSONRawMessage), true + } + + return "", false +} + +func lengthOf(a interface{}) (int, bool) { + if a == nil { + return 0, false + } + switch reflect.TypeOf(a).Kind() { + case reflect.Map, reflect.Array, reflect.String, reflect.Chan, reflect.Slice: + return reflect.ValueOf(a).Len(), true + default: + return 0, false + } +} +func capOf(a interface{}) (int, bool) { + if a == nil { + return 0, false + } + switch reflect.TypeOf(a).Kind() { + case reflect.Array, reflect.Chan, reflect.Slice: + return reflect.ValueOf(a).Cap(), true + default: + return 0, false + } +} + +func isNil(a interface{}) bool { + if a == nil { + return true + } + + switch reflect.TypeOf(a).Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return reflect.ValueOf(a).IsNil() + } + + return false +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/with_transform.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/with_transform.go new file mode 100644 index 000000000000..6f743b1b32d2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/with_transform.go @@ -0,0 +1,90 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/types" +) + +type WithTransformMatcher struct { + // input + Transform interface{} // must be a function of one parameter that returns one value and an optional error + Matcher types.GomegaMatcher + + // cached value + transformArgType reflect.Type + + // state + transformedValue interface{} +} + +// reflect.Type for error +var errorT = reflect.TypeOf((*error)(nil)).Elem() + +func NewWithTransformMatcher(transform interface{}, matcher types.GomegaMatcher) *WithTransformMatcher { + if transform == nil { + panic("transform function cannot be nil") + } + txType := reflect.TypeOf(transform) + if txType.NumIn() != 1 { + panic("transform function must have 1 argument") + } + if numout := txType.NumOut(); numout != 1 { + if numout != 2 || !txType.Out(1).AssignableTo(errorT) { + panic("transform function must either have 1 return value, or 1 return value plus 1 error value") + } + } + + return &WithTransformMatcher{ + Transform: transform, + Matcher: matcher, + transformArgType: reflect.TypeOf(transform).In(0), + } +} + +func (m *WithTransformMatcher) Match(actual interface{}) (bool, error) { + // prepare a parameter to pass to the Transform function + var param reflect.Value + if actual != nil && reflect.TypeOf(actual).AssignableTo(m.transformArgType) { + // The dynamic type of actual is compatible with the transform argument. + param = reflect.ValueOf(actual) + + } else if actual == nil && m.transformArgType.Kind() == reflect.Interface { + // The dynamic type of actual is unknown, so there's no way to make its + // reflect.Value. Create a nil of the transform argument, which is known. + param = reflect.Zero(m.transformArgType) + + } else { + return false, fmt.Errorf("Transform function expects '%s' but we have '%T'", m.transformArgType, actual) + } + + // call the Transform function with `actual` + fn := reflect.ValueOf(m.Transform) + result := fn.Call([]reflect.Value{param}) + if len(result) == 2 { + if !result[1].IsNil() { + return false, fmt.Errorf("Transform function failed: %s", result[1].Interface().(error).Error()) + } + } + m.transformedValue = result[0].Interface() // expect exactly one value + + return m.Matcher.Match(m.transformedValue) +} + +func (m *WithTransformMatcher) FailureMessage(_ interface{}) (message string) { + return m.Matcher.FailureMessage(m.transformedValue) +} + +func (m *WithTransformMatcher) NegatedFailureMessage(_ interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(m.transformedValue) +} + +func (m *WithTransformMatcher) MatchMayChangeInTheFuture(_ interface{}) bool { + // TODO: Maybe this should always just return true? (Only an issue for non-deterministic transformers.) + // + // Querying the next matcher is fine if the transformer always will return the same value. + // But if the transformer is non-deterministic and returns a different value each time, then there + // is no point in querying the next matcher, since it can only comment on the last transformed value. + return types.MatchMayChangeInTheFuture(m.Matcher, m.transformedValue) +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/types/types.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/types/types.go new file mode 100644 index 000000000000..7c7adb9415d6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/types/types.go @@ -0,0 +1,93 @@ +package types + +import ( + "context" + "time" +) + +type GomegaFailHandler func(message string, callerSkip ...int) + +// A simple *testing.T interface wrapper +type GomegaTestingT interface { + Helper() + Fatalf(format string, args ...interface{}) +} + +// Gomega represents an object that can perform synchronous and assynchronous assertions with Gomega matchers +type Gomega interface { + Ω(actual interface{}, extra ...interface{}) Assertion + Expect(actual interface{}, extra ...interface{}) Assertion + ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion + + Eventually(actualOrCtx interface{}, args ...interface{}) AsyncAssertion + EventuallyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion + + Consistently(actualOrCtx interface{}, args ...interface{}) AsyncAssertion + ConsistentlyWithOffset(offset int, actualOrCtx interface{}, args ...interface{}) AsyncAssertion + + SetDefaultEventuallyTimeout(time.Duration) + SetDefaultEventuallyPollingInterval(time.Duration) + SetDefaultConsistentlyDuration(time.Duration) + SetDefaultConsistentlyPollingInterval(time.Duration) +} + +// All Gomega matchers must implement the GomegaMatcher interface +// +// For details on writing custom matchers, check out: http://onsi.github.io/gomega/#adding-your-own-matchers +type GomegaMatcher interface { + Match(actual interface{}) (success bool, err error) + FailureMessage(actual interface{}) (message string) + NegatedFailureMessage(actual interface{}) (message string) +} + +/* +GomegaMatchers that also match the OracleMatcher interface can convey information about +whether or not their result will change upon future attempts. + +This allows `Eventually` and `Consistently` to short circuit if success becomes impossible. + +For example, a process' exit code can never change. So, gexec's Exit matcher returns `true` +for `MatchMayChangeInTheFuture` until the process exits, at which point it returns `false` forevermore. +*/ +type OracleMatcher interface { + MatchMayChangeInTheFuture(actual interface{}) bool +} + +func MatchMayChangeInTheFuture(matcher GomegaMatcher, value interface{}) bool { + oracleMatcher, ok := matcher.(OracleMatcher) + if !ok { + return true + } + + return oracleMatcher.MatchMayChangeInTheFuture(value) +} + +// AsyncAssertions are returned by Eventually and Consistently and enable matchers to be polled repeatedly to ensure +// they are eventually satisfied +type AsyncAssertion interface { + Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool + ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool + + WithOffset(offset int) AsyncAssertion + WithTimeout(interval time.Duration) AsyncAssertion + WithPolling(interval time.Duration) AsyncAssertion + Within(timeout time.Duration) AsyncAssertion + ProbeEvery(interval time.Duration) AsyncAssertion + WithContext(ctx context.Context) AsyncAssertion + WithArguments(argsToForward ...interface{}) AsyncAssertion + MustPassRepeatedly(count int) AsyncAssertion +} + +// Assertions are returned by Ω and Expect and enable assertions against Gomega matchers +type Assertion interface { + Should(matcher GomegaMatcher, optionalDescription ...interface{}) bool + ShouldNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool + + To(matcher GomegaMatcher, optionalDescription ...interface{}) bool + ToNot(matcher GomegaMatcher, optionalDescription ...interface{}) bool + NotTo(matcher GomegaMatcher, optionalDescription ...interface{}) bool + + WithOffset(offset int) Assertion + + Error() Assertion +} diff --git a/cluster-autoscaler/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/cluster-autoscaler/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go new file mode 100644 index 000000000000..2681af35af19 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go @@ -0,0 +1,78 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lazyregexp is a thin wrapper over regexp, allowing the use of global +// regexp variables without forcing them to be compiled at init. +package lazyregexp + +import ( + "os" + "regexp" + "strings" + "sync" +) + +// Regexp is a wrapper around regexp.Regexp, where the underlying regexp will be +// compiled the first time it is needed. +type Regexp struct { + str string + once sync.Once + rx *regexp.Regexp +} + +func (r *Regexp) re() *regexp.Regexp { + r.once.Do(r.build) + return r.rx +} + +func (r *Regexp) build() { + r.rx = regexp.MustCompile(r.str) + r.str = "" +} + +func (r *Regexp) FindSubmatch(s []byte) [][]byte { + return r.re().FindSubmatch(s) +} + +func (r *Regexp) FindStringSubmatch(s string) []string { + return r.re().FindStringSubmatch(s) +} + +func (r *Regexp) FindStringSubmatchIndex(s string) []int { + return r.re().FindStringSubmatchIndex(s) +} + +func (r *Regexp) ReplaceAllString(src, repl string) string { + return r.re().ReplaceAllString(src, repl) +} + +func (r *Regexp) FindString(s string) string { + return r.re().FindString(s) +} + +func (r *Regexp) FindAllString(s string, n int) []string { + return r.re().FindAllString(s, n) +} + +func (r *Regexp) MatchString(s string) bool { + return r.re().MatchString(s) +} + +func (r *Regexp) SubexpNames() []string { + return r.re().SubexpNames() +} + +var inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], ".exe"), ".test") + +// New creates a new lazy regexp, delaying the compiling work until it is first +// needed. If the code is being run as part of tests, the regexp compiling will +// happen immediately. +func New(str string) *Regexp { + lr := &Regexp{str: str} + if inTest { + // In tests, always compile the regexps early. + lr.re() + } + return lr +} diff --git a/cluster-autoscaler/vendor/golang.org/x/mod/module/module.go b/cluster-autoscaler/vendor/golang.org/x/mod/module/module.go new file mode 100644 index 000000000000..e9dec6e61487 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/mod/module/module.go @@ -0,0 +1,841 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package module defines the module.Version type along with support code. +// +// The module.Version type is a simple Path, Version pair: +// +// type Version struct { +// Path string +// Version string +// } +// +// There are no restrictions imposed directly by use of this structure, +// but additional checking functions, most notably Check, verify that +// a particular path, version pair is valid. +// +// # Escaped Paths +// +// Module paths appear as substrings of file system paths +// (in the download cache) and of web server URLs in the proxy protocol. +// In general we cannot rely on file systems to be case-sensitive, +// nor can we rely on web servers, since they read from file systems. +// That is, we cannot rely on the file system to keep rsc.io/QUOTE +// and rsc.io/quote separate. Windows and macOS don't. +// Instead, we must never require two different casings of a file path. +// Because we want the download cache to match the proxy protocol, +// and because we want the proxy protocol to be possible to serve +// from a tree of static files (which might be stored on a case-insensitive +// file system), the proxy protocol must never require two different casings +// of a URL path either. +// +// One possibility would be to make the escaped form be the lowercase +// hexadecimal encoding of the actual path bytes. This would avoid ever +// needing different casings of a file path, but it would be fairly illegible +// to most programmers when those paths appeared in the file system +// (including in file paths in compiler errors and stack traces) +// in web server logs, and so on. Instead, we want a safe escaped form that +// leaves most paths unaltered. +// +// The safe escaped form is to replace every uppercase letter +// with an exclamation mark followed by the letter's lowercase equivalent. +// +// For example, +// +// github.com/Azure/azure-sdk-for-go -> github.com/!azure/azure-sdk-for-go. +// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy +// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus. +// +// Import paths that avoid upper-case letters are left unchanged. +// Note that because import paths are ASCII-only and avoid various +// problematic punctuation (like : < and >), the escaped form is also ASCII-only +// and avoids the same problematic punctuation. +// +// Import paths have never allowed exclamation marks, so there is no +// need to define how to escape a literal !. +// +// # Unicode Restrictions +// +// Today, paths are disallowed from using Unicode. +// +// Although paths are currently disallowed from using Unicode, +// we would like at some point to allow Unicode letters as well, to assume that +// file systems and URLs are Unicode-safe (storing UTF-8), and apply +// the !-for-uppercase convention for escaping them in the file system. +// But there are at least two subtle considerations. +// +// First, note that not all case-fold equivalent distinct runes +// form an upper/lower pair. +// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin) +// are three distinct runes that case-fold to each other. +// When we do add Unicode letters, we must not assume that upper/lower +// are the only case-equivalent pairs. +// Perhaps the Kelvin symbol would be disallowed entirely, for example. +// Or perhaps it would escape as "!!k", or perhaps as "(212A)". +// +// Second, it would be nice to allow Unicode marks as well as letters, +// but marks include combining marks, and then we must deal not +// only with case folding but also normalization: both U+00E9 ('é') +// and U+0065 U+0301 ('e' followed by combining acute accent) +// look the same on the page and are treated by some file systems +// as the same path. If we do allow Unicode marks in paths, there +// must be some kind of normalization to allow only one canonical +// encoding of any character used in an import path. +package module + +// IMPORTANT NOTE +// +// This file essentially defines the set of valid import paths for the go command. +// There are many subtle considerations, including Unicode ambiguity, +// security, network, and file system representations. +// +// This file also defines the set of valid module path and version combinations, +// another topic with many subtle considerations. +// +// Changes to the semantics in this file require approval from rsc. + +import ( + "errors" + "fmt" + "path" + "sort" + "strings" + "unicode" + "unicode/utf8" + + "golang.org/x/mod/semver" +) + +// A Version (for clients, a module.Version) is defined by a module path and version pair. +// These are stored in their plain (unescaped) form. +type Version struct { + // Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2". + Path string + + // Version is usually a semantic version in canonical form. + // There are three exceptions to this general rule. + // First, the top-level target of a build has no specific version + // and uses Version = "". + // Second, during MVS calculations the version "none" is used + // to represent the decision to take no version of a given module. + // Third, filesystem paths found in "replace" directives are + // represented by a path with an empty version. + Version string `json:",omitempty"` +} + +// String returns a representation of the Version suitable for logging +// (Path@Version, or just Path if Version is empty). +func (m Version) String() string { + if m.Version == "" { + return m.Path + } + return m.Path + "@" + m.Version +} + +// A ModuleError indicates an error specific to a module. +type ModuleError struct { + Path string + Version string + Err error +} + +// VersionError returns a ModuleError derived from a Version and error, +// or err itself if it is already such an error. +func VersionError(v Version, err error) error { + var mErr *ModuleError + if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version { + return err + } + return &ModuleError{ + Path: v.Path, + Version: v.Version, + Err: err, + } +} + +func (e *ModuleError) Error() string { + if v, ok := e.Err.(*InvalidVersionError); ok { + return fmt.Sprintf("%s@%s: invalid %s: %v", e.Path, v.Version, v.noun(), v.Err) + } + if e.Version != "" { + return fmt.Sprintf("%s@%s: %v", e.Path, e.Version, e.Err) + } + return fmt.Sprintf("module %s: %v", e.Path, e.Err) +} + +func (e *ModuleError) Unwrap() error { return e.Err } + +// An InvalidVersionError indicates an error specific to a version, with the +// module path unknown or specified externally. +// +// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError +// must not wrap a ModuleError. +type InvalidVersionError struct { + Version string + Pseudo bool + Err error +} + +// noun returns either "version" or "pseudo-version", depending on whether +// e.Version is a pseudo-version. +func (e *InvalidVersionError) noun() string { + if e.Pseudo { + return "pseudo-version" + } + return "version" +} + +func (e *InvalidVersionError) Error() string { + return fmt.Sprintf("%s %q invalid: %s", e.noun(), e.Version, e.Err) +} + +func (e *InvalidVersionError) Unwrap() error { return e.Err } + +// An InvalidPathError indicates a module, import, or file path doesn't +// satisfy all naming constraints. See CheckPath, CheckImportPath, +// and CheckFilePath for specific restrictions. +type InvalidPathError struct { + Kind string // "module", "import", or "file" + Path string + Err error +} + +func (e *InvalidPathError) Error() string { + return fmt.Sprintf("malformed %s path %q: %v", e.Kind, e.Path, e.Err) +} + +func (e *InvalidPathError) Unwrap() error { return e.Err } + +// Check checks that a given module path, version pair is valid. +// In addition to the path being a valid module path +// and the version being a valid semantic version, +// the two must correspond. +// For example, the path "yaml/v2" only corresponds to +// semantic versions beginning with "v2.". +func Check(path, version string) error { + if err := CheckPath(path); err != nil { + return err + } + if !semver.IsValid(version) { + return &ModuleError{ + Path: path, + Err: &InvalidVersionError{Version: version, Err: errors.New("not a semantic version")}, + } + } + _, pathMajor, _ := SplitPathVersion(path) + if err := CheckPathMajor(version, pathMajor); err != nil { + return &ModuleError{Path: path, Err: err} + } + return nil +} + +// firstPathOK reports whether r can appear in the first element of a module path. +// The first element of the path must be an LDH domain name, at least for now. +// To avoid case ambiguity, the domain name must be entirely lower case. +func firstPathOK(r rune) bool { + return r == '-' || r == '.' || + '0' <= r && r <= '9' || + 'a' <= r && r <= 'z' +} + +// modPathOK reports whether r can appear in a module path element. +// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. +// +// This matches what "go get" has historically recognized in import paths, +// and avoids confusing sequences like '%20' or '+' that would change meaning +// if used in a URL. +// +// TODO(rsc): We would like to allow Unicode letters, but that requires additional +// care in the safe encoding (see "escaped paths" above). +func modPathOK(r rune) bool { + if r < utf8.RuneSelf { + return r == '-' || r == '.' || r == '_' || r == '~' || + '0' <= r && r <= '9' || + 'A' <= r && r <= 'Z' || + 'a' <= r && r <= 'z' + } + return false +} + +// importPathOK reports whether r can appear in a package import path element. +// +// Import paths are intermediate between module paths and file paths: we allow +// disallow characters that would be confusing or ambiguous as arguments to +// 'go get' (such as '@' and ' ' ), but allow certain characters that are +// otherwise-unambiguous on the command line and historically used for some +// binary names (such as '++' as a suffix for compiler binaries and wrappers). +func importPathOK(r rune) bool { + return modPathOK(r) || r == '+' +} + +// fileNameOK reports whether r can appear in a file name. +// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters. +// If we expand the set of allowed characters here, we have to +// work harder at detecting potential case-folding and normalization collisions. +// See note about "escaped paths" above. +func fileNameOK(r rune) bool { + if r < utf8.RuneSelf { + // Entire set of ASCII punctuation, from which we remove characters: + // ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ + // We disallow some shell special characters: " ' * < > ? ` | + // (Note that some of those are disallowed by the Windows file system as well.) + // We also disallow path separators / : and \ (fileNameOK is only called on path element characters). + // We allow spaces (U+0020) in file names. + const allowed = "!#$%&()+,-.=@[]^_{}~ " + if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { + return true + } + return strings.ContainsRune(allowed, r) + } + // It may be OK to add more ASCII punctuation here, but only carefully. + // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. + return unicode.IsLetter(r) +} + +// CheckPath checks that a module path is valid. +// A valid module path is a valid import path, as checked by CheckImportPath, +// with three additional constraints. +// First, the leading path element (up to the first slash, if any), +// by convention a domain name, must contain only lower-case ASCII letters, +// ASCII digits, dots (U+002E), and dashes (U+002D); +// it must contain at least one dot and cannot start with a dash. +// Second, for a final path element of the form /vN, where N looks numeric +// (ASCII digits and dots) must not begin with a leading zero, must not be /v1, +// and must not contain any dots. For paths beginning with "gopkg.in/", +// this second requirement is replaced by a requirement that the path +// follow the gopkg.in server's conventions. +// Third, no path element may begin with a dot. +func CheckPath(path string) (err error) { + defer func() { + if err != nil { + err = &InvalidPathError{Kind: "module", Path: path, Err: err} + } + }() + + if err := checkPath(path, modulePath); err != nil { + return err + } + i := strings.Index(path, "/") + if i < 0 { + i = len(path) + } + if i == 0 { + return fmt.Errorf("leading slash") + } + if !strings.Contains(path[:i], ".") { + return fmt.Errorf("missing dot in first path element") + } + if path[0] == '-' { + return fmt.Errorf("leading dash in first path element") + } + for _, r := range path[:i] { + if !firstPathOK(r) { + return fmt.Errorf("invalid char %q in first path element", r) + } + } + if _, _, ok := SplitPathVersion(path); !ok { + return fmt.Errorf("invalid version") + } + return nil +} + +// CheckImportPath checks that an import path is valid. +// +// A valid import path consists of one or more valid path elements +// separated by slashes (U+002F). (It must not begin with nor end in a slash.) +// +// A valid path element is a non-empty string made up of +// ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. +// It must not end with a dot (U+002E), nor contain two dots in a row. +// +// The element prefix up to the first dot must not be a reserved file name +// on Windows, regardless of case (CON, com1, NuL, and so on). The element +// must not have a suffix of a tilde followed by one or more ASCII digits +// (to exclude paths elements that look like Windows short-names). +// +// CheckImportPath may be less restrictive in the future, but see the +// top-level package documentation for additional information about +// subtleties of Unicode. +func CheckImportPath(path string) error { + if err := checkPath(path, importPath); err != nil { + return &InvalidPathError{Kind: "import", Path: path, Err: err} + } + return nil +} + +// pathKind indicates what kind of path we're checking. Module paths, +// import paths, and file paths have different restrictions. +type pathKind int + +const ( + modulePath pathKind = iota + importPath + filePath +) + +// checkPath checks that a general path is valid. kind indicates what +// specific constraints should be applied. +// +// checkPath returns an error describing why the path is not valid. +// Because these checks apply to module, import, and file paths, +// and because other checks may be applied, the caller is expected to wrap +// this error with InvalidPathError. +func checkPath(path string, kind pathKind) error { + if !utf8.ValidString(path) { + return fmt.Errorf("invalid UTF-8") + } + if path == "" { + return fmt.Errorf("empty string") + } + if path[0] == '-' && kind != filePath { + return fmt.Errorf("leading dash") + } + if strings.Contains(path, "//") { + return fmt.Errorf("double slash") + } + if path[len(path)-1] == '/' { + return fmt.Errorf("trailing slash") + } + elemStart := 0 + for i, r := range path { + if r == '/' { + if err := checkElem(path[elemStart:i], kind); err != nil { + return err + } + elemStart = i + 1 + } + } + if err := checkElem(path[elemStart:], kind); err != nil { + return err + } + return nil +} + +// checkElem checks whether an individual path element is valid. +func checkElem(elem string, kind pathKind) error { + if elem == "" { + return fmt.Errorf("empty path element") + } + if strings.Count(elem, ".") == len(elem) { + return fmt.Errorf("invalid path element %q", elem) + } + if elem[0] == '.' && kind == modulePath { + return fmt.Errorf("leading dot in path element") + } + if elem[len(elem)-1] == '.' { + return fmt.Errorf("trailing dot in path element") + } + for _, r := range elem { + ok := false + switch kind { + case modulePath: + ok = modPathOK(r) + case importPath: + ok = importPathOK(r) + case filePath: + ok = fileNameOK(r) + default: + panic(fmt.Sprintf("internal error: invalid kind %v", kind)) + } + if !ok { + return fmt.Errorf("invalid char %q", r) + } + } + + // Windows disallows a bunch of path elements, sadly. + // See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file + short := elem + if i := strings.Index(short, "."); i >= 0 { + short = short[:i] + } + for _, bad := range badWindowsNames { + if strings.EqualFold(bad, short) { + return fmt.Errorf("%q disallowed as path element component on Windows", short) + } + } + + if kind == filePath { + // don't check for Windows short-names in file names. They're + // only an issue for import paths. + return nil + } + + // Reject path components that look like Windows short-names. + // Those usually end in a tilde followed by one or more ASCII digits. + if tilde := strings.LastIndexByte(short, '~'); tilde >= 0 && tilde < len(short)-1 { + suffix := short[tilde+1:] + suffixIsDigits := true + for _, r := range suffix { + if r < '0' || r > '9' { + suffixIsDigits = false + break + } + } + if suffixIsDigits { + return fmt.Errorf("trailing tilde and digits in path element") + } + } + + return nil +} + +// CheckFilePath checks that a slash-separated file path is valid. +// The definition of a valid file path is the same as the definition +// of a valid import path except that the set of allowed characters is larger: +// all Unicode letters, ASCII digits, the ASCII space character (U+0020), +// and the ASCII punctuation characters +// “!#$%&()+,-.=@[]^_{}~”. +// (The excluded punctuation characters, " * < > ? ` ' | / \ and :, +// have special meanings in certain shells or operating systems.) +// +// CheckFilePath may be less restrictive in the future, but see the +// top-level package documentation for additional information about +// subtleties of Unicode. +func CheckFilePath(path string) error { + if err := checkPath(path, filePath); err != nil { + return &InvalidPathError{Kind: "file", Path: path, Err: err} + } + return nil +} + +// badWindowsNames are the reserved file path elements on Windows. +// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file +var badWindowsNames = []string{ + "CON", + "PRN", + "AUX", + "NUL", + "COM1", + "COM2", + "COM3", + "COM4", + "COM5", + "COM6", + "COM7", + "COM8", + "COM9", + "LPT1", + "LPT2", + "LPT3", + "LPT4", + "LPT5", + "LPT6", + "LPT7", + "LPT8", + "LPT9", +} + +// SplitPathVersion returns prefix and major version such that prefix+pathMajor == path +// and version is either empty or "/vN" for N >= 2. +// As a special case, gopkg.in paths are recognized directly; +// they require ".vN" instead of "/vN", and for all N, not just N >= 2. +// SplitPathVersion returns with ok = false when presented with +// a path whose last path element does not satisfy the constraints +// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2". +func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { + if strings.HasPrefix(path, "gopkg.in/") { + return splitGopkgIn(path) + } + + i := len(path) + dot := false + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9' || path[i-1] == '.') { + if path[i-1] == '.' { + dot = true + } + i-- + } + if i <= 1 || i == len(path) || path[i-1] != 'v' || path[i-2] != '/' { + return path, "", true + } + prefix, pathMajor = path[:i-2], path[i-2:] + if dot || len(pathMajor) <= 2 || pathMajor[2] == '0' || pathMajor == "/v1" { + return path, "", false + } + return prefix, pathMajor, true +} + +// splitGopkgIn is like SplitPathVersion but only for gopkg.in paths. +func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { + if !strings.HasPrefix(path, "gopkg.in/") { + return path, "", false + } + i := len(path) + if strings.HasSuffix(path, "-unstable") { + i -= len("-unstable") + } + for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9') { + i-- + } + if i <= 1 || path[i-1] != 'v' || path[i-2] != '.' { + // All gopkg.in paths must end in vN for some N. + return path, "", false + } + prefix, pathMajor = path[:i-2], path[i-2:] + if len(pathMajor) <= 2 || pathMajor[2] == '0' && pathMajor != ".v0" { + return path, "", false + } + return prefix, pathMajor, true +} + +// MatchPathMajor reports whether the semantic version v +// matches the path major version pathMajor. +// +// MatchPathMajor returns true if and only if CheckPathMajor returns nil. +func MatchPathMajor(v, pathMajor string) bool { + return CheckPathMajor(v, pathMajor) == nil +} + +// CheckPathMajor returns a non-nil error if the semantic version v +// does not match the path major version pathMajor. +func CheckPathMajor(v, pathMajor string) error { + // TODO(jayconrod): return errors or panic for invalid inputs. This function + // (and others) was covered by integration tests for cmd/go, and surrounding + // code protected against invalid inputs like non-canonical versions. + if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { + pathMajor = strings.TrimSuffix(pathMajor, "-unstable") + } + if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" { + // Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1. + // For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405. + return nil + } + m := semver.Major(v) + if pathMajor == "" { + if m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" { + return nil + } + pathMajor = "v0 or v1" + } else if pathMajor[0] == '/' || pathMajor[0] == '.' { + if m == pathMajor[1:] { + return nil + } + pathMajor = pathMajor[1:] + } + return &InvalidVersionError{ + Version: v, + Err: fmt.Errorf("should be %s, not %s", pathMajor, semver.Major(v)), + } +} + +// PathMajorPrefix returns the major-version tag prefix implied by pathMajor. +// An empty PathMajorPrefix allows either v0 or v1. +// +// Note that MatchPathMajor may accept some versions that do not actually begin +// with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' +// pathMajor, even though that pathMajor implies 'v1' tagging. +func PathMajorPrefix(pathMajor string) string { + if pathMajor == "" { + return "" + } + if pathMajor[0] != '/' && pathMajor[0] != '.' { + panic("pathMajor suffix " + pathMajor + " passed to PathMajorPrefix lacks separator") + } + if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { + pathMajor = strings.TrimSuffix(pathMajor, "-unstable") + } + m := pathMajor[1:] + if m != semver.Major(m) { + panic("pathMajor suffix " + pathMajor + "passed to PathMajorPrefix is not a valid major version") + } + return m +} + +// CanonicalVersion returns the canonical form of the version string v. +// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible". +func CanonicalVersion(v string) string { + cv := semver.Canonical(v) + if semver.Build(v) == "+incompatible" { + cv += "+incompatible" + } + return cv +} + +// Sort sorts the list by Path, breaking ties by comparing Version fields. +// The Version fields are interpreted as semantic versions (using semver.Compare) +// optionally followed by a tie-breaking suffix introduced by a slash character, +// like in "v0.0.1/go.mod". +func Sort(list []Version) { + sort.Slice(list, func(i, j int) bool { + mi := list[i] + mj := list[j] + if mi.Path != mj.Path { + return mi.Path < mj.Path + } + // To help go.sum formatting, allow version/file. + // Compare semver prefix by semver rules, + // file by string order. + vi := mi.Version + vj := mj.Version + var fi, fj string + if k := strings.Index(vi, "/"); k >= 0 { + vi, fi = vi[:k], vi[k:] + } + if k := strings.Index(vj, "/"); k >= 0 { + vj, fj = vj[:k], vj[k:] + } + if vi != vj { + return semver.Compare(vi, vj) < 0 + } + return fi < fj + }) +} + +// EscapePath returns the escaped form of the given module path. +// It fails if the module path is invalid. +func EscapePath(path string) (escaped string, err error) { + if err := CheckPath(path); err != nil { + return "", err + } + + return escapeString(path) +} + +// EscapeVersion returns the escaped form of the given module version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func EscapeVersion(v string) (escaped string, err error) { + if err := checkElem(v, filePath); err != nil || strings.Contains(v, "!") { + return "", &InvalidVersionError{ + Version: v, + Err: fmt.Errorf("disallowed version string"), + } + } + return escapeString(v) +} + +func escapeString(s string) (escaped string, err error) { + haveUpper := false + for _, r := range s { + if r == '!' || r >= utf8.RuneSelf { + // This should be disallowed by CheckPath, but diagnose anyway. + // The correctness of the escaping loop below depends on it. + return "", fmt.Errorf("internal error: inconsistency in EscapePath") + } + if 'A' <= r && r <= 'Z' { + haveUpper = true + } + } + + if !haveUpper { + return s, nil + } + + var buf []byte + for _, r := range s { + if 'A' <= r && r <= 'Z' { + buf = append(buf, '!', byte(r+'a'-'A')) + } else { + buf = append(buf, byte(r)) + } + } + return string(buf), nil +} + +// UnescapePath returns the module path for the given escaped path. +// It fails if the escaped path is invalid or describes an invalid path. +func UnescapePath(escaped string) (path string, err error) { + path, ok := unescapeString(escaped) + if !ok { + return "", fmt.Errorf("invalid escaped module path %q", escaped) + } + if err := CheckPath(path); err != nil { + return "", fmt.Errorf("invalid escaped module path %q: %v", escaped, err) + } + return path, nil +} + +// UnescapeVersion returns the version string for the given escaped version. +// It fails if the escaped form is invalid or describes an invalid version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func UnescapeVersion(escaped string) (v string, err error) { + v, ok := unescapeString(escaped) + if !ok { + return "", fmt.Errorf("invalid escaped version %q", escaped) + } + if err := checkElem(v, filePath); err != nil { + return "", fmt.Errorf("invalid escaped version %q: %v", v, err) + } + return v, nil +} + +func unescapeString(escaped string) (string, bool) { + var buf []byte + + bang := false + for _, r := range escaped { + if r >= utf8.RuneSelf { + return "", false + } + if bang { + bang = false + if r < 'a' || 'z' < r { + return "", false + } + buf = append(buf, byte(r+'A'-'a')) + continue + } + if r == '!' { + bang = true + continue + } + if 'A' <= r && r <= 'Z' { + return "", false + } + buf = append(buf, byte(r)) + } + if bang { + return "", false + } + return string(buf), true +} + +// MatchPrefixPatterns reports whether any path prefix of target matches one of +// the glob patterns (as defined by path.Match) in the comma-separated globs +// list. This implements the algorithm used when matching a module path to the +// GOPRIVATE environment variable, as described by 'go help module-private'. +// +// It ignores any empty or malformed patterns in the list. +// Trailing slashes on patterns are ignored. +func MatchPrefixPatterns(globs, target string) bool { + for globs != "" { + // Extract next non-empty glob in comma-separated list. + var glob string + if i := strings.Index(globs, ","); i >= 0 { + glob, globs = globs[:i], globs[i+1:] + } else { + glob, globs = globs, "" + } + glob = strings.TrimSuffix(glob, "/") + if glob == "" { + continue + } + + // A glob with N+1 path elements (N slashes) needs to be matched + // against the first N+1 path elements of target, + // which end just before the N+1'th slash. + n := strings.Count(glob, "/") + prefix := target + // Walk target, counting slashes, truncating at the N+1'th slash. + for i := 0; i < len(target); i++ { + if target[i] == '/' { + if n == 0 { + prefix = target[:i] + break + } + n-- + } + } + if n > 0 { + // Not enough prefix elements. + continue + } + matched, _ := path.Match(glob, prefix) + if matched { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/golang.org/x/mod/module/pseudo.go b/cluster-autoscaler/vendor/golang.org/x/mod/module/pseudo.go new file mode 100644 index 000000000000..f04ad3788694 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/mod/module/pseudo.go @@ -0,0 +1,250 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Pseudo-versions +// +// Code authors are expected to tag the revisions they want users to use, +// including prereleases. However, not all authors tag versions at all, +// and not all commits a user might want to try will have tags. +// A pseudo-version is a version with a special form that allows us to +// address an untagged commit and order that version with respect to +// other versions we might encounter. +// +// A pseudo-version takes one of the general forms: +// +// (1) vX.0.0-yyyymmddhhmmss-abcdef123456 +// (2) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 +// (3) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible +// (4) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 +// (5) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible +// +// If there is no recently tagged version with the right major version vX, +// then form (1) is used, creating a space of pseudo-versions at the bottom +// of the vX version range, less than any tagged version, including the unlikely v0.0.0. +// +// If the most recent tagged version before the target commit is vX.Y.Z or vX.Y.Z+incompatible, +// then the pseudo-version uses form (2) or (3), making it a prerelease for the next +// possible semantic version after vX.Y.Z. The leading 0 segment in the prerelease string +// ensures that the pseudo-version compares less than possible future explicit prereleases +// like vX.Y.(Z+1)-rc1 or vX.Y.(Z+1)-1. +// +// If the most recent tagged version before the target commit is vX.Y.Z-pre or vX.Y.Z-pre+incompatible, +// then the pseudo-version uses form (4) or (5), making it a slightly later prerelease. + +package module + +import ( + "errors" + "fmt" + "strings" + "time" + + "golang.org/x/mod/internal/lazyregexp" + "golang.org/x/mod/semver" +) + +var pseudoVersionRE = lazyregexp.New(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$`) + +const PseudoVersionTimestampFormat = "20060102150405" + +// PseudoVersion returns a pseudo-version for the given major version ("v1") +// preexisting older tagged version ("" or "v1.2.3" or "v1.2.3-pre"), revision time, +// and revision identifier (usually a 12-byte commit hash prefix). +func PseudoVersion(major, older string, t time.Time, rev string) string { + if major == "" { + major = "v0" + } + segment := fmt.Sprintf("%s-%s", t.UTC().Format(PseudoVersionTimestampFormat), rev) + build := semver.Build(older) + older = semver.Canonical(older) + if older == "" { + return major + ".0.0-" + segment // form (1) + } + if semver.Prerelease(older) != "" { + return older + ".0." + segment + build // form (4), (5) + } + + // Form (2), (3). + // Extract patch from vMAJOR.MINOR.PATCH + i := strings.LastIndex(older, ".") + 1 + v, patch := older[:i], older[i:] + + // Reassemble. + return v + incDecimal(patch) + "-0." + segment + build +} + +// ZeroPseudoVersion returns a pseudo-version with a zero timestamp and +// revision, which may be used as a placeholder. +func ZeroPseudoVersion(major string) string { + return PseudoVersion(major, "", time.Time{}, "000000000000") +} + +// incDecimal returns the decimal string incremented by 1. +func incDecimal(decimal string) string { + // Scan right to left turning 9s to 0s until you find a digit to increment. + digits := []byte(decimal) + i := len(digits) - 1 + for ; i >= 0 && digits[i] == '9'; i-- { + digits[i] = '0' + } + if i >= 0 { + digits[i]++ + } else { + // digits is all zeros + digits[0] = '1' + digits = append(digits, '0') + } + return string(digits) +} + +// decDecimal returns the decimal string decremented by 1, or the empty string +// if the decimal is all zeroes. +func decDecimal(decimal string) string { + // Scan right to left turning 0s to 9s until you find a digit to decrement. + digits := []byte(decimal) + i := len(digits) - 1 + for ; i >= 0 && digits[i] == '0'; i-- { + digits[i] = '9' + } + if i < 0 { + // decimal is all zeros + return "" + } + if i == 0 && digits[i] == '1' && len(digits) > 1 { + digits = digits[1:] + } else { + digits[i]-- + } + return string(digits) +} + +// IsPseudoVersion reports whether v is a pseudo-version. +func IsPseudoVersion(v string) bool { + return strings.Count(v, "-") >= 2 && semver.IsValid(v) && pseudoVersionRE.MatchString(v) +} + +// IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, +// timestamp, and revision, as returned by ZeroPseudoVersion. +func IsZeroPseudoVersion(v string) bool { + return v == ZeroPseudoVersion(semver.Major(v)) +} + +// PseudoVersionTime returns the time stamp of the pseudo-version v. +// It returns an error if v is not a pseudo-version or if the time stamp +// embedded in the pseudo-version is not a valid time. +func PseudoVersionTime(v string) (time.Time, error) { + _, timestamp, _, _, err := parsePseudoVersion(v) + if err != nil { + return time.Time{}, err + } + t, err := time.Parse("20060102150405", timestamp) + if err != nil { + return time.Time{}, &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("malformed time %q", timestamp), + } + } + return t, nil +} + +// PseudoVersionRev returns the revision identifier of the pseudo-version v. +// It returns an error if v is not a pseudo-version. +func PseudoVersionRev(v string) (rev string, err error) { + _, _, rev, _, err = parsePseudoVersion(v) + return +} + +// PseudoVersionBase returns the canonical parent version, if any, upon which +// the pseudo-version v is based. +// +// If v has no parent version (that is, if it is "vX.0.0-[…]"), +// PseudoVersionBase returns the empty string and a nil error. +func PseudoVersionBase(v string) (string, error) { + base, _, _, build, err := parsePseudoVersion(v) + if err != nil { + return "", err + } + + switch pre := semver.Prerelease(base); pre { + case "": + // vX.0.0-yyyymmddhhmmss-abcdef123456 → "" + if build != "" { + // Pseudo-versions of the form vX.0.0-yyyymmddhhmmss-abcdef123456+incompatible + // are nonsensical: the "vX.0.0-" prefix implies that there is no parent tag, + // but the "+incompatible" suffix implies that the major version of + // the parent tag is not compatible with the module's import path. + // + // There are a few such entries in the index generated by proxy.golang.org, + // but we believe those entries were generated by the proxy itself. + return "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("lacks base version, but has build metadata %q", build), + } + } + return "", nil + + case "-0": + // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z + // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z+incompatible + base = strings.TrimSuffix(base, pre) + i := strings.LastIndexByte(base, '.') + if i < 0 { + panic("base from parsePseudoVersion missing patch number: " + base) + } + patch := decDecimal(base[i+1:]) + if patch == "" { + // vX.0.0-0 is invalid, but has been observed in the wild in the index + // generated by requests to proxy.golang.org. + // + // NOTE(bcmills): I cannot find a historical bug that accounts for + // pseudo-versions of this form, nor have I seen such versions in any + // actual go.mod files. If we find actual examples of this form and a + // reasonable theory of how they came into existence, it seems fine to + // treat them as equivalent to vX.0.0 (especially since the invalid + // pseudo-versions have lower precedence than the real ones). For now, we + // reject them. + return "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: fmt.Errorf("version before %s would have negative patch number", base), + } + } + return base[:i+1] + patch + build, nil + + default: + // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z-pre + // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z-pre+incompatible + if !strings.HasSuffix(base, ".0") { + panic(`base from parsePseudoVersion missing ".0" before date: ` + base) + } + return strings.TrimSuffix(base, ".0") + build, nil + } +} + +var errPseudoSyntax = errors.New("syntax error") + +func parsePseudoVersion(v string) (base, timestamp, rev, build string, err error) { + if !IsPseudoVersion(v) { + return "", "", "", "", &InvalidVersionError{ + Version: v, + Pseudo: true, + Err: errPseudoSyntax, + } + } + build = semver.Build(v) + v = strings.TrimSuffix(v, build) + j := strings.LastIndex(v, "-") + v, rev = v[:j], v[j+1:] + i := strings.LastIndex(v, "-") + if j := strings.LastIndex(v, "."); j > i { + base = v[:j] // "vX.Y.Z-pre.0" or "vX.Y.(Z+1)-0" + timestamp = v[j+1:] + } else { + base = v[:i] // "vX.0.0" + timestamp = v[i+1:] + } + return base, timestamp, rev, build, nil +} diff --git a/cluster-autoscaler/vendor/golang.org/x/net/html/charset/charset.go b/cluster-autoscaler/vendor/golang.org/x/net/html/charset/charset.go new file mode 100644 index 000000000000..13bed1599f71 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/net/html/charset/charset.go @@ -0,0 +1,257 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package charset provides common text encodings for HTML documents. +// +// The mapping from encoding labels to encodings is defined at +// https://encoding.spec.whatwg.org/. +package charset // import "golang.org/x/net/html/charset" + +import ( + "bytes" + "fmt" + "io" + "mime" + "strings" + "unicode/utf8" + + "golang.org/x/net/html" + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/htmlindex" + "golang.org/x/text/transform" +) + +// Lookup returns the encoding with the specified label, and its canonical +// name. It returns nil and the empty string if label is not one of the +// standard encodings for HTML. Matching is case-insensitive and ignores +// leading and trailing whitespace. Encoders will use HTML escape sequences for +// runes that are not supported by the character set. +func Lookup(label string) (e encoding.Encoding, name string) { + e, err := htmlindex.Get(label) + if err != nil { + return nil, "" + } + name, _ = htmlindex.Name(e) + return &htmlEncoding{e}, name +} + +type htmlEncoding struct{ encoding.Encoding } + +func (h *htmlEncoding) NewEncoder() *encoding.Encoder { + // HTML requires a non-terminating legacy encoder. We use HTML escapes to + // substitute unsupported code points. + return encoding.HTMLEscapeUnsupported(h.Encoding.NewEncoder()) +} + +// DetermineEncoding determines the encoding of an HTML document by examining +// up to the first 1024 bytes of content and the declared Content-Type. +// +// See http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#determining-the-character-encoding +func DetermineEncoding(content []byte, contentType string) (e encoding.Encoding, name string, certain bool) { + if len(content) > 1024 { + content = content[:1024] + } + + for _, b := range boms { + if bytes.HasPrefix(content, b.bom) { + e, name = Lookup(b.enc) + return e, name, true + } + } + + if _, params, err := mime.ParseMediaType(contentType); err == nil { + if cs, ok := params["charset"]; ok { + if e, name = Lookup(cs); e != nil { + return e, name, true + } + } + } + + if len(content) > 0 { + e, name = prescan(content) + if e != nil { + return e, name, false + } + } + + // Try to detect UTF-8. + // First eliminate any partial rune at the end. + for i := len(content) - 1; i >= 0 && i > len(content)-4; i-- { + b := content[i] + if b < 0x80 { + break + } + if utf8.RuneStart(b) { + content = content[:i] + break + } + } + hasHighBit := false + for _, c := range content { + if c >= 0x80 { + hasHighBit = true + break + } + } + if hasHighBit && utf8.Valid(content) { + return encoding.Nop, "utf-8", false + } + + // TODO: change default depending on user's locale? + return charmap.Windows1252, "windows-1252", false +} + +// NewReader returns an io.Reader that converts the content of r to UTF-8. +// It calls DetermineEncoding to find out what r's encoding is. +func NewReader(r io.Reader, contentType string) (io.Reader, error) { + preview := make([]byte, 1024) + n, err := io.ReadFull(r, preview) + switch { + case err == io.ErrUnexpectedEOF: + preview = preview[:n] + r = bytes.NewReader(preview) + case err != nil: + return nil, err + default: + r = io.MultiReader(bytes.NewReader(preview), r) + } + + if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop { + r = transform.NewReader(r, e.NewDecoder()) + } + return r, nil +} + +// NewReaderLabel returns a reader that converts from the specified charset to +// UTF-8. It uses Lookup to find the encoding that corresponds to label, and +// returns an error if Lookup returns nil. It is suitable for use as +// encoding/xml.Decoder's CharsetReader function. +func NewReaderLabel(label string, input io.Reader) (io.Reader, error) { + e, _ := Lookup(label) + if e == nil { + return nil, fmt.Errorf("unsupported charset: %q", label) + } + return transform.NewReader(input, e.NewDecoder()), nil +} + +func prescan(content []byte) (e encoding.Encoding, name string) { + z := html.NewTokenizer(bytes.NewReader(content)) + for { + switch z.Next() { + case html.ErrorToken: + return nil, "" + + case html.StartTagToken, html.SelfClosingTagToken: + tagName, hasAttr := z.TagName() + if !bytes.Equal(tagName, []byte("meta")) { + continue + } + attrList := make(map[string]bool) + gotPragma := false + + const ( + dontKnow = iota + doNeedPragma + doNotNeedPragma + ) + needPragma := dontKnow + + name = "" + e = nil + for hasAttr { + var key, val []byte + key, val, hasAttr = z.TagAttr() + ks := string(key) + if attrList[ks] { + continue + } + attrList[ks] = true + for i, c := range val { + if 'A' <= c && c <= 'Z' { + val[i] = c + 0x20 + } + } + + switch ks { + case "http-equiv": + if bytes.Equal(val, []byte("content-type")) { + gotPragma = true + } + + case "content": + if e == nil { + name = fromMetaElement(string(val)) + if name != "" { + e, name = Lookup(name) + if e != nil { + needPragma = doNeedPragma + } + } + } + + case "charset": + e, name = Lookup(string(val)) + needPragma = doNotNeedPragma + } + } + + if needPragma == dontKnow || needPragma == doNeedPragma && !gotPragma { + continue + } + + if strings.HasPrefix(name, "utf-16") { + name = "utf-8" + e = encoding.Nop + } + + if e != nil { + return e, name + } + } + } +} + +func fromMetaElement(s string) string { + for s != "" { + csLoc := strings.Index(s, "charset") + if csLoc == -1 { + return "" + } + s = s[csLoc+len("charset"):] + s = strings.TrimLeft(s, " \t\n\f\r") + if !strings.HasPrefix(s, "=") { + continue + } + s = s[1:] + s = strings.TrimLeft(s, " \t\n\f\r") + if s == "" { + return "" + } + if q := s[0]; q == '"' || q == '\'' { + s = s[1:] + closeQuote := strings.IndexRune(s, rune(q)) + if closeQuote == -1 { + return "" + } + return s[:closeQuote] + } + + end := strings.IndexAny(s, "; \t\n\f\r") + if end == -1 { + end = len(s) + } + return s[:end] + } + return "" +} + +var boms = []struct { + bom []byte + enc string +}{ + {[]byte{0xfe, 0xff}, "utf-16be"}, + {[]byte{0xff, 0xfe}, "utf-16le"}, + {[]byte{0xef, 0xbb, 0xbf}, "utf-8"}, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/charmap.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/charmap.go new file mode 100644 index 000000000000..e89ff0734fdb --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/charmap.go @@ -0,0 +1,249 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run maketables.go + +// Package charmap provides simple character encodings such as IBM Code Page 437 +// and Windows 1252. +package charmap // import "golang.org/x/text/encoding/charmap" + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// These encodings vary only in the way clients should interpret them. Their +// coded character set is identical and a single implementation can be shared. +var ( + // ISO8859_6E is the ISO 8859-6E encoding. + ISO8859_6E encoding.Encoding = &iso8859_6E + + // ISO8859_6I is the ISO 8859-6I encoding. + ISO8859_6I encoding.Encoding = &iso8859_6I + + // ISO8859_8E is the ISO 8859-8E encoding. + ISO8859_8E encoding.Encoding = &iso8859_8E + + // ISO8859_8I is the ISO 8859-8I encoding. + ISO8859_8I encoding.Encoding = &iso8859_8I + + iso8859_6E = internal.Encoding{ + Encoding: ISO8859_6, + Name: "ISO-8859-6E", + MIB: identifier.ISO88596E, + } + + iso8859_6I = internal.Encoding{ + Encoding: ISO8859_6, + Name: "ISO-8859-6I", + MIB: identifier.ISO88596I, + } + + iso8859_8E = internal.Encoding{ + Encoding: ISO8859_8, + Name: "ISO-8859-8E", + MIB: identifier.ISO88598E, + } + + iso8859_8I = internal.Encoding{ + Encoding: ISO8859_8, + Name: "ISO-8859-8I", + MIB: identifier.ISO88598I, + } +) + +// All is a list of all defined encodings in this package. +var All []encoding.Encoding = listAll + +// TODO: implement these encodings, in order of importance. +// ASCII, ISO8859_1: Rather common. Close to Windows 1252. +// ISO8859_9: Close to Windows 1254. + +// utf8Enc holds a rune's UTF-8 encoding in data[:len]. +type utf8Enc struct { + len uint8 + data [3]byte +} + +// Charmap is an 8-bit character set encoding. +type Charmap struct { + // name is the encoding's name. + name string + // mib is the encoding type of this encoder. + mib identifier.MIB + // asciiSuperset states whether the encoding is a superset of ASCII. + asciiSuperset bool + // low is the lower bound of the encoded byte for a non-ASCII rune. If + // Charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00. + low uint8 + // replacement is the encoded replacement character. + replacement byte + // decode is the map from encoded byte to UTF-8. + decode [256]utf8Enc + // encoding is the map from runes to encoded bytes. Each entry is a + // uint32: the high 8 bits are the encoded byte and the low 24 bits are + // the rune. The table entries are sorted by ascending rune. + encode [256]uint32 +} + +// NewDecoder implements the encoding.Encoding interface. +func (m *Charmap) NewDecoder() *encoding.Decoder { + return &encoding.Decoder{Transformer: charmapDecoder{charmap: m}} +} + +// NewEncoder implements the encoding.Encoding interface. +func (m *Charmap) NewEncoder() *encoding.Encoder { + return &encoding.Encoder{Transformer: charmapEncoder{charmap: m}} +} + +// String returns the Charmap's name. +func (m *Charmap) String() string { + return m.name +} + +// ID implements an internal interface. +func (m *Charmap) ID() (mib identifier.MIB, other string) { + return m.mib, "" +} + +// charmapDecoder implements transform.Transformer by decoding to UTF-8. +type charmapDecoder struct { + transform.NopResetter + charmap *Charmap +} + +func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + for i, c := range src { + if m.charmap.asciiSuperset && c < utf8.RuneSelf { + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = c + nDst++ + nSrc = i + 1 + continue + } + + decode := &m.charmap.decode[c] + n := int(decode.len) + if nDst+n > len(dst) { + err = transform.ErrShortDst + break + } + // It's 15% faster to avoid calling copy for these tiny slices. + for j := 0; j < n; j++ { + dst[nDst] = decode.data[j] + nDst++ + } + nSrc = i + 1 + } + return nDst, nSrc, err +} + +// DecodeByte returns the Charmap's rune decoding of the byte b. +func (m *Charmap) DecodeByte(b byte) rune { + switch x := &m.decode[b]; x.len { + case 1: + return rune(x.data[0]) + case 2: + return rune(x.data[0]&0x1f)<<6 | rune(x.data[1]&0x3f) + default: + return rune(x.data[0]&0x0f)<<12 | rune(x.data[1]&0x3f)<<6 | rune(x.data[2]&0x3f) + } +} + +// charmapEncoder implements transform.Transformer by encoding from UTF-8. +type charmapEncoder struct { + transform.NopResetter + charmap *Charmap +} + +func (m charmapEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for nSrc < len(src) { + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + if m.charmap.asciiSuperset { + nSrc++ + dst[nDst] = uint8(r) + nDst++ + continue + } + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + } else { + err = internal.RepertoireError(m.charmap.replacement) + } + break + } + } + + // Binary search in [low, high) for that rune in the m.charmap.encode table. + for low, high := int(m.charmap.low), 0x100; ; { + if low >= high { + err = internal.RepertoireError(m.charmap.replacement) + break loop + } + mid := (low + high) / 2 + got := m.charmap.encode[mid] + gotRune := rune(got & (1<<24 - 1)) + if gotRune < r { + low = mid + 1 + } else if gotRune > r { + high = mid + } else { + dst[nDst] = byte(got >> 24) + nDst++ + break + } + } + nSrc += size + } + return nDst, nSrc, err +} + +// EncodeRune returns the Charmap's byte encoding of the rune r. ok is whether +// r is in the Charmap's repertoire. If not, b is set to the Charmap's +// replacement byte. This is often the ASCII substitute character '\x1a'. +func (m *Charmap) EncodeRune(r rune) (b byte, ok bool) { + if r < utf8.RuneSelf && m.asciiSuperset { + return byte(r), true + } + for low, high := int(m.low), 0x100; ; { + if low >= high { + return m.replacement, false + } + mid := (low + high) / 2 + got := m.encode[mid] + gotRune := rune(got & (1<<24 - 1)) + if gotRune < r { + low = mid + 1 + } else if gotRune > r { + high = mid + } else { + return byte(got >> 24), true + } + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/tables.go new file mode 100644 index 000000000000..cf7281e9e36e --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/charmap/tables.go @@ -0,0 +1,7410 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package charmap + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" +) + +// CodePage037 is the IBM Code Page 037 encoding. +var CodePage037 *Charmap = &codePage037 + +var codePage037 = Charmap{ + name: "IBM Code Page 037", + mib: identifier.IBM037, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7, + 0xbd0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, + 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, + 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, + 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, + 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, + 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, + 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, + 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, + 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, + 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, + 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, + }, +} + +// CodePage437 is the IBM Code Page 437 encoding. +var CodePage437 *Charmap = &codePage437 + +var codePage437 = Charmap{ + name: "IBM Code Page 437", + mib: identifier.PC8CodePage437, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, + 0xab0000bd, 0xa80000bf, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, + 0x990000d6, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, + 0x910000e6, 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, + 0x8c0000ee, 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, + 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage850 is the IBM Code Page 850 encoding. +var CodePage850 *Charmap = &codePage850 + +var codePage850 = Charmap{ + name: "IBM Code Page 850", + mib: identifier.PC850Multilingual, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7, + 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7, + 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf, + 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, + 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf, + 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7, + 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df, + 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef, + 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7, + 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff, + 0xd5000131, 0x9f000192, 0xf2002017, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage852 is the IBM Code Page 852 encoding. +var CodePage852 *Charmap = &codePage852 + +var codePage852 = Charmap{ + name: "IBM Code Page 852", + mib: identifier.PCp852, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc5, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}}, + {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xa5, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbe, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc4, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}}, + {2, [3]byte{0xc4, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x8f, 0x00}}, {2, [3]byte{0xc5, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc5, 0xa2, 0x00}}, + {2, [3]byte{0xc5, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x84, 0x00}}, {2, [3]byte{0xc5, 0x88, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x99, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xcf0000a4, 0xf50000a7, 0xf90000a8, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xf80000b0, + 0xef0000b4, 0xf70000b8, 0xaf0000bb, 0xb50000c1, 0xb60000c2, 0x8e0000c4, 0x800000c7, 0x900000c9, + 0xd30000cb, 0xd60000cd, 0xd70000ce, 0xe00000d3, 0xe20000d4, 0x990000d6, 0x9e0000d7, 0xe90000da, + 0x9a0000dc, 0xed0000dd, 0xe10000df, 0xa00000e1, 0x830000e2, 0x840000e4, 0x870000e7, 0x820000e9, + 0x890000eb, 0xa10000ed, 0x8c0000ee, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0xa30000fa, + 0x810000fc, 0xec0000fd, 0xc6000102, 0xc7000103, 0xa4000104, 0xa5000105, 0x8f000106, 0x86000107, + 0xac00010c, 0x9f00010d, 0xd200010e, 0xd400010f, 0xd1000110, 0xd0000111, 0xa8000118, 0xa9000119, + 0xb700011a, 0xd800011b, 0x91000139, 0x9200013a, 0x9500013d, 0x9600013e, 0x9d000141, 0x88000142, + 0xe3000143, 0xe4000144, 0xd5000147, 0xe5000148, 0x8a000150, 0x8b000151, 0xe8000154, 0xea000155, + 0xfc000158, 0xfd000159, 0x9700015a, 0x9800015b, 0xb800015e, 0xad00015f, 0xe6000160, 0xe7000161, + 0xdd000162, 0xee000163, 0x9b000164, 0x9c000165, 0xde00016e, 0x8500016f, 0xeb000170, 0xfb000171, + 0x8d000179, 0xab00017a, 0xbd00017b, 0xbe00017c, 0xa600017d, 0xa700017e, 0xf30002c7, 0xf40002d8, + 0xfa0002d9, 0xf20002db, 0xf10002dd, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage855 is the IBM Code Page 855 encoding. +var CodePage855 *Charmap = &codePage855 + +var codePage855 = Charmap{ + name: "IBM Code Page 855", + mib: identifier.IBM855, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x82, 0x00}}, + {2, [3]byte{0xd1, 0x93, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x84, 0x00}}, + {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}}, + {2, [3]byte{0xd1, 0x97, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x8a, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}}, + {2, [3]byte{0xd1, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xae, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0xb5, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xa4, 0x00}}, + {2, [3]byte{0xd0, 0xb3, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd1, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xd0, 0xaf, 0x00}}, {2, [3]byte{0xd1, 0x80, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0xa1, 0x00}}, {2, [3]byte{0xd1, 0x82, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xa3, 0x00}}, {2, [3]byte{0xd0, 0xb6, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x8c, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xab, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd0, 0xa9, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xcf0000a4, 0xfd0000a7, 0xae0000ab, 0xf00000ad, 0xaf0000bb, 0x85000401, 0x81000402, + 0x83000403, 0x87000404, 0x89000405, 0x8b000406, 0x8d000407, 0x8f000408, 0x91000409, 0x9300040a, + 0x9500040b, 0x9700040c, 0x9900040e, 0x9b00040f, 0xa1000410, 0xa3000411, 0xec000412, 0xad000413, + 0xa7000414, 0xa9000415, 0xea000416, 0xf4000417, 0xb8000418, 0xbe000419, 0xc700041a, 0xd100041b, + 0xd300041c, 0xd500041d, 0xd700041e, 0xdd00041f, 0xe2000420, 0xe4000421, 0xe6000422, 0xe8000423, + 0xab000424, 0xb6000425, 0xa5000426, 0xfc000427, 0xf6000428, 0xfa000429, 0x9f00042a, 0xf200042b, + 0xee00042c, 0xf800042d, 0x9d00042e, 0xe000042f, 0xa0000430, 0xa2000431, 0xeb000432, 0xac000433, + 0xa6000434, 0xa8000435, 0xe9000436, 0xf3000437, 0xb7000438, 0xbd000439, 0xc600043a, 0xd000043b, + 0xd200043c, 0xd400043d, 0xd600043e, 0xd800043f, 0xe1000440, 0xe3000441, 0xe5000442, 0xe7000443, + 0xaa000444, 0xb5000445, 0xa4000446, 0xfb000447, 0xf5000448, 0xf9000449, 0x9e00044a, 0xf100044b, + 0xed00044c, 0xf700044d, 0x9c00044e, 0xde00044f, 0x84000451, 0x80000452, 0x82000453, 0x86000454, + 0x88000455, 0x8a000456, 0x8c000457, 0x8e000458, 0x90000459, 0x9200045a, 0x9400045b, 0x9600045c, + 0x9800045e, 0x9a00045f, 0xef002116, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage858 is the Windows Code Page 858 encoding. +var CodePage858 *Charmap = &codePage858 + +var codePage858 = Charmap{ + name: "Windows Code Page 858", + mib: identifier.IBM00858, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7, + 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7, + 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf, + 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, + 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf, + 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7, + 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df, + 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef, + 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7, + 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff, + 0x9f000192, 0xf2002017, 0xd50020ac, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, + 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, + 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569, + 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage860 is the IBM Code Page 860 encoding. +var CodePage860 *Charmap = &codePage860 + +var codePage860 = Charmap{ + name: "IBM Code Page 860", + mib: identifier.IBM860, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x8a, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0, + 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, + 0xa80000bf, 0x910000c0, 0x860000c1, 0x8f0000c2, 0x8e0000c3, 0x800000c7, 0x920000c8, 0x900000c9, + 0x890000ca, 0x980000cc, 0x8b0000cd, 0xa50000d1, 0xa90000d2, 0x9f0000d3, 0x8c0000d4, 0x990000d5, + 0x9d0000d9, 0x960000da, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e3, + 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x8d0000ec, 0xa10000ed, 0xa40000f1, 0x950000f2, + 0xa20000f3, 0x930000f4, 0x940000f5, 0xf60000f7, 0x970000f9, 0xa30000fa, 0x810000fc, 0xe2000393, + 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, + 0xe50003c3, 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, + 0xef002229, 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage862 is the IBM Code Page 862 encoding. +var CodePage862 *Charmap = &codePage862 + +var codePage862 = Charmap{ + name: "IBM Code Page 862", + mib: identifier.PC862LatinHebrew, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac, + 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, + 0xab0000bd, 0xa80000bf, 0xa50000d1, 0xe10000df, 0xa00000e1, 0xa10000ed, 0xa40000f1, 0xa20000f3, + 0xf60000f7, 0xa30000fa, 0x9f000192, 0xe2000393, 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, + 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, 0xe70003c4, 0xed0003c6, 0x800005d0, + 0x810005d1, 0x820005d2, 0x830005d3, 0x840005d4, 0x850005d5, 0x860005d6, 0x870005d7, 0x880005d8, + 0x890005d9, 0x8a0005da, 0x8b0005db, 0x8c0005dc, 0x8d0005dd, 0x8e0005de, 0x8f0005df, 0x900005e0, + 0x910005e1, 0x920005e2, 0x930005e3, 0x940005e4, 0x950005e5, 0x960005e6, 0x970005e7, 0x980005e8, + 0x990005e9, 0x9a0005ea, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage863 is the IBM Code Page 863 encoding. +var CodePage863 *Charmap = &codePage863 + +var codePage863 = Charmap{ + name: "IBM Code Page 863", + mib: identifier.IBM863, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x97}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0x9b0000a2, 0x9c0000a3, 0x980000a4, 0xa00000a6, 0x8f0000a7, 0xa40000a8, 0xae0000ab, + 0xaa0000ac, 0xa70000af, 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xa60000b3, 0xa10000b4, 0xe60000b5, + 0x860000b6, 0xfa0000b7, 0xa50000b8, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xad0000be, 0x8e0000c0, + 0x840000c2, 0x800000c7, 0x910000c8, 0x900000c9, 0x920000ca, 0x940000cb, 0xa80000ce, 0x950000cf, + 0x990000d4, 0x9d0000d9, 0x9e0000db, 0x9a0000dc, 0xe10000df, 0x850000e0, 0x830000e2, 0x870000e7, + 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8c0000ee, 0x8b0000ef, 0xa20000f3, 0x930000f4, + 0xf60000f7, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0x8d002017, 0xfc00207f, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage865 is the IBM Code Page 865 encoding. +var CodePage865 *Charmap = &codePage865 + +var codePage865 = Charmap{ + name: "IBM Code Page 865", + mib: identifier.IBM865, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}}, + {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}}, + {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}}, + {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}}, + {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xad0000a1, 0x9c0000a3, 0xaf0000a4, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0, + 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xac0000bc, 0xab0000bd, 0xa80000bf, + 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, 0x990000d6, 0x9d0000d8, + 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, 0x910000e6, + 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, + 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0x9b0000f8, + 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398, + 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, + 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229, + 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage866 is the IBM Code Page 866 encoding. +var CodePage866 *Charmap = &codePage866 + +var codePage866 = Charmap{ + name: "IBM Code Page 866", + mib: identifier.IBM866, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}}, + {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}}, + {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}}, + {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}}, + {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}}, + {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}}, + {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xff0000a0, 0xfd0000a4, 0xf80000b0, 0xfa0000b7, 0xf0000401, 0xf2000404, 0xf4000407, 0xf600040e, + 0x80000410, 0x81000411, 0x82000412, 0x83000413, 0x84000414, 0x85000415, 0x86000416, 0x87000417, + 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, + 0x90000420, 0x91000421, 0x92000422, 0x93000423, 0x94000424, 0x95000425, 0x96000426, 0x97000427, + 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, + 0xa0000430, 0xa1000431, 0xa2000432, 0xa3000433, 0xa4000434, 0xa5000435, 0xa6000436, 0xa7000437, + 0xa8000438, 0xa9000439, 0xaa00043a, 0xab00043b, 0xac00043c, 0xad00043d, 0xae00043e, 0xaf00043f, + 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, 0xe7000447, + 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, 0xef00044f, + 0xf1000451, 0xf3000454, 0xf5000457, 0xf700045e, 0xfc002116, 0xf9002219, 0xfb00221a, 0xc4002500, + 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, + 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555, + 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d, + 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565, + 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580, + 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0, + }, +} + +// CodePage1047 is the IBM Code Page 1047 encoding. +var CodePage1047 *Charmap = &codePage1047 + +var codePage1047 = Charmap{ + name: "IBM Code Page 1047", + mib: identifier.IBM1047, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {1, [3]byte{0x5e, 0x00, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {2, [3]byte{0xc3, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xad00005b, 0xe000005c, 0xbd00005d, 0x5f00005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7, + 0xbb0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0xb00000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, + 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, + 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, + 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, + 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, + 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, + 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xba0000dd, 0xae0000de, 0x590000df, + 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, + 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, + 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, + 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, + }, +} + +// CodePage1140 is the IBM Code Page 1140 encoding. +var CodePage1140 *Charmap = &codePage1140 + +var codePage1140 = Charmap{ + name: "IBM Code Page 1140", + mib: identifier.IBM01140, + asciiSuperset: false, + low: 0x00, + replacement: 0x3f, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}}, + {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}}, + {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}}, + {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}}, + {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}}, + {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}}, + {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}}, + {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}}, + {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}}, + {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}}, + {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}}, + {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}}, + {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}}, + {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}}, + {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}}, + {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}}, + {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}}, + {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}}, + {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}}, + {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}}, + {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}}, + {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007, + 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017, + 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027, + 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f, + 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037, + 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f, + 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047, + 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f, + 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057, + 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f, + 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067, + 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f, + 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077, + 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f, + 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087, + 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f, + 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097, + 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f, + 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0xb20000a5, 0x6a0000a6, 0xb50000a7, 0xbd0000a8, + 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, 0x900000b0, + 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, 0x9d0000b8, + 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, 0x640000c0, + 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, 0x740000c8, + 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, 0xac0000d0, + 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, 0x800000d8, + 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, 0x440000e0, + 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, 0x540000e8, + 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, 0x8c0000f0, + 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, 0x700000f8, + 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, 0x9f0020ac, + }, +} + +// ISO8859_1 is the ISO 8859-1 encoding. +var ISO8859_1 *Charmap = &iso8859_1 + +var iso8859_1 = Charmap{ + name: "ISO 8859-1", + mib: identifier.ISOLatin1, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087, + 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f, + 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097, + 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + }, +} + +// ISO8859_2 is the ISO 8859-2 encoding. +var ISO8859_2 *Charmap = &iso8859_2 + +var iso8859_2 = Charmap{ + name: "ISO 8859-2", + mib: identifier.ISOLatin2, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xbe, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb40000b4, 0xb80000b8, + 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, + 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, + 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, 0xfd0000fd, 0xc3000102, + 0xe3000103, 0xa1000104, 0xb1000105, 0xc6000106, 0xe6000107, 0xc800010c, 0xe800010d, 0xcf00010e, + 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, 0xec00011b, 0xc5000139, + 0xe500013a, 0xa500013d, 0xb500013e, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, 0xd2000147, + 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, 0xf8000159, 0xa600015a, + 0xb600015b, 0xaa00015e, 0xba00015f, 0xa9000160, 0xb9000161, 0xde000162, 0xfe000163, 0xab000164, + 0xbb000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0xac000179, 0xbc00017a, 0xaf00017b, + 0xbf00017c, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xa20002d8, 0xff0002d9, 0xb20002db, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, + }, +} + +// ISO8859_3 is the ISO 8859-3 encoding. +var ISO8859_3 *Charmap = &iso8859_3 + +var iso8859_3 = Charmap{ + name: "ISO 8859-3", + mib: identifier.ISOLatin3, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa6, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc4, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc4, 0x9e, 0x00}}, + {2, [3]byte{0xc4, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc4, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc4, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0xb5, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x8a, 0x00}}, + {2, [3]byte{0xc4, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc4, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xac, 0x00}}, + {2, [3]byte{0xc5, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0x9d, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0x9d, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb20000b2, + 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb70000b7, 0xb80000b8, 0xbd0000bd, 0xc00000c0, 0xc10000c1, + 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, + 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, + 0xd70000d7, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, + 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, + 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf60000f6, + 0xf70000f7, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc6000108, 0xe6000109, 0xc500010a, + 0xe500010b, 0xd800011c, 0xf800011d, 0xab00011e, 0xbb00011f, 0xd5000120, 0xf5000121, 0xa6000124, + 0xb6000125, 0xa1000126, 0xb1000127, 0xa9000130, 0xb9000131, 0xac000134, 0xbc000135, 0xde00015c, + 0xfe00015d, 0xaa00015e, 0xba00015f, 0xdd00016c, 0xfd00016d, 0xaf00017b, 0xbf00017c, 0xa20002d8, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, + }, +} + +// ISO8859_4 is the ISO 8859-4 encoding. +var ISO8859_4 *Charmap = &iso8859_4 + +var iso8859_4 = Charmap{ + name: "ISO 8859-4", + mib: identifier.ISOLatin4, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0x96, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}}, + {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}}, + {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}}, + {2, [3]byte{0xc5, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}}, + {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}}, + {2, [3]byte{0xc5, 0xa7, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0xaa, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}}, + {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xaf0000af, 0xb00000b0, 0xb40000b4, + 0xb80000b8, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, + 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, + 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xf40000f4, 0xf50000f5, + 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc0000100, 0xe0000101, + 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, 0xd0000110, 0xf0000111, 0xaa000112, 0xba000113, + 0xcc000116, 0xec000117, 0xca000118, 0xea000119, 0xab000122, 0xbb000123, 0xa5000128, 0xb5000129, + 0xcf00012a, 0xef00012b, 0xc700012e, 0xe700012f, 0xd3000136, 0xf3000137, 0xa2000138, 0xa600013b, + 0xb600013c, 0xd1000145, 0xf1000146, 0xbd00014a, 0xbf00014b, 0xd200014c, 0xf200014d, 0xa3000156, + 0xb3000157, 0xa9000160, 0xb9000161, 0xac000166, 0xbc000167, 0xdd000168, 0xfd000169, 0xde00016a, + 0xfe00016b, 0xd9000172, 0xf9000173, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xff0002d9, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, + }, +} + +// ISO8859_5 is the ISO 8859-5 encoding. +var ISO8859_5 *Charmap = &iso8859_5 + +var iso8859_5 = Charmap{ + name: "ISO 8859-5", + mib: identifier.ISOLatinCyrillic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xd0, 0x88, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9b, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xfd0000a7, 0xad0000ad, 0xa1000401, 0xa2000402, 0xa3000403, 0xa4000404, 0xa5000405, + 0xa6000406, 0xa7000407, 0xa8000408, 0xa9000409, 0xaa00040a, 0xab00040b, 0xac00040c, 0xae00040e, + 0xaf00040f, 0xb0000410, 0xb1000411, 0xb2000412, 0xb3000413, 0xb4000414, 0xb5000415, 0xb6000416, + 0xb7000417, 0xb8000418, 0xb9000419, 0xba00041a, 0xbb00041b, 0xbc00041c, 0xbd00041d, 0xbe00041e, + 0xbf00041f, 0xc0000420, 0xc1000421, 0xc2000422, 0xc3000423, 0xc4000424, 0xc5000425, 0xc6000426, + 0xc7000427, 0xc8000428, 0xc9000429, 0xca00042a, 0xcb00042b, 0xcc00042c, 0xcd00042d, 0xce00042e, + 0xcf00042f, 0xd0000430, 0xd1000431, 0xd2000432, 0xd3000433, 0xd4000434, 0xd5000435, 0xd6000436, + 0xd7000437, 0xd8000438, 0xd9000439, 0xda00043a, 0xdb00043b, 0xdc00043c, 0xdd00043d, 0xde00043e, + 0xdf00043f, 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, + 0xe7000447, 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, + 0xef00044f, 0xf1000451, 0xf2000452, 0xf3000453, 0xf4000454, 0xf5000455, 0xf6000456, 0xf7000457, + 0xf8000458, 0xf9000459, 0xfa00045a, 0xfb00045b, 0xfc00045c, 0xfe00045e, 0xff00045f, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, + }, +} + +// ISO8859_6 is the ISO 8859-6 encoding. +var ISO8859_6 *Charmap = &iso8859_6 + +var iso8859_6 = Charmap{ + name: "ISO 8859-6", + mib: identifier.ISOLatinArabic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd8, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9b, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9f, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0xa1, 0x00}}, + {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}}, + {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}}, + {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}}, + {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}}, + {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}}, + {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}}, + {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}}, + {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}}, + {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}}, + {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}}, + {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xd8, 0xb7, 0x00}}, + {2, [3]byte{0xd8, 0xb8, 0x00}}, {2, [3]byte{0xd8, 0xb9, 0x00}}, + {2, [3]byte{0xd8, 0xba, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}}, + {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}}, + {2, [3]byte{0xd9, 0x84, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}}, + {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}}, + {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xd9, 0x89, 0x00}}, + {2, [3]byte{0xd9, 0x8a, 0x00}}, {2, [3]byte{0xd9, 0x8b, 0x00}}, + {2, [3]byte{0xd9, 0x8c, 0x00}}, {2, [3]byte{0xd9, 0x8d, 0x00}}, + {2, [3]byte{0xd9, 0x8e, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}}, + {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xd9, 0x91, 0x00}}, + {2, [3]byte{0xd9, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xad0000ad, 0xac00060c, 0xbb00061b, 0xbf00061f, 0xc1000621, 0xc2000622, + 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, + 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, + 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, 0xd7000637, 0xd8000638, 0xd9000639, 0xda00063a, + 0xe0000640, 0xe1000641, 0xe2000642, 0xe3000643, 0xe4000644, 0xe5000645, 0xe6000646, 0xe7000647, + 0xe8000648, 0xe9000649, 0xea00064a, 0xeb00064b, 0xec00064c, 0xed00064d, 0xee00064e, 0xef00064f, + 0xf0000650, 0xf1000651, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, + }, +} + +// ISO8859_7 is the ISO 8859-7 encoding. +var ISO8859_7 *Charmap = &iso8859_7 + +var iso8859_7 = Charmap{ + name: "ISO 8859-7", + mib: identifier.ISOLatinGreek, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x82, 0xaf}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xcd, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}}, + {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}}, + {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}}, + {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}}, + {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}}, + {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}}, + {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}}, + {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}}, + {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}}, + {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}}, + {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}}, + {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}}, + {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}}, + {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}}, + {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}}, + {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}}, + {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}}, + {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}}, + {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}}, + {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}}, + {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}}, + {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}}, + {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}}, + {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}}, + {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}}, + {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac, + 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, + 0xaa00037a, 0xb4000384, 0xb5000385, 0xb6000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, + 0xbe00038e, 0xbf00038f, 0xc0000390, 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, + 0xc6000396, 0xc7000397, 0xc8000398, 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, + 0xce00039e, 0xcf00039f, 0xd00003a0, 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, + 0xd70003a7, 0xd80003a8, 0xd90003a9, 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, + 0xdf0003af, 0xe00003b0, 0xe10003b1, 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, + 0xe70003b7, 0xe80003b8, 0xe90003b9, 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, + 0xef0003bf, 0xf00003c0, 0xf10003c1, 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, + 0xf70003c7, 0xf80003c8, 0xf90003c9, 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, + 0xaf002015, 0xa1002018, 0xa2002019, 0xa40020ac, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, + }, +} + +// ISO8859_8 is the ISO 8859-8 encoding. +var ISO8859_8 *Charmap = &iso8859_8 + +var iso8859_8 = Charmap{ + name: "ISO 8859-8", + mib: identifier.ISOLatinHebrew, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x97}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xaa0000d7, 0xba0000f7, 0xe00005d0, 0xe10005d1, + 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9, + 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1, + 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9, + 0xfa0005ea, 0xfd00200e, 0xfe00200f, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, + }, +} + +// ISO8859_9 is the ISO 8859-9 encoding. +var ISO8859_9 *Charmap = &iso8859_9 + +var iso8859_9 = Charmap{ + name: "ISO 8859-9", + mib: identifier.ISOLatin5, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}}, + {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}}, + {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}}, + {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}}, + {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}}, + {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}}, + {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}}, + {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}}, + {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}}, + {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}}, + {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}}, + {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}}, + {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087, + 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f, + 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097, + 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, + 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, + 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, + 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0xde00015e, 0xfe00015f, + }, +} + +// ISO8859_10 is the ISO 8859-10 encoding. +var ISO8859_10 *Charmap = &iso8859_10 + +var iso8859_10 = Charmap{ + name: "ISO 8859-10", + mib: identifier.ISOLatin6, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}}, + {2, [3]byte{0xc4, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa6, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x91, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0xb8, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa70000a7, 0xad0000ad, 0xb00000b0, 0xb70000b7, 0xc10000c1, 0xc20000c2, 0xc30000c3, + 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xda0000da, 0xdb0000db, + 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, + 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf00000f0, + 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, + 0xfd0000fd, 0xfe0000fe, 0xc0000100, 0xe0000101, 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, + 0xa9000110, 0xb9000111, 0xa2000112, 0xb2000113, 0xcc000116, 0xec000117, 0xca000118, 0xea000119, + 0xa3000122, 0xb3000123, 0xa5000128, 0xb5000129, 0xa400012a, 0xb400012b, 0xc700012e, 0xe700012f, + 0xa6000136, 0xb6000137, 0xff000138, 0xa800013b, 0xb800013c, 0xd1000145, 0xf1000146, 0xaf00014a, + 0xbf00014b, 0xd200014c, 0xf200014d, 0xaa000160, 0xba000161, 0xab000166, 0xbb000167, 0xd7000168, + 0xf7000169, 0xae00016a, 0xbe00016b, 0xd9000172, 0xf9000173, 0xac00017d, 0xbc00017e, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, + }, +} + +// ISO8859_13 is the ISO 8859-13 encoding. +var ISO8859_13 *Charmap = &iso8859_13 + +var iso8859_13 = Charmap{ + name: "ISO 8859-13", + mib: identifier.ISO885913, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}}, + {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, + 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb50000b5, + 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, + 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, + 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, + 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, + 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, + 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, + 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, + 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, + 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, + 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, 0xff002019, 0xb400201c, 0xa100201d, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, + }, +} + +// ISO8859_14 is the ISO 8859-14 encoding. +var ISO8859_14 *Charmap = &iso8859_14 + +var iso8859_14 = Charmap{ + name: "ISO 8859-14", + mib: identifier.ISO885914, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe1, 0xb8, 0x82}}, + {3, [3]byte{0xe1, 0xb8, 0x83}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc4, 0x8a, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}}, + {3, [3]byte{0xe1, 0xb8, 0x8a}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {3, [3]byte{0xe1, 0xba, 0x80}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe1, 0xba, 0x82}}, {3, [3]byte{0xe1, 0xb8, 0x8b}}, + {3, [3]byte{0xe1, 0xbb, 0xb2}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {3, [3]byte{0xe1, 0xb8, 0x9e}}, {3, [3]byte{0xe1, 0xb8, 0x9f}}, + {2, [3]byte{0xc4, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}}, + {3, [3]byte{0xe1, 0xb9, 0x80}}, {3, [3]byte{0xe1, 0xb9, 0x81}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0x96}}, + {3, [3]byte{0xe1, 0xba, 0x81}}, {3, [3]byte{0xe1, 0xb9, 0x97}}, + {3, [3]byte{0xe1, 0xba, 0x83}}, {3, [3]byte{0xe1, 0xb9, 0xa0}}, + {3, [3]byte{0xe1, 0xbb, 0xb3}}, {3, [3]byte{0xe1, 0xba, 0x84}}, + {3, [3]byte{0xe1, 0xba, 0x85}}, {3, [3]byte{0xe1, 0xb9, 0xa1}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc5, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xaa}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc5, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xab}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa70000a7, 0xa90000a9, 0xad0000ad, 0xae0000ae, 0xb60000b6, 0xc00000c0, + 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8, + 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, + 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xd90000d9, 0xda0000da, + 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, + 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, + 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, + 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, + 0xff0000ff, 0xa400010a, 0xa500010b, 0xb2000120, 0xb3000121, 0xd0000174, 0xf0000175, 0xde000176, + 0xfe000177, 0xaf000178, 0xa1001e02, 0xa2001e03, 0xa6001e0a, 0xab001e0b, 0xb0001e1e, 0xb1001e1f, + 0xb4001e40, 0xb5001e41, 0xb7001e56, 0xb9001e57, 0xbb001e60, 0xbf001e61, 0xd7001e6a, 0xf7001e6b, + 0xa8001e80, 0xb8001e81, 0xaa001e82, 0xba001e83, 0xbd001e84, 0xbe001e85, 0xac001ef2, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, + }, +} + +// ISO8859_15 is the ISO 8859-15 encoding. +var ISO8859_15 *Charmap = &iso8859_15 + +var iso8859_15 = Charmap{ + name: "ISO 8859-15", + mib: identifier.ISO885915, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa70000a7, 0xa90000a9, 0xaa0000aa, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2, + 0xb30000b3, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + 0xbc000152, 0xbd000153, 0xa6000160, 0xa8000161, 0xbe000178, 0xb400017d, 0xb800017e, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + }, +} + +// ISO8859_16 is the ISO 8859-16 encoding. +var ISO8859_16 *Charmap = &iso8859_16 + +var iso8859_16 = Charmap{ + name: "ISO 8859-16", + mib: identifier.ISO885916, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc8, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}}, + {2, [3]byte{0xc8, 0x99, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}}, + {2, [3]byte{0xc5, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0x98, 0x00}}, + {2, [3]byte{0xc8, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0x9b, 0x00}}, + {2, [3]byte{0xc5, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}}, + {2, [3]byte{0xc8, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb60000b6, + 0xb70000b7, 0xbb0000bb, 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, + 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe60000e6, 0xe70000e7, 0xe80000e8, + 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf20000f2, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xff0000ff, + 0xc3000102, 0xe3000103, 0xa1000104, 0xa2000105, 0xc5000106, 0xe5000107, 0xb200010c, 0xb900010d, + 0xd0000110, 0xf0000111, 0xdd000118, 0xfd000119, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, + 0xd5000150, 0xf5000151, 0xbc000152, 0xbd000153, 0xd700015a, 0xf700015b, 0xa6000160, 0xa8000161, + 0xd8000170, 0xf8000171, 0xbe000178, 0xac000179, 0xae00017a, 0xaf00017b, 0xbf00017c, 0xb400017d, + 0xb800017e, 0xaa000218, 0xba000219, 0xde00021a, 0xfe00021b, 0xb500201d, 0xa500201e, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, + }, +} + +// KOI8R is the KOI8-R encoding. +var KOI8R *Charmap = &koi8R + +var koi8R = Charmap{ + name: "KOI8-R", + mib: identifier.KOI8R, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}}, + {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0x96}}, + {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}}, + {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x95, 0x9c}}, + {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9e}}, + {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}}, + {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {3, [3]byte{0xe2, 0x95, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa5}}, + {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x95, 0xab}}, + {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xe1000410, + 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, + 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, + 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, + 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, + 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, + 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, + 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, + 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, + 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, 0x9b002321, 0x80002500, + 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, 0x87002524, 0x8800252c, + 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa4002553, 0xa5002554, 0xa6002555, + 0xa7002556, 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xad00255c, 0xae00255d, + 0xaf00255e, 0xb000255f, 0xb1002560, 0xb2002561, 0xb4002562, 0xb5002563, 0xb6002564, 0xb7002565, + 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0xbd00256b, 0xbe00256c, 0x8b002580, + 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0, + }, +} + +// KOI8U is the KOI8-U encoding. +var KOI8U *Charmap = &koi8U + +var koi8U = Charmap{ + name: "KOI8-U", + mib: identifier.KOI8U, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}}, + {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}}, + {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}}, + {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}}, + {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}}, + {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}}, + {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}}, + {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}}, + {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}}, + {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}}, + {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}}, + {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}}, + {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}}, + {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x94}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}}, + {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}}, + {3, [3]byte{0xe2, 0x95, 0x9b}}, {2, [3]byte{0xd2, 0x91, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x9e}}, + {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}}, + {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}}, + {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}}, + {3, [3]byte{0xe2, 0x95, 0xaa}}, {2, [3]byte{0xd2, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}}, + {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}}, + {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}}, + {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}}, + {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}}, + {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}}, + {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}}, + {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}}, + {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}}, + {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}}, + {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}}, + {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xb4000404, + 0xb6000406, 0xb7000407, 0xbe00040e, 0xe1000410, 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, + 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, + 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, + 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, + 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, + 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, + 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, + 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, + 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, 0xa4000454, 0xa6000456, 0xa7000457, 0xae00045e, + 0xbd000490, 0xad000491, 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, + 0x9b002321, 0x80002500, 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, + 0x87002524, 0x8800252c, 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa5002554, + 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xaf00255e, 0xb000255f, 0xb1002560, + 0xb2002561, 0xb5002563, 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0x8b002580, + 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0, + }, +} + +// Macintosh is the Macintosh encoding. +var Macintosh *Charmap = &macintosh + +var macintosh = Charmap{ + name: "Macintosh", + mib: identifier.Macintosh, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x91, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa8, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xc2, 0xb4, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x82}}, {3, [3]byte{0xe2, 0x88, 0x91}}, + {3, [3]byte{0xe2, 0x88, 0x8f}}, {2, [3]byte{0xcf, 0x80, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0xab}}, {2, [3]byte{0xc2, 0xaa, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}}, + {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x97, 0x8a}}, + {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {3, [3]byte{0xe2, 0x81, 0x84}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + {3, [3]byte{0xe2, 0x80, 0xb9}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xac, 0x81}}, {3, [3]byte{0xef, 0xac, 0x82}}, + {3, [3]byte{0xe2, 0x80, 0xa1}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {3, [3]byte{0xe2, 0x80, 0xb0}}, {2, [3]byte{0xc3, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}}, + {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0x8f, 0x00}}, {2, [3]byte{0xc3, 0x8c, 0x00}}, + {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}}, + {3, [3]byte{0xef, 0xa3, 0xbf}}, {2, [3]byte{0xc3, 0x92, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x99, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {2, [3]byte{0xcb, 0x9c, 0x00}}, + {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xcb, 0x98, 0x00}}, + {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xcb, 0x9a, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xca0000a0, 0xc10000a1, 0xa20000a2, 0xa30000a3, 0xb40000a5, 0xa40000a7, 0xac0000a8, 0xa90000a9, + 0xbb0000aa, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xf80000af, 0xa10000b0, 0xb10000b1, 0xab0000b4, + 0xb50000b5, 0xa60000b6, 0xe10000b7, 0xfc0000b8, 0xbc0000ba, 0xc80000bb, 0xc00000bf, 0xcb0000c0, + 0xe70000c1, 0xe50000c2, 0xcc0000c3, 0x800000c4, 0x810000c5, 0xae0000c6, 0x820000c7, 0xe90000c8, + 0x830000c9, 0xe60000ca, 0xe80000cb, 0xed0000cc, 0xea0000cd, 0xeb0000ce, 0xec0000cf, 0x840000d1, + 0xf10000d2, 0xee0000d3, 0xef0000d4, 0xcd0000d5, 0x850000d6, 0xaf0000d8, 0xf40000d9, 0xf20000da, + 0xf30000db, 0x860000dc, 0xa70000df, 0x880000e0, 0x870000e1, 0x890000e2, 0x8b0000e3, 0x8a0000e4, + 0x8c0000e5, 0xbe0000e6, 0x8d0000e7, 0x8f0000e8, 0x8e0000e9, 0x900000ea, 0x910000eb, 0x930000ec, + 0x920000ed, 0x940000ee, 0x950000ef, 0x960000f1, 0x980000f2, 0x970000f3, 0x990000f4, 0x9b0000f5, + 0x9a0000f6, 0xd60000f7, 0xbf0000f8, 0x9d0000f9, 0x9c0000fa, 0x9e0000fb, 0x9f0000fc, 0xd80000ff, + 0xf5000131, 0xce000152, 0xcf000153, 0xd9000178, 0xc4000192, 0xf60002c6, 0xff0002c7, 0xf90002d8, + 0xfa0002d9, 0xfb0002da, 0xfe0002db, 0xf70002dc, 0xfd0002dd, 0xbd0003a9, 0xb90003c0, 0xd0002013, + 0xd1002014, 0xd4002018, 0xd5002019, 0xe200201a, 0xd200201c, 0xd300201d, 0xe300201e, 0xa0002020, + 0xe0002021, 0xa5002022, 0xc9002026, 0xe4002030, 0xdc002039, 0xdd00203a, 0xda002044, 0xdb0020ac, + 0xaa002122, 0xb6002202, 0xc6002206, 0xb800220f, 0xb7002211, 0xc300221a, 0xb000221e, 0xba00222b, + 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, 0xd70025ca, 0xf000f8ff, 0xde00fb01, 0xdf00fb02, + }, +} + +// MacintoshCyrillic is the Macintosh Cyrillic encoding. +var MacintoshCyrillic *Charmap = &macintoshCyrillic + +var macintoshCyrillic = Charmap{ + name: "Macintosh Cyrillic", + mib: identifier.MacintoshCyrillic, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}}, + {2, [3]byte{0xd2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xd0, 0x82, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}}, + {2, [3]byte{0xd0, 0x83, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}}, + {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}}, + {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x89, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x9a, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}}, + {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}}, + {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}}, + {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}}, + {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}}, + {2, [3]byte{0xd0, 0x8f, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd0, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xca0000a0, 0xa30000a3, 0xa40000a7, 0xa90000a9, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xa10000b0, + 0xb10000b1, 0xb50000b5, 0xa60000b6, 0xc80000bb, 0xd60000f7, 0xc4000192, 0xdd000401, 0xab000402, + 0xae000403, 0xb8000404, 0xc1000405, 0xa7000406, 0xba000407, 0xb7000408, 0xbc000409, 0xbe00040a, + 0xcb00040b, 0xcd00040c, 0xd800040e, 0xda00040f, 0x80000410, 0x81000411, 0x82000412, 0x83000413, + 0x84000414, 0x85000415, 0x86000416, 0x87000417, 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, + 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, 0x90000420, 0x91000421, 0x92000422, 0x93000423, + 0x94000424, 0x95000425, 0x96000426, 0x97000427, 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, + 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, 0xe0000430, 0xe1000431, 0xe2000432, 0xe3000433, + 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, 0xeb00043b, + 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, 0xf3000443, + 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, 0xfb00044b, + 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xdf00044f, 0xde000451, 0xac000452, 0xaf000453, 0xb9000454, + 0xcf000455, 0xb4000456, 0xbb000457, 0xc0000458, 0xbd000459, 0xbf00045a, 0xcc00045b, 0xce00045c, + 0xd900045e, 0xdb00045f, 0xa2000490, 0xb6000491, 0xd0002013, 0xd1002014, 0xd4002018, 0xd5002019, + 0xd200201c, 0xd300201d, 0xd700201e, 0xa0002020, 0xa5002022, 0xc9002026, 0xff0020ac, 0xdc002116, + 0xaa002122, 0xc6002206, 0xc300221a, 0xb000221e, 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, + }, +} + +// Windows874 is the Windows 874 encoding. +var Windows874 *Charmap = &windows874 + +var windows874 = Charmap{ + name: "Windows 874", + mib: identifier.Windows874, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe0, 0xb8, 0x81}}, + {3, [3]byte{0xe0, 0xb8, 0x82}}, {3, [3]byte{0xe0, 0xb8, 0x83}}, + {3, [3]byte{0xe0, 0xb8, 0x84}}, {3, [3]byte{0xe0, 0xb8, 0x85}}, + {3, [3]byte{0xe0, 0xb8, 0x86}}, {3, [3]byte{0xe0, 0xb8, 0x87}}, + {3, [3]byte{0xe0, 0xb8, 0x88}}, {3, [3]byte{0xe0, 0xb8, 0x89}}, + {3, [3]byte{0xe0, 0xb8, 0x8a}}, {3, [3]byte{0xe0, 0xb8, 0x8b}}, + {3, [3]byte{0xe0, 0xb8, 0x8c}}, {3, [3]byte{0xe0, 0xb8, 0x8d}}, + {3, [3]byte{0xe0, 0xb8, 0x8e}}, {3, [3]byte{0xe0, 0xb8, 0x8f}}, + {3, [3]byte{0xe0, 0xb8, 0x90}}, {3, [3]byte{0xe0, 0xb8, 0x91}}, + {3, [3]byte{0xe0, 0xb8, 0x92}}, {3, [3]byte{0xe0, 0xb8, 0x93}}, + {3, [3]byte{0xe0, 0xb8, 0x94}}, {3, [3]byte{0xe0, 0xb8, 0x95}}, + {3, [3]byte{0xe0, 0xb8, 0x96}}, {3, [3]byte{0xe0, 0xb8, 0x97}}, + {3, [3]byte{0xe0, 0xb8, 0x98}}, {3, [3]byte{0xe0, 0xb8, 0x99}}, + {3, [3]byte{0xe0, 0xb8, 0x9a}}, {3, [3]byte{0xe0, 0xb8, 0x9b}}, + {3, [3]byte{0xe0, 0xb8, 0x9c}}, {3, [3]byte{0xe0, 0xb8, 0x9d}}, + {3, [3]byte{0xe0, 0xb8, 0x9e}}, {3, [3]byte{0xe0, 0xb8, 0x9f}}, + {3, [3]byte{0xe0, 0xb8, 0xa0}}, {3, [3]byte{0xe0, 0xb8, 0xa1}}, + {3, [3]byte{0xe0, 0xb8, 0xa2}}, {3, [3]byte{0xe0, 0xb8, 0xa3}}, + {3, [3]byte{0xe0, 0xb8, 0xa4}}, {3, [3]byte{0xe0, 0xb8, 0xa5}}, + {3, [3]byte{0xe0, 0xb8, 0xa6}}, {3, [3]byte{0xe0, 0xb8, 0xa7}}, + {3, [3]byte{0xe0, 0xb8, 0xa8}}, {3, [3]byte{0xe0, 0xb8, 0xa9}}, + {3, [3]byte{0xe0, 0xb8, 0xaa}}, {3, [3]byte{0xe0, 0xb8, 0xab}}, + {3, [3]byte{0xe0, 0xb8, 0xac}}, {3, [3]byte{0xe0, 0xb8, 0xad}}, + {3, [3]byte{0xe0, 0xb8, 0xae}}, {3, [3]byte{0xe0, 0xb8, 0xaf}}, + {3, [3]byte{0xe0, 0xb8, 0xb0}}, {3, [3]byte{0xe0, 0xb8, 0xb1}}, + {3, [3]byte{0xe0, 0xb8, 0xb2}}, {3, [3]byte{0xe0, 0xb8, 0xb3}}, + {3, [3]byte{0xe0, 0xb8, 0xb4}}, {3, [3]byte{0xe0, 0xb8, 0xb5}}, + {3, [3]byte{0xe0, 0xb8, 0xb6}}, {3, [3]byte{0xe0, 0xb8, 0xb7}}, + {3, [3]byte{0xe0, 0xb8, 0xb8}}, {3, [3]byte{0xe0, 0xb8, 0xb9}}, + {3, [3]byte{0xe0, 0xb8, 0xba}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe0, 0xb8, 0xbf}}, + {3, [3]byte{0xe0, 0xb9, 0x80}}, {3, [3]byte{0xe0, 0xb9, 0x81}}, + {3, [3]byte{0xe0, 0xb9, 0x82}}, {3, [3]byte{0xe0, 0xb9, 0x83}}, + {3, [3]byte{0xe0, 0xb9, 0x84}}, {3, [3]byte{0xe0, 0xb9, 0x85}}, + {3, [3]byte{0xe0, 0xb9, 0x86}}, {3, [3]byte{0xe0, 0xb9, 0x87}}, + {3, [3]byte{0xe0, 0xb9, 0x88}}, {3, [3]byte{0xe0, 0xb9, 0x89}}, + {3, [3]byte{0xe0, 0xb9, 0x8a}}, {3, [3]byte{0xe0, 0xb9, 0x8b}}, + {3, [3]byte{0xe0, 0xb9, 0x8c}}, {3, [3]byte{0xe0, 0xb9, 0x8d}}, + {3, [3]byte{0xe0, 0xb9, 0x8e}}, {3, [3]byte{0xe0, 0xb9, 0x8f}}, + {3, [3]byte{0xe0, 0xb9, 0x90}}, {3, [3]byte{0xe0, 0xb9, 0x91}}, + {3, [3]byte{0xe0, 0xb9, 0x92}}, {3, [3]byte{0xe0, 0xb9, 0x93}}, + {3, [3]byte{0xe0, 0xb9, 0x94}}, {3, [3]byte{0xe0, 0xb9, 0x95}}, + {3, [3]byte{0xe0, 0xb9, 0x96}}, {3, [3]byte{0xe0, 0xb9, 0x97}}, + {3, [3]byte{0xe0, 0xb9, 0x98}}, {3, [3]byte{0xe0, 0xb9, 0x99}}, + {3, [3]byte{0xe0, 0xb9, 0x9a}}, {3, [3]byte{0xe0, 0xb9, 0x9b}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa1000e01, 0xa2000e02, 0xa3000e03, 0xa4000e04, 0xa5000e05, 0xa6000e06, 0xa7000e07, + 0xa8000e08, 0xa9000e09, 0xaa000e0a, 0xab000e0b, 0xac000e0c, 0xad000e0d, 0xae000e0e, 0xaf000e0f, + 0xb0000e10, 0xb1000e11, 0xb2000e12, 0xb3000e13, 0xb4000e14, 0xb5000e15, 0xb6000e16, 0xb7000e17, + 0xb8000e18, 0xb9000e19, 0xba000e1a, 0xbb000e1b, 0xbc000e1c, 0xbd000e1d, 0xbe000e1e, 0xbf000e1f, + 0xc0000e20, 0xc1000e21, 0xc2000e22, 0xc3000e23, 0xc4000e24, 0xc5000e25, 0xc6000e26, 0xc7000e27, + 0xc8000e28, 0xc9000e29, 0xca000e2a, 0xcb000e2b, 0xcc000e2c, 0xcd000e2d, 0xce000e2e, 0xcf000e2f, + 0xd0000e30, 0xd1000e31, 0xd2000e32, 0xd3000e33, 0xd4000e34, 0xd5000e35, 0xd6000e36, 0xd7000e37, + 0xd8000e38, 0xd9000e39, 0xda000e3a, 0xdf000e3f, 0xe0000e40, 0xe1000e41, 0xe2000e42, 0xe3000e43, + 0xe4000e44, 0xe5000e45, 0xe6000e46, 0xe7000e47, 0xe8000e48, 0xe9000e49, 0xea000e4a, 0xeb000e4b, + 0xec000e4c, 0xed000e4d, 0xee000e4e, 0xef000e4f, 0xf0000e50, 0xf1000e51, 0xf2000e52, 0xf3000e53, + 0xf4000e54, 0xf5000e55, 0xf6000e56, 0xf7000e57, 0xf8000e58, 0xf9000e59, 0xfa000e5a, 0xfb000e5b, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x9300201c, 0x9400201d, 0x95002022, 0x85002026, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, + }, +} + +// Windows1250 is the Windows 1250 encoding. +var Windows1250 *Charmap = &windows1250 + +var windows1250 = Charmap{ + name: "Windows 1250", + mib: identifier.Windows1250, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}}, + {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc4, 0xbd, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}}, + {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}}, + {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}}, + {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac, + 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xbb0000bb, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, + 0xcd0000cd, 0xce0000ce, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, + 0xdd0000dd, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, + 0xed0000ed, 0xee0000ee, 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, + 0xfd0000fd, 0xc3000102, 0xe3000103, 0xa5000104, 0xb9000105, 0xc6000106, 0xe6000107, 0xc800010c, + 0xe800010d, 0xcf00010e, 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, + 0xec00011b, 0xc5000139, 0xe500013a, 0xbc00013d, 0xbe00013e, 0xa3000141, 0xb3000142, 0xd1000143, + 0xf1000144, 0xd2000147, 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, + 0xf8000159, 0x8c00015a, 0x9c00015b, 0xaa00015e, 0xba00015f, 0x8a000160, 0x9a000161, 0xde000162, + 0xfe000163, 0x8d000164, 0x9d000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0x8f000179, + 0x9f00017a, 0xaf00017b, 0xbf00017c, 0x8e00017d, 0x9e00017e, 0xa10002c7, 0xa20002d8, 0xff0002d9, + 0xb20002db, 0xbd0002dd, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, + 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, + 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1251 is the Windows 1251 encoding. +var Windows1251 *Charmap = &windows1251 + +var windows1251 = Charmap{ + name: "Windows 1251", + mib: identifier.Windows1251, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xd1, 0x93, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xd0, 0x89, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}}, + {2, [3]byte{0xd0, 0x8b, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}}, + {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xd1, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9c, 0x00}}, + {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}}, + {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xd2, 0x90, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x96, 0x00}}, + {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xd1, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}}, + {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}}, + {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}}, + {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}}, + {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}}, + {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}}, + {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}}, + {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}}, + {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}}, + {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}}, + {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}}, + {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}}, + {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}}, + {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}}, + {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}}, + {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}}, + {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}}, + {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}}, + {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}}, + {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}}, + {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}}, + {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}}, + {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}}, + {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}}, + {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}}, + {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}}, + {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}}, + {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}}, + {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}}, + {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}}, + {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}}, + {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}}, + {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, + 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xa8000401, + 0x80000402, 0x81000403, 0xaa000404, 0xbd000405, 0xb2000406, 0xaf000407, 0xa3000408, 0x8a000409, + 0x8c00040a, 0x8e00040b, 0x8d00040c, 0xa100040e, 0x8f00040f, 0xc0000410, 0xc1000411, 0xc2000412, + 0xc3000413, 0xc4000414, 0xc5000415, 0xc6000416, 0xc7000417, 0xc8000418, 0xc9000419, 0xca00041a, + 0xcb00041b, 0xcc00041c, 0xcd00041d, 0xce00041e, 0xcf00041f, 0xd0000420, 0xd1000421, 0xd2000422, + 0xd3000423, 0xd4000424, 0xd5000425, 0xd6000426, 0xd7000427, 0xd8000428, 0xd9000429, 0xda00042a, + 0xdb00042b, 0xdc00042c, 0xdd00042d, 0xde00042e, 0xdf00042f, 0xe0000430, 0xe1000431, 0xe2000432, + 0xe3000433, 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, + 0xeb00043b, 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, + 0xf3000443, 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, + 0xfb00044b, 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xff00044f, 0xb8000451, 0x90000452, 0x83000453, + 0xba000454, 0xbe000455, 0xb3000456, 0xbf000457, 0xbc000458, 0x9a000459, 0x9c00045a, 0x9e00045b, + 0x9d00045c, 0xa200045e, 0x9f00045f, 0xa5000490, 0xb4000491, 0x96002013, 0x97002014, 0x91002018, + 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, + 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x880020ac, 0xb9002116, 0x99002122, 0x99002122, + }, +} + +// Windows1252 is the Windows 1252 encoding. +var Windows1252 *Charmap = &windows1252 + +var windows1252 = Charmap{ + name: "Windows 1252", + mib: identifier.Windows1252, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}}, + {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}}, + {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, + 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, + 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, + 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, + 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff, + 0x8c000152, 0x9c000153, 0x8a000160, 0x9a000161, 0x9f000178, 0x8e00017d, 0x9e00017e, 0x83000192, + 0x880002c6, 0x980002dc, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, + 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, + 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1253 is the Windows 1253 encoding. +var Windows1253 *Charmap = &windows1253 + +var windows1253 = Charmap{ + name: "Windows 1253", + mib: identifier.Windows1253, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}}, + {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}}, + {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}}, + {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}}, + {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}}, + {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}}, + {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}}, + {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}}, + {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}}, + {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}}, + {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}}, + {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}}, + {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}}, + {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}}, + {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}}, + {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}}, + {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}}, + {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}}, + {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}}, + {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}}, + {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}}, + {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}}, + {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}}, + {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}}, + {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}}, + {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}}, + {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}}, + {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}}, + {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}}, + {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}}, + {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}}, + {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}}, + {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}}, + {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, + 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, 0x83000192, 0xb4000384, 0xa1000385, + 0xa2000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, 0xbe00038e, 0xbf00038f, 0xc0000390, + 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, 0xc6000396, 0xc7000397, 0xc8000398, + 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, 0xce00039e, 0xcf00039f, 0xd00003a0, + 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, 0xd70003a7, 0xd80003a8, 0xd90003a9, + 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, 0xdf0003af, 0xe00003b0, 0xe10003b1, + 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, 0xe70003b7, 0xe80003b8, 0xe90003b9, + 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, 0xef0003bf, 0xf00003c0, 0xf10003c1, + 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, 0xf70003c7, 0xf80003c8, 0xf90003c9, + 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, 0x96002013, 0x97002014, 0xaf002015, + 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, + 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1254 is the Windows 1254 encoding. +var Windows1254 *Charmap = &windows1254 + +var windows1254 = Charmap{ + name: "Windows 1254", + mib: identifier.Windows1254, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}}, + {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}}, + {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, + 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, + 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8, + 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, + 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, + 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, + 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0x8c000152, 0x9c000153, + 0xde00015e, 0xfe00015f, 0x8a000160, 0x9a000161, 0x9f000178, 0x83000192, 0x880002c6, 0x980002dc, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, + 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1255 is the Windows 1255 encoding. +var Windows1255 *Charmap = &windows1255 + +var windows1255 = Charmap{ + name: "Windows 1255", + mib: identifier.Windows1255, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xaa}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xd6, 0xb0, 0x00}}, {2, [3]byte{0xd6, 0xb1, 0x00}}, + {2, [3]byte{0xd6, 0xb2, 0x00}}, {2, [3]byte{0xd6, 0xb3, 0x00}}, + {2, [3]byte{0xd6, 0xb4, 0x00}}, {2, [3]byte{0xd6, 0xb5, 0x00}}, + {2, [3]byte{0xd6, 0xb6, 0x00}}, {2, [3]byte{0xd6, 0xb7, 0x00}}, + {2, [3]byte{0xd6, 0xb8, 0x00}}, {2, [3]byte{0xd6, 0xb9, 0x00}}, + {2, [3]byte{0xd6, 0xba, 0x00}}, {2, [3]byte{0xd6, 0xbb, 0x00}}, + {2, [3]byte{0xd6, 0xbc, 0x00}}, {2, [3]byte{0xd6, 0xbd, 0x00}}, + {2, [3]byte{0xd6, 0xbe, 0x00}}, {2, [3]byte{0xd6, 0xbf, 0x00}}, + {2, [3]byte{0xd7, 0x80, 0x00}}, {2, [3]byte{0xd7, 0x81, 0x00}}, + {2, [3]byte{0xd7, 0x82, 0x00}}, {2, [3]byte{0xd7, 0x83, 0x00}}, + {2, [3]byte{0xd7, 0xb0, 0x00}}, {2, [3]byte{0xd7, 0xb1, 0x00}}, + {2, [3]byte{0xd7, 0xb2, 0x00}}, {2, [3]byte{0xd7, 0xb3, 0x00}}, + {2, [3]byte{0xd7, 0xb4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}}, + {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}}, + {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}}, + {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}}, + {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}}, + {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}}, + {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}}, + {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}}, + {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}}, + {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}}, + {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}}, + {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}}, + {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}}, + {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, 0xaa0000d7, 0xba0000f7, 0x83000192, + 0x880002c6, 0x980002dc, 0xc00005b0, 0xc10005b1, 0xc20005b2, 0xc30005b3, 0xc40005b4, 0xc50005b5, + 0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xca0005ba, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd, + 0xce0005be, 0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1, + 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9, + 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1, + 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9, + 0xfa0005ea, 0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f, + 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, + 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa, + 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1256 is the Windows 1256 encoding. +var Windows1256 *Charmap = &windows1256 + +var windows1256 = Charmap{ + name: "Windows 1256", + mib: identifier.Windows1256, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xd9, 0xbe, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {2, [3]byte{0xd9, 0xb9, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xda, 0x86, 0x00}}, + {2, [3]byte{0xda, 0x98, 0x00}}, {2, [3]byte{0xda, 0x88, 0x00}}, + {2, [3]byte{0xda, 0xaf, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xda, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {2, [3]byte{0xda, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8c}}, + {3, [3]byte{0xe2, 0x80, 0x8d}}, {2, [3]byte{0xda, 0xba, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd8, 0x8c, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xda, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xd8, 0x9b, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xd8, 0x9f, 0x00}}, + {2, [3]byte{0xdb, 0x81, 0x00}}, {2, [3]byte{0xd8, 0xa1, 0x00}}, + {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}}, + {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}}, + {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}}, + {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}}, + {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}}, + {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}}, + {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}}, + {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}}, + {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}}, + {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}}, + {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xd8, 0xb7, 0x00}}, {2, [3]byte{0xd8, 0xb8, 0x00}}, + {2, [3]byte{0xd8, 0xb9, 0x00}}, {2, [3]byte{0xd8, 0xba, 0x00}}, + {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}}, + {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xd9, 0x84, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}}, + {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}}, + {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xd9, 0x89, 0x00}}, {2, [3]byte{0xd9, 0x8a, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xd9, 0x8b, 0x00}}, {2, [3]byte{0xd9, 0x8c, 0x00}}, + {2, [3]byte{0xd9, 0x8d, 0x00}}, {2, [3]byte{0xd9, 0x8e, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}}, + {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xd9, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xd9, 0x92, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8e}}, + {3, [3]byte{0xe2, 0x80, 0x8f}}, {2, [3]byte{0xdb, 0x92, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, + 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, + 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9, + 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xd70000d7, 0xe00000e0, 0xe20000e2, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xee0000ee, 0xef0000ef, 0xf40000f4, 0xf70000f7, + 0xf90000f9, 0xfb0000fb, 0xfc0000fc, 0x8c000152, 0x9c000153, 0x83000192, 0x880002c6, 0xa100060c, + 0xba00061b, 0xbf00061f, 0xc1000621, 0xc2000622, 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, + 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, + 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, + 0xd8000637, 0xd9000638, 0xda000639, 0xdb00063a, 0xdc000640, 0xdd000641, 0xde000642, 0xdf000643, + 0xe1000644, 0xe3000645, 0xe4000646, 0xe5000647, 0xe6000648, 0xec000649, 0xed00064a, 0xf000064b, + 0xf100064c, 0xf200064d, 0xf300064e, 0xf500064f, 0xf6000650, 0xf8000651, 0xfa000652, 0x8a000679, + 0x8100067e, 0x8d000686, 0x8f000688, 0x9a000691, 0x8e000698, 0x980006a9, 0x900006af, 0x9f0006ba, + 0xaa0006be, 0xc00006c1, 0xff0006d2, 0x9d00200c, 0x9e00200d, 0xfd00200e, 0xfe00200f, 0x96002013, + 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, + 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, + }, +} + +// Windows1257 is the Windows 1257 encoding. +var Windows1257 *Charmap = &windows1257 + +var windows1257 = Charmap{ + name: "Windows 1257", + mib: identifier.Windows1257, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xa8, 0x00}}, + {2, [3]byte{0xcb, 0x87, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xcb, 0x9b, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}}, + {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}}, + {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}}, + {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}}, + {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}}, + {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}}, + {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}}, + {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}}, + {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}}, + {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}}, + {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}}, + {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}}, + {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}}, + {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}}, + {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0x8d0000a8, 0xa90000a9, + 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0x9d0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2, + 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0x8f0000b8, 0xb90000b9, 0xbb0000bb, + 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, + 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, + 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, + 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, + 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, + 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, + 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, + 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, + 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, + 0x8e0002c7, 0xff0002d9, 0x9e0002db, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, + 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, + 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// Windows1258 is the Windows 1258 encoding. +var Windows1258 *Charmap = &windows1258 + +var windows1258 = Charmap{ + name: "Windows 1258", + mib: identifier.Windows1258, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}}, + {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}}, + {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}}, + {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}}, + {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}}, + {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}}, + {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}}, + {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}}, + {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}}, + {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}}, + {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}}, + {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}}, + {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}}, + {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}}, + {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}}, + {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}}, + {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}}, + {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}}, + {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}}, + {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}}, + {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}}, + {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}}, + {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}}, + {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}}, + {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}}, + {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}}, + {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}}, + {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}}, + {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}}, + {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}}, + {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}}, + {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}}, + {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}}, + {2, [3]byte{0xcc, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}}, + {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}}, + {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}}, + {2, [3]byte{0xcc, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}}, + {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc6, 0xa0, 0x00}}, + {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}}, + {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}}, + {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}}, + {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc6, 0xaf, 0x00}}, + {2, [3]byte{0xcc, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}}, + {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}}, + {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}}, + {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}}, + {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}}, + {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}}, + {2, [3]byte{0xcc, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}}, + {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}}, + {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}}, + {2, [3]byte{0xcc, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}}, + {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc6, 0xa1, 0x00}}, + {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}}, + {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}}, + {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}}, + {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc6, 0xb0, 0x00}}, + {3, [3]byte{0xe2, 0x82, 0xab}}, {2, [3]byte{0xc3, 0xbf, 0x00}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, + 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, + 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, + 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, + 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8, + 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd30000d3, + 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, + 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, + 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, + 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, + 0xfc0000fc, 0xff0000ff, 0xc3000102, 0xe3000103, 0xd0000110, 0xf0000111, 0x8c000152, 0x9c000153, + 0x9f000178, 0x83000192, 0xd50001a0, 0xf50001a1, 0xdd0001af, 0xfd0001b0, 0x880002c6, 0x980002dc, + 0xcc000300, 0xec000301, 0xde000303, 0xd2000309, 0xf2000323, 0x96002013, 0x97002014, 0x91002018, + 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, + 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xfe0020ab, 0x800020ac, 0x99002122, 0x99002122, + 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, + }, +} + +// XUserDefined is the X-User-Defined encoding. +// +// It is defined at http://encoding.spec.whatwg.org/#x-user-defined +var XUserDefined *Charmap = &xUserDefined + +var xUserDefined = Charmap{ + name: "X-User-Defined", + mib: identifier.XUserDefined, + asciiSuperset: true, + low: 0x80, + replacement: 0x1a, + decode: [256]utf8Enc{ + {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}}, + {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}}, + {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}}, + {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}}, + {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}}, + {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}}, + {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}}, + {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}}, + {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}}, + {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}}, + {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}}, + {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}}, + {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}}, + {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}}, + {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}}, + {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}}, + {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}}, + {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}}, + {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}}, + {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}}, + {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}}, + {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}}, + {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}}, + {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}}, + {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}}, + {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}}, + {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}}, + {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}}, + {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}}, + {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}}, + {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}}, + {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}}, + {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}}, + {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}}, + {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}}, + {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}}, + {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}}, + {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}}, + {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}}, + {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}}, + {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}}, + {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}}, + {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}}, + {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}}, + {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}}, + {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}}, + {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}}, + {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}}, + {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}}, + {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}}, + {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}}, + {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}}, + {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}}, + {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}}, + {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}}, + {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}}, + {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}}, + {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}}, + {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}}, + {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}}, + {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}}, + {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}}, + {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}}, + {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}}, + {3, [3]byte{0xef, 0x9e, 0x80}}, {3, [3]byte{0xef, 0x9e, 0x81}}, + {3, [3]byte{0xef, 0x9e, 0x82}}, {3, [3]byte{0xef, 0x9e, 0x83}}, + {3, [3]byte{0xef, 0x9e, 0x84}}, {3, [3]byte{0xef, 0x9e, 0x85}}, + {3, [3]byte{0xef, 0x9e, 0x86}}, {3, [3]byte{0xef, 0x9e, 0x87}}, + {3, [3]byte{0xef, 0x9e, 0x88}}, {3, [3]byte{0xef, 0x9e, 0x89}}, + {3, [3]byte{0xef, 0x9e, 0x8a}}, {3, [3]byte{0xef, 0x9e, 0x8b}}, + {3, [3]byte{0xef, 0x9e, 0x8c}}, {3, [3]byte{0xef, 0x9e, 0x8d}}, + {3, [3]byte{0xef, 0x9e, 0x8e}}, {3, [3]byte{0xef, 0x9e, 0x8f}}, + {3, [3]byte{0xef, 0x9e, 0x90}}, {3, [3]byte{0xef, 0x9e, 0x91}}, + {3, [3]byte{0xef, 0x9e, 0x92}}, {3, [3]byte{0xef, 0x9e, 0x93}}, + {3, [3]byte{0xef, 0x9e, 0x94}}, {3, [3]byte{0xef, 0x9e, 0x95}}, + {3, [3]byte{0xef, 0x9e, 0x96}}, {3, [3]byte{0xef, 0x9e, 0x97}}, + {3, [3]byte{0xef, 0x9e, 0x98}}, {3, [3]byte{0xef, 0x9e, 0x99}}, + {3, [3]byte{0xef, 0x9e, 0x9a}}, {3, [3]byte{0xef, 0x9e, 0x9b}}, + {3, [3]byte{0xef, 0x9e, 0x9c}}, {3, [3]byte{0xef, 0x9e, 0x9d}}, + {3, [3]byte{0xef, 0x9e, 0x9e}}, {3, [3]byte{0xef, 0x9e, 0x9f}}, + {3, [3]byte{0xef, 0x9e, 0xa0}}, {3, [3]byte{0xef, 0x9e, 0xa1}}, + {3, [3]byte{0xef, 0x9e, 0xa2}}, {3, [3]byte{0xef, 0x9e, 0xa3}}, + {3, [3]byte{0xef, 0x9e, 0xa4}}, {3, [3]byte{0xef, 0x9e, 0xa5}}, + {3, [3]byte{0xef, 0x9e, 0xa6}}, {3, [3]byte{0xef, 0x9e, 0xa7}}, + {3, [3]byte{0xef, 0x9e, 0xa8}}, {3, [3]byte{0xef, 0x9e, 0xa9}}, + {3, [3]byte{0xef, 0x9e, 0xaa}}, {3, [3]byte{0xef, 0x9e, 0xab}}, + {3, [3]byte{0xef, 0x9e, 0xac}}, {3, [3]byte{0xef, 0x9e, 0xad}}, + {3, [3]byte{0xef, 0x9e, 0xae}}, {3, [3]byte{0xef, 0x9e, 0xaf}}, + {3, [3]byte{0xef, 0x9e, 0xb0}}, {3, [3]byte{0xef, 0x9e, 0xb1}}, + {3, [3]byte{0xef, 0x9e, 0xb2}}, {3, [3]byte{0xef, 0x9e, 0xb3}}, + {3, [3]byte{0xef, 0x9e, 0xb4}}, {3, [3]byte{0xef, 0x9e, 0xb5}}, + {3, [3]byte{0xef, 0x9e, 0xb6}}, {3, [3]byte{0xef, 0x9e, 0xb7}}, + {3, [3]byte{0xef, 0x9e, 0xb8}}, {3, [3]byte{0xef, 0x9e, 0xb9}}, + {3, [3]byte{0xef, 0x9e, 0xba}}, {3, [3]byte{0xef, 0x9e, 0xbb}}, + {3, [3]byte{0xef, 0x9e, 0xbc}}, {3, [3]byte{0xef, 0x9e, 0xbd}}, + {3, [3]byte{0xef, 0x9e, 0xbe}}, {3, [3]byte{0xef, 0x9e, 0xbf}}, + {3, [3]byte{0xef, 0x9f, 0x80}}, {3, [3]byte{0xef, 0x9f, 0x81}}, + {3, [3]byte{0xef, 0x9f, 0x82}}, {3, [3]byte{0xef, 0x9f, 0x83}}, + {3, [3]byte{0xef, 0x9f, 0x84}}, {3, [3]byte{0xef, 0x9f, 0x85}}, + {3, [3]byte{0xef, 0x9f, 0x86}}, {3, [3]byte{0xef, 0x9f, 0x87}}, + {3, [3]byte{0xef, 0x9f, 0x88}}, {3, [3]byte{0xef, 0x9f, 0x89}}, + {3, [3]byte{0xef, 0x9f, 0x8a}}, {3, [3]byte{0xef, 0x9f, 0x8b}}, + {3, [3]byte{0xef, 0x9f, 0x8c}}, {3, [3]byte{0xef, 0x9f, 0x8d}}, + {3, [3]byte{0xef, 0x9f, 0x8e}}, {3, [3]byte{0xef, 0x9f, 0x8f}}, + {3, [3]byte{0xef, 0x9f, 0x90}}, {3, [3]byte{0xef, 0x9f, 0x91}}, + {3, [3]byte{0xef, 0x9f, 0x92}}, {3, [3]byte{0xef, 0x9f, 0x93}}, + {3, [3]byte{0xef, 0x9f, 0x94}}, {3, [3]byte{0xef, 0x9f, 0x95}}, + {3, [3]byte{0xef, 0x9f, 0x96}}, {3, [3]byte{0xef, 0x9f, 0x97}}, + {3, [3]byte{0xef, 0x9f, 0x98}}, {3, [3]byte{0xef, 0x9f, 0x99}}, + {3, [3]byte{0xef, 0x9f, 0x9a}}, {3, [3]byte{0xef, 0x9f, 0x9b}}, + {3, [3]byte{0xef, 0x9f, 0x9c}}, {3, [3]byte{0xef, 0x9f, 0x9d}}, + {3, [3]byte{0xef, 0x9f, 0x9e}}, {3, [3]byte{0xef, 0x9f, 0x9f}}, + {3, [3]byte{0xef, 0x9f, 0xa0}}, {3, [3]byte{0xef, 0x9f, 0xa1}}, + {3, [3]byte{0xef, 0x9f, 0xa2}}, {3, [3]byte{0xef, 0x9f, 0xa3}}, + {3, [3]byte{0xef, 0x9f, 0xa4}}, {3, [3]byte{0xef, 0x9f, 0xa5}}, + {3, [3]byte{0xef, 0x9f, 0xa6}}, {3, [3]byte{0xef, 0x9f, 0xa7}}, + {3, [3]byte{0xef, 0x9f, 0xa8}}, {3, [3]byte{0xef, 0x9f, 0xa9}}, + {3, [3]byte{0xef, 0x9f, 0xaa}}, {3, [3]byte{0xef, 0x9f, 0xab}}, + {3, [3]byte{0xef, 0x9f, 0xac}}, {3, [3]byte{0xef, 0x9f, 0xad}}, + {3, [3]byte{0xef, 0x9f, 0xae}}, {3, [3]byte{0xef, 0x9f, 0xaf}}, + {3, [3]byte{0xef, 0x9f, 0xb0}}, {3, [3]byte{0xef, 0x9f, 0xb1}}, + {3, [3]byte{0xef, 0x9f, 0xb2}}, {3, [3]byte{0xef, 0x9f, 0xb3}}, + {3, [3]byte{0xef, 0x9f, 0xb4}}, {3, [3]byte{0xef, 0x9f, 0xb5}}, + {3, [3]byte{0xef, 0x9f, 0xb6}}, {3, [3]byte{0xef, 0x9f, 0xb7}}, + {3, [3]byte{0xef, 0x9f, 0xb8}}, {3, [3]byte{0xef, 0x9f, 0xb9}}, + {3, [3]byte{0xef, 0x9f, 0xba}}, {3, [3]byte{0xef, 0x9f, 0xbb}}, + {3, [3]byte{0xef, 0x9f, 0xbc}}, {3, [3]byte{0xef, 0x9f, 0xbd}}, + {3, [3]byte{0xef, 0x9f, 0xbe}}, {3, [3]byte{0xef, 0x9f, 0xbf}}, + }, + encode: [256]uint32{ + 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007, + 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f, + 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017, + 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f, + 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027, + 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f, + 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037, + 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f, + 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047, + 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f, + 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057, + 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f, + 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067, + 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f, + 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077, + 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f, + 0x8000f780, 0x8100f781, 0x8200f782, 0x8300f783, 0x8400f784, 0x8500f785, 0x8600f786, 0x8700f787, + 0x8800f788, 0x8900f789, 0x8a00f78a, 0x8b00f78b, 0x8c00f78c, 0x8d00f78d, 0x8e00f78e, 0x8f00f78f, + 0x9000f790, 0x9100f791, 0x9200f792, 0x9300f793, 0x9400f794, 0x9500f795, 0x9600f796, 0x9700f797, + 0x9800f798, 0x9900f799, 0x9a00f79a, 0x9b00f79b, 0x9c00f79c, 0x9d00f79d, 0x9e00f79e, 0x9f00f79f, + 0xa000f7a0, 0xa100f7a1, 0xa200f7a2, 0xa300f7a3, 0xa400f7a4, 0xa500f7a5, 0xa600f7a6, 0xa700f7a7, + 0xa800f7a8, 0xa900f7a9, 0xaa00f7aa, 0xab00f7ab, 0xac00f7ac, 0xad00f7ad, 0xae00f7ae, 0xaf00f7af, + 0xb000f7b0, 0xb100f7b1, 0xb200f7b2, 0xb300f7b3, 0xb400f7b4, 0xb500f7b5, 0xb600f7b6, 0xb700f7b7, + 0xb800f7b8, 0xb900f7b9, 0xba00f7ba, 0xbb00f7bb, 0xbc00f7bc, 0xbd00f7bd, 0xbe00f7be, 0xbf00f7bf, + 0xc000f7c0, 0xc100f7c1, 0xc200f7c2, 0xc300f7c3, 0xc400f7c4, 0xc500f7c5, 0xc600f7c6, 0xc700f7c7, + 0xc800f7c8, 0xc900f7c9, 0xca00f7ca, 0xcb00f7cb, 0xcc00f7cc, 0xcd00f7cd, 0xce00f7ce, 0xcf00f7cf, + 0xd000f7d0, 0xd100f7d1, 0xd200f7d2, 0xd300f7d3, 0xd400f7d4, 0xd500f7d5, 0xd600f7d6, 0xd700f7d7, + 0xd800f7d8, 0xd900f7d9, 0xda00f7da, 0xdb00f7db, 0xdc00f7dc, 0xdd00f7dd, 0xde00f7de, 0xdf00f7df, + 0xe000f7e0, 0xe100f7e1, 0xe200f7e2, 0xe300f7e3, 0xe400f7e4, 0xe500f7e5, 0xe600f7e6, 0xe700f7e7, + 0xe800f7e8, 0xe900f7e9, 0xea00f7ea, 0xeb00f7eb, 0xec00f7ec, 0xed00f7ed, 0xee00f7ee, 0xef00f7ef, + 0xf000f7f0, 0xf100f7f1, 0xf200f7f2, 0xf300f7f3, 0xf400f7f4, 0xf500f7f5, 0xf600f7f6, 0xf700f7f7, + 0xf800f7f8, 0xf900f7f9, 0xfa00f7fa, 0xfb00f7fb, 0xfc00f7fc, 0xfd00f7fd, 0xfe00f7fe, 0xff00f7ff, + }, +} +var listAll = []encoding.Encoding{ + CodePage037, + CodePage437, + CodePage850, + CodePage852, + CodePage855, + CodePage858, + CodePage860, + CodePage862, + CodePage863, + CodePage865, + CodePage866, + CodePage1047, + CodePage1140, + ISO8859_1, + ISO8859_2, + ISO8859_3, + ISO8859_4, + ISO8859_5, + ISO8859_6, + ISO8859_6E, + ISO8859_6I, + ISO8859_7, + ISO8859_8, + ISO8859_8E, + ISO8859_8I, + ISO8859_9, + ISO8859_10, + ISO8859_13, + ISO8859_14, + ISO8859_15, + ISO8859_16, + KOI8R, + KOI8U, + Macintosh, + MacintoshCyrillic, + Windows874, + Windows1250, + Windows1251, + Windows1252, + Windows1253, + Windows1254, + Windows1255, + Windows1256, + Windows1257, + Windows1258, + XUserDefined, +} + +// Total table size 87024 bytes (84KiB); checksum: 811C9DC5 diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go new file mode 100644 index 000000000000..bdc7d15dda45 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go @@ -0,0 +1,86 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package htmlindex maps character set encoding names to Encodings as +// recommended by the W3C for use in HTML 5. See http://www.w3.org/TR/encoding. +package htmlindex + +// TODO: perhaps have a "bare" version of the index (used by this package) that +// is not pre-loaded with all encodings. Global variables in encodings prevent +// the linker from being able to purge unneeded tables. This means that +// referencing all encodings, as this package does for the default index, links +// in all encodings unconditionally. +// +// This issue can be solved by either solving the linking issue (see +// https://github.com/golang/go/issues/6330) or refactoring the encoding tables +// (e.g. moving the tables to internal packages that do not use global +// variables). + +// TODO: allow canonicalizing names + +import ( + "errors" + "strings" + "sync" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/language" +) + +var ( + errInvalidName = errors.New("htmlindex: invalid encoding name") + errUnknown = errors.New("htmlindex: unknown Encoding") + errUnsupported = errors.New("htmlindex: this encoding is not supported") +) + +var ( + matcherOnce sync.Once + matcher language.Matcher +) + +// LanguageDefault returns the canonical name of the default encoding for a +// given language. +func LanguageDefault(tag language.Tag) string { + matcherOnce.Do(func() { + tags := []language.Tag{} + for _, t := range strings.Split(locales, " ") { + tags = append(tags, language.MustParse(t)) + } + matcher = language.NewMatcher(tags, language.PreferSameScript(true)) + }) + _, i, _ := matcher.Match(tag) + return canonical[localeMap[i]] // Default is Windows-1252. +} + +// Get returns an Encoding for one of the names listed in +// http://www.w3.org/TR/encoding using the Default Index. Matching is case- +// insensitive. +func Get(name string) (encoding.Encoding, error) { + x, ok := nameMap[strings.ToLower(strings.TrimSpace(name))] + if !ok { + return nil, errInvalidName + } + return encodings[x], nil +} + +// Name reports the canonical name of the given Encoding. It will return +// an error if e is not associated with a supported encoding scheme. +func Name(e encoding.Encoding) (string, error) { + id, ok := e.(identifier.Interface) + if !ok { + return "", errUnknown + } + mib, _ := id.ID() + if mib == 0 { + return "", errUnknown + } + v, ok := mibMap[mib] + if !ok { + return "", errUnsupported + } + return canonical[v], nil +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/map.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/map.go new file mode 100644 index 000000000000..c61439045d0e --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/map.go @@ -0,0 +1,105 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package htmlindex + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" + "golang.org/x/text/encoding/unicode" +) + +// mibMap maps a MIB identifier to an htmlEncoding index. +var mibMap = map[identifier.MIB]htmlEncoding{ + identifier.UTF8: utf8, + identifier.UTF16BE: utf16be, + identifier.UTF16LE: utf16le, + identifier.IBM866: ibm866, + identifier.ISOLatin2: iso8859_2, + identifier.ISOLatin3: iso8859_3, + identifier.ISOLatin4: iso8859_4, + identifier.ISOLatinCyrillic: iso8859_5, + identifier.ISOLatinArabic: iso8859_6, + identifier.ISOLatinGreek: iso8859_7, + identifier.ISOLatinHebrew: iso8859_8, + identifier.ISO88598I: iso8859_8I, + identifier.ISOLatin6: iso8859_10, + identifier.ISO885913: iso8859_13, + identifier.ISO885914: iso8859_14, + identifier.ISO885915: iso8859_15, + identifier.ISO885916: iso8859_16, + identifier.KOI8R: koi8r, + identifier.KOI8U: koi8u, + identifier.Macintosh: macintosh, + identifier.MacintoshCyrillic: macintoshCyrillic, + identifier.Windows874: windows874, + identifier.Windows1250: windows1250, + identifier.Windows1251: windows1251, + identifier.Windows1252: windows1252, + identifier.Windows1253: windows1253, + identifier.Windows1254: windows1254, + identifier.Windows1255: windows1255, + identifier.Windows1256: windows1256, + identifier.Windows1257: windows1257, + identifier.Windows1258: windows1258, + identifier.XUserDefined: xUserDefined, + identifier.GBK: gbk, + identifier.GB18030: gb18030, + identifier.Big5: big5, + identifier.EUCPkdFmtJapanese: eucjp, + identifier.ISO2022JP: iso2022jp, + identifier.ShiftJIS: shiftJIS, + identifier.EUCKR: euckr, + identifier.Replacement: replacement, +} + +// encodings maps the internal htmlEncoding to an Encoding. +// TODO: consider using a reusable index in encoding/internal. +var encodings = [numEncodings]encoding.Encoding{ + utf8: unicode.UTF8, + ibm866: charmap.CodePage866, + iso8859_2: charmap.ISO8859_2, + iso8859_3: charmap.ISO8859_3, + iso8859_4: charmap.ISO8859_4, + iso8859_5: charmap.ISO8859_5, + iso8859_6: charmap.ISO8859_6, + iso8859_7: charmap.ISO8859_7, + iso8859_8: charmap.ISO8859_8, + iso8859_8I: charmap.ISO8859_8I, + iso8859_10: charmap.ISO8859_10, + iso8859_13: charmap.ISO8859_13, + iso8859_14: charmap.ISO8859_14, + iso8859_15: charmap.ISO8859_15, + iso8859_16: charmap.ISO8859_16, + koi8r: charmap.KOI8R, + koi8u: charmap.KOI8U, + macintosh: charmap.Macintosh, + windows874: charmap.Windows874, + windows1250: charmap.Windows1250, + windows1251: charmap.Windows1251, + windows1252: charmap.Windows1252, + windows1253: charmap.Windows1253, + windows1254: charmap.Windows1254, + windows1255: charmap.Windows1255, + windows1256: charmap.Windows1256, + windows1257: charmap.Windows1257, + windows1258: charmap.Windows1258, + macintoshCyrillic: charmap.MacintoshCyrillic, + gbk: simplifiedchinese.GBK, + gb18030: simplifiedchinese.GB18030, + big5: traditionalchinese.Big5, + eucjp: japanese.EUCJP, + iso2022jp: japanese.ISO2022JP, + shiftJIS: japanese.ShiftJIS, + euckr: korean.EUCKR, + replacement: encoding.Replacement, + utf16be: unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), + utf16le: unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), + xUserDefined: charmap.XUserDefined, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/tables.go new file mode 100644 index 000000000000..9e6daa8965c3 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/htmlindex/tables.go @@ -0,0 +1,362 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package htmlindex + +type htmlEncoding byte + +const ( + utf8 htmlEncoding = iota + ibm866 + iso8859_2 + iso8859_3 + iso8859_4 + iso8859_5 + iso8859_6 + iso8859_7 + iso8859_8 + iso8859_8I + iso8859_10 + iso8859_13 + iso8859_14 + iso8859_15 + iso8859_16 + koi8r + koi8u + macintosh + windows874 + windows1250 + windows1251 + windows1252 + windows1253 + windows1254 + windows1255 + windows1256 + windows1257 + windows1258 + macintoshCyrillic + gbk + gb18030 + big5 + eucjp + iso2022jp + shiftJIS + euckr + replacement + utf16be + utf16le + xUserDefined + numEncodings +) + +var canonical = [numEncodings]string{ + "utf-8", + "ibm866", + "iso-8859-2", + "iso-8859-3", + "iso-8859-4", + "iso-8859-5", + "iso-8859-6", + "iso-8859-7", + "iso-8859-8", + "iso-8859-8-i", + "iso-8859-10", + "iso-8859-13", + "iso-8859-14", + "iso-8859-15", + "iso-8859-16", + "koi8-r", + "koi8-u", + "macintosh", + "windows-874", + "windows-1250", + "windows-1251", + "windows-1252", + "windows-1253", + "windows-1254", + "windows-1255", + "windows-1256", + "windows-1257", + "windows-1258", + "x-mac-cyrillic", + "gbk", + "gb18030", + "big5", + "euc-jp", + "iso-2022-jp", + "shift_jis", + "euc-kr", + "replacement", + "utf-16be", + "utf-16le", + "x-user-defined", +} + +var nameMap = map[string]htmlEncoding{ + "unicode-1-1-utf-8": utf8, + "unicode11utf8": utf8, + "unicode20utf8": utf8, + "utf-8": utf8, + "utf8": utf8, + "x-unicode20utf8": utf8, + "866": ibm866, + "cp866": ibm866, + "csibm866": ibm866, + "ibm866": ibm866, + "csisolatin2": iso8859_2, + "iso-8859-2": iso8859_2, + "iso-ir-101": iso8859_2, + "iso8859-2": iso8859_2, + "iso88592": iso8859_2, + "iso_8859-2": iso8859_2, + "iso_8859-2:1987": iso8859_2, + "l2": iso8859_2, + "latin2": iso8859_2, + "csisolatin3": iso8859_3, + "iso-8859-3": iso8859_3, + "iso-ir-109": iso8859_3, + "iso8859-3": iso8859_3, + "iso88593": iso8859_3, + "iso_8859-3": iso8859_3, + "iso_8859-3:1988": iso8859_3, + "l3": iso8859_3, + "latin3": iso8859_3, + "csisolatin4": iso8859_4, + "iso-8859-4": iso8859_4, + "iso-ir-110": iso8859_4, + "iso8859-4": iso8859_4, + "iso88594": iso8859_4, + "iso_8859-4": iso8859_4, + "iso_8859-4:1988": iso8859_4, + "l4": iso8859_4, + "latin4": iso8859_4, + "csisolatincyrillic": iso8859_5, + "cyrillic": iso8859_5, + "iso-8859-5": iso8859_5, + "iso-ir-144": iso8859_5, + "iso8859-5": iso8859_5, + "iso88595": iso8859_5, + "iso_8859-5": iso8859_5, + "iso_8859-5:1988": iso8859_5, + "arabic": iso8859_6, + "asmo-708": iso8859_6, + "csiso88596e": iso8859_6, + "csiso88596i": iso8859_6, + "csisolatinarabic": iso8859_6, + "ecma-114": iso8859_6, + "iso-8859-6": iso8859_6, + "iso-8859-6-e": iso8859_6, + "iso-8859-6-i": iso8859_6, + "iso-ir-127": iso8859_6, + "iso8859-6": iso8859_6, + "iso88596": iso8859_6, + "iso_8859-6": iso8859_6, + "iso_8859-6:1987": iso8859_6, + "csisolatingreek": iso8859_7, + "ecma-118": iso8859_7, + "elot_928": iso8859_7, + "greek": iso8859_7, + "greek8": iso8859_7, + "iso-8859-7": iso8859_7, + "iso-ir-126": iso8859_7, + "iso8859-7": iso8859_7, + "iso88597": iso8859_7, + "iso_8859-7": iso8859_7, + "iso_8859-7:1987": iso8859_7, + "sun_eu_greek": iso8859_7, + "csiso88598e": iso8859_8, + "csisolatinhebrew": iso8859_8, + "hebrew": iso8859_8, + "iso-8859-8": iso8859_8, + "iso-8859-8-e": iso8859_8, + "iso-ir-138": iso8859_8, + "iso8859-8": iso8859_8, + "iso88598": iso8859_8, + "iso_8859-8": iso8859_8, + "iso_8859-8:1988": iso8859_8, + "visual": iso8859_8, + "csiso88598i": iso8859_8I, + "iso-8859-8-i": iso8859_8I, + "logical": iso8859_8I, + "csisolatin6": iso8859_10, + "iso-8859-10": iso8859_10, + "iso-ir-157": iso8859_10, + "iso8859-10": iso8859_10, + "iso885910": iso8859_10, + "l6": iso8859_10, + "latin6": iso8859_10, + "iso-8859-13": iso8859_13, + "iso8859-13": iso8859_13, + "iso885913": iso8859_13, + "iso-8859-14": iso8859_14, + "iso8859-14": iso8859_14, + "iso885914": iso8859_14, + "csisolatin9": iso8859_15, + "iso-8859-15": iso8859_15, + "iso8859-15": iso8859_15, + "iso885915": iso8859_15, + "iso_8859-15": iso8859_15, + "l9": iso8859_15, + "iso-8859-16": iso8859_16, + "cskoi8r": koi8r, + "koi": koi8r, + "koi8": koi8r, + "koi8-r": koi8r, + "koi8_r": koi8r, + "koi8-ru": koi8u, + "koi8-u": koi8u, + "csmacintosh": macintosh, + "mac": macintosh, + "macintosh": macintosh, + "x-mac-roman": macintosh, + "dos-874": windows874, + "iso-8859-11": windows874, + "iso8859-11": windows874, + "iso885911": windows874, + "tis-620": windows874, + "windows-874": windows874, + "cp1250": windows1250, + "windows-1250": windows1250, + "x-cp1250": windows1250, + "cp1251": windows1251, + "windows-1251": windows1251, + "x-cp1251": windows1251, + "ansi_x3.4-1968": windows1252, + "ascii": windows1252, + "cp1252": windows1252, + "cp819": windows1252, + "csisolatin1": windows1252, + "ibm819": windows1252, + "iso-8859-1": windows1252, + "iso-ir-100": windows1252, + "iso8859-1": windows1252, + "iso88591": windows1252, + "iso_8859-1": windows1252, + "iso_8859-1:1987": windows1252, + "l1": windows1252, + "latin1": windows1252, + "us-ascii": windows1252, + "windows-1252": windows1252, + "x-cp1252": windows1252, + "cp1253": windows1253, + "windows-1253": windows1253, + "x-cp1253": windows1253, + "cp1254": windows1254, + "csisolatin5": windows1254, + "iso-8859-9": windows1254, + "iso-ir-148": windows1254, + "iso8859-9": windows1254, + "iso88599": windows1254, + "iso_8859-9": windows1254, + "iso_8859-9:1989": windows1254, + "l5": windows1254, + "latin5": windows1254, + "windows-1254": windows1254, + "x-cp1254": windows1254, + "cp1255": windows1255, + "windows-1255": windows1255, + "x-cp1255": windows1255, + "cp1256": windows1256, + "windows-1256": windows1256, + "x-cp1256": windows1256, + "cp1257": windows1257, + "windows-1257": windows1257, + "x-cp1257": windows1257, + "cp1258": windows1258, + "windows-1258": windows1258, + "x-cp1258": windows1258, + "x-mac-cyrillic": macintoshCyrillic, + "x-mac-ukrainian": macintoshCyrillic, + "chinese": gbk, + "csgb2312": gbk, + "csiso58gb231280": gbk, + "gb2312": gbk, + "gb_2312": gbk, + "gb_2312-80": gbk, + "gbk": gbk, + "iso-ir-58": gbk, + "x-gbk": gbk, + "gb18030": gb18030, + "big5": big5, + "big5-hkscs": big5, + "cn-big5": big5, + "csbig5": big5, + "x-x-big5": big5, + "cseucpkdfmtjapanese": eucjp, + "euc-jp": eucjp, + "x-euc-jp": eucjp, + "csiso2022jp": iso2022jp, + "iso-2022-jp": iso2022jp, + "csshiftjis": shiftJIS, + "ms932": shiftJIS, + "ms_kanji": shiftJIS, + "shift-jis": shiftJIS, + "shift_jis": shiftJIS, + "sjis": shiftJIS, + "windows-31j": shiftJIS, + "x-sjis": shiftJIS, + "cseuckr": euckr, + "csksc56011987": euckr, + "euc-kr": euckr, + "iso-ir-149": euckr, + "korean": euckr, + "ks_c_5601-1987": euckr, + "ks_c_5601-1989": euckr, + "ksc5601": euckr, + "ksc_5601": euckr, + "windows-949": euckr, + "csiso2022kr": replacement, + "hz-gb-2312": replacement, + "iso-2022-cn": replacement, + "iso-2022-cn-ext": replacement, + "iso-2022-kr": replacement, + "replacement": replacement, + "unicodefffe": utf16be, + "utf-16be": utf16be, + "csunicode": utf16le, + "iso-10646-ucs-2": utf16le, + "ucs-2": utf16le, + "unicode": utf16le, + "unicodefeff": utf16le, + "utf-16": utf16le, + "utf-16le": utf16le, + "x-user-defined": xUserDefined, +} + +var localeMap = []htmlEncoding{ + windows1252, // und_Latn + windows1256, // ar + windows1251, // ba + windows1251, // be + windows1251, // bg + windows1250, // cs + iso8859_7, // el + windows1257, // et + windows1256, // fa + windows1255, // he + windows1250, // hr + iso8859_2, // hu + shiftJIS, // ja + windows1251, // kk + euckr, // ko + windows1254, // ku + windows1251, // ky + windows1257, // lt + windows1257, // lv + windows1251, // mk + iso8859_2, // pl + windows1251, // ru + windows1251, // sah + windows1250, // sk + iso8859_2, // sl + windows1251, // sr + windows1251, // tg + windows874, // th + windows1254, // tr + windows1251, // tt + windows1251, // uk + windows1258, // vi + gb18030, // zh-hans + big5, // zh-hant +} + +const locales = "und_Latn ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant" diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/all.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/all.go new file mode 100644 index 000000000000..6cfa8de4503c --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/all.go @@ -0,0 +1,12 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "golang.org/x/text/encoding" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{EUCJP, ISO2022JP, ShiftJIS} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/eucjp.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/eucjp.go new file mode 100644 index 000000000000..79313fa589ae --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/eucjp.go @@ -0,0 +1,225 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// EUCJP is the EUC-JP encoding. +var EUCJP encoding.Encoding = &eucJP + +var eucJP = internal.Encoding{ + &internal.SimpleEncoding{eucJPDecoder{}, eucJPEncoder{}}, + "EUC-JP", + identifier.EUCPkdFmtJapanese, +} + +type eucJPDecoder struct{ transform.NopResetter } + +// See https://encoding.spec.whatwg.org/#euc-jp-decoder. +func (eucJPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case c0 == 0x8e: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + switch { + case c1 < 0xa1: + r, size = utf8.RuneError, 1 + case c1 > 0xdf: + r, size = utf8.RuneError, 2 + if c1 == 0xff { + size = 1 + } + default: + r, size = rune(c1)+(0xff61-0xa1), 2 + } + case c0 == 0x8f: + if nSrc+2 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + if p := nSrc + 1; p < len(src) && 0xa1 <= src[p] && src[p] < 0xfe { + size = 2 + } + break + } + c1 := src[nSrc+1] + if c1 < 0xa1 || 0xfe < c1 { + r, size = utf8.RuneError, 1 + break + } + c2 := src[nSrc+2] + if c2 < 0xa1 || 0xfe < c2 { + r, size = utf8.RuneError, 2 + break + } + r, size = utf8.RuneError, 3 + if i := int(c1-0xa1)*94 + int(c2-0xa1); i < len(jis0212Decode) { + r = rune(jis0212Decode[i]) + if r == 0 { + r = utf8.RuneError + } + } + + case 0xa1 <= c0 && c0 <= 0xfe: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + if c1 < 0xa1 || 0xfe < c1 { + r, size = utf8.RuneError, 1 + break + } + r, size = utf8.RuneError, 2 + if i := int(c0-0xa1)*94 + int(c1-0xa1); i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + if r == 0 { + r = utf8.RuneError + } + } + + default: + r, size = utf8.RuneError, 1 + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type eucJPEncoder struct{ transform.NopResetter } + +func (eucJPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2or3 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2or3 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2or3 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2or3 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2or3 + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + goto write2 + } + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2or3 + } + } + err = internal.ErrASCIIReplacement + break + } + + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2or3: + if r>>tableShift == jis0208 { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + } else { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = 0x8f + nDst++ + } + dst[nDst+0] = 0xa1 + uint8(r>>codeShift)&codeMask + dst[nDst+1] = 0xa1 + uint8(r)&codeMask + nDst += 2 + continue + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = 0x8e + dst[nDst+1] = uint8(r - (0xff61 - 0xa1)) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 6 { + panic("bad numEncodeTables") + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go new file mode 100644 index 000000000000..613226df5e91 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go @@ -0,0 +1,299 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// ISO2022JP is the ISO-2022-JP encoding. +var ISO2022JP encoding.Encoding = &iso2022JP + +var iso2022JP = internal.Encoding{ + internal.FuncEncoding{iso2022JPNewDecoder, iso2022JPNewEncoder}, + "ISO-2022-JP", + identifier.ISO2022JP, +} + +func iso2022JPNewDecoder() transform.Transformer { + return new(iso2022JPDecoder) +} + +func iso2022JPNewEncoder() transform.Transformer { + return new(iso2022JPEncoder) +} + +const ( + asciiState = iota + katakanaState + jis0208State + jis0212State +) + +const asciiEsc = 0x1b + +type iso2022JPDecoder int + +func (d *iso2022JPDecoder) Reset() { + *d = asciiState +} + +func (d *iso2022JPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + c0 := src[nSrc] + if c0 >= utf8.RuneSelf { + r, size = '\ufffd', 1 + goto write + } + + if c0 == asciiEsc { + if nSrc+2 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + // TODO: is it correct to only skip 1?? + r, size = '\ufffd', 1 + goto write + } + size = 3 + c1 := src[nSrc+1] + c2 := src[nSrc+2] + switch { + case c1 == '$' && (c2 == '@' || c2 == 'B'): // 0x24 {0x40, 0x42} + *d = jis0208State + continue + case c1 == '$' && c2 == '(': // 0x24 0x28 + if nSrc+3 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + r, size = '\ufffd', 1 + goto write + } + size = 4 + if src[nSrc+3] == 'D' { + *d = jis0212State + continue + } + case c1 == '(' && (c2 == 'B' || c2 == 'J'): // 0x28 {0x42, 0x4A} + *d = asciiState + continue + case c1 == '(' && c2 == 'I': // 0x28 0x49 + *d = katakanaState + continue + } + r, size = '\ufffd', 1 + goto write + } + + switch *d { + case asciiState: + r, size = rune(c0), 1 + + case katakanaState: + if c0 < 0x21 || 0x60 <= c0 { + r, size = '\ufffd', 1 + goto write + } + r, size = rune(c0)+(0xff61-0x21), 1 + + default: + if c0 == 0x0a { + *d = asciiState + r, size = rune(c0), 1 + goto write + } + if nSrc+1 >= len(src) { + if !atEOF { + return nDst, nSrc, transform.ErrShortSrc + } + r, size = '\ufffd', 1 + goto write + } + size = 2 + c1 := src[nSrc+1] + i := int(c0-0x21)*94 + int(c1-0x21) + if *d == jis0208State && i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + } else if *d == jis0212State && i < len(jis0212Decode) { + r = rune(jis0212Decode[i]) + } else { + r = '\ufffd' + goto write + } + if r == 0 { + r = '\ufffd' + } + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + return nDst, nSrc, transform.ErrShortDst + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type iso2022JPEncoder int + +func (e *iso2022JPEncoder) Reset() { + *e = asciiState +} + +func (e *iso2022JPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + // + // http://encoding.spec.whatwg.org/#iso-2022-jp says that "the index jis0212 + // is not used by the iso-2022-jp encoder due to lack of widespread support". + // + // TODO: do we have to special-case U+00A5 and U+203E, as per + // http://encoding.spec.whatwg.org/#iso-2022-jp + // Doing so would mean that "\u00a5" would not be preserved + // after an encode-decode round trip. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 { + goto writeJIS + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + goto writeKatakana + } + if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 { + goto writeJIS + } + } + + // Switch back to ASCII state in case of error so that an ASCII + // replacement character can be written in the correct state. + if *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } + err = internal.ErrASCIIReplacement + break + } + + if *e != asciiState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + writeJIS: + if *e != jis0208State { + if nDst+5 > len(dst) { + err = transform.ErrShortDst + break + } + *e = jis0208State + dst[nDst+0] = asciiEsc + dst[nDst+1] = '$' + dst[nDst+2] = 'B' + nDst += 3 + } else if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = 0x21 + uint8(r>>codeShift)&codeMask + dst[nDst+1] = 0x21 + uint8(r)&codeMask + nDst += 2 + continue + + writeKatakana: + if *e != katakanaState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = katakanaState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'I' + nDst += 3 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r - (0xff61 - 0x21)) + nDst++ + continue + } + if atEOF && err == nil && *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + } else { + *e = asciiState + dst[nDst+0] = asciiEsc + dst[nDst+1] = '(' + dst[nDst+2] = 'B' + nDst += 3 + } + } + return nDst, nSrc, err +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/shiftjis.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/shiftjis.go new file mode 100644 index 000000000000..16fd8a6e3ea1 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/shiftjis.go @@ -0,0 +1,189 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package japanese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// ShiftJIS is the Shift JIS encoding, also known as Code Page 932 and +// Windows-31J. +var ShiftJIS encoding.Encoding = &shiftJIS + +var shiftJIS = internal.Encoding{ + &internal.SimpleEncoding{shiftJISDecoder{}, shiftJISEncoder{}}, + "Shift JIS", + identifier.ShiftJIS, +} + +type shiftJISDecoder struct{ transform.NopResetter } + +func (shiftJISDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0xa1 <= c0 && c0 < 0xe0: + r, size = rune(c0)+(0xff61-0xa1), 1 + + case (0x81 <= c0 && c0 < 0xa0) || (0xe0 <= c0 && c0 < 0xfd): + if c0 <= 0x9f { + c0 -= 0x70 + } else { + c0 -= 0xb0 + } + c0 = 2*c0 - 0x21 + + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = '\ufffd', 1 + goto write + } + c1 := src[nSrc+1] + switch { + case c1 < 0x40: + r, size = '\ufffd', 1 // c1 is ASCII so output on next round + goto write + case c1 < 0x7f: + c0-- + c1 -= 0x40 + case c1 == 0x7f: + r, size = '\ufffd', 1 // c1 is ASCII so output on next round + goto write + case c1 < 0x9f: + c0-- + c1 -= 0x41 + case c1 < 0xfd: + c1 -= 0x9f + default: + r, size = '\ufffd', 2 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0)*94 + int(c1); i < len(jis0208Decode) { + r = rune(jis0208Decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + case c0 == 0x80: + r, size = 0x80, 1 + + default: + r, size = '\ufffd', 1 + } + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type shiftJISEncoder struct{ transform.NopResetter } + +func (shiftJISEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break loop + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if 0xff61 <= r && r < 0xffa0 { + r -= 0xff61 - 0xa1 + goto write1 + } + if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write1: + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2: + j1 := uint8(r>>codeShift) & codeMask + j2 := uint8(r) & codeMask + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break loop + } + if j1 <= 61 { + dst[nDst+0] = 129 + j1/2 + } else { + dst[nDst+0] = 193 + j1/2 + } + if j1&1 == 0 { + dst[nDst+1] = j2 + j2/63 + 64 + } else { + dst[nDst+1] = j2 + 159 + } + nDst += 2 + continue + } + return nDst, nSrc, err +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/tables.go new file mode 100644 index 000000000000..8717b79ae0e7 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/japanese/tables.go @@ -0,0 +1,26971 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS. +package japanese // import "golang.org/x/text/encoding/japanese" + +// jis0208Decode is the decoding table from JIS 0208 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-jis0208.txt +var jis0208Decode = [...]uint16{ + 0: 0x3000, + 1: 0x3001, + 2: 0x3002, + 3: 0xFF0C, + 4: 0xFF0E, + 5: 0x30FB, + 6: 0xFF1A, + 7: 0xFF1B, + 8: 0xFF1F, + 9: 0xFF01, + 10: 0x309B, + 11: 0x309C, + 12: 0x00B4, + 13: 0xFF40, + 14: 0x00A8, + 15: 0xFF3E, + 16: 0xFFE3, + 17: 0xFF3F, + 18: 0x30FD, + 19: 0x30FE, + 20: 0x309D, + 21: 0x309E, + 22: 0x3003, + 23: 0x4EDD, + 24: 0x3005, + 25: 0x3006, + 26: 0x3007, + 27: 0x30FC, + 28: 0x2015, + 29: 0x2010, + 30: 0xFF0F, + 31: 0xFF3C, + 32: 0xFF5E, + 33: 0x2225, + 34: 0xFF5C, + 35: 0x2026, + 36: 0x2025, + 37: 0x2018, + 38: 0x2019, + 39: 0x201C, + 40: 0x201D, + 41: 0xFF08, + 42: 0xFF09, + 43: 0x3014, + 44: 0x3015, + 45: 0xFF3B, + 46: 0xFF3D, + 47: 0xFF5B, + 48: 0xFF5D, + 49: 0x3008, + 50: 0x3009, + 51: 0x300A, + 52: 0x300B, + 53: 0x300C, + 54: 0x300D, + 55: 0x300E, + 56: 0x300F, + 57: 0x3010, + 58: 0x3011, + 59: 0xFF0B, + 60: 0xFF0D, + 61: 0x00B1, + 62: 0x00D7, + 63: 0x00F7, + 64: 0xFF1D, + 65: 0x2260, + 66: 0xFF1C, + 67: 0xFF1E, + 68: 0x2266, + 69: 0x2267, + 70: 0x221E, + 71: 0x2234, + 72: 0x2642, + 73: 0x2640, + 74: 0x00B0, + 75: 0x2032, + 76: 0x2033, + 77: 0x2103, + 78: 0xFFE5, + 79: 0xFF04, + 80: 0xFFE0, + 81: 0xFFE1, + 82: 0xFF05, + 83: 0xFF03, + 84: 0xFF06, + 85: 0xFF0A, + 86: 0xFF20, + 87: 0x00A7, + 88: 0x2606, + 89: 0x2605, + 90: 0x25CB, + 91: 0x25CF, + 92: 0x25CE, + 93: 0x25C7, + 94: 0x25C6, + 95: 0x25A1, + 96: 0x25A0, + 97: 0x25B3, + 98: 0x25B2, + 99: 0x25BD, + 100: 0x25BC, + 101: 0x203B, + 102: 0x3012, + 103: 0x2192, + 104: 0x2190, + 105: 0x2191, + 106: 0x2193, + 107: 0x3013, + 119: 0x2208, + 120: 0x220B, + 121: 0x2286, + 122: 0x2287, + 123: 0x2282, + 124: 0x2283, + 125: 0x222A, + 126: 0x2229, + 135: 0x2227, + 136: 0x2228, + 137: 0xFFE2, + 138: 0x21D2, + 139: 0x21D4, + 140: 0x2200, + 141: 0x2203, + 153: 0x2220, + 154: 0x22A5, + 155: 0x2312, + 156: 0x2202, + 157: 0x2207, + 158: 0x2261, + 159: 0x2252, + 160: 0x226A, + 161: 0x226B, + 162: 0x221A, + 163: 0x223D, + 164: 0x221D, + 165: 0x2235, + 166: 0x222B, + 167: 0x222C, + 175: 0x212B, + 176: 0x2030, + 177: 0x266F, + 178: 0x266D, + 179: 0x266A, + 180: 0x2020, + 181: 0x2021, + 182: 0x00B6, + 187: 0x25EF, + 203: 0xFF10, + 204: 0xFF11, + 205: 0xFF12, + 206: 0xFF13, + 207: 0xFF14, + 208: 0xFF15, + 209: 0xFF16, + 210: 0xFF17, + 211: 0xFF18, + 212: 0xFF19, + 220: 0xFF21, + 221: 0xFF22, + 222: 0xFF23, + 223: 0xFF24, + 224: 0xFF25, + 225: 0xFF26, + 226: 0xFF27, + 227: 0xFF28, + 228: 0xFF29, + 229: 0xFF2A, + 230: 0xFF2B, + 231: 0xFF2C, + 232: 0xFF2D, + 233: 0xFF2E, + 234: 0xFF2F, + 235: 0xFF30, + 236: 0xFF31, + 237: 0xFF32, + 238: 0xFF33, + 239: 0xFF34, + 240: 0xFF35, + 241: 0xFF36, + 242: 0xFF37, + 243: 0xFF38, + 244: 0xFF39, + 245: 0xFF3A, + 252: 0xFF41, + 253: 0xFF42, + 254: 0xFF43, + 255: 0xFF44, + 256: 0xFF45, + 257: 0xFF46, + 258: 0xFF47, + 259: 0xFF48, + 260: 0xFF49, + 261: 0xFF4A, + 262: 0xFF4B, + 263: 0xFF4C, + 264: 0xFF4D, + 265: 0xFF4E, + 266: 0xFF4F, + 267: 0xFF50, + 268: 0xFF51, + 269: 0xFF52, + 270: 0xFF53, + 271: 0xFF54, + 272: 0xFF55, + 273: 0xFF56, + 274: 0xFF57, + 275: 0xFF58, + 276: 0xFF59, + 277: 0xFF5A, + 282: 0x3041, + 283: 0x3042, + 284: 0x3043, + 285: 0x3044, + 286: 0x3045, + 287: 0x3046, + 288: 0x3047, + 289: 0x3048, + 290: 0x3049, + 291: 0x304A, + 292: 0x304B, + 293: 0x304C, + 294: 0x304D, + 295: 0x304E, + 296: 0x304F, + 297: 0x3050, + 298: 0x3051, + 299: 0x3052, + 300: 0x3053, + 301: 0x3054, + 302: 0x3055, + 303: 0x3056, + 304: 0x3057, + 305: 0x3058, + 306: 0x3059, + 307: 0x305A, + 308: 0x305B, + 309: 0x305C, + 310: 0x305D, + 311: 0x305E, + 312: 0x305F, + 313: 0x3060, + 314: 0x3061, + 315: 0x3062, + 316: 0x3063, + 317: 0x3064, + 318: 0x3065, + 319: 0x3066, + 320: 0x3067, + 321: 0x3068, + 322: 0x3069, + 323: 0x306A, + 324: 0x306B, + 325: 0x306C, + 326: 0x306D, + 327: 0x306E, + 328: 0x306F, + 329: 0x3070, + 330: 0x3071, + 331: 0x3072, + 332: 0x3073, + 333: 0x3074, + 334: 0x3075, + 335: 0x3076, + 336: 0x3077, + 337: 0x3078, + 338: 0x3079, + 339: 0x307A, + 340: 0x307B, + 341: 0x307C, + 342: 0x307D, + 343: 0x307E, + 344: 0x307F, + 345: 0x3080, + 346: 0x3081, + 347: 0x3082, + 348: 0x3083, + 349: 0x3084, + 350: 0x3085, + 351: 0x3086, + 352: 0x3087, + 353: 0x3088, + 354: 0x3089, + 355: 0x308A, + 356: 0x308B, + 357: 0x308C, + 358: 0x308D, + 359: 0x308E, + 360: 0x308F, + 361: 0x3090, + 362: 0x3091, + 363: 0x3092, + 364: 0x3093, + 376: 0x30A1, + 377: 0x30A2, + 378: 0x30A3, + 379: 0x30A4, + 380: 0x30A5, + 381: 0x30A6, + 382: 0x30A7, + 383: 0x30A8, + 384: 0x30A9, + 385: 0x30AA, + 386: 0x30AB, + 387: 0x30AC, + 388: 0x30AD, + 389: 0x30AE, + 390: 0x30AF, + 391: 0x30B0, + 392: 0x30B1, + 393: 0x30B2, + 394: 0x30B3, + 395: 0x30B4, + 396: 0x30B5, + 397: 0x30B6, + 398: 0x30B7, + 399: 0x30B8, + 400: 0x30B9, + 401: 0x30BA, + 402: 0x30BB, + 403: 0x30BC, + 404: 0x30BD, + 405: 0x30BE, + 406: 0x30BF, + 407: 0x30C0, + 408: 0x30C1, + 409: 0x30C2, + 410: 0x30C3, + 411: 0x30C4, + 412: 0x30C5, + 413: 0x30C6, + 414: 0x30C7, + 415: 0x30C8, + 416: 0x30C9, + 417: 0x30CA, + 418: 0x30CB, + 419: 0x30CC, + 420: 0x30CD, + 421: 0x30CE, + 422: 0x30CF, + 423: 0x30D0, + 424: 0x30D1, + 425: 0x30D2, + 426: 0x30D3, + 427: 0x30D4, + 428: 0x30D5, + 429: 0x30D6, + 430: 0x30D7, + 431: 0x30D8, + 432: 0x30D9, + 433: 0x30DA, + 434: 0x30DB, + 435: 0x30DC, + 436: 0x30DD, + 437: 0x30DE, + 438: 0x30DF, + 439: 0x30E0, + 440: 0x30E1, + 441: 0x30E2, + 442: 0x30E3, + 443: 0x30E4, + 444: 0x30E5, + 445: 0x30E6, + 446: 0x30E7, + 447: 0x30E8, + 448: 0x30E9, + 449: 0x30EA, + 450: 0x30EB, + 451: 0x30EC, + 452: 0x30ED, + 453: 0x30EE, + 454: 0x30EF, + 455: 0x30F0, + 456: 0x30F1, + 457: 0x30F2, + 458: 0x30F3, + 459: 0x30F4, + 460: 0x30F5, + 461: 0x30F6, + 470: 0x0391, + 471: 0x0392, + 472: 0x0393, + 473: 0x0394, + 474: 0x0395, + 475: 0x0396, + 476: 0x0397, + 477: 0x0398, + 478: 0x0399, + 479: 0x039A, + 480: 0x039B, + 481: 0x039C, + 482: 0x039D, + 483: 0x039E, + 484: 0x039F, + 485: 0x03A0, + 486: 0x03A1, + 487: 0x03A3, + 488: 0x03A4, + 489: 0x03A5, + 490: 0x03A6, + 491: 0x03A7, + 492: 0x03A8, + 493: 0x03A9, + 502: 0x03B1, + 503: 0x03B2, + 504: 0x03B3, + 505: 0x03B4, + 506: 0x03B5, + 507: 0x03B6, + 508: 0x03B7, + 509: 0x03B8, + 510: 0x03B9, + 511: 0x03BA, + 512: 0x03BB, + 513: 0x03BC, + 514: 0x03BD, + 515: 0x03BE, + 516: 0x03BF, + 517: 0x03C0, + 518: 0x03C1, + 519: 0x03C3, + 520: 0x03C4, + 521: 0x03C5, + 522: 0x03C6, + 523: 0x03C7, + 524: 0x03C8, + 525: 0x03C9, + 564: 0x0410, + 565: 0x0411, + 566: 0x0412, + 567: 0x0413, + 568: 0x0414, + 569: 0x0415, + 570: 0x0401, + 571: 0x0416, + 572: 0x0417, + 573: 0x0418, + 574: 0x0419, + 575: 0x041A, + 576: 0x041B, + 577: 0x041C, + 578: 0x041D, + 579: 0x041E, + 580: 0x041F, + 581: 0x0420, + 582: 0x0421, + 583: 0x0422, + 584: 0x0423, + 585: 0x0424, + 586: 0x0425, + 587: 0x0426, + 588: 0x0427, + 589: 0x0428, + 590: 0x0429, + 591: 0x042A, + 592: 0x042B, + 593: 0x042C, + 594: 0x042D, + 595: 0x042E, + 596: 0x042F, + 612: 0x0430, + 613: 0x0431, + 614: 0x0432, + 615: 0x0433, + 616: 0x0434, + 617: 0x0435, + 618: 0x0451, + 619: 0x0436, + 620: 0x0437, + 621: 0x0438, + 622: 0x0439, + 623: 0x043A, + 624: 0x043B, + 625: 0x043C, + 626: 0x043D, + 627: 0x043E, + 628: 0x043F, + 629: 0x0440, + 630: 0x0441, + 631: 0x0442, + 632: 0x0443, + 633: 0x0444, + 634: 0x0445, + 635: 0x0446, + 636: 0x0447, + 637: 0x0448, + 638: 0x0449, + 639: 0x044A, + 640: 0x044B, + 641: 0x044C, + 642: 0x044D, + 643: 0x044E, + 644: 0x044F, + 658: 0x2500, + 659: 0x2502, + 660: 0x250C, + 661: 0x2510, + 662: 0x2518, + 663: 0x2514, + 664: 0x251C, + 665: 0x252C, + 666: 0x2524, + 667: 0x2534, + 668: 0x253C, + 669: 0x2501, + 670: 0x2503, + 671: 0x250F, + 672: 0x2513, + 673: 0x251B, + 674: 0x2517, + 675: 0x2523, + 676: 0x2533, + 677: 0x252B, + 678: 0x253B, + 679: 0x254B, + 680: 0x2520, + 681: 0x252F, + 682: 0x2528, + 683: 0x2537, + 684: 0x253F, + 685: 0x251D, + 686: 0x2530, + 687: 0x2525, + 688: 0x2538, + 689: 0x2542, + 1128: 0x2460, + 1129: 0x2461, + 1130: 0x2462, + 1131: 0x2463, + 1132: 0x2464, + 1133: 0x2465, + 1134: 0x2466, + 1135: 0x2467, + 1136: 0x2468, + 1137: 0x2469, + 1138: 0x246A, + 1139: 0x246B, + 1140: 0x246C, + 1141: 0x246D, + 1142: 0x246E, + 1143: 0x246F, + 1144: 0x2470, + 1145: 0x2471, + 1146: 0x2472, + 1147: 0x2473, + 1148: 0x2160, + 1149: 0x2161, + 1150: 0x2162, + 1151: 0x2163, + 1152: 0x2164, + 1153: 0x2165, + 1154: 0x2166, + 1155: 0x2167, + 1156: 0x2168, + 1157: 0x2169, + 1159: 0x3349, + 1160: 0x3314, + 1161: 0x3322, + 1162: 0x334D, + 1163: 0x3318, + 1164: 0x3327, + 1165: 0x3303, + 1166: 0x3336, + 1167: 0x3351, + 1168: 0x3357, + 1169: 0x330D, + 1170: 0x3326, + 1171: 0x3323, + 1172: 0x332B, + 1173: 0x334A, + 1174: 0x333B, + 1175: 0x339C, + 1176: 0x339D, + 1177: 0x339E, + 1178: 0x338E, + 1179: 0x338F, + 1180: 0x33C4, + 1181: 0x33A1, + 1190: 0x337B, + 1191: 0x301D, + 1192: 0x301F, + 1193: 0x2116, + 1194: 0x33CD, + 1195: 0x2121, + 1196: 0x32A4, + 1197: 0x32A5, + 1198: 0x32A6, + 1199: 0x32A7, + 1200: 0x32A8, + 1201: 0x3231, + 1202: 0x3232, + 1203: 0x3239, + 1204: 0x337E, + 1205: 0x337D, + 1206: 0x337C, + 1207: 0x2252, + 1208: 0x2261, + 1209: 0x222B, + 1210: 0x222E, + 1211: 0x2211, + 1212: 0x221A, + 1213: 0x22A5, + 1214: 0x2220, + 1215: 0x221F, + 1216: 0x22BF, + 1217: 0x2235, + 1218: 0x2229, + 1219: 0x222A, + 1410: 0x4E9C, + 1411: 0x5516, + 1412: 0x5A03, + 1413: 0x963F, + 1414: 0x54C0, + 1415: 0x611B, + 1416: 0x6328, + 1417: 0x59F6, + 1418: 0x9022, + 1419: 0x8475, + 1420: 0x831C, + 1421: 0x7A50, + 1422: 0x60AA, + 1423: 0x63E1, + 1424: 0x6E25, + 1425: 0x65ED, + 1426: 0x8466, + 1427: 0x82A6, + 1428: 0x9BF5, + 1429: 0x6893, + 1430: 0x5727, + 1431: 0x65A1, + 1432: 0x6271, + 1433: 0x5B9B, + 1434: 0x59D0, + 1435: 0x867B, + 1436: 0x98F4, + 1437: 0x7D62, + 1438: 0x7DBE, + 1439: 0x9B8E, + 1440: 0x6216, + 1441: 0x7C9F, + 1442: 0x88B7, + 1443: 0x5B89, + 1444: 0x5EB5, + 1445: 0x6309, + 1446: 0x6697, + 1447: 0x6848, + 1448: 0x95C7, + 1449: 0x978D, + 1450: 0x674F, + 1451: 0x4EE5, + 1452: 0x4F0A, + 1453: 0x4F4D, + 1454: 0x4F9D, + 1455: 0x5049, + 1456: 0x56F2, + 1457: 0x5937, + 1458: 0x59D4, + 1459: 0x5A01, + 1460: 0x5C09, + 1461: 0x60DF, + 1462: 0x610F, + 1463: 0x6170, + 1464: 0x6613, + 1465: 0x6905, + 1466: 0x70BA, + 1467: 0x754F, + 1468: 0x7570, + 1469: 0x79FB, + 1470: 0x7DAD, + 1471: 0x7DEF, + 1472: 0x80C3, + 1473: 0x840E, + 1474: 0x8863, + 1475: 0x8B02, + 1476: 0x9055, + 1477: 0x907A, + 1478: 0x533B, + 1479: 0x4E95, + 1480: 0x4EA5, + 1481: 0x57DF, + 1482: 0x80B2, + 1483: 0x90C1, + 1484: 0x78EF, + 1485: 0x4E00, + 1486: 0x58F1, + 1487: 0x6EA2, + 1488: 0x9038, + 1489: 0x7A32, + 1490: 0x8328, + 1491: 0x828B, + 1492: 0x9C2F, + 1493: 0x5141, + 1494: 0x5370, + 1495: 0x54BD, + 1496: 0x54E1, + 1497: 0x56E0, + 1498: 0x59FB, + 1499: 0x5F15, + 1500: 0x98F2, + 1501: 0x6DEB, + 1502: 0x80E4, + 1503: 0x852D, + 1504: 0x9662, + 1505: 0x9670, + 1506: 0x96A0, + 1507: 0x97FB, + 1508: 0x540B, + 1509: 0x53F3, + 1510: 0x5B87, + 1511: 0x70CF, + 1512: 0x7FBD, + 1513: 0x8FC2, + 1514: 0x96E8, + 1515: 0x536F, + 1516: 0x9D5C, + 1517: 0x7ABA, + 1518: 0x4E11, + 1519: 0x7893, + 1520: 0x81FC, + 1521: 0x6E26, + 1522: 0x5618, + 1523: 0x5504, + 1524: 0x6B1D, + 1525: 0x851A, + 1526: 0x9C3B, + 1527: 0x59E5, + 1528: 0x53A9, + 1529: 0x6D66, + 1530: 0x74DC, + 1531: 0x958F, + 1532: 0x5642, + 1533: 0x4E91, + 1534: 0x904B, + 1535: 0x96F2, + 1536: 0x834F, + 1537: 0x990C, + 1538: 0x53E1, + 1539: 0x55B6, + 1540: 0x5B30, + 1541: 0x5F71, + 1542: 0x6620, + 1543: 0x66F3, + 1544: 0x6804, + 1545: 0x6C38, + 1546: 0x6CF3, + 1547: 0x6D29, + 1548: 0x745B, + 1549: 0x76C8, + 1550: 0x7A4E, + 1551: 0x9834, + 1552: 0x82F1, + 1553: 0x885B, + 1554: 0x8A60, + 1555: 0x92ED, + 1556: 0x6DB2, + 1557: 0x75AB, + 1558: 0x76CA, + 1559: 0x99C5, + 1560: 0x60A6, + 1561: 0x8B01, + 1562: 0x8D8A, + 1563: 0x95B2, + 1564: 0x698E, + 1565: 0x53AD, + 1566: 0x5186, + 1567: 0x5712, + 1568: 0x5830, + 1569: 0x5944, + 1570: 0x5BB4, + 1571: 0x5EF6, + 1572: 0x6028, + 1573: 0x63A9, + 1574: 0x63F4, + 1575: 0x6CBF, + 1576: 0x6F14, + 1577: 0x708E, + 1578: 0x7114, + 1579: 0x7159, + 1580: 0x71D5, + 1581: 0x733F, + 1582: 0x7E01, + 1583: 0x8276, + 1584: 0x82D1, + 1585: 0x8597, + 1586: 0x9060, + 1587: 0x925B, + 1588: 0x9D1B, + 1589: 0x5869, + 1590: 0x65BC, + 1591: 0x6C5A, + 1592: 0x7525, + 1593: 0x51F9, + 1594: 0x592E, + 1595: 0x5965, + 1596: 0x5F80, + 1597: 0x5FDC, + 1598: 0x62BC, + 1599: 0x65FA, + 1600: 0x6A2A, + 1601: 0x6B27, + 1602: 0x6BB4, + 1603: 0x738B, + 1604: 0x7FC1, + 1605: 0x8956, + 1606: 0x9D2C, + 1607: 0x9D0E, + 1608: 0x9EC4, + 1609: 0x5CA1, + 1610: 0x6C96, + 1611: 0x837B, + 1612: 0x5104, + 1613: 0x5C4B, + 1614: 0x61B6, + 1615: 0x81C6, + 1616: 0x6876, + 1617: 0x7261, + 1618: 0x4E59, + 1619: 0x4FFA, + 1620: 0x5378, + 1621: 0x6069, + 1622: 0x6E29, + 1623: 0x7A4F, + 1624: 0x97F3, + 1625: 0x4E0B, + 1626: 0x5316, + 1627: 0x4EEE, + 1628: 0x4F55, + 1629: 0x4F3D, + 1630: 0x4FA1, + 1631: 0x4F73, + 1632: 0x52A0, + 1633: 0x53EF, + 1634: 0x5609, + 1635: 0x590F, + 1636: 0x5AC1, + 1637: 0x5BB6, + 1638: 0x5BE1, + 1639: 0x79D1, + 1640: 0x6687, + 1641: 0x679C, + 1642: 0x67B6, + 1643: 0x6B4C, + 1644: 0x6CB3, + 1645: 0x706B, + 1646: 0x73C2, + 1647: 0x798D, + 1648: 0x79BE, + 1649: 0x7A3C, + 1650: 0x7B87, + 1651: 0x82B1, + 1652: 0x82DB, + 1653: 0x8304, + 1654: 0x8377, + 1655: 0x83EF, + 1656: 0x83D3, + 1657: 0x8766, + 1658: 0x8AB2, + 1659: 0x5629, + 1660: 0x8CA8, + 1661: 0x8FE6, + 1662: 0x904E, + 1663: 0x971E, + 1664: 0x868A, + 1665: 0x4FC4, + 1666: 0x5CE8, + 1667: 0x6211, + 1668: 0x7259, + 1669: 0x753B, + 1670: 0x81E5, + 1671: 0x82BD, + 1672: 0x86FE, + 1673: 0x8CC0, + 1674: 0x96C5, + 1675: 0x9913, + 1676: 0x99D5, + 1677: 0x4ECB, + 1678: 0x4F1A, + 1679: 0x89E3, + 1680: 0x56DE, + 1681: 0x584A, + 1682: 0x58CA, + 1683: 0x5EFB, + 1684: 0x5FEB, + 1685: 0x602A, + 1686: 0x6094, + 1687: 0x6062, + 1688: 0x61D0, + 1689: 0x6212, + 1690: 0x62D0, + 1691: 0x6539, + 1692: 0x9B41, + 1693: 0x6666, + 1694: 0x68B0, + 1695: 0x6D77, + 1696: 0x7070, + 1697: 0x754C, + 1698: 0x7686, + 1699: 0x7D75, + 1700: 0x82A5, + 1701: 0x87F9, + 1702: 0x958B, + 1703: 0x968E, + 1704: 0x8C9D, + 1705: 0x51F1, + 1706: 0x52BE, + 1707: 0x5916, + 1708: 0x54B3, + 1709: 0x5BB3, + 1710: 0x5D16, + 1711: 0x6168, + 1712: 0x6982, + 1713: 0x6DAF, + 1714: 0x788D, + 1715: 0x84CB, + 1716: 0x8857, + 1717: 0x8A72, + 1718: 0x93A7, + 1719: 0x9AB8, + 1720: 0x6D6C, + 1721: 0x99A8, + 1722: 0x86D9, + 1723: 0x57A3, + 1724: 0x67FF, + 1725: 0x86CE, + 1726: 0x920E, + 1727: 0x5283, + 1728: 0x5687, + 1729: 0x5404, + 1730: 0x5ED3, + 1731: 0x62E1, + 1732: 0x64B9, + 1733: 0x683C, + 1734: 0x6838, + 1735: 0x6BBB, + 1736: 0x7372, + 1737: 0x78BA, + 1738: 0x7A6B, + 1739: 0x899A, + 1740: 0x89D2, + 1741: 0x8D6B, + 1742: 0x8F03, + 1743: 0x90ED, + 1744: 0x95A3, + 1745: 0x9694, + 1746: 0x9769, + 1747: 0x5B66, + 1748: 0x5CB3, + 1749: 0x697D, + 1750: 0x984D, + 1751: 0x984E, + 1752: 0x639B, + 1753: 0x7B20, + 1754: 0x6A2B, + 1755: 0x6A7F, + 1756: 0x68B6, + 1757: 0x9C0D, + 1758: 0x6F5F, + 1759: 0x5272, + 1760: 0x559D, + 1761: 0x6070, + 1762: 0x62EC, + 1763: 0x6D3B, + 1764: 0x6E07, + 1765: 0x6ED1, + 1766: 0x845B, + 1767: 0x8910, + 1768: 0x8F44, + 1769: 0x4E14, + 1770: 0x9C39, + 1771: 0x53F6, + 1772: 0x691B, + 1773: 0x6A3A, + 1774: 0x9784, + 1775: 0x682A, + 1776: 0x515C, + 1777: 0x7AC3, + 1778: 0x84B2, + 1779: 0x91DC, + 1780: 0x938C, + 1781: 0x565B, + 1782: 0x9D28, + 1783: 0x6822, + 1784: 0x8305, + 1785: 0x8431, + 1786: 0x7CA5, + 1787: 0x5208, + 1788: 0x82C5, + 1789: 0x74E6, + 1790: 0x4E7E, + 1791: 0x4F83, + 1792: 0x51A0, + 1793: 0x5BD2, + 1794: 0x520A, + 1795: 0x52D8, + 1796: 0x52E7, + 1797: 0x5DFB, + 1798: 0x559A, + 1799: 0x582A, + 1800: 0x59E6, + 1801: 0x5B8C, + 1802: 0x5B98, + 1803: 0x5BDB, + 1804: 0x5E72, + 1805: 0x5E79, + 1806: 0x60A3, + 1807: 0x611F, + 1808: 0x6163, + 1809: 0x61BE, + 1810: 0x63DB, + 1811: 0x6562, + 1812: 0x67D1, + 1813: 0x6853, + 1814: 0x68FA, + 1815: 0x6B3E, + 1816: 0x6B53, + 1817: 0x6C57, + 1818: 0x6F22, + 1819: 0x6F97, + 1820: 0x6F45, + 1821: 0x74B0, + 1822: 0x7518, + 1823: 0x76E3, + 1824: 0x770B, + 1825: 0x7AFF, + 1826: 0x7BA1, + 1827: 0x7C21, + 1828: 0x7DE9, + 1829: 0x7F36, + 1830: 0x7FF0, + 1831: 0x809D, + 1832: 0x8266, + 1833: 0x839E, + 1834: 0x89B3, + 1835: 0x8ACC, + 1836: 0x8CAB, + 1837: 0x9084, + 1838: 0x9451, + 1839: 0x9593, + 1840: 0x9591, + 1841: 0x95A2, + 1842: 0x9665, + 1843: 0x97D3, + 1844: 0x9928, + 1845: 0x8218, + 1846: 0x4E38, + 1847: 0x542B, + 1848: 0x5CB8, + 1849: 0x5DCC, + 1850: 0x73A9, + 1851: 0x764C, + 1852: 0x773C, + 1853: 0x5CA9, + 1854: 0x7FEB, + 1855: 0x8D0B, + 1856: 0x96C1, + 1857: 0x9811, + 1858: 0x9854, + 1859: 0x9858, + 1860: 0x4F01, + 1861: 0x4F0E, + 1862: 0x5371, + 1863: 0x559C, + 1864: 0x5668, + 1865: 0x57FA, + 1866: 0x5947, + 1867: 0x5B09, + 1868: 0x5BC4, + 1869: 0x5C90, + 1870: 0x5E0C, + 1871: 0x5E7E, + 1872: 0x5FCC, + 1873: 0x63EE, + 1874: 0x673A, + 1875: 0x65D7, + 1876: 0x65E2, + 1877: 0x671F, + 1878: 0x68CB, + 1879: 0x68C4, + 1880: 0x6A5F, + 1881: 0x5E30, + 1882: 0x6BC5, + 1883: 0x6C17, + 1884: 0x6C7D, + 1885: 0x757F, + 1886: 0x7948, + 1887: 0x5B63, + 1888: 0x7A00, + 1889: 0x7D00, + 1890: 0x5FBD, + 1891: 0x898F, + 1892: 0x8A18, + 1893: 0x8CB4, + 1894: 0x8D77, + 1895: 0x8ECC, + 1896: 0x8F1D, + 1897: 0x98E2, + 1898: 0x9A0E, + 1899: 0x9B3C, + 1900: 0x4E80, + 1901: 0x507D, + 1902: 0x5100, + 1903: 0x5993, + 1904: 0x5B9C, + 1905: 0x622F, + 1906: 0x6280, + 1907: 0x64EC, + 1908: 0x6B3A, + 1909: 0x72A0, + 1910: 0x7591, + 1911: 0x7947, + 1912: 0x7FA9, + 1913: 0x87FB, + 1914: 0x8ABC, + 1915: 0x8B70, + 1916: 0x63AC, + 1917: 0x83CA, + 1918: 0x97A0, + 1919: 0x5409, + 1920: 0x5403, + 1921: 0x55AB, + 1922: 0x6854, + 1923: 0x6A58, + 1924: 0x8A70, + 1925: 0x7827, + 1926: 0x6775, + 1927: 0x9ECD, + 1928: 0x5374, + 1929: 0x5BA2, + 1930: 0x811A, + 1931: 0x8650, + 1932: 0x9006, + 1933: 0x4E18, + 1934: 0x4E45, + 1935: 0x4EC7, + 1936: 0x4F11, + 1937: 0x53CA, + 1938: 0x5438, + 1939: 0x5BAE, + 1940: 0x5F13, + 1941: 0x6025, + 1942: 0x6551, + 1943: 0x673D, + 1944: 0x6C42, + 1945: 0x6C72, + 1946: 0x6CE3, + 1947: 0x7078, + 1948: 0x7403, + 1949: 0x7A76, + 1950: 0x7AAE, + 1951: 0x7B08, + 1952: 0x7D1A, + 1953: 0x7CFE, + 1954: 0x7D66, + 1955: 0x65E7, + 1956: 0x725B, + 1957: 0x53BB, + 1958: 0x5C45, + 1959: 0x5DE8, + 1960: 0x62D2, + 1961: 0x62E0, + 1962: 0x6319, + 1963: 0x6E20, + 1964: 0x865A, + 1965: 0x8A31, + 1966: 0x8DDD, + 1967: 0x92F8, + 1968: 0x6F01, + 1969: 0x79A6, + 1970: 0x9B5A, + 1971: 0x4EA8, + 1972: 0x4EAB, + 1973: 0x4EAC, + 1974: 0x4F9B, + 1975: 0x4FA0, + 1976: 0x50D1, + 1977: 0x5147, + 1978: 0x7AF6, + 1979: 0x5171, + 1980: 0x51F6, + 1981: 0x5354, + 1982: 0x5321, + 1983: 0x537F, + 1984: 0x53EB, + 1985: 0x55AC, + 1986: 0x5883, + 1987: 0x5CE1, + 1988: 0x5F37, + 1989: 0x5F4A, + 1990: 0x602F, + 1991: 0x6050, + 1992: 0x606D, + 1993: 0x631F, + 1994: 0x6559, + 1995: 0x6A4B, + 1996: 0x6CC1, + 1997: 0x72C2, + 1998: 0x72ED, + 1999: 0x77EF, + 2000: 0x80F8, + 2001: 0x8105, + 2002: 0x8208, + 2003: 0x854E, + 2004: 0x90F7, + 2005: 0x93E1, + 2006: 0x97FF, + 2007: 0x9957, + 2008: 0x9A5A, + 2009: 0x4EF0, + 2010: 0x51DD, + 2011: 0x5C2D, + 2012: 0x6681, + 2013: 0x696D, + 2014: 0x5C40, + 2015: 0x66F2, + 2016: 0x6975, + 2017: 0x7389, + 2018: 0x6850, + 2019: 0x7C81, + 2020: 0x50C5, + 2021: 0x52E4, + 2022: 0x5747, + 2023: 0x5DFE, + 2024: 0x9326, + 2025: 0x65A4, + 2026: 0x6B23, + 2027: 0x6B3D, + 2028: 0x7434, + 2029: 0x7981, + 2030: 0x79BD, + 2031: 0x7B4B, + 2032: 0x7DCA, + 2033: 0x82B9, + 2034: 0x83CC, + 2035: 0x887F, + 2036: 0x895F, + 2037: 0x8B39, + 2038: 0x8FD1, + 2039: 0x91D1, + 2040: 0x541F, + 2041: 0x9280, + 2042: 0x4E5D, + 2043: 0x5036, + 2044: 0x53E5, + 2045: 0x533A, + 2046: 0x72D7, + 2047: 0x7396, + 2048: 0x77E9, + 2049: 0x82E6, + 2050: 0x8EAF, + 2051: 0x99C6, + 2052: 0x99C8, + 2053: 0x99D2, + 2054: 0x5177, + 2055: 0x611A, + 2056: 0x865E, + 2057: 0x55B0, + 2058: 0x7A7A, + 2059: 0x5076, + 2060: 0x5BD3, + 2061: 0x9047, + 2062: 0x9685, + 2063: 0x4E32, + 2064: 0x6ADB, + 2065: 0x91E7, + 2066: 0x5C51, + 2067: 0x5C48, + 2068: 0x6398, + 2069: 0x7A9F, + 2070: 0x6C93, + 2071: 0x9774, + 2072: 0x8F61, + 2073: 0x7AAA, + 2074: 0x718A, + 2075: 0x9688, + 2076: 0x7C82, + 2077: 0x6817, + 2078: 0x7E70, + 2079: 0x6851, + 2080: 0x936C, + 2081: 0x52F2, + 2082: 0x541B, + 2083: 0x85AB, + 2084: 0x8A13, + 2085: 0x7FA4, + 2086: 0x8ECD, + 2087: 0x90E1, + 2088: 0x5366, + 2089: 0x8888, + 2090: 0x7941, + 2091: 0x4FC2, + 2092: 0x50BE, + 2093: 0x5211, + 2094: 0x5144, + 2095: 0x5553, + 2096: 0x572D, + 2097: 0x73EA, + 2098: 0x578B, + 2099: 0x5951, + 2100: 0x5F62, + 2101: 0x5F84, + 2102: 0x6075, + 2103: 0x6176, + 2104: 0x6167, + 2105: 0x61A9, + 2106: 0x63B2, + 2107: 0x643A, + 2108: 0x656C, + 2109: 0x666F, + 2110: 0x6842, + 2111: 0x6E13, + 2112: 0x7566, + 2113: 0x7A3D, + 2114: 0x7CFB, + 2115: 0x7D4C, + 2116: 0x7D99, + 2117: 0x7E4B, + 2118: 0x7F6B, + 2119: 0x830E, + 2120: 0x834A, + 2121: 0x86CD, + 2122: 0x8A08, + 2123: 0x8A63, + 2124: 0x8B66, + 2125: 0x8EFD, + 2126: 0x981A, + 2127: 0x9D8F, + 2128: 0x82B8, + 2129: 0x8FCE, + 2130: 0x9BE8, + 2131: 0x5287, + 2132: 0x621F, + 2133: 0x6483, + 2134: 0x6FC0, + 2135: 0x9699, + 2136: 0x6841, + 2137: 0x5091, + 2138: 0x6B20, + 2139: 0x6C7A, + 2140: 0x6F54, + 2141: 0x7A74, + 2142: 0x7D50, + 2143: 0x8840, + 2144: 0x8A23, + 2145: 0x6708, + 2146: 0x4EF6, + 2147: 0x5039, + 2148: 0x5026, + 2149: 0x5065, + 2150: 0x517C, + 2151: 0x5238, + 2152: 0x5263, + 2153: 0x55A7, + 2154: 0x570F, + 2155: 0x5805, + 2156: 0x5ACC, + 2157: 0x5EFA, + 2158: 0x61B2, + 2159: 0x61F8, + 2160: 0x62F3, + 2161: 0x6372, + 2162: 0x691C, + 2163: 0x6A29, + 2164: 0x727D, + 2165: 0x72AC, + 2166: 0x732E, + 2167: 0x7814, + 2168: 0x786F, + 2169: 0x7D79, + 2170: 0x770C, + 2171: 0x80A9, + 2172: 0x898B, + 2173: 0x8B19, + 2174: 0x8CE2, + 2175: 0x8ED2, + 2176: 0x9063, + 2177: 0x9375, + 2178: 0x967A, + 2179: 0x9855, + 2180: 0x9A13, + 2181: 0x9E78, + 2182: 0x5143, + 2183: 0x539F, + 2184: 0x53B3, + 2185: 0x5E7B, + 2186: 0x5F26, + 2187: 0x6E1B, + 2188: 0x6E90, + 2189: 0x7384, + 2190: 0x73FE, + 2191: 0x7D43, + 2192: 0x8237, + 2193: 0x8A00, + 2194: 0x8AFA, + 2195: 0x9650, + 2196: 0x4E4E, + 2197: 0x500B, + 2198: 0x53E4, + 2199: 0x547C, + 2200: 0x56FA, + 2201: 0x59D1, + 2202: 0x5B64, + 2203: 0x5DF1, + 2204: 0x5EAB, + 2205: 0x5F27, + 2206: 0x6238, + 2207: 0x6545, + 2208: 0x67AF, + 2209: 0x6E56, + 2210: 0x72D0, + 2211: 0x7CCA, + 2212: 0x88B4, + 2213: 0x80A1, + 2214: 0x80E1, + 2215: 0x83F0, + 2216: 0x864E, + 2217: 0x8A87, + 2218: 0x8DE8, + 2219: 0x9237, + 2220: 0x96C7, + 2221: 0x9867, + 2222: 0x9F13, + 2223: 0x4E94, + 2224: 0x4E92, + 2225: 0x4F0D, + 2226: 0x5348, + 2227: 0x5449, + 2228: 0x543E, + 2229: 0x5A2F, + 2230: 0x5F8C, + 2231: 0x5FA1, + 2232: 0x609F, + 2233: 0x68A7, + 2234: 0x6A8E, + 2235: 0x745A, + 2236: 0x7881, + 2237: 0x8A9E, + 2238: 0x8AA4, + 2239: 0x8B77, + 2240: 0x9190, + 2241: 0x4E5E, + 2242: 0x9BC9, + 2243: 0x4EA4, + 2244: 0x4F7C, + 2245: 0x4FAF, + 2246: 0x5019, + 2247: 0x5016, + 2248: 0x5149, + 2249: 0x516C, + 2250: 0x529F, + 2251: 0x52B9, + 2252: 0x52FE, + 2253: 0x539A, + 2254: 0x53E3, + 2255: 0x5411, + 2256: 0x540E, + 2257: 0x5589, + 2258: 0x5751, + 2259: 0x57A2, + 2260: 0x597D, + 2261: 0x5B54, + 2262: 0x5B5D, + 2263: 0x5B8F, + 2264: 0x5DE5, + 2265: 0x5DE7, + 2266: 0x5DF7, + 2267: 0x5E78, + 2268: 0x5E83, + 2269: 0x5E9A, + 2270: 0x5EB7, + 2271: 0x5F18, + 2272: 0x6052, + 2273: 0x614C, + 2274: 0x6297, + 2275: 0x62D8, + 2276: 0x63A7, + 2277: 0x653B, + 2278: 0x6602, + 2279: 0x6643, + 2280: 0x66F4, + 2281: 0x676D, + 2282: 0x6821, + 2283: 0x6897, + 2284: 0x69CB, + 2285: 0x6C5F, + 2286: 0x6D2A, + 2287: 0x6D69, + 2288: 0x6E2F, + 2289: 0x6E9D, + 2290: 0x7532, + 2291: 0x7687, + 2292: 0x786C, + 2293: 0x7A3F, + 2294: 0x7CE0, + 2295: 0x7D05, + 2296: 0x7D18, + 2297: 0x7D5E, + 2298: 0x7DB1, + 2299: 0x8015, + 2300: 0x8003, + 2301: 0x80AF, + 2302: 0x80B1, + 2303: 0x8154, + 2304: 0x818F, + 2305: 0x822A, + 2306: 0x8352, + 2307: 0x884C, + 2308: 0x8861, + 2309: 0x8B1B, + 2310: 0x8CA2, + 2311: 0x8CFC, + 2312: 0x90CA, + 2313: 0x9175, + 2314: 0x9271, + 2315: 0x783F, + 2316: 0x92FC, + 2317: 0x95A4, + 2318: 0x964D, + 2319: 0x9805, + 2320: 0x9999, + 2321: 0x9AD8, + 2322: 0x9D3B, + 2323: 0x525B, + 2324: 0x52AB, + 2325: 0x53F7, + 2326: 0x5408, + 2327: 0x58D5, + 2328: 0x62F7, + 2329: 0x6FE0, + 2330: 0x8C6A, + 2331: 0x8F5F, + 2332: 0x9EB9, + 2333: 0x514B, + 2334: 0x523B, + 2335: 0x544A, + 2336: 0x56FD, + 2337: 0x7A40, + 2338: 0x9177, + 2339: 0x9D60, + 2340: 0x9ED2, + 2341: 0x7344, + 2342: 0x6F09, + 2343: 0x8170, + 2344: 0x7511, + 2345: 0x5FFD, + 2346: 0x60DA, + 2347: 0x9AA8, + 2348: 0x72DB, + 2349: 0x8FBC, + 2350: 0x6B64, + 2351: 0x9803, + 2352: 0x4ECA, + 2353: 0x56F0, + 2354: 0x5764, + 2355: 0x58BE, + 2356: 0x5A5A, + 2357: 0x6068, + 2358: 0x61C7, + 2359: 0x660F, + 2360: 0x6606, + 2361: 0x6839, + 2362: 0x68B1, + 2363: 0x6DF7, + 2364: 0x75D5, + 2365: 0x7D3A, + 2366: 0x826E, + 2367: 0x9B42, + 2368: 0x4E9B, + 2369: 0x4F50, + 2370: 0x53C9, + 2371: 0x5506, + 2372: 0x5D6F, + 2373: 0x5DE6, + 2374: 0x5DEE, + 2375: 0x67FB, + 2376: 0x6C99, + 2377: 0x7473, + 2378: 0x7802, + 2379: 0x8A50, + 2380: 0x9396, + 2381: 0x88DF, + 2382: 0x5750, + 2383: 0x5EA7, + 2384: 0x632B, + 2385: 0x50B5, + 2386: 0x50AC, + 2387: 0x518D, + 2388: 0x6700, + 2389: 0x54C9, + 2390: 0x585E, + 2391: 0x59BB, + 2392: 0x5BB0, + 2393: 0x5F69, + 2394: 0x624D, + 2395: 0x63A1, + 2396: 0x683D, + 2397: 0x6B73, + 2398: 0x6E08, + 2399: 0x707D, + 2400: 0x91C7, + 2401: 0x7280, + 2402: 0x7815, + 2403: 0x7826, + 2404: 0x796D, + 2405: 0x658E, + 2406: 0x7D30, + 2407: 0x83DC, + 2408: 0x88C1, + 2409: 0x8F09, + 2410: 0x969B, + 2411: 0x5264, + 2412: 0x5728, + 2413: 0x6750, + 2414: 0x7F6A, + 2415: 0x8CA1, + 2416: 0x51B4, + 2417: 0x5742, + 2418: 0x962A, + 2419: 0x583A, + 2420: 0x698A, + 2421: 0x80B4, + 2422: 0x54B2, + 2423: 0x5D0E, + 2424: 0x57FC, + 2425: 0x7895, + 2426: 0x9DFA, + 2427: 0x4F5C, + 2428: 0x524A, + 2429: 0x548B, + 2430: 0x643E, + 2431: 0x6628, + 2432: 0x6714, + 2433: 0x67F5, + 2434: 0x7A84, + 2435: 0x7B56, + 2436: 0x7D22, + 2437: 0x932F, + 2438: 0x685C, + 2439: 0x9BAD, + 2440: 0x7B39, + 2441: 0x5319, + 2442: 0x518A, + 2443: 0x5237, + 2444: 0x5BDF, + 2445: 0x62F6, + 2446: 0x64AE, + 2447: 0x64E6, + 2448: 0x672D, + 2449: 0x6BBA, + 2450: 0x85A9, + 2451: 0x96D1, + 2452: 0x7690, + 2453: 0x9BD6, + 2454: 0x634C, + 2455: 0x9306, + 2456: 0x9BAB, + 2457: 0x76BF, + 2458: 0x6652, + 2459: 0x4E09, + 2460: 0x5098, + 2461: 0x53C2, + 2462: 0x5C71, + 2463: 0x60E8, + 2464: 0x6492, + 2465: 0x6563, + 2466: 0x685F, + 2467: 0x71E6, + 2468: 0x73CA, + 2469: 0x7523, + 2470: 0x7B97, + 2471: 0x7E82, + 2472: 0x8695, + 2473: 0x8B83, + 2474: 0x8CDB, + 2475: 0x9178, + 2476: 0x9910, + 2477: 0x65AC, + 2478: 0x66AB, + 2479: 0x6B8B, + 2480: 0x4ED5, + 2481: 0x4ED4, + 2482: 0x4F3A, + 2483: 0x4F7F, + 2484: 0x523A, + 2485: 0x53F8, + 2486: 0x53F2, + 2487: 0x55E3, + 2488: 0x56DB, + 2489: 0x58EB, + 2490: 0x59CB, + 2491: 0x59C9, + 2492: 0x59FF, + 2493: 0x5B50, + 2494: 0x5C4D, + 2495: 0x5E02, + 2496: 0x5E2B, + 2497: 0x5FD7, + 2498: 0x601D, + 2499: 0x6307, + 2500: 0x652F, + 2501: 0x5B5C, + 2502: 0x65AF, + 2503: 0x65BD, + 2504: 0x65E8, + 2505: 0x679D, + 2506: 0x6B62, + 2507: 0x6B7B, + 2508: 0x6C0F, + 2509: 0x7345, + 2510: 0x7949, + 2511: 0x79C1, + 2512: 0x7CF8, + 2513: 0x7D19, + 2514: 0x7D2B, + 2515: 0x80A2, + 2516: 0x8102, + 2517: 0x81F3, + 2518: 0x8996, + 2519: 0x8A5E, + 2520: 0x8A69, + 2521: 0x8A66, + 2522: 0x8A8C, + 2523: 0x8AEE, + 2524: 0x8CC7, + 2525: 0x8CDC, + 2526: 0x96CC, + 2527: 0x98FC, + 2528: 0x6B6F, + 2529: 0x4E8B, + 2530: 0x4F3C, + 2531: 0x4F8D, + 2532: 0x5150, + 2533: 0x5B57, + 2534: 0x5BFA, + 2535: 0x6148, + 2536: 0x6301, + 2537: 0x6642, + 2538: 0x6B21, + 2539: 0x6ECB, + 2540: 0x6CBB, + 2541: 0x723E, + 2542: 0x74BD, + 2543: 0x75D4, + 2544: 0x78C1, + 2545: 0x793A, + 2546: 0x800C, + 2547: 0x8033, + 2548: 0x81EA, + 2549: 0x8494, + 2550: 0x8F9E, + 2551: 0x6C50, + 2552: 0x9E7F, + 2553: 0x5F0F, + 2554: 0x8B58, + 2555: 0x9D2B, + 2556: 0x7AFA, + 2557: 0x8EF8, + 2558: 0x5B8D, + 2559: 0x96EB, + 2560: 0x4E03, + 2561: 0x53F1, + 2562: 0x57F7, + 2563: 0x5931, + 2564: 0x5AC9, + 2565: 0x5BA4, + 2566: 0x6089, + 2567: 0x6E7F, + 2568: 0x6F06, + 2569: 0x75BE, + 2570: 0x8CEA, + 2571: 0x5B9F, + 2572: 0x8500, + 2573: 0x7BE0, + 2574: 0x5072, + 2575: 0x67F4, + 2576: 0x829D, + 2577: 0x5C61, + 2578: 0x854A, + 2579: 0x7E1E, + 2580: 0x820E, + 2581: 0x5199, + 2582: 0x5C04, + 2583: 0x6368, + 2584: 0x8D66, + 2585: 0x659C, + 2586: 0x716E, + 2587: 0x793E, + 2588: 0x7D17, + 2589: 0x8005, + 2590: 0x8B1D, + 2591: 0x8ECA, + 2592: 0x906E, + 2593: 0x86C7, + 2594: 0x90AA, + 2595: 0x501F, + 2596: 0x52FA, + 2597: 0x5C3A, + 2598: 0x6753, + 2599: 0x707C, + 2600: 0x7235, + 2601: 0x914C, + 2602: 0x91C8, + 2603: 0x932B, + 2604: 0x82E5, + 2605: 0x5BC2, + 2606: 0x5F31, + 2607: 0x60F9, + 2608: 0x4E3B, + 2609: 0x53D6, + 2610: 0x5B88, + 2611: 0x624B, + 2612: 0x6731, + 2613: 0x6B8A, + 2614: 0x72E9, + 2615: 0x73E0, + 2616: 0x7A2E, + 2617: 0x816B, + 2618: 0x8DA3, + 2619: 0x9152, + 2620: 0x9996, + 2621: 0x5112, + 2622: 0x53D7, + 2623: 0x546A, + 2624: 0x5BFF, + 2625: 0x6388, + 2626: 0x6A39, + 2627: 0x7DAC, + 2628: 0x9700, + 2629: 0x56DA, + 2630: 0x53CE, + 2631: 0x5468, + 2632: 0x5B97, + 2633: 0x5C31, + 2634: 0x5DDE, + 2635: 0x4FEE, + 2636: 0x6101, + 2637: 0x62FE, + 2638: 0x6D32, + 2639: 0x79C0, + 2640: 0x79CB, + 2641: 0x7D42, + 2642: 0x7E4D, + 2643: 0x7FD2, + 2644: 0x81ED, + 2645: 0x821F, + 2646: 0x8490, + 2647: 0x8846, + 2648: 0x8972, + 2649: 0x8B90, + 2650: 0x8E74, + 2651: 0x8F2F, + 2652: 0x9031, + 2653: 0x914B, + 2654: 0x916C, + 2655: 0x96C6, + 2656: 0x919C, + 2657: 0x4EC0, + 2658: 0x4F4F, + 2659: 0x5145, + 2660: 0x5341, + 2661: 0x5F93, + 2662: 0x620E, + 2663: 0x67D4, + 2664: 0x6C41, + 2665: 0x6E0B, + 2666: 0x7363, + 2667: 0x7E26, + 2668: 0x91CD, + 2669: 0x9283, + 2670: 0x53D4, + 2671: 0x5919, + 2672: 0x5BBF, + 2673: 0x6DD1, + 2674: 0x795D, + 2675: 0x7E2E, + 2676: 0x7C9B, + 2677: 0x587E, + 2678: 0x719F, + 2679: 0x51FA, + 2680: 0x8853, + 2681: 0x8FF0, + 2682: 0x4FCA, + 2683: 0x5CFB, + 2684: 0x6625, + 2685: 0x77AC, + 2686: 0x7AE3, + 2687: 0x821C, + 2688: 0x99FF, + 2689: 0x51C6, + 2690: 0x5FAA, + 2691: 0x65EC, + 2692: 0x696F, + 2693: 0x6B89, + 2694: 0x6DF3, + 2695: 0x6E96, + 2696: 0x6F64, + 2697: 0x76FE, + 2698: 0x7D14, + 2699: 0x5DE1, + 2700: 0x9075, + 2701: 0x9187, + 2702: 0x9806, + 2703: 0x51E6, + 2704: 0x521D, + 2705: 0x6240, + 2706: 0x6691, + 2707: 0x66D9, + 2708: 0x6E1A, + 2709: 0x5EB6, + 2710: 0x7DD2, + 2711: 0x7F72, + 2712: 0x66F8, + 2713: 0x85AF, + 2714: 0x85F7, + 2715: 0x8AF8, + 2716: 0x52A9, + 2717: 0x53D9, + 2718: 0x5973, + 2719: 0x5E8F, + 2720: 0x5F90, + 2721: 0x6055, + 2722: 0x92E4, + 2723: 0x9664, + 2724: 0x50B7, + 2725: 0x511F, + 2726: 0x52DD, + 2727: 0x5320, + 2728: 0x5347, + 2729: 0x53EC, + 2730: 0x54E8, + 2731: 0x5546, + 2732: 0x5531, + 2733: 0x5617, + 2734: 0x5968, + 2735: 0x59BE, + 2736: 0x5A3C, + 2737: 0x5BB5, + 2738: 0x5C06, + 2739: 0x5C0F, + 2740: 0x5C11, + 2741: 0x5C1A, + 2742: 0x5E84, + 2743: 0x5E8A, + 2744: 0x5EE0, + 2745: 0x5F70, + 2746: 0x627F, + 2747: 0x6284, + 2748: 0x62DB, + 2749: 0x638C, + 2750: 0x6377, + 2751: 0x6607, + 2752: 0x660C, + 2753: 0x662D, + 2754: 0x6676, + 2755: 0x677E, + 2756: 0x68A2, + 2757: 0x6A1F, + 2758: 0x6A35, + 2759: 0x6CBC, + 2760: 0x6D88, + 2761: 0x6E09, + 2762: 0x6E58, + 2763: 0x713C, + 2764: 0x7126, + 2765: 0x7167, + 2766: 0x75C7, + 2767: 0x7701, + 2768: 0x785D, + 2769: 0x7901, + 2770: 0x7965, + 2771: 0x79F0, + 2772: 0x7AE0, + 2773: 0x7B11, + 2774: 0x7CA7, + 2775: 0x7D39, + 2776: 0x8096, + 2777: 0x83D6, + 2778: 0x848B, + 2779: 0x8549, + 2780: 0x885D, + 2781: 0x88F3, + 2782: 0x8A1F, + 2783: 0x8A3C, + 2784: 0x8A54, + 2785: 0x8A73, + 2786: 0x8C61, + 2787: 0x8CDE, + 2788: 0x91A4, + 2789: 0x9266, + 2790: 0x937E, + 2791: 0x9418, + 2792: 0x969C, + 2793: 0x9798, + 2794: 0x4E0A, + 2795: 0x4E08, + 2796: 0x4E1E, + 2797: 0x4E57, + 2798: 0x5197, + 2799: 0x5270, + 2800: 0x57CE, + 2801: 0x5834, + 2802: 0x58CC, + 2803: 0x5B22, + 2804: 0x5E38, + 2805: 0x60C5, + 2806: 0x64FE, + 2807: 0x6761, + 2808: 0x6756, + 2809: 0x6D44, + 2810: 0x72B6, + 2811: 0x7573, + 2812: 0x7A63, + 2813: 0x84B8, + 2814: 0x8B72, + 2815: 0x91B8, + 2816: 0x9320, + 2817: 0x5631, + 2818: 0x57F4, + 2819: 0x98FE, + 2820: 0x62ED, + 2821: 0x690D, + 2822: 0x6B96, + 2823: 0x71ED, + 2824: 0x7E54, + 2825: 0x8077, + 2826: 0x8272, + 2827: 0x89E6, + 2828: 0x98DF, + 2829: 0x8755, + 2830: 0x8FB1, + 2831: 0x5C3B, + 2832: 0x4F38, + 2833: 0x4FE1, + 2834: 0x4FB5, + 2835: 0x5507, + 2836: 0x5A20, + 2837: 0x5BDD, + 2838: 0x5BE9, + 2839: 0x5FC3, + 2840: 0x614E, + 2841: 0x632F, + 2842: 0x65B0, + 2843: 0x664B, + 2844: 0x68EE, + 2845: 0x699B, + 2846: 0x6D78, + 2847: 0x6DF1, + 2848: 0x7533, + 2849: 0x75B9, + 2850: 0x771F, + 2851: 0x795E, + 2852: 0x79E6, + 2853: 0x7D33, + 2854: 0x81E3, + 2855: 0x82AF, + 2856: 0x85AA, + 2857: 0x89AA, + 2858: 0x8A3A, + 2859: 0x8EAB, + 2860: 0x8F9B, + 2861: 0x9032, + 2862: 0x91DD, + 2863: 0x9707, + 2864: 0x4EBA, + 2865: 0x4EC1, + 2866: 0x5203, + 2867: 0x5875, + 2868: 0x58EC, + 2869: 0x5C0B, + 2870: 0x751A, + 2871: 0x5C3D, + 2872: 0x814E, + 2873: 0x8A0A, + 2874: 0x8FC5, + 2875: 0x9663, + 2876: 0x976D, + 2877: 0x7B25, + 2878: 0x8ACF, + 2879: 0x9808, + 2880: 0x9162, + 2881: 0x56F3, + 2882: 0x53A8, + 2883: 0x9017, + 2884: 0x5439, + 2885: 0x5782, + 2886: 0x5E25, + 2887: 0x63A8, + 2888: 0x6C34, + 2889: 0x708A, + 2890: 0x7761, + 2891: 0x7C8B, + 2892: 0x7FE0, + 2893: 0x8870, + 2894: 0x9042, + 2895: 0x9154, + 2896: 0x9310, + 2897: 0x9318, + 2898: 0x968F, + 2899: 0x745E, + 2900: 0x9AC4, + 2901: 0x5D07, + 2902: 0x5D69, + 2903: 0x6570, + 2904: 0x67A2, + 2905: 0x8DA8, + 2906: 0x96DB, + 2907: 0x636E, + 2908: 0x6749, + 2909: 0x6919, + 2910: 0x83C5, + 2911: 0x9817, + 2912: 0x96C0, + 2913: 0x88FE, + 2914: 0x6F84, + 2915: 0x647A, + 2916: 0x5BF8, + 2917: 0x4E16, + 2918: 0x702C, + 2919: 0x755D, + 2920: 0x662F, + 2921: 0x51C4, + 2922: 0x5236, + 2923: 0x52E2, + 2924: 0x59D3, + 2925: 0x5F81, + 2926: 0x6027, + 2927: 0x6210, + 2928: 0x653F, + 2929: 0x6574, + 2930: 0x661F, + 2931: 0x6674, + 2932: 0x68F2, + 2933: 0x6816, + 2934: 0x6B63, + 2935: 0x6E05, + 2936: 0x7272, + 2937: 0x751F, + 2938: 0x76DB, + 2939: 0x7CBE, + 2940: 0x8056, + 2941: 0x58F0, + 2942: 0x88FD, + 2943: 0x897F, + 2944: 0x8AA0, + 2945: 0x8A93, + 2946: 0x8ACB, + 2947: 0x901D, + 2948: 0x9192, + 2949: 0x9752, + 2950: 0x9759, + 2951: 0x6589, + 2952: 0x7A0E, + 2953: 0x8106, + 2954: 0x96BB, + 2955: 0x5E2D, + 2956: 0x60DC, + 2957: 0x621A, + 2958: 0x65A5, + 2959: 0x6614, + 2960: 0x6790, + 2961: 0x77F3, + 2962: 0x7A4D, + 2963: 0x7C4D, + 2964: 0x7E3E, + 2965: 0x810A, + 2966: 0x8CAC, + 2967: 0x8D64, + 2968: 0x8DE1, + 2969: 0x8E5F, + 2970: 0x78A9, + 2971: 0x5207, + 2972: 0x62D9, + 2973: 0x63A5, + 2974: 0x6442, + 2975: 0x6298, + 2976: 0x8A2D, + 2977: 0x7A83, + 2978: 0x7BC0, + 2979: 0x8AAC, + 2980: 0x96EA, + 2981: 0x7D76, + 2982: 0x820C, + 2983: 0x8749, + 2984: 0x4ED9, + 2985: 0x5148, + 2986: 0x5343, + 2987: 0x5360, + 2988: 0x5BA3, + 2989: 0x5C02, + 2990: 0x5C16, + 2991: 0x5DDD, + 2992: 0x6226, + 2993: 0x6247, + 2994: 0x64B0, + 2995: 0x6813, + 2996: 0x6834, + 2997: 0x6CC9, + 2998: 0x6D45, + 2999: 0x6D17, + 3000: 0x67D3, + 3001: 0x6F5C, + 3002: 0x714E, + 3003: 0x717D, + 3004: 0x65CB, + 3005: 0x7A7F, + 3006: 0x7BAD, + 3007: 0x7DDA, + 3008: 0x7E4A, + 3009: 0x7FA8, + 3010: 0x817A, + 3011: 0x821B, + 3012: 0x8239, + 3013: 0x85A6, + 3014: 0x8A6E, + 3015: 0x8CCE, + 3016: 0x8DF5, + 3017: 0x9078, + 3018: 0x9077, + 3019: 0x92AD, + 3020: 0x9291, + 3021: 0x9583, + 3022: 0x9BAE, + 3023: 0x524D, + 3024: 0x5584, + 3025: 0x6F38, + 3026: 0x7136, + 3027: 0x5168, + 3028: 0x7985, + 3029: 0x7E55, + 3030: 0x81B3, + 3031: 0x7CCE, + 3032: 0x564C, + 3033: 0x5851, + 3034: 0x5CA8, + 3035: 0x63AA, + 3036: 0x66FE, + 3037: 0x66FD, + 3038: 0x695A, + 3039: 0x72D9, + 3040: 0x758F, + 3041: 0x758E, + 3042: 0x790E, + 3043: 0x7956, + 3044: 0x79DF, + 3045: 0x7C97, + 3046: 0x7D20, + 3047: 0x7D44, + 3048: 0x8607, + 3049: 0x8A34, + 3050: 0x963B, + 3051: 0x9061, + 3052: 0x9F20, + 3053: 0x50E7, + 3054: 0x5275, + 3055: 0x53CC, + 3056: 0x53E2, + 3057: 0x5009, + 3058: 0x55AA, + 3059: 0x58EE, + 3060: 0x594F, + 3061: 0x723D, + 3062: 0x5B8B, + 3063: 0x5C64, + 3064: 0x531D, + 3065: 0x60E3, + 3066: 0x60F3, + 3067: 0x635C, + 3068: 0x6383, + 3069: 0x633F, + 3070: 0x63BB, + 3071: 0x64CD, + 3072: 0x65E9, + 3073: 0x66F9, + 3074: 0x5DE3, + 3075: 0x69CD, + 3076: 0x69FD, + 3077: 0x6F15, + 3078: 0x71E5, + 3079: 0x4E89, + 3080: 0x75E9, + 3081: 0x76F8, + 3082: 0x7A93, + 3083: 0x7CDF, + 3084: 0x7DCF, + 3085: 0x7D9C, + 3086: 0x8061, + 3087: 0x8349, + 3088: 0x8358, + 3089: 0x846C, + 3090: 0x84BC, + 3091: 0x85FB, + 3092: 0x88C5, + 3093: 0x8D70, + 3094: 0x9001, + 3095: 0x906D, + 3096: 0x9397, + 3097: 0x971C, + 3098: 0x9A12, + 3099: 0x50CF, + 3100: 0x5897, + 3101: 0x618E, + 3102: 0x81D3, + 3103: 0x8535, + 3104: 0x8D08, + 3105: 0x9020, + 3106: 0x4FC3, + 3107: 0x5074, + 3108: 0x5247, + 3109: 0x5373, + 3110: 0x606F, + 3111: 0x6349, + 3112: 0x675F, + 3113: 0x6E2C, + 3114: 0x8DB3, + 3115: 0x901F, + 3116: 0x4FD7, + 3117: 0x5C5E, + 3118: 0x8CCA, + 3119: 0x65CF, + 3120: 0x7D9A, + 3121: 0x5352, + 3122: 0x8896, + 3123: 0x5176, + 3124: 0x63C3, + 3125: 0x5B58, + 3126: 0x5B6B, + 3127: 0x5C0A, + 3128: 0x640D, + 3129: 0x6751, + 3130: 0x905C, + 3131: 0x4ED6, + 3132: 0x591A, + 3133: 0x592A, + 3134: 0x6C70, + 3135: 0x8A51, + 3136: 0x553E, + 3137: 0x5815, + 3138: 0x59A5, + 3139: 0x60F0, + 3140: 0x6253, + 3141: 0x67C1, + 3142: 0x8235, + 3143: 0x6955, + 3144: 0x9640, + 3145: 0x99C4, + 3146: 0x9A28, + 3147: 0x4F53, + 3148: 0x5806, + 3149: 0x5BFE, + 3150: 0x8010, + 3151: 0x5CB1, + 3152: 0x5E2F, + 3153: 0x5F85, + 3154: 0x6020, + 3155: 0x614B, + 3156: 0x6234, + 3157: 0x66FF, + 3158: 0x6CF0, + 3159: 0x6EDE, + 3160: 0x80CE, + 3161: 0x817F, + 3162: 0x82D4, + 3163: 0x888B, + 3164: 0x8CB8, + 3165: 0x9000, + 3166: 0x902E, + 3167: 0x968A, + 3168: 0x9EDB, + 3169: 0x9BDB, + 3170: 0x4EE3, + 3171: 0x53F0, + 3172: 0x5927, + 3173: 0x7B2C, + 3174: 0x918D, + 3175: 0x984C, + 3176: 0x9DF9, + 3177: 0x6EDD, + 3178: 0x7027, + 3179: 0x5353, + 3180: 0x5544, + 3181: 0x5B85, + 3182: 0x6258, + 3183: 0x629E, + 3184: 0x62D3, + 3185: 0x6CA2, + 3186: 0x6FEF, + 3187: 0x7422, + 3188: 0x8A17, + 3189: 0x9438, + 3190: 0x6FC1, + 3191: 0x8AFE, + 3192: 0x8338, + 3193: 0x51E7, + 3194: 0x86F8, + 3195: 0x53EA, + 3196: 0x53E9, + 3197: 0x4F46, + 3198: 0x9054, + 3199: 0x8FB0, + 3200: 0x596A, + 3201: 0x8131, + 3202: 0x5DFD, + 3203: 0x7AEA, + 3204: 0x8FBF, + 3205: 0x68DA, + 3206: 0x8C37, + 3207: 0x72F8, + 3208: 0x9C48, + 3209: 0x6A3D, + 3210: 0x8AB0, + 3211: 0x4E39, + 3212: 0x5358, + 3213: 0x5606, + 3214: 0x5766, + 3215: 0x62C5, + 3216: 0x63A2, + 3217: 0x65E6, + 3218: 0x6B4E, + 3219: 0x6DE1, + 3220: 0x6E5B, + 3221: 0x70AD, + 3222: 0x77ED, + 3223: 0x7AEF, + 3224: 0x7BAA, + 3225: 0x7DBB, + 3226: 0x803D, + 3227: 0x80C6, + 3228: 0x86CB, + 3229: 0x8A95, + 3230: 0x935B, + 3231: 0x56E3, + 3232: 0x58C7, + 3233: 0x5F3E, + 3234: 0x65AD, + 3235: 0x6696, + 3236: 0x6A80, + 3237: 0x6BB5, + 3238: 0x7537, + 3239: 0x8AC7, + 3240: 0x5024, + 3241: 0x77E5, + 3242: 0x5730, + 3243: 0x5F1B, + 3244: 0x6065, + 3245: 0x667A, + 3246: 0x6C60, + 3247: 0x75F4, + 3248: 0x7A1A, + 3249: 0x7F6E, + 3250: 0x81F4, + 3251: 0x8718, + 3252: 0x9045, + 3253: 0x99B3, + 3254: 0x7BC9, + 3255: 0x755C, + 3256: 0x7AF9, + 3257: 0x7B51, + 3258: 0x84C4, + 3259: 0x9010, + 3260: 0x79E9, + 3261: 0x7A92, + 3262: 0x8336, + 3263: 0x5AE1, + 3264: 0x7740, + 3265: 0x4E2D, + 3266: 0x4EF2, + 3267: 0x5B99, + 3268: 0x5FE0, + 3269: 0x62BD, + 3270: 0x663C, + 3271: 0x67F1, + 3272: 0x6CE8, + 3273: 0x866B, + 3274: 0x8877, + 3275: 0x8A3B, + 3276: 0x914E, + 3277: 0x92F3, + 3278: 0x99D0, + 3279: 0x6A17, + 3280: 0x7026, + 3281: 0x732A, + 3282: 0x82E7, + 3283: 0x8457, + 3284: 0x8CAF, + 3285: 0x4E01, + 3286: 0x5146, + 3287: 0x51CB, + 3288: 0x558B, + 3289: 0x5BF5, + 3290: 0x5E16, + 3291: 0x5E33, + 3292: 0x5E81, + 3293: 0x5F14, + 3294: 0x5F35, + 3295: 0x5F6B, + 3296: 0x5FB4, + 3297: 0x61F2, + 3298: 0x6311, + 3299: 0x66A2, + 3300: 0x671D, + 3301: 0x6F6E, + 3302: 0x7252, + 3303: 0x753A, + 3304: 0x773A, + 3305: 0x8074, + 3306: 0x8139, + 3307: 0x8178, + 3308: 0x8776, + 3309: 0x8ABF, + 3310: 0x8ADC, + 3311: 0x8D85, + 3312: 0x8DF3, + 3313: 0x929A, + 3314: 0x9577, + 3315: 0x9802, + 3316: 0x9CE5, + 3317: 0x52C5, + 3318: 0x6357, + 3319: 0x76F4, + 3320: 0x6715, + 3321: 0x6C88, + 3322: 0x73CD, + 3323: 0x8CC3, + 3324: 0x93AE, + 3325: 0x9673, + 3326: 0x6D25, + 3327: 0x589C, + 3328: 0x690E, + 3329: 0x69CC, + 3330: 0x8FFD, + 3331: 0x939A, + 3332: 0x75DB, + 3333: 0x901A, + 3334: 0x585A, + 3335: 0x6802, + 3336: 0x63B4, + 3337: 0x69FB, + 3338: 0x4F43, + 3339: 0x6F2C, + 3340: 0x67D8, + 3341: 0x8FBB, + 3342: 0x8526, + 3343: 0x7DB4, + 3344: 0x9354, + 3345: 0x693F, + 3346: 0x6F70, + 3347: 0x576A, + 3348: 0x58F7, + 3349: 0x5B2C, + 3350: 0x7D2C, + 3351: 0x722A, + 3352: 0x540A, + 3353: 0x91E3, + 3354: 0x9DB4, + 3355: 0x4EAD, + 3356: 0x4F4E, + 3357: 0x505C, + 3358: 0x5075, + 3359: 0x5243, + 3360: 0x8C9E, + 3361: 0x5448, + 3362: 0x5824, + 3363: 0x5B9A, + 3364: 0x5E1D, + 3365: 0x5E95, + 3366: 0x5EAD, + 3367: 0x5EF7, + 3368: 0x5F1F, + 3369: 0x608C, + 3370: 0x62B5, + 3371: 0x633A, + 3372: 0x63D0, + 3373: 0x68AF, + 3374: 0x6C40, + 3375: 0x7887, + 3376: 0x798E, + 3377: 0x7A0B, + 3378: 0x7DE0, + 3379: 0x8247, + 3380: 0x8A02, + 3381: 0x8AE6, + 3382: 0x8E44, + 3383: 0x9013, + 3384: 0x90B8, + 3385: 0x912D, + 3386: 0x91D8, + 3387: 0x9F0E, + 3388: 0x6CE5, + 3389: 0x6458, + 3390: 0x64E2, + 3391: 0x6575, + 3392: 0x6EF4, + 3393: 0x7684, + 3394: 0x7B1B, + 3395: 0x9069, + 3396: 0x93D1, + 3397: 0x6EBA, + 3398: 0x54F2, + 3399: 0x5FB9, + 3400: 0x64A4, + 3401: 0x8F4D, + 3402: 0x8FED, + 3403: 0x9244, + 3404: 0x5178, + 3405: 0x586B, + 3406: 0x5929, + 3407: 0x5C55, + 3408: 0x5E97, + 3409: 0x6DFB, + 3410: 0x7E8F, + 3411: 0x751C, + 3412: 0x8CBC, + 3413: 0x8EE2, + 3414: 0x985B, + 3415: 0x70B9, + 3416: 0x4F1D, + 3417: 0x6BBF, + 3418: 0x6FB1, + 3419: 0x7530, + 3420: 0x96FB, + 3421: 0x514E, + 3422: 0x5410, + 3423: 0x5835, + 3424: 0x5857, + 3425: 0x59AC, + 3426: 0x5C60, + 3427: 0x5F92, + 3428: 0x6597, + 3429: 0x675C, + 3430: 0x6E21, + 3431: 0x767B, + 3432: 0x83DF, + 3433: 0x8CED, + 3434: 0x9014, + 3435: 0x90FD, + 3436: 0x934D, + 3437: 0x7825, + 3438: 0x783A, + 3439: 0x52AA, + 3440: 0x5EA6, + 3441: 0x571F, + 3442: 0x5974, + 3443: 0x6012, + 3444: 0x5012, + 3445: 0x515A, + 3446: 0x51AC, + 3447: 0x51CD, + 3448: 0x5200, + 3449: 0x5510, + 3450: 0x5854, + 3451: 0x5858, + 3452: 0x5957, + 3453: 0x5B95, + 3454: 0x5CF6, + 3455: 0x5D8B, + 3456: 0x60BC, + 3457: 0x6295, + 3458: 0x642D, + 3459: 0x6771, + 3460: 0x6843, + 3461: 0x68BC, + 3462: 0x68DF, + 3463: 0x76D7, + 3464: 0x6DD8, + 3465: 0x6E6F, + 3466: 0x6D9B, + 3467: 0x706F, + 3468: 0x71C8, + 3469: 0x5F53, + 3470: 0x75D8, + 3471: 0x7977, + 3472: 0x7B49, + 3473: 0x7B54, + 3474: 0x7B52, + 3475: 0x7CD6, + 3476: 0x7D71, + 3477: 0x5230, + 3478: 0x8463, + 3479: 0x8569, + 3480: 0x85E4, + 3481: 0x8A0E, + 3482: 0x8B04, + 3483: 0x8C46, + 3484: 0x8E0F, + 3485: 0x9003, + 3486: 0x900F, + 3487: 0x9419, + 3488: 0x9676, + 3489: 0x982D, + 3490: 0x9A30, + 3491: 0x95D8, + 3492: 0x50CD, + 3493: 0x52D5, + 3494: 0x540C, + 3495: 0x5802, + 3496: 0x5C0E, + 3497: 0x61A7, + 3498: 0x649E, + 3499: 0x6D1E, + 3500: 0x77B3, + 3501: 0x7AE5, + 3502: 0x80F4, + 3503: 0x8404, + 3504: 0x9053, + 3505: 0x9285, + 3506: 0x5CE0, + 3507: 0x9D07, + 3508: 0x533F, + 3509: 0x5F97, + 3510: 0x5FB3, + 3511: 0x6D9C, + 3512: 0x7279, + 3513: 0x7763, + 3514: 0x79BF, + 3515: 0x7BE4, + 3516: 0x6BD2, + 3517: 0x72EC, + 3518: 0x8AAD, + 3519: 0x6803, + 3520: 0x6A61, + 3521: 0x51F8, + 3522: 0x7A81, + 3523: 0x6934, + 3524: 0x5C4A, + 3525: 0x9CF6, + 3526: 0x82EB, + 3527: 0x5BC5, + 3528: 0x9149, + 3529: 0x701E, + 3530: 0x5678, + 3531: 0x5C6F, + 3532: 0x60C7, + 3533: 0x6566, + 3534: 0x6C8C, + 3535: 0x8C5A, + 3536: 0x9041, + 3537: 0x9813, + 3538: 0x5451, + 3539: 0x66C7, + 3540: 0x920D, + 3541: 0x5948, + 3542: 0x90A3, + 3543: 0x5185, + 3544: 0x4E4D, + 3545: 0x51EA, + 3546: 0x8599, + 3547: 0x8B0E, + 3548: 0x7058, + 3549: 0x637A, + 3550: 0x934B, + 3551: 0x6962, + 3552: 0x99B4, + 3553: 0x7E04, + 3554: 0x7577, + 3555: 0x5357, + 3556: 0x6960, + 3557: 0x8EDF, + 3558: 0x96E3, + 3559: 0x6C5D, + 3560: 0x4E8C, + 3561: 0x5C3C, + 3562: 0x5F10, + 3563: 0x8FE9, + 3564: 0x5302, + 3565: 0x8CD1, + 3566: 0x8089, + 3567: 0x8679, + 3568: 0x5EFF, + 3569: 0x65E5, + 3570: 0x4E73, + 3571: 0x5165, + 3572: 0x5982, + 3573: 0x5C3F, + 3574: 0x97EE, + 3575: 0x4EFB, + 3576: 0x598A, + 3577: 0x5FCD, + 3578: 0x8A8D, + 3579: 0x6FE1, + 3580: 0x79B0, + 3581: 0x7962, + 3582: 0x5BE7, + 3583: 0x8471, + 3584: 0x732B, + 3585: 0x71B1, + 3586: 0x5E74, + 3587: 0x5FF5, + 3588: 0x637B, + 3589: 0x649A, + 3590: 0x71C3, + 3591: 0x7C98, + 3592: 0x4E43, + 3593: 0x5EFC, + 3594: 0x4E4B, + 3595: 0x57DC, + 3596: 0x56A2, + 3597: 0x60A9, + 3598: 0x6FC3, + 3599: 0x7D0D, + 3600: 0x80FD, + 3601: 0x8133, + 3602: 0x81BF, + 3603: 0x8FB2, + 3604: 0x8997, + 3605: 0x86A4, + 3606: 0x5DF4, + 3607: 0x628A, + 3608: 0x64AD, + 3609: 0x8987, + 3610: 0x6777, + 3611: 0x6CE2, + 3612: 0x6D3E, + 3613: 0x7436, + 3614: 0x7834, + 3615: 0x5A46, + 3616: 0x7F75, + 3617: 0x82AD, + 3618: 0x99AC, + 3619: 0x4FF3, + 3620: 0x5EC3, + 3621: 0x62DD, + 3622: 0x6392, + 3623: 0x6557, + 3624: 0x676F, + 3625: 0x76C3, + 3626: 0x724C, + 3627: 0x80CC, + 3628: 0x80BA, + 3629: 0x8F29, + 3630: 0x914D, + 3631: 0x500D, + 3632: 0x57F9, + 3633: 0x5A92, + 3634: 0x6885, + 3635: 0x6973, + 3636: 0x7164, + 3637: 0x72FD, + 3638: 0x8CB7, + 3639: 0x58F2, + 3640: 0x8CE0, + 3641: 0x966A, + 3642: 0x9019, + 3643: 0x877F, + 3644: 0x79E4, + 3645: 0x77E7, + 3646: 0x8429, + 3647: 0x4F2F, + 3648: 0x5265, + 3649: 0x535A, + 3650: 0x62CD, + 3651: 0x67CF, + 3652: 0x6CCA, + 3653: 0x767D, + 3654: 0x7B94, + 3655: 0x7C95, + 3656: 0x8236, + 3657: 0x8584, + 3658: 0x8FEB, + 3659: 0x66DD, + 3660: 0x6F20, + 3661: 0x7206, + 3662: 0x7E1B, + 3663: 0x83AB, + 3664: 0x99C1, + 3665: 0x9EA6, + 3666: 0x51FD, + 3667: 0x7BB1, + 3668: 0x7872, + 3669: 0x7BB8, + 3670: 0x8087, + 3671: 0x7B48, + 3672: 0x6AE8, + 3673: 0x5E61, + 3674: 0x808C, + 3675: 0x7551, + 3676: 0x7560, + 3677: 0x516B, + 3678: 0x9262, + 3679: 0x6E8C, + 3680: 0x767A, + 3681: 0x9197, + 3682: 0x9AEA, + 3683: 0x4F10, + 3684: 0x7F70, + 3685: 0x629C, + 3686: 0x7B4F, + 3687: 0x95A5, + 3688: 0x9CE9, + 3689: 0x567A, + 3690: 0x5859, + 3691: 0x86E4, + 3692: 0x96BC, + 3693: 0x4F34, + 3694: 0x5224, + 3695: 0x534A, + 3696: 0x53CD, + 3697: 0x53DB, + 3698: 0x5E06, + 3699: 0x642C, + 3700: 0x6591, + 3701: 0x677F, + 3702: 0x6C3E, + 3703: 0x6C4E, + 3704: 0x7248, + 3705: 0x72AF, + 3706: 0x73ED, + 3707: 0x7554, + 3708: 0x7E41, + 3709: 0x822C, + 3710: 0x85E9, + 3711: 0x8CA9, + 3712: 0x7BC4, + 3713: 0x91C6, + 3714: 0x7169, + 3715: 0x9812, + 3716: 0x98EF, + 3717: 0x633D, + 3718: 0x6669, + 3719: 0x756A, + 3720: 0x76E4, + 3721: 0x78D0, + 3722: 0x8543, + 3723: 0x86EE, + 3724: 0x532A, + 3725: 0x5351, + 3726: 0x5426, + 3727: 0x5983, + 3728: 0x5E87, + 3729: 0x5F7C, + 3730: 0x60B2, + 3731: 0x6249, + 3732: 0x6279, + 3733: 0x62AB, + 3734: 0x6590, + 3735: 0x6BD4, + 3736: 0x6CCC, + 3737: 0x75B2, + 3738: 0x76AE, + 3739: 0x7891, + 3740: 0x79D8, + 3741: 0x7DCB, + 3742: 0x7F77, + 3743: 0x80A5, + 3744: 0x88AB, + 3745: 0x8AB9, + 3746: 0x8CBB, + 3747: 0x907F, + 3748: 0x975E, + 3749: 0x98DB, + 3750: 0x6A0B, + 3751: 0x7C38, + 3752: 0x5099, + 3753: 0x5C3E, + 3754: 0x5FAE, + 3755: 0x6787, + 3756: 0x6BD8, + 3757: 0x7435, + 3758: 0x7709, + 3759: 0x7F8E, + 3760: 0x9F3B, + 3761: 0x67CA, + 3762: 0x7A17, + 3763: 0x5339, + 3764: 0x758B, + 3765: 0x9AED, + 3766: 0x5F66, + 3767: 0x819D, + 3768: 0x83F1, + 3769: 0x8098, + 3770: 0x5F3C, + 3771: 0x5FC5, + 3772: 0x7562, + 3773: 0x7B46, + 3774: 0x903C, + 3775: 0x6867, + 3776: 0x59EB, + 3777: 0x5A9B, + 3778: 0x7D10, + 3779: 0x767E, + 3780: 0x8B2C, + 3781: 0x4FF5, + 3782: 0x5F6A, + 3783: 0x6A19, + 3784: 0x6C37, + 3785: 0x6F02, + 3786: 0x74E2, + 3787: 0x7968, + 3788: 0x8868, + 3789: 0x8A55, + 3790: 0x8C79, + 3791: 0x5EDF, + 3792: 0x63CF, + 3793: 0x75C5, + 3794: 0x79D2, + 3795: 0x82D7, + 3796: 0x9328, + 3797: 0x92F2, + 3798: 0x849C, + 3799: 0x86ED, + 3800: 0x9C2D, + 3801: 0x54C1, + 3802: 0x5F6C, + 3803: 0x658C, + 3804: 0x6D5C, + 3805: 0x7015, + 3806: 0x8CA7, + 3807: 0x8CD3, + 3808: 0x983B, + 3809: 0x654F, + 3810: 0x74F6, + 3811: 0x4E0D, + 3812: 0x4ED8, + 3813: 0x57E0, + 3814: 0x592B, + 3815: 0x5A66, + 3816: 0x5BCC, + 3817: 0x51A8, + 3818: 0x5E03, + 3819: 0x5E9C, + 3820: 0x6016, + 3821: 0x6276, + 3822: 0x6577, + 3823: 0x65A7, + 3824: 0x666E, + 3825: 0x6D6E, + 3826: 0x7236, + 3827: 0x7B26, + 3828: 0x8150, + 3829: 0x819A, + 3830: 0x8299, + 3831: 0x8B5C, + 3832: 0x8CA0, + 3833: 0x8CE6, + 3834: 0x8D74, + 3835: 0x961C, + 3836: 0x9644, + 3837: 0x4FAE, + 3838: 0x64AB, + 3839: 0x6B66, + 3840: 0x821E, + 3841: 0x8461, + 3842: 0x856A, + 3843: 0x90E8, + 3844: 0x5C01, + 3845: 0x6953, + 3846: 0x98A8, + 3847: 0x847A, + 3848: 0x8557, + 3849: 0x4F0F, + 3850: 0x526F, + 3851: 0x5FA9, + 3852: 0x5E45, + 3853: 0x670D, + 3854: 0x798F, + 3855: 0x8179, + 3856: 0x8907, + 3857: 0x8986, + 3858: 0x6DF5, + 3859: 0x5F17, + 3860: 0x6255, + 3861: 0x6CB8, + 3862: 0x4ECF, + 3863: 0x7269, + 3864: 0x9B92, + 3865: 0x5206, + 3866: 0x543B, + 3867: 0x5674, + 3868: 0x58B3, + 3869: 0x61A4, + 3870: 0x626E, + 3871: 0x711A, + 3872: 0x596E, + 3873: 0x7C89, + 3874: 0x7CDE, + 3875: 0x7D1B, + 3876: 0x96F0, + 3877: 0x6587, + 3878: 0x805E, + 3879: 0x4E19, + 3880: 0x4F75, + 3881: 0x5175, + 3882: 0x5840, + 3883: 0x5E63, + 3884: 0x5E73, + 3885: 0x5F0A, + 3886: 0x67C4, + 3887: 0x4E26, + 3888: 0x853D, + 3889: 0x9589, + 3890: 0x965B, + 3891: 0x7C73, + 3892: 0x9801, + 3893: 0x50FB, + 3894: 0x58C1, + 3895: 0x7656, + 3896: 0x78A7, + 3897: 0x5225, + 3898: 0x77A5, + 3899: 0x8511, + 3900: 0x7B86, + 3901: 0x504F, + 3902: 0x5909, + 3903: 0x7247, + 3904: 0x7BC7, + 3905: 0x7DE8, + 3906: 0x8FBA, + 3907: 0x8FD4, + 3908: 0x904D, + 3909: 0x4FBF, + 3910: 0x52C9, + 3911: 0x5A29, + 3912: 0x5F01, + 3913: 0x97AD, + 3914: 0x4FDD, + 3915: 0x8217, + 3916: 0x92EA, + 3917: 0x5703, + 3918: 0x6355, + 3919: 0x6B69, + 3920: 0x752B, + 3921: 0x88DC, + 3922: 0x8F14, + 3923: 0x7A42, + 3924: 0x52DF, + 3925: 0x5893, + 3926: 0x6155, + 3927: 0x620A, + 3928: 0x66AE, + 3929: 0x6BCD, + 3930: 0x7C3F, + 3931: 0x83E9, + 3932: 0x5023, + 3933: 0x4FF8, + 3934: 0x5305, + 3935: 0x5446, + 3936: 0x5831, + 3937: 0x5949, + 3938: 0x5B9D, + 3939: 0x5CF0, + 3940: 0x5CEF, + 3941: 0x5D29, + 3942: 0x5E96, + 3943: 0x62B1, + 3944: 0x6367, + 3945: 0x653E, + 3946: 0x65B9, + 3947: 0x670B, + 3948: 0x6CD5, + 3949: 0x6CE1, + 3950: 0x70F9, + 3951: 0x7832, + 3952: 0x7E2B, + 3953: 0x80DE, + 3954: 0x82B3, + 3955: 0x840C, + 3956: 0x84EC, + 3957: 0x8702, + 3958: 0x8912, + 3959: 0x8A2A, + 3960: 0x8C4A, + 3961: 0x90A6, + 3962: 0x92D2, + 3963: 0x98FD, + 3964: 0x9CF3, + 3965: 0x9D6C, + 3966: 0x4E4F, + 3967: 0x4EA1, + 3968: 0x508D, + 3969: 0x5256, + 3970: 0x574A, + 3971: 0x59A8, + 3972: 0x5E3D, + 3973: 0x5FD8, + 3974: 0x5FD9, + 3975: 0x623F, + 3976: 0x66B4, + 3977: 0x671B, + 3978: 0x67D0, + 3979: 0x68D2, + 3980: 0x5192, + 3981: 0x7D21, + 3982: 0x80AA, + 3983: 0x81A8, + 3984: 0x8B00, + 3985: 0x8C8C, + 3986: 0x8CBF, + 3987: 0x927E, + 3988: 0x9632, + 3989: 0x5420, + 3990: 0x982C, + 3991: 0x5317, + 3992: 0x50D5, + 3993: 0x535C, + 3994: 0x58A8, + 3995: 0x64B2, + 3996: 0x6734, + 3997: 0x7267, + 3998: 0x7766, + 3999: 0x7A46, + 4000: 0x91E6, + 4001: 0x52C3, + 4002: 0x6CA1, + 4003: 0x6B86, + 4004: 0x5800, + 4005: 0x5E4C, + 4006: 0x5954, + 4007: 0x672C, + 4008: 0x7FFB, + 4009: 0x51E1, + 4010: 0x76C6, + 4011: 0x6469, + 4012: 0x78E8, + 4013: 0x9B54, + 4014: 0x9EBB, + 4015: 0x57CB, + 4016: 0x59B9, + 4017: 0x6627, + 4018: 0x679A, + 4019: 0x6BCE, + 4020: 0x54E9, + 4021: 0x69D9, + 4022: 0x5E55, + 4023: 0x819C, + 4024: 0x6795, + 4025: 0x9BAA, + 4026: 0x67FE, + 4027: 0x9C52, + 4028: 0x685D, + 4029: 0x4EA6, + 4030: 0x4FE3, + 4031: 0x53C8, + 4032: 0x62B9, + 4033: 0x672B, + 4034: 0x6CAB, + 4035: 0x8FC4, + 4036: 0x4FAD, + 4037: 0x7E6D, + 4038: 0x9EBF, + 4039: 0x4E07, + 4040: 0x6162, + 4041: 0x6E80, + 4042: 0x6F2B, + 4043: 0x8513, + 4044: 0x5473, + 4045: 0x672A, + 4046: 0x9B45, + 4047: 0x5DF3, + 4048: 0x7B95, + 4049: 0x5CAC, + 4050: 0x5BC6, + 4051: 0x871C, + 4052: 0x6E4A, + 4053: 0x84D1, + 4054: 0x7A14, + 4055: 0x8108, + 4056: 0x5999, + 4057: 0x7C8D, + 4058: 0x6C11, + 4059: 0x7720, + 4060: 0x52D9, + 4061: 0x5922, + 4062: 0x7121, + 4063: 0x725F, + 4064: 0x77DB, + 4065: 0x9727, + 4066: 0x9D61, + 4067: 0x690B, + 4068: 0x5A7F, + 4069: 0x5A18, + 4070: 0x51A5, + 4071: 0x540D, + 4072: 0x547D, + 4073: 0x660E, + 4074: 0x76DF, + 4075: 0x8FF7, + 4076: 0x9298, + 4077: 0x9CF4, + 4078: 0x59EA, + 4079: 0x725D, + 4080: 0x6EC5, + 4081: 0x514D, + 4082: 0x68C9, + 4083: 0x7DBF, + 4084: 0x7DEC, + 4085: 0x9762, + 4086: 0x9EBA, + 4087: 0x6478, + 4088: 0x6A21, + 4089: 0x8302, + 4090: 0x5984, + 4091: 0x5B5F, + 4092: 0x6BDB, + 4093: 0x731B, + 4094: 0x76F2, + 4095: 0x7DB2, + 4096: 0x8017, + 4097: 0x8499, + 4098: 0x5132, + 4099: 0x6728, + 4100: 0x9ED9, + 4101: 0x76EE, + 4102: 0x6762, + 4103: 0x52FF, + 4104: 0x9905, + 4105: 0x5C24, + 4106: 0x623B, + 4107: 0x7C7E, + 4108: 0x8CB0, + 4109: 0x554F, + 4110: 0x60B6, + 4111: 0x7D0B, + 4112: 0x9580, + 4113: 0x5301, + 4114: 0x4E5F, + 4115: 0x51B6, + 4116: 0x591C, + 4117: 0x723A, + 4118: 0x8036, + 4119: 0x91CE, + 4120: 0x5F25, + 4121: 0x77E2, + 4122: 0x5384, + 4123: 0x5F79, + 4124: 0x7D04, + 4125: 0x85AC, + 4126: 0x8A33, + 4127: 0x8E8D, + 4128: 0x9756, + 4129: 0x67F3, + 4130: 0x85AE, + 4131: 0x9453, + 4132: 0x6109, + 4133: 0x6108, + 4134: 0x6CB9, + 4135: 0x7652, + 4136: 0x8AED, + 4137: 0x8F38, + 4138: 0x552F, + 4139: 0x4F51, + 4140: 0x512A, + 4141: 0x52C7, + 4142: 0x53CB, + 4143: 0x5BA5, + 4144: 0x5E7D, + 4145: 0x60A0, + 4146: 0x6182, + 4147: 0x63D6, + 4148: 0x6709, + 4149: 0x67DA, + 4150: 0x6E67, + 4151: 0x6D8C, + 4152: 0x7336, + 4153: 0x7337, + 4154: 0x7531, + 4155: 0x7950, + 4156: 0x88D5, + 4157: 0x8A98, + 4158: 0x904A, + 4159: 0x9091, + 4160: 0x90F5, + 4161: 0x96C4, + 4162: 0x878D, + 4163: 0x5915, + 4164: 0x4E88, + 4165: 0x4F59, + 4166: 0x4E0E, + 4167: 0x8A89, + 4168: 0x8F3F, + 4169: 0x9810, + 4170: 0x50AD, + 4171: 0x5E7C, + 4172: 0x5996, + 4173: 0x5BB9, + 4174: 0x5EB8, + 4175: 0x63DA, + 4176: 0x63FA, + 4177: 0x64C1, + 4178: 0x66DC, + 4179: 0x694A, + 4180: 0x69D8, + 4181: 0x6D0B, + 4182: 0x6EB6, + 4183: 0x7194, + 4184: 0x7528, + 4185: 0x7AAF, + 4186: 0x7F8A, + 4187: 0x8000, + 4188: 0x8449, + 4189: 0x84C9, + 4190: 0x8981, + 4191: 0x8B21, + 4192: 0x8E0A, + 4193: 0x9065, + 4194: 0x967D, + 4195: 0x990A, + 4196: 0x617E, + 4197: 0x6291, + 4198: 0x6B32, + 4199: 0x6C83, + 4200: 0x6D74, + 4201: 0x7FCC, + 4202: 0x7FFC, + 4203: 0x6DC0, + 4204: 0x7F85, + 4205: 0x87BA, + 4206: 0x88F8, + 4207: 0x6765, + 4208: 0x83B1, + 4209: 0x983C, + 4210: 0x96F7, + 4211: 0x6D1B, + 4212: 0x7D61, + 4213: 0x843D, + 4214: 0x916A, + 4215: 0x4E71, + 4216: 0x5375, + 4217: 0x5D50, + 4218: 0x6B04, + 4219: 0x6FEB, + 4220: 0x85CD, + 4221: 0x862D, + 4222: 0x89A7, + 4223: 0x5229, + 4224: 0x540F, + 4225: 0x5C65, + 4226: 0x674E, + 4227: 0x68A8, + 4228: 0x7406, + 4229: 0x7483, + 4230: 0x75E2, + 4231: 0x88CF, + 4232: 0x88E1, + 4233: 0x91CC, + 4234: 0x96E2, + 4235: 0x9678, + 4236: 0x5F8B, + 4237: 0x7387, + 4238: 0x7ACB, + 4239: 0x844E, + 4240: 0x63A0, + 4241: 0x7565, + 4242: 0x5289, + 4243: 0x6D41, + 4244: 0x6E9C, + 4245: 0x7409, + 4246: 0x7559, + 4247: 0x786B, + 4248: 0x7C92, + 4249: 0x9686, + 4250: 0x7ADC, + 4251: 0x9F8D, + 4252: 0x4FB6, + 4253: 0x616E, + 4254: 0x65C5, + 4255: 0x865C, + 4256: 0x4E86, + 4257: 0x4EAE, + 4258: 0x50DA, + 4259: 0x4E21, + 4260: 0x51CC, + 4261: 0x5BEE, + 4262: 0x6599, + 4263: 0x6881, + 4264: 0x6DBC, + 4265: 0x731F, + 4266: 0x7642, + 4267: 0x77AD, + 4268: 0x7A1C, + 4269: 0x7CE7, + 4270: 0x826F, + 4271: 0x8AD2, + 4272: 0x907C, + 4273: 0x91CF, + 4274: 0x9675, + 4275: 0x9818, + 4276: 0x529B, + 4277: 0x7DD1, + 4278: 0x502B, + 4279: 0x5398, + 4280: 0x6797, + 4281: 0x6DCB, + 4282: 0x71D0, + 4283: 0x7433, + 4284: 0x81E8, + 4285: 0x8F2A, + 4286: 0x96A3, + 4287: 0x9C57, + 4288: 0x9E9F, + 4289: 0x7460, + 4290: 0x5841, + 4291: 0x6D99, + 4292: 0x7D2F, + 4293: 0x985E, + 4294: 0x4EE4, + 4295: 0x4F36, + 4296: 0x4F8B, + 4297: 0x51B7, + 4298: 0x52B1, + 4299: 0x5DBA, + 4300: 0x601C, + 4301: 0x73B2, + 4302: 0x793C, + 4303: 0x82D3, + 4304: 0x9234, + 4305: 0x96B7, + 4306: 0x96F6, + 4307: 0x970A, + 4308: 0x9E97, + 4309: 0x9F62, + 4310: 0x66A6, + 4311: 0x6B74, + 4312: 0x5217, + 4313: 0x52A3, + 4314: 0x70C8, + 4315: 0x88C2, + 4316: 0x5EC9, + 4317: 0x604B, + 4318: 0x6190, + 4319: 0x6F23, + 4320: 0x7149, + 4321: 0x7C3E, + 4322: 0x7DF4, + 4323: 0x806F, + 4324: 0x84EE, + 4325: 0x9023, + 4326: 0x932C, + 4327: 0x5442, + 4328: 0x9B6F, + 4329: 0x6AD3, + 4330: 0x7089, + 4331: 0x8CC2, + 4332: 0x8DEF, + 4333: 0x9732, + 4334: 0x52B4, + 4335: 0x5A41, + 4336: 0x5ECA, + 4337: 0x5F04, + 4338: 0x6717, + 4339: 0x697C, + 4340: 0x6994, + 4341: 0x6D6A, + 4342: 0x6F0F, + 4343: 0x7262, + 4344: 0x72FC, + 4345: 0x7BED, + 4346: 0x8001, + 4347: 0x807E, + 4348: 0x874B, + 4349: 0x90CE, + 4350: 0x516D, + 4351: 0x9E93, + 4352: 0x7984, + 4353: 0x808B, + 4354: 0x9332, + 4355: 0x8AD6, + 4356: 0x502D, + 4357: 0x548C, + 4358: 0x8A71, + 4359: 0x6B6A, + 4360: 0x8CC4, + 4361: 0x8107, + 4362: 0x60D1, + 4363: 0x67A0, + 4364: 0x9DF2, + 4365: 0x4E99, + 4366: 0x4E98, + 4367: 0x9C10, + 4368: 0x8A6B, + 4369: 0x85C1, + 4370: 0x8568, + 4371: 0x6900, + 4372: 0x6E7E, + 4373: 0x7897, + 4374: 0x8155, + 4418: 0x5F0C, + 4419: 0x4E10, + 4420: 0x4E15, + 4421: 0x4E2A, + 4422: 0x4E31, + 4423: 0x4E36, + 4424: 0x4E3C, + 4425: 0x4E3F, + 4426: 0x4E42, + 4427: 0x4E56, + 4428: 0x4E58, + 4429: 0x4E82, + 4430: 0x4E85, + 4431: 0x8C6B, + 4432: 0x4E8A, + 4433: 0x8212, + 4434: 0x5F0D, + 4435: 0x4E8E, + 4436: 0x4E9E, + 4437: 0x4E9F, + 4438: 0x4EA0, + 4439: 0x4EA2, + 4440: 0x4EB0, + 4441: 0x4EB3, + 4442: 0x4EB6, + 4443: 0x4ECE, + 4444: 0x4ECD, + 4445: 0x4EC4, + 4446: 0x4EC6, + 4447: 0x4EC2, + 4448: 0x4ED7, + 4449: 0x4EDE, + 4450: 0x4EED, + 4451: 0x4EDF, + 4452: 0x4EF7, + 4453: 0x4F09, + 4454: 0x4F5A, + 4455: 0x4F30, + 4456: 0x4F5B, + 4457: 0x4F5D, + 4458: 0x4F57, + 4459: 0x4F47, + 4460: 0x4F76, + 4461: 0x4F88, + 4462: 0x4F8F, + 4463: 0x4F98, + 4464: 0x4F7B, + 4465: 0x4F69, + 4466: 0x4F70, + 4467: 0x4F91, + 4468: 0x4F6F, + 4469: 0x4F86, + 4470: 0x4F96, + 4471: 0x5118, + 4472: 0x4FD4, + 4473: 0x4FDF, + 4474: 0x4FCE, + 4475: 0x4FD8, + 4476: 0x4FDB, + 4477: 0x4FD1, + 4478: 0x4FDA, + 4479: 0x4FD0, + 4480: 0x4FE4, + 4481: 0x4FE5, + 4482: 0x501A, + 4483: 0x5028, + 4484: 0x5014, + 4485: 0x502A, + 4486: 0x5025, + 4487: 0x5005, + 4488: 0x4F1C, + 4489: 0x4FF6, + 4490: 0x5021, + 4491: 0x5029, + 4492: 0x502C, + 4493: 0x4FFE, + 4494: 0x4FEF, + 4495: 0x5011, + 4496: 0x5006, + 4497: 0x5043, + 4498: 0x5047, + 4499: 0x6703, + 4500: 0x5055, + 4501: 0x5050, + 4502: 0x5048, + 4503: 0x505A, + 4504: 0x5056, + 4505: 0x506C, + 4506: 0x5078, + 4507: 0x5080, + 4508: 0x509A, + 4509: 0x5085, + 4510: 0x50B4, + 4511: 0x50B2, + 4512: 0x50C9, + 4513: 0x50CA, + 4514: 0x50B3, + 4515: 0x50C2, + 4516: 0x50D6, + 4517: 0x50DE, + 4518: 0x50E5, + 4519: 0x50ED, + 4520: 0x50E3, + 4521: 0x50EE, + 4522: 0x50F9, + 4523: 0x50F5, + 4524: 0x5109, + 4525: 0x5101, + 4526: 0x5102, + 4527: 0x5116, + 4528: 0x5115, + 4529: 0x5114, + 4530: 0x511A, + 4531: 0x5121, + 4532: 0x513A, + 4533: 0x5137, + 4534: 0x513C, + 4535: 0x513B, + 4536: 0x513F, + 4537: 0x5140, + 4538: 0x5152, + 4539: 0x514C, + 4540: 0x5154, + 4541: 0x5162, + 4542: 0x7AF8, + 4543: 0x5169, + 4544: 0x516A, + 4545: 0x516E, + 4546: 0x5180, + 4547: 0x5182, + 4548: 0x56D8, + 4549: 0x518C, + 4550: 0x5189, + 4551: 0x518F, + 4552: 0x5191, + 4553: 0x5193, + 4554: 0x5195, + 4555: 0x5196, + 4556: 0x51A4, + 4557: 0x51A6, + 4558: 0x51A2, + 4559: 0x51A9, + 4560: 0x51AA, + 4561: 0x51AB, + 4562: 0x51B3, + 4563: 0x51B1, + 4564: 0x51B2, + 4565: 0x51B0, + 4566: 0x51B5, + 4567: 0x51BD, + 4568: 0x51C5, + 4569: 0x51C9, + 4570: 0x51DB, + 4571: 0x51E0, + 4572: 0x8655, + 4573: 0x51E9, + 4574: 0x51ED, + 4575: 0x51F0, + 4576: 0x51F5, + 4577: 0x51FE, + 4578: 0x5204, + 4579: 0x520B, + 4580: 0x5214, + 4581: 0x520E, + 4582: 0x5227, + 4583: 0x522A, + 4584: 0x522E, + 4585: 0x5233, + 4586: 0x5239, + 4587: 0x524F, + 4588: 0x5244, + 4589: 0x524B, + 4590: 0x524C, + 4591: 0x525E, + 4592: 0x5254, + 4593: 0x526A, + 4594: 0x5274, + 4595: 0x5269, + 4596: 0x5273, + 4597: 0x527F, + 4598: 0x527D, + 4599: 0x528D, + 4600: 0x5294, + 4601: 0x5292, + 4602: 0x5271, + 4603: 0x5288, + 4604: 0x5291, + 4605: 0x8FA8, + 4606: 0x8FA7, + 4607: 0x52AC, + 4608: 0x52AD, + 4609: 0x52BC, + 4610: 0x52B5, + 4611: 0x52C1, + 4612: 0x52CD, + 4613: 0x52D7, + 4614: 0x52DE, + 4615: 0x52E3, + 4616: 0x52E6, + 4617: 0x98ED, + 4618: 0x52E0, + 4619: 0x52F3, + 4620: 0x52F5, + 4621: 0x52F8, + 4622: 0x52F9, + 4623: 0x5306, + 4624: 0x5308, + 4625: 0x7538, + 4626: 0x530D, + 4627: 0x5310, + 4628: 0x530F, + 4629: 0x5315, + 4630: 0x531A, + 4631: 0x5323, + 4632: 0x532F, + 4633: 0x5331, + 4634: 0x5333, + 4635: 0x5338, + 4636: 0x5340, + 4637: 0x5346, + 4638: 0x5345, + 4639: 0x4E17, + 4640: 0x5349, + 4641: 0x534D, + 4642: 0x51D6, + 4643: 0x535E, + 4644: 0x5369, + 4645: 0x536E, + 4646: 0x5918, + 4647: 0x537B, + 4648: 0x5377, + 4649: 0x5382, + 4650: 0x5396, + 4651: 0x53A0, + 4652: 0x53A6, + 4653: 0x53A5, + 4654: 0x53AE, + 4655: 0x53B0, + 4656: 0x53B6, + 4657: 0x53C3, + 4658: 0x7C12, + 4659: 0x96D9, + 4660: 0x53DF, + 4661: 0x66FC, + 4662: 0x71EE, + 4663: 0x53EE, + 4664: 0x53E8, + 4665: 0x53ED, + 4666: 0x53FA, + 4667: 0x5401, + 4668: 0x543D, + 4669: 0x5440, + 4670: 0x542C, + 4671: 0x542D, + 4672: 0x543C, + 4673: 0x542E, + 4674: 0x5436, + 4675: 0x5429, + 4676: 0x541D, + 4677: 0x544E, + 4678: 0x548F, + 4679: 0x5475, + 4680: 0x548E, + 4681: 0x545F, + 4682: 0x5471, + 4683: 0x5477, + 4684: 0x5470, + 4685: 0x5492, + 4686: 0x547B, + 4687: 0x5480, + 4688: 0x5476, + 4689: 0x5484, + 4690: 0x5490, + 4691: 0x5486, + 4692: 0x54C7, + 4693: 0x54A2, + 4694: 0x54B8, + 4695: 0x54A5, + 4696: 0x54AC, + 4697: 0x54C4, + 4698: 0x54C8, + 4699: 0x54A8, + 4700: 0x54AB, + 4701: 0x54C2, + 4702: 0x54A4, + 4703: 0x54BE, + 4704: 0x54BC, + 4705: 0x54D8, + 4706: 0x54E5, + 4707: 0x54E6, + 4708: 0x550F, + 4709: 0x5514, + 4710: 0x54FD, + 4711: 0x54EE, + 4712: 0x54ED, + 4713: 0x54FA, + 4714: 0x54E2, + 4715: 0x5539, + 4716: 0x5540, + 4717: 0x5563, + 4718: 0x554C, + 4719: 0x552E, + 4720: 0x555C, + 4721: 0x5545, + 4722: 0x5556, + 4723: 0x5557, + 4724: 0x5538, + 4725: 0x5533, + 4726: 0x555D, + 4727: 0x5599, + 4728: 0x5580, + 4729: 0x54AF, + 4730: 0x558A, + 4731: 0x559F, + 4732: 0x557B, + 4733: 0x557E, + 4734: 0x5598, + 4735: 0x559E, + 4736: 0x55AE, + 4737: 0x557C, + 4738: 0x5583, + 4739: 0x55A9, + 4740: 0x5587, + 4741: 0x55A8, + 4742: 0x55DA, + 4743: 0x55C5, + 4744: 0x55DF, + 4745: 0x55C4, + 4746: 0x55DC, + 4747: 0x55E4, + 4748: 0x55D4, + 4749: 0x5614, + 4750: 0x55F7, + 4751: 0x5616, + 4752: 0x55FE, + 4753: 0x55FD, + 4754: 0x561B, + 4755: 0x55F9, + 4756: 0x564E, + 4757: 0x5650, + 4758: 0x71DF, + 4759: 0x5634, + 4760: 0x5636, + 4761: 0x5632, + 4762: 0x5638, + 4763: 0x566B, + 4764: 0x5664, + 4765: 0x562F, + 4766: 0x566C, + 4767: 0x566A, + 4768: 0x5686, + 4769: 0x5680, + 4770: 0x568A, + 4771: 0x56A0, + 4772: 0x5694, + 4773: 0x568F, + 4774: 0x56A5, + 4775: 0x56AE, + 4776: 0x56B6, + 4777: 0x56B4, + 4778: 0x56C2, + 4779: 0x56BC, + 4780: 0x56C1, + 4781: 0x56C3, + 4782: 0x56C0, + 4783: 0x56C8, + 4784: 0x56CE, + 4785: 0x56D1, + 4786: 0x56D3, + 4787: 0x56D7, + 4788: 0x56EE, + 4789: 0x56F9, + 4790: 0x5700, + 4791: 0x56FF, + 4792: 0x5704, + 4793: 0x5709, + 4794: 0x5708, + 4795: 0x570B, + 4796: 0x570D, + 4797: 0x5713, + 4798: 0x5718, + 4799: 0x5716, + 4800: 0x55C7, + 4801: 0x571C, + 4802: 0x5726, + 4803: 0x5737, + 4804: 0x5738, + 4805: 0x574E, + 4806: 0x573B, + 4807: 0x5740, + 4808: 0x574F, + 4809: 0x5769, + 4810: 0x57C0, + 4811: 0x5788, + 4812: 0x5761, + 4813: 0x577F, + 4814: 0x5789, + 4815: 0x5793, + 4816: 0x57A0, + 4817: 0x57B3, + 4818: 0x57A4, + 4819: 0x57AA, + 4820: 0x57B0, + 4821: 0x57C3, + 4822: 0x57C6, + 4823: 0x57D4, + 4824: 0x57D2, + 4825: 0x57D3, + 4826: 0x580A, + 4827: 0x57D6, + 4828: 0x57E3, + 4829: 0x580B, + 4830: 0x5819, + 4831: 0x581D, + 4832: 0x5872, + 4833: 0x5821, + 4834: 0x5862, + 4835: 0x584B, + 4836: 0x5870, + 4837: 0x6BC0, + 4838: 0x5852, + 4839: 0x583D, + 4840: 0x5879, + 4841: 0x5885, + 4842: 0x58B9, + 4843: 0x589F, + 4844: 0x58AB, + 4845: 0x58BA, + 4846: 0x58DE, + 4847: 0x58BB, + 4848: 0x58B8, + 4849: 0x58AE, + 4850: 0x58C5, + 4851: 0x58D3, + 4852: 0x58D1, + 4853: 0x58D7, + 4854: 0x58D9, + 4855: 0x58D8, + 4856: 0x58E5, + 4857: 0x58DC, + 4858: 0x58E4, + 4859: 0x58DF, + 4860: 0x58EF, + 4861: 0x58FA, + 4862: 0x58F9, + 4863: 0x58FB, + 4864: 0x58FC, + 4865: 0x58FD, + 4866: 0x5902, + 4867: 0x590A, + 4868: 0x5910, + 4869: 0x591B, + 4870: 0x68A6, + 4871: 0x5925, + 4872: 0x592C, + 4873: 0x592D, + 4874: 0x5932, + 4875: 0x5938, + 4876: 0x593E, + 4877: 0x7AD2, + 4878: 0x5955, + 4879: 0x5950, + 4880: 0x594E, + 4881: 0x595A, + 4882: 0x5958, + 4883: 0x5962, + 4884: 0x5960, + 4885: 0x5967, + 4886: 0x596C, + 4887: 0x5969, + 4888: 0x5978, + 4889: 0x5981, + 4890: 0x599D, + 4891: 0x4F5E, + 4892: 0x4FAB, + 4893: 0x59A3, + 4894: 0x59B2, + 4895: 0x59C6, + 4896: 0x59E8, + 4897: 0x59DC, + 4898: 0x598D, + 4899: 0x59D9, + 4900: 0x59DA, + 4901: 0x5A25, + 4902: 0x5A1F, + 4903: 0x5A11, + 4904: 0x5A1C, + 4905: 0x5A09, + 4906: 0x5A1A, + 4907: 0x5A40, + 4908: 0x5A6C, + 4909: 0x5A49, + 4910: 0x5A35, + 4911: 0x5A36, + 4912: 0x5A62, + 4913: 0x5A6A, + 4914: 0x5A9A, + 4915: 0x5ABC, + 4916: 0x5ABE, + 4917: 0x5ACB, + 4918: 0x5AC2, + 4919: 0x5ABD, + 4920: 0x5AE3, + 4921: 0x5AD7, + 4922: 0x5AE6, + 4923: 0x5AE9, + 4924: 0x5AD6, + 4925: 0x5AFA, + 4926: 0x5AFB, + 4927: 0x5B0C, + 4928: 0x5B0B, + 4929: 0x5B16, + 4930: 0x5B32, + 4931: 0x5AD0, + 4932: 0x5B2A, + 4933: 0x5B36, + 4934: 0x5B3E, + 4935: 0x5B43, + 4936: 0x5B45, + 4937: 0x5B40, + 4938: 0x5B51, + 4939: 0x5B55, + 4940: 0x5B5A, + 4941: 0x5B5B, + 4942: 0x5B65, + 4943: 0x5B69, + 4944: 0x5B70, + 4945: 0x5B73, + 4946: 0x5B75, + 4947: 0x5B78, + 4948: 0x6588, + 4949: 0x5B7A, + 4950: 0x5B80, + 4951: 0x5B83, + 4952: 0x5BA6, + 4953: 0x5BB8, + 4954: 0x5BC3, + 4955: 0x5BC7, + 4956: 0x5BC9, + 4957: 0x5BD4, + 4958: 0x5BD0, + 4959: 0x5BE4, + 4960: 0x5BE6, + 4961: 0x5BE2, + 4962: 0x5BDE, + 4963: 0x5BE5, + 4964: 0x5BEB, + 4965: 0x5BF0, + 4966: 0x5BF6, + 4967: 0x5BF3, + 4968: 0x5C05, + 4969: 0x5C07, + 4970: 0x5C08, + 4971: 0x5C0D, + 4972: 0x5C13, + 4973: 0x5C20, + 4974: 0x5C22, + 4975: 0x5C28, + 4976: 0x5C38, + 4977: 0x5C39, + 4978: 0x5C41, + 4979: 0x5C46, + 4980: 0x5C4E, + 4981: 0x5C53, + 4982: 0x5C50, + 4983: 0x5C4F, + 4984: 0x5B71, + 4985: 0x5C6C, + 4986: 0x5C6E, + 4987: 0x4E62, + 4988: 0x5C76, + 4989: 0x5C79, + 4990: 0x5C8C, + 4991: 0x5C91, + 4992: 0x5C94, + 4993: 0x599B, + 4994: 0x5CAB, + 4995: 0x5CBB, + 4996: 0x5CB6, + 4997: 0x5CBC, + 4998: 0x5CB7, + 4999: 0x5CC5, + 5000: 0x5CBE, + 5001: 0x5CC7, + 5002: 0x5CD9, + 5003: 0x5CE9, + 5004: 0x5CFD, + 5005: 0x5CFA, + 5006: 0x5CED, + 5007: 0x5D8C, + 5008: 0x5CEA, + 5009: 0x5D0B, + 5010: 0x5D15, + 5011: 0x5D17, + 5012: 0x5D5C, + 5013: 0x5D1F, + 5014: 0x5D1B, + 5015: 0x5D11, + 5016: 0x5D14, + 5017: 0x5D22, + 5018: 0x5D1A, + 5019: 0x5D19, + 5020: 0x5D18, + 5021: 0x5D4C, + 5022: 0x5D52, + 5023: 0x5D4E, + 5024: 0x5D4B, + 5025: 0x5D6C, + 5026: 0x5D73, + 5027: 0x5D76, + 5028: 0x5D87, + 5029: 0x5D84, + 5030: 0x5D82, + 5031: 0x5DA2, + 5032: 0x5D9D, + 5033: 0x5DAC, + 5034: 0x5DAE, + 5035: 0x5DBD, + 5036: 0x5D90, + 5037: 0x5DB7, + 5038: 0x5DBC, + 5039: 0x5DC9, + 5040: 0x5DCD, + 5041: 0x5DD3, + 5042: 0x5DD2, + 5043: 0x5DD6, + 5044: 0x5DDB, + 5045: 0x5DEB, + 5046: 0x5DF2, + 5047: 0x5DF5, + 5048: 0x5E0B, + 5049: 0x5E1A, + 5050: 0x5E19, + 5051: 0x5E11, + 5052: 0x5E1B, + 5053: 0x5E36, + 5054: 0x5E37, + 5055: 0x5E44, + 5056: 0x5E43, + 5057: 0x5E40, + 5058: 0x5E4E, + 5059: 0x5E57, + 5060: 0x5E54, + 5061: 0x5E5F, + 5062: 0x5E62, + 5063: 0x5E64, + 5064: 0x5E47, + 5065: 0x5E75, + 5066: 0x5E76, + 5067: 0x5E7A, + 5068: 0x9EBC, + 5069: 0x5E7F, + 5070: 0x5EA0, + 5071: 0x5EC1, + 5072: 0x5EC2, + 5073: 0x5EC8, + 5074: 0x5ED0, + 5075: 0x5ECF, + 5076: 0x5ED6, + 5077: 0x5EE3, + 5078: 0x5EDD, + 5079: 0x5EDA, + 5080: 0x5EDB, + 5081: 0x5EE2, + 5082: 0x5EE1, + 5083: 0x5EE8, + 5084: 0x5EE9, + 5085: 0x5EEC, + 5086: 0x5EF1, + 5087: 0x5EF3, + 5088: 0x5EF0, + 5089: 0x5EF4, + 5090: 0x5EF8, + 5091: 0x5EFE, + 5092: 0x5F03, + 5093: 0x5F09, + 5094: 0x5F5D, + 5095: 0x5F5C, + 5096: 0x5F0B, + 5097: 0x5F11, + 5098: 0x5F16, + 5099: 0x5F29, + 5100: 0x5F2D, + 5101: 0x5F38, + 5102: 0x5F41, + 5103: 0x5F48, + 5104: 0x5F4C, + 5105: 0x5F4E, + 5106: 0x5F2F, + 5107: 0x5F51, + 5108: 0x5F56, + 5109: 0x5F57, + 5110: 0x5F59, + 5111: 0x5F61, + 5112: 0x5F6D, + 5113: 0x5F73, + 5114: 0x5F77, + 5115: 0x5F83, + 5116: 0x5F82, + 5117: 0x5F7F, + 5118: 0x5F8A, + 5119: 0x5F88, + 5120: 0x5F91, + 5121: 0x5F87, + 5122: 0x5F9E, + 5123: 0x5F99, + 5124: 0x5F98, + 5125: 0x5FA0, + 5126: 0x5FA8, + 5127: 0x5FAD, + 5128: 0x5FBC, + 5129: 0x5FD6, + 5130: 0x5FFB, + 5131: 0x5FE4, + 5132: 0x5FF8, + 5133: 0x5FF1, + 5134: 0x5FDD, + 5135: 0x60B3, + 5136: 0x5FFF, + 5137: 0x6021, + 5138: 0x6060, + 5139: 0x6019, + 5140: 0x6010, + 5141: 0x6029, + 5142: 0x600E, + 5143: 0x6031, + 5144: 0x601B, + 5145: 0x6015, + 5146: 0x602B, + 5147: 0x6026, + 5148: 0x600F, + 5149: 0x603A, + 5150: 0x605A, + 5151: 0x6041, + 5152: 0x606A, + 5153: 0x6077, + 5154: 0x605F, + 5155: 0x604A, + 5156: 0x6046, + 5157: 0x604D, + 5158: 0x6063, + 5159: 0x6043, + 5160: 0x6064, + 5161: 0x6042, + 5162: 0x606C, + 5163: 0x606B, + 5164: 0x6059, + 5165: 0x6081, + 5166: 0x608D, + 5167: 0x60E7, + 5168: 0x6083, + 5169: 0x609A, + 5170: 0x6084, + 5171: 0x609B, + 5172: 0x6096, + 5173: 0x6097, + 5174: 0x6092, + 5175: 0x60A7, + 5176: 0x608B, + 5177: 0x60E1, + 5178: 0x60B8, + 5179: 0x60E0, + 5180: 0x60D3, + 5181: 0x60B4, + 5182: 0x5FF0, + 5183: 0x60BD, + 5184: 0x60C6, + 5185: 0x60B5, + 5186: 0x60D8, + 5187: 0x614D, + 5188: 0x6115, + 5189: 0x6106, + 5190: 0x60F6, + 5191: 0x60F7, + 5192: 0x6100, + 5193: 0x60F4, + 5194: 0x60FA, + 5195: 0x6103, + 5196: 0x6121, + 5197: 0x60FB, + 5198: 0x60F1, + 5199: 0x610D, + 5200: 0x610E, + 5201: 0x6147, + 5202: 0x613E, + 5203: 0x6128, + 5204: 0x6127, + 5205: 0x614A, + 5206: 0x613F, + 5207: 0x613C, + 5208: 0x612C, + 5209: 0x6134, + 5210: 0x613D, + 5211: 0x6142, + 5212: 0x6144, + 5213: 0x6173, + 5214: 0x6177, + 5215: 0x6158, + 5216: 0x6159, + 5217: 0x615A, + 5218: 0x616B, + 5219: 0x6174, + 5220: 0x616F, + 5221: 0x6165, + 5222: 0x6171, + 5223: 0x615F, + 5224: 0x615D, + 5225: 0x6153, + 5226: 0x6175, + 5227: 0x6199, + 5228: 0x6196, + 5229: 0x6187, + 5230: 0x61AC, + 5231: 0x6194, + 5232: 0x619A, + 5233: 0x618A, + 5234: 0x6191, + 5235: 0x61AB, + 5236: 0x61AE, + 5237: 0x61CC, + 5238: 0x61CA, + 5239: 0x61C9, + 5240: 0x61F7, + 5241: 0x61C8, + 5242: 0x61C3, + 5243: 0x61C6, + 5244: 0x61BA, + 5245: 0x61CB, + 5246: 0x7F79, + 5247: 0x61CD, + 5248: 0x61E6, + 5249: 0x61E3, + 5250: 0x61F6, + 5251: 0x61FA, + 5252: 0x61F4, + 5253: 0x61FF, + 5254: 0x61FD, + 5255: 0x61FC, + 5256: 0x61FE, + 5257: 0x6200, + 5258: 0x6208, + 5259: 0x6209, + 5260: 0x620D, + 5261: 0x620C, + 5262: 0x6214, + 5263: 0x621B, + 5264: 0x621E, + 5265: 0x6221, + 5266: 0x622A, + 5267: 0x622E, + 5268: 0x6230, + 5269: 0x6232, + 5270: 0x6233, + 5271: 0x6241, + 5272: 0x624E, + 5273: 0x625E, + 5274: 0x6263, + 5275: 0x625B, + 5276: 0x6260, + 5277: 0x6268, + 5278: 0x627C, + 5279: 0x6282, + 5280: 0x6289, + 5281: 0x627E, + 5282: 0x6292, + 5283: 0x6293, + 5284: 0x6296, + 5285: 0x62D4, + 5286: 0x6283, + 5287: 0x6294, + 5288: 0x62D7, + 5289: 0x62D1, + 5290: 0x62BB, + 5291: 0x62CF, + 5292: 0x62FF, + 5293: 0x62C6, + 5294: 0x64D4, + 5295: 0x62C8, + 5296: 0x62DC, + 5297: 0x62CC, + 5298: 0x62CA, + 5299: 0x62C2, + 5300: 0x62C7, + 5301: 0x629B, + 5302: 0x62C9, + 5303: 0x630C, + 5304: 0x62EE, + 5305: 0x62F1, + 5306: 0x6327, + 5307: 0x6302, + 5308: 0x6308, + 5309: 0x62EF, + 5310: 0x62F5, + 5311: 0x6350, + 5312: 0x633E, + 5313: 0x634D, + 5314: 0x641C, + 5315: 0x634F, + 5316: 0x6396, + 5317: 0x638E, + 5318: 0x6380, + 5319: 0x63AB, + 5320: 0x6376, + 5321: 0x63A3, + 5322: 0x638F, + 5323: 0x6389, + 5324: 0x639F, + 5325: 0x63B5, + 5326: 0x636B, + 5327: 0x6369, + 5328: 0x63BE, + 5329: 0x63E9, + 5330: 0x63C0, + 5331: 0x63C6, + 5332: 0x63E3, + 5333: 0x63C9, + 5334: 0x63D2, + 5335: 0x63F6, + 5336: 0x63C4, + 5337: 0x6416, + 5338: 0x6434, + 5339: 0x6406, + 5340: 0x6413, + 5341: 0x6426, + 5342: 0x6436, + 5343: 0x651D, + 5344: 0x6417, + 5345: 0x6428, + 5346: 0x640F, + 5347: 0x6467, + 5348: 0x646F, + 5349: 0x6476, + 5350: 0x644E, + 5351: 0x652A, + 5352: 0x6495, + 5353: 0x6493, + 5354: 0x64A5, + 5355: 0x64A9, + 5356: 0x6488, + 5357: 0x64BC, + 5358: 0x64DA, + 5359: 0x64D2, + 5360: 0x64C5, + 5361: 0x64C7, + 5362: 0x64BB, + 5363: 0x64D8, + 5364: 0x64C2, + 5365: 0x64F1, + 5366: 0x64E7, + 5367: 0x8209, + 5368: 0x64E0, + 5369: 0x64E1, + 5370: 0x62AC, + 5371: 0x64E3, + 5372: 0x64EF, + 5373: 0x652C, + 5374: 0x64F6, + 5375: 0x64F4, + 5376: 0x64F2, + 5377: 0x64FA, + 5378: 0x6500, + 5379: 0x64FD, + 5380: 0x6518, + 5381: 0x651C, + 5382: 0x6505, + 5383: 0x6524, + 5384: 0x6523, + 5385: 0x652B, + 5386: 0x6534, + 5387: 0x6535, + 5388: 0x6537, + 5389: 0x6536, + 5390: 0x6538, + 5391: 0x754B, + 5392: 0x6548, + 5393: 0x6556, + 5394: 0x6555, + 5395: 0x654D, + 5396: 0x6558, + 5397: 0x655E, + 5398: 0x655D, + 5399: 0x6572, + 5400: 0x6578, + 5401: 0x6582, + 5402: 0x6583, + 5403: 0x8B8A, + 5404: 0x659B, + 5405: 0x659F, + 5406: 0x65AB, + 5407: 0x65B7, + 5408: 0x65C3, + 5409: 0x65C6, + 5410: 0x65C1, + 5411: 0x65C4, + 5412: 0x65CC, + 5413: 0x65D2, + 5414: 0x65DB, + 5415: 0x65D9, + 5416: 0x65E0, + 5417: 0x65E1, + 5418: 0x65F1, + 5419: 0x6772, + 5420: 0x660A, + 5421: 0x6603, + 5422: 0x65FB, + 5423: 0x6773, + 5424: 0x6635, + 5425: 0x6636, + 5426: 0x6634, + 5427: 0x661C, + 5428: 0x664F, + 5429: 0x6644, + 5430: 0x6649, + 5431: 0x6641, + 5432: 0x665E, + 5433: 0x665D, + 5434: 0x6664, + 5435: 0x6667, + 5436: 0x6668, + 5437: 0x665F, + 5438: 0x6662, + 5439: 0x6670, + 5440: 0x6683, + 5441: 0x6688, + 5442: 0x668E, + 5443: 0x6689, + 5444: 0x6684, + 5445: 0x6698, + 5446: 0x669D, + 5447: 0x66C1, + 5448: 0x66B9, + 5449: 0x66C9, + 5450: 0x66BE, + 5451: 0x66BC, + 5452: 0x66C4, + 5453: 0x66B8, + 5454: 0x66D6, + 5455: 0x66DA, + 5456: 0x66E0, + 5457: 0x663F, + 5458: 0x66E6, + 5459: 0x66E9, + 5460: 0x66F0, + 5461: 0x66F5, + 5462: 0x66F7, + 5463: 0x670F, + 5464: 0x6716, + 5465: 0x671E, + 5466: 0x6726, + 5467: 0x6727, + 5468: 0x9738, + 5469: 0x672E, + 5470: 0x673F, + 5471: 0x6736, + 5472: 0x6741, + 5473: 0x6738, + 5474: 0x6737, + 5475: 0x6746, + 5476: 0x675E, + 5477: 0x6760, + 5478: 0x6759, + 5479: 0x6763, + 5480: 0x6764, + 5481: 0x6789, + 5482: 0x6770, + 5483: 0x67A9, + 5484: 0x677C, + 5485: 0x676A, + 5486: 0x678C, + 5487: 0x678B, + 5488: 0x67A6, + 5489: 0x67A1, + 5490: 0x6785, + 5491: 0x67B7, + 5492: 0x67EF, + 5493: 0x67B4, + 5494: 0x67EC, + 5495: 0x67B3, + 5496: 0x67E9, + 5497: 0x67B8, + 5498: 0x67E4, + 5499: 0x67DE, + 5500: 0x67DD, + 5501: 0x67E2, + 5502: 0x67EE, + 5503: 0x67B9, + 5504: 0x67CE, + 5505: 0x67C6, + 5506: 0x67E7, + 5507: 0x6A9C, + 5508: 0x681E, + 5509: 0x6846, + 5510: 0x6829, + 5511: 0x6840, + 5512: 0x684D, + 5513: 0x6832, + 5514: 0x684E, + 5515: 0x68B3, + 5516: 0x682B, + 5517: 0x6859, + 5518: 0x6863, + 5519: 0x6877, + 5520: 0x687F, + 5521: 0x689F, + 5522: 0x688F, + 5523: 0x68AD, + 5524: 0x6894, + 5525: 0x689D, + 5526: 0x689B, + 5527: 0x6883, + 5528: 0x6AAE, + 5529: 0x68B9, + 5530: 0x6874, + 5531: 0x68B5, + 5532: 0x68A0, + 5533: 0x68BA, + 5534: 0x690F, + 5535: 0x688D, + 5536: 0x687E, + 5537: 0x6901, + 5538: 0x68CA, + 5539: 0x6908, + 5540: 0x68D8, + 5541: 0x6922, + 5542: 0x6926, + 5543: 0x68E1, + 5544: 0x690C, + 5545: 0x68CD, + 5546: 0x68D4, + 5547: 0x68E7, + 5548: 0x68D5, + 5549: 0x6936, + 5550: 0x6912, + 5551: 0x6904, + 5552: 0x68D7, + 5553: 0x68E3, + 5554: 0x6925, + 5555: 0x68F9, + 5556: 0x68E0, + 5557: 0x68EF, + 5558: 0x6928, + 5559: 0x692A, + 5560: 0x691A, + 5561: 0x6923, + 5562: 0x6921, + 5563: 0x68C6, + 5564: 0x6979, + 5565: 0x6977, + 5566: 0x695C, + 5567: 0x6978, + 5568: 0x696B, + 5569: 0x6954, + 5570: 0x697E, + 5571: 0x696E, + 5572: 0x6939, + 5573: 0x6974, + 5574: 0x693D, + 5575: 0x6959, + 5576: 0x6930, + 5577: 0x6961, + 5578: 0x695E, + 5579: 0x695D, + 5580: 0x6981, + 5581: 0x696A, + 5582: 0x69B2, + 5583: 0x69AE, + 5584: 0x69D0, + 5585: 0x69BF, + 5586: 0x69C1, + 5587: 0x69D3, + 5588: 0x69BE, + 5589: 0x69CE, + 5590: 0x5BE8, + 5591: 0x69CA, + 5592: 0x69DD, + 5593: 0x69BB, + 5594: 0x69C3, + 5595: 0x69A7, + 5596: 0x6A2E, + 5597: 0x6991, + 5598: 0x69A0, + 5599: 0x699C, + 5600: 0x6995, + 5601: 0x69B4, + 5602: 0x69DE, + 5603: 0x69E8, + 5604: 0x6A02, + 5605: 0x6A1B, + 5606: 0x69FF, + 5607: 0x6B0A, + 5608: 0x69F9, + 5609: 0x69F2, + 5610: 0x69E7, + 5611: 0x6A05, + 5612: 0x69B1, + 5613: 0x6A1E, + 5614: 0x69ED, + 5615: 0x6A14, + 5616: 0x69EB, + 5617: 0x6A0A, + 5618: 0x6A12, + 5619: 0x6AC1, + 5620: 0x6A23, + 5621: 0x6A13, + 5622: 0x6A44, + 5623: 0x6A0C, + 5624: 0x6A72, + 5625: 0x6A36, + 5626: 0x6A78, + 5627: 0x6A47, + 5628: 0x6A62, + 5629: 0x6A59, + 5630: 0x6A66, + 5631: 0x6A48, + 5632: 0x6A38, + 5633: 0x6A22, + 5634: 0x6A90, + 5635: 0x6A8D, + 5636: 0x6AA0, + 5637: 0x6A84, + 5638: 0x6AA2, + 5639: 0x6AA3, + 5640: 0x6A97, + 5641: 0x8617, + 5642: 0x6ABB, + 5643: 0x6AC3, + 5644: 0x6AC2, + 5645: 0x6AB8, + 5646: 0x6AB3, + 5647: 0x6AAC, + 5648: 0x6ADE, + 5649: 0x6AD1, + 5650: 0x6ADF, + 5651: 0x6AAA, + 5652: 0x6ADA, + 5653: 0x6AEA, + 5654: 0x6AFB, + 5655: 0x6B05, + 5656: 0x8616, + 5657: 0x6AFA, + 5658: 0x6B12, + 5659: 0x6B16, + 5660: 0x9B31, + 5661: 0x6B1F, + 5662: 0x6B38, + 5663: 0x6B37, + 5664: 0x76DC, + 5665: 0x6B39, + 5666: 0x98EE, + 5667: 0x6B47, + 5668: 0x6B43, + 5669: 0x6B49, + 5670: 0x6B50, + 5671: 0x6B59, + 5672: 0x6B54, + 5673: 0x6B5B, + 5674: 0x6B5F, + 5675: 0x6B61, + 5676: 0x6B78, + 5677: 0x6B79, + 5678: 0x6B7F, + 5679: 0x6B80, + 5680: 0x6B84, + 5681: 0x6B83, + 5682: 0x6B8D, + 5683: 0x6B98, + 5684: 0x6B95, + 5685: 0x6B9E, + 5686: 0x6BA4, + 5687: 0x6BAA, + 5688: 0x6BAB, + 5689: 0x6BAF, + 5690: 0x6BB2, + 5691: 0x6BB1, + 5692: 0x6BB3, + 5693: 0x6BB7, + 5694: 0x6BBC, + 5695: 0x6BC6, + 5696: 0x6BCB, + 5697: 0x6BD3, + 5698: 0x6BDF, + 5699: 0x6BEC, + 5700: 0x6BEB, + 5701: 0x6BF3, + 5702: 0x6BEF, + 5703: 0x9EBE, + 5704: 0x6C08, + 5705: 0x6C13, + 5706: 0x6C14, + 5707: 0x6C1B, + 5708: 0x6C24, + 5709: 0x6C23, + 5710: 0x6C5E, + 5711: 0x6C55, + 5712: 0x6C62, + 5713: 0x6C6A, + 5714: 0x6C82, + 5715: 0x6C8D, + 5716: 0x6C9A, + 5717: 0x6C81, + 5718: 0x6C9B, + 5719: 0x6C7E, + 5720: 0x6C68, + 5721: 0x6C73, + 5722: 0x6C92, + 5723: 0x6C90, + 5724: 0x6CC4, + 5725: 0x6CF1, + 5726: 0x6CD3, + 5727: 0x6CBD, + 5728: 0x6CD7, + 5729: 0x6CC5, + 5730: 0x6CDD, + 5731: 0x6CAE, + 5732: 0x6CB1, + 5733: 0x6CBE, + 5734: 0x6CBA, + 5735: 0x6CDB, + 5736: 0x6CEF, + 5737: 0x6CD9, + 5738: 0x6CEA, + 5739: 0x6D1F, + 5740: 0x884D, + 5741: 0x6D36, + 5742: 0x6D2B, + 5743: 0x6D3D, + 5744: 0x6D38, + 5745: 0x6D19, + 5746: 0x6D35, + 5747: 0x6D33, + 5748: 0x6D12, + 5749: 0x6D0C, + 5750: 0x6D63, + 5751: 0x6D93, + 5752: 0x6D64, + 5753: 0x6D5A, + 5754: 0x6D79, + 5755: 0x6D59, + 5756: 0x6D8E, + 5757: 0x6D95, + 5758: 0x6FE4, + 5759: 0x6D85, + 5760: 0x6DF9, + 5761: 0x6E15, + 5762: 0x6E0A, + 5763: 0x6DB5, + 5764: 0x6DC7, + 5765: 0x6DE6, + 5766: 0x6DB8, + 5767: 0x6DC6, + 5768: 0x6DEC, + 5769: 0x6DDE, + 5770: 0x6DCC, + 5771: 0x6DE8, + 5772: 0x6DD2, + 5773: 0x6DC5, + 5774: 0x6DFA, + 5775: 0x6DD9, + 5776: 0x6DE4, + 5777: 0x6DD5, + 5778: 0x6DEA, + 5779: 0x6DEE, + 5780: 0x6E2D, + 5781: 0x6E6E, + 5782: 0x6E2E, + 5783: 0x6E19, + 5784: 0x6E72, + 5785: 0x6E5F, + 5786: 0x6E3E, + 5787: 0x6E23, + 5788: 0x6E6B, + 5789: 0x6E2B, + 5790: 0x6E76, + 5791: 0x6E4D, + 5792: 0x6E1F, + 5793: 0x6E43, + 5794: 0x6E3A, + 5795: 0x6E4E, + 5796: 0x6E24, + 5797: 0x6EFF, + 5798: 0x6E1D, + 5799: 0x6E38, + 5800: 0x6E82, + 5801: 0x6EAA, + 5802: 0x6E98, + 5803: 0x6EC9, + 5804: 0x6EB7, + 5805: 0x6ED3, + 5806: 0x6EBD, + 5807: 0x6EAF, + 5808: 0x6EC4, + 5809: 0x6EB2, + 5810: 0x6ED4, + 5811: 0x6ED5, + 5812: 0x6E8F, + 5813: 0x6EA5, + 5814: 0x6EC2, + 5815: 0x6E9F, + 5816: 0x6F41, + 5817: 0x6F11, + 5818: 0x704C, + 5819: 0x6EEC, + 5820: 0x6EF8, + 5821: 0x6EFE, + 5822: 0x6F3F, + 5823: 0x6EF2, + 5824: 0x6F31, + 5825: 0x6EEF, + 5826: 0x6F32, + 5827: 0x6ECC, + 5828: 0x6F3E, + 5829: 0x6F13, + 5830: 0x6EF7, + 5831: 0x6F86, + 5832: 0x6F7A, + 5833: 0x6F78, + 5834: 0x6F81, + 5835: 0x6F80, + 5836: 0x6F6F, + 5837: 0x6F5B, + 5838: 0x6FF3, + 5839: 0x6F6D, + 5840: 0x6F82, + 5841: 0x6F7C, + 5842: 0x6F58, + 5843: 0x6F8E, + 5844: 0x6F91, + 5845: 0x6FC2, + 5846: 0x6F66, + 5847: 0x6FB3, + 5848: 0x6FA3, + 5849: 0x6FA1, + 5850: 0x6FA4, + 5851: 0x6FB9, + 5852: 0x6FC6, + 5853: 0x6FAA, + 5854: 0x6FDF, + 5855: 0x6FD5, + 5856: 0x6FEC, + 5857: 0x6FD4, + 5858: 0x6FD8, + 5859: 0x6FF1, + 5860: 0x6FEE, + 5861: 0x6FDB, + 5862: 0x7009, + 5863: 0x700B, + 5864: 0x6FFA, + 5865: 0x7011, + 5866: 0x7001, + 5867: 0x700F, + 5868: 0x6FFE, + 5869: 0x701B, + 5870: 0x701A, + 5871: 0x6F74, + 5872: 0x701D, + 5873: 0x7018, + 5874: 0x701F, + 5875: 0x7030, + 5876: 0x703E, + 5877: 0x7032, + 5878: 0x7051, + 5879: 0x7063, + 5880: 0x7099, + 5881: 0x7092, + 5882: 0x70AF, + 5883: 0x70F1, + 5884: 0x70AC, + 5885: 0x70B8, + 5886: 0x70B3, + 5887: 0x70AE, + 5888: 0x70DF, + 5889: 0x70CB, + 5890: 0x70DD, + 5891: 0x70D9, + 5892: 0x7109, + 5893: 0x70FD, + 5894: 0x711C, + 5895: 0x7119, + 5896: 0x7165, + 5897: 0x7155, + 5898: 0x7188, + 5899: 0x7166, + 5900: 0x7162, + 5901: 0x714C, + 5902: 0x7156, + 5903: 0x716C, + 5904: 0x718F, + 5905: 0x71FB, + 5906: 0x7184, + 5907: 0x7195, + 5908: 0x71A8, + 5909: 0x71AC, + 5910: 0x71D7, + 5911: 0x71B9, + 5912: 0x71BE, + 5913: 0x71D2, + 5914: 0x71C9, + 5915: 0x71D4, + 5916: 0x71CE, + 5917: 0x71E0, + 5918: 0x71EC, + 5919: 0x71E7, + 5920: 0x71F5, + 5921: 0x71FC, + 5922: 0x71F9, + 5923: 0x71FF, + 5924: 0x720D, + 5925: 0x7210, + 5926: 0x721B, + 5927: 0x7228, + 5928: 0x722D, + 5929: 0x722C, + 5930: 0x7230, + 5931: 0x7232, + 5932: 0x723B, + 5933: 0x723C, + 5934: 0x723F, + 5935: 0x7240, + 5936: 0x7246, + 5937: 0x724B, + 5938: 0x7258, + 5939: 0x7274, + 5940: 0x727E, + 5941: 0x7282, + 5942: 0x7281, + 5943: 0x7287, + 5944: 0x7292, + 5945: 0x7296, + 5946: 0x72A2, + 5947: 0x72A7, + 5948: 0x72B9, + 5949: 0x72B2, + 5950: 0x72C3, + 5951: 0x72C6, + 5952: 0x72C4, + 5953: 0x72CE, + 5954: 0x72D2, + 5955: 0x72E2, + 5956: 0x72E0, + 5957: 0x72E1, + 5958: 0x72F9, + 5959: 0x72F7, + 5960: 0x500F, + 5961: 0x7317, + 5962: 0x730A, + 5963: 0x731C, + 5964: 0x7316, + 5965: 0x731D, + 5966: 0x7334, + 5967: 0x732F, + 5968: 0x7329, + 5969: 0x7325, + 5970: 0x733E, + 5971: 0x734E, + 5972: 0x734F, + 5973: 0x9ED8, + 5974: 0x7357, + 5975: 0x736A, + 5976: 0x7368, + 5977: 0x7370, + 5978: 0x7378, + 5979: 0x7375, + 5980: 0x737B, + 5981: 0x737A, + 5982: 0x73C8, + 5983: 0x73B3, + 5984: 0x73CE, + 5985: 0x73BB, + 5986: 0x73C0, + 5987: 0x73E5, + 5988: 0x73EE, + 5989: 0x73DE, + 5990: 0x74A2, + 5991: 0x7405, + 5992: 0x746F, + 5993: 0x7425, + 5994: 0x73F8, + 5995: 0x7432, + 5996: 0x743A, + 5997: 0x7455, + 5998: 0x743F, + 5999: 0x745F, + 6000: 0x7459, + 6001: 0x7441, + 6002: 0x745C, + 6003: 0x7469, + 6004: 0x7470, + 6005: 0x7463, + 6006: 0x746A, + 6007: 0x7476, + 6008: 0x747E, + 6009: 0x748B, + 6010: 0x749E, + 6011: 0x74A7, + 6012: 0x74CA, + 6013: 0x74CF, + 6014: 0x74D4, + 6015: 0x73F1, + 6016: 0x74E0, + 6017: 0x74E3, + 6018: 0x74E7, + 6019: 0x74E9, + 6020: 0x74EE, + 6021: 0x74F2, + 6022: 0x74F0, + 6023: 0x74F1, + 6024: 0x74F8, + 6025: 0x74F7, + 6026: 0x7504, + 6027: 0x7503, + 6028: 0x7505, + 6029: 0x750C, + 6030: 0x750E, + 6031: 0x750D, + 6032: 0x7515, + 6033: 0x7513, + 6034: 0x751E, + 6035: 0x7526, + 6036: 0x752C, + 6037: 0x753C, + 6038: 0x7544, + 6039: 0x754D, + 6040: 0x754A, + 6041: 0x7549, + 6042: 0x755B, + 6043: 0x7546, + 6044: 0x755A, + 6045: 0x7569, + 6046: 0x7564, + 6047: 0x7567, + 6048: 0x756B, + 6049: 0x756D, + 6050: 0x7578, + 6051: 0x7576, + 6052: 0x7586, + 6053: 0x7587, + 6054: 0x7574, + 6055: 0x758A, + 6056: 0x7589, + 6057: 0x7582, + 6058: 0x7594, + 6059: 0x759A, + 6060: 0x759D, + 6061: 0x75A5, + 6062: 0x75A3, + 6063: 0x75C2, + 6064: 0x75B3, + 6065: 0x75C3, + 6066: 0x75B5, + 6067: 0x75BD, + 6068: 0x75B8, + 6069: 0x75BC, + 6070: 0x75B1, + 6071: 0x75CD, + 6072: 0x75CA, + 6073: 0x75D2, + 6074: 0x75D9, + 6075: 0x75E3, + 6076: 0x75DE, + 6077: 0x75FE, + 6078: 0x75FF, + 6079: 0x75FC, + 6080: 0x7601, + 6081: 0x75F0, + 6082: 0x75FA, + 6083: 0x75F2, + 6084: 0x75F3, + 6085: 0x760B, + 6086: 0x760D, + 6087: 0x7609, + 6088: 0x761F, + 6089: 0x7627, + 6090: 0x7620, + 6091: 0x7621, + 6092: 0x7622, + 6093: 0x7624, + 6094: 0x7634, + 6095: 0x7630, + 6096: 0x763B, + 6097: 0x7647, + 6098: 0x7648, + 6099: 0x7646, + 6100: 0x765C, + 6101: 0x7658, + 6102: 0x7661, + 6103: 0x7662, + 6104: 0x7668, + 6105: 0x7669, + 6106: 0x766A, + 6107: 0x7667, + 6108: 0x766C, + 6109: 0x7670, + 6110: 0x7672, + 6111: 0x7676, + 6112: 0x7678, + 6113: 0x767C, + 6114: 0x7680, + 6115: 0x7683, + 6116: 0x7688, + 6117: 0x768B, + 6118: 0x768E, + 6119: 0x7696, + 6120: 0x7693, + 6121: 0x7699, + 6122: 0x769A, + 6123: 0x76B0, + 6124: 0x76B4, + 6125: 0x76B8, + 6126: 0x76B9, + 6127: 0x76BA, + 6128: 0x76C2, + 6129: 0x76CD, + 6130: 0x76D6, + 6131: 0x76D2, + 6132: 0x76DE, + 6133: 0x76E1, + 6134: 0x76E5, + 6135: 0x76E7, + 6136: 0x76EA, + 6137: 0x862F, + 6138: 0x76FB, + 6139: 0x7708, + 6140: 0x7707, + 6141: 0x7704, + 6142: 0x7729, + 6143: 0x7724, + 6144: 0x771E, + 6145: 0x7725, + 6146: 0x7726, + 6147: 0x771B, + 6148: 0x7737, + 6149: 0x7738, + 6150: 0x7747, + 6151: 0x775A, + 6152: 0x7768, + 6153: 0x776B, + 6154: 0x775B, + 6155: 0x7765, + 6156: 0x777F, + 6157: 0x777E, + 6158: 0x7779, + 6159: 0x778E, + 6160: 0x778B, + 6161: 0x7791, + 6162: 0x77A0, + 6163: 0x779E, + 6164: 0x77B0, + 6165: 0x77B6, + 6166: 0x77B9, + 6167: 0x77BF, + 6168: 0x77BC, + 6169: 0x77BD, + 6170: 0x77BB, + 6171: 0x77C7, + 6172: 0x77CD, + 6173: 0x77D7, + 6174: 0x77DA, + 6175: 0x77DC, + 6176: 0x77E3, + 6177: 0x77EE, + 6178: 0x77FC, + 6179: 0x780C, + 6180: 0x7812, + 6181: 0x7926, + 6182: 0x7820, + 6183: 0x792A, + 6184: 0x7845, + 6185: 0x788E, + 6186: 0x7874, + 6187: 0x7886, + 6188: 0x787C, + 6189: 0x789A, + 6190: 0x788C, + 6191: 0x78A3, + 6192: 0x78B5, + 6193: 0x78AA, + 6194: 0x78AF, + 6195: 0x78D1, + 6196: 0x78C6, + 6197: 0x78CB, + 6198: 0x78D4, + 6199: 0x78BE, + 6200: 0x78BC, + 6201: 0x78C5, + 6202: 0x78CA, + 6203: 0x78EC, + 6204: 0x78E7, + 6205: 0x78DA, + 6206: 0x78FD, + 6207: 0x78F4, + 6208: 0x7907, + 6209: 0x7912, + 6210: 0x7911, + 6211: 0x7919, + 6212: 0x792C, + 6213: 0x792B, + 6214: 0x7940, + 6215: 0x7960, + 6216: 0x7957, + 6217: 0x795F, + 6218: 0x795A, + 6219: 0x7955, + 6220: 0x7953, + 6221: 0x797A, + 6222: 0x797F, + 6223: 0x798A, + 6224: 0x799D, + 6225: 0x79A7, + 6226: 0x9F4B, + 6227: 0x79AA, + 6228: 0x79AE, + 6229: 0x79B3, + 6230: 0x79B9, + 6231: 0x79BA, + 6232: 0x79C9, + 6233: 0x79D5, + 6234: 0x79E7, + 6235: 0x79EC, + 6236: 0x79E1, + 6237: 0x79E3, + 6238: 0x7A08, + 6239: 0x7A0D, + 6240: 0x7A18, + 6241: 0x7A19, + 6242: 0x7A20, + 6243: 0x7A1F, + 6244: 0x7980, + 6245: 0x7A31, + 6246: 0x7A3B, + 6247: 0x7A3E, + 6248: 0x7A37, + 6249: 0x7A43, + 6250: 0x7A57, + 6251: 0x7A49, + 6252: 0x7A61, + 6253: 0x7A62, + 6254: 0x7A69, + 6255: 0x9F9D, + 6256: 0x7A70, + 6257: 0x7A79, + 6258: 0x7A7D, + 6259: 0x7A88, + 6260: 0x7A97, + 6261: 0x7A95, + 6262: 0x7A98, + 6263: 0x7A96, + 6264: 0x7AA9, + 6265: 0x7AC8, + 6266: 0x7AB0, + 6267: 0x7AB6, + 6268: 0x7AC5, + 6269: 0x7AC4, + 6270: 0x7ABF, + 6271: 0x9083, + 6272: 0x7AC7, + 6273: 0x7ACA, + 6274: 0x7ACD, + 6275: 0x7ACF, + 6276: 0x7AD5, + 6277: 0x7AD3, + 6278: 0x7AD9, + 6279: 0x7ADA, + 6280: 0x7ADD, + 6281: 0x7AE1, + 6282: 0x7AE2, + 6283: 0x7AE6, + 6284: 0x7AED, + 6285: 0x7AF0, + 6286: 0x7B02, + 6287: 0x7B0F, + 6288: 0x7B0A, + 6289: 0x7B06, + 6290: 0x7B33, + 6291: 0x7B18, + 6292: 0x7B19, + 6293: 0x7B1E, + 6294: 0x7B35, + 6295: 0x7B28, + 6296: 0x7B36, + 6297: 0x7B50, + 6298: 0x7B7A, + 6299: 0x7B04, + 6300: 0x7B4D, + 6301: 0x7B0B, + 6302: 0x7B4C, + 6303: 0x7B45, + 6304: 0x7B75, + 6305: 0x7B65, + 6306: 0x7B74, + 6307: 0x7B67, + 6308: 0x7B70, + 6309: 0x7B71, + 6310: 0x7B6C, + 6311: 0x7B6E, + 6312: 0x7B9D, + 6313: 0x7B98, + 6314: 0x7B9F, + 6315: 0x7B8D, + 6316: 0x7B9C, + 6317: 0x7B9A, + 6318: 0x7B8B, + 6319: 0x7B92, + 6320: 0x7B8F, + 6321: 0x7B5D, + 6322: 0x7B99, + 6323: 0x7BCB, + 6324: 0x7BC1, + 6325: 0x7BCC, + 6326: 0x7BCF, + 6327: 0x7BB4, + 6328: 0x7BC6, + 6329: 0x7BDD, + 6330: 0x7BE9, + 6331: 0x7C11, + 6332: 0x7C14, + 6333: 0x7BE6, + 6334: 0x7BE5, + 6335: 0x7C60, + 6336: 0x7C00, + 6337: 0x7C07, + 6338: 0x7C13, + 6339: 0x7BF3, + 6340: 0x7BF7, + 6341: 0x7C17, + 6342: 0x7C0D, + 6343: 0x7BF6, + 6344: 0x7C23, + 6345: 0x7C27, + 6346: 0x7C2A, + 6347: 0x7C1F, + 6348: 0x7C37, + 6349: 0x7C2B, + 6350: 0x7C3D, + 6351: 0x7C4C, + 6352: 0x7C43, + 6353: 0x7C54, + 6354: 0x7C4F, + 6355: 0x7C40, + 6356: 0x7C50, + 6357: 0x7C58, + 6358: 0x7C5F, + 6359: 0x7C64, + 6360: 0x7C56, + 6361: 0x7C65, + 6362: 0x7C6C, + 6363: 0x7C75, + 6364: 0x7C83, + 6365: 0x7C90, + 6366: 0x7CA4, + 6367: 0x7CAD, + 6368: 0x7CA2, + 6369: 0x7CAB, + 6370: 0x7CA1, + 6371: 0x7CA8, + 6372: 0x7CB3, + 6373: 0x7CB2, + 6374: 0x7CB1, + 6375: 0x7CAE, + 6376: 0x7CB9, + 6377: 0x7CBD, + 6378: 0x7CC0, + 6379: 0x7CC5, + 6380: 0x7CC2, + 6381: 0x7CD8, + 6382: 0x7CD2, + 6383: 0x7CDC, + 6384: 0x7CE2, + 6385: 0x9B3B, + 6386: 0x7CEF, + 6387: 0x7CF2, + 6388: 0x7CF4, + 6389: 0x7CF6, + 6390: 0x7CFA, + 6391: 0x7D06, + 6392: 0x7D02, + 6393: 0x7D1C, + 6394: 0x7D15, + 6395: 0x7D0A, + 6396: 0x7D45, + 6397: 0x7D4B, + 6398: 0x7D2E, + 6399: 0x7D32, + 6400: 0x7D3F, + 6401: 0x7D35, + 6402: 0x7D46, + 6403: 0x7D73, + 6404: 0x7D56, + 6405: 0x7D4E, + 6406: 0x7D72, + 6407: 0x7D68, + 6408: 0x7D6E, + 6409: 0x7D4F, + 6410: 0x7D63, + 6411: 0x7D93, + 6412: 0x7D89, + 6413: 0x7D5B, + 6414: 0x7D8F, + 6415: 0x7D7D, + 6416: 0x7D9B, + 6417: 0x7DBA, + 6418: 0x7DAE, + 6419: 0x7DA3, + 6420: 0x7DB5, + 6421: 0x7DC7, + 6422: 0x7DBD, + 6423: 0x7DAB, + 6424: 0x7E3D, + 6425: 0x7DA2, + 6426: 0x7DAF, + 6427: 0x7DDC, + 6428: 0x7DB8, + 6429: 0x7D9F, + 6430: 0x7DB0, + 6431: 0x7DD8, + 6432: 0x7DDD, + 6433: 0x7DE4, + 6434: 0x7DDE, + 6435: 0x7DFB, + 6436: 0x7DF2, + 6437: 0x7DE1, + 6438: 0x7E05, + 6439: 0x7E0A, + 6440: 0x7E23, + 6441: 0x7E21, + 6442: 0x7E12, + 6443: 0x7E31, + 6444: 0x7E1F, + 6445: 0x7E09, + 6446: 0x7E0B, + 6447: 0x7E22, + 6448: 0x7E46, + 6449: 0x7E66, + 6450: 0x7E3B, + 6451: 0x7E35, + 6452: 0x7E39, + 6453: 0x7E43, + 6454: 0x7E37, + 6455: 0x7E32, + 6456: 0x7E3A, + 6457: 0x7E67, + 6458: 0x7E5D, + 6459: 0x7E56, + 6460: 0x7E5E, + 6461: 0x7E59, + 6462: 0x7E5A, + 6463: 0x7E79, + 6464: 0x7E6A, + 6465: 0x7E69, + 6466: 0x7E7C, + 6467: 0x7E7B, + 6468: 0x7E83, + 6469: 0x7DD5, + 6470: 0x7E7D, + 6471: 0x8FAE, + 6472: 0x7E7F, + 6473: 0x7E88, + 6474: 0x7E89, + 6475: 0x7E8C, + 6476: 0x7E92, + 6477: 0x7E90, + 6478: 0x7E93, + 6479: 0x7E94, + 6480: 0x7E96, + 6481: 0x7E8E, + 6482: 0x7E9B, + 6483: 0x7E9C, + 6484: 0x7F38, + 6485: 0x7F3A, + 6486: 0x7F45, + 6487: 0x7F4C, + 6488: 0x7F4D, + 6489: 0x7F4E, + 6490: 0x7F50, + 6491: 0x7F51, + 6492: 0x7F55, + 6493: 0x7F54, + 6494: 0x7F58, + 6495: 0x7F5F, + 6496: 0x7F60, + 6497: 0x7F68, + 6498: 0x7F69, + 6499: 0x7F67, + 6500: 0x7F78, + 6501: 0x7F82, + 6502: 0x7F86, + 6503: 0x7F83, + 6504: 0x7F88, + 6505: 0x7F87, + 6506: 0x7F8C, + 6507: 0x7F94, + 6508: 0x7F9E, + 6509: 0x7F9D, + 6510: 0x7F9A, + 6511: 0x7FA3, + 6512: 0x7FAF, + 6513: 0x7FB2, + 6514: 0x7FB9, + 6515: 0x7FAE, + 6516: 0x7FB6, + 6517: 0x7FB8, + 6518: 0x8B71, + 6519: 0x7FC5, + 6520: 0x7FC6, + 6521: 0x7FCA, + 6522: 0x7FD5, + 6523: 0x7FD4, + 6524: 0x7FE1, + 6525: 0x7FE6, + 6526: 0x7FE9, + 6527: 0x7FF3, + 6528: 0x7FF9, + 6529: 0x98DC, + 6530: 0x8006, + 6531: 0x8004, + 6532: 0x800B, + 6533: 0x8012, + 6534: 0x8018, + 6535: 0x8019, + 6536: 0x801C, + 6537: 0x8021, + 6538: 0x8028, + 6539: 0x803F, + 6540: 0x803B, + 6541: 0x804A, + 6542: 0x8046, + 6543: 0x8052, + 6544: 0x8058, + 6545: 0x805A, + 6546: 0x805F, + 6547: 0x8062, + 6548: 0x8068, + 6549: 0x8073, + 6550: 0x8072, + 6551: 0x8070, + 6552: 0x8076, + 6553: 0x8079, + 6554: 0x807D, + 6555: 0x807F, + 6556: 0x8084, + 6557: 0x8086, + 6558: 0x8085, + 6559: 0x809B, + 6560: 0x8093, + 6561: 0x809A, + 6562: 0x80AD, + 6563: 0x5190, + 6564: 0x80AC, + 6565: 0x80DB, + 6566: 0x80E5, + 6567: 0x80D9, + 6568: 0x80DD, + 6569: 0x80C4, + 6570: 0x80DA, + 6571: 0x80D6, + 6572: 0x8109, + 6573: 0x80EF, + 6574: 0x80F1, + 6575: 0x811B, + 6576: 0x8129, + 6577: 0x8123, + 6578: 0x812F, + 6579: 0x814B, + 6580: 0x968B, + 6581: 0x8146, + 6582: 0x813E, + 6583: 0x8153, + 6584: 0x8151, + 6585: 0x80FC, + 6586: 0x8171, + 6587: 0x816E, + 6588: 0x8165, + 6589: 0x8166, + 6590: 0x8174, + 6591: 0x8183, + 6592: 0x8188, + 6593: 0x818A, + 6594: 0x8180, + 6595: 0x8182, + 6596: 0x81A0, + 6597: 0x8195, + 6598: 0x81A4, + 6599: 0x81A3, + 6600: 0x815F, + 6601: 0x8193, + 6602: 0x81A9, + 6603: 0x81B0, + 6604: 0x81B5, + 6605: 0x81BE, + 6606: 0x81B8, + 6607: 0x81BD, + 6608: 0x81C0, + 6609: 0x81C2, + 6610: 0x81BA, + 6611: 0x81C9, + 6612: 0x81CD, + 6613: 0x81D1, + 6614: 0x81D9, + 6615: 0x81D8, + 6616: 0x81C8, + 6617: 0x81DA, + 6618: 0x81DF, + 6619: 0x81E0, + 6620: 0x81E7, + 6621: 0x81FA, + 6622: 0x81FB, + 6623: 0x81FE, + 6624: 0x8201, + 6625: 0x8202, + 6626: 0x8205, + 6627: 0x8207, + 6628: 0x820A, + 6629: 0x820D, + 6630: 0x8210, + 6631: 0x8216, + 6632: 0x8229, + 6633: 0x822B, + 6634: 0x8238, + 6635: 0x8233, + 6636: 0x8240, + 6637: 0x8259, + 6638: 0x8258, + 6639: 0x825D, + 6640: 0x825A, + 6641: 0x825F, + 6642: 0x8264, + 6643: 0x8262, + 6644: 0x8268, + 6645: 0x826A, + 6646: 0x826B, + 6647: 0x822E, + 6648: 0x8271, + 6649: 0x8277, + 6650: 0x8278, + 6651: 0x827E, + 6652: 0x828D, + 6653: 0x8292, + 6654: 0x82AB, + 6655: 0x829F, + 6656: 0x82BB, + 6657: 0x82AC, + 6658: 0x82E1, + 6659: 0x82E3, + 6660: 0x82DF, + 6661: 0x82D2, + 6662: 0x82F4, + 6663: 0x82F3, + 6664: 0x82FA, + 6665: 0x8393, + 6666: 0x8303, + 6667: 0x82FB, + 6668: 0x82F9, + 6669: 0x82DE, + 6670: 0x8306, + 6671: 0x82DC, + 6672: 0x8309, + 6673: 0x82D9, + 6674: 0x8335, + 6675: 0x8334, + 6676: 0x8316, + 6677: 0x8332, + 6678: 0x8331, + 6679: 0x8340, + 6680: 0x8339, + 6681: 0x8350, + 6682: 0x8345, + 6683: 0x832F, + 6684: 0x832B, + 6685: 0x8317, + 6686: 0x8318, + 6687: 0x8385, + 6688: 0x839A, + 6689: 0x83AA, + 6690: 0x839F, + 6691: 0x83A2, + 6692: 0x8396, + 6693: 0x8323, + 6694: 0x838E, + 6695: 0x8387, + 6696: 0x838A, + 6697: 0x837C, + 6698: 0x83B5, + 6699: 0x8373, + 6700: 0x8375, + 6701: 0x83A0, + 6702: 0x8389, + 6703: 0x83A8, + 6704: 0x83F4, + 6705: 0x8413, + 6706: 0x83EB, + 6707: 0x83CE, + 6708: 0x83FD, + 6709: 0x8403, + 6710: 0x83D8, + 6711: 0x840B, + 6712: 0x83C1, + 6713: 0x83F7, + 6714: 0x8407, + 6715: 0x83E0, + 6716: 0x83F2, + 6717: 0x840D, + 6718: 0x8422, + 6719: 0x8420, + 6720: 0x83BD, + 6721: 0x8438, + 6722: 0x8506, + 6723: 0x83FB, + 6724: 0x846D, + 6725: 0x842A, + 6726: 0x843C, + 6727: 0x855A, + 6728: 0x8484, + 6729: 0x8477, + 6730: 0x846B, + 6731: 0x84AD, + 6732: 0x846E, + 6733: 0x8482, + 6734: 0x8469, + 6735: 0x8446, + 6736: 0x842C, + 6737: 0x846F, + 6738: 0x8479, + 6739: 0x8435, + 6740: 0x84CA, + 6741: 0x8462, + 6742: 0x84B9, + 6743: 0x84BF, + 6744: 0x849F, + 6745: 0x84D9, + 6746: 0x84CD, + 6747: 0x84BB, + 6748: 0x84DA, + 6749: 0x84D0, + 6750: 0x84C1, + 6751: 0x84C6, + 6752: 0x84D6, + 6753: 0x84A1, + 6754: 0x8521, + 6755: 0x84FF, + 6756: 0x84F4, + 6757: 0x8517, + 6758: 0x8518, + 6759: 0x852C, + 6760: 0x851F, + 6761: 0x8515, + 6762: 0x8514, + 6763: 0x84FC, + 6764: 0x8540, + 6765: 0x8563, + 6766: 0x8558, + 6767: 0x8548, + 6768: 0x8541, + 6769: 0x8602, + 6770: 0x854B, + 6771: 0x8555, + 6772: 0x8580, + 6773: 0x85A4, + 6774: 0x8588, + 6775: 0x8591, + 6776: 0x858A, + 6777: 0x85A8, + 6778: 0x856D, + 6779: 0x8594, + 6780: 0x859B, + 6781: 0x85EA, + 6782: 0x8587, + 6783: 0x859C, + 6784: 0x8577, + 6785: 0x857E, + 6786: 0x8590, + 6787: 0x85C9, + 6788: 0x85BA, + 6789: 0x85CF, + 6790: 0x85B9, + 6791: 0x85D0, + 6792: 0x85D5, + 6793: 0x85DD, + 6794: 0x85E5, + 6795: 0x85DC, + 6796: 0x85F9, + 6797: 0x860A, + 6798: 0x8613, + 6799: 0x860B, + 6800: 0x85FE, + 6801: 0x85FA, + 6802: 0x8606, + 6803: 0x8622, + 6804: 0x861A, + 6805: 0x8630, + 6806: 0x863F, + 6807: 0x864D, + 6808: 0x4E55, + 6809: 0x8654, + 6810: 0x865F, + 6811: 0x8667, + 6812: 0x8671, + 6813: 0x8693, + 6814: 0x86A3, + 6815: 0x86A9, + 6816: 0x86AA, + 6817: 0x868B, + 6818: 0x868C, + 6819: 0x86B6, + 6820: 0x86AF, + 6821: 0x86C4, + 6822: 0x86C6, + 6823: 0x86B0, + 6824: 0x86C9, + 6825: 0x8823, + 6826: 0x86AB, + 6827: 0x86D4, + 6828: 0x86DE, + 6829: 0x86E9, + 6830: 0x86EC, + 6831: 0x86DF, + 6832: 0x86DB, + 6833: 0x86EF, + 6834: 0x8712, + 6835: 0x8706, + 6836: 0x8708, + 6837: 0x8700, + 6838: 0x8703, + 6839: 0x86FB, + 6840: 0x8711, + 6841: 0x8709, + 6842: 0x870D, + 6843: 0x86F9, + 6844: 0x870A, + 6845: 0x8734, + 6846: 0x873F, + 6847: 0x8737, + 6848: 0x873B, + 6849: 0x8725, + 6850: 0x8729, + 6851: 0x871A, + 6852: 0x8760, + 6853: 0x875F, + 6854: 0x8778, + 6855: 0x874C, + 6856: 0x874E, + 6857: 0x8774, + 6858: 0x8757, + 6859: 0x8768, + 6860: 0x876E, + 6861: 0x8759, + 6862: 0x8753, + 6863: 0x8763, + 6864: 0x876A, + 6865: 0x8805, + 6866: 0x87A2, + 6867: 0x879F, + 6868: 0x8782, + 6869: 0x87AF, + 6870: 0x87CB, + 6871: 0x87BD, + 6872: 0x87C0, + 6873: 0x87D0, + 6874: 0x96D6, + 6875: 0x87AB, + 6876: 0x87C4, + 6877: 0x87B3, + 6878: 0x87C7, + 6879: 0x87C6, + 6880: 0x87BB, + 6881: 0x87EF, + 6882: 0x87F2, + 6883: 0x87E0, + 6884: 0x880F, + 6885: 0x880D, + 6886: 0x87FE, + 6887: 0x87F6, + 6888: 0x87F7, + 6889: 0x880E, + 6890: 0x87D2, + 6891: 0x8811, + 6892: 0x8816, + 6893: 0x8815, + 6894: 0x8822, + 6895: 0x8821, + 6896: 0x8831, + 6897: 0x8836, + 6898: 0x8839, + 6899: 0x8827, + 6900: 0x883B, + 6901: 0x8844, + 6902: 0x8842, + 6903: 0x8852, + 6904: 0x8859, + 6905: 0x885E, + 6906: 0x8862, + 6907: 0x886B, + 6908: 0x8881, + 6909: 0x887E, + 6910: 0x889E, + 6911: 0x8875, + 6912: 0x887D, + 6913: 0x88B5, + 6914: 0x8872, + 6915: 0x8882, + 6916: 0x8897, + 6917: 0x8892, + 6918: 0x88AE, + 6919: 0x8899, + 6920: 0x88A2, + 6921: 0x888D, + 6922: 0x88A4, + 6923: 0x88B0, + 6924: 0x88BF, + 6925: 0x88B1, + 6926: 0x88C3, + 6927: 0x88C4, + 6928: 0x88D4, + 6929: 0x88D8, + 6930: 0x88D9, + 6931: 0x88DD, + 6932: 0x88F9, + 6933: 0x8902, + 6934: 0x88FC, + 6935: 0x88F4, + 6936: 0x88E8, + 6937: 0x88F2, + 6938: 0x8904, + 6939: 0x890C, + 6940: 0x890A, + 6941: 0x8913, + 6942: 0x8943, + 6943: 0x891E, + 6944: 0x8925, + 6945: 0x892A, + 6946: 0x892B, + 6947: 0x8941, + 6948: 0x8944, + 6949: 0x893B, + 6950: 0x8936, + 6951: 0x8938, + 6952: 0x894C, + 6953: 0x891D, + 6954: 0x8960, + 6955: 0x895E, + 6956: 0x8966, + 6957: 0x8964, + 6958: 0x896D, + 6959: 0x896A, + 6960: 0x896F, + 6961: 0x8974, + 6962: 0x8977, + 6963: 0x897E, + 6964: 0x8983, + 6965: 0x8988, + 6966: 0x898A, + 6967: 0x8993, + 6968: 0x8998, + 6969: 0x89A1, + 6970: 0x89A9, + 6971: 0x89A6, + 6972: 0x89AC, + 6973: 0x89AF, + 6974: 0x89B2, + 6975: 0x89BA, + 6976: 0x89BD, + 6977: 0x89BF, + 6978: 0x89C0, + 6979: 0x89DA, + 6980: 0x89DC, + 6981: 0x89DD, + 6982: 0x89E7, + 6983: 0x89F4, + 6984: 0x89F8, + 6985: 0x8A03, + 6986: 0x8A16, + 6987: 0x8A10, + 6988: 0x8A0C, + 6989: 0x8A1B, + 6990: 0x8A1D, + 6991: 0x8A25, + 6992: 0x8A36, + 6993: 0x8A41, + 6994: 0x8A5B, + 6995: 0x8A52, + 6996: 0x8A46, + 6997: 0x8A48, + 6998: 0x8A7C, + 6999: 0x8A6D, + 7000: 0x8A6C, + 7001: 0x8A62, + 7002: 0x8A85, + 7003: 0x8A82, + 7004: 0x8A84, + 7005: 0x8AA8, + 7006: 0x8AA1, + 7007: 0x8A91, + 7008: 0x8AA5, + 7009: 0x8AA6, + 7010: 0x8A9A, + 7011: 0x8AA3, + 7012: 0x8AC4, + 7013: 0x8ACD, + 7014: 0x8AC2, + 7015: 0x8ADA, + 7016: 0x8AEB, + 7017: 0x8AF3, + 7018: 0x8AE7, + 7019: 0x8AE4, + 7020: 0x8AF1, + 7021: 0x8B14, + 7022: 0x8AE0, + 7023: 0x8AE2, + 7024: 0x8AF7, + 7025: 0x8ADE, + 7026: 0x8ADB, + 7027: 0x8B0C, + 7028: 0x8B07, + 7029: 0x8B1A, + 7030: 0x8AE1, + 7031: 0x8B16, + 7032: 0x8B10, + 7033: 0x8B17, + 7034: 0x8B20, + 7035: 0x8B33, + 7036: 0x97AB, + 7037: 0x8B26, + 7038: 0x8B2B, + 7039: 0x8B3E, + 7040: 0x8B28, + 7041: 0x8B41, + 7042: 0x8B4C, + 7043: 0x8B4F, + 7044: 0x8B4E, + 7045: 0x8B49, + 7046: 0x8B56, + 7047: 0x8B5B, + 7048: 0x8B5A, + 7049: 0x8B6B, + 7050: 0x8B5F, + 7051: 0x8B6C, + 7052: 0x8B6F, + 7053: 0x8B74, + 7054: 0x8B7D, + 7055: 0x8B80, + 7056: 0x8B8C, + 7057: 0x8B8E, + 7058: 0x8B92, + 7059: 0x8B93, + 7060: 0x8B96, + 7061: 0x8B99, + 7062: 0x8B9A, + 7063: 0x8C3A, + 7064: 0x8C41, + 7065: 0x8C3F, + 7066: 0x8C48, + 7067: 0x8C4C, + 7068: 0x8C4E, + 7069: 0x8C50, + 7070: 0x8C55, + 7071: 0x8C62, + 7072: 0x8C6C, + 7073: 0x8C78, + 7074: 0x8C7A, + 7075: 0x8C82, + 7076: 0x8C89, + 7077: 0x8C85, + 7078: 0x8C8A, + 7079: 0x8C8D, + 7080: 0x8C8E, + 7081: 0x8C94, + 7082: 0x8C7C, + 7083: 0x8C98, + 7084: 0x621D, + 7085: 0x8CAD, + 7086: 0x8CAA, + 7087: 0x8CBD, + 7088: 0x8CB2, + 7089: 0x8CB3, + 7090: 0x8CAE, + 7091: 0x8CB6, + 7092: 0x8CC8, + 7093: 0x8CC1, + 7094: 0x8CE4, + 7095: 0x8CE3, + 7096: 0x8CDA, + 7097: 0x8CFD, + 7098: 0x8CFA, + 7099: 0x8CFB, + 7100: 0x8D04, + 7101: 0x8D05, + 7102: 0x8D0A, + 7103: 0x8D07, + 7104: 0x8D0F, + 7105: 0x8D0D, + 7106: 0x8D10, + 7107: 0x9F4E, + 7108: 0x8D13, + 7109: 0x8CCD, + 7110: 0x8D14, + 7111: 0x8D16, + 7112: 0x8D67, + 7113: 0x8D6D, + 7114: 0x8D71, + 7115: 0x8D73, + 7116: 0x8D81, + 7117: 0x8D99, + 7118: 0x8DC2, + 7119: 0x8DBE, + 7120: 0x8DBA, + 7121: 0x8DCF, + 7122: 0x8DDA, + 7123: 0x8DD6, + 7124: 0x8DCC, + 7125: 0x8DDB, + 7126: 0x8DCB, + 7127: 0x8DEA, + 7128: 0x8DEB, + 7129: 0x8DDF, + 7130: 0x8DE3, + 7131: 0x8DFC, + 7132: 0x8E08, + 7133: 0x8E09, + 7134: 0x8DFF, + 7135: 0x8E1D, + 7136: 0x8E1E, + 7137: 0x8E10, + 7138: 0x8E1F, + 7139: 0x8E42, + 7140: 0x8E35, + 7141: 0x8E30, + 7142: 0x8E34, + 7143: 0x8E4A, + 7144: 0x8E47, + 7145: 0x8E49, + 7146: 0x8E4C, + 7147: 0x8E50, + 7148: 0x8E48, + 7149: 0x8E59, + 7150: 0x8E64, + 7151: 0x8E60, + 7152: 0x8E2A, + 7153: 0x8E63, + 7154: 0x8E55, + 7155: 0x8E76, + 7156: 0x8E72, + 7157: 0x8E7C, + 7158: 0x8E81, + 7159: 0x8E87, + 7160: 0x8E85, + 7161: 0x8E84, + 7162: 0x8E8B, + 7163: 0x8E8A, + 7164: 0x8E93, + 7165: 0x8E91, + 7166: 0x8E94, + 7167: 0x8E99, + 7168: 0x8EAA, + 7169: 0x8EA1, + 7170: 0x8EAC, + 7171: 0x8EB0, + 7172: 0x8EC6, + 7173: 0x8EB1, + 7174: 0x8EBE, + 7175: 0x8EC5, + 7176: 0x8EC8, + 7177: 0x8ECB, + 7178: 0x8EDB, + 7179: 0x8EE3, + 7180: 0x8EFC, + 7181: 0x8EFB, + 7182: 0x8EEB, + 7183: 0x8EFE, + 7184: 0x8F0A, + 7185: 0x8F05, + 7186: 0x8F15, + 7187: 0x8F12, + 7188: 0x8F19, + 7189: 0x8F13, + 7190: 0x8F1C, + 7191: 0x8F1F, + 7192: 0x8F1B, + 7193: 0x8F0C, + 7194: 0x8F26, + 7195: 0x8F33, + 7196: 0x8F3B, + 7197: 0x8F39, + 7198: 0x8F45, + 7199: 0x8F42, + 7200: 0x8F3E, + 7201: 0x8F4C, + 7202: 0x8F49, + 7203: 0x8F46, + 7204: 0x8F4E, + 7205: 0x8F57, + 7206: 0x8F5C, + 7207: 0x8F62, + 7208: 0x8F63, + 7209: 0x8F64, + 7210: 0x8F9C, + 7211: 0x8F9F, + 7212: 0x8FA3, + 7213: 0x8FAD, + 7214: 0x8FAF, + 7215: 0x8FB7, + 7216: 0x8FDA, + 7217: 0x8FE5, + 7218: 0x8FE2, + 7219: 0x8FEA, + 7220: 0x8FEF, + 7221: 0x9087, + 7222: 0x8FF4, + 7223: 0x9005, + 7224: 0x8FF9, + 7225: 0x8FFA, + 7226: 0x9011, + 7227: 0x9015, + 7228: 0x9021, + 7229: 0x900D, + 7230: 0x901E, + 7231: 0x9016, + 7232: 0x900B, + 7233: 0x9027, + 7234: 0x9036, + 7235: 0x9035, + 7236: 0x9039, + 7237: 0x8FF8, + 7238: 0x904F, + 7239: 0x9050, + 7240: 0x9051, + 7241: 0x9052, + 7242: 0x900E, + 7243: 0x9049, + 7244: 0x903E, + 7245: 0x9056, + 7246: 0x9058, + 7247: 0x905E, + 7248: 0x9068, + 7249: 0x906F, + 7250: 0x9076, + 7251: 0x96A8, + 7252: 0x9072, + 7253: 0x9082, + 7254: 0x907D, + 7255: 0x9081, + 7256: 0x9080, + 7257: 0x908A, + 7258: 0x9089, + 7259: 0x908F, + 7260: 0x90A8, + 7261: 0x90AF, + 7262: 0x90B1, + 7263: 0x90B5, + 7264: 0x90E2, + 7265: 0x90E4, + 7266: 0x6248, + 7267: 0x90DB, + 7268: 0x9102, + 7269: 0x9112, + 7270: 0x9119, + 7271: 0x9132, + 7272: 0x9130, + 7273: 0x914A, + 7274: 0x9156, + 7275: 0x9158, + 7276: 0x9163, + 7277: 0x9165, + 7278: 0x9169, + 7279: 0x9173, + 7280: 0x9172, + 7281: 0x918B, + 7282: 0x9189, + 7283: 0x9182, + 7284: 0x91A2, + 7285: 0x91AB, + 7286: 0x91AF, + 7287: 0x91AA, + 7288: 0x91B5, + 7289: 0x91B4, + 7290: 0x91BA, + 7291: 0x91C0, + 7292: 0x91C1, + 7293: 0x91C9, + 7294: 0x91CB, + 7295: 0x91D0, + 7296: 0x91D6, + 7297: 0x91DF, + 7298: 0x91E1, + 7299: 0x91DB, + 7300: 0x91FC, + 7301: 0x91F5, + 7302: 0x91F6, + 7303: 0x921E, + 7304: 0x91FF, + 7305: 0x9214, + 7306: 0x922C, + 7307: 0x9215, + 7308: 0x9211, + 7309: 0x925E, + 7310: 0x9257, + 7311: 0x9245, + 7312: 0x9249, + 7313: 0x9264, + 7314: 0x9248, + 7315: 0x9295, + 7316: 0x923F, + 7317: 0x924B, + 7318: 0x9250, + 7319: 0x929C, + 7320: 0x9296, + 7321: 0x9293, + 7322: 0x929B, + 7323: 0x925A, + 7324: 0x92CF, + 7325: 0x92B9, + 7326: 0x92B7, + 7327: 0x92E9, + 7328: 0x930F, + 7329: 0x92FA, + 7330: 0x9344, + 7331: 0x932E, + 7332: 0x9319, + 7333: 0x9322, + 7334: 0x931A, + 7335: 0x9323, + 7336: 0x933A, + 7337: 0x9335, + 7338: 0x933B, + 7339: 0x935C, + 7340: 0x9360, + 7341: 0x937C, + 7342: 0x936E, + 7343: 0x9356, + 7344: 0x93B0, + 7345: 0x93AC, + 7346: 0x93AD, + 7347: 0x9394, + 7348: 0x93B9, + 7349: 0x93D6, + 7350: 0x93D7, + 7351: 0x93E8, + 7352: 0x93E5, + 7353: 0x93D8, + 7354: 0x93C3, + 7355: 0x93DD, + 7356: 0x93D0, + 7357: 0x93C8, + 7358: 0x93E4, + 7359: 0x941A, + 7360: 0x9414, + 7361: 0x9413, + 7362: 0x9403, + 7363: 0x9407, + 7364: 0x9410, + 7365: 0x9436, + 7366: 0x942B, + 7367: 0x9435, + 7368: 0x9421, + 7369: 0x943A, + 7370: 0x9441, + 7371: 0x9452, + 7372: 0x9444, + 7373: 0x945B, + 7374: 0x9460, + 7375: 0x9462, + 7376: 0x945E, + 7377: 0x946A, + 7378: 0x9229, + 7379: 0x9470, + 7380: 0x9475, + 7381: 0x9477, + 7382: 0x947D, + 7383: 0x945A, + 7384: 0x947C, + 7385: 0x947E, + 7386: 0x9481, + 7387: 0x947F, + 7388: 0x9582, + 7389: 0x9587, + 7390: 0x958A, + 7391: 0x9594, + 7392: 0x9596, + 7393: 0x9598, + 7394: 0x9599, + 7395: 0x95A0, + 7396: 0x95A8, + 7397: 0x95A7, + 7398: 0x95AD, + 7399: 0x95BC, + 7400: 0x95BB, + 7401: 0x95B9, + 7402: 0x95BE, + 7403: 0x95CA, + 7404: 0x6FF6, + 7405: 0x95C3, + 7406: 0x95CD, + 7407: 0x95CC, + 7408: 0x95D5, + 7409: 0x95D4, + 7410: 0x95D6, + 7411: 0x95DC, + 7412: 0x95E1, + 7413: 0x95E5, + 7414: 0x95E2, + 7415: 0x9621, + 7416: 0x9628, + 7417: 0x962E, + 7418: 0x962F, + 7419: 0x9642, + 7420: 0x964C, + 7421: 0x964F, + 7422: 0x964B, + 7423: 0x9677, + 7424: 0x965C, + 7425: 0x965E, + 7426: 0x965D, + 7427: 0x965F, + 7428: 0x9666, + 7429: 0x9672, + 7430: 0x966C, + 7431: 0x968D, + 7432: 0x9698, + 7433: 0x9695, + 7434: 0x9697, + 7435: 0x96AA, + 7436: 0x96A7, + 7437: 0x96B1, + 7438: 0x96B2, + 7439: 0x96B0, + 7440: 0x96B4, + 7441: 0x96B6, + 7442: 0x96B8, + 7443: 0x96B9, + 7444: 0x96CE, + 7445: 0x96CB, + 7446: 0x96C9, + 7447: 0x96CD, + 7448: 0x894D, + 7449: 0x96DC, + 7450: 0x970D, + 7451: 0x96D5, + 7452: 0x96F9, + 7453: 0x9704, + 7454: 0x9706, + 7455: 0x9708, + 7456: 0x9713, + 7457: 0x970E, + 7458: 0x9711, + 7459: 0x970F, + 7460: 0x9716, + 7461: 0x9719, + 7462: 0x9724, + 7463: 0x972A, + 7464: 0x9730, + 7465: 0x9739, + 7466: 0x973D, + 7467: 0x973E, + 7468: 0x9744, + 7469: 0x9746, + 7470: 0x9748, + 7471: 0x9742, + 7472: 0x9749, + 7473: 0x975C, + 7474: 0x9760, + 7475: 0x9764, + 7476: 0x9766, + 7477: 0x9768, + 7478: 0x52D2, + 7479: 0x976B, + 7480: 0x9771, + 7481: 0x9779, + 7482: 0x9785, + 7483: 0x977C, + 7484: 0x9781, + 7485: 0x977A, + 7486: 0x9786, + 7487: 0x978B, + 7488: 0x978F, + 7489: 0x9790, + 7490: 0x979C, + 7491: 0x97A8, + 7492: 0x97A6, + 7493: 0x97A3, + 7494: 0x97B3, + 7495: 0x97B4, + 7496: 0x97C3, + 7497: 0x97C6, + 7498: 0x97C8, + 7499: 0x97CB, + 7500: 0x97DC, + 7501: 0x97ED, + 7502: 0x9F4F, + 7503: 0x97F2, + 7504: 0x7ADF, + 7505: 0x97F6, + 7506: 0x97F5, + 7507: 0x980F, + 7508: 0x980C, + 7509: 0x9838, + 7510: 0x9824, + 7511: 0x9821, + 7512: 0x9837, + 7513: 0x983D, + 7514: 0x9846, + 7515: 0x984F, + 7516: 0x984B, + 7517: 0x986B, + 7518: 0x986F, + 7519: 0x9870, + 7520: 0x9871, + 7521: 0x9874, + 7522: 0x9873, + 7523: 0x98AA, + 7524: 0x98AF, + 7525: 0x98B1, + 7526: 0x98B6, + 7527: 0x98C4, + 7528: 0x98C3, + 7529: 0x98C6, + 7530: 0x98E9, + 7531: 0x98EB, + 7532: 0x9903, + 7533: 0x9909, + 7534: 0x9912, + 7535: 0x9914, + 7536: 0x9918, + 7537: 0x9921, + 7538: 0x991D, + 7539: 0x991E, + 7540: 0x9924, + 7541: 0x9920, + 7542: 0x992C, + 7543: 0x992E, + 7544: 0x993D, + 7545: 0x993E, + 7546: 0x9942, + 7547: 0x9949, + 7548: 0x9945, + 7549: 0x9950, + 7550: 0x994B, + 7551: 0x9951, + 7552: 0x9952, + 7553: 0x994C, + 7554: 0x9955, + 7555: 0x9997, + 7556: 0x9998, + 7557: 0x99A5, + 7558: 0x99AD, + 7559: 0x99AE, + 7560: 0x99BC, + 7561: 0x99DF, + 7562: 0x99DB, + 7563: 0x99DD, + 7564: 0x99D8, + 7565: 0x99D1, + 7566: 0x99ED, + 7567: 0x99EE, + 7568: 0x99F1, + 7569: 0x99F2, + 7570: 0x99FB, + 7571: 0x99F8, + 7572: 0x9A01, + 7573: 0x9A0F, + 7574: 0x9A05, + 7575: 0x99E2, + 7576: 0x9A19, + 7577: 0x9A2B, + 7578: 0x9A37, + 7579: 0x9A45, + 7580: 0x9A42, + 7581: 0x9A40, + 7582: 0x9A43, + 7583: 0x9A3E, + 7584: 0x9A55, + 7585: 0x9A4D, + 7586: 0x9A5B, + 7587: 0x9A57, + 7588: 0x9A5F, + 7589: 0x9A62, + 7590: 0x9A65, + 7591: 0x9A64, + 7592: 0x9A69, + 7593: 0x9A6B, + 7594: 0x9A6A, + 7595: 0x9AAD, + 7596: 0x9AB0, + 7597: 0x9ABC, + 7598: 0x9AC0, + 7599: 0x9ACF, + 7600: 0x9AD1, + 7601: 0x9AD3, + 7602: 0x9AD4, + 7603: 0x9ADE, + 7604: 0x9ADF, + 7605: 0x9AE2, + 7606: 0x9AE3, + 7607: 0x9AE6, + 7608: 0x9AEF, + 7609: 0x9AEB, + 7610: 0x9AEE, + 7611: 0x9AF4, + 7612: 0x9AF1, + 7613: 0x9AF7, + 7614: 0x9AFB, + 7615: 0x9B06, + 7616: 0x9B18, + 7617: 0x9B1A, + 7618: 0x9B1F, + 7619: 0x9B22, + 7620: 0x9B23, + 7621: 0x9B25, + 7622: 0x9B27, + 7623: 0x9B28, + 7624: 0x9B29, + 7625: 0x9B2A, + 7626: 0x9B2E, + 7627: 0x9B2F, + 7628: 0x9B32, + 7629: 0x9B44, + 7630: 0x9B43, + 7631: 0x9B4F, + 7632: 0x9B4D, + 7633: 0x9B4E, + 7634: 0x9B51, + 7635: 0x9B58, + 7636: 0x9B74, + 7637: 0x9B93, + 7638: 0x9B83, + 7639: 0x9B91, + 7640: 0x9B96, + 7641: 0x9B97, + 7642: 0x9B9F, + 7643: 0x9BA0, + 7644: 0x9BA8, + 7645: 0x9BB4, + 7646: 0x9BC0, + 7647: 0x9BCA, + 7648: 0x9BB9, + 7649: 0x9BC6, + 7650: 0x9BCF, + 7651: 0x9BD1, + 7652: 0x9BD2, + 7653: 0x9BE3, + 7654: 0x9BE2, + 7655: 0x9BE4, + 7656: 0x9BD4, + 7657: 0x9BE1, + 7658: 0x9C3A, + 7659: 0x9BF2, + 7660: 0x9BF1, + 7661: 0x9BF0, + 7662: 0x9C15, + 7663: 0x9C14, + 7664: 0x9C09, + 7665: 0x9C13, + 7666: 0x9C0C, + 7667: 0x9C06, + 7668: 0x9C08, + 7669: 0x9C12, + 7670: 0x9C0A, + 7671: 0x9C04, + 7672: 0x9C2E, + 7673: 0x9C1B, + 7674: 0x9C25, + 7675: 0x9C24, + 7676: 0x9C21, + 7677: 0x9C30, + 7678: 0x9C47, + 7679: 0x9C32, + 7680: 0x9C46, + 7681: 0x9C3E, + 7682: 0x9C5A, + 7683: 0x9C60, + 7684: 0x9C67, + 7685: 0x9C76, + 7686: 0x9C78, + 7687: 0x9CE7, + 7688: 0x9CEC, + 7689: 0x9CF0, + 7690: 0x9D09, + 7691: 0x9D08, + 7692: 0x9CEB, + 7693: 0x9D03, + 7694: 0x9D06, + 7695: 0x9D2A, + 7696: 0x9D26, + 7697: 0x9DAF, + 7698: 0x9D23, + 7699: 0x9D1F, + 7700: 0x9D44, + 7701: 0x9D15, + 7702: 0x9D12, + 7703: 0x9D41, + 7704: 0x9D3F, + 7705: 0x9D3E, + 7706: 0x9D46, + 7707: 0x9D48, + 7708: 0x9D5D, + 7709: 0x9D5E, + 7710: 0x9D64, + 7711: 0x9D51, + 7712: 0x9D50, + 7713: 0x9D59, + 7714: 0x9D72, + 7715: 0x9D89, + 7716: 0x9D87, + 7717: 0x9DAB, + 7718: 0x9D6F, + 7719: 0x9D7A, + 7720: 0x9D9A, + 7721: 0x9DA4, + 7722: 0x9DA9, + 7723: 0x9DB2, + 7724: 0x9DC4, + 7725: 0x9DC1, + 7726: 0x9DBB, + 7727: 0x9DB8, + 7728: 0x9DBA, + 7729: 0x9DC6, + 7730: 0x9DCF, + 7731: 0x9DC2, + 7732: 0x9DD9, + 7733: 0x9DD3, + 7734: 0x9DF8, + 7735: 0x9DE6, + 7736: 0x9DED, + 7737: 0x9DEF, + 7738: 0x9DFD, + 7739: 0x9E1A, + 7740: 0x9E1B, + 7741: 0x9E1E, + 7742: 0x9E75, + 7743: 0x9E79, + 7744: 0x9E7D, + 7745: 0x9E81, + 7746: 0x9E88, + 7747: 0x9E8B, + 7748: 0x9E8C, + 7749: 0x9E92, + 7750: 0x9E95, + 7751: 0x9E91, + 7752: 0x9E9D, + 7753: 0x9EA5, + 7754: 0x9EA9, + 7755: 0x9EB8, + 7756: 0x9EAA, + 7757: 0x9EAD, + 7758: 0x9761, + 7759: 0x9ECC, + 7760: 0x9ECE, + 7761: 0x9ECF, + 7762: 0x9ED0, + 7763: 0x9ED4, + 7764: 0x9EDC, + 7765: 0x9EDE, + 7766: 0x9EDD, + 7767: 0x9EE0, + 7768: 0x9EE5, + 7769: 0x9EE8, + 7770: 0x9EEF, + 7771: 0x9EF4, + 7772: 0x9EF6, + 7773: 0x9EF7, + 7774: 0x9EF9, + 7775: 0x9EFB, + 7776: 0x9EFC, + 7777: 0x9EFD, + 7778: 0x9F07, + 7779: 0x9F08, + 7780: 0x76B7, + 7781: 0x9F15, + 7782: 0x9F21, + 7783: 0x9F2C, + 7784: 0x9F3E, + 7785: 0x9F4A, + 7786: 0x9F52, + 7787: 0x9F54, + 7788: 0x9F63, + 7789: 0x9F5F, + 7790: 0x9F60, + 7791: 0x9F61, + 7792: 0x9F66, + 7793: 0x9F67, + 7794: 0x9F6C, + 7795: 0x9F6A, + 7796: 0x9F77, + 7797: 0x9F72, + 7798: 0x9F76, + 7799: 0x9F95, + 7800: 0x9F9C, + 7801: 0x9FA0, + 7802: 0x582F, + 7803: 0x69C7, + 7804: 0x9059, + 7805: 0x7464, + 7806: 0x51DC, + 7807: 0x7199, + 8272: 0x7E8A, + 8273: 0x891C, + 8274: 0x9348, + 8275: 0x9288, + 8276: 0x84DC, + 8277: 0x4FC9, + 8278: 0x70BB, + 8279: 0x6631, + 8280: 0x68C8, + 8281: 0x92F9, + 8282: 0x66FB, + 8283: 0x5F45, + 8284: 0x4E28, + 8285: 0x4EE1, + 8286: 0x4EFC, + 8287: 0x4F00, + 8288: 0x4F03, + 8289: 0x4F39, + 8290: 0x4F56, + 8291: 0x4F92, + 8292: 0x4F8A, + 8293: 0x4F9A, + 8294: 0x4F94, + 8295: 0x4FCD, + 8296: 0x5040, + 8297: 0x5022, + 8298: 0x4FFF, + 8299: 0x501E, + 8300: 0x5046, + 8301: 0x5070, + 8302: 0x5042, + 8303: 0x5094, + 8304: 0x50F4, + 8305: 0x50D8, + 8306: 0x514A, + 8307: 0x5164, + 8308: 0x519D, + 8309: 0x51BE, + 8310: 0x51EC, + 8311: 0x5215, + 8312: 0x529C, + 8313: 0x52A6, + 8314: 0x52C0, + 8315: 0x52DB, + 8316: 0x5300, + 8317: 0x5307, + 8318: 0x5324, + 8319: 0x5372, + 8320: 0x5393, + 8321: 0x53B2, + 8322: 0x53DD, + 8323: 0xFA0E, + 8324: 0x549C, + 8325: 0x548A, + 8326: 0x54A9, + 8327: 0x54FF, + 8328: 0x5586, + 8329: 0x5759, + 8330: 0x5765, + 8331: 0x57AC, + 8332: 0x57C8, + 8333: 0x57C7, + 8334: 0xFA0F, + 8335: 0xFA10, + 8336: 0x589E, + 8337: 0x58B2, + 8338: 0x590B, + 8339: 0x5953, + 8340: 0x595B, + 8341: 0x595D, + 8342: 0x5963, + 8343: 0x59A4, + 8344: 0x59BA, + 8345: 0x5B56, + 8346: 0x5BC0, + 8347: 0x752F, + 8348: 0x5BD8, + 8349: 0x5BEC, + 8350: 0x5C1E, + 8351: 0x5CA6, + 8352: 0x5CBA, + 8353: 0x5CF5, + 8354: 0x5D27, + 8355: 0x5D53, + 8356: 0xFA11, + 8357: 0x5D42, + 8358: 0x5D6D, + 8359: 0x5DB8, + 8360: 0x5DB9, + 8361: 0x5DD0, + 8362: 0x5F21, + 8363: 0x5F34, + 8364: 0x5F67, + 8365: 0x5FB7, + 8366: 0x5FDE, + 8367: 0x605D, + 8368: 0x6085, + 8369: 0x608A, + 8370: 0x60DE, + 8371: 0x60D5, + 8372: 0x6120, + 8373: 0x60F2, + 8374: 0x6111, + 8375: 0x6137, + 8376: 0x6130, + 8377: 0x6198, + 8378: 0x6213, + 8379: 0x62A6, + 8380: 0x63F5, + 8381: 0x6460, + 8382: 0x649D, + 8383: 0x64CE, + 8384: 0x654E, + 8385: 0x6600, + 8386: 0x6615, + 8387: 0x663B, + 8388: 0x6609, + 8389: 0x662E, + 8390: 0x661E, + 8391: 0x6624, + 8392: 0x6665, + 8393: 0x6657, + 8394: 0x6659, + 8395: 0xFA12, + 8396: 0x6673, + 8397: 0x6699, + 8398: 0x66A0, + 8399: 0x66B2, + 8400: 0x66BF, + 8401: 0x66FA, + 8402: 0x670E, + 8403: 0xF929, + 8404: 0x6766, + 8405: 0x67BB, + 8406: 0x6852, + 8407: 0x67C0, + 8408: 0x6801, + 8409: 0x6844, + 8410: 0x68CF, + 8411: 0xFA13, + 8412: 0x6968, + 8413: 0xFA14, + 8414: 0x6998, + 8415: 0x69E2, + 8416: 0x6A30, + 8417: 0x6A6B, + 8418: 0x6A46, + 8419: 0x6A73, + 8420: 0x6A7E, + 8421: 0x6AE2, + 8422: 0x6AE4, + 8423: 0x6BD6, + 8424: 0x6C3F, + 8425: 0x6C5C, + 8426: 0x6C86, + 8427: 0x6C6F, + 8428: 0x6CDA, + 8429: 0x6D04, + 8430: 0x6D87, + 8431: 0x6D6F, + 8432: 0x6D96, + 8433: 0x6DAC, + 8434: 0x6DCF, + 8435: 0x6DF8, + 8436: 0x6DF2, + 8437: 0x6DFC, + 8438: 0x6E39, + 8439: 0x6E5C, + 8440: 0x6E27, + 8441: 0x6E3C, + 8442: 0x6EBF, + 8443: 0x6F88, + 8444: 0x6FB5, + 8445: 0x6FF5, + 8446: 0x7005, + 8447: 0x7007, + 8448: 0x7028, + 8449: 0x7085, + 8450: 0x70AB, + 8451: 0x710F, + 8452: 0x7104, + 8453: 0x715C, + 8454: 0x7146, + 8455: 0x7147, + 8456: 0xFA15, + 8457: 0x71C1, + 8458: 0x71FE, + 8459: 0x72B1, + 8460: 0x72BE, + 8461: 0x7324, + 8462: 0xFA16, + 8463: 0x7377, + 8464: 0x73BD, + 8465: 0x73C9, + 8466: 0x73D6, + 8467: 0x73E3, + 8468: 0x73D2, + 8469: 0x7407, + 8470: 0x73F5, + 8471: 0x7426, + 8472: 0x742A, + 8473: 0x7429, + 8474: 0x742E, + 8475: 0x7462, + 8476: 0x7489, + 8477: 0x749F, + 8478: 0x7501, + 8479: 0x756F, + 8480: 0x7682, + 8481: 0x769C, + 8482: 0x769E, + 8483: 0x769B, + 8484: 0x76A6, + 8485: 0xFA17, + 8486: 0x7746, + 8487: 0x52AF, + 8488: 0x7821, + 8489: 0x784E, + 8490: 0x7864, + 8491: 0x787A, + 8492: 0x7930, + 8493: 0xFA18, + 8494: 0xFA19, + 8495: 0xFA1A, + 8496: 0x7994, + 8497: 0xFA1B, + 8498: 0x799B, + 8499: 0x7AD1, + 8500: 0x7AE7, + 8501: 0xFA1C, + 8502: 0x7AEB, + 8503: 0x7B9E, + 8504: 0xFA1D, + 8505: 0x7D48, + 8506: 0x7D5C, + 8507: 0x7DB7, + 8508: 0x7DA0, + 8509: 0x7DD6, + 8510: 0x7E52, + 8511: 0x7F47, + 8512: 0x7FA1, + 8513: 0xFA1E, + 8514: 0x8301, + 8515: 0x8362, + 8516: 0x837F, + 8517: 0x83C7, + 8518: 0x83F6, + 8519: 0x8448, + 8520: 0x84B4, + 8521: 0x8553, + 8522: 0x8559, + 8523: 0x856B, + 8524: 0xFA1F, + 8525: 0x85B0, + 8526: 0xFA20, + 8527: 0xFA21, + 8528: 0x8807, + 8529: 0x88F5, + 8530: 0x8A12, + 8531: 0x8A37, + 8532: 0x8A79, + 8533: 0x8AA7, + 8534: 0x8ABE, + 8535: 0x8ADF, + 8536: 0xFA22, + 8537: 0x8AF6, + 8538: 0x8B53, + 8539: 0x8B7F, + 8540: 0x8CF0, + 8541: 0x8CF4, + 8542: 0x8D12, + 8543: 0x8D76, + 8544: 0xFA23, + 8545: 0x8ECF, + 8546: 0xFA24, + 8547: 0xFA25, + 8548: 0x9067, + 8549: 0x90DE, + 8550: 0xFA26, + 8551: 0x9115, + 8552: 0x9127, + 8553: 0x91DA, + 8554: 0x91D7, + 8555: 0x91DE, + 8556: 0x91ED, + 8557: 0x91EE, + 8558: 0x91E4, + 8559: 0x91E5, + 8560: 0x9206, + 8561: 0x9210, + 8562: 0x920A, + 8563: 0x923A, + 8564: 0x9240, + 8565: 0x923C, + 8566: 0x924E, + 8567: 0x9259, + 8568: 0x9251, + 8569: 0x9239, + 8570: 0x9267, + 8571: 0x92A7, + 8572: 0x9277, + 8573: 0x9278, + 8574: 0x92E7, + 8575: 0x92D7, + 8576: 0x92D9, + 8577: 0x92D0, + 8578: 0xFA27, + 8579: 0x92D5, + 8580: 0x92E0, + 8581: 0x92D3, + 8582: 0x9325, + 8583: 0x9321, + 8584: 0x92FB, + 8585: 0xFA28, + 8586: 0x931E, + 8587: 0x92FF, + 8588: 0x931D, + 8589: 0x9302, + 8590: 0x9370, + 8591: 0x9357, + 8592: 0x93A4, + 8593: 0x93C6, + 8594: 0x93DE, + 8595: 0x93F8, + 8596: 0x9431, + 8597: 0x9445, + 8598: 0x9448, + 8599: 0x9592, + 8600: 0xF9DC, + 8601: 0xFA29, + 8602: 0x969D, + 8603: 0x96AF, + 8604: 0x9733, + 8605: 0x973B, + 8606: 0x9743, + 8607: 0x974D, + 8608: 0x974F, + 8609: 0x9751, + 8610: 0x9755, + 8611: 0x9857, + 8612: 0x9865, + 8613: 0xFA2A, + 8614: 0xFA2B, + 8615: 0x9927, + 8616: 0xFA2C, + 8617: 0x999E, + 8618: 0x9A4E, + 8619: 0x9AD9, + 8620: 0x9ADC, + 8621: 0x9B75, + 8622: 0x9B72, + 8623: 0x9B8F, + 8624: 0x9BB1, + 8625: 0x9BBB, + 8626: 0x9C00, + 8627: 0x9D70, + 8628: 0x9D6B, + 8629: 0xFA2D, + 8630: 0x9E19, + 8631: 0x9ED1, + 8634: 0x2170, + 8635: 0x2171, + 8636: 0x2172, + 8637: 0x2173, + 8638: 0x2174, + 8639: 0x2175, + 8640: 0x2176, + 8641: 0x2177, + 8642: 0x2178, + 8643: 0x2179, + 8644: 0xFFE2, + 8645: 0xFFE4, + 8646: 0xFF07, + 8647: 0xFF02, + 10716: 0x2170, + 10717: 0x2171, + 10718: 0x2172, + 10719: 0x2173, + 10720: 0x2174, + 10721: 0x2175, + 10722: 0x2176, + 10723: 0x2177, + 10724: 0x2178, + 10725: 0x2179, + 10726: 0x2160, + 10727: 0x2161, + 10728: 0x2162, + 10729: 0x2163, + 10730: 0x2164, + 10731: 0x2165, + 10732: 0x2166, + 10733: 0x2167, + 10734: 0x2168, + 10735: 0x2169, + 10736: 0xFFE2, + 10737: 0xFFE4, + 10738: 0xFF07, + 10739: 0xFF02, + 10740: 0x3231, + 10741: 0x2116, + 10742: 0x2121, + 10743: 0x2235, + 10744: 0x7E8A, + 10745: 0x891C, + 10746: 0x9348, + 10747: 0x9288, + 10748: 0x84DC, + 10749: 0x4FC9, + 10750: 0x70BB, + 10751: 0x6631, + 10752: 0x68C8, + 10753: 0x92F9, + 10754: 0x66FB, + 10755: 0x5F45, + 10756: 0x4E28, + 10757: 0x4EE1, + 10758: 0x4EFC, + 10759: 0x4F00, + 10760: 0x4F03, + 10761: 0x4F39, + 10762: 0x4F56, + 10763: 0x4F92, + 10764: 0x4F8A, + 10765: 0x4F9A, + 10766: 0x4F94, + 10767: 0x4FCD, + 10768: 0x5040, + 10769: 0x5022, + 10770: 0x4FFF, + 10771: 0x501E, + 10772: 0x5046, + 10773: 0x5070, + 10774: 0x5042, + 10775: 0x5094, + 10776: 0x50F4, + 10777: 0x50D8, + 10778: 0x514A, + 10779: 0x5164, + 10780: 0x519D, + 10781: 0x51BE, + 10782: 0x51EC, + 10783: 0x5215, + 10784: 0x529C, + 10785: 0x52A6, + 10786: 0x52C0, + 10787: 0x52DB, + 10788: 0x5300, + 10789: 0x5307, + 10790: 0x5324, + 10791: 0x5372, + 10792: 0x5393, + 10793: 0x53B2, + 10794: 0x53DD, + 10795: 0xFA0E, + 10796: 0x549C, + 10797: 0x548A, + 10798: 0x54A9, + 10799: 0x54FF, + 10800: 0x5586, + 10801: 0x5759, + 10802: 0x5765, + 10803: 0x57AC, + 10804: 0x57C8, + 10805: 0x57C7, + 10806: 0xFA0F, + 10807: 0xFA10, + 10808: 0x589E, + 10809: 0x58B2, + 10810: 0x590B, + 10811: 0x5953, + 10812: 0x595B, + 10813: 0x595D, + 10814: 0x5963, + 10815: 0x59A4, + 10816: 0x59BA, + 10817: 0x5B56, + 10818: 0x5BC0, + 10819: 0x752F, + 10820: 0x5BD8, + 10821: 0x5BEC, + 10822: 0x5C1E, + 10823: 0x5CA6, + 10824: 0x5CBA, + 10825: 0x5CF5, + 10826: 0x5D27, + 10827: 0x5D53, + 10828: 0xFA11, + 10829: 0x5D42, + 10830: 0x5D6D, + 10831: 0x5DB8, + 10832: 0x5DB9, + 10833: 0x5DD0, + 10834: 0x5F21, + 10835: 0x5F34, + 10836: 0x5F67, + 10837: 0x5FB7, + 10838: 0x5FDE, + 10839: 0x605D, + 10840: 0x6085, + 10841: 0x608A, + 10842: 0x60DE, + 10843: 0x60D5, + 10844: 0x6120, + 10845: 0x60F2, + 10846: 0x6111, + 10847: 0x6137, + 10848: 0x6130, + 10849: 0x6198, + 10850: 0x6213, + 10851: 0x62A6, + 10852: 0x63F5, + 10853: 0x6460, + 10854: 0x649D, + 10855: 0x64CE, + 10856: 0x654E, + 10857: 0x6600, + 10858: 0x6615, + 10859: 0x663B, + 10860: 0x6609, + 10861: 0x662E, + 10862: 0x661E, + 10863: 0x6624, + 10864: 0x6665, + 10865: 0x6657, + 10866: 0x6659, + 10867: 0xFA12, + 10868: 0x6673, + 10869: 0x6699, + 10870: 0x66A0, + 10871: 0x66B2, + 10872: 0x66BF, + 10873: 0x66FA, + 10874: 0x670E, + 10875: 0xF929, + 10876: 0x6766, + 10877: 0x67BB, + 10878: 0x6852, + 10879: 0x67C0, + 10880: 0x6801, + 10881: 0x6844, + 10882: 0x68CF, + 10883: 0xFA13, + 10884: 0x6968, + 10885: 0xFA14, + 10886: 0x6998, + 10887: 0x69E2, + 10888: 0x6A30, + 10889: 0x6A6B, + 10890: 0x6A46, + 10891: 0x6A73, + 10892: 0x6A7E, + 10893: 0x6AE2, + 10894: 0x6AE4, + 10895: 0x6BD6, + 10896: 0x6C3F, + 10897: 0x6C5C, + 10898: 0x6C86, + 10899: 0x6C6F, + 10900: 0x6CDA, + 10901: 0x6D04, + 10902: 0x6D87, + 10903: 0x6D6F, + 10904: 0x6D96, + 10905: 0x6DAC, + 10906: 0x6DCF, + 10907: 0x6DF8, + 10908: 0x6DF2, + 10909: 0x6DFC, + 10910: 0x6E39, + 10911: 0x6E5C, + 10912: 0x6E27, + 10913: 0x6E3C, + 10914: 0x6EBF, + 10915: 0x6F88, + 10916: 0x6FB5, + 10917: 0x6FF5, + 10918: 0x7005, + 10919: 0x7007, + 10920: 0x7028, + 10921: 0x7085, + 10922: 0x70AB, + 10923: 0x710F, + 10924: 0x7104, + 10925: 0x715C, + 10926: 0x7146, + 10927: 0x7147, + 10928: 0xFA15, + 10929: 0x71C1, + 10930: 0x71FE, + 10931: 0x72B1, + 10932: 0x72BE, + 10933: 0x7324, + 10934: 0xFA16, + 10935: 0x7377, + 10936: 0x73BD, + 10937: 0x73C9, + 10938: 0x73D6, + 10939: 0x73E3, + 10940: 0x73D2, + 10941: 0x7407, + 10942: 0x73F5, + 10943: 0x7426, + 10944: 0x742A, + 10945: 0x7429, + 10946: 0x742E, + 10947: 0x7462, + 10948: 0x7489, + 10949: 0x749F, + 10950: 0x7501, + 10951: 0x756F, + 10952: 0x7682, + 10953: 0x769C, + 10954: 0x769E, + 10955: 0x769B, + 10956: 0x76A6, + 10957: 0xFA17, + 10958: 0x7746, + 10959: 0x52AF, + 10960: 0x7821, + 10961: 0x784E, + 10962: 0x7864, + 10963: 0x787A, + 10964: 0x7930, + 10965: 0xFA18, + 10966: 0xFA19, + 10967: 0xFA1A, + 10968: 0x7994, + 10969: 0xFA1B, + 10970: 0x799B, + 10971: 0x7AD1, + 10972: 0x7AE7, + 10973: 0xFA1C, + 10974: 0x7AEB, + 10975: 0x7B9E, + 10976: 0xFA1D, + 10977: 0x7D48, + 10978: 0x7D5C, + 10979: 0x7DB7, + 10980: 0x7DA0, + 10981: 0x7DD6, + 10982: 0x7E52, + 10983: 0x7F47, + 10984: 0x7FA1, + 10985: 0xFA1E, + 10986: 0x8301, + 10987: 0x8362, + 10988: 0x837F, + 10989: 0x83C7, + 10990: 0x83F6, + 10991: 0x8448, + 10992: 0x84B4, + 10993: 0x8553, + 10994: 0x8559, + 10995: 0x856B, + 10996: 0xFA1F, + 10997: 0x85B0, + 10998: 0xFA20, + 10999: 0xFA21, + 11000: 0x8807, + 11001: 0x88F5, + 11002: 0x8A12, + 11003: 0x8A37, + 11004: 0x8A79, + 11005: 0x8AA7, + 11006: 0x8ABE, + 11007: 0x8ADF, + 11008: 0xFA22, + 11009: 0x8AF6, + 11010: 0x8B53, + 11011: 0x8B7F, + 11012: 0x8CF0, + 11013: 0x8CF4, + 11014: 0x8D12, + 11015: 0x8D76, + 11016: 0xFA23, + 11017: 0x8ECF, + 11018: 0xFA24, + 11019: 0xFA25, + 11020: 0x9067, + 11021: 0x90DE, + 11022: 0xFA26, + 11023: 0x9115, + 11024: 0x9127, + 11025: 0x91DA, + 11026: 0x91D7, + 11027: 0x91DE, + 11028: 0x91ED, + 11029: 0x91EE, + 11030: 0x91E4, + 11031: 0x91E5, + 11032: 0x9206, + 11033: 0x9210, + 11034: 0x920A, + 11035: 0x923A, + 11036: 0x9240, + 11037: 0x923C, + 11038: 0x924E, + 11039: 0x9259, + 11040: 0x9251, + 11041: 0x9239, + 11042: 0x9267, + 11043: 0x92A7, + 11044: 0x9277, + 11045: 0x9278, + 11046: 0x92E7, + 11047: 0x92D7, + 11048: 0x92D9, + 11049: 0x92D0, + 11050: 0xFA27, + 11051: 0x92D5, + 11052: 0x92E0, + 11053: 0x92D3, + 11054: 0x9325, + 11055: 0x9321, + 11056: 0x92FB, + 11057: 0xFA28, + 11058: 0x931E, + 11059: 0x92FF, + 11060: 0x931D, + 11061: 0x9302, + 11062: 0x9370, + 11063: 0x9357, + 11064: 0x93A4, + 11065: 0x93C6, + 11066: 0x93DE, + 11067: 0x93F8, + 11068: 0x9431, + 11069: 0x9445, + 11070: 0x9448, + 11071: 0x9592, + 11072: 0xF9DC, + 11073: 0xFA29, + 11074: 0x969D, + 11075: 0x96AF, + 11076: 0x9733, + 11077: 0x973B, + 11078: 0x9743, + 11079: 0x974D, + 11080: 0x974F, + 11081: 0x9751, + 11082: 0x9755, + 11083: 0x9857, + 11084: 0x9865, + 11085: 0xFA2A, + 11086: 0xFA2B, + 11087: 0x9927, + 11088: 0xFA2C, + 11089: 0x999E, + 11090: 0x9A4E, + 11091: 0x9AD9, + 11092: 0x9ADC, + 11093: 0x9B75, + 11094: 0x9B72, + 11095: 0x9B8F, + 11096: 0x9BB1, + 11097: 0x9BBB, + 11098: 0x9C00, + 11099: 0x9D70, + 11100: 0x9D6B, + 11101: 0xFA2D, + 11102: 0x9E19, + 11103: 0x9ED1, +} + +// jis0212Decode is the decoding table from JIS 0212 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-jis0212.txt +var jis0212Decode = [...]uint16{ + 108: 0x02D8, + 109: 0x02C7, + 110: 0x00B8, + 111: 0x02D9, + 112: 0x02DD, + 113: 0x00AF, + 114: 0x02DB, + 115: 0x02DA, + 116: 0xFF5E, + 117: 0x0384, + 118: 0x0385, + 127: 0x00A1, + 128: 0x00A6, + 129: 0x00BF, + 168: 0x00BA, + 169: 0x00AA, + 170: 0x00A9, + 171: 0x00AE, + 172: 0x2122, + 173: 0x00A4, + 174: 0x2116, + 534: 0x0386, + 535: 0x0388, + 536: 0x0389, + 537: 0x038A, + 538: 0x03AA, + 540: 0x038C, + 542: 0x038E, + 543: 0x03AB, + 545: 0x038F, + 550: 0x03AC, + 551: 0x03AD, + 552: 0x03AE, + 553: 0x03AF, + 554: 0x03CA, + 555: 0x0390, + 556: 0x03CC, + 557: 0x03C2, + 558: 0x03CD, + 559: 0x03CB, + 560: 0x03B0, + 561: 0x03CE, + 597: 0x0402, + 598: 0x0403, + 599: 0x0404, + 600: 0x0405, + 601: 0x0406, + 602: 0x0407, + 603: 0x0408, + 604: 0x0409, + 605: 0x040A, + 606: 0x040B, + 607: 0x040C, + 608: 0x040E, + 609: 0x040F, + 645: 0x0452, + 646: 0x0453, + 647: 0x0454, + 648: 0x0455, + 649: 0x0456, + 650: 0x0457, + 651: 0x0458, + 652: 0x0459, + 653: 0x045A, + 654: 0x045B, + 655: 0x045C, + 656: 0x045E, + 657: 0x045F, + 752: 0x00C6, + 753: 0x0110, + 755: 0x0126, + 757: 0x0132, + 759: 0x0141, + 760: 0x013F, + 762: 0x014A, + 763: 0x00D8, + 764: 0x0152, + 766: 0x0166, + 767: 0x00DE, + 784: 0x00E6, + 785: 0x0111, + 786: 0x00F0, + 787: 0x0127, + 788: 0x0131, + 789: 0x0133, + 790: 0x0138, + 791: 0x0142, + 792: 0x0140, + 793: 0x0149, + 794: 0x014B, + 795: 0x00F8, + 796: 0x0153, + 797: 0x00DF, + 798: 0x0167, + 799: 0x00FE, + 846: 0x00C1, + 847: 0x00C0, + 848: 0x00C4, + 849: 0x00C2, + 850: 0x0102, + 851: 0x01CD, + 852: 0x0100, + 853: 0x0104, + 854: 0x00C5, + 855: 0x00C3, + 856: 0x0106, + 857: 0x0108, + 858: 0x010C, + 859: 0x00C7, + 860: 0x010A, + 861: 0x010E, + 862: 0x00C9, + 863: 0x00C8, + 864: 0x00CB, + 865: 0x00CA, + 866: 0x011A, + 867: 0x0116, + 868: 0x0112, + 869: 0x0118, + 871: 0x011C, + 872: 0x011E, + 873: 0x0122, + 874: 0x0120, + 875: 0x0124, + 876: 0x00CD, + 877: 0x00CC, + 878: 0x00CF, + 879: 0x00CE, + 880: 0x01CF, + 881: 0x0130, + 882: 0x012A, + 883: 0x012E, + 884: 0x0128, + 885: 0x0134, + 886: 0x0136, + 887: 0x0139, + 888: 0x013D, + 889: 0x013B, + 890: 0x0143, + 891: 0x0147, + 892: 0x0145, + 893: 0x00D1, + 894: 0x00D3, + 895: 0x00D2, + 896: 0x00D6, + 897: 0x00D4, + 898: 0x01D1, + 899: 0x0150, + 900: 0x014C, + 901: 0x00D5, + 902: 0x0154, + 903: 0x0158, + 904: 0x0156, + 905: 0x015A, + 906: 0x015C, + 907: 0x0160, + 908: 0x015E, + 909: 0x0164, + 910: 0x0162, + 911: 0x00DA, + 912: 0x00D9, + 913: 0x00DC, + 914: 0x00DB, + 915: 0x016C, + 916: 0x01D3, + 917: 0x0170, + 918: 0x016A, + 919: 0x0172, + 920: 0x016E, + 921: 0x0168, + 922: 0x01D7, + 923: 0x01DB, + 924: 0x01D9, + 925: 0x01D5, + 926: 0x0174, + 927: 0x00DD, + 928: 0x0178, + 929: 0x0176, + 930: 0x0179, + 931: 0x017D, + 932: 0x017B, + 940: 0x00E1, + 941: 0x00E0, + 942: 0x00E4, + 943: 0x00E2, + 944: 0x0103, + 945: 0x01CE, + 946: 0x0101, + 947: 0x0105, + 948: 0x00E5, + 949: 0x00E3, + 950: 0x0107, + 951: 0x0109, + 952: 0x010D, + 953: 0x00E7, + 954: 0x010B, + 955: 0x010F, + 956: 0x00E9, + 957: 0x00E8, + 958: 0x00EB, + 959: 0x00EA, + 960: 0x011B, + 961: 0x0117, + 962: 0x0113, + 963: 0x0119, + 964: 0x01F5, + 965: 0x011D, + 966: 0x011F, + 968: 0x0121, + 969: 0x0125, + 970: 0x00ED, + 971: 0x00EC, + 972: 0x00EF, + 973: 0x00EE, + 974: 0x01D0, + 976: 0x012B, + 977: 0x012F, + 978: 0x0129, + 979: 0x0135, + 980: 0x0137, + 981: 0x013A, + 982: 0x013E, + 983: 0x013C, + 984: 0x0144, + 985: 0x0148, + 986: 0x0146, + 987: 0x00F1, + 988: 0x00F3, + 989: 0x00F2, + 990: 0x00F6, + 991: 0x00F4, + 992: 0x01D2, + 993: 0x0151, + 994: 0x014D, + 995: 0x00F5, + 996: 0x0155, + 997: 0x0159, + 998: 0x0157, + 999: 0x015B, + 1000: 0x015D, + 1001: 0x0161, + 1002: 0x015F, + 1003: 0x0165, + 1004: 0x0163, + 1005: 0x00FA, + 1006: 0x00F9, + 1007: 0x00FC, + 1008: 0x00FB, + 1009: 0x016D, + 1010: 0x01D4, + 1011: 0x0171, + 1012: 0x016B, + 1013: 0x0173, + 1014: 0x016F, + 1015: 0x0169, + 1016: 0x01D8, + 1017: 0x01DC, + 1018: 0x01DA, + 1019: 0x01D6, + 1020: 0x0175, + 1021: 0x00FD, + 1022: 0x00FF, + 1023: 0x0177, + 1024: 0x017A, + 1025: 0x017E, + 1026: 0x017C, + 1410: 0x4E02, + 1411: 0x4E04, + 1412: 0x4E05, + 1413: 0x4E0C, + 1414: 0x4E12, + 1415: 0x4E1F, + 1416: 0x4E23, + 1417: 0x4E24, + 1418: 0x4E28, + 1419: 0x4E2B, + 1420: 0x4E2E, + 1421: 0x4E2F, + 1422: 0x4E30, + 1423: 0x4E35, + 1424: 0x4E40, + 1425: 0x4E41, + 1426: 0x4E44, + 1427: 0x4E47, + 1428: 0x4E51, + 1429: 0x4E5A, + 1430: 0x4E5C, + 1431: 0x4E63, + 1432: 0x4E68, + 1433: 0x4E69, + 1434: 0x4E74, + 1435: 0x4E75, + 1436: 0x4E79, + 1437: 0x4E7F, + 1438: 0x4E8D, + 1439: 0x4E96, + 1440: 0x4E97, + 1441: 0x4E9D, + 1442: 0x4EAF, + 1443: 0x4EB9, + 1444: 0x4EC3, + 1445: 0x4ED0, + 1446: 0x4EDA, + 1447: 0x4EDB, + 1448: 0x4EE0, + 1449: 0x4EE1, + 1450: 0x4EE2, + 1451: 0x4EE8, + 1452: 0x4EEF, + 1453: 0x4EF1, + 1454: 0x4EF3, + 1455: 0x4EF5, + 1456: 0x4EFD, + 1457: 0x4EFE, + 1458: 0x4EFF, + 1459: 0x4F00, + 1460: 0x4F02, + 1461: 0x4F03, + 1462: 0x4F08, + 1463: 0x4F0B, + 1464: 0x4F0C, + 1465: 0x4F12, + 1466: 0x4F15, + 1467: 0x4F16, + 1468: 0x4F17, + 1469: 0x4F19, + 1470: 0x4F2E, + 1471: 0x4F31, + 1472: 0x4F60, + 1473: 0x4F33, + 1474: 0x4F35, + 1475: 0x4F37, + 1476: 0x4F39, + 1477: 0x4F3B, + 1478: 0x4F3E, + 1479: 0x4F40, + 1480: 0x4F42, + 1481: 0x4F48, + 1482: 0x4F49, + 1483: 0x4F4B, + 1484: 0x4F4C, + 1485: 0x4F52, + 1486: 0x4F54, + 1487: 0x4F56, + 1488: 0x4F58, + 1489: 0x4F5F, + 1490: 0x4F63, + 1491: 0x4F6A, + 1492: 0x4F6C, + 1493: 0x4F6E, + 1494: 0x4F71, + 1495: 0x4F77, + 1496: 0x4F78, + 1497: 0x4F79, + 1498: 0x4F7A, + 1499: 0x4F7D, + 1500: 0x4F7E, + 1501: 0x4F81, + 1502: 0x4F82, + 1503: 0x4F84, + 1504: 0x4F85, + 1505: 0x4F89, + 1506: 0x4F8A, + 1507: 0x4F8C, + 1508: 0x4F8E, + 1509: 0x4F90, + 1510: 0x4F92, + 1511: 0x4F93, + 1512: 0x4F94, + 1513: 0x4F97, + 1514: 0x4F99, + 1515: 0x4F9A, + 1516: 0x4F9E, + 1517: 0x4F9F, + 1518: 0x4FB2, + 1519: 0x4FB7, + 1520: 0x4FB9, + 1521: 0x4FBB, + 1522: 0x4FBC, + 1523: 0x4FBD, + 1524: 0x4FBE, + 1525: 0x4FC0, + 1526: 0x4FC1, + 1527: 0x4FC5, + 1528: 0x4FC6, + 1529: 0x4FC8, + 1530: 0x4FC9, + 1531: 0x4FCB, + 1532: 0x4FCC, + 1533: 0x4FCD, + 1534: 0x4FCF, + 1535: 0x4FD2, + 1536: 0x4FDC, + 1537: 0x4FE0, + 1538: 0x4FE2, + 1539: 0x4FF0, + 1540: 0x4FF2, + 1541: 0x4FFC, + 1542: 0x4FFD, + 1543: 0x4FFF, + 1544: 0x5000, + 1545: 0x5001, + 1546: 0x5004, + 1547: 0x5007, + 1548: 0x500A, + 1549: 0x500C, + 1550: 0x500E, + 1551: 0x5010, + 1552: 0x5013, + 1553: 0x5017, + 1554: 0x5018, + 1555: 0x501B, + 1556: 0x501C, + 1557: 0x501D, + 1558: 0x501E, + 1559: 0x5022, + 1560: 0x5027, + 1561: 0x502E, + 1562: 0x5030, + 1563: 0x5032, + 1564: 0x5033, + 1565: 0x5035, + 1566: 0x5040, + 1567: 0x5041, + 1568: 0x5042, + 1569: 0x5045, + 1570: 0x5046, + 1571: 0x504A, + 1572: 0x504C, + 1573: 0x504E, + 1574: 0x5051, + 1575: 0x5052, + 1576: 0x5053, + 1577: 0x5057, + 1578: 0x5059, + 1579: 0x505F, + 1580: 0x5060, + 1581: 0x5062, + 1582: 0x5063, + 1583: 0x5066, + 1584: 0x5067, + 1585: 0x506A, + 1586: 0x506D, + 1587: 0x5070, + 1588: 0x5071, + 1589: 0x503B, + 1590: 0x5081, + 1591: 0x5083, + 1592: 0x5084, + 1593: 0x5086, + 1594: 0x508A, + 1595: 0x508E, + 1596: 0x508F, + 1597: 0x5090, + 1598: 0x5092, + 1599: 0x5093, + 1600: 0x5094, + 1601: 0x5096, + 1602: 0x509B, + 1603: 0x509C, + 1604: 0x509E, + 1605: 0x509F, + 1606: 0x50A0, + 1607: 0x50A1, + 1608: 0x50A2, + 1609: 0x50AA, + 1610: 0x50AF, + 1611: 0x50B0, + 1612: 0x50B9, + 1613: 0x50BA, + 1614: 0x50BD, + 1615: 0x50C0, + 1616: 0x50C3, + 1617: 0x50C4, + 1618: 0x50C7, + 1619: 0x50CC, + 1620: 0x50CE, + 1621: 0x50D0, + 1622: 0x50D3, + 1623: 0x50D4, + 1624: 0x50D8, + 1625: 0x50DC, + 1626: 0x50DD, + 1627: 0x50DF, + 1628: 0x50E2, + 1629: 0x50E4, + 1630: 0x50E6, + 1631: 0x50E8, + 1632: 0x50E9, + 1633: 0x50EF, + 1634: 0x50F1, + 1635: 0x50F6, + 1636: 0x50FA, + 1637: 0x50FE, + 1638: 0x5103, + 1639: 0x5106, + 1640: 0x5107, + 1641: 0x5108, + 1642: 0x510B, + 1643: 0x510C, + 1644: 0x510D, + 1645: 0x510E, + 1646: 0x50F2, + 1647: 0x5110, + 1648: 0x5117, + 1649: 0x5119, + 1650: 0x511B, + 1651: 0x511C, + 1652: 0x511D, + 1653: 0x511E, + 1654: 0x5123, + 1655: 0x5127, + 1656: 0x5128, + 1657: 0x512C, + 1658: 0x512D, + 1659: 0x512F, + 1660: 0x5131, + 1661: 0x5133, + 1662: 0x5134, + 1663: 0x5135, + 1664: 0x5138, + 1665: 0x5139, + 1666: 0x5142, + 1667: 0x514A, + 1668: 0x514F, + 1669: 0x5153, + 1670: 0x5155, + 1671: 0x5157, + 1672: 0x5158, + 1673: 0x515F, + 1674: 0x5164, + 1675: 0x5166, + 1676: 0x517E, + 1677: 0x5183, + 1678: 0x5184, + 1679: 0x518B, + 1680: 0x518E, + 1681: 0x5198, + 1682: 0x519D, + 1683: 0x51A1, + 1684: 0x51A3, + 1685: 0x51AD, + 1686: 0x51B8, + 1687: 0x51BA, + 1688: 0x51BC, + 1689: 0x51BE, + 1690: 0x51BF, + 1691: 0x51C2, + 1692: 0x51C8, + 1693: 0x51CF, + 1694: 0x51D1, + 1695: 0x51D2, + 1696: 0x51D3, + 1697: 0x51D5, + 1698: 0x51D8, + 1699: 0x51DE, + 1700: 0x51E2, + 1701: 0x51E5, + 1702: 0x51EE, + 1703: 0x51F2, + 1704: 0x51F3, + 1705: 0x51F4, + 1706: 0x51F7, + 1707: 0x5201, + 1708: 0x5202, + 1709: 0x5205, + 1710: 0x5212, + 1711: 0x5213, + 1712: 0x5215, + 1713: 0x5216, + 1714: 0x5218, + 1715: 0x5222, + 1716: 0x5228, + 1717: 0x5231, + 1718: 0x5232, + 1719: 0x5235, + 1720: 0x523C, + 1721: 0x5245, + 1722: 0x5249, + 1723: 0x5255, + 1724: 0x5257, + 1725: 0x5258, + 1726: 0x525A, + 1727: 0x525C, + 1728: 0x525F, + 1729: 0x5260, + 1730: 0x5261, + 1731: 0x5266, + 1732: 0x526E, + 1733: 0x5277, + 1734: 0x5278, + 1735: 0x5279, + 1736: 0x5280, + 1737: 0x5282, + 1738: 0x5285, + 1739: 0x528A, + 1740: 0x528C, + 1741: 0x5293, + 1742: 0x5295, + 1743: 0x5296, + 1744: 0x5297, + 1745: 0x5298, + 1746: 0x529A, + 1747: 0x529C, + 1748: 0x52A4, + 1749: 0x52A5, + 1750: 0x52A6, + 1751: 0x52A7, + 1752: 0x52AF, + 1753: 0x52B0, + 1754: 0x52B6, + 1755: 0x52B7, + 1756: 0x52B8, + 1757: 0x52BA, + 1758: 0x52BB, + 1759: 0x52BD, + 1760: 0x52C0, + 1761: 0x52C4, + 1762: 0x52C6, + 1763: 0x52C8, + 1764: 0x52CC, + 1765: 0x52CF, + 1766: 0x52D1, + 1767: 0x52D4, + 1768: 0x52D6, + 1769: 0x52DB, + 1770: 0x52DC, + 1771: 0x52E1, + 1772: 0x52E5, + 1773: 0x52E8, + 1774: 0x52E9, + 1775: 0x52EA, + 1776: 0x52EC, + 1777: 0x52F0, + 1778: 0x52F1, + 1779: 0x52F4, + 1780: 0x52F6, + 1781: 0x52F7, + 1782: 0x5300, + 1783: 0x5303, + 1784: 0x530A, + 1785: 0x530B, + 1786: 0x530C, + 1787: 0x5311, + 1788: 0x5313, + 1789: 0x5318, + 1790: 0x531B, + 1791: 0x531C, + 1792: 0x531E, + 1793: 0x531F, + 1794: 0x5325, + 1795: 0x5327, + 1796: 0x5328, + 1797: 0x5329, + 1798: 0x532B, + 1799: 0x532C, + 1800: 0x532D, + 1801: 0x5330, + 1802: 0x5332, + 1803: 0x5335, + 1804: 0x533C, + 1805: 0x533D, + 1806: 0x533E, + 1807: 0x5342, + 1808: 0x534C, + 1809: 0x534B, + 1810: 0x5359, + 1811: 0x535B, + 1812: 0x5361, + 1813: 0x5363, + 1814: 0x5365, + 1815: 0x536C, + 1816: 0x536D, + 1817: 0x5372, + 1818: 0x5379, + 1819: 0x537E, + 1820: 0x5383, + 1821: 0x5387, + 1822: 0x5388, + 1823: 0x538E, + 1824: 0x5393, + 1825: 0x5394, + 1826: 0x5399, + 1827: 0x539D, + 1828: 0x53A1, + 1829: 0x53A4, + 1830: 0x53AA, + 1831: 0x53AB, + 1832: 0x53AF, + 1833: 0x53B2, + 1834: 0x53B4, + 1835: 0x53B5, + 1836: 0x53B7, + 1837: 0x53B8, + 1838: 0x53BA, + 1839: 0x53BD, + 1840: 0x53C0, + 1841: 0x53C5, + 1842: 0x53CF, + 1843: 0x53D2, + 1844: 0x53D3, + 1845: 0x53D5, + 1846: 0x53DA, + 1847: 0x53DD, + 1848: 0x53DE, + 1849: 0x53E0, + 1850: 0x53E6, + 1851: 0x53E7, + 1852: 0x53F5, + 1853: 0x5402, + 1854: 0x5413, + 1855: 0x541A, + 1856: 0x5421, + 1857: 0x5427, + 1858: 0x5428, + 1859: 0x542A, + 1860: 0x542F, + 1861: 0x5431, + 1862: 0x5434, + 1863: 0x5435, + 1864: 0x5443, + 1865: 0x5444, + 1866: 0x5447, + 1867: 0x544D, + 1868: 0x544F, + 1869: 0x545E, + 1870: 0x5462, + 1871: 0x5464, + 1872: 0x5466, + 1873: 0x5467, + 1874: 0x5469, + 1875: 0x546B, + 1876: 0x546D, + 1877: 0x546E, + 1878: 0x5474, + 1879: 0x547F, + 1880: 0x5481, + 1881: 0x5483, + 1882: 0x5485, + 1883: 0x5488, + 1884: 0x5489, + 1885: 0x548D, + 1886: 0x5491, + 1887: 0x5495, + 1888: 0x5496, + 1889: 0x549C, + 1890: 0x549F, + 1891: 0x54A1, + 1892: 0x54A6, + 1893: 0x54A7, + 1894: 0x54A9, + 1895: 0x54AA, + 1896: 0x54AD, + 1897: 0x54AE, + 1898: 0x54B1, + 1899: 0x54B7, + 1900: 0x54B9, + 1901: 0x54BA, + 1902: 0x54BB, + 1903: 0x54BF, + 1904: 0x54C6, + 1905: 0x54CA, + 1906: 0x54CD, + 1907: 0x54CE, + 1908: 0x54E0, + 1909: 0x54EA, + 1910: 0x54EC, + 1911: 0x54EF, + 1912: 0x54F6, + 1913: 0x54FC, + 1914: 0x54FE, + 1915: 0x54FF, + 1916: 0x5500, + 1917: 0x5501, + 1918: 0x5505, + 1919: 0x5508, + 1920: 0x5509, + 1921: 0x550C, + 1922: 0x550D, + 1923: 0x550E, + 1924: 0x5515, + 1925: 0x552A, + 1926: 0x552B, + 1927: 0x5532, + 1928: 0x5535, + 1929: 0x5536, + 1930: 0x553B, + 1931: 0x553C, + 1932: 0x553D, + 1933: 0x5541, + 1934: 0x5547, + 1935: 0x5549, + 1936: 0x554A, + 1937: 0x554D, + 1938: 0x5550, + 1939: 0x5551, + 1940: 0x5558, + 1941: 0x555A, + 1942: 0x555B, + 1943: 0x555E, + 1944: 0x5560, + 1945: 0x5561, + 1946: 0x5564, + 1947: 0x5566, + 1948: 0x557F, + 1949: 0x5581, + 1950: 0x5582, + 1951: 0x5586, + 1952: 0x5588, + 1953: 0x558E, + 1954: 0x558F, + 1955: 0x5591, + 1956: 0x5592, + 1957: 0x5593, + 1958: 0x5594, + 1959: 0x5597, + 1960: 0x55A3, + 1961: 0x55A4, + 1962: 0x55AD, + 1963: 0x55B2, + 1964: 0x55BF, + 1965: 0x55C1, + 1966: 0x55C3, + 1967: 0x55C6, + 1968: 0x55C9, + 1969: 0x55CB, + 1970: 0x55CC, + 1971: 0x55CE, + 1972: 0x55D1, + 1973: 0x55D2, + 1974: 0x55D3, + 1975: 0x55D7, + 1976: 0x55D8, + 1977: 0x55DB, + 1978: 0x55DE, + 1979: 0x55E2, + 1980: 0x55E9, + 1981: 0x55F6, + 1982: 0x55FF, + 1983: 0x5605, + 1984: 0x5608, + 1985: 0x560A, + 1986: 0x560D, + 1987: 0x560E, + 1988: 0x560F, + 1989: 0x5610, + 1990: 0x5611, + 1991: 0x5612, + 1992: 0x5619, + 1993: 0x562C, + 1994: 0x5630, + 1995: 0x5633, + 1996: 0x5635, + 1997: 0x5637, + 1998: 0x5639, + 1999: 0x563B, + 2000: 0x563C, + 2001: 0x563D, + 2002: 0x563F, + 2003: 0x5640, + 2004: 0x5641, + 2005: 0x5643, + 2006: 0x5644, + 2007: 0x5646, + 2008: 0x5649, + 2009: 0x564B, + 2010: 0x564D, + 2011: 0x564F, + 2012: 0x5654, + 2013: 0x565E, + 2014: 0x5660, + 2015: 0x5661, + 2016: 0x5662, + 2017: 0x5663, + 2018: 0x5666, + 2019: 0x5669, + 2020: 0x566D, + 2021: 0x566F, + 2022: 0x5671, + 2023: 0x5672, + 2024: 0x5675, + 2025: 0x5684, + 2026: 0x5685, + 2027: 0x5688, + 2028: 0x568B, + 2029: 0x568C, + 2030: 0x5695, + 2031: 0x5699, + 2032: 0x569A, + 2033: 0x569D, + 2034: 0x569E, + 2035: 0x569F, + 2036: 0x56A6, + 2037: 0x56A7, + 2038: 0x56A8, + 2039: 0x56A9, + 2040: 0x56AB, + 2041: 0x56AC, + 2042: 0x56AD, + 2043: 0x56B1, + 2044: 0x56B3, + 2045: 0x56B7, + 2046: 0x56BE, + 2047: 0x56C5, + 2048: 0x56C9, + 2049: 0x56CA, + 2050: 0x56CB, + 2051: 0x56CF, + 2052: 0x56D0, + 2053: 0x56CC, + 2054: 0x56CD, + 2055: 0x56D9, + 2056: 0x56DC, + 2057: 0x56DD, + 2058: 0x56DF, + 2059: 0x56E1, + 2060: 0x56E4, + 2061: 0x56E5, + 2062: 0x56E6, + 2063: 0x56E7, + 2064: 0x56E8, + 2065: 0x56F1, + 2066: 0x56EB, + 2067: 0x56ED, + 2068: 0x56F6, + 2069: 0x56F7, + 2070: 0x5701, + 2071: 0x5702, + 2072: 0x5707, + 2073: 0x570A, + 2074: 0x570C, + 2075: 0x5711, + 2076: 0x5715, + 2077: 0x571A, + 2078: 0x571B, + 2079: 0x571D, + 2080: 0x5720, + 2081: 0x5722, + 2082: 0x5723, + 2083: 0x5724, + 2084: 0x5725, + 2085: 0x5729, + 2086: 0x572A, + 2087: 0x572C, + 2088: 0x572E, + 2089: 0x572F, + 2090: 0x5733, + 2091: 0x5734, + 2092: 0x573D, + 2093: 0x573E, + 2094: 0x573F, + 2095: 0x5745, + 2096: 0x5746, + 2097: 0x574C, + 2098: 0x574D, + 2099: 0x5752, + 2100: 0x5762, + 2101: 0x5765, + 2102: 0x5767, + 2103: 0x5768, + 2104: 0x576B, + 2105: 0x576D, + 2106: 0x576E, + 2107: 0x576F, + 2108: 0x5770, + 2109: 0x5771, + 2110: 0x5773, + 2111: 0x5774, + 2112: 0x5775, + 2113: 0x5777, + 2114: 0x5779, + 2115: 0x577A, + 2116: 0x577B, + 2117: 0x577C, + 2118: 0x577E, + 2119: 0x5781, + 2120: 0x5783, + 2121: 0x578C, + 2122: 0x5794, + 2123: 0x5797, + 2124: 0x5799, + 2125: 0x579A, + 2126: 0x579C, + 2127: 0x579D, + 2128: 0x579E, + 2129: 0x579F, + 2130: 0x57A1, + 2131: 0x5795, + 2132: 0x57A7, + 2133: 0x57A8, + 2134: 0x57A9, + 2135: 0x57AC, + 2136: 0x57B8, + 2137: 0x57BD, + 2138: 0x57C7, + 2139: 0x57C8, + 2140: 0x57CC, + 2141: 0x57CF, + 2142: 0x57D5, + 2143: 0x57DD, + 2144: 0x57DE, + 2145: 0x57E4, + 2146: 0x57E6, + 2147: 0x57E7, + 2148: 0x57E9, + 2149: 0x57ED, + 2150: 0x57F0, + 2151: 0x57F5, + 2152: 0x57F6, + 2153: 0x57F8, + 2154: 0x57FD, + 2155: 0x57FE, + 2156: 0x57FF, + 2157: 0x5803, + 2158: 0x5804, + 2159: 0x5808, + 2160: 0x5809, + 2161: 0x57E1, + 2162: 0x580C, + 2163: 0x580D, + 2164: 0x581B, + 2165: 0x581E, + 2166: 0x581F, + 2167: 0x5820, + 2168: 0x5826, + 2169: 0x5827, + 2170: 0x582D, + 2171: 0x5832, + 2172: 0x5839, + 2173: 0x583F, + 2174: 0x5849, + 2175: 0x584C, + 2176: 0x584D, + 2177: 0x584F, + 2178: 0x5850, + 2179: 0x5855, + 2180: 0x585F, + 2181: 0x5861, + 2182: 0x5864, + 2183: 0x5867, + 2184: 0x5868, + 2185: 0x5878, + 2186: 0x587C, + 2187: 0x587F, + 2188: 0x5880, + 2189: 0x5881, + 2190: 0x5887, + 2191: 0x5888, + 2192: 0x5889, + 2193: 0x588A, + 2194: 0x588C, + 2195: 0x588D, + 2196: 0x588F, + 2197: 0x5890, + 2198: 0x5894, + 2199: 0x5896, + 2200: 0x589D, + 2201: 0x58A0, + 2202: 0x58A1, + 2203: 0x58A2, + 2204: 0x58A6, + 2205: 0x58A9, + 2206: 0x58B1, + 2207: 0x58B2, + 2208: 0x58C4, + 2209: 0x58BC, + 2210: 0x58C2, + 2211: 0x58C8, + 2212: 0x58CD, + 2213: 0x58CE, + 2214: 0x58D0, + 2215: 0x58D2, + 2216: 0x58D4, + 2217: 0x58D6, + 2218: 0x58DA, + 2219: 0x58DD, + 2220: 0x58E1, + 2221: 0x58E2, + 2222: 0x58E9, + 2223: 0x58F3, + 2224: 0x5905, + 2225: 0x5906, + 2226: 0x590B, + 2227: 0x590C, + 2228: 0x5912, + 2229: 0x5913, + 2230: 0x5914, + 2231: 0x8641, + 2232: 0x591D, + 2233: 0x5921, + 2234: 0x5923, + 2235: 0x5924, + 2236: 0x5928, + 2237: 0x592F, + 2238: 0x5930, + 2239: 0x5933, + 2240: 0x5935, + 2241: 0x5936, + 2242: 0x593F, + 2243: 0x5943, + 2244: 0x5946, + 2245: 0x5952, + 2246: 0x5953, + 2247: 0x5959, + 2248: 0x595B, + 2249: 0x595D, + 2250: 0x595E, + 2251: 0x595F, + 2252: 0x5961, + 2253: 0x5963, + 2254: 0x596B, + 2255: 0x596D, + 2256: 0x596F, + 2257: 0x5972, + 2258: 0x5975, + 2259: 0x5976, + 2260: 0x5979, + 2261: 0x597B, + 2262: 0x597C, + 2263: 0x598B, + 2264: 0x598C, + 2265: 0x598E, + 2266: 0x5992, + 2267: 0x5995, + 2268: 0x5997, + 2269: 0x599F, + 2270: 0x59A4, + 2271: 0x59A7, + 2272: 0x59AD, + 2273: 0x59AE, + 2274: 0x59AF, + 2275: 0x59B0, + 2276: 0x59B3, + 2277: 0x59B7, + 2278: 0x59BA, + 2279: 0x59BC, + 2280: 0x59C1, + 2281: 0x59C3, + 2282: 0x59C4, + 2283: 0x59C8, + 2284: 0x59CA, + 2285: 0x59CD, + 2286: 0x59D2, + 2287: 0x59DD, + 2288: 0x59DE, + 2289: 0x59DF, + 2290: 0x59E3, + 2291: 0x59E4, + 2292: 0x59E7, + 2293: 0x59EE, + 2294: 0x59EF, + 2295: 0x59F1, + 2296: 0x59F2, + 2297: 0x59F4, + 2298: 0x59F7, + 2299: 0x5A00, + 2300: 0x5A04, + 2301: 0x5A0C, + 2302: 0x5A0D, + 2303: 0x5A0E, + 2304: 0x5A12, + 2305: 0x5A13, + 2306: 0x5A1E, + 2307: 0x5A23, + 2308: 0x5A24, + 2309: 0x5A27, + 2310: 0x5A28, + 2311: 0x5A2A, + 2312: 0x5A2D, + 2313: 0x5A30, + 2314: 0x5A44, + 2315: 0x5A45, + 2316: 0x5A47, + 2317: 0x5A48, + 2318: 0x5A4C, + 2319: 0x5A50, + 2320: 0x5A55, + 2321: 0x5A5E, + 2322: 0x5A63, + 2323: 0x5A65, + 2324: 0x5A67, + 2325: 0x5A6D, + 2326: 0x5A77, + 2327: 0x5A7A, + 2328: 0x5A7B, + 2329: 0x5A7E, + 2330: 0x5A8B, + 2331: 0x5A90, + 2332: 0x5A93, + 2333: 0x5A96, + 2334: 0x5A99, + 2335: 0x5A9C, + 2336: 0x5A9E, + 2337: 0x5A9F, + 2338: 0x5AA0, + 2339: 0x5AA2, + 2340: 0x5AA7, + 2341: 0x5AAC, + 2342: 0x5AB1, + 2343: 0x5AB2, + 2344: 0x5AB3, + 2345: 0x5AB5, + 2346: 0x5AB8, + 2347: 0x5ABA, + 2348: 0x5ABB, + 2349: 0x5ABF, + 2350: 0x5AC4, + 2351: 0x5AC6, + 2352: 0x5AC8, + 2353: 0x5ACF, + 2354: 0x5ADA, + 2355: 0x5ADC, + 2356: 0x5AE0, + 2357: 0x5AE5, + 2358: 0x5AEA, + 2359: 0x5AEE, + 2360: 0x5AF5, + 2361: 0x5AF6, + 2362: 0x5AFD, + 2363: 0x5B00, + 2364: 0x5B01, + 2365: 0x5B08, + 2366: 0x5B17, + 2367: 0x5B34, + 2368: 0x5B19, + 2369: 0x5B1B, + 2370: 0x5B1D, + 2371: 0x5B21, + 2372: 0x5B25, + 2373: 0x5B2D, + 2374: 0x5B38, + 2375: 0x5B41, + 2376: 0x5B4B, + 2377: 0x5B4C, + 2378: 0x5B52, + 2379: 0x5B56, + 2380: 0x5B5E, + 2381: 0x5B68, + 2382: 0x5B6E, + 2383: 0x5B6F, + 2384: 0x5B7C, + 2385: 0x5B7D, + 2386: 0x5B7E, + 2387: 0x5B7F, + 2388: 0x5B81, + 2389: 0x5B84, + 2390: 0x5B86, + 2391: 0x5B8A, + 2392: 0x5B8E, + 2393: 0x5B90, + 2394: 0x5B91, + 2395: 0x5B93, + 2396: 0x5B94, + 2397: 0x5B96, + 2398: 0x5BA8, + 2399: 0x5BA9, + 2400: 0x5BAC, + 2401: 0x5BAD, + 2402: 0x5BAF, + 2403: 0x5BB1, + 2404: 0x5BB2, + 2405: 0x5BB7, + 2406: 0x5BBA, + 2407: 0x5BBC, + 2408: 0x5BC0, + 2409: 0x5BC1, + 2410: 0x5BCD, + 2411: 0x5BCF, + 2412: 0x5BD6, + 2413: 0x5BD7, + 2414: 0x5BD8, + 2415: 0x5BD9, + 2416: 0x5BDA, + 2417: 0x5BE0, + 2418: 0x5BEF, + 2419: 0x5BF1, + 2420: 0x5BF4, + 2421: 0x5BFD, + 2422: 0x5C0C, + 2423: 0x5C17, + 2424: 0x5C1E, + 2425: 0x5C1F, + 2426: 0x5C23, + 2427: 0x5C26, + 2428: 0x5C29, + 2429: 0x5C2B, + 2430: 0x5C2C, + 2431: 0x5C2E, + 2432: 0x5C30, + 2433: 0x5C32, + 2434: 0x5C35, + 2435: 0x5C36, + 2436: 0x5C59, + 2437: 0x5C5A, + 2438: 0x5C5C, + 2439: 0x5C62, + 2440: 0x5C63, + 2441: 0x5C67, + 2442: 0x5C68, + 2443: 0x5C69, + 2444: 0x5C6D, + 2445: 0x5C70, + 2446: 0x5C74, + 2447: 0x5C75, + 2448: 0x5C7A, + 2449: 0x5C7B, + 2450: 0x5C7C, + 2451: 0x5C7D, + 2452: 0x5C87, + 2453: 0x5C88, + 2454: 0x5C8A, + 2455: 0x5C8F, + 2456: 0x5C92, + 2457: 0x5C9D, + 2458: 0x5C9F, + 2459: 0x5CA0, + 2460: 0x5CA2, + 2461: 0x5CA3, + 2462: 0x5CA6, + 2463: 0x5CAA, + 2464: 0x5CB2, + 2465: 0x5CB4, + 2466: 0x5CB5, + 2467: 0x5CBA, + 2468: 0x5CC9, + 2469: 0x5CCB, + 2470: 0x5CD2, + 2471: 0x5CDD, + 2472: 0x5CD7, + 2473: 0x5CEE, + 2474: 0x5CF1, + 2475: 0x5CF2, + 2476: 0x5CF4, + 2477: 0x5D01, + 2478: 0x5D06, + 2479: 0x5D0D, + 2480: 0x5D12, + 2481: 0x5D2B, + 2482: 0x5D23, + 2483: 0x5D24, + 2484: 0x5D26, + 2485: 0x5D27, + 2486: 0x5D31, + 2487: 0x5D34, + 2488: 0x5D39, + 2489: 0x5D3D, + 2490: 0x5D3F, + 2491: 0x5D42, + 2492: 0x5D43, + 2493: 0x5D46, + 2494: 0x5D48, + 2495: 0x5D55, + 2496: 0x5D51, + 2497: 0x5D59, + 2498: 0x5D4A, + 2499: 0x5D5F, + 2500: 0x5D60, + 2501: 0x5D61, + 2502: 0x5D62, + 2503: 0x5D64, + 2504: 0x5D6A, + 2505: 0x5D6D, + 2506: 0x5D70, + 2507: 0x5D79, + 2508: 0x5D7A, + 2509: 0x5D7E, + 2510: 0x5D7F, + 2511: 0x5D81, + 2512: 0x5D83, + 2513: 0x5D88, + 2514: 0x5D8A, + 2515: 0x5D92, + 2516: 0x5D93, + 2517: 0x5D94, + 2518: 0x5D95, + 2519: 0x5D99, + 2520: 0x5D9B, + 2521: 0x5D9F, + 2522: 0x5DA0, + 2523: 0x5DA7, + 2524: 0x5DAB, + 2525: 0x5DB0, + 2526: 0x5DB4, + 2527: 0x5DB8, + 2528: 0x5DB9, + 2529: 0x5DC3, + 2530: 0x5DC7, + 2531: 0x5DCB, + 2532: 0x5DD0, + 2533: 0x5DCE, + 2534: 0x5DD8, + 2535: 0x5DD9, + 2536: 0x5DE0, + 2537: 0x5DE4, + 2538: 0x5DE9, + 2539: 0x5DF8, + 2540: 0x5DF9, + 2541: 0x5E00, + 2542: 0x5E07, + 2543: 0x5E0D, + 2544: 0x5E12, + 2545: 0x5E14, + 2546: 0x5E15, + 2547: 0x5E18, + 2548: 0x5E1F, + 2549: 0x5E20, + 2550: 0x5E2E, + 2551: 0x5E28, + 2552: 0x5E32, + 2553: 0x5E35, + 2554: 0x5E3E, + 2555: 0x5E4B, + 2556: 0x5E50, + 2557: 0x5E49, + 2558: 0x5E51, + 2559: 0x5E56, + 2560: 0x5E58, + 2561: 0x5E5B, + 2562: 0x5E5C, + 2563: 0x5E5E, + 2564: 0x5E68, + 2565: 0x5E6A, + 2566: 0x5E6B, + 2567: 0x5E6C, + 2568: 0x5E6D, + 2569: 0x5E6E, + 2570: 0x5E70, + 2571: 0x5E80, + 2572: 0x5E8B, + 2573: 0x5E8E, + 2574: 0x5EA2, + 2575: 0x5EA4, + 2576: 0x5EA5, + 2577: 0x5EA8, + 2578: 0x5EAA, + 2579: 0x5EAC, + 2580: 0x5EB1, + 2581: 0x5EB3, + 2582: 0x5EBD, + 2583: 0x5EBE, + 2584: 0x5EBF, + 2585: 0x5EC6, + 2586: 0x5ECC, + 2587: 0x5ECB, + 2588: 0x5ECE, + 2589: 0x5ED1, + 2590: 0x5ED2, + 2591: 0x5ED4, + 2592: 0x5ED5, + 2593: 0x5EDC, + 2594: 0x5EDE, + 2595: 0x5EE5, + 2596: 0x5EEB, + 2597: 0x5F02, + 2598: 0x5F06, + 2599: 0x5F07, + 2600: 0x5F08, + 2601: 0x5F0E, + 2602: 0x5F19, + 2603: 0x5F1C, + 2604: 0x5F1D, + 2605: 0x5F21, + 2606: 0x5F22, + 2607: 0x5F23, + 2608: 0x5F24, + 2609: 0x5F28, + 2610: 0x5F2B, + 2611: 0x5F2C, + 2612: 0x5F2E, + 2613: 0x5F30, + 2614: 0x5F34, + 2615: 0x5F36, + 2616: 0x5F3B, + 2617: 0x5F3D, + 2618: 0x5F3F, + 2619: 0x5F40, + 2620: 0x5F44, + 2621: 0x5F45, + 2622: 0x5F47, + 2623: 0x5F4D, + 2624: 0x5F50, + 2625: 0x5F54, + 2626: 0x5F58, + 2627: 0x5F5B, + 2628: 0x5F60, + 2629: 0x5F63, + 2630: 0x5F64, + 2631: 0x5F67, + 2632: 0x5F6F, + 2633: 0x5F72, + 2634: 0x5F74, + 2635: 0x5F75, + 2636: 0x5F78, + 2637: 0x5F7A, + 2638: 0x5F7D, + 2639: 0x5F7E, + 2640: 0x5F89, + 2641: 0x5F8D, + 2642: 0x5F8F, + 2643: 0x5F96, + 2644: 0x5F9C, + 2645: 0x5F9D, + 2646: 0x5FA2, + 2647: 0x5FA7, + 2648: 0x5FAB, + 2649: 0x5FA4, + 2650: 0x5FAC, + 2651: 0x5FAF, + 2652: 0x5FB0, + 2653: 0x5FB1, + 2654: 0x5FB8, + 2655: 0x5FC4, + 2656: 0x5FC7, + 2657: 0x5FC8, + 2658: 0x5FC9, + 2659: 0x5FCB, + 2660: 0x5FD0, + 2661: 0x5FD1, + 2662: 0x5FD2, + 2663: 0x5FD3, + 2664: 0x5FD4, + 2665: 0x5FDE, + 2666: 0x5FE1, + 2667: 0x5FE2, + 2668: 0x5FE8, + 2669: 0x5FE9, + 2670: 0x5FEA, + 2671: 0x5FEC, + 2672: 0x5FED, + 2673: 0x5FEE, + 2674: 0x5FEF, + 2675: 0x5FF2, + 2676: 0x5FF3, + 2677: 0x5FF6, + 2678: 0x5FFA, + 2679: 0x5FFC, + 2680: 0x6007, + 2681: 0x600A, + 2682: 0x600D, + 2683: 0x6013, + 2684: 0x6014, + 2685: 0x6017, + 2686: 0x6018, + 2687: 0x601A, + 2688: 0x601F, + 2689: 0x6024, + 2690: 0x602D, + 2691: 0x6033, + 2692: 0x6035, + 2693: 0x6040, + 2694: 0x6047, + 2695: 0x6048, + 2696: 0x6049, + 2697: 0x604C, + 2698: 0x6051, + 2699: 0x6054, + 2700: 0x6056, + 2701: 0x6057, + 2702: 0x605D, + 2703: 0x6061, + 2704: 0x6067, + 2705: 0x6071, + 2706: 0x607E, + 2707: 0x607F, + 2708: 0x6082, + 2709: 0x6086, + 2710: 0x6088, + 2711: 0x608A, + 2712: 0x608E, + 2713: 0x6091, + 2714: 0x6093, + 2715: 0x6095, + 2716: 0x6098, + 2717: 0x609D, + 2718: 0x609E, + 2719: 0x60A2, + 2720: 0x60A4, + 2721: 0x60A5, + 2722: 0x60A8, + 2723: 0x60B0, + 2724: 0x60B1, + 2725: 0x60B7, + 2726: 0x60BB, + 2727: 0x60BE, + 2728: 0x60C2, + 2729: 0x60C4, + 2730: 0x60C8, + 2731: 0x60C9, + 2732: 0x60CA, + 2733: 0x60CB, + 2734: 0x60CE, + 2735: 0x60CF, + 2736: 0x60D4, + 2737: 0x60D5, + 2738: 0x60D9, + 2739: 0x60DB, + 2740: 0x60DD, + 2741: 0x60DE, + 2742: 0x60E2, + 2743: 0x60E5, + 2744: 0x60F2, + 2745: 0x60F5, + 2746: 0x60F8, + 2747: 0x60FC, + 2748: 0x60FD, + 2749: 0x6102, + 2750: 0x6107, + 2751: 0x610A, + 2752: 0x610C, + 2753: 0x6110, + 2754: 0x6111, + 2755: 0x6112, + 2756: 0x6113, + 2757: 0x6114, + 2758: 0x6116, + 2759: 0x6117, + 2760: 0x6119, + 2761: 0x611C, + 2762: 0x611E, + 2763: 0x6122, + 2764: 0x612A, + 2765: 0x612B, + 2766: 0x6130, + 2767: 0x6131, + 2768: 0x6135, + 2769: 0x6136, + 2770: 0x6137, + 2771: 0x6139, + 2772: 0x6141, + 2773: 0x6145, + 2774: 0x6146, + 2775: 0x6149, + 2776: 0x615E, + 2777: 0x6160, + 2778: 0x616C, + 2779: 0x6172, + 2780: 0x6178, + 2781: 0x617B, + 2782: 0x617C, + 2783: 0x617F, + 2784: 0x6180, + 2785: 0x6181, + 2786: 0x6183, + 2787: 0x6184, + 2788: 0x618B, + 2789: 0x618D, + 2790: 0x6192, + 2791: 0x6193, + 2792: 0x6197, + 2793: 0x6198, + 2794: 0x619C, + 2795: 0x619D, + 2796: 0x619F, + 2797: 0x61A0, + 2798: 0x61A5, + 2799: 0x61A8, + 2800: 0x61AA, + 2801: 0x61AD, + 2802: 0x61B8, + 2803: 0x61B9, + 2804: 0x61BC, + 2805: 0x61C0, + 2806: 0x61C1, + 2807: 0x61C2, + 2808: 0x61CE, + 2809: 0x61CF, + 2810: 0x61D5, + 2811: 0x61DC, + 2812: 0x61DD, + 2813: 0x61DE, + 2814: 0x61DF, + 2815: 0x61E1, + 2816: 0x61E2, + 2817: 0x61E7, + 2818: 0x61E9, + 2819: 0x61E5, + 2820: 0x61EC, + 2821: 0x61ED, + 2822: 0x61EF, + 2823: 0x6201, + 2824: 0x6203, + 2825: 0x6204, + 2826: 0x6207, + 2827: 0x6213, + 2828: 0x6215, + 2829: 0x621C, + 2830: 0x6220, + 2831: 0x6222, + 2832: 0x6223, + 2833: 0x6227, + 2834: 0x6229, + 2835: 0x622B, + 2836: 0x6239, + 2837: 0x623D, + 2838: 0x6242, + 2839: 0x6243, + 2840: 0x6244, + 2841: 0x6246, + 2842: 0x624C, + 2843: 0x6250, + 2844: 0x6251, + 2845: 0x6252, + 2846: 0x6254, + 2847: 0x6256, + 2848: 0x625A, + 2849: 0x625C, + 2850: 0x6264, + 2851: 0x626D, + 2852: 0x626F, + 2853: 0x6273, + 2854: 0x627A, + 2855: 0x627D, + 2856: 0x628D, + 2857: 0x628E, + 2858: 0x628F, + 2859: 0x6290, + 2860: 0x62A6, + 2861: 0x62A8, + 2862: 0x62B3, + 2863: 0x62B6, + 2864: 0x62B7, + 2865: 0x62BA, + 2866: 0x62BE, + 2867: 0x62BF, + 2868: 0x62C4, + 2869: 0x62CE, + 2870: 0x62D5, + 2871: 0x62D6, + 2872: 0x62DA, + 2873: 0x62EA, + 2874: 0x62F2, + 2875: 0x62F4, + 2876: 0x62FC, + 2877: 0x62FD, + 2878: 0x6303, + 2879: 0x6304, + 2880: 0x630A, + 2881: 0x630B, + 2882: 0x630D, + 2883: 0x6310, + 2884: 0x6313, + 2885: 0x6316, + 2886: 0x6318, + 2887: 0x6329, + 2888: 0x632A, + 2889: 0x632D, + 2890: 0x6335, + 2891: 0x6336, + 2892: 0x6339, + 2893: 0x633C, + 2894: 0x6341, + 2895: 0x6342, + 2896: 0x6343, + 2897: 0x6344, + 2898: 0x6346, + 2899: 0x634A, + 2900: 0x634B, + 2901: 0x634E, + 2902: 0x6352, + 2903: 0x6353, + 2904: 0x6354, + 2905: 0x6358, + 2906: 0x635B, + 2907: 0x6365, + 2908: 0x6366, + 2909: 0x636C, + 2910: 0x636D, + 2911: 0x6371, + 2912: 0x6374, + 2913: 0x6375, + 2914: 0x6378, + 2915: 0x637C, + 2916: 0x637D, + 2917: 0x637F, + 2918: 0x6382, + 2919: 0x6384, + 2920: 0x6387, + 2921: 0x638A, + 2922: 0x6390, + 2923: 0x6394, + 2924: 0x6395, + 2925: 0x6399, + 2926: 0x639A, + 2927: 0x639E, + 2928: 0x63A4, + 2929: 0x63A6, + 2930: 0x63AD, + 2931: 0x63AE, + 2932: 0x63AF, + 2933: 0x63BD, + 2934: 0x63C1, + 2935: 0x63C5, + 2936: 0x63C8, + 2937: 0x63CE, + 2938: 0x63D1, + 2939: 0x63D3, + 2940: 0x63D4, + 2941: 0x63D5, + 2942: 0x63DC, + 2943: 0x63E0, + 2944: 0x63E5, + 2945: 0x63EA, + 2946: 0x63EC, + 2947: 0x63F2, + 2948: 0x63F3, + 2949: 0x63F5, + 2950: 0x63F8, + 2951: 0x63F9, + 2952: 0x6409, + 2953: 0x640A, + 2954: 0x6410, + 2955: 0x6412, + 2956: 0x6414, + 2957: 0x6418, + 2958: 0x641E, + 2959: 0x6420, + 2960: 0x6422, + 2961: 0x6424, + 2962: 0x6425, + 2963: 0x6429, + 2964: 0x642A, + 2965: 0x642F, + 2966: 0x6430, + 2967: 0x6435, + 2968: 0x643D, + 2969: 0x643F, + 2970: 0x644B, + 2971: 0x644F, + 2972: 0x6451, + 2973: 0x6452, + 2974: 0x6453, + 2975: 0x6454, + 2976: 0x645A, + 2977: 0x645B, + 2978: 0x645C, + 2979: 0x645D, + 2980: 0x645F, + 2981: 0x6460, + 2982: 0x6461, + 2983: 0x6463, + 2984: 0x646D, + 2985: 0x6473, + 2986: 0x6474, + 2987: 0x647B, + 2988: 0x647D, + 2989: 0x6485, + 2990: 0x6487, + 2991: 0x648F, + 2992: 0x6490, + 2993: 0x6491, + 2994: 0x6498, + 2995: 0x6499, + 2996: 0x649B, + 2997: 0x649D, + 2998: 0x649F, + 2999: 0x64A1, + 3000: 0x64A3, + 3001: 0x64A6, + 3002: 0x64A8, + 3003: 0x64AC, + 3004: 0x64B3, + 3005: 0x64BD, + 3006: 0x64BE, + 3007: 0x64BF, + 3008: 0x64C4, + 3009: 0x64C9, + 3010: 0x64CA, + 3011: 0x64CB, + 3012: 0x64CC, + 3013: 0x64CE, + 3014: 0x64D0, + 3015: 0x64D1, + 3016: 0x64D5, + 3017: 0x64D7, + 3018: 0x64E4, + 3019: 0x64E5, + 3020: 0x64E9, + 3021: 0x64EA, + 3022: 0x64ED, + 3023: 0x64F0, + 3024: 0x64F5, + 3025: 0x64F7, + 3026: 0x64FB, + 3027: 0x64FF, + 3028: 0x6501, + 3029: 0x6504, + 3030: 0x6508, + 3031: 0x6509, + 3032: 0x650A, + 3033: 0x650F, + 3034: 0x6513, + 3035: 0x6514, + 3036: 0x6516, + 3037: 0x6519, + 3038: 0x651B, + 3039: 0x651E, + 3040: 0x651F, + 3041: 0x6522, + 3042: 0x6526, + 3043: 0x6529, + 3044: 0x652E, + 3045: 0x6531, + 3046: 0x653A, + 3047: 0x653C, + 3048: 0x653D, + 3049: 0x6543, + 3050: 0x6547, + 3051: 0x6549, + 3052: 0x6550, + 3053: 0x6552, + 3054: 0x6554, + 3055: 0x655F, + 3056: 0x6560, + 3057: 0x6567, + 3058: 0x656B, + 3059: 0x657A, + 3060: 0x657D, + 3061: 0x6581, + 3062: 0x6585, + 3063: 0x658A, + 3064: 0x6592, + 3065: 0x6595, + 3066: 0x6598, + 3067: 0x659D, + 3068: 0x65A0, + 3069: 0x65A3, + 3070: 0x65A6, + 3071: 0x65AE, + 3072: 0x65B2, + 3073: 0x65B3, + 3074: 0x65B4, + 3075: 0x65BF, + 3076: 0x65C2, + 3077: 0x65C8, + 3078: 0x65C9, + 3079: 0x65CE, + 3080: 0x65D0, + 3081: 0x65D4, + 3082: 0x65D6, + 3083: 0x65D8, + 3084: 0x65DF, + 3085: 0x65F0, + 3086: 0x65F2, + 3087: 0x65F4, + 3088: 0x65F5, + 3089: 0x65F9, + 3090: 0x65FE, + 3091: 0x65FF, + 3092: 0x6600, + 3093: 0x6604, + 3094: 0x6608, + 3095: 0x6609, + 3096: 0x660D, + 3097: 0x6611, + 3098: 0x6612, + 3099: 0x6615, + 3100: 0x6616, + 3101: 0x661D, + 3102: 0x661E, + 3103: 0x6621, + 3104: 0x6622, + 3105: 0x6623, + 3106: 0x6624, + 3107: 0x6626, + 3108: 0x6629, + 3109: 0x662A, + 3110: 0x662B, + 3111: 0x662C, + 3112: 0x662E, + 3113: 0x6630, + 3114: 0x6631, + 3115: 0x6633, + 3116: 0x6639, + 3117: 0x6637, + 3118: 0x6640, + 3119: 0x6645, + 3120: 0x6646, + 3121: 0x664A, + 3122: 0x664C, + 3123: 0x6651, + 3124: 0x664E, + 3125: 0x6657, + 3126: 0x6658, + 3127: 0x6659, + 3128: 0x665B, + 3129: 0x665C, + 3130: 0x6660, + 3131: 0x6661, + 3132: 0x66FB, + 3133: 0x666A, + 3134: 0x666B, + 3135: 0x666C, + 3136: 0x667E, + 3137: 0x6673, + 3138: 0x6675, + 3139: 0x667F, + 3140: 0x6677, + 3141: 0x6678, + 3142: 0x6679, + 3143: 0x667B, + 3144: 0x6680, + 3145: 0x667C, + 3146: 0x668B, + 3147: 0x668C, + 3148: 0x668D, + 3149: 0x6690, + 3150: 0x6692, + 3151: 0x6699, + 3152: 0x669A, + 3153: 0x669B, + 3154: 0x669C, + 3155: 0x669F, + 3156: 0x66A0, + 3157: 0x66A4, + 3158: 0x66AD, + 3159: 0x66B1, + 3160: 0x66B2, + 3161: 0x66B5, + 3162: 0x66BB, + 3163: 0x66BF, + 3164: 0x66C0, + 3165: 0x66C2, + 3166: 0x66C3, + 3167: 0x66C8, + 3168: 0x66CC, + 3169: 0x66CE, + 3170: 0x66CF, + 3171: 0x66D4, + 3172: 0x66DB, + 3173: 0x66DF, + 3174: 0x66E8, + 3175: 0x66EB, + 3176: 0x66EC, + 3177: 0x66EE, + 3178: 0x66FA, + 3179: 0x6705, + 3180: 0x6707, + 3181: 0x670E, + 3182: 0x6713, + 3183: 0x6719, + 3184: 0x671C, + 3185: 0x6720, + 3186: 0x6722, + 3187: 0x6733, + 3188: 0x673E, + 3189: 0x6745, + 3190: 0x6747, + 3191: 0x6748, + 3192: 0x674C, + 3193: 0x6754, + 3194: 0x6755, + 3195: 0x675D, + 3196: 0x6766, + 3197: 0x676C, + 3198: 0x676E, + 3199: 0x6774, + 3200: 0x6776, + 3201: 0x677B, + 3202: 0x6781, + 3203: 0x6784, + 3204: 0x678E, + 3205: 0x678F, + 3206: 0x6791, + 3207: 0x6793, + 3208: 0x6796, + 3209: 0x6798, + 3210: 0x6799, + 3211: 0x679B, + 3212: 0x67B0, + 3213: 0x67B1, + 3214: 0x67B2, + 3215: 0x67B5, + 3216: 0x67BB, + 3217: 0x67BC, + 3218: 0x67BD, + 3219: 0x67F9, + 3220: 0x67C0, + 3221: 0x67C2, + 3222: 0x67C3, + 3223: 0x67C5, + 3224: 0x67C8, + 3225: 0x67C9, + 3226: 0x67D2, + 3227: 0x67D7, + 3228: 0x67D9, + 3229: 0x67DC, + 3230: 0x67E1, + 3231: 0x67E6, + 3232: 0x67F0, + 3233: 0x67F2, + 3234: 0x67F6, + 3235: 0x67F7, + 3236: 0x6852, + 3237: 0x6814, + 3238: 0x6819, + 3239: 0x681D, + 3240: 0x681F, + 3241: 0x6828, + 3242: 0x6827, + 3243: 0x682C, + 3244: 0x682D, + 3245: 0x682F, + 3246: 0x6830, + 3247: 0x6831, + 3248: 0x6833, + 3249: 0x683B, + 3250: 0x683F, + 3251: 0x6844, + 3252: 0x6845, + 3253: 0x684A, + 3254: 0x684C, + 3255: 0x6855, + 3256: 0x6857, + 3257: 0x6858, + 3258: 0x685B, + 3259: 0x686B, + 3260: 0x686E, + 3261: 0x686F, + 3262: 0x6870, + 3263: 0x6871, + 3264: 0x6872, + 3265: 0x6875, + 3266: 0x6879, + 3267: 0x687A, + 3268: 0x687B, + 3269: 0x687C, + 3270: 0x6882, + 3271: 0x6884, + 3272: 0x6886, + 3273: 0x6888, + 3274: 0x6896, + 3275: 0x6898, + 3276: 0x689A, + 3277: 0x689C, + 3278: 0x68A1, + 3279: 0x68A3, + 3280: 0x68A5, + 3281: 0x68A9, + 3282: 0x68AA, + 3283: 0x68AE, + 3284: 0x68B2, + 3285: 0x68BB, + 3286: 0x68C5, + 3287: 0x68C8, + 3288: 0x68CC, + 3289: 0x68CF, + 3290: 0x68D0, + 3291: 0x68D1, + 3292: 0x68D3, + 3293: 0x68D6, + 3294: 0x68D9, + 3295: 0x68DC, + 3296: 0x68DD, + 3297: 0x68E5, + 3298: 0x68E8, + 3299: 0x68EA, + 3300: 0x68EB, + 3301: 0x68EC, + 3302: 0x68ED, + 3303: 0x68F0, + 3304: 0x68F1, + 3305: 0x68F5, + 3306: 0x68F6, + 3307: 0x68FB, + 3308: 0x68FC, + 3309: 0x68FD, + 3310: 0x6906, + 3311: 0x6909, + 3312: 0x690A, + 3313: 0x6910, + 3314: 0x6911, + 3315: 0x6913, + 3316: 0x6916, + 3317: 0x6917, + 3318: 0x6931, + 3319: 0x6933, + 3320: 0x6935, + 3321: 0x6938, + 3322: 0x693B, + 3323: 0x6942, + 3324: 0x6945, + 3325: 0x6949, + 3326: 0x694E, + 3327: 0x6957, + 3328: 0x695B, + 3329: 0x6963, + 3330: 0x6964, + 3331: 0x6965, + 3332: 0x6966, + 3333: 0x6968, + 3334: 0x6969, + 3335: 0x696C, + 3336: 0x6970, + 3337: 0x6971, + 3338: 0x6972, + 3339: 0x697A, + 3340: 0x697B, + 3341: 0x697F, + 3342: 0x6980, + 3343: 0x698D, + 3344: 0x6992, + 3345: 0x6996, + 3346: 0x6998, + 3347: 0x69A1, + 3348: 0x69A5, + 3349: 0x69A6, + 3350: 0x69A8, + 3351: 0x69AB, + 3352: 0x69AD, + 3353: 0x69AF, + 3354: 0x69B7, + 3355: 0x69B8, + 3356: 0x69BA, + 3357: 0x69BC, + 3358: 0x69C5, + 3359: 0x69C8, + 3360: 0x69D1, + 3361: 0x69D6, + 3362: 0x69D7, + 3363: 0x69E2, + 3364: 0x69E5, + 3365: 0x69EE, + 3366: 0x69EF, + 3367: 0x69F1, + 3368: 0x69F3, + 3369: 0x69F5, + 3370: 0x69FE, + 3371: 0x6A00, + 3372: 0x6A01, + 3373: 0x6A03, + 3374: 0x6A0F, + 3375: 0x6A11, + 3376: 0x6A15, + 3377: 0x6A1A, + 3378: 0x6A1D, + 3379: 0x6A20, + 3380: 0x6A24, + 3381: 0x6A28, + 3382: 0x6A30, + 3383: 0x6A32, + 3384: 0x6A34, + 3385: 0x6A37, + 3386: 0x6A3B, + 3387: 0x6A3E, + 3388: 0x6A3F, + 3389: 0x6A45, + 3390: 0x6A46, + 3391: 0x6A49, + 3392: 0x6A4A, + 3393: 0x6A4E, + 3394: 0x6A50, + 3395: 0x6A51, + 3396: 0x6A52, + 3397: 0x6A55, + 3398: 0x6A56, + 3399: 0x6A5B, + 3400: 0x6A64, + 3401: 0x6A67, + 3402: 0x6A6A, + 3403: 0x6A71, + 3404: 0x6A73, + 3405: 0x6A7E, + 3406: 0x6A81, + 3407: 0x6A83, + 3408: 0x6A86, + 3409: 0x6A87, + 3410: 0x6A89, + 3411: 0x6A8B, + 3412: 0x6A91, + 3413: 0x6A9B, + 3414: 0x6A9D, + 3415: 0x6A9E, + 3416: 0x6A9F, + 3417: 0x6AA5, + 3418: 0x6AAB, + 3419: 0x6AAF, + 3420: 0x6AB0, + 3421: 0x6AB1, + 3422: 0x6AB4, + 3423: 0x6ABD, + 3424: 0x6ABE, + 3425: 0x6ABF, + 3426: 0x6AC6, + 3427: 0x6AC9, + 3428: 0x6AC8, + 3429: 0x6ACC, + 3430: 0x6AD0, + 3431: 0x6AD4, + 3432: 0x6AD5, + 3433: 0x6AD6, + 3434: 0x6ADC, + 3435: 0x6ADD, + 3436: 0x6AE4, + 3437: 0x6AE7, + 3438: 0x6AEC, + 3439: 0x6AF0, + 3440: 0x6AF1, + 3441: 0x6AF2, + 3442: 0x6AFC, + 3443: 0x6AFD, + 3444: 0x6B02, + 3445: 0x6B03, + 3446: 0x6B06, + 3447: 0x6B07, + 3448: 0x6B09, + 3449: 0x6B0F, + 3450: 0x6B10, + 3451: 0x6B11, + 3452: 0x6B17, + 3453: 0x6B1B, + 3454: 0x6B1E, + 3455: 0x6B24, + 3456: 0x6B28, + 3457: 0x6B2B, + 3458: 0x6B2C, + 3459: 0x6B2F, + 3460: 0x6B35, + 3461: 0x6B36, + 3462: 0x6B3B, + 3463: 0x6B3F, + 3464: 0x6B46, + 3465: 0x6B4A, + 3466: 0x6B4D, + 3467: 0x6B52, + 3468: 0x6B56, + 3469: 0x6B58, + 3470: 0x6B5D, + 3471: 0x6B60, + 3472: 0x6B67, + 3473: 0x6B6B, + 3474: 0x6B6E, + 3475: 0x6B70, + 3476: 0x6B75, + 3477: 0x6B7D, + 3478: 0x6B7E, + 3479: 0x6B82, + 3480: 0x6B85, + 3481: 0x6B97, + 3482: 0x6B9B, + 3483: 0x6B9F, + 3484: 0x6BA0, + 3485: 0x6BA2, + 3486: 0x6BA3, + 3487: 0x6BA8, + 3488: 0x6BA9, + 3489: 0x6BAC, + 3490: 0x6BAD, + 3491: 0x6BAE, + 3492: 0x6BB0, + 3493: 0x6BB8, + 3494: 0x6BB9, + 3495: 0x6BBD, + 3496: 0x6BBE, + 3497: 0x6BC3, + 3498: 0x6BC4, + 3499: 0x6BC9, + 3500: 0x6BCC, + 3501: 0x6BD6, + 3502: 0x6BDA, + 3503: 0x6BE1, + 3504: 0x6BE3, + 3505: 0x6BE6, + 3506: 0x6BE7, + 3507: 0x6BEE, + 3508: 0x6BF1, + 3509: 0x6BF7, + 3510: 0x6BF9, + 3511: 0x6BFF, + 3512: 0x6C02, + 3513: 0x6C04, + 3514: 0x6C05, + 3515: 0x6C09, + 3516: 0x6C0D, + 3517: 0x6C0E, + 3518: 0x6C10, + 3519: 0x6C12, + 3520: 0x6C19, + 3521: 0x6C1F, + 3522: 0x6C26, + 3523: 0x6C27, + 3524: 0x6C28, + 3525: 0x6C2C, + 3526: 0x6C2E, + 3527: 0x6C33, + 3528: 0x6C35, + 3529: 0x6C36, + 3530: 0x6C3A, + 3531: 0x6C3B, + 3532: 0x6C3F, + 3533: 0x6C4A, + 3534: 0x6C4B, + 3535: 0x6C4D, + 3536: 0x6C4F, + 3537: 0x6C52, + 3538: 0x6C54, + 3539: 0x6C59, + 3540: 0x6C5B, + 3541: 0x6C5C, + 3542: 0x6C6B, + 3543: 0x6C6D, + 3544: 0x6C6F, + 3545: 0x6C74, + 3546: 0x6C76, + 3547: 0x6C78, + 3548: 0x6C79, + 3549: 0x6C7B, + 3550: 0x6C85, + 3551: 0x6C86, + 3552: 0x6C87, + 3553: 0x6C89, + 3554: 0x6C94, + 3555: 0x6C95, + 3556: 0x6C97, + 3557: 0x6C98, + 3558: 0x6C9C, + 3559: 0x6C9F, + 3560: 0x6CB0, + 3561: 0x6CB2, + 3562: 0x6CB4, + 3563: 0x6CC2, + 3564: 0x6CC6, + 3565: 0x6CCD, + 3566: 0x6CCF, + 3567: 0x6CD0, + 3568: 0x6CD1, + 3569: 0x6CD2, + 3570: 0x6CD4, + 3571: 0x6CD6, + 3572: 0x6CDA, + 3573: 0x6CDC, + 3574: 0x6CE0, + 3575: 0x6CE7, + 3576: 0x6CE9, + 3577: 0x6CEB, + 3578: 0x6CEC, + 3579: 0x6CEE, + 3580: 0x6CF2, + 3581: 0x6CF4, + 3582: 0x6D04, + 3583: 0x6D07, + 3584: 0x6D0A, + 3585: 0x6D0E, + 3586: 0x6D0F, + 3587: 0x6D11, + 3588: 0x6D13, + 3589: 0x6D1A, + 3590: 0x6D26, + 3591: 0x6D27, + 3592: 0x6D28, + 3593: 0x6C67, + 3594: 0x6D2E, + 3595: 0x6D2F, + 3596: 0x6D31, + 3597: 0x6D39, + 3598: 0x6D3C, + 3599: 0x6D3F, + 3600: 0x6D57, + 3601: 0x6D5E, + 3602: 0x6D5F, + 3603: 0x6D61, + 3604: 0x6D65, + 3605: 0x6D67, + 3606: 0x6D6F, + 3607: 0x6D70, + 3608: 0x6D7C, + 3609: 0x6D82, + 3610: 0x6D87, + 3611: 0x6D91, + 3612: 0x6D92, + 3613: 0x6D94, + 3614: 0x6D96, + 3615: 0x6D97, + 3616: 0x6D98, + 3617: 0x6DAA, + 3618: 0x6DAC, + 3619: 0x6DB4, + 3620: 0x6DB7, + 3621: 0x6DB9, + 3622: 0x6DBD, + 3623: 0x6DBF, + 3624: 0x6DC4, + 3625: 0x6DC8, + 3626: 0x6DCA, + 3627: 0x6DCE, + 3628: 0x6DCF, + 3629: 0x6DD6, + 3630: 0x6DDB, + 3631: 0x6DDD, + 3632: 0x6DDF, + 3633: 0x6DE0, + 3634: 0x6DE2, + 3635: 0x6DE5, + 3636: 0x6DE9, + 3637: 0x6DEF, + 3638: 0x6DF0, + 3639: 0x6DF4, + 3640: 0x6DF6, + 3641: 0x6DFC, + 3642: 0x6E00, + 3643: 0x6E04, + 3644: 0x6E1E, + 3645: 0x6E22, + 3646: 0x6E27, + 3647: 0x6E32, + 3648: 0x6E36, + 3649: 0x6E39, + 3650: 0x6E3B, + 3651: 0x6E3C, + 3652: 0x6E44, + 3653: 0x6E45, + 3654: 0x6E48, + 3655: 0x6E49, + 3656: 0x6E4B, + 3657: 0x6E4F, + 3658: 0x6E51, + 3659: 0x6E52, + 3660: 0x6E53, + 3661: 0x6E54, + 3662: 0x6E57, + 3663: 0x6E5C, + 3664: 0x6E5D, + 3665: 0x6E5E, + 3666: 0x6E62, + 3667: 0x6E63, + 3668: 0x6E68, + 3669: 0x6E73, + 3670: 0x6E7B, + 3671: 0x6E7D, + 3672: 0x6E8D, + 3673: 0x6E93, + 3674: 0x6E99, + 3675: 0x6EA0, + 3676: 0x6EA7, + 3677: 0x6EAD, + 3678: 0x6EAE, + 3679: 0x6EB1, + 3680: 0x6EB3, + 3681: 0x6EBB, + 3682: 0x6EBF, + 3683: 0x6EC0, + 3684: 0x6EC1, + 3685: 0x6EC3, + 3686: 0x6EC7, + 3687: 0x6EC8, + 3688: 0x6ECA, + 3689: 0x6ECD, + 3690: 0x6ECE, + 3691: 0x6ECF, + 3692: 0x6EEB, + 3693: 0x6EED, + 3694: 0x6EEE, + 3695: 0x6EF9, + 3696: 0x6EFB, + 3697: 0x6EFD, + 3698: 0x6F04, + 3699: 0x6F08, + 3700: 0x6F0A, + 3701: 0x6F0C, + 3702: 0x6F0D, + 3703: 0x6F16, + 3704: 0x6F18, + 3705: 0x6F1A, + 3706: 0x6F1B, + 3707: 0x6F26, + 3708: 0x6F29, + 3709: 0x6F2A, + 3710: 0x6F2F, + 3711: 0x6F30, + 3712: 0x6F33, + 3713: 0x6F36, + 3714: 0x6F3B, + 3715: 0x6F3C, + 3716: 0x6F2D, + 3717: 0x6F4F, + 3718: 0x6F51, + 3719: 0x6F52, + 3720: 0x6F53, + 3721: 0x6F57, + 3722: 0x6F59, + 3723: 0x6F5A, + 3724: 0x6F5D, + 3725: 0x6F5E, + 3726: 0x6F61, + 3727: 0x6F62, + 3728: 0x6F68, + 3729: 0x6F6C, + 3730: 0x6F7D, + 3731: 0x6F7E, + 3732: 0x6F83, + 3733: 0x6F87, + 3734: 0x6F88, + 3735: 0x6F8B, + 3736: 0x6F8C, + 3737: 0x6F8D, + 3738: 0x6F90, + 3739: 0x6F92, + 3740: 0x6F93, + 3741: 0x6F94, + 3742: 0x6F96, + 3743: 0x6F9A, + 3744: 0x6F9F, + 3745: 0x6FA0, + 3746: 0x6FA5, + 3747: 0x6FA6, + 3748: 0x6FA7, + 3749: 0x6FA8, + 3750: 0x6FAE, + 3751: 0x6FAF, + 3752: 0x6FB0, + 3753: 0x6FB5, + 3754: 0x6FB6, + 3755: 0x6FBC, + 3756: 0x6FC5, + 3757: 0x6FC7, + 3758: 0x6FC8, + 3759: 0x6FCA, + 3760: 0x6FDA, + 3761: 0x6FDE, + 3762: 0x6FE8, + 3763: 0x6FE9, + 3764: 0x6FF0, + 3765: 0x6FF5, + 3766: 0x6FF9, + 3767: 0x6FFC, + 3768: 0x6FFD, + 3769: 0x7000, + 3770: 0x7005, + 3771: 0x7006, + 3772: 0x7007, + 3773: 0x700D, + 3774: 0x7017, + 3775: 0x7020, + 3776: 0x7023, + 3777: 0x702F, + 3778: 0x7034, + 3779: 0x7037, + 3780: 0x7039, + 3781: 0x703C, + 3782: 0x7043, + 3783: 0x7044, + 3784: 0x7048, + 3785: 0x7049, + 3786: 0x704A, + 3787: 0x704B, + 3788: 0x7054, + 3789: 0x7055, + 3790: 0x705D, + 3791: 0x705E, + 3792: 0x704E, + 3793: 0x7064, + 3794: 0x7065, + 3795: 0x706C, + 3796: 0x706E, + 3797: 0x7075, + 3798: 0x7076, + 3799: 0x707E, + 3800: 0x7081, + 3801: 0x7085, + 3802: 0x7086, + 3803: 0x7094, + 3804: 0x7095, + 3805: 0x7096, + 3806: 0x7097, + 3807: 0x7098, + 3808: 0x709B, + 3809: 0x70A4, + 3810: 0x70AB, + 3811: 0x70B0, + 3812: 0x70B1, + 3813: 0x70B4, + 3814: 0x70B7, + 3815: 0x70CA, + 3816: 0x70D1, + 3817: 0x70D3, + 3818: 0x70D4, + 3819: 0x70D5, + 3820: 0x70D6, + 3821: 0x70D8, + 3822: 0x70DC, + 3823: 0x70E4, + 3824: 0x70FA, + 3825: 0x7103, + 3826: 0x7104, + 3827: 0x7105, + 3828: 0x7106, + 3829: 0x7107, + 3830: 0x710B, + 3831: 0x710C, + 3832: 0x710F, + 3833: 0x711E, + 3834: 0x7120, + 3835: 0x712B, + 3836: 0x712D, + 3837: 0x712F, + 3838: 0x7130, + 3839: 0x7131, + 3840: 0x7138, + 3841: 0x7141, + 3842: 0x7145, + 3843: 0x7146, + 3844: 0x7147, + 3845: 0x714A, + 3846: 0x714B, + 3847: 0x7150, + 3848: 0x7152, + 3849: 0x7157, + 3850: 0x715A, + 3851: 0x715C, + 3852: 0x715E, + 3853: 0x7160, + 3854: 0x7168, + 3855: 0x7179, + 3856: 0x7180, + 3857: 0x7185, + 3858: 0x7187, + 3859: 0x718C, + 3860: 0x7192, + 3861: 0x719A, + 3862: 0x719B, + 3863: 0x71A0, + 3864: 0x71A2, + 3865: 0x71AF, + 3866: 0x71B0, + 3867: 0x71B2, + 3868: 0x71B3, + 3869: 0x71BA, + 3870: 0x71BF, + 3871: 0x71C0, + 3872: 0x71C1, + 3873: 0x71C4, + 3874: 0x71CB, + 3875: 0x71CC, + 3876: 0x71D3, + 3877: 0x71D6, + 3878: 0x71D9, + 3879: 0x71DA, + 3880: 0x71DC, + 3881: 0x71F8, + 3882: 0x71FE, + 3883: 0x7200, + 3884: 0x7207, + 3885: 0x7208, + 3886: 0x7209, + 3887: 0x7213, + 3888: 0x7217, + 3889: 0x721A, + 3890: 0x721D, + 3891: 0x721F, + 3892: 0x7224, + 3893: 0x722B, + 3894: 0x722F, + 3895: 0x7234, + 3896: 0x7238, + 3897: 0x7239, + 3898: 0x7241, + 3899: 0x7242, + 3900: 0x7243, + 3901: 0x7245, + 3902: 0x724E, + 3903: 0x724F, + 3904: 0x7250, + 3905: 0x7253, + 3906: 0x7255, + 3907: 0x7256, + 3908: 0x725A, + 3909: 0x725C, + 3910: 0x725E, + 3911: 0x7260, + 3912: 0x7263, + 3913: 0x7268, + 3914: 0x726B, + 3915: 0x726E, + 3916: 0x726F, + 3917: 0x7271, + 3918: 0x7277, + 3919: 0x7278, + 3920: 0x727B, + 3921: 0x727C, + 3922: 0x727F, + 3923: 0x7284, + 3924: 0x7289, + 3925: 0x728D, + 3926: 0x728E, + 3927: 0x7293, + 3928: 0x729B, + 3929: 0x72A8, + 3930: 0x72AD, + 3931: 0x72AE, + 3932: 0x72B1, + 3933: 0x72B4, + 3934: 0x72BE, + 3935: 0x72C1, + 3936: 0x72C7, + 3937: 0x72C9, + 3938: 0x72CC, + 3939: 0x72D5, + 3940: 0x72D6, + 3941: 0x72D8, + 3942: 0x72DF, + 3943: 0x72E5, + 3944: 0x72F3, + 3945: 0x72F4, + 3946: 0x72FA, + 3947: 0x72FB, + 3948: 0x72FE, + 3949: 0x7302, + 3950: 0x7304, + 3951: 0x7305, + 3952: 0x7307, + 3953: 0x730B, + 3954: 0x730D, + 3955: 0x7312, + 3956: 0x7313, + 3957: 0x7318, + 3958: 0x7319, + 3959: 0x731E, + 3960: 0x7322, + 3961: 0x7324, + 3962: 0x7327, + 3963: 0x7328, + 3964: 0x732C, + 3965: 0x7331, + 3966: 0x7332, + 3967: 0x7335, + 3968: 0x733A, + 3969: 0x733B, + 3970: 0x733D, + 3971: 0x7343, + 3972: 0x734D, + 3973: 0x7350, + 3974: 0x7352, + 3975: 0x7356, + 3976: 0x7358, + 3977: 0x735D, + 3978: 0x735E, + 3979: 0x735F, + 3980: 0x7360, + 3981: 0x7366, + 3982: 0x7367, + 3983: 0x7369, + 3984: 0x736B, + 3985: 0x736C, + 3986: 0x736E, + 3987: 0x736F, + 3988: 0x7371, + 3989: 0x7377, + 3990: 0x7379, + 3991: 0x737C, + 3992: 0x7380, + 3993: 0x7381, + 3994: 0x7383, + 3995: 0x7385, + 3996: 0x7386, + 3997: 0x738E, + 3998: 0x7390, + 3999: 0x7393, + 4000: 0x7395, + 4001: 0x7397, + 4002: 0x7398, + 4003: 0x739C, + 4004: 0x739E, + 4005: 0x739F, + 4006: 0x73A0, + 4007: 0x73A2, + 4008: 0x73A5, + 4009: 0x73A6, + 4010: 0x73AA, + 4011: 0x73AB, + 4012: 0x73AD, + 4013: 0x73B5, + 4014: 0x73B7, + 4015: 0x73B9, + 4016: 0x73BC, + 4017: 0x73BD, + 4018: 0x73BF, + 4019: 0x73C5, + 4020: 0x73C6, + 4021: 0x73C9, + 4022: 0x73CB, + 4023: 0x73CC, + 4024: 0x73CF, + 4025: 0x73D2, + 4026: 0x73D3, + 4027: 0x73D6, + 4028: 0x73D9, + 4029: 0x73DD, + 4030: 0x73E1, + 4031: 0x73E3, + 4032: 0x73E6, + 4033: 0x73E7, + 4034: 0x73E9, + 4035: 0x73F4, + 4036: 0x73F5, + 4037: 0x73F7, + 4038: 0x73F9, + 4039: 0x73FA, + 4040: 0x73FB, + 4041: 0x73FD, + 4042: 0x73FF, + 4043: 0x7400, + 4044: 0x7401, + 4045: 0x7404, + 4046: 0x7407, + 4047: 0x740A, + 4048: 0x7411, + 4049: 0x741A, + 4050: 0x741B, + 4051: 0x7424, + 4052: 0x7426, + 4053: 0x7428, + 4054: 0x7429, + 4055: 0x742A, + 4056: 0x742B, + 4057: 0x742C, + 4058: 0x742D, + 4059: 0x742E, + 4060: 0x742F, + 4061: 0x7430, + 4062: 0x7431, + 4063: 0x7439, + 4064: 0x7440, + 4065: 0x7443, + 4066: 0x7444, + 4067: 0x7446, + 4068: 0x7447, + 4069: 0x744B, + 4070: 0x744D, + 4071: 0x7451, + 4072: 0x7452, + 4073: 0x7457, + 4074: 0x745D, + 4075: 0x7462, + 4076: 0x7466, + 4077: 0x7467, + 4078: 0x7468, + 4079: 0x746B, + 4080: 0x746D, + 4081: 0x746E, + 4082: 0x7471, + 4083: 0x7472, + 4084: 0x7480, + 4085: 0x7481, + 4086: 0x7485, + 4087: 0x7486, + 4088: 0x7487, + 4089: 0x7489, + 4090: 0x748F, + 4091: 0x7490, + 4092: 0x7491, + 4093: 0x7492, + 4094: 0x7498, + 4095: 0x7499, + 4096: 0x749A, + 4097: 0x749C, + 4098: 0x749F, + 4099: 0x74A0, + 4100: 0x74A1, + 4101: 0x74A3, + 4102: 0x74A6, + 4103: 0x74A8, + 4104: 0x74A9, + 4105: 0x74AA, + 4106: 0x74AB, + 4107: 0x74AE, + 4108: 0x74AF, + 4109: 0x74B1, + 4110: 0x74B2, + 4111: 0x74B5, + 4112: 0x74B9, + 4113: 0x74BB, + 4114: 0x74BF, + 4115: 0x74C8, + 4116: 0x74C9, + 4117: 0x74CC, + 4118: 0x74D0, + 4119: 0x74D3, + 4120: 0x74D8, + 4121: 0x74DA, + 4122: 0x74DB, + 4123: 0x74DE, + 4124: 0x74DF, + 4125: 0x74E4, + 4126: 0x74E8, + 4127: 0x74EA, + 4128: 0x74EB, + 4129: 0x74EF, + 4130: 0x74F4, + 4131: 0x74FA, + 4132: 0x74FB, + 4133: 0x74FC, + 4134: 0x74FF, + 4135: 0x7506, + 4136: 0x7512, + 4137: 0x7516, + 4138: 0x7517, + 4139: 0x7520, + 4140: 0x7521, + 4141: 0x7524, + 4142: 0x7527, + 4143: 0x7529, + 4144: 0x752A, + 4145: 0x752F, + 4146: 0x7536, + 4147: 0x7539, + 4148: 0x753D, + 4149: 0x753E, + 4150: 0x753F, + 4151: 0x7540, + 4152: 0x7543, + 4153: 0x7547, + 4154: 0x7548, + 4155: 0x754E, + 4156: 0x7550, + 4157: 0x7552, + 4158: 0x7557, + 4159: 0x755E, + 4160: 0x755F, + 4161: 0x7561, + 4162: 0x756F, + 4163: 0x7571, + 4164: 0x7579, + 4165: 0x757A, + 4166: 0x757B, + 4167: 0x757C, + 4168: 0x757D, + 4169: 0x757E, + 4170: 0x7581, + 4171: 0x7585, + 4172: 0x7590, + 4173: 0x7592, + 4174: 0x7593, + 4175: 0x7595, + 4176: 0x7599, + 4177: 0x759C, + 4178: 0x75A2, + 4179: 0x75A4, + 4180: 0x75B4, + 4181: 0x75BA, + 4182: 0x75BF, + 4183: 0x75C0, + 4184: 0x75C1, + 4185: 0x75C4, + 4186: 0x75C6, + 4187: 0x75CC, + 4188: 0x75CE, + 4189: 0x75CF, + 4190: 0x75D7, + 4191: 0x75DC, + 4192: 0x75DF, + 4193: 0x75E0, + 4194: 0x75E1, + 4195: 0x75E4, + 4196: 0x75E7, + 4197: 0x75EC, + 4198: 0x75EE, + 4199: 0x75EF, + 4200: 0x75F1, + 4201: 0x75F9, + 4202: 0x7600, + 4203: 0x7602, + 4204: 0x7603, + 4205: 0x7604, + 4206: 0x7607, + 4207: 0x7608, + 4208: 0x760A, + 4209: 0x760C, + 4210: 0x760F, + 4211: 0x7612, + 4212: 0x7613, + 4213: 0x7615, + 4214: 0x7616, + 4215: 0x7619, + 4216: 0x761B, + 4217: 0x761C, + 4218: 0x761D, + 4219: 0x761E, + 4220: 0x7623, + 4221: 0x7625, + 4222: 0x7626, + 4223: 0x7629, + 4224: 0x762D, + 4225: 0x7632, + 4226: 0x7633, + 4227: 0x7635, + 4228: 0x7638, + 4229: 0x7639, + 4230: 0x763A, + 4231: 0x763C, + 4232: 0x764A, + 4233: 0x7640, + 4234: 0x7641, + 4235: 0x7643, + 4236: 0x7644, + 4237: 0x7645, + 4238: 0x7649, + 4239: 0x764B, + 4240: 0x7655, + 4241: 0x7659, + 4242: 0x765F, + 4243: 0x7664, + 4244: 0x7665, + 4245: 0x766D, + 4246: 0x766E, + 4247: 0x766F, + 4248: 0x7671, + 4249: 0x7674, + 4250: 0x7681, + 4251: 0x7685, + 4252: 0x768C, + 4253: 0x768D, + 4254: 0x7695, + 4255: 0x769B, + 4256: 0x769C, + 4257: 0x769D, + 4258: 0x769F, + 4259: 0x76A0, + 4260: 0x76A2, + 4261: 0x76A3, + 4262: 0x76A4, + 4263: 0x76A5, + 4264: 0x76A6, + 4265: 0x76A7, + 4266: 0x76A8, + 4267: 0x76AA, + 4268: 0x76AD, + 4269: 0x76BD, + 4270: 0x76C1, + 4271: 0x76C5, + 4272: 0x76C9, + 4273: 0x76CB, + 4274: 0x76CC, + 4275: 0x76CE, + 4276: 0x76D4, + 4277: 0x76D9, + 4278: 0x76E0, + 4279: 0x76E6, + 4280: 0x76E8, + 4281: 0x76EC, + 4282: 0x76F0, + 4283: 0x76F1, + 4284: 0x76F6, + 4285: 0x76F9, + 4286: 0x76FC, + 4287: 0x7700, + 4288: 0x7706, + 4289: 0x770A, + 4290: 0x770E, + 4291: 0x7712, + 4292: 0x7714, + 4293: 0x7715, + 4294: 0x7717, + 4295: 0x7719, + 4296: 0x771A, + 4297: 0x771C, + 4298: 0x7722, + 4299: 0x7728, + 4300: 0x772D, + 4301: 0x772E, + 4302: 0x772F, + 4303: 0x7734, + 4304: 0x7735, + 4305: 0x7736, + 4306: 0x7739, + 4307: 0x773D, + 4308: 0x773E, + 4309: 0x7742, + 4310: 0x7745, + 4311: 0x7746, + 4312: 0x774A, + 4313: 0x774D, + 4314: 0x774E, + 4315: 0x774F, + 4316: 0x7752, + 4317: 0x7756, + 4318: 0x7757, + 4319: 0x775C, + 4320: 0x775E, + 4321: 0x775F, + 4322: 0x7760, + 4323: 0x7762, + 4324: 0x7764, + 4325: 0x7767, + 4326: 0x776A, + 4327: 0x776C, + 4328: 0x7770, + 4329: 0x7772, + 4330: 0x7773, + 4331: 0x7774, + 4332: 0x777A, + 4333: 0x777D, + 4334: 0x7780, + 4335: 0x7784, + 4336: 0x778C, + 4337: 0x778D, + 4338: 0x7794, + 4339: 0x7795, + 4340: 0x7796, + 4341: 0x779A, + 4342: 0x779F, + 4343: 0x77A2, + 4344: 0x77A7, + 4345: 0x77AA, + 4346: 0x77AE, + 4347: 0x77AF, + 4348: 0x77B1, + 4349: 0x77B5, + 4350: 0x77BE, + 4351: 0x77C3, + 4352: 0x77C9, + 4353: 0x77D1, + 4354: 0x77D2, + 4355: 0x77D5, + 4356: 0x77D9, + 4357: 0x77DE, + 4358: 0x77DF, + 4359: 0x77E0, + 4360: 0x77E4, + 4361: 0x77E6, + 4362: 0x77EA, + 4363: 0x77EC, + 4364: 0x77F0, + 4365: 0x77F1, + 4366: 0x77F4, + 4367: 0x77F8, + 4368: 0x77FB, + 4369: 0x7805, + 4370: 0x7806, + 4371: 0x7809, + 4372: 0x780D, + 4373: 0x780E, + 4374: 0x7811, + 4375: 0x781D, + 4376: 0x7821, + 4377: 0x7822, + 4378: 0x7823, + 4379: 0x782D, + 4380: 0x782E, + 4381: 0x7830, + 4382: 0x7835, + 4383: 0x7837, + 4384: 0x7843, + 4385: 0x7844, + 4386: 0x7847, + 4387: 0x7848, + 4388: 0x784C, + 4389: 0x784E, + 4390: 0x7852, + 4391: 0x785C, + 4392: 0x785E, + 4393: 0x7860, + 4394: 0x7861, + 4395: 0x7863, + 4396: 0x7864, + 4397: 0x7868, + 4398: 0x786A, + 4399: 0x786E, + 4400: 0x787A, + 4401: 0x787E, + 4402: 0x788A, + 4403: 0x788F, + 4404: 0x7894, + 4405: 0x7898, + 4406: 0x78A1, + 4407: 0x789D, + 4408: 0x789E, + 4409: 0x789F, + 4410: 0x78A4, + 4411: 0x78A8, + 4412: 0x78AC, + 4413: 0x78AD, + 4414: 0x78B0, + 4415: 0x78B1, + 4416: 0x78B2, + 4417: 0x78B3, + 4418: 0x78BB, + 4419: 0x78BD, + 4420: 0x78BF, + 4421: 0x78C7, + 4422: 0x78C8, + 4423: 0x78C9, + 4424: 0x78CC, + 4425: 0x78CE, + 4426: 0x78D2, + 4427: 0x78D3, + 4428: 0x78D5, + 4429: 0x78D6, + 4430: 0x78E4, + 4431: 0x78DB, + 4432: 0x78DF, + 4433: 0x78E0, + 4434: 0x78E1, + 4435: 0x78E6, + 4436: 0x78EA, + 4437: 0x78F2, + 4438: 0x78F3, + 4439: 0x7900, + 4440: 0x78F6, + 4441: 0x78F7, + 4442: 0x78FA, + 4443: 0x78FB, + 4444: 0x78FF, + 4445: 0x7906, + 4446: 0x790C, + 4447: 0x7910, + 4448: 0x791A, + 4449: 0x791C, + 4450: 0x791E, + 4451: 0x791F, + 4452: 0x7920, + 4453: 0x7925, + 4454: 0x7927, + 4455: 0x7929, + 4456: 0x792D, + 4457: 0x7931, + 4458: 0x7934, + 4459: 0x7935, + 4460: 0x793B, + 4461: 0x793D, + 4462: 0x793F, + 4463: 0x7944, + 4464: 0x7945, + 4465: 0x7946, + 4466: 0x794A, + 4467: 0x794B, + 4468: 0x794F, + 4469: 0x7951, + 4470: 0x7954, + 4471: 0x7958, + 4472: 0x795B, + 4473: 0x795C, + 4474: 0x7967, + 4475: 0x7969, + 4476: 0x796B, + 4477: 0x7972, + 4478: 0x7979, + 4479: 0x797B, + 4480: 0x797C, + 4481: 0x797E, + 4482: 0x798B, + 4483: 0x798C, + 4484: 0x7991, + 4485: 0x7993, + 4486: 0x7994, + 4487: 0x7995, + 4488: 0x7996, + 4489: 0x7998, + 4490: 0x799B, + 4491: 0x799C, + 4492: 0x79A1, + 4493: 0x79A8, + 4494: 0x79A9, + 4495: 0x79AB, + 4496: 0x79AF, + 4497: 0x79B1, + 4498: 0x79B4, + 4499: 0x79B8, + 4500: 0x79BB, + 4501: 0x79C2, + 4502: 0x79C4, + 4503: 0x79C7, + 4504: 0x79C8, + 4505: 0x79CA, + 4506: 0x79CF, + 4507: 0x79D4, + 4508: 0x79D6, + 4509: 0x79DA, + 4510: 0x79DD, + 4511: 0x79DE, + 4512: 0x79E0, + 4513: 0x79E2, + 4514: 0x79E5, + 4515: 0x79EA, + 4516: 0x79EB, + 4517: 0x79ED, + 4518: 0x79F1, + 4519: 0x79F8, + 4520: 0x79FC, + 4521: 0x7A02, + 4522: 0x7A03, + 4523: 0x7A07, + 4524: 0x7A09, + 4525: 0x7A0A, + 4526: 0x7A0C, + 4527: 0x7A11, + 4528: 0x7A15, + 4529: 0x7A1B, + 4530: 0x7A1E, + 4531: 0x7A21, + 4532: 0x7A27, + 4533: 0x7A2B, + 4534: 0x7A2D, + 4535: 0x7A2F, + 4536: 0x7A30, + 4537: 0x7A34, + 4538: 0x7A35, + 4539: 0x7A38, + 4540: 0x7A39, + 4541: 0x7A3A, + 4542: 0x7A44, + 4543: 0x7A45, + 4544: 0x7A47, + 4545: 0x7A48, + 4546: 0x7A4C, + 4547: 0x7A55, + 4548: 0x7A56, + 4549: 0x7A59, + 4550: 0x7A5C, + 4551: 0x7A5D, + 4552: 0x7A5F, + 4553: 0x7A60, + 4554: 0x7A65, + 4555: 0x7A67, + 4556: 0x7A6A, + 4557: 0x7A6D, + 4558: 0x7A75, + 4559: 0x7A78, + 4560: 0x7A7E, + 4561: 0x7A80, + 4562: 0x7A82, + 4563: 0x7A85, + 4564: 0x7A86, + 4565: 0x7A8A, + 4566: 0x7A8B, + 4567: 0x7A90, + 4568: 0x7A91, + 4569: 0x7A94, + 4570: 0x7A9E, + 4571: 0x7AA0, + 4572: 0x7AA3, + 4573: 0x7AAC, + 4574: 0x7AB3, + 4575: 0x7AB5, + 4576: 0x7AB9, + 4577: 0x7ABB, + 4578: 0x7ABC, + 4579: 0x7AC6, + 4580: 0x7AC9, + 4581: 0x7ACC, + 4582: 0x7ACE, + 4583: 0x7AD1, + 4584: 0x7ADB, + 4585: 0x7AE8, + 4586: 0x7AE9, + 4587: 0x7AEB, + 4588: 0x7AEC, + 4589: 0x7AF1, + 4590: 0x7AF4, + 4591: 0x7AFB, + 4592: 0x7AFD, + 4593: 0x7AFE, + 4594: 0x7B07, + 4595: 0x7B14, + 4596: 0x7B1F, + 4597: 0x7B23, + 4598: 0x7B27, + 4599: 0x7B29, + 4600: 0x7B2A, + 4601: 0x7B2B, + 4602: 0x7B2D, + 4603: 0x7B2E, + 4604: 0x7B2F, + 4605: 0x7B30, + 4606: 0x7B31, + 4607: 0x7B34, + 4608: 0x7B3D, + 4609: 0x7B3F, + 4610: 0x7B40, + 4611: 0x7B41, + 4612: 0x7B47, + 4613: 0x7B4E, + 4614: 0x7B55, + 4615: 0x7B60, + 4616: 0x7B64, + 4617: 0x7B66, + 4618: 0x7B69, + 4619: 0x7B6A, + 4620: 0x7B6D, + 4621: 0x7B6F, + 4622: 0x7B72, + 4623: 0x7B73, + 4624: 0x7B77, + 4625: 0x7B84, + 4626: 0x7B89, + 4627: 0x7B8E, + 4628: 0x7B90, + 4629: 0x7B91, + 4630: 0x7B96, + 4631: 0x7B9B, + 4632: 0x7B9E, + 4633: 0x7BA0, + 4634: 0x7BA5, + 4635: 0x7BAC, + 4636: 0x7BAF, + 4637: 0x7BB0, + 4638: 0x7BB2, + 4639: 0x7BB5, + 4640: 0x7BB6, + 4641: 0x7BBA, + 4642: 0x7BBB, + 4643: 0x7BBC, + 4644: 0x7BBD, + 4645: 0x7BC2, + 4646: 0x7BC5, + 4647: 0x7BC8, + 4648: 0x7BCA, + 4649: 0x7BD4, + 4650: 0x7BD6, + 4651: 0x7BD7, + 4652: 0x7BD9, + 4653: 0x7BDA, + 4654: 0x7BDB, + 4655: 0x7BE8, + 4656: 0x7BEA, + 4657: 0x7BF2, + 4658: 0x7BF4, + 4659: 0x7BF5, + 4660: 0x7BF8, + 4661: 0x7BF9, + 4662: 0x7BFA, + 4663: 0x7BFC, + 4664: 0x7BFE, + 4665: 0x7C01, + 4666: 0x7C02, + 4667: 0x7C03, + 4668: 0x7C04, + 4669: 0x7C06, + 4670: 0x7C09, + 4671: 0x7C0B, + 4672: 0x7C0C, + 4673: 0x7C0E, + 4674: 0x7C0F, + 4675: 0x7C19, + 4676: 0x7C1B, + 4677: 0x7C20, + 4678: 0x7C25, + 4679: 0x7C26, + 4680: 0x7C28, + 4681: 0x7C2C, + 4682: 0x7C31, + 4683: 0x7C33, + 4684: 0x7C34, + 4685: 0x7C36, + 4686: 0x7C39, + 4687: 0x7C3A, + 4688: 0x7C46, + 4689: 0x7C4A, + 4690: 0x7C55, + 4691: 0x7C51, + 4692: 0x7C52, + 4693: 0x7C53, + 4694: 0x7C59, + 4695: 0x7C5A, + 4696: 0x7C5B, + 4697: 0x7C5C, + 4698: 0x7C5D, + 4699: 0x7C5E, + 4700: 0x7C61, + 4701: 0x7C63, + 4702: 0x7C67, + 4703: 0x7C69, + 4704: 0x7C6D, + 4705: 0x7C6E, + 4706: 0x7C70, + 4707: 0x7C72, + 4708: 0x7C79, + 4709: 0x7C7C, + 4710: 0x7C7D, + 4711: 0x7C86, + 4712: 0x7C87, + 4713: 0x7C8F, + 4714: 0x7C94, + 4715: 0x7C9E, + 4716: 0x7CA0, + 4717: 0x7CA6, + 4718: 0x7CB0, + 4719: 0x7CB6, + 4720: 0x7CB7, + 4721: 0x7CBA, + 4722: 0x7CBB, + 4723: 0x7CBC, + 4724: 0x7CBF, + 4725: 0x7CC4, + 4726: 0x7CC7, + 4727: 0x7CC8, + 4728: 0x7CC9, + 4729: 0x7CCD, + 4730: 0x7CCF, + 4731: 0x7CD3, + 4732: 0x7CD4, + 4733: 0x7CD5, + 4734: 0x7CD7, + 4735: 0x7CD9, + 4736: 0x7CDA, + 4737: 0x7CDD, + 4738: 0x7CE6, + 4739: 0x7CE9, + 4740: 0x7CEB, + 4741: 0x7CF5, + 4742: 0x7D03, + 4743: 0x7D07, + 4744: 0x7D08, + 4745: 0x7D09, + 4746: 0x7D0F, + 4747: 0x7D11, + 4748: 0x7D12, + 4749: 0x7D13, + 4750: 0x7D16, + 4751: 0x7D1D, + 4752: 0x7D1E, + 4753: 0x7D23, + 4754: 0x7D26, + 4755: 0x7D2A, + 4756: 0x7D2D, + 4757: 0x7D31, + 4758: 0x7D3C, + 4759: 0x7D3D, + 4760: 0x7D3E, + 4761: 0x7D40, + 4762: 0x7D41, + 4763: 0x7D47, + 4764: 0x7D48, + 4765: 0x7D4D, + 4766: 0x7D51, + 4767: 0x7D53, + 4768: 0x7D57, + 4769: 0x7D59, + 4770: 0x7D5A, + 4771: 0x7D5C, + 4772: 0x7D5D, + 4773: 0x7D65, + 4774: 0x7D67, + 4775: 0x7D6A, + 4776: 0x7D70, + 4777: 0x7D78, + 4778: 0x7D7A, + 4779: 0x7D7B, + 4780: 0x7D7F, + 4781: 0x7D81, + 4782: 0x7D82, + 4783: 0x7D83, + 4784: 0x7D85, + 4785: 0x7D86, + 4786: 0x7D88, + 4787: 0x7D8B, + 4788: 0x7D8C, + 4789: 0x7D8D, + 4790: 0x7D91, + 4791: 0x7D96, + 4792: 0x7D97, + 4793: 0x7D9D, + 4794: 0x7D9E, + 4795: 0x7DA6, + 4796: 0x7DA7, + 4797: 0x7DAA, + 4798: 0x7DB3, + 4799: 0x7DB6, + 4800: 0x7DB7, + 4801: 0x7DB9, + 4802: 0x7DC2, + 4803: 0x7DC3, + 4804: 0x7DC4, + 4805: 0x7DC5, + 4806: 0x7DC6, + 4807: 0x7DCC, + 4808: 0x7DCD, + 4809: 0x7DCE, + 4810: 0x7DD7, + 4811: 0x7DD9, + 4812: 0x7E00, + 4813: 0x7DE2, + 4814: 0x7DE5, + 4815: 0x7DE6, + 4816: 0x7DEA, + 4817: 0x7DEB, + 4818: 0x7DED, + 4819: 0x7DF1, + 4820: 0x7DF5, + 4821: 0x7DF6, + 4822: 0x7DF9, + 4823: 0x7DFA, + 4824: 0x7E08, + 4825: 0x7E10, + 4826: 0x7E11, + 4827: 0x7E15, + 4828: 0x7E17, + 4829: 0x7E1C, + 4830: 0x7E1D, + 4831: 0x7E20, + 4832: 0x7E27, + 4833: 0x7E28, + 4834: 0x7E2C, + 4835: 0x7E2D, + 4836: 0x7E2F, + 4837: 0x7E33, + 4838: 0x7E36, + 4839: 0x7E3F, + 4840: 0x7E44, + 4841: 0x7E45, + 4842: 0x7E47, + 4843: 0x7E4E, + 4844: 0x7E50, + 4845: 0x7E52, + 4846: 0x7E58, + 4847: 0x7E5F, + 4848: 0x7E61, + 4849: 0x7E62, + 4850: 0x7E65, + 4851: 0x7E6B, + 4852: 0x7E6E, + 4853: 0x7E6F, + 4854: 0x7E73, + 4855: 0x7E78, + 4856: 0x7E7E, + 4857: 0x7E81, + 4858: 0x7E86, + 4859: 0x7E87, + 4860: 0x7E8A, + 4861: 0x7E8D, + 4862: 0x7E91, + 4863: 0x7E95, + 4864: 0x7E98, + 4865: 0x7E9A, + 4866: 0x7E9D, + 4867: 0x7E9E, + 4868: 0x7F3C, + 4869: 0x7F3B, + 4870: 0x7F3D, + 4871: 0x7F3E, + 4872: 0x7F3F, + 4873: 0x7F43, + 4874: 0x7F44, + 4875: 0x7F47, + 4876: 0x7F4F, + 4877: 0x7F52, + 4878: 0x7F53, + 4879: 0x7F5B, + 4880: 0x7F5C, + 4881: 0x7F5D, + 4882: 0x7F61, + 4883: 0x7F63, + 4884: 0x7F64, + 4885: 0x7F65, + 4886: 0x7F66, + 4887: 0x7F6D, + 4888: 0x7F71, + 4889: 0x7F7D, + 4890: 0x7F7E, + 4891: 0x7F7F, + 4892: 0x7F80, + 4893: 0x7F8B, + 4894: 0x7F8D, + 4895: 0x7F8F, + 4896: 0x7F90, + 4897: 0x7F91, + 4898: 0x7F96, + 4899: 0x7F97, + 4900: 0x7F9C, + 4901: 0x7FA1, + 4902: 0x7FA2, + 4903: 0x7FA6, + 4904: 0x7FAA, + 4905: 0x7FAD, + 4906: 0x7FB4, + 4907: 0x7FBC, + 4908: 0x7FBF, + 4909: 0x7FC0, + 4910: 0x7FC3, + 4911: 0x7FC8, + 4912: 0x7FCE, + 4913: 0x7FCF, + 4914: 0x7FDB, + 4915: 0x7FDF, + 4916: 0x7FE3, + 4917: 0x7FE5, + 4918: 0x7FE8, + 4919: 0x7FEC, + 4920: 0x7FEE, + 4921: 0x7FEF, + 4922: 0x7FF2, + 4923: 0x7FFA, + 4924: 0x7FFD, + 4925: 0x7FFE, + 4926: 0x7FFF, + 4927: 0x8007, + 4928: 0x8008, + 4929: 0x800A, + 4930: 0x800D, + 4931: 0x800E, + 4932: 0x800F, + 4933: 0x8011, + 4934: 0x8013, + 4935: 0x8014, + 4936: 0x8016, + 4937: 0x801D, + 4938: 0x801E, + 4939: 0x801F, + 4940: 0x8020, + 4941: 0x8024, + 4942: 0x8026, + 4943: 0x802C, + 4944: 0x802E, + 4945: 0x8030, + 4946: 0x8034, + 4947: 0x8035, + 4948: 0x8037, + 4949: 0x8039, + 4950: 0x803A, + 4951: 0x803C, + 4952: 0x803E, + 4953: 0x8040, + 4954: 0x8044, + 4955: 0x8060, + 4956: 0x8064, + 4957: 0x8066, + 4958: 0x806D, + 4959: 0x8071, + 4960: 0x8075, + 4961: 0x8081, + 4962: 0x8088, + 4963: 0x808E, + 4964: 0x809C, + 4965: 0x809E, + 4966: 0x80A6, + 4967: 0x80A7, + 4968: 0x80AB, + 4969: 0x80B8, + 4970: 0x80B9, + 4971: 0x80C8, + 4972: 0x80CD, + 4973: 0x80CF, + 4974: 0x80D2, + 4975: 0x80D4, + 4976: 0x80D5, + 4977: 0x80D7, + 4978: 0x80D8, + 4979: 0x80E0, + 4980: 0x80ED, + 4981: 0x80EE, + 4982: 0x80F0, + 4983: 0x80F2, + 4984: 0x80F3, + 4985: 0x80F6, + 4986: 0x80F9, + 4987: 0x80FA, + 4988: 0x80FE, + 4989: 0x8103, + 4990: 0x810B, + 4991: 0x8116, + 4992: 0x8117, + 4993: 0x8118, + 4994: 0x811C, + 4995: 0x811E, + 4996: 0x8120, + 4997: 0x8124, + 4998: 0x8127, + 4999: 0x812C, + 5000: 0x8130, + 5001: 0x8135, + 5002: 0x813A, + 5003: 0x813C, + 5004: 0x8145, + 5005: 0x8147, + 5006: 0x814A, + 5007: 0x814C, + 5008: 0x8152, + 5009: 0x8157, + 5010: 0x8160, + 5011: 0x8161, + 5012: 0x8167, + 5013: 0x8168, + 5014: 0x8169, + 5015: 0x816D, + 5016: 0x816F, + 5017: 0x8177, + 5018: 0x8181, + 5019: 0x8190, + 5020: 0x8184, + 5021: 0x8185, + 5022: 0x8186, + 5023: 0x818B, + 5024: 0x818E, + 5025: 0x8196, + 5026: 0x8198, + 5027: 0x819B, + 5028: 0x819E, + 5029: 0x81A2, + 5030: 0x81AE, + 5031: 0x81B2, + 5032: 0x81B4, + 5033: 0x81BB, + 5034: 0x81CB, + 5035: 0x81C3, + 5036: 0x81C5, + 5037: 0x81CA, + 5038: 0x81CE, + 5039: 0x81CF, + 5040: 0x81D5, + 5041: 0x81D7, + 5042: 0x81DB, + 5043: 0x81DD, + 5044: 0x81DE, + 5045: 0x81E1, + 5046: 0x81E4, + 5047: 0x81EB, + 5048: 0x81EC, + 5049: 0x81F0, + 5050: 0x81F1, + 5051: 0x81F2, + 5052: 0x81F5, + 5053: 0x81F6, + 5054: 0x81F8, + 5055: 0x81F9, + 5056: 0x81FD, + 5057: 0x81FF, + 5058: 0x8200, + 5059: 0x8203, + 5060: 0x820F, + 5061: 0x8213, + 5062: 0x8214, + 5063: 0x8219, + 5064: 0x821A, + 5065: 0x821D, + 5066: 0x8221, + 5067: 0x8222, + 5068: 0x8228, + 5069: 0x8232, + 5070: 0x8234, + 5071: 0x823A, + 5072: 0x8243, + 5073: 0x8244, + 5074: 0x8245, + 5075: 0x8246, + 5076: 0x824B, + 5077: 0x824E, + 5078: 0x824F, + 5079: 0x8251, + 5080: 0x8256, + 5081: 0x825C, + 5082: 0x8260, + 5083: 0x8263, + 5084: 0x8267, + 5085: 0x826D, + 5086: 0x8274, + 5087: 0x827B, + 5088: 0x827D, + 5089: 0x827F, + 5090: 0x8280, + 5091: 0x8281, + 5092: 0x8283, + 5093: 0x8284, + 5094: 0x8287, + 5095: 0x8289, + 5096: 0x828A, + 5097: 0x828E, + 5098: 0x8291, + 5099: 0x8294, + 5100: 0x8296, + 5101: 0x8298, + 5102: 0x829A, + 5103: 0x829B, + 5104: 0x82A0, + 5105: 0x82A1, + 5106: 0x82A3, + 5107: 0x82A4, + 5108: 0x82A7, + 5109: 0x82A8, + 5110: 0x82A9, + 5111: 0x82AA, + 5112: 0x82AE, + 5113: 0x82B0, + 5114: 0x82B2, + 5115: 0x82B4, + 5116: 0x82B7, + 5117: 0x82BA, + 5118: 0x82BC, + 5119: 0x82BE, + 5120: 0x82BF, + 5121: 0x82C6, + 5122: 0x82D0, + 5123: 0x82D5, + 5124: 0x82DA, + 5125: 0x82E0, + 5126: 0x82E2, + 5127: 0x82E4, + 5128: 0x82E8, + 5129: 0x82EA, + 5130: 0x82ED, + 5131: 0x82EF, + 5132: 0x82F6, + 5133: 0x82F7, + 5134: 0x82FD, + 5135: 0x82FE, + 5136: 0x8300, + 5137: 0x8301, + 5138: 0x8307, + 5139: 0x8308, + 5140: 0x830A, + 5141: 0x830B, + 5142: 0x8354, + 5143: 0x831B, + 5144: 0x831D, + 5145: 0x831E, + 5146: 0x831F, + 5147: 0x8321, + 5148: 0x8322, + 5149: 0x832C, + 5150: 0x832D, + 5151: 0x832E, + 5152: 0x8330, + 5153: 0x8333, + 5154: 0x8337, + 5155: 0x833A, + 5156: 0x833C, + 5157: 0x833D, + 5158: 0x8342, + 5159: 0x8343, + 5160: 0x8344, + 5161: 0x8347, + 5162: 0x834D, + 5163: 0x834E, + 5164: 0x8351, + 5165: 0x8355, + 5166: 0x8356, + 5167: 0x8357, + 5168: 0x8370, + 5169: 0x8378, + 5170: 0x837D, + 5171: 0x837F, + 5172: 0x8380, + 5173: 0x8382, + 5174: 0x8384, + 5175: 0x8386, + 5176: 0x838D, + 5177: 0x8392, + 5178: 0x8394, + 5179: 0x8395, + 5180: 0x8398, + 5181: 0x8399, + 5182: 0x839B, + 5183: 0x839C, + 5184: 0x839D, + 5185: 0x83A6, + 5186: 0x83A7, + 5187: 0x83A9, + 5188: 0x83AC, + 5189: 0x83BE, + 5190: 0x83BF, + 5191: 0x83C0, + 5192: 0x83C7, + 5193: 0x83C9, + 5194: 0x83CF, + 5195: 0x83D0, + 5196: 0x83D1, + 5197: 0x83D4, + 5198: 0x83DD, + 5199: 0x8353, + 5200: 0x83E8, + 5201: 0x83EA, + 5202: 0x83F6, + 5203: 0x83F8, + 5204: 0x83F9, + 5205: 0x83FC, + 5206: 0x8401, + 5207: 0x8406, + 5208: 0x840A, + 5209: 0x840F, + 5210: 0x8411, + 5211: 0x8415, + 5212: 0x8419, + 5213: 0x83AD, + 5214: 0x842F, + 5215: 0x8439, + 5216: 0x8445, + 5217: 0x8447, + 5218: 0x8448, + 5219: 0x844A, + 5220: 0x844D, + 5221: 0x844F, + 5222: 0x8451, + 5223: 0x8452, + 5224: 0x8456, + 5225: 0x8458, + 5226: 0x8459, + 5227: 0x845A, + 5228: 0x845C, + 5229: 0x8460, + 5230: 0x8464, + 5231: 0x8465, + 5232: 0x8467, + 5233: 0x846A, + 5234: 0x8470, + 5235: 0x8473, + 5236: 0x8474, + 5237: 0x8476, + 5238: 0x8478, + 5239: 0x847C, + 5240: 0x847D, + 5241: 0x8481, + 5242: 0x8485, + 5243: 0x8492, + 5244: 0x8493, + 5245: 0x8495, + 5246: 0x849E, + 5247: 0x84A6, + 5248: 0x84A8, + 5249: 0x84A9, + 5250: 0x84AA, + 5251: 0x84AF, + 5252: 0x84B1, + 5253: 0x84B4, + 5254: 0x84BA, + 5255: 0x84BD, + 5256: 0x84BE, + 5257: 0x84C0, + 5258: 0x84C2, + 5259: 0x84C7, + 5260: 0x84C8, + 5261: 0x84CC, + 5262: 0x84CF, + 5263: 0x84D3, + 5264: 0x84DC, + 5265: 0x84E7, + 5266: 0x84EA, + 5267: 0x84EF, + 5268: 0x84F0, + 5269: 0x84F1, + 5270: 0x84F2, + 5271: 0x84F7, + 5272: 0x8532, + 5273: 0x84FA, + 5274: 0x84FB, + 5275: 0x84FD, + 5276: 0x8502, + 5277: 0x8503, + 5278: 0x8507, + 5279: 0x850C, + 5280: 0x850E, + 5281: 0x8510, + 5282: 0x851C, + 5283: 0x851E, + 5284: 0x8522, + 5285: 0x8523, + 5286: 0x8524, + 5287: 0x8525, + 5288: 0x8527, + 5289: 0x852A, + 5290: 0x852B, + 5291: 0x852F, + 5292: 0x8533, + 5293: 0x8534, + 5294: 0x8536, + 5295: 0x853F, + 5296: 0x8546, + 5297: 0x854F, + 5298: 0x8550, + 5299: 0x8551, + 5300: 0x8552, + 5301: 0x8553, + 5302: 0x8556, + 5303: 0x8559, + 5304: 0x855C, + 5305: 0x855D, + 5306: 0x855E, + 5307: 0x855F, + 5308: 0x8560, + 5309: 0x8561, + 5310: 0x8562, + 5311: 0x8564, + 5312: 0x856B, + 5313: 0x856F, + 5314: 0x8579, + 5315: 0x857A, + 5316: 0x857B, + 5317: 0x857D, + 5318: 0x857F, + 5319: 0x8581, + 5320: 0x8585, + 5321: 0x8586, + 5322: 0x8589, + 5323: 0x858B, + 5324: 0x858C, + 5325: 0x858F, + 5326: 0x8593, + 5327: 0x8598, + 5328: 0x859D, + 5329: 0x859F, + 5330: 0x85A0, + 5331: 0x85A2, + 5332: 0x85A5, + 5333: 0x85A7, + 5334: 0x85B4, + 5335: 0x85B6, + 5336: 0x85B7, + 5337: 0x85B8, + 5338: 0x85BC, + 5339: 0x85BD, + 5340: 0x85BE, + 5341: 0x85BF, + 5342: 0x85C2, + 5343: 0x85C7, + 5344: 0x85CA, + 5345: 0x85CB, + 5346: 0x85CE, + 5347: 0x85AD, + 5348: 0x85D8, + 5349: 0x85DA, + 5350: 0x85DF, + 5351: 0x85E0, + 5352: 0x85E6, + 5353: 0x85E8, + 5354: 0x85ED, + 5355: 0x85F3, + 5356: 0x85F6, + 5357: 0x85FC, + 5358: 0x85FF, + 5359: 0x8600, + 5360: 0x8604, + 5361: 0x8605, + 5362: 0x860D, + 5363: 0x860E, + 5364: 0x8610, + 5365: 0x8611, + 5366: 0x8612, + 5367: 0x8618, + 5368: 0x8619, + 5369: 0x861B, + 5370: 0x861E, + 5371: 0x8621, + 5372: 0x8627, + 5373: 0x8629, + 5374: 0x8636, + 5375: 0x8638, + 5376: 0x863A, + 5377: 0x863C, + 5378: 0x863D, + 5379: 0x8640, + 5380: 0x8642, + 5381: 0x8646, + 5382: 0x8652, + 5383: 0x8653, + 5384: 0x8656, + 5385: 0x8657, + 5386: 0x8658, + 5387: 0x8659, + 5388: 0x865D, + 5389: 0x8660, + 5390: 0x8661, + 5391: 0x8662, + 5392: 0x8663, + 5393: 0x8664, + 5394: 0x8669, + 5395: 0x866C, + 5396: 0x866F, + 5397: 0x8675, + 5398: 0x8676, + 5399: 0x8677, + 5400: 0x867A, + 5401: 0x868D, + 5402: 0x8691, + 5403: 0x8696, + 5404: 0x8698, + 5405: 0x869A, + 5406: 0x869C, + 5407: 0x86A1, + 5408: 0x86A6, + 5409: 0x86A7, + 5410: 0x86A8, + 5411: 0x86AD, + 5412: 0x86B1, + 5413: 0x86B3, + 5414: 0x86B4, + 5415: 0x86B5, + 5416: 0x86B7, + 5417: 0x86B8, + 5418: 0x86B9, + 5419: 0x86BF, + 5420: 0x86C0, + 5421: 0x86C1, + 5422: 0x86C3, + 5423: 0x86C5, + 5424: 0x86D1, + 5425: 0x86D2, + 5426: 0x86D5, + 5427: 0x86D7, + 5428: 0x86DA, + 5429: 0x86DC, + 5430: 0x86E0, + 5431: 0x86E3, + 5432: 0x86E5, + 5433: 0x86E7, + 5434: 0x8688, + 5435: 0x86FA, + 5436: 0x86FC, + 5437: 0x86FD, + 5438: 0x8704, + 5439: 0x8705, + 5440: 0x8707, + 5441: 0x870B, + 5442: 0x870E, + 5443: 0x870F, + 5444: 0x8710, + 5445: 0x8713, + 5446: 0x8714, + 5447: 0x8719, + 5448: 0x871E, + 5449: 0x871F, + 5450: 0x8721, + 5451: 0x8723, + 5452: 0x8728, + 5453: 0x872E, + 5454: 0x872F, + 5455: 0x8731, + 5456: 0x8732, + 5457: 0x8739, + 5458: 0x873A, + 5459: 0x873C, + 5460: 0x873D, + 5461: 0x873E, + 5462: 0x8740, + 5463: 0x8743, + 5464: 0x8745, + 5465: 0x874D, + 5466: 0x8758, + 5467: 0x875D, + 5468: 0x8761, + 5469: 0x8764, + 5470: 0x8765, + 5471: 0x876F, + 5472: 0x8771, + 5473: 0x8772, + 5474: 0x877B, + 5475: 0x8783, + 5476: 0x8784, + 5477: 0x8785, + 5478: 0x8786, + 5479: 0x8787, + 5480: 0x8788, + 5481: 0x8789, + 5482: 0x878B, + 5483: 0x878C, + 5484: 0x8790, + 5485: 0x8793, + 5486: 0x8795, + 5487: 0x8797, + 5488: 0x8798, + 5489: 0x8799, + 5490: 0x879E, + 5491: 0x87A0, + 5492: 0x87A3, + 5493: 0x87A7, + 5494: 0x87AC, + 5495: 0x87AD, + 5496: 0x87AE, + 5497: 0x87B1, + 5498: 0x87B5, + 5499: 0x87BE, + 5500: 0x87BF, + 5501: 0x87C1, + 5502: 0x87C8, + 5503: 0x87C9, + 5504: 0x87CA, + 5505: 0x87CE, + 5506: 0x87D5, + 5507: 0x87D6, + 5508: 0x87D9, + 5509: 0x87DA, + 5510: 0x87DC, + 5511: 0x87DF, + 5512: 0x87E2, + 5513: 0x87E3, + 5514: 0x87E4, + 5515: 0x87EA, + 5516: 0x87EB, + 5517: 0x87ED, + 5518: 0x87F1, + 5519: 0x87F3, + 5520: 0x87F8, + 5521: 0x87FA, + 5522: 0x87FF, + 5523: 0x8801, + 5524: 0x8803, + 5525: 0x8806, + 5526: 0x8809, + 5527: 0x880A, + 5528: 0x880B, + 5529: 0x8810, + 5530: 0x8819, + 5531: 0x8812, + 5532: 0x8813, + 5533: 0x8814, + 5534: 0x8818, + 5535: 0x881A, + 5536: 0x881B, + 5537: 0x881C, + 5538: 0x881E, + 5539: 0x881F, + 5540: 0x8828, + 5541: 0x882D, + 5542: 0x882E, + 5543: 0x8830, + 5544: 0x8832, + 5545: 0x8835, + 5546: 0x883A, + 5547: 0x883C, + 5548: 0x8841, + 5549: 0x8843, + 5550: 0x8845, + 5551: 0x8848, + 5552: 0x8849, + 5553: 0x884A, + 5554: 0x884B, + 5555: 0x884E, + 5556: 0x8851, + 5557: 0x8855, + 5558: 0x8856, + 5559: 0x8858, + 5560: 0x885A, + 5561: 0x885C, + 5562: 0x885F, + 5563: 0x8860, + 5564: 0x8864, + 5565: 0x8869, + 5566: 0x8871, + 5567: 0x8879, + 5568: 0x887B, + 5569: 0x8880, + 5570: 0x8898, + 5571: 0x889A, + 5572: 0x889B, + 5573: 0x889C, + 5574: 0x889F, + 5575: 0x88A0, + 5576: 0x88A8, + 5577: 0x88AA, + 5578: 0x88BA, + 5579: 0x88BD, + 5580: 0x88BE, + 5581: 0x88C0, + 5582: 0x88CA, + 5583: 0x88CB, + 5584: 0x88CC, + 5585: 0x88CD, + 5586: 0x88CE, + 5587: 0x88D1, + 5588: 0x88D2, + 5589: 0x88D3, + 5590: 0x88DB, + 5591: 0x88DE, + 5592: 0x88E7, + 5593: 0x88EF, + 5594: 0x88F0, + 5595: 0x88F1, + 5596: 0x88F5, + 5597: 0x88F7, + 5598: 0x8901, + 5599: 0x8906, + 5600: 0x890D, + 5601: 0x890E, + 5602: 0x890F, + 5603: 0x8915, + 5604: 0x8916, + 5605: 0x8918, + 5606: 0x8919, + 5607: 0x891A, + 5608: 0x891C, + 5609: 0x8920, + 5610: 0x8926, + 5611: 0x8927, + 5612: 0x8928, + 5613: 0x8930, + 5614: 0x8931, + 5615: 0x8932, + 5616: 0x8935, + 5617: 0x8939, + 5618: 0x893A, + 5619: 0x893E, + 5620: 0x8940, + 5621: 0x8942, + 5622: 0x8945, + 5623: 0x8946, + 5624: 0x8949, + 5625: 0x894F, + 5626: 0x8952, + 5627: 0x8957, + 5628: 0x895A, + 5629: 0x895B, + 5630: 0x895C, + 5631: 0x8961, + 5632: 0x8962, + 5633: 0x8963, + 5634: 0x896B, + 5635: 0x896E, + 5636: 0x8970, + 5637: 0x8973, + 5638: 0x8975, + 5639: 0x897A, + 5640: 0x897B, + 5641: 0x897C, + 5642: 0x897D, + 5643: 0x8989, + 5644: 0x898D, + 5645: 0x8990, + 5646: 0x8994, + 5647: 0x8995, + 5648: 0x899B, + 5649: 0x899C, + 5650: 0x899F, + 5651: 0x89A0, + 5652: 0x89A5, + 5653: 0x89B0, + 5654: 0x89B4, + 5655: 0x89B5, + 5656: 0x89B6, + 5657: 0x89B7, + 5658: 0x89BC, + 5659: 0x89D4, + 5660: 0x89D5, + 5661: 0x89D6, + 5662: 0x89D7, + 5663: 0x89D8, + 5664: 0x89E5, + 5665: 0x89E9, + 5666: 0x89EB, + 5667: 0x89ED, + 5668: 0x89F1, + 5669: 0x89F3, + 5670: 0x89F6, + 5671: 0x89F9, + 5672: 0x89FD, + 5673: 0x89FF, + 5674: 0x8A04, + 5675: 0x8A05, + 5676: 0x8A07, + 5677: 0x8A0F, + 5678: 0x8A11, + 5679: 0x8A12, + 5680: 0x8A14, + 5681: 0x8A15, + 5682: 0x8A1E, + 5683: 0x8A20, + 5684: 0x8A22, + 5685: 0x8A24, + 5686: 0x8A26, + 5687: 0x8A2B, + 5688: 0x8A2C, + 5689: 0x8A2F, + 5690: 0x8A35, + 5691: 0x8A37, + 5692: 0x8A3D, + 5693: 0x8A3E, + 5694: 0x8A40, + 5695: 0x8A43, + 5696: 0x8A45, + 5697: 0x8A47, + 5698: 0x8A49, + 5699: 0x8A4D, + 5700: 0x8A4E, + 5701: 0x8A53, + 5702: 0x8A56, + 5703: 0x8A57, + 5704: 0x8A58, + 5705: 0x8A5C, + 5706: 0x8A5D, + 5707: 0x8A61, + 5708: 0x8A65, + 5709: 0x8A67, + 5710: 0x8A75, + 5711: 0x8A76, + 5712: 0x8A77, + 5713: 0x8A79, + 5714: 0x8A7A, + 5715: 0x8A7B, + 5716: 0x8A7E, + 5717: 0x8A7F, + 5718: 0x8A80, + 5719: 0x8A83, + 5720: 0x8A86, + 5721: 0x8A8B, + 5722: 0x8A8F, + 5723: 0x8A90, + 5724: 0x8A92, + 5725: 0x8A96, + 5726: 0x8A97, + 5727: 0x8A99, + 5728: 0x8A9F, + 5729: 0x8AA7, + 5730: 0x8AA9, + 5731: 0x8AAE, + 5732: 0x8AAF, + 5733: 0x8AB3, + 5734: 0x8AB6, + 5735: 0x8AB7, + 5736: 0x8ABB, + 5737: 0x8ABE, + 5738: 0x8AC3, + 5739: 0x8AC6, + 5740: 0x8AC8, + 5741: 0x8AC9, + 5742: 0x8ACA, + 5743: 0x8AD1, + 5744: 0x8AD3, + 5745: 0x8AD4, + 5746: 0x8AD5, + 5747: 0x8AD7, + 5748: 0x8ADD, + 5749: 0x8ADF, + 5750: 0x8AEC, + 5751: 0x8AF0, + 5752: 0x8AF4, + 5753: 0x8AF5, + 5754: 0x8AF6, + 5755: 0x8AFC, + 5756: 0x8AFF, + 5757: 0x8B05, + 5758: 0x8B06, + 5759: 0x8B0B, + 5760: 0x8B11, + 5761: 0x8B1C, + 5762: 0x8B1E, + 5763: 0x8B1F, + 5764: 0x8B0A, + 5765: 0x8B2D, + 5766: 0x8B30, + 5767: 0x8B37, + 5768: 0x8B3C, + 5769: 0x8B42, + 5770: 0x8B43, + 5771: 0x8B44, + 5772: 0x8B45, + 5773: 0x8B46, + 5774: 0x8B48, + 5775: 0x8B52, + 5776: 0x8B53, + 5777: 0x8B54, + 5778: 0x8B59, + 5779: 0x8B4D, + 5780: 0x8B5E, + 5781: 0x8B63, + 5782: 0x8B6D, + 5783: 0x8B76, + 5784: 0x8B78, + 5785: 0x8B79, + 5786: 0x8B7C, + 5787: 0x8B7E, + 5788: 0x8B81, + 5789: 0x8B84, + 5790: 0x8B85, + 5791: 0x8B8B, + 5792: 0x8B8D, + 5793: 0x8B8F, + 5794: 0x8B94, + 5795: 0x8B95, + 5796: 0x8B9C, + 5797: 0x8B9E, + 5798: 0x8B9F, + 5799: 0x8C38, + 5800: 0x8C39, + 5801: 0x8C3D, + 5802: 0x8C3E, + 5803: 0x8C45, + 5804: 0x8C47, + 5805: 0x8C49, + 5806: 0x8C4B, + 5807: 0x8C4F, + 5808: 0x8C51, + 5809: 0x8C53, + 5810: 0x8C54, + 5811: 0x8C57, + 5812: 0x8C58, + 5813: 0x8C5B, + 5814: 0x8C5D, + 5815: 0x8C59, + 5816: 0x8C63, + 5817: 0x8C64, + 5818: 0x8C66, + 5819: 0x8C68, + 5820: 0x8C69, + 5821: 0x8C6D, + 5822: 0x8C73, + 5823: 0x8C75, + 5824: 0x8C76, + 5825: 0x8C7B, + 5826: 0x8C7E, + 5827: 0x8C86, + 5828: 0x8C87, + 5829: 0x8C8B, + 5830: 0x8C90, + 5831: 0x8C92, + 5832: 0x8C93, + 5833: 0x8C99, + 5834: 0x8C9B, + 5835: 0x8C9C, + 5836: 0x8CA4, + 5837: 0x8CB9, + 5838: 0x8CBA, + 5839: 0x8CC5, + 5840: 0x8CC6, + 5841: 0x8CC9, + 5842: 0x8CCB, + 5843: 0x8CCF, + 5844: 0x8CD6, + 5845: 0x8CD5, + 5846: 0x8CD9, + 5847: 0x8CDD, + 5848: 0x8CE1, + 5849: 0x8CE8, + 5850: 0x8CEC, + 5851: 0x8CEF, + 5852: 0x8CF0, + 5853: 0x8CF2, + 5854: 0x8CF5, + 5855: 0x8CF7, + 5856: 0x8CF8, + 5857: 0x8CFE, + 5858: 0x8CFF, + 5859: 0x8D01, + 5860: 0x8D03, + 5861: 0x8D09, + 5862: 0x8D12, + 5863: 0x8D17, + 5864: 0x8D1B, + 5865: 0x8D65, + 5866: 0x8D69, + 5867: 0x8D6C, + 5868: 0x8D6E, + 5869: 0x8D7F, + 5870: 0x8D82, + 5871: 0x8D84, + 5872: 0x8D88, + 5873: 0x8D8D, + 5874: 0x8D90, + 5875: 0x8D91, + 5876: 0x8D95, + 5877: 0x8D9E, + 5878: 0x8D9F, + 5879: 0x8DA0, + 5880: 0x8DA6, + 5881: 0x8DAB, + 5882: 0x8DAC, + 5883: 0x8DAF, + 5884: 0x8DB2, + 5885: 0x8DB5, + 5886: 0x8DB7, + 5887: 0x8DB9, + 5888: 0x8DBB, + 5889: 0x8DC0, + 5890: 0x8DC5, + 5891: 0x8DC6, + 5892: 0x8DC7, + 5893: 0x8DC8, + 5894: 0x8DCA, + 5895: 0x8DCE, + 5896: 0x8DD1, + 5897: 0x8DD4, + 5898: 0x8DD5, + 5899: 0x8DD7, + 5900: 0x8DD9, + 5901: 0x8DE4, + 5902: 0x8DE5, + 5903: 0x8DE7, + 5904: 0x8DEC, + 5905: 0x8DF0, + 5906: 0x8DBC, + 5907: 0x8DF1, + 5908: 0x8DF2, + 5909: 0x8DF4, + 5910: 0x8DFD, + 5911: 0x8E01, + 5912: 0x8E04, + 5913: 0x8E05, + 5914: 0x8E06, + 5915: 0x8E0B, + 5916: 0x8E11, + 5917: 0x8E14, + 5918: 0x8E16, + 5919: 0x8E20, + 5920: 0x8E21, + 5921: 0x8E22, + 5922: 0x8E23, + 5923: 0x8E26, + 5924: 0x8E27, + 5925: 0x8E31, + 5926: 0x8E33, + 5927: 0x8E36, + 5928: 0x8E37, + 5929: 0x8E38, + 5930: 0x8E39, + 5931: 0x8E3D, + 5932: 0x8E40, + 5933: 0x8E41, + 5934: 0x8E4B, + 5935: 0x8E4D, + 5936: 0x8E4E, + 5937: 0x8E4F, + 5938: 0x8E54, + 5939: 0x8E5B, + 5940: 0x8E5C, + 5941: 0x8E5D, + 5942: 0x8E5E, + 5943: 0x8E61, + 5944: 0x8E62, + 5945: 0x8E69, + 5946: 0x8E6C, + 5947: 0x8E6D, + 5948: 0x8E6F, + 5949: 0x8E70, + 5950: 0x8E71, + 5951: 0x8E79, + 5952: 0x8E7A, + 5953: 0x8E7B, + 5954: 0x8E82, + 5955: 0x8E83, + 5956: 0x8E89, + 5957: 0x8E90, + 5958: 0x8E92, + 5959: 0x8E95, + 5960: 0x8E9A, + 5961: 0x8E9B, + 5962: 0x8E9D, + 5963: 0x8E9E, + 5964: 0x8EA2, + 5965: 0x8EA7, + 5966: 0x8EA9, + 5967: 0x8EAD, + 5968: 0x8EAE, + 5969: 0x8EB3, + 5970: 0x8EB5, + 5971: 0x8EBA, + 5972: 0x8EBB, + 5973: 0x8EC0, + 5974: 0x8EC1, + 5975: 0x8EC3, + 5976: 0x8EC4, + 5977: 0x8EC7, + 5978: 0x8ECF, + 5979: 0x8ED1, + 5980: 0x8ED4, + 5981: 0x8EDC, + 5982: 0x8EE8, + 5983: 0x8EEE, + 5984: 0x8EF0, + 5985: 0x8EF1, + 5986: 0x8EF7, + 5987: 0x8EF9, + 5988: 0x8EFA, + 5989: 0x8EED, + 5990: 0x8F00, + 5991: 0x8F02, + 5992: 0x8F07, + 5993: 0x8F08, + 5994: 0x8F0F, + 5995: 0x8F10, + 5996: 0x8F16, + 5997: 0x8F17, + 5998: 0x8F18, + 5999: 0x8F1E, + 6000: 0x8F20, + 6001: 0x8F21, + 6002: 0x8F23, + 6003: 0x8F25, + 6004: 0x8F27, + 6005: 0x8F28, + 6006: 0x8F2C, + 6007: 0x8F2D, + 6008: 0x8F2E, + 6009: 0x8F34, + 6010: 0x8F35, + 6011: 0x8F36, + 6012: 0x8F37, + 6013: 0x8F3A, + 6014: 0x8F40, + 6015: 0x8F41, + 6016: 0x8F43, + 6017: 0x8F47, + 6018: 0x8F4F, + 6019: 0x8F51, + 6020: 0x8F52, + 6021: 0x8F53, + 6022: 0x8F54, + 6023: 0x8F55, + 6024: 0x8F58, + 6025: 0x8F5D, + 6026: 0x8F5E, + 6027: 0x8F65, + 6028: 0x8F9D, + 6029: 0x8FA0, + 6030: 0x8FA1, + 6031: 0x8FA4, + 6032: 0x8FA5, + 6033: 0x8FA6, + 6034: 0x8FB5, + 6035: 0x8FB6, + 6036: 0x8FB8, + 6037: 0x8FBE, + 6038: 0x8FC0, + 6039: 0x8FC1, + 6040: 0x8FC6, + 6041: 0x8FCA, + 6042: 0x8FCB, + 6043: 0x8FCD, + 6044: 0x8FD0, + 6045: 0x8FD2, + 6046: 0x8FD3, + 6047: 0x8FD5, + 6048: 0x8FE0, + 6049: 0x8FE3, + 6050: 0x8FE4, + 6051: 0x8FE8, + 6052: 0x8FEE, + 6053: 0x8FF1, + 6054: 0x8FF5, + 6055: 0x8FF6, + 6056: 0x8FFB, + 6057: 0x8FFE, + 6058: 0x9002, + 6059: 0x9004, + 6060: 0x9008, + 6061: 0x900C, + 6062: 0x9018, + 6063: 0x901B, + 6064: 0x9028, + 6065: 0x9029, + 6066: 0x902F, + 6067: 0x902A, + 6068: 0x902C, + 6069: 0x902D, + 6070: 0x9033, + 6071: 0x9034, + 6072: 0x9037, + 6073: 0x903F, + 6074: 0x9043, + 6075: 0x9044, + 6076: 0x904C, + 6077: 0x905B, + 6078: 0x905D, + 6079: 0x9062, + 6080: 0x9066, + 6081: 0x9067, + 6082: 0x906C, + 6083: 0x9070, + 6084: 0x9074, + 6085: 0x9079, + 6086: 0x9085, + 6087: 0x9088, + 6088: 0x908B, + 6089: 0x908C, + 6090: 0x908E, + 6091: 0x9090, + 6092: 0x9095, + 6093: 0x9097, + 6094: 0x9098, + 6095: 0x9099, + 6096: 0x909B, + 6097: 0x90A0, + 6098: 0x90A1, + 6099: 0x90A2, + 6100: 0x90A5, + 6101: 0x90B0, + 6102: 0x90B2, + 6103: 0x90B3, + 6104: 0x90B4, + 6105: 0x90B6, + 6106: 0x90BD, + 6107: 0x90CC, + 6108: 0x90BE, + 6109: 0x90C3, + 6110: 0x90C4, + 6111: 0x90C5, + 6112: 0x90C7, + 6113: 0x90C8, + 6114: 0x90D5, + 6115: 0x90D7, + 6116: 0x90D8, + 6117: 0x90D9, + 6118: 0x90DC, + 6119: 0x90DD, + 6120: 0x90DF, + 6121: 0x90E5, + 6122: 0x90D2, + 6123: 0x90F6, + 6124: 0x90EB, + 6125: 0x90EF, + 6126: 0x90F0, + 6127: 0x90F4, + 6128: 0x90FE, + 6129: 0x90FF, + 6130: 0x9100, + 6131: 0x9104, + 6132: 0x9105, + 6133: 0x9106, + 6134: 0x9108, + 6135: 0x910D, + 6136: 0x9110, + 6137: 0x9114, + 6138: 0x9116, + 6139: 0x9117, + 6140: 0x9118, + 6141: 0x911A, + 6142: 0x911C, + 6143: 0x911E, + 6144: 0x9120, + 6145: 0x9125, + 6146: 0x9122, + 6147: 0x9123, + 6148: 0x9127, + 6149: 0x9129, + 6150: 0x912E, + 6151: 0x912F, + 6152: 0x9131, + 6153: 0x9134, + 6154: 0x9136, + 6155: 0x9137, + 6156: 0x9139, + 6157: 0x913A, + 6158: 0x913C, + 6159: 0x913D, + 6160: 0x9143, + 6161: 0x9147, + 6162: 0x9148, + 6163: 0x914F, + 6164: 0x9153, + 6165: 0x9157, + 6166: 0x9159, + 6167: 0x915A, + 6168: 0x915B, + 6169: 0x9161, + 6170: 0x9164, + 6171: 0x9167, + 6172: 0x916D, + 6173: 0x9174, + 6174: 0x9179, + 6175: 0x917A, + 6176: 0x917B, + 6177: 0x9181, + 6178: 0x9183, + 6179: 0x9185, + 6180: 0x9186, + 6181: 0x918A, + 6182: 0x918E, + 6183: 0x9191, + 6184: 0x9193, + 6185: 0x9194, + 6186: 0x9195, + 6187: 0x9198, + 6188: 0x919E, + 6189: 0x91A1, + 6190: 0x91A6, + 6191: 0x91A8, + 6192: 0x91AC, + 6193: 0x91AD, + 6194: 0x91AE, + 6195: 0x91B0, + 6196: 0x91B1, + 6197: 0x91B2, + 6198: 0x91B3, + 6199: 0x91B6, + 6200: 0x91BB, + 6201: 0x91BC, + 6202: 0x91BD, + 6203: 0x91BF, + 6204: 0x91C2, + 6205: 0x91C3, + 6206: 0x91C5, + 6207: 0x91D3, + 6208: 0x91D4, + 6209: 0x91D7, + 6210: 0x91D9, + 6211: 0x91DA, + 6212: 0x91DE, + 6213: 0x91E4, + 6214: 0x91E5, + 6215: 0x91E9, + 6216: 0x91EA, + 6217: 0x91EC, + 6218: 0x91ED, + 6219: 0x91EE, + 6220: 0x91EF, + 6221: 0x91F0, + 6222: 0x91F1, + 6223: 0x91F7, + 6224: 0x91F9, + 6225: 0x91FB, + 6226: 0x91FD, + 6227: 0x9200, + 6228: 0x9201, + 6229: 0x9204, + 6230: 0x9205, + 6231: 0x9206, + 6232: 0x9207, + 6233: 0x9209, + 6234: 0x920A, + 6235: 0x920C, + 6236: 0x9210, + 6237: 0x9212, + 6238: 0x9213, + 6239: 0x9216, + 6240: 0x9218, + 6241: 0x921C, + 6242: 0x921D, + 6243: 0x9223, + 6244: 0x9224, + 6245: 0x9225, + 6246: 0x9226, + 6247: 0x9228, + 6248: 0x922E, + 6249: 0x922F, + 6250: 0x9230, + 6251: 0x9233, + 6252: 0x9235, + 6253: 0x9236, + 6254: 0x9238, + 6255: 0x9239, + 6256: 0x923A, + 6257: 0x923C, + 6258: 0x923E, + 6259: 0x9240, + 6260: 0x9242, + 6261: 0x9243, + 6262: 0x9246, + 6263: 0x9247, + 6264: 0x924A, + 6265: 0x924D, + 6266: 0x924E, + 6267: 0x924F, + 6268: 0x9251, + 6269: 0x9258, + 6270: 0x9259, + 6271: 0x925C, + 6272: 0x925D, + 6273: 0x9260, + 6274: 0x9261, + 6275: 0x9265, + 6276: 0x9267, + 6277: 0x9268, + 6278: 0x9269, + 6279: 0x926E, + 6280: 0x926F, + 6281: 0x9270, + 6282: 0x9275, + 6283: 0x9276, + 6284: 0x9277, + 6285: 0x9278, + 6286: 0x9279, + 6287: 0x927B, + 6288: 0x927C, + 6289: 0x927D, + 6290: 0x927F, + 6291: 0x9288, + 6292: 0x9289, + 6293: 0x928A, + 6294: 0x928D, + 6295: 0x928E, + 6296: 0x9292, + 6297: 0x9297, + 6298: 0x9299, + 6299: 0x929F, + 6300: 0x92A0, + 6301: 0x92A4, + 6302: 0x92A5, + 6303: 0x92A7, + 6304: 0x92A8, + 6305: 0x92AB, + 6306: 0x92AF, + 6307: 0x92B2, + 6308: 0x92B6, + 6309: 0x92B8, + 6310: 0x92BA, + 6311: 0x92BB, + 6312: 0x92BC, + 6313: 0x92BD, + 6314: 0x92BF, + 6315: 0x92C0, + 6316: 0x92C1, + 6317: 0x92C2, + 6318: 0x92C3, + 6319: 0x92C5, + 6320: 0x92C6, + 6321: 0x92C7, + 6322: 0x92C8, + 6323: 0x92CB, + 6324: 0x92CC, + 6325: 0x92CD, + 6326: 0x92CE, + 6327: 0x92D0, + 6328: 0x92D3, + 6329: 0x92D5, + 6330: 0x92D7, + 6331: 0x92D8, + 6332: 0x92D9, + 6333: 0x92DC, + 6334: 0x92DD, + 6335: 0x92DF, + 6336: 0x92E0, + 6337: 0x92E1, + 6338: 0x92E3, + 6339: 0x92E5, + 6340: 0x92E7, + 6341: 0x92E8, + 6342: 0x92EC, + 6343: 0x92EE, + 6344: 0x92F0, + 6345: 0x92F9, + 6346: 0x92FB, + 6347: 0x92FF, + 6348: 0x9300, + 6349: 0x9302, + 6350: 0x9308, + 6351: 0x930D, + 6352: 0x9311, + 6353: 0x9314, + 6354: 0x9315, + 6355: 0x931C, + 6356: 0x931D, + 6357: 0x931E, + 6358: 0x931F, + 6359: 0x9321, + 6360: 0x9324, + 6361: 0x9325, + 6362: 0x9327, + 6363: 0x9329, + 6364: 0x932A, + 6365: 0x9333, + 6366: 0x9334, + 6367: 0x9336, + 6368: 0x9337, + 6369: 0x9347, + 6370: 0x9348, + 6371: 0x9349, + 6372: 0x9350, + 6373: 0x9351, + 6374: 0x9352, + 6375: 0x9355, + 6376: 0x9357, + 6377: 0x9358, + 6378: 0x935A, + 6379: 0x935E, + 6380: 0x9364, + 6381: 0x9365, + 6382: 0x9367, + 6383: 0x9369, + 6384: 0x936A, + 6385: 0x936D, + 6386: 0x936F, + 6387: 0x9370, + 6388: 0x9371, + 6389: 0x9373, + 6390: 0x9374, + 6391: 0x9376, + 6392: 0x937A, + 6393: 0x937D, + 6394: 0x937F, + 6395: 0x9380, + 6396: 0x9381, + 6397: 0x9382, + 6398: 0x9388, + 6399: 0x938A, + 6400: 0x938B, + 6401: 0x938D, + 6402: 0x938F, + 6403: 0x9392, + 6404: 0x9395, + 6405: 0x9398, + 6406: 0x939B, + 6407: 0x939E, + 6408: 0x93A1, + 6409: 0x93A3, + 6410: 0x93A4, + 6411: 0x93A6, + 6412: 0x93A8, + 6413: 0x93AB, + 6414: 0x93B4, + 6415: 0x93B5, + 6416: 0x93B6, + 6417: 0x93BA, + 6418: 0x93A9, + 6419: 0x93C1, + 6420: 0x93C4, + 6421: 0x93C5, + 6422: 0x93C6, + 6423: 0x93C7, + 6424: 0x93C9, + 6425: 0x93CA, + 6426: 0x93CB, + 6427: 0x93CC, + 6428: 0x93CD, + 6429: 0x93D3, + 6430: 0x93D9, + 6431: 0x93DC, + 6432: 0x93DE, + 6433: 0x93DF, + 6434: 0x93E2, + 6435: 0x93E6, + 6436: 0x93E7, + 6437: 0x93F9, + 6438: 0x93F7, + 6439: 0x93F8, + 6440: 0x93FA, + 6441: 0x93FB, + 6442: 0x93FD, + 6443: 0x9401, + 6444: 0x9402, + 6445: 0x9404, + 6446: 0x9408, + 6447: 0x9409, + 6448: 0x940D, + 6449: 0x940E, + 6450: 0x940F, + 6451: 0x9415, + 6452: 0x9416, + 6453: 0x9417, + 6454: 0x941F, + 6455: 0x942E, + 6456: 0x942F, + 6457: 0x9431, + 6458: 0x9432, + 6459: 0x9433, + 6460: 0x9434, + 6461: 0x943B, + 6462: 0x943F, + 6463: 0x943D, + 6464: 0x9443, + 6465: 0x9445, + 6466: 0x9448, + 6467: 0x944A, + 6468: 0x944C, + 6469: 0x9455, + 6470: 0x9459, + 6471: 0x945C, + 6472: 0x945F, + 6473: 0x9461, + 6474: 0x9463, + 6475: 0x9468, + 6476: 0x946B, + 6477: 0x946D, + 6478: 0x946E, + 6479: 0x946F, + 6480: 0x9471, + 6481: 0x9472, + 6482: 0x9484, + 6483: 0x9483, + 6484: 0x9578, + 6485: 0x9579, + 6486: 0x957E, + 6487: 0x9584, + 6488: 0x9588, + 6489: 0x958C, + 6490: 0x958D, + 6491: 0x958E, + 6492: 0x959D, + 6493: 0x959E, + 6494: 0x959F, + 6495: 0x95A1, + 6496: 0x95A6, + 6497: 0x95A9, + 6498: 0x95AB, + 6499: 0x95AC, + 6500: 0x95B4, + 6501: 0x95B6, + 6502: 0x95BA, + 6503: 0x95BD, + 6504: 0x95BF, + 6505: 0x95C6, + 6506: 0x95C8, + 6507: 0x95C9, + 6508: 0x95CB, + 6509: 0x95D0, + 6510: 0x95D1, + 6511: 0x95D2, + 6512: 0x95D3, + 6513: 0x95D9, + 6514: 0x95DA, + 6515: 0x95DD, + 6516: 0x95DE, + 6517: 0x95DF, + 6518: 0x95E0, + 6519: 0x95E4, + 6520: 0x95E6, + 6521: 0x961D, + 6522: 0x961E, + 6523: 0x9622, + 6524: 0x9624, + 6525: 0x9625, + 6526: 0x9626, + 6527: 0x962C, + 6528: 0x9631, + 6529: 0x9633, + 6530: 0x9637, + 6531: 0x9638, + 6532: 0x9639, + 6533: 0x963A, + 6534: 0x963C, + 6535: 0x963D, + 6536: 0x9641, + 6537: 0x9652, + 6538: 0x9654, + 6539: 0x9656, + 6540: 0x9657, + 6541: 0x9658, + 6542: 0x9661, + 6543: 0x966E, + 6544: 0x9674, + 6545: 0x967B, + 6546: 0x967C, + 6547: 0x967E, + 6548: 0x967F, + 6549: 0x9681, + 6550: 0x9682, + 6551: 0x9683, + 6552: 0x9684, + 6553: 0x9689, + 6554: 0x9691, + 6555: 0x9696, + 6556: 0x969A, + 6557: 0x969D, + 6558: 0x969F, + 6559: 0x96A4, + 6560: 0x96A5, + 6561: 0x96A6, + 6562: 0x96A9, + 6563: 0x96AE, + 6564: 0x96AF, + 6565: 0x96B3, + 6566: 0x96BA, + 6567: 0x96CA, + 6568: 0x96D2, + 6569: 0x5DB2, + 6570: 0x96D8, + 6571: 0x96DA, + 6572: 0x96DD, + 6573: 0x96DE, + 6574: 0x96DF, + 6575: 0x96E9, + 6576: 0x96EF, + 6577: 0x96F1, + 6578: 0x96FA, + 6579: 0x9702, + 6580: 0x9703, + 6581: 0x9705, + 6582: 0x9709, + 6583: 0x971A, + 6584: 0x971B, + 6585: 0x971D, + 6586: 0x9721, + 6587: 0x9722, + 6588: 0x9723, + 6589: 0x9728, + 6590: 0x9731, + 6591: 0x9733, + 6592: 0x9741, + 6593: 0x9743, + 6594: 0x974A, + 6595: 0x974E, + 6596: 0x974F, + 6597: 0x9755, + 6598: 0x9757, + 6599: 0x9758, + 6600: 0x975A, + 6601: 0x975B, + 6602: 0x9763, + 6603: 0x9767, + 6604: 0x976A, + 6605: 0x976E, + 6606: 0x9773, + 6607: 0x9776, + 6608: 0x9777, + 6609: 0x9778, + 6610: 0x977B, + 6611: 0x977D, + 6612: 0x977F, + 6613: 0x9780, + 6614: 0x9789, + 6615: 0x9795, + 6616: 0x9796, + 6617: 0x9797, + 6618: 0x9799, + 6619: 0x979A, + 6620: 0x979E, + 6621: 0x979F, + 6622: 0x97A2, + 6623: 0x97AC, + 6624: 0x97AE, + 6625: 0x97B1, + 6626: 0x97B2, + 6627: 0x97B5, + 6628: 0x97B6, + 6629: 0x97B8, + 6630: 0x97B9, + 6631: 0x97BA, + 6632: 0x97BC, + 6633: 0x97BE, + 6634: 0x97BF, + 6635: 0x97C1, + 6636: 0x97C4, + 6637: 0x97C5, + 6638: 0x97C7, + 6639: 0x97C9, + 6640: 0x97CA, + 6641: 0x97CC, + 6642: 0x97CD, + 6643: 0x97CE, + 6644: 0x97D0, + 6645: 0x97D1, + 6646: 0x97D4, + 6647: 0x97D7, + 6648: 0x97D8, + 6649: 0x97D9, + 6650: 0x97DD, + 6651: 0x97DE, + 6652: 0x97E0, + 6653: 0x97DB, + 6654: 0x97E1, + 6655: 0x97E4, + 6656: 0x97EF, + 6657: 0x97F1, + 6658: 0x97F4, + 6659: 0x97F7, + 6660: 0x97F8, + 6661: 0x97FA, + 6662: 0x9807, + 6663: 0x980A, + 6664: 0x9819, + 6665: 0x980D, + 6666: 0x980E, + 6667: 0x9814, + 6668: 0x9816, + 6669: 0x981C, + 6670: 0x981E, + 6671: 0x9820, + 6672: 0x9823, + 6673: 0x9826, + 6674: 0x982B, + 6675: 0x982E, + 6676: 0x982F, + 6677: 0x9830, + 6678: 0x9832, + 6679: 0x9833, + 6680: 0x9835, + 6681: 0x9825, + 6682: 0x983E, + 6683: 0x9844, + 6684: 0x9847, + 6685: 0x984A, + 6686: 0x9851, + 6687: 0x9852, + 6688: 0x9853, + 6689: 0x9856, + 6690: 0x9857, + 6691: 0x9859, + 6692: 0x985A, + 6693: 0x9862, + 6694: 0x9863, + 6695: 0x9865, + 6696: 0x9866, + 6697: 0x986A, + 6698: 0x986C, + 6699: 0x98AB, + 6700: 0x98AD, + 6701: 0x98AE, + 6702: 0x98B0, + 6703: 0x98B4, + 6704: 0x98B7, + 6705: 0x98B8, + 6706: 0x98BA, + 6707: 0x98BB, + 6708: 0x98BF, + 6709: 0x98C2, + 6710: 0x98C5, + 6711: 0x98C8, + 6712: 0x98CC, + 6713: 0x98E1, + 6714: 0x98E3, + 6715: 0x98E5, + 6716: 0x98E6, + 6717: 0x98E7, + 6718: 0x98EA, + 6719: 0x98F3, + 6720: 0x98F6, + 6721: 0x9902, + 6722: 0x9907, + 6723: 0x9908, + 6724: 0x9911, + 6725: 0x9915, + 6726: 0x9916, + 6727: 0x9917, + 6728: 0x991A, + 6729: 0x991B, + 6730: 0x991C, + 6731: 0x991F, + 6732: 0x9922, + 6733: 0x9926, + 6734: 0x9927, + 6735: 0x992B, + 6736: 0x9931, + 6737: 0x9932, + 6738: 0x9933, + 6739: 0x9934, + 6740: 0x9935, + 6741: 0x9939, + 6742: 0x993A, + 6743: 0x993B, + 6744: 0x993C, + 6745: 0x9940, + 6746: 0x9941, + 6747: 0x9946, + 6748: 0x9947, + 6749: 0x9948, + 6750: 0x994D, + 6751: 0x994E, + 6752: 0x9954, + 6753: 0x9958, + 6754: 0x9959, + 6755: 0x995B, + 6756: 0x995C, + 6757: 0x995E, + 6758: 0x995F, + 6759: 0x9960, + 6760: 0x999B, + 6761: 0x999D, + 6762: 0x999F, + 6763: 0x99A6, + 6764: 0x99B0, + 6765: 0x99B1, + 6766: 0x99B2, + 6767: 0x99B5, + 6768: 0x99B9, + 6769: 0x99BA, + 6770: 0x99BD, + 6771: 0x99BF, + 6772: 0x99C3, + 6773: 0x99C9, + 6774: 0x99D3, + 6775: 0x99D4, + 6776: 0x99D9, + 6777: 0x99DA, + 6778: 0x99DC, + 6779: 0x99DE, + 6780: 0x99E7, + 6781: 0x99EA, + 6782: 0x99EB, + 6783: 0x99EC, + 6784: 0x99F0, + 6785: 0x99F4, + 6786: 0x99F5, + 6787: 0x99F9, + 6788: 0x99FD, + 6789: 0x99FE, + 6790: 0x9A02, + 6791: 0x9A03, + 6792: 0x9A04, + 6793: 0x9A0B, + 6794: 0x9A0C, + 6795: 0x9A10, + 6796: 0x9A11, + 6797: 0x9A16, + 6798: 0x9A1E, + 6799: 0x9A20, + 6800: 0x9A22, + 6801: 0x9A23, + 6802: 0x9A24, + 6803: 0x9A27, + 6804: 0x9A2D, + 6805: 0x9A2E, + 6806: 0x9A33, + 6807: 0x9A35, + 6808: 0x9A36, + 6809: 0x9A38, + 6810: 0x9A47, + 6811: 0x9A41, + 6812: 0x9A44, + 6813: 0x9A4A, + 6814: 0x9A4B, + 6815: 0x9A4C, + 6816: 0x9A4E, + 6817: 0x9A51, + 6818: 0x9A54, + 6819: 0x9A56, + 6820: 0x9A5D, + 6821: 0x9AAA, + 6822: 0x9AAC, + 6823: 0x9AAE, + 6824: 0x9AAF, + 6825: 0x9AB2, + 6826: 0x9AB4, + 6827: 0x9AB5, + 6828: 0x9AB6, + 6829: 0x9AB9, + 6830: 0x9ABB, + 6831: 0x9ABE, + 6832: 0x9ABF, + 6833: 0x9AC1, + 6834: 0x9AC3, + 6835: 0x9AC6, + 6836: 0x9AC8, + 6837: 0x9ACE, + 6838: 0x9AD0, + 6839: 0x9AD2, + 6840: 0x9AD5, + 6841: 0x9AD6, + 6842: 0x9AD7, + 6843: 0x9ADB, + 6844: 0x9ADC, + 6845: 0x9AE0, + 6846: 0x9AE4, + 6847: 0x9AE5, + 6848: 0x9AE7, + 6849: 0x9AE9, + 6850: 0x9AEC, + 6851: 0x9AF2, + 6852: 0x9AF3, + 6853: 0x9AF5, + 6854: 0x9AF9, + 6855: 0x9AFA, + 6856: 0x9AFD, + 6857: 0x9AFF, + 6858: 0x9B00, + 6859: 0x9B01, + 6860: 0x9B02, + 6861: 0x9B03, + 6862: 0x9B04, + 6863: 0x9B05, + 6864: 0x9B08, + 6865: 0x9B09, + 6866: 0x9B0B, + 6867: 0x9B0C, + 6868: 0x9B0D, + 6869: 0x9B0E, + 6870: 0x9B10, + 6871: 0x9B12, + 6872: 0x9B16, + 6873: 0x9B19, + 6874: 0x9B1B, + 6875: 0x9B1C, + 6876: 0x9B20, + 6877: 0x9B26, + 6878: 0x9B2B, + 6879: 0x9B2D, + 6880: 0x9B33, + 6881: 0x9B34, + 6882: 0x9B35, + 6883: 0x9B37, + 6884: 0x9B39, + 6885: 0x9B3A, + 6886: 0x9B3D, + 6887: 0x9B48, + 6888: 0x9B4B, + 6889: 0x9B4C, + 6890: 0x9B55, + 6891: 0x9B56, + 6892: 0x9B57, + 6893: 0x9B5B, + 6894: 0x9B5E, + 6895: 0x9B61, + 6896: 0x9B63, + 6897: 0x9B65, + 6898: 0x9B66, + 6899: 0x9B68, + 6900: 0x9B6A, + 6901: 0x9B6B, + 6902: 0x9B6C, + 6903: 0x9B6D, + 6904: 0x9B6E, + 6905: 0x9B73, + 6906: 0x9B75, + 6907: 0x9B77, + 6908: 0x9B78, + 6909: 0x9B79, + 6910: 0x9B7F, + 6911: 0x9B80, + 6912: 0x9B84, + 6913: 0x9B85, + 6914: 0x9B86, + 6915: 0x9B87, + 6916: 0x9B89, + 6917: 0x9B8A, + 6918: 0x9B8B, + 6919: 0x9B8D, + 6920: 0x9B8F, + 6921: 0x9B90, + 6922: 0x9B94, + 6923: 0x9B9A, + 6924: 0x9B9D, + 6925: 0x9B9E, + 6926: 0x9BA6, + 6927: 0x9BA7, + 6928: 0x9BA9, + 6929: 0x9BAC, + 6930: 0x9BB0, + 6931: 0x9BB1, + 6932: 0x9BB2, + 6933: 0x9BB7, + 6934: 0x9BB8, + 6935: 0x9BBB, + 6936: 0x9BBC, + 6937: 0x9BBE, + 6938: 0x9BBF, + 6939: 0x9BC1, + 6940: 0x9BC7, + 6941: 0x9BC8, + 6942: 0x9BCE, + 6943: 0x9BD0, + 6944: 0x9BD7, + 6945: 0x9BD8, + 6946: 0x9BDD, + 6947: 0x9BDF, + 6948: 0x9BE5, + 6949: 0x9BE7, + 6950: 0x9BEA, + 6951: 0x9BEB, + 6952: 0x9BEF, + 6953: 0x9BF3, + 6954: 0x9BF7, + 6955: 0x9BF8, + 6956: 0x9BF9, + 6957: 0x9BFA, + 6958: 0x9BFD, + 6959: 0x9BFF, + 6960: 0x9C00, + 6961: 0x9C02, + 6962: 0x9C0B, + 6963: 0x9C0F, + 6964: 0x9C11, + 6965: 0x9C16, + 6966: 0x9C18, + 6967: 0x9C19, + 6968: 0x9C1A, + 6969: 0x9C1C, + 6970: 0x9C1E, + 6971: 0x9C22, + 6972: 0x9C23, + 6973: 0x9C26, + 6974: 0x9C27, + 6975: 0x9C28, + 6976: 0x9C29, + 6977: 0x9C2A, + 6978: 0x9C31, + 6979: 0x9C35, + 6980: 0x9C36, + 6981: 0x9C37, + 6982: 0x9C3D, + 6983: 0x9C41, + 6984: 0x9C43, + 6985: 0x9C44, + 6986: 0x9C45, + 6987: 0x9C49, + 6988: 0x9C4A, + 6989: 0x9C4E, + 6990: 0x9C4F, + 6991: 0x9C50, + 6992: 0x9C53, + 6993: 0x9C54, + 6994: 0x9C56, + 6995: 0x9C58, + 6996: 0x9C5B, + 6997: 0x9C5D, + 6998: 0x9C5E, + 6999: 0x9C5F, + 7000: 0x9C63, + 7001: 0x9C69, + 7002: 0x9C6A, + 7003: 0x9C5C, + 7004: 0x9C6B, + 7005: 0x9C68, + 7006: 0x9C6E, + 7007: 0x9C70, + 7008: 0x9C72, + 7009: 0x9C75, + 7010: 0x9C77, + 7011: 0x9C7B, + 7012: 0x9CE6, + 7013: 0x9CF2, + 7014: 0x9CF7, + 7015: 0x9CF9, + 7016: 0x9D0B, + 7017: 0x9D02, + 7018: 0x9D11, + 7019: 0x9D17, + 7020: 0x9D18, + 7021: 0x9D1C, + 7022: 0x9D1D, + 7023: 0x9D1E, + 7024: 0x9D2F, + 7025: 0x9D30, + 7026: 0x9D32, + 7027: 0x9D33, + 7028: 0x9D34, + 7029: 0x9D3A, + 7030: 0x9D3C, + 7031: 0x9D45, + 7032: 0x9D3D, + 7033: 0x9D42, + 7034: 0x9D43, + 7035: 0x9D47, + 7036: 0x9D4A, + 7037: 0x9D53, + 7038: 0x9D54, + 7039: 0x9D5F, + 7040: 0x9D63, + 7041: 0x9D62, + 7042: 0x9D65, + 7043: 0x9D69, + 7044: 0x9D6A, + 7045: 0x9D6B, + 7046: 0x9D70, + 7047: 0x9D76, + 7048: 0x9D77, + 7049: 0x9D7B, + 7050: 0x9D7C, + 7051: 0x9D7E, + 7052: 0x9D83, + 7053: 0x9D84, + 7054: 0x9D86, + 7055: 0x9D8A, + 7056: 0x9D8D, + 7057: 0x9D8E, + 7058: 0x9D92, + 7059: 0x9D93, + 7060: 0x9D95, + 7061: 0x9D96, + 7062: 0x9D97, + 7063: 0x9D98, + 7064: 0x9DA1, + 7065: 0x9DAA, + 7066: 0x9DAC, + 7067: 0x9DAE, + 7068: 0x9DB1, + 7069: 0x9DB5, + 7070: 0x9DB9, + 7071: 0x9DBC, + 7072: 0x9DBF, + 7073: 0x9DC3, + 7074: 0x9DC7, + 7075: 0x9DC9, + 7076: 0x9DCA, + 7077: 0x9DD4, + 7078: 0x9DD5, + 7079: 0x9DD6, + 7080: 0x9DD7, + 7081: 0x9DDA, + 7082: 0x9DDE, + 7083: 0x9DDF, + 7084: 0x9DE0, + 7085: 0x9DE5, + 7086: 0x9DE7, + 7087: 0x9DE9, + 7088: 0x9DEB, + 7089: 0x9DEE, + 7090: 0x9DF0, + 7091: 0x9DF3, + 7092: 0x9DF4, + 7093: 0x9DFE, + 7094: 0x9E0A, + 7095: 0x9E02, + 7096: 0x9E07, + 7097: 0x9E0E, + 7098: 0x9E10, + 7099: 0x9E11, + 7100: 0x9E12, + 7101: 0x9E15, + 7102: 0x9E16, + 7103: 0x9E19, + 7104: 0x9E1C, + 7105: 0x9E1D, + 7106: 0x9E7A, + 7107: 0x9E7B, + 7108: 0x9E7C, + 7109: 0x9E80, + 7110: 0x9E82, + 7111: 0x9E83, + 7112: 0x9E84, + 7113: 0x9E85, + 7114: 0x9E87, + 7115: 0x9E8E, + 7116: 0x9E8F, + 7117: 0x9E96, + 7118: 0x9E98, + 7119: 0x9E9B, + 7120: 0x9E9E, + 7121: 0x9EA4, + 7122: 0x9EA8, + 7123: 0x9EAC, + 7124: 0x9EAE, + 7125: 0x9EAF, + 7126: 0x9EB0, + 7127: 0x9EB3, + 7128: 0x9EB4, + 7129: 0x9EB5, + 7130: 0x9EC6, + 7131: 0x9EC8, + 7132: 0x9ECB, + 7133: 0x9ED5, + 7134: 0x9EDF, + 7135: 0x9EE4, + 7136: 0x9EE7, + 7137: 0x9EEC, + 7138: 0x9EED, + 7139: 0x9EEE, + 7140: 0x9EF0, + 7141: 0x9EF1, + 7142: 0x9EF2, + 7143: 0x9EF5, + 7144: 0x9EF8, + 7145: 0x9EFF, + 7146: 0x9F02, + 7147: 0x9F03, + 7148: 0x9F09, + 7149: 0x9F0F, + 7150: 0x9F10, + 7151: 0x9F11, + 7152: 0x9F12, + 7153: 0x9F14, + 7154: 0x9F16, + 7155: 0x9F17, + 7156: 0x9F19, + 7157: 0x9F1A, + 7158: 0x9F1B, + 7159: 0x9F1F, + 7160: 0x9F22, + 7161: 0x9F26, + 7162: 0x9F2A, + 7163: 0x9F2B, + 7164: 0x9F2F, + 7165: 0x9F31, + 7166: 0x9F32, + 7167: 0x9F34, + 7168: 0x9F37, + 7169: 0x9F39, + 7170: 0x9F3A, + 7171: 0x9F3C, + 7172: 0x9F3D, + 7173: 0x9F3F, + 7174: 0x9F41, + 7175: 0x9F43, + 7176: 0x9F44, + 7177: 0x9F45, + 7178: 0x9F46, + 7179: 0x9F47, + 7180: 0x9F53, + 7181: 0x9F55, + 7182: 0x9F56, + 7183: 0x9F57, + 7184: 0x9F58, + 7185: 0x9F5A, + 7186: 0x9F5D, + 7187: 0x9F5E, + 7188: 0x9F68, + 7189: 0x9F69, + 7190: 0x9F6D, + 7191: 0x9F6E, + 7192: 0x9F6F, + 7193: 0x9F70, + 7194: 0x9F71, + 7195: 0x9F73, + 7196: 0x9F75, + 7197: 0x9F7A, + 7198: 0x9F7D, + 7199: 0x9F8F, + 7200: 0x9F90, + 7201: 0x9F91, + 7202: 0x9F92, + 7203: 0x9F94, + 7204: 0x9F96, + 7205: 0x9F97, + 7206: 0x9F9E, + 7207: 0x9FA1, + 7208: 0x9FA2, + 7209: 0x9FA3, + 7210: 0x9FA5, +} + +const ( + jis0208 = 1 + jis0212 = 2 + codeMask = 0x7f + codeShift = 7 + tableShift = 14 +) + +const numEncodeTables = 6 + +// encodeX are the encoding tables from Unicode to JIS code, +// sorted by decreasing length. +// encode0: 20902 entries for runes in [19968, 40870). +// encode1: 1632 entries for runes in [ 8208, 9840). +// encode2: 974 entries for runes in [12288, 13262). +// encode3: 959 entries for runes in [ 161, 1120). +// encode4: 261 entries for runes in [63785, 64046). +// encode5: 229 entries for runes in [65281, 65510). +// +// The high two bits of the value record whether the JIS code comes from the +// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2). +// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the +// JIS code (94*j1 + j2) within that table. + +const encode0Low, encode0High = 19968, 40870 + +var encode0 = [...]uint16{ + 19968 - 19968: jis0208<<14 | 0x0F<<7 | 0x4B, + 19969 - 19968: jis0208<<14 | 0x22<<7 | 0x59, + 19970 - 19968: jis0212<<14 | 0x0F<<7 | 0x00, + 19971 - 19968: jis0208<<14 | 0x1B<<7 | 0x16, + 19972 - 19968: jis0212<<14 | 0x0F<<7 | 0x01, + 19973 - 19968: jis0212<<14 | 0x0F<<7 | 0x02, + 19975 - 19968: jis0208<<14 | 0x2A<<7 | 0x5B, + 19976 - 19968: jis0208<<14 | 0x1D<<7 | 0x45, + 19977 - 19968: jis0208<<14 | 0x1A<<7 | 0x0F, + 19978 - 19968: jis0208<<14 | 0x1D<<7 | 0x44, + 19979 - 19968: jis0208<<14 | 0x11<<7 | 0x1B, + 19980 - 19968: jis0212<<14 | 0x0F<<7 | 0x03, + 19981 - 19968: jis0208<<14 | 0x28<<7 | 0x33, + 19982 - 19968: jis0208<<14 | 0x2C<<7 | 0x1E, + 19984 - 19968: jis0208<<14 | 0x2F<<7 | 0x01, + 19985 - 19968: jis0208<<14 | 0x10<<7 | 0x0E, + 19986 - 19968: jis0212<<14 | 0x0F<<7 | 0x04, + 19988 - 19968: jis0208<<14 | 0x12<<7 | 0x4D, + 19989 - 19968: jis0208<<14 | 0x2F<<7 | 0x02, + 19990 - 19968: jis0208<<14 | 0x1F<<7 | 0x03, + 19991 - 19968: jis0208<<14 | 0x31<<7 | 0x21, + 19992 - 19968: jis0208<<14 | 0x14<<7 | 0x35, + 19993 - 19968: jis0208<<14 | 0x29<<7 | 0x19, + 19998 - 19968: jis0208<<14 | 0x1D<<7 | 0x46, + 19999 - 19968: jis0212<<14 | 0x0F<<7 | 0x05, + 20001 - 19968: jis0208<<14 | 0x2D<<7 | 0x1D, + 20003 - 19968: jis0212<<14 | 0x0F<<7 | 0x06, + 20004 - 19968: jis0212<<14 | 0x0F<<7 | 0x07, + 20006 - 19968: jis0208<<14 | 0x29<<7 | 0x21, + 20008 - 19968: jis0208<<14 | 0x58<<7 | 0x0C, + 20010 - 19968: jis0208<<14 | 0x2F<<7 | 0x03, + 20011 - 19968: jis0212<<14 | 0x0F<<7 | 0x09, + 20013 - 19968: jis0208<<14 | 0x22<<7 | 0x45, + 20014 - 19968: jis0212<<14 | 0x0F<<7 | 0x0A, + 20015 - 19968: jis0212<<14 | 0x0F<<7 | 0x0B, + 20016 - 19968: jis0212<<14 | 0x0F<<7 | 0x0C, + 20017 - 19968: jis0208<<14 | 0x2F<<7 | 0x04, + 20018 - 19968: jis0208<<14 | 0x15<<7 | 0x59, + 20021 - 19968: jis0212<<14 | 0x0F<<7 | 0x0D, + 20022 - 19968: jis0208<<14 | 0x2F<<7 | 0x05, + 20024 - 19968: jis0208<<14 | 0x13<<7 | 0x3C, + 20025 - 19968: jis0208<<14 | 0x22<<7 | 0x0F, + 20027 - 19968: jis0208<<14 | 0x1B<<7 | 0x46, + 20028 - 19968: jis0208<<14 | 0x2F<<7 | 0x06, + 20031 - 19968: jis0208<<14 | 0x2F<<7 | 0x07, + 20032 - 19968: jis0212<<14 | 0x0F<<7 | 0x0E, + 20033 - 19968: jis0212<<14 | 0x0F<<7 | 0x0F, + 20034 - 19968: jis0208<<14 | 0x2F<<7 | 0x08, + 20035 - 19968: jis0208<<14 | 0x26<<7 | 0x14, + 20036 - 19968: jis0212<<14 | 0x0F<<7 | 0x10, + 20037 - 19968: jis0208<<14 | 0x14<<7 | 0x36, + 20039 - 19968: jis0212<<14 | 0x0F<<7 | 0x11, + 20043 - 19968: jis0208<<14 | 0x26<<7 | 0x16, + 20045 - 19968: jis0208<<14 | 0x25<<7 | 0x42, + 20046 - 19968: jis0208<<14 | 0x17<<7 | 0x22, + 20047 - 19968: jis0208<<14 | 0x2A<<7 | 0x12, + 20049 - 19968: jis0212<<14 | 0x0F<<7 | 0x12, + 20053 - 19968: jis0208<<14 | 0x48<<7 | 0x28, + 20054 - 19968: jis0208<<14 | 0x2F<<7 | 0x09, + 20055 - 19968: jis0208<<14 | 0x1D<<7 | 0x47, + 20056 - 19968: jis0208<<14 | 0x2F<<7 | 0x0A, + 20057 - 19968: jis0208<<14 | 0x11<<7 | 0x14, + 20058 - 19968: jis0212<<14 | 0x0F<<7 | 0x13, + 20060 - 19968: jis0212<<14 | 0x0F<<7 | 0x14, + 20061 - 19968: jis0208<<14 | 0x15<<7 | 0x44, + 20062 - 19968: jis0208<<14 | 0x17<<7 | 0x4F, + 20063 - 19968: jis0208<<14 | 0x2B<<7 | 0x48, + 20066 - 19968: jis0208<<14 | 0x35<<7 | 0x05, + 20067 - 19968: jis0212<<14 | 0x0F<<7 | 0x15, + 20072 - 19968: jis0212<<14 | 0x0F<<7 | 0x16, + 20073 - 19968: jis0212<<14 | 0x0F<<7 | 0x17, + 20081 - 19968: jis0208<<14 | 0x2C<<7 | 0x4F, + 20083 - 19968: jis0208<<14 | 0x25<<7 | 0x5C, + 20084 - 19968: jis0212<<14 | 0x0F<<7 | 0x18, + 20085 - 19968: jis0212<<14 | 0x0F<<7 | 0x19, + 20089 - 19968: jis0212<<14 | 0x0F<<7 | 0x1A, + 20094 - 19968: jis0208<<14 | 0x13<<7 | 0x04, + 20095 - 19968: jis0212<<14 | 0x0F<<7 | 0x1B, + 20096 - 19968: jis0208<<14 | 0x14<<7 | 0x14, + 20098 - 19968: jis0208<<14 | 0x2F<<7 | 0x0B, + 20101 - 19968: jis0208<<14 | 0x2F<<7 | 0x0C, + 20102 - 19968: jis0208<<14 | 0x2D<<7 | 0x1A, + 20104 - 19968: jis0208<<14 | 0x2C<<7 | 0x1C, + 20105 - 19968: jis0208<<14 | 0x20<<7 | 0x47, + 20106 - 19968: jis0208<<14 | 0x2F<<7 | 0x0E, + 20107 - 19968: jis0208<<14 | 0x1A<<7 | 0x55, + 20108 - 19968: jis0208<<14 | 0x25<<7 | 0x52, + 20109 - 19968: jis0212<<14 | 0x0F<<7 | 0x1C, + 20110 - 19968: jis0208<<14 | 0x2F<<7 | 0x11, + 20113 - 19968: jis0208<<14 | 0x10<<7 | 0x1D, + 20114 - 19968: jis0208<<14 | 0x17<<7 | 0x3E, + 20116 - 19968: jis0208<<14 | 0x17<<7 | 0x3D, + 20117 - 19968: jis0208<<14 | 0x0F<<7 | 0x45, + 20118 - 19968: jis0212<<14 | 0x0F<<7 | 0x1D, + 20119 - 19968: jis0212<<14 | 0x0F<<7 | 0x1E, + 20120 - 19968: jis0208<<14 | 0x2E<<7 | 0x2A, + 20121 - 19968: jis0208<<14 | 0x2E<<7 | 0x29, + 20123 - 19968: jis0208<<14 | 0x19<<7 | 0x12, + 20124 - 19968: jis0208<<14 | 0x0F<<7 | 0x00, + 20125 - 19968: jis0212<<14 | 0x0F<<7 | 0x1F, + 20126 - 19968: jis0208<<14 | 0x2F<<7 | 0x12, + 20127 - 19968: jis0208<<14 | 0x2F<<7 | 0x13, + 20128 - 19968: jis0208<<14 | 0x2F<<7 | 0x14, + 20129 - 19968: jis0208<<14 | 0x2A<<7 | 0x13, + 20130 - 19968: jis0208<<14 | 0x2F<<7 | 0x15, + 20132 - 19968: jis0208<<14 | 0x17<<7 | 0x51, + 20133 - 19968: jis0208<<14 | 0x0F<<7 | 0x46, + 20134 - 19968: jis0208<<14 | 0x2A<<7 | 0x51, + 20136 - 19968: jis0208<<14 | 0x14<<7 | 0x5B, + 20139 - 19968: jis0208<<14 | 0x14<<7 | 0x5C, + 20140 - 19968: jis0208<<14 | 0x14<<7 | 0x5D, + 20141 - 19968: jis0208<<14 | 0x23<<7 | 0x41, + 20142 - 19968: jis0208<<14 | 0x2D<<7 | 0x1B, + 20143 - 19968: jis0212<<14 | 0x0F<<7 | 0x20, + 20144 - 19968: jis0208<<14 | 0x2F<<7 | 0x16, + 20147 - 19968: jis0208<<14 | 0x2F<<7 | 0x17, + 20150 - 19968: jis0208<<14 | 0x2F<<7 | 0x18, + 20153 - 19968: jis0212<<14 | 0x0F<<7 | 0x21, + 20154 - 19968: jis0208<<14 | 0x1E<<7 | 0x2C, + 20160 - 19968: jis0208<<14 | 0x1C<<7 | 0x19, + 20161 - 19968: jis0208<<14 | 0x1E<<7 | 0x2D, + 20162 - 19968: jis0208<<14 | 0x2F<<7 | 0x1D, + 20163 - 19968: jis0212<<14 | 0x0F<<7 | 0x22, + 20164 - 19968: jis0208<<14 | 0x2F<<7 | 0x1B, + 20166 - 19968: jis0208<<14 | 0x2F<<7 | 0x1C, + 20167 - 19968: jis0208<<14 | 0x14<<7 | 0x37, + 20170 - 19968: jis0208<<14 | 0x19<<7 | 0x02, + 20171 - 19968: jis0208<<14 | 0x11<<7 | 0x4F, + 20173 - 19968: jis0208<<14 | 0x2F<<7 | 0x1A, + 20174 - 19968: jis0208<<14 | 0x2F<<7 | 0x19, + 20175 - 19968: jis0208<<14 | 0x29<<7 | 0x08, + 20176 - 19968: jis0212<<14 | 0x0F<<7 | 0x23, + 20180 - 19968: jis0208<<14 | 0x1A<<7 | 0x25, + 20181 - 19968: jis0208<<14 | 0x1A<<7 | 0x24, + 20182 - 19968: jis0208<<14 | 0x21<<7 | 0x1D, + 20183 - 19968: jis0208<<14 | 0x2F<<7 | 0x1E, + 20184 - 19968: jis0208<<14 | 0x28<<7 | 0x34, + 20185 - 19968: jis0208<<14 | 0x1F<<7 | 0x46, + 20186 - 19968: jis0212<<14 | 0x0F<<7 | 0x24, + 20187 - 19968: jis0212<<14 | 0x0F<<7 | 0x25, + 20189 - 19968: jis0208<<14 | 0x00<<7 | 0x17, + 20190 - 19968: jis0208<<14 | 0x2F<<7 | 0x1F, + 20191 - 19968: jis0208<<14 | 0x2F<<7 | 0x21, + 20192 - 19968: jis0212<<14 | 0x0F<<7 | 0x26, + 20193 - 19968: jis0208<<14 | 0x58<<7 | 0x0D, + 20194 - 19968: jis0212<<14 | 0x0F<<7 | 0x28, + 20195 - 19968: jis0208<<14 | 0x21<<7 | 0x44, + 20196 - 19968: jis0208<<14 | 0x2D<<7 | 0x40, + 20197 - 19968: jis0208<<14 | 0x0F<<7 | 0x29, + 20200 - 19968: jis0212<<14 | 0x0F<<7 | 0x29, + 20205 - 19968: jis0208<<14 | 0x2F<<7 | 0x20, + 20206 - 19968: jis0208<<14 | 0x11<<7 | 0x1D, + 20207 - 19968: jis0212<<14 | 0x0F<<7 | 0x2A, + 20208 - 19968: jis0208<<14 | 0x15<<7 | 0x23, + 20209 - 19968: jis0212<<14 | 0x0F<<7 | 0x2B, + 20210 - 19968: jis0208<<14 | 0x22<<7 | 0x46, + 20211 - 19968: jis0212<<14 | 0x0F<<7 | 0x2C, + 20213 - 19968: jis0212<<14 | 0x0F<<7 | 0x2D, + 20214 - 19968: jis0208<<14 | 0x16<<7 | 0x4E, + 20215 - 19968: jis0208<<14 | 0x2F<<7 | 0x22, + 20219 - 19968: jis0208<<14 | 0x26<<7 | 0x03, + 20220 - 19968: jis0208<<14 | 0x58<<7 | 0x0E, + 20221 - 19968: jis0212<<14 | 0x0F<<7 | 0x2E, + 20222 - 19968: jis0212<<14 | 0x0F<<7 | 0x2F, + 20223 - 19968: jis0212<<14 | 0x0F<<7 | 0x30, + 20224 - 19968: jis0208<<14 | 0x58<<7 | 0x0F, + 20225 - 19968: jis0208<<14 | 0x13<<7 | 0x4A, + 20226 - 19968: jis0212<<14 | 0x0F<<7 | 0x32, + 20227 - 19968: jis0208<<14 | 0x58<<7 | 0x10, + 20232 - 19968: jis0212<<14 | 0x0F<<7 | 0x34, + 20233 - 19968: jis0208<<14 | 0x2F<<7 | 0x23, + 20234 - 19968: jis0208<<14 | 0x0F<<7 | 0x2A, + 20235 - 19968: jis0212<<14 | 0x0F<<7 | 0x35, + 20236 - 19968: jis0212<<14 | 0x0F<<7 | 0x36, + 20237 - 19968: jis0208<<14 | 0x17<<7 | 0x3F, + 20238 - 19968: jis0208<<14 | 0x13<<7 | 0x4B, + 20239 - 19968: jis0208<<14 | 0x28<<7 | 0x59, + 20240 - 19968: jis0208<<14 | 0x27<<7 | 0x11, + 20241 - 19968: jis0208<<14 | 0x14<<7 | 0x38, + 20242 - 19968: jis0212<<14 | 0x0F<<7 | 0x37, + 20245 - 19968: jis0212<<14 | 0x0F<<7 | 0x38, + 20246 - 19968: jis0212<<14 | 0x0F<<7 | 0x39, + 20247 - 19968: jis0212<<14 | 0x0F<<7 | 0x3A, + 20249 - 19968: jis0212<<14 | 0x0F<<7 | 0x3B, + 20250 - 19968: jis0208<<14 | 0x11<<7 | 0x50, + 20252 - 19968: jis0208<<14 | 0x2F<<7 | 0x46, + 20253 - 19968: jis0208<<14 | 0x24<<7 | 0x20, + 20270 - 19968: jis0212<<14 | 0x0F<<7 | 0x3C, + 20271 - 19968: jis0208<<14 | 0x26<<7 | 0x4B, + 20272 - 19968: jis0208<<14 | 0x2F<<7 | 0x25, + 20273 - 19968: jis0212<<14 | 0x0F<<7 | 0x3D, + 20275 - 19968: jis0212<<14 | 0x0F<<7 | 0x3F, + 20276 - 19968: jis0208<<14 | 0x27<<7 | 0x1B, + 20277 - 19968: jis0212<<14 | 0x0F<<7 | 0x40, + 20278 - 19968: jis0208<<14 | 0x2D<<7 | 0x41, + 20279 - 19968: jis0212<<14 | 0x0F<<7 | 0x41, + 20280 - 19968: jis0208<<14 | 0x1E<<7 | 0x0C, + 20281 - 19968: jis0208<<14 | 0x58<<7 | 0x11, + 20282 - 19968: jis0208<<14 | 0x1A<<7 | 0x26, + 20283 - 19968: jis0212<<14 | 0x0F<<7 | 0x43, + 20284 - 19968: jis0208<<14 | 0x1A<<7 | 0x56, + 20285 - 19968: jis0208<<14 | 0x11<<7 | 0x1F, + 20286 - 19968: jis0212<<14 | 0x0F<<7 | 0x44, + 20288 - 19968: jis0212<<14 | 0x0F<<7 | 0x45, + 20290 - 19968: jis0212<<14 | 0x0F<<7 | 0x46, + 20291 - 19968: jis0208<<14 | 0x23<<7 | 0x30, + 20294 - 19968: jis0208<<14 | 0x22<<7 | 0x01, + 20295 - 19968: jis0208<<14 | 0x2F<<7 | 0x29, + 20296 - 19968: jis0212<<14 | 0x0F<<7 | 0x47, + 20297 - 19968: jis0212<<14 | 0x0F<<7 | 0x48, + 20299 - 19968: jis0212<<14 | 0x0F<<7 | 0x49, + 20300 - 19968: jis0212<<14 | 0x0F<<7 | 0x4A, + 20301 - 19968: jis0208<<14 | 0x0F<<7 | 0x2B, + 20302 - 19968: jis0208<<14 | 0x23<<7 | 0x42, + 20303 - 19968: jis0208<<14 | 0x1C<<7 | 0x1A, + 20304 - 19968: jis0208<<14 | 0x19<<7 | 0x13, + 20305 - 19968: jis0208<<14 | 0x2C<<7 | 0x03, + 20306 - 19968: jis0212<<14 | 0x0F<<7 | 0x4B, + 20307 - 19968: jis0208<<14 | 0x21<<7 | 0x2D, + 20308 - 19968: jis0212<<14 | 0x0F<<7 | 0x4C, + 20309 - 19968: jis0208<<14 | 0x11<<7 | 0x1E, + 20310 - 19968: jis0208<<14 | 0x58<<7 | 0x12, + 20311 - 19968: jis0208<<14 | 0x2F<<7 | 0x28, + 20312 - 19968: jis0212<<14 | 0x0F<<7 | 0x4E, + 20313 - 19968: jis0208<<14 | 0x2C<<7 | 0x1D, + 20314 - 19968: jis0208<<14 | 0x2F<<7 | 0x24, + 20315 - 19968: jis0208<<14 | 0x2F<<7 | 0x26, + 20316 - 19968: jis0208<<14 | 0x19<<7 | 0x4D, + 20317 - 19968: jis0208<<14 | 0x2F<<7 | 0x27, + 20318 - 19968: jis0208<<14 | 0x34<<7 | 0x03, + 20319 - 19968: jis0212<<14 | 0x0F<<7 | 0x4F, + 20320 - 19968: jis0212<<14 | 0x0F<<7 | 0x3E, + 20323 - 19968: jis0212<<14 | 0x0F<<7 | 0x50, + 20329 - 19968: jis0208<<14 | 0x2F<<7 | 0x2F, + 20330 - 19968: jis0212<<14 | 0x0F<<7 | 0x51, + 20332 - 19968: jis0212<<14 | 0x0F<<7 | 0x52, + 20334 - 19968: jis0212<<14 | 0x0F<<7 | 0x53, + 20335 - 19968: jis0208<<14 | 0x2F<<7 | 0x32, + 20336 - 19968: jis0208<<14 | 0x2F<<7 | 0x30, + 20337 - 19968: jis0212<<14 | 0x0F<<7 | 0x54, + 20339 - 19968: jis0208<<14 | 0x11<<7 | 0x21, + 20341 - 19968: jis0208<<14 | 0x29<<7 | 0x1A, + 20342 - 19968: jis0208<<14 | 0x2F<<7 | 0x2A, + 20343 - 19968: jis0212<<14 | 0x0F<<7 | 0x55, + 20344 - 19968: jis0212<<14 | 0x0F<<7 | 0x56, + 20345 - 19968: jis0212<<14 | 0x0F<<7 | 0x57, + 20346 - 19968: jis0212<<14 | 0x0F<<7 | 0x58, + 20347 - 19968: jis0208<<14 | 0x2F<<7 | 0x2E, + 20348 - 19968: jis0208<<14 | 0x17<<7 | 0x52, + 20349 - 19968: jis0212<<14 | 0x0F<<7 | 0x59, + 20350 - 19968: jis0212<<14 | 0x0F<<7 | 0x5A, + 20351 - 19968: jis0208<<14 | 0x1A<<7 | 0x27, + 20353 - 19968: jis0212<<14 | 0x0F<<7 | 0x5B, + 20354 - 19968: jis0212<<14 | 0x0F<<7 | 0x5C, + 20355 - 19968: jis0208<<14 | 0x13<<7 | 0x05, + 20356 - 19968: jis0212<<14 | 0x0F<<7 | 0x5D, + 20357 - 19968: jis0212<<14 | 0x10<<7 | 0x00, + 20358 - 19968: jis0208<<14 | 0x2F<<7 | 0x33, + 20360 - 19968: jis0208<<14 | 0x2F<<7 | 0x2B, + 20361 - 19968: jis0212<<14 | 0x10<<7 | 0x01, + 20362 - 19968: jis0208<<14 | 0x58<<7 | 0x14, + 20363 - 19968: jis0208<<14 | 0x2D<<7 | 0x42, + 20364 - 19968: jis0212<<14 | 0x10<<7 | 0x03, + 20365 - 19968: jis0208<<14 | 0x1A<<7 | 0x57, + 20366 - 19968: jis0212<<14 | 0x10<<7 | 0x04, + 20367 - 19968: jis0208<<14 | 0x2F<<7 | 0x2C, + 20368 - 19968: jis0212<<14 | 0x10<<7 | 0x05, + 20369 - 19968: jis0208<<14 | 0x2F<<7 | 0x31, + 20370 - 19968: jis0208<<14 | 0x58<<7 | 0x13, + 20371 - 19968: jis0212<<14 | 0x10<<7 | 0x07, + 20372 - 19968: jis0208<<14 | 0x58<<7 | 0x16, + 20374 - 19968: jis0208<<14 | 0x2F<<7 | 0x34, + 20375 - 19968: jis0212<<14 | 0x10<<7 | 0x09, + 20376 - 19968: jis0208<<14 | 0x2F<<7 | 0x2D, + 20377 - 19968: jis0212<<14 | 0x10<<7 | 0x0A, + 20378 - 19968: jis0208<<14 | 0x58<<7 | 0x15, + 20379 - 19968: jis0208<<14 | 0x15<<7 | 0x00, + 20381 - 19968: jis0208<<14 | 0x0F<<7 | 0x2C, + 20382 - 19968: jis0212<<14 | 0x10<<7 | 0x0C, + 20383 - 19968: jis0212<<14 | 0x10<<7 | 0x0D, + 20384 - 19968: jis0208<<14 | 0x15<<7 | 0x01, + 20385 - 19968: jis0208<<14 | 0x11<<7 | 0x20, + 20395 - 19968: jis0208<<14 | 0x34<<7 | 0x04, + 20397 - 19968: jis0208<<14 | 0x2A<<7 | 0x58, + 20398 - 19968: jis0208<<14 | 0x28<<7 | 0x4D, + 20399 - 19968: jis0208<<14 | 0x17<<7 | 0x53, + 20402 - 19968: jis0212<<14 | 0x10<<7 | 0x0E, + 20405 - 19968: jis0208<<14 | 0x1E<<7 | 0x0E, + 20406 - 19968: jis0208<<14 | 0x2D<<7 | 0x16, + 20407 - 19968: jis0212<<14 | 0x10<<7 | 0x0F, + 20409 - 19968: jis0212<<14 | 0x10<<7 | 0x10, + 20411 - 19968: jis0212<<14 | 0x10<<7 | 0x11, + 20412 - 19968: jis0212<<14 | 0x10<<7 | 0x12, + 20413 - 19968: jis0212<<14 | 0x10<<7 | 0x13, + 20414 - 19968: jis0212<<14 | 0x10<<7 | 0x14, + 20415 - 19968: jis0208<<14 | 0x29<<7 | 0x37, + 20416 - 19968: jis0212<<14 | 0x10<<7 | 0x15, + 20417 - 19968: jis0212<<14 | 0x10<<7 | 0x16, + 20418 - 19968: jis0208<<14 | 0x16<<7 | 0x17, + 20419 - 19968: jis0208<<14 | 0x21<<7 | 0x04, + 20420 - 19968: jis0208<<14 | 0x11<<7 | 0x43, + 20421 - 19968: jis0212<<14 | 0x10<<7 | 0x17, + 20422 - 19968: jis0212<<14 | 0x10<<7 | 0x18, + 20424 - 19968: jis0212<<14 | 0x10<<7 | 0x19, + 20425 - 19968: jis0208<<14 | 0x58<<7 | 0x05, + 20426 - 19968: jis0208<<14 | 0x1C<<7 | 0x32, + 20427 - 19968: jis0212<<14 | 0x10<<7 | 0x1B, + 20428 - 19968: jis0212<<14 | 0x10<<7 | 0x1C, + 20429 - 19968: jis0208<<14 | 0x58<<7 | 0x17, + 20430 - 19968: jis0208<<14 | 0x2F<<7 | 0x38, + 20431 - 19968: jis0212<<14 | 0x10<<7 | 0x1E, + 20432 - 19968: jis0208<<14 | 0x2F<<7 | 0x3D, + 20433 - 19968: jis0208<<14 | 0x2F<<7 | 0x3B, + 20434 - 19968: jis0212<<14 | 0x10<<7 | 0x1F, + 20436 - 19968: jis0208<<14 | 0x2F<<7 | 0x36, + 20439 - 19968: jis0208<<14 | 0x21<<7 | 0x0E, + 20440 - 19968: jis0208<<14 | 0x2F<<7 | 0x39, + 20442 - 19968: jis0208<<14 | 0x2F<<7 | 0x3C, + 20443 - 19968: jis0208<<14 | 0x2F<<7 | 0x3A, + 20444 - 19968: jis0212<<14 | 0x10<<7 | 0x20, + 20445 - 19968: jis0208<<14 | 0x29<<7 | 0x3C, + 20447 - 19968: jis0208<<14 | 0x2F<<7 | 0x37, + 20448 - 19968: jis0212<<14 | 0x10<<7 | 0x21, + 20449 - 19968: jis0208<<14 | 0x1E<<7 | 0x0D, + 20450 - 19968: jis0212<<14 | 0x10<<7 | 0x22, + 20451 - 19968: jis0208<<14 | 0x2A<<7 | 0x52, + 20452 - 19968: jis0208<<14 | 0x2F<<7 | 0x3E, + 20453 - 19968: jis0208<<14 | 0x2F<<7 | 0x3F, + 20462 - 19968: jis0208<<14 | 0x1C<<7 | 0x03, + 20463 - 19968: jis0208<<14 | 0x2F<<7 | 0x4C, + 20464 - 19968: jis0212<<14 | 0x10<<7 | 0x23, + 20466 - 19968: jis0212<<14 | 0x10<<7 | 0x24, + 20467 - 19968: jis0208<<14 | 0x26<<7 | 0x2F, + 20469 - 19968: jis0208<<14 | 0x28<<7 | 0x15, + 20470 - 19968: jis0208<<14 | 0x2F<<7 | 0x47, + 20472 - 19968: jis0208<<14 | 0x29<<7 | 0x4F, + 20474 - 19968: jis0208<<14 | 0x11<<7 | 0x15, + 20476 - 19968: jis0212<<14 | 0x10<<7 | 0x25, + 20477 - 19968: jis0212<<14 | 0x10<<7 | 0x26, + 20478 - 19968: jis0208<<14 | 0x2F<<7 | 0x4B, + 20479 - 19968: jis0208<<14 | 0x58<<7 | 0x1A, + 20480 - 19968: jis0212<<14 | 0x10<<7 | 0x28, + 20481 - 19968: jis0212<<14 | 0x10<<7 | 0x29, + 20484 - 19968: jis0212<<14 | 0x10<<7 | 0x2A, + 20485 - 19968: jis0208<<14 | 0x2F<<7 | 0x45, + 20486 - 19968: jis0208<<14 | 0x2F<<7 | 0x4E, + 20487 - 19968: jis0212<<14 | 0x10<<7 | 0x2B, + 20489 - 19968: jis0208<<14 | 0x20<<7 | 0x31, + 20490 - 19968: jis0212<<14 | 0x10<<7 | 0x2C, + 20491 - 19968: jis0208<<14 | 0x17<<7 | 0x23, + 20492 - 19968: jis0212<<14 | 0x10<<7 | 0x2D, + 20493 - 19968: jis0208<<14 | 0x26<<7 | 0x3B, + 20494 - 19968: jis0212<<14 | 0x10<<7 | 0x2E, + 20495 - 19968: jis0208<<14 | 0x3F<<7 | 0x26, + 20496 - 19968: jis0212<<14 | 0x10<<7 | 0x2F, + 20497 - 19968: jis0208<<14 | 0x2F<<7 | 0x4D, + 20498 - 19968: jis0208<<14 | 0x24<<7 | 0x3C, + 20499 - 19968: jis0212<<14 | 0x10<<7 | 0x30, + 20500 - 19968: jis0208<<14 | 0x2F<<7 | 0x42, + 20502 - 19968: jis0208<<14 | 0x17<<7 | 0x55, + 20503 - 19968: jis0212<<14 | 0x10<<7 | 0x31, + 20504 - 19968: jis0212<<14 | 0x10<<7 | 0x32, + 20505 - 19968: jis0208<<14 | 0x17<<7 | 0x54, + 20506 - 19968: jis0208<<14 | 0x2F<<7 | 0x40, + 20507 - 19968: jis0212<<14 | 0x10<<7 | 0x33, + 20508 - 19968: jis0212<<14 | 0x10<<7 | 0x34, + 20509 - 19968: jis0212<<14 | 0x10<<7 | 0x35, + 20510 - 19968: jis0208<<14 | 0x58<<7 | 0x1B, + 20511 - 19968: jis0208<<14 | 0x1B<<7 | 0x39, + 20513 - 19968: jis0208<<14 | 0x2F<<7 | 0x48, + 20514 - 19968: jis0208<<14 | 0x58<<7 | 0x19, + 20515 - 19968: jis0208<<14 | 0x29<<7 | 0x4E, + 20516 - 19968: jis0208<<14 | 0x22<<7 | 0x2C, + 20517 - 19968: jis0208<<14 | 0x2F<<7 | 0x44, + 20518 - 19968: jis0208<<14 | 0x16<<7 | 0x50, + 20519 - 19968: jis0212<<14 | 0x10<<7 | 0x38, + 20520 - 19968: jis0208<<14 | 0x2F<<7 | 0x41, + 20521 - 19968: jis0208<<14 | 0x2F<<7 | 0x49, + 20522 - 19968: jis0208<<14 | 0x2F<<7 | 0x43, + 20523 - 19968: jis0208<<14 | 0x2D<<7 | 0x30, + 20524 - 19968: jis0208<<14 | 0x2F<<7 | 0x4A, + 20525 - 19968: jis0208<<14 | 0x2E<<7 | 0x20, + 20526 - 19968: jis0212<<14 | 0x10<<7 | 0x39, + 20528 - 19968: jis0212<<14 | 0x10<<7 | 0x3A, + 20530 - 19968: jis0212<<14 | 0x10<<7 | 0x3B, + 20531 - 19968: jis0212<<14 | 0x10<<7 | 0x3C, + 20533 - 19968: jis0212<<14 | 0x10<<7 | 0x3D, + 20534 - 19968: jis0208<<14 | 0x15<<7 | 0x45, + 20537 - 19968: jis0208<<14 | 0x16<<7 | 0x4F, + 20539 - 19968: jis0212<<14 | 0x10<<7 | 0x55, + 20544 - 19968: jis0208<<14 | 0x58<<7 | 0x18, + 20545 - 19968: jis0212<<14 | 0x10<<7 | 0x3F, + 20546 - 19968: jis0208<<14 | 0x58<<7 | 0x1E, + 20547 - 19968: jis0208<<14 | 0x2F<<7 | 0x4F, + 20549 - 19968: jis0212<<14 | 0x10<<7 | 0x41, + 20550 - 19968: jis0208<<14 | 0x58<<7 | 0x1C, + 20551 - 19968: jis0208<<14 | 0x2F<<7 | 0x50, + 20552 - 19968: jis0208<<14 | 0x2F<<7 | 0x54, + 20553 - 19968: jis0208<<14 | 0x0F<<7 | 0x2D, + 20554 - 19968: jis0212<<14 | 0x10<<7 | 0x43, + 20556 - 19968: jis0212<<14 | 0x10<<7 | 0x44, + 20558 - 19968: jis0212<<14 | 0x10<<7 | 0x45, + 20559 - 19968: jis0208<<14 | 0x29<<7 | 0x2F, + 20560 - 19968: jis0208<<14 | 0x2F<<7 | 0x53, + 20561 - 19968: jis0212<<14 | 0x10<<7 | 0x46, + 20562 - 19968: jis0212<<14 | 0x10<<7 | 0x47, + 20563 - 19968: jis0212<<14 | 0x10<<7 | 0x48, + 20565 - 19968: jis0208<<14 | 0x2F<<7 | 0x52, + 20566 - 19968: jis0208<<14 | 0x2F<<7 | 0x56, + 20567 - 19968: jis0212<<14 | 0x10<<7 | 0x49, + 20569 - 19968: jis0212<<14 | 0x10<<7 | 0x4A, + 20570 - 19968: jis0208<<14 | 0x2F<<7 | 0x55, + 20572 - 19968: jis0208<<14 | 0x23<<7 | 0x43, + 20575 - 19968: jis0212<<14 | 0x10<<7 | 0x4B, + 20576 - 19968: jis0212<<14 | 0x10<<7 | 0x4C, + 20578 - 19968: jis0212<<14 | 0x10<<7 | 0x4D, + 20579 - 19968: jis0212<<14 | 0x10<<7 | 0x4E, + 20581 - 19968: jis0208<<14 | 0x16<<7 | 0x51, + 20582 - 19968: jis0212<<14 | 0x10<<7 | 0x4F, + 20583 - 19968: jis0212<<14 | 0x10<<7 | 0x50, + 20586 - 19968: jis0212<<14 | 0x10<<7 | 0x51, + 20588 - 19968: jis0208<<14 | 0x2F<<7 | 0x57, + 20589 - 19968: jis0212<<14 | 0x10<<7 | 0x52, + 20592 - 19968: jis0208<<14 | 0x58<<7 | 0x1D, + 20593 - 19968: jis0212<<14 | 0x10<<7 | 0x54, + 20594 - 19968: jis0208<<14 | 0x1B<<7 | 0x24, + 20596 - 19968: jis0208<<14 | 0x21<<7 | 0x05, + 20597 - 19968: jis0208<<14 | 0x23<<7 | 0x44, + 20598 - 19968: jis0208<<14 | 0x15<<7 | 0x55, + 20600 - 19968: jis0208<<14 | 0x2F<<7 | 0x58, + 20605 - 19968: jis0208<<14 | 0x14<<7 | 0x15, + 20608 - 19968: jis0208<<14 | 0x2F<<7 | 0x59, + 20609 - 19968: jis0212<<14 | 0x10<<7 | 0x56, + 20611 - 19968: jis0212<<14 | 0x10<<7 | 0x57, + 20612 - 19968: jis0212<<14 | 0x10<<7 | 0x58, + 20613 - 19968: jis0208<<14 | 0x2F<<7 | 0x5B, + 20614 - 19968: jis0212<<14 | 0x10<<7 | 0x59, + 20618 - 19968: jis0212<<14 | 0x10<<7 | 0x5A, + 20621 - 19968: jis0208<<14 | 0x2A<<7 | 0x14, + 20622 - 19968: jis0212<<14 | 0x10<<7 | 0x5B, + 20623 - 19968: jis0212<<14 | 0x10<<7 | 0x5C, + 20624 - 19968: jis0212<<14 | 0x10<<7 | 0x5D, + 20625 - 19968: jis0208<<14 | 0x16<<7 | 0x45, + 20626 - 19968: jis0212<<14 | 0x11<<7 | 0x00, + 20627 - 19968: jis0212<<14 | 0x11<<7 | 0x01, + 20628 - 19968: jis0208<<14 | 0x58<<7 | 0x1F, + 20630 - 19968: jis0212<<14 | 0x11<<7 | 0x03, + 20632 - 19968: jis0208<<14 | 0x1A<<7 | 0x10, + 20633 - 19968: jis0208<<14 | 0x27<<7 | 0x56, + 20634 - 19968: jis0208<<14 | 0x2F<<7 | 0x5A, + 20635 - 19968: jis0212<<14 | 0x11<<7 | 0x04, + 20636 - 19968: jis0212<<14 | 0x11<<7 | 0x05, + 20638 - 19968: jis0212<<14 | 0x11<<7 | 0x06, + 20639 - 19968: jis0212<<14 | 0x11<<7 | 0x07, + 20640 - 19968: jis0212<<14 | 0x11<<7 | 0x08, + 20641 - 19968: jis0212<<14 | 0x11<<7 | 0x09, + 20642 - 19968: jis0212<<14 | 0x11<<7 | 0x0A, + 20650 - 19968: jis0212<<14 | 0x11<<7 | 0x0B, + 20652 - 19968: jis0208<<14 | 0x19<<7 | 0x24, + 20653 - 19968: jis0208<<14 | 0x2C<<7 | 0x22, + 20655 - 19968: jis0212<<14 | 0x11<<7 | 0x0C, + 20656 - 19968: jis0212<<14 | 0x11<<7 | 0x0D, + 20658 - 19968: jis0208<<14 | 0x2F<<7 | 0x5D, + 20659 - 19968: jis0208<<14 | 0x30<<7 | 0x02, + 20660 - 19968: jis0208<<14 | 0x2F<<7 | 0x5C, + 20661 - 19968: jis0208<<14 | 0x19<<7 | 0x23, + 20663 - 19968: jis0208<<14 | 0x1C<<7 | 0x5C, + 20665 - 19968: jis0212<<14 | 0x11<<7 | 0x0E, + 20666 - 19968: jis0212<<14 | 0x11<<7 | 0x0F, + 20669 - 19968: jis0212<<14 | 0x11<<7 | 0x10, + 20670 - 19968: jis0208<<14 | 0x16<<7 | 0x18, + 20672 - 19968: jis0212<<14 | 0x11<<7 | 0x11, + 20674 - 19968: jis0208<<14 | 0x30<<7 | 0x03, + 20675 - 19968: jis0212<<14 | 0x11<<7 | 0x12, + 20676 - 19968: jis0212<<14 | 0x11<<7 | 0x13, + 20677 - 19968: jis0208<<14 | 0x15<<7 | 0x2E, + 20679 - 19968: jis0212<<14 | 0x11<<7 | 0x14, + 20681 - 19968: jis0208<<14 | 0x30<<7 | 0x00, + 20682 - 19968: jis0208<<14 | 0x30<<7 | 0x01, + 20684 - 19968: jis0212<<14 | 0x11<<7 | 0x15, + 20685 - 19968: jis0208<<14 | 0x25<<7 | 0x0E, + 20686 - 19968: jis0212<<14 | 0x11<<7 | 0x16, + 20687 - 19968: jis0208<<14 | 0x20<<7 | 0x5B, + 20688 - 19968: jis0212<<14 | 0x11<<7 | 0x17, + 20689 - 19968: jis0208<<14 | 0x15<<7 | 0x02, + 20691 - 19968: jis0212<<14 | 0x11<<7 | 0x18, + 20692 - 19968: jis0212<<14 | 0x11<<7 | 0x19, + 20693 - 19968: jis0208<<14 | 0x2A<<7 | 0x2C, + 20694 - 19968: jis0208<<14 | 0x30<<7 | 0x04, + 20696 - 19968: jis0208<<14 | 0x58<<7 | 0x21, + 20698 - 19968: jis0208<<14 | 0x2D<<7 | 0x1C, + 20700 - 19968: jis0212<<14 | 0x11<<7 | 0x1B, + 20701 - 19968: jis0212<<14 | 0x11<<7 | 0x1C, + 20702 - 19968: jis0208<<14 | 0x30<<7 | 0x05, + 20703 - 19968: jis0212<<14 | 0x11<<7 | 0x1D, + 20706 - 19968: jis0212<<14 | 0x11<<7 | 0x1E, + 20707 - 19968: jis0208<<14 | 0x30<<7 | 0x08, + 20708 - 19968: jis0212<<14 | 0x11<<7 | 0x1F, + 20709 - 19968: jis0208<<14 | 0x30<<7 | 0x06, + 20710 - 19968: jis0212<<14 | 0x11<<7 | 0x20, + 20711 - 19968: jis0208<<14 | 0x20<<7 | 0x2D, + 20712 - 19968: jis0212<<14 | 0x11<<7 | 0x21, + 20713 - 19968: jis0212<<14 | 0x11<<7 | 0x22, + 20717 - 19968: jis0208<<14 | 0x30<<7 | 0x07, + 20718 - 19968: jis0208<<14 | 0x30<<7 | 0x09, + 20719 - 19968: jis0212<<14 | 0x11<<7 | 0x23, + 20721 - 19968: jis0212<<14 | 0x11<<7 | 0x24, + 20722 - 19968: jis0212<<14 | 0x11<<7 | 0x30, + 20724 - 19968: jis0208<<14 | 0x58<<7 | 0x20, + 20725 - 19968: jis0208<<14 | 0x30<<7 | 0x0B, + 20726 - 19968: jis0212<<14 | 0x11<<7 | 0x25, + 20729 - 19968: jis0208<<14 | 0x30<<7 | 0x0A, + 20730 - 19968: jis0212<<14 | 0x11<<7 | 0x26, + 20731 - 19968: jis0208<<14 | 0x29<<7 | 0x27, + 20734 - 19968: jis0212<<14 | 0x11<<7 | 0x27, + 20736 - 19968: jis0208<<14 | 0x14<<7 | 0x16, + 20737 - 19968: jis0208<<14 | 0x30<<7 | 0x0D, + 20738 - 19968: jis0208<<14 | 0x30<<7 | 0x0E, + 20739 - 19968: jis0212<<14 | 0x11<<7 | 0x28, + 20740 - 19968: jis0208<<14 | 0x11<<7 | 0x0E, + 20742 - 19968: jis0212<<14 | 0x11<<7 | 0x29, + 20743 - 19968: jis0212<<14 | 0x11<<7 | 0x2A, + 20744 - 19968: jis0212<<14 | 0x11<<7 | 0x2B, + 20745 - 19968: jis0208<<14 | 0x30<<7 | 0x0C, + 20747 - 19968: jis0212<<14 | 0x11<<7 | 0x2C, + 20748 - 19968: jis0212<<14 | 0x11<<7 | 0x2D, + 20749 - 19968: jis0212<<14 | 0x11<<7 | 0x2E, + 20750 - 19968: jis0212<<14 | 0x11<<7 | 0x2F, + 20752 - 19968: jis0212<<14 | 0x11<<7 | 0x31, + 20754 - 19968: jis0208<<14 | 0x1B<<7 | 0x53, + 20756 - 19968: jis0208<<14 | 0x30<<7 | 0x11, + 20757 - 19968: jis0208<<14 | 0x30<<7 | 0x10, + 20758 - 19968: jis0208<<14 | 0x30<<7 | 0x0F, + 20759 - 19968: jis0212<<14 | 0x11<<7 | 0x32, + 20760 - 19968: jis0208<<14 | 0x2F<<7 | 0x35, + 20761 - 19968: jis0212<<14 | 0x11<<7 | 0x33, + 20762 - 19968: jis0208<<14 | 0x30<<7 | 0x12, + 20763 - 19968: jis0212<<14 | 0x11<<7 | 0x34, + 20764 - 19968: jis0212<<14 | 0x11<<7 | 0x35, + 20765 - 19968: jis0212<<14 | 0x11<<7 | 0x36, + 20766 - 19968: jis0212<<14 | 0x11<<7 | 0x37, + 20767 - 19968: jis0208<<14 | 0x1C<<7 | 0x5D, + 20769 - 19968: jis0208<<14 | 0x30<<7 | 0x13, + 20771 - 19968: jis0212<<14 | 0x11<<7 | 0x38, + 20775 - 19968: jis0212<<14 | 0x11<<7 | 0x39, + 20776 - 19968: jis0212<<14 | 0x11<<7 | 0x3A, + 20778 - 19968: jis0208<<14 | 0x2C<<7 | 0x04, + 20780 - 19968: jis0212<<14 | 0x11<<7 | 0x3B, + 20781 - 19968: jis0212<<14 | 0x11<<7 | 0x3C, + 20783 - 19968: jis0212<<14 | 0x11<<7 | 0x3D, + 20785 - 19968: jis0212<<14 | 0x11<<7 | 0x3E, + 20786 - 19968: jis0208<<14 | 0x2B<<7 | 0x38, + 20787 - 19968: jis0212<<14 | 0x11<<7 | 0x3F, + 20788 - 19968: jis0212<<14 | 0x11<<7 | 0x40, + 20789 - 19968: jis0212<<14 | 0x11<<7 | 0x41, + 20791 - 19968: jis0208<<14 | 0x30<<7 | 0x15, + 20792 - 19968: jis0212<<14 | 0x11<<7 | 0x42, + 20793 - 19968: jis0212<<14 | 0x11<<7 | 0x43, + 20794 - 19968: jis0208<<14 | 0x30<<7 | 0x14, + 20795 - 19968: jis0208<<14 | 0x30<<7 | 0x17, + 20796 - 19968: jis0208<<14 | 0x30<<7 | 0x16, + 20799 - 19968: jis0208<<14 | 0x30<<7 | 0x18, + 20800 - 19968: jis0208<<14 | 0x30<<7 | 0x19, + 20801 - 19968: jis0208<<14 | 0x0F<<7 | 0x53, + 20802 - 19968: jis0212<<14 | 0x11<<7 | 0x44, + 20803 - 19968: jis0208<<14 | 0x17<<7 | 0x14, + 20804 - 19968: jis0208<<14 | 0x16<<7 | 0x1A, + 20805 - 19968: jis0208<<14 | 0x1C<<7 | 0x1B, + 20806 - 19968: jis0208<<14 | 0x22<<7 | 0x5A, + 20807 - 19968: jis0208<<14 | 0x15<<7 | 0x03, + 20808 - 19968: jis0208<<14 | 0x1F<<7 | 0x47, + 20809 - 19968: jis0208<<14 | 0x17<<7 | 0x56, + 20810 - 19968: jis0208<<14 | 0x58<<7 | 0x22, + 20811 - 19968: jis0208<<14 | 0x18<<7 | 0x4D, + 20812 - 19968: jis0208<<14 | 0x30<<7 | 0x1B, + 20813 - 19968: jis0208<<14 | 0x2B<<7 | 0x27, + 20814 - 19968: jis0208<<14 | 0x24<<7 | 0x25, + 20815 - 19968: jis0212<<14 | 0x11<<7 | 0x46, + 20816 - 19968: jis0208<<14 | 0x1A<<7 | 0x58, + 20818 - 19968: jis0208<<14 | 0x30<<7 | 0x1A, + 20819 - 19968: jis0212<<14 | 0x11<<7 | 0x47, + 20820 - 19968: jis0208<<14 | 0x30<<7 | 0x1C, + 20821 - 19968: jis0212<<14 | 0x11<<7 | 0x48, + 20823 - 19968: jis0212<<14 | 0x11<<7 | 0x49, + 20824 - 19968: jis0212<<14 | 0x11<<7 | 0x4A, + 20826 - 19968: jis0208<<14 | 0x24<<7 | 0x3D, + 20828 - 19968: jis0208<<14 | 0x12<<7 | 0x54, + 20831 - 19968: jis0212<<14 | 0x11<<7 | 0x4B, + 20834 - 19968: jis0208<<14 | 0x30<<7 | 0x1D, + 20836 - 19968: jis0208<<14 | 0x58<<7 | 0x23, + 20837 - 19968: jis0208<<14 | 0x25<<7 | 0x5D, + 20838 - 19968: jis0212<<14 | 0x11<<7 | 0x4D, + 20840 - 19968: jis0208<<14 | 0x20<<7 | 0x13, + 20841 - 19968: jis0208<<14 | 0x30<<7 | 0x1F, + 20842 - 19968: jis0208<<14 | 0x30<<7 | 0x20, + 20843 - 19968: jis0208<<14 | 0x27<<7 | 0x0B, + 20844 - 19968: jis0208<<14 | 0x17<<7 | 0x57, + 20845 - 19968: jis0208<<14 | 0x2E<<7 | 0x1A, + 20846 - 19968: jis0208<<14 | 0x30<<7 | 0x21, + 20849 - 19968: jis0208<<14 | 0x15<<7 | 0x05, + 20853 - 19968: jis0208<<14 | 0x29<<7 | 0x1B, + 20854 - 19968: jis0208<<14 | 0x21<<7 | 0x15, + 20855 - 19968: jis0208<<14 | 0x15<<7 | 0x50, + 20856 - 19968: jis0208<<14 | 0x24<<7 | 0x14, + 20860 - 19968: jis0208<<14 | 0x16<<7 | 0x52, + 20862 - 19968: jis0212<<14 | 0x11<<7 | 0x4E, + 20864 - 19968: jis0208<<14 | 0x30<<7 | 0x22, + 20866 - 19968: jis0208<<14 | 0x30<<7 | 0x23, + 20867 - 19968: jis0212<<14 | 0x11<<7 | 0x4F, + 20868 - 19968: jis0212<<14 | 0x11<<7 | 0x50, + 20869 - 19968: jis0208<<14 | 0x25<<7 | 0x41, + 20870 - 19968: jis0208<<14 | 0x10<<7 | 0x3E, + 20873 - 19968: jis0208<<14 | 0x30<<7 | 0x26, + 20874 - 19968: jis0208<<14 | 0x19<<7 | 0x5C, + 20875 - 19968: jis0212<<14 | 0x11<<7 | 0x51, + 20876 - 19968: jis0208<<14 | 0x30<<7 | 0x25, + 20877 - 19968: jis0208<<14 | 0x19<<7 | 0x25, + 20878 - 19968: jis0212<<14 | 0x11<<7 | 0x52, + 20879 - 19968: jis0208<<14 | 0x30<<7 | 0x27, + 20880 - 19968: jis0208<<14 | 0x45<<7 | 0x4D, + 20881 - 19968: jis0208<<14 | 0x30<<7 | 0x28, + 20882 - 19968: jis0208<<14 | 0x2A<<7 | 0x20, + 20883 - 19968: jis0208<<14 | 0x30<<7 | 0x29, + 20885 - 19968: jis0208<<14 | 0x30<<7 | 0x2A, + 20886 - 19968: jis0208<<14 | 0x30<<7 | 0x2B, + 20887 - 19968: jis0208<<14 | 0x1D<<7 | 0x48, + 20888 - 19968: jis0212<<14 | 0x11<<7 | 0x53, + 20889 - 19968: jis0208<<14 | 0x1B<<7 | 0x2B, + 20893 - 19968: jis0208<<14 | 0x58<<7 | 0x24, + 20896 - 19968: jis0208<<14 | 0x13<<7 | 0x06, + 20897 - 19968: jis0212<<14 | 0x11<<7 | 0x55, + 20898 - 19968: jis0208<<14 | 0x30<<7 | 0x2E, + 20899 - 19968: jis0212<<14 | 0x11<<7 | 0x56, + 20900 - 19968: jis0208<<14 | 0x30<<7 | 0x2C, + 20901 - 19968: jis0208<<14 | 0x2B<<7 | 0x1C, + 20902 - 19968: jis0208<<14 | 0x30<<7 | 0x2D, + 20904 - 19968: jis0208<<14 | 0x28<<7 | 0x39, + 20905 - 19968: jis0208<<14 | 0x30<<7 | 0x2F, + 20906 - 19968: jis0208<<14 | 0x30<<7 | 0x30, + 20907 - 19968: jis0208<<14 | 0x30<<7 | 0x31, + 20908 - 19968: jis0208<<14 | 0x24<<7 | 0x3E, + 20909 - 19968: jis0212<<14 | 0x11<<7 | 0x57, + 20912 - 19968: jis0208<<14 | 0x30<<7 | 0x35, + 20913 - 19968: jis0208<<14 | 0x30<<7 | 0x33, + 20914 - 19968: jis0208<<14 | 0x30<<7 | 0x34, + 20915 - 19968: jis0208<<14 | 0x30<<7 | 0x32, + 20916 - 19968: jis0208<<14 | 0x19<<7 | 0x42, + 20917 - 19968: jis0208<<14 | 0x30<<7 | 0x36, + 20918 - 19968: jis0208<<14 | 0x2B<<7 | 0x49, + 20919 - 19968: jis0208<<14 | 0x2D<<7 | 0x43, + 20920 - 19968: jis0212<<14 | 0x11<<7 | 0x58, + 20922 - 19968: jis0212<<14 | 0x11<<7 | 0x59, + 20924 - 19968: jis0212<<14 | 0x11<<7 | 0x5A, + 20925 - 19968: jis0208<<14 | 0x30<<7 | 0x37, + 20926 - 19968: jis0208<<14 | 0x58<<7 | 0x25, + 20927 - 19968: jis0212<<14 | 0x11<<7 | 0x5C, + 20930 - 19968: jis0212<<14 | 0x11<<7 | 0x5D, + 20932 - 19968: jis0208<<14 | 0x1F<<7 | 0x07, + 20933 - 19968: jis0208<<14 | 0x30<<7 | 0x38, + 20934 - 19968: jis0208<<14 | 0x1C<<7 | 0x39, + 20936 - 19968: jis0212<<14 | 0x12<<7 | 0x00, + 20937 - 19968: jis0208<<14 | 0x30<<7 | 0x39, + 20939 - 19968: jis0208<<14 | 0x22<<7 | 0x5B, + 20940 - 19968: jis0208<<14 | 0x2D<<7 | 0x1E, + 20941 - 19968: jis0208<<14 | 0x24<<7 | 0x3F, + 20943 - 19968: jis0212<<14 | 0x12<<7 | 0x01, + 20945 - 19968: jis0212<<14 | 0x12<<7 | 0x02, + 20946 - 19968: jis0212<<14 | 0x12<<7 | 0x03, + 20947 - 19968: jis0212<<14 | 0x12<<7 | 0x04, + 20949 - 19968: jis0212<<14 | 0x12<<7 | 0x05, + 20950 - 19968: jis0208<<14 | 0x31<<7 | 0x24, + 20952 - 19968: jis0212<<14 | 0x12<<7 | 0x06, + 20955 - 19968: jis0208<<14 | 0x30<<7 | 0x3A, + 20956 - 19968: jis0208<<14 | 0x53<<7 | 0x04, + 20957 - 19968: jis0208<<14 | 0x15<<7 | 0x24, + 20958 - 19968: jis0212<<14 | 0x12<<7 | 0x07, + 20960 - 19968: jis0208<<14 | 0x30<<7 | 0x3B, + 20961 - 19968: jis0208<<14 | 0x2A<<7 | 0x3D, + 20962 - 19968: jis0212<<14 | 0x12<<7 | 0x08, + 20965 - 19968: jis0212<<14 | 0x12<<7 | 0x09, + 20966 - 19968: jis0208<<14 | 0x1C<<7 | 0x47, + 20967 - 19968: jis0208<<14 | 0x21<<7 | 0x5B, + 20969 - 19968: jis0208<<14 | 0x30<<7 | 0x3D, + 20970 - 19968: jis0208<<14 | 0x25<<7 | 0x43, + 20972 - 19968: jis0208<<14 | 0x58<<7 | 0x26, + 20973 - 19968: jis0208<<14 | 0x30<<7 | 0x3E, + 20974 - 19968: jis0212<<14 | 0x12<<7 | 0x0A, + 20976 - 19968: jis0208<<14 | 0x30<<7 | 0x3F, + 20977 - 19968: jis0208<<14 | 0x12<<7 | 0x0D, + 20978 - 19968: jis0212<<14 | 0x12<<7 | 0x0B, + 20979 - 19968: jis0212<<14 | 0x12<<7 | 0x0C, + 20980 - 19968: jis0212<<14 | 0x12<<7 | 0x0D, + 20981 - 19968: jis0208<<14 | 0x30<<7 | 0x40, + 20982 - 19968: jis0208<<14 | 0x15<<7 | 0x06, + 20983 - 19968: jis0212<<14 | 0x12<<7 | 0x0E, + 20984 - 19968: jis0208<<14 | 0x25<<7 | 0x2B, + 20985 - 19968: jis0208<<14 | 0x10<<7 | 0x59, + 20986 - 19968: jis0208<<14 | 0x1C<<7 | 0x2F, + 20989 - 19968: jis0208<<14 | 0x27<<7 | 0x00, + 20990 - 19968: jis0208<<14 | 0x30<<7 | 0x41, + 20992 - 19968: jis0208<<14 | 0x24<<7 | 0x40, + 20993 - 19968: jis0212<<14 | 0x12<<7 | 0x0F, + 20994 - 19968: jis0212<<14 | 0x12<<7 | 0x10, + 20995 - 19968: jis0208<<14 | 0x1E<<7 | 0x2E, + 20996 - 19968: jis0208<<14 | 0x30<<7 | 0x42, + 20997 - 19968: jis0212<<14 | 0x12<<7 | 0x11, + 20998 - 19968: jis0208<<14 | 0x29<<7 | 0x0B, + 20999 - 19968: jis0208<<14 | 0x1F<<7 | 0x39, + 21000 - 19968: jis0208<<14 | 0x13<<7 | 0x01, + 21002 - 19968: jis0208<<14 | 0x13<<7 | 0x08, + 21003 - 19968: jis0208<<14 | 0x30<<7 | 0x43, + 21006 - 19968: jis0208<<14 | 0x30<<7 | 0x45, + 21009 - 19968: jis0208<<14 | 0x16<<7 | 0x19, + 21010 - 19968: jis0212<<14 | 0x12<<7 | 0x12, + 21011 - 19968: jis0212<<14 | 0x12<<7 | 0x13, + 21012 - 19968: jis0208<<14 | 0x30<<7 | 0x44, + 21013 - 19968: jis0208<<14 | 0x58<<7 | 0x27, + 21014 - 19968: jis0212<<14 | 0x12<<7 | 0x15, + 21015 - 19968: jis0208<<14 | 0x2D<<7 | 0x52, + 21016 - 19968: jis0212<<14 | 0x12<<7 | 0x16, + 21021 - 19968: jis0208<<14 | 0x1C<<7 | 0x48, + 21026 - 19968: jis0212<<14 | 0x12<<7 | 0x17, + 21028 - 19968: jis0208<<14 | 0x27<<7 | 0x1C, + 21029 - 19968: jis0208<<14 | 0x29<<7 | 0x2B, + 21031 - 19968: jis0208<<14 | 0x30<<7 | 0x46, + 21032 - 19968: jis0212<<14 | 0x12<<7 | 0x18, + 21033 - 19968: jis0208<<14 | 0x2C<<7 | 0x57, + 21034 - 19968: jis0208<<14 | 0x30<<7 | 0x47, + 21038 - 19968: jis0208<<14 | 0x30<<7 | 0x48, + 21040 - 19968: jis0208<<14 | 0x24<<7 | 0x5D, + 21041 - 19968: jis0212<<14 | 0x12<<7 | 0x19, + 21042 - 19968: jis0212<<14 | 0x12<<7 | 0x1A, + 21043 - 19968: jis0208<<14 | 0x30<<7 | 0x49, + 21045 - 19968: jis0212<<14 | 0x12<<7 | 0x1B, + 21046 - 19968: jis0208<<14 | 0x1F<<7 | 0x08, + 21047 - 19968: jis0208<<14 | 0x19<<7 | 0x5D, + 21048 - 19968: jis0208<<14 | 0x16<<7 | 0x53, + 21049 - 19968: jis0208<<14 | 0x30<<7 | 0x4A, + 21050 - 19968: jis0208<<14 | 0x1A<<7 | 0x28, + 21051 - 19968: jis0208<<14 | 0x18<<7 | 0x4E, + 21052 - 19968: jis0212<<14 | 0x12<<7 | 0x1C, + 21059 - 19968: jis0208<<14 | 0x23<<7 | 0x45, + 21060 - 19968: jis0208<<14 | 0x30<<7 | 0x4C, + 21061 - 19968: jis0212<<14 | 0x12<<7 | 0x1D, + 21063 - 19968: jis0208<<14 | 0x21<<7 | 0x06, + 21065 - 19968: jis0212<<14 | 0x12<<7 | 0x1E, + 21066 - 19968: jis0208<<14 | 0x19<<7 | 0x4E, + 21067 - 19968: jis0208<<14 | 0x30<<7 | 0x4D, + 21068 - 19968: jis0208<<14 | 0x30<<7 | 0x4E, + 21069 - 19968: jis0208<<14 | 0x20<<7 | 0x0F, + 21071 - 19968: jis0208<<14 | 0x30<<7 | 0x4B, + 21076 - 19968: jis0208<<14 | 0x30<<7 | 0x50, + 21077 - 19968: jis0212<<14 | 0x12<<7 | 0x1F, + 21078 - 19968: jis0208<<14 | 0x2A<<7 | 0x15, + 21079 - 19968: jis0212<<14 | 0x12<<7 | 0x20, + 21080 - 19968: jis0212<<14 | 0x12<<7 | 0x21, + 21082 - 19968: jis0212<<14 | 0x12<<7 | 0x22, + 21083 - 19968: jis0208<<14 | 0x18<<7 | 0x43, + 21084 - 19968: jis0212<<14 | 0x12<<7 | 0x23, + 21086 - 19968: jis0208<<14 | 0x30<<7 | 0x4F, + 21087 - 19968: jis0212<<14 | 0x12<<7 | 0x24, + 21088 - 19968: jis0212<<14 | 0x12<<7 | 0x25, + 21089 - 19968: jis0212<<14 | 0x12<<7 | 0x26, + 21091 - 19968: jis0208<<14 | 0x16<<7 | 0x54, + 21092 - 19968: jis0208<<14 | 0x19<<7 | 0x3D, + 21093 - 19968: jis0208<<14 | 0x26<<7 | 0x4C, + 21094 - 19968: jis0212<<14 | 0x12<<7 | 0x27, + 21097 - 19968: jis0208<<14 | 0x30<<7 | 0x53, + 21098 - 19968: jis0208<<14 | 0x30<<7 | 0x51, + 21102 - 19968: jis0212<<14 | 0x12<<7 | 0x28, + 21103 - 19968: jis0208<<14 | 0x28<<7 | 0x5A, + 21104 - 19968: jis0208<<14 | 0x1D<<7 | 0x49, + 21105 - 19968: jis0208<<14 | 0x30<<7 | 0x5A, + 21106 - 19968: jis0208<<14 | 0x12<<7 | 0x43, + 21107 - 19968: jis0208<<14 | 0x30<<7 | 0x54, + 21108 - 19968: jis0208<<14 | 0x30<<7 | 0x52, + 21109 - 19968: jis0208<<14 | 0x20<<7 | 0x2E, + 21111 - 19968: jis0212<<14 | 0x12<<7 | 0x29, + 21112 - 19968: jis0212<<14 | 0x12<<7 | 0x2A, + 21113 - 19968: jis0212<<14 | 0x12<<7 | 0x2B, + 21117 - 19968: jis0208<<14 | 0x30<<7 | 0x56, + 21119 - 19968: jis0208<<14 | 0x30<<7 | 0x55, + 21120 - 19968: jis0212<<14 | 0x12<<7 | 0x2C, + 21122 - 19968: jis0212<<14 | 0x12<<7 | 0x2D, + 21123 - 19968: jis0208<<14 | 0x12<<7 | 0x23, + 21125 - 19968: jis0212<<14 | 0x12<<7 | 0x2E, + 21127 - 19968: jis0208<<14 | 0x16<<7 | 0x3F, + 21128 - 19968: jis0208<<14 | 0x30<<7 | 0x5B, + 21129 - 19968: jis0208<<14 | 0x2D<<7 | 0x0C, + 21130 - 19968: jis0212<<14 | 0x12<<7 | 0x2F, + 21132 - 19968: jis0212<<14 | 0x12<<7 | 0x30, + 21133 - 19968: jis0208<<14 | 0x30<<7 | 0x57, + 21137 - 19968: jis0208<<14 | 0x30<<7 | 0x5C, + 21138 - 19968: jis0208<<14 | 0x30<<7 | 0x59, + 21139 - 19968: jis0212<<14 | 0x12<<7 | 0x31, + 21140 - 19968: jis0208<<14 | 0x30<<7 | 0x58, + 21141 - 19968: jis0212<<14 | 0x12<<7 | 0x32, + 21142 - 19968: jis0212<<14 | 0x12<<7 | 0x33, + 21143 - 19968: jis0212<<14 | 0x12<<7 | 0x34, + 21144 - 19968: jis0212<<14 | 0x12<<7 | 0x35, + 21146 - 19968: jis0212<<14 | 0x12<<7 | 0x36, + 21147 - 19968: jis0208<<14 | 0x2D<<7 | 0x2E, + 21148 - 19968: jis0208<<14 | 0x58<<7 | 0x28, + 21151 - 19968: jis0208<<14 | 0x17<<7 | 0x58, + 21152 - 19968: jis0208<<14 | 0x11<<7 | 0x22, + 21155 - 19968: jis0208<<14 | 0x2D<<7 | 0x53, + 21156 - 19968: jis0212<<14 | 0x12<<7 | 0x38, + 21157 - 19968: jis0212<<14 | 0x12<<7 | 0x39, + 21158 - 19968: jis0208<<14 | 0x58<<7 | 0x29, + 21159 - 19968: jis0212<<14 | 0x12<<7 | 0x3B, + 21161 - 19968: jis0208<<14 | 0x1C<<7 | 0x54, + 21162 - 19968: jis0208<<14 | 0x24<<7 | 0x37, + 21163 - 19968: jis0208<<14 | 0x18<<7 | 0x44, + 21164 - 19968: jis0208<<14 | 0x31<<7 | 0x01, + 21165 - 19968: jis0208<<14 | 0x31<<7 | 0x02, + 21167 - 19968: jis0208<<14 | 0x5A<<7 | 0x1B, + 21168 - 19968: jis0212<<14 | 0x12<<7 | 0x3D, + 21169 - 19968: jis0208<<14 | 0x2D<<7 | 0x44, + 21172 - 19968: jis0208<<14 | 0x2E<<7 | 0x0A, + 21173 - 19968: jis0208<<14 | 0x31<<7 | 0x04, + 21174 - 19968: jis0212<<14 | 0x12<<7 | 0x3E, + 21175 - 19968: jis0212<<14 | 0x12<<7 | 0x3F, + 21176 - 19968: jis0212<<14 | 0x12<<7 | 0x40, + 21177 - 19968: jis0208<<14 | 0x17<<7 | 0x59, + 21178 - 19968: jis0212<<14 | 0x12<<7 | 0x41, + 21179 - 19968: jis0212<<14 | 0x12<<7 | 0x42, + 21180 - 19968: jis0208<<14 | 0x31<<7 | 0x03, + 21181 - 19968: jis0212<<14 | 0x12<<7 | 0x43, + 21182 - 19968: jis0208<<14 | 0x12<<7 | 0x0E, + 21184 - 19968: jis0208<<14 | 0x58<<7 | 0x2A, + 21185 - 19968: jis0208<<14 | 0x31<<7 | 0x05, + 21187 - 19968: jis0208<<14 | 0x2A<<7 | 0x35, + 21188 - 19968: jis0212<<14 | 0x12<<7 | 0x45, + 21189 - 19968: jis0208<<14 | 0x23<<7 | 0x1B, + 21190 - 19968: jis0212<<14 | 0x12<<7 | 0x46, + 21191 - 19968: jis0208<<14 | 0x2C<<7 | 0x05, + 21192 - 19968: jis0212<<14 | 0x12<<7 | 0x47, + 21193 - 19968: jis0208<<14 | 0x29<<7 | 0x38, + 21196 - 19968: jis0212<<14 | 0x12<<7 | 0x48, + 21197 - 19968: jis0208<<14 | 0x31<<7 | 0x06, + 21199 - 19968: jis0212<<14 | 0x12<<7 | 0x49, + 21201 - 19968: jis0212<<14 | 0x12<<7 | 0x4A, + 21202 - 19968: jis0208<<14 | 0x4F<<7 | 0x34, + 21204 - 19968: jis0212<<14 | 0x12<<7 | 0x4B, + 21205 - 19968: jis0208<<14 | 0x25<<7 | 0x0F, + 21206 - 19968: jis0212<<14 | 0x12<<7 | 0x4C, + 21207 - 19968: jis0208<<14 | 0x31<<7 | 0x07, + 21208 - 19968: jis0208<<14 | 0x13<<7 | 0x09, + 21209 - 19968: jis0208<<14 | 0x2B<<7 | 0x12, + 21211 - 19968: jis0208<<14 | 0x58<<7 | 0x2B, + 21212 - 19968: jis0212<<14 | 0x12<<7 | 0x4E, + 21213 - 19968: jis0208<<14 | 0x1D<<7 | 0x00, + 21214 - 19968: jis0208<<14 | 0x31<<7 | 0x08, + 21215 - 19968: jis0208<<14 | 0x29<<7 | 0x46, + 21216 - 19968: jis0208<<14 | 0x31<<7 | 0x0C, + 21217 - 19968: jis0212<<14 | 0x12<<7 | 0x4F, + 21218 - 19968: jis0208<<14 | 0x1F<<7 | 0x09, + 21219 - 19968: jis0208<<14 | 0x31<<7 | 0x09, + 21220 - 19968: jis0208<<14 | 0x15<<7 | 0x2F, + 21221 - 19968: jis0212<<14 | 0x12<<7 | 0x50, + 21222 - 19968: jis0208<<14 | 0x31<<7 | 0x0A, + 21223 - 19968: jis0208<<14 | 0x13<<7 | 0x0A, + 21224 - 19968: jis0212<<14 | 0x12<<7 | 0x51, + 21225 - 19968: jis0212<<14 | 0x12<<7 | 0x52, + 21226 - 19968: jis0212<<14 | 0x12<<7 | 0x53, + 21228 - 19968: jis0212<<14 | 0x12<<7 | 0x54, + 21232 - 19968: jis0212<<14 | 0x12<<7 | 0x55, + 21233 - 19968: jis0212<<14 | 0x12<<7 | 0x56, + 21234 - 19968: jis0208<<14 | 0x16<<7 | 0x0D, + 21235 - 19968: jis0208<<14 | 0x31<<7 | 0x0D, + 21236 - 19968: jis0212<<14 | 0x12<<7 | 0x57, + 21237 - 19968: jis0208<<14 | 0x31<<7 | 0x0E, + 21238 - 19968: jis0212<<14 | 0x12<<7 | 0x58, + 21239 - 19968: jis0212<<14 | 0x12<<7 | 0x59, + 21240 - 19968: jis0208<<14 | 0x31<<7 | 0x0F, + 21241 - 19968: jis0208<<14 | 0x31<<7 | 0x10, + 21242 - 19968: jis0208<<14 | 0x1B<<7 | 0x3A, + 21246 - 19968: jis0208<<14 | 0x17<<7 | 0x5A, + 21247 - 19968: jis0208<<14 | 0x2B<<7 | 0x3D, + 21248 - 19968: jis0208<<14 | 0x58<<7 | 0x2C, + 21249 - 19968: jis0208<<14 | 0x2B<<7 | 0x47, + 21250 - 19968: jis0208<<14 | 0x25<<7 | 0x56, + 21251 - 19968: jis0212<<14 | 0x12<<7 | 0x5B, + 21253 - 19968: jis0208<<14 | 0x29<<7 | 0x50, + 21254 - 19968: jis0208<<14 | 0x31<<7 | 0x11, + 21255 - 19968: jis0208<<14 | 0x58<<7 | 0x2D, + 21256 - 19968: jis0208<<14 | 0x31<<7 | 0x12, + 21258 - 19968: jis0212<<14 | 0x12<<7 | 0x5C, + 21259 - 19968: jis0212<<14 | 0x12<<7 | 0x5D, + 21260 - 19968: jis0212<<14 | 0x13<<7 | 0x00, + 21261 - 19968: jis0208<<14 | 0x31<<7 | 0x14, + 21263 - 19968: jis0208<<14 | 0x31<<7 | 0x16, + 21264 - 19968: jis0208<<14 | 0x31<<7 | 0x15, + 21265 - 19968: jis0212<<14 | 0x13<<7 | 0x01, + 21267 - 19968: jis0212<<14 | 0x13<<7 | 0x02, + 21269 - 19968: jis0208<<14 | 0x31<<7 | 0x17, + 21270 - 19968: jis0208<<14 | 0x11<<7 | 0x1C, + 21271 - 19968: jis0208<<14 | 0x2A<<7 | 0x2B, + 21272 - 19968: jis0212<<14 | 0x13<<7 | 0x03, + 21273 - 19968: jis0208<<14 | 0x19<<7 | 0x5B, + 21274 - 19968: jis0208<<14 | 0x31<<7 | 0x18, + 21275 - 19968: jis0212<<14 | 0x13<<7 | 0x04, + 21276 - 19968: jis0212<<14 | 0x13<<7 | 0x05, + 21277 - 19968: jis0208<<14 | 0x20<<7 | 0x38, + 21278 - 19968: jis0212<<14 | 0x13<<7 | 0x06, + 21279 - 19968: jis0212<<14 | 0x13<<7 | 0x07, + 21280 - 19968: jis0208<<14 | 0x1D<<7 | 0x01, + 21281 - 19968: jis0208<<14 | 0x15<<7 | 0x08, + 21283 - 19968: jis0208<<14 | 0x31<<7 | 0x19, + 21284 - 19968: jis0208<<14 | 0x58<<7 | 0x2E, + 21285 - 19968: jis0212<<14 | 0x13<<7 | 0x08, + 21287 - 19968: jis0212<<14 | 0x13<<7 | 0x09, + 21288 - 19968: jis0212<<14 | 0x13<<7 | 0x0A, + 21289 - 19968: jis0212<<14 | 0x13<<7 | 0x0B, + 21290 - 19968: jis0208<<14 | 0x27<<7 | 0x3A, + 21291 - 19968: jis0212<<14 | 0x13<<7 | 0x0C, + 21292 - 19968: jis0212<<14 | 0x13<<7 | 0x0D, + 21293 - 19968: jis0212<<14 | 0x13<<7 | 0x0E, + 21295 - 19968: jis0208<<14 | 0x31<<7 | 0x1A, + 21296 - 19968: jis0212<<14 | 0x13<<7 | 0x0F, + 21297 - 19968: jis0208<<14 | 0x31<<7 | 0x1B, + 21298 - 19968: jis0212<<14 | 0x13<<7 | 0x10, + 21299 - 19968: jis0208<<14 | 0x31<<7 | 0x1C, + 21301 - 19968: jis0212<<14 | 0x13<<7 | 0x11, + 21304 - 19968: jis0208<<14 | 0x31<<7 | 0x1D, + 21305 - 19968: jis0208<<14 | 0x28<<7 | 0x03, + 21306 - 19968: jis0208<<14 | 0x15<<7 | 0x47, + 21307 - 19968: jis0208<<14 | 0x0F<<7 | 0x44, + 21308 - 19968: jis0212<<14 | 0x13<<7 | 0x12, + 21309 - 19968: jis0212<<14 | 0x13<<7 | 0x13, + 21310 - 19968: jis0212<<14 | 0x13<<7 | 0x14, + 21311 - 19968: jis0208<<14 | 0x25<<7 | 0x1E, + 21312 - 19968: jis0208<<14 | 0x31<<7 | 0x1E, + 21313 - 19968: jis0208<<14 | 0x1C<<7 | 0x1C, + 21314 - 19968: jis0212<<14 | 0x13<<7 | 0x15, + 21315 - 19968: jis0208<<14 | 0x1F<<7 | 0x48, + 21317 - 19968: jis0208<<14 | 0x31<<7 | 0x20, + 21318 - 19968: jis0208<<14 | 0x31<<7 | 0x1F, + 21319 - 19968: jis0208<<14 | 0x1D<<7 | 0x02, + 21320 - 19968: jis0208<<14 | 0x17<<7 | 0x40, + 21321 - 19968: jis0208<<14 | 0x31<<7 | 0x22, + 21322 - 19968: jis0208<<14 | 0x27<<7 | 0x1D, + 21323 - 19968: jis0212<<14 | 0x13<<7 | 0x17, + 21324 - 19968: jis0212<<14 | 0x13<<7 | 0x16, + 21325 - 19968: jis0208<<14 | 0x31<<7 | 0x23, + 21329 - 19968: jis0208<<14 | 0x27<<7 | 0x3B, + 21330 - 19968: jis0208<<14 | 0x21<<7 | 0x13, + 21331 - 19968: jis0208<<14 | 0x21<<7 | 0x4D, + 21332 - 19968: jis0208<<14 | 0x15<<7 | 0x07, + 21335 - 19968: jis0208<<14 | 0x25<<7 | 0x4D, + 21336 - 19968: jis0208<<14 | 0x22<<7 | 0x10, + 21337 - 19968: jis0212<<14 | 0x13<<7 | 0x18, + 21338 - 19968: jis0208<<14 | 0x26<<7 | 0x4D, + 21339 - 19968: jis0212<<14 | 0x13<<7 | 0x19, + 21340 - 19968: jis0208<<14 | 0x2A<<7 | 0x2D, + 21342 - 19968: jis0208<<14 | 0x31<<7 | 0x25, + 21344 - 19968: jis0208<<14 | 0x1F<<7 | 0x49, + 21345 - 19968: jis0212<<14 | 0x13<<7 | 0x1A, + 21347 - 19968: jis0212<<14 | 0x13<<7 | 0x1B, + 21349 - 19968: jis0212<<14 | 0x13<<7 | 0x1C, + 21350 - 19968: jis0208<<14 | 0x16<<7 | 0x14, + 21353 - 19968: jis0208<<14 | 0x31<<7 | 0x26, + 21356 - 19968: jis0212<<14 | 0x13<<7 | 0x1D, + 21357 - 19968: jis0212<<14 | 0x13<<7 | 0x1E, + 21358 - 19968: jis0208<<14 | 0x31<<7 | 0x27, + 21359 - 19968: jis0208<<14 | 0x10<<7 | 0x0B, + 21360 - 19968: jis0208<<14 | 0x0F<<7 | 0x54, + 21361 - 19968: jis0208<<14 | 0x13<<7 | 0x4C, + 21362 - 19968: jis0208<<14 | 0x58<<7 | 0x2F, + 21363 - 19968: jis0208<<14 | 0x21<<7 | 0x07, + 21364 - 19968: jis0208<<14 | 0x14<<7 | 0x30, + 21365 - 19968: jis0208<<14 | 0x2C<<7 | 0x50, + 21367 - 19968: jis0208<<14 | 0x31<<7 | 0x2A, + 21368 - 19968: jis0208<<14 | 0x11<<7 | 0x16, + 21369 - 19968: jis0212<<14 | 0x13<<7 | 0x20, + 21371 - 19968: jis0208<<14 | 0x31<<7 | 0x29, + 21374 - 19968: jis0212<<14 | 0x13<<7 | 0x21, + 21375 - 19968: jis0208<<14 | 0x15<<7 | 0x09, + 21378 - 19968: jis0208<<14 | 0x31<<7 | 0x2B, + 21379 - 19968: jis0212<<14 | 0x13<<7 | 0x22, + 21380 - 19968: jis0208<<14 | 0x2B<<7 | 0x50, + 21383 - 19968: jis0212<<14 | 0x13<<7 | 0x23, + 21384 - 19968: jis0212<<14 | 0x13<<7 | 0x24, + 21390 - 19968: jis0212<<14 | 0x13<<7 | 0x25, + 21395 - 19968: jis0208<<14 | 0x58<<7 | 0x30, + 21396 - 19968: jis0212<<14 | 0x13<<7 | 0x27, + 21398 - 19968: jis0208<<14 | 0x31<<7 | 0x2C, + 21400 - 19968: jis0208<<14 | 0x2D<<7 | 0x31, + 21401 - 19968: jis0212<<14 | 0x13<<7 | 0x28, + 21402 - 19968: jis0208<<14 | 0x17<<7 | 0x5B, + 21405 - 19968: jis0212<<14 | 0x13<<7 | 0x29, + 21407 - 19968: jis0208<<14 | 0x17<<7 | 0x15, + 21408 - 19968: jis0208<<14 | 0x31<<7 | 0x2D, + 21409 - 19968: jis0212<<14 | 0x13<<7 | 0x2A, + 21412 - 19968: jis0212<<14 | 0x13<<7 | 0x2B, + 21413 - 19968: jis0208<<14 | 0x31<<7 | 0x2F, + 21414 - 19968: jis0208<<14 | 0x31<<7 | 0x2E, + 21416 - 19968: jis0208<<14 | 0x1E<<7 | 0x3E, + 21417 - 19968: jis0208<<14 | 0x10<<7 | 0x18, + 21418 - 19968: jis0212<<14 | 0x13<<7 | 0x2C, + 21419 - 19968: jis0212<<14 | 0x13<<7 | 0x2D, + 21421 - 19968: jis0208<<14 | 0x10<<7 | 0x3D, + 21422 - 19968: jis0208<<14 | 0x31<<7 | 0x30, + 21423 - 19968: jis0212<<14 | 0x13<<7 | 0x2E, + 21424 - 19968: jis0208<<14 | 0x31<<7 | 0x31, + 21426 - 19968: jis0208<<14 | 0x58<<7 | 0x31, + 21427 - 19968: jis0208<<14 | 0x17<<7 | 0x16, + 21428 - 19968: jis0212<<14 | 0x13<<7 | 0x30, + 21429 - 19968: jis0212<<14 | 0x13<<7 | 0x31, + 21430 - 19968: jis0208<<14 | 0x31<<7 | 0x32, + 21431 - 19968: jis0212<<14 | 0x13<<7 | 0x32, + 21432 - 19968: jis0212<<14 | 0x13<<7 | 0x33, + 21434 - 19968: jis0212<<14 | 0x13<<7 | 0x34, + 21435 - 19968: jis0208<<14 | 0x14<<7 | 0x4D, + 21437 - 19968: jis0212<<14 | 0x13<<7 | 0x35, + 21440 - 19968: jis0212<<14 | 0x13<<7 | 0x36, + 21442 - 19968: jis0208<<14 | 0x1A<<7 | 0x11, + 21443 - 19968: jis0208<<14 | 0x31<<7 | 0x33, + 21445 - 19968: jis0212<<14 | 0x13<<7 | 0x37, + 21448 - 19968: jis0208<<14 | 0x2A<<7 | 0x53, + 21449 - 19968: jis0208<<14 | 0x19<<7 | 0x14, + 21450 - 19968: jis0208<<14 | 0x14<<7 | 0x39, + 21451 - 19968: jis0208<<14 | 0x2C<<7 | 0x06, + 21452 - 19968: jis0208<<14 | 0x20<<7 | 0x2F, + 21453 - 19968: jis0208<<14 | 0x27<<7 | 0x1E, + 21454 - 19968: jis0208<<14 | 0x1B<<7 | 0x5C, + 21455 - 19968: jis0212<<14 | 0x13<<7 | 0x38, + 21458 - 19968: jis0212<<14 | 0x13<<7 | 0x39, + 21459 - 19968: jis0212<<14 | 0x13<<7 | 0x3A, + 21460 - 19968: jis0208<<14 | 0x1C<<7 | 0x26, + 21461 - 19968: jis0212<<14 | 0x13<<7 | 0x3B, + 21462 - 19968: jis0208<<14 | 0x1B<<7 | 0x47, + 21463 - 19968: jis0208<<14 | 0x1B<<7 | 0x54, + 21465 - 19968: jis0208<<14 | 0x1C<<7 | 0x55, + 21466 - 19968: jis0212<<14 | 0x13<<7 | 0x3C, + 21467 - 19968: jis0208<<14 | 0x27<<7 | 0x1F, + 21469 - 19968: jis0208<<14 | 0x58<<7 | 0x32, + 21470 - 19968: jis0212<<14 | 0x13<<7 | 0x3E, + 21471 - 19968: jis0208<<14 | 0x31<<7 | 0x36, + 21472 - 19968: jis0212<<14 | 0x13<<7 | 0x3F, + 21473 - 19968: jis0208<<14 | 0x10<<7 | 0x22, + 21474 - 19968: jis0208<<14 | 0x20<<7 | 0x30, + 21475 - 19968: jis0208<<14 | 0x17<<7 | 0x5C, + 21476 - 19968: jis0208<<14 | 0x17<<7 | 0x24, + 21477 - 19968: jis0208<<14 | 0x15<<7 | 0x46, + 21478 - 19968: jis0212<<14 | 0x13<<7 | 0x40, + 21479 - 19968: jis0212<<14 | 0x13<<7 | 0x41, + 21480 - 19968: jis0208<<14 | 0x31<<7 | 0x3A, + 21481 - 19968: jis0208<<14 | 0x22<<7 | 0x00, + 21482 - 19968: jis0208<<14 | 0x21<<7 | 0x5D, + 21483 - 19968: jis0208<<14 | 0x15<<7 | 0x0A, + 21484 - 19968: jis0208<<14 | 0x1D<<7 | 0x03, + 21485 - 19968: jis0208<<14 | 0x31<<7 | 0x3B, + 21486 - 19968: jis0208<<14 | 0x31<<7 | 0x39, + 21487 - 19968: jis0208<<14 | 0x11<<7 | 0x23, + 21488 - 19968: jis0208<<14 | 0x21<<7 | 0x45, + 21489 - 19968: jis0208<<14 | 0x1B<<7 | 0x17, + 21490 - 19968: jis0208<<14 | 0x1A<<7 | 0x2A, + 21491 - 19968: jis0208<<14 | 0x10<<7 | 0x05, + 21493 - 19968: jis0212<<14 | 0x13<<7 | 0x42, + 21494 - 19968: jis0208<<14 | 0x12<<7 | 0x4F, + 21495 - 19968: jis0208<<14 | 0x18<<7 | 0x45, + 21496 - 19968: jis0208<<14 | 0x1A<<7 | 0x29, + 21498 - 19968: jis0208<<14 | 0x31<<7 | 0x3C, + 21505 - 19968: jis0208<<14 | 0x31<<7 | 0x3D, + 21506 - 19968: jis0212<<14 | 0x13<<7 | 0x43, + 21507 - 19968: jis0208<<14 | 0x14<<7 | 0x28, + 21508 - 19968: jis0208<<14 | 0x12<<7 | 0x25, + 21512 - 19968: jis0208<<14 | 0x18<<7 | 0x46, + 21513 - 19968: jis0208<<14 | 0x14<<7 | 0x27, + 21514 - 19968: jis0208<<14 | 0x23<<7 | 0x3E, + 21515 - 19968: jis0208<<14 | 0x10<<7 | 0x04, + 21516 - 19968: jis0208<<14 | 0x25<<7 | 0x10, + 21517 - 19968: jis0208<<14 | 0x2B<<7 | 0x1D, + 21518 - 19968: jis0208<<14 | 0x18<<7 | 0x00, + 21519 - 19968: jis0208<<14 | 0x2C<<7 | 0x58, + 21520 - 19968: jis0208<<14 | 0x24<<7 | 0x26, + 21521 - 19968: jis0208<<14 | 0x17<<7 | 0x5D, + 21523 - 19968: jis0212<<14 | 0x13<<7 | 0x44, + 21530 - 19968: jis0212<<14 | 0x13<<7 | 0x45, + 21531 - 19968: jis0208<<14 | 0x16<<7 | 0x0E, + 21533 - 19968: jis0208<<14 | 0x31<<7 | 0x46, + 21535 - 19968: jis0208<<14 | 0x15<<7 | 0x42, + 21536 - 19968: jis0208<<14 | 0x2A<<7 | 0x29, + 21537 - 19968: jis0212<<14 | 0x13<<7 | 0x46, + 21542 - 19968: jis0208<<14 | 0x27<<7 | 0x3C, + 21543 - 19968: jis0212<<14 | 0x13<<7 | 0x47, + 21544 - 19968: jis0212<<14 | 0x13<<7 | 0x48, + 21545 - 19968: jis0208<<14 | 0x31<<7 | 0x45, + 21546 - 19968: jis0212<<14 | 0x13<<7 | 0x49, + 21547 - 19968: jis0208<<14 | 0x13<<7 | 0x3D, + 21548 - 19968: jis0208<<14 | 0x31<<7 | 0x40, + 21549 - 19968: jis0208<<14 | 0x31<<7 | 0x41, + 21550 - 19968: jis0208<<14 | 0x31<<7 | 0x43, + 21551 - 19968: jis0212<<14 | 0x13<<7 | 0x4A, + 21553 - 19968: jis0212<<14 | 0x13<<7 | 0x4B, + 21556 - 19968: jis0212<<14 | 0x13<<7 | 0x4C, + 21557 - 19968: jis0212<<14 | 0x13<<7 | 0x4D, + 21558 - 19968: jis0208<<14 | 0x31<<7 | 0x44, + 21560 - 19968: jis0208<<14 | 0x14<<7 | 0x3A, + 21561 - 19968: jis0208<<14 | 0x1E<<7 | 0x40, + 21563 - 19968: jis0208<<14 | 0x29<<7 | 0x0C, + 21564 - 19968: jis0208<<14 | 0x31<<7 | 0x42, + 21565 - 19968: jis0208<<14 | 0x31<<7 | 0x3E, + 21566 - 19968: jis0208<<14 | 0x17<<7 | 0x42, + 21568 - 19968: jis0208<<14 | 0x31<<7 | 0x3F, + 21570 - 19968: jis0208<<14 | 0x2E<<7 | 0x03, + 21571 - 19968: jis0212<<14 | 0x13<<7 | 0x4E, + 21572 - 19968: jis0212<<14 | 0x13<<7 | 0x4F, + 21574 - 19968: jis0208<<14 | 0x29<<7 | 0x51, + 21575 - 19968: jis0212<<14 | 0x13<<7 | 0x50, + 21576 - 19968: jis0208<<14 | 0x23<<7 | 0x47, + 21577 - 19968: jis0208<<14 | 0x17<<7 | 0x41, + 21578 - 19968: jis0208<<14 | 0x18<<7 | 0x4F, + 21581 - 19968: jis0212<<14 | 0x13<<7 | 0x51, + 21582 - 19968: jis0208<<14 | 0x31<<7 | 0x47, + 21583 - 19968: jis0212<<14 | 0x13<<7 | 0x52, + 21585 - 19968: jis0208<<14 | 0x25<<7 | 0x3C, + 21598 - 19968: jis0212<<14 | 0x13<<7 | 0x53, + 21599 - 19968: jis0208<<14 | 0x31<<7 | 0x4B, + 21602 - 19968: jis0212<<14 | 0x13<<7 | 0x54, + 21604 - 19968: jis0212<<14 | 0x13<<7 | 0x55, + 21606 - 19968: jis0212<<14 | 0x13<<7 | 0x56, + 21607 - 19968: jis0212<<14 | 0x13<<7 | 0x57, + 21608 - 19968: jis0208<<14 | 0x1B<<7 | 0x5D, + 21609 - 19968: jis0212<<14 | 0x13<<7 | 0x58, + 21610 - 19968: jis0208<<14 | 0x1B<<7 | 0x55, + 21611 - 19968: jis0212<<14 | 0x13<<7 | 0x59, + 21613 - 19968: jis0212<<14 | 0x13<<7 | 0x5A, + 21614 - 19968: jis0212<<14 | 0x13<<7 | 0x5B, + 21616 - 19968: jis0208<<14 | 0x31<<7 | 0x4E, + 21617 - 19968: jis0208<<14 | 0x31<<7 | 0x4C, + 21619 - 19968: jis0208<<14 | 0x2B<<7 | 0x02, + 21620 - 19968: jis0212<<14 | 0x13<<7 | 0x5C, + 21621 - 19968: jis0208<<14 | 0x31<<7 | 0x49, + 21622 - 19968: jis0208<<14 | 0x31<<7 | 0x52, + 21623 - 19968: jis0208<<14 | 0x31<<7 | 0x4D, + 21627 - 19968: jis0208<<14 | 0x31<<7 | 0x50, + 21628 - 19968: jis0208<<14 | 0x17<<7 | 0x25, + 21629 - 19968: jis0208<<14 | 0x2B<<7 | 0x1E, + 21631 - 19968: jis0212<<14 | 0x13<<7 | 0x5D, + 21632 - 19968: jis0208<<14 | 0x31<<7 | 0x51, + 21633 - 19968: jis0212<<14 | 0x14<<7 | 0x00, + 21635 - 19968: jis0212<<14 | 0x14<<7 | 0x01, + 21636 - 19968: jis0208<<14 | 0x31<<7 | 0x53, + 21637 - 19968: jis0212<<14 | 0x14<<7 | 0x02, + 21638 - 19968: jis0208<<14 | 0x31<<7 | 0x55, + 21640 - 19968: jis0212<<14 | 0x14<<7 | 0x03, + 21641 - 19968: jis0212<<14 | 0x14<<7 | 0x04, + 21642 - 19968: jis0208<<14 | 0x58<<7 | 0x35, + 21643 - 19968: jis0208<<14 | 0x19<<7 | 0x4F, + 21644 - 19968: jis0208<<14 | 0x2E<<7 | 0x21, + 21645 - 19968: jis0212<<14 | 0x14<<7 | 0x05, + 21646 - 19968: jis0208<<14 | 0x31<<7 | 0x4A, + 21647 - 19968: jis0208<<14 | 0x31<<7 | 0x48, + 21648 - 19968: jis0208<<14 | 0x31<<7 | 0x54, + 21649 - 19968: jis0212<<14 | 0x14<<7 | 0x06, + 21650 - 19968: jis0208<<14 | 0x31<<7 | 0x4F, + 21653 - 19968: jis0212<<14 | 0x14<<7 | 0x07, + 21654 - 19968: jis0212<<14 | 0x14<<7 | 0x08, + 21660 - 19968: jis0208<<14 | 0x58<<7 | 0x34, + 21663 - 19968: jis0212<<14 | 0x14<<7 | 0x0A, + 21665 - 19968: jis0212<<14 | 0x14<<7 | 0x0B, + 21666 - 19968: jis0208<<14 | 0x31<<7 | 0x57, + 21668 - 19968: jis0208<<14 | 0x32<<7 | 0x02, + 21669 - 19968: jis0208<<14 | 0x31<<7 | 0x59, + 21670 - 19968: jis0212<<14 | 0x14<<7 | 0x0C, + 21671 - 19968: jis0212<<14 | 0x14<<7 | 0x0D, + 21672 - 19968: jis0208<<14 | 0x31<<7 | 0x5D, + 21673 - 19968: jis0208<<14 | 0x58<<7 | 0x36, + 21674 - 19968: jis0212<<14 | 0x14<<7 | 0x0F, + 21675 - 19968: jis0208<<14 | 0x32<<7 | 0x00, + 21676 - 19968: jis0208<<14 | 0x31<<7 | 0x5A, + 21677 - 19968: jis0212<<14 | 0x14<<7 | 0x10, + 21678 - 19968: jis0212<<14 | 0x14<<7 | 0x11, + 21679 - 19968: jis0208<<14 | 0x32<<7 | 0x1D, + 21681 - 19968: jis0212<<14 | 0x14<<7 | 0x12, + 21682 - 19968: jis0208<<14 | 0x19<<7 | 0x48, + 21683 - 19968: jis0208<<14 | 0x12<<7 | 0x10, + 21687 - 19968: jis0212<<14 | 0x14<<7 | 0x13, + 21688 - 19968: jis0208<<14 | 0x31<<7 | 0x58, + 21689 - 19968: jis0212<<14 | 0x14<<7 | 0x14, + 21690 - 19968: jis0212<<14 | 0x14<<7 | 0x15, + 21691 - 19968: jis0212<<14 | 0x14<<7 | 0x16, + 21692 - 19968: jis0208<<14 | 0x32<<7 | 0x04, + 21693 - 19968: jis0208<<14 | 0x0F<<7 | 0x55, + 21694 - 19968: jis0208<<14 | 0x32<<7 | 0x03, + 21695 - 19968: jis0212<<14 | 0x14<<7 | 0x17, + 21696 - 19968: jis0208<<14 | 0x0F<<7 | 0x04, + 21697 - 19968: jis0208<<14 | 0x28<<7 | 0x29, + 21698 - 19968: jis0208<<14 | 0x32<<7 | 0x01, + 21700 - 19968: jis0208<<14 | 0x31<<7 | 0x5B, + 21702 - 19968: jis0212<<14 | 0x14<<7 | 0x18, + 21703 - 19968: jis0208<<14 | 0x31<<7 | 0x56, + 21704 - 19968: jis0208<<14 | 0x31<<7 | 0x5C, + 21705 - 19968: jis0208<<14 | 0x19<<7 | 0x27, + 21706 - 19968: jis0212<<14 | 0x14<<7 | 0x19, + 21709 - 19968: jis0212<<14 | 0x14<<7 | 0x1A, + 21710 - 19968: jis0212<<14 | 0x14<<7 | 0x1B, + 21720 - 19968: jis0208<<14 | 0x32<<7 | 0x05, + 21728 - 19968: jis0212<<14 | 0x14<<7 | 0x1C, + 21729 - 19968: jis0208<<14 | 0x0F<<7 | 0x56, + 21730 - 19968: jis0208<<14 | 0x32<<7 | 0x0E, + 21733 - 19968: jis0208<<14 | 0x32<<7 | 0x06, + 21734 - 19968: jis0208<<14 | 0x32<<7 | 0x07, + 21736 - 19968: jis0208<<14 | 0x1D<<7 | 0x04, + 21737 - 19968: jis0208<<14 | 0x2A<<7 | 0x48, + 21738 - 19968: jis0212<<14 | 0x14<<7 | 0x1D, + 21740 - 19968: jis0212<<14 | 0x14<<7 | 0x1E, + 21741 - 19968: jis0208<<14 | 0x32<<7 | 0x0C, + 21742 - 19968: jis0208<<14 | 0x32<<7 | 0x0B, + 21743 - 19968: jis0212<<14 | 0x14<<7 | 0x1F, + 21746 - 19968: jis0208<<14 | 0x24<<7 | 0x0E, + 21750 - 19968: jis0212<<14 | 0x14<<7 | 0x20, + 21754 - 19968: jis0208<<14 | 0x32<<7 | 0x0D, + 21756 - 19968: jis0212<<14 | 0x14<<7 | 0x21, + 21757 - 19968: jis0208<<14 | 0x32<<7 | 0x0A, + 21758 - 19968: jis0212<<14 | 0x14<<7 | 0x22, + 21759 - 19968: jis0208<<14 | 0x58<<7 | 0x37, + 21760 - 19968: jis0212<<14 | 0x14<<7 | 0x24, + 21761 - 19968: jis0212<<14 | 0x14<<7 | 0x25, + 21764 - 19968: jis0208<<14 | 0x10<<7 | 0x13, + 21765 - 19968: jis0212<<14 | 0x14<<7 | 0x26, + 21766 - 19968: jis0208<<14 | 0x19<<7 | 0x15, + 21767 - 19968: jis0208<<14 | 0x1E<<7 | 0x0F, + 21768 - 19968: jis0212<<14 | 0x14<<7 | 0x27, + 21769 - 19968: jis0212<<14 | 0x14<<7 | 0x28, + 21772 - 19968: jis0212<<14 | 0x14<<7 | 0x29, + 21773 - 19968: jis0212<<14 | 0x14<<7 | 0x2A, + 21774 - 19968: jis0212<<14 | 0x14<<7 | 0x2B, + 21775 - 19968: jis0208<<14 | 0x32<<7 | 0x08, + 21776 - 19968: jis0208<<14 | 0x24<<7 | 0x41, + 21780 - 19968: jis0208<<14 | 0x32<<7 | 0x09, + 21781 - 19968: jis0212<<14 | 0x14<<7 | 0x2C, + 21782 - 19968: jis0208<<14 | 0x0F<<7 | 0x01, + 21802 - 19968: jis0212<<14 | 0x14<<7 | 0x2D, + 21803 - 19968: jis0212<<14 | 0x14<<7 | 0x2E, + 21806 - 19968: jis0208<<14 | 0x32<<7 | 0x13, + 21807 - 19968: jis0208<<14 | 0x2C<<7 | 0x02, + 21809 - 19968: jis0208<<14 | 0x1D<<7 | 0x06, + 21810 - 19968: jis0212<<14 | 0x14<<7 | 0x2F, + 21811 - 19968: jis0208<<14 | 0x32<<7 | 0x19, + 21813 - 19968: jis0212<<14 | 0x14<<7 | 0x30, + 21814 - 19968: jis0212<<14 | 0x14<<7 | 0x31, + 21816 - 19968: jis0208<<14 | 0x32<<7 | 0x18, + 21817 - 19968: jis0208<<14 | 0x32<<7 | 0x0F, + 21819 - 19968: jis0212<<14 | 0x14<<7 | 0x32, + 21820 - 19968: jis0212<<14 | 0x14<<7 | 0x33, + 21821 - 19968: jis0212<<14 | 0x14<<7 | 0x34, + 21822 - 19968: jis0208<<14 | 0x21<<7 | 0x22, + 21824 - 19968: jis0208<<14 | 0x32<<7 | 0x10, + 21825 - 19968: jis0212<<14 | 0x14<<7 | 0x35, + 21828 - 19968: jis0208<<14 | 0x21<<7 | 0x4E, + 21829 - 19968: jis0208<<14 | 0x32<<7 | 0x15, + 21830 - 19968: jis0208<<14 | 0x1D<<7 | 0x05, + 21831 - 19968: jis0212<<14 | 0x14<<7 | 0x36, + 21833 - 19968: jis0212<<14 | 0x14<<7 | 0x37, + 21834 - 19968: jis0212<<14 | 0x14<<7 | 0x38, + 21836 - 19968: jis0208<<14 | 0x32<<7 | 0x12, + 21837 - 19968: jis0212<<14 | 0x14<<7 | 0x39, + 21839 - 19968: jis0208<<14 | 0x2B<<7 | 0x43, + 21840 - 19968: jis0212<<14 | 0x14<<7 | 0x3A, + 21841 - 19968: jis0212<<14 | 0x14<<7 | 0x3B, + 21843 - 19968: jis0208<<14 | 0x16<<7 | 0x1B, + 21846 - 19968: jis0208<<14 | 0x32<<7 | 0x16, + 21847 - 19968: jis0208<<14 | 0x32<<7 | 0x17, + 21848 - 19968: jis0212<<14 | 0x14<<7 | 0x3C, + 21850 - 19968: jis0212<<14 | 0x14<<7 | 0x3D, + 21851 - 19968: jis0212<<14 | 0x14<<7 | 0x3E, + 21852 - 19968: jis0208<<14 | 0x32<<7 | 0x14, + 21853 - 19968: jis0208<<14 | 0x32<<7 | 0x1A, + 21854 - 19968: jis0212<<14 | 0x14<<7 | 0x3F, + 21856 - 19968: jis0212<<14 | 0x14<<7 | 0x40, + 21857 - 19968: jis0212<<14 | 0x14<<7 | 0x41, + 21859 - 19968: jis0208<<14 | 0x32<<7 | 0x11, + 21860 - 19968: jis0212<<14 | 0x14<<7 | 0x42, + 21862 - 19968: jis0212<<14 | 0x14<<7 | 0x43, + 21883 - 19968: jis0208<<14 | 0x32<<7 | 0x20, + 21884 - 19968: jis0208<<14 | 0x32<<7 | 0x25, + 21886 - 19968: jis0208<<14 | 0x32<<7 | 0x21, + 21887 - 19968: jis0212<<14 | 0x14<<7 | 0x44, + 21888 - 19968: jis0208<<14 | 0x32<<7 | 0x1C, + 21889 - 19968: jis0212<<14 | 0x14<<7 | 0x45, + 21890 - 19968: jis0212<<14 | 0x14<<7 | 0x46, + 21891 - 19968: jis0208<<14 | 0x32<<7 | 0x26, + 21892 - 19968: jis0208<<14 | 0x20<<7 | 0x10, + 21894 - 19968: jis0208<<14 | 0x58<<7 | 0x38, + 21895 - 19968: jis0208<<14 | 0x32<<7 | 0x28, + 21896 - 19968: jis0212<<14 | 0x14<<7 | 0x48, + 21897 - 19968: jis0208<<14 | 0x18<<7 | 0x01, + 21898 - 19968: jis0208<<14 | 0x32<<7 | 0x1E, + 21899 - 19968: jis0208<<14 | 0x22<<7 | 0x5C, + 21902 - 19968: jis0212<<14 | 0x14<<7 | 0x49, + 21903 - 19968: jis0212<<14 | 0x14<<7 | 0x4A, + 21905 - 19968: jis0212<<14 | 0x14<<7 | 0x4B, + 21906 - 19968: jis0212<<14 | 0x14<<7 | 0x4C, + 21907 - 19968: jis0212<<14 | 0x14<<7 | 0x4D, + 21908 - 19968: jis0212<<14 | 0x14<<7 | 0x4E, + 21911 - 19968: jis0212<<14 | 0x14<<7 | 0x4F, + 21912 - 19968: jis0208<<14 | 0x32<<7 | 0x22, + 21913 - 19968: jis0208<<14 | 0x32<<7 | 0x1B, + 21914 - 19968: jis0208<<14 | 0x13<<7 | 0x0C, + 21916 - 19968: jis0208<<14 | 0x13<<7 | 0x4D, + 21917 - 19968: jis0208<<14 | 0x12<<7 | 0x44, + 21918 - 19968: jis0208<<14 | 0x32<<7 | 0x23, + 21919 - 19968: jis0208<<14 | 0x32<<7 | 0x1F, + 21923 - 19968: jis0212<<14 | 0x14<<7 | 0x50, + 21924 - 19968: jis0212<<14 | 0x14<<7 | 0x51, + 21927 - 19968: jis0208<<14 | 0x16<<7 | 0x55, + 21928 - 19968: jis0208<<14 | 0x32<<7 | 0x29, + 21929 - 19968: jis0208<<14 | 0x32<<7 | 0x27, + 21930 - 19968: jis0208<<14 | 0x20<<7 | 0x32, + 21931 - 19968: jis0208<<14 | 0x14<<7 | 0x29, + 21932 - 19968: jis0208<<14 | 0x15<<7 | 0x0B, + 21933 - 19968: jis0212<<14 | 0x14<<7 | 0x52, + 21934 - 19968: jis0208<<14 | 0x32<<7 | 0x24, + 21936 - 19968: jis0208<<14 | 0x15<<7 | 0x53, + 21938 - 19968: jis0212<<14 | 0x14<<7 | 0x53, + 21942 - 19968: jis0208<<14 | 0x10<<7 | 0x23, + 21951 - 19968: jis0212<<14 | 0x14<<7 | 0x54, + 21953 - 19968: jis0212<<14 | 0x14<<7 | 0x55, + 21955 - 19968: jis0212<<14 | 0x14<<7 | 0x56, + 21956 - 19968: jis0208<<14 | 0x32<<7 | 0x2D, + 21957 - 19968: jis0208<<14 | 0x32<<7 | 0x2B, + 21958 - 19968: jis0212<<14 | 0x14<<7 | 0x57, + 21959 - 19968: jis0208<<14 | 0x33<<7 | 0x06, + 21961 - 19968: jis0212<<14 | 0x14<<7 | 0x58, + 21963 - 19968: jis0212<<14 | 0x14<<7 | 0x59, + 21964 - 19968: jis0212<<14 | 0x14<<7 | 0x5A, + 21966 - 19968: jis0212<<14 | 0x14<<7 | 0x5B, + 21969 - 19968: jis0212<<14 | 0x14<<7 | 0x5C, + 21970 - 19968: jis0212<<14 | 0x14<<7 | 0x5D, + 21971 - 19968: jis0212<<14 | 0x15<<7 | 0x00, + 21972 - 19968: jis0208<<14 | 0x32<<7 | 0x30, + 21975 - 19968: jis0212<<14 | 0x15<<7 | 0x01, + 21976 - 19968: jis0212<<14 | 0x15<<7 | 0x02, + 21978 - 19968: jis0208<<14 | 0x32<<7 | 0x2A, + 21979 - 19968: jis0212<<14 | 0x15<<7 | 0x03, + 21980 - 19968: jis0208<<14 | 0x32<<7 | 0x2E, + 21982 - 19968: jis0212<<14 | 0x15<<7 | 0x04, + 21983 - 19968: jis0208<<14 | 0x32<<7 | 0x2C, + 21986 - 19968: jis0212<<14 | 0x15<<7 | 0x05, + 21987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2B, + 21988 - 19968: jis0208<<14 | 0x32<<7 | 0x2F, + 21993 - 19968: jis0212<<14 | 0x15<<7 | 0x06, + 22006 - 19968: jis0212<<14 | 0x15<<7 | 0x07, + 22007 - 19968: jis0208<<14 | 0x32<<7 | 0x32, + 22009 - 19968: jis0208<<14 | 0x32<<7 | 0x37, + 22013 - 19968: jis0208<<14 | 0x32<<7 | 0x35, + 22014 - 19968: jis0208<<14 | 0x32<<7 | 0x34, + 22015 - 19968: jis0212<<14 | 0x15<<7 | 0x08, + 22021 - 19968: jis0212<<14 | 0x15<<7 | 0x09, + 22022 - 19968: jis0208<<14 | 0x22<<7 | 0x11, + 22024 - 19968: jis0212<<14 | 0x15<<7 | 0x0A, + 22025 - 19968: jis0208<<14 | 0x11<<7 | 0x24, + 22026 - 19968: jis0212<<14 | 0x15<<7 | 0x0B, + 22029 - 19968: jis0212<<14 | 0x15<<7 | 0x0C, + 22030 - 19968: jis0212<<14 | 0x15<<7 | 0x0D, + 22031 - 19968: jis0212<<14 | 0x15<<7 | 0x0E, + 22032 - 19968: jis0212<<14 | 0x15<<7 | 0x0F, + 22033 - 19968: jis0212<<14 | 0x15<<7 | 0x10, + 22034 - 19968: jis0212<<14 | 0x15<<7 | 0x11, + 22036 - 19968: jis0208<<14 | 0x32<<7 | 0x31, + 22038 - 19968: jis0208<<14 | 0x32<<7 | 0x33, + 22039 - 19968: jis0208<<14 | 0x1D<<7 | 0x07, + 22040 - 19968: jis0208<<14 | 0x10<<7 | 0x12, + 22041 - 19968: jis0212<<14 | 0x15<<7 | 0x12, + 22043 - 19968: jis0208<<14 | 0x32<<7 | 0x36, + 22057 - 19968: jis0208<<14 | 0x11<<7 | 0x3D, + 22060 - 19968: jis0212<<14 | 0x15<<7 | 0x13, + 22063 - 19968: jis0208<<14 | 0x32<<7 | 0x41, + 22064 - 19968: jis0212<<14 | 0x15<<7 | 0x14, + 22065 - 19968: jis0208<<14 | 0x1D<<7 | 0x5B, + 22066 - 19968: jis0208<<14 | 0x32<<7 | 0x3D, + 22067 - 19968: jis0212<<14 | 0x15<<7 | 0x15, + 22068 - 19968: jis0208<<14 | 0x32<<7 | 0x3B, + 22069 - 19968: jis0212<<14 | 0x15<<7 | 0x16, + 22070 - 19968: jis0208<<14 | 0x32<<7 | 0x3C, + 22071 - 19968: jis0212<<14 | 0x15<<7 | 0x17, + 22072 - 19968: jis0208<<14 | 0x32<<7 | 0x3E, + 22073 - 19968: jis0212<<14 | 0x15<<7 | 0x18, + 22075 - 19968: jis0212<<14 | 0x15<<7 | 0x19, + 22076 - 19968: jis0212<<14 | 0x15<<7 | 0x1A, + 22077 - 19968: jis0212<<14 | 0x15<<7 | 0x1B, + 22079 - 19968: jis0212<<14 | 0x15<<7 | 0x1C, + 22080 - 19968: jis0212<<14 | 0x15<<7 | 0x1D, + 22081 - 19968: jis0212<<14 | 0x15<<7 | 0x1E, + 22082 - 19968: jis0208<<14 | 0x10<<7 | 0x1C, + 22083 - 19968: jis0212<<14 | 0x15<<7 | 0x1F, + 22084 - 19968: jis0212<<14 | 0x15<<7 | 0x20, + 22086 - 19968: jis0212<<14 | 0x15<<7 | 0x21, + 22089 - 19968: jis0212<<14 | 0x15<<7 | 0x22, + 22091 - 19968: jis0212<<14 | 0x15<<7 | 0x23, + 22092 - 19968: jis0208<<14 | 0x20<<7 | 0x18, + 22093 - 19968: jis0212<<14 | 0x15<<7 | 0x24, + 22094 - 19968: jis0208<<14 | 0x32<<7 | 0x38, + 22095 - 19968: jis0212<<14 | 0x15<<7 | 0x25, + 22096 - 19968: jis0208<<14 | 0x32<<7 | 0x39, + 22100 - 19968: jis0212<<14 | 0x15<<7 | 0x26, + 22107 - 19968: jis0208<<14 | 0x12<<7 | 0x59, + 22110 - 19968: jis0212<<14 | 0x15<<7 | 0x27, + 22112 - 19968: jis0212<<14 | 0x15<<7 | 0x28, + 22113 - 19968: jis0212<<14 | 0x15<<7 | 0x29, + 22114 - 19968: jis0212<<14 | 0x15<<7 | 0x2A, + 22115 - 19968: jis0212<<14 | 0x15<<7 | 0x2B, + 22116 - 19968: jis0208<<14 | 0x32<<7 | 0x40, + 22118 - 19968: jis0212<<14 | 0x15<<7 | 0x2C, + 22120 - 19968: jis0208<<14 | 0x13<<7 | 0x4E, + 22121 - 19968: jis0212<<14 | 0x15<<7 | 0x2D, + 22122 - 19968: jis0208<<14 | 0x32<<7 | 0x43, + 22123 - 19968: jis0208<<14 | 0x32<<7 | 0x3F, + 22124 - 19968: jis0208<<14 | 0x32<<7 | 0x42, + 22125 - 19968: jis0212<<14 | 0x15<<7 | 0x2E, + 22127 - 19968: jis0212<<14 | 0x15<<7 | 0x2F, + 22129 - 19968: jis0212<<14 | 0x15<<7 | 0x30, + 22130 - 19968: jis0212<<14 | 0x15<<7 | 0x31, + 22132 - 19968: jis0208<<14 | 0x29<<7 | 0x0D, + 22133 - 19968: jis0212<<14 | 0x15<<7 | 0x32, + 22136 - 19968: jis0208<<14 | 0x25<<7 | 0x34, + 22138 - 19968: jis0208<<14 | 0x27<<7 | 0x17, + 22144 - 19968: jis0208<<14 | 0x32<<7 | 0x45, + 22148 - 19968: jis0212<<14 | 0x15<<7 | 0x33, + 22149 - 19968: jis0212<<14 | 0x15<<7 | 0x34, + 22150 - 19968: jis0208<<14 | 0x32<<7 | 0x44, + 22151 - 19968: jis0208<<14 | 0x12<<7 | 0x24, + 22152 - 19968: jis0212<<14 | 0x15<<7 | 0x35, + 22154 - 19968: jis0208<<14 | 0x32<<7 | 0x46, + 22155 - 19968: jis0212<<14 | 0x15<<7 | 0x36, + 22156 - 19968: jis0212<<14 | 0x15<<7 | 0x37, + 22159 - 19968: jis0208<<14 | 0x32<<7 | 0x49, + 22164 - 19968: jis0208<<14 | 0x32<<7 | 0x48, + 22165 - 19968: jis0212<<14 | 0x15<<7 | 0x38, + 22169 - 19968: jis0212<<14 | 0x15<<7 | 0x39, + 22170 - 19968: jis0212<<14 | 0x15<<7 | 0x3A, + 22173 - 19968: jis0212<<14 | 0x15<<7 | 0x3B, + 22174 - 19968: jis0212<<14 | 0x15<<7 | 0x3C, + 22175 - 19968: jis0212<<14 | 0x15<<7 | 0x3D, + 22176 - 19968: jis0208<<14 | 0x32<<7 | 0x47, + 22178 - 19968: jis0208<<14 | 0x26<<7 | 0x18, + 22181 - 19968: jis0208<<14 | 0x32<<7 | 0x4A, + 22182 - 19968: jis0212<<14 | 0x15<<7 | 0x3E, + 22183 - 19968: jis0212<<14 | 0x15<<7 | 0x3F, + 22184 - 19968: jis0212<<14 | 0x15<<7 | 0x40, + 22185 - 19968: jis0212<<14 | 0x15<<7 | 0x41, + 22187 - 19968: jis0212<<14 | 0x15<<7 | 0x42, + 22188 - 19968: jis0212<<14 | 0x15<<7 | 0x43, + 22189 - 19968: jis0212<<14 | 0x15<<7 | 0x44, + 22190 - 19968: jis0208<<14 | 0x32<<7 | 0x4B, + 22193 - 19968: jis0212<<14 | 0x15<<7 | 0x45, + 22195 - 19968: jis0212<<14 | 0x15<<7 | 0x46, + 22196 - 19968: jis0208<<14 | 0x32<<7 | 0x4D, + 22198 - 19968: jis0208<<14 | 0x32<<7 | 0x4C, + 22199 - 19968: jis0212<<14 | 0x15<<7 | 0x47, + 22204 - 19968: jis0208<<14 | 0x32<<7 | 0x4F, + 22206 - 19968: jis0212<<14 | 0x15<<7 | 0x48, + 22208 - 19968: jis0208<<14 | 0x32<<7 | 0x52, + 22209 - 19968: jis0208<<14 | 0x32<<7 | 0x50, + 22210 - 19968: jis0208<<14 | 0x32<<7 | 0x4E, + 22211 - 19968: jis0208<<14 | 0x32<<7 | 0x51, + 22213 - 19968: jis0212<<14 | 0x15<<7 | 0x49, + 22216 - 19968: jis0208<<14 | 0x32<<7 | 0x53, + 22217 - 19968: jis0212<<14 | 0x15<<7 | 0x4A, + 22218 - 19968: jis0212<<14 | 0x15<<7 | 0x4B, + 22219 - 19968: jis0212<<14 | 0x15<<7 | 0x4C, + 22220 - 19968: jis0212<<14 | 0x15<<7 | 0x4F, + 22221 - 19968: jis0212<<14 | 0x15<<7 | 0x50, + 22222 - 19968: jis0208<<14 | 0x32<<7 | 0x54, + 22223 - 19968: jis0212<<14 | 0x15<<7 | 0x4D, + 22224 - 19968: jis0212<<14 | 0x15<<7 | 0x4E, + 22225 - 19968: jis0208<<14 | 0x32<<7 | 0x55, + 22227 - 19968: jis0208<<14 | 0x32<<7 | 0x56, + 22231 - 19968: jis0208<<14 | 0x32<<7 | 0x57, + 22232 - 19968: jis0208<<14 | 0x30<<7 | 0x24, + 22233 - 19968: jis0212<<14 | 0x15<<7 | 0x51, + 22234 - 19968: jis0208<<14 | 0x1B<<7 | 0x5B, + 22235 - 19968: jis0208<<14 | 0x1A<<7 | 0x2C, + 22236 - 19968: jis0212<<14 | 0x15<<7 | 0x52, + 22237 - 19968: jis0212<<14 | 0x15<<7 | 0x53, + 22238 - 19968: jis0208<<14 | 0x11<<7 | 0x52, + 22239 - 19968: jis0212<<14 | 0x15<<7 | 0x54, + 22240 - 19968: jis0208<<14 | 0x0F<<7 | 0x57, + 22241 - 19968: jis0212<<14 | 0x15<<7 | 0x55, + 22243 - 19968: jis0208<<14 | 0x22<<7 | 0x23, + 22244 - 19968: jis0212<<14 | 0x15<<7 | 0x56, + 22245 - 19968: jis0212<<14 | 0x15<<7 | 0x57, + 22246 - 19968: jis0212<<14 | 0x15<<7 | 0x58, + 22247 - 19968: jis0212<<14 | 0x15<<7 | 0x59, + 22248 - 19968: jis0212<<14 | 0x15<<7 | 0x5A, + 22251 - 19968: jis0212<<14 | 0x15<<7 | 0x5C, + 22253 - 19968: jis0212<<14 | 0x15<<7 | 0x5D, + 22254 - 19968: jis0208<<14 | 0x32<<7 | 0x58, + 22256 - 19968: jis0208<<14 | 0x19<<7 | 0x03, + 22257 - 19968: jis0212<<14 | 0x15<<7 | 0x5B, + 22258 - 19968: jis0208<<14 | 0x0F<<7 | 0x2E, + 22259 - 19968: jis0208<<14 | 0x1E<<7 | 0x3D, + 22262 - 19968: jis0212<<14 | 0x16<<7 | 0x00, + 22263 - 19968: jis0212<<14 | 0x16<<7 | 0x01, + 22265 - 19968: jis0208<<14 | 0x32<<7 | 0x59, + 22266 - 19968: jis0208<<14 | 0x17<<7 | 0x26, + 22269 - 19968: jis0208<<14 | 0x18<<7 | 0x50, + 22271 - 19968: jis0208<<14 | 0x32<<7 | 0x5B, + 22272 - 19968: jis0208<<14 | 0x32<<7 | 0x5A, + 22273 - 19968: jis0212<<14 | 0x16<<7 | 0x02, + 22274 - 19968: jis0212<<14 | 0x16<<7 | 0x03, + 22275 - 19968: jis0208<<14 | 0x29<<7 | 0x3F, + 22276 - 19968: jis0208<<14 | 0x32<<7 | 0x5C, + 22279 - 19968: jis0212<<14 | 0x16<<7 | 0x04, + 22280 - 19968: jis0208<<14 | 0x33<<7 | 0x00, + 22281 - 19968: jis0208<<14 | 0x32<<7 | 0x5D, + 22282 - 19968: jis0212<<14 | 0x16<<7 | 0x05, + 22283 - 19968: jis0208<<14 | 0x33<<7 | 0x01, + 22284 - 19968: jis0212<<14 | 0x16<<7 | 0x06, + 22285 - 19968: jis0208<<14 | 0x33<<7 | 0x02, + 22287 - 19968: jis0208<<14 | 0x16<<7 | 0x56, + 22289 - 19968: jis0212<<14 | 0x16<<7 | 0x07, + 22290 - 19968: jis0208<<14 | 0x10<<7 | 0x3F, + 22291 - 19968: jis0208<<14 | 0x33<<7 | 0x03, + 22293 - 19968: jis0212<<14 | 0x16<<7 | 0x08, + 22294 - 19968: jis0208<<14 | 0x33<<7 | 0x05, + 22296 - 19968: jis0208<<14 | 0x33<<7 | 0x04, + 22298 - 19968: jis0212<<14 | 0x16<<7 | 0x09, + 22299 - 19968: jis0212<<14 | 0x16<<7 | 0x0A, + 22300 - 19968: jis0208<<14 | 0x33<<7 | 0x07, + 22301 - 19968: jis0212<<14 | 0x16<<7 | 0x0B, + 22303 - 19968: jis0208<<14 | 0x24<<7 | 0x39, + 22304 - 19968: jis0212<<14 | 0x16<<7 | 0x0C, + 22306 - 19968: jis0212<<14 | 0x16<<7 | 0x0D, + 22307 - 19968: jis0212<<14 | 0x16<<7 | 0x0E, + 22308 - 19968: jis0212<<14 | 0x16<<7 | 0x0F, + 22309 - 19968: jis0212<<14 | 0x16<<7 | 0x10, + 22310 - 19968: jis0208<<14 | 0x33<<7 | 0x08, + 22311 - 19968: jis0208<<14 | 0x0F<<7 | 0x14, + 22312 - 19968: jis0208<<14 | 0x19<<7 | 0x3E, + 22313 - 19968: jis0212<<14 | 0x16<<7 | 0x11, + 22314 - 19968: jis0212<<14 | 0x16<<7 | 0x12, + 22316 - 19968: jis0212<<14 | 0x16<<7 | 0x13, + 22317 - 19968: jis0208<<14 | 0x16<<7 | 0x1C, + 22318 - 19968: jis0212<<14 | 0x16<<7 | 0x14, + 22319 - 19968: jis0212<<14 | 0x16<<7 | 0x15, + 22320 - 19968: jis0208<<14 | 0x22<<7 | 0x2E, + 22323 - 19968: jis0212<<14 | 0x16<<7 | 0x16, + 22324 - 19968: jis0212<<14 | 0x16<<7 | 0x17, + 22327 - 19968: jis0208<<14 | 0x33<<7 | 0x09, + 22328 - 19968: jis0208<<14 | 0x33<<7 | 0x0A, + 22331 - 19968: jis0208<<14 | 0x33<<7 | 0x0C, + 22333 - 19968: jis0212<<14 | 0x16<<7 | 0x18, + 22334 - 19968: jis0212<<14 | 0x16<<7 | 0x19, + 22335 - 19968: jis0212<<14 | 0x16<<7 | 0x1A, + 22336 - 19968: jis0208<<14 | 0x33<<7 | 0x0D, + 22338 - 19968: jis0208<<14 | 0x19<<7 | 0x43, + 22341 - 19968: jis0212<<14 | 0x16<<7 | 0x1B, + 22342 - 19968: jis0212<<14 | 0x16<<7 | 0x1C, + 22343 - 19968: jis0208<<14 | 0x15<<7 | 0x30, + 22346 - 19968: jis0208<<14 | 0x2A<<7 | 0x16, + 22348 - 19968: jis0212<<14 | 0x16<<7 | 0x1D, + 22349 - 19968: jis0212<<14 | 0x16<<7 | 0x1E, + 22350 - 19968: jis0208<<14 | 0x33<<7 | 0x0B, + 22351 - 19968: jis0208<<14 | 0x33<<7 | 0x0E, + 22352 - 19968: jis0208<<14 | 0x19<<7 | 0x20, + 22353 - 19968: jis0208<<14 | 0x18<<7 | 0x02, + 22354 - 19968: jis0212<<14 | 0x16<<7 | 0x1F, + 22361 - 19968: jis0208<<14 | 0x58<<7 | 0x39, + 22369 - 19968: jis0208<<14 | 0x33<<7 | 0x12, + 22370 - 19968: jis0212<<14 | 0x16<<7 | 0x20, + 22372 - 19968: jis0208<<14 | 0x19<<7 | 0x04, + 22373 - 19968: jis0208<<14 | 0x58<<7 | 0x3A, + 22374 - 19968: jis0208<<14 | 0x22<<7 | 0x12, + 22375 - 19968: jis0212<<14 | 0x16<<7 | 0x22, + 22376 - 19968: jis0212<<14 | 0x16<<7 | 0x23, + 22377 - 19968: jis0208<<14 | 0x33<<7 | 0x0F, + 22378 - 19968: jis0208<<14 | 0x23<<7 | 0x39, + 22379 - 19968: jis0212<<14 | 0x16<<7 | 0x24, + 22381 - 19968: jis0212<<14 | 0x16<<7 | 0x25, + 22382 - 19968: jis0212<<14 | 0x16<<7 | 0x26, + 22383 - 19968: jis0212<<14 | 0x16<<7 | 0x27, + 22384 - 19968: jis0212<<14 | 0x16<<7 | 0x28, + 22385 - 19968: jis0212<<14 | 0x16<<7 | 0x29, + 22387 - 19968: jis0212<<14 | 0x16<<7 | 0x2A, + 22388 - 19968: jis0212<<14 | 0x16<<7 | 0x2B, + 22389 - 19968: jis0212<<14 | 0x16<<7 | 0x2C, + 22391 - 19968: jis0212<<14 | 0x16<<7 | 0x2D, + 22393 - 19968: jis0212<<14 | 0x16<<7 | 0x2E, + 22394 - 19968: jis0212<<14 | 0x16<<7 | 0x2F, + 22395 - 19968: jis0212<<14 | 0x16<<7 | 0x30, + 22396 - 19968: jis0212<<14 | 0x16<<7 | 0x31, + 22398 - 19968: jis0212<<14 | 0x16<<7 | 0x32, + 22399 - 19968: jis0208<<14 | 0x33<<7 | 0x13, + 22401 - 19968: jis0212<<14 | 0x16<<7 | 0x33, + 22402 - 19968: jis0208<<14 | 0x1E<<7 | 0x41, + 22403 - 19968: jis0212<<14 | 0x16<<7 | 0x34, + 22408 - 19968: jis0208<<14 | 0x33<<7 | 0x11, + 22409 - 19968: jis0208<<14 | 0x33<<7 | 0x14, + 22411 - 19968: jis0208<<14 | 0x16<<7 | 0x1E, + 22412 - 19968: jis0212<<14 | 0x16<<7 | 0x35, + 22419 - 19968: jis0208<<14 | 0x33<<7 | 0x15, + 22420 - 19968: jis0212<<14 | 0x16<<7 | 0x36, + 22421 - 19968: jis0212<<14 | 0x16<<7 | 0x3F, + 22423 - 19968: jis0212<<14 | 0x16<<7 | 0x37, + 22425 - 19968: jis0212<<14 | 0x16<<7 | 0x38, + 22426 - 19968: jis0212<<14 | 0x16<<7 | 0x39, + 22428 - 19968: jis0212<<14 | 0x16<<7 | 0x3A, + 22429 - 19968: jis0212<<14 | 0x16<<7 | 0x3B, + 22430 - 19968: jis0212<<14 | 0x16<<7 | 0x3C, + 22431 - 19968: jis0212<<14 | 0x16<<7 | 0x3D, + 22432 - 19968: jis0208<<14 | 0x33<<7 | 0x16, + 22433 - 19968: jis0212<<14 | 0x16<<7 | 0x3E, + 22434 - 19968: jis0208<<14 | 0x18<<7 | 0x03, + 22435 - 19968: jis0208<<14 | 0x12<<7 | 0x1F, + 22436 - 19968: jis0208<<14 | 0x33<<7 | 0x18, + 22439 - 19968: jis0212<<14 | 0x16<<7 | 0x40, + 22440 - 19968: jis0212<<14 | 0x16<<7 | 0x41, + 22441 - 19968: jis0212<<14 | 0x16<<7 | 0x42, + 22442 - 19968: jis0208<<14 | 0x33<<7 | 0x19, + 22444 - 19968: jis0208<<14 | 0x58<<7 | 0x3B, + 22448 - 19968: jis0208<<14 | 0x33<<7 | 0x1A, + 22451 - 19968: jis0208<<14 | 0x33<<7 | 0x17, + 22456 - 19968: jis0212<<14 | 0x16<<7 | 0x44, + 22461 - 19968: jis0212<<14 | 0x16<<7 | 0x45, + 22464 - 19968: jis0208<<14 | 0x33<<7 | 0x10, + 22467 - 19968: jis0208<<14 | 0x33<<7 | 0x1B, + 22470 - 19968: jis0208<<14 | 0x33<<7 | 0x1C, + 22471 - 19968: jis0208<<14 | 0x58<<7 | 0x3D, + 22472 - 19968: jis0208<<14 | 0x58<<7 | 0x3C, + 22475 - 19968: jis0208<<14 | 0x2A<<7 | 0x43, + 22476 - 19968: jis0212<<14 | 0x16<<7 | 0x48, + 22478 - 19968: jis0208<<14 | 0x1D<<7 | 0x4A, + 22479 - 19968: jis0212<<14 | 0x16<<7 | 0x49, + 22482 - 19968: jis0208<<14 | 0x33<<7 | 0x1E, + 22483 - 19968: jis0208<<14 | 0x33<<7 | 0x1F, + 22484 - 19968: jis0208<<14 | 0x33<<7 | 0x1D, + 22485 - 19968: jis0212<<14 | 0x16<<7 | 0x4A, + 22486 - 19968: jis0208<<14 | 0x33<<7 | 0x21, + 22492 - 19968: jis0208<<14 | 0x26<<7 | 0x17, + 22493 - 19968: jis0212<<14 | 0x16<<7 | 0x4B, + 22494 - 19968: jis0212<<14 | 0x16<<7 | 0x4C, + 22495 - 19968: jis0208<<14 | 0x0F<<7 | 0x47, + 22496 - 19968: jis0208<<14 | 0x28<<7 | 0x35, + 22497 - 19968: jis0212<<14 | 0x16<<7 | 0x5D, + 22499 - 19968: jis0208<<14 | 0x33<<7 | 0x22, + 22500 - 19968: jis0212<<14 | 0x16<<7 | 0x4D, + 22502 - 19968: jis0212<<14 | 0x16<<7 | 0x4E, + 22503 - 19968: jis0212<<14 | 0x16<<7 | 0x4F, + 22505 - 19968: jis0212<<14 | 0x16<<7 | 0x50, + 22509 - 19968: jis0212<<14 | 0x16<<7 | 0x51, + 22512 - 19968: jis0212<<14 | 0x16<<7 | 0x52, + 22516 - 19968: jis0208<<14 | 0x1D<<7 | 0x5C, + 22517 - 19968: jis0212<<14 | 0x16<<7 | 0x53, + 22518 - 19968: jis0212<<14 | 0x16<<7 | 0x54, + 22519 - 19968: jis0208<<14 | 0x1B<<7 | 0x18, + 22520 - 19968: jis0212<<14 | 0x16<<7 | 0x55, + 22521 - 19968: jis0208<<14 | 0x26<<7 | 0x3C, + 22522 - 19968: jis0208<<14 | 0x13<<7 | 0x4F, + 22524 - 19968: jis0208<<14 | 0x19<<7 | 0x4A, + 22525 - 19968: jis0212<<14 | 0x16<<7 | 0x56, + 22526 - 19968: jis0212<<14 | 0x16<<7 | 0x57, + 22527 - 19968: jis0212<<14 | 0x16<<7 | 0x58, + 22528 - 19968: jis0208<<14 | 0x2A<<7 | 0x38, + 22530 - 19968: jis0208<<14 | 0x25<<7 | 0x11, + 22531 - 19968: jis0212<<14 | 0x16<<7 | 0x59, + 22532 - 19968: jis0212<<14 | 0x16<<7 | 0x5A, + 22533 - 19968: jis0208<<14 | 0x16<<7 | 0x57, + 22534 - 19968: jis0208<<14 | 0x21<<7 | 0x2E, + 22536 - 19968: jis0212<<14 | 0x16<<7 | 0x5B, + 22537 - 19968: jis0212<<14 | 0x16<<7 | 0x5C, + 22538 - 19968: jis0208<<14 | 0x33<<7 | 0x20, + 22539 - 19968: jis0208<<14 | 0x33<<7 | 0x23, + 22540 - 19968: jis0212<<14 | 0x17<<7 | 0x00, + 22541 - 19968: jis0212<<14 | 0x17<<7 | 0x01, + 22549 - 19968: jis0208<<14 | 0x21<<7 | 0x23, + 22553 - 19968: jis0208<<14 | 0x33<<7 | 0x24, + 22555 - 19968: jis0212<<14 | 0x17<<7 | 0x02, + 22557 - 19968: jis0208<<14 | 0x33<<7 | 0x25, + 22558 - 19968: jis0212<<14 | 0x17<<7 | 0x03, + 22559 - 19968: jis0212<<14 | 0x17<<7 | 0x04, + 22560 - 19968: jis0212<<14 | 0x17<<7 | 0x05, + 22561 - 19968: jis0208<<14 | 0x33<<7 | 0x27, + 22564 - 19968: jis0208<<14 | 0x23<<7 | 0x48, + 22566 - 19968: jis0212<<14 | 0x17<<7 | 0x06, + 22567 - 19968: jis0212<<14 | 0x17<<7 | 0x07, + 22570 - 19968: jis0208<<14 | 0x13<<7 | 0x0D, + 22573 - 19968: jis0212<<14 | 0x17<<7 | 0x08, + 22575 - 19968: jis0208<<14 | 0x53<<7 | 0x00, + 22576 - 19968: jis0208<<14 | 0x10<<7 | 0x40, + 22577 - 19968: jis0208<<14 | 0x29<<7 | 0x52, + 22578 - 19968: jis0212<<14 | 0x17<<7 | 0x09, + 22580 - 19968: jis0208<<14 | 0x1D<<7 | 0x4B, + 22581 - 19968: jis0208<<14 | 0x24<<7 | 0x27, + 22585 - 19968: jis0212<<14 | 0x17<<7 | 0x0A, + 22586 - 19968: jis0208<<14 | 0x19<<7 | 0x45, + 22589 - 19968: jis0208<<14 | 0x33<<7 | 0x2D, + 22591 - 19968: jis0212<<14 | 0x17<<7 | 0x0B, + 22592 - 19968: jis0208<<14 | 0x29<<7 | 0x1C, + 22593 - 19968: jis0208<<14 | 0x2D<<7 | 0x3C, + 22601 - 19968: jis0212<<14 | 0x17<<7 | 0x0C, + 22602 - 19968: jis0208<<14 | 0x11<<7 | 0x53, + 22603 - 19968: jis0208<<14 | 0x33<<7 | 0x29, + 22604 - 19968: jis0212<<14 | 0x17<<7 | 0x0D, + 22605 - 19968: jis0212<<14 | 0x17<<7 | 0x0E, + 22607 - 19968: jis0212<<14 | 0x17<<7 | 0x0F, + 22608 - 19968: jis0212<<14 | 0x17<<7 | 0x10, + 22609 - 19968: jis0208<<14 | 0x20<<7 | 0x19, + 22610 - 19968: jis0208<<14 | 0x33<<7 | 0x2C, + 22612 - 19968: jis0208<<14 | 0x24<<7 | 0x42, + 22613 - 19968: jis0212<<14 | 0x17<<7 | 0x11, + 22615 - 19968: jis0208<<14 | 0x24<<7 | 0x28, + 22616 - 19968: jis0208<<14 | 0x24<<7 | 0x43, + 22617 - 19968: jis0208<<14 | 0x27<<7 | 0x18, + 22618 - 19968: jis0208<<14 | 0x23<<7 | 0x2C, + 22622 - 19968: jis0208<<14 | 0x19<<7 | 0x28, + 22623 - 19968: jis0212<<14 | 0x17<<7 | 0x12, + 22625 - 19968: jis0212<<14 | 0x17<<7 | 0x13, + 22626 - 19968: jis0208<<14 | 0x33<<7 | 0x28, + 22628 - 19968: jis0212<<14 | 0x17<<7 | 0x14, + 22631 - 19968: jis0212<<14 | 0x17<<7 | 0x15, + 22632 - 19968: jis0212<<14 | 0x17<<7 | 0x16, + 22633 - 19968: jis0208<<14 | 0x10<<7 | 0x55, + 22635 - 19968: jis0208<<14 | 0x24<<7 | 0x15, + 22640 - 19968: jis0208<<14 | 0x33<<7 | 0x2A, + 22642 - 19968: jis0208<<14 | 0x33<<7 | 0x26, + 22645 - 19968: jis0208<<14 | 0x1E<<7 | 0x2F, + 22648 - 19968: jis0212<<14 | 0x17<<7 | 0x17, + 22649 - 19968: jis0208<<14 | 0x33<<7 | 0x2E, + 22652 - 19968: jis0212<<14 | 0x17<<7 | 0x18, + 22654 - 19968: jis0208<<14 | 0x1C<<7 | 0x2D, + 22655 - 19968: jis0212<<14 | 0x17<<7 | 0x19, + 22656 - 19968: jis0212<<14 | 0x17<<7 | 0x1A, + 22657 - 19968: jis0212<<14 | 0x17<<7 | 0x1B, + 22659 - 19968: jis0208<<14 | 0x15<<7 | 0x0C, + 22661 - 19968: jis0208<<14 | 0x33<<7 | 0x2F, + 22663 - 19968: jis0212<<14 | 0x17<<7 | 0x1C, + 22664 - 19968: jis0212<<14 | 0x17<<7 | 0x1D, + 22665 - 19968: jis0212<<14 | 0x17<<7 | 0x1E, + 22666 - 19968: jis0212<<14 | 0x17<<7 | 0x1F, + 22668 - 19968: jis0212<<14 | 0x17<<7 | 0x20, + 22669 - 19968: jis0212<<14 | 0x17<<7 | 0x21, + 22671 - 19968: jis0212<<14 | 0x17<<7 | 0x22, + 22672 - 19968: jis0212<<14 | 0x17<<7 | 0x23, + 22675 - 19968: jis0208<<14 | 0x29<<7 | 0x47, + 22676 - 19968: jis0212<<14 | 0x17<<7 | 0x24, + 22678 - 19968: jis0212<<14 | 0x17<<7 | 0x25, + 22679 - 19968: jis0208<<14 | 0x20<<7 | 0x5C, + 22684 - 19968: jis0208<<14 | 0x23<<7 | 0x25, + 22685 - 19968: jis0212<<14 | 0x17<<7 | 0x26, + 22686 - 19968: jis0208<<14 | 0x58<<7 | 0x40, + 22687 - 19968: jis0208<<14 | 0x33<<7 | 0x31, + 22688 - 19968: jis0212<<14 | 0x17<<7 | 0x27, + 22689 - 19968: jis0212<<14 | 0x17<<7 | 0x28, + 22690 - 19968: jis0212<<14 | 0x17<<7 | 0x29, + 22694 - 19968: jis0212<<14 | 0x17<<7 | 0x2A, + 22696 - 19968: jis0208<<14 | 0x2A<<7 | 0x2E, + 22697 - 19968: jis0212<<14 | 0x17<<7 | 0x2B, + 22699 - 19968: jis0208<<14 | 0x33<<7 | 0x32, + 22702 - 19968: jis0208<<14 | 0x33<<7 | 0x37, + 22705 - 19968: jis0212<<14 | 0x17<<7 | 0x2C, + 22706 - 19968: jis0208<<14 | 0x58<<7 | 0x41, + 22707 - 19968: jis0208<<14 | 0x29<<7 | 0x0E, + 22712 - 19968: jis0208<<14 | 0x33<<7 | 0x36, + 22713 - 19968: jis0208<<14 | 0x33<<7 | 0x30, + 22714 - 19968: jis0208<<14 | 0x33<<7 | 0x33, + 22715 - 19968: jis0208<<14 | 0x33<<7 | 0x35, + 22716 - 19968: jis0212<<14 | 0x17<<7 | 0x2F, + 22718 - 19968: jis0208<<14 | 0x19<<7 | 0x05, + 22721 - 19968: jis0208<<14 | 0x29<<7 | 0x28, + 22722 - 19968: jis0212<<14 | 0x17<<7 | 0x30, + 22724 - 19968: jis0212<<14 | 0x17<<7 | 0x2E, + 22725 - 19968: jis0208<<14 | 0x33<<7 | 0x38, + 22727 - 19968: jis0208<<14 | 0x22<<7 | 0x24, + 22728 - 19968: jis0212<<14 | 0x17<<7 | 0x31, + 22730 - 19968: jis0208<<14 | 0x11<<7 | 0x54, + 22732 - 19968: jis0208<<14 | 0x1D<<7 | 0x4C, + 22733 - 19968: jis0212<<14 | 0x17<<7 | 0x32, + 22734 - 19968: jis0212<<14 | 0x17<<7 | 0x33, + 22736 - 19968: jis0212<<14 | 0x17<<7 | 0x34, + 22737 - 19968: jis0208<<14 | 0x33<<7 | 0x3A, + 22738 - 19968: jis0212<<14 | 0x17<<7 | 0x35, + 22739 - 19968: jis0208<<14 | 0x33<<7 | 0x39, + 22740 - 19968: jis0212<<14 | 0x17<<7 | 0x36, + 22741 - 19968: jis0208<<14 | 0x18<<7 | 0x47, + 22742 - 19968: jis0212<<14 | 0x17<<7 | 0x37, + 22743 - 19968: jis0208<<14 | 0x33<<7 | 0x3B, + 22744 - 19968: jis0208<<14 | 0x33<<7 | 0x3D, + 22745 - 19968: jis0208<<14 | 0x33<<7 | 0x3C, + 22746 - 19968: jis0212<<14 | 0x17<<7 | 0x38, + 22748 - 19968: jis0208<<14 | 0x33<<7 | 0x3F, + 22749 - 19968: jis0212<<14 | 0x17<<7 | 0x39, + 22750 - 19968: jis0208<<14 | 0x33<<7 | 0x34, + 22751 - 19968: jis0208<<14 | 0x33<<7 | 0x41, + 22753 - 19968: jis0212<<14 | 0x17<<7 | 0x3A, + 22754 - 19968: jis0212<<14 | 0x17<<7 | 0x3B, + 22756 - 19968: jis0208<<14 | 0x33<<7 | 0x40, + 22757 - 19968: jis0208<<14 | 0x33<<7 | 0x3E, + 22761 - 19968: jis0212<<14 | 0x17<<7 | 0x3C, + 22763 - 19968: jis0208<<14 | 0x1A<<7 | 0x2D, + 22764 - 19968: jis0208<<14 | 0x1E<<7 | 0x30, + 22766 - 19968: jis0208<<14 | 0x20<<7 | 0x33, + 22767 - 19968: jis0208<<14 | 0x33<<7 | 0x42, + 22768 - 19968: jis0208<<14 | 0x1F<<7 | 0x1B, + 22769 - 19968: jis0208<<14 | 0x0F<<7 | 0x4C, + 22770 - 19968: jis0208<<14 | 0x26<<7 | 0x43, + 22771 - 19968: jis0212<<14 | 0x17<<7 | 0x3D, + 22775 - 19968: jis0208<<14 | 0x23<<7 | 0x3A, + 22777 - 19968: jis0208<<14 | 0x33<<7 | 0x44, + 22778 - 19968: jis0208<<14 | 0x33<<7 | 0x43, + 22779 - 19968: jis0208<<14 | 0x33<<7 | 0x45, + 22780 - 19968: jis0208<<14 | 0x33<<7 | 0x46, + 22781 - 19968: jis0208<<14 | 0x33<<7 | 0x47, + 22786 - 19968: jis0208<<14 | 0x33<<7 | 0x48, + 22789 - 19968: jis0212<<14 | 0x17<<7 | 0x3E, + 22790 - 19968: jis0212<<14 | 0x17<<7 | 0x3F, + 22793 - 19968: jis0208<<14 | 0x29<<7 | 0x30, + 22794 - 19968: jis0208<<14 | 0x33<<7 | 0x49, + 22795 - 19968: jis0208<<14 | 0x58<<7 | 0x42, + 22796 - 19968: jis0212<<14 | 0x17<<7 | 0x41, + 22799 - 19968: jis0208<<14 | 0x11<<7 | 0x25, + 22800 - 19968: jis0208<<14 | 0x33<<7 | 0x4A, + 22802 - 19968: jis0212<<14 | 0x17<<7 | 0x42, + 22803 - 19968: jis0212<<14 | 0x17<<7 | 0x43, + 22804 - 19968: jis0212<<14 | 0x17<<7 | 0x44, + 22805 - 19968: jis0208<<14 | 0x2C<<7 | 0x1B, + 22806 - 19968: jis0208<<14 | 0x12<<7 | 0x0F, + 22808 - 19968: jis0208<<14 | 0x31<<7 | 0x28, + 22809 - 19968: jis0208<<14 | 0x1C<<7 | 0x27, + 22810 - 19968: jis0208<<14 | 0x21<<7 | 0x1E, + 22811 - 19968: jis0208<<14 | 0x33<<7 | 0x4B, + 22812 - 19968: jis0208<<14 | 0x2B<<7 | 0x4A, + 22813 - 19968: jis0212<<14 | 0x17<<7 | 0x46, + 22817 - 19968: jis0212<<14 | 0x17<<7 | 0x47, + 22818 - 19968: jis0208<<14 | 0x2B<<7 | 0x13, + 22819 - 19968: jis0212<<14 | 0x17<<7 | 0x48, + 22820 - 19968: jis0212<<14 | 0x17<<7 | 0x49, + 22821 - 19968: jis0208<<14 | 0x33<<7 | 0x4D, + 22823 - 19968: jis0208<<14 | 0x21<<7 | 0x46, + 22824 - 19968: jis0212<<14 | 0x17<<7 | 0x4A, + 22825 - 19968: jis0208<<14 | 0x24<<7 | 0x16, + 22826 - 19968: jis0208<<14 | 0x21<<7 | 0x1F, + 22827 - 19968: jis0208<<14 | 0x28<<7 | 0x36, + 22828 - 19968: jis0208<<14 | 0x33<<7 | 0x4E, + 22829 - 19968: jis0208<<14 | 0x33<<7 | 0x4F, + 22830 - 19968: jis0208<<14 | 0x10<<7 | 0x5A, + 22831 - 19968: jis0212<<14 | 0x17<<7 | 0x4B, + 22832 - 19968: jis0212<<14 | 0x17<<7 | 0x4C, + 22833 - 19968: jis0208<<14 | 0x1B<<7 | 0x19, + 22834 - 19968: jis0208<<14 | 0x33<<7 | 0x50, + 22835 - 19968: jis0212<<14 | 0x17<<7 | 0x4D, + 22837 - 19968: jis0212<<14 | 0x17<<7 | 0x4E, + 22838 - 19968: jis0212<<14 | 0x17<<7 | 0x4F, + 22839 - 19968: jis0208<<14 | 0x0F<<7 | 0x2F, + 22840 - 19968: jis0208<<14 | 0x33<<7 | 0x51, + 22846 - 19968: jis0208<<14 | 0x33<<7 | 0x52, + 22847 - 19968: jis0212<<14 | 0x17<<7 | 0x50, + 22851 - 19968: jis0212<<14 | 0x17<<7 | 0x51, + 22852 - 19968: jis0208<<14 | 0x10<<7 | 0x41, + 22854 - 19968: jis0212<<14 | 0x17<<7 | 0x52, + 22855 - 19968: jis0208<<14 | 0x13<<7 | 0x50, + 22856 - 19968: jis0208<<14 | 0x25<<7 | 0x3F, + 22857 - 19968: jis0208<<14 | 0x29<<7 | 0x53, + 22862 - 19968: jis0208<<14 | 0x33<<7 | 0x56, + 22863 - 19968: jis0208<<14 | 0x20<<7 | 0x34, + 22864 - 19968: jis0208<<14 | 0x33<<7 | 0x55, + 22865 - 19968: jis0208<<14 | 0x16<<7 | 0x1F, + 22866 - 19968: jis0212<<14 | 0x17<<7 | 0x53, + 22867 - 19968: jis0208<<14 | 0x58<<7 | 0x43, + 22868 - 19968: jis0208<<14 | 0x2A<<7 | 0x3A, + 22869 - 19968: jis0208<<14 | 0x33<<7 | 0x54, + 22871 - 19968: jis0208<<14 | 0x24<<7 | 0x44, + 22872 - 19968: jis0208<<14 | 0x33<<7 | 0x58, + 22873 - 19968: jis0212<<14 | 0x17<<7 | 0x55, + 22874 - 19968: jis0208<<14 | 0x33<<7 | 0x57, + 22875 - 19968: jis0208<<14 | 0x58<<7 | 0x44, + 22877 - 19968: jis0208<<14 | 0x58<<7 | 0x45, + 22878 - 19968: jis0212<<14 | 0x17<<7 | 0x58, + 22879 - 19968: jis0212<<14 | 0x17<<7 | 0x59, + 22880 - 19968: jis0208<<14 | 0x33<<7 | 0x5A, + 22881 - 19968: jis0212<<14 | 0x17<<7 | 0x5A, + 22882 - 19968: jis0208<<14 | 0x33<<7 | 0x59, + 22883 - 19968: jis0208<<14 | 0x58<<7 | 0x46, + 22885 - 19968: jis0208<<14 | 0x10<<7 | 0x5B, + 22887 - 19968: jis0208<<14 | 0x33<<7 | 0x5B, + 22888 - 19968: jis0208<<14 | 0x1D<<7 | 0x08, + 22889 - 19968: jis0208<<14 | 0x33<<7 | 0x5D, + 22890 - 19968: jis0208<<14 | 0x22<<7 | 0x04, + 22891 - 19968: jis0212<<14 | 0x17<<7 | 0x5C, + 22892 - 19968: jis0208<<14 | 0x33<<7 | 0x5C, + 22893 - 19968: jis0212<<14 | 0x17<<7 | 0x5D, + 22894 - 19968: jis0208<<14 | 0x29<<7 | 0x12, + 22895 - 19968: jis0212<<14 | 0x18<<7 | 0x00, + 22898 - 19968: jis0212<<14 | 0x18<<7 | 0x01, + 22899 - 19968: jis0208<<14 | 0x1C<<7 | 0x56, + 22900 - 19968: jis0208<<14 | 0x24<<7 | 0x3A, + 22901 - 19968: jis0212<<14 | 0x18<<7 | 0x02, + 22902 - 19968: jis0212<<14 | 0x18<<7 | 0x03, + 22904 - 19968: jis0208<<14 | 0x34<<7 | 0x00, + 22905 - 19968: jis0212<<14 | 0x18<<7 | 0x04, + 22907 - 19968: jis0212<<14 | 0x18<<7 | 0x05, + 22908 - 19968: jis0212<<14 | 0x18<<7 | 0x06, + 22909 - 19968: jis0208<<14 | 0x18<<7 | 0x04, + 22913 - 19968: jis0208<<14 | 0x34<<7 | 0x01, + 22914 - 19968: jis0208<<14 | 0x26<<7 | 0x00, + 22915 - 19968: jis0208<<14 | 0x27<<7 | 0x3D, + 22916 - 19968: jis0208<<14 | 0x2B<<7 | 0x30, + 22922 - 19968: jis0208<<14 | 0x26<<7 | 0x04, + 22923 - 19968: jis0212<<14 | 0x18<<7 | 0x07, + 22924 - 19968: jis0212<<14 | 0x18<<7 | 0x08, + 22925 - 19968: jis0208<<14 | 0x34<<7 | 0x0A, + 22926 - 19968: jis0212<<14 | 0x18<<7 | 0x09, + 22930 - 19968: jis0212<<14 | 0x18<<7 | 0x0A, + 22931 - 19968: jis0208<<14 | 0x14<<7 | 0x17, + 22933 - 19968: jis0212<<14 | 0x18<<7 | 0x0B, + 22934 - 19968: jis0208<<14 | 0x2C<<7 | 0x24, + 22935 - 19968: jis0212<<14 | 0x18<<7 | 0x0C, + 22937 - 19968: jis0208<<14 | 0x2B<<7 | 0x0E, + 22939 - 19968: jis0208<<14 | 0x35<<7 | 0x0B, + 22941 - 19968: jis0208<<14 | 0x34<<7 | 0x02, + 22943 - 19968: jis0212<<14 | 0x18<<7 | 0x0D, + 22947 - 19968: jis0208<<14 | 0x34<<7 | 0x05, + 22948 - 19968: jis0208<<14 | 0x58<<7 | 0x47, + 22949 - 19968: jis0208<<14 | 0x21<<7 | 0x24, + 22951 - 19968: jis0212<<14 | 0x18<<7 | 0x0F, + 22952 - 19968: jis0208<<14 | 0x2A<<7 | 0x17, + 22956 - 19968: jis0208<<14 | 0x24<<7 | 0x29, + 22957 - 19968: jis0212<<14 | 0x18<<7 | 0x10, + 22958 - 19968: jis0212<<14 | 0x18<<7 | 0x11, + 22959 - 19968: jis0212<<14 | 0x18<<7 | 0x12, + 22960 - 19968: jis0212<<14 | 0x18<<7 | 0x13, + 22962 - 19968: jis0208<<14 | 0x34<<7 | 0x06, + 22963 - 19968: jis0212<<14 | 0x18<<7 | 0x14, + 22967 - 19968: jis0212<<14 | 0x18<<7 | 0x15, + 22969 - 19968: jis0208<<14 | 0x2A<<7 | 0x44, + 22970 - 19968: jis0208<<14 | 0x58<<7 | 0x48, + 22971 - 19968: jis0208<<14 | 0x19<<7 | 0x29, + 22972 - 19968: jis0212<<14 | 0x18<<7 | 0x17, + 22974 - 19968: jis0208<<14 | 0x1D<<7 | 0x09, + 22977 - 19968: jis0212<<14 | 0x18<<7 | 0x18, + 22979 - 19968: jis0212<<14 | 0x18<<7 | 0x19, + 22980 - 19968: jis0212<<14 | 0x18<<7 | 0x1A, + 22982 - 19968: jis0208<<14 | 0x34<<7 | 0x07, + 22984 - 19968: jis0212<<14 | 0x18<<7 | 0x1B, + 22985 - 19968: jis0208<<14 | 0x1A<<7 | 0x2F, + 22986 - 19968: jis0212<<14 | 0x18<<7 | 0x1C, + 22987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2E, + 22989 - 19968: jis0212<<14 | 0x18<<7 | 0x1D, + 22992 - 19968: jis0208<<14 | 0x0F<<7 | 0x18, + 22993 - 19968: jis0208<<14 | 0x17<<7 | 0x27, + 22994 - 19968: jis0212<<14 | 0x18<<7 | 0x1E, + 22995 - 19968: jis0208<<14 | 0x1F<<7 | 0x0A, + 22996 - 19968: jis0208<<14 | 0x0F<<7 | 0x30, + 23001 - 19968: jis0208<<14 | 0x34<<7 | 0x0B, + 23002 - 19968: jis0208<<14 | 0x34<<7 | 0x0C, + 23004 - 19968: jis0208<<14 | 0x34<<7 | 0x09, + 23005 - 19968: jis0212<<14 | 0x18<<7 | 0x1F, + 23006 - 19968: jis0212<<14 | 0x18<<7 | 0x20, + 23007 - 19968: jis0212<<14 | 0x18<<7 | 0x21, + 23011 - 19968: jis0212<<14 | 0x18<<7 | 0x22, + 23012 - 19968: jis0212<<14 | 0x18<<7 | 0x23, + 23013 - 19968: jis0208<<14 | 0x10<<7 | 0x17, + 23014 - 19968: jis0208<<14 | 0x13<<7 | 0x0E, + 23015 - 19968: jis0212<<14 | 0x18<<7 | 0x24, + 23016 - 19968: jis0208<<14 | 0x34<<7 | 0x08, + 23018 - 19968: jis0208<<14 | 0x2B<<7 | 0x24, + 23019 - 19968: jis0208<<14 | 0x28<<7 | 0x10, + 23022 - 19968: jis0212<<14 | 0x18<<7 | 0x25, + 23023 - 19968: jis0212<<14 | 0x18<<7 | 0x26, + 23025 - 19968: jis0212<<14 | 0x18<<7 | 0x27, + 23026 - 19968: jis0212<<14 | 0x18<<7 | 0x28, + 23028 - 19968: jis0212<<14 | 0x18<<7 | 0x29, + 23030 - 19968: jis0208<<14 | 0x0F<<7 | 0x07, + 23031 - 19968: jis0212<<14 | 0x18<<7 | 0x2A, + 23035 - 19968: jis0208<<14 | 0x0F<<7 | 0x58, + 23039 - 19968: jis0208<<14 | 0x1A<<7 | 0x30, + 23040 - 19968: jis0212<<14 | 0x18<<7 | 0x2B, + 23041 - 19968: jis0208<<14 | 0x0F<<7 | 0x31, + 23043 - 19968: jis0208<<14 | 0x0F<<7 | 0x02, + 23044 - 19968: jis0212<<14 | 0x18<<7 | 0x2C, + 23049 - 19968: jis0208<<14 | 0x34<<7 | 0x11, + 23052 - 19968: jis0212<<14 | 0x18<<7 | 0x2D, + 23053 - 19968: jis0212<<14 | 0x18<<7 | 0x2E, + 23054 - 19968: jis0212<<14 | 0x18<<7 | 0x2F, + 23057 - 19968: jis0208<<14 | 0x34<<7 | 0x0F, + 23058 - 19968: jis0212<<14 | 0x18<<7 | 0x30, + 23059 - 19968: jis0212<<14 | 0x18<<7 | 0x31, + 23064 - 19968: jis0208<<14 | 0x2B<<7 | 0x1B, + 23066 - 19968: jis0208<<14 | 0x34<<7 | 0x12, + 23068 - 19968: jis0208<<14 | 0x34<<7 | 0x10, + 23070 - 19968: jis0212<<14 | 0x18<<7 | 0x32, + 23071 - 19968: jis0208<<14 | 0x34<<7 | 0x0E, + 23072 - 19968: jis0208<<14 | 0x1E<<7 | 0x10, + 23075 - 19968: jis0212<<14 | 0x18<<7 | 0x33, + 23076 - 19968: jis0212<<14 | 0x18<<7 | 0x34, + 23077 - 19968: jis0208<<14 | 0x34<<7 | 0x0D, + 23079 - 19968: jis0212<<14 | 0x18<<7 | 0x35, + 23080 - 19968: jis0212<<14 | 0x18<<7 | 0x36, + 23081 - 19968: jis0208<<14 | 0x29<<7 | 0x39, + 23082 - 19968: jis0212<<14 | 0x18<<7 | 0x37, + 23085 - 19968: jis0212<<14 | 0x18<<7 | 0x38, + 23087 - 19968: jis0208<<14 | 0x17<<7 | 0x43, + 23088 - 19968: jis0212<<14 | 0x18<<7 | 0x39, + 23093 - 19968: jis0208<<14 | 0x34<<7 | 0x16, + 23094 - 19968: jis0208<<14 | 0x34<<7 | 0x17, + 23100 - 19968: jis0208<<14 | 0x1D<<7 | 0x0A, + 23104 - 19968: jis0208<<14 | 0x34<<7 | 0x13, + 23105 - 19968: jis0208<<14 | 0x2E<<7 | 0x0B, + 23108 - 19968: jis0212<<14 | 0x18<<7 | 0x3A, + 23109 - 19968: jis0212<<14 | 0x18<<7 | 0x3B, + 23110 - 19968: jis0208<<14 | 0x26<<7 | 0x2B, + 23111 - 19968: jis0212<<14 | 0x18<<7 | 0x3C, + 23112 - 19968: jis0212<<14 | 0x18<<7 | 0x3D, + 23113 - 19968: jis0208<<14 | 0x34<<7 | 0x15, + 23116 - 19968: jis0212<<14 | 0x18<<7 | 0x3E, + 23120 - 19968: jis0212<<14 | 0x18<<7 | 0x3F, + 23125 - 19968: jis0212<<14 | 0x18<<7 | 0x40, + 23130 - 19968: jis0208<<14 | 0x19<<7 | 0x06, + 23134 - 19968: jis0212<<14 | 0x18<<7 | 0x41, + 23138 - 19968: jis0208<<14 | 0x34<<7 | 0x18, + 23139 - 19968: jis0212<<14 | 0x18<<7 | 0x42, + 23141 - 19968: jis0212<<14 | 0x18<<7 | 0x43, + 23142 - 19968: jis0208<<14 | 0x28<<7 | 0x37, + 23143 - 19968: jis0212<<14 | 0x18<<7 | 0x44, + 23146 - 19968: jis0208<<14 | 0x34<<7 | 0x19, + 23148 - 19968: jis0208<<14 | 0x34<<7 | 0x14, + 23149 - 19968: jis0212<<14 | 0x18<<7 | 0x45, + 23159 - 19968: jis0212<<14 | 0x18<<7 | 0x46, + 23162 - 19968: jis0212<<14 | 0x18<<7 | 0x47, + 23163 - 19968: jis0212<<14 | 0x18<<7 | 0x48, + 23166 - 19968: jis0212<<14 | 0x18<<7 | 0x49, + 23167 - 19968: jis0208<<14 | 0x2B<<7 | 0x1A, + 23179 - 19968: jis0212<<14 | 0x18<<7 | 0x4A, + 23184 - 19968: jis0212<<14 | 0x18<<7 | 0x4B, + 23186 - 19968: jis0208<<14 | 0x26<<7 | 0x3D, + 23187 - 19968: jis0212<<14 | 0x18<<7 | 0x4C, + 23190 - 19968: jis0212<<14 | 0x18<<7 | 0x4D, + 23193 - 19968: jis0212<<14 | 0x18<<7 | 0x4E, + 23194 - 19968: jis0208<<14 | 0x34<<7 | 0x1A, + 23195 - 19968: jis0208<<14 | 0x28<<7 | 0x11, + 23196 - 19968: jis0212<<14 | 0x18<<7 | 0x4F, + 23198 - 19968: jis0212<<14 | 0x18<<7 | 0x50, + 23199 - 19968: jis0212<<14 | 0x18<<7 | 0x51, + 23200 - 19968: jis0212<<14 | 0x18<<7 | 0x52, + 23202 - 19968: jis0212<<14 | 0x18<<7 | 0x53, + 23207 - 19968: jis0212<<14 | 0x18<<7 | 0x54, + 23212 - 19968: jis0212<<14 | 0x18<<7 | 0x55, + 23217 - 19968: jis0212<<14 | 0x18<<7 | 0x56, + 23218 - 19968: jis0212<<14 | 0x18<<7 | 0x57, + 23219 - 19968: jis0212<<14 | 0x18<<7 | 0x58, + 23221 - 19968: jis0212<<14 | 0x18<<7 | 0x59, + 23224 - 19968: jis0212<<14 | 0x18<<7 | 0x5A, + 23226 - 19968: jis0212<<14 | 0x18<<7 | 0x5B, + 23227 - 19968: jis0212<<14 | 0x18<<7 | 0x5C, + 23228 - 19968: jis0208<<14 | 0x34<<7 | 0x1B, + 23229 - 19968: jis0208<<14 | 0x34<<7 | 0x1F, + 23230 - 19968: jis0208<<14 | 0x34<<7 | 0x1C, + 23231 - 19968: jis0212<<14 | 0x18<<7 | 0x5D, + 23233 - 19968: jis0208<<14 | 0x11<<7 | 0x26, + 23234 - 19968: jis0208<<14 | 0x34<<7 | 0x1E, + 23236 - 19968: jis0212<<14 | 0x19<<7 | 0x00, + 23238 - 19968: jis0212<<14 | 0x19<<7 | 0x01, + 23240 - 19968: jis0212<<14 | 0x19<<7 | 0x02, + 23241 - 19968: jis0208<<14 | 0x1B<<7 | 0x1A, + 23243 - 19968: jis0208<<14 | 0x34<<7 | 0x1D, + 23244 - 19968: jis0208<<14 | 0x16<<7 | 0x58, + 23247 - 19968: jis0212<<14 | 0x19<<7 | 0x03, + 23248 - 19968: jis0208<<14 | 0x34<<7 | 0x2B, + 23254 - 19968: jis0208<<14 | 0x34<<7 | 0x24, + 23255 - 19968: jis0208<<14 | 0x34<<7 | 0x21, + 23258 - 19968: jis0212<<14 | 0x19<<7 | 0x04, + 23260 - 19968: jis0212<<14 | 0x19<<7 | 0x05, + 23264 - 19968: jis0212<<14 | 0x19<<7 | 0x06, + 23265 - 19968: jis0208<<14 | 0x22<<7 | 0x43, + 23267 - 19968: jis0208<<14 | 0x34<<7 | 0x20, + 23269 - 19968: jis0212<<14 | 0x19<<7 | 0x07, + 23270 - 19968: jis0208<<14 | 0x34<<7 | 0x22, + 23273 - 19968: jis0208<<14 | 0x34<<7 | 0x23, + 23274 - 19968: jis0212<<14 | 0x19<<7 | 0x08, + 23278 - 19968: jis0212<<14 | 0x19<<7 | 0x09, + 23285 - 19968: jis0212<<14 | 0x19<<7 | 0x0A, + 23286 - 19968: jis0212<<14 | 0x19<<7 | 0x0B, + 23290 - 19968: jis0208<<14 | 0x34<<7 | 0x25, + 23291 - 19968: jis0208<<14 | 0x34<<7 | 0x26, + 23293 - 19968: jis0212<<14 | 0x19<<7 | 0x0C, + 23296 - 19968: jis0212<<14 | 0x19<<7 | 0x0D, + 23297 - 19968: jis0212<<14 | 0x19<<7 | 0x0E, + 23304 - 19968: jis0212<<14 | 0x19<<7 | 0x0F, + 23305 - 19968: jis0208<<14 | 0x13<<7 | 0x51, + 23307 - 19968: jis0208<<14 | 0x34<<7 | 0x28, + 23308 - 19968: jis0208<<14 | 0x34<<7 | 0x27, + 23318 - 19968: jis0208<<14 | 0x34<<7 | 0x29, + 23319 - 19968: jis0212<<14 | 0x19<<7 | 0x10, + 23321 - 19968: jis0212<<14 | 0x19<<7 | 0x12, + 23323 - 19968: jis0212<<14 | 0x19<<7 | 0x13, + 23325 - 19968: jis0212<<14 | 0x19<<7 | 0x14, + 23329 - 19968: jis0212<<14 | 0x19<<7 | 0x15, + 23330 - 19968: jis0208<<14 | 0x1D<<7 | 0x4D, + 23333 - 19968: jis0212<<14 | 0x19<<7 | 0x16, + 23338 - 19968: jis0208<<14 | 0x34<<7 | 0x2C, + 23340 - 19968: jis0208<<14 | 0x23<<7 | 0x3B, + 23341 - 19968: jis0212<<14 | 0x19<<7 | 0x17, + 23344 - 19968: jis0208<<14 | 0x10<<7 | 0x24, + 23346 - 19968: jis0208<<14 | 0x34<<7 | 0x2A, + 23348 - 19968: jis0212<<14 | 0x19<<7 | 0x11, + 23350 - 19968: jis0208<<14 | 0x34<<7 | 0x2D, + 23352 - 19968: jis0212<<14 | 0x19<<7 | 0x18, + 23358 - 19968: jis0208<<14 | 0x34<<7 | 0x2E, + 23360 - 19968: jis0208<<14 | 0x34<<7 | 0x31, + 23361 - 19968: jis0212<<14 | 0x19<<7 | 0x19, + 23363 - 19968: jis0208<<14 | 0x34<<7 | 0x2F, + 23365 - 19968: jis0208<<14 | 0x34<<7 | 0x30, + 23371 - 19968: jis0212<<14 | 0x19<<7 | 0x1A, + 23372 - 19968: jis0212<<14 | 0x19<<7 | 0x1B, + 23376 - 19968: jis0208<<14 | 0x1A<<7 | 0x31, + 23377 - 19968: jis0208<<14 | 0x34<<7 | 0x32, + 23378 - 19968: jis0212<<14 | 0x19<<7 | 0x1C, + 23380 - 19968: jis0208<<14 | 0x18<<7 | 0x05, + 23381 - 19968: jis0208<<14 | 0x34<<7 | 0x33, + 23382 - 19968: jis0208<<14 | 0x58<<7 | 0x49, + 23383 - 19968: jis0208<<14 | 0x1A<<7 | 0x59, + 23384 - 19968: jis0208<<14 | 0x21<<7 | 0x17, + 23386 - 19968: jis0208<<14 | 0x34<<7 | 0x34, + 23387 - 19968: jis0208<<14 | 0x34<<7 | 0x35, + 23388 - 19968: jis0208<<14 | 0x1A<<7 | 0x39, + 23389 - 19968: jis0208<<14 | 0x18<<7 | 0x06, + 23390 - 19968: jis0212<<14 | 0x19<<7 | 0x1E, + 23391 - 19968: jis0208<<14 | 0x2B<<7 | 0x31, + 23395 - 19968: jis0208<<14 | 0x14<<7 | 0x07, + 23396 - 19968: jis0208<<14 | 0x17<<7 | 0x28, + 23397 - 19968: jis0208<<14 | 0x34<<7 | 0x36, + 23398 - 19968: jis0208<<14 | 0x12<<7 | 0x37, + 23400 - 19968: jis0212<<14 | 0x19<<7 | 0x1F, + 23401 - 19968: jis0208<<14 | 0x34<<7 | 0x37, + 23403 - 19968: jis0208<<14 | 0x21<<7 | 0x18, + 23406 - 19968: jis0212<<14 | 0x19<<7 | 0x20, + 23407 - 19968: jis0212<<14 | 0x19<<7 | 0x21, + 23408 - 19968: jis0208<<14 | 0x34<<7 | 0x38, + 23409 - 19968: jis0208<<14 | 0x35<<7 | 0x02, + 23411 - 19968: jis0208<<14 | 0x34<<7 | 0x39, + 23413 - 19968: jis0208<<14 | 0x34<<7 | 0x3A, + 23416 - 19968: jis0208<<14 | 0x34<<7 | 0x3B, + 23418 - 19968: jis0208<<14 | 0x34<<7 | 0x3D, + 23420 - 19968: jis0212<<14 | 0x19<<7 | 0x22, + 23421 - 19968: jis0212<<14 | 0x19<<7 | 0x23, + 23422 - 19968: jis0212<<14 | 0x19<<7 | 0x24, + 23423 - 19968: jis0212<<14 | 0x19<<7 | 0x25, + 23424 - 19968: jis0208<<14 | 0x34<<7 | 0x3E, + 23425 - 19968: jis0212<<14 | 0x19<<7 | 0x26, + 23427 - 19968: jis0208<<14 | 0x34<<7 | 0x3F, + 23428 - 19968: jis0212<<14 | 0x19<<7 | 0x27, + 23429 - 19968: jis0208<<14 | 0x21<<7 | 0x4F, + 23430 - 19968: jis0212<<14 | 0x19<<7 | 0x28, + 23431 - 19968: jis0208<<14 | 0x10<<7 | 0x06, + 23432 - 19968: jis0208<<14 | 0x1B<<7 | 0x48, + 23433 - 19968: jis0208<<14 | 0x0F<<7 | 0x21, + 23434 - 19968: jis0212<<14 | 0x19<<7 | 0x29, + 23435 - 19968: jis0208<<14 | 0x20<<7 | 0x36, + 23436 - 19968: jis0208<<14 | 0x13<<7 | 0x0F, + 23437 - 19968: jis0208<<14 | 0x1B<<7 | 0x14, + 23438 - 19968: jis0212<<14 | 0x19<<7 | 0x2A, + 23439 - 19968: jis0208<<14 | 0x18<<7 | 0x07, + 23440 - 19968: jis0212<<14 | 0x19<<7 | 0x2B, + 23441 - 19968: jis0212<<14 | 0x19<<7 | 0x2C, + 23443 - 19968: jis0212<<14 | 0x19<<7 | 0x2D, + 23444 - 19968: jis0212<<14 | 0x19<<7 | 0x2E, + 23445 - 19968: jis0208<<14 | 0x24<<7 | 0x45, + 23446 - 19968: jis0212<<14 | 0x19<<7 | 0x2F, + 23447 - 19968: jis0208<<14 | 0x1C<<7 | 0x00, + 23448 - 19968: jis0208<<14 | 0x13<<7 | 0x10, + 23449 - 19968: jis0208<<14 | 0x22<<7 | 0x47, + 23450 - 19968: jis0208<<14 | 0x23<<7 | 0x49, + 23451 - 19968: jis0208<<14 | 0x0F<<7 | 0x17, + 23452 - 19968: jis0208<<14 | 0x14<<7 | 0x18, + 23453 - 19968: jis0208<<14 | 0x29<<7 | 0x54, + 23455 - 19968: jis0208<<14 | 0x1B<<7 | 0x21, + 23458 - 19968: jis0208<<14 | 0x14<<7 | 0x31, + 23459 - 19968: jis0208<<14 | 0x1F<<7 | 0x4A, + 23460 - 19968: jis0208<<14 | 0x1B<<7 | 0x1B, + 23461 - 19968: jis0208<<14 | 0x2C<<7 | 0x07, + 23462 - 19968: jis0208<<14 | 0x34<<7 | 0x40, + 23464 - 19968: jis0212<<14 | 0x19<<7 | 0x30, + 23465 - 19968: jis0212<<14 | 0x19<<7 | 0x31, + 23468 - 19968: jis0212<<14 | 0x19<<7 | 0x32, + 23469 - 19968: jis0212<<14 | 0x19<<7 | 0x33, + 23470 - 19968: jis0208<<14 | 0x14<<7 | 0x3B, + 23471 - 19968: jis0212<<14 | 0x19<<7 | 0x34, + 23472 - 19968: jis0208<<14 | 0x19<<7 | 0x2A, + 23473 - 19968: jis0212<<14 | 0x19<<7 | 0x35, + 23474 - 19968: jis0212<<14 | 0x19<<7 | 0x36, + 23475 - 19968: jis0208<<14 | 0x12<<7 | 0x11, + 23476 - 19968: jis0208<<14 | 0x10<<7 | 0x42, + 23477 - 19968: jis0208<<14 | 0x1D<<7 | 0x0B, + 23478 - 19968: jis0208<<14 | 0x11<<7 | 0x27, + 23479 - 19968: jis0212<<14 | 0x19<<7 | 0x37, + 23480 - 19968: jis0208<<14 | 0x34<<7 | 0x41, + 23481 - 19968: jis0208<<14 | 0x2C<<7 | 0x25, + 23482 - 19968: jis0212<<14 | 0x19<<7 | 0x38, + 23484 - 19968: jis0212<<14 | 0x19<<7 | 0x39, + 23487 - 19968: jis0208<<14 | 0x1C<<7 | 0x28, + 23488 - 19968: jis0208<<14 | 0x58<<7 | 0x4A, + 23489 - 19968: jis0212<<14 | 0x19<<7 | 0x3B, + 23490 - 19968: jis0208<<14 | 0x1B<<7 | 0x43, + 23491 - 19968: jis0208<<14 | 0x34<<7 | 0x42, + 23492 - 19968: jis0208<<14 | 0x13<<7 | 0x52, + 23493 - 19968: jis0208<<14 | 0x25<<7 | 0x31, + 23494 - 19968: jis0208<<14 | 0x2B<<7 | 0x08, + 23495 - 19968: jis0208<<14 | 0x34<<7 | 0x43, + 23497 - 19968: jis0208<<14 | 0x34<<7 | 0x44, + 23500 - 19968: jis0208<<14 | 0x28<<7 | 0x38, + 23501 - 19968: jis0212<<14 | 0x19<<7 | 0x3C, + 23503 - 19968: jis0212<<14 | 0x19<<7 | 0x3D, + 23504 - 19968: jis0208<<14 | 0x34<<7 | 0x46, + 23506 - 19968: jis0208<<14 | 0x13<<7 | 0x07, + 23507 - 19968: jis0208<<14 | 0x15<<7 | 0x56, + 23508 - 19968: jis0208<<14 | 0x34<<7 | 0x45, + 23510 - 19968: jis0212<<14 | 0x19<<7 | 0x3E, + 23511 - 19968: jis0212<<14 | 0x19<<7 | 0x3F, + 23512 - 19968: jis0208<<14 | 0x58<<7 | 0x4C, + 23513 - 19968: jis0212<<14 | 0x19<<7 | 0x41, + 23514 - 19968: jis0212<<14 | 0x19<<7 | 0x42, + 23515 - 19968: jis0208<<14 | 0x13<<7 | 0x11, + 23517 - 19968: jis0208<<14 | 0x1E<<7 | 0x11, + 23518 - 19968: jis0208<<14 | 0x34<<7 | 0x4A, + 23519 - 19968: jis0208<<14 | 0x1A<<7 | 0x00, + 23520 - 19968: jis0212<<14 | 0x19<<7 | 0x43, + 23521 - 19968: jis0208<<14 | 0x11<<7 | 0x28, + 23522 - 19968: jis0208<<14 | 0x34<<7 | 0x49, + 23524 - 19968: jis0208<<14 | 0x34<<7 | 0x47, + 23525 - 19968: jis0208<<14 | 0x34<<7 | 0x4B, + 23526 - 19968: jis0208<<14 | 0x34<<7 | 0x48, + 23527 - 19968: jis0208<<14 | 0x26<<7 | 0x0A, + 23528 - 19968: jis0208<<14 | 0x3B<<7 | 0x2C, + 23529 - 19968: jis0208<<14 | 0x1E<<7 | 0x12, + 23531 - 19968: jis0208<<14 | 0x34<<7 | 0x4C, + 23532 - 19968: jis0208<<14 | 0x58<<7 | 0x4D, + 23534 - 19968: jis0208<<14 | 0x2D<<7 | 0x1F, + 23535 - 19968: jis0212<<14 | 0x19<<7 | 0x44, + 23536 - 19968: jis0208<<14 | 0x34<<7 | 0x4D, + 23537 - 19968: jis0212<<14 | 0x19<<7 | 0x45, + 23539 - 19968: jis0208<<14 | 0x34<<7 | 0x4F, + 23540 - 19968: jis0212<<14 | 0x19<<7 | 0x46, + 23541 - 19968: jis0208<<14 | 0x22<<7 | 0x5D, + 23542 - 19968: jis0208<<14 | 0x34<<7 | 0x4E, + 23544 - 19968: jis0208<<14 | 0x1F<<7 | 0x02, + 23546 - 19968: jis0208<<14 | 0x1A<<7 | 0x5A, + 23549 - 19968: jis0212<<14 | 0x19<<7 | 0x47, + 23550 - 19968: jis0208<<14 | 0x21<<7 | 0x2F, + 23551 - 19968: jis0208<<14 | 0x1B<<7 | 0x56, + 23553 - 19968: jis0208<<14 | 0x28<<7 | 0x54, + 23554 - 19968: jis0208<<14 | 0x1F<<7 | 0x4B, + 23556 - 19968: jis0208<<14 | 0x1B<<7 | 0x2C, + 23557 - 19968: jis0208<<14 | 0x34<<7 | 0x50, + 23558 - 19968: jis0208<<14 | 0x1D<<7 | 0x0C, + 23559 - 19968: jis0208<<14 | 0x34<<7 | 0x51, + 23560 - 19968: jis0208<<14 | 0x34<<7 | 0x52, + 23561 - 19968: jis0208<<14 | 0x0F<<7 | 0x32, + 23562 - 19968: jis0208<<14 | 0x21<<7 | 0x19, + 23563 - 19968: jis0208<<14 | 0x1E<<7 | 0x31, + 23564 - 19968: jis0212<<14 | 0x19<<7 | 0x48, + 23565 - 19968: jis0208<<14 | 0x34<<7 | 0x53, + 23566 - 19968: jis0208<<14 | 0x25<<7 | 0x12, + 23567 - 19968: jis0208<<14 | 0x1D<<7 | 0x0D, + 23569 - 19968: jis0208<<14 | 0x1D<<7 | 0x0E, + 23571 - 19968: jis0208<<14 | 0x34<<7 | 0x54, + 23574 - 19968: jis0208<<14 | 0x1F<<7 | 0x4C, + 23575 - 19968: jis0212<<14 | 0x19<<7 | 0x49, + 23578 - 19968: jis0208<<14 | 0x1D<<7 | 0x0F, + 23582 - 19968: jis0208<<14 | 0x58<<7 | 0x4E, + 23583 - 19968: jis0212<<14 | 0x19<<7 | 0x4B, + 23584 - 19968: jis0208<<14 | 0x34<<7 | 0x55, + 23586 - 19968: jis0208<<14 | 0x34<<7 | 0x56, + 23587 - 19968: jis0212<<14 | 0x19<<7 | 0x4C, + 23588 - 19968: jis0208<<14 | 0x2B<<7 | 0x3F, + 23590 - 19968: jis0212<<14 | 0x19<<7 | 0x4D, + 23592 - 19968: jis0208<<14 | 0x34<<7 | 0x57, + 23593 - 19968: jis0212<<14 | 0x19<<7 | 0x4E, + 23595 - 19968: jis0212<<14 | 0x19<<7 | 0x4F, + 23596 - 19968: jis0212<<14 | 0x19<<7 | 0x50, + 23597 - 19968: jis0208<<14 | 0x15<<7 | 0x25, + 23598 - 19968: jis0212<<14 | 0x19<<7 | 0x51, + 23600 - 19968: jis0212<<14 | 0x19<<7 | 0x52, + 23601 - 19968: jis0208<<14 | 0x1C<<7 | 0x01, + 23602 - 19968: jis0212<<14 | 0x19<<7 | 0x53, + 23605 - 19968: jis0212<<14 | 0x19<<7 | 0x54, + 23606 - 19968: jis0212<<14 | 0x19<<7 | 0x55, + 23608 - 19968: jis0208<<14 | 0x34<<7 | 0x58, + 23609 - 19968: jis0208<<14 | 0x34<<7 | 0x59, + 23610 - 19968: jis0208<<14 | 0x1B<<7 | 0x3B, + 23611 - 19968: jis0208<<14 | 0x1E<<7 | 0x0B, + 23612 - 19968: jis0208<<14 | 0x25<<7 | 0x53, + 23613 - 19968: jis0208<<14 | 0x1E<<7 | 0x33, + 23614 - 19968: jis0208<<14 | 0x27<<7 | 0x57, + 23615 - 19968: jis0208<<14 | 0x26<<7 | 0x01, + 23616 - 19968: jis0208<<14 | 0x15<<7 | 0x28, + 23617 - 19968: jis0208<<14 | 0x34<<7 | 0x5A, + 23621 - 19968: jis0208<<14 | 0x14<<7 | 0x4E, + 23622 - 19968: jis0208<<14 | 0x34<<7 | 0x5B, + 23624 - 19968: jis0208<<14 | 0x15<<7 | 0x5D, + 23626 - 19968: jis0208<<14 | 0x25<<7 | 0x2E, + 23627 - 19968: jis0208<<14 | 0x11<<7 | 0x0F, + 23629 - 19968: jis0208<<14 | 0x1A<<7 | 0x32, + 23630 - 19968: jis0208<<14 | 0x34<<7 | 0x5C, + 23631 - 19968: jis0208<<14 | 0x35<<7 | 0x01, + 23632 - 19968: jis0208<<14 | 0x35<<7 | 0x00, + 23633 - 19968: jis0208<<14 | 0x15<<7 | 0x5C, + 23635 - 19968: jis0208<<14 | 0x34<<7 | 0x5D, + 23637 - 19968: jis0208<<14 | 0x24<<7 | 0x17, + 23641 - 19968: jis0212<<14 | 0x19<<7 | 0x56, + 23642 - 19968: jis0212<<14 | 0x19<<7 | 0x57, + 23644 - 19968: jis0212<<14 | 0x19<<7 | 0x58, + 23646 - 19968: jis0208<<14 | 0x21<<7 | 0x0F, + 23648 - 19968: jis0208<<14 | 0x24<<7 | 0x2A, + 23649 - 19968: jis0208<<14 | 0x1B<<7 | 0x27, + 23650 - 19968: jis0212<<14 | 0x19<<7 | 0x59, + 23651 - 19968: jis0212<<14 | 0x19<<7 | 0x5A, + 23652 - 19968: jis0208<<14 | 0x20<<7 | 0x37, + 23653 - 19968: jis0208<<14 | 0x2C<<7 | 0x59, + 23655 - 19968: jis0212<<14 | 0x19<<7 | 0x5B, + 23656 - 19968: jis0212<<14 | 0x19<<7 | 0x5C, + 23657 - 19968: jis0212<<14 | 0x19<<7 | 0x5D, + 23660 - 19968: jis0208<<14 | 0x35<<7 | 0x03, + 23661 - 19968: jis0212<<14 | 0x1A<<7 | 0x00, + 23662 - 19968: jis0208<<14 | 0x35<<7 | 0x04, + 23663 - 19968: jis0208<<14 | 0x25<<7 | 0x35, + 23664 - 19968: jis0212<<14 | 0x1A<<7 | 0x01, + 23665 - 19968: jis0208<<14 | 0x1A<<7 | 0x12, + 23668 - 19968: jis0212<<14 | 0x1A<<7 | 0x02, + 23669 - 19968: jis0212<<14 | 0x1A<<7 | 0x03, + 23670 - 19968: jis0208<<14 | 0x35<<7 | 0x06, + 23673 - 19968: jis0208<<14 | 0x35<<7 | 0x07, + 23674 - 19968: jis0212<<14 | 0x1A<<7 | 0x04, + 23675 - 19968: jis0212<<14 | 0x1A<<7 | 0x05, + 23676 - 19968: jis0212<<14 | 0x1A<<7 | 0x06, + 23677 - 19968: jis0212<<14 | 0x1A<<7 | 0x07, + 23687 - 19968: jis0212<<14 | 0x1A<<7 | 0x08, + 23688 - 19968: jis0212<<14 | 0x1A<<7 | 0x09, + 23690 - 19968: jis0212<<14 | 0x1A<<7 | 0x0A, + 23692 - 19968: jis0208<<14 | 0x35<<7 | 0x08, + 23695 - 19968: jis0212<<14 | 0x1A<<7 | 0x0B, + 23696 - 19968: jis0208<<14 | 0x13<<7 | 0x53, + 23697 - 19968: jis0208<<14 | 0x35<<7 | 0x09, + 23698 - 19968: jis0212<<14 | 0x1A<<7 | 0x0C, + 23700 - 19968: jis0208<<14 | 0x35<<7 | 0x0A, + 23709 - 19968: jis0212<<14 | 0x1A<<7 | 0x0D, + 23711 - 19968: jis0212<<14 | 0x1A<<7 | 0x0E, + 23712 - 19968: jis0212<<14 | 0x1A<<7 | 0x0F, + 23713 - 19968: jis0208<<14 | 0x11<<7 | 0x0B, + 23714 - 19968: jis0212<<14 | 0x1A<<7 | 0x10, + 23715 - 19968: jis0212<<14 | 0x1A<<7 | 0x11, + 23718 - 19968: jis0208<<14 | 0x58<<7 | 0x4F, + 23720 - 19968: jis0208<<14 | 0x20<<7 | 0x1A, + 23721 - 19968: jis0208<<14 | 0x13<<7 | 0x43, + 23722 - 19968: jis0212<<14 | 0x1A<<7 | 0x13, + 23723 - 19968: jis0208<<14 | 0x35<<7 | 0x0C, + 23724 - 19968: jis0208<<14 | 0x2B<<7 | 0x07, + 23729 - 19968: jis0208<<14 | 0x21<<7 | 0x31, + 23730 - 19968: jis0212<<14 | 0x1A<<7 | 0x14, + 23731 - 19968: jis0208<<14 | 0x12<<7 | 0x38, + 23732 - 19968: jis0212<<14 | 0x1A<<7 | 0x15, + 23733 - 19968: jis0212<<14 | 0x1A<<7 | 0x16, + 23734 - 19968: jis0208<<14 | 0x35<<7 | 0x0E, + 23735 - 19968: jis0208<<14 | 0x35<<7 | 0x10, + 23736 - 19968: jis0208<<14 | 0x13<<7 | 0x3E, + 23738 - 19968: jis0208<<14 | 0x58<<7 | 0x50, + 23739 - 19968: jis0208<<14 | 0x35<<7 | 0x0D, + 23740 - 19968: jis0208<<14 | 0x35<<7 | 0x0F, + 23742 - 19968: jis0208<<14 | 0x35<<7 | 0x12, + 23749 - 19968: jis0208<<14 | 0x35<<7 | 0x11, + 23751 - 19968: jis0208<<14 | 0x35<<7 | 0x13, + 23753 - 19968: jis0212<<14 | 0x1A<<7 | 0x18, + 23755 - 19968: jis0212<<14 | 0x1A<<7 | 0x19, + 23762 - 19968: jis0212<<14 | 0x1A<<7 | 0x1A, + 23767 - 19968: jis0212<<14 | 0x1A<<7 | 0x1C, + 23769 - 19968: jis0208<<14 | 0x35<<7 | 0x14, + 23773 - 19968: jis0212<<14 | 0x1A<<7 | 0x1B, + 23776 - 19968: jis0208<<14 | 0x25<<7 | 0x1C, + 23777 - 19968: jis0208<<14 | 0x15<<7 | 0x0D, + 23784 - 19968: jis0208<<14 | 0x11<<7 | 0x44, + 23785 - 19968: jis0208<<14 | 0x35<<7 | 0x15, + 23786 - 19968: jis0208<<14 | 0x35<<7 | 0x1A, + 23789 - 19968: jis0208<<14 | 0x35<<7 | 0x18, + 23790 - 19968: jis0212<<14 | 0x1A<<7 | 0x1D, + 23791 - 19968: jis0208<<14 | 0x29<<7 | 0x56, + 23792 - 19968: jis0208<<14 | 0x29<<7 | 0x55, + 23793 - 19968: jis0212<<14 | 0x1A<<7 | 0x1E, + 23794 - 19968: jis0212<<14 | 0x1A<<7 | 0x1F, + 23796 - 19968: jis0212<<14 | 0x1A<<7 | 0x20, + 23797 - 19968: jis0208<<14 | 0x58<<7 | 0x51, + 23798 - 19968: jis0208<<14 | 0x24<<7 | 0x46, + 23802 - 19968: jis0208<<14 | 0x35<<7 | 0x17, + 23803 - 19968: jis0208<<14 | 0x1C<<7 | 0x33, + 23805 - 19968: jis0208<<14 | 0x35<<7 | 0x16, + 23809 - 19968: jis0212<<14 | 0x1A<<7 | 0x21, + 23814 - 19968: jis0212<<14 | 0x1A<<7 | 0x22, + 23815 - 19968: jis0208<<14 | 0x1E<<7 | 0x51, + 23819 - 19968: jis0208<<14 | 0x35<<7 | 0x1B, + 23821 - 19968: jis0212<<14 | 0x1A<<7 | 0x23, + 23822 - 19968: jis0208<<14 | 0x19<<7 | 0x49, + 23825 - 19968: jis0208<<14 | 0x35<<7 | 0x21, + 23826 - 19968: jis0212<<14 | 0x1A<<7 | 0x24, + 23828 - 19968: jis0208<<14 | 0x35<<7 | 0x22, + 23829 - 19968: jis0208<<14 | 0x35<<7 | 0x1C, + 23830 - 19968: jis0208<<14 | 0x12<<7 | 0x12, + 23831 - 19968: jis0208<<14 | 0x35<<7 | 0x1D, + 23832 - 19968: jis0208<<14 | 0x35<<7 | 0x26, + 23833 - 19968: jis0208<<14 | 0x35<<7 | 0x25, + 23834 - 19968: jis0208<<14 | 0x35<<7 | 0x24, + 23835 - 19968: jis0208<<14 | 0x35<<7 | 0x20, + 23839 - 19968: jis0208<<14 | 0x35<<7 | 0x1F, + 23842 - 19968: jis0208<<14 | 0x35<<7 | 0x23, + 23843 - 19968: jis0212<<14 | 0x1A<<7 | 0x26, + 23844 - 19968: jis0212<<14 | 0x1A<<7 | 0x27, + 23846 - 19968: jis0212<<14 | 0x1A<<7 | 0x28, + 23847 - 19968: jis0208<<14 | 0x58<<7 | 0x52, + 23849 - 19968: jis0208<<14 | 0x29<<7 | 0x57, + 23851 - 19968: jis0212<<14 | 0x1A<<7 | 0x25, + 23857 - 19968: jis0212<<14 | 0x1A<<7 | 0x2A, + 23860 - 19968: jis0212<<14 | 0x1A<<7 | 0x2B, + 23865 - 19968: jis0212<<14 | 0x1A<<7 | 0x2C, + 23869 - 19968: jis0212<<14 | 0x1A<<7 | 0x2D, + 23871 - 19968: jis0212<<14 | 0x1A<<7 | 0x2E, + 23874 - 19968: jis0208<<14 | 0x58<<7 | 0x55, + 23875 - 19968: jis0212<<14 | 0x1A<<7 | 0x30, + 23878 - 19968: jis0212<<14 | 0x1A<<7 | 0x31, + 23880 - 19968: jis0212<<14 | 0x1A<<7 | 0x32, + 23882 - 19968: jis0212<<14 | 0x1A<<7 | 0x36, + 23883 - 19968: jis0208<<14 | 0x35<<7 | 0x2A, + 23884 - 19968: jis0208<<14 | 0x35<<7 | 0x27, + 23886 - 19968: jis0208<<14 | 0x35<<7 | 0x29, + 23888 - 19968: jis0208<<14 | 0x2C<<7 | 0x51, + 23889 - 19968: jis0212<<14 | 0x1A<<7 | 0x34, + 23890 - 19968: jis0208<<14 | 0x35<<7 | 0x28, + 23891 - 19968: jis0208<<14 | 0x58<<7 | 0x53, + 23893 - 19968: jis0212<<14 | 0x1A<<7 | 0x33, + 23897 - 19968: jis0212<<14 | 0x1A<<7 | 0x35, + 23900 - 19968: jis0208<<14 | 0x35<<7 | 0x1E, + 23903 - 19968: jis0212<<14 | 0x1A<<7 | 0x37, + 23904 - 19968: jis0212<<14 | 0x1A<<7 | 0x38, + 23905 - 19968: jis0212<<14 | 0x1A<<7 | 0x39, + 23906 - 19968: jis0212<<14 | 0x1A<<7 | 0x3A, + 23908 - 19968: jis0212<<14 | 0x1A<<7 | 0x3B, + 23913 - 19968: jis0208<<14 | 0x1E<<7 | 0x52, + 23914 - 19968: jis0212<<14 | 0x1A<<7 | 0x3C, + 23916 - 19968: jis0208<<14 | 0x35<<7 | 0x2B, + 23917 - 19968: jis0208<<14 | 0x58<<7 | 0x56, + 23919 - 19968: jis0208<<14 | 0x19<<7 | 0x16, + 23920 - 19968: jis0212<<14 | 0x1A<<7 | 0x3E, + 23923 - 19968: jis0208<<14 | 0x35<<7 | 0x2C, + 23926 - 19968: jis0208<<14 | 0x35<<7 | 0x2D, + 23929 - 19968: jis0212<<14 | 0x1A<<7 | 0x3F, + 23930 - 19968: jis0212<<14 | 0x1A<<7 | 0x40, + 23934 - 19968: jis0212<<14 | 0x1A<<7 | 0x41, + 23935 - 19968: jis0212<<14 | 0x1A<<7 | 0x42, + 23937 - 19968: jis0212<<14 | 0x1A<<7 | 0x43, + 23938 - 19968: jis0208<<14 | 0x35<<7 | 0x30, + 23939 - 19968: jis0212<<14 | 0x1A<<7 | 0x44, + 23940 - 19968: jis0208<<14 | 0x35<<7 | 0x2F, + 23943 - 19968: jis0208<<14 | 0x35<<7 | 0x2E, + 23944 - 19968: jis0212<<14 | 0x1A<<7 | 0x45, + 23946 - 19968: jis0212<<14 | 0x1A<<7 | 0x46, + 23947 - 19968: jis0208<<14 | 0x24<<7 | 0x47, + 23948 - 19968: jis0208<<14 | 0x35<<7 | 0x19, + 23952 - 19968: jis0208<<14 | 0x35<<7 | 0x36, + 23954 - 19968: jis0212<<14 | 0x1A<<7 | 0x47, + 23955 - 19968: jis0212<<14 | 0x1A<<7 | 0x48, + 23956 - 19968: jis0212<<14 | 0x1A<<7 | 0x49, + 23957 - 19968: jis0212<<14 | 0x1A<<7 | 0x4A, + 23961 - 19968: jis0212<<14 | 0x1A<<7 | 0x4B, + 23963 - 19968: jis0212<<14 | 0x1A<<7 | 0x4C, + 23965 - 19968: jis0208<<14 | 0x35<<7 | 0x32, + 23967 - 19968: jis0212<<14 | 0x1A<<7 | 0x4D, + 23968 - 19968: jis0212<<14 | 0x1A<<7 | 0x4E, + 23970 - 19968: jis0208<<14 | 0x35<<7 | 0x31, + 23975 - 19968: jis0212<<14 | 0x1A<<7 | 0x4F, + 23979 - 19968: jis0212<<14 | 0x1A<<7 | 0x50, + 23980 - 19968: jis0208<<14 | 0x35<<7 | 0x33, + 23982 - 19968: jis0208<<14 | 0x35<<7 | 0x34, + 23984 - 19968: jis0212<<14 | 0x1A<<7 | 0x51, + 23986 - 19968: jis0212<<14 | 0x45<<7 | 0x53, + 23988 - 19968: jis0212<<14 | 0x1A<<7 | 0x52, + 23991 - 19968: jis0208<<14 | 0x35<<7 | 0x37, + 23992 - 19968: jis0208<<14 | 0x58<<7 | 0x57, + 23993 - 19968: jis0208<<14 | 0x58<<7 | 0x58, + 23994 - 19968: jis0208<<14 | 0x2D<<7 | 0x45, + 23996 - 19968: jis0208<<14 | 0x35<<7 | 0x38, + 23997 - 19968: jis0208<<14 | 0x35<<7 | 0x35, + 24003 - 19968: jis0212<<14 | 0x1A<<7 | 0x55, + 24007 - 19968: jis0212<<14 | 0x1A<<7 | 0x56, + 24009 - 19968: jis0208<<14 | 0x35<<7 | 0x39, + 24011 - 19968: jis0212<<14 | 0x1A<<7 | 0x57, + 24012 - 19968: jis0208<<14 | 0x13<<7 | 0x3F, + 24013 - 19968: jis0208<<14 | 0x35<<7 | 0x3A, + 24014 - 19968: jis0212<<14 | 0x1A<<7 | 0x59, + 24016 - 19968: jis0208<<14 | 0x58<<7 | 0x59, + 24018 - 19968: jis0208<<14 | 0x35<<7 | 0x3C, + 24019 - 19968: jis0208<<14 | 0x35<<7 | 0x3B, + 24022 - 19968: jis0208<<14 | 0x35<<7 | 0x3D, + 24024 - 19968: jis0212<<14 | 0x1A<<7 | 0x5A, + 24025 - 19968: jis0212<<14 | 0x1A<<7 | 0x5B, + 24027 - 19968: jis0208<<14 | 0x35<<7 | 0x3E, + 24029 - 19968: jis0208<<14 | 0x1F<<7 | 0x4D, + 24030 - 19968: jis0208<<14 | 0x1C<<7 | 0x02, + 24032 - 19968: jis0212<<14 | 0x1A<<7 | 0x5C, + 24033 - 19968: jis0208<<14 | 0x1C<<7 | 0x43, + 24035 - 19968: jis0208<<14 | 0x20<<7 | 0x42, + 24036 - 19968: jis0212<<14 | 0x1A<<7 | 0x5D, + 24037 - 19968: jis0208<<14 | 0x18<<7 | 0x08, + 24038 - 19968: jis0208<<14 | 0x19<<7 | 0x17, + 24039 - 19968: jis0208<<14 | 0x18<<7 | 0x09, + 24040 - 19968: jis0208<<14 | 0x14<<7 | 0x4F, + 24041 - 19968: jis0212<<14 | 0x1B<<7 | 0x00, + 24043 - 19968: jis0208<<14 | 0x35<<7 | 0x3F, + 24046 - 19968: jis0208<<14 | 0x19<<7 | 0x18, + 24049 - 19968: jis0208<<14 | 0x17<<7 | 0x29, + 24050 - 19968: jis0208<<14 | 0x35<<7 | 0x40, + 24051 - 19968: jis0208<<14 | 0x2B<<7 | 0x05, + 24052 - 19968: jis0208<<14 | 0x26<<7 | 0x22, + 24053 - 19968: jis0208<<14 | 0x35<<7 | 0x41, + 24055 - 19968: jis0208<<14 | 0x18<<7 | 0x0A, + 24056 - 19968: jis0212<<14 | 0x1B<<7 | 0x01, + 24057 - 19968: jis0212<<14 | 0x1B<<7 | 0x02, + 24059 - 19968: jis0208<<14 | 0x13<<7 | 0x0B, + 24061 - 19968: jis0208<<14 | 0x22<<7 | 0x06, + 24062 - 19968: jis0208<<14 | 0x15<<7 | 0x31, + 24064 - 19968: jis0212<<14 | 0x1B<<7 | 0x03, + 24066 - 19968: jis0208<<14 | 0x1A<<7 | 0x33, + 24067 - 19968: jis0208<<14 | 0x28<<7 | 0x3A, + 24070 - 19968: jis0208<<14 | 0x27<<7 | 0x20, + 24071 - 19968: jis0212<<14 | 0x1B<<7 | 0x04, + 24075 - 19968: jis0208<<14 | 0x35<<7 | 0x42, + 24076 - 19968: jis0208<<14 | 0x13<<7 | 0x54, + 24077 - 19968: jis0212<<14 | 0x1B<<7 | 0x05, + 24081 - 19968: jis0208<<14 | 0x35<<7 | 0x45, + 24082 - 19968: jis0212<<14 | 0x1B<<7 | 0x06, + 24084 - 19968: jis0212<<14 | 0x1B<<7 | 0x07, + 24085 - 19968: jis0212<<14 | 0x1B<<7 | 0x08, + 24086 - 19968: jis0208<<14 | 0x23<<7 | 0x00, + 24088 - 19968: jis0212<<14 | 0x1B<<7 | 0x09, + 24089 - 19968: jis0208<<14 | 0x35<<7 | 0x44, + 24090 - 19968: jis0208<<14 | 0x35<<7 | 0x43, + 24091 - 19968: jis0208<<14 | 0x35<<7 | 0x46, + 24093 - 19968: jis0208<<14 | 0x23<<7 | 0x4A, + 24095 - 19968: jis0212<<14 | 0x1B<<7 | 0x0A, + 24096 - 19968: jis0212<<14 | 0x1B<<7 | 0x0B, + 24101 - 19968: jis0208<<14 | 0x1E<<7 | 0x42, + 24104 - 19968: jis0212<<14 | 0x1B<<7 | 0x0D, + 24107 - 19968: jis0208<<14 | 0x1A<<7 | 0x34, + 24109 - 19968: jis0208<<14 | 0x1F<<7 | 0x29, + 24110 - 19968: jis0212<<14 | 0x1B<<7 | 0x0C, + 24111 - 19968: jis0208<<14 | 0x21<<7 | 0x32, + 24112 - 19968: jis0208<<14 | 0x14<<7 | 0x01, + 24114 - 19968: jis0212<<14 | 0x1B<<7 | 0x0E, + 24115 - 19968: jis0208<<14 | 0x23<<7 | 0x01, + 24117 - 19968: jis0212<<14 | 0x1B<<7 | 0x0F, + 24118 - 19968: jis0208<<14 | 0x35<<7 | 0x47, + 24119 - 19968: jis0208<<14 | 0x35<<7 | 0x48, + 24120 - 19968: jis0208<<14 | 0x1D<<7 | 0x4E, + 24125 - 19968: jis0208<<14 | 0x2A<<7 | 0x18, + 24126 - 19968: jis0212<<14 | 0x1B<<7 | 0x10, + 24128 - 19968: jis0208<<14 | 0x35<<7 | 0x4B, + 24131 - 19968: jis0208<<14 | 0x35<<7 | 0x4A, + 24132 - 19968: jis0208<<14 | 0x35<<7 | 0x49, + 24133 - 19968: jis0208<<14 | 0x28<<7 | 0x5C, + 24135 - 19968: jis0208<<14 | 0x35<<7 | 0x52, + 24137 - 19968: jis0212<<14 | 0x1B<<7 | 0x13, + 24139 - 19968: jis0212<<14 | 0x1B<<7 | 0x11, + 24140 - 19968: jis0208<<14 | 0x2A<<7 | 0x39, + 24142 - 19968: jis0208<<14 | 0x35<<7 | 0x4C, + 24144 - 19968: jis0212<<14 | 0x1B<<7 | 0x12, + 24145 - 19968: jis0212<<14 | 0x1B<<7 | 0x14, + 24148 - 19968: jis0208<<14 | 0x35<<7 | 0x4E, + 24149 - 19968: jis0208<<14 | 0x2A<<7 | 0x4A, + 24150 - 19968: jis0212<<14 | 0x1B<<7 | 0x15, + 24151 - 19968: jis0208<<14 | 0x35<<7 | 0x4D, + 24152 - 19968: jis0212<<14 | 0x1B<<7 | 0x16, + 24155 - 19968: jis0212<<14 | 0x1B<<7 | 0x17, + 24156 - 19968: jis0212<<14 | 0x1B<<7 | 0x18, + 24158 - 19968: jis0212<<14 | 0x1B<<7 | 0x19, + 24159 - 19968: jis0208<<14 | 0x35<<7 | 0x4F, + 24161 - 19968: jis0208<<14 | 0x27<<7 | 0x07, + 24162 - 19968: jis0208<<14 | 0x35<<7 | 0x50, + 24163 - 19968: jis0208<<14 | 0x29<<7 | 0x1D, + 24164 - 19968: jis0208<<14 | 0x35<<7 | 0x51, + 24168 - 19968: jis0212<<14 | 0x1B<<7 | 0x1A, + 24170 - 19968: jis0212<<14 | 0x1B<<7 | 0x1B, + 24171 - 19968: jis0212<<14 | 0x1B<<7 | 0x1C, + 24172 - 19968: jis0212<<14 | 0x1B<<7 | 0x1D, + 24173 - 19968: jis0212<<14 | 0x1B<<7 | 0x1E, + 24174 - 19968: jis0212<<14 | 0x1B<<7 | 0x1F, + 24176 - 19968: jis0212<<14 | 0x1B<<7 | 0x20, + 24178 - 19968: jis0208<<14 | 0x13<<7 | 0x12, + 24179 - 19968: jis0208<<14 | 0x29<<7 | 0x1E, + 24180 - 19968: jis0208<<14 | 0x26<<7 | 0x0E, + 24181 - 19968: jis0208<<14 | 0x35<<7 | 0x53, + 24182 - 19968: jis0208<<14 | 0x35<<7 | 0x54, + 24184 - 19968: jis0208<<14 | 0x18<<7 | 0x0B, + 24185 - 19968: jis0208<<14 | 0x13<<7 | 0x13, + 24186 - 19968: jis0208<<14 | 0x35<<7 | 0x55, + 24187 - 19968: jis0208<<14 | 0x17<<7 | 0x17, + 24188 - 19968: jis0208<<14 | 0x2C<<7 | 0x23, + 24189 - 19968: jis0208<<14 | 0x2C<<7 | 0x08, + 24190 - 19968: jis0208<<14 | 0x13<<7 | 0x55, + 24191 - 19968: jis0208<<14 | 0x35<<7 | 0x57, + 24192 - 19968: jis0212<<14 | 0x1B<<7 | 0x21, + 24193 - 19968: jis0208<<14 | 0x23<<7 | 0x02, + 24195 - 19968: jis0208<<14 | 0x18<<7 | 0x0C, + 24196 - 19968: jis0208<<14 | 0x1D<<7 | 0x10, + 24199 - 19968: jis0208<<14 | 0x27<<7 | 0x3E, + 24202 - 19968: jis0208<<14 | 0x1D<<7 | 0x11, + 24203 - 19968: jis0212<<14 | 0x1B<<7 | 0x22, + 24206 - 19968: jis0212<<14 | 0x1B<<7 | 0x23, + 24207 - 19968: jis0208<<14 | 0x1C<<7 | 0x57, + 24213 - 19968: jis0208<<14 | 0x23<<7 | 0x4B, + 24214 - 19968: jis0208<<14 | 0x29<<7 | 0x58, + 24215 - 19968: jis0208<<14 | 0x24<<7 | 0x18, + 24218 - 19968: jis0208<<14 | 0x18<<7 | 0x0D, + 24220 - 19968: jis0208<<14 | 0x28<<7 | 0x3B, + 24224 - 19968: jis0208<<14 | 0x35<<7 | 0x58, + 24226 - 19968: jis0212<<14 | 0x1B<<7 | 0x24, + 24228 - 19968: jis0212<<14 | 0x1B<<7 | 0x25, + 24229 - 19968: jis0212<<14 | 0x1B<<7 | 0x26, + 24230 - 19968: jis0208<<14 | 0x24<<7 | 0x38, + 24231 - 19968: jis0208<<14 | 0x19<<7 | 0x21, + 24232 - 19968: jis0212<<14 | 0x1B<<7 | 0x27, + 24234 - 19968: jis0212<<14 | 0x1B<<7 | 0x28, + 24235 - 19968: jis0208<<14 | 0x17<<7 | 0x2A, + 24236 - 19968: jis0212<<14 | 0x1B<<7 | 0x29, + 24237 - 19968: jis0208<<14 | 0x23<<7 | 0x4C, + 24241 - 19968: jis0212<<14 | 0x1B<<7 | 0x2A, + 24243 - 19968: jis0212<<14 | 0x1B<<7 | 0x2B, + 24245 - 19968: jis0208<<14 | 0x0F<<7 | 0x22, + 24246 - 19968: jis0208<<14 | 0x1C<<7 | 0x4D, + 24247 - 19968: jis0208<<14 | 0x18<<7 | 0x0E, + 24248 - 19968: jis0208<<14 | 0x2C<<7 | 0x26, + 24253 - 19968: jis0212<<14 | 0x1B<<7 | 0x2C, + 24254 - 19968: jis0212<<14 | 0x1B<<7 | 0x2D, + 24255 - 19968: jis0212<<14 | 0x1B<<7 | 0x2E, + 24257 - 19968: jis0208<<14 | 0x35<<7 | 0x59, + 24258 - 19968: jis0208<<14 | 0x35<<7 | 0x5A, + 24259 - 19968: jis0208<<14 | 0x26<<7 | 0x30, + 24262 - 19968: jis0212<<14 | 0x1B<<7 | 0x2F, + 24264 - 19968: jis0208<<14 | 0x35<<7 | 0x5B, + 24265 - 19968: jis0208<<14 | 0x2D<<7 | 0x56, + 24266 - 19968: jis0208<<14 | 0x2E<<7 | 0x0C, + 24267 - 19968: jis0212<<14 | 0x1B<<7 | 0x31, + 24268 - 19968: jis0212<<14 | 0x1B<<7 | 0x30, + 24270 - 19968: jis0212<<14 | 0x1B<<7 | 0x32, + 24271 - 19968: jis0208<<14 | 0x35<<7 | 0x5D, + 24272 - 19968: jis0208<<14 | 0x35<<7 | 0x5C, + 24273 - 19968: jis0212<<14 | 0x1B<<7 | 0x33, + 24274 - 19968: jis0212<<14 | 0x1B<<7 | 0x34, + 24275 - 19968: jis0208<<14 | 0x12<<7 | 0x26, + 24276 - 19968: jis0212<<14 | 0x1B<<7 | 0x35, + 24277 - 19968: jis0212<<14 | 0x1B<<7 | 0x36, + 24278 - 19968: jis0208<<14 | 0x36<<7 | 0x00, + 24282 - 19968: jis0208<<14 | 0x36<<7 | 0x03, + 24283 - 19968: jis0208<<14 | 0x36<<7 | 0x04, + 24284 - 19968: jis0212<<14 | 0x1B<<7 | 0x37, + 24285 - 19968: jis0208<<14 | 0x36<<7 | 0x02, + 24286 - 19968: jis0212<<14 | 0x1B<<7 | 0x38, + 24287 - 19968: jis0208<<14 | 0x28<<7 | 0x1F, + 24288 - 19968: jis0208<<14 | 0x1D<<7 | 0x12, + 24289 - 19968: jis0208<<14 | 0x36<<7 | 0x06, + 24290 - 19968: jis0208<<14 | 0x36<<7 | 0x05, + 24291 - 19968: jis0208<<14 | 0x36<<7 | 0x01, + 24293 - 19968: jis0212<<14 | 0x1B<<7 | 0x39, + 24296 - 19968: jis0208<<14 | 0x36<<7 | 0x07, + 24297 - 19968: jis0208<<14 | 0x36<<7 | 0x08, + 24299 - 19968: jis0212<<14 | 0x1B<<7 | 0x3A, + 24300 - 19968: jis0208<<14 | 0x36<<7 | 0x09, + 24304 - 19968: jis0208<<14 | 0x36<<7 | 0x0C, + 24305 - 19968: jis0208<<14 | 0x36<<7 | 0x0A, + 24307 - 19968: jis0208<<14 | 0x36<<7 | 0x0B, + 24308 - 19968: jis0208<<14 | 0x36<<7 | 0x0D, + 24310 - 19968: jis0208<<14 | 0x10<<7 | 0x43, + 24311 - 19968: jis0208<<14 | 0x23<<7 | 0x4D, + 24312 - 19968: jis0208<<14 | 0x36<<7 | 0x0E, + 24314 - 19968: jis0208<<14 | 0x16<<7 | 0x59, + 24315 - 19968: jis0208<<14 | 0x11<<7 | 0x55, + 24316 - 19968: jis0208<<14 | 0x26<<7 | 0x15, + 24318 - 19968: jis0208<<14 | 0x36<<7 | 0x0F, + 24319 - 19968: jis0208<<14 | 0x25<<7 | 0x5A, + 24321 - 19968: jis0208<<14 | 0x29<<7 | 0x3A, + 24322 - 19968: jis0212<<14 | 0x1B<<7 | 0x3B, + 24323 - 19968: jis0208<<14 | 0x36<<7 | 0x10, + 24324 - 19968: jis0208<<14 | 0x2E<<7 | 0x0D, + 24326 - 19968: jis0212<<14 | 0x1B<<7 | 0x3C, + 24327 - 19968: jis0212<<14 | 0x1B<<7 | 0x3D, + 24328 - 19968: jis0212<<14 | 0x1B<<7 | 0x3E, + 24329 - 19968: jis0208<<14 | 0x36<<7 | 0x11, + 24330 - 19968: jis0208<<14 | 0x29<<7 | 0x1F, + 24331 - 19968: jis0208<<14 | 0x36<<7 | 0x14, + 24332 - 19968: jis0208<<14 | 0x2F<<7 | 0x00, + 24333 - 19968: jis0208<<14 | 0x2F<<7 | 0x10, + 24334 - 19968: jis0212<<14 | 0x1B<<7 | 0x3F, + 24335 - 19968: jis0208<<14 | 0x1B<<7 | 0x0F, + 24336 - 19968: jis0208<<14 | 0x25<<7 | 0x54, + 24337 - 19968: jis0208<<14 | 0x36<<7 | 0x15, + 24339 - 19968: jis0208<<14 | 0x14<<7 | 0x3C, + 24340 - 19968: jis0208<<14 | 0x23<<7 | 0x03, + 24341 - 19968: jis0208<<14 | 0x0F<<7 | 0x59, + 24342 - 19968: jis0208<<14 | 0x36<<7 | 0x16, + 24343 - 19968: jis0208<<14 | 0x29<<7 | 0x05, + 24344 - 19968: jis0208<<14 | 0x18<<7 | 0x0F, + 24345 - 19968: jis0212<<14 | 0x1B<<7 | 0x40, + 24347 - 19968: jis0208<<14 | 0x22<<7 | 0x2F, + 24348 - 19968: jis0212<<14 | 0x1B<<7 | 0x41, + 24349 - 19968: jis0212<<14 | 0x1B<<7 | 0x42, + 24351 - 19968: jis0208<<14 | 0x23<<7 | 0x4E, + 24353 - 19968: jis0208<<14 | 0x58<<7 | 0x5A, + 24354 - 19968: jis0212<<14 | 0x1B<<7 | 0x44, + 24355 - 19968: jis0212<<14 | 0x1B<<7 | 0x45, + 24356 - 19968: jis0212<<14 | 0x1B<<7 | 0x46, + 24357 - 19968: jis0208<<14 | 0x2B<<7 | 0x4E, + 24358 - 19968: jis0208<<14 | 0x17<<7 | 0x18, + 24359 - 19968: jis0208<<14 | 0x17<<7 | 0x2B, + 24360 - 19968: jis0212<<14 | 0x1B<<7 | 0x47, + 24361 - 19968: jis0208<<14 | 0x36<<7 | 0x17, + 24363 - 19968: jis0212<<14 | 0x1B<<7 | 0x48, + 24364 - 19968: jis0212<<14 | 0x1B<<7 | 0x49, + 24365 - 19968: jis0208<<14 | 0x36<<7 | 0x18, + 24366 - 19968: jis0212<<14 | 0x1B<<7 | 0x4A, + 24367 - 19968: jis0208<<14 | 0x36<<7 | 0x1E, + 24368 - 19968: jis0212<<14 | 0x1B<<7 | 0x4B, + 24369 - 19968: jis0208<<14 | 0x1B<<7 | 0x44, + 24372 - 19968: jis0208<<14 | 0x58<<7 | 0x5B, + 24373 - 19968: jis0208<<14 | 0x23<<7 | 0x04, + 24374 - 19968: jis0212<<14 | 0x1B<<7 | 0x4D, + 24375 - 19968: jis0208<<14 | 0x15<<7 | 0x0E, + 24376 - 19968: jis0208<<14 | 0x36<<7 | 0x19, + 24379 - 19968: jis0212<<14 | 0x1B<<7 | 0x4E, + 24380 - 19968: jis0208<<14 | 0x28<<7 | 0x0A, + 24381 - 19968: jis0212<<14 | 0x1B<<7 | 0x4F, + 24382 - 19968: jis0208<<14 | 0x22<<7 | 0x25, + 24383 - 19968: jis0212<<14 | 0x1B<<7 | 0x50, + 24384 - 19968: jis0212<<14 | 0x1B<<7 | 0x51, + 24385 - 19968: jis0208<<14 | 0x36<<7 | 0x1A, + 24388 - 19968: jis0212<<14 | 0x1B<<7 | 0x52, + 24389 - 19968: jis0208<<14 | 0x58<<7 | 0x0B, + 24391 - 19968: jis0212<<14 | 0x1B<<7 | 0x54, + 24392 - 19968: jis0208<<14 | 0x36<<7 | 0x1B, + 24394 - 19968: jis0208<<14 | 0x15<<7 | 0x0F, + 24396 - 19968: jis0208<<14 | 0x36<<7 | 0x1C, + 24397 - 19968: jis0212<<14 | 0x1B<<7 | 0x55, + 24398 - 19968: jis0208<<14 | 0x36<<7 | 0x1D, + 24400 - 19968: jis0212<<14 | 0x1B<<7 | 0x56, + 24401 - 19968: jis0208<<14 | 0x36<<7 | 0x1F, + 24403 - 19968: jis0208<<14 | 0x24<<7 | 0x55, + 24404 - 19968: jis0212<<14 | 0x1B<<7 | 0x57, + 24406 - 19968: jis0208<<14 | 0x36<<7 | 0x20, + 24407 - 19968: jis0208<<14 | 0x36<<7 | 0x21, + 24408 - 19968: jis0212<<14 | 0x1B<<7 | 0x58, + 24409 - 19968: jis0208<<14 | 0x36<<7 | 0x22, + 24411 - 19968: jis0212<<14 | 0x1B<<7 | 0x59, + 24412 - 19968: jis0208<<14 | 0x36<<7 | 0x13, + 24413 - 19968: jis0208<<14 | 0x36<<7 | 0x12, + 24416 - 19968: jis0212<<14 | 0x1B<<7 | 0x5A, + 24417 - 19968: jis0208<<14 | 0x36<<7 | 0x23, + 24418 - 19968: jis0208<<14 | 0x16<<7 | 0x20, + 24419 - 19968: jis0212<<14 | 0x1B<<7 | 0x5B, + 24420 - 19968: jis0212<<14 | 0x1B<<7 | 0x5C, + 24422 - 19968: jis0208<<14 | 0x28<<7 | 0x06, + 24423 - 19968: jis0208<<14 | 0x58<<7 | 0x5C, + 24425 - 19968: jis0208<<14 | 0x19<<7 | 0x2B, + 24426 - 19968: jis0208<<14 | 0x28<<7 | 0x16, + 24427 - 19968: jis0208<<14 | 0x23<<7 | 0x05, + 24428 - 19968: jis0208<<14 | 0x28<<7 | 0x2A, + 24429 - 19968: jis0208<<14 | 0x36<<7 | 0x24, + 24431 - 19968: jis0212<<14 | 0x1C<<7 | 0x00, + 24432 - 19968: jis0208<<14 | 0x1D<<7 | 0x13, + 24433 - 19968: jis0208<<14 | 0x10<<7 | 0x25, + 24434 - 19968: jis0212<<14 | 0x1C<<7 | 0x01, + 24435 - 19968: jis0208<<14 | 0x36<<7 | 0x25, + 24436 - 19968: jis0212<<14 | 0x1C<<7 | 0x02, + 24437 - 19968: jis0212<<14 | 0x1C<<7 | 0x03, + 24439 - 19968: jis0208<<14 | 0x36<<7 | 0x26, + 24440 - 19968: jis0212<<14 | 0x1C<<7 | 0x04, + 24441 - 19968: jis0208<<14 | 0x2B<<7 | 0x51, + 24442 - 19968: jis0212<<14 | 0x1C<<7 | 0x05, + 24444 - 19968: jis0208<<14 | 0x27<<7 | 0x3F, + 24445 - 19968: jis0212<<14 | 0x1C<<7 | 0x06, + 24446 - 19968: jis0212<<14 | 0x1C<<7 | 0x07, + 24447 - 19968: jis0208<<14 | 0x36<<7 | 0x29, + 24448 - 19968: jis0208<<14 | 0x10<<7 | 0x5C, + 24449 - 19968: jis0208<<14 | 0x1F<<7 | 0x0B, + 24450 - 19968: jis0208<<14 | 0x36<<7 | 0x28, + 24451 - 19968: jis0208<<14 | 0x36<<7 | 0x27, + 24452 - 19968: jis0208<<14 | 0x16<<7 | 0x21, + 24453 - 19968: jis0208<<14 | 0x21<<7 | 0x33, + 24455 - 19968: jis0208<<14 | 0x36<<7 | 0x2D, + 24456 - 19968: jis0208<<14 | 0x36<<7 | 0x2B, + 24457 - 19968: jis0212<<14 | 0x1C<<7 | 0x08, + 24458 - 19968: jis0208<<14 | 0x36<<7 | 0x2A, + 24459 - 19968: jis0208<<14 | 0x2D<<7 | 0x06, + 24460 - 19968: jis0208<<14 | 0x17<<7 | 0x44, + 24461 - 19968: jis0212<<14 | 0x1C<<7 | 0x09, + 24463 - 19968: jis0212<<14 | 0x1C<<7 | 0x0A, + 24464 - 19968: jis0208<<14 | 0x1C<<7 | 0x58, + 24465 - 19968: jis0208<<14 | 0x36<<7 | 0x2C, + 24466 - 19968: jis0208<<14 | 0x24<<7 | 0x2B, + 24467 - 19968: jis0208<<14 | 0x1C<<7 | 0x1D, + 24470 - 19968: jis0212<<14 | 0x1C<<7 | 0x0B, + 24471 - 19968: jis0208<<14 | 0x25<<7 | 0x1F, + 24472 - 19968: jis0208<<14 | 0x36<<7 | 0x30, + 24473 - 19968: jis0208<<14 | 0x36<<7 | 0x2F, + 24476 - 19968: jis0212<<14 | 0x1C<<7 | 0x0C, + 24477 - 19968: jis0212<<14 | 0x1C<<7 | 0x0D, + 24478 - 19968: jis0208<<14 | 0x36<<7 | 0x2E, + 24480 - 19968: jis0208<<14 | 0x36<<7 | 0x31, + 24481 - 19968: jis0208<<14 | 0x17<<7 | 0x45, + 24482 - 19968: jis0212<<14 | 0x1C<<7 | 0x0E, + 24484 - 19968: jis0212<<14 | 0x1C<<7 | 0x11, + 24487 - 19968: jis0212<<14 | 0x1C<<7 | 0x0F, + 24488 - 19968: jis0208<<14 | 0x36<<7 | 0x32, + 24489 - 19968: jis0208<<14 | 0x28<<7 | 0x5B, + 24490 - 19968: jis0208<<14 | 0x1C<<7 | 0x3A, + 24491 - 19968: jis0212<<14 | 0x1C<<7 | 0x10, + 24492 - 19968: jis0212<<14 | 0x1C<<7 | 0x12, + 24493 - 19968: jis0208<<14 | 0x36<<7 | 0x33, + 24494 - 19968: jis0208<<14 | 0x27<<7 | 0x58, + 24495 - 19968: jis0212<<14 | 0x1C<<7 | 0x13, + 24496 - 19968: jis0212<<14 | 0x1C<<7 | 0x14, + 24497 - 19968: jis0212<<14 | 0x1C<<7 | 0x15, + 24499 - 19968: jis0208<<14 | 0x25<<7 | 0x20, + 24500 - 19968: jis0208<<14 | 0x23<<7 | 0x06, + 24503 - 19968: jis0208<<14 | 0x58<<7 | 0x5D, + 24504 - 19968: jis0212<<14 | 0x1C<<7 | 0x16, + 24505 - 19968: jis0208<<14 | 0x24<<7 | 0x0F, + 24508 - 19968: jis0208<<14 | 0x36<<7 | 0x34, + 24509 - 19968: jis0208<<14 | 0x14<<7 | 0x0A, + 24515 - 19968: jis0208<<14 | 0x1E<<7 | 0x13, + 24516 - 19968: jis0212<<14 | 0x1C<<7 | 0x17, + 24517 - 19968: jis0208<<14 | 0x28<<7 | 0x0B, + 24519 - 19968: jis0212<<14 | 0x1C<<7 | 0x18, + 24520 - 19968: jis0212<<14 | 0x1C<<7 | 0x19, + 24521 - 19968: jis0212<<14 | 0x1C<<7 | 0x1A, + 24523 - 19968: jis0212<<14 | 0x1C<<7 | 0x1B, + 24524 - 19968: jis0208<<14 | 0x13<<7 | 0x56, + 24525 - 19968: jis0208<<14 | 0x26<<7 | 0x05, + 24528 - 19968: jis0212<<14 | 0x1C<<7 | 0x1C, + 24529 - 19968: jis0212<<14 | 0x1C<<7 | 0x1D, + 24530 - 19968: jis0212<<14 | 0x1C<<7 | 0x1E, + 24531 - 19968: jis0212<<14 | 0x1C<<7 | 0x1F, + 24532 - 19968: jis0212<<14 | 0x1C<<7 | 0x20, + 24534 - 19968: jis0208<<14 | 0x36<<7 | 0x35, + 24535 - 19968: jis0208<<14 | 0x1A<<7 | 0x35, + 24536 - 19968: jis0208<<14 | 0x2A<<7 | 0x19, + 24537 - 19968: jis0208<<14 | 0x2A<<7 | 0x1A, + 24540 - 19968: jis0208<<14 | 0x10<<7 | 0x5D, + 24541 - 19968: jis0208<<14 | 0x36<<7 | 0x3A, + 24542 - 19968: jis0208<<14 | 0x59<<7 | 0x00, + 24544 - 19968: jis0208<<14 | 0x22<<7 | 0x48, + 24545 - 19968: jis0212<<14 | 0x1C<<7 | 0x22, + 24546 - 19968: jis0212<<14 | 0x1C<<7 | 0x23, + 24548 - 19968: jis0208<<14 | 0x36<<7 | 0x37, + 24552 - 19968: jis0212<<14 | 0x1C<<7 | 0x24, + 24553 - 19968: jis0212<<14 | 0x1C<<7 | 0x25, + 24554 - 19968: jis0212<<14 | 0x1C<<7 | 0x26, + 24555 - 19968: jis0208<<14 | 0x11<<7 | 0x56, + 24556 - 19968: jis0212<<14 | 0x1C<<7 | 0x27, + 24557 - 19968: jis0212<<14 | 0x1C<<7 | 0x28, + 24558 - 19968: jis0212<<14 | 0x1C<<7 | 0x29, + 24559 - 19968: jis0212<<14 | 0x1C<<7 | 0x2A, + 24560 - 19968: jis0208<<14 | 0x37<<7 | 0x0C, + 24561 - 19968: jis0208<<14 | 0x36<<7 | 0x39, + 24562 - 19968: jis0212<<14 | 0x1C<<7 | 0x2B, + 24563 - 19968: jis0212<<14 | 0x1C<<7 | 0x2C, + 24565 - 19968: jis0208<<14 | 0x26<<7 | 0x0F, + 24566 - 19968: jis0212<<14 | 0x1C<<7 | 0x2D, + 24568 - 19968: jis0208<<14 | 0x36<<7 | 0x38, + 24570 - 19968: jis0212<<14 | 0x1C<<7 | 0x2E, + 24571 - 19968: jis0208<<14 | 0x36<<7 | 0x36, + 24572 - 19968: jis0212<<14 | 0x1C<<7 | 0x2F, + 24573 - 19968: jis0208<<14 | 0x18<<7 | 0x59, + 24575 - 19968: jis0208<<14 | 0x36<<7 | 0x3C, + 24583 - 19968: jis0212<<14 | 0x1C<<7 | 0x30, + 24586 - 19968: jis0212<<14 | 0x1C<<7 | 0x31, + 24589 - 19968: jis0212<<14 | 0x1C<<7 | 0x32, + 24590 - 19968: jis0208<<14 | 0x36<<7 | 0x42, + 24591 - 19968: jis0208<<14 | 0x36<<7 | 0x48, + 24592 - 19968: jis0208<<14 | 0x36<<7 | 0x40, + 24594 - 19968: jis0208<<14 | 0x24<<7 | 0x3B, + 24595 - 19968: jis0212<<14 | 0x1C<<7 | 0x33, + 24596 - 19968: jis0212<<14 | 0x1C<<7 | 0x34, + 24597 - 19968: jis0208<<14 | 0x36<<7 | 0x45, + 24598 - 19968: jis0208<<14 | 0x28<<7 | 0x3C, + 24599 - 19968: jis0212<<14 | 0x1C<<7 | 0x35, + 24600 - 19968: jis0212<<14 | 0x1C<<7 | 0x36, + 24601 - 19968: jis0208<<14 | 0x36<<7 | 0x3F, + 24602 - 19968: jis0212<<14 | 0x1C<<7 | 0x37, + 24603 - 19968: jis0208<<14 | 0x36<<7 | 0x44, + 24604 - 19968: jis0208<<14 | 0x2D<<7 | 0x46, + 24605 - 19968: jis0208<<14 | 0x1A<<7 | 0x36, + 24607 - 19968: jis0212<<14 | 0x1C<<7 | 0x38, + 24608 - 19968: jis0208<<14 | 0x21<<7 | 0x34, + 24609 - 19968: jis0208<<14 | 0x36<<7 | 0x3D, + 24612 - 19968: jis0212<<14 | 0x1C<<7 | 0x39, + 24613 - 19968: jis0208<<14 | 0x14<<7 | 0x3D, + 24614 - 19968: jis0208<<14 | 0x36<<7 | 0x47, + 24615 - 19968: jis0208<<14 | 0x1F<<7 | 0x0C, + 24616 - 19968: jis0208<<14 | 0x10<<7 | 0x44, + 24617 - 19968: jis0208<<14 | 0x36<<7 | 0x41, + 24618 - 19968: jis0208<<14 | 0x11<<7 | 0x57, + 24619 - 19968: jis0208<<14 | 0x36<<7 | 0x46, + 24621 - 19968: jis0212<<14 | 0x1C<<7 | 0x3A, + 24623 - 19968: jis0208<<14 | 0x15<<7 | 0x10, + 24625 - 19968: jis0208<<14 | 0x36<<7 | 0x43, + 24627 - 19968: jis0212<<14 | 0x1C<<7 | 0x3B, + 24629 - 19968: jis0212<<14 | 0x1C<<7 | 0x3C, + 24634 - 19968: jis0208<<14 | 0x36<<7 | 0x49, + 24640 - 19968: jis0212<<14 | 0x1C<<7 | 0x3D, + 24641 - 19968: jis0208<<14 | 0x36<<7 | 0x4B, + 24642 - 19968: jis0208<<14 | 0x36<<7 | 0x55, + 24643 - 19968: jis0208<<14 | 0x36<<7 | 0x53, + 24646 - 19968: jis0208<<14 | 0x36<<7 | 0x50, + 24647 - 19968: jis0212<<14 | 0x1C<<7 | 0x3E, + 24648 - 19968: jis0212<<14 | 0x1C<<7 | 0x3F, + 24649 - 19968: jis0212<<14 | 0x1C<<7 | 0x40, + 24650 - 19968: jis0208<<14 | 0x36<<7 | 0x4F, + 24651 - 19968: jis0208<<14 | 0x2D<<7 | 0x57, + 24652 - 19968: jis0212<<14 | 0x1C<<7 | 0x41, + 24653 - 19968: jis0208<<14 | 0x36<<7 | 0x51, + 24656 - 19968: jis0208<<14 | 0x15<<7 | 0x11, + 24657 - 19968: jis0212<<14 | 0x1C<<7 | 0x42, + 24658 - 19968: jis0208<<14 | 0x18<<7 | 0x10, + 24660 - 19968: jis0212<<14 | 0x1C<<7 | 0x43, + 24661 - 19968: jis0208<<14 | 0x1C<<7 | 0x59, + 24662 - 19968: jis0212<<14 | 0x1C<<7 | 0x44, + 24663 - 19968: jis0212<<14 | 0x1C<<7 | 0x45, + 24665 - 19968: jis0208<<14 | 0x36<<7 | 0x58, + 24666 - 19968: jis0208<<14 | 0x36<<7 | 0x4A, + 24669 - 19968: jis0208<<14 | 0x59<<7 | 0x01, + 24671 - 19968: jis0208<<14 | 0x36<<7 | 0x4E, + 24672 - 19968: jis0208<<14 | 0x36<<7 | 0x3E, + 24673 - 19968: jis0212<<14 | 0x1C<<7 | 0x47, + 24674 - 19968: jis0208<<14 | 0x11<<7 | 0x59, + 24675 - 19968: jis0208<<14 | 0x36<<7 | 0x52, + 24676 - 19968: jis0208<<14 | 0x36<<7 | 0x54, + 24677 - 19968: jis0208<<14 | 0x22<<7 | 0x30, + 24679 - 19968: jis0212<<14 | 0x1C<<7 | 0x48, + 24680 - 19968: jis0208<<14 | 0x19<<7 | 0x07, + 24681 - 19968: jis0208<<14 | 0x11<<7 | 0x17, + 24682 - 19968: jis0208<<14 | 0x36<<7 | 0x4C, + 24683 - 19968: jis0208<<14 | 0x36<<7 | 0x57, + 24684 - 19968: jis0208<<14 | 0x36<<7 | 0x56, + 24685 - 19968: jis0208<<14 | 0x15<<7 | 0x12, + 24687 - 19968: jis0208<<14 | 0x21<<7 | 0x08, + 24688 - 19968: jis0208<<14 | 0x12<<7 | 0x45, + 24689 - 19968: jis0212<<14 | 0x1C<<7 | 0x49, + 24693 - 19968: jis0208<<14 | 0x16<<7 | 0x22, + 24695 - 19968: jis0208<<14 | 0x36<<7 | 0x4D, + 24702 - 19968: jis0212<<14 | 0x1C<<7 | 0x4A, + 24703 - 19968: jis0212<<14 | 0x1C<<7 | 0x4B, + 24705 - 19968: jis0208<<14 | 0x36<<7 | 0x59, + 24706 - 19968: jis0212<<14 | 0x1C<<7 | 0x4C, + 24707 - 19968: jis0208<<14 | 0x36<<7 | 0x5C, + 24708 - 19968: jis0208<<14 | 0x37<<7 | 0x00, + 24709 - 19968: jis0208<<14 | 0x59<<7 | 0x02, + 24710 - 19968: jis0212<<14 | 0x1C<<7 | 0x4D, + 24712 - 19968: jis0212<<14 | 0x1C<<7 | 0x4E, + 24713 - 19968: jis0208<<14 | 0x1B<<7 | 0x1C, + 24714 - 19968: jis0208<<14 | 0x59<<7 | 0x03, + 24715 - 19968: jis0208<<14 | 0x37<<7 | 0x06, + 24716 - 19968: jis0208<<14 | 0x23<<7 | 0x4F, + 24717 - 19968: jis0208<<14 | 0x36<<7 | 0x5A, + 24718 - 19968: jis0212<<14 | 0x1C<<7 | 0x50, + 24721 - 19968: jis0212<<14 | 0x1C<<7 | 0x51, + 24722 - 19968: jis0208<<14 | 0x37<<7 | 0x04, + 24723 - 19968: jis0212<<14 | 0x1C<<7 | 0x52, + 24724 - 19968: jis0208<<14 | 0x11<<7 | 0x58, + 24725 - 19968: jis0212<<14 | 0x1C<<7 | 0x53, + 24726 - 19968: jis0208<<14 | 0x37<<7 | 0x02, + 24727 - 19968: jis0208<<14 | 0x37<<7 | 0x03, + 24728 - 19968: jis0212<<14 | 0x1C<<7 | 0x54, + 24730 - 19968: jis0208<<14 | 0x36<<7 | 0x5D, + 24731 - 19968: jis0208<<14 | 0x37<<7 | 0x01, + 24733 - 19968: jis0212<<14 | 0x1C<<7 | 0x55, + 24734 - 19968: jis0212<<14 | 0x1C<<7 | 0x56, + 24735 - 19968: jis0208<<14 | 0x17<<7 | 0x46, + 24736 - 19968: jis0208<<14 | 0x2C<<7 | 0x09, + 24738 - 19968: jis0212<<14 | 0x1C<<7 | 0x57, + 24739 - 19968: jis0208<<14 | 0x13<<7 | 0x14, + 24740 - 19968: jis0212<<14 | 0x1C<<7 | 0x58, + 24741 - 19968: jis0212<<14 | 0x1C<<7 | 0x59, + 24742 - 19968: jis0208<<14 | 0x10<<7 | 0x38, + 24743 - 19968: jis0208<<14 | 0x37<<7 | 0x05, + 24744 - 19968: jis0212<<14 | 0x1C<<7 | 0x5A, + 24745 - 19968: jis0208<<14 | 0x26<<7 | 0x19, + 24746 - 19968: jis0208<<14 | 0x0F<<7 | 0x0C, + 24752 - 19968: jis0212<<14 | 0x1C<<7 | 0x5B, + 24753 - 19968: jis0212<<14 | 0x1C<<7 | 0x5C, + 24754 - 19968: jis0208<<14 | 0x27<<7 | 0x40, + 24755 - 19968: jis0208<<14 | 0x36<<7 | 0x3B, + 24756 - 19968: jis0208<<14 | 0x37<<7 | 0x0B, + 24757 - 19968: jis0208<<14 | 0x37<<7 | 0x0F, + 24758 - 19968: jis0208<<14 | 0x2B<<7 | 0x44, + 24759 - 19968: jis0212<<14 | 0x1C<<7 | 0x5D, + 24760 - 19968: jis0208<<14 | 0x37<<7 | 0x08, + 24763 - 19968: jis0212<<14 | 0x1D<<7 | 0x00, + 24764 - 19968: jis0208<<14 | 0x24<<7 | 0x48, + 24765 - 19968: jis0208<<14 | 0x37<<7 | 0x0D, + 24766 - 19968: jis0212<<14 | 0x1D<<7 | 0x01, + 24770 - 19968: jis0212<<14 | 0x1D<<7 | 0x02, + 24772 - 19968: jis0212<<14 | 0x1D<<7 | 0x03, + 24773 - 19968: jis0208<<14 | 0x1D<<7 | 0x4F, + 24774 - 19968: jis0208<<14 | 0x37<<7 | 0x0E, + 24775 - 19968: jis0208<<14 | 0x25<<7 | 0x36, + 24776 - 19968: jis0212<<14 | 0x1D<<7 | 0x04, + 24777 - 19968: jis0212<<14 | 0x1D<<7 | 0x05, + 24778 - 19968: jis0212<<14 | 0x1D<<7 | 0x06, + 24779 - 19968: jis0212<<14 | 0x1D<<7 | 0x07, + 24782 - 19968: jis0212<<14 | 0x1D<<7 | 0x08, + 24783 - 19968: jis0212<<14 | 0x1D<<7 | 0x09, + 24785 - 19968: jis0208<<14 | 0x2E<<7 | 0x26, + 24787 - 19968: jis0208<<14 | 0x37<<7 | 0x0A, + 24788 - 19968: jis0212<<14 | 0x1D<<7 | 0x0A, + 24789 - 19968: jis0208<<14 | 0x59<<7 | 0x05, + 24792 - 19968: jis0208<<14 | 0x37<<7 | 0x10, + 24793 - 19968: jis0212<<14 | 0x1D<<7 | 0x0C, + 24794 - 19968: jis0208<<14 | 0x18<<7 | 0x5A, + 24795 - 19968: jis0212<<14 | 0x1D<<7 | 0x0D, + 24796 - 19968: jis0208<<14 | 0x1F<<7 | 0x2A, + 24797 - 19968: jis0212<<14 | 0x1D<<7 | 0x0E, + 24798 - 19968: jis0208<<14 | 0x59<<7 | 0x04, + 24799 - 19968: jis0208<<14 | 0x0F<<7 | 0x33, + 24800 - 19968: jis0208<<14 | 0x37<<7 | 0x09, + 24801 - 19968: jis0208<<14 | 0x37<<7 | 0x07, + 24802 - 19968: jis0212<<14 | 0x1D<<7 | 0x10, + 24803 - 19968: jis0208<<14 | 0x20<<7 | 0x39, + 24805 - 19968: jis0212<<14 | 0x1D<<7 | 0x11, + 24807 - 19968: jis0208<<14 | 0x36<<7 | 0x5B, + 24808 - 19968: jis0208<<14 | 0x1A<<7 | 0x13, + 24816 - 19968: jis0208<<14 | 0x21<<7 | 0x25, + 24817 - 19968: jis0208<<14 | 0x37<<7 | 0x1C, + 24818 - 19968: jis0208<<14 | 0x59<<7 | 0x07, + 24819 - 19968: jis0208<<14 | 0x20<<7 | 0x3A, + 24820 - 19968: jis0208<<14 | 0x37<<7 | 0x17, + 24821 - 19968: jis0212<<14 | 0x1D<<7 | 0x13, + 24822 - 19968: jis0208<<14 | 0x37<<7 | 0x14, + 24823 - 19968: jis0208<<14 | 0x37<<7 | 0x15, + 24824 - 19968: jis0212<<14 | 0x1D<<7 | 0x14, + 24825 - 19968: jis0208<<14 | 0x1B<<7 | 0x45, + 24826 - 19968: jis0208<<14 | 0x37<<7 | 0x18, + 24827 - 19968: jis0208<<14 | 0x37<<7 | 0x1B, + 24828 - 19968: jis0212<<14 | 0x1D<<7 | 0x15, + 24829 - 19968: jis0212<<14 | 0x1D<<7 | 0x16, + 24832 - 19968: jis0208<<14 | 0x37<<7 | 0x16, + 24833 - 19968: jis0208<<14 | 0x1C<<7 | 0x04, + 24834 - 19968: jis0212<<14 | 0x1D<<7 | 0x17, + 24835 - 19968: jis0208<<14 | 0x37<<7 | 0x19, + 24838 - 19968: jis0208<<14 | 0x37<<7 | 0x13, + 24839 - 19968: jis0212<<14 | 0x1D<<7 | 0x18, + 24840 - 19968: jis0208<<14 | 0x2B<<7 | 0x5B, + 24841 - 19968: jis0208<<14 | 0x2B<<7 | 0x5A, + 24842 - 19968: jis0212<<14 | 0x1D<<7 | 0x19, + 24844 - 19968: jis0212<<14 | 0x1D<<7 | 0x1A, + 24845 - 19968: jis0208<<14 | 0x37<<7 | 0x1D, + 24846 - 19968: jis0208<<14 | 0x37<<7 | 0x1E, + 24847 - 19968: jis0208<<14 | 0x0F<<7 | 0x34, + 24848 - 19968: jis0212<<14 | 0x1D<<7 | 0x1B, + 24849 - 19968: jis0208<<14 | 0x59<<7 | 0x08, + 24850 - 19968: jis0212<<14 | 0x1D<<7 | 0x1D, + 24851 - 19968: jis0212<<14 | 0x1D<<7 | 0x1E, + 24852 - 19968: jis0212<<14 | 0x1D<<7 | 0x1F, + 24853 - 19968: jis0208<<14 | 0x37<<7 | 0x12, + 24854 - 19968: jis0212<<14 | 0x1D<<7 | 0x20, + 24855 - 19968: jis0212<<14 | 0x1D<<7 | 0x21, + 24857 - 19968: jis0212<<14 | 0x1D<<7 | 0x22, + 24858 - 19968: jis0208<<14 | 0x15<<7 | 0x51, + 24859 - 19968: jis0208<<14 | 0x0F<<7 | 0x05, + 24860 - 19968: jis0212<<14 | 0x1D<<7 | 0x23, + 24862 - 19968: jis0212<<14 | 0x1D<<7 | 0x24, + 24863 - 19968: jis0208<<14 | 0x13<<7 | 0x15, + 24864 - 19968: jis0208<<14 | 0x59<<7 | 0x06, + 24865 - 19968: jis0208<<14 | 0x37<<7 | 0x1A, + 24866 - 19968: jis0212<<14 | 0x1D<<7 | 0x25, + 24871 - 19968: jis0208<<14 | 0x37<<7 | 0x22, + 24872 - 19968: jis0208<<14 | 0x37<<7 | 0x21, + 24874 - 19968: jis0212<<14 | 0x1D<<7 | 0x26, + 24875 - 19968: jis0212<<14 | 0x1D<<7 | 0x27, + 24876 - 19968: jis0208<<14 | 0x37<<7 | 0x26, + 24880 - 19968: jis0208<<14 | 0x59<<7 | 0x0A, + 24881 - 19968: jis0212<<14 | 0x1D<<7 | 0x29, + 24884 - 19968: jis0208<<14 | 0x37<<7 | 0x27, + 24885 - 19968: jis0212<<14 | 0x1D<<7 | 0x2A, + 24886 - 19968: jis0212<<14 | 0x1D<<7 | 0x2B, + 24887 - 19968: jis0208<<14 | 0x59<<7 | 0x09, + 24889 - 19968: jis0212<<14 | 0x1D<<7 | 0x2D, + 24892 - 19968: jis0208<<14 | 0x37<<7 | 0x25, + 24893 - 19968: jis0208<<14 | 0x37<<7 | 0x28, + 24894 - 19968: jis0208<<14 | 0x37<<7 | 0x20, + 24895 - 19968: jis0208<<14 | 0x37<<7 | 0x24, + 24897 - 19968: jis0212<<14 | 0x1D<<7 | 0x2E, + 24898 - 19968: jis0208<<14 | 0x37<<7 | 0x29, + 24900 - 19968: jis0208<<14 | 0x37<<7 | 0x2A, + 24901 - 19968: jis0212<<14 | 0x1D<<7 | 0x2F, + 24902 - 19968: jis0212<<14 | 0x1D<<7 | 0x30, + 24903 - 19968: jis0208<<14 | 0x37<<7 | 0x1F, + 24904 - 19968: jis0208<<14 | 0x1A<<7 | 0x5B, + 24905 - 19968: jis0212<<14 | 0x1D<<7 | 0x31, + 24906 - 19968: jis0208<<14 | 0x37<<7 | 0x23, + 24907 - 19968: jis0208<<14 | 0x21<<7 | 0x35, + 24908 - 19968: jis0208<<14 | 0x18<<7 | 0x11, + 24909 - 19968: jis0208<<14 | 0x37<<7 | 0x11, + 24910 - 19968: jis0208<<14 | 0x1E<<7 | 0x14, + 24915 - 19968: jis0208<<14 | 0x37<<7 | 0x37, + 24917 - 19968: jis0208<<14 | 0x29<<7 | 0x48, + 24920 - 19968: jis0208<<14 | 0x37<<7 | 0x2D, + 24921 - 19968: jis0208<<14 | 0x37<<7 | 0x2E, + 24922 - 19968: jis0208<<14 | 0x37<<7 | 0x2F, + 24925 - 19968: jis0208<<14 | 0x37<<7 | 0x36, + 24926 - 19968: jis0212<<14 | 0x1D<<7 | 0x32, + 24927 - 19968: jis0208<<14 | 0x37<<7 | 0x35, + 24928 - 19968: jis0212<<14 | 0x1D<<7 | 0x33, + 24930 - 19968: jis0208<<14 | 0x2A<<7 | 0x5C, + 24931 - 19968: jis0208<<14 | 0x13<<7 | 0x16, + 24933 - 19968: jis0208<<14 | 0x37<<7 | 0x33, + 24935 - 19968: jis0208<<14 | 0x16<<7 | 0x24, + 24936 - 19968: jis0208<<14 | 0x12<<7 | 0x13, + 24939 - 19968: jis0208<<14 | 0x37<<7 | 0x30, + 24940 - 19968: jis0212<<14 | 0x1D<<7 | 0x34, + 24942 - 19968: jis0208<<14 | 0x2D<<7 | 0x17, + 24943 - 19968: jis0208<<14 | 0x37<<7 | 0x32, + 24944 - 19968: jis0208<<14 | 0x0F<<7 | 0x35, + 24945 - 19968: jis0208<<14 | 0x37<<7 | 0x34, + 24946 - 19968: jis0212<<14 | 0x1D<<7 | 0x35, + 24947 - 19968: jis0208<<14 | 0x37<<7 | 0x2B, + 24948 - 19968: jis0208<<14 | 0x37<<7 | 0x31, + 24949 - 19968: jis0208<<14 | 0x37<<7 | 0x38, + 24950 - 19968: jis0208<<14 | 0x16<<7 | 0x23, + 24951 - 19968: jis0208<<14 | 0x37<<7 | 0x2C, + 24952 - 19968: jis0212<<14 | 0x1D<<7 | 0x36, + 24955 - 19968: jis0212<<14 | 0x1D<<7 | 0x37, + 24956 - 19968: jis0212<<14 | 0x1D<<7 | 0x38, + 24958 - 19968: jis0208<<14 | 0x2C<<7 | 0x3C, + 24959 - 19968: jis0212<<14 | 0x1D<<7 | 0x39, + 24960 - 19968: jis0212<<14 | 0x1D<<7 | 0x3A, + 24961 - 19968: jis0212<<14 | 0x1D<<7 | 0x3B, + 24962 - 19968: jis0208<<14 | 0x2C<<7 | 0x0A, + 24963 - 19968: jis0212<<14 | 0x1D<<7 | 0x3C, + 24964 - 19968: jis0212<<14 | 0x1D<<7 | 0x3D, + 24967 - 19968: jis0208<<14 | 0x37<<7 | 0x3B, + 24970 - 19968: jis0208<<14 | 0x37<<7 | 0x3F, + 24971 - 19968: jis0212<<14 | 0x1D<<7 | 0x3E, + 24973 - 19968: jis0212<<14 | 0x1D<<7 | 0x3F, + 24974 - 19968: jis0208<<14 | 0x20<<7 | 0x5D, + 24976 - 19968: jis0208<<14 | 0x2D<<7 | 0x58, + 24977 - 19968: jis0208<<14 | 0x37<<7 | 0x40, + 24978 - 19968: jis0212<<14 | 0x1D<<7 | 0x40, + 24979 - 19968: jis0212<<14 | 0x1D<<7 | 0x41, + 24980 - 19968: jis0208<<14 | 0x37<<7 | 0x3D, + 24982 - 19968: jis0208<<14 | 0x37<<7 | 0x3A, + 24983 - 19968: jis0212<<14 | 0x1D<<7 | 0x42, + 24984 - 19968: jis0208<<14 | 0x59<<7 | 0x0B, + 24985 - 19968: jis0208<<14 | 0x37<<7 | 0x39, + 24986 - 19968: jis0208<<14 | 0x37<<7 | 0x3E, + 24988 - 19968: jis0212<<14 | 0x1D<<7 | 0x44, + 24989 - 19968: jis0212<<14 | 0x1D<<7 | 0x45, + 24991 - 19968: jis0212<<14 | 0x1D<<7 | 0x46, + 24992 - 19968: jis0212<<14 | 0x1D<<7 | 0x47, + 24996 - 19968: jis0208<<14 | 0x29<<7 | 0x0F, + 24997 - 19968: jis0212<<14 | 0x1D<<7 | 0x48, + 24999 - 19968: jis0208<<14 | 0x25<<7 | 0x13, + 25000 - 19968: jis0212<<14 | 0x1D<<7 | 0x49, + 25001 - 19968: jis0208<<14 | 0x16<<7 | 0x25, + 25002 - 19968: jis0212<<14 | 0x1D<<7 | 0x4A, + 25003 - 19968: jis0208<<14 | 0x37<<7 | 0x41, + 25004 - 19968: jis0208<<14 | 0x37<<7 | 0x3C, + 25005 - 19968: jis0212<<14 | 0x1D<<7 | 0x4B, + 25006 - 19968: jis0208<<14 | 0x37<<7 | 0x42, + 25010 - 19968: jis0208<<14 | 0x16<<7 | 0x5A, + 25014 - 19968: jis0208<<14 | 0x11<<7 | 0x10, + 25016 - 19968: jis0212<<14 | 0x1D<<7 | 0x4C, + 25017 - 19968: jis0212<<14 | 0x1D<<7 | 0x4D, + 25018 - 19968: jis0208<<14 | 0x37<<7 | 0x4A, + 25020 - 19968: jis0212<<14 | 0x1D<<7 | 0x4E, + 25022 - 19968: jis0208<<14 | 0x13<<7 | 0x17, + 25024 - 19968: jis0212<<14 | 0x1D<<7 | 0x4F, + 25025 - 19968: jis0212<<14 | 0x1D<<7 | 0x50, + 25026 - 19968: jis0212<<14 | 0x1D<<7 | 0x51, + 25027 - 19968: jis0208<<14 | 0x37<<7 | 0x48, + 25030 - 19968: jis0208<<14 | 0x37<<7 | 0x49, + 25031 - 19968: jis0208<<14 | 0x19<<7 | 0x08, + 25032 - 19968: jis0208<<14 | 0x37<<7 | 0x47, + 25033 - 19968: jis0208<<14 | 0x37<<7 | 0x45, + 25034 - 19968: jis0208<<14 | 0x37<<7 | 0x44, + 25035 - 19968: jis0208<<14 | 0x37<<7 | 0x4B, + 25036 - 19968: jis0208<<14 | 0x37<<7 | 0x43, + 25037 - 19968: jis0208<<14 | 0x37<<7 | 0x4D, + 25038 - 19968: jis0212<<14 | 0x1D<<7 | 0x52, + 25039 - 19968: jis0212<<14 | 0x1D<<7 | 0x53, + 25040 - 19968: jis0208<<14 | 0x11<<7 | 0x5A, + 25045 - 19968: jis0212<<14 | 0x1D<<7 | 0x54, + 25052 - 19968: jis0212<<14 | 0x1D<<7 | 0x55, + 25053 - 19968: jis0212<<14 | 0x1D<<7 | 0x56, + 25054 - 19968: jis0212<<14 | 0x1D<<7 | 0x57, + 25055 - 19968: jis0212<<14 | 0x1D<<7 | 0x58, + 25057 - 19968: jis0212<<14 | 0x1D<<7 | 0x59, + 25058 - 19968: jis0212<<14 | 0x1D<<7 | 0x5A, + 25059 - 19968: jis0208<<14 | 0x37<<7 | 0x4F, + 25061 - 19968: jis0212<<14 | 0x1D<<7 | 0x5D, + 25062 - 19968: jis0208<<14 | 0x37<<7 | 0x4E, + 25063 - 19968: jis0212<<14 | 0x1D<<7 | 0x5B, + 25065 - 19968: jis0212<<14 | 0x1D<<7 | 0x5C, + 25068 - 19968: jis0212<<14 | 0x1E<<7 | 0x00, + 25069 - 19968: jis0212<<14 | 0x1E<<7 | 0x01, + 25071 - 19968: jis0212<<14 | 0x1E<<7 | 0x02, + 25074 - 19968: jis0208<<14 | 0x23<<7 | 0x07, + 25076 - 19968: jis0208<<14 | 0x37<<7 | 0x52, + 25078 - 19968: jis0208<<14 | 0x37<<7 | 0x50, + 25079 - 19968: jis0208<<14 | 0x37<<7 | 0x46, + 25080 - 19968: jis0208<<14 | 0x16<<7 | 0x5B, + 25082 - 19968: jis0208<<14 | 0x37<<7 | 0x51, + 25084 - 19968: jis0208<<14 | 0x37<<7 | 0x55, + 25085 - 19968: jis0208<<14 | 0x37<<7 | 0x54, + 25086 - 19968: jis0208<<14 | 0x37<<7 | 0x56, + 25087 - 19968: jis0208<<14 | 0x37<<7 | 0x53, + 25088 - 19968: jis0208<<14 | 0x37<<7 | 0x57, + 25089 - 19968: jis0212<<14 | 0x1E<<7 | 0x03, + 25091 - 19968: jis0212<<14 | 0x1E<<7 | 0x04, + 25092 - 19968: jis0212<<14 | 0x1E<<7 | 0x05, + 25095 - 19968: jis0212<<14 | 0x1E<<7 | 0x06, + 25096 - 19968: jis0208<<14 | 0x37<<7 | 0x58, + 25097 - 19968: jis0208<<14 | 0x37<<7 | 0x59, + 25098 - 19968: jis0208<<14 | 0x29<<7 | 0x49, + 25100 - 19968: jis0208<<14 | 0x37<<7 | 0x5B, + 25101 - 19968: jis0208<<14 | 0x37<<7 | 0x5A, + 25102 - 19968: jis0208<<14 | 0x1C<<7 | 0x1E, + 25104 - 19968: jis0208<<14 | 0x1F<<7 | 0x0D, + 25105 - 19968: jis0208<<14 | 0x11<<7 | 0x45, + 25106 - 19968: jis0208<<14 | 0x11<<7 | 0x5B, + 25107 - 19968: jis0208<<14 | 0x59<<7 | 0x0C, + 25108 - 19968: jis0208<<14 | 0x37<<7 | 0x5C, + 25109 - 19968: jis0212<<14 | 0x1E<<7 | 0x08, + 25110 - 19968: jis0208<<14 | 0x0F<<7 | 0x1E, + 25114 - 19968: jis0208<<14 | 0x1F<<7 | 0x2B, + 25115 - 19968: jis0208<<14 | 0x37<<7 | 0x5D, + 25116 - 19968: jis0212<<14 | 0x1E<<7 | 0x09, + 25117 - 19968: jis0208<<14 | 0x4B<<7 | 0x22, + 25118 - 19968: jis0208<<14 | 0x38<<7 | 0x00, + 25119 - 19968: jis0208<<14 | 0x16<<7 | 0x40, + 25120 - 19968: jis0212<<14 | 0x1E<<7 | 0x0A, + 25121 - 19968: jis0208<<14 | 0x38<<7 | 0x01, + 25122 - 19968: jis0212<<14 | 0x1E<<7 | 0x0B, + 25123 - 19968: jis0212<<14 | 0x1E<<7 | 0x0C, + 25126 - 19968: jis0208<<14 | 0x1F<<7 | 0x4E, + 25127 - 19968: jis0212<<14 | 0x1E<<7 | 0x0D, + 25129 - 19968: jis0212<<14 | 0x1E<<7 | 0x0E, + 25130 - 19968: jis0208<<14 | 0x38<<7 | 0x02, + 25131 - 19968: jis0212<<14 | 0x1E<<7 | 0x0F, + 25134 - 19968: jis0208<<14 | 0x38<<7 | 0x03, + 25135 - 19968: jis0208<<14 | 0x14<<7 | 0x19, + 25136 - 19968: jis0208<<14 | 0x38<<7 | 0x04, + 25138 - 19968: jis0208<<14 | 0x38<<7 | 0x05, + 25139 - 19968: jis0208<<14 | 0x38<<7 | 0x06, + 25140 - 19968: jis0208<<14 | 0x21<<7 | 0x36, + 25144 - 19968: jis0208<<14 | 0x17<<7 | 0x2C, + 25145 - 19968: jis0212<<14 | 0x1E<<7 | 0x10, + 25147 - 19968: jis0208<<14 | 0x2B<<7 | 0x40, + 25149 - 19968: jis0212<<14 | 0x1E<<7 | 0x11, + 25151 - 19968: jis0208<<14 | 0x2A<<7 | 0x1B, + 25152 - 19968: jis0208<<14 | 0x1C<<7 | 0x49, + 25153 - 19968: jis0208<<14 | 0x38<<7 | 0x07, + 25154 - 19968: jis0212<<14 | 0x1E<<7 | 0x12, + 25155 - 19968: jis0212<<14 | 0x1E<<7 | 0x13, + 25156 - 19968: jis0212<<14 | 0x1E<<7 | 0x14, + 25158 - 19968: jis0212<<14 | 0x1E<<7 | 0x15, + 25159 - 19968: jis0208<<14 | 0x1F<<7 | 0x4F, + 25160 - 19968: jis0208<<14 | 0x4D<<7 | 0x1C, + 25161 - 19968: jis0208<<14 | 0x27<<7 | 0x41, + 25163 - 19968: jis0208<<14 | 0x1B<<7 | 0x49, + 25164 - 19968: jis0212<<14 | 0x1E<<7 | 0x16, + 25165 - 19968: jis0208<<14 | 0x19<<7 | 0x2C, + 25166 - 19968: jis0208<<14 | 0x38<<7 | 0x08, + 25168 - 19968: jis0212<<14 | 0x1E<<7 | 0x17, + 25169 - 19968: jis0212<<14 | 0x1E<<7 | 0x18, + 25170 - 19968: jis0212<<14 | 0x1E<<7 | 0x19, + 25171 - 19968: jis0208<<14 | 0x21<<7 | 0x26, + 25172 - 19968: jis0212<<14 | 0x1E<<7 | 0x1A, + 25173 - 19968: jis0208<<14 | 0x29<<7 | 0x06, + 25174 - 19968: jis0212<<14 | 0x1E<<7 | 0x1B, + 25176 - 19968: jis0208<<14 | 0x21<<7 | 0x50, + 25178 - 19968: jis0212<<14 | 0x1E<<7 | 0x1C, + 25179 - 19968: jis0208<<14 | 0x38<<7 | 0x0B, + 25180 - 19968: jis0212<<14 | 0x1E<<7 | 0x1D, + 25182 - 19968: jis0208<<14 | 0x38<<7 | 0x09, + 25184 - 19968: jis0208<<14 | 0x38<<7 | 0x0C, + 25187 - 19968: jis0208<<14 | 0x38<<7 | 0x0A, + 25188 - 19968: jis0212<<14 | 0x1E<<7 | 0x1E, + 25192 - 19968: jis0208<<14 | 0x38<<7 | 0x0D, + 25197 - 19968: jis0212<<14 | 0x1E<<7 | 0x1F, + 25198 - 19968: jis0208<<14 | 0x29<<7 | 0x10, + 25199 - 19968: jis0212<<14 | 0x1E<<7 | 0x20, + 25201 - 19968: jis0208<<14 | 0x0F<<7 | 0x16, + 25203 - 19968: jis0212<<14 | 0x1E<<7 | 0x21, + 25206 - 19968: jis0208<<14 | 0x28<<7 | 0x3D, + 25209 - 19968: jis0208<<14 | 0x27<<7 | 0x42, + 25210 - 19968: jis0212<<14 | 0x1E<<7 | 0x22, + 25212 - 19968: jis0208<<14 | 0x38<<7 | 0x0E, + 25213 - 19968: jis0212<<14 | 0x1E<<7 | 0x23, + 25214 - 19968: jis0208<<14 | 0x38<<7 | 0x11, + 25215 - 19968: jis0208<<14 | 0x1D<<7 | 0x14, + 25216 - 19968: jis0208<<14 | 0x14<<7 | 0x1A, + 25218 - 19968: jis0208<<14 | 0x38<<7 | 0x0F, + 25219 - 19968: jis0208<<14 | 0x38<<7 | 0x16, + 25220 - 19968: jis0208<<14 | 0x1D<<7 | 0x15, + 25225 - 19968: jis0208<<14 | 0x38<<7 | 0x10, + 25226 - 19968: jis0208<<14 | 0x26<<7 | 0x23, + 25229 - 19968: jis0212<<14 | 0x1E<<7 | 0x24, + 25230 - 19968: jis0212<<14 | 0x1E<<7 | 0x25, + 25231 - 19968: jis0212<<14 | 0x1E<<7 | 0x26, + 25232 - 19968: jis0212<<14 | 0x1E<<7 | 0x27, + 25233 - 19968: jis0208<<14 | 0x2C<<7 | 0x3D, + 25234 - 19968: jis0208<<14 | 0x38<<7 | 0x12, + 25235 - 19968: jis0208<<14 | 0x38<<7 | 0x13, + 25236 - 19968: jis0208<<14 | 0x38<<7 | 0x17, + 25237 - 19968: jis0208<<14 | 0x24<<7 | 0x49, + 25238 - 19968: jis0208<<14 | 0x38<<7 | 0x14, + 25239 - 19968: jis0208<<14 | 0x18<<7 | 0x12, + 25240 - 19968: jis0208<<14 | 0x1F<<7 | 0x3D, + 25243 - 19968: jis0208<<14 | 0x38<<7 | 0x25, + 25244 - 19968: jis0208<<14 | 0x27<<7 | 0x13, + 25246 - 19968: jis0208<<14 | 0x21<<7 | 0x51, + 25254 - 19968: jis0208<<14 | 0x59<<7 | 0x0D, + 25256 - 19968: jis0212<<14 | 0x1E<<7 | 0x29, + 25259 - 19968: jis0208<<14 | 0x27<<7 | 0x43, + 25260 - 19968: jis0208<<14 | 0x39<<7 | 0x0C, + 25265 - 19968: jis0208<<14 | 0x29<<7 | 0x59, + 25267 - 19968: jis0212<<14 | 0x1E<<7 | 0x2A, + 25269 - 19968: jis0208<<14 | 0x23<<7 | 0x50, + 25270 - 19968: jis0212<<14 | 0x1E<<7 | 0x2B, + 25271 - 19968: jis0212<<14 | 0x1E<<7 | 0x2C, + 25273 - 19968: jis0208<<14 | 0x2A<<7 | 0x54, + 25274 - 19968: jis0212<<14 | 0x1E<<7 | 0x2D, + 25275 - 19968: jis0208<<14 | 0x38<<7 | 0x1A, + 25276 - 19968: jis0208<<14 | 0x11<<7 | 0x00, + 25277 - 19968: jis0208<<14 | 0x22<<7 | 0x49, + 25278 - 19968: jis0212<<14 | 0x1E<<7 | 0x2E, + 25279 - 19968: jis0212<<14 | 0x1E<<7 | 0x2F, + 25282 - 19968: jis0208<<14 | 0x38<<7 | 0x23, + 25284 - 19968: jis0212<<14 | 0x1E<<7 | 0x30, + 25285 - 19968: jis0208<<14 | 0x22<<7 | 0x13, + 25286 - 19968: jis0208<<14 | 0x38<<7 | 0x1D, + 25287 - 19968: jis0208<<14 | 0x38<<7 | 0x24, + 25288 - 19968: jis0208<<14 | 0x38<<7 | 0x1F, + 25289 - 19968: jis0208<<14 | 0x38<<7 | 0x26, + 25290 - 19968: jis0208<<14 | 0x38<<7 | 0x22, + 25292 - 19968: jis0208<<14 | 0x38<<7 | 0x21, + 25293 - 19968: jis0208<<14 | 0x26<<7 | 0x4E, + 25294 - 19968: jis0212<<14 | 0x1E<<7 | 0x31, + 25295 - 19968: jis0208<<14 | 0x38<<7 | 0x1B, + 25296 - 19968: jis0208<<14 | 0x11<<7 | 0x5C, + 25297 - 19968: jis0208<<14 | 0x38<<7 | 0x19, + 25298 - 19968: jis0208<<14 | 0x14<<7 | 0x50, + 25299 - 19968: jis0208<<14 | 0x21<<7 | 0x52, + 25300 - 19968: jis0208<<14 | 0x38<<7 | 0x15, + 25301 - 19968: jis0212<<14 | 0x1E<<7 | 0x32, + 25302 - 19968: jis0212<<14 | 0x1E<<7 | 0x33, + 25303 - 19968: jis0208<<14 | 0x38<<7 | 0x18, + 25304 - 19968: jis0208<<14 | 0x18<<7 | 0x13, + 25305 - 19968: jis0208<<14 | 0x1F<<7 | 0x3A, + 25306 - 19968: jis0212<<14 | 0x1E<<7 | 0x34, + 25307 - 19968: jis0208<<14 | 0x1D<<7 | 0x16, + 25308 - 19968: jis0208<<14 | 0x38<<7 | 0x20, + 25309 - 19968: jis0208<<14 | 0x26<<7 | 0x31, + 25312 - 19968: jis0208<<14 | 0x14<<7 | 0x51, + 25313 - 19968: jis0208<<14 | 0x12<<7 | 0x27, + 25322 - 19968: jis0212<<14 | 0x1E<<7 | 0x35, + 25324 - 19968: jis0208<<14 | 0x12<<7 | 0x46, + 25325 - 19968: jis0208<<14 | 0x1E<<7 | 0x00, + 25326 - 19968: jis0208<<14 | 0x38<<7 | 0x28, + 25327 - 19968: jis0208<<14 | 0x38<<7 | 0x2D, + 25329 - 19968: jis0208<<14 | 0x38<<7 | 0x29, + 25330 - 19968: jis0212<<14 | 0x1E<<7 | 0x36, + 25331 - 19968: jis0208<<14 | 0x16<<7 | 0x5C, + 25332 - 19968: jis0212<<14 | 0x1E<<7 | 0x37, + 25333 - 19968: jis0208<<14 | 0x38<<7 | 0x2E, + 25334 - 19968: jis0208<<14 | 0x1A<<7 | 0x01, + 25335 - 19968: jis0208<<14 | 0x18<<7 | 0x48, + 25340 - 19968: jis0212<<14 | 0x1E<<7 | 0x38, + 25341 - 19968: jis0212<<14 | 0x1E<<7 | 0x39, + 25342 - 19968: jis0208<<14 | 0x1C<<7 | 0x05, + 25343 - 19968: jis0208<<14 | 0x38<<7 | 0x1C, + 25345 - 19968: jis0208<<14 | 0x1A<<7 | 0x5C, + 25346 - 19968: jis0208<<14 | 0x38<<7 | 0x2B, + 25347 - 19968: jis0212<<14 | 0x1E<<7 | 0x3A, + 25348 - 19968: jis0212<<14 | 0x1E<<7 | 0x3B, + 25351 - 19968: jis0208<<14 | 0x1A<<7 | 0x37, + 25352 - 19968: jis0208<<14 | 0x38<<7 | 0x2C, + 25353 - 19968: jis0208<<14 | 0x0F<<7 | 0x23, + 25354 - 19968: jis0212<<14 | 0x1E<<7 | 0x3C, + 25355 - 19968: jis0212<<14 | 0x1E<<7 | 0x3D, + 25356 - 19968: jis0208<<14 | 0x38<<7 | 0x27, + 25357 - 19968: jis0212<<14 | 0x1E<<7 | 0x3E, + 25360 - 19968: jis0212<<14 | 0x1E<<7 | 0x3F, + 25361 - 19968: jis0208<<14 | 0x23<<7 | 0x08, + 25363 - 19968: jis0212<<14 | 0x1E<<7 | 0x40, + 25366 - 19968: jis0212<<14 | 0x1E<<7 | 0x41, + 25368 - 19968: jis0212<<14 | 0x1E<<7 | 0x42, + 25369 - 19968: jis0208<<14 | 0x14<<7 | 0x52, + 25375 - 19968: jis0208<<14 | 0x15<<7 | 0x13, + 25383 - 19968: jis0208<<14 | 0x38<<7 | 0x2A, + 25384 - 19968: jis0208<<14 | 0x0F<<7 | 0x06, + 25385 - 19968: jis0212<<14 | 0x1E<<7 | 0x43, + 25386 - 19968: jis0212<<14 | 0x1E<<7 | 0x44, + 25387 - 19968: jis0208<<14 | 0x19<<7 | 0x22, + 25389 - 19968: jis0212<<14 | 0x1E<<7 | 0x45, + 25391 - 19968: jis0208<<14 | 0x1E<<7 | 0x15, + 25397 - 19968: jis0212<<14 | 0x1E<<7 | 0x46, + 25398 - 19968: jis0212<<14 | 0x1E<<7 | 0x47, + 25401 - 19968: jis0212<<14 | 0x1E<<7 | 0x48, + 25402 - 19968: jis0208<<14 | 0x23<<7 | 0x51, + 25404 - 19968: jis0212<<14 | 0x1E<<7 | 0x49, + 25405 - 19968: jis0208<<14 | 0x27<<7 | 0x33, + 25406 - 19968: jis0208<<14 | 0x38<<7 | 0x30, + 25407 - 19968: jis0208<<14 | 0x20<<7 | 0x3D, + 25409 - 19968: jis0212<<14 | 0x1E<<7 | 0x4A, + 25410 - 19968: jis0212<<14 | 0x1E<<7 | 0x4B, + 25411 - 19968: jis0212<<14 | 0x1E<<7 | 0x4C, + 25412 - 19968: jis0212<<14 | 0x1E<<7 | 0x4D, + 25414 - 19968: jis0212<<14 | 0x1E<<7 | 0x4E, + 25417 - 19968: jis0208<<14 | 0x21<<7 | 0x09, + 25418 - 19968: jis0212<<14 | 0x1E<<7 | 0x4F, + 25419 - 19968: jis0212<<14 | 0x1E<<7 | 0x50, + 25420 - 19968: jis0208<<14 | 0x1A<<7 | 0x0A, + 25421 - 19968: jis0208<<14 | 0x38<<7 | 0x31, + 25422 - 19968: jis0212<<14 | 0x1E<<7 | 0x51, + 25423 - 19968: jis0208<<14 | 0x38<<7 | 0x33, + 25424 - 19968: jis0208<<14 | 0x38<<7 | 0x2F, + 25426 - 19968: jis0212<<14 | 0x1E<<7 | 0x52, + 25427 - 19968: jis0212<<14 | 0x1E<<7 | 0x53, + 25428 - 19968: jis0212<<14 | 0x1E<<7 | 0x54, + 25429 - 19968: jis0208<<14 | 0x29<<7 | 0x40, + 25431 - 19968: jis0208<<14 | 0x23<<7 | 0x1C, + 25432 - 19968: jis0212<<14 | 0x1E<<7 | 0x55, + 25435 - 19968: jis0212<<14 | 0x1E<<7 | 0x56, + 25436 - 19968: jis0208<<14 | 0x20<<7 | 0x3B, + 25445 - 19968: jis0212<<14 | 0x1E<<7 | 0x57, + 25446 - 19968: jis0212<<14 | 0x1E<<7 | 0x58, + 25447 - 19968: jis0208<<14 | 0x29<<7 | 0x5A, + 25448 - 19968: jis0208<<14 | 0x1B<<7 | 0x2D, + 25449 - 19968: jis0208<<14 | 0x38<<7 | 0x3F, + 25451 - 19968: jis0208<<14 | 0x38<<7 | 0x3E, + 25452 - 19968: jis0212<<14 | 0x1E<<7 | 0x59, + 25453 - 19968: jis0212<<14 | 0x1E<<7 | 0x5A, + 25454 - 19968: jis0208<<14 | 0x1E<<7 | 0x57, + 25457 - 19968: jis0212<<14 | 0x1E<<7 | 0x5B, + 25458 - 19968: jis0208<<14 | 0x16<<7 | 0x5D, + 25460 - 19968: jis0212<<14 | 0x1E<<7 | 0x5C, + 25461 - 19968: jis0212<<14 | 0x1E<<7 | 0x5D, + 25462 - 19968: jis0208<<14 | 0x38<<7 | 0x38, + 25463 - 19968: jis0208<<14 | 0x1D<<7 | 0x18, + 25464 - 19968: jis0212<<14 | 0x1F<<7 | 0x00, + 25466 - 19968: jis0208<<14 | 0x25<<7 | 0x47, + 25467 - 19968: jis0208<<14 | 0x26<<7 | 0x10, + 25468 - 19968: jis0212<<14 | 0x1F<<7 | 0x01, + 25469 - 19968: jis0212<<14 | 0x1F<<7 | 0x02, + 25471 - 19968: jis0212<<14 | 0x1F<<7 | 0x03, + 25472 - 19968: jis0208<<14 | 0x38<<7 | 0x36, + 25474 - 19968: jis0212<<14 | 0x1F<<7 | 0x04, + 25475 - 19968: jis0208<<14 | 0x20<<7 | 0x3C, + 25476 - 19968: jis0212<<14 | 0x1F<<7 | 0x05, + 25479 - 19968: jis0212<<14 | 0x1F<<7 | 0x06, + 25480 - 19968: jis0208<<14 | 0x1B<<7 | 0x57, + 25481 - 19968: jis0208<<14 | 0x38<<7 | 0x3B, + 25482 - 19968: jis0212<<14 | 0x1F<<7 | 0x07, + 25484 - 19968: jis0208<<14 | 0x1D<<7 | 0x17, + 25486 - 19968: jis0208<<14 | 0x38<<7 | 0x35, + 25487 - 19968: jis0208<<14 | 0x38<<7 | 0x3A, + 25488 - 19968: jis0212<<14 | 0x1F<<7 | 0x08, + 25490 - 19968: jis0208<<14 | 0x26<<7 | 0x32, + 25492 - 19968: jis0212<<14 | 0x1F<<7 | 0x09, + 25493 - 19968: jis0212<<14 | 0x1F<<7 | 0x0A, + 25494 - 19968: jis0208<<14 | 0x38<<7 | 0x34, + 25496 - 19968: jis0208<<14 | 0x16<<7 | 0x00, + 25497 - 19968: jis0212<<14 | 0x1F<<7 | 0x0B, + 25498 - 19968: jis0212<<14 | 0x1F<<7 | 0x0C, + 25499 - 19968: jis0208<<14 | 0x12<<7 | 0x3C, + 25502 - 19968: jis0212<<14 | 0x1F<<7 | 0x0D, + 25503 - 19968: jis0208<<14 | 0x38<<7 | 0x3C, + 25504 - 19968: jis0208<<14 | 0x2D<<7 | 0x0A, + 25505 - 19968: jis0208<<14 | 0x19<<7 | 0x2D, + 25506 - 19968: jis0208<<14 | 0x22<<7 | 0x14, + 25507 - 19968: jis0208<<14 | 0x38<<7 | 0x39, + 25508 - 19968: jis0212<<14 | 0x1F<<7 | 0x0E, + 25509 - 19968: jis0208<<14 | 0x1F<<7 | 0x3B, + 25510 - 19968: jis0212<<14 | 0x1F<<7 | 0x0F, + 25511 - 19968: jis0208<<14 | 0x18<<7 | 0x14, + 25512 - 19968: jis0208<<14 | 0x1E<<7 | 0x43, + 25513 - 19968: jis0208<<14 | 0x10<<7 | 0x45, + 25514 - 19968: jis0208<<14 | 0x20<<7 | 0x1B, + 25515 - 19968: jis0208<<14 | 0x38<<7 | 0x37, + 25516 - 19968: jis0208<<14 | 0x14<<7 | 0x24, + 25517 - 19968: jis0212<<14 | 0x1F<<7 | 0x10, + 25518 - 19968: jis0212<<14 | 0x1F<<7 | 0x11, + 25519 - 19968: jis0212<<14 | 0x1F<<7 | 0x12, + 25522 - 19968: jis0208<<14 | 0x16<<7 | 0x26, + 25524 - 19968: jis0208<<14 | 0x23<<7 | 0x2E, + 25525 - 19968: jis0208<<14 | 0x38<<7 | 0x3D, + 25531 - 19968: jis0208<<14 | 0x20<<7 | 0x3E, + 25533 - 19968: jis0212<<14 | 0x1F<<7 | 0x13, + 25534 - 19968: jis0208<<14 | 0x38<<7 | 0x40, + 25536 - 19968: jis0208<<14 | 0x38<<7 | 0x42, + 25537 - 19968: jis0212<<14 | 0x1F<<7 | 0x14, + 25539 - 19968: jis0208<<14 | 0x21<<7 | 0x16, + 25540 - 19968: jis0208<<14 | 0x38<<7 | 0x48, + 25541 - 19968: jis0212<<14 | 0x1F<<7 | 0x15, + 25542 - 19968: jis0208<<14 | 0x38<<7 | 0x43, + 25544 - 19968: jis0212<<14 | 0x1F<<7 | 0x16, + 25545 - 19968: jis0208<<14 | 0x38<<7 | 0x45, + 25550 - 19968: jis0212<<14 | 0x1F<<7 | 0x17, + 25551 - 19968: jis0208<<14 | 0x28<<7 | 0x20, + 25552 - 19968: jis0208<<14 | 0x23<<7 | 0x52, + 25553 - 19968: jis0212<<14 | 0x1F<<7 | 0x18, + 25554 - 19968: jis0208<<14 | 0x38<<7 | 0x46, + 25555 - 19968: jis0212<<14 | 0x1F<<7 | 0x19, + 25556 - 19968: jis0212<<14 | 0x1F<<7 | 0x1A, + 25557 - 19968: jis0212<<14 | 0x1F<<7 | 0x1B, + 25558 - 19968: jis0208<<14 | 0x2C<<7 | 0x0B, + 25562 - 19968: jis0208<<14 | 0x2C<<7 | 0x27, + 25563 - 19968: jis0208<<14 | 0x13<<7 | 0x18, + 25564 - 19968: jis0212<<14 | 0x1F<<7 | 0x1C, + 25568 - 19968: jis0212<<14 | 0x1F<<7 | 0x1D, + 25569 - 19968: jis0208<<14 | 0x0F<<7 | 0x0D, + 25571 - 19968: jis0208<<14 | 0x38<<7 | 0x44, + 25573 - 19968: jis0212<<14 | 0x1F<<7 | 0x1E, + 25577 - 19968: jis0208<<14 | 0x38<<7 | 0x41, + 25578 - 19968: jis0212<<14 | 0x1F<<7 | 0x1F, + 25580 - 19968: jis0212<<14 | 0x1F<<7 | 0x20, + 25582 - 19968: jis0208<<14 | 0x13<<7 | 0x57, + 25586 - 19968: jis0212<<14 | 0x1F<<7 | 0x21, + 25587 - 19968: jis0212<<14 | 0x1F<<7 | 0x22, + 25588 - 19968: jis0208<<14 | 0x10<<7 | 0x46, + 25589 - 19968: jis0208<<14 | 0x59<<7 | 0x0E, + 25590 - 19968: jis0208<<14 | 0x38<<7 | 0x47, + 25592 - 19968: jis0212<<14 | 0x1F<<7 | 0x24, + 25593 - 19968: jis0212<<14 | 0x1F<<7 | 0x25, + 25594 - 19968: jis0208<<14 | 0x2C<<7 | 0x28, + 25606 - 19968: jis0208<<14 | 0x38<<7 | 0x4B, + 25609 - 19968: jis0212<<14 | 0x1F<<7 | 0x26, + 25610 - 19968: jis0212<<14 | 0x1F<<7 | 0x27, + 25613 - 19968: jis0208<<14 | 0x21<<7 | 0x1A, + 25615 - 19968: jis0208<<14 | 0x38<<7 | 0x52, + 25616 - 19968: jis0212<<14 | 0x1F<<7 | 0x28, + 25618 - 19968: jis0212<<14 | 0x1F<<7 | 0x29, + 25619 - 19968: jis0208<<14 | 0x38<<7 | 0x4C, + 25620 - 19968: jis0212<<14 | 0x1F<<7 | 0x2A, + 25622 - 19968: jis0208<<14 | 0x38<<7 | 0x49, + 25623 - 19968: jis0208<<14 | 0x38<<7 | 0x50, + 25624 - 19968: jis0212<<14 | 0x1F<<7 | 0x2B, + 25628 - 19968: jis0208<<14 | 0x38<<7 | 0x32, + 25630 - 19968: jis0212<<14 | 0x1F<<7 | 0x2C, + 25632 - 19968: jis0212<<14 | 0x1F<<7 | 0x2D, + 25634 - 19968: jis0212<<14 | 0x1F<<7 | 0x2E, + 25636 - 19968: jis0212<<14 | 0x1F<<7 | 0x2F, + 25637 - 19968: jis0212<<14 | 0x1F<<7 | 0x30, + 25638 - 19968: jis0208<<14 | 0x38<<7 | 0x4D, + 25640 - 19968: jis0208<<14 | 0x38<<7 | 0x51, + 25641 - 19968: jis0212<<14 | 0x1F<<7 | 0x31, + 25642 - 19968: jis0212<<14 | 0x1F<<7 | 0x32, + 25644 - 19968: jis0208<<14 | 0x27<<7 | 0x21, + 25645 - 19968: jis0208<<14 | 0x24<<7 | 0x4A, + 25647 - 19968: jis0212<<14 | 0x1F<<7 | 0x33, + 25648 - 19968: jis0212<<14 | 0x1F<<7 | 0x34, + 25652 - 19968: jis0208<<14 | 0x38<<7 | 0x4A, + 25653 - 19968: jis0212<<14 | 0x1F<<7 | 0x35, + 25654 - 19968: jis0208<<14 | 0x38<<7 | 0x4E, + 25658 - 19968: jis0208<<14 | 0x16<<7 | 0x27, + 25661 - 19968: jis0212<<14 | 0x1F<<7 | 0x36, + 25662 - 19968: jis0208<<14 | 0x19<<7 | 0x50, + 25663 - 19968: jis0212<<14 | 0x1F<<7 | 0x37, + 25666 - 19968: jis0208<<14 | 0x1F<<7 | 0x3C, + 25675 - 19968: jis0212<<14 | 0x1F<<7 | 0x38, + 25678 - 19968: jis0208<<14 | 0x38<<7 | 0x56, + 25679 - 19968: jis0212<<14 | 0x1F<<7 | 0x39, + 25681 - 19968: jis0212<<14 | 0x1F<<7 | 0x3A, + 25682 - 19968: jis0212<<14 | 0x1F<<7 | 0x3B, + 25683 - 19968: jis0212<<14 | 0x1F<<7 | 0x3C, + 25684 - 19968: jis0212<<14 | 0x1F<<7 | 0x3D, + 25688 - 19968: jis0208<<14 | 0x24<<7 | 0x05, + 25690 - 19968: jis0212<<14 | 0x1F<<7 | 0x3E, + 25691 - 19968: jis0212<<14 | 0x1F<<7 | 0x3F, + 25692 - 19968: jis0212<<14 | 0x1F<<7 | 0x40, + 25693 - 19968: jis0212<<14 | 0x1F<<7 | 0x41, + 25695 - 19968: jis0212<<14 | 0x1F<<7 | 0x42, + 25696 - 19968: jis0208<<14 | 0x59<<7 | 0x0F, + 25697 - 19968: jis0212<<14 | 0x1F<<7 | 0x44, + 25699 - 19968: jis0212<<14 | 0x1F<<7 | 0x45, + 25703 - 19968: jis0208<<14 | 0x38<<7 | 0x53, + 25705 - 19968: jis0208<<14 | 0x2A<<7 | 0x3F, + 25709 - 19968: jis0212<<14 | 0x1F<<7 | 0x46, + 25711 - 19968: jis0208<<14 | 0x38<<7 | 0x54, + 25715 - 19968: jis0212<<14 | 0x1F<<7 | 0x47, + 25716 - 19968: jis0212<<14 | 0x1F<<7 | 0x48, + 25718 - 19968: jis0208<<14 | 0x38<<7 | 0x55, + 25720 - 19968: jis0208<<14 | 0x2B<<7 | 0x2D, + 25722 - 19968: jis0208<<14 | 0x1F<<7 | 0x01, + 25723 - 19968: jis0212<<14 | 0x1F<<7 | 0x49, + 25725 - 19968: jis0212<<14 | 0x1F<<7 | 0x4A, + 25731 - 19968: jis0208<<14 | 0x16<<7 | 0x41, + 25733 - 19968: jis0212<<14 | 0x1F<<7 | 0x4B, + 25735 - 19968: jis0212<<14 | 0x1F<<7 | 0x4C, + 25736 - 19968: jis0208<<14 | 0x38<<7 | 0x5C, + 25743 - 19968: jis0212<<14 | 0x1F<<7 | 0x4D, + 25744 - 19968: jis0212<<14 | 0x1F<<7 | 0x4E, + 25745 - 19968: jis0212<<14 | 0x1F<<7 | 0x4F, + 25746 - 19968: jis0208<<14 | 0x1A<<7 | 0x14, + 25747 - 19968: jis0208<<14 | 0x38<<7 | 0x59, + 25749 - 19968: jis0208<<14 | 0x38<<7 | 0x58, + 25752 - 19968: jis0212<<14 | 0x1F<<7 | 0x50, + 25753 - 19968: jis0212<<14 | 0x1F<<7 | 0x51, + 25754 - 19968: jis0208<<14 | 0x26<<7 | 0x11, + 25755 - 19968: jis0212<<14 | 0x1F<<7 | 0x52, + 25757 - 19968: jis0208<<14 | 0x59<<7 | 0x10, + 25758 - 19968: jis0208<<14 | 0x25<<7 | 0x14, + 25759 - 19968: jis0212<<14 | 0x1F<<7 | 0x54, + 25761 - 19968: jis0212<<14 | 0x1F<<7 | 0x55, + 25763 - 19968: jis0212<<14 | 0x1F<<7 | 0x56, + 25764 - 19968: jis0208<<14 | 0x24<<7 | 0x10, + 25765 - 19968: jis0208<<14 | 0x38<<7 | 0x5A, + 25766 - 19968: jis0212<<14 | 0x1F<<7 | 0x57, + 25768 - 19968: jis0212<<14 | 0x1F<<7 | 0x58, + 25769 - 19968: jis0208<<14 | 0x38<<7 | 0x5B, + 25771 - 19968: jis0208<<14 | 0x28<<7 | 0x4E, + 25772 - 19968: jis0212<<14 | 0x1F<<7 | 0x59, + 25773 - 19968: jis0208<<14 | 0x26<<7 | 0x24, + 25774 - 19968: jis0208<<14 | 0x1A<<7 | 0x02, + 25776 - 19968: jis0208<<14 | 0x1F<<7 | 0x50, + 25778 - 19968: jis0208<<14 | 0x2A<<7 | 0x2F, + 25779 - 19968: jis0212<<14 | 0x1F<<7 | 0x5A, + 25785 - 19968: jis0208<<14 | 0x12<<7 | 0x28, + 25787 - 19968: jis0208<<14 | 0x39<<7 | 0x04, + 25788 - 19968: jis0208<<14 | 0x38<<7 | 0x5D, + 25789 - 19968: jis0212<<14 | 0x1F<<7 | 0x5B, + 25790 - 19968: jis0212<<14 | 0x1F<<7 | 0x5C, + 25791 - 19968: jis0212<<14 | 0x1F<<7 | 0x5D, + 25793 - 19968: jis0208<<14 | 0x2C<<7 | 0x29, + 25794 - 19968: jis0208<<14 | 0x39<<7 | 0x06, + 25796 - 19968: jis0212<<14 | 0x20<<7 | 0x00, + 25797 - 19968: jis0208<<14 | 0x39<<7 | 0x02, + 25799 - 19968: jis0208<<14 | 0x39<<7 | 0x03, + 25801 - 19968: jis0212<<14 | 0x20<<7 | 0x01, + 25802 - 19968: jis0212<<14 | 0x20<<7 | 0x02, + 25803 - 19968: jis0212<<14 | 0x20<<7 | 0x03, + 25804 - 19968: jis0212<<14 | 0x20<<7 | 0x04, + 25805 - 19968: jis0208<<14 | 0x20<<7 | 0x3F, + 25806 - 19968: jis0208<<14 | 0x59<<7 | 0x11, + 25808 - 19968: jis0212<<14 | 0x20<<7 | 0x06, + 25809 - 19968: jis0212<<14 | 0x20<<7 | 0x07, + 25810 - 19968: jis0208<<14 | 0x39<<7 | 0x01, + 25812 - 19968: jis0208<<14 | 0x38<<7 | 0x1E, + 25813 - 19968: jis0212<<14 | 0x20<<7 | 0x08, + 25815 - 19968: jis0212<<14 | 0x20<<7 | 0x09, + 25816 - 19968: jis0208<<14 | 0x39<<7 | 0x05, + 25818 - 19968: jis0208<<14 | 0x39<<7 | 0x00, + 25824 - 19968: jis0208<<14 | 0x39<<7 | 0x0A, + 25825 - 19968: jis0208<<14 | 0x39<<7 | 0x0B, + 25826 - 19968: jis0208<<14 | 0x24<<7 | 0x06, + 25827 - 19968: jis0208<<14 | 0x39<<7 | 0x0D, + 25828 - 19968: jis0212<<14 | 0x20<<7 | 0x0A, + 25829 - 19968: jis0212<<14 | 0x20<<7 | 0x0B, + 25830 - 19968: jis0208<<14 | 0x1A<<7 | 0x03, + 25831 - 19968: jis0208<<14 | 0x39<<7 | 0x08, + 25833 - 19968: jis0212<<14 | 0x20<<7 | 0x0C, + 25834 - 19968: jis0212<<14 | 0x20<<7 | 0x0D, + 25836 - 19968: jis0208<<14 | 0x14<<7 | 0x1B, + 25837 - 19968: jis0212<<14 | 0x20<<7 | 0x0E, + 25839 - 19968: jis0208<<14 | 0x39<<7 | 0x0E, + 25840 - 19968: jis0212<<14 | 0x20<<7 | 0x0F, + 25841 - 19968: jis0208<<14 | 0x39<<7 | 0x07, + 25842 - 19968: jis0208<<14 | 0x39<<7 | 0x12, + 25844 - 19968: jis0208<<14 | 0x39<<7 | 0x11, + 25845 - 19968: jis0212<<14 | 0x20<<7 | 0x10, + 25846 - 19968: jis0208<<14 | 0x39<<7 | 0x10, + 25847 - 19968: jis0212<<14 | 0x20<<7 | 0x11, + 25850 - 19968: jis0208<<14 | 0x39<<7 | 0x13, + 25851 - 19968: jis0212<<14 | 0x20<<7 | 0x12, + 25853 - 19968: jis0208<<14 | 0x39<<7 | 0x15, + 25854 - 19968: jis0208<<14 | 0x1D<<7 | 0x50, + 25855 - 19968: jis0212<<14 | 0x20<<7 | 0x13, + 25856 - 19968: jis0208<<14 | 0x39<<7 | 0x14, + 25857 - 19968: jis0212<<14 | 0x20<<7 | 0x14, + 25860 - 19968: jis0212<<14 | 0x20<<7 | 0x15, + 25861 - 19968: jis0208<<14 | 0x39<<7 | 0x18, + 25864 - 19968: jis0212<<14 | 0x20<<7 | 0x16, + 25865 - 19968: jis0212<<14 | 0x20<<7 | 0x17, + 25866 - 19968: jis0212<<14 | 0x20<<7 | 0x18, + 25871 - 19968: jis0212<<14 | 0x20<<7 | 0x19, + 25875 - 19968: jis0212<<14 | 0x20<<7 | 0x1A, + 25876 - 19968: jis0212<<14 | 0x20<<7 | 0x1B, + 25878 - 19968: jis0212<<14 | 0x20<<7 | 0x1C, + 25880 - 19968: jis0208<<14 | 0x39<<7 | 0x16, + 25881 - 19968: jis0212<<14 | 0x20<<7 | 0x1D, + 25883 - 19968: jis0212<<14 | 0x20<<7 | 0x1E, + 25884 - 19968: jis0208<<14 | 0x39<<7 | 0x17, + 25885 - 19968: jis0208<<14 | 0x38<<7 | 0x4F, + 25886 - 19968: jis0212<<14 | 0x20<<7 | 0x1F, + 25887 - 19968: jis0212<<14 | 0x20<<7 | 0x20, + 25890 - 19968: jis0212<<14 | 0x20<<7 | 0x21, + 25891 - 19968: jis0208<<14 | 0x39<<7 | 0x1A, + 25892 - 19968: jis0208<<14 | 0x39<<7 | 0x19, + 25894 - 19968: jis0212<<14 | 0x20<<7 | 0x22, + 25897 - 19968: jis0212<<14 | 0x20<<7 | 0x23, + 25898 - 19968: jis0208<<14 | 0x38<<7 | 0x57, + 25899 - 19968: jis0208<<14 | 0x39<<7 | 0x1B, + 25900 - 19968: jis0208<<14 | 0x39<<7 | 0x0F, + 25902 - 19968: jis0212<<14 | 0x20<<7 | 0x24, + 25903 - 19968: jis0208<<14 | 0x1A<<7 | 0x38, + 25905 - 19968: jis0212<<14 | 0x20<<7 | 0x25, + 25908 - 19968: jis0208<<14 | 0x39<<7 | 0x1C, + 25909 - 19968: jis0208<<14 | 0x39<<7 | 0x1D, + 25910 - 19968: jis0208<<14 | 0x39<<7 | 0x1F, + 25911 - 19968: jis0208<<14 | 0x39<<7 | 0x1E, + 25912 - 19968: jis0208<<14 | 0x39<<7 | 0x20, + 25913 - 19968: jis0208<<14 | 0x11<<7 | 0x5D, + 25914 - 19968: jis0212<<14 | 0x20<<7 | 0x26, + 25915 - 19968: jis0208<<14 | 0x18<<7 | 0x15, + 25916 - 19968: jis0212<<14 | 0x20<<7 | 0x27, + 25917 - 19968: jis0212<<14 | 0x20<<7 | 0x28, + 25918 - 19968: jis0208<<14 | 0x29<<7 | 0x5B, + 25919 - 19968: jis0208<<14 | 0x1F<<7 | 0x0E, + 25923 - 19968: jis0212<<14 | 0x20<<7 | 0x29, + 25925 - 19968: jis0208<<14 | 0x17<<7 | 0x2D, + 25927 - 19968: jis0212<<14 | 0x20<<7 | 0x2A, + 25928 - 19968: jis0208<<14 | 0x39<<7 | 0x22, + 25929 - 19968: jis0212<<14 | 0x20<<7 | 0x2B, + 25933 - 19968: jis0208<<14 | 0x39<<7 | 0x25, + 25934 - 19968: jis0208<<14 | 0x59<<7 | 0x12, + 25935 - 19968: jis0208<<14 | 0x28<<7 | 0x31, + 25936 - 19968: jis0212<<14 | 0x20<<7 | 0x2C, + 25937 - 19968: jis0208<<14 | 0x14<<7 | 0x3E, + 25938 - 19968: jis0212<<14 | 0x20<<7 | 0x2D, + 25940 - 19968: jis0212<<14 | 0x20<<7 | 0x2E, + 25941 - 19968: jis0208<<14 | 0x39<<7 | 0x24, + 25942 - 19968: jis0208<<14 | 0x39<<7 | 0x23, + 25943 - 19968: jis0208<<14 | 0x26<<7 | 0x33, + 25944 - 19968: jis0208<<14 | 0x39<<7 | 0x26, + 25945 - 19968: jis0208<<14 | 0x15<<7 | 0x14, + 25949 - 19968: jis0208<<14 | 0x39<<7 | 0x28, + 25950 - 19968: jis0208<<14 | 0x39<<7 | 0x27, + 25951 - 19968: jis0212<<14 | 0x20<<7 | 0x2F, + 25952 - 19968: jis0212<<14 | 0x20<<7 | 0x30, + 25954 - 19968: jis0208<<14 | 0x13<<7 | 0x19, + 25955 - 19968: jis0208<<14 | 0x1A<<7 | 0x15, + 25958 - 19968: jis0208<<14 | 0x25<<7 | 0x37, + 25959 - 19968: jis0212<<14 | 0x20<<7 | 0x31, + 25963 - 19968: jis0212<<14 | 0x20<<7 | 0x32, + 25964 - 19968: jis0208<<14 | 0x16<<7 | 0x28, + 25968 - 19968: jis0208<<14 | 0x1E<<7 | 0x53, + 25970 - 19968: jis0208<<14 | 0x39<<7 | 0x29, + 25972 - 19968: jis0208<<14 | 0x1F<<7 | 0x0F, + 25973 - 19968: jis0208<<14 | 0x24<<7 | 0x07, + 25975 - 19968: jis0208<<14 | 0x28<<7 | 0x3E, + 25976 - 19968: jis0208<<14 | 0x39<<7 | 0x2A, + 25978 - 19968: jis0212<<14 | 0x20<<7 | 0x33, + 25981 - 19968: jis0212<<14 | 0x20<<7 | 0x34, + 25985 - 19968: jis0212<<14 | 0x20<<7 | 0x35, + 25986 - 19968: jis0208<<14 | 0x39<<7 | 0x2B, + 25987 - 19968: jis0208<<14 | 0x39<<7 | 0x2C, + 25989 - 19968: jis0212<<14 | 0x20<<7 | 0x36, + 25991 - 19968: jis0208<<14 | 0x29<<7 | 0x17, + 25992 - 19968: jis0208<<14 | 0x34<<7 | 0x3C, + 25993 - 19968: jis0208<<14 | 0x1F<<7 | 0x25, + 25994 - 19968: jis0212<<14 | 0x20<<7 | 0x37, + 25996 - 19968: jis0208<<14 | 0x28<<7 | 0x2B, + 25998 - 19968: jis0208<<14 | 0x19<<7 | 0x37, + 26000 - 19968: jis0208<<14 | 0x27<<7 | 0x44, + 26001 - 19968: jis0208<<14 | 0x27<<7 | 0x22, + 26002 - 19968: jis0212<<14 | 0x20<<7 | 0x38, + 26005 - 19968: jis0212<<14 | 0x20<<7 | 0x39, + 26007 - 19968: jis0208<<14 | 0x24<<7 | 0x2C, + 26008 - 19968: jis0212<<14 | 0x20<<7 | 0x3A, + 26009 - 19968: jis0208<<14 | 0x2D<<7 | 0x20, + 26011 - 19968: jis0208<<14 | 0x39<<7 | 0x2E, + 26012 - 19968: jis0208<<14 | 0x1B<<7 | 0x2F, + 26013 - 19968: jis0212<<14 | 0x20<<7 | 0x3B, + 26015 - 19968: jis0208<<14 | 0x39<<7 | 0x2F, + 26016 - 19968: jis0212<<14 | 0x20<<7 | 0x3C, + 26017 - 19968: jis0208<<14 | 0x0F<<7 | 0x15, + 26019 - 19968: jis0212<<14 | 0x20<<7 | 0x3D, + 26020 - 19968: jis0208<<14 | 0x15<<7 | 0x33, + 26021 - 19968: jis0208<<14 | 0x1F<<7 | 0x2C, + 26022 - 19968: jis0212<<14 | 0x20<<7 | 0x3E, + 26023 - 19968: jis0208<<14 | 0x28<<7 | 0x3F, + 26027 - 19968: jis0208<<14 | 0x39<<7 | 0x30, + 26028 - 19968: jis0208<<14 | 0x1A<<7 | 0x21, + 26029 - 19968: jis0208<<14 | 0x22<<7 | 0x26, + 26030 - 19968: jis0212<<14 | 0x20<<7 | 0x3F, + 26031 - 19968: jis0208<<14 | 0x1A<<7 | 0x3A, + 26032 - 19968: jis0208<<14 | 0x1E<<7 | 0x16, + 26034 - 19968: jis0212<<14 | 0x20<<7 | 0x40, + 26035 - 19968: jis0212<<14 | 0x20<<7 | 0x41, + 26036 - 19968: jis0212<<14 | 0x20<<7 | 0x42, + 26039 - 19968: jis0208<<14 | 0x39<<7 | 0x31, + 26041 - 19968: jis0208<<14 | 0x29<<7 | 0x5C, + 26044 - 19968: jis0208<<14 | 0x10<<7 | 0x56, + 26045 - 19968: jis0208<<14 | 0x1A<<7 | 0x3B, + 26047 - 19968: jis0212<<14 | 0x20<<7 | 0x43, + 26049 - 19968: jis0208<<14 | 0x39<<7 | 0x34, + 26050 - 19968: jis0212<<14 | 0x20<<7 | 0x44, + 26051 - 19968: jis0208<<14 | 0x39<<7 | 0x32, + 26052 - 19968: jis0208<<14 | 0x39<<7 | 0x35, + 26053 - 19968: jis0208<<14 | 0x2D<<7 | 0x18, + 26054 - 19968: jis0208<<14 | 0x39<<7 | 0x33, + 26056 - 19968: jis0212<<14 | 0x20<<7 | 0x45, + 26057 - 19968: jis0212<<14 | 0x20<<7 | 0x46, + 26059 - 19968: jis0208<<14 | 0x1F<<7 | 0x5A, + 26060 - 19968: jis0208<<14 | 0x39<<7 | 0x36, + 26062 - 19968: jis0212<<14 | 0x20<<7 | 0x47, + 26063 - 19968: jis0208<<14 | 0x21<<7 | 0x11, + 26064 - 19968: jis0212<<14 | 0x20<<7 | 0x48, + 26066 - 19968: jis0208<<14 | 0x39<<7 | 0x37, + 26068 - 19968: jis0212<<14 | 0x20<<7 | 0x49, + 26070 - 19968: jis0212<<14 | 0x20<<7 | 0x4A, + 26071 - 19968: jis0208<<14 | 0x13<<7 | 0x59, + 26072 - 19968: jis0212<<14 | 0x20<<7 | 0x4B, + 26073 - 19968: jis0208<<14 | 0x39<<7 | 0x39, + 26075 - 19968: jis0208<<14 | 0x39<<7 | 0x38, + 26079 - 19968: jis0212<<14 | 0x20<<7 | 0x4C, + 26080 - 19968: jis0208<<14 | 0x39<<7 | 0x3A, + 26081 - 19968: jis0208<<14 | 0x39<<7 | 0x3B, + 26082 - 19968: jis0208<<14 | 0x13<<7 | 0x5A, + 26085 - 19968: jis0208<<14 | 0x25<<7 | 0x5B, + 26086 - 19968: jis0208<<14 | 0x22<<7 | 0x15, + 26087 - 19968: jis0208<<14 | 0x14<<7 | 0x4B, + 26088 - 19968: jis0208<<14 | 0x1A<<7 | 0x3C, + 26089 - 19968: jis0208<<14 | 0x20<<7 | 0x40, + 26092 - 19968: jis0208<<14 | 0x1C<<7 | 0x3B, + 26093 - 19968: jis0208<<14 | 0x0F<<7 | 0x0F, + 26096 - 19968: jis0212<<14 | 0x20<<7 | 0x4D, + 26097 - 19968: jis0208<<14 | 0x39<<7 | 0x3C, + 26098 - 19968: jis0212<<14 | 0x20<<7 | 0x4E, + 26100 - 19968: jis0212<<14 | 0x20<<7 | 0x4F, + 26101 - 19968: jis0212<<14 | 0x20<<7 | 0x50, + 26105 - 19968: jis0212<<14 | 0x20<<7 | 0x51, + 26106 - 19968: jis0208<<14 | 0x11<<7 | 0x01, + 26107 - 19968: jis0208<<14 | 0x39<<7 | 0x40, + 26110 - 19968: jis0212<<14 | 0x20<<7 | 0x52, + 26111 - 19968: jis0212<<14 | 0x20<<7 | 0x53, + 26112 - 19968: jis0208<<14 | 0x59<<7 | 0x13, + 26114 - 19968: jis0208<<14 | 0x18<<7 | 0x16, + 26115 - 19968: jis0208<<14 | 0x39<<7 | 0x3F, + 26116 - 19968: jis0212<<14 | 0x20<<7 | 0x55, + 26118 - 19968: jis0208<<14 | 0x19<<7 | 0x0A, + 26119 - 19968: jis0208<<14 | 0x1D<<7 | 0x19, + 26120 - 19968: jis0212<<14 | 0x20<<7 | 0x56, + 26121 - 19968: jis0208<<14 | 0x59<<7 | 0x16, + 26122 - 19968: jis0208<<14 | 0x39<<7 | 0x3E, + 26124 - 19968: jis0208<<14 | 0x1D<<7 | 0x1A, + 26125 - 19968: jis0212<<14 | 0x20<<7 | 0x58, + 26126 - 19968: jis0208<<14 | 0x2B<<7 | 0x1F, + 26127 - 19968: jis0208<<14 | 0x19<<7 | 0x09, + 26129 - 19968: jis0212<<14 | 0x20<<7 | 0x59, + 26130 - 19968: jis0212<<14 | 0x20<<7 | 0x5A, + 26131 - 19968: jis0208<<14 | 0x0F<<7 | 0x36, + 26132 - 19968: jis0208<<14 | 0x1F<<7 | 0x2D, + 26133 - 19968: jis0208<<14 | 0x59<<7 | 0x14, + 26134 - 19968: jis0212<<14 | 0x20<<7 | 0x5C, + 26140 - 19968: jis0208<<14 | 0x39<<7 | 0x45, + 26141 - 19968: jis0212<<14 | 0x20<<7 | 0x5D, + 26142 - 19968: jis0208<<14 | 0x59<<7 | 0x18, + 26143 - 19968: jis0208<<14 | 0x1F<<7 | 0x10, + 26144 - 19968: jis0208<<14 | 0x10<<7 | 0x26, + 26145 - 19968: jis0212<<14 | 0x21<<7 | 0x01, + 26146 - 19968: jis0212<<14 | 0x21<<7 | 0x02, + 26147 - 19968: jis0212<<14 | 0x21<<7 | 0x03, + 26148 - 19968: jis0208<<14 | 0x59<<7 | 0x19, + 26149 - 19968: jis0208<<14 | 0x1C<<7 | 0x34, + 26150 - 19968: jis0212<<14 | 0x21<<7 | 0x05, + 26151 - 19968: jis0208<<14 | 0x2A<<7 | 0x45, + 26152 - 19968: jis0208<<14 | 0x19<<7 | 0x51, + 26153 - 19968: jis0212<<14 | 0x21<<7 | 0x06, + 26154 - 19968: jis0212<<14 | 0x21<<7 | 0x07, + 26155 - 19968: jis0212<<14 | 0x21<<7 | 0x08, + 26156 - 19968: jis0212<<14 | 0x21<<7 | 0x09, + 26157 - 19968: jis0208<<14 | 0x1D<<7 | 0x1B, + 26158 - 19968: jis0208<<14 | 0x59<<7 | 0x17, + 26159 - 19968: jis0208<<14 | 0x1F<<7 | 0x06, + 26160 - 19968: jis0212<<14 | 0x21<<7 | 0x0B, + 26161 - 19968: jis0208<<14 | 0x58<<7 | 0x07, + 26163 - 19968: jis0212<<14 | 0x21<<7 | 0x0D, + 26164 - 19968: jis0208<<14 | 0x39<<7 | 0x44, + 26165 - 19968: jis0208<<14 | 0x39<<7 | 0x42, + 26166 - 19968: jis0208<<14 | 0x39<<7 | 0x43, + 26167 - 19968: jis0212<<14 | 0x21<<7 | 0x0F, + 26169 - 19968: jis0212<<14 | 0x21<<7 | 0x0E, + 26171 - 19968: jis0208<<14 | 0x59<<7 | 0x15, + 26172 - 19968: jis0208<<14 | 0x22<<7 | 0x4A, + 26175 - 19968: jis0208<<14 | 0x3A<<7 | 0x05, + 26176 - 19968: jis0212<<14 | 0x21<<7 | 0x10, + 26177 - 19968: jis0208<<14 | 0x39<<7 | 0x49, + 26178 - 19968: jis0208<<14 | 0x1A<<7 | 0x5D, + 26179 - 19968: jis0208<<14 | 0x18<<7 | 0x17, + 26180 - 19968: jis0208<<14 | 0x39<<7 | 0x47, + 26181 - 19968: jis0212<<14 | 0x21<<7 | 0x11, + 26182 - 19968: jis0212<<14 | 0x21<<7 | 0x12, + 26185 - 19968: jis0208<<14 | 0x39<<7 | 0x48, + 26186 - 19968: jis0212<<14 | 0x21<<7 | 0x13, + 26187 - 19968: jis0208<<14 | 0x1E<<7 | 0x17, + 26188 - 19968: jis0212<<14 | 0x21<<7 | 0x14, + 26190 - 19968: jis0212<<14 | 0x21<<7 | 0x16, + 26191 - 19968: jis0208<<14 | 0x39<<7 | 0x46, + 26193 - 19968: jis0212<<14 | 0x21<<7 | 0x15, + 26194 - 19968: jis0208<<14 | 0x1A<<7 | 0x0E, + 26199 - 19968: jis0208<<14 | 0x59<<7 | 0x1B, + 26200 - 19968: jis0212<<14 | 0x21<<7 | 0x18, + 26201 - 19968: jis0208<<14 | 0x59<<7 | 0x1C, + 26203 - 19968: jis0212<<14 | 0x21<<7 | 0x1A, + 26204 - 19968: jis0212<<14 | 0x21<<7 | 0x1B, + 26205 - 19968: jis0208<<14 | 0x39<<7 | 0x4B, + 26206 - 19968: jis0208<<14 | 0x39<<7 | 0x4A, + 26207 - 19968: jis0208<<14 | 0x39<<7 | 0x4F, + 26208 - 19968: jis0212<<14 | 0x21<<7 | 0x1C, + 26209 - 19968: jis0212<<14 | 0x21<<7 | 0x1D, + 26210 - 19968: jis0208<<14 | 0x39<<7 | 0x50, + 26212 - 19968: jis0208<<14 | 0x39<<7 | 0x4C, + 26213 - 19968: jis0208<<14 | 0x59<<7 | 0x1A, + 26214 - 19968: jis0208<<14 | 0x12<<7 | 0x01, + 26215 - 19968: jis0208<<14 | 0x39<<7 | 0x4D, + 26216 - 19968: jis0208<<14 | 0x39<<7 | 0x4E, + 26217 - 19968: jis0208<<14 | 0x27<<7 | 0x34, + 26218 - 19968: jis0212<<14 | 0x21<<7 | 0x1F, + 26219 - 19968: jis0212<<14 | 0x21<<7 | 0x20, + 26220 - 19968: jis0212<<14 | 0x21<<7 | 0x21, + 26222 - 19968: jis0208<<14 | 0x28<<7 | 0x40, + 26223 - 19968: jis0208<<14 | 0x16<<7 | 0x29, + 26224 - 19968: jis0208<<14 | 0x39<<7 | 0x51, + 26227 - 19968: jis0208<<14 | 0x59<<7 | 0x1E, + 26228 - 19968: jis0208<<14 | 0x1F<<7 | 0x11, + 26229 - 19968: jis0212<<14 | 0x21<<7 | 0x24, + 26230 - 19968: jis0208<<14 | 0x1D<<7 | 0x1C, + 26231 - 19968: jis0212<<14 | 0x21<<7 | 0x26, + 26232 - 19968: jis0212<<14 | 0x21<<7 | 0x27, + 26233 - 19968: jis0212<<14 | 0x21<<7 | 0x28, + 26234 - 19968: jis0208<<14 | 0x22<<7 | 0x31, + 26235 - 19968: jis0212<<14 | 0x21<<7 | 0x29, + 26236 - 19968: jis0212<<14 | 0x21<<7 | 0x2B, + 26238 - 19968: jis0212<<14 | 0x21<<7 | 0x22, + 26239 - 19968: jis0212<<14 | 0x21<<7 | 0x25, + 26240 - 19968: jis0212<<14 | 0x21<<7 | 0x2A, + 26241 - 19968: jis0208<<14 | 0x15<<7 | 0x26, + 26243 - 19968: jis0208<<14 | 0x39<<7 | 0x52, + 26244 - 19968: jis0208<<14 | 0x39<<7 | 0x56, + 26247 - 19968: jis0208<<14 | 0x11<<7 | 0x2A, + 26248 - 19968: jis0208<<14 | 0x39<<7 | 0x53, + 26249 - 19968: jis0208<<14 | 0x39<<7 | 0x55, + 26251 - 19968: jis0212<<14 | 0x21<<7 | 0x2C, + 26252 - 19968: jis0212<<14 | 0x21<<7 | 0x2D, + 26253 - 19968: jis0212<<14 | 0x21<<7 | 0x2E, + 26254 - 19968: jis0208<<14 | 0x39<<7 | 0x54, + 26256 - 19968: jis0212<<14 | 0x21<<7 | 0x2F, + 26257 - 19968: jis0208<<14 | 0x1C<<7 | 0x4A, + 26258 - 19968: jis0212<<14 | 0x21<<7 | 0x30, + 26262 - 19968: jis0208<<14 | 0x22<<7 | 0x27, + 26263 - 19968: jis0208<<14 | 0x0F<<7 | 0x24, + 26264 - 19968: jis0208<<14 | 0x39<<7 | 0x57, + 26265 - 19968: jis0208<<14 | 0x59<<7 | 0x1F, + 26266 - 19968: jis0212<<14 | 0x21<<7 | 0x32, + 26267 - 19968: jis0212<<14 | 0x21<<7 | 0x33, + 26268 - 19968: jis0212<<14 | 0x21<<7 | 0x34, + 26269 - 19968: jis0208<<14 | 0x39<<7 | 0x58, + 26271 - 19968: jis0212<<14 | 0x21<<7 | 0x35, + 26272 - 19968: jis0208<<14 | 0x59<<7 | 0x20, + 26274 - 19968: jis0208<<14 | 0x23<<7 | 0x09, + 26276 - 19968: jis0212<<14 | 0x21<<7 | 0x37, + 26278 - 19968: jis0208<<14 | 0x2D<<7 | 0x50, + 26283 - 19968: jis0208<<14 | 0x1A<<7 | 0x22, + 26285 - 19968: jis0212<<14 | 0x21<<7 | 0x38, + 26286 - 19968: jis0208<<14 | 0x29<<7 | 0x4A, + 26289 - 19968: jis0212<<14 | 0x21<<7 | 0x39, + 26290 - 19968: jis0208<<14 | 0x59<<7 | 0x21, + 26292 - 19968: jis0208<<14 | 0x2A<<7 | 0x1C, + 26293 - 19968: jis0212<<14 | 0x21<<7 | 0x3B, + 26296 - 19968: jis0208<<14 | 0x3A<<7 | 0x01, + 26297 - 19968: jis0208<<14 | 0x39<<7 | 0x5A, + 26299 - 19968: jis0212<<14 | 0x21<<7 | 0x3C, + 26300 - 19968: jis0208<<14 | 0x39<<7 | 0x5D, + 26302 - 19968: jis0208<<14 | 0x39<<7 | 0x5C, + 26303 - 19968: jis0208<<14 | 0x59<<7 | 0x22, + 26304 - 19968: jis0212<<14 | 0x21<<7 | 0x3E, + 26305 - 19968: jis0208<<14 | 0x39<<7 | 0x59, + 26306 - 19968: jis0212<<14 | 0x21<<7 | 0x3F, + 26307 - 19968: jis0212<<14 | 0x21<<7 | 0x40, + 26308 - 19968: jis0208<<14 | 0x3A<<7 | 0x00, + 26311 - 19968: jis0208<<14 | 0x25<<7 | 0x3D, + 26312 - 19968: jis0212<<14 | 0x21<<7 | 0x41, + 26313 - 19968: jis0208<<14 | 0x39<<7 | 0x5B, + 26316 - 19968: jis0212<<14 | 0x21<<7 | 0x42, + 26318 - 19968: jis0212<<14 | 0x21<<7 | 0x43, + 26319 - 19968: jis0212<<14 | 0x21<<7 | 0x44, + 26324 - 19968: jis0212<<14 | 0x21<<7 | 0x45, + 26326 - 19968: jis0208<<14 | 0x3A<<7 | 0x02, + 26329 - 19968: jis0208<<14 | 0x1C<<7 | 0x4B, + 26330 - 19968: jis0208<<14 | 0x3A<<7 | 0x03, + 26331 - 19968: jis0212<<14 | 0x21<<7 | 0x46, + 26332 - 19968: jis0208<<14 | 0x2C<<7 | 0x2A, + 26333 - 19968: jis0208<<14 | 0x26<<7 | 0x57, + 26335 - 19968: jis0212<<14 | 0x21<<7 | 0x47, + 26336 - 19968: jis0208<<14 | 0x3A<<7 | 0x04, + 26342 - 19968: jis0208<<14 | 0x3A<<7 | 0x06, + 26344 - 19968: jis0212<<14 | 0x21<<7 | 0x48, + 26345 - 19968: jis0208<<14 | 0x3A<<7 | 0x07, + 26347 - 19968: jis0212<<14 | 0x21<<7 | 0x49, + 26348 - 19968: jis0212<<14 | 0x21<<7 | 0x4A, + 26350 - 19968: jis0212<<14 | 0x21<<7 | 0x4B, + 26352 - 19968: jis0208<<14 | 0x3A<<7 | 0x08, + 26354 - 19968: jis0208<<14 | 0x15<<7 | 0x29, + 26355 - 19968: jis0208<<14 | 0x10<<7 | 0x27, + 26356 - 19968: jis0208<<14 | 0x18<<7 | 0x18, + 26357 - 19968: jis0208<<14 | 0x3A<<7 | 0x09, + 26359 - 19968: jis0208<<14 | 0x3A<<7 | 0x0A, + 26360 - 19968: jis0208<<14 | 0x1C<<7 | 0x50, + 26361 - 19968: jis0208<<14 | 0x20<<7 | 0x41, + 26362 - 19968: jis0208<<14 | 0x59<<7 | 0x23, + 26363 - 19968: jis0208<<14 | 0x58<<7 | 0x0A, + 26364 - 19968: jis0208<<14 | 0x31<<7 | 0x37, + 26365 - 19968: jis0208<<14 | 0x20<<7 | 0x1D, + 26366 - 19968: jis0208<<14 | 0x20<<7 | 0x1C, + 26367 - 19968: jis0208<<14 | 0x21<<7 | 0x37, + 26368 - 19968: jis0208<<14 | 0x19<<7 | 0x26, + 26371 - 19968: jis0208<<14 | 0x2F<<7 | 0x51, + 26373 - 19968: jis0212<<14 | 0x21<<7 | 0x4D, + 26375 - 19968: jis0212<<14 | 0x21<<7 | 0x4E, + 26376 - 19968: jis0208<<14 | 0x16<<7 | 0x4D, + 26377 - 19968: jis0208<<14 | 0x2C<<7 | 0x0C, + 26379 - 19968: jis0208<<14 | 0x29<<7 | 0x5D, + 26381 - 19968: jis0208<<14 | 0x28<<7 | 0x5D, + 26382 - 19968: jis0208<<14 | 0x59<<7 | 0x24, + 26383 - 19968: jis0208<<14 | 0x3A<<7 | 0x0B, + 26387 - 19968: jis0212<<14 | 0x21<<7 | 0x50, + 26388 - 19968: jis0208<<14 | 0x19<<7 | 0x52, + 26389 - 19968: jis0208<<14 | 0x23<<7 | 0x1E, + 26390 - 19968: jis0208<<14 | 0x3A<<7 | 0x0C, + 26391 - 19968: jis0208<<14 | 0x2E<<7 | 0x0E, + 26393 - 19968: jis0212<<14 | 0x21<<7 | 0x51, + 26395 - 19968: jis0208<<14 | 0x2A<<7 | 0x1D, + 26396 - 19968: jis0212<<14 | 0x21<<7 | 0x52, + 26397 - 19968: jis0208<<14 | 0x23<<7 | 0x0A, + 26398 - 19968: jis0208<<14 | 0x3A<<7 | 0x0D, + 26399 - 19968: jis0208<<14 | 0x13<<7 | 0x5B, + 26400 - 19968: jis0212<<14 | 0x21<<7 | 0x53, + 26402 - 19968: jis0212<<14 | 0x21<<7 | 0x54, + 26406 - 19968: jis0208<<14 | 0x3A<<7 | 0x0E, + 26407 - 19968: jis0208<<14 | 0x3A<<7 | 0x0F, + 26408 - 19968: jis0208<<14 | 0x2B<<7 | 0x39, + 26410 - 19968: jis0208<<14 | 0x2B<<7 | 0x03, + 26411 - 19968: jis0208<<14 | 0x2A<<7 | 0x55, + 26412 - 19968: jis0208<<14 | 0x2A<<7 | 0x3B, + 26413 - 19968: jis0208<<14 | 0x1A<<7 | 0x04, + 26414 - 19968: jis0208<<14 | 0x3A<<7 | 0x11, + 26417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4A, + 26419 - 19968: jis0212<<14 | 0x21<<7 | 0x55, + 26420 - 19968: jis0208<<14 | 0x2A<<7 | 0x30, + 26422 - 19968: jis0208<<14 | 0x3A<<7 | 0x13, + 26423 - 19968: jis0208<<14 | 0x3A<<7 | 0x16, + 26424 - 19968: jis0208<<14 | 0x3A<<7 | 0x15, + 26426 - 19968: jis0208<<14 | 0x13<<7 | 0x58, + 26429 - 19968: jis0208<<14 | 0x14<<7 | 0x3F, + 26430 - 19968: jis0212<<14 | 0x21<<7 | 0x56, + 26431 - 19968: jis0208<<14 | 0x3A<<7 | 0x12, + 26433 - 19968: jis0208<<14 | 0x3A<<7 | 0x14, + 26437 - 19968: jis0212<<14 | 0x21<<7 | 0x57, + 26438 - 19968: jis0208<<14 | 0x3A<<7 | 0x17, + 26439 - 19968: jis0212<<14 | 0x21<<7 | 0x58, + 26440 - 19968: jis0212<<14 | 0x21<<7 | 0x59, + 26441 - 19968: jis0208<<14 | 0x1E<<7 | 0x58, + 26444 - 19968: jis0212<<14 | 0x21<<7 | 0x5A, + 26446 - 19968: jis0208<<14 | 0x2C<<7 | 0x5A, + 26447 - 19968: jis0208<<14 | 0x0F<<7 | 0x28, + 26448 - 19968: jis0208<<14 | 0x19<<7 | 0x3F, + 26449 - 19968: jis0208<<14 | 0x21<<7 | 0x1B, + 26451 - 19968: jis0208<<14 | 0x1B<<7 | 0x3C, + 26452 - 19968: jis0212<<14 | 0x21<<7 | 0x5B, + 26453 - 19968: jis0212<<14 | 0x21<<7 | 0x5C, + 26454 - 19968: jis0208<<14 | 0x1D<<7 | 0x52, + 26457 - 19968: jis0208<<14 | 0x3A<<7 | 0x1A, + 26460 - 19968: jis0208<<14 | 0x24<<7 | 0x2D, + 26461 - 19968: jis0212<<14 | 0x21<<7 | 0x5D, + 26462 - 19968: jis0208<<14 | 0x3A<<7 | 0x18, + 26463 - 19968: jis0208<<14 | 0x21<<7 | 0x0A, + 26464 - 19968: jis0208<<14 | 0x3A<<7 | 0x19, + 26465 - 19968: jis0208<<14 | 0x1D<<7 | 0x51, + 26466 - 19968: jis0208<<14 | 0x2B<<7 | 0x3C, + 26467 - 19968: jis0208<<14 | 0x3A<<7 | 0x1B, + 26468 - 19968: jis0208<<14 | 0x3A<<7 | 0x1C, + 26469 - 19968: jis0208<<14 | 0x2C<<7 | 0x47, + 26470 - 19968: jis0208<<14 | 0x59<<7 | 0x26, + 26474 - 19968: jis0208<<14 | 0x3A<<7 | 0x21, + 26476 - 19968: jis0212<<14 | 0x22<<7 | 0x01, + 26477 - 19968: jis0208<<14 | 0x18<<7 | 0x19, + 26478 - 19968: jis0212<<14 | 0x22<<7 | 0x02, + 26479 - 19968: jis0208<<14 | 0x26<<7 | 0x34, + 26480 - 19968: jis0208<<14 | 0x3A<<7 | 0x1E, + 26481 - 19968: jis0208<<14 | 0x24<<7 | 0x4B, + 26482 - 19968: jis0208<<14 | 0x39<<7 | 0x3D, + 26483 - 19968: jis0208<<14 | 0x39<<7 | 0x41, + 26484 - 19968: jis0212<<14 | 0x22<<7 | 0x03, + 26485 - 19968: jis0208<<14 | 0x14<<7 | 0x2E, + 26486 - 19968: jis0212<<14 | 0x22<<7 | 0x04, + 26487 - 19968: jis0208<<14 | 0x26<<7 | 0x26, + 26491 - 19968: jis0212<<14 | 0x22<<7 | 0x05, + 26492 - 19968: jis0208<<14 | 0x3A<<7 | 0x20, + 26494 - 19968: jis0208<<14 | 0x1D<<7 | 0x1D, + 26495 - 19968: jis0208<<14 | 0x27<<7 | 0x23, + 26497 - 19968: jis0212<<14 | 0x22<<7 | 0x06, + 26500 - 19968: jis0212<<14 | 0x22<<7 | 0x07, + 26501 - 19968: jis0208<<14 | 0x3A<<7 | 0x26, + 26503 - 19968: jis0208<<14 | 0x27<<7 | 0x59, + 26505 - 19968: jis0208<<14 | 0x3A<<7 | 0x1D, + 26507 - 19968: jis0208<<14 | 0x3A<<7 | 0x23, + 26508 - 19968: jis0208<<14 | 0x3A<<7 | 0x22, + 26510 - 19968: jis0212<<14 | 0x22<<7 | 0x08, + 26511 - 19968: jis0212<<14 | 0x22<<7 | 0x09, + 26512 - 19968: jis0208<<14 | 0x1F<<7 | 0x2E, + 26513 - 19968: jis0212<<14 | 0x22<<7 | 0x0A, + 26515 - 19968: jis0212<<14 | 0x22<<7 | 0x0B, + 26517 - 19968: jis0208<<14 | 0x2A<<7 | 0x4C, + 26518 - 19968: jis0212<<14 | 0x22<<7 | 0x0C, + 26519 - 19968: jis0208<<14 | 0x2D<<7 | 0x32, + 26520 - 19968: jis0212<<14 | 0x22<<7 | 0x0D, + 26521 - 19968: jis0212<<14 | 0x22<<7 | 0x0E, + 26522 - 19968: jis0208<<14 | 0x2A<<7 | 0x46, + 26523 - 19968: jis0212<<14 | 0x22<<7 | 0x0F, + 26524 - 19968: jis0208<<14 | 0x11<<7 | 0x2B, + 26525 - 19968: jis0208<<14 | 0x1A<<7 | 0x3D, + 26528 - 19968: jis0208<<14 | 0x2E<<7 | 0x27, + 26529 - 19968: jis0208<<14 | 0x3A<<7 | 0x25, + 26530 - 19968: jis0208<<14 | 0x1E<<7 | 0x54, + 26534 - 19968: jis0208<<14 | 0x3A<<7 | 0x24, + 26537 - 19968: jis0208<<14 | 0x3A<<7 | 0x1F, + 26543 - 19968: jis0208<<14 | 0x17<<7 | 0x2E, + 26544 - 19968: jis0212<<14 | 0x22<<7 | 0x10, + 26545 - 19968: jis0212<<14 | 0x22<<7 | 0x11, + 26546 - 19968: jis0212<<14 | 0x22<<7 | 0x12, + 26547 - 19968: jis0208<<14 | 0x3A<<7 | 0x2B, + 26548 - 19968: jis0208<<14 | 0x3A<<7 | 0x29, + 26549 - 19968: jis0212<<14 | 0x22<<7 | 0x13, + 26550 - 19968: jis0208<<14 | 0x11<<7 | 0x2C, + 26551 - 19968: jis0208<<14 | 0x3A<<7 | 0x27, + 26552 - 19968: jis0208<<14 | 0x3A<<7 | 0x2D, + 26553 - 19968: jis0208<<14 | 0x3A<<7 | 0x33, + 26555 - 19968: jis0208<<14 | 0x59<<7 | 0x27, + 26556 - 19968: jis0212<<14 | 0x22<<7 | 0x15, + 26557 - 19968: jis0212<<14 | 0x22<<7 | 0x16, + 26560 - 19968: jis0208<<14 | 0x59<<7 | 0x29, + 26561 - 19968: jis0208<<14 | 0x21<<7 | 0x27, + 26562 - 19968: jis0212<<14 | 0x22<<7 | 0x19, + 26563 - 19968: jis0212<<14 | 0x22<<7 | 0x1A, + 26564 - 19968: jis0208<<14 | 0x29<<7 | 0x20, + 26565 - 19968: jis0212<<14 | 0x22<<7 | 0x1B, + 26566 - 19968: jis0208<<14 | 0x3A<<7 | 0x35, + 26568 - 19968: jis0212<<14 | 0x22<<7 | 0x1C, + 26569 - 19968: jis0212<<14 | 0x22<<7 | 0x1D, + 26570 - 19968: jis0208<<14 | 0x28<<7 | 0x01, + 26574 - 19968: jis0208<<14 | 0x3A<<7 | 0x34, + 26575 - 19968: jis0208<<14 | 0x26<<7 | 0x4F, + 26576 - 19968: jis0208<<14 | 0x2A<<7 | 0x1E, + 26577 - 19968: jis0208<<14 | 0x13<<7 | 0x1A, + 26578 - 19968: jis0212<<14 | 0x22<<7 | 0x1E, + 26579 - 19968: jis0208<<14 | 0x1F<<7 | 0x56, + 26580 - 19968: jis0208<<14 | 0x1C<<7 | 0x1F, + 26583 - 19968: jis0212<<14 | 0x22<<7 | 0x1F, + 26584 - 19968: jis0208<<14 | 0x23<<7 | 0x32, + 26585 - 19968: jis0212<<14 | 0x22<<7 | 0x20, + 26586 - 19968: jis0208<<14 | 0x2C<<7 | 0x0D, + 26588 - 19968: jis0212<<14 | 0x22<<7 | 0x21, + 26589 - 19968: jis0208<<14 | 0x3A<<7 | 0x30, + 26590 - 19968: jis0208<<14 | 0x3A<<7 | 0x2F, + 26593 - 19968: jis0212<<14 | 0x22<<7 | 0x22, + 26594 - 19968: jis0208<<14 | 0x3A<<7 | 0x31, + 26596 - 19968: jis0208<<14 | 0x3A<<7 | 0x2E, + 26598 - 19968: jis0212<<14 | 0x22<<7 | 0x23, + 26599 - 19968: jis0208<<14 | 0x3A<<7 | 0x36, + 26601 - 19968: jis0208<<14 | 0x3A<<7 | 0x2C, + 26604 - 19968: jis0208<<14 | 0x3A<<7 | 0x2A, + 26606 - 19968: jis0208<<14 | 0x3A<<7 | 0x32, + 26607 - 19968: jis0208<<14 | 0x3A<<7 | 0x28, + 26608 - 19968: jis0212<<14 | 0x22<<7 | 0x24, + 26609 - 19968: jis0208<<14 | 0x22<<7 | 0x4B, + 26610 - 19968: jis0212<<14 | 0x22<<7 | 0x25, + 26611 - 19968: jis0208<<14 | 0x2B<<7 | 0x57, + 26612 - 19968: jis0208<<14 | 0x1B<<7 | 0x25, + 26613 - 19968: jis0208<<14 | 0x19<<7 | 0x53, + 26614 - 19968: jis0212<<14 | 0x22<<7 | 0x26, + 26615 - 19968: jis0212<<14 | 0x22<<7 | 0x27, + 26617 - 19968: jis0212<<14 | 0x22<<7 | 0x17, + 26619 - 19968: jis0208<<14 | 0x19<<7 | 0x19, + 26622 - 19968: jis0208<<14 | 0x2A<<7 | 0x4E, + 26623 - 19968: jis0208<<14 | 0x12<<7 | 0x20, + 26625 - 19968: jis0208<<14 | 0x59<<7 | 0x2A, + 26626 - 19968: jis0208<<14 | 0x23<<7 | 0x2D, + 26627 - 19968: jis0208<<14 | 0x25<<7 | 0x29, + 26628 - 19968: jis0208<<14 | 0x10<<7 | 0x28, + 26643 - 19968: jis0208<<14 | 0x1F<<7 | 0x51, + 26644 - 19968: jis0212<<14 | 0x22<<7 | 0x29, + 26646 - 19968: jis0208<<14 | 0x1F<<7 | 0x13, + 26647 - 19968: jis0208<<14 | 0x16<<7 | 0x09, + 26649 - 19968: jis0212<<14 | 0x22<<7 | 0x2A, + 26653 - 19968: jis0212<<14 | 0x22<<7 | 0x2B, + 26654 - 19968: jis0208<<14 | 0x3A<<7 | 0x38, + 26655 - 19968: jis0212<<14 | 0x22<<7 | 0x2C, + 26657 - 19968: jis0208<<14 | 0x18<<7 | 0x1A, + 26658 - 19968: jis0208<<14 | 0x12<<7 | 0x5B, + 26663 - 19968: jis0212<<14 | 0x22<<7 | 0x2E, + 26664 - 19968: jis0212<<14 | 0x22<<7 | 0x2D, + 26665 - 19968: jis0208<<14 | 0x3A<<7 | 0x3A, + 26666 - 19968: jis0208<<14 | 0x12<<7 | 0x53, + 26667 - 19968: jis0208<<14 | 0x3A<<7 | 0x40, + 26668 - 19968: jis0212<<14 | 0x22<<7 | 0x2F, + 26669 - 19968: jis0212<<14 | 0x22<<7 | 0x30, + 26671 - 19968: jis0212<<14 | 0x22<<7 | 0x31, + 26672 - 19968: jis0212<<14 | 0x22<<7 | 0x32, + 26673 - 19968: jis0212<<14 | 0x22<<7 | 0x33, + 26674 - 19968: jis0208<<14 | 0x3A<<7 | 0x3D, + 26675 - 19968: jis0212<<14 | 0x22<<7 | 0x34, + 26676 - 19968: jis0208<<14 | 0x1F<<7 | 0x52, + 26680 - 19968: jis0208<<14 | 0x12<<7 | 0x2A, + 26681 - 19968: jis0208<<14 | 0x19<<7 | 0x0B, + 26683 - 19968: jis0212<<14 | 0x22<<7 | 0x35, + 26684 - 19968: jis0208<<14 | 0x12<<7 | 0x29, + 26685 - 19968: jis0208<<14 | 0x19<<7 | 0x2E, + 26687 - 19968: jis0212<<14 | 0x22<<7 | 0x36, + 26688 - 19968: jis0208<<14 | 0x3A<<7 | 0x3B, + 26689 - 19968: jis0208<<14 | 0x16<<7 | 0x44, + 26690 - 19968: jis0208<<14 | 0x16<<7 | 0x2A, + 26691 - 19968: jis0208<<14 | 0x24<<7 | 0x4C, + 26692 - 19968: jis0208<<14 | 0x59<<7 | 0x2B, + 26693 - 19968: jis0212<<14 | 0x22<<7 | 0x38, + 26694 - 19968: jis0208<<14 | 0x3A<<7 | 0x39, + 26696 - 19968: jis0208<<14 | 0x0F<<7 | 0x25, + 26698 - 19968: jis0212<<14 | 0x22<<7 | 0x39, + 26700 - 19968: jis0212<<14 | 0x22<<7 | 0x3A, + 26701 - 19968: jis0208<<14 | 0x3A<<7 | 0x3C, + 26702 - 19968: jis0208<<14 | 0x3A<<7 | 0x3E, + 26704 - 19968: jis0208<<14 | 0x15<<7 | 0x2C, + 26705 - 19968: jis0208<<14 | 0x16<<7 | 0x0B, + 26706 - 19968: jis0208<<14 | 0x59<<7 | 0x28, + 26707 - 19968: jis0208<<14 | 0x13<<7 | 0x1B, + 26708 - 19968: jis0208<<14 | 0x14<<7 | 0x2A, + 26709 - 19968: jis0212<<14 | 0x22<<7 | 0x3B, + 26711 - 19968: jis0212<<14 | 0x22<<7 | 0x3C, + 26712 - 19968: jis0212<<14 | 0x22<<7 | 0x3D, + 26713 - 19968: jis0208<<14 | 0x3A<<7 | 0x41, + 26715 - 19968: jis0212<<14 | 0x22<<7 | 0x3E, + 26716 - 19968: jis0208<<14 | 0x19<<7 | 0x58, + 26717 - 19968: jis0208<<14 | 0x2A<<7 | 0x50, + 26719 - 19968: jis0208<<14 | 0x1A<<7 | 0x16, + 26723 - 19968: jis0208<<14 | 0x3A<<7 | 0x42, + 26727 - 19968: jis0208<<14 | 0x28<<7 | 0x0F, + 26731 - 19968: jis0212<<14 | 0x22<<7 | 0x3F, + 26734 - 19968: jis0212<<14 | 0x22<<7 | 0x40, + 26735 - 19968: jis0212<<14 | 0x22<<7 | 0x41, + 26736 - 19968: jis0212<<14 | 0x22<<7 | 0x42, + 26737 - 19968: jis0212<<14 | 0x22<<7 | 0x43, + 26738 - 19968: jis0212<<14 | 0x22<<7 | 0x44, + 26740 - 19968: jis0208<<14 | 0x3A<<7 | 0x4E, + 26741 - 19968: jis0212<<14 | 0x22<<7 | 0x45, + 26742 - 19968: jis0208<<14 | 0x11<<7 | 0x12, + 26743 - 19968: jis0208<<14 | 0x3A<<7 | 0x43, + 26745 - 19968: jis0212<<14 | 0x22<<7 | 0x46, + 26746 - 19968: jis0212<<14 | 0x22<<7 | 0x47, + 26747 - 19968: jis0212<<14 | 0x22<<7 | 0x48, + 26748 - 19968: jis0212<<14 | 0x22<<7 | 0x49, + 26750 - 19968: jis0208<<14 | 0x3A<<7 | 0x54, + 26751 - 19968: jis0208<<14 | 0x3A<<7 | 0x44, + 26753 - 19968: jis0208<<14 | 0x2D<<7 | 0x21, + 26754 - 19968: jis0212<<14 | 0x22<<7 | 0x4A, + 26755 - 19968: jis0208<<14 | 0x3A<<7 | 0x4B, + 26756 - 19968: jis0212<<14 | 0x22<<7 | 0x4B, + 26757 - 19968: jis0208<<14 | 0x26<<7 | 0x3E, + 26758 - 19968: jis0212<<14 | 0x22<<7 | 0x4C, + 26760 - 19968: jis0212<<14 | 0x22<<7 | 0x4D, + 26765 - 19968: jis0208<<14 | 0x3A<<7 | 0x53, + 26767 - 19968: jis0208<<14 | 0x3A<<7 | 0x46, + 26771 - 19968: jis0208<<14 | 0x0F<<7 | 0x13, + 26772 - 19968: jis0208<<14 | 0x3A<<7 | 0x48, + 26774 - 19968: jis0212<<14 | 0x22<<7 | 0x4E, + 26775 - 19968: jis0208<<14 | 0x18<<7 | 0x1B, + 26776 - 19968: jis0212<<14 | 0x22<<7 | 0x4F, + 26778 - 19968: jis0212<<14 | 0x22<<7 | 0x50, + 26779 - 19968: jis0208<<14 | 0x3A<<7 | 0x4A, + 26780 - 19968: jis0212<<14 | 0x22<<7 | 0x51, + 26781 - 19968: jis0208<<14 | 0x3A<<7 | 0x49, + 26783 - 19968: jis0208<<14 | 0x3A<<7 | 0x45, + 26784 - 19968: jis0208<<14 | 0x3A<<7 | 0x50, + 26785 - 19968: jis0212<<14 | 0x22<<7 | 0x52, + 26786 - 19968: jis0208<<14 | 0x1D<<7 | 0x1E, + 26787 - 19968: jis0212<<14 | 0x22<<7 | 0x53, + 26789 - 19968: jis0212<<14 | 0x22<<7 | 0x54, + 26790 - 19968: jis0208<<14 | 0x33<<7 | 0x4C, + 26791 - 19968: jis0208<<14 | 0x17<<7 | 0x47, + 26792 - 19968: jis0208<<14 | 0x2C<<7 | 0x5B, + 26793 - 19968: jis0212<<14 | 0x22<<7 | 0x55, + 26794 - 19968: jis0212<<14 | 0x22<<7 | 0x56, + 26797 - 19968: jis0208<<14 | 0x3A<<7 | 0x47, + 26798 - 19968: jis0212<<14 | 0x22<<7 | 0x57, + 26799 - 19968: jis0208<<14 | 0x23<<7 | 0x53, + 26800 - 19968: jis0208<<14 | 0x12<<7 | 0x02, + 26801 - 19968: jis0208<<14 | 0x19<<7 | 0x0C, + 26802 - 19968: jis0212<<14 | 0x22<<7 | 0x58, + 26803 - 19968: jis0208<<14 | 0x3A<<7 | 0x3F, + 26805 - 19968: jis0208<<14 | 0x3A<<7 | 0x4F, + 26806 - 19968: jis0208<<14 | 0x12<<7 | 0x40, + 26809 - 19968: jis0208<<14 | 0x3A<<7 | 0x4D, + 26810 - 19968: jis0208<<14 | 0x3A<<7 | 0x51, + 26811 - 19968: jis0212<<14 | 0x22<<7 | 0x59, + 26812 - 19968: jis0208<<14 | 0x24<<7 | 0x4D, + 26820 - 19968: jis0208<<14 | 0x13<<7 | 0x5D, + 26821 - 19968: jis0212<<14 | 0x22<<7 | 0x5A, + 26822 - 19968: jis0208<<14 | 0x3B<<7 | 0x11, + 26824 - 19968: jis0208<<14 | 0x58<<7 | 0x08, + 26825 - 19968: jis0208<<14 | 0x2B<<7 | 0x28, + 26826 - 19968: jis0208<<14 | 0x3A<<7 | 0x56, + 26827 - 19968: jis0208<<14 | 0x13<<7 | 0x5C, + 26828 - 19968: jis0212<<14 | 0x22<<7 | 0x5C, + 26829 - 19968: jis0208<<14 | 0x3A<<7 | 0x5D, + 26831 - 19968: jis0208<<14 | 0x59<<7 | 0x2C, + 26832 - 19968: jis0212<<14 | 0x23<<7 | 0x00, + 26833 - 19968: jis0212<<14 | 0x23<<7 | 0x01, + 26834 - 19968: jis0208<<14 | 0x2A<<7 | 0x1F, + 26835 - 19968: jis0212<<14 | 0x23<<7 | 0x02, + 26836 - 19968: jis0208<<14 | 0x3B<<7 | 0x00, + 26837 - 19968: jis0208<<14 | 0x3B<<7 | 0x02, + 26838 - 19968: jis0212<<14 | 0x23<<7 | 0x03, + 26839 - 19968: jis0208<<14 | 0x3B<<7 | 0x06, + 26840 - 19968: jis0208<<14 | 0x3A<<7 | 0x58, + 26841 - 19968: jis0212<<14 | 0x23<<7 | 0x04, + 26842 - 19968: jis0208<<14 | 0x22<<7 | 0x09, + 26844 - 19968: jis0212<<14 | 0x23<<7 | 0x05, + 26845 - 19968: jis0212<<14 | 0x23<<7 | 0x06, + 26847 - 19968: jis0208<<14 | 0x24<<7 | 0x4E, + 26848 - 19968: jis0208<<14 | 0x3B<<7 | 0x0A, + 26849 - 19968: jis0208<<14 | 0x3A<<7 | 0x5B, + 26851 - 19968: jis0208<<14 | 0x3B<<7 | 0x07, + 26853 - 19968: jis0212<<14 | 0x23<<7 | 0x07, + 26855 - 19968: jis0208<<14 | 0x3B<<7 | 0x01, + 26856 - 19968: jis0212<<14 | 0x23<<7 | 0x08, + 26858 - 19968: jis0212<<14 | 0x23<<7 | 0x09, + 26859 - 19968: jis0212<<14 | 0x23<<7 | 0x0A, + 26860 - 19968: jis0212<<14 | 0x23<<7 | 0x0B, + 26861 - 19968: jis0212<<14 | 0x23<<7 | 0x0C, + 26862 - 19968: jis0208<<14 | 0x1E<<7 | 0x18, + 26863 - 19968: jis0208<<14 | 0x3B<<7 | 0x0B, + 26864 - 19968: jis0212<<14 | 0x23<<7 | 0x0D, + 26865 - 19968: jis0212<<14 | 0x23<<7 | 0x0E, + 26866 - 19968: jis0208<<14 | 0x1F<<7 | 0x12, + 26869 - 19968: jis0212<<14 | 0x23<<7 | 0x0F, + 26870 - 19968: jis0212<<14 | 0x23<<7 | 0x10, + 26873 - 19968: jis0208<<14 | 0x3B<<7 | 0x09, + 26874 - 19968: jis0208<<14 | 0x13<<7 | 0x1C, + 26875 - 19968: jis0212<<14 | 0x23<<7 | 0x11, + 26876 - 19968: jis0212<<14 | 0x23<<7 | 0x12, + 26877 - 19968: jis0212<<14 | 0x23<<7 | 0x13, + 26880 - 19968: jis0208<<14 | 0x2E<<7 | 0x2F, + 26881 - 19968: jis0208<<14 | 0x3A<<7 | 0x55, + 26884 - 19968: jis0208<<14 | 0x3B<<7 | 0x05, + 26885 - 19968: jis0208<<14 | 0x0F<<7 | 0x37, + 26886 - 19968: jis0212<<14 | 0x23<<7 | 0x14, + 26888 - 19968: jis0208<<14 | 0x3A<<7 | 0x57, + 26889 - 19968: jis0212<<14 | 0x23<<7 | 0x15, + 26890 - 19968: jis0212<<14 | 0x23<<7 | 0x16, + 26891 - 19968: jis0208<<14 | 0x2B<<7 | 0x19, + 26892 - 19968: jis0208<<14 | 0x3A<<7 | 0x5C, + 26893 - 19968: jis0208<<14 | 0x1E<<7 | 0x01, + 26894 - 19968: jis0208<<14 | 0x23<<7 | 0x26, + 26895 - 19968: jis0208<<14 | 0x3A<<7 | 0x52, + 26896 - 19968: jis0212<<14 | 0x23<<7 | 0x17, + 26897 - 19968: jis0212<<14 | 0x23<<7 | 0x18, + 26898 - 19968: jis0208<<14 | 0x3B<<7 | 0x04, + 26899 - 19968: jis0212<<14 | 0x23<<7 | 0x19, + 26902 - 19968: jis0212<<14 | 0x23<<7 | 0x1A, + 26903 - 19968: jis0212<<14 | 0x23<<7 | 0x1B, + 26905 - 19968: jis0208<<14 | 0x1E<<7 | 0x59, + 26906 - 19968: jis0208<<14 | 0x3B<<7 | 0x0E, + 26907 - 19968: jis0208<<14 | 0x12<<7 | 0x50, + 26908 - 19968: jis0208<<14 | 0x17<<7 | 0x00, + 26913 - 19968: jis0208<<14 | 0x3B<<7 | 0x10, + 26914 - 19968: jis0208<<14 | 0x3A<<7 | 0x59, + 26915 - 19968: jis0208<<14 | 0x3B<<7 | 0x0F, + 26917 - 19968: jis0208<<14 | 0x3B<<7 | 0x08, + 26918 - 19968: jis0208<<14 | 0x3A<<7 | 0x5A, + 26920 - 19968: jis0208<<14 | 0x3B<<7 | 0x0C, + 26922 - 19968: jis0208<<14 | 0x3B<<7 | 0x0D, + 26928 - 19968: jis0208<<14 | 0x3B<<7 | 0x1E, + 26929 - 19968: jis0212<<14 | 0x23<<7 | 0x1C, + 26931 - 19968: jis0212<<14 | 0x23<<7 | 0x1D, + 26932 - 19968: jis0208<<14 | 0x25<<7 | 0x2D, + 26933 - 19968: jis0212<<14 | 0x23<<7 | 0x1E, + 26934 - 19968: jis0208<<14 | 0x3B<<7 | 0x03, + 26936 - 19968: jis0212<<14 | 0x23<<7 | 0x1F, + 26937 - 19968: jis0208<<14 | 0x3B<<7 | 0x1A, + 26939 - 19968: jis0212<<14 | 0x23<<7 | 0x20, + 26941 - 19968: jis0208<<14 | 0x3B<<7 | 0x1C, + 26943 - 19968: jis0208<<14 | 0x23<<7 | 0x37, + 26946 - 19968: jis0212<<14 | 0x23<<7 | 0x21, + 26949 - 19968: jis0212<<14 | 0x23<<7 | 0x22, + 26953 - 19968: jis0212<<14 | 0x23<<7 | 0x23, + 26954 - 19968: jis0208<<14 | 0x2C<<7 | 0x2B, + 26958 - 19968: jis0212<<14 | 0x23<<7 | 0x24, + 26963 - 19968: jis0208<<14 | 0x28<<7 | 0x55, + 26964 - 19968: jis0208<<14 | 0x3B<<7 | 0x17, + 26965 - 19968: jis0208<<14 | 0x21<<7 | 0x29, + 26967 - 19968: jis0212<<14 | 0x23<<7 | 0x25, + 26969 - 19968: jis0208<<14 | 0x3B<<7 | 0x1D, + 26970 - 19968: jis0208<<14 | 0x20<<7 | 0x1E, + 26971 - 19968: jis0212<<14 | 0x23<<7 | 0x26, + 26972 - 19968: jis0208<<14 | 0x3B<<7 | 0x14, + 26973 - 19968: jis0208<<14 | 0x3B<<7 | 0x21, + 26974 - 19968: jis0208<<14 | 0x3B<<7 | 0x20, + 26976 - 19968: jis0208<<14 | 0x25<<7 | 0x4E, + 26977 - 19968: jis0208<<14 | 0x3B<<7 | 0x1F, + 26978 - 19968: jis0208<<14 | 0x25<<7 | 0x49, + 26979 - 19968: jis0212<<14 | 0x23<<7 | 0x27, + 26980 - 19968: jis0212<<14 | 0x23<<7 | 0x28, + 26981 - 19968: jis0212<<14 | 0x23<<7 | 0x29, + 26982 - 19968: jis0212<<14 | 0x23<<7 | 0x2A, + 26984 - 19968: jis0208<<14 | 0x59<<7 | 0x2E, + 26985 - 19968: jis0212<<14 | 0x23<<7 | 0x2C, + 26986 - 19968: jis0208<<14 | 0x3B<<7 | 0x23, + 26987 - 19968: jis0208<<14 | 0x3B<<7 | 0x16, + 26988 - 19968: jis0212<<14 | 0x23<<7 | 0x2D, + 26989 - 19968: jis0208<<14 | 0x15<<7 | 0x27, + 26990 - 19968: jis0208<<14 | 0x3B<<7 | 0x19, + 26991 - 19968: jis0208<<14 | 0x1C<<7 | 0x3C, + 26992 - 19968: jis0212<<14 | 0x23<<7 | 0x2E, + 26993 - 19968: jis0212<<14 | 0x23<<7 | 0x2F, + 26994 - 19968: jis0212<<14 | 0x23<<7 | 0x30, + 26995 - 19968: jis0208<<14 | 0x26<<7 | 0x3F, + 26996 - 19968: jis0208<<14 | 0x3B<<7 | 0x1B, + 26997 - 19968: jis0208<<14 | 0x15<<7 | 0x2A, + 26999 - 19968: jis0208<<14 | 0x3B<<7 | 0x13, + 27000 - 19968: jis0208<<14 | 0x3B<<7 | 0x15, + 27001 - 19968: jis0208<<14 | 0x3B<<7 | 0x12, + 27002 - 19968: jis0212<<14 | 0x23<<7 | 0x31, + 27003 - 19968: jis0212<<14 | 0x23<<7 | 0x32, + 27004 - 19968: jis0208<<14 | 0x2E<<7 | 0x0F, + 27005 - 19968: jis0208<<14 | 0x12<<7 | 0x39, + 27006 - 19968: jis0208<<14 | 0x3B<<7 | 0x18, + 27007 - 19968: jis0212<<14 | 0x23<<7 | 0x33, + 27008 - 19968: jis0212<<14 | 0x23<<7 | 0x34, + 27009 - 19968: jis0208<<14 | 0x3B<<7 | 0x22, + 27010 - 19968: jis0208<<14 | 0x12<<7 | 0x14, + 27018 - 19968: jis0208<<14 | 0x19<<7 | 0x46, + 27021 - 19968: jis0212<<14 | 0x23<<7 | 0x35, + 27022 - 19968: jis0208<<14 | 0x10<<7 | 0x3C, + 27025 - 19968: jis0208<<14 | 0x3B<<7 | 0x33, + 27026 - 19968: jis0212<<14 | 0x23<<7 | 0x36, + 27028 - 19968: jis0208<<14 | 0x2E<<7 | 0x10, + 27029 - 19968: jis0208<<14 | 0x3B<<7 | 0x36, + 27030 - 19968: jis0212<<14 | 0x23<<7 | 0x37, + 27032 - 19968: jis0208<<14 | 0x59<<7 | 0x30, + 27035 - 19968: jis0208<<14 | 0x1E<<7 | 0x19, + 27036 - 19968: jis0208<<14 | 0x3B<<7 | 0x35, + 27040 - 19968: jis0208<<14 | 0x3B<<7 | 0x34, + 27041 - 19968: jis0212<<14 | 0x23<<7 | 0x39, + 27045 - 19968: jis0212<<14 | 0x23<<7 | 0x3A, + 27046 - 19968: jis0212<<14 | 0x23<<7 | 0x3B, + 27047 - 19968: jis0208<<14 | 0x3B<<7 | 0x31, + 27048 - 19968: jis0212<<14 | 0x23<<7 | 0x3C, + 27051 - 19968: jis0212<<14 | 0x23<<7 | 0x3D, + 27053 - 19968: jis0212<<14 | 0x23<<7 | 0x3E, + 27054 - 19968: jis0208<<14 | 0x3B<<7 | 0x25, + 27055 - 19968: jis0212<<14 | 0x23<<7 | 0x3F, + 27057 - 19968: jis0208<<14 | 0x3B<<7 | 0x42, + 27058 - 19968: jis0208<<14 | 0x3B<<7 | 0x24, + 27060 - 19968: jis0208<<14 | 0x3B<<7 | 0x37, + 27063 - 19968: jis0212<<14 | 0x23<<7 | 0x40, + 27064 - 19968: jis0212<<14 | 0x23<<7 | 0x41, + 27066 - 19968: jis0212<<14 | 0x23<<7 | 0x42, + 27067 - 19968: jis0208<<14 | 0x3B<<7 | 0x2F, + 27068 - 19968: jis0212<<14 | 0x23<<7 | 0x43, + 27070 - 19968: jis0208<<14 | 0x3B<<7 | 0x2A, + 27071 - 19968: jis0208<<14 | 0x3B<<7 | 0x27, + 27073 - 19968: jis0208<<14 | 0x3B<<7 | 0x28, + 27075 - 19968: jis0208<<14 | 0x3B<<7 | 0x30, + 27077 - 19968: jis0212<<14 | 0x23<<7 | 0x44, + 27079 - 19968: jis0208<<14 | 0x53<<7 | 0x01, + 27080 - 19968: jis0212<<14 | 0x23<<7 | 0x45, + 27082 - 19968: jis0208<<14 | 0x3B<<7 | 0x2D, + 27083 - 19968: jis0208<<14 | 0x18<<7 | 0x1C, + 27084 - 19968: jis0208<<14 | 0x23<<7 | 0x27, + 27085 - 19968: jis0208<<14 | 0x20<<7 | 0x43, + 27086 - 19968: jis0208<<14 | 0x3B<<7 | 0x2B, + 27088 - 19968: jis0208<<14 | 0x3B<<7 | 0x26, + 27089 - 19968: jis0212<<14 | 0x23<<7 | 0x46, + 27091 - 19968: jis0208<<14 | 0x3B<<7 | 0x29, + 27094 - 19968: jis0212<<14 | 0x23<<7 | 0x47, + 27095 - 19968: jis0212<<14 | 0x23<<7 | 0x48, + 27096 - 19968: jis0208<<14 | 0x2C<<7 | 0x2C, + 27097 - 19968: jis0208<<14 | 0x2A<<7 | 0x49, + 27101 - 19968: jis0208<<14 | 0x3B<<7 | 0x2E, + 27102 - 19968: jis0208<<14 | 0x3B<<7 | 0x38, + 27106 - 19968: jis0208<<14 | 0x59<<7 | 0x31, + 27109 - 19968: jis0212<<14 | 0x23<<7 | 0x4A, + 27111 - 19968: jis0208<<14 | 0x3B<<7 | 0x40, + 27112 - 19968: jis0208<<14 | 0x3B<<7 | 0x39, + 27115 - 19968: jis0208<<14 | 0x3B<<7 | 0x46, + 27117 - 19968: jis0208<<14 | 0x3B<<7 | 0x44, + 27118 - 19968: jis0212<<14 | 0x23<<7 | 0x4B, + 27119 - 19968: jis0212<<14 | 0x23<<7 | 0x4C, + 27121 - 19968: jis0212<<14 | 0x23<<7 | 0x4D, + 27122 - 19968: jis0208<<14 | 0x3B<<7 | 0x3F, + 27123 - 19968: jis0212<<14 | 0x23<<7 | 0x4E, + 27125 - 19968: jis0212<<14 | 0x23<<7 | 0x4F, + 27129 - 19968: jis0208<<14 | 0x3B<<7 | 0x3E, + 27131 - 19968: jis0208<<14 | 0x23<<7 | 0x2F, + 27133 - 19968: jis0208<<14 | 0x20<<7 | 0x44, + 27134 - 19968: jis0212<<14 | 0x23<<7 | 0x50, + 27135 - 19968: jis0208<<14 | 0x3B<<7 | 0x3C, + 27136 - 19968: jis0212<<14 | 0x23<<7 | 0x51, + 27137 - 19968: jis0212<<14 | 0x23<<7 | 0x52, + 27138 - 19968: jis0208<<14 | 0x3B<<7 | 0x3A, + 27139 - 19968: jis0212<<14 | 0x23<<7 | 0x53, + 27141 - 19968: jis0208<<14 | 0x3B<<7 | 0x41, + 27146 - 19968: jis0208<<14 | 0x3B<<7 | 0x47, + 27147 - 19968: jis0208<<14 | 0x27<<7 | 0x54, + 27148 - 19968: jis0208<<14 | 0x3B<<7 | 0x4D, + 27151 - 19968: jis0212<<14 | 0x23<<7 | 0x54, + 27153 - 19968: jis0212<<14 | 0x23<<7 | 0x55, + 27154 - 19968: jis0208<<14 | 0x3B<<7 | 0x48, + 27155 - 19968: jis0208<<14 | 0x3B<<7 | 0x4B, + 27156 - 19968: jis0208<<14 | 0x3B<<7 | 0x45, + 27157 - 19968: jis0212<<14 | 0x23<<7 | 0x56, + 27159 - 19968: jis0208<<14 | 0x22<<7 | 0x53, + 27161 - 19968: jis0208<<14 | 0x28<<7 | 0x17, + 27162 - 19968: jis0212<<14 | 0x23<<7 | 0x57, + 27163 - 19968: jis0208<<14 | 0x3B<<7 | 0x3B, + 27165 - 19968: jis0212<<14 | 0x23<<7 | 0x58, + 27166 - 19968: jis0208<<14 | 0x3B<<7 | 0x43, + 27167 - 19968: jis0208<<14 | 0x1D<<7 | 0x1F, + 27168 - 19968: jis0212<<14 | 0x23<<7 | 0x59, + 27169 - 19968: jis0208<<14 | 0x2B<<7 | 0x2E, + 27170 - 19968: jis0208<<14 | 0x3B<<7 | 0x57, + 27171 - 19968: jis0208<<14 | 0x3B<<7 | 0x4A, + 27172 - 19968: jis0212<<14 | 0x23<<7 | 0x5A, + 27176 - 19968: jis0212<<14 | 0x23<<7 | 0x5B, + 27177 - 19968: jis0208<<14 | 0x17<<7 | 0x01, + 27178 - 19968: jis0208<<14 | 0x11<<7 | 0x02, + 27179 - 19968: jis0208<<14 | 0x12<<7 | 0x3E, + 27182 - 19968: jis0208<<14 | 0x3B<<7 | 0x32, + 27184 - 19968: jis0208<<14 | 0x59<<7 | 0x32, + 27186 - 19968: jis0212<<14 | 0x23<<7 | 0x5D, + 27188 - 19968: jis0212<<14 | 0x24<<7 | 0x00, + 27189 - 19968: jis0208<<14 | 0x1D<<7 | 0x20, + 27190 - 19968: jis0208<<14 | 0x3B<<7 | 0x4F, + 27191 - 19968: jis0212<<14 | 0x24<<7 | 0x01, + 27192 - 19968: jis0208<<14 | 0x3B<<7 | 0x56, + 27193 - 19968: jis0208<<14 | 0x1B<<7 | 0x58, + 27194 - 19968: jis0208<<14 | 0x12<<7 | 0x51, + 27195 - 19968: jis0212<<14 | 0x24<<7 | 0x02, + 27197 - 19968: jis0208<<14 | 0x22<<7 | 0x0D, + 27198 - 19968: jis0212<<14 | 0x24<<7 | 0x03, + 27199 - 19968: jis0212<<14 | 0x24<<7 | 0x04, + 27204 - 19968: jis0208<<14 | 0x3B<<7 | 0x4C, + 27205 - 19968: jis0212<<14 | 0x24<<7 | 0x05, + 27206 - 19968: jis0208<<14 | 0x59<<7 | 0x34, + 27207 - 19968: jis0208<<14 | 0x3B<<7 | 0x51, + 27208 - 19968: jis0208<<14 | 0x3B<<7 | 0x55, + 27209 - 19968: jis0212<<14 | 0x24<<7 | 0x07, + 27210 - 19968: jis0212<<14 | 0x24<<7 | 0x08, + 27211 - 19968: jis0208<<14 | 0x15<<7 | 0x15, + 27214 - 19968: jis0212<<14 | 0x24<<7 | 0x09, + 27216 - 19968: jis0212<<14 | 0x24<<7 | 0x0A, + 27217 - 19968: jis0212<<14 | 0x24<<7 | 0x0B, + 27218 - 19968: jis0212<<14 | 0x24<<7 | 0x0C, + 27221 - 19968: jis0212<<14 | 0x24<<7 | 0x0D, + 27222 - 19968: jis0212<<14 | 0x24<<7 | 0x0E, + 27224 - 19968: jis0208<<14 | 0x14<<7 | 0x2B, + 27225 - 19968: jis0208<<14 | 0x3B<<7 | 0x53, + 27227 - 19968: jis0212<<14 | 0x24<<7 | 0x0F, + 27231 - 19968: jis0208<<14 | 0x14<<7 | 0x00, + 27233 - 19968: jis0208<<14 | 0x25<<7 | 0x2A, + 27234 - 19968: jis0208<<14 | 0x3B<<7 | 0x52, + 27236 - 19968: jis0212<<14 | 0x24<<7 | 0x10, + 27238 - 19968: jis0208<<14 | 0x3B<<7 | 0x54, + 27239 - 19968: jis0212<<14 | 0x24<<7 | 0x11, + 27242 - 19968: jis0212<<14 | 0x24<<7 | 0x12, + 27243 - 19968: jis0208<<14 | 0x59<<7 | 0x33, + 27249 - 19968: jis0212<<14 | 0x24<<7 | 0x13, + 27250 - 19968: jis0208<<14 | 0x3B<<7 | 0x4E, + 27251 - 19968: jis0208<<14 | 0x59<<7 | 0x35, + 27256 - 19968: jis0208<<14 | 0x3B<<7 | 0x50, + 27262 - 19968: jis0208<<14 | 0x59<<7 | 0x36, + 27263 - 19968: jis0208<<14 | 0x12<<7 | 0x3F, + 27264 - 19968: jis0208<<14 | 0x22<<7 | 0x28, + 27265 - 19968: jis0212<<14 | 0x24<<7 | 0x16, + 27267 - 19968: jis0212<<14 | 0x24<<7 | 0x17, + 27268 - 19968: jis0208<<14 | 0x3B<<7 | 0x5B, + 27270 - 19968: jis0212<<14 | 0x24<<7 | 0x18, + 27271 - 19968: jis0212<<14 | 0x24<<7 | 0x19, + 27273 - 19968: jis0212<<14 | 0x24<<7 | 0x1A, + 27275 - 19968: jis0212<<14 | 0x24<<7 | 0x1B, + 27277 - 19968: jis0208<<14 | 0x3B<<7 | 0x59, + 27278 - 19968: jis0208<<14 | 0x17<<7 | 0x48, + 27280 - 19968: jis0208<<14 | 0x3B<<7 | 0x58, + 27281 - 19968: jis0212<<14 | 0x24<<7 | 0x1C, + 27287 - 19968: jis0208<<14 | 0x3C<<7 | 0x00, + 27291 - 19968: jis0212<<14 | 0x24<<7 | 0x1D, + 27292 - 19968: jis0208<<14 | 0x3A<<7 | 0x37, + 27293 - 19968: jis0212<<14 | 0x24<<7 | 0x1E, + 27294 - 19968: jis0212<<14 | 0x24<<7 | 0x1F, + 27295 - 19968: jis0212<<14 | 0x24<<7 | 0x20, + 27296 - 19968: jis0208<<14 | 0x3B<<7 | 0x5A, + 27298 - 19968: jis0208<<14 | 0x3B<<7 | 0x5C, + 27299 - 19968: jis0208<<14 | 0x3B<<7 | 0x5D, + 27301 - 19968: jis0212<<14 | 0x24<<7 | 0x21, + 27306 - 19968: jis0208<<14 | 0x3C<<7 | 0x0B, + 27307 - 19968: jis0212<<14 | 0x24<<7 | 0x22, + 27308 - 19968: jis0208<<14 | 0x3C<<7 | 0x07, + 27310 - 19968: jis0208<<14 | 0x3A<<7 | 0x4C, + 27311 - 19968: jis0212<<14 | 0x24<<7 | 0x23, + 27312 - 19968: jis0212<<14 | 0x24<<7 | 0x24, + 27313 - 19968: jis0212<<14 | 0x24<<7 | 0x25, + 27315 - 19968: jis0208<<14 | 0x3C<<7 | 0x06, + 27316 - 19968: jis0212<<14 | 0x24<<7 | 0x26, + 27320 - 19968: jis0208<<14 | 0x3C<<7 | 0x05, + 27323 - 19968: jis0208<<14 | 0x3C<<7 | 0x02, + 27325 - 19968: jis0212<<14 | 0x24<<7 | 0x27, + 27326 - 19968: jis0212<<14 | 0x24<<7 | 0x28, + 27327 - 19968: jis0212<<14 | 0x24<<7 | 0x29, + 27329 - 19968: jis0208<<14 | 0x3B<<7 | 0x49, + 27330 - 19968: jis0208<<14 | 0x3C<<7 | 0x04, + 27331 - 19968: jis0208<<14 | 0x3C<<7 | 0x03, + 27334 - 19968: jis0212<<14 | 0x24<<7 | 0x2A, + 27336 - 19968: jis0212<<14 | 0x24<<7 | 0x2C, + 27337 - 19968: jis0212<<14 | 0x24<<7 | 0x2B, + 27340 - 19968: jis0212<<14 | 0x24<<7 | 0x2D, + 27344 - 19968: jis0212<<14 | 0x24<<7 | 0x2E, + 27345 - 19968: jis0208<<14 | 0x3C<<7 | 0x09, + 27347 - 19968: jis0208<<14 | 0x2E<<7 | 0x05, + 27348 - 19968: jis0212<<14 | 0x24<<7 | 0x2F, + 27349 - 19968: jis0212<<14 | 0x24<<7 | 0x30, + 27350 - 19968: jis0212<<14 | 0x24<<7 | 0x31, + 27354 - 19968: jis0208<<14 | 0x3C<<7 | 0x0C, + 27355 - 19968: jis0208<<14 | 0x15<<7 | 0x5A, + 27356 - 19968: jis0212<<14 | 0x24<<7 | 0x32, + 27357 - 19968: jis0212<<14 | 0x24<<7 | 0x33, + 27358 - 19968: jis0208<<14 | 0x3C<<7 | 0x08, + 27359 - 19968: jis0208<<14 | 0x3C<<7 | 0x0A, + 27362 - 19968: jis0208<<14 | 0x59<<7 | 0x37, + 27364 - 19968: jis0208<<14 | 0x59<<7 | 0x38, + 27367 - 19968: jis0212<<14 | 0x24<<7 | 0x35, + 27368 - 19968: jis0208<<14 | 0x27<<7 | 0x06, + 27370 - 19968: jis0208<<14 | 0x3C<<7 | 0x0D, + 27372 - 19968: jis0212<<14 | 0x24<<7 | 0x36, + 27376 - 19968: jis0212<<14 | 0x24<<7 | 0x37, + 27377 - 19968: jis0212<<14 | 0x24<<7 | 0x38, + 27378 - 19968: jis0212<<14 | 0x24<<7 | 0x39, + 27386 - 19968: jis0208<<14 | 0x3C<<7 | 0x11, + 27387 - 19968: jis0208<<14 | 0x3C<<7 | 0x0E, + 27388 - 19968: jis0212<<14 | 0x24<<7 | 0x3A, + 27389 - 19968: jis0212<<14 | 0x24<<7 | 0x3B, + 27394 - 19968: jis0212<<14 | 0x24<<7 | 0x3C, + 27395 - 19968: jis0212<<14 | 0x24<<7 | 0x3D, + 27396 - 19968: jis0208<<14 | 0x2C<<7 | 0x52, + 27397 - 19968: jis0208<<14 | 0x3C<<7 | 0x0F, + 27398 - 19968: jis0212<<14 | 0x24<<7 | 0x3E, + 27399 - 19968: jis0212<<14 | 0x24<<7 | 0x3F, + 27401 - 19968: jis0212<<14 | 0x24<<7 | 0x40, + 27402 - 19968: jis0208<<14 | 0x3B<<7 | 0x3D, + 27407 - 19968: jis0212<<14 | 0x24<<7 | 0x41, + 27408 - 19968: jis0212<<14 | 0x24<<7 | 0x42, + 27409 - 19968: jis0212<<14 | 0x24<<7 | 0x43, + 27410 - 19968: jis0208<<14 | 0x3C<<7 | 0x12, + 27414 - 19968: jis0208<<14 | 0x3C<<7 | 0x13, + 27415 - 19968: jis0212<<14 | 0x24<<7 | 0x44, + 27419 - 19968: jis0212<<14 | 0x24<<7 | 0x45, + 27421 - 19968: jis0208<<14 | 0x10<<7 | 0x14, + 27422 - 19968: jis0212<<14 | 0x24<<7 | 0x46, + 27423 - 19968: jis0208<<14 | 0x3C<<7 | 0x15, + 27424 - 19968: jis0208<<14 | 0x16<<7 | 0x46, + 27425 - 19968: jis0208<<14 | 0x1B<<7 | 0x00, + 27427 - 19968: jis0208<<14 | 0x15<<7 | 0x34, + 27428 - 19968: jis0212<<14 | 0x24<<7 | 0x47, + 27431 - 19968: jis0208<<14 | 0x11<<7 | 0x03, + 27432 - 19968: jis0212<<14 | 0x24<<7 | 0x48, + 27435 - 19968: jis0212<<14 | 0x24<<7 | 0x49, + 27436 - 19968: jis0212<<14 | 0x24<<7 | 0x4A, + 27439 - 19968: jis0212<<14 | 0x24<<7 | 0x4B, + 27442 - 19968: jis0208<<14 | 0x2C<<7 | 0x3E, + 27445 - 19968: jis0212<<14 | 0x24<<7 | 0x4C, + 27446 - 19968: jis0212<<14 | 0x24<<7 | 0x4D, + 27447 - 19968: jis0208<<14 | 0x3C<<7 | 0x17, + 27448 - 19968: jis0208<<14 | 0x3C<<7 | 0x16, + 27449 - 19968: jis0208<<14 | 0x3C<<7 | 0x19, + 27450 - 19968: jis0208<<14 | 0x14<<7 | 0x1C, + 27451 - 19968: jis0212<<14 | 0x24<<7 | 0x4E, + 27453 - 19968: jis0208<<14 | 0x15<<7 | 0x35, + 27454 - 19968: jis0208<<14 | 0x13<<7 | 0x1D, + 27455 - 19968: jis0212<<14 | 0x24<<7 | 0x4F, + 27459 - 19968: jis0208<<14 | 0x3C<<7 | 0x1C, + 27462 - 19968: jis0212<<14 | 0x24<<7 | 0x50, + 27463 - 19968: jis0208<<14 | 0x3C<<7 | 0x1B, + 27465 - 19968: jis0208<<14 | 0x3C<<7 | 0x1D, + 27466 - 19968: jis0212<<14 | 0x24<<7 | 0x51, + 27468 - 19968: jis0208<<14 | 0x11<<7 | 0x2D, + 27469 - 19968: jis0212<<14 | 0x24<<7 | 0x52, + 27470 - 19968: jis0208<<14 | 0x22<<7 | 0x16, + 27472 - 19968: jis0208<<14 | 0x3C<<7 | 0x1E, + 27474 - 19968: jis0212<<14 | 0x24<<7 | 0x53, + 27475 - 19968: jis0208<<14 | 0x13<<7 | 0x1E, + 27476 - 19968: jis0208<<14 | 0x3C<<7 | 0x20, + 27478 - 19968: jis0212<<14 | 0x24<<7 | 0x54, + 27480 - 19968: jis0212<<14 | 0x24<<7 | 0x55, + 27481 - 19968: jis0208<<14 | 0x3C<<7 | 0x1F, + 27483 - 19968: jis0208<<14 | 0x3C<<7 | 0x21, + 27485 - 19968: jis0212<<14 | 0x24<<7 | 0x56, + 27487 - 19968: jis0208<<14 | 0x3C<<7 | 0x22, + 27488 - 19968: jis0212<<14 | 0x24<<7 | 0x57, + 27489 - 19968: jis0208<<14 | 0x3C<<7 | 0x23, + 27490 - 19968: jis0208<<14 | 0x1A<<7 | 0x3E, + 27491 - 19968: jis0208<<14 | 0x1F<<7 | 0x14, + 27492 - 19968: jis0208<<14 | 0x19<<7 | 0x00, + 27494 - 19968: jis0208<<14 | 0x28<<7 | 0x4F, + 27495 - 19968: jis0212<<14 | 0x24<<7 | 0x58, + 27497 - 19968: jis0208<<14 | 0x29<<7 | 0x41, + 27498 - 19968: jis0208<<14 | 0x2E<<7 | 0x23, + 27499 - 19968: jis0212<<14 | 0x24<<7 | 0x59, + 27502 - 19968: jis0212<<14 | 0x24<<7 | 0x5A, + 27503 - 19968: jis0208<<14 | 0x1A<<7 | 0x54, + 27504 - 19968: jis0212<<14 | 0x24<<7 | 0x5B, + 27507 - 19968: jis0208<<14 | 0x19<<7 | 0x2F, + 27508 - 19968: jis0208<<14 | 0x2D<<7 | 0x51, + 27509 - 19968: jis0212<<14 | 0x24<<7 | 0x5C, + 27512 - 19968: jis0208<<14 | 0x3C<<7 | 0x24, + 27513 - 19968: jis0208<<14 | 0x3C<<7 | 0x25, + 27515 - 19968: jis0208<<14 | 0x1A<<7 | 0x3F, + 27517 - 19968: jis0212<<14 | 0x24<<7 | 0x5D, + 27518 - 19968: jis0212<<14 | 0x25<<7 | 0x00, + 27519 - 19968: jis0208<<14 | 0x3C<<7 | 0x26, + 27520 - 19968: jis0208<<14 | 0x3C<<7 | 0x27, + 27522 - 19968: jis0212<<14 | 0x25<<7 | 0x01, + 27523 - 19968: jis0208<<14 | 0x3C<<7 | 0x29, + 27524 - 19968: jis0208<<14 | 0x3C<<7 | 0x28, + 27525 - 19968: jis0212<<14 | 0x25<<7 | 0x02, + 27526 - 19968: jis0208<<14 | 0x2A<<7 | 0x37, + 27529 - 19968: jis0208<<14 | 0x1C<<7 | 0x3D, + 27530 - 19968: jis0208<<14 | 0x1B<<7 | 0x4B, + 27531 - 19968: jis0208<<14 | 0x1A<<7 | 0x23, + 27533 - 19968: jis0208<<14 | 0x3C<<7 | 0x2A, + 27541 - 19968: jis0208<<14 | 0x3C<<7 | 0x2C, + 27542 - 19968: jis0208<<14 | 0x1E<<7 | 0x02, + 27543 - 19968: jis0212<<14 | 0x25<<7 | 0x03, + 27544 - 19968: jis0208<<14 | 0x3C<<7 | 0x2B, + 27547 - 19968: jis0212<<14 | 0x25<<7 | 0x04, + 27550 - 19968: jis0208<<14 | 0x3C<<7 | 0x2D, + 27551 - 19968: jis0212<<14 | 0x25<<7 | 0x05, + 27552 - 19968: jis0212<<14 | 0x25<<7 | 0x06, + 27554 - 19968: jis0212<<14 | 0x25<<7 | 0x07, + 27555 - 19968: jis0212<<14 | 0x25<<7 | 0x08, + 27556 - 19968: jis0208<<14 | 0x3C<<7 | 0x2E, + 27560 - 19968: jis0212<<14 | 0x25<<7 | 0x09, + 27561 - 19968: jis0212<<14 | 0x25<<7 | 0x0A, + 27562 - 19968: jis0208<<14 | 0x3C<<7 | 0x2F, + 27563 - 19968: jis0208<<14 | 0x3C<<7 | 0x30, + 27564 - 19968: jis0212<<14 | 0x25<<7 | 0x0B, + 27565 - 19968: jis0212<<14 | 0x25<<7 | 0x0C, + 27566 - 19968: jis0212<<14 | 0x25<<7 | 0x0D, + 27567 - 19968: jis0208<<14 | 0x3C<<7 | 0x31, + 27568 - 19968: jis0212<<14 | 0x25<<7 | 0x0E, + 27569 - 19968: jis0208<<14 | 0x3C<<7 | 0x33, + 27570 - 19968: jis0208<<14 | 0x3C<<7 | 0x32, + 27571 - 19968: jis0208<<14 | 0x3C<<7 | 0x34, + 27572 - 19968: jis0208<<14 | 0x11<<7 | 0x04, + 27573 - 19968: jis0208<<14 | 0x22<<7 | 0x29, + 27575 - 19968: jis0208<<14 | 0x3C<<7 | 0x35, + 27576 - 19968: jis0212<<14 | 0x25<<7 | 0x0F, + 27577 - 19968: jis0212<<14 | 0x25<<7 | 0x10, + 27578 - 19968: jis0208<<14 | 0x1A<<7 | 0x05, + 27579 - 19968: jis0208<<14 | 0x12<<7 | 0x2B, + 27580 - 19968: jis0208<<14 | 0x3C<<7 | 0x36, + 27581 - 19968: jis0212<<14 | 0x25<<7 | 0x11, + 27582 - 19968: jis0212<<14 | 0x25<<7 | 0x12, + 27583 - 19968: jis0208<<14 | 0x24<<7 | 0x21, + 27584 - 19968: jis0208<<14 | 0x33<<7 | 0x2B, + 27587 - 19968: jis0212<<14 | 0x25<<7 | 0x13, + 27588 - 19968: jis0212<<14 | 0x25<<7 | 0x14, + 27589 - 19968: jis0208<<14 | 0x14<<7 | 0x02, + 27590 - 19968: jis0208<<14 | 0x3C<<7 | 0x37, + 27593 - 19968: jis0212<<14 | 0x25<<7 | 0x15, + 27595 - 19968: jis0208<<14 | 0x3C<<7 | 0x38, + 27596 - 19968: jis0212<<14 | 0x25<<7 | 0x16, + 27597 - 19968: jis0208<<14 | 0x29<<7 | 0x4B, + 27598 - 19968: jis0208<<14 | 0x2A<<7 | 0x47, + 27602 - 19968: jis0208<<14 | 0x25<<7 | 0x26, + 27603 - 19968: jis0208<<14 | 0x3C<<7 | 0x39, + 27604 - 19968: jis0208<<14 | 0x27<<7 | 0x45, + 27606 - 19968: jis0208<<14 | 0x59<<7 | 0x39, + 27608 - 19968: jis0208<<14 | 0x27<<7 | 0x5A, + 27610 - 19968: jis0212<<14 | 0x25<<7 | 0x18, + 27611 - 19968: jis0208<<14 | 0x2B<<7 | 0x32, + 27615 - 19968: jis0208<<14 | 0x3C<<7 | 0x3A, + 27617 - 19968: jis0212<<14 | 0x25<<7 | 0x19, + 27619 - 19968: jis0212<<14 | 0x25<<7 | 0x1A, + 27622 - 19968: jis0212<<14 | 0x25<<7 | 0x1B, + 27623 - 19968: jis0212<<14 | 0x25<<7 | 0x1C, + 27627 - 19968: jis0208<<14 | 0x3C<<7 | 0x3C, + 27628 - 19968: jis0208<<14 | 0x3C<<7 | 0x3B, + 27630 - 19968: jis0212<<14 | 0x25<<7 | 0x1D, + 27631 - 19968: jis0208<<14 | 0x3C<<7 | 0x3E, + 27633 - 19968: jis0212<<14 | 0x25<<7 | 0x1E, + 27635 - 19968: jis0208<<14 | 0x3C<<7 | 0x3D, + 27639 - 19968: jis0212<<14 | 0x25<<7 | 0x1F, + 27641 - 19968: jis0212<<14 | 0x25<<7 | 0x20, + 27647 - 19968: jis0212<<14 | 0x25<<7 | 0x21, + 27650 - 19968: jis0212<<14 | 0x25<<7 | 0x22, + 27652 - 19968: jis0212<<14 | 0x25<<7 | 0x23, + 27653 - 19968: jis0212<<14 | 0x25<<7 | 0x24, + 27656 - 19968: jis0208<<14 | 0x3C<<7 | 0x40, + 27657 - 19968: jis0212<<14 | 0x25<<7 | 0x25, + 27661 - 19968: jis0212<<14 | 0x25<<7 | 0x26, + 27662 - 19968: jis0212<<14 | 0x25<<7 | 0x27, + 27663 - 19968: jis0208<<14 | 0x1A<<7 | 0x40, + 27664 - 19968: jis0212<<14 | 0x25<<7 | 0x28, + 27665 - 19968: jis0208<<14 | 0x2B<<7 | 0x10, + 27666 - 19968: jis0212<<14 | 0x25<<7 | 0x29, + 27667 - 19968: jis0208<<14 | 0x3C<<7 | 0x41, + 27668 - 19968: jis0208<<14 | 0x3C<<7 | 0x42, + 27671 - 19968: jis0208<<14 | 0x14<<7 | 0x03, + 27673 - 19968: jis0212<<14 | 0x25<<7 | 0x2A, + 27675 - 19968: jis0208<<14 | 0x3C<<7 | 0x43, + 27679 - 19968: jis0212<<14 | 0x25<<7 | 0x2B, + 27683 - 19968: jis0208<<14 | 0x3C<<7 | 0x45, + 27684 - 19968: jis0208<<14 | 0x3C<<7 | 0x44, + 27686 - 19968: jis0212<<14 | 0x25<<7 | 0x2C, + 27687 - 19968: jis0212<<14 | 0x25<<7 | 0x2D, + 27688 - 19968: jis0212<<14 | 0x25<<7 | 0x2E, + 27692 - 19968: jis0212<<14 | 0x25<<7 | 0x2F, + 27694 - 19968: jis0212<<14 | 0x25<<7 | 0x30, + 27699 - 19968: jis0212<<14 | 0x25<<7 | 0x31, + 27700 - 19968: jis0208<<14 | 0x1E<<7 | 0x44, + 27701 - 19968: jis0212<<14 | 0x25<<7 | 0x32, + 27702 - 19968: jis0212<<14 | 0x25<<7 | 0x33, + 27703 - 19968: jis0208<<14 | 0x28<<7 | 0x18, + 27704 - 19968: jis0208<<14 | 0x10<<7 | 0x29, + 27706 - 19968: jis0212<<14 | 0x25<<7 | 0x34, + 27707 - 19968: jis0212<<14 | 0x25<<7 | 0x35, + 27710 - 19968: jis0208<<14 | 0x27<<7 | 0x24, + 27711 - 19968: jis0208<<14 | 0x59<<7 | 0x3A, + 27712 - 19968: jis0208<<14 | 0x23<<7 | 0x54, + 27713 - 19968: jis0208<<14 | 0x1C<<7 | 0x20, + 27714 - 19968: jis0208<<14 | 0x14<<7 | 0x40, + 27722 - 19968: jis0212<<14 | 0x25<<7 | 0x37, + 27723 - 19968: jis0212<<14 | 0x25<<7 | 0x38, + 27725 - 19968: jis0212<<14 | 0x25<<7 | 0x39, + 27726 - 19968: jis0208<<14 | 0x27<<7 | 0x25, + 27727 - 19968: jis0212<<14 | 0x25<<7 | 0x3A, + 27728 - 19968: jis0208<<14 | 0x1B<<7 | 0x0D, + 27730 - 19968: jis0212<<14 | 0x25<<7 | 0x3B, + 27732 - 19968: jis0212<<14 | 0x25<<7 | 0x3C, + 27733 - 19968: jis0208<<14 | 0x3C<<7 | 0x47, + 27735 - 19968: jis0208<<14 | 0x13<<7 | 0x1F, + 27737 - 19968: jis0212<<14 | 0x25<<7 | 0x3D, + 27738 - 19968: jis0208<<14 | 0x10<<7 | 0x57, + 27739 - 19968: jis0212<<14 | 0x25<<7 | 0x3E, + 27740 - 19968: jis0208<<14 | 0x59<<7 | 0x3B, + 27741 - 19968: jis0208<<14 | 0x25<<7 | 0x51, + 27742 - 19968: jis0208<<14 | 0x3C<<7 | 0x46, + 27743 - 19968: jis0208<<14 | 0x18<<7 | 0x1D, + 27744 - 19968: jis0208<<14 | 0x22<<7 | 0x32, + 27746 - 19968: jis0208<<14 | 0x3C<<7 | 0x48, + 27751 - 19968: jis0212<<14 | 0x26<<7 | 0x15, + 27752 - 19968: jis0208<<14 | 0x3C<<7 | 0x50, + 27754 - 19968: jis0208<<14 | 0x3C<<7 | 0x49, + 27755 - 19968: jis0212<<14 | 0x25<<7 | 0x40, + 27757 - 19968: jis0212<<14 | 0x25<<7 | 0x41, + 27759 - 19968: jis0208<<14 | 0x59<<7 | 0x3D, + 27760 - 19968: jis0208<<14 | 0x21<<7 | 0x20, + 27762 - 19968: jis0208<<14 | 0x14<<7 | 0x41, + 27763 - 19968: jis0208<<14 | 0x3C<<7 | 0x51, + 27764 - 19968: jis0212<<14 | 0x25<<7 | 0x43, + 27766 - 19968: jis0212<<14 | 0x25<<7 | 0x44, + 27768 - 19968: jis0212<<14 | 0x25<<7 | 0x45, + 27769 - 19968: jis0212<<14 | 0x25<<7 | 0x46, + 27770 - 19968: jis0208<<14 | 0x16<<7 | 0x47, + 27771 - 19968: jis0212<<14 | 0x25<<7 | 0x47, + 27773 - 19968: jis0208<<14 | 0x14<<7 | 0x04, + 27774 - 19968: jis0208<<14 | 0x3C<<7 | 0x4F, + 27777 - 19968: jis0208<<14 | 0x3C<<7 | 0x4D, + 27778 - 19968: jis0208<<14 | 0x3C<<7 | 0x4A, + 27779 - 19968: jis0208<<14 | 0x2C<<7 | 0x3F, + 27781 - 19968: jis0212<<14 | 0x25<<7 | 0x48, + 27782 - 19968: jis0208<<14 | 0x59<<7 | 0x3C, + 27783 - 19968: jis0212<<14 | 0x25<<7 | 0x4A, + 27784 - 19968: jis0208<<14 | 0x23<<7 | 0x1F, + 27785 - 19968: jis0212<<14 | 0x25<<7 | 0x4B, + 27788 - 19968: jis0208<<14 | 0x25<<7 | 0x38, + 27789 - 19968: jis0208<<14 | 0x3C<<7 | 0x4B, + 27792 - 19968: jis0208<<14 | 0x3C<<7 | 0x53, + 27794 - 19968: jis0208<<14 | 0x3C<<7 | 0x52, + 27795 - 19968: jis0208<<14 | 0x16<<7 | 0x02, + 27796 - 19968: jis0212<<14 | 0x25<<7 | 0x4C, + 27797 - 19968: jis0212<<14 | 0x25<<7 | 0x4D, + 27798 - 19968: jis0208<<14 | 0x11<<7 | 0x0C, + 27799 - 19968: jis0212<<14 | 0x25<<7 | 0x4E, + 27800 - 19968: jis0212<<14 | 0x25<<7 | 0x4F, + 27801 - 19968: jis0208<<14 | 0x19<<7 | 0x1A, + 27802 - 19968: jis0208<<14 | 0x3C<<7 | 0x4C, + 27803 - 19968: jis0208<<14 | 0x3C<<7 | 0x4E, + 27804 - 19968: jis0212<<14 | 0x25<<7 | 0x50, + 27807 - 19968: jis0212<<14 | 0x25<<7 | 0x51, + 27809 - 19968: jis0208<<14 | 0x2A<<7 | 0x36, + 27810 - 19968: jis0208<<14 | 0x21<<7 | 0x53, + 27819 - 19968: jis0208<<14 | 0x2A<<7 | 0x56, + 27822 - 19968: jis0208<<14 | 0x3C<<7 | 0x5B, + 27824 - 19968: jis0212<<14 | 0x25<<7 | 0x52, + 27825 - 19968: jis0208<<14 | 0x3C<<7 | 0x5C, + 27826 - 19968: jis0212<<14 | 0x25<<7 | 0x53, + 27827 - 19968: jis0208<<14 | 0x11<<7 | 0x2E, + 27828 - 19968: jis0212<<14 | 0x25<<7 | 0x54, + 27832 - 19968: jis0208<<14 | 0x29<<7 | 0x07, + 27833 - 19968: jis0208<<14 | 0x2B<<7 | 0x5C, + 27834 - 19968: jis0208<<14 | 0x3D<<7 | 0x00, + 27835 - 19968: jis0208<<14 | 0x1B<<7 | 0x02, + 27836 - 19968: jis0208<<14 | 0x1D<<7 | 0x21, + 27837 - 19968: jis0208<<14 | 0x3C<<7 | 0x57, + 27838 - 19968: jis0208<<14 | 0x3C<<7 | 0x5D, + 27839 - 19968: jis0208<<14 | 0x10<<7 | 0x47, + 27841 - 19968: jis0208<<14 | 0x15<<7 | 0x16, + 27842 - 19968: jis0212<<14 | 0x25<<7 | 0x55, + 27844 - 19968: jis0208<<14 | 0x3C<<7 | 0x54, + 27845 - 19968: jis0208<<14 | 0x3C<<7 | 0x59, + 27846 - 19968: jis0212<<14 | 0x25<<7 | 0x56, + 27849 - 19968: jis0208<<14 | 0x1F<<7 | 0x53, + 27850 - 19968: jis0208<<14 | 0x26<<7 | 0x50, + 27852 - 19968: jis0208<<14 | 0x27<<7 | 0x46, + 27853 - 19968: jis0212<<14 | 0x25<<7 | 0x57, + 27855 - 19968: jis0212<<14 | 0x25<<7 | 0x58, + 27856 - 19968: jis0212<<14 | 0x25<<7 | 0x59, + 27857 - 19968: jis0212<<14 | 0x25<<7 | 0x5A, + 27858 - 19968: jis0212<<14 | 0x25<<7 | 0x5B, + 27859 - 19968: jis0208<<14 | 0x3C<<7 | 0x56, + 27860 - 19968: jis0212<<14 | 0x25<<7 | 0x5C, + 27861 - 19968: jis0208<<14 | 0x2A<<7 | 0x00, + 27862 - 19968: jis0212<<14 | 0x25<<7 | 0x5D, + 27863 - 19968: jis0208<<14 | 0x3C<<7 | 0x58, + 27865 - 19968: jis0208<<14 | 0x3D<<7 | 0x03, + 27866 - 19968: jis0208<<14 | 0x59<<7 | 0x3E, + 27867 - 19968: jis0208<<14 | 0x3D<<7 | 0x01, + 27868 - 19968: jis0212<<14 | 0x26<<7 | 0x01, + 27869 - 19968: jis0208<<14 | 0x3C<<7 | 0x5A, + 27872 - 19968: jis0212<<14 | 0x26<<7 | 0x02, + 27873 - 19968: jis0208<<14 | 0x2A<<7 | 0x01, + 27874 - 19968: jis0208<<14 | 0x26<<7 | 0x27, + 27875 - 19968: jis0208<<14 | 0x14<<7 | 0x42, + 27877 - 19968: jis0208<<14 | 0x24<<7 | 0x04, + 27879 - 19968: jis0212<<14 | 0x26<<7 | 0x03, + 27880 - 19968: jis0208<<14 | 0x22<<7 | 0x4C, + 27881 - 19968: jis0212<<14 | 0x26<<7 | 0x04, + 27882 - 19968: jis0208<<14 | 0x3D<<7 | 0x04, + 27883 - 19968: jis0212<<14 | 0x26<<7 | 0x05, + 27884 - 19968: jis0212<<14 | 0x26<<7 | 0x06, + 27886 - 19968: jis0212<<14 | 0x26<<7 | 0x07, + 27887 - 19968: jis0208<<14 | 0x3D<<7 | 0x02, + 27888 - 19968: jis0208<<14 | 0x21<<7 | 0x38, + 27889 - 19968: jis0208<<14 | 0x3C<<7 | 0x55, + 27890 - 19968: jis0212<<14 | 0x26<<7 | 0x08, + 27891 - 19968: jis0208<<14 | 0x10<<7 | 0x2A, + 27892 - 19968: jis0212<<14 | 0x26<<7 | 0x09, + 27908 - 19968: jis0208<<14 | 0x59<<7 | 0x3F, + 27911 - 19968: jis0212<<14 | 0x26<<7 | 0x0B, + 27914 - 19968: jis0212<<14 | 0x26<<7 | 0x0C, + 27915 - 19968: jis0208<<14 | 0x2C<<7 | 0x2D, + 27916 - 19968: jis0208<<14 | 0x3D<<7 | 0x0F, + 27918 - 19968: jis0212<<14 | 0x26<<7 | 0x0D, + 27919 - 19968: jis0212<<14 | 0x26<<7 | 0x0E, + 27921 - 19968: jis0212<<14 | 0x26<<7 | 0x0F, + 27922 - 19968: jis0208<<14 | 0x3D<<7 | 0x0E, + 27923 - 19968: jis0212<<14 | 0x26<<7 | 0x10, + 27927 - 19968: jis0208<<14 | 0x1F<<7 | 0x55, + 27929 - 19968: jis0208<<14 | 0x3D<<7 | 0x0B, + 27930 - 19968: jis0212<<14 | 0x26<<7 | 0x11, + 27931 - 19968: jis0208<<14 | 0x2C<<7 | 0x4B, + 27934 - 19968: jis0208<<14 | 0x25<<7 | 0x15, + 27935 - 19968: jis0208<<14 | 0x3D<<7 | 0x05, + 27941 - 19968: jis0208<<14 | 0x23<<7 | 0x24, + 27942 - 19968: jis0212<<14 | 0x26<<7 | 0x12, + 27943 - 19968: jis0212<<14 | 0x26<<7 | 0x13, + 27944 - 19968: jis0212<<14 | 0x26<<7 | 0x14, + 27945 - 19968: jis0208<<14 | 0x10<<7 | 0x2B, + 27946 - 19968: jis0208<<14 | 0x18<<7 | 0x1E, + 27947 - 19968: jis0208<<14 | 0x3D<<7 | 0x08, + 27950 - 19968: jis0212<<14 | 0x26<<7 | 0x16, + 27951 - 19968: jis0212<<14 | 0x26<<7 | 0x17, + 27953 - 19968: jis0212<<14 | 0x26<<7 | 0x18, + 27954 - 19968: jis0208<<14 | 0x1C<<7 | 0x06, + 27955 - 19968: jis0208<<14 | 0x3D<<7 | 0x0D, + 27957 - 19968: jis0208<<14 | 0x3D<<7 | 0x0C, + 27958 - 19968: jis0208<<14 | 0x3D<<7 | 0x07, + 27960 - 19968: jis0208<<14 | 0x3D<<7 | 0x0A, + 27961 - 19968: jis0212<<14 | 0x26<<7 | 0x19, + 27963 - 19968: jis0208<<14 | 0x12<<7 | 0x47, + 27964 - 19968: jis0212<<14 | 0x26<<7 | 0x1A, + 27965 - 19968: jis0208<<14 | 0x3D<<7 | 0x09, + 27966 - 19968: jis0208<<14 | 0x26<<7 | 0x28, + 27967 - 19968: jis0212<<14 | 0x26<<7 | 0x1B, + 27969 - 19968: jis0208<<14 | 0x2D<<7 | 0x0D, + 27972 - 19968: jis0208<<14 | 0x1D<<7 | 0x53, + 27973 - 19968: jis0208<<14 | 0x1F<<7 | 0x54, + 27991 - 19968: jis0212<<14 | 0x26<<7 | 0x1C, + 27993 - 19968: jis0208<<14 | 0x3D<<7 | 0x15, + 27994 - 19968: jis0208<<14 | 0x3D<<7 | 0x13, + 27996 - 19968: jis0208<<14 | 0x28<<7 | 0x2C, + 27998 - 19968: jis0212<<14 | 0x26<<7 | 0x1D, + 27999 - 19968: jis0212<<14 | 0x26<<7 | 0x1E, + 28001 - 19968: jis0212<<14 | 0x26<<7 | 0x1F, + 28003 - 19968: jis0208<<14 | 0x3D<<7 | 0x10, + 28004 - 19968: jis0208<<14 | 0x3D<<7 | 0x12, + 28005 - 19968: jis0212<<14 | 0x26<<7 | 0x20, + 28006 - 19968: jis0208<<14 | 0x10<<7 | 0x19, + 28007 - 19968: jis0212<<14 | 0x26<<7 | 0x21, + 28009 - 19968: jis0208<<14 | 0x18<<7 | 0x1F, + 28010 - 19968: jis0208<<14 | 0x2E<<7 | 0x11, + 28012 - 19968: jis0208<<14 | 0x12<<7 | 0x1C, + 28014 - 19968: jis0208<<14 | 0x28<<7 | 0x41, + 28015 - 19968: jis0208<<14 | 0x59<<7 | 0x41, + 28016 - 19968: jis0212<<14 | 0x26<<7 | 0x23, + 28020 - 19968: jis0208<<14 | 0x2C<<7 | 0x40, + 28023 - 19968: jis0208<<14 | 0x12<<7 | 0x03, + 28024 - 19968: jis0208<<14 | 0x1E<<7 | 0x1A, + 28025 - 19968: jis0208<<14 | 0x3D<<7 | 0x14, + 28028 - 19968: jis0212<<14 | 0x26<<7 | 0x24, + 28034 - 19968: jis0212<<14 | 0x26<<7 | 0x25, + 28037 - 19968: jis0208<<14 | 0x3D<<7 | 0x19, + 28039 - 19968: jis0208<<14 | 0x59<<7 | 0x40, + 28040 - 19968: jis0208<<14 | 0x1D<<7 | 0x22, + 28044 - 19968: jis0208<<14 | 0x2C<<7 | 0x0F, + 28046 - 19968: jis0208<<14 | 0x3D<<7 | 0x16, + 28049 - 19968: jis0212<<14 | 0x26<<7 | 0x27, + 28050 - 19968: jis0212<<14 | 0x26<<7 | 0x28, + 28051 - 19968: jis0208<<14 | 0x3D<<7 | 0x11, + 28052 - 19968: jis0212<<14 | 0x26<<7 | 0x29, + 28053 - 19968: jis0208<<14 | 0x3D<<7 | 0x17, + 28054 - 19968: jis0208<<14 | 0x59<<7 | 0x42, + 28055 - 19968: jis0212<<14 | 0x26<<7 | 0x2B, + 28056 - 19968: jis0212<<14 | 0x26<<7 | 0x2C, + 28057 - 19968: jis0208<<14 | 0x2D<<7 | 0x3D, + 28059 - 19968: jis0208<<14 | 0x24<<7 | 0x52, + 28060 - 19968: jis0208<<14 | 0x25<<7 | 0x21, + 28074 - 19968: jis0212<<14 | 0x26<<7 | 0x2D, + 28076 - 19968: jis0208<<14 | 0x59<<7 | 0x43, + 28079 - 19968: jis0208<<14 | 0x12<<7 | 0x15, + 28082 - 19968: jis0208<<14 | 0x10<<7 | 0x34, + 28084 - 19968: jis0212<<14 | 0x26<<7 | 0x2F, + 28085 - 19968: jis0208<<14 | 0x3D<<7 | 0x1D, + 28087 - 19968: jis0212<<14 | 0x26<<7 | 0x30, + 28088 - 19968: jis0208<<14 | 0x3D<<7 | 0x20, + 28089 - 19968: jis0212<<14 | 0x26<<7 | 0x31, + 28092 - 19968: jis0208<<14 | 0x2D<<7 | 0x22, + 28093 - 19968: jis0212<<14 | 0x26<<7 | 0x32, + 28095 - 19968: jis0212<<14 | 0x26<<7 | 0x33, + 28096 - 19968: jis0208<<14 | 0x2C<<7 | 0x43, + 28100 - 19968: jis0212<<14 | 0x26<<7 | 0x34, + 28101 - 19968: jis0208<<14 | 0x3D<<7 | 0x27, + 28102 - 19968: jis0208<<14 | 0x3D<<7 | 0x21, + 28103 - 19968: jis0208<<14 | 0x3D<<7 | 0x1E, + 28104 - 19968: jis0212<<14 | 0x26<<7 | 0x35, + 28106 - 19968: jis0212<<14 | 0x26<<7 | 0x36, + 28107 - 19968: jis0208<<14 | 0x2D<<7 | 0x33, + 28108 - 19968: jis0208<<14 | 0x3D<<7 | 0x24, + 28110 - 19968: jis0212<<14 | 0x26<<7 | 0x37, + 28111 - 19968: jis0208<<14 | 0x59<<7 | 0x44, + 28113 - 19968: jis0208<<14 | 0x1C<<7 | 0x29, + 28114 - 19968: jis0208<<14 | 0x3D<<7 | 0x26, + 28117 - 19968: jis0208<<14 | 0x3D<<7 | 0x2B, + 28118 - 19968: jis0212<<14 | 0x26<<7 | 0x39, + 28120 - 19968: jis0208<<14 | 0x24<<7 | 0x50, + 28121 - 19968: jis0208<<14 | 0x3D<<7 | 0x29, + 28123 - 19968: jis0212<<14 | 0x26<<7 | 0x3A, + 28125 - 19968: jis0212<<14 | 0x26<<7 | 0x3B, + 28126 - 19968: jis0208<<14 | 0x3D<<7 | 0x23, + 28127 - 19968: jis0212<<14 | 0x26<<7 | 0x3C, + 28128 - 19968: jis0212<<14 | 0x26<<7 | 0x3D, + 28129 - 19968: jis0208<<14 | 0x22<<7 | 0x17, + 28130 - 19968: jis0212<<14 | 0x26<<7 | 0x3E, + 28132 - 19968: jis0208<<14 | 0x3D<<7 | 0x2A, + 28133 - 19968: jis0212<<14 | 0x26<<7 | 0x3F, + 28134 - 19968: jis0208<<14 | 0x3D<<7 | 0x1F, + 28136 - 19968: jis0208<<14 | 0x3D<<7 | 0x25, + 28137 - 19968: jis0212<<14 | 0x26<<7 | 0x40, + 28138 - 19968: jis0208<<14 | 0x3D<<7 | 0x2C, + 28139 - 19968: jis0208<<14 | 0x0F<<7 | 0x5B, + 28140 - 19968: jis0208<<14 | 0x3D<<7 | 0x22, + 28142 - 19968: jis0208<<14 | 0x3D<<7 | 0x2D, + 28143 - 19968: jis0212<<14 | 0x26<<7 | 0x41, + 28144 - 19968: jis0212<<14 | 0x26<<7 | 0x42, + 28145 - 19968: jis0208<<14 | 0x1E<<7 | 0x1B, + 28146 - 19968: jis0208<<14 | 0x59<<7 | 0x46, + 28147 - 19968: jis0208<<14 | 0x1C<<7 | 0x3E, + 28148 - 19968: jis0212<<14 | 0x26<<7 | 0x43, + 28149 - 19968: jis0208<<14 | 0x29<<7 | 0x04, + 28150 - 19968: jis0212<<14 | 0x26<<7 | 0x44, + 28151 - 19968: jis0208<<14 | 0x19<<7 | 0x0D, + 28152 - 19968: jis0208<<14 | 0x59<<7 | 0x45, + 28153 - 19968: jis0208<<14 | 0x3D<<7 | 0x1A, + 28154 - 19968: jis0208<<14 | 0x3D<<7 | 0x28, + 28155 - 19968: jis0208<<14 | 0x24<<7 | 0x19, + 28156 - 19968: jis0208<<14 | 0x59<<7 | 0x47, + 28160 - 19968: jis0212<<14 | 0x26<<7 | 0x46, + 28164 - 19968: jis0212<<14 | 0x26<<7 | 0x47, + 28165 - 19968: jis0208<<14 | 0x1F<<7 | 0x15, + 28167 - 19968: jis0208<<14 | 0x12<<7 | 0x48, + 28168 - 19968: jis0208<<14 | 0x19<<7 | 0x30, + 28169 - 19968: jis0208<<14 | 0x1D<<7 | 0x23, + 28170 - 19968: jis0208<<14 | 0x3D<<7 | 0x1C, + 28171 - 19968: jis0208<<14 | 0x1C<<7 | 0x21, + 28179 - 19968: jis0208<<14 | 0x16<<7 | 0x2B, + 28181 - 19968: jis0208<<14 | 0x3D<<7 | 0x1B, + 28185 - 19968: jis0208<<14 | 0x3D<<7 | 0x31, + 28186 - 19968: jis0208<<14 | 0x1C<<7 | 0x4C, + 28187 - 19968: jis0208<<14 | 0x17<<7 | 0x19, + 28189 - 19968: jis0208<<14 | 0x3D<<7 | 0x40, + 28190 - 19968: jis0212<<14 | 0x26<<7 | 0x48, + 28191 - 19968: jis0208<<14 | 0x3D<<7 | 0x3A, + 28192 - 19968: jis0208<<14 | 0x14<<7 | 0x53, + 28193 - 19968: jis0208<<14 | 0x24<<7 | 0x2E, + 28194 - 19968: jis0212<<14 | 0x26<<7 | 0x49, + 28195 - 19968: jis0208<<14 | 0x3D<<7 | 0x35, + 28196 - 19968: jis0208<<14 | 0x3D<<7 | 0x3E, + 28197 - 19968: jis0208<<14 | 0x0F<<7 | 0x0E, + 28198 - 19968: jis0208<<14 | 0x10<<7 | 0x11, + 28199 - 19968: jis0208<<14 | 0x59<<7 | 0x4A, + 28201 - 19968: jis0208<<14 | 0x11<<7 | 0x18, + 28203 - 19968: jis0208<<14 | 0x3D<<7 | 0x37, + 28204 - 19968: jis0208<<14 | 0x21<<7 | 0x0B, + 28205 - 19968: jis0208<<14 | 0x3D<<7 | 0x2E, + 28206 - 19968: jis0208<<14 | 0x3D<<7 | 0x30, + 28207 - 19968: jis0208<<14 | 0x18<<7 | 0x20, + 28210 - 19968: jis0212<<14 | 0x26<<7 | 0x4B, + 28214 - 19968: jis0212<<14 | 0x26<<7 | 0x4C, + 28216 - 19968: jis0208<<14 | 0x3D<<7 | 0x41, + 28217 - 19968: jis0208<<14 | 0x59<<7 | 0x48, + 28218 - 19968: jis0208<<14 | 0x3D<<7 | 0x3C, + 28219 - 19968: jis0212<<14 | 0x26<<7 | 0x4E, + 28220 - 19968: jis0208<<14 | 0x59<<7 | 0x4B, + 28222 - 19968: jis0208<<14 | 0x3D<<7 | 0x34, + 28227 - 19968: jis0208<<14 | 0x3D<<7 | 0x3B, + 28228 - 19968: jis0212<<14 | 0x26<<7 | 0x50, + 28229 - 19968: jis0212<<14 | 0x26<<7 | 0x51, + 28232 - 19968: jis0212<<14 | 0x26<<7 | 0x52, + 28233 - 19968: jis0212<<14 | 0x26<<7 | 0x53, + 28234 - 19968: jis0208<<14 | 0x2B<<7 | 0x0A, + 28235 - 19968: jis0212<<14 | 0x26<<7 | 0x54, + 28237 - 19968: jis0208<<14 | 0x3D<<7 | 0x39, + 28238 - 19968: jis0208<<14 | 0x3D<<7 | 0x3D, + 28239 - 19968: jis0212<<14 | 0x26<<7 | 0x55, + 28241 - 19968: jis0212<<14 | 0x26<<7 | 0x56, + 28242 - 19968: jis0212<<14 | 0x26<<7 | 0x57, + 28243 - 19968: jis0212<<14 | 0x26<<7 | 0x58, + 28244 - 19968: jis0212<<14 | 0x26<<7 | 0x59, + 28246 - 19968: jis0208<<14 | 0x17<<7 | 0x2F, + 28247 - 19968: jis0212<<14 | 0x26<<7 | 0x5A, + 28248 - 19968: jis0208<<14 | 0x1D<<7 | 0x24, + 28251 - 19968: jis0208<<14 | 0x22<<7 | 0x18, + 28252 - 19968: jis0208<<14 | 0x59<<7 | 0x49, + 28253 - 19968: jis0212<<14 | 0x26<<7 | 0x5C, + 28254 - 19968: jis0212<<14 | 0x26<<7 | 0x5D, + 28255 - 19968: jis0208<<14 | 0x3D<<7 | 0x33, + 28258 - 19968: jis0212<<14 | 0x27<<7 | 0x00, + 28259 - 19968: jis0212<<14 | 0x27<<7 | 0x01, + 28263 - 19968: jis0208<<14 | 0x2C<<7 | 0x0E, + 28264 - 19968: jis0212<<14 | 0x27<<7 | 0x02, + 28267 - 19968: jis0208<<14 | 0x3D<<7 | 0x36, + 28270 - 19968: jis0208<<14 | 0x3D<<7 | 0x2F, + 28271 - 19968: jis0208<<14 | 0x24<<7 | 0x51, + 28274 - 19968: jis0208<<14 | 0x3D<<7 | 0x32, + 28275 - 19968: jis0212<<14 | 0x27<<7 | 0x03, + 28278 - 19968: jis0208<<14 | 0x3D<<7 | 0x38, + 28283 - 19968: jis0212<<14 | 0x27<<7 | 0x04, + 28285 - 19968: jis0212<<14 | 0x27<<7 | 0x05, + 28286 - 19968: jis0208<<14 | 0x2E<<7 | 0x30, + 28287 - 19968: jis0208<<14 | 0x1B<<7 | 0x1D, + 28288 - 19968: jis0208<<14 | 0x2A<<7 | 0x5D, + 28290 - 19968: jis0208<<14 | 0x3D<<7 | 0x42, + 28300 - 19968: jis0208<<14 | 0x27<<7 | 0x0D, + 28301 - 19968: jis0212<<14 | 0x27<<7 | 0x06, + 28303 - 19968: jis0208<<14 | 0x3D<<7 | 0x4E, + 28304 - 19968: jis0208<<14 | 0x17<<7 | 0x1A, + 28307 - 19968: jis0212<<14 | 0x27<<7 | 0x07, + 28310 - 19968: jis0208<<14 | 0x1C<<7 | 0x3F, + 28312 - 19968: jis0208<<14 | 0x3D<<7 | 0x44, + 28313 - 19968: jis0212<<14 | 0x27<<7 | 0x08, + 28316 - 19968: jis0208<<14 | 0x2D<<7 | 0x0E, + 28317 - 19968: jis0208<<14 | 0x18<<7 | 0x21, + 28319 - 19968: jis0208<<14 | 0x3D<<7 | 0x51, + 28320 - 19968: jis0212<<14 | 0x27<<7 | 0x09, + 28322 - 19968: jis0208<<14 | 0x0F<<7 | 0x4D, + 28325 - 19968: jis0208<<14 | 0x3D<<7 | 0x4F, + 28327 - 19968: jis0212<<14 | 0x27<<7 | 0x0A, + 28330 - 19968: jis0208<<14 | 0x3D<<7 | 0x43, + 28333 - 19968: jis0212<<14 | 0x27<<7 | 0x0B, + 28334 - 19968: jis0212<<14 | 0x27<<7 | 0x0C, + 28335 - 19968: jis0208<<14 | 0x3D<<7 | 0x49, + 28337 - 19968: jis0212<<14 | 0x27<<7 | 0x0D, + 28338 - 19968: jis0208<<14 | 0x3D<<7 | 0x4B, + 28339 - 19968: jis0212<<14 | 0x27<<7 | 0x0E, + 28342 - 19968: jis0208<<14 | 0x2C<<7 | 0x2E, + 28343 - 19968: jis0208<<14 | 0x3D<<7 | 0x46, + 28346 - 19968: jis0208<<14 | 0x24<<7 | 0x0D, + 28347 - 19968: jis0212<<14 | 0x27<<7 | 0x0F, + 28349 - 19968: jis0208<<14 | 0x3D<<7 | 0x48, + 28351 - 19968: jis0208<<14 | 0x59<<7 | 0x4C, + 28352 - 19968: jis0212<<14 | 0x27<<7 | 0x11, + 28353 - 19968: jis0212<<14 | 0x27<<7 | 0x12, + 28354 - 19968: jis0208<<14 | 0x3D<<7 | 0x50, + 28355 - 19968: jis0212<<14 | 0x27<<7 | 0x13, + 28356 - 19968: jis0208<<14 | 0x3D<<7 | 0x4A, + 28357 - 19968: jis0208<<14 | 0x2B<<7 | 0x26, + 28359 - 19968: jis0212<<14 | 0x27<<7 | 0x14, + 28360 - 19968: jis0212<<14 | 0x27<<7 | 0x15, + 28361 - 19968: jis0208<<14 | 0x3D<<7 | 0x45, + 28362 - 19968: jis0212<<14 | 0x27<<7 | 0x16, + 28363 - 19968: jis0208<<14 | 0x1B<<7 | 0x01, + 28364 - 19968: jis0208<<14 | 0x3D<<7 | 0x5D, + 28365 - 19968: jis0212<<14 | 0x27<<7 | 0x17, + 28366 - 19968: jis0212<<14 | 0x27<<7 | 0x18, + 28367 - 19968: jis0212<<14 | 0x27<<7 | 0x19, + 28369 - 19968: jis0208<<14 | 0x12<<7 | 0x49, + 28371 - 19968: jis0208<<14 | 0x3D<<7 | 0x47, + 28372 - 19968: jis0208<<14 | 0x3D<<7 | 0x4C, + 28373 - 19968: jis0208<<14 | 0x3D<<7 | 0x4D, + 28381 - 19968: jis0208<<14 | 0x21<<7 | 0x4B, + 28382 - 19968: jis0208<<14 | 0x21<<7 | 0x39, + 28395 - 19968: jis0212<<14 | 0x27<<7 | 0x1A, + 28396 - 19968: jis0208<<14 | 0x3D<<7 | 0x55, + 28397 - 19968: jis0212<<14 | 0x27<<7 | 0x1B, + 28398 - 19968: jis0212<<14 | 0x27<<7 | 0x1C, + 28399 - 19968: jis0208<<14 | 0x3D<<7 | 0x5B, + 28402 - 19968: jis0208<<14 | 0x3D<<7 | 0x59, + 28404 - 19968: jis0208<<14 | 0x24<<7 | 0x08, + 28407 - 19968: jis0208<<14 | 0x3E<<7 | 0x02, + 28408 - 19968: jis0208<<14 | 0x3D<<7 | 0x56, + 28409 - 19968: jis0212<<14 | 0x27<<7 | 0x1D, + 28411 - 19968: jis0212<<14 | 0x27<<7 | 0x1E, + 28413 - 19968: jis0212<<14 | 0x27<<7 | 0x1F, + 28414 - 19968: jis0208<<14 | 0x3D<<7 | 0x57, + 28415 - 19968: jis0208<<14 | 0x3D<<7 | 0x3F, + 28417 - 19968: jis0208<<14 | 0x14<<7 | 0x58, + 28418 - 19968: jis0208<<14 | 0x28<<7 | 0x19, + 28420 - 19968: jis0212<<14 | 0x27<<7 | 0x20, + 28422 - 19968: jis0208<<14 | 0x1B<<7 | 0x1E, + 28424 - 19968: jis0212<<14 | 0x27<<7 | 0x21, + 28425 - 19968: jis0208<<14 | 0x18<<7 | 0x56, + 28426 - 19968: jis0212<<14 | 0x27<<7 | 0x22, + 28428 - 19968: jis0212<<14 | 0x27<<7 | 0x23, + 28429 - 19968: jis0212<<14 | 0x27<<7 | 0x24, + 28431 - 19968: jis0208<<14 | 0x2E<<7 | 0x12, + 28433 - 19968: jis0208<<14 | 0x3D<<7 | 0x53, + 28435 - 19968: jis0208<<14 | 0x3E<<7 | 0x01, + 28436 - 19968: jis0208<<14 | 0x10<<7 | 0x48, + 28437 - 19968: jis0208<<14 | 0x20<<7 | 0x45, + 28438 - 19968: jis0212<<14 | 0x27<<7 | 0x25, + 28440 - 19968: jis0212<<14 | 0x27<<7 | 0x26, + 28442 - 19968: jis0212<<14 | 0x27<<7 | 0x27, + 28443 - 19968: jis0212<<14 | 0x27<<7 | 0x28, + 28448 - 19968: jis0208<<14 | 0x26<<7 | 0x58, + 28450 - 19968: jis0208<<14 | 0x13<<7 | 0x20, + 28451 - 19968: jis0208<<14 | 0x2D<<7 | 0x59, + 28454 - 19968: jis0212<<14 | 0x27<<7 | 0x29, + 28457 - 19968: jis0212<<14 | 0x27<<7 | 0x2A, + 28458 - 19968: jis0212<<14 | 0x27<<7 | 0x2B, + 28459 - 19968: jis0208<<14 | 0x2B<<7 | 0x00, + 28460 - 19968: jis0208<<14 | 0x23<<7 | 0x31, + 28461 - 19968: jis0212<<14 | 0x27<<7 | 0x32, + 28463 - 19968: jis0212<<14 | 0x27<<7 | 0x2C, + 28464 - 19968: jis0212<<14 | 0x27<<7 | 0x2D, + 28465 - 19968: jis0208<<14 | 0x3D<<7 | 0x5A, + 28466 - 19968: jis0208<<14 | 0x3D<<7 | 0x5C, + 28467 - 19968: jis0212<<14 | 0x27<<7 | 0x2E, + 28470 - 19968: jis0212<<14 | 0x27<<7 | 0x2F, + 28472 - 19968: jis0208<<14 | 0x20<<7 | 0x11, + 28475 - 19968: jis0212<<14 | 0x27<<7 | 0x30, + 28476 - 19968: jis0212<<14 | 0x27<<7 | 0x31, + 28478 - 19968: jis0208<<14 | 0x3E<<7 | 0x00, + 28479 - 19968: jis0208<<14 | 0x3D<<7 | 0x58, + 28481 - 19968: jis0208<<14 | 0x3D<<7 | 0x52, + 28485 - 19968: jis0208<<14 | 0x13<<7 | 0x22, + 28495 - 19968: jis0212<<14 | 0x27<<7 | 0x33, + 28497 - 19968: jis0212<<14 | 0x27<<7 | 0x34, + 28498 - 19968: jis0212<<14 | 0x27<<7 | 0x35, + 28499 - 19968: jis0212<<14 | 0x27<<7 | 0x36, + 28500 - 19968: jis0208<<14 | 0x16<<7 | 0x48, + 28503 - 19968: jis0212<<14 | 0x27<<7 | 0x37, + 28504 - 19968: jis0208<<14 | 0x3E<<7 | 0x0E, + 28505 - 19968: jis0212<<14 | 0x27<<7 | 0x38, + 28506 - 19968: jis0212<<14 | 0x27<<7 | 0x39, + 28507 - 19968: jis0208<<14 | 0x3E<<7 | 0x09, + 28508 - 19968: jis0208<<14 | 0x1F<<7 | 0x57, + 28509 - 19968: jis0212<<14 | 0x27<<7 | 0x3A, + 28510 - 19968: jis0212<<14 | 0x27<<7 | 0x3B, + 28511 - 19968: jis0208<<14 | 0x12<<7 | 0x42, + 28513 - 19968: jis0212<<14 | 0x27<<7 | 0x3C, + 28514 - 19968: jis0212<<14 | 0x27<<7 | 0x3D, + 28516 - 19968: jis0208<<14 | 0x1C<<7 | 0x40, + 28518 - 19968: jis0208<<14 | 0x3E<<7 | 0x12, + 28520 - 19968: jis0212<<14 | 0x27<<7 | 0x3E, + 28524 - 19968: jis0212<<14 | 0x27<<7 | 0x3F, + 28525 - 19968: jis0208<<14 | 0x3E<<7 | 0x0B, + 28526 - 19968: jis0208<<14 | 0x23<<7 | 0x0B, + 28527 - 19968: jis0208<<14 | 0x3E<<7 | 0x08, + 28528 - 19968: jis0208<<14 | 0x23<<7 | 0x38, + 28532 - 19968: jis0208<<14 | 0x3E<<7 | 0x2B, + 28536 - 19968: jis0208<<14 | 0x3E<<7 | 0x05, + 28538 - 19968: jis0208<<14 | 0x3E<<7 | 0x04, + 28540 - 19968: jis0208<<14 | 0x3E<<7 | 0x0D, + 28541 - 19968: jis0212<<14 | 0x27<<7 | 0x40, + 28542 - 19968: jis0212<<14 | 0x27<<7 | 0x41, + 28544 - 19968: jis0208<<14 | 0x3E<<7 | 0x07, + 28545 - 19968: jis0208<<14 | 0x3E<<7 | 0x06, + 28546 - 19968: jis0208<<14 | 0x3E<<7 | 0x0C, + 28547 - 19968: jis0212<<14 | 0x27<<7 | 0x42, + 28548 - 19968: jis0208<<14 | 0x1F<<7 | 0x00, + 28550 - 19968: jis0208<<14 | 0x3E<<7 | 0x03, + 28551 - 19968: jis0212<<14 | 0x27<<7 | 0x43, + 28552 - 19968: jis0208<<14 | 0x59<<7 | 0x4D, + 28555 - 19968: jis0212<<14 | 0x27<<7 | 0x45, + 28556 - 19968: jis0212<<14 | 0x27<<7 | 0x46, + 28557 - 19968: jis0212<<14 | 0x27<<7 | 0x47, + 28558 - 19968: jis0208<<14 | 0x3E<<7 | 0x0F, + 28560 - 19968: jis0212<<14 | 0x27<<7 | 0x48, + 28561 - 19968: jis0208<<14 | 0x3E<<7 | 0x10, + 28562 - 19968: jis0212<<14 | 0x27<<7 | 0x49, + 28563 - 19968: jis0212<<14 | 0x27<<7 | 0x4A, + 28564 - 19968: jis0212<<14 | 0x27<<7 | 0x4B, + 28566 - 19968: jis0212<<14 | 0x27<<7 | 0x4C, + 28567 - 19968: jis0208<<14 | 0x13<<7 | 0x21, + 28570 - 19968: jis0212<<14 | 0x27<<7 | 0x4D, + 28575 - 19968: jis0212<<14 | 0x27<<7 | 0x4E, + 28576 - 19968: jis0212<<14 | 0x27<<7 | 0x4F, + 28577 - 19968: jis0208<<14 | 0x3E<<7 | 0x15, + 28579 - 19968: jis0208<<14 | 0x3E<<7 | 0x14, + 28580 - 19968: jis0208<<14 | 0x3E<<7 | 0x16, + 28581 - 19968: jis0212<<14 | 0x27<<7 | 0x50, + 28582 - 19968: jis0212<<14 | 0x27<<7 | 0x51, + 28583 - 19968: jis0212<<14 | 0x27<<7 | 0x52, + 28584 - 19968: jis0212<<14 | 0x27<<7 | 0x53, + 28586 - 19968: jis0208<<14 | 0x3E<<7 | 0x19, + 28590 - 19968: jis0212<<14 | 0x27<<7 | 0x54, + 28591 - 19968: jis0212<<14 | 0x27<<7 | 0x55, + 28592 - 19968: jis0212<<14 | 0x27<<7 | 0x56, + 28593 - 19968: jis0208<<14 | 0x24<<7 | 0x22, + 28595 - 19968: jis0208<<14 | 0x3E<<7 | 0x13, + 28597 - 19968: jis0208<<14 | 0x59<<7 | 0x4E, + 28598 - 19968: jis0212<<14 | 0x27<<7 | 0x58, + 28601 - 19968: jis0208<<14 | 0x3E<<7 | 0x17, + 28604 - 19968: jis0212<<14 | 0x27<<7 | 0x59, + 28608 - 19968: jis0208<<14 | 0x16<<7 | 0x42, + 28609 - 19968: jis0208<<14 | 0x21<<7 | 0x58, + 28610 - 19968: jis0208<<14 | 0x3E<<7 | 0x11, + 28611 - 19968: jis0208<<14 | 0x26<<7 | 0x1A, + 28613 - 19968: jis0212<<14 | 0x27<<7 | 0x5A, + 28614 - 19968: jis0208<<14 | 0x3E<<7 | 0x18, + 28615 - 19968: jis0212<<14 | 0x27<<7 | 0x5B, + 28616 - 19968: jis0212<<14 | 0x27<<7 | 0x5C, + 28618 - 19968: jis0212<<14 | 0x27<<7 | 0x5D, + 28628 - 19968: jis0208<<14 | 0x3E<<7 | 0x1D, + 28629 - 19968: jis0208<<14 | 0x3E<<7 | 0x1B, + 28632 - 19968: jis0208<<14 | 0x3E<<7 | 0x1E, + 28634 - 19968: jis0212<<14 | 0x28<<7 | 0x00, + 28635 - 19968: jis0208<<14 | 0x3E<<7 | 0x21, + 28638 - 19968: jis0212<<14 | 0x28<<7 | 0x01, + 28639 - 19968: jis0208<<14 | 0x3E<<7 | 0x1A, + 28640 - 19968: jis0208<<14 | 0x18<<7 | 0x49, + 28641 - 19968: jis0208<<14 | 0x26<<7 | 0x07, + 28644 - 19968: jis0208<<14 | 0x3D<<7 | 0x18, + 28648 - 19968: jis0212<<14 | 0x28<<7 | 0x02, + 28649 - 19968: jis0212<<14 | 0x28<<7 | 0x03, + 28651 - 19968: jis0208<<14 | 0x2C<<7 | 0x53, + 28652 - 19968: jis0208<<14 | 0x3E<<7 | 0x1C, + 28654 - 19968: jis0208<<14 | 0x3E<<7 | 0x20, + 28655 - 19968: jis0208<<14 | 0x21<<7 | 0x54, + 28656 - 19968: jis0212<<14 | 0x28<<7 | 0x04, + 28657 - 19968: jis0208<<14 | 0x3E<<7 | 0x1F, + 28659 - 19968: jis0208<<14 | 0x3E<<7 | 0x0A, + 28661 - 19968: jis0208<<14 | 0x59<<7 | 0x4F, + 28662 - 19968: jis0208<<14 | 0x4E<<7 | 0x48, + 28665 - 19968: jis0212<<14 | 0x28<<7 | 0x06, + 28666 - 19968: jis0208<<14 | 0x3E<<7 | 0x24, + 28668 - 19968: jis0212<<14 | 0x28<<7 | 0x07, + 28669 - 19968: jis0212<<14 | 0x28<<7 | 0x08, + 28670 - 19968: jis0208<<14 | 0x3E<<7 | 0x28, + 28672 - 19968: jis0212<<14 | 0x28<<7 | 0x09, + 28673 - 19968: jis0208<<14 | 0x3E<<7 | 0x26, + 28677 - 19968: jis0208<<14 | 0x59<<7 | 0x50, + 28678 - 19968: jis0212<<14 | 0x28<<7 | 0x0B, + 28679 - 19968: jis0208<<14 | 0x59<<7 | 0x51, + 28681 - 19968: jis0208<<14 | 0x3E<<7 | 0x22, + 28683 - 19968: jis0208<<14 | 0x3E<<7 | 0x23, + 28685 - 19968: jis0212<<14 | 0x28<<7 | 0x0D, + 28687 - 19968: jis0208<<14 | 0x3E<<7 | 0x27, + 28689 - 19968: jis0208<<14 | 0x3E<<7 | 0x25, + 28693 - 19968: jis0208<<14 | 0x28<<7 | 0x2D, + 28695 - 19968: jis0212<<14 | 0x28<<7 | 0x0E, + 28696 - 19968: jis0208<<14 | 0x3E<<7 | 0x2D, + 28698 - 19968: jis0208<<14 | 0x3E<<7 | 0x2A, + 28699 - 19968: jis0208<<14 | 0x3E<<7 | 0x29, + 28701 - 19968: jis0208<<14 | 0x3E<<7 | 0x2C, + 28702 - 19968: jis0208<<14 | 0x25<<7 | 0x33, + 28703 - 19968: jis0208<<14 | 0x3E<<7 | 0x2E, + 28704 - 19968: jis0212<<14 | 0x28<<7 | 0x0F, + 28707 - 19968: jis0212<<14 | 0x28<<7 | 0x10, + 28710 - 19968: jis0208<<14 | 0x22<<7 | 0x54, + 28711 - 19968: jis0208<<14 | 0x21<<7 | 0x4C, + 28712 - 19968: jis0208<<14 | 0x59<<7 | 0x52, + 28716 - 19968: jis0208<<14 | 0x1F<<7 | 0x04, + 28719 - 19968: jis0212<<14 | 0x28<<7 | 0x11, + 28720 - 19968: jis0208<<14 | 0x3E<<7 | 0x2F, + 28722 - 19968: jis0208<<14 | 0x3E<<7 | 0x31, + 28724 - 19968: jis0212<<14 | 0x28<<7 | 0x12, + 28727 - 19968: jis0212<<14 | 0x28<<7 | 0x13, + 28729 - 19968: jis0212<<14 | 0x28<<7 | 0x14, + 28732 - 19968: jis0212<<14 | 0x28<<7 | 0x15, + 28734 - 19968: jis0208<<14 | 0x3E<<7 | 0x30, + 28739 - 19968: jis0212<<14 | 0x28<<7 | 0x16, + 28740 - 19968: jis0212<<14 | 0x28<<7 | 0x17, + 28744 - 19968: jis0212<<14 | 0x28<<7 | 0x18, + 28745 - 19968: jis0212<<14 | 0x28<<7 | 0x19, + 28746 - 19968: jis0212<<14 | 0x28<<7 | 0x1A, + 28747 - 19968: jis0212<<14 | 0x28<<7 | 0x1B, + 28748 - 19968: jis0208<<14 | 0x3D<<7 | 0x54, + 28750 - 19968: jis0212<<14 | 0x28<<7 | 0x20, + 28753 - 19968: jis0208<<14 | 0x3E<<7 | 0x32, + 28756 - 19968: jis0212<<14 | 0x28<<7 | 0x1C, + 28757 - 19968: jis0212<<14 | 0x28<<7 | 0x1D, + 28760 - 19968: jis0208<<14 | 0x25<<7 | 0x46, + 28765 - 19968: jis0212<<14 | 0x28<<7 | 0x1E, + 28766 - 19968: jis0212<<14 | 0x28<<7 | 0x1F, + 28771 - 19968: jis0208<<14 | 0x3E<<7 | 0x33, + 28772 - 19968: jis0212<<14 | 0x28<<7 | 0x21, + 28773 - 19968: jis0212<<14 | 0x28<<7 | 0x22, + 28779 - 19968: jis0208<<14 | 0x11<<7 | 0x2F, + 28780 - 19968: jis0212<<14 | 0x28<<7 | 0x23, + 28782 - 19968: jis0212<<14 | 0x28<<7 | 0x24, + 28783 - 19968: jis0208<<14 | 0x24<<7 | 0x53, + 28784 - 19968: jis0208<<14 | 0x12<<7 | 0x04, + 28789 - 19968: jis0212<<14 | 0x28<<7 | 0x25, + 28790 - 19968: jis0212<<14 | 0x28<<7 | 0x26, + 28792 - 19968: jis0208<<14 | 0x14<<7 | 0x43, + 28796 - 19968: jis0208<<14 | 0x1B<<7 | 0x3D, + 28797 - 19968: jis0208<<14 | 0x19<<7 | 0x31, + 28798 - 19968: jis0212<<14 | 0x28<<7 | 0x27, + 28801 - 19968: jis0212<<14 | 0x28<<7 | 0x28, + 28805 - 19968: jis0208<<14 | 0x59<<7 | 0x53, + 28806 - 19968: jis0212<<14 | 0x28<<7 | 0x2A, + 28809 - 19968: jis0208<<14 | 0x2E<<7 | 0x06, + 28810 - 19968: jis0208<<14 | 0x1E<<7 | 0x45, + 28814 - 19968: jis0208<<14 | 0x10<<7 | 0x49, + 28818 - 19968: jis0208<<14 | 0x3E<<7 | 0x35, + 28820 - 19968: jis0212<<14 | 0x28<<7 | 0x2B, + 28821 - 19968: jis0212<<14 | 0x28<<7 | 0x2C, + 28822 - 19968: jis0212<<14 | 0x28<<7 | 0x2D, + 28823 - 19968: jis0212<<14 | 0x28<<7 | 0x2E, + 28824 - 19968: jis0212<<14 | 0x28<<7 | 0x2F, + 28825 - 19968: jis0208<<14 | 0x3E<<7 | 0x34, + 28827 - 19968: jis0212<<14 | 0x28<<7 | 0x30, + 28836 - 19968: jis0212<<14 | 0x28<<7 | 0x31, + 28843 - 19968: jis0208<<14 | 0x59<<7 | 0x54, + 28844 - 19968: jis0208<<14 | 0x3E<<7 | 0x38, + 28845 - 19968: jis0208<<14 | 0x22<<7 | 0x19, + 28846 - 19968: jis0208<<14 | 0x3E<<7 | 0x3B, + 28847 - 19968: jis0208<<14 | 0x3E<<7 | 0x36, + 28848 - 19968: jis0212<<14 | 0x28<<7 | 0x33, + 28849 - 19968: jis0212<<14 | 0x28<<7 | 0x34, + 28851 - 19968: jis0208<<14 | 0x3E<<7 | 0x3A, + 28852 - 19968: jis0212<<14 | 0x28<<7 | 0x35, + 28855 - 19968: jis0212<<14 | 0x28<<7 | 0x36, + 28856 - 19968: jis0208<<14 | 0x3E<<7 | 0x39, + 28857 - 19968: jis0208<<14 | 0x24<<7 | 0x1F, + 28858 - 19968: jis0208<<14 | 0x0F<<7 | 0x38, + 28859 - 19968: jis0208<<14 | 0x58<<7 | 0x06, + 28872 - 19968: jis0208<<14 | 0x2D<<7 | 0x54, + 28874 - 19968: jis0212<<14 | 0x28<<7 | 0x37, + 28875 - 19968: jis0208<<14 | 0x3E<<7 | 0x3D, + 28879 - 19968: jis0208<<14 | 0x10<<7 | 0x07, + 28881 - 19968: jis0212<<14 | 0x28<<7 | 0x38, + 28883 - 19968: jis0212<<14 | 0x28<<7 | 0x39, + 28884 - 19968: jis0212<<14 | 0x28<<7 | 0x3A, + 28885 - 19968: jis0212<<14 | 0x28<<7 | 0x3B, + 28886 - 19968: jis0212<<14 | 0x28<<7 | 0x3C, + 28888 - 19968: jis0212<<14 | 0x28<<7 | 0x3D, + 28889 - 19968: jis0208<<14 | 0x3E<<7 | 0x3F, + 28892 - 19968: jis0212<<14 | 0x28<<7 | 0x3E, + 28893 - 19968: jis0208<<14 | 0x3E<<7 | 0x3E, + 28895 - 19968: jis0208<<14 | 0x3E<<7 | 0x3C, + 28900 - 19968: jis0212<<14 | 0x28<<7 | 0x3F, + 28913 - 19968: jis0208<<14 | 0x3E<<7 | 0x37, + 28921 - 19968: jis0208<<14 | 0x2A<<7 | 0x02, + 28922 - 19968: jis0212<<14 | 0x28<<7 | 0x40, + 28925 - 19968: jis0208<<14 | 0x3E<<7 | 0x41, + 28931 - 19968: jis0212<<14 | 0x28<<7 | 0x41, + 28932 - 19968: jis0208<<14 | 0x59<<7 | 0x56, + 28933 - 19968: jis0212<<14 | 0x28<<7 | 0x43, + 28934 - 19968: jis0212<<14 | 0x28<<7 | 0x44, + 28935 - 19968: jis0212<<14 | 0x28<<7 | 0x45, + 28937 - 19968: jis0208<<14 | 0x3E<<7 | 0x40, + 28939 - 19968: jis0212<<14 | 0x28<<7 | 0x46, + 28940 - 19968: jis0212<<14 | 0x28<<7 | 0x47, + 28943 - 19968: jis0208<<14 | 0x59<<7 | 0x55, + 28948 - 19968: jis0208<<14 | 0x10<<7 | 0x4A, + 28953 - 19968: jis0208<<14 | 0x3E<<7 | 0x43, + 28954 - 19968: jis0208<<14 | 0x29<<7 | 0x11, + 28956 - 19968: jis0208<<14 | 0x3E<<7 | 0x42, + 28958 - 19968: jis0212<<14 | 0x28<<7 | 0x49, + 28960 - 19968: jis0212<<14 | 0x28<<7 | 0x4A, + 28961 - 19968: jis0208<<14 | 0x2B<<7 | 0x14, + 28966 - 19968: jis0208<<14 | 0x1D<<7 | 0x26, + 28971 - 19968: jis0212<<14 | 0x28<<7 | 0x4B, + 28973 - 19968: jis0212<<14 | 0x28<<7 | 0x4C, + 28975 - 19968: jis0212<<14 | 0x28<<7 | 0x4D, + 28976 - 19968: jis0212<<14 | 0x28<<7 | 0x4E, + 28977 - 19968: jis0212<<14 | 0x28<<7 | 0x4F, + 28982 - 19968: jis0208<<14 | 0x20<<7 | 0x12, + 28984 - 19968: jis0212<<14 | 0x28<<7 | 0x50, + 28988 - 19968: jis0208<<14 | 0x1D<<7 | 0x25, + 28993 - 19968: jis0212<<14 | 0x28<<7 | 0x51, + 28997 - 19968: jis0212<<14 | 0x28<<7 | 0x52, + 28998 - 19968: jis0208<<14 | 0x59<<7 | 0x58, + 28999 - 19968: jis0208<<14 | 0x59<<7 | 0x59, + 29001 - 19968: jis0208<<14 | 0x2D<<7 | 0x5A, + 29002 - 19968: jis0212<<14 | 0x28<<7 | 0x55, + 29003 - 19968: jis0212<<14 | 0x28<<7 | 0x56, + 29004 - 19968: jis0208<<14 | 0x3E<<7 | 0x49, + 29006 - 19968: jis0208<<14 | 0x1F<<7 | 0x58, + 29008 - 19968: jis0212<<14 | 0x28<<7 | 0x57, + 29010 - 19968: jis0212<<14 | 0x28<<7 | 0x58, + 29013 - 19968: jis0208<<14 | 0x3E<<7 | 0x45, + 29014 - 19968: jis0208<<14 | 0x3E<<7 | 0x4A, + 29015 - 19968: jis0212<<14 | 0x28<<7 | 0x59, + 29017 - 19968: jis0208<<14 | 0x10<<7 | 0x4B, + 29018 - 19968: jis0212<<14 | 0x28<<7 | 0x5A, + 29020 - 19968: jis0208<<14 | 0x59<<7 | 0x57, + 29022 - 19968: jis0212<<14 | 0x28<<7 | 0x5C, + 29024 - 19968: jis0212<<14 | 0x28<<7 | 0x5D, + 29026 - 19968: jis0208<<14 | 0x3E<<7 | 0x48, + 29028 - 19968: jis0208<<14 | 0x26<<7 | 0x40, + 29029 - 19968: jis0208<<14 | 0x3E<<7 | 0x44, + 29030 - 19968: jis0208<<14 | 0x3E<<7 | 0x47, + 29031 - 19968: jis0208<<14 | 0x1D<<7 | 0x27, + 29032 - 19968: jis0212<<14 | 0x29<<7 | 0x00, + 29033 - 19968: jis0208<<14 | 0x27<<7 | 0x30, + 29036 - 19968: jis0208<<14 | 0x3E<<7 | 0x4B, + 29038 - 19968: jis0208<<14 | 0x1B<<7 | 0x30, + 29049 - 19968: jis0212<<14 | 0x29<<7 | 0x01, + 29053 - 19968: jis0208<<14 | 0x1F<<7 | 0x59, + 29056 - 19968: jis0212<<14 | 0x29<<7 | 0x02, + 29060 - 19968: jis0208<<14 | 0x3E<<7 | 0x4E, + 29061 - 19968: jis0212<<14 | 0x29<<7 | 0x03, + 29063 - 19968: jis0212<<14 | 0x29<<7 | 0x04, + 29064 - 19968: jis0208<<14 | 0x3E<<7 | 0x46, + 29066 - 19968: jis0208<<14 | 0x16<<7 | 0x06, + 29068 - 19968: jis0212<<14 | 0x29<<7 | 0x05, + 29071 - 19968: jis0208<<14 | 0x3E<<7 | 0x4C, + 29074 - 19968: jis0212<<14 | 0x29<<7 | 0x06, + 29076 - 19968: jis0208<<14 | 0x2C<<7 | 0x2F, + 29077 - 19968: jis0208<<14 | 0x3E<<7 | 0x4F, + 29081 - 19968: jis0208<<14 | 0x53<<7 | 0x05, + 29082 - 19968: jis0212<<14 | 0x29<<7 | 0x07, + 29083 - 19968: jis0212<<14 | 0x29<<7 | 0x08, + 29087 - 19968: jis0208<<14 | 0x1C<<7 | 0x2E, + 29088 - 19968: jis0212<<14 | 0x29<<7 | 0x09, + 29090 - 19968: jis0212<<14 | 0x29<<7 | 0x0A, + 29096 - 19968: jis0208<<14 | 0x3E<<7 | 0x50, + 29100 - 19968: jis0208<<14 | 0x3E<<7 | 0x51, + 29103 - 19968: jis0212<<14 | 0x29<<7 | 0x0B, + 29104 - 19968: jis0212<<14 | 0x29<<7 | 0x0C, + 29105 - 19968: jis0208<<14 | 0x26<<7 | 0x0D, + 29106 - 19968: jis0212<<14 | 0x29<<7 | 0x0D, + 29107 - 19968: jis0212<<14 | 0x29<<7 | 0x0E, + 29113 - 19968: jis0208<<14 | 0x3E<<7 | 0x53, + 29114 - 19968: jis0212<<14 | 0x29<<7 | 0x0F, + 29118 - 19968: jis0208<<14 | 0x3E<<7 | 0x54, + 29119 - 19968: jis0212<<14 | 0x29<<7 | 0x10, + 29120 - 19968: jis0212<<14 | 0x29<<7 | 0x11, + 29121 - 19968: jis0208<<14 | 0x59<<7 | 0x5B, + 29123 - 19968: jis0208<<14 | 0x26<<7 | 0x12, + 29124 - 19968: jis0212<<14 | 0x29<<7 | 0x13, + 29128 - 19968: jis0208<<14 | 0x24<<7 | 0x54, + 29129 - 19968: jis0208<<14 | 0x3E<<7 | 0x56, + 29131 - 19968: jis0212<<14 | 0x29<<7 | 0x14, + 29132 - 19968: jis0212<<14 | 0x29<<7 | 0x15, + 29134 - 19968: jis0208<<14 | 0x3E<<7 | 0x58, + 29136 - 19968: jis0208<<14 | 0x2D<<7 | 0x34, + 29138 - 19968: jis0208<<14 | 0x3E<<7 | 0x55, + 29139 - 19968: jis0212<<14 | 0x29<<7 | 0x16, + 29140 - 19968: jis0208<<14 | 0x3E<<7 | 0x57, + 29141 - 19968: jis0208<<14 | 0x10<<7 | 0x4C, + 29142 - 19968: jis0212<<14 | 0x29<<7 | 0x17, + 29143 - 19968: jis0208<<14 | 0x3E<<7 | 0x52, + 29145 - 19968: jis0212<<14 | 0x29<<7 | 0x18, + 29146 - 19968: jis0212<<14 | 0x29<<7 | 0x19, + 29148 - 19968: jis0212<<14 | 0x29<<7 | 0x1A, + 29151 - 19968: jis0208<<14 | 0x32<<7 | 0x3A, + 29152 - 19968: jis0208<<14 | 0x3E<<7 | 0x59, + 29157 - 19968: jis0208<<14 | 0x20<<7 | 0x46, + 29158 - 19968: jis0208<<14 | 0x1A<<7 | 0x17, + 29159 - 19968: jis0208<<14 | 0x3E<<7 | 0x5B, + 29164 - 19968: jis0208<<14 | 0x3E<<7 | 0x5A, + 29165 - 19968: jis0208<<14 | 0x1E<<7 | 0x03, + 29166 - 19968: jis0208<<14 | 0x31<<7 | 0x38, + 29173 - 19968: jis0208<<14 | 0x3E<<7 | 0x5C, + 29176 - 19968: jis0212<<14 | 0x29<<7 | 0x1B, + 29177 - 19968: jis0208<<14 | 0x3F<<7 | 0x00, + 29179 - 19968: jis0208<<14 | 0x3E<<7 | 0x4D, + 29180 - 19968: jis0208<<14 | 0x3E<<7 | 0x5D, + 29182 - 19968: jis0208<<14 | 0x59<<7 | 0x5C, + 29183 - 19968: jis0208<<14 | 0x3F<<7 | 0x01, + 29184 - 19968: jis0212<<14 | 0x29<<7 | 0x1D, + 29190 - 19968: jis0208<<14 | 0x26<<7 | 0x59, + 29191 - 19968: jis0212<<14 | 0x29<<7 | 0x1E, + 29192 - 19968: jis0212<<14 | 0x29<<7 | 0x1F, + 29193 - 19968: jis0212<<14 | 0x29<<7 | 0x20, + 29197 - 19968: jis0208<<14 | 0x3F<<7 | 0x02, + 29200 - 19968: jis0208<<14 | 0x3F<<7 | 0x03, + 29203 - 19968: jis0212<<14 | 0x29<<7 | 0x21, + 29207 - 19968: jis0212<<14 | 0x29<<7 | 0x22, + 29210 - 19968: jis0212<<14 | 0x29<<7 | 0x23, + 29211 - 19968: jis0208<<14 | 0x3F<<7 | 0x04, + 29213 - 19968: jis0212<<14 | 0x29<<7 | 0x24, + 29215 - 19968: jis0212<<14 | 0x29<<7 | 0x25, + 29220 - 19968: jis0212<<14 | 0x29<<7 | 0x26, + 29224 - 19968: jis0208<<14 | 0x3F<<7 | 0x05, + 29226 - 19968: jis0208<<14 | 0x23<<7 | 0x3D, + 29227 - 19968: jis0212<<14 | 0x29<<7 | 0x27, + 29228 - 19968: jis0208<<14 | 0x3F<<7 | 0x07, + 29229 - 19968: jis0208<<14 | 0x3F<<7 | 0x06, + 29231 - 19968: jis0212<<14 | 0x29<<7 | 0x28, + 29232 - 19968: jis0208<<14 | 0x3F<<7 | 0x08, + 29234 - 19968: jis0208<<14 | 0x3F<<7 | 0x09, + 29236 - 19968: jis0212<<14 | 0x29<<7 | 0x29, + 29237 - 19968: jis0208<<14 | 0x1B<<7 | 0x3E, + 29238 - 19968: jis0208<<14 | 0x28<<7 | 0x42, + 29240 - 19968: jis0212<<14 | 0x29<<7 | 0x2A, + 29241 - 19968: jis0212<<14 | 0x29<<7 | 0x2B, + 29242 - 19968: jis0208<<14 | 0x2B<<7 | 0x4B, + 29243 - 19968: jis0208<<14 | 0x3F<<7 | 0x0A, + 29244 - 19968: jis0208<<14 | 0x3F<<7 | 0x0B, + 29245 - 19968: jis0208<<14 | 0x20<<7 | 0x35, + 29246 - 19968: jis0208<<14 | 0x1B<<7 | 0x03, + 29247 - 19968: jis0208<<14 | 0x3F<<7 | 0x0C, + 29248 - 19968: jis0208<<14 | 0x3F<<7 | 0x0D, + 29249 - 19968: jis0212<<14 | 0x29<<7 | 0x2C, + 29250 - 19968: jis0212<<14 | 0x29<<7 | 0x2D, + 29251 - 19968: jis0212<<14 | 0x29<<7 | 0x2E, + 29253 - 19968: jis0212<<14 | 0x29<<7 | 0x2F, + 29254 - 19968: jis0208<<14 | 0x3F<<7 | 0x0E, + 29255 - 19968: jis0208<<14 | 0x29<<7 | 0x31, + 29256 - 19968: jis0208<<14 | 0x27<<7 | 0x26, + 29259 - 19968: jis0208<<14 | 0x3F<<7 | 0x0F, + 29260 - 19968: jis0208<<14 | 0x26<<7 | 0x36, + 29262 - 19968: jis0212<<14 | 0x29<<7 | 0x30, + 29263 - 19968: jis0212<<14 | 0x29<<7 | 0x31, + 29264 - 19968: jis0212<<14 | 0x29<<7 | 0x32, + 29266 - 19968: jis0208<<14 | 0x23<<7 | 0x0C, + 29267 - 19968: jis0212<<14 | 0x29<<7 | 0x33, + 29269 - 19968: jis0212<<14 | 0x29<<7 | 0x34, + 29270 - 19968: jis0212<<14 | 0x29<<7 | 0x35, + 29272 - 19968: jis0208<<14 | 0x3F<<7 | 0x10, + 29273 - 19968: jis0208<<14 | 0x11<<7 | 0x46, + 29274 - 19968: jis0212<<14 | 0x29<<7 | 0x36, + 29275 - 19968: jis0208<<14 | 0x14<<7 | 0x4C, + 29276 - 19968: jis0212<<14 | 0x29<<7 | 0x37, + 29277 - 19968: jis0208<<14 | 0x2B<<7 | 0x25, + 29278 - 19968: jis0212<<14 | 0x29<<7 | 0x38, + 29279 - 19968: jis0208<<14 | 0x2B<<7 | 0x15, + 29280 - 19968: jis0212<<14 | 0x29<<7 | 0x39, + 29281 - 19968: jis0208<<14 | 0x11<<7 | 0x13, + 29282 - 19968: jis0208<<14 | 0x2E<<7 | 0x13, + 29283 - 19968: jis0212<<14 | 0x29<<7 | 0x3A, + 29287 - 19968: jis0208<<14 | 0x2A<<7 | 0x31, + 29288 - 19968: jis0212<<14 | 0x29<<7 | 0x3B, + 29289 - 19968: jis0208<<14 | 0x29<<7 | 0x09, + 29291 - 19968: jis0212<<14 | 0x29<<7 | 0x3C, + 29294 - 19968: jis0212<<14 | 0x29<<7 | 0x3D, + 29295 - 19968: jis0212<<14 | 0x29<<7 | 0x3E, + 29297 - 19968: jis0212<<14 | 0x29<<7 | 0x3F, + 29298 - 19968: jis0208<<14 | 0x1F<<7 | 0x16, + 29300 - 19968: jis0208<<14 | 0x3F<<7 | 0x11, + 29303 - 19968: jis0212<<14 | 0x29<<7 | 0x40, + 29304 - 19968: jis0212<<14 | 0x29<<7 | 0x41, + 29305 - 19968: jis0208<<14 | 0x25<<7 | 0x22, + 29307 - 19968: jis0212<<14 | 0x29<<7 | 0x42, + 29308 - 19968: jis0212<<14 | 0x29<<7 | 0x43, + 29309 - 19968: jis0208<<14 | 0x17<<7 | 0x02, + 29310 - 19968: jis0208<<14 | 0x3F<<7 | 0x12, + 29311 - 19968: jis0212<<14 | 0x29<<7 | 0x44, + 29312 - 19968: jis0208<<14 | 0x19<<7 | 0x33, + 29313 - 19968: jis0208<<14 | 0x3F<<7 | 0x14, + 29314 - 19968: jis0208<<14 | 0x3F<<7 | 0x13, + 29316 - 19968: jis0212<<14 | 0x29<<7 | 0x45, + 29319 - 19968: jis0208<<14 | 0x3F<<7 | 0x15, + 29321 - 19968: jis0212<<14 | 0x29<<7 | 0x46, + 29325 - 19968: jis0212<<14 | 0x29<<7 | 0x47, + 29326 - 19968: jis0212<<14 | 0x29<<7 | 0x48, + 29330 - 19968: jis0208<<14 | 0x3F<<7 | 0x16, + 29331 - 19968: jis0212<<14 | 0x29<<7 | 0x49, + 29334 - 19968: jis0208<<14 | 0x3F<<7 | 0x17, + 29339 - 19968: jis0212<<14 | 0x29<<7 | 0x4A, + 29344 - 19968: jis0208<<14 | 0x14<<7 | 0x1D, + 29346 - 19968: jis0208<<14 | 0x3F<<7 | 0x18, + 29351 - 19968: jis0208<<14 | 0x3F<<7 | 0x19, + 29352 - 19968: jis0212<<14 | 0x29<<7 | 0x4B, + 29356 - 19968: jis0208<<14 | 0x17<<7 | 0x03, + 29357 - 19968: jis0212<<14 | 0x29<<7 | 0x4C, + 29358 - 19968: jis0212<<14 | 0x29<<7 | 0x4D, + 29359 - 19968: jis0208<<14 | 0x27<<7 | 0x27, + 29361 - 19968: jis0208<<14 | 0x59<<7 | 0x5D, + 29362 - 19968: jis0208<<14 | 0x3F<<7 | 0x1B, + 29364 - 19968: jis0212<<14 | 0x29<<7 | 0x4F, + 29366 - 19968: jis0208<<14 | 0x1D<<7 | 0x54, + 29369 - 19968: jis0208<<14 | 0x3F<<7 | 0x1A, + 29374 - 19968: jis0208<<14 | 0x5A<<7 | 0x00, + 29377 - 19968: jis0212<<14 | 0x29<<7 | 0x51, + 29378 - 19968: jis0208<<14 | 0x15<<7 | 0x17, + 29379 - 19968: jis0208<<14 | 0x3F<<7 | 0x1C, + 29380 - 19968: jis0208<<14 | 0x3F<<7 | 0x1E, + 29382 - 19968: jis0208<<14 | 0x3F<<7 | 0x1D, + 29383 - 19968: jis0212<<14 | 0x29<<7 | 0x52, + 29385 - 19968: jis0212<<14 | 0x29<<7 | 0x53, + 29388 - 19968: jis0212<<14 | 0x29<<7 | 0x54, + 29390 - 19968: jis0208<<14 | 0x3F<<7 | 0x1F, + 29392 - 19968: jis0208<<14 | 0x17<<7 | 0x30, + 29394 - 19968: jis0208<<14 | 0x3F<<7 | 0x20, + 29397 - 19968: jis0212<<14 | 0x29<<7 | 0x55, + 29398 - 19968: jis0212<<14 | 0x29<<7 | 0x56, + 29399 - 19968: jis0208<<14 | 0x15<<7 | 0x48, + 29400 - 19968: jis0212<<14 | 0x29<<7 | 0x57, + 29401 - 19968: jis0208<<14 | 0x20<<7 | 0x1F, + 29403 - 19968: jis0208<<14 | 0x18<<7 | 0x5C, + 29407 - 19968: jis0212<<14 | 0x29<<7 | 0x58, + 29408 - 19968: jis0208<<14 | 0x3F<<7 | 0x22, + 29409 - 19968: jis0208<<14 | 0x3F<<7 | 0x23, + 29410 - 19968: jis0208<<14 | 0x3F<<7 | 0x21, + 29413 - 19968: jis0212<<14 | 0x29<<7 | 0x59, + 29417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4C, + 29420 - 19968: jis0208<<14 | 0x25<<7 | 0x27, + 29421 - 19968: jis0208<<14 | 0x15<<7 | 0x18, + 29427 - 19968: jis0212<<14 | 0x29<<7 | 0x5A, + 29428 - 19968: jis0212<<14 | 0x29<<7 | 0x5B, + 29431 - 19968: jis0208<<14 | 0x3F<<7 | 0x25, + 29432 - 19968: jis0208<<14 | 0x22<<7 | 0x0B, + 29433 - 19968: jis0208<<14 | 0x3F<<7 | 0x24, + 29434 - 19968: jis0212<<14 | 0x29<<7 | 0x5C, + 29435 - 19968: jis0212<<14 | 0x29<<7 | 0x5D, + 29436 - 19968: jis0208<<14 | 0x2E<<7 | 0x14, + 29437 - 19968: jis0208<<14 | 0x26<<7 | 0x41, + 29438 - 19968: jis0212<<14 | 0x2A<<7 | 0x00, + 29442 - 19968: jis0212<<14 | 0x2A<<7 | 0x01, + 29444 - 19968: jis0212<<14 | 0x2A<<7 | 0x02, + 29445 - 19968: jis0212<<14 | 0x2A<<7 | 0x03, + 29447 - 19968: jis0212<<14 | 0x2A<<7 | 0x04, + 29450 - 19968: jis0208<<14 | 0x3F<<7 | 0x28, + 29451 - 19968: jis0212<<14 | 0x2A<<7 | 0x05, + 29453 - 19968: jis0212<<14 | 0x2A<<7 | 0x06, + 29458 - 19968: jis0212<<14 | 0x2A<<7 | 0x07, + 29459 - 19968: jis0212<<14 | 0x2A<<7 | 0x08, + 29462 - 19968: jis0208<<14 | 0x3F<<7 | 0x2A, + 29463 - 19968: jis0208<<14 | 0x3F<<7 | 0x27, + 29464 - 19968: jis0212<<14 | 0x2A<<7 | 0x09, + 29465 - 19968: jis0212<<14 | 0x2A<<7 | 0x0A, + 29467 - 19968: jis0208<<14 | 0x2B<<7 | 0x33, + 29468 - 19968: jis0208<<14 | 0x3F<<7 | 0x29, + 29469 - 19968: jis0208<<14 | 0x3F<<7 | 0x2B, + 29470 - 19968: jis0212<<14 | 0x2A<<7 | 0x0B, + 29471 - 19968: jis0208<<14 | 0x2D<<7 | 0x23, + 29474 - 19968: jis0212<<14 | 0x2A<<7 | 0x0C, + 29476 - 19968: jis0208<<14 | 0x5A<<7 | 0x01, + 29477 - 19968: jis0208<<14 | 0x3F<<7 | 0x2F, + 29479 - 19968: jis0212<<14 | 0x2A<<7 | 0x0E, + 29480 - 19968: jis0212<<14 | 0x2A<<7 | 0x0F, + 29481 - 19968: jis0208<<14 | 0x3F<<7 | 0x2E, + 29482 - 19968: jis0208<<14 | 0x22<<7 | 0x55, + 29483 - 19968: jis0208<<14 | 0x26<<7 | 0x0C, + 29484 - 19968: jis0212<<14 | 0x2A<<7 | 0x10, + 29486 - 19968: jis0208<<14 | 0x17<<7 | 0x04, + 29487 - 19968: jis0208<<14 | 0x3F<<7 | 0x2D, + 29489 - 19968: jis0212<<14 | 0x2A<<7 | 0x11, + 29490 - 19968: jis0212<<14 | 0x2A<<7 | 0x12, + 29492 - 19968: jis0208<<14 | 0x3F<<7 | 0x2C, + 29493 - 19968: jis0212<<14 | 0x2A<<7 | 0x13, + 29494 - 19968: jis0208<<14 | 0x2C<<7 | 0x10, + 29495 - 19968: jis0208<<14 | 0x2C<<7 | 0x11, + 29498 - 19968: jis0212<<14 | 0x2A<<7 | 0x14, + 29499 - 19968: jis0212<<14 | 0x2A<<7 | 0x15, + 29501 - 19968: jis0212<<14 | 0x2A<<7 | 0x16, + 29502 - 19968: jis0208<<14 | 0x3F<<7 | 0x30, + 29503 - 19968: jis0208<<14 | 0x10<<7 | 0x4D, + 29507 - 19968: jis0212<<14 | 0x2A<<7 | 0x17, + 29508 - 19968: jis0208<<14 | 0x18<<7 | 0x55, + 29509 - 19968: jis0208<<14 | 0x1A<<7 | 0x41, + 29517 - 19968: jis0212<<14 | 0x2A<<7 | 0x18, + 29518 - 19968: jis0208<<14 | 0x3F<<7 | 0x31, + 29519 - 19968: jis0208<<14 | 0x3F<<7 | 0x32, + 29520 - 19968: jis0212<<14 | 0x2A<<7 | 0x19, + 29522 - 19968: jis0212<<14 | 0x2A<<7 | 0x1A, + 29526 - 19968: jis0212<<14 | 0x2A<<7 | 0x1B, + 29527 - 19968: jis0208<<14 | 0x3F<<7 | 0x34, + 29528 - 19968: jis0212<<14 | 0x2A<<7 | 0x1C, + 29533 - 19968: jis0212<<14 | 0x2A<<7 | 0x1D, + 29534 - 19968: jis0212<<14 | 0x2A<<7 | 0x1E, + 29535 - 19968: jis0212<<14 | 0x2A<<7 | 0x1F, + 29536 - 19968: jis0212<<14 | 0x2A<<7 | 0x20, + 29539 - 19968: jis0208<<14 | 0x1C<<7 | 0x22, + 29542 - 19968: jis0212<<14 | 0x2A<<7 | 0x21, + 29543 - 19968: jis0212<<14 | 0x2A<<7 | 0x22, + 29544 - 19968: jis0208<<14 | 0x3F<<7 | 0x36, + 29545 - 19968: jis0212<<14 | 0x2A<<7 | 0x23, + 29546 - 19968: jis0208<<14 | 0x3F<<7 | 0x35, + 29547 - 19968: jis0212<<14 | 0x2A<<7 | 0x24, + 29548 - 19968: jis0212<<14 | 0x2A<<7 | 0x25, + 29550 - 19968: jis0212<<14 | 0x2A<<7 | 0x26, + 29551 - 19968: jis0212<<14 | 0x2A<<7 | 0x27, + 29552 - 19968: jis0208<<14 | 0x3F<<7 | 0x37, + 29553 - 19968: jis0212<<14 | 0x2A<<7 | 0x28, + 29554 - 19968: jis0208<<14 | 0x12<<7 | 0x2C, + 29557 - 19968: jis0208<<14 | 0x3F<<7 | 0x39, + 29559 - 19968: jis0208<<14 | 0x5A<<7 | 0x03, + 29560 - 19968: jis0208<<14 | 0x3F<<7 | 0x38, + 29561 - 19968: jis0212<<14 | 0x2A<<7 | 0x2A, + 29562 - 19968: jis0208<<14 | 0x3F<<7 | 0x3B, + 29563 - 19968: jis0208<<14 | 0x3F<<7 | 0x3A, + 29564 - 19968: jis0212<<14 | 0x2A<<7 | 0x2B, + 29568 - 19968: jis0212<<14 | 0x2A<<7 | 0x2C, + 29569 - 19968: jis0212<<14 | 0x2A<<7 | 0x2D, + 29571 - 19968: jis0212<<14 | 0x2A<<7 | 0x2E, + 29572 - 19968: jis0208<<14 | 0x17<<7 | 0x1B, + 29573 - 19968: jis0212<<14 | 0x2A<<7 | 0x2F, + 29574 - 19968: jis0212<<14 | 0x2A<<7 | 0x30, + 29575 - 19968: jis0208<<14 | 0x2D<<7 | 0x07, + 29577 - 19968: jis0208<<14 | 0x15<<7 | 0x2B, + 29579 - 19968: jis0208<<14 | 0x11<<7 | 0x05, + 29582 - 19968: jis0212<<14 | 0x2A<<7 | 0x31, + 29584 - 19968: jis0212<<14 | 0x2A<<7 | 0x32, + 29587 - 19968: jis0212<<14 | 0x2A<<7 | 0x33, + 29589 - 19968: jis0212<<14 | 0x2A<<7 | 0x34, + 29590 - 19968: jis0208<<14 | 0x15<<7 | 0x49, + 29591 - 19968: jis0212<<14 | 0x2A<<7 | 0x35, + 29592 - 19968: jis0212<<14 | 0x2A<<7 | 0x36, + 29596 - 19968: jis0212<<14 | 0x2A<<7 | 0x37, + 29598 - 19968: jis0212<<14 | 0x2A<<7 | 0x38, + 29599 - 19968: jis0212<<14 | 0x2A<<7 | 0x39, + 29600 - 19968: jis0212<<14 | 0x2A<<7 | 0x3A, + 29602 - 19968: jis0212<<14 | 0x2A<<7 | 0x3B, + 29605 - 19968: jis0212<<14 | 0x2A<<7 | 0x3C, + 29606 - 19968: jis0212<<14 | 0x2A<<7 | 0x3D, + 29609 - 19968: jis0208<<14 | 0x13<<7 | 0x40, + 29610 - 19968: jis0212<<14 | 0x2A<<7 | 0x3E, + 29611 - 19968: jis0212<<14 | 0x2A<<7 | 0x3F, + 29613 - 19968: jis0212<<14 | 0x2A<<7 | 0x40, + 29618 - 19968: jis0208<<14 | 0x2D<<7 | 0x47, + 29619 - 19968: jis0208<<14 | 0x3F<<7 | 0x3D, + 29621 - 19968: jis0212<<14 | 0x2A<<7 | 0x41, + 29623 - 19968: jis0212<<14 | 0x2A<<7 | 0x42, + 29625 - 19968: jis0212<<14 | 0x2A<<7 | 0x43, + 29627 - 19968: jis0208<<14 | 0x3F<<7 | 0x3F, + 29628 - 19968: jis0212<<14 | 0x2A<<7 | 0x44, + 29629 - 19968: jis0208<<14 | 0x5A<<7 | 0x04, + 29631 - 19968: jis0212<<14 | 0x2A<<7 | 0x46, + 29632 - 19968: jis0208<<14 | 0x3F<<7 | 0x40, + 29634 - 19968: jis0208<<14 | 0x11<<7 | 0x30, + 29637 - 19968: jis0212<<14 | 0x2A<<7 | 0x47, + 29638 - 19968: jis0212<<14 | 0x2A<<7 | 0x48, + 29640 - 19968: jis0208<<14 | 0x3F<<7 | 0x3C, + 29641 - 19968: jis0208<<14 | 0x5A<<7 | 0x05, + 29642 - 19968: jis0208<<14 | 0x1A<<7 | 0x18, + 29643 - 19968: jis0212<<14 | 0x2A<<7 | 0x4A, + 29644 - 19968: jis0212<<14 | 0x2A<<7 | 0x4B, + 29645 - 19968: jis0208<<14 | 0x23<<7 | 0x20, + 29646 - 19968: jis0208<<14 | 0x3F<<7 | 0x3E, + 29647 - 19968: jis0212<<14 | 0x2A<<7 | 0x4C, + 29650 - 19968: jis0208<<14 | 0x5A<<7 | 0x08, + 29651 - 19968: jis0212<<14 | 0x2A<<7 | 0x4E, + 29654 - 19968: jis0208<<14 | 0x5A<<7 | 0x06, + 29657 - 19968: jis0212<<14 | 0x2A<<7 | 0x50, + 29661 - 19968: jis0212<<14 | 0x2A<<7 | 0x51, + 29662 - 19968: jis0208<<14 | 0x3F<<7 | 0x43, + 29664 - 19968: jis0208<<14 | 0x1B<<7 | 0x4D, + 29665 - 19968: jis0212<<14 | 0x2A<<7 | 0x52, + 29667 - 19968: jis0208<<14 | 0x5A<<7 | 0x07, + 29669 - 19968: jis0208<<14 | 0x3F<<7 | 0x41, + 29670 - 19968: jis0212<<14 | 0x2A<<7 | 0x54, + 29671 - 19968: jis0212<<14 | 0x2A<<7 | 0x55, + 29673 - 19968: jis0212<<14 | 0x2A<<7 | 0x56, + 29674 - 19968: jis0208<<14 | 0x16<<7 | 0x1D, + 29677 - 19968: jis0208<<14 | 0x27<<7 | 0x28, + 29678 - 19968: jis0208<<14 | 0x3F<<7 | 0x42, + 29681 - 19968: jis0208<<14 | 0x3F<<7 | 0x5D, + 29684 - 19968: jis0212<<14 | 0x2A<<7 | 0x57, + 29685 - 19968: jis0208<<14 | 0x5A<<7 | 0x0A, + 29687 - 19968: jis0212<<14 | 0x2A<<7 | 0x59, + 29688 - 19968: jis0208<<14 | 0x3F<<7 | 0x48, + 29689 - 19968: jis0212<<14 | 0x2A<<7 | 0x5A, + 29690 - 19968: jis0212<<14 | 0x2A<<7 | 0x5B, + 29691 - 19968: jis0212<<14 | 0x2A<<7 | 0x5C, + 29693 - 19968: jis0212<<14 | 0x2A<<7 | 0x5D, + 29694 - 19968: jis0208<<14 | 0x17<<7 | 0x1C, + 29695 - 19968: jis0212<<14 | 0x2B<<7 | 0x00, + 29696 - 19968: jis0212<<14 | 0x2B<<7 | 0x01, + 29697 - 19968: jis0212<<14 | 0x2B<<7 | 0x02, + 29699 - 19968: jis0208<<14 | 0x14<<7 | 0x44, + 29700 - 19968: jis0212<<14 | 0x2B<<7 | 0x03, + 29701 - 19968: jis0208<<14 | 0x3F<<7 | 0x45, + 29702 - 19968: jis0208<<14 | 0x2C<<7 | 0x5C, + 29703 - 19968: jis0208<<14 | 0x5A<<7 | 0x09, + 29705 - 19968: jis0208<<14 | 0x2D<<7 | 0x0F, + 29706 - 19968: jis0212<<14 | 0x2B<<7 | 0x05, + 29713 - 19968: jis0212<<14 | 0x2B<<7 | 0x06, + 29722 - 19968: jis0212<<14 | 0x2B<<7 | 0x07, + 29723 - 19968: jis0212<<14 | 0x2B<<7 | 0x08, + 29730 - 19968: jis0208<<14 | 0x21<<7 | 0x55, + 29732 - 19968: jis0212<<14 | 0x2B<<7 | 0x09, + 29733 - 19968: jis0208<<14 | 0x3F<<7 | 0x47, + 29734 - 19968: jis0208<<14 | 0x5A<<7 | 0x0B, + 29736 - 19968: jis0212<<14 | 0x2B<<7 | 0x0B, + 29737 - 19968: jis0208<<14 | 0x5A<<7 | 0x0D, + 29738 - 19968: jis0208<<14 | 0x5A<<7 | 0x0C, + 29739 - 19968: jis0212<<14 | 0x2B<<7 | 0x0E, + 29740 - 19968: jis0212<<14 | 0x2B<<7 | 0x0F, + 29741 - 19968: jis0212<<14 | 0x2B<<7 | 0x10, + 29742 - 19968: jis0208<<14 | 0x5A<<7 | 0x0E, + 29743 - 19968: jis0212<<14 | 0x2B<<7 | 0x12, + 29744 - 19968: jis0212<<14 | 0x2B<<7 | 0x13, + 29745 - 19968: jis0212<<14 | 0x2B<<7 | 0x14, + 29746 - 19968: jis0208<<14 | 0x3F<<7 | 0x49, + 29747 - 19968: jis0208<<14 | 0x2D<<7 | 0x35, + 29748 - 19968: jis0208<<14 | 0x15<<7 | 0x36, + 29749 - 19968: jis0208<<14 | 0x27<<7 | 0x5B, + 29750 - 19968: jis0208<<14 | 0x26<<7 | 0x29, + 29753 - 19968: jis0212<<14 | 0x2B<<7 | 0x15, + 29754 - 19968: jis0208<<14 | 0x3F<<7 | 0x4A, + 29759 - 19968: jis0208<<14 | 0x3F<<7 | 0x4C, + 29760 - 19968: jis0212<<14 | 0x2B<<7 | 0x16, + 29761 - 19968: jis0208<<14 | 0x3F<<7 | 0x4F, + 29763 - 19968: jis0212<<14 | 0x2B<<7 | 0x17, + 29764 - 19968: jis0212<<14 | 0x2B<<7 | 0x18, + 29766 - 19968: jis0212<<14 | 0x2B<<7 | 0x19, + 29767 - 19968: jis0212<<14 | 0x2B<<7 | 0x1A, + 29771 - 19968: jis0212<<14 | 0x2B<<7 | 0x1B, + 29773 - 19968: jis0212<<14 | 0x2B<<7 | 0x1C, + 29777 - 19968: jis0212<<14 | 0x2B<<7 | 0x1D, + 29778 - 19968: jis0212<<14 | 0x2B<<7 | 0x1E, + 29781 - 19968: jis0208<<14 | 0x3F<<7 | 0x4B, + 29783 - 19968: jis0212<<14 | 0x2B<<7 | 0x1F, + 29785 - 19968: jis0208<<14 | 0x3F<<7 | 0x4E, + 29786 - 19968: jis0208<<14 | 0x17<<7 | 0x49, + 29787 - 19968: jis0208<<14 | 0x10<<7 | 0x2C, + 29788 - 19968: jis0208<<14 | 0x3F<<7 | 0x50, + 29789 - 19968: jis0212<<14 | 0x2B<<7 | 0x20, + 29790 - 19968: jis0208<<14 | 0x1E<<7 | 0x4F, + 29791 - 19968: jis0208<<14 | 0x3F<<7 | 0x4D, + 29792 - 19968: jis0208<<14 | 0x2D<<7 | 0x3B, + 29794 - 19968: jis0208<<14 | 0x5A<<7 | 0x0F, + 29795 - 19968: jis0208<<14 | 0x3F<<7 | 0x53, + 29796 - 19968: jis0208<<14 | 0x53<<7 | 0x03, + 29798 - 19968: jis0212<<14 | 0x2B<<7 | 0x22, + 29799 - 19968: jis0212<<14 | 0x2B<<7 | 0x23, + 29800 - 19968: jis0212<<14 | 0x2B<<7 | 0x24, + 29801 - 19968: jis0208<<14 | 0x3F<<7 | 0x51, + 29802 - 19968: jis0208<<14 | 0x3F<<7 | 0x54, + 29803 - 19968: jis0212<<14 | 0x2B<<7 | 0x25, + 29805 - 19968: jis0212<<14 | 0x2B<<7 | 0x26, + 29806 - 19968: jis0212<<14 | 0x2B<<7 | 0x27, + 29807 - 19968: jis0208<<14 | 0x3F<<7 | 0x46, + 29808 - 19968: jis0208<<14 | 0x3F<<7 | 0x52, + 29809 - 19968: jis0212<<14 | 0x2B<<7 | 0x28, + 29810 - 19968: jis0212<<14 | 0x2B<<7 | 0x29, + 29811 - 19968: jis0208<<14 | 0x19<<7 | 0x1B, + 29814 - 19968: jis0208<<14 | 0x3F<<7 | 0x55, + 29822 - 19968: jis0208<<14 | 0x3F<<7 | 0x56, + 29824 - 19968: jis0212<<14 | 0x2B<<7 | 0x2A, + 29825 - 19968: jis0212<<14 | 0x2B<<7 | 0x2B, + 29827 - 19968: jis0208<<14 | 0x2C<<7 | 0x5D, + 29829 - 19968: jis0212<<14 | 0x2B<<7 | 0x2C, + 29830 - 19968: jis0212<<14 | 0x2B<<7 | 0x2D, + 29831 - 19968: jis0212<<14 | 0x2B<<7 | 0x2E, + 29833 - 19968: jis0208<<14 | 0x5A<<7 | 0x10, + 29835 - 19968: jis0208<<14 | 0x3F<<7 | 0x57, + 29839 - 19968: jis0212<<14 | 0x2B<<7 | 0x30, + 29840 - 19968: jis0212<<14 | 0x2B<<7 | 0x31, + 29841 - 19968: jis0212<<14 | 0x2B<<7 | 0x32, + 29842 - 19968: jis0212<<14 | 0x2B<<7 | 0x33, + 29848 - 19968: jis0212<<14 | 0x2B<<7 | 0x34, + 29849 - 19968: jis0212<<14 | 0x2B<<7 | 0x35, + 29850 - 19968: jis0212<<14 | 0x2B<<7 | 0x36, + 29852 - 19968: jis0212<<14 | 0x2B<<7 | 0x37, + 29854 - 19968: jis0208<<14 | 0x3F<<7 | 0x58, + 29855 - 19968: jis0208<<14 | 0x5A<<7 | 0x11, + 29856 - 19968: jis0212<<14 | 0x2B<<7 | 0x39, + 29857 - 19968: jis0212<<14 | 0x2B<<7 | 0x3A, + 29858 - 19968: jis0208<<14 | 0x3F<<7 | 0x44, + 29859 - 19968: jis0212<<14 | 0x2B<<7 | 0x3B, + 29862 - 19968: jis0212<<14 | 0x2B<<7 | 0x3C, + 29863 - 19968: jis0208<<14 | 0x3F<<7 | 0x59, + 29864 - 19968: jis0212<<14 | 0x2B<<7 | 0x3D, + 29865 - 19968: jis0212<<14 | 0x2B<<7 | 0x3E, + 29866 - 19968: jis0212<<14 | 0x2B<<7 | 0x3F, + 29867 - 19968: jis0212<<14 | 0x2B<<7 | 0x40, + 29870 - 19968: jis0212<<14 | 0x2B<<7 | 0x41, + 29871 - 19968: jis0212<<14 | 0x2B<<7 | 0x42, + 29872 - 19968: jis0208<<14 | 0x13<<7 | 0x23, + 29873 - 19968: jis0212<<14 | 0x2B<<7 | 0x43, + 29874 - 19968: jis0212<<14 | 0x2B<<7 | 0x44, + 29877 - 19968: jis0212<<14 | 0x2B<<7 | 0x45, + 29881 - 19968: jis0212<<14 | 0x2B<<7 | 0x46, + 29883 - 19968: jis0212<<14 | 0x2B<<7 | 0x47, + 29885 - 19968: jis0208<<14 | 0x1B<<7 | 0x04, + 29887 - 19968: jis0212<<14 | 0x2B<<7 | 0x48, + 29896 - 19968: jis0212<<14 | 0x2B<<7 | 0x49, + 29897 - 19968: jis0212<<14 | 0x2B<<7 | 0x4A, + 29898 - 19968: jis0208<<14 | 0x3F<<7 | 0x5A, + 29900 - 19968: jis0212<<14 | 0x2B<<7 | 0x4B, + 29903 - 19968: jis0208<<14 | 0x3F<<7 | 0x5B, + 29904 - 19968: jis0212<<14 | 0x2B<<7 | 0x4C, + 29907 - 19968: jis0212<<14 | 0x2B<<7 | 0x4D, + 29908 - 19968: jis0208<<14 | 0x3F<<7 | 0x5C, + 29912 - 19968: jis0212<<14 | 0x2B<<7 | 0x4E, + 29914 - 19968: jis0212<<14 | 0x2B<<7 | 0x4F, + 29915 - 19968: jis0212<<14 | 0x2B<<7 | 0x50, + 29916 - 19968: jis0208<<14 | 0x10<<7 | 0x1A, + 29918 - 19968: jis0212<<14 | 0x2B<<7 | 0x51, + 29919 - 19968: jis0212<<14 | 0x2B<<7 | 0x52, + 29920 - 19968: jis0208<<14 | 0x40<<7 | 0x00, + 29922 - 19968: jis0208<<14 | 0x28<<7 | 0x1A, + 29923 - 19968: jis0208<<14 | 0x40<<7 | 0x01, + 29924 - 19968: jis0212<<14 | 0x2B<<7 | 0x53, + 29926 - 19968: jis0208<<14 | 0x13<<7 | 0x03, + 29927 - 19968: jis0208<<14 | 0x40<<7 | 0x02, + 29928 - 19968: jis0212<<14 | 0x2B<<7 | 0x54, + 29929 - 19968: jis0208<<14 | 0x40<<7 | 0x03, + 29930 - 19968: jis0212<<14 | 0x2B<<7 | 0x55, + 29931 - 19968: jis0212<<14 | 0x2B<<7 | 0x56, + 29934 - 19968: jis0208<<14 | 0x40<<7 | 0x04, + 29935 - 19968: jis0212<<14 | 0x2B<<7 | 0x57, + 29936 - 19968: jis0208<<14 | 0x40<<7 | 0x06, + 29937 - 19968: jis0208<<14 | 0x40<<7 | 0x07, + 29938 - 19968: jis0208<<14 | 0x40<<7 | 0x05, + 29940 - 19968: jis0212<<14 | 0x2B<<7 | 0x58, + 29942 - 19968: jis0208<<14 | 0x28<<7 | 0x32, + 29943 - 19968: jis0208<<14 | 0x40<<7 | 0x09, + 29944 - 19968: jis0208<<14 | 0x40<<7 | 0x08, + 29946 - 19968: jis0212<<14 | 0x2B<<7 | 0x59, + 29947 - 19968: jis0212<<14 | 0x2B<<7 | 0x5A, + 29948 - 19968: jis0212<<14 | 0x2B<<7 | 0x5B, + 29951 - 19968: jis0212<<14 | 0x2B<<7 | 0x5C, + 29953 - 19968: jis0208<<14 | 0x5A<<7 | 0x12, + 29955 - 19968: jis0208<<14 | 0x40<<7 | 0x0B, + 29956 - 19968: jis0208<<14 | 0x40<<7 | 0x0A, + 29957 - 19968: jis0208<<14 | 0x40<<7 | 0x0C, + 29958 - 19968: jis0212<<14 | 0x2B<<7 | 0x5D, + 29964 - 19968: jis0208<<14 | 0x40<<7 | 0x0D, + 29965 - 19968: jis0208<<14 | 0x40<<7 | 0x0F, + 29966 - 19968: jis0208<<14 | 0x40<<7 | 0x0E, + 29969 - 19968: jis0208<<14 | 0x18<<7 | 0x58, + 29970 - 19968: jis0212<<14 | 0x2C<<7 | 0x00, + 29971 - 19968: jis0208<<14 | 0x40<<7 | 0x11, + 29973 - 19968: jis0208<<14 | 0x40<<7 | 0x10, + 29974 - 19968: jis0212<<14 | 0x2C<<7 | 0x01, + 29975 - 19968: jis0212<<14 | 0x2C<<7 | 0x02, + 29976 - 19968: jis0208<<14 | 0x13<<7 | 0x24, + 29978 - 19968: jis0208<<14 | 0x1E<<7 | 0x32, + 29980 - 19968: jis0208<<14 | 0x24<<7 | 0x1B, + 29982 - 19968: jis0208<<14 | 0x40<<7 | 0x12, + 29983 - 19968: jis0208<<14 | 0x1F<<7 | 0x17, + 29984 - 19968: jis0212<<14 | 0x2C<<7 | 0x03, + 29985 - 19968: jis0212<<14 | 0x2C<<7 | 0x04, + 29987 - 19968: jis0208<<14 | 0x1A<<7 | 0x19, + 29988 - 19968: jis0212<<14 | 0x2C<<7 | 0x05, + 29989 - 19968: jis0208<<14 | 0x10<<7 | 0x58, + 29990 - 19968: jis0208<<14 | 0x40<<7 | 0x13, + 29991 - 19968: jis0212<<14 | 0x2C<<7 | 0x06, + 29992 - 19968: jis0208<<14 | 0x2C<<7 | 0x30, + 29993 - 19968: jis0212<<14 | 0x2C<<7 | 0x07, + 29994 - 19968: jis0212<<14 | 0x2C<<7 | 0x08, + 29995 - 19968: jis0208<<14 | 0x29<<7 | 0x42, + 29996 - 19968: jis0208<<14 | 0x40<<7 | 0x14, + 29999 - 19968: jis0208<<14 | 0x58<<7 | 0x4B, + 30000 - 19968: jis0208<<14 | 0x24<<7 | 0x23, + 30001 - 19968: jis0208<<14 | 0x2C<<7 | 0x12, + 30002 - 19968: jis0208<<14 | 0x18<<7 | 0x22, + 30003 - 19968: jis0208<<14 | 0x1E<<7 | 0x1C, + 30006 - 19968: jis0212<<14 | 0x2C<<7 | 0x0A, + 30007 - 19968: jis0208<<14 | 0x22<<7 | 0x2A, + 30008 - 19968: jis0208<<14 | 0x31<<7 | 0x13, + 30009 - 19968: jis0212<<14 | 0x2C<<7 | 0x0B, + 30010 - 19968: jis0208<<14 | 0x23<<7 | 0x0D, + 30011 - 19968: jis0208<<14 | 0x11<<7 | 0x47, + 30012 - 19968: jis0208<<14 | 0x40<<7 | 0x15, + 30013 - 19968: jis0212<<14 | 0x2C<<7 | 0x0C, + 30014 - 19968: jis0212<<14 | 0x2C<<7 | 0x0D, + 30015 - 19968: jis0212<<14 | 0x2C<<7 | 0x0E, + 30016 - 19968: jis0212<<14 | 0x2C<<7 | 0x0F, + 30019 - 19968: jis0212<<14 | 0x2C<<7 | 0x10, + 30020 - 19968: jis0208<<14 | 0x40<<7 | 0x16, + 30022 - 19968: jis0208<<14 | 0x40<<7 | 0x1B, + 30023 - 19968: jis0212<<14 | 0x2C<<7 | 0x11, + 30024 - 19968: jis0212<<14 | 0x2C<<7 | 0x12, + 30025 - 19968: jis0208<<14 | 0x40<<7 | 0x19, + 30026 - 19968: jis0208<<14 | 0x40<<7 | 0x18, + 30027 - 19968: jis0208<<14 | 0x39<<7 | 0x21, + 30028 - 19968: jis0208<<14 | 0x12<<7 | 0x05, + 30029 - 19968: jis0208<<14 | 0x40<<7 | 0x17, + 30030 - 19968: jis0212<<14 | 0x2C<<7 | 0x13, + 30031 - 19968: jis0208<<14 | 0x0F<<7 | 0x39, + 30032 - 19968: jis0212<<14 | 0x2C<<7 | 0x14, + 30033 - 19968: jis0208<<14 | 0x27<<7 | 0x09, + 30034 - 19968: jis0212<<14 | 0x2C<<7 | 0x15, + 30036 - 19968: jis0208<<14 | 0x27<<7 | 0x29, + 30039 - 19968: jis0212<<14 | 0x2C<<7 | 0x16, + 30041 - 19968: jis0208<<14 | 0x2D<<7 | 0x10, + 30042 - 19968: jis0208<<14 | 0x40<<7 | 0x1C, + 30043 - 19968: jis0208<<14 | 0x40<<7 | 0x1A, + 30044 - 19968: jis0208<<14 | 0x22<<7 | 0x3B, + 30045 - 19968: jis0208<<14 | 0x1F<<7 | 0x05, + 30046 - 19968: jis0212<<14 | 0x2C<<7 | 0x17, + 30047 - 19968: jis0212<<14 | 0x2C<<7 | 0x18, + 30048 - 19968: jis0208<<14 | 0x27<<7 | 0x0A, + 30049 - 19968: jis0212<<14 | 0x2C<<7 | 0x19, + 30050 - 19968: jis0208<<14 | 0x28<<7 | 0x0C, + 30052 - 19968: jis0208<<14 | 0x40<<7 | 0x1E, + 30053 - 19968: jis0208<<14 | 0x2D<<7 | 0x0B, + 30054 - 19968: jis0208<<14 | 0x16<<7 | 0x2C, + 30055 - 19968: jis0208<<14 | 0x40<<7 | 0x1F, + 30057 - 19968: jis0208<<14 | 0x40<<7 | 0x1D, + 30058 - 19968: jis0208<<14 | 0x27<<7 | 0x35, + 30059 - 19968: jis0208<<14 | 0x40<<7 | 0x20, + 30061 - 19968: jis0208<<14 | 0x40<<7 | 0x21, + 30063 - 19968: jis0208<<14 | 0x5A<<7 | 0x13, + 30064 - 19968: jis0208<<14 | 0x0F<<7 | 0x3A, + 30065 - 19968: jis0212<<14 | 0x2C<<7 | 0x1B, + 30067 - 19968: jis0208<<14 | 0x1D<<7 | 0x55, + 30068 - 19968: jis0208<<14 | 0x40<<7 | 0x26, + 30070 - 19968: jis0208<<14 | 0x40<<7 | 0x23, + 30071 - 19968: jis0208<<14 | 0x25<<7 | 0x4C, + 30072 - 19968: jis0208<<14 | 0x40<<7 | 0x22, + 30073 - 19968: jis0212<<14 | 0x2C<<7 | 0x1C, + 30074 - 19968: jis0212<<14 | 0x2C<<7 | 0x1D, + 30075 - 19968: jis0212<<14 | 0x2C<<7 | 0x1E, + 30076 - 19968: jis0212<<14 | 0x2C<<7 | 0x1F, + 30077 - 19968: jis0212<<14 | 0x2C<<7 | 0x20, + 30078 - 19968: jis0212<<14 | 0x2C<<7 | 0x21, + 30079 - 19968: jis0208<<14 | 0x14<<7 | 0x05, + 30081 - 19968: jis0212<<14 | 0x2C<<7 | 0x22, + 30082 - 19968: jis0208<<14 | 0x40<<7 | 0x29, + 30085 - 19968: jis0212<<14 | 0x2C<<7 | 0x23, + 30086 - 19968: jis0208<<14 | 0x40<<7 | 0x24, + 30087 - 19968: jis0208<<14 | 0x40<<7 | 0x25, + 30089 - 19968: jis0208<<14 | 0x40<<7 | 0x28, + 30090 - 19968: jis0208<<14 | 0x40<<7 | 0x27, + 30091 - 19968: jis0208<<14 | 0x28<<7 | 0x04, + 30094 - 19968: jis0208<<14 | 0x20<<7 | 0x21, + 30095 - 19968: jis0208<<14 | 0x20<<7 | 0x20, + 30096 - 19968: jis0212<<14 | 0x2C<<7 | 0x24, + 30097 - 19968: jis0208<<14 | 0x14<<7 | 0x1E, + 30098 - 19968: jis0212<<14 | 0x2C<<7 | 0x25, + 30099 - 19968: jis0212<<14 | 0x2C<<7 | 0x26, + 30100 - 19968: jis0208<<14 | 0x40<<7 | 0x2A, + 30101 - 19968: jis0212<<14 | 0x2C<<7 | 0x27, + 30105 - 19968: jis0212<<14 | 0x2C<<7 | 0x28, + 30106 - 19968: jis0208<<14 | 0x40<<7 | 0x2B, + 30108 - 19968: jis0212<<14 | 0x2C<<7 | 0x29, + 30109 - 19968: jis0208<<14 | 0x40<<7 | 0x2C, + 30114 - 19968: jis0212<<14 | 0x2C<<7 | 0x2A, + 30115 - 19968: jis0208<<14 | 0x40<<7 | 0x2E, + 30116 - 19968: jis0212<<14 | 0x2C<<7 | 0x2B, + 30117 - 19968: jis0208<<14 | 0x40<<7 | 0x2D, + 30123 - 19968: jis0208<<14 | 0x10<<7 | 0x35, + 30129 - 19968: jis0208<<14 | 0x40<<7 | 0x36, + 30130 - 19968: jis0208<<14 | 0x27<<7 | 0x47, + 30131 - 19968: jis0208<<14 | 0x40<<7 | 0x30, + 30132 - 19968: jis0212<<14 | 0x2C<<7 | 0x2C, + 30133 - 19968: jis0208<<14 | 0x40<<7 | 0x32, + 30136 - 19968: jis0208<<14 | 0x40<<7 | 0x34, + 30137 - 19968: jis0208<<14 | 0x1E<<7 | 0x1D, + 30138 - 19968: jis0212<<14 | 0x2C<<7 | 0x2D, + 30140 - 19968: jis0208<<14 | 0x40<<7 | 0x35, + 30141 - 19968: jis0208<<14 | 0x40<<7 | 0x33, + 30142 - 19968: jis0208<<14 | 0x1B<<7 | 0x1F, + 30143 - 19968: jis0212<<14 | 0x2C<<7 | 0x2E, + 30144 - 19968: jis0212<<14 | 0x2C<<7 | 0x2F, + 30145 - 19968: jis0212<<14 | 0x2C<<7 | 0x30, + 30146 - 19968: jis0208<<14 | 0x40<<7 | 0x2F, + 30147 - 19968: jis0208<<14 | 0x40<<7 | 0x31, + 30148 - 19968: jis0212<<14 | 0x2C<<7 | 0x31, + 30149 - 19968: jis0208<<14 | 0x28<<7 | 0x21, + 30150 - 19968: jis0212<<14 | 0x2C<<7 | 0x32, + 30151 - 19968: jis0208<<14 | 0x1D<<7 | 0x28, + 30154 - 19968: jis0208<<14 | 0x40<<7 | 0x38, + 30156 - 19968: jis0212<<14 | 0x2C<<7 | 0x33, + 30157 - 19968: jis0208<<14 | 0x40<<7 | 0x37, + 30158 - 19968: jis0212<<14 | 0x2C<<7 | 0x34, + 30159 - 19968: jis0212<<14 | 0x2C<<7 | 0x35, + 30162 - 19968: jis0208<<14 | 0x40<<7 | 0x39, + 30164 - 19968: jis0208<<14 | 0x1B<<7 | 0x05, + 30165 - 19968: jis0208<<14 | 0x19<<7 | 0x0E, + 30167 - 19968: jis0212<<14 | 0x2C<<7 | 0x36, + 30168 - 19968: jis0208<<14 | 0x24<<7 | 0x56, + 30169 - 19968: jis0208<<14 | 0x40<<7 | 0x3A, + 30171 - 19968: jis0208<<14 | 0x23<<7 | 0x2A, + 30172 - 19968: jis0212<<14 | 0x2C<<7 | 0x37, + 30174 - 19968: jis0208<<14 | 0x40<<7 | 0x3C, + 30175 - 19968: jis0212<<14 | 0x2C<<7 | 0x38, + 30176 - 19968: jis0212<<14 | 0x2C<<7 | 0x39, + 30177 - 19968: jis0212<<14 | 0x2C<<7 | 0x3A, + 30178 - 19968: jis0208<<14 | 0x2D<<7 | 0x00, + 30179 - 19968: jis0208<<14 | 0x40<<7 | 0x3B, + 30180 - 19968: jis0212<<14 | 0x2C<<7 | 0x3B, + 30183 - 19968: jis0212<<14 | 0x2C<<7 | 0x3C, + 30185 - 19968: jis0208<<14 | 0x20<<7 | 0x48, + 30188 - 19968: jis0212<<14 | 0x2C<<7 | 0x3D, + 30190 - 19968: jis0212<<14 | 0x2C<<7 | 0x3E, + 30191 - 19968: jis0212<<14 | 0x2C<<7 | 0x3F, + 30192 - 19968: jis0208<<14 | 0x40<<7 | 0x41, + 30193 - 19968: jis0212<<14 | 0x2C<<7 | 0x40, + 30194 - 19968: jis0208<<14 | 0x40<<7 | 0x43, + 30195 - 19968: jis0208<<14 | 0x40<<7 | 0x44, + 30196 - 19968: jis0208<<14 | 0x22<<7 | 0x33, + 30201 - 19968: jis0212<<14 | 0x2C<<7 | 0x41, + 30202 - 19968: jis0208<<14 | 0x40<<7 | 0x42, + 30204 - 19968: jis0208<<14 | 0x40<<7 | 0x3F, + 30206 - 19968: jis0208<<14 | 0x40<<7 | 0x3D, + 30207 - 19968: jis0208<<14 | 0x40<<7 | 0x3E, + 30208 - 19968: jis0212<<14 | 0x2C<<7 | 0x42, + 30209 - 19968: jis0208<<14 | 0x40<<7 | 0x40, + 30210 - 19968: jis0212<<14 | 0x2C<<7 | 0x43, + 30211 - 19968: jis0212<<14 | 0x2C<<7 | 0x44, + 30212 - 19968: jis0212<<14 | 0x2C<<7 | 0x45, + 30215 - 19968: jis0212<<14 | 0x2C<<7 | 0x46, + 30216 - 19968: jis0212<<14 | 0x2C<<7 | 0x47, + 30217 - 19968: jis0208<<14 | 0x40<<7 | 0x47, + 30218 - 19968: jis0212<<14 | 0x2C<<7 | 0x48, + 30219 - 19968: jis0208<<14 | 0x40<<7 | 0x45, + 30220 - 19968: jis0212<<14 | 0x2C<<7 | 0x49, + 30221 - 19968: jis0208<<14 | 0x40<<7 | 0x46, + 30223 - 19968: jis0212<<14 | 0x2C<<7 | 0x4A, + 30226 - 19968: jis0212<<14 | 0x2C<<7 | 0x4B, + 30227 - 19968: jis0212<<14 | 0x2C<<7 | 0x4C, + 30229 - 19968: jis0212<<14 | 0x2C<<7 | 0x4D, + 30230 - 19968: jis0212<<14 | 0x2C<<7 | 0x4E, + 30233 - 19968: jis0212<<14 | 0x2C<<7 | 0x4F, + 30235 - 19968: jis0212<<14 | 0x2C<<7 | 0x50, + 30236 - 19968: jis0212<<14 | 0x2C<<7 | 0x51, + 30237 - 19968: jis0212<<14 | 0x2C<<7 | 0x52, + 30238 - 19968: jis0212<<14 | 0x2C<<7 | 0x53, + 30239 - 19968: jis0208<<14 | 0x40<<7 | 0x48, + 30240 - 19968: jis0208<<14 | 0x40<<7 | 0x4A, + 30241 - 19968: jis0208<<14 | 0x40<<7 | 0x4B, + 30242 - 19968: jis0208<<14 | 0x40<<7 | 0x4C, + 30243 - 19968: jis0212<<14 | 0x2C<<7 | 0x54, + 30244 - 19968: jis0208<<14 | 0x40<<7 | 0x4D, + 30245 - 19968: jis0212<<14 | 0x2C<<7 | 0x55, + 30246 - 19968: jis0212<<14 | 0x2C<<7 | 0x56, + 30247 - 19968: jis0208<<14 | 0x40<<7 | 0x49, + 30249 - 19968: jis0212<<14 | 0x2C<<7 | 0x57, + 30253 - 19968: jis0212<<14 | 0x2C<<7 | 0x58, + 30256 - 19968: jis0208<<14 | 0x40<<7 | 0x4F, + 30258 - 19968: jis0212<<14 | 0x2C<<7 | 0x59, + 30259 - 19968: jis0212<<14 | 0x2C<<7 | 0x5A, + 30260 - 19968: jis0208<<14 | 0x40<<7 | 0x4E, + 30261 - 19968: jis0212<<14 | 0x2C<<7 | 0x5B, + 30264 - 19968: jis0212<<14 | 0x2C<<7 | 0x5C, + 30265 - 19968: jis0212<<14 | 0x2C<<7 | 0x5D, + 30266 - 19968: jis0212<<14 | 0x2D<<7 | 0x00, + 30267 - 19968: jis0208<<14 | 0x40<<7 | 0x50, + 30268 - 19968: jis0212<<14 | 0x2D<<7 | 0x01, + 30272 - 19968: jis0212<<14 | 0x2D<<7 | 0x03, + 30273 - 19968: jis0212<<14 | 0x2D<<7 | 0x04, + 30274 - 19968: jis0208<<14 | 0x2D<<7 | 0x24, + 30275 - 19968: jis0212<<14 | 0x2D<<7 | 0x05, + 30276 - 19968: jis0212<<14 | 0x2D<<7 | 0x06, + 30277 - 19968: jis0212<<14 | 0x2D<<7 | 0x07, + 30278 - 19968: jis0208<<14 | 0x40<<7 | 0x53, + 30279 - 19968: jis0208<<14 | 0x40<<7 | 0x51, + 30280 - 19968: jis0208<<14 | 0x40<<7 | 0x52, + 30281 - 19968: jis0212<<14 | 0x2D<<7 | 0x08, + 30282 - 19968: jis0212<<14 | 0x2D<<7 | 0x02, + 30283 - 19968: jis0212<<14 | 0x2D<<7 | 0x09, + 30284 - 19968: jis0208<<14 | 0x13<<7 | 0x41, + 30290 - 19968: jis0208<<14 | 0x2B<<7 | 0x5D, + 30293 - 19968: jis0212<<14 | 0x2D<<7 | 0x0A, + 30294 - 19968: jis0208<<14 | 0x29<<7 | 0x29, + 30296 - 19968: jis0208<<14 | 0x40<<7 | 0x55, + 30297 - 19968: jis0212<<14 | 0x2D<<7 | 0x0B, + 30300 - 19968: jis0208<<14 | 0x40<<7 | 0x54, + 30303 - 19968: jis0212<<14 | 0x2D<<7 | 0x0C, + 30305 - 19968: jis0208<<14 | 0x40<<7 | 0x56, + 30306 - 19968: jis0208<<14 | 0x40<<7 | 0x57, + 30308 - 19968: jis0212<<14 | 0x2D<<7 | 0x0D, + 30309 - 19968: jis0212<<14 | 0x2D<<7 | 0x0E, + 30311 - 19968: jis0208<<14 | 0x40<<7 | 0x5B, + 30312 - 19968: jis0208<<14 | 0x40<<7 | 0x58, + 30313 - 19968: jis0208<<14 | 0x40<<7 | 0x59, + 30314 - 19968: jis0208<<14 | 0x40<<7 | 0x5A, + 30316 - 19968: jis0208<<14 | 0x40<<7 | 0x5C, + 30317 - 19968: jis0212<<14 | 0x2D<<7 | 0x0F, + 30318 - 19968: jis0212<<14 | 0x2D<<7 | 0x10, + 30319 - 19968: jis0212<<14 | 0x2D<<7 | 0x11, + 30320 - 19968: jis0208<<14 | 0x40<<7 | 0x5D, + 30321 - 19968: jis0212<<14 | 0x2D<<7 | 0x12, + 30322 - 19968: jis0208<<14 | 0x41<<7 | 0x00, + 30324 - 19968: jis0212<<14 | 0x2D<<7 | 0x13, + 30326 - 19968: jis0208<<14 | 0x41<<7 | 0x01, + 30328 - 19968: jis0208<<14 | 0x41<<7 | 0x02, + 30330 - 19968: jis0208<<14 | 0x27<<7 | 0x0E, + 30331 - 19968: jis0208<<14 | 0x24<<7 | 0x2F, + 30332 - 19968: jis0208<<14 | 0x41<<7 | 0x03, + 30333 - 19968: jis0208<<14 | 0x26<<7 | 0x51, + 30334 - 19968: jis0208<<14 | 0x28<<7 | 0x13, + 30336 - 19968: jis0208<<14 | 0x41<<7 | 0x04, + 30337 - 19968: jis0212<<14 | 0x2D<<7 | 0x14, + 30338 - 19968: jis0208<<14 | 0x5A<<7 | 0x14, + 30339 - 19968: jis0208<<14 | 0x41<<7 | 0x05, + 30340 - 19968: jis0208<<14 | 0x24<<7 | 0x09, + 30341 - 19968: jis0212<<14 | 0x2D<<7 | 0x15, + 30342 - 19968: jis0208<<14 | 0x12<<7 | 0x06, + 30343 - 19968: jis0208<<14 | 0x18<<7 | 0x23, + 30344 - 19968: jis0208<<14 | 0x41<<7 | 0x06, + 30347 - 19968: jis0208<<14 | 0x41<<7 | 0x07, + 30348 - 19968: jis0212<<14 | 0x2D<<7 | 0x16, + 30349 - 19968: jis0212<<14 | 0x2D<<7 | 0x17, + 30350 - 19968: jis0208<<14 | 0x41<<7 | 0x08, + 30352 - 19968: jis0208<<14 | 0x1A<<7 | 0x08, + 30355 - 19968: jis0208<<14 | 0x41<<7 | 0x0A, + 30357 - 19968: jis0212<<14 | 0x2D<<7 | 0x18, + 30358 - 19968: jis0208<<14 | 0x41<<7 | 0x09, + 30361 - 19968: jis0208<<14 | 0x41<<7 | 0x0B, + 30362 - 19968: jis0208<<14 | 0x41<<7 | 0x0C, + 30363 - 19968: jis0208<<14 | 0x5A<<7 | 0x17, + 30364 - 19968: jis0208<<14 | 0x5A<<7 | 0x15, + 30365 - 19968: jis0212<<14 | 0x2D<<7 | 0x1B, + 30366 - 19968: jis0208<<14 | 0x5A<<7 | 0x16, + 30367 - 19968: jis0212<<14 | 0x2D<<7 | 0x1C, + 30368 - 19968: jis0212<<14 | 0x2D<<7 | 0x1D, + 30370 - 19968: jis0212<<14 | 0x2D<<7 | 0x1E, + 30371 - 19968: jis0212<<14 | 0x2D<<7 | 0x1F, + 30372 - 19968: jis0212<<14 | 0x2D<<7 | 0x20, + 30373 - 19968: jis0212<<14 | 0x2D<<7 | 0x21, + 30374 - 19968: jis0208<<14 | 0x5A<<7 | 0x18, + 30375 - 19968: jis0212<<14 | 0x2D<<7 | 0x23, + 30376 - 19968: jis0212<<14 | 0x2D<<7 | 0x24, + 30378 - 19968: jis0212<<14 | 0x2D<<7 | 0x25, + 30381 - 19968: jis0212<<14 | 0x2D<<7 | 0x26, + 30382 - 19968: jis0208<<14 | 0x27<<7 | 0x48, + 30384 - 19968: jis0208<<14 | 0x41<<7 | 0x0D, + 30388 - 19968: jis0208<<14 | 0x41<<7 | 0x0E, + 30391 - 19968: jis0208<<14 | 0x52<<7 | 0x48, + 30392 - 19968: jis0208<<14 | 0x41<<7 | 0x0F, + 30393 - 19968: jis0208<<14 | 0x41<<7 | 0x10, + 30394 - 19968: jis0208<<14 | 0x41<<7 | 0x11, + 30397 - 19968: jis0212<<14 | 0x2D<<7 | 0x27, + 30399 - 19968: jis0208<<14 | 0x1A<<7 | 0x0D, + 30401 - 19968: jis0212<<14 | 0x2D<<7 | 0x28, + 30402 - 19968: jis0208<<14 | 0x41<<7 | 0x12, + 30403 - 19968: jis0208<<14 | 0x26<<7 | 0x35, + 30405 - 19968: jis0212<<14 | 0x2D<<7 | 0x29, + 30406 - 19968: jis0208<<14 | 0x2A<<7 | 0x3E, + 30408 - 19968: jis0208<<14 | 0x10<<7 | 0x2D, + 30409 - 19968: jis0212<<14 | 0x2D<<7 | 0x2A, + 30410 - 19968: jis0208<<14 | 0x10<<7 | 0x36, + 30411 - 19968: jis0212<<14 | 0x2D<<7 | 0x2B, + 30412 - 19968: jis0212<<14 | 0x2D<<7 | 0x2C, + 30413 - 19968: jis0208<<14 | 0x41<<7 | 0x13, + 30414 - 19968: jis0212<<14 | 0x2D<<7 | 0x2D, + 30418 - 19968: jis0208<<14 | 0x41<<7 | 0x15, + 30420 - 19968: jis0212<<14 | 0x2D<<7 | 0x2E, + 30422 - 19968: jis0208<<14 | 0x41<<7 | 0x14, + 30423 - 19968: jis0208<<14 | 0x24<<7 | 0x4F, + 30425 - 19968: jis0212<<14 | 0x2D<<7 | 0x2F, + 30427 - 19968: jis0208<<14 | 0x1F<<7 | 0x18, + 30428 - 19968: jis0208<<14 | 0x3C<<7 | 0x18, + 30430 - 19968: jis0208<<14 | 0x41<<7 | 0x16, + 30431 - 19968: jis0208<<14 | 0x2B<<7 | 0x20, + 30432 - 19968: jis0212<<14 | 0x2D<<7 | 0x30, + 30433 - 19968: jis0208<<14 | 0x41<<7 | 0x17, + 30435 - 19968: jis0208<<14 | 0x13<<7 | 0x25, + 30436 - 19968: jis0208<<14 | 0x27<<7 | 0x36, + 30437 - 19968: jis0208<<14 | 0x41<<7 | 0x18, + 30438 - 19968: jis0212<<14 | 0x2D<<7 | 0x31, + 30439 - 19968: jis0208<<14 | 0x41<<7 | 0x19, + 30440 - 19968: jis0212<<14 | 0x2D<<7 | 0x32, + 30442 - 19968: jis0208<<14 | 0x41<<7 | 0x1A, + 30444 - 19968: jis0212<<14 | 0x2D<<7 | 0x33, + 30446 - 19968: jis0208<<14 | 0x2B<<7 | 0x3B, + 30448 - 19968: jis0212<<14 | 0x2D<<7 | 0x34, + 30449 - 19968: jis0212<<14 | 0x2D<<7 | 0x35, + 30450 - 19968: jis0208<<14 | 0x2B<<7 | 0x34, + 30452 - 19968: jis0208<<14 | 0x23<<7 | 0x1D, + 30454 - 19968: jis0212<<14 | 0x2D<<7 | 0x36, + 30456 - 19968: jis0208<<14 | 0x20<<7 | 0x49, + 30457 - 19968: jis0212<<14 | 0x2D<<7 | 0x37, + 30459 - 19968: jis0208<<14 | 0x41<<7 | 0x1C, + 30460 - 19968: jis0212<<14 | 0x2D<<7 | 0x38, + 30462 - 19968: jis0208<<14 | 0x1C<<7 | 0x41, + 30464 - 19968: jis0212<<14 | 0x2D<<7 | 0x39, + 30465 - 19968: jis0208<<14 | 0x1D<<7 | 0x29, + 30468 - 19968: jis0208<<14 | 0x41<<7 | 0x1F, + 30470 - 19968: jis0212<<14 | 0x2D<<7 | 0x3A, + 30471 - 19968: jis0208<<14 | 0x41<<7 | 0x1E, + 30472 - 19968: jis0208<<14 | 0x41<<7 | 0x1D, + 30473 - 19968: jis0208<<14 | 0x27<<7 | 0x5C, + 30474 - 19968: jis0212<<14 | 0x2D<<7 | 0x3B, + 30475 - 19968: jis0208<<14 | 0x13<<7 | 0x26, + 30476 - 19968: jis0208<<14 | 0x17<<7 | 0x08, + 30478 - 19968: jis0212<<14 | 0x2D<<7 | 0x3C, + 30482 - 19968: jis0212<<14 | 0x2D<<7 | 0x3D, + 30484 - 19968: jis0212<<14 | 0x2D<<7 | 0x3E, + 30485 - 19968: jis0212<<14 | 0x2D<<7 | 0x3F, + 30487 - 19968: jis0212<<14 | 0x2D<<7 | 0x40, + 30489 - 19968: jis0212<<14 | 0x2D<<7 | 0x41, + 30490 - 19968: jis0212<<14 | 0x2D<<7 | 0x42, + 30491 - 19968: jis0208<<14 | 0x41<<7 | 0x25, + 30492 - 19968: jis0212<<14 | 0x2D<<7 | 0x43, + 30494 - 19968: jis0208<<14 | 0x41<<7 | 0x22, + 30495 - 19968: jis0208<<14 | 0x1E<<7 | 0x1E, + 30496 - 19968: jis0208<<14 | 0x2B<<7 | 0x11, + 30498 - 19968: jis0212<<14 | 0x2D<<7 | 0x44, + 30500 - 19968: jis0208<<14 | 0x41<<7 | 0x21, + 30501 - 19968: jis0208<<14 | 0x41<<7 | 0x23, + 30502 - 19968: jis0208<<14 | 0x41<<7 | 0x24, + 30504 - 19968: jis0212<<14 | 0x2D<<7 | 0x45, + 30505 - 19968: jis0208<<14 | 0x41<<7 | 0x20, + 30509 - 19968: jis0212<<14 | 0x2D<<7 | 0x46, + 30510 - 19968: jis0212<<14 | 0x2D<<7 | 0x47, + 30511 - 19968: jis0212<<14 | 0x2D<<7 | 0x48, + 30516 - 19968: jis0212<<14 | 0x2D<<7 | 0x49, + 30517 - 19968: jis0212<<14 | 0x2D<<7 | 0x4A, + 30518 - 19968: jis0212<<14 | 0x2D<<7 | 0x4B, + 30519 - 19968: jis0208<<14 | 0x41<<7 | 0x26, + 30520 - 19968: jis0208<<14 | 0x41<<7 | 0x27, + 30521 - 19968: jis0212<<14 | 0x2D<<7 | 0x4C, + 30522 - 19968: jis0208<<14 | 0x23<<7 | 0x0E, + 30524 - 19968: jis0208<<14 | 0x13<<7 | 0x42, + 30525 - 19968: jis0212<<14 | 0x2D<<7 | 0x4D, + 30526 - 19968: jis0212<<14 | 0x2D<<7 | 0x4E, + 30528 - 19968: jis0208<<14 | 0x22<<7 | 0x44, + 30530 - 19968: jis0212<<14 | 0x2D<<7 | 0x4F, + 30533 - 19968: jis0212<<14 | 0x2D<<7 | 0x50, + 30534 - 19968: jis0208<<14 | 0x5A<<7 | 0x1A, + 30535 - 19968: jis0208<<14 | 0x41<<7 | 0x28, + 30538 - 19968: jis0212<<14 | 0x2D<<7 | 0x52, + 30541 - 19968: jis0212<<14 | 0x2D<<7 | 0x53, + 30542 - 19968: jis0212<<14 | 0x2D<<7 | 0x54, + 30543 - 19968: jis0212<<14 | 0x2D<<7 | 0x55, + 30546 - 19968: jis0212<<14 | 0x2D<<7 | 0x56, + 30550 - 19968: jis0212<<14 | 0x2D<<7 | 0x57, + 30551 - 19968: jis0212<<14 | 0x2D<<7 | 0x58, + 30554 - 19968: jis0208<<14 | 0x41<<7 | 0x29, + 30555 - 19968: jis0208<<14 | 0x41<<7 | 0x2C, + 30556 - 19968: jis0212<<14 | 0x2D<<7 | 0x59, + 30558 - 19968: jis0212<<14 | 0x2D<<7 | 0x5A, + 30559 - 19968: jis0212<<14 | 0x2D<<7 | 0x5B, + 30560 - 19968: jis0212<<14 | 0x2D<<7 | 0x5C, + 30561 - 19968: jis0208<<14 | 0x1E<<7 | 0x46, + 30562 - 19968: jis0212<<14 | 0x2D<<7 | 0x5D, + 30563 - 19968: jis0208<<14 | 0x25<<7 | 0x23, + 30564 - 19968: jis0212<<14 | 0x2E<<7 | 0x00, + 30565 - 19968: jis0208<<14 | 0x41<<7 | 0x2D, + 30566 - 19968: jis0208<<14 | 0x2A<<7 | 0x32, + 30567 - 19968: jis0212<<14 | 0x2E<<7 | 0x01, + 30568 - 19968: jis0208<<14 | 0x41<<7 | 0x2A, + 30570 - 19968: jis0212<<14 | 0x2E<<7 | 0x02, + 30571 - 19968: jis0208<<14 | 0x41<<7 | 0x2B, + 30572 - 19968: jis0212<<14 | 0x2E<<7 | 0x03, + 30576 - 19968: jis0212<<14 | 0x2E<<7 | 0x04, + 30578 - 19968: jis0212<<14 | 0x2E<<7 | 0x05, + 30579 - 19968: jis0212<<14 | 0x2E<<7 | 0x06, + 30580 - 19968: jis0212<<14 | 0x2E<<7 | 0x07, + 30585 - 19968: jis0208<<14 | 0x41<<7 | 0x30, + 30586 - 19968: jis0212<<14 | 0x2E<<7 | 0x08, + 30589 - 19968: jis0212<<14 | 0x2E<<7 | 0x09, + 30590 - 19968: jis0208<<14 | 0x41<<7 | 0x2F, + 30591 - 19968: jis0208<<14 | 0x41<<7 | 0x2E, + 30592 - 19968: jis0212<<14 | 0x2E<<7 | 0x0A, + 30596 - 19968: jis0212<<14 | 0x2E<<7 | 0x0B, + 30603 - 19968: jis0208<<14 | 0x41<<7 | 0x32, + 30604 - 19968: jis0212<<14 | 0x2E<<7 | 0x0C, + 30605 - 19968: jis0212<<14 | 0x2E<<7 | 0x0D, + 30606 - 19968: jis0208<<14 | 0x41<<7 | 0x31, + 30609 - 19968: jis0208<<14 | 0x41<<7 | 0x33, + 30612 - 19968: jis0212<<14 | 0x2E<<7 | 0x0E, + 30613 - 19968: jis0212<<14 | 0x2E<<7 | 0x0F, + 30614 - 19968: jis0212<<14 | 0x2E<<7 | 0x10, + 30618 - 19968: jis0212<<14 | 0x2E<<7 | 0x11, + 30622 - 19968: jis0208<<14 | 0x41<<7 | 0x35, + 30623 - 19968: jis0212<<14 | 0x2E<<7 | 0x12, + 30624 - 19968: jis0208<<14 | 0x41<<7 | 0x34, + 30626 - 19968: jis0212<<14 | 0x2E<<7 | 0x13, + 30629 - 19968: jis0208<<14 | 0x29<<7 | 0x2C, + 30631 - 19968: jis0212<<14 | 0x2E<<7 | 0x14, + 30634 - 19968: jis0212<<14 | 0x2E<<7 | 0x15, + 30636 - 19968: jis0208<<14 | 0x1C<<7 | 0x35, + 30637 - 19968: jis0208<<14 | 0x2D<<7 | 0x25, + 30638 - 19968: jis0212<<14 | 0x2E<<7 | 0x16, + 30639 - 19968: jis0212<<14 | 0x2E<<7 | 0x17, + 30640 - 19968: jis0208<<14 | 0x41<<7 | 0x36, + 30641 - 19968: jis0212<<14 | 0x2E<<7 | 0x18, + 30643 - 19968: jis0208<<14 | 0x25<<7 | 0x16, + 30645 - 19968: jis0212<<14 | 0x2E<<7 | 0x19, + 30646 - 19968: jis0208<<14 | 0x41<<7 | 0x37, + 30649 - 19968: jis0208<<14 | 0x41<<7 | 0x38, + 30651 - 19968: jis0208<<14 | 0x41<<7 | 0x3C, + 30652 - 19968: jis0208<<14 | 0x41<<7 | 0x3A, + 30653 - 19968: jis0208<<14 | 0x41<<7 | 0x3B, + 30654 - 19968: jis0212<<14 | 0x2E<<7 | 0x1A, + 30655 - 19968: jis0208<<14 | 0x41<<7 | 0x39, + 30659 - 19968: jis0212<<14 | 0x2E<<7 | 0x1B, + 30663 - 19968: jis0208<<14 | 0x41<<7 | 0x3D, + 30665 - 19968: jis0212<<14 | 0x2E<<7 | 0x1C, + 30669 - 19968: jis0208<<14 | 0x41<<7 | 0x3E, + 30673 - 19968: jis0212<<14 | 0x2E<<7 | 0x1D, + 30674 - 19968: jis0212<<14 | 0x2E<<7 | 0x1E, + 30677 - 19968: jis0212<<14 | 0x2E<<7 | 0x1F, + 30679 - 19968: jis0208<<14 | 0x41<<7 | 0x3F, + 30681 - 19968: jis0212<<14 | 0x2E<<7 | 0x20, + 30682 - 19968: jis0208<<14 | 0x41<<7 | 0x40, + 30683 - 19968: jis0208<<14 | 0x2B<<7 | 0x16, + 30684 - 19968: jis0208<<14 | 0x41<<7 | 0x41, + 30686 - 19968: jis0212<<14 | 0x2E<<7 | 0x21, + 30687 - 19968: jis0212<<14 | 0x2E<<7 | 0x22, + 30688 - 19968: jis0212<<14 | 0x2E<<7 | 0x23, + 30690 - 19968: jis0208<<14 | 0x2B<<7 | 0x4F, + 30691 - 19968: jis0208<<14 | 0x41<<7 | 0x42, + 30692 - 19968: jis0212<<14 | 0x2E<<7 | 0x24, + 30693 - 19968: jis0208<<14 | 0x22<<7 | 0x2D, + 30694 - 19968: jis0212<<14 | 0x2E<<7 | 0x25, + 30695 - 19968: jis0208<<14 | 0x26<<7 | 0x49, + 30697 - 19968: jis0208<<14 | 0x15<<7 | 0x4A, + 30698 - 19968: jis0212<<14 | 0x2E<<7 | 0x26, + 30700 - 19968: jis0212<<14 | 0x2E<<7 | 0x27, + 30701 - 19968: jis0208<<14 | 0x22<<7 | 0x1A, + 30702 - 19968: jis0208<<14 | 0x41<<7 | 0x43, + 30703 - 19968: jis0208<<14 | 0x15<<7 | 0x19, + 30704 - 19968: jis0212<<14 | 0x2E<<7 | 0x28, + 30705 - 19968: jis0212<<14 | 0x2E<<7 | 0x29, + 30707 - 19968: jis0208<<14 | 0x1F<<7 | 0x2F, + 30708 - 19968: jis0212<<14 | 0x2E<<7 | 0x2A, + 30712 - 19968: jis0212<<14 | 0x2E<<7 | 0x2B, + 30715 - 19968: jis0212<<14 | 0x2E<<7 | 0x2C, + 30716 - 19968: jis0208<<14 | 0x41<<7 | 0x44, + 30722 - 19968: jis0208<<14 | 0x19<<7 | 0x1C, + 30725 - 19968: jis0212<<14 | 0x2E<<7 | 0x2D, + 30726 - 19968: jis0212<<14 | 0x2E<<7 | 0x2E, + 30729 - 19968: jis0212<<14 | 0x2E<<7 | 0x2F, + 30732 - 19968: jis0208<<14 | 0x41<<7 | 0x45, + 30733 - 19968: jis0212<<14 | 0x2E<<7 | 0x30, + 30734 - 19968: jis0212<<14 | 0x2E<<7 | 0x31, + 30737 - 19968: jis0212<<14 | 0x2E<<7 | 0x32, + 30738 - 19968: jis0208<<14 | 0x41<<7 | 0x46, + 30740 - 19968: jis0208<<14 | 0x17<<7 | 0x05, + 30741 - 19968: jis0208<<14 | 0x19<<7 | 0x34, + 30749 - 19968: jis0212<<14 | 0x2E<<7 | 0x33, + 30752 - 19968: jis0208<<14 | 0x41<<7 | 0x48, + 30753 - 19968: jis0208<<14 | 0x5A<<7 | 0x1C, + 30754 - 19968: jis0212<<14 | 0x2E<<7 | 0x35, + 30755 - 19968: jis0212<<14 | 0x2E<<7 | 0x36, + 30757 - 19968: jis0208<<14 | 0x24<<7 | 0x35, + 30758 - 19968: jis0208<<14 | 0x19<<7 | 0x35, + 30759 - 19968: jis0208<<14 | 0x14<<7 | 0x2D, + 30765 - 19968: jis0212<<14 | 0x2E<<7 | 0x37, + 30766 - 19968: jis0212<<14 | 0x2E<<7 | 0x38, + 30768 - 19968: jis0212<<14 | 0x2E<<7 | 0x39, + 30770 - 19968: jis0208<<14 | 0x2A<<7 | 0x03, + 30772 - 19968: jis0208<<14 | 0x26<<7 | 0x2A, + 30773 - 19968: jis0212<<14 | 0x2E<<7 | 0x3A, + 30775 - 19968: jis0212<<14 | 0x2E<<7 | 0x3B, + 30778 - 19968: jis0208<<14 | 0x24<<7 | 0x36, + 30783 - 19968: jis0208<<14 | 0x18<<7 | 0x3B, + 30787 - 19968: jis0212<<14 | 0x2E<<7 | 0x3C, + 30788 - 19968: jis0212<<14 | 0x2E<<7 | 0x3D, + 30789 - 19968: jis0208<<14 | 0x41<<7 | 0x4A, + 30791 - 19968: jis0212<<14 | 0x2E<<7 | 0x3E, + 30792 - 19968: jis0212<<14 | 0x2E<<7 | 0x3F, + 30796 - 19968: jis0212<<14 | 0x2E<<7 | 0x40, + 30798 - 19968: jis0208<<14 | 0x5A<<7 | 0x1D, + 30802 - 19968: jis0212<<14 | 0x2E<<7 | 0x42, + 30812 - 19968: jis0212<<14 | 0x2E<<7 | 0x43, + 30813 - 19968: jis0208<<14 | 0x1D<<7 | 0x2A, + 30814 - 19968: jis0212<<14 | 0x2E<<7 | 0x44, + 30816 - 19968: jis0212<<14 | 0x2E<<7 | 0x45, + 30817 - 19968: jis0212<<14 | 0x2E<<7 | 0x46, + 30819 - 19968: jis0212<<14 | 0x2E<<7 | 0x47, + 30820 - 19968: jis0208<<14 | 0x5A<<7 | 0x1E, + 30824 - 19968: jis0212<<14 | 0x2E<<7 | 0x49, + 30826 - 19968: jis0212<<14 | 0x2E<<7 | 0x4A, + 30827 - 19968: jis0208<<14 | 0x2D<<7 | 0x11, + 30828 - 19968: jis0208<<14 | 0x18<<7 | 0x24, + 30830 - 19968: jis0212<<14 | 0x2E<<7 | 0x4B, + 30831 - 19968: jis0208<<14 | 0x17<<7 | 0x06, + 30834 - 19968: jis0208<<14 | 0x27<<7 | 0x02, + 30836 - 19968: jis0208<<14 | 0x41<<7 | 0x4C, + 30842 - 19968: jis0208<<14 | 0x5A<<7 | 0x1F, + 30844 - 19968: jis0208<<14 | 0x41<<7 | 0x4E, + 30846 - 19968: jis0212<<14 | 0x2E<<7 | 0x4D, + 30849 - 19968: jis0208<<14 | 0x17<<7 | 0x4A, + 30854 - 19968: jis0208<<14 | 0x41<<7 | 0x4D, + 30855 - 19968: jis0208<<14 | 0x23<<7 | 0x55, + 30858 - 19968: jis0212<<14 | 0x2E<<7 | 0x4E, + 30860 - 19968: jis0208<<14 | 0x41<<7 | 0x50, + 30861 - 19968: jis0208<<14 | 0x12<<7 | 0x16, + 30862 - 19968: jis0208<<14 | 0x41<<7 | 0x4B, + 30863 - 19968: jis0212<<14 | 0x2E<<7 | 0x4F, + 30865 - 19968: jis0208<<14 | 0x27<<7 | 0x49, + 30867 - 19968: jis0208<<14 | 0x10<<7 | 0x0F, + 30868 - 19968: jis0212<<14 | 0x2E<<7 | 0x50, + 30869 - 19968: jis0208<<14 | 0x19<<7 | 0x4B, + 30871 - 19968: jis0208<<14 | 0x2E<<7 | 0x31, + 30872 - 19968: jis0212<<14 | 0x2E<<7 | 0x51, + 30874 - 19968: jis0208<<14 | 0x41<<7 | 0x4F, + 30877 - 19968: jis0212<<14 | 0x2E<<7 | 0x53, + 30878 - 19968: jis0212<<14 | 0x2E<<7 | 0x54, + 30879 - 19968: jis0212<<14 | 0x2E<<7 | 0x55, + 30881 - 19968: jis0212<<14 | 0x2E<<7 | 0x52, + 30883 - 19968: jis0208<<14 | 0x41<<7 | 0x51, + 30884 - 19968: jis0212<<14 | 0x2E<<7 | 0x56, + 30887 - 19968: jis0208<<14 | 0x29<<7 | 0x2A, + 30888 - 19968: jis0212<<14 | 0x2E<<7 | 0x57, + 30889 - 19968: jis0208<<14 | 0x1F<<7 | 0x38, + 30890 - 19968: jis0208<<14 | 0x41<<7 | 0x53, + 30892 - 19968: jis0212<<14 | 0x2E<<7 | 0x58, + 30893 - 19968: jis0212<<14 | 0x2E<<7 | 0x59, + 30895 - 19968: jis0208<<14 | 0x41<<7 | 0x54, + 30896 - 19968: jis0212<<14 | 0x2E<<7 | 0x5A, + 30897 - 19968: jis0212<<14 | 0x2E<<7 | 0x5B, + 30898 - 19968: jis0212<<14 | 0x2E<<7 | 0x5C, + 30899 - 19968: jis0212<<14 | 0x2E<<7 | 0x5D, + 30901 - 19968: jis0208<<14 | 0x41<<7 | 0x52, + 30906 - 19968: jis0208<<14 | 0x12<<7 | 0x2D, + 30907 - 19968: jis0212<<14 | 0x2F<<7 | 0x00, + 30908 - 19968: jis0208<<14 | 0x41<<7 | 0x5A, + 30909 - 19968: jis0212<<14 | 0x2F<<7 | 0x01, + 30910 - 19968: jis0208<<14 | 0x41<<7 | 0x59, + 30911 - 19968: jis0212<<14 | 0x2F<<7 | 0x02, + 30913 - 19968: jis0208<<14 | 0x1B<<7 | 0x06, + 30917 - 19968: jis0208<<14 | 0x41<<7 | 0x5B, + 30918 - 19968: jis0208<<14 | 0x41<<7 | 0x56, + 30919 - 19968: jis0212<<14 | 0x2F<<7 | 0x03, + 30920 - 19968: jis0212<<14 | 0x2F<<7 | 0x04, + 30921 - 19968: jis0212<<14 | 0x2F<<7 | 0x05, + 30922 - 19968: jis0208<<14 | 0x41<<7 | 0x5C, + 30923 - 19968: jis0208<<14 | 0x41<<7 | 0x57, + 30924 - 19968: jis0212<<14 | 0x2F<<7 | 0x06, + 30926 - 19968: jis0212<<14 | 0x2F<<7 | 0x07, + 30928 - 19968: jis0208<<14 | 0x27<<7 | 0x37, + 30929 - 19968: jis0208<<14 | 0x41<<7 | 0x55, + 30930 - 19968: jis0212<<14 | 0x2F<<7 | 0x08, + 30931 - 19968: jis0212<<14 | 0x2F<<7 | 0x09, + 30932 - 19968: jis0208<<14 | 0x41<<7 | 0x58, + 30933 - 19968: jis0212<<14 | 0x2F<<7 | 0x0A, + 30934 - 19968: jis0212<<14 | 0x2F<<7 | 0x0B, + 30938 - 19968: jis0208<<14 | 0x42<<7 | 0x01, + 30939 - 19968: jis0212<<14 | 0x2F<<7 | 0x0D, + 30943 - 19968: jis0212<<14 | 0x2F<<7 | 0x0E, + 30944 - 19968: jis0212<<14 | 0x2F<<7 | 0x0F, + 30945 - 19968: jis0212<<14 | 0x2F<<7 | 0x10, + 30948 - 19968: jis0212<<14 | 0x2F<<7 | 0x0C, + 30950 - 19968: jis0212<<14 | 0x2F<<7 | 0x11, + 30951 - 19968: jis0208<<14 | 0x42<<7 | 0x00, + 30952 - 19968: jis0208<<14 | 0x2A<<7 | 0x40, + 30954 - 19968: jis0212<<14 | 0x2F<<7 | 0x12, + 30956 - 19968: jis0208<<14 | 0x41<<7 | 0x5D, + 30959 - 19968: jis0208<<14 | 0x0F<<7 | 0x4A, + 30962 - 19968: jis0212<<14 | 0x2F<<7 | 0x13, + 30963 - 19968: jis0212<<14 | 0x2F<<7 | 0x14, + 30964 - 19968: jis0208<<14 | 0x42<<7 | 0x03, + 30966 - 19968: jis0212<<14 | 0x2F<<7 | 0x16, + 30967 - 19968: jis0212<<14 | 0x2F<<7 | 0x17, + 30970 - 19968: jis0212<<14 | 0x2F<<7 | 0x18, + 30971 - 19968: jis0212<<14 | 0x2F<<7 | 0x19, + 30973 - 19968: jis0208<<14 | 0x42<<7 | 0x02, + 30975 - 19968: jis0212<<14 | 0x2F<<7 | 0x1A, + 30976 - 19968: jis0212<<14 | 0x2F<<7 | 0x15, + 30977 - 19968: jis0208<<14 | 0x1D<<7 | 0x2B, + 30982 - 19968: jis0212<<14 | 0x2F<<7 | 0x1B, + 30983 - 19968: jis0208<<14 | 0x42<<7 | 0x04, + 30988 - 19968: jis0212<<14 | 0x2F<<7 | 0x1C, + 30990 - 19968: jis0208<<14 | 0x20<<7 | 0x22, + 30992 - 19968: jis0212<<14 | 0x2F<<7 | 0x1D, + 30993 - 19968: jis0208<<14 | 0x42<<7 | 0x06, + 30994 - 19968: jis0208<<14 | 0x42<<7 | 0x05, + 31001 - 19968: jis0208<<14 | 0x42<<7 | 0x07, + 31002 - 19968: jis0212<<14 | 0x2F<<7 | 0x1E, + 31004 - 19968: jis0212<<14 | 0x2F<<7 | 0x1F, + 31006 - 19968: jis0212<<14 | 0x2F<<7 | 0x20, + 31007 - 19968: jis0212<<14 | 0x2F<<7 | 0x21, + 31008 - 19968: jis0212<<14 | 0x2F<<7 | 0x22, + 31013 - 19968: jis0212<<14 | 0x2F<<7 | 0x23, + 31014 - 19968: jis0208<<14 | 0x41<<7 | 0x47, + 31015 - 19968: jis0212<<14 | 0x2F<<7 | 0x24, + 31017 - 19968: jis0212<<14 | 0x2F<<7 | 0x25, + 31018 - 19968: jis0208<<14 | 0x41<<7 | 0x49, + 31019 - 19968: jis0208<<14 | 0x42<<7 | 0x09, + 31020 - 19968: jis0208<<14 | 0x42<<7 | 0x08, + 31021 - 19968: jis0212<<14 | 0x2F<<7 | 0x26, + 31024 - 19968: jis0208<<14 | 0x5A<<7 | 0x20, + 31025 - 19968: jis0212<<14 | 0x2F<<7 | 0x27, + 31028 - 19968: jis0212<<14 | 0x2F<<7 | 0x28, + 31029 - 19968: jis0212<<14 | 0x2F<<7 | 0x29, + 31034 - 19968: jis0208<<14 | 0x1B<<7 | 0x07, + 31035 - 19968: jis0212<<14 | 0x2F<<7 | 0x2A, + 31036 - 19968: jis0208<<14 | 0x2D<<7 | 0x48, + 31037 - 19968: jis0212<<14 | 0x2F<<7 | 0x2B, + 31038 - 19968: jis0208<<14 | 0x1B<<7 | 0x31, + 31039 - 19968: jis0212<<14 | 0x2F<<7 | 0x2C, + 31040 - 19968: jis0208<<14 | 0x42<<7 | 0x0A, + 31041 - 19968: jis0208<<14 | 0x16<<7 | 0x16, + 31044 - 19968: jis0212<<14 | 0x2F<<7 | 0x2D, + 31045 - 19968: jis0212<<14 | 0x2F<<7 | 0x2E, + 31046 - 19968: jis0212<<14 | 0x2F<<7 | 0x2F, + 31047 - 19968: jis0208<<14 | 0x14<<7 | 0x1F, + 31048 - 19968: jis0208<<14 | 0x14<<7 | 0x06, + 31049 - 19968: jis0208<<14 | 0x1A<<7 | 0x42, + 31050 - 19968: jis0212<<14 | 0x2F<<7 | 0x30, + 31051 - 19968: jis0212<<14 | 0x2F<<7 | 0x31, + 31055 - 19968: jis0212<<14 | 0x2F<<7 | 0x32, + 31056 - 19968: jis0208<<14 | 0x2C<<7 | 0x13, + 31057 - 19968: jis0212<<14 | 0x2F<<7 | 0x33, + 31059 - 19968: jis0208<<14 | 0x42<<7 | 0x10, + 31060 - 19968: jis0212<<14 | 0x2F<<7 | 0x34, + 31061 - 19968: jis0208<<14 | 0x42<<7 | 0x0F, + 31062 - 19968: jis0208<<14 | 0x20<<7 | 0x23, + 31063 - 19968: jis0208<<14 | 0x42<<7 | 0x0C, + 31064 - 19968: jis0212<<14 | 0x2F<<7 | 0x35, + 31066 - 19968: jis0208<<14 | 0x42<<7 | 0x0E, + 31067 - 19968: jis0212<<14 | 0x2F<<7 | 0x36, + 31068 - 19968: jis0212<<14 | 0x2F<<7 | 0x37, + 31069 - 19968: jis0208<<14 | 0x1C<<7 | 0x2A, + 31070 - 19968: jis0208<<14 | 0x1E<<7 | 0x1F, + 31071 - 19968: jis0208<<14 | 0x42<<7 | 0x0D, + 31072 - 19968: jis0208<<14 | 0x42<<7 | 0x0B, + 31074 - 19968: jis0208<<14 | 0x26<<7 | 0x09, + 31077 - 19968: jis0208<<14 | 0x1D<<7 | 0x2C, + 31079 - 19968: jis0212<<14 | 0x2F<<7 | 0x38, + 31080 - 19968: jis0208<<14 | 0x28<<7 | 0x1B, + 31081 - 19968: jis0212<<14 | 0x2F<<7 | 0x39, + 31083 - 19968: jis0212<<14 | 0x2F<<7 | 0x3A, + 31085 - 19968: jis0208<<14 | 0x19<<7 | 0x36, + 31090 - 19968: jis0212<<14 | 0x2F<<7 | 0x3B, + 31095 - 19968: jis0208<<14 | 0x24<<7 | 0x57, + 31097 - 19968: jis0212<<14 | 0x2F<<7 | 0x3C, + 31098 - 19968: jis0208<<14 | 0x42<<7 | 0x11, + 31099 - 19968: jis0212<<14 | 0x2F<<7 | 0x3D, + 31100 - 19968: jis0212<<14 | 0x2F<<7 | 0x3E, + 31102 - 19968: jis0212<<14 | 0x2F<<7 | 0x3F, + 31103 - 19968: jis0208<<14 | 0x42<<7 | 0x12, + 31104 - 19968: jis0208<<14 | 0x42<<7 | 0x28, + 31105 - 19968: jis0208<<14 | 0x15<<7 | 0x37, + 31108 - 19968: jis0208<<14 | 0x2E<<7 | 0x1C, + 31109 - 19968: jis0208<<14 | 0x20<<7 | 0x14, + 31114 - 19968: jis0208<<14 | 0x42<<7 | 0x13, + 31115 - 19968: jis0212<<14 | 0x2F<<7 | 0x40, + 31116 - 19968: jis0212<<14 | 0x2F<<7 | 0x41, + 31117 - 19968: jis0208<<14 | 0x11<<7 | 0x31, + 31118 - 19968: jis0208<<14 | 0x23<<7 | 0x56, + 31119 - 19968: jis0208<<14 | 0x29<<7 | 0x00, + 31121 - 19968: jis0212<<14 | 0x2F<<7 | 0x42, + 31123 - 19968: jis0212<<14 | 0x2F<<7 | 0x43, + 31124 - 19968: jis0208<<14 | 0x5A<<7 | 0x24, + 31125 - 19968: jis0212<<14 | 0x2F<<7 | 0x45, + 31126 - 19968: jis0212<<14 | 0x2F<<7 | 0x46, + 31128 - 19968: jis0212<<14 | 0x2F<<7 | 0x47, + 31131 - 19968: jis0208<<14 | 0x5A<<7 | 0x26, + 31132 - 19968: jis0212<<14 | 0x2F<<7 | 0x49, + 31133 - 19968: jis0208<<14 | 0x42<<7 | 0x14, + 31137 - 19968: jis0212<<14 | 0x2F<<7 | 0x4A, + 31142 - 19968: jis0208<<14 | 0x14<<7 | 0x59, + 31143 - 19968: jis0208<<14 | 0x42<<7 | 0x15, + 31144 - 19968: jis0212<<14 | 0x2F<<7 | 0x4B, + 31145 - 19968: jis0212<<14 | 0x2F<<7 | 0x4C, + 31146 - 19968: jis0208<<14 | 0x42<<7 | 0x17, + 31147 - 19968: jis0212<<14 | 0x2F<<7 | 0x4D, + 31150 - 19968: jis0208<<14 | 0x42<<7 | 0x18, + 31151 - 19968: jis0212<<14 | 0x2F<<7 | 0x4E, + 31152 - 19968: jis0208<<14 | 0x26<<7 | 0x08, + 31153 - 19968: jis0212<<14 | 0x2F<<7 | 0x4F, + 31155 - 19968: jis0208<<14 | 0x42<<7 | 0x19, + 31156 - 19968: jis0212<<14 | 0x2F<<7 | 0x50, + 31160 - 19968: jis0212<<14 | 0x2F<<7 | 0x51, + 31161 - 19968: jis0208<<14 | 0x42<<7 | 0x1A, + 31162 - 19968: jis0208<<14 | 0x42<<7 | 0x1B, + 31163 - 19968: jis0212<<14 | 0x2F<<7 | 0x52, + 31165 - 19968: jis0208<<14 | 0x15<<7 | 0x38, + 31166 - 19968: jis0208<<14 | 0x11<<7 | 0x32, + 31167 - 19968: jis0208<<14 | 0x25<<7 | 0x24, + 31168 - 19968: jis0208<<14 | 0x1C<<7 | 0x07, + 31169 - 19968: jis0208<<14 | 0x1A<<7 | 0x43, + 31170 - 19968: jis0212<<14 | 0x2F<<7 | 0x53, + 31172 - 19968: jis0212<<14 | 0x2F<<7 | 0x54, + 31175 - 19968: jis0212<<14 | 0x2F<<7 | 0x55, + 31176 - 19968: jis0212<<14 | 0x2F<<7 | 0x56, + 31177 - 19968: jis0208<<14 | 0x42<<7 | 0x1C, + 31178 - 19968: jis0212<<14 | 0x2F<<7 | 0x57, + 31179 - 19968: jis0208<<14 | 0x1C<<7 | 0x08, + 31183 - 19968: jis0212<<14 | 0x2F<<7 | 0x58, + 31185 - 19968: jis0208<<14 | 0x11<<7 | 0x29, + 31186 - 19968: jis0208<<14 | 0x28<<7 | 0x22, + 31188 - 19968: jis0212<<14 | 0x2F<<7 | 0x59, + 31189 - 19968: jis0208<<14 | 0x42<<7 | 0x1D, + 31190 - 19968: jis0212<<14 | 0x2F<<7 | 0x5A, + 31192 - 19968: jis0208<<14 | 0x27<<7 | 0x4A, + 31194 - 19968: jis0212<<14 | 0x2F<<7 | 0x5B, + 31197 - 19968: jis0212<<14 | 0x2F<<7 | 0x5C, + 31198 - 19968: jis0212<<14 | 0x2F<<7 | 0x5D, + 31199 - 19968: jis0208<<14 | 0x20<<7 | 0x24, + 31200 - 19968: jis0212<<14 | 0x30<<7 | 0x00, + 31201 - 19968: jis0208<<14 | 0x42<<7 | 0x20, + 31202 - 19968: jis0212<<14 | 0x30<<7 | 0x01, + 31203 - 19968: jis0208<<14 | 0x42<<7 | 0x21, + 31204 - 19968: jis0208<<14 | 0x26<<7 | 0x48, + 31205 - 19968: jis0212<<14 | 0x30<<7 | 0x02, + 31206 - 19968: jis0208<<14 | 0x1E<<7 | 0x20, + 31207 - 19968: jis0208<<14 | 0x42<<7 | 0x1E, + 31209 - 19968: jis0208<<14 | 0x22<<7 | 0x40, + 31210 - 19968: jis0212<<14 | 0x30<<7 | 0x03, + 31211 - 19968: jis0212<<14 | 0x30<<7 | 0x04, + 31212 - 19968: jis0208<<14 | 0x42<<7 | 0x1F, + 31213 - 19968: jis0212<<14 | 0x30<<7 | 0x05, + 31216 - 19968: jis0208<<14 | 0x1D<<7 | 0x2D, + 31217 - 19968: jis0212<<14 | 0x30<<7 | 0x06, + 31224 - 19968: jis0212<<14 | 0x30<<7 | 0x07, + 31227 - 19968: jis0208<<14 | 0x0F<<7 | 0x3B, + 31228 - 19968: jis0212<<14 | 0x30<<7 | 0x08, + 31232 - 19968: jis0208<<14 | 0x14<<7 | 0x08, + 31234 - 19968: jis0212<<14 | 0x30<<7 | 0x09, + 31235 - 19968: jis0212<<14 | 0x30<<7 | 0x0A, + 31239 - 19968: jis0212<<14 | 0x30<<7 | 0x0B, + 31240 - 19968: jis0208<<14 | 0x42<<7 | 0x22, + 31241 - 19968: jis0212<<14 | 0x30<<7 | 0x0C, + 31242 - 19968: jis0212<<14 | 0x30<<7 | 0x0D, + 31243 - 19968: jis0208<<14 | 0x23<<7 | 0x57, + 31244 - 19968: jis0212<<14 | 0x30<<7 | 0x0E, + 31245 - 19968: jis0208<<14 | 0x42<<7 | 0x23, + 31246 - 19968: jis0208<<14 | 0x1F<<7 | 0x26, + 31249 - 19968: jis0212<<14 | 0x30<<7 | 0x0F, + 31252 - 19968: jis0208<<14 | 0x2B<<7 | 0x0C, + 31253 - 19968: jis0212<<14 | 0x30<<7 | 0x10, + 31255 - 19968: jis0208<<14 | 0x28<<7 | 0x02, + 31256 - 19968: jis0208<<14 | 0x42<<7 | 0x24, + 31257 - 19968: jis0208<<14 | 0x42<<7 | 0x25, + 31258 - 19968: jis0208<<14 | 0x22<<7 | 0x34, + 31259 - 19968: jis0212<<14 | 0x30<<7 | 0x11, + 31260 - 19968: jis0208<<14 | 0x2D<<7 | 0x26, + 31262 - 19968: jis0212<<14 | 0x30<<7 | 0x12, + 31263 - 19968: jis0208<<14 | 0x42<<7 | 0x27, + 31264 - 19968: jis0208<<14 | 0x42<<7 | 0x26, + 31265 - 19968: jis0212<<14 | 0x30<<7 | 0x13, + 31271 - 19968: jis0212<<14 | 0x30<<7 | 0x14, + 31275 - 19968: jis0212<<14 | 0x30<<7 | 0x15, + 31277 - 19968: jis0212<<14 | 0x30<<7 | 0x16, + 31278 - 19968: jis0208<<14 | 0x1B<<7 | 0x4E, + 31279 - 19968: jis0212<<14 | 0x30<<7 | 0x17, + 31280 - 19968: jis0212<<14 | 0x30<<7 | 0x18, + 31281 - 19968: jis0208<<14 | 0x42<<7 | 0x29, + 31282 - 19968: jis0208<<14 | 0x0F<<7 | 0x4F, + 31284 - 19968: jis0212<<14 | 0x30<<7 | 0x19, + 31285 - 19968: jis0212<<14 | 0x30<<7 | 0x1A, + 31287 - 19968: jis0208<<14 | 0x42<<7 | 0x2C, + 31288 - 19968: jis0212<<14 | 0x30<<7 | 0x1B, + 31289 - 19968: jis0212<<14 | 0x30<<7 | 0x1C, + 31290 - 19968: jis0212<<14 | 0x30<<7 | 0x1D, + 31291 - 19968: jis0208<<14 | 0x42<<7 | 0x2A, + 31292 - 19968: jis0208<<14 | 0x11<<7 | 0x33, + 31293 - 19968: jis0208<<14 | 0x16<<7 | 0x2D, + 31294 - 19968: jis0208<<14 | 0x42<<7 | 0x2B, + 31295 - 19968: jis0208<<14 | 0x18<<7 | 0x25, + 31296 - 19968: jis0208<<14 | 0x18<<7 | 0x51, + 31298 - 19968: jis0208<<14 | 0x29<<7 | 0x45, + 31299 - 19968: jis0208<<14 | 0x42<<7 | 0x2D, + 31300 - 19968: jis0212<<14 | 0x30<<7 | 0x1E, + 31301 - 19968: jis0212<<14 | 0x30<<7 | 0x1F, + 31302 - 19968: jis0208<<14 | 0x2A<<7 | 0x33, + 31303 - 19968: jis0212<<14 | 0x30<<7 | 0x20, + 31304 - 19968: jis0212<<14 | 0x30<<7 | 0x21, + 31305 - 19968: jis0208<<14 | 0x42<<7 | 0x2F, + 31308 - 19968: jis0212<<14 | 0x30<<7 | 0x22, + 31309 - 19968: jis0208<<14 | 0x1F<<7 | 0x30, + 31310 - 19968: jis0208<<14 | 0x10<<7 | 0x2E, + 31311 - 19968: jis0208<<14 | 0x11<<7 | 0x19, + 31312 - 19968: jis0208<<14 | 0x0F<<7 | 0x0B, + 31317 - 19968: jis0212<<14 | 0x30<<7 | 0x23, + 31318 - 19968: jis0212<<14 | 0x30<<7 | 0x24, + 31319 - 19968: jis0208<<14 | 0x42<<7 | 0x2E, + 31321 - 19968: jis0212<<14 | 0x30<<7 | 0x25, + 31324 - 19968: jis0212<<14 | 0x30<<7 | 0x26, + 31325 - 19968: jis0212<<14 | 0x30<<7 | 0x27, + 31327 - 19968: jis0212<<14 | 0x30<<7 | 0x28, + 31328 - 19968: jis0212<<14 | 0x30<<7 | 0x29, + 31329 - 19968: jis0208<<14 | 0x42<<7 | 0x30, + 31330 - 19968: jis0208<<14 | 0x42<<7 | 0x31, + 31331 - 19968: jis0208<<14 | 0x1D<<7 | 0x56, + 31333 - 19968: jis0212<<14 | 0x30<<7 | 0x2A, + 31335 - 19968: jis0212<<14 | 0x30<<7 | 0x2B, + 31337 - 19968: jis0208<<14 | 0x42<<7 | 0x32, + 31338 - 19968: jis0212<<14 | 0x30<<7 | 0x2C, + 31339 - 19968: jis0208<<14 | 0x12<<7 | 0x2E, + 31341 - 19968: jis0212<<14 | 0x30<<7 | 0x2D, + 31344 - 19968: jis0208<<14 | 0x42<<7 | 0x34, + 31348 - 19968: jis0208<<14 | 0x16<<7 | 0x49, + 31349 - 19968: jis0212<<14 | 0x30<<7 | 0x2E, + 31350 - 19968: jis0208<<14 | 0x14<<7 | 0x45, + 31352 - 19968: jis0212<<14 | 0x30<<7 | 0x2F, + 31353 - 19968: jis0208<<14 | 0x42<<7 | 0x35, + 31354 - 19968: jis0208<<14 | 0x15<<7 | 0x54, + 31357 - 19968: jis0208<<14 | 0x42<<7 | 0x36, + 31358 - 19968: jis0212<<14 | 0x30<<7 | 0x30, + 31359 - 19968: jis0208<<14 | 0x1F<<7 | 0x5B, + 31360 - 19968: jis0212<<14 | 0x30<<7 | 0x31, + 31361 - 19968: jis0208<<14 | 0x25<<7 | 0x2C, + 31362 - 19968: jis0212<<14 | 0x30<<7 | 0x32, + 31363 - 19968: jis0208<<14 | 0x1F<<7 | 0x3F, + 31364 - 19968: jis0208<<14 | 0x19<<7 | 0x54, + 31365 - 19968: jis0212<<14 | 0x30<<7 | 0x33, + 31366 - 19968: jis0212<<14 | 0x30<<7 | 0x34, + 31368 - 19968: jis0208<<14 | 0x42<<7 | 0x37, + 31370 - 19968: jis0212<<14 | 0x30<<7 | 0x35, + 31371 - 19968: jis0212<<14 | 0x30<<7 | 0x36, + 31376 - 19968: jis0212<<14 | 0x30<<7 | 0x37, + 31377 - 19968: jis0212<<14 | 0x30<<7 | 0x38, + 31378 - 19968: jis0208<<14 | 0x22<<7 | 0x41, + 31379 - 19968: jis0208<<14 | 0x20<<7 | 0x4A, + 31380 - 19968: jis0212<<14 | 0x30<<7 | 0x39, + 31381 - 19968: jis0208<<14 | 0x42<<7 | 0x39, + 31382 - 19968: jis0208<<14 | 0x42<<7 | 0x3B, + 31383 - 19968: jis0208<<14 | 0x42<<7 | 0x38, + 31384 - 19968: jis0208<<14 | 0x42<<7 | 0x3A, + 31390 - 19968: jis0212<<14 | 0x30<<7 | 0x3A, + 31391 - 19968: jis0208<<14 | 0x16<<7 | 0x01, + 31392 - 19968: jis0212<<14 | 0x30<<7 | 0x3B, + 31395 - 19968: jis0212<<14 | 0x30<<7 | 0x3C, + 31401 - 19968: jis0208<<14 | 0x42<<7 | 0x3C, + 31402 - 19968: jis0208<<14 | 0x16<<7 | 0x05, + 31404 - 19968: jis0212<<14 | 0x30<<7 | 0x3D, + 31406 - 19968: jis0208<<14 | 0x14<<7 | 0x46, + 31407 - 19968: jis0208<<14 | 0x2C<<7 | 0x31, + 31408 - 19968: jis0208<<14 | 0x42<<7 | 0x3E, + 31411 - 19968: jis0212<<14 | 0x30<<7 | 0x3E, + 31413 - 19968: jis0212<<14 | 0x30<<7 | 0x3F, + 31414 - 19968: jis0208<<14 | 0x42<<7 | 0x3F, + 31417 - 19968: jis0212<<14 | 0x30<<7 | 0x40, + 31418 - 19968: jis0208<<14 | 0x10<<7 | 0x0D, + 31419 - 19968: jis0212<<14 | 0x30<<7 | 0x41, + 31420 - 19968: jis0212<<14 | 0x30<<7 | 0x42, + 31423 - 19968: jis0208<<14 | 0x42<<7 | 0x42, + 31427 - 19968: jis0208<<14 | 0x12<<7 | 0x55, + 31428 - 19968: jis0208<<14 | 0x42<<7 | 0x41, + 31429 - 19968: jis0208<<14 | 0x42<<7 | 0x40, + 31430 - 19968: jis0212<<14 | 0x30<<7 | 0x43, + 31431 - 19968: jis0208<<14 | 0x42<<7 | 0x44, + 31432 - 19968: jis0208<<14 | 0x42<<7 | 0x3D, + 31433 - 19968: jis0212<<14 | 0x30<<7 | 0x44, + 31434 - 19968: jis0208<<14 | 0x42<<7 | 0x45, + 31435 - 19968: jis0208<<14 | 0x2D<<7 | 0x08, + 31436 - 19968: jis0212<<14 | 0x30<<7 | 0x45, + 31437 - 19968: jis0208<<14 | 0x42<<7 | 0x46, + 31438 - 19968: jis0212<<14 | 0x30<<7 | 0x46, + 31439 - 19968: jis0208<<14 | 0x42<<7 | 0x47, + 31441 - 19968: jis0208<<14 | 0x5A<<7 | 0x27, + 31442 - 19968: jis0208<<14 | 0x33<<7 | 0x53, + 31443 - 19968: jis0208<<14 | 0x42<<7 | 0x49, + 31445 - 19968: jis0208<<14 | 0x42<<7 | 0x48, + 31449 - 19968: jis0208<<14 | 0x42<<7 | 0x4A, + 31450 - 19968: jis0208<<14 | 0x42<<7 | 0x4B, + 31451 - 19968: jis0212<<14 | 0x30<<7 | 0x48, + 31452 - 19968: jis0208<<14 | 0x2D<<7 | 0x14, + 31453 - 19968: jis0208<<14 | 0x42<<7 | 0x4C, + 31455 - 19968: jis0208<<14 | 0x4F<<7 | 0x4E, + 31456 - 19968: jis0208<<14 | 0x1D<<7 | 0x2E, + 31457 - 19968: jis0208<<14 | 0x42<<7 | 0x4D, + 31458 - 19968: jis0208<<14 | 0x42<<7 | 0x4E, + 31459 - 19968: jis0208<<14 | 0x1C<<7 | 0x36, + 31461 - 19968: jis0208<<14 | 0x25<<7 | 0x17, + 31462 - 19968: jis0208<<14 | 0x42<<7 | 0x4F, + 31463 - 19968: jis0208<<14 | 0x5A<<7 | 0x28, + 31464 - 19968: jis0212<<14 | 0x30<<7 | 0x49, + 31465 - 19968: jis0212<<14 | 0x30<<7 | 0x4A, + 31466 - 19968: jis0208<<14 | 0x22<<7 | 0x07, + 31467 - 19968: jis0208<<14 | 0x5A<<7 | 0x2A, + 31468 - 19968: jis0212<<14 | 0x30<<7 | 0x4C, + 31469 - 19968: jis0208<<14 | 0x42<<7 | 0x50, + 31471 - 19968: jis0208<<14 | 0x22<<7 | 0x1B, + 31472 - 19968: jis0208<<14 | 0x42<<7 | 0x51, + 31473 - 19968: jis0212<<14 | 0x30<<7 | 0x4D, + 31476 - 19968: jis0212<<14 | 0x30<<7 | 0x4E, + 31478 - 19968: jis0208<<14 | 0x15<<7 | 0x04, + 31480 - 19968: jis0208<<14 | 0x30<<7 | 0x1E, + 31481 - 19968: jis0208<<14 | 0x22<<7 | 0x3C, + 31482 - 19968: jis0208<<14 | 0x1B<<7 | 0x12, + 31483 - 19968: jis0212<<14 | 0x30<<7 | 0x4F, + 31485 - 19968: jis0212<<14 | 0x30<<7 | 0x50, + 31486 - 19968: jis0212<<14 | 0x30<<7 | 0x51, + 31487 - 19968: jis0208<<14 | 0x13<<7 | 0x27, + 31490 - 19968: jis0208<<14 | 0x42<<7 | 0x52, + 31492 - 19968: jis0208<<14 | 0x43<<7 | 0x01, + 31494 - 19968: jis0208<<14 | 0x42<<7 | 0x55, + 31495 - 19968: jis0212<<14 | 0x30<<7 | 0x52, + 31496 - 19968: jis0208<<14 | 0x14<<7 | 0x47, + 31498 - 19968: jis0208<<14 | 0x42<<7 | 0x54, + 31499 - 19968: jis0208<<14 | 0x43<<7 | 0x03, + 31503 - 19968: jis0208<<14 | 0x42<<7 | 0x53, + 31505 - 19968: jis0208<<14 | 0x1D<<7 | 0x2F, + 31508 - 19968: jis0212<<14 | 0x30<<7 | 0x53, + 31512 - 19968: jis0208<<14 | 0x42<<7 | 0x57, + 31513 - 19968: jis0208<<14 | 0x42<<7 | 0x58, + 31515 - 19968: jis0208<<14 | 0x24<<7 | 0x0A, + 31518 - 19968: jis0208<<14 | 0x42<<7 | 0x59, + 31519 - 19968: jis0212<<14 | 0x30<<7 | 0x54, + 31520 - 19968: jis0208<<14 | 0x12<<7 | 0x3D, + 31523 - 19968: jis0212<<14 | 0x30<<7 | 0x55, + 31525 - 19968: jis0208<<14 | 0x1E<<7 | 0x39, + 31526 - 19968: jis0208<<14 | 0x28<<7 | 0x43, + 31527 - 19968: jis0212<<14 | 0x30<<7 | 0x56, + 31528 - 19968: jis0208<<14 | 0x42<<7 | 0x5B, + 31529 - 19968: jis0212<<14 | 0x30<<7 | 0x57, + 31530 - 19968: jis0212<<14 | 0x30<<7 | 0x58, + 31531 - 19968: jis0212<<14 | 0x30<<7 | 0x59, + 31532 - 19968: jis0208<<14 | 0x21<<7 | 0x47, + 31533 - 19968: jis0212<<14 | 0x30<<7 | 0x5A, + 31534 - 19968: jis0212<<14 | 0x30<<7 | 0x5B, + 31535 - 19968: jis0212<<14 | 0x30<<7 | 0x5C, + 31536 - 19968: jis0212<<14 | 0x30<<7 | 0x5D, + 31537 - 19968: jis0212<<14 | 0x31<<7 | 0x00, + 31539 - 19968: jis0208<<14 | 0x42<<7 | 0x56, + 31540 - 19968: jis0212<<14 | 0x31<<7 | 0x01, + 31541 - 19968: jis0208<<14 | 0x42<<7 | 0x5A, + 31542 - 19968: jis0208<<14 | 0x42<<7 | 0x5C, + 31545 - 19968: jis0208<<14 | 0x19<<7 | 0x5A, + 31549 - 19968: jis0212<<14 | 0x31<<7 | 0x02, + 31551 - 19968: jis0212<<14 | 0x31<<7 | 0x03, + 31552 - 19968: jis0212<<14 | 0x31<<7 | 0x04, + 31553 - 19968: jis0212<<14 | 0x31<<7 | 0x05, + 31557 - 19968: jis0208<<14 | 0x43<<7 | 0x05, + 31558 - 19968: jis0208<<14 | 0x28<<7 | 0x0D, + 31559 - 19968: jis0212<<14 | 0x31<<7 | 0x06, + 31560 - 19968: jis0208<<14 | 0x27<<7 | 0x05, + 31561 - 19968: jis0208<<14 | 0x24<<7 | 0x58, + 31563 - 19968: jis0208<<14 | 0x15<<7 | 0x39, + 31564 - 19968: jis0208<<14 | 0x43<<7 | 0x04, + 31565 - 19968: jis0208<<14 | 0x43<<7 | 0x02, + 31566 - 19968: jis0212<<14 | 0x31<<7 | 0x07, + 31567 - 19968: jis0208<<14 | 0x27<<7 | 0x14, + 31568 - 19968: jis0208<<14 | 0x42<<7 | 0x5D, + 31569 - 19968: jis0208<<14 | 0x22<<7 | 0x3D, + 31570 - 19968: jis0208<<14 | 0x24<<7 | 0x5A, + 31572 - 19968: jis0208<<14 | 0x24<<7 | 0x59, + 31573 - 19968: jis0212<<14 | 0x31<<7 | 0x08, + 31574 - 19968: jis0208<<14 | 0x19<<7 | 0x55, + 31581 - 19968: jis0208<<14 | 0x43<<7 | 0x17, + 31584 - 19968: jis0212<<14 | 0x31<<7 | 0x09, + 31588 - 19968: jis0212<<14 | 0x31<<7 | 0x0A, + 31589 - 19968: jis0208<<14 | 0x43<<7 | 0x07, + 31590 - 19968: jis0212<<14 | 0x31<<7 | 0x0B, + 31591 - 19968: jis0208<<14 | 0x43<<7 | 0x09, + 31593 - 19968: jis0212<<14 | 0x31<<7 | 0x0C, + 31594 - 19968: jis0212<<14 | 0x31<<7 | 0x0D, + 31596 - 19968: jis0208<<14 | 0x43<<7 | 0x0C, + 31597 - 19968: jis0212<<14 | 0x31<<7 | 0x0E, + 31598 - 19968: jis0208<<14 | 0x43<<7 | 0x0D, + 31599 - 19968: jis0212<<14 | 0x31<<7 | 0x0F, + 31600 - 19968: jis0208<<14 | 0x43<<7 | 0x0A, + 31601 - 19968: jis0208<<14 | 0x43<<7 | 0x0B, + 31602 - 19968: jis0212<<14 | 0x31<<7 | 0x10, + 31603 - 19968: jis0212<<14 | 0x31<<7 | 0x11, + 31604 - 19968: jis0208<<14 | 0x43<<7 | 0x08, + 31605 - 19968: jis0208<<14 | 0x43<<7 | 0x06, + 31607 - 19968: jis0212<<14 | 0x31<<7 | 0x12, + 31610 - 19968: jis0208<<14 | 0x43<<7 | 0x00, + 31620 - 19968: jis0212<<14 | 0x31<<7 | 0x13, + 31622 - 19968: jis0208<<14 | 0x29<<7 | 0x2E, + 31623 - 19968: jis0208<<14 | 0x11<<7 | 0x34, + 31625 - 19968: jis0212<<14 | 0x31<<7 | 0x14, + 31627 - 19968: jis0208<<14 | 0x43<<7 | 0x14, + 31629 - 19968: jis0208<<14 | 0x43<<7 | 0x11, + 31630 - 19968: jis0212<<14 | 0x31<<7 | 0x15, + 31631 - 19968: jis0208<<14 | 0x43<<7 | 0x16, + 31632 - 19968: jis0212<<14 | 0x31<<7 | 0x16, + 31633 - 19968: jis0212<<14 | 0x31<<7 | 0x17, + 31634 - 19968: jis0208<<14 | 0x43<<7 | 0x15, + 31636 - 19968: jis0208<<14 | 0x26<<7 | 0x52, + 31637 - 19968: jis0208<<14 | 0x2B<<7 | 0x06, + 31638 - 19968: jis0212<<14 | 0x31<<7 | 0x18, + 31639 - 19968: jis0208<<14 | 0x1A<<7 | 0x1A, + 31640 - 19968: jis0208<<14 | 0x43<<7 | 0x0F, + 31641 - 19968: jis0208<<14 | 0x43<<7 | 0x18, + 31642 - 19968: jis0208<<14 | 0x43<<7 | 0x13, + 31643 - 19968: jis0212<<14 | 0x31<<7 | 0x19, + 31644 - 19968: jis0208<<14 | 0x43<<7 | 0x12, + 31645 - 19968: jis0208<<14 | 0x43<<7 | 0x0E, + 31646 - 19968: jis0208<<14 | 0x5A<<7 | 0x2B, + 31647 - 19968: jis0208<<14 | 0x43<<7 | 0x10, + 31648 - 19968: jis0212<<14 | 0x31<<7 | 0x1B, + 31649 - 19968: jis0208<<14 | 0x13<<7 | 0x28, + 31653 - 19968: jis0212<<14 | 0x31<<7 | 0x1C, + 31658 - 19968: jis0208<<14 | 0x22<<7 | 0x1C, + 31660 - 19968: jis0212<<14 | 0x31<<7 | 0x1D, + 31661 - 19968: jis0208<<14 | 0x1F<<7 | 0x5C, + 31663 - 19968: jis0212<<14 | 0x31<<7 | 0x1E, + 31664 - 19968: jis0212<<14 | 0x31<<7 | 0x1F, + 31665 - 19968: jis0208<<14 | 0x27<<7 | 0x01, + 31666 - 19968: jis0212<<14 | 0x31<<7 | 0x20, + 31668 - 19968: jis0208<<14 | 0x43<<7 | 0x1D, + 31669 - 19968: jis0212<<14 | 0x31<<7 | 0x21, + 31670 - 19968: jis0212<<14 | 0x31<<7 | 0x22, + 31672 - 19968: jis0208<<14 | 0x27<<7 | 0x03, + 31674 - 19968: jis0212<<14 | 0x31<<7 | 0x23, + 31675 - 19968: jis0212<<14 | 0x31<<7 | 0x24, + 31676 - 19968: jis0212<<14 | 0x31<<7 | 0x25, + 31677 - 19968: jis0212<<14 | 0x31<<7 | 0x26, + 31680 - 19968: jis0208<<14 | 0x1F<<7 | 0x40, + 31681 - 19968: jis0208<<14 | 0x43<<7 | 0x1A, + 31682 - 19968: jis0212<<14 | 0x31<<7 | 0x27, + 31684 - 19968: jis0208<<14 | 0x27<<7 | 0x2E, + 31685 - 19968: jis0212<<14 | 0x31<<7 | 0x28, + 31686 - 19968: jis0208<<14 | 0x43<<7 | 0x1E, + 31687 - 19968: jis0208<<14 | 0x29<<7 | 0x32, + 31688 - 19968: jis0212<<14 | 0x31<<7 | 0x29, + 31689 - 19968: jis0208<<14 | 0x22<<7 | 0x3A, + 31690 - 19968: jis0212<<14 | 0x31<<7 | 0x2A, + 31691 - 19968: jis0208<<14 | 0x43<<7 | 0x19, + 31692 - 19968: jis0208<<14 | 0x43<<7 | 0x1B, + 31695 - 19968: jis0208<<14 | 0x43<<7 | 0x1C, + 31700 - 19968: jis0212<<14 | 0x31<<7 | 0x2B, + 31702 - 19968: jis0212<<14 | 0x31<<7 | 0x2C, + 31703 - 19968: jis0212<<14 | 0x31<<7 | 0x2D, + 31705 - 19968: jis0212<<14 | 0x31<<7 | 0x2E, + 31706 - 19968: jis0212<<14 | 0x31<<7 | 0x2F, + 31707 - 19968: jis0212<<14 | 0x31<<7 | 0x30, + 31709 - 19968: jis0208<<14 | 0x43<<7 | 0x1F, + 31712 - 19968: jis0208<<14 | 0x1B<<7 | 0x23, + 31716 - 19968: jis0208<<14 | 0x25<<7 | 0x25, + 31717 - 19968: jis0208<<14 | 0x43<<7 | 0x24, + 31718 - 19968: jis0208<<14 | 0x43<<7 | 0x23, + 31720 - 19968: jis0212<<14 | 0x31<<7 | 0x31, + 31721 - 19968: jis0208<<14 | 0x43<<7 | 0x20, + 31722 - 19968: jis0212<<14 | 0x31<<7 | 0x32, + 31725 - 19968: jis0208<<14 | 0x2E<<7 | 0x15, + 31730 - 19968: jis0212<<14 | 0x31<<7 | 0x33, + 31731 - 19968: jis0208<<14 | 0x43<<7 | 0x29, + 31732 - 19968: jis0212<<14 | 0x31<<7 | 0x34, + 31733 - 19968: jis0212<<14 | 0x31<<7 | 0x35, + 31734 - 19968: jis0208<<14 | 0x43<<7 | 0x2D, + 31735 - 19968: jis0208<<14 | 0x43<<7 | 0x2A, + 31736 - 19968: jis0212<<14 | 0x31<<7 | 0x36, + 31737 - 19968: jis0212<<14 | 0x31<<7 | 0x37, + 31738 - 19968: jis0212<<14 | 0x31<<7 | 0x38, + 31740 - 19968: jis0212<<14 | 0x31<<7 | 0x39, + 31742 - 19968: jis0212<<14 | 0x31<<7 | 0x3A, + 31744 - 19968: jis0208<<14 | 0x43<<7 | 0x26, + 31745 - 19968: jis0212<<14 | 0x31<<7 | 0x3B, + 31746 - 19968: jis0212<<14 | 0x31<<7 | 0x3C, + 31747 - 19968: jis0212<<14 | 0x31<<7 | 0x3D, + 31748 - 19968: jis0212<<14 | 0x31<<7 | 0x3E, + 31750 - 19968: jis0212<<14 | 0x31<<7 | 0x3F, + 31751 - 19968: jis0208<<14 | 0x43<<7 | 0x27, + 31753 - 19968: jis0212<<14 | 0x31<<7 | 0x40, + 31755 - 19968: jis0212<<14 | 0x31<<7 | 0x41, + 31756 - 19968: jis0212<<14 | 0x31<<7 | 0x42, + 31757 - 19968: jis0208<<14 | 0x43<<7 | 0x2C, + 31758 - 19968: jis0212<<14 | 0x31<<7 | 0x43, + 31759 - 19968: jis0212<<14 | 0x31<<7 | 0x44, + 31761 - 19968: jis0208<<14 | 0x43<<7 | 0x21, + 31762 - 19968: jis0208<<14 | 0x31<<7 | 0x34, + 31763 - 19968: jis0208<<14 | 0x43<<7 | 0x28, + 31764 - 19968: jis0208<<14 | 0x43<<7 | 0x22, + 31767 - 19968: jis0208<<14 | 0x43<<7 | 0x2B, + 31769 - 19968: jis0212<<14 | 0x31<<7 | 0x45, + 31771 - 19968: jis0212<<14 | 0x31<<7 | 0x46, + 31775 - 19968: jis0208<<14 | 0x43<<7 | 0x31, + 31776 - 19968: jis0212<<14 | 0x31<<7 | 0x47, + 31777 - 19968: jis0208<<14 | 0x13<<7 | 0x29, + 31779 - 19968: jis0208<<14 | 0x43<<7 | 0x2E, + 31781 - 19968: jis0212<<14 | 0x31<<7 | 0x48, + 31782 - 19968: jis0212<<14 | 0x31<<7 | 0x49, + 31783 - 19968: jis0208<<14 | 0x43<<7 | 0x2F, + 31784 - 19968: jis0212<<14 | 0x31<<7 | 0x4A, + 31786 - 19968: jis0208<<14 | 0x43<<7 | 0x30, + 31787 - 19968: jis0208<<14 | 0x43<<7 | 0x33, + 31788 - 19968: jis0212<<14 | 0x31<<7 | 0x4B, + 31793 - 19968: jis0212<<14 | 0x31<<7 | 0x4C, + 31795 - 19968: jis0212<<14 | 0x31<<7 | 0x4D, + 31796 - 19968: jis0212<<14 | 0x31<<7 | 0x4E, + 31798 - 19968: jis0212<<14 | 0x31<<7 | 0x4F, + 31799 - 19968: jis0208<<14 | 0x43<<7 | 0x32, + 31800 - 19968: jis0208<<14 | 0x27<<7 | 0x55, + 31801 - 19968: jis0212<<14 | 0x31<<7 | 0x50, + 31802 - 19968: jis0212<<14 | 0x31<<7 | 0x51, + 31805 - 19968: jis0208<<14 | 0x43<<7 | 0x34, + 31806 - 19968: jis0208<<14 | 0x2D<<7 | 0x5B, + 31807 - 19968: jis0208<<14 | 0x29<<7 | 0x4C, + 31808 - 19968: jis0208<<14 | 0x43<<7 | 0x39, + 31811 - 19968: jis0208<<14 | 0x43<<7 | 0x36, + 31814 - 19968: jis0212<<14 | 0x31<<7 | 0x52, + 31818 - 19968: jis0212<<14 | 0x31<<7 | 0x53, + 31820 - 19968: jis0208<<14 | 0x43<<7 | 0x35, + 31821 - 19968: jis0208<<14 | 0x1F<<7 | 0x31, + 31823 - 19968: jis0208<<14 | 0x43<<7 | 0x38, + 31824 - 19968: jis0208<<14 | 0x43<<7 | 0x3A, + 31825 - 19968: jis0212<<14 | 0x31<<7 | 0x55, + 31826 - 19968: jis0212<<14 | 0x31<<7 | 0x56, + 31827 - 19968: jis0212<<14 | 0x31<<7 | 0x57, + 31828 - 19968: jis0208<<14 | 0x43<<7 | 0x37, + 31829 - 19968: jis0212<<14 | 0x31<<7 | 0x54, + 31830 - 19968: jis0208<<14 | 0x43<<7 | 0x3E, + 31832 - 19968: jis0208<<14 | 0x43<<7 | 0x3B, + 31833 - 19968: jis0212<<14 | 0x31<<7 | 0x58, + 31834 - 19968: jis0212<<14 | 0x31<<7 | 0x59, + 31835 - 19968: jis0212<<14 | 0x31<<7 | 0x5A, + 31836 - 19968: jis0212<<14 | 0x31<<7 | 0x5B, + 31837 - 19968: jis0212<<14 | 0x31<<7 | 0x5C, + 31838 - 19968: jis0212<<14 | 0x31<<7 | 0x5D, + 31839 - 19968: jis0208<<14 | 0x43<<7 | 0x3C, + 31840 - 19968: jis0208<<14 | 0x43<<7 | 0x25, + 31841 - 19968: jis0212<<14 | 0x32<<7 | 0x00, + 31843 - 19968: jis0212<<14 | 0x32<<7 | 0x01, + 31844 - 19968: jis0208<<14 | 0x43<<7 | 0x3D, + 31845 - 19968: jis0208<<14 | 0x43<<7 | 0x3F, + 31847 - 19968: jis0212<<14 | 0x32<<7 | 0x02, + 31849 - 19968: jis0212<<14 | 0x32<<7 | 0x03, + 31852 - 19968: jis0208<<14 | 0x43<<7 | 0x40, + 31853 - 19968: jis0212<<14 | 0x32<<7 | 0x04, + 31854 - 19968: jis0212<<14 | 0x32<<7 | 0x05, + 31856 - 19968: jis0212<<14 | 0x32<<7 | 0x06, + 31858 - 19968: jis0212<<14 | 0x32<<7 | 0x07, + 31859 - 19968: jis0208<<14 | 0x29<<7 | 0x25, + 31861 - 19968: jis0208<<14 | 0x43<<7 | 0x41, + 31865 - 19968: jis0212<<14 | 0x32<<7 | 0x08, + 31868 - 19968: jis0212<<14 | 0x32<<7 | 0x09, + 31869 - 19968: jis0212<<14 | 0x32<<7 | 0x0A, + 31870 - 19968: jis0208<<14 | 0x2B<<7 | 0x41, + 31873 - 19968: jis0208<<14 | 0x15<<7 | 0x2D, + 31874 - 19968: jis0208<<14 | 0x16<<7 | 0x08, + 31875 - 19968: jis0208<<14 | 0x43<<7 | 0x42, + 31878 - 19968: jis0212<<14 | 0x32<<7 | 0x0B, + 31879 - 19968: jis0212<<14 | 0x32<<7 | 0x0C, + 31881 - 19968: jis0208<<14 | 0x29<<7 | 0x13, + 31883 - 19968: jis0208<<14 | 0x1E<<7 | 0x47, + 31885 - 19968: jis0208<<14 | 0x2B<<7 | 0x0F, + 31887 - 19968: jis0212<<14 | 0x32<<7 | 0x0D, + 31888 - 19968: jis0208<<14 | 0x43<<7 | 0x43, + 31890 - 19968: jis0208<<14 | 0x2D<<7 | 0x12, + 31892 - 19968: jis0212<<14 | 0x32<<7 | 0x0E, + 31893 - 19968: jis0208<<14 | 0x26<<7 | 0x53, + 31895 - 19968: jis0208<<14 | 0x20<<7 | 0x25, + 31896 - 19968: jis0208<<14 | 0x26<<7 | 0x13, + 31899 - 19968: jis0208<<14 | 0x1C<<7 | 0x2C, + 31902 - 19968: jis0212<<14 | 0x32<<7 | 0x0F, + 31903 - 19968: jis0208<<14 | 0x0F<<7 | 0x1F, + 31904 - 19968: jis0212<<14 | 0x32<<7 | 0x10, + 31905 - 19968: jis0208<<14 | 0x43<<7 | 0x48, + 31906 - 19968: jis0208<<14 | 0x43<<7 | 0x46, + 31908 - 19968: jis0208<<14 | 0x43<<7 | 0x44, + 31909 - 19968: jis0208<<14 | 0x13<<7 | 0x00, + 31910 - 19968: jis0212<<14 | 0x32<<7 | 0x11, + 31911 - 19968: jis0208<<14 | 0x1D<<7 | 0x30, + 31912 - 19968: jis0208<<14 | 0x43<<7 | 0x49, + 31915 - 19968: jis0208<<14 | 0x43<<7 | 0x47, + 31917 - 19968: jis0208<<14 | 0x43<<7 | 0x45, + 31918 - 19968: jis0208<<14 | 0x43<<7 | 0x4D, + 31920 - 19968: jis0212<<14 | 0x32<<7 | 0x12, + 31921 - 19968: jis0208<<14 | 0x43<<7 | 0x4C, + 31922 - 19968: jis0208<<14 | 0x43<<7 | 0x4B, + 31923 - 19968: jis0208<<14 | 0x43<<7 | 0x4A, + 31926 - 19968: jis0212<<14 | 0x32<<7 | 0x13, + 31927 - 19968: jis0212<<14 | 0x32<<7 | 0x14, + 31929 - 19968: jis0208<<14 | 0x43<<7 | 0x4E, + 31930 - 19968: jis0212<<14 | 0x32<<7 | 0x15, + 31931 - 19968: jis0212<<14 | 0x32<<7 | 0x16, + 31932 - 19968: jis0212<<14 | 0x32<<7 | 0x17, + 31933 - 19968: jis0208<<14 | 0x43<<7 | 0x4F, + 31934 - 19968: jis0208<<14 | 0x1F<<7 | 0x19, + 31935 - 19968: jis0212<<14 | 0x32<<7 | 0x18, + 31936 - 19968: jis0208<<14 | 0x43<<7 | 0x50, + 31938 - 19968: jis0208<<14 | 0x43<<7 | 0x52, + 31940 - 19968: jis0212<<14 | 0x32<<7 | 0x19, + 31941 - 19968: jis0208<<14 | 0x43<<7 | 0x51, + 31943 - 19968: jis0212<<14 | 0x32<<7 | 0x1A, + 31944 - 19968: jis0212<<14 | 0x32<<7 | 0x1B, + 31945 - 19968: jis0212<<14 | 0x32<<7 | 0x1C, + 31946 - 19968: jis0208<<14 | 0x17<<7 | 0x31, + 31949 - 19968: jis0212<<14 | 0x32<<7 | 0x1D, + 31950 - 19968: jis0208<<14 | 0x20<<7 | 0x17, + 31951 - 19968: jis0212<<14 | 0x32<<7 | 0x1E, + 31954 - 19968: jis0208<<14 | 0x43<<7 | 0x54, + 31955 - 19968: jis0212<<14 | 0x32<<7 | 0x1F, + 31956 - 19968: jis0212<<14 | 0x32<<7 | 0x20, + 31957 - 19968: jis0212<<14 | 0x32<<7 | 0x21, + 31958 - 19968: jis0208<<14 | 0x24<<7 | 0x5B, + 31959 - 19968: jis0212<<14 | 0x32<<7 | 0x22, + 31960 - 19968: jis0208<<14 | 0x43<<7 | 0x53, + 31961 - 19968: jis0212<<14 | 0x32<<7 | 0x23, + 31962 - 19968: jis0212<<14 | 0x32<<7 | 0x24, + 31964 - 19968: jis0208<<14 | 0x43<<7 | 0x55, + 31965 - 19968: jis0212<<14 | 0x32<<7 | 0x25, + 31966 - 19968: jis0208<<14 | 0x29<<7 | 0x14, + 31967 - 19968: jis0208<<14 | 0x20<<7 | 0x4B, + 31968 - 19968: jis0208<<14 | 0x18<<7 | 0x26, + 31970 - 19968: jis0208<<14 | 0x43<<7 | 0x56, + 31974 - 19968: jis0212<<14 | 0x32<<7 | 0x26, + 31975 - 19968: jis0208<<14 | 0x2D<<7 | 0x27, + 31977 - 19968: jis0212<<14 | 0x32<<7 | 0x27, + 31979 - 19968: jis0212<<14 | 0x32<<7 | 0x28, + 31983 - 19968: jis0208<<14 | 0x43<<7 | 0x58, + 31986 - 19968: jis0208<<14 | 0x43<<7 | 0x59, + 31988 - 19968: jis0208<<14 | 0x43<<7 | 0x5A, + 31989 - 19968: jis0212<<14 | 0x32<<7 | 0x29, + 31990 - 19968: jis0208<<14 | 0x43<<7 | 0x5B, + 31992 - 19968: jis0208<<14 | 0x1A<<7 | 0x44, + 31994 - 19968: jis0208<<14 | 0x43<<7 | 0x5C, + 31995 - 19968: jis0208<<14 | 0x16<<7 | 0x2E, + 31998 - 19968: jis0208<<14 | 0x14<<7 | 0x49, + 32000 - 19968: jis0208<<14 | 0x14<<7 | 0x09, + 32002 - 19968: jis0208<<14 | 0x44<<7 | 0x00, + 32003 - 19968: jis0212<<14 | 0x32<<7 | 0x2A, + 32004 - 19968: jis0208<<14 | 0x2B<<7 | 0x52, + 32005 - 19968: jis0208<<14 | 0x18<<7 | 0x27, + 32006 - 19968: jis0208<<14 | 0x43<<7 | 0x5D, + 32007 - 19968: jis0212<<14 | 0x32<<7 | 0x2B, + 32008 - 19968: jis0212<<14 | 0x32<<7 | 0x2C, + 32009 - 19968: jis0212<<14 | 0x32<<7 | 0x2D, + 32010 - 19968: jis0208<<14 | 0x44<<7 | 0x03, + 32011 - 19968: jis0208<<14 | 0x2B<<7 | 0x45, + 32013 - 19968: jis0208<<14 | 0x26<<7 | 0x1B, + 32015 - 19968: jis0212<<14 | 0x32<<7 | 0x2E, + 32016 - 19968: jis0208<<14 | 0x28<<7 | 0x12, + 32017 - 19968: jis0212<<14 | 0x32<<7 | 0x2F, + 32018 - 19968: jis0212<<14 | 0x32<<7 | 0x30, + 32019 - 19968: jis0212<<14 | 0x32<<7 | 0x31, + 32020 - 19968: jis0208<<14 | 0x1C<<7 | 0x42, + 32021 - 19968: jis0208<<14 | 0x44<<7 | 0x02, + 32022 - 19968: jis0212<<14 | 0x32<<7 | 0x32, + 32023 - 19968: jis0208<<14 | 0x1B<<7 | 0x32, + 32024 - 19968: jis0208<<14 | 0x18<<7 | 0x28, + 32025 - 19968: jis0208<<14 | 0x1A<<7 | 0x45, + 32026 - 19968: jis0208<<14 | 0x14<<7 | 0x48, + 32027 - 19968: jis0208<<14 | 0x29<<7 | 0x15, + 32028 - 19968: jis0208<<14 | 0x44<<7 | 0x01, + 32029 - 19968: jis0212<<14 | 0x32<<7 | 0x33, + 32030 - 19968: jis0212<<14 | 0x32<<7 | 0x34, + 32032 - 19968: jis0208<<14 | 0x20<<7 | 0x26, + 32033 - 19968: jis0208<<14 | 0x2A<<7 | 0x21, + 32034 - 19968: jis0208<<14 | 0x19<<7 | 0x56, + 32035 - 19968: jis0212<<14 | 0x32<<7 | 0x35, + 32038 - 19968: jis0212<<14 | 0x32<<7 | 0x36, + 32042 - 19968: jis0212<<14 | 0x32<<7 | 0x37, + 32043 - 19968: jis0208<<14 | 0x1A<<7 | 0x46, + 32044 - 19968: jis0208<<14 | 0x23<<7 | 0x3C, + 32045 - 19968: jis0212<<14 | 0x32<<7 | 0x38, + 32046 - 19968: jis0208<<14 | 0x44<<7 | 0x06, + 32047 - 19968: jis0208<<14 | 0x2D<<7 | 0x3E, + 32048 - 19968: jis0208<<14 | 0x19<<7 | 0x38, + 32049 - 19968: jis0212<<14 | 0x32<<7 | 0x39, + 32050 - 19968: jis0208<<14 | 0x44<<7 | 0x07, + 32051 - 19968: jis0208<<14 | 0x1E<<7 | 0x21, + 32053 - 19968: jis0208<<14 | 0x44<<7 | 0x09, + 32057 - 19968: jis0208<<14 | 0x1D<<7 | 0x31, + 32058 - 19968: jis0208<<14 | 0x19<<7 | 0x0F, + 32060 - 19968: jis0212<<14 | 0x32<<7 | 0x3A, + 32061 - 19968: jis0212<<14 | 0x32<<7 | 0x3B, + 32062 - 19968: jis0212<<14 | 0x32<<7 | 0x3C, + 32063 - 19968: jis0208<<14 | 0x44<<7 | 0x08, + 32064 - 19968: jis0212<<14 | 0x32<<7 | 0x3D, + 32065 - 19968: jis0212<<14 | 0x32<<7 | 0x3E, + 32066 - 19968: jis0208<<14 | 0x1C<<7 | 0x09, + 32067 - 19968: jis0208<<14 | 0x17<<7 | 0x1D, + 32068 - 19968: jis0208<<14 | 0x20<<7 | 0x27, + 32069 - 19968: jis0208<<14 | 0x44<<7 | 0x04, + 32070 - 19968: jis0208<<14 | 0x44<<7 | 0x0A, + 32071 - 19968: jis0212<<14 | 0x32<<7 | 0x3F, + 32072 - 19968: jis0208<<14 | 0x5A<<7 | 0x2D, + 32075 - 19968: jis0208<<14 | 0x44<<7 | 0x05, + 32076 - 19968: jis0208<<14 | 0x16<<7 | 0x2F, + 32077 - 19968: jis0212<<14 | 0x32<<7 | 0x41, + 32078 - 19968: jis0208<<14 | 0x44<<7 | 0x0D, + 32079 - 19968: jis0208<<14 | 0x44<<7 | 0x11, + 32080 - 19968: jis0208<<14 | 0x16<<7 | 0x4A, + 32081 - 19968: jis0212<<14 | 0x32<<7 | 0x42, + 32083 - 19968: jis0212<<14 | 0x32<<7 | 0x43, + 32086 - 19968: jis0208<<14 | 0x44<<7 | 0x0C, + 32087 - 19968: jis0212<<14 | 0x32<<7 | 0x44, + 32089 - 19968: jis0212<<14 | 0x32<<7 | 0x45, + 32090 - 19968: jis0212<<14 | 0x32<<7 | 0x46, + 32091 - 19968: jis0208<<14 | 0x44<<7 | 0x15, + 32092 - 19968: jis0208<<14 | 0x5A<<7 | 0x2E, + 32093 - 19968: jis0212<<14 | 0x32<<7 | 0x48, + 32094 - 19968: jis0208<<14 | 0x18<<7 | 0x29, + 32097 - 19968: jis0208<<14 | 0x2C<<7 | 0x4C, + 32098 - 19968: jis0208<<14 | 0x0F<<7 | 0x1B, + 32099 - 19968: jis0208<<14 | 0x44<<7 | 0x12, + 32101 - 19968: jis0212<<14 | 0x32<<7 | 0x49, + 32102 - 19968: jis0208<<14 | 0x14<<7 | 0x4A, + 32103 - 19968: jis0212<<14 | 0x32<<7 | 0x4A, + 32104 - 19968: jis0208<<14 | 0x44<<7 | 0x0F, + 32106 - 19968: jis0212<<14 | 0x32<<7 | 0x4B, + 32110 - 19968: jis0208<<14 | 0x44<<7 | 0x10, + 32112 - 19968: jis0212<<14 | 0x32<<7 | 0x4C, + 32113 - 19968: jis0208<<14 | 0x24<<7 | 0x5C, + 32114 - 19968: jis0208<<14 | 0x44<<7 | 0x0E, + 32115 - 19968: jis0208<<14 | 0x44<<7 | 0x0B, + 32117 - 19968: jis0208<<14 | 0x12<<7 | 0x07, + 32118 - 19968: jis0208<<14 | 0x1F<<7 | 0x43, + 32120 - 19968: jis0212<<14 | 0x32<<7 | 0x4D, + 32121 - 19968: jis0208<<14 | 0x17<<7 | 0x07, + 32122 - 19968: jis0212<<14 | 0x32<<7 | 0x4E, + 32123 - 19968: jis0212<<14 | 0x32<<7 | 0x4F, + 32125 - 19968: jis0208<<14 | 0x44<<7 | 0x17, + 32127 - 19968: jis0212<<14 | 0x32<<7 | 0x50, + 32129 - 19968: jis0212<<14 | 0x32<<7 | 0x51, + 32130 - 19968: jis0212<<14 | 0x32<<7 | 0x52, + 32131 - 19968: jis0212<<14 | 0x32<<7 | 0x53, + 32133 - 19968: jis0212<<14 | 0x32<<7 | 0x54, + 32134 - 19968: jis0212<<14 | 0x32<<7 | 0x55, + 32136 - 19968: jis0212<<14 | 0x32<<7 | 0x56, + 32137 - 19968: jis0208<<14 | 0x44<<7 | 0x14, + 32139 - 19968: jis0212<<14 | 0x32<<7 | 0x57, + 32140 - 19968: jis0212<<14 | 0x32<<7 | 0x58, + 32141 - 19968: jis0212<<14 | 0x32<<7 | 0x59, + 32143 - 19968: jis0208<<14 | 0x44<<7 | 0x16, + 32145 - 19968: jis0212<<14 | 0x32<<7 | 0x5A, + 32147 - 19968: jis0208<<14 | 0x44<<7 | 0x13, + 32150 - 19968: jis0212<<14 | 0x32<<7 | 0x5B, + 32151 - 19968: jis0212<<14 | 0x32<<7 | 0x5C, + 32153 - 19968: jis0208<<14 | 0x16<<7 | 0x30, + 32154 - 19968: jis0208<<14 | 0x21<<7 | 0x12, + 32155 - 19968: jis0208<<14 | 0x44<<7 | 0x18, + 32156 - 19968: jis0208<<14 | 0x20<<7 | 0x4D, + 32157 - 19968: jis0212<<14 | 0x32<<7 | 0x5D, + 32158 - 19968: jis0212<<14 | 0x33<<7 | 0x00, + 32159 - 19968: jis0208<<14 | 0x44<<7 | 0x25, + 32160 - 19968: jis0208<<14 | 0x5A<<7 | 0x30, + 32162 - 19968: jis0208<<14 | 0x44<<7 | 0x21, + 32163 - 19968: jis0208<<14 | 0x44<<7 | 0x1B, + 32166 - 19968: jis0212<<14 | 0x33<<7 | 0x01, + 32167 - 19968: jis0212<<14 | 0x33<<7 | 0x02, + 32170 - 19968: jis0212<<14 | 0x33<<7 | 0x03, + 32171 - 19968: jis0208<<14 | 0x44<<7 | 0x1F, + 32172 - 19968: jis0208<<14 | 0x1B<<7 | 0x59, + 32173 - 19968: jis0208<<14 | 0x0F<<7 | 0x3C, + 32174 - 19968: jis0208<<14 | 0x44<<7 | 0x1A, + 32175 - 19968: jis0208<<14 | 0x44<<7 | 0x22, + 32176 - 19968: jis0208<<14 | 0x44<<7 | 0x26, + 32177 - 19968: jis0208<<14 | 0x18<<7 | 0x2A, + 32178 - 19968: jis0208<<14 | 0x2B<<7 | 0x35, + 32179 - 19968: jis0212<<14 | 0x33<<7 | 0x04, + 32180 - 19968: jis0208<<14 | 0x23<<7 | 0x35, + 32181 - 19968: jis0208<<14 | 0x44<<7 | 0x1C, + 32182 - 19968: jis0212<<14 | 0x33<<7 | 0x05, + 32183 - 19968: jis0208<<14 | 0x5A<<7 | 0x2F, + 32184 - 19968: jis0208<<14 | 0x44<<7 | 0x24, + 32185 - 19968: jis0212<<14 | 0x33<<7 | 0x07, + 32186 - 19968: jis0208<<14 | 0x44<<7 | 0x19, + 32187 - 19968: jis0208<<14 | 0x22<<7 | 0x1D, + 32189 - 19968: jis0208<<14 | 0x44<<7 | 0x1E, + 32190 - 19968: jis0208<<14 | 0x0F<<7 | 0x1C, + 32191 - 19968: jis0208<<14 | 0x2B<<7 | 0x29, + 32194 - 19968: jis0212<<14 | 0x33<<7 | 0x08, + 32195 - 19968: jis0212<<14 | 0x33<<7 | 0x09, + 32196 - 19968: jis0212<<14 | 0x33<<7 | 0x0A, + 32197 - 19968: jis0212<<14 | 0x33<<7 | 0x0B, + 32198 - 19968: jis0212<<14 | 0x33<<7 | 0x0C, + 32199 - 19968: jis0208<<14 | 0x44<<7 | 0x1D, + 32202 - 19968: jis0208<<14 | 0x15<<7 | 0x3A, + 32203 - 19968: jis0208<<14 | 0x27<<7 | 0x4B, + 32204 - 19968: jis0212<<14 | 0x33<<7 | 0x0D, + 32205 - 19968: jis0212<<14 | 0x33<<7 | 0x0E, + 32206 - 19968: jis0212<<14 | 0x33<<7 | 0x0F, + 32207 - 19968: jis0208<<14 | 0x20<<7 | 0x4C, + 32209 - 19968: jis0208<<14 | 0x2D<<7 | 0x2F, + 32210 - 19968: jis0208<<14 | 0x1C<<7 | 0x4E, + 32213 - 19968: jis0208<<14 | 0x44<<7 | 0x4D, + 32214 - 19968: jis0208<<14 | 0x5A<<7 | 0x31, + 32215 - 19968: jis0212<<14 | 0x33<<7 | 0x10, + 32216 - 19968: jis0208<<14 | 0x44<<7 | 0x27, + 32217 - 19968: jis0212<<14 | 0x33<<7 | 0x11, + 32218 - 19968: jis0208<<14 | 0x1F<<7 | 0x5D, + 32220 - 19968: jis0208<<14 | 0x44<<7 | 0x23, + 32221 - 19968: jis0208<<14 | 0x44<<7 | 0x28, + 32222 - 19968: jis0208<<14 | 0x44<<7 | 0x2A, + 32224 - 19968: jis0208<<14 | 0x23<<7 | 0x58, + 32225 - 19968: jis0208<<14 | 0x44<<7 | 0x2D, + 32226 - 19968: jis0212<<14 | 0x33<<7 | 0x13, + 32228 - 19968: jis0208<<14 | 0x44<<7 | 0x29, + 32229 - 19968: jis0212<<14 | 0x33<<7 | 0x14, + 32230 - 19968: jis0212<<14 | 0x33<<7 | 0x15, + 32232 - 19968: jis0208<<14 | 0x29<<7 | 0x33, + 32233 - 19968: jis0208<<14 | 0x13<<7 | 0x2A, + 32234 - 19968: jis0212<<14 | 0x33<<7 | 0x16, + 32235 - 19968: jis0212<<14 | 0x33<<7 | 0x17, + 32236 - 19968: jis0208<<14 | 0x2B<<7 | 0x2A, + 32237 - 19968: jis0212<<14 | 0x33<<7 | 0x18, + 32239 - 19968: jis0208<<14 | 0x0F<<7 | 0x3D, + 32241 - 19968: jis0212<<14 | 0x33<<7 | 0x19, + 32242 - 19968: jis0208<<14 | 0x44<<7 | 0x2C, + 32244 - 19968: jis0208<<14 | 0x2D<<7 | 0x5C, + 32245 - 19968: jis0212<<14 | 0x33<<7 | 0x1A, + 32246 - 19968: jis0212<<14 | 0x33<<7 | 0x1B, + 32249 - 19968: jis0212<<14 | 0x33<<7 | 0x1C, + 32250 - 19968: jis0212<<14 | 0x33<<7 | 0x1D, + 32251 - 19968: jis0208<<14 | 0x44<<7 | 0x2B, + 32256 - 19968: jis0212<<14 | 0x33<<7 | 0x12, + 32257 - 19968: jis0208<<14 | 0x10<<7 | 0x4E, + 32260 - 19968: jis0208<<14 | 0x25<<7 | 0x4B, + 32261 - 19968: jis0208<<14 | 0x44<<7 | 0x2E, + 32264 - 19968: jis0212<<14 | 0x33<<7 | 0x1E, + 32265 - 19968: jis0208<<14 | 0x44<<7 | 0x35, + 32266 - 19968: jis0208<<14 | 0x44<<7 | 0x2F, + 32267 - 19968: jis0208<<14 | 0x44<<7 | 0x36, + 32272 - 19968: jis0212<<14 | 0x33<<7 | 0x1F, + 32273 - 19968: jis0212<<14 | 0x33<<7 | 0x20, + 32274 - 19968: jis0208<<14 | 0x44<<7 | 0x32, + 32277 - 19968: jis0212<<14 | 0x33<<7 | 0x21, + 32279 - 19968: jis0212<<14 | 0x33<<7 | 0x22, + 32283 - 19968: jis0208<<14 | 0x26<<7 | 0x5A, + 32284 - 19968: jis0212<<14 | 0x33<<7 | 0x23, + 32285 - 19968: jis0212<<14 | 0x33<<7 | 0x24, + 32286 - 19968: jis0208<<14 | 0x1B<<7 | 0x29, + 32287 - 19968: jis0208<<14 | 0x44<<7 | 0x34, + 32288 - 19968: jis0212<<14 | 0x33<<7 | 0x25, + 32289 - 19968: jis0208<<14 | 0x44<<7 | 0x31, + 32290 - 19968: jis0208<<14 | 0x44<<7 | 0x37, + 32291 - 19968: jis0208<<14 | 0x44<<7 | 0x30, + 32294 - 19968: jis0208<<14 | 0x1C<<7 | 0x23, + 32295 - 19968: jis0212<<14 | 0x33<<7 | 0x26, + 32296 - 19968: jis0212<<14 | 0x33<<7 | 0x27, + 32299 - 19968: jis0208<<14 | 0x2A<<7 | 0x04, + 32300 - 19968: jis0212<<14 | 0x33<<7 | 0x28, + 32301 - 19968: jis0212<<14 | 0x33<<7 | 0x29, + 32302 - 19968: jis0208<<14 | 0x1C<<7 | 0x2B, + 32303 - 19968: jis0212<<14 | 0x33<<7 | 0x2A, + 32305 - 19968: jis0208<<14 | 0x44<<7 | 0x33, + 32306 - 19968: jis0208<<14 | 0x44<<7 | 0x3F, + 32307 - 19968: jis0212<<14 | 0x33<<7 | 0x2B, + 32309 - 19968: jis0208<<14 | 0x44<<7 | 0x3B, + 32310 - 19968: jis0212<<14 | 0x33<<7 | 0x2C, + 32311 - 19968: jis0208<<14 | 0x44<<7 | 0x3E, + 32313 - 19968: jis0208<<14 | 0x44<<7 | 0x3C, + 32314 - 19968: jis0208<<14 | 0x44<<7 | 0x40, + 32315 - 19968: jis0208<<14 | 0x44<<7 | 0x3A, + 32317 - 19968: jis0208<<14 | 0x44<<7 | 0x20, + 32318 - 19968: jis0208<<14 | 0x1F<<7 | 0x32, + 32319 - 19968: jis0212<<14 | 0x33<<7 | 0x2D, + 32321 - 19968: jis0208<<14 | 0x27<<7 | 0x2A, + 32323 - 19968: jis0208<<14 | 0x44<<7 | 0x3D, + 32324 - 19968: jis0212<<14 | 0x33<<7 | 0x2E, + 32325 - 19968: jis0212<<14 | 0x33<<7 | 0x2F, + 32326 - 19968: jis0208<<14 | 0x44<<7 | 0x38, + 32327 - 19968: jis0212<<14 | 0x33<<7 | 0x30, + 32330 - 19968: jis0208<<14 | 0x20<<7 | 0x00, + 32331 - 19968: jis0208<<14 | 0x16<<7 | 0x31, + 32333 - 19968: jis0208<<14 | 0x1C<<7 | 0x0A, + 32334 - 19968: jis0212<<14 | 0x33<<7 | 0x31, + 32336 - 19968: jis0212<<14 | 0x33<<7 | 0x32, + 32338 - 19968: jis0208<<14 | 0x5A<<7 | 0x32, + 32340 - 19968: jis0208<<14 | 0x1E<<7 | 0x04, + 32341 - 19968: jis0208<<14 | 0x20<<7 | 0x15, + 32342 - 19968: jis0208<<14 | 0x44<<7 | 0x43, + 32344 - 19968: jis0212<<14 | 0x33<<7 | 0x34, + 32345 - 19968: jis0208<<14 | 0x44<<7 | 0x45, + 32346 - 19968: jis0208<<14 | 0x44<<7 | 0x46, + 32349 - 19968: jis0208<<14 | 0x44<<7 | 0x42, + 32350 - 19968: jis0208<<14 | 0x44<<7 | 0x44, + 32351 - 19968: jis0212<<14 | 0x33<<7 | 0x35, + 32353 - 19968: jis0212<<14 | 0x33<<7 | 0x36, + 32354 - 19968: jis0212<<14 | 0x33<<7 | 0x37, + 32357 - 19968: jis0212<<14 | 0x33<<7 | 0x38, + 32358 - 19968: jis0208<<14 | 0x44<<7 | 0x39, + 32359 - 19968: jis0208<<14 | 0x44<<7 | 0x41, + 32361 - 19968: jis0208<<14 | 0x44<<7 | 0x49, + 32362 - 19968: jis0208<<14 | 0x44<<7 | 0x48, + 32363 - 19968: jis0212<<14 | 0x33<<7 | 0x39, + 32365 - 19968: jis0208<<14 | 0x2A<<7 | 0x59, + 32366 - 19968: jis0212<<14 | 0x33<<7 | 0x3A, + 32367 - 19968: jis0212<<14 | 0x33<<7 | 0x3B, + 32368 - 19968: jis0208<<14 | 0x16<<7 | 0x0A, + 32371 - 19968: jis0212<<14 | 0x33<<7 | 0x3C, + 32376 - 19968: jis0212<<14 | 0x33<<7 | 0x3D, + 32377 - 19968: jis0208<<14 | 0x44<<7 | 0x47, + 32379 - 19968: jis0208<<14 | 0x44<<7 | 0x4B, + 32380 - 19968: jis0208<<14 | 0x44<<7 | 0x4A, + 32381 - 19968: jis0208<<14 | 0x44<<7 | 0x4E, + 32382 - 19968: jis0212<<14 | 0x33<<7 | 0x3E, + 32383 - 19968: jis0208<<14 | 0x44<<7 | 0x50, + 32385 - 19968: jis0212<<14 | 0x33<<7 | 0x3F, + 32386 - 19968: jis0208<<14 | 0x1A<<7 | 0x1B, + 32387 - 19968: jis0208<<14 | 0x44<<7 | 0x4C, + 32390 - 19968: jis0212<<14 | 0x33<<7 | 0x40, + 32391 - 19968: jis0212<<14 | 0x33<<7 | 0x41, + 32392 - 19968: jis0208<<14 | 0x44<<7 | 0x51, + 32393 - 19968: jis0208<<14 | 0x44<<7 | 0x52, + 32394 - 19968: jis0208<<14 | 0x58<<7 | 0x00, + 32396 - 19968: jis0208<<14 | 0x44<<7 | 0x53, + 32397 - 19968: jis0212<<14 | 0x33<<7 | 0x43, + 32398 - 19968: jis0208<<14 | 0x44<<7 | 0x59, + 32399 - 19968: jis0208<<14 | 0x24<<7 | 0x1A, + 32400 - 19968: jis0208<<14 | 0x44<<7 | 0x55, + 32401 - 19968: jis0212<<14 | 0x33<<7 | 0x44, + 32402 - 19968: jis0208<<14 | 0x44<<7 | 0x54, + 32403 - 19968: jis0208<<14 | 0x44<<7 | 0x56, + 32404 - 19968: jis0208<<14 | 0x44<<7 | 0x57, + 32405 - 19968: jis0212<<14 | 0x33<<7 | 0x45, + 32406 - 19968: jis0208<<14 | 0x44<<7 | 0x58, + 32408 - 19968: jis0212<<14 | 0x33<<7 | 0x46, + 32410 - 19968: jis0212<<14 | 0x33<<7 | 0x47, + 32411 - 19968: jis0208<<14 | 0x44<<7 | 0x5A, + 32412 - 19968: jis0208<<14 | 0x44<<7 | 0x5B, + 32413 - 19968: jis0212<<14 | 0x33<<7 | 0x48, + 32414 - 19968: jis0212<<14 | 0x33<<7 | 0x49, + 32566 - 19968: jis0208<<14 | 0x13<<7 | 0x2B, + 32568 - 19968: jis0208<<14 | 0x44<<7 | 0x5C, + 32570 - 19968: jis0208<<14 | 0x44<<7 | 0x5D, + 32571 - 19968: jis0212<<14 | 0x33<<7 | 0x4B, + 32572 - 19968: jis0212<<14 | 0x33<<7 | 0x4A, + 32573 - 19968: jis0212<<14 | 0x33<<7 | 0x4C, + 32574 - 19968: jis0212<<14 | 0x33<<7 | 0x4D, + 32575 - 19968: jis0212<<14 | 0x33<<7 | 0x4E, + 32579 - 19968: jis0212<<14 | 0x33<<7 | 0x4F, + 32580 - 19968: jis0212<<14 | 0x33<<7 | 0x50, + 32581 - 19968: jis0208<<14 | 0x45<<7 | 0x00, + 32583 - 19968: jis0208<<14 | 0x5A<<7 | 0x33, + 32588 - 19968: jis0208<<14 | 0x45<<7 | 0x01, + 32589 - 19968: jis0208<<14 | 0x45<<7 | 0x02, + 32590 - 19968: jis0208<<14 | 0x45<<7 | 0x03, + 32591 - 19968: jis0212<<14 | 0x33<<7 | 0x52, + 32592 - 19968: jis0208<<14 | 0x45<<7 | 0x04, + 32593 - 19968: jis0208<<14 | 0x45<<7 | 0x05, + 32594 - 19968: jis0212<<14 | 0x33<<7 | 0x53, + 32595 - 19968: jis0212<<14 | 0x33<<7 | 0x54, + 32596 - 19968: jis0208<<14 | 0x45<<7 | 0x07, + 32597 - 19968: jis0208<<14 | 0x45<<7 | 0x06, + 32600 - 19968: jis0208<<14 | 0x45<<7 | 0x08, + 32603 - 19968: jis0212<<14 | 0x33<<7 | 0x55, + 32604 - 19968: jis0212<<14 | 0x33<<7 | 0x56, + 32605 - 19968: jis0212<<14 | 0x33<<7 | 0x57, + 32607 - 19968: jis0208<<14 | 0x45<<7 | 0x09, + 32608 - 19968: jis0208<<14 | 0x45<<7 | 0x0A, + 32609 - 19968: jis0212<<14 | 0x33<<7 | 0x58, + 32611 - 19968: jis0212<<14 | 0x33<<7 | 0x59, + 32612 - 19968: jis0212<<14 | 0x33<<7 | 0x5A, + 32613 - 19968: jis0212<<14 | 0x33<<7 | 0x5B, + 32614 - 19968: jis0212<<14 | 0x33<<7 | 0x5C, + 32615 - 19968: jis0208<<14 | 0x45<<7 | 0x0D, + 32616 - 19968: jis0208<<14 | 0x45<<7 | 0x0B, + 32617 - 19968: jis0208<<14 | 0x45<<7 | 0x0C, + 32618 - 19968: jis0208<<14 | 0x19<<7 | 0x40, + 32619 - 19968: jis0208<<14 | 0x16<<7 | 0x32, + 32621 - 19968: jis0212<<14 | 0x33<<7 | 0x5D, + 32622 - 19968: jis0208<<14 | 0x22<<7 | 0x35, + 32624 - 19968: jis0208<<14 | 0x27<<7 | 0x12, + 32625 - 19968: jis0212<<14 | 0x34<<7 | 0x00, + 32626 - 19968: jis0208<<14 | 0x1C<<7 | 0x4F, + 32629 - 19968: jis0208<<14 | 0x26<<7 | 0x2C, + 32631 - 19968: jis0208<<14 | 0x27<<7 | 0x4C, + 32632 - 19968: jis0208<<14 | 0x45<<7 | 0x0E, + 32633 - 19968: jis0208<<14 | 0x37<<7 | 0x4C, + 32637 - 19968: jis0212<<14 | 0x34<<7 | 0x01, + 32638 - 19968: jis0212<<14 | 0x34<<7 | 0x02, + 32639 - 19968: jis0212<<14 | 0x34<<7 | 0x03, + 32640 - 19968: jis0212<<14 | 0x34<<7 | 0x04, + 32642 - 19968: jis0208<<14 | 0x45<<7 | 0x0F, + 32643 - 19968: jis0208<<14 | 0x45<<7 | 0x11, + 32645 - 19968: jis0208<<14 | 0x2C<<7 | 0x44, + 32646 - 19968: jis0208<<14 | 0x45<<7 | 0x10, + 32647 - 19968: jis0208<<14 | 0x45<<7 | 0x13, + 32648 - 19968: jis0208<<14 | 0x45<<7 | 0x12, + 32650 - 19968: jis0208<<14 | 0x2C<<7 | 0x32, + 32651 - 19968: jis0212<<14 | 0x34<<7 | 0x05, + 32652 - 19968: jis0208<<14 | 0x45<<7 | 0x14, + 32653 - 19968: jis0212<<14 | 0x34<<7 | 0x06, + 32654 - 19968: jis0208<<14 | 0x27<<7 | 0x5D, + 32655 - 19968: jis0212<<14 | 0x34<<7 | 0x07, + 32656 - 19968: jis0212<<14 | 0x34<<7 | 0x08, + 32657 - 19968: jis0212<<14 | 0x34<<7 | 0x09, + 32660 - 19968: jis0208<<14 | 0x45<<7 | 0x15, + 32662 - 19968: jis0212<<14 | 0x34<<7 | 0x0A, + 32663 - 19968: jis0212<<14 | 0x34<<7 | 0x0B, + 32666 - 19968: jis0208<<14 | 0x45<<7 | 0x18, + 32668 - 19968: jis0212<<14 | 0x34<<7 | 0x0C, + 32669 - 19968: jis0208<<14 | 0x45<<7 | 0x17, + 32670 - 19968: jis0208<<14 | 0x45<<7 | 0x16, + 32673 - 19968: jis0208<<14 | 0x5A<<7 | 0x34, + 32674 - 19968: jis0212<<14 | 0x34<<7 | 0x0E, + 32675 - 19968: jis0208<<14 | 0x45<<7 | 0x19, + 32676 - 19968: jis0208<<14 | 0x16<<7 | 0x11, + 32678 - 19968: jis0212<<14 | 0x34<<7 | 0x0F, + 32680 - 19968: jis0208<<14 | 0x20<<7 | 0x01, + 32681 - 19968: jis0208<<14 | 0x14<<7 | 0x20, + 32682 - 19968: jis0212<<14 | 0x34<<7 | 0x10, + 32685 - 19968: jis0212<<14 | 0x34<<7 | 0x11, + 32686 - 19968: jis0208<<14 | 0x45<<7 | 0x1D, + 32687 - 19968: jis0208<<14 | 0x45<<7 | 0x1A, + 32690 - 19968: jis0208<<14 | 0x45<<7 | 0x1B, + 32692 - 19968: jis0212<<14 | 0x34<<7 | 0x12, + 32694 - 19968: jis0208<<14 | 0x45<<7 | 0x1E, + 32696 - 19968: jis0208<<14 | 0x45<<7 | 0x1F, + 32697 - 19968: jis0208<<14 | 0x45<<7 | 0x1C, + 32700 - 19968: jis0212<<14 | 0x34<<7 | 0x13, + 32701 - 19968: jis0208<<14 | 0x10<<7 | 0x08, + 32703 - 19968: jis0212<<14 | 0x34<<7 | 0x14, + 32704 - 19968: jis0212<<14 | 0x34<<7 | 0x15, + 32705 - 19968: jis0208<<14 | 0x11<<7 | 0x06, + 32707 - 19968: jis0212<<14 | 0x34<<7 | 0x16, + 32709 - 19968: jis0208<<14 | 0x45<<7 | 0x21, + 32710 - 19968: jis0208<<14 | 0x45<<7 | 0x22, + 32712 - 19968: jis0212<<14 | 0x34<<7 | 0x17, + 32714 - 19968: jis0208<<14 | 0x45<<7 | 0x23, + 32716 - 19968: jis0208<<14 | 0x2C<<7 | 0x41, + 32718 - 19968: jis0212<<14 | 0x34<<7 | 0x18, + 32719 - 19968: jis0212<<14 | 0x34<<7 | 0x19, + 32722 - 19968: jis0208<<14 | 0x1C<<7 | 0x0B, + 32724 - 19968: jis0208<<14 | 0x45<<7 | 0x25, + 32725 - 19968: jis0208<<14 | 0x45<<7 | 0x24, + 32731 - 19968: jis0212<<14 | 0x34<<7 | 0x1A, + 32735 - 19968: jis0212<<14 | 0x34<<7 | 0x1B, + 32736 - 19968: jis0208<<14 | 0x1E<<7 | 0x48, + 32737 - 19968: jis0208<<14 | 0x45<<7 | 0x26, + 32739 - 19968: jis0212<<14 | 0x34<<7 | 0x1C, + 32741 - 19968: jis0212<<14 | 0x34<<7 | 0x1D, + 32742 - 19968: jis0208<<14 | 0x45<<7 | 0x27, + 32744 - 19968: jis0212<<14 | 0x34<<7 | 0x1E, + 32745 - 19968: jis0208<<14 | 0x45<<7 | 0x28, + 32747 - 19968: jis0208<<14 | 0x13<<7 | 0x44, + 32748 - 19968: jis0212<<14 | 0x34<<7 | 0x1F, + 32750 - 19968: jis0212<<14 | 0x34<<7 | 0x20, + 32751 - 19968: jis0212<<14 | 0x34<<7 | 0x21, + 32752 - 19968: jis0208<<14 | 0x13<<7 | 0x2C, + 32754 - 19968: jis0212<<14 | 0x34<<7 | 0x22, + 32755 - 19968: jis0208<<14 | 0x45<<7 | 0x29, + 32761 - 19968: jis0208<<14 | 0x45<<7 | 0x2A, + 32762 - 19968: jis0212<<14 | 0x34<<7 | 0x23, + 32763 - 19968: jis0208<<14 | 0x2A<<7 | 0x3C, + 32764 - 19968: jis0208<<14 | 0x2C<<7 | 0x42, + 32765 - 19968: jis0212<<14 | 0x34<<7 | 0x24, + 32766 - 19968: jis0212<<14 | 0x34<<7 | 0x25, + 32767 - 19968: jis0212<<14 | 0x34<<7 | 0x26, + 32768 - 19968: jis0208<<14 | 0x2C<<7 | 0x33, + 32769 - 19968: jis0208<<14 | 0x2E<<7 | 0x16, + 32771 - 19968: jis0208<<14 | 0x18<<7 | 0x2C, + 32772 - 19968: jis0208<<14 | 0x45<<7 | 0x2D, + 32773 - 19968: jis0208<<14 | 0x1B<<7 | 0x33, + 32774 - 19968: jis0208<<14 | 0x45<<7 | 0x2C, + 32775 - 19968: jis0212<<14 | 0x34<<7 | 0x27, + 32776 - 19968: jis0212<<14 | 0x34<<7 | 0x28, + 32778 - 19968: jis0212<<14 | 0x34<<7 | 0x29, + 32779 - 19968: jis0208<<14 | 0x45<<7 | 0x2E, + 32780 - 19968: jis0208<<14 | 0x1B<<7 | 0x08, + 32781 - 19968: jis0212<<14 | 0x34<<7 | 0x2A, + 32782 - 19968: jis0212<<14 | 0x34<<7 | 0x2B, + 32783 - 19968: jis0212<<14 | 0x34<<7 | 0x2C, + 32784 - 19968: jis0208<<14 | 0x21<<7 | 0x30, + 32785 - 19968: jis0212<<14 | 0x34<<7 | 0x2D, + 32786 - 19968: jis0208<<14 | 0x45<<7 | 0x2F, + 32787 - 19968: jis0212<<14 | 0x34<<7 | 0x2E, + 32788 - 19968: jis0212<<14 | 0x34<<7 | 0x2F, + 32789 - 19968: jis0208<<14 | 0x18<<7 | 0x2B, + 32790 - 19968: jis0212<<14 | 0x34<<7 | 0x30, + 32791 - 19968: jis0208<<14 | 0x2B<<7 | 0x36, + 32792 - 19968: jis0208<<14 | 0x45<<7 | 0x30, + 32793 - 19968: jis0208<<14 | 0x45<<7 | 0x31, + 32796 - 19968: jis0208<<14 | 0x45<<7 | 0x32, + 32797 - 19968: jis0212<<14 | 0x34<<7 | 0x31, + 32798 - 19968: jis0212<<14 | 0x34<<7 | 0x32, + 32799 - 19968: jis0212<<14 | 0x34<<7 | 0x33, + 32800 - 19968: jis0212<<14 | 0x34<<7 | 0x34, + 32801 - 19968: jis0208<<14 | 0x45<<7 | 0x33, + 32804 - 19968: jis0212<<14 | 0x34<<7 | 0x35, + 32806 - 19968: jis0212<<14 | 0x34<<7 | 0x36, + 32808 - 19968: jis0208<<14 | 0x45<<7 | 0x34, + 32812 - 19968: jis0212<<14 | 0x34<<7 | 0x37, + 32814 - 19968: jis0212<<14 | 0x34<<7 | 0x38, + 32816 - 19968: jis0212<<14 | 0x34<<7 | 0x39, + 32819 - 19968: jis0208<<14 | 0x1B<<7 | 0x09, + 32820 - 19968: jis0212<<14 | 0x34<<7 | 0x3A, + 32821 - 19968: jis0212<<14 | 0x34<<7 | 0x3B, + 32822 - 19968: jis0208<<14 | 0x2B<<7 | 0x4C, + 32823 - 19968: jis0212<<14 | 0x34<<7 | 0x3C, + 32825 - 19968: jis0212<<14 | 0x34<<7 | 0x3D, + 32826 - 19968: jis0212<<14 | 0x34<<7 | 0x3E, + 32827 - 19968: jis0208<<14 | 0x45<<7 | 0x36, + 32828 - 19968: jis0212<<14 | 0x34<<7 | 0x3F, + 32829 - 19968: jis0208<<14 | 0x22<<7 | 0x1E, + 32830 - 19968: jis0212<<14 | 0x34<<7 | 0x40, + 32831 - 19968: jis0208<<14 | 0x45<<7 | 0x35, + 32832 - 19968: jis0212<<14 | 0x34<<7 | 0x41, + 32836 - 19968: jis0212<<14 | 0x34<<7 | 0x42, + 32838 - 19968: jis0208<<14 | 0x45<<7 | 0x38, + 32842 - 19968: jis0208<<14 | 0x45<<7 | 0x37, + 32850 - 19968: jis0208<<14 | 0x45<<7 | 0x39, + 32854 - 19968: jis0208<<14 | 0x1F<<7 | 0x1A, + 32856 - 19968: jis0208<<14 | 0x45<<7 | 0x3A, + 32858 - 19968: jis0208<<14 | 0x45<<7 | 0x3B, + 32862 - 19968: jis0208<<14 | 0x29<<7 | 0x18, + 32863 - 19968: jis0208<<14 | 0x45<<7 | 0x3C, + 32864 - 19968: jis0212<<14 | 0x34<<7 | 0x43, + 32865 - 19968: jis0208<<14 | 0x20<<7 | 0x4E, + 32866 - 19968: jis0208<<14 | 0x45<<7 | 0x3D, + 32868 - 19968: jis0212<<14 | 0x34<<7 | 0x44, + 32870 - 19968: jis0212<<14 | 0x34<<7 | 0x45, + 32872 - 19968: jis0208<<14 | 0x45<<7 | 0x3E, + 32877 - 19968: jis0212<<14 | 0x34<<7 | 0x46, + 32879 - 19968: jis0208<<14 | 0x2D<<7 | 0x5D, + 32880 - 19968: jis0208<<14 | 0x45<<7 | 0x41, + 32881 - 19968: jis0212<<14 | 0x34<<7 | 0x47, + 32882 - 19968: jis0208<<14 | 0x45<<7 | 0x40, + 32883 - 19968: jis0208<<14 | 0x45<<7 | 0x3F, + 32884 - 19968: jis0208<<14 | 0x23<<7 | 0x0F, + 32885 - 19968: jis0212<<14 | 0x34<<7 | 0x48, + 32886 - 19968: jis0208<<14 | 0x45<<7 | 0x42, + 32887 - 19968: jis0208<<14 | 0x1E<<7 | 0x05, + 32889 - 19968: jis0208<<14 | 0x45<<7 | 0x43, + 32893 - 19968: jis0208<<14 | 0x45<<7 | 0x44, + 32894 - 19968: jis0208<<14 | 0x2E<<7 | 0x17, + 32895 - 19968: jis0208<<14 | 0x45<<7 | 0x45, + 32897 - 19968: jis0212<<14 | 0x34<<7 | 0x49, + 32900 - 19968: jis0208<<14 | 0x45<<7 | 0x46, + 32901 - 19968: jis0208<<14 | 0x45<<7 | 0x48, + 32902 - 19968: jis0208<<14 | 0x45<<7 | 0x47, + 32903 - 19968: jis0208<<14 | 0x27<<7 | 0x04, + 32904 - 19968: jis0212<<14 | 0x34<<7 | 0x4A, + 32905 - 19968: jis0208<<14 | 0x25<<7 | 0x58, + 32907 - 19968: jis0208<<14 | 0x2E<<7 | 0x1D, + 32908 - 19968: jis0208<<14 | 0x27<<7 | 0x08, + 32910 - 19968: jis0212<<14 | 0x34<<7 | 0x4B, + 32915 - 19968: jis0208<<14 | 0x45<<7 | 0x4A, + 32918 - 19968: jis0208<<14 | 0x1D<<7 | 0x32, + 32920 - 19968: jis0208<<14 | 0x28<<7 | 0x09, + 32922 - 19968: jis0208<<14 | 0x45<<7 | 0x4B, + 32923 - 19968: jis0208<<14 | 0x45<<7 | 0x49, + 32924 - 19968: jis0212<<14 | 0x34<<7 | 0x4C, + 32925 - 19968: jis0208<<14 | 0x13<<7 | 0x2D, + 32926 - 19968: jis0212<<14 | 0x34<<7 | 0x4D, + 32929 - 19968: jis0208<<14 | 0x17<<7 | 0x33, + 32930 - 19968: jis0208<<14 | 0x1A<<7 | 0x47, + 32933 - 19968: jis0208<<14 | 0x27<<7 | 0x4D, + 32934 - 19968: jis0212<<14 | 0x34<<7 | 0x4E, + 32935 - 19968: jis0212<<14 | 0x34<<7 | 0x4F, + 32937 - 19968: jis0208<<14 | 0x17<<7 | 0x09, + 32938 - 19968: jis0208<<14 | 0x2A<<7 | 0x22, + 32939 - 19968: jis0212<<14 | 0x34<<7 | 0x50, + 32940 - 19968: jis0208<<14 | 0x45<<7 | 0x4E, + 32941 - 19968: jis0208<<14 | 0x45<<7 | 0x4C, + 32943 - 19968: jis0208<<14 | 0x18<<7 | 0x2D, + 32945 - 19968: jis0208<<14 | 0x18<<7 | 0x2E, + 32946 - 19968: jis0208<<14 | 0x0F<<7 | 0x48, + 32948 - 19968: jis0208<<14 | 0x19<<7 | 0x47, + 32952 - 19968: jis0212<<14 | 0x34<<7 | 0x51, + 32953 - 19968: jis0212<<14 | 0x34<<7 | 0x52, + 32954 - 19968: jis0208<<14 | 0x26<<7 | 0x38, + 32963 - 19968: jis0208<<14 | 0x0F<<7 | 0x3E, + 32964 - 19968: jis0208<<14 | 0x45<<7 | 0x53, + 32966 - 19968: jis0208<<14 | 0x22<<7 | 0x1F, + 32968 - 19968: jis0212<<14 | 0x34<<7 | 0x53, + 32972 - 19968: jis0208<<14 | 0x26<<7 | 0x37, + 32973 - 19968: jis0212<<14 | 0x34<<7 | 0x54, + 32974 - 19968: jis0208<<14 | 0x21<<7 | 0x3A, + 32975 - 19968: jis0212<<14 | 0x34<<7 | 0x55, + 32978 - 19968: jis0212<<14 | 0x34<<7 | 0x56, + 32980 - 19968: jis0212<<14 | 0x34<<7 | 0x57, + 32981 - 19968: jis0212<<14 | 0x34<<7 | 0x58, + 32982 - 19968: jis0208<<14 | 0x45<<7 | 0x55, + 32983 - 19968: jis0212<<14 | 0x34<<7 | 0x59, + 32984 - 19968: jis0212<<14 | 0x34<<7 | 0x5A, + 32985 - 19968: jis0208<<14 | 0x45<<7 | 0x51, + 32986 - 19968: jis0208<<14 | 0x45<<7 | 0x54, + 32987 - 19968: jis0208<<14 | 0x45<<7 | 0x4F, + 32989 - 19968: jis0208<<14 | 0x45<<7 | 0x52, + 32990 - 19968: jis0208<<14 | 0x2A<<7 | 0x05, + 32992 - 19968: jis0212<<14 | 0x34<<7 | 0x5B, + 32993 - 19968: jis0208<<14 | 0x17<<7 | 0x34, + 32996 - 19968: jis0208<<14 | 0x0F<<7 | 0x5C, + 32997 - 19968: jis0208<<14 | 0x45<<7 | 0x50, + 33005 - 19968: jis0212<<14 | 0x34<<7 | 0x5C, + 33006 - 19968: jis0212<<14 | 0x34<<7 | 0x5D, + 33007 - 19968: jis0208<<14 | 0x45<<7 | 0x57, + 33008 - 19968: jis0212<<14 | 0x35<<7 | 0x00, + 33009 - 19968: jis0208<<14 | 0x45<<7 | 0x58, + 33010 - 19968: jis0212<<14 | 0x35<<7 | 0x01, + 33011 - 19968: jis0212<<14 | 0x35<<7 | 0x02, + 33012 - 19968: jis0208<<14 | 0x25<<7 | 0x18, + 33014 - 19968: jis0212<<14 | 0x35<<7 | 0x03, + 33016 - 19968: jis0208<<14 | 0x15<<7 | 0x1A, + 33017 - 19968: jis0212<<14 | 0x35<<7 | 0x04, + 33018 - 19968: jis0212<<14 | 0x35<<7 | 0x05, + 33020 - 19968: jis0208<<14 | 0x46<<7 | 0x05, + 33021 - 19968: jis0208<<14 | 0x26<<7 | 0x1C, + 33022 - 19968: jis0212<<14 | 0x35<<7 | 0x06, + 33026 - 19968: jis0208<<14 | 0x1A<<7 | 0x48, + 33027 - 19968: jis0212<<14 | 0x35<<7 | 0x07, + 33029 - 19968: jis0208<<14 | 0x15<<7 | 0x1B, + 33030 - 19968: jis0208<<14 | 0x1F<<7 | 0x27, + 33031 - 19968: jis0208<<14 | 0x2E<<7 | 0x25, + 33032 - 19968: jis0208<<14 | 0x2B<<7 | 0x0D, + 33033 - 19968: jis0208<<14 | 0x45<<7 | 0x56, + 33034 - 19968: jis0208<<14 | 0x1F<<7 | 0x33, + 33035 - 19968: jis0212<<14 | 0x35<<7 | 0x08, + 33046 - 19968: jis0212<<14 | 0x35<<7 | 0x09, + 33047 - 19968: jis0212<<14 | 0x35<<7 | 0x0A, + 33048 - 19968: jis0212<<14 | 0x35<<7 | 0x0B, + 33050 - 19968: jis0208<<14 | 0x14<<7 | 0x32, + 33051 - 19968: jis0208<<14 | 0x45<<7 | 0x59, + 33052 - 19968: jis0212<<14 | 0x35<<7 | 0x0C, + 33054 - 19968: jis0212<<14 | 0x35<<7 | 0x0D, + 33056 - 19968: jis0212<<14 | 0x35<<7 | 0x0E, + 33059 - 19968: jis0208<<14 | 0x45<<7 | 0x5B, + 33060 - 19968: jis0212<<14 | 0x35<<7 | 0x0F, + 33063 - 19968: jis0212<<14 | 0x35<<7 | 0x10, + 33065 - 19968: jis0208<<14 | 0x45<<7 | 0x5A, + 33068 - 19968: jis0212<<14 | 0x35<<7 | 0x11, + 33071 - 19968: jis0208<<14 | 0x45<<7 | 0x5C, + 33072 - 19968: jis0212<<14 | 0x35<<7 | 0x12, + 33073 - 19968: jis0208<<14 | 0x22<<7 | 0x05, + 33075 - 19968: jis0208<<14 | 0x26<<7 | 0x1D, + 33077 - 19968: jis0212<<14 | 0x35<<7 | 0x13, + 33081 - 19968: jis0208<<14 | 0x23<<7 | 0x10, + 33082 - 19968: jis0212<<14 | 0x35<<7 | 0x14, + 33084 - 19968: jis0212<<14 | 0x35<<7 | 0x15, + 33086 - 19968: jis0208<<14 | 0x46<<7 | 0x02, + 33093 - 19968: jis0212<<14 | 0x35<<7 | 0x16, + 33094 - 19968: jis0208<<14 | 0x46<<7 | 0x01, + 33095 - 19968: jis0212<<14 | 0x35<<7 | 0x17, + 33098 - 19968: jis0212<<14 | 0x35<<7 | 0x18, + 33099 - 19968: jis0208<<14 | 0x45<<7 | 0x5D, + 33100 - 19968: jis0212<<14 | 0x35<<7 | 0x19, + 33102 - 19968: jis0208<<14 | 0x1E<<7 | 0x34, + 33104 - 19968: jis0208<<14 | 0x28<<7 | 0x44, + 33105 - 19968: jis0208<<14 | 0x46<<7 | 0x04, + 33106 - 19968: jis0212<<14 | 0x35<<7 | 0x1A, + 33107 - 19968: jis0208<<14 | 0x46<<7 | 0x03, + 33108 - 19968: jis0208<<14 | 0x18<<7 | 0x2F, + 33109 - 19968: jis0208<<14 | 0x2E<<7 | 0x32, + 33111 - 19968: jis0212<<14 | 0x35<<7 | 0x1B, + 33119 - 19968: jis0208<<14 | 0x46<<7 | 0x14, + 33120 - 19968: jis0212<<14 | 0x35<<7 | 0x1C, + 33121 - 19968: jis0212<<14 | 0x35<<7 | 0x1D, + 33125 - 19968: jis0208<<14 | 0x46<<7 | 0x08, + 33126 - 19968: jis0208<<14 | 0x46<<7 | 0x09, + 33127 - 19968: jis0212<<14 | 0x35<<7 | 0x1E, + 33128 - 19968: jis0212<<14 | 0x35<<7 | 0x1F, + 33129 - 19968: jis0212<<14 | 0x35<<7 | 0x20, + 33131 - 19968: jis0208<<14 | 0x1B<<7 | 0x4F, + 33133 - 19968: jis0212<<14 | 0x35<<7 | 0x21, + 33134 - 19968: jis0208<<14 | 0x46<<7 | 0x07, + 33135 - 19968: jis0212<<14 | 0x35<<7 | 0x22, + 33136 - 19968: jis0208<<14 | 0x18<<7 | 0x57, + 33137 - 19968: jis0208<<14 | 0x46<<7 | 0x06, + 33140 - 19968: jis0208<<14 | 0x46<<7 | 0x0A, + 33143 - 19968: jis0212<<14 | 0x35<<7 | 0x23, + 33144 - 19968: jis0208<<14 | 0x23<<7 | 0x11, + 33145 - 19968: jis0208<<14 | 0x29<<7 | 0x01, + 33146 - 19968: jis0208<<14 | 0x20<<7 | 0x02, + 33151 - 19968: jis0208<<14 | 0x21<<7 | 0x3B, + 33152 - 19968: jis0208<<14 | 0x46<<7 | 0x0E, + 33153 - 19968: jis0212<<14 | 0x35<<7 | 0x24, + 33154 - 19968: jis0208<<14 | 0x46<<7 | 0x0F, + 33155 - 19968: jis0208<<14 | 0x46<<7 | 0x0B, + 33156 - 19968: jis0212<<14 | 0x35<<7 | 0x26, + 33157 - 19968: jis0212<<14 | 0x35<<7 | 0x27, + 33158 - 19968: jis0212<<14 | 0x35<<7 | 0x28, + 33160 - 19968: jis0208<<14 | 0x46<<7 | 0x0C, + 33162 - 19968: jis0208<<14 | 0x46<<7 | 0x0D, + 33163 - 19968: jis0212<<14 | 0x35<<7 | 0x29, + 33166 - 19968: jis0212<<14 | 0x35<<7 | 0x2A, + 33167 - 19968: jis0208<<14 | 0x18<<7 | 0x30, + 33168 - 19968: jis0212<<14 | 0x35<<7 | 0x25, + 33171 - 19968: jis0208<<14 | 0x46<<7 | 0x15, + 33173 - 19968: jis0208<<14 | 0x46<<7 | 0x11, + 33174 - 19968: jis0212<<14 | 0x35<<7 | 0x2B, + 33176 - 19968: jis0212<<14 | 0x35<<7 | 0x2C, + 33178 - 19968: jis0208<<14 | 0x28<<7 | 0x45, + 33179 - 19968: jis0212<<14 | 0x35<<7 | 0x2D, + 33180 - 19968: jis0208<<14 | 0x2A<<7 | 0x4B, + 33181 - 19968: jis0208<<14 | 0x28<<7 | 0x07, + 33182 - 19968: jis0212<<14 | 0x35<<7 | 0x2E, + 33184 - 19968: jis0208<<14 | 0x46<<7 | 0x10, + 33186 - 19968: jis0212<<14 | 0x35<<7 | 0x2F, + 33187 - 19968: jis0208<<14 | 0x46<<7 | 0x13, + 33188 - 19968: jis0208<<14 | 0x46<<7 | 0x12, + 33192 - 19968: jis0208<<14 | 0x2A<<7 | 0x23, + 33193 - 19968: jis0208<<14 | 0x46<<7 | 0x16, + 33198 - 19968: jis0212<<14 | 0x35<<7 | 0x30, + 33200 - 19968: jis0208<<14 | 0x46<<7 | 0x17, + 33202 - 19968: jis0212<<14 | 0x35<<7 | 0x31, + 33203 - 19968: jis0208<<14 | 0x20<<7 | 0x16, + 33204 - 19968: jis0212<<14 | 0x35<<7 | 0x32, + 33205 - 19968: jis0208<<14 | 0x46<<7 | 0x18, + 33208 - 19968: jis0208<<14 | 0x46<<7 | 0x1A, + 33210 - 19968: jis0208<<14 | 0x46<<7 | 0x1E, + 33211 - 19968: jis0212<<14 | 0x35<<7 | 0x33, + 33213 - 19968: jis0208<<14 | 0x46<<7 | 0x1B, + 33214 - 19968: jis0208<<14 | 0x46<<7 | 0x19, + 33215 - 19968: jis0208<<14 | 0x26<<7 | 0x1E, + 33216 - 19968: jis0208<<14 | 0x46<<7 | 0x1C, + 33218 - 19968: jis0208<<14 | 0x46<<7 | 0x1D, + 33219 - 19968: jis0212<<14 | 0x35<<7 | 0x35, + 33221 - 19968: jis0212<<14 | 0x35<<7 | 0x36, + 33222 - 19968: jis0208<<14 | 0x11<<7 | 0x11, + 33224 - 19968: jis0208<<14 | 0x46<<7 | 0x24, + 33225 - 19968: jis0208<<14 | 0x46<<7 | 0x1F, + 33226 - 19968: jis0212<<14 | 0x35<<7 | 0x37, + 33227 - 19968: jis0212<<14 | 0x35<<7 | 0x34, + 33229 - 19968: jis0208<<14 | 0x46<<7 | 0x20, + 33230 - 19968: jis0212<<14 | 0x35<<7 | 0x38, + 33231 - 19968: jis0212<<14 | 0x35<<7 | 0x39, + 33233 - 19968: jis0208<<14 | 0x46<<7 | 0x21, + 33235 - 19968: jis0208<<14 | 0x21<<7 | 0x00, + 33237 - 19968: jis0212<<14 | 0x35<<7 | 0x3A, + 33239 - 19968: jis0212<<14 | 0x35<<7 | 0x3B, + 33240 - 19968: jis0208<<14 | 0x46<<7 | 0x23, + 33241 - 19968: jis0208<<14 | 0x46<<7 | 0x22, + 33242 - 19968: jis0208<<14 | 0x46<<7 | 0x25, + 33243 - 19968: jis0212<<14 | 0x35<<7 | 0x3C, + 33245 - 19968: jis0212<<14 | 0x35<<7 | 0x3D, + 33246 - 19968: jis0212<<14 | 0x35<<7 | 0x3E, + 33247 - 19968: jis0208<<14 | 0x46<<7 | 0x26, + 33248 - 19968: jis0208<<14 | 0x46<<7 | 0x27, + 33249 - 19968: jis0212<<14 | 0x35<<7 | 0x3F, + 33251 - 19968: jis0208<<14 | 0x1E<<7 | 0x22, + 33252 - 19968: jis0212<<14 | 0x35<<7 | 0x40, + 33253 - 19968: jis0208<<14 | 0x11<<7 | 0x48, + 33255 - 19968: jis0208<<14 | 0x46<<7 | 0x28, + 33256 - 19968: jis0208<<14 | 0x2D<<7 | 0x36, + 33258 - 19968: jis0208<<14 | 0x1B<<7 | 0x0A, + 33259 - 19968: jis0212<<14 | 0x35<<7 | 0x41, + 33260 - 19968: jis0212<<14 | 0x35<<7 | 0x42, + 33261 - 19968: jis0208<<14 | 0x1C<<7 | 0x0C, + 33264 - 19968: jis0212<<14 | 0x35<<7 | 0x43, + 33265 - 19968: jis0212<<14 | 0x35<<7 | 0x44, + 33266 - 19968: jis0212<<14 | 0x35<<7 | 0x45, + 33267 - 19968: jis0208<<14 | 0x1A<<7 | 0x49, + 33268 - 19968: jis0208<<14 | 0x22<<7 | 0x36, + 33269 - 19968: jis0212<<14 | 0x35<<7 | 0x46, + 33270 - 19968: jis0212<<14 | 0x35<<7 | 0x47, + 33272 - 19968: jis0212<<14 | 0x35<<7 | 0x48, + 33273 - 19968: jis0212<<14 | 0x35<<7 | 0x49, + 33274 - 19968: jis0208<<14 | 0x46<<7 | 0x29, + 33275 - 19968: jis0208<<14 | 0x46<<7 | 0x2A, + 33276 - 19968: jis0208<<14 | 0x10<<7 | 0x10, + 33277 - 19968: jis0212<<14 | 0x35<<7 | 0x4A, + 33278 - 19968: jis0208<<14 | 0x46<<7 | 0x2B, + 33279 - 19968: jis0212<<14 | 0x35<<7 | 0x4B, + 33280 - 19968: jis0212<<14 | 0x35<<7 | 0x4C, + 33281 - 19968: jis0208<<14 | 0x46<<7 | 0x2C, + 33282 - 19968: jis0208<<14 | 0x46<<7 | 0x2D, + 33283 - 19968: jis0212<<14 | 0x35<<7 | 0x4D, + 33285 - 19968: jis0208<<14 | 0x46<<7 | 0x2E, + 33287 - 19968: jis0208<<14 | 0x46<<7 | 0x2F, + 33288 - 19968: jis0208<<14 | 0x15<<7 | 0x1C, + 33289 - 19968: jis0208<<14 | 0x39<<7 | 0x09, + 33290 - 19968: jis0208<<14 | 0x46<<7 | 0x30, + 33292 - 19968: jis0208<<14 | 0x1F<<7 | 0x44, + 33293 - 19968: jis0208<<14 | 0x46<<7 | 0x31, + 33294 - 19968: jis0208<<14 | 0x1B<<7 | 0x2A, + 33295 - 19968: jis0212<<14 | 0x35<<7 | 0x4E, + 33296 - 19968: jis0208<<14 | 0x46<<7 | 0x32, + 33298 - 19968: jis0208<<14 | 0x2F<<7 | 0x0F, + 33299 - 19968: jis0212<<14 | 0x35<<7 | 0x4F, + 33300 - 19968: jis0212<<14 | 0x35<<7 | 0x50, + 33302 - 19968: jis0208<<14 | 0x46<<7 | 0x33, + 33303 - 19968: jis0208<<14 | 0x29<<7 | 0x3D, + 33304 - 19968: jis0208<<14 | 0x13<<7 | 0x3B, + 33305 - 19968: jis0212<<14 | 0x35<<7 | 0x51, + 33306 - 19968: jis0212<<14 | 0x35<<7 | 0x52, + 33307 - 19968: jis0208<<14 | 0x20<<7 | 0x03, + 33308 - 19968: jis0208<<14 | 0x1C<<7 | 0x37, + 33309 - 19968: jis0212<<14 | 0x35<<7 | 0x53, + 33310 - 19968: jis0208<<14 | 0x28<<7 | 0x50, + 33311 - 19968: jis0208<<14 | 0x1C<<7 | 0x0D, + 33313 - 19968: jis0212<<14 | 0x35<<7 | 0x54, + 33314 - 19968: jis0212<<14 | 0x35<<7 | 0x55, + 33320 - 19968: jis0212<<14 | 0x35<<7 | 0x56, + 33321 - 19968: jis0208<<14 | 0x46<<7 | 0x34, + 33322 - 19968: jis0208<<14 | 0x18<<7 | 0x31, + 33323 - 19968: jis0208<<14 | 0x46<<7 | 0x35, + 33324 - 19968: jis0208<<14 | 0x27<<7 | 0x2B, + 33326 - 19968: jis0208<<14 | 0x46<<7 | 0x43, + 33330 - 19968: jis0212<<14 | 0x35<<7 | 0x57, + 33331 - 19968: jis0208<<14 | 0x46<<7 | 0x37, + 33332 - 19968: jis0212<<14 | 0x35<<7 | 0x58, + 33333 - 19968: jis0208<<14 | 0x21<<7 | 0x28, + 33334 - 19968: jis0208<<14 | 0x26<<7 | 0x54, + 33335 - 19968: jis0208<<14 | 0x17<<7 | 0x1E, + 33336 - 19968: jis0208<<14 | 0x46<<7 | 0x36, + 33337 - 19968: jis0208<<14 | 0x20<<7 | 0x04, + 33338 - 19968: jis0212<<14 | 0x35<<7 | 0x59, + 33344 - 19968: jis0208<<14 | 0x46<<7 | 0x38, + 33347 - 19968: jis0212<<14 | 0x35<<7 | 0x5A, + 33348 - 19968: jis0212<<14 | 0x35<<7 | 0x5B, + 33349 - 19968: jis0212<<14 | 0x35<<7 | 0x5C, + 33350 - 19968: jis0212<<14 | 0x35<<7 | 0x5D, + 33351 - 19968: jis0208<<14 | 0x23<<7 | 0x59, + 33355 - 19968: jis0212<<14 | 0x36<<7 | 0x00, + 33358 - 19968: jis0212<<14 | 0x36<<7 | 0x01, + 33359 - 19968: jis0212<<14 | 0x36<<7 | 0x02, + 33361 - 19968: jis0212<<14 | 0x36<<7 | 0x03, + 33366 - 19968: jis0212<<14 | 0x36<<7 | 0x04, + 33368 - 19968: jis0208<<14 | 0x46<<7 | 0x3A, + 33369 - 19968: jis0208<<14 | 0x46<<7 | 0x39, + 33370 - 19968: jis0208<<14 | 0x46<<7 | 0x3C, + 33372 - 19968: jis0212<<14 | 0x36<<7 | 0x05, + 33373 - 19968: jis0208<<14 | 0x46<<7 | 0x3B, + 33375 - 19968: jis0208<<14 | 0x46<<7 | 0x3D, + 33376 - 19968: jis0212<<14 | 0x36<<7 | 0x06, + 33378 - 19968: jis0208<<14 | 0x46<<7 | 0x3F, + 33379 - 19968: jis0212<<14 | 0x36<<7 | 0x07, + 33380 - 19968: jis0208<<14 | 0x46<<7 | 0x3E, + 33382 - 19968: jis0208<<14 | 0x13<<7 | 0x2E, + 33383 - 19968: jis0212<<14 | 0x36<<7 | 0x08, + 33384 - 19968: jis0208<<14 | 0x46<<7 | 0x40, + 33386 - 19968: jis0208<<14 | 0x46<<7 | 0x41, + 33387 - 19968: jis0208<<14 | 0x46<<7 | 0x42, + 33389 - 19968: jis0212<<14 | 0x36<<7 | 0x09, + 33390 - 19968: jis0208<<14 | 0x19<<7 | 0x10, + 33391 - 19968: jis0208<<14 | 0x2D<<7 | 0x28, + 33393 - 19968: jis0208<<14 | 0x46<<7 | 0x44, + 33394 - 19968: jis0208<<14 | 0x1E<<7 | 0x06, + 33396 - 19968: jis0212<<14 | 0x36<<7 | 0x0A, + 33398 - 19968: jis0208<<14 | 0x10<<7 | 0x4F, + 33399 - 19968: jis0208<<14 | 0x46<<7 | 0x45, + 33400 - 19968: jis0208<<14 | 0x46<<7 | 0x46, + 33403 - 19968: jis0212<<14 | 0x36<<7 | 0x0B, + 33405 - 19968: jis0212<<14 | 0x36<<7 | 0x0C, + 33406 - 19968: jis0208<<14 | 0x46<<7 | 0x47, + 33407 - 19968: jis0212<<14 | 0x36<<7 | 0x0D, + 33408 - 19968: jis0212<<14 | 0x36<<7 | 0x0E, + 33409 - 19968: jis0212<<14 | 0x36<<7 | 0x0F, + 33411 - 19968: jis0212<<14 | 0x36<<7 | 0x10, + 33412 - 19968: jis0212<<14 | 0x36<<7 | 0x11, + 33415 - 19968: jis0212<<14 | 0x36<<7 | 0x12, + 33417 - 19968: jis0212<<14 | 0x36<<7 | 0x13, + 33418 - 19968: jis0212<<14 | 0x36<<7 | 0x14, + 33419 - 19968: jis0208<<14 | 0x0F<<7 | 0x51, + 33421 - 19968: jis0208<<14 | 0x46<<7 | 0x48, + 33422 - 19968: jis0212<<14 | 0x36<<7 | 0x15, + 33425 - 19968: jis0212<<14 | 0x36<<7 | 0x16, + 33426 - 19968: jis0208<<14 | 0x46<<7 | 0x49, + 33428 - 19968: jis0212<<14 | 0x36<<7 | 0x17, + 33430 - 19968: jis0212<<14 | 0x36<<7 | 0x18, + 33432 - 19968: jis0212<<14 | 0x36<<7 | 0x19, + 33433 - 19968: jis0208<<14 | 0x28<<7 | 0x46, + 33434 - 19968: jis0212<<14 | 0x36<<7 | 0x1A, + 33435 - 19968: jis0212<<14 | 0x36<<7 | 0x1B, + 33437 - 19968: jis0208<<14 | 0x1B<<7 | 0x26, + 33439 - 19968: jis0208<<14 | 0x46<<7 | 0x4B, + 33440 - 19968: jis0212<<14 | 0x36<<7 | 0x1C, + 33441 - 19968: jis0212<<14 | 0x36<<7 | 0x1D, + 33443 - 19968: jis0212<<14 | 0x36<<7 | 0x1E, + 33444 - 19968: jis0212<<14 | 0x36<<7 | 0x1F, + 33445 - 19968: jis0208<<14 | 0x12<<7 | 0x08, + 33446 - 19968: jis0208<<14 | 0x0F<<7 | 0x11, + 33447 - 19968: jis0212<<14 | 0x36<<7 | 0x20, + 33448 - 19968: jis0212<<14 | 0x36<<7 | 0x21, + 33449 - 19968: jis0212<<14 | 0x36<<7 | 0x22, + 33450 - 19968: jis0212<<14 | 0x36<<7 | 0x23, + 33451 - 19968: jis0208<<14 | 0x46<<7 | 0x4A, + 33452 - 19968: jis0208<<14 | 0x46<<7 | 0x4D, + 33453 - 19968: jis0208<<14 | 0x26<<7 | 0x2D, + 33454 - 19968: jis0212<<14 | 0x36<<7 | 0x24, + 33455 - 19968: jis0208<<14 | 0x1E<<7 | 0x23, + 33456 - 19968: jis0212<<14 | 0x36<<7 | 0x25, + 33457 - 19968: jis0208<<14 | 0x11<<7 | 0x35, + 33458 - 19968: jis0212<<14 | 0x36<<7 | 0x26, + 33459 - 19968: jis0208<<14 | 0x2A<<7 | 0x06, + 33460 - 19968: jis0212<<14 | 0x36<<7 | 0x27, + 33463 - 19968: jis0212<<14 | 0x36<<7 | 0x28, + 33464 - 19968: jis0208<<14 | 0x16<<7 | 0x3C, + 33465 - 19968: jis0208<<14 | 0x15<<7 | 0x3B, + 33466 - 19968: jis0212<<14 | 0x36<<7 | 0x29, + 33467 - 19968: jis0208<<14 | 0x46<<7 | 0x4C, + 33468 - 19968: jis0212<<14 | 0x36<<7 | 0x2A, + 33469 - 19968: jis0208<<14 | 0x11<<7 | 0x49, + 33470 - 19968: jis0212<<14 | 0x36<<7 | 0x2B, + 33471 - 19968: jis0212<<14 | 0x36<<7 | 0x2C, + 33477 - 19968: jis0208<<14 | 0x13<<7 | 0x02, + 33478 - 19968: jis0212<<14 | 0x36<<7 | 0x2D, + 33488 - 19968: jis0212<<14 | 0x36<<7 | 0x2E, + 33489 - 19968: jis0208<<14 | 0x10<<7 | 0x50, + 33490 - 19968: jis0208<<14 | 0x46<<7 | 0x51, + 33491 - 19968: jis0208<<14 | 0x2D<<7 | 0x49, + 33492 - 19968: jis0208<<14 | 0x21<<7 | 0x3C, + 33493 - 19968: jis0212<<14 | 0x36<<7 | 0x2F, + 33495 - 19968: jis0208<<14 | 0x28<<7 | 0x23, + 33497 - 19968: jis0208<<14 | 0x46<<7 | 0x5D, + 33498 - 19968: jis0212<<14 | 0x36<<7 | 0x30, + 33499 - 19968: jis0208<<14 | 0x11<<7 | 0x36, + 33500 - 19968: jis0208<<14 | 0x46<<7 | 0x5B, + 33502 - 19968: jis0208<<14 | 0x46<<7 | 0x59, + 33503 - 19968: jis0208<<14 | 0x46<<7 | 0x50, + 33504 - 19968: jis0212<<14 | 0x36<<7 | 0x31, + 33505 - 19968: jis0208<<14 | 0x46<<7 | 0x4E, + 33506 - 19968: jis0212<<14 | 0x36<<7 | 0x32, + 33507 - 19968: jis0208<<14 | 0x46<<7 | 0x4F, + 33508 - 19968: jis0212<<14 | 0x36<<7 | 0x33, + 33509 - 19968: jis0208<<14 | 0x1B<<7 | 0x42, + 33510 - 19968: jis0208<<14 | 0x15<<7 | 0x4B, + 33511 - 19968: jis0208<<14 | 0x22<<7 | 0x56, + 33512 - 19968: jis0212<<14 | 0x36<<7 | 0x34, + 33514 - 19968: jis0212<<14 | 0x36<<7 | 0x35, + 33515 - 19968: jis0208<<14 | 0x25<<7 | 0x30, + 33517 - 19968: jis0212<<14 | 0x36<<7 | 0x36, + 33519 - 19968: jis0212<<14 | 0x36<<7 | 0x37, + 33521 - 19968: jis0208<<14 | 0x10<<7 | 0x30, + 33523 - 19968: jis0208<<14 | 0x46<<7 | 0x53, + 33524 - 19968: jis0208<<14 | 0x46<<7 | 0x52, + 33526 - 19968: jis0212<<14 | 0x36<<7 | 0x38, + 33527 - 19968: jis0212<<14 | 0x36<<7 | 0x39, + 33529 - 19968: jis0208<<14 | 0x46<<7 | 0x58, + 33530 - 19968: jis0208<<14 | 0x46<<7 | 0x54, + 33531 - 19968: jis0208<<14 | 0x46<<7 | 0x57, + 33533 - 19968: jis0212<<14 | 0x36<<7 | 0x3A, + 33534 - 19968: jis0212<<14 | 0x36<<7 | 0x3B, + 33536 - 19968: jis0212<<14 | 0x36<<7 | 0x3C, + 33537 - 19968: jis0208<<14 | 0x5A<<7 | 0x36, + 33538 - 19968: jis0208<<14 | 0x2B<<7 | 0x2F, + 33539 - 19968: jis0208<<14 | 0x46<<7 | 0x56, + 33540 - 19968: jis0208<<14 | 0x11<<7 | 0x37, + 33541 - 19968: jis0208<<14 | 0x12<<7 | 0x5C, + 33542 - 19968: jis0208<<14 | 0x46<<7 | 0x5A, + 33543 - 19968: jis0212<<14 | 0x36<<7 | 0x3E, + 33544 - 19968: jis0212<<14 | 0x36<<7 | 0x3F, + 33545 - 19968: jis0208<<14 | 0x46<<7 | 0x5C, + 33546 - 19968: jis0212<<14 | 0x36<<7 | 0x40, + 33547 - 19968: jis0212<<14 | 0x36<<7 | 0x41, + 33550 - 19968: jis0208<<14 | 0x16<<7 | 0x33, + 33558 - 19968: jis0208<<14 | 0x47<<7 | 0x02, + 33559 - 19968: jis0208<<14 | 0x47<<7 | 0x0B, + 33560 - 19968: jis0208<<14 | 0x47<<7 | 0x0C, + 33563 - 19968: jis0212<<14 | 0x36<<7 | 0x43, + 33564 - 19968: jis0208<<14 | 0x0F<<7 | 0x0A, + 33565 - 19968: jis0212<<14 | 0x36<<7 | 0x44, + 33566 - 19968: jis0212<<14 | 0x36<<7 | 0x45, + 33567 - 19968: jis0212<<14 | 0x36<<7 | 0x46, + 33569 - 19968: jis0212<<14 | 0x36<<7 | 0x47, + 33570 - 19968: jis0212<<14 | 0x36<<7 | 0x48, + 33571 - 19968: jis0208<<14 | 0x47<<7 | 0x13, + 33576 - 19968: jis0208<<14 | 0x0F<<7 | 0x50, + 33579 - 19968: jis0208<<14 | 0x47<<7 | 0x0A, + 33580 - 19968: jis0212<<14 | 0x36<<7 | 0x49, + 33581 - 19968: jis0212<<14 | 0x36<<7 | 0x4A, + 33582 - 19968: jis0212<<14 | 0x36<<7 | 0x4B, + 33583 - 19968: jis0208<<14 | 0x47<<7 | 0x09, + 33584 - 19968: jis0212<<14 | 0x36<<7 | 0x4C, + 33585 - 19968: jis0208<<14 | 0x47<<7 | 0x04, + 33586 - 19968: jis0208<<14 | 0x47<<7 | 0x03, + 33587 - 19968: jis0212<<14 | 0x36<<7 | 0x4D, + 33588 - 19968: jis0208<<14 | 0x47<<7 | 0x01, + 33589 - 19968: jis0208<<14 | 0x47<<7 | 0x00, + 33590 - 19968: jis0208<<14 | 0x22<<7 | 0x42, + 33591 - 19968: jis0212<<14 | 0x36<<7 | 0x4E, + 33592 - 19968: jis0208<<14 | 0x21<<7 | 0x5A, + 33593 - 19968: jis0208<<14 | 0x47<<7 | 0x06, + 33594 - 19968: jis0212<<14 | 0x36<<7 | 0x4F, + 33596 - 19968: jis0212<<14 | 0x36<<7 | 0x50, + 33597 - 19968: jis0212<<14 | 0x36<<7 | 0x51, + 33600 - 19968: jis0208<<14 | 0x47<<7 | 0x05, + 33602 - 19968: jis0212<<14 | 0x36<<7 | 0x52, + 33603 - 19968: jis0212<<14 | 0x36<<7 | 0x53, + 33604 - 19968: jis0212<<14 | 0x36<<7 | 0x54, + 33605 - 19968: jis0208<<14 | 0x47<<7 | 0x08, + 33607 - 19968: jis0212<<14 | 0x36<<7 | 0x55, + 33609 - 19968: jis0208<<14 | 0x20<<7 | 0x4F, + 33610 - 19968: jis0208<<14 | 0x16<<7 | 0x34, + 33613 - 19968: jis0212<<14 | 0x36<<7 | 0x56, + 33614 - 19968: jis0212<<14 | 0x36<<7 | 0x57, + 33615 - 19968: jis0208<<14 | 0x10<<7 | 0x20, + 33616 - 19968: jis0208<<14 | 0x47<<7 | 0x07, + 33617 - 19968: jis0212<<14 | 0x36<<7 | 0x58, + 33618 - 19968: jis0208<<14 | 0x18<<7 | 0x32, + 33619 - 19968: jis0212<<14 | 0x37<<7 | 0x1D, + 33620 - 19968: jis0212<<14 | 0x36<<7 | 0x42, + 33621 - 19968: jis0212<<14 | 0x36<<7 | 0x59, + 33622 - 19968: jis0212<<14 | 0x36<<7 | 0x5A, + 33623 - 19968: jis0212<<14 | 0x36<<7 | 0x5B, + 33624 - 19968: jis0208<<14 | 0x20<<7 | 0x50, + 33634 - 19968: jis0208<<14 | 0x5A<<7 | 0x37, + 33648 - 19968: jis0212<<14 | 0x36<<7 | 0x5C, + 33651 - 19968: jis0208<<14 | 0x47<<7 | 0x19, + 33653 - 19968: jis0208<<14 | 0x47<<7 | 0x1A, + 33655 - 19968: jis0208<<14 | 0x11<<7 | 0x38, + 33656 - 19968: jis0212<<14 | 0x36<<7 | 0x5D, + 33659 - 19968: jis0208<<14 | 0x11<<7 | 0x0D, + 33660 - 19968: jis0208<<14 | 0x47<<7 | 0x17, + 33661 - 19968: jis0212<<14 | 0x37<<7 | 0x00, + 33663 - 19968: jis0208<<14 | 0x5A<<7 | 0x38, + 33664 - 19968: jis0212<<14 | 0x37<<7 | 0x02, + 33666 - 19968: jis0212<<14 | 0x37<<7 | 0x03, + 33668 - 19968: jis0212<<14 | 0x37<<7 | 0x04, + 33669 - 19968: jis0208<<14 | 0x47<<7 | 0x0D, + 33670 - 19968: jis0212<<14 | 0x37<<7 | 0x05, + 33671 - 19968: jis0208<<14 | 0x47<<7 | 0x15, + 33673 - 19968: jis0208<<14 | 0x47<<7 | 0x1C, + 33674 - 19968: jis0208<<14 | 0x47<<7 | 0x16, + 33677 - 19968: jis0212<<14 | 0x37<<7 | 0x06, + 33678 - 19968: jis0208<<14 | 0x47<<7 | 0x14, + 33682 - 19968: jis0212<<14 | 0x37<<7 | 0x07, + 33683 - 19968: jis0208<<14 | 0x46<<7 | 0x55, + 33684 - 19968: jis0212<<14 | 0x37<<7 | 0x08, + 33685 - 19968: jis0212<<14 | 0x37<<7 | 0x09, + 33686 - 19968: jis0208<<14 | 0x47<<7 | 0x12, + 33688 - 19968: jis0212<<14 | 0x37<<7 | 0x0A, + 33689 - 19968: jis0212<<14 | 0x37<<7 | 0x0B, + 33690 - 19968: jis0208<<14 | 0x47<<7 | 0x0E, + 33691 - 19968: jis0212<<14 | 0x37<<7 | 0x0C, + 33692 - 19968: jis0212<<14 | 0x37<<7 | 0x0D, + 33693 - 19968: jis0212<<14 | 0x37<<7 | 0x0E, + 33694 - 19968: jis0208<<14 | 0x13<<7 | 0x2F, + 33695 - 19968: jis0208<<14 | 0x47<<7 | 0x10, + 33696 - 19968: jis0208<<14 | 0x47<<7 | 0x1B, + 33698 - 19968: jis0208<<14 | 0x47<<7 | 0x11, + 33702 - 19968: jis0212<<14 | 0x37<<7 | 0x0F, + 33703 - 19968: jis0212<<14 | 0x37<<7 | 0x10, + 33704 - 19968: jis0208<<14 | 0x47<<7 | 0x1D, + 33705 - 19968: jis0212<<14 | 0x37<<7 | 0x11, + 33706 - 19968: jis0208<<14 | 0x47<<7 | 0x0F, + 33707 - 19968: jis0208<<14 | 0x26<<7 | 0x5B, + 33708 - 19968: jis0212<<14 | 0x37<<7 | 0x12, + 33709 - 19968: jis0212<<14 | 0x37<<7 | 0x2B, + 33713 - 19968: jis0208<<14 | 0x2C<<7 | 0x48, + 33717 - 19968: jis0208<<14 | 0x47<<7 | 0x18, + 33725 - 19968: jis0208<<14 | 0x47<<7 | 0x2E, + 33726 - 19968: jis0212<<14 | 0x37<<7 | 0x13, + 33727 - 19968: jis0212<<14 | 0x37<<7 | 0x14, + 33728 - 19968: jis0212<<14 | 0x37<<7 | 0x15, + 33729 - 19968: jis0208<<14 | 0x47<<7 | 0x26, + 33733 - 19968: jis0208<<14 | 0x1E<<7 | 0x5A, + 33735 - 19968: jis0208<<14 | 0x5A<<7 | 0x39, + 33737 - 19968: jis0212<<14 | 0x37<<7 | 0x17, + 33738 - 19968: jis0208<<14 | 0x14<<7 | 0x25, + 33740 - 19968: jis0208<<14 | 0x15<<7 | 0x3C, + 33742 - 19968: jis0208<<14 | 0x47<<7 | 0x21, + 33743 - 19968: jis0212<<14 | 0x37<<7 | 0x18, + 33744 - 19968: jis0212<<14 | 0x37<<7 | 0x19, + 33745 - 19968: jis0212<<14 | 0x37<<7 | 0x1A, + 33747 - 19968: jis0208<<14 | 0x11<<7 | 0x3A, + 33748 - 19968: jis0212<<14 | 0x37<<7 | 0x1B, + 33750 - 19968: jis0208<<14 | 0x1D<<7 | 0x33, + 33752 - 19968: jis0208<<14 | 0x47<<7 | 0x24, + 33756 - 19968: jis0208<<14 | 0x19<<7 | 0x39, + 33757 - 19968: jis0212<<14 | 0x37<<7 | 0x1C, + 33759 - 19968: jis0208<<14 | 0x24<<7 | 0x30, + 33760 - 19968: jis0208<<14 | 0x47<<7 | 0x29, + 33768 - 19968: jis0212<<14 | 0x37<<7 | 0x1E, + 33769 - 19968: jis0208<<14 | 0x29<<7 | 0x4D, + 33770 - 19968: jis0212<<14 | 0x37<<7 | 0x1F, + 33771 - 19968: jis0208<<14 | 0x47<<7 | 0x20, + 33775 - 19968: jis0208<<14 | 0x11<<7 | 0x39, + 33776 - 19968: jis0208<<14 | 0x17<<7 | 0x35, + 33777 - 19968: jis0208<<14 | 0x28<<7 | 0x08, + 33778 - 19968: jis0208<<14 | 0x47<<7 | 0x2A, + 33780 - 19968: jis0208<<14 | 0x47<<7 | 0x1E, + 33782 - 19968: jis0208<<14 | 0x5A<<7 | 0x3A, + 33783 - 19968: jis0208<<14 | 0x47<<7 | 0x27, + 33784 - 19968: jis0212<<14 | 0x37<<7 | 0x21, + 33785 - 19968: jis0212<<14 | 0x37<<7 | 0x22, + 33787 - 19968: jis0208<<14 | 0x47<<7 | 0x31, + 33788 - 19968: jis0212<<14 | 0x37<<7 | 0x23, + 33789 - 19968: jis0208<<14 | 0x47<<7 | 0x22, + 33793 - 19968: jis0212<<14 | 0x37<<7 | 0x24, + 33795 - 19968: jis0208<<14 | 0x47<<7 | 0x23, + 33796 - 19968: jis0208<<14 | 0x25<<7 | 0x19, + 33798 - 19968: jis0212<<14 | 0x37<<7 | 0x25, + 33799 - 19968: jis0208<<14 | 0x47<<7 | 0x28, + 33802 - 19968: jis0212<<14 | 0x37<<7 | 0x26, + 33803 - 19968: jis0208<<14 | 0x47<<7 | 0x25, + 33804 - 19968: jis0208<<14 | 0x2A<<7 | 0x07, + 33805 - 19968: jis0208<<14 | 0x47<<7 | 0x2B, + 33806 - 19968: jis0208<<14 | 0x0F<<7 | 0x3F, + 33807 - 19968: jis0212<<14 | 0x37<<7 | 0x27, + 33809 - 19968: jis0212<<14 | 0x37<<7 | 0x28, + 33811 - 19968: jis0208<<14 | 0x47<<7 | 0x1F, + 33813 - 19968: jis0212<<14 | 0x37<<7 | 0x29, + 33817 - 19968: jis0212<<14 | 0x37<<7 | 0x2A, + 33824 - 19968: jis0208<<14 | 0x47<<7 | 0x2D, + 33826 - 19968: jis0208<<14 | 0x47<<7 | 0x2C, + 33833 - 19968: jis0208<<14 | 0x26<<7 | 0x4A, + 33834 - 19968: jis0208<<14 | 0x47<<7 | 0x33, + 33836 - 19968: jis0208<<14 | 0x47<<7 | 0x3E, + 33839 - 19968: jis0212<<14 | 0x37<<7 | 0x2C, + 33841 - 19968: jis0208<<14 | 0x12<<7 | 0x5D, + 33845 - 19968: jis0208<<14 | 0x47<<7 | 0x41, + 33848 - 19968: jis0208<<14 | 0x47<<7 | 0x2F, + 33849 - 19968: jis0212<<14 | 0x37<<7 | 0x2D, + 33852 - 19968: jis0208<<14 | 0x47<<7 | 0x34, + 33853 - 19968: jis0208<<14 | 0x2C<<7 | 0x4D, + 33861 - 19968: jis0212<<14 | 0x37<<7 | 0x2E, + 33862 - 19968: jis0208<<14 | 0x47<<7 | 0x3D, + 33863 - 19968: jis0212<<14 | 0x37<<7 | 0x2F, + 33864 - 19968: jis0208<<14 | 0x5A<<7 | 0x3B, + 33865 - 19968: jis0208<<14 | 0x2C<<7 | 0x34, + 33866 - 19968: jis0212<<14 | 0x37<<7 | 0x31, + 33869 - 19968: jis0212<<14 | 0x37<<7 | 0x32, + 33870 - 19968: jis0208<<14 | 0x2D<<7 | 0x09, + 33871 - 19968: jis0212<<14 | 0x37<<7 | 0x33, + 33873 - 19968: jis0212<<14 | 0x37<<7 | 0x34, + 33874 - 19968: jis0212<<14 | 0x37<<7 | 0x35, + 33878 - 19968: jis0212<<14 | 0x37<<7 | 0x36, + 33879 - 19968: jis0208<<14 | 0x22<<7 | 0x57, + 33880 - 19968: jis0212<<14 | 0x37<<7 | 0x37, + 33881 - 19968: jis0212<<14 | 0x37<<7 | 0x38, + 33882 - 19968: jis0212<<14 | 0x37<<7 | 0x39, + 33883 - 19968: jis0208<<14 | 0x12<<7 | 0x4A, + 33884 - 19968: jis0212<<14 | 0x37<<7 | 0x3A, + 33888 - 19968: jis0212<<14 | 0x37<<7 | 0x3B, + 33889 - 19968: jis0208<<14 | 0x28<<7 | 0x51, + 33890 - 19968: jis0208<<14 | 0x47<<7 | 0x43, + 33891 - 19968: jis0208<<14 | 0x25<<7 | 0x00, + 33892 - 19968: jis0212<<14 | 0x37<<7 | 0x3C, + 33893 - 19968: jis0212<<14 | 0x37<<7 | 0x3D, + 33894 - 19968: jis0208<<14 | 0x0F<<7 | 0x10, + 33895 - 19968: jis0212<<14 | 0x37<<7 | 0x3E, + 33897 - 19968: jis0208<<14 | 0x47<<7 | 0x3C, + 33898 - 19968: jis0212<<14 | 0x37<<7 | 0x3F, + 33899 - 19968: jis0208<<14 | 0x47<<7 | 0x38, + 33900 - 19968: jis0208<<14 | 0x20<<7 | 0x51, + 33901 - 19968: jis0208<<14 | 0x47<<7 | 0x32, + 33902 - 19968: jis0208<<14 | 0x47<<7 | 0x3A, + 33903 - 19968: jis0208<<14 | 0x47<<7 | 0x3F, + 33904 - 19968: jis0212<<14 | 0x37<<7 | 0x40, + 33905 - 19968: jis0208<<14 | 0x26<<7 | 0x0B, + 33907 - 19968: jis0212<<14 | 0x37<<7 | 0x41, + 33908 - 19968: jis0212<<14 | 0x37<<7 | 0x42, + 33909 - 19968: jis0208<<14 | 0x0F<<7 | 0x09, + 33910 - 19968: jis0212<<14 | 0x37<<7 | 0x43, + 33911 - 19968: jis0208<<14 | 0x47<<7 | 0x37, + 33912 - 19968: jis0212<<14 | 0x37<<7 | 0x44, + 33913 - 19968: jis0208<<14 | 0x47<<7 | 0x40, + 33914 - 19968: jis0208<<14 | 0x28<<7 | 0x57, + 33916 - 19968: jis0212<<14 | 0x37<<7 | 0x45, + 33917 - 19968: jis0212<<14 | 0x37<<7 | 0x46, + 33921 - 19968: jis0212<<14 | 0x37<<7 | 0x47, + 33922 - 19968: jis0208<<14 | 0x47<<7 | 0x3B, + 33924 - 19968: jis0208<<14 | 0x47<<7 | 0x36, + 33925 - 19968: jis0212<<14 | 0x37<<7 | 0x48, + 33931 - 19968: jis0208<<14 | 0x1D<<7 | 0x34, + 33936 - 19968: jis0208<<14 | 0x1C<<7 | 0x0E, + 33938 - 19968: jis0212<<14 | 0x37<<7 | 0x49, + 33939 - 19968: jis0212<<14 | 0x37<<7 | 0x4A, + 33940 - 19968: jis0208<<14 | 0x1B<<7 | 0x0B, + 33941 - 19968: jis0212<<14 | 0x37<<7 | 0x4B, + 33945 - 19968: jis0208<<14 | 0x2B<<7 | 0x37, + 33948 - 19968: jis0208<<14 | 0x28<<7 | 0x26, + 33950 - 19968: jis0212<<14 | 0x37<<7 | 0x4C, + 33951 - 19968: jis0208<<14 | 0x47<<7 | 0x46, + 33953 - 19968: jis0208<<14 | 0x47<<7 | 0x4F, + 33958 - 19968: jis0212<<14 | 0x37<<7 | 0x4D, + 33960 - 19968: jis0212<<14 | 0x37<<7 | 0x4E, + 33961 - 19968: jis0212<<14 | 0x37<<7 | 0x4F, + 33962 - 19968: jis0212<<14 | 0x37<<7 | 0x50, + 33965 - 19968: jis0208<<14 | 0x47<<7 | 0x39, + 33967 - 19968: jis0212<<14 | 0x37<<7 | 0x51, + 33969 - 19968: jis0212<<14 | 0x37<<7 | 0x52, + 33970 - 19968: jis0208<<14 | 0x12<<7 | 0x56, + 33972 - 19968: jis0208<<14 | 0x5A<<7 | 0x3C, + 33976 - 19968: jis0208<<14 | 0x1D<<7 | 0x57, + 33977 - 19968: jis0208<<14 | 0x47<<7 | 0x44, + 33978 - 19968: jis0212<<14 | 0x37<<7 | 0x54, + 33979 - 19968: jis0208<<14 | 0x47<<7 | 0x49, + 33980 - 19968: jis0208<<14 | 0x20<<7 | 0x52, + 33981 - 19968: jis0212<<14 | 0x37<<7 | 0x55, + 33982 - 19968: jis0212<<14 | 0x37<<7 | 0x56, + 33983 - 19968: jis0208<<14 | 0x47<<7 | 0x45, + 33984 - 19968: jis0212<<14 | 0x37<<7 | 0x57, + 33985 - 19968: jis0208<<14 | 0x47<<7 | 0x4C, + 33986 - 19968: jis0212<<14 | 0x37<<7 | 0x58, + 33988 - 19968: jis0208<<14 | 0x22<<7 | 0x3E, + 33990 - 19968: jis0208<<14 | 0x47<<7 | 0x4D, + 33991 - 19968: jis0212<<14 | 0x37<<7 | 0x59, + 33992 - 19968: jis0212<<14 | 0x37<<7 | 0x5A, + 33993 - 19968: jis0208<<14 | 0x2C<<7 | 0x35, + 33994 - 19968: jis0208<<14 | 0x47<<7 | 0x42, + 33995 - 19968: jis0208<<14 | 0x12<<7 | 0x17, + 33996 - 19968: jis0212<<14 | 0x37<<7 | 0x5B, + 33997 - 19968: jis0208<<14 | 0x47<<7 | 0x48, + 33999 - 19968: jis0212<<14 | 0x37<<7 | 0x5C, + 34000 - 19968: jis0208<<14 | 0x47<<7 | 0x4B, + 34001 - 19968: jis0208<<14 | 0x2B<<7 | 0x0B, + 34003 - 19968: jis0212<<14 | 0x37<<7 | 0x5D, + 34006 - 19968: jis0208<<14 | 0x47<<7 | 0x4E, + 34009 - 19968: jis0208<<14 | 0x47<<7 | 0x47, + 34010 - 19968: jis0208<<14 | 0x47<<7 | 0x4A, + 34012 - 19968: jis0208<<14 | 0x58<<7 | 0x04, + 34023 - 19968: jis0212<<14 | 0x38<<7 | 0x01, + 34026 - 19968: jis0212<<14 | 0x38<<7 | 0x02, + 34028 - 19968: jis0208<<14 | 0x2A<<7 | 0x08, + 34030 - 19968: jis0208<<14 | 0x2E<<7 | 0x00, + 34031 - 19968: jis0212<<14 | 0x38<<7 | 0x03, + 34032 - 19968: jis0212<<14 | 0x38<<7 | 0x04, + 34033 - 19968: jis0212<<14 | 0x38<<7 | 0x05, + 34034 - 19968: jis0212<<14 | 0x38<<7 | 0x06, + 34036 - 19968: jis0208<<14 | 0x47<<7 | 0x52, + 34039 - 19968: jis0212<<14 | 0x38<<7 | 0x07, + 34042 - 19968: jis0212<<14 | 0x38<<7 | 0x09, + 34043 - 19968: jis0212<<14 | 0x38<<7 | 0x0A, + 34044 - 19968: jis0208<<14 | 0x47<<7 | 0x59, + 34045 - 19968: jis0212<<14 | 0x38<<7 | 0x0B, + 34047 - 19968: jis0208<<14 | 0x47<<7 | 0x51, + 34048 - 19968: jis0208<<14 | 0x1B<<7 | 0x22, + 34050 - 19968: jis0212<<14 | 0x38<<7 | 0x0C, + 34051 - 19968: jis0212<<14 | 0x38<<7 | 0x0D, + 34054 - 19968: jis0208<<14 | 0x47<<7 | 0x30, + 34055 - 19968: jis0212<<14 | 0x38<<7 | 0x0E, + 34060 - 19968: jis0212<<14 | 0x38<<7 | 0x0F, + 34062 - 19968: jis0212<<14 | 0x38<<7 | 0x10, + 34064 - 19968: jis0212<<14 | 0x38<<7 | 0x11, + 34065 - 19968: jis0208<<14 | 0x29<<7 | 0x2D, + 34067 - 19968: jis0208<<14 | 0x2B<<7 | 0x01, + 34068 - 19968: jis0208<<14 | 0x47<<7 | 0x58, + 34069 - 19968: jis0208<<14 | 0x47<<7 | 0x57, + 34071 - 19968: jis0208<<14 | 0x47<<7 | 0x53, + 34072 - 19968: jis0208<<14 | 0x47<<7 | 0x54, + 34074 - 19968: jis0208<<14 | 0x10<<7 | 0x15, + 34076 - 19968: jis0212<<14 | 0x38<<7 | 0x12, + 34078 - 19968: jis0212<<14 | 0x38<<7 | 0x13, + 34079 - 19968: jis0208<<14 | 0x47<<7 | 0x56, + 34081 - 19968: jis0208<<14 | 0x47<<7 | 0x50, + 34082 - 19968: jis0212<<14 | 0x38<<7 | 0x14, + 34083 - 19968: jis0212<<14 | 0x38<<7 | 0x15, + 34084 - 19968: jis0212<<14 | 0x38<<7 | 0x16, + 34085 - 19968: jis0212<<14 | 0x38<<7 | 0x17, + 34086 - 19968: jis0208<<14 | 0x23<<7 | 0x34, + 34087 - 19968: jis0212<<14 | 0x38<<7 | 0x18, + 34090 - 19968: jis0212<<14 | 0x38<<7 | 0x19, + 34091 - 19968: jis0212<<14 | 0x38<<7 | 0x1A, + 34092 - 19968: jis0208<<14 | 0x47<<7 | 0x55, + 34093 - 19968: jis0208<<14 | 0x0F<<7 | 0x5D, + 34095 - 19968: jis0212<<14 | 0x38<<7 | 0x1B, + 34098 - 19968: jis0212<<14 | 0x38<<7 | 0x08, + 34099 - 19968: jis0212<<14 | 0x38<<7 | 0x1C, + 34100 - 19968: jis0212<<14 | 0x38<<7 | 0x1D, + 34101 - 19968: jis0208<<14 | 0x21<<7 | 0x01, + 34102 - 19968: jis0212<<14 | 0x38<<7 | 0x1E, + 34109 - 19968: jis0208<<14 | 0x29<<7 | 0x22, + 34111 - 19968: jis0212<<14 | 0x38<<7 | 0x1F, + 34112 - 19968: jis0208<<14 | 0x47<<7 | 0x5A, + 34113 - 19968: jis0208<<14 | 0x48<<7 | 0x00, + 34115 - 19968: jis0208<<14 | 0x27<<7 | 0x38, + 34118 - 19968: jis0212<<14 | 0x38<<7 | 0x20, + 34120 - 19968: jis0208<<14 | 0x47<<7 | 0x5D, + 34121 - 19968: jis0208<<14 | 0x1D<<7 | 0x35, + 34122 - 19968: jis0208<<14 | 0x1B<<7 | 0x28, + 34123 - 19968: jis0208<<14 | 0x48<<7 | 0x02, + 34126 - 19968: jis0208<<14 | 0x15<<7 | 0x1D, + 34127 - 19968: jis0212<<14 | 0x38<<7 | 0x21, + 34128 - 19968: jis0212<<14 | 0x38<<7 | 0x22, + 34129 - 19968: jis0212<<14 | 0x38<<7 | 0x23, + 34130 - 19968: jis0212<<14 | 0x38<<7 | 0x24, + 34131 - 19968: jis0208<<14 | 0x5A<<7 | 0x3D, + 34133 - 19968: jis0208<<14 | 0x48<<7 | 0x03, + 34134 - 19968: jis0212<<14 | 0x38<<7 | 0x26, + 34135 - 19968: jis0208<<14 | 0x28<<7 | 0x58, + 34136 - 19968: jis0208<<14 | 0x47<<7 | 0x5C, + 34137 - 19968: jis0208<<14 | 0x5A<<7 | 0x3E, + 34138 - 19968: jis0208<<14 | 0x47<<7 | 0x35, + 34140 - 19968: jis0212<<14 | 0x38<<7 | 0x28, + 34141 - 19968: jis0212<<14 | 0x38<<7 | 0x29, + 34142 - 19968: jis0212<<14 | 0x38<<7 | 0x2A, + 34143 - 19968: jis0212<<14 | 0x38<<7 | 0x2B, + 34144 - 19968: jis0212<<14 | 0x38<<7 | 0x2C, + 34145 - 19968: jis0212<<14 | 0x38<<7 | 0x2D, + 34146 - 19968: jis0212<<14 | 0x38<<7 | 0x2E, + 34147 - 19968: jis0208<<14 | 0x47<<7 | 0x5B, + 34148 - 19968: jis0212<<14 | 0x38<<7 | 0x2F, + 34152 - 19968: jis0208<<14 | 0x2E<<7 | 0x2E, + 34153 - 19968: jis0208<<14 | 0x25<<7 | 0x01, + 34154 - 19968: jis0208<<14 | 0x28<<7 | 0x52, + 34155 - 19968: jis0208<<14 | 0x5A<<7 | 0x3F, + 34157 - 19968: jis0208<<14 | 0x48<<7 | 0x0A, + 34159 - 19968: jis0212<<14 | 0x38<<7 | 0x31, + 34167 - 19968: jis0208<<14 | 0x48<<7 | 0x10, + 34169 - 19968: jis0212<<14 | 0x38<<7 | 0x32, + 34170 - 19968: jis0212<<14 | 0x38<<7 | 0x33, + 34171 - 19968: jis0212<<14 | 0x38<<7 | 0x34, + 34173 - 19968: jis0212<<14 | 0x38<<7 | 0x35, + 34174 - 19968: jis0208<<14 | 0x48<<7 | 0x11, + 34175 - 19968: jis0212<<14 | 0x38<<7 | 0x36, + 34176 - 19968: jis0208<<14 | 0x48<<7 | 0x04, + 34177 - 19968: jis0212<<14 | 0x38<<7 | 0x37, + 34180 - 19968: jis0208<<14 | 0x26<<7 | 0x55, + 34181 - 19968: jis0212<<14 | 0x38<<7 | 0x38, + 34182 - 19968: jis0212<<14 | 0x38<<7 | 0x39, + 34183 - 19968: jis0208<<14 | 0x48<<7 | 0x0E, + 34184 - 19968: jis0208<<14 | 0x48<<7 | 0x06, + 34185 - 19968: jis0212<<14 | 0x38<<7 | 0x3A, + 34186 - 19968: jis0208<<14 | 0x48<<7 | 0x08, + 34187 - 19968: jis0212<<14 | 0x38<<7 | 0x3B, + 34188 - 19968: jis0212<<14 | 0x38<<7 | 0x3C, + 34191 - 19968: jis0212<<14 | 0x38<<7 | 0x3D, + 34192 - 19968: jis0208<<14 | 0x48<<7 | 0x12, + 34193 - 19968: jis0208<<14 | 0x48<<7 | 0x07, + 34195 - 19968: jis0212<<14 | 0x38<<7 | 0x3E, + 34196 - 19968: jis0208<<14 | 0x48<<7 | 0x0B, + 34199 - 19968: jis0208<<14 | 0x10<<7 | 0x51, + 34200 - 19968: jis0212<<14 | 0x38<<7 | 0x3F, + 34201 - 19968: jis0208<<14 | 0x25<<7 | 0x44, + 34203 - 19968: jis0208<<14 | 0x48<<7 | 0x0C, + 34204 - 19968: jis0208<<14 | 0x48<<7 | 0x0F, + 34205 - 19968: jis0212<<14 | 0x38<<7 | 0x40, + 34207 - 19968: jis0212<<14 | 0x38<<7 | 0x41, + 34208 - 19968: jis0212<<14 | 0x38<<7 | 0x42, + 34210 - 19968: jis0212<<14 | 0x38<<7 | 0x43, + 34212 - 19968: jis0208<<14 | 0x48<<7 | 0x05, + 34213 - 19968: jis0212<<14 | 0x38<<7 | 0x44, + 34214 - 19968: jis0208<<14 | 0x20<<7 | 0x05, + 34215 - 19968: jis0212<<14 | 0x38<<7 | 0x45, + 34216 - 19968: jis0208<<14 | 0x48<<7 | 0x09, + 34217 - 19968: jis0208<<14 | 0x1A<<7 | 0x06, + 34218 - 19968: jis0208<<14 | 0x1E<<7 | 0x24, + 34219 - 19968: jis0208<<14 | 0x16<<7 | 0x0F, + 34220 - 19968: jis0208<<14 | 0x2B<<7 | 0x53, + 34221 - 19968: jis0212<<14 | 0x38<<7 | 0x53, + 34222 - 19968: jis0208<<14 | 0x2B<<7 | 0x58, + 34223 - 19968: jis0208<<14 | 0x1C<<7 | 0x51, + 34224 - 19968: jis0208<<14 | 0x5A<<7 | 0x41, + 34228 - 19968: jis0212<<14 | 0x38<<7 | 0x46, + 34230 - 19968: jis0212<<14 | 0x38<<7 | 0x47, + 34231 - 19968: jis0212<<14 | 0x38<<7 | 0x48, + 34232 - 19968: jis0212<<14 | 0x38<<7 | 0x49, + 34233 - 19968: jis0208<<14 | 0x48<<7 | 0x16, + 34234 - 19968: jis0208<<14 | 0x48<<7 | 0x14, + 34236 - 19968: jis0212<<14 | 0x38<<7 | 0x4A, + 34237 - 19968: jis0212<<14 | 0x38<<7 | 0x4B, + 34238 - 19968: jis0212<<14 | 0x38<<7 | 0x4C, + 34239 - 19968: jis0212<<14 | 0x38<<7 | 0x4D, + 34241 - 19968: jis0208<<14 | 0x2E<<7 | 0x2D, + 34242 - 19968: jis0212<<14 | 0x38<<7 | 0x4E, + 34247 - 19968: jis0212<<14 | 0x38<<7 | 0x4F, + 34249 - 19968: jis0208<<14 | 0x48<<7 | 0x13, + 34250 - 19968: jis0212<<14 | 0x38<<7 | 0x50, + 34251 - 19968: jis0212<<14 | 0x38<<7 | 0x51, + 34253 - 19968: jis0208<<14 | 0x2C<<7 | 0x54, + 34254 - 19968: jis0212<<14 | 0x38<<7 | 0x52, + 34255 - 19968: jis0208<<14 | 0x48<<7 | 0x15, + 34256 - 19968: jis0208<<14 | 0x48<<7 | 0x17, + 34261 - 19968: jis0208<<14 | 0x48<<7 | 0x18, + 34264 - 19968: jis0212<<14 | 0x38<<7 | 0x54, + 34266 - 19968: jis0212<<14 | 0x38<<7 | 0x55, + 34268 - 19968: jis0208<<14 | 0x48<<7 | 0x1B, + 34269 - 19968: jis0208<<14 | 0x48<<7 | 0x19, + 34271 - 19968: jis0212<<14 | 0x38<<7 | 0x56, + 34272 - 19968: jis0212<<14 | 0x38<<7 | 0x57, + 34276 - 19968: jis0208<<14 | 0x25<<7 | 0x02, + 34277 - 19968: jis0208<<14 | 0x48<<7 | 0x1A, + 34278 - 19968: jis0212<<14 | 0x38<<7 | 0x58, + 34280 - 19968: jis0212<<14 | 0x38<<7 | 0x59, + 34281 - 19968: jis0208<<14 | 0x27<<7 | 0x2C, + 34282 - 19968: jis0208<<14 | 0x48<<7 | 0x0D, + 34285 - 19968: jis0212<<14 | 0x38<<7 | 0x5A, + 34291 - 19968: jis0212<<14 | 0x38<<7 | 0x5B, + 34294 - 19968: jis0212<<14 | 0x38<<7 | 0x5C, + 34295 - 19968: jis0208<<14 | 0x1C<<7 | 0x52, + 34297 - 19968: jis0208<<14 | 0x48<<7 | 0x1C, + 34298 - 19968: jis0208<<14 | 0x48<<7 | 0x21, + 34299 - 19968: jis0208<<14 | 0x20<<7 | 0x53, + 34300 - 19968: jis0212<<14 | 0x38<<7 | 0x5D, + 34302 - 19968: jis0208<<14 | 0x48<<7 | 0x20, + 34303 - 19968: jis0212<<14 | 0x39<<7 | 0x00, + 34304 - 19968: jis0212<<14 | 0x39<<7 | 0x01, + 34306 - 19968: jis0208<<14 | 0x48<<7 | 0x01, + 34308 - 19968: jis0212<<14 | 0x39<<7 | 0x02, + 34309 - 19968: jis0212<<14 | 0x39<<7 | 0x03, + 34310 - 19968: jis0208<<14 | 0x48<<7 | 0x22, + 34311 - 19968: jis0208<<14 | 0x20<<7 | 0x28, + 34314 - 19968: jis0208<<14 | 0x48<<7 | 0x1D, + 34315 - 19968: jis0208<<14 | 0x48<<7 | 0x1F, + 34317 - 19968: jis0212<<14 | 0x39<<7 | 0x04, + 34318 - 19968: jis0212<<14 | 0x39<<7 | 0x05, + 34320 - 19968: jis0212<<14 | 0x39<<7 | 0x06, + 34321 - 19968: jis0212<<14 | 0x39<<7 | 0x07, + 34322 - 19968: jis0212<<14 | 0x39<<7 | 0x08, + 34323 - 19968: jis0208<<14 | 0x48<<7 | 0x1E, + 34326 - 19968: jis0208<<14 | 0x3C<<7 | 0x10, + 34327 - 19968: jis0208<<14 | 0x3C<<7 | 0x01, + 34328 - 19968: jis0212<<14 | 0x39<<7 | 0x09, + 34329 - 19968: jis0212<<14 | 0x39<<7 | 0x0A, + 34330 - 19968: jis0208<<14 | 0x48<<7 | 0x24, + 34331 - 19968: jis0212<<14 | 0x39<<7 | 0x0B, + 34334 - 19968: jis0212<<14 | 0x39<<7 | 0x0C, + 34337 - 19968: jis0212<<14 | 0x39<<7 | 0x0D, + 34338 - 19968: jis0208<<14 | 0x48<<7 | 0x23, + 34343 - 19968: jis0212<<14 | 0x39<<7 | 0x0E, + 34345 - 19968: jis0212<<14 | 0x39<<7 | 0x0F, + 34349 - 19968: jis0208<<14 | 0x2C<<7 | 0x55, + 34351 - 19968: jis0208<<14 | 0x41<<7 | 0x1B, + 34352 - 19968: jis0208<<14 | 0x48<<7 | 0x25, + 34358 - 19968: jis0212<<14 | 0x39<<7 | 0x10, + 34360 - 19968: jis0212<<14 | 0x39<<7 | 0x11, + 34362 - 19968: jis0212<<14 | 0x39<<7 | 0x12, + 34364 - 19968: jis0212<<14 | 0x39<<7 | 0x13, + 34365 - 19968: jis0212<<14 | 0x39<<7 | 0x14, + 34367 - 19968: jis0208<<14 | 0x48<<7 | 0x26, + 34368 - 19968: jis0212<<14 | 0x39<<7 | 0x15, + 34369 - 19968: jis0212<<14 | 0x17<<7 | 0x45, + 34370 - 19968: jis0212<<14 | 0x39<<7 | 0x16, + 34374 - 19968: jis0212<<14 | 0x39<<7 | 0x17, + 34381 - 19968: jis0208<<14 | 0x48<<7 | 0x27, + 34382 - 19968: jis0208<<14 | 0x17<<7 | 0x36, + 34384 - 19968: jis0208<<14 | 0x14<<7 | 0x33, + 34386 - 19968: jis0212<<14 | 0x39<<7 | 0x18, + 34387 - 19968: jis0212<<14 | 0x39<<7 | 0x19, + 34388 - 19968: jis0208<<14 | 0x48<<7 | 0x29, + 34389 - 19968: jis0208<<14 | 0x30<<7 | 0x3C, + 34390 - 19968: jis0212<<14 | 0x39<<7 | 0x1A, + 34391 - 19968: jis0212<<14 | 0x39<<7 | 0x1B, + 34392 - 19968: jis0212<<14 | 0x39<<7 | 0x1C, + 34393 - 19968: jis0212<<14 | 0x39<<7 | 0x1D, + 34394 - 19968: jis0208<<14 | 0x14<<7 | 0x54, + 34396 - 19968: jis0208<<14 | 0x2D<<7 | 0x19, + 34397 - 19968: jis0212<<14 | 0x39<<7 | 0x1E, + 34398 - 19968: jis0208<<14 | 0x15<<7 | 0x52, + 34399 - 19968: jis0208<<14 | 0x48<<7 | 0x2A, + 34400 - 19968: jis0212<<14 | 0x39<<7 | 0x1F, + 34401 - 19968: jis0212<<14 | 0x39<<7 | 0x20, + 34402 - 19968: jis0212<<14 | 0x39<<7 | 0x21, + 34403 - 19968: jis0212<<14 | 0x39<<7 | 0x22, + 34404 - 19968: jis0212<<14 | 0x39<<7 | 0x23, + 34407 - 19968: jis0208<<14 | 0x48<<7 | 0x2B, + 34409 - 19968: jis0212<<14 | 0x39<<7 | 0x24, + 34411 - 19968: jis0208<<14 | 0x22<<7 | 0x4D, + 34412 - 19968: jis0212<<14 | 0x39<<7 | 0x25, + 34415 - 19968: jis0212<<14 | 0x39<<7 | 0x26, + 34417 - 19968: jis0208<<14 | 0x48<<7 | 0x2C, + 34421 - 19968: jis0212<<14 | 0x39<<7 | 0x27, + 34422 - 19968: jis0212<<14 | 0x39<<7 | 0x28, + 34423 - 19968: jis0212<<14 | 0x39<<7 | 0x29, + 34425 - 19968: jis0208<<14 | 0x25<<7 | 0x59, + 34426 - 19968: jis0212<<14 | 0x39<<7 | 0x2A, + 34427 - 19968: jis0208<<14 | 0x0F<<7 | 0x19, + 34440 - 19968: jis0212<<14 | 0x39<<7 | 0x4C, + 34442 - 19968: jis0208<<14 | 0x11<<7 | 0x42, + 34443 - 19968: jis0208<<14 | 0x48<<7 | 0x31, + 34444 - 19968: jis0208<<14 | 0x48<<7 | 0x32, + 34445 - 19968: jis0212<<14 | 0x39<<7 | 0x2B, + 34449 - 19968: jis0212<<14 | 0x39<<7 | 0x2C, + 34451 - 19968: jis0208<<14 | 0x48<<7 | 0x2D, + 34453 - 19968: jis0208<<14 | 0x1A<<7 | 0x1C, + 34454 - 19968: jis0212<<14 | 0x39<<7 | 0x2D, + 34456 - 19968: jis0212<<14 | 0x39<<7 | 0x2E, + 34458 - 19968: jis0212<<14 | 0x39<<7 | 0x2F, + 34460 - 19968: jis0212<<14 | 0x39<<7 | 0x30, + 34465 - 19968: jis0212<<14 | 0x39<<7 | 0x31, + 34467 - 19968: jis0208<<14 | 0x48<<7 | 0x2E, + 34468 - 19968: jis0208<<14 | 0x26<<7 | 0x21, + 34470 - 19968: jis0212<<14 | 0x39<<7 | 0x32, + 34471 - 19968: jis0212<<14 | 0x39<<7 | 0x33, + 34472 - 19968: jis0212<<14 | 0x39<<7 | 0x34, + 34473 - 19968: jis0208<<14 | 0x48<<7 | 0x2F, + 34474 - 19968: jis0208<<14 | 0x48<<7 | 0x30, + 34475 - 19968: jis0208<<14 | 0x48<<7 | 0x3A, + 34477 - 19968: jis0212<<14 | 0x39<<7 | 0x35, + 34479 - 19968: jis0208<<14 | 0x48<<7 | 0x34, + 34480 - 19968: jis0208<<14 | 0x48<<7 | 0x37, + 34481 - 19968: jis0212<<14 | 0x39<<7 | 0x36, + 34483 - 19968: jis0212<<14 | 0x39<<7 | 0x37, + 34484 - 19968: jis0212<<14 | 0x39<<7 | 0x38, + 34485 - 19968: jis0212<<14 | 0x39<<7 | 0x39, + 34486 - 19968: jis0208<<14 | 0x48<<7 | 0x33, + 34487 - 19968: jis0212<<14 | 0x39<<7 | 0x3A, + 34488 - 19968: jis0212<<14 | 0x39<<7 | 0x3B, + 34489 - 19968: jis0212<<14 | 0x39<<7 | 0x3C, + 34495 - 19968: jis0212<<14 | 0x39<<7 | 0x3D, + 34496 - 19968: jis0212<<14 | 0x39<<7 | 0x3E, + 34497 - 19968: jis0212<<14 | 0x39<<7 | 0x3F, + 34499 - 19968: jis0212<<14 | 0x39<<7 | 0x40, + 34500 - 19968: jis0208<<14 | 0x48<<7 | 0x35, + 34501 - 19968: jis0212<<14 | 0x39<<7 | 0x41, + 34502 - 19968: jis0208<<14 | 0x48<<7 | 0x36, + 34503 - 19968: jis0208<<14 | 0x1B<<7 | 0x37, + 34505 - 19968: jis0208<<14 | 0x48<<7 | 0x38, + 34507 - 19968: jis0208<<14 | 0x22<<7 | 0x20, + 34509 - 19968: jis0208<<14 | 0x16<<7 | 0x35, + 34510 - 19968: jis0208<<14 | 0x12<<7 | 0x21, + 34513 - 19968: jis0212<<14 | 0x39<<7 | 0x42, + 34514 - 19968: jis0212<<14 | 0x39<<7 | 0x43, + 34516 - 19968: jis0208<<14 | 0x48<<7 | 0x3B, + 34517 - 19968: jis0212<<14 | 0x39<<7 | 0x44, + 34519 - 19968: jis0212<<14 | 0x39<<7 | 0x45, + 34521 - 19968: jis0208<<14 | 0x12<<7 | 0x1E, + 34522 - 19968: jis0212<<14 | 0x39<<7 | 0x46, + 34523 - 19968: jis0208<<14 | 0x48<<7 | 0x40, + 34524 - 19968: jis0212<<14 | 0x39<<7 | 0x47, + 34526 - 19968: jis0208<<14 | 0x48<<7 | 0x3C, + 34527 - 19968: jis0208<<14 | 0x48<<7 | 0x3F, + 34528 - 19968: jis0212<<14 | 0x39<<7 | 0x48, + 34531 - 19968: jis0212<<14 | 0x39<<7 | 0x49, + 34532 - 19968: jis0208<<14 | 0x27<<7 | 0x19, + 34533 - 19968: jis0212<<14 | 0x39<<7 | 0x4A, + 34535 - 19968: jis0212<<14 | 0x39<<7 | 0x4B, + 34537 - 19968: jis0208<<14 | 0x48<<7 | 0x3D, + 34540 - 19968: jis0208<<14 | 0x48<<7 | 0x3E, + 34541 - 19968: jis0208<<14 | 0x28<<7 | 0x27, + 34542 - 19968: jis0208<<14 | 0x27<<7 | 0x39, + 34543 - 19968: jis0208<<14 | 0x48<<7 | 0x41, + 34552 - 19968: jis0208<<14 | 0x21<<7 | 0x5C, + 34553 - 19968: jis0208<<14 | 0x48<<7 | 0x4B, + 34554 - 19968: jis0212<<14 | 0x39<<7 | 0x4D, + 34555 - 19968: jis0208<<14 | 0x48<<7 | 0x47, + 34556 - 19968: jis0212<<14 | 0x39<<7 | 0x4E, + 34557 - 19968: jis0212<<14 | 0x39<<7 | 0x4F, + 34558 - 19968: jis0208<<14 | 0x11<<7 | 0x4A, + 34560 - 19968: jis0208<<14 | 0x48<<7 | 0x45, + 34562 - 19968: jis0208<<14 | 0x2A<<7 | 0x09, + 34563 - 19968: jis0208<<14 | 0x48<<7 | 0x46, + 34564 - 19968: jis0212<<14 | 0x39<<7 | 0x50, + 34565 - 19968: jis0212<<14 | 0x39<<7 | 0x51, + 34566 - 19968: jis0208<<14 | 0x48<<7 | 0x43, + 34567 - 19968: jis0212<<14 | 0x39<<7 | 0x52, + 34568 - 19968: jis0208<<14 | 0x48<<7 | 0x44, + 34569 - 19968: jis0208<<14 | 0x48<<7 | 0x49, + 34570 - 19968: jis0208<<14 | 0x48<<7 | 0x4C, + 34571 - 19968: jis0212<<14 | 0x39<<7 | 0x53, + 34573 - 19968: jis0208<<14 | 0x48<<7 | 0x4A, + 34574 - 19968: jis0212<<14 | 0x39<<7 | 0x54, + 34575 - 19968: jis0212<<14 | 0x39<<7 | 0x55, + 34576 - 19968: jis0212<<14 | 0x39<<7 | 0x56, + 34577 - 19968: jis0208<<14 | 0x48<<7 | 0x48, + 34578 - 19968: jis0208<<14 | 0x48<<7 | 0x42, + 34579 - 19968: jis0212<<14 | 0x39<<7 | 0x57, + 34580 - 19968: jis0212<<14 | 0x39<<7 | 0x58, + 34584 - 19968: jis0208<<14 | 0x22<<7 | 0x37, + 34585 - 19968: jis0212<<14 | 0x39<<7 | 0x59, + 34586 - 19968: jis0208<<14 | 0x48<<7 | 0x53, + 34588 - 19968: jis0208<<14 | 0x2B<<7 | 0x09, + 34590 - 19968: jis0212<<14 | 0x39<<7 | 0x5A, + 34591 - 19968: jis0212<<14 | 0x39<<7 | 0x5B, + 34593 - 19968: jis0212<<14 | 0x39<<7 | 0x5C, + 34595 - 19968: jis0212<<14 | 0x39<<7 | 0x5D, + 34597 - 19968: jis0208<<14 | 0x48<<7 | 0x51, + 34600 - 19968: jis0212<<14 | 0x3A<<7 | 0x00, + 34601 - 19968: jis0208<<14 | 0x48<<7 | 0x52, + 34606 - 19968: jis0212<<14 | 0x3A<<7 | 0x01, + 34607 - 19968: jis0212<<14 | 0x3A<<7 | 0x02, + 34609 - 19968: jis0212<<14 | 0x3A<<7 | 0x03, + 34610 - 19968: jis0212<<14 | 0x3A<<7 | 0x04, + 34612 - 19968: jis0208<<14 | 0x48<<7 | 0x4D, + 34615 - 19968: jis0208<<14 | 0x48<<7 | 0x4F, + 34617 - 19968: jis0212<<14 | 0x3A<<7 | 0x05, + 34618 - 19968: jis0212<<14 | 0x3A<<7 | 0x06, + 34619 - 19968: jis0208<<14 | 0x48<<7 | 0x50, + 34620 - 19968: jis0212<<14 | 0x3A<<7 | 0x07, + 34621 - 19968: jis0212<<14 | 0x3A<<7 | 0x08, + 34622 - 19968: jis0212<<14 | 0x3A<<7 | 0x09, + 34623 - 19968: jis0208<<14 | 0x48<<7 | 0x4E, + 34624 - 19968: jis0212<<14 | 0x3A<<7 | 0x0A, + 34627 - 19968: jis0212<<14 | 0x3A<<7 | 0x0B, + 34629 - 19968: jis0212<<14 | 0x3A<<7 | 0x0C, + 34633 - 19968: jis0208<<14 | 0x1F<<7 | 0x45, + 34635 - 19968: jis0208<<14 | 0x2E<<7 | 0x18, + 34636 - 19968: jis0208<<14 | 0x48<<7 | 0x57, + 34637 - 19968: jis0212<<14 | 0x3A<<7 | 0x0D, + 34638 - 19968: jis0208<<14 | 0x48<<7 | 0x58, + 34643 - 19968: jis0208<<14 | 0x49<<7 | 0x00, + 34645 - 19968: jis0208<<14 | 0x1E<<7 | 0x09, + 34647 - 19968: jis0208<<14 | 0x48<<7 | 0x5A, + 34648 - 19968: jis0212<<14 | 0x3A<<7 | 0x0E, + 34649 - 19968: jis0208<<14 | 0x48<<7 | 0x5D, + 34653 - 19968: jis0212<<14 | 0x3A<<7 | 0x0F, + 34655 - 19968: jis0208<<14 | 0x48<<7 | 0x55, + 34656 - 19968: jis0208<<14 | 0x48<<7 | 0x54, + 34657 - 19968: jis0212<<14 | 0x3A<<7 | 0x10, + 34659 - 19968: jis0208<<14 | 0x49<<7 | 0x01, + 34660 - 19968: jis0212<<14 | 0x3A<<7 | 0x11, + 34661 - 19968: jis0212<<14 | 0x3A<<7 | 0x12, + 34662 - 19968: jis0208<<14 | 0x11<<7 | 0x3B, + 34664 - 19968: jis0208<<14 | 0x48<<7 | 0x5B, + 34666 - 19968: jis0208<<14 | 0x49<<7 | 0x02, + 34670 - 19968: jis0208<<14 | 0x48<<7 | 0x5C, + 34671 - 19968: jis0212<<14 | 0x3A<<7 | 0x13, + 34673 - 19968: jis0212<<14 | 0x3A<<7 | 0x14, + 34674 - 19968: jis0212<<14 | 0x3A<<7 | 0x15, + 34676 - 19968: jis0208<<14 | 0x48<<7 | 0x59, + 34678 - 19968: jis0208<<14 | 0x23<<7 | 0x12, + 34680 - 19968: jis0208<<14 | 0x48<<7 | 0x56, + 34683 - 19968: jis0212<<14 | 0x3A<<7 | 0x16, + 34687 - 19968: jis0208<<14 | 0x26<<7 | 0x47, + 34690 - 19968: jis0208<<14 | 0x49<<7 | 0x06, + 34691 - 19968: jis0212<<14 | 0x3A<<7 | 0x17, + 34692 - 19968: jis0212<<14 | 0x3A<<7 | 0x18, + 34693 - 19968: jis0212<<14 | 0x3A<<7 | 0x19, + 34694 - 19968: jis0212<<14 | 0x3A<<7 | 0x1A, + 34695 - 19968: jis0212<<14 | 0x3A<<7 | 0x1B, + 34696 - 19968: jis0212<<14 | 0x3A<<7 | 0x1C, + 34697 - 19968: jis0212<<14 | 0x3A<<7 | 0x1D, + 34699 - 19968: jis0212<<14 | 0x3A<<7 | 0x1E, + 34700 - 19968: jis0212<<14 | 0x3A<<7 | 0x1F, + 34701 - 19968: jis0208<<14 | 0x2C<<7 | 0x1A, + 34704 - 19968: jis0212<<14 | 0x3A<<7 | 0x20, + 34707 - 19968: jis0212<<14 | 0x3A<<7 | 0x21, + 34709 - 19968: jis0212<<14 | 0x3A<<7 | 0x22, + 34711 - 19968: jis0212<<14 | 0x3A<<7 | 0x23, + 34712 - 19968: jis0212<<14 | 0x3A<<7 | 0x24, + 34713 - 19968: jis0212<<14 | 0x3A<<7 | 0x25, + 34718 - 19968: jis0212<<14 | 0x3A<<7 | 0x26, + 34719 - 19968: jis0208<<14 | 0x49<<7 | 0x05, + 34720 - 19968: jis0212<<14 | 0x3A<<7 | 0x27, + 34722 - 19968: jis0208<<14 | 0x49<<7 | 0x04, + 34723 - 19968: jis0212<<14 | 0x3A<<7 | 0x28, + 34727 - 19968: jis0212<<14 | 0x3A<<7 | 0x29, + 34731 - 19968: jis0208<<14 | 0x49<<7 | 0x0D, + 34732 - 19968: jis0212<<14 | 0x3A<<7 | 0x2A, + 34733 - 19968: jis0212<<14 | 0x3A<<7 | 0x2B, + 34734 - 19968: jis0212<<14 | 0x3A<<7 | 0x2C, + 34735 - 19968: jis0208<<14 | 0x49<<7 | 0x07, + 34737 - 19968: jis0212<<14 | 0x3A<<7 | 0x2D, + 34739 - 19968: jis0208<<14 | 0x49<<7 | 0x0F, + 34741 - 19968: jis0212<<14 | 0x3A<<7 | 0x2E, + 34746 - 19968: jis0208<<14 | 0x2C<<7 | 0x45, + 34747 - 19968: jis0208<<14 | 0x49<<7 | 0x12, + 34749 - 19968: jis0208<<14 | 0x49<<7 | 0x09, + 34750 - 19968: jis0212<<14 | 0x3A<<7 | 0x2F, + 34751 - 19968: jis0212<<14 | 0x3A<<7 | 0x30, + 34752 - 19968: jis0208<<14 | 0x49<<7 | 0x0A, + 34753 - 19968: jis0212<<14 | 0x3A<<7 | 0x31, + 34756 - 19968: jis0208<<14 | 0x49<<7 | 0x0E, + 34758 - 19968: jis0208<<14 | 0x49<<7 | 0x11, + 34759 - 19968: jis0208<<14 | 0x49<<7 | 0x10, + 34760 - 19968: jis0212<<14 | 0x3A<<7 | 0x32, + 34761 - 19968: jis0212<<14 | 0x3A<<7 | 0x33, + 34762 - 19968: jis0212<<14 | 0x3A<<7 | 0x34, + 34763 - 19968: jis0208<<14 | 0x49<<7 | 0x08, + 34766 - 19968: jis0212<<14 | 0x3A<<7 | 0x35, + 34768 - 19968: jis0208<<14 | 0x49<<7 | 0x0B, + 34770 - 19968: jis0208<<14 | 0x49<<7 | 0x1C, + 34773 - 19968: jis0212<<14 | 0x3A<<7 | 0x36, + 34774 - 19968: jis0212<<14 | 0x3A<<7 | 0x37, + 34777 - 19968: jis0212<<14 | 0x3A<<7 | 0x38, + 34778 - 19968: jis0212<<14 | 0x3A<<7 | 0x39, + 34780 - 19968: jis0212<<14 | 0x3A<<7 | 0x3A, + 34783 - 19968: jis0212<<14 | 0x3A<<7 | 0x3B, + 34784 - 19968: jis0208<<14 | 0x49<<7 | 0x15, + 34786 - 19968: jis0212<<14 | 0x3A<<7 | 0x3C, + 34787 - 19968: jis0212<<14 | 0x3A<<7 | 0x3D, + 34788 - 19968: jis0212<<14 | 0x3A<<7 | 0x3E, + 34794 - 19968: jis0212<<14 | 0x3A<<7 | 0x3F, + 34795 - 19968: jis0212<<14 | 0x3A<<7 | 0x40, + 34797 - 19968: jis0212<<14 | 0x3A<<7 | 0x41, + 34799 - 19968: jis0208<<14 | 0x49<<7 | 0x13, + 34801 - 19968: jis0212<<14 | 0x3A<<7 | 0x42, + 34802 - 19968: jis0208<<14 | 0x49<<7 | 0x14, + 34803 - 19968: jis0212<<14 | 0x3A<<7 | 0x43, + 34806 - 19968: jis0208<<14 | 0x49<<7 | 0x19, + 34807 - 19968: jis0208<<14 | 0x49<<7 | 0x1A, + 34808 - 19968: jis0212<<14 | 0x3A<<7 | 0x44, + 34809 - 19968: jis0208<<14 | 0x12<<7 | 0x09, + 34810 - 19968: jis0212<<14 | 0x3A<<7 | 0x45, + 34811 - 19968: jis0208<<14 | 0x14<<7 | 0x21, + 34814 - 19968: jis0208<<14 | 0x49<<7 | 0x18, + 34815 - 19968: jis0212<<14 | 0x3A<<7 | 0x46, + 34817 - 19968: jis0212<<14 | 0x3A<<7 | 0x47, + 34819 - 19968: jis0212<<14 | 0x3A<<7 | 0x48, + 34821 - 19968: jis0208<<14 | 0x49<<7 | 0x03, + 34822 - 19968: jis0212<<14 | 0x3A<<7 | 0x49, + 34823 - 19968: jis0208<<14 | 0x5A<<7 | 0x44, + 34825 - 19968: jis0212<<14 | 0x3A<<7 | 0x4A, + 34826 - 19968: jis0212<<14 | 0x3A<<7 | 0x4B, + 34827 - 19968: jis0212<<14 | 0x3A<<7 | 0x4C, + 34829 - 19968: jis0208<<14 | 0x49<<7 | 0x17, + 34830 - 19968: jis0208<<14 | 0x49<<7 | 0x1B, + 34831 - 19968: jis0208<<14 | 0x49<<7 | 0x16, + 34832 - 19968: jis0212<<14 | 0x3A<<7 | 0x4D, + 34833 - 19968: jis0208<<14 | 0x49<<7 | 0x1D, + 34834 - 19968: jis0212<<14 | 0x3A<<7 | 0x4F, + 34835 - 19968: jis0212<<14 | 0x3A<<7 | 0x50, + 34836 - 19968: jis0212<<14 | 0x3A<<7 | 0x51, + 34837 - 19968: jis0208<<14 | 0x49<<7 | 0x1F, + 34838 - 19968: jis0208<<14 | 0x49<<7 | 0x1E, + 34840 - 19968: jis0212<<14 | 0x3A<<7 | 0x52, + 34841 - 19968: jis0212<<14 | 0x3A<<7 | 0x4E, + 34842 - 19968: jis0212<<14 | 0x3A<<7 | 0x53, + 34843 - 19968: jis0212<<14 | 0x3A<<7 | 0x54, + 34844 - 19968: jis0212<<14 | 0x3A<<7 | 0x55, + 34846 - 19968: jis0212<<14 | 0x3A<<7 | 0x56, + 34847 - 19968: jis0212<<14 | 0x3A<<7 | 0x57, + 34849 - 19968: jis0208<<14 | 0x49<<7 | 0x21, + 34850 - 19968: jis0208<<14 | 0x49<<7 | 0x20, + 34851 - 19968: jis0208<<14 | 0x48<<7 | 0x39, + 34855 - 19968: jis0208<<14 | 0x49<<7 | 0x25, + 34856 - 19968: jis0212<<14 | 0x3A<<7 | 0x58, + 34861 - 19968: jis0212<<14 | 0x3A<<7 | 0x59, + 34862 - 19968: jis0212<<14 | 0x3A<<7 | 0x5A, + 34864 - 19968: jis0212<<14 | 0x3A<<7 | 0x5B, + 34865 - 19968: jis0208<<14 | 0x49<<7 | 0x22, + 34866 - 19968: jis0212<<14 | 0x3A<<7 | 0x5C, + 34869 - 19968: jis0212<<14 | 0x3A<<7 | 0x5D, + 34870 - 19968: jis0208<<14 | 0x49<<7 | 0x23, + 34873 - 19968: jis0208<<14 | 0x49<<7 | 0x24, + 34874 - 19968: jis0212<<14 | 0x3B<<7 | 0x00, + 34875 - 19968: jis0208<<14 | 0x49<<7 | 0x26, + 34876 - 19968: jis0212<<14 | 0x3B<<7 | 0x01, + 34880 - 19968: jis0208<<14 | 0x16<<7 | 0x4B, + 34881 - 19968: jis0212<<14 | 0x3B<<7 | 0x02, + 34882 - 19968: jis0208<<14 | 0x49<<7 | 0x28, + 34883 - 19968: jis0212<<14 | 0x3B<<7 | 0x03, + 34884 - 19968: jis0208<<14 | 0x49<<7 | 0x27, + 34885 - 19968: jis0212<<14 | 0x3B<<7 | 0x04, + 34886 - 19968: jis0208<<14 | 0x1C<<7 | 0x0F, + 34888 - 19968: jis0212<<14 | 0x3B<<7 | 0x05, + 34889 - 19968: jis0212<<14 | 0x3B<<7 | 0x06, + 34890 - 19968: jis0212<<14 | 0x3B<<7 | 0x07, + 34891 - 19968: jis0212<<14 | 0x3B<<7 | 0x08, + 34892 - 19968: jis0208<<14 | 0x18<<7 | 0x33, + 34893 - 19968: jis0208<<14 | 0x3D<<7 | 0x06, + 34894 - 19968: jis0212<<14 | 0x3B<<7 | 0x09, + 34897 - 19968: jis0212<<14 | 0x3B<<7 | 0x0A, + 34898 - 19968: jis0208<<14 | 0x49<<7 | 0x29, + 34899 - 19968: jis0208<<14 | 0x1C<<7 | 0x30, + 34901 - 19968: jis0212<<14 | 0x3B<<7 | 0x0B, + 34902 - 19968: jis0212<<14 | 0x3B<<7 | 0x0C, + 34903 - 19968: jis0208<<14 | 0x12<<7 | 0x18, + 34904 - 19968: jis0212<<14 | 0x3B<<7 | 0x0D, + 34905 - 19968: jis0208<<14 | 0x49<<7 | 0x2A, + 34906 - 19968: jis0212<<14 | 0x3B<<7 | 0x0E, + 34907 - 19968: jis0208<<14 | 0x10<<7 | 0x31, + 34908 - 19968: jis0212<<14 | 0x3B<<7 | 0x0F, + 34909 - 19968: jis0208<<14 | 0x1D<<7 | 0x36, + 34910 - 19968: jis0208<<14 | 0x49<<7 | 0x2B, + 34911 - 19968: jis0212<<14 | 0x3B<<7 | 0x10, + 34912 - 19968: jis0212<<14 | 0x3B<<7 | 0x11, + 34913 - 19968: jis0208<<14 | 0x18<<7 | 0x34, + 34914 - 19968: jis0208<<14 | 0x49<<7 | 0x2C, + 34915 - 19968: jis0208<<14 | 0x0F<<7 | 0x40, + 34916 - 19968: jis0212<<14 | 0x3B<<7 | 0x12, + 34920 - 19968: jis0208<<14 | 0x28<<7 | 0x1C, + 34921 - 19968: jis0212<<14 | 0x3B<<7 | 0x13, + 34923 - 19968: jis0208<<14 | 0x49<<7 | 0x2D, + 34928 - 19968: jis0208<<14 | 0x1E<<7 | 0x49, + 34929 - 19968: jis0212<<14 | 0x3B<<7 | 0x14, + 34930 - 19968: jis0208<<14 | 0x49<<7 | 0x34, + 34933 - 19968: jis0208<<14 | 0x49<<7 | 0x31, + 34935 - 19968: jis0208<<14 | 0x22<<7 | 0x4E, + 34937 - 19968: jis0212<<14 | 0x3B<<7 | 0x15, + 34939 - 19968: jis0212<<14 | 0x3B<<7 | 0x16, + 34941 - 19968: jis0208<<14 | 0x49<<7 | 0x32, + 34942 - 19968: jis0208<<14 | 0x49<<7 | 0x2F, + 34943 - 19968: jis0208<<14 | 0x15<<7 | 0x3D, + 34944 - 19968: jis0212<<14 | 0x3B<<7 | 0x17, + 34945 - 19968: jis0208<<14 | 0x49<<7 | 0x2E, + 34946 - 19968: jis0208<<14 | 0x49<<7 | 0x35, + 34952 - 19968: jis0208<<14 | 0x16<<7 | 0x15, + 34955 - 19968: jis0208<<14 | 0x21<<7 | 0x3D, + 34957 - 19968: jis0208<<14 | 0x49<<7 | 0x3B, + 34962 - 19968: jis0208<<14 | 0x49<<7 | 0x37, + 34966 - 19968: jis0208<<14 | 0x21<<7 | 0x14, + 34967 - 19968: jis0208<<14 | 0x49<<7 | 0x36, + 34968 - 19968: jis0212<<14 | 0x3B<<7 | 0x18, + 34969 - 19968: jis0208<<14 | 0x49<<7 | 0x39, + 34970 - 19968: jis0212<<14 | 0x3B<<7 | 0x19, + 34971 - 19968: jis0212<<14 | 0x3B<<7 | 0x1A, + 34972 - 19968: jis0212<<14 | 0x3B<<7 | 0x1B, + 34974 - 19968: jis0208<<14 | 0x49<<7 | 0x30, + 34975 - 19968: jis0212<<14 | 0x3B<<7 | 0x1C, + 34976 - 19968: jis0212<<14 | 0x3B<<7 | 0x1D, + 34978 - 19968: jis0208<<14 | 0x49<<7 | 0x3A, + 34980 - 19968: jis0208<<14 | 0x49<<7 | 0x3C, + 34984 - 19968: jis0212<<14 | 0x3B<<7 | 0x1E, + 34986 - 19968: jis0212<<14 | 0x3B<<7 | 0x1F, + 34987 - 19968: jis0208<<14 | 0x27<<7 | 0x4E, + 34990 - 19968: jis0208<<14 | 0x49<<7 | 0x38, + 34992 - 19968: jis0208<<14 | 0x49<<7 | 0x3D, + 34993 - 19968: jis0208<<14 | 0x49<<7 | 0x3F, + 34996 - 19968: jis0208<<14 | 0x17<<7 | 0x32, + 34997 - 19968: jis0208<<14 | 0x49<<7 | 0x33, + 34999 - 19968: jis0208<<14 | 0x0F<<7 | 0x20, + 35002 - 19968: jis0212<<14 | 0x3B<<7 | 0x20, + 35005 - 19968: jis0212<<14 | 0x3B<<7 | 0x21, + 35006 - 19968: jis0212<<14 | 0x3B<<7 | 0x22, + 35007 - 19968: jis0208<<14 | 0x49<<7 | 0x3E, + 35008 - 19968: jis0212<<14 | 0x3B<<7 | 0x23, + 35009 - 19968: jis0208<<14 | 0x19<<7 | 0x3A, + 35010 - 19968: jis0208<<14 | 0x2D<<7 | 0x55, + 35011 - 19968: jis0208<<14 | 0x49<<7 | 0x40, + 35012 - 19968: jis0208<<14 | 0x49<<7 | 0x41, + 35013 - 19968: jis0208<<14 | 0x20<<7 | 0x54, + 35018 - 19968: jis0212<<14 | 0x3B<<7 | 0x24, + 35019 - 19968: jis0212<<14 | 0x3B<<7 | 0x25, + 35020 - 19968: jis0212<<14 | 0x3B<<7 | 0x26, + 35021 - 19968: jis0212<<14 | 0x3B<<7 | 0x27, + 35022 - 19968: jis0212<<14 | 0x3B<<7 | 0x28, + 35023 - 19968: jis0208<<14 | 0x2D<<7 | 0x01, + 35025 - 19968: jis0212<<14 | 0x3B<<7 | 0x29, + 35026 - 19968: jis0212<<14 | 0x3B<<7 | 0x2A, + 35027 - 19968: jis0212<<14 | 0x3B<<7 | 0x2B, + 35028 - 19968: jis0208<<14 | 0x49<<7 | 0x42, + 35029 - 19968: jis0208<<14 | 0x2C<<7 | 0x14, + 35032 - 19968: jis0208<<14 | 0x49<<7 | 0x43, + 35033 - 19968: jis0208<<14 | 0x49<<7 | 0x44, + 35035 - 19968: jis0212<<14 | 0x3B<<7 | 0x2C, + 35036 - 19968: jis0208<<14 | 0x29<<7 | 0x43, + 35037 - 19968: jis0208<<14 | 0x49<<7 | 0x45, + 35038 - 19968: jis0212<<14 | 0x3B<<7 | 0x2D, + 35039 - 19968: jis0208<<14 | 0x19<<7 | 0x1F, + 35041 - 19968: jis0208<<14 | 0x2D<<7 | 0x02, + 35047 - 19968: jis0212<<14 | 0x3B<<7 | 0x2E, + 35048 - 19968: jis0208<<14 | 0x49<<7 | 0x4A, + 35055 - 19968: jis0212<<14 | 0x3B<<7 | 0x2F, + 35056 - 19968: jis0212<<14 | 0x3B<<7 | 0x30, + 35057 - 19968: jis0212<<14 | 0x3B<<7 | 0x31, + 35058 - 19968: jis0208<<14 | 0x49<<7 | 0x4B, + 35059 - 19968: jis0208<<14 | 0x1D<<7 | 0x37, + 35060 - 19968: jis0208<<14 | 0x49<<7 | 0x49, + 35061 - 19968: jis0208<<14 | 0x5A<<7 | 0x45, + 35063 - 19968: jis0212<<14 | 0x3B<<7 | 0x33, + 35064 - 19968: jis0208<<14 | 0x2C<<7 | 0x46, + 35065 - 19968: jis0208<<14 | 0x49<<7 | 0x46, + 35068 - 19968: jis0208<<14 | 0x49<<7 | 0x48, + 35069 - 19968: jis0208<<14 | 0x1F<<7 | 0x1C, + 35070 - 19968: jis0208<<14 | 0x1E<<7 | 0x5D, + 35073 - 19968: jis0212<<14 | 0x3B<<7 | 0x34, + 35074 - 19968: jis0208<<14 | 0x49<<7 | 0x47, + 35076 - 19968: jis0208<<14 | 0x49<<7 | 0x4C, + 35078 - 19968: jis0212<<14 | 0x3B<<7 | 0x35, + 35079 - 19968: jis0208<<14 | 0x29<<7 | 0x02, + 35082 - 19968: jis0208<<14 | 0x49<<7 | 0x4E, + 35084 - 19968: jis0208<<14 | 0x49<<7 | 0x4D, + 35085 - 19968: jis0212<<14 | 0x3B<<7 | 0x36, + 35086 - 19968: jis0212<<14 | 0x3B<<7 | 0x37, + 35087 - 19968: jis0212<<14 | 0x3B<<7 | 0x38, + 35088 - 19968: jis0208<<14 | 0x12<<7 | 0x4B, + 35090 - 19968: jis0208<<14 | 0x2A<<7 | 0x0A, + 35091 - 19968: jis0208<<14 | 0x49<<7 | 0x4F, + 35093 - 19968: jis0212<<14 | 0x3B<<7 | 0x39, + 35094 - 19968: jis0212<<14 | 0x3B<<7 | 0x3A, + 35096 - 19968: jis0212<<14 | 0x3B<<7 | 0x3B, + 35097 - 19968: jis0212<<14 | 0x3B<<7 | 0x3C, + 35098 - 19968: jis0212<<14 | 0x3B<<7 | 0x3D, + 35100 - 19968: jis0208<<14 | 0x58<<7 | 0x01, + 35101 - 19968: jis0208<<14 | 0x49<<7 | 0x5B, + 35102 - 19968: jis0208<<14 | 0x49<<7 | 0x51, + 35104 - 19968: jis0212<<14 | 0x3B<<7 | 0x3F, + 35109 - 19968: jis0208<<14 | 0x49<<7 | 0x52, + 35110 - 19968: jis0212<<14 | 0x3B<<7 | 0x40, + 35111 - 19968: jis0212<<14 | 0x3B<<7 | 0x41, + 35112 - 19968: jis0212<<14 | 0x3B<<7 | 0x42, + 35114 - 19968: jis0208<<14 | 0x49<<7 | 0x53, + 35115 - 19968: jis0208<<14 | 0x49<<7 | 0x54, + 35120 - 19968: jis0212<<14 | 0x3B<<7 | 0x43, + 35121 - 19968: jis0212<<14 | 0x3B<<7 | 0x44, + 35122 - 19968: jis0212<<14 | 0x3B<<7 | 0x45, + 35125 - 19968: jis0212<<14 | 0x3B<<7 | 0x46, + 35126 - 19968: jis0208<<14 | 0x49<<7 | 0x58, + 35128 - 19968: jis0208<<14 | 0x49<<7 | 0x59, + 35129 - 19968: jis0212<<14 | 0x3B<<7 | 0x47, + 35130 - 19968: jis0212<<14 | 0x3B<<7 | 0x48, + 35131 - 19968: jis0208<<14 | 0x49<<7 | 0x57, + 35134 - 19968: jis0212<<14 | 0x3B<<7 | 0x49, + 35136 - 19968: jis0212<<14 | 0x3B<<7 | 0x4A, + 35137 - 19968: jis0208<<14 | 0x49<<7 | 0x55, + 35138 - 19968: jis0212<<14 | 0x3B<<7 | 0x4B, + 35139 - 19968: jis0208<<14 | 0x49<<7 | 0x50, + 35140 - 19968: jis0208<<14 | 0x49<<7 | 0x56, + 35141 - 19968: jis0212<<14 | 0x3B<<7 | 0x4C, + 35142 - 19968: jis0212<<14 | 0x3B<<7 | 0x4D, + 35145 - 19968: jis0212<<14 | 0x3B<<7 | 0x4E, + 35148 - 19968: jis0208<<14 | 0x49<<7 | 0x5A, + 35149 - 19968: jis0208<<14 | 0x4F<<7 | 0x16, + 35151 - 19968: jis0212<<14 | 0x3B<<7 | 0x4F, + 35154 - 19968: jis0212<<14 | 0x3B<<7 | 0x50, + 35158 - 19968: jis0208<<14 | 0x11<<7 | 0x07, + 35159 - 19968: jis0212<<14 | 0x3B<<7 | 0x51, + 35162 - 19968: jis0212<<14 | 0x3B<<7 | 0x52, + 35163 - 19968: jis0212<<14 | 0x3B<<7 | 0x53, + 35164 - 19968: jis0212<<14 | 0x3B<<7 | 0x54, + 35166 - 19968: jis0208<<14 | 0x49<<7 | 0x5D, + 35167 - 19968: jis0208<<14 | 0x15<<7 | 0x3E, + 35168 - 19968: jis0208<<14 | 0x49<<7 | 0x5C, + 35169 - 19968: jis0212<<14 | 0x3B<<7 | 0x55, + 35170 - 19968: jis0212<<14 | 0x3B<<7 | 0x56, + 35171 - 19968: jis0212<<14 | 0x3B<<7 | 0x57, + 35172 - 19968: jis0208<<14 | 0x4A<<7 | 0x01, + 35174 - 19968: jis0208<<14 | 0x4A<<7 | 0x00, + 35178 - 19968: jis0208<<14 | 0x4A<<7 | 0x03, + 35179 - 19968: jis0212<<14 | 0x3B<<7 | 0x58, + 35181 - 19968: jis0208<<14 | 0x4A<<7 | 0x02, + 35182 - 19968: jis0212<<14 | 0x3B<<7 | 0x59, + 35183 - 19968: jis0208<<14 | 0x4A<<7 | 0x04, + 35184 - 19968: jis0212<<14 | 0x3B<<7 | 0x5A, + 35186 - 19968: jis0208<<14 | 0x1C<<7 | 0x10, + 35187 - 19968: jis0212<<14 | 0x3B<<7 | 0x5B, + 35188 - 19968: jis0208<<14 | 0x4A<<7 | 0x05, + 35189 - 19968: jis0212<<14 | 0x3B<<7 | 0x5C, + 35191 - 19968: jis0208<<14 | 0x4A<<7 | 0x06, + 35194 - 19968: jis0212<<14 | 0x3B<<7 | 0x5D, + 35195 - 19968: jis0212<<14 | 0x3C<<7 | 0x00, + 35196 - 19968: jis0212<<14 | 0x3C<<7 | 0x01, + 35197 - 19968: jis0212<<14 | 0x3C<<7 | 0x02, + 35198 - 19968: jis0208<<14 | 0x4A<<7 | 0x07, + 35199 - 19968: jis0208<<14 | 0x1F<<7 | 0x1D, + 35201 - 19968: jis0208<<14 | 0x2C<<7 | 0x36, + 35203 - 19968: jis0208<<14 | 0x4A<<7 | 0x08, + 35206 - 19968: jis0208<<14 | 0x29<<7 | 0x03, + 35207 - 19968: jis0208<<14 | 0x26<<7 | 0x25, + 35208 - 19968: jis0208<<14 | 0x4A<<7 | 0x09, + 35209 - 19968: jis0212<<14 | 0x3C<<7 | 0x03, + 35210 - 19968: jis0208<<14 | 0x4A<<7 | 0x0A, + 35211 - 19968: jis0208<<14 | 0x17<<7 | 0x0A, + 35213 - 19968: jis0212<<14 | 0x3C<<7 | 0x04, + 35215 - 19968: jis0208<<14 | 0x14<<7 | 0x0B, + 35216 - 19968: jis0212<<14 | 0x3C<<7 | 0x05, + 35219 - 19968: jis0208<<14 | 0x4A<<7 | 0x0B, + 35220 - 19968: jis0212<<14 | 0x3C<<7 | 0x06, + 35221 - 19968: jis0212<<14 | 0x3C<<7 | 0x07, + 35222 - 19968: jis0208<<14 | 0x1A<<7 | 0x4A, + 35223 - 19968: jis0208<<14 | 0x26<<7 | 0x20, + 35224 - 19968: jis0208<<14 | 0x4A<<7 | 0x0C, + 35226 - 19968: jis0208<<14 | 0x12<<7 | 0x2F, + 35227 - 19968: jis0212<<14 | 0x3C<<7 | 0x08, + 35228 - 19968: jis0212<<14 | 0x3C<<7 | 0x09, + 35231 - 19968: jis0212<<14 | 0x3C<<7 | 0x0A, + 35232 - 19968: jis0212<<14 | 0x3C<<7 | 0x0B, + 35233 - 19968: jis0208<<14 | 0x4A<<7 | 0x0D, + 35237 - 19968: jis0212<<14 | 0x3C<<7 | 0x0C, + 35238 - 19968: jis0208<<14 | 0x4A<<7 | 0x0F, + 35239 - 19968: jis0208<<14 | 0x2C<<7 | 0x56, + 35241 - 19968: jis0208<<14 | 0x4A<<7 | 0x0E, + 35242 - 19968: jis0208<<14 | 0x1E<<7 | 0x25, + 35244 - 19968: jis0208<<14 | 0x4A<<7 | 0x10, + 35247 - 19968: jis0208<<14 | 0x4A<<7 | 0x11, + 35248 - 19968: jis0212<<14 | 0x3C<<7 | 0x0D, + 35250 - 19968: jis0208<<14 | 0x4A<<7 | 0x12, + 35251 - 19968: jis0208<<14 | 0x13<<7 | 0x30, + 35252 - 19968: jis0212<<14 | 0x3C<<7 | 0x0E, + 35253 - 19968: jis0212<<14 | 0x3C<<7 | 0x0F, + 35254 - 19968: jis0212<<14 | 0x3C<<7 | 0x10, + 35255 - 19968: jis0212<<14 | 0x3C<<7 | 0x11, + 35258 - 19968: jis0208<<14 | 0x4A<<7 | 0x13, + 35260 - 19968: jis0212<<14 | 0x3C<<7 | 0x12, + 35261 - 19968: jis0208<<14 | 0x4A<<7 | 0x14, + 35263 - 19968: jis0208<<14 | 0x4A<<7 | 0x15, + 35264 - 19968: jis0208<<14 | 0x4A<<7 | 0x16, + 35282 - 19968: jis0208<<14 | 0x12<<7 | 0x30, + 35284 - 19968: jis0212<<14 | 0x3C<<7 | 0x13, + 35285 - 19968: jis0212<<14 | 0x3C<<7 | 0x14, + 35286 - 19968: jis0212<<14 | 0x3C<<7 | 0x15, + 35287 - 19968: jis0212<<14 | 0x3C<<7 | 0x16, + 35288 - 19968: jis0212<<14 | 0x3C<<7 | 0x17, + 35290 - 19968: jis0208<<14 | 0x4A<<7 | 0x17, + 35292 - 19968: jis0208<<14 | 0x4A<<7 | 0x18, + 35293 - 19968: jis0208<<14 | 0x4A<<7 | 0x19, + 35299 - 19968: jis0208<<14 | 0x11<<7 | 0x51, + 35301 - 19968: jis0212<<14 | 0x3C<<7 | 0x18, + 35302 - 19968: jis0208<<14 | 0x1E<<7 | 0x07, + 35303 - 19968: jis0208<<14 | 0x4A<<7 | 0x1A, + 35305 - 19968: jis0212<<14 | 0x3C<<7 | 0x19, + 35307 - 19968: jis0212<<14 | 0x3C<<7 | 0x1A, + 35309 - 19968: jis0212<<14 | 0x3C<<7 | 0x1B, + 35313 - 19968: jis0212<<14 | 0x3C<<7 | 0x1C, + 35315 - 19968: jis0212<<14 | 0x3C<<7 | 0x1D, + 35316 - 19968: jis0208<<14 | 0x4A<<7 | 0x1B, + 35318 - 19968: jis0212<<14 | 0x3C<<7 | 0x1E, + 35320 - 19968: jis0208<<14 | 0x4A<<7 | 0x1C, + 35321 - 19968: jis0212<<14 | 0x3C<<7 | 0x1F, + 35325 - 19968: jis0212<<14 | 0x3C<<7 | 0x20, + 35327 - 19968: jis0212<<14 | 0x3C<<7 | 0x21, + 35328 - 19968: jis0208<<14 | 0x17<<7 | 0x1F, + 35330 - 19968: jis0208<<14 | 0x23<<7 | 0x5A, + 35331 - 19968: jis0208<<14 | 0x4A<<7 | 0x1D, + 35332 - 19968: jis0212<<14 | 0x3C<<7 | 0x22, + 35333 - 19968: jis0212<<14 | 0x3C<<7 | 0x23, + 35335 - 19968: jis0212<<14 | 0x3C<<7 | 0x24, + 35336 - 19968: jis0208<<14 | 0x16<<7 | 0x36, + 35338 - 19968: jis0208<<14 | 0x1E<<7 | 0x35, + 35340 - 19968: jis0208<<14 | 0x4A<<7 | 0x20, + 35342 - 19968: jis0208<<14 | 0x25<<7 | 0x03, + 35343 - 19968: jis0212<<14 | 0x3C<<7 | 0x25, + 35344 - 19968: jis0208<<14 | 0x4A<<7 | 0x1F, + 35345 - 19968: jis0212<<14 | 0x3C<<7 | 0x26, + 35346 - 19968: jis0208<<14 | 0x5A<<7 | 0x46, + 35347 - 19968: jis0208<<14 | 0x16<<7 | 0x10, + 35348 - 19968: jis0212<<14 | 0x3C<<7 | 0x28, + 35349 - 19968: jis0212<<14 | 0x3C<<7 | 0x29, + 35350 - 19968: jis0208<<14 | 0x4A<<7 | 0x1E, + 35351 - 19968: jis0208<<14 | 0x21<<7 | 0x56, + 35352 - 19968: jis0208<<14 | 0x14<<7 | 0x0C, + 35355 - 19968: jis0208<<14 | 0x4A<<7 | 0x21, + 35357 - 19968: jis0208<<14 | 0x4A<<7 | 0x22, + 35358 - 19968: jis0212<<14 | 0x3C<<7 | 0x2A, + 35359 - 19968: jis0208<<14 | 0x1D<<7 | 0x38, + 35360 - 19968: jis0212<<14 | 0x3C<<7 | 0x2B, + 35362 - 19968: jis0212<<14 | 0x3C<<7 | 0x2C, + 35363 - 19968: jis0208<<14 | 0x16<<7 | 0x4C, + 35364 - 19968: jis0212<<14 | 0x3C<<7 | 0x2D, + 35365 - 19968: jis0208<<14 | 0x4A<<7 | 0x23, + 35366 - 19968: jis0212<<14 | 0x3C<<7 | 0x2E, + 35370 - 19968: jis0208<<14 | 0x2A<<7 | 0x0B, + 35371 - 19968: jis0212<<14 | 0x3C<<7 | 0x2F, + 35372 - 19968: jis0212<<14 | 0x3C<<7 | 0x30, + 35373 - 19968: jis0208<<14 | 0x1F<<7 | 0x3E, + 35375 - 19968: jis0212<<14 | 0x3C<<7 | 0x31, + 35377 - 19968: jis0208<<14 | 0x14<<7 | 0x55, + 35379 - 19968: jis0208<<14 | 0x2B<<7 | 0x54, + 35380 - 19968: jis0208<<14 | 0x20<<7 | 0x29, + 35381 - 19968: jis0212<<14 | 0x3C<<7 | 0x32, + 35382 - 19968: jis0208<<14 | 0x4A<<7 | 0x24, + 35383 - 19968: jis0208<<14 | 0x5A<<7 | 0x47, + 35386 - 19968: jis0208<<14 | 0x1E<<7 | 0x26, + 35387 - 19968: jis0208<<14 | 0x22<<7 | 0x4F, + 35388 - 19968: jis0208<<14 | 0x1D<<7 | 0x39, + 35389 - 19968: jis0212<<14 | 0x3C<<7 | 0x34, + 35390 - 19968: jis0212<<14 | 0x3C<<7 | 0x35, + 35392 - 19968: jis0212<<14 | 0x3C<<7 | 0x36, + 35393 - 19968: jis0208<<14 | 0x4A<<7 | 0x25, + 35395 - 19968: jis0212<<14 | 0x3C<<7 | 0x37, + 35397 - 19968: jis0212<<14 | 0x3C<<7 | 0x38, + 35398 - 19968: jis0208<<14 | 0x4A<<7 | 0x28, + 35399 - 19968: jis0212<<14 | 0x3C<<7 | 0x39, + 35400 - 19968: jis0208<<14 | 0x4A<<7 | 0x29, + 35401 - 19968: jis0212<<14 | 0x3C<<7 | 0x3A, + 35405 - 19968: jis0212<<14 | 0x3C<<7 | 0x3B, + 35406 - 19968: jis0212<<14 | 0x3C<<7 | 0x3C, + 35408 - 19968: jis0208<<14 | 0x19<<7 | 0x1D, + 35409 - 19968: jis0208<<14 | 0x21<<7 | 0x21, + 35410 - 19968: jis0208<<14 | 0x4A<<7 | 0x27, + 35411 - 19968: jis0212<<14 | 0x3C<<7 | 0x3D, + 35412 - 19968: jis0208<<14 | 0x1D<<7 | 0x3A, + 35413 - 19968: jis0208<<14 | 0x28<<7 | 0x1D, + 35414 - 19968: jis0212<<14 | 0x3C<<7 | 0x3E, + 35415 - 19968: jis0212<<14 | 0x3C<<7 | 0x3F, + 35416 - 19968: jis0212<<14 | 0x3C<<7 | 0x40, + 35419 - 19968: jis0208<<14 | 0x4A<<7 | 0x26, + 35420 - 19968: jis0212<<14 | 0x3C<<7 | 0x41, + 35421 - 19968: jis0212<<14 | 0x3C<<7 | 0x42, + 35422 - 19968: jis0208<<14 | 0x1A<<7 | 0x4B, + 35424 - 19968: jis0208<<14 | 0x10<<7 | 0x32, + 35425 - 19968: jis0212<<14 | 0x3C<<7 | 0x43, + 35426 - 19968: jis0208<<14 | 0x4A<<7 | 0x2D, + 35427 - 19968: jis0208<<14 | 0x16<<7 | 0x37, + 35429 - 19968: jis0212<<14 | 0x3C<<7 | 0x44, + 35430 - 19968: jis0208<<14 | 0x1A<<7 | 0x4D, + 35431 - 19968: jis0212<<14 | 0x3C<<7 | 0x45, + 35433 - 19968: jis0208<<14 | 0x1A<<7 | 0x4C, + 35435 - 19968: jis0208<<14 | 0x2E<<7 | 0x2C, + 35436 - 19968: jis0208<<14 | 0x4A<<7 | 0x2C, + 35437 - 19968: jis0208<<14 | 0x4A<<7 | 0x2B, + 35438 - 19968: jis0208<<14 | 0x20<<7 | 0x06, + 35440 - 19968: jis0208<<14 | 0x14<<7 | 0x2C, + 35441 - 19968: jis0208<<14 | 0x2E<<7 | 0x22, + 35442 - 19968: jis0208<<14 | 0x12<<7 | 0x19, + 35443 - 19968: jis0208<<14 | 0x1D<<7 | 0x3B, + 35445 - 19968: jis0212<<14 | 0x3C<<7 | 0x46, + 35446 - 19968: jis0212<<14 | 0x3C<<7 | 0x47, + 35447 - 19968: jis0212<<14 | 0x3C<<7 | 0x48, + 35449 - 19968: jis0208<<14 | 0x5A<<7 | 0x48, + 35450 - 19968: jis0212<<14 | 0x3C<<7 | 0x4A, + 35451 - 19968: jis0212<<14 | 0x3C<<7 | 0x4B, + 35452 - 19968: jis0208<<14 | 0x4A<<7 | 0x2A, + 35454 - 19968: jis0212<<14 | 0x3C<<7 | 0x4C, + 35455 - 19968: jis0212<<14 | 0x3C<<7 | 0x4D, + 35456 - 19968: jis0212<<14 | 0x3C<<7 | 0x4E, + 35458 - 19968: jis0208<<14 | 0x4A<<7 | 0x2F, + 35459 - 19968: jis0212<<14 | 0x3C<<7 | 0x4F, + 35460 - 19968: jis0208<<14 | 0x4A<<7 | 0x30, + 35461 - 19968: jis0208<<14 | 0x4A<<7 | 0x2E, + 35462 - 19968: jis0212<<14 | 0x3C<<7 | 0x50, + 35463 - 19968: jis0208<<14 | 0x17<<7 | 0x37, + 35465 - 19968: jis0208<<14 | 0x2C<<7 | 0x1F, + 35467 - 19968: jis0212<<14 | 0x3C<<7 | 0x51, + 35468 - 19968: jis0208<<14 | 0x1A<<7 | 0x4E, + 35469 - 19968: jis0208<<14 | 0x26<<7 | 0x06, + 35471 - 19968: jis0212<<14 | 0x3C<<7 | 0x52, + 35472 - 19968: jis0212<<14 | 0x3C<<7 | 0x53, + 35473 - 19968: jis0208<<14 | 0x4A<<7 | 0x33, + 35474 - 19968: jis0212<<14 | 0x3C<<7 | 0x54, + 35475 - 19968: jis0208<<14 | 0x1F<<7 | 0x1F, + 35477 - 19968: jis0208<<14 | 0x22<<7 | 0x21, + 35478 - 19968: jis0212<<14 | 0x3C<<7 | 0x55, + 35479 - 19968: jis0212<<14 | 0x3C<<7 | 0x56, + 35480 - 19968: jis0208<<14 | 0x2C<<7 | 0x15, + 35481 - 19968: jis0212<<14 | 0x3C<<7 | 0x57, + 35482 - 19968: jis0208<<14 | 0x4A<<7 | 0x36, + 35486 - 19968: jis0208<<14 | 0x17<<7 | 0x4B, + 35487 - 19968: jis0212<<14 | 0x3C<<7 | 0x58, + 35488 - 19968: jis0208<<14 | 0x1F<<7 | 0x1E, + 35489 - 19968: jis0208<<14 | 0x4A<<7 | 0x32, + 35491 - 19968: jis0208<<14 | 0x4A<<7 | 0x37, + 35492 - 19968: jis0208<<14 | 0x17<<7 | 0x4C, + 35493 - 19968: jis0208<<14 | 0x4A<<7 | 0x34, + 35494 - 19968: jis0208<<14 | 0x4A<<7 | 0x35, + 35495 - 19968: jis0208<<14 | 0x5A<<7 | 0x49, + 35496 - 19968: jis0208<<14 | 0x4A<<7 | 0x31, + 35497 - 19968: jis0212<<14 | 0x3C<<7 | 0x5A, + 35500 - 19968: jis0208<<14 | 0x1F<<7 | 0x41, + 35501 - 19968: jis0208<<14 | 0x25<<7 | 0x28, + 35502 - 19968: jis0212<<14 | 0x3C<<7 | 0x5B, + 35503 - 19968: jis0212<<14 | 0x3C<<7 | 0x5C, + 35504 - 19968: jis0208<<14 | 0x22<<7 | 0x0E, + 35506 - 19968: jis0208<<14 | 0x11<<7 | 0x3C, + 35507 - 19968: jis0212<<14 | 0x3C<<7 | 0x5D, + 35510 - 19968: jis0212<<14 | 0x3D<<7 | 0x00, + 35511 - 19968: jis0212<<14 | 0x3D<<7 | 0x01, + 35513 - 19968: jis0208<<14 | 0x27<<7 | 0x4F, + 35515 - 19968: jis0212<<14 | 0x3D<<7 | 0x02, + 35516 - 19968: jis0208<<14 | 0x14<<7 | 0x22, + 35518 - 19968: jis0208<<14 | 0x5A<<7 | 0x4A, + 35519 - 19968: jis0208<<14 | 0x23<<7 | 0x13, + 35522 - 19968: jis0208<<14 | 0x4A<<7 | 0x3A, + 35523 - 19968: jis0212<<14 | 0x3D<<7 | 0x04, + 35524 - 19968: jis0208<<14 | 0x4A<<7 | 0x38, + 35526 - 19968: jis0212<<14 | 0x3D<<7 | 0x05, + 35527 - 19968: jis0208<<14 | 0x22<<7 | 0x2B, + 35528 - 19968: jis0212<<14 | 0x3D<<7 | 0x06, + 35529 - 19968: jis0212<<14 | 0x3D<<7 | 0x07, + 35530 - 19968: jis0212<<14 | 0x3D<<7 | 0x08, + 35531 - 19968: jis0208<<14 | 0x1F<<7 | 0x20, + 35532 - 19968: jis0208<<14 | 0x13<<7 | 0x31, + 35533 - 19968: jis0208<<14 | 0x4A<<7 | 0x39, + 35535 - 19968: jis0208<<14 | 0x1E<<7 | 0x3A, + 35537 - 19968: jis0212<<14 | 0x3D<<7 | 0x09, + 35538 - 19968: jis0208<<14 | 0x2D<<7 | 0x29, + 35539 - 19968: jis0212<<14 | 0x3D<<7 | 0x0A, + 35540 - 19968: jis0212<<14 | 0x3D<<7 | 0x0B, + 35541 - 19968: jis0212<<14 | 0x3D<<7 | 0x0C, + 35542 - 19968: jis0208<<14 | 0x2E<<7 | 0x1F, + 35543 - 19968: jis0212<<14 | 0x3D<<7 | 0x0D, + 35546 - 19968: jis0208<<14 | 0x4A<<7 | 0x3B, + 35547 - 19968: jis0208<<14 | 0x4A<<7 | 0x46, + 35548 - 19968: jis0208<<14 | 0x23<<7 | 0x14, + 35549 - 19968: jis0212<<14 | 0x3D<<7 | 0x0E, + 35550 - 19968: jis0208<<14 | 0x4A<<7 | 0x45, + 35551 - 19968: jis0208<<14 | 0x5A<<7 | 0x4B, + 35552 - 19968: jis0208<<14 | 0x4A<<7 | 0x42, + 35553 - 19968: jis0208<<14 | 0x4A<<7 | 0x4A, + 35554 - 19968: jis0208<<14 | 0x4A<<7 | 0x43, + 35556 - 19968: jis0208<<14 | 0x4A<<7 | 0x3F, + 35558 - 19968: jis0208<<14 | 0x23<<7 | 0x5B, + 35559 - 19968: jis0208<<14 | 0x4A<<7 | 0x3E, + 35563 - 19968: jis0208<<14 | 0x4A<<7 | 0x3C, + 35564 - 19968: jis0212<<14 | 0x3D<<7 | 0x10, + 35565 - 19968: jis0208<<14 | 0x2C<<7 | 0x00, + 35566 - 19968: jis0208<<14 | 0x1A<<7 | 0x4F, + 35568 - 19968: jis0212<<14 | 0x3D<<7 | 0x11, + 35569 - 19968: jis0208<<14 | 0x4A<<7 | 0x40, + 35571 - 19968: jis0208<<14 | 0x4A<<7 | 0x3D, + 35572 - 19968: jis0212<<14 | 0x3D<<7 | 0x12, + 35573 - 19968: jis0212<<14 | 0x3D<<7 | 0x13, + 35574 - 19968: jis0208<<14 | 0x5A<<7 | 0x4D, + 35575 - 19968: jis0208<<14 | 0x4A<<7 | 0x44, + 35576 - 19968: jis0208<<14 | 0x1C<<7 | 0x53, + 35578 - 19968: jis0208<<14 | 0x17<<7 | 0x20, + 35580 - 19968: jis0212<<14 | 0x3D<<7 | 0x15, + 35582 - 19968: jis0208<<14 | 0x21<<7 | 0x59, + 35583 - 19968: jis0212<<14 | 0x3D<<7 | 0x16, + 35584 - 19968: jis0208<<14 | 0x2A<<7 | 0x24, + 35585 - 19968: jis0208<<14 | 0x10<<7 | 0x39, + 35586 - 19968: jis0208<<14 | 0x0F<<7 | 0x41, + 35588 - 19968: jis0208<<14 | 0x25<<7 | 0x04, + 35589 - 19968: jis0212<<14 | 0x3D<<7 | 0x17, + 35590 - 19968: jis0212<<14 | 0x3D<<7 | 0x18, + 35591 - 19968: jis0208<<14 | 0x4A<<7 | 0x48, + 35594 - 19968: jis0212<<14 | 0x3D<<7 | 0x1E, + 35595 - 19968: jis0212<<14 | 0x3D<<7 | 0x19, + 35596 - 19968: jis0208<<14 | 0x4A<<7 | 0x47, + 35598 - 19968: jis0208<<14 | 0x25<<7 | 0x45, + 35600 - 19968: jis0208<<14 | 0x4A<<7 | 0x4C, + 35601 - 19968: jis0212<<14 | 0x3D<<7 | 0x1A, + 35604 - 19968: jis0208<<14 | 0x4A<<7 | 0x41, + 35606 - 19968: jis0208<<14 | 0x4A<<7 | 0x4B, + 35607 - 19968: jis0208<<14 | 0x4A<<7 | 0x4D, + 35609 - 19968: jis0208<<14 | 0x17<<7 | 0x0B, + 35610 - 19968: jis0208<<14 | 0x4A<<7 | 0x49, + 35611 - 19968: jis0208<<14 | 0x18<<7 | 0x35, + 35612 - 19968: jis0212<<14 | 0x3D<<7 | 0x1B, + 35613 - 19968: jis0208<<14 | 0x1B<<7 | 0x34, + 35614 - 19968: jis0212<<14 | 0x3D<<7 | 0x1C, + 35615 - 19968: jis0212<<14 | 0x3D<<7 | 0x1D, + 35616 - 19968: jis0208<<14 | 0x4A<<7 | 0x4E, + 35617 - 19968: jis0208<<14 | 0x2C<<7 | 0x37, + 35622 - 19968: jis0208<<14 | 0x4A<<7 | 0x51, + 35624 - 19968: jis0208<<14 | 0x4A<<7 | 0x54, + 35627 - 19968: jis0208<<14 | 0x4A<<7 | 0x52, + 35628 - 19968: jis0208<<14 | 0x28<<7 | 0x14, + 35629 - 19968: jis0212<<14 | 0x3D<<7 | 0x1F, + 35632 - 19968: jis0212<<14 | 0x3D<<7 | 0x20, + 35635 - 19968: jis0208<<14 | 0x4A<<7 | 0x4F, + 35639 - 19968: jis0212<<14 | 0x3D<<7 | 0x21, + 35641 - 19968: jis0208<<14 | 0x15<<7 | 0x3F, + 35644 - 19968: jis0212<<14 | 0x3D<<7 | 0x22, + 35646 - 19968: jis0208<<14 | 0x4A<<7 | 0x53, + 35649 - 19968: jis0208<<14 | 0x4A<<7 | 0x55, + 35650 - 19968: jis0212<<14 | 0x3D<<7 | 0x23, + 35651 - 19968: jis0212<<14 | 0x3D<<7 | 0x24, + 35652 - 19968: jis0212<<14 | 0x3D<<7 | 0x25, + 35653 - 19968: jis0212<<14 | 0x3D<<7 | 0x26, + 35654 - 19968: jis0212<<14 | 0x3D<<7 | 0x27, + 35656 - 19968: jis0212<<14 | 0x3D<<7 | 0x28, + 35657 - 19968: jis0208<<14 | 0x4A<<7 | 0x59, + 35660 - 19968: jis0208<<14 | 0x4A<<7 | 0x56, + 35661 - 19968: jis0212<<14 | 0x3D<<7 | 0x2D, + 35662 - 19968: jis0208<<14 | 0x4A<<7 | 0x58, + 35663 - 19968: jis0208<<14 | 0x4A<<7 | 0x57, + 35666 - 19968: jis0212<<14 | 0x3D<<7 | 0x29, + 35667 - 19968: jis0208<<14 | 0x5A<<7 | 0x4E, + 35668 - 19968: jis0212<<14 | 0x3D<<7 | 0x2B, + 35670 - 19968: jis0208<<14 | 0x4A<<7 | 0x5A, + 35672 - 19968: jis0208<<14 | 0x1B<<7 | 0x10, + 35673 - 19968: jis0212<<14 | 0x3D<<7 | 0x2C, + 35674 - 19968: jis0208<<14 | 0x4A<<7 | 0x5C, + 35675 - 19968: jis0208<<14 | 0x4A<<7 | 0x5B, + 35676 - 19968: jis0208<<14 | 0x28<<7 | 0x47, + 35678 - 19968: jis0212<<14 | 0x3D<<7 | 0x2E, + 35679 - 19968: jis0208<<14 | 0x4B<<7 | 0x00, + 35683 - 19968: jis0212<<14 | 0x3D<<7 | 0x2F, + 35686 - 19968: jis0208<<14 | 0x16<<7 | 0x38, + 35691 - 19968: jis0208<<14 | 0x4A<<7 | 0x5D, + 35692 - 19968: jis0208<<14 | 0x4B<<7 | 0x01, + 35693 - 19968: jis0212<<14 | 0x3D<<7 | 0x30, + 35695 - 19968: jis0208<<14 | 0x4B<<7 | 0x02, + 35696 - 19968: jis0208<<14 | 0x14<<7 | 0x23, + 35697 - 19968: jis0208<<14 | 0x45<<7 | 0x20, + 35698 - 19968: jis0208<<14 | 0x1D<<7 | 0x58, + 35700 - 19968: jis0208<<14 | 0x4B<<7 | 0x03, + 35702 - 19968: jis0212<<14 | 0x3D<<7 | 0x31, + 35703 - 19968: jis0208<<14 | 0x17<<7 | 0x4D, + 35704 - 19968: jis0212<<14 | 0x3D<<7 | 0x32, + 35705 - 19968: jis0212<<14 | 0x3D<<7 | 0x33, + 35708 - 19968: jis0212<<14 | 0x3D<<7 | 0x34, + 35709 - 19968: jis0208<<14 | 0x4B<<7 | 0x04, + 35710 - 19968: jis0212<<14 | 0x3D<<7 | 0x35, + 35711 - 19968: jis0208<<14 | 0x5A<<7 | 0x4F, + 35712 - 19968: jis0208<<14 | 0x4B<<7 | 0x05, + 35713 - 19968: jis0212<<14 | 0x3D<<7 | 0x36, + 35715 - 19968: jis0208<<14 | 0x1A<<7 | 0x1D, + 35716 - 19968: jis0212<<14 | 0x3D<<7 | 0x37, + 35717 - 19968: jis0212<<14 | 0x3D<<7 | 0x38, + 35722 - 19968: jis0208<<14 | 0x39<<7 | 0x2D, + 35723 - 19968: jis0212<<14 | 0x3D<<7 | 0x39, + 35724 - 19968: jis0208<<14 | 0x4B<<7 | 0x06, + 35725 - 19968: jis0212<<14 | 0x3D<<7 | 0x3A, + 35726 - 19968: jis0208<<14 | 0x4B<<7 | 0x07, + 35727 - 19968: jis0212<<14 | 0x3D<<7 | 0x3B, + 35728 - 19968: jis0208<<14 | 0x1C<<7 | 0x11, + 35730 - 19968: jis0208<<14 | 0x4B<<7 | 0x08, + 35731 - 19968: jis0208<<14 | 0x4B<<7 | 0x09, + 35732 - 19968: jis0212<<14 | 0x3D<<7 | 0x3C, + 35733 - 19968: jis0212<<14 | 0x3D<<7 | 0x3D, + 35734 - 19968: jis0208<<14 | 0x4B<<7 | 0x0A, + 35737 - 19968: jis0208<<14 | 0x4B<<7 | 0x0B, + 35738 - 19968: jis0208<<14 | 0x4B<<7 | 0x0C, + 35740 - 19968: jis0212<<14 | 0x3D<<7 | 0x3E, + 35742 - 19968: jis0212<<14 | 0x3D<<7 | 0x3F, + 35743 - 19968: jis0212<<14 | 0x3D<<7 | 0x40, + 35895 - 19968: jis0208<<14 | 0x22<<7 | 0x0A, + 35896 - 19968: jis0212<<14 | 0x3D<<7 | 0x41, + 35897 - 19968: jis0212<<14 | 0x3D<<7 | 0x42, + 35898 - 19968: jis0208<<14 | 0x4B<<7 | 0x0D, + 35901 - 19968: jis0212<<14 | 0x3D<<7 | 0x43, + 35902 - 19968: jis0212<<14 | 0x3D<<7 | 0x44, + 35903 - 19968: jis0208<<14 | 0x4B<<7 | 0x0F, + 35905 - 19968: jis0208<<14 | 0x4B<<7 | 0x0E, + 35909 - 19968: jis0212<<14 | 0x3D<<7 | 0x45, + 35910 - 19968: jis0208<<14 | 0x25<<7 | 0x05, + 35911 - 19968: jis0212<<14 | 0x3D<<7 | 0x46, + 35912 - 19968: jis0208<<14 | 0x4B<<7 | 0x10, + 35913 - 19968: jis0212<<14 | 0x3D<<7 | 0x47, + 35914 - 19968: jis0208<<14 | 0x2A<<7 | 0x0C, + 35915 - 19968: jis0212<<14 | 0x3D<<7 | 0x48, + 35916 - 19968: jis0208<<14 | 0x4B<<7 | 0x11, + 35918 - 19968: jis0208<<14 | 0x4B<<7 | 0x12, + 35919 - 19968: jis0212<<14 | 0x3D<<7 | 0x49, + 35920 - 19968: jis0208<<14 | 0x4B<<7 | 0x13, + 35921 - 19968: jis0212<<14 | 0x3D<<7 | 0x4A, + 35923 - 19968: jis0212<<14 | 0x3D<<7 | 0x4B, + 35924 - 19968: jis0212<<14 | 0x3D<<7 | 0x4C, + 35925 - 19968: jis0208<<14 | 0x4B<<7 | 0x14, + 35927 - 19968: jis0212<<14 | 0x3D<<7 | 0x4D, + 35928 - 19968: jis0212<<14 | 0x3D<<7 | 0x4E, + 35929 - 19968: jis0212<<14 | 0x3D<<7 | 0x51, + 35930 - 19968: jis0208<<14 | 0x25<<7 | 0x39, + 35931 - 19968: jis0212<<14 | 0x3D<<7 | 0x4F, + 35933 - 19968: jis0212<<14 | 0x3D<<7 | 0x50, + 35937 - 19968: jis0208<<14 | 0x1D<<7 | 0x3C, + 35938 - 19968: jis0208<<14 | 0x4B<<7 | 0x15, + 35939 - 19968: jis0212<<14 | 0x3D<<7 | 0x52, + 35940 - 19968: jis0212<<14 | 0x3D<<7 | 0x53, + 35942 - 19968: jis0212<<14 | 0x3D<<7 | 0x54, + 35944 - 19968: jis0212<<14 | 0x3D<<7 | 0x55, + 35945 - 19968: jis0212<<14 | 0x3D<<7 | 0x56, + 35946 - 19968: jis0208<<14 | 0x18<<7 | 0x4A, + 35947 - 19968: jis0208<<14 | 0x2F<<7 | 0x0D, + 35948 - 19968: jis0208<<14 | 0x4B<<7 | 0x16, + 35949 - 19968: jis0212<<14 | 0x3D<<7 | 0x57, + 35955 - 19968: jis0212<<14 | 0x3D<<7 | 0x58, + 35957 - 19968: jis0212<<14 | 0x3D<<7 | 0x59, + 35958 - 19968: jis0212<<14 | 0x3D<<7 | 0x5A, + 35960 - 19968: jis0208<<14 | 0x4B<<7 | 0x17, + 35961 - 19968: jis0208<<14 | 0x28<<7 | 0x1E, + 35962 - 19968: jis0208<<14 | 0x4B<<7 | 0x18, + 35963 - 19968: jis0212<<14 | 0x3D<<7 | 0x5B, + 35964 - 19968: jis0208<<14 | 0x4B<<7 | 0x20, + 35966 - 19968: jis0212<<14 | 0x3D<<7 | 0x5C, + 35970 - 19968: jis0208<<14 | 0x4B<<7 | 0x19, + 35973 - 19968: jis0208<<14 | 0x4B<<7 | 0x1B, + 35974 - 19968: jis0212<<14 | 0x3D<<7 | 0x5D, + 35975 - 19968: jis0212<<14 | 0x3E<<7 | 0x00, + 35977 - 19968: jis0208<<14 | 0x4B<<7 | 0x1A, + 35978 - 19968: jis0208<<14 | 0x4B<<7 | 0x1C, + 35979 - 19968: jis0212<<14 | 0x3E<<7 | 0x01, + 35980 - 19968: jis0208<<14 | 0x2A<<7 | 0x25, + 35981 - 19968: jis0208<<14 | 0x4B<<7 | 0x1D, + 35982 - 19968: jis0208<<14 | 0x4B<<7 | 0x1E, + 35984 - 19968: jis0212<<14 | 0x3E<<7 | 0x02, + 35986 - 19968: jis0212<<14 | 0x3E<<7 | 0x03, + 35987 - 19968: jis0212<<14 | 0x3E<<7 | 0x04, + 35988 - 19968: jis0208<<14 | 0x4B<<7 | 0x1F, + 35992 - 19968: jis0208<<14 | 0x4B<<7 | 0x21, + 35993 - 19968: jis0212<<14 | 0x3E<<7 | 0x05, + 35995 - 19968: jis0212<<14 | 0x3E<<7 | 0x06, + 35996 - 19968: jis0212<<14 | 0x3E<<7 | 0x07, + 35997 - 19968: jis0208<<14 | 0x12<<7 | 0x0C, + 35998 - 19968: jis0208<<14 | 0x23<<7 | 0x46, + 36000 - 19968: jis0208<<14 | 0x28<<7 | 0x48, + 36001 - 19968: jis0208<<14 | 0x19<<7 | 0x41, + 36002 - 19968: jis0208<<14 | 0x18<<7 | 0x36, + 36004 - 19968: jis0212<<14 | 0x3E<<7 | 0x08, + 36007 - 19968: jis0208<<14 | 0x28<<7 | 0x2E, + 36008 - 19968: jis0208<<14 | 0x11<<7 | 0x3E, + 36009 - 19968: jis0208<<14 | 0x27<<7 | 0x2D, + 36010 - 19968: jis0208<<14 | 0x4B<<7 | 0x24, + 36011 - 19968: jis0208<<14 | 0x13<<7 | 0x32, + 36012 - 19968: jis0208<<14 | 0x1F<<7 | 0x34, + 36013 - 19968: jis0208<<14 | 0x4B<<7 | 0x23, + 36014 - 19968: jis0208<<14 | 0x4B<<7 | 0x28, + 36015 - 19968: jis0208<<14 | 0x22<<7 | 0x58, + 36016 - 19968: jis0208<<14 | 0x2B<<7 | 0x42, + 36018 - 19968: jis0208<<14 | 0x4B<<7 | 0x26, + 36019 - 19968: jis0208<<14 | 0x4B<<7 | 0x27, + 36020 - 19968: jis0208<<14 | 0x14<<7 | 0x0D, + 36022 - 19968: jis0208<<14 | 0x4B<<7 | 0x29, + 36023 - 19968: jis0208<<14 | 0x26<<7 | 0x42, + 36024 - 19968: jis0208<<14 | 0x21<<7 | 0x3E, + 36025 - 19968: jis0212<<14 | 0x3E<<7 | 0x09, + 36026 - 19968: jis0212<<14 | 0x3E<<7 | 0x0A, + 36027 - 19968: jis0208<<14 | 0x27<<7 | 0x50, + 36028 - 19968: jis0208<<14 | 0x24<<7 | 0x1C, + 36029 - 19968: jis0208<<14 | 0x4B<<7 | 0x25, + 36031 - 19968: jis0208<<14 | 0x2A<<7 | 0x26, + 36032 - 19968: jis0208<<14 | 0x11<<7 | 0x4B, + 36033 - 19968: jis0208<<14 | 0x4B<<7 | 0x2B, + 36034 - 19968: jis0208<<14 | 0x2E<<7 | 0x07, + 36035 - 19968: jis0208<<14 | 0x23<<7 | 0x21, + 36036 - 19968: jis0208<<14 | 0x2E<<7 | 0x24, + 36037 - 19968: jis0212<<14 | 0x3E<<7 | 0x0B, + 36038 - 19968: jis0212<<14 | 0x3E<<7 | 0x0C, + 36039 - 19968: jis0208<<14 | 0x1A<<7 | 0x50, + 36040 - 19968: jis0208<<14 | 0x4B<<7 | 0x2A, + 36041 - 19968: jis0212<<14 | 0x3E<<7 | 0x0D, + 36042 - 19968: jis0208<<14 | 0x21<<7 | 0x10, + 36043 - 19968: jis0212<<14 | 0x3E<<7 | 0x0E, + 36045 - 19968: jis0208<<14 | 0x4B<<7 | 0x3B, + 36046 - 19968: jis0208<<14 | 0x20<<7 | 0x07, + 36047 - 19968: jis0212<<14 | 0x3E<<7 | 0x0F, + 36049 - 19968: jis0208<<14 | 0x25<<7 | 0x57, + 36051 - 19968: jis0208<<14 | 0x28<<7 | 0x2F, + 36053 - 19968: jis0212<<14 | 0x3E<<7 | 0x11, + 36054 - 19968: jis0212<<14 | 0x3E<<7 | 0x10, + 36057 - 19968: jis0212<<14 | 0x3E<<7 | 0x12, + 36058 - 19968: jis0208<<14 | 0x4B<<7 | 0x2E, + 36059 - 19968: jis0208<<14 | 0x1A<<7 | 0x1E, + 36060 - 19968: jis0208<<14 | 0x1A<<7 | 0x51, + 36061 - 19968: jis0212<<14 | 0x3E<<7 | 0x13, + 36062 - 19968: jis0208<<14 | 0x1D<<7 | 0x3D, + 36064 - 19968: jis0208<<14 | 0x26<<7 | 0x44, + 36065 - 19968: jis0212<<14 | 0x3E<<7 | 0x14, + 36066 - 19968: jis0208<<14 | 0x17<<7 | 0x0C, + 36067 - 19968: jis0208<<14 | 0x4B<<7 | 0x2D, + 36068 - 19968: jis0208<<14 | 0x4B<<7 | 0x2C, + 36070 - 19968: jis0208<<14 | 0x28<<7 | 0x49, + 36072 - 19968: jis0212<<14 | 0x3E<<7 | 0x15, + 36074 - 19968: jis0208<<14 | 0x1B<<7 | 0x20, + 36076 - 19968: jis0212<<14 | 0x3E<<7 | 0x16, + 36077 - 19968: jis0208<<14 | 0x24<<7 | 0x31, + 36079 - 19968: jis0212<<14 | 0x3E<<7 | 0x17, + 36080 - 19968: jis0208<<14 | 0x5A<<7 | 0x50, + 36082 - 19968: jis0212<<14 | 0x3E<<7 | 0x19, + 36084 - 19968: jis0208<<14 | 0x5A<<7 | 0x51, + 36085 - 19968: jis0212<<14 | 0x3E<<7 | 0x1A, + 36087 - 19968: jis0212<<14 | 0x3E<<7 | 0x1B, + 36088 - 19968: jis0212<<14 | 0x3E<<7 | 0x1C, + 36090 - 19968: jis0208<<14 | 0x4B<<7 | 0x30, + 36091 - 19968: jis0208<<14 | 0x4B<<7 | 0x31, + 36092 - 19968: jis0208<<14 | 0x18<<7 | 0x37, + 36093 - 19968: jis0208<<14 | 0x4B<<7 | 0x2F, + 36094 - 19968: jis0212<<14 | 0x3E<<7 | 0x1D, + 36095 - 19968: jis0212<<14 | 0x3E<<7 | 0x1E, + 36097 - 19968: jis0212<<14 | 0x3E<<7 | 0x1F, + 36099 - 19968: jis0212<<14 | 0x3E<<7 | 0x20, + 36100 - 19968: jis0208<<14 | 0x4B<<7 | 0x32, + 36101 - 19968: jis0208<<14 | 0x4B<<7 | 0x33, + 36103 - 19968: jis0208<<14 | 0x4B<<7 | 0x35, + 36104 - 19968: jis0208<<14 | 0x21<<7 | 0x02, + 36105 - 19968: jis0212<<14 | 0x3E<<7 | 0x21, + 36106 - 19968: jis0208<<14 | 0x4B<<7 | 0x34, + 36107 - 19968: jis0208<<14 | 0x13<<7 | 0x45, + 36109 - 19968: jis0208<<14 | 0x4B<<7 | 0x37, + 36111 - 19968: jis0208<<14 | 0x4B<<7 | 0x36, + 36112 - 19968: jis0208<<14 | 0x4B<<7 | 0x38, + 36114 - 19968: jis0208<<14 | 0x5A<<7 | 0x52, + 36115 - 19968: jis0208<<14 | 0x4B<<7 | 0x3A, + 36116 - 19968: jis0208<<14 | 0x4B<<7 | 0x3C, + 36118 - 19968: jis0208<<14 | 0x4B<<7 | 0x3D, + 36119 - 19968: jis0212<<14 | 0x3E<<7 | 0x23, + 36123 - 19968: jis0212<<14 | 0x3E<<7 | 0x24, + 36196 - 19968: jis0208<<14 | 0x1F<<7 | 0x35, + 36197 - 19968: jis0212<<14 | 0x3E<<7 | 0x25, + 36198 - 19968: jis0208<<14 | 0x1B<<7 | 0x2E, + 36199 - 19968: jis0208<<14 | 0x4B<<7 | 0x3E, + 36201 - 19968: jis0212<<14 | 0x3E<<7 | 0x26, + 36203 - 19968: jis0208<<14 | 0x12<<7 | 0x31, + 36204 - 19968: jis0212<<14 | 0x3E<<7 | 0x27, + 36205 - 19968: jis0208<<14 | 0x4B<<7 | 0x3F, + 36206 - 19968: jis0212<<14 | 0x3E<<7 | 0x28, + 36208 - 19968: jis0208<<14 | 0x20<<7 | 0x55, + 36209 - 19968: jis0208<<14 | 0x4B<<7 | 0x40, + 36211 - 19968: jis0208<<14 | 0x4B<<7 | 0x41, + 36212 - 19968: jis0208<<14 | 0x28<<7 | 0x4A, + 36214 - 19968: jis0208<<14 | 0x5A<<7 | 0x53, + 36215 - 19968: jis0208<<14 | 0x14<<7 | 0x0E, + 36223 - 19968: jis0212<<14 | 0x3E<<7 | 0x29, + 36225 - 19968: jis0208<<14 | 0x4B<<7 | 0x42, + 36226 - 19968: jis0212<<14 | 0x3E<<7 | 0x2A, + 36228 - 19968: jis0212<<14 | 0x3E<<7 | 0x2B, + 36229 - 19968: jis0208<<14 | 0x23<<7 | 0x15, + 36232 - 19968: jis0212<<14 | 0x3E<<7 | 0x2C, + 36234 - 19968: jis0208<<14 | 0x10<<7 | 0x3A, + 36237 - 19968: jis0212<<14 | 0x3E<<7 | 0x2D, + 36240 - 19968: jis0212<<14 | 0x3E<<7 | 0x2E, + 36241 - 19968: jis0212<<14 | 0x3E<<7 | 0x2F, + 36245 - 19968: jis0212<<14 | 0x3E<<7 | 0x30, + 36249 - 19968: jis0208<<14 | 0x4B<<7 | 0x43, + 36254 - 19968: jis0212<<14 | 0x3E<<7 | 0x31, + 36255 - 19968: jis0212<<14 | 0x3E<<7 | 0x32, + 36256 - 19968: jis0212<<14 | 0x3E<<7 | 0x33, + 36259 - 19968: jis0208<<14 | 0x1B<<7 | 0x50, + 36262 - 19968: jis0212<<14 | 0x3E<<7 | 0x34, + 36264 - 19968: jis0208<<14 | 0x1E<<7 | 0x55, + 36267 - 19968: jis0212<<14 | 0x3E<<7 | 0x35, + 36268 - 19968: jis0212<<14 | 0x3E<<7 | 0x36, + 36271 - 19968: jis0212<<14 | 0x3E<<7 | 0x37, + 36274 - 19968: jis0212<<14 | 0x3E<<7 | 0x38, + 36275 - 19968: jis0208<<14 | 0x21<<7 | 0x0C, + 36277 - 19968: jis0212<<14 | 0x3E<<7 | 0x39, + 36279 - 19968: jis0212<<14 | 0x3E<<7 | 0x3A, + 36281 - 19968: jis0212<<14 | 0x3E<<7 | 0x3B, + 36282 - 19968: jis0208<<14 | 0x4B<<7 | 0x46, + 36283 - 19968: jis0212<<14 | 0x3E<<7 | 0x3C, + 36284 - 19968: jis0212<<14 | 0x3E<<7 | 0x4E, + 36286 - 19968: jis0208<<14 | 0x4B<<7 | 0x45, + 36288 - 19968: jis0212<<14 | 0x3E<<7 | 0x3D, + 36290 - 19968: jis0208<<14 | 0x4B<<7 | 0x44, + 36293 - 19968: jis0212<<14 | 0x3E<<7 | 0x3E, + 36294 - 19968: jis0212<<14 | 0x3E<<7 | 0x3F, + 36295 - 19968: jis0212<<14 | 0x3E<<7 | 0x40, + 36296 - 19968: jis0212<<14 | 0x3E<<7 | 0x41, + 36298 - 19968: jis0212<<14 | 0x3E<<7 | 0x42, + 36299 - 19968: jis0208<<14 | 0x4B<<7 | 0x4C, + 36300 - 19968: jis0208<<14 | 0x4B<<7 | 0x4A, + 36302 - 19968: jis0212<<14 | 0x3E<<7 | 0x43, + 36303 - 19968: jis0208<<14 | 0x4B<<7 | 0x47, + 36305 - 19968: jis0212<<14 | 0x3E<<7 | 0x44, + 36308 - 19968: jis0212<<14 | 0x3E<<7 | 0x45, + 36309 - 19968: jis0212<<14 | 0x3E<<7 | 0x46, + 36310 - 19968: jis0208<<14 | 0x4B<<7 | 0x49, + 36311 - 19968: jis0212<<14 | 0x3E<<7 | 0x47, + 36313 - 19968: jis0212<<14 | 0x3E<<7 | 0x48, + 36314 - 19968: jis0208<<14 | 0x4B<<7 | 0x48, + 36315 - 19968: jis0208<<14 | 0x4B<<7 | 0x4B, + 36317 - 19968: jis0208<<14 | 0x14<<7 | 0x56, + 36319 - 19968: jis0208<<14 | 0x4B<<7 | 0x4F, + 36321 - 19968: jis0208<<14 | 0x1F<<7 | 0x36, + 36323 - 19968: jis0208<<14 | 0x4B<<7 | 0x50, + 36324 - 19968: jis0212<<14 | 0x3E<<7 | 0x49, + 36325 - 19968: jis0212<<14 | 0x3E<<7 | 0x4A, + 36327 - 19968: jis0212<<14 | 0x3E<<7 | 0x4B, + 36328 - 19968: jis0208<<14 | 0x17<<7 | 0x38, + 36330 - 19968: jis0208<<14 | 0x4B<<7 | 0x4D, + 36331 - 19968: jis0208<<14 | 0x4B<<7 | 0x4E, + 36332 - 19968: jis0212<<14 | 0x3E<<7 | 0x4C, + 36335 - 19968: jis0208<<14 | 0x2E<<7 | 0x08, + 36336 - 19968: jis0212<<14 | 0x3E<<7 | 0x4D, + 36337 - 19968: jis0212<<14 | 0x3E<<7 | 0x4F, + 36338 - 19968: jis0212<<14 | 0x3E<<7 | 0x50, + 36339 - 19968: jis0208<<14 | 0x23<<7 | 0x16, + 36340 - 19968: jis0212<<14 | 0x3E<<7 | 0x51, + 36341 - 19968: jis0208<<14 | 0x20<<7 | 0x08, + 36348 - 19968: jis0208<<14 | 0x4B<<7 | 0x51, + 36349 - 19968: jis0212<<14 | 0x3E<<7 | 0x52, + 36351 - 19968: jis0208<<14 | 0x4B<<7 | 0x54, + 36353 - 19968: jis0212<<14 | 0x3E<<7 | 0x53, + 36356 - 19968: jis0212<<14 | 0x3E<<7 | 0x54, + 36357 - 19968: jis0212<<14 | 0x3E<<7 | 0x55, + 36358 - 19968: jis0212<<14 | 0x3E<<7 | 0x56, + 36360 - 19968: jis0208<<14 | 0x4B<<7 | 0x52, + 36361 - 19968: jis0208<<14 | 0x4B<<7 | 0x53, + 36362 - 19968: jis0208<<14 | 0x2C<<7 | 0x38, + 36363 - 19968: jis0212<<14 | 0x3E<<7 | 0x57, + 36367 - 19968: jis0208<<14 | 0x25<<7 | 0x06, + 36368 - 19968: jis0208<<14 | 0x4B<<7 | 0x57, + 36369 - 19968: jis0212<<14 | 0x3E<<7 | 0x58, + 36372 - 19968: jis0212<<14 | 0x3E<<7 | 0x59, + 36374 - 19968: jis0212<<14 | 0x3E<<7 | 0x5A, + 36381 - 19968: jis0208<<14 | 0x4B<<7 | 0x55, + 36382 - 19968: jis0208<<14 | 0x4B<<7 | 0x56, + 36383 - 19968: jis0208<<14 | 0x4B<<7 | 0x58, + 36384 - 19968: jis0212<<14 | 0x3E<<7 | 0x5B, + 36385 - 19968: jis0212<<14 | 0x3E<<7 | 0x5C, + 36386 - 19968: jis0212<<14 | 0x3E<<7 | 0x5D, + 36387 - 19968: jis0212<<14 | 0x3F<<7 | 0x00, + 36390 - 19968: jis0212<<14 | 0x3F<<7 | 0x01, + 36391 - 19968: jis0212<<14 | 0x3F<<7 | 0x02, + 36394 - 19968: jis0208<<14 | 0x4C<<7 | 0x08, + 36400 - 19968: jis0208<<14 | 0x4B<<7 | 0x5B, + 36401 - 19968: jis0212<<14 | 0x3F<<7 | 0x03, + 36403 - 19968: jis0212<<14 | 0x3F<<7 | 0x04, + 36404 - 19968: jis0208<<14 | 0x4B<<7 | 0x5C, + 36405 - 19968: jis0208<<14 | 0x4B<<7 | 0x5A, + 36406 - 19968: jis0212<<14 | 0x3F<<7 | 0x05, + 36407 - 19968: jis0212<<14 | 0x3F<<7 | 0x06, + 36408 - 19968: jis0212<<14 | 0x3F<<7 | 0x07, + 36409 - 19968: jis0212<<14 | 0x3F<<7 | 0x08, + 36413 - 19968: jis0212<<14 | 0x3F<<7 | 0x09, + 36416 - 19968: jis0212<<14 | 0x3F<<7 | 0x0A, + 36417 - 19968: jis0212<<14 | 0x3F<<7 | 0x0B, + 36418 - 19968: jis0208<<14 | 0x4B<<7 | 0x59, + 36420 - 19968: jis0208<<14 | 0x23<<7 | 0x5C, + 36423 - 19968: jis0208<<14 | 0x4C<<7 | 0x00, + 36424 - 19968: jis0208<<14 | 0x4C<<7 | 0x04, + 36425 - 19968: jis0208<<14 | 0x4C<<7 | 0x01, + 36426 - 19968: jis0208<<14 | 0x4B<<7 | 0x5D, + 36427 - 19968: jis0212<<14 | 0x3F<<7 | 0x0C, + 36428 - 19968: jis0208<<14 | 0x4C<<7 | 0x02, + 36429 - 19968: jis0212<<14 | 0x3F<<7 | 0x0D, + 36430 - 19968: jis0212<<14 | 0x3F<<7 | 0x0E, + 36431 - 19968: jis0212<<14 | 0x3F<<7 | 0x0F, + 36432 - 19968: jis0208<<14 | 0x4C<<7 | 0x03, + 36436 - 19968: jis0212<<14 | 0x3F<<7 | 0x10, + 36437 - 19968: jis0208<<14 | 0x4C<<7 | 0x0A, + 36441 - 19968: jis0208<<14 | 0x4C<<7 | 0x05, + 36443 - 19968: jis0212<<14 | 0x3F<<7 | 0x11, + 36444 - 19968: jis0212<<14 | 0x3F<<7 | 0x12, + 36445 - 19968: jis0212<<14 | 0x3F<<7 | 0x13, + 36446 - 19968: jis0212<<14 | 0x3F<<7 | 0x14, + 36447 - 19968: jis0208<<14 | 0x1F<<7 | 0x37, + 36448 - 19968: jis0208<<14 | 0x4C<<7 | 0x07, + 36449 - 19968: jis0212<<14 | 0x3F<<7 | 0x15, + 36450 - 19968: jis0212<<14 | 0x3F<<7 | 0x16, + 36451 - 19968: jis0208<<14 | 0x4C<<7 | 0x09, + 36452 - 19968: jis0208<<14 | 0x4C<<7 | 0x06, + 36457 - 19968: jis0212<<14 | 0x3F<<7 | 0x17, + 36460 - 19968: jis0212<<14 | 0x3F<<7 | 0x18, + 36461 - 19968: jis0212<<14 | 0x3F<<7 | 0x19, + 36463 - 19968: jis0212<<14 | 0x3F<<7 | 0x1A, + 36464 - 19968: jis0212<<14 | 0x3F<<7 | 0x1B, + 36465 - 19968: jis0212<<14 | 0x3F<<7 | 0x1C, + 36466 - 19968: jis0208<<14 | 0x4C<<7 | 0x0C, + 36468 - 19968: jis0208<<14 | 0x1C<<7 | 0x12, + 36470 - 19968: jis0208<<14 | 0x4C<<7 | 0x0B, + 36473 - 19968: jis0212<<14 | 0x3F<<7 | 0x1D, + 36474 - 19968: jis0212<<14 | 0x3F<<7 | 0x1E, + 36475 - 19968: jis0212<<14 | 0x3F<<7 | 0x1F, + 36476 - 19968: jis0208<<14 | 0x4C<<7 | 0x0D, + 36481 - 19968: jis0208<<14 | 0x4C<<7 | 0x0E, + 36482 - 19968: jis0212<<14 | 0x3F<<7 | 0x20, + 36483 - 19968: jis0212<<14 | 0x3F<<7 | 0x21, + 36484 - 19968: jis0208<<14 | 0x4C<<7 | 0x11, + 36485 - 19968: jis0208<<14 | 0x4C<<7 | 0x10, + 36487 - 19968: jis0208<<14 | 0x4C<<7 | 0x0F, + 36489 - 19968: jis0212<<14 | 0x3F<<7 | 0x22, + 36490 - 19968: jis0208<<14 | 0x4C<<7 | 0x13, + 36491 - 19968: jis0208<<14 | 0x4C<<7 | 0x12, + 36493 - 19968: jis0208<<14 | 0x2B<<7 | 0x55, + 36496 - 19968: jis0212<<14 | 0x3F<<7 | 0x23, + 36497 - 19968: jis0208<<14 | 0x4C<<7 | 0x15, + 36498 - 19968: jis0212<<14 | 0x3F<<7 | 0x24, + 36499 - 19968: jis0208<<14 | 0x4C<<7 | 0x14, + 36500 - 19968: jis0208<<14 | 0x4C<<7 | 0x16, + 36501 - 19968: jis0212<<14 | 0x3F<<7 | 0x25, + 36505 - 19968: jis0208<<14 | 0x4C<<7 | 0x17, + 36506 - 19968: jis0212<<14 | 0x3F<<7 | 0x26, + 36507 - 19968: jis0212<<14 | 0x3F<<7 | 0x27, + 36509 - 19968: jis0212<<14 | 0x3F<<7 | 0x28, + 36510 - 19968: jis0212<<14 | 0x3F<<7 | 0x29, + 36513 - 19968: jis0208<<14 | 0x4C<<7 | 0x19, + 36514 - 19968: jis0212<<14 | 0x3F<<7 | 0x2A, + 36519 - 19968: jis0212<<14 | 0x3F<<7 | 0x2B, + 36521 - 19968: jis0212<<14 | 0x3F<<7 | 0x2C, + 36522 - 19968: jis0208<<14 | 0x4C<<7 | 0x18, + 36523 - 19968: jis0208<<14 | 0x1E<<7 | 0x27, + 36524 - 19968: jis0208<<14 | 0x4C<<7 | 0x1A, + 36525 - 19968: jis0212<<14 | 0x3F<<7 | 0x2D, + 36526 - 19968: jis0212<<14 | 0x3F<<7 | 0x2E, + 36527 - 19968: jis0208<<14 | 0x15<<7 | 0x4C, + 36528 - 19968: jis0208<<14 | 0x4C<<7 | 0x1B, + 36529 - 19968: jis0208<<14 | 0x4C<<7 | 0x1D, + 36531 - 19968: jis0212<<14 | 0x3F<<7 | 0x2F, + 36533 - 19968: jis0212<<14 | 0x3F<<7 | 0x30, + 36538 - 19968: jis0212<<14 | 0x3F<<7 | 0x31, + 36539 - 19968: jis0212<<14 | 0x3F<<7 | 0x32, + 36542 - 19968: jis0208<<14 | 0x4C<<7 | 0x1E, + 36544 - 19968: jis0212<<14 | 0x3F<<7 | 0x33, + 36545 - 19968: jis0212<<14 | 0x3F<<7 | 0x34, + 36547 - 19968: jis0212<<14 | 0x3F<<7 | 0x35, + 36548 - 19968: jis0212<<14 | 0x3F<<7 | 0x36, + 36549 - 19968: jis0208<<14 | 0x4C<<7 | 0x1F, + 36550 - 19968: jis0208<<14 | 0x4C<<7 | 0x1C, + 36551 - 19968: jis0212<<14 | 0x3F<<7 | 0x37, + 36552 - 19968: jis0208<<14 | 0x4C<<7 | 0x20, + 36554 - 19968: jis0208<<14 | 0x1B<<7 | 0x35, + 36555 - 19968: jis0208<<14 | 0x4C<<7 | 0x21, + 36556 - 19968: jis0208<<14 | 0x14<<7 | 0x0F, + 36557 - 19968: jis0208<<14 | 0x16<<7 | 0x12, + 36559 - 19968: jis0208<<14 | 0x5A<<7 | 0x55, + 36561 - 19968: jis0212<<14 | 0x3F<<7 | 0x39, + 36562 - 19968: jis0208<<14 | 0x17<<7 | 0x0D, + 36564 - 19968: jis0212<<14 | 0x3F<<7 | 0x3A, + 36571 - 19968: jis0208<<14 | 0x4C<<7 | 0x22, + 36572 - 19968: jis0212<<14 | 0x3F<<7 | 0x3B, + 36575 - 19968: jis0208<<14 | 0x25<<7 | 0x4F, + 36578 - 19968: jis0208<<14 | 0x24<<7 | 0x1D, + 36579 - 19968: jis0208<<14 | 0x4C<<7 | 0x23, + 36584 - 19968: jis0212<<14 | 0x3F<<7 | 0x3C, + 36587 - 19968: jis0208<<14 | 0x4C<<7 | 0x26, + 36589 - 19968: jis0212<<14 | 0x3F<<7 | 0x43, + 36590 - 19968: jis0212<<14 | 0x3F<<7 | 0x3D, + 36592 - 19968: jis0212<<14 | 0x3F<<7 | 0x3E, + 36593 - 19968: jis0212<<14 | 0x3F<<7 | 0x3F, + 36599 - 19968: jis0212<<14 | 0x3F<<7 | 0x40, + 36600 - 19968: jis0208<<14 | 0x1B<<7 | 0x13, + 36601 - 19968: jis0212<<14 | 0x3F<<7 | 0x41, + 36602 - 19968: jis0212<<14 | 0x3F<<7 | 0x42, + 36603 - 19968: jis0208<<14 | 0x4C<<7 | 0x25, + 36604 - 19968: jis0208<<14 | 0x4C<<7 | 0x24, + 36605 - 19968: jis0208<<14 | 0x16<<7 | 0x39, + 36606 - 19968: jis0208<<14 | 0x4C<<7 | 0x27, + 36608 - 19968: jis0212<<14 | 0x3F<<7 | 0x44, + 36610 - 19968: jis0212<<14 | 0x3F<<7 | 0x45, + 36611 - 19968: jis0208<<14 | 0x12<<7 | 0x32, + 36613 - 19968: jis0208<<14 | 0x4C<<7 | 0x29, + 36615 - 19968: jis0212<<14 | 0x3F<<7 | 0x46, + 36616 - 19968: jis0212<<14 | 0x3F<<7 | 0x47, + 36617 - 19968: jis0208<<14 | 0x19<<7 | 0x3B, + 36618 - 19968: jis0208<<14 | 0x4C<<7 | 0x28, + 36620 - 19968: jis0208<<14 | 0x4C<<7 | 0x31, + 36623 - 19968: jis0212<<14 | 0x3F<<7 | 0x48, + 36624 - 19968: jis0212<<14 | 0x3F<<7 | 0x49, + 36626 - 19968: jis0208<<14 | 0x4C<<7 | 0x2B, + 36627 - 19968: jis0208<<14 | 0x4C<<7 | 0x2D, + 36628 - 19968: jis0208<<14 | 0x29<<7 | 0x44, + 36629 - 19968: jis0208<<14 | 0x4C<<7 | 0x2A, + 36630 - 19968: jis0212<<14 | 0x3F<<7 | 0x4A, + 36631 - 19968: jis0212<<14 | 0x3F<<7 | 0x4B, + 36632 - 19968: jis0212<<14 | 0x3F<<7 | 0x4C, + 36633 - 19968: jis0208<<14 | 0x4C<<7 | 0x2C, + 36635 - 19968: jis0208<<14 | 0x4C<<7 | 0x30, + 36636 - 19968: jis0208<<14 | 0x4C<<7 | 0x2E, + 36637 - 19968: jis0208<<14 | 0x14<<7 | 0x10, + 36638 - 19968: jis0212<<14 | 0x3F<<7 | 0x4D, + 36639 - 19968: jis0208<<14 | 0x4C<<7 | 0x2F, + 36640 - 19968: jis0212<<14 | 0x3F<<7 | 0x4E, + 36641 - 19968: jis0212<<14 | 0x3F<<7 | 0x4F, + 36643 - 19968: jis0212<<14 | 0x3F<<7 | 0x50, + 36645 - 19968: jis0212<<14 | 0x3F<<7 | 0x51, + 36646 - 19968: jis0208<<14 | 0x4C<<7 | 0x32, + 36647 - 19968: jis0212<<14 | 0x3F<<7 | 0x52, + 36648 - 19968: jis0212<<14 | 0x3F<<7 | 0x53, + 36649 - 19968: jis0208<<14 | 0x26<<7 | 0x39, + 36650 - 19968: jis0208<<14 | 0x2D<<7 | 0x37, + 36652 - 19968: jis0212<<14 | 0x3F<<7 | 0x54, + 36653 - 19968: jis0212<<14 | 0x3F<<7 | 0x55, + 36654 - 19968: jis0212<<14 | 0x3F<<7 | 0x56, + 36655 - 19968: jis0208<<14 | 0x1C<<7 | 0x13, + 36659 - 19968: jis0208<<14 | 0x4C<<7 | 0x33, + 36660 - 19968: jis0212<<14 | 0x3F<<7 | 0x57, + 36661 - 19968: jis0212<<14 | 0x3F<<7 | 0x58, + 36662 - 19968: jis0212<<14 | 0x3F<<7 | 0x59, + 36663 - 19968: jis0212<<14 | 0x3F<<7 | 0x5A, + 36664 - 19968: jis0208<<14 | 0x2C<<7 | 0x01, + 36665 - 19968: jis0208<<14 | 0x4C<<7 | 0x35, + 36666 - 19968: jis0212<<14 | 0x3F<<7 | 0x5B, + 36667 - 19968: jis0208<<14 | 0x4C<<7 | 0x34, + 36670 - 19968: jis0208<<14 | 0x4C<<7 | 0x38, + 36671 - 19968: jis0208<<14 | 0x2C<<7 | 0x20, + 36672 - 19968: jis0212<<14 | 0x3F<<7 | 0x5C, + 36673 - 19968: jis0212<<14 | 0x3F<<7 | 0x5D, + 36674 - 19968: jis0208<<14 | 0x4C<<7 | 0x37, + 36675 - 19968: jis0212<<14 | 0x40<<7 | 0x00, + 36676 - 19968: jis0208<<14 | 0x12<<7 | 0x4C, + 36677 - 19968: jis0208<<14 | 0x4C<<7 | 0x36, + 36678 - 19968: jis0208<<14 | 0x4C<<7 | 0x3B, + 36679 - 19968: jis0212<<14 | 0x40<<7 | 0x01, + 36681 - 19968: jis0208<<14 | 0x4C<<7 | 0x3A, + 36684 - 19968: jis0208<<14 | 0x4C<<7 | 0x39, + 36685 - 19968: jis0208<<14 | 0x24<<7 | 0x11, + 36686 - 19968: jis0208<<14 | 0x4C<<7 | 0x3C, + 36687 - 19968: jis0212<<14 | 0x40<<7 | 0x02, + 36689 - 19968: jis0212<<14 | 0x40<<7 | 0x03, + 36690 - 19968: jis0212<<14 | 0x40<<7 | 0x04, + 36691 - 19968: jis0212<<14 | 0x40<<7 | 0x05, + 36692 - 19968: jis0212<<14 | 0x40<<7 | 0x06, + 36693 - 19968: jis0212<<14 | 0x40<<7 | 0x07, + 36695 - 19968: jis0208<<14 | 0x4C<<7 | 0x3D, + 36696 - 19968: jis0212<<14 | 0x40<<7 | 0x08, + 36700 - 19968: jis0208<<14 | 0x4C<<7 | 0x3E, + 36701 - 19968: jis0212<<14 | 0x40<<7 | 0x09, + 36702 - 19968: jis0212<<14 | 0x40<<7 | 0x0A, + 36703 - 19968: jis0208<<14 | 0x18<<7 | 0x4B, + 36705 - 19968: jis0208<<14 | 0x16<<7 | 0x04, + 36706 - 19968: jis0208<<14 | 0x4C<<7 | 0x3F, + 36707 - 19968: jis0208<<14 | 0x4C<<7 | 0x40, + 36708 - 19968: jis0208<<14 | 0x4C<<7 | 0x41, + 36709 - 19968: jis0212<<14 | 0x40<<7 | 0x0B, + 36763 - 19968: jis0208<<14 | 0x1E<<7 | 0x28, + 36764 - 19968: jis0208<<14 | 0x4C<<7 | 0x42, + 36765 - 19968: jis0212<<14 | 0x40<<7 | 0x0C, + 36766 - 19968: jis0208<<14 | 0x1B<<7 | 0x0C, + 36767 - 19968: jis0208<<14 | 0x4C<<7 | 0x43, + 36768 - 19968: jis0212<<14 | 0x40<<7 | 0x0D, + 36769 - 19968: jis0212<<14 | 0x40<<7 | 0x0E, + 36771 - 19968: jis0208<<14 | 0x4C<<7 | 0x44, + 36772 - 19968: jis0212<<14 | 0x40<<7 | 0x0F, + 36773 - 19968: jis0212<<14 | 0x40<<7 | 0x10, + 36774 - 19968: jis0212<<14 | 0x40<<7 | 0x11, + 36775 - 19968: jis0208<<14 | 0x31<<7 | 0x00, + 36776 - 19968: jis0208<<14 | 0x30<<7 | 0x5D, + 36781 - 19968: jis0208<<14 | 0x4C<<7 | 0x45, + 36782 - 19968: jis0208<<14 | 0x44<<7 | 0x4F, + 36783 - 19968: jis0208<<14 | 0x4C<<7 | 0x46, + 36784 - 19968: jis0208<<14 | 0x22<<7 | 0x03, + 36785 - 19968: jis0208<<14 | 0x1E<<7 | 0x0A, + 36786 - 19968: jis0208<<14 | 0x26<<7 | 0x1F, + 36789 - 19968: jis0212<<14 | 0x40<<7 | 0x12, + 36790 - 19968: jis0212<<14 | 0x40<<7 | 0x13, + 36791 - 19968: jis0208<<14 | 0x4C<<7 | 0x47, + 36792 - 19968: jis0212<<14 | 0x40<<7 | 0x14, + 36794 - 19968: jis0208<<14 | 0x29<<7 | 0x34, + 36795 - 19968: jis0208<<14 | 0x23<<7 | 0x33, + 36796 - 19968: jis0208<<14 | 0x18<<7 | 0x5D, + 36798 - 19968: jis0212<<14 | 0x40<<7 | 0x15, + 36799 - 19968: jis0208<<14 | 0x22<<7 | 0x08, + 36800 - 19968: jis0212<<14 | 0x40<<7 | 0x16, + 36801 - 19968: jis0212<<14 | 0x40<<7 | 0x17, + 36802 - 19968: jis0208<<14 | 0x10<<7 | 0x09, + 36804 - 19968: jis0208<<14 | 0x2A<<7 | 0x57, + 36805 - 19968: jis0208<<14 | 0x1E<<7 | 0x36, + 36806 - 19968: jis0212<<14 | 0x40<<7 | 0x18, + 36810 - 19968: jis0212<<14 | 0x40<<7 | 0x19, + 36811 - 19968: jis0212<<14 | 0x40<<7 | 0x1A, + 36813 - 19968: jis0212<<14 | 0x40<<7 | 0x1B, + 36814 - 19968: jis0208<<14 | 0x16<<7 | 0x3D, + 36816 - 19968: jis0212<<14 | 0x40<<7 | 0x1C, + 36817 - 19968: jis0208<<14 | 0x15<<7 | 0x40, + 36818 - 19968: jis0212<<14 | 0x40<<7 | 0x1D, + 36819 - 19968: jis0212<<14 | 0x40<<7 | 0x1E, + 36820 - 19968: jis0208<<14 | 0x29<<7 | 0x35, + 36821 - 19968: jis0212<<14 | 0x40<<7 | 0x1F, + 36826 - 19968: jis0208<<14 | 0x4C<<7 | 0x48, + 36832 - 19968: jis0212<<14 | 0x40<<7 | 0x20, + 36834 - 19968: jis0208<<14 | 0x4C<<7 | 0x4A, + 36835 - 19968: jis0212<<14 | 0x40<<7 | 0x21, + 36836 - 19968: jis0212<<14 | 0x40<<7 | 0x22, + 36837 - 19968: jis0208<<14 | 0x4C<<7 | 0x49, + 36838 - 19968: jis0208<<14 | 0x11<<7 | 0x3F, + 36840 - 19968: jis0212<<14 | 0x40<<7 | 0x23, + 36841 - 19968: jis0208<<14 | 0x25<<7 | 0x55, + 36842 - 19968: jis0208<<14 | 0x4C<<7 | 0x4B, + 36843 - 19968: jis0208<<14 | 0x26<<7 | 0x56, + 36845 - 19968: jis0208<<14 | 0x24<<7 | 0x12, + 36846 - 19968: jis0212<<14 | 0x40<<7 | 0x24, + 36847 - 19968: jis0208<<14 | 0x4C<<7 | 0x4C, + 36848 - 19968: jis0208<<14 | 0x1C<<7 | 0x31, + 36849 - 19968: jis0212<<14 | 0x40<<7 | 0x25, + 36852 - 19968: jis0208<<14 | 0x4C<<7 | 0x4E, + 36853 - 19968: jis0212<<14 | 0x40<<7 | 0x26, + 36854 - 19968: jis0212<<14 | 0x40<<7 | 0x27, + 36855 - 19968: jis0208<<14 | 0x2B<<7 | 0x21, + 36856 - 19968: jis0208<<14 | 0x4C<<7 | 0x5D, + 36857 - 19968: jis0208<<14 | 0x4C<<7 | 0x50, + 36858 - 19968: jis0208<<14 | 0x4C<<7 | 0x51, + 36859 - 19968: jis0212<<14 | 0x40<<7 | 0x28, + 36861 - 19968: jis0208<<14 | 0x23<<7 | 0x28, + 36862 - 19968: jis0212<<14 | 0x40<<7 | 0x29, + 36864 - 19968: jis0208<<14 | 0x21<<7 | 0x3F, + 36865 - 19968: jis0208<<14 | 0x20<<7 | 0x56, + 36866 - 19968: jis0212<<14 | 0x40<<7 | 0x2A, + 36867 - 19968: jis0208<<14 | 0x25<<7 | 0x07, + 36868 - 19968: jis0212<<14 | 0x40<<7 | 0x2B, + 36869 - 19968: jis0208<<14 | 0x4C<<7 | 0x4F, + 36870 - 19968: jis0208<<14 | 0x14<<7 | 0x34, + 36872 - 19968: jis0212<<14 | 0x40<<7 | 0x2C, + 36875 - 19968: jis0208<<14 | 0x4C<<7 | 0x58, + 36876 - 19968: jis0212<<14 | 0x40<<7 | 0x2D, + 36877 - 19968: jis0208<<14 | 0x4C<<7 | 0x55, + 36878 - 19968: jis0208<<14 | 0x4D<<7 | 0x04, + 36879 - 19968: jis0208<<14 | 0x25<<7 | 0x08, + 36880 - 19968: jis0208<<14 | 0x22<<7 | 0x3F, + 36881 - 19968: jis0208<<14 | 0x4C<<7 | 0x52, + 36883 - 19968: jis0208<<14 | 0x23<<7 | 0x5D, + 36884 - 19968: jis0208<<14 | 0x24<<7 | 0x32, + 36885 - 19968: jis0208<<14 | 0x4C<<7 | 0x53, + 36886 - 19968: jis0208<<14 | 0x4C<<7 | 0x57, + 36887 - 19968: jis0208<<14 | 0x1E<<7 | 0x3F, + 36888 - 19968: jis0212<<14 | 0x40<<7 | 0x2E, + 36889 - 19968: jis0208<<14 | 0x26<<7 | 0x46, + 36890 - 19968: jis0208<<14 | 0x23<<7 | 0x2B, + 36891 - 19968: jis0212<<14 | 0x40<<7 | 0x2F, + 36893 - 19968: jis0208<<14 | 0x1F<<7 | 0x21, + 36894 - 19968: jis0208<<14 | 0x4C<<7 | 0x56, + 36895 - 19968: jis0208<<14 | 0x21<<7 | 0x0D, + 36896 - 19968: jis0208<<14 | 0x21<<7 | 0x03, + 36897 - 19968: jis0208<<14 | 0x4C<<7 | 0x54, + 36898 - 19968: jis0208<<14 | 0x0F<<7 | 0x08, + 36899 - 19968: jis0208<<14 | 0x2E<<7 | 0x01, + 36903 - 19968: jis0208<<14 | 0x4C<<7 | 0x59, + 36904 - 19968: jis0212<<14 | 0x40<<7 | 0x30, + 36905 - 19968: jis0212<<14 | 0x40<<7 | 0x31, + 36906 - 19968: jis0212<<14 | 0x40<<7 | 0x33, + 36908 - 19968: jis0212<<14 | 0x40<<7 | 0x34, + 36909 - 19968: jis0212<<14 | 0x40<<7 | 0x35, + 36910 - 19968: jis0208<<14 | 0x21<<7 | 0x40, + 36911 - 19968: jis0212<<14 | 0x40<<7 | 0x32, + 36913 - 19968: jis0208<<14 | 0x1C<<7 | 0x14, + 36914 - 19968: jis0208<<14 | 0x1E<<7 | 0x29, + 36915 - 19968: jis0212<<14 | 0x40<<7 | 0x36, + 36916 - 19968: jis0212<<14 | 0x40<<7 | 0x37, + 36917 - 19968: jis0208<<14 | 0x4C<<7 | 0x5B, + 36918 - 19968: jis0208<<14 | 0x4C<<7 | 0x5A, + 36919 - 19968: jis0212<<14 | 0x40<<7 | 0x38, + 36920 - 19968: jis0208<<14 | 0x0F<<7 | 0x4E, + 36921 - 19968: jis0208<<14 | 0x4C<<7 | 0x5C, + 36924 - 19968: jis0208<<14 | 0x28<<7 | 0x0E, + 36926 - 19968: jis0208<<14 | 0x4D<<7 | 0x06, + 36927 - 19968: jis0212<<14 | 0x40<<7 | 0x39, + 36929 - 19968: jis0208<<14 | 0x25<<7 | 0x3A, + 36930 - 19968: jis0208<<14 | 0x1E<<7 | 0x4A, + 36931 - 19968: jis0212<<14 | 0x40<<7 | 0x3A, + 36932 - 19968: jis0212<<14 | 0x40<<7 | 0x3B, + 36933 - 19968: jis0208<<14 | 0x22<<7 | 0x38, + 36935 - 19968: jis0208<<14 | 0x15<<7 | 0x57, + 36937 - 19968: jis0208<<14 | 0x4D<<7 | 0x05, + 36938 - 19968: jis0208<<14 | 0x2C<<7 | 0x16, + 36939 - 19968: jis0208<<14 | 0x10<<7 | 0x1E, + 36940 - 19968: jis0212<<14 | 0x40<<7 | 0x3C, + 36941 - 19968: jis0208<<14 | 0x29<<7 | 0x36, + 36942 - 19968: jis0208<<14 | 0x11<<7 | 0x40, + 36943 - 19968: jis0208<<14 | 0x4D<<7 | 0x00, + 36944 - 19968: jis0208<<14 | 0x4D<<7 | 0x01, + 36945 - 19968: jis0208<<14 | 0x4D<<7 | 0x02, + 36946 - 19968: jis0208<<14 | 0x4D<<7 | 0x03, + 36947 - 19968: jis0208<<14 | 0x25<<7 | 0x1A, + 36948 - 19968: jis0208<<14 | 0x22<<7 | 0x02, + 36949 - 19968: jis0208<<14 | 0x0F<<7 | 0x42, + 36950 - 19968: jis0208<<14 | 0x4D<<7 | 0x07, + 36952 - 19968: jis0208<<14 | 0x4D<<7 | 0x08, + 36953 - 19968: jis0208<<14 | 0x53<<7 | 0x02, + 36955 - 19968: jis0212<<14 | 0x40<<7 | 0x3D, + 36956 - 19968: jis0208<<14 | 0x21<<7 | 0x1C, + 36957 - 19968: jis0212<<14 | 0x40<<7 | 0x3E, + 36958 - 19968: jis0208<<14 | 0x4D<<7 | 0x09, + 36960 - 19968: jis0208<<14 | 0x10<<7 | 0x52, + 36961 - 19968: jis0208<<14 | 0x20<<7 | 0x2B, + 36962 - 19968: jis0212<<14 | 0x40<<7 | 0x3F, + 36963 - 19968: jis0208<<14 | 0x17<<7 | 0x0E, + 36965 - 19968: jis0208<<14 | 0x2C<<7 | 0x39, + 36966 - 19968: jis0212<<14 | 0x40<<7 | 0x40, + 36967 - 19968: jis0208<<14 | 0x5A<<7 | 0x58, + 36968 - 19968: jis0208<<14 | 0x4D<<7 | 0x0A, + 36969 - 19968: jis0208<<14 | 0x24<<7 | 0x0B, + 36972 - 19968: jis0212<<14 | 0x40<<7 | 0x42, + 36973 - 19968: jis0208<<14 | 0x20<<7 | 0x57, + 36974 - 19968: jis0208<<14 | 0x1B<<7 | 0x36, + 36975 - 19968: jis0208<<14 | 0x4D<<7 | 0x0B, + 36976 - 19968: jis0212<<14 | 0x40<<7 | 0x43, + 36978 - 19968: jis0208<<14 | 0x4D<<7 | 0x0E, + 36980 - 19968: jis0212<<14 | 0x40<<7 | 0x44, + 36981 - 19968: jis0208<<14 | 0x1C<<7 | 0x44, + 36982 - 19968: jis0208<<14 | 0x4D<<7 | 0x0C, + 36983 - 19968: jis0208<<14 | 0x20<<7 | 0x0A, + 36984 - 19968: jis0208<<14 | 0x20<<7 | 0x09, + 36985 - 19968: jis0212<<14 | 0x40<<7 | 0x45, + 36986 - 19968: jis0208<<14 | 0x0F<<7 | 0x43, + 36988 - 19968: jis0208<<14 | 0x2D<<7 | 0x2A, + 36989 - 19968: jis0208<<14 | 0x4D<<7 | 0x10, + 36991 - 19968: jis0208<<14 | 0x27<<7 | 0x51, + 36992 - 19968: jis0208<<14 | 0x4D<<7 | 0x12, + 36993 - 19968: jis0208<<14 | 0x4D<<7 | 0x11, + 36994 - 19968: jis0208<<14 | 0x4D<<7 | 0x0F, + 36995 - 19968: jis0208<<14 | 0x42<<7 | 0x43, + 36996 - 19968: jis0208<<14 | 0x13<<7 | 0x33, + 36997 - 19968: jis0212<<14 | 0x40<<7 | 0x46, + 36999 - 19968: jis0208<<14 | 0x4C<<7 | 0x4D, + 37000 - 19968: jis0212<<14 | 0x40<<7 | 0x47, + 37001 - 19968: jis0208<<14 | 0x4D<<7 | 0x14, + 37002 - 19968: jis0208<<14 | 0x4D<<7 | 0x13, + 37003 - 19968: jis0212<<14 | 0x40<<7 | 0x48, + 37004 - 19968: jis0212<<14 | 0x40<<7 | 0x49, + 37006 - 19968: jis0212<<14 | 0x40<<7 | 0x4A, + 37007 - 19968: jis0208<<14 | 0x4D<<7 | 0x15, + 37008 - 19968: jis0212<<14 | 0x40<<7 | 0x4B, + 37009 - 19968: jis0208<<14 | 0x2C<<7 | 0x17, + 37013 - 19968: jis0212<<14 | 0x40<<7 | 0x4C, + 37015 - 19968: jis0212<<14 | 0x40<<7 | 0x4D, + 37016 - 19968: jis0212<<14 | 0x40<<7 | 0x4E, + 37017 - 19968: jis0212<<14 | 0x40<<7 | 0x4F, + 37019 - 19968: jis0212<<14 | 0x40<<7 | 0x50, + 37024 - 19968: jis0212<<14 | 0x40<<7 | 0x51, + 37025 - 19968: jis0212<<14 | 0x40<<7 | 0x52, + 37026 - 19968: jis0212<<14 | 0x40<<7 | 0x53, + 37027 - 19968: jis0208<<14 | 0x25<<7 | 0x40, + 37029 - 19968: jis0212<<14 | 0x40<<7 | 0x54, + 37030 - 19968: jis0208<<14 | 0x2A<<7 | 0x0D, + 37032 - 19968: jis0208<<14 | 0x4D<<7 | 0x16, + 37034 - 19968: jis0208<<14 | 0x1B<<7 | 0x38, + 37039 - 19968: jis0208<<14 | 0x4D<<7 | 0x17, + 37040 - 19968: jis0212<<14 | 0x40<<7 | 0x55, + 37041 - 19968: jis0208<<14 | 0x4D<<7 | 0x18, + 37042 - 19968: jis0212<<14 | 0x40<<7 | 0x56, + 37043 - 19968: jis0212<<14 | 0x40<<7 | 0x57, + 37044 - 19968: jis0212<<14 | 0x40<<7 | 0x58, + 37045 - 19968: jis0208<<14 | 0x4D<<7 | 0x19, + 37046 - 19968: jis0212<<14 | 0x40<<7 | 0x59, + 37048 - 19968: jis0208<<14 | 0x24<<7 | 0x00, + 37053 - 19968: jis0212<<14 | 0x40<<7 | 0x5A, + 37054 - 19968: jis0212<<14 | 0x40<<7 | 0x5C, + 37057 - 19968: jis0208<<14 | 0x0F<<7 | 0x49, + 37059 - 19968: jis0212<<14 | 0x40<<7 | 0x5D, + 37060 - 19968: jis0212<<14 | 0x41<<7 | 0x00, + 37061 - 19968: jis0212<<14 | 0x41<<7 | 0x01, + 37063 - 19968: jis0212<<14 | 0x41<<7 | 0x02, + 37064 - 19968: jis0212<<14 | 0x41<<7 | 0x03, + 37066 - 19968: jis0208<<14 | 0x18<<7 | 0x38, + 37068 - 19968: jis0212<<14 | 0x40<<7 | 0x5B, + 37070 - 19968: jis0208<<14 | 0x2E<<7 | 0x19, + 37074 - 19968: jis0212<<14 | 0x41<<7 | 0x0C, + 37077 - 19968: jis0212<<14 | 0x41<<7 | 0x04, + 37079 - 19968: jis0212<<14 | 0x41<<7 | 0x05, + 37080 - 19968: jis0212<<14 | 0x41<<7 | 0x06, + 37081 - 19968: jis0212<<14 | 0x41<<7 | 0x07, + 37083 - 19968: jis0208<<14 | 0x4D<<7 | 0x1D, + 37084 - 19968: jis0212<<14 | 0x41<<7 | 0x08, + 37085 - 19968: jis0212<<14 | 0x41<<7 | 0x09, + 37086 - 19968: jis0208<<14 | 0x5A<<7 | 0x59, + 37087 - 19968: jis0212<<14 | 0x41<<7 | 0x0A, + 37089 - 19968: jis0208<<14 | 0x16<<7 | 0x13, + 37090 - 19968: jis0208<<14 | 0x4D<<7 | 0x1A, + 37092 - 19968: jis0208<<14 | 0x4D<<7 | 0x1B, + 37093 - 19968: jis0212<<14 | 0x41<<7 | 0x0B, + 37096 - 19968: jis0208<<14 | 0x28<<7 | 0x53, + 37099 - 19968: jis0212<<14 | 0x41<<7 | 0x0E, + 37101 - 19968: jis0208<<14 | 0x12<<7 | 0x33, + 37103 - 19968: jis0212<<14 | 0x41<<7 | 0x0F, + 37104 - 19968: jis0212<<14 | 0x41<<7 | 0x10, + 37108 - 19968: jis0212<<14 | 0x41<<7 | 0x11, + 37109 - 19968: jis0208<<14 | 0x2C<<7 | 0x18, + 37110 - 19968: jis0212<<14 | 0x41<<7 | 0x0D, + 37111 - 19968: jis0208<<14 | 0x15<<7 | 0x1E, + 37117 - 19968: jis0208<<14 | 0x24<<7 | 0x33, + 37118 - 19968: jis0212<<14 | 0x41<<7 | 0x12, + 37119 - 19968: jis0212<<14 | 0x41<<7 | 0x13, + 37120 - 19968: jis0212<<14 | 0x41<<7 | 0x14, + 37122 - 19968: jis0208<<14 | 0x4D<<7 | 0x1E, + 37124 - 19968: jis0212<<14 | 0x41<<7 | 0x15, + 37125 - 19968: jis0212<<14 | 0x41<<7 | 0x16, + 37126 - 19968: jis0212<<14 | 0x41<<7 | 0x17, + 37128 - 19968: jis0212<<14 | 0x41<<7 | 0x18, + 37133 - 19968: jis0212<<14 | 0x41<<7 | 0x19, + 37136 - 19968: jis0212<<14 | 0x41<<7 | 0x1A, + 37138 - 19968: jis0208<<14 | 0x4D<<7 | 0x1F, + 37140 - 19968: jis0212<<14 | 0x41<<7 | 0x1B, + 37141 - 19968: jis0208<<14 | 0x5A<<7 | 0x5B, + 37142 - 19968: jis0212<<14 | 0x41<<7 | 0x1C, + 37143 - 19968: jis0212<<14 | 0x41<<7 | 0x1D, + 37144 - 19968: jis0212<<14 | 0x41<<7 | 0x1E, + 37145 - 19968: jis0208<<14 | 0x4D<<7 | 0x20, + 37146 - 19968: jis0212<<14 | 0x41<<7 | 0x1F, + 37148 - 19968: jis0212<<14 | 0x41<<7 | 0x20, + 37150 - 19968: jis0212<<14 | 0x41<<7 | 0x21, + 37152 - 19968: jis0212<<14 | 0x41<<7 | 0x22, + 37154 - 19968: jis0212<<14 | 0x41<<7 | 0x24, + 37155 - 19968: jis0212<<14 | 0x41<<7 | 0x25, + 37157 - 19968: jis0212<<14 | 0x41<<7 | 0x23, + 37159 - 19968: jis0208<<14 | 0x5A<<7 | 0x5C, + 37161 - 19968: jis0212<<14 | 0x41<<7 | 0x27, + 37165 - 19968: jis0208<<14 | 0x24<<7 | 0x01, + 37166 - 19968: jis0212<<14 | 0x41<<7 | 0x28, + 37167 - 19968: jis0212<<14 | 0x41<<7 | 0x29, + 37168 - 19968: jis0208<<14 | 0x4D<<7 | 0x22, + 37169 - 19968: jis0212<<14 | 0x41<<7 | 0x2A, + 37170 - 19968: jis0208<<14 | 0x4D<<7 | 0x21, + 37172 - 19968: jis0212<<14 | 0x41<<7 | 0x2B, + 37174 - 19968: jis0212<<14 | 0x41<<7 | 0x2C, + 37175 - 19968: jis0212<<14 | 0x41<<7 | 0x2D, + 37177 - 19968: jis0212<<14 | 0x41<<7 | 0x2E, + 37178 - 19968: jis0212<<14 | 0x41<<7 | 0x2F, + 37180 - 19968: jis0212<<14 | 0x41<<7 | 0x30, + 37181 - 19968: jis0212<<14 | 0x41<<7 | 0x31, + 37187 - 19968: jis0212<<14 | 0x41<<7 | 0x32, + 37191 - 19968: jis0212<<14 | 0x41<<7 | 0x33, + 37192 - 19968: jis0212<<14 | 0x41<<7 | 0x34, + 37193 - 19968: jis0208<<14 | 0x25<<7 | 0x32, + 37194 - 19968: jis0208<<14 | 0x4D<<7 | 0x23, + 37195 - 19968: jis0208<<14 | 0x1C<<7 | 0x15, + 37196 - 19968: jis0208<<14 | 0x1B<<7 | 0x3F, + 37197 - 19968: jis0208<<14 | 0x26<<7 | 0x3A, + 37198 - 19968: jis0208<<14 | 0x22<<7 | 0x50, + 37199 - 19968: jis0212<<14 | 0x41<<7 | 0x35, + 37202 - 19968: jis0208<<14 | 0x1B<<7 | 0x51, + 37203 - 19968: jis0212<<14 | 0x41<<7 | 0x36, + 37204 - 19968: jis0208<<14 | 0x1E<<7 | 0x4B, + 37206 - 19968: jis0208<<14 | 0x4D<<7 | 0x24, + 37207 - 19968: jis0212<<14 | 0x41<<7 | 0x37, + 37208 - 19968: jis0208<<14 | 0x4D<<7 | 0x25, + 37209 - 19968: jis0212<<14 | 0x41<<7 | 0x38, + 37210 - 19968: jis0212<<14 | 0x41<<7 | 0x39, + 37211 - 19968: jis0212<<14 | 0x41<<7 | 0x3A, + 37217 - 19968: jis0212<<14 | 0x41<<7 | 0x3B, + 37218 - 19968: jis0208<<14 | 0x1E<<7 | 0x3C, + 37219 - 19968: jis0208<<14 | 0x4D<<7 | 0x26, + 37220 - 19968: jis0212<<14 | 0x41<<7 | 0x3C, + 37221 - 19968: jis0208<<14 | 0x4D<<7 | 0x27, + 37223 - 19968: jis0212<<14 | 0x41<<7 | 0x3D, + 37225 - 19968: jis0208<<14 | 0x4D<<7 | 0x28, + 37226 - 19968: jis0208<<14 | 0x2C<<7 | 0x4E, + 37228 - 19968: jis0208<<14 | 0x1C<<7 | 0x16, + 37229 - 19968: jis0212<<14 | 0x41<<7 | 0x3E, + 37234 - 19968: jis0208<<14 | 0x4D<<7 | 0x2A, + 37235 - 19968: jis0208<<14 | 0x4D<<7 | 0x29, + 37236 - 19968: jis0212<<14 | 0x41<<7 | 0x3F, + 37237 - 19968: jis0208<<14 | 0x18<<7 | 0x39, + 37239 - 19968: jis0208<<14 | 0x18<<7 | 0x52, + 37240 - 19968: jis0208<<14 | 0x1A<<7 | 0x1F, + 37241 - 19968: jis0212<<14 | 0x41<<7 | 0x40, + 37242 - 19968: jis0212<<14 | 0x41<<7 | 0x41, + 37243 - 19968: jis0212<<14 | 0x41<<7 | 0x42, + 37249 - 19968: jis0212<<14 | 0x41<<7 | 0x43, + 37250 - 19968: jis0208<<14 | 0x4D<<7 | 0x2D, + 37251 - 19968: jis0212<<14 | 0x41<<7 | 0x44, + 37253 - 19968: jis0212<<14 | 0x41<<7 | 0x45, + 37254 - 19968: jis0212<<14 | 0x41<<7 | 0x46, + 37255 - 19968: jis0208<<14 | 0x1C<<7 | 0x45, + 37257 - 19968: jis0208<<14 | 0x4D<<7 | 0x2C, + 37258 - 19968: jis0212<<14 | 0x41<<7 | 0x47, + 37259 - 19968: jis0208<<14 | 0x4D<<7 | 0x2B, + 37261 - 19968: jis0208<<14 | 0x21<<7 | 0x48, + 37262 - 19968: jis0212<<14 | 0x41<<7 | 0x48, + 37264 - 19968: jis0208<<14 | 0x17<<7 | 0x4E, + 37265 - 19968: jis0212<<14 | 0x41<<7 | 0x49, + 37266 - 19968: jis0208<<14 | 0x1F<<7 | 0x22, + 37267 - 19968: jis0212<<14 | 0x41<<7 | 0x4A, + 37268 - 19968: jis0212<<14 | 0x41<<7 | 0x4B, + 37269 - 19968: jis0212<<14 | 0x41<<7 | 0x4C, + 37271 - 19968: jis0208<<14 | 0x27<<7 | 0x0F, + 37272 - 19968: jis0212<<14 | 0x41<<7 | 0x4D, + 37276 - 19968: jis0208<<14 | 0x1C<<7 | 0x18, + 37278 - 19968: jis0212<<14 | 0x41<<7 | 0x4E, + 37281 - 19968: jis0212<<14 | 0x41<<7 | 0x4F, + 37282 - 19968: jis0208<<14 | 0x4D<<7 | 0x2E, + 37284 - 19968: jis0208<<14 | 0x1D<<7 | 0x3E, + 37286 - 19968: jis0212<<14 | 0x41<<7 | 0x50, + 37288 - 19968: jis0212<<14 | 0x41<<7 | 0x51, + 37290 - 19968: jis0208<<14 | 0x4D<<7 | 0x31, + 37291 - 19968: jis0208<<14 | 0x4D<<7 | 0x2F, + 37292 - 19968: jis0212<<14 | 0x41<<7 | 0x52, + 37293 - 19968: jis0212<<14 | 0x41<<7 | 0x53, + 37294 - 19968: jis0212<<14 | 0x41<<7 | 0x54, + 37295 - 19968: jis0208<<14 | 0x4D<<7 | 0x30, + 37296 - 19968: jis0212<<14 | 0x41<<7 | 0x55, + 37297 - 19968: jis0212<<14 | 0x41<<7 | 0x56, + 37298 - 19968: jis0212<<14 | 0x41<<7 | 0x57, + 37299 - 19968: jis0212<<14 | 0x41<<7 | 0x58, + 37300 - 19968: jis0208<<14 | 0x4D<<7 | 0x33, + 37301 - 19968: jis0208<<14 | 0x4D<<7 | 0x32, + 37302 - 19968: jis0212<<14 | 0x41<<7 | 0x59, + 37304 - 19968: jis0208<<14 | 0x1D<<7 | 0x59, + 37306 - 19968: jis0208<<14 | 0x4D<<7 | 0x34, + 37307 - 19968: jis0212<<14 | 0x41<<7 | 0x5A, + 37308 - 19968: jis0212<<14 | 0x41<<7 | 0x5B, + 37309 - 19968: jis0212<<14 | 0x41<<7 | 0x5C, + 37311 - 19968: jis0212<<14 | 0x41<<7 | 0x5D, + 37312 - 19968: jis0208<<14 | 0x4D<<7 | 0x35, + 37313 - 19968: jis0208<<14 | 0x4D<<7 | 0x36, + 37314 - 19968: jis0212<<14 | 0x42<<7 | 0x00, + 37315 - 19968: jis0212<<14 | 0x42<<7 | 0x01, + 37317 - 19968: jis0212<<14 | 0x42<<7 | 0x02, + 37318 - 19968: jis0208<<14 | 0x27<<7 | 0x2F, + 37319 - 19968: jis0208<<14 | 0x19<<7 | 0x32, + 37320 - 19968: jis0208<<14 | 0x1B<<7 | 0x40, + 37321 - 19968: jis0208<<14 | 0x4D<<7 | 0x37, + 37323 - 19968: jis0208<<14 | 0x4D<<7 | 0x38, + 37324 - 19968: jis0208<<14 | 0x2D<<7 | 0x03, + 37325 - 19968: jis0208<<14 | 0x1C<<7 | 0x24, + 37326 - 19968: jis0208<<14 | 0x2B<<7 | 0x4D, + 37327 - 19968: jis0208<<14 | 0x2D<<7 | 0x2B, + 37328 - 19968: jis0208<<14 | 0x4D<<7 | 0x39, + 37329 - 19968: jis0208<<14 | 0x15<<7 | 0x41, + 37331 - 19968: jis0212<<14 | 0x42<<7 | 0x03, + 37332 - 19968: jis0212<<14 | 0x42<<7 | 0x04, + 37334 - 19968: jis0208<<14 | 0x4D<<7 | 0x3A, + 37335 - 19968: jis0208<<14 | 0x5B<<7 | 0x00, + 37336 - 19968: jis0208<<14 | 0x24<<7 | 0x02, + 37337 - 19968: jis0212<<14 | 0x42<<7 | 0x06, + 37338 - 19968: jis0208<<14 | 0x5A<<7 | 0x5D, + 37339 - 19968: jis0208<<14 | 0x4D<<7 | 0x3D, + 37340 - 19968: jis0208<<14 | 0x12<<7 | 0x57, + 37341 - 19968: jis0208<<14 | 0x1E<<7 | 0x2A, + 37342 - 19968: jis0208<<14 | 0x5B<<7 | 0x01, + 37343 - 19968: jis0208<<14 | 0x4D<<7 | 0x3B, + 37345 - 19968: jis0208<<14 | 0x4D<<7 | 0x3C, + 37347 - 19968: jis0208<<14 | 0x23<<7 | 0x3F, + 37348 - 19968: jis0208<<14 | 0x5B<<7 | 0x04, + 37349 - 19968: jis0208<<14 | 0x5B<<7 | 0x05, + 37350 - 19968: jis0208<<14 | 0x2A<<7 | 0x34, + 37351 - 19968: jis0208<<14 | 0x15<<7 | 0x5B, + 37353 - 19968: jis0212<<14 | 0x42<<7 | 0x0B, + 37354 - 19968: jis0212<<14 | 0x42<<7 | 0x0C, + 37356 - 19968: jis0212<<14 | 0x42<<7 | 0x0D, + 37357 - 19968: jis0208<<14 | 0x5B<<7 | 0x02, + 37358 - 19968: jis0208<<14 | 0x5B<<7 | 0x03, + 37359 - 19968: jis0212<<14 | 0x42<<7 | 0x10, + 37360 - 19968: jis0212<<14 | 0x42<<7 | 0x11, + 37361 - 19968: jis0212<<14 | 0x42<<7 | 0x12, + 37365 - 19968: jis0208<<14 | 0x4D<<7 | 0x3F, + 37366 - 19968: jis0208<<14 | 0x4D<<7 | 0x40, + 37367 - 19968: jis0212<<14 | 0x42<<7 | 0x13, + 37369 - 19968: jis0212<<14 | 0x42<<7 | 0x14, + 37371 - 19968: jis0212<<14 | 0x42<<7 | 0x15, + 37372 - 19968: jis0208<<14 | 0x4D<<7 | 0x3E, + 37373 - 19968: jis0212<<14 | 0x42<<7 | 0x16, + 37375 - 19968: jis0208<<14 | 0x4D<<7 | 0x42, + 37376 - 19968: jis0212<<14 | 0x42<<7 | 0x17, + 37377 - 19968: jis0212<<14 | 0x42<<7 | 0x18, + 37380 - 19968: jis0212<<14 | 0x42<<7 | 0x19, + 37381 - 19968: jis0212<<14 | 0x42<<7 | 0x1A, + 37382 - 19968: jis0208<<14 | 0x5B<<7 | 0x06, + 37383 - 19968: jis0212<<14 | 0x42<<7 | 0x1C, + 37385 - 19968: jis0212<<14 | 0x42<<7 | 0x1D, + 37386 - 19968: jis0208<<14 | 0x5B<<7 | 0x08, + 37388 - 19968: jis0212<<14 | 0x42<<7 | 0x1F, + 37389 - 19968: jis0208<<14 | 0x25<<7 | 0x3E, + 37390 - 19968: jis0208<<14 | 0x12<<7 | 0x22, + 37392 - 19968: jis0208<<14 | 0x5B<<7 | 0x07, + 37393 - 19968: jis0208<<14 | 0x4D<<7 | 0x46, + 37394 - 19968: jis0212<<14 | 0x42<<7 | 0x21, + 37395 - 19968: jis0212<<14 | 0x42<<7 | 0x22, + 37396 - 19968: jis0208<<14 | 0x4D<<7 | 0x43, + 37397 - 19968: jis0208<<14 | 0x4D<<7 | 0x45, + 37398 - 19968: jis0212<<14 | 0x42<<7 | 0x23, + 37400 - 19968: jis0212<<14 | 0x42<<7 | 0x24, + 37404 - 19968: jis0212<<14 | 0x42<<7 | 0x25, + 37405 - 19968: jis0212<<14 | 0x42<<7 | 0x26, + 37406 - 19968: jis0208<<14 | 0x4D<<7 | 0x41, + 37411 - 19968: jis0212<<14 | 0x42<<7 | 0x27, + 37412 - 19968: jis0212<<14 | 0x42<<7 | 0x28, + 37413 - 19968: jis0212<<14 | 0x42<<7 | 0x29, + 37414 - 19968: jis0212<<14 | 0x42<<7 | 0x2A, + 37416 - 19968: jis0212<<14 | 0x42<<7 | 0x2B, + 37417 - 19968: jis0208<<14 | 0x4E<<7 | 0x2E, + 37420 - 19968: jis0208<<14 | 0x4D<<7 | 0x44, + 37422 - 19968: jis0212<<14 | 0x42<<7 | 0x2C, + 37423 - 19968: jis0212<<14 | 0x42<<7 | 0x2D, + 37424 - 19968: jis0212<<14 | 0x42<<7 | 0x2E, + 37427 - 19968: jis0212<<14 | 0x42<<7 | 0x2F, + 37428 - 19968: jis0208<<14 | 0x2D<<7 | 0x4A, + 37429 - 19968: jis0212<<14 | 0x42<<7 | 0x30, + 37430 - 19968: jis0212<<14 | 0x42<<7 | 0x31, + 37431 - 19968: jis0208<<14 | 0x17<<7 | 0x39, + 37432 - 19968: jis0212<<14 | 0x42<<7 | 0x32, + 37433 - 19968: jis0208<<14 | 0x5B<<7 | 0x0F, + 37434 - 19968: jis0208<<14 | 0x5B<<7 | 0x09, + 37436 - 19968: jis0208<<14 | 0x5B<<7 | 0x0B, + 37438 - 19968: jis0212<<14 | 0x42<<7 | 0x36, + 37439 - 19968: jis0208<<14 | 0x4D<<7 | 0x4E, + 37440 - 19968: jis0208<<14 | 0x5B<<7 | 0x0A, + 37442 - 19968: jis0212<<14 | 0x42<<7 | 0x38, + 37443 - 19968: jis0212<<14 | 0x42<<7 | 0x39, + 37444 - 19968: jis0208<<14 | 0x24<<7 | 0x13, + 37445 - 19968: jis0208<<14 | 0x4D<<7 | 0x49, + 37446 - 19968: jis0212<<14 | 0x42<<7 | 0x3A, + 37447 - 19968: jis0212<<14 | 0x42<<7 | 0x3B, + 37448 - 19968: jis0208<<14 | 0x4D<<7 | 0x4C, + 37449 - 19968: jis0208<<14 | 0x4D<<7 | 0x4A, + 37450 - 19968: jis0212<<14 | 0x42<<7 | 0x3C, + 37451 - 19968: jis0208<<14 | 0x4D<<7 | 0x4F, + 37453 - 19968: jis0212<<14 | 0x42<<7 | 0x3D, + 37454 - 19968: jis0208<<14 | 0x5B<<7 | 0x0C, + 37455 - 19968: jis0212<<14 | 0x42<<7 | 0x3F, + 37456 - 19968: jis0208<<14 | 0x4D<<7 | 0x50, + 37457 - 19968: jis0208<<14 | 0x5B<<7 | 0x0E, + 37463 - 19968: jis0208<<14 | 0x4D<<7 | 0x48, + 37464 - 19968: jis0212<<14 | 0x42<<7 | 0x41, + 37465 - 19968: jis0208<<14 | 0x5B<<7 | 0x0D, + 37466 - 19968: jis0208<<14 | 0x4D<<7 | 0x55, + 37467 - 19968: jis0208<<14 | 0x10<<7 | 0x53, + 37468 - 19968: jis0212<<14 | 0x42<<7 | 0x43, + 37469 - 19968: jis0212<<14 | 0x42<<7 | 0x44, + 37470 - 19968: jis0208<<14 | 0x4D<<7 | 0x47, + 37472 - 19968: jis0212<<14 | 0x42<<7 | 0x45, + 37473 - 19968: jis0212<<14 | 0x42<<7 | 0x46, + 37474 - 19968: jis0208<<14 | 0x27<<7 | 0x0C, + 37476 - 19968: jis0208<<14 | 0x4D<<7 | 0x4B, + 37477 - 19968: jis0212<<14 | 0x42<<7 | 0x47, + 37478 - 19968: jis0208<<14 | 0x1D<<7 | 0x3F, + 37479 - 19968: jis0208<<14 | 0x5B<<7 | 0x10, + 37480 - 19968: jis0212<<14 | 0x42<<7 | 0x49, + 37481 - 19968: jis0212<<14 | 0x42<<7 | 0x4A, + 37486 - 19968: jis0212<<14 | 0x42<<7 | 0x4B, + 37487 - 19968: jis0212<<14 | 0x42<<7 | 0x4C, + 37488 - 19968: jis0212<<14 | 0x42<<7 | 0x4D, + 37489 - 19968: jis0208<<14 | 0x18<<7 | 0x3A, + 37493 - 19968: jis0212<<14 | 0x42<<7 | 0x4E, + 37494 - 19968: jis0212<<14 | 0x42<<7 | 0x4F, + 37495 - 19968: jis0208<<14 | 0x5B<<7 | 0x12, + 37496 - 19968: jis0208<<14 | 0x5B<<7 | 0x13, + 37497 - 19968: jis0212<<14 | 0x42<<7 | 0x52, + 37499 - 19968: jis0212<<14 | 0x42<<7 | 0x53, + 37500 - 19968: jis0212<<14 | 0x42<<7 | 0x54, + 37501 - 19968: jis0212<<14 | 0x42<<7 | 0x55, + 37502 - 19968: jis0208<<14 | 0x2A<<7 | 0x27, + 37503 - 19968: jis0212<<14 | 0x42<<7 | 0x56, + 37504 - 19968: jis0208<<14 | 0x15<<7 | 0x43, + 37507 - 19968: jis0208<<14 | 0x1C<<7 | 0x25, + 37509 - 19968: jis0208<<14 | 0x25<<7 | 0x1B, + 37512 - 19968: jis0208<<14 | 0x58<<7 | 0x03, + 37513 - 19968: jis0212<<14 | 0x42<<7 | 0x58, + 37514 - 19968: jis0212<<14 | 0x42<<7 | 0x59, + 37517 - 19968: jis0212<<14 | 0x42<<7 | 0x5A, + 37518 - 19968: jis0212<<14 | 0x42<<7 | 0x5B, + 37521 - 19968: jis0208<<14 | 0x20<<7 | 0x0C, + 37522 - 19968: jis0212<<14 | 0x42<<7 | 0x5C, + 37523 - 19968: jis0208<<14 | 0x4D<<7 | 0x53, + 37525 - 19968: jis0208<<14 | 0x4D<<7 | 0x4D, + 37526 - 19968: jis0208<<14 | 0x4D<<7 | 0x52, + 37527 - 19968: jis0212<<14 | 0x42<<7 | 0x5D, + 37528 - 19968: jis0208<<14 | 0x2B<<7 | 0x22, + 37529 - 19968: jis0212<<14 | 0x43<<7 | 0x00, + 37530 - 19968: jis0208<<14 | 0x23<<7 | 0x17, + 37531 - 19968: jis0208<<14 | 0x4D<<7 | 0x54, + 37532 - 19968: jis0208<<14 | 0x4D<<7 | 0x51, + 37535 - 19968: jis0212<<14 | 0x43<<7 | 0x01, + 37536 - 19968: jis0212<<14 | 0x43<<7 | 0x02, + 37540 - 19968: jis0212<<14 | 0x43<<7 | 0x03, + 37541 - 19968: jis0212<<14 | 0x43<<7 | 0x04, + 37543 - 19968: jis0208<<14 | 0x5B<<7 | 0x11, + 37544 - 19968: jis0212<<14 | 0x43<<7 | 0x06, + 37547 - 19968: jis0212<<14 | 0x43<<7 | 0x07, + 37549 - 19968: jis0208<<14 | 0x20<<7 | 0x0B, + 37551 - 19968: jis0212<<14 | 0x43<<7 | 0x08, + 37554 - 19968: jis0212<<14 | 0x43<<7 | 0x09, + 37558 - 19968: jis0212<<14 | 0x43<<7 | 0x0A, + 37559 - 19968: jis0208<<14 | 0x4D<<7 | 0x58, + 37560 - 19968: jis0212<<14 | 0x43<<7 | 0x0B, + 37561 - 19968: jis0208<<14 | 0x4D<<7 | 0x57, + 37562 - 19968: jis0212<<14 | 0x43<<7 | 0x0C, + 37563 - 19968: jis0212<<14 | 0x43<<7 | 0x0D, + 37564 - 19968: jis0212<<14 | 0x43<<7 | 0x0E, + 37565 - 19968: jis0212<<14 | 0x43<<7 | 0x0F, + 37567 - 19968: jis0212<<14 | 0x43<<7 | 0x10, + 37568 - 19968: jis0212<<14 | 0x43<<7 | 0x11, + 37569 - 19968: jis0212<<14 | 0x43<<7 | 0x12, + 37570 - 19968: jis0212<<14 | 0x43<<7 | 0x13, + 37571 - 19968: jis0212<<14 | 0x43<<7 | 0x14, + 37573 - 19968: jis0212<<14 | 0x43<<7 | 0x15, + 37574 - 19968: jis0212<<14 | 0x43<<7 | 0x16, + 37575 - 19968: jis0212<<14 | 0x43<<7 | 0x17, + 37576 - 19968: jis0212<<14 | 0x43<<7 | 0x18, + 37579 - 19968: jis0212<<14 | 0x43<<7 | 0x19, + 37580 - 19968: jis0212<<14 | 0x43<<7 | 0x1A, + 37581 - 19968: jis0212<<14 | 0x43<<7 | 0x1B, + 37582 - 19968: jis0212<<14 | 0x43<<7 | 0x1C, + 37583 - 19968: jis0208<<14 | 0x4D<<7 | 0x56, + 37584 - 19968: jis0208<<14 | 0x5B<<7 | 0x17, + 37586 - 19968: jis0208<<14 | 0x2A<<7 | 0x0E, + 37587 - 19968: jis0208<<14 | 0x5B<<7 | 0x1B, + 37589 - 19968: jis0208<<14 | 0x5B<<7 | 0x19, + 37591 - 19968: jis0208<<14 | 0x5B<<7 | 0x15, + 37592 - 19968: jis0212<<14 | 0x43<<7 | 0x21, + 37593 - 19968: jis0208<<14 | 0x5B<<7 | 0x16, + 37596 - 19968: jis0212<<14 | 0x43<<7 | 0x23, + 37597 - 19968: jis0212<<14 | 0x43<<7 | 0x24, + 37599 - 19968: jis0212<<14 | 0x43<<7 | 0x25, + 37600 - 19968: jis0208<<14 | 0x5B<<7 | 0x1A, + 37601 - 19968: jis0212<<14 | 0x43<<7 | 0x27, + 37603 - 19968: jis0212<<14 | 0x43<<7 | 0x28, + 37604 - 19968: jis0208<<14 | 0x1C<<7 | 0x5A, + 37605 - 19968: jis0212<<14 | 0x43<<7 | 0x29, + 37607 - 19968: jis0208<<14 | 0x5B<<7 | 0x14, + 37608 - 19968: jis0212<<14 | 0x43<<7 | 0x2B, + 37609 - 19968: jis0208<<14 | 0x4D<<7 | 0x59, + 37610 - 19968: jis0208<<14 | 0x29<<7 | 0x3E, + 37612 - 19968: jis0212<<14 | 0x43<<7 | 0x2C, + 37613 - 19968: jis0208<<14 | 0x10<<7 | 0x33, + 37614 - 19968: jis0212<<14 | 0x43<<7 | 0x2D, + 37616 - 19968: jis0212<<14 | 0x43<<7 | 0x2E, + 37618 - 19968: jis0208<<14 | 0x28<<7 | 0x25, + 37619 - 19968: jis0208<<14 | 0x22<<7 | 0x51, + 37624 - 19968: jis0208<<14 | 0x14<<7 | 0x57, + 37625 - 19968: jis0208<<14 | 0x58<<7 | 0x09, + 37626 - 19968: jis0208<<14 | 0x4D<<7 | 0x5B, + 37627 - 19968: jis0208<<14 | 0x5B<<7 | 0x1E, + 37628 - 19968: jis0208<<14 | 0x18<<7 | 0x3C, + 37631 - 19968: jis0208<<14 | 0x5B<<7 | 0x21, + 37632 - 19968: jis0212<<14 | 0x43<<7 | 0x32, + 37634 - 19968: jis0208<<14 | 0x5B<<7 | 0x23, + 37638 - 19968: jis0208<<14 | 0x1A<<7 | 0x0B, + 37640 - 19968: jis0212<<14 | 0x43<<7 | 0x34, + 37645 - 19968: jis0212<<14 | 0x43<<7 | 0x35, + 37647 - 19968: jis0208<<14 | 0x4D<<7 | 0x5A, + 37648 - 19968: jis0208<<14 | 0x1E<<7 | 0x4C, + 37649 - 19968: jis0212<<14 | 0x43<<7 | 0x36, + 37652 - 19968: jis0212<<14 | 0x43<<7 | 0x37, + 37653 - 19968: jis0212<<14 | 0x43<<7 | 0x38, + 37656 - 19968: jis0208<<14 | 0x1E<<7 | 0x4D, + 37657 - 19968: jis0208<<14 | 0x4E<<7 | 0x00, + 37658 - 19968: jis0208<<14 | 0x4E<<7 | 0x02, + 37660 - 19968: jis0212<<14 | 0x43<<7 | 0x39, + 37661 - 19968: jis0208<<14 | 0x5B<<7 | 0x22, + 37662 - 19968: jis0208<<14 | 0x5B<<7 | 0x20, + 37663 - 19968: jis0212<<14 | 0x43<<7 | 0x3C, + 37664 - 19968: jis0208<<14 | 0x1D<<7 | 0x5A, + 37665 - 19968: jis0208<<14 | 0x5B<<7 | 0x1D, + 37666 - 19968: jis0208<<14 | 0x4E<<7 | 0x01, + 37667 - 19968: jis0208<<14 | 0x4E<<7 | 0x03, + 37668 - 19968: jis0212<<14 | 0x43<<7 | 0x3E, + 37669 - 19968: jis0208<<14 | 0x5B<<7 | 0x1C, + 37670 - 19968: jis0208<<14 | 0x15<<7 | 0x32, + 37671 - 19968: jis0212<<14 | 0x43<<7 | 0x40, + 37672 - 19968: jis0208<<14 | 0x28<<7 | 0x24, + 37673 - 19968: jis0212<<14 | 0x43<<7 | 0x41, + 37674 - 19968: jis0212<<14 | 0x43<<7 | 0x42, + 37675 - 19968: jis0208<<14 | 0x1B<<7 | 0x41, + 37676 - 19968: jis0208<<14 | 0x2E<<7 | 0x02, + 37678 - 19968: jis0208<<14 | 0x4D<<7 | 0x5D, + 37679 - 19968: jis0208<<14 | 0x19<<7 | 0x57, + 37682 - 19968: jis0208<<14 | 0x2E<<7 | 0x1E, + 37683 - 19968: jis0212<<14 | 0x43<<7 | 0x43, + 37684 - 19968: jis0212<<14 | 0x43<<7 | 0x44, + 37685 - 19968: jis0208<<14 | 0x4E<<7 | 0x05, + 37686 - 19968: jis0212<<14 | 0x43<<7 | 0x45, + 37687 - 19968: jis0212<<14 | 0x43<<7 | 0x46, + 37690 - 19968: jis0208<<14 | 0x4E<<7 | 0x04, + 37691 - 19968: jis0208<<14 | 0x4E<<7 | 0x06, + 37700 - 19968: jis0208<<14 | 0x4D<<7 | 0x5C, + 37703 - 19968: jis0212<<14 | 0x43<<7 | 0x47, + 37704 - 19968: jis0208<<14 | 0x58<<7 | 0x02, + 37705 - 19968: jis0212<<14 | 0x43<<7 | 0x49, + 37707 - 19968: jis0208<<14 | 0x25<<7 | 0x48, + 37709 - 19968: jis0208<<14 | 0x24<<7 | 0x34, + 37712 - 19968: jis0212<<14 | 0x43<<7 | 0x4A, + 37713 - 19968: jis0212<<14 | 0x43<<7 | 0x4B, + 37714 - 19968: jis0212<<14 | 0x43<<7 | 0x4C, + 37716 - 19968: jis0208<<14 | 0x23<<7 | 0x36, + 37717 - 19968: jis0212<<14 | 0x43<<7 | 0x4D, + 37718 - 19968: jis0208<<14 | 0x4E<<7 | 0x0B, + 37719 - 19968: jis0208<<14 | 0x5B<<7 | 0x25, + 37720 - 19968: jis0212<<14 | 0x43<<7 | 0x4F, + 37722 - 19968: jis0212<<14 | 0x43<<7 | 0x50, + 37723 - 19968: jis0208<<14 | 0x22<<7 | 0x22, + 37724 - 19968: jis0208<<14 | 0x4E<<7 | 0x07, + 37726 - 19968: jis0212<<14 | 0x43<<7 | 0x51, + 37728 - 19968: jis0208<<14 | 0x4E<<7 | 0x08, + 37732 - 19968: jis0212<<14 | 0x43<<7 | 0x52, + 37733 - 19968: jis0212<<14 | 0x43<<7 | 0x53, + 37735 - 19968: jis0212<<14 | 0x43<<7 | 0x54, + 37737 - 19968: jis0212<<14 | 0x43<<7 | 0x55, + 37738 - 19968: jis0212<<14 | 0x43<<7 | 0x56, + 37740 - 19968: jis0208<<14 | 0x16<<7 | 0x0C, + 37741 - 19968: jis0212<<14 | 0x43<<7 | 0x57, + 37742 - 19968: jis0208<<14 | 0x4E<<7 | 0x0A, + 37743 - 19968: jis0212<<14 | 0x43<<7 | 0x58, + 37744 - 19968: jis0208<<14 | 0x5B<<7 | 0x24, + 37745 - 19968: jis0212<<14 | 0x43<<7 | 0x5A, + 37747 - 19968: jis0212<<14 | 0x43<<7 | 0x5B, + 37748 - 19968: jis0212<<14 | 0x43<<7 | 0x5C, + 37749 - 19968: jis0208<<14 | 0x17<<7 | 0x0F, + 37750 - 19968: jis0212<<14 | 0x43<<7 | 0x5D, + 37754 - 19968: jis0212<<14 | 0x44<<7 | 0x00, + 37756 - 19968: jis0208<<14 | 0x4E<<7 | 0x09, + 37757 - 19968: jis0212<<14 | 0x44<<7 | 0x01, + 37758 - 19968: jis0208<<14 | 0x1D<<7 | 0x40, + 37759 - 19968: jis0212<<14 | 0x44<<7 | 0x02, + 37760 - 19968: jis0212<<14 | 0x44<<7 | 0x03, + 37761 - 19968: jis0212<<14 | 0x44<<7 | 0x04, + 37762 - 19968: jis0212<<14 | 0x44<<7 | 0x05, + 37768 - 19968: jis0212<<14 | 0x44<<7 | 0x06, + 37770 - 19968: jis0212<<14 | 0x44<<7 | 0x07, + 37771 - 19968: jis0212<<14 | 0x44<<7 | 0x08, + 37772 - 19968: jis0208<<14 | 0x12<<7 | 0x58, + 37773 - 19968: jis0212<<14 | 0x44<<7 | 0x09, + 37775 - 19968: jis0212<<14 | 0x44<<7 | 0x0A, + 37778 - 19968: jis0212<<14 | 0x44<<7 | 0x0B, + 37780 - 19968: jis0208<<14 | 0x4E<<7 | 0x0F, + 37781 - 19968: jis0212<<14 | 0x44<<7 | 0x0C, + 37782 - 19968: jis0208<<14 | 0x19<<7 | 0x1E, + 37783 - 19968: jis0208<<14 | 0x20<<7 | 0x58, + 37784 - 19968: jis0212<<14 | 0x44<<7 | 0x0D, + 37786 - 19968: jis0208<<14 | 0x23<<7 | 0x29, + 37787 - 19968: jis0212<<14 | 0x44<<7 | 0x0E, + 37790 - 19968: jis0212<<14 | 0x44<<7 | 0x0F, + 37793 - 19968: jis0212<<14 | 0x44<<7 | 0x10, + 37795 - 19968: jis0212<<14 | 0x44<<7 | 0x11, + 37796 - 19968: jis0208<<14 | 0x5B<<7 | 0x26, + 37798 - 19968: jis0212<<14 | 0x44<<7 | 0x13, + 37799 - 19968: jis0208<<14 | 0x12<<7 | 0x1A, + 37800 - 19968: jis0212<<14 | 0x44<<7 | 0x14, + 37801 - 19968: jis0212<<14 | 0x44<<7 | 0x1A, + 37803 - 19968: jis0212<<14 | 0x44<<7 | 0x15, + 37804 - 19968: jis0208<<14 | 0x4E<<7 | 0x0D, + 37805 - 19968: jis0208<<14 | 0x4E<<7 | 0x0E, + 37806 - 19968: jis0208<<14 | 0x23<<7 | 0x22, + 37808 - 19968: jis0208<<14 | 0x4E<<7 | 0x0C, + 37812 - 19968: jis0212<<14 | 0x44<<7 | 0x16, + 37813 - 19968: jis0212<<14 | 0x44<<7 | 0x17, + 37814 - 19968: jis0212<<14 | 0x44<<7 | 0x18, + 37817 - 19968: jis0208<<14 | 0x4E<<7 | 0x10, + 37818 - 19968: jis0212<<14 | 0x44<<7 | 0x19, + 37825 - 19968: jis0212<<14 | 0x44<<7 | 0x1B, + 37827 - 19968: jis0208<<14 | 0x4E<<7 | 0x16, + 37828 - 19968: jis0212<<14 | 0x44<<7 | 0x1C, + 37829 - 19968: jis0212<<14 | 0x44<<7 | 0x1D, + 37830 - 19968: jis0208<<14 | 0x5B<<7 | 0x27, + 37831 - 19968: jis0212<<14 | 0x44<<7 | 0x1F, + 37832 - 19968: jis0208<<14 | 0x4E<<7 | 0x19, + 37833 - 19968: jis0212<<14 | 0x44<<7 | 0x20, + 37834 - 19968: jis0212<<14 | 0x44<<7 | 0x21, + 37835 - 19968: jis0212<<14 | 0x44<<7 | 0x22, + 37836 - 19968: jis0212<<14 | 0x44<<7 | 0x23, + 37837 - 19968: jis0212<<14 | 0x44<<7 | 0x24, + 37840 - 19968: jis0208<<14 | 0x4E<<7 | 0x18, + 37841 - 19968: jis0208<<14 | 0x24<<7 | 0x0C, + 37843 - 19968: jis0212<<14 | 0x44<<7 | 0x25, + 37846 - 19968: jis0208<<14 | 0x4E<<7 | 0x11, + 37847 - 19968: jis0208<<14 | 0x4E<<7 | 0x12, + 37848 - 19968: jis0208<<14 | 0x4E<<7 | 0x15, + 37849 - 19968: jis0212<<14 | 0x44<<7 | 0x26, + 37852 - 19968: jis0212<<14 | 0x44<<7 | 0x27, + 37853 - 19968: jis0208<<14 | 0x4E<<7 | 0x17, + 37854 - 19968: jis0208<<14 | 0x5B<<7 | 0x28, + 37855 - 19968: jis0212<<14 | 0x44<<7 | 0x29, + 37857 - 19968: jis0208<<14 | 0x15<<7 | 0x1F, + 37858 - 19968: jis0212<<14 | 0x44<<7 | 0x2A, + 37860 - 19968: jis0208<<14 | 0x4E<<7 | 0x1A, + 37861 - 19968: jis0208<<14 | 0x4E<<7 | 0x14, + 37862 - 19968: jis0212<<14 | 0x44<<7 | 0x2B, + 37863 - 19968: jis0212<<14 | 0x44<<7 | 0x2C, + 37864 - 19968: jis0208<<14 | 0x4E<<7 | 0x13, + 37879 - 19968: jis0212<<14 | 0x44<<7 | 0x2E, + 37880 - 19968: jis0208<<14 | 0x5B<<7 | 0x29, + 37881 - 19968: jis0212<<14 | 0x44<<7 | 0x2D, + 37882 - 19968: jis0212<<14 | 0x44<<7 | 0x30, + 37883 - 19968: jis0212<<14 | 0x44<<7 | 0x31, + 37885 - 19968: jis0212<<14 | 0x44<<7 | 0x32, + 37889 - 19968: jis0212<<14 | 0x44<<7 | 0x33, + 37890 - 19968: jis0212<<14 | 0x44<<7 | 0x34, + 37891 - 19968: jis0208<<14 | 0x4E<<7 | 0x1E, + 37892 - 19968: jis0212<<14 | 0x44<<7 | 0x35, + 37895 - 19968: jis0208<<14 | 0x4E<<7 | 0x1F, + 37896 - 19968: jis0212<<14 | 0x44<<7 | 0x36, + 37897 - 19968: jis0212<<14 | 0x44<<7 | 0x37, + 37901 - 19968: jis0212<<14 | 0x44<<7 | 0x38, + 37902 - 19968: jis0212<<14 | 0x44<<7 | 0x39, + 37903 - 19968: jis0212<<14 | 0x44<<7 | 0x3A, + 37904 - 19968: jis0208<<14 | 0x4E<<7 | 0x20, + 37907 - 19968: jis0208<<14 | 0x4E<<7 | 0x1D, + 37908 - 19968: jis0208<<14 | 0x4E<<7 | 0x1C, + 37909 - 19968: jis0212<<14 | 0x44<<7 | 0x3B, + 37910 - 19968: jis0212<<14 | 0x44<<7 | 0x3C, + 37911 - 19968: jis0212<<14 | 0x44<<7 | 0x3D, + 37912 - 19968: jis0208<<14 | 0x1D<<7 | 0x41, + 37913 - 19968: jis0208<<14 | 0x25<<7 | 0x09, + 37914 - 19968: jis0208<<14 | 0x4E<<7 | 0x1B, + 37919 - 19968: jis0212<<14 | 0x44<<7 | 0x3E, + 37921 - 19968: jis0208<<14 | 0x4E<<7 | 0x24, + 37931 - 19968: jis0208<<14 | 0x4E<<7 | 0x22, + 37934 - 19968: jis0212<<14 | 0x44<<7 | 0x3F, + 37935 - 19968: jis0212<<14 | 0x44<<7 | 0x40, + 37937 - 19968: jis0208<<14 | 0x5B<<7 | 0x2A, + 37938 - 19968: jis0212<<14 | 0x44<<7 | 0x42, + 37939 - 19968: jis0212<<14 | 0x44<<7 | 0x43, + 37940 - 19968: jis0212<<14 | 0x44<<7 | 0x44, + 37941 - 19968: jis0208<<14 | 0x4E<<7 | 0x23, + 37942 - 19968: jis0208<<14 | 0x4E<<7 | 0x21, + 37944 - 19968: jis0208<<14 | 0x21<<7 | 0x57, + 37946 - 19968: jis0208<<14 | 0x4E<<7 | 0x25, + 37947 - 19968: jis0212<<14 | 0x44<<7 | 0x45, + 37949 - 19968: jis0212<<14 | 0x44<<7 | 0x47, + 37951 - 19968: jis0212<<14 | 0x44<<7 | 0x46, + 37953 - 19968: jis0208<<14 | 0x4E<<7 | 0x26, + 37955 - 19968: jis0212<<14 | 0x44<<7 | 0x48, + 37956 - 19968: jis0208<<14 | 0x4E<<7 | 0x28, + 37957 - 19968: jis0208<<14 | 0x5B<<7 | 0x2B, + 37960 - 19968: jis0208<<14 | 0x5B<<7 | 0x2C, + 37962 - 19968: jis0212<<14 | 0x44<<7 | 0x4B, + 37964 - 19968: jis0212<<14 | 0x44<<7 | 0x4C, + 37969 - 19968: jis0208<<14 | 0x13<<7 | 0x34, + 37970 - 19968: jis0208<<14 | 0x4E<<7 | 0x27, + 37971 - 19968: jis0208<<14 | 0x2B<<7 | 0x59, + 37973 - 19968: jis0212<<14 | 0x44<<7 | 0x4D, + 37977 - 19968: jis0212<<14 | 0x44<<7 | 0x4E, + 37978 - 19968: jis0208<<14 | 0x4E<<7 | 0x33, + 37979 - 19968: jis0208<<14 | 0x4E<<7 | 0x29, + 37980 - 19968: jis0212<<14 | 0x44<<7 | 0x4F, + 37982 - 19968: jis0208<<14 | 0x4E<<7 | 0x2C, + 37983 - 19968: jis0212<<14 | 0x44<<7 | 0x50, + 37984 - 19968: jis0208<<14 | 0x4E<<7 | 0x2A, + 37985 - 19968: jis0212<<14 | 0x44<<7 | 0x51, + 37986 - 19968: jis0208<<14 | 0x4E<<7 | 0x2B, + 37987 - 19968: jis0212<<14 | 0x44<<7 | 0x52, + 37992 - 19968: jis0212<<14 | 0x44<<7 | 0x53, + 37994 - 19968: jis0208<<14 | 0x4E<<7 | 0x2D, + 37995 - 19968: jis0212<<14 | 0x44<<7 | 0x54, + 37997 - 19968: jis0212<<14 | 0x44<<7 | 0x55, + 37998 - 19968: jis0212<<14 | 0x44<<7 | 0x56, + 37999 - 19968: jis0212<<14 | 0x44<<7 | 0x57, + 38000 - 19968: jis0208<<14 | 0x4E<<7 | 0x2F, + 38001 - 19968: jis0212<<14 | 0x44<<7 | 0x58, + 38002 - 19968: jis0212<<14 | 0x44<<7 | 0x59, + 38005 - 19968: jis0208<<14 | 0x4E<<7 | 0x30, + 38007 - 19968: jis0208<<14 | 0x4E<<7 | 0x31, + 38012 - 19968: jis0208<<14 | 0x4E<<7 | 0x34, + 38013 - 19968: jis0208<<14 | 0x4E<<7 | 0x32, + 38014 - 19968: jis0208<<14 | 0x4E<<7 | 0x35, + 38015 - 19968: jis0208<<14 | 0x4E<<7 | 0x37, + 38017 - 19968: jis0208<<14 | 0x4E<<7 | 0x36, + 38019 - 19968: jis0212<<14 | 0x44<<7 | 0x5B, + 38020 - 19968: jis0212<<14 | 0x44<<7 | 0x5A, + 38263 - 19968: jis0208<<14 | 0x23<<7 | 0x18, + 38264 - 19968: jis0212<<14 | 0x44<<7 | 0x5C, + 38265 - 19968: jis0212<<14 | 0x44<<7 | 0x5D, + 38270 - 19968: jis0212<<14 | 0x45<<7 | 0x00, + 38272 - 19968: jis0208<<14 | 0x2B<<7 | 0x46, + 38274 - 19968: jis0208<<14 | 0x4E<<7 | 0x38, + 38275 - 19968: jis0208<<14 | 0x20<<7 | 0x0D, + 38276 - 19968: jis0212<<14 | 0x45<<7 | 0x01, + 38279 - 19968: jis0208<<14 | 0x4E<<7 | 0x39, + 38280 - 19968: jis0212<<14 | 0x45<<7 | 0x02, + 38281 - 19968: jis0208<<14 | 0x29<<7 | 0x23, + 38282 - 19968: jis0208<<14 | 0x4E<<7 | 0x3A, + 38283 - 19968: jis0208<<14 | 0x12<<7 | 0x0A, + 38284 - 19968: jis0212<<14 | 0x45<<7 | 0x03, + 38285 - 19968: jis0212<<14 | 0x45<<7 | 0x04, + 38286 - 19968: jis0212<<14 | 0x45<<7 | 0x05, + 38287 - 19968: jis0208<<14 | 0x10<<7 | 0x1B, + 38289 - 19968: jis0208<<14 | 0x13<<7 | 0x36, + 38290 - 19968: jis0208<<14 | 0x5B<<7 | 0x2D, + 38291 - 19968: jis0208<<14 | 0x13<<7 | 0x35, + 38292 - 19968: jis0208<<14 | 0x4E<<7 | 0x3B, + 38294 - 19968: jis0208<<14 | 0x4E<<7 | 0x3C, + 38296 - 19968: jis0208<<14 | 0x4E<<7 | 0x3D, + 38297 - 19968: jis0208<<14 | 0x4E<<7 | 0x3E, + 38301 - 19968: jis0212<<14 | 0x45<<7 | 0x06, + 38302 - 19968: jis0212<<14 | 0x45<<7 | 0x07, + 38303 - 19968: jis0212<<14 | 0x45<<7 | 0x08, + 38304 - 19968: jis0208<<14 | 0x4E<<7 | 0x3F, + 38305 - 19968: jis0212<<14 | 0x45<<7 | 0x09, + 38306 - 19968: jis0208<<14 | 0x13<<7 | 0x37, + 38307 - 19968: jis0208<<14 | 0x12<<7 | 0x34, + 38308 - 19968: jis0208<<14 | 0x18<<7 | 0x3D, + 38309 - 19968: jis0208<<14 | 0x27<<7 | 0x15, + 38310 - 19968: jis0212<<14 | 0x45<<7 | 0x0A, + 38311 - 19968: jis0208<<14 | 0x4E<<7 | 0x41, + 38312 - 19968: jis0208<<14 | 0x4E<<7 | 0x40, + 38313 - 19968: jis0212<<14 | 0x45<<7 | 0x0B, + 38315 - 19968: jis0212<<14 | 0x45<<7 | 0x0C, + 38316 - 19968: jis0212<<14 | 0x45<<7 | 0x0D, + 38317 - 19968: jis0208<<14 | 0x4E<<7 | 0x42, + 38322 - 19968: jis0208<<14 | 0x10<<7 | 0x3B, + 38324 - 19968: jis0212<<14 | 0x45<<7 | 0x0E, + 38326 - 19968: jis0212<<14 | 0x45<<7 | 0x0F, + 38329 - 19968: jis0208<<14 | 0x4E<<7 | 0x45, + 38330 - 19968: jis0212<<14 | 0x45<<7 | 0x10, + 38331 - 19968: jis0208<<14 | 0x4E<<7 | 0x44, + 38332 - 19968: jis0208<<14 | 0x4E<<7 | 0x43, + 38333 - 19968: jis0212<<14 | 0x45<<7 | 0x11, + 38334 - 19968: jis0208<<14 | 0x4E<<7 | 0x46, + 38335 - 19968: jis0212<<14 | 0x45<<7 | 0x12, + 38339 - 19968: jis0208<<14 | 0x4E<<7 | 0x49, + 38342 - 19968: jis0212<<14 | 0x45<<7 | 0x13, + 38343 - 19968: jis0208<<14 | 0x0F<<7 | 0x26, + 38344 - 19968: jis0212<<14 | 0x45<<7 | 0x14, + 38345 - 19968: jis0212<<14 | 0x45<<7 | 0x15, + 38346 - 19968: jis0208<<14 | 0x4E<<7 | 0x47, + 38347 - 19968: jis0212<<14 | 0x45<<7 | 0x16, + 38348 - 19968: jis0208<<14 | 0x4E<<7 | 0x4B, + 38349 - 19968: jis0208<<14 | 0x4E<<7 | 0x4A, + 38352 - 19968: jis0212<<14 | 0x45<<7 | 0x17, + 38353 - 19968: jis0212<<14 | 0x45<<7 | 0x18, + 38354 - 19968: jis0212<<14 | 0x45<<7 | 0x19, + 38355 - 19968: jis0212<<14 | 0x45<<7 | 0x1A, + 38356 - 19968: jis0208<<14 | 0x4E<<7 | 0x4D, + 38357 - 19968: jis0208<<14 | 0x4E<<7 | 0x4C, + 38358 - 19968: jis0208<<14 | 0x4E<<7 | 0x4E, + 38360 - 19968: jis0208<<14 | 0x25<<7 | 0x0D, + 38361 - 19968: jis0212<<14 | 0x45<<7 | 0x1B, + 38362 - 19968: jis0212<<14 | 0x45<<7 | 0x1C, + 38364 - 19968: jis0208<<14 | 0x4E<<7 | 0x4F, + 38365 - 19968: jis0212<<14 | 0x45<<7 | 0x1D, + 38366 - 19968: jis0212<<14 | 0x45<<7 | 0x1E, + 38367 - 19968: jis0212<<14 | 0x45<<7 | 0x1F, + 38368 - 19968: jis0212<<14 | 0x45<<7 | 0x20, + 38369 - 19968: jis0208<<14 | 0x4E<<7 | 0x50, + 38370 - 19968: jis0208<<14 | 0x4E<<7 | 0x52, + 38372 - 19968: jis0212<<14 | 0x45<<7 | 0x21, + 38373 - 19968: jis0208<<14 | 0x4E<<7 | 0x51, + 38374 - 19968: jis0212<<14 | 0x45<<7 | 0x22, + 38428 - 19968: jis0208<<14 | 0x28<<7 | 0x4B, + 38429 - 19968: jis0212<<14 | 0x45<<7 | 0x23, + 38430 - 19968: jis0212<<14 | 0x45<<7 | 0x24, + 38433 - 19968: jis0208<<14 | 0x4E<<7 | 0x53, + 38434 - 19968: jis0212<<14 | 0x45<<7 | 0x25, + 38436 - 19968: jis0212<<14 | 0x45<<7 | 0x26, + 38437 - 19968: jis0212<<14 | 0x45<<7 | 0x27, + 38438 - 19968: jis0212<<14 | 0x45<<7 | 0x28, + 38440 - 19968: jis0208<<14 | 0x4E<<7 | 0x54, + 38442 - 19968: jis0208<<14 | 0x19<<7 | 0x44, + 38444 - 19968: jis0212<<14 | 0x45<<7 | 0x29, + 38446 - 19968: jis0208<<14 | 0x4E<<7 | 0x55, + 38447 - 19968: jis0208<<14 | 0x4E<<7 | 0x56, + 38449 - 19968: jis0212<<14 | 0x45<<7 | 0x2A, + 38450 - 19968: jis0208<<14 | 0x2A<<7 | 0x28, + 38451 - 19968: jis0212<<14 | 0x45<<7 | 0x2B, + 38455 - 19968: jis0212<<14 | 0x45<<7 | 0x2C, + 38456 - 19968: jis0212<<14 | 0x45<<7 | 0x2D, + 38457 - 19968: jis0212<<14 | 0x45<<7 | 0x2E, + 38458 - 19968: jis0212<<14 | 0x45<<7 | 0x2F, + 38459 - 19968: jis0208<<14 | 0x20<<7 | 0x2A, + 38460 - 19968: jis0212<<14 | 0x45<<7 | 0x30, + 38461 - 19968: jis0212<<14 | 0x45<<7 | 0x31, + 38463 - 19968: jis0208<<14 | 0x0F<<7 | 0x03, + 38464 - 19968: jis0208<<14 | 0x21<<7 | 0x2A, + 38465 - 19968: jis0212<<14 | 0x45<<7 | 0x32, + 38466 - 19968: jis0208<<14 | 0x4E<<7 | 0x57, + 38468 - 19968: jis0208<<14 | 0x28<<7 | 0x4C, + 38475 - 19968: jis0208<<14 | 0x4E<<7 | 0x5A, + 38476 - 19968: jis0208<<14 | 0x4E<<7 | 0x58, + 38477 - 19968: jis0208<<14 | 0x18<<7 | 0x3E, + 38479 - 19968: jis0208<<14 | 0x4E<<7 | 0x59, + 38480 - 19968: jis0208<<14 | 0x17<<7 | 0x21, + 38482 - 19968: jis0212<<14 | 0x45<<7 | 0x33, + 38484 - 19968: jis0212<<14 | 0x45<<7 | 0x34, + 38486 - 19968: jis0212<<14 | 0x45<<7 | 0x35, + 38487 - 19968: jis0212<<14 | 0x45<<7 | 0x36, + 38488 - 19968: jis0212<<14 | 0x45<<7 | 0x37, + 38491 - 19968: jis0208<<14 | 0x29<<7 | 0x24, + 38492 - 19968: jis0208<<14 | 0x4E<<7 | 0x5C, + 38493 - 19968: jis0208<<14 | 0x4F<<7 | 0x00, + 38494 - 19968: jis0208<<14 | 0x4E<<7 | 0x5D, + 38495 - 19968: jis0208<<14 | 0x4F<<7 | 0x01, + 38497 - 19968: jis0212<<14 | 0x45<<7 | 0x38, + 38498 - 19968: jis0208<<14 | 0x10<<7 | 0x00, + 38499 - 19968: jis0208<<14 | 0x1E<<7 | 0x37, + 38500 - 19968: jis0208<<14 | 0x1C<<7 | 0x5B, + 38501 - 19968: jis0208<<14 | 0x13<<7 | 0x38, + 38502 - 19968: jis0208<<14 | 0x4F<<7 | 0x02, + 38506 - 19968: jis0208<<14 | 0x26<<7 | 0x45, + 38508 - 19968: jis0208<<14 | 0x4F<<7 | 0x04, + 38510 - 19968: jis0212<<14 | 0x45<<7 | 0x39, + 38512 - 19968: jis0208<<14 | 0x10<<7 | 0x01, + 38514 - 19968: jis0208<<14 | 0x4F<<7 | 0x03, + 38515 - 19968: jis0208<<14 | 0x23<<7 | 0x23, + 38516 - 19968: jis0212<<14 | 0x45<<7 | 0x3A, + 38517 - 19968: jis0208<<14 | 0x2D<<7 | 0x2C, + 38518 - 19968: jis0208<<14 | 0x25<<7 | 0x0A, + 38519 - 19968: jis0208<<14 | 0x4E<<7 | 0x5B, + 38520 - 19968: jis0208<<14 | 0x2D<<7 | 0x05, + 38522 - 19968: jis0208<<14 | 0x17<<7 | 0x10, + 38523 - 19968: jis0212<<14 | 0x45<<7 | 0x3B, + 38524 - 19968: jis0212<<14 | 0x45<<7 | 0x3C, + 38525 - 19968: jis0208<<14 | 0x2C<<7 | 0x3A, + 38526 - 19968: jis0212<<14 | 0x45<<7 | 0x3D, + 38527 - 19968: jis0212<<14 | 0x45<<7 | 0x3E, + 38529 - 19968: jis0212<<14 | 0x45<<7 | 0x3F, + 38530 - 19968: jis0212<<14 | 0x45<<7 | 0x40, + 38531 - 19968: jis0212<<14 | 0x45<<7 | 0x41, + 38532 - 19968: jis0212<<14 | 0x45<<7 | 0x42, + 38533 - 19968: jis0208<<14 | 0x15<<7 | 0x58, + 38534 - 19968: jis0208<<14 | 0x2D<<7 | 0x13, + 38536 - 19968: jis0208<<14 | 0x16<<7 | 0x07, + 38537 - 19968: jis0212<<14 | 0x45<<7 | 0x43, + 38538 - 19968: jis0208<<14 | 0x21<<7 | 0x41, + 38539 - 19968: jis0208<<14 | 0x46<<7 | 0x00, + 38541 - 19968: jis0208<<14 | 0x4F<<7 | 0x05, + 38542 - 19968: jis0208<<14 | 0x12<<7 | 0x0B, + 38543 - 19968: jis0208<<14 | 0x1E<<7 | 0x4E, + 38545 - 19968: jis0212<<14 | 0x45<<7 | 0x44, + 38548 - 19968: jis0208<<14 | 0x12<<7 | 0x35, + 38549 - 19968: jis0208<<14 | 0x4F<<7 | 0x07, + 38550 - 19968: jis0212<<14 | 0x45<<7 | 0x45, + 38551 - 19968: jis0208<<14 | 0x4F<<7 | 0x08, + 38552 - 19968: jis0208<<14 | 0x4F<<7 | 0x06, + 38553 - 19968: jis0208<<14 | 0x16<<7 | 0x43, + 38554 - 19968: jis0212<<14 | 0x45<<7 | 0x46, + 38555 - 19968: jis0208<<14 | 0x19<<7 | 0x3C, + 38556 - 19968: jis0208<<14 | 0x1D<<7 | 0x42, + 38557 - 19968: jis0208<<14 | 0x5B<<7 | 0x30, + 38559 - 19968: jis0212<<14 | 0x45<<7 | 0x48, + 38560 - 19968: jis0208<<14 | 0x10<<7 | 0x02, + 38563 - 19968: jis0208<<14 | 0x2D<<7 | 0x38, + 38564 - 19968: jis0212<<14 | 0x45<<7 | 0x49, + 38565 - 19968: jis0212<<14 | 0x45<<7 | 0x4A, + 38566 - 19968: jis0212<<14 | 0x45<<7 | 0x4B, + 38567 - 19968: jis0208<<14 | 0x4F<<7 | 0x0A, + 38568 - 19968: jis0208<<14 | 0x4D<<7 | 0x0D, + 38569 - 19968: jis0212<<14 | 0x45<<7 | 0x4C, + 38570 - 19968: jis0208<<14 | 0x4F<<7 | 0x09, + 38574 - 19968: jis0212<<14 | 0x45<<7 | 0x4D, + 38575 - 19968: jis0208<<14 | 0x5B<<7 | 0x31, + 38576 - 19968: jis0208<<14 | 0x4F<<7 | 0x0D, + 38577 - 19968: jis0208<<14 | 0x4F<<7 | 0x0B, + 38578 - 19968: jis0208<<14 | 0x4F<<7 | 0x0C, + 38579 - 19968: jis0212<<14 | 0x45<<7 | 0x4F, + 38580 - 19968: jis0208<<14 | 0x4F<<7 | 0x0E, + 38582 - 19968: jis0208<<14 | 0x4F<<7 | 0x0F, + 38583 - 19968: jis0208<<14 | 0x2D<<7 | 0x4B, + 38584 - 19968: jis0208<<14 | 0x4F<<7 | 0x10, + 38585 - 19968: jis0208<<14 | 0x4F<<7 | 0x11, + 38586 - 19968: jis0212<<14 | 0x45<<7 | 0x50, + 38587 - 19968: jis0208<<14 | 0x1F<<7 | 0x28, + 38588 - 19968: jis0208<<14 | 0x27<<7 | 0x1A, + 38592 - 19968: jis0208<<14 | 0x1E<<7 | 0x5C, + 38593 - 19968: jis0208<<14 | 0x13<<7 | 0x46, + 38596 - 19968: jis0208<<14 | 0x2C<<7 | 0x19, + 38597 - 19968: jis0208<<14 | 0x11<<7 | 0x4C, + 38598 - 19968: jis0208<<14 | 0x1C<<7 | 0x17, + 38599 - 19968: jis0208<<14 | 0x17<<7 | 0x3A, + 38601 - 19968: jis0208<<14 | 0x4F<<7 | 0x14, + 38602 - 19968: jis0212<<14 | 0x45<<7 | 0x51, + 38603 - 19968: jis0208<<14 | 0x4F<<7 | 0x13, + 38604 - 19968: jis0208<<14 | 0x1A<<7 | 0x52, + 38605 - 19968: jis0208<<14 | 0x4F<<7 | 0x15, + 38606 - 19968: jis0208<<14 | 0x4F<<7 | 0x12, + 38609 - 19968: jis0208<<14 | 0x1A<<7 | 0x07, + 38610 - 19968: jis0212<<14 | 0x45<<7 | 0x52, + 38613 - 19968: jis0208<<14 | 0x4F<<7 | 0x19, + 38614 - 19968: jis0208<<14 | 0x49<<7 | 0x0C, + 38616 - 19968: jis0212<<14 | 0x45<<7 | 0x54, + 38617 - 19968: jis0208<<14 | 0x31<<7 | 0x35, + 38618 - 19968: jis0212<<14 | 0x45<<7 | 0x55, + 38619 - 19968: jis0208<<14 | 0x1E<<7 | 0x56, + 38620 - 19968: jis0208<<14 | 0x4F<<7 | 0x17, + 38621 - 19968: jis0212<<14 | 0x45<<7 | 0x56, + 38622 - 19968: jis0212<<14 | 0x45<<7 | 0x57, + 38623 - 19968: jis0212<<14 | 0x45<<7 | 0x58, + 38626 - 19968: jis0208<<14 | 0x2D<<7 | 0x04, + 38627 - 19968: jis0208<<14 | 0x25<<7 | 0x50, + 38632 - 19968: jis0208<<14 | 0x10<<7 | 0x0A, + 38633 - 19968: jis0212<<14 | 0x45<<7 | 0x59, + 38634 - 19968: jis0208<<14 | 0x1F<<7 | 0x42, + 38635 - 19968: jis0208<<14 | 0x1B<<7 | 0x15, + 38639 - 19968: jis0212<<14 | 0x45<<7 | 0x5A, + 38640 - 19968: jis0208<<14 | 0x29<<7 | 0x16, + 38641 - 19968: jis0212<<14 | 0x45<<7 | 0x5B, + 38642 - 19968: jis0208<<14 | 0x10<<7 | 0x1F, + 38646 - 19968: jis0208<<14 | 0x2D<<7 | 0x4C, + 38647 - 19968: jis0208<<14 | 0x2C<<7 | 0x4A, + 38649 - 19968: jis0208<<14 | 0x4F<<7 | 0x1A, + 38650 - 19968: jis0212<<14 | 0x45<<7 | 0x5C, + 38651 - 19968: jis0208<<14 | 0x24<<7 | 0x24, + 38656 - 19968: jis0208<<14 | 0x1B<<7 | 0x5A, + 38658 - 19968: jis0212<<14 | 0x45<<7 | 0x5D, + 38659 - 19968: jis0212<<14 | 0x46<<7 | 0x00, + 38660 - 19968: jis0208<<14 | 0x4F<<7 | 0x1B, + 38661 - 19968: jis0212<<14 | 0x46<<7 | 0x01, + 38662 - 19968: jis0208<<14 | 0x4F<<7 | 0x1C, + 38663 - 19968: jis0208<<14 | 0x1E<<7 | 0x2B, + 38664 - 19968: jis0208<<14 | 0x4F<<7 | 0x1D, + 38665 - 19968: jis0212<<14 | 0x46<<7 | 0x02, + 38666 - 19968: jis0208<<14 | 0x2D<<7 | 0x4D, + 38669 - 19968: jis0208<<14 | 0x4F<<7 | 0x18, + 38670 - 19968: jis0208<<14 | 0x4F<<7 | 0x1F, + 38671 - 19968: jis0208<<14 | 0x4F<<7 | 0x21, + 38673 - 19968: jis0208<<14 | 0x4F<<7 | 0x20, + 38675 - 19968: jis0208<<14 | 0x4F<<7 | 0x1E, + 38678 - 19968: jis0208<<14 | 0x4F<<7 | 0x22, + 38681 - 19968: jis0208<<14 | 0x4F<<7 | 0x23, + 38682 - 19968: jis0212<<14 | 0x46<<7 | 0x03, + 38683 - 19968: jis0212<<14 | 0x46<<7 | 0x04, + 38684 - 19968: jis0208<<14 | 0x20<<7 | 0x59, + 38685 - 19968: jis0212<<14 | 0x46<<7 | 0x05, + 38686 - 19968: jis0208<<14 | 0x11<<7 | 0x41, + 38689 - 19968: jis0212<<14 | 0x46<<7 | 0x06, + 38690 - 19968: jis0212<<14 | 0x46<<7 | 0x07, + 38691 - 19968: jis0212<<14 | 0x46<<7 | 0x08, + 38692 - 19968: jis0208<<14 | 0x4F<<7 | 0x24, + 38695 - 19968: jis0208<<14 | 0x2B<<7 | 0x17, + 38696 - 19968: jis0212<<14 | 0x46<<7 | 0x09, + 38698 - 19968: jis0208<<14 | 0x4F<<7 | 0x25, + 38704 - 19968: jis0208<<14 | 0x4F<<7 | 0x26, + 38705 - 19968: jis0212<<14 | 0x46<<7 | 0x0A, + 38706 - 19968: jis0208<<14 | 0x2E<<7 | 0x09, + 38707 - 19968: jis0208<<14 | 0x5B<<7 | 0x32, + 38712 - 19968: jis0208<<14 | 0x3A<<7 | 0x10, + 38713 - 19968: jis0208<<14 | 0x4F<<7 | 0x27, + 38715 - 19968: jis0208<<14 | 0x5B<<7 | 0x33, + 38717 - 19968: jis0208<<14 | 0x4F<<7 | 0x28, + 38718 - 19968: jis0208<<14 | 0x4F<<7 | 0x29, + 38721 - 19968: jis0212<<14 | 0x46<<7 | 0x0C, + 38722 - 19968: jis0208<<14 | 0x4F<<7 | 0x2D, + 38723 - 19968: jis0208<<14 | 0x5B<<7 | 0x34, + 38724 - 19968: jis0208<<14 | 0x4F<<7 | 0x2A, + 38726 - 19968: jis0208<<14 | 0x4F<<7 | 0x2B, + 38728 - 19968: jis0208<<14 | 0x4F<<7 | 0x2C, + 38729 - 19968: jis0208<<14 | 0x4F<<7 | 0x2E, + 38730 - 19968: jis0212<<14 | 0x46<<7 | 0x0E, + 38733 - 19968: jis0208<<14 | 0x5B<<7 | 0x35, + 38734 - 19968: jis0212<<14 | 0x46<<7 | 0x0F, + 38735 - 19968: jis0208<<14 | 0x5B<<7 | 0x36, + 38737 - 19968: jis0208<<14 | 0x5B<<7 | 0x37, + 38738 - 19968: jis0208<<14 | 0x1F<<7 | 0x23, + 38741 - 19968: jis0208<<14 | 0x5B<<7 | 0x38, + 38742 - 19968: jis0208<<14 | 0x2B<<7 | 0x56, + 38743 - 19968: jis0212<<14 | 0x46<<7 | 0x12, + 38744 - 19968: jis0212<<14 | 0x46<<7 | 0x13, + 38745 - 19968: jis0208<<14 | 0x1F<<7 | 0x24, + 38746 - 19968: jis0212<<14 | 0x46<<7 | 0x14, + 38747 - 19968: jis0212<<14 | 0x46<<7 | 0x15, + 38748 - 19968: jis0208<<14 | 0x4F<<7 | 0x2F, + 38750 - 19968: jis0208<<14 | 0x27<<7 | 0x52, + 38752 - 19968: jis0208<<14 | 0x4F<<7 | 0x30, + 38753 - 19968: jis0208<<14 | 0x52<<7 | 0x32, + 38754 - 19968: jis0208<<14 | 0x2B<<7 | 0x2B, + 38755 - 19968: jis0212<<14 | 0x46<<7 | 0x16, + 38756 - 19968: jis0208<<14 | 0x4F<<7 | 0x31, + 38758 - 19968: jis0208<<14 | 0x4F<<7 | 0x32, + 38759 - 19968: jis0212<<14 | 0x46<<7 | 0x17, + 38760 - 19968: jis0208<<14 | 0x4F<<7 | 0x33, + 38761 - 19968: jis0208<<14 | 0x12<<7 | 0x36, + 38762 - 19968: jis0212<<14 | 0x46<<7 | 0x18, + 38763 - 19968: jis0208<<14 | 0x4F<<7 | 0x35, + 38765 - 19968: jis0208<<14 | 0x1E<<7 | 0x38, + 38766 - 19968: jis0212<<14 | 0x46<<7 | 0x19, + 38769 - 19968: jis0208<<14 | 0x4F<<7 | 0x36, + 38771 - 19968: jis0212<<14 | 0x46<<7 | 0x1A, + 38772 - 19968: jis0208<<14 | 0x16<<7 | 0x03, + 38774 - 19968: jis0212<<14 | 0x46<<7 | 0x1B, + 38775 - 19968: jis0212<<14 | 0x46<<7 | 0x1C, + 38776 - 19968: jis0212<<14 | 0x46<<7 | 0x1D, + 38777 - 19968: jis0208<<14 | 0x4F<<7 | 0x37, + 38778 - 19968: jis0208<<14 | 0x4F<<7 | 0x3B, + 38779 - 19968: jis0212<<14 | 0x46<<7 | 0x1E, + 38780 - 19968: jis0208<<14 | 0x4F<<7 | 0x39, + 38781 - 19968: jis0212<<14 | 0x46<<7 | 0x1F, + 38783 - 19968: jis0212<<14 | 0x46<<7 | 0x20, + 38784 - 19968: jis0212<<14 | 0x46<<7 | 0x21, + 38785 - 19968: jis0208<<14 | 0x4F<<7 | 0x3A, + 38788 - 19968: jis0208<<14 | 0x12<<7 | 0x52, + 38789 - 19968: jis0208<<14 | 0x4F<<7 | 0x38, + 38790 - 19968: jis0208<<14 | 0x4F<<7 | 0x3C, + 38793 - 19968: jis0212<<14 | 0x46<<7 | 0x22, + 38795 - 19968: jis0208<<14 | 0x4F<<7 | 0x3D, + 38797 - 19968: jis0208<<14 | 0x0F<<7 | 0x27, + 38799 - 19968: jis0208<<14 | 0x4F<<7 | 0x3E, + 38800 - 19968: jis0208<<14 | 0x4F<<7 | 0x3F, + 38805 - 19968: jis0212<<14 | 0x46<<7 | 0x23, + 38806 - 19968: jis0212<<14 | 0x46<<7 | 0x24, + 38807 - 19968: jis0212<<14 | 0x46<<7 | 0x25, + 38808 - 19968: jis0208<<14 | 0x1D<<7 | 0x43, + 38809 - 19968: jis0212<<14 | 0x46<<7 | 0x26, + 38810 - 19968: jis0212<<14 | 0x46<<7 | 0x27, + 38812 - 19968: jis0208<<14 | 0x4F<<7 | 0x40, + 38814 - 19968: jis0212<<14 | 0x46<<7 | 0x28, + 38815 - 19968: jis0212<<14 | 0x46<<7 | 0x29, + 38816 - 19968: jis0208<<14 | 0x14<<7 | 0x26, + 38818 - 19968: jis0212<<14 | 0x46<<7 | 0x2A, + 38819 - 19968: jis0208<<14 | 0x4F<<7 | 0x43, + 38822 - 19968: jis0208<<14 | 0x4F<<7 | 0x42, + 38824 - 19968: jis0208<<14 | 0x4F<<7 | 0x41, + 38827 - 19968: jis0208<<14 | 0x4A<<7 | 0x50, + 38828 - 19968: jis0212<<14 | 0x46<<7 | 0x2B, + 38829 - 19968: jis0208<<14 | 0x29<<7 | 0x3B, + 38830 - 19968: jis0212<<14 | 0x46<<7 | 0x2C, + 38833 - 19968: jis0212<<14 | 0x46<<7 | 0x2D, + 38834 - 19968: jis0212<<14 | 0x46<<7 | 0x2E, + 38835 - 19968: jis0208<<14 | 0x4F<<7 | 0x44, + 38836 - 19968: jis0208<<14 | 0x4F<<7 | 0x45, + 38837 - 19968: jis0212<<14 | 0x46<<7 | 0x2F, + 38838 - 19968: jis0212<<14 | 0x46<<7 | 0x30, + 38840 - 19968: jis0212<<14 | 0x46<<7 | 0x31, + 38841 - 19968: jis0212<<14 | 0x46<<7 | 0x32, + 38842 - 19968: jis0212<<14 | 0x46<<7 | 0x33, + 38844 - 19968: jis0212<<14 | 0x46<<7 | 0x34, + 38846 - 19968: jis0212<<14 | 0x46<<7 | 0x35, + 38847 - 19968: jis0212<<14 | 0x46<<7 | 0x36, + 38849 - 19968: jis0212<<14 | 0x46<<7 | 0x37, + 38851 - 19968: jis0208<<14 | 0x4F<<7 | 0x46, + 38852 - 19968: jis0212<<14 | 0x46<<7 | 0x38, + 38853 - 19968: jis0212<<14 | 0x46<<7 | 0x39, + 38854 - 19968: jis0208<<14 | 0x4F<<7 | 0x47, + 38855 - 19968: jis0212<<14 | 0x46<<7 | 0x3A, + 38856 - 19968: jis0208<<14 | 0x4F<<7 | 0x48, + 38857 - 19968: jis0212<<14 | 0x46<<7 | 0x3B, + 38858 - 19968: jis0212<<14 | 0x46<<7 | 0x3C, + 38859 - 19968: jis0208<<14 | 0x4F<<7 | 0x49, + 38860 - 19968: jis0212<<14 | 0x46<<7 | 0x3D, + 38861 - 19968: jis0212<<14 | 0x46<<7 | 0x3E, + 38862 - 19968: jis0212<<14 | 0x46<<7 | 0x3F, + 38864 - 19968: jis0212<<14 | 0x46<<7 | 0x40, + 38865 - 19968: jis0212<<14 | 0x46<<7 | 0x41, + 38867 - 19968: jis0208<<14 | 0x13<<7 | 0x39, + 38868 - 19968: jis0212<<14 | 0x46<<7 | 0x42, + 38871 - 19968: jis0212<<14 | 0x46<<7 | 0x43, + 38872 - 19968: jis0212<<14 | 0x46<<7 | 0x44, + 38873 - 19968: jis0212<<14 | 0x46<<7 | 0x45, + 38875 - 19968: jis0212<<14 | 0x46<<7 | 0x49, + 38876 - 19968: jis0208<<14 | 0x4F<<7 | 0x4A, + 38877 - 19968: jis0212<<14 | 0x46<<7 | 0x46, + 38878 - 19968: jis0212<<14 | 0x46<<7 | 0x47, + 38880 - 19968: jis0212<<14 | 0x46<<7 | 0x48, + 38881 - 19968: jis0212<<14 | 0x46<<7 | 0x4A, + 38884 - 19968: jis0212<<14 | 0x46<<7 | 0x4B, + 38893 - 19968: jis0208<<14 | 0x4F<<7 | 0x4B, + 38894 - 19968: jis0208<<14 | 0x26<<7 | 0x02, + 38895 - 19968: jis0212<<14 | 0x46<<7 | 0x4C, + 38897 - 19968: jis0212<<14 | 0x46<<7 | 0x4D, + 38898 - 19968: jis0208<<14 | 0x4F<<7 | 0x4D, + 38899 - 19968: jis0208<<14 | 0x11<<7 | 0x1A, + 38900 - 19968: jis0212<<14 | 0x46<<7 | 0x4E, + 38901 - 19968: jis0208<<14 | 0x4F<<7 | 0x50, + 38902 - 19968: jis0208<<14 | 0x4F<<7 | 0x4F, + 38903 - 19968: jis0212<<14 | 0x46<<7 | 0x4F, + 38904 - 19968: jis0212<<14 | 0x46<<7 | 0x50, + 38906 - 19968: jis0212<<14 | 0x46<<7 | 0x51, + 38907 - 19968: jis0208<<14 | 0x10<<7 | 0x03, + 38911 - 19968: jis0208<<14 | 0x15<<7 | 0x20, + 38913 - 19968: jis0208<<14 | 0x29<<7 | 0x26, + 38914 - 19968: jis0208<<14 | 0x23<<7 | 0x19, + 38915 - 19968: jis0208<<14 | 0x19<<7 | 0x01, + 38917 - 19968: jis0208<<14 | 0x18<<7 | 0x3F, + 38918 - 19968: jis0208<<14 | 0x1C<<7 | 0x46, + 38919 - 19968: jis0212<<14 | 0x46<<7 | 0x52, + 38920 - 19968: jis0208<<14 | 0x1E<<7 | 0x3B, + 38922 - 19968: jis0212<<14 | 0x46<<7 | 0x53, + 38924 - 19968: jis0208<<14 | 0x4F<<7 | 0x52, + 38925 - 19968: jis0212<<14 | 0x46<<7 | 0x55, + 38926 - 19968: jis0212<<14 | 0x46<<7 | 0x56, + 38927 - 19968: jis0208<<14 | 0x4F<<7 | 0x51, + 38928 - 19968: jis0208<<14 | 0x2C<<7 | 0x21, + 38929 - 19968: jis0208<<14 | 0x13<<7 | 0x47, + 38930 - 19968: jis0208<<14 | 0x27<<7 | 0x31, + 38931 - 19968: jis0208<<14 | 0x25<<7 | 0x3B, + 38932 - 19968: jis0212<<14 | 0x46<<7 | 0x57, + 38934 - 19968: jis0212<<14 | 0x46<<7 | 0x58, + 38935 - 19968: jis0208<<14 | 0x1E<<7 | 0x5B, + 38936 - 19968: jis0208<<14 | 0x2D<<7 | 0x2D, + 38937 - 19968: jis0212<<14 | 0x46<<7 | 0x54, + 38938 - 19968: jis0208<<14 | 0x16<<7 | 0x3A, + 38940 - 19968: jis0212<<14 | 0x46<<7 | 0x59, + 38942 - 19968: jis0212<<14 | 0x46<<7 | 0x5A, + 38944 - 19968: jis0212<<14 | 0x46<<7 | 0x5B, + 38945 - 19968: jis0208<<14 | 0x4F<<7 | 0x55, + 38947 - 19968: jis0212<<14 | 0x46<<7 | 0x5C, + 38948 - 19968: jis0208<<14 | 0x4F<<7 | 0x54, + 38949 - 19968: jis0212<<14 | 0x47<<7 | 0x07, + 38950 - 19968: jis0212<<14 | 0x46<<7 | 0x5D, + 38955 - 19968: jis0212<<14 | 0x47<<7 | 0x00, + 38956 - 19968: jis0208<<14 | 0x2A<<7 | 0x2A, + 38957 - 19968: jis0208<<14 | 0x25<<7 | 0x0B, + 38958 - 19968: jis0212<<14 | 0x47<<7 | 0x01, + 38959 - 19968: jis0212<<14 | 0x47<<7 | 0x02, + 38960 - 19968: jis0212<<14 | 0x47<<7 | 0x03, + 38962 - 19968: jis0212<<14 | 0x47<<7 | 0x04, + 38963 - 19968: jis0212<<14 | 0x47<<7 | 0x05, + 38964 - 19968: jis0208<<14 | 0x10<<7 | 0x2F, + 38965 - 19968: jis0212<<14 | 0x47<<7 | 0x06, + 38967 - 19968: jis0208<<14 | 0x4F<<7 | 0x56, + 38968 - 19968: jis0208<<14 | 0x4F<<7 | 0x53, + 38971 - 19968: jis0208<<14 | 0x28<<7 | 0x30, + 38972 - 19968: jis0208<<14 | 0x2C<<7 | 0x49, + 38973 - 19968: jis0208<<14 | 0x4F<<7 | 0x57, + 38974 - 19968: jis0212<<14 | 0x47<<7 | 0x08, + 38980 - 19968: jis0212<<14 | 0x47<<7 | 0x09, + 38982 - 19968: jis0208<<14 | 0x4F<<7 | 0x58, + 38983 - 19968: jis0212<<14 | 0x47<<7 | 0x0A, + 38986 - 19968: jis0212<<14 | 0x47<<7 | 0x0B, + 38987 - 19968: jis0208<<14 | 0x4F<<7 | 0x5A, + 38988 - 19968: jis0208<<14 | 0x21<<7 | 0x49, + 38989 - 19968: jis0208<<14 | 0x12<<7 | 0x3A, + 38990 - 19968: jis0208<<14 | 0x12<<7 | 0x3B, + 38991 - 19968: jis0208<<14 | 0x4F<<7 | 0x59, + 38993 - 19968: jis0212<<14 | 0x47<<7 | 0x0C, + 38994 - 19968: jis0212<<14 | 0x47<<7 | 0x0D, + 38995 - 19968: jis0212<<14 | 0x47<<7 | 0x0E, + 38996 - 19968: jis0208<<14 | 0x13<<7 | 0x48, + 38997 - 19968: jis0208<<14 | 0x17<<7 | 0x11, + 38998 - 19968: jis0212<<14 | 0x47<<7 | 0x0F, + 38999 - 19968: jis0208<<14 | 0x5B<<7 | 0x39, + 39000 - 19968: jis0208<<14 | 0x13<<7 | 0x49, + 39001 - 19968: jis0212<<14 | 0x47<<7 | 0x11, + 39002 - 19968: jis0212<<14 | 0x47<<7 | 0x12, + 39003 - 19968: jis0208<<14 | 0x24<<7 | 0x1E, + 39006 - 19968: jis0208<<14 | 0x2D<<7 | 0x3F, + 39010 - 19968: jis0212<<14 | 0x47<<7 | 0x13, + 39011 - 19968: jis0212<<14 | 0x47<<7 | 0x14, + 39013 - 19968: jis0208<<14 | 0x5B<<7 | 0x3A, + 39014 - 19968: jis0212<<14 | 0x47<<7 | 0x16, + 39015 - 19968: jis0208<<14 | 0x17<<7 | 0x3B, + 39018 - 19968: jis0212<<14 | 0x47<<7 | 0x17, + 39019 - 19968: jis0208<<14 | 0x4F<<7 | 0x5B, + 39020 - 19968: jis0212<<14 | 0x47<<7 | 0x18, + 39023 - 19968: jis0208<<14 | 0x4F<<7 | 0x5C, + 39024 - 19968: jis0208<<14 | 0x4F<<7 | 0x5D, + 39025 - 19968: jis0208<<14 | 0x50<<7 | 0x00, + 39027 - 19968: jis0208<<14 | 0x50<<7 | 0x02, + 39028 - 19968: jis0208<<14 | 0x50<<7 | 0x01, + 39080 - 19968: jis0208<<14 | 0x28<<7 | 0x56, + 39082 - 19968: jis0208<<14 | 0x50<<7 | 0x03, + 39083 - 19968: jis0212<<14 | 0x47<<7 | 0x19, + 39085 - 19968: jis0212<<14 | 0x47<<7 | 0x1A, + 39086 - 19968: jis0212<<14 | 0x47<<7 | 0x1B, + 39087 - 19968: jis0208<<14 | 0x50<<7 | 0x04, + 39088 - 19968: jis0212<<14 | 0x47<<7 | 0x1C, + 39089 - 19968: jis0208<<14 | 0x50<<7 | 0x05, + 39092 - 19968: jis0212<<14 | 0x47<<7 | 0x1D, + 39094 - 19968: jis0208<<14 | 0x50<<7 | 0x06, + 39095 - 19968: jis0212<<14 | 0x47<<7 | 0x1E, + 39096 - 19968: jis0212<<14 | 0x47<<7 | 0x1F, + 39098 - 19968: jis0212<<14 | 0x47<<7 | 0x20, + 39099 - 19968: jis0212<<14 | 0x47<<7 | 0x21, + 39103 - 19968: jis0212<<14 | 0x47<<7 | 0x22, + 39106 - 19968: jis0212<<14 | 0x47<<7 | 0x23, + 39107 - 19968: jis0208<<14 | 0x50<<7 | 0x08, + 39108 - 19968: jis0208<<14 | 0x50<<7 | 0x07, + 39109 - 19968: jis0212<<14 | 0x47<<7 | 0x24, + 39110 - 19968: jis0208<<14 | 0x50<<7 | 0x09, + 39112 - 19968: jis0212<<14 | 0x47<<7 | 0x25, + 39116 - 19968: jis0212<<14 | 0x47<<7 | 0x26, + 39131 - 19968: jis0208<<14 | 0x27<<7 | 0x53, + 39132 - 19968: jis0208<<14 | 0x45<<7 | 0x2B, + 39135 - 19968: jis0208<<14 | 0x1E<<7 | 0x08, + 39137 - 19968: jis0212<<14 | 0x47<<7 | 0x27, + 39138 - 19968: jis0208<<14 | 0x14<<7 | 0x11, + 39139 - 19968: jis0212<<14 | 0x47<<7 | 0x28, + 39141 - 19968: jis0212<<14 | 0x47<<7 | 0x29, + 39142 - 19968: jis0212<<14 | 0x47<<7 | 0x2A, + 39143 - 19968: jis0212<<14 | 0x47<<7 | 0x2B, + 39145 - 19968: jis0208<<14 | 0x50<<7 | 0x0A, + 39146 - 19968: jis0212<<14 | 0x47<<7 | 0x2C, + 39147 - 19968: jis0208<<14 | 0x50<<7 | 0x0B, + 39149 - 19968: jis0208<<14 | 0x31<<7 | 0x0B, + 39150 - 19968: jis0208<<14 | 0x3C<<7 | 0x1A, + 39151 - 19968: jis0208<<14 | 0x27<<7 | 0x32, + 39154 - 19968: jis0208<<14 | 0x0F<<7 | 0x5A, + 39155 - 19968: jis0212<<14 | 0x47<<7 | 0x2D, + 39156 - 19968: jis0208<<14 | 0x0F<<7 | 0x1A, + 39158 - 19968: jis0212<<14 | 0x47<<7 | 0x2E, + 39164 - 19968: jis0208<<14 | 0x1A<<7 | 0x53, + 39165 - 19968: jis0208<<14 | 0x2A<<7 | 0x0F, + 39166 - 19968: jis0208<<14 | 0x1D<<7 | 0x5D, + 39170 - 19968: jis0212<<14 | 0x47<<7 | 0x2F, + 39171 - 19968: jis0208<<14 | 0x50<<7 | 0x0C, + 39173 - 19968: jis0208<<14 | 0x2B<<7 | 0x3E, + 39175 - 19968: jis0212<<14 | 0x47<<7 | 0x30, + 39176 - 19968: jis0212<<14 | 0x47<<7 | 0x31, + 39177 - 19968: jis0208<<14 | 0x50<<7 | 0x0D, + 39178 - 19968: jis0208<<14 | 0x2C<<7 | 0x3B, + 39180 - 19968: jis0208<<14 | 0x10<<7 | 0x21, + 39184 - 19968: jis0208<<14 | 0x1A<<7 | 0x20, + 39185 - 19968: jis0212<<14 | 0x47<<7 | 0x32, + 39186 - 19968: jis0208<<14 | 0x50<<7 | 0x0E, + 39187 - 19968: jis0208<<14 | 0x11<<7 | 0x4D, + 39188 - 19968: jis0208<<14 | 0x50<<7 | 0x0F, + 39189 - 19968: jis0212<<14 | 0x47<<7 | 0x33, + 39190 - 19968: jis0212<<14 | 0x47<<7 | 0x34, + 39191 - 19968: jis0212<<14 | 0x47<<7 | 0x35, + 39192 - 19968: jis0208<<14 | 0x50<<7 | 0x10, + 39194 - 19968: jis0212<<14 | 0x47<<7 | 0x36, + 39195 - 19968: jis0212<<14 | 0x47<<7 | 0x37, + 39196 - 19968: jis0212<<14 | 0x47<<7 | 0x38, + 39197 - 19968: jis0208<<14 | 0x50<<7 | 0x12, + 39198 - 19968: jis0208<<14 | 0x50<<7 | 0x13, + 39199 - 19968: jis0212<<14 | 0x47<<7 | 0x39, + 39200 - 19968: jis0208<<14 | 0x50<<7 | 0x15, + 39201 - 19968: jis0208<<14 | 0x50<<7 | 0x11, + 39202 - 19968: jis0212<<14 | 0x47<<7 | 0x3A, + 39204 - 19968: jis0208<<14 | 0x50<<7 | 0x14, + 39206 - 19968: jis0212<<14 | 0x47<<7 | 0x3B, + 39207 - 19968: jis0208<<14 | 0x5B<<7 | 0x3D, + 39208 - 19968: jis0208<<14 | 0x13<<7 | 0x3A, + 39211 - 19968: jis0212<<14 | 0x47<<7 | 0x3D, + 39212 - 19968: jis0208<<14 | 0x50<<7 | 0x16, + 39214 - 19968: jis0208<<14 | 0x50<<7 | 0x17, + 39217 - 19968: jis0212<<14 | 0x47<<7 | 0x3E, + 39218 - 19968: jis0212<<14 | 0x47<<7 | 0x3F, + 39219 - 19968: jis0212<<14 | 0x47<<7 | 0x40, + 39220 - 19968: jis0212<<14 | 0x47<<7 | 0x41, + 39221 - 19968: jis0212<<14 | 0x47<<7 | 0x42, + 39225 - 19968: jis0212<<14 | 0x47<<7 | 0x43, + 39226 - 19968: jis0212<<14 | 0x47<<7 | 0x44, + 39227 - 19968: jis0212<<14 | 0x47<<7 | 0x45, + 39228 - 19968: jis0212<<14 | 0x47<<7 | 0x46, + 39229 - 19968: jis0208<<14 | 0x50<<7 | 0x18, + 39230 - 19968: jis0208<<14 | 0x50<<7 | 0x19, + 39232 - 19968: jis0212<<14 | 0x47<<7 | 0x47, + 39233 - 19968: jis0212<<14 | 0x47<<7 | 0x48, + 39234 - 19968: jis0208<<14 | 0x50<<7 | 0x1A, + 39237 - 19968: jis0208<<14 | 0x50<<7 | 0x1C, + 39238 - 19968: jis0212<<14 | 0x47<<7 | 0x49, + 39239 - 19968: jis0212<<14 | 0x47<<7 | 0x4A, + 39240 - 19968: jis0212<<14 | 0x47<<7 | 0x4B, + 39241 - 19968: jis0208<<14 | 0x50<<7 | 0x1B, + 39243 - 19968: jis0208<<14 | 0x50<<7 | 0x1E, + 39244 - 19968: jis0208<<14 | 0x50<<7 | 0x21, + 39245 - 19968: jis0212<<14 | 0x47<<7 | 0x4C, + 39246 - 19968: jis0212<<14 | 0x47<<7 | 0x4D, + 39248 - 19968: jis0208<<14 | 0x50<<7 | 0x1D, + 39249 - 19968: jis0208<<14 | 0x50<<7 | 0x1F, + 39250 - 19968: jis0208<<14 | 0x50<<7 | 0x20, + 39252 - 19968: jis0212<<14 | 0x47<<7 | 0x4E, + 39253 - 19968: jis0208<<14 | 0x50<<7 | 0x22, + 39255 - 19968: jis0208<<14 | 0x15<<7 | 0x21, + 39256 - 19968: jis0212<<14 | 0x47<<7 | 0x4F, + 39257 - 19968: jis0212<<14 | 0x47<<7 | 0x50, + 39259 - 19968: jis0212<<14 | 0x47<<7 | 0x51, + 39260 - 19968: jis0212<<14 | 0x47<<7 | 0x52, + 39262 - 19968: jis0212<<14 | 0x47<<7 | 0x53, + 39263 - 19968: jis0212<<14 | 0x47<<7 | 0x54, + 39264 - 19968: jis0212<<14 | 0x47<<7 | 0x55, + 39318 - 19968: jis0208<<14 | 0x1B<<7 | 0x52, + 39319 - 19968: jis0208<<14 | 0x50<<7 | 0x23, + 39320 - 19968: jis0208<<14 | 0x50<<7 | 0x24, + 39321 - 19968: jis0208<<14 | 0x18<<7 | 0x40, + 39323 - 19968: jis0212<<14 | 0x47<<7 | 0x56, + 39325 - 19968: jis0212<<14 | 0x47<<7 | 0x57, + 39326 - 19968: jis0208<<14 | 0x5B<<7 | 0x3F, + 39327 - 19968: jis0212<<14 | 0x47<<7 | 0x58, + 39333 - 19968: jis0208<<14 | 0x50<<7 | 0x25, + 39334 - 19968: jis0212<<14 | 0x47<<7 | 0x59, + 39336 - 19968: jis0208<<14 | 0x12<<7 | 0x1D, + 39340 - 19968: jis0208<<14 | 0x26<<7 | 0x2E, + 39341 - 19968: jis0208<<14 | 0x50<<7 | 0x26, + 39342 - 19968: jis0208<<14 | 0x50<<7 | 0x27, + 39344 - 19968: jis0212<<14 | 0x47<<7 | 0x5A, + 39345 - 19968: jis0212<<14 | 0x47<<7 | 0x5B, + 39346 - 19968: jis0212<<14 | 0x47<<7 | 0x5C, + 39347 - 19968: jis0208<<14 | 0x22<<7 | 0x39, + 39348 - 19968: jis0208<<14 | 0x25<<7 | 0x4A, + 39349 - 19968: jis0212<<14 | 0x47<<7 | 0x5D, + 39353 - 19968: jis0212<<14 | 0x48<<7 | 0x00, + 39354 - 19968: jis0212<<14 | 0x48<<7 | 0x01, + 39356 - 19968: jis0208<<14 | 0x50<<7 | 0x28, + 39357 - 19968: jis0212<<14 | 0x48<<7 | 0x02, + 39359 - 19968: jis0212<<14 | 0x48<<7 | 0x03, + 39361 - 19968: jis0208<<14 | 0x26<<7 | 0x5C, + 39363 - 19968: jis0212<<14 | 0x48<<7 | 0x04, + 39364 - 19968: jis0208<<14 | 0x21<<7 | 0x2B, + 39365 - 19968: jis0208<<14 | 0x10<<7 | 0x37, + 39366 - 19968: jis0208<<14 | 0x15<<7 | 0x4D, + 39368 - 19968: jis0208<<14 | 0x15<<7 | 0x4E, + 39369 - 19968: jis0212<<14 | 0x48<<7 | 0x05, + 39376 - 19968: jis0208<<14 | 0x22<<7 | 0x52, + 39377 - 19968: jis0208<<14 | 0x50<<7 | 0x2D, + 39378 - 19968: jis0208<<14 | 0x15<<7 | 0x4F, + 39379 - 19968: jis0212<<14 | 0x48<<7 | 0x06, + 39380 - 19968: jis0212<<14 | 0x48<<7 | 0x07, + 39381 - 19968: jis0208<<14 | 0x11<<7 | 0x4E, + 39384 - 19968: jis0208<<14 | 0x50<<7 | 0x2C, + 39385 - 19968: jis0212<<14 | 0x48<<7 | 0x08, + 39386 - 19968: jis0212<<14 | 0x48<<7 | 0x09, + 39387 - 19968: jis0208<<14 | 0x50<<7 | 0x2A, + 39388 - 19968: jis0212<<14 | 0x48<<7 | 0x0A, + 39389 - 19968: jis0208<<14 | 0x50<<7 | 0x2B, + 39390 - 19968: jis0212<<14 | 0x48<<7 | 0x0B, + 39391 - 19968: jis0208<<14 | 0x50<<7 | 0x29, + 39394 - 19968: jis0208<<14 | 0x50<<7 | 0x37, + 39399 - 19968: jis0212<<14 | 0x48<<7 | 0x0C, + 39402 - 19968: jis0212<<14 | 0x48<<7 | 0x0D, + 39403 - 19968: jis0212<<14 | 0x48<<7 | 0x0E, + 39404 - 19968: jis0212<<14 | 0x48<<7 | 0x0F, + 39405 - 19968: jis0208<<14 | 0x50<<7 | 0x2E, + 39406 - 19968: jis0208<<14 | 0x50<<7 | 0x2F, + 39408 - 19968: jis0212<<14 | 0x48<<7 | 0x10, + 39409 - 19968: jis0208<<14 | 0x50<<7 | 0x30, + 39410 - 19968: jis0208<<14 | 0x50<<7 | 0x31, + 39412 - 19968: jis0212<<14 | 0x48<<7 | 0x11, + 39413 - 19968: jis0212<<14 | 0x48<<7 | 0x12, + 39416 - 19968: jis0208<<14 | 0x50<<7 | 0x33, + 39417 - 19968: jis0212<<14 | 0x48<<7 | 0x13, + 39419 - 19968: jis0208<<14 | 0x50<<7 | 0x32, + 39421 - 19968: jis0212<<14 | 0x48<<7 | 0x14, + 39422 - 19968: jis0212<<14 | 0x48<<7 | 0x15, + 39423 - 19968: jis0208<<14 | 0x1C<<7 | 0x38, + 39425 - 19968: jis0208<<14 | 0x50<<7 | 0x34, + 39426 - 19968: jis0212<<14 | 0x48<<7 | 0x16, + 39427 - 19968: jis0212<<14 | 0x48<<7 | 0x17, + 39428 - 19968: jis0212<<14 | 0x48<<7 | 0x18, + 39429 - 19968: jis0208<<14 | 0x50<<7 | 0x36, + 39435 - 19968: jis0212<<14 | 0x48<<7 | 0x19, + 39436 - 19968: jis0212<<14 | 0x48<<7 | 0x1A, + 39438 - 19968: jis0208<<14 | 0x14<<7 | 0x12, + 39439 - 19968: jis0208<<14 | 0x50<<7 | 0x35, + 39440 - 19968: jis0212<<14 | 0x48<<7 | 0x1B, + 39441 - 19968: jis0212<<14 | 0x48<<7 | 0x1C, + 39442 - 19968: jis0208<<14 | 0x20<<7 | 0x5A, + 39443 - 19968: jis0208<<14 | 0x17<<7 | 0x12, + 39446 - 19968: jis0212<<14 | 0x48<<7 | 0x1D, + 39449 - 19968: jis0208<<14 | 0x50<<7 | 0x38, + 39454 - 19968: jis0212<<14 | 0x48<<7 | 0x1E, + 39456 - 19968: jis0212<<14 | 0x48<<7 | 0x1F, + 39458 - 19968: jis0212<<14 | 0x48<<7 | 0x20, + 39459 - 19968: jis0212<<14 | 0x48<<7 | 0x21, + 39460 - 19968: jis0212<<14 | 0x48<<7 | 0x22, + 39463 - 19968: jis0212<<14 | 0x48<<7 | 0x23, + 39464 - 19968: jis0208<<14 | 0x21<<7 | 0x2C, + 39467 - 19968: jis0208<<14 | 0x50<<7 | 0x39, + 39469 - 19968: jis0212<<14 | 0x48<<7 | 0x24, + 39470 - 19968: jis0212<<14 | 0x48<<7 | 0x25, + 39472 - 19968: jis0208<<14 | 0x25<<7 | 0x0C, + 39475 - 19968: jis0212<<14 | 0x48<<7 | 0x26, + 39477 - 19968: jis0212<<14 | 0x48<<7 | 0x27, + 39478 - 19968: jis0212<<14 | 0x48<<7 | 0x28, + 39479 - 19968: jis0208<<14 | 0x50<<7 | 0x3A, + 39480 - 19968: jis0212<<14 | 0x48<<7 | 0x29, + 39486 - 19968: jis0208<<14 | 0x50<<7 | 0x3F, + 39488 - 19968: jis0208<<14 | 0x50<<7 | 0x3D, + 39489 - 19968: jis0212<<14 | 0x48<<7 | 0x2B, + 39490 - 19968: jis0208<<14 | 0x50<<7 | 0x3C, + 39491 - 19968: jis0208<<14 | 0x50<<7 | 0x3E, + 39492 - 19968: jis0212<<14 | 0x48<<7 | 0x2C, + 39493 - 19968: jis0208<<14 | 0x50<<7 | 0x3B, + 39495 - 19968: jis0212<<14 | 0x48<<7 | 0x2A, + 39498 - 19968: jis0212<<14 | 0x48<<7 | 0x2D, + 39499 - 19968: jis0212<<14 | 0x48<<7 | 0x2E, + 39500 - 19968: jis0212<<14 | 0x48<<7 | 0x2F, + 39501 - 19968: jis0208<<14 | 0x50<<7 | 0x41, + 39502 - 19968: jis0208<<14 | 0x5B<<7 | 0x40, + 39505 - 19968: jis0212<<14 | 0x48<<7 | 0x31, + 39508 - 19968: jis0212<<14 | 0x48<<7 | 0x32, + 39509 - 19968: jis0208<<14 | 0x50<<7 | 0x40, + 39510 - 19968: jis0212<<14 | 0x48<<7 | 0x33, + 39511 - 19968: jis0208<<14 | 0x50<<7 | 0x43, + 39514 - 19968: jis0208<<14 | 0x15<<7 | 0x22, + 39515 - 19968: jis0208<<14 | 0x50<<7 | 0x42, + 39517 - 19968: jis0212<<14 | 0x48<<7 | 0x34, + 39519 - 19968: jis0208<<14 | 0x50<<7 | 0x44, + 39522 - 19968: jis0208<<14 | 0x50<<7 | 0x45, + 39524 - 19968: jis0208<<14 | 0x50<<7 | 0x47, + 39525 - 19968: jis0208<<14 | 0x50<<7 | 0x46, + 39529 - 19968: jis0208<<14 | 0x50<<7 | 0x48, + 39530 - 19968: jis0208<<14 | 0x50<<7 | 0x4A, + 39531 - 19968: jis0208<<14 | 0x50<<7 | 0x49, + 39592 - 19968: jis0208<<14 | 0x18<<7 | 0x5B, + 39594 - 19968: jis0212<<14 | 0x48<<7 | 0x35, + 39596 - 19968: jis0212<<14 | 0x48<<7 | 0x36, + 39597 - 19968: jis0208<<14 | 0x50<<7 | 0x4B, + 39598 - 19968: jis0212<<14 | 0x48<<7 | 0x37, + 39599 - 19968: jis0212<<14 | 0x48<<7 | 0x38, + 39600 - 19968: jis0208<<14 | 0x50<<7 | 0x4C, + 39602 - 19968: jis0212<<14 | 0x48<<7 | 0x39, + 39604 - 19968: jis0212<<14 | 0x48<<7 | 0x3A, + 39605 - 19968: jis0212<<14 | 0x48<<7 | 0x3B, + 39606 - 19968: jis0212<<14 | 0x48<<7 | 0x3C, + 39608 - 19968: jis0208<<14 | 0x12<<7 | 0x1B, + 39609 - 19968: jis0212<<14 | 0x48<<7 | 0x3D, + 39611 - 19968: jis0212<<14 | 0x48<<7 | 0x3E, + 39612 - 19968: jis0208<<14 | 0x50<<7 | 0x4D, + 39614 - 19968: jis0212<<14 | 0x48<<7 | 0x3F, + 39615 - 19968: jis0212<<14 | 0x48<<7 | 0x40, + 39616 - 19968: jis0208<<14 | 0x50<<7 | 0x4E, + 39617 - 19968: jis0212<<14 | 0x48<<7 | 0x41, + 39619 - 19968: jis0212<<14 | 0x48<<7 | 0x42, + 39620 - 19968: jis0208<<14 | 0x1E<<7 | 0x50, + 39622 - 19968: jis0212<<14 | 0x48<<7 | 0x43, + 39624 - 19968: jis0212<<14 | 0x48<<7 | 0x44, + 39630 - 19968: jis0212<<14 | 0x48<<7 | 0x45, + 39631 - 19968: jis0208<<14 | 0x50<<7 | 0x4F, + 39632 - 19968: jis0212<<14 | 0x48<<7 | 0x46, + 39633 - 19968: jis0208<<14 | 0x50<<7 | 0x50, + 39634 - 19968: jis0212<<14 | 0x48<<7 | 0x47, + 39635 - 19968: jis0208<<14 | 0x50<<7 | 0x51, + 39636 - 19968: jis0208<<14 | 0x50<<7 | 0x52, + 39637 - 19968: jis0212<<14 | 0x48<<7 | 0x48, + 39638 - 19968: jis0212<<14 | 0x48<<7 | 0x49, + 39639 - 19968: jis0212<<14 | 0x48<<7 | 0x4A, + 39640 - 19968: jis0208<<14 | 0x18<<7 | 0x41, + 39641 - 19968: jis0208<<14 | 0x5B<<7 | 0x41, + 39643 - 19968: jis0212<<14 | 0x48<<7 | 0x4B, + 39644 - 19968: jis0208<<14 | 0x5B<<7 | 0x42, + 39646 - 19968: jis0208<<14 | 0x50<<7 | 0x53, + 39647 - 19968: jis0208<<14 | 0x50<<7 | 0x54, + 39648 - 19968: jis0212<<14 | 0x48<<7 | 0x4D, + 39650 - 19968: jis0208<<14 | 0x50<<7 | 0x55, + 39651 - 19968: jis0208<<14 | 0x50<<7 | 0x56, + 39652 - 19968: jis0212<<14 | 0x48<<7 | 0x4E, + 39653 - 19968: jis0212<<14 | 0x48<<7 | 0x4F, + 39654 - 19968: jis0208<<14 | 0x50<<7 | 0x57, + 39655 - 19968: jis0212<<14 | 0x48<<7 | 0x50, + 39657 - 19968: jis0212<<14 | 0x48<<7 | 0x51, + 39658 - 19968: jis0208<<14 | 0x27<<7 | 0x10, + 39659 - 19968: jis0208<<14 | 0x50<<7 | 0x59, + 39660 - 19968: jis0212<<14 | 0x48<<7 | 0x52, + 39661 - 19968: jis0208<<14 | 0x28<<7 | 0x05, + 39662 - 19968: jis0208<<14 | 0x50<<7 | 0x5A, + 39663 - 19968: jis0208<<14 | 0x50<<7 | 0x58, + 39665 - 19968: jis0208<<14 | 0x50<<7 | 0x5C, + 39666 - 19968: jis0212<<14 | 0x48<<7 | 0x53, + 39667 - 19968: jis0212<<14 | 0x48<<7 | 0x54, + 39668 - 19968: jis0208<<14 | 0x50<<7 | 0x5B, + 39669 - 19968: jis0212<<14 | 0x48<<7 | 0x55, + 39671 - 19968: jis0208<<14 | 0x50<<7 | 0x5D, + 39673 - 19968: jis0212<<14 | 0x48<<7 | 0x56, + 39674 - 19968: jis0212<<14 | 0x48<<7 | 0x57, + 39675 - 19968: jis0208<<14 | 0x51<<7 | 0x00, + 39677 - 19968: jis0212<<14 | 0x48<<7 | 0x58, + 39679 - 19968: jis0212<<14 | 0x48<<7 | 0x59, + 39680 - 19968: jis0212<<14 | 0x48<<7 | 0x5A, + 39681 - 19968: jis0212<<14 | 0x48<<7 | 0x5B, + 39682 - 19968: jis0212<<14 | 0x48<<7 | 0x5C, + 39683 - 19968: jis0212<<14 | 0x48<<7 | 0x5D, + 39684 - 19968: jis0212<<14 | 0x49<<7 | 0x00, + 39685 - 19968: jis0212<<14 | 0x49<<7 | 0x01, + 39686 - 19968: jis0208<<14 | 0x51<<7 | 0x01, + 39688 - 19968: jis0212<<14 | 0x49<<7 | 0x02, + 39689 - 19968: jis0212<<14 | 0x49<<7 | 0x03, + 39691 - 19968: jis0212<<14 | 0x49<<7 | 0x04, + 39692 - 19968: jis0212<<14 | 0x49<<7 | 0x05, + 39693 - 19968: jis0212<<14 | 0x49<<7 | 0x06, + 39694 - 19968: jis0212<<14 | 0x49<<7 | 0x07, + 39696 - 19968: jis0212<<14 | 0x49<<7 | 0x08, + 39698 - 19968: jis0212<<14 | 0x49<<7 | 0x09, + 39702 - 19968: jis0212<<14 | 0x49<<7 | 0x0A, + 39704 - 19968: jis0208<<14 | 0x51<<7 | 0x02, + 39705 - 19968: jis0212<<14 | 0x49<<7 | 0x0B, + 39706 - 19968: jis0208<<14 | 0x51<<7 | 0x03, + 39707 - 19968: jis0212<<14 | 0x49<<7 | 0x0C, + 39708 - 19968: jis0212<<14 | 0x49<<7 | 0x0D, + 39711 - 19968: jis0208<<14 | 0x51<<7 | 0x04, + 39712 - 19968: jis0212<<14 | 0x49<<7 | 0x0E, + 39714 - 19968: jis0208<<14 | 0x51<<7 | 0x05, + 39715 - 19968: jis0208<<14 | 0x51<<7 | 0x06, + 39717 - 19968: jis0208<<14 | 0x51<<7 | 0x07, + 39718 - 19968: jis0212<<14 | 0x49<<7 | 0x0F, + 39719 - 19968: jis0208<<14 | 0x51<<7 | 0x08, + 39720 - 19968: jis0208<<14 | 0x51<<7 | 0x09, + 39721 - 19968: jis0208<<14 | 0x51<<7 | 0x0A, + 39722 - 19968: jis0208<<14 | 0x51<<7 | 0x0B, + 39723 - 19968: jis0212<<14 | 0x49<<7 | 0x10, + 39725 - 19968: jis0212<<14 | 0x49<<7 | 0x11, + 39726 - 19968: jis0208<<14 | 0x51<<7 | 0x0C, + 39727 - 19968: jis0208<<14 | 0x51<<7 | 0x0D, + 39729 - 19968: jis0208<<14 | 0x3C<<7 | 0x14, + 39730 - 19968: jis0208<<14 | 0x51<<7 | 0x0E, + 39731 - 19968: jis0212<<14 | 0x49<<7 | 0x12, + 39732 - 19968: jis0212<<14 | 0x49<<7 | 0x13, + 39733 - 19968: jis0212<<14 | 0x49<<7 | 0x14, + 39735 - 19968: jis0212<<14 | 0x49<<7 | 0x15, + 39737 - 19968: jis0212<<14 | 0x49<<7 | 0x16, + 39738 - 19968: jis0212<<14 | 0x49<<7 | 0x17, + 39739 - 19968: jis0208<<14 | 0x43<<7 | 0x57, + 39740 - 19968: jis0208<<14 | 0x14<<7 | 0x13, + 39741 - 19968: jis0212<<14 | 0x49<<7 | 0x18, + 39745 - 19968: jis0208<<14 | 0x12<<7 | 0x00, + 39746 - 19968: jis0208<<14 | 0x19<<7 | 0x11, + 39747 - 19968: jis0208<<14 | 0x51<<7 | 0x10, + 39748 - 19968: jis0208<<14 | 0x51<<7 | 0x0F, + 39749 - 19968: jis0208<<14 | 0x2B<<7 | 0x04, + 39752 - 19968: jis0212<<14 | 0x49<<7 | 0x19, + 39755 - 19968: jis0212<<14 | 0x49<<7 | 0x1A, + 39756 - 19968: jis0212<<14 | 0x49<<7 | 0x1B, + 39757 - 19968: jis0208<<14 | 0x51<<7 | 0x12, + 39758 - 19968: jis0208<<14 | 0x51<<7 | 0x13, + 39759 - 19968: jis0208<<14 | 0x51<<7 | 0x11, + 39761 - 19968: jis0208<<14 | 0x51<<7 | 0x14, + 39764 - 19968: jis0208<<14 | 0x2A<<7 | 0x41, + 39765 - 19968: jis0212<<14 | 0x49<<7 | 0x1C, + 39766 - 19968: jis0212<<14 | 0x49<<7 | 0x1D, + 39767 - 19968: jis0212<<14 | 0x49<<7 | 0x1E, + 39768 - 19968: jis0208<<14 | 0x51<<7 | 0x15, + 39770 - 19968: jis0208<<14 | 0x14<<7 | 0x5A, + 39771 - 19968: jis0212<<14 | 0x49<<7 | 0x1F, + 39774 - 19968: jis0212<<14 | 0x49<<7 | 0x20, + 39777 - 19968: jis0212<<14 | 0x49<<7 | 0x21, + 39779 - 19968: jis0212<<14 | 0x49<<7 | 0x22, + 39781 - 19968: jis0212<<14 | 0x49<<7 | 0x23, + 39782 - 19968: jis0212<<14 | 0x49<<7 | 0x24, + 39784 - 19968: jis0212<<14 | 0x49<<7 | 0x25, + 39786 - 19968: jis0212<<14 | 0x49<<7 | 0x26, + 39787 - 19968: jis0212<<14 | 0x49<<7 | 0x27, + 39788 - 19968: jis0212<<14 | 0x49<<7 | 0x28, + 39789 - 19968: jis0212<<14 | 0x49<<7 | 0x29, + 39790 - 19968: jis0212<<14 | 0x49<<7 | 0x2A, + 39791 - 19968: jis0208<<14 | 0x2E<<7 | 0x04, + 39794 - 19968: jis0208<<14 | 0x5B<<7 | 0x44, + 39795 - 19968: jis0212<<14 | 0x49<<7 | 0x2B, + 39796 - 19968: jis0208<<14 | 0x51<<7 | 0x16, + 39797 - 19968: jis0208<<14 | 0x5B<<7 | 0x43, + 39799 - 19968: jis0212<<14 | 0x49<<7 | 0x2D, + 39800 - 19968: jis0212<<14 | 0x49<<7 | 0x2E, + 39801 - 19968: jis0212<<14 | 0x49<<7 | 0x2F, + 39807 - 19968: jis0212<<14 | 0x49<<7 | 0x30, + 39808 - 19968: jis0212<<14 | 0x49<<7 | 0x31, + 39811 - 19968: jis0208<<14 | 0x51<<7 | 0x18, + 39812 - 19968: jis0212<<14 | 0x49<<7 | 0x32, + 39813 - 19968: jis0212<<14 | 0x49<<7 | 0x33, + 39814 - 19968: jis0212<<14 | 0x49<<7 | 0x34, + 39815 - 19968: jis0212<<14 | 0x49<<7 | 0x35, + 39817 - 19968: jis0212<<14 | 0x49<<7 | 0x36, + 39818 - 19968: jis0212<<14 | 0x49<<7 | 0x37, + 39819 - 19968: jis0212<<14 | 0x49<<7 | 0x38, + 39821 - 19968: jis0212<<14 | 0x49<<7 | 0x39, + 39822 - 19968: jis0208<<14 | 0x0F<<7 | 0x1D, + 39823 - 19968: jis0208<<14 | 0x5B<<7 | 0x45, + 39824 - 19968: jis0212<<14 | 0x49<<7 | 0x3B, + 39825 - 19968: jis0208<<14 | 0x51<<7 | 0x19, + 39826 - 19968: jis0208<<14 | 0x29<<7 | 0x0A, + 39827 - 19968: jis0208<<14 | 0x51<<7 | 0x17, + 39828 - 19968: jis0212<<14 | 0x49<<7 | 0x3C, + 39830 - 19968: jis0208<<14 | 0x51<<7 | 0x1A, + 39831 - 19968: jis0208<<14 | 0x51<<7 | 0x1B, + 39834 - 19968: jis0212<<14 | 0x49<<7 | 0x3D, + 39837 - 19968: jis0212<<14 | 0x49<<7 | 0x3E, + 39838 - 19968: jis0212<<14 | 0x49<<7 | 0x3F, + 39839 - 19968: jis0208<<14 | 0x51<<7 | 0x1C, + 39840 - 19968: jis0208<<14 | 0x51<<7 | 0x1D, + 39846 - 19968: jis0212<<14 | 0x49<<7 | 0x40, + 39847 - 19968: jis0212<<14 | 0x49<<7 | 0x41, + 39848 - 19968: jis0208<<14 | 0x51<<7 | 0x1E, + 39849 - 19968: jis0212<<14 | 0x49<<7 | 0x42, + 39850 - 19968: jis0208<<14 | 0x2A<<7 | 0x4D, + 39851 - 19968: jis0208<<14 | 0x1A<<7 | 0x0C, + 39852 - 19968: jis0212<<14 | 0x49<<7 | 0x43, + 39853 - 19968: jis0208<<14 | 0x19<<7 | 0x59, + 39854 - 19968: jis0208<<14 | 0x20<<7 | 0x0E, + 39856 - 19968: jis0212<<14 | 0x49<<7 | 0x44, + 39857 - 19968: jis0208<<14 | 0x5B<<7 | 0x46, + 39858 - 19968: jis0212<<14 | 0x49<<7 | 0x46, + 39860 - 19968: jis0208<<14 | 0x51<<7 | 0x1F, + 39863 - 19968: jis0212<<14 | 0x49<<7 | 0x47, + 39864 - 19968: jis0212<<14 | 0x49<<7 | 0x48, + 39865 - 19968: jis0208<<14 | 0x51<<7 | 0x22, + 39867 - 19968: jis0208<<14 | 0x5B<<7 | 0x47, + 39868 - 19968: jis0212<<14 | 0x49<<7 | 0x4A, + 39870 - 19968: jis0212<<14 | 0x49<<7 | 0x4B, + 39871 - 19968: jis0212<<14 | 0x49<<7 | 0x4C, + 39872 - 19968: jis0208<<14 | 0x51<<7 | 0x20, + 39873 - 19968: jis0212<<14 | 0x49<<7 | 0x4D, + 39878 - 19968: jis0208<<14 | 0x51<<7 | 0x23, + 39879 - 19968: jis0212<<14 | 0x49<<7 | 0x4E, + 39880 - 19968: jis0212<<14 | 0x49<<7 | 0x4F, + 39881 - 19968: jis0208<<14 | 0x17<<7 | 0x50, + 39882 - 19968: jis0208<<14 | 0x51<<7 | 0x21, + 39886 - 19968: jis0212<<14 | 0x49<<7 | 0x50, + 39887 - 19968: jis0208<<14 | 0x51<<7 | 0x24, + 39888 - 19968: jis0212<<14 | 0x49<<7 | 0x51, + 39889 - 19968: jis0208<<14 | 0x51<<7 | 0x25, + 39890 - 19968: jis0208<<14 | 0x51<<7 | 0x26, + 39892 - 19968: jis0208<<14 | 0x51<<7 | 0x2A, + 39894 - 19968: jis0208<<14 | 0x1A<<7 | 0x09, + 39895 - 19968: jis0212<<14 | 0x49<<7 | 0x52, + 39896 - 19968: jis0212<<14 | 0x49<<7 | 0x53, + 39899 - 19968: jis0208<<14 | 0x21<<7 | 0x43, + 39901 - 19968: jis0212<<14 | 0x49<<7 | 0x54, + 39903 - 19968: jis0212<<14 | 0x49<<7 | 0x55, + 39905 - 19968: jis0208<<14 | 0x51<<7 | 0x2B, + 39906 - 19968: jis0208<<14 | 0x51<<7 | 0x28, + 39907 - 19968: jis0208<<14 | 0x51<<7 | 0x27, + 39908 - 19968: jis0208<<14 | 0x51<<7 | 0x29, + 39909 - 19968: jis0212<<14 | 0x49<<7 | 0x56, + 39911 - 19968: jis0212<<14 | 0x49<<7 | 0x57, + 39912 - 19968: jis0208<<14 | 0x16<<7 | 0x3E, + 39914 - 19968: jis0212<<14 | 0x49<<7 | 0x58, + 39915 - 19968: jis0212<<14 | 0x49<<7 | 0x59, + 39919 - 19968: jis0212<<14 | 0x49<<7 | 0x5A, + 39920 - 19968: jis0208<<14 | 0x51<<7 | 0x2F, + 39921 - 19968: jis0208<<14 | 0x51<<7 | 0x2E, + 39922 - 19968: jis0208<<14 | 0x51<<7 | 0x2D, + 39923 - 19968: jis0212<<14 | 0x49<<7 | 0x5B, + 39925 - 19968: jis0208<<14 | 0x0F<<7 | 0x12, + 39927 - 19968: jis0212<<14 | 0x49<<7 | 0x5C, + 39928 - 19968: jis0212<<14 | 0x49<<7 | 0x5D, + 39929 - 19968: jis0212<<14 | 0x4A<<7 | 0x00, + 39930 - 19968: jis0212<<14 | 0x4A<<7 | 0x01, + 39933 - 19968: jis0212<<14 | 0x4A<<7 | 0x02, + 39935 - 19968: jis0212<<14 | 0x4A<<7 | 0x03, + 39936 - 19968: jis0208<<14 | 0x5B<<7 | 0x48, + 39938 - 19968: jis0212<<14 | 0x4A<<7 | 0x05, + 39940 - 19968: jis0208<<14 | 0x51<<7 | 0x39, + 39942 - 19968: jis0208<<14 | 0x51<<7 | 0x35, + 39944 - 19968: jis0208<<14 | 0x51<<7 | 0x36, + 39945 - 19968: jis0208<<14 | 0x51<<7 | 0x32, + 39946 - 19968: jis0208<<14 | 0x51<<7 | 0x38, + 39947 - 19968: jis0212<<14 | 0x4A<<7 | 0x06, + 39948 - 19968: jis0208<<14 | 0x51<<7 | 0x34, + 39949 - 19968: jis0208<<14 | 0x12<<7 | 0x41, + 39951 - 19968: jis0212<<14 | 0x4A<<7 | 0x07, + 39952 - 19968: jis0208<<14 | 0x2E<<7 | 0x2B, + 39953 - 19968: jis0212<<14 | 0x4A<<7 | 0x08, + 39954 - 19968: jis0208<<14 | 0x51<<7 | 0x37, + 39955 - 19968: jis0208<<14 | 0x51<<7 | 0x33, + 39956 - 19968: jis0208<<14 | 0x51<<7 | 0x31, + 39957 - 19968: jis0208<<14 | 0x51<<7 | 0x30, + 39958 - 19968: jis0212<<14 | 0x4A<<7 | 0x09, + 39960 - 19968: jis0212<<14 | 0x4A<<7 | 0x0A, + 39961 - 19968: jis0212<<14 | 0x4A<<7 | 0x0B, + 39962 - 19968: jis0212<<14 | 0x4A<<7 | 0x0C, + 39963 - 19968: jis0208<<14 | 0x51<<7 | 0x3B, + 39964 - 19968: jis0212<<14 | 0x4A<<7 | 0x0D, + 39966 - 19968: jis0212<<14 | 0x4A<<7 | 0x0E, + 39969 - 19968: jis0208<<14 | 0x51<<7 | 0x3E, + 39970 - 19968: jis0212<<14 | 0x4A<<7 | 0x0F, + 39971 - 19968: jis0212<<14 | 0x4A<<7 | 0x10, + 39972 - 19968: jis0208<<14 | 0x51<<7 | 0x3D, + 39973 - 19968: jis0208<<14 | 0x51<<7 | 0x3C, + 39974 - 19968: jis0212<<14 | 0x4A<<7 | 0x11, + 39975 - 19968: jis0212<<14 | 0x4A<<7 | 0x12, + 39976 - 19968: jis0212<<14 | 0x4A<<7 | 0x13, + 39977 - 19968: jis0212<<14 | 0x4A<<7 | 0x14, + 39978 - 19968: jis0212<<14 | 0x4A<<7 | 0x15, + 39981 - 19968: jis0208<<14 | 0x28<<7 | 0x28, + 39982 - 19968: jis0208<<14 | 0x51<<7 | 0x3A, + 39983 - 19968: jis0208<<14 | 0x0F<<7 | 0x52, + 39984 - 19968: jis0208<<14 | 0x51<<7 | 0x3F, + 39985 - 19968: jis0212<<14 | 0x4A<<7 | 0x16, + 39986 - 19968: jis0208<<14 | 0x51<<7 | 0x41, + 39989 - 19968: jis0212<<14 | 0x4A<<7 | 0x17, + 39990 - 19968: jis0212<<14 | 0x4A<<7 | 0x18, + 39991 - 19968: jis0212<<14 | 0x4A<<7 | 0x19, + 39993 - 19968: jis0208<<14 | 0x12<<7 | 0x4E, + 39994 - 19968: jis0208<<14 | 0x51<<7 | 0x2C, + 39995 - 19968: jis0208<<14 | 0x10<<7 | 0x16, + 39997 - 19968: jis0212<<14 | 0x4A<<7 | 0x1A, + 39998 - 19968: jis0208<<14 | 0x51<<7 | 0x43, + 40001 - 19968: jis0212<<14 | 0x4A<<7 | 0x1B, + 40003 - 19968: jis0212<<14 | 0x4A<<7 | 0x1C, + 40004 - 19968: jis0212<<14 | 0x4A<<7 | 0x1D, + 40005 - 19968: jis0212<<14 | 0x4A<<7 | 0x1E, + 40006 - 19968: jis0208<<14 | 0x51<<7 | 0x42, + 40007 - 19968: jis0208<<14 | 0x51<<7 | 0x40, + 40008 - 19968: jis0208<<14 | 0x22<<7 | 0x0C, + 40009 - 19968: jis0212<<14 | 0x4A<<7 | 0x1F, + 40010 - 19968: jis0212<<14 | 0x4A<<7 | 0x20, + 40014 - 19968: jis0212<<14 | 0x4A<<7 | 0x21, + 40015 - 19968: jis0212<<14 | 0x4A<<7 | 0x22, + 40016 - 19968: jis0212<<14 | 0x4A<<7 | 0x23, + 40018 - 19968: jis0208<<14 | 0x2A<<7 | 0x4F, + 40019 - 19968: jis0212<<14 | 0x4A<<7 | 0x24, + 40020 - 19968: jis0212<<14 | 0x4A<<7 | 0x25, + 40022 - 19968: jis0212<<14 | 0x4A<<7 | 0x26, + 40023 - 19968: jis0208<<14 | 0x2D<<7 | 0x39, + 40024 - 19968: jis0212<<14 | 0x4A<<7 | 0x27, + 40026 - 19968: jis0208<<14 | 0x51<<7 | 0x44, + 40027 - 19968: jis0212<<14 | 0x4A<<7 | 0x28, + 40028 - 19968: jis0212<<14 | 0x4A<<7 | 0x2F, + 40029 - 19968: jis0212<<14 | 0x4A<<7 | 0x29, + 40030 - 19968: jis0212<<14 | 0x4A<<7 | 0x2A, + 40031 - 19968: jis0212<<14 | 0x4A<<7 | 0x2B, + 40032 - 19968: jis0208<<14 | 0x51<<7 | 0x45, + 40035 - 19968: jis0212<<14 | 0x4A<<7 | 0x2C, + 40039 - 19968: jis0208<<14 | 0x51<<7 | 0x46, + 40040 - 19968: jis0212<<14 | 0x4A<<7 | 0x31, + 40041 - 19968: jis0212<<14 | 0x4A<<7 | 0x2D, + 40042 - 19968: jis0212<<14 | 0x4A<<7 | 0x2E, + 40043 - 19968: jis0212<<14 | 0x4A<<7 | 0x30, + 40046 - 19968: jis0212<<14 | 0x4A<<7 | 0x32, + 40048 - 19968: jis0212<<14 | 0x4A<<7 | 0x33, + 40050 - 19968: jis0212<<14 | 0x4A<<7 | 0x34, + 40053 - 19968: jis0212<<14 | 0x4A<<7 | 0x35, + 40054 - 19968: jis0208<<14 | 0x51<<7 | 0x47, + 40055 - 19968: jis0212<<14 | 0x4A<<7 | 0x36, + 40056 - 19968: jis0208<<14 | 0x51<<7 | 0x48, + 40059 - 19968: jis0212<<14 | 0x4A<<7 | 0x37, + 40165 - 19968: jis0208<<14 | 0x23<<7 | 0x1A, + 40166 - 19968: jis0212<<14 | 0x4A<<7 | 0x38, + 40167 - 19968: jis0208<<14 | 0x51<<7 | 0x49, + 40169 - 19968: jis0208<<14 | 0x27<<7 | 0x16, + 40171 - 19968: jis0208<<14 | 0x51<<7 | 0x4E, + 40172 - 19968: jis0208<<14 | 0x51<<7 | 0x4A, + 40176 - 19968: jis0208<<14 | 0x51<<7 | 0x4B, + 40178 - 19968: jis0212<<14 | 0x4A<<7 | 0x39, + 40179 - 19968: jis0208<<14 | 0x2A<<7 | 0x10, + 40180 - 19968: jis0208<<14 | 0x2B<<7 | 0x23, + 40182 - 19968: jis0208<<14 | 0x25<<7 | 0x2F, + 40183 - 19968: jis0212<<14 | 0x4A<<7 | 0x3A, + 40185 - 19968: jis0212<<14 | 0x4A<<7 | 0x3B, + 40194 - 19968: jis0212<<14 | 0x4A<<7 | 0x3D, + 40195 - 19968: jis0208<<14 | 0x51<<7 | 0x4F, + 40198 - 19968: jis0208<<14 | 0x51<<7 | 0x50, + 40199 - 19968: jis0208<<14 | 0x25<<7 | 0x1D, + 40200 - 19968: jis0208<<14 | 0x51<<7 | 0x4D, + 40201 - 19968: jis0208<<14 | 0x51<<7 | 0x4C, + 40203 - 19968: jis0212<<14 | 0x4A<<7 | 0x3C, + 40206 - 19968: jis0208<<14 | 0x11<<7 | 0x09, + 40209 - 19968: jis0212<<14 | 0x4A<<7 | 0x3E, + 40210 - 19968: jis0208<<14 | 0x51<<7 | 0x58, + 40213 - 19968: jis0208<<14 | 0x51<<7 | 0x57, + 40215 - 19968: jis0212<<14 | 0x4A<<7 | 0x3F, + 40216 - 19968: jis0212<<14 | 0x4A<<7 | 0x40, + 40219 - 19968: jis0208<<14 | 0x10<<7 | 0x54, + 40220 - 19968: jis0212<<14 | 0x4A<<7 | 0x41, + 40221 - 19968: jis0212<<14 | 0x4A<<7 | 0x42, + 40222 - 19968: jis0212<<14 | 0x4A<<7 | 0x43, + 40223 - 19968: jis0208<<14 | 0x51<<7 | 0x55, + 40227 - 19968: jis0208<<14 | 0x51<<7 | 0x54, + 40230 - 19968: jis0208<<14 | 0x51<<7 | 0x52, + 40232 - 19968: jis0208<<14 | 0x12<<7 | 0x5A, + 40234 - 19968: jis0208<<14 | 0x51<<7 | 0x51, + 40235 - 19968: jis0208<<14 | 0x1B<<7 | 0x11, + 40236 - 19968: jis0208<<14 | 0x11<<7 | 0x08, + 40239 - 19968: jis0212<<14 | 0x4A<<7 | 0x44, + 40240 - 19968: jis0212<<14 | 0x4A<<7 | 0x45, + 40242 - 19968: jis0212<<14 | 0x4A<<7 | 0x46, + 40243 - 19968: jis0212<<14 | 0x4A<<7 | 0x47, + 40244 - 19968: jis0212<<14 | 0x4A<<7 | 0x48, + 40250 - 19968: jis0212<<14 | 0x4A<<7 | 0x49, + 40251 - 19968: jis0208<<14 | 0x18<<7 | 0x42, + 40252 - 19968: jis0212<<14 | 0x4A<<7 | 0x4A, + 40253 - 19968: jis0212<<14 | 0x4A<<7 | 0x4C, + 40254 - 19968: jis0208<<14 | 0x51<<7 | 0x5B, + 40255 - 19968: jis0208<<14 | 0x51<<7 | 0x5A, + 40257 - 19968: jis0208<<14 | 0x51<<7 | 0x59, + 40258 - 19968: jis0212<<14 | 0x4A<<7 | 0x4D, + 40259 - 19968: jis0212<<14 | 0x4A<<7 | 0x4E, + 40260 - 19968: jis0208<<14 | 0x51<<7 | 0x56, + 40261 - 19968: jis0212<<14 | 0x4A<<7 | 0x4B, + 40262 - 19968: jis0208<<14 | 0x51<<7 | 0x5C, + 40263 - 19968: jis0212<<14 | 0x4A<<7 | 0x4F, + 40264 - 19968: jis0208<<14 | 0x51<<7 | 0x5D, + 40266 - 19968: jis0212<<14 | 0x4A<<7 | 0x50, + 40272 - 19968: jis0208<<14 | 0x52<<7 | 0x04, + 40273 - 19968: jis0208<<14 | 0x52<<7 | 0x03, + 40275 - 19968: jis0212<<14 | 0x4A<<7 | 0x51, + 40276 - 19968: jis0212<<14 | 0x4A<<7 | 0x52, + 40281 - 19968: jis0208<<14 | 0x52<<7 | 0x05, + 40284 - 19968: jis0208<<14 | 0x10<<7 | 0x0C, + 40285 - 19968: jis0208<<14 | 0x52<<7 | 0x00, + 40286 - 19968: jis0208<<14 | 0x52<<7 | 0x01, + 40287 - 19968: jis0212<<14 | 0x4A<<7 | 0x53, + 40288 - 19968: jis0208<<14 | 0x18<<7 | 0x53, + 40289 - 19968: jis0208<<14 | 0x2B<<7 | 0x18, + 40290 - 19968: jis0212<<14 | 0x4A<<7 | 0x55, + 40291 - 19968: jis0212<<14 | 0x4A<<7 | 0x54, + 40292 - 19968: jis0208<<14 | 0x52<<7 | 0x02, + 40293 - 19968: jis0212<<14 | 0x4A<<7 | 0x56, + 40297 - 19968: jis0212<<14 | 0x4A<<7 | 0x57, + 40298 - 19968: jis0212<<14 | 0x4A<<7 | 0x58, + 40299 - 19968: jis0208<<14 | 0x5B<<7 | 0x4A, + 40300 - 19968: jis0208<<14 | 0x2A<<7 | 0x11, + 40303 - 19968: jis0208<<14 | 0x52<<7 | 0x0A, + 40304 - 19968: jis0208<<14 | 0x5B<<7 | 0x49, + 40306 - 19968: jis0208<<14 | 0x52<<7 | 0x06, + 40310 - 19968: jis0212<<14 | 0x4A<<7 | 0x5B, + 40311 - 19968: jis0212<<14 | 0x4A<<7 | 0x5C, + 40314 - 19968: jis0208<<14 | 0x52<<7 | 0x0B, + 40315 - 19968: jis0212<<14 | 0x4A<<7 | 0x5D, + 40316 - 19968: jis0212<<14 | 0x4B<<7 | 0x00, + 40318 - 19968: jis0212<<14 | 0x4B<<7 | 0x01, + 40323 - 19968: jis0212<<14 | 0x4B<<7 | 0x02, + 40324 - 19968: jis0212<<14 | 0x4B<<7 | 0x03, + 40326 - 19968: jis0212<<14 | 0x4B<<7 | 0x04, + 40327 - 19968: jis0208<<14 | 0x52<<7 | 0x08, + 40329 - 19968: jis0208<<14 | 0x52<<7 | 0x07, + 40330 - 19968: jis0212<<14 | 0x4B<<7 | 0x05, + 40333 - 19968: jis0212<<14 | 0x4B<<7 | 0x06, + 40334 - 19968: jis0212<<14 | 0x4B<<7 | 0x07, + 40335 - 19968: jis0208<<14 | 0x16<<7 | 0x3B, + 40338 - 19968: jis0212<<14 | 0x4B<<7 | 0x08, + 40339 - 19968: jis0212<<14 | 0x4B<<7 | 0x09, + 40341 - 19968: jis0212<<14 | 0x4B<<7 | 0x0A, + 40342 - 19968: jis0212<<14 | 0x4B<<7 | 0x0B, + 40343 - 19968: jis0212<<14 | 0x4B<<7 | 0x0C, + 40344 - 19968: jis0212<<14 | 0x4B<<7 | 0x0D, + 40346 - 19968: jis0208<<14 | 0x52<<7 | 0x0C, + 40353 - 19968: jis0212<<14 | 0x4B<<7 | 0x0E, + 40356 - 19968: jis0208<<14 | 0x52<<7 | 0x0D, + 40361 - 19968: jis0208<<14 | 0x52<<7 | 0x0E, + 40362 - 19968: jis0212<<14 | 0x4B<<7 | 0x0F, + 40363 - 19968: jis0208<<14 | 0x52<<7 | 0x09, + 40364 - 19968: jis0212<<14 | 0x4B<<7 | 0x10, + 40366 - 19968: jis0212<<14 | 0x4B<<7 | 0x11, + 40367 - 19968: jis0208<<14 | 0x51<<7 | 0x53, + 40369 - 19968: jis0212<<14 | 0x4B<<7 | 0x12, + 40370 - 19968: jis0208<<14 | 0x52<<7 | 0x0F, + 40372 - 19968: jis0208<<14 | 0x23<<7 | 0x40, + 40373 - 19968: jis0212<<14 | 0x4B<<7 | 0x13, + 40376 - 19968: jis0208<<14 | 0x52<<7 | 0x13, + 40377 - 19968: jis0212<<14 | 0x4B<<7 | 0x14, + 40378 - 19968: jis0208<<14 | 0x52<<7 | 0x14, + 40379 - 19968: jis0208<<14 | 0x52<<7 | 0x12, + 40380 - 19968: jis0212<<14 | 0x4B<<7 | 0x15, + 40383 - 19968: jis0212<<14 | 0x4B<<7 | 0x16, + 40385 - 19968: jis0208<<14 | 0x52<<7 | 0x11, + 40386 - 19968: jis0208<<14 | 0x52<<7 | 0x17, + 40387 - 19968: jis0212<<14 | 0x4B<<7 | 0x17, + 40388 - 19968: jis0208<<14 | 0x52<<7 | 0x10, + 40390 - 19968: jis0208<<14 | 0x52<<7 | 0x15, + 40391 - 19968: jis0212<<14 | 0x4B<<7 | 0x18, + 40393 - 19968: jis0212<<14 | 0x4B<<7 | 0x19, + 40394 - 19968: jis0212<<14 | 0x4B<<7 | 0x1A, + 40399 - 19968: jis0208<<14 | 0x52<<7 | 0x16, + 40403 - 19968: jis0208<<14 | 0x52<<7 | 0x19, + 40404 - 19968: jis0212<<14 | 0x4B<<7 | 0x1B, + 40405 - 19968: jis0212<<14 | 0x4B<<7 | 0x1C, + 40406 - 19968: jis0212<<14 | 0x4B<<7 | 0x1D, + 40407 - 19968: jis0212<<14 | 0x4B<<7 | 0x1E, + 40409 - 19968: jis0208<<14 | 0x52<<7 | 0x18, + 40410 - 19968: jis0212<<14 | 0x4B<<7 | 0x1F, + 40414 - 19968: jis0212<<14 | 0x4B<<7 | 0x20, + 40415 - 19968: jis0212<<14 | 0x4B<<7 | 0x21, + 40416 - 19968: jis0212<<14 | 0x4B<<7 | 0x22, + 40421 - 19968: jis0212<<14 | 0x4B<<7 | 0x23, + 40422 - 19968: jis0208<<14 | 0x52<<7 | 0x1B, + 40423 - 19968: jis0212<<14 | 0x4B<<7 | 0x24, + 40425 - 19968: jis0212<<14 | 0x4B<<7 | 0x25, + 40427 - 19968: jis0212<<14 | 0x4B<<7 | 0x26, + 40429 - 19968: jis0208<<14 | 0x52<<7 | 0x1C, + 40430 - 19968: jis0212<<14 | 0x4B<<7 | 0x27, + 40431 - 19968: jis0208<<14 | 0x52<<7 | 0x1D, + 40432 - 19968: jis0212<<14 | 0x4B<<7 | 0x28, + 40434 - 19968: jis0208<<14 | 0x2E<<7 | 0x28, + 40435 - 19968: jis0212<<14 | 0x4B<<7 | 0x29, + 40436 - 19968: jis0212<<14 | 0x4B<<7 | 0x2A, + 40440 - 19968: jis0208<<14 | 0x52<<7 | 0x1A, + 40441 - 19968: jis0208<<14 | 0x21<<7 | 0x4A, + 40442 - 19968: jis0208<<14 | 0x19<<7 | 0x4C, + 40445 - 19968: jis0208<<14 | 0x52<<7 | 0x1E, + 40446 - 19968: jis0212<<14 | 0x4B<<7 | 0x2B, + 40450 - 19968: jis0212<<14 | 0x4B<<7 | 0x2D, + 40455 - 19968: jis0212<<14 | 0x4B<<7 | 0x2E, + 40458 - 19968: jis0212<<14 | 0x4B<<7 | 0x2C, + 40462 - 19968: jis0212<<14 | 0x4B<<7 | 0x2F, + 40464 - 19968: jis0212<<14 | 0x4B<<7 | 0x30, + 40465 - 19968: jis0212<<14 | 0x4B<<7 | 0x31, + 40466 - 19968: jis0212<<14 | 0x4B<<7 | 0x32, + 40469 - 19968: jis0212<<14 | 0x4B<<7 | 0x33, + 40470 - 19968: jis0212<<14 | 0x4B<<7 | 0x34, + 40473 - 19968: jis0208<<14 | 0x5B<<7 | 0x4C, + 40474 - 19968: jis0208<<14 | 0x52<<7 | 0x1F, + 40475 - 19968: jis0208<<14 | 0x52<<7 | 0x20, + 40476 - 19968: jis0212<<14 | 0x4B<<7 | 0x36, + 40477 - 19968: jis0212<<14 | 0x4B<<7 | 0x37, + 40478 - 19968: jis0208<<14 | 0x52<<7 | 0x21, + 40565 - 19968: jis0208<<14 | 0x52<<7 | 0x22, + 40568 - 19968: jis0208<<14 | 0x17<<7 | 0x13, + 40569 - 19968: jis0208<<14 | 0x52<<7 | 0x23, + 40570 - 19968: jis0212<<14 | 0x4B<<7 | 0x38, + 40571 - 19968: jis0212<<14 | 0x4B<<7 | 0x39, + 40572 - 19968: jis0212<<14 | 0x4B<<7 | 0x3A, + 40573 - 19968: jis0208<<14 | 0x52<<7 | 0x24, + 40575 - 19968: jis0208<<14 | 0x1B<<7 | 0x0E, + 40576 - 19968: jis0212<<14 | 0x4B<<7 | 0x3B, + 40577 - 19968: jis0208<<14 | 0x52<<7 | 0x25, + 40578 - 19968: jis0212<<14 | 0x4B<<7 | 0x3C, + 40579 - 19968: jis0212<<14 | 0x4B<<7 | 0x3D, + 40580 - 19968: jis0212<<14 | 0x4B<<7 | 0x3E, + 40581 - 19968: jis0212<<14 | 0x4B<<7 | 0x3F, + 40583 - 19968: jis0212<<14 | 0x4B<<7 | 0x40, + 40584 - 19968: jis0208<<14 | 0x52<<7 | 0x26, + 40587 - 19968: jis0208<<14 | 0x52<<7 | 0x27, + 40588 - 19968: jis0208<<14 | 0x52<<7 | 0x28, + 40590 - 19968: jis0212<<14 | 0x4B<<7 | 0x41, + 40591 - 19968: jis0212<<14 | 0x4B<<7 | 0x42, + 40593 - 19968: jis0208<<14 | 0x52<<7 | 0x2B, + 40594 - 19968: jis0208<<14 | 0x52<<7 | 0x29, + 40595 - 19968: jis0208<<14 | 0x2E<<7 | 0x1B, + 40597 - 19968: jis0208<<14 | 0x52<<7 | 0x2A, + 40598 - 19968: jis0212<<14 | 0x4B<<7 | 0x43, + 40599 - 19968: jis0208<<14 | 0x2D<<7 | 0x4E, + 40600 - 19968: jis0212<<14 | 0x4B<<7 | 0x44, + 40603 - 19968: jis0212<<14 | 0x4B<<7 | 0x45, + 40605 - 19968: jis0208<<14 | 0x52<<7 | 0x2C, + 40606 - 19968: jis0212<<14 | 0x4B<<7 | 0x46, + 40607 - 19968: jis0208<<14 | 0x2D<<7 | 0x3A, + 40612 - 19968: jis0212<<14 | 0x4B<<7 | 0x47, + 40613 - 19968: jis0208<<14 | 0x52<<7 | 0x2D, + 40614 - 19968: jis0208<<14 | 0x26<<7 | 0x5D, + 40616 - 19968: jis0212<<14 | 0x4B<<7 | 0x48, + 40617 - 19968: jis0208<<14 | 0x52<<7 | 0x2E, + 40618 - 19968: jis0208<<14 | 0x52<<7 | 0x30, + 40620 - 19968: jis0212<<14 | 0x4B<<7 | 0x49, + 40621 - 19968: jis0208<<14 | 0x52<<7 | 0x31, + 40622 - 19968: jis0212<<14 | 0x4B<<7 | 0x4A, + 40623 - 19968: jis0212<<14 | 0x4B<<7 | 0x4B, + 40624 - 19968: jis0212<<14 | 0x4B<<7 | 0x4C, + 40627 - 19968: jis0212<<14 | 0x4B<<7 | 0x4D, + 40628 - 19968: jis0212<<14 | 0x4B<<7 | 0x4E, + 40629 - 19968: jis0212<<14 | 0x4B<<7 | 0x4F, + 40632 - 19968: jis0208<<14 | 0x52<<7 | 0x2F, + 40633 - 19968: jis0208<<14 | 0x18<<7 | 0x4C, + 40634 - 19968: jis0208<<14 | 0x2B<<7 | 0x2C, + 40635 - 19968: jis0208<<14 | 0x2A<<7 | 0x42, + 40636 - 19968: jis0208<<14 | 0x35<<7 | 0x56, + 40638 - 19968: jis0208<<14 | 0x3C<<7 | 0x3F, + 40639 - 19968: jis0208<<14 | 0x2A<<7 | 0x5A, + 40644 - 19968: jis0208<<14 | 0x11<<7 | 0x0A, + 40646 - 19968: jis0212<<14 | 0x4B<<7 | 0x50, + 40648 - 19968: jis0212<<14 | 0x4B<<7 | 0x51, + 40651 - 19968: jis0212<<14 | 0x4B<<7 | 0x52, + 40652 - 19968: jis0208<<14 | 0x52<<7 | 0x33, + 40653 - 19968: jis0208<<14 | 0x14<<7 | 0x2F, + 40654 - 19968: jis0208<<14 | 0x52<<7 | 0x34, + 40655 - 19968: jis0208<<14 | 0x52<<7 | 0x35, + 40656 - 19968: jis0208<<14 | 0x52<<7 | 0x36, + 40657 - 19968: jis0208<<14 | 0x5B<<7 | 0x4D, + 40658 - 19968: jis0208<<14 | 0x18<<7 | 0x54, + 40660 - 19968: jis0208<<14 | 0x52<<7 | 0x37, + 40661 - 19968: jis0212<<14 | 0x4B<<7 | 0x53, + 40664 - 19968: jis0208<<14 | 0x3F<<7 | 0x33, + 40665 - 19968: jis0208<<14 | 0x2B<<7 | 0x3A, + 40667 - 19968: jis0208<<14 | 0x21<<7 | 0x42, + 40668 - 19968: jis0208<<14 | 0x52<<7 | 0x38, + 40669 - 19968: jis0208<<14 | 0x52<<7 | 0x3A, + 40670 - 19968: jis0208<<14 | 0x52<<7 | 0x39, + 40671 - 19968: jis0212<<14 | 0x4B<<7 | 0x54, + 40672 - 19968: jis0208<<14 | 0x52<<7 | 0x3B, + 40676 - 19968: jis0212<<14 | 0x4B<<7 | 0x55, + 40677 - 19968: jis0208<<14 | 0x52<<7 | 0x3C, + 40679 - 19968: jis0212<<14 | 0x4B<<7 | 0x56, + 40680 - 19968: jis0208<<14 | 0x52<<7 | 0x3D, + 40684 - 19968: jis0212<<14 | 0x4B<<7 | 0x57, + 40685 - 19968: jis0212<<14 | 0x4B<<7 | 0x58, + 40686 - 19968: jis0212<<14 | 0x4B<<7 | 0x59, + 40687 - 19968: jis0208<<14 | 0x52<<7 | 0x3E, + 40688 - 19968: jis0212<<14 | 0x4B<<7 | 0x5A, + 40689 - 19968: jis0212<<14 | 0x4B<<7 | 0x5B, + 40690 - 19968: jis0212<<14 | 0x4B<<7 | 0x5C, + 40692 - 19968: jis0208<<14 | 0x52<<7 | 0x3F, + 40693 - 19968: jis0212<<14 | 0x4B<<7 | 0x5D, + 40694 - 19968: jis0208<<14 | 0x52<<7 | 0x40, + 40695 - 19968: jis0208<<14 | 0x52<<7 | 0x41, + 40696 - 19968: jis0212<<14 | 0x4C<<7 | 0x00, + 40697 - 19968: jis0208<<14 | 0x52<<7 | 0x42, + 40699 - 19968: jis0208<<14 | 0x52<<7 | 0x43, + 40700 - 19968: jis0208<<14 | 0x52<<7 | 0x44, + 40701 - 19968: jis0208<<14 | 0x52<<7 | 0x45, + 40703 - 19968: jis0212<<14 | 0x4C<<7 | 0x01, + 40706 - 19968: jis0212<<14 | 0x4C<<7 | 0x02, + 40707 - 19968: jis0212<<14 | 0x4C<<7 | 0x03, + 40711 - 19968: jis0208<<14 | 0x52<<7 | 0x46, + 40712 - 19968: jis0208<<14 | 0x52<<7 | 0x47, + 40713 - 19968: jis0212<<14 | 0x4C<<7 | 0x04, + 40718 - 19968: jis0208<<14 | 0x24<<7 | 0x03, + 40719 - 19968: jis0212<<14 | 0x4C<<7 | 0x05, + 40720 - 19968: jis0212<<14 | 0x4C<<7 | 0x06, + 40721 - 19968: jis0212<<14 | 0x4C<<7 | 0x07, + 40722 - 19968: jis0212<<14 | 0x4C<<7 | 0x08, + 40723 - 19968: jis0208<<14 | 0x17<<7 | 0x3C, + 40724 - 19968: jis0212<<14 | 0x4C<<7 | 0x09, + 40725 - 19968: jis0208<<14 | 0x52<<7 | 0x49, + 40726 - 19968: jis0212<<14 | 0x4C<<7 | 0x0A, + 40727 - 19968: jis0212<<14 | 0x4C<<7 | 0x0B, + 40729 - 19968: jis0212<<14 | 0x4C<<7 | 0x0C, + 40730 - 19968: jis0212<<14 | 0x4C<<7 | 0x0D, + 40731 - 19968: jis0212<<14 | 0x4C<<7 | 0x0E, + 40735 - 19968: jis0212<<14 | 0x4C<<7 | 0x0F, + 40736 - 19968: jis0208<<14 | 0x20<<7 | 0x2C, + 40737 - 19968: jis0208<<14 | 0x52<<7 | 0x4A, + 40738 - 19968: jis0212<<14 | 0x4C<<7 | 0x10, + 40742 - 19968: jis0212<<14 | 0x4C<<7 | 0x11, + 40746 - 19968: jis0212<<14 | 0x4C<<7 | 0x12, + 40747 - 19968: jis0212<<14 | 0x4C<<7 | 0x13, + 40748 - 19968: jis0208<<14 | 0x52<<7 | 0x4B, + 40751 - 19968: jis0212<<14 | 0x4C<<7 | 0x14, + 40753 - 19968: jis0212<<14 | 0x4C<<7 | 0x15, + 40754 - 19968: jis0212<<14 | 0x4C<<7 | 0x16, + 40756 - 19968: jis0212<<14 | 0x4C<<7 | 0x17, + 40759 - 19968: jis0212<<14 | 0x4C<<7 | 0x18, + 40761 - 19968: jis0212<<14 | 0x4C<<7 | 0x19, + 40762 - 19968: jis0212<<14 | 0x4C<<7 | 0x1A, + 40763 - 19968: jis0208<<14 | 0x28<<7 | 0x00, + 40764 - 19968: jis0212<<14 | 0x4C<<7 | 0x1B, + 40765 - 19968: jis0212<<14 | 0x4C<<7 | 0x1C, + 40766 - 19968: jis0208<<14 | 0x52<<7 | 0x4C, + 40767 - 19968: jis0212<<14 | 0x4C<<7 | 0x1D, + 40769 - 19968: jis0212<<14 | 0x4C<<7 | 0x1E, + 40771 - 19968: jis0212<<14 | 0x4C<<7 | 0x1F, + 40772 - 19968: jis0212<<14 | 0x4C<<7 | 0x20, + 40773 - 19968: jis0212<<14 | 0x4C<<7 | 0x21, + 40774 - 19968: jis0212<<14 | 0x4C<<7 | 0x22, + 40775 - 19968: jis0212<<14 | 0x4C<<7 | 0x23, + 40778 - 19968: jis0208<<14 | 0x52<<7 | 0x4D, + 40779 - 19968: jis0208<<14 | 0x42<<7 | 0x16, + 40782 - 19968: jis0208<<14 | 0x4B<<7 | 0x39, + 40783 - 19968: jis0208<<14 | 0x4F<<7 | 0x4C, + 40786 - 19968: jis0208<<14 | 0x52<<7 | 0x4E, + 40787 - 19968: jis0212<<14 | 0x4C<<7 | 0x24, + 40788 - 19968: jis0208<<14 | 0x52<<7 | 0x4F, + 40789 - 19968: jis0212<<14 | 0x4C<<7 | 0x25, + 40790 - 19968: jis0212<<14 | 0x4C<<7 | 0x26, + 40791 - 19968: jis0212<<14 | 0x4C<<7 | 0x27, + 40792 - 19968: jis0212<<14 | 0x4C<<7 | 0x28, + 40794 - 19968: jis0212<<14 | 0x4C<<7 | 0x29, + 40797 - 19968: jis0212<<14 | 0x4C<<7 | 0x2A, + 40798 - 19968: jis0212<<14 | 0x4C<<7 | 0x2B, + 40799 - 19968: jis0208<<14 | 0x52<<7 | 0x51, + 40800 - 19968: jis0208<<14 | 0x52<<7 | 0x52, + 40801 - 19968: jis0208<<14 | 0x52<<7 | 0x53, + 40802 - 19968: jis0208<<14 | 0x2D<<7 | 0x4F, + 40803 - 19968: jis0208<<14 | 0x52<<7 | 0x50, + 40806 - 19968: jis0208<<14 | 0x52<<7 | 0x54, + 40807 - 19968: jis0208<<14 | 0x52<<7 | 0x55, + 40808 - 19968: jis0212<<14 | 0x4C<<7 | 0x2C, + 40809 - 19968: jis0212<<14 | 0x4C<<7 | 0x2D, + 40810 - 19968: jis0208<<14 | 0x52<<7 | 0x57, + 40812 - 19968: jis0208<<14 | 0x52<<7 | 0x56, + 40813 - 19968: jis0212<<14 | 0x4C<<7 | 0x2E, + 40814 - 19968: jis0212<<14 | 0x4C<<7 | 0x2F, + 40815 - 19968: jis0212<<14 | 0x4C<<7 | 0x30, + 40816 - 19968: jis0212<<14 | 0x4C<<7 | 0x31, + 40817 - 19968: jis0212<<14 | 0x4C<<7 | 0x32, + 40818 - 19968: jis0208<<14 | 0x52<<7 | 0x59, + 40819 - 19968: jis0212<<14 | 0x4C<<7 | 0x33, + 40821 - 19968: jis0212<<14 | 0x4C<<7 | 0x34, + 40822 - 19968: jis0208<<14 | 0x52<<7 | 0x5A, + 40823 - 19968: jis0208<<14 | 0x52<<7 | 0x58, + 40826 - 19968: jis0212<<14 | 0x4C<<7 | 0x35, + 40829 - 19968: jis0212<<14 | 0x4C<<7 | 0x36, + 40845 - 19968: jis0208<<14 | 0x2D<<7 | 0x15, + 40847 - 19968: jis0212<<14 | 0x4C<<7 | 0x37, + 40848 - 19968: jis0212<<14 | 0x4C<<7 | 0x38, + 40849 - 19968: jis0212<<14 | 0x4C<<7 | 0x39, + 40850 - 19968: jis0212<<14 | 0x4C<<7 | 0x3A, + 40852 - 19968: jis0212<<14 | 0x4C<<7 | 0x3B, + 40853 - 19968: jis0208<<14 | 0x52<<7 | 0x5B, + 40854 - 19968: jis0212<<14 | 0x4C<<7 | 0x3C, + 40855 - 19968: jis0212<<14 | 0x4C<<7 | 0x3D, + 40860 - 19968: jis0208<<14 | 0x52<<7 | 0x5C, + 40861 - 19968: jis0208<<14 | 0x42<<7 | 0x33, + 40862 - 19968: jis0212<<14 | 0x4C<<7 | 0x3E, + 40864 - 19968: jis0208<<14 | 0x52<<7 | 0x5D, + 40865 - 19968: jis0212<<14 | 0x4C<<7 | 0x3F, + 40866 - 19968: jis0212<<14 | 0x4C<<7 | 0x40, + 40867 - 19968: jis0212<<14 | 0x4C<<7 | 0x41, + 40869 - 19968: jis0212<<14 | 0x4C<<7 | 0x42, +} + +const encode1Low, encode1High = 8208, 9840 + +var encode1 = [...]uint16{ + 8208 - 8208: jis0208<<14 | 0x00<<7 | 0x1D, + 8213 - 8208: jis0208<<14 | 0x00<<7 | 0x1C, + 8216 - 8208: jis0208<<14 | 0x00<<7 | 0x25, + 8217 - 8208: jis0208<<14 | 0x00<<7 | 0x26, + 8220 - 8208: jis0208<<14 | 0x00<<7 | 0x27, + 8221 - 8208: jis0208<<14 | 0x00<<7 | 0x28, + 8224 - 8208: jis0208<<14 | 0x01<<7 | 0x56, + 8225 - 8208: jis0208<<14 | 0x01<<7 | 0x57, + 8229 - 8208: jis0208<<14 | 0x00<<7 | 0x24, + 8230 - 8208: jis0208<<14 | 0x00<<7 | 0x23, + 8240 - 8208: jis0208<<14 | 0x01<<7 | 0x52, + 8242 - 8208: jis0208<<14 | 0x00<<7 | 0x4B, + 8243 - 8208: jis0208<<14 | 0x00<<7 | 0x4C, + 8251 - 8208: jis0208<<14 | 0x01<<7 | 0x07, + 8451 - 8208: jis0208<<14 | 0x00<<7 | 0x4D, + 8470 - 8208: jis0208<<14 | 0x0C<<7 | 0x41, + 8481 - 8208: jis0208<<14 | 0x0C<<7 | 0x43, + 8482 - 8208: jis0212<<14 | 0x01<<7 | 0x4E, + 8491 - 8208: jis0208<<14 | 0x01<<7 | 0x51, + 8544 - 8208: jis0208<<14 | 0x0C<<7 | 0x14, + 8545 - 8208: jis0208<<14 | 0x0C<<7 | 0x15, + 8546 - 8208: jis0208<<14 | 0x0C<<7 | 0x16, + 8547 - 8208: jis0208<<14 | 0x0C<<7 | 0x17, + 8548 - 8208: jis0208<<14 | 0x0C<<7 | 0x18, + 8549 - 8208: jis0208<<14 | 0x0C<<7 | 0x19, + 8550 - 8208: jis0208<<14 | 0x0C<<7 | 0x1A, + 8551 - 8208: jis0208<<14 | 0x0C<<7 | 0x1B, + 8552 - 8208: jis0208<<14 | 0x0C<<7 | 0x1C, + 8553 - 8208: jis0208<<14 | 0x0C<<7 | 0x1D, + 8560 - 8208: jis0208<<14 | 0x5B<<7 | 0x50, + 8561 - 8208: jis0208<<14 | 0x5B<<7 | 0x51, + 8562 - 8208: jis0208<<14 | 0x5B<<7 | 0x52, + 8563 - 8208: jis0208<<14 | 0x5B<<7 | 0x53, + 8564 - 8208: jis0208<<14 | 0x5B<<7 | 0x54, + 8565 - 8208: jis0208<<14 | 0x5B<<7 | 0x55, + 8566 - 8208: jis0208<<14 | 0x5B<<7 | 0x56, + 8567 - 8208: jis0208<<14 | 0x5B<<7 | 0x57, + 8568 - 8208: jis0208<<14 | 0x5B<<7 | 0x58, + 8569 - 8208: jis0208<<14 | 0x5B<<7 | 0x59, + 8592 - 8208: jis0208<<14 | 0x01<<7 | 0x0A, + 8593 - 8208: jis0208<<14 | 0x01<<7 | 0x0B, + 8594 - 8208: jis0208<<14 | 0x01<<7 | 0x09, + 8595 - 8208: jis0208<<14 | 0x01<<7 | 0x0C, + 8658 - 8208: jis0208<<14 | 0x01<<7 | 0x2C, + 8660 - 8208: jis0208<<14 | 0x01<<7 | 0x2D, + 8704 - 8208: jis0208<<14 | 0x01<<7 | 0x2E, + 8706 - 8208: jis0208<<14 | 0x01<<7 | 0x3E, + 8707 - 8208: jis0208<<14 | 0x01<<7 | 0x2F, + 8711 - 8208: jis0208<<14 | 0x01<<7 | 0x3F, + 8712 - 8208: jis0208<<14 | 0x01<<7 | 0x19, + 8715 - 8208: jis0208<<14 | 0x01<<7 | 0x1A, + 8721 - 8208: jis0208<<14 | 0x0C<<7 | 0x53, + 8730 - 8208: jis0208<<14 | 0x01<<7 | 0x44, + 8733 - 8208: jis0208<<14 | 0x01<<7 | 0x46, + 8734 - 8208: jis0208<<14 | 0x00<<7 | 0x46, + 8735 - 8208: jis0208<<14 | 0x0C<<7 | 0x57, + 8736 - 8208: jis0208<<14 | 0x01<<7 | 0x3B, + 8741 - 8208: jis0208<<14 | 0x00<<7 | 0x21, + 8743 - 8208: jis0208<<14 | 0x01<<7 | 0x29, + 8744 - 8208: jis0208<<14 | 0x01<<7 | 0x2A, + 8745 - 8208: jis0208<<14 | 0x01<<7 | 0x20, + 8746 - 8208: jis0208<<14 | 0x01<<7 | 0x1F, + 8747 - 8208: jis0208<<14 | 0x01<<7 | 0x48, + 8748 - 8208: jis0208<<14 | 0x01<<7 | 0x49, + 8750 - 8208: jis0208<<14 | 0x0C<<7 | 0x52, + 8756 - 8208: jis0208<<14 | 0x00<<7 | 0x47, + 8757 - 8208: jis0208<<14 | 0x01<<7 | 0x47, + 8765 - 8208: jis0208<<14 | 0x01<<7 | 0x45, + 8786 - 8208: jis0208<<14 | 0x01<<7 | 0x41, + 8800 - 8208: jis0208<<14 | 0x00<<7 | 0x41, + 8801 - 8208: jis0208<<14 | 0x01<<7 | 0x40, + 8806 - 8208: jis0208<<14 | 0x00<<7 | 0x44, + 8807 - 8208: jis0208<<14 | 0x00<<7 | 0x45, + 8810 - 8208: jis0208<<14 | 0x01<<7 | 0x42, + 8811 - 8208: jis0208<<14 | 0x01<<7 | 0x43, + 8834 - 8208: jis0208<<14 | 0x01<<7 | 0x1D, + 8835 - 8208: jis0208<<14 | 0x01<<7 | 0x1E, + 8838 - 8208: jis0208<<14 | 0x01<<7 | 0x1B, + 8839 - 8208: jis0208<<14 | 0x01<<7 | 0x1C, + 8869 - 8208: jis0208<<14 | 0x01<<7 | 0x3C, + 8895 - 8208: jis0208<<14 | 0x0C<<7 | 0x58, + 8978 - 8208: jis0208<<14 | 0x01<<7 | 0x3D, + 9312 - 8208: jis0208<<14 | 0x0C<<7 | 0x00, + 9313 - 8208: jis0208<<14 | 0x0C<<7 | 0x01, + 9314 - 8208: jis0208<<14 | 0x0C<<7 | 0x02, + 9315 - 8208: jis0208<<14 | 0x0C<<7 | 0x03, + 9316 - 8208: jis0208<<14 | 0x0C<<7 | 0x04, + 9317 - 8208: jis0208<<14 | 0x0C<<7 | 0x05, + 9318 - 8208: jis0208<<14 | 0x0C<<7 | 0x06, + 9319 - 8208: jis0208<<14 | 0x0C<<7 | 0x07, + 9320 - 8208: jis0208<<14 | 0x0C<<7 | 0x08, + 9321 - 8208: jis0208<<14 | 0x0C<<7 | 0x09, + 9322 - 8208: jis0208<<14 | 0x0C<<7 | 0x0A, + 9323 - 8208: jis0208<<14 | 0x0C<<7 | 0x0B, + 9324 - 8208: jis0208<<14 | 0x0C<<7 | 0x0C, + 9325 - 8208: jis0208<<14 | 0x0C<<7 | 0x0D, + 9326 - 8208: jis0208<<14 | 0x0C<<7 | 0x0E, + 9327 - 8208: jis0208<<14 | 0x0C<<7 | 0x0F, + 9328 - 8208: jis0208<<14 | 0x0C<<7 | 0x10, + 9329 - 8208: jis0208<<14 | 0x0C<<7 | 0x11, + 9330 - 8208: jis0208<<14 | 0x0C<<7 | 0x12, + 9331 - 8208: jis0208<<14 | 0x0C<<7 | 0x13, + 9472 - 8208: jis0208<<14 | 0x07<<7 | 0x00, + 9473 - 8208: jis0208<<14 | 0x07<<7 | 0x0B, + 9474 - 8208: jis0208<<14 | 0x07<<7 | 0x01, + 9475 - 8208: jis0208<<14 | 0x07<<7 | 0x0C, + 9484 - 8208: jis0208<<14 | 0x07<<7 | 0x02, + 9487 - 8208: jis0208<<14 | 0x07<<7 | 0x0D, + 9488 - 8208: jis0208<<14 | 0x07<<7 | 0x03, + 9491 - 8208: jis0208<<14 | 0x07<<7 | 0x0E, + 9492 - 8208: jis0208<<14 | 0x07<<7 | 0x05, + 9495 - 8208: jis0208<<14 | 0x07<<7 | 0x10, + 9496 - 8208: jis0208<<14 | 0x07<<7 | 0x04, + 9499 - 8208: jis0208<<14 | 0x07<<7 | 0x0F, + 9500 - 8208: jis0208<<14 | 0x07<<7 | 0x06, + 9501 - 8208: jis0208<<14 | 0x07<<7 | 0x1B, + 9504 - 8208: jis0208<<14 | 0x07<<7 | 0x16, + 9507 - 8208: jis0208<<14 | 0x07<<7 | 0x11, + 9508 - 8208: jis0208<<14 | 0x07<<7 | 0x08, + 9509 - 8208: jis0208<<14 | 0x07<<7 | 0x1D, + 9512 - 8208: jis0208<<14 | 0x07<<7 | 0x18, + 9515 - 8208: jis0208<<14 | 0x07<<7 | 0x13, + 9516 - 8208: jis0208<<14 | 0x07<<7 | 0x07, + 9519 - 8208: jis0208<<14 | 0x07<<7 | 0x17, + 9520 - 8208: jis0208<<14 | 0x07<<7 | 0x1C, + 9523 - 8208: jis0208<<14 | 0x07<<7 | 0x12, + 9524 - 8208: jis0208<<14 | 0x07<<7 | 0x09, + 9527 - 8208: jis0208<<14 | 0x07<<7 | 0x19, + 9528 - 8208: jis0208<<14 | 0x07<<7 | 0x1E, + 9531 - 8208: jis0208<<14 | 0x07<<7 | 0x14, + 9532 - 8208: jis0208<<14 | 0x07<<7 | 0x0A, + 9535 - 8208: jis0208<<14 | 0x07<<7 | 0x1A, + 9538 - 8208: jis0208<<14 | 0x07<<7 | 0x1F, + 9547 - 8208: jis0208<<14 | 0x07<<7 | 0x15, + 9632 - 8208: jis0208<<14 | 0x01<<7 | 0x02, + 9633 - 8208: jis0208<<14 | 0x01<<7 | 0x01, + 9650 - 8208: jis0208<<14 | 0x01<<7 | 0x04, + 9651 - 8208: jis0208<<14 | 0x01<<7 | 0x03, + 9660 - 8208: jis0208<<14 | 0x01<<7 | 0x06, + 9661 - 8208: jis0208<<14 | 0x01<<7 | 0x05, + 9670 - 8208: jis0208<<14 | 0x01<<7 | 0x00, + 9671 - 8208: jis0208<<14 | 0x00<<7 | 0x5D, + 9675 - 8208: jis0208<<14 | 0x00<<7 | 0x5A, + 9678 - 8208: jis0208<<14 | 0x00<<7 | 0x5C, + 9679 - 8208: jis0208<<14 | 0x00<<7 | 0x5B, + 9711 - 8208: jis0208<<14 | 0x01<<7 | 0x5D, + 9733 - 8208: jis0208<<14 | 0x00<<7 | 0x59, + 9734 - 8208: jis0208<<14 | 0x00<<7 | 0x58, + 9792 - 8208: jis0208<<14 | 0x00<<7 | 0x49, + 9794 - 8208: jis0208<<14 | 0x00<<7 | 0x48, + 9834 - 8208: jis0208<<14 | 0x01<<7 | 0x55, + 9837 - 8208: jis0208<<14 | 0x01<<7 | 0x54, + 9839 - 8208: jis0208<<14 | 0x01<<7 | 0x53, +} + +const encode2Low, encode2High = 12288, 13262 + +var encode2 = [...]uint16{ + 12288 - 12288: jis0208<<14 | 0x00<<7 | 0x00, + 12289 - 12288: jis0208<<14 | 0x00<<7 | 0x01, + 12290 - 12288: jis0208<<14 | 0x00<<7 | 0x02, + 12291 - 12288: jis0208<<14 | 0x00<<7 | 0x16, + 12293 - 12288: jis0208<<14 | 0x00<<7 | 0x18, + 12294 - 12288: jis0208<<14 | 0x00<<7 | 0x19, + 12295 - 12288: jis0208<<14 | 0x00<<7 | 0x1A, + 12296 - 12288: jis0208<<14 | 0x00<<7 | 0x31, + 12297 - 12288: jis0208<<14 | 0x00<<7 | 0x32, + 12298 - 12288: jis0208<<14 | 0x00<<7 | 0x33, + 12299 - 12288: jis0208<<14 | 0x00<<7 | 0x34, + 12300 - 12288: jis0208<<14 | 0x00<<7 | 0x35, + 12301 - 12288: jis0208<<14 | 0x00<<7 | 0x36, + 12302 - 12288: jis0208<<14 | 0x00<<7 | 0x37, + 12303 - 12288: jis0208<<14 | 0x00<<7 | 0x38, + 12304 - 12288: jis0208<<14 | 0x00<<7 | 0x39, + 12305 - 12288: jis0208<<14 | 0x00<<7 | 0x3A, + 12306 - 12288: jis0208<<14 | 0x01<<7 | 0x08, + 12307 - 12288: jis0208<<14 | 0x01<<7 | 0x0D, + 12308 - 12288: jis0208<<14 | 0x00<<7 | 0x2B, + 12309 - 12288: jis0208<<14 | 0x00<<7 | 0x2C, + 12317 - 12288: jis0208<<14 | 0x0C<<7 | 0x3F, + 12319 - 12288: jis0208<<14 | 0x0C<<7 | 0x40, + 12353 - 12288: jis0208<<14 | 0x03<<7 | 0x00, + 12354 - 12288: jis0208<<14 | 0x03<<7 | 0x01, + 12355 - 12288: jis0208<<14 | 0x03<<7 | 0x02, + 12356 - 12288: jis0208<<14 | 0x03<<7 | 0x03, + 12357 - 12288: jis0208<<14 | 0x03<<7 | 0x04, + 12358 - 12288: jis0208<<14 | 0x03<<7 | 0x05, + 12359 - 12288: jis0208<<14 | 0x03<<7 | 0x06, + 12360 - 12288: jis0208<<14 | 0x03<<7 | 0x07, + 12361 - 12288: jis0208<<14 | 0x03<<7 | 0x08, + 12362 - 12288: jis0208<<14 | 0x03<<7 | 0x09, + 12363 - 12288: jis0208<<14 | 0x03<<7 | 0x0A, + 12364 - 12288: jis0208<<14 | 0x03<<7 | 0x0B, + 12365 - 12288: jis0208<<14 | 0x03<<7 | 0x0C, + 12366 - 12288: jis0208<<14 | 0x03<<7 | 0x0D, + 12367 - 12288: jis0208<<14 | 0x03<<7 | 0x0E, + 12368 - 12288: jis0208<<14 | 0x03<<7 | 0x0F, + 12369 - 12288: jis0208<<14 | 0x03<<7 | 0x10, + 12370 - 12288: jis0208<<14 | 0x03<<7 | 0x11, + 12371 - 12288: jis0208<<14 | 0x03<<7 | 0x12, + 12372 - 12288: jis0208<<14 | 0x03<<7 | 0x13, + 12373 - 12288: jis0208<<14 | 0x03<<7 | 0x14, + 12374 - 12288: jis0208<<14 | 0x03<<7 | 0x15, + 12375 - 12288: jis0208<<14 | 0x03<<7 | 0x16, + 12376 - 12288: jis0208<<14 | 0x03<<7 | 0x17, + 12377 - 12288: jis0208<<14 | 0x03<<7 | 0x18, + 12378 - 12288: jis0208<<14 | 0x03<<7 | 0x19, + 12379 - 12288: jis0208<<14 | 0x03<<7 | 0x1A, + 12380 - 12288: jis0208<<14 | 0x03<<7 | 0x1B, + 12381 - 12288: jis0208<<14 | 0x03<<7 | 0x1C, + 12382 - 12288: jis0208<<14 | 0x03<<7 | 0x1D, + 12383 - 12288: jis0208<<14 | 0x03<<7 | 0x1E, + 12384 - 12288: jis0208<<14 | 0x03<<7 | 0x1F, + 12385 - 12288: jis0208<<14 | 0x03<<7 | 0x20, + 12386 - 12288: jis0208<<14 | 0x03<<7 | 0x21, + 12387 - 12288: jis0208<<14 | 0x03<<7 | 0x22, + 12388 - 12288: jis0208<<14 | 0x03<<7 | 0x23, + 12389 - 12288: jis0208<<14 | 0x03<<7 | 0x24, + 12390 - 12288: jis0208<<14 | 0x03<<7 | 0x25, + 12391 - 12288: jis0208<<14 | 0x03<<7 | 0x26, + 12392 - 12288: jis0208<<14 | 0x03<<7 | 0x27, + 12393 - 12288: jis0208<<14 | 0x03<<7 | 0x28, + 12394 - 12288: jis0208<<14 | 0x03<<7 | 0x29, + 12395 - 12288: jis0208<<14 | 0x03<<7 | 0x2A, + 12396 - 12288: jis0208<<14 | 0x03<<7 | 0x2B, + 12397 - 12288: jis0208<<14 | 0x03<<7 | 0x2C, + 12398 - 12288: jis0208<<14 | 0x03<<7 | 0x2D, + 12399 - 12288: jis0208<<14 | 0x03<<7 | 0x2E, + 12400 - 12288: jis0208<<14 | 0x03<<7 | 0x2F, + 12401 - 12288: jis0208<<14 | 0x03<<7 | 0x30, + 12402 - 12288: jis0208<<14 | 0x03<<7 | 0x31, + 12403 - 12288: jis0208<<14 | 0x03<<7 | 0x32, + 12404 - 12288: jis0208<<14 | 0x03<<7 | 0x33, + 12405 - 12288: jis0208<<14 | 0x03<<7 | 0x34, + 12406 - 12288: jis0208<<14 | 0x03<<7 | 0x35, + 12407 - 12288: jis0208<<14 | 0x03<<7 | 0x36, + 12408 - 12288: jis0208<<14 | 0x03<<7 | 0x37, + 12409 - 12288: jis0208<<14 | 0x03<<7 | 0x38, + 12410 - 12288: jis0208<<14 | 0x03<<7 | 0x39, + 12411 - 12288: jis0208<<14 | 0x03<<7 | 0x3A, + 12412 - 12288: jis0208<<14 | 0x03<<7 | 0x3B, + 12413 - 12288: jis0208<<14 | 0x03<<7 | 0x3C, + 12414 - 12288: jis0208<<14 | 0x03<<7 | 0x3D, + 12415 - 12288: jis0208<<14 | 0x03<<7 | 0x3E, + 12416 - 12288: jis0208<<14 | 0x03<<7 | 0x3F, + 12417 - 12288: jis0208<<14 | 0x03<<7 | 0x40, + 12418 - 12288: jis0208<<14 | 0x03<<7 | 0x41, + 12419 - 12288: jis0208<<14 | 0x03<<7 | 0x42, + 12420 - 12288: jis0208<<14 | 0x03<<7 | 0x43, + 12421 - 12288: jis0208<<14 | 0x03<<7 | 0x44, + 12422 - 12288: jis0208<<14 | 0x03<<7 | 0x45, + 12423 - 12288: jis0208<<14 | 0x03<<7 | 0x46, + 12424 - 12288: jis0208<<14 | 0x03<<7 | 0x47, + 12425 - 12288: jis0208<<14 | 0x03<<7 | 0x48, + 12426 - 12288: jis0208<<14 | 0x03<<7 | 0x49, + 12427 - 12288: jis0208<<14 | 0x03<<7 | 0x4A, + 12428 - 12288: jis0208<<14 | 0x03<<7 | 0x4B, + 12429 - 12288: jis0208<<14 | 0x03<<7 | 0x4C, + 12430 - 12288: jis0208<<14 | 0x03<<7 | 0x4D, + 12431 - 12288: jis0208<<14 | 0x03<<7 | 0x4E, + 12432 - 12288: jis0208<<14 | 0x03<<7 | 0x4F, + 12433 - 12288: jis0208<<14 | 0x03<<7 | 0x50, + 12434 - 12288: jis0208<<14 | 0x03<<7 | 0x51, + 12435 - 12288: jis0208<<14 | 0x03<<7 | 0x52, + 12443 - 12288: jis0208<<14 | 0x00<<7 | 0x0A, + 12444 - 12288: jis0208<<14 | 0x00<<7 | 0x0B, + 12445 - 12288: jis0208<<14 | 0x00<<7 | 0x14, + 12446 - 12288: jis0208<<14 | 0x00<<7 | 0x15, + 12449 - 12288: jis0208<<14 | 0x04<<7 | 0x00, + 12450 - 12288: jis0208<<14 | 0x04<<7 | 0x01, + 12451 - 12288: jis0208<<14 | 0x04<<7 | 0x02, + 12452 - 12288: jis0208<<14 | 0x04<<7 | 0x03, + 12453 - 12288: jis0208<<14 | 0x04<<7 | 0x04, + 12454 - 12288: jis0208<<14 | 0x04<<7 | 0x05, + 12455 - 12288: jis0208<<14 | 0x04<<7 | 0x06, + 12456 - 12288: jis0208<<14 | 0x04<<7 | 0x07, + 12457 - 12288: jis0208<<14 | 0x04<<7 | 0x08, + 12458 - 12288: jis0208<<14 | 0x04<<7 | 0x09, + 12459 - 12288: jis0208<<14 | 0x04<<7 | 0x0A, + 12460 - 12288: jis0208<<14 | 0x04<<7 | 0x0B, + 12461 - 12288: jis0208<<14 | 0x04<<7 | 0x0C, + 12462 - 12288: jis0208<<14 | 0x04<<7 | 0x0D, + 12463 - 12288: jis0208<<14 | 0x04<<7 | 0x0E, + 12464 - 12288: jis0208<<14 | 0x04<<7 | 0x0F, + 12465 - 12288: jis0208<<14 | 0x04<<7 | 0x10, + 12466 - 12288: jis0208<<14 | 0x04<<7 | 0x11, + 12467 - 12288: jis0208<<14 | 0x04<<7 | 0x12, + 12468 - 12288: jis0208<<14 | 0x04<<7 | 0x13, + 12469 - 12288: jis0208<<14 | 0x04<<7 | 0x14, + 12470 - 12288: jis0208<<14 | 0x04<<7 | 0x15, + 12471 - 12288: jis0208<<14 | 0x04<<7 | 0x16, + 12472 - 12288: jis0208<<14 | 0x04<<7 | 0x17, + 12473 - 12288: jis0208<<14 | 0x04<<7 | 0x18, + 12474 - 12288: jis0208<<14 | 0x04<<7 | 0x19, + 12475 - 12288: jis0208<<14 | 0x04<<7 | 0x1A, + 12476 - 12288: jis0208<<14 | 0x04<<7 | 0x1B, + 12477 - 12288: jis0208<<14 | 0x04<<7 | 0x1C, + 12478 - 12288: jis0208<<14 | 0x04<<7 | 0x1D, + 12479 - 12288: jis0208<<14 | 0x04<<7 | 0x1E, + 12480 - 12288: jis0208<<14 | 0x04<<7 | 0x1F, + 12481 - 12288: jis0208<<14 | 0x04<<7 | 0x20, + 12482 - 12288: jis0208<<14 | 0x04<<7 | 0x21, + 12483 - 12288: jis0208<<14 | 0x04<<7 | 0x22, + 12484 - 12288: jis0208<<14 | 0x04<<7 | 0x23, + 12485 - 12288: jis0208<<14 | 0x04<<7 | 0x24, + 12486 - 12288: jis0208<<14 | 0x04<<7 | 0x25, + 12487 - 12288: jis0208<<14 | 0x04<<7 | 0x26, + 12488 - 12288: jis0208<<14 | 0x04<<7 | 0x27, + 12489 - 12288: jis0208<<14 | 0x04<<7 | 0x28, + 12490 - 12288: jis0208<<14 | 0x04<<7 | 0x29, + 12491 - 12288: jis0208<<14 | 0x04<<7 | 0x2A, + 12492 - 12288: jis0208<<14 | 0x04<<7 | 0x2B, + 12493 - 12288: jis0208<<14 | 0x04<<7 | 0x2C, + 12494 - 12288: jis0208<<14 | 0x04<<7 | 0x2D, + 12495 - 12288: jis0208<<14 | 0x04<<7 | 0x2E, + 12496 - 12288: jis0208<<14 | 0x04<<7 | 0x2F, + 12497 - 12288: jis0208<<14 | 0x04<<7 | 0x30, + 12498 - 12288: jis0208<<14 | 0x04<<7 | 0x31, + 12499 - 12288: jis0208<<14 | 0x04<<7 | 0x32, + 12500 - 12288: jis0208<<14 | 0x04<<7 | 0x33, + 12501 - 12288: jis0208<<14 | 0x04<<7 | 0x34, + 12502 - 12288: jis0208<<14 | 0x04<<7 | 0x35, + 12503 - 12288: jis0208<<14 | 0x04<<7 | 0x36, + 12504 - 12288: jis0208<<14 | 0x04<<7 | 0x37, + 12505 - 12288: jis0208<<14 | 0x04<<7 | 0x38, + 12506 - 12288: jis0208<<14 | 0x04<<7 | 0x39, + 12507 - 12288: jis0208<<14 | 0x04<<7 | 0x3A, + 12508 - 12288: jis0208<<14 | 0x04<<7 | 0x3B, + 12509 - 12288: jis0208<<14 | 0x04<<7 | 0x3C, + 12510 - 12288: jis0208<<14 | 0x04<<7 | 0x3D, + 12511 - 12288: jis0208<<14 | 0x04<<7 | 0x3E, + 12512 - 12288: jis0208<<14 | 0x04<<7 | 0x3F, + 12513 - 12288: jis0208<<14 | 0x04<<7 | 0x40, + 12514 - 12288: jis0208<<14 | 0x04<<7 | 0x41, + 12515 - 12288: jis0208<<14 | 0x04<<7 | 0x42, + 12516 - 12288: jis0208<<14 | 0x04<<7 | 0x43, + 12517 - 12288: jis0208<<14 | 0x04<<7 | 0x44, + 12518 - 12288: jis0208<<14 | 0x04<<7 | 0x45, + 12519 - 12288: jis0208<<14 | 0x04<<7 | 0x46, + 12520 - 12288: jis0208<<14 | 0x04<<7 | 0x47, + 12521 - 12288: jis0208<<14 | 0x04<<7 | 0x48, + 12522 - 12288: jis0208<<14 | 0x04<<7 | 0x49, + 12523 - 12288: jis0208<<14 | 0x04<<7 | 0x4A, + 12524 - 12288: jis0208<<14 | 0x04<<7 | 0x4B, + 12525 - 12288: jis0208<<14 | 0x04<<7 | 0x4C, + 12526 - 12288: jis0208<<14 | 0x04<<7 | 0x4D, + 12527 - 12288: jis0208<<14 | 0x04<<7 | 0x4E, + 12528 - 12288: jis0208<<14 | 0x04<<7 | 0x4F, + 12529 - 12288: jis0208<<14 | 0x04<<7 | 0x50, + 12530 - 12288: jis0208<<14 | 0x04<<7 | 0x51, + 12531 - 12288: jis0208<<14 | 0x04<<7 | 0x52, + 12532 - 12288: jis0208<<14 | 0x04<<7 | 0x53, + 12533 - 12288: jis0208<<14 | 0x04<<7 | 0x54, + 12534 - 12288: jis0208<<14 | 0x04<<7 | 0x55, + 12539 - 12288: jis0208<<14 | 0x00<<7 | 0x05, + 12540 - 12288: jis0208<<14 | 0x00<<7 | 0x1B, + 12541 - 12288: jis0208<<14 | 0x00<<7 | 0x12, + 12542 - 12288: jis0208<<14 | 0x00<<7 | 0x13, + 12849 - 12288: jis0208<<14 | 0x0C<<7 | 0x49, + 12850 - 12288: jis0208<<14 | 0x0C<<7 | 0x4A, + 12857 - 12288: jis0208<<14 | 0x0C<<7 | 0x4B, + 12964 - 12288: jis0208<<14 | 0x0C<<7 | 0x44, + 12965 - 12288: jis0208<<14 | 0x0C<<7 | 0x45, + 12966 - 12288: jis0208<<14 | 0x0C<<7 | 0x46, + 12967 - 12288: jis0208<<14 | 0x0C<<7 | 0x47, + 12968 - 12288: jis0208<<14 | 0x0C<<7 | 0x48, + 13059 - 12288: jis0208<<14 | 0x0C<<7 | 0x25, + 13069 - 12288: jis0208<<14 | 0x0C<<7 | 0x29, + 13076 - 12288: jis0208<<14 | 0x0C<<7 | 0x20, + 13080 - 12288: jis0208<<14 | 0x0C<<7 | 0x23, + 13090 - 12288: jis0208<<14 | 0x0C<<7 | 0x21, + 13091 - 12288: jis0208<<14 | 0x0C<<7 | 0x2B, + 13094 - 12288: jis0208<<14 | 0x0C<<7 | 0x2A, + 13095 - 12288: jis0208<<14 | 0x0C<<7 | 0x24, + 13099 - 12288: jis0208<<14 | 0x0C<<7 | 0x2C, + 13110 - 12288: jis0208<<14 | 0x0C<<7 | 0x26, + 13115 - 12288: jis0208<<14 | 0x0C<<7 | 0x2E, + 13129 - 12288: jis0208<<14 | 0x0C<<7 | 0x1F, + 13130 - 12288: jis0208<<14 | 0x0C<<7 | 0x2D, + 13133 - 12288: jis0208<<14 | 0x0C<<7 | 0x22, + 13137 - 12288: jis0208<<14 | 0x0C<<7 | 0x27, + 13143 - 12288: jis0208<<14 | 0x0C<<7 | 0x28, + 13179 - 12288: jis0208<<14 | 0x0C<<7 | 0x3E, + 13180 - 12288: jis0208<<14 | 0x0C<<7 | 0x4E, + 13181 - 12288: jis0208<<14 | 0x0C<<7 | 0x4D, + 13182 - 12288: jis0208<<14 | 0x0C<<7 | 0x4C, + 13198 - 12288: jis0208<<14 | 0x0C<<7 | 0x32, + 13199 - 12288: jis0208<<14 | 0x0C<<7 | 0x33, + 13212 - 12288: jis0208<<14 | 0x0C<<7 | 0x2F, + 13213 - 12288: jis0208<<14 | 0x0C<<7 | 0x30, + 13214 - 12288: jis0208<<14 | 0x0C<<7 | 0x31, + 13217 - 12288: jis0208<<14 | 0x0C<<7 | 0x35, + 13252 - 12288: jis0208<<14 | 0x0C<<7 | 0x34, + 13261 - 12288: jis0208<<14 | 0x0C<<7 | 0x42, +} + +const encode3Low, encode3High = 161, 1120 + +var encode3 = [...]uint16{ + 161 - 161: jis0212<<14 | 0x01<<7 | 0x21, + 164 - 161: jis0212<<14 | 0x01<<7 | 0x4F, + 166 - 161: jis0212<<14 | 0x01<<7 | 0x22, + 167 - 161: jis0208<<14 | 0x00<<7 | 0x57, + 168 - 161: jis0208<<14 | 0x00<<7 | 0x0E, + 169 - 161: jis0212<<14 | 0x01<<7 | 0x4C, + 170 - 161: jis0212<<14 | 0x01<<7 | 0x4B, + 174 - 161: jis0212<<14 | 0x01<<7 | 0x4D, + 175 - 161: jis0212<<14 | 0x01<<7 | 0x13, + 176 - 161: jis0208<<14 | 0x00<<7 | 0x4A, + 177 - 161: jis0208<<14 | 0x00<<7 | 0x3D, + 180 - 161: jis0208<<14 | 0x00<<7 | 0x0C, + 182 - 161: jis0208<<14 | 0x01<<7 | 0x58, + 184 - 161: jis0212<<14 | 0x01<<7 | 0x10, + 186 - 161: jis0212<<14 | 0x01<<7 | 0x4A, + 191 - 161: jis0212<<14 | 0x01<<7 | 0x23, + 192 - 161: jis0212<<14 | 0x09<<7 | 0x01, + 193 - 161: jis0212<<14 | 0x09<<7 | 0x00, + 194 - 161: jis0212<<14 | 0x09<<7 | 0x03, + 195 - 161: jis0212<<14 | 0x09<<7 | 0x09, + 196 - 161: jis0212<<14 | 0x09<<7 | 0x02, + 197 - 161: jis0212<<14 | 0x09<<7 | 0x08, + 198 - 161: jis0212<<14 | 0x08<<7 | 0x00, + 199 - 161: jis0212<<14 | 0x09<<7 | 0x0D, + 200 - 161: jis0212<<14 | 0x09<<7 | 0x11, + 201 - 161: jis0212<<14 | 0x09<<7 | 0x10, + 202 - 161: jis0212<<14 | 0x09<<7 | 0x13, + 203 - 161: jis0212<<14 | 0x09<<7 | 0x12, + 204 - 161: jis0212<<14 | 0x09<<7 | 0x1F, + 205 - 161: jis0212<<14 | 0x09<<7 | 0x1E, + 206 - 161: jis0212<<14 | 0x09<<7 | 0x21, + 207 - 161: jis0212<<14 | 0x09<<7 | 0x20, + 209 - 161: jis0212<<14 | 0x09<<7 | 0x2F, + 210 - 161: jis0212<<14 | 0x09<<7 | 0x31, + 211 - 161: jis0212<<14 | 0x09<<7 | 0x30, + 212 - 161: jis0212<<14 | 0x09<<7 | 0x33, + 213 - 161: jis0212<<14 | 0x09<<7 | 0x37, + 214 - 161: jis0212<<14 | 0x09<<7 | 0x32, + 215 - 161: jis0208<<14 | 0x00<<7 | 0x3E, + 216 - 161: jis0212<<14 | 0x08<<7 | 0x0B, + 217 - 161: jis0212<<14 | 0x09<<7 | 0x42, + 218 - 161: jis0212<<14 | 0x09<<7 | 0x41, + 219 - 161: jis0212<<14 | 0x09<<7 | 0x44, + 220 - 161: jis0212<<14 | 0x09<<7 | 0x43, + 221 - 161: jis0212<<14 | 0x09<<7 | 0x51, + 222 - 161: jis0212<<14 | 0x08<<7 | 0x0F, + 223 - 161: jis0212<<14 | 0x08<<7 | 0x2D, + 224 - 161: jis0212<<14 | 0x0A<<7 | 0x01, + 225 - 161: jis0212<<14 | 0x0A<<7 | 0x00, + 226 - 161: jis0212<<14 | 0x0A<<7 | 0x03, + 227 - 161: jis0212<<14 | 0x0A<<7 | 0x09, + 228 - 161: jis0212<<14 | 0x0A<<7 | 0x02, + 229 - 161: jis0212<<14 | 0x0A<<7 | 0x08, + 230 - 161: jis0212<<14 | 0x08<<7 | 0x20, + 231 - 161: jis0212<<14 | 0x0A<<7 | 0x0D, + 232 - 161: jis0212<<14 | 0x0A<<7 | 0x11, + 233 - 161: jis0212<<14 | 0x0A<<7 | 0x10, + 234 - 161: jis0212<<14 | 0x0A<<7 | 0x13, + 235 - 161: jis0212<<14 | 0x0A<<7 | 0x12, + 236 - 161: jis0212<<14 | 0x0A<<7 | 0x1F, + 237 - 161: jis0212<<14 | 0x0A<<7 | 0x1E, + 238 - 161: jis0212<<14 | 0x0A<<7 | 0x21, + 239 - 161: jis0212<<14 | 0x0A<<7 | 0x20, + 240 - 161: jis0212<<14 | 0x08<<7 | 0x22, + 241 - 161: jis0212<<14 | 0x0A<<7 | 0x2F, + 242 - 161: jis0212<<14 | 0x0A<<7 | 0x31, + 243 - 161: jis0212<<14 | 0x0A<<7 | 0x30, + 244 - 161: jis0212<<14 | 0x0A<<7 | 0x33, + 245 - 161: jis0212<<14 | 0x0A<<7 | 0x37, + 246 - 161: jis0212<<14 | 0x0A<<7 | 0x32, + 247 - 161: jis0208<<14 | 0x00<<7 | 0x3F, + 248 - 161: jis0212<<14 | 0x08<<7 | 0x2B, + 249 - 161: jis0212<<14 | 0x0A<<7 | 0x42, + 250 - 161: jis0212<<14 | 0x0A<<7 | 0x41, + 251 - 161: jis0212<<14 | 0x0A<<7 | 0x44, + 252 - 161: jis0212<<14 | 0x0A<<7 | 0x43, + 253 - 161: jis0212<<14 | 0x0A<<7 | 0x51, + 254 - 161: jis0212<<14 | 0x08<<7 | 0x2F, + 255 - 161: jis0212<<14 | 0x0A<<7 | 0x52, + 256 - 161: jis0212<<14 | 0x09<<7 | 0x06, + 257 - 161: jis0212<<14 | 0x0A<<7 | 0x06, + 258 - 161: jis0212<<14 | 0x09<<7 | 0x04, + 259 - 161: jis0212<<14 | 0x0A<<7 | 0x04, + 260 - 161: jis0212<<14 | 0x09<<7 | 0x07, + 261 - 161: jis0212<<14 | 0x0A<<7 | 0x07, + 262 - 161: jis0212<<14 | 0x09<<7 | 0x0A, + 263 - 161: jis0212<<14 | 0x0A<<7 | 0x0A, + 264 - 161: jis0212<<14 | 0x09<<7 | 0x0B, + 265 - 161: jis0212<<14 | 0x0A<<7 | 0x0B, + 266 - 161: jis0212<<14 | 0x09<<7 | 0x0E, + 267 - 161: jis0212<<14 | 0x0A<<7 | 0x0E, + 268 - 161: jis0212<<14 | 0x09<<7 | 0x0C, + 269 - 161: jis0212<<14 | 0x0A<<7 | 0x0C, + 270 - 161: jis0212<<14 | 0x09<<7 | 0x0F, + 271 - 161: jis0212<<14 | 0x0A<<7 | 0x0F, + 272 - 161: jis0212<<14 | 0x08<<7 | 0x01, + 273 - 161: jis0212<<14 | 0x08<<7 | 0x21, + 274 - 161: jis0212<<14 | 0x09<<7 | 0x16, + 275 - 161: jis0212<<14 | 0x0A<<7 | 0x16, + 278 - 161: jis0212<<14 | 0x09<<7 | 0x15, + 279 - 161: jis0212<<14 | 0x0A<<7 | 0x15, + 280 - 161: jis0212<<14 | 0x09<<7 | 0x17, + 281 - 161: jis0212<<14 | 0x0A<<7 | 0x17, + 282 - 161: jis0212<<14 | 0x09<<7 | 0x14, + 283 - 161: jis0212<<14 | 0x0A<<7 | 0x14, + 284 - 161: jis0212<<14 | 0x09<<7 | 0x19, + 285 - 161: jis0212<<14 | 0x0A<<7 | 0x19, + 286 - 161: jis0212<<14 | 0x09<<7 | 0x1A, + 287 - 161: jis0212<<14 | 0x0A<<7 | 0x1A, + 288 - 161: jis0212<<14 | 0x09<<7 | 0x1C, + 289 - 161: jis0212<<14 | 0x0A<<7 | 0x1C, + 290 - 161: jis0212<<14 | 0x09<<7 | 0x1B, + 292 - 161: jis0212<<14 | 0x09<<7 | 0x1D, + 293 - 161: jis0212<<14 | 0x0A<<7 | 0x1D, + 294 - 161: jis0212<<14 | 0x08<<7 | 0x03, + 295 - 161: jis0212<<14 | 0x08<<7 | 0x23, + 296 - 161: jis0212<<14 | 0x09<<7 | 0x26, + 297 - 161: jis0212<<14 | 0x0A<<7 | 0x26, + 298 - 161: jis0212<<14 | 0x09<<7 | 0x24, + 299 - 161: jis0212<<14 | 0x0A<<7 | 0x24, + 302 - 161: jis0212<<14 | 0x09<<7 | 0x25, + 303 - 161: jis0212<<14 | 0x0A<<7 | 0x25, + 304 - 161: jis0212<<14 | 0x09<<7 | 0x23, + 305 - 161: jis0212<<14 | 0x08<<7 | 0x24, + 306 - 161: jis0212<<14 | 0x08<<7 | 0x05, + 307 - 161: jis0212<<14 | 0x08<<7 | 0x25, + 308 - 161: jis0212<<14 | 0x09<<7 | 0x27, + 309 - 161: jis0212<<14 | 0x0A<<7 | 0x27, + 310 - 161: jis0212<<14 | 0x09<<7 | 0x28, + 311 - 161: jis0212<<14 | 0x0A<<7 | 0x28, + 312 - 161: jis0212<<14 | 0x08<<7 | 0x26, + 313 - 161: jis0212<<14 | 0x09<<7 | 0x29, + 314 - 161: jis0212<<14 | 0x0A<<7 | 0x29, + 315 - 161: jis0212<<14 | 0x09<<7 | 0x2B, + 316 - 161: jis0212<<14 | 0x0A<<7 | 0x2B, + 317 - 161: jis0212<<14 | 0x09<<7 | 0x2A, + 318 - 161: jis0212<<14 | 0x0A<<7 | 0x2A, + 319 - 161: jis0212<<14 | 0x08<<7 | 0x08, + 320 - 161: jis0212<<14 | 0x08<<7 | 0x28, + 321 - 161: jis0212<<14 | 0x08<<7 | 0x07, + 322 - 161: jis0212<<14 | 0x08<<7 | 0x27, + 323 - 161: jis0212<<14 | 0x09<<7 | 0x2C, + 324 - 161: jis0212<<14 | 0x0A<<7 | 0x2C, + 325 - 161: jis0212<<14 | 0x09<<7 | 0x2E, + 326 - 161: jis0212<<14 | 0x0A<<7 | 0x2E, + 327 - 161: jis0212<<14 | 0x09<<7 | 0x2D, + 328 - 161: jis0212<<14 | 0x0A<<7 | 0x2D, + 329 - 161: jis0212<<14 | 0x08<<7 | 0x29, + 330 - 161: jis0212<<14 | 0x08<<7 | 0x0A, + 331 - 161: jis0212<<14 | 0x08<<7 | 0x2A, + 332 - 161: jis0212<<14 | 0x09<<7 | 0x36, + 333 - 161: jis0212<<14 | 0x0A<<7 | 0x36, + 336 - 161: jis0212<<14 | 0x09<<7 | 0x35, + 337 - 161: jis0212<<14 | 0x0A<<7 | 0x35, + 338 - 161: jis0212<<14 | 0x08<<7 | 0x0C, + 339 - 161: jis0212<<14 | 0x08<<7 | 0x2C, + 340 - 161: jis0212<<14 | 0x09<<7 | 0x38, + 341 - 161: jis0212<<14 | 0x0A<<7 | 0x38, + 342 - 161: jis0212<<14 | 0x09<<7 | 0x3A, + 343 - 161: jis0212<<14 | 0x0A<<7 | 0x3A, + 344 - 161: jis0212<<14 | 0x09<<7 | 0x39, + 345 - 161: jis0212<<14 | 0x0A<<7 | 0x39, + 346 - 161: jis0212<<14 | 0x09<<7 | 0x3B, + 347 - 161: jis0212<<14 | 0x0A<<7 | 0x3B, + 348 - 161: jis0212<<14 | 0x09<<7 | 0x3C, + 349 - 161: jis0212<<14 | 0x0A<<7 | 0x3C, + 350 - 161: jis0212<<14 | 0x09<<7 | 0x3E, + 351 - 161: jis0212<<14 | 0x0A<<7 | 0x3E, + 352 - 161: jis0212<<14 | 0x09<<7 | 0x3D, + 353 - 161: jis0212<<14 | 0x0A<<7 | 0x3D, + 354 - 161: jis0212<<14 | 0x09<<7 | 0x40, + 355 - 161: jis0212<<14 | 0x0A<<7 | 0x40, + 356 - 161: jis0212<<14 | 0x09<<7 | 0x3F, + 357 - 161: jis0212<<14 | 0x0A<<7 | 0x3F, + 358 - 161: jis0212<<14 | 0x08<<7 | 0x0E, + 359 - 161: jis0212<<14 | 0x08<<7 | 0x2E, + 360 - 161: jis0212<<14 | 0x09<<7 | 0x4B, + 361 - 161: jis0212<<14 | 0x0A<<7 | 0x4B, + 362 - 161: jis0212<<14 | 0x09<<7 | 0x48, + 363 - 161: jis0212<<14 | 0x0A<<7 | 0x48, + 364 - 161: jis0212<<14 | 0x09<<7 | 0x45, + 365 - 161: jis0212<<14 | 0x0A<<7 | 0x45, + 366 - 161: jis0212<<14 | 0x09<<7 | 0x4A, + 367 - 161: jis0212<<14 | 0x0A<<7 | 0x4A, + 368 - 161: jis0212<<14 | 0x09<<7 | 0x47, + 369 - 161: jis0212<<14 | 0x0A<<7 | 0x47, + 370 - 161: jis0212<<14 | 0x09<<7 | 0x49, + 371 - 161: jis0212<<14 | 0x0A<<7 | 0x49, + 372 - 161: jis0212<<14 | 0x09<<7 | 0x50, + 373 - 161: jis0212<<14 | 0x0A<<7 | 0x50, + 374 - 161: jis0212<<14 | 0x09<<7 | 0x53, + 375 - 161: jis0212<<14 | 0x0A<<7 | 0x53, + 376 - 161: jis0212<<14 | 0x09<<7 | 0x52, + 377 - 161: jis0212<<14 | 0x09<<7 | 0x54, + 378 - 161: jis0212<<14 | 0x0A<<7 | 0x54, + 379 - 161: jis0212<<14 | 0x09<<7 | 0x56, + 380 - 161: jis0212<<14 | 0x0A<<7 | 0x56, + 381 - 161: jis0212<<14 | 0x09<<7 | 0x55, + 382 - 161: jis0212<<14 | 0x0A<<7 | 0x55, + 461 - 161: jis0212<<14 | 0x09<<7 | 0x05, + 462 - 161: jis0212<<14 | 0x0A<<7 | 0x05, + 463 - 161: jis0212<<14 | 0x09<<7 | 0x22, + 464 - 161: jis0212<<14 | 0x0A<<7 | 0x22, + 465 - 161: jis0212<<14 | 0x09<<7 | 0x34, + 466 - 161: jis0212<<14 | 0x0A<<7 | 0x34, + 467 - 161: jis0212<<14 | 0x09<<7 | 0x46, + 468 - 161: jis0212<<14 | 0x0A<<7 | 0x46, + 469 - 161: jis0212<<14 | 0x09<<7 | 0x4F, + 470 - 161: jis0212<<14 | 0x0A<<7 | 0x4F, + 471 - 161: jis0212<<14 | 0x09<<7 | 0x4C, + 472 - 161: jis0212<<14 | 0x0A<<7 | 0x4C, + 473 - 161: jis0212<<14 | 0x09<<7 | 0x4E, + 474 - 161: jis0212<<14 | 0x0A<<7 | 0x4E, + 475 - 161: jis0212<<14 | 0x09<<7 | 0x4D, + 476 - 161: jis0212<<14 | 0x0A<<7 | 0x4D, + 501 - 161: jis0212<<14 | 0x0A<<7 | 0x18, + 711 - 161: jis0212<<14 | 0x01<<7 | 0x0F, + 728 - 161: jis0212<<14 | 0x01<<7 | 0x0E, + 729 - 161: jis0212<<14 | 0x01<<7 | 0x11, + 730 - 161: jis0212<<14 | 0x01<<7 | 0x15, + 731 - 161: jis0212<<14 | 0x01<<7 | 0x14, + 733 - 161: jis0212<<14 | 0x01<<7 | 0x12, + 900 - 161: jis0212<<14 | 0x01<<7 | 0x17, + 901 - 161: jis0212<<14 | 0x01<<7 | 0x18, + 902 - 161: jis0212<<14 | 0x05<<7 | 0x40, + 904 - 161: jis0212<<14 | 0x05<<7 | 0x41, + 905 - 161: jis0212<<14 | 0x05<<7 | 0x42, + 906 - 161: jis0212<<14 | 0x05<<7 | 0x43, + 908 - 161: jis0212<<14 | 0x05<<7 | 0x46, + 910 - 161: jis0212<<14 | 0x05<<7 | 0x48, + 911 - 161: jis0212<<14 | 0x05<<7 | 0x4B, + 912 - 161: jis0212<<14 | 0x05<<7 | 0x55, + 913 - 161: jis0208<<14 | 0x05<<7 | 0x00, + 914 - 161: jis0208<<14 | 0x05<<7 | 0x01, + 915 - 161: jis0208<<14 | 0x05<<7 | 0x02, + 916 - 161: jis0208<<14 | 0x05<<7 | 0x03, + 917 - 161: jis0208<<14 | 0x05<<7 | 0x04, + 918 - 161: jis0208<<14 | 0x05<<7 | 0x05, + 919 - 161: jis0208<<14 | 0x05<<7 | 0x06, + 920 - 161: jis0208<<14 | 0x05<<7 | 0x07, + 921 - 161: jis0208<<14 | 0x05<<7 | 0x08, + 922 - 161: jis0208<<14 | 0x05<<7 | 0x09, + 923 - 161: jis0208<<14 | 0x05<<7 | 0x0A, + 924 - 161: jis0208<<14 | 0x05<<7 | 0x0B, + 925 - 161: jis0208<<14 | 0x05<<7 | 0x0C, + 926 - 161: jis0208<<14 | 0x05<<7 | 0x0D, + 927 - 161: jis0208<<14 | 0x05<<7 | 0x0E, + 928 - 161: jis0208<<14 | 0x05<<7 | 0x0F, + 929 - 161: jis0208<<14 | 0x05<<7 | 0x10, + 931 - 161: jis0208<<14 | 0x05<<7 | 0x11, + 932 - 161: jis0208<<14 | 0x05<<7 | 0x12, + 933 - 161: jis0208<<14 | 0x05<<7 | 0x13, + 934 - 161: jis0208<<14 | 0x05<<7 | 0x14, + 935 - 161: jis0208<<14 | 0x05<<7 | 0x15, + 936 - 161: jis0208<<14 | 0x05<<7 | 0x16, + 937 - 161: jis0208<<14 | 0x05<<7 | 0x17, + 938 - 161: jis0212<<14 | 0x05<<7 | 0x44, + 939 - 161: jis0212<<14 | 0x05<<7 | 0x49, + 940 - 161: jis0212<<14 | 0x05<<7 | 0x50, + 941 - 161: jis0212<<14 | 0x05<<7 | 0x51, + 942 - 161: jis0212<<14 | 0x05<<7 | 0x52, + 943 - 161: jis0212<<14 | 0x05<<7 | 0x53, + 944 - 161: jis0212<<14 | 0x05<<7 | 0x5A, + 945 - 161: jis0208<<14 | 0x05<<7 | 0x20, + 946 - 161: jis0208<<14 | 0x05<<7 | 0x21, + 947 - 161: jis0208<<14 | 0x05<<7 | 0x22, + 948 - 161: jis0208<<14 | 0x05<<7 | 0x23, + 949 - 161: jis0208<<14 | 0x05<<7 | 0x24, + 950 - 161: jis0208<<14 | 0x05<<7 | 0x25, + 951 - 161: jis0208<<14 | 0x05<<7 | 0x26, + 952 - 161: jis0208<<14 | 0x05<<7 | 0x27, + 953 - 161: jis0208<<14 | 0x05<<7 | 0x28, + 954 - 161: jis0208<<14 | 0x05<<7 | 0x29, + 955 - 161: jis0208<<14 | 0x05<<7 | 0x2A, + 956 - 161: jis0208<<14 | 0x05<<7 | 0x2B, + 957 - 161: jis0208<<14 | 0x05<<7 | 0x2C, + 958 - 161: jis0208<<14 | 0x05<<7 | 0x2D, + 959 - 161: jis0208<<14 | 0x05<<7 | 0x2E, + 960 - 161: jis0208<<14 | 0x05<<7 | 0x2F, + 961 - 161: jis0208<<14 | 0x05<<7 | 0x30, + 962 - 161: jis0212<<14 | 0x05<<7 | 0x57, + 963 - 161: jis0208<<14 | 0x05<<7 | 0x31, + 964 - 161: jis0208<<14 | 0x05<<7 | 0x32, + 965 - 161: jis0208<<14 | 0x05<<7 | 0x33, + 966 - 161: jis0208<<14 | 0x05<<7 | 0x34, + 967 - 161: jis0208<<14 | 0x05<<7 | 0x35, + 968 - 161: jis0208<<14 | 0x05<<7 | 0x36, + 969 - 161: jis0208<<14 | 0x05<<7 | 0x37, + 970 - 161: jis0212<<14 | 0x05<<7 | 0x54, + 971 - 161: jis0212<<14 | 0x05<<7 | 0x59, + 972 - 161: jis0212<<14 | 0x05<<7 | 0x56, + 973 - 161: jis0212<<14 | 0x05<<7 | 0x58, + 974 - 161: jis0212<<14 | 0x05<<7 | 0x5B, + 1025 - 161: jis0208<<14 | 0x06<<7 | 0x06, + 1026 - 161: jis0212<<14 | 0x06<<7 | 0x21, + 1027 - 161: jis0212<<14 | 0x06<<7 | 0x22, + 1028 - 161: jis0212<<14 | 0x06<<7 | 0x23, + 1029 - 161: jis0212<<14 | 0x06<<7 | 0x24, + 1030 - 161: jis0212<<14 | 0x06<<7 | 0x25, + 1031 - 161: jis0212<<14 | 0x06<<7 | 0x26, + 1032 - 161: jis0212<<14 | 0x06<<7 | 0x27, + 1033 - 161: jis0212<<14 | 0x06<<7 | 0x28, + 1034 - 161: jis0212<<14 | 0x06<<7 | 0x29, + 1035 - 161: jis0212<<14 | 0x06<<7 | 0x2A, + 1036 - 161: jis0212<<14 | 0x06<<7 | 0x2B, + 1038 - 161: jis0212<<14 | 0x06<<7 | 0x2C, + 1039 - 161: jis0212<<14 | 0x06<<7 | 0x2D, + 1040 - 161: jis0208<<14 | 0x06<<7 | 0x00, + 1041 - 161: jis0208<<14 | 0x06<<7 | 0x01, + 1042 - 161: jis0208<<14 | 0x06<<7 | 0x02, + 1043 - 161: jis0208<<14 | 0x06<<7 | 0x03, + 1044 - 161: jis0208<<14 | 0x06<<7 | 0x04, + 1045 - 161: jis0208<<14 | 0x06<<7 | 0x05, + 1046 - 161: jis0208<<14 | 0x06<<7 | 0x07, + 1047 - 161: jis0208<<14 | 0x06<<7 | 0x08, + 1048 - 161: jis0208<<14 | 0x06<<7 | 0x09, + 1049 - 161: jis0208<<14 | 0x06<<7 | 0x0A, + 1050 - 161: jis0208<<14 | 0x06<<7 | 0x0B, + 1051 - 161: jis0208<<14 | 0x06<<7 | 0x0C, + 1052 - 161: jis0208<<14 | 0x06<<7 | 0x0D, + 1053 - 161: jis0208<<14 | 0x06<<7 | 0x0E, + 1054 - 161: jis0208<<14 | 0x06<<7 | 0x0F, + 1055 - 161: jis0208<<14 | 0x06<<7 | 0x10, + 1056 - 161: jis0208<<14 | 0x06<<7 | 0x11, + 1057 - 161: jis0208<<14 | 0x06<<7 | 0x12, + 1058 - 161: jis0208<<14 | 0x06<<7 | 0x13, + 1059 - 161: jis0208<<14 | 0x06<<7 | 0x14, + 1060 - 161: jis0208<<14 | 0x06<<7 | 0x15, + 1061 - 161: jis0208<<14 | 0x06<<7 | 0x16, + 1062 - 161: jis0208<<14 | 0x06<<7 | 0x17, + 1063 - 161: jis0208<<14 | 0x06<<7 | 0x18, + 1064 - 161: jis0208<<14 | 0x06<<7 | 0x19, + 1065 - 161: jis0208<<14 | 0x06<<7 | 0x1A, + 1066 - 161: jis0208<<14 | 0x06<<7 | 0x1B, + 1067 - 161: jis0208<<14 | 0x06<<7 | 0x1C, + 1068 - 161: jis0208<<14 | 0x06<<7 | 0x1D, + 1069 - 161: jis0208<<14 | 0x06<<7 | 0x1E, + 1070 - 161: jis0208<<14 | 0x06<<7 | 0x1F, + 1071 - 161: jis0208<<14 | 0x06<<7 | 0x20, + 1072 - 161: jis0208<<14 | 0x06<<7 | 0x30, + 1073 - 161: jis0208<<14 | 0x06<<7 | 0x31, + 1074 - 161: jis0208<<14 | 0x06<<7 | 0x32, + 1075 - 161: jis0208<<14 | 0x06<<7 | 0x33, + 1076 - 161: jis0208<<14 | 0x06<<7 | 0x34, + 1077 - 161: jis0208<<14 | 0x06<<7 | 0x35, + 1078 - 161: jis0208<<14 | 0x06<<7 | 0x37, + 1079 - 161: jis0208<<14 | 0x06<<7 | 0x38, + 1080 - 161: jis0208<<14 | 0x06<<7 | 0x39, + 1081 - 161: jis0208<<14 | 0x06<<7 | 0x3A, + 1082 - 161: jis0208<<14 | 0x06<<7 | 0x3B, + 1083 - 161: jis0208<<14 | 0x06<<7 | 0x3C, + 1084 - 161: jis0208<<14 | 0x06<<7 | 0x3D, + 1085 - 161: jis0208<<14 | 0x06<<7 | 0x3E, + 1086 - 161: jis0208<<14 | 0x06<<7 | 0x3F, + 1087 - 161: jis0208<<14 | 0x06<<7 | 0x40, + 1088 - 161: jis0208<<14 | 0x06<<7 | 0x41, + 1089 - 161: jis0208<<14 | 0x06<<7 | 0x42, + 1090 - 161: jis0208<<14 | 0x06<<7 | 0x43, + 1091 - 161: jis0208<<14 | 0x06<<7 | 0x44, + 1092 - 161: jis0208<<14 | 0x06<<7 | 0x45, + 1093 - 161: jis0208<<14 | 0x06<<7 | 0x46, + 1094 - 161: jis0208<<14 | 0x06<<7 | 0x47, + 1095 - 161: jis0208<<14 | 0x06<<7 | 0x48, + 1096 - 161: jis0208<<14 | 0x06<<7 | 0x49, + 1097 - 161: jis0208<<14 | 0x06<<7 | 0x4A, + 1098 - 161: jis0208<<14 | 0x06<<7 | 0x4B, + 1099 - 161: jis0208<<14 | 0x06<<7 | 0x4C, + 1100 - 161: jis0208<<14 | 0x06<<7 | 0x4D, + 1101 - 161: jis0208<<14 | 0x06<<7 | 0x4E, + 1102 - 161: jis0208<<14 | 0x06<<7 | 0x4F, + 1103 - 161: jis0208<<14 | 0x06<<7 | 0x50, + 1105 - 161: jis0208<<14 | 0x06<<7 | 0x36, + 1106 - 161: jis0212<<14 | 0x06<<7 | 0x51, + 1107 - 161: jis0212<<14 | 0x06<<7 | 0x52, + 1108 - 161: jis0212<<14 | 0x06<<7 | 0x53, + 1109 - 161: jis0212<<14 | 0x06<<7 | 0x54, + 1110 - 161: jis0212<<14 | 0x06<<7 | 0x55, + 1111 - 161: jis0212<<14 | 0x06<<7 | 0x56, + 1112 - 161: jis0212<<14 | 0x06<<7 | 0x57, + 1113 - 161: jis0212<<14 | 0x06<<7 | 0x58, + 1114 - 161: jis0212<<14 | 0x06<<7 | 0x59, + 1115 - 161: jis0212<<14 | 0x06<<7 | 0x5A, + 1116 - 161: jis0212<<14 | 0x06<<7 | 0x5B, + 1118 - 161: jis0212<<14 | 0x06<<7 | 0x5C, + 1119 - 161: jis0212<<14 | 0x06<<7 | 0x5D, +} + +const encode4Low, encode4High = 63785, 64046 + +var encode4 = [...]uint16{ + 63785 - 63785: jis0208<<14 | 0x59<<7 | 0x25, + 63964 - 63785: jis0208<<14 | 0x5B<<7 | 0x2E, + 64014 - 63785: jis0208<<14 | 0x58<<7 | 0x33, + 64015 - 63785: jis0208<<14 | 0x58<<7 | 0x3E, + 64016 - 63785: jis0208<<14 | 0x58<<7 | 0x3F, + 64017 - 63785: jis0208<<14 | 0x58<<7 | 0x54, + 64018 - 63785: jis0208<<14 | 0x59<<7 | 0x1D, + 64019 - 63785: jis0208<<14 | 0x59<<7 | 0x2D, + 64020 - 63785: jis0208<<14 | 0x59<<7 | 0x2F, + 64021 - 63785: jis0208<<14 | 0x59<<7 | 0x5A, + 64022 - 63785: jis0208<<14 | 0x5A<<7 | 0x02, + 64023 - 63785: jis0208<<14 | 0x5A<<7 | 0x19, + 64024 - 63785: jis0208<<14 | 0x5A<<7 | 0x21, + 64025 - 63785: jis0208<<14 | 0x5A<<7 | 0x22, + 64026 - 63785: jis0208<<14 | 0x5A<<7 | 0x23, + 64027 - 63785: jis0208<<14 | 0x5A<<7 | 0x25, + 64028 - 63785: jis0208<<14 | 0x5A<<7 | 0x29, + 64029 - 63785: jis0208<<14 | 0x5A<<7 | 0x2C, + 64030 - 63785: jis0208<<14 | 0x5A<<7 | 0x35, + 64031 - 63785: jis0208<<14 | 0x5A<<7 | 0x40, + 64032 - 63785: jis0208<<14 | 0x5A<<7 | 0x42, + 64033 - 63785: jis0208<<14 | 0x5A<<7 | 0x43, + 64034 - 63785: jis0208<<14 | 0x5A<<7 | 0x4C, + 64035 - 63785: jis0208<<14 | 0x5A<<7 | 0x54, + 64036 - 63785: jis0208<<14 | 0x5A<<7 | 0x56, + 64037 - 63785: jis0208<<14 | 0x5A<<7 | 0x57, + 64038 - 63785: jis0208<<14 | 0x5A<<7 | 0x5A, + 64039 - 63785: jis0208<<14 | 0x5B<<7 | 0x18, + 64040 - 63785: jis0208<<14 | 0x5B<<7 | 0x1F, + 64041 - 63785: jis0208<<14 | 0x5B<<7 | 0x2F, + 64042 - 63785: jis0208<<14 | 0x5B<<7 | 0x3B, + 64043 - 63785: jis0208<<14 | 0x5B<<7 | 0x3C, + 64044 - 63785: jis0208<<14 | 0x5B<<7 | 0x3E, + 64045 - 63785: jis0208<<14 | 0x5B<<7 | 0x4B, +} + +const encode5Low, encode5High = 65281, 65510 + +var encode5 = [...]uint16{ + 65281 - 65281: jis0208<<14 | 0x00<<7 | 0x09, + 65282 - 65281: jis0208<<14 | 0x5B<<7 | 0x5D, + 65283 - 65281: jis0208<<14 | 0x00<<7 | 0x53, + 65284 - 65281: jis0208<<14 | 0x00<<7 | 0x4F, + 65285 - 65281: jis0208<<14 | 0x00<<7 | 0x52, + 65286 - 65281: jis0208<<14 | 0x00<<7 | 0x54, + 65287 - 65281: jis0208<<14 | 0x5B<<7 | 0x5C, + 65288 - 65281: jis0208<<14 | 0x00<<7 | 0x29, + 65289 - 65281: jis0208<<14 | 0x00<<7 | 0x2A, + 65290 - 65281: jis0208<<14 | 0x00<<7 | 0x55, + 65291 - 65281: jis0208<<14 | 0x00<<7 | 0x3B, + 65292 - 65281: jis0208<<14 | 0x00<<7 | 0x03, + 65293 - 65281: jis0208<<14 | 0x00<<7 | 0x3C, + 65294 - 65281: jis0208<<14 | 0x00<<7 | 0x04, + 65295 - 65281: jis0208<<14 | 0x00<<7 | 0x1E, + 65296 - 65281: jis0208<<14 | 0x02<<7 | 0x0F, + 65297 - 65281: jis0208<<14 | 0x02<<7 | 0x10, + 65298 - 65281: jis0208<<14 | 0x02<<7 | 0x11, + 65299 - 65281: jis0208<<14 | 0x02<<7 | 0x12, + 65300 - 65281: jis0208<<14 | 0x02<<7 | 0x13, + 65301 - 65281: jis0208<<14 | 0x02<<7 | 0x14, + 65302 - 65281: jis0208<<14 | 0x02<<7 | 0x15, + 65303 - 65281: jis0208<<14 | 0x02<<7 | 0x16, + 65304 - 65281: jis0208<<14 | 0x02<<7 | 0x17, + 65305 - 65281: jis0208<<14 | 0x02<<7 | 0x18, + 65306 - 65281: jis0208<<14 | 0x00<<7 | 0x06, + 65307 - 65281: jis0208<<14 | 0x00<<7 | 0x07, + 65308 - 65281: jis0208<<14 | 0x00<<7 | 0x42, + 65309 - 65281: jis0208<<14 | 0x00<<7 | 0x40, + 65310 - 65281: jis0208<<14 | 0x00<<7 | 0x43, + 65311 - 65281: jis0208<<14 | 0x00<<7 | 0x08, + 65312 - 65281: jis0208<<14 | 0x00<<7 | 0x56, + 65313 - 65281: jis0208<<14 | 0x02<<7 | 0x20, + 65314 - 65281: jis0208<<14 | 0x02<<7 | 0x21, + 65315 - 65281: jis0208<<14 | 0x02<<7 | 0x22, + 65316 - 65281: jis0208<<14 | 0x02<<7 | 0x23, + 65317 - 65281: jis0208<<14 | 0x02<<7 | 0x24, + 65318 - 65281: jis0208<<14 | 0x02<<7 | 0x25, + 65319 - 65281: jis0208<<14 | 0x02<<7 | 0x26, + 65320 - 65281: jis0208<<14 | 0x02<<7 | 0x27, + 65321 - 65281: jis0208<<14 | 0x02<<7 | 0x28, + 65322 - 65281: jis0208<<14 | 0x02<<7 | 0x29, + 65323 - 65281: jis0208<<14 | 0x02<<7 | 0x2A, + 65324 - 65281: jis0208<<14 | 0x02<<7 | 0x2B, + 65325 - 65281: jis0208<<14 | 0x02<<7 | 0x2C, + 65326 - 65281: jis0208<<14 | 0x02<<7 | 0x2D, + 65327 - 65281: jis0208<<14 | 0x02<<7 | 0x2E, + 65328 - 65281: jis0208<<14 | 0x02<<7 | 0x2F, + 65329 - 65281: jis0208<<14 | 0x02<<7 | 0x30, + 65330 - 65281: jis0208<<14 | 0x02<<7 | 0x31, + 65331 - 65281: jis0208<<14 | 0x02<<7 | 0x32, + 65332 - 65281: jis0208<<14 | 0x02<<7 | 0x33, + 65333 - 65281: jis0208<<14 | 0x02<<7 | 0x34, + 65334 - 65281: jis0208<<14 | 0x02<<7 | 0x35, + 65335 - 65281: jis0208<<14 | 0x02<<7 | 0x36, + 65336 - 65281: jis0208<<14 | 0x02<<7 | 0x37, + 65337 - 65281: jis0208<<14 | 0x02<<7 | 0x38, + 65338 - 65281: jis0208<<14 | 0x02<<7 | 0x39, + 65339 - 65281: jis0208<<14 | 0x00<<7 | 0x2D, + 65340 - 65281: jis0208<<14 | 0x00<<7 | 0x1F, + 65341 - 65281: jis0208<<14 | 0x00<<7 | 0x2E, + 65342 - 65281: jis0208<<14 | 0x00<<7 | 0x0F, + 65343 - 65281: jis0208<<14 | 0x00<<7 | 0x11, + 65344 - 65281: jis0208<<14 | 0x00<<7 | 0x0D, + 65345 - 65281: jis0208<<14 | 0x02<<7 | 0x40, + 65346 - 65281: jis0208<<14 | 0x02<<7 | 0x41, + 65347 - 65281: jis0208<<14 | 0x02<<7 | 0x42, + 65348 - 65281: jis0208<<14 | 0x02<<7 | 0x43, + 65349 - 65281: jis0208<<14 | 0x02<<7 | 0x44, + 65350 - 65281: jis0208<<14 | 0x02<<7 | 0x45, + 65351 - 65281: jis0208<<14 | 0x02<<7 | 0x46, + 65352 - 65281: jis0208<<14 | 0x02<<7 | 0x47, + 65353 - 65281: jis0208<<14 | 0x02<<7 | 0x48, + 65354 - 65281: jis0208<<14 | 0x02<<7 | 0x49, + 65355 - 65281: jis0208<<14 | 0x02<<7 | 0x4A, + 65356 - 65281: jis0208<<14 | 0x02<<7 | 0x4B, + 65357 - 65281: jis0208<<14 | 0x02<<7 | 0x4C, + 65358 - 65281: jis0208<<14 | 0x02<<7 | 0x4D, + 65359 - 65281: jis0208<<14 | 0x02<<7 | 0x4E, + 65360 - 65281: jis0208<<14 | 0x02<<7 | 0x4F, + 65361 - 65281: jis0208<<14 | 0x02<<7 | 0x50, + 65362 - 65281: jis0208<<14 | 0x02<<7 | 0x51, + 65363 - 65281: jis0208<<14 | 0x02<<7 | 0x52, + 65364 - 65281: jis0208<<14 | 0x02<<7 | 0x53, + 65365 - 65281: jis0208<<14 | 0x02<<7 | 0x54, + 65366 - 65281: jis0208<<14 | 0x02<<7 | 0x55, + 65367 - 65281: jis0208<<14 | 0x02<<7 | 0x56, + 65368 - 65281: jis0208<<14 | 0x02<<7 | 0x57, + 65369 - 65281: jis0208<<14 | 0x02<<7 | 0x58, + 65370 - 65281: jis0208<<14 | 0x02<<7 | 0x59, + 65371 - 65281: jis0208<<14 | 0x00<<7 | 0x2F, + 65372 - 65281: jis0208<<14 | 0x00<<7 | 0x22, + 65373 - 65281: jis0208<<14 | 0x00<<7 | 0x30, + 65374 - 65281: jis0208<<14 | 0x00<<7 | 0x20, + 65504 - 65281: jis0208<<14 | 0x00<<7 | 0x50, + 65505 - 65281: jis0208<<14 | 0x00<<7 | 0x51, + 65506 - 65281: jis0208<<14 | 0x01<<7 | 0x2B, + 65507 - 65281: jis0208<<14 | 0x00<<7 | 0x10, + 65508 - 65281: jis0208<<14 | 0x5B<<7 | 0x5B, + 65509 - 65281: jis0208<<14 | 0x00<<7 | 0x4E, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/euckr.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/euckr.go new file mode 100644 index 000000000000..034337f5df5c --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/euckr.go @@ -0,0 +1,177 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package korean + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{EUCKR} + +// EUCKR is the EUC-KR encoding, also known as Code Page 949. +var EUCKR encoding.Encoding = &eucKR + +var eucKR = internal.Encoding{ + &internal.SimpleEncoding{eucKRDecoder{}, eucKREncoder{}}, + "EUC-KR", + identifier.EUCKR, +} + +type eucKRDecoder struct{ transform.NopResetter } + +func (eucKRDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0x81 <= c0 && c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + break + } + c1 := src[nSrc+1] + size = 2 + if c0 < 0xc7 { + r = 178 * rune(c0-0x81) + switch { + case 0x41 <= c1 && c1 < 0x5b: + r += rune(c1) - (0x41 - 0*26) + case 0x61 <= c1 && c1 < 0x7b: + r += rune(c1) - (0x61 - 1*26) + case 0x81 <= c1 && c1 < 0xff: + r += rune(c1) - (0x81 - 2*26) + default: + goto decError + } + } else if 0xa1 <= c1 && c1 < 0xff { + r = 178*(0xc7-0x81) + rune(c0-0xc7)*94 + rune(c1-0xa1) + } else { + goto decError + } + if int(r) < len(decode) { + r = rune(decode[r]) + if r != 0 { + break + } + } + decError: + r = utf8.RuneError + if c1 < utf8.RuneSelf { + size = 1 + } + + default: + r, size = utf8.RuneError, 1 + break + } + + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type eucKREncoder struct{ transform.NopResetter } + +func (eucKREncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2 + } + case encode6Low <= r && r < encode6High: + if r = rune(encode6[r-encode6Low]); r != 0 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r >> 8) + dst[nDst+1] = uint8(r) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 7 { + panic("bad numEncodeTables") + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/tables.go new file mode 100644 index 000000000000..0480e85c4aa4 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/korean/tables.go @@ -0,0 +1,34152 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package korean provides Korean encodings such as EUC-KR. +package korean // import "golang.org/x/text/encoding/korean" + +// decode is the decoding table from EUC-KR code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt +var decode = [...]uint16{ + 0: 0xAC02, + 1: 0xAC03, + 2: 0xAC05, + 3: 0xAC06, + 4: 0xAC0B, + 5: 0xAC0C, + 6: 0xAC0D, + 7: 0xAC0E, + 8: 0xAC0F, + 9: 0xAC18, + 10: 0xAC1E, + 11: 0xAC1F, + 12: 0xAC21, + 13: 0xAC22, + 14: 0xAC23, + 15: 0xAC25, + 16: 0xAC26, + 17: 0xAC27, + 18: 0xAC28, + 19: 0xAC29, + 20: 0xAC2A, + 21: 0xAC2B, + 22: 0xAC2E, + 23: 0xAC32, + 24: 0xAC33, + 25: 0xAC34, + 26: 0xAC35, + 27: 0xAC36, + 28: 0xAC37, + 29: 0xAC3A, + 30: 0xAC3B, + 31: 0xAC3D, + 32: 0xAC3E, + 33: 0xAC3F, + 34: 0xAC41, + 35: 0xAC42, + 36: 0xAC43, + 37: 0xAC44, + 38: 0xAC45, + 39: 0xAC46, + 40: 0xAC47, + 41: 0xAC48, + 42: 0xAC49, + 43: 0xAC4A, + 44: 0xAC4C, + 45: 0xAC4E, + 46: 0xAC4F, + 47: 0xAC50, + 48: 0xAC51, + 49: 0xAC52, + 50: 0xAC53, + 51: 0xAC55, + 52: 0xAC56, + 53: 0xAC57, + 54: 0xAC59, + 55: 0xAC5A, + 56: 0xAC5B, + 57: 0xAC5D, + 58: 0xAC5E, + 59: 0xAC5F, + 60: 0xAC60, + 61: 0xAC61, + 62: 0xAC62, + 63: 0xAC63, + 64: 0xAC64, + 65: 0xAC65, + 66: 0xAC66, + 67: 0xAC67, + 68: 0xAC68, + 69: 0xAC69, + 70: 0xAC6A, + 71: 0xAC6B, + 72: 0xAC6C, + 73: 0xAC6D, + 74: 0xAC6E, + 75: 0xAC6F, + 76: 0xAC72, + 77: 0xAC73, + 78: 0xAC75, + 79: 0xAC76, + 80: 0xAC79, + 81: 0xAC7B, + 82: 0xAC7C, + 83: 0xAC7D, + 84: 0xAC7E, + 85: 0xAC7F, + 86: 0xAC82, + 87: 0xAC87, + 88: 0xAC88, + 89: 0xAC8D, + 90: 0xAC8E, + 91: 0xAC8F, + 92: 0xAC91, + 93: 0xAC92, + 94: 0xAC93, + 95: 0xAC95, + 96: 0xAC96, + 97: 0xAC97, + 98: 0xAC98, + 99: 0xAC99, + 100: 0xAC9A, + 101: 0xAC9B, + 102: 0xAC9E, + 103: 0xACA2, + 104: 0xACA3, + 105: 0xACA4, + 106: 0xACA5, + 107: 0xACA6, + 108: 0xACA7, + 109: 0xACAB, + 110: 0xACAD, + 111: 0xACAE, + 112: 0xACB1, + 113: 0xACB2, + 114: 0xACB3, + 115: 0xACB4, + 116: 0xACB5, + 117: 0xACB6, + 118: 0xACB7, + 119: 0xACBA, + 120: 0xACBE, + 121: 0xACBF, + 122: 0xACC0, + 123: 0xACC2, + 124: 0xACC3, + 125: 0xACC5, + 126: 0xACC6, + 127: 0xACC7, + 128: 0xACC9, + 129: 0xACCA, + 130: 0xACCB, + 131: 0xACCD, + 132: 0xACCE, + 133: 0xACCF, + 134: 0xACD0, + 135: 0xACD1, + 136: 0xACD2, + 137: 0xACD3, + 138: 0xACD4, + 139: 0xACD6, + 140: 0xACD8, + 141: 0xACD9, + 142: 0xACDA, + 143: 0xACDB, + 144: 0xACDC, + 145: 0xACDD, + 146: 0xACDE, + 147: 0xACDF, + 148: 0xACE2, + 149: 0xACE3, + 150: 0xACE5, + 151: 0xACE6, + 152: 0xACE9, + 153: 0xACEB, + 154: 0xACED, + 155: 0xACEE, + 156: 0xACF2, + 157: 0xACF4, + 158: 0xACF7, + 159: 0xACF8, + 160: 0xACF9, + 161: 0xACFA, + 162: 0xACFB, + 163: 0xACFE, + 164: 0xACFF, + 165: 0xAD01, + 166: 0xAD02, + 167: 0xAD03, + 168: 0xAD05, + 169: 0xAD07, + 170: 0xAD08, + 171: 0xAD09, + 172: 0xAD0A, + 173: 0xAD0B, + 174: 0xAD0E, + 175: 0xAD10, + 176: 0xAD12, + 177: 0xAD13, + 178: 0xAD14, + 179: 0xAD15, + 180: 0xAD16, + 181: 0xAD17, + 182: 0xAD19, + 183: 0xAD1A, + 184: 0xAD1B, + 185: 0xAD1D, + 186: 0xAD1E, + 187: 0xAD1F, + 188: 0xAD21, + 189: 0xAD22, + 190: 0xAD23, + 191: 0xAD24, + 192: 0xAD25, + 193: 0xAD26, + 194: 0xAD27, + 195: 0xAD28, + 196: 0xAD2A, + 197: 0xAD2B, + 198: 0xAD2E, + 199: 0xAD2F, + 200: 0xAD30, + 201: 0xAD31, + 202: 0xAD32, + 203: 0xAD33, + 204: 0xAD36, + 205: 0xAD37, + 206: 0xAD39, + 207: 0xAD3A, + 208: 0xAD3B, + 209: 0xAD3D, + 210: 0xAD3E, + 211: 0xAD3F, + 212: 0xAD40, + 213: 0xAD41, + 214: 0xAD42, + 215: 0xAD43, + 216: 0xAD46, + 217: 0xAD48, + 218: 0xAD4A, + 219: 0xAD4B, + 220: 0xAD4C, + 221: 0xAD4D, + 222: 0xAD4E, + 223: 0xAD4F, + 224: 0xAD51, + 225: 0xAD52, + 226: 0xAD53, + 227: 0xAD55, + 228: 0xAD56, + 229: 0xAD57, + 230: 0xAD59, + 231: 0xAD5A, + 232: 0xAD5B, + 233: 0xAD5C, + 234: 0xAD5D, + 235: 0xAD5E, + 236: 0xAD5F, + 237: 0xAD60, + 238: 0xAD62, + 239: 0xAD64, + 240: 0xAD65, + 241: 0xAD66, + 242: 0xAD67, + 243: 0xAD68, + 244: 0xAD69, + 245: 0xAD6A, + 246: 0xAD6B, + 247: 0xAD6E, + 248: 0xAD6F, + 249: 0xAD71, + 250: 0xAD72, + 251: 0xAD77, + 252: 0xAD78, + 253: 0xAD79, + 254: 0xAD7A, + 255: 0xAD7E, + 256: 0xAD80, + 257: 0xAD83, + 258: 0xAD84, + 259: 0xAD85, + 260: 0xAD86, + 261: 0xAD87, + 262: 0xAD8A, + 263: 0xAD8B, + 264: 0xAD8D, + 265: 0xAD8E, + 266: 0xAD8F, + 267: 0xAD91, + 268: 0xAD92, + 269: 0xAD93, + 270: 0xAD94, + 271: 0xAD95, + 272: 0xAD96, + 273: 0xAD97, + 274: 0xAD98, + 275: 0xAD99, + 276: 0xAD9A, + 277: 0xAD9B, + 278: 0xAD9E, + 279: 0xAD9F, + 280: 0xADA0, + 281: 0xADA1, + 282: 0xADA2, + 283: 0xADA3, + 284: 0xADA5, + 285: 0xADA6, + 286: 0xADA7, + 287: 0xADA8, + 288: 0xADA9, + 289: 0xADAA, + 290: 0xADAB, + 291: 0xADAC, + 292: 0xADAD, + 293: 0xADAE, + 294: 0xADAF, + 295: 0xADB0, + 296: 0xADB1, + 297: 0xADB2, + 298: 0xADB3, + 299: 0xADB4, + 300: 0xADB5, + 301: 0xADB6, + 302: 0xADB8, + 303: 0xADB9, + 304: 0xADBA, + 305: 0xADBB, + 306: 0xADBC, + 307: 0xADBD, + 308: 0xADBE, + 309: 0xADBF, + 310: 0xADC2, + 311: 0xADC3, + 312: 0xADC5, + 313: 0xADC6, + 314: 0xADC7, + 315: 0xADC9, + 316: 0xADCA, + 317: 0xADCB, + 318: 0xADCC, + 319: 0xADCD, + 320: 0xADCE, + 321: 0xADCF, + 322: 0xADD2, + 323: 0xADD4, + 324: 0xADD5, + 325: 0xADD6, + 326: 0xADD7, + 327: 0xADD8, + 328: 0xADD9, + 329: 0xADDA, + 330: 0xADDB, + 331: 0xADDD, + 332: 0xADDE, + 333: 0xADDF, + 334: 0xADE1, + 335: 0xADE2, + 336: 0xADE3, + 337: 0xADE5, + 338: 0xADE6, + 339: 0xADE7, + 340: 0xADE8, + 341: 0xADE9, + 342: 0xADEA, + 343: 0xADEB, + 344: 0xADEC, + 345: 0xADED, + 346: 0xADEE, + 347: 0xADEF, + 348: 0xADF0, + 349: 0xADF1, + 350: 0xADF2, + 351: 0xADF3, + 352: 0xADF4, + 353: 0xADF5, + 354: 0xADF6, + 355: 0xADF7, + 356: 0xADFA, + 357: 0xADFB, + 358: 0xADFD, + 359: 0xADFE, + 360: 0xAE02, + 361: 0xAE03, + 362: 0xAE04, + 363: 0xAE05, + 364: 0xAE06, + 365: 0xAE07, + 366: 0xAE0A, + 367: 0xAE0C, + 368: 0xAE0E, + 369: 0xAE0F, + 370: 0xAE10, + 371: 0xAE11, + 372: 0xAE12, + 373: 0xAE13, + 374: 0xAE15, + 375: 0xAE16, + 376: 0xAE17, + 377: 0xAE18, + 378: 0xAE19, + 379: 0xAE1A, + 380: 0xAE1B, + 381: 0xAE1C, + 382: 0xAE1D, + 383: 0xAE1E, + 384: 0xAE1F, + 385: 0xAE20, + 386: 0xAE21, + 387: 0xAE22, + 388: 0xAE23, + 389: 0xAE24, + 390: 0xAE25, + 391: 0xAE26, + 392: 0xAE27, + 393: 0xAE28, + 394: 0xAE29, + 395: 0xAE2A, + 396: 0xAE2B, + 397: 0xAE2C, + 398: 0xAE2D, + 399: 0xAE2E, + 400: 0xAE2F, + 401: 0xAE32, + 402: 0xAE33, + 403: 0xAE35, + 404: 0xAE36, + 405: 0xAE39, + 406: 0xAE3B, + 407: 0xAE3C, + 408: 0xAE3D, + 409: 0xAE3E, + 410: 0xAE3F, + 411: 0xAE42, + 412: 0xAE44, + 413: 0xAE47, + 414: 0xAE48, + 415: 0xAE49, + 416: 0xAE4B, + 417: 0xAE4F, + 418: 0xAE51, + 419: 0xAE52, + 420: 0xAE53, + 421: 0xAE55, + 422: 0xAE57, + 423: 0xAE58, + 424: 0xAE59, + 425: 0xAE5A, + 426: 0xAE5B, + 427: 0xAE5E, + 428: 0xAE62, + 429: 0xAE63, + 430: 0xAE64, + 431: 0xAE66, + 432: 0xAE67, + 433: 0xAE6A, + 434: 0xAE6B, + 435: 0xAE6D, + 436: 0xAE6E, + 437: 0xAE6F, + 438: 0xAE71, + 439: 0xAE72, + 440: 0xAE73, + 441: 0xAE74, + 442: 0xAE75, + 443: 0xAE76, + 444: 0xAE77, + 445: 0xAE7A, + 446: 0xAE7E, + 447: 0xAE7F, + 448: 0xAE80, + 449: 0xAE81, + 450: 0xAE82, + 451: 0xAE83, + 452: 0xAE86, + 453: 0xAE87, + 454: 0xAE88, + 455: 0xAE89, + 456: 0xAE8A, + 457: 0xAE8B, + 458: 0xAE8D, + 459: 0xAE8E, + 460: 0xAE8F, + 461: 0xAE90, + 462: 0xAE91, + 463: 0xAE92, + 464: 0xAE93, + 465: 0xAE94, + 466: 0xAE95, + 467: 0xAE96, + 468: 0xAE97, + 469: 0xAE98, + 470: 0xAE99, + 471: 0xAE9A, + 472: 0xAE9B, + 473: 0xAE9C, + 474: 0xAE9D, + 475: 0xAE9E, + 476: 0xAE9F, + 477: 0xAEA0, + 478: 0xAEA1, + 479: 0xAEA2, + 480: 0xAEA3, + 481: 0xAEA4, + 482: 0xAEA5, + 483: 0xAEA6, + 484: 0xAEA7, + 485: 0xAEA8, + 486: 0xAEA9, + 487: 0xAEAA, + 488: 0xAEAB, + 489: 0xAEAC, + 490: 0xAEAD, + 491: 0xAEAE, + 492: 0xAEAF, + 493: 0xAEB0, + 494: 0xAEB1, + 495: 0xAEB2, + 496: 0xAEB3, + 497: 0xAEB4, + 498: 0xAEB5, + 499: 0xAEB6, + 500: 0xAEB7, + 501: 0xAEB8, + 502: 0xAEB9, + 503: 0xAEBA, + 504: 0xAEBB, + 505: 0xAEBF, + 506: 0xAEC1, + 507: 0xAEC2, + 508: 0xAEC3, + 509: 0xAEC5, + 510: 0xAEC6, + 511: 0xAEC7, + 512: 0xAEC8, + 513: 0xAEC9, + 514: 0xAECA, + 515: 0xAECB, + 516: 0xAECE, + 517: 0xAED2, + 518: 0xAED3, + 519: 0xAED4, + 520: 0xAED5, + 521: 0xAED6, + 522: 0xAED7, + 523: 0xAEDA, + 524: 0xAEDB, + 525: 0xAEDD, + 526: 0xAEDE, + 527: 0xAEDF, + 528: 0xAEE0, + 529: 0xAEE1, + 530: 0xAEE2, + 531: 0xAEE3, + 532: 0xAEE4, + 533: 0xAEE5, + 534: 0xAEE6, + 535: 0xAEE7, + 536: 0xAEE9, + 537: 0xAEEA, + 538: 0xAEEC, + 539: 0xAEEE, + 540: 0xAEEF, + 541: 0xAEF0, + 542: 0xAEF1, + 543: 0xAEF2, + 544: 0xAEF3, + 545: 0xAEF5, + 546: 0xAEF6, + 547: 0xAEF7, + 548: 0xAEF9, + 549: 0xAEFA, + 550: 0xAEFB, + 551: 0xAEFD, + 552: 0xAEFE, + 553: 0xAEFF, + 554: 0xAF00, + 555: 0xAF01, + 556: 0xAF02, + 557: 0xAF03, + 558: 0xAF04, + 559: 0xAF05, + 560: 0xAF06, + 561: 0xAF09, + 562: 0xAF0A, + 563: 0xAF0B, + 564: 0xAF0C, + 565: 0xAF0E, + 566: 0xAF0F, + 567: 0xAF11, + 568: 0xAF12, + 569: 0xAF13, + 570: 0xAF14, + 571: 0xAF15, + 572: 0xAF16, + 573: 0xAF17, + 574: 0xAF18, + 575: 0xAF19, + 576: 0xAF1A, + 577: 0xAF1B, + 578: 0xAF1C, + 579: 0xAF1D, + 580: 0xAF1E, + 581: 0xAF1F, + 582: 0xAF20, + 583: 0xAF21, + 584: 0xAF22, + 585: 0xAF23, + 586: 0xAF24, + 587: 0xAF25, + 588: 0xAF26, + 589: 0xAF27, + 590: 0xAF28, + 591: 0xAF29, + 592: 0xAF2A, + 593: 0xAF2B, + 594: 0xAF2E, + 595: 0xAF2F, + 596: 0xAF31, + 597: 0xAF33, + 598: 0xAF35, + 599: 0xAF36, + 600: 0xAF37, + 601: 0xAF38, + 602: 0xAF39, + 603: 0xAF3A, + 604: 0xAF3B, + 605: 0xAF3E, + 606: 0xAF40, + 607: 0xAF44, + 608: 0xAF45, + 609: 0xAF46, + 610: 0xAF47, + 611: 0xAF4A, + 612: 0xAF4B, + 613: 0xAF4C, + 614: 0xAF4D, + 615: 0xAF4E, + 616: 0xAF4F, + 617: 0xAF51, + 618: 0xAF52, + 619: 0xAF53, + 620: 0xAF54, + 621: 0xAF55, + 622: 0xAF56, + 623: 0xAF57, + 624: 0xAF58, + 625: 0xAF59, + 626: 0xAF5A, + 627: 0xAF5B, + 628: 0xAF5E, + 629: 0xAF5F, + 630: 0xAF60, + 631: 0xAF61, + 632: 0xAF62, + 633: 0xAF63, + 634: 0xAF66, + 635: 0xAF67, + 636: 0xAF68, + 637: 0xAF69, + 638: 0xAF6A, + 639: 0xAF6B, + 640: 0xAF6C, + 641: 0xAF6D, + 642: 0xAF6E, + 643: 0xAF6F, + 644: 0xAF70, + 645: 0xAF71, + 646: 0xAF72, + 647: 0xAF73, + 648: 0xAF74, + 649: 0xAF75, + 650: 0xAF76, + 651: 0xAF77, + 652: 0xAF78, + 653: 0xAF7A, + 654: 0xAF7B, + 655: 0xAF7C, + 656: 0xAF7D, + 657: 0xAF7E, + 658: 0xAF7F, + 659: 0xAF81, + 660: 0xAF82, + 661: 0xAF83, + 662: 0xAF85, + 663: 0xAF86, + 664: 0xAF87, + 665: 0xAF89, + 666: 0xAF8A, + 667: 0xAF8B, + 668: 0xAF8C, + 669: 0xAF8D, + 670: 0xAF8E, + 671: 0xAF8F, + 672: 0xAF92, + 673: 0xAF93, + 674: 0xAF94, + 675: 0xAF96, + 676: 0xAF97, + 677: 0xAF98, + 678: 0xAF99, + 679: 0xAF9A, + 680: 0xAF9B, + 681: 0xAF9D, + 682: 0xAF9E, + 683: 0xAF9F, + 684: 0xAFA0, + 685: 0xAFA1, + 686: 0xAFA2, + 687: 0xAFA3, + 688: 0xAFA4, + 689: 0xAFA5, + 690: 0xAFA6, + 691: 0xAFA7, + 692: 0xAFA8, + 693: 0xAFA9, + 694: 0xAFAA, + 695: 0xAFAB, + 696: 0xAFAC, + 697: 0xAFAD, + 698: 0xAFAE, + 699: 0xAFAF, + 700: 0xAFB0, + 701: 0xAFB1, + 702: 0xAFB2, + 703: 0xAFB3, + 704: 0xAFB4, + 705: 0xAFB5, + 706: 0xAFB6, + 707: 0xAFB7, + 708: 0xAFBA, + 709: 0xAFBB, + 710: 0xAFBD, + 711: 0xAFBE, + 712: 0xAFBF, + 713: 0xAFC1, + 714: 0xAFC2, + 715: 0xAFC3, + 716: 0xAFC4, + 717: 0xAFC5, + 718: 0xAFC6, + 719: 0xAFCA, + 720: 0xAFCC, + 721: 0xAFCF, + 722: 0xAFD0, + 723: 0xAFD1, + 724: 0xAFD2, + 725: 0xAFD3, + 726: 0xAFD5, + 727: 0xAFD6, + 728: 0xAFD7, + 729: 0xAFD8, + 730: 0xAFD9, + 731: 0xAFDA, + 732: 0xAFDB, + 733: 0xAFDD, + 734: 0xAFDE, + 735: 0xAFDF, + 736: 0xAFE0, + 737: 0xAFE1, + 738: 0xAFE2, + 739: 0xAFE3, + 740: 0xAFE4, + 741: 0xAFE5, + 742: 0xAFE6, + 743: 0xAFE7, + 744: 0xAFEA, + 745: 0xAFEB, + 746: 0xAFEC, + 747: 0xAFED, + 748: 0xAFEE, + 749: 0xAFEF, + 750: 0xAFF2, + 751: 0xAFF3, + 752: 0xAFF5, + 753: 0xAFF6, + 754: 0xAFF7, + 755: 0xAFF9, + 756: 0xAFFA, + 757: 0xAFFB, + 758: 0xAFFC, + 759: 0xAFFD, + 760: 0xAFFE, + 761: 0xAFFF, + 762: 0xB002, + 763: 0xB003, + 764: 0xB005, + 765: 0xB006, + 766: 0xB007, + 767: 0xB008, + 768: 0xB009, + 769: 0xB00A, + 770: 0xB00B, + 771: 0xB00D, + 772: 0xB00E, + 773: 0xB00F, + 774: 0xB011, + 775: 0xB012, + 776: 0xB013, + 777: 0xB015, + 778: 0xB016, + 779: 0xB017, + 780: 0xB018, + 781: 0xB019, + 782: 0xB01A, + 783: 0xB01B, + 784: 0xB01E, + 785: 0xB01F, + 786: 0xB020, + 787: 0xB021, + 788: 0xB022, + 789: 0xB023, + 790: 0xB024, + 791: 0xB025, + 792: 0xB026, + 793: 0xB027, + 794: 0xB029, + 795: 0xB02A, + 796: 0xB02B, + 797: 0xB02C, + 798: 0xB02D, + 799: 0xB02E, + 800: 0xB02F, + 801: 0xB030, + 802: 0xB031, + 803: 0xB032, + 804: 0xB033, + 805: 0xB034, + 806: 0xB035, + 807: 0xB036, + 808: 0xB037, + 809: 0xB038, + 810: 0xB039, + 811: 0xB03A, + 812: 0xB03B, + 813: 0xB03C, + 814: 0xB03D, + 815: 0xB03E, + 816: 0xB03F, + 817: 0xB040, + 818: 0xB041, + 819: 0xB042, + 820: 0xB043, + 821: 0xB046, + 822: 0xB047, + 823: 0xB049, + 824: 0xB04B, + 825: 0xB04D, + 826: 0xB04F, + 827: 0xB050, + 828: 0xB051, + 829: 0xB052, + 830: 0xB056, + 831: 0xB058, + 832: 0xB05A, + 833: 0xB05B, + 834: 0xB05C, + 835: 0xB05E, + 836: 0xB05F, + 837: 0xB060, + 838: 0xB061, + 839: 0xB062, + 840: 0xB063, + 841: 0xB064, + 842: 0xB065, + 843: 0xB066, + 844: 0xB067, + 845: 0xB068, + 846: 0xB069, + 847: 0xB06A, + 848: 0xB06B, + 849: 0xB06C, + 850: 0xB06D, + 851: 0xB06E, + 852: 0xB06F, + 853: 0xB070, + 854: 0xB071, + 855: 0xB072, + 856: 0xB073, + 857: 0xB074, + 858: 0xB075, + 859: 0xB076, + 860: 0xB077, + 861: 0xB078, + 862: 0xB079, + 863: 0xB07A, + 864: 0xB07B, + 865: 0xB07E, + 866: 0xB07F, + 867: 0xB081, + 868: 0xB082, + 869: 0xB083, + 870: 0xB085, + 871: 0xB086, + 872: 0xB087, + 873: 0xB088, + 874: 0xB089, + 875: 0xB08A, + 876: 0xB08B, + 877: 0xB08E, + 878: 0xB090, + 879: 0xB092, + 880: 0xB093, + 881: 0xB094, + 882: 0xB095, + 883: 0xB096, + 884: 0xB097, + 885: 0xB09B, + 886: 0xB09D, + 887: 0xB09E, + 888: 0xB0A3, + 889: 0xB0A4, + 890: 0xB0A5, + 891: 0xB0A6, + 892: 0xB0A7, + 893: 0xB0AA, + 894: 0xB0B0, + 895: 0xB0B2, + 896: 0xB0B6, + 897: 0xB0B7, + 898: 0xB0B9, + 899: 0xB0BA, + 900: 0xB0BB, + 901: 0xB0BD, + 902: 0xB0BE, + 903: 0xB0BF, + 904: 0xB0C0, + 905: 0xB0C1, + 906: 0xB0C2, + 907: 0xB0C3, + 908: 0xB0C6, + 909: 0xB0CA, + 910: 0xB0CB, + 911: 0xB0CC, + 912: 0xB0CD, + 913: 0xB0CE, + 914: 0xB0CF, + 915: 0xB0D2, + 916: 0xB0D3, + 917: 0xB0D5, + 918: 0xB0D6, + 919: 0xB0D7, + 920: 0xB0D9, + 921: 0xB0DA, + 922: 0xB0DB, + 923: 0xB0DC, + 924: 0xB0DD, + 925: 0xB0DE, + 926: 0xB0DF, + 927: 0xB0E1, + 928: 0xB0E2, + 929: 0xB0E3, + 930: 0xB0E4, + 931: 0xB0E6, + 932: 0xB0E7, + 933: 0xB0E8, + 934: 0xB0E9, + 935: 0xB0EA, + 936: 0xB0EB, + 937: 0xB0EC, + 938: 0xB0ED, + 939: 0xB0EE, + 940: 0xB0EF, + 941: 0xB0F0, + 942: 0xB0F1, + 943: 0xB0F2, + 944: 0xB0F3, + 945: 0xB0F4, + 946: 0xB0F5, + 947: 0xB0F6, + 948: 0xB0F7, + 949: 0xB0F8, + 950: 0xB0F9, + 951: 0xB0FA, + 952: 0xB0FB, + 953: 0xB0FC, + 954: 0xB0FD, + 955: 0xB0FE, + 956: 0xB0FF, + 957: 0xB100, + 958: 0xB101, + 959: 0xB102, + 960: 0xB103, + 961: 0xB104, + 962: 0xB105, + 963: 0xB106, + 964: 0xB107, + 965: 0xB10A, + 966: 0xB10D, + 967: 0xB10E, + 968: 0xB10F, + 969: 0xB111, + 970: 0xB114, + 971: 0xB115, + 972: 0xB116, + 973: 0xB117, + 974: 0xB11A, + 975: 0xB11E, + 976: 0xB11F, + 977: 0xB120, + 978: 0xB121, + 979: 0xB122, + 980: 0xB126, + 981: 0xB127, + 982: 0xB129, + 983: 0xB12A, + 984: 0xB12B, + 985: 0xB12D, + 986: 0xB12E, + 987: 0xB12F, + 988: 0xB130, + 989: 0xB131, + 990: 0xB132, + 991: 0xB133, + 992: 0xB136, + 993: 0xB13A, + 994: 0xB13B, + 995: 0xB13C, + 996: 0xB13D, + 997: 0xB13E, + 998: 0xB13F, + 999: 0xB142, + 1000: 0xB143, + 1001: 0xB145, + 1002: 0xB146, + 1003: 0xB147, + 1004: 0xB149, + 1005: 0xB14A, + 1006: 0xB14B, + 1007: 0xB14C, + 1008: 0xB14D, + 1009: 0xB14E, + 1010: 0xB14F, + 1011: 0xB152, + 1012: 0xB153, + 1013: 0xB156, + 1014: 0xB157, + 1015: 0xB159, + 1016: 0xB15A, + 1017: 0xB15B, + 1018: 0xB15D, + 1019: 0xB15E, + 1020: 0xB15F, + 1021: 0xB161, + 1022: 0xB162, + 1023: 0xB163, + 1024: 0xB164, + 1025: 0xB165, + 1026: 0xB166, + 1027: 0xB167, + 1028: 0xB168, + 1029: 0xB169, + 1030: 0xB16A, + 1031: 0xB16B, + 1032: 0xB16C, + 1033: 0xB16D, + 1034: 0xB16E, + 1035: 0xB16F, + 1036: 0xB170, + 1037: 0xB171, + 1038: 0xB172, + 1039: 0xB173, + 1040: 0xB174, + 1041: 0xB175, + 1042: 0xB176, + 1043: 0xB177, + 1044: 0xB17A, + 1045: 0xB17B, + 1046: 0xB17D, + 1047: 0xB17E, + 1048: 0xB17F, + 1049: 0xB181, + 1050: 0xB183, + 1051: 0xB184, + 1052: 0xB185, + 1053: 0xB186, + 1054: 0xB187, + 1055: 0xB18A, + 1056: 0xB18C, + 1057: 0xB18E, + 1058: 0xB18F, + 1059: 0xB190, + 1060: 0xB191, + 1061: 0xB195, + 1062: 0xB196, + 1063: 0xB197, + 1064: 0xB199, + 1065: 0xB19A, + 1066: 0xB19B, + 1067: 0xB19D, + 1068: 0xB19E, + 1069: 0xB19F, + 1070: 0xB1A0, + 1071: 0xB1A1, + 1072: 0xB1A2, + 1073: 0xB1A3, + 1074: 0xB1A4, + 1075: 0xB1A5, + 1076: 0xB1A6, + 1077: 0xB1A7, + 1078: 0xB1A9, + 1079: 0xB1AA, + 1080: 0xB1AB, + 1081: 0xB1AC, + 1082: 0xB1AD, + 1083: 0xB1AE, + 1084: 0xB1AF, + 1085: 0xB1B0, + 1086: 0xB1B1, + 1087: 0xB1B2, + 1088: 0xB1B3, + 1089: 0xB1B4, + 1090: 0xB1B5, + 1091: 0xB1B6, + 1092: 0xB1B7, + 1093: 0xB1B8, + 1094: 0xB1B9, + 1095: 0xB1BA, + 1096: 0xB1BB, + 1097: 0xB1BC, + 1098: 0xB1BD, + 1099: 0xB1BE, + 1100: 0xB1BF, + 1101: 0xB1C0, + 1102: 0xB1C1, + 1103: 0xB1C2, + 1104: 0xB1C3, + 1105: 0xB1C4, + 1106: 0xB1C5, + 1107: 0xB1C6, + 1108: 0xB1C7, + 1109: 0xB1C8, + 1110: 0xB1C9, + 1111: 0xB1CA, + 1112: 0xB1CB, + 1113: 0xB1CD, + 1114: 0xB1CE, + 1115: 0xB1CF, + 1116: 0xB1D1, + 1117: 0xB1D2, + 1118: 0xB1D3, + 1119: 0xB1D5, + 1120: 0xB1D6, + 1121: 0xB1D7, + 1122: 0xB1D8, + 1123: 0xB1D9, + 1124: 0xB1DA, + 1125: 0xB1DB, + 1126: 0xB1DE, + 1127: 0xB1E0, + 1128: 0xB1E1, + 1129: 0xB1E2, + 1130: 0xB1E3, + 1131: 0xB1E4, + 1132: 0xB1E5, + 1133: 0xB1E6, + 1134: 0xB1E7, + 1135: 0xB1EA, + 1136: 0xB1EB, + 1137: 0xB1ED, + 1138: 0xB1EE, + 1139: 0xB1EF, + 1140: 0xB1F1, + 1141: 0xB1F2, + 1142: 0xB1F3, + 1143: 0xB1F4, + 1144: 0xB1F5, + 1145: 0xB1F6, + 1146: 0xB1F7, + 1147: 0xB1F8, + 1148: 0xB1FA, + 1149: 0xB1FC, + 1150: 0xB1FE, + 1151: 0xB1FF, + 1152: 0xB200, + 1153: 0xB201, + 1154: 0xB202, + 1155: 0xB203, + 1156: 0xB206, + 1157: 0xB207, + 1158: 0xB209, + 1159: 0xB20A, + 1160: 0xB20D, + 1161: 0xB20E, + 1162: 0xB20F, + 1163: 0xB210, + 1164: 0xB211, + 1165: 0xB212, + 1166: 0xB213, + 1167: 0xB216, + 1168: 0xB218, + 1169: 0xB21A, + 1170: 0xB21B, + 1171: 0xB21C, + 1172: 0xB21D, + 1173: 0xB21E, + 1174: 0xB21F, + 1175: 0xB221, + 1176: 0xB222, + 1177: 0xB223, + 1178: 0xB224, + 1179: 0xB225, + 1180: 0xB226, + 1181: 0xB227, + 1182: 0xB228, + 1183: 0xB229, + 1184: 0xB22A, + 1185: 0xB22B, + 1186: 0xB22C, + 1187: 0xB22D, + 1188: 0xB22E, + 1189: 0xB22F, + 1190: 0xB230, + 1191: 0xB231, + 1192: 0xB232, + 1193: 0xB233, + 1194: 0xB235, + 1195: 0xB236, + 1196: 0xB237, + 1197: 0xB238, + 1198: 0xB239, + 1199: 0xB23A, + 1200: 0xB23B, + 1201: 0xB23D, + 1202: 0xB23E, + 1203: 0xB23F, + 1204: 0xB240, + 1205: 0xB241, + 1206: 0xB242, + 1207: 0xB243, + 1208: 0xB244, + 1209: 0xB245, + 1210: 0xB246, + 1211: 0xB247, + 1212: 0xB248, + 1213: 0xB249, + 1214: 0xB24A, + 1215: 0xB24B, + 1216: 0xB24C, + 1217: 0xB24D, + 1218: 0xB24E, + 1219: 0xB24F, + 1220: 0xB250, + 1221: 0xB251, + 1222: 0xB252, + 1223: 0xB253, + 1224: 0xB254, + 1225: 0xB255, + 1226: 0xB256, + 1227: 0xB257, + 1228: 0xB259, + 1229: 0xB25A, + 1230: 0xB25B, + 1231: 0xB25D, + 1232: 0xB25E, + 1233: 0xB25F, + 1234: 0xB261, + 1235: 0xB262, + 1236: 0xB263, + 1237: 0xB264, + 1238: 0xB265, + 1239: 0xB266, + 1240: 0xB267, + 1241: 0xB26A, + 1242: 0xB26B, + 1243: 0xB26C, + 1244: 0xB26D, + 1245: 0xB26E, + 1246: 0xB26F, + 1247: 0xB270, + 1248: 0xB271, + 1249: 0xB272, + 1250: 0xB273, + 1251: 0xB276, + 1252: 0xB277, + 1253: 0xB278, + 1254: 0xB279, + 1255: 0xB27A, + 1256: 0xB27B, + 1257: 0xB27D, + 1258: 0xB27E, + 1259: 0xB27F, + 1260: 0xB280, + 1261: 0xB281, + 1262: 0xB282, + 1263: 0xB283, + 1264: 0xB286, + 1265: 0xB287, + 1266: 0xB288, + 1267: 0xB28A, + 1268: 0xB28B, + 1269: 0xB28C, + 1270: 0xB28D, + 1271: 0xB28E, + 1272: 0xB28F, + 1273: 0xB292, + 1274: 0xB293, + 1275: 0xB295, + 1276: 0xB296, + 1277: 0xB297, + 1278: 0xB29B, + 1279: 0xB29C, + 1280: 0xB29D, + 1281: 0xB29E, + 1282: 0xB29F, + 1283: 0xB2A2, + 1284: 0xB2A4, + 1285: 0xB2A7, + 1286: 0xB2A8, + 1287: 0xB2A9, + 1288: 0xB2AB, + 1289: 0xB2AD, + 1290: 0xB2AE, + 1291: 0xB2AF, + 1292: 0xB2B1, + 1293: 0xB2B2, + 1294: 0xB2B3, + 1295: 0xB2B5, + 1296: 0xB2B6, + 1297: 0xB2B7, + 1298: 0xB2B8, + 1299: 0xB2B9, + 1300: 0xB2BA, + 1301: 0xB2BB, + 1302: 0xB2BC, + 1303: 0xB2BD, + 1304: 0xB2BE, + 1305: 0xB2BF, + 1306: 0xB2C0, + 1307: 0xB2C1, + 1308: 0xB2C2, + 1309: 0xB2C3, + 1310: 0xB2C4, + 1311: 0xB2C5, + 1312: 0xB2C6, + 1313: 0xB2C7, + 1314: 0xB2CA, + 1315: 0xB2CB, + 1316: 0xB2CD, + 1317: 0xB2CE, + 1318: 0xB2CF, + 1319: 0xB2D1, + 1320: 0xB2D3, + 1321: 0xB2D4, + 1322: 0xB2D5, + 1323: 0xB2D6, + 1324: 0xB2D7, + 1325: 0xB2DA, + 1326: 0xB2DC, + 1327: 0xB2DE, + 1328: 0xB2DF, + 1329: 0xB2E0, + 1330: 0xB2E1, + 1331: 0xB2E3, + 1332: 0xB2E7, + 1333: 0xB2E9, + 1334: 0xB2EA, + 1335: 0xB2F0, + 1336: 0xB2F1, + 1337: 0xB2F2, + 1338: 0xB2F6, + 1339: 0xB2FC, + 1340: 0xB2FD, + 1341: 0xB2FE, + 1342: 0xB302, + 1343: 0xB303, + 1344: 0xB305, + 1345: 0xB306, + 1346: 0xB307, + 1347: 0xB309, + 1348: 0xB30A, + 1349: 0xB30B, + 1350: 0xB30C, + 1351: 0xB30D, + 1352: 0xB30E, + 1353: 0xB30F, + 1354: 0xB312, + 1355: 0xB316, + 1356: 0xB317, + 1357: 0xB318, + 1358: 0xB319, + 1359: 0xB31A, + 1360: 0xB31B, + 1361: 0xB31D, + 1362: 0xB31E, + 1363: 0xB31F, + 1364: 0xB320, + 1365: 0xB321, + 1366: 0xB322, + 1367: 0xB323, + 1368: 0xB324, + 1369: 0xB325, + 1370: 0xB326, + 1371: 0xB327, + 1372: 0xB328, + 1373: 0xB329, + 1374: 0xB32A, + 1375: 0xB32B, + 1376: 0xB32C, + 1377: 0xB32D, + 1378: 0xB32E, + 1379: 0xB32F, + 1380: 0xB330, + 1381: 0xB331, + 1382: 0xB332, + 1383: 0xB333, + 1384: 0xB334, + 1385: 0xB335, + 1386: 0xB336, + 1387: 0xB337, + 1388: 0xB338, + 1389: 0xB339, + 1390: 0xB33A, + 1391: 0xB33B, + 1392: 0xB33C, + 1393: 0xB33D, + 1394: 0xB33E, + 1395: 0xB33F, + 1396: 0xB340, + 1397: 0xB341, + 1398: 0xB342, + 1399: 0xB343, + 1400: 0xB344, + 1401: 0xB345, + 1402: 0xB346, + 1403: 0xB347, + 1404: 0xB348, + 1405: 0xB349, + 1406: 0xB34A, + 1407: 0xB34B, + 1408: 0xB34C, + 1409: 0xB34D, + 1410: 0xB34E, + 1411: 0xB34F, + 1412: 0xB350, + 1413: 0xB351, + 1414: 0xB352, + 1415: 0xB353, + 1416: 0xB357, + 1417: 0xB359, + 1418: 0xB35A, + 1419: 0xB35D, + 1420: 0xB360, + 1421: 0xB361, + 1422: 0xB362, + 1423: 0xB363, + 1424: 0xB366, + 1425: 0xB368, + 1426: 0xB36A, + 1427: 0xB36C, + 1428: 0xB36D, + 1429: 0xB36F, + 1430: 0xB372, + 1431: 0xB373, + 1432: 0xB375, + 1433: 0xB376, + 1434: 0xB377, + 1435: 0xB379, + 1436: 0xB37A, + 1437: 0xB37B, + 1438: 0xB37C, + 1439: 0xB37D, + 1440: 0xB37E, + 1441: 0xB37F, + 1442: 0xB382, + 1443: 0xB386, + 1444: 0xB387, + 1445: 0xB388, + 1446: 0xB389, + 1447: 0xB38A, + 1448: 0xB38B, + 1449: 0xB38D, + 1450: 0xB38E, + 1451: 0xB38F, + 1452: 0xB391, + 1453: 0xB392, + 1454: 0xB393, + 1455: 0xB395, + 1456: 0xB396, + 1457: 0xB397, + 1458: 0xB398, + 1459: 0xB399, + 1460: 0xB39A, + 1461: 0xB39B, + 1462: 0xB39C, + 1463: 0xB39D, + 1464: 0xB39E, + 1465: 0xB39F, + 1466: 0xB3A2, + 1467: 0xB3A3, + 1468: 0xB3A4, + 1469: 0xB3A5, + 1470: 0xB3A6, + 1471: 0xB3A7, + 1472: 0xB3A9, + 1473: 0xB3AA, + 1474: 0xB3AB, + 1475: 0xB3AD, + 1476: 0xB3AE, + 1477: 0xB3AF, + 1478: 0xB3B0, + 1479: 0xB3B1, + 1480: 0xB3B2, + 1481: 0xB3B3, + 1482: 0xB3B4, + 1483: 0xB3B5, + 1484: 0xB3B6, + 1485: 0xB3B7, + 1486: 0xB3B8, + 1487: 0xB3B9, + 1488: 0xB3BA, + 1489: 0xB3BB, + 1490: 0xB3BC, + 1491: 0xB3BD, + 1492: 0xB3BE, + 1493: 0xB3BF, + 1494: 0xB3C0, + 1495: 0xB3C1, + 1496: 0xB3C2, + 1497: 0xB3C3, + 1498: 0xB3C6, + 1499: 0xB3C7, + 1500: 0xB3C9, + 1501: 0xB3CA, + 1502: 0xB3CD, + 1503: 0xB3CF, + 1504: 0xB3D1, + 1505: 0xB3D2, + 1506: 0xB3D3, + 1507: 0xB3D6, + 1508: 0xB3D8, + 1509: 0xB3DA, + 1510: 0xB3DC, + 1511: 0xB3DE, + 1512: 0xB3DF, + 1513: 0xB3E1, + 1514: 0xB3E2, + 1515: 0xB3E3, + 1516: 0xB3E5, + 1517: 0xB3E6, + 1518: 0xB3E7, + 1519: 0xB3E9, + 1520: 0xB3EA, + 1521: 0xB3EB, + 1522: 0xB3EC, + 1523: 0xB3ED, + 1524: 0xB3EE, + 1525: 0xB3EF, + 1526: 0xB3F0, + 1527: 0xB3F1, + 1528: 0xB3F2, + 1529: 0xB3F3, + 1530: 0xB3F4, + 1531: 0xB3F5, + 1532: 0xB3F6, + 1533: 0xB3F7, + 1534: 0xB3F8, + 1535: 0xB3F9, + 1536: 0xB3FA, + 1537: 0xB3FB, + 1538: 0xB3FD, + 1539: 0xB3FE, + 1540: 0xB3FF, + 1541: 0xB400, + 1542: 0xB401, + 1543: 0xB402, + 1544: 0xB403, + 1545: 0xB404, + 1546: 0xB405, + 1547: 0xB406, + 1548: 0xB407, + 1549: 0xB408, + 1550: 0xB409, + 1551: 0xB40A, + 1552: 0xB40B, + 1553: 0xB40C, + 1554: 0xB40D, + 1555: 0xB40E, + 1556: 0xB40F, + 1557: 0xB411, + 1558: 0xB412, + 1559: 0xB413, + 1560: 0xB414, + 1561: 0xB415, + 1562: 0xB416, + 1563: 0xB417, + 1564: 0xB419, + 1565: 0xB41A, + 1566: 0xB41B, + 1567: 0xB41D, + 1568: 0xB41E, + 1569: 0xB41F, + 1570: 0xB421, + 1571: 0xB422, + 1572: 0xB423, + 1573: 0xB424, + 1574: 0xB425, + 1575: 0xB426, + 1576: 0xB427, + 1577: 0xB42A, + 1578: 0xB42C, + 1579: 0xB42D, + 1580: 0xB42E, + 1581: 0xB42F, + 1582: 0xB430, + 1583: 0xB431, + 1584: 0xB432, + 1585: 0xB433, + 1586: 0xB435, + 1587: 0xB436, + 1588: 0xB437, + 1589: 0xB438, + 1590: 0xB439, + 1591: 0xB43A, + 1592: 0xB43B, + 1593: 0xB43C, + 1594: 0xB43D, + 1595: 0xB43E, + 1596: 0xB43F, + 1597: 0xB440, + 1598: 0xB441, + 1599: 0xB442, + 1600: 0xB443, + 1601: 0xB444, + 1602: 0xB445, + 1603: 0xB446, + 1604: 0xB447, + 1605: 0xB448, + 1606: 0xB449, + 1607: 0xB44A, + 1608: 0xB44B, + 1609: 0xB44C, + 1610: 0xB44D, + 1611: 0xB44E, + 1612: 0xB44F, + 1613: 0xB452, + 1614: 0xB453, + 1615: 0xB455, + 1616: 0xB456, + 1617: 0xB457, + 1618: 0xB459, + 1619: 0xB45A, + 1620: 0xB45B, + 1621: 0xB45C, + 1622: 0xB45D, + 1623: 0xB45E, + 1624: 0xB45F, + 1625: 0xB462, + 1626: 0xB464, + 1627: 0xB466, + 1628: 0xB467, + 1629: 0xB468, + 1630: 0xB469, + 1631: 0xB46A, + 1632: 0xB46B, + 1633: 0xB46D, + 1634: 0xB46E, + 1635: 0xB46F, + 1636: 0xB470, + 1637: 0xB471, + 1638: 0xB472, + 1639: 0xB473, + 1640: 0xB474, + 1641: 0xB475, + 1642: 0xB476, + 1643: 0xB477, + 1644: 0xB478, + 1645: 0xB479, + 1646: 0xB47A, + 1647: 0xB47B, + 1648: 0xB47C, + 1649: 0xB47D, + 1650: 0xB47E, + 1651: 0xB47F, + 1652: 0xB481, + 1653: 0xB482, + 1654: 0xB483, + 1655: 0xB484, + 1656: 0xB485, + 1657: 0xB486, + 1658: 0xB487, + 1659: 0xB489, + 1660: 0xB48A, + 1661: 0xB48B, + 1662: 0xB48C, + 1663: 0xB48D, + 1664: 0xB48E, + 1665: 0xB48F, + 1666: 0xB490, + 1667: 0xB491, + 1668: 0xB492, + 1669: 0xB493, + 1670: 0xB494, + 1671: 0xB495, + 1672: 0xB496, + 1673: 0xB497, + 1674: 0xB498, + 1675: 0xB499, + 1676: 0xB49A, + 1677: 0xB49B, + 1678: 0xB49C, + 1679: 0xB49E, + 1680: 0xB49F, + 1681: 0xB4A0, + 1682: 0xB4A1, + 1683: 0xB4A2, + 1684: 0xB4A3, + 1685: 0xB4A5, + 1686: 0xB4A6, + 1687: 0xB4A7, + 1688: 0xB4A9, + 1689: 0xB4AA, + 1690: 0xB4AB, + 1691: 0xB4AD, + 1692: 0xB4AE, + 1693: 0xB4AF, + 1694: 0xB4B0, + 1695: 0xB4B1, + 1696: 0xB4B2, + 1697: 0xB4B3, + 1698: 0xB4B4, + 1699: 0xB4B6, + 1700: 0xB4B8, + 1701: 0xB4BA, + 1702: 0xB4BB, + 1703: 0xB4BC, + 1704: 0xB4BD, + 1705: 0xB4BE, + 1706: 0xB4BF, + 1707: 0xB4C1, + 1708: 0xB4C2, + 1709: 0xB4C3, + 1710: 0xB4C5, + 1711: 0xB4C6, + 1712: 0xB4C7, + 1713: 0xB4C9, + 1714: 0xB4CA, + 1715: 0xB4CB, + 1716: 0xB4CC, + 1717: 0xB4CD, + 1718: 0xB4CE, + 1719: 0xB4CF, + 1720: 0xB4D1, + 1721: 0xB4D2, + 1722: 0xB4D3, + 1723: 0xB4D4, + 1724: 0xB4D6, + 1725: 0xB4D7, + 1726: 0xB4D8, + 1727: 0xB4D9, + 1728: 0xB4DA, + 1729: 0xB4DB, + 1730: 0xB4DE, + 1731: 0xB4DF, + 1732: 0xB4E1, + 1733: 0xB4E2, + 1734: 0xB4E5, + 1735: 0xB4E7, + 1736: 0xB4E8, + 1737: 0xB4E9, + 1738: 0xB4EA, + 1739: 0xB4EB, + 1740: 0xB4EE, + 1741: 0xB4F0, + 1742: 0xB4F2, + 1743: 0xB4F3, + 1744: 0xB4F4, + 1745: 0xB4F5, + 1746: 0xB4F6, + 1747: 0xB4F7, + 1748: 0xB4F9, + 1749: 0xB4FA, + 1750: 0xB4FB, + 1751: 0xB4FC, + 1752: 0xB4FD, + 1753: 0xB4FE, + 1754: 0xB4FF, + 1755: 0xB500, + 1756: 0xB501, + 1757: 0xB502, + 1758: 0xB503, + 1759: 0xB504, + 1760: 0xB505, + 1761: 0xB506, + 1762: 0xB507, + 1763: 0xB508, + 1764: 0xB509, + 1765: 0xB50A, + 1766: 0xB50B, + 1767: 0xB50C, + 1768: 0xB50D, + 1769: 0xB50E, + 1770: 0xB50F, + 1771: 0xB510, + 1772: 0xB511, + 1773: 0xB512, + 1774: 0xB513, + 1775: 0xB516, + 1776: 0xB517, + 1777: 0xB519, + 1778: 0xB51A, + 1779: 0xB51D, + 1780: 0xB51E, + 1781: 0xB51F, + 1782: 0xB520, + 1783: 0xB521, + 1784: 0xB522, + 1785: 0xB523, + 1786: 0xB526, + 1787: 0xB52B, + 1788: 0xB52C, + 1789: 0xB52D, + 1790: 0xB52E, + 1791: 0xB52F, + 1792: 0xB532, + 1793: 0xB533, + 1794: 0xB535, + 1795: 0xB536, + 1796: 0xB537, + 1797: 0xB539, + 1798: 0xB53A, + 1799: 0xB53B, + 1800: 0xB53C, + 1801: 0xB53D, + 1802: 0xB53E, + 1803: 0xB53F, + 1804: 0xB542, + 1805: 0xB546, + 1806: 0xB547, + 1807: 0xB548, + 1808: 0xB549, + 1809: 0xB54A, + 1810: 0xB54E, + 1811: 0xB54F, + 1812: 0xB551, + 1813: 0xB552, + 1814: 0xB553, + 1815: 0xB555, + 1816: 0xB556, + 1817: 0xB557, + 1818: 0xB558, + 1819: 0xB559, + 1820: 0xB55A, + 1821: 0xB55B, + 1822: 0xB55E, + 1823: 0xB562, + 1824: 0xB563, + 1825: 0xB564, + 1826: 0xB565, + 1827: 0xB566, + 1828: 0xB567, + 1829: 0xB568, + 1830: 0xB569, + 1831: 0xB56A, + 1832: 0xB56B, + 1833: 0xB56C, + 1834: 0xB56D, + 1835: 0xB56E, + 1836: 0xB56F, + 1837: 0xB570, + 1838: 0xB571, + 1839: 0xB572, + 1840: 0xB573, + 1841: 0xB574, + 1842: 0xB575, + 1843: 0xB576, + 1844: 0xB577, + 1845: 0xB578, + 1846: 0xB579, + 1847: 0xB57A, + 1848: 0xB57B, + 1849: 0xB57C, + 1850: 0xB57D, + 1851: 0xB57E, + 1852: 0xB57F, + 1853: 0xB580, + 1854: 0xB581, + 1855: 0xB582, + 1856: 0xB583, + 1857: 0xB584, + 1858: 0xB585, + 1859: 0xB586, + 1860: 0xB587, + 1861: 0xB588, + 1862: 0xB589, + 1863: 0xB58A, + 1864: 0xB58B, + 1865: 0xB58C, + 1866: 0xB58D, + 1867: 0xB58E, + 1868: 0xB58F, + 1869: 0xB590, + 1870: 0xB591, + 1871: 0xB592, + 1872: 0xB593, + 1873: 0xB594, + 1874: 0xB595, + 1875: 0xB596, + 1876: 0xB597, + 1877: 0xB598, + 1878: 0xB599, + 1879: 0xB59A, + 1880: 0xB59B, + 1881: 0xB59C, + 1882: 0xB59D, + 1883: 0xB59E, + 1884: 0xB59F, + 1885: 0xB5A2, + 1886: 0xB5A3, + 1887: 0xB5A5, + 1888: 0xB5A6, + 1889: 0xB5A7, + 1890: 0xB5A9, + 1891: 0xB5AC, + 1892: 0xB5AD, + 1893: 0xB5AE, + 1894: 0xB5AF, + 1895: 0xB5B2, + 1896: 0xB5B6, + 1897: 0xB5B7, + 1898: 0xB5B8, + 1899: 0xB5B9, + 1900: 0xB5BA, + 1901: 0xB5BE, + 1902: 0xB5BF, + 1903: 0xB5C1, + 1904: 0xB5C2, + 1905: 0xB5C3, + 1906: 0xB5C5, + 1907: 0xB5C6, + 1908: 0xB5C7, + 1909: 0xB5C8, + 1910: 0xB5C9, + 1911: 0xB5CA, + 1912: 0xB5CB, + 1913: 0xB5CE, + 1914: 0xB5D2, + 1915: 0xB5D3, + 1916: 0xB5D4, + 1917: 0xB5D5, + 1918: 0xB5D6, + 1919: 0xB5D7, + 1920: 0xB5D9, + 1921: 0xB5DA, + 1922: 0xB5DB, + 1923: 0xB5DC, + 1924: 0xB5DD, + 1925: 0xB5DE, + 1926: 0xB5DF, + 1927: 0xB5E0, + 1928: 0xB5E1, + 1929: 0xB5E2, + 1930: 0xB5E3, + 1931: 0xB5E4, + 1932: 0xB5E5, + 1933: 0xB5E6, + 1934: 0xB5E7, + 1935: 0xB5E8, + 1936: 0xB5E9, + 1937: 0xB5EA, + 1938: 0xB5EB, + 1939: 0xB5ED, + 1940: 0xB5EE, + 1941: 0xB5EF, + 1942: 0xB5F0, + 1943: 0xB5F1, + 1944: 0xB5F2, + 1945: 0xB5F3, + 1946: 0xB5F4, + 1947: 0xB5F5, + 1948: 0xB5F6, + 1949: 0xB5F7, + 1950: 0xB5F8, + 1951: 0xB5F9, + 1952: 0xB5FA, + 1953: 0xB5FB, + 1954: 0xB5FC, + 1955: 0xB5FD, + 1956: 0xB5FE, + 1957: 0xB5FF, + 1958: 0xB600, + 1959: 0xB601, + 1960: 0xB602, + 1961: 0xB603, + 1962: 0xB604, + 1963: 0xB605, + 1964: 0xB606, + 1965: 0xB607, + 1966: 0xB608, + 1967: 0xB609, + 1968: 0xB60A, + 1969: 0xB60B, + 1970: 0xB60C, + 1971: 0xB60D, + 1972: 0xB60E, + 1973: 0xB60F, + 1974: 0xB612, + 1975: 0xB613, + 1976: 0xB615, + 1977: 0xB616, + 1978: 0xB617, + 1979: 0xB619, + 1980: 0xB61A, + 1981: 0xB61B, + 1982: 0xB61C, + 1983: 0xB61D, + 1984: 0xB61E, + 1985: 0xB61F, + 1986: 0xB620, + 1987: 0xB621, + 1988: 0xB622, + 1989: 0xB623, + 1990: 0xB624, + 1991: 0xB626, + 1992: 0xB627, + 1993: 0xB628, + 1994: 0xB629, + 1995: 0xB62A, + 1996: 0xB62B, + 1997: 0xB62D, + 1998: 0xB62E, + 1999: 0xB62F, + 2000: 0xB630, + 2001: 0xB631, + 2002: 0xB632, + 2003: 0xB633, + 2004: 0xB635, + 2005: 0xB636, + 2006: 0xB637, + 2007: 0xB638, + 2008: 0xB639, + 2009: 0xB63A, + 2010: 0xB63B, + 2011: 0xB63C, + 2012: 0xB63D, + 2013: 0xB63E, + 2014: 0xB63F, + 2015: 0xB640, + 2016: 0xB641, + 2017: 0xB642, + 2018: 0xB643, + 2019: 0xB644, + 2020: 0xB645, + 2021: 0xB646, + 2022: 0xB647, + 2023: 0xB649, + 2024: 0xB64A, + 2025: 0xB64B, + 2026: 0xB64C, + 2027: 0xB64D, + 2028: 0xB64E, + 2029: 0xB64F, + 2030: 0xB650, + 2031: 0xB651, + 2032: 0xB652, + 2033: 0xB653, + 2034: 0xB654, + 2035: 0xB655, + 2036: 0xB656, + 2037: 0xB657, + 2038: 0xB658, + 2039: 0xB659, + 2040: 0xB65A, + 2041: 0xB65B, + 2042: 0xB65C, + 2043: 0xB65D, + 2044: 0xB65E, + 2045: 0xB65F, + 2046: 0xB660, + 2047: 0xB661, + 2048: 0xB662, + 2049: 0xB663, + 2050: 0xB665, + 2051: 0xB666, + 2052: 0xB667, + 2053: 0xB669, + 2054: 0xB66A, + 2055: 0xB66B, + 2056: 0xB66C, + 2057: 0xB66D, + 2058: 0xB66E, + 2059: 0xB66F, + 2060: 0xB670, + 2061: 0xB671, + 2062: 0xB672, + 2063: 0xB673, + 2064: 0xB674, + 2065: 0xB675, + 2066: 0xB676, + 2067: 0xB677, + 2068: 0xB678, + 2069: 0xB679, + 2070: 0xB67A, + 2071: 0xB67B, + 2072: 0xB67C, + 2073: 0xB67D, + 2074: 0xB67E, + 2075: 0xB67F, + 2076: 0xB680, + 2077: 0xB681, + 2078: 0xB682, + 2079: 0xB683, + 2080: 0xB684, + 2081: 0xB685, + 2082: 0xB686, + 2083: 0xB687, + 2084: 0xB688, + 2085: 0xB689, + 2086: 0xB68A, + 2087: 0xB68B, + 2088: 0xB68C, + 2089: 0xB68D, + 2090: 0xB68E, + 2091: 0xB68F, + 2092: 0xB690, + 2093: 0xB691, + 2094: 0xB692, + 2095: 0xB693, + 2096: 0xB694, + 2097: 0xB695, + 2098: 0xB696, + 2099: 0xB697, + 2100: 0xB698, + 2101: 0xB699, + 2102: 0xB69A, + 2103: 0xB69B, + 2104: 0xB69E, + 2105: 0xB69F, + 2106: 0xB6A1, + 2107: 0xB6A2, + 2108: 0xB6A3, + 2109: 0xB6A5, + 2110: 0xB6A6, + 2111: 0xB6A7, + 2112: 0xB6A8, + 2113: 0xB6A9, + 2114: 0xB6AA, + 2115: 0xB6AD, + 2116: 0xB6AE, + 2117: 0xB6AF, + 2118: 0xB6B0, + 2119: 0xB6B2, + 2120: 0xB6B3, + 2121: 0xB6B4, + 2122: 0xB6B5, + 2123: 0xB6B6, + 2124: 0xB6B7, + 2125: 0xB6B8, + 2126: 0xB6B9, + 2127: 0xB6BA, + 2128: 0xB6BB, + 2129: 0xB6BC, + 2130: 0xB6BD, + 2131: 0xB6BE, + 2132: 0xB6BF, + 2133: 0xB6C0, + 2134: 0xB6C1, + 2135: 0xB6C2, + 2136: 0xB6C3, + 2137: 0xB6C4, + 2138: 0xB6C5, + 2139: 0xB6C6, + 2140: 0xB6C7, + 2141: 0xB6C8, + 2142: 0xB6C9, + 2143: 0xB6CA, + 2144: 0xB6CB, + 2145: 0xB6CC, + 2146: 0xB6CD, + 2147: 0xB6CE, + 2148: 0xB6CF, + 2149: 0xB6D0, + 2150: 0xB6D1, + 2151: 0xB6D2, + 2152: 0xB6D3, + 2153: 0xB6D5, + 2154: 0xB6D6, + 2155: 0xB6D7, + 2156: 0xB6D8, + 2157: 0xB6D9, + 2158: 0xB6DA, + 2159: 0xB6DB, + 2160: 0xB6DC, + 2161: 0xB6DD, + 2162: 0xB6DE, + 2163: 0xB6DF, + 2164: 0xB6E0, + 2165: 0xB6E1, + 2166: 0xB6E2, + 2167: 0xB6E3, + 2168: 0xB6E4, + 2169: 0xB6E5, + 2170: 0xB6E6, + 2171: 0xB6E7, + 2172: 0xB6E8, + 2173: 0xB6E9, + 2174: 0xB6EA, + 2175: 0xB6EB, + 2176: 0xB6EC, + 2177: 0xB6ED, + 2178: 0xB6EE, + 2179: 0xB6EF, + 2180: 0xB6F1, + 2181: 0xB6F2, + 2182: 0xB6F3, + 2183: 0xB6F5, + 2184: 0xB6F6, + 2185: 0xB6F7, + 2186: 0xB6F9, + 2187: 0xB6FA, + 2188: 0xB6FB, + 2189: 0xB6FC, + 2190: 0xB6FD, + 2191: 0xB6FE, + 2192: 0xB6FF, + 2193: 0xB702, + 2194: 0xB703, + 2195: 0xB704, + 2196: 0xB706, + 2197: 0xB707, + 2198: 0xB708, + 2199: 0xB709, + 2200: 0xB70A, + 2201: 0xB70B, + 2202: 0xB70C, + 2203: 0xB70D, + 2204: 0xB70E, + 2205: 0xB70F, + 2206: 0xB710, + 2207: 0xB711, + 2208: 0xB712, + 2209: 0xB713, + 2210: 0xB714, + 2211: 0xB715, + 2212: 0xB716, + 2213: 0xB717, + 2214: 0xB718, + 2215: 0xB719, + 2216: 0xB71A, + 2217: 0xB71B, + 2218: 0xB71C, + 2219: 0xB71D, + 2220: 0xB71E, + 2221: 0xB71F, + 2222: 0xB720, + 2223: 0xB721, + 2224: 0xB722, + 2225: 0xB723, + 2226: 0xB724, + 2227: 0xB725, + 2228: 0xB726, + 2229: 0xB727, + 2230: 0xB72A, + 2231: 0xB72B, + 2232: 0xB72D, + 2233: 0xB72E, + 2234: 0xB731, + 2235: 0xB732, + 2236: 0xB733, + 2237: 0xB734, + 2238: 0xB735, + 2239: 0xB736, + 2240: 0xB737, + 2241: 0xB73A, + 2242: 0xB73C, + 2243: 0xB73D, + 2244: 0xB73E, + 2245: 0xB73F, + 2246: 0xB740, + 2247: 0xB741, + 2248: 0xB742, + 2249: 0xB743, + 2250: 0xB745, + 2251: 0xB746, + 2252: 0xB747, + 2253: 0xB749, + 2254: 0xB74A, + 2255: 0xB74B, + 2256: 0xB74D, + 2257: 0xB74E, + 2258: 0xB74F, + 2259: 0xB750, + 2260: 0xB751, + 2261: 0xB752, + 2262: 0xB753, + 2263: 0xB756, + 2264: 0xB757, + 2265: 0xB758, + 2266: 0xB759, + 2267: 0xB75A, + 2268: 0xB75B, + 2269: 0xB75C, + 2270: 0xB75D, + 2271: 0xB75E, + 2272: 0xB75F, + 2273: 0xB761, + 2274: 0xB762, + 2275: 0xB763, + 2276: 0xB765, + 2277: 0xB766, + 2278: 0xB767, + 2279: 0xB769, + 2280: 0xB76A, + 2281: 0xB76B, + 2282: 0xB76C, + 2283: 0xB76D, + 2284: 0xB76E, + 2285: 0xB76F, + 2286: 0xB772, + 2287: 0xB774, + 2288: 0xB776, + 2289: 0xB777, + 2290: 0xB778, + 2291: 0xB779, + 2292: 0xB77A, + 2293: 0xB77B, + 2294: 0xB77E, + 2295: 0xB77F, + 2296: 0xB781, + 2297: 0xB782, + 2298: 0xB783, + 2299: 0xB785, + 2300: 0xB786, + 2301: 0xB787, + 2302: 0xB788, + 2303: 0xB789, + 2304: 0xB78A, + 2305: 0xB78B, + 2306: 0xB78E, + 2307: 0xB793, + 2308: 0xB794, + 2309: 0xB795, + 2310: 0xB79A, + 2311: 0xB79B, + 2312: 0xB79D, + 2313: 0xB79E, + 2314: 0xB79F, + 2315: 0xB7A1, + 2316: 0xB7A2, + 2317: 0xB7A3, + 2318: 0xB7A4, + 2319: 0xB7A5, + 2320: 0xB7A6, + 2321: 0xB7A7, + 2322: 0xB7AA, + 2323: 0xB7AE, + 2324: 0xB7AF, + 2325: 0xB7B0, + 2326: 0xB7B1, + 2327: 0xB7B2, + 2328: 0xB7B3, + 2329: 0xB7B6, + 2330: 0xB7B7, + 2331: 0xB7B9, + 2332: 0xB7BA, + 2333: 0xB7BB, + 2334: 0xB7BC, + 2335: 0xB7BD, + 2336: 0xB7BE, + 2337: 0xB7BF, + 2338: 0xB7C0, + 2339: 0xB7C1, + 2340: 0xB7C2, + 2341: 0xB7C3, + 2342: 0xB7C4, + 2343: 0xB7C5, + 2344: 0xB7C6, + 2345: 0xB7C8, + 2346: 0xB7CA, + 2347: 0xB7CB, + 2348: 0xB7CC, + 2349: 0xB7CD, + 2350: 0xB7CE, + 2351: 0xB7CF, + 2352: 0xB7D0, + 2353: 0xB7D1, + 2354: 0xB7D2, + 2355: 0xB7D3, + 2356: 0xB7D4, + 2357: 0xB7D5, + 2358: 0xB7D6, + 2359: 0xB7D7, + 2360: 0xB7D8, + 2361: 0xB7D9, + 2362: 0xB7DA, + 2363: 0xB7DB, + 2364: 0xB7DC, + 2365: 0xB7DD, + 2366: 0xB7DE, + 2367: 0xB7DF, + 2368: 0xB7E0, + 2369: 0xB7E1, + 2370: 0xB7E2, + 2371: 0xB7E3, + 2372: 0xB7E4, + 2373: 0xB7E5, + 2374: 0xB7E6, + 2375: 0xB7E7, + 2376: 0xB7E8, + 2377: 0xB7E9, + 2378: 0xB7EA, + 2379: 0xB7EB, + 2380: 0xB7EE, + 2381: 0xB7EF, + 2382: 0xB7F1, + 2383: 0xB7F2, + 2384: 0xB7F3, + 2385: 0xB7F5, + 2386: 0xB7F6, + 2387: 0xB7F7, + 2388: 0xB7F8, + 2389: 0xB7F9, + 2390: 0xB7FA, + 2391: 0xB7FB, + 2392: 0xB7FE, + 2393: 0xB802, + 2394: 0xB803, + 2395: 0xB804, + 2396: 0xB805, + 2397: 0xB806, + 2398: 0xB80A, + 2399: 0xB80B, + 2400: 0xB80D, + 2401: 0xB80E, + 2402: 0xB80F, + 2403: 0xB811, + 2404: 0xB812, + 2405: 0xB813, + 2406: 0xB814, + 2407: 0xB815, + 2408: 0xB816, + 2409: 0xB817, + 2410: 0xB81A, + 2411: 0xB81C, + 2412: 0xB81E, + 2413: 0xB81F, + 2414: 0xB820, + 2415: 0xB821, + 2416: 0xB822, + 2417: 0xB823, + 2418: 0xB826, + 2419: 0xB827, + 2420: 0xB829, + 2421: 0xB82A, + 2422: 0xB82B, + 2423: 0xB82D, + 2424: 0xB82E, + 2425: 0xB82F, + 2426: 0xB830, + 2427: 0xB831, + 2428: 0xB832, + 2429: 0xB833, + 2430: 0xB836, + 2431: 0xB83A, + 2432: 0xB83B, + 2433: 0xB83C, + 2434: 0xB83D, + 2435: 0xB83E, + 2436: 0xB83F, + 2437: 0xB841, + 2438: 0xB842, + 2439: 0xB843, + 2440: 0xB845, + 2441: 0xB846, + 2442: 0xB847, + 2443: 0xB848, + 2444: 0xB849, + 2445: 0xB84A, + 2446: 0xB84B, + 2447: 0xB84C, + 2448: 0xB84D, + 2449: 0xB84E, + 2450: 0xB84F, + 2451: 0xB850, + 2452: 0xB852, + 2453: 0xB854, + 2454: 0xB855, + 2455: 0xB856, + 2456: 0xB857, + 2457: 0xB858, + 2458: 0xB859, + 2459: 0xB85A, + 2460: 0xB85B, + 2461: 0xB85E, + 2462: 0xB85F, + 2463: 0xB861, + 2464: 0xB862, + 2465: 0xB863, + 2466: 0xB865, + 2467: 0xB866, + 2468: 0xB867, + 2469: 0xB868, + 2470: 0xB869, + 2471: 0xB86A, + 2472: 0xB86B, + 2473: 0xB86E, + 2474: 0xB870, + 2475: 0xB872, + 2476: 0xB873, + 2477: 0xB874, + 2478: 0xB875, + 2479: 0xB876, + 2480: 0xB877, + 2481: 0xB879, + 2482: 0xB87A, + 2483: 0xB87B, + 2484: 0xB87D, + 2485: 0xB87E, + 2486: 0xB87F, + 2487: 0xB880, + 2488: 0xB881, + 2489: 0xB882, + 2490: 0xB883, + 2491: 0xB884, + 2492: 0xB885, + 2493: 0xB886, + 2494: 0xB887, + 2495: 0xB888, + 2496: 0xB889, + 2497: 0xB88A, + 2498: 0xB88B, + 2499: 0xB88C, + 2500: 0xB88E, + 2501: 0xB88F, + 2502: 0xB890, + 2503: 0xB891, + 2504: 0xB892, + 2505: 0xB893, + 2506: 0xB894, + 2507: 0xB895, + 2508: 0xB896, + 2509: 0xB897, + 2510: 0xB898, + 2511: 0xB899, + 2512: 0xB89A, + 2513: 0xB89B, + 2514: 0xB89C, + 2515: 0xB89D, + 2516: 0xB89E, + 2517: 0xB89F, + 2518: 0xB8A0, + 2519: 0xB8A1, + 2520: 0xB8A2, + 2521: 0xB8A3, + 2522: 0xB8A4, + 2523: 0xB8A5, + 2524: 0xB8A6, + 2525: 0xB8A7, + 2526: 0xB8A9, + 2527: 0xB8AA, + 2528: 0xB8AB, + 2529: 0xB8AC, + 2530: 0xB8AD, + 2531: 0xB8AE, + 2532: 0xB8AF, + 2533: 0xB8B1, + 2534: 0xB8B2, + 2535: 0xB8B3, + 2536: 0xB8B5, + 2537: 0xB8B6, + 2538: 0xB8B7, + 2539: 0xB8B9, + 2540: 0xB8BA, + 2541: 0xB8BB, + 2542: 0xB8BC, + 2543: 0xB8BD, + 2544: 0xB8BE, + 2545: 0xB8BF, + 2546: 0xB8C2, + 2547: 0xB8C4, + 2548: 0xB8C6, + 2549: 0xB8C7, + 2550: 0xB8C8, + 2551: 0xB8C9, + 2552: 0xB8CA, + 2553: 0xB8CB, + 2554: 0xB8CD, + 2555: 0xB8CE, + 2556: 0xB8CF, + 2557: 0xB8D1, + 2558: 0xB8D2, + 2559: 0xB8D3, + 2560: 0xB8D5, + 2561: 0xB8D6, + 2562: 0xB8D7, + 2563: 0xB8D8, + 2564: 0xB8D9, + 2565: 0xB8DA, + 2566: 0xB8DB, + 2567: 0xB8DC, + 2568: 0xB8DE, + 2569: 0xB8E0, + 2570: 0xB8E2, + 2571: 0xB8E3, + 2572: 0xB8E4, + 2573: 0xB8E5, + 2574: 0xB8E6, + 2575: 0xB8E7, + 2576: 0xB8EA, + 2577: 0xB8EB, + 2578: 0xB8ED, + 2579: 0xB8EE, + 2580: 0xB8EF, + 2581: 0xB8F1, + 2582: 0xB8F2, + 2583: 0xB8F3, + 2584: 0xB8F4, + 2585: 0xB8F5, + 2586: 0xB8F6, + 2587: 0xB8F7, + 2588: 0xB8FA, + 2589: 0xB8FC, + 2590: 0xB8FE, + 2591: 0xB8FF, + 2592: 0xB900, + 2593: 0xB901, + 2594: 0xB902, + 2595: 0xB903, + 2596: 0xB905, + 2597: 0xB906, + 2598: 0xB907, + 2599: 0xB908, + 2600: 0xB909, + 2601: 0xB90A, + 2602: 0xB90B, + 2603: 0xB90C, + 2604: 0xB90D, + 2605: 0xB90E, + 2606: 0xB90F, + 2607: 0xB910, + 2608: 0xB911, + 2609: 0xB912, + 2610: 0xB913, + 2611: 0xB914, + 2612: 0xB915, + 2613: 0xB916, + 2614: 0xB917, + 2615: 0xB919, + 2616: 0xB91A, + 2617: 0xB91B, + 2618: 0xB91C, + 2619: 0xB91D, + 2620: 0xB91E, + 2621: 0xB91F, + 2622: 0xB921, + 2623: 0xB922, + 2624: 0xB923, + 2625: 0xB924, + 2626: 0xB925, + 2627: 0xB926, + 2628: 0xB927, + 2629: 0xB928, + 2630: 0xB929, + 2631: 0xB92A, + 2632: 0xB92B, + 2633: 0xB92C, + 2634: 0xB92D, + 2635: 0xB92E, + 2636: 0xB92F, + 2637: 0xB930, + 2638: 0xB931, + 2639: 0xB932, + 2640: 0xB933, + 2641: 0xB934, + 2642: 0xB935, + 2643: 0xB936, + 2644: 0xB937, + 2645: 0xB938, + 2646: 0xB939, + 2647: 0xB93A, + 2648: 0xB93B, + 2649: 0xB93E, + 2650: 0xB93F, + 2651: 0xB941, + 2652: 0xB942, + 2653: 0xB943, + 2654: 0xB945, + 2655: 0xB946, + 2656: 0xB947, + 2657: 0xB948, + 2658: 0xB949, + 2659: 0xB94A, + 2660: 0xB94B, + 2661: 0xB94D, + 2662: 0xB94E, + 2663: 0xB950, + 2664: 0xB952, + 2665: 0xB953, + 2666: 0xB954, + 2667: 0xB955, + 2668: 0xB956, + 2669: 0xB957, + 2670: 0xB95A, + 2671: 0xB95B, + 2672: 0xB95D, + 2673: 0xB95E, + 2674: 0xB95F, + 2675: 0xB961, + 2676: 0xB962, + 2677: 0xB963, + 2678: 0xB964, + 2679: 0xB965, + 2680: 0xB966, + 2681: 0xB967, + 2682: 0xB96A, + 2683: 0xB96C, + 2684: 0xB96E, + 2685: 0xB96F, + 2686: 0xB970, + 2687: 0xB971, + 2688: 0xB972, + 2689: 0xB973, + 2690: 0xB976, + 2691: 0xB977, + 2692: 0xB979, + 2693: 0xB97A, + 2694: 0xB97B, + 2695: 0xB97D, + 2696: 0xB97E, + 2697: 0xB97F, + 2698: 0xB980, + 2699: 0xB981, + 2700: 0xB982, + 2701: 0xB983, + 2702: 0xB986, + 2703: 0xB988, + 2704: 0xB98B, + 2705: 0xB98C, + 2706: 0xB98F, + 2707: 0xB990, + 2708: 0xB991, + 2709: 0xB992, + 2710: 0xB993, + 2711: 0xB994, + 2712: 0xB995, + 2713: 0xB996, + 2714: 0xB997, + 2715: 0xB998, + 2716: 0xB999, + 2717: 0xB99A, + 2718: 0xB99B, + 2719: 0xB99C, + 2720: 0xB99D, + 2721: 0xB99E, + 2722: 0xB99F, + 2723: 0xB9A0, + 2724: 0xB9A1, + 2725: 0xB9A2, + 2726: 0xB9A3, + 2727: 0xB9A4, + 2728: 0xB9A5, + 2729: 0xB9A6, + 2730: 0xB9A7, + 2731: 0xB9A8, + 2732: 0xB9A9, + 2733: 0xB9AA, + 2734: 0xB9AB, + 2735: 0xB9AE, + 2736: 0xB9AF, + 2737: 0xB9B1, + 2738: 0xB9B2, + 2739: 0xB9B3, + 2740: 0xB9B5, + 2741: 0xB9B6, + 2742: 0xB9B7, + 2743: 0xB9B8, + 2744: 0xB9B9, + 2745: 0xB9BA, + 2746: 0xB9BB, + 2747: 0xB9BE, + 2748: 0xB9C0, + 2749: 0xB9C2, + 2750: 0xB9C3, + 2751: 0xB9C4, + 2752: 0xB9C5, + 2753: 0xB9C6, + 2754: 0xB9C7, + 2755: 0xB9CA, + 2756: 0xB9CB, + 2757: 0xB9CD, + 2758: 0xB9D3, + 2759: 0xB9D4, + 2760: 0xB9D5, + 2761: 0xB9D6, + 2762: 0xB9D7, + 2763: 0xB9DA, + 2764: 0xB9DC, + 2765: 0xB9DF, + 2766: 0xB9E0, + 2767: 0xB9E2, + 2768: 0xB9E6, + 2769: 0xB9E7, + 2770: 0xB9E9, + 2771: 0xB9EA, + 2772: 0xB9EB, + 2773: 0xB9ED, + 2774: 0xB9EE, + 2775: 0xB9EF, + 2776: 0xB9F0, + 2777: 0xB9F1, + 2778: 0xB9F2, + 2779: 0xB9F3, + 2780: 0xB9F6, + 2781: 0xB9FB, + 2782: 0xB9FC, + 2783: 0xB9FD, + 2784: 0xB9FE, + 2785: 0xB9FF, + 2786: 0xBA02, + 2787: 0xBA03, + 2788: 0xBA04, + 2789: 0xBA05, + 2790: 0xBA06, + 2791: 0xBA07, + 2792: 0xBA09, + 2793: 0xBA0A, + 2794: 0xBA0B, + 2795: 0xBA0C, + 2796: 0xBA0D, + 2797: 0xBA0E, + 2798: 0xBA0F, + 2799: 0xBA10, + 2800: 0xBA11, + 2801: 0xBA12, + 2802: 0xBA13, + 2803: 0xBA14, + 2804: 0xBA16, + 2805: 0xBA17, + 2806: 0xBA18, + 2807: 0xBA19, + 2808: 0xBA1A, + 2809: 0xBA1B, + 2810: 0xBA1C, + 2811: 0xBA1D, + 2812: 0xBA1E, + 2813: 0xBA1F, + 2814: 0xBA20, + 2815: 0xBA21, + 2816: 0xBA22, + 2817: 0xBA23, + 2818: 0xBA24, + 2819: 0xBA25, + 2820: 0xBA26, + 2821: 0xBA27, + 2822: 0xBA28, + 2823: 0xBA29, + 2824: 0xBA2A, + 2825: 0xBA2B, + 2826: 0xBA2C, + 2827: 0xBA2D, + 2828: 0xBA2E, + 2829: 0xBA2F, + 2830: 0xBA30, + 2831: 0xBA31, + 2832: 0xBA32, + 2833: 0xBA33, + 2834: 0xBA34, + 2835: 0xBA35, + 2836: 0xBA36, + 2837: 0xBA37, + 2838: 0xBA3A, + 2839: 0xBA3B, + 2840: 0xBA3D, + 2841: 0xBA3E, + 2842: 0xBA3F, + 2843: 0xBA41, + 2844: 0xBA43, + 2845: 0xBA44, + 2846: 0xBA45, + 2847: 0xBA46, + 2848: 0xBA47, + 2849: 0xBA4A, + 2850: 0xBA4C, + 2851: 0xBA4F, + 2852: 0xBA50, + 2853: 0xBA51, + 2854: 0xBA52, + 2855: 0xBA56, + 2856: 0xBA57, + 2857: 0xBA59, + 2858: 0xBA5A, + 2859: 0xBA5B, + 2860: 0xBA5D, + 2861: 0xBA5E, + 2862: 0xBA5F, + 2863: 0xBA60, + 2864: 0xBA61, + 2865: 0xBA62, + 2866: 0xBA63, + 2867: 0xBA66, + 2868: 0xBA6A, + 2869: 0xBA6B, + 2870: 0xBA6C, + 2871: 0xBA6D, + 2872: 0xBA6E, + 2873: 0xBA6F, + 2874: 0xBA72, + 2875: 0xBA73, + 2876: 0xBA75, + 2877: 0xBA76, + 2878: 0xBA77, + 2879: 0xBA79, + 2880: 0xBA7A, + 2881: 0xBA7B, + 2882: 0xBA7C, + 2883: 0xBA7D, + 2884: 0xBA7E, + 2885: 0xBA7F, + 2886: 0xBA80, + 2887: 0xBA81, + 2888: 0xBA82, + 2889: 0xBA86, + 2890: 0xBA88, + 2891: 0xBA89, + 2892: 0xBA8A, + 2893: 0xBA8B, + 2894: 0xBA8D, + 2895: 0xBA8E, + 2896: 0xBA8F, + 2897: 0xBA90, + 2898: 0xBA91, + 2899: 0xBA92, + 2900: 0xBA93, + 2901: 0xBA94, + 2902: 0xBA95, + 2903: 0xBA96, + 2904: 0xBA97, + 2905: 0xBA98, + 2906: 0xBA99, + 2907: 0xBA9A, + 2908: 0xBA9B, + 2909: 0xBA9C, + 2910: 0xBA9D, + 2911: 0xBA9E, + 2912: 0xBA9F, + 2913: 0xBAA0, + 2914: 0xBAA1, + 2915: 0xBAA2, + 2916: 0xBAA3, + 2917: 0xBAA4, + 2918: 0xBAA5, + 2919: 0xBAA6, + 2920: 0xBAA7, + 2921: 0xBAAA, + 2922: 0xBAAD, + 2923: 0xBAAE, + 2924: 0xBAAF, + 2925: 0xBAB1, + 2926: 0xBAB3, + 2927: 0xBAB4, + 2928: 0xBAB5, + 2929: 0xBAB6, + 2930: 0xBAB7, + 2931: 0xBABA, + 2932: 0xBABC, + 2933: 0xBABE, + 2934: 0xBABF, + 2935: 0xBAC0, + 2936: 0xBAC1, + 2937: 0xBAC2, + 2938: 0xBAC3, + 2939: 0xBAC5, + 2940: 0xBAC6, + 2941: 0xBAC7, + 2942: 0xBAC9, + 2943: 0xBACA, + 2944: 0xBACB, + 2945: 0xBACC, + 2946: 0xBACD, + 2947: 0xBACE, + 2948: 0xBACF, + 2949: 0xBAD0, + 2950: 0xBAD1, + 2951: 0xBAD2, + 2952: 0xBAD3, + 2953: 0xBAD4, + 2954: 0xBAD5, + 2955: 0xBAD6, + 2956: 0xBAD7, + 2957: 0xBADA, + 2958: 0xBADB, + 2959: 0xBADC, + 2960: 0xBADD, + 2961: 0xBADE, + 2962: 0xBADF, + 2963: 0xBAE0, + 2964: 0xBAE1, + 2965: 0xBAE2, + 2966: 0xBAE3, + 2967: 0xBAE4, + 2968: 0xBAE5, + 2969: 0xBAE6, + 2970: 0xBAE7, + 2971: 0xBAE8, + 2972: 0xBAE9, + 2973: 0xBAEA, + 2974: 0xBAEB, + 2975: 0xBAEC, + 2976: 0xBAED, + 2977: 0xBAEE, + 2978: 0xBAEF, + 2979: 0xBAF0, + 2980: 0xBAF1, + 2981: 0xBAF2, + 2982: 0xBAF3, + 2983: 0xBAF4, + 2984: 0xBAF5, + 2985: 0xBAF6, + 2986: 0xBAF7, + 2987: 0xBAF8, + 2988: 0xBAF9, + 2989: 0xBAFA, + 2990: 0xBAFB, + 2991: 0xBAFD, + 2992: 0xBAFE, + 2993: 0xBAFF, + 2994: 0xBB01, + 2995: 0xBB02, + 2996: 0xBB03, + 2997: 0xBB05, + 2998: 0xBB06, + 2999: 0xBB07, + 3000: 0xBB08, + 3001: 0xBB09, + 3002: 0xBB0A, + 3003: 0xBB0B, + 3004: 0xBB0C, + 3005: 0xBB0E, + 3006: 0xBB10, + 3007: 0xBB12, + 3008: 0xBB13, + 3009: 0xBB14, + 3010: 0xBB15, + 3011: 0xBB16, + 3012: 0xBB17, + 3013: 0xBB19, + 3014: 0xBB1A, + 3015: 0xBB1B, + 3016: 0xBB1D, + 3017: 0xBB1E, + 3018: 0xBB1F, + 3019: 0xBB21, + 3020: 0xBB22, + 3021: 0xBB23, + 3022: 0xBB24, + 3023: 0xBB25, + 3024: 0xBB26, + 3025: 0xBB27, + 3026: 0xBB28, + 3027: 0xBB2A, + 3028: 0xBB2C, + 3029: 0xBB2D, + 3030: 0xBB2E, + 3031: 0xBB2F, + 3032: 0xBB30, + 3033: 0xBB31, + 3034: 0xBB32, + 3035: 0xBB33, + 3036: 0xBB37, + 3037: 0xBB39, + 3038: 0xBB3A, + 3039: 0xBB3F, + 3040: 0xBB40, + 3041: 0xBB41, + 3042: 0xBB42, + 3043: 0xBB43, + 3044: 0xBB46, + 3045: 0xBB48, + 3046: 0xBB4A, + 3047: 0xBB4B, + 3048: 0xBB4C, + 3049: 0xBB4E, + 3050: 0xBB51, + 3051: 0xBB52, + 3052: 0xBB53, + 3053: 0xBB55, + 3054: 0xBB56, + 3055: 0xBB57, + 3056: 0xBB59, + 3057: 0xBB5A, + 3058: 0xBB5B, + 3059: 0xBB5C, + 3060: 0xBB5D, + 3061: 0xBB5E, + 3062: 0xBB5F, + 3063: 0xBB60, + 3064: 0xBB62, + 3065: 0xBB64, + 3066: 0xBB65, + 3067: 0xBB66, + 3068: 0xBB67, + 3069: 0xBB68, + 3070: 0xBB69, + 3071: 0xBB6A, + 3072: 0xBB6B, + 3073: 0xBB6D, + 3074: 0xBB6E, + 3075: 0xBB6F, + 3076: 0xBB70, + 3077: 0xBB71, + 3078: 0xBB72, + 3079: 0xBB73, + 3080: 0xBB74, + 3081: 0xBB75, + 3082: 0xBB76, + 3083: 0xBB77, + 3084: 0xBB78, + 3085: 0xBB79, + 3086: 0xBB7A, + 3087: 0xBB7B, + 3088: 0xBB7C, + 3089: 0xBB7D, + 3090: 0xBB7E, + 3091: 0xBB7F, + 3092: 0xBB80, + 3093: 0xBB81, + 3094: 0xBB82, + 3095: 0xBB83, + 3096: 0xBB84, + 3097: 0xBB85, + 3098: 0xBB86, + 3099: 0xBB87, + 3100: 0xBB89, + 3101: 0xBB8A, + 3102: 0xBB8B, + 3103: 0xBB8D, + 3104: 0xBB8E, + 3105: 0xBB8F, + 3106: 0xBB91, + 3107: 0xBB92, + 3108: 0xBB93, + 3109: 0xBB94, + 3110: 0xBB95, + 3111: 0xBB96, + 3112: 0xBB97, + 3113: 0xBB98, + 3114: 0xBB99, + 3115: 0xBB9A, + 3116: 0xBB9B, + 3117: 0xBB9C, + 3118: 0xBB9D, + 3119: 0xBB9E, + 3120: 0xBB9F, + 3121: 0xBBA0, + 3122: 0xBBA1, + 3123: 0xBBA2, + 3124: 0xBBA3, + 3125: 0xBBA5, + 3126: 0xBBA6, + 3127: 0xBBA7, + 3128: 0xBBA9, + 3129: 0xBBAA, + 3130: 0xBBAB, + 3131: 0xBBAD, + 3132: 0xBBAE, + 3133: 0xBBAF, + 3134: 0xBBB0, + 3135: 0xBBB1, + 3136: 0xBBB2, + 3137: 0xBBB3, + 3138: 0xBBB5, + 3139: 0xBBB6, + 3140: 0xBBB8, + 3141: 0xBBB9, + 3142: 0xBBBA, + 3143: 0xBBBB, + 3144: 0xBBBC, + 3145: 0xBBBD, + 3146: 0xBBBE, + 3147: 0xBBBF, + 3148: 0xBBC1, + 3149: 0xBBC2, + 3150: 0xBBC3, + 3151: 0xBBC5, + 3152: 0xBBC6, + 3153: 0xBBC7, + 3154: 0xBBC9, + 3155: 0xBBCA, + 3156: 0xBBCB, + 3157: 0xBBCC, + 3158: 0xBBCD, + 3159: 0xBBCE, + 3160: 0xBBCF, + 3161: 0xBBD1, + 3162: 0xBBD2, + 3163: 0xBBD4, + 3164: 0xBBD5, + 3165: 0xBBD6, + 3166: 0xBBD7, + 3167: 0xBBD8, + 3168: 0xBBD9, + 3169: 0xBBDA, + 3170: 0xBBDB, + 3171: 0xBBDC, + 3172: 0xBBDD, + 3173: 0xBBDE, + 3174: 0xBBDF, + 3175: 0xBBE0, + 3176: 0xBBE1, + 3177: 0xBBE2, + 3178: 0xBBE3, + 3179: 0xBBE4, + 3180: 0xBBE5, + 3181: 0xBBE6, + 3182: 0xBBE7, + 3183: 0xBBE8, + 3184: 0xBBE9, + 3185: 0xBBEA, + 3186: 0xBBEB, + 3187: 0xBBEC, + 3188: 0xBBED, + 3189: 0xBBEE, + 3190: 0xBBEF, + 3191: 0xBBF0, + 3192: 0xBBF1, + 3193: 0xBBF2, + 3194: 0xBBF3, + 3195: 0xBBF4, + 3196: 0xBBF5, + 3197: 0xBBF6, + 3198: 0xBBF7, + 3199: 0xBBFA, + 3200: 0xBBFB, + 3201: 0xBBFD, + 3202: 0xBBFE, + 3203: 0xBC01, + 3204: 0xBC03, + 3205: 0xBC04, + 3206: 0xBC05, + 3207: 0xBC06, + 3208: 0xBC07, + 3209: 0xBC0A, + 3210: 0xBC0E, + 3211: 0xBC10, + 3212: 0xBC12, + 3213: 0xBC13, + 3214: 0xBC19, + 3215: 0xBC1A, + 3216: 0xBC20, + 3217: 0xBC21, + 3218: 0xBC22, + 3219: 0xBC23, + 3220: 0xBC26, + 3221: 0xBC28, + 3222: 0xBC2A, + 3223: 0xBC2B, + 3224: 0xBC2C, + 3225: 0xBC2E, + 3226: 0xBC2F, + 3227: 0xBC32, + 3228: 0xBC33, + 3229: 0xBC35, + 3230: 0xBC36, + 3231: 0xBC37, + 3232: 0xBC39, + 3233: 0xBC3A, + 3234: 0xBC3B, + 3235: 0xBC3C, + 3236: 0xBC3D, + 3237: 0xBC3E, + 3238: 0xBC3F, + 3239: 0xBC42, + 3240: 0xBC46, + 3241: 0xBC47, + 3242: 0xBC48, + 3243: 0xBC4A, + 3244: 0xBC4B, + 3245: 0xBC4E, + 3246: 0xBC4F, + 3247: 0xBC51, + 3248: 0xBC52, + 3249: 0xBC53, + 3250: 0xBC54, + 3251: 0xBC55, + 3252: 0xBC56, + 3253: 0xBC57, + 3254: 0xBC58, + 3255: 0xBC59, + 3256: 0xBC5A, + 3257: 0xBC5B, + 3258: 0xBC5C, + 3259: 0xBC5E, + 3260: 0xBC5F, + 3261: 0xBC60, + 3262: 0xBC61, + 3263: 0xBC62, + 3264: 0xBC63, + 3265: 0xBC64, + 3266: 0xBC65, + 3267: 0xBC66, + 3268: 0xBC67, + 3269: 0xBC68, + 3270: 0xBC69, + 3271: 0xBC6A, + 3272: 0xBC6B, + 3273: 0xBC6C, + 3274: 0xBC6D, + 3275: 0xBC6E, + 3276: 0xBC6F, + 3277: 0xBC70, + 3278: 0xBC71, + 3279: 0xBC72, + 3280: 0xBC73, + 3281: 0xBC74, + 3282: 0xBC75, + 3283: 0xBC76, + 3284: 0xBC77, + 3285: 0xBC78, + 3286: 0xBC79, + 3287: 0xBC7A, + 3288: 0xBC7B, + 3289: 0xBC7C, + 3290: 0xBC7D, + 3291: 0xBC7E, + 3292: 0xBC7F, + 3293: 0xBC80, + 3294: 0xBC81, + 3295: 0xBC82, + 3296: 0xBC83, + 3297: 0xBC86, + 3298: 0xBC87, + 3299: 0xBC89, + 3300: 0xBC8A, + 3301: 0xBC8D, + 3302: 0xBC8F, + 3303: 0xBC90, + 3304: 0xBC91, + 3305: 0xBC92, + 3306: 0xBC93, + 3307: 0xBC96, + 3308: 0xBC98, + 3309: 0xBC9B, + 3310: 0xBC9C, + 3311: 0xBC9D, + 3312: 0xBC9E, + 3313: 0xBC9F, + 3314: 0xBCA2, + 3315: 0xBCA3, + 3316: 0xBCA5, + 3317: 0xBCA6, + 3318: 0xBCA9, + 3319: 0xBCAA, + 3320: 0xBCAB, + 3321: 0xBCAC, + 3322: 0xBCAD, + 3323: 0xBCAE, + 3324: 0xBCAF, + 3325: 0xBCB2, + 3326: 0xBCB6, + 3327: 0xBCB7, + 3328: 0xBCB8, + 3329: 0xBCB9, + 3330: 0xBCBA, + 3331: 0xBCBB, + 3332: 0xBCBE, + 3333: 0xBCBF, + 3334: 0xBCC1, + 3335: 0xBCC2, + 3336: 0xBCC3, + 3337: 0xBCC5, + 3338: 0xBCC6, + 3339: 0xBCC7, + 3340: 0xBCC8, + 3341: 0xBCC9, + 3342: 0xBCCA, + 3343: 0xBCCB, + 3344: 0xBCCC, + 3345: 0xBCCE, + 3346: 0xBCD2, + 3347: 0xBCD3, + 3348: 0xBCD4, + 3349: 0xBCD6, + 3350: 0xBCD7, + 3351: 0xBCD9, + 3352: 0xBCDA, + 3353: 0xBCDB, + 3354: 0xBCDD, + 3355: 0xBCDE, + 3356: 0xBCDF, + 3357: 0xBCE0, + 3358: 0xBCE1, + 3359: 0xBCE2, + 3360: 0xBCE3, + 3361: 0xBCE4, + 3362: 0xBCE5, + 3363: 0xBCE6, + 3364: 0xBCE7, + 3365: 0xBCE8, + 3366: 0xBCE9, + 3367: 0xBCEA, + 3368: 0xBCEB, + 3369: 0xBCEC, + 3370: 0xBCED, + 3371: 0xBCEE, + 3372: 0xBCEF, + 3373: 0xBCF0, + 3374: 0xBCF1, + 3375: 0xBCF2, + 3376: 0xBCF3, + 3377: 0xBCF7, + 3378: 0xBCF9, + 3379: 0xBCFA, + 3380: 0xBCFB, + 3381: 0xBCFD, + 3382: 0xBCFE, + 3383: 0xBCFF, + 3384: 0xBD00, + 3385: 0xBD01, + 3386: 0xBD02, + 3387: 0xBD03, + 3388: 0xBD06, + 3389: 0xBD08, + 3390: 0xBD0A, + 3391: 0xBD0B, + 3392: 0xBD0C, + 3393: 0xBD0D, + 3394: 0xBD0E, + 3395: 0xBD0F, + 3396: 0xBD11, + 3397: 0xBD12, + 3398: 0xBD13, + 3399: 0xBD15, + 3400: 0xBD16, + 3401: 0xBD17, + 3402: 0xBD18, + 3403: 0xBD19, + 3404: 0xBD1A, + 3405: 0xBD1B, + 3406: 0xBD1C, + 3407: 0xBD1D, + 3408: 0xBD1E, + 3409: 0xBD1F, + 3410: 0xBD20, + 3411: 0xBD21, + 3412: 0xBD22, + 3413: 0xBD23, + 3414: 0xBD25, + 3415: 0xBD26, + 3416: 0xBD27, + 3417: 0xBD28, + 3418: 0xBD29, + 3419: 0xBD2A, + 3420: 0xBD2B, + 3421: 0xBD2D, + 3422: 0xBD2E, + 3423: 0xBD2F, + 3424: 0xBD30, + 3425: 0xBD31, + 3426: 0xBD32, + 3427: 0xBD33, + 3428: 0xBD34, + 3429: 0xBD35, + 3430: 0xBD36, + 3431: 0xBD37, + 3432: 0xBD38, + 3433: 0xBD39, + 3434: 0xBD3A, + 3435: 0xBD3B, + 3436: 0xBD3C, + 3437: 0xBD3D, + 3438: 0xBD3E, + 3439: 0xBD3F, + 3440: 0xBD41, + 3441: 0xBD42, + 3442: 0xBD43, + 3443: 0xBD44, + 3444: 0xBD45, + 3445: 0xBD46, + 3446: 0xBD47, + 3447: 0xBD4A, + 3448: 0xBD4B, + 3449: 0xBD4D, + 3450: 0xBD4E, + 3451: 0xBD4F, + 3452: 0xBD51, + 3453: 0xBD52, + 3454: 0xBD53, + 3455: 0xBD54, + 3456: 0xBD55, + 3457: 0xBD56, + 3458: 0xBD57, + 3459: 0xBD5A, + 3460: 0xBD5B, + 3461: 0xBD5C, + 3462: 0xBD5D, + 3463: 0xBD5E, + 3464: 0xBD5F, + 3465: 0xBD60, + 3466: 0xBD61, + 3467: 0xBD62, + 3468: 0xBD63, + 3469: 0xBD65, + 3470: 0xBD66, + 3471: 0xBD67, + 3472: 0xBD69, + 3473: 0xBD6A, + 3474: 0xBD6B, + 3475: 0xBD6C, + 3476: 0xBD6D, + 3477: 0xBD6E, + 3478: 0xBD6F, + 3479: 0xBD70, + 3480: 0xBD71, + 3481: 0xBD72, + 3482: 0xBD73, + 3483: 0xBD74, + 3484: 0xBD75, + 3485: 0xBD76, + 3486: 0xBD77, + 3487: 0xBD78, + 3488: 0xBD79, + 3489: 0xBD7A, + 3490: 0xBD7B, + 3491: 0xBD7C, + 3492: 0xBD7D, + 3493: 0xBD7E, + 3494: 0xBD7F, + 3495: 0xBD82, + 3496: 0xBD83, + 3497: 0xBD85, + 3498: 0xBD86, + 3499: 0xBD8B, + 3500: 0xBD8C, + 3501: 0xBD8D, + 3502: 0xBD8E, + 3503: 0xBD8F, + 3504: 0xBD92, + 3505: 0xBD94, + 3506: 0xBD96, + 3507: 0xBD97, + 3508: 0xBD98, + 3509: 0xBD9B, + 3510: 0xBD9D, + 3511: 0xBD9E, + 3512: 0xBD9F, + 3513: 0xBDA0, + 3514: 0xBDA1, + 3515: 0xBDA2, + 3516: 0xBDA3, + 3517: 0xBDA5, + 3518: 0xBDA6, + 3519: 0xBDA7, + 3520: 0xBDA8, + 3521: 0xBDA9, + 3522: 0xBDAA, + 3523: 0xBDAB, + 3524: 0xBDAC, + 3525: 0xBDAD, + 3526: 0xBDAE, + 3527: 0xBDAF, + 3528: 0xBDB1, + 3529: 0xBDB2, + 3530: 0xBDB3, + 3531: 0xBDB4, + 3532: 0xBDB5, + 3533: 0xBDB6, + 3534: 0xBDB7, + 3535: 0xBDB9, + 3536: 0xBDBA, + 3537: 0xBDBB, + 3538: 0xBDBC, + 3539: 0xBDBD, + 3540: 0xBDBE, + 3541: 0xBDBF, + 3542: 0xBDC0, + 3543: 0xBDC1, + 3544: 0xBDC2, + 3545: 0xBDC3, + 3546: 0xBDC4, + 3547: 0xBDC5, + 3548: 0xBDC6, + 3549: 0xBDC7, + 3550: 0xBDC8, + 3551: 0xBDC9, + 3552: 0xBDCA, + 3553: 0xBDCB, + 3554: 0xBDCC, + 3555: 0xBDCD, + 3556: 0xBDCE, + 3557: 0xBDCF, + 3558: 0xBDD0, + 3559: 0xBDD1, + 3560: 0xBDD2, + 3561: 0xBDD3, + 3562: 0xBDD6, + 3563: 0xBDD7, + 3564: 0xBDD9, + 3565: 0xBDDA, + 3566: 0xBDDB, + 3567: 0xBDDD, + 3568: 0xBDDE, + 3569: 0xBDDF, + 3570: 0xBDE0, + 3571: 0xBDE1, + 3572: 0xBDE2, + 3573: 0xBDE3, + 3574: 0xBDE4, + 3575: 0xBDE5, + 3576: 0xBDE6, + 3577: 0xBDE7, + 3578: 0xBDE8, + 3579: 0xBDEA, + 3580: 0xBDEB, + 3581: 0xBDEC, + 3582: 0xBDED, + 3583: 0xBDEE, + 3584: 0xBDEF, + 3585: 0xBDF1, + 3586: 0xBDF2, + 3587: 0xBDF3, + 3588: 0xBDF5, + 3589: 0xBDF6, + 3590: 0xBDF7, + 3591: 0xBDF9, + 3592: 0xBDFA, + 3593: 0xBDFB, + 3594: 0xBDFC, + 3595: 0xBDFD, + 3596: 0xBDFE, + 3597: 0xBDFF, + 3598: 0xBE01, + 3599: 0xBE02, + 3600: 0xBE04, + 3601: 0xBE06, + 3602: 0xBE07, + 3603: 0xBE08, + 3604: 0xBE09, + 3605: 0xBE0A, + 3606: 0xBE0B, + 3607: 0xBE0E, + 3608: 0xBE0F, + 3609: 0xBE11, + 3610: 0xBE12, + 3611: 0xBE13, + 3612: 0xBE15, + 3613: 0xBE16, + 3614: 0xBE17, + 3615: 0xBE18, + 3616: 0xBE19, + 3617: 0xBE1A, + 3618: 0xBE1B, + 3619: 0xBE1E, + 3620: 0xBE20, + 3621: 0xBE21, + 3622: 0xBE22, + 3623: 0xBE23, + 3624: 0xBE24, + 3625: 0xBE25, + 3626: 0xBE26, + 3627: 0xBE27, + 3628: 0xBE28, + 3629: 0xBE29, + 3630: 0xBE2A, + 3631: 0xBE2B, + 3632: 0xBE2C, + 3633: 0xBE2D, + 3634: 0xBE2E, + 3635: 0xBE2F, + 3636: 0xBE30, + 3637: 0xBE31, + 3638: 0xBE32, + 3639: 0xBE33, + 3640: 0xBE34, + 3641: 0xBE35, + 3642: 0xBE36, + 3643: 0xBE37, + 3644: 0xBE38, + 3645: 0xBE39, + 3646: 0xBE3A, + 3647: 0xBE3B, + 3648: 0xBE3C, + 3649: 0xBE3D, + 3650: 0xBE3E, + 3651: 0xBE3F, + 3652: 0xBE40, + 3653: 0xBE41, + 3654: 0xBE42, + 3655: 0xBE43, + 3656: 0xBE46, + 3657: 0xBE47, + 3658: 0xBE49, + 3659: 0xBE4A, + 3660: 0xBE4B, + 3661: 0xBE4D, + 3662: 0xBE4F, + 3663: 0xBE50, + 3664: 0xBE51, + 3665: 0xBE52, + 3666: 0xBE53, + 3667: 0xBE56, + 3668: 0xBE58, + 3669: 0xBE5C, + 3670: 0xBE5D, + 3671: 0xBE5E, + 3672: 0xBE5F, + 3673: 0xBE62, + 3674: 0xBE63, + 3675: 0xBE65, + 3676: 0xBE66, + 3677: 0xBE67, + 3678: 0xBE69, + 3679: 0xBE6B, + 3680: 0xBE6C, + 3681: 0xBE6D, + 3682: 0xBE6E, + 3683: 0xBE6F, + 3684: 0xBE72, + 3685: 0xBE76, + 3686: 0xBE77, + 3687: 0xBE78, + 3688: 0xBE79, + 3689: 0xBE7A, + 3690: 0xBE7E, + 3691: 0xBE7F, + 3692: 0xBE81, + 3693: 0xBE82, + 3694: 0xBE83, + 3695: 0xBE85, + 3696: 0xBE86, + 3697: 0xBE87, + 3698: 0xBE88, + 3699: 0xBE89, + 3700: 0xBE8A, + 3701: 0xBE8B, + 3702: 0xBE8E, + 3703: 0xBE92, + 3704: 0xBE93, + 3705: 0xBE94, + 3706: 0xBE95, + 3707: 0xBE96, + 3708: 0xBE97, + 3709: 0xBE9A, + 3710: 0xBE9B, + 3711: 0xBE9C, + 3712: 0xBE9D, + 3713: 0xBE9E, + 3714: 0xBE9F, + 3715: 0xBEA0, + 3716: 0xBEA1, + 3717: 0xBEA2, + 3718: 0xBEA3, + 3719: 0xBEA4, + 3720: 0xBEA5, + 3721: 0xBEA6, + 3722: 0xBEA7, + 3723: 0xBEA9, + 3724: 0xBEAA, + 3725: 0xBEAB, + 3726: 0xBEAC, + 3727: 0xBEAD, + 3728: 0xBEAE, + 3729: 0xBEAF, + 3730: 0xBEB0, + 3731: 0xBEB1, + 3732: 0xBEB2, + 3733: 0xBEB3, + 3734: 0xBEB4, + 3735: 0xBEB5, + 3736: 0xBEB6, + 3737: 0xBEB7, + 3738: 0xBEB8, + 3739: 0xBEB9, + 3740: 0xBEBA, + 3741: 0xBEBB, + 3742: 0xBEBC, + 3743: 0xBEBD, + 3744: 0xBEBE, + 3745: 0xBEBF, + 3746: 0xBEC0, + 3747: 0xBEC1, + 3748: 0xBEC2, + 3749: 0xBEC3, + 3750: 0xBEC4, + 3751: 0xBEC5, + 3752: 0xBEC6, + 3753: 0xBEC7, + 3754: 0xBEC8, + 3755: 0xBEC9, + 3756: 0xBECA, + 3757: 0xBECB, + 3758: 0xBECC, + 3759: 0xBECD, + 3760: 0xBECE, + 3761: 0xBECF, + 3762: 0xBED2, + 3763: 0xBED3, + 3764: 0xBED5, + 3765: 0xBED6, + 3766: 0xBED9, + 3767: 0xBEDA, + 3768: 0xBEDB, + 3769: 0xBEDC, + 3770: 0xBEDD, + 3771: 0xBEDE, + 3772: 0xBEDF, + 3773: 0xBEE1, + 3774: 0xBEE2, + 3775: 0xBEE6, + 3776: 0xBEE7, + 3777: 0xBEE8, + 3778: 0xBEE9, + 3779: 0xBEEA, + 3780: 0xBEEB, + 3781: 0xBEED, + 3782: 0xBEEE, + 3783: 0xBEEF, + 3784: 0xBEF0, + 3785: 0xBEF1, + 3786: 0xBEF2, + 3787: 0xBEF3, + 3788: 0xBEF4, + 3789: 0xBEF5, + 3790: 0xBEF6, + 3791: 0xBEF7, + 3792: 0xBEF8, + 3793: 0xBEF9, + 3794: 0xBEFA, + 3795: 0xBEFB, + 3796: 0xBEFC, + 3797: 0xBEFD, + 3798: 0xBEFE, + 3799: 0xBEFF, + 3800: 0xBF00, + 3801: 0xBF02, + 3802: 0xBF03, + 3803: 0xBF04, + 3804: 0xBF05, + 3805: 0xBF06, + 3806: 0xBF07, + 3807: 0xBF0A, + 3808: 0xBF0B, + 3809: 0xBF0C, + 3810: 0xBF0D, + 3811: 0xBF0E, + 3812: 0xBF0F, + 3813: 0xBF10, + 3814: 0xBF11, + 3815: 0xBF12, + 3816: 0xBF13, + 3817: 0xBF14, + 3818: 0xBF15, + 3819: 0xBF16, + 3820: 0xBF17, + 3821: 0xBF1A, + 3822: 0xBF1E, + 3823: 0xBF1F, + 3824: 0xBF20, + 3825: 0xBF21, + 3826: 0xBF22, + 3827: 0xBF23, + 3828: 0xBF24, + 3829: 0xBF25, + 3830: 0xBF26, + 3831: 0xBF27, + 3832: 0xBF28, + 3833: 0xBF29, + 3834: 0xBF2A, + 3835: 0xBF2B, + 3836: 0xBF2C, + 3837: 0xBF2D, + 3838: 0xBF2E, + 3839: 0xBF2F, + 3840: 0xBF30, + 3841: 0xBF31, + 3842: 0xBF32, + 3843: 0xBF33, + 3844: 0xBF34, + 3845: 0xBF35, + 3846: 0xBF36, + 3847: 0xBF37, + 3848: 0xBF38, + 3849: 0xBF39, + 3850: 0xBF3A, + 3851: 0xBF3B, + 3852: 0xBF3C, + 3853: 0xBF3D, + 3854: 0xBF3E, + 3855: 0xBF3F, + 3856: 0xBF42, + 3857: 0xBF43, + 3858: 0xBF45, + 3859: 0xBF46, + 3860: 0xBF47, + 3861: 0xBF49, + 3862: 0xBF4A, + 3863: 0xBF4B, + 3864: 0xBF4C, + 3865: 0xBF4D, + 3866: 0xBF4E, + 3867: 0xBF4F, + 3868: 0xBF52, + 3869: 0xBF53, + 3870: 0xBF54, + 3871: 0xBF56, + 3872: 0xBF57, + 3873: 0xBF58, + 3874: 0xBF59, + 3875: 0xBF5A, + 3876: 0xBF5B, + 3877: 0xBF5C, + 3878: 0xBF5D, + 3879: 0xBF5E, + 3880: 0xBF5F, + 3881: 0xBF60, + 3882: 0xBF61, + 3883: 0xBF62, + 3884: 0xBF63, + 3885: 0xBF64, + 3886: 0xBF65, + 3887: 0xBF66, + 3888: 0xBF67, + 3889: 0xBF68, + 3890: 0xBF69, + 3891: 0xBF6A, + 3892: 0xBF6B, + 3893: 0xBF6C, + 3894: 0xBF6D, + 3895: 0xBF6E, + 3896: 0xBF6F, + 3897: 0xBF70, + 3898: 0xBF71, + 3899: 0xBF72, + 3900: 0xBF73, + 3901: 0xBF74, + 3902: 0xBF75, + 3903: 0xBF76, + 3904: 0xBF77, + 3905: 0xBF78, + 3906: 0xBF79, + 3907: 0xBF7A, + 3908: 0xBF7B, + 3909: 0xBF7C, + 3910: 0xBF7D, + 3911: 0xBF7E, + 3912: 0xBF7F, + 3913: 0xBF80, + 3914: 0xBF81, + 3915: 0xBF82, + 3916: 0xBF83, + 3917: 0xBF84, + 3918: 0xBF85, + 3919: 0xBF86, + 3920: 0xBF87, + 3921: 0xBF88, + 3922: 0xBF89, + 3923: 0xBF8A, + 3924: 0xBF8B, + 3925: 0xBF8C, + 3926: 0xBF8D, + 3927: 0xBF8E, + 3928: 0xBF8F, + 3929: 0xBF90, + 3930: 0xBF91, + 3931: 0xBF92, + 3932: 0xBF93, + 3933: 0xBF95, + 3934: 0xBF96, + 3935: 0xBF97, + 3936: 0xBF98, + 3937: 0xBF99, + 3938: 0xBF9A, + 3939: 0xBF9B, + 3940: 0xBF9C, + 3941: 0xBF9D, + 3942: 0xBF9E, + 3943: 0xBF9F, + 3944: 0xBFA0, + 3945: 0xBFA1, + 3946: 0xBFA2, + 3947: 0xBFA3, + 3948: 0xBFA4, + 3949: 0xBFA5, + 3950: 0xBFA6, + 3951: 0xBFA7, + 3952: 0xBFA8, + 3953: 0xBFA9, + 3954: 0xBFAA, + 3955: 0xBFAB, + 3956: 0xBFAC, + 3957: 0xBFAD, + 3958: 0xBFAE, + 3959: 0xBFAF, + 3960: 0xBFB1, + 3961: 0xBFB2, + 3962: 0xBFB3, + 3963: 0xBFB4, + 3964: 0xBFB5, + 3965: 0xBFB6, + 3966: 0xBFB7, + 3967: 0xBFB8, + 3968: 0xBFB9, + 3969: 0xBFBA, + 3970: 0xBFBB, + 3971: 0xBFBC, + 3972: 0xBFBD, + 3973: 0xBFBE, + 3974: 0xBFBF, + 3975: 0xBFC0, + 3976: 0xBFC1, + 3977: 0xBFC2, + 3978: 0xBFC3, + 3979: 0xBFC4, + 3980: 0xBFC6, + 3981: 0xBFC7, + 3982: 0xBFC8, + 3983: 0xBFC9, + 3984: 0xBFCA, + 3985: 0xBFCB, + 3986: 0xBFCE, + 3987: 0xBFCF, + 3988: 0xBFD1, + 3989: 0xBFD2, + 3990: 0xBFD3, + 3991: 0xBFD5, + 3992: 0xBFD6, + 3993: 0xBFD7, + 3994: 0xBFD8, + 3995: 0xBFD9, + 3996: 0xBFDA, + 3997: 0xBFDB, + 3998: 0xBFDD, + 3999: 0xBFDE, + 4000: 0xBFE0, + 4001: 0xBFE2, + 4002: 0xBFE3, + 4003: 0xBFE4, + 4004: 0xBFE5, + 4005: 0xBFE6, + 4006: 0xBFE7, + 4007: 0xBFE8, + 4008: 0xBFE9, + 4009: 0xBFEA, + 4010: 0xBFEB, + 4011: 0xBFEC, + 4012: 0xBFED, + 4013: 0xBFEE, + 4014: 0xBFEF, + 4015: 0xBFF0, + 4016: 0xBFF1, + 4017: 0xBFF2, + 4018: 0xBFF3, + 4019: 0xBFF4, + 4020: 0xBFF5, + 4021: 0xBFF6, + 4022: 0xBFF7, + 4023: 0xBFF8, + 4024: 0xBFF9, + 4025: 0xBFFA, + 4026: 0xBFFB, + 4027: 0xBFFC, + 4028: 0xBFFD, + 4029: 0xBFFE, + 4030: 0xBFFF, + 4031: 0xC000, + 4032: 0xC001, + 4033: 0xC002, + 4034: 0xC003, + 4035: 0xC004, + 4036: 0xC005, + 4037: 0xC006, + 4038: 0xC007, + 4039: 0xC008, + 4040: 0xC009, + 4041: 0xC00A, + 4042: 0xC00B, + 4043: 0xC00C, + 4044: 0xC00D, + 4045: 0xC00E, + 4046: 0xC00F, + 4047: 0xC010, + 4048: 0xC011, + 4049: 0xC012, + 4050: 0xC013, + 4051: 0xC014, + 4052: 0xC015, + 4053: 0xC016, + 4054: 0xC017, + 4055: 0xC018, + 4056: 0xC019, + 4057: 0xC01A, + 4058: 0xC01B, + 4059: 0xC01C, + 4060: 0xC01D, + 4061: 0xC01E, + 4062: 0xC01F, + 4063: 0xC020, + 4064: 0xC021, + 4065: 0xC022, + 4066: 0xC023, + 4067: 0xC024, + 4068: 0xC025, + 4069: 0xC026, + 4070: 0xC027, + 4071: 0xC028, + 4072: 0xC029, + 4073: 0xC02A, + 4074: 0xC02B, + 4075: 0xC02C, + 4076: 0xC02D, + 4077: 0xC02E, + 4078: 0xC02F, + 4079: 0xC030, + 4080: 0xC031, + 4081: 0xC032, + 4082: 0xC033, + 4083: 0xC034, + 4084: 0xC035, + 4085: 0xC036, + 4086: 0xC037, + 4087: 0xC038, + 4088: 0xC039, + 4089: 0xC03A, + 4090: 0xC03B, + 4091: 0xC03D, + 4092: 0xC03E, + 4093: 0xC03F, + 4094: 0xC040, + 4095: 0xC041, + 4096: 0xC042, + 4097: 0xC043, + 4098: 0xC044, + 4099: 0xC045, + 4100: 0xC046, + 4101: 0xC047, + 4102: 0xC048, + 4103: 0xC049, + 4104: 0xC04A, + 4105: 0xC04B, + 4106: 0xC04C, + 4107: 0xC04D, + 4108: 0xC04E, + 4109: 0xC04F, + 4110: 0xC050, + 4111: 0xC052, + 4112: 0xC053, + 4113: 0xC054, + 4114: 0xC055, + 4115: 0xC056, + 4116: 0xC057, + 4117: 0xC059, + 4118: 0xC05A, + 4119: 0xC05B, + 4120: 0xC05D, + 4121: 0xC05E, + 4122: 0xC05F, + 4123: 0xC061, + 4124: 0xC062, + 4125: 0xC063, + 4126: 0xC064, + 4127: 0xC065, + 4128: 0xC066, + 4129: 0xC067, + 4130: 0xC06A, + 4131: 0xC06B, + 4132: 0xC06C, + 4133: 0xC06D, + 4134: 0xC06E, + 4135: 0xC06F, + 4136: 0xC070, + 4137: 0xC071, + 4138: 0xC072, + 4139: 0xC073, + 4140: 0xC074, + 4141: 0xC075, + 4142: 0xC076, + 4143: 0xC077, + 4144: 0xC078, + 4145: 0xC079, + 4146: 0xC07A, + 4147: 0xC07B, + 4148: 0xC07C, + 4149: 0xC07D, + 4150: 0xC07E, + 4151: 0xC07F, + 4152: 0xC080, + 4153: 0xC081, + 4154: 0xC082, + 4155: 0xC083, + 4156: 0xC084, + 4157: 0xC085, + 4158: 0xC086, + 4159: 0xC087, + 4160: 0xC088, + 4161: 0xC089, + 4162: 0xC08A, + 4163: 0xC08B, + 4164: 0xC08C, + 4165: 0xC08D, + 4166: 0xC08E, + 4167: 0xC08F, + 4168: 0xC092, + 4169: 0xC093, + 4170: 0xC095, + 4171: 0xC096, + 4172: 0xC097, + 4173: 0xC099, + 4174: 0xC09A, + 4175: 0xC09B, + 4176: 0xC09C, + 4177: 0xC09D, + 4178: 0xC09E, + 4179: 0xC09F, + 4180: 0xC0A2, + 4181: 0xC0A4, + 4182: 0xC0A6, + 4183: 0xC0A7, + 4184: 0xC0A8, + 4185: 0xC0A9, + 4186: 0xC0AA, + 4187: 0xC0AB, + 4188: 0xC0AE, + 4189: 0xC0B1, + 4190: 0xC0B2, + 4191: 0xC0B7, + 4192: 0xC0B8, + 4193: 0xC0B9, + 4194: 0xC0BA, + 4195: 0xC0BB, + 4196: 0xC0BE, + 4197: 0xC0C2, + 4198: 0xC0C3, + 4199: 0xC0C4, + 4200: 0xC0C6, + 4201: 0xC0C7, + 4202: 0xC0CA, + 4203: 0xC0CB, + 4204: 0xC0CD, + 4205: 0xC0CE, + 4206: 0xC0CF, + 4207: 0xC0D1, + 4208: 0xC0D2, + 4209: 0xC0D3, + 4210: 0xC0D4, + 4211: 0xC0D5, + 4212: 0xC0D6, + 4213: 0xC0D7, + 4214: 0xC0DA, + 4215: 0xC0DE, + 4216: 0xC0DF, + 4217: 0xC0E0, + 4218: 0xC0E1, + 4219: 0xC0E2, + 4220: 0xC0E3, + 4221: 0xC0E6, + 4222: 0xC0E7, + 4223: 0xC0E9, + 4224: 0xC0EA, + 4225: 0xC0EB, + 4226: 0xC0ED, + 4227: 0xC0EE, + 4228: 0xC0EF, + 4229: 0xC0F0, + 4230: 0xC0F1, + 4231: 0xC0F2, + 4232: 0xC0F3, + 4233: 0xC0F6, + 4234: 0xC0F8, + 4235: 0xC0FA, + 4236: 0xC0FB, + 4237: 0xC0FC, + 4238: 0xC0FD, + 4239: 0xC0FE, + 4240: 0xC0FF, + 4241: 0xC101, + 4242: 0xC102, + 4243: 0xC103, + 4244: 0xC105, + 4245: 0xC106, + 4246: 0xC107, + 4247: 0xC109, + 4248: 0xC10A, + 4249: 0xC10B, + 4250: 0xC10C, + 4251: 0xC10D, + 4252: 0xC10E, + 4253: 0xC10F, + 4254: 0xC111, + 4255: 0xC112, + 4256: 0xC113, + 4257: 0xC114, + 4258: 0xC116, + 4259: 0xC117, + 4260: 0xC118, + 4261: 0xC119, + 4262: 0xC11A, + 4263: 0xC11B, + 4264: 0xC121, + 4265: 0xC122, + 4266: 0xC125, + 4267: 0xC128, + 4268: 0xC129, + 4269: 0xC12A, + 4270: 0xC12B, + 4271: 0xC12E, + 4272: 0xC132, + 4273: 0xC133, + 4274: 0xC134, + 4275: 0xC135, + 4276: 0xC137, + 4277: 0xC13A, + 4278: 0xC13B, + 4279: 0xC13D, + 4280: 0xC13E, + 4281: 0xC13F, + 4282: 0xC141, + 4283: 0xC142, + 4284: 0xC143, + 4285: 0xC144, + 4286: 0xC145, + 4287: 0xC146, + 4288: 0xC147, + 4289: 0xC14A, + 4290: 0xC14E, + 4291: 0xC14F, + 4292: 0xC150, + 4293: 0xC151, + 4294: 0xC152, + 4295: 0xC153, + 4296: 0xC156, + 4297: 0xC157, + 4298: 0xC159, + 4299: 0xC15A, + 4300: 0xC15B, + 4301: 0xC15D, + 4302: 0xC15E, + 4303: 0xC15F, + 4304: 0xC160, + 4305: 0xC161, + 4306: 0xC162, + 4307: 0xC163, + 4308: 0xC166, + 4309: 0xC16A, + 4310: 0xC16B, + 4311: 0xC16C, + 4312: 0xC16D, + 4313: 0xC16E, + 4314: 0xC16F, + 4315: 0xC171, + 4316: 0xC172, + 4317: 0xC173, + 4318: 0xC175, + 4319: 0xC176, + 4320: 0xC177, + 4321: 0xC179, + 4322: 0xC17A, + 4323: 0xC17B, + 4324: 0xC17C, + 4325: 0xC17D, + 4326: 0xC17E, + 4327: 0xC17F, + 4328: 0xC180, + 4329: 0xC181, + 4330: 0xC182, + 4331: 0xC183, + 4332: 0xC184, + 4333: 0xC186, + 4334: 0xC187, + 4335: 0xC188, + 4336: 0xC189, + 4337: 0xC18A, + 4338: 0xC18B, + 4339: 0xC18F, + 4340: 0xC191, + 4341: 0xC192, + 4342: 0xC193, + 4343: 0xC195, + 4344: 0xC197, + 4345: 0xC198, + 4346: 0xC199, + 4347: 0xC19A, + 4348: 0xC19B, + 4349: 0xC19E, + 4350: 0xC1A0, + 4351: 0xC1A2, + 4352: 0xC1A3, + 4353: 0xC1A4, + 4354: 0xC1A6, + 4355: 0xC1A7, + 4356: 0xC1AA, + 4357: 0xC1AB, + 4358: 0xC1AD, + 4359: 0xC1AE, + 4360: 0xC1AF, + 4361: 0xC1B1, + 4362: 0xC1B2, + 4363: 0xC1B3, + 4364: 0xC1B4, + 4365: 0xC1B5, + 4366: 0xC1B6, + 4367: 0xC1B7, + 4368: 0xC1B8, + 4369: 0xC1B9, + 4370: 0xC1BA, + 4371: 0xC1BB, + 4372: 0xC1BC, + 4373: 0xC1BE, + 4374: 0xC1BF, + 4375: 0xC1C0, + 4376: 0xC1C1, + 4377: 0xC1C2, + 4378: 0xC1C3, + 4379: 0xC1C5, + 4380: 0xC1C6, + 4381: 0xC1C7, + 4382: 0xC1C9, + 4383: 0xC1CA, + 4384: 0xC1CB, + 4385: 0xC1CD, + 4386: 0xC1CE, + 4387: 0xC1CF, + 4388: 0xC1D0, + 4389: 0xC1D1, + 4390: 0xC1D2, + 4391: 0xC1D3, + 4392: 0xC1D5, + 4393: 0xC1D6, + 4394: 0xC1D9, + 4395: 0xC1DA, + 4396: 0xC1DB, + 4397: 0xC1DC, + 4398: 0xC1DD, + 4399: 0xC1DE, + 4400: 0xC1DF, + 4401: 0xC1E1, + 4402: 0xC1E2, + 4403: 0xC1E3, + 4404: 0xC1E5, + 4405: 0xC1E6, + 4406: 0xC1E7, + 4407: 0xC1E9, + 4408: 0xC1EA, + 4409: 0xC1EB, + 4410: 0xC1EC, + 4411: 0xC1ED, + 4412: 0xC1EE, + 4413: 0xC1EF, + 4414: 0xC1F2, + 4415: 0xC1F4, + 4416: 0xC1F5, + 4417: 0xC1F6, + 4418: 0xC1F7, + 4419: 0xC1F8, + 4420: 0xC1F9, + 4421: 0xC1FA, + 4422: 0xC1FB, + 4423: 0xC1FE, + 4424: 0xC1FF, + 4425: 0xC201, + 4426: 0xC202, + 4427: 0xC203, + 4428: 0xC205, + 4429: 0xC206, + 4430: 0xC207, + 4431: 0xC208, + 4432: 0xC209, + 4433: 0xC20A, + 4434: 0xC20B, + 4435: 0xC20E, + 4436: 0xC210, + 4437: 0xC212, + 4438: 0xC213, + 4439: 0xC214, + 4440: 0xC215, + 4441: 0xC216, + 4442: 0xC217, + 4443: 0xC21A, + 4444: 0xC21B, + 4445: 0xC21D, + 4446: 0xC21E, + 4447: 0xC221, + 4448: 0xC222, + 4449: 0xC223, + 4450: 0xC224, + 4451: 0xC225, + 4452: 0xC226, + 4453: 0xC227, + 4454: 0xC22A, + 4455: 0xC22C, + 4456: 0xC22E, + 4457: 0xC230, + 4458: 0xC233, + 4459: 0xC235, + 4460: 0xC236, + 4461: 0xC237, + 4462: 0xC238, + 4463: 0xC239, + 4464: 0xC23A, + 4465: 0xC23B, + 4466: 0xC23C, + 4467: 0xC23D, + 4468: 0xC23E, + 4469: 0xC23F, + 4470: 0xC240, + 4471: 0xC241, + 4472: 0xC242, + 4473: 0xC243, + 4474: 0xC244, + 4475: 0xC245, + 4476: 0xC246, + 4477: 0xC247, + 4478: 0xC249, + 4479: 0xC24A, + 4480: 0xC24B, + 4481: 0xC24C, + 4482: 0xC24D, + 4483: 0xC24E, + 4484: 0xC24F, + 4485: 0xC252, + 4486: 0xC253, + 4487: 0xC255, + 4488: 0xC256, + 4489: 0xC257, + 4490: 0xC259, + 4491: 0xC25A, + 4492: 0xC25B, + 4493: 0xC25C, + 4494: 0xC25D, + 4495: 0xC25E, + 4496: 0xC25F, + 4497: 0xC261, + 4498: 0xC262, + 4499: 0xC263, + 4500: 0xC264, + 4501: 0xC266, + 4502: 0xC267, + 4503: 0xC268, + 4504: 0xC269, + 4505: 0xC26A, + 4506: 0xC26B, + 4507: 0xC26E, + 4508: 0xC26F, + 4509: 0xC271, + 4510: 0xC272, + 4511: 0xC273, + 4512: 0xC275, + 4513: 0xC276, + 4514: 0xC277, + 4515: 0xC278, + 4516: 0xC279, + 4517: 0xC27A, + 4518: 0xC27B, + 4519: 0xC27E, + 4520: 0xC280, + 4521: 0xC282, + 4522: 0xC283, + 4523: 0xC284, + 4524: 0xC285, + 4525: 0xC286, + 4526: 0xC287, + 4527: 0xC28A, + 4528: 0xC28B, + 4529: 0xC28C, + 4530: 0xC28D, + 4531: 0xC28E, + 4532: 0xC28F, + 4533: 0xC291, + 4534: 0xC292, + 4535: 0xC293, + 4536: 0xC294, + 4537: 0xC295, + 4538: 0xC296, + 4539: 0xC297, + 4540: 0xC299, + 4541: 0xC29A, + 4542: 0xC29C, + 4543: 0xC29E, + 4544: 0xC29F, + 4545: 0xC2A0, + 4546: 0xC2A1, + 4547: 0xC2A2, + 4548: 0xC2A3, + 4549: 0xC2A6, + 4550: 0xC2A7, + 4551: 0xC2A9, + 4552: 0xC2AA, + 4553: 0xC2AB, + 4554: 0xC2AE, + 4555: 0xC2AF, + 4556: 0xC2B0, + 4557: 0xC2B1, + 4558: 0xC2B2, + 4559: 0xC2B3, + 4560: 0xC2B6, + 4561: 0xC2B8, + 4562: 0xC2BA, + 4563: 0xC2BB, + 4564: 0xC2BC, + 4565: 0xC2BD, + 4566: 0xC2BE, + 4567: 0xC2BF, + 4568: 0xC2C0, + 4569: 0xC2C1, + 4570: 0xC2C2, + 4571: 0xC2C3, + 4572: 0xC2C4, + 4573: 0xC2C5, + 4574: 0xC2C6, + 4575: 0xC2C7, + 4576: 0xC2C8, + 4577: 0xC2C9, + 4578: 0xC2CA, + 4579: 0xC2CB, + 4580: 0xC2CC, + 4581: 0xC2CD, + 4582: 0xC2CE, + 4583: 0xC2CF, + 4584: 0xC2D0, + 4585: 0xC2D1, + 4586: 0xC2D2, + 4587: 0xC2D3, + 4588: 0xC2D4, + 4589: 0xC2D5, + 4590: 0xC2D6, + 4591: 0xC2D7, + 4592: 0xC2D8, + 4593: 0xC2D9, + 4594: 0xC2DA, + 4595: 0xC2DB, + 4596: 0xC2DE, + 4597: 0xC2DF, + 4598: 0xC2E1, + 4599: 0xC2E2, + 4600: 0xC2E5, + 4601: 0xC2E6, + 4602: 0xC2E7, + 4603: 0xC2E8, + 4604: 0xC2E9, + 4605: 0xC2EA, + 4606: 0xC2EE, + 4607: 0xC2F0, + 4608: 0xC2F2, + 4609: 0xC2F3, + 4610: 0xC2F4, + 4611: 0xC2F5, + 4612: 0xC2F7, + 4613: 0xC2FA, + 4614: 0xC2FD, + 4615: 0xC2FE, + 4616: 0xC2FF, + 4617: 0xC301, + 4618: 0xC302, + 4619: 0xC303, + 4620: 0xC304, + 4621: 0xC305, + 4622: 0xC306, + 4623: 0xC307, + 4624: 0xC30A, + 4625: 0xC30B, + 4626: 0xC30E, + 4627: 0xC30F, + 4628: 0xC310, + 4629: 0xC311, + 4630: 0xC312, + 4631: 0xC316, + 4632: 0xC317, + 4633: 0xC319, + 4634: 0xC31A, + 4635: 0xC31B, + 4636: 0xC31D, + 4637: 0xC31E, + 4638: 0xC31F, + 4639: 0xC320, + 4640: 0xC321, + 4641: 0xC322, + 4642: 0xC323, + 4643: 0xC326, + 4644: 0xC327, + 4645: 0xC32A, + 4646: 0xC32B, + 4647: 0xC32C, + 4648: 0xC32D, + 4649: 0xC32E, + 4650: 0xC32F, + 4651: 0xC330, + 4652: 0xC331, + 4653: 0xC332, + 4654: 0xC333, + 4655: 0xC334, + 4656: 0xC335, + 4657: 0xC336, + 4658: 0xC337, + 4659: 0xC338, + 4660: 0xC339, + 4661: 0xC33A, + 4662: 0xC33B, + 4663: 0xC33C, + 4664: 0xC33D, + 4665: 0xC33E, + 4666: 0xC33F, + 4667: 0xC340, + 4668: 0xC341, + 4669: 0xC342, + 4670: 0xC343, + 4671: 0xC344, + 4672: 0xC346, + 4673: 0xC347, + 4674: 0xC348, + 4675: 0xC349, + 4676: 0xC34A, + 4677: 0xC34B, + 4678: 0xC34C, + 4679: 0xC34D, + 4680: 0xC34E, + 4681: 0xC34F, + 4682: 0xC350, + 4683: 0xC351, + 4684: 0xC352, + 4685: 0xC353, + 4686: 0xC354, + 4687: 0xC355, + 4688: 0xC356, + 4689: 0xC357, + 4690: 0xC358, + 4691: 0xC359, + 4692: 0xC35A, + 4693: 0xC35B, + 4694: 0xC35C, + 4695: 0xC35D, + 4696: 0xC35E, + 4697: 0xC35F, + 4698: 0xC360, + 4699: 0xC361, + 4700: 0xC362, + 4701: 0xC363, + 4702: 0xC364, + 4703: 0xC365, + 4704: 0xC366, + 4705: 0xC367, + 4706: 0xC36A, + 4707: 0xC36B, + 4708: 0xC36D, + 4709: 0xC36E, + 4710: 0xC36F, + 4711: 0xC371, + 4712: 0xC373, + 4713: 0xC374, + 4714: 0xC375, + 4715: 0xC376, + 4716: 0xC377, + 4717: 0xC37A, + 4718: 0xC37B, + 4719: 0xC37E, + 4720: 0xC37F, + 4721: 0xC380, + 4722: 0xC381, + 4723: 0xC382, + 4724: 0xC383, + 4725: 0xC385, + 4726: 0xC386, + 4727: 0xC387, + 4728: 0xC389, + 4729: 0xC38A, + 4730: 0xC38B, + 4731: 0xC38D, + 4732: 0xC38E, + 4733: 0xC38F, + 4734: 0xC390, + 4735: 0xC391, + 4736: 0xC392, + 4737: 0xC393, + 4738: 0xC394, + 4739: 0xC395, + 4740: 0xC396, + 4741: 0xC397, + 4742: 0xC398, + 4743: 0xC399, + 4744: 0xC39A, + 4745: 0xC39B, + 4746: 0xC39C, + 4747: 0xC39D, + 4748: 0xC39E, + 4749: 0xC39F, + 4750: 0xC3A0, + 4751: 0xC3A1, + 4752: 0xC3A2, + 4753: 0xC3A3, + 4754: 0xC3A4, + 4755: 0xC3A5, + 4756: 0xC3A6, + 4757: 0xC3A7, + 4758: 0xC3A8, + 4759: 0xC3A9, + 4760: 0xC3AA, + 4761: 0xC3AB, + 4762: 0xC3AC, + 4763: 0xC3AD, + 4764: 0xC3AE, + 4765: 0xC3AF, + 4766: 0xC3B0, + 4767: 0xC3B1, + 4768: 0xC3B2, + 4769: 0xC3B3, + 4770: 0xC3B4, + 4771: 0xC3B5, + 4772: 0xC3B6, + 4773: 0xC3B7, + 4774: 0xC3B8, + 4775: 0xC3B9, + 4776: 0xC3BA, + 4777: 0xC3BB, + 4778: 0xC3BC, + 4779: 0xC3BD, + 4780: 0xC3BE, + 4781: 0xC3BF, + 4782: 0xC3C1, + 4783: 0xC3C2, + 4784: 0xC3C3, + 4785: 0xC3C4, + 4786: 0xC3C5, + 4787: 0xC3C6, + 4788: 0xC3C7, + 4789: 0xC3C8, + 4790: 0xC3C9, + 4791: 0xC3CA, + 4792: 0xC3CB, + 4793: 0xC3CC, + 4794: 0xC3CD, + 4795: 0xC3CE, + 4796: 0xC3CF, + 4797: 0xC3D0, + 4798: 0xC3D1, + 4799: 0xC3D2, + 4800: 0xC3D3, + 4801: 0xC3D4, + 4802: 0xC3D5, + 4803: 0xC3D6, + 4804: 0xC3D7, + 4805: 0xC3DA, + 4806: 0xC3DB, + 4807: 0xC3DD, + 4808: 0xC3DE, + 4809: 0xC3E1, + 4810: 0xC3E3, + 4811: 0xC3E4, + 4812: 0xC3E5, + 4813: 0xC3E6, + 4814: 0xC3E7, + 4815: 0xC3EA, + 4816: 0xC3EB, + 4817: 0xC3EC, + 4818: 0xC3EE, + 4819: 0xC3EF, + 4820: 0xC3F0, + 4821: 0xC3F1, + 4822: 0xC3F2, + 4823: 0xC3F3, + 4824: 0xC3F6, + 4825: 0xC3F7, + 4826: 0xC3F9, + 4827: 0xC3FA, + 4828: 0xC3FB, + 4829: 0xC3FC, + 4830: 0xC3FD, + 4831: 0xC3FE, + 4832: 0xC3FF, + 4833: 0xC400, + 4834: 0xC401, + 4835: 0xC402, + 4836: 0xC403, + 4837: 0xC404, + 4838: 0xC405, + 4839: 0xC406, + 4840: 0xC407, + 4841: 0xC409, + 4842: 0xC40A, + 4843: 0xC40B, + 4844: 0xC40C, + 4845: 0xC40D, + 4846: 0xC40E, + 4847: 0xC40F, + 4848: 0xC411, + 4849: 0xC412, + 4850: 0xC413, + 4851: 0xC414, + 4852: 0xC415, + 4853: 0xC416, + 4854: 0xC417, + 4855: 0xC418, + 4856: 0xC419, + 4857: 0xC41A, + 4858: 0xC41B, + 4859: 0xC41C, + 4860: 0xC41D, + 4861: 0xC41E, + 4862: 0xC41F, + 4863: 0xC420, + 4864: 0xC421, + 4865: 0xC422, + 4866: 0xC423, + 4867: 0xC425, + 4868: 0xC426, + 4869: 0xC427, + 4870: 0xC428, + 4871: 0xC429, + 4872: 0xC42A, + 4873: 0xC42B, + 4874: 0xC42D, + 4875: 0xC42E, + 4876: 0xC42F, + 4877: 0xC431, + 4878: 0xC432, + 4879: 0xC433, + 4880: 0xC435, + 4881: 0xC436, + 4882: 0xC437, + 4883: 0xC438, + 4884: 0xC439, + 4885: 0xC43A, + 4886: 0xC43B, + 4887: 0xC43E, + 4888: 0xC43F, + 4889: 0xC440, + 4890: 0xC441, + 4891: 0xC442, + 4892: 0xC443, + 4893: 0xC444, + 4894: 0xC445, + 4895: 0xC446, + 4896: 0xC447, + 4897: 0xC449, + 4898: 0xC44A, + 4899: 0xC44B, + 4900: 0xC44C, + 4901: 0xC44D, + 4902: 0xC44E, + 4903: 0xC44F, + 4904: 0xC450, + 4905: 0xC451, + 4906: 0xC452, + 4907: 0xC453, + 4908: 0xC454, + 4909: 0xC455, + 4910: 0xC456, + 4911: 0xC457, + 4912: 0xC458, + 4913: 0xC459, + 4914: 0xC45A, + 4915: 0xC45B, + 4916: 0xC45C, + 4917: 0xC45D, + 4918: 0xC45E, + 4919: 0xC45F, + 4920: 0xC460, + 4921: 0xC461, + 4922: 0xC462, + 4923: 0xC463, + 4924: 0xC466, + 4925: 0xC467, + 4926: 0xC469, + 4927: 0xC46A, + 4928: 0xC46B, + 4929: 0xC46D, + 4930: 0xC46E, + 4931: 0xC46F, + 4932: 0xC470, + 4933: 0xC471, + 4934: 0xC472, + 4935: 0xC473, + 4936: 0xC476, + 4937: 0xC477, + 4938: 0xC478, + 4939: 0xC47A, + 4940: 0xC47B, + 4941: 0xC47C, + 4942: 0xC47D, + 4943: 0xC47E, + 4944: 0xC47F, + 4945: 0xC481, + 4946: 0xC482, + 4947: 0xC483, + 4948: 0xC484, + 4949: 0xC485, + 4950: 0xC486, + 4951: 0xC487, + 4952: 0xC488, + 4953: 0xC489, + 4954: 0xC48A, + 4955: 0xC48B, + 4956: 0xC48C, + 4957: 0xC48D, + 4958: 0xC48E, + 4959: 0xC48F, + 4960: 0xC490, + 4961: 0xC491, + 4962: 0xC492, + 4963: 0xC493, + 4964: 0xC495, + 4965: 0xC496, + 4966: 0xC497, + 4967: 0xC498, + 4968: 0xC499, + 4969: 0xC49A, + 4970: 0xC49B, + 4971: 0xC49D, + 4972: 0xC49E, + 4973: 0xC49F, + 4974: 0xC4A0, + 4975: 0xC4A1, + 4976: 0xC4A2, + 4977: 0xC4A3, + 4978: 0xC4A4, + 4979: 0xC4A5, + 4980: 0xC4A6, + 4981: 0xC4A7, + 4982: 0xC4A8, + 4983: 0xC4A9, + 4984: 0xC4AA, + 4985: 0xC4AB, + 4986: 0xC4AC, + 4987: 0xC4AD, + 4988: 0xC4AE, + 4989: 0xC4AF, + 4990: 0xC4B0, + 4991: 0xC4B1, + 4992: 0xC4B2, + 4993: 0xC4B3, + 4994: 0xC4B4, + 4995: 0xC4B5, + 4996: 0xC4B6, + 4997: 0xC4B7, + 4998: 0xC4B9, + 4999: 0xC4BA, + 5000: 0xC4BB, + 5001: 0xC4BD, + 5002: 0xC4BE, + 5003: 0xC4BF, + 5004: 0xC4C0, + 5005: 0xC4C1, + 5006: 0xC4C2, + 5007: 0xC4C3, + 5008: 0xC4C4, + 5009: 0xC4C5, + 5010: 0xC4C6, + 5011: 0xC4C7, + 5012: 0xC4C8, + 5013: 0xC4C9, + 5014: 0xC4CA, + 5015: 0xC4CB, + 5016: 0xC4CC, + 5017: 0xC4CD, + 5018: 0xC4CE, + 5019: 0xC4CF, + 5020: 0xC4D0, + 5021: 0xC4D1, + 5022: 0xC4D2, + 5023: 0xC4D3, + 5024: 0xC4D4, + 5025: 0xC4D5, + 5026: 0xC4D6, + 5027: 0xC4D7, + 5028: 0xC4D8, + 5029: 0xC4D9, + 5030: 0xC4DA, + 5031: 0xC4DB, + 5032: 0xC4DC, + 5033: 0xC4DD, + 5034: 0xC4DE, + 5035: 0xC4DF, + 5036: 0xC4E0, + 5037: 0xC4E1, + 5038: 0xC4E2, + 5039: 0xC4E3, + 5040: 0xC4E4, + 5041: 0xC4E5, + 5042: 0xC4E6, + 5043: 0xC4E7, + 5044: 0xC4E8, + 5045: 0xC4EA, + 5046: 0xC4EB, + 5047: 0xC4EC, + 5048: 0xC4ED, + 5049: 0xC4EE, + 5050: 0xC4EF, + 5051: 0xC4F2, + 5052: 0xC4F3, + 5053: 0xC4F5, + 5054: 0xC4F6, + 5055: 0xC4F7, + 5056: 0xC4F9, + 5057: 0xC4FB, + 5058: 0xC4FC, + 5059: 0xC4FD, + 5060: 0xC4FE, + 5061: 0xC502, + 5062: 0xC503, + 5063: 0xC504, + 5064: 0xC505, + 5065: 0xC506, + 5066: 0xC507, + 5067: 0xC508, + 5068: 0xC509, + 5069: 0xC50A, + 5070: 0xC50B, + 5071: 0xC50D, + 5072: 0xC50E, + 5073: 0xC50F, + 5074: 0xC511, + 5075: 0xC512, + 5076: 0xC513, + 5077: 0xC515, + 5078: 0xC516, + 5079: 0xC517, + 5080: 0xC518, + 5081: 0xC519, + 5082: 0xC51A, + 5083: 0xC51B, + 5084: 0xC51D, + 5085: 0xC51E, + 5086: 0xC51F, + 5087: 0xC520, + 5088: 0xC521, + 5089: 0xC522, + 5090: 0xC523, + 5091: 0xC524, + 5092: 0xC525, + 5093: 0xC526, + 5094: 0xC527, + 5095: 0xC52A, + 5096: 0xC52B, + 5097: 0xC52D, + 5098: 0xC52E, + 5099: 0xC52F, + 5100: 0xC531, + 5101: 0xC532, + 5102: 0xC533, + 5103: 0xC534, + 5104: 0xC535, + 5105: 0xC536, + 5106: 0xC537, + 5107: 0xC53A, + 5108: 0xC53C, + 5109: 0xC53E, + 5110: 0xC53F, + 5111: 0xC540, + 5112: 0xC541, + 5113: 0xC542, + 5114: 0xC543, + 5115: 0xC546, + 5116: 0xC547, + 5117: 0xC54B, + 5118: 0xC54F, + 5119: 0xC550, + 5120: 0xC551, + 5121: 0xC552, + 5122: 0xC556, + 5123: 0xC55A, + 5124: 0xC55B, + 5125: 0xC55C, + 5126: 0xC55F, + 5127: 0xC562, + 5128: 0xC563, + 5129: 0xC565, + 5130: 0xC566, + 5131: 0xC567, + 5132: 0xC569, + 5133: 0xC56A, + 5134: 0xC56B, + 5135: 0xC56C, + 5136: 0xC56D, + 5137: 0xC56E, + 5138: 0xC56F, + 5139: 0xC572, + 5140: 0xC576, + 5141: 0xC577, + 5142: 0xC578, + 5143: 0xC579, + 5144: 0xC57A, + 5145: 0xC57B, + 5146: 0xC57E, + 5147: 0xC57F, + 5148: 0xC581, + 5149: 0xC582, + 5150: 0xC583, + 5151: 0xC585, + 5152: 0xC586, + 5153: 0xC588, + 5154: 0xC589, + 5155: 0xC58A, + 5156: 0xC58B, + 5157: 0xC58E, + 5158: 0xC590, + 5159: 0xC592, + 5160: 0xC593, + 5161: 0xC594, + 5162: 0xC596, + 5163: 0xC599, + 5164: 0xC59A, + 5165: 0xC59B, + 5166: 0xC59D, + 5167: 0xC59E, + 5168: 0xC59F, + 5169: 0xC5A1, + 5170: 0xC5A2, + 5171: 0xC5A3, + 5172: 0xC5A4, + 5173: 0xC5A5, + 5174: 0xC5A6, + 5175: 0xC5A7, + 5176: 0xC5A8, + 5177: 0xC5AA, + 5178: 0xC5AB, + 5179: 0xC5AC, + 5180: 0xC5AD, + 5181: 0xC5AE, + 5182: 0xC5AF, + 5183: 0xC5B0, + 5184: 0xC5B1, + 5185: 0xC5B2, + 5186: 0xC5B3, + 5187: 0xC5B6, + 5188: 0xC5B7, + 5189: 0xC5BA, + 5190: 0xC5BF, + 5191: 0xC5C0, + 5192: 0xC5C1, + 5193: 0xC5C2, + 5194: 0xC5C3, + 5195: 0xC5CB, + 5196: 0xC5CD, + 5197: 0xC5CF, + 5198: 0xC5D2, + 5199: 0xC5D3, + 5200: 0xC5D5, + 5201: 0xC5D6, + 5202: 0xC5D7, + 5203: 0xC5D9, + 5204: 0xC5DA, + 5205: 0xC5DB, + 5206: 0xC5DC, + 5207: 0xC5DD, + 5208: 0xC5DE, + 5209: 0xC5DF, + 5210: 0xC5E2, + 5211: 0xC5E4, + 5212: 0xC5E6, + 5213: 0xC5E7, + 5214: 0xC5E8, + 5215: 0xC5E9, + 5216: 0xC5EA, + 5217: 0xC5EB, + 5218: 0xC5EF, + 5219: 0xC5F1, + 5220: 0xC5F2, + 5221: 0xC5F3, + 5222: 0xC5F5, + 5223: 0xC5F8, + 5224: 0xC5F9, + 5225: 0xC5FA, + 5226: 0xC5FB, + 5227: 0xC602, + 5228: 0xC603, + 5229: 0xC604, + 5230: 0xC609, + 5231: 0xC60A, + 5232: 0xC60B, + 5233: 0xC60D, + 5234: 0xC60E, + 5235: 0xC60F, + 5236: 0xC611, + 5237: 0xC612, + 5238: 0xC613, + 5239: 0xC614, + 5240: 0xC615, + 5241: 0xC616, + 5242: 0xC617, + 5243: 0xC61A, + 5244: 0xC61D, + 5245: 0xC61E, + 5246: 0xC61F, + 5247: 0xC620, + 5248: 0xC621, + 5249: 0xC622, + 5250: 0xC623, + 5251: 0xC626, + 5252: 0xC627, + 5253: 0xC629, + 5254: 0xC62A, + 5255: 0xC62B, + 5256: 0xC62F, + 5257: 0xC631, + 5258: 0xC632, + 5259: 0xC636, + 5260: 0xC638, + 5261: 0xC63A, + 5262: 0xC63C, + 5263: 0xC63D, + 5264: 0xC63E, + 5265: 0xC63F, + 5266: 0xC642, + 5267: 0xC643, + 5268: 0xC645, + 5269: 0xC646, + 5270: 0xC647, + 5271: 0xC649, + 5272: 0xC64A, + 5273: 0xC64B, + 5274: 0xC64C, + 5275: 0xC64D, + 5276: 0xC64E, + 5277: 0xC64F, + 5278: 0xC652, + 5279: 0xC656, + 5280: 0xC657, + 5281: 0xC658, + 5282: 0xC659, + 5283: 0xC65A, + 5284: 0xC65B, + 5285: 0xC65E, + 5286: 0xC65F, + 5287: 0xC661, + 5288: 0xC662, + 5289: 0xC663, + 5290: 0xC664, + 5291: 0xC665, + 5292: 0xC666, + 5293: 0xC667, + 5294: 0xC668, + 5295: 0xC669, + 5296: 0xC66A, + 5297: 0xC66B, + 5298: 0xC66D, + 5299: 0xC66E, + 5300: 0xC670, + 5301: 0xC672, + 5302: 0xC673, + 5303: 0xC674, + 5304: 0xC675, + 5305: 0xC676, + 5306: 0xC677, + 5307: 0xC67A, + 5308: 0xC67B, + 5309: 0xC67D, + 5310: 0xC67E, + 5311: 0xC67F, + 5312: 0xC681, + 5313: 0xC682, + 5314: 0xC683, + 5315: 0xC684, + 5316: 0xC685, + 5317: 0xC686, + 5318: 0xC687, + 5319: 0xC68A, + 5320: 0xC68C, + 5321: 0xC68E, + 5322: 0xC68F, + 5323: 0xC690, + 5324: 0xC691, + 5325: 0xC692, + 5326: 0xC693, + 5327: 0xC696, + 5328: 0xC697, + 5329: 0xC699, + 5330: 0xC69A, + 5331: 0xC69B, + 5332: 0xC69D, + 5333: 0xC69E, + 5334: 0xC69F, + 5335: 0xC6A0, + 5336: 0xC6A1, + 5337: 0xC6A2, + 5338: 0xC6A3, + 5339: 0xC6A6, + 5340: 0xC6A8, + 5341: 0xC6AA, + 5342: 0xC6AB, + 5343: 0xC6AC, + 5344: 0xC6AD, + 5345: 0xC6AE, + 5346: 0xC6AF, + 5347: 0xC6B2, + 5348: 0xC6B3, + 5349: 0xC6B5, + 5350: 0xC6B6, + 5351: 0xC6B7, + 5352: 0xC6BB, + 5353: 0xC6BC, + 5354: 0xC6BD, + 5355: 0xC6BE, + 5356: 0xC6BF, + 5357: 0xC6C2, + 5358: 0xC6C4, + 5359: 0xC6C6, + 5360: 0xC6C7, + 5361: 0xC6C8, + 5362: 0xC6C9, + 5363: 0xC6CA, + 5364: 0xC6CB, + 5365: 0xC6CE, + 5366: 0xC6CF, + 5367: 0xC6D1, + 5368: 0xC6D2, + 5369: 0xC6D3, + 5370: 0xC6D5, + 5371: 0xC6D6, + 5372: 0xC6D7, + 5373: 0xC6D8, + 5374: 0xC6D9, + 5375: 0xC6DA, + 5376: 0xC6DB, + 5377: 0xC6DE, + 5378: 0xC6DF, + 5379: 0xC6E2, + 5380: 0xC6E3, + 5381: 0xC6E4, + 5382: 0xC6E5, + 5383: 0xC6E6, + 5384: 0xC6E7, + 5385: 0xC6EA, + 5386: 0xC6EB, + 5387: 0xC6ED, + 5388: 0xC6EE, + 5389: 0xC6EF, + 5390: 0xC6F1, + 5391: 0xC6F2, + 5392: 0xC6F3, + 5393: 0xC6F4, + 5394: 0xC6F5, + 5395: 0xC6F6, + 5396: 0xC6F7, + 5397: 0xC6FA, + 5398: 0xC6FB, + 5399: 0xC6FC, + 5400: 0xC6FE, + 5401: 0xC6FF, + 5402: 0xC700, + 5403: 0xC701, + 5404: 0xC702, + 5405: 0xC703, + 5406: 0xC706, + 5407: 0xC707, + 5408: 0xC709, + 5409: 0xC70A, + 5410: 0xC70B, + 5411: 0xC70D, + 5412: 0xC70E, + 5413: 0xC70F, + 5414: 0xC710, + 5415: 0xC711, + 5416: 0xC712, + 5417: 0xC713, + 5418: 0xC716, + 5419: 0xC718, + 5420: 0xC71A, + 5421: 0xC71B, + 5422: 0xC71C, + 5423: 0xC71D, + 5424: 0xC71E, + 5425: 0xC71F, + 5426: 0xC722, + 5427: 0xC723, + 5428: 0xC725, + 5429: 0xC726, + 5430: 0xC727, + 5431: 0xC729, + 5432: 0xC72A, + 5433: 0xC72B, + 5434: 0xC72C, + 5435: 0xC72D, + 5436: 0xC72E, + 5437: 0xC72F, + 5438: 0xC732, + 5439: 0xC734, + 5440: 0xC736, + 5441: 0xC738, + 5442: 0xC739, + 5443: 0xC73A, + 5444: 0xC73B, + 5445: 0xC73E, + 5446: 0xC73F, + 5447: 0xC741, + 5448: 0xC742, + 5449: 0xC743, + 5450: 0xC745, + 5451: 0xC746, + 5452: 0xC747, + 5453: 0xC748, + 5454: 0xC749, + 5455: 0xC74B, + 5456: 0xC74E, + 5457: 0xC750, + 5458: 0xC759, + 5459: 0xC75A, + 5460: 0xC75B, + 5461: 0xC75D, + 5462: 0xC75E, + 5463: 0xC75F, + 5464: 0xC761, + 5465: 0xC762, + 5466: 0xC763, + 5467: 0xC764, + 5468: 0xC765, + 5469: 0xC766, + 5470: 0xC767, + 5471: 0xC769, + 5472: 0xC76A, + 5473: 0xC76C, + 5474: 0xC76D, + 5475: 0xC76E, + 5476: 0xC76F, + 5477: 0xC770, + 5478: 0xC771, + 5479: 0xC772, + 5480: 0xC773, + 5481: 0xC776, + 5482: 0xC777, + 5483: 0xC779, + 5484: 0xC77A, + 5485: 0xC77B, + 5486: 0xC77F, + 5487: 0xC780, + 5488: 0xC781, + 5489: 0xC782, + 5490: 0xC786, + 5491: 0xC78B, + 5492: 0xC78C, + 5493: 0xC78D, + 5494: 0xC78F, + 5495: 0xC792, + 5496: 0xC793, + 5497: 0xC795, + 5498: 0xC799, + 5499: 0xC79B, + 5500: 0xC79C, + 5501: 0xC79D, + 5502: 0xC79E, + 5503: 0xC79F, + 5504: 0xC7A2, + 5505: 0xC7A7, + 5506: 0xC7A8, + 5507: 0xC7A9, + 5508: 0xC7AA, + 5509: 0xC7AB, + 5510: 0xC7AE, + 5511: 0xC7AF, + 5512: 0xC7B1, + 5513: 0xC7B2, + 5514: 0xC7B3, + 5515: 0xC7B5, + 5516: 0xC7B6, + 5517: 0xC7B7, + 5518: 0xC7B8, + 5519: 0xC7B9, + 5520: 0xC7BA, + 5521: 0xC7BB, + 5522: 0xC7BE, + 5523: 0xC7C2, + 5524: 0xC7C3, + 5525: 0xC7C4, + 5526: 0xC7C5, + 5527: 0xC7C6, + 5528: 0xC7C7, + 5529: 0xC7CA, + 5530: 0xC7CB, + 5531: 0xC7CD, + 5532: 0xC7CF, + 5533: 0xC7D1, + 5534: 0xC7D2, + 5535: 0xC7D3, + 5536: 0xC7D4, + 5537: 0xC7D5, + 5538: 0xC7D6, + 5539: 0xC7D7, + 5540: 0xC7D9, + 5541: 0xC7DA, + 5542: 0xC7DB, + 5543: 0xC7DC, + 5544: 0xC7DE, + 5545: 0xC7DF, + 5546: 0xC7E0, + 5547: 0xC7E1, + 5548: 0xC7E2, + 5549: 0xC7E3, + 5550: 0xC7E5, + 5551: 0xC7E6, + 5552: 0xC7E7, + 5553: 0xC7E9, + 5554: 0xC7EA, + 5555: 0xC7EB, + 5556: 0xC7ED, + 5557: 0xC7EE, + 5558: 0xC7EF, + 5559: 0xC7F0, + 5560: 0xC7F1, + 5561: 0xC7F2, + 5562: 0xC7F3, + 5563: 0xC7F4, + 5564: 0xC7F5, + 5565: 0xC7F6, + 5566: 0xC7F7, + 5567: 0xC7F8, + 5568: 0xC7F9, + 5569: 0xC7FA, + 5570: 0xC7FB, + 5571: 0xC7FC, + 5572: 0xC7FD, + 5573: 0xC7FE, + 5574: 0xC7FF, + 5575: 0xC802, + 5576: 0xC803, + 5577: 0xC805, + 5578: 0xC806, + 5579: 0xC807, + 5580: 0xC809, + 5581: 0xC80B, + 5582: 0xC80C, + 5583: 0xC80D, + 5584: 0xC80E, + 5585: 0xC80F, + 5586: 0xC812, + 5587: 0xC814, + 5588: 0xC817, + 5589: 0xC818, + 5590: 0xC819, + 5591: 0xC81A, + 5592: 0xC81B, + 5593: 0xC81E, + 5594: 0xC81F, + 5595: 0xC821, + 5596: 0xC822, + 5597: 0xC823, + 5598: 0xC825, + 5599: 0xC826, + 5600: 0xC827, + 5601: 0xC828, + 5602: 0xC829, + 5603: 0xC82A, + 5604: 0xC82B, + 5605: 0xC82E, + 5606: 0xC830, + 5607: 0xC832, + 5608: 0xC833, + 5609: 0xC834, + 5610: 0xC835, + 5611: 0xC836, + 5612: 0xC837, + 5613: 0xC839, + 5614: 0xC83A, + 5615: 0xC83B, + 5616: 0xC83D, + 5617: 0xC83E, + 5618: 0xC83F, + 5619: 0xC841, + 5620: 0xC842, + 5621: 0xC843, + 5622: 0xC844, + 5623: 0xC845, + 5624: 0xC846, + 5625: 0xC847, + 5626: 0xC84A, + 5627: 0xC84B, + 5628: 0xC84E, + 5629: 0xC84F, + 5630: 0xC850, + 5631: 0xC851, + 5632: 0xC852, + 5633: 0xC853, + 5634: 0xC855, + 5635: 0xC856, + 5636: 0xC857, + 5637: 0xC858, + 5638: 0xC859, + 5639: 0xC85A, + 5640: 0xC85B, + 5641: 0xC85C, + 5642: 0xC85D, + 5643: 0xC85E, + 5644: 0xC85F, + 5645: 0xC860, + 5646: 0xC861, + 5647: 0xC862, + 5648: 0xC863, + 5649: 0xC864, + 5650: 0xC865, + 5651: 0xC866, + 5652: 0xC867, + 5653: 0xC868, + 5654: 0xC869, + 5655: 0xC86A, + 5656: 0xC86B, + 5657: 0xC86C, + 5658: 0xC86D, + 5659: 0xC86E, + 5660: 0xC86F, + 5661: 0xC872, + 5662: 0xC873, + 5663: 0xC875, + 5664: 0xC876, + 5665: 0xC877, + 5666: 0xC879, + 5667: 0xC87B, + 5668: 0xC87C, + 5669: 0xC87D, + 5670: 0xC87E, + 5671: 0xC87F, + 5672: 0xC882, + 5673: 0xC884, + 5674: 0xC888, + 5675: 0xC889, + 5676: 0xC88A, + 5677: 0xC88E, + 5678: 0xC88F, + 5679: 0xC890, + 5680: 0xC891, + 5681: 0xC892, + 5682: 0xC893, + 5683: 0xC895, + 5684: 0xC896, + 5685: 0xC897, + 5686: 0xC898, + 5687: 0xC899, + 5688: 0xC89A, + 5689: 0xC89B, + 5690: 0xC89C, + 5691: 0xC89E, + 5692: 0xC8A0, + 5693: 0xC8A2, + 5694: 0xC8A3, + 5695: 0xC8A4, + 5696: 0xC8A5, + 5697: 0xC8A6, + 5698: 0xC8A7, + 5699: 0xC8A9, + 5700: 0xC8AA, + 5701: 0xC8AB, + 5702: 0xC8AC, + 5703: 0xC8AD, + 5704: 0xC8AE, + 5705: 0xC8AF, + 5706: 0xC8B0, + 5707: 0xC8B1, + 5708: 0xC8B2, + 5709: 0xC8B3, + 5710: 0xC8B4, + 5711: 0xC8B5, + 5712: 0xC8B6, + 5713: 0xC8B7, + 5714: 0xC8B8, + 5715: 0xC8B9, + 5716: 0xC8BA, + 5717: 0xC8BB, + 5718: 0xC8BE, + 5719: 0xC8BF, + 5720: 0xC8C0, + 5721: 0xC8C1, + 5722: 0xC8C2, + 5723: 0xC8C3, + 5724: 0xC8C5, + 5725: 0xC8C6, + 5726: 0xC8C7, + 5727: 0xC8C9, + 5728: 0xC8CA, + 5729: 0xC8CB, + 5730: 0xC8CD, + 5731: 0xC8CE, + 5732: 0xC8CF, + 5733: 0xC8D0, + 5734: 0xC8D1, + 5735: 0xC8D2, + 5736: 0xC8D3, + 5737: 0xC8D6, + 5738: 0xC8D8, + 5739: 0xC8DA, + 5740: 0xC8DB, + 5741: 0xC8DC, + 5742: 0xC8DD, + 5743: 0xC8DE, + 5744: 0xC8DF, + 5745: 0xC8E2, + 5746: 0xC8E3, + 5747: 0xC8E5, + 5748: 0xC8E6, + 5749: 0xC8E7, + 5750: 0xC8E8, + 5751: 0xC8E9, + 5752: 0xC8EA, + 5753: 0xC8EB, + 5754: 0xC8EC, + 5755: 0xC8ED, + 5756: 0xC8EE, + 5757: 0xC8EF, + 5758: 0xC8F0, + 5759: 0xC8F1, + 5760: 0xC8F2, + 5761: 0xC8F3, + 5762: 0xC8F4, + 5763: 0xC8F6, + 5764: 0xC8F7, + 5765: 0xC8F8, + 5766: 0xC8F9, + 5767: 0xC8FA, + 5768: 0xC8FB, + 5769: 0xC8FE, + 5770: 0xC8FF, + 5771: 0xC901, + 5772: 0xC902, + 5773: 0xC903, + 5774: 0xC907, + 5775: 0xC908, + 5776: 0xC909, + 5777: 0xC90A, + 5778: 0xC90B, + 5779: 0xC90E, + 5780: 0x3000, + 5781: 0x3001, + 5782: 0x3002, + 5783: 0x00B7, + 5784: 0x2025, + 5785: 0x2026, + 5786: 0x00A8, + 5787: 0x3003, + 5788: 0x00AD, + 5789: 0x2015, + 5790: 0x2225, + 5791: 0xFF3C, + 5792: 0x223C, + 5793: 0x2018, + 5794: 0x2019, + 5795: 0x201C, + 5796: 0x201D, + 5797: 0x3014, + 5798: 0x3015, + 5799: 0x3008, + 5800: 0x3009, + 5801: 0x300A, + 5802: 0x300B, + 5803: 0x300C, + 5804: 0x300D, + 5805: 0x300E, + 5806: 0x300F, + 5807: 0x3010, + 5808: 0x3011, + 5809: 0x00B1, + 5810: 0x00D7, + 5811: 0x00F7, + 5812: 0x2260, + 5813: 0x2264, + 5814: 0x2265, + 5815: 0x221E, + 5816: 0x2234, + 5817: 0x00B0, + 5818: 0x2032, + 5819: 0x2033, + 5820: 0x2103, + 5821: 0x212B, + 5822: 0xFFE0, + 5823: 0xFFE1, + 5824: 0xFFE5, + 5825: 0x2642, + 5826: 0x2640, + 5827: 0x2220, + 5828: 0x22A5, + 5829: 0x2312, + 5830: 0x2202, + 5831: 0x2207, + 5832: 0x2261, + 5833: 0x2252, + 5834: 0x00A7, + 5835: 0x203B, + 5836: 0x2606, + 5837: 0x2605, + 5838: 0x25CB, + 5839: 0x25CF, + 5840: 0x25CE, + 5841: 0x25C7, + 5842: 0x25C6, + 5843: 0x25A1, + 5844: 0x25A0, + 5845: 0x25B3, + 5846: 0x25B2, + 5847: 0x25BD, + 5848: 0x25BC, + 5849: 0x2192, + 5850: 0x2190, + 5851: 0x2191, + 5852: 0x2193, + 5853: 0x2194, + 5854: 0x3013, + 5855: 0x226A, + 5856: 0x226B, + 5857: 0x221A, + 5858: 0x223D, + 5859: 0x221D, + 5860: 0x2235, + 5861: 0x222B, + 5862: 0x222C, + 5863: 0x2208, + 5864: 0x220B, + 5865: 0x2286, + 5866: 0x2287, + 5867: 0x2282, + 5868: 0x2283, + 5869: 0x222A, + 5870: 0x2229, + 5871: 0x2227, + 5872: 0x2228, + 5873: 0xFFE2, + 5874: 0xC910, + 5875: 0xC912, + 5876: 0xC913, + 5877: 0xC914, + 5878: 0xC915, + 5879: 0xC916, + 5880: 0xC917, + 5881: 0xC919, + 5882: 0xC91A, + 5883: 0xC91B, + 5884: 0xC91C, + 5885: 0xC91D, + 5886: 0xC91E, + 5887: 0xC91F, + 5888: 0xC920, + 5889: 0xC921, + 5890: 0xC922, + 5891: 0xC923, + 5892: 0xC924, + 5893: 0xC925, + 5894: 0xC926, + 5895: 0xC927, + 5896: 0xC928, + 5897: 0xC929, + 5898: 0xC92A, + 5899: 0xC92B, + 5900: 0xC92D, + 5901: 0xC92E, + 5902: 0xC92F, + 5903: 0xC930, + 5904: 0xC931, + 5905: 0xC932, + 5906: 0xC933, + 5907: 0xC935, + 5908: 0xC936, + 5909: 0xC937, + 5910: 0xC938, + 5911: 0xC939, + 5912: 0xC93A, + 5913: 0xC93B, + 5914: 0xC93C, + 5915: 0xC93D, + 5916: 0xC93E, + 5917: 0xC93F, + 5918: 0xC940, + 5919: 0xC941, + 5920: 0xC942, + 5921: 0xC943, + 5922: 0xC944, + 5923: 0xC945, + 5924: 0xC946, + 5925: 0xC947, + 5926: 0xC948, + 5927: 0xC949, + 5928: 0xC94A, + 5929: 0xC94B, + 5930: 0xC94C, + 5931: 0xC94D, + 5932: 0xC94E, + 5933: 0xC94F, + 5934: 0xC952, + 5935: 0xC953, + 5936: 0xC955, + 5937: 0xC956, + 5938: 0xC957, + 5939: 0xC959, + 5940: 0xC95A, + 5941: 0xC95B, + 5942: 0xC95C, + 5943: 0xC95D, + 5944: 0xC95E, + 5945: 0xC95F, + 5946: 0xC962, + 5947: 0xC964, + 5948: 0xC965, + 5949: 0xC966, + 5950: 0xC967, + 5951: 0xC968, + 5952: 0xC969, + 5953: 0xC96A, + 5954: 0xC96B, + 5955: 0xC96D, + 5956: 0xC96E, + 5957: 0xC96F, + 5958: 0x21D2, + 5959: 0x21D4, + 5960: 0x2200, + 5961: 0x2203, + 5962: 0x00B4, + 5963: 0xFF5E, + 5964: 0x02C7, + 5965: 0x02D8, + 5966: 0x02DD, + 5967: 0x02DA, + 5968: 0x02D9, + 5969: 0x00B8, + 5970: 0x02DB, + 5971: 0x00A1, + 5972: 0x00BF, + 5973: 0x02D0, + 5974: 0x222E, + 5975: 0x2211, + 5976: 0x220F, + 5977: 0x00A4, + 5978: 0x2109, + 5979: 0x2030, + 5980: 0x25C1, + 5981: 0x25C0, + 5982: 0x25B7, + 5983: 0x25B6, + 5984: 0x2664, + 5985: 0x2660, + 5986: 0x2661, + 5987: 0x2665, + 5988: 0x2667, + 5989: 0x2663, + 5990: 0x2299, + 5991: 0x25C8, + 5992: 0x25A3, + 5993: 0x25D0, + 5994: 0x25D1, + 5995: 0x2592, + 5996: 0x25A4, + 5997: 0x25A5, + 5998: 0x25A8, + 5999: 0x25A7, + 6000: 0x25A6, + 6001: 0x25A9, + 6002: 0x2668, + 6003: 0x260F, + 6004: 0x260E, + 6005: 0x261C, + 6006: 0x261E, + 6007: 0x00B6, + 6008: 0x2020, + 6009: 0x2021, + 6010: 0x2195, + 6011: 0x2197, + 6012: 0x2199, + 6013: 0x2196, + 6014: 0x2198, + 6015: 0x266D, + 6016: 0x2669, + 6017: 0x266A, + 6018: 0x266C, + 6019: 0x327F, + 6020: 0x321C, + 6021: 0x2116, + 6022: 0x33C7, + 6023: 0x2122, + 6024: 0x33C2, + 6025: 0x33D8, + 6026: 0x2121, + 6027: 0x20AC, + 6028: 0x00AE, + 6052: 0xC971, + 6053: 0xC972, + 6054: 0xC973, + 6055: 0xC975, + 6056: 0xC976, + 6057: 0xC977, + 6058: 0xC978, + 6059: 0xC979, + 6060: 0xC97A, + 6061: 0xC97B, + 6062: 0xC97D, + 6063: 0xC97E, + 6064: 0xC97F, + 6065: 0xC980, + 6066: 0xC981, + 6067: 0xC982, + 6068: 0xC983, + 6069: 0xC984, + 6070: 0xC985, + 6071: 0xC986, + 6072: 0xC987, + 6073: 0xC98A, + 6074: 0xC98B, + 6075: 0xC98D, + 6076: 0xC98E, + 6077: 0xC98F, + 6078: 0xC991, + 6079: 0xC992, + 6080: 0xC993, + 6081: 0xC994, + 6082: 0xC995, + 6083: 0xC996, + 6084: 0xC997, + 6085: 0xC99A, + 6086: 0xC99C, + 6087: 0xC99E, + 6088: 0xC99F, + 6089: 0xC9A0, + 6090: 0xC9A1, + 6091: 0xC9A2, + 6092: 0xC9A3, + 6093: 0xC9A4, + 6094: 0xC9A5, + 6095: 0xC9A6, + 6096: 0xC9A7, + 6097: 0xC9A8, + 6098: 0xC9A9, + 6099: 0xC9AA, + 6100: 0xC9AB, + 6101: 0xC9AC, + 6102: 0xC9AD, + 6103: 0xC9AE, + 6104: 0xC9AF, + 6105: 0xC9B0, + 6106: 0xC9B1, + 6107: 0xC9B2, + 6108: 0xC9B3, + 6109: 0xC9B4, + 6110: 0xC9B5, + 6111: 0xC9B6, + 6112: 0xC9B7, + 6113: 0xC9B8, + 6114: 0xC9B9, + 6115: 0xC9BA, + 6116: 0xC9BB, + 6117: 0xC9BC, + 6118: 0xC9BD, + 6119: 0xC9BE, + 6120: 0xC9BF, + 6121: 0xC9C2, + 6122: 0xC9C3, + 6123: 0xC9C5, + 6124: 0xC9C6, + 6125: 0xC9C9, + 6126: 0xC9CB, + 6127: 0xC9CC, + 6128: 0xC9CD, + 6129: 0xC9CE, + 6130: 0xC9CF, + 6131: 0xC9D2, + 6132: 0xC9D4, + 6133: 0xC9D7, + 6134: 0xC9D8, + 6135: 0xC9DB, + 6136: 0xFF01, + 6137: 0xFF02, + 6138: 0xFF03, + 6139: 0xFF04, + 6140: 0xFF05, + 6141: 0xFF06, + 6142: 0xFF07, + 6143: 0xFF08, + 6144: 0xFF09, + 6145: 0xFF0A, + 6146: 0xFF0B, + 6147: 0xFF0C, + 6148: 0xFF0D, + 6149: 0xFF0E, + 6150: 0xFF0F, + 6151: 0xFF10, + 6152: 0xFF11, + 6153: 0xFF12, + 6154: 0xFF13, + 6155: 0xFF14, + 6156: 0xFF15, + 6157: 0xFF16, + 6158: 0xFF17, + 6159: 0xFF18, + 6160: 0xFF19, + 6161: 0xFF1A, + 6162: 0xFF1B, + 6163: 0xFF1C, + 6164: 0xFF1D, + 6165: 0xFF1E, + 6166: 0xFF1F, + 6167: 0xFF20, + 6168: 0xFF21, + 6169: 0xFF22, + 6170: 0xFF23, + 6171: 0xFF24, + 6172: 0xFF25, + 6173: 0xFF26, + 6174: 0xFF27, + 6175: 0xFF28, + 6176: 0xFF29, + 6177: 0xFF2A, + 6178: 0xFF2B, + 6179: 0xFF2C, + 6180: 0xFF2D, + 6181: 0xFF2E, + 6182: 0xFF2F, + 6183: 0xFF30, + 6184: 0xFF31, + 6185: 0xFF32, + 6186: 0xFF33, + 6187: 0xFF34, + 6188: 0xFF35, + 6189: 0xFF36, + 6190: 0xFF37, + 6191: 0xFF38, + 6192: 0xFF39, + 6193: 0xFF3A, + 6194: 0xFF3B, + 6195: 0xFFE6, + 6196: 0xFF3D, + 6197: 0xFF3E, + 6198: 0xFF3F, + 6199: 0xFF40, + 6200: 0xFF41, + 6201: 0xFF42, + 6202: 0xFF43, + 6203: 0xFF44, + 6204: 0xFF45, + 6205: 0xFF46, + 6206: 0xFF47, + 6207: 0xFF48, + 6208: 0xFF49, + 6209: 0xFF4A, + 6210: 0xFF4B, + 6211: 0xFF4C, + 6212: 0xFF4D, + 6213: 0xFF4E, + 6214: 0xFF4F, + 6215: 0xFF50, + 6216: 0xFF51, + 6217: 0xFF52, + 6218: 0xFF53, + 6219: 0xFF54, + 6220: 0xFF55, + 6221: 0xFF56, + 6222: 0xFF57, + 6223: 0xFF58, + 6224: 0xFF59, + 6225: 0xFF5A, + 6226: 0xFF5B, + 6227: 0xFF5C, + 6228: 0xFF5D, + 6229: 0xFFE3, + 6230: 0xC9DE, + 6231: 0xC9DF, + 6232: 0xC9E1, + 6233: 0xC9E3, + 6234: 0xC9E5, + 6235: 0xC9E6, + 6236: 0xC9E8, + 6237: 0xC9E9, + 6238: 0xC9EA, + 6239: 0xC9EB, + 6240: 0xC9EE, + 6241: 0xC9F2, + 6242: 0xC9F3, + 6243: 0xC9F4, + 6244: 0xC9F5, + 6245: 0xC9F6, + 6246: 0xC9F7, + 6247: 0xC9FA, + 6248: 0xC9FB, + 6249: 0xC9FD, + 6250: 0xC9FE, + 6251: 0xC9FF, + 6252: 0xCA01, + 6253: 0xCA02, + 6254: 0xCA03, + 6255: 0xCA04, + 6256: 0xCA05, + 6257: 0xCA06, + 6258: 0xCA07, + 6259: 0xCA0A, + 6260: 0xCA0E, + 6261: 0xCA0F, + 6262: 0xCA10, + 6263: 0xCA11, + 6264: 0xCA12, + 6265: 0xCA13, + 6266: 0xCA15, + 6267: 0xCA16, + 6268: 0xCA17, + 6269: 0xCA19, + 6270: 0xCA1A, + 6271: 0xCA1B, + 6272: 0xCA1C, + 6273: 0xCA1D, + 6274: 0xCA1E, + 6275: 0xCA1F, + 6276: 0xCA20, + 6277: 0xCA21, + 6278: 0xCA22, + 6279: 0xCA23, + 6280: 0xCA24, + 6281: 0xCA25, + 6282: 0xCA26, + 6283: 0xCA27, + 6284: 0xCA28, + 6285: 0xCA2A, + 6286: 0xCA2B, + 6287: 0xCA2C, + 6288: 0xCA2D, + 6289: 0xCA2E, + 6290: 0xCA2F, + 6291: 0xCA30, + 6292: 0xCA31, + 6293: 0xCA32, + 6294: 0xCA33, + 6295: 0xCA34, + 6296: 0xCA35, + 6297: 0xCA36, + 6298: 0xCA37, + 6299: 0xCA38, + 6300: 0xCA39, + 6301: 0xCA3A, + 6302: 0xCA3B, + 6303: 0xCA3C, + 6304: 0xCA3D, + 6305: 0xCA3E, + 6306: 0xCA3F, + 6307: 0xCA40, + 6308: 0xCA41, + 6309: 0xCA42, + 6310: 0xCA43, + 6311: 0xCA44, + 6312: 0xCA45, + 6313: 0xCA46, + 6314: 0x3131, + 6315: 0x3132, + 6316: 0x3133, + 6317: 0x3134, + 6318: 0x3135, + 6319: 0x3136, + 6320: 0x3137, + 6321: 0x3138, + 6322: 0x3139, + 6323: 0x313A, + 6324: 0x313B, + 6325: 0x313C, + 6326: 0x313D, + 6327: 0x313E, + 6328: 0x313F, + 6329: 0x3140, + 6330: 0x3141, + 6331: 0x3142, + 6332: 0x3143, + 6333: 0x3144, + 6334: 0x3145, + 6335: 0x3146, + 6336: 0x3147, + 6337: 0x3148, + 6338: 0x3149, + 6339: 0x314A, + 6340: 0x314B, + 6341: 0x314C, + 6342: 0x314D, + 6343: 0x314E, + 6344: 0x314F, + 6345: 0x3150, + 6346: 0x3151, + 6347: 0x3152, + 6348: 0x3153, + 6349: 0x3154, + 6350: 0x3155, + 6351: 0x3156, + 6352: 0x3157, + 6353: 0x3158, + 6354: 0x3159, + 6355: 0x315A, + 6356: 0x315B, + 6357: 0x315C, + 6358: 0x315D, + 6359: 0x315E, + 6360: 0x315F, + 6361: 0x3160, + 6362: 0x3161, + 6363: 0x3162, + 6364: 0x3163, + 6365: 0x3164, + 6366: 0x3165, + 6367: 0x3166, + 6368: 0x3167, + 6369: 0x3168, + 6370: 0x3169, + 6371: 0x316A, + 6372: 0x316B, + 6373: 0x316C, + 6374: 0x316D, + 6375: 0x316E, + 6376: 0x316F, + 6377: 0x3170, + 6378: 0x3171, + 6379: 0x3172, + 6380: 0x3173, + 6381: 0x3174, + 6382: 0x3175, + 6383: 0x3176, + 6384: 0x3177, + 6385: 0x3178, + 6386: 0x3179, + 6387: 0x317A, + 6388: 0x317B, + 6389: 0x317C, + 6390: 0x317D, + 6391: 0x317E, + 6392: 0x317F, + 6393: 0x3180, + 6394: 0x3181, + 6395: 0x3182, + 6396: 0x3183, + 6397: 0x3184, + 6398: 0x3185, + 6399: 0x3186, + 6400: 0x3187, + 6401: 0x3188, + 6402: 0x3189, + 6403: 0x318A, + 6404: 0x318B, + 6405: 0x318C, + 6406: 0x318D, + 6407: 0x318E, + 6408: 0xCA47, + 6409: 0xCA48, + 6410: 0xCA49, + 6411: 0xCA4A, + 6412: 0xCA4B, + 6413: 0xCA4E, + 6414: 0xCA4F, + 6415: 0xCA51, + 6416: 0xCA52, + 6417: 0xCA53, + 6418: 0xCA55, + 6419: 0xCA56, + 6420: 0xCA57, + 6421: 0xCA58, + 6422: 0xCA59, + 6423: 0xCA5A, + 6424: 0xCA5B, + 6425: 0xCA5E, + 6426: 0xCA62, + 6427: 0xCA63, + 6428: 0xCA64, + 6429: 0xCA65, + 6430: 0xCA66, + 6431: 0xCA67, + 6432: 0xCA69, + 6433: 0xCA6A, + 6434: 0xCA6B, + 6435: 0xCA6C, + 6436: 0xCA6D, + 6437: 0xCA6E, + 6438: 0xCA6F, + 6439: 0xCA70, + 6440: 0xCA71, + 6441: 0xCA72, + 6442: 0xCA73, + 6443: 0xCA74, + 6444: 0xCA75, + 6445: 0xCA76, + 6446: 0xCA77, + 6447: 0xCA78, + 6448: 0xCA79, + 6449: 0xCA7A, + 6450: 0xCA7B, + 6451: 0xCA7C, + 6452: 0xCA7E, + 6453: 0xCA7F, + 6454: 0xCA80, + 6455: 0xCA81, + 6456: 0xCA82, + 6457: 0xCA83, + 6458: 0xCA85, + 6459: 0xCA86, + 6460: 0xCA87, + 6461: 0xCA88, + 6462: 0xCA89, + 6463: 0xCA8A, + 6464: 0xCA8B, + 6465: 0xCA8C, + 6466: 0xCA8D, + 6467: 0xCA8E, + 6468: 0xCA8F, + 6469: 0xCA90, + 6470: 0xCA91, + 6471: 0xCA92, + 6472: 0xCA93, + 6473: 0xCA94, + 6474: 0xCA95, + 6475: 0xCA96, + 6476: 0xCA97, + 6477: 0xCA99, + 6478: 0xCA9A, + 6479: 0xCA9B, + 6480: 0xCA9C, + 6481: 0xCA9D, + 6482: 0xCA9E, + 6483: 0xCA9F, + 6484: 0xCAA0, + 6485: 0xCAA1, + 6486: 0xCAA2, + 6487: 0xCAA3, + 6488: 0xCAA4, + 6489: 0xCAA5, + 6490: 0xCAA6, + 6491: 0xCAA7, + 6492: 0x2170, + 6493: 0x2171, + 6494: 0x2172, + 6495: 0x2173, + 6496: 0x2174, + 6497: 0x2175, + 6498: 0x2176, + 6499: 0x2177, + 6500: 0x2178, + 6501: 0x2179, + 6507: 0x2160, + 6508: 0x2161, + 6509: 0x2162, + 6510: 0x2163, + 6511: 0x2164, + 6512: 0x2165, + 6513: 0x2166, + 6514: 0x2167, + 6515: 0x2168, + 6516: 0x2169, + 6524: 0x0391, + 6525: 0x0392, + 6526: 0x0393, + 6527: 0x0394, + 6528: 0x0395, + 6529: 0x0396, + 6530: 0x0397, + 6531: 0x0398, + 6532: 0x0399, + 6533: 0x039A, + 6534: 0x039B, + 6535: 0x039C, + 6536: 0x039D, + 6537: 0x039E, + 6538: 0x039F, + 6539: 0x03A0, + 6540: 0x03A1, + 6541: 0x03A3, + 6542: 0x03A4, + 6543: 0x03A5, + 6544: 0x03A6, + 6545: 0x03A7, + 6546: 0x03A8, + 6547: 0x03A9, + 6556: 0x03B1, + 6557: 0x03B2, + 6558: 0x03B3, + 6559: 0x03B4, + 6560: 0x03B5, + 6561: 0x03B6, + 6562: 0x03B7, + 6563: 0x03B8, + 6564: 0x03B9, + 6565: 0x03BA, + 6566: 0x03BB, + 6567: 0x03BC, + 6568: 0x03BD, + 6569: 0x03BE, + 6570: 0x03BF, + 6571: 0x03C0, + 6572: 0x03C1, + 6573: 0x03C3, + 6574: 0x03C4, + 6575: 0x03C5, + 6576: 0x03C6, + 6577: 0x03C7, + 6578: 0x03C8, + 6579: 0x03C9, + 6586: 0xCAA8, + 6587: 0xCAA9, + 6588: 0xCAAA, + 6589: 0xCAAB, + 6590: 0xCAAC, + 6591: 0xCAAD, + 6592: 0xCAAE, + 6593: 0xCAAF, + 6594: 0xCAB0, + 6595: 0xCAB1, + 6596: 0xCAB2, + 6597: 0xCAB3, + 6598: 0xCAB4, + 6599: 0xCAB5, + 6600: 0xCAB6, + 6601: 0xCAB7, + 6602: 0xCAB8, + 6603: 0xCAB9, + 6604: 0xCABA, + 6605: 0xCABB, + 6606: 0xCABE, + 6607: 0xCABF, + 6608: 0xCAC1, + 6609: 0xCAC2, + 6610: 0xCAC3, + 6611: 0xCAC5, + 6612: 0xCAC6, + 6613: 0xCAC7, + 6614: 0xCAC8, + 6615: 0xCAC9, + 6616: 0xCACA, + 6617: 0xCACB, + 6618: 0xCACE, + 6619: 0xCAD0, + 6620: 0xCAD2, + 6621: 0xCAD4, + 6622: 0xCAD5, + 6623: 0xCAD6, + 6624: 0xCAD7, + 6625: 0xCADA, + 6626: 0xCADB, + 6627: 0xCADC, + 6628: 0xCADD, + 6629: 0xCADE, + 6630: 0xCADF, + 6631: 0xCAE1, + 6632: 0xCAE2, + 6633: 0xCAE3, + 6634: 0xCAE4, + 6635: 0xCAE5, + 6636: 0xCAE6, + 6637: 0xCAE7, + 6638: 0xCAE8, + 6639: 0xCAE9, + 6640: 0xCAEA, + 6641: 0xCAEB, + 6642: 0xCAED, + 6643: 0xCAEE, + 6644: 0xCAEF, + 6645: 0xCAF0, + 6646: 0xCAF1, + 6647: 0xCAF2, + 6648: 0xCAF3, + 6649: 0xCAF5, + 6650: 0xCAF6, + 6651: 0xCAF7, + 6652: 0xCAF8, + 6653: 0xCAF9, + 6654: 0xCAFA, + 6655: 0xCAFB, + 6656: 0xCAFC, + 6657: 0xCAFD, + 6658: 0xCAFE, + 6659: 0xCAFF, + 6660: 0xCB00, + 6661: 0xCB01, + 6662: 0xCB02, + 6663: 0xCB03, + 6664: 0xCB04, + 6665: 0xCB05, + 6666: 0xCB06, + 6667: 0xCB07, + 6668: 0xCB09, + 6669: 0xCB0A, + 6670: 0x2500, + 6671: 0x2502, + 6672: 0x250C, + 6673: 0x2510, + 6674: 0x2518, + 6675: 0x2514, + 6676: 0x251C, + 6677: 0x252C, + 6678: 0x2524, + 6679: 0x2534, + 6680: 0x253C, + 6681: 0x2501, + 6682: 0x2503, + 6683: 0x250F, + 6684: 0x2513, + 6685: 0x251B, + 6686: 0x2517, + 6687: 0x2523, + 6688: 0x2533, + 6689: 0x252B, + 6690: 0x253B, + 6691: 0x254B, + 6692: 0x2520, + 6693: 0x252F, + 6694: 0x2528, + 6695: 0x2537, + 6696: 0x253F, + 6697: 0x251D, + 6698: 0x2530, + 6699: 0x2525, + 6700: 0x2538, + 6701: 0x2542, + 6702: 0x2512, + 6703: 0x2511, + 6704: 0x251A, + 6705: 0x2519, + 6706: 0x2516, + 6707: 0x2515, + 6708: 0x250E, + 6709: 0x250D, + 6710: 0x251E, + 6711: 0x251F, + 6712: 0x2521, + 6713: 0x2522, + 6714: 0x2526, + 6715: 0x2527, + 6716: 0x2529, + 6717: 0x252A, + 6718: 0x252D, + 6719: 0x252E, + 6720: 0x2531, + 6721: 0x2532, + 6722: 0x2535, + 6723: 0x2536, + 6724: 0x2539, + 6725: 0x253A, + 6726: 0x253D, + 6727: 0x253E, + 6728: 0x2540, + 6729: 0x2541, + 6730: 0x2543, + 6731: 0x2544, + 6732: 0x2545, + 6733: 0x2546, + 6734: 0x2547, + 6735: 0x2548, + 6736: 0x2549, + 6737: 0x254A, + 6764: 0xCB0B, + 6765: 0xCB0C, + 6766: 0xCB0D, + 6767: 0xCB0E, + 6768: 0xCB0F, + 6769: 0xCB11, + 6770: 0xCB12, + 6771: 0xCB13, + 6772: 0xCB15, + 6773: 0xCB16, + 6774: 0xCB17, + 6775: 0xCB19, + 6776: 0xCB1A, + 6777: 0xCB1B, + 6778: 0xCB1C, + 6779: 0xCB1D, + 6780: 0xCB1E, + 6781: 0xCB1F, + 6782: 0xCB22, + 6783: 0xCB23, + 6784: 0xCB24, + 6785: 0xCB25, + 6786: 0xCB26, + 6787: 0xCB27, + 6788: 0xCB28, + 6789: 0xCB29, + 6790: 0xCB2A, + 6791: 0xCB2B, + 6792: 0xCB2C, + 6793: 0xCB2D, + 6794: 0xCB2E, + 6795: 0xCB2F, + 6796: 0xCB30, + 6797: 0xCB31, + 6798: 0xCB32, + 6799: 0xCB33, + 6800: 0xCB34, + 6801: 0xCB35, + 6802: 0xCB36, + 6803: 0xCB37, + 6804: 0xCB38, + 6805: 0xCB39, + 6806: 0xCB3A, + 6807: 0xCB3B, + 6808: 0xCB3C, + 6809: 0xCB3D, + 6810: 0xCB3E, + 6811: 0xCB3F, + 6812: 0xCB40, + 6813: 0xCB42, + 6814: 0xCB43, + 6815: 0xCB44, + 6816: 0xCB45, + 6817: 0xCB46, + 6818: 0xCB47, + 6819: 0xCB4A, + 6820: 0xCB4B, + 6821: 0xCB4D, + 6822: 0xCB4E, + 6823: 0xCB4F, + 6824: 0xCB51, + 6825: 0xCB52, + 6826: 0xCB53, + 6827: 0xCB54, + 6828: 0xCB55, + 6829: 0xCB56, + 6830: 0xCB57, + 6831: 0xCB5A, + 6832: 0xCB5B, + 6833: 0xCB5C, + 6834: 0xCB5E, + 6835: 0xCB5F, + 6836: 0xCB60, + 6837: 0xCB61, + 6838: 0xCB62, + 6839: 0xCB63, + 6840: 0xCB65, + 6841: 0xCB66, + 6842: 0xCB67, + 6843: 0xCB68, + 6844: 0xCB69, + 6845: 0xCB6A, + 6846: 0xCB6B, + 6847: 0xCB6C, + 6848: 0x3395, + 6849: 0x3396, + 6850: 0x3397, + 6851: 0x2113, + 6852: 0x3398, + 6853: 0x33C4, + 6854: 0x33A3, + 6855: 0x33A4, + 6856: 0x33A5, + 6857: 0x33A6, + 6858: 0x3399, + 6859: 0x339A, + 6860: 0x339B, + 6861: 0x339C, + 6862: 0x339D, + 6863: 0x339E, + 6864: 0x339F, + 6865: 0x33A0, + 6866: 0x33A1, + 6867: 0x33A2, + 6868: 0x33CA, + 6869: 0x338D, + 6870: 0x338E, + 6871: 0x338F, + 6872: 0x33CF, + 6873: 0x3388, + 6874: 0x3389, + 6875: 0x33C8, + 6876: 0x33A7, + 6877: 0x33A8, + 6878: 0x33B0, + 6879: 0x33B1, + 6880: 0x33B2, + 6881: 0x33B3, + 6882: 0x33B4, + 6883: 0x33B5, + 6884: 0x33B6, + 6885: 0x33B7, + 6886: 0x33B8, + 6887: 0x33B9, + 6888: 0x3380, + 6889: 0x3381, + 6890: 0x3382, + 6891: 0x3383, + 6892: 0x3384, + 6893: 0x33BA, + 6894: 0x33BB, + 6895: 0x33BC, + 6896: 0x33BD, + 6897: 0x33BE, + 6898: 0x33BF, + 6899: 0x3390, + 6900: 0x3391, + 6901: 0x3392, + 6902: 0x3393, + 6903: 0x3394, + 6904: 0x2126, + 6905: 0x33C0, + 6906: 0x33C1, + 6907: 0x338A, + 6908: 0x338B, + 6909: 0x338C, + 6910: 0x33D6, + 6911: 0x33C5, + 6912: 0x33AD, + 6913: 0x33AE, + 6914: 0x33AF, + 6915: 0x33DB, + 6916: 0x33A9, + 6917: 0x33AA, + 6918: 0x33AB, + 6919: 0x33AC, + 6920: 0x33DD, + 6921: 0x33D0, + 6922: 0x33D3, + 6923: 0x33C3, + 6924: 0x33C9, + 6925: 0x33DC, + 6926: 0x33C6, + 6942: 0xCB6D, + 6943: 0xCB6E, + 6944: 0xCB6F, + 6945: 0xCB70, + 6946: 0xCB71, + 6947: 0xCB72, + 6948: 0xCB73, + 6949: 0xCB74, + 6950: 0xCB75, + 6951: 0xCB76, + 6952: 0xCB77, + 6953: 0xCB7A, + 6954: 0xCB7B, + 6955: 0xCB7C, + 6956: 0xCB7D, + 6957: 0xCB7E, + 6958: 0xCB7F, + 6959: 0xCB80, + 6960: 0xCB81, + 6961: 0xCB82, + 6962: 0xCB83, + 6963: 0xCB84, + 6964: 0xCB85, + 6965: 0xCB86, + 6966: 0xCB87, + 6967: 0xCB88, + 6968: 0xCB89, + 6969: 0xCB8A, + 6970: 0xCB8B, + 6971: 0xCB8C, + 6972: 0xCB8D, + 6973: 0xCB8E, + 6974: 0xCB8F, + 6975: 0xCB90, + 6976: 0xCB91, + 6977: 0xCB92, + 6978: 0xCB93, + 6979: 0xCB94, + 6980: 0xCB95, + 6981: 0xCB96, + 6982: 0xCB97, + 6983: 0xCB98, + 6984: 0xCB99, + 6985: 0xCB9A, + 6986: 0xCB9B, + 6987: 0xCB9D, + 6988: 0xCB9E, + 6989: 0xCB9F, + 6990: 0xCBA0, + 6991: 0xCBA1, + 6992: 0xCBA2, + 6993: 0xCBA3, + 6994: 0xCBA4, + 6995: 0xCBA5, + 6996: 0xCBA6, + 6997: 0xCBA7, + 6998: 0xCBA8, + 6999: 0xCBA9, + 7000: 0xCBAA, + 7001: 0xCBAB, + 7002: 0xCBAC, + 7003: 0xCBAD, + 7004: 0xCBAE, + 7005: 0xCBAF, + 7006: 0xCBB0, + 7007: 0xCBB1, + 7008: 0xCBB2, + 7009: 0xCBB3, + 7010: 0xCBB4, + 7011: 0xCBB5, + 7012: 0xCBB6, + 7013: 0xCBB7, + 7014: 0xCBB9, + 7015: 0xCBBA, + 7016: 0xCBBB, + 7017: 0xCBBC, + 7018: 0xCBBD, + 7019: 0xCBBE, + 7020: 0xCBBF, + 7021: 0xCBC0, + 7022: 0xCBC1, + 7023: 0xCBC2, + 7024: 0xCBC3, + 7025: 0xCBC4, + 7026: 0x00C6, + 7027: 0x00D0, + 7028: 0x00AA, + 7029: 0x0126, + 7031: 0x0132, + 7033: 0x013F, + 7034: 0x0141, + 7035: 0x00D8, + 7036: 0x0152, + 7037: 0x00BA, + 7038: 0x00DE, + 7039: 0x0166, + 7040: 0x014A, + 7042: 0x3260, + 7043: 0x3261, + 7044: 0x3262, + 7045: 0x3263, + 7046: 0x3264, + 7047: 0x3265, + 7048: 0x3266, + 7049: 0x3267, + 7050: 0x3268, + 7051: 0x3269, + 7052: 0x326A, + 7053: 0x326B, + 7054: 0x326C, + 7055: 0x326D, + 7056: 0x326E, + 7057: 0x326F, + 7058: 0x3270, + 7059: 0x3271, + 7060: 0x3272, + 7061: 0x3273, + 7062: 0x3274, + 7063: 0x3275, + 7064: 0x3276, + 7065: 0x3277, + 7066: 0x3278, + 7067: 0x3279, + 7068: 0x327A, + 7069: 0x327B, + 7070: 0x24D0, + 7071: 0x24D1, + 7072: 0x24D2, + 7073: 0x24D3, + 7074: 0x24D4, + 7075: 0x24D5, + 7076: 0x24D6, + 7077: 0x24D7, + 7078: 0x24D8, + 7079: 0x24D9, + 7080: 0x24DA, + 7081: 0x24DB, + 7082: 0x24DC, + 7083: 0x24DD, + 7084: 0x24DE, + 7085: 0x24DF, + 7086: 0x24E0, + 7087: 0x24E1, + 7088: 0x24E2, + 7089: 0x24E3, + 7090: 0x24E4, + 7091: 0x24E5, + 7092: 0x24E6, + 7093: 0x24E7, + 7094: 0x24E8, + 7095: 0x24E9, + 7096: 0x2460, + 7097: 0x2461, + 7098: 0x2462, + 7099: 0x2463, + 7100: 0x2464, + 7101: 0x2465, + 7102: 0x2466, + 7103: 0x2467, + 7104: 0x2468, + 7105: 0x2469, + 7106: 0x246A, + 7107: 0x246B, + 7108: 0x246C, + 7109: 0x246D, + 7110: 0x246E, + 7111: 0x00BD, + 7112: 0x2153, + 7113: 0x2154, + 7114: 0x00BC, + 7115: 0x00BE, + 7116: 0x215B, + 7117: 0x215C, + 7118: 0x215D, + 7119: 0x215E, + 7120: 0xCBC5, + 7121: 0xCBC6, + 7122: 0xCBC7, + 7123: 0xCBC8, + 7124: 0xCBC9, + 7125: 0xCBCA, + 7126: 0xCBCB, + 7127: 0xCBCC, + 7128: 0xCBCD, + 7129: 0xCBCE, + 7130: 0xCBCF, + 7131: 0xCBD0, + 7132: 0xCBD1, + 7133: 0xCBD2, + 7134: 0xCBD3, + 7135: 0xCBD5, + 7136: 0xCBD6, + 7137: 0xCBD7, + 7138: 0xCBD8, + 7139: 0xCBD9, + 7140: 0xCBDA, + 7141: 0xCBDB, + 7142: 0xCBDC, + 7143: 0xCBDD, + 7144: 0xCBDE, + 7145: 0xCBDF, + 7146: 0xCBE0, + 7147: 0xCBE1, + 7148: 0xCBE2, + 7149: 0xCBE3, + 7150: 0xCBE5, + 7151: 0xCBE6, + 7152: 0xCBE8, + 7153: 0xCBEA, + 7154: 0xCBEB, + 7155: 0xCBEC, + 7156: 0xCBED, + 7157: 0xCBEE, + 7158: 0xCBEF, + 7159: 0xCBF0, + 7160: 0xCBF1, + 7161: 0xCBF2, + 7162: 0xCBF3, + 7163: 0xCBF4, + 7164: 0xCBF5, + 7165: 0xCBF6, + 7166: 0xCBF7, + 7167: 0xCBF8, + 7168: 0xCBF9, + 7169: 0xCBFA, + 7170: 0xCBFB, + 7171: 0xCBFC, + 7172: 0xCBFD, + 7173: 0xCBFE, + 7174: 0xCBFF, + 7175: 0xCC00, + 7176: 0xCC01, + 7177: 0xCC02, + 7178: 0xCC03, + 7179: 0xCC04, + 7180: 0xCC05, + 7181: 0xCC06, + 7182: 0xCC07, + 7183: 0xCC08, + 7184: 0xCC09, + 7185: 0xCC0A, + 7186: 0xCC0B, + 7187: 0xCC0E, + 7188: 0xCC0F, + 7189: 0xCC11, + 7190: 0xCC12, + 7191: 0xCC13, + 7192: 0xCC15, + 7193: 0xCC16, + 7194: 0xCC17, + 7195: 0xCC18, + 7196: 0xCC19, + 7197: 0xCC1A, + 7198: 0xCC1B, + 7199: 0xCC1E, + 7200: 0xCC1F, + 7201: 0xCC20, + 7202: 0xCC23, + 7203: 0xCC24, + 7204: 0x00E6, + 7205: 0x0111, + 7206: 0x00F0, + 7207: 0x0127, + 7208: 0x0131, + 7209: 0x0133, + 7210: 0x0138, + 7211: 0x0140, + 7212: 0x0142, + 7213: 0x00F8, + 7214: 0x0153, + 7215: 0x00DF, + 7216: 0x00FE, + 7217: 0x0167, + 7218: 0x014B, + 7219: 0x0149, + 7220: 0x3200, + 7221: 0x3201, + 7222: 0x3202, + 7223: 0x3203, + 7224: 0x3204, + 7225: 0x3205, + 7226: 0x3206, + 7227: 0x3207, + 7228: 0x3208, + 7229: 0x3209, + 7230: 0x320A, + 7231: 0x320B, + 7232: 0x320C, + 7233: 0x320D, + 7234: 0x320E, + 7235: 0x320F, + 7236: 0x3210, + 7237: 0x3211, + 7238: 0x3212, + 7239: 0x3213, + 7240: 0x3214, + 7241: 0x3215, + 7242: 0x3216, + 7243: 0x3217, + 7244: 0x3218, + 7245: 0x3219, + 7246: 0x321A, + 7247: 0x321B, + 7248: 0x249C, + 7249: 0x249D, + 7250: 0x249E, + 7251: 0x249F, + 7252: 0x24A0, + 7253: 0x24A1, + 7254: 0x24A2, + 7255: 0x24A3, + 7256: 0x24A4, + 7257: 0x24A5, + 7258: 0x24A6, + 7259: 0x24A7, + 7260: 0x24A8, + 7261: 0x24A9, + 7262: 0x24AA, + 7263: 0x24AB, + 7264: 0x24AC, + 7265: 0x24AD, + 7266: 0x24AE, + 7267: 0x24AF, + 7268: 0x24B0, + 7269: 0x24B1, + 7270: 0x24B2, + 7271: 0x24B3, + 7272: 0x24B4, + 7273: 0x24B5, + 7274: 0x2474, + 7275: 0x2475, + 7276: 0x2476, + 7277: 0x2477, + 7278: 0x2478, + 7279: 0x2479, + 7280: 0x247A, + 7281: 0x247B, + 7282: 0x247C, + 7283: 0x247D, + 7284: 0x247E, + 7285: 0x247F, + 7286: 0x2480, + 7287: 0x2481, + 7288: 0x2482, + 7289: 0x00B9, + 7290: 0x00B2, + 7291: 0x00B3, + 7292: 0x2074, + 7293: 0x207F, + 7294: 0x2081, + 7295: 0x2082, + 7296: 0x2083, + 7297: 0x2084, + 7298: 0xCC25, + 7299: 0xCC26, + 7300: 0xCC2A, + 7301: 0xCC2B, + 7302: 0xCC2D, + 7303: 0xCC2F, + 7304: 0xCC31, + 7305: 0xCC32, + 7306: 0xCC33, + 7307: 0xCC34, + 7308: 0xCC35, + 7309: 0xCC36, + 7310: 0xCC37, + 7311: 0xCC3A, + 7312: 0xCC3F, + 7313: 0xCC40, + 7314: 0xCC41, + 7315: 0xCC42, + 7316: 0xCC43, + 7317: 0xCC46, + 7318: 0xCC47, + 7319: 0xCC49, + 7320: 0xCC4A, + 7321: 0xCC4B, + 7322: 0xCC4D, + 7323: 0xCC4E, + 7324: 0xCC4F, + 7325: 0xCC50, + 7326: 0xCC51, + 7327: 0xCC52, + 7328: 0xCC53, + 7329: 0xCC56, + 7330: 0xCC5A, + 7331: 0xCC5B, + 7332: 0xCC5C, + 7333: 0xCC5D, + 7334: 0xCC5E, + 7335: 0xCC5F, + 7336: 0xCC61, + 7337: 0xCC62, + 7338: 0xCC63, + 7339: 0xCC65, + 7340: 0xCC67, + 7341: 0xCC69, + 7342: 0xCC6A, + 7343: 0xCC6B, + 7344: 0xCC6C, + 7345: 0xCC6D, + 7346: 0xCC6E, + 7347: 0xCC6F, + 7348: 0xCC71, + 7349: 0xCC72, + 7350: 0xCC73, + 7351: 0xCC74, + 7352: 0xCC76, + 7353: 0xCC77, + 7354: 0xCC78, + 7355: 0xCC79, + 7356: 0xCC7A, + 7357: 0xCC7B, + 7358: 0xCC7C, + 7359: 0xCC7D, + 7360: 0xCC7E, + 7361: 0xCC7F, + 7362: 0xCC80, + 7363: 0xCC81, + 7364: 0xCC82, + 7365: 0xCC83, + 7366: 0xCC84, + 7367: 0xCC85, + 7368: 0xCC86, + 7369: 0xCC87, + 7370: 0xCC88, + 7371: 0xCC89, + 7372: 0xCC8A, + 7373: 0xCC8B, + 7374: 0xCC8C, + 7375: 0xCC8D, + 7376: 0xCC8E, + 7377: 0xCC8F, + 7378: 0xCC90, + 7379: 0xCC91, + 7380: 0xCC92, + 7381: 0xCC93, + 7382: 0x3041, + 7383: 0x3042, + 7384: 0x3043, + 7385: 0x3044, + 7386: 0x3045, + 7387: 0x3046, + 7388: 0x3047, + 7389: 0x3048, + 7390: 0x3049, + 7391: 0x304A, + 7392: 0x304B, + 7393: 0x304C, + 7394: 0x304D, + 7395: 0x304E, + 7396: 0x304F, + 7397: 0x3050, + 7398: 0x3051, + 7399: 0x3052, + 7400: 0x3053, + 7401: 0x3054, + 7402: 0x3055, + 7403: 0x3056, + 7404: 0x3057, + 7405: 0x3058, + 7406: 0x3059, + 7407: 0x305A, + 7408: 0x305B, + 7409: 0x305C, + 7410: 0x305D, + 7411: 0x305E, + 7412: 0x305F, + 7413: 0x3060, + 7414: 0x3061, + 7415: 0x3062, + 7416: 0x3063, + 7417: 0x3064, + 7418: 0x3065, + 7419: 0x3066, + 7420: 0x3067, + 7421: 0x3068, + 7422: 0x3069, + 7423: 0x306A, + 7424: 0x306B, + 7425: 0x306C, + 7426: 0x306D, + 7427: 0x306E, + 7428: 0x306F, + 7429: 0x3070, + 7430: 0x3071, + 7431: 0x3072, + 7432: 0x3073, + 7433: 0x3074, + 7434: 0x3075, + 7435: 0x3076, + 7436: 0x3077, + 7437: 0x3078, + 7438: 0x3079, + 7439: 0x307A, + 7440: 0x307B, + 7441: 0x307C, + 7442: 0x307D, + 7443: 0x307E, + 7444: 0x307F, + 7445: 0x3080, + 7446: 0x3081, + 7447: 0x3082, + 7448: 0x3083, + 7449: 0x3084, + 7450: 0x3085, + 7451: 0x3086, + 7452: 0x3087, + 7453: 0x3088, + 7454: 0x3089, + 7455: 0x308A, + 7456: 0x308B, + 7457: 0x308C, + 7458: 0x308D, + 7459: 0x308E, + 7460: 0x308F, + 7461: 0x3090, + 7462: 0x3091, + 7463: 0x3092, + 7464: 0x3093, + 7476: 0xCC94, + 7477: 0xCC95, + 7478: 0xCC96, + 7479: 0xCC97, + 7480: 0xCC9A, + 7481: 0xCC9B, + 7482: 0xCC9D, + 7483: 0xCC9E, + 7484: 0xCC9F, + 7485: 0xCCA1, + 7486: 0xCCA2, + 7487: 0xCCA3, + 7488: 0xCCA4, + 7489: 0xCCA5, + 7490: 0xCCA6, + 7491: 0xCCA7, + 7492: 0xCCAA, + 7493: 0xCCAE, + 7494: 0xCCAF, + 7495: 0xCCB0, + 7496: 0xCCB1, + 7497: 0xCCB2, + 7498: 0xCCB3, + 7499: 0xCCB6, + 7500: 0xCCB7, + 7501: 0xCCB9, + 7502: 0xCCBA, + 7503: 0xCCBB, + 7504: 0xCCBD, + 7505: 0xCCBE, + 7506: 0xCCBF, + 7507: 0xCCC0, + 7508: 0xCCC1, + 7509: 0xCCC2, + 7510: 0xCCC3, + 7511: 0xCCC6, + 7512: 0xCCC8, + 7513: 0xCCCA, + 7514: 0xCCCB, + 7515: 0xCCCC, + 7516: 0xCCCD, + 7517: 0xCCCE, + 7518: 0xCCCF, + 7519: 0xCCD1, + 7520: 0xCCD2, + 7521: 0xCCD3, + 7522: 0xCCD5, + 7523: 0xCCD6, + 7524: 0xCCD7, + 7525: 0xCCD8, + 7526: 0xCCD9, + 7527: 0xCCDA, + 7528: 0xCCDB, + 7529: 0xCCDC, + 7530: 0xCCDD, + 7531: 0xCCDE, + 7532: 0xCCDF, + 7533: 0xCCE0, + 7534: 0xCCE1, + 7535: 0xCCE2, + 7536: 0xCCE3, + 7537: 0xCCE5, + 7538: 0xCCE6, + 7539: 0xCCE7, + 7540: 0xCCE8, + 7541: 0xCCE9, + 7542: 0xCCEA, + 7543: 0xCCEB, + 7544: 0xCCED, + 7545: 0xCCEE, + 7546: 0xCCEF, + 7547: 0xCCF1, + 7548: 0xCCF2, + 7549: 0xCCF3, + 7550: 0xCCF4, + 7551: 0xCCF5, + 7552: 0xCCF6, + 7553: 0xCCF7, + 7554: 0xCCF8, + 7555: 0xCCF9, + 7556: 0xCCFA, + 7557: 0xCCFB, + 7558: 0xCCFC, + 7559: 0xCCFD, + 7560: 0x30A1, + 7561: 0x30A2, + 7562: 0x30A3, + 7563: 0x30A4, + 7564: 0x30A5, + 7565: 0x30A6, + 7566: 0x30A7, + 7567: 0x30A8, + 7568: 0x30A9, + 7569: 0x30AA, + 7570: 0x30AB, + 7571: 0x30AC, + 7572: 0x30AD, + 7573: 0x30AE, + 7574: 0x30AF, + 7575: 0x30B0, + 7576: 0x30B1, + 7577: 0x30B2, + 7578: 0x30B3, + 7579: 0x30B4, + 7580: 0x30B5, + 7581: 0x30B6, + 7582: 0x30B7, + 7583: 0x30B8, + 7584: 0x30B9, + 7585: 0x30BA, + 7586: 0x30BB, + 7587: 0x30BC, + 7588: 0x30BD, + 7589: 0x30BE, + 7590: 0x30BF, + 7591: 0x30C0, + 7592: 0x30C1, + 7593: 0x30C2, + 7594: 0x30C3, + 7595: 0x30C4, + 7596: 0x30C5, + 7597: 0x30C6, + 7598: 0x30C7, + 7599: 0x30C8, + 7600: 0x30C9, + 7601: 0x30CA, + 7602: 0x30CB, + 7603: 0x30CC, + 7604: 0x30CD, + 7605: 0x30CE, + 7606: 0x30CF, + 7607: 0x30D0, + 7608: 0x30D1, + 7609: 0x30D2, + 7610: 0x30D3, + 7611: 0x30D4, + 7612: 0x30D5, + 7613: 0x30D6, + 7614: 0x30D7, + 7615: 0x30D8, + 7616: 0x30D9, + 7617: 0x30DA, + 7618: 0x30DB, + 7619: 0x30DC, + 7620: 0x30DD, + 7621: 0x30DE, + 7622: 0x30DF, + 7623: 0x30E0, + 7624: 0x30E1, + 7625: 0x30E2, + 7626: 0x30E3, + 7627: 0x30E4, + 7628: 0x30E5, + 7629: 0x30E6, + 7630: 0x30E7, + 7631: 0x30E8, + 7632: 0x30E9, + 7633: 0x30EA, + 7634: 0x30EB, + 7635: 0x30EC, + 7636: 0x30ED, + 7637: 0x30EE, + 7638: 0x30EF, + 7639: 0x30F0, + 7640: 0x30F1, + 7641: 0x30F2, + 7642: 0x30F3, + 7643: 0x30F4, + 7644: 0x30F5, + 7645: 0x30F6, + 7654: 0xCCFE, + 7655: 0xCCFF, + 7656: 0xCD00, + 7657: 0xCD02, + 7658: 0xCD03, + 7659: 0xCD04, + 7660: 0xCD05, + 7661: 0xCD06, + 7662: 0xCD07, + 7663: 0xCD0A, + 7664: 0xCD0B, + 7665: 0xCD0D, + 7666: 0xCD0E, + 7667: 0xCD0F, + 7668: 0xCD11, + 7669: 0xCD12, + 7670: 0xCD13, + 7671: 0xCD14, + 7672: 0xCD15, + 7673: 0xCD16, + 7674: 0xCD17, + 7675: 0xCD1A, + 7676: 0xCD1C, + 7677: 0xCD1E, + 7678: 0xCD1F, + 7679: 0xCD20, + 7680: 0xCD21, + 7681: 0xCD22, + 7682: 0xCD23, + 7683: 0xCD25, + 7684: 0xCD26, + 7685: 0xCD27, + 7686: 0xCD29, + 7687: 0xCD2A, + 7688: 0xCD2B, + 7689: 0xCD2D, + 7690: 0xCD2E, + 7691: 0xCD2F, + 7692: 0xCD30, + 7693: 0xCD31, + 7694: 0xCD32, + 7695: 0xCD33, + 7696: 0xCD34, + 7697: 0xCD35, + 7698: 0xCD36, + 7699: 0xCD37, + 7700: 0xCD38, + 7701: 0xCD3A, + 7702: 0xCD3B, + 7703: 0xCD3C, + 7704: 0xCD3D, + 7705: 0xCD3E, + 7706: 0xCD3F, + 7707: 0xCD40, + 7708: 0xCD41, + 7709: 0xCD42, + 7710: 0xCD43, + 7711: 0xCD44, + 7712: 0xCD45, + 7713: 0xCD46, + 7714: 0xCD47, + 7715: 0xCD48, + 7716: 0xCD49, + 7717: 0xCD4A, + 7718: 0xCD4B, + 7719: 0xCD4C, + 7720: 0xCD4D, + 7721: 0xCD4E, + 7722: 0xCD4F, + 7723: 0xCD50, + 7724: 0xCD51, + 7725: 0xCD52, + 7726: 0xCD53, + 7727: 0xCD54, + 7728: 0xCD55, + 7729: 0xCD56, + 7730: 0xCD57, + 7731: 0xCD58, + 7732: 0xCD59, + 7733: 0xCD5A, + 7734: 0xCD5B, + 7735: 0xCD5D, + 7736: 0xCD5E, + 7737: 0xCD5F, + 7738: 0x0410, + 7739: 0x0411, + 7740: 0x0412, + 7741: 0x0413, + 7742: 0x0414, + 7743: 0x0415, + 7744: 0x0401, + 7745: 0x0416, + 7746: 0x0417, + 7747: 0x0418, + 7748: 0x0419, + 7749: 0x041A, + 7750: 0x041B, + 7751: 0x041C, + 7752: 0x041D, + 7753: 0x041E, + 7754: 0x041F, + 7755: 0x0420, + 7756: 0x0421, + 7757: 0x0422, + 7758: 0x0423, + 7759: 0x0424, + 7760: 0x0425, + 7761: 0x0426, + 7762: 0x0427, + 7763: 0x0428, + 7764: 0x0429, + 7765: 0x042A, + 7766: 0x042B, + 7767: 0x042C, + 7768: 0x042D, + 7769: 0x042E, + 7770: 0x042F, + 7786: 0x0430, + 7787: 0x0431, + 7788: 0x0432, + 7789: 0x0433, + 7790: 0x0434, + 7791: 0x0435, + 7792: 0x0451, + 7793: 0x0436, + 7794: 0x0437, + 7795: 0x0438, + 7796: 0x0439, + 7797: 0x043A, + 7798: 0x043B, + 7799: 0x043C, + 7800: 0x043D, + 7801: 0x043E, + 7802: 0x043F, + 7803: 0x0440, + 7804: 0x0441, + 7805: 0x0442, + 7806: 0x0443, + 7807: 0x0444, + 7808: 0x0445, + 7809: 0x0446, + 7810: 0x0447, + 7811: 0x0448, + 7812: 0x0449, + 7813: 0x044A, + 7814: 0x044B, + 7815: 0x044C, + 7816: 0x044D, + 7817: 0x044E, + 7818: 0x044F, + 7832: 0xCD61, + 7833: 0xCD62, + 7834: 0xCD63, + 7835: 0xCD65, + 7836: 0xCD66, + 7837: 0xCD67, + 7838: 0xCD68, + 7839: 0xCD69, + 7840: 0xCD6A, + 7841: 0xCD6B, + 7842: 0xCD6E, + 7843: 0xCD70, + 7844: 0xCD72, + 7845: 0xCD73, + 7846: 0xCD74, + 7847: 0xCD75, + 7848: 0xCD76, + 7849: 0xCD77, + 7850: 0xCD79, + 7851: 0xCD7A, + 7852: 0xCD7B, + 7853: 0xCD7C, + 7854: 0xCD7D, + 7855: 0xCD7E, + 7856: 0xCD7F, + 7857: 0xCD80, + 7858: 0xCD81, + 7859: 0xCD82, + 7860: 0xCD83, + 7861: 0xCD84, + 7862: 0xCD85, + 7863: 0xCD86, + 7864: 0xCD87, + 7865: 0xCD89, + 7866: 0xCD8A, + 7867: 0xCD8B, + 7868: 0xCD8C, + 7869: 0xCD8D, + 7870: 0xCD8E, + 7871: 0xCD8F, + 7872: 0xCD90, + 7873: 0xCD91, + 7874: 0xCD92, + 7875: 0xCD93, + 7876: 0xCD96, + 7877: 0xCD97, + 7878: 0xCD99, + 7879: 0xCD9A, + 7880: 0xCD9B, + 7881: 0xCD9D, + 7882: 0xCD9E, + 7883: 0xCD9F, + 7884: 0xCDA0, + 7885: 0xCDA1, + 7886: 0xCDA2, + 7887: 0xCDA3, + 7888: 0xCDA6, + 7889: 0xCDA8, + 7890: 0xCDAA, + 7891: 0xCDAB, + 7892: 0xCDAC, + 7893: 0xCDAD, + 7894: 0xCDAE, + 7895: 0xCDAF, + 7896: 0xCDB1, + 7897: 0xCDB2, + 7898: 0xCDB3, + 7899: 0xCDB4, + 7900: 0xCDB5, + 7901: 0xCDB6, + 7902: 0xCDB7, + 7903: 0xCDB8, + 7904: 0xCDB9, + 7905: 0xCDBA, + 7906: 0xCDBB, + 7907: 0xCDBC, + 7908: 0xCDBD, + 7909: 0xCDBE, + 7910: 0xCDBF, + 7911: 0xCDC0, + 7912: 0xCDC1, + 7913: 0xCDC2, + 7914: 0xCDC3, + 7915: 0xCDC5, + 8010: 0xCDC6, + 8011: 0xCDC7, + 8012: 0xCDC8, + 8013: 0xCDC9, + 8014: 0xCDCA, + 8015: 0xCDCB, + 8016: 0xCDCD, + 8017: 0xCDCE, + 8018: 0xCDCF, + 8019: 0xCDD1, + 8020: 0xCDD2, + 8021: 0xCDD3, + 8022: 0xCDD4, + 8023: 0xCDD5, + 8024: 0xCDD6, + 8025: 0xCDD7, + 8026: 0xCDD8, + 8027: 0xCDD9, + 8028: 0xCDDA, + 8029: 0xCDDB, + 8030: 0xCDDC, + 8031: 0xCDDD, + 8032: 0xCDDE, + 8033: 0xCDDF, + 8034: 0xCDE0, + 8035: 0xCDE1, + 8036: 0xCDE2, + 8037: 0xCDE3, + 8038: 0xCDE4, + 8039: 0xCDE5, + 8040: 0xCDE6, + 8041: 0xCDE7, + 8042: 0xCDE9, + 8043: 0xCDEA, + 8044: 0xCDEB, + 8045: 0xCDED, + 8046: 0xCDEE, + 8047: 0xCDEF, + 8048: 0xCDF1, + 8049: 0xCDF2, + 8050: 0xCDF3, + 8051: 0xCDF4, + 8052: 0xCDF5, + 8053: 0xCDF6, + 8054: 0xCDF7, + 8055: 0xCDFA, + 8056: 0xCDFC, + 8057: 0xCDFE, + 8058: 0xCDFF, + 8059: 0xCE00, + 8060: 0xCE01, + 8061: 0xCE02, + 8062: 0xCE03, + 8063: 0xCE05, + 8064: 0xCE06, + 8065: 0xCE07, + 8066: 0xCE09, + 8067: 0xCE0A, + 8068: 0xCE0B, + 8069: 0xCE0D, + 8070: 0xCE0E, + 8071: 0xCE0F, + 8072: 0xCE10, + 8073: 0xCE11, + 8074: 0xCE12, + 8075: 0xCE13, + 8076: 0xCE15, + 8077: 0xCE16, + 8078: 0xCE17, + 8079: 0xCE18, + 8080: 0xCE1A, + 8081: 0xCE1B, + 8082: 0xCE1C, + 8083: 0xCE1D, + 8084: 0xCE1E, + 8085: 0xCE1F, + 8086: 0xCE22, + 8087: 0xCE23, + 8088: 0xCE25, + 8089: 0xCE26, + 8090: 0xCE27, + 8091: 0xCE29, + 8092: 0xCE2A, + 8093: 0xCE2B, + 8188: 0xCE2C, + 8189: 0xCE2D, + 8190: 0xCE2E, + 8191: 0xCE2F, + 8192: 0xCE32, + 8193: 0xCE34, + 8194: 0xCE36, + 8195: 0xCE37, + 8196: 0xCE38, + 8197: 0xCE39, + 8198: 0xCE3A, + 8199: 0xCE3B, + 8200: 0xCE3C, + 8201: 0xCE3D, + 8202: 0xCE3E, + 8203: 0xCE3F, + 8204: 0xCE40, + 8205: 0xCE41, + 8206: 0xCE42, + 8207: 0xCE43, + 8208: 0xCE44, + 8209: 0xCE45, + 8210: 0xCE46, + 8211: 0xCE47, + 8212: 0xCE48, + 8213: 0xCE49, + 8214: 0xCE4A, + 8215: 0xCE4B, + 8216: 0xCE4C, + 8217: 0xCE4D, + 8218: 0xCE4E, + 8219: 0xCE4F, + 8220: 0xCE50, + 8221: 0xCE51, + 8222: 0xCE52, + 8223: 0xCE53, + 8224: 0xCE54, + 8225: 0xCE55, + 8226: 0xCE56, + 8227: 0xCE57, + 8228: 0xCE5A, + 8229: 0xCE5B, + 8230: 0xCE5D, + 8231: 0xCE5E, + 8232: 0xCE62, + 8233: 0xCE63, + 8234: 0xCE64, + 8235: 0xCE65, + 8236: 0xCE66, + 8237: 0xCE67, + 8238: 0xCE6A, + 8239: 0xCE6C, + 8240: 0xCE6E, + 8241: 0xCE6F, + 8242: 0xCE70, + 8243: 0xCE71, + 8244: 0xCE72, + 8245: 0xCE73, + 8246: 0xCE76, + 8247: 0xCE77, + 8248: 0xCE79, + 8249: 0xCE7A, + 8250: 0xCE7B, + 8251: 0xCE7D, + 8252: 0xCE7E, + 8253: 0xCE7F, + 8254: 0xCE80, + 8255: 0xCE81, + 8256: 0xCE82, + 8257: 0xCE83, + 8258: 0xCE86, + 8259: 0xCE88, + 8260: 0xCE8A, + 8261: 0xCE8B, + 8262: 0xCE8C, + 8263: 0xCE8D, + 8264: 0xCE8E, + 8265: 0xCE8F, + 8266: 0xCE92, + 8267: 0xCE93, + 8268: 0xCE95, + 8269: 0xCE96, + 8270: 0xCE97, + 8271: 0xCE99, + 8366: 0xCE9A, + 8367: 0xCE9B, + 8368: 0xCE9C, + 8369: 0xCE9D, + 8370: 0xCE9E, + 8371: 0xCE9F, + 8372: 0xCEA2, + 8373: 0xCEA6, + 8374: 0xCEA7, + 8375: 0xCEA8, + 8376: 0xCEA9, + 8377: 0xCEAA, + 8378: 0xCEAB, + 8379: 0xCEAE, + 8380: 0xCEAF, + 8381: 0xCEB0, + 8382: 0xCEB1, + 8383: 0xCEB2, + 8384: 0xCEB3, + 8385: 0xCEB4, + 8386: 0xCEB5, + 8387: 0xCEB6, + 8388: 0xCEB7, + 8389: 0xCEB8, + 8390: 0xCEB9, + 8391: 0xCEBA, + 8392: 0xCEBB, + 8393: 0xCEBC, + 8394: 0xCEBD, + 8395: 0xCEBE, + 8396: 0xCEBF, + 8397: 0xCEC0, + 8398: 0xCEC2, + 8399: 0xCEC3, + 8400: 0xCEC4, + 8401: 0xCEC5, + 8402: 0xCEC6, + 8403: 0xCEC7, + 8404: 0xCEC8, + 8405: 0xCEC9, + 8406: 0xCECA, + 8407: 0xCECB, + 8408: 0xCECC, + 8409: 0xCECD, + 8410: 0xCECE, + 8411: 0xCECF, + 8412: 0xCED0, + 8413: 0xCED1, + 8414: 0xCED2, + 8415: 0xCED3, + 8416: 0xCED4, + 8417: 0xCED5, + 8418: 0xCED6, + 8419: 0xCED7, + 8420: 0xCED8, + 8421: 0xCED9, + 8422: 0xCEDA, + 8423: 0xCEDB, + 8424: 0xCEDC, + 8425: 0xCEDD, + 8426: 0xCEDE, + 8427: 0xCEDF, + 8428: 0xCEE0, + 8429: 0xCEE1, + 8430: 0xCEE2, + 8431: 0xCEE3, + 8432: 0xCEE6, + 8433: 0xCEE7, + 8434: 0xCEE9, + 8435: 0xCEEA, + 8436: 0xCEED, + 8437: 0xCEEE, + 8438: 0xCEEF, + 8439: 0xCEF0, + 8440: 0xCEF1, + 8441: 0xCEF2, + 8442: 0xCEF3, + 8443: 0xCEF6, + 8444: 0xCEFA, + 8445: 0xCEFB, + 8446: 0xCEFC, + 8447: 0xCEFD, + 8448: 0xCEFE, + 8449: 0xCEFF, + 8450: 0xAC00, + 8451: 0xAC01, + 8452: 0xAC04, + 8453: 0xAC07, + 8454: 0xAC08, + 8455: 0xAC09, + 8456: 0xAC0A, + 8457: 0xAC10, + 8458: 0xAC11, + 8459: 0xAC12, + 8460: 0xAC13, + 8461: 0xAC14, + 8462: 0xAC15, + 8463: 0xAC16, + 8464: 0xAC17, + 8465: 0xAC19, + 8466: 0xAC1A, + 8467: 0xAC1B, + 8468: 0xAC1C, + 8469: 0xAC1D, + 8470: 0xAC20, + 8471: 0xAC24, + 8472: 0xAC2C, + 8473: 0xAC2D, + 8474: 0xAC2F, + 8475: 0xAC30, + 8476: 0xAC31, + 8477: 0xAC38, + 8478: 0xAC39, + 8479: 0xAC3C, + 8480: 0xAC40, + 8481: 0xAC4B, + 8482: 0xAC4D, + 8483: 0xAC54, + 8484: 0xAC58, + 8485: 0xAC5C, + 8486: 0xAC70, + 8487: 0xAC71, + 8488: 0xAC74, + 8489: 0xAC77, + 8490: 0xAC78, + 8491: 0xAC7A, + 8492: 0xAC80, + 8493: 0xAC81, + 8494: 0xAC83, + 8495: 0xAC84, + 8496: 0xAC85, + 8497: 0xAC86, + 8498: 0xAC89, + 8499: 0xAC8A, + 8500: 0xAC8B, + 8501: 0xAC8C, + 8502: 0xAC90, + 8503: 0xAC94, + 8504: 0xAC9C, + 8505: 0xAC9D, + 8506: 0xAC9F, + 8507: 0xACA0, + 8508: 0xACA1, + 8509: 0xACA8, + 8510: 0xACA9, + 8511: 0xACAA, + 8512: 0xACAC, + 8513: 0xACAF, + 8514: 0xACB0, + 8515: 0xACB8, + 8516: 0xACB9, + 8517: 0xACBB, + 8518: 0xACBC, + 8519: 0xACBD, + 8520: 0xACC1, + 8521: 0xACC4, + 8522: 0xACC8, + 8523: 0xACCC, + 8524: 0xACD5, + 8525: 0xACD7, + 8526: 0xACE0, + 8527: 0xACE1, + 8528: 0xACE4, + 8529: 0xACE7, + 8530: 0xACE8, + 8531: 0xACEA, + 8532: 0xACEC, + 8533: 0xACEF, + 8534: 0xACF0, + 8535: 0xACF1, + 8536: 0xACF3, + 8537: 0xACF5, + 8538: 0xACF6, + 8539: 0xACFC, + 8540: 0xACFD, + 8541: 0xAD00, + 8542: 0xAD04, + 8543: 0xAD06, + 8544: 0xCF02, + 8545: 0xCF03, + 8546: 0xCF05, + 8547: 0xCF06, + 8548: 0xCF07, + 8549: 0xCF09, + 8550: 0xCF0A, + 8551: 0xCF0B, + 8552: 0xCF0C, + 8553: 0xCF0D, + 8554: 0xCF0E, + 8555: 0xCF0F, + 8556: 0xCF12, + 8557: 0xCF14, + 8558: 0xCF16, + 8559: 0xCF17, + 8560: 0xCF18, + 8561: 0xCF19, + 8562: 0xCF1A, + 8563: 0xCF1B, + 8564: 0xCF1D, + 8565: 0xCF1E, + 8566: 0xCF1F, + 8567: 0xCF21, + 8568: 0xCF22, + 8569: 0xCF23, + 8570: 0xCF25, + 8571: 0xCF26, + 8572: 0xCF27, + 8573: 0xCF28, + 8574: 0xCF29, + 8575: 0xCF2A, + 8576: 0xCF2B, + 8577: 0xCF2E, + 8578: 0xCF32, + 8579: 0xCF33, + 8580: 0xCF34, + 8581: 0xCF35, + 8582: 0xCF36, + 8583: 0xCF37, + 8584: 0xCF39, + 8585: 0xCF3A, + 8586: 0xCF3B, + 8587: 0xCF3C, + 8588: 0xCF3D, + 8589: 0xCF3E, + 8590: 0xCF3F, + 8591: 0xCF40, + 8592: 0xCF41, + 8593: 0xCF42, + 8594: 0xCF43, + 8595: 0xCF44, + 8596: 0xCF45, + 8597: 0xCF46, + 8598: 0xCF47, + 8599: 0xCF48, + 8600: 0xCF49, + 8601: 0xCF4A, + 8602: 0xCF4B, + 8603: 0xCF4C, + 8604: 0xCF4D, + 8605: 0xCF4E, + 8606: 0xCF4F, + 8607: 0xCF50, + 8608: 0xCF51, + 8609: 0xCF52, + 8610: 0xCF53, + 8611: 0xCF56, + 8612: 0xCF57, + 8613: 0xCF59, + 8614: 0xCF5A, + 8615: 0xCF5B, + 8616: 0xCF5D, + 8617: 0xCF5E, + 8618: 0xCF5F, + 8619: 0xCF60, + 8620: 0xCF61, + 8621: 0xCF62, + 8622: 0xCF63, + 8623: 0xCF66, + 8624: 0xCF68, + 8625: 0xCF6A, + 8626: 0xCF6B, + 8627: 0xCF6C, + 8628: 0xAD0C, + 8629: 0xAD0D, + 8630: 0xAD0F, + 8631: 0xAD11, + 8632: 0xAD18, + 8633: 0xAD1C, + 8634: 0xAD20, + 8635: 0xAD29, + 8636: 0xAD2C, + 8637: 0xAD2D, + 8638: 0xAD34, + 8639: 0xAD35, + 8640: 0xAD38, + 8641: 0xAD3C, + 8642: 0xAD44, + 8643: 0xAD45, + 8644: 0xAD47, + 8645: 0xAD49, + 8646: 0xAD50, + 8647: 0xAD54, + 8648: 0xAD58, + 8649: 0xAD61, + 8650: 0xAD63, + 8651: 0xAD6C, + 8652: 0xAD6D, + 8653: 0xAD70, + 8654: 0xAD73, + 8655: 0xAD74, + 8656: 0xAD75, + 8657: 0xAD76, + 8658: 0xAD7B, + 8659: 0xAD7C, + 8660: 0xAD7D, + 8661: 0xAD7F, + 8662: 0xAD81, + 8663: 0xAD82, + 8664: 0xAD88, + 8665: 0xAD89, + 8666: 0xAD8C, + 8667: 0xAD90, + 8668: 0xAD9C, + 8669: 0xAD9D, + 8670: 0xADA4, + 8671: 0xADB7, + 8672: 0xADC0, + 8673: 0xADC1, + 8674: 0xADC4, + 8675: 0xADC8, + 8676: 0xADD0, + 8677: 0xADD1, + 8678: 0xADD3, + 8679: 0xADDC, + 8680: 0xADE0, + 8681: 0xADE4, + 8682: 0xADF8, + 8683: 0xADF9, + 8684: 0xADFC, + 8685: 0xADFF, + 8686: 0xAE00, + 8687: 0xAE01, + 8688: 0xAE08, + 8689: 0xAE09, + 8690: 0xAE0B, + 8691: 0xAE0D, + 8692: 0xAE14, + 8693: 0xAE30, + 8694: 0xAE31, + 8695: 0xAE34, + 8696: 0xAE37, + 8697: 0xAE38, + 8698: 0xAE3A, + 8699: 0xAE40, + 8700: 0xAE41, + 8701: 0xAE43, + 8702: 0xAE45, + 8703: 0xAE46, + 8704: 0xAE4A, + 8705: 0xAE4C, + 8706: 0xAE4D, + 8707: 0xAE4E, + 8708: 0xAE50, + 8709: 0xAE54, + 8710: 0xAE56, + 8711: 0xAE5C, + 8712: 0xAE5D, + 8713: 0xAE5F, + 8714: 0xAE60, + 8715: 0xAE61, + 8716: 0xAE65, + 8717: 0xAE68, + 8718: 0xAE69, + 8719: 0xAE6C, + 8720: 0xAE70, + 8721: 0xAE78, + 8722: 0xCF6D, + 8723: 0xCF6E, + 8724: 0xCF6F, + 8725: 0xCF72, + 8726: 0xCF73, + 8727: 0xCF75, + 8728: 0xCF76, + 8729: 0xCF77, + 8730: 0xCF79, + 8731: 0xCF7A, + 8732: 0xCF7B, + 8733: 0xCF7C, + 8734: 0xCF7D, + 8735: 0xCF7E, + 8736: 0xCF7F, + 8737: 0xCF81, + 8738: 0xCF82, + 8739: 0xCF83, + 8740: 0xCF84, + 8741: 0xCF86, + 8742: 0xCF87, + 8743: 0xCF88, + 8744: 0xCF89, + 8745: 0xCF8A, + 8746: 0xCF8B, + 8747: 0xCF8D, + 8748: 0xCF8E, + 8749: 0xCF8F, + 8750: 0xCF90, + 8751: 0xCF91, + 8752: 0xCF92, + 8753: 0xCF93, + 8754: 0xCF94, + 8755: 0xCF95, + 8756: 0xCF96, + 8757: 0xCF97, + 8758: 0xCF98, + 8759: 0xCF99, + 8760: 0xCF9A, + 8761: 0xCF9B, + 8762: 0xCF9C, + 8763: 0xCF9D, + 8764: 0xCF9E, + 8765: 0xCF9F, + 8766: 0xCFA0, + 8767: 0xCFA2, + 8768: 0xCFA3, + 8769: 0xCFA4, + 8770: 0xCFA5, + 8771: 0xCFA6, + 8772: 0xCFA7, + 8773: 0xCFA9, + 8774: 0xCFAA, + 8775: 0xCFAB, + 8776: 0xCFAC, + 8777: 0xCFAD, + 8778: 0xCFAE, + 8779: 0xCFAF, + 8780: 0xCFB1, + 8781: 0xCFB2, + 8782: 0xCFB3, + 8783: 0xCFB4, + 8784: 0xCFB5, + 8785: 0xCFB6, + 8786: 0xCFB7, + 8787: 0xCFB8, + 8788: 0xCFB9, + 8789: 0xCFBA, + 8790: 0xCFBB, + 8791: 0xCFBC, + 8792: 0xCFBD, + 8793: 0xCFBE, + 8794: 0xCFBF, + 8795: 0xCFC0, + 8796: 0xCFC1, + 8797: 0xCFC2, + 8798: 0xCFC3, + 8799: 0xCFC5, + 8800: 0xCFC6, + 8801: 0xCFC7, + 8802: 0xCFC8, + 8803: 0xCFC9, + 8804: 0xCFCA, + 8805: 0xCFCB, + 8806: 0xAE79, + 8807: 0xAE7B, + 8808: 0xAE7C, + 8809: 0xAE7D, + 8810: 0xAE84, + 8811: 0xAE85, + 8812: 0xAE8C, + 8813: 0xAEBC, + 8814: 0xAEBD, + 8815: 0xAEBE, + 8816: 0xAEC0, + 8817: 0xAEC4, + 8818: 0xAECC, + 8819: 0xAECD, + 8820: 0xAECF, + 8821: 0xAED0, + 8822: 0xAED1, + 8823: 0xAED8, + 8824: 0xAED9, + 8825: 0xAEDC, + 8826: 0xAEE8, + 8827: 0xAEEB, + 8828: 0xAEED, + 8829: 0xAEF4, + 8830: 0xAEF8, + 8831: 0xAEFC, + 8832: 0xAF07, + 8833: 0xAF08, + 8834: 0xAF0D, + 8835: 0xAF10, + 8836: 0xAF2C, + 8837: 0xAF2D, + 8838: 0xAF30, + 8839: 0xAF32, + 8840: 0xAF34, + 8841: 0xAF3C, + 8842: 0xAF3D, + 8843: 0xAF3F, + 8844: 0xAF41, + 8845: 0xAF42, + 8846: 0xAF43, + 8847: 0xAF48, + 8848: 0xAF49, + 8849: 0xAF50, + 8850: 0xAF5C, + 8851: 0xAF5D, + 8852: 0xAF64, + 8853: 0xAF65, + 8854: 0xAF79, + 8855: 0xAF80, + 8856: 0xAF84, + 8857: 0xAF88, + 8858: 0xAF90, + 8859: 0xAF91, + 8860: 0xAF95, + 8861: 0xAF9C, + 8862: 0xAFB8, + 8863: 0xAFB9, + 8864: 0xAFBC, + 8865: 0xAFC0, + 8866: 0xAFC7, + 8867: 0xAFC8, + 8868: 0xAFC9, + 8869: 0xAFCB, + 8870: 0xAFCD, + 8871: 0xAFCE, + 8872: 0xAFD4, + 8873: 0xAFDC, + 8874: 0xAFE8, + 8875: 0xAFE9, + 8876: 0xAFF0, + 8877: 0xAFF1, + 8878: 0xAFF4, + 8879: 0xAFF8, + 8880: 0xB000, + 8881: 0xB001, + 8882: 0xB004, + 8883: 0xB00C, + 8884: 0xB010, + 8885: 0xB014, + 8886: 0xB01C, + 8887: 0xB01D, + 8888: 0xB028, + 8889: 0xB044, + 8890: 0xB045, + 8891: 0xB048, + 8892: 0xB04A, + 8893: 0xB04C, + 8894: 0xB04E, + 8895: 0xB053, + 8896: 0xB054, + 8897: 0xB055, + 8898: 0xB057, + 8899: 0xB059, + 8900: 0xCFCC, + 8901: 0xCFCD, + 8902: 0xCFCE, + 8903: 0xCFCF, + 8904: 0xCFD0, + 8905: 0xCFD1, + 8906: 0xCFD2, + 8907: 0xCFD3, + 8908: 0xCFD4, + 8909: 0xCFD5, + 8910: 0xCFD6, + 8911: 0xCFD7, + 8912: 0xCFD8, + 8913: 0xCFD9, + 8914: 0xCFDA, + 8915: 0xCFDB, + 8916: 0xCFDC, + 8917: 0xCFDD, + 8918: 0xCFDE, + 8919: 0xCFDF, + 8920: 0xCFE2, + 8921: 0xCFE3, + 8922: 0xCFE5, + 8923: 0xCFE6, + 8924: 0xCFE7, + 8925: 0xCFE9, + 8926: 0xCFEA, + 8927: 0xCFEB, + 8928: 0xCFEC, + 8929: 0xCFED, + 8930: 0xCFEE, + 8931: 0xCFEF, + 8932: 0xCFF2, + 8933: 0xCFF4, + 8934: 0xCFF6, + 8935: 0xCFF7, + 8936: 0xCFF8, + 8937: 0xCFF9, + 8938: 0xCFFA, + 8939: 0xCFFB, + 8940: 0xCFFD, + 8941: 0xCFFE, + 8942: 0xCFFF, + 8943: 0xD001, + 8944: 0xD002, + 8945: 0xD003, + 8946: 0xD005, + 8947: 0xD006, + 8948: 0xD007, + 8949: 0xD008, + 8950: 0xD009, + 8951: 0xD00A, + 8952: 0xD00B, + 8953: 0xD00C, + 8954: 0xD00D, + 8955: 0xD00E, + 8956: 0xD00F, + 8957: 0xD010, + 8958: 0xD012, + 8959: 0xD013, + 8960: 0xD014, + 8961: 0xD015, + 8962: 0xD016, + 8963: 0xD017, + 8964: 0xD019, + 8965: 0xD01A, + 8966: 0xD01B, + 8967: 0xD01C, + 8968: 0xD01D, + 8969: 0xD01E, + 8970: 0xD01F, + 8971: 0xD020, + 8972: 0xD021, + 8973: 0xD022, + 8974: 0xD023, + 8975: 0xD024, + 8976: 0xD025, + 8977: 0xD026, + 8978: 0xD027, + 8979: 0xD028, + 8980: 0xD029, + 8981: 0xD02A, + 8982: 0xD02B, + 8983: 0xD02C, + 8984: 0xB05D, + 8985: 0xB07C, + 8986: 0xB07D, + 8987: 0xB080, + 8988: 0xB084, + 8989: 0xB08C, + 8990: 0xB08D, + 8991: 0xB08F, + 8992: 0xB091, + 8993: 0xB098, + 8994: 0xB099, + 8995: 0xB09A, + 8996: 0xB09C, + 8997: 0xB09F, + 8998: 0xB0A0, + 8999: 0xB0A1, + 9000: 0xB0A2, + 9001: 0xB0A8, + 9002: 0xB0A9, + 9003: 0xB0AB, + 9004: 0xB0AC, + 9005: 0xB0AD, + 9006: 0xB0AE, + 9007: 0xB0AF, + 9008: 0xB0B1, + 9009: 0xB0B3, + 9010: 0xB0B4, + 9011: 0xB0B5, + 9012: 0xB0B8, + 9013: 0xB0BC, + 9014: 0xB0C4, + 9015: 0xB0C5, + 9016: 0xB0C7, + 9017: 0xB0C8, + 9018: 0xB0C9, + 9019: 0xB0D0, + 9020: 0xB0D1, + 9021: 0xB0D4, + 9022: 0xB0D8, + 9023: 0xB0E0, + 9024: 0xB0E5, + 9025: 0xB108, + 9026: 0xB109, + 9027: 0xB10B, + 9028: 0xB10C, + 9029: 0xB110, + 9030: 0xB112, + 9031: 0xB113, + 9032: 0xB118, + 9033: 0xB119, + 9034: 0xB11B, + 9035: 0xB11C, + 9036: 0xB11D, + 9037: 0xB123, + 9038: 0xB124, + 9039: 0xB125, + 9040: 0xB128, + 9041: 0xB12C, + 9042: 0xB134, + 9043: 0xB135, + 9044: 0xB137, + 9045: 0xB138, + 9046: 0xB139, + 9047: 0xB140, + 9048: 0xB141, + 9049: 0xB144, + 9050: 0xB148, + 9051: 0xB150, + 9052: 0xB151, + 9053: 0xB154, + 9054: 0xB155, + 9055: 0xB158, + 9056: 0xB15C, + 9057: 0xB160, + 9058: 0xB178, + 9059: 0xB179, + 9060: 0xB17C, + 9061: 0xB180, + 9062: 0xB182, + 9063: 0xB188, + 9064: 0xB189, + 9065: 0xB18B, + 9066: 0xB18D, + 9067: 0xB192, + 9068: 0xB193, + 9069: 0xB194, + 9070: 0xB198, + 9071: 0xB19C, + 9072: 0xB1A8, + 9073: 0xB1CC, + 9074: 0xB1D0, + 9075: 0xB1D4, + 9076: 0xB1DC, + 9077: 0xB1DD, + 9078: 0xD02E, + 9079: 0xD02F, + 9080: 0xD030, + 9081: 0xD031, + 9082: 0xD032, + 9083: 0xD033, + 9084: 0xD036, + 9085: 0xD037, + 9086: 0xD039, + 9087: 0xD03A, + 9088: 0xD03B, + 9089: 0xD03D, + 9090: 0xD03E, + 9091: 0xD03F, + 9092: 0xD040, + 9093: 0xD041, + 9094: 0xD042, + 9095: 0xD043, + 9096: 0xD046, + 9097: 0xD048, + 9098: 0xD04A, + 9099: 0xD04B, + 9100: 0xD04C, + 9101: 0xD04D, + 9102: 0xD04E, + 9103: 0xD04F, + 9104: 0xD051, + 9105: 0xD052, + 9106: 0xD053, + 9107: 0xD055, + 9108: 0xD056, + 9109: 0xD057, + 9110: 0xD059, + 9111: 0xD05A, + 9112: 0xD05B, + 9113: 0xD05C, + 9114: 0xD05D, + 9115: 0xD05E, + 9116: 0xD05F, + 9117: 0xD061, + 9118: 0xD062, + 9119: 0xD063, + 9120: 0xD064, + 9121: 0xD065, + 9122: 0xD066, + 9123: 0xD067, + 9124: 0xD068, + 9125: 0xD069, + 9126: 0xD06A, + 9127: 0xD06B, + 9128: 0xD06E, + 9129: 0xD06F, + 9130: 0xD071, + 9131: 0xD072, + 9132: 0xD073, + 9133: 0xD075, + 9134: 0xD076, + 9135: 0xD077, + 9136: 0xD078, + 9137: 0xD079, + 9138: 0xD07A, + 9139: 0xD07B, + 9140: 0xD07E, + 9141: 0xD07F, + 9142: 0xD080, + 9143: 0xD082, + 9144: 0xD083, + 9145: 0xD084, + 9146: 0xD085, + 9147: 0xD086, + 9148: 0xD087, + 9149: 0xD088, + 9150: 0xD089, + 9151: 0xD08A, + 9152: 0xD08B, + 9153: 0xD08C, + 9154: 0xD08D, + 9155: 0xD08E, + 9156: 0xD08F, + 9157: 0xD090, + 9158: 0xD091, + 9159: 0xD092, + 9160: 0xD093, + 9161: 0xD094, + 9162: 0xB1DF, + 9163: 0xB1E8, + 9164: 0xB1E9, + 9165: 0xB1EC, + 9166: 0xB1F0, + 9167: 0xB1F9, + 9168: 0xB1FB, + 9169: 0xB1FD, + 9170: 0xB204, + 9171: 0xB205, + 9172: 0xB208, + 9173: 0xB20B, + 9174: 0xB20C, + 9175: 0xB214, + 9176: 0xB215, + 9177: 0xB217, + 9178: 0xB219, + 9179: 0xB220, + 9180: 0xB234, + 9181: 0xB23C, + 9182: 0xB258, + 9183: 0xB25C, + 9184: 0xB260, + 9185: 0xB268, + 9186: 0xB269, + 9187: 0xB274, + 9188: 0xB275, + 9189: 0xB27C, + 9190: 0xB284, + 9191: 0xB285, + 9192: 0xB289, + 9193: 0xB290, + 9194: 0xB291, + 9195: 0xB294, + 9196: 0xB298, + 9197: 0xB299, + 9198: 0xB29A, + 9199: 0xB2A0, + 9200: 0xB2A1, + 9201: 0xB2A3, + 9202: 0xB2A5, + 9203: 0xB2A6, + 9204: 0xB2AA, + 9205: 0xB2AC, + 9206: 0xB2B0, + 9207: 0xB2B4, + 9208: 0xB2C8, + 9209: 0xB2C9, + 9210: 0xB2CC, + 9211: 0xB2D0, + 9212: 0xB2D2, + 9213: 0xB2D8, + 9214: 0xB2D9, + 9215: 0xB2DB, + 9216: 0xB2DD, + 9217: 0xB2E2, + 9218: 0xB2E4, + 9219: 0xB2E5, + 9220: 0xB2E6, + 9221: 0xB2E8, + 9222: 0xB2EB, + 9223: 0xB2EC, + 9224: 0xB2ED, + 9225: 0xB2EE, + 9226: 0xB2EF, + 9227: 0xB2F3, + 9228: 0xB2F4, + 9229: 0xB2F5, + 9230: 0xB2F7, + 9231: 0xB2F8, + 9232: 0xB2F9, + 9233: 0xB2FA, + 9234: 0xB2FB, + 9235: 0xB2FF, + 9236: 0xB300, + 9237: 0xB301, + 9238: 0xB304, + 9239: 0xB308, + 9240: 0xB310, + 9241: 0xB311, + 9242: 0xB313, + 9243: 0xB314, + 9244: 0xB315, + 9245: 0xB31C, + 9246: 0xB354, + 9247: 0xB355, + 9248: 0xB356, + 9249: 0xB358, + 9250: 0xB35B, + 9251: 0xB35C, + 9252: 0xB35E, + 9253: 0xB35F, + 9254: 0xB364, + 9255: 0xB365, + 9256: 0xD095, + 9257: 0xD096, + 9258: 0xD097, + 9259: 0xD098, + 9260: 0xD099, + 9261: 0xD09A, + 9262: 0xD09B, + 9263: 0xD09C, + 9264: 0xD09D, + 9265: 0xD09E, + 9266: 0xD09F, + 9267: 0xD0A0, + 9268: 0xD0A1, + 9269: 0xD0A2, + 9270: 0xD0A3, + 9271: 0xD0A6, + 9272: 0xD0A7, + 9273: 0xD0A9, + 9274: 0xD0AA, + 9275: 0xD0AB, + 9276: 0xD0AD, + 9277: 0xD0AE, + 9278: 0xD0AF, + 9279: 0xD0B0, + 9280: 0xD0B1, + 9281: 0xD0B2, + 9282: 0xD0B3, + 9283: 0xD0B6, + 9284: 0xD0B8, + 9285: 0xD0BA, + 9286: 0xD0BB, + 9287: 0xD0BC, + 9288: 0xD0BD, + 9289: 0xD0BE, + 9290: 0xD0BF, + 9291: 0xD0C2, + 9292: 0xD0C3, + 9293: 0xD0C5, + 9294: 0xD0C6, + 9295: 0xD0C7, + 9296: 0xD0CA, + 9297: 0xD0CB, + 9298: 0xD0CC, + 9299: 0xD0CD, + 9300: 0xD0CE, + 9301: 0xD0CF, + 9302: 0xD0D2, + 9303: 0xD0D6, + 9304: 0xD0D7, + 9305: 0xD0D8, + 9306: 0xD0D9, + 9307: 0xD0DA, + 9308: 0xD0DB, + 9309: 0xD0DE, + 9310: 0xD0DF, + 9311: 0xD0E1, + 9312: 0xD0E2, + 9313: 0xD0E3, + 9314: 0xD0E5, + 9315: 0xD0E6, + 9316: 0xD0E7, + 9317: 0xD0E8, + 9318: 0xD0E9, + 9319: 0xD0EA, + 9320: 0xD0EB, + 9321: 0xD0EE, + 9322: 0xD0F2, + 9323: 0xD0F3, + 9324: 0xD0F4, + 9325: 0xD0F5, + 9326: 0xD0F6, + 9327: 0xD0F7, + 9328: 0xD0F9, + 9329: 0xD0FA, + 9330: 0xD0FB, + 9331: 0xD0FC, + 9332: 0xD0FD, + 9333: 0xD0FE, + 9334: 0xD0FF, + 9335: 0xD100, + 9336: 0xD101, + 9337: 0xD102, + 9338: 0xD103, + 9339: 0xD104, + 9340: 0xB367, + 9341: 0xB369, + 9342: 0xB36B, + 9343: 0xB36E, + 9344: 0xB370, + 9345: 0xB371, + 9346: 0xB374, + 9347: 0xB378, + 9348: 0xB380, + 9349: 0xB381, + 9350: 0xB383, + 9351: 0xB384, + 9352: 0xB385, + 9353: 0xB38C, + 9354: 0xB390, + 9355: 0xB394, + 9356: 0xB3A0, + 9357: 0xB3A1, + 9358: 0xB3A8, + 9359: 0xB3AC, + 9360: 0xB3C4, + 9361: 0xB3C5, + 9362: 0xB3C8, + 9363: 0xB3CB, + 9364: 0xB3CC, + 9365: 0xB3CE, + 9366: 0xB3D0, + 9367: 0xB3D4, + 9368: 0xB3D5, + 9369: 0xB3D7, + 9370: 0xB3D9, + 9371: 0xB3DB, + 9372: 0xB3DD, + 9373: 0xB3E0, + 9374: 0xB3E4, + 9375: 0xB3E8, + 9376: 0xB3FC, + 9377: 0xB410, + 9378: 0xB418, + 9379: 0xB41C, + 9380: 0xB420, + 9381: 0xB428, + 9382: 0xB429, + 9383: 0xB42B, + 9384: 0xB434, + 9385: 0xB450, + 9386: 0xB451, + 9387: 0xB454, + 9388: 0xB458, + 9389: 0xB460, + 9390: 0xB461, + 9391: 0xB463, + 9392: 0xB465, + 9393: 0xB46C, + 9394: 0xB480, + 9395: 0xB488, + 9396: 0xB49D, + 9397: 0xB4A4, + 9398: 0xB4A8, + 9399: 0xB4AC, + 9400: 0xB4B5, + 9401: 0xB4B7, + 9402: 0xB4B9, + 9403: 0xB4C0, + 9404: 0xB4C4, + 9405: 0xB4C8, + 9406: 0xB4D0, + 9407: 0xB4D5, + 9408: 0xB4DC, + 9409: 0xB4DD, + 9410: 0xB4E0, + 9411: 0xB4E3, + 9412: 0xB4E4, + 9413: 0xB4E6, + 9414: 0xB4EC, + 9415: 0xB4ED, + 9416: 0xB4EF, + 9417: 0xB4F1, + 9418: 0xB4F8, + 9419: 0xB514, + 9420: 0xB515, + 9421: 0xB518, + 9422: 0xB51B, + 9423: 0xB51C, + 9424: 0xB524, + 9425: 0xB525, + 9426: 0xB527, + 9427: 0xB528, + 9428: 0xB529, + 9429: 0xB52A, + 9430: 0xB530, + 9431: 0xB531, + 9432: 0xB534, + 9433: 0xB538, + 9434: 0xD105, + 9435: 0xD106, + 9436: 0xD107, + 9437: 0xD108, + 9438: 0xD109, + 9439: 0xD10A, + 9440: 0xD10B, + 9441: 0xD10C, + 9442: 0xD10E, + 9443: 0xD10F, + 9444: 0xD110, + 9445: 0xD111, + 9446: 0xD112, + 9447: 0xD113, + 9448: 0xD114, + 9449: 0xD115, + 9450: 0xD116, + 9451: 0xD117, + 9452: 0xD118, + 9453: 0xD119, + 9454: 0xD11A, + 9455: 0xD11B, + 9456: 0xD11C, + 9457: 0xD11D, + 9458: 0xD11E, + 9459: 0xD11F, + 9460: 0xD120, + 9461: 0xD121, + 9462: 0xD122, + 9463: 0xD123, + 9464: 0xD124, + 9465: 0xD125, + 9466: 0xD126, + 9467: 0xD127, + 9468: 0xD128, + 9469: 0xD129, + 9470: 0xD12A, + 9471: 0xD12B, + 9472: 0xD12C, + 9473: 0xD12D, + 9474: 0xD12E, + 9475: 0xD12F, + 9476: 0xD132, + 9477: 0xD133, + 9478: 0xD135, + 9479: 0xD136, + 9480: 0xD137, + 9481: 0xD139, + 9482: 0xD13B, + 9483: 0xD13C, + 9484: 0xD13D, + 9485: 0xD13E, + 9486: 0xD13F, + 9487: 0xD142, + 9488: 0xD146, + 9489: 0xD147, + 9490: 0xD148, + 9491: 0xD149, + 9492: 0xD14A, + 9493: 0xD14B, + 9494: 0xD14E, + 9495: 0xD14F, + 9496: 0xD151, + 9497: 0xD152, + 9498: 0xD153, + 9499: 0xD155, + 9500: 0xD156, + 9501: 0xD157, + 9502: 0xD158, + 9503: 0xD159, + 9504: 0xD15A, + 9505: 0xD15B, + 9506: 0xD15E, + 9507: 0xD160, + 9508: 0xD162, + 9509: 0xD163, + 9510: 0xD164, + 9511: 0xD165, + 9512: 0xD166, + 9513: 0xD167, + 9514: 0xD169, + 9515: 0xD16A, + 9516: 0xD16B, + 9517: 0xD16D, + 9518: 0xB540, + 9519: 0xB541, + 9520: 0xB543, + 9521: 0xB544, + 9522: 0xB545, + 9523: 0xB54B, + 9524: 0xB54C, + 9525: 0xB54D, + 9526: 0xB550, + 9527: 0xB554, + 9528: 0xB55C, + 9529: 0xB55D, + 9530: 0xB55F, + 9531: 0xB560, + 9532: 0xB561, + 9533: 0xB5A0, + 9534: 0xB5A1, + 9535: 0xB5A4, + 9536: 0xB5A8, + 9537: 0xB5AA, + 9538: 0xB5AB, + 9539: 0xB5B0, + 9540: 0xB5B1, + 9541: 0xB5B3, + 9542: 0xB5B4, + 9543: 0xB5B5, + 9544: 0xB5BB, + 9545: 0xB5BC, + 9546: 0xB5BD, + 9547: 0xB5C0, + 9548: 0xB5C4, + 9549: 0xB5CC, + 9550: 0xB5CD, + 9551: 0xB5CF, + 9552: 0xB5D0, + 9553: 0xB5D1, + 9554: 0xB5D8, + 9555: 0xB5EC, + 9556: 0xB610, + 9557: 0xB611, + 9558: 0xB614, + 9559: 0xB618, + 9560: 0xB625, + 9561: 0xB62C, + 9562: 0xB634, + 9563: 0xB648, + 9564: 0xB664, + 9565: 0xB668, + 9566: 0xB69C, + 9567: 0xB69D, + 9568: 0xB6A0, + 9569: 0xB6A4, + 9570: 0xB6AB, + 9571: 0xB6AC, + 9572: 0xB6B1, + 9573: 0xB6D4, + 9574: 0xB6F0, + 9575: 0xB6F4, + 9576: 0xB6F8, + 9577: 0xB700, + 9578: 0xB701, + 9579: 0xB705, + 9580: 0xB728, + 9581: 0xB729, + 9582: 0xB72C, + 9583: 0xB72F, + 9584: 0xB730, + 9585: 0xB738, + 9586: 0xB739, + 9587: 0xB73B, + 9588: 0xB744, + 9589: 0xB748, + 9590: 0xB74C, + 9591: 0xB754, + 9592: 0xB755, + 9593: 0xB760, + 9594: 0xB764, + 9595: 0xB768, + 9596: 0xB770, + 9597: 0xB771, + 9598: 0xB773, + 9599: 0xB775, + 9600: 0xB77C, + 9601: 0xB77D, + 9602: 0xB780, + 9603: 0xB784, + 9604: 0xB78C, + 9605: 0xB78D, + 9606: 0xB78F, + 9607: 0xB790, + 9608: 0xB791, + 9609: 0xB792, + 9610: 0xB796, + 9611: 0xB797, + 9612: 0xD16E, + 9613: 0xD16F, + 9614: 0xD170, + 9615: 0xD171, + 9616: 0xD172, + 9617: 0xD173, + 9618: 0xD174, + 9619: 0xD175, + 9620: 0xD176, + 9621: 0xD177, + 9622: 0xD178, + 9623: 0xD179, + 9624: 0xD17A, + 9625: 0xD17B, + 9626: 0xD17D, + 9627: 0xD17E, + 9628: 0xD17F, + 9629: 0xD180, + 9630: 0xD181, + 9631: 0xD182, + 9632: 0xD183, + 9633: 0xD185, + 9634: 0xD186, + 9635: 0xD187, + 9636: 0xD189, + 9637: 0xD18A, + 9638: 0xD18B, + 9639: 0xD18C, + 9640: 0xD18D, + 9641: 0xD18E, + 9642: 0xD18F, + 9643: 0xD190, + 9644: 0xD191, + 9645: 0xD192, + 9646: 0xD193, + 9647: 0xD194, + 9648: 0xD195, + 9649: 0xD196, + 9650: 0xD197, + 9651: 0xD198, + 9652: 0xD199, + 9653: 0xD19A, + 9654: 0xD19B, + 9655: 0xD19C, + 9656: 0xD19D, + 9657: 0xD19E, + 9658: 0xD19F, + 9659: 0xD1A2, + 9660: 0xD1A3, + 9661: 0xD1A5, + 9662: 0xD1A6, + 9663: 0xD1A7, + 9664: 0xD1A9, + 9665: 0xD1AA, + 9666: 0xD1AB, + 9667: 0xD1AC, + 9668: 0xD1AD, + 9669: 0xD1AE, + 9670: 0xD1AF, + 9671: 0xD1B2, + 9672: 0xD1B4, + 9673: 0xD1B6, + 9674: 0xD1B7, + 9675: 0xD1B8, + 9676: 0xD1B9, + 9677: 0xD1BB, + 9678: 0xD1BD, + 9679: 0xD1BE, + 9680: 0xD1BF, + 9681: 0xD1C1, + 9682: 0xD1C2, + 9683: 0xD1C3, + 9684: 0xD1C4, + 9685: 0xD1C5, + 9686: 0xD1C6, + 9687: 0xD1C7, + 9688: 0xD1C8, + 9689: 0xD1C9, + 9690: 0xD1CA, + 9691: 0xD1CB, + 9692: 0xD1CC, + 9693: 0xD1CD, + 9694: 0xD1CE, + 9695: 0xD1CF, + 9696: 0xB798, + 9697: 0xB799, + 9698: 0xB79C, + 9699: 0xB7A0, + 9700: 0xB7A8, + 9701: 0xB7A9, + 9702: 0xB7AB, + 9703: 0xB7AC, + 9704: 0xB7AD, + 9705: 0xB7B4, + 9706: 0xB7B5, + 9707: 0xB7B8, + 9708: 0xB7C7, + 9709: 0xB7C9, + 9710: 0xB7EC, + 9711: 0xB7ED, + 9712: 0xB7F0, + 9713: 0xB7F4, + 9714: 0xB7FC, + 9715: 0xB7FD, + 9716: 0xB7FF, + 9717: 0xB800, + 9718: 0xB801, + 9719: 0xB807, + 9720: 0xB808, + 9721: 0xB809, + 9722: 0xB80C, + 9723: 0xB810, + 9724: 0xB818, + 9725: 0xB819, + 9726: 0xB81B, + 9727: 0xB81D, + 9728: 0xB824, + 9729: 0xB825, + 9730: 0xB828, + 9731: 0xB82C, + 9732: 0xB834, + 9733: 0xB835, + 9734: 0xB837, + 9735: 0xB838, + 9736: 0xB839, + 9737: 0xB840, + 9738: 0xB844, + 9739: 0xB851, + 9740: 0xB853, + 9741: 0xB85C, + 9742: 0xB85D, + 9743: 0xB860, + 9744: 0xB864, + 9745: 0xB86C, + 9746: 0xB86D, + 9747: 0xB86F, + 9748: 0xB871, + 9749: 0xB878, + 9750: 0xB87C, + 9751: 0xB88D, + 9752: 0xB8A8, + 9753: 0xB8B0, + 9754: 0xB8B4, + 9755: 0xB8B8, + 9756: 0xB8C0, + 9757: 0xB8C1, + 9758: 0xB8C3, + 9759: 0xB8C5, + 9760: 0xB8CC, + 9761: 0xB8D0, + 9762: 0xB8D4, + 9763: 0xB8DD, + 9764: 0xB8DF, + 9765: 0xB8E1, + 9766: 0xB8E8, + 9767: 0xB8E9, + 9768: 0xB8EC, + 9769: 0xB8F0, + 9770: 0xB8F8, + 9771: 0xB8F9, + 9772: 0xB8FB, + 9773: 0xB8FD, + 9774: 0xB904, + 9775: 0xB918, + 9776: 0xB920, + 9777: 0xB93C, + 9778: 0xB93D, + 9779: 0xB940, + 9780: 0xB944, + 9781: 0xB94C, + 9782: 0xB94F, + 9783: 0xB951, + 9784: 0xB958, + 9785: 0xB959, + 9786: 0xB95C, + 9787: 0xB960, + 9788: 0xB968, + 9789: 0xB969, + 9790: 0xD1D0, + 9791: 0xD1D1, + 9792: 0xD1D2, + 9793: 0xD1D3, + 9794: 0xD1D4, + 9795: 0xD1D5, + 9796: 0xD1D6, + 9797: 0xD1D7, + 9798: 0xD1D9, + 9799: 0xD1DA, + 9800: 0xD1DB, + 9801: 0xD1DC, + 9802: 0xD1DD, + 9803: 0xD1DE, + 9804: 0xD1DF, + 9805: 0xD1E0, + 9806: 0xD1E1, + 9807: 0xD1E2, + 9808: 0xD1E3, + 9809: 0xD1E4, + 9810: 0xD1E5, + 9811: 0xD1E6, + 9812: 0xD1E7, + 9813: 0xD1E8, + 9814: 0xD1E9, + 9815: 0xD1EA, + 9816: 0xD1EB, + 9817: 0xD1EC, + 9818: 0xD1ED, + 9819: 0xD1EE, + 9820: 0xD1EF, + 9821: 0xD1F0, + 9822: 0xD1F1, + 9823: 0xD1F2, + 9824: 0xD1F3, + 9825: 0xD1F5, + 9826: 0xD1F6, + 9827: 0xD1F7, + 9828: 0xD1F9, + 9829: 0xD1FA, + 9830: 0xD1FB, + 9831: 0xD1FC, + 9832: 0xD1FD, + 9833: 0xD1FE, + 9834: 0xD1FF, + 9835: 0xD200, + 9836: 0xD201, + 9837: 0xD202, + 9838: 0xD203, + 9839: 0xD204, + 9840: 0xD205, + 9841: 0xD206, + 9842: 0xD208, + 9843: 0xD20A, + 9844: 0xD20B, + 9845: 0xD20C, + 9846: 0xD20D, + 9847: 0xD20E, + 9848: 0xD20F, + 9849: 0xD211, + 9850: 0xD212, + 9851: 0xD213, + 9852: 0xD214, + 9853: 0xD215, + 9854: 0xD216, + 9855: 0xD217, + 9856: 0xD218, + 9857: 0xD219, + 9858: 0xD21A, + 9859: 0xD21B, + 9860: 0xD21C, + 9861: 0xD21D, + 9862: 0xD21E, + 9863: 0xD21F, + 9864: 0xD220, + 9865: 0xD221, + 9866: 0xD222, + 9867: 0xD223, + 9868: 0xD224, + 9869: 0xD225, + 9870: 0xD226, + 9871: 0xD227, + 9872: 0xD228, + 9873: 0xD229, + 9874: 0xB96B, + 9875: 0xB96D, + 9876: 0xB974, + 9877: 0xB975, + 9878: 0xB978, + 9879: 0xB97C, + 9880: 0xB984, + 9881: 0xB985, + 9882: 0xB987, + 9883: 0xB989, + 9884: 0xB98A, + 9885: 0xB98D, + 9886: 0xB98E, + 9887: 0xB9AC, + 9888: 0xB9AD, + 9889: 0xB9B0, + 9890: 0xB9B4, + 9891: 0xB9BC, + 9892: 0xB9BD, + 9893: 0xB9BF, + 9894: 0xB9C1, + 9895: 0xB9C8, + 9896: 0xB9C9, + 9897: 0xB9CC, + 9898: 0xB9CE, + 9899: 0xB9CF, + 9900: 0xB9D0, + 9901: 0xB9D1, + 9902: 0xB9D2, + 9903: 0xB9D8, + 9904: 0xB9D9, + 9905: 0xB9DB, + 9906: 0xB9DD, + 9907: 0xB9DE, + 9908: 0xB9E1, + 9909: 0xB9E3, + 9910: 0xB9E4, + 9911: 0xB9E5, + 9912: 0xB9E8, + 9913: 0xB9EC, + 9914: 0xB9F4, + 9915: 0xB9F5, + 9916: 0xB9F7, + 9917: 0xB9F8, + 9918: 0xB9F9, + 9919: 0xB9FA, + 9920: 0xBA00, + 9921: 0xBA01, + 9922: 0xBA08, + 9923: 0xBA15, + 9924: 0xBA38, + 9925: 0xBA39, + 9926: 0xBA3C, + 9927: 0xBA40, + 9928: 0xBA42, + 9929: 0xBA48, + 9930: 0xBA49, + 9931: 0xBA4B, + 9932: 0xBA4D, + 9933: 0xBA4E, + 9934: 0xBA53, + 9935: 0xBA54, + 9936: 0xBA55, + 9937: 0xBA58, + 9938: 0xBA5C, + 9939: 0xBA64, + 9940: 0xBA65, + 9941: 0xBA67, + 9942: 0xBA68, + 9943: 0xBA69, + 9944: 0xBA70, + 9945: 0xBA71, + 9946: 0xBA74, + 9947: 0xBA78, + 9948: 0xBA83, + 9949: 0xBA84, + 9950: 0xBA85, + 9951: 0xBA87, + 9952: 0xBA8C, + 9953: 0xBAA8, + 9954: 0xBAA9, + 9955: 0xBAAB, + 9956: 0xBAAC, + 9957: 0xBAB0, + 9958: 0xBAB2, + 9959: 0xBAB8, + 9960: 0xBAB9, + 9961: 0xBABB, + 9962: 0xBABD, + 9963: 0xBAC4, + 9964: 0xBAC8, + 9965: 0xBAD8, + 9966: 0xBAD9, + 9967: 0xBAFC, + 9968: 0xD22A, + 9969: 0xD22B, + 9970: 0xD22E, + 9971: 0xD22F, + 9972: 0xD231, + 9973: 0xD232, + 9974: 0xD233, + 9975: 0xD235, + 9976: 0xD236, + 9977: 0xD237, + 9978: 0xD238, + 9979: 0xD239, + 9980: 0xD23A, + 9981: 0xD23B, + 9982: 0xD23E, + 9983: 0xD240, + 9984: 0xD242, + 9985: 0xD243, + 9986: 0xD244, + 9987: 0xD245, + 9988: 0xD246, + 9989: 0xD247, + 9990: 0xD249, + 9991: 0xD24A, + 9992: 0xD24B, + 9993: 0xD24C, + 9994: 0xD24D, + 9995: 0xD24E, + 9996: 0xD24F, + 9997: 0xD250, + 9998: 0xD251, + 9999: 0xD252, + 10000: 0xD253, + 10001: 0xD254, + 10002: 0xD255, + 10003: 0xD256, + 10004: 0xD257, + 10005: 0xD258, + 10006: 0xD259, + 10007: 0xD25A, + 10008: 0xD25B, + 10009: 0xD25D, + 10010: 0xD25E, + 10011: 0xD25F, + 10012: 0xD260, + 10013: 0xD261, + 10014: 0xD262, + 10015: 0xD263, + 10016: 0xD265, + 10017: 0xD266, + 10018: 0xD267, + 10019: 0xD268, + 10020: 0xD269, + 10021: 0xD26A, + 10022: 0xD26B, + 10023: 0xD26C, + 10024: 0xD26D, + 10025: 0xD26E, + 10026: 0xD26F, + 10027: 0xD270, + 10028: 0xD271, + 10029: 0xD272, + 10030: 0xD273, + 10031: 0xD274, + 10032: 0xD275, + 10033: 0xD276, + 10034: 0xD277, + 10035: 0xD278, + 10036: 0xD279, + 10037: 0xD27A, + 10038: 0xD27B, + 10039: 0xD27C, + 10040: 0xD27D, + 10041: 0xD27E, + 10042: 0xD27F, + 10043: 0xD282, + 10044: 0xD283, + 10045: 0xD285, + 10046: 0xD286, + 10047: 0xD287, + 10048: 0xD289, + 10049: 0xD28A, + 10050: 0xD28B, + 10051: 0xD28C, + 10052: 0xBB00, + 10053: 0xBB04, + 10054: 0xBB0D, + 10055: 0xBB0F, + 10056: 0xBB11, + 10057: 0xBB18, + 10058: 0xBB1C, + 10059: 0xBB20, + 10060: 0xBB29, + 10061: 0xBB2B, + 10062: 0xBB34, + 10063: 0xBB35, + 10064: 0xBB36, + 10065: 0xBB38, + 10066: 0xBB3B, + 10067: 0xBB3C, + 10068: 0xBB3D, + 10069: 0xBB3E, + 10070: 0xBB44, + 10071: 0xBB45, + 10072: 0xBB47, + 10073: 0xBB49, + 10074: 0xBB4D, + 10075: 0xBB4F, + 10076: 0xBB50, + 10077: 0xBB54, + 10078: 0xBB58, + 10079: 0xBB61, + 10080: 0xBB63, + 10081: 0xBB6C, + 10082: 0xBB88, + 10083: 0xBB8C, + 10084: 0xBB90, + 10085: 0xBBA4, + 10086: 0xBBA8, + 10087: 0xBBAC, + 10088: 0xBBB4, + 10089: 0xBBB7, + 10090: 0xBBC0, + 10091: 0xBBC4, + 10092: 0xBBC8, + 10093: 0xBBD0, + 10094: 0xBBD3, + 10095: 0xBBF8, + 10096: 0xBBF9, + 10097: 0xBBFC, + 10098: 0xBBFF, + 10099: 0xBC00, + 10100: 0xBC02, + 10101: 0xBC08, + 10102: 0xBC09, + 10103: 0xBC0B, + 10104: 0xBC0C, + 10105: 0xBC0D, + 10106: 0xBC0F, + 10107: 0xBC11, + 10108: 0xBC14, + 10109: 0xBC15, + 10110: 0xBC16, + 10111: 0xBC17, + 10112: 0xBC18, + 10113: 0xBC1B, + 10114: 0xBC1C, + 10115: 0xBC1D, + 10116: 0xBC1E, + 10117: 0xBC1F, + 10118: 0xBC24, + 10119: 0xBC25, + 10120: 0xBC27, + 10121: 0xBC29, + 10122: 0xBC2D, + 10123: 0xBC30, + 10124: 0xBC31, + 10125: 0xBC34, + 10126: 0xBC38, + 10127: 0xBC40, + 10128: 0xBC41, + 10129: 0xBC43, + 10130: 0xBC44, + 10131: 0xBC45, + 10132: 0xBC49, + 10133: 0xBC4C, + 10134: 0xBC4D, + 10135: 0xBC50, + 10136: 0xBC5D, + 10137: 0xBC84, + 10138: 0xBC85, + 10139: 0xBC88, + 10140: 0xBC8B, + 10141: 0xBC8C, + 10142: 0xBC8E, + 10143: 0xBC94, + 10144: 0xBC95, + 10145: 0xBC97, + 10146: 0xD28D, + 10147: 0xD28E, + 10148: 0xD28F, + 10149: 0xD292, + 10150: 0xD293, + 10151: 0xD294, + 10152: 0xD296, + 10153: 0xD297, + 10154: 0xD298, + 10155: 0xD299, + 10156: 0xD29A, + 10157: 0xD29B, + 10158: 0xD29D, + 10159: 0xD29E, + 10160: 0xD29F, + 10161: 0xD2A1, + 10162: 0xD2A2, + 10163: 0xD2A3, + 10164: 0xD2A5, + 10165: 0xD2A6, + 10166: 0xD2A7, + 10167: 0xD2A8, + 10168: 0xD2A9, + 10169: 0xD2AA, + 10170: 0xD2AB, + 10171: 0xD2AD, + 10172: 0xD2AE, + 10173: 0xD2AF, + 10174: 0xD2B0, + 10175: 0xD2B2, + 10176: 0xD2B3, + 10177: 0xD2B4, + 10178: 0xD2B5, + 10179: 0xD2B6, + 10180: 0xD2B7, + 10181: 0xD2BA, + 10182: 0xD2BB, + 10183: 0xD2BD, + 10184: 0xD2BE, + 10185: 0xD2C1, + 10186: 0xD2C3, + 10187: 0xD2C4, + 10188: 0xD2C5, + 10189: 0xD2C6, + 10190: 0xD2C7, + 10191: 0xD2CA, + 10192: 0xD2CC, + 10193: 0xD2CD, + 10194: 0xD2CE, + 10195: 0xD2CF, + 10196: 0xD2D0, + 10197: 0xD2D1, + 10198: 0xD2D2, + 10199: 0xD2D3, + 10200: 0xD2D5, + 10201: 0xD2D6, + 10202: 0xD2D7, + 10203: 0xD2D9, + 10204: 0xD2DA, + 10205: 0xD2DB, + 10206: 0xD2DD, + 10207: 0xD2DE, + 10208: 0xD2DF, + 10209: 0xD2E0, + 10210: 0xD2E1, + 10211: 0xD2E2, + 10212: 0xD2E3, + 10213: 0xD2E6, + 10214: 0xD2E7, + 10215: 0xD2E8, + 10216: 0xD2E9, + 10217: 0xD2EA, + 10218: 0xD2EB, + 10219: 0xD2EC, + 10220: 0xD2ED, + 10221: 0xD2EE, + 10222: 0xD2EF, + 10223: 0xD2F2, + 10224: 0xD2F3, + 10225: 0xD2F5, + 10226: 0xD2F6, + 10227: 0xD2F7, + 10228: 0xD2F9, + 10229: 0xD2FA, + 10230: 0xBC99, + 10231: 0xBC9A, + 10232: 0xBCA0, + 10233: 0xBCA1, + 10234: 0xBCA4, + 10235: 0xBCA7, + 10236: 0xBCA8, + 10237: 0xBCB0, + 10238: 0xBCB1, + 10239: 0xBCB3, + 10240: 0xBCB4, + 10241: 0xBCB5, + 10242: 0xBCBC, + 10243: 0xBCBD, + 10244: 0xBCC0, + 10245: 0xBCC4, + 10246: 0xBCCD, + 10247: 0xBCCF, + 10248: 0xBCD0, + 10249: 0xBCD1, + 10250: 0xBCD5, + 10251: 0xBCD8, + 10252: 0xBCDC, + 10253: 0xBCF4, + 10254: 0xBCF5, + 10255: 0xBCF6, + 10256: 0xBCF8, + 10257: 0xBCFC, + 10258: 0xBD04, + 10259: 0xBD05, + 10260: 0xBD07, + 10261: 0xBD09, + 10262: 0xBD10, + 10263: 0xBD14, + 10264: 0xBD24, + 10265: 0xBD2C, + 10266: 0xBD40, + 10267: 0xBD48, + 10268: 0xBD49, + 10269: 0xBD4C, + 10270: 0xBD50, + 10271: 0xBD58, + 10272: 0xBD59, + 10273: 0xBD64, + 10274: 0xBD68, + 10275: 0xBD80, + 10276: 0xBD81, + 10277: 0xBD84, + 10278: 0xBD87, + 10279: 0xBD88, + 10280: 0xBD89, + 10281: 0xBD8A, + 10282: 0xBD90, + 10283: 0xBD91, + 10284: 0xBD93, + 10285: 0xBD95, + 10286: 0xBD99, + 10287: 0xBD9A, + 10288: 0xBD9C, + 10289: 0xBDA4, + 10290: 0xBDB0, + 10291: 0xBDB8, + 10292: 0xBDD4, + 10293: 0xBDD5, + 10294: 0xBDD8, + 10295: 0xBDDC, + 10296: 0xBDE9, + 10297: 0xBDF0, + 10298: 0xBDF4, + 10299: 0xBDF8, + 10300: 0xBE00, + 10301: 0xBE03, + 10302: 0xBE05, + 10303: 0xBE0C, + 10304: 0xBE0D, + 10305: 0xBE10, + 10306: 0xBE14, + 10307: 0xBE1C, + 10308: 0xBE1D, + 10309: 0xBE1F, + 10310: 0xBE44, + 10311: 0xBE45, + 10312: 0xBE48, + 10313: 0xBE4C, + 10314: 0xBE4E, + 10315: 0xBE54, + 10316: 0xBE55, + 10317: 0xBE57, + 10318: 0xBE59, + 10319: 0xBE5A, + 10320: 0xBE5B, + 10321: 0xBE60, + 10322: 0xBE61, + 10323: 0xBE64, + 10324: 0xD2FB, + 10325: 0xD2FC, + 10326: 0xD2FD, + 10327: 0xD2FE, + 10328: 0xD2FF, + 10329: 0xD302, + 10330: 0xD304, + 10331: 0xD306, + 10332: 0xD307, + 10333: 0xD308, + 10334: 0xD309, + 10335: 0xD30A, + 10336: 0xD30B, + 10337: 0xD30F, + 10338: 0xD311, + 10339: 0xD312, + 10340: 0xD313, + 10341: 0xD315, + 10342: 0xD317, + 10343: 0xD318, + 10344: 0xD319, + 10345: 0xD31A, + 10346: 0xD31B, + 10347: 0xD31E, + 10348: 0xD322, + 10349: 0xD323, + 10350: 0xD324, + 10351: 0xD326, + 10352: 0xD327, + 10353: 0xD32A, + 10354: 0xD32B, + 10355: 0xD32D, + 10356: 0xD32E, + 10357: 0xD32F, + 10358: 0xD331, + 10359: 0xD332, + 10360: 0xD333, + 10361: 0xD334, + 10362: 0xD335, + 10363: 0xD336, + 10364: 0xD337, + 10365: 0xD33A, + 10366: 0xD33E, + 10367: 0xD33F, + 10368: 0xD340, + 10369: 0xD341, + 10370: 0xD342, + 10371: 0xD343, + 10372: 0xD346, + 10373: 0xD347, + 10374: 0xD348, + 10375: 0xD349, + 10376: 0xD34A, + 10377: 0xD34B, + 10378: 0xD34C, + 10379: 0xD34D, + 10380: 0xD34E, + 10381: 0xD34F, + 10382: 0xD350, + 10383: 0xD351, + 10384: 0xD352, + 10385: 0xD353, + 10386: 0xD354, + 10387: 0xD355, + 10388: 0xD356, + 10389: 0xD357, + 10390: 0xD358, + 10391: 0xD359, + 10392: 0xD35A, + 10393: 0xD35B, + 10394: 0xD35C, + 10395: 0xD35D, + 10396: 0xD35E, + 10397: 0xD35F, + 10398: 0xD360, + 10399: 0xD361, + 10400: 0xD362, + 10401: 0xD363, + 10402: 0xD364, + 10403: 0xD365, + 10404: 0xD366, + 10405: 0xD367, + 10406: 0xD368, + 10407: 0xD369, + 10408: 0xBE68, + 10409: 0xBE6A, + 10410: 0xBE70, + 10411: 0xBE71, + 10412: 0xBE73, + 10413: 0xBE74, + 10414: 0xBE75, + 10415: 0xBE7B, + 10416: 0xBE7C, + 10417: 0xBE7D, + 10418: 0xBE80, + 10419: 0xBE84, + 10420: 0xBE8C, + 10421: 0xBE8D, + 10422: 0xBE8F, + 10423: 0xBE90, + 10424: 0xBE91, + 10425: 0xBE98, + 10426: 0xBE99, + 10427: 0xBEA8, + 10428: 0xBED0, + 10429: 0xBED1, + 10430: 0xBED4, + 10431: 0xBED7, + 10432: 0xBED8, + 10433: 0xBEE0, + 10434: 0xBEE3, + 10435: 0xBEE4, + 10436: 0xBEE5, + 10437: 0xBEEC, + 10438: 0xBF01, + 10439: 0xBF08, + 10440: 0xBF09, + 10441: 0xBF18, + 10442: 0xBF19, + 10443: 0xBF1B, + 10444: 0xBF1C, + 10445: 0xBF1D, + 10446: 0xBF40, + 10447: 0xBF41, + 10448: 0xBF44, + 10449: 0xBF48, + 10450: 0xBF50, + 10451: 0xBF51, + 10452: 0xBF55, + 10453: 0xBF94, + 10454: 0xBFB0, + 10455: 0xBFC5, + 10456: 0xBFCC, + 10457: 0xBFCD, + 10458: 0xBFD0, + 10459: 0xBFD4, + 10460: 0xBFDC, + 10461: 0xBFDF, + 10462: 0xBFE1, + 10463: 0xC03C, + 10464: 0xC051, + 10465: 0xC058, + 10466: 0xC05C, + 10467: 0xC060, + 10468: 0xC068, + 10469: 0xC069, + 10470: 0xC090, + 10471: 0xC091, + 10472: 0xC094, + 10473: 0xC098, + 10474: 0xC0A0, + 10475: 0xC0A1, + 10476: 0xC0A3, + 10477: 0xC0A5, + 10478: 0xC0AC, + 10479: 0xC0AD, + 10480: 0xC0AF, + 10481: 0xC0B0, + 10482: 0xC0B3, + 10483: 0xC0B4, + 10484: 0xC0B5, + 10485: 0xC0B6, + 10486: 0xC0BC, + 10487: 0xC0BD, + 10488: 0xC0BF, + 10489: 0xC0C0, + 10490: 0xC0C1, + 10491: 0xC0C5, + 10492: 0xC0C8, + 10493: 0xC0C9, + 10494: 0xC0CC, + 10495: 0xC0D0, + 10496: 0xC0D8, + 10497: 0xC0D9, + 10498: 0xC0DB, + 10499: 0xC0DC, + 10500: 0xC0DD, + 10501: 0xC0E4, + 10502: 0xD36A, + 10503: 0xD36B, + 10504: 0xD36C, + 10505: 0xD36D, + 10506: 0xD36E, + 10507: 0xD36F, + 10508: 0xD370, + 10509: 0xD371, + 10510: 0xD372, + 10511: 0xD373, + 10512: 0xD374, + 10513: 0xD375, + 10514: 0xD376, + 10515: 0xD377, + 10516: 0xD378, + 10517: 0xD379, + 10518: 0xD37A, + 10519: 0xD37B, + 10520: 0xD37E, + 10521: 0xD37F, + 10522: 0xD381, + 10523: 0xD382, + 10524: 0xD383, + 10525: 0xD385, + 10526: 0xD386, + 10527: 0xD387, + 10528: 0xD388, + 10529: 0xD389, + 10530: 0xD38A, + 10531: 0xD38B, + 10532: 0xD38E, + 10533: 0xD392, + 10534: 0xD393, + 10535: 0xD394, + 10536: 0xD395, + 10537: 0xD396, + 10538: 0xD397, + 10539: 0xD39A, + 10540: 0xD39B, + 10541: 0xD39D, + 10542: 0xD39E, + 10543: 0xD39F, + 10544: 0xD3A1, + 10545: 0xD3A2, + 10546: 0xD3A3, + 10547: 0xD3A4, + 10548: 0xD3A5, + 10549: 0xD3A6, + 10550: 0xD3A7, + 10551: 0xD3AA, + 10552: 0xD3AC, + 10553: 0xD3AE, + 10554: 0xD3AF, + 10555: 0xD3B0, + 10556: 0xD3B1, + 10557: 0xD3B2, + 10558: 0xD3B3, + 10559: 0xD3B5, + 10560: 0xD3B6, + 10561: 0xD3B7, + 10562: 0xD3B9, + 10563: 0xD3BA, + 10564: 0xD3BB, + 10565: 0xD3BD, + 10566: 0xD3BE, + 10567: 0xD3BF, + 10568: 0xD3C0, + 10569: 0xD3C1, + 10570: 0xD3C2, + 10571: 0xD3C3, + 10572: 0xD3C6, + 10573: 0xD3C7, + 10574: 0xD3CA, + 10575: 0xD3CB, + 10576: 0xD3CC, + 10577: 0xD3CD, + 10578: 0xD3CE, + 10579: 0xD3CF, + 10580: 0xD3D1, + 10581: 0xD3D2, + 10582: 0xD3D3, + 10583: 0xD3D4, + 10584: 0xD3D5, + 10585: 0xD3D6, + 10586: 0xC0E5, + 10587: 0xC0E8, + 10588: 0xC0EC, + 10589: 0xC0F4, + 10590: 0xC0F5, + 10591: 0xC0F7, + 10592: 0xC0F9, + 10593: 0xC100, + 10594: 0xC104, + 10595: 0xC108, + 10596: 0xC110, + 10597: 0xC115, + 10598: 0xC11C, + 10599: 0xC11D, + 10600: 0xC11E, + 10601: 0xC11F, + 10602: 0xC120, + 10603: 0xC123, + 10604: 0xC124, + 10605: 0xC126, + 10606: 0xC127, + 10607: 0xC12C, + 10608: 0xC12D, + 10609: 0xC12F, + 10610: 0xC130, + 10611: 0xC131, + 10612: 0xC136, + 10613: 0xC138, + 10614: 0xC139, + 10615: 0xC13C, + 10616: 0xC140, + 10617: 0xC148, + 10618: 0xC149, + 10619: 0xC14B, + 10620: 0xC14C, + 10621: 0xC14D, + 10622: 0xC154, + 10623: 0xC155, + 10624: 0xC158, + 10625: 0xC15C, + 10626: 0xC164, + 10627: 0xC165, + 10628: 0xC167, + 10629: 0xC168, + 10630: 0xC169, + 10631: 0xC170, + 10632: 0xC174, + 10633: 0xC178, + 10634: 0xC185, + 10635: 0xC18C, + 10636: 0xC18D, + 10637: 0xC18E, + 10638: 0xC190, + 10639: 0xC194, + 10640: 0xC196, + 10641: 0xC19C, + 10642: 0xC19D, + 10643: 0xC19F, + 10644: 0xC1A1, + 10645: 0xC1A5, + 10646: 0xC1A8, + 10647: 0xC1A9, + 10648: 0xC1AC, + 10649: 0xC1B0, + 10650: 0xC1BD, + 10651: 0xC1C4, + 10652: 0xC1C8, + 10653: 0xC1CC, + 10654: 0xC1D4, + 10655: 0xC1D7, + 10656: 0xC1D8, + 10657: 0xC1E0, + 10658: 0xC1E4, + 10659: 0xC1E8, + 10660: 0xC1F0, + 10661: 0xC1F1, + 10662: 0xC1F3, + 10663: 0xC1FC, + 10664: 0xC1FD, + 10665: 0xC200, + 10666: 0xC204, + 10667: 0xC20C, + 10668: 0xC20D, + 10669: 0xC20F, + 10670: 0xC211, + 10671: 0xC218, + 10672: 0xC219, + 10673: 0xC21C, + 10674: 0xC21F, + 10675: 0xC220, + 10676: 0xC228, + 10677: 0xC229, + 10678: 0xC22B, + 10679: 0xC22D, + 10680: 0xD3D7, + 10681: 0xD3D9, + 10682: 0xD3DA, + 10683: 0xD3DB, + 10684: 0xD3DC, + 10685: 0xD3DD, + 10686: 0xD3DE, + 10687: 0xD3DF, + 10688: 0xD3E0, + 10689: 0xD3E2, + 10690: 0xD3E4, + 10691: 0xD3E5, + 10692: 0xD3E6, + 10693: 0xD3E7, + 10694: 0xD3E8, + 10695: 0xD3E9, + 10696: 0xD3EA, + 10697: 0xD3EB, + 10698: 0xD3EE, + 10699: 0xD3EF, + 10700: 0xD3F1, + 10701: 0xD3F2, + 10702: 0xD3F3, + 10703: 0xD3F5, + 10704: 0xD3F6, + 10705: 0xD3F7, + 10706: 0xD3F8, + 10707: 0xD3F9, + 10708: 0xD3FA, + 10709: 0xD3FB, + 10710: 0xD3FE, + 10711: 0xD400, + 10712: 0xD402, + 10713: 0xD403, + 10714: 0xD404, + 10715: 0xD405, + 10716: 0xD406, + 10717: 0xD407, + 10718: 0xD409, + 10719: 0xD40A, + 10720: 0xD40B, + 10721: 0xD40C, + 10722: 0xD40D, + 10723: 0xD40E, + 10724: 0xD40F, + 10725: 0xD410, + 10726: 0xD411, + 10727: 0xD412, + 10728: 0xD413, + 10729: 0xD414, + 10730: 0xD415, + 10731: 0xD416, + 10732: 0xD417, + 10733: 0xD418, + 10734: 0xD419, + 10735: 0xD41A, + 10736: 0xD41B, + 10737: 0xD41C, + 10738: 0xD41E, + 10739: 0xD41F, + 10740: 0xD420, + 10741: 0xD421, + 10742: 0xD422, + 10743: 0xD423, + 10744: 0xD424, + 10745: 0xD425, + 10746: 0xD426, + 10747: 0xD427, + 10748: 0xD428, + 10749: 0xD429, + 10750: 0xD42A, + 10751: 0xD42B, + 10752: 0xD42C, + 10753: 0xD42D, + 10754: 0xD42E, + 10755: 0xD42F, + 10756: 0xD430, + 10757: 0xD431, + 10758: 0xD432, + 10759: 0xD433, + 10760: 0xD434, + 10761: 0xD435, + 10762: 0xD436, + 10763: 0xD437, + 10764: 0xC22F, + 10765: 0xC231, + 10766: 0xC232, + 10767: 0xC234, + 10768: 0xC248, + 10769: 0xC250, + 10770: 0xC251, + 10771: 0xC254, + 10772: 0xC258, + 10773: 0xC260, + 10774: 0xC265, + 10775: 0xC26C, + 10776: 0xC26D, + 10777: 0xC270, + 10778: 0xC274, + 10779: 0xC27C, + 10780: 0xC27D, + 10781: 0xC27F, + 10782: 0xC281, + 10783: 0xC288, + 10784: 0xC289, + 10785: 0xC290, + 10786: 0xC298, + 10787: 0xC29B, + 10788: 0xC29D, + 10789: 0xC2A4, + 10790: 0xC2A5, + 10791: 0xC2A8, + 10792: 0xC2AC, + 10793: 0xC2AD, + 10794: 0xC2B4, + 10795: 0xC2B5, + 10796: 0xC2B7, + 10797: 0xC2B9, + 10798: 0xC2DC, + 10799: 0xC2DD, + 10800: 0xC2E0, + 10801: 0xC2E3, + 10802: 0xC2E4, + 10803: 0xC2EB, + 10804: 0xC2EC, + 10805: 0xC2ED, + 10806: 0xC2EF, + 10807: 0xC2F1, + 10808: 0xC2F6, + 10809: 0xC2F8, + 10810: 0xC2F9, + 10811: 0xC2FB, + 10812: 0xC2FC, + 10813: 0xC300, + 10814: 0xC308, + 10815: 0xC309, + 10816: 0xC30C, + 10817: 0xC30D, + 10818: 0xC313, + 10819: 0xC314, + 10820: 0xC315, + 10821: 0xC318, + 10822: 0xC31C, + 10823: 0xC324, + 10824: 0xC325, + 10825: 0xC328, + 10826: 0xC329, + 10827: 0xC345, + 10828: 0xC368, + 10829: 0xC369, + 10830: 0xC36C, + 10831: 0xC370, + 10832: 0xC372, + 10833: 0xC378, + 10834: 0xC379, + 10835: 0xC37C, + 10836: 0xC37D, + 10837: 0xC384, + 10838: 0xC388, + 10839: 0xC38C, + 10840: 0xC3C0, + 10841: 0xC3D8, + 10842: 0xC3D9, + 10843: 0xC3DC, + 10844: 0xC3DF, + 10845: 0xC3E0, + 10846: 0xC3E2, + 10847: 0xC3E8, + 10848: 0xC3E9, + 10849: 0xC3ED, + 10850: 0xC3F4, + 10851: 0xC3F5, + 10852: 0xC3F8, + 10853: 0xC408, + 10854: 0xC410, + 10855: 0xC424, + 10856: 0xC42C, + 10857: 0xC430, + 10858: 0xD438, + 10859: 0xD439, + 10860: 0xD43A, + 10861: 0xD43B, + 10862: 0xD43C, + 10863: 0xD43D, + 10864: 0xD43E, + 10865: 0xD43F, + 10866: 0xD441, + 10867: 0xD442, + 10868: 0xD443, + 10869: 0xD445, + 10870: 0xD446, + 10871: 0xD447, + 10872: 0xD448, + 10873: 0xD449, + 10874: 0xD44A, + 10875: 0xD44B, + 10876: 0xD44C, + 10877: 0xD44D, + 10878: 0xD44E, + 10879: 0xD44F, + 10880: 0xD450, + 10881: 0xD451, + 10882: 0xD452, + 10883: 0xD453, + 10884: 0xD454, + 10885: 0xD455, + 10886: 0xD456, + 10887: 0xD457, + 10888: 0xD458, + 10889: 0xD459, + 10890: 0xD45A, + 10891: 0xD45B, + 10892: 0xD45D, + 10893: 0xD45E, + 10894: 0xD45F, + 10895: 0xD461, + 10896: 0xD462, + 10897: 0xD463, + 10898: 0xD465, + 10899: 0xD466, + 10900: 0xD467, + 10901: 0xD468, + 10902: 0xD469, + 10903: 0xD46A, + 10904: 0xD46B, + 10905: 0xD46C, + 10906: 0xD46E, + 10907: 0xD470, + 10908: 0xD471, + 10909: 0xD472, + 10910: 0xD473, + 10911: 0xD474, + 10912: 0xD475, + 10913: 0xD476, + 10914: 0xD477, + 10915: 0xD47A, + 10916: 0xD47B, + 10917: 0xD47D, + 10918: 0xD47E, + 10919: 0xD481, + 10920: 0xD483, + 10921: 0xD484, + 10922: 0xD485, + 10923: 0xD486, + 10924: 0xD487, + 10925: 0xD48A, + 10926: 0xD48C, + 10927: 0xD48E, + 10928: 0xD48F, + 10929: 0xD490, + 10930: 0xD491, + 10931: 0xD492, + 10932: 0xD493, + 10933: 0xD495, + 10934: 0xD496, + 10935: 0xD497, + 10936: 0xD498, + 10937: 0xD499, + 10938: 0xD49A, + 10939: 0xD49B, + 10940: 0xD49C, + 10941: 0xD49D, + 10942: 0xC434, + 10943: 0xC43C, + 10944: 0xC43D, + 10945: 0xC448, + 10946: 0xC464, + 10947: 0xC465, + 10948: 0xC468, + 10949: 0xC46C, + 10950: 0xC474, + 10951: 0xC475, + 10952: 0xC479, + 10953: 0xC480, + 10954: 0xC494, + 10955: 0xC49C, + 10956: 0xC4B8, + 10957: 0xC4BC, + 10958: 0xC4E9, + 10959: 0xC4F0, + 10960: 0xC4F1, + 10961: 0xC4F4, + 10962: 0xC4F8, + 10963: 0xC4FA, + 10964: 0xC4FF, + 10965: 0xC500, + 10966: 0xC501, + 10967: 0xC50C, + 10968: 0xC510, + 10969: 0xC514, + 10970: 0xC51C, + 10971: 0xC528, + 10972: 0xC529, + 10973: 0xC52C, + 10974: 0xC530, + 10975: 0xC538, + 10976: 0xC539, + 10977: 0xC53B, + 10978: 0xC53D, + 10979: 0xC544, + 10980: 0xC545, + 10981: 0xC548, + 10982: 0xC549, + 10983: 0xC54A, + 10984: 0xC54C, + 10985: 0xC54D, + 10986: 0xC54E, + 10987: 0xC553, + 10988: 0xC554, + 10989: 0xC555, + 10990: 0xC557, + 10991: 0xC558, + 10992: 0xC559, + 10993: 0xC55D, + 10994: 0xC55E, + 10995: 0xC560, + 10996: 0xC561, + 10997: 0xC564, + 10998: 0xC568, + 10999: 0xC570, + 11000: 0xC571, + 11001: 0xC573, + 11002: 0xC574, + 11003: 0xC575, + 11004: 0xC57C, + 11005: 0xC57D, + 11006: 0xC580, + 11007: 0xC584, + 11008: 0xC587, + 11009: 0xC58C, + 11010: 0xC58D, + 11011: 0xC58F, + 11012: 0xC591, + 11013: 0xC595, + 11014: 0xC597, + 11015: 0xC598, + 11016: 0xC59C, + 11017: 0xC5A0, + 11018: 0xC5A9, + 11019: 0xC5B4, + 11020: 0xC5B5, + 11021: 0xC5B8, + 11022: 0xC5B9, + 11023: 0xC5BB, + 11024: 0xC5BC, + 11025: 0xC5BD, + 11026: 0xC5BE, + 11027: 0xC5C4, + 11028: 0xC5C5, + 11029: 0xC5C6, + 11030: 0xC5C7, + 11031: 0xC5C8, + 11032: 0xC5C9, + 11033: 0xC5CA, + 11034: 0xC5CC, + 11035: 0xC5CE, + 11036: 0xD49E, + 11037: 0xD49F, + 11038: 0xD4A0, + 11039: 0xD4A1, + 11040: 0xD4A2, + 11041: 0xD4A3, + 11042: 0xD4A4, + 11043: 0xD4A5, + 11044: 0xD4A6, + 11045: 0xD4A7, + 11046: 0xD4A8, + 11047: 0xD4AA, + 11048: 0xD4AB, + 11049: 0xD4AC, + 11050: 0xD4AD, + 11051: 0xD4AE, + 11052: 0xD4AF, + 11053: 0xD4B0, + 11054: 0xD4B1, + 11055: 0xD4B2, + 11056: 0xD4B3, + 11057: 0xD4B4, + 11058: 0xD4B5, + 11059: 0xD4B6, + 11060: 0xD4B7, + 11061: 0xD4B8, + 11062: 0xD4B9, + 11063: 0xD4BA, + 11064: 0xD4BB, + 11065: 0xD4BC, + 11066: 0xD4BD, + 11067: 0xD4BE, + 11068: 0xD4BF, + 11069: 0xD4C0, + 11070: 0xD4C1, + 11071: 0xD4C2, + 11072: 0xD4C3, + 11073: 0xD4C4, + 11074: 0xD4C5, + 11075: 0xD4C6, + 11076: 0xD4C7, + 11077: 0xD4C8, + 11078: 0xD4C9, + 11079: 0xD4CA, + 11080: 0xD4CB, + 11081: 0xD4CD, + 11082: 0xD4CE, + 11083: 0xD4CF, + 11084: 0xD4D1, + 11085: 0xD4D2, + 11086: 0xD4D3, + 11087: 0xD4D5, + 11088: 0xD4D6, + 11089: 0xD4D7, + 11090: 0xD4D8, + 11091: 0xD4D9, + 11092: 0xD4DA, + 11093: 0xD4DB, + 11094: 0xD4DD, + 11095: 0xD4DE, + 11096: 0xD4E0, + 11097: 0xD4E1, + 11098: 0xD4E2, + 11099: 0xD4E3, + 11100: 0xD4E4, + 11101: 0xD4E5, + 11102: 0xD4E6, + 11103: 0xD4E7, + 11104: 0xD4E9, + 11105: 0xD4EA, + 11106: 0xD4EB, + 11107: 0xD4ED, + 11108: 0xD4EE, + 11109: 0xD4EF, + 11110: 0xD4F1, + 11111: 0xD4F2, + 11112: 0xD4F3, + 11113: 0xD4F4, + 11114: 0xD4F5, + 11115: 0xD4F6, + 11116: 0xD4F7, + 11117: 0xD4F9, + 11118: 0xD4FA, + 11119: 0xD4FC, + 11120: 0xC5D0, + 11121: 0xC5D1, + 11122: 0xC5D4, + 11123: 0xC5D8, + 11124: 0xC5E0, + 11125: 0xC5E1, + 11126: 0xC5E3, + 11127: 0xC5E5, + 11128: 0xC5EC, + 11129: 0xC5ED, + 11130: 0xC5EE, + 11131: 0xC5F0, + 11132: 0xC5F4, + 11133: 0xC5F6, + 11134: 0xC5F7, + 11135: 0xC5FC, + 11136: 0xC5FD, + 11137: 0xC5FE, + 11138: 0xC5FF, + 11139: 0xC600, + 11140: 0xC601, + 11141: 0xC605, + 11142: 0xC606, + 11143: 0xC607, + 11144: 0xC608, + 11145: 0xC60C, + 11146: 0xC610, + 11147: 0xC618, + 11148: 0xC619, + 11149: 0xC61B, + 11150: 0xC61C, + 11151: 0xC624, + 11152: 0xC625, + 11153: 0xC628, + 11154: 0xC62C, + 11155: 0xC62D, + 11156: 0xC62E, + 11157: 0xC630, + 11158: 0xC633, + 11159: 0xC634, + 11160: 0xC635, + 11161: 0xC637, + 11162: 0xC639, + 11163: 0xC63B, + 11164: 0xC640, + 11165: 0xC641, + 11166: 0xC644, + 11167: 0xC648, + 11168: 0xC650, + 11169: 0xC651, + 11170: 0xC653, + 11171: 0xC654, + 11172: 0xC655, + 11173: 0xC65C, + 11174: 0xC65D, + 11175: 0xC660, + 11176: 0xC66C, + 11177: 0xC66F, + 11178: 0xC671, + 11179: 0xC678, + 11180: 0xC679, + 11181: 0xC67C, + 11182: 0xC680, + 11183: 0xC688, + 11184: 0xC689, + 11185: 0xC68B, + 11186: 0xC68D, + 11187: 0xC694, + 11188: 0xC695, + 11189: 0xC698, + 11190: 0xC69C, + 11191: 0xC6A4, + 11192: 0xC6A5, + 11193: 0xC6A7, + 11194: 0xC6A9, + 11195: 0xC6B0, + 11196: 0xC6B1, + 11197: 0xC6B4, + 11198: 0xC6B8, + 11199: 0xC6B9, + 11200: 0xC6BA, + 11201: 0xC6C0, + 11202: 0xC6C1, + 11203: 0xC6C3, + 11204: 0xC6C5, + 11205: 0xC6CC, + 11206: 0xC6CD, + 11207: 0xC6D0, + 11208: 0xC6D4, + 11209: 0xC6DC, + 11210: 0xC6DD, + 11211: 0xC6E0, + 11212: 0xC6E1, + 11213: 0xC6E8, + 11214: 0xD4FE, + 11215: 0xD4FF, + 11216: 0xD500, + 11217: 0xD501, + 11218: 0xD502, + 11219: 0xD503, + 11220: 0xD505, + 11221: 0xD506, + 11222: 0xD507, + 11223: 0xD509, + 11224: 0xD50A, + 11225: 0xD50B, + 11226: 0xD50D, + 11227: 0xD50E, + 11228: 0xD50F, + 11229: 0xD510, + 11230: 0xD511, + 11231: 0xD512, + 11232: 0xD513, + 11233: 0xD516, + 11234: 0xD518, + 11235: 0xD519, + 11236: 0xD51A, + 11237: 0xD51B, + 11238: 0xD51C, + 11239: 0xD51D, + 11240: 0xD51E, + 11241: 0xD51F, + 11242: 0xD520, + 11243: 0xD521, + 11244: 0xD522, + 11245: 0xD523, + 11246: 0xD524, + 11247: 0xD525, + 11248: 0xD526, + 11249: 0xD527, + 11250: 0xD528, + 11251: 0xD529, + 11252: 0xD52A, + 11253: 0xD52B, + 11254: 0xD52C, + 11255: 0xD52D, + 11256: 0xD52E, + 11257: 0xD52F, + 11258: 0xD530, + 11259: 0xD531, + 11260: 0xD532, + 11261: 0xD533, + 11262: 0xD534, + 11263: 0xD535, + 11264: 0xD536, + 11265: 0xD537, + 11266: 0xD538, + 11267: 0xD539, + 11268: 0xD53A, + 11269: 0xD53B, + 11270: 0xD53E, + 11271: 0xD53F, + 11272: 0xD541, + 11273: 0xD542, + 11274: 0xD543, + 11275: 0xD545, + 11276: 0xD546, + 11277: 0xD547, + 11278: 0xD548, + 11279: 0xD549, + 11280: 0xD54A, + 11281: 0xD54B, + 11282: 0xD54E, + 11283: 0xD550, + 11284: 0xD552, + 11285: 0xD553, + 11286: 0xD554, + 11287: 0xD555, + 11288: 0xD556, + 11289: 0xD557, + 11290: 0xD55A, + 11291: 0xD55B, + 11292: 0xD55D, + 11293: 0xD55E, + 11294: 0xD55F, + 11295: 0xD561, + 11296: 0xD562, + 11297: 0xD563, + 11298: 0xC6E9, + 11299: 0xC6EC, + 11300: 0xC6F0, + 11301: 0xC6F8, + 11302: 0xC6F9, + 11303: 0xC6FD, + 11304: 0xC704, + 11305: 0xC705, + 11306: 0xC708, + 11307: 0xC70C, + 11308: 0xC714, + 11309: 0xC715, + 11310: 0xC717, + 11311: 0xC719, + 11312: 0xC720, + 11313: 0xC721, + 11314: 0xC724, + 11315: 0xC728, + 11316: 0xC730, + 11317: 0xC731, + 11318: 0xC733, + 11319: 0xC735, + 11320: 0xC737, + 11321: 0xC73C, + 11322: 0xC73D, + 11323: 0xC740, + 11324: 0xC744, + 11325: 0xC74A, + 11326: 0xC74C, + 11327: 0xC74D, + 11328: 0xC74F, + 11329: 0xC751, + 11330: 0xC752, + 11331: 0xC753, + 11332: 0xC754, + 11333: 0xC755, + 11334: 0xC756, + 11335: 0xC757, + 11336: 0xC758, + 11337: 0xC75C, + 11338: 0xC760, + 11339: 0xC768, + 11340: 0xC76B, + 11341: 0xC774, + 11342: 0xC775, + 11343: 0xC778, + 11344: 0xC77C, + 11345: 0xC77D, + 11346: 0xC77E, + 11347: 0xC783, + 11348: 0xC784, + 11349: 0xC785, + 11350: 0xC787, + 11351: 0xC788, + 11352: 0xC789, + 11353: 0xC78A, + 11354: 0xC78E, + 11355: 0xC790, + 11356: 0xC791, + 11357: 0xC794, + 11358: 0xC796, + 11359: 0xC797, + 11360: 0xC798, + 11361: 0xC79A, + 11362: 0xC7A0, + 11363: 0xC7A1, + 11364: 0xC7A3, + 11365: 0xC7A4, + 11366: 0xC7A5, + 11367: 0xC7A6, + 11368: 0xC7AC, + 11369: 0xC7AD, + 11370: 0xC7B0, + 11371: 0xC7B4, + 11372: 0xC7BC, + 11373: 0xC7BD, + 11374: 0xC7BF, + 11375: 0xC7C0, + 11376: 0xC7C1, + 11377: 0xC7C8, + 11378: 0xC7C9, + 11379: 0xC7CC, + 11380: 0xC7CE, + 11381: 0xC7D0, + 11382: 0xC7D8, + 11383: 0xC7DD, + 11384: 0xC7E4, + 11385: 0xC7E8, + 11386: 0xC7EC, + 11387: 0xC800, + 11388: 0xC801, + 11389: 0xC804, + 11390: 0xC808, + 11391: 0xC80A, + 11392: 0xD564, + 11393: 0xD566, + 11394: 0xD567, + 11395: 0xD56A, + 11396: 0xD56C, + 11397: 0xD56E, + 11398: 0xD56F, + 11399: 0xD570, + 11400: 0xD571, + 11401: 0xD572, + 11402: 0xD573, + 11403: 0xD576, + 11404: 0xD577, + 11405: 0xD579, + 11406: 0xD57A, + 11407: 0xD57B, + 11408: 0xD57D, + 11409: 0xD57E, + 11410: 0xD57F, + 11411: 0xD580, + 11412: 0xD581, + 11413: 0xD582, + 11414: 0xD583, + 11415: 0xD586, + 11416: 0xD58A, + 11417: 0xD58B, + 11418: 0xD58C, + 11419: 0xD58D, + 11420: 0xD58E, + 11421: 0xD58F, + 11422: 0xD591, + 11423: 0xD592, + 11424: 0xD593, + 11425: 0xD594, + 11426: 0xD595, + 11427: 0xD596, + 11428: 0xD597, + 11429: 0xD598, + 11430: 0xD599, + 11431: 0xD59A, + 11432: 0xD59B, + 11433: 0xD59C, + 11434: 0xD59D, + 11435: 0xD59E, + 11436: 0xD59F, + 11437: 0xD5A0, + 11438: 0xD5A1, + 11439: 0xD5A2, + 11440: 0xD5A3, + 11441: 0xD5A4, + 11442: 0xD5A6, + 11443: 0xD5A7, + 11444: 0xD5A8, + 11445: 0xD5A9, + 11446: 0xD5AA, + 11447: 0xD5AB, + 11448: 0xD5AC, + 11449: 0xD5AD, + 11450: 0xD5AE, + 11451: 0xD5AF, + 11452: 0xD5B0, + 11453: 0xD5B1, + 11454: 0xD5B2, + 11455: 0xD5B3, + 11456: 0xD5B4, + 11457: 0xD5B5, + 11458: 0xD5B6, + 11459: 0xD5B7, + 11460: 0xD5B8, + 11461: 0xD5B9, + 11462: 0xD5BA, + 11463: 0xD5BB, + 11464: 0xD5BC, + 11465: 0xD5BD, + 11466: 0xD5BE, + 11467: 0xD5BF, + 11468: 0xD5C0, + 11469: 0xD5C1, + 11470: 0xD5C2, + 11471: 0xD5C3, + 11472: 0xD5C4, + 11473: 0xD5C5, + 11474: 0xD5C6, + 11475: 0xD5C7, + 11476: 0xC810, + 11477: 0xC811, + 11478: 0xC813, + 11479: 0xC815, + 11480: 0xC816, + 11481: 0xC81C, + 11482: 0xC81D, + 11483: 0xC820, + 11484: 0xC824, + 11485: 0xC82C, + 11486: 0xC82D, + 11487: 0xC82F, + 11488: 0xC831, + 11489: 0xC838, + 11490: 0xC83C, + 11491: 0xC840, + 11492: 0xC848, + 11493: 0xC849, + 11494: 0xC84C, + 11495: 0xC84D, + 11496: 0xC854, + 11497: 0xC870, + 11498: 0xC871, + 11499: 0xC874, + 11500: 0xC878, + 11501: 0xC87A, + 11502: 0xC880, + 11503: 0xC881, + 11504: 0xC883, + 11505: 0xC885, + 11506: 0xC886, + 11507: 0xC887, + 11508: 0xC88B, + 11509: 0xC88C, + 11510: 0xC88D, + 11511: 0xC894, + 11512: 0xC89D, + 11513: 0xC89F, + 11514: 0xC8A1, + 11515: 0xC8A8, + 11516: 0xC8BC, + 11517: 0xC8BD, + 11518: 0xC8C4, + 11519: 0xC8C8, + 11520: 0xC8CC, + 11521: 0xC8D4, + 11522: 0xC8D5, + 11523: 0xC8D7, + 11524: 0xC8D9, + 11525: 0xC8E0, + 11526: 0xC8E1, + 11527: 0xC8E4, + 11528: 0xC8F5, + 11529: 0xC8FC, + 11530: 0xC8FD, + 11531: 0xC900, + 11532: 0xC904, + 11533: 0xC905, + 11534: 0xC906, + 11535: 0xC90C, + 11536: 0xC90D, + 11537: 0xC90F, + 11538: 0xC911, + 11539: 0xC918, + 11540: 0xC92C, + 11541: 0xC934, + 11542: 0xC950, + 11543: 0xC951, + 11544: 0xC954, + 11545: 0xC958, + 11546: 0xC960, + 11547: 0xC961, + 11548: 0xC963, + 11549: 0xC96C, + 11550: 0xC970, + 11551: 0xC974, + 11552: 0xC97C, + 11553: 0xC988, + 11554: 0xC989, + 11555: 0xC98C, + 11556: 0xC990, + 11557: 0xC998, + 11558: 0xC999, + 11559: 0xC99B, + 11560: 0xC99D, + 11561: 0xC9C0, + 11562: 0xC9C1, + 11563: 0xC9C4, + 11564: 0xC9C7, + 11565: 0xC9C8, + 11566: 0xC9CA, + 11567: 0xC9D0, + 11568: 0xC9D1, + 11569: 0xC9D3, + 11570: 0xD5CA, + 11571: 0xD5CB, + 11572: 0xD5CD, + 11573: 0xD5CE, + 11574: 0xD5CF, + 11575: 0xD5D1, + 11576: 0xD5D3, + 11577: 0xD5D4, + 11578: 0xD5D5, + 11579: 0xD5D6, + 11580: 0xD5D7, + 11581: 0xD5DA, + 11582: 0xD5DC, + 11583: 0xD5DE, + 11584: 0xD5DF, + 11585: 0xD5E0, + 11586: 0xD5E1, + 11587: 0xD5E2, + 11588: 0xD5E3, + 11589: 0xD5E6, + 11590: 0xD5E7, + 11591: 0xD5E9, + 11592: 0xD5EA, + 11593: 0xD5EB, + 11594: 0xD5ED, + 11595: 0xD5EE, + 11596: 0xD5EF, + 11597: 0xD5F0, + 11598: 0xD5F1, + 11599: 0xD5F2, + 11600: 0xD5F3, + 11601: 0xD5F6, + 11602: 0xD5F8, + 11603: 0xD5FA, + 11604: 0xD5FB, + 11605: 0xD5FC, + 11606: 0xD5FD, + 11607: 0xD5FE, + 11608: 0xD5FF, + 11609: 0xD602, + 11610: 0xD603, + 11611: 0xD605, + 11612: 0xD606, + 11613: 0xD607, + 11614: 0xD609, + 11615: 0xD60A, + 11616: 0xD60B, + 11617: 0xD60C, + 11618: 0xD60D, + 11619: 0xD60E, + 11620: 0xD60F, + 11621: 0xD612, + 11622: 0xD616, + 11623: 0xD617, + 11624: 0xD618, + 11625: 0xD619, + 11626: 0xD61A, + 11627: 0xD61B, + 11628: 0xD61D, + 11629: 0xD61E, + 11630: 0xD61F, + 11631: 0xD621, + 11632: 0xD622, + 11633: 0xD623, + 11634: 0xD625, + 11635: 0xD626, + 11636: 0xD627, + 11637: 0xD628, + 11638: 0xD629, + 11639: 0xD62A, + 11640: 0xD62B, + 11641: 0xD62C, + 11642: 0xD62E, + 11643: 0xD62F, + 11644: 0xD630, + 11645: 0xD631, + 11646: 0xD632, + 11647: 0xD633, + 11648: 0xD634, + 11649: 0xD635, + 11650: 0xD636, + 11651: 0xD637, + 11652: 0xD63A, + 11653: 0xD63B, + 11654: 0xC9D5, + 11655: 0xC9D6, + 11656: 0xC9D9, + 11657: 0xC9DA, + 11658: 0xC9DC, + 11659: 0xC9DD, + 11660: 0xC9E0, + 11661: 0xC9E2, + 11662: 0xC9E4, + 11663: 0xC9E7, + 11664: 0xC9EC, + 11665: 0xC9ED, + 11666: 0xC9EF, + 11667: 0xC9F0, + 11668: 0xC9F1, + 11669: 0xC9F8, + 11670: 0xC9F9, + 11671: 0xC9FC, + 11672: 0xCA00, + 11673: 0xCA08, + 11674: 0xCA09, + 11675: 0xCA0B, + 11676: 0xCA0C, + 11677: 0xCA0D, + 11678: 0xCA14, + 11679: 0xCA18, + 11680: 0xCA29, + 11681: 0xCA4C, + 11682: 0xCA4D, + 11683: 0xCA50, + 11684: 0xCA54, + 11685: 0xCA5C, + 11686: 0xCA5D, + 11687: 0xCA5F, + 11688: 0xCA60, + 11689: 0xCA61, + 11690: 0xCA68, + 11691: 0xCA7D, + 11692: 0xCA84, + 11693: 0xCA98, + 11694: 0xCABC, + 11695: 0xCABD, + 11696: 0xCAC0, + 11697: 0xCAC4, + 11698: 0xCACC, + 11699: 0xCACD, + 11700: 0xCACF, + 11701: 0xCAD1, + 11702: 0xCAD3, + 11703: 0xCAD8, + 11704: 0xCAD9, + 11705: 0xCAE0, + 11706: 0xCAEC, + 11707: 0xCAF4, + 11708: 0xCB08, + 11709: 0xCB10, + 11710: 0xCB14, + 11711: 0xCB18, + 11712: 0xCB20, + 11713: 0xCB21, + 11714: 0xCB41, + 11715: 0xCB48, + 11716: 0xCB49, + 11717: 0xCB4C, + 11718: 0xCB50, + 11719: 0xCB58, + 11720: 0xCB59, + 11721: 0xCB5D, + 11722: 0xCB64, + 11723: 0xCB78, + 11724: 0xCB79, + 11725: 0xCB9C, + 11726: 0xCBB8, + 11727: 0xCBD4, + 11728: 0xCBE4, + 11729: 0xCBE7, + 11730: 0xCBE9, + 11731: 0xCC0C, + 11732: 0xCC0D, + 11733: 0xCC10, + 11734: 0xCC14, + 11735: 0xCC1C, + 11736: 0xCC1D, + 11737: 0xCC21, + 11738: 0xCC22, + 11739: 0xCC27, + 11740: 0xCC28, + 11741: 0xCC29, + 11742: 0xCC2C, + 11743: 0xCC2E, + 11744: 0xCC30, + 11745: 0xCC38, + 11746: 0xCC39, + 11747: 0xCC3B, + 11748: 0xD63D, + 11749: 0xD63E, + 11750: 0xD63F, + 11751: 0xD641, + 11752: 0xD642, + 11753: 0xD643, + 11754: 0xD644, + 11755: 0xD646, + 11756: 0xD647, + 11757: 0xD64A, + 11758: 0xD64C, + 11759: 0xD64E, + 11760: 0xD64F, + 11761: 0xD650, + 11762: 0xD652, + 11763: 0xD653, + 11764: 0xD656, + 11765: 0xD657, + 11766: 0xD659, + 11767: 0xD65A, + 11768: 0xD65B, + 11769: 0xD65D, + 11770: 0xD65E, + 11771: 0xD65F, + 11772: 0xD660, + 11773: 0xD661, + 11774: 0xD662, + 11775: 0xD663, + 11776: 0xD664, + 11777: 0xD665, + 11778: 0xD666, + 11779: 0xD668, + 11780: 0xD66A, + 11781: 0xD66B, + 11782: 0xD66C, + 11783: 0xD66D, + 11784: 0xD66E, + 11785: 0xD66F, + 11786: 0xD672, + 11787: 0xD673, + 11788: 0xD675, + 11789: 0xD676, + 11790: 0xD677, + 11791: 0xD678, + 11792: 0xD679, + 11793: 0xD67A, + 11794: 0xD67B, + 11795: 0xD67C, + 11796: 0xD67D, + 11797: 0xD67E, + 11798: 0xD67F, + 11799: 0xD680, + 11800: 0xD681, + 11801: 0xD682, + 11802: 0xD684, + 11803: 0xD686, + 11804: 0xD687, + 11805: 0xD688, + 11806: 0xD689, + 11807: 0xD68A, + 11808: 0xD68B, + 11809: 0xD68E, + 11810: 0xD68F, + 11811: 0xD691, + 11812: 0xD692, + 11813: 0xD693, + 11814: 0xD695, + 11815: 0xD696, + 11816: 0xD697, + 11817: 0xD698, + 11818: 0xD699, + 11819: 0xD69A, + 11820: 0xD69B, + 11821: 0xD69C, + 11822: 0xD69E, + 11823: 0xD6A0, + 11824: 0xD6A2, + 11825: 0xD6A3, + 11826: 0xD6A4, + 11827: 0xD6A5, + 11828: 0xD6A6, + 11829: 0xD6A7, + 11830: 0xD6A9, + 11831: 0xD6AA, + 11832: 0xCC3C, + 11833: 0xCC3D, + 11834: 0xCC3E, + 11835: 0xCC44, + 11836: 0xCC45, + 11837: 0xCC48, + 11838: 0xCC4C, + 11839: 0xCC54, + 11840: 0xCC55, + 11841: 0xCC57, + 11842: 0xCC58, + 11843: 0xCC59, + 11844: 0xCC60, + 11845: 0xCC64, + 11846: 0xCC66, + 11847: 0xCC68, + 11848: 0xCC70, + 11849: 0xCC75, + 11850: 0xCC98, + 11851: 0xCC99, + 11852: 0xCC9C, + 11853: 0xCCA0, + 11854: 0xCCA8, + 11855: 0xCCA9, + 11856: 0xCCAB, + 11857: 0xCCAC, + 11858: 0xCCAD, + 11859: 0xCCB4, + 11860: 0xCCB5, + 11861: 0xCCB8, + 11862: 0xCCBC, + 11863: 0xCCC4, + 11864: 0xCCC5, + 11865: 0xCCC7, + 11866: 0xCCC9, + 11867: 0xCCD0, + 11868: 0xCCD4, + 11869: 0xCCE4, + 11870: 0xCCEC, + 11871: 0xCCF0, + 11872: 0xCD01, + 11873: 0xCD08, + 11874: 0xCD09, + 11875: 0xCD0C, + 11876: 0xCD10, + 11877: 0xCD18, + 11878: 0xCD19, + 11879: 0xCD1B, + 11880: 0xCD1D, + 11881: 0xCD24, + 11882: 0xCD28, + 11883: 0xCD2C, + 11884: 0xCD39, + 11885: 0xCD5C, + 11886: 0xCD60, + 11887: 0xCD64, + 11888: 0xCD6C, + 11889: 0xCD6D, + 11890: 0xCD6F, + 11891: 0xCD71, + 11892: 0xCD78, + 11893: 0xCD88, + 11894: 0xCD94, + 11895: 0xCD95, + 11896: 0xCD98, + 11897: 0xCD9C, + 11898: 0xCDA4, + 11899: 0xCDA5, + 11900: 0xCDA7, + 11901: 0xCDA9, + 11902: 0xCDB0, + 11903: 0xCDC4, + 11904: 0xCDCC, + 11905: 0xCDD0, + 11906: 0xCDE8, + 11907: 0xCDEC, + 11908: 0xCDF0, + 11909: 0xCDF8, + 11910: 0xCDF9, + 11911: 0xCDFB, + 11912: 0xCDFD, + 11913: 0xCE04, + 11914: 0xCE08, + 11915: 0xCE0C, + 11916: 0xCE14, + 11917: 0xCE19, + 11918: 0xCE20, + 11919: 0xCE21, + 11920: 0xCE24, + 11921: 0xCE28, + 11922: 0xCE30, + 11923: 0xCE31, + 11924: 0xCE33, + 11925: 0xCE35, + 11926: 0xD6AB, + 11927: 0xD6AD, + 11928: 0xD6AE, + 11929: 0xD6AF, + 11930: 0xD6B1, + 11931: 0xD6B2, + 11932: 0xD6B3, + 11933: 0xD6B4, + 11934: 0xD6B5, + 11935: 0xD6B6, + 11936: 0xD6B7, + 11937: 0xD6B8, + 11938: 0xD6BA, + 11939: 0xD6BC, + 11940: 0xD6BD, + 11941: 0xD6BE, + 11942: 0xD6BF, + 11943: 0xD6C0, + 11944: 0xD6C1, + 11945: 0xD6C2, + 11946: 0xD6C3, + 11947: 0xD6C6, + 11948: 0xD6C7, + 11949: 0xD6C9, + 11950: 0xD6CA, + 11951: 0xD6CB, + 11952: 0xD6CD, + 11953: 0xD6CE, + 11954: 0xD6CF, + 11955: 0xD6D0, + 11956: 0xD6D2, + 11957: 0xD6D3, + 11958: 0xD6D5, + 11959: 0xD6D6, + 11960: 0xD6D8, + 11961: 0xD6DA, + 11962: 0xD6DB, + 11963: 0xD6DC, + 11964: 0xD6DD, + 11965: 0xD6DE, + 11966: 0xD6DF, + 11967: 0xD6E1, + 11968: 0xD6E2, + 11969: 0xD6E3, + 11970: 0xD6E5, + 11971: 0xD6E6, + 11972: 0xD6E7, + 11973: 0xD6E9, + 11974: 0xD6EA, + 11975: 0xD6EB, + 11976: 0xD6EC, + 11977: 0xD6ED, + 11978: 0xD6EE, + 11979: 0xD6EF, + 11980: 0xD6F1, + 11981: 0xD6F2, + 11982: 0xD6F3, + 11983: 0xD6F4, + 11984: 0xD6F6, + 11985: 0xD6F7, + 11986: 0xD6F8, + 11987: 0xD6F9, + 11988: 0xD6FA, + 11989: 0xD6FB, + 11990: 0xD6FE, + 11991: 0xD6FF, + 11992: 0xD701, + 11993: 0xD702, + 11994: 0xD703, + 11995: 0xD705, + 11996: 0xD706, + 11997: 0xD707, + 11998: 0xD708, + 11999: 0xD709, + 12000: 0xD70A, + 12001: 0xD70B, + 12002: 0xD70C, + 12003: 0xD70D, + 12004: 0xD70E, + 12005: 0xD70F, + 12006: 0xD710, + 12007: 0xD712, + 12008: 0xD713, + 12009: 0xD714, + 12010: 0xCE58, + 12011: 0xCE59, + 12012: 0xCE5C, + 12013: 0xCE5F, + 12014: 0xCE60, + 12015: 0xCE61, + 12016: 0xCE68, + 12017: 0xCE69, + 12018: 0xCE6B, + 12019: 0xCE6D, + 12020: 0xCE74, + 12021: 0xCE75, + 12022: 0xCE78, + 12023: 0xCE7C, + 12024: 0xCE84, + 12025: 0xCE85, + 12026: 0xCE87, + 12027: 0xCE89, + 12028: 0xCE90, + 12029: 0xCE91, + 12030: 0xCE94, + 12031: 0xCE98, + 12032: 0xCEA0, + 12033: 0xCEA1, + 12034: 0xCEA3, + 12035: 0xCEA4, + 12036: 0xCEA5, + 12037: 0xCEAC, + 12038: 0xCEAD, + 12039: 0xCEC1, + 12040: 0xCEE4, + 12041: 0xCEE5, + 12042: 0xCEE8, + 12043: 0xCEEB, + 12044: 0xCEEC, + 12045: 0xCEF4, + 12046: 0xCEF5, + 12047: 0xCEF7, + 12048: 0xCEF8, + 12049: 0xCEF9, + 12050: 0xCF00, + 12051: 0xCF01, + 12052: 0xCF04, + 12053: 0xCF08, + 12054: 0xCF10, + 12055: 0xCF11, + 12056: 0xCF13, + 12057: 0xCF15, + 12058: 0xCF1C, + 12059: 0xCF20, + 12060: 0xCF24, + 12061: 0xCF2C, + 12062: 0xCF2D, + 12063: 0xCF2F, + 12064: 0xCF30, + 12065: 0xCF31, + 12066: 0xCF38, + 12067: 0xCF54, + 12068: 0xCF55, + 12069: 0xCF58, + 12070: 0xCF5C, + 12071: 0xCF64, + 12072: 0xCF65, + 12073: 0xCF67, + 12074: 0xCF69, + 12075: 0xCF70, + 12076: 0xCF71, + 12077: 0xCF74, + 12078: 0xCF78, + 12079: 0xCF80, + 12080: 0xCF85, + 12081: 0xCF8C, + 12082: 0xCFA1, + 12083: 0xCFA8, + 12084: 0xCFB0, + 12085: 0xCFC4, + 12086: 0xCFE0, + 12087: 0xCFE1, + 12088: 0xCFE4, + 12089: 0xCFE8, + 12090: 0xCFF0, + 12091: 0xCFF1, + 12092: 0xCFF3, + 12093: 0xCFF5, + 12094: 0xCFFC, + 12095: 0xD000, + 12096: 0xD004, + 12097: 0xD011, + 12098: 0xD018, + 12099: 0xD02D, + 12100: 0xD034, + 12101: 0xD035, + 12102: 0xD038, + 12103: 0xD03C, + 12104: 0xD715, + 12105: 0xD716, + 12106: 0xD717, + 12107: 0xD71A, + 12108: 0xD71B, + 12109: 0xD71D, + 12110: 0xD71E, + 12111: 0xD71F, + 12112: 0xD721, + 12113: 0xD722, + 12114: 0xD723, + 12115: 0xD724, + 12116: 0xD725, + 12117: 0xD726, + 12118: 0xD727, + 12119: 0xD72A, + 12120: 0xD72C, + 12121: 0xD72E, + 12122: 0xD72F, + 12123: 0xD730, + 12124: 0xD731, + 12125: 0xD732, + 12126: 0xD733, + 12127: 0xD736, + 12128: 0xD737, + 12129: 0xD739, + 12130: 0xD73A, + 12131: 0xD73B, + 12132: 0xD73D, + 12133: 0xD73E, + 12134: 0xD73F, + 12135: 0xD740, + 12136: 0xD741, + 12137: 0xD742, + 12138: 0xD743, + 12139: 0xD745, + 12140: 0xD746, + 12141: 0xD748, + 12142: 0xD74A, + 12143: 0xD74B, + 12144: 0xD74C, + 12145: 0xD74D, + 12146: 0xD74E, + 12147: 0xD74F, + 12148: 0xD752, + 12149: 0xD753, + 12150: 0xD755, + 12151: 0xD75A, + 12152: 0xD75B, + 12153: 0xD75C, + 12154: 0xD75D, + 12155: 0xD75E, + 12156: 0xD75F, + 12157: 0xD762, + 12158: 0xD764, + 12159: 0xD766, + 12160: 0xD767, + 12161: 0xD768, + 12162: 0xD76A, + 12163: 0xD76B, + 12164: 0xD76D, + 12165: 0xD76E, + 12166: 0xD76F, + 12167: 0xD771, + 12168: 0xD772, + 12169: 0xD773, + 12170: 0xD775, + 12171: 0xD776, + 12172: 0xD777, + 12173: 0xD778, + 12174: 0xD779, + 12175: 0xD77A, + 12176: 0xD77B, + 12177: 0xD77E, + 12178: 0xD77F, + 12179: 0xD780, + 12180: 0xD782, + 12181: 0xD783, + 12182: 0xD784, + 12183: 0xD785, + 12184: 0xD786, + 12185: 0xD787, + 12186: 0xD78A, + 12187: 0xD78B, + 12188: 0xD044, + 12189: 0xD045, + 12190: 0xD047, + 12191: 0xD049, + 12192: 0xD050, + 12193: 0xD054, + 12194: 0xD058, + 12195: 0xD060, + 12196: 0xD06C, + 12197: 0xD06D, + 12198: 0xD070, + 12199: 0xD074, + 12200: 0xD07C, + 12201: 0xD07D, + 12202: 0xD081, + 12203: 0xD0A4, + 12204: 0xD0A5, + 12205: 0xD0A8, + 12206: 0xD0AC, + 12207: 0xD0B4, + 12208: 0xD0B5, + 12209: 0xD0B7, + 12210: 0xD0B9, + 12211: 0xD0C0, + 12212: 0xD0C1, + 12213: 0xD0C4, + 12214: 0xD0C8, + 12215: 0xD0C9, + 12216: 0xD0D0, + 12217: 0xD0D1, + 12218: 0xD0D3, + 12219: 0xD0D4, + 12220: 0xD0D5, + 12221: 0xD0DC, + 12222: 0xD0DD, + 12223: 0xD0E0, + 12224: 0xD0E4, + 12225: 0xD0EC, + 12226: 0xD0ED, + 12227: 0xD0EF, + 12228: 0xD0F0, + 12229: 0xD0F1, + 12230: 0xD0F8, + 12231: 0xD10D, + 12232: 0xD130, + 12233: 0xD131, + 12234: 0xD134, + 12235: 0xD138, + 12236: 0xD13A, + 12237: 0xD140, + 12238: 0xD141, + 12239: 0xD143, + 12240: 0xD144, + 12241: 0xD145, + 12242: 0xD14C, + 12243: 0xD14D, + 12244: 0xD150, + 12245: 0xD154, + 12246: 0xD15C, + 12247: 0xD15D, + 12248: 0xD15F, + 12249: 0xD161, + 12250: 0xD168, + 12251: 0xD16C, + 12252: 0xD17C, + 12253: 0xD184, + 12254: 0xD188, + 12255: 0xD1A0, + 12256: 0xD1A1, + 12257: 0xD1A4, + 12258: 0xD1A8, + 12259: 0xD1B0, + 12260: 0xD1B1, + 12261: 0xD1B3, + 12262: 0xD1B5, + 12263: 0xD1BA, + 12264: 0xD1BC, + 12265: 0xD1C0, + 12266: 0xD1D8, + 12267: 0xD1F4, + 12268: 0xD1F8, + 12269: 0xD207, + 12270: 0xD209, + 12271: 0xD210, + 12272: 0xD22C, + 12273: 0xD22D, + 12274: 0xD230, + 12275: 0xD234, + 12276: 0xD23C, + 12277: 0xD23D, + 12278: 0xD23F, + 12279: 0xD241, + 12280: 0xD248, + 12281: 0xD25C, + 12282: 0xD78D, + 12283: 0xD78E, + 12284: 0xD78F, + 12285: 0xD791, + 12286: 0xD792, + 12287: 0xD793, + 12288: 0xD794, + 12289: 0xD795, + 12290: 0xD796, + 12291: 0xD797, + 12292: 0xD79A, + 12293: 0xD79C, + 12294: 0xD79E, + 12295: 0xD79F, + 12296: 0xD7A0, + 12297: 0xD7A1, + 12298: 0xD7A2, + 12299: 0xD7A3, + 12366: 0xD264, + 12367: 0xD280, + 12368: 0xD281, + 12369: 0xD284, + 12370: 0xD288, + 12371: 0xD290, + 12372: 0xD291, + 12373: 0xD295, + 12374: 0xD29C, + 12375: 0xD2A0, + 12376: 0xD2A4, + 12377: 0xD2AC, + 12378: 0xD2B1, + 12379: 0xD2B8, + 12380: 0xD2B9, + 12381: 0xD2BC, + 12382: 0xD2BF, + 12383: 0xD2C0, + 12384: 0xD2C2, + 12385: 0xD2C8, + 12386: 0xD2C9, + 12387: 0xD2CB, + 12388: 0xD2D4, + 12389: 0xD2D8, + 12390: 0xD2DC, + 12391: 0xD2E4, + 12392: 0xD2E5, + 12393: 0xD2F0, + 12394: 0xD2F1, + 12395: 0xD2F4, + 12396: 0xD2F8, + 12397: 0xD300, + 12398: 0xD301, + 12399: 0xD303, + 12400: 0xD305, + 12401: 0xD30C, + 12402: 0xD30D, + 12403: 0xD30E, + 12404: 0xD310, + 12405: 0xD314, + 12406: 0xD316, + 12407: 0xD31C, + 12408: 0xD31D, + 12409: 0xD31F, + 12410: 0xD320, + 12411: 0xD321, + 12412: 0xD325, + 12413: 0xD328, + 12414: 0xD329, + 12415: 0xD32C, + 12416: 0xD330, + 12417: 0xD338, + 12418: 0xD339, + 12419: 0xD33B, + 12420: 0xD33C, + 12421: 0xD33D, + 12422: 0xD344, + 12423: 0xD345, + 12424: 0xD37C, + 12425: 0xD37D, + 12426: 0xD380, + 12427: 0xD384, + 12428: 0xD38C, + 12429: 0xD38D, + 12430: 0xD38F, + 12431: 0xD390, + 12432: 0xD391, + 12433: 0xD398, + 12434: 0xD399, + 12435: 0xD39C, + 12436: 0xD3A0, + 12437: 0xD3A8, + 12438: 0xD3A9, + 12439: 0xD3AB, + 12440: 0xD3AD, + 12441: 0xD3B4, + 12442: 0xD3B8, + 12443: 0xD3BC, + 12444: 0xD3C4, + 12445: 0xD3C5, + 12446: 0xD3C8, + 12447: 0xD3C9, + 12448: 0xD3D0, + 12449: 0xD3D8, + 12450: 0xD3E1, + 12451: 0xD3E3, + 12452: 0xD3EC, + 12453: 0xD3ED, + 12454: 0xD3F0, + 12455: 0xD3F4, + 12456: 0xD3FC, + 12457: 0xD3FD, + 12458: 0xD3FF, + 12459: 0xD401, + 12460: 0xD408, + 12461: 0xD41D, + 12462: 0xD440, + 12463: 0xD444, + 12464: 0xD45C, + 12465: 0xD460, + 12466: 0xD464, + 12467: 0xD46D, + 12468: 0xD46F, + 12469: 0xD478, + 12470: 0xD479, + 12471: 0xD47C, + 12472: 0xD47F, + 12473: 0xD480, + 12474: 0xD482, + 12475: 0xD488, + 12476: 0xD489, + 12477: 0xD48B, + 12478: 0xD48D, + 12479: 0xD494, + 12480: 0xD4A9, + 12481: 0xD4CC, + 12482: 0xD4D0, + 12483: 0xD4D4, + 12484: 0xD4DC, + 12485: 0xD4DF, + 12486: 0xD4E8, + 12487: 0xD4EC, + 12488: 0xD4F0, + 12489: 0xD4F8, + 12490: 0xD4FB, + 12491: 0xD4FD, + 12492: 0xD504, + 12493: 0xD508, + 12494: 0xD50C, + 12495: 0xD514, + 12496: 0xD515, + 12497: 0xD517, + 12498: 0xD53C, + 12499: 0xD53D, + 12500: 0xD540, + 12501: 0xD544, + 12502: 0xD54C, + 12503: 0xD54D, + 12504: 0xD54F, + 12505: 0xD551, + 12506: 0xD558, + 12507: 0xD559, + 12508: 0xD55C, + 12509: 0xD560, + 12510: 0xD565, + 12511: 0xD568, + 12512: 0xD569, + 12513: 0xD56B, + 12514: 0xD56D, + 12515: 0xD574, + 12516: 0xD575, + 12517: 0xD578, + 12518: 0xD57C, + 12519: 0xD584, + 12520: 0xD585, + 12521: 0xD587, + 12522: 0xD588, + 12523: 0xD589, + 12524: 0xD590, + 12525: 0xD5A5, + 12526: 0xD5C8, + 12527: 0xD5C9, + 12528: 0xD5CC, + 12529: 0xD5D0, + 12530: 0xD5D2, + 12531: 0xD5D8, + 12532: 0xD5D9, + 12533: 0xD5DB, + 12534: 0xD5DD, + 12535: 0xD5E4, + 12536: 0xD5E5, + 12537: 0xD5E8, + 12538: 0xD5EC, + 12539: 0xD5F4, + 12540: 0xD5F5, + 12541: 0xD5F7, + 12542: 0xD5F9, + 12543: 0xD600, + 12544: 0xD601, + 12545: 0xD604, + 12546: 0xD608, + 12547: 0xD610, + 12548: 0xD611, + 12549: 0xD613, + 12550: 0xD614, + 12551: 0xD615, + 12552: 0xD61C, + 12553: 0xD620, + 12554: 0xD624, + 12555: 0xD62D, + 12556: 0xD638, + 12557: 0xD639, + 12558: 0xD63C, + 12559: 0xD640, + 12560: 0xD645, + 12561: 0xD648, + 12562: 0xD649, + 12563: 0xD64B, + 12564: 0xD64D, + 12565: 0xD651, + 12566: 0xD654, + 12567: 0xD655, + 12568: 0xD658, + 12569: 0xD65C, + 12570: 0xD667, + 12571: 0xD669, + 12572: 0xD670, + 12573: 0xD671, + 12574: 0xD674, + 12575: 0xD683, + 12576: 0xD685, + 12577: 0xD68C, + 12578: 0xD68D, + 12579: 0xD690, + 12580: 0xD694, + 12581: 0xD69D, + 12582: 0xD69F, + 12583: 0xD6A1, + 12584: 0xD6A8, + 12585: 0xD6AC, + 12586: 0xD6B0, + 12587: 0xD6B9, + 12588: 0xD6BB, + 12589: 0xD6C4, + 12590: 0xD6C5, + 12591: 0xD6C8, + 12592: 0xD6CC, + 12593: 0xD6D1, + 12594: 0xD6D4, + 12595: 0xD6D7, + 12596: 0xD6D9, + 12597: 0xD6E0, + 12598: 0xD6E4, + 12599: 0xD6E8, + 12600: 0xD6F0, + 12601: 0xD6F5, + 12602: 0xD6FC, + 12603: 0xD6FD, + 12604: 0xD700, + 12605: 0xD704, + 12606: 0xD711, + 12607: 0xD718, + 12608: 0xD719, + 12609: 0xD71C, + 12610: 0xD720, + 12611: 0xD728, + 12612: 0xD729, + 12613: 0xD72B, + 12614: 0xD72D, + 12615: 0xD734, + 12616: 0xD735, + 12617: 0xD738, + 12618: 0xD73C, + 12619: 0xD744, + 12620: 0xD747, + 12621: 0xD749, + 12622: 0xD750, + 12623: 0xD751, + 12624: 0xD754, + 12625: 0xD756, + 12626: 0xD757, + 12627: 0xD758, + 12628: 0xD759, + 12629: 0xD760, + 12630: 0xD761, + 12631: 0xD763, + 12632: 0xD765, + 12633: 0xD769, + 12634: 0xD76C, + 12635: 0xD770, + 12636: 0xD774, + 12637: 0xD77C, + 12638: 0xD77D, + 12639: 0xD781, + 12640: 0xD788, + 12641: 0xD789, + 12642: 0xD78C, + 12643: 0xD790, + 12644: 0xD798, + 12645: 0xD799, + 12646: 0xD79B, + 12647: 0xD79D, + 12742: 0x4F3D, + 12743: 0x4F73, + 12744: 0x5047, + 12745: 0x50F9, + 12746: 0x52A0, + 12747: 0x53EF, + 12748: 0x5475, + 12749: 0x54E5, + 12750: 0x5609, + 12751: 0x5AC1, + 12752: 0x5BB6, + 12753: 0x6687, + 12754: 0x67B6, + 12755: 0x67B7, + 12756: 0x67EF, + 12757: 0x6B4C, + 12758: 0x73C2, + 12759: 0x75C2, + 12760: 0x7A3C, + 12761: 0x82DB, + 12762: 0x8304, + 12763: 0x8857, + 12764: 0x8888, + 12765: 0x8A36, + 12766: 0x8CC8, + 12767: 0x8DCF, + 12768: 0x8EFB, + 12769: 0x8FE6, + 12770: 0x99D5, + 12771: 0x523B, + 12772: 0x5374, + 12773: 0x5404, + 12774: 0x606A, + 12775: 0x6164, + 12776: 0x6BBC, + 12777: 0x73CF, + 12778: 0x811A, + 12779: 0x89BA, + 12780: 0x89D2, + 12781: 0x95A3, + 12782: 0x4F83, + 12783: 0x520A, + 12784: 0x58BE, + 12785: 0x5978, + 12786: 0x59E6, + 12787: 0x5E72, + 12788: 0x5E79, + 12789: 0x61C7, + 12790: 0x63C0, + 12791: 0x6746, + 12792: 0x67EC, + 12793: 0x687F, + 12794: 0x6F97, + 12795: 0x764E, + 12796: 0x770B, + 12797: 0x78F5, + 12798: 0x7A08, + 12799: 0x7AFF, + 12800: 0x7C21, + 12801: 0x809D, + 12802: 0x826E, + 12803: 0x8271, + 12804: 0x8AEB, + 12805: 0x9593, + 12806: 0x4E6B, + 12807: 0x559D, + 12808: 0x66F7, + 12809: 0x6E34, + 12810: 0x78A3, + 12811: 0x7AED, + 12812: 0x845B, + 12813: 0x8910, + 12814: 0x874E, + 12815: 0x97A8, + 12816: 0x52D8, + 12817: 0x574E, + 12818: 0x582A, + 12819: 0x5D4C, + 12820: 0x611F, + 12821: 0x61BE, + 12822: 0x6221, + 12823: 0x6562, + 12824: 0x67D1, + 12825: 0x6A44, + 12826: 0x6E1B, + 12827: 0x7518, + 12828: 0x75B3, + 12829: 0x76E3, + 12830: 0x77B0, + 12831: 0x7D3A, + 12832: 0x90AF, + 12833: 0x9451, + 12834: 0x9452, + 12835: 0x9F95, + 12836: 0x5323, + 12837: 0x5CAC, + 12838: 0x7532, + 12839: 0x80DB, + 12840: 0x9240, + 12841: 0x9598, + 12842: 0x525B, + 12843: 0x5808, + 12844: 0x59DC, + 12845: 0x5CA1, + 12846: 0x5D17, + 12847: 0x5EB7, + 12848: 0x5F3A, + 12849: 0x5F4A, + 12850: 0x6177, + 12851: 0x6C5F, + 12852: 0x757A, + 12853: 0x7586, + 12854: 0x7CE0, + 12855: 0x7D73, + 12856: 0x7DB1, + 12857: 0x7F8C, + 12858: 0x8154, + 12859: 0x8221, + 12860: 0x8591, + 12861: 0x8941, + 12862: 0x8B1B, + 12863: 0x92FC, + 12864: 0x964D, + 12865: 0x9C47, + 12866: 0x4ECB, + 12867: 0x4EF7, + 12868: 0x500B, + 12869: 0x51F1, + 12870: 0x584F, + 12871: 0x6137, + 12872: 0x613E, + 12873: 0x6168, + 12874: 0x6539, + 12875: 0x69EA, + 12876: 0x6F11, + 12877: 0x75A5, + 12878: 0x7686, + 12879: 0x76D6, + 12880: 0x7B87, + 12881: 0x82A5, + 12882: 0x84CB, + 12883: 0xF900, + 12884: 0x93A7, + 12885: 0x958B, + 12886: 0x5580, + 12887: 0x5BA2, + 12888: 0x5751, + 12889: 0xF901, + 12890: 0x7CB3, + 12891: 0x7FB9, + 12892: 0x91B5, + 12893: 0x5028, + 12894: 0x53BB, + 12895: 0x5C45, + 12896: 0x5DE8, + 12897: 0x62D2, + 12898: 0x636E, + 12899: 0x64DA, + 12900: 0x64E7, + 12901: 0x6E20, + 12902: 0x70AC, + 12903: 0x795B, + 12904: 0x8DDD, + 12905: 0x8E1E, + 12906: 0xF902, + 12907: 0x907D, + 12908: 0x9245, + 12909: 0x92F8, + 12910: 0x4E7E, + 12911: 0x4EF6, + 12912: 0x5065, + 12913: 0x5DFE, + 12914: 0x5EFA, + 12915: 0x6106, + 12916: 0x6957, + 12917: 0x8171, + 12918: 0x8654, + 12919: 0x8E47, + 12920: 0x9375, + 12921: 0x9A2B, + 12922: 0x4E5E, + 12923: 0x5091, + 12924: 0x6770, + 12925: 0x6840, + 12926: 0x5109, + 12927: 0x528D, + 12928: 0x5292, + 12929: 0x6AA2, + 12930: 0x77BC, + 12931: 0x9210, + 12932: 0x9ED4, + 12933: 0x52AB, + 12934: 0x602F, + 12935: 0x8FF2, + 12936: 0x5048, + 12937: 0x61A9, + 12938: 0x63ED, + 12939: 0x64CA, + 12940: 0x683C, + 12941: 0x6A84, + 12942: 0x6FC0, + 12943: 0x8188, + 12944: 0x89A1, + 12945: 0x9694, + 12946: 0x5805, + 12947: 0x727D, + 12948: 0x72AC, + 12949: 0x7504, + 12950: 0x7D79, + 12951: 0x7E6D, + 12952: 0x80A9, + 12953: 0x898B, + 12954: 0x8B74, + 12955: 0x9063, + 12956: 0x9D51, + 12957: 0x6289, + 12958: 0x6C7A, + 12959: 0x6F54, + 12960: 0x7D50, + 12961: 0x7F3A, + 12962: 0x8A23, + 12963: 0x517C, + 12964: 0x614A, + 12965: 0x7B9D, + 12966: 0x8B19, + 12967: 0x9257, + 12968: 0x938C, + 12969: 0x4EAC, + 12970: 0x4FD3, + 12971: 0x501E, + 12972: 0x50BE, + 12973: 0x5106, + 12974: 0x52C1, + 12975: 0x52CD, + 12976: 0x537F, + 12977: 0x5770, + 12978: 0x5883, + 12979: 0x5E9A, + 12980: 0x5F91, + 12981: 0x6176, + 12982: 0x61AC, + 12983: 0x64CE, + 12984: 0x656C, + 12985: 0x666F, + 12986: 0x66BB, + 12987: 0x66F4, + 12988: 0x6897, + 12989: 0x6D87, + 12990: 0x7085, + 12991: 0x70F1, + 12992: 0x749F, + 12993: 0x74A5, + 12994: 0x74CA, + 12995: 0x75D9, + 12996: 0x786C, + 12997: 0x78EC, + 12998: 0x7ADF, + 12999: 0x7AF6, + 13000: 0x7D45, + 13001: 0x7D93, + 13002: 0x8015, + 13003: 0x803F, + 13004: 0x811B, + 13005: 0x8396, + 13006: 0x8B66, + 13007: 0x8F15, + 13008: 0x9015, + 13009: 0x93E1, + 13010: 0x9803, + 13011: 0x9838, + 13012: 0x9A5A, + 13013: 0x9BE8, + 13014: 0x4FC2, + 13015: 0x5553, + 13016: 0x583A, + 13017: 0x5951, + 13018: 0x5B63, + 13019: 0x5C46, + 13020: 0x60B8, + 13021: 0x6212, + 13022: 0x6842, + 13023: 0x68B0, + 13024: 0x68E8, + 13025: 0x6EAA, + 13026: 0x754C, + 13027: 0x7678, + 13028: 0x78CE, + 13029: 0x7A3D, + 13030: 0x7CFB, + 13031: 0x7E6B, + 13032: 0x7E7C, + 13033: 0x8A08, + 13034: 0x8AA1, + 13035: 0x8C3F, + 13036: 0x968E, + 13037: 0x9DC4, + 13038: 0x53E4, + 13039: 0x53E9, + 13040: 0x544A, + 13041: 0x5471, + 13042: 0x56FA, + 13043: 0x59D1, + 13044: 0x5B64, + 13045: 0x5C3B, + 13046: 0x5EAB, + 13047: 0x62F7, + 13048: 0x6537, + 13049: 0x6545, + 13050: 0x6572, + 13051: 0x66A0, + 13052: 0x67AF, + 13053: 0x69C1, + 13054: 0x6CBD, + 13055: 0x75FC, + 13056: 0x7690, + 13057: 0x777E, + 13058: 0x7A3F, + 13059: 0x7F94, + 13060: 0x8003, + 13061: 0x80A1, + 13062: 0x818F, + 13063: 0x82E6, + 13064: 0x82FD, + 13065: 0x83F0, + 13066: 0x85C1, + 13067: 0x8831, + 13068: 0x88B4, + 13069: 0x8AA5, + 13070: 0xF903, + 13071: 0x8F9C, + 13072: 0x932E, + 13073: 0x96C7, + 13074: 0x9867, + 13075: 0x9AD8, + 13076: 0x9F13, + 13077: 0x54ED, + 13078: 0x659B, + 13079: 0x66F2, + 13080: 0x688F, + 13081: 0x7A40, + 13082: 0x8C37, + 13083: 0x9D60, + 13084: 0x56F0, + 13085: 0x5764, + 13086: 0x5D11, + 13087: 0x6606, + 13088: 0x68B1, + 13089: 0x68CD, + 13090: 0x6EFE, + 13091: 0x7428, + 13092: 0x889E, + 13093: 0x9BE4, + 13094: 0x6C68, + 13095: 0xF904, + 13096: 0x9AA8, + 13097: 0x4F9B, + 13098: 0x516C, + 13099: 0x5171, + 13100: 0x529F, + 13101: 0x5B54, + 13102: 0x5DE5, + 13103: 0x6050, + 13104: 0x606D, + 13105: 0x62F1, + 13106: 0x63A7, + 13107: 0x653B, + 13108: 0x73D9, + 13109: 0x7A7A, + 13110: 0x86A3, + 13111: 0x8CA2, + 13112: 0x978F, + 13113: 0x4E32, + 13114: 0x5BE1, + 13115: 0x6208, + 13116: 0x679C, + 13117: 0x74DC, + 13118: 0x79D1, + 13119: 0x83D3, + 13120: 0x8A87, + 13121: 0x8AB2, + 13122: 0x8DE8, + 13123: 0x904E, + 13124: 0x934B, + 13125: 0x9846, + 13126: 0x5ED3, + 13127: 0x69E8, + 13128: 0x85FF, + 13129: 0x90ED, + 13130: 0xF905, + 13131: 0x51A0, + 13132: 0x5B98, + 13133: 0x5BEC, + 13134: 0x6163, + 13135: 0x68FA, + 13136: 0x6B3E, + 13137: 0x704C, + 13138: 0x742F, + 13139: 0x74D8, + 13140: 0x7BA1, + 13141: 0x7F50, + 13142: 0x83C5, + 13143: 0x89C0, + 13144: 0x8CAB, + 13145: 0x95DC, + 13146: 0x9928, + 13147: 0x522E, + 13148: 0x605D, + 13149: 0x62EC, + 13150: 0x9002, + 13151: 0x4F8A, + 13152: 0x5149, + 13153: 0x5321, + 13154: 0x58D9, + 13155: 0x5EE3, + 13156: 0x66E0, + 13157: 0x6D38, + 13158: 0x709A, + 13159: 0x72C2, + 13160: 0x73D6, + 13161: 0x7B50, + 13162: 0x80F1, + 13163: 0x945B, + 13164: 0x5366, + 13165: 0x639B, + 13166: 0x7F6B, + 13167: 0x4E56, + 13168: 0x5080, + 13169: 0x584A, + 13170: 0x58DE, + 13171: 0x602A, + 13172: 0x6127, + 13173: 0x62D0, + 13174: 0x69D0, + 13175: 0x9B41, + 13176: 0x5B8F, + 13177: 0x7D18, + 13178: 0x80B1, + 13179: 0x8F5F, + 13180: 0x4EA4, + 13181: 0x50D1, + 13182: 0x54AC, + 13183: 0x55AC, + 13184: 0x5B0C, + 13185: 0x5DA0, + 13186: 0x5DE7, + 13187: 0x652A, + 13188: 0x654E, + 13189: 0x6821, + 13190: 0x6A4B, + 13191: 0x72E1, + 13192: 0x768E, + 13193: 0x77EF, + 13194: 0x7D5E, + 13195: 0x7FF9, + 13196: 0x81A0, + 13197: 0x854E, + 13198: 0x86DF, + 13199: 0x8F03, + 13200: 0x8F4E, + 13201: 0x90CA, + 13202: 0x9903, + 13203: 0x9A55, + 13204: 0x9BAB, + 13205: 0x4E18, + 13206: 0x4E45, + 13207: 0x4E5D, + 13208: 0x4EC7, + 13209: 0x4FF1, + 13210: 0x5177, + 13211: 0x52FE, + 13212: 0x5340, + 13213: 0x53E3, + 13214: 0x53E5, + 13215: 0x548E, + 13216: 0x5614, + 13217: 0x5775, + 13218: 0x57A2, + 13219: 0x5BC7, + 13220: 0x5D87, + 13221: 0x5ED0, + 13222: 0x61FC, + 13223: 0x62D8, + 13224: 0x6551, + 13225: 0x67B8, + 13226: 0x67E9, + 13227: 0x69CB, + 13228: 0x6B50, + 13229: 0x6BC6, + 13230: 0x6BEC, + 13231: 0x6C42, + 13232: 0x6E9D, + 13233: 0x7078, + 13234: 0x72D7, + 13235: 0x7396, + 13236: 0x7403, + 13237: 0x77BF, + 13238: 0x77E9, + 13239: 0x7A76, + 13240: 0x7D7F, + 13241: 0x8009, + 13242: 0x81FC, + 13243: 0x8205, + 13244: 0x820A, + 13245: 0x82DF, + 13246: 0x8862, + 13247: 0x8B33, + 13248: 0x8CFC, + 13249: 0x8EC0, + 13250: 0x9011, + 13251: 0x90B1, + 13252: 0x9264, + 13253: 0x92B6, + 13254: 0x99D2, + 13255: 0x9A45, + 13256: 0x9CE9, + 13257: 0x9DD7, + 13258: 0x9F9C, + 13259: 0x570B, + 13260: 0x5C40, + 13261: 0x83CA, + 13262: 0x97A0, + 13263: 0x97AB, + 13264: 0x9EB4, + 13265: 0x541B, + 13266: 0x7A98, + 13267: 0x7FA4, + 13268: 0x88D9, + 13269: 0x8ECD, + 13270: 0x90E1, + 13271: 0x5800, + 13272: 0x5C48, + 13273: 0x6398, + 13274: 0x7A9F, + 13275: 0x5BAE, + 13276: 0x5F13, + 13277: 0x7A79, + 13278: 0x7AAE, + 13279: 0x828E, + 13280: 0x8EAC, + 13281: 0x5026, + 13282: 0x5238, + 13283: 0x52F8, + 13284: 0x5377, + 13285: 0x5708, + 13286: 0x62F3, + 13287: 0x6372, + 13288: 0x6B0A, + 13289: 0x6DC3, + 13290: 0x7737, + 13291: 0x53A5, + 13292: 0x7357, + 13293: 0x8568, + 13294: 0x8E76, + 13295: 0x95D5, + 13296: 0x673A, + 13297: 0x6AC3, + 13298: 0x6F70, + 13299: 0x8A6D, + 13300: 0x8ECC, + 13301: 0x994B, + 13302: 0xF906, + 13303: 0x6677, + 13304: 0x6B78, + 13305: 0x8CB4, + 13306: 0x9B3C, + 13307: 0xF907, + 13308: 0x53EB, + 13309: 0x572D, + 13310: 0x594E, + 13311: 0x63C6, + 13312: 0x69FB, + 13313: 0x73EA, + 13314: 0x7845, + 13315: 0x7ABA, + 13316: 0x7AC5, + 13317: 0x7CFE, + 13318: 0x8475, + 13319: 0x898F, + 13320: 0x8D73, + 13321: 0x9035, + 13322: 0x95A8, + 13323: 0x52FB, + 13324: 0x5747, + 13325: 0x7547, + 13326: 0x7B60, + 13327: 0x83CC, + 13328: 0x921E, + 13329: 0xF908, + 13330: 0x6A58, + 13331: 0x514B, + 13332: 0x524B, + 13333: 0x5287, + 13334: 0x621F, + 13335: 0x68D8, + 13336: 0x6975, + 13337: 0x9699, + 13338: 0x50C5, + 13339: 0x52A4, + 13340: 0x52E4, + 13341: 0x61C3, + 13342: 0x65A4, + 13343: 0x6839, + 13344: 0x69FF, + 13345: 0x747E, + 13346: 0x7B4B, + 13347: 0x82B9, + 13348: 0x83EB, + 13349: 0x89B2, + 13350: 0x8B39, + 13351: 0x8FD1, + 13352: 0x9949, + 13353: 0xF909, + 13354: 0x4ECA, + 13355: 0x5997, + 13356: 0x64D2, + 13357: 0x6611, + 13358: 0x6A8E, + 13359: 0x7434, + 13360: 0x7981, + 13361: 0x79BD, + 13362: 0x82A9, + 13363: 0x887E, + 13364: 0x887F, + 13365: 0x895F, + 13366: 0xF90A, + 13367: 0x9326, + 13368: 0x4F0B, + 13369: 0x53CA, + 13370: 0x6025, + 13371: 0x6271, + 13372: 0x6C72, + 13373: 0x7D1A, + 13374: 0x7D66, + 13375: 0x4E98, + 13376: 0x5162, + 13377: 0x77DC, + 13378: 0x80AF, + 13379: 0x4F01, + 13380: 0x4F0E, + 13381: 0x5176, + 13382: 0x5180, + 13383: 0x55DC, + 13384: 0x5668, + 13385: 0x573B, + 13386: 0x57FA, + 13387: 0x57FC, + 13388: 0x5914, + 13389: 0x5947, + 13390: 0x5993, + 13391: 0x5BC4, + 13392: 0x5C90, + 13393: 0x5D0E, + 13394: 0x5DF1, + 13395: 0x5E7E, + 13396: 0x5FCC, + 13397: 0x6280, + 13398: 0x65D7, + 13399: 0x65E3, + 13400: 0x671E, + 13401: 0x671F, + 13402: 0x675E, + 13403: 0x68CB, + 13404: 0x68C4, + 13405: 0x6A5F, + 13406: 0x6B3A, + 13407: 0x6C23, + 13408: 0x6C7D, + 13409: 0x6C82, + 13410: 0x6DC7, + 13411: 0x7398, + 13412: 0x7426, + 13413: 0x742A, + 13414: 0x7482, + 13415: 0x74A3, + 13416: 0x7578, + 13417: 0x757F, + 13418: 0x7881, + 13419: 0x78EF, + 13420: 0x7941, + 13421: 0x7947, + 13422: 0x7948, + 13423: 0x797A, + 13424: 0x7B95, + 13425: 0x7D00, + 13426: 0x7DBA, + 13427: 0x7F88, + 13428: 0x8006, + 13429: 0x802D, + 13430: 0x808C, + 13431: 0x8A18, + 13432: 0x8B4F, + 13433: 0x8C48, + 13434: 0x8D77, + 13435: 0x9321, + 13436: 0x9324, + 13437: 0x98E2, + 13438: 0x9951, + 13439: 0x9A0E, + 13440: 0x9A0F, + 13441: 0x9A65, + 13442: 0x9E92, + 13443: 0x7DCA, + 13444: 0x4F76, + 13445: 0x5409, + 13446: 0x62EE, + 13447: 0x6854, + 13448: 0x91D1, + 13449: 0x55AB, + 13450: 0x513A, + 13451: 0xF90B, + 13452: 0xF90C, + 13453: 0x5A1C, + 13454: 0x61E6, + 13455: 0xF90D, + 13456: 0x62CF, + 13457: 0x62FF, + 13458: 0xF90E, + 13459: 0xF90F, + 13460: 0xF910, + 13461: 0xF911, + 13462: 0xF912, + 13463: 0xF913, + 13464: 0x90A3, + 13465: 0xF914, + 13466: 0xF915, + 13467: 0xF916, + 13468: 0xF917, + 13469: 0xF918, + 13470: 0x8AFE, + 13471: 0xF919, + 13472: 0xF91A, + 13473: 0xF91B, + 13474: 0xF91C, + 13475: 0x6696, + 13476: 0xF91D, + 13477: 0x7156, + 13478: 0xF91E, + 13479: 0xF91F, + 13480: 0x96E3, + 13481: 0xF920, + 13482: 0x634F, + 13483: 0x637A, + 13484: 0x5357, + 13485: 0xF921, + 13486: 0x678F, + 13487: 0x6960, + 13488: 0x6E73, + 13489: 0xF922, + 13490: 0x7537, + 13491: 0xF923, + 13492: 0xF924, + 13493: 0xF925, + 13494: 0x7D0D, + 13495: 0xF926, + 13496: 0xF927, + 13497: 0x8872, + 13498: 0x56CA, + 13499: 0x5A18, + 13500: 0xF928, + 13501: 0xF929, + 13502: 0xF92A, + 13503: 0xF92B, + 13504: 0xF92C, + 13505: 0x4E43, + 13506: 0xF92D, + 13507: 0x5167, + 13508: 0x5948, + 13509: 0x67F0, + 13510: 0x8010, + 13511: 0xF92E, + 13512: 0x5973, + 13513: 0x5E74, + 13514: 0x649A, + 13515: 0x79CA, + 13516: 0x5FF5, + 13517: 0x606C, + 13518: 0x62C8, + 13519: 0x637B, + 13520: 0x5BE7, + 13521: 0x5BD7, + 13522: 0x52AA, + 13523: 0xF92F, + 13524: 0x5974, + 13525: 0x5F29, + 13526: 0x6012, + 13527: 0xF930, + 13528: 0xF931, + 13529: 0xF932, + 13530: 0x7459, + 13531: 0xF933, + 13532: 0xF934, + 13533: 0xF935, + 13534: 0xF936, + 13535: 0xF937, + 13536: 0xF938, + 13537: 0x99D1, + 13538: 0xF939, + 13539: 0xF93A, + 13540: 0xF93B, + 13541: 0xF93C, + 13542: 0xF93D, + 13543: 0xF93E, + 13544: 0xF93F, + 13545: 0xF940, + 13546: 0xF941, + 13547: 0xF942, + 13548: 0xF943, + 13549: 0x6FC3, + 13550: 0xF944, + 13551: 0xF945, + 13552: 0x81BF, + 13553: 0x8FB2, + 13554: 0x60F1, + 13555: 0xF946, + 13556: 0xF947, + 13557: 0x8166, + 13558: 0xF948, + 13559: 0xF949, + 13560: 0x5C3F, + 13561: 0xF94A, + 13562: 0xF94B, + 13563: 0xF94C, + 13564: 0xF94D, + 13565: 0xF94E, + 13566: 0xF94F, + 13567: 0xF950, + 13568: 0xF951, + 13569: 0x5AE9, + 13570: 0x8A25, + 13571: 0x677B, + 13572: 0x7D10, + 13573: 0xF952, + 13574: 0xF953, + 13575: 0xF954, + 13576: 0xF955, + 13577: 0xF956, + 13578: 0xF957, + 13579: 0x80FD, + 13580: 0xF958, + 13581: 0xF959, + 13582: 0x5C3C, + 13583: 0x6CE5, + 13584: 0x533F, + 13585: 0x6EBA, + 13586: 0x591A, + 13587: 0x8336, + 13588: 0x4E39, + 13589: 0x4EB6, + 13590: 0x4F46, + 13591: 0x55AE, + 13592: 0x5718, + 13593: 0x58C7, + 13594: 0x5F56, + 13595: 0x65B7, + 13596: 0x65E6, + 13597: 0x6A80, + 13598: 0x6BB5, + 13599: 0x6E4D, + 13600: 0x77ED, + 13601: 0x7AEF, + 13602: 0x7C1E, + 13603: 0x7DDE, + 13604: 0x86CB, + 13605: 0x8892, + 13606: 0x9132, + 13607: 0x935B, + 13608: 0x64BB, + 13609: 0x6FBE, + 13610: 0x737A, + 13611: 0x75B8, + 13612: 0x9054, + 13613: 0x5556, + 13614: 0x574D, + 13615: 0x61BA, + 13616: 0x64D4, + 13617: 0x66C7, + 13618: 0x6DE1, + 13619: 0x6E5B, + 13620: 0x6F6D, + 13621: 0x6FB9, + 13622: 0x75F0, + 13623: 0x8043, + 13624: 0x81BD, + 13625: 0x8541, + 13626: 0x8983, + 13627: 0x8AC7, + 13628: 0x8B5A, + 13629: 0x931F, + 13630: 0x6C93, + 13631: 0x7553, + 13632: 0x7B54, + 13633: 0x8E0F, + 13634: 0x905D, + 13635: 0x5510, + 13636: 0x5802, + 13637: 0x5858, + 13638: 0x5E62, + 13639: 0x6207, + 13640: 0x649E, + 13641: 0x68E0, + 13642: 0x7576, + 13643: 0x7CD6, + 13644: 0x87B3, + 13645: 0x9EE8, + 13646: 0x4EE3, + 13647: 0x5788, + 13648: 0x576E, + 13649: 0x5927, + 13650: 0x5C0D, + 13651: 0x5CB1, + 13652: 0x5E36, + 13653: 0x5F85, + 13654: 0x6234, + 13655: 0x64E1, + 13656: 0x73B3, + 13657: 0x81FA, + 13658: 0x888B, + 13659: 0x8CB8, + 13660: 0x968A, + 13661: 0x9EDB, + 13662: 0x5B85, + 13663: 0x5FB7, + 13664: 0x60B3, + 13665: 0x5012, + 13666: 0x5200, + 13667: 0x5230, + 13668: 0x5716, + 13669: 0x5835, + 13670: 0x5857, + 13671: 0x5C0E, + 13672: 0x5C60, + 13673: 0x5CF6, + 13674: 0x5D8B, + 13675: 0x5EA6, + 13676: 0x5F92, + 13677: 0x60BC, + 13678: 0x6311, + 13679: 0x6389, + 13680: 0x6417, + 13681: 0x6843, + 13682: 0x68F9, + 13683: 0x6AC2, + 13684: 0x6DD8, + 13685: 0x6E21, + 13686: 0x6ED4, + 13687: 0x6FE4, + 13688: 0x71FE, + 13689: 0x76DC, + 13690: 0x7779, + 13691: 0x79B1, + 13692: 0x7A3B, + 13693: 0x8404, + 13694: 0x89A9, + 13695: 0x8CED, + 13696: 0x8DF3, + 13697: 0x8E48, + 13698: 0x9003, + 13699: 0x9014, + 13700: 0x9053, + 13701: 0x90FD, + 13702: 0x934D, + 13703: 0x9676, + 13704: 0x97DC, + 13705: 0x6BD2, + 13706: 0x7006, + 13707: 0x7258, + 13708: 0x72A2, + 13709: 0x7368, + 13710: 0x7763, + 13711: 0x79BF, + 13712: 0x7BE4, + 13713: 0x7E9B, + 13714: 0x8B80, + 13715: 0x58A9, + 13716: 0x60C7, + 13717: 0x6566, + 13718: 0x65FD, + 13719: 0x66BE, + 13720: 0x6C8C, + 13721: 0x711E, + 13722: 0x71C9, + 13723: 0x8C5A, + 13724: 0x9813, + 13725: 0x4E6D, + 13726: 0x7A81, + 13727: 0x4EDD, + 13728: 0x51AC, + 13729: 0x51CD, + 13730: 0x52D5, + 13731: 0x540C, + 13732: 0x61A7, + 13733: 0x6771, + 13734: 0x6850, + 13735: 0x68DF, + 13736: 0x6D1E, + 13737: 0x6F7C, + 13738: 0x75BC, + 13739: 0x77B3, + 13740: 0x7AE5, + 13741: 0x80F4, + 13742: 0x8463, + 13743: 0x9285, + 13744: 0x515C, + 13745: 0x6597, + 13746: 0x675C, + 13747: 0x6793, + 13748: 0x75D8, + 13749: 0x7AC7, + 13750: 0x8373, + 13751: 0xF95A, + 13752: 0x8C46, + 13753: 0x9017, + 13754: 0x982D, + 13755: 0x5C6F, + 13756: 0x81C0, + 13757: 0x829A, + 13758: 0x9041, + 13759: 0x906F, + 13760: 0x920D, + 13761: 0x5F97, + 13762: 0x5D9D, + 13763: 0x6A59, + 13764: 0x71C8, + 13765: 0x767B, + 13766: 0x7B49, + 13767: 0x85E4, + 13768: 0x8B04, + 13769: 0x9127, + 13770: 0x9A30, + 13771: 0x5587, + 13772: 0x61F6, + 13773: 0xF95B, + 13774: 0x7669, + 13775: 0x7F85, + 13776: 0x863F, + 13777: 0x87BA, + 13778: 0x88F8, + 13779: 0x908F, + 13780: 0xF95C, + 13781: 0x6D1B, + 13782: 0x70D9, + 13783: 0x73DE, + 13784: 0x7D61, + 13785: 0x843D, + 13786: 0xF95D, + 13787: 0x916A, + 13788: 0x99F1, + 13789: 0xF95E, + 13790: 0x4E82, + 13791: 0x5375, + 13792: 0x6B04, + 13793: 0x6B12, + 13794: 0x703E, + 13795: 0x721B, + 13796: 0x862D, + 13797: 0x9E1E, + 13798: 0x524C, + 13799: 0x8FA3, + 13800: 0x5D50, + 13801: 0x64E5, + 13802: 0x652C, + 13803: 0x6B16, + 13804: 0x6FEB, + 13805: 0x7C43, + 13806: 0x7E9C, + 13807: 0x85CD, + 13808: 0x8964, + 13809: 0x89BD, + 13810: 0x62C9, + 13811: 0x81D8, + 13812: 0x881F, + 13813: 0x5ECA, + 13814: 0x6717, + 13815: 0x6D6A, + 13816: 0x72FC, + 13817: 0x7405, + 13818: 0x746F, + 13819: 0x8782, + 13820: 0x90DE, + 13821: 0x4F86, + 13822: 0x5D0D, + 13823: 0x5FA0, + 13824: 0x840A, + 13825: 0x51B7, + 13826: 0x63A0, + 13827: 0x7565, + 13828: 0x4EAE, + 13829: 0x5006, + 13830: 0x5169, + 13831: 0x51C9, + 13832: 0x6881, + 13833: 0x6A11, + 13834: 0x7CAE, + 13835: 0x7CB1, + 13836: 0x7CE7, + 13837: 0x826F, + 13838: 0x8AD2, + 13839: 0x8F1B, + 13840: 0x91CF, + 13841: 0x4FB6, + 13842: 0x5137, + 13843: 0x52F5, + 13844: 0x5442, + 13845: 0x5EEC, + 13846: 0x616E, + 13847: 0x623E, + 13848: 0x65C5, + 13849: 0x6ADA, + 13850: 0x6FFE, + 13851: 0x792A, + 13852: 0x85DC, + 13853: 0x8823, + 13854: 0x95AD, + 13855: 0x9A62, + 13856: 0x9A6A, + 13857: 0x9E97, + 13858: 0x9ECE, + 13859: 0x529B, + 13860: 0x66C6, + 13861: 0x6B77, + 13862: 0x701D, + 13863: 0x792B, + 13864: 0x8F62, + 13865: 0x9742, + 13866: 0x6190, + 13867: 0x6200, + 13868: 0x6523, + 13869: 0x6F23, + 13870: 0x7149, + 13871: 0x7489, + 13872: 0x7DF4, + 13873: 0x806F, + 13874: 0x84EE, + 13875: 0x8F26, + 13876: 0x9023, + 13877: 0x934A, + 13878: 0x51BD, + 13879: 0x5217, + 13880: 0x52A3, + 13881: 0x6D0C, + 13882: 0x70C8, + 13883: 0x88C2, + 13884: 0x5EC9, + 13885: 0x6582, + 13886: 0x6BAE, + 13887: 0x6FC2, + 13888: 0x7C3E, + 13889: 0x7375, + 13890: 0x4EE4, + 13891: 0x4F36, + 13892: 0x56F9, + 13893: 0xF95F, + 13894: 0x5CBA, + 13895: 0x5DBA, + 13896: 0x601C, + 13897: 0x73B2, + 13898: 0x7B2D, + 13899: 0x7F9A, + 13900: 0x7FCE, + 13901: 0x8046, + 13902: 0x901E, + 13903: 0x9234, + 13904: 0x96F6, + 13905: 0x9748, + 13906: 0x9818, + 13907: 0x9F61, + 13908: 0x4F8B, + 13909: 0x6FA7, + 13910: 0x79AE, + 13911: 0x91B4, + 13912: 0x96B7, + 13913: 0x52DE, + 13914: 0xF960, + 13915: 0x6488, + 13916: 0x64C4, + 13917: 0x6AD3, + 13918: 0x6F5E, + 13919: 0x7018, + 13920: 0x7210, + 13921: 0x76E7, + 13922: 0x8001, + 13923: 0x8606, + 13924: 0x865C, + 13925: 0x8DEF, + 13926: 0x8F05, + 13927: 0x9732, + 13928: 0x9B6F, + 13929: 0x9DFA, + 13930: 0x9E75, + 13931: 0x788C, + 13932: 0x797F, + 13933: 0x7DA0, + 13934: 0x83C9, + 13935: 0x9304, + 13936: 0x9E7F, + 13937: 0x9E93, + 13938: 0x8AD6, + 13939: 0x58DF, + 13940: 0x5F04, + 13941: 0x6727, + 13942: 0x7027, + 13943: 0x74CF, + 13944: 0x7C60, + 13945: 0x807E, + 13946: 0x5121, + 13947: 0x7028, + 13948: 0x7262, + 13949: 0x78CA, + 13950: 0x8CC2, + 13951: 0x8CDA, + 13952: 0x8CF4, + 13953: 0x96F7, + 13954: 0x4E86, + 13955: 0x50DA, + 13956: 0x5BEE, + 13957: 0x5ED6, + 13958: 0x6599, + 13959: 0x71CE, + 13960: 0x7642, + 13961: 0x77AD, + 13962: 0x804A, + 13963: 0x84FC, + 13964: 0x907C, + 13965: 0x9B27, + 13966: 0x9F8D, + 13967: 0x58D8, + 13968: 0x5A41, + 13969: 0x5C62, + 13970: 0x6A13, + 13971: 0x6DDA, + 13972: 0x6F0F, + 13973: 0x763B, + 13974: 0x7D2F, + 13975: 0x7E37, + 13976: 0x851E, + 13977: 0x8938, + 13978: 0x93E4, + 13979: 0x964B, + 13980: 0x5289, + 13981: 0x65D2, + 13982: 0x67F3, + 13983: 0x69B4, + 13984: 0x6D41, + 13985: 0x6E9C, + 13986: 0x700F, + 13987: 0x7409, + 13988: 0x7460, + 13989: 0x7559, + 13990: 0x7624, + 13991: 0x786B, + 13992: 0x8B2C, + 13993: 0x985E, + 13994: 0x516D, + 13995: 0x622E, + 13996: 0x9678, + 13997: 0x4F96, + 13998: 0x502B, + 13999: 0x5D19, + 14000: 0x6DEA, + 14001: 0x7DB8, + 14002: 0x8F2A, + 14003: 0x5F8B, + 14004: 0x6144, + 14005: 0x6817, + 14006: 0xF961, + 14007: 0x9686, + 14008: 0x52D2, + 14009: 0x808B, + 14010: 0x51DC, + 14011: 0x51CC, + 14012: 0x695E, + 14013: 0x7A1C, + 14014: 0x7DBE, + 14015: 0x83F1, + 14016: 0x9675, + 14017: 0x4FDA, + 14018: 0x5229, + 14019: 0x5398, + 14020: 0x540F, + 14021: 0x550E, + 14022: 0x5C65, + 14023: 0x60A7, + 14024: 0x674E, + 14025: 0x68A8, + 14026: 0x6D6C, + 14027: 0x7281, + 14028: 0x72F8, + 14029: 0x7406, + 14030: 0x7483, + 14031: 0xF962, + 14032: 0x75E2, + 14033: 0x7C6C, + 14034: 0x7F79, + 14035: 0x7FB8, + 14036: 0x8389, + 14037: 0x88CF, + 14038: 0x88E1, + 14039: 0x91CC, + 14040: 0x91D0, + 14041: 0x96E2, + 14042: 0x9BC9, + 14043: 0x541D, + 14044: 0x6F7E, + 14045: 0x71D0, + 14046: 0x7498, + 14047: 0x85FA, + 14048: 0x8EAA, + 14049: 0x96A3, + 14050: 0x9C57, + 14051: 0x9E9F, + 14052: 0x6797, + 14053: 0x6DCB, + 14054: 0x7433, + 14055: 0x81E8, + 14056: 0x9716, + 14057: 0x782C, + 14058: 0x7ACB, + 14059: 0x7B20, + 14060: 0x7C92, + 14061: 0x6469, + 14062: 0x746A, + 14063: 0x75F2, + 14064: 0x78BC, + 14065: 0x78E8, + 14066: 0x99AC, + 14067: 0x9B54, + 14068: 0x9EBB, + 14069: 0x5BDE, + 14070: 0x5E55, + 14071: 0x6F20, + 14072: 0x819C, + 14073: 0x83AB, + 14074: 0x9088, + 14075: 0x4E07, + 14076: 0x534D, + 14077: 0x5A29, + 14078: 0x5DD2, + 14079: 0x5F4E, + 14080: 0x6162, + 14081: 0x633D, + 14082: 0x6669, + 14083: 0x66FC, + 14084: 0x6EFF, + 14085: 0x6F2B, + 14086: 0x7063, + 14087: 0x779E, + 14088: 0x842C, + 14089: 0x8513, + 14090: 0x883B, + 14091: 0x8F13, + 14092: 0x9945, + 14093: 0x9C3B, + 14094: 0x551C, + 14095: 0x62B9, + 14096: 0x672B, + 14097: 0x6CAB, + 14098: 0x8309, + 14099: 0x896A, + 14100: 0x977A, + 14101: 0x4EA1, + 14102: 0x5984, + 14103: 0x5FD8, + 14104: 0x5FD9, + 14105: 0x671B, + 14106: 0x7DB2, + 14107: 0x7F54, + 14108: 0x8292, + 14109: 0x832B, + 14110: 0x83BD, + 14111: 0x8F1E, + 14112: 0x9099, + 14113: 0x57CB, + 14114: 0x59B9, + 14115: 0x5A92, + 14116: 0x5BD0, + 14117: 0x6627, + 14118: 0x679A, + 14119: 0x6885, + 14120: 0x6BCF, + 14121: 0x7164, + 14122: 0x7F75, + 14123: 0x8CB7, + 14124: 0x8CE3, + 14125: 0x9081, + 14126: 0x9B45, + 14127: 0x8108, + 14128: 0x8C8A, + 14129: 0x964C, + 14130: 0x9A40, + 14131: 0x9EA5, + 14132: 0x5B5F, + 14133: 0x6C13, + 14134: 0x731B, + 14135: 0x76F2, + 14136: 0x76DF, + 14137: 0x840C, + 14138: 0x51AA, + 14139: 0x8993, + 14140: 0x514D, + 14141: 0x5195, + 14142: 0x52C9, + 14143: 0x68C9, + 14144: 0x6C94, + 14145: 0x7704, + 14146: 0x7720, + 14147: 0x7DBF, + 14148: 0x7DEC, + 14149: 0x9762, + 14150: 0x9EB5, + 14151: 0x6EC5, + 14152: 0x8511, + 14153: 0x51A5, + 14154: 0x540D, + 14155: 0x547D, + 14156: 0x660E, + 14157: 0x669D, + 14158: 0x6927, + 14159: 0x6E9F, + 14160: 0x76BF, + 14161: 0x7791, + 14162: 0x8317, + 14163: 0x84C2, + 14164: 0x879F, + 14165: 0x9169, + 14166: 0x9298, + 14167: 0x9CF4, + 14168: 0x8882, + 14169: 0x4FAE, + 14170: 0x5192, + 14171: 0x52DF, + 14172: 0x59C6, + 14173: 0x5E3D, + 14174: 0x6155, + 14175: 0x6478, + 14176: 0x6479, + 14177: 0x66AE, + 14178: 0x67D0, + 14179: 0x6A21, + 14180: 0x6BCD, + 14181: 0x6BDB, + 14182: 0x725F, + 14183: 0x7261, + 14184: 0x7441, + 14185: 0x7738, + 14186: 0x77DB, + 14187: 0x8017, + 14188: 0x82BC, + 14189: 0x8305, + 14190: 0x8B00, + 14191: 0x8B28, + 14192: 0x8C8C, + 14193: 0x6728, + 14194: 0x6C90, + 14195: 0x7267, + 14196: 0x76EE, + 14197: 0x7766, + 14198: 0x7A46, + 14199: 0x9DA9, + 14200: 0x6B7F, + 14201: 0x6C92, + 14202: 0x5922, + 14203: 0x6726, + 14204: 0x8499, + 14205: 0x536F, + 14206: 0x5893, + 14207: 0x5999, + 14208: 0x5EDF, + 14209: 0x63CF, + 14210: 0x6634, + 14211: 0x6773, + 14212: 0x6E3A, + 14213: 0x732B, + 14214: 0x7AD7, + 14215: 0x82D7, + 14216: 0x9328, + 14217: 0x52D9, + 14218: 0x5DEB, + 14219: 0x61AE, + 14220: 0x61CB, + 14221: 0x620A, + 14222: 0x62C7, + 14223: 0x64AB, + 14224: 0x65E0, + 14225: 0x6959, + 14226: 0x6B66, + 14227: 0x6BCB, + 14228: 0x7121, + 14229: 0x73F7, + 14230: 0x755D, + 14231: 0x7E46, + 14232: 0x821E, + 14233: 0x8302, + 14234: 0x856A, + 14235: 0x8AA3, + 14236: 0x8CBF, + 14237: 0x9727, + 14238: 0x9D61, + 14239: 0x58A8, + 14240: 0x9ED8, + 14241: 0x5011, + 14242: 0x520E, + 14243: 0x543B, + 14244: 0x554F, + 14245: 0x6587, + 14246: 0x6C76, + 14247: 0x7D0A, + 14248: 0x7D0B, + 14249: 0x805E, + 14250: 0x868A, + 14251: 0x9580, + 14252: 0x96EF, + 14253: 0x52FF, + 14254: 0x6C95, + 14255: 0x7269, + 14256: 0x5473, + 14257: 0x5A9A, + 14258: 0x5C3E, + 14259: 0x5D4B, + 14260: 0x5F4C, + 14261: 0x5FAE, + 14262: 0x672A, + 14263: 0x68B6, + 14264: 0x6963, + 14265: 0x6E3C, + 14266: 0x6E44, + 14267: 0x7709, + 14268: 0x7C73, + 14269: 0x7F8E, + 14270: 0x8587, + 14271: 0x8B0E, + 14272: 0x8FF7, + 14273: 0x9761, + 14274: 0x9EF4, + 14275: 0x5CB7, + 14276: 0x60B6, + 14277: 0x610D, + 14278: 0x61AB, + 14279: 0x654F, + 14280: 0x65FB, + 14281: 0x65FC, + 14282: 0x6C11, + 14283: 0x6CEF, + 14284: 0x739F, + 14285: 0x73C9, + 14286: 0x7DE1, + 14287: 0x9594, + 14288: 0x5BC6, + 14289: 0x871C, + 14290: 0x8B10, + 14291: 0x525D, + 14292: 0x535A, + 14293: 0x62CD, + 14294: 0x640F, + 14295: 0x64B2, + 14296: 0x6734, + 14297: 0x6A38, + 14298: 0x6CCA, + 14299: 0x73C0, + 14300: 0x749E, + 14301: 0x7B94, + 14302: 0x7C95, + 14303: 0x7E1B, + 14304: 0x818A, + 14305: 0x8236, + 14306: 0x8584, + 14307: 0x8FEB, + 14308: 0x96F9, + 14309: 0x99C1, + 14310: 0x4F34, + 14311: 0x534A, + 14312: 0x53CD, + 14313: 0x53DB, + 14314: 0x62CC, + 14315: 0x642C, + 14316: 0x6500, + 14317: 0x6591, + 14318: 0x69C3, + 14319: 0x6CEE, + 14320: 0x6F58, + 14321: 0x73ED, + 14322: 0x7554, + 14323: 0x7622, + 14324: 0x76E4, + 14325: 0x76FC, + 14326: 0x78D0, + 14327: 0x78FB, + 14328: 0x792C, + 14329: 0x7D46, + 14330: 0x822C, + 14331: 0x87E0, + 14332: 0x8FD4, + 14333: 0x9812, + 14334: 0x98EF, + 14335: 0x52C3, + 14336: 0x62D4, + 14337: 0x64A5, + 14338: 0x6E24, + 14339: 0x6F51, + 14340: 0x767C, + 14341: 0x8DCB, + 14342: 0x91B1, + 14343: 0x9262, + 14344: 0x9AEE, + 14345: 0x9B43, + 14346: 0x5023, + 14347: 0x508D, + 14348: 0x574A, + 14349: 0x59A8, + 14350: 0x5C28, + 14351: 0x5E47, + 14352: 0x5F77, + 14353: 0x623F, + 14354: 0x653E, + 14355: 0x65B9, + 14356: 0x65C1, + 14357: 0x6609, + 14358: 0x678B, + 14359: 0x699C, + 14360: 0x6EC2, + 14361: 0x78C5, + 14362: 0x7D21, + 14363: 0x80AA, + 14364: 0x8180, + 14365: 0x822B, + 14366: 0x82B3, + 14367: 0x84A1, + 14368: 0x868C, + 14369: 0x8A2A, + 14370: 0x8B17, + 14371: 0x90A6, + 14372: 0x9632, + 14373: 0x9F90, + 14374: 0x500D, + 14375: 0x4FF3, + 14376: 0xF963, + 14377: 0x57F9, + 14378: 0x5F98, + 14379: 0x62DC, + 14380: 0x6392, + 14381: 0x676F, + 14382: 0x6E43, + 14383: 0x7119, + 14384: 0x76C3, + 14385: 0x80CC, + 14386: 0x80DA, + 14387: 0x88F4, + 14388: 0x88F5, + 14389: 0x8919, + 14390: 0x8CE0, + 14391: 0x8F29, + 14392: 0x914D, + 14393: 0x966A, + 14394: 0x4F2F, + 14395: 0x4F70, + 14396: 0x5E1B, + 14397: 0x67CF, + 14398: 0x6822, + 14399: 0x767D, + 14400: 0x767E, + 14401: 0x9B44, + 14402: 0x5E61, + 14403: 0x6A0A, + 14404: 0x7169, + 14405: 0x71D4, + 14406: 0x756A, + 14407: 0xF964, + 14408: 0x7E41, + 14409: 0x8543, + 14410: 0x85E9, + 14411: 0x98DC, + 14412: 0x4F10, + 14413: 0x7B4F, + 14414: 0x7F70, + 14415: 0x95A5, + 14416: 0x51E1, + 14417: 0x5E06, + 14418: 0x68B5, + 14419: 0x6C3E, + 14420: 0x6C4E, + 14421: 0x6CDB, + 14422: 0x72AF, + 14423: 0x7BC4, + 14424: 0x8303, + 14425: 0x6CD5, + 14426: 0x743A, + 14427: 0x50FB, + 14428: 0x5288, + 14429: 0x58C1, + 14430: 0x64D8, + 14431: 0x6A97, + 14432: 0x74A7, + 14433: 0x7656, + 14434: 0x78A7, + 14435: 0x8617, + 14436: 0x95E2, + 14437: 0x9739, + 14438: 0xF965, + 14439: 0x535E, + 14440: 0x5F01, + 14441: 0x8B8A, + 14442: 0x8FA8, + 14443: 0x8FAF, + 14444: 0x908A, + 14445: 0x5225, + 14446: 0x77A5, + 14447: 0x9C49, + 14448: 0x9F08, + 14449: 0x4E19, + 14450: 0x5002, + 14451: 0x5175, + 14452: 0x5C5B, + 14453: 0x5E77, + 14454: 0x661E, + 14455: 0x663A, + 14456: 0x67C4, + 14457: 0x68C5, + 14458: 0x70B3, + 14459: 0x7501, + 14460: 0x75C5, + 14461: 0x79C9, + 14462: 0x7ADD, + 14463: 0x8F27, + 14464: 0x9920, + 14465: 0x9A08, + 14466: 0x4FDD, + 14467: 0x5821, + 14468: 0x5831, + 14469: 0x5BF6, + 14470: 0x666E, + 14471: 0x6B65, + 14472: 0x6D11, + 14473: 0x6E7A, + 14474: 0x6F7D, + 14475: 0x73E4, + 14476: 0x752B, + 14477: 0x83E9, + 14478: 0x88DC, + 14479: 0x8913, + 14480: 0x8B5C, + 14481: 0x8F14, + 14482: 0x4F0F, + 14483: 0x50D5, + 14484: 0x5310, + 14485: 0x535C, + 14486: 0x5B93, + 14487: 0x5FA9, + 14488: 0x670D, + 14489: 0x798F, + 14490: 0x8179, + 14491: 0x832F, + 14492: 0x8514, + 14493: 0x8907, + 14494: 0x8986, + 14495: 0x8F39, + 14496: 0x8F3B, + 14497: 0x99A5, + 14498: 0x9C12, + 14499: 0x672C, + 14500: 0x4E76, + 14501: 0x4FF8, + 14502: 0x5949, + 14503: 0x5C01, + 14504: 0x5CEF, + 14505: 0x5CF0, + 14506: 0x6367, + 14507: 0x68D2, + 14508: 0x70FD, + 14509: 0x71A2, + 14510: 0x742B, + 14511: 0x7E2B, + 14512: 0x84EC, + 14513: 0x8702, + 14514: 0x9022, + 14515: 0x92D2, + 14516: 0x9CF3, + 14517: 0x4E0D, + 14518: 0x4ED8, + 14519: 0x4FEF, + 14520: 0x5085, + 14521: 0x5256, + 14522: 0x526F, + 14523: 0x5426, + 14524: 0x5490, + 14525: 0x57E0, + 14526: 0x592B, + 14527: 0x5A66, + 14528: 0x5B5A, + 14529: 0x5B75, + 14530: 0x5BCC, + 14531: 0x5E9C, + 14532: 0xF966, + 14533: 0x6276, + 14534: 0x6577, + 14535: 0x65A7, + 14536: 0x6D6E, + 14537: 0x6EA5, + 14538: 0x7236, + 14539: 0x7B26, + 14540: 0x7C3F, + 14541: 0x7F36, + 14542: 0x8150, + 14543: 0x8151, + 14544: 0x819A, + 14545: 0x8240, + 14546: 0x8299, + 14547: 0x83A9, + 14548: 0x8A03, + 14549: 0x8CA0, + 14550: 0x8CE6, + 14551: 0x8CFB, + 14552: 0x8D74, + 14553: 0x8DBA, + 14554: 0x90E8, + 14555: 0x91DC, + 14556: 0x961C, + 14557: 0x9644, + 14558: 0x99D9, + 14559: 0x9CE7, + 14560: 0x5317, + 14561: 0x5206, + 14562: 0x5429, + 14563: 0x5674, + 14564: 0x58B3, + 14565: 0x5954, + 14566: 0x596E, + 14567: 0x5FFF, + 14568: 0x61A4, + 14569: 0x626E, + 14570: 0x6610, + 14571: 0x6C7E, + 14572: 0x711A, + 14573: 0x76C6, + 14574: 0x7C89, + 14575: 0x7CDE, + 14576: 0x7D1B, + 14577: 0x82AC, + 14578: 0x8CC1, + 14579: 0x96F0, + 14580: 0xF967, + 14581: 0x4F5B, + 14582: 0x5F17, + 14583: 0x5F7F, + 14584: 0x62C2, + 14585: 0x5D29, + 14586: 0x670B, + 14587: 0x68DA, + 14588: 0x787C, + 14589: 0x7E43, + 14590: 0x9D6C, + 14591: 0x4E15, + 14592: 0x5099, + 14593: 0x5315, + 14594: 0x532A, + 14595: 0x5351, + 14596: 0x5983, + 14597: 0x5A62, + 14598: 0x5E87, + 14599: 0x60B2, + 14600: 0x618A, + 14601: 0x6249, + 14602: 0x6279, + 14603: 0x6590, + 14604: 0x6787, + 14605: 0x69A7, + 14606: 0x6BD4, + 14607: 0x6BD6, + 14608: 0x6BD7, + 14609: 0x6BD8, + 14610: 0x6CB8, + 14611: 0xF968, + 14612: 0x7435, + 14613: 0x75FA, + 14614: 0x7812, + 14615: 0x7891, + 14616: 0x79D5, + 14617: 0x79D8, + 14618: 0x7C83, + 14619: 0x7DCB, + 14620: 0x7FE1, + 14621: 0x80A5, + 14622: 0x813E, + 14623: 0x81C2, + 14624: 0x83F2, + 14625: 0x871A, + 14626: 0x88E8, + 14627: 0x8AB9, + 14628: 0x8B6C, + 14629: 0x8CBB, + 14630: 0x9119, + 14631: 0x975E, + 14632: 0x98DB, + 14633: 0x9F3B, + 14634: 0x56AC, + 14635: 0x5B2A, + 14636: 0x5F6C, + 14637: 0x658C, + 14638: 0x6AB3, + 14639: 0x6BAF, + 14640: 0x6D5C, + 14641: 0x6FF1, + 14642: 0x7015, + 14643: 0x725D, + 14644: 0x73AD, + 14645: 0x8CA7, + 14646: 0x8CD3, + 14647: 0x983B, + 14648: 0x6191, + 14649: 0x6C37, + 14650: 0x8058, + 14651: 0x9A01, + 14652: 0x4E4D, + 14653: 0x4E8B, + 14654: 0x4E9B, + 14655: 0x4ED5, + 14656: 0x4F3A, + 14657: 0x4F3C, + 14658: 0x4F7F, + 14659: 0x4FDF, + 14660: 0x50FF, + 14661: 0x53F2, + 14662: 0x53F8, + 14663: 0x5506, + 14664: 0x55E3, + 14665: 0x56DB, + 14666: 0x58EB, + 14667: 0x5962, + 14668: 0x5A11, + 14669: 0x5BEB, + 14670: 0x5BFA, + 14671: 0x5C04, + 14672: 0x5DF3, + 14673: 0x5E2B, + 14674: 0x5F99, + 14675: 0x601D, + 14676: 0x6368, + 14677: 0x659C, + 14678: 0x65AF, + 14679: 0x67F6, + 14680: 0x67FB, + 14681: 0x68AD, + 14682: 0x6B7B, + 14683: 0x6C99, + 14684: 0x6CD7, + 14685: 0x6E23, + 14686: 0x7009, + 14687: 0x7345, + 14688: 0x7802, + 14689: 0x793E, + 14690: 0x7940, + 14691: 0x7960, + 14692: 0x79C1, + 14693: 0x7BE9, + 14694: 0x7D17, + 14695: 0x7D72, + 14696: 0x8086, + 14697: 0x820D, + 14698: 0x838E, + 14699: 0x84D1, + 14700: 0x86C7, + 14701: 0x88DF, + 14702: 0x8A50, + 14703: 0x8A5E, + 14704: 0x8B1D, + 14705: 0x8CDC, + 14706: 0x8D66, + 14707: 0x8FAD, + 14708: 0x90AA, + 14709: 0x98FC, + 14710: 0x99DF, + 14711: 0x9E9D, + 14712: 0x524A, + 14713: 0xF969, + 14714: 0x6714, + 14715: 0xF96A, + 14716: 0x5098, + 14717: 0x522A, + 14718: 0x5C71, + 14719: 0x6563, + 14720: 0x6C55, + 14721: 0x73CA, + 14722: 0x7523, + 14723: 0x759D, + 14724: 0x7B97, + 14725: 0x849C, + 14726: 0x9178, + 14727: 0x9730, + 14728: 0x4E77, + 14729: 0x6492, + 14730: 0x6BBA, + 14731: 0x715E, + 14732: 0x85A9, + 14733: 0x4E09, + 14734: 0xF96B, + 14735: 0x6749, + 14736: 0x68EE, + 14737: 0x6E17, + 14738: 0x829F, + 14739: 0x8518, + 14740: 0x886B, + 14741: 0x63F7, + 14742: 0x6F81, + 14743: 0x9212, + 14744: 0x98AF, + 14745: 0x4E0A, + 14746: 0x50B7, + 14747: 0x50CF, + 14748: 0x511F, + 14749: 0x5546, + 14750: 0x55AA, + 14751: 0x5617, + 14752: 0x5B40, + 14753: 0x5C19, + 14754: 0x5CE0, + 14755: 0x5E38, + 14756: 0x5E8A, + 14757: 0x5EA0, + 14758: 0x5EC2, + 14759: 0x60F3, + 14760: 0x6851, + 14761: 0x6A61, + 14762: 0x6E58, + 14763: 0x723D, + 14764: 0x7240, + 14765: 0x72C0, + 14766: 0x76F8, + 14767: 0x7965, + 14768: 0x7BB1, + 14769: 0x7FD4, + 14770: 0x88F3, + 14771: 0x89F4, + 14772: 0x8A73, + 14773: 0x8C61, + 14774: 0x8CDE, + 14775: 0x971C, + 14776: 0x585E, + 14777: 0x74BD, + 14778: 0x8CFD, + 14779: 0x55C7, + 14780: 0xF96C, + 14781: 0x7A61, + 14782: 0x7D22, + 14783: 0x8272, + 14784: 0x7272, + 14785: 0x751F, + 14786: 0x7525, + 14787: 0xF96D, + 14788: 0x7B19, + 14789: 0x5885, + 14790: 0x58FB, + 14791: 0x5DBC, + 14792: 0x5E8F, + 14793: 0x5EB6, + 14794: 0x5F90, + 14795: 0x6055, + 14796: 0x6292, + 14797: 0x637F, + 14798: 0x654D, + 14799: 0x6691, + 14800: 0x66D9, + 14801: 0x66F8, + 14802: 0x6816, + 14803: 0x68F2, + 14804: 0x7280, + 14805: 0x745E, + 14806: 0x7B6E, + 14807: 0x7D6E, + 14808: 0x7DD6, + 14809: 0x7F72, + 14810: 0x80E5, + 14811: 0x8212, + 14812: 0x85AF, + 14813: 0x897F, + 14814: 0x8A93, + 14815: 0x901D, + 14816: 0x92E4, + 14817: 0x9ECD, + 14818: 0x9F20, + 14819: 0x5915, + 14820: 0x596D, + 14821: 0x5E2D, + 14822: 0x60DC, + 14823: 0x6614, + 14824: 0x6673, + 14825: 0x6790, + 14826: 0x6C50, + 14827: 0x6DC5, + 14828: 0x6F5F, + 14829: 0x77F3, + 14830: 0x78A9, + 14831: 0x84C6, + 14832: 0x91CB, + 14833: 0x932B, + 14834: 0x4ED9, + 14835: 0x50CA, + 14836: 0x5148, + 14837: 0x5584, + 14838: 0x5B0B, + 14839: 0x5BA3, + 14840: 0x6247, + 14841: 0x657E, + 14842: 0x65CB, + 14843: 0x6E32, + 14844: 0x717D, + 14845: 0x7401, + 14846: 0x7444, + 14847: 0x7487, + 14848: 0x74BF, + 14849: 0x766C, + 14850: 0x79AA, + 14851: 0x7DDA, + 14852: 0x7E55, + 14853: 0x7FA8, + 14854: 0x817A, + 14855: 0x81B3, + 14856: 0x8239, + 14857: 0x861A, + 14858: 0x87EC, + 14859: 0x8A75, + 14860: 0x8DE3, + 14861: 0x9078, + 14862: 0x9291, + 14863: 0x9425, + 14864: 0x994D, + 14865: 0x9BAE, + 14866: 0x5368, + 14867: 0x5C51, + 14868: 0x6954, + 14869: 0x6CC4, + 14870: 0x6D29, + 14871: 0x6E2B, + 14872: 0x820C, + 14873: 0x859B, + 14874: 0x893B, + 14875: 0x8A2D, + 14876: 0x8AAA, + 14877: 0x96EA, + 14878: 0x9F67, + 14879: 0x5261, + 14880: 0x66B9, + 14881: 0x6BB2, + 14882: 0x7E96, + 14883: 0x87FE, + 14884: 0x8D0D, + 14885: 0x9583, + 14886: 0x965D, + 14887: 0x651D, + 14888: 0x6D89, + 14889: 0x71EE, + 14890: 0xF96E, + 14891: 0x57CE, + 14892: 0x59D3, + 14893: 0x5BAC, + 14894: 0x6027, + 14895: 0x60FA, + 14896: 0x6210, + 14897: 0x661F, + 14898: 0x665F, + 14899: 0x7329, + 14900: 0x73F9, + 14901: 0x76DB, + 14902: 0x7701, + 14903: 0x7B6C, + 14904: 0x8056, + 14905: 0x8072, + 14906: 0x8165, + 14907: 0x8AA0, + 14908: 0x9192, + 14909: 0x4E16, + 14910: 0x52E2, + 14911: 0x6B72, + 14912: 0x6D17, + 14913: 0x7A05, + 14914: 0x7B39, + 14915: 0x7D30, + 14916: 0xF96F, + 14917: 0x8CB0, + 14918: 0x53EC, + 14919: 0x562F, + 14920: 0x5851, + 14921: 0x5BB5, + 14922: 0x5C0F, + 14923: 0x5C11, + 14924: 0x5DE2, + 14925: 0x6240, + 14926: 0x6383, + 14927: 0x6414, + 14928: 0x662D, + 14929: 0x68B3, + 14930: 0x6CBC, + 14931: 0x6D88, + 14932: 0x6EAF, + 14933: 0x701F, + 14934: 0x70A4, + 14935: 0x71D2, + 14936: 0x7526, + 14937: 0x758F, + 14938: 0x758E, + 14939: 0x7619, + 14940: 0x7B11, + 14941: 0x7BE0, + 14942: 0x7C2B, + 14943: 0x7D20, + 14944: 0x7D39, + 14945: 0x852C, + 14946: 0x856D, + 14947: 0x8607, + 14948: 0x8A34, + 14949: 0x900D, + 14950: 0x9061, + 14951: 0x90B5, + 14952: 0x92B7, + 14953: 0x97F6, + 14954: 0x9A37, + 14955: 0x4FD7, + 14956: 0x5C6C, + 14957: 0x675F, + 14958: 0x6D91, + 14959: 0x7C9F, + 14960: 0x7E8C, + 14961: 0x8B16, + 14962: 0x8D16, + 14963: 0x901F, + 14964: 0x5B6B, + 14965: 0x5DFD, + 14966: 0x640D, + 14967: 0x84C0, + 14968: 0x905C, + 14969: 0x98E1, + 14970: 0x7387, + 14971: 0x5B8B, + 14972: 0x609A, + 14973: 0x677E, + 14974: 0x6DDE, + 14975: 0x8A1F, + 14976: 0x8AA6, + 14977: 0x9001, + 14978: 0x980C, + 14979: 0x5237, + 14980: 0xF970, + 14981: 0x7051, + 14982: 0x788E, + 14983: 0x9396, + 14984: 0x8870, + 14985: 0x91D7, + 14986: 0x4FEE, + 14987: 0x53D7, + 14988: 0x55FD, + 14989: 0x56DA, + 14990: 0x5782, + 14991: 0x58FD, + 14992: 0x5AC2, + 14993: 0x5B88, + 14994: 0x5CAB, + 14995: 0x5CC0, + 14996: 0x5E25, + 14997: 0x6101, + 14998: 0x620D, + 14999: 0x624B, + 15000: 0x6388, + 15001: 0x641C, + 15002: 0x6536, + 15003: 0x6578, + 15004: 0x6A39, + 15005: 0x6B8A, + 15006: 0x6C34, + 15007: 0x6D19, + 15008: 0x6F31, + 15009: 0x71E7, + 15010: 0x72E9, + 15011: 0x7378, + 15012: 0x7407, + 15013: 0x74B2, + 15014: 0x7626, + 15015: 0x7761, + 15016: 0x79C0, + 15017: 0x7A57, + 15018: 0x7AEA, + 15019: 0x7CB9, + 15020: 0x7D8F, + 15021: 0x7DAC, + 15022: 0x7E61, + 15023: 0x7F9E, + 15024: 0x8129, + 15025: 0x8331, + 15026: 0x8490, + 15027: 0x84DA, + 15028: 0x85EA, + 15029: 0x8896, + 15030: 0x8AB0, + 15031: 0x8B90, + 15032: 0x8F38, + 15033: 0x9042, + 15034: 0x9083, + 15035: 0x916C, + 15036: 0x9296, + 15037: 0x92B9, + 15038: 0x968B, + 15039: 0x96A7, + 15040: 0x96A8, + 15041: 0x96D6, + 15042: 0x9700, + 15043: 0x9808, + 15044: 0x9996, + 15045: 0x9AD3, + 15046: 0x9B1A, + 15047: 0x53D4, + 15048: 0x587E, + 15049: 0x5919, + 15050: 0x5B70, + 15051: 0x5BBF, + 15052: 0x6DD1, + 15053: 0x6F5A, + 15054: 0x719F, + 15055: 0x7421, + 15056: 0x74B9, + 15057: 0x8085, + 15058: 0x83FD, + 15059: 0x5DE1, + 15060: 0x5F87, + 15061: 0x5FAA, + 15062: 0x6042, + 15063: 0x65EC, + 15064: 0x6812, + 15065: 0x696F, + 15066: 0x6A53, + 15067: 0x6B89, + 15068: 0x6D35, + 15069: 0x6DF3, + 15070: 0x73E3, + 15071: 0x76FE, + 15072: 0x77AC, + 15073: 0x7B4D, + 15074: 0x7D14, + 15075: 0x8123, + 15076: 0x821C, + 15077: 0x8340, + 15078: 0x84F4, + 15079: 0x8563, + 15080: 0x8A62, + 15081: 0x8AC4, + 15082: 0x9187, + 15083: 0x931E, + 15084: 0x9806, + 15085: 0x99B4, + 15086: 0x620C, + 15087: 0x8853, + 15088: 0x8FF0, + 15089: 0x9265, + 15090: 0x5D07, + 15091: 0x5D27, + 15092: 0x5D69, + 15093: 0x745F, + 15094: 0x819D, + 15095: 0x8768, + 15096: 0x6FD5, + 15097: 0x62FE, + 15098: 0x7FD2, + 15099: 0x8936, + 15100: 0x8972, + 15101: 0x4E1E, + 15102: 0x4E58, + 15103: 0x50E7, + 15104: 0x52DD, + 15105: 0x5347, + 15106: 0x627F, + 15107: 0x6607, + 15108: 0x7E69, + 15109: 0x8805, + 15110: 0x965E, + 15111: 0x4F8D, + 15112: 0x5319, + 15113: 0x5636, + 15114: 0x59CB, + 15115: 0x5AA4, + 15116: 0x5C38, + 15117: 0x5C4E, + 15118: 0x5C4D, + 15119: 0x5E02, + 15120: 0x5F11, + 15121: 0x6043, + 15122: 0x65BD, + 15123: 0x662F, + 15124: 0x6642, + 15125: 0x67BE, + 15126: 0x67F4, + 15127: 0x731C, + 15128: 0x77E2, + 15129: 0x793A, + 15130: 0x7FC5, + 15131: 0x8494, + 15132: 0x84CD, + 15133: 0x8996, + 15134: 0x8A66, + 15135: 0x8A69, + 15136: 0x8AE1, + 15137: 0x8C55, + 15138: 0x8C7A, + 15139: 0x57F4, + 15140: 0x5BD4, + 15141: 0x5F0F, + 15142: 0x606F, + 15143: 0x62ED, + 15144: 0x690D, + 15145: 0x6B96, + 15146: 0x6E5C, + 15147: 0x7184, + 15148: 0x7BD2, + 15149: 0x8755, + 15150: 0x8B58, + 15151: 0x8EFE, + 15152: 0x98DF, + 15153: 0x98FE, + 15154: 0x4F38, + 15155: 0x4F81, + 15156: 0x4FE1, + 15157: 0x547B, + 15158: 0x5A20, + 15159: 0x5BB8, + 15160: 0x613C, + 15161: 0x65B0, + 15162: 0x6668, + 15163: 0x71FC, + 15164: 0x7533, + 15165: 0x795E, + 15166: 0x7D33, + 15167: 0x814E, + 15168: 0x81E3, + 15169: 0x8398, + 15170: 0x85AA, + 15171: 0x85CE, + 15172: 0x8703, + 15173: 0x8A0A, + 15174: 0x8EAB, + 15175: 0x8F9B, + 15176: 0xF971, + 15177: 0x8FC5, + 15178: 0x5931, + 15179: 0x5BA4, + 15180: 0x5BE6, + 15181: 0x6089, + 15182: 0x5BE9, + 15183: 0x5C0B, + 15184: 0x5FC3, + 15185: 0x6C81, + 15186: 0xF972, + 15187: 0x6DF1, + 15188: 0x700B, + 15189: 0x751A, + 15190: 0x82AF, + 15191: 0x8AF6, + 15192: 0x4EC0, + 15193: 0x5341, + 15194: 0xF973, + 15195: 0x96D9, + 15196: 0x6C0F, + 15197: 0x4E9E, + 15198: 0x4FC4, + 15199: 0x5152, + 15200: 0x555E, + 15201: 0x5A25, + 15202: 0x5CE8, + 15203: 0x6211, + 15204: 0x7259, + 15205: 0x82BD, + 15206: 0x83AA, + 15207: 0x86FE, + 15208: 0x8859, + 15209: 0x8A1D, + 15210: 0x963F, + 15211: 0x96C5, + 15212: 0x9913, + 15213: 0x9D09, + 15214: 0x9D5D, + 15215: 0x580A, + 15216: 0x5CB3, + 15217: 0x5DBD, + 15218: 0x5E44, + 15219: 0x60E1, + 15220: 0x6115, + 15221: 0x63E1, + 15222: 0x6A02, + 15223: 0x6E25, + 15224: 0x9102, + 15225: 0x9354, + 15226: 0x984E, + 15227: 0x9C10, + 15228: 0x9F77, + 15229: 0x5B89, + 15230: 0x5CB8, + 15231: 0x6309, + 15232: 0x664F, + 15233: 0x6848, + 15234: 0x773C, + 15235: 0x96C1, + 15236: 0x978D, + 15237: 0x9854, + 15238: 0x9B9F, + 15239: 0x65A1, + 15240: 0x8B01, + 15241: 0x8ECB, + 15242: 0x95BC, + 15243: 0x5535, + 15244: 0x5CA9, + 15245: 0x5DD6, + 15246: 0x5EB5, + 15247: 0x6697, + 15248: 0x764C, + 15249: 0x83F4, + 15250: 0x95C7, + 15251: 0x58D3, + 15252: 0x62BC, + 15253: 0x72CE, + 15254: 0x9D28, + 15255: 0x4EF0, + 15256: 0x592E, + 15257: 0x600F, + 15258: 0x663B, + 15259: 0x6B83, + 15260: 0x79E7, + 15261: 0x9D26, + 15262: 0x5393, + 15263: 0x54C0, + 15264: 0x57C3, + 15265: 0x5D16, + 15266: 0x611B, + 15267: 0x66D6, + 15268: 0x6DAF, + 15269: 0x788D, + 15270: 0x827E, + 15271: 0x9698, + 15272: 0x9744, + 15273: 0x5384, + 15274: 0x627C, + 15275: 0x6396, + 15276: 0x6DB2, + 15277: 0x7E0A, + 15278: 0x814B, + 15279: 0x984D, + 15280: 0x6AFB, + 15281: 0x7F4C, + 15282: 0x9DAF, + 15283: 0x9E1A, + 15284: 0x4E5F, + 15285: 0x503B, + 15286: 0x51B6, + 15287: 0x591C, + 15288: 0x60F9, + 15289: 0x63F6, + 15290: 0x6930, + 15291: 0x723A, + 15292: 0x8036, + 15293: 0xF974, + 15294: 0x91CE, + 15295: 0x5F31, + 15296: 0xF975, + 15297: 0xF976, + 15298: 0x7D04, + 15299: 0x82E5, + 15300: 0x846F, + 15301: 0x84BB, + 15302: 0x85E5, + 15303: 0x8E8D, + 15304: 0xF977, + 15305: 0x4F6F, + 15306: 0xF978, + 15307: 0xF979, + 15308: 0x58E4, + 15309: 0x5B43, + 15310: 0x6059, + 15311: 0x63DA, + 15312: 0x6518, + 15313: 0x656D, + 15314: 0x6698, + 15315: 0xF97A, + 15316: 0x694A, + 15317: 0x6A23, + 15318: 0x6D0B, + 15319: 0x7001, + 15320: 0x716C, + 15321: 0x75D2, + 15322: 0x760D, + 15323: 0x79B3, + 15324: 0x7A70, + 15325: 0xF97B, + 15326: 0x7F8A, + 15327: 0xF97C, + 15328: 0x8944, + 15329: 0xF97D, + 15330: 0x8B93, + 15331: 0x91C0, + 15332: 0x967D, + 15333: 0xF97E, + 15334: 0x990A, + 15335: 0x5704, + 15336: 0x5FA1, + 15337: 0x65BC, + 15338: 0x6F01, + 15339: 0x7600, + 15340: 0x79A6, + 15341: 0x8A9E, + 15342: 0x99AD, + 15343: 0x9B5A, + 15344: 0x9F6C, + 15345: 0x5104, + 15346: 0x61B6, + 15347: 0x6291, + 15348: 0x6A8D, + 15349: 0x81C6, + 15350: 0x5043, + 15351: 0x5830, + 15352: 0x5F66, + 15353: 0x7109, + 15354: 0x8A00, + 15355: 0x8AFA, + 15356: 0x5B7C, + 15357: 0x8616, + 15358: 0x4FFA, + 15359: 0x513C, + 15360: 0x56B4, + 15361: 0x5944, + 15362: 0x63A9, + 15363: 0x6DF9, + 15364: 0x5DAA, + 15365: 0x696D, + 15366: 0x5186, + 15367: 0x4E88, + 15368: 0x4F59, + 15369: 0xF97F, + 15370: 0xF980, + 15371: 0xF981, + 15372: 0x5982, + 15373: 0xF982, + 15374: 0xF983, + 15375: 0x6B5F, + 15376: 0x6C5D, + 15377: 0xF984, + 15378: 0x74B5, + 15379: 0x7916, + 15380: 0xF985, + 15381: 0x8207, + 15382: 0x8245, + 15383: 0x8339, + 15384: 0x8F3F, + 15385: 0x8F5D, + 15386: 0xF986, + 15387: 0x9918, + 15388: 0xF987, + 15389: 0xF988, + 15390: 0xF989, + 15391: 0x4EA6, + 15392: 0xF98A, + 15393: 0x57DF, + 15394: 0x5F79, + 15395: 0x6613, + 15396: 0xF98B, + 15397: 0xF98C, + 15398: 0x75AB, + 15399: 0x7E79, + 15400: 0x8B6F, + 15401: 0xF98D, + 15402: 0x9006, + 15403: 0x9A5B, + 15404: 0x56A5, + 15405: 0x5827, + 15406: 0x59F8, + 15407: 0x5A1F, + 15408: 0x5BB4, + 15409: 0xF98E, + 15410: 0x5EF6, + 15411: 0xF98F, + 15412: 0xF990, + 15413: 0x6350, + 15414: 0x633B, + 15415: 0xF991, + 15416: 0x693D, + 15417: 0x6C87, + 15418: 0x6CBF, + 15419: 0x6D8E, + 15420: 0x6D93, + 15421: 0x6DF5, + 15422: 0x6F14, + 15423: 0xF992, + 15424: 0x70DF, + 15425: 0x7136, + 15426: 0x7159, + 15427: 0xF993, + 15428: 0x71C3, + 15429: 0x71D5, + 15430: 0xF994, + 15431: 0x784F, + 15432: 0x786F, + 15433: 0xF995, + 15434: 0x7B75, + 15435: 0x7DE3, + 15436: 0xF996, + 15437: 0x7E2F, + 15438: 0xF997, + 15439: 0x884D, + 15440: 0x8EDF, + 15441: 0xF998, + 15442: 0xF999, + 15443: 0xF99A, + 15444: 0x925B, + 15445: 0xF99B, + 15446: 0x9CF6, + 15447: 0xF99C, + 15448: 0xF99D, + 15449: 0xF99E, + 15450: 0x6085, + 15451: 0x6D85, + 15452: 0xF99F, + 15453: 0x71B1, + 15454: 0xF9A0, + 15455: 0xF9A1, + 15456: 0x95B1, + 15457: 0x53AD, + 15458: 0xF9A2, + 15459: 0xF9A3, + 15460: 0xF9A4, + 15461: 0x67D3, + 15462: 0xF9A5, + 15463: 0x708E, + 15464: 0x7130, + 15465: 0x7430, + 15466: 0x8276, + 15467: 0x82D2, + 15468: 0xF9A6, + 15469: 0x95BB, + 15470: 0x9AE5, + 15471: 0x9E7D, + 15472: 0x66C4, + 15473: 0xF9A7, + 15474: 0x71C1, + 15475: 0x8449, + 15476: 0xF9A8, + 15477: 0xF9A9, + 15478: 0x584B, + 15479: 0xF9AA, + 15480: 0xF9AB, + 15481: 0x5DB8, + 15482: 0x5F71, + 15483: 0xF9AC, + 15484: 0x6620, + 15485: 0x668E, + 15486: 0x6979, + 15487: 0x69AE, + 15488: 0x6C38, + 15489: 0x6CF3, + 15490: 0x6E36, + 15491: 0x6F41, + 15492: 0x6FDA, + 15493: 0x701B, + 15494: 0x702F, + 15495: 0x7150, + 15496: 0x71DF, + 15497: 0x7370, + 15498: 0xF9AD, + 15499: 0x745B, + 15500: 0xF9AE, + 15501: 0x74D4, + 15502: 0x76C8, + 15503: 0x7A4E, + 15504: 0x7E93, + 15505: 0xF9AF, + 15506: 0xF9B0, + 15507: 0x82F1, + 15508: 0x8A60, + 15509: 0x8FCE, + 15510: 0xF9B1, + 15511: 0x9348, + 15512: 0xF9B2, + 15513: 0x9719, + 15514: 0xF9B3, + 15515: 0xF9B4, + 15516: 0x4E42, + 15517: 0x502A, + 15518: 0xF9B5, + 15519: 0x5208, + 15520: 0x53E1, + 15521: 0x66F3, + 15522: 0x6C6D, + 15523: 0x6FCA, + 15524: 0x730A, + 15525: 0x777F, + 15526: 0x7A62, + 15527: 0x82AE, + 15528: 0x85DD, + 15529: 0x8602, + 15530: 0xF9B6, + 15531: 0x88D4, + 15532: 0x8A63, + 15533: 0x8B7D, + 15534: 0x8C6B, + 15535: 0xF9B7, + 15536: 0x92B3, + 15537: 0xF9B8, + 15538: 0x9713, + 15539: 0x9810, + 15540: 0x4E94, + 15541: 0x4F0D, + 15542: 0x4FC9, + 15543: 0x50B2, + 15544: 0x5348, + 15545: 0x543E, + 15546: 0x5433, + 15547: 0x55DA, + 15548: 0x5862, + 15549: 0x58BA, + 15550: 0x5967, + 15551: 0x5A1B, + 15552: 0x5BE4, + 15553: 0x609F, + 15554: 0xF9B9, + 15555: 0x61CA, + 15556: 0x6556, + 15557: 0x65FF, + 15558: 0x6664, + 15559: 0x68A7, + 15560: 0x6C5A, + 15561: 0x6FB3, + 15562: 0x70CF, + 15563: 0x71AC, + 15564: 0x7352, + 15565: 0x7B7D, + 15566: 0x8708, + 15567: 0x8AA4, + 15568: 0x9C32, + 15569: 0x9F07, + 15570: 0x5C4B, + 15571: 0x6C83, + 15572: 0x7344, + 15573: 0x7389, + 15574: 0x923A, + 15575: 0x6EAB, + 15576: 0x7465, + 15577: 0x761F, + 15578: 0x7A69, + 15579: 0x7E15, + 15580: 0x860A, + 15581: 0x5140, + 15582: 0x58C5, + 15583: 0x64C1, + 15584: 0x74EE, + 15585: 0x7515, + 15586: 0x7670, + 15587: 0x7FC1, + 15588: 0x9095, + 15589: 0x96CD, + 15590: 0x9954, + 15591: 0x6E26, + 15592: 0x74E6, + 15593: 0x7AA9, + 15594: 0x7AAA, + 15595: 0x81E5, + 15596: 0x86D9, + 15597: 0x8778, + 15598: 0x8A1B, + 15599: 0x5A49, + 15600: 0x5B8C, + 15601: 0x5B9B, + 15602: 0x68A1, + 15603: 0x6900, + 15604: 0x6D63, + 15605: 0x73A9, + 15606: 0x7413, + 15607: 0x742C, + 15608: 0x7897, + 15609: 0x7DE9, + 15610: 0x7FEB, + 15611: 0x8118, + 15612: 0x8155, + 15613: 0x839E, + 15614: 0x8C4C, + 15615: 0x962E, + 15616: 0x9811, + 15617: 0x66F0, + 15618: 0x5F80, + 15619: 0x65FA, + 15620: 0x6789, + 15621: 0x6C6A, + 15622: 0x738B, + 15623: 0x502D, + 15624: 0x5A03, + 15625: 0x6B6A, + 15626: 0x77EE, + 15627: 0x5916, + 15628: 0x5D6C, + 15629: 0x5DCD, + 15630: 0x7325, + 15631: 0x754F, + 15632: 0xF9BA, + 15633: 0xF9BB, + 15634: 0x50E5, + 15635: 0x51F9, + 15636: 0x582F, + 15637: 0x592D, + 15638: 0x5996, + 15639: 0x59DA, + 15640: 0x5BE5, + 15641: 0xF9BC, + 15642: 0xF9BD, + 15643: 0x5DA2, + 15644: 0x62D7, + 15645: 0x6416, + 15646: 0x6493, + 15647: 0x64FE, + 15648: 0xF9BE, + 15649: 0x66DC, + 15650: 0xF9BF, + 15651: 0x6A48, + 15652: 0xF9C0, + 15653: 0x71FF, + 15654: 0x7464, + 15655: 0xF9C1, + 15656: 0x7A88, + 15657: 0x7AAF, + 15658: 0x7E47, + 15659: 0x7E5E, + 15660: 0x8000, + 15661: 0x8170, + 15662: 0xF9C2, + 15663: 0x87EF, + 15664: 0x8981, + 15665: 0x8B20, + 15666: 0x9059, + 15667: 0xF9C3, + 15668: 0x9080, + 15669: 0x9952, + 15670: 0x617E, + 15671: 0x6B32, + 15672: 0x6D74, + 15673: 0x7E1F, + 15674: 0x8925, + 15675: 0x8FB1, + 15676: 0x4FD1, + 15677: 0x50AD, + 15678: 0x5197, + 15679: 0x52C7, + 15680: 0x57C7, + 15681: 0x5889, + 15682: 0x5BB9, + 15683: 0x5EB8, + 15684: 0x6142, + 15685: 0x6995, + 15686: 0x6D8C, + 15687: 0x6E67, + 15688: 0x6EB6, + 15689: 0x7194, + 15690: 0x7462, + 15691: 0x7528, + 15692: 0x752C, + 15693: 0x8073, + 15694: 0x8338, + 15695: 0x84C9, + 15696: 0x8E0A, + 15697: 0x9394, + 15698: 0x93DE, + 15699: 0xF9C4, + 15700: 0x4E8E, + 15701: 0x4F51, + 15702: 0x5076, + 15703: 0x512A, + 15704: 0x53C8, + 15705: 0x53CB, + 15706: 0x53F3, + 15707: 0x5B87, + 15708: 0x5BD3, + 15709: 0x5C24, + 15710: 0x611A, + 15711: 0x6182, + 15712: 0x65F4, + 15713: 0x725B, + 15714: 0x7397, + 15715: 0x7440, + 15716: 0x76C2, + 15717: 0x7950, + 15718: 0x7991, + 15719: 0x79B9, + 15720: 0x7D06, + 15721: 0x7FBD, + 15722: 0x828B, + 15723: 0x85D5, + 15724: 0x865E, + 15725: 0x8FC2, + 15726: 0x9047, + 15727: 0x90F5, + 15728: 0x91EA, + 15729: 0x9685, + 15730: 0x96E8, + 15731: 0x96E9, + 15732: 0x52D6, + 15733: 0x5F67, + 15734: 0x65ED, + 15735: 0x6631, + 15736: 0x682F, + 15737: 0x715C, + 15738: 0x7A36, + 15739: 0x90C1, + 15740: 0x980A, + 15741: 0x4E91, + 15742: 0xF9C5, + 15743: 0x6A52, + 15744: 0x6B9E, + 15745: 0x6F90, + 15746: 0x7189, + 15747: 0x8018, + 15748: 0x82B8, + 15749: 0x8553, + 15750: 0x904B, + 15751: 0x9695, + 15752: 0x96F2, + 15753: 0x97FB, + 15754: 0x851A, + 15755: 0x9B31, + 15756: 0x4E90, + 15757: 0x718A, + 15758: 0x96C4, + 15759: 0x5143, + 15760: 0x539F, + 15761: 0x54E1, + 15762: 0x5713, + 15763: 0x5712, + 15764: 0x57A3, + 15765: 0x5A9B, + 15766: 0x5AC4, + 15767: 0x5BC3, + 15768: 0x6028, + 15769: 0x613F, + 15770: 0x63F4, + 15771: 0x6C85, + 15772: 0x6D39, + 15773: 0x6E72, + 15774: 0x6E90, + 15775: 0x7230, + 15776: 0x733F, + 15777: 0x7457, + 15778: 0x82D1, + 15779: 0x8881, + 15780: 0x8F45, + 15781: 0x9060, + 15782: 0xF9C6, + 15783: 0x9662, + 15784: 0x9858, + 15785: 0x9D1B, + 15786: 0x6708, + 15787: 0x8D8A, + 15788: 0x925E, + 15789: 0x4F4D, + 15790: 0x5049, + 15791: 0x50DE, + 15792: 0x5371, + 15793: 0x570D, + 15794: 0x59D4, + 15795: 0x5A01, + 15796: 0x5C09, + 15797: 0x6170, + 15798: 0x6690, + 15799: 0x6E2D, + 15800: 0x7232, + 15801: 0x744B, + 15802: 0x7DEF, + 15803: 0x80C3, + 15804: 0x840E, + 15805: 0x8466, + 15806: 0x853F, + 15807: 0x875F, + 15808: 0x885B, + 15809: 0x8918, + 15810: 0x8B02, + 15811: 0x9055, + 15812: 0x97CB, + 15813: 0x9B4F, + 15814: 0x4E73, + 15815: 0x4F91, + 15816: 0x5112, + 15817: 0x516A, + 15818: 0xF9C7, + 15819: 0x552F, + 15820: 0x55A9, + 15821: 0x5B7A, + 15822: 0x5BA5, + 15823: 0x5E7C, + 15824: 0x5E7D, + 15825: 0x5EBE, + 15826: 0x60A0, + 15827: 0x60DF, + 15828: 0x6108, + 15829: 0x6109, + 15830: 0x63C4, + 15831: 0x6538, + 15832: 0x6709, + 15833: 0xF9C8, + 15834: 0x67D4, + 15835: 0x67DA, + 15836: 0xF9C9, + 15837: 0x6961, + 15838: 0x6962, + 15839: 0x6CB9, + 15840: 0x6D27, + 15841: 0xF9CA, + 15842: 0x6E38, + 15843: 0xF9CB, + 15844: 0x6FE1, + 15845: 0x7336, + 15846: 0x7337, + 15847: 0xF9CC, + 15848: 0x745C, + 15849: 0x7531, + 15850: 0xF9CD, + 15851: 0x7652, + 15852: 0xF9CE, + 15853: 0xF9CF, + 15854: 0x7DAD, + 15855: 0x81FE, + 15856: 0x8438, + 15857: 0x88D5, + 15858: 0x8A98, + 15859: 0x8ADB, + 15860: 0x8AED, + 15861: 0x8E30, + 15862: 0x8E42, + 15863: 0x904A, + 15864: 0x903E, + 15865: 0x907A, + 15866: 0x9149, + 15867: 0x91C9, + 15868: 0x936E, + 15869: 0xF9D0, + 15870: 0xF9D1, + 15871: 0x5809, + 15872: 0xF9D2, + 15873: 0x6BD3, + 15874: 0x8089, + 15875: 0x80B2, + 15876: 0xF9D3, + 15877: 0xF9D4, + 15878: 0x5141, + 15879: 0x596B, + 15880: 0x5C39, + 15881: 0xF9D5, + 15882: 0xF9D6, + 15883: 0x6F64, + 15884: 0x73A7, + 15885: 0x80E4, + 15886: 0x8D07, + 15887: 0xF9D7, + 15888: 0x9217, + 15889: 0x958F, + 15890: 0xF9D8, + 15891: 0xF9D9, + 15892: 0xF9DA, + 15893: 0xF9DB, + 15894: 0x807F, + 15895: 0x620E, + 15896: 0x701C, + 15897: 0x7D68, + 15898: 0x878D, + 15899: 0xF9DC, + 15900: 0x57A0, + 15901: 0x6069, + 15902: 0x6147, + 15903: 0x6BB7, + 15904: 0x8ABE, + 15905: 0x9280, + 15906: 0x96B1, + 15907: 0x4E59, + 15908: 0x541F, + 15909: 0x6DEB, + 15910: 0x852D, + 15911: 0x9670, + 15912: 0x97F3, + 15913: 0x98EE, + 15914: 0x63D6, + 15915: 0x6CE3, + 15916: 0x9091, + 15917: 0x51DD, + 15918: 0x61C9, + 15919: 0x81BA, + 15920: 0x9DF9, + 15921: 0x4F9D, + 15922: 0x501A, + 15923: 0x5100, + 15924: 0x5B9C, + 15925: 0x610F, + 15926: 0x61FF, + 15927: 0x64EC, + 15928: 0x6905, + 15929: 0x6BC5, + 15930: 0x7591, + 15931: 0x77E3, + 15932: 0x7FA9, + 15933: 0x8264, + 15934: 0x858F, + 15935: 0x87FB, + 15936: 0x8863, + 15937: 0x8ABC, + 15938: 0x8B70, + 15939: 0x91AB, + 15940: 0x4E8C, + 15941: 0x4EE5, + 15942: 0x4F0A, + 15943: 0xF9DD, + 15944: 0xF9DE, + 15945: 0x5937, + 15946: 0x59E8, + 15947: 0xF9DF, + 15948: 0x5DF2, + 15949: 0x5F1B, + 15950: 0x5F5B, + 15951: 0x6021, + 15952: 0xF9E0, + 15953: 0xF9E1, + 15954: 0xF9E2, + 15955: 0xF9E3, + 15956: 0x723E, + 15957: 0x73E5, + 15958: 0xF9E4, + 15959: 0x7570, + 15960: 0x75CD, + 15961: 0xF9E5, + 15962: 0x79FB, + 15963: 0xF9E6, + 15964: 0x800C, + 15965: 0x8033, + 15966: 0x8084, + 15967: 0x82E1, + 15968: 0x8351, + 15969: 0xF9E7, + 15970: 0xF9E8, + 15971: 0x8CBD, + 15972: 0x8CB3, + 15973: 0x9087, + 15974: 0xF9E9, + 15975: 0xF9EA, + 15976: 0x98F4, + 15977: 0x990C, + 15978: 0xF9EB, + 15979: 0xF9EC, + 15980: 0x7037, + 15981: 0x76CA, + 15982: 0x7FCA, + 15983: 0x7FCC, + 15984: 0x7FFC, + 15985: 0x8B1A, + 15986: 0x4EBA, + 15987: 0x4EC1, + 15988: 0x5203, + 15989: 0x5370, + 15990: 0xF9ED, + 15991: 0x54BD, + 15992: 0x56E0, + 15993: 0x59FB, + 15994: 0x5BC5, + 15995: 0x5F15, + 15996: 0x5FCD, + 15997: 0x6E6E, + 15998: 0xF9EE, + 15999: 0xF9EF, + 16000: 0x7D6A, + 16001: 0x8335, + 16002: 0xF9F0, + 16003: 0x8693, + 16004: 0x8A8D, + 16005: 0xF9F1, + 16006: 0x976D, + 16007: 0x9777, + 16008: 0xF9F2, + 16009: 0xF9F3, + 16010: 0x4E00, + 16011: 0x4F5A, + 16012: 0x4F7E, + 16013: 0x58F9, + 16014: 0x65E5, + 16015: 0x6EA2, + 16016: 0x9038, + 16017: 0x93B0, + 16018: 0x99B9, + 16019: 0x4EFB, + 16020: 0x58EC, + 16021: 0x598A, + 16022: 0x59D9, + 16023: 0x6041, + 16024: 0xF9F4, + 16025: 0xF9F5, + 16026: 0x7A14, + 16027: 0xF9F6, + 16028: 0x834F, + 16029: 0x8CC3, + 16030: 0x5165, + 16031: 0x5344, + 16032: 0xF9F7, + 16033: 0xF9F8, + 16034: 0xF9F9, + 16035: 0x4ECD, + 16036: 0x5269, + 16037: 0x5B55, + 16038: 0x82BF, + 16039: 0x4ED4, + 16040: 0x523A, + 16041: 0x54A8, + 16042: 0x59C9, + 16043: 0x59FF, + 16044: 0x5B50, + 16045: 0x5B57, + 16046: 0x5B5C, + 16047: 0x6063, + 16048: 0x6148, + 16049: 0x6ECB, + 16050: 0x7099, + 16051: 0x716E, + 16052: 0x7386, + 16053: 0x74F7, + 16054: 0x75B5, + 16055: 0x78C1, + 16056: 0x7D2B, + 16057: 0x8005, + 16058: 0x81EA, + 16059: 0x8328, + 16060: 0x8517, + 16061: 0x85C9, + 16062: 0x8AEE, + 16063: 0x8CC7, + 16064: 0x96CC, + 16065: 0x4F5C, + 16066: 0x52FA, + 16067: 0x56BC, + 16068: 0x65AB, + 16069: 0x6628, + 16070: 0x707C, + 16071: 0x70B8, + 16072: 0x7235, + 16073: 0x7DBD, + 16074: 0x828D, + 16075: 0x914C, + 16076: 0x96C0, + 16077: 0x9D72, + 16078: 0x5B71, + 16079: 0x68E7, + 16080: 0x6B98, + 16081: 0x6F7A, + 16082: 0x76DE, + 16083: 0x5C91, + 16084: 0x66AB, + 16085: 0x6F5B, + 16086: 0x7BB4, + 16087: 0x7C2A, + 16088: 0x8836, + 16089: 0x96DC, + 16090: 0x4E08, + 16091: 0x4ED7, + 16092: 0x5320, + 16093: 0x5834, + 16094: 0x58BB, + 16095: 0x58EF, + 16096: 0x596C, + 16097: 0x5C07, + 16098: 0x5E33, + 16099: 0x5E84, + 16100: 0x5F35, + 16101: 0x638C, + 16102: 0x66B2, + 16103: 0x6756, + 16104: 0x6A1F, + 16105: 0x6AA3, + 16106: 0x6B0C, + 16107: 0x6F3F, + 16108: 0x7246, + 16109: 0xF9FA, + 16110: 0x7350, + 16111: 0x748B, + 16112: 0x7AE0, + 16113: 0x7CA7, + 16114: 0x8178, + 16115: 0x81DF, + 16116: 0x81E7, + 16117: 0x838A, + 16118: 0x846C, + 16119: 0x8523, + 16120: 0x8594, + 16121: 0x85CF, + 16122: 0x88DD, + 16123: 0x8D13, + 16124: 0x91AC, + 16125: 0x9577, + 16126: 0x969C, + 16127: 0x518D, + 16128: 0x54C9, + 16129: 0x5728, + 16130: 0x5BB0, + 16131: 0x624D, + 16132: 0x6750, + 16133: 0x683D, + 16134: 0x6893, + 16135: 0x6E3D, + 16136: 0x6ED3, + 16137: 0x707D, + 16138: 0x7E21, + 16139: 0x88C1, + 16140: 0x8CA1, + 16141: 0x8F09, + 16142: 0x9F4B, + 16143: 0x9F4E, + 16144: 0x722D, + 16145: 0x7B8F, + 16146: 0x8ACD, + 16147: 0x931A, + 16148: 0x4F47, + 16149: 0x4F4E, + 16150: 0x5132, + 16151: 0x5480, + 16152: 0x59D0, + 16153: 0x5E95, + 16154: 0x62B5, + 16155: 0x6775, + 16156: 0x696E, + 16157: 0x6A17, + 16158: 0x6CAE, + 16159: 0x6E1A, + 16160: 0x72D9, + 16161: 0x732A, + 16162: 0x75BD, + 16163: 0x7BB8, + 16164: 0x7D35, + 16165: 0x82E7, + 16166: 0x83F9, + 16167: 0x8457, + 16168: 0x85F7, + 16169: 0x8A5B, + 16170: 0x8CAF, + 16171: 0x8E87, + 16172: 0x9019, + 16173: 0x90B8, + 16174: 0x96CE, + 16175: 0x9F5F, + 16176: 0x52E3, + 16177: 0x540A, + 16178: 0x5AE1, + 16179: 0x5BC2, + 16180: 0x6458, + 16181: 0x6575, + 16182: 0x6EF4, + 16183: 0x72C4, + 16184: 0xF9FB, + 16185: 0x7684, + 16186: 0x7A4D, + 16187: 0x7B1B, + 16188: 0x7C4D, + 16189: 0x7E3E, + 16190: 0x7FDF, + 16191: 0x837B, + 16192: 0x8B2B, + 16193: 0x8CCA, + 16194: 0x8D64, + 16195: 0x8DE1, + 16196: 0x8E5F, + 16197: 0x8FEA, + 16198: 0x8FF9, + 16199: 0x9069, + 16200: 0x93D1, + 16201: 0x4F43, + 16202: 0x4F7A, + 16203: 0x50B3, + 16204: 0x5168, + 16205: 0x5178, + 16206: 0x524D, + 16207: 0x526A, + 16208: 0x5861, + 16209: 0x587C, + 16210: 0x5960, + 16211: 0x5C08, + 16212: 0x5C55, + 16213: 0x5EDB, + 16214: 0x609B, + 16215: 0x6230, + 16216: 0x6813, + 16217: 0x6BBF, + 16218: 0x6C08, + 16219: 0x6FB1, + 16220: 0x714E, + 16221: 0x7420, + 16222: 0x7530, + 16223: 0x7538, + 16224: 0x7551, + 16225: 0x7672, + 16226: 0x7B4C, + 16227: 0x7B8B, + 16228: 0x7BAD, + 16229: 0x7BC6, + 16230: 0x7E8F, + 16231: 0x8A6E, + 16232: 0x8F3E, + 16233: 0x8F49, + 16234: 0x923F, + 16235: 0x9293, + 16236: 0x9322, + 16237: 0x942B, + 16238: 0x96FB, + 16239: 0x985A, + 16240: 0x986B, + 16241: 0x991E, + 16242: 0x5207, + 16243: 0x622A, + 16244: 0x6298, + 16245: 0x6D59, + 16246: 0x7664, + 16247: 0x7ACA, + 16248: 0x7BC0, + 16249: 0x7D76, + 16250: 0x5360, + 16251: 0x5CBE, + 16252: 0x5E97, + 16253: 0x6F38, + 16254: 0x70B9, + 16255: 0x7C98, + 16256: 0x9711, + 16257: 0x9B8E, + 16258: 0x9EDE, + 16259: 0x63A5, + 16260: 0x647A, + 16261: 0x8776, + 16262: 0x4E01, + 16263: 0x4E95, + 16264: 0x4EAD, + 16265: 0x505C, + 16266: 0x5075, + 16267: 0x5448, + 16268: 0x59C3, + 16269: 0x5B9A, + 16270: 0x5E40, + 16271: 0x5EAD, + 16272: 0x5EF7, + 16273: 0x5F81, + 16274: 0x60C5, + 16275: 0x633A, + 16276: 0x653F, + 16277: 0x6574, + 16278: 0x65CC, + 16279: 0x6676, + 16280: 0x6678, + 16281: 0x67FE, + 16282: 0x6968, + 16283: 0x6A89, + 16284: 0x6B63, + 16285: 0x6C40, + 16286: 0x6DC0, + 16287: 0x6DE8, + 16288: 0x6E1F, + 16289: 0x6E5E, + 16290: 0x701E, + 16291: 0x70A1, + 16292: 0x738E, + 16293: 0x73FD, + 16294: 0x753A, + 16295: 0x775B, + 16296: 0x7887, + 16297: 0x798E, + 16298: 0x7A0B, + 16299: 0x7A7D, + 16300: 0x7CBE, + 16301: 0x7D8E, + 16302: 0x8247, + 16303: 0x8A02, + 16304: 0x8AEA, + 16305: 0x8C9E, + 16306: 0x912D, + 16307: 0x914A, + 16308: 0x91D8, + 16309: 0x9266, + 16310: 0x92CC, + 16311: 0x9320, + 16312: 0x9706, + 16313: 0x9756, + 16314: 0x975C, + 16315: 0x9802, + 16316: 0x9F0E, + 16317: 0x5236, + 16318: 0x5291, + 16319: 0x557C, + 16320: 0x5824, + 16321: 0x5E1D, + 16322: 0x5F1F, + 16323: 0x608C, + 16324: 0x63D0, + 16325: 0x68AF, + 16326: 0x6FDF, + 16327: 0x796D, + 16328: 0x7B2C, + 16329: 0x81CD, + 16330: 0x85BA, + 16331: 0x88FD, + 16332: 0x8AF8, + 16333: 0x8E44, + 16334: 0x918D, + 16335: 0x9664, + 16336: 0x969B, + 16337: 0x973D, + 16338: 0x984C, + 16339: 0x9F4A, + 16340: 0x4FCE, + 16341: 0x5146, + 16342: 0x51CB, + 16343: 0x52A9, + 16344: 0x5632, + 16345: 0x5F14, + 16346: 0x5F6B, + 16347: 0x63AA, + 16348: 0x64CD, + 16349: 0x65E9, + 16350: 0x6641, + 16351: 0x66FA, + 16352: 0x66F9, + 16353: 0x671D, + 16354: 0x689D, + 16355: 0x68D7, + 16356: 0x69FD, + 16357: 0x6F15, + 16358: 0x6F6E, + 16359: 0x7167, + 16360: 0x71E5, + 16361: 0x722A, + 16362: 0x74AA, + 16363: 0x773A, + 16364: 0x7956, + 16365: 0x795A, + 16366: 0x79DF, + 16367: 0x7A20, + 16368: 0x7A95, + 16369: 0x7C97, + 16370: 0x7CDF, + 16371: 0x7D44, + 16372: 0x7E70, + 16373: 0x8087, + 16374: 0x85FB, + 16375: 0x86A4, + 16376: 0x8A54, + 16377: 0x8ABF, + 16378: 0x8D99, + 16379: 0x8E81, + 16380: 0x9020, + 16381: 0x906D, + 16382: 0x91E3, + 16383: 0x963B, + 16384: 0x96D5, + 16385: 0x9CE5, + 16386: 0x65CF, + 16387: 0x7C07, + 16388: 0x8DB3, + 16389: 0x93C3, + 16390: 0x5B58, + 16391: 0x5C0A, + 16392: 0x5352, + 16393: 0x62D9, + 16394: 0x731D, + 16395: 0x5027, + 16396: 0x5B97, + 16397: 0x5F9E, + 16398: 0x60B0, + 16399: 0x616B, + 16400: 0x68D5, + 16401: 0x6DD9, + 16402: 0x742E, + 16403: 0x7A2E, + 16404: 0x7D42, + 16405: 0x7D9C, + 16406: 0x7E31, + 16407: 0x816B, + 16408: 0x8E2A, + 16409: 0x8E35, + 16410: 0x937E, + 16411: 0x9418, + 16412: 0x4F50, + 16413: 0x5750, + 16414: 0x5DE6, + 16415: 0x5EA7, + 16416: 0x632B, + 16417: 0x7F6A, + 16418: 0x4E3B, + 16419: 0x4F4F, + 16420: 0x4F8F, + 16421: 0x505A, + 16422: 0x59DD, + 16423: 0x80C4, + 16424: 0x546A, + 16425: 0x5468, + 16426: 0x55FE, + 16427: 0x594F, + 16428: 0x5B99, + 16429: 0x5DDE, + 16430: 0x5EDA, + 16431: 0x665D, + 16432: 0x6731, + 16433: 0x67F1, + 16434: 0x682A, + 16435: 0x6CE8, + 16436: 0x6D32, + 16437: 0x6E4A, + 16438: 0x6F8D, + 16439: 0x70B7, + 16440: 0x73E0, + 16441: 0x7587, + 16442: 0x7C4C, + 16443: 0x7D02, + 16444: 0x7D2C, + 16445: 0x7DA2, + 16446: 0x821F, + 16447: 0x86DB, + 16448: 0x8A3B, + 16449: 0x8A85, + 16450: 0x8D70, + 16451: 0x8E8A, + 16452: 0x8F33, + 16453: 0x9031, + 16454: 0x914E, + 16455: 0x9152, + 16456: 0x9444, + 16457: 0x99D0, + 16458: 0x7AF9, + 16459: 0x7CA5, + 16460: 0x4FCA, + 16461: 0x5101, + 16462: 0x51C6, + 16463: 0x57C8, + 16464: 0x5BEF, + 16465: 0x5CFB, + 16466: 0x6659, + 16467: 0x6A3D, + 16468: 0x6D5A, + 16469: 0x6E96, + 16470: 0x6FEC, + 16471: 0x710C, + 16472: 0x756F, + 16473: 0x7AE3, + 16474: 0x8822, + 16475: 0x9021, + 16476: 0x9075, + 16477: 0x96CB, + 16478: 0x99FF, + 16479: 0x8301, + 16480: 0x4E2D, + 16481: 0x4EF2, + 16482: 0x8846, + 16483: 0x91CD, + 16484: 0x537D, + 16485: 0x6ADB, + 16486: 0x696B, + 16487: 0x6C41, + 16488: 0x847A, + 16489: 0x589E, + 16490: 0x618E, + 16491: 0x66FE, + 16492: 0x62EF, + 16493: 0x70DD, + 16494: 0x7511, + 16495: 0x75C7, + 16496: 0x7E52, + 16497: 0x84B8, + 16498: 0x8B49, + 16499: 0x8D08, + 16500: 0x4E4B, + 16501: 0x53EA, + 16502: 0x54AB, + 16503: 0x5730, + 16504: 0x5740, + 16505: 0x5FD7, + 16506: 0x6301, + 16507: 0x6307, + 16508: 0x646F, + 16509: 0x652F, + 16510: 0x65E8, + 16511: 0x667A, + 16512: 0x679D, + 16513: 0x67B3, + 16514: 0x6B62, + 16515: 0x6C60, + 16516: 0x6C9A, + 16517: 0x6F2C, + 16518: 0x77E5, + 16519: 0x7825, + 16520: 0x7949, + 16521: 0x7957, + 16522: 0x7D19, + 16523: 0x80A2, + 16524: 0x8102, + 16525: 0x81F3, + 16526: 0x829D, + 16527: 0x82B7, + 16528: 0x8718, + 16529: 0x8A8C, + 16530: 0xF9FC, + 16531: 0x8D04, + 16532: 0x8DBE, + 16533: 0x9072, + 16534: 0x76F4, + 16535: 0x7A19, + 16536: 0x7A37, + 16537: 0x7E54, + 16538: 0x8077, + 16539: 0x5507, + 16540: 0x55D4, + 16541: 0x5875, + 16542: 0x632F, + 16543: 0x6422, + 16544: 0x6649, + 16545: 0x664B, + 16546: 0x686D, + 16547: 0x699B, + 16548: 0x6B84, + 16549: 0x6D25, + 16550: 0x6EB1, + 16551: 0x73CD, + 16552: 0x7468, + 16553: 0x74A1, + 16554: 0x755B, + 16555: 0x75B9, + 16556: 0x76E1, + 16557: 0x771E, + 16558: 0x778B, + 16559: 0x79E6, + 16560: 0x7E09, + 16561: 0x7E1D, + 16562: 0x81FB, + 16563: 0x852F, + 16564: 0x8897, + 16565: 0x8A3A, + 16566: 0x8CD1, + 16567: 0x8EEB, + 16568: 0x8FB0, + 16569: 0x9032, + 16570: 0x93AD, + 16571: 0x9663, + 16572: 0x9673, + 16573: 0x9707, + 16574: 0x4F84, + 16575: 0x53F1, + 16576: 0x59EA, + 16577: 0x5AC9, + 16578: 0x5E19, + 16579: 0x684E, + 16580: 0x74C6, + 16581: 0x75BE, + 16582: 0x79E9, + 16583: 0x7A92, + 16584: 0x81A3, + 16585: 0x86ED, + 16586: 0x8CEA, + 16587: 0x8DCC, + 16588: 0x8FED, + 16589: 0x659F, + 16590: 0x6715, + 16591: 0xF9FD, + 16592: 0x57F7, + 16593: 0x6F57, + 16594: 0x7DDD, + 16595: 0x8F2F, + 16596: 0x93F6, + 16597: 0x96C6, + 16598: 0x5FB5, + 16599: 0x61F2, + 16600: 0x6F84, + 16601: 0x4E14, + 16602: 0x4F98, + 16603: 0x501F, + 16604: 0x53C9, + 16605: 0x55DF, + 16606: 0x5D6F, + 16607: 0x5DEE, + 16608: 0x6B21, + 16609: 0x6B64, + 16610: 0x78CB, + 16611: 0x7B9A, + 16612: 0xF9FE, + 16613: 0x8E49, + 16614: 0x8ECA, + 16615: 0x906E, + 16616: 0x6349, + 16617: 0x643E, + 16618: 0x7740, + 16619: 0x7A84, + 16620: 0x932F, + 16621: 0x947F, + 16622: 0x9F6A, + 16623: 0x64B0, + 16624: 0x6FAF, + 16625: 0x71E6, + 16626: 0x74A8, + 16627: 0x74DA, + 16628: 0x7AC4, + 16629: 0x7C12, + 16630: 0x7E82, + 16631: 0x7CB2, + 16632: 0x7E98, + 16633: 0x8B9A, + 16634: 0x8D0A, + 16635: 0x947D, + 16636: 0x9910, + 16637: 0x994C, + 16638: 0x5239, + 16639: 0x5BDF, + 16640: 0x64E6, + 16641: 0x672D, + 16642: 0x7D2E, + 16643: 0x50ED, + 16644: 0x53C3, + 16645: 0x5879, + 16646: 0x6158, + 16647: 0x6159, + 16648: 0x61FA, + 16649: 0x65AC, + 16650: 0x7AD9, + 16651: 0x8B92, + 16652: 0x8B96, + 16653: 0x5009, + 16654: 0x5021, + 16655: 0x5275, + 16656: 0x5531, + 16657: 0x5A3C, + 16658: 0x5EE0, + 16659: 0x5F70, + 16660: 0x6134, + 16661: 0x655E, + 16662: 0x660C, + 16663: 0x6636, + 16664: 0x66A2, + 16665: 0x69CD, + 16666: 0x6EC4, + 16667: 0x6F32, + 16668: 0x7316, + 16669: 0x7621, + 16670: 0x7A93, + 16671: 0x8139, + 16672: 0x8259, + 16673: 0x83D6, + 16674: 0x84BC, + 16675: 0x50B5, + 16676: 0x57F0, + 16677: 0x5BC0, + 16678: 0x5BE8, + 16679: 0x5F69, + 16680: 0x63A1, + 16681: 0x7826, + 16682: 0x7DB5, + 16683: 0x83DC, + 16684: 0x8521, + 16685: 0x91C7, + 16686: 0x91F5, + 16687: 0x518A, + 16688: 0x67F5, + 16689: 0x7B56, + 16690: 0x8CAC, + 16691: 0x51C4, + 16692: 0x59BB, + 16693: 0x60BD, + 16694: 0x8655, + 16695: 0x501C, + 16696: 0xF9FF, + 16697: 0x5254, + 16698: 0x5C3A, + 16699: 0x617D, + 16700: 0x621A, + 16701: 0x62D3, + 16702: 0x64F2, + 16703: 0x65A5, + 16704: 0x6ECC, + 16705: 0x7620, + 16706: 0x810A, + 16707: 0x8E60, + 16708: 0x965F, + 16709: 0x96BB, + 16710: 0x4EDF, + 16711: 0x5343, + 16712: 0x5598, + 16713: 0x5929, + 16714: 0x5DDD, + 16715: 0x64C5, + 16716: 0x6CC9, + 16717: 0x6DFA, + 16718: 0x7394, + 16719: 0x7A7F, + 16720: 0x821B, + 16721: 0x85A6, + 16722: 0x8CE4, + 16723: 0x8E10, + 16724: 0x9077, + 16725: 0x91E7, + 16726: 0x95E1, + 16727: 0x9621, + 16728: 0x97C6, + 16729: 0x51F8, + 16730: 0x54F2, + 16731: 0x5586, + 16732: 0x5FB9, + 16733: 0x64A4, + 16734: 0x6F88, + 16735: 0x7DB4, + 16736: 0x8F1F, + 16737: 0x8F4D, + 16738: 0x9435, + 16739: 0x50C9, + 16740: 0x5C16, + 16741: 0x6CBE, + 16742: 0x6DFB, + 16743: 0x751B, + 16744: 0x77BB, + 16745: 0x7C3D, + 16746: 0x7C64, + 16747: 0x8A79, + 16748: 0x8AC2, + 16749: 0x581E, + 16750: 0x59BE, + 16751: 0x5E16, + 16752: 0x6377, + 16753: 0x7252, + 16754: 0x758A, + 16755: 0x776B, + 16756: 0x8ADC, + 16757: 0x8CBC, + 16758: 0x8F12, + 16759: 0x5EF3, + 16760: 0x6674, + 16761: 0x6DF8, + 16762: 0x807D, + 16763: 0x83C1, + 16764: 0x8ACB, + 16765: 0x9751, + 16766: 0x9BD6, + 16767: 0xFA00, + 16768: 0x5243, + 16769: 0x66FF, + 16770: 0x6D95, + 16771: 0x6EEF, + 16772: 0x7DE0, + 16773: 0x8AE6, + 16774: 0x902E, + 16775: 0x905E, + 16776: 0x9AD4, + 16777: 0x521D, + 16778: 0x527F, + 16779: 0x54E8, + 16780: 0x6194, + 16781: 0x6284, + 16782: 0x62DB, + 16783: 0x68A2, + 16784: 0x6912, + 16785: 0x695A, + 16786: 0x6A35, + 16787: 0x7092, + 16788: 0x7126, + 16789: 0x785D, + 16790: 0x7901, + 16791: 0x790E, + 16792: 0x79D2, + 16793: 0x7A0D, + 16794: 0x8096, + 16795: 0x8278, + 16796: 0x82D5, + 16797: 0x8349, + 16798: 0x8549, + 16799: 0x8C82, + 16800: 0x8D85, + 16801: 0x9162, + 16802: 0x918B, + 16803: 0x91AE, + 16804: 0x4FC3, + 16805: 0x56D1, + 16806: 0x71ED, + 16807: 0x77D7, + 16808: 0x8700, + 16809: 0x89F8, + 16810: 0x5BF8, + 16811: 0x5FD6, + 16812: 0x6751, + 16813: 0x90A8, + 16814: 0x53E2, + 16815: 0x585A, + 16816: 0x5BF5, + 16817: 0x60A4, + 16818: 0x6181, + 16819: 0x6460, + 16820: 0x7E3D, + 16821: 0x8070, + 16822: 0x8525, + 16823: 0x9283, + 16824: 0x64AE, + 16825: 0x50AC, + 16826: 0x5D14, + 16827: 0x6700, + 16828: 0x589C, + 16829: 0x62BD, + 16830: 0x63A8, + 16831: 0x690E, + 16832: 0x6978, + 16833: 0x6A1E, + 16834: 0x6E6B, + 16835: 0x76BA, + 16836: 0x79CB, + 16837: 0x82BB, + 16838: 0x8429, + 16839: 0x8ACF, + 16840: 0x8DA8, + 16841: 0x8FFD, + 16842: 0x9112, + 16843: 0x914B, + 16844: 0x919C, + 16845: 0x9310, + 16846: 0x9318, + 16847: 0x939A, + 16848: 0x96DB, + 16849: 0x9A36, + 16850: 0x9C0D, + 16851: 0x4E11, + 16852: 0x755C, + 16853: 0x795D, + 16854: 0x7AFA, + 16855: 0x7B51, + 16856: 0x7BC9, + 16857: 0x7E2E, + 16858: 0x84C4, + 16859: 0x8E59, + 16860: 0x8E74, + 16861: 0x8EF8, + 16862: 0x9010, + 16863: 0x6625, + 16864: 0x693F, + 16865: 0x7443, + 16866: 0x51FA, + 16867: 0x672E, + 16868: 0x9EDC, + 16869: 0x5145, + 16870: 0x5FE0, + 16871: 0x6C96, + 16872: 0x87F2, + 16873: 0x885D, + 16874: 0x8877, + 16875: 0x60B4, + 16876: 0x81B5, + 16877: 0x8403, + 16878: 0x8D05, + 16879: 0x53D6, + 16880: 0x5439, + 16881: 0x5634, + 16882: 0x5A36, + 16883: 0x5C31, + 16884: 0x708A, + 16885: 0x7FE0, + 16886: 0x805A, + 16887: 0x8106, + 16888: 0x81ED, + 16889: 0x8DA3, + 16890: 0x9189, + 16891: 0x9A5F, + 16892: 0x9DF2, + 16893: 0x5074, + 16894: 0x4EC4, + 16895: 0x53A0, + 16896: 0x60FB, + 16897: 0x6E2C, + 16898: 0x5C64, + 16899: 0x4F88, + 16900: 0x5024, + 16901: 0x55E4, + 16902: 0x5CD9, + 16903: 0x5E5F, + 16904: 0x6065, + 16905: 0x6894, + 16906: 0x6CBB, + 16907: 0x6DC4, + 16908: 0x71BE, + 16909: 0x75D4, + 16910: 0x75F4, + 16911: 0x7661, + 16912: 0x7A1A, + 16913: 0x7A49, + 16914: 0x7DC7, + 16915: 0x7DFB, + 16916: 0x7F6E, + 16917: 0x81F4, + 16918: 0x86A9, + 16919: 0x8F1C, + 16920: 0x96C9, + 16921: 0x99B3, + 16922: 0x9F52, + 16923: 0x5247, + 16924: 0x52C5, + 16925: 0x98ED, + 16926: 0x89AA, + 16927: 0x4E03, + 16928: 0x67D2, + 16929: 0x6F06, + 16930: 0x4FB5, + 16931: 0x5BE2, + 16932: 0x6795, + 16933: 0x6C88, + 16934: 0x6D78, + 16935: 0x741B, + 16936: 0x7827, + 16937: 0x91DD, + 16938: 0x937C, + 16939: 0x87C4, + 16940: 0x79E4, + 16941: 0x7A31, + 16942: 0x5FEB, + 16943: 0x4ED6, + 16944: 0x54A4, + 16945: 0x553E, + 16946: 0x58AE, + 16947: 0x59A5, + 16948: 0x60F0, + 16949: 0x6253, + 16950: 0x62D6, + 16951: 0x6736, + 16952: 0x6955, + 16953: 0x8235, + 16954: 0x9640, + 16955: 0x99B1, + 16956: 0x99DD, + 16957: 0x502C, + 16958: 0x5353, + 16959: 0x5544, + 16960: 0x577C, + 16961: 0xFA01, + 16962: 0x6258, + 16963: 0xFA02, + 16964: 0x64E2, + 16965: 0x666B, + 16966: 0x67DD, + 16967: 0x6FC1, + 16968: 0x6FEF, + 16969: 0x7422, + 16970: 0x7438, + 16971: 0x8A17, + 16972: 0x9438, + 16973: 0x5451, + 16974: 0x5606, + 16975: 0x5766, + 16976: 0x5F48, + 16977: 0x619A, + 16978: 0x6B4E, + 16979: 0x7058, + 16980: 0x70AD, + 16981: 0x7DBB, + 16982: 0x8A95, + 16983: 0x596A, + 16984: 0x812B, + 16985: 0x63A2, + 16986: 0x7708, + 16987: 0x803D, + 16988: 0x8CAA, + 16989: 0x5854, + 16990: 0x642D, + 16991: 0x69BB, + 16992: 0x5B95, + 16993: 0x5E11, + 16994: 0x6E6F, + 16995: 0xFA03, + 16996: 0x8569, + 16997: 0x514C, + 16998: 0x53F0, + 16999: 0x592A, + 17000: 0x6020, + 17001: 0x614B, + 17002: 0x6B86, + 17003: 0x6C70, + 17004: 0x6CF0, + 17005: 0x7B1E, + 17006: 0x80CE, + 17007: 0x82D4, + 17008: 0x8DC6, + 17009: 0x90B0, + 17010: 0x98B1, + 17011: 0xFA04, + 17012: 0x64C7, + 17013: 0x6FA4, + 17014: 0x6491, + 17015: 0x6504, + 17016: 0x514E, + 17017: 0x5410, + 17018: 0x571F, + 17019: 0x8A0E, + 17020: 0x615F, + 17021: 0x6876, + 17022: 0xFA05, + 17023: 0x75DB, + 17024: 0x7B52, + 17025: 0x7D71, + 17026: 0x901A, + 17027: 0x5806, + 17028: 0x69CC, + 17029: 0x817F, + 17030: 0x892A, + 17031: 0x9000, + 17032: 0x9839, + 17033: 0x5078, + 17034: 0x5957, + 17035: 0x59AC, + 17036: 0x6295, + 17037: 0x900F, + 17038: 0x9B2A, + 17039: 0x615D, + 17040: 0x7279, + 17041: 0x95D6, + 17042: 0x5761, + 17043: 0x5A46, + 17044: 0x5DF4, + 17045: 0x628A, + 17046: 0x64AD, + 17047: 0x64FA, + 17048: 0x6777, + 17049: 0x6CE2, + 17050: 0x6D3E, + 17051: 0x722C, + 17052: 0x7436, + 17053: 0x7834, + 17054: 0x7F77, + 17055: 0x82AD, + 17056: 0x8DDB, + 17057: 0x9817, + 17058: 0x5224, + 17059: 0x5742, + 17060: 0x677F, + 17061: 0x7248, + 17062: 0x74E3, + 17063: 0x8CA9, + 17064: 0x8FA6, + 17065: 0x9211, + 17066: 0x962A, + 17067: 0x516B, + 17068: 0x53ED, + 17069: 0x634C, + 17070: 0x4F69, + 17071: 0x5504, + 17072: 0x6096, + 17073: 0x6557, + 17074: 0x6C9B, + 17075: 0x6D7F, + 17076: 0x724C, + 17077: 0x72FD, + 17078: 0x7A17, + 17079: 0x8987, + 17080: 0x8C9D, + 17081: 0x5F6D, + 17082: 0x6F8E, + 17083: 0x70F9, + 17084: 0x81A8, + 17085: 0x610E, + 17086: 0x4FBF, + 17087: 0x504F, + 17088: 0x6241, + 17089: 0x7247, + 17090: 0x7BC7, + 17091: 0x7DE8, + 17092: 0x7FE9, + 17093: 0x904D, + 17094: 0x97AD, + 17095: 0x9A19, + 17096: 0x8CB6, + 17097: 0x576A, + 17098: 0x5E73, + 17099: 0x67B0, + 17100: 0x840D, + 17101: 0x8A55, + 17102: 0x5420, + 17103: 0x5B16, + 17104: 0x5E63, + 17105: 0x5EE2, + 17106: 0x5F0A, + 17107: 0x6583, + 17108: 0x80BA, + 17109: 0x853D, + 17110: 0x9589, + 17111: 0x965B, + 17112: 0x4F48, + 17113: 0x5305, + 17114: 0x530D, + 17115: 0x530F, + 17116: 0x5486, + 17117: 0x54FA, + 17118: 0x5703, + 17119: 0x5E03, + 17120: 0x6016, + 17121: 0x629B, + 17122: 0x62B1, + 17123: 0x6355, + 17124: 0xFA06, + 17125: 0x6CE1, + 17126: 0x6D66, + 17127: 0x75B1, + 17128: 0x7832, + 17129: 0x80DE, + 17130: 0x812F, + 17131: 0x82DE, + 17132: 0x8461, + 17133: 0x84B2, + 17134: 0x888D, + 17135: 0x8912, + 17136: 0x900B, + 17137: 0x92EA, + 17138: 0x98FD, + 17139: 0x9B91, + 17140: 0x5E45, + 17141: 0x66B4, + 17142: 0x66DD, + 17143: 0x7011, + 17144: 0x7206, + 17145: 0xFA07, + 17146: 0x4FF5, + 17147: 0x527D, + 17148: 0x5F6A, + 17149: 0x6153, + 17150: 0x6753, + 17151: 0x6A19, + 17152: 0x6F02, + 17153: 0x74E2, + 17154: 0x7968, + 17155: 0x8868, + 17156: 0x8C79, + 17157: 0x98C7, + 17158: 0x98C4, + 17159: 0x9A43, + 17160: 0x54C1, + 17161: 0x7A1F, + 17162: 0x6953, + 17163: 0x8AF7, + 17164: 0x8C4A, + 17165: 0x98A8, + 17166: 0x99AE, + 17167: 0x5F7C, + 17168: 0x62AB, + 17169: 0x75B2, + 17170: 0x76AE, + 17171: 0x88AB, + 17172: 0x907F, + 17173: 0x9642, + 17174: 0x5339, + 17175: 0x5F3C, + 17176: 0x5FC5, + 17177: 0x6CCC, + 17178: 0x73CC, + 17179: 0x7562, + 17180: 0x758B, + 17181: 0x7B46, + 17182: 0x82FE, + 17183: 0x999D, + 17184: 0x4E4F, + 17185: 0x903C, + 17186: 0x4E0B, + 17187: 0x4F55, + 17188: 0x53A6, + 17189: 0x590F, + 17190: 0x5EC8, + 17191: 0x6630, + 17192: 0x6CB3, + 17193: 0x7455, + 17194: 0x8377, + 17195: 0x8766, + 17196: 0x8CC0, + 17197: 0x9050, + 17198: 0x971E, + 17199: 0x9C15, + 17200: 0x58D1, + 17201: 0x5B78, + 17202: 0x8650, + 17203: 0x8B14, + 17204: 0x9DB4, + 17205: 0x5BD2, + 17206: 0x6068, + 17207: 0x608D, + 17208: 0x65F1, + 17209: 0x6C57, + 17210: 0x6F22, + 17211: 0x6FA3, + 17212: 0x701A, + 17213: 0x7F55, + 17214: 0x7FF0, + 17215: 0x9591, + 17216: 0x9592, + 17217: 0x9650, + 17218: 0x97D3, + 17219: 0x5272, + 17220: 0x8F44, + 17221: 0x51FD, + 17222: 0x542B, + 17223: 0x54B8, + 17224: 0x5563, + 17225: 0x558A, + 17226: 0x6ABB, + 17227: 0x6DB5, + 17228: 0x7DD8, + 17229: 0x8266, + 17230: 0x929C, + 17231: 0x9677, + 17232: 0x9E79, + 17233: 0x5408, + 17234: 0x54C8, + 17235: 0x76D2, + 17236: 0x86E4, + 17237: 0x95A4, + 17238: 0x95D4, + 17239: 0x965C, + 17240: 0x4EA2, + 17241: 0x4F09, + 17242: 0x59EE, + 17243: 0x5AE6, + 17244: 0x5DF7, + 17245: 0x6052, + 17246: 0x6297, + 17247: 0x676D, + 17248: 0x6841, + 17249: 0x6C86, + 17250: 0x6E2F, + 17251: 0x7F38, + 17252: 0x809B, + 17253: 0x822A, + 17254: 0xFA08, + 17255: 0xFA09, + 17256: 0x9805, + 17257: 0x4EA5, + 17258: 0x5055, + 17259: 0x54B3, + 17260: 0x5793, + 17261: 0x595A, + 17262: 0x5B69, + 17263: 0x5BB3, + 17264: 0x61C8, + 17265: 0x6977, + 17266: 0x6D77, + 17267: 0x7023, + 17268: 0x87F9, + 17269: 0x89E3, + 17270: 0x8A72, + 17271: 0x8AE7, + 17272: 0x9082, + 17273: 0x99ED, + 17274: 0x9AB8, + 17275: 0x52BE, + 17276: 0x6838, + 17277: 0x5016, + 17278: 0x5E78, + 17279: 0x674F, + 17280: 0x8347, + 17281: 0x884C, + 17282: 0x4EAB, + 17283: 0x5411, + 17284: 0x56AE, + 17285: 0x73E6, + 17286: 0x9115, + 17287: 0x97FF, + 17288: 0x9909, + 17289: 0x9957, + 17290: 0x9999, + 17291: 0x5653, + 17292: 0x589F, + 17293: 0x865B, + 17294: 0x8A31, + 17295: 0x61B2, + 17296: 0x6AF6, + 17297: 0x737B, + 17298: 0x8ED2, + 17299: 0x6B47, + 17300: 0x96AA, + 17301: 0x9A57, + 17302: 0x5955, + 17303: 0x7200, + 17304: 0x8D6B, + 17305: 0x9769, + 17306: 0x4FD4, + 17307: 0x5CF4, + 17308: 0x5F26, + 17309: 0x61F8, + 17310: 0x665B, + 17311: 0x6CEB, + 17312: 0x70AB, + 17313: 0x7384, + 17314: 0x73B9, + 17315: 0x73FE, + 17316: 0x7729, + 17317: 0x774D, + 17318: 0x7D43, + 17319: 0x7D62, + 17320: 0x7E23, + 17321: 0x8237, + 17322: 0x8852, + 17323: 0xFA0A, + 17324: 0x8CE2, + 17325: 0x9249, + 17326: 0x986F, + 17327: 0x5B51, + 17328: 0x7A74, + 17329: 0x8840, + 17330: 0x9801, + 17331: 0x5ACC, + 17332: 0x4FE0, + 17333: 0x5354, + 17334: 0x593E, + 17335: 0x5CFD, + 17336: 0x633E, + 17337: 0x6D79, + 17338: 0x72F9, + 17339: 0x8105, + 17340: 0x8107, + 17341: 0x83A2, + 17342: 0x92CF, + 17343: 0x9830, + 17344: 0x4EA8, + 17345: 0x5144, + 17346: 0x5211, + 17347: 0x578B, + 17348: 0x5F62, + 17349: 0x6CC2, + 17350: 0x6ECE, + 17351: 0x7005, + 17352: 0x7050, + 17353: 0x70AF, + 17354: 0x7192, + 17355: 0x73E9, + 17356: 0x7469, + 17357: 0x834A, + 17358: 0x87A2, + 17359: 0x8861, + 17360: 0x9008, + 17361: 0x90A2, + 17362: 0x93A3, + 17363: 0x99A8, + 17364: 0x516E, + 17365: 0x5F57, + 17366: 0x60E0, + 17367: 0x6167, + 17368: 0x66B3, + 17369: 0x8559, + 17370: 0x8E4A, + 17371: 0x91AF, + 17372: 0x978B, + 17373: 0x4E4E, + 17374: 0x4E92, + 17375: 0x547C, + 17376: 0x58D5, + 17377: 0x58FA, + 17378: 0x597D, + 17379: 0x5CB5, + 17380: 0x5F27, + 17381: 0x6236, + 17382: 0x6248, + 17383: 0x660A, + 17384: 0x6667, + 17385: 0x6BEB, + 17386: 0x6D69, + 17387: 0x6DCF, + 17388: 0x6E56, + 17389: 0x6EF8, + 17390: 0x6F94, + 17391: 0x6FE0, + 17392: 0x6FE9, + 17393: 0x705D, + 17394: 0x72D0, + 17395: 0x7425, + 17396: 0x745A, + 17397: 0x74E0, + 17398: 0x7693, + 17399: 0x795C, + 17400: 0x7CCA, + 17401: 0x7E1E, + 17402: 0x80E1, + 17403: 0x82A6, + 17404: 0x846B, + 17405: 0x84BF, + 17406: 0x864E, + 17407: 0x865F, + 17408: 0x8774, + 17409: 0x8B77, + 17410: 0x8C6A, + 17411: 0x93AC, + 17412: 0x9800, + 17413: 0x9865, + 17414: 0x60D1, + 17415: 0x6216, + 17416: 0x9177, + 17417: 0x5A5A, + 17418: 0x660F, + 17419: 0x6DF7, + 17420: 0x6E3E, + 17421: 0x743F, + 17422: 0x9B42, + 17423: 0x5FFD, + 17424: 0x60DA, + 17425: 0x7B0F, + 17426: 0x54C4, + 17427: 0x5F18, + 17428: 0x6C5E, + 17429: 0x6CD3, + 17430: 0x6D2A, + 17431: 0x70D8, + 17432: 0x7D05, + 17433: 0x8679, + 17434: 0x8A0C, + 17435: 0x9D3B, + 17436: 0x5316, + 17437: 0x548C, + 17438: 0x5B05, + 17439: 0x6A3A, + 17440: 0x706B, + 17441: 0x7575, + 17442: 0x798D, + 17443: 0x79BE, + 17444: 0x82B1, + 17445: 0x83EF, + 17446: 0x8A71, + 17447: 0x8B41, + 17448: 0x8CA8, + 17449: 0x9774, + 17450: 0xFA0B, + 17451: 0x64F4, + 17452: 0x652B, + 17453: 0x78BA, + 17454: 0x78BB, + 17455: 0x7A6B, + 17456: 0x4E38, + 17457: 0x559A, + 17458: 0x5950, + 17459: 0x5BA6, + 17460: 0x5E7B, + 17461: 0x60A3, + 17462: 0x63DB, + 17463: 0x6B61, + 17464: 0x6665, + 17465: 0x6853, + 17466: 0x6E19, + 17467: 0x7165, + 17468: 0x74B0, + 17469: 0x7D08, + 17470: 0x9084, + 17471: 0x9A69, + 17472: 0x9C25, + 17473: 0x6D3B, + 17474: 0x6ED1, + 17475: 0x733E, + 17476: 0x8C41, + 17477: 0x95CA, + 17478: 0x51F0, + 17479: 0x5E4C, + 17480: 0x5FA8, + 17481: 0x604D, + 17482: 0x60F6, + 17483: 0x6130, + 17484: 0x614C, + 17485: 0x6643, + 17486: 0x6644, + 17487: 0x69A5, + 17488: 0x6CC1, + 17489: 0x6E5F, + 17490: 0x6EC9, + 17491: 0x6F62, + 17492: 0x714C, + 17493: 0x749C, + 17494: 0x7687, + 17495: 0x7BC1, + 17496: 0x7C27, + 17497: 0x8352, + 17498: 0x8757, + 17499: 0x9051, + 17500: 0x968D, + 17501: 0x9EC3, + 17502: 0x532F, + 17503: 0x56DE, + 17504: 0x5EFB, + 17505: 0x5F8A, + 17506: 0x6062, + 17507: 0x6094, + 17508: 0x61F7, + 17509: 0x6666, + 17510: 0x6703, + 17511: 0x6A9C, + 17512: 0x6DEE, + 17513: 0x6FAE, + 17514: 0x7070, + 17515: 0x736A, + 17516: 0x7E6A, + 17517: 0x81BE, + 17518: 0x8334, + 17519: 0x86D4, + 17520: 0x8AA8, + 17521: 0x8CC4, + 17522: 0x5283, + 17523: 0x7372, + 17524: 0x5B96, + 17525: 0x6A6B, + 17526: 0x9404, + 17527: 0x54EE, + 17528: 0x5686, + 17529: 0x5B5D, + 17530: 0x6548, + 17531: 0x6585, + 17532: 0x66C9, + 17533: 0x689F, + 17534: 0x6D8D, + 17535: 0x6DC6, + 17536: 0x723B, + 17537: 0x80B4, + 17538: 0x9175, + 17539: 0x9A4D, + 17540: 0x4FAF, + 17541: 0x5019, + 17542: 0x539A, + 17543: 0x540E, + 17544: 0x543C, + 17545: 0x5589, + 17546: 0x55C5, + 17547: 0x5E3F, + 17548: 0x5F8C, + 17549: 0x673D, + 17550: 0x7166, + 17551: 0x73DD, + 17552: 0x9005, + 17553: 0x52DB, + 17554: 0x52F3, + 17555: 0x5864, + 17556: 0x58CE, + 17557: 0x7104, + 17558: 0x718F, + 17559: 0x71FB, + 17560: 0x85B0, + 17561: 0x8A13, + 17562: 0x6688, + 17563: 0x85A8, + 17564: 0x55A7, + 17565: 0x6684, + 17566: 0x714A, + 17567: 0x8431, + 17568: 0x5349, + 17569: 0x5599, + 17570: 0x6BC1, + 17571: 0x5F59, + 17572: 0x5FBD, + 17573: 0x63EE, + 17574: 0x6689, + 17575: 0x7147, + 17576: 0x8AF1, + 17577: 0x8F1D, + 17578: 0x9EBE, + 17579: 0x4F11, + 17580: 0x643A, + 17581: 0x70CB, + 17582: 0x7566, + 17583: 0x8667, + 17584: 0x6064, + 17585: 0x8B4E, + 17586: 0x9DF8, + 17587: 0x5147, + 17588: 0x51F6, + 17589: 0x5308, + 17590: 0x6D36, + 17591: 0x80F8, + 17592: 0x9ED1, + 17593: 0x6615, + 17594: 0x6B23, + 17595: 0x7098, + 17596: 0x75D5, + 17597: 0x5403, + 17598: 0x5C79, + 17599: 0x7D07, + 17600: 0x8A16, + 17601: 0x6B20, + 17602: 0x6B3D, + 17603: 0x6B46, + 17604: 0x5438, + 17605: 0x6070, + 17606: 0x6D3D, + 17607: 0x7FD5, + 17608: 0x8208, + 17609: 0x50D6, + 17610: 0x51DE, + 17611: 0x559C, + 17612: 0x566B, + 17613: 0x56CD, + 17614: 0x59EC, + 17615: 0x5B09, + 17616: 0x5E0C, + 17617: 0x6199, + 17618: 0x6198, + 17619: 0x6231, + 17620: 0x665E, + 17621: 0x66E6, + 17622: 0x7199, + 17623: 0x71B9, + 17624: 0x71BA, + 17625: 0x72A7, + 17626: 0x79A7, + 17627: 0x7A00, + 17628: 0x7FB2, + 17629: 0x8A70, +} + +const numEncodeTables = 7 + +// encodeX are the encoding tables from Unicode to EUC-KR code, +// sorted by decreasing length. +// encode0: 20893 entries for runes in [19968, 40861). +// encode1: 11172 entries for runes in [44032, 55204). +// encode2: 1625 entries for runes in [ 8213, 9838). +// encode3: 990 entries for runes in [12288, 13278). +// encode4: 945 entries for runes in [ 161, 1106). +// encode5: 268 entries for runes in [63744, 64012). +// encode6: 230 entries for runes in [65281, 65511). + +const encode0Low, encode0High = 19968, 40861 + +var encode0 = [...]uint16{ + 19968 - 19968: 0xECE9, + 19969 - 19968: 0xEFCB, + 19971 - 19968: 0xF6D2, + 19975 - 19968: 0xD8B2, + 19976 - 19968: 0xEDDB, + 19977 - 19968: 0xDFB2, + 19978 - 19968: 0xDFBE, + 19979 - 19968: 0xF9BB, + 19981 - 19968: 0xDCF4, + 19985 - 19968: 0xF5E4, + 19988 - 19968: 0xF3A6, + 19989 - 19968: 0xDDE0, + 19990 - 19968: 0xE1A6, + 19992 - 19968: 0xCEF8, + 19993 - 19968: 0xDCB0, + 19998 - 19968: 0xE3AA, + 20013 - 19968: 0xF1E9, + 20018 - 19968: 0xCDFA, + 20024 - 19968: 0xFCAF, + 20025 - 19968: 0xD3A1, + 20027 - 19968: 0xF1AB, + 20034 - 19968: 0xE7D1, + 20035 - 19968: 0xD2AC, + 20037 - 19968: 0xCEF9, + 20043 - 19968: 0xF1FD, + 20045 - 19968: 0xDEBF, + 20046 - 19968: 0xFBBA, + 20047 - 19968: 0xF9B9, + 20054 - 19968: 0xCED2, + 20056 - 19968: 0xE3AB, + 20057 - 19968: 0xEBE0, + 20061 - 19968: 0xCEFA, + 20062 - 19968: 0xCBF7, + 20063 - 19968: 0xE5A5, + 20075 - 19968: 0xCAE1, + 20077 - 19968: 0xD4CC, + 20083 - 19968: 0xEAE1, + 20086 - 19968: 0xDCE3, + 20087 - 19968: 0xDFAD, + 20094 - 19968: 0xCBEB, + 20098 - 19968: 0xD5AF, + 20102 - 19968: 0xD6F5, + 20104 - 19968: 0xE5F8, + 20107 - 19968: 0xDEC0, + 20108 - 19968: 0xECA3, + 20110 - 19968: 0xE9CD, + 20112 - 19968: 0xEAA7, + 20113 - 19968: 0xE9F6, + 20114 - 19968: 0xFBBB, + 20116 - 19968: 0xE7E9, + 20117 - 19968: 0xEFCC, + 20120 - 19968: 0xD0E6, + 20123 - 19968: 0xDEC1, + 20126 - 19968: 0xE4AC, + 20129 - 19968: 0xD8CC, + 20130 - 19968: 0xF9F1, + 20132 - 19968: 0xCEDF, + 20133 - 19968: 0xFAA4, + 20134 - 19968: 0xE6B2, + 20136 - 19968: 0xFAFB, + 20139 - 19968: 0xFABD, + 20140 - 19968: 0xCCC8, + 20141 - 19968: 0xEFCD, + 20142 - 19968: 0xD5D5, + 20150 - 19968: 0xD3A2, + 20154 - 19968: 0xECD1, + 20160 - 19968: 0xE4A7, + 20161 - 19968: 0xECD2, + 20164 - 19968: 0xF6B1, + 20167 - 19968: 0xCEFB, + 20170 - 19968: 0xD0D1, + 20171 - 19968: 0xCBBF, + 20173 - 19968: 0xEDA4, + 20180 - 19968: 0xEDA8, + 20181 - 19968: 0xDEC2, + 20182 - 19968: 0xF6E2, + 20183 - 19968: 0xEDDC, + 20184 - 19968: 0xDCF5, + 20185 - 19968: 0xE0B9, + 20189 - 19968: 0xD4CE, + 20191 - 19968: 0xF4B5, + 20195 - 19968: 0xD3DB, + 20196 - 19968: 0xD6B5, + 20197 - 19968: 0xECA4, + 20208 - 19968: 0xE4E6, + 20210 - 19968: 0xF1EA, + 20214 - 19968: 0xCBEC, + 20215 - 19968: 0xCBC0, + 20219 - 19968: 0xECF2, + 20225 - 19968: 0xD0EA, + 20233 - 19968: 0xF9F2, + 20234 - 19968: 0xECA5, + 20235 - 19968: 0xD0DF, + 20237 - 19968: 0xE7EA, + 20238 - 19968: 0xD0EB, + 20239 - 19968: 0xDCD1, + 20240 - 19968: 0xDBE9, + 20241 - 19968: 0xFDCC, + 20271 - 19968: 0xDBD7, + 20276 - 19968: 0xDAE1, + 20278 - 19968: 0xD6B6, + 20280 - 19968: 0xE3DF, + 20282 - 19968: 0xDEC3, + 20284 - 19968: 0xDEC4, + 20285 - 19968: 0xCAA1, + 20291 - 19968: 0xEEEC, + 20294 - 19968: 0xD3A3, + 20295 - 19968: 0xEEB7, + 20296 - 19968: 0xF8CF, + 20301 - 19968: 0xEAC8, + 20302 - 19968: 0xEEB8, + 20303 - 19968: 0xF1AC, + 20304 - 19968: 0xF1A5, + 20305 - 19968: 0xE9CE, + 20309 - 19968: 0xF9BC, + 20313 - 19968: 0xE5F9, + 20314 - 19968: 0xECEA, + 20315 - 19968: 0xDDD6, + 20316 - 19968: 0xEDC2, + 20329 - 19968: 0xF8A5, + 20335 - 19968: 0xE5BA, + 20336 - 19968: 0xDBD8, + 20339 - 19968: 0xCAA2, + 20342 - 19968: 0xD1CD, + 20346 - 19968: 0xEEED, + 20350 - 19968: 0xECEB, + 20351 - 19968: 0xDEC5, + 20353 - 19968: 0xE3E0, + 20355 - 19968: 0xCAC9, + 20356 - 19968: 0xF2E9, + 20358 - 19968: 0xD5CE, + 20360 - 19968: 0xF6B6, + 20362 - 19968: 0xCEC2, + 20363 - 19968: 0xD6C7, + 20365 - 19968: 0xE3B4, + 20367 - 19968: 0xF1AD, + 20369 - 19968: 0xEAE2, + 20374 - 19968: 0xD7C2, + 20376 - 19968: 0xF3A7, + 20379 - 19968: 0xCDEA, + 20381 - 19968: 0xEBEE, + 20398 - 19968: 0xD9B2, + 20399 - 19968: 0xFDA5, + 20405 - 19968: 0xF6D5, + 20406 - 19968: 0xD5E2, + 20415 - 19968: 0xF8B5, + 20418 - 19968: 0xCCF5, + 20419 - 19968: 0xF5B5, + 20420 - 19968: 0xE4AD, + 20425 - 19968: 0xE7EB, + 20426 - 19968: 0xF1D5, + 20430 - 19968: 0xF0BB, + 20433 - 19968: 0xE9B5, + 20435 - 19968: 0xCCC9, + 20436 - 19968: 0xFAD5, + 20439 - 19968: 0xE1D4, + 20442 - 19968: 0xD7D6, + 20445 - 19968: 0xDCC1, + 20447 - 19968: 0xDEC6, + 20448 - 19968: 0xFAEF, + 20449 - 19968: 0xE3E1, + 20462 - 19968: 0xE1F3, + 20463 - 19968: 0xDCF6, + 20465 - 19968: 0xCEFC, + 20467 - 19968: 0xDBC4, + 20469 - 19968: 0xF8F1, + 20472 - 19968: 0xDCE4, + 20474 - 19968: 0xE5EF, + 20482 - 19968: 0xDCB1, + 20486 - 19968: 0xD5D6, + 20489 - 19968: 0xF3DA, + 20491 - 19968: 0xCBC1, + 20493 - 19968: 0xDBC3, + 20497 - 19968: 0xD9FA, + 20498 - 19968: 0xD3EE, + 20502 - 19968: 0xFAB8, + 20505 - 19968: 0xFDA6, + 20506 - 19968: 0xEBEF, + 20508 - 19968: 0xF4A6, + 20510 - 19968: 0xCCCA, + 20511 - 19968: 0xF3A8, + 20513 - 19968: 0xF3DB, + 20515 - 19968: 0xDBA7, + 20516 - 19968: 0xF6B7, + 20518 - 19968: 0xCFE6, + 20519 - 19968: 0xF0F2, + 20520 - 19968: 0xCBDA, + 20522 - 19968: 0xE7D2, + 20523 - 19968: 0xD7C3, + 20524 - 19968: 0xF6F0, + 20525 - 19968: 0xE8DE, + 20539 - 19968: 0xE5A6, + 20547 - 19968: 0xE5E7, + 20551 - 19968: 0xCAA3, + 20552 - 19968: 0xCCA7, + 20553 - 19968: 0xEAC9, + 20559 - 19968: 0xF8B6, + 20565 - 19968: 0xFAA5, + 20570 - 19968: 0xF1AE, + 20572 - 19968: 0xEFCE, + 20581 - 19968: 0xCBED, + 20596 - 19968: 0xF6B0, + 20597 - 19968: 0xEFCF, + 20598 - 19968: 0xE9CF, + 20600 - 19968: 0xF7DE, + 20608 - 19968: 0xCED3, + 20613 - 19968: 0xDCF7, + 20621 - 19968: 0xDBA8, + 20625 - 19968: 0xCBF8, + 20632 - 19968: 0xDFA1, + 20633 - 19968: 0xDDE1, + 20652 - 19968: 0xF5CA, + 20653 - 19968: 0xE9B6, + 20658 - 19968: 0xE7EC, + 20659 - 19968: 0xEEEE, + 20661 - 19968: 0xF3F0, + 20663 - 19968: 0xDFBF, + 20670 - 19968: 0xCCCB, + 20677 - 19968: 0xD0C1, + 20681 - 19968: 0xF4D2, + 20682 - 19968: 0xE0BA, + 20687 - 19968: 0xDFC0, + 20689 - 19968: 0xCEE0, + 20693 - 19968: 0xDCD2, + 20694 - 19968: 0xFDEA, + 20698 - 19968: 0xD6F6, + 20702 - 19968: 0xEACA, + 20709 - 19968: 0xE8E9, + 20711 - 19968: 0xE3AC, + 20717 - 19968: 0xF3D0, + 20729 - 19968: 0xCAA4, + 20731 - 19968: 0xDBF8, + 20735 - 19968: 0xDEC7, + 20736 - 19968: 0xEBF0, + 20737 - 19968: 0xF1D6, + 20740 - 19968: 0xE5E2, + 20742 - 19968: 0xCCCC, + 20745 - 19968: 0xCBFB, + 20754 - 19968: 0xEAE3, + 20767 - 19968: 0xDFC1, + 20769 - 19968: 0xD6ED, + 20778 - 19968: 0xE9D0, + 20786 - 19968: 0xEEB9, + 20791 - 19968: 0xD5E3, + 20794 - 19968: 0xD1D3, + 20796 - 19968: 0xE5F0, + 20800 - 19968: 0xE8B4, + 20801 - 19968: 0xEBC3, + 20803 - 19968: 0xEAAA, + 20804 - 19968: 0xFAFC, + 20805 - 19968: 0xF5F6, + 20806 - 19968: 0xF0BC, + 20807 - 19968: 0xFDD4, + 20808 - 19968: 0xE0BB, + 20809 - 19968: 0xCEC3, + 20811 - 19968: 0xD0BA, + 20812 - 19968: 0xF7BA, + 20813 - 19968: 0xD8F3, + 20814 - 19968: 0xF7CD, + 20818 - 19968: 0xE4AE, + 20828 - 19968: 0xD4DF, + 20834 - 19968: 0xD0E7, + 20837 - 19968: 0xECFD, + 20839 - 19968: 0xD2AE, + 20840 - 19968: 0xEEEF, + 20841 - 19968: 0xD5D7, + 20842 - 19968: 0xEAE4, + 20843 - 19968: 0xF8A2, + 20844 - 19968: 0xCDEB, + 20845 - 19968: 0xD7BF, + 20846 - 19968: 0xFBB1, + 20849 - 19968: 0xCDEC, + 20853 - 19968: 0xDCB2, + 20854 - 19968: 0xD0EC, + 20855 - 19968: 0xCEFD, + 20856 - 19968: 0xEEF0, + 20860 - 19968: 0xCCC2, + 20864 - 19968: 0xD0ED, + 20870 - 19968: 0xE5F7, + 20874 - 19968: 0xF3FC, + 20877 - 19968: 0xEEA2, + 20882 - 19968: 0xD9B3, + 20885 - 19968: 0xD8F4, + 20887 - 19968: 0xE9B7, + 20896 - 19968: 0xCEAE, + 20901 - 19968: 0xD9A2, + 20906 - 19968: 0xD8F1, + 20908 - 19968: 0xD4CF, + 20918 - 19968: 0xE5A7, + 20919 - 19968: 0xD5D2, + 20925 - 19968: 0xD6A9, + 20932 - 19968: 0xF4A2, + 20934 - 19968: 0xF1D7, + 20937 - 19968: 0xD5D8, + 20939 - 19968: 0xF0BD, + 20940 - 19968: 0xD7D0, + 20941 - 19968: 0xD4D0, + 20956 - 19968: 0xD7CF, + 20957 - 19968: 0xEBEA, + 20958 - 19968: 0xFDEB, + 20961 - 19968: 0xDBED, + 20976 - 19968: 0xFCC5, + 20977 - 19968: 0xCBC2, + 20982 - 19968: 0xFDD5, + 20984 - 19968: 0xF4C8, + 20985 - 19968: 0xE8EA, + 20986 - 19968: 0xF5F3, + 20989 - 19968: 0xF9DE, + 20992 - 19968: 0xD3EF, + 20995 - 19968: 0xECD3, + 20998 - 19968: 0xDDC2, + 20999 - 19968: 0xEFB7, + 21000 - 19968: 0xE7D4, + 21002 - 19968: 0xCACA, + 21006 - 19968: 0xD9FB, + 21009 - 19968: 0xFAFD, + 21015 - 19968: 0xD6AA, + 21021 - 19968: 0xF4F8, + 21028 - 19968: 0xF7F7, + 21029 - 19968: 0xDCAC, + 21033 - 19968: 0xD7D7, + 21034 - 19968: 0xDFA2, + 21038 - 19968: 0xCEBE, + 21040 - 19968: 0xD3F0, + 21046 - 19968: 0xF0A4, + 21047 - 19968: 0xE1EC, + 21048 - 19968: 0xCFE7, + 21049 - 19968: 0xF3CB, + 21050 - 19968: 0xEDA9, + 21051 - 19968: 0xCABE, + 21059 - 19968: 0xF4EF, + 21063 - 19968: 0xF6CE, + 21066 - 19968: 0xDEFB, + 21067 - 19968: 0xD0BB, + 21068 - 19968: 0xD5B7, + 21069 - 19968: 0xEEF1, + 21076 - 19968: 0xF4A8, + 21078 - 19968: 0xDCF8, + 21083 - 19968: 0xCBA7, + 21085 - 19968: 0xDACE, + 21089 - 19968: 0xE0E6, + 21097 - 19968: 0xEDA5, + 21098 - 19968: 0xEEF2, + 21103 - 19968: 0xDCF9, + 21106 - 19968: 0xF9DC, + 21109 - 19968: 0xF3DC, + 21117 - 19968: 0xF8F2, + 21119 - 19968: 0xF4F9, + 21123 - 19968: 0xFCF1, + 21127 - 19968: 0xD0BC, + 21128 - 19968: 0xDBF9, + 21129 - 19968: 0xD7B1, + 21133 - 19968: 0xCBFC, + 21137 - 19968: 0xF0A5, + 21138 - 19968: 0xCBFD, + 21147 - 19968: 0xD5F4, + 21151 - 19968: 0xCDED, + 21152 - 19968: 0xCAA5, + 21155 - 19968: 0xD6AB, + 21156 - 19968: 0xD0C2, + 21161 - 19968: 0xF0BE, + 21162 - 19968: 0xD2BD, + 21163 - 19968: 0xCCA4, + 21182 - 19968: 0xFAB6, + 21185 - 19968: 0xCCCD, + 21187 - 19968: 0xDAFA, + 21189 - 19968: 0xF6CF, + 21191 - 19968: 0xE9B8, + 21193 - 19968: 0xD8F5, + 21197 - 19968: 0xCCCE, + 21202 - 19968: 0xD7CD, + 21205 - 19968: 0xD4D1, + 21206 - 19968: 0xE9ED, + 21208 - 19968: 0xCAEB, + 21209 - 19968: 0xD9E2, + 21211 - 19968: 0xFDB2, + 21213 - 19968: 0xE3AD, + 21214 - 19968: 0xD6CC, + 21215 - 19968: 0xD9B4, + 21218 - 19968: 0xE1A7, + 21219 - 19968: 0xEED3, + 21220 - 19968: 0xD0C3, + 21235 - 19968: 0xFDB3, + 21237 - 19968: 0xD5E4, + 21240 - 19968: 0xCFE8, + 21242 - 19968: 0xEDC3, + 21243 - 19968: 0xD0B2, + 21246 - 19968: 0xCEFE, + 21247 - 19968: 0xDAA8, + 21253 - 19968: 0xF8D0, + 21256 - 19968: 0xFDD6, + 21261 - 19968: 0xF8D1, + 21263 - 19968: 0xF8D2, + 21264 - 19968: 0xDCD3, + 21269 - 19968: 0xDDE2, + 21270 - 19968: 0xFBF9, + 21271 - 19968: 0xDDC1, + 21273 - 19968: 0xE3B5, + 21280 - 19968: 0xEDDD, + 21281 - 19968: 0xCEC4, + 21283 - 19968: 0xCBA1, + 21290 - 19968: 0xDDE3, + 21295 - 19968: 0xFCDD, + 21305 - 19968: 0xF9AF, + 21311 - 19968: 0xD2FB, + 21312 - 19968: 0xCFA1, + 21313 - 19968: 0xE4A8, + 21315 - 19968: 0xF4B6, + 21316 - 19968: 0xECFE, + 21319 - 19968: 0xE3AE, + 21320 - 19968: 0xE7ED, + 21321 - 19968: 0xFDC1, + 21322 - 19968: 0xDAE2, + 21325 - 19968: 0xD8B3, + 21329 - 19968: 0xDDE4, + 21330 - 19968: 0xF0EF, + 21331 - 19968: 0xF6F1, + 21332 - 19968: 0xFAF0, + 21335 - 19968: 0xD1F5, + 21338 - 19968: 0xDACF, + 21340 - 19968: 0xDCD4, + 21342 - 19968: 0xDCA6, + 21344 - 19968: 0xEFBF, + 21350 - 19968: 0xCECF, + 21352 - 19968: 0xE0D9, + 21359 - 19968: 0xD9D6, + 21360 - 19968: 0xECD4, + 21361 - 19968: 0xEACB, + 21364 - 19968: 0xCABF, + 21365 - 19968: 0xD5B0, + 21367 - 19968: 0xCFE9, + 21373 - 19968: 0xF1ED, + 21375 - 19968: 0xCCCF, + 21380 - 19968: 0xE4F8, + 21395 - 19968: 0xE4ED, + 21400 - 19968: 0xD7D8, + 21402 - 19968: 0xFDA7, + 21407 - 19968: 0xEAAB, + 21408 - 19968: 0xF6B2, + 21413 - 19968: 0xCFF0, + 21414 - 19968: 0xF9BD, + 21421 - 19968: 0xE6F4, + 21435 - 19968: 0xCBDB, + 21443 - 19968: 0xF3D1, + 21448 - 19968: 0xE9D1, + 21449 - 19968: 0xF3A9, + 21450 - 19968: 0xD0E0, + 21451 - 19968: 0xE9D2, + 21453 - 19968: 0xDAE3, + 21460 - 19968: 0xE2D2, + 21462 - 19968: 0xF6A2, + 21463 - 19968: 0xE1F4, + 21467 - 19968: 0xDAE4, + 21473 - 19968: 0xE7D5, + 21474 - 19968: 0xF5BF, + 21475 - 19968: 0xCFA2, + 21476 - 19968: 0xCDAF, + 21477 - 19968: 0xCFA3, + 21481 - 19968: 0xCDB0, + 21482 - 19968: 0xF1FE, + 21483 - 19968: 0xD0A3, + 21484 - 19968: 0xE1AF, + 21485 - 19968: 0xF8A3, + 21487 - 19968: 0xCAA6, + 21488 - 19968: 0xF7BB, + 21489 - 19968: 0xF2EA, + 21490 - 19968: 0xDEC8, + 21491 - 19968: 0xE9D3, + 21496 - 19968: 0xDEC9, + 21507 - 19968: 0xFDDE, + 21508 - 19968: 0xCAC0, + 21512 - 19968: 0xF9EA, + 21513 - 19968: 0xD1CE, + 21514 - 19968: 0xEED4, + 21516 - 19968: 0xD4D2, + 21517 - 19968: 0xD9A3, + 21518 - 19968: 0xFDA8, + 21519 - 19968: 0xD7D9, + 21520 - 19968: 0xF7CE, + 21521 - 19968: 0xFABE, + 21531 - 19968: 0xCFD6, + 21533 - 19968: 0xD7F0, + 21535 - 19968: 0xEBE1, + 21536 - 19968: 0xF8C5, + 21542 - 19968: 0xDCFA, + 21545 - 19968: 0xDDC3, + 21547 - 19968: 0xF9DF, + 21555 - 19968: 0xE7EF, + 21560 - 19968: 0xFDE5, + 21561 - 19968: 0xF6A3, + 21563 - 19968: 0xD9FC, + 21564 - 19968: 0xFDA9, + 21566 - 19968: 0xE7EE, + 21570 - 19968: 0xD5E5, + 21576 - 19968: 0xEFD0, + 21578 - 19968: 0xCDB1, + 21585 - 19968: 0xF7A2, + 21608 - 19968: 0xF1B2, + 21610 - 19968: 0xF1B1, + 21617 - 19968: 0xCDB2, + 21619 - 19968: 0xDAAB, + 21621 - 19968: 0xCAA7, + 21627 - 19968: 0xE3E2, + 21628 - 19968: 0xFBBC, + 21629 - 19968: 0xD9A4, + 21632 - 19968: 0xEEBA, + 21638 - 19968: 0xF8D3, + 21644 - 19968: 0xFBFA, + 21646 - 19968: 0xCFA4, + 21648 - 19968: 0xDCFB, + 21668 - 19968: 0xF6E3, + 21672 - 19968: 0xEDAA, + 21675 - 19968: 0xF2A1, + 21676 - 19968: 0xCEE1, + 21683 - 19968: 0xFAA6, + 21688 - 19968: 0xF9E0, + 21693 - 19968: 0xECD6, + 21696 - 19968: 0xE4EE, + 21697 - 19968: 0xF9A1, + 21700 - 19968: 0xFBEF, + 21704 - 19968: 0xF9EB, + 21705 - 19968: 0xEEA3, + 21729 - 19968: 0xEAAC, + 21733 - 19968: 0xCAA8, + 21736 - 19968: 0xF4FA, + 21741 - 19968: 0xCDD6, + 21742 - 19968: 0xFCF6, + 21746 - 19968: 0xF4C9, + 21754 - 19968: 0xF8D4, + 21764 - 19968: 0xF8A6, + 21766 - 19968: 0xDECA, + 21767 - 19968: 0xF2C6, + 21774 - 19968: 0xD7DA, + 21776 - 19968: 0xD3D0, + 21788 - 19968: 0xD8C5, + 21807 - 19968: 0xEAE6, + 21809 - 19968: 0xF3DD, + 21813 - 19968: 0xE4DA, + 21822 - 19968: 0xF6E4, + 21828 - 19968: 0xF6F2, + 21830 - 19968: 0xDFC2, + 21839 - 19968: 0xD9FD, + 21843 - 19968: 0xCCF6, + 21846 - 19968: 0xD3BA, + 21854 - 19968: 0xE4AF, + 21859 - 19968: 0xF9E1, + 21884 - 19968: 0xF0A6, + 21888 - 19968: 0xCBD3, + 21892 - 19968: 0xE0BC, + 21894 - 19968: 0xF4CA, + 21895 - 19968: 0xD4FA, + 21897 - 19968: 0xFDAA, + 21898 - 19968: 0xF9E2, + 21912 - 19968: 0xF4B7, + 21913 - 19968: 0xFDC2, + 21914 - 19968: 0xFCB0, + 21916 - 19968: 0xFDEC, + 21917 - 19968: 0xCAE2, + 21927 - 19968: 0xFDBD, + 21929 - 19968: 0xEAE7, + 21930 - 19968: 0xDFC3, + 21931 - 19968: 0xD1D2, + 21932 - 19968: 0xCEE2, + 21934 - 19968: 0xD3A4, + 21957 - 19968: 0xFDAB, + 21959 - 19968: 0xDFE0, + 21972 - 19968: 0xF2C7, + 21978 - 19968: 0xE7F0, + 21980 - 19968: 0xD0EE, + 21983 - 19968: 0xF3AA, + 21987 - 19968: 0xDECB, + 21988 - 19968: 0xF6B8, + 22013 - 19968: 0xE1F5, + 22014 - 19968: 0xF1B3, + 22022 - 19968: 0xF7A3, + 22025 - 19968: 0xCAA9, + 22036 - 19968: 0xCFA5, + 22039 - 19968: 0xDFC4, + 22063 - 19968: 0xE1B0, + 22066 - 19968: 0xF0BF, + 22068 - 19968: 0xF6A4, + 22070 - 19968: 0xE3B6, + 22099 - 19968: 0xFAC6, + 22120 - 19968: 0xD0EF, + 22123 - 19968: 0xFDED, + 22132 - 19968: 0xDDC4, + 22150 - 19968: 0xFCF7, + 22181 - 19968: 0xE6BF, + 22188 - 19968: 0xDEAD, + 22190 - 19968: 0xFABF, + 22196 - 19968: 0xE5F1, + 22204 - 19968: 0xEDC4, + 22218 - 19968: 0xD2A5, + 22221 - 19968: 0xFDEE, + 22225 - 19968: 0xF5B6, + 22234 - 19968: 0xE1F6, + 22235 - 19968: 0xDECC, + 22238 - 19968: 0xFCDE, + 22240 - 19968: 0xECD7, + 22256 - 19968: 0xCDDD, + 22265 - 19968: 0xD6B7, + 22266 - 19968: 0xCDB3, + 22275 - 19968: 0xF8D5, + 22276 - 19968: 0xE5D8, + 22280 - 19968: 0xCFEA, + 22283 - 19968: 0xCFD0, + 22285 - 19968: 0xEACC, + 22290 - 19968: 0xEAAE, + 22291 - 19968: 0xEAAD, + 22294 - 19968: 0xD3F1, + 22296 - 19968: 0xD3A5, + 22303 - 19968: 0xF7CF, + 22312 - 19968: 0xEEA4, + 22317 - 19968: 0xD0A4, + 22320 - 19968: 0xF2A2, + 22331 - 19968: 0xD0F0, + 22336 - 19968: 0xF2A3, + 22338 - 19968: 0xF7F8, + 22343 - 19968: 0xD0B3, + 22346 - 19968: 0xDBA9, + 22349 - 19968: 0xD3BB, + 22350 - 19968: 0xCAEC, + 22352 - 19968: 0xF1A6, + 22353 - 19968: 0xCBD5, + 22369 - 19968: 0xF7E7, + 22372 - 19968: 0xCDDE, + 22374 - 19968: 0xF7A4, + 22378 - 19968: 0xF8C0, + 22382 - 19968: 0xD3DD, + 22384 - 19968: 0xCCD0, + 22389 - 19968: 0xCFA6, + 22396 - 19968: 0xF6F3, + 22402 - 19968: 0xE1F7, + 22408 - 19968: 0xD3DC, + 22411 - 19968: 0xFAFE, + 22419 - 19968: 0xFAA7, + 22432 - 19968: 0xEBD9, + 22434 - 19968: 0xCFA7, + 22435 - 19968: 0xEAAF, + 22467 - 19968: 0xE4EF, + 22471 - 19968: 0xE9B9, + 22472 - 19968: 0xF1D8, + 22475 - 19968: 0xD8D8, + 22478 - 19968: 0xE0F2, + 22495 - 19968: 0xE6B4, + 22496 - 19968: 0xDCFC, + 22512 - 19968: 0xF3F1, + 22516 - 19968: 0xE3D0, + 22519 - 19968: 0xF2FB, + 22521 - 19968: 0xDBC6, + 22522 - 19968: 0xD0F1, + 22524 - 19968: 0xD0F2, + 22528 - 19968: 0xCFDC, + 22530 - 19968: 0xD3D1, + 22533 - 19968: 0xCCB1, + 22534 - 19968: 0xF7D8, + 22536 - 19968: 0xCBA8, + 22537 - 19968: 0xEBBC, + 22538 - 19968: 0xE4BE, + 22558 - 19968: 0xF4DC, + 22561 - 19968: 0xDCC2, + 22564 - 19968: 0xF0A7, + 22567 - 19968: 0xE6C0, + 22570 - 19968: 0xCAED, + 22575 - 19968: 0xE8EB, + 22576 - 19968: 0xE5E8, + 22577 - 19968: 0xDCC3, + 22580 - 19968: 0xEDDE, + 22581 - 19968: 0xD3F2, + 22586 - 19968: 0xCCF7, + 22602 - 19968: 0xCED4, + 22603 - 19968: 0xE7AB, + 22607 - 19968: 0xCBC3, + 22609 - 19968: 0xE1B1, + 22612 - 19968: 0xF7B2, + 22615 - 19968: 0xD3F3, + 22616 - 19968: 0xD3D2, + 22618 - 19968: 0xF5C0, + 22622 - 19968: 0xDFDD, + 22625 - 19968: 0xEEF3, + 22626 - 19968: 0xE7F1, + 22628 - 19968: 0xFDB4, + 22645 - 19968: 0xF2C8, + 22649 - 19968: 0xF3D2, + 22652 - 19968: 0xEEF4, + 22654 - 19968: 0xE2D3, + 22659 - 19968: 0xCCD1, + 22661 - 19968: 0xDFEA, + 22665 - 19968: 0xE9BA, + 22675 - 19968: 0xD9D7, + 22684 - 19968: 0xF5CD, + 22686 - 19968: 0xF1F2, + 22687 - 19968: 0xFAC7, + 22696 - 19968: 0xD9F8, + 22697 - 19968: 0xD4C2, + 22702 - 19968: 0xF6E5, + 22707 - 19968: 0xDDC5, + 22714 - 19968: 0xE7F2, + 22715 - 19968: 0xEDDF, + 22718 - 19968: 0xCACB, + 22721 - 19968: 0xDBFA, + 22725 - 19968: 0xE8B5, + 22727 - 19968: 0xD3A6, + 22734 - 19968: 0xFDB5, + 22737 - 19968: 0xF9C9, + 22739 - 19968: 0xE4E2, + 22741 - 19968: 0xFBBD, + 22744 - 19968: 0xD7A4, + 22745 - 19968: 0xCEC5, + 22750 - 19968: 0xCED5, + 22751 - 19968: 0xD6E6, + 22756 - 19968: 0xE5BD, + 22763 - 19968: 0xDECD, + 22764 - 19968: 0xECF3, + 22767 - 19968: 0xEDE0, + 22777 - 19968: 0xECEC, + 22778 - 19968: 0xFBBE, + 22779 - 19968: 0xDFEB, + 22781 - 19968: 0xE1F8, + 22799 - 19968: 0xF9BE, + 22804 - 19968: 0xD0F3, + 22805 - 19968: 0xE0AA, + 22806 - 19968: 0xE8E2, + 22809 - 19968: 0xE2D4, + 22810 - 19968: 0xD2FD, + 22812 - 19968: 0xE5A8, + 22818 - 19968: 0xD9D3, + 22823 - 19968: 0xD3DE, + 22825 - 19968: 0xF4B8, + 22826 - 19968: 0xF7BC, + 22827 - 19968: 0xDCFD, + 22829 - 19968: 0xE8EC, + 22830 - 19968: 0xE4E7, + 22833 - 19968: 0xE3F7, + 22839 - 19968: 0xECA8, + 22846 - 19968: 0xFAF1, + 22852 - 19968: 0xE5F2, + 22855 - 19968: 0xD0F4, + 22856 - 19968: 0xD2AF, + 22857 - 19968: 0xDCE5, + 22862 - 19968: 0xD0A5, + 22863 - 19968: 0xF1B4, + 22864 - 19968: 0xFCB1, + 22865 - 19968: 0xCCF8, + 22868 - 19968: 0xDDC6, + 22869 - 19968: 0xFAD1, + 22871 - 19968: 0xF7DF, + 22874 - 19968: 0xFAA8, + 22880 - 19968: 0xEEF5, + 22882 - 19968: 0xDECE, + 22887 - 19968: 0xE7F3, + 22890 - 19968: 0xF7AC, + 22891 - 19968: 0xEBC4, + 22892 - 19968: 0xEDE1, + 22893 - 19968: 0xE0AB, + 22894 - 19968: 0xDDC7, + 22899 - 19968: 0xD2B3, + 22900 - 19968: 0xD2BF, + 22904 - 19968: 0xCACC, + 22909 - 19968: 0xFBBF, + 22914 - 19968: 0xE5FD, + 22915 - 19968: 0xDDE5, + 22916 - 19968: 0xD8CD, + 22922 - 19968: 0xECF4, + 22931 - 19968: 0xD0F5, + 22934 - 19968: 0xE8ED, + 22935 - 19968: 0xD0D2, + 22937 - 19968: 0xD9D8, + 22949 - 19968: 0xF6E6, + 22952 - 19968: 0xDBAA, + 22956 - 19968: 0xF7E0, + 22969 - 19968: 0xD8D9, + 22971 - 19968: 0xF4A3, + 22974 - 19968: 0xF4DD, + 22979 - 19968: 0xEFD1, + 22982 - 19968: 0xD9B5, + 22985 - 19968: 0xEDAB, + 22987 - 19968: 0xE3B7, + 22992 - 19968: 0xEEBB, + 22993 - 19968: 0xCDB4, + 22995 - 19968: 0xE0F3, + 22996 - 19968: 0xEACD, + 23001 - 19968: 0xECF5, + 23002 - 19968: 0xE8EE, + 23004 - 19968: 0xCBA9, + 23005 - 19968: 0xF1AF, + 23014 - 19968: 0xCACD, + 23016 - 19968: 0xECA9, + 23018 - 19968: 0xF2EB, + 23020 - 19968: 0xFDEF, + 23022 - 19968: 0xF9F3, + 23032 - 19968: 0xE6C1, + 23035 - 19968: 0xECD8, + 23039 - 19968: 0xEDAC, + 23041 - 19968: 0xEACE, + 23043 - 19968: 0xE8DF, + 23057 - 19968: 0xDECF, + 23064 - 19968: 0xD2A6, + 23067 - 19968: 0xE7F4, + 23068 - 19968: 0xD1D6, + 23071 - 19968: 0xE6C2, + 23072 - 19968: 0xE3E3, + 23077 - 19968: 0xE4B0, + 23081 - 19968: 0xD8B4, + 23094 - 19968: 0xF6A5, + 23100 - 19968: 0xF3DE, + 23105 - 19968: 0xD7A5, + 23110 - 19968: 0xF7E8, + 23113 - 19968: 0xE8C6, + 23130 - 19968: 0xFBE6, + 23138 - 19968: 0xDDE6, + 23142 - 19968: 0xDCFE, + 23186 - 19968: 0xD8DA, + 23194 - 19968: 0xDAAC, + 23195 - 19968: 0xEAB0, + 23204 - 19968: 0xE3B8, + 23233 - 19968: 0xCAAA, + 23234 - 19968: 0xE1F9, + 23236 - 19968: 0xEAB1, + 23241 - 19968: 0xF2EC, + 23244 - 19968: 0xFAEE, + 23265 - 19968: 0xEED5, + 23270 - 19968: 0xF9F4, + 23273 - 19968: 0xD2EC, + 23301 - 19968: 0xFBFB, + 23305 - 19968: 0xFDF0, + 23307 - 19968: 0xE0BD, + 23308 - 19968: 0xCEE3, + 23318 - 19968: 0xF8C6, + 23338 - 19968: 0xDEAE, + 23360 - 19968: 0xDFC5, + 23363 - 19968: 0xE5BE, + 23376 - 19968: 0xEDAD, + 23377 - 19968: 0xFAEA, + 23380 - 19968: 0xCDEE, + 23381 - 19968: 0xEDA6, + 23383 - 19968: 0xEDAE, + 23384 - 19968: 0xF0ED, + 23386 - 19968: 0xDDA1, + 23388 - 19968: 0xEDAF, + 23389 - 19968: 0xFCF8, + 23391 - 19968: 0xD8EB, + 23395 - 19968: 0xCCF9, + 23396 - 19968: 0xCDB5, + 23401 - 19968: 0xFAA9, + 23403 - 19968: 0xE1DD, + 23408 - 19968: 0xE2D5, + 23409 - 19968: 0xEDCF, + 23413 - 19968: 0xDDA2, + 23416 - 19968: 0xF9CA, + 23418 - 19968: 0xEAE8, + 23420 - 19968: 0xE5ED, + 23429 - 19968: 0xD3EB, + 23431 - 19968: 0xE9D4, + 23432 - 19968: 0xE1FA, + 23433 - 19968: 0xE4CC, + 23435 - 19968: 0xE1E4, + 23436 - 19968: 0xE8C7, + 23439 - 19968: 0xCEDB, + 23443 - 19968: 0xDCD5, + 23445 - 19968: 0xF7B5, + 23446 - 19968: 0xFCF3, + 23447 - 19968: 0xF0F3, + 23448 - 19968: 0xCEAF, + 23449 - 19968: 0xF1B5, + 23450 - 19968: 0xEFD2, + 23451 - 19968: 0xE8C8, + 23452 - 19968: 0xEBF1, + 23458 - 19968: 0xCBD4, + 23459 - 19968: 0xE0BE, + 23460 - 19968: 0xE3F8, + 23461 - 19968: 0xEAE9, + 23462 - 19968: 0xFCB2, + 23468 - 19968: 0xE0F4, + 23470 - 19968: 0xCFE0, + 23472 - 19968: 0xEEA5, + 23475 - 19968: 0xFAAA, + 23476 - 19968: 0xE6C3, + 23477 - 19968: 0xE1B2, + 23478 - 19968: 0xCAAB, + 23480 - 19968: 0xE3E4, + 23481 - 19968: 0xE9BB, + 23487 - 19968: 0xE2D6, + 23488 - 19968: 0xF3F2, + 23490 - 19968: 0xEED6, + 23491 - 19968: 0xEAB2, + 23492 - 19968: 0xD0F6, + 23493 - 19968: 0xECD9, + 23494 - 19968: 0xDACB, + 23495 - 19968: 0xCFA8, + 23500 - 19968: 0xDDA3, + 23504 - 19968: 0xD8DB, + 23506 - 19968: 0xF9CE, + 23507 - 19968: 0xE9D5, + 23508 - 19968: 0xE3D1, + 23511 - 19968: 0xD2BC, + 23518 - 19968: 0xD8AC, + 23519 - 19968: 0xF3CC, + 23521 - 19968: 0xCDFB, + 23522 - 19968: 0xF6D6, + 23524 - 19968: 0xE7F5, + 23525 - 19968: 0xE8EF, + 23526 - 19968: 0xE3F9, + 23527 - 19968: 0xD2BB, + 23528 - 19968: 0xF3F3, + 23529 - 19968: 0xE3FB, + 23531 - 19968: 0xDED0, + 23532 - 19968: 0xCEB0, + 23534 - 19968: 0xD6F7, + 23535 - 19968: 0xF1D9, + 23541 - 19968: 0xF5C1, + 23542 - 19968: 0xDCC4, + 23544 - 19968: 0xF5BB, + 23546 - 19968: 0xDED1, + 23553 - 19968: 0xDCE6, + 23556 - 19968: 0xDED2, + 23559 - 19968: 0xEDE2, + 23560 - 19968: 0xEEF6, + 23561 - 19968: 0xEACF, + 23562 - 19968: 0xF0EE, + 23563 - 19968: 0xE3FC, + 23565 - 19968: 0xD3DF, + 23566 - 19968: 0xD3F4, + 23567 - 19968: 0xE1B3, + 23569 - 19968: 0xE1B4, + 23574 - 19968: 0xF4D3, + 23577 - 19968: 0xDFC6, + 23588 - 19968: 0xE9D6, + 23592 - 19968: 0xDBAB, + 23601 - 19968: 0xF6A6, + 23608 - 19968: 0xE3B9, + 23609 - 19968: 0xEBC5, + 23610 - 19968: 0xF4A9, + 23611 - 19968: 0xCDB6, + 23612 - 19968: 0xD2F9, + 23614 - 19968: 0xDAAD, + 23615 - 19968: 0xD2E3, + 23616 - 19968: 0xCFD1, + 23621 - 19968: 0xCBDC, + 23622 - 19968: 0xCCFA, + 23624 - 19968: 0xCFDD, + 23627 - 19968: 0xE8A9, + 23629 - 19968: 0xE3BB, + 23630 - 19968: 0xE3BA, + 23633 - 19968: 0xE0DA, + 23637 - 19968: 0xEEF7, + 23643 - 19968: 0xDCB3, + 23648 - 19968: 0xD3F5, + 23650 - 19968: 0xD7A6, + 23652 - 19968: 0xF6B5, + 23653 - 19968: 0xD7DB, + 23660 - 19968: 0xE1D5, + 23663 - 19968: 0xD4EA, + 23665 - 19968: 0xDFA3, + 23673 - 19968: 0xFDDF, + 23696 - 19968: 0xD0F7, + 23697 - 19968: 0xEDD4, + 23713 - 19968: 0xCBAA, + 23721 - 19968: 0xE4DB, + 23723 - 19968: 0xE1FB, + 23724 - 19968: 0xCBA2, + 23729 - 19968: 0xD3E0, + 23731 - 19968: 0xE4BF, + 23733 - 19968: 0xFBC0, + 23735 - 19968: 0xDABE, + 23736 - 19968: 0xE4CD, + 23738 - 19968: 0xD6B9, + 23742 - 19968: 0xEFC0, + 23744 - 19968: 0xE1FC, + 23769 - 19968: 0xF6B9, + 23776 - 19968: 0xDFC7, + 23784 - 19968: 0xE4B1, + 23791 - 19968: 0xDCE7, + 23792 - 19968: 0xDCE8, + 23796 - 19968: 0xFAD6, + 23798 - 19968: 0xD3F6, + 23803 - 19968: 0xF1DA, + 23805 - 19968: 0xFAF2, + 23815 - 19968: 0xE2FD, + 23821 - 19968: 0xD5CF, + 23822 - 19968: 0xD0F8, + 23825 - 19968: 0xCDDF, + 23828 - 19968: 0xF5CB, + 23830 - 19968: 0xE4F0, + 23831 - 19968: 0xCBAB, + 23833 - 19968: 0xD7C4, + 23847 - 19968: 0xE2FE, + 23849 - 19968: 0xDDDA, + 23883 - 19968: 0xDAAE, + 23884 - 19968: 0xCAEE, + 23888 - 19968: 0xD5B9, + 23913 - 19968: 0xE3A1, + 23916 - 19968: 0xE8E3, + 23919 - 19968: 0xF3AB, + 23943 - 19968: 0xCFA9, + 23947 - 19968: 0xD3F7, + 23965 - 19968: 0xD4F1, + 23968 - 19968: 0xCEE4, + 23970 - 19968: 0xE8F2, + 23978 - 19968: 0xE5F5, + 23992 - 19968: 0xE7AE, + 23994 - 19968: 0xD6BA, + 23996 - 19968: 0xDFEC, + 23997 - 19968: 0xE4C0, + 24013 - 19968: 0xE8E4, + 24018 - 19968: 0xD8B5, + 24022 - 19968: 0xE4DC, + 24029 - 19968: 0xF4B9, + 24030 - 19968: 0xF1B6, + 24033 - 19968: 0xE2DE, + 24034 - 19968: 0xE1B5, + 24037 - 19968: 0xCDEF, + 24038 - 19968: 0xF1A7, + 24039 - 19968: 0xCEE5, + 24040 - 19968: 0xCBDD, + 24043 - 19968: 0xD9E3, + 24046 - 19968: 0xF3AC, + 24049 - 19968: 0xD0F9, + 24050 - 19968: 0xECAB, + 24051 - 19968: 0xDED3, + 24052 - 19968: 0xF7E9, + 24055 - 19968: 0xF9F5, + 24061 - 19968: 0xE1DE, + 24062 - 19968: 0xCBEE, + 24066 - 19968: 0xE3BC, + 24067 - 19968: 0xF8D6, + 24070 - 19968: 0xDBEE, + 24076 - 19968: 0xFDF1, + 24081 - 19968: 0xF7B6, + 24086 - 19968: 0xF4DE, + 24089 - 19968: 0xF2ED, + 24091 - 19968: 0xDBD9, + 24093 - 19968: 0xF0A8, + 24101 - 19968: 0xE1FD, + 24107 - 19968: 0xDED4, + 24109 - 19968: 0xE0AC, + 24115 - 19968: 0xEDE3, + 24118 - 19968: 0xD3E1, + 24120 - 19968: 0xDFC8, + 24125 - 19968: 0xD9B6, + 24127 - 19968: 0xFDAC, + 24128 - 19968: 0xEFD3, + 24132 - 19968: 0xE4C1, + 24133 - 19968: 0xF8EB, + 24135 - 19968: 0xDBAC, + 24140 - 19968: 0xFCC6, + 24149 - 19968: 0xD8AD, + 24159 - 19968: 0xF6BA, + 24161 - 19968: 0xDBDF, + 24162 - 19968: 0xD3D3, + 24163 - 19968: 0xF8C7, + 24178 - 19968: 0xCACE, + 24179 - 19968: 0xF8C1, + 24180 - 19968: 0xD2B4, + 24183 - 19968: 0xDCB4, + 24184 - 19968: 0xFAB9, + 24185 - 19968: 0xCACF, + 24187 - 19968: 0xFCB3, + 24188 - 19968: 0xEAEA, + 24189 - 19968: 0xEAEB, + 24190 - 19968: 0xD0FA, + 24196 - 19968: 0xEDE4, + 24199 - 19968: 0xDDE7, + 24202 - 19968: 0xDFC9, + 24207 - 19968: 0xDFED, + 24213 - 19968: 0xEEBC, + 24215 - 19968: 0xEFC1, + 24218 - 19968: 0xCCD2, + 24220 - 19968: 0xDDA4, + 24224 - 19968: 0xDFCA, + 24230 - 19968: 0xD3F8, + 24231 - 19968: 0xF1A8, + 24235 - 19968: 0xCDB7, + 24237 - 19968: 0xEFD4, + 24245 - 19968: 0xE4DD, + 24246 - 19968: 0xDFEE, + 24247 - 19968: 0xCBAC, + 24248 - 19968: 0xE9BC, + 24254 - 19968: 0xEAEC, + 24258 - 19968: 0xDFCB, + 24264 - 19968: 0xF9BF, + 24265 - 19968: 0xD6AF, + 24266 - 19968: 0xD5C6, + 24272 - 19968: 0xCFAA, + 24275 - 19968: 0xCEA9, + 24278 - 19968: 0xD6F8, + 24282 - 19968: 0xF1B7, + 24283 - 19968: 0xEEF8, + 24287 - 19968: 0xD9D9, + 24288 - 19968: 0xF3DF, + 24290 - 19968: 0xF8C8, + 24291 - 19968: 0xCEC6, + 24300 - 19968: 0xD5E6, + 24307 - 19968: 0xF4E6, + 24310 - 19968: 0xE6C5, + 24311 - 19968: 0xEFD5, + 24314 - 19968: 0xCBEF, + 24315 - 19968: 0xFCDF, + 24321 - 19968: 0xDCA7, + 24324 - 19968: 0xD6E7, + 24330 - 19968: 0xF8C9, + 24335 - 19968: 0xE3D2, + 24337 - 19968: 0xE3BD, + 24339 - 19968: 0xCFE1, + 24340 - 19968: 0xF0C0, + 24341 - 19968: 0xECDA, + 24343 - 19968: 0xDDD7, + 24344 - 19968: 0xFBF0, + 24347 - 19968: 0xECAC, + 24351 - 19968: 0xF0A9, + 24358 - 19968: 0xFAD7, + 24359 - 19968: 0xFBC1, + 24361 - 19968: 0xD2C0, + 24369 - 19968: 0xE5B0, + 24373 - 19968: 0xEDE5, + 24378 - 19968: 0xCBAD, + 24380 - 19968: 0xF9B0, + 24392 - 19968: 0xF7A5, + 24394 - 19968: 0xCBAE, + 24396 - 19968: 0xDAAF, + 24398 - 19968: 0xD8B6, + 24406 - 19968: 0xD3A7, + 24407 - 19968: 0xFBB2, + 24409 - 19968: 0xFDC4, + 24411 - 19968: 0xECAD, + 24418 - 19968: 0xFBA1, + 24422 - 19968: 0xE5E9, + 24423 - 19968: 0xE9EE, + 24425 - 19968: 0xF3F4, + 24426 - 19968: 0xF8F3, + 24427 - 19968: 0xF0C1, + 24428 - 19968: 0xDEAF, + 24429 - 19968: 0xF8B0, + 24432 - 19968: 0xF3E0, + 24433 - 19968: 0xE7AF, + 24439 - 19968: 0xDBAD, + 24441 - 19968: 0xE6B5, + 24444 - 19968: 0xF9A8, + 24447 - 19968: 0xDDD8, + 24448 - 19968: 0xE8D9, + 24449 - 19968: 0xEFD6, + 24453 - 19968: 0xD3E2, + 24455 - 19968: 0xE2DF, + 24458 - 19968: 0xFCE0, + 24459 - 19968: 0xD7C8, + 24460 - 19968: 0xFDAD, + 24464 - 19968: 0xDFEF, + 24465 - 19968: 0xCCD3, + 24466 - 19968: 0xD3F9, + 24471 - 19968: 0xD4F0, + 24472 - 19968: 0xDBC7, + 24473 - 19968: 0xDED5, + 24478 - 19968: 0xF0F4, + 24480 - 19968: 0xD5D0, + 24481 - 19968: 0xE5D9, + 24488 - 19968: 0xFCC7, + 24489 - 19968: 0xDCD6, + 24490 - 19968: 0xE2E0, + 24494 - 19968: 0xDAB0, + 24501 - 19968: 0xF3A3, + 24503 - 19968: 0xD3EC, + 24505 - 19968: 0xF4CB, + 24509 - 19968: 0xFDC5, + 24515 - 19968: 0xE3FD, + 24517 - 19968: 0xF9B1, + 24524 - 19968: 0xD0FB, + 24525 - 19968: 0xECDB, + 24534 - 19968: 0xF5BC, + 24535 - 19968: 0xF2A4, + 24536 - 19968: 0xD8CE, + 24537 - 19968: 0xD8CF, + 24544 - 19968: 0xF5F7, + 24555 - 19968: 0xF6E1, + 24565 - 19968: 0xD2B7, + 24573 - 19968: 0xFBEC, + 24575 - 19968: 0xDDC8, + 24591 - 19968: 0xE4E8, + 24594 - 19968: 0xD2C1, + 24598 - 19968: 0xF8D7, + 24604 - 19968: 0xD6BB, + 24605 - 19968: 0xDED6, + 24608 - 19968: 0xF7BD, + 24609 - 19968: 0xECAE, + 24613 - 19968: 0xD0E1, + 24615 - 19968: 0xE0F5, + 24616 - 19968: 0xEAB3, + 24618 - 19968: 0xCED6, + 24623 - 19968: 0xCCA5, + 24641 - 19968: 0xECF6, + 24642 - 19968: 0xE2E1, + 24643 - 19968: 0xE3BE, + 24653 - 19968: 0xFCC8, + 24656 - 19968: 0xCDF0, + 24658 - 19968: 0xF9F6, + 24661 - 19968: 0xDFF0, + 24665 - 19968: 0xE5BF, + 24669 - 19968: 0xCEBF, + 24674 - 19968: 0xFCE1, + 24675 - 19968: 0xEDB0, + 24676 - 19968: 0xFDD1, + 24677 - 19968: 0xF6BB, + 24680 - 19968: 0xF9CF, + 24681 - 19968: 0xEBDA, + 24682 - 19968: 0xCAC1, + 24684 - 19968: 0xD2B8, + 24685 - 19968: 0xCDF1, + 24687 - 19968: 0xE3D3, + 24688 - 19968: 0xFDE6, + 24709 - 19968: 0xE6ED, + 24713 - 19968: 0xE3FA, + 24716 - 19968: 0xF0AA, + 24717 - 19968: 0xF9D0, + 24724 - 19968: 0xFCE2, + 24726 - 19968: 0xF8A7, + 24730 - 19968: 0xE1E5, + 24731 - 19968: 0xEEF9, + 24735 - 19968: 0xE7F6, + 24736 - 19968: 0xEAED, + 24739 - 19968: 0xFCB4, + 24740 - 19968: 0xF5C2, + 24743 - 19968: 0xD7DC, + 24752 - 19968: 0xF0F5, + 24754 - 19968: 0xDDE8, + 24755 - 19968: 0xD3ED, + 24756 - 19968: 0xF5FC, + 24758 - 19968: 0xDABF, + 24760 - 19968: 0xCCFB, + 24764 - 19968: 0xD3FA, + 24765 - 19968: 0xF4A4, + 24773 - 19968: 0xEFD7, + 24775 - 19968: 0xD4C3, + 24785 - 19968: 0xFBE3, + 24794 - 19968: 0xFBED, + 24796 - 19968: 0xE0AD, + 24799 - 19968: 0xEAEE, + 24800 - 19968: 0xFBB3, + 24801 - 19968: 0xE4C2, + 24816 - 19968: 0xF6E7, + 24817 - 19968: 0xD2DD, + 24819 - 19968: 0xDFCC, + 24822 - 19968: 0xFCC9, + 24825 - 19968: 0xE5A9, + 24826 - 19968: 0xE0F6, + 24827 - 19968: 0xF6B3, + 24833 - 19968: 0xE1FE, + 24838 - 19968: 0xCBF0, + 24840 - 19968: 0xEAEF, + 24841 - 19968: 0xEAF0, + 24845 - 19968: 0xDAC0, + 24846 - 19968: 0xF8B4, + 24847 - 19968: 0xEBF2, + 24853 - 19968: 0xE4C3, + 24858 - 19968: 0xE9D7, + 24859 - 19968: 0xE4F1, + 24863 - 19968: 0xCAEF, + 24871 - 19968: 0xCED7, + 24880 - 19968: 0xFCCA, + 24884 - 19968: 0xF3E1, + 24887 - 19968: 0xCBC4, + 24892 - 19968: 0xE3E5, + 24894 - 19968: 0xCBC5, + 24895 - 19968: 0xEAB4, + 24898 - 19968: 0xE9BD, + 24900 - 19968: 0xD7C9, + 24903 - 19968: 0xEBDB, + 24904 - 19968: 0xEDB1, + 24906 - 19968: 0xCCC3, + 24907 - 19968: 0xF7BE, + 24908 - 19968: 0xFCCB, + 24915 - 19968: 0xF8F4, + 24917 - 19968: 0xD9B7, + 24920 - 19968: 0xF3D3, + 24921 - 19968: 0xF3D4, + 24925 - 19968: 0xF7E4, + 24927 - 19968: 0xF7D1, + 24930 - 19968: 0xD8B7, + 24931 - 19968: 0xCEB1, + 24932 - 19968: 0xCAC2, + 24935 - 19968: 0xFBB4, + 24936 - 19968: 0xCBC6, + 24939 - 19968: 0xF0F6, + 24942 - 19968: 0xD5E7, + 24944 - 19968: 0xEAD0, + 24950 - 19968: 0xCCD4, + 24951 - 19968: 0xCBAF, + 24957 - 19968: 0xF4AA, + 24958 - 19968: 0xE9AF, + 24961 - 19968: 0xF5C3, + 24962 - 19968: 0xE9D8, + 24970 - 19968: 0xDDE9, + 24974 - 19968: 0xF1F3, + 24976 - 19968: 0xD5FB, + 24977 - 19968: 0xDEBB, + 24980 - 19968: 0xF4FB, + 24984 - 19968: 0xFDF3, + 24985 - 19968: 0xFDF2, + 24986 - 19968: 0xF7A6, + 24996 - 19968: 0xDDC9, + 24999 - 19968: 0xD4D3, + 25001 - 19968: 0xCCA8, + 25003 - 19968: 0xDAC1, + 25004 - 19968: 0xCCD5, + 25006 - 19968: 0xD9E4, + 25010 - 19968: 0xFACA, + 25014 - 19968: 0xE5E3, + 25018 - 19968: 0xD3BC, + 25022 - 19968: 0xCAF0, + 25027 - 19968: 0xD0C4, + 25031 - 19968: 0xCAD0, + 25032 - 19968: 0xFAAB, + 25033 - 19968: 0xEBEB, + 25034 - 19968: 0xE7F8, + 25035 - 19968: 0xD9E5, + 25062 - 19968: 0xD1D7, + 25074 - 19968: 0xF3A4, + 25078 - 19968: 0xD4FB, + 25079 - 19968: 0xFCE3, + 25080 - 19968: 0xFAD8, + 25082 - 19968: 0xF3D5, + 25084 - 19968: 0xCFAB, + 25087 - 19968: 0xEBF3, + 25088 - 19968: 0xD5FC, + 25095 - 19968: 0xD3D4, + 25096 - 19968: 0xCDFC, + 25098 - 19968: 0xD9E6, + 25100 - 19968: 0xE2F9, + 25101 - 19968: 0xE2A1, + 25102 - 19968: 0xEBD4, + 25104 - 19968: 0xE0F7, + 25105 - 19968: 0xE4B2, + 25106 - 19968: 0xCCFC, + 25110 - 19968: 0xFBE4, + 25114 - 19968: 0xF4AB, + 25119 - 19968: 0xD0BD, + 25121 - 19968: 0xCAF1, + 25130 - 19968: 0xEFB8, + 25134 - 19968: 0xD7C0, + 25136 - 19968: 0xEEFA, + 25137 - 19968: 0xFDF4, + 25140 - 19968: 0xD3E3, + 25142 - 19968: 0xFBC2, + 25150 - 19968: 0xD5E8, + 25151 - 19968: 0xDBAE, + 25152 - 19968: 0xE1B6, + 25153 - 19968: 0xF8B7, + 25159 - 19968: 0xE0BF, + 25160 - 19968: 0xFBC3, + 25161 - 19968: 0xDDEA, + 25163 - 19968: 0xE2A2, + 25165 - 19968: 0xEEA6, + 25171 - 19968: 0xF6E8, + 25176 - 19968: 0xF6F5, + 25198 - 19968: 0xDDCA, + 25201 - 19968: 0xD0E2, + 25206 - 19968: 0xDDA6, + 25209 - 19968: 0xDDEB, + 25212 - 19968: 0xE4F9, + 25215 - 19968: 0xE3AF, + 25216 - 19968: 0xD0FC, + 25220 - 19968: 0xF4FC, + 25225 - 19968: 0xCCBC, + 25226 - 19968: 0xF7EA, + 25233 - 19968: 0xE5E4, + 25234 - 19968: 0xDFF1, + 25237 - 19968: 0xF7E1, + 25239 - 19968: 0xF9F7, + 25240 - 19968: 0xEFB9, + 25243 - 19968: 0xF8D8, + 25259 - 19968: 0xF9A9, + 25265 - 19968: 0xF8D9, + 25269 - 19968: 0xEEBD, + 25273 - 19968: 0xD8C6, + 25276 - 19968: 0xE4E3, + 25277 - 19968: 0xF5CE, + 25282 - 19968: 0xDDD9, + 25287 - 19968: 0xD9E7, + 25288 - 19968: 0xD2B9, + 25289 - 19968: 0xD5C3, + 25292 - 19968: 0xDAE5, + 25293 - 19968: 0xDAD0, + 25295 - 19968: 0xD1D9, + 25296 - 19968: 0xCED8, + 25298 - 19968: 0xCBDE, + 25299 - 19968: 0xF4AC, + 25300 - 19968: 0xDAFB, + 25302 - 19968: 0xF6E9, + 25303 - 19968: 0xE8F3, + 25304 - 19968: 0xCFAC, + 25305 - 19968: 0xF0F0, + 25307 - 19968: 0xF4FD, + 25308 - 19968: 0xDBC8, + 25324 - 19968: 0xCEC0, + 25325 - 19968: 0xE3D4, + 25326 - 19968: 0xD1CF, + 25327 - 19968: 0xF1F5, + 25329 - 19968: 0xCDF2, + 25331 - 19968: 0xCFEB, + 25335 - 19968: 0xCDB8, + 25342 - 19968: 0xE3A6, + 25343 - 19968: 0xD1DA, + 25345 - 19968: 0xF2A5, + 25351 - 19968: 0xF2A6, + 25353 - 19968: 0xE4CE, + 25361 - 19968: 0xD3FB, + 25387 - 19968: 0xF1A9, + 25391 - 19968: 0xF2C9, + 25402 - 19968: 0xEFD8, + 25403 - 19968: 0xE6C9, + 25405 - 19968: 0xD8B8, + 25406 - 19968: 0xFAF3, + 25417 - 19968: 0xF3B5, + 25420 - 19968: 0xF8A4, + 25423 - 19968: 0xD1F3, + 25424 - 19968: 0xE6C8, + 25429 - 19968: 0xF8DA, + 25447 - 19968: 0xDCE9, + 25448 - 19968: 0xDED7, + 25454 - 19968: 0xCBDF, + 25458 - 19968: 0xCFEC, + 25463 - 19968: 0xF4DF, + 25466 - 19968: 0xD1F4, + 25467 - 19968: 0xD2BA, + 25471 - 19968: 0xDFF2, + 25475 - 19968: 0xE1B7, + 25480 - 19968: 0xE2A3, + 25481 - 19968: 0xD3FC, + 25484 - 19968: 0xEDE6, + 25490 - 19968: 0xDBC9, + 25494 - 19968: 0xE4FA, + 25496 - 19968: 0xCFDE, + 25499 - 19968: 0xCED0, + 25504 - 19968: 0xD5D3, + 25505 - 19968: 0xF3F5, + 25506 - 19968: 0xF7AE, + 25509 - 19968: 0xEFC8, + 25511 - 19968: 0xCDF3, + 25512 - 19968: 0xF5CF, + 25513 - 19968: 0xE5F3, + 25514 - 19968: 0xF0C2, + 25536 - 19968: 0xCAD1, + 25540 - 19968: 0xEAF1, + 25542 - 19968: 0xD0A6, + 25551 - 19968: 0xD9DA, + 25552 - 19968: 0xF0AB, + 25558 - 19968: 0xEBE7, + 25562 - 19968: 0xE5C0, + 25563 - 19968: 0xFCB5, + 25569 - 19968: 0xE4C4, + 25581 - 19968: 0xCCA9, + 25582 - 19968: 0xFDC6, + 25588 - 19968: 0xEAB5, + 25590 - 19968: 0xE5AA, + 25591 - 19968: 0xDFBA, + 25613 - 19968: 0xE1DF, + 25615 - 19968: 0xDAD1, + 25620 - 19968: 0xE1B8, + 25622 - 19968: 0xE8F4, + 25623 - 19968: 0xD3FD, + 25628 - 19968: 0xE2A4, + 25634 - 19968: 0xF2CA, + 25644 - 19968: 0xDAE6, + 25645 - 19968: 0xF7B3, + 25658 - 19968: 0xFDCD, + 25662 - 19968: 0xF3B6, + 25688 - 19968: 0xEED7, + 25696 - 19968: 0xF5C4, + 25705 - 19968: 0xD8A4, + 25711 - 19968: 0xF2A7, + 25720 - 19968: 0xD9B8, + 25721 - 19968: 0xD9B9, + 25722 - 19968: 0xEFC9, + 25736 - 19968: 0xD6CE, + 25745 - 19968: 0xF7CB, + 25746 - 19968: 0xDFAE, + 25747 - 19968: 0xE8F5, + 25754 - 19968: 0xD2B5, + 25758 - 19968: 0xD3D5, + 25764 - 19968: 0xF4CC, + 25765 - 19968: 0xDAFC, + 25771 - 19968: 0xD9E8, + 25773 - 19968: 0xF7EB, + 25774 - 19968: 0xF5C9, + 25776 - 19968: 0xF3BC, + 25778 - 19968: 0xDAD2, + 25787 - 19968: 0xD3B5, + 25793 - 19968: 0xE8B6, + 25796 - 19968: 0xD6CF, + 25797 - 19968: 0xF4BA, + 25799 - 19968: 0xF7C9, + 25802 - 19968: 0xCCAA, + 25805 - 19968: 0xF0C3, + 25806 - 19968: 0xCCD6, + 25810 - 19968: 0xD0D3, + 25812 - 19968: 0xD3BD, + 25816 - 19968: 0xDBFB, + 25818 - 19968: 0xCBE0, + 25825 - 19968: 0xD3E4, + 25826 - 19968: 0xF6F7, + 25829 - 19968: 0xD5BA, + 25830 - 19968: 0xF3CD, + 25831 - 19968: 0xCBE1, + 25836 - 19968: 0xEBF4, + 25842 - 19968: 0xF4AD, + 25844 - 19968: 0xFCAA, + 25850 - 19968: 0xF7EC, + 25854 - 19968: 0xE8F6, + 25856 - 19968: 0xDAE7, + 25860 - 19968: 0xF7CC, + 25880 - 19968: 0xE5C1, + 25885 - 19968: 0xE0EE, + 25891 - 19968: 0xD5FD, + 25898 - 19968: 0xCEE6, + 25899 - 19968: 0xFCAB, + 25900 - 19968: 0xD5BB, + 25903 - 19968: 0xF2A8, + 25910 - 19968: 0xE2A5, + 25911 - 19968: 0xCDB9, + 25912 - 19968: 0xEAF2, + 25913 - 19968: 0xCBC7, + 25915 - 19968: 0xCDF4, + 25918 - 19968: 0xDBAF, + 25919 - 19968: 0xEFD9, + 25925 - 19968: 0xCDBA, + 25928 - 19968: 0xFCF9, + 25933 - 19968: 0xDFF3, + 25934 - 19968: 0xCEE7, + 25935 - 19968: 0xDAC2, + 25937 - 19968: 0xCFAD, + 25942 - 19968: 0xE7F9, + 25943 - 19968: 0xF8A8, + 25950 - 19968: 0xF3E2, + 25954 - 19968: 0xCAF2, + 25955 - 19968: 0xDFA4, + 25958 - 19968: 0xD4C4, + 25964 - 19968: 0xCCD7, + 25965 - 19968: 0xE5C2, + 25970 - 19968: 0xCDBB, + 25972 - 19968: 0xEFDA, + 25973 - 19968: 0xEED8, + 25975 - 19968: 0xDDA7, + 25976 - 19968: 0xE2A6, + 25982 - 19968: 0xE0C0, + 25986 - 19968: 0xD6B0, + 25987 - 19968: 0xF8CA, + 25989 - 19968: 0xFCFA, + 25991 - 19968: 0xD9FE, + 25996 - 19968: 0xDEB0, + 26000 - 19968: 0xDDEC, + 26001 - 19968: 0xDAE8, + 26007 - 19968: 0xD4E0, + 26009 - 19968: 0xD6F9, + 26011 - 19968: 0xCDD7, + 26012 - 19968: 0xDED8, + 26015 - 19968: 0xF2F8, + 26017 - 19968: 0xE4D6, + 26020 - 19968: 0xD0C5, + 26021 - 19968: 0xF4AE, + 26023 - 19968: 0xDDA8, + 26027 - 19968: 0xEDC5, + 26028 - 19968: 0xF3D6, + 26031 - 19968: 0xDED9, + 26032 - 19968: 0xE3E6, + 26039 - 19968: 0xD3A8, + 26041 - 19968: 0xDBB0, + 26044 - 19968: 0xE5DA, + 26045 - 19968: 0xE3BF, + 26049 - 19968: 0xDBB1, + 26053 - 19968: 0xD5E9, + 26059 - 19968: 0xE0C1, + 26060 - 19968: 0xEFDB, + 26063 - 19968: 0xF0E9, + 26066 - 19968: 0xD7B2, + 26071 - 19968: 0xD0FD, + 26080 - 19968: 0xD9E9, + 26083 - 19968: 0xD0FE, + 26085 - 19968: 0xECED, + 26086 - 19968: 0xD3A9, + 26088 - 19968: 0xF2A9, + 26089 - 19968: 0xF0C4, + 26092 - 19968: 0xE2E2, + 26093 - 19968: 0xE9EF, + 26097 - 19968: 0xF9D1, + 26100 - 19968: 0xE9D9, + 26106 - 19968: 0xE8DA, + 26107 - 19968: 0xDAC3, + 26108 - 19968: 0xDAC4, + 26109 - 19968: 0xD4C5, + 26111 - 19968: 0xE7FA, + 26118 - 19968: 0xCDE0, + 26119 - 19968: 0xE3B0, + 26121 - 19968: 0xDBB2, + 26122 - 19968: 0xFBC4, + 26124 - 19968: 0xF3E3, + 26126 - 19968: 0xD9A5, + 26127 - 19968: 0xFBE7, + 26128 - 19968: 0xDDCB, + 26129 - 19968: 0xD0D4, + 26131 - 19968: 0xE6B6, + 26132 - 19968: 0xE0AE, + 26133 - 19968: 0xFDDA, + 26142 - 19968: 0xDCB5, + 26143 - 19968: 0xE0F8, + 26144 - 19968: 0xE7B1, + 26149 - 19968: 0xF5F0, + 26151 - 19968: 0xD8DC, + 26152 - 19968: 0xEDC6, + 26157 - 19968: 0xE1B9, + 26159 - 19968: 0xE3C0, + 26160 - 19968: 0xF9C0, + 26161 - 19968: 0xE9F0, + 26164 - 19968: 0xD9DB, + 26166 - 19968: 0xF3E4, + 26170 - 19968: 0xDCB6, + 26171 - 19968: 0xE4E9, + 26177 - 19968: 0xF0C5, + 26178 - 19968: 0xE3C1, + 26179 - 19968: 0xFCCC, + 26180 - 19968: 0xFCCD, + 26185 - 19968: 0xF2CB, + 26187 - 19968: 0xF2CC, + 26191 - 19968: 0xE4CF, + 26201 - 19968: 0xF1DB, + 26203 - 19968: 0xFAD9, + 26205 - 19968: 0xF1B8, + 26206 - 19968: 0xFDF5, + 26207 - 19968: 0xE0F9, + 26212 - 19968: 0xE7FB, + 26213 - 19968: 0xFCB7, + 26214 - 19968: 0xFCE4, + 26215 - 19968: 0xFBC5, + 26216 - 19968: 0xE3E7, + 26217 - 19968: 0xD8B9, + 26219 - 19968: 0xF6F8, + 26222 - 19968: 0xDCC5, + 26223 - 19968: 0xCCD8, + 26227 - 19968: 0xE0AF, + 26228 - 19968: 0xF4E7, + 26230 - 19968: 0xEFDC, + 26231 - 19968: 0xCFFC, + 26232 - 19968: 0xEFDD, + 26234 - 19968: 0xF2AA, + 26244 - 19968: 0xFDBE, + 26247 - 19968: 0xCAAC, + 26248 - 19968: 0xFDBB, + 26249 - 19968: 0xFDC7, + 26254 - 19968: 0xE7B2, + 26256 - 19968: 0xEAD1, + 26257 - 19968: 0xDFF4, + 26262 - 19968: 0xD1EC, + 26263 - 19968: 0xE4DE, + 26264 - 19968: 0xE5C3, + 26269 - 19968: 0xD9A6, + 26272 - 19968: 0xCDBC, + 26274 - 19968: 0xF3E5, + 26283 - 19968: 0xEDD5, + 26286 - 19968: 0xD9BA, + 26290 - 19968: 0xEDE7, + 26291 - 19968: 0xFBB5, + 26292 - 19968: 0xF8EC, + 26297 - 19968: 0xE0E7, + 26299 - 19968: 0xCCD9, + 26302 - 19968: 0xD4C6, + 26308 - 19968: 0xE7A5, + 26310 - 19968: 0xD5F5, + 26311 - 19968: 0xD3BE, + 26313 - 19968: 0xFCFB, + 26326 - 19968: 0xE4F2, + 26329 - 19968: 0xDFF5, + 26332 - 19968: 0xE8F8, + 26333 - 19968: 0xF8ED, + 26336 - 19968: 0xCEC7, + 26342 - 19968: 0xFDF6, + 26352 - 19968: 0xE8D8, + 26354 - 19968: 0xCDD8, + 26355 - 19968: 0xE7D6, + 26356 - 19968: 0xCCDA, + 26359 - 19968: 0xCAE3, + 26360 - 19968: 0xDFF6, + 26361 - 19968: 0xF0C7, + 26362 - 19968: 0xF0C6, + 26364 - 19968: 0xD8BA, + 26366 - 19968: 0xF1F4, + 26367 - 19968: 0xF4F0, + 26368 - 19968: 0xF5CC, + 26371 - 19968: 0xFCE5, + 26376 - 19968: 0xEAC5, + 26377 - 19968: 0xEAF3, + 26379 - 19968: 0xDDDB, + 26381 - 19968: 0xDCD7, + 26388 - 19968: 0xDEFD, + 26389 - 19968: 0xF2F9, + 26391 - 19968: 0xD5C7, + 26395 - 19968: 0xD8D0, + 26397 - 19968: 0xF0C8, + 26398 - 19968: 0xD1A1, + 26399 - 19968: 0xD1A2, + 26406 - 19968: 0xD9D4, + 26407 - 19968: 0xD6E8, + 26408 - 19968: 0xD9CA, + 26410 - 19968: 0xDAB1, + 26411 - 19968: 0xD8C7, + 26412 - 19968: 0xDCE2, + 26413 - 19968: 0xF3CE, + 26414 - 19968: 0xF5F4, + 26417 - 19968: 0xF1B9, + 26420 - 19968: 0xDAD3, + 26422 - 19968: 0xF6EA, + 26426 - 19968: 0xCFF5, + 26429 - 19968: 0xFDAE, + 26438 - 19968: 0xCAD2, + 26441 - 19968: 0xDFB4, + 26446 - 19968: 0xD7DD, + 26447 - 19968: 0xFABA, + 26448 - 19968: 0xEEA7, + 26449 - 19968: 0xF5BD, + 26451 - 19968: 0xF8F5, + 26454 - 19968: 0xEDE8, + 26460 - 19968: 0xD4E1, + 26462 - 19968: 0xD1A3, + 26463 - 19968: 0xE1D6, + 26477 - 19968: 0xF9F8, + 26479 - 19968: 0xDBCA, + 26480 - 19968: 0xCBF9, + 26481 - 19968: 0xD4D4, + 26483 - 19968: 0xD9DC, + 26485 - 19968: 0xEEBE, + 26487 - 19968: 0xF7ED, + 26491 - 19968: 0xD2EE, + 26494 - 19968: 0xE1E6, + 26495 - 19968: 0xF7F9, + 26503 - 19968: 0xDDED, + 26505 - 19968: 0xE8DB, + 26507 - 19968: 0xDBB3, + 26511 - 19968: 0xD1F7, + 26512 - 19968: 0xE0B0, + 26515 - 19968: 0xD4E2, + 26517 - 19968: 0xF6D7, + 26519 - 19968: 0xD7F9, + 26522 - 19968: 0xD8DD, + 26524 - 19968: 0xCDFD, + 26525 - 19968: 0xF2AB, + 26543 - 19968: 0xCDBD, + 26544 - 19968: 0xF8C2, + 26547 - 19968: 0xF2AC, + 26550 - 19968: 0xCAAD, + 26551 - 19968: 0xCAAE, + 26552 - 19968: 0xCFAE, + 26558 - 19968: 0xE3C2, + 26564 - 19968: 0xDCB7, + 26575 - 19968: 0xDBDA, + 26576 - 19968: 0xD9BB, + 26577 - 19968: 0xCAF3, + 26578 - 19968: 0xF6D3, + 26579 - 19968: 0xE6F8, + 26580 - 19968: 0xEAF5, + 26586 - 19968: 0xEAF6, + 26589 - 19968: 0xF6F9, + 26601 - 19968: 0xCFAF, + 26604 - 19968: 0xCAD3, + 26607 - 19968: 0xCAAF, + 26608 - 19968: 0xD2B0, + 26609 - 19968: 0xF1BA, + 26611 - 19968: 0xD7B3, + 26612 - 19968: 0xE3C3, + 26613 - 19968: 0xF3FD, + 26614 - 19968: 0xDEDA, + 26619 - 19968: 0xDEDB, + 26622 - 19968: 0xEFDE, + 26642 - 19968: 0xE2E3, + 26643 - 19968: 0xEEFB, + 26646 - 19968: 0xDFF7, + 26647 - 19968: 0xD7CA, + 26657 - 19968: 0xCEE8, + 26658 - 19968: 0xDBDB, + 26666 - 19968: 0xF1BB, + 26671 - 19968: 0xE9F1, + 26680 - 19968: 0xFAB7, + 26681 - 19968: 0xD0C6, + 26684 - 19968: 0xCCAB, + 26685 - 19968: 0xEEA8, + 26688 - 19968: 0xCBFA, + 26689 - 19968: 0xF9F9, + 26690 - 19968: 0xCCFD, + 26691 - 19968: 0xD3FE, + 26696 - 19968: 0xE4D0, + 26702 - 19968: 0xF2EE, + 26704 - 19968: 0xD4D5, + 26705 - 19968: 0xDFCD, + 26707 - 19968: 0xFCB8, + 26708 - 19968: 0xD1D0, + 26733 - 19968: 0xF2CD, + 26742 - 19968: 0xF7D2, + 26751 - 19968: 0xCAD4, + 26753 - 19968: 0xD5D9, + 26757 - 19968: 0xD8DE, + 26767 - 19968: 0xCDD9, + 26771 - 19968: 0xEEA9, + 26772 - 19968: 0xF6BC, + 26775 - 19968: 0xCCDB, + 26781 - 19968: 0xF0C9, + 26783 - 19968: 0xFCFC, + 26785 - 19968: 0xE8C9, + 26786 - 19968: 0xF4FE, + 26791 - 19968: 0xE7FC, + 26792 - 19968: 0xD7DE, + 26797 - 19968: 0xDEDC, + 26799 - 19968: 0xF0AC, + 26800 - 19968: 0xCCFE, + 26801 - 19968: 0xCDE1, + 26803 - 19968: 0xE1BA, + 26805 - 19968: 0xDBEF, + 26806 - 19968: 0xDAB2, + 26820 - 19968: 0xD1A5, + 26821 - 19968: 0xDCB8, + 26825 - 19968: 0xD8F6, + 26827 - 19968: 0xD1A4, + 26829 - 19968: 0xCDE2, + 26834 - 19968: 0xDCEA, + 26837 - 19968: 0xF0F7, + 26839 - 19968: 0xF0CA, + 26840 - 19968: 0xD0BE, + 26842 - 19968: 0xDDDC, + 26847 - 19968: 0xD4D6, + 26848 - 19968: 0xD3D6, + 26855 - 19968: 0xEDD0, + 26856 - 19968: 0xCDA1, + 26862 - 19968: 0xDFB5, + 26866 - 19968: 0xDFF8, + 26873 - 19968: 0xD4A1, + 26874 - 19968: 0xCEB2, + 26880 - 19968: 0xE8CA, + 26885 - 19968: 0xEBF5, + 26893 - 19968: 0xE3D5, + 26894 - 19968: 0xF5D0, + 26898 - 19968: 0xF5A1, + 26919 - 19968: 0xD9A7, + 26928 - 19968: 0xE5AB, + 26941 - 19968: 0xE6CB, + 26943 - 19968: 0xF5F1, + 26954 - 19968: 0xE5C5, + 26963 - 19968: 0xF9A3, + 26964 - 19968: 0xE0DB, + 26965 - 19968: 0xF6EB, + 26967 - 19968: 0xCBF1, + 26969 - 19968: 0xD9EA, + 26970 - 19968: 0xF5A2, + 26974 - 19968: 0xD7D1, + 26976 - 19968: 0xD1F8, + 26977 - 19968: 0xEAF8, + 26978 - 19968: 0xEAF9, + 26979 - 19968: 0xDAB3, + 26984 - 19968: 0xEFDF, + 26987 - 19968: 0xF1EF, + 26989 - 19968: 0xE5F6, + 26990 - 19968: 0xEEBF, + 26991 - 19968: 0xE2E4, + 26997 - 19968: 0xD0BF, + 26999 - 19968: 0xFAAC, + 27000 - 19968: 0xF5D1, + 27001 - 19968: 0xE7B3, + 27029 - 19968: 0xE9BE, + 27035 - 19968: 0xF2CE, + 27036 - 19968: 0xDBB4, + 27045 - 19968: 0xFCCE, + 27047 - 19968: 0xDDEE, + 27054 - 19968: 0xE7B4, + 27060 - 19968: 0xD7B4, + 27067 - 19968: 0xF7B4, + 27073 - 19968: 0xCDBE, + 27075 - 19968: 0xDAE9, + 27083 - 19968: 0xCFB0, + 27084 - 19968: 0xF7D9, + 27085 - 19968: 0xF3E6, + 27088 - 19968: 0xCED9, + 27112 - 19968: 0xCEAA, + 27114 - 19968: 0xCBC8, + 27131 - 19968: 0xD0A7, + 27133 - 19968: 0xF0CB, + 27135 - 19968: 0xD0C7, + 27138 - 19968: 0xE4C5, + 27146 - 19968: 0xDBE0, + 27153 - 19968: 0xD5DA, + 27155 - 19968: 0xD7A7, + 27159 - 19968: 0xEEC0, + 27161 - 19968: 0xF8F6, + 27166 - 19968: 0xF5D2, + 27167 - 19968: 0xEDE9, + 27169 - 19968: 0xD9BC, + 27171 - 19968: 0xE5C6, + 27189 - 19968: 0xF5A3, + 27192 - 19968: 0xDAD4, + 27193 - 19968: 0xE2A7, + 27194 - 19968: 0xFBFC, + 27197 - 19968: 0xF1DC, + 27204 - 19968: 0xCAF4, + 27208 - 19968: 0xE8FA, + 27211 - 19968: 0xCEE9, + 27218 - 19968: 0xE9F8, + 27219 - 19968: 0xE2E5, + 27224 - 19968: 0xD0B9, + 27225 - 19968: 0xD4F2, + 27231 - 19968: 0xD1A6, + 27233 - 19968: 0xDFCE, + 27243 - 19968: 0xFCF4, + 27264 - 19968: 0xD3AA, + 27268 - 19968: 0xCCAC, + 27273 - 19968: 0xEFE0, + 27277 - 19968: 0xE5E5, + 27278 - 19968: 0xD0D5, + 27287 - 19968: 0xDBFC, + 27292 - 19968: 0xFCE6, + 27298 - 19968: 0xCBFE, + 27299 - 19968: 0xEDEA, + 27315 - 19968: 0xDEB1, + 27323 - 19968: 0xF9E3, + 27330 - 19968: 0xD4A2, + 27331 - 19968: 0xCFF6, + 27347 - 19968: 0xD6D0, + 27354 - 19968: 0xD5EA, + 27355 - 19968: 0xF1EE, + 27382 - 19968: 0xFACB, + 27387 - 19968: 0xE5A1, + 27396 - 19968: 0xD5B1, + 27402 - 19968: 0xCFED, + 27404 - 19968: 0xEDEB, + 27410 - 19968: 0xD5B2, + 27414 - 19968: 0xD5BC, + 27424 - 19968: 0xFDE2, + 27425 - 19968: 0xF3AD, + 27427 - 19968: 0xFDDB, + 27442 - 19968: 0xE9B0, + 27450 - 19968: 0xD1A7, + 27453 - 19968: 0xFDE3, + 27454 - 19968: 0xCEB3, + 27462 - 19968: 0xFDE4, + 27463 - 19968: 0xFACE, + 27468 - 19968: 0xCAB0, + 27470 - 19968: 0xF7A7, + 27472 - 19968: 0xCFB1, + 27487 - 19968: 0xE6A2, + 27489 - 19968: 0xFCB6, + 27490 - 19968: 0xF2AD, + 27491 - 19968: 0xEFE1, + 27492 - 19968: 0xF3AE, + 27493 - 19968: 0xDCC6, + 27494 - 19968: 0xD9EB, + 27498 - 19968: 0xE8E0, + 27506 - 19968: 0xE1A8, + 27511 - 19968: 0xD5F6, + 27512 - 19968: 0xCFFD, + 27515 - 19968: 0xDEDD, + 27519 - 19968: 0xD9D1, + 27523 - 19968: 0xE4EA, + 27524 - 19968: 0xF2CF, + 27526 - 19968: 0xF7BF, + 27529 - 19968: 0xE2E6, + 27530 - 19968: 0xE2A8, + 27542 - 19968: 0xE3D6, + 27544 - 19968: 0xEDD1, + 27550 - 19968: 0xE9F9, + 27566 - 19968: 0xD6B1, + 27567 - 19968: 0xDEB2, + 27570 - 19968: 0xE0E8, + 27573 - 19968: 0xD3AB, + 27575 - 19968: 0xEBDC, + 27578 - 19968: 0xDFAF, + 27580 - 19968: 0xCAC3, + 27583 - 19968: 0xEEFC, + 27585 - 19968: 0xFDC3, + 27589 - 19968: 0xEBF6, + 27590 - 19968: 0xCFB2, + 27595 - 19968: 0xD9EC, + 27597 - 19968: 0xD9BD, + 27599 - 19968: 0xD8DF, + 27602 - 19968: 0xD4B8, + 27603 - 19968: 0xEBBE, + 27604 - 19968: 0xDDEF, + 27606 - 19968: 0xDDF0, + 27607 - 19968: 0xDDF1, + 27608 - 19968: 0xDDF2, + 27611 - 19968: 0xD9BE, + 27627 - 19968: 0xFBC6, + 27628 - 19968: 0xCFB3, + 27656 - 19968: 0xEEFD, + 27663 - 19968: 0xE4AB, + 27665 - 19968: 0xDAC5, + 27667 - 19968: 0xD8EC, + 27683 - 19968: 0xD1A8, + 27700 - 19968: 0xE2A9, + 27703 - 19968: 0xDEBC, + 27704 - 19968: 0xE7B5, + 27710 - 19968: 0xDBF0, + 27712 - 19968: 0xEFE2, + 27713 - 19968: 0xF1F0, + 27714 - 19968: 0xCFB4, + 27726 - 19968: 0xDBF1, + 27728 - 19968: 0xE0B1, + 27733 - 19968: 0xDFA5, + 27735 - 19968: 0xF9D2, + 27738 - 19968: 0xE7FD, + 27741 - 19968: 0xE6A3, + 27742 - 19968: 0xFBF1, + 27743 - 19968: 0xCBB0, + 27744 - 19968: 0xF2AE, + 27752 - 19968: 0xCDE7, + 27754 - 19968: 0xE8DC, + 27757 - 19968: 0xE7D7, + 27760 - 19968: 0xF7C0, + 27762 - 19968: 0xD0E3, + 27766 - 19968: 0xDAA1, + 27770 - 19968: 0xCCBD, + 27773 - 19968: 0xD1A9, + 27774 - 19968: 0xDDCC, + 27777 - 19968: 0xE3FE, + 27778 - 19968: 0xD1AA, + 27779 - 19968: 0xE8AA, + 27781 - 19968: 0xEAB6, + 27782 - 19968: 0xF9FA, + 27783 - 19968: 0xE6CC, + 27784 - 19968: 0xF6D8, + 27788 - 19968: 0xD4C7, + 27792 - 19968: 0xD9CB, + 27794 - 19968: 0xD9D2, + 27795 - 19968: 0xD3CB, + 27796 - 19968: 0xD8F7, + 27797 - 19968: 0xDAA9, + 27798 - 19968: 0xF5F8, + 27801 - 19968: 0xDEDE, + 27802 - 19968: 0xF2AF, + 27803 - 19968: 0xF8A9, + 27819 - 19968: 0xD8C8, + 27822 - 19968: 0xEEC1, + 27827 - 19968: 0xF9C1, + 27832 - 19968: 0xDDF3, + 27833 - 19968: 0xEAFA, + 27835 - 19968: 0xF6BD, + 27836 - 19968: 0xE1BB, + 27837 - 19968: 0xCDBF, + 27838 - 19968: 0xF4D4, + 27839 - 19968: 0xE6CD, + 27841 - 19968: 0xFCCF, + 27842 - 19968: 0xFBA2, + 27844 - 19968: 0xE0DC, + 27849 - 19968: 0xF4BB, + 27850 - 19968: 0xDAD5, + 27852 - 19968: 0xF9B2, + 27859 - 19968: 0xFBF2, + 27861 - 19968: 0xDBF6, + 27863 - 19968: 0xDEDF, + 27867 - 19968: 0xDBF2, + 27873 - 19968: 0xF8DC, + 27874 - 19968: 0xF7EE, + 27875 - 19968: 0xEBE8, + 27877 - 19968: 0xD2FA, + 27880 - 19968: 0xF1BC, + 27883 - 19968: 0xFADA, + 27886 - 19968: 0xDAEA, + 27887 - 19968: 0xDAC6, + 27888 - 19968: 0xF7C1, + 27891 - 19968: 0xE7B6, + 27915 - 19968: 0xE5C7, + 27916 - 19968: 0xD6AC, + 27921 - 19968: 0xDCC7, + 27927 - 19968: 0xE1A9, + 27929 - 19968: 0xE2AA, + 27931 - 19968: 0xD5A6, + 27934 - 19968: 0xD4D7, + 27941 - 19968: 0xF2D0, + 27943 - 19968: 0xEAFB, + 27945 - 19968: 0xE0DD, + 27946 - 19968: 0xFBF3, + 27954 - 19968: 0xF1BD, + 27957 - 19968: 0xE2E7, + 27958 - 19968: 0xFDD7, + 27960 - 19968: 0xCEC8, + 27961 - 19968: 0xEAB7, + 27963 - 19968: 0xFCC0, + 27965 - 19968: 0xFDE7, + 27966 - 19968: 0xF7EF, + 27969 - 19968: 0xD7B5, + 27993 - 19968: 0xEFBA, + 27994 - 19968: 0xF1DD, + 27996 - 19968: 0xDEB3, + 28003 - 19968: 0xE8CB, + 28006 - 19968: 0xF8DD, + 28009 - 19968: 0xFBC7, + 28010 - 19968: 0xD5C8, + 28012 - 19968: 0xD7DF, + 28014 - 19968: 0xDDA9, + 28020 - 19968: 0xE9B1, + 28023 - 19968: 0xFAAD, + 28024 - 19968: 0xF6D9, + 28025 - 19968: 0xFAF4, + 28031 - 19968: 0xF8AA, + 28037 - 19968: 0xE6EE, + 28039 - 19968: 0xCCDC, + 28040 - 19968: 0xE1BC, + 28041 - 19968: 0xE0EF, + 28044 - 19968: 0xE9BF, + 28045 - 19968: 0xFCFD, + 28046 - 19968: 0xE6CE, + 28049 - 19968: 0xE1D7, + 28051 - 19968: 0xE6CF, + 28053 - 19968: 0xF4F1, + 28079 - 19968: 0xE4F3, + 28082 - 19968: 0xE4FB, + 28085 - 19968: 0xF9E4, + 28096 - 19968: 0xEFE3, + 28099 - 19968: 0xCFEE, + 28100 - 19968: 0xF6BE, + 28101 - 19968: 0xE0B2, + 28102 - 19968: 0xFCFE, + 28103 - 19968: 0xD1AB, + 28107 - 19968: 0xD7FA, + 28111 - 19968: 0xFBC8, + 28113 - 19968: 0xE2D7, + 28120 - 19968: 0xD4A3, + 28121 - 19968: 0xF0F8, + 28122 - 19968: 0xD7A8, + 28126 - 19968: 0xE1E7, + 28129 - 19968: 0xD3BF, + 28136 - 19968: 0xEFE4, + 28138 - 19968: 0xD7C5, + 28139 - 19968: 0xEBE2, + 28142 - 19968: 0xFCE7, + 28145 - 19968: 0xE4A2, + 28147 - 19968: 0xE2E8, + 28149 - 19968: 0xE6D0, + 28151 - 19968: 0xFBE8, + 28152 - 19968: 0xF4E8, + 28153 - 19968: 0xE5F4, + 28154 - 19968: 0xF4BC, + 28155 - 19968: 0xF4D5, + 28183 - 19968: 0xDFB6, + 28185 - 19968: 0xFCB9, + 28186 - 19968: 0xEEC2, + 28187 - 19968: 0xCAF5, + 28191 - 19968: 0xEFE5, + 28192 - 19968: 0xCBE2, + 28193 - 19968: 0xD4A4, + 28195 - 19968: 0xDEE0, + 28196 - 19968: 0xDAFD, + 28197 - 19968: 0xE4C6, + 28198 - 19968: 0xE8BE, + 28203 - 19968: 0xE0DE, + 28204 - 19968: 0xF6B4, + 28205 - 19968: 0xEAD2, + 28207 - 19968: 0xF9FB, + 28210 - 19968: 0xE0C2, + 28212 - 19968: 0xCAE4, + 28214 - 19968: 0xE7B7, + 28216 - 19968: 0xEAFD, + 28218 - 19968: 0xD9DD, + 28220 - 19968: 0xDAB4, + 28221 - 19968: 0xEEAA, + 28222 - 19968: 0xFBE9, + 28227 - 19968: 0xDBCB, + 28228 - 19968: 0xDAB5, + 28234 - 19968: 0xF1BE, + 28237 - 19968: 0xD3AC, + 28246 - 19968: 0xFBC9, + 28248 - 19968: 0xDFCF, + 28251 - 19968: 0xD3C0, + 28252 - 19968: 0xE3D7, + 28254 - 19968: 0xEFE6, + 28255 - 19968: 0xFCD0, + 28263 - 19968: 0xE9C0, + 28267 - 19968: 0xF5D3, + 28270 - 19968: 0xECDC, + 28271 - 19968: 0xF7B7, + 28274 - 19968: 0xEAB8, + 28275 - 19968: 0xD1F9, + 28282 - 19968: 0xDCC8, + 28304 - 19968: 0xEAB9, + 28310 - 19968: 0xF1DE, + 28316 - 19968: 0xD7B6, + 28317 - 19968: 0xCFB5, + 28319 - 19968: 0xD9A8, + 28322 - 19968: 0xECEE, + 28325 - 19968: 0xDDAA, + 28330 - 19968: 0xCDA2, + 28331 - 19968: 0xE8AE, + 28335 - 19968: 0xE1BD, + 28337 - 19968: 0xF2D1, + 28342 - 19968: 0xE9C1, + 28346 - 19968: 0xD2FC, + 28354 - 19968: 0xDBB5, + 28356 - 19968: 0xF3E7, + 28357 - 19968: 0xD8FE, + 28361 - 19968: 0xFCD1, + 28363 - 19968: 0xEDB2, + 28364 - 19968: 0xF4AF, + 28366 - 19968: 0xFBA3, + 28369 - 19968: 0xFCC1, + 28371 - 19968: 0xEEAB, + 28372 - 19968: 0xD4A5, + 28399 - 19968: 0xF4F2, + 28404 - 19968: 0xEED9, + 28408 - 19968: 0xFBCA, + 28414 - 19968: 0xCDE3, + 28415 - 19968: 0xD8BB, + 28417 - 19968: 0xE5DB, + 28418 - 19968: 0xF8F7, + 28422 - 19968: 0xF6D4, + 28431 - 19968: 0xD7A9, + 28433 - 19968: 0xCBC9, + 28436 - 19968: 0xE6D1, + 28437 - 19968: 0xF0CC, + 28448 - 19968: 0xD8AE, + 28450 - 19968: 0xF9D3, + 28451 - 19968: 0xD5FE, + 28459 - 19968: 0xD8BC, + 28460 - 19968: 0xF2B0, + 28465 - 19968: 0xE2AB, + 28466 - 19968: 0xF3E8, + 28472 - 19968: 0xEFC2, + 28479 - 19968: 0xEDEC, + 28481 - 19968: 0xE7B8, + 28497 - 19968: 0xDAFE, + 28500 - 19968: 0xCCBE, + 28503 - 19968: 0xF2FC, + 28504 - 19968: 0xDAEB, + 28506 - 19968: 0xE2D8, + 28507 - 19968: 0xEDD6, + 28510 - 19968: 0xD6D1, + 28511 - 19968: 0xE0B3, + 28514 - 19968: 0xFCD2, + 28516 - 19968: 0xEBC8, + 28525 - 19968: 0xD3C1, + 28526 - 19968: 0xF0CD, + 28528 - 19968: 0xCFF7, + 28538 - 19968: 0xEDD2, + 28540 - 19968: 0xD4D8, + 28541 - 19968: 0xDCC9, + 28542 - 19968: 0xD7F1, + 28545 - 19968: 0xDFBB, + 28548 - 19968: 0xF3A5, + 28552 - 19968: 0xF4CD, + 28557 - 19968: 0xF1BF, + 28558 - 19968: 0xF8B1, + 28560 - 19968: 0xE9FA, + 28564 - 19968: 0xFBCB, + 28567 - 19968: 0xCAD5, + 28579 - 19968: 0xF9D4, + 28580 - 19968: 0xF7CA, + 28583 - 19968: 0xD6C8, + 28590 - 19968: 0xFCE8, + 28591 - 19968: 0xF3BD, + 28593 - 19968: 0xEEFE, + 28595 - 19968: 0xE7FE, + 28601 - 19968: 0xD3C2, + 28606 - 19968: 0xD3B6, + 28608 - 19968: 0xCCAD, + 28609 - 19968: 0xF6FA, + 28610 - 19968: 0xD6B2, + 28611 - 19968: 0xD2D8, + 28618 - 19968: 0xE7D8, + 28629 - 19968: 0xE3A5, + 28634 - 19968: 0xE7B9, + 28639 - 19968: 0xF0AD, + 28640 - 19968: 0xFBCC, + 28641 - 19968: 0xEBA1, + 28644 - 19968: 0xD4A6, + 28649 - 19968: 0xFBCD, + 28651 - 19968: 0xD5BD, + 28652 - 19968: 0xF1DF, + 28655 - 19968: 0xF6FB, + 28657 - 19968: 0xDEB4, + 28670 - 19968: 0xD5EB, + 28673 - 19968: 0xE5C8, + 28677 - 19968: 0xFBA4, + 28678 - 19968: 0xD4B9, + 28681 - 19968: 0xDEE1, + 28683 - 19968: 0xE4A3, + 28687 - 19968: 0xD7B7, + 28689 - 19968: 0xF8EE, + 28693 - 19968: 0xDEB5, + 28696 - 19968: 0xD6D2, + 28698 - 19968: 0xF9D5, + 28699 - 19968: 0xE7BA, + 28700 - 19968: 0xEBD5, + 28701 - 19968: 0xD5F7, + 28702 - 19968: 0xEFE7, + 28703 - 19968: 0xE1BE, + 28707 - 19968: 0xFAAE, + 28711 - 19968: 0xD6E9, + 28712 - 19968: 0xD6EE, + 28719 - 19968: 0xE7BB, + 28727 - 19968: 0xECCB, + 28734 - 19968: 0xD5B3, + 28748 - 19968: 0xCEB4, + 28752 - 19968: 0xFBA5, + 28753 - 19968: 0xE1EE, + 28760 - 19968: 0xF7A8, + 28765 - 19968: 0xFBCE, + 28771 - 19968: 0xD8BD, + 28779 - 19968: 0xFBFD, + 28784 - 19968: 0xFCE9, + 28792 - 19968: 0xCFB6, + 28796 - 19968: 0xEDC7, + 28797 - 19968: 0xEEAC, + 28805 - 19968: 0xCCDD, + 28810 - 19968: 0xF6A7, + 28814 - 19968: 0xE6FA, + 28818 - 19968: 0xF5A4, + 28824 - 19968: 0xFDDC, + 28825 - 19968: 0xEDB3, + 28826 - 19968: 0xCEC9, + 28833 - 19968: 0xEFE8, + 28836 - 19968: 0xE1BF, + 28843 - 19968: 0xFADB, + 28844 - 19968: 0xCBE3, + 28845 - 19968: 0xF7A9, + 28847 - 19968: 0xFBA6, + 28851 - 19968: 0xDCB9, + 28855 - 19968: 0xF1C0, + 28856 - 19968: 0xEDC8, + 28857 - 19968: 0xEFC3, + 28872 - 19968: 0xD6AD, + 28875 - 19968: 0xFDCE, + 28879 - 19968: 0xE8A1, + 28888 - 19968: 0xFBF4, + 28889 - 19968: 0xD5A7, + 28893 - 19968: 0xF1F6, + 28895 - 19968: 0xE6D3, + 28913 - 19968: 0xCCDE, + 28921 - 19968: 0xF8B2, + 28925 - 19968: 0xDCEB, + 28932 - 19968: 0xFDB6, + 28937 - 19968: 0xE5EA, + 28940 - 19968: 0xF1E0, + 28953 - 19968: 0xDBCC, + 28954 - 19968: 0xDDCD, + 28958 - 19968: 0xD4C8, + 28961 - 19968: 0xD9ED, + 28966 - 19968: 0xF5A5, + 28976 - 19968: 0xE6FB, + 28982 - 19968: 0xE6D4, + 28999 - 19968: 0xFDC8, + 29001 - 19968: 0xD6A1, + 29002 - 19968: 0xFDBF, + 29004 - 19968: 0xFCD3, + 29006 - 19968: 0xEFA1, + 29008 - 19968: 0xE7BC, + 29014 - 19968: 0xD1EE, + 29017 - 19968: 0xE6D5, + 29020 - 19968: 0xE9F2, + 29022 - 19968: 0xDFB0, + 29028 - 19968: 0xD8E0, + 29029 - 19968: 0xFCBA, + 29030 - 19968: 0xFDAF, + 29031 - 19968: 0xF0CE, + 29033 - 19968: 0xDBE1, + 29036 - 19968: 0xE5C9, + 29038 - 19968: 0xEDB4, + 29053 - 19968: 0xE0C3, + 29060 - 19968: 0xE3D8, + 29065 - 19968: 0xE9FB, + 29066 - 19968: 0xEAA8, + 29071 - 19968: 0xFDB7, + 29074 - 19968: 0xFBA7, + 29076 - 19968: 0xE9C2, + 29081 - 19968: 0xFDF7, + 29087 - 19968: 0xE2D9, + 29090 - 19968: 0xDCEC, + 29100 - 19968: 0xE8A2, + 29105 - 19968: 0xE6F0, + 29113 - 19968: 0xFDF8, + 29114 - 19968: 0xFDF9, + 29118 - 19968: 0xF6BF, + 29121 - 19968: 0xE7A7, + 29123 - 19968: 0xE6D7, + 29128 - 19968: 0xD4F3, + 29129 - 19968: 0xD4C9, + 29134 - 19968: 0xD6FA, + 29136 - 19968: 0xD7F2, + 29138 - 19968: 0xE1C0, + 29140 - 19968: 0xDBE2, + 29141 - 19968: 0xE6D8, + 29151 - 19968: 0xE7BD, + 29157 - 19968: 0xF0CF, + 29158 - 19968: 0xF3BE, + 29159 - 19968: 0xE2AC, + 29165 - 19968: 0xF5B7, + 29166 - 19968: 0xE0F0, + 29179 - 19968: 0xFDB8, + 29180 - 19968: 0xE3E8, + 29182 - 19968: 0xD4A7, + 29183 - 19968: 0xE8FC, + 29184 - 19968: 0xFAD2, + 29190 - 19968: 0xF8EF, + 29200 - 19968: 0xD6D3, + 29211 - 19968: 0xD5B4, + 29226 - 19968: 0xF0D0, + 29228 - 19968: 0xF7F0, + 29229 - 19968: 0xEEB3, + 29232 - 19968: 0xEABA, + 29234 - 19968: 0xEAD3, + 29237 - 19968: 0xEDC9, + 29238 - 19968: 0xDDAB, + 29242 - 19968: 0xE5AC, + 29243 - 19968: 0xFDA1, + 29245 - 19968: 0xDFD0, + 29246 - 19968: 0xECB3, + 29248 - 19968: 0xDFD1, + 29254 - 19968: 0xEDED, + 29255 - 19968: 0xF8B8, + 29256 - 19968: 0xF7FA, + 29260 - 19968: 0xF8AB, + 29266 - 19968: 0xF4E0, + 29272 - 19968: 0xD4BA, + 29273 - 19968: 0xE4B3, + 29275 - 19968: 0xE9DA, + 29277 - 19968: 0xDEB6, + 29279 - 19968: 0xD9BF, + 29281 - 19968: 0xD9C0, + 29282 - 19968: 0xD6EF, + 29287 - 19968: 0xD9CC, + 29289 - 19968: 0xDAAA, + 29298 - 19968: 0xDFE5, + 29305 - 19968: 0xF7E5, + 29309 - 19968: 0xCCB2, + 29312 - 19968: 0xDFF9, + 29313 - 19968: 0xD7E0, + 29346 - 19968: 0xD4BB, + 29351 - 19968: 0xFDFA, + 29356 - 19968: 0xCCB3, + 29359 - 19968: 0xDBF3, + 29376 - 19968: 0xDFD2, + 29378 - 19968: 0xCECA, + 29380 - 19968: 0xEEDA, + 29390 - 19968: 0xE4E4, + 29392 - 19968: 0xFBCF, + 29399 - 19968: 0xCFB7, + 29401 - 19968: 0xEEC3, + 29409 - 19968: 0xCEEA, + 29417 - 19968: 0xE2AD, + 29432 - 19968: 0xD7E1, + 29433 - 19968: 0xFAF5, + 29436 - 19968: 0xD5C9, + 29437 - 19968: 0xF8AC, + 29450 - 19968: 0xE7D9, + 29462 - 19968: 0xF3E9, + 29467 - 19968: 0xD8ED, + 29468 - 19968: 0xE3C4, + 29469 - 19968: 0xF0F1, + 29477 - 19968: 0xE8E5, + 29481 - 19968: 0xE0FA, + 29482 - 19968: 0xEEC4, + 29483 - 19968: 0xD9DE, + 29494 - 19968: 0xEBA2, + 29495 - 19968: 0xEBA3, + 29502 - 19968: 0xFCC2, + 29503 - 19968: 0xEABB, + 29508 - 19968: 0xE8AB, + 29509 - 19968: 0xDEE2, + 29520 - 19968: 0xEDEF, + 29522 - 19968: 0xE8A3, + 29527 - 19968: 0xCFF1, + 29544 - 19968: 0xD4BC, + 29546 - 19968: 0xFCEA, + 29552 - 19968: 0xE7BE, + 29554 - 19968: 0xFCF2, + 29557 - 19968: 0xD6B4, + 29560 - 19968: 0xE2AE, + 29562 - 19968: 0xD3B7, + 29563 - 19968: 0xFACC, + 29572 - 19968: 0xFADC, + 29574 - 19968: 0xEDB5, + 29575 - 19968: 0xE1E3, + 29577 - 19968: 0xE8AC, + 29579 - 19968: 0xE8DD, + 29582 - 19968: 0xEFE9, + 29588 - 19968: 0xF4BD, + 29590 - 19968: 0xCFB8, + 29591 - 19968: 0xE9DB, + 29592 - 19968: 0xD1AC, + 29599 - 19968: 0xDAC7, + 29607 - 19968: 0xEBC9, + 29609 - 19968: 0xE8CC, + 29613 - 19968: 0xDEB7, + 29618 - 19968: 0xD6BC, + 29619 - 19968: 0xD3E5, + 29625 - 19968: 0xFADD, + 29632 - 19968: 0xDAD6, + 29634 - 19968: 0xCAB1, + 29641 - 19968: 0xDAC8, + 29642 - 19968: 0xDFA6, + 29644 - 19968: 0xF9B3, + 29645 - 19968: 0xF2D2, + 29647 - 19968: 0xCAC4, + 29654 - 19968: 0xCECB, + 29657 - 19968: 0xCDF5, + 29661 - 19968: 0xFDB0, + 29662 - 19968: 0xD5A8, + 29664 - 19968: 0xF1C1, + 29667 - 19968: 0xE2E9, + 29668 - 19968: 0xDCCA, + 29669 - 19968: 0xECB4, + 29670 - 19968: 0xFAC0, + 29673 - 19968: 0xFBA8, + 29674 - 19968: 0xD0A8, + 29677 - 19968: 0xDAEC, + 29687 - 19968: 0xD9EE, + 29689 - 19968: 0xE0FB, + 29693 - 19968: 0xEFEA, + 29694 - 19968: 0xFADE, + 29697 - 19968: 0xE0C4, + 29699 - 19968: 0xCFB9, + 29701 - 19968: 0xD5CA, + 29702 - 19968: 0xD7E2, + 29703 - 19968: 0xE2AF, + 29705 - 19968: 0xD7B8, + 29715 - 19968: 0xE8CD, + 29723 - 19968: 0xF6DA, + 29728 - 19968: 0xEFA2, + 29729 - 19968: 0xE2DA, + 29730 - 19968: 0xF6FC, + 29733 - 19968: 0xFBD0, + 29734 - 19968: 0xD1AD, + 29736 - 19968: 0xCDE4, + 29738 - 19968: 0xD1AE, + 29739 - 19968: 0xDCED, + 29740 - 19968: 0xE8CE, + 29742 - 19968: 0xF0F9, + 29743 - 19968: 0xCEB5, + 29744 - 19968: 0xE6FC, + 29747 - 19968: 0xD7FB, + 29748 - 19968: 0xD0D6, + 29749 - 19968: 0xDDF5, + 29750 - 19968: 0xF7F1, + 29752 - 19968: 0xF6FD, + 29754 - 19968: 0xDBF7, + 29759 - 19968: 0xFBEA, + 29760 - 19968: 0xE9DC, + 29761 - 19968: 0xD9C1, + 29763 - 19968: 0xF5F2, + 29764 - 19968: 0xE0C5, + 29771 - 19968: 0xEAD4, + 29781 - 19968: 0xF9C2, + 29783 - 19968: 0xEABC, + 29785 - 19968: 0xD2C5, + 29786 - 19968: 0xFBD1, + 29787 - 19968: 0xE7C0, + 29788 - 19968: 0xEBA5, + 29790 - 19968: 0xDFFA, + 29791 - 19968: 0xE3A2, + 29792 - 19968: 0xD7B9, + 29794 - 19968: 0xE9C3, + 29796 - 19968: 0xE8FD, + 29797 - 19968: 0xE8AF, + 29800 - 19968: 0xF2D3, + 29801 - 19968: 0xFBA9, + 29802 - 19968: 0xD8A5, + 29807 - 19968: 0xD5CB, + 29822 - 19968: 0xD0C8, + 29826 - 19968: 0xD1AF, + 29827 - 19968: 0xD7E3, + 29831 - 19968: 0xE0C6, + 29833 - 19968: 0xD6A2, + 29835 - 19968: 0xEDF0, + 29848 - 19968: 0xD7F3, + 29852 - 19968: 0xFCD4, + 29854 - 19968: 0xDAD7, + 29855 - 19968: 0xCCDF, + 29857 - 19968: 0xF2D4, + 29859 - 19968: 0xD1B0, + 29861 - 19968: 0xCCE0, + 29863 - 19968: 0xDBFD, + 29864 - 19968: 0xF3BF, + 29866 - 19968: 0xF0D1, + 29872 - 19968: 0xFCBB, + 29874 - 19968: 0xE2B0, + 29877 - 19968: 0xE6A5, + 29881 - 19968: 0xE2DB, + 29885 - 19968: 0xDFDE, + 29887 - 19968: 0xE0C7, + 29894 - 19968: 0xF2EF, + 29898 - 19968: 0xCCE1, + 29903 - 19968: 0xD6EA, + 29908 - 19968: 0xE7C2, + 29912 - 19968: 0xCEB6, + 29914 - 19968: 0xF3C0, + 29916 - 19968: 0xCDFE, + 29920 - 19968: 0xFBD2, + 29922 - 19968: 0xF8F8, + 29923 - 19968: 0xF7FB, + 29926 - 19968: 0xE8BF, + 29934 - 19968: 0xE8B7, + 29943 - 19968: 0xEDB6, + 29953 - 19968: 0xDCBA, + 29956 - 19968: 0xCCB4, + 29969 - 19968: 0xF1F7, + 29973 - 19968: 0xE8B8, + 29976 - 19968: 0xCAF6, + 29978 - 19968: 0xE4A4, + 29979 - 19968: 0xF4D6, + 29983 - 19968: 0xDFE6, + 29987 - 19968: 0xDFA7, + 29989 - 19968: 0xDFE7, + 29990 - 19968: 0xE1C1, + 29992 - 19968: 0xE9C4, + 29995 - 19968: 0xDCCB, + 29996 - 19968: 0xE9C5, + 30000 - 19968: 0xEFA3, + 30001 - 19968: 0xEBA6, + 30002 - 19968: 0xCBA3, + 30003 - 19968: 0xE3E9, + 30007 - 19968: 0xD1FB, + 30008 - 19968: 0xEFA4, + 30010 - 19968: 0xEFEB, + 30023 - 19968: 0xD0B4, + 30028 - 19968: 0xCDA3, + 30031 - 19968: 0xE8E6, + 30033 - 19968: 0xEFA5, + 30035 - 19968: 0xD3CC, + 30036 - 19968: 0xDAED, + 30041 - 19968: 0xD7BA, + 30043 - 19968: 0xF2D5, + 30044 - 19968: 0xF5E5, + 30045 - 19968: 0xD9EF, + 30050 - 19968: 0xF9B4, + 30053 - 19968: 0xD5D4, + 30054 - 19968: 0xFDCF, + 30058 - 19968: 0xDBE3, + 30063 - 19968: 0xF1E1, + 30064 - 19968: 0xECB6, + 30069 - 19968: 0xFBFE, + 30070 - 19968: 0xD3D7, + 30072 - 19968: 0xD1B1, + 30074 - 19968: 0xCBB1, + 30079 - 19968: 0xD1B2, + 30086 - 19968: 0xCBB2, + 30087 - 19968: 0xF1C2, + 30090 - 19968: 0xF4E1, + 30091 - 19968: 0xF9B5, + 30094 - 19968: 0xE1C3, + 30095 - 19968: 0xE1C2, + 30097 - 19968: 0xEBF7, + 30109 - 19968: 0xDFA8, + 30117 - 19968: 0xCBCA, + 30123 - 19968: 0xE6B9, + 30129 - 19968: 0xF8DE, + 30130 - 19968: 0xF9AA, + 30131 - 19968: 0xCAF7, + 30133 - 19968: 0xEDB7, + 30136 - 19968: 0xD3B8, + 30137 - 19968: 0xF2D6, + 30140 - 19968: 0xD4D9, + 30141 - 19968: 0xEEC5, + 30142 - 19968: 0xF2F0, + 30146 - 19968: 0xCAB2, + 30149 - 19968: 0xDCBB, + 30151 - 19968: 0xF1F8, + 30157 - 19968: 0xECB7, + 30162 - 19968: 0xE5CA, + 30164 - 19968: 0xF6C0, + 30165 - 19968: 0xFDDD, + 30168 - 19968: 0xD4E3, + 30169 - 19968: 0xCCE2, + 30171 - 19968: 0xF7D4, + 30178 - 19968: 0xD7E5, + 30192 - 19968: 0xD3C3, + 30194 - 19968: 0xD8A6, + 30196 - 19968: 0xF6C1, + 30202 - 19968: 0xDDF6, + 30204 - 19968: 0xCDC0, + 30208 - 19968: 0xE5DC, + 30221 - 19968: 0xE5CB, + 30233 - 19968: 0xE1C4, + 30239 - 19968: 0xE8B0, + 30240 - 19968: 0xF4B0, + 30241 - 19968: 0xF3EA, + 30242 - 19968: 0xDAEE, + 30244 - 19968: 0xD7BB, + 30246 - 19968: 0xE2B1, + 30267 - 19968: 0xD7AA, + 30274 - 19968: 0xD6FB, + 30284 - 19968: 0xE4DF, + 30286 - 19968: 0xCAD6, + 30290 - 19968: 0xEBA8, + 30294 - 19968: 0xDBFE, + 30305 - 19968: 0xF6C2, + 30308 - 19968: 0xEFBB, + 30313 - 19968: 0xD4FD, + 30316 - 19968: 0xE0C8, + 30320 - 19968: 0xE8B9, + 30322 - 19968: 0xEFA6, + 30328 - 19968: 0xCDA4, + 30331 - 19968: 0xD4F4, + 30332 - 19968: 0xDBA1, + 30333 - 19968: 0xDBDC, + 30334 - 19968: 0xDBDD, + 30340 - 19968: 0xEEDC, + 30342 - 19968: 0xCBCB, + 30343 - 19968: 0xFCD5, + 30350 - 19968: 0xCEEB, + 30352 - 19968: 0xCDC1, + 30355 - 19968: 0xFBD3, + 30382 - 19968: 0xF9AB, + 30394 - 19968: 0xF5D4, + 30399 - 19968: 0xD9A9, + 30402 - 19968: 0xE9DD, + 30403 - 19968: 0xDBCD, + 30406 - 19968: 0xDDCE, + 30408 - 19968: 0xE7C3, + 30410 - 19968: 0xECCC, + 30418 - 19968: 0xF9EC, + 30422 - 19968: 0xCBCC, + 30427 - 19968: 0xE0FC, + 30428 - 19968: 0xD4A8, + 30430 - 19968: 0xEDD3, + 30431 - 19968: 0xD8EF, + 30433 - 19968: 0xF2D7, + 30435 - 19968: 0xCAF8, + 30436 - 19968: 0xDAEF, + 30439 - 19968: 0xD6D4, + 30446 - 19968: 0xD9CD, + 30450 - 19968: 0xD8EE, + 30452 - 19968: 0xF2C1, + 30456 - 19968: 0xDFD3, + 30460 - 19968: 0xDAF0, + 30462 - 19968: 0xE2EA, + 30465 - 19968: 0xE0FD, + 30468 - 19968: 0xD8F8, + 30472 - 19968: 0xF7AF, + 30473 - 19968: 0xDAB6, + 30475 - 19968: 0xCAD7, + 30494 - 19968: 0xF2D8, + 30496 - 19968: 0xD8F9, + 30505 - 19968: 0xFADF, + 30519 - 19968: 0xCFEF, + 30520 - 19968: 0xD9C2, + 30522 - 19968: 0xF0D2, + 30524 - 19968: 0xE4D1, + 30528 - 19968: 0xF3B7, + 30541 - 19968: 0xFAE0, + 30555 - 19968: 0xEFEC, + 30561 - 19968: 0xE2B2, + 30563 - 19968: 0xD4BD, + 30566 - 19968: 0xD9CE, + 30571 - 19968: 0xF4E2, + 30585 - 19968: 0xD4A9, + 30590 - 19968: 0xCDC2, + 30591 - 19968: 0xE7DA, + 30603 - 19968: 0xF2D9, + 30609 - 19968: 0xD9AA, + 30622 - 19968: 0xD8BE, + 30629 - 19968: 0xDCAD, + 30636 - 19968: 0xE2EB, + 30637 - 19968: 0xD6FC, + 30640 - 19968: 0xCAF9, + 30643 - 19968: 0xD4DA, + 30651 - 19968: 0xF4D7, + 30652 - 19968: 0xCCA1, + 30655 - 19968: 0xCFBA, + 30679 - 19968: 0xF5B8, + 30683 - 19968: 0xD9C3, + 30684 - 19968: 0xD0E8, + 30690 - 19968: 0xE3C5, + 30691 - 19968: 0xEBF8, + 30693 - 19968: 0xF2B1, + 30697 - 19968: 0xCFBB, + 30701 - 19968: 0xD3AD, + 30702 - 19968: 0xE8E1, + 30703 - 19968: 0xCEEC, + 30707 - 19968: 0xE0B4, + 30722 - 19968: 0xDEE3, + 30738 - 19968: 0xDDF7, + 30757 - 19968: 0xF2B2, + 30758 - 19968: 0xF3F6, + 30759 - 19968: 0xF6DB, + 30764 - 19968: 0xD7FE, + 30770 - 19968: 0xF8DF, + 30772 - 19968: 0xF7F2, + 30789 - 19968: 0xD0A9, + 30799 - 19968: 0xE6DA, + 30813 - 19968: 0xF5A6, + 30827 - 19968: 0xD7BC, + 30828 - 19968: 0xCCE3, + 30831 - 19968: 0xE6DB, + 30844 - 19968: 0xDDDD, + 30849 - 19968: 0xD1B3, + 30855 - 19968: 0xEFED, + 30860 - 19968: 0xD6DE, + 30861 - 19968: 0xE4F4, + 30862 - 19968: 0xE1EF, + 30865 - 19968: 0xDDF8, + 30871 - 19968: 0xE8CF, + 30883 - 19968: 0xCAE5, + 30887 - 19968: 0xDCA1, + 30889 - 19968: 0xE0B5, + 30906 - 19968: 0xFCAC, + 30907 - 19968: 0xFCAD, + 30908 - 19968: 0xD8A7, + 30913 - 19968: 0xEDB8, + 30917 - 19968: 0xDBB6, + 30922 - 19968: 0xD6F0, + 30923 - 19968: 0xF3AF, + 30926 - 19968: 0xCDA5, + 30928 - 19968: 0xDAF1, + 30952 - 19968: 0xD8A8, + 30956 - 19968: 0xCCE4, + 30959 - 19968: 0xD1B4, + 30965 - 19968: 0xCAD8, + 30971 - 19968: 0xDAF2, + 30977 - 19968: 0xF5A7, + 30990 - 19968: 0xF5A8, + 30998 - 19968: 0xE6A6, + 31018 - 19968: 0xD5EC, + 31019 - 19968: 0xD5F8, + 31020 - 19968: 0xDAF3, + 31034 - 19968: 0xE3C6, + 31038 - 19968: 0xDEE4, + 31040 - 19968: 0xDEE5, + 31041 - 19968: 0xD1B5, + 31047 - 19968: 0xD1B6, + 31048 - 19968: 0xD1B7, + 31049 - 19968: 0xF2B3, + 31056 - 19968: 0xE9DE, + 31062 - 19968: 0xF0D3, + 31063 - 19968: 0xF2B4, + 31066 - 19968: 0xF0D4, + 31067 - 19968: 0xCBE4, + 31068 - 19968: 0xFBD4, + 31069 - 19968: 0xF5E6, + 31070 - 19968: 0xE3EA, + 31072 - 19968: 0xDEE6, + 31077 - 19968: 0xDFD4, + 31080 - 19968: 0xF8F9, + 31085 - 19968: 0xF0AE, + 31098 - 19968: 0xD1B8, + 31103 - 19968: 0xD6DF, + 31105 - 19968: 0xD0D7, + 31117 - 19968: 0xFCA1, + 31118 - 19968: 0xEFEE, + 31119 - 19968: 0xDCD8, + 31121 - 19968: 0xE9DF, + 31142 - 19968: 0xE5DD, + 31143 - 19968: 0xFDFB, + 31146 - 19968: 0xE0C9, + 31150 - 19968: 0xD6C9, + 31153 - 19968: 0xD4AA, + 31155 - 19968: 0xE5CC, + 31161 - 19968: 0xE9E0, + 31165 - 19968: 0xD0D8, + 31166 - 19968: 0xFCA2, + 31167 - 19968: 0xD4BE, + 31168 - 19968: 0xE2B3, + 31169 - 19968: 0xDEE7, + 31177 - 19968: 0xDCBC, + 31178 - 19968: 0xD2B6, + 31179 - 19968: 0xF5D5, + 31185 - 19968: 0xCEA1, + 31186 - 19968: 0xF5A9, + 31189 - 19968: 0xDDF9, + 31192 - 19968: 0xDDFA, + 31199 - 19968: 0xF0D5, + 31204 - 19968: 0xF6DF, + 31206 - 19968: 0xF2DA, + 31207 - 19968: 0xE4EB, + 31209 - 19968: 0xF2F1, + 31227 - 19968: 0xECB9, + 31232 - 19968: 0xFDFC, + 31237 - 19968: 0xE1AA, + 31240 - 19968: 0xCAD9, + 31243 - 19968: 0xEFEF, + 31245 - 19968: 0xF5AA, + 31252 - 19968: 0xECF9, + 31255 - 19968: 0xF8AD, + 31257 - 19968: 0xF2C2, + 31258 - 19968: 0xF6C3, + 31260 - 19968: 0xD7D2, + 31263 - 19968: 0xF9A2, + 31264 - 19968: 0xF0D6, + 31278 - 19968: 0xF0FA, + 31281 - 19968: 0xF6E0, + 31286 - 19968: 0xE9F3, + 31287 - 19968: 0xF2C3, + 31291 - 19968: 0xD4AB, + 31292 - 19968: 0xCAB3, + 31293 - 19968: 0xCDA6, + 31295 - 19968: 0xCDC3, + 31296 - 19968: 0xCDDA, + 31302 - 19968: 0xD9CF, + 31305 - 19968: 0xF6C4, + 31309 - 19968: 0xEEDD, + 31310 - 19968: 0xE7C4, + 31319 - 19968: 0xE2B4, + 31329 - 19968: 0xDFE2, + 31330 - 19968: 0xE7DB, + 31337 - 19968: 0xE8B1, + 31339 - 19968: 0xFCAE, + 31344 - 19968: 0xE5CD, + 31348 - 19968: 0xFAEB, + 31350 - 19968: 0xCFBC, + 31353 - 19968: 0xCFE2, + 31354 - 19968: 0xCDF6, + 31357 - 19968: 0xEFF0, + 31359 - 19968: 0xF4BE, + 31361 - 19968: 0xD4CD, + 31364 - 19968: 0xF3B8, + 31368 - 19968: 0xE9A1, + 31378 - 19968: 0xF2F2, + 31379 - 19968: 0xF3EB, + 31381 - 19968: 0xF0D7, + 31384 - 19968: 0xCFD7, + 31391 - 19968: 0xCFDF, + 31401 - 19968: 0xE8C0, + 31402 - 19968: 0xE8C1, + 31406 - 19968: 0xCFE3, + 31407 - 19968: 0xE9A2, + 31418 - 19968: 0xD0AA, + 31428 - 19968: 0xF3C1, + 31429 - 19968: 0xD0AB, + 31431 - 19968: 0xD4E4, + 31434 - 19968: 0xEFBC, + 31435 - 19968: 0xD8A1, + 31447 - 19968: 0xD9DF, + 31449 - 19968: 0xF3D7, + 31453 - 19968: 0xDCBD, + 31455 - 19968: 0xCCE5, + 31456 - 19968: 0xEDF1, + 31459 - 19968: 0xF1E2, + 31461 - 19968: 0xD4DB, + 31466 - 19968: 0xE2B5, + 31469 - 19968: 0xCAE6, + 31471 - 19968: 0xD3AE, + 31478 - 19968: 0xCCE6, + 31481 - 19968: 0xF1D3, + 31482 - 19968: 0xF5E7, + 31487 - 19968: 0xCADA, + 31503 - 19968: 0xFBEE, + 31505 - 19968: 0xE1C5, + 31513 - 19968: 0xDFE9, + 31515 - 19968: 0xEEDE, + 31518 - 19968: 0xF7C2, + 31520 - 19968: 0xD8A2, + 31526 - 19968: 0xDDAC, + 31532 - 19968: 0xF0AF, + 31533 - 19968: 0xD6BD, + 31545 - 19968: 0xE1AB, + 31558 - 19968: 0xF9B6, + 31561 - 19968: 0xD4F5, + 31563 - 19968: 0xD0C9, + 31564 - 19968: 0xEFA7, + 31565 - 19968: 0xE2EC, + 31567 - 19968: 0xDBEA, + 31568 - 19968: 0xCECC, + 31569 - 19968: 0xF5E8, + 31570 - 19968: 0xF7D5, + 31572 - 19968: 0xD3CD, + 31574 - 19968: 0xF3FE, + 31584 - 19968: 0xD0B5, + 31596 - 19968: 0xE0FE, + 31598 - 19968: 0xDFFB, + 31605 - 19968: 0xE6DD, + 31613 - 19968: 0xE8A4, + 31623 - 19968: 0xCBCD, + 31627 - 19968: 0xEFA8, + 31631 - 19968: 0xEEB4, + 31636 - 19968: 0xDAD8, + 31637 - 19968: 0xD1B9, + 31639 - 19968: 0xDFA9, + 31642 - 19968: 0xF3B0, + 31645 - 19968: 0xCCC4, + 31649 - 19968: 0xCEB7, + 31661 - 19968: 0xEFA9, + 31665 - 19968: 0xDFD5, + 31668 - 19968: 0xEDD7, + 31672 - 19968: 0xEEC6, + 31680 - 19968: 0xEFBD, + 31681 - 19968: 0xFCD6, + 31684 - 19968: 0xDBF4, + 31686 - 19968: 0xEFAA, + 31687 - 19968: 0xF8B9, + 31689 - 19968: 0xF5E9, + 31698 - 19968: 0xE3D9, + 31712 - 19968: 0xE1C6, + 31716 - 19968: 0xD4BF, + 31721 - 19968: 0xDEE8, + 31751 - 19968: 0xF0EA, + 31762 - 19968: 0xF3C2, + 31774 - 19968: 0xD3AF, + 31777 - 19968: 0xCADB, + 31783 - 19968: 0xFCD7, + 31786 - 19968: 0xEDD8, + 31787 - 19968: 0xE1C7, + 31805 - 19968: 0xF4D8, + 31806 - 19968: 0xD6B3, + 31807 - 19968: 0xDDAD, + 31811 - 19968: 0xD5BE, + 31820 - 19968: 0xF1C3, + 31821 - 19968: 0xEEDF, + 31840 - 19968: 0xD6EB, + 31844 - 19968: 0xF4D9, + 31852 - 19968: 0xD7E6, + 31859 - 19968: 0xDAB7, + 31875 - 19968: 0xDDFB, + 31881 - 19968: 0xDDCF, + 31890 - 19968: 0xD8A3, + 31893 - 19968: 0xDAD9, + 31895 - 19968: 0xF0D8, + 31896 - 19968: 0xEFC4, + 31903 - 19968: 0xE1D8, + 31909 - 19968: 0xF1D4, + 31911 - 19968: 0xEDF2, + 31918 - 19968: 0xD5DB, + 31921 - 19968: 0xD5DC, + 31922 - 19968: 0xF3C4, + 31923 - 19968: 0xCBD7, + 31929 - 19968: 0xE2B6, + 31934 - 19968: 0xEFF1, + 31946 - 19968: 0xFBD5, + 31958 - 19968: 0xD3D8, + 31966 - 19968: 0xDDD0, + 31967 - 19968: 0xF0D9, + 31968 - 19968: 0xCBB3, + 31975 - 19968: 0xD5DD, + 31995 - 19968: 0xCDA7, + 31998 - 19968: 0xD0AC, + 32000 - 19968: 0xD1BA, + 32002 - 19968: 0xF1C4, + 32004 - 19968: 0xE5B3, + 32005 - 19968: 0xFBF5, + 32006 - 19968: 0xE9E1, + 32007 - 19968: 0xFDE0, + 32008 - 19968: 0xFCBC, + 32010 - 19968: 0xDAA2, + 32011 - 19968: 0xDAA3, + 32013 - 19968: 0xD2A1, + 32016 - 19968: 0xD2EF, + 32020 - 19968: 0xE2ED, + 32023 - 19968: 0xDEE9, + 32024 - 19968: 0xCEDC, + 32025 - 19968: 0xF2B5, + 32026 - 19968: 0xD0E4, + 32027 - 19968: 0xDDD1, + 32032 - 19968: 0xE1C8, + 32033 - 19968: 0xDBB7, + 32034 - 19968: 0xDFE3, + 32043 - 19968: 0xEDB9, + 32044 - 19968: 0xF1C5, + 32046 - 19968: 0xF3CF, + 32047 - 19968: 0xD7AB, + 32048 - 19968: 0xE1AC, + 32051 - 19968: 0xE3EB, + 32053 - 19968: 0xEEC7, + 32057 - 19968: 0xE1C9, + 32058 - 19968: 0xCAFA, + 32066 - 19968: 0xF0FB, + 32067 - 19968: 0xFAE1, + 32068 - 19968: 0xF0DA, + 32069 - 19968: 0xCCE7, + 32070 - 19968: 0xDAF4, + 32080 - 19968: 0xCCBF, + 32094 - 19968: 0xCEED, + 32097 - 19968: 0xD5A9, + 32098 - 19968: 0xFAE2, + 32102 - 19968: 0xD0E5, + 32104 - 19968: 0xEBD6, + 32106 - 19968: 0xECDF, + 32110 - 19968: 0xDFFC, + 32113 - 19968: 0xF7D6, + 32114 - 19968: 0xDEEA, + 32115 - 19968: 0xCBB4, + 32118 - 19968: 0xEFBE, + 32121 - 19968: 0xCCB5, + 32127 - 19968: 0xCFBD, + 32142 - 19968: 0xEFF2, + 32143 - 19968: 0xE2B7, + 32147 - 19968: 0xCCE8, + 32156 - 19968: 0xF0FC, + 32160 - 19968: 0xD6E0, + 32162 - 19968: 0xF1C6, + 32172 - 19968: 0xE2B8, + 32173 - 19968: 0xEBAB, + 32177 - 19968: 0xCBB5, + 32178 - 19968: 0xD8D1, + 32180 - 19968: 0xF4CE, + 32181 - 19968: 0xF3F7, + 32184 - 19968: 0xD7C6, + 32186 - 19968: 0xD1BB, + 32187 - 19968: 0xF7AA, + 32189 - 19968: 0xEDCA, + 32190 - 19968: 0xD7D3, + 32191 - 19968: 0xD8FA, + 32199 - 19968: 0xF6C5, + 32202 - 19968: 0xD1CC, + 32203 - 19968: 0xDDFC, + 32214 - 19968: 0xDFFD, + 32216 - 19968: 0xF9E5, + 32218 - 19968: 0xE0CA, + 32221 - 19968: 0xF2FD, + 32222 - 19968: 0xD3B0, + 32224 - 19968: 0xF4F3, + 32225 - 19968: 0xDAC9, + 32227 - 19968: 0xE6DE, + 32232 - 19968: 0xF8BA, + 32233 - 19968: 0xE8D0, + 32236 - 19968: 0xD8FB, + 32239 - 19968: 0xEAD5, + 32244 - 19968: 0xD6A3, + 32251 - 19968: 0xF6C6, + 32265 - 19968: 0xF2DB, + 32266 - 19968: 0xE4FC, + 32277 - 19968: 0xE8B2, + 32283 - 19968: 0xDADA, + 32285 - 19968: 0xF2DC, + 32286 - 19968: 0xFBD6, + 32287 - 19968: 0xE9B2, + 32289 - 19968: 0xEEAD, + 32291 - 19968: 0xFAE3, + 32299 - 19968: 0xDCEE, + 32302 - 19968: 0xF5EA, + 32303 - 19968: 0xE6E0, + 32305 - 19968: 0xF0FD, + 32311 - 19968: 0xD7AC, + 32317 - 19968: 0xF5C5, + 32318 - 19968: 0xEEE0, + 32321 - 19968: 0xDBE5, + 32323 - 19968: 0xDDDE, + 32326 - 19968: 0xD9F0, + 32327 - 19968: 0xE9A3, + 32338 - 19968: 0xF1F9, + 32340 - 19968: 0xF2C4, + 32341 - 19968: 0xE0CB, + 32350 - 19968: 0xE9A4, + 32353 - 19968: 0xE2B9, + 32361 - 19968: 0xE3B1, + 32362 - 19968: 0xFCEB, + 32363 - 19968: 0xCDA8, + 32365 - 19968: 0xCCB6, + 32368 - 19968: 0xF0DB, + 32377 - 19968: 0xE6BA, + 32380 - 19968: 0xCDA9, + 32386 - 19968: 0xF3C3, + 32396 - 19968: 0xE1D9, + 32399 - 19968: 0xEFAB, + 32403 - 19968: 0xE7C5, + 32406 - 19968: 0xE0E9, + 32408 - 19968: 0xF3C5, + 32411 - 19968: 0xD4C0, + 32412 - 19968: 0xD5BF, + 32566 - 19968: 0xDDAE, + 32568 - 19968: 0xF9FC, + 32570 - 19968: 0xCCC0, + 32588 - 19968: 0xE5A2, + 32592 - 19968: 0xCEB8, + 32596 - 19968: 0xD8D2, + 32597 - 19968: 0xF9D6, + 32618 - 19968: 0xF1AA, + 32619 - 19968: 0xCED1, + 32622 - 19968: 0xF6C7, + 32624 - 19968: 0xDBEB, + 32626 - 19968: 0xDFFE, + 32629 - 19968: 0xD8E1, + 32631 - 19968: 0xF7F3, + 32633 - 19968: 0xD7E7, + 32645 - 19968: 0xD4FE, + 32648 - 19968: 0xD1BC, + 32650 - 19968: 0xE5CF, + 32652 - 19968: 0xCBB6, + 32654 - 19968: 0xDAB8, + 32660 - 19968: 0xCDC4, + 32666 - 19968: 0xD6BE, + 32670 - 19968: 0xE2BA, + 32676 - 19968: 0xCFD8, + 32680 - 19968: 0xE0CC, + 32681 - 19968: 0xEBF9, + 32690 - 19968: 0xFDFD, + 32696 - 19968: 0xD7E8, + 32697 - 19968: 0xCBD8, + 32701 - 19968: 0xE9E2, + 32705 - 19968: 0xE8BA, + 32709 - 19968: 0xE3C7, + 32714 - 19968: 0xECCD, + 32716 - 19968: 0xECCE, + 32718 - 19968: 0xD6BF, + 32722 - 19968: 0xE3A7, + 32724 - 19968: 0xDFD6, + 32725 - 19968: 0xFDE8, + 32735 - 19968: 0xEEE1, + 32736 - 19968: 0xF6A8, + 32737 - 19968: 0xDDFD, + 32745 - 19968: 0xF8BB, + 32747 - 19968: 0xE8D1, + 32752 - 19968: 0xF9D7, + 32761 - 19968: 0xCEEE, + 32764 - 19968: 0xECCF, + 32768 - 19968: 0xE9A5, + 32769 - 19968: 0xD6D5, + 32771 - 19968: 0xCDC5, + 32773 - 19968: 0xEDBA, + 32774 - 19968: 0xD1BD, + 32777 - 19968: 0xCFBE, + 32780 - 19968: 0xECBB, + 32784 - 19968: 0xD2B1, + 32789 - 19968: 0xCCE9, + 32791 - 19968: 0xD9C4, + 32792 - 19968: 0xE9FC, + 32813 - 19968: 0xD1BE, + 32819 - 19968: 0xECBC, + 32822 - 19968: 0xE5AD, + 32829 - 19968: 0xF7B0, + 32831 - 19968: 0xCCEA, + 32835 - 19968: 0xD3C4, + 32838 - 19968: 0xD6C0, + 32842 - 19968: 0xD6FD, + 32854 - 19968: 0xE1A1, + 32856 - 19968: 0xDEBD, + 32858 - 19968: 0xF6A9, + 32862 - 19968: 0xDAA4, + 32879 - 19968: 0xD6A4, + 32880 - 19968: 0xF5C6, + 32882 - 19968: 0xE1A2, + 32883 - 19968: 0xE9C6, + 32887 - 19968: 0xF2C5, + 32893 - 19968: 0xF4E9, + 32894 - 19968: 0xD6EC, + 32895 - 19968: 0xEBD3, + 32900 - 19968: 0xECBD, + 32901 - 19968: 0xE2DC, + 32902 - 19968: 0xDEEB, + 32903 - 19968: 0xF0DC, + 32905 - 19968: 0xEBBF, + 32907 - 19968: 0xD7CE, + 32908 - 19968: 0xD1BF, + 32918 - 19968: 0xF5AB, + 32923 - 19968: 0xF9FD, + 32925 - 19968: 0xCADC, + 32929 - 19968: 0xCDC6, + 32930 - 19968: 0xF2B6, + 32933 - 19968: 0xDDFE, + 32937 - 19968: 0xCCB7, + 32938 - 19968: 0xDBB8, + 32943 - 19968: 0xD0E9, + 32945 - 19968: 0xCEDD, + 32946 - 19968: 0xEBC0, + 32948 - 19968: 0xFDA2, + 32954 - 19968: 0xF8CB, + 32963 - 19968: 0xEAD6, + 32964 - 19968: 0xF1B0, + 32972 - 19968: 0xDBCE, + 32974 - 19968: 0xF7C3, + 32986 - 19968: 0xDBCF, + 32987 - 19968: 0xCBA4, + 32990 - 19968: 0xF8E0, + 32993 - 19968: 0xFBD7, + 32996 - 19968: 0xEBCA, + 32997 - 19968: 0xE0A1, + 33009 - 19968: 0xCECD, + 33012 - 19968: 0xD4DC, + 33016 - 19968: 0xFDD8, + 33021 - 19968: 0xD2F6, + 33026 - 19968: 0xF2B7, + 33029 - 19968: 0xFAF6, + 33030 - 19968: 0xF6AA, + 33031 - 19968: 0xFAF7, + 33032 - 19968: 0xD8E6, + 33034 - 19968: 0xF4B1, + 33048 - 19968: 0xE8D2, + 33050 - 19968: 0xCAC5, + 33051 - 19968: 0xCCEB, + 33059 - 19968: 0xE2EE, + 33065 - 19968: 0xE2BB, + 33067 - 19968: 0xF7AD, + 33071 - 19968: 0xF8E1, + 33081 - 19968: 0xF3EC, + 33086 - 19968: 0xDEA1, + 33099 - 19968: 0xE4FD, + 33102 - 19968: 0xE3EC, + 33104 - 19968: 0xDDAF, + 33105 - 19968: 0xDDB0, + 33108 - 19968: 0xCBB7, + 33109 - 19968: 0xE8D3, + 33125 - 19968: 0xE1A3, + 33126 - 19968: 0xD2E0, + 33131 - 19968: 0xF0FE, + 33136 - 19968: 0xE9A6, + 33137 - 19968: 0xCBF2, + 33144 - 19968: 0xEDF3, + 33145 - 19968: 0xDCD9, + 33146 - 19968: 0xE0CD, + 33151 - 19968: 0xF7DA, + 33152 - 19968: 0xDBB9, + 33160 - 19968: 0xCCAE, + 33162 - 19968: 0xDADB, + 33167 - 19968: 0xCDC7, + 33178 - 19968: 0xDDB1, + 33180 - 19968: 0xD8AF, + 33181 - 19968: 0xE3A3, + 33184 - 19968: 0xCEEF, + 33187 - 19968: 0xF2F3, + 33192 - 19968: 0xF8B3, + 33203 - 19968: 0xE0CE, + 33205 - 19968: 0xF5FD, + 33210 - 19968: 0xEBEC, + 33213 - 19968: 0xD3C5, + 33214 - 19968: 0xFCEC, + 33215 - 19968: 0xD2DB, + 33216 - 19968: 0xD4EB, + 33218 - 19968: 0xDEA2, + 33222 - 19968: 0xE5E6, + 33229 - 19968: 0xF0B0, + 33240 - 19968: 0xD5C4, + 33247 - 19968: 0xEDF4, + 33251 - 19968: 0xE3ED, + 33253 - 19968: 0xE8C2, + 33255 - 19968: 0xEDF5, + 33256 - 19968: 0xD7FC, + 33258 - 19968: 0xEDBB, + 33261 - 19968: 0xF6AB, + 33267 - 19968: 0xF2B8, + 33268 - 19968: 0xF6C8, + 33274 - 19968: 0xD3E6, + 33275 - 19968: 0xF2DD, + 33276 - 19968: 0xCFBF, + 33278 - 19968: 0xEBAC, + 33285 - 19968: 0xCFC0, + 33287 - 19968: 0xE6A8, + 33288 - 19968: 0xFDE9, + 33290 - 19968: 0xCFC1, + 33292 - 19968: 0xE0DF, + 33293 - 19968: 0xDEEC, + 33298 - 19968: 0xE0A2, + 33307 - 19968: 0xF4BF, + 33308 - 19968: 0xE2EF, + 33310 - 19968: 0xD9F1, + 33311 - 19968: 0xF1C7, + 33313 - 19968: 0xCBB8, + 33322 - 19968: 0xF9FE, + 33323 - 19968: 0xDBBA, + 33324 - 19968: 0xDAF5, + 33333 - 19968: 0xF6EC, + 33334 - 19968: 0xDADC, + 33335 - 19968: 0xFAE4, + 33337 - 19968: 0xE0CF, + 33344 - 19968: 0xDDB2, + 33349 - 19968: 0xE6A9, + 33351 - 19968: 0xEFF3, + 33369 - 19968: 0xF3ED, + 33380 - 19968: 0xEBFA, + 33382 - 19968: 0xF9E6, + 33390 - 19968: 0xCADD, + 33391 - 19968: 0xD5DE, + 33393 - 19968: 0xCADE, + 33394 - 19968: 0xDFE4, + 33398 - 19968: 0xE6FD, + 33400 - 19968: 0xF5AC, + 33406 - 19968: 0xE4F5, + 33419 - 19968: 0xE9E3, + 33421 - 19968: 0xEDCB, + 33422 - 19968: 0xCFE4, + 33426 - 19968: 0xD8D3, + 33433 - 19968: 0xDDB3, + 33434 - 19968: 0xD4EC, + 33437 - 19968: 0xF2B9, + 33439 - 19968: 0xDFB7, + 33445 - 19968: 0xCBCE, + 33446 - 19968: 0xFBD8, + 33449 - 19968: 0xD0D9, + 33452 - 19968: 0xDDD2, + 33453 - 19968: 0xF7F4, + 33454 - 19968: 0xE7DC, + 33455 - 19968: 0xE4A5, + 33457 - 19968: 0xFCA3, + 33459 - 19968: 0xDBBB, + 33463 - 19968: 0xF2BA, + 33464 - 19968: 0xE9FD, + 33465 - 19968: 0xD0CA, + 33467 - 19968: 0xF5D6, + 33468 - 19968: 0xD9C5, + 33469 - 19968: 0xE4B4, + 33471 - 19968: 0xEDA7, + 33489 - 19968: 0xEABD, + 33490 - 19968: 0xE6FE, + 33492 - 19968: 0xF7C4, + 33493 - 19968: 0xF5AD, + 33495 - 19968: 0xD9E0, + 33499 - 19968: 0xCAB4, + 33502 - 19968: 0xF8E2, + 33503 - 19968: 0xCFC2, + 33505 - 19968: 0xECBE, + 33509 - 19968: 0xE5B4, + 33510 - 19968: 0xCDC8, + 33511 - 19968: 0xEEC8, + 33521 - 19968: 0xE7C8, + 33533 - 19968: 0xCDC9, + 33534 - 19968: 0xF9B7, + 33537 - 19968: 0xF1E8, + 33538 - 19968: 0xD9F2, + 33539 - 19968: 0xDBF5, + 33540 - 19968: 0xCAB5, + 33541 - 19968: 0xD9C6, + 33545 - 19968: 0xD8C9, + 33559 - 19968: 0xD9AB, + 33576 - 19968: 0xEDBC, + 33579 - 19968: 0xD8D4, + 33583 - 19968: 0xDCDA, + 33585 - 19968: 0xE2BC, + 33588 - 19968: 0xFCED, + 33589 - 19968: 0xECE0, + 33590 - 19968: 0xD2FE, + 33592 - 19968: 0xE9C7, + 33593 - 19968: 0xE6AA, + 33600 - 19968: 0xE2F0, + 33607 - 19968: 0xFABB, + 33609 - 19968: 0xF5AE, + 33610 - 19968: 0xFBAA, + 33615 - 19968: 0xECFB, + 33617 - 19968: 0xECBF, + 33618 - 19968: 0xFCD8, + 33651 - 19968: 0xD4E5, + 33655 - 19968: 0xF9C3, + 33659 - 19968: 0xEEE2, + 33673 - 19968: 0xD7E9, + 33674 - 19968: 0xEDF6, + 33678 - 19968: 0xDEED, + 33686 - 19968: 0xCCEC, + 33688 - 19968: 0xE3EE, + 33694 - 19968: 0xE8D4, + 33698 - 19968: 0xFAF8, + 33705 - 19968: 0xDDB4, + 33706 - 19968: 0xE4B5, + 33707 - 19968: 0xD8B0, + 33725 - 19968: 0xD8D5, + 33729 - 19968: 0xF4EA, + 33733 - 19968: 0xCEB9, + 33737 - 19968: 0xD6E1, + 33738 - 19968: 0xCFD2, + 33740 - 19968: 0xD0B6, + 33747 - 19968: 0xCEA2, + 33750 - 19968: 0xF3EE, + 33756 - 19968: 0xF3F8, + 33769 - 19968: 0xDCCC, + 33771 - 19968: 0xD0CB, + 33775 - 19968: 0xFCA4, + 33776 - 19968: 0xCDCA, + 33777 - 19968: 0xD7D4, + 33778 - 19968: 0xDEA3, + 33780 - 19968: 0xE4E0, + 33785 - 19968: 0xEEC9, + 33789 - 19968: 0xE2DD, + 33795 - 19968: 0xF5FE, + 33796 - 19968: 0xD4AC, + 33802 - 19968: 0xD5D1, + 33804 - 19968: 0xD8F0, + 33805 - 19968: 0xF8C3, + 33806 - 19968: 0xEAD7, + 33833 - 19968: 0xF5D7, + 33836 - 19968: 0xD8BF, + 33841 - 19968: 0xFDC0, + 33848 - 19968: 0xEBAD, + 33853 - 19968: 0xD5AA, + 33865 - 19968: 0xE7A8, + 33879 - 19968: 0xEECA, + 33883 - 19968: 0xCAE7, + 33889 - 19968: 0xF8E3, + 33891 - 19968: 0xD4DD, + 33894 - 19968: 0xEAD8, + 33899 - 19968: 0xFBD9, + 33900 - 19968: 0xEDF7, + 33903 - 19968: 0xE5B5, + 33909 - 19968: 0xD0AD, + 33914 - 19968: 0xF1F1, + 33936 - 19968: 0xE2BD, + 33940 - 19968: 0xE3C8, + 33945 - 19968: 0xD9D5, + 33948 - 19968: 0xDFAA, + 33953 - 19968: 0xDBBC, + 33970 - 19968: 0xF8E4, + 33976 - 19968: 0xF1FA, + 33979 - 19968: 0xE5B6, + 33980 - 19968: 0xF3EF, + 33983 - 19968: 0xFBDA, + 33984 - 19968: 0xE1E0, + 33986 - 19968: 0xD9AC, + 33988 - 19968: 0xF5EB, + 33990 - 19968: 0xE0B6, + 33993 - 19968: 0xE9C8, + 33995 - 19968: 0xCBCF, + 33997 - 19968: 0xE3C9, + 34001 - 19968: 0xDEEE, + 34010 - 19968: 0xE2BE, + 34028 - 19968: 0xDCEF, + 34030 - 19968: 0xD6A5, + 34036 - 19968: 0xE2F1, + 34044 - 19968: 0xD6FE, + 34065 - 19968: 0xD9A1, + 34067 - 19968: 0xD8C0, + 34068 - 19968: 0xDCDB, + 34071 - 19968: 0xEDBD, + 34072 - 19968: 0xDFB8, + 34074 - 19968: 0xEAA5, + 34078 - 19968: 0xD7AD, + 34081 - 19968: 0xF3F9, + 34083 - 19968: 0xEDF8, + 34085 - 19968: 0xF5C7, + 34092 - 19968: 0xE1CA, + 34093 - 19968: 0xEBE3, + 34095 - 19968: 0xF2DE, + 34109 - 19968: 0xF8CC, + 34111 - 19968: 0xEAD9, + 34113 - 19968: 0xD3C6, + 34115 - 19968: 0xDBE6, + 34121 - 19968: 0xF5AF, + 34126 - 19968: 0xCEF0, + 34131 - 19968: 0xE9FE, + 34137 - 19968: 0xFBB6, + 34147 - 19968: 0xE2F2, + 34152 - 19968: 0xCFF2, + 34153 - 19968: 0xF7B9, + 34154 - 19968: 0xD9F3, + 34157 - 19968: 0xE1CB, + 34180 - 19968: 0xDADD, + 34183 - 19968: 0xDAB9, + 34191 - 19968: 0xEBFB, + 34193 - 19968: 0xCBB9, + 34196 - 19968: 0xEDF9, + 34203 - 19968: 0xE0E0, + 34214 - 19968: 0xF4C0, + 34216 - 19968: 0xFDBC, + 34217 - 19968: 0xDFB1, + 34218 - 19968: 0xE3EF, + 34223 - 19968: 0xE0A3, + 34224 - 19968: 0xFDB9, + 34234 - 19968: 0xF0B1, + 34241 - 19968: 0xCDCB, + 34249 - 19968: 0xEDBE, + 34253 - 19968: 0xD5C0, + 34254 - 19968: 0xE3F0, + 34255 - 19968: 0xEDFA, + 34261 - 19968: 0xE9E4, + 34268 - 19968: 0xD5ED, + 34269 - 19968: 0xE7DD, + 34276 - 19968: 0xD4F6, + 34277 - 19968: 0xE5B7, + 34281 - 19968: 0xDBE7, + 34282 - 19968: 0xE2BF, + 34295 - 19968: 0xEECB, + 34298 - 19968: 0xD7F4, + 34299 - 19968: 0xF0DD, + 34303 - 19968: 0xCEAB, + 34306 - 19968: 0xE7DE, + 34310 - 19968: 0xD6D6, + 34311 - 19968: 0xE1CC, + 34314 - 19968: 0xE8B3, + 34326 - 19968: 0xE5EE, + 34327 - 19968: 0xDCA2, + 34330 - 19968: 0xE0D0, + 34349 - 19968: 0xD5B5, + 34367 - 19968: 0xD5A1, + 34382 - 19968: 0xFBDB, + 34384 - 19968: 0xF9CB, + 34388 - 19968: 0xCBF3, + 34389 - 19968: 0xF4A5, + 34395 - 19968: 0xFAC8, + 34396 - 19968: 0xD6D7, + 34398 - 19968: 0xE9E5, + 34399 - 19968: 0xFBDC, + 34407 - 19968: 0xFDD0, + 34425 - 19968: 0xFBF6, + 34442 - 19968: 0xDAA5, + 34444 - 19968: 0xDBBD, + 34451 - 19968: 0xECE2, + 34467 - 19968: 0xCDF7, + 34468 - 19968: 0xF0DE, + 34473 - 19968: 0xF6C9, + 34503 - 19968: 0xDEEF, + 34507 - 19968: 0xD3B1, + 34516 - 19968: 0xFCEE, + 34521 - 19968: 0xE8C3, + 34523 - 19968: 0xF1C8, + 34527 - 19968: 0xCEF1, + 34532 - 19968: 0xF9ED, + 34541 - 19968: 0xF2F4, + 34558 - 19968: 0xE4B6, + 34560 - 19968: 0xF5B9, + 34562 - 19968: 0xDCF0, + 34563 - 19968: 0xE3F1, + 34568 - 19968: 0xE8A5, + 34584 - 19968: 0xF2BB, + 34586 - 19968: 0xDEA4, + 34588 - 19968: 0xDACC, + 34638 - 19968: 0xCAE9, + 34645 - 19968: 0xE3DA, + 34647 - 19968: 0xFCD9, + 34655 - 19968: 0xEADA, + 34662 - 19968: 0xF9C4, + 34664 - 19968: 0xE3A4, + 34676 - 19968: 0xFBDD, + 34678 - 19968: 0xEFCA, + 34680 - 19968: 0xE8C4, + 34690 - 19968: 0xD5CC, + 34701 - 19968: 0xEBD7, + 34719 - 19968: 0xD9AD, + 34722 - 19968: 0xFBAB, + 34739 - 19968: 0xD3D9, + 34746 - 19968: 0xD5A2, + 34756 - 19968: 0xF6DE, + 34784 - 19968: 0xDAF6, + 34796 - 19968: 0xE0D1, + 34799 - 19968: 0xE9A8, + 34802 - 19968: 0xF5F9, + 34809 - 19968: 0xFAAF, + 34811 - 19968: 0xEBFC, + 34814 - 19968: 0xE0EA, + 34821 - 19968: 0xE3B2, + 34847 - 19968: 0xD5C5, + 34850 - 19968: 0xF1E3, + 34851 - 19968: 0xD5EE, + 34865 - 19968: 0xCDCC, + 34870 - 19968: 0xEDD9, + 34875 - 19968: 0xD8C1, + 34880 - 19968: 0xFAEC, + 34886 - 19968: 0xF1EB, + 34892 - 19968: 0xFABC, + 34893 - 19968: 0xE6E2, + 34898 - 19968: 0xFAE5, + 34899 - 19968: 0xE2FA, + 34903 - 19968: 0xCAB6, + 34905 - 19968: 0xE4B7, + 34907 - 19968: 0xEADB, + 34909 - 19968: 0xF5FA, + 34913 - 19968: 0xFBAC, + 34914 - 19968: 0xCFC3, + 34915 - 19968: 0xEBFD, + 34920 - 19968: 0xF8FA, + 34923 - 19968: 0xDFB9, + 34928 - 19968: 0xE1F1, + 34930 - 19968: 0xD2A4, + 34935 - 19968: 0xF5FB, + 34942 - 19968: 0xD0DA, + 34943 - 19968: 0xD0DB, + 34945 - 19968: 0xEABE, + 34946 - 19968: 0xD9B1, + 34952 - 19968: 0xCAB7, + 34955 - 19968: 0xD3E7, + 34957 - 19968: 0xF8E5, + 34962 - 19968: 0xD3B2, + 34966 - 19968: 0xE2C0, + 34967 - 19968: 0xF2DF, + 34974 - 19968: 0xCDE5, + 34987 - 19968: 0xF9AC, + 34996 - 19968: 0xCDCD, + 35009 - 19968: 0xEEAE, + 35010 - 19968: 0xD6AE, + 35023 - 19968: 0xD7EA, + 35028 - 19968: 0xE7E0, + 35029 - 19968: 0xEBAE, + 35033 - 19968: 0xCFD9, + 35036 - 19968: 0xDCCD, + 35037 - 19968: 0xEDFB, + 35039 - 19968: 0xDEF0, + 35041 - 19968: 0xD7EB, + 35048 - 19968: 0xDEA5, + 35059 - 19968: 0xDFD7, + 35060 - 19968: 0xDBD0, + 35061 - 19968: 0xDBD1, + 35064 - 19968: 0xD5A3, + 35069 - 19968: 0xF0B2, + 35079 - 19968: 0xDCDC, + 35088 - 19968: 0xCAE8, + 35090 - 19968: 0xF8E6, + 35091 - 19968: 0xDCCE, + 35096 - 19968: 0xEADC, + 35097 - 19968: 0xDBD2, + 35109 - 19968: 0xE9B3, + 35114 - 19968: 0xF7DB, + 35126 - 19968: 0xE3A8, + 35128 - 19968: 0xD7AE, + 35131 - 19968: 0xE0E1, + 35137 - 19968: 0xCBBA, + 35140 - 19968: 0xE5D1, + 35167 - 19968: 0xD0DC, + 35172 - 19968: 0xD5C1, + 35178 - 19968: 0xD8CA, + 35186 - 19968: 0xE3A9, + 35199 - 19968: 0xE0A4, + 35201 - 19968: 0xE9A9, + 35203 - 19968: 0xD3C7, + 35206 - 19968: 0xDCDD, + 35207 - 19968: 0xF8AE, + 35211 - 19968: 0xCCB8, + 35215 - 19968: 0xD0AE, + 35219 - 19968: 0xD8F2, + 35222 - 19968: 0xE3CA, + 35233 - 19968: 0xCCAF, + 35241 - 19968: 0xD4AD, + 35242 - 19968: 0xF6D1, + 35250 - 19968: 0xD0CC, + 35258 - 19968: 0xCAC6, + 35261 - 19968: 0xD5C2, + 35264 - 19968: 0xCEBA, + 35282 - 19968: 0xCAC7, + 35299 - 19968: 0xFAB0, + 35316 - 19968: 0xDFD8, + 35320 - 19968: 0xF5BA, + 35328 - 19968: 0xE5EB, + 35330 - 19968: 0xEFF4, + 35331 - 19968: 0xDDB5, + 35336 - 19968: 0xCDAA, + 35338 - 19968: 0xE3F2, + 35340 - 19968: 0xFBF7, + 35342 - 19968: 0xF7D0, + 35347 - 19968: 0xFDBA, + 35350 - 19968: 0xFDE1, + 35351 - 19968: 0xF6FE, + 35352 - 19968: 0xD1C0, + 35355 - 19968: 0xE8C5, + 35357 - 19968: 0xE4B8, + 35359 - 19968: 0xE1E8, + 35363 - 19968: 0xCCC1, + 35365 - 19968: 0xD2ED, + 35370 - 19968: 0xDBBE, + 35373 - 19968: 0xE0E2, + 35377 - 19968: 0xFAC9, + 35380 - 19968: 0xE1CD, + 35382 - 19968: 0xCAB8, + 35386 - 19968: 0xF2E0, + 35387 - 19968: 0xF1C9, + 35408 - 19968: 0xDEF1, + 35412 - 19968: 0xF0DF, + 35413 - 19968: 0xF8C4, + 35419 - 19968: 0xEECC, + 35422 - 19968: 0xDEF2, + 35424 - 19968: 0xE7C9, + 35426 - 19968: 0xE2F3, + 35427 - 19968: 0xE7E1, + 35430 - 19968: 0xE3CB, + 35433 - 19968: 0xE3CC, + 35437 - 19968: 0xCFF8, + 35438 - 19968: 0xEFAC, + 35440 - 19968: 0xFDFE, + 35441 - 19968: 0xFCA5, + 35442 - 19968: 0xFAB1, + 35443 - 19968: 0xDFD9, + 35445 - 19968: 0xE0D2, + 35449 - 19968: 0xF4DA, + 35461 - 19968: 0xF1CA, + 35463 - 19968: 0xCEA3, + 35468 - 19968: 0xF2BC, + 35469 - 19968: 0xECE3, + 35475 - 19968: 0xE0A5, + 35477 - 19968: 0xF7AB, + 35480 - 19968: 0xEBAF, + 35486 - 19968: 0xE5DE, + 35488 - 19968: 0xE1A4, + 35489 - 19968: 0xCDAB, + 35491 - 19968: 0xD9F4, + 35492 - 19968: 0xE8A6, + 35493 - 19968: 0xCDCE, + 35494 - 19968: 0xE1E9, + 35496 - 19968: 0xFCEF, + 35498 - 19968: 0xE0E3, + 35504 - 19968: 0xE2C1, + 35506 - 19968: 0xCEA4, + 35513 - 19968: 0xDEA6, + 35516 - 19968: 0xEBFE, + 35518 - 19968: 0xEBDD, + 35519 - 19968: 0xF0E0, + 35522 - 19968: 0xF4DB, + 35524 - 19968: 0xE2F4, + 35527 - 19968: 0xD3C8, + 35531 - 19968: 0xF4EB, + 35533 - 19968: 0xEEB5, + 35535 - 19968: 0xF5D8, + 35538 - 19968: 0xD5DF, + 35542 - 19968: 0xD6E5, + 35547 - 19968: 0xEBB0, + 35548 - 19968: 0xF4E3, + 35553 - 19968: 0xE3CD, + 35558 - 19968: 0xF4F4, + 35559 - 19968: 0xFAB2, + 35562 - 19968: 0xEFF5, + 35563 - 19968: 0xCADF, + 35565 - 19968: 0xEBB1, + 35566 - 19968: 0xEDBF, + 35569 - 19968: 0xFDC9, + 35574 - 19968: 0xE4A6, + 35575 - 19968: 0xF9A4, + 35576 - 19968: 0xF0B3, + 35578 - 19968: 0xE5EC, + 35582 - 19968: 0xD1E7, + 35584 - 19968: 0xD9C7, + 35585 - 19968: 0xE4D7, + 35586 - 19968: 0xEADD, + 35588 - 19968: 0xD4F7, + 35598 - 19968: 0xDABA, + 35600 - 19968: 0xDACD, + 35604 - 19968: 0xF9CC, + 35606 - 19968: 0xE1DA, + 35607 - 19968: 0xDBBF, + 35609 - 19968: 0xCCC5, + 35610 - 19968: 0xECD0, + 35611 - 19968: 0xCBBB, + 35613 - 19968: 0xDEF3, + 35616 - 19968: 0xE9AA, + 35624 - 19968: 0xD9C8, + 35627 - 19968: 0xEEE3, + 35628 - 19968: 0xD7BD, + 35635 - 19968: 0xCFC4, + 35641 - 19968: 0xD0CD, + 35649 - 19968: 0xFCA6, + 35657 - 19968: 0xF1FB, + 35662 - 19968: 0xFDD2, + 35663 - 19968: 0xD1C1, + 35672 - 19968: 0xE3DB, + 35674 - 19968: 0xD3C9, + 35676 - 19968: 0xDCCF, + 35686 - 19968: 0xCCED, + 35692 - 19968: 0xDEA7, + 35695 - 19968: 0xE6BB, + 35696 - 19968: 0xECA1, + 35700 - 19968: 0xCCB9, + 35703 - 19968: 0xFBDE, + 35709 - 19968: 0xE7E2, + 35712 - 19968: 0xD4C1, + 35722 - 19968: 0xDCA8, + 35728 - 19968: 0xE2C2, + 35730 - 19968: 0xF3D8, + 35731 - 19968: 0xE5D3, + 35734 - 19968: 0xF3D9, + 35738 - 19968: 0xF3C6, + 35895 - 19968: 0xCDDB, + 35903 - 19968: 0xCDAC, + 35905 - 19968: 0xFCC3, + 35910 - 19968: 0xD4E7, + 35912 - 19968: 0xD1C2, + 35914 - 19968: 0xF9A5, + 35916 - 19968: 0xE8D5, + 35925 - 19968: 0xE3CE, + 35930 - 19968: 0xD4CA, + 35937 - 19968: 0xDFDA, + 35946 - 19968: 0xFBDF, + 35947 - 19968: 0xE7E3, + 35961 - 19968: 0xF8FB, + 35962 - 19968: 0xE3CF, + 35970 - 19968: 0xF5B0, + 35978 - 19968: 0xD8E7, + 35980 - 19968: 0xD9C9, + 35997 - 19968: 0xF8AF, + 35998 - 19968: 0xEFF6, + 36000 - 19968: 0xDDB6, + 36001 - 19968: 0xEEAF, + 36002 - 19968: 0xCDF8, + 36007 - 19968: 0xDEB8, + 36008 - 19968: 0xFCA7, + 36009 - 19968: 0xF7FC, + 36010 - 19968: 0xF7B1, + 36011 - 19968: 0xCEBB, + 36012 - 19968: 0xF4A1, + 36015 - 19968: 0xEECD, + 36016 - 19968: 0xE1AE, + 36019 - 19968: 0xECC3, + 36020 - 19968: 0xCFFE, + 36022 - 19968: 0xF8BF, + 36023 - 19968: 0xD8E2, + 36024 - 19968: 0xD3E8, + 36027 - 19968: 0xDEA8, + 36028 - 19968: 0xF4E4, + 36029 - 19968: 0xECC2, + 36031 - 19968: 0xD9F5, + 36032 - 19968: 0xF9C5, + 36033 - 19968: 0xDDD3, + 36034 - 19968: 0xD6F1, + 36035 - 19968: 0xECFC, + 36036 - 19968: 0xFCF0, + 36039 - 19968: 0xEDC0, + 36040 - 19968: 0xCAB9, + 36042 - 19968: 0xEEE4, + 36049 - 19968: 0xF2E1, + 36051 - 19968: 0xDEB9, + 36058 - 19968: 0xD6F2, + 36060 - 19968: 0xDEF4, + 36062 - 19968: 0xDFDB, + 36064 - 19968: 0xDBD3, + 36066 - 19968: 0xFAE7, + 36067 - 19968: 0xD8E3, + 36068 - 19968: 0xF4C1, + 36070 - 19968: 0xDDB7, + 36074 - 19968: 0xF2F5, + 36077 - 19968: 0xD4AE, + 36084 - 19968: 0xD6F3, + 36091 - 19968: 0xDDB8, + 36092 - 19968: 0xCFC5, + 36093 - 19968: 0xDFDF, + 36100 - 19968: 0xF2BE, + 36101 - 19968: 0xF6A1, + 36103 - 19968: 0xEBCB, + 36104 - 19968: 0xF1FC, + 36106 - 19968: 0xF3C7, + 36109 - 19968: 0xE0EB, + 36115 - 19968: 0xEDFC, + 36118 - 19968: 0xE1DB, + 36196 - 19968: 0xEEE5, + 36198 - 19968: 0xDEF5, + 36203 - 19968: 0xFAD3, + 36208 - 19968: 0xF1CB, + 36211 - 19968: 0xD0AF, + 36212 - 19968: 0xDDB9, + 36215 - 19968: 0xD1C3, + 36229 - 19968: 0xF5B1, + 36234 - 19968: 0xEAC6, + 36249 - 19968: 0xF0E1, + 36259 - 19968: 0xF6AC, + 36264 - 19968: 0xF5D9, + 36275 - 19968: 0xF0EB, + 36282 - 19968: 0xDDBA, + 36286 - 19968: 0xF2BF, + 36294 - 19968: 0xF7C5, + 36299 - 19968: 0xDBA2, + 36300 - 19968: 0xF2F6, + 36303 - 19968: 0xCABA, + 36315 - 19968: 0xF7F5, + 36317 - 19968: 0xCBE5, + 36321 - 19968: 0xEEE6, + 36323 - 19968: 0xE0D3, + 36328 - 19968: 0xCEA5, + 36335 - 19968: 0xD6D8, + 36339 - 19968: 0xD4AF, + 36362 - 19968: 0xE9C9, + 36367 - 19968: 0xD3CE, + 36368 - 19968: 0xF4C2, + 36382 - 19968: 0xCBE6, + 36394 - 19968: 0xF1A1, + 36400 - 19968: 0xEBB2, + 36405 - 19968: 0xF1A2, + 36418 - 19968: 0xEBB3, + 36420 - 19968: 0xF0B4, + 36423 - 19968: 0xCBF4, + 36424 - 19968: 0xD4B0, + 36425 - 19968: 0xF3B2, + 36426 - 19968: 0xFBB7, + 36441 - 19968: 0xF5EC, + 36447 - 19968: 0xEEE7, + 36448 - 19968: 0xF4B2, + 36468 - 19968: 0xF5ED, + 36470 - 19968: 0xCFF3, + 36481 - 19968: 0xF0E2, + 36487 - 19968: 0xEECE, + 36490 - 19968: 0xF1CC, + 36493 - 19968: 0xE5B8, + 36522 - 19968: 0xD7F5, + 36523 - 19968: 0xE3F3, + 36524 - 19968: 0xCFE5, + 36544 - 19968: 0xCFC6, + 36554 - 19968: 0xF3B3, + 36555 - 19968: 0xE4D8, + 36556 - 19968: 0xCFF9, + 36557 - 19968: 0xCFDA, + 36562 - 19968: 0xFACD, + 36575 - 19968: 0xE6E3, + 36587 - 19968: 0xF2E2, + 36600 - 19968: 0xF5EE, + 36603 - 19968: 0xCABB, + 36606 - 19968: 0xE3DC, + 36611 - 19968: 0xCEF2, + 36613 - 19968: 0xD6D9, + 36617 - 19968: 0xEEB0, + 36626 - 19968: 0xF4E5, + 36627 - 19968: 0xD8C2, + 36628 - 19968: 0xDCD0, + 36629 - 19968: 0xCCEE, + 36635 - 19968: 0xD5E0, + 36636 - 19968: 0xF6CA, + 36637 - 19968: 0xFDCA, + 36638 - 19968: 0xD8D6, + 36639 - 19968: 0xF4CF, + 36646 - 19968: 0xD6A6, + 36647 - 19968: 0xDCBE, + 36649 - 19968: 0xDBD4, + 36650 - 19968: 0xD7C7, + 36655 - 19968: 0xF2FE, + 36659 - 19968: 0xF1CD, + 36664 - 19968: 0xE2C3, + 36665 - 19968: 0xDCDE, + 36667 - 19968: 0xDCDF, + 36670 - 19968: 0xEFAD, + 36671 - 19968: 0xE6AB, + 36676 - 19968: 0xF9DD, + 36677 - 19968: 0xEABF, + 36681 - 19968: 0xEFAE, + 36685 - 19968: 0xF4D0, + 36686 - 19968: 0xCEF3, + 36701 - 19968: 0xE6AC, + 36703 - 19968: 0xCEDE, + 36706 - 19968: 0xD5F9, + 36763 - 19968: 0xE3F4, + 36764 - 19968: 0xCDD0, + 36771 - 19968: 0xD5B8, + 36774 - 19968: 0xF7FD, + 36776 - 19968: 0xDCA9, + 36781 - 19968: 0xDEF6, + 36783 - 19968: 0xDCAA, + 36784 - 19968: 0xF2E3, + 36785 - 19968: 0xE9B4, + 36786 - 19968: 0xD2DC, + 36802 - 19968: 0xE9E6, + 36805 - 19968: 0xE3F6, + 36814 - 19968: 0xE7CA, + 36817 - 19968: 0xD0CE, + 36820 - 19968: 0xDAF7, + 36838 - 19968: 0xCABC, + 36842 - 19968: 0xEEE8, + 36843 - 19968: 0xDADE, + 36845 - 19968: 0xF2F7, + 36848 - 19968: 0xE2FB, + 36850 - 19968: 0xCCA6, + 36855 - 19968: 0xDABB, + 36857 - 19968: 0xEEE9, + 36861 - 19968: 0xF5DA, + 36864 - 19968: 0xF7DC, + 36865 - 19968: 0xE1EA, + 36866 - 19968: 0xCEC1, + 36867 - 19968: 0xD4B1, + 36869 - 19968: 0xFDB1, + 36870 - 19968: 0xE6BD, + 36872 - 19968: 0xFBAD, + 36875 - 19968: 0xF8E7, + 36877 - 19968: 0xE1CE, + 36879 - 19968: 0xF7E2, + 36880 - 19968: 0xF5EF, + 36881 - 19968: 0xCFC7, + 36884 - 19968: 0xD4B2, + 36885 - 19968: 0xCCEF, + 36887 - 19968: 0xD4E8, + 36889 - 19968: 0xEECF, + 36890 - 19968: 0xF7D7, + 36893 - 19968: 0xE0A6, + 36894 - 19968: 0xD6C1, + 36895 - 19968: 0xE1DC, + 36896 - 19968: 0xF0E3, + 36897 - 19968: 0xF1E4, + 36898 - 19968: 0xDCF1, + 36899 - 19968: 0xD6A7, + 36910 - 19968: 0xF4F5, + 36913 - 19968: 0xF1CE, + 36914 - 19968: 0xF2E4, + 36917 - 19968: 0xD0B0, + 36920 - 19968: 0xECEF, + 36924 - 19968: 0xF9BA, + 36926 - 19968: 0xEBB5, + 36929 - 19968: 0xD4ED, + 36930 - 19968: 0xE2C4, + 36935 - 19968: 0xE9E7, + 36938 - 19968: 0xEBB4, + 36939 - 19968: 0xEAA1, + 36941 - 19968: 0xF8BC, + 36942 - 19968: 0xCEA6, + 36944 - 19968: 0xF9C6, + 36945 - 19968: 0xFCDA, + 36947 - 19968: 0xD4B3, + 36948 - 19968: 0xD3B9, + 36949 - 19968: 0xEADE, + 36953 - 19968: 0xE9AB, + 36956 - 19968: 0xE1E1, + 36957 - 19968: 0xD3CF, + 36958 - 19968: 0xF4F6, + 36960 - 19968: 0xEAC0, + 36961 - 19968: 0xE1CF, + 36963 - 19968: 0xCCBA, + 36969 - 19968: 0xEEEA, + 36973 - 19968: 0xF0E4, + 36974 - 19968: 0xF3B4, + 36975 - 19968: 0xD4EE, + 36978 - 19968: 0xF2C0, + 36981 - 19968: 0xF1E5, + 36983 - 19968: 0xF4C3, + 36984 - 19968: 0xE0D4, + 36986 - 19968: 0xEBB6, + 36988 - 19968: 0xD7A1, + 36989 - 19968: 0xCBE8, + 36991 - 19968: 0xF9AD, + 36992 - 19968: 0xE9AD, + 36993 - 19968: 0xD8E4, + 36994 - 19968: 0xFAB3, + 36995 - 19968: 0xE2C5, + 36996 - 19968: 0xFCBD, + 36999 - 19968: 0xECC4, + 37000 - 19968: 0xD8B1, + 37002 - 19968: 0xDCAB, + 37007 - 19968: 0xD5A4, + 37009 - 19968: 0xEBE9, + 37013 - 19968: 0xE8BB, + 37017 - 19968: 0xD8D7, + 37026 - 19968: 0xFBAE, + 37027 - 19968: 0xD1E1, + 37030 - 19968: 0xDBC0, + 37032 - 19968: 0xF5BE, + 37034 - 19968: 0xDEF7, + 37039 - 19968: 0xCAFB, + 37040 - 19968: 0xF7C6, + 37041 - 19968: 0xCFC8, + 37045 - 19968: 0xE1D0, + 37048 - 19968: 0xEED0, + 37057 - 19968: 0xE9F4, + 37066 - 19968: 0xCEF4, + 37086 - 19968: 0xD5CD, + 37089 - 19968: 0xCFDB, + 37096 - 19968: 0xDDBB, + 37101 - 19968: 0xCEAC, + 37109 - 19968: 0xE9E8, + 37117 - 19968: 0xD4B4, + 37122 - 19968: 0xE4C7, + 37138 - 19968: 0xF5DB, + 37141 - 19968: 0xFAC1, + 37145 - 19968: 0xDEA9, + 37159 - 19968: 0xD4F8, + 37165 - 19968: 0xEFF7, + 37170 - 19968: 0xD3B3, + 37193 - 19968: 0xEBB7, + 37194 - 19968: 0xEFF8, + 37195 - 19968: 0xF5DC, + 37196 - 19968: 0xEDCC, + 37197 - 19968: 0xDBD5, + 37198 - 19968: 0xF1CF, + 37202 - 19968: 0xF1D0, + 37218 - 19968: 0xF5B2, + 37225 - 19968: 0xD9AE, + 37226 - 19968: 0xD5AC, + 37228 - 19968: 0xE2C6, + 37237 - 19968: 0xFDA3, + 37239 - 19968: 0xFBE5, + 37240 - 19968: 0xDFAB, + 37255 - 19968: 0xE2F5, + 37257 - 19968: 0xF6AD, + 37259 - 19968: 0xF5B3, + 37261 - 19968: 0xF0B5, + 37266 - 19968: 0xE1A5, + 37276 - 19968: 0xF5DD, + 37291 - 19968: 0xECA2, + 37292 - 19968: 0xEDFD, + 37294 - 19968: 0xF5B4, + 37295 - 19968: 0xFBB8, + 37297 - 19968: 0xDBA3, + 37300 - 19968: 0xD6CA, + 37301 - 19968: 0xCBD9, + 37312 - 19968: 0xE5D4, + 37319 - 19968: 0xF3FA, + 37321 - 19968: 0xEBB8, + 37323 - 19968: 0xE0B7, + 37324 - 19968: 0xD7EC, + 37325 - 19968: 0xF1EC, + 37326 - 19968: 0xE5AF, + 37327 - 19968: 0xD5E1, + 37328 - 19968: 0xD7ED, + 37329 - 19968: 0xD1D1, + 37335 - 19968: 0xE1F2, + 37336 - 19968: 0xEFF9, + 37340 - 19968: 0xDDBC, + 37341 - 19968: 0xF6DC, + 37347 - 19968: 0xF0E5, + 37351 - 19968: 0xF4C4, + 37354 - 19968: 0xE9E9, + 37365 - 19968: 0xF3FB, + 37389 - 19968: 0xD4EF, + 37392 - 19968: 0xCCA2, + 37393 - 19968: 0xF7FE, + 37394 - 19968: 0xDFBC, + 37399 - 19968: 0xEBCD, + 37406 - 19968: 0xD0B7, + 37428 - 19968: 0xD6C2, + 37434 - 19968: 0xE8AD, + 37439 - 19968: 0xEFAF, + 37440 - 19968: 0xCBA5, + 37445 - 19968: 0xCBE9, + 37449 - 19968: 0xFAE8, + 37463 - 19968: 0xCCC6, + 37467 - 19968: 0xE6E7, + 37470 - 19968: 0xEAC7, + 37474 - 19968: 0xDBA4, + 37476 - 19968: 0xCFC9, + 37477 - 19968: 0xE2FC, + 37478 - 19968: 0xEFFA, + 37504 - 19968: 0xEBDE, + 37507 - 19968: 0xF5C8, + 37509 - 19968: 0xD4DE, + 37521 - 19968: 0xE0D5, + 37523 - 19968: 0xEFB0, + 37526 - 19968: 0xE2C7, + 37528 - 19968: 0xD9AF, + 37532 - 19968: 0xF9E7, + 37555 - 19968: 0xE7E5, + 37558 - 19968: 0xCFCA, + 37559 - 19968: 0xE1D1, + 37561 - 19968: 0xE2C8, + 37580 - 19968: 0xEFFB, + 37583 - 19968: 0xFAF9, + 37586 - 19968: 0xDCF2, + 37604 - 19968: 0xE0A7, + 37610 - 19968: 0xF8E8, + 37624 - 19968: 0xCBEA, + 37628 - 19968: 0xCBBC, + 37636 - 19968: 0xD6E2, + 37648 - 19968: 0xF5DE, + 37656 - 19968: 0xF5DF, + 37658 - 19968: 0xEEB6, + 37662 - 19968: 0xE2F6, + 37663 - 19968: 0xD3CA, + 37664 - 19968: 0xEFFC, + 37665 - 19968: 0xD1C4, + 37666 - 19968: 0xEFB1, + 37668 - 19968: 0xD1C5, + 37670 - 19968: 0xD0DE, + 37672 - 19968: 0xD9E1, + 37675 - 19968: 0xE0B8, + 37678 - 19968: 0xCDD1, + 37679 - 19968: 0xF3B9, + 37704 - 19968: 0xE7CC, + 37706 - 19968: 0xD6A8, + 37707 - 19968: 0xCEA7, + 37709 - 19968: 0xD4B5, + 37716 - 19968: 0xE4C8, + 37723 - 19968: 0xD3B4, + 37742 - 19968: 0xEBB9, + 37749 - 19968: 0xCBF5, + 37756 - 19968: 0xF6DD, + 37758 - 19968: 0xF1A3, + 37772 - 19968: 0xCCC7, + 37780 - 19968: 0xE9CA, + 37782 - 19968: 0xE1F0, + 37786 - 19968: 0xF5E0, + 37795 - 19968: 0xFBAF, + 37799 - 19968: 0xCBD1, + 37804 - 19968: 0xFBE0, + 37805 - 19968: 0xF2E5, + 37808 - 19968: 0xECF0, + 37827 - 19968: 0xF0EC, + 37841 - 19968: 0xEEEB, + 37854 - 19968: 0xE9CB, + 37857 - 19968: 0xCCF0, + 37860 - 19968: 0xD7AF, + 37878 - 19968: 0xF3A1, + 37892 - 19968: 0xFCF5, + 37912 - 19968: 0xF1A4, + 37925 - 19968: 0xE0D6, + 37931 - 19968: 0xEFB2, + 37941 - 19968: 0xF4D1, + 37944 - 19968: 0xF7A1, + 37956 - 19968: 0xF1D1, + 37969 - 19968: 0xCAFC, + 37970 - 19968: 0xCAFD, + 37979 - 19968: 0xCECE, + 38013 - 19968: 0xF3C8, + 38015 - 19968: 0xF3BA, + 38263 - 19968: 0xEDFE, + 38272 - 19968: 0xDAA6, + 38275 - 19968: 0xE0EC, + 38281 - 19968: 0xF8CD, + 38283 - 19968: 0xCBD2, + 38287 - 19968: 0xEBCE, + 38289 - 19968: 0xF9D8, + 38290 - 19968: 0xF9D9, + 38291 - 19968: 0xCAE0, + 38292 - 19968: 0xDACA, + 38296 - 19968: 0xCBA6, + 38307 - 19968: 0xCAC8, + 38308 - 19968: 0xF9EE, + 38309 - 19968: 0xDBEC, + 38312 - 19968: 0xD0B1, + 38317 - 19968: 0xD5EF, + 38321 - 19968: 0xE6F3, + 38331 - 19968: 0xE7A2, + 38332 - 19968: 0xE4D9, + 38343 - 19968: 0xE4E1, + 38346 - 19968: 0xFCC4, + 38356 - 19968: 0xF9EF, + 38357 - 19968: 0xCFF4, + 38358 - 19968: 0xF7E6, + 38364 - 19968: 0xCEBC, + 38369 - 19968: 0xF4C5, + 38370 - 19968: 0xDCA3, + 38428 - 19968: 0xDDBD, + 38433 - 19968: 0xF4C6, + 38442 - 19968: 0xF8A1, + 38446 - 19968: 0xE8D6, + 38450 - 19968: 0xDBC1, + 38459 - 19968: 0xF0E6, + 38463 - 19968: 0xE4B9, + 38464 - 19968: 0xF6ED, + 38466 - 19968: 0xF9AE, + 38468 - 19968: 0xDDBE, + 38475 - 19968: 0xD7B0, + 38476 - 19968: 0xD8E8, + 38477 - 19968: 0xCBBD, + 38480 - 19968: 0xF9DA, + 38491 - 19968: 0xF8CE, + 38492 - 19968: 0xF9F0, + 38493 - 19968: 0xE0ED, + 38494 - 19968: 0xE3B3, + 38495 - 19968: 0xF4B3, + 38498 - 19968: 0xEAC2, + 38499 - 19968: 0xF2E6, + 38500 - 19968: 0xF0B6, + 38506 - 19968: 0xDBD6, + 38512 - 19968: 0xEBE4, + 38515 - 19968: 0xF2E7, + 38517 - 19968: 0xD7D5, + 38518 - 19968: 0xD4B6, + 38519 - 19968: 0xF9E8, + 38520 - 19968: 0xD7C1, + 38525 - 19968: 0xE5D5, + 38533 - 19968: 0xE9EA, + 38534 - 19968: 0xD7CC, + 38538 - 19968: 0xD3E9, + 38539 - 19968: 0xE2C9, + 38541 - 19968: 0xFCDB, + 38542 - 19968: 0xCDAD, + 38548 - 19968: 0xCCB0, + 38549 - 19968: 0xEAA2, + 38552 - 19968: 0xE4F6, + 38553 - 19968: 0xD0C0, + 38555 - 19968: 0xF0B7, + 38556 - 19968: 0xEEA1, + 38563 - 19968: 0xD7F6, + 38567 - 19968: 0xE2CA, + 38568 - 19968: 0xE2CB, + 38570 - 19968: 0xFACF, + 38577 - 19968: 0xEBDF, + 38583 - 19968: 0xD6CB, + 38587 - 19968: 0xF4B4, + 38592 - 19968: 0xEDCD, + 38593 - 19968: 0xE4D2, + 38596 - 19968: 0xEAA9, + 38597 - 19968: 0xE4BA, + 38598 - 19968: 0xF3A2, + 38599 - 19968: 0xCDD2, + 38601 - 19968: 0xF6CB, + 38603 - 19968: 0xF1E6, + 38604 - 19968: 0xEDC1, + 38605 - 19968: 0xE8BC, + 38606 - 19968: 0xEED1, + 38613 - 19968: 0xF0E7, + 38614 - 19968: 0xE2CC, + 38617 - 19968: 0xE4AA, + 38619 - 19968: 0xF5E1, + 38620 - 19968: 0xEDDA, + 38626 - 19968: 0xD7EE, + 38627 - 19968: 0xD1F1, + 38632 - 19968: 0xE9EB, + 38633 - 19968: 0xE9EC, + 38634 - 19968: 0xE0E4, + 38639 - 19968: 0xDAA7, + 38640 - 19968: 0xDDD4, + 38642 - 19968: 0xEAA3, + 38646 - 19968: 0xD6C3, + 38647 - 19968: 0xD6F4, + 38649 - 19968: 0xDADF, + 38651 - 19968: 0xEFB3, + 38656 - 19968: 0xE2CD, + 38662 - 19968: 0xEFFD, + 38663 - 19968: 0xF2E8, + 38673 - 19968: 0xEFC5, + 38675 - 19968: 0xE7E7, + 38678 - 19968: 0xD7FD, + 38681 - 19968: 0xE7CE, + 38684 - 19968: 0xDFDC, + 38686 - 19968: 0xF9C7, + 38695 - 19968: 0xD9F6, + 38704 - 19968: 0xDFAC, + 38706 - 19968: 0xD6DA, + 38713 - 19968: 0xDCA4, + 38717 - 19968: 0xF0B8, + 38722 - 19968: 0xD5FA, + 38724 - 19968: 0xE4F7, + 38728 - 19968: 0xD6C4, + 38737 - 19968: 0xF4EC, + 38742 - 19968: 0xEFFE, + 38748 - 19968: 0xF0A1, + 38750 - 19968: 0xDEAA, + 38753 - 19968: 0xDABC, + 38754 - 19968: 0xD8FC, + 38761 - 19968: 0xFAD4, + 38765 - 19968: 0xECE5, + 38772 - 19968: 0xFCA8, + 38775 - 19968: 0xECE6, + 38778 - 19968: 0xD8CB, + 38795 - 19968: 0xFBB9, + 38797 - 19968: 0xE4D3, + 38799 - 19968: 0xCDF9, + 38816 - 19968: 0xCFD3, + 38824 - 19968: 0xCAEA, + 38827 - 19968: 0xCFD4, + 38829 - 19968: 0xF8BD, + 38854 - 19968: 0xF4C7, + 38859 - 19968: 0xEADF, + 38867 - 19968: 0xF9DB, + 38876 - 19968: 0xD4B7, + 38899 - 19968: 0xEBE5, + 38902 - 19968: 0xE1D2, + 38907 - 19968: 0xEAA4, + 38911 - 19968: 0xFAC2, + 38912 - 19968: 0xFBE1, + 38913 - 19968: 0xFAED, + 38914 - 19968: 0xF0A2, + 38915 - 19968: 0xCCF1, + 38917 - 19968: 0xFAA3, + 38918 - 19968: 0xE2F7, + 38920 - 19968: 0xE2CE, + 38922 - 19968: 0xE9F5, + 38924 - 19968: 0xE1EB, + 38928 - 19968: 0xE7E8, + 38929 - 19968: 0xE8D7, + 38930 - 19968: 0xDAF8, + 38931 - 19968: 0xD4CB, + 38935 - 19968: 0xF7F6, + 38936 - 19968: 0xD6C5, + 38957 - 19968: 0xD4E9, + 38960 - 19968: 0xFAFA, + 38968 - 19968: 0xCCF2, + 38969 - 19968: 0xF7DD, + 38971 - 19968: 0xDEBA, + 38982 - 19968: 0xCEA8, + 38988 - 19968: 0xF0B9, + 38989 - 19968: 0xE4FE, + 38990 - 19968: 0xE4C9, + 38996 - 19968: 0xE4D4, + 39000 - 19968: 0xEAC3, + 39002 - 19968: 0xEFB4, + 39006 - 19968: 0xD7BE, + 39013 - 19968: 0xFBE2, + 39015 - 19968: 0xCDD3, + 39019 - 19968: 0xEFB5, + 39023 - 19968: 0xFAE9, + 39080 - 19968: 0xF9A6, + 39087 - 19968: 0xDFBD, + 39089 - 19968: 0xF7C7, + 39108 - 19968: 0xF8FD, + 39111 - 19968: 0xF8FC, + 39131 - 19968: 0xDEAB, + 39132 - 19968: 0xDBE8, + 39135 - 19968: 0xE3DD, + 39137 - 19968: 0xE1E2, + 39138 - 19968: 0xD1C6, + 39149 - 19968: 0xF6D0, + 39150 - 19968: 0xEBE6, + 39151 - 19968: 0xDAF9, + 39156 - 19968: 0xECC7, + 39164 - 19968: 0xDEF8, + 39165 - 19968: 0xF8E9, + 39166 - 19968: 0xE3DE, + 39171 - 19968: 0xCEF5, + 39177 - 19968: 0xFAC3, + 39178 - 19968: 0xE5D7, + 39180 - 19968: 0xECC8, + 39184 - 19968: 0xF3C9, + 39187 - 19968: 0xE4BB, + 39192 - 19968: 0xE6AE, + 39198 - 19968: 0xEFB6, + 39200 - 19968: 0xDCBF, + 39208 - 19968: 0xCEBD, + 39237 - 19968: 0xD8C3, + 39241 - 19968: 0xD0CF, + 39243 - 19968: 0xCFFA, + 39244 - 19968: 0xF3CA, + 39245 - 19968: 0xE0D7, + 39249 - 19968: 0xD1C7, + 39250 - 19968: 0xE9AE, + 39252 - 19968: 0xE8BD, + 39255 - 19968: 0xFAC4, + 39318 - 19968: 0xE2CF, + 39321 - 19968: 0xFAC5, + 39325 - 19968: 0xF9B8, + 39333 - 19968: 0xDCE0, + 39336 - 19968: 0xFBB0, + 39340 - 19968: 0xD8A9, + 39341 - 19968: 0xE5DF, + 39342 - 19968: 0xF9A7, + 39345 - 19968: 0xF6EE, + 39347 - 19968: 0xF6CC, + 39348 - 19968: 0xE2F8, + 39353 - 19968: 0xECF1, + 39361 - 19968: 0xDAE0, + 39376 - 19968: 0xF1D2, + 39377 - 19968: 0xD2CC, + 39378 - 19968: 0xCFCB, + 39381 - 19968: 0xCABD, + 39385 - 19968: 0xDDBF, + 39389 - 19968: 0xF6EF, + 39391 - 19968: 0xDEF9, + 39405 - 19968: 0xFAB4, + 39409 - 19968: 0xD5AD, + 39423 - 19968: 0xF1E7, + 39425 - 19968: 0xDEBE, + 39432 - 19968: 0xDCC0, + 39438 - 19968: 0xD1C8, + 39439 - 19968: 0xD1C9, + 39449 - 19968: 0xF8BE, + 39467 - 19968: 0xCBF6, + 39472 - 19968: 0xD4F9, + 39478 - 19968: 0xF5E2, + 39479 - 19968: 0xE1D3, + 39488 - 19968: 0xD8E9, + 39491 - 19968: 0xF8FE, + 39493 - 19968: 0xCFCC, + 39501 - 19968: 0xFDA4, + 39509 - 19968: 0xCEF6, + 39511 - 19968: 0xFAD0, + 39514 - 19968: 0xCCF3, + 39515 - 19968: 0xE6BE, + 39519 - 19968: 0xF6AE, + 39522 - 19968: 0xD5F0, + 39525 - 19968: 0xD1CA, + 39529 - 19968: 0xFCBE, + 39530 - 19968: 0xD5F1, + 39592 - 19968: 0xCDE9, + 39608 - 19968: 0xFAB5, + 39635 - 19968: 0xE2D0, + 39636 - 19968: 0xF4F7, + 39640 - 19968: 0xCDD4, + 39653 - 19968: 0xE7A3, + 39662 - 19968: 0xDBA5, + 39706 - 19968: 0xE2D1, + 39719 - 19968: 0xD7A2, + 39722 - 19968: 0xF7E3, + 39729 - 19968: 0xEAA6, + 39740 - 19968: 0xD0A1, + 39745 - 19968: 0xCEDA, + 39746 - 19968: 0xFBEB, + 39747 - 19968: 0xDBA6, + 39748 - 19968: 0xDBDE, + 39749 - 19968: 0xD8E5, + 39759 - 19968: 0xEAE0, + 39764 - 19968: 0xD8AA, + 39770 - 19968: 0xE5E0, + 39791 - 19968: 0xD6DB, + 39822 - 19968: 0xEFC6, + 39825 - 19968: 0xF8EA, + 39839 - 19968: 0xE4D5, + 39851 - 19968: 0xCEF7, + 39854 - 19968: 0xE0D8, + 39881 - 19968: 0xD7EF, + 39894 - 19968: 0xF4ED, + 39908 - 19968: 0xCDE6, + 39912 - 19968: 0xCCF4, + 39949 - 19968: 0xF5E3, + 39952 - 19968: 0xE4CA, + 39954 - 19968: 0xDCE1, + 39957 - 19968: 0xF9C8, + 39973 - 19968: 0xFCBF, + 39986 - 19968: 0xE8A7, + 39995 - 19968: 0xD8C4, + 40007 - 19968: 0xCBBE, + 40009 - 19968: 0xDCAE, + 40023 - 19968: 0xD7F7, + 40165 - 19968: 0xF0E8, + 40167 - 19968: 0xDDC0, + 40169 - 19968: 0xCFCD, + 40179 - 19968: 0xDCF3, + 40180 - 19968: 0xD9B0, + 40182 - 19968: 0xE6E9, + 40201 - 19968: 0xE4BC, + 40219 - 19968: 0xEAC4, + 40230 - 19968: 0xE4EC, + 40232 - 19968: 0xE4E5, + 40251 - 19968: 0xFBF8, + 40273 - 19968: 0xCCBB, + 40285 - 19968: 0xE4BD, + 40288 - 19968: 0xCDDC, + 40289 - 19968: 0xD9F7, + 40300 - 19968: 0xDDDF, + 40306 - 19968: 0xEDCE, + 40361 - 19968: 0xD9D0, + 40367 - 19968: 0xE5A3, + 40372 - 19968: 0xF9CD, + 40388 - 19968: 0xCDAE, + 40407 - 19968: 0xCFCE, + 40434 - 19968: 0xF6AF, + 40440 - 19968: 0xFDD3, + 40441 - 19968: 0xEBED, + 40442 - 19968: 0xD6DC, + 40474 - 19968: 0xE5A4, + 40478 - 19968: 0xD5B6, + 40565 - 19968: 0xD6DD, + 40569 - 19968: 0xF9E9, + 40573 - 19968: 0xE7A4, + 40575 - 19968: 0xD6E3, + 40594 - 19968: 0xD1CB, + 40595 - 19968: 0xD6E4, + 40599 - 19968: 0xD5F2, + 40605 - 19968: 0xDEFA, + 40607 - 19968: 0xD7F8, + 40613 - 19968: 0xD8EA, + 40628 - 19968: 0xCFD5, + 40629 - 19968: 0xD8FD, + 40635 - 19968: 0xD8AB, + 40638 - 19968: 0xFDCB, + 40643 - 19968: 0xFCDC, + 40653 - 19968: 0xE0A8, + 40654 - 19968: 0xD5F3, + 40657 - 19968: 0xFDD9, + 40660 - 19968: 0xCCA3, + 40664 - 19968: 0xD9F9, + 40667 - 19968: 0xD3EA, + 40668 - 19968: 0xF5F5, + 40670 - 19968: 0xEFC7, + 40680 - 19968: 0xD3DA, + 40692 - 19968: 0xDABD, + 40711 - 19968: 0xE8A8, + 40712 - 19968: 0xDCAF, + 40718 - 19968: 0xF0A3, + 40723 - 19968: 0xCDD5, + 40736 - 19968: 0xE0A9, + 40763 - 19968: 0xDEAC, + 40778 - 19968: 0xF0BA, + 40779 - 19968: 0xEEB1, + 40782 - 19968: 0xEEB2, + 40786 - 19968: 0xF6CD, + 40799 - 19968: 0xEED2, + 40801 - 19968: 0xD6C6, + 40807 - 19968: 0xE0E5, + 40810 - 19968: 0xF3BB, + 40812 - 19968: 0xE5E1, + 40823 - 19968: 0xE4CB, + 40845 - 19968: 0xD7A3, + 40848 - 19968: 0xDBC2, + 40853 - 19968: 0xCAFE, + 40860 - 19968: 0xCFCF, +} + +const encode1Low, encode1High = 44032, 55204 + +var encode1 = [...]uint16{ + 44032 - 44032: 0xB0A1, + 44033 - 44032: 0xB0A2, + 44034 - 44032: 0x8141, + 44035 - 44032: 0x8142, + 44036 - 44032: 0xB0A3, + 44037 - 44032: 0x8143, + 44038 - 44032: 0x8144, + 44039 - 44032: 0xB0A4, + 44040 - 44032: 0xB0A5, + 44041 - 44032: 0xB0A6, + 44042 - 44032: 0xB0A7, + 44043 - 44032: 0x8145, + 44044 - 44032: 0x8146, + 44045 - 44032: 0x8147, + 44046 - 44032: 0x8148, + 44047 - 44032: 0x8149, + 44048 - 44032: 0xB0A8, + 44049 - 44032: 0xB0A9, + 44050 - 44032: 0xB0AA, + 44051 - 44032: 0xB0AB, + 44052 - 44032: 0xB0AC, + 44053 - 44032: 0xB0AD, + 44054 - 44032: 0xB0AE, + 44055 - 44032: 0xB0AF, + 44056 - 44032: 0x814A, + 44057 - 44032: 0xB0B0, + 44058 - 44032: 0xB0B1, + 44059 - 44032: 0xB0B2, + 44060 - 44032: 0xB0B3, + 44061 - 44032: 0xB0B4, + 44062 - 44032: 0x814B, + 44063 - 44032: 0x814C, + 44064 - 44032: 0xB0B5, + 44065 - 44032: 0x814D, + 44066 - 44032: 0x814E, + 44067 - 44032: 0x814F, + 44068 - 44032: 0xB0B6, + 44069 - 44032: 0x8150, + 44070 - 44032: 0x8151, + 44071 - 44032: 0x8152, + 44072 - 44032: 0x8153, + 44073 - 44032: 0x8154, + 44074 - 44032: 0x8155, + 44075 - 44032: 0x8156, + 44076 - 44032: 0xB0B7, + 44077 - 44032: 0xB0B8, + 44078 - 44032: 0x8157, + 44079 - 44032: 0xB0B9, + 44080 - 44032: 0xB0BA, + 44081 - 44032: 0xB0BB, + 44082 - 44032: 0x8158, + 44083 - 44032: 0x8159, + 44084 - 44032: 0x815A, + 44085 - 44032: 0x8161, + 44086 - 44032: 0x8162, + 44087 - 44032: 0x8163, + 44088 - 44032: 0xB0BC, + 44089 - 44032: 0xB0BD, + 44090 - 44032: 0x8164, + 44091 - 44032: 0x8165, + 44092 - 44032: 0xB0BE, + 44093 - 44032: 0x8166, + 44094 - 44032: 0x8167, + 44095 - 44032: 0x8168, + 44096 - 44032: 0xB0BF, + 44097 - 44032: 0x8169, + 44098 - 44032: 0x816A, + 44099 - 44032: 0x816B, + 44100 - 44032: 0x816C, + 44101 - 44032: 0x816D, + 44102 - 44032: 0x816E, + 44103 - 44032: 0x816F, + 44104 - 44032: 0x8170, + 44105 - 44032: 0x8171, + 44106 - 44032: 0x8172, + 44107 - 44032: 0xB0C0, + 44108 - 44032: 0x8173, + 44109 - 44032: 0xB0C1, + 44110 - 44032: 0x8174, + 44111 - 44032: 0x8175, + 44112 - 44032: 0x8176, + 44113 - 44032: 0x8177, + 44114 - 44032: 0x8178, + 44115 - 44032: 0x8179, + 44116 - 44032: 0xB0C2, + 44117 - 44032: 0x817A, + 44118 - 44032: 0x8181, + 44119 - 44032: 0x8182, + 44120 - 44032: 0xB0C3, + 44121 - 44032: 0x8183, + 44122 - 44032: 0x8184, + 44123 - 44032: 0x8185, + 44124 - 44032: 0xB0C4, + 44125 - 44032: 0x8186, + 44126 - 44032: 0x8187, + 44127 - 44032: 0x8188, + 44128 - 44032: 0x8189, + 44129 - 44032: 0x818A, + 44130 - 44032: 0x818B, + 44131 - 44032: 0x818C, + 44132 - 44032: 0x818D, + 44133 - 44032: 0x818E, + 44134 - 44032: 0x818F, + 44135 - 44032: 0x8190, + 44136 - 44032: 0x8191, + 44137 - 44032: 0x8192, + 44138 - 44032: 0x8193, + 44139 - 44032: 0x8194, + 44140 - 44032: 0x8195, + 44141 - 44032: 0x8196, + 44142 - 44032: 0x8197, + 44143 - 44032: 0x8198, + 44144 - 44032: 0xB0C5, + 44145 - 44032: 0xB0C6, + 44146 - 44032: 0x8199, + 44147 - 44032: 0x819A, + 44148 - 44032: 0xB0C7, + 44149 - 44032: 0x819B, + 44150 - 44032: 0x819C, + 44151 - 44032: 0xB0C8, + 44152 - 44032: 0xB0C9, + 44153 - 44032: 0x819D, + 44154 - 44032: 0xB0CA, + 44155 - 44032: 0x819E, + 44156 - 44032: 0x819F, + 44157 - 44032: 0x81A0, + 44158 - 44032: 0x81A1, + 44159 - 44032: 0x81A2, + 44160 - 44032: 0xB0CB, + 44161 - 44032: 0xB0CC, + 44162 - 44032: 0x81A3, + 44163 - 44032: 0xB0CD, + 44164 - 44032: 0xB0CE, + 44165 - 44032: 0xB0CF, + 44166 - 44032: 0xB0D0, + 44167 - 44032: 0x81A4, + 44168 - 44032: 0x81A5, + 44169 - 44032: 0xB0D1, + 44170 - 44032: 0xB0D2, + 44171 - 44032: 0xB0D3, + 44172 - 44032: 0xB0D4, + 44173 - 44032: 0x81A6, + 44174 - 44032: 0x81A7, + 44175 - 44032: 0x81A8, + 44176 - 44032: 0xB0D5, + 44177 - 44032: 0x81A9, + 44178 - 44032: 0x81AA, + 44179 - 44032: 0x81AB, + 44180 - 44032: 0xB0D6, + 44181 - 44032: 0x81AC, + 44182 - 44032: 0x81AD, + 44183 - 44032: 0x81AE, + 44184 - 44032: 0x81AF, + 44185 - 44032: 0x81B0, + 44186 - 44032: 0x81B1, + 44187 - 44032: 0x81B2, + 44188 - 44032: 0xB0D7, + 44189 - 44032: 0xB0D8, + 44190 - 44032: 0x81B3, + 44191 - 44032: 0xB0D9, + 44192 - 44032: 0xB0DA, + 44193 - 44032: 0xB0DB, + 44194 - 44032: 0x81B4, + 44195 - 44032: 0x81B5, + 44196 - 44032: 0x81B6, + 44197 - 44032: 0x81B7, + 44198 - 44032: 0x81B8, + 44199 - 44032: 0x81B9, + 44200 - 44032: 0xB0DC, + 44201 - 44032: 0xB0DD, + 44202 - 44032: 0xB0DE, + 44203 - 44032: 0x81BA, + 44204 - 44032: 0xB0DF, + 44205 - 44032: 0x81BB, + 44206 - 44032: 0x81BC, + 44207 - 44032: 0xB0E0, + 44208 - 44032: 0xB0E1, + 44209 - 44032: 0x81BD, + 44210 - 44032: 0x81BE, + 44211 - 44032: 0x81BF, + 44212 - 44032: 0x81C0, + 44213 - 44032: 0x81C1, + 44214 - 44032: 0x81C2, + 44215 - 44032: 0x81C3, + 44216 - 44032: 0xB0E2, + 44217 - 44032: 0xB0E3, + 44218 - 44032: 0x81C4, + 44219 - 44032: 0xB0E4, + 44220 - 44032: 0xB0E5, + 44221 - 44032: 0xB0E6, + 44222 - 44032: 0x81C5, + 44223 - 44032: 0x81C6, + 44224 - 44032: 0x81C7, + 44225 - 44032: 0xB0E7, + 44226 - 44032: 0x81C8, + 44227 - 44032: 0x81C9, + 44228 - 44032: 0xB0E8, + 44229 - 44032: 0x81CA, + 44230 - 44032: 0x81CB, + 44231 - 44032: 0x81CC, + 44232 - 44032: 0xB0E9, + 44233 - 44032: 0x81CD, + 44234 - 44032: 0x81CE, + 44235 - 44032: 0x81CF, + 44236 - 44032: 0xB0EA, + 44237 - 44032: 0x81D0, + 44238 - 44032: 0x81D1, + 44239 - 44032: 0x81D2, + 44240 - 44032: 0x81D3, + 44241 - 44032: 0x81D4, + 44242 - 44032: 0x81D5, + 44243 - 44032: 0x81D6, + 44244 - 44032: 0x81D7, + 44245 - 44032: 0xB0EB, + 44246 - 44032: 0x81D8, + 44247 - 44032: 0xB0EC, + 44248 - 44032: 0x81D9, + 44249 - 44032: 0x81DA, + 44250 - 44032: 0x81DB, + 44251 - 44032: 0x81DC, + 44252 - 44032: 0x81DD, + 44253 - 44032: 0x81DE, + 44254 - 44032: 0x81DF, + 44255 - 44032: 0x81E0, + 44256 - 44032: 0xB0ED, + 44257 - 44032: 0xB0EE, + 44258 - 44032: 0x81E1, + 44259 - 44032: 0x81E2, + 44260 - 44032: 0xB0EF, + 44261 - 44032: 0x81E3, + 44262 - 44032: 0x81E4, + 44263 - 44032: 0xB0F0, + 44264 - 44032: 0xB0F1, + 44265 - 44032: 0x81E5, + 44266 - 44032: 0xB0F2, + 44267 - 44032: 0x81E6, + 44268 - 44032: 0xB0F3, + 44269 - 44032: 0x81E7, + 44270 - 44032: 0x81E8, + 44271 - 44032: 0xB0F4, + 44272 - 44032: 0xB0F5, + 44273 - 44032: 0xB0F6, + 44274 - 44032: 0x81E9, + 44275 - 44032: 0xB0F7, + 44276 - 44032: 0x81EA, + 44277 - 44032: 0xB0F8, + 44278 - 44032: 0xB0F9, + 44279 - 44032: 0x81EB, + 44280 - 44032: 0x81EC, + 44281 - 44032: 0x81ED, + 44282 - 44032: 0x81EE, + 44283 - 44032: 0x81EF, + 44284 - 44032: 0xB0FA, + 44285 - 44032: 0xB0FB, + 44286 - 44032: 0x81F0, + 44287 - 44032: 0x81F1, + 44288 - 44032: 0xB0FC, + 44289 - 44032: 0x81F2, + 44290 - 44032: 0x81F3, + 44291 - 44032: 0x81F4, + 44292 - 44032: 0xB0FD, + 44293 - 44032: 0x81F5, + 44294 - 44032: 0xB0FE, + 44295 - 44032: 0x81F6, + 44296 - 44032: 0x81F7, + 44297 - 44032: 0x81F8, + 44298 - 44032: 0x81F9, + 44299 - 44032: 0x81FA, + 44300 - 44032: 0xB1A1, + 44301 - 44032: 0xB1A2, + 44302 - 44032: 0x81FB, + 44303 - 44032: 0xB1A3, + 44304 - 44032: 0x81FC, + 44305 - 44032: 0xB1A4, + 44306 - 44032: 0x81FD, + 44307 - 44032: 0x81FE, + 44308 - 44032: 0x8241, + 44309 - 44032: 0x8242, + 44310 - 44032: 0x8243, + 44311 - 44032: 0x8244, + 44312 - 44032: 0xB1A5, + 44313 - 44032: 0x8245, + 44314 - 44032: 0x8246, + 44315 - 44032: 0x8247, + 44316 - 44032: 0xB1A6, + 44317 - 44032: 0x8248, + 44318 - 44032: 0x8249, + 44319 - 44032: 0x824A, + 44320 - 44032: 0xB1A7, + 44321 - 44032: 0x824B, + 44322 - 44032: 0x824C, + 44323 - 44032: 0x824D, + 44324 - 44032: 0x824E, + 44325 - 44032: 0x824F, + 44326 - 44032: 0x8250, + 44327 - 44032: 0x8251, + 44328 - 44032: 0x8252, + 44329 - 44032: 0xB1A8, + 44330 - 44032: 0x8253, + 44331 - 44032: 0x8254, + 44332 - 44032: 0xB1A9, + 44333 - 44032: 0xB1AA, + 44334 - 44032: 0x8255, + 44335 - 44032: 0x8256, + 44336 - 44032: 0x8257, + 44337 - 44032: 0x8258, + 44338 - 44032: 0x8259, + 44339 - 44032: 0x825A, + 44340 - 44032: 0xB1AB, + 44341 - 44032: 0xB1AC, + 44342 - 44032: 0x8261, + 44343 - 44032: 0x8262, + 44344 - 44032: 0xB1AD, + 44345 - 44032: 0x8263, + 44346 - 44032: 0x8264, + 44347 - 44032: 0x8265, + 44348 - 44032: 0xB1AE, + 44349 - 44032: 0x8266, + 44350 - 44032: 0x8267, + 44351 - 44032: 0x8268, + 44352 - 44032: 0x8269, + 44353 - 44032: 0x826A, + 44354 - 44032: 0x826B, + 44355 - 44032: 0x826C, + 44356 - 44032: 0xB1AF, + 44357 - 44032: 0xB1B0, + 44358 - 44032: 0x826D, + 44359 - 44032: 0xB1B1, + 44360 - 44032: 0x826E, + 44361 - 44032: 0xB1B2, + 44362 - 44032: 0x826F, + 44363 - 44032: 0x8270, + 44364 - 44032: 0x8271, + 44365 - 44032: 0x8272, + 44366 - 44032: 0x8273, + 44367 - 44032: 0x8274, + 44368 - 44032: 0xB1B3, + 44369 - 44032: 0x8275, + 44370 - 44032: 0x8276, + 44371 - 44032: 0x8277, + 44372 - 44032: 0xB1B4, + 44373 - 44032: 0x8278, + 44374 - 44032: 0x8279, + 44375 - 44032: 0x827A, + 44376 - 44032: 0xB1B5, + 44377 - 44032: 0x8281, + 44378 - 44032: 0x8282, + 44379 - 44032: 0x8283, + 44380 - 44032: 0x8284, + 44381 - 44032: 0x8285, + 44382 - 44032: 0x8286, + 44383 - 44032: 0x8287, + 44384 - 44032: 0x8288, + 44385 - 44032: 0xB1B6, + 44386 - 44032: 0x8289, + 44387 - 44032: 0xB1B7, + 44388 - 44032: 0x828A, + 44389 - 44032: 0x828B, + 44390 - 44032: 0x828C, + 44391 - 44032: 0x828D, + 44392 - 44032: 0x828E, + 44393 - 44032: 0x828F, + 44394 - 44032: 0x8290, + 44395 - 44032: 0x8291, + 44396 - 44032: 0xB1B8, + 44397 - 44032: 0xB1B9, + 44398 - 44032: 0x8292, + 44399 - 44032: 0x8293, + 44400 - 44032: 0xB1BA, + 44401 - 44032: 0x8294, + 44402 - 44032: 0x8295, + 44403 - 44032: 0xB1BB, + 44404 - 44032: 0xB1BC, + 44405 - 44032: 0xB1BD, + 44406 - 44032: 0xB1BE, + 44407 - 44032: 0x8296, + 44408 - 44032: 0x8297, + 44409 - 44032: 0x8298, + 44410 - 44032: 0x8299, + 44411 - 44032: 0xB1BF, + 44412 - 44032: 0xB1C0, + 44413 - 44032: 0xB1C1, + 44414 - 44032: 0x829A, + 44415 - 44032: 0xB1C2, + 44416 - 44032: 0x829B, + 44417 - 44032: 0xB1C3, + 44418 - 44032: 0xB1C4, + 44419 - 44032: 0x829C, + 44420 - 44032: 0x829D, + 44421 - 44032: 0x829E, + 44422 - 44032: 0x829F, + 44423 - 44032: 0x82A0, + 44424 - 44032: 0xB1C5, + 44425 - 44032: 0xB1C6, + 44426 - 44032: 0x82A1, + 44427 - 44032: 0x82A2, + 44428 - 44032: 0xB1C7, + 44429 - 44032: 0x82A3, + 44430 - 44032: 0x82A4, + 44431 - 44032: 0x82A5, + 44432 - 44032: 0xB1C8, + 44433 - 44032: 0x82A6, + 44434 - 44032: 0x82A7, + 44435 - 44032: 0x82A8, + 44436 - 44032: 0x82A9, + 44437 - 44032: 0x82AA, + 44438 - 44032: 0x82AB, + 44439 - 44032: 0x82AC, + 44440 - 44032: 0x82AD, + 44441 - 44032: 0x82AE, + 44442 - 44032: 0x82AF, + 44443 - 44032: 0x82B0, + 44444 - 44032: 0xB1C9, + 44445 - 44032: 0xB1CA, + 44446 - 44032: 0x82B1, + 44447 - 44032: 0x82B2, + 44448 - 44032: 0x82B3, + 44449 - 44032: 0x82B4, + 44450 - 44032: 0x82B5, + 44451 - 44032: 0x82B6, + 44452 - 44032: 0xB1CB, + 44453 - 44032: 0x82B7, + 44454 - 44032: 0x82B8, + 44455 - 44032: 0x82B9, + 44456 - 44032: 0x82BA, + 44457 - 44032: 0x82BB, + 44458 - 44032: 0x82BC, + 44459 - 44032: 0x82BD, + 44460 - 44032: 0x82BE, + 44461 - 44032: 0x82BF, + 44462 - 44032: 0x82C0, + 44463 - 44032: 0x82C1, + 44464 - 44032: 0x82C2, + 44465 - 44032: 0x82C3, + 44466 - 44032: 0x82C4, + 44467 - 44032: 0x82C5, + 44468 - 44032: 0x82C6, + 44469 - 44032: 0x82C7, + 44470 - 44032: 0x82C8, + 44471 - 44032: 0xB1CC, + 44472 - 44032: 0x82C9, + 44473 - 44032: 0x82CA, + 44474 - 44032: 0x82CB, + 44475 - 44032: 0x82CC, + 44476 - 44032: 0x82CD, + 44477 - 44032: 0x82CE, + 44478 - 44032: 0x82CF, + 44479 - 44032: 0x82D0, + 44480 - 44032: 0xB1CD, + 44481 - 44032: 0xB1CE, + 44482 - 44032: 0x82D1, + 44483 - 44032: 0x82D2, + 44484 - 44032: 0xB1CF, + 44485 - 44032: 0x82D3, + 44486 - 44032: 0x82D4, + 44487 - 44032: 0x82D5, + 44488 - 44032: 0xB1D0, + 44489 - 44032: 0x82D6, + 44490 - 44032: 0x82D7, + 44491 - 44032: 0x82D8, + 44492 - 44032: 0x82D9, + 44493 - 44032: 0x82DA, + 44494 - 44032: 0x82DB, + 44495 - 44032: 0x82DC, + 44496 - 44032: 0xB1D1, + 44497 - 44032: 0xB1D2, + 44498 - 44032: 0x82DD, + 44499 - 44032: 0xB1D3, + 44500 - 44032: 0x82DE, + 44501 - 44032: 0x82DF, + 44502 - 44032: 0x82E0, + 44503 - 44032: 0x82E1, + 44504 - 44032: 0x82E2, + 44505 - 44032: 0x82E3, + 44506 - 44032: 0x82E4, + 44507 - 44032: 0x82E5, + 44508 - 44032: 0xB1D4, + 44509 - 44032: 0x82E6, + 44510 - 44032: 0x82E7, + 44511 - 44032: 0x82E8, + 44512 - 44032: 0xB1D5, + 44513 - 44032: 0x82E9, + 44514 - 44032: 0x82EA, + 44515 - 44032: 0x82EB, + 44516 - 44032: 0xB1D6, + 44517 - 44032: 0x82EC, + 44518 - 44032: 0x82ED, + 44519 - 44032: 0x82EE, + 44520 - 44032: 0x82EF, + 44521 - 44032: 0x82F0, + 44522 - 44032: 0x82F1, + 44523 - 44032: 0x82F2, + 44524 - 44032: 0x82F3, + 44525 - 44032: 0x82F4, + 44526 - 44032: 0x82F5, + 44527 - 44032: 0x82F6, + 44528 - 44032: 0x82F7, + 44529 - 44032: 0x82F8, + 44530 - 44032: 0x82F9, + 44531 - 44032: 0x82FA, + 44532 - 44032: 0x82FB, + 44533 - 44032: 0x82FC, + 44534 - 44032: 0x82FD, + 44535 - 44032: 0x82FE, + 44536 - 44032: 0xB1D7, + 44537 - 44032: 0xB1D8, + 44538 - 44032: 0x8341, + 44539 - 44032: 0x8342, + 44540 - 44032: 0xB1D9, + 44541 - 44032: 0x8343, + 44542 - 44032: 0x8344, + 44543 - 44032: 0xB1DA, + 44544 - 44032: 0xB1DB, + 44545 - 44032: 0xB1DC, + 44546 - 44032: 0x8345, + 44547 - 44032: 0x8346, + 44548 - 44032: 0x8347, + 44549 - 44032: 0x8348, + 44550 - 44032: 0x8349, + 44551 - 44032: 0x834A, + 44552 - 44032: 0xB1DD, + 44553 - 44032: 0xB1DE, + 44554 - 44032: 0x834B, + 44555 - 44032: 0xB1DF, + 44556 - 44032: 0x834C, + 44557 - 44032: 0xB1E0, + 44558 - 44032: 0x834D, + 44559 - 44032: 0x834E, + 44560 - 44032: 0x834F, + 44561 - 44032: 0x8350, + 44562 - 44032: 0x8351, + 44563 - 44032: 0x8352, + 44564 - 44032: 0xB1E1, + 44565 - 44032: 0x8353, + 44566 - 44032: 0x8354, + 44567 - 44032: 0x8355, + 44568 - 44032: 0x8356, + 44569 - 44032: 0x8357, + 44570 - 44032: 0x8358, + 44571 - 44032: 0x8359, + 44572 - 44032: 0x835A, + 44573 - 44032: 0x8361, + 44574 - 44032: 0x8362, + 44575 - 44032: 0x8363, + 44576 - 44032: 0x8364, + 44577 - 44032: 0x8365, + 44578 - 44032: 0x8366, + 44579 - 44032: 0x8367, + 44580 - 44032: 0x8368, + 44581 - 44032: 0x8369, + 44582 - 44032: 0x836A, + 44583 - 44032: 0x836B, + 44584 - 44032: 0x836C, + 44585 - 44032: 0x836D, + 44586 - 44032: 0x836E, + 44587 - 44032: 0x836F, + 44588 - 44032: 0x8370, + 44589 - 44032: 0x8371, + 44590 - 44032: 0x8372, + 44591 - 44032: 0x8373, + 44592 - 44032: 0xB1E2, + 44593 - 44032: 0xB1E3, + 44594 - 44032: 0x8374, + 44595 - 44032: 0x8375, + 44596 - 44032: 0xB1E4, + 44597 - 44032: 0x8376, + 44598 - 44032: 0x8377, + 44599 - 44032: 0xB1E5, + 44600 - 44032: 0xB1E6, + 44601 - 44032: 0x8378, + 44602 - 44032: 0xB1E7, + 44603 - 44032: 0x8379, + 44604 - 44032: 0x837A, + 44605 - 44032: 0x8381, + 44606 - 44032: 0x8382, + 44607 - 44032: 0x8383, + 44608 - 44032: 0xB1E8, + 44609 - 44032: 0xB1E9, + 44610 - 44032: 0x8384, + 44611 - 44032: 0xB1EA, + 44612 - 44032: 0x8385, + 44613 - 44032: 0xB1EB, + 44614 - 44032: 0xB1EC, + 44615 - 44032: 0x8386, + 44616 - 44032: 0x8387, + 44617 - 44032: 0x8388, + 44618 - 44032: 0xB1ED, + 44619 - 44032: 0x8389, + 44620 - 44032: 0xB1EE, + 44621 - 44032: 0xB1EF, + 44622 - 44032: 0xB1F0, + 44623 - 44032: 0x838A, + 44624 - 44032: 0xB1F1, + 44625 - 44032: 0x838B, + 44626 - 44032: 0x838C, + 44627 - 44032: 0x838D, + 44628 - 44032: 0xB1F2, + 44629 - 44032: 0x838E, + 44630 - 44032: 0xB1F3, + 44631 - 44032: 0x838F, + 44632 - 44032: 0x8390, + 44633 - 44032: 0x8391, + 44634 - 44032: 0x8392, + 44635 - 44032: 0x8393, + 44636 - 44032: 0xB1F4, + 44637 - 44032: 0xB1F5, + 44638 - 44032: 0x8394, + 44639 - 44032: 0xB1F6, + 44640 - 44032: 0xB1F7, + 44641 - 44032: 0xB1F8, + 44642 - 44032: 0x8395, + 44643 - 44032: 0x8396, + 44644 - 44032: 0x8397, + 44645 - 44032: 0xB1F9, + 44646 - 44032: 0x8398, + 44647 - 44032: 0x8399, + 44648 - 44032: 0xB1FA, + 44649 - 44032: 0xB1FB, + 44650 - 44032: 0x839A, + 44651 - 44032: 0x839B, + 44652 - 44032: 0xB1FC, + 44653 - 44032: 0x839C, + 44654 - 44032: 0x839D, + 44655 - 44032: 0x839E, + 44656 - 44032: 0xB1FD, + 44657 - 44032: 0x839F, + 44658 - 44032: 0x83A0, + 44659 - 44032: 0x83A1, + 44660 - 44032: 0x83A2, + 44661 - 44032: 0x83A3, + 44662 - 44032: 0x83A4, + 44663 - 44032: 0x83A5, + 44664 - 44032: 0xB1FE, + 44665 - 44032: 0xB2A1, + 44666 - 44032: 0x83A6, + 44667 - 44032: 0xB2A2, + 44668 - 44032: 0xB2A3, + 44669 - 44032: 0xB2A4, + 44670 - 44032: 0x83A7, + 44671 - 44032: 0x83A8, + 44672 - 44032: 0x83A9, + 44673 - 44032: 0x83AA, + 44674 - 44032: 0x83AB, + 44675 - 44032: 0x83AC, + 44676 - 44032: 0xB2A5, + 44677 - 44032: 0xB2A6, + 44678 - 44032: 0x83AD, + 44679 - 44032: 0x83AE, + 44680 - 44032: 0x83AF, + 44681 - 44032: 0x83B0, + 44682 - 44032: 0x83B1, + 44683 - 44032: 0x83B2, + 44684 - 44032: 0xB2A7, + 44685 - 44032: 0x83B3, + 44686 - 44032: 0x83B4, + 44687 - 44032: 0x83B5, + 44688 - 44032: 0x83B6, + 44689 - 44032: 0x83B7, + 44690 - 44032: 0x83B8, + 44691 - 44032: 0x83B9, + 44692 - 44032: 0x83BA, + 44693 - 44032: 0x83BB, + 44694 - 44032: 0x83BC, + 44695 - 44032: 0x83BD, + 44696 - 44032: 0x83BE, + 44697 - 44032: 0x83BF, + 44698 - 44032: 0x83C0, + 44699 - 44032: 0x83C1, + 44700 - 44032: 0x83C2, + 44701 - 44032: 0x83C3, + 44702 - 44032: 0x83C4, + 44703 - 44032: 0x83C5, + 44704 - 44032: 0x83C6, + 44705 - 44032: 0x83C7, + 44706 - 44032: 0x83C8, + 44707 - 44032: 0x83C9, + 44708 - 44032: 0x83CA, + 44709 - 44032: 0x83CB, + 44710 - 44032: 0x83CC, + 44711 - 44032: 0x83CD, + 44712 - 44032: 0x83CE, + 44713 - 44032: 0x83CF, + 44714 - 44032: 0x83D0, + 44715 - 44032: 0x83D1, + 44716 - 44032: 0x83D2, + 44717 - 44032: 0x83D3, + 44718 - 44032: 0x83D4, + 44719 - 44032: 0x83D5, + 44720 - 44032: 0x83D6, + 44721 - 44032: 0x83D7, + 44722 - 44032: 0x83D8, + 44723 - 44032: 0x83D9, + 44724 - 44032: 0x83DA, + 44725 - 44032: 0x83DB, + 44726 - 44032: 0x83DC, + 44727 - 44032: 0x83DD, + 44728 - 44032: 0x83DE, + 44729 - 44032: 0x83DF, + 44730 - 44032: 0x83E0, + 44731 - 44032: 0x83E1, + 44732 - 44032: 0xB2A8, + 44733 - 44032: 0xB2A9, + 44734 - 44032: 0xB2AA, + 44735 - 44032: 0x83E2, + 44736 - 44032: 0xB2AB, + 44737 - 44032: 0x83E3, + 44738 - 44032: 0x83E4, + 44739 - 44032: 0x83E5, + 44740 - 44032: 0xB2AC, + 44741 - 44032: 0x83E6, + 44742 - 44032: 0x83E7, + 44743 - 44032: 0x83E8, + 44744 - 44032: 0x83E9, + 44745 - 44032: 0x83EA, + 44746 - 44032: 0x83EB, + 44747 - 44032: 0x83EC, + 44748 - 44032: 0xB2AD, + 44749 - 44032: 0xB2AE, + 44750 - 44032: 0x83ED, + 44751 - 44032: 0xB2AF, + 44752 - 44032: 0xB2B0, + 44753 - 44032: 0xB2B1, + 44754 - 44032: 0x83EE, + 44755 - 44032: 0x83EF, + 44756 - 44032: 0x83F0, + 44757 - 44032: 0x83F1, + 44758 - 44032: 0x83F2, + 44759 - 44032: 0x83F3, + 44760 - 44032: 0xB2B2, + 44761 - 44032: 0xB2B3, + 44762 - 44032: 0x83F4, + 44763 - 44032: 0x83F5, + 44764 - 44032: 0xB2B4, + 44765 - 44032: 0x83F6, + 44766 - 44032: 0x83F7, + 44767 - 44032: 0x83F8, + 44768 - 44032: 0x83F9, + 44769 - 44032: 0x83FA, + 44770 - 44032: 0x83FB, + 44771 - 44032: 0x83FC, + 44772 - 44032: 0x83FD, + 44773 - 44032: 0x83FE, + 44774 - 44032: 0x8441, + 44775 - 44032: 0x8442, + 44776 - 44032: 0xB2B5, + 44777 - 44032: 0x8443, + 44778 - 44032: 0x8444, + 44779 - 44032: 0xB2B6, + 44780 - 44032: 0x8445, + 44781 - 44032: 0xB2B7, + 44782 - 44032: 0x8446, + 44783 - 44032: 0x8447, + 44784 - 44032: 0x8448, + 44785 - 44032: 0x8449, + 44786 - 44032: 0x844A, + 44787 - 44032: 0x844B, + 44788 - 44032: 0xB2B8, + 44789 - 44032: 0x844C, + 44790 - 44032: 0x844D, + 44791 - 44032: 0x844E, + 44792 - 44032: 0xB2B9, + 44793 - 44032: 0x844F, + 44794 - 44032: 0x8450, + 44795 - 44032: 0x8451, + 44796 - 44032: 0xB2BA, + 44797 - 44032: 0x8452, + 44798 - 44032: 0x8453, + 44799 - 44032: 0x8454, + 44800 - 44032: 0x8455, + 44801 - 44032: 0x8456, + 44802 - 44032: 0x8457, + 44803 - 44032: 0x8458, + 44804 - 44032: 0x8459, + 44805 - 44032: 0x845A, + 44806 - 44032: 0x8461, + 44807 - 44032: 0xB2BB, + 44808 - 44032: 0xB2BC, + 44809 - 44032: 0x8462, + 44810 - 44032: 0x8463, + 44811 - 44032: 0x8464, + 44812 - 44032: 0x8465, + 44813 - 44032: 0xB2BD, + 44814 - 44032: 0x8466, + 44815 - 44032: 0x8467, + 44816 - 44032: 0xB2BE, + 44817 - 44032: 0x8468, + 44818 - 44032: 0x8469, + 44819 - 44032: 0x846A, + 44820 - 44032: 0x846B, + 44821 - 44032: 0x846C, + 44822 - 44032: 0x846D, + 44823 - 44032: 0x846E, + 44824 - 44032: 0x846F, + 44825 - 44032: 0x8470, + 44826 - 44032: 0x8471, + 44827 - 44032: 0x8472, + 44828 - 44032: 0x8473, + 44829 - 44032: 0x8474, + 44830 - 44032: 0x8475, + 44831 - 44032: 0x8476, + 44832 - 44032: 0x8477, + 44833 - 44032: 0x8478, + 44834 - 44032: 0x8479, + 44835 - 44032: 0x847A, + 44836 - 44032: 0x8481, + 44837 - 44032: 0x8482, + 44838 - 44032: 0x8483, + 44839 - 44032: 0x8484, + 44840 - 44032: 0x8485, + 44841 - 44032: 0x8486, + 44842 - 44032: 0x8487, + 44843 - 44032: 0x8488, + 44844 - 44032: 0xB2BF, + 44845 - 44032: 0xB2C0, + 44846 - 44032: 0x8489, + 44847 - 44032: 0x848A, + 44848 - 44032: 0xB2C1, + 44849 - 44032: 0x848B, + 44850 - 44032: 0xB2C2, + 44851 - 44032: 0x848C, + 44852 - 44032: 0xB2C3, + 44853 - 44032: 0x848D, + 44854 - 44032: 0x848E, + 44855 - 44032: 0x848F, + 44856 - 44032: 0x8490, + 44857 - 44032: 0x8491, + 44858 - 44032: 0x8492, + 44859 - 44032: 0x8493, + 44860 - 44032: 0xB2C4, + 44861 - 44032: 0xB2C5, + 44862 - 44032: 0x8494, + 44863 - 44032: 0xB2C6, + 44864 - 44032: 0x8495, + 44865 - 44032: 0xB2C7, + 44866 - 44032: 0xB2C8, + 44867 - 44032: 0xB2C9, + 44868 - 44032: 0x8496, + 44869 - 44032: 0x8497, + 44870 - 44032: 0x8498, + 44871 - 44032: 0x8499, + 44872 - 44032: 0xB2CA, + 44873 - 44032: 0xB2CB, + 44874 - 44032: 0x849A, + 44875 - 44032: 0x849B, + 44876 - 44032: 0x849C, + 44877 - 44032: 0x849D, + 44878 - 44032: 0x849E, + 44879 - 44032: 0x849F, + 44880 - 44032: 0xB2CC, + 44881 - 44032: 0x84A0, + 44882 - 44032: 0x84A1, + 44883 - 44032: 0x84A2, + 44884 - 44032: 0x84A3, + 44885 - 44032: 0x84A4, + 44886 - 44032: 0x84A5, + 44887 - 44032: 0x84A6, + 44888 - 44032: 0x84A7, + 44889 - 44032: 0x84A8, + 44890 - 44032: 0x84A9, + 44891 - 44032: 0x84AA, + 44892 - 44032: 0xB2CD, + 44893 - 44032: 0xB2CE, + 44894 - 44032: 0x84AB, + 44895 - 44032: 0x84AC, + 44896 - 44032: 0x84AD, + 44897 - 44032: 0x84AE, + 44898 - 44032: 0x84AF, + 44899 - 44032: 0x84B0, + 44900 - 44032: 0xB2CF, + 44901 - 44032: 0xB2D0, + 44902 - 44032: 0x84B1, + 44903 - 44032: 0x84B2, + 44904 - 44032: 0x84B3, + 44905 - 44032: 0x84B4, + 44906 - 44032: 0x84B5, + 44907 - 44032: 0x84B6, + 44908 - 44032: 0x84B7, + 44909 - 44032: 0x84B8, + 44910 - 44032: 0x84B9, + 44911 - 44032: 0x84BA, + 44912 - 44032: 0x84BB, + 44913 - 44032: 0x84BC, + 44914 - 44032: 0x84BD, + 44915 - 44032: 0x84BE, + 44916 - 44032: 0x84BF, + 44917 - 44032: 0x84C0, + 44918 - 44032: 0x84C1, + 44919 - 44032: 0x84C2, + 44920 - 44032: 0x84C3, + 44921 - 44032: 0xB2D1, + 44922 - 44032: 0x84C4, + 44923 - 44032: 0x84C5, + 44924 - 44032: 0x84C6, + 44925 - 44032: 0x84C7, + 44926 - 44032: 0x84C8, + 44927 - 44032: 0x84C9, + 44928 - 44032: 0xB2D2, + 44929 - 44032: 0x84CA, + 44930 - 44032: 0x84CB, + 44931 - 44032: 0x84CC, + 44932 - 44032: 0xB2D3, + 44933 - 44032: 0x84CD, + 44934 - 44032: 0x84CE, + 44935 - 44032: 0x84CF, + 44936 - 44032: 0xB2D4, + 44937 - 44032: 0x84D0, + 44938 - 44032: 0x84D1, + 44939 - 44032: 0x84D2, + 44940 - 44032: 0x84D3, + 44941 - 44032: 0x84D4, + 44942 - 44032: 0x84D5, + 44943 - 44032: 0x84D6, + 44944 - 44032: 0xB2D5, + 44945 - 44032: 0xB2D6, + 44946 - 44032: 0x84D7, + 44947 - 44032: 0x84D8, + 44948 - 44032: 0x84D9, + 44949 - 44032: 0xB2D7, + 44950 - 44032: 0x84DA, + 44951 - 44032: 0x84DB, + 44952 - 44032: 0x84DC, + 44953 - 44032: 0x84DD, + 44954 - 44032: 0x84DE, + 44955 - 44032: 0x84DF, + 44956 - 44032: 0xB2D8, + 44957 - 44032: 0x84E0, + 44958 - 44032: 0x84E1, + 44959 - 44032: 0x84E2, + 44960 - 44032: 0x84E3, + 44961 - 44032: 0x84E4, + 44962 - 44032: 0x84E5, + 44963 - 44032: 0x84E6, + 44964 - 44032: 0x84E7, + 44965 - 44032: 0x84E8, + 44966 - 44032: 0x84E9, + 44967 - 44032: 0x84EA, + 44968 - 44032: 0x84EB, + 44969 - 44032: 0x84EC, + 44970 - 44032: 0x84ED, + 44971 - 44032: 0x84EE, + 44972 - 44032: 0x84EF, + 44973 - 44032: 0x84F0, + 44974 - 44032: 0x84F1, + 44975 - 44032: 0x84F2, + 44976 - 44032: 0x84F3, + 44977 - 44032: 0x84F4, + 44978 - 44032: 0x84F5, + 44979 - 44032: 0x84F6, + 44980 - 44032: 0x84F7, + 44981 - 44032: 0x84F8, + 44982 - 44032: 0x84F9, + 44983 - 44032: 0x84FA, + 44984 - 44032: 0xB2D9, + 44985 - 44032: 0xB2DA, + 44986 - 44032: 0x84FB, + 44987 - 44032: 0x84FC, + 44988 - 44032: 0xB2DB, + 44989 - 44032: 0x84FD, + 44990 - 44032: 0x84FE, + 44991 - 44032: 0x8541, + 44992 - 44032: 0xB2DC, + 44993 - 44032: 0x8542, + 44994 - 44032: 0x8543, + 44995 - 44032: 0x8544, + 44996 - 44032: 0x8545, + 44997 - 44032: 0x8546, + 44998 - 44032: 0x8547, + 44999 - 44032: 0xB2DD, + 45000 - 44032: 0xB2DE, + 45001 - 44032: 0xB2DF, + 45002 - 44032: 0x8548, + 45003 - 44032: 0xB2E0, + 45004 - 44032: 0x8549, + 45005 - 44032: 0xB2E1, + 45006 - 44032: 0xB2E2, + 45007 - 44032: 0x854A, + 45008 - 44032: 0x854B, + 45009 - 44032: 0x854C, + 45010 - 44032: 0x854D, + 45011 - 44032: 0x854E, + 45012 - 44032: 0xB2E3, + 45013 - 44032: 0x854F, + 45014 - 44032: 0x8550, + 45015 - 44032: 0x8551, + 45016 - 44032: 0x8552, + 45017 - 44032: 0x8553, + 45018 - 44032: 0x8554, + 45019 - 44032: 0x8555, + 45020 - 44032: 0xB2E4, + 45021 - 44032: 0x8556, + 45022 - 44032: 0x8557, + 45023 - 44032: 0x8558, + 45024 - 44032: 0x8559, + 45025 - 44032: 0x855A, + 45026 - 44032: 0x8561, + 45027 - 44032: 0x8562, + 45028 - 44032: 0x8563, + 45029 - 44032: 0x8564, + 45030 - 44032: 0x8565, + 45031 - 44032: 0x8566, + 45032 - 44032: 0xB2E5, + 45033 - 44032: 0xB2E6, + 45034 - 44032: 0x8567, + 45035 - 44032: 0x8568, + 45036 - 44032: 0x8569, + 45037 - 44032: 0x856A, + 45038 - 44032: 0x856B, + 45039 - 44032: 0x856C, + 45040 - 44032: 0xB2E7, + 45041 - 44032: 0xB2E8, + 45042 - 44032: 0x856D, + 45043 - 44032: 0x856E, + 45044 - 44032: 0xB2E9, + 45045 - 44032: 0x856F, + 45046 - 44032: 0x8570, + 45047 - 44032: 0x8571, + 45048 - 44032: 0xB2EA, + 45049 - 44032: 0x8572, + 45050 - 44032: 0x8573, + 45051 - 44032: 0x8574, + 45052 - 44032: 0x8575, + 45053 - 44032: 0x8576, + 45054 - 44032: 0x8577, + 45055 - 44032: 0x8578, + 45056 - 44032: 0xB2EB, + 45057 - 44032: 0xB2EC, + 45058 - 44032: 0x8579, + 45059 - 44032: 0x857A, + 45060 - 44032: 0xB2ED, + 45061 - 44032: 0x8581, + 45062 - 44032: 0x8582, + 45063 - 44032: 0x8583, + 45064 - 44032: 0x8584, + 45065 - 44032: 0x8585, + 45066 - 44032: 0x8586, + 45067 - 44032: 0x8587, + 45068 - 44032: 0xB2EE, + 45069 - 44032: 0x8588, + 45070 - 44032: 0x8589, + 45071 - 44032: 0x858A, + 45072 - 44032: 0xB2EF, + 45073 - 44032: 0x858B, + 45074 - 44032: 0x858C, + 45075 - 44032: 0x858D, + 45076 - 44032: 0xB2F0, + 45077 - 44032: 0x858E, + 45078 - 44032: 0x858F, + 45079 - 44032: 0x8590, + 45080 - 44032: 0x8591, + 45081 - 44032: 0x8592, + 45082 - 44032: 0x8593, + 45083 - 44032: 0x8594, + 45084 - 44032: 0xB2F1, + 45085 - 44032: 0xB2F2, + 45086 - 44032: 0x8595, + 45087 - 44032: 0x8596, + 45088 - 44032: 0x8597, + 45089 - 44032: 0x8598, + 45090 - 44032: 0x8599, + 45091 - 44032: 0x859A, + 45092 - 44032: 0x859B, + 45093 - 44032: 0x859C, + 45094 - 44032: 0x859D, + 45095 - 44032: 0x859E, + 45096 - 44032: 0xB2F3, + 45097 - 44032: 0x859F, + 45098 - 44032: 0x85A0, + 45099 - 44032: 0x85A1, + 45100 - 44032: 0x85A2, + 45101 - 44032: 0x85A3, + 45102 - 44032: 0x85A4, + 45103 - 44032: 0x85A5, + 45104 - 44032: 0x85A6, + 45105 - 44032: 0x85A7, + 45106 - 44032: 0x85A8, + 45107 - 44032: 0x85A9, + 45108 - 44032: 0x85AA, + 45109 - 44032: 0x85AB, + 45110 - 44032: 0x85AC, + 45111 - 44032: 0x85AD, + 45112 - 44032: 0x85AE, + 45113 - 44032: 0x85AF, + 45114 - 44032: 0x85B0, + 45115 - 44032: 0x85B1, + 45116 - 44032: 0x85B2, + 45117 - 44032: 0x85B3, + 45118 - 44032: 0x85B4, + 45119 - 44032: 0x85B5, + 45120 - 44032: 0x85B6, + 45121 - 44032: 0x85B7, + 45122 - 44032: 0x85B8, + 45123 - 44032: 0x85B9, + 45124 - 44032: 0xB2F4, + 45125 - 44032: 0xB2F5, + 45126 - 44032: 0x85BA, + 45127 - 44032: 0x85BB, + 45128 - 44032: 0xB2F6, + 45129 - 44032: 0x85BC, + 45130 - 44032: 0xB2F7, + 45131 - 44032: 0x85BD, + 45132 - 44032: 0xB2F8, + 45133 - 44032: 0x85BE, + 45134 - 44032: 0xB2F9, + 45135 - 44032: 0x85BF, + 45136 - 44032: 0x85C0, + 45137 - 44032: 0x85C1, + 45138 - 44032: 0x85C2, + 45139 - 44032: 0xB2FA, + 45140 - 44032: 0xB2FB, + 45141 - 44032: 0xB2FC, + 45142 - 44032: 0x85C3, + 45143 - 44032: 0xB2FD, + 45144 - 44032: 0x85C4, + 45145 - 44032: 0xB2FE, + 45146 - 44032: 0x85C5, + 45147 - 44032: 0x85C6, + 45148 - 44032: 0x85C7, + 45149 - 44032: 0xB3A1, + 45150 - 44032: 0x85C8, + 45151 - 44032: 0x85C9, + 45152 - 44032: 0x85CA, + 45153 - 44032: 0x85CB, + 45154 - 44032: 0x85CC, + 45155 - 44032: 0x85CD, + 45156 - 44032: 0x85CE, + 45157 - 44032: 0x85CF, + 45158 - 44032: 0x85D0, + 45159 - 44032: 0x85D1, + 45160 - 44032: 0x85D2, + 45161 - 44032: 0x85D3, + 45162 - 44032: 0x85D4, + 45163 - 44032: 0x85D5, + 45164 - 44032: 0x85D6, + 45165 - 44032: 0x85D7, + 45166 - 44032: 0x85D8, + 45167 - 44032: 0x85D9, + 45168 - 44032: 0x85DA, + 45169 - 44032: 0x85DB, + 45170 - 44032: 0x85DC, + 45171 - 44032: 0x85DD, + 45172 - 44032: 0x85DE, + 45173 - 44032: 0x85DF, + 45174 - 44032: 0x85E0, + 45175 - 44032: 0x85E1, + 45176 - 44032: 0x85E2, + 45177 - 44032: 0x85E3, + 45178 - 44032: 0x85E4, + 45179 - 44032: 0x85E5, + 45180 - 44032: 0xB3A2, + 45181 - 44032: 0xB3A3, + 45182 - 44032: 0x85E6, + 45183 - 44032: 0x85E7, + 45184 - 44032: 0xB3A4, + 45185 - 44032: 0x85E8, + 45186 - 44032: 0x85E9, + 45187 - 44032: 0x85EA, + 45188 - 44032: 0xB3A5, + 45189 - 44032: 0x85EB, + 45190 - 44032: 0x85EC, + 45191 - 44032: 0x85ED, + 45192 - 44032: 0x85EE, + 45193 - 44032: 0x85EF, + 45194 - 44032: 0x85F0, + 45195 - 44032: 0x85F1, + 45196 - 44032: 0xB3A6, + 45197 - 44032: 0xB3A7, + 45198 - 44032: 0x85F2, + 45199 - 44032: 0xB3A8, + 45200 - 44032: 0x85F3, + 45201 - 44032: 0xB3A9, + 45202 - 44032: 0x85F4, + 45203 - 44032: 0x85F5, + 45204 - 44032: 0x85F6, + 45205 - 44032: 0x85F7, + 45206 - 44032: 0x85F8, + 45207 - 44032: 0x85F9, + 45208 - 44032: 0xB3AA, + 45209 - 44032: 0xB3AB, + 45210 - 44032: 0xB3AC, + 45211 - 44032: 0x85FA, + 45212 - 44032: 0xB3AD, + 45213 - 44032: 0x85FB, + 45214 - 44032: 0x85FC, + 45215 - 44032: 0xB3AE, + 45216 - 44032: 0xB3AF, + 45217 - 44032: 0xB3B0, + 45218 - 44032: 0xB3B1, + 45219 - 44032: 0x85FD, + 45220 - 44032: 0x85FE, + 45221 - 44032: 0x8641, + 45222 - 44032: 0x8642, + 45223 - 44032: 0x8643, + 45224 - 44032: 0xB3B2, + 45225 - 44032: 0xB3B3, + 45226 - 44032: 0x8644, + 45227 - 44032: 0xB3B4, + 45228 - 44032: 0xB3B5, + 45229 - 44032: 0xB3B6, + 45230 - 44032: 0xB3B7, + 45231 - 44032: 0xB3B8, + 45232 - 44032: 0x8645, + 45233 - 44032: 0xB3B9, + 45234 - 44032: 0x8646, + 45235 - 44032: 0xB3BA, + 45236 - 44032: 0xB3BB, + 45237 - 44032: 0xB3BC, + 45238 - 44032: 0x8647, + 45239 - 44032: 0x8648, + 45240 - 44032: 0xB3BD, + 45241 - 44032: 0x8649, + 45242 - 44032: 0x864A, + 45243 - 44032: 0x864B, + 45244 - 44032: 0xB3BE, + 45245 - 44032: 0x864C, + 45246 - 44032: 0x864D, + 45247 - 44032: 0x864E, + 45248 - 44032: 0x864F, + 45249 - 44032: 0x8650, + 45250 - 44032: 0x8651, + 45251 - 44032: 0x8652, + 45252 - 44032: 0xB3BF, + 45253 - 44032: 0xB3C0, + 45254 - 44032: 0x8653, + 45255 - 44032: 0xB3C1, + 45256 - 44032: 0xB3C2, + 45257 - 44032: 0xB3C3, + 45258 - 44032: 0x8654, + 45259 - 44032: 0x8655, + 45260 - 44032: 0x8656, + 45261 - 44032: 0x8657, + 45262 - 44032: 0x8658, + 45263 - 44032: 0x8659, + 45264 - 44032: 0xB3C4, + 45265 - 44032: 0xB3C5, + 45266 - 44032: 0x865A, + 45267 - 44032: 0x8661, + 45268 - 44032: 0xB3C6, + 45269 - 44032: 0x8662, + 45270 - 44032: 0x8663, + 45271 - 44032: 0x8664, + 45272 - 44032: 0xB3C7, + 45273 - 44032: 0x8665, + 45274 - 44032: 0x8666, + 45275 - 44032: 0x8667, + 45276 - 44032: 0x8668, + 45277 - 44032: 0x8669, + 45278 - 44032: 0x866A, + 45279 - 44032: 0x866B, + 45280 - 44032: 0xB3C8, + 45281 - 44032: 0x866C, + 45282 - 44032: 0x866D, + 45283 - 44032: 0x866E, + 45284 - 44032: 0x866F, + 45285 - 44032: 0xB3C9, + 45286 - 44032: 0x8670, + 45287 - 44032: 0x8671, + 45288 - 44032: 0x8672, + 45289 - 44032: 0x8673, + 45290 - 44032: 0x8674, + 45291 - 44032: 0x8675, + 45292 - 44032: 0x8676, + 45293 - 44032: 0x8677, + 45294 - 44032: 0x8678, + 45295 - 44032: 0x8679, + 45296 - 44032: 0x867A, + 45297 - 44032: 0x8681, + 45298 - 44032: 0x8682, + 45299 - 44032: 0x8683, + 45300 - 44032: 0x8684, + 45301 - 44032: 0x8685, + 45302 - 44032: 0x8686, + 45303 - 44032: 0x8687, + 45304 - 44032: 0x8688, + 45305 - 44032: 0x8689, + 45306 - 44032: 0x868A, + 45307 - 44032: 0x868B, + 45308 - 44032: 0x868C, + 45309 - 44032: 0x868D, + 45310 - 44032: 0x868E, + 45311 - 44032: 0x868F, + 45312 - 44032: 0x8690, + 45313 - 44032: 0x8691, + 45314 - 44032: 0x8692, + 45315 - 44032: 0x8693, + 45316 - 44032: 0x8694, + 45317 - 44032: 0x8695, + 45318 - 44032: 0x8696, + 45319 - 44032: 0x8697, + 45320 - 44032: 0xB3CA, + 45321 - 44032: 0xB3CB, + 45322 - 44032: 0x8698, + 45323 - 44032: 0xB3CC, + 45324 - 44032: 0xB3CD, + 45325 - 44032: 0x8699, + 45326 - 44032: 0x869A, + 45327 - 44032: 0x869B, + 45328 - 44032: 0xB3CE, + 45329 - 44032: 0x869C, + 45330 - 44032: 0xB3CF, + 45331 - 44032: 0xB3D0, + 45332 - 44032: 0x869D, + 45333 - 44032: 0x869E, + 45334 - 44032: 0x869F, + 45335 - 44032: 0x86A0, + 45336 - 44032: 0xB3D1, + 45337 - 44032: 0xB3D2, + 45338 - 44032: 0x86A1, + 45339 - 44032: 0xB3D3, + 45340 - 44032: 0xB3D4, + 45341 - 44032: 0xB3D5, + 45342 - 44032: 0x86A2, + 45343 - 44032: 0x86A3, + 45344 - 44032: 0x86A4, + 45345 - 44032: 0x86A5, + 45346 - 44032: 0x86A6, + 45347 - 44032: 0xB3D6, + 45348 - 44032: 0xB3D7, + 45349 - 44032: 0xB3D8, + 45350 - 44032: 0x86A7, + 45351 - 44032: 0x86A8, + 45352 - 44032: 0xB3D9, + 45353 - 44032: 0x86A9, + 45354 - 44032: 0x86AA, + 45355 - 44032: 0x86AB, + 45356 - 44032: 0xB3DA, + 45357 - 44032: 0x86AC, + 45358 - 44032: 0x86AD, + 45359 - 44032: 0x86AE, + 45360 - 44032: 0x86AF, + 45361 - 44032: 0x86B0, + 45362 - 44032: 0x86B1, + 45363 - 44032: 0x86B2, + 45364 - 44032: 0xB3DB, + 45365 - 44032: 0xB3DC, + 45366 - 44032: 0x86B3, + 45367 - 44032: 0xB3DD, + 45368 - 44032: 0xB3DE, + 45369 - 44032: 0xB3DF, + 45370 - 44032: 0x86B4, + 45371 - 44032: 0x86B5, + 45372 - 44032: 0x86B6, + 45373 - 44032: 0x86B7, + 45374 - 44032: 0x86B8, + 45375 - 44032: 0x86B9, + 45376 - 44032: 0xB3E0, + 45377 - 44032: 0xB3E1, + 45378 - 44032: 0x86BA, + 45379 - 44032: 0x86BB, + 45380 - 44032: 0xB3E2, + 45381 - 44032: 0x86BC, + 45382 - 44032: 0x86BD, + 45383 - 44032: 0x86BE, + 45384 - 44032: 0xB3E3, + 45385 - 44032: 0x86BF, + 45386 - 44032: 0x86C0, + 45387 - 44032: 0x86C1, + 45388 - 44032: 0x86C2, + 45389 - 44032: 0x86C3, + 45390 - 44032: 0x86C4, + 45391 - 44032: 0x86C5, + 45392 - 44032: 0xB3E4, + 45393 - 44032: 0xB3E5, + 45394 - 44032: 0x86C6, + 45395 - 44032: 0x86C7, + 45396 - 44032: 0xB3E6, + 45397 - 44032: 0xB3E7, + 45398 - 44032: 0x86C8, + 45399 - 44032: 0x86C9, + 45400 - 44032: 0xB3E8, + 45401 - 44032: 0x86CA, + 45402 - 44032: 0x86CB, + 45403 - 44032: 0x86CC, + 45404 - 44032: 0xB3E9, + 45405 - 44032: 0x86CD, + 45406 - 44032: 0x86CE, + 45407 - 44032: 0x86CF, + 45408 - 44032: 0xB3EA, + 45409 - 44032: 0x86D0, + 45410 - 44032: 0x86D1, + 45411 - 44032: 0x86D2, + 45412 - 44032: 0x86D3, + 45413 - 44032: 0x86D4, + 45414 - 44032: 0x86D5, + 45415 - 44032: 0x86D6, + 45416 - 44032: 0x86D7, + 45417 - 44032: 0x86D8, + 45418 - 44032: 0x86D9, + 45419 - 44032: 0x86DA, + 45420 - 44032: 0x86DB, + 45421 - 44032: 0x86DC, + 45422 - 44032: 0x86DD, + 45423 - 44032: 0x86DE, + 45424 - 44032: 0x86DF, + 45425 - 44032: 0x86E0, + 45426 - 44032: 0x86E1, + 45427 - 44032: 0x86E2, + 45428 - 44032: 0x86E3, + 45429 - 44032: 0x86E4, + 45430 - 44032: 0x86E5, + 45431 - 44032: 0x86E6, + 45432 - 44032: 0xB3EB, + 45433 - 44032: 0xB3EC, + 45434 - 44032: 0x86E7, + 45435 - 44032: 0x86E8, + 45436 - 44032: 0xB3ED, + 45437 - 44032: 0x86E9, + 45438 - 44032: 0x86EA, + 45439 - 44032: 0x86EB, + 45440 - 44032: 0xB3EE, + 45441 - 44032: 0x86EC, + 45442 - 44032: 0xB3EF, + 45443 - 44032: 0x86ED, + 45444 - 44032: 0x86EE, + 45445 - 44032: 0x86EF, + 45446 - 44032: 0x86F0, + 45447 - 44032: 0x86F1, + 45448 - 44032: 0xB3F0, + 45449 - 44032: 0xB3F1, + 45450 - 44032: 0x86F2, + 45451 - 44032: 0xB3F2, + 45452 - 44032: 0x86F3, + 45453 - 44032: 0xB3F3, + 45454 - 44032: 0x86F4, + 45455 - 44032: 0x86F5, + 45456 - 44032: 0x86F6, + 45457 - 44032: 0x86F7, + 45458 - 44032: 0xB3F4, + 45459 - 44032: 0xB3F5, + 45460 - 44032: 0xB3F6, + 45461 - 44032: 0x86F8, + 45462 - 44032: 0x86F9, + 45463 - 44032: 0x86FA, + 45464 - 44032: 0xB3F7, + 45465 - 44032: 0x86FB, + 45466 - 44032: 0x86FC, + 45467 - 44032: 0x86FD, + 45468 - 44032: 0xB3F8, + 45469 - 44032: 0x86FE, + 45470 - 44032: 0x8741, + 45471 - 44032: 0x8742, + 45472 - 44032: 0x8743, + 45473 - 44032: 0x8744, + 45474 - 44032: 0x8745, + 45475 - 44032: 0x8746, + 45476 - 44032: 0x8747, + 45477 - 44032: 0x8748, + 45478 - 44032: 0x8749, + 45479 - 44032: 0x874A, + 45480 - 44032: 0xB3F9, + 45481 - 44032: 0x874B, + 45482 - 44032: 0x874C, + 45483 - 44032: 0x874D, + 45484 - 44032: 0x874E, + 45485 - 44032: 0x874F, + 45486 - 44032: 0x8750, + 45487 - 44032: 0x8751, + 45488 - 44032: 0x8752, + 45489 - 44032: 0x8753, + 45490 - 44032: 0x8754, + 45491 - 44032: 0x8755, + 45492 - 44032: 0x8756, + 45493 - 44032: 0x8757, + 45494 - 44032: 0x8758, + 45495 - 44032: 0x8759, + 45496 - 44032: 0x875A, + 45497 - 44032: 0x8761, + 45498 - 44032: 0x8762, + 45499 - 44032: 0x8763, + 45500 - 44032: 0x8764, + 45501 - 44032: 0x8765, + 45502 - 44032: 0x8766, + 45503 - 44032: 0x8767, + 45504 - 44032: 0x8768, + 45505 - 44032: 0x8769, + 45506 - 44032: 0x876A, + 45507 - 44032: 0x876B, + 45508 - 44032: 0x876C, + 45509 - 44032: 0x876D, + 45510 - 44032: 0x876E, + 45511 - 44032: 0x876F, + 45512 - 44032: 0x8770, + 45513 - 44032: 0x8771, + 45514 - 44032: 0x8772, + 45515 - 44032: 0x8773, + 45516 - 44032: 0xB3FA, + 45517 - 44032: 0x8774, + 45518 - 44032: 0x8775, + 45519 - 44032: 0x8776, + 45520 - 44032: 0xB3FB, + 45521 - 44032: 0x8777, + 45522 - 44032: 0x8778, + 45523 - 44032: 0x8779, + 45524 - 44032: 0xB3FC, + 45525 - 44032: 0x877A, + 45526 - 44032: 0x8781, + 45527 - 44032: 0x8782, + 45528 - 44032: 0x8783, + 45529 - 44032: 0x8784, + 45530 - 44032: 0x8785, + 45531 - 44032: 0x8786, + 45532 - 44032: 0xB3FD, + 45533 - 44032: 0xB3FE, + 45534 - 44032: 0x8787, + 45535 - 44032: 0xB4A1, + 45536 - 44032: 0x8788, + 45537 - 44032: 0x8789, + 45538 - 44032: 0x878A, + 45539 - 44032: 0x878B, + 45540 - 44032: 0x878C, + 45541 - 44032: 0x878D, + 45542 - 44032: 0x878E, + 45543 - 44032: 0x878F, + 45544 - 44032: 0xB4A2, + 45545 - 44032: 0xB4A3, + 45546 - 44032: 0x8790, + 45547 - 44032: 0x8791, + 45548 - 44032: 0xB4A4, + 45549 - 44032: 0x8792, + 45550 - 44032: 0x8793, + 45551 - 44032: 0x8794, + 45552 - 44032: 0xB4A5, + 45553 - 44032: 0x8795, + 45554 - 44032: 0x8796, + 45555 - 44032: 0x8797, + 45556 - 44032: 0x8798, + 45557 - 44032: 0x8799, + 45558 - 44032: 0x879A, + 45559 - 44032: 0x879B, + 45560 - 44032: 0x879C, + 45561 - 44032: 0xB4A6, + 45562 - 44032: 0x879D, + 45563 - 44032: 0xB4A7, + 45564 - 44032: 0x879E, + 45565 - 44032: 0xB4A8, + 45566 - 44032: 0x879F, + 45567 - 44032: 0x87A0, + 45568 - 44032: 0x87A1, + 45569 - 44032: 0x87A2, + 45570 - 44032: 0x87A3, + 45571 - 44032: 0x87A4, + 45572 - 44032: 0xB4A9, + 45573 - 44032: 0xB4AA, + 45574 - 44032: 0x87A5, + 45575 - 44032: 0x87A6, + 45576 - 44032: 0xB4AB, + 45577 - 44032: 0x87A7, + 45578 - 44032: 0x87A8, + 45579 - 44032: 0xB4AC, + 45580 - 44032: 0xB4AD, + 45581 - 44032: 0x87A9, + 45582 - 44032: 0x87AA, + 45583 - 44032: 0x87AB, + 45584 - 44032: 0x87AC, + 45585 - 44032: 0x87AD, + 45586 - 44032: 0x87AE, + 45587 - 44032: 0x87AF, + 45588 - 44032: 0xB4AE, + 45589 - 44032: 0xB4AF, + 45590 - 44032: 0x87B0, + 45591 - 44032: 0xB4B0, + 45592 - 44032: 0x87B1, + 45593 - 44032: 0xB4B1, + 45594 - 44032: 0x87B2, + 45595 - 44032: 0x87B3, + 45596 - 44032: 0x87B4, + 45597 - 44032: 0x87B5, + 45598 - 44032: 0x87B6, + 45599 - 44032: 0x87B7, + 45600 - 44032: 0xB4B2, + 45601 - 44032: 0x87B8, + 45602 - 44032: 0x87B9, + 45603 - 44032: 0x87BA, + 45604 - 44032: 0x87BB, + 45605 - 44032: 0x87BC, + 45606 - 44032: 0x87BD, + 45607 - 44032: 0x87BE, + 45608 - 44032: 0x87BF, + 45609 - 44032: 0x87C0, + 45610 - 44032: 0x87C1, + 45611 - 44032: 0x87C2, + 45612 - 44032: 0x87C3, + 45613 - 44032: 0x87C4, + 45614 - 44032: 0x87C5, + 45615 - 44032: 0x87C6, + 45616 - 44032: 0x87C7, + 45617 - 44032: 0x87C8, + 45618 - 44032: 0x87C9, + 45619 - 44032: 0x87CA, + 45620 - 44032: 0xB4B3, + 45621 - 44032: 0x87CB, + 45622 - 44032: 0x87CC, + 45623 - 44032: 0x87CD, + 45624 - 44032: 0x87CE, + 45625 - 44032: 0x87CF, + 45626 - 44032: 0x87D0, + 45627 - 44032: 0x87D1, + 45628 - 44032: 0xB4B4, + 45629 - 44032: 0x87D2, + 45630 - 44032: 0x87D3, + 45631 - 44032: 0x87D4, + 45632 - 44032: 0x87D5, + 45633 - 44032: 0x87D6, + 45634 - 44032: 0x87D7, + 45635 - 44032: 0x87D8, + 45636 - 44032: 0x87D9, + 45637 - 44032: 0x87DA, + 45638 - 44032: 0x87DB, + 45639 - 44032: 0x87DC, + 45640 - 44032: 0x87DD, + 45641 - 44032: 0x87DE, + 45642 - 44032: 0x87DF, + 45643 - 44032: 0x87E0, + 45644 - 44032: 0x87E1, + 45645 - 44032: 0x87E2, + 45646 - 44032: 0x87E3, + 45647 - 44032: 0x87E4, + 45648 - 44032: 0x87E5, + 45649 - 44032: 0x87E6, + 45650 - 44032: 0x87E7, + 45651 - 44032: 0x87E8, + 45652 - 44032: 0x87E9, + 45653 - 44032: 0x87EA, + 45654 - 44032: 0x87EB, + 45655 - 44032: 0x87EC, + 45656 - 44032: 0xB4B5, + 45657 - 44032: 0x87ED, + 45658 - 44032: 0x87EE, + 45659 - 44032: 0x87EF, + 45660 - 44032: 0xB4B6, + 45661 - 44032: 0x87F0, + 45662 - 44032: 0x87F1, + 45663 - 44032: 0x87F2, + 45664 - 44032: 0xB4B7, + 45665 - 44032: 0x87F3, + 45666 - 44032: 0x87F4, + 45667 - 44032: 0x87F5, + 45668 - 44032: 0x87F6, + 45669 - 44032: 0x87F7, + 45670 - 44032: 0x87F8, + 45671 - 44032: 0x87F9, + 45672 - 44032: 0xB4B8, + 45673 - 44032: 0xB4B9, + 45674 - 44032: 0x87FA, + 45675 - 44032: 0x87FB, + 45676 - 44032: 0x87FC, + 45677 - 44032: 0x87FD, + 45678 - 44032: 0x87FE, + 45679 - 44032: 0x8841, + 45680 - 44032: 0x8842, + 45681 - 44032: 0x8843, + 45682 - 44032: 0x8844, + 45683 - 44032: 0x8845, + 45684 - 44032: 0xB4BA, + 45685 - 44032: 0xB4BB, + 45686 - 44032: 0x8846, + 45687 - 44032: 0x8847, + 45688 - 44032: 0x8848, + 45689 - 44032: 0x8849, + 45690 - 44032: 0x884A, + 45691 - 44032: 0x884B, + 45692 - 44032: 0xB4BC, + 45693 - 44032: 0x884C, + 45694 - 44032: 0x884D, + 45695 - 44032: 0x884E, + 45696 - 44032: 0x884F, + 45697 - 44032: 0x8850, + 45698 - 44032: 0x8851, + 45699 - 44032: 0x8852, + 45700 - 44032: 0xB4BD, + 45701 - 44032: 0xB4BE, + 45702 - 44032: 0x8853, + 45703 - 44032: 0x8854, + 45704 - 44032: 0x8855, + 45705 - 44032: 0xB4BF, + 45706 - 44032: 0x8856, + 45707 - 44032: 0x8857, + 45708 - 44032: 0x8858, + 45709 - 44032: 0x8859, + 45710 - 44032: 0x885A, + 45711 - 44032: 0x8861, + 45712 - 44032: 0xB4C0, + 45713 - 44032: 0xB4C1, + 45714 - 44032: 0x8862, + 45715 - 44032: 0x8863, + 45716 - 44032: 0xB4C2, + 45717 - 44032: 0x8864, + 45718 - 44032: 0x8865, + 45719 - 44032: 0x8866, + 45720 - 44032: 0xB4C3, + 45721 - 44032: 0xB4C4, + 45722 - 44032: 0xB4C5, + 45723 - 44032: 0x8867, + 45724 - 44032: 0x8868, + 45725 - 44032: 0x8869, + 45726 - 44032: 0x886A, + 45727 - 44032: 0x886B, + 45728 - 44032: 0xB4C6, + 45729 - 44032: 0xB4C7, + 45730 - 44032: 0x886C, + 45731 - 44032: 0xB4C8, + 45732 - 44032: 0x886D, + 45733 - 44032: 0xB4C9, + 45734 - 44032: 0xB4CA, + 45735 - 44032: 0x886E, + 45736 - 44032: 0x886F, + 45737 - 44032: 0x8870, + 45738 - 44032: 0xB4CB, + 45739 - 44032: 0x8871, + 45740 - 44032: 0xB4CC, + 45741 - 44032: 0x8872, + 45742 - 44032: 0x8873, + 45743 - 44032: 0x8874, + 45744 - 44032: 0xB4CD, + 45745 - 44032: 0x8875, + 45746 - 44032: 0x8876, + 45747 - 44032: 0x8877, + 45748 - 44032: 0xB4CE, + 45749 - 44032: 0x8878, + 45750 - 44032: 0x8879, + 45751 - 44032: 0x887A, + 45752 - 44032: 0x8881, + 45753 - 44032: 0x8882, + 45754 - 44032: 0x8883, + 45755 - 44032: 0x8884, + 45756 - 44032: 0x8885, + 45757 - 44032: 0x8886, + 45758 - 44032: 0x8887, + 45759 - 44032: 0x8888, + 45760 - 44032: 0x8889, + 45761 - 44032: 0x888A, + 45762 - 44032: 0x888B, + 45763 - 44032: 0x888C, + 45764 - 44032: 0x888D, + 45765 - 44032: 0x888E, + 45766 - 44032: 0x888F, + 45767 - 44032: 0x8890, + 45768 - 44032: 0xB4CF, + 45769 - 44032: 0xB4D0, + 45770 - 44032: 0x8891, + 45771 - 44032: 0x8892, + 45772 - 44032: 0xB4D1, + 45773 - 44032: 0x8893, + 45774 - 44032: 0x8894, + 45775 - 44032: 0x8895, + 45776 - 44032: 0xB4D2, + 45777 - 44032: 0x8896, + 45778 - 44032: 0xB4D3, + 45779 - 44032: 0x8897, + 45780 - 44032: 0x8898, + 45781 - 44032: 0x8899, + 45782 - 44032: 0x889A, + 45783 - 44032: 0x889B, + 45784 - 44032: 0xB4D4, + 45785 - 44032: 0xB4D5, + 45786 - 44032: 0x889C, + 45787 - 44032: 0xB4D6, + 45788 - 44032: 0x889D, + 45789 - 44032: 0xB4D7, + 45790 - 44032: 0x889E, + 45791 - 44032: 0x889F, + 45792 - 44032: 0x88A0, + 45793 - 44032: 0x88A1, + 45794 - 44032: 0xB4D8, + 45795 - 44032: 0x88A2, + 45796 - 44032: 0xB4D9, + 45797 - 44032: 0xB4DA, + 45798 - 44032: 0xB4DB, + 45799 - 44032: 0x88A3, + 45800 - 44032: 0xB4DC, + 45801 - 44032: 0x88A4, + 45802 - 44032: 0x88A5, + 45803 - 44032: 0xB4DD, + 45804 - 44032: 0xB4DE, + 45805 - 44032: 0xB4DF, + 45806 - 44032: 0xB4E0, + 45807 - 44032: 0xB4E1, + 45808 - 44032: 0x88A6, + 45809 - 44032: 0x88A7, + 45810 - 44032: 0x88A8, + 45811 - 44032: 0xB4E2, + 45812 - 44032: 0xB4E3, + 45813 - 44032: 0xB4E4, + 45814 - 44032: 0x88A9, + 45815 - 44032: 0xB4E5, + 45816 - 44032: 0xB4E6, + 45817 - 44032: 0xB4E7, + 45818 - 44032: 0xB4E8, + 45819 - 44032: 0xB4E9, + 45820 - 44032: 0x88AA, + 45821 - 44032: 0x88AB, + 45822 - 44032: 0x88AC, + 45823 - 44032: 0xB4EA, + 45824 - 44032: 0xB4EB, + 45825 - 44032: 0xB4EC, + 45826 - 44032: 0x88AD, + 45827 - 44032: 0x88AE, + 45828 - 44032: 0xB4ED, + 45829 - 44032: 0x88AF, + 45830 - 44032: 0x88B0, + 45831 - 44032: 0x88B1, + 45832 - 44032: 0xB4EE, + 45833 - 44032: 0x88B2, + 45834 - 44032: 0x88B3, + 45835 - 44032: 0x88B4, + 45836 - 44032: 0x88B5, + 45837 - 44032: 0x88B6, + 45838 - 44032: 0x88B7, + 45839 - 44032: 0x88B8, + 45840 - 44032: 0xB4EF, + 45841 - 44032: 0xB4F0, + 45842 - 44032: 0x88B9, + 45843 - 44032: 0xB4F1, + 45844 - 44032: 0xB4F2, + 45845 - 44032: 0xB4F3, + 45846 - 44032: 0x88BA, + 45847 - 44032: 0x88BB, + 45848 - 44032: 0x88BC, + 45849 - 44032: 0x88BD, + 45850 - 44032: 0x88BE, + 45851 - 44032: 0x88BF, + 45852 - 44032: 0xB4F4, + 45853 - 44032: 0x88C0, + 45854 - 44032: 0x88C1, + 45855 - 44032: 0x88C2, + 45856 - 44032: 0x88C3, + 45857 - 44032: 0x88C4, + 45858 - 44032: 0x88C5, + 45859 - 44032: 0x88C6, + 45860 - 44032: 0x88C7, + 45861 - 44032: 0x88C8, + 45862 - 44032: 0x88C9, + 45863 - 44032: 0x88CA, + 45864 - 44032: 0x88CB, + 45865 - 44032: 0x88CC, + 45866 - 44032: 0x88CD, + 45867 - 44032: 0x88CE, + 45868 - 44032: 0x88CF, + 45869 - 44032: 0x88D0, + 45870 - 44032: 0x88D1, + 45871 - 44032: 0x88D2, + 45872 - 44032: 0x88D3, + 45873 - 44032: 0x88D4, + 45874 - 44032: 0x88D5, + 45875 - 44032: 0x88D6, + 45876 - 44032: 0x88D7, + 45877 - 44032: 0x88D8, + 45878 - 44032: 0x88D9, + 45879 - 44032: 0x88DA, + 45880 - 44032: 0x88DB, + 45881 - 44032: 0x88DC, + 45882 - 44032: 0x88DD, + 45883 - 44032: 0x88DE, + 45884 - 44032: 0x88DF, + 45885 - 44032: 0x88E0, + 45886 - 44032: 0x88E1, + 45887 - 44032: 0x88E2, + 45888 - 44032: 0x88E3, + 45889 - 44032: 0x88E4, + 45890 - 44032: 0x88E5, + 45891 - 44032: 0x88E6, + 45892 - 44032: 0x88E7, + 45893 - 44032: 0x88E8, + 45894 - 44032: 0x88E9, + 45895 - 44032: 0x88EA, + 45896 - 44032: 0x88EB, + 45897 - 44032: 0x88EC, + 45898 - 44032: 0x88ED, + 45899 - 44032: 0x88EE, + 45900 - 44032: 0x88EF, + 45901 - 44032: 0x88F0, + 45902 - 44032: 0x88F1, + 45903 - 44032: 0x88F2, + 45904 - 44032: 0x88F3, + 45905 - 44032: 0x88F4, + 45906 - 44032: 0x88F5, + 45907 - 44032: 0x88F6, + 45908 - 44032: 0xB4F5, + 45909 - 44032: 0xB4F6, + 45910 - 44032: 0xB4F7, + 45911 - 44032: 0x88F7, + 45912 - 44032: 0xB4F8, + 45913 - 44032: 0x88F8, + 45914 - 44032: 0x88F9, + 45915 - 44032: 0xB4F9, + 45916 - 44032: 0xB4FA, + 45917 - 44032: 0x88FA, + 45918 - 44032: 0xB4FB, + 45919 - 44032: 0xB4FC, + 45920 - 44032: 0x88FB, + 45921 - 44032: 0x88FC, + 45922 - 44032: 0x88FD, + 45923 - 44032: 0x88FE, + 45924 - 44032: 0xB4FD, + 45925 - 44032: 0xB4FE, + 45926 - 44032: 0x8941, + 45927 - 44032: 0xB5A1, + 45928 - 44032: 0x8942, + 45929 - 44032: 0xB5A2, + 45930 - 44032: 0x8943, + 45931 - 44032: 0xB5A3, + 45932 - 44032: 0x8944, + 45933 - 44032: 0x8945, + 45934 - 44032: 0xB5A4, + 45935 - 44032: 0x8946, + 45936 - 44032: 0xB5A5, + 45937 - 44032: 0xB5A6, + 45938 - 44032: 0x8947, + 45939 - 44032: 0x8948, + 45940 - 44032: 0xB5A7, + 45941 - 44032: 0x8949, + 45942 - 44032: 0x894A, + 45943 - 44032: 0x894B, + 45944 - 44032: 0xB5A8, + 45945 - 44032: 0x894C, + 45946 - 44032: 0x894D, + 45947 - 44032: 0x894E, + 45948 - 44032: 0x894F, + 45949 - 44032: 0x8950, + 45950 - 44032: 0x8951, + 45951 - 44032: 0x8952, + 45952 - 44032: 0xB5A9, + 45953 - 44032: 0xB5AA, + 45954 - 44032: 0x8953, + 45955 - 44032: 0xB5AB, + 45956 - 44032: 0xB5AC, + 45957 - 44032: 0xB5AD, + 45958 - 44032: 0x8954, + 45959 - 44032: 0x8955, + 45960 - 44032: 0x8956, + 45961 - 44032: 0x8957, + 45962 - 44032: 0x8958, + 45963 - 44032: 0x8959, + 45964 - 44032: 0xB5AE, + 45965 - 44032: 0x895A, + 45966 - 44032: 0x8961, + 45967 - 44032: 0x8962, + 45968 - 44032: 0xB5AF, + 45969 - 44032: 0x8963, + 45970 - 44032: 0x8964, + 45971 - 44032: 0x8965, + 45972 - 44032: 0xB5B0, + 45973 - 44032: 0x8966, + 45974 - 44032: 0x8967, + 45975 - 44032: 0x8968, + 45976 - 44032: 0x8969, + 45977 - 44032: 0x896A, + 45978 - 44032: 0x896B, + 45979 - 44032: 0x896C, + 45980 - 44032: 0x896D, + 45981 - 44032: 0x896E, + 45982 - 44032: 0x896F, + 45983 - 44032: 0x8970, + 45984 - 44032: 0xB5B1, + 45985 - 44032: 0xB5B2, + 45986 - 44032: 0x8971, + 45987 - 44032: 0x8972, + 45988 - 44032: 0x8973, + 45989 - 44032: 0x8974, + 45990 - 44032: 0x8975, + 45991 - 44032: 0x8976, + 45992 - 44032: 0xB5B3, + 45993 - 44032: 0x8977, + 45994 - 44032: 0x8978, + 45995 - 44032: 0x8979, + 45996 - 44032: 0xB5B4, + 45997 - 44032: 0x897A, + 45998 - 44032: 0x8981, + 45999 - 44032: 0x8982, + 46000 - 44032: 0x8983, + 46001 - 44032: 0x8984, + 46002 - 44032: 0x8985, + 46003 - 44032: 0x8986, + 46004 - 44032: 0x8987, + 46005 - 44032: 0x8988, + 46006 - 44032: 0x8989, + 46007 - 44032: 0x898A, + 46008 - 44032: 0x898B, + 46009 - 44032: 0x898C, + 46010 - 44032: 0x898D, + 46011 - 44032: 0x898E, + 46012 - 44032: 0x898F, + 46013 - 44032: 0x8990, + 46014 - 44032: 0x8991, + 46015 - 44032: 0x8992, + 46016 - 44032: 0x8993, + 46017 - 44032: 0x8994, + 46018 - 44032: 0x8995, + 46019 - 44032: 0x8996, + 46020 - 44032: 0xB5B5, + 46021 - 44032: 0xB5B6, + 46022 - 44032: 0x8997, + 46023 - 44032: 0x8998, + 46024 - 44032: 0xB5B7, + 46025 - 44032: 0x8999, + 46026 - 44032: 0x899A, + 46027 - 44032: 0xB5B8, + 46028 - 44032: 0xB5B9, + 46029 - 44032: 0x899B, + 46030 - 44032: 0xB5BA, + 46031 - 44032: 0x899C, + 46032 - 44032: 0xB5BB, + 46033 - 44032: 0x899D, + 46034 - 44032: 0x899E, + 46035 - 44032: 0x899F, + 46036 - 44032: 0xB5BC, + 46037 - 44032: 0xB5BD, + 46038 - 44032: 0x89A0, + 46039 - 44032: 0xB5BE, + 46040 - 44032: 0x89A1, + 46041 - 44032: 0xB5BF, + 46042 - 44032: 0x89A2, + 46043 - 44032: 0xB5C0, + 46044 - 44032: 0x89A3, + 46045 - 44032: 0xB5C1, + 46046 - 44032: 0x89A4, + 46047 - 44032: 0x89A5, + 46048 - 44032: 0xB5C2, + 46049 - 44032: 0x89A6, + 46050 - 44032: 0x89A7, + 46051 - 44032: 0x89A8, + 46052 - 44032: 0xB5C3, + 46053 - 44032: 0x89A9, + 46054 - 44032: 0x89AA, + 46055 - 44032: 0x89AB, + 46056 - 44032: 0xB5C4, + 46057 - 44032: 0x89AC, + 46058 - 44032: 0x89AD, + 46059 - 44032: 0x89AE, + 46060 - 44032: 0x89AF, + 46061 - 44032: 0x89B0, + 46062 - 44032: 0x89B1, + 46063 - 44032: 0x89B2, + 46064 - 44032: 0x89B3, + 46065 - 44032: 0x89B4, + 46066 - 44032: 0x89B5, + 46067 - 44032: 0x89B6, + 46068 - 44032: 0x89B7, + 46069 - 44032: 0x89B8, + 46070 - 44032: 0x89B9, + 46071 - 44032: 0x89BA, + 46072 - 44032: 0x89BB, + 46073 - 44032: 0x89BC, + 46074 - 44032: 0x89BD, + 46075 - 44032: 0x89BE, + 46076 - 44032: 0xB5C5, + 46077 - 44032: 0x89BF, + 46078 - 44032: 0x89C0, + 46079 - 44032: 0x89C1, + 46080 - 44032: 0x89C2, + 46081 - 44032: 0x89C3, + 46082 - 44032: 0x89C4, + 46083 - 44032: 0x89C5, + 46084 - 44032: 0x89C6, + 46085 - 44032: 0x89C7, + 46086 - 44032: 0x89C8, + 46087 - 44032: 0x89C9, + 46088 - 44032: 0x89CA, + 46089 - 44032: 0x89CB, + 46090 - 44032: 0x89CC, + 46091 - 44032: 0x89CD, + 46092 - 44032: 0x89CE, + 46093 - 44032: 0x89CF, + 46094 - 44032: 0x89D0, + 46095 - 44032: 0x89D1, + 46096 - 44032: 0xB5C6, + 46097 - 44032: 0x89D2, + 46098 - 44032: 0x89D3, + 46099 - 44032: 0x89D4, + 46100 - 44032: 0x89D5, + 46101 - 44032: 0x89D6, + 46102 - 44032: 0x89D7, + 46103 - 44032: 0x89D8, + 46104 - 44032: 0xB5C7, + 46105 - 44032: 0x89D9, + 46106 - 44032: 0x89DA, + 46107 - 44032: 0x89DB, + 46108 - 44032: 0xB5C8, + 46109 - 44032: 0x89DC, + 46110 - 44032: 0x89DD, + 46111 - 44032: 0x89DE, + 46112 - 44032: 0xB5C9, + 46113 - 44032: 0x89DF, + 46114 - 44032: 0x89E0, + 46115 - 44032: 0x89E1, + 46116 - 44032: 0x89E2, + 46117 - 44032: 0x89E3, + 46118 - 44032: 0x89E4, + 46119 - 44032: 0x89E5, + 46120 - 44032: 0xB5CA, + 46121 - 44032: 0xB5CB, + 46122 - 44032: 0x89E6, + 46123 - 44032: 0xB5CC, + 46124 - 44032: 0x89E7, + 46125 - 44032: 0x89E8, + 46126 - 44032: 0x89E9, + 46127 - 44032: 0x89EA, + 46128 - 44032: 0x89EB, + 46129 - 44032: 0x89EC, + 46130 - 44032: 0x89ED, + 46131 - 44032: 0x89EE, + 46132 - 44032: 0xB5CD, + 46133 - 44032: 0x89EF, + 46134 - 44032: 0x89F0, + 46135 - 44032: 0x89F1, + 46136 - 44032: 0x89F2, + 46137 - 44032: 0x89F3, + 46138 - 44032: 0x89F4, + 46139 - 44032: 0x89F5, + 46140 - 44032: 0x89F6, + 46141 - 44032: 0x89F7, + 46142 - 44032: 0x89F8, + 46143 - 44032: 0x89F9, + 46144 - 44032: 0x89FA, + 46145 - 44032: 0x89FB, + 46146 - 44032: 0x89FC, + 46147 - 44032: 0x89FD, + 46148 - 44032: 0x89FE, + 46149 - 44032: 0x8A41, + 46150 - 44032: 0x8A42, + 46151 - 44032: 0x8A43, + 46152 - 44032: 0x8A44, + 46153 - 44032: 0x8A45, + 46154 - 44032: 0x8A46, + 46155 - 44032: 0x8A47, + 46156 - 44032: 0x8A48, + 46157 - 44032: 0x8A49, + 46158 - 44032: 0x8A4A, + 46159 - 44032: 0x8A4B, + 46160 - 44032: 0xB5CE, + 46161 - 44032: 0xB5CF, + 46162 - 44032: 0x8A4C, + 46163 - 44032: 0x8A4D, + 46164 - 44032: 0xB5D0, + 46165 - 44032: 0x8A4E, + 46166 - 44032: 0x8A4F, + 46167 - 44032: 0x8A50, + 46168 - 44032: 0xB5D1, + 46169 - 44032: 0x8A51, + 46170 - 44032: 0x8A52, + 46171 - 44032: 0x8A53, + 46172 - 44032: 0x8A54, + 46173 - 44032: 0x8A55, + 46174 - 44032: 0x8A56, + 46175 - 44032: 0x8A57, + 46176 - 44032: 0xB5D2, + 46177 - 44032: 0xB5D3, + 46178 - 44032: 0x8A58, + 46179 - 44032: 0xB5D4, + 46180 - 44032: 0x8A59, + 46181 - 44032: 0xB5D5, + 46182 - 44032: 0x8A5A, + 46183 - 44032: 0x8A61, + 46184 - 44032: 0x8A62, + 46185 - 44032: 0x8A63, + 46186 - 44032: 0x8A64, + 46187 - 44032: 0x8A65, + 46188 - 44032: 0xB5D6, + 46189 - 44032: 0x8A66, + 46190 - 44032: 0x8A67, + 46191 - 44032: 0x8A68, + 46192 - 44032: 0x8A69, + 46193 - 44032: 0x8A6A, + 46194 - 44032: 0x8A6B, + 46195 - 44032: 0x8A6C, + 46196 - 44032: 0x8A6D, + 46197 - 44032: 0x8A6E, + 46198 - 44032: 0x8A6F, + 46199 - 44032: 0x8A70, + 46200 - 44032: 0x8A71, + 46201 - 44032: 0x8A72, + 46202 - 44032: 0x8A73, + 46203 - 44032: 0x8A74, + 46204 - 44032: 0x8A75, + 46205 - 44032: 0x8A76, + 46206 - 44032: 0x8A77, + 46207 - 44032: 0x8A78, + 46208 - 44032: 0xB5D7, + 46209 - 44032: 0x8A79, + 46210 - 44032: 0x8A7A, + 46211 - 44032: 0x8A81, + 46212 - 44032: 0x8A82, + 46213 - 44032: 0x8A83, + 46214 - 44032: 0x8A84, + 46215 - 44032: 0x8A85, + 46216 - 44032: 0xB5D8, + 46217 - 44032: 0x8A86, + 46218 - 44032: 0x8A87, + 46219 - 44032: 0x8A88, + 46220 - 44032: 0x8A89, + 46221 - 44032: 0x8A8A, + 46222 - 44032: 0x8A8B, + 46223 - 44032: 0x8A8C, + 46224 - 44032: 0x8A8D, + 46225 - 44032: 0x8A8E, + 46226 - 44032: 0x8A8F, + 46227 - 44032: 0x8A90, + 46228 - 44032: 0x8A91, + 46229 - 44032: 0x8A92, + 46230 - 44032: 0x8A93, + 46231 - 44032: 0x8A94, + 46232 - 44032: 0x8A95, + 46233 - 44032: 0x8A96, + 46234 - 44032: 0x8A97, + 46235 - 44032: 0x8A98, + 46236 - 44032: 0x8A99, + 46237 - 44032: 0xB5D9, + 46238 - 44032: 0x8A9A, + 46239 - 44032: 0x8A9B, + 46240 - 44032: 0x8A9C, + 46241 - 44032: 0x8A9D, + 46242 - 44032: 0x8A9E, + 46243 - 44032: 0x8A9F, + 46244 - 44032: 0xB5DA, + 46245 - 44032: 0x8AA0, + 46246 - 44032: 0x8AA1, + 46247 - 44032: 0x8AA2, + 46248 - 44032: 0xB5DB, + 46249 - 44032: 0x8AA3, + 46250 - 44032: 0x8AA4, + 46251 - 44032: 0x8AA5, + 46252 - 44032: 0xB5DC, + 46253 - 44032: 0x8AA6, + 46254 - 44032: 0x8AA7, + 46255 - 44032: 0x8AA8, + 46256 - 44032: 0x8AA9, + 46257 - 44032: 0x8AAA, + 46258 - 44032: 0x8AAB, + 46259 - 44032: 0x8AAC, + 46260 - 44032: 0x8AAD, + 46261 - 44032: 0xB5DD, + 46262 - 44032: 0x8AAE, + 46263 - 44032: 0xB5DE, + 46264 - 44032: 0x8AAF, + 46265 - 44032: 0xB5DF, + 46266 - 44032: 0x8AB0, + 46267 - 44032: 0x8AB1, + 46268 - 44032: 0x8AB2, + 46269 - 44032: 0x8AB3, + 46270 - 44032: 0x8AB4, + 46271 - 44032: 0x8AB5, + 46272 - 44032: 0xB5E0, + 46273 - 44032: 0x8AB6, + 46274 - 44032: 0x8AB7, + 46275 - 44032: 0x8AB8, + 46276 - 44032: 0xB5E1, + 46277 - 44032: 0x8AB9, + 46278 - 44032: 0x8ABA, + 46279 - 44032: 0x8ABB, + 46280 - 44032: 0xB5E2, + 46281 - 44032: 0x8ABC, + 46282 - 44032: 0x8ABD, + 46283 - 44032: 0x8ABE, + 46284 - 44032: 0x8ABF, + 46285 - 44032: 0x8AC0, + 46286 - 44032: 0x8AC1, + 46287 - 44032: 0x8AC2, + 46288 - 44032: 0xB5E3, + 46289 - 44032: 0x8AC3, + 46290 - 44032: 0x8AC4, + 46291 - 44032: 0x8AC5, + 46292 - 44032: 0x8AC6, + 46293 - 44032: 0xB5E4, + 46294 - 44032: 0x8AC7, + 46295 - 44032: 0x8AC8, + 46296 - 44032: 0x8AC9, + 46297 - 44032: 0x8ACA, + 46298 - 44032: 0x8ACB, + 46299 - 44032: 0x8ACC, + 46300 - 44032: 0xB5E5, + 46301 - 44032: 0xB5E6, + 46302 - 44032: 0x8ACD, + 46303 - 44032: 0x8ACE, + 46304 - 44032: 0xB5E7, + 46305 - 44032: 0x8ACF, + 46306 - 44032: 0x8AD0, + 46307 - 44032: 0xB5E8, + 46308 - 44032: 0xB5E9, + 46309 - 44032: 0x8AD1, + 46310 - 44032: 0xB5EA, + 46311 - 44032: 0x8AD2, + 46312 - 44032: 0x8AD3, + 46313 - 44032: 0x8AD4, + 46314 - 44032: 0x8AD5, + 46315 - 44032: 0x8AD6, + 46316 - 44032: 0xB5EB, + 46317 - 44032: 0xB5EC, + 46318 - 44032: 0x8AD7, + 46319 - 44032: 0xB5ED, + 46320 - 44032: 0x8AD8, + 46321 - 44032: 0xB5EE, + 46322 - 44032: 0x8AD9, + 46323 - 44032: 0x8ADA, + 46324 - 44032: 0x8ADB, + 46325 - 44032: 0x8ADC, + 46326 - 44032: 0x8ADD, + 46327 - 44032: 0x8ADE, + 46328 - 44032: 0xB5EF, + 46329 - 44032: 0x8ADF, + 46330 - 44032: 0x8AE0, + 46331 - 44032: 0x8AE1, + 46332 - 44032: 0x8AE2, + 46333 - 44032: 0x8AE3, + 46334 - 44032: 0x8AE4, + 46335 - 44032: 0x8AE5, + 46336 - 44032: 0x8AE6, + 46337 - 44032: 0x8AE7, + 46338 - 44032: 0x8AE8, + 46339 - 44032: 0x8AE9, + 46340 - 44032: 0x8AEA, + 46341 - 44032: 0x8AEB, + 46342 - 44032: 0x8AEC, + 46343 - 44032: 0x8AED, + 46344 - 44032: 0x8AEE, + 46345 - 44032: 0x8AEF, + 46346 - 44032: 0x8AF0, + 46347 - 44032: 0x8AF1, + 46348 - 44032: 0x8AF2, + 46349 - 44032: 0x8AF3, + 46350 - 44032: 0x8AF4, + 46351 - 44032: 0x8AF5, + 46352 - 44032: 0x8AF6, + 46353 - 44032: 0x8AF7, + 46354 - 44032: 0x8AF8, + 46355 - 44032: 0x8AF9, + 46356 - 44032: 0xB5F0, + 46357 - 44032: 0xB5F1, + 46358 - 44032: 0x8AFA, + 46359 - 44032: 0x8AFB, + 46360 - 44032: 0xB5F2, + 46361 - 44032: 0x8AFC, + 46362 - 44032: 0x8AFD, + 46363 - 44032: 0xB5F3, + 46364 - 44032: 0xB5F4, + 46365 - 44032: 0x8AFE, + 46366 - 44032: 0x8B41, + 46367 - 44032: 0x8B42, + 46368 - 44032: 0x8B43, + 46369 - 44032: 0x8B44, + 46370 - 44032: 0x8B45, + 46371 - 44032: 0x8B46, + 46372 - 44032: 0xB5F5, + 46373 - 44032: 0xB5F6, + 46374 - 44032: 0x8B47, + 46375 - 44032: 0xB5F7, + 46376 - 44032: 0xB5F8, + 46377 - 44032: 0xB5F9, + 46378 - 44032: 0xB5FA, + 46379 - 44032: 0x8B48, + 46380 - 44032: 0x8B49, + 46381 - 44032: 0x8B4A, + 46382 - 44032: 0x8B4B, + 46383 - 44032: 0x8B4C, + 46384 - 44032: 0xB5FB, + 46385 - 44032: 0xB5FC, + 46386 - 44032: 0x8B4D, + 46387 - 44032: 0x8B4E, + 46388 - 44032: 0xB5FD, + 46389 - 44032: 0x8B4F, + 46390 - 44032: 0x8B50, + 46391 - 44032: 0x8B51, + 46392 - 44032: 0xB5FE, + 46393 - 44032: 0x8B52, + 46394 - 44032: 0x8B53, + 46395 - 44032: 0x8B54, + 46396 - 44032: 0x8B55, + 46397 - 44032: 0x8B56, + 46398 - 44032: 0x8B57, + 46399 - 44032: 0x8B58, + 46400 - 44032: 0xB6A1, + 46401 - 44032: 0xB6A2, + 46402 - 44032: 0x8B59, + 46403 - 44032: 0xB6A3, + 46404 - 44032: 0xB6A4, + 46405 - 44032: 0xB6A5, + 46406 - 44032: 0x8B5A, + 46407 - 44032: 0x8B61, + 46408 - 44032: 0x8B62, + 46409 - 44032: 0x8B63, + 46410 - 44032: 0x8B64, + 46411 - 44032: 0xB6A6, + 46412 - 44032: 0xB6A7, + 46413 - 44032: 0xB6A8, + 46414 - 44032: 0x8B65, + 46415 - 44032: 0x8B66, + 46416 - 44032: 0xB6A9, + 46417 - 44032: 0x8B67, + 46418 - 44032: 0x8B68, + 46419 - 44032: 0x8B69, + 46420 - 44032: 0xB6AA, + 46421 - 44032: 0x8B6A, + 46422 - 44032: 0x8B6B, + 46423 - 44032: 0x8B6C, + 46424 - 44032: 0x8B6D, + 46425 - 44032: 0x8B6E, + 46426 - 44032: 0x8B6F, + 46427 - 44032: 0x8B70, + 46428 - 44032: 0xB6AB, + 46429 - 44032: 0xB6AC, + 46430 - 44032: 0x8B71, + 46431 - 44032: 0xB6AD, + 46432 - 44032: 0xB6AE, + 46433 - 44032: 0xB6AF, + 46434 - 44032: 0x8B72, + 46435 - 44032: 0x8B73, + 46436 - 44032: 0x8B74, + 46437 - 44032: 0x8B75, + 46438 - 44032: 0x8B76, + 46439 - 44032: 0x8B77, + 46440 - 44032: 0x8B78, + 46441 - 44032: 0x8B79, + 46442 - 44032: 0x8B7A, + 46443 - 44032: 0x8B81, + 46444 - 44032: 0x8B82, + 46445 - 44032: 0x8B83, + 46446 - 44032: 0x8B84, + 46447 - 44032: 0x8B85, + 46448 - 44032: 0x8B86, + 46449 - 44032: 0x8B87, + 46450 - 44032: 0x8B88, + 46451 - 44032: 0x8B89, + 46452 - 44032: 0x8B8A, + 46453 - 44032: 0x8B8B, + 46454 - 44032: 0x8B8C, + 46455 - 44032: 0x8B8D, + 46456 - 44032: 0x8B8E, + 46457 - 44032: 0x8B8F, + 46458 - 44032: 0x8B90, + 46459 - 44032: 0x8B91, + 46460 - 44032: 0x8B92, + 46461 - 44032: 0x8B93, + 46462 - 44032: 0x8B94, + 46463 - 44032: 0x8B95, + 46464 - 44032: 0x8B96, + 46465 - 44032: 0x8B97, + 46466 - 44032: 0x8B98, + 46467 - 44032: 0x8B99, + 46468 - 44032: 0x8B9A, + 46469 - 44032: 0x8B9B, + 46470 - 44032: 0x8B9C, + 46471 - 44032: 0x8B9D, + 46472 - 44032: 0x8B9E, + 46473 - 44032: 0x8B9F, + 46474 - 44032: 0x8BA0, + 46475 - 44032: 0x8BA1, + 46476 - 44032: 0x8BA2, + 46477 - 44032: 0x8BA3, + 46478 - 44032: 0x8BA4, + 46479 - 44032: 0x8BA5, + 46480 - 44032: 0x8BA6, + 46481 - 44032: 0x8BA7, + 46482 - 44032: 0x8BA8, + 46483 - 44032: 0x8BA9, + 46484 - 44032: 0x8BAA, + 46485 - 44032: 0x8BAB, + 46486 - 44032: 0x8BAC, + 46487 - 44032: 0x8BAD, + 46488 - 44032: 0x8BAE, + 46489 - 44032: 0x8BAF, + 46490 - 44032: 0x8BB0, + 46491 - 44032: 0x8BB1, + 46492 - 44032: 0x8BB2, + 46493 - 44032: 0x8BB3, + 46494 - 44032: 0x8BB4, + 46495 - 44032: 0x8BB5, + 46496 - 44032: 0xB6B0, + 46497 - 44032: 0xB6B1, + 46498 - 44032: 0x8BB6, + 46499 - 44032: 0x8BB7, + 46500 - 44032: 0xB6B2, + 46501 - 44032: 0x8BB8, + 46502 - 44032: 0x8BB9, + 46503 - 44032: 0x8BBA, + 46504 - 44032: 0xB6B3, + 46505 - 44032: 0x8BBB, + 46506 - 44032: 0xB6B4, + 46507 - 44032: 0xB6B5, + 46508 - 44032: 0x8BBC, + 46509 - 44032: 0x8BBD, + 46510 - 44032: 0x8BBE, + 46511 - 44032: 0x8BBF, + 46512 - 44032: 0xB6B6, + 46513 - 44032: 0xB6B7, + 46514 - 44032: 0x8BC0, + 46515 - 44032: 0xB6B8, + 46516 - 44032: 0xB6B9, + 46517 - 44032: 0xB6BA, + 46518 - 44032: 0x8BC1, + 46519 - 44032: 0x8BC2, + 46520 - 44032: 0x8BC3, + 46521 - 44032: 0x8BC4, + 46522 - 44032: 0x8BC5, + 46523 - 44032: 0xB6BB, + 46524 - 44032: 0xB6BC, + 46525 - 44032: 0xB6BD, + 46526 - 44032: 0x8BC6, + 46527 - 44032: 0x8BC7, + 46528 - 44032: 0xB6BE, + 46529 - 44032: 0x8BC8, + 46530 - 44032: 0x8BC9, + 46531 - 44032: 0x8BCA, + 46532 - 44032: 0xB6BF, + 46533 - 44032: 0x8BCB, + 46534 - 44032: 0x8BCC, + 46535 - 44032: 0x8BCD, + 46536 - 44032: 0x8BCE, + 46537 - 44032: 0x8BCF, + 46538 - 44032: 0x8BD0, + 46539 - 44032: 0x8BD1, + 46540 - 44032: 0xB6C0, + 46541 - 44032: 0xB6C1, + 46542 - 44032: 0x8BD2, + 46543 - 44032: 0xB6C2, + 46544 - 44032: 0xB6C3, + 46545 - 44032: 0xB6C4, + 46546 - 44032: 0x8BD3, + 46547 - 44032: 0x8BD4, + 46548 - 44032: 0x8BD5, + 46549 - 44032: 0x8BD6, + 46550 - 44032: 0x8BD7, + 46551 - 44032: 0x8BD8, + 46552 - 44032: 0xB6C5, + 46553 - 44032: 0x8BD9, + 46554 - 44032: 0x8BDA, + 46555 - 44032: 0x8BDB, + 46556 - 44032: 0x8BDC, + 46557 - 44032: 0x8BDD, + 46558 - 44032: 0x8BDE, + 46559 - 44032: 0x8BDF, + 46560 - 44032: 0x8BE0, + 46561 - 44032: 0x8BE1, + 46562 - 44032: 0x8BE2, + 46563 - 44032: 0x8BE3, + 46564 - 44032: 0x8BE4, + 46565 - 44032: 0x8BE5, + 46566 - 44032: 0x8BE6, + 46567 - 44032: 0x8BE7, + 46568 - 44032: 0x8BE8, + 46569 - 44032: 0x8BE9, + 46570 - 44032: 0x8BEA, + 46571 - 44032: 0x8BEB, + 46572 - 44032: 0xB6C6, + 46573 - 44032: 0x8BEC, + 46574 - 44032: 0x8BED, + 46575 - 44032: 0x8BEE, + 46576 - 44032: 0x8BEF, + 46577 - 44032: 0x8BF0, + 46578 - 44032: 0x8BF1, + 46579 - 44032: 0x8BF2, + 46580 - 44032: 0x8BF3, + 46581 - 44032: 0x8BF4, + 46582 - 44032: 0x8BF5, + 46583 - 44032: 0x8BF6, + 46584 - 44032: 0x8BF7, + 46585 - 44032: 0x8BF8, + 46586 - 44032: 0x8BF9, + 46587 - 44032: 0x8BFA, + 46588 - 44032: 0x8BFB, + 46589 - 44032: 0x8BFC, + 46590 - 44032: 0x8BFD, + 46591 - 44032: 0x8BFE, + 46592 - 44032: 0x8C41, + 46593 - 44032: 0x8C42, + 46594 - 44032: 0x8C43, + 46595 - 44032: 0x8C44, + 46596 - 44032: 0x8C45, + 46597 - 44032: 0x8C46, + 46598 - 44032: 0x8C47, + 46599 - 44032: 0x8C48, + 46600 - 44032: 0x8C49, + 46601 - 44032: 0x8C4A, + 46602 - 44032: 0x8C4B, + 46603 - 44032: 0x8C4C, + 46604 - 44032: 0x8C4D, + 46605 - 44032: 0x8C4E, + 46606 - 44032: 0x8C4F, + 46607 - 44032: 0x8C50, + 46608 - 44032: 0xB6C7, + 46609 - 44032: 0xB6C8, + 46610 - 44032: 0x8C51, + 46611 - 44032: 0x8C52, + 46612 - 44032: 0xB6C9, + 46613 - 44032: 0x8C53, + 46614 - 44032: 0x8C54, + 46615 - 44032: 0x8C55, + 46616 - 44032: 0xB6CA, + 46617 - 44032: 0x8C56, + 46618 - 44032: 0x8C57, + 46619 - 44032: 0x8C58, + 46620 - 44032: 0x8C59, + 46621 - 44032: 0x8C5A, + 46622 - 44032: 0x8C61, + 46623 - 44032: 0x8C62, + 46624 - 44032: 0x8C63, + 46625 - 44032: 0x8C64, + 46626 - 44032: 0x8C65, + 46627 - 44032: 0x8C66, + 46628 - 44032: 0x8C67, + 46629 - 44032: 0xB6CB, + 46630 - 44032: 0x8C68, + 46631 - 44032: 0x8C69, + 46632 - 44032: 0x8C6A, + 46633 - 44032: 0x8C6B, + 46634 - 44032: 0x8C6C, + 46635 - 44032: 0x8C6D, + 46636 - 44032: 0xB6CC, + 46637 - 44032: 0x8C6E, + 46638 - 44032: 0x8C6F, + 46639 - 44032: 0x8C70, + 46640 - 44032: 0x8C71, + 46641 - 44032: 0x8C72, + 46642 - 44032: 0x8C73, + 46643 - 44032: 0x8C74, + 46644 - 44032: 0xB6CD, + 46645 - 44032: 0x8C75, + 46646 - 44032: 0x8C76, + 46647 - 44032: 0x8C77, + 46648 - 44032: 0x8C78, + 46649 - 44032: 0x8C79, + 46650 - 44032: 0x8C7A, + 46651 - 44032: 0x8C81, + 46652 - 44032: 0x8C82, + 46653 - 44032: 0x8C83, + 46654 - 44032: 0x8C84, + 46655 - 44032: 0x8C85, + 46656 - 44032: 0x8C86, + 46657 - 44032: 0x8C87, + 46658 - 44032: 0x8C88, + 46659 - 44032: 0x8C89, + 46660 - 44032: 0x8C8A, + 46661 - 44032: 0x8C8B, + 46662 - 44032: 0x8C8C, + 46663 - 44032: 0x8C8D, + 46664 - 44032: 0xB6CE, + 46665 - 44032: 0x8C8E, + 46666 - 44032: 0x8C8F, + 46667 - 44032: 0x8C90, + 46668 - 44032: 0x8C91, + 46669 - 44032: 0x8C92, + 46670 - 44032: 0x8C93, + 46671 - 44032: 0x8C94, + 46672 - 44032: 0x8C95, + 46673 - 44032: 0x8C96, + 46674 - 44032: 0x8C97, + 46675 - 44032: 0x8C98, + 46676 - 44032: 0x8C99, + 46677 - 44032: 0x8C9A, + 46678 - 44032: 0x8C9B, + 46679 - 44032: 0x8C9C, + 46680 - 44032: 0x8C9D, + 46681 - 44032: 0x8C9E, + 46682 - 44032: 0x8C9F, + 46683 - 44032: 0x8CA0, + 46684 - 44032: 0x8CA1, + 46685 - 44032: 0x8CA2, + 46686 - 44032: 0x8CA3, + 46687 - 44032: 0x8CA4, + 46688 - 44032: 0x8CA5, + 46689 - 44032: 0x8CA6, + 46690 - 44032: 0x8CA7, + 46691 - 44032: 0x8CA8, + 46692 - 44032: 0xB6CF, + 46693 - 44032: 0x8CA9, + 46694 - 44032: 0x8CAA, + 46695 - 44032: 0x8CAB, + 46696 - 44032: 0xB6D0, + 46697 - 44032: 0x8CAC, + 46698 - 44032: 0x8CAD, + 46699 - 44032: 0x8CAE, + 46700 - 44032: 0x8CAF, + 46701 - 44032: 0x8CB0, + 46702 - 44032: 0x8CB1, + 46703 - 44032: 0x8CB2, + 46704 - 44032: 0x8CB3, + 46705 - 44032: 0x8CB4, + 46706 - 44032: 0x8CB5, + 46707 - 44032: 0x8CB6, + 46708 - 44032: 0x8CB7, + 46709 - 44032: 0x8CB8, + 46710 - 44032: 0x8CB9, + 46711 - 44032: 0x8CBA, + 46712 - 44032: 0x8CBB, + 46713 - 44032: 0x8CBC, + 46714 - 44032: 0x8CBD, + 46715 - 44032: 0x8CBE, + 46716 - 44032: 0x8CBF, + 46717 - 44032: 0x8CC0, + 46718 - 44032: 0x8CC1, + 46719 - 44032: 0x8CC2, + 46720 - 44032: 0x8CC3, + 46721 - 44032: 0x8CC4, + 46722 - 44032: 0x8CC5, + 46723 - 44032: 0x8CC6, + 46724 - 44032: 0x8CC7, + 46725 - 44032: 0x8CC8, + 46726 - 44032: 0x8CC9, + 46727 - 44032: 0x8CCA, + 46728 - 44032: 0x8CCB, + 46729 - 44032: 0x8CCC, + 46730 - 44032: 0x8CCD, + 46731 - 44032: 0x8CCE, + 46732 - 44032: 0x8CCF, + 46733 - 44032: 0x8CD0, + 46734 - 44032: 0x8CD1, + 46735 - 44032: 0x8CD2, + 46736 - 44032: 0x8CD3, + 46737 - 44032: 0x8CD4, + 46738 - 44032: 0x8CD5, + 46739 - 44032: 0x8CD6, + 46740 - 44032: 0x8CD7, + 46741 - 44032: 0x8CD8, + 46742 - 44032: 0x8CD9, + 46743 - 44032: 0x8CDA, + 46744 - 44032: 0x8CDB, + 46745 - 44032: 0x8CDC, + 46746 - 44032: 0x8CDD, + 46747 - 44032: 0x8CDE, + 46748 - 44032: 0xB6D1, + 46749 - 44032: 0xB6D2, + 46750 - 44032: 0x8CDF, + 46751 - 44032: 0x8CE0, + 46752 - 44032: 0xB6D3, + 46753 - 44032: 0x8CE1, + 46754 - 44032: 0x8CE2, + 46755 - 44032: 0x8CE3, + 46756 - 44032: 0xB6D4, + 46757 - 44032: 0x8CE4, + 46758 - 44032: 0x8CE5, + 46759 - 44032: 0x8CE6, + 46760 - 44032: 0x8CE7, + 46761 - 44032: 0x8CE8, + 46762 - 44032: 0x8CE9, + 46763 - 44032: 0xB6D5, + 46764 - 44032: 0xB6D6, + 46765 - 44032: 0x8CEA, + 46766 - 44032: 0x8CEB, + 46767 - 44032: 0x8CEC, + 46768 - 44032: 0x8CED, + 46769 - 44032: 0xB6D7, + 46770 - 44032: 0x8CEE, + 46771 - 44032: 0x8CEF, + 46772 - 44032: 0x8CF0, + 46773 - 44032: 0x8CF1, + 46774 - 44032: 0x8CF2, + 46775 - 44032: 0x8CF3, + 46776 - 44032: 0x8CF4, + 46777 - 44032: 0x8CF5, + 46778 - 44032: 0x8CF6, + 46779 - 44032: 0x8CF7, + 46780 - 44032: 0x8CF8, + 46781 - 44032: 0x8CF9, + 46782 - 44032: 0x8CFA, + 46783 - 44032: 0x8CFB, + 46784 - 44032: 0x8CFC, + 46785 - 44032: 0x8CFD, + 46786 - 44032: 0x8CFE, + 46787 - 44032: 0x8D41, + 46788 - 44032: 0x8D42, + 46789 - 44032: 0x8D43, + 46790 - 44032: 0x8D44, + 46791 - 44032: 0x8D45, + 46792 - 44032: 0x8D46, + 46793 - 44032: 0x8D47, + 46794 - 44032: 0x8D48, + 46795 - 44032: 0x8D49, + 46796 - 44032: 0x8D4A, + 46797 - 44032: 0x8D4B, + 46798 - 44032: 0x8D4C, + 46799 - 44032: 0x8D4D, + 46800 - 44032: 0x8D4E, + 46801 - 44032: 0x8D4F, + 46802 - 44032: 0x8D50, + 46803 - 44032: 0x8D51, + 46804 - 44032: 0xB6D8, + 46805 - 44032: 0x8D52, + 46806 - 44032: 0x8D53, + 46807 - 44032: 0x8D54, + 46808 - 44032: 0x8D55, + 46809 - 44032: 0x8D56, + 46810 - 44032: 0x8D57, + 46811 - 44032: 0x8D58, + 46812 - 44032: 0x8D59, + 46813 - 44032: 0x8D5A, + 46814 - 44032: 0x8D61, + 46815 - 44032: 0x8D62, + 46816 - 44032: 0x8D63, + 46817 - 44032: 0x8D64, + 46818 - 44032: 0x8D65, + 46819 - 44032: 0x8D66, + 46820 - 44032: 0x8D67, + 46821 - 44032: 0x8D68, + 46822 - 44032: 0x8D69, + 46823 - 44032: 0x8D6A, + 46824 - 44032: 0x8D6B, + 46825 - 44032: 0x8D6C, + 46826 - 44032: 0x8D6D, + 46827 - 44032: 0x8D6E, + 46828 - 44032: 0x8D6F, + 46829 - 44032: 0x8D70, + 46830 - 44032: 0x8D71, + 46831 - 44032: 0x8D72, + 46832 - 44032: 0xB6D9, + 46833 - 44032: 0x8D73, + 46834 - 44032: 0x8D74, + 46835 - 44032: 0x8D75, + 46836 - 44032: 0xB6DA, + 46837 - 44032: 0x8D76, + 46838 - 44032: 0x8D77, + 46839 - 44032: 0x8D78, + 46840 - 44032: 0xB6DB, + 46841 - 44032: 0x8D79, + 46842 - 44032: 0x8D7A, + 46843 - 44032: 0x8D81, + 46844 - 44032: 0x8D82, + 46845 - 44032: 0x8D83, + 46846 - 44032: 0x8D84, + 46847 - 44032: 0x8D85, + 46848 - 44032: 0xB6DC, + 46849 - 44032: 0xB6DD, + 46850 - 44032: 0x8D86, + 46851 - 44032: 0x8D87, + 46852 - 44032: 0x8D88, + 46853 - 44032: 0xB6DE, + 46854 - 44032: 0x8D89, + 46855 - 44032: 0x8D8A, + 46856 - 44032: 0x8D8B, + 46857 - 44032: 0x8D8C, + 46858 - 44032: 0x8D8D, + 46859 - 44032: 0x8D8E, + 46860 - 44032: 0x8D8F, + 46861 - 44032: 0x8D90, + 46862 - 44032: 0x8D91, + 46863 - 44032: 0x8D92, + 46864 - 44032: 0x8D93, + 46865 - 44032: 0x8D94, + 46866 - 44032: 0x8D95, + 46867 - 44032: 0x8D96, + 46868 - 44032: 0x8D97, + 46869 - 44032: 0x8D98, + 46870 - 44032: 0x8D99, + 46871 - 44032: 0x8D9A, + 46872 - 44032: 0x8D9B, + 46873 - 44032: 0x8D9C, + 46874 - 44032: 0x8D9D, + 46875 - 44032: 0x8D9E, + 46876 - 44032: 0x8D9F, + 46877 - 44032: 0x8DA0, + 46878 - 44032: 0x8DA1, + 46879 - 44032: 0x8DA2, + 46880 - 44032: 0x8DA3, + 46881 - 44032: 0x8DA4, + 46882 - 44032: 0x8DA5, + 46883 - 44032: 0x8DA6, + 46884 - 44032: 0x8DA7, + 46885 - 44032: 0x8DA8, + 46886 - 44032: 0x8DA9, + 46887 - 44032: 0x8DAA, + 46888 - 44032: 0xB6DF, + 46889 - 44032: 0xB6E0, + 46890 - 44032: 0x8DAB, + 46891 - 44032: 0x8DAC, + 46892 - 44032: 0xB6E1, + 46893 - 44032: 0x8DAD, + 46894 - 44032: 0x8DAE, + 46895 - 44032: 0xB6E2, + 46896 - 44032: 0xB6E3, + 46897 - 44032: 0x8DAF, + 46898 - 44032: 0x8DB0, + 46899 - 44032: 0x8DB1, + 46900 - 44032: 0x8DB2, + 46901 - 44032: 0x8DB3, + 46902 - 44032: 0x8DB4, + 46903 - 44032: 0x8DB5, + 46904 - 44032: 0xB6E4, + 46905 - 44032: 0xB6E5, + 46906 - 44032: 0x8DB6, + 46907 - 44032: 0xB6E6, + 46908 - 44032: 0x8DB7, + 46909 - 44032: 0x8DB8, + 46910 - 44032: 0x8DB9, + 46911 - 44032: 0x8DBA, + 46912 - 44032: 0x8DBB, + 46913 - 44032: 0x8DBC, + 46914 - 44032: 0x8DBD, + 46915 - 44032: 0x8DBE, + 46916 - 44032: 0xB6E7, + 46917 - 44032: 0x8DBF, + 46918 - 44032: 0x8DC0, + 46919 - 44032: 0x8DC1, + 46920 - 44032: 0xB6E8, + 46921 - 44032: 0x8DC2, + 46922 - 44032: 0x8DC3, + 46923 - 44032: 0x8DC4, + 46924 - 44032: 0xB6E9, + 46925 - 44032: 0x8DC5, + 46926 - 44032: 0x8DC6, + 46927 - 44032: 0x8DC7, + 46928 - 44032: 0x8DC8, + 46929 - 44032: 0x8DC9, + 46930 - 44032: 0x8DCA, + 46931 - 44032: 0x8DCB, + 46932 - 44032: 0xB6EA, + 46933 - 44032: 0xB6EB, + 46934 - 44032: 0x8DCC, + 46935 - 44032: 0x8DCD, + 46936 - 44032: 0x8DCE, + 46937 - 44032: 0x8DCF, + 46938 - 44032: 0x8DD0, + 46939 - 44032: 0x8DD1, + 46940 - 44032: 0x8DD2, + 46941 - 44032: 0x8DD3, + 46942 - 44032: 0x8DD4, + 46943 - 44032: 0x8DD5, + 46944 - 44032: 0xB6EC, + 46945 - 44032: 0x8DD6, + 46946 - 44032: 0x8DD7, + 46947 - 44032: 0x8DD8, + 46948 - 44032: 0xB6ED, + 46949 - 44032: 0x8DD9, + 46950 - 44032: 0x8DDA, + 46951 - 44032: 0x8DDB, + 46952 - 44032: 0xB6EE, + 46953 - 44032: 0x8DDC, + 46954 - 44032: 0x8DDD, + 46955 - 44032: 0x8DDE, + 46956 - 44032: 0x8DDF, + 46957 - 44032: 0x8DE0, + 46958 - 44032: 0x8DE1, + 46959 - 44032: 0x8DE2, + 46960 - 44032: 0xB6EF, + 46961 - 44032: 0xB6F0, + 46962 - 44032: 0x8DE3, + 46963 - 44032: 0xB6F1, + 46964 - 44032: 0x8DE4, + 46965 - 44032: 0xB6F2, + 46966 - 44032: 0x8DE5, + 46967 - 44032: 0x8DE6, + 46968 - 44032: 0x8DE7, + 46969 - 44032: 0x8DE8, + 46970 - 44032: 0x8DE9, + 46971 - 44032: 0x8DEA, + 46972 - 44032: 0xB6F3, + 46973 - 44032: 0xB6F4, + 46974 - 44032: 0x8DEB, + 46975 - 44032: 0x8DEC, + 46976 - 44032: 0xB6F5, + 46977 - 44032: 0x8DED, + 46978 - 44032: 0x8DEE, + 46979 - 44032: 0x8DEF, + 46980 - 44032: 0xB6F6, + 46981 - 44032: 0x8DF0, + 46982 - 44032: 0x8DF1, + 46983 - 44032: 0x8DF2, + 46984 - 44032: 0x8DF3, + 46985 - 44032: 0x8DF4, + 46986 - 44032: 0x8DF5, + 46987 - 44032: 0x8DF6, + 46988 - 44032: 0xB6F7, + 46989 - 44032: 0xB6F8, + 46990 - 44032: 0x8DF7, + 46991 - 44032: 0xB6F9, + 46992 - 44032: 0xB6FA, + 46993 - 44032: 0xB6FB, + 46994 - 44032: 0xB6FC, + 46995 - 44032: 0x8DF8, + 46996 - 44032: 0x8DF9, + 46997 - 44032: 0x8DFA, + 46998 - 44032: 0xB6FD, + 46999 - 44032: 0xB6FE, + 47000 - 44032: 0xB7A1, + 47001 - 44032: 0xB7A2, + 47002 - 44032: 0x8DFB, + 47003 - 44032: 0x8DFC, + 47004 - 44032: 0xB7A3, + 47005 - 44032: 0x8DFD, + 47006 - 44032: 0x8DFE, + 47007 - 44032: 0x8E41, + 47008 - 44032: 0xB7A4, + 47009 - 44032: 0x8E42, + 47010 - 44032: 0x8E43, + 47011 - 44032: 0x8E44, + 47012 - 44032: 0x8E45, + 47013 - 44032: 0x8E46, + 47014 - 44032: 0x8E47, + 47015 - 44032: 0x8E48, + 47016 - 44032: 0xB7A5, + 47017 - 44032: 0xB7A6, + 47018 - 44032: 0x8E49, + 47019 - 44032: 0xB7A7, + 47020 - 44032: 0xB7A8, + 47021 - 44032: 0xB7A9, + 47022 - 44032: 0x8E4A, + 47023 - 44032: 0x8E4B, + 47024 - 44032: 0x8E4C, + 47025 - 44032: 0x8E4D, + 47026 - 44032: 0x8E4E, + 47027 - 44032: 0x8E4F, + 47028 - 44032: 0xB7AA, + 47029 - 44032: 0xB7AB, + 47030 - 44032: 0x8E50, + 47031 - 44032: 0x8E51, + 47032 - 44032: 0xB7AC, + 47033 - 44032: 0x8E52, + 47034 - 44032: 0x8E53, + 47035 - 44032: 0x8E54, + 47036 - 44032: 0x8E55, + 47037 - 44032: 0x8E56, + 47038 - 44032: 0x8E57, + 47039 - 44032: 0x8E58, + 47040 - 44032: 0x8E59, + 47041 - 44032: 0x8E5A, + 47042 - 44032: 0x8E61, + 47043 - 44032: 0x8E62, + 47044 - 44032: 0x8E63, + 47045 - 44032: 0x8E64, + 47046 - 44032: 0x8E65, + 47047 - 44032: 0xB7AD, + 47048 - 44032: 0x8E66, + 47049 - 44032: 0xB7AE, + 47050 - 44032: 0x8E67, + 47051 - 44032: 0x8E68, + 47052 - 44032: 0x8E69, + 47053 - 44032: 0x8E6A, + 47054 - 44032: 0x8E6B, + 47055 - 44032: 0x8E6C, + 47056 - 44032: 0x8E6D, + 47057 - 44032: 0x8E6E, + 47058 - 44032: 0x8E6F, + 47059 - 44032: 0x8E70, + 47060 - 44032: 0x8E71, + 47061 - 44032: 0x8E72, + 47062 - 44032: 0x8E73, + 47063 - 44032: 0x8E74, + 47064 - 44032: 0x8E75, + 47065 - 44032: 0x8E76, + 47066 - 44032: 0x8E77, + 47067 - 44032: 0x8E78, + 47068 - 44032: 0x8E79, + 47069 - 44032: 0x8E7A, + 47070 - 44032: 0x8E81, + 47071 - 44032: 0x8E82, + 47072 - 44032: 0x8E83, + 47073 - 44032: 0x8E84, + 47074 - 44032: 0x8E85, + 47075 - 44032: 0x8E86, + 47076 - 44032: 0x8E87, + 47077 - 44032: 0x8E88, + 47078 - 44032: 0x8E89, + 47079 - 44032: 0x8E8A, + 47080 - 44032: 0x8E8B, + 47081 - 44032: 0x8E8C, + 47082 - 44032: 0x8E8D, + 47083 - 44032: 0x8E8E, + 47084 - 44032: 0xB7AF, + 47085 - 44032: 0xB7B0, + 47086 - 44032: 0x8E8F, + 47087 - 44032: 0x8E90, + 47088 - 44032: 0xB7B1, + 47089 - 44032: 0x8E91, + 47090 - 44032: 0x8E92, + 47091 - 44032: 0x8E93, + 47092 - 44032: 0xB7B2, + 47093 - 44032: 0x8E94, + 47094 - 44032: 0x8E95, + 47095 - 44032: 0x8E96, + 47096 - 44032: 0x8E97, + 47097 - 44032: 0x8E98, + 47098 - 44032: 0x8E99, + 47099 - 44032: 0x8E9A, + 47100 - 44032: 0xB7B3, + 47101 - 44032: 0xB7B4, + 47102 - 44032: 0x8E9B, + 47103 - 44032: 0xB7B5, + 47104 - 44032: 0xB7B6, + 47105 - 44032: 0xB7B7, + 47106 - 44032: 0x8E9C, + 47107 - 44032: 0x8E9D, + 47108 - 44032: 0x8E9E, + 47109 - 44032: 0x8E9F, + 47110 - 44032: 0x8EA0, + 47111 - 44032: 0xB7B8, + 47112 - 44032: 0xB7B9, + 47113 - 44032: 0xB7BA, + 47114 - 44032: 0x8EA1, + 47115 - 44032: 0x8EA2, + 47116 - 44032: 0xB7BB, + 47117 - 44032: 0x8EA3, + 47118 - 44032: 0x8EA4, + 47119 - 44032: 0x8EA5, + 47120 - 44032: 0xB7BC, + 47121 - 44032: 0x8EA6, + 47122 - 44032: 0x8EA7, + 47123 - 44032: 0x8EA8, + 47124 - 44032: 0x8EA9, + 47125 - 44032: 0x8EAA, + 47126 - 44032: 0x8EAB, + 47127 - 44032: 0x8EAC, + 47128 - 44032: 0xB7BD, + 47129 - 44032: 0xB7BE, + 47130 - 44032: 0x8EAD, + 47131 - 44032: 0xB7BF, + 47132 - 44032: 0x8EAE, + 47133 - 44032: 0xB7C0, + 47134 - 44032: 0x8EAF, + 47135 - 44032: 0x8EB0, + 47136 - 44032: 0x8EB1, + 47137 - 44032: 0x8EB2, + 47138 - 44032: 0x8EB3, + 47139 - 44032: 0x8EB4, + 47140 - 44032: 0xB7C1, + 47141 - 44032: 0xB7C2, + 47142 - 44032: 0x8EB5, + 47143 - 44032: 0x8EB6, + 47144 - 44032: 0xB7C3, + 47145 - 44032: 0x8EB7, + 47146 - 44032: 0x8EB8, + 47147 - 44032: 0x8EB9, + 47148 - 44032: 0xB7C4, + 47149 - 44032: 0x8EBA, + 47150 - 44032: 0x8EBB, + 47151 - 44032: 0x8EBC, + 47152 - 44032: 0x8EBD, + 47153 - 44032: 0x8EBE, + 47154 - 44032: 0x8EBF, + 47155 - 44032: 0x8EC0, + 47156 - 44032: 0xB7C5, + 47157 - 44032: 0xB7C6, + 47158 - 44032: 0x8EC1, + 47159 - 44032: 0xB7C7, + 47160 - 44032: 0xB7C8, + 47161 - 44032: 0xB7C9, + 47162 - 44032: 0x8EC2, + 47163 - 44032: 0x8EC3, + 47164 - 44032: 0x8EC4, + 47165 - 44032: 0x8EC5, + 47166 - 44032: 0x8EC6, + 47167 - 44032: 0x8EC7, + 47168 - 44032: 0xB7CA, + 47169 - 44032: 0x8EC8, + 47170 - 44032: 0x8EC9, + 47171 - 44032: 0x8ECA, + 47172 - 44032: 0xB7CB, + 47173 - 44032: 0x8ECB, + 47174 - 44032: 0x8ECC, + 47175 - 44032: 0x8ECD, + 47176 - 44032: 0x8ECE, + 47177 - 44032: 0x8ECF, + 47178 - 44032: 0x8ED0, + 47179 - 44032: 0x8ED1, + 47180 - 44032: 0x8ED2, + 47181 - 44032: 0x8ED3, + 47182 - 44032: 0x8ED4, + 47183 - 44032: 0x8ED5, + 47184 - 44032: 0x8ED6, + 47185 - 44032: 0xB7CC, + 47186 - 44032: 0x8ED7, + 47187 - 44032: 0xB7CD, + 47188 - 44032: 0x8ED8, + 47189 - 44032: 0x8ED9, + 47190 - 44032: 0x8EDA, + 47191 - 44032: 0x8EDB, + 47192 - 44032: 0x8EDC, + 47193 - 44032: 0x8EDD, + 47194 - 44032: 0x8EDE, + 47195 - 44032: 0x8EDF, + 47196 - 44032: 0xB7CE, + 47197 - 44032: 0xB7CF, + 47198 - 44032: 0x8EE0, + 47199 - 44032: 0x8EE1, + 47200 - 44032: 0xB7D0, + 47201 - 44032: 0x8EE2, + 47202 - 44032: 0x8EE3, + 47203 - 44032: 0x8EE4, + 47204 - 44032: 0xB7D1, + 47205 - 44032: 0x8EE5, + 47206 - 44032: 0x8EE6, + 47207 - 44032: 0x8EE7, + 47208 - 44032: 0x8EE8, + 47209 - 44032: 0x8EE9, + 47210 - 44032: 0x8EEA, + 47211 - 44032: 0x8EEB, + 47212 - 44032: 0xB7D2, + 47213 - 44032: 0xB7D3, + 47214 - 44032: 0x8EEC, + 47215 - 44032: 0xB7D4, + 47216 - 44032: 0x8EED, + 47217 - 44032: 0xB7D5, + 47218 - 44032: 0x8EEE, + 47219 - 44032: 0x8EEF, + 47220 - 44032: 0x8EF0, + 47221 - 44032: 0x8EF1, + 47222 - 44032: 0x8EF2, + 47223 - 44032: 0x8EF3, + 47224 - 44032: 0xB7D6, + 47225 - 44032: 0x8EF4, + 47226 - 44032: 0x8EF5, + 47227 - 44032: 0x8EF6, + 47228 - 44032: 0xB7D7, + 47229 - 44032: 0x8EF7, + 47230 - 44032: 0x8EF8, + 47231 - 44032: 0x8EF9, + 47232 - 44032: 0x8EFA, + 47233 - 44032: 0x8EFB, + 47234 - 44032: 0x8EFC, + 47235 - 44032: 0x8EFD, + 47236 - 44032: 0x8EFE, + 47237 - 44032: 0x8F41, + 47238 - 44032: 0x8F42, + 47239 - 44032: 0x8F43, + 47240 - 44032: 0x8F44, + 47241 - 44032: 0x8F45, + 47242 - 44032: 0x8F46, + 47243 - 44032: 0x8F47, + 47244 - 44032: 0x8F48, + 47245 - 44032: 0xB7D8, + 47246 - 44032: 0x8F49, + 47247 - 44032: 0x8F4A, + 47248 - 44032: 0x8F4B, + 47249 - 44032: 0x8F4C, + 47250 - 44032: 0x8F4D, + 47251 - 44032: 0x8F4E, + 47252 - 44032: 0x8F4F, + 47253 - 44032: 0x8F50, + 47254 - 44032: 0x8F51, + 47255 - 44032: 0x8F52, + 47256 - 44032: 0x8F53, + 47257 - 44032: 0x8F54, + 47258 - 44032: 0x8F55, + 47259 - 44032: 0x8F56, + 47260 - 44032: 0x8F57, + 47261 - 44032: 0x8F58, + 47262 - 44032: 0x8F59, + 47263 - 44032: 0x8F5A, + 47264 - 44032: 0x8F61, + 47265 - 44032: 0x8F62, + 47266 - 44032: 0x8F63, + 47267 - 44032: 0x8F64, + 47268 - 44032: 0x8F65, + 47269 - 44032: 0x8F66, + 47270 - 44032: 0x8F67, + 47271 - 44032: 0x8F68, + 47272 - 44032: 0xB7D9, + 47273 - 44032: 0x8F69, + 47274 - 44032: 0x8F6A, + 47275 - 44032: 0x8F6B, + 47276 - 44032: 0x8F6C, + 47277 - 44032: 0x8F6D, + 47278 - 44032: 0x8F6E, + 47279 - 44032: 0x8F6F, + 47280 - 44032: 0xB7DA, + 47281 - 44032: 0x8F70, + 47282 - 44032: 0x8F71, + 47283 - 44032: 0x8F72, + 47284 - 44032: 0xB7DB, + 47285 - 44032: 0x8F73, + 47286 - 44032: 0x8F74, + 47287 - 44032: 0x8F75, + 47288 - 44032: 0xB7DC, + 47289 - 44032: 0x8F76, + 47290 - 44032: 0x8F77, + 47291 - 44032: 0x8F78, + 47292 - 44032: 0x8F79, + 47293 - 44032: 0x8F7A, + 47294 - 44032: 0x8F81, + 47295 - 44032: 0x8F82, + 47296 - 44032: 0xB7DD, + 47297 - 44032: 0xB7DE, + 47298 - 44032: 0x8F83, + 47299 - 44032: 0xB7DF, + 47300 - 44032: 0x8F84, + 47301 - 44032: 0xB7E0, + 47302 - 44032: 0x8F85, + 47303 - 44032: 0x8F86, + 47304 - 44032: 0x8F87, + 47305 - 44032: 0x8F88, + 47306 - 44032: 0x8F89, + 47307 - 44032: 0x8F8A, + 47308 - 44032: 0xB7E1, + 47309 - 44032: 0x8F8B, + 47310 - 44032: 0x8F8C, + 47311 - 44032: 0x8F8D, + 47312 - 44032: 0xB7E2, + 47313 - 44032: 0x8F8E, + 47314 - 44032: 0x8F8F, + 47315 - 44032: 0x8F90, + 47316 - 44032: 0xB7E3, + 47317 - 44032: 0x8F91, + 47318 - 44032: 0x8F92, + 47319 - 44032: 0x8F93, + 47320 - 44032: 0x8F94, + 47321 - 44032: 0x8F95, + 47322 - 44032: 0x8F96, + 47323 - 44032: 0x8F97, + 47324 - 44032: 0x8F98, + 47325 - 44032: 0xB7E4, + 47326 - 44032: 0x8F99, + 47327 - 44032: 0xB7E5, + 47328 - 44032: 0x8F9A, + 47329 - 44032: 0xB7E6, + 47330 - 44032: 0x8F9B, + 47331 - 44032: 0x8F9C, + 47332 - 44032: 0x8F9D, + 47333 - 44032: 0x8F9E, + 47334 - 44032: 0x8F9F, + 47335 - 44032: 0x8FA0, + 47336 - 44032: 0xB7E7, + 47337 - 44032: 0xB7E8, + 47338 - 44032: 0x8FA1, + 47339 - 44032: 0x8FA2, + 47340 - 44032: 0xB7E9, + 47341 - 44032: 0x8FA3, + 47342 - 44032: 0x8FA4, + 47343 - 44032: 0x8FA5, + 47344 - 44032: 0xB7EA, + 47345 - 44032: 0x8FA6, + 47346 - 44032: 0x8FA7, + 47347 - 44032: 0x8FA8, + 47348 - 44032: 0x8FA9, + 47349 - 44032: 0x8FAA, + 47350 - 44032: 0x8FAB, + 47351 - 44032: 0x8FAC, + 47352 - 44032: 0xB7EB, + 47353 - 44032: 0xB7EC, + 47354 - 44032: 0x8FAD, + 47355 - 44032: 0xB7ED, + 47356 - 44032: 0x8FAE, + 47357 - 44032: 0xB7EE, + 47358 - 44032: 0x8FAF, + 47359 - 44032: 0x8FB0, + 47360 - 44032: 0x8FB1, + 47361 - 44032: 0x8FB2, + 47362 - 44032: 0x8FB3, + 47363 - 44032: 0x8FB4, + 47364 - 44032: 0xB7EF, + 47365 - 44032: 0x8FB5, + 47366 - 44032: 0x8FB6, + 47367 - 44032: 0x8FB7, + 47368 - 44032: 0x8FB8, + 47369 - 44032: 0x8FB9, + 47370 - 44032: 0x8FBA, + 47371 - 44032: 0x8FBB, + 47372 - 44032: 0x8FBC, + 47373 - 44032: 0x8FBD, + 47374 - 44032: 0x8FBE, + 47375 - 44032: 0x8FBF, + 47376 - 44032: 0x8FC0, + 47377 - 44032: 0x8FC1, + 47378 - 44032: 0x8FC2, + 47379 - 44032: 0x8FC3, + 47380 - 44032: 0x8FC4, + 47381 - 44032: 0x8FC5, + 47382 - 44032: 0x8FC6, + 47383 - 44032: 0x8FC7, + 47384 - 44032: 0xB7F0, + 47385 - 44032: 0x8FC8, + 47386 - 44032: 0x8FC9, + 47387 - 44032: 0x8FCA, + 47388 - 44032: 0x8FCB, + 47389 - 44032: 0x8FCC, + 47390 - 44032: 0x8FCD, + 47391 - 44032: 0x8FCE, + 47392 - 44032: 0xB7F1, + 47393 - 44032: 0x8FCF, + 47394 - 44032: 0x8FD0, + 47395 - 44032: 0x8FD1, + 47396 - 44032: 0x8FD2, + 47397 - 44032: 0x8FD3, + 47398 - 44032: 0x8FD4, + 47399 - 44032: 0x8FD5, + 47400 - 44032: 0x8FD6, + 47401 - 44032: 0x8FD7, + 47402 - 44032: 0x8FD8, + 47403 - 44032: 0x8FD9, + 47404 - 44032: 0x8FDA, + 47405 - 44032: 0x8FDB, + 47406 - 44032: 0x8FDC, + 47407 - 44032: 0x8FDD, + 47408 - 44032: 0x8FDE, + 47409 - 44032: 0x8FDF, + 47410 - 44032: 0x8FE0, + 47411 - 44032: 0x8FE1, + 47412 - 44032: 0x8FE2, + 47413 - 44032: 0x8FE3, + 47414 - 44032: 0x8FE4, + 47415 - 44032: 0x8FE5, + 47416 - 44032: 0x8FE6, + 47417 - 44032: 0x8FE7, + 47418 - 44032: 0x8FE8, + 47419 - 44032: 0x8FE9, + 47420 - 44032: 0xB7F2, + 47421 - 44032: 0xB7F3, + 47422 - 44032: 0x8FEA, + 47423 - 44032: 0x8FEB, + 47424 - 44032: 0xB7F4, + 47425 - 44032: 0x8FEC, + 47426 - 44032: 0x8FED, + 47427 - 44032: 0x8FEE, + 47428 - 44032: 0xB7F5, + 47429 - 44032: 0x8FEF, + 47430 - 44032: 0x8FF0, + 47431 - 44032: 0x8FF1, + 47432 - 44032: 0x8FF2, + 47433 - 44032: 0x8FF3, + 47434 - 44032: 0x8FF4, + 47435 - 44032: 0x8FF5, + 47436 - 44032: 0xB7F6, + 47437 - 44032: 0x8FF6, + 47438 - 44032: 0x8FF7, + 47439 - 44032: 0xB7F7, + 47440 - 44032: 0x8FF8, + 47441 - 44032: 0xB7F8, + 47442 - 44032: 0x8FF9, + 47443 - 44032: 0x8FFA, + 47444 - 44032: 0x8FFB, + 47445 - 44032: 0x8FFC, + 47446 - 44032: 0x8FFD, + 47447 - 44032: 0x8FFE, + 47448 - 44032: 0xB7F9, + 47449 - 44032: 0xB7FA, + 47450 - 44032: 0x9041, + 47451 - 44032: 0x9042, + 47452 - 44032: 0xB7FB, + 47453 - 44032: 0x9043, + 47454 - 44032: 0x9044, + 47455 - 44032: 0x9045, + 47456 - 44032: 0xB7FC, + 47457 - 44032: 0x9046, + 47458 - 44032: 0x9047, + 47459 - 44032: 0x9048, + 47460 - 44032: 0x9049, + 47461 - 44032: 0x904A, + 47462 - 44032: 0x904B, + 47463 - 44032: 0x904C, + 47464 - 44032: 0xB7FD, + 47465 - 44032: 0xB7FE, + 47466 - 44032: 0x904D, + 47467 - 44032: 0xB8A1, + 47468 - 44032: 0x904E, + 47469 - 44032: 0xB8A2, + 47470 - 44032: 0x904F, + 47471 - 44032: 0x9050, + 47472 - 44032: 0x9051, + 47473 - 44032: 0x9052, + 47474 - 44032: 0x9053, + 47475 - 44032: 0x9054, + 47476 - 44032: 0xB8A3, + 47477 - 44032: 0xB8A4, + 47478 - 44032: 0x9055, + 47479 - 44032: 0x9056, + 47480 - 44032: 0xB8A5, + 47481 - 44032: 0x9057, + 47482 - 44032: 0x9058, + 47483 - 44032: 0x9059, + 47484 - 44032: 0xB8A6, + 47485 - 44032: 0x905A, + 47486 - 44032: 0x9061, + 47487 - 44032: 0x9062, + 47488 - 44032: 0x9063, + 47489 - 44032: 0x9064, + 47490 - 44032: 0x9065, + 47491 - 44032: 0x9066, + 47492 - 44032: 0xB8A7, + 47493 - 44032: 0xB8A8, + 47494 - 44032: 0x9067, + 47495 - 44032: 0xB8A9, + 47496 - 44032: 0x9068, + 47497 - 44032: 0xB8AA, + 47498 - 44032: 0xB8AB, + 47499 - 44032: 0x9069, + 47500 - 44032: 0x906A, + 47501 - 44032: 0xB8AC, + 47502 - 44032: 0xB8AD, + 47503 - 44032: 0x906B, + 47504 - 44032: 0x906C, + 47505 - 44032: 0x906D, + 47506 - 44032: 0x906E, + 47507 - 44032: 0x906F, + 47508 - 44032: 0x9070, + 47509 - 44032: 0x9071, + 47510 - 44032: 0x9072, + 47511 - 44032: 0x9073, + 47512 - 44032: 0x9074, + 47513 - 44032: 0x9075, + 47514 - 44032: 0x9076, + 47515 - 44032: 0x9077, + 47516 - 44032: 0x9078, + 47517 - 44032: 0x9079, + 47518 - 44032: 0x907A, + 47519 - 44032: 0x9081, + 47520 - 44032: 0x9082, + 47521 - 44032: 0x9083, + 47522 - 44032: 0x9084, + 47523 - 44032: 0x9085, + 47524 - 44032: 0x9086, + 47525 - 44032: 0x9087, + 47526 - 44032: 0x9088, + 47527 - 44032: 0x9089, + 47528 - 44032: 0x908A, + 47529 - 44032: 0x908B, + 47530 - 44032: 0x908C, + 47531 - 44032: 0x908D, + 47532 - 44032: 0xB8AE, + 47533 - 44032: 0xB8AF, + 47534 - 44032: 0x908E, + 47535 - 44032: 0x908F, + 47536 - 44032: 0xB8B0, + 47537 - 44032: 0x9090, + 47538 - 44032: 0x9091, + 47539 - 44032: 0x9092, + 47540 - 44032: 0xB8B1, + 47541 - 44032: 0x9093, + 47542 - 44032: 0x9094, + 47543 - 44032: 0x9095, + 47544 - 44032: 0x9096, + 47545 - 44032: 0x9097, + 47546 - 44032: 0x9098, + 47547 - 44032: 0x9099, + 47548 - 44032: 0xB8B2, + 47549 - 44032: 0xB8B3, + 47550 - 44032: 0x909A, + 47551 - 44032: 0xB8B4, + 47552 - 44032: 0x909B, + 47553 - 44032: 0xB8B5, + 47554 - 44032: 0x909C, + 47555 - 44032: 0x909D, + 47556 - 44032: 0x909E, + 47557 - 44032: 0x909F, + 47558 - 44032: 0x90A0, + 47559 - 44032: 0x90A1, + 47560 - 44032: 0xB8B6, + 47561 - 44032: 0xB8B7, + 47562 - 44032: 0x90A2, + 47563 - 44032: 0x90A3, + 47564 - 44032: 0xB8B8, + 47565 - 44032: 0x90A4, + 47566 - 44032: 0xB8B9, + 47567 - 44032: 0xB8BA, + 47568 - 44032: 0xB8BB, + 47569 - 44032: 0xB8BC, + 47570 - 44032: 0xB8BD, + 47571 - 44032: 0x90A5, + 47572 - 44032: 0x90A6, + 47573 - 44032: 0x90A7, + 47574 - 44032: 0x90A8, + 47575 - 44032: 0x90A9, + 47576 - 44032: 0xB8BE, + 47577 - 44032: 0xB8BF, + 47578 - 44032: 0x90AA, + 47579 - 44032: 0xB8C0, + 47580 - 44032: 0x90AB, + 47581 - 44032: 0xB8C1, + 47582 - 44032: 0xB8C2, + 47583 - 44032: 0x90AC, + 47584 - 44032: 0x90AD, + 47585 - 44032: 0xB8C3, + 47586 - 44032: 0x90AE, + 47587 - 44032: 0xB8C4, + 47588 - 44032: 0xB8C5, + 47589 - 44032: 0xB8C6, + 47590 - 44032: 0x90AF, + 47591 - 44032: 0x90B0, + 47592 - 44032: 0xB8C7, + 47593 - 44032: 0x90B1, + 47594 - 44032: 0x90B2, + 47595 - 44032: 0x90B3, + 47596 - 44032: 0xB8C8, + 47597 - 44032: 0x90B4, + 47598 - 44032: 0x90B5, + 47599 - 44032: 0x90B6, + 47600 - 44032: 0x90B7, + 47601 - 44032: 0x90B8, + 47602 - 44032: 0x90B9, + 47603 - 44032: 0x90BA, + 47604 - 44032: 0xB8C9, + 47605 - 44032: 0xB8CA, + 47606 - 44032: 0x90BB, + 47607 - 44032: 0xB8CB, + 47608 - 44032: 0xB8CC, + 47609 - 44032: 0xB8CD, + 47610 - 44032: 0xB8CE, + 47611 - 44032: 0x90BC, + 47612 - 44032: 0x90BD, + 47613 - 44032: 0x90BE, + 47614 - 44032: 0x90BF, + 47615 - 44032: 0x90C0, + 47616 - 44032: 0xB8CF, + 47617 - 44032: 0xB8D0, + 47618 - 44032: 0x90C1, + 47619 - 44032: 0x90C2, + 47620 - 44032: 0x90C3, + 47621 - 44032: 0x90C4, + 47622 - 44032: 0x90C5, + 47623 - 44032: 0x90C6, + 47624 - 44032: 0xB8D1, + 47625 - 44032: 0x90C7, + 47626 - 44032: 0x90C8, + 47627 - 44032: 0x90C9, + 47628 - 44032: 0x90CA, + 47629 - 44032: 0x90CB, + 47630 - 44032: 0x90CC, + 47631 - 44032: 0x90CD, + 47632 - 44032: 0x90CE, + 47633 - 44032: 0x90CF, + 47634 - 44032: 0x90D0, + 47635 - 44032: 0x90D1, + 47636 - 44032: 0x90D2, + 47637 - 44032: 0xB8D2, + 47638 - 44032: 0x90D3, + 47639 - 44032: 0x90D4, + 47640 - 44032: 0x90D5, + 47641 - 44032: 0x90D6, + 47642 - 44032: 0x90D7, + 47643 - 44032: 0x90D8, + 47644 - 44032: 0x90D9, + 47645 - 44032: 0x90DA, + 47646 - 44032: 0x90DB, + 47647 - 44032: 0x90DC, + 47648 - 44032: 0x90DD, + 47649 - 44032: 0x90DE, + 47650 - 44032: 0x90DF, + 47651 - 44032: 0x90E0, + 47652 - 44032: 0x90E1, + 47653 - 44032: 0x90E2, + 47654 - 44032: 0x90E3, + 47655 - 44032: 0x90E4, + 47656 - 44032: 0x90E5, + 47657 - 44032: 0x90E6, + 47658 - 44032: 0x90E7, + 47659 - 44032: 0x90E8, + 47660 - 44032: 0x90E9, + 47661 - 44032: 0x90EA, + 47662 - 44032: 0x90EB, + 47663 - 44032: 0x90EC, + 47664 - 44032: 0x90ED, + 47665 - 44032: 0x90EE, + 47666 - 44032: 0x90EF, + 47667 - 44032: 0x90F0, + 47668 - 44032: 0x90F1, + 47669 - 44032: 0x90F2, + 47670 - 44032: 0x90F3, + 47671 - 44032: 0x90F4, + 47672 - 44032: 0xB8D3, + 47673 - 44032: 0xB8D4, + 47674 - 44032: 0x90F5, + 47675 - 44032: 0x90F6, + 47676 - 44032: 0xB8D5, + 47677 - 44032: 0x90F7, + 47678 - 44032: 0x90F8, + 47679 - 44032: 0x90F9, + 47680 - 44032: 0xB8D6, + 47681 - 44032: 0x90FA, + 47682 - 44032: 0xB8D7, + 47683 - 44032: 0x90FB, + 47684 - 44032: 0x90FC, + 47685 - 44032: 0x90FD, + 47686 - 44032: 0x90FE, + 47687 - 44032: 0x9141, + 47688 - 44032: 0xB8D8, + 47689 - 44032: 0xB8D9, + 47690 - 44032: 0x9142, + 47691 - 44032: 0xB8DA, + 47692 - 44032: 0x9143, + 47693 - 44032: 0xB8DB, + 47694 - 44032: 0xB8DC, + 47695 - 44032: 0x9144, + 47696 - 44032: 0x9145, + 47697 - 44032: 0x9146, + 47698 - 44032: 0x9147, + 47699 - 44032: 0xB8DD, + 47700 - 44032: 0xB8DE, + 47701 - 44032: 0xB8DF, + 47702 - 44032: 0x9148, + 47703 - 44032: 0x9149, + 47704 - 44032: 0xB8E0, + 47705 - 44032: 0x914A, + 47706 - 44032: 0x914B, + 47707 - 44032: 0x914C, + 47708 - 44032: 0xB8E1, + 47709 - 44032: 0x914D, + 47710 - 44032: 0x914E, + 47711 - 44032: 0x914F, + 47712 - 44032: 0x9150, + 47713 - 44032: 0x9151, + 47714 - 44032: 0x9152, + 47715 - 44032: 0x9153, + 47716 - 44032: 0xB8E2, + 47717 - 44032: 0xB8E3, + 47718 - 44032: 0x9154, + 47719 - 44032: 0xB8E4, + 47720 - 44032: 0xB8E5, + 47721 - 44032: 0xB8E6, + 47722 - 44032: 0x9155, + 47723 - 44032: 0x9156, + 47724 - 44032: 0x9157, + 47725 - 44032: 0x9158, + 47726 - 44032: 0x9159, + 47727 - 44032: 0x915A, + 47728 - 44032: 0xB8E7, + 47729 - 44032: 0xB8E8, + 47730 - 44032: 0x9161, + 47731 - 44032: 0x9162, + 47732 - 44032: 0xB8E9, + 47733 - 44032: 0x9163, + 47734 - 44032: 0x9164, + 47735 - 44032: 0x9165, + 47736 - 44032: 0xB8EA, + 47737 - 44032: 0x9166, + 47738 - 44032: 0x9167, + 47739 - 44032: 0x9168, + 47740 - 44032: 0x9169, + 47741 - 44032: 0x916A, + 47742 - 44032: 0x916B, + 47743 - 44032: 0x916C, + 47744 - 44032: 0x916D, + 47745 - 44032: 0x916E, + 47746 - 44032: 0x916F, + 47747 - 44032: 0xB8EB, + 47748 - 44032: 0xB8EC, + 47749 - 44032: 0xB8ED, + 47750 - 44032: 0x9170, + 47751 - 44032: 0xB8EE, + 47752 - 44032: 0x9171, + 47753 - 44032: 0x9172, + 47754 - 44032: 0x9173, + 47755 - 44032: 0x9174, + 47756 - 44032: 0xB8EF, + 47757 - 44032: 0x9175, + 47758 - 44032: 0x9176, + 47759 - 44032: 0x9177, + 47760 - 44032: 0x9178, + 47761 - 44032: 0x9179, + 47762 - 44032: 0x917A, + 47763 - 44032: 0x9181, + 47764 - 44032: 0x9182, + 47765 - 44032: 0x9183, + 47766 - 44032: 0x9184, + 47767 - 44032: 0x9185, + 47768 - 44032: 0x9186, + 47769 - 44032: 0x9187, + 47770 - 44032: 0x9188, + 47771 - 44032: 0x9189, + 47772 - 44032: 0x918A, + 47773 - 44032: 0x918B, + 47774 - 44032: 0x918C, + 47775 - 44032: 0x918D, + 47776 - 44032: 0x918E, + 47777 - 44032: 0x918F, + 47778 - 44032: 0x9190, + 47779 - 44032: 0x9191, + 47780 - 44032: 0x9192, + 47781 - 44032: 0x9193, + 47782 - 44032: 0x9194, + 47783 - 44032: 0x9195, + 47784 - 44032: 0xB8F0, + 47785 - 44032: 0xB8F1, + 47786 - 44032: 0x9196, + 47787 - 44032: 0xB8F2, + 47788 - 44032: 0xB8F3, + 47789 - 44032: 0x9197, + 47790 - 44032: 0x9198, + 47791 - 44032: 0x9199, + 47792 - 44032: 0xB8F4, + 47793 - 44032: 0x919A, + 47794 - 44032: 0xB8F5, + 47795 - 44032: 0x919B, + 47796 - 44032: 0x919C, + 47797 - 44032: 0x919D, + 47798 - 44032: 0x919E, + 47799 - 44032: 0x919F, + 47800 - 44032: 0xB8F6, + 47801 - 44032: 0xB8F7, + 47802 - 44032: 0x91A0, + 47803 - 44032: 0xB8F8, + 47804 - 44032: 0x91A1, + 47805 - 44032: 0xB8F9, + 47806 - 44032: 0x91A2, + 47807 - 44032: 0x91A3, + 47808 - 44032: 0x91A4, + 47809 - 44032: 0x91A5, + 47810 - 44032: 0x91A6, + 47811 - 44032: 0x91A7, + 47812 - 44032: 0xB8FA, + 47813 - 44032: 0x91A8, + 47814 - 44032: 0x91A9, + 47815 - 44032: 0x91AA, + 47816 - 44032: 0xB8FB, + 47817 - 44032: 0x91AB, + 47818 - 44032: 0x91AC, + 47819 - 44032: 0x91AD, + 47820 - 44032: 0x91AE, + 47821 - 44032: 0x91AF, + 47822 - 44032: 0x91B0, + 47823 - 44032: 0x91B1, + 47824 - 44032: 0x91B2, + 47825 - 44032: 0x91B3, + 47826 - 44032: 0x91B4, + 47827 - 44032: 0x91B5, + 47828 - 44032: 0x91B6, + 47829 - 44032: 0x91B7, + 47830 - 44032: 0x91B8, + 47831 - 44032: 0x91B9, + 47832 - 44032: 0xB8FC, + 47833 - 44032: 0xB8FD, + 47834 - 44032: 0x91BA, + 47835 - 44032: 0x91BB, + 47836 - 44032: 0x91BC, + 47837 - 44032: 0x91BD, + 47838 - 44032: 0x91BE, + 47839 - 44032: 0x91BF, + 47840 - 44032: 0x91C0, + 47841 - 44032: 0x91C1, + 47842 - 44032: 0x91C2, + 47843 - 44032: 0x91C3, + 47844 - 44032: 0x91C4, + 47845 - 44032: 0x91C5, + 47846 - 44032: 0x91C6, + 47847 - 44032: 0x91C7, + 47848 - 44032: 0x91C8, + 47849 - 44032: 0x91C9, + 47850 - 44032: 0x91CA, + 47851 - 44032: 0x91CB, + 47852 - 44032: 0x91CC, + 47853 - 44032: 0x91CD, + 47854 - 44032: 0x91CE, + 47855 - 44032: 0x91CF, + 47856 - 44032: 0x91D0, + 47857 - 44032: 0x91D1, + 47858 - 44032: 0x91D2, + 47859 - 44032: 0x91D3, + 47860 - 44032: 0x91D4, + 47861 - 44032: 0x91D5, + 47862 - 44032: 0x91D6, + 47863 - 44032: 0x91D7, + 47864 - 44032: 0x91D8, + 47865 - 44032: 0x91D9, + 47866 - 44032: 0x91DA, + 47867 - 44032: 0x91DB, + 47868 - 44032: 0xB8FE, + 47869 - 44032: 0x91DC, + 47870 - 44032: 0x91DD, + 47871 - 44032: 0x91DE, + 47872 - 44032: 0xB9A1, + 47873 - 44032: 0x91DF, + 47874 - 44032: 0x91E0, + 47875 - 44032: 0x91E1, + 47876 - 44032: 0xB9A2, + 47877 - 44032: 0x91E2, + 47878 - 44032: 0x91E3, + 47879 - 44032: 0x91E4, + 47880 - 44032: 0x91E5, + 47881 - 44032: 0x91E6, + 47882 - 44032: 0x91E7, + 47883 - 44032: 0x91E8, + 47884 - 44032: 0x91E9, + 47885 - 44032: 0xB9A3, + 47886 - 44032: 0x91EA, + 47887 - 44032: 0xB9A4, + 47888 - 44032: 0x91EB, + 47889 - 44032: 0xB9A5, + 47890 - 44032: 0x91EC, + 47891 - 44032: 0x91ED, + 47892 - 44032: 0x91EE, + 47893 - 44032: 0x91EF, + 47894 - 44032: 0x91F0, + 47895 - 44032: 0x91F1, + 47896 - 44032: 0xB9A6, + 47897 - 44032: 0x91F2, + 47898 - 44032: 0x91F3, + 47899 - 44032: 0x91F4, + 47900 - 44032: 0xB9A7, + 47901 - 44032: 0x91F5, + 47902 - 44032: 0x91F6, + 47903 - 44032: 0x91F7, + 47904 - 44032: 0xB9A8, + 47905 - 44032: 0x91F8, + 47906 - 44032: 0x91F9, + 47907 - 44032: 0x91FA, + 47908 - 44032: 0x91FB, + 47909 - 44032: 0x91FC, + 47910 - 44032: 0x91FD, + 47911 - 44032: 0x91FE, + 47912 - 44032: 0x9241, + 47913 - 44032: 0xB9A9, + 47914 - 44032: 0x9242, + 47915 - 44032: 0xB9AA, + 47916 - 44032: 0x9243, + 47917 - 44032: 0x9244, + 47918 - 44032: 0x9245, + 47919 - 44032: 0x9246, + 47920 - 44032: 0x9247, + 47921 - 44032: 0x9248, + 47922 - 44032: 0x9249, + 47923 - 44032: 0x924A, + 47924 - 44032: 0xB9AB, + 47925 - 44032: 0xB9AC, + 47926 - 44032: 0xB9AD, + 47927 - 44032: 0x924B, + 47928 - 44032: 0xB9AE, + 47929 - 44032: 0x924C, + 47930 - 44032: 0x924D, + 47931 - 44032: 0xB9AF, + 47932 - 44032: 0xB9B0, + 47933 - 44032: 0xB9B1, + 47934 - 44032: 0xB9B2, + 47935 - 44032: 0x924E, + 47936 - 44032: 0x924F, + 47937 - 44032: 0x9250, + 47938 - 44032: 0x9251, + 47939 - 44032: 0x9252, + 47940 - 44032: 0xB9B3, + 47941 - 44032: 0xB9B4, + 47942 - 44032: 0x9253, + 47943 - 44032: 0xB9B5, + 47944 - 44032: 0x9254, + 47945 - 44032: 0xB9B6, + 47946 - 44032: 0x9255, + 47947 - 44032: 0x9256, + 47948 - 44032: 0x9257, + 47949 - 44032: 0xB9B7, + 47950 - 44032: 0x9258, + 47951 - 44032: 0xB9B8, + 47952 - 44032: 0xB9B9, + 47953 - 44032: 0x9259, + 47954 - 44032: 0x925A, + 47955 - 44032: 0x9261, + 47956 - 44032: 0xB9BA, + 47957 - 44032: 0x9262, + 47958 - 44032: 0x9263, + 47959 - 44032: 0x9264, + 47960 - 44032: 0xB9BB, + 47961 - 44032: 0x9265, + 47962 - 44032: 0x9266, + 47963 - 44032: 0x9267, + 47964 - 44032: 0x9268, + 47965 - 44032: 0x9269, + 47966 - 44032: 0x926A, + 47967 - 44032: 0x926B, + 47968 - 44032: 0x926C, + 47969 - 44032: 0xB9BC, + 47970 - 44032: 0x926D, + 47971 - 44032: 0xB9BD, + 47972 - 44032: 0x926E, + 47973 - 44032: 0x926F, + 47974 - 44032: 0x9270, + 47975 - 44032: 0x9271, + 47976 - 44032: 0x9272, + 47977 - 44032: 0x9273, + 47978 - 44032: 0x9274, + 47979 - 44032: 0x9275, + 47980 - 44032: 0xB9BE, + 47981 - 44032: 0x9276, + 47982 - 44032: 0x9277, + 47983 - 44032: 0x9278, + 47984 - 44032: 0x9279, + 47985 - 44032: 0x927A, + 47986 - 44032: 0x9281, + 47987 - 44032: 0x9282, + 47988 - 44032: 0x9283, + 47989 - 44032: 0x9284, + 47990 - 44032: 0x9285, + 47991 - 44032: 0x9286, + 47992 - 44032: 0x9287, + 47993 - 44032: 0x9288, + 47994 - 44032: 0x9289, + 47995 - 44032: 0x928A, + 47996 - 44032: 0x928B, + 47997 - 44032: 0x928C, + 47998 - 44032: 0x928D, + 47999 - 44032: 0x928E, + 48000 - 44032: 0x928F, + 48001 - 44032: 0x9290, + 48002 - 44032: 0x9291, + 48003 - 44032: 0x9292, + 48004 - 44032: 0x9293, + 48005 - 44032: 0x9294, + 48006 - 44032: 0x9295, + 48007 - 44032: 0x9296, + 48008 - 44032: 0xB9BF, + 48009 - 44032: 0x9297, + 48010 - 44032: 0x9298, + 48011 - 44032: 0x9299, + 48012 - 44032: 0xB9C0, + 48013 - 44032: 0x929A, + 48014 - 44032: 0x929B, + 48015 - 44032: 0x929C, + 48016 - 44032: 0xB9C1, + 48017 - 44032: 0x929D, + 48018 - 44032: 0x929E, + 48019 - 44032: 0x929F, + 48020 - 44032: 0x92A0, + 48021 - 44032: 0x92A1, + 48022 - 44032: 0x92A2, + 48023 - 44032: 0x92A3, + 48024 - 44032: 0x92A4, + 48025 - 44032: 0x92A5, + 48026 - 44032: 0x92A6, + 48027 - 44032: 0x92A7, + 48028 - 44032: 0x92A8, + 48029 - 44032: 0x92A9, + 48030 - 44032: 0x92AA, + 48031 - 44032: 0x92AB, + 48032 - 44032: 0x92AC, + 48033 - 44032: 0x92AD, + 48034 - 44032: 0x92AE, + 48035 - 44032: 0x92AF, + 48036 - 44032: 0xB9C2, + 48037 - 44032: 0x92B0, + 48038 - 44032: 0x92B1, + 48039 - 44032: 0x92B2, + 48040 - 44032: 0xB9C3, + 48041 - 44032: 0x92B3, + 48042 - 44032: 0x92B4, + 48043 - 44032: 0x92B5, + 48044 - 44032: 0xB9C4, + 48045 - 44032: 0x92B6, + 48046 - 44032: 0x92B7, + 48047 - 44032: 0x92B8, + 48048 - 44032: 0x92B9, + 48049 - 44032: 0x92BA, + 48050 - 44032: 0x92BB, + 48051 - 44032: 0x92BC, + 48052 - 44032: 0xB9C5, + 48053 - 44032: 0x92BD, + 48054 - 44032: 0x92BE, + 48055 - 44032: 0xB9C6, + 48056 - 44032: 0x92BF, + 48057 - 44032: 0x92C0, + 48058 - 44032: 0x92C1, + 48059 - 44032: 0x92C2, + 48060 - 44032: 0x92C3, + 48061 - 44032: 0x92C4, + 48062 - 44032: 0x92C5, + 48063 - 44032: 0x92C6, + 48064 - 44032: 0xB9C7, + 48065 - 44032: 0x92C7, + 48066 - 44032: 0x92C8, + 48067 - 44032: 0x92C9, + 48068 - 44032: 0xB9C8, + 48069 - 44032: 0x92CA, + 48070 - 44032: 0x92CB, + 48071 - 44032: 0x92CC, + 48072 - 44032: 0xB9C9, + 48073 - 44032: 0x92CD, + 48074 - 44032: 0x92CE, + 48075 - 44032: 0x92CF, + 48076 - 44032: 0x92D0, + 48077 - 44032: 0x92D1, + 48078 - 44032: 0x92D2, + 48079 - 44032: 0x92D3, + 48080 - 44032: 0xB9CA, + 48081 - 44032: 0x92D4, + 48082 - 44032: 0x92D5, + 48083 - 44032: 0xB9CB, + 48084 - 44032: 0x92D6, + 48085 - 44032: 0x92D7, + 48086 - 44032: 0x92D8, + 48087 - 44032: 0x92D9, + 48088 - 44032: 0x92DA, + 48089 - 44032: 0x92DB, + 48090 - 44032: 0x92DC, + 48091 - 44032: 0x92DD, + 48092 - 44032: 0x92DE, + 48093 - 44032: 0x92DF, + 48094 - 44032: 0x92E0, + 48095 - 44032: 0x92E1, + 48096 - 44032: 0x92E2, + 48097 - 44032: 0x92E3, + 48098 - 44032: 0x92E4, + 48099 - 44032: 0x92E5, + 48100 - 44032: 0x92E6, + 48101 - 44032: 0x92E7, + 48102 - 44032: 0x92E8, + 48103 - 44032: 0x92E9, + 48104 - 44032: 0x92EA, + 48105 - 44032: 0x92EB, + 48106 - 44032: 0x92EC, + 48107 - 44032: 0x92ED, + 48108 - 44032: 0x92EE, + 48109 - 44032: 0x92EF, + 48110 - 44032: 0x92F0, + 48111 - 44032: 0x92F1, + 48112 - 44032: 0x92F2, + 48113 - 44032: 0x92F3, + 48114 - 44032: 0x92F4, + 48115 - 44032: 0x92F5, + 48116 - 44032: 0x92F6, + 48117 - 44032: 0x92F7, + 48118 - 44032: 0x92F8, + 48119 - 44032: 0x92F9, + 48120 - 44032: 0xB9CC, + 48121 - 44032: 0xB9CD, + 48122 - 44032: 0x92FA, + 48123 - 44032: 0x92FB, + 48124 - 44032: 0xB9CE, + 48125 - 44032: 0x92FC, + 48126 - 44032: 0x92FD, + 48127 - 44032: 0xB9CF, + 48128 - 44032: 0xB9D0, + 48129 - 44032: 0x92FE, + 48130 - 44032: 0xB9D1, + 48131 - 44032: 0x9341, + 48132 - 44032: 0x9342, + 48133 - 44032: 0x9343, + 48134 - 44032: 0x9344, + 48135 - 44032: 0x9345, + 48136 - 44032: 0xB9D2, + 48137 - 44032: 0xB9D3, + 48138 - 44032: 0x9346, + 48139 - 44032: 0xB9D4, + 48140 - 44032: 0xB9D5, + 48141 - 44032: 0xB9D6, + 48142 - 44032: 0x9347, + 48143 - 44032: 0xB9D7, + 48144 - 44032: 0x9348, + 48145 - 44032: 0xB9D8, + 48146 - 44032: 0x9349, + 48147 - 44032: 0x934A, + 48148 - 44032: 0xB9D9, + 48149 - 44032: 0xB9DA, + 48150 - 44032: 0xB9DB, + 48151 - 44032: 0xB9DC, + 48152 - 44032: 0xB9DD, + 48153 - 44032: 0x934B, + 48154 - 44032: 0x934C, + 48155 - 44032: 0xB9DE, + 48156 - 44032: 0xB9DF, + 48157 - 44032: 0xB9E0, + 48158 - 44032: 0xB9E1, + 48159 - 44032: 0xB9E2, + 48160 - 44032: 0x934D, + 48161 - 44032: 0x934E, + 48162 - 44032: 0x934F, + 48163 - 44032: 0x9350, + 48164 - 44032: 0xB9E3, + 48165 - 44032: 0xB9E4, + 48166 - 44032: 0x9351, + 48167 - 44032: 0xB9E5, + 48168 - 44032: 0x9352, + 48169 - 44032: 0xB9E6, + 48170 - 44032: 0x9353, + 48171 - 44032: 0x9354, + 48172 - 44032: 0x9355, + 48173 - 44032: 0xB9E7, + 48174 - 44032: 0x9356, + 48175 - 44032: 0x9357, + 48176 - 44032: 0xB9E8, + 48177 - 44032: 0xB9E9, + 48178 - 44032: 0x9358, + 48179 - 44032: 0x9359, + 48180 - 44032: 0xB9EA, + 48181 - 44032: 0x935A, + 48182 - 44032: 0x9361, + 48183 - 44032: 0x9362, + 48184 - 44032: 0xB9EB, + 48185 - 44032: 0x9363, + 48186 - 44032: 0x9364, + 48187 - 44032: 0x9365, + 48188 - 44032: 0x9366, + 48189 - 44032: 0x9367, + 48190 - 44032: 0x9368, + 48191 - 44032: 0x9369, + 48192 - 44032: 0xB9EC, + 48193 - 44032: 0xB9ED, + 48194 - 44032: 0x936A, + 48195 - 44032: 0xB9EE, + 48196 - 44032: 0xB9EF, + 48197 - 44032: 0xB9F0, + 48198 - 44032: 0x936B, + 48199 - 44032: 0x936C, + 48200 - 44032: 0x936D, + 48201 - 44032: 0xB9F1, + 48202 - 44032: 0x936E, + 48203 - 44032: 0x936F, + 48204 - 44032: 0xB9F2, + 48205 - 44032: 0xB9F3, + 48206 - 44032: 0x9370, + 48207 - 44032: 0x9371, + 48208 - 44032: 0xB9F4, + 48209 - 44032: 0x9372, + 48210 - 44032: 0x9373, + 48211 - 44032: 0x9374, + 48212 - 44032: 0x9375, + 48213 - 44032: 0x9376, + 48214 - 44032: 0x9377, + 48215 - 44032: 0x9378, + 48216 - 44032: 0x9379, + 48217 - 44032: 0x937A, + 48218 - 44032: 0x9381, + 48219 - 44032: 0x9382, + 48220 - 44032: 0x9383, + 48221 - 44032: 0xB9F5, + 48222 - 44032: 0x9384, + 48223 - 44032: 0x9385, + 48224 - 44032: 0x9386, + 48225 - 44032: 0x9387, + 48226 - 44032: 0x9388, + 48227 - 44032: 0x9389, + 48228 - 44032: 0x938A, + 48229 - 44032: 0x938B, + 48230 - 44032: 0x938C, + 48231 - 44032: 0x938D, + 48232 - 44032: 0x938E, + 48233 - 44032: 0x938F, + 48234 - 44032: 0x9390, + 48235 - 44032: 0x9391, + 48236 - 44032: 0x9392, + 48237 - 44032: 0x9393, + 48238 - 44032: 0x9394, + 48239 - 44032: 0x9395, + 48240 - 44032: 0x9396, + 48241 - 44032: 0x9397, + 48242 - 44032: 0x9398, + 48243 - 44032: 0x9399, + 48244 - 44032: 0x939A, + 48245 - 44032: 0x939B, + 48246 - 44032: 0x939C, + 48247 - 44032: 0x939D, + 48248 - 44032: 0x939E, + 48249 - 44032: 0x939F, + 48250 - 44032: 0x93A0, + 48251 - 44032: 0x93A1, + 48252 - 44032: 0x93A2, + 48253 - 44032: 0x93A3, + 48254 - 44032: 0x93A4, + 48255 - 44032: 0x93A5, + 48256 - 44032: 0x93A6, + 48257 - 44032: 0x93A7, + 48258 - 44032: 0x93A8, + 48259 - 44032: 0x93A9, + 48260 - 44032: 0xB9F6, + 48261 - 44032: 0xB9F7, + 48262 - 44032: 0x93AA, + 48263 - 44032: 0x93AB, + 48264 - 44032: 0xB9F8, + 48265 - 44032: 0x93AC, + 48266 - 44032: 0x93AD, + 48267 - 44032: 0xB9F9, + 48268 - 44032: 0xB9FA, + 48269 - 44032: 0x93AE, + 48270 - 44032: 0xB9FB, + 48271 - 44032: 0x93AF, + 48272 - 44032: 0x93B0, + 48273 - 44032: 0x93B1, + 48274 - 44032: 0x93B2, + 48275 - 44032: 0x93B3, + 48276 - 44032: 0xB9FC, + 48277 - 44032: 0xB9FD, + 48278 - 44032: 0x93B4, + 48279 - 44032: 0xB9FE, + 48280 - 44032: 0x93B5, + 48281 - 44032: 0xBAA1, + 48282 - 44032: 0xBAA2, + 48283 - 44032: 0x93B6, + 48284 - 44032: 0x93B7, + 48285 - 44032: 0x93B8, + 48286 - 44032: 0x93B9, + 48287 - 44032: 0x93BA, + 48288 - 44032: 0xBAA3, + 48289 - 44032: 0xBAA4, + 48290 - 44032: 0x93BB, + 48291 - 44032: 0x93BC, + 48292 - 44032: 0xBAA5, + 48293 - 44032: 0x93BD, + 48294 - 44032: 0x93BE, + 48295 - 44032: 0xBAA6, + 48296 - 44032: 0xBAA7, + 48297 - 44032: 0x93BF, + 48298 - 44032: 0x93C0, + 48299 - 44032: 0x93C1, + 48300 - 44032: 0x93C2, + 48301 - 44032: 0x93C3, + 48302 - 44032: 0x93C4, + 48303 - 44032: 0x93C5, + 48304 - 44032: 0xBAA8, + 48305 - 44032: 0xBAA9, + 48306 - 44032: 0x93C6, + 48307 - 44032: 0xBAAA, + 48308 - 44032: 0xBAAB, + 48309 - 44032: 0xBAAC, + 48310 - 44032: 0x93C7, + 48311 - 44032: 0x93C8, + 48312 - 44032: 0x93C9, + 48313 - 44032: 0x93CA, + 48314 - 44032: 0x93CB, + 48315 - 44032: 0x93CC, + 48316 - 44032: 0xBAAD, + 48317 - 44032: 0xBAAE, + 48318 - 44032: 0x93CD, + 48319 - 44032: 0x93CE, + 48320 - 44032: 0xBAAF, + 48321 - 44032: 0x93CF, + 48322 - 44032: 0x93D0, + 48323 - 44032: 0x93D1, + 48324 - 44032: 0xBAB0, + 48325 - 44032: 0x93D2, + 48326 - 44032: 0x93D3, + 48327 - 44032: 0x93D4, + 48328 - 44032: 0x93D5, + 48329 - 44032: 0x93D6, + 48330 - 44032: 0x93D7, + 48331 - 44032: 0x93D8, + 48332 - 44032: 0x93D9, + 48333 - 44032: 0xBAB1, + 48334 - 44032: 0x93DA, + 48335 - 44032: 0xBAB2, + 48336 - 44032: 0xBAB3, + 48337 - 44032: 0xBAB4, + 48338 - 44032: 0x93DB, + 48339 - 44032: 0x93DC, + 48340 - 44032: 0x93DD, + 48341 - 44032: 0xBAB5, + 48342 - 44032: 0x93DE, + 48343 - 44032: 0x93DF, + 48344 - 44032: 0xBAB6, + 48345 - 44032: 0x93E0, + 48346 - 44032: 0x93E1, + 48347 - 44032: 0x93E2, + 48348 - 44032: 0xBAB7, + 48349 - 44032: 0x93E3, + 48350 - 44032: 0x93E4, + 48351 - 44032: 0x93E5, + 48352 - 44032: 0x93E6, + 48353 - 44032: 0x93E7, + 48354 - 44032: 0x93E8, + 48355 - 44032: 0x93E9, + 48356 - 44032: 0x93EA, + 48357 - 44032: 0x93EB, + 48358 - 44032: 0x93EC, + 48359 - 44032: 0x93ED, + 48360 - 44032: 0x93EE, + 48361 - 44032: 0x93EF, + 48362 - 44032: 0x93F0, + 48363 - 44032: 0x93F1, + 48364 - 44032: 0x93F2, + 48365 - 44032: 0x93F3, + 48366 - 44032: 0x93F4, + 48367 - 44032: 0x93F5, + 48368 - 44032: 0x93F6, + 48369 - 44032: 0x93F7, + 48370 - 44032: 0x93F8, + 48371 - 44032: 0x93F9, + 48372 - 44032: 0xBAB8, + 48373 - 44032: 0xBAB9, + 48374 - 44032: 0xBABA, + 48375 - 44032: 0x93FA, + 48376 - 44032: 0xBABB, + 48377 - 44032: 0x93FB, + 48378 - 44032: 0x93FC, + 48379 - 44032: 0x93FD, + 48380 - 44032: 0xBABC, + 48381 - 44032: 0x93FE, + 48382 - 44032: 0x9441, + 48383 - 44032: 0x9442, + 48384 - 44032: 0x9443, + 48385 - 44032: 0x9444, + 48386 - 44032: 0x9445, + 48387 - 44032: 0x9446, + 48388 - 44032: 0xBABD, + 48389 - 44032: 0xBABE, + 48390 - 44032: 0x9447, + 48391 - 44032: 0xBABF, + 48392 - 44032: 0x9448, + 48393 - 44032: 0xBAC0, + 48394 - 44032: 0x9449, + 48395 - 44032: 0x944A, + 48396 - 44032: 0x944B, + 48397 - 44032: 0x944C, + 48398 - 44032: 0x944D, + 48399 - 44032: 0x944E, + 48400 - 44032: 0xBAC1, + 48401 - 44032: 0x944F, + 48402 - 44032: 0x9450, + 48403 - 44032: 0x9451, + 48404 - 44032: 0xBAC2, + 48405 - 44032: 0x9452, + 48406 - 44032: 0x9453, + 48407 - 44032: 0x9454, + 48408 - 44032: 0x9455, + 48409 - 44032: 0x9456, + 48410 - 44032: 0x9457, + 48411 - 44032: 0x9458, + 48412 - 44032: 0x9459, + 48413 - 44032: 0x945A, + 48414 - 44032: 0x9461, + 48415 - 44032: 0x9462, + 48416 - 44032: 0x9463, + 48417 - 44032: 0x9464, + 48418 - 44032: 0x9465, + 48419 - 44032: 0x9466, + 48420 - 44032: 0xBAC3, + 48421 - 44032: 0x9467, + 48422 - 44032: 0x9468, + 48423 - 44032: 0x9469, + 48424 - 44032: 0x946A, + 48425 - 44032: 0x946B, + 48426 - 44032: 0x946C, + 48427 - 44032: 0x946D, + 48428 - 44032: 0xBAC4, + 48429 - 44032: 0x946E, + 48430 - 44032: 0x946F, + 48431 - 44032: 0x9470, + 48432 - 44032: 0x9471, + 48433 - 44032: 0x9472, + 48434 - 44032: 0x9473, + 48435 - 44032: 0x9474, + 48436 - 44032: 0x9475, + 48437 - 44032: 0x9476, + 48438 - 44032: 0x9477, + 48439 - 44032: 0x9478, + 48440 - 44032: 0x9479, + 48441 - 44032: 0x947A, + 48442 - 44032: 0x9481, + 48443 - 44032: 0x9482, + 48444 - 44032: 0x9483, + 48445 - 44032: 0x9484, + 48446 - 44032: 0x9485, + 48447 - 44032: 0x9486, + 48448 - 44032: 0xBAC5, + 48449 - 44032: 0x9487, + 48450 - 44032: 0x9488, + 48451 - 44032: 0x9489, + 48452 - 44032: 0x948A, + 48453 - 44032: 0x948B, + 48454 - 44032: 0x948C, + 48455 - 44032: 0x948D, + 48456 - 44032: 0xBAC6, + 48457 - 44032: 0xBAC7, + 48458 - 44032: 0x948E, + 48459 - 44032: 0x948F, + 48460 - 44032: 0xBAC8, + 48461 - 44032: 0x9490, + 48462 - 44032: 0x9491, + 48463 - 44032: 0x9492, + 48464 - 44032: 0xBAC9, + 48465 - 44032: 0x9493, + 48466 - 44032: 0x9494, + 48467 - 44032: 0x9495, + 48468 - 44032: 0x9496, + 48469 - 44032: 0x9497, + 48470 - 44032: 0x9498, + 48471 - 44032: 0x9499, + 48472 - 44032: 0xBACA, + 48473 - 44032: 0xBACB, + 48474 - 44032: 0x949A, + 48475 - 44032: 0x949B, + 48476 - 44032: 0x949C, + 48477 - 44032: 0x949D, + 48478 - 44032: 0x949E, + 48479 - 44032: 0x949F, + 48480 - 44032: 0x94A0, + 48481 - 44032: 0x94A1, + 48482 - 44032: 0x94A2, + 48483 - 44032: 0x94A3, + 48484 - 44032: 0xBACC, + 48485 - 44032: 0x94A4, + 48486 - 44032: 0x94A5, + 48487 - 44032: 0x94A6, + 48488 - 44032: 0xBACD, + 48489 - 44032: 0x94A7, + 48490 - 44032: 0x94A8, + 48491 - 44032: 0x94A9, + 48492 - 44032: 0x94AA, + 48493 - 44032: 0x94AB, + 48494 - 44032: 0x94AC, + 48495 - 44032: 0x94AD, + 48496 - 44032: 0x94AE, + 48497 - 44032: 0x94AF, + 48498 - 44032: 0x94B0, + 48499 - 44032: 0x94B1, + 48500 - 44032: 0x94B2, + 48501 - 44032: 0x94B3, + 48502 - 44032: 0x94B4, + 48503 - 44032: 0x94B5, + 48504 - 44032: 0x94B6, + 48505 - 44032: 0x94B7, + 48506 - 44032: 0x94B8, + 48507 - 44032: 0x94B9, + 48508 - 44032: 0x94BA, + 48509 - 44032: 0x94BB, + 48510 - 44032: 0x94BC, + 48511 - 44032: 0x94BD, + 48512 - 44032: 0xBACE, + 48513 - 44032: 0xBACF, + 48514 - 44032: 0x94BE, + 48515 - 44032: 0x94BF, + 48516 - 44032: 0xBAD0, + 48517 - 44032: 0x94C0, + 48518 - 44032: 0x94C1, + 48519 - 44032: 0xBAD1, + 48520 - 44032: 0xBAD2, + 48521 - 44032: 0xBAD3, + 48522 - 44032: 0xBAD4, + 48523 - 44032: 0x94C2, + 48524 - 44032: 0x94C3, + 48525 - 44032: 0x94C4, + 48526 - 44032: 0x94C5, + 48527 - 44032: 0x94C6, + 48528 - 44032: 0xBAD5, + 48529 - 44032: 0xBAD6, + 48530 - 44032: 0x94C7, + 48531 - 44032: 0xBAD7, + 48532 - 44032: 0x94C8, + 48533 - 44032: 0xBAD8, + 48534 - 44032: 0x94C9, + 48535 - 44032: 0x94CA, + 48536 - 44032: 0x94CB, + 48537 - 44032: 0xBAD9, + 48538 - 44032: 0xBADA, + 48539 - 44032: 0x94CC, + 48540 - 44032: 0xBADB, + 48541 - 44032: 0x94CD, + 48542 - 44032: 0x94CE, + 48543 - 44032: 0x94CF, + 48544 - 44032: 0x94D0, + 48545 - 44032: 0x94D1, + 48546 - 44032: 0x94D2, + 48547 - 44032: 0x94D3, + 48548 - 44032: 0xBADC, + 48549 - 44032: 0x94D4, + 48550 - 44032: 0x94D5, + 48551 - 44032: 0x94D6, + 48552 - 44032: 0x94D7, + 48553 - 44032: 0x94D8, + 48554 - 44032: 0x94D9, + 48555 - 44032: 0x94DA, + 48556 - 44032: 0x94DB, + 48557 - 44032: 0x94DC, + 48558 - 44032: 0x94DD, + 48559 - 44032: 0x94DE, + 48560 - 44032: 0xBADD, + 48561 - 44032: 0x94DF, + 48562 - 44032: 0x94E0, + 48563 - 44032: 0x94E1, + 48564 - 44032: 0x94E2, + 48565 - 44032: 0x94E3, + 48566 - 44032: 0x94E4, + 48567 - 44032: 0x94E5, + 48568 - 44032: 0xBADE, + 48569 - 44032: 0x94E6, + 48570 - 44032: 0x94E7, + 48571 - 44032: 0x94E8, + 48572 - 44032: 0x94E9, + 48573 - 44032: 0x94EA, + 48574 - 44032: 0x94EB, + 48575 - 44032: 0x94EC, + 48576 - 44032: 0x94ED, + 48577 - 44032: 0x94EE, + 48578 - 44032: 0x94EF, + 48579 - 44032: 0x94F0, + 48580 - 44032: 0x94F1, + 48581 - 44032: 0x94F2, + 48582 - 44032: 0x94F3, + 48583 - 44032: 0x94F4, + 48584 - 44032: 0x94F5, + 48585 - 44032: 0x94F6, + 48586 - 44032: 0x94F7, + 48587 - 44032: 0x94F8, + 48588 - 44032: 0x94F9, + 48589 - 44032: 0x94FA, + 48590 - 44032: 0x94FB, + 48591 - 44032: 0x94FC, + 48592 - 44032: 0x94FD, + 48593 - 44032: 0x94FE, + 48594 - 44032: 0x9541, + 48595 - 44032: 0x9542, + 48596 - 44032: 0xBADF, + 48597 - 44032: 0xBAE0, + 48598 - 44032: 0x9543, + 48599 - 44032: 0x9544, + 48600 - 44032: 0xBAE1, + 48601 - 44032: 0x9545, + 48602 - 44032: 0x9546, + 48603 - 44032: 0x9547, + 48604 - 44032: 0xBAE2, + 48605 - 44032: 0x9548, + 48606 - 44032: 0x9549, + 48607 - 44032: 0x954A, + 48608 - 44032: 0x954B, + 48609 - 44032: 0x954C, + 48610 - 44032: 0x954D, + 48611 - 44032: 0x954E, + 48612 - 44032: 0x954F, + 48613 - 44032: 0x9550, + 48614 - 44032: 0x9551, + 48615 - 44032: 0x9552, + 48616 - 44032: 0x9553, + 48617 - 44032: 0xBAE3, + 48618 - 44032: 0x9554, + 48619 - 44032: 0x9555, + 48620 - 44032: 0x9556, + 48621 - 44032: 0x9557, + 48622 - 44032: 0x9558, + 48623 - 44032: 0x9559, + 48624 - 44032: 0xBAE4, + 48625 - 44032: 0x955A, + 48626 - 44032: 0x9561, + 48627 - 44032: 0x9562, + 48628 - 44032: 0xBAE5, + 48629 - 44032: 0x9563, + 48630 - 44032: 0x9564, + 48631 - 44032: 0x9565, + 48632 - 44032: 0xBAE6, + 48633 - 44032: 0x9566, + 48634 - 44032: 0x9567, + 48635 - 44032: 0x9568, + 48636 - 44032: 0x9569, + 48637 - 44032: 0x956A, + 48638 - 44032: 0x956B, + 48639 - 44032: 0x956C, + 48640 - 44032: 0xBAE7, + 48641 - 44032: 0x956D, + 48642 - 44032: 0x956E, + 48643 - 44032: 0xBAE8, + 48644 - 44032: 0x956F, + 48645 - 44032: 0xBAE9, + 48646 - 44032: 0x9570, + 48647 - 44032: 0x9571, + 48648 - 44032: 0x9572, + 48649 - 44032: 0x9573, + 48650 - 44032: 0x9574, + 48651 - 44032: 0x9575, + 48652 - 44032: 0xBAEA, + 48653 - 44032: 0xBAEB, + 48654 - 44032: 0x9576, + 48655 - 44032: 0x9577, + 48656 - 44032: 0xBAEC, + 48657 - 44032: 0x9578, + 48658 - 44032: 0x9579, + 48659 - 44032: 0x957A, + 48660 - 44032: 0xBAED, + 48661 - 44032: 0x9581, + 48662 - 44032: 0x9582, + 48663 - 44032: 0x9583, + 48664 - 44032: 0x9584, + 48665 - 44032: 0x9585, + 48666 - 44032: 0x9586, + 48667 - 44032: 0x9587, + 48668 - 44032: 0xBAEE, + 48669 - 44032: 0xBAEF, + 48670 - 44032: 0x9588, + 48671 - 44032: 0xBAF0, + 48672 - 44032: 0x9589, + 48673 - 44032: 0x958A, + 48674 - 44032: 0x958B, + 48675 - 44032: 0x958C, + 48676 - 44032: 0x958D, + 48677 - 44032: 0x958E, + 48678 - 44032: 0x958F, + 48679 - 44032: 0x9590, + 48680 - 44032: 0x9591, + 48681 - 44032: 0x9592, + 48682 - 44032: 0x9593, + 48683 - 44032: 0x9594, + 48684 - 44032: 0x9595, + 48685 - 44032: 0x9596, + 48686 - 44032: 0x9597, + 48687 - 44032: 0x9598, + 48688 - 44032: 0x9599, + 48689 - 44032: 0x959A, + 48690 - 44032: 0x959B, + 48691 - 44032: 0x959C, + 48692 - 44032: 0x959D, + 48693 - 44032: 0x959E, + 48694 - 44032: 0x959F, + 48695 - 44032: 0x95A0, + 48696 - 44032: 0x95A1, + 48697 - 44032: 0x95A2, + 48698 - 44032: 0x95A3, + 48699 - 44032: 0x95A4, + 48700 - 44032: 0x95A5, + 48701 - 44032: 0x95A6, + 48702 - 44032: 0x95A7, + 48703 - 44032: 0x95A8, + 48704 - 44032: 0x95A9, + 48705 - 44032: 0x95AA, + 48706 - 44032: 0x95AB, + 48707 - 44032: 0x95AC, + 48708 - 44032: 0xBAF1, + 48709 - 44032: 0xBAF2, + 48710 - 44032: 0x95AD, + 48711 - 44032: 0x95AE, + 48712 - 44032: 0xBAF3, + 48713 - 44032: 0x95AF, + 48714 - 44032: 0x95B0, + 48715 - 44032: 0x95B1, + 48716 - 44032: 0xBAF4, + 48717 - 44032: 0x95B2, + 48718 - 44032: 0xBAF5, + 48719 - 44032: 0x95B3, + 48720 - 44032: 0x95B4, + 48721 - 44032: 0x95B5, + 48722 - 44032: 0x95B6, + 48723 - 44032: 0x95B7, + 48724 - 44032: 0xBAF6, + 48725 - 44032: 0xBAF7, + 48726 - 44032: 0x95B8, + 48727 - 44032: 0xBAF8, + 48728 - 44032: 0x95B9, + 48729 - 44032: 0xBAF9, + 48730 - 44032: 0xBAFA, + 48731 - 44032: 0xBAFB, + 48732 - 44032: 0x95BA, + 48733 - 44032: 0x95BB, + 48734 - 44032: 0x95BC, + 48735 - 44032: 0x95BD, + 48736 - 44032: 0xBAFC, + 48737 - 44032: 0xBAFD, + 48738 - 44032: 0x95BE, + 48739 - 44032: 0x95BF, + 48740 - 44032: 0xBAFE, + 48741 - 44032: 0x95C0, + 48742 - 44032: 0x95C1, + 48743 - 44032: 0x95C2, + 48744 - 44032: 0xBBA1, + 48745 - 44032: 0x95C3, + 48746 - 44032: 0xBBA2, + 48747 - 44032: 0x95C4, + 48748 - 44032: 0x95C5, + 48749 - 44032: 0x95C6, + 48750 - 44032: 0x95C7, + 48751 - 44032: 0x95C8, + 48752 - 44032: 0xBBA3, + 48753 - 44032: 0xBBA4, + 48754 - 44032: 0x95C9, + 48755 - 44032: 0xBBA5, + 48756 - 44032: 0xBBA6, + 48757 - 44032: 0xBBA7, + 48758 - 44032: 0x95CA, + 48759 - 44032: 0x95CB, + 48760 - 44032: 0x95CC, + 48761 - 44032: 0x95CD, + 48762 - 44032: 0x95CE, + 48763 - 44032: 0xBBA8, + 48764 - 44032: 0xBBA9, + 48765 - 44032: 0xBBAA, + 48766 - 44032: 0x95CF, + 48767 - 44032: 0x95D0, + 48768 - 44032: 0xBBAB, + 48769 - 44032: 0x95D1, + 48770 - 44032: 0x95D2, + 48771 - 44032: 0x95D3, + 48772 - 44032: 0xBBAC, + 48773 - 44032: 0x95D4, + 48774 - 44032: 0x95D5, + 48775 - 44032: 0x95D6, + 48776 - 44032: 0x95D7, + 48777 - 44032: 0x95D8, + 48778 - 44032: 0x95D9, + 48779 - 44032: 0x95DA, + 48780 - 44032: 0xBBAD, + 48781 - 44032: 0xBBAE, + 48782 - 44032: 0x95DB, + 48783 - 44032: 0xBBAF, + 48784 - 44032: 0xBBB0, + 48785 - 44032: 0xBBB1, + 48786 - 44032: 0x95DC, + 48787 - 44032: 0x95DD, + 48788 - 44032: 0x95DE, + 48789 - 44032: 0x95DF, + 48790 - 44032: 0x95E0, + 48791 - 44032: 0x95E1, + 48792 - 44032: 0xBBB2, + 48793 - 44032: 0xBBB3, + 48794 - 44032: 0x95E2, + 48795 - 44032: 0x95E3, + 48796 - 44032: 0x95E4, + 48797 - 44032: 0x95E5, + 48798 - 44032: 0x95E6, + 48799 - 44032: 0x95E7, + 48800 - 44032: 0x95E8, + 48801 - 44032: 0x95E9, + 48802 - 44032: 0x95EA, + 48803 - 44032: 0x95EB, + 48804 - 44032: 0x95EC, + 48805 - 44032: 0x95ED, + 48806 - 44032: 0x95EE, + 48807 - 44032: 0x95EF, + 48808 - 44032: 0xBBB4, + 48809 - 44032: 0x95F0, + 48810 - 44032: 0x95F1, + 48811 - 44032: 0x95F2, + 48812 - 44032: 0x95F3, + 48813 - 44032: 0x95F4, + 48814 - 44032: 0x95F5, + 48815 - 44032: 0x95F6, + 48816 - 44032: 0x95F7, + 48817 - 44032: 0x95F8, + 48818 - 44032: 0x95F9, + 48819 - 44032: 0x95FA, + 48820 - 44032: 0x95FB, + 48821 - 44032: 0x95FC, + 48822 - 44032: 0x95FD, + 48823 - 44032: 0x95FE, + 48824 - 44032: 0x9641, + 48825 - 44032: 0x9642, + 48826 - 44032: 0x9643, + 48827 - 44032: 0x9644, + 48828 - 44032: 0x9645, + 48829 - 44032: 0x9646, + 48830 - 44032: 0x9647, + 48831 - 44032: 0x9648, + 48832 - 44032: 0x9649, + 48833 - 44032: 0x964A, + 48834 - 44032: 0x964B, + 48835 - 44032: 0x964C, + 48836 - 44032: 0x964D, + 48837 - 44032: 0x964E, + 48838 - 44032: 0x964F, + 48839 - 44032: 0x9650, + 48840 - 44032: 0x9651, + 48841 - 44032: 0x9652, + 48842 - 44032: 0x9653, + 48843 - 44032: 0x9654, + 48844 - 44032: 0x9655, + 48845 - 44032: 0x9656, + 48846 - 44032: 0x9657, + 48847 - 44032: 0x9658, + 48848 - 44032: 0xBBB5, + 48849 - 44032: 0xBBB6, + 48850 - 44032: 0x9659, + 48851 - 44032: 0x965A, + 48852 - 44032: 0xBBB7, + 48853 - 44032: 0x9661, + 48854 - 44032: 0x9662, + 48855 - 44032: 0xBBB8, + 48856 - 44032: 0xBBB9, + 48857 - 44032: 0x9663, + 48858 - 44032: 0x9664, + 48859 - 44032: 0x9665, + 48860 - 44032: 0x9666, + 48861 - 44032: 0x9667, + 48862 - 44032: 0x9668, + 48863 - 44032: 0x9669, + 48864 - 44032: 0xBBBA, + 48865 - 44032: 0x966A, + 48866 - 44032: 0x966B, + 48867 - 44032: 0xBBBB, + 48868 - 44032: 0xBBBC, + 48869 - 44032: 0xBBBD, + 48870 - 44032: 0x966C, + 48871 - 44032: 0x966D, + 48872 - 44032: 0x966E, + 48873 - 44032: 0x966F, + 48874 - 44032: 0x9670, + 48875 - 44032: 0x9671, + 48876 - 44032: 0xBBBE, + 48877 - 44032: 0x9672, + 48878 - 44032: 0x9673, + 48879 - 44032: 0x9674, + 48880 - 44032: 0x9675, + 48881 - 44032: 0x9676, + 48882 - 44032: 0x9677, + 48883 - 44032: 0x9678, + 48884 - 44032: 0x9679, + 48885 - 44032: 0x967A, + 48886 - 44032: 0x9681, + 48887 - 44032: 0x9682, + 48888 - 44032: 0x9683, + 48889 - 44032: 0x9684, + 48890 - 44032: 0x9685, + 48891 - 44032: 0x9686, + 48892 - 44032: 0x9687, + 48893 - 44032: 0x9688, + 48894 - 44032: 0x9689, + 48895 - 44032: 0x968A, + 48896 - 44032: 0x968B, + 48897 - 44032: 0xBBBF, + 48898 - 44032: 0x968C, + 48899 - 44032: 0x968D, + 48900 - 44032: 0x968E, + 48901 - 44032: 0x968F, + 48902 - 44032: 0x9690, + 48903 - 44032: 0x9691, + 48904 - 44032: 0xBBC0, + 48905 - 44032: 0xBBC1, + 48906 - 44032: 0x9692, + 48907 - 44032: 0x9693, + 48908 - 44032: 0x9694, + 48909 - 44032: 0x9695, + 48910 - 44032: 0x9696, + 48911 - 44032: 0x9697, + 48912 - 44032: 0x9698, + 48913 - 44032: 0x9699, + 48914 - 44032: 0x969A, + 48915 - 44032: 0x969B, + 48916 - 44032: 0x969C, + 48917 - 44032: 0x969D, + 48918 - 44032: 0x969E, + 48919 - 44032: 0x969F, + 48920 - 44032: 0xBBC2, + 48921 - 44032: 0xBBC3, + 48922 - 44032: 0x96A0, + 48923 - 44032: 0xBBC4, + 48924 - 44032: 0xBBC5, + 48925 - 44032: 0xBBC6, + 48926 - 44032: 0x96A1, + 48927 - 44032: 0x96A2, + 48928 - 44032: 0x96A3, + 48929 - 44032: 0x96A4, + 48930 - 44032: 0x96A5, + 48931 - 44032: 0x96A6, + 48932 - 44032: 0x96A7, + 48933 - 44032: 0x96A8, + 48934 - 44032: 0x96A9, + 48935 - 44032: 0x96AA, + 48936 - 44032: 0x96AB, + 48937 - 44032: 0x96AC, + 48938 - 44032: 0x96AD, + 48939 - 44032: 0x96AE, + 48940 - 44032: 0x96AF, + 48941 - 44032: 0x96B0, + 48942 - 44032: 0x96B1, + 48943 - 44032: 0x96B2, + 48944 - 44032: 0x96B3, + 48945 - 44032: 0x96B4, + 48946 - 44032: 0x96B5, + 48947 - 44032: 0x96B6, + 48948 - 44032: 0x96B7, + 48949 - 44032: 0x96B8, + 48950 - 44032: 0x96B9, + 48951 - 44032: 0x96BA, + 48952 - 44032: 0x96BB, + 48953 - 44032: 0x96BC, + 48954 - 44032: 0x96BD, + 48955 - 44032: 0x96BE, + 48956 - 44032: 0x96BF, + 48957 - 44032: 0x96C0, + 48958 - 44032: 0x96C1, + 48959 - 44032: 0x96C2, + 48960 - 44032: 0xBBC7, + 48961 - 44032: 0xBBC8, + 48962 - 44032: 0x96C3, + 48963 - 44032: 0x96C4, + 48964 - 44032: 0xBBC9, + 48965 - 44032: 0x96C5, + 48966 - 44032: 0x96C6, + 48967 - 44032: 0x96C7, + 48968 - 44032: 0xBBCA, + 48969 - 44032: 0x96C8, + 48970 - 44032: 0x96C9, + 48971 - 44032: 0x96CA, + 48972 - 44032: 0x96CB, + 48973 - 44032: 0x96CC, + 48974 - 44032: 0x96CD, + 48975 - 44032: 0x96CE, + 48976 - 44032: 0xBBCB, + 48977 - 44032: 0xBBCC, + 48978 - 44032: 0x96CF, + 48979 - 44032: 0x96D0, + 48980 - 44032: 0x96D1, + 48981 - 44032: 0xBBCD, + 48982 - 44032: 0x96D2, + 48983 - 44032: 0x96D3, + 48984 - 44032: 0x96D4, + 48985 - 44032: 0x96D5, + 48986 - 44032: 0x96D6, + 48987 - 44032: 0x96D7, + 48988 - 44032: 0x96D8, + 48989 - 44032: 0x96D9, + 48990 - 44032: 0x96DA, + 48991 - 44032: 0x96DB, + 48992 - 44032: 0x96DC, + 48993 - 44032: 0x96DD, + 48994 - 44032: 0x96DE, + 48995 - 44032: 0x96DF, + 48996 - 44032: 0x96E0, + 48997 - 44032: 0x96E1, + 48998 - 44032: 0x96E2, + 48999 - 44032: 0x96E3, + 49000 - 44032: 0x96E4, + 49001 - 44032: 0x96E5, + 49002 - 44032: 0x96E6, + 49003 - 44032: 0x96E7, + 49004 - 44032: 0x96E8, + 49005 - 44032: 0x96E9, + 49006 - 44032: 0x96EA, + 49007 - 44032: 0x96EB, + 49008 - 44032: 0x96EC, + 49009 - 44032: 0x96ED, + 49010 - 44032: 0x96EE, + 49011 - 44032: 0x96EF, + 49012 - 44032: 0x96F0, + 49013 - 44032: 0x96F1, + 49014 - 44032: 0x96F2, + 49015 - 44032: 0x96F3, + 49016 - 44032: 0x96F4, + 49017 - 44032: 0x96F5, + 49018 - 44032: 0x96F6, + 49019 - 44032: 0x96F7, + 49020 - 44032: 0x96F8, + 49021 - 44032: 0x96F9, + 49022 - 44032: 0x96FA, + 49023 - 44032: 0x96FB, + 49024 - 44032: 0x96FC, + 49025 - 44032: 0x96FD, + 49026 - 44032: 0x96FE, + 49027 - 44032: 0x9741, + 49028 - 44032: 0x9742, + 49029 - 44032: 0x9743, + 49030 - 44032: 0x9744, + 49031 - 44032: 0x9745, + 49032 - 44032: 0x9746, + 49033 - 44032: 0x9747, + 49034 - 44032: 0x9748, + 49035 - 44032: 0x9749, + 49036 - 44032: 0x974A, + 49037 - 44032: 0x974B, + 49038 - 44032: 0x974C, + 49039 - 44032: 0x974D, + 49040 - 44032: 0x974E, + 49041 - 44032: 0x974F, + 49042 - 44032: 0x9750, + 49043 - 44032: 0x9751, + 49044 - 44032: 0xBBCE, + 49045 - 44032: 0x9752, + 49046 - 44032: 0x9753, + 49047 - 44032: 0x9754, + 49048 - 44032: 0x9755, + 49049 - 44032: 0x9756, + 49050 - 44032: 0x9757, + 49051 - 44032: 0x9758, + 49052 - 44032: 0x9759, + 49053 - 44032: 0x975A, + 49054 - 44032: 0x9761, + 49055 - 44032: 0x9762, + 49056 - 44032: 0x9763, + 49057 - 44032: 0x9764, + 49058 - 44032: 0x9765, + 49059 - 44032: 0x9766, + 49060 - 44032: 0x9767, + 49061 - 44032: 0x9768, + 49062 - 44032: 0x9769, + 49063 - 44032: 0x976A, + 49064 - 44032: 0x976B, + 49065 - 44032: 0x976C, + 49066 - 44032: 0x976D, + 49067 - 44032: 0x976E, + 49068 - 44032: 0x976F, + 49069 - 44032: 0x9770, + 49070 - 44032: 0x9771, + 49071 - 44032: 0x9772, + 49072 - 44032: 0xBBCF, + 49073 - 44032: 0x9773, + 49074 - 44032: 0x9774, + 49075 - 44032: 0x9775, + 49076 - 44032: 0x9776, + 49077 - 44032: 0x9777, + 49078 - 44032: 0x9778, + 49079 - 44032: 0x9779, + 49080 - 44032: 0x977A, + 49081 - 44032: 0x9781, + 49082 - 44032: 0x9782, + 49083 - 44032: 0x9783, + 49084 - 44032: 0x9784, + 49085 - 44032: 0x9785, + 49086 - 44032: 0x9786, + 49087 - 44032: 0x9787, + 49088 - 44032: 0x9788, + 49089 - 44032: 0x9789, + 49090 - 44032: 0x978A, + 49091 - 44032: 0x978B, + 49092 - 44032: 0x978C, + 49093 - 44032: 0xBBD0, + 49094 - 44032: 0x978D, + 49095 - 44032: 0x978E, + 49096 - 44032: 0x978F, + 49097 - 44032: 0x9790, + 49098 - 44032: 0x9791, + 49099 - 44032: 0x9792, + 49100 - 44032: 0xBBD1, + 49101 - 44032: 0xBBD2, + 49102 - 44032: 0x9793, + 49103 - 44032: 0x9794, + 49104 - 44032: 0xBBD3, + 49105 - 44032: 0x9795, + 49106 - 44032: 0x9796, + 49107 - 44032: 0x9797, + 49108 - 44032: 0xBBD4, + 49109 - 44032: 0x9798, + 49110 - 44032: 0x9799, + 49111 - 44032: 0x979A, + 49112 - 44032: 0x979B, + 49113 - 44032: 0x979C, + 49114 - 44032: 0x979D, + 49115 - 44032: 0x979E, + 49116 - 44032: 0xBBD5, + 49117 - 44032: 0x979F, + 49118 - 44032: 0x97A0, + 49119 - 44032: 0xBBD6, + 49120 - 44032: 0x97A1, + 49121 - 44032: 0xBBD7, + 49122 - 44032: 0x97A2, + 49123 - 44032: 0x97A3, + 49124 - 44032: 0x97A4, + 49125 - 44032: 0x97A5, + 49126 - 44032: 0x97A6, + 49127 - 44032: 0x97A7, + 49128 - 44032: 0x97A8, + 49129 - 44032: 0x97A9, + 49130 - 44032: 0x97AA, + 49131 - 44032: 0x97AB, + 49132 - 44032: 0x97AC, + 49133 - 44032: 0x97AD, + 49134 - 44032: 0x97AE, + 49135 - 44032: 0x97AF, + 49136 - 44032: 0x97B0, + 49137 - 44032: 0x97B1, + 49138 - 44032: 0x97B2, + 49139 - 44032: 0x97B3, + 49140 - 44032: 0x97B4, + 49141 - 44032: 0x97B5, + 49142 - 44032: 0x97B6, + 49143 - 44032: 0x97B7, + 49144 - 44032: 0x97B8, + 49145 - 44032: 0x97B9, + 49146 - 44032: 0x97BA, + 49147 - 44032: 0x97BB, + 49148 - 44032: 0x97BC, + 49149 - 44032: 0x97BD, + 49150 - 44032: 0x97BE, + 49151 - 44032: 0x97BF, + 49152 - 44032: 0x97C0, + 49153 - 44032: 0x97C1, + 49154 - 44032: 0x97C2, + 49155 - 44032: 0x97C3, + 49156 - 44032: 0x97C4, + 49157 - 44032: 0x97C5, + 49158 - 44032: 0x97C6, + 49159 - 44032: 0x97C7, + 49160 - 44032: 0x97C8, + 49161 - 44032: 0x97C9, + 49162 - 44032: 0x97CA, + 49163 - 44032: 0x97CB, + 49164 - 44032: 0x97CC, + 49165 - 44032: 0x97CD, + 49166 - 44032: 0x97CE, + 49167 - 44032: 0x97CF, + 49168 - 44032: 0x97D0, + 49169 - 44032: 0x97D1, + 49170 - 44032: 0x97D2, + 49171 - 44032: 0x97D3, + 49172 - 44032: 0x97D4, + 49173 - 44032: 0x97D5, + 49174 - 44032: 0x97D6, + 49175 - 44032: 0x97D7, + 49176 - 44032: 0x97D8, + 49177 - 44032: 0x97D9, + 49178 - 44032: 0x97DA, + 49179 - 44032: 0x97DB, + 49180 - 44032: 0x97DC, + 49181 - 44032: 0x97DD, + 49182 - 44032: 0x97DE, + 49183 - 44032: 0x97DF, + 49184 - 44032: 0x97E0, + 49185 - 44032: 0x97E1, + 49186 - 44032: 0x97E2, + 49187 - 44032: 0x97E3, + 49188 - 44032: 0x97E4, + 49189 - 44032: 0x97E5, + 49190 - 44032: 0x97E6, + 49191 - 44032: 0x97E7, + 49192 - 44032: 0x97E8, + 49193 - 44032: 0x97E9, + 49194 - 44032: 0x97EA, + 49195 - 44032: 0x97EB, + 49196 - 44032: 0x97EC, + 49197 - 44032: 0x97ED, + 49198 - 44032: 0x97EE, + 49199 - 44032: 0x97EF, + 49200 - 44032: 0x97F0, + 49201 - 44032: 0x97F1, + 49202 - 44032: 0x97F2, + 49203 - 44032: 0x97F3, + 49204 - 44032: 0x97F4, + 49205 - 44032: 0x97F5, + 49206 - 44032: 0x97F6, + 49207 - 44032: 0x97F7, + 49208 - 44032: 0x97F8, + 49209 - 44032: 0x97F9, + 49210 - 44032: 0x97FA, + 49211 - 44032: 0x97FB, + 49212 - 44032: 0xBBD8, + 49213 - 44032: 0x97FC, + 49214 - 44032: 0x97FD, + 49215 - 44032: 0x97FE, + 49216 - 44032: 0x9841, + 49217 - 44032: 0x9842, + 49218 - 44032: 0x9843, + 49219 - 44032: 0x9844, + 49220 - 44032: 0x9845, + 49221 - 44032: 0x9846, + 49222 - 44032: 0x9847, + 49223 - 44032: 0x9848, + 49224 - 44032: 0x9849, + 49225 - 44032: 0x984A, + 49226 - 44032: 0x984B, + 49227 - 44032: 0x984C, + 49228 - 44032: 0x984D, + 49229 - 44032: 0x984E, + 49230 - 44032: 0x984F, + 49231 - 44032: 0x9850, + 49232 - 44032: 0x9851, + 49233 - 44032: 0xBBD9, + 49234 - 44032: 0x9852, + 49235 - 44032: 0x9853, + 49236 - 44032: 0x9854, + 49237 - 44032: 0x9855, + 49238 - 44032: 0x9856, + 49239 - 44032: 0x9857, + 49240 - 44032: 0xBBDA, + 49241 - 44032: 0x9858, + 49242 - 44032: 0x9859, + 49243 - 44032: 0x985A, + 49244 - 44032: 0xBBDB, + 49245 - 44032: 0x9861, + 49246 - 44032: 0x9862, + 49247 - 44032: 0x9863, + 49248 - 44032: 0xBBDC, + 49249 - 44032: 0x9864, + 49250 - 44032: 0x9865, + 49251 - 44032: 0x9866, + 49252 - 44032: 0x9867, + 49253 - 44032: 0x9868, + 49254 - 44032: 0x9869, + 49255 - 44032: 0x986A, + 49256 - 44032: 0xBBDD, + 49257 - 44032: 0xBBDE, + 49258 - 44032: 0x986B, + 49259 - 44032: 0x986C, + 49260 - 44032: 0x986D, + 49261 - 44032: 0x986E, + 49262 - 44032: 0x986F, + 49263 - 44032: 0x9870, + 49264 - 44032: 0x9871, + 49265 - 44032: 0x9872, + 49266 - 44032: 0x9873, + 49267 - 44032: 0x9874, + 49268 - 44032: 0x9875, + 49269 - 44032: 0x9876, + 49270 - 44032: 0x9877, + 49271 - 44032: 0x9878, + 49272 - 44032: 0x9879, + 49273 - 44032: 0x987A, + 49274 - 44032: 0x9881, + 49275 - 44032: 0x9882, + 49276 - 44032: 0x9883, + 49277 - 44032: 0x9884, + 49278 - 44032: 0x9885, + 49279 - 44032: 0x9886, + 49280 - 44032: 0x9887, + 49281 - 44032: 0x9888, + 49282 - 44032: 0x9889, + 49283 - 44032: 0x988A, + 49284 - 44032: 0x988B, + 49285 - 44032: 0x988C, + 49286 - 44032: 0x988D, + 49287 - 44032: 0x988E, + 49288 - 44032: 0x988F, + 49289 - 44032: 0x9890, + 49290 - 44032: 0x9891, + 49291 - 44032: 0x9892, + 49292 - 44032: 0x9893, + 49293 - 44032: 0x9894, + 49294 - 44032: 0x9895, + 49295 - 44032: 0x9896, + 49296 - 44032: 0xBBDF, + 49297 - 44032: 0xBBE0, + 49298 - 44032: 0x9897, + 49299 - 44032: 0x9898, + 49300 - 44032: 0xBBE1, + 49301 - 44032: 0x9899, + 49302 - 44032: 0x989A, + 49303 - 44032: 0x989B, + 49304 - 44032: 0xBBE2, + 49305 - 44032: 0x989C, + 49306 - 44032: 0x989D, + 49307 - 44032: 0x989E, + 49308 - 44032: 0x989F, + 49309 - 44032: 0x98A0, + 49310 - 44032: 0x98A1, + 49311 - 44032: 0x98A2, + 49312 - 44032: 0xBBE3, + 49313 - 44032: 0xBBE4, + 49314 - 44032: 0x98A3, + 49315 - 44032: 0xBBE5, + 49316 - 44032: 0x98A4, + 49317 - 44032: 0xBBE6, + 49318 - 44032: 0x98A5, + 49319 - 44032: 0x98A6, + 49320 - 44032: 0x98A7, + 49321 - 44032: 0x98A8, + 49322 - 44032: 0x98A9, + 49323 - 44032: 0x98AA, + 49324 - 44032: 0xBBE7, + 49325 - 44032: 0xBBE8, + 49326 - 44032: 0x98AB, + 49327 - 44032: 0xBBE9, + 49328 - 44032: 0xBBEA, + 49329 - 44032: 0x98AC, + 49330 - 44032: 0x98AD, + 49331 - 44032: 0xBBEB, + 49332 - 44032: 0xBBEC, + 49333 - 44032: 0xBBED, + 49334 - 44032: 0xBBEE, + 49335 - 44032: 0x98AE, + 49336 - 44032: 0x98AF, + 49337 - 44032: 0x98B0, + 49338 - 44032: 0x98B1, + 49339 - 44032: 0x98B2, + 49340 - 44032: 0xBBEF, + 49341 - 44032: 0xBBF0, + 49342 - 44032: 0x98B3, + 49343 - 44032: 0xBBF1, + 49344 - 44032: 0xBBF2, + 49345 - 44032: 0xBBF3, + 49346 - 44032: 0x98B4, + 49347 - 44032: 0x98B5, + 49348 - 44032: 0x98B6, + 49349 - 44032: 0xBBF4, + 49350 - 44032: 0x98B7, + 49351 - 44032: 0x98B8, + 49352 - 44032: 0xBBF5, + 49353 - 44032: 0xBBF6, + 49354 - 44032: 0x98B9, + 49355 - 44032: 0x98BA, + 49356 - 44032: 0xBBF7, + 49357 - 44032: 0x98BB, + 49358 - 44032: 0x98BC, + 49359 - 44032: 0x98BD, + 49360 - 44032: 0xBBF8, + 49361 - 44032: 0x98BE, + 49362 - 44032: 0x98BF, + 49363 - 44032: 0x98C0, + 49364 - 44032: 0x98C1, + 49365 - 44032: 0x98C2, + 49366 - 44032: 0x98C3, + 49367 - 44032: 0x98C4, + 49368 - 44032: 0xBBF9, + 49369 - 44032: 0xBBFA, + 49370 - 44032: 0x98C5, + 49371 - 44032: 0xBBFB, + 49372 - 44032: 0xBBFC, + 49373 - 44032: 0xBBFD, + 49374 - 44032: 0x98C6, + 49375 - 44032: 0x98C7, + 49376 - 44032: 0x98C8, + 49377 - 44032: 0x98C9, + 49378 - 44032: 0x98CA, + 49379 - 44032: 0x98CB, + 49380 - 44032: 0xBBFE, + 49381 - 44032: 0xBCA1, + 49382 - 44032: 0x98CC, + 49383 - 44032: 0x98CD, + 49384 - 44032: 0xBCA2, + 49385 - 44032: 0x98CE, + 49386 - 44032: 0x98CF, + 49387 - 44032: 0x98D0, + 49388 - 44032: 0xBCA3, + 49389 - 44032: 0x98D1, + 49390 - 44032: 0x98D2, + 49391 - 44032: 0x98D3, + 49392 - 44032: 0x98D4, + 49393 - 44032: 0x98D5, + 49394 - 44032: 0x98D6, + 49395 - 44032: 0x98D7, + 49396 - 44032: 0xBCA4, + 49397 - 44032: 0xBCA5, + 49398 - 44032: 0x98D8, + 49399 - 44032: 0xBCA6, + 49400 - 44032: 0x98D9, + 49401 - 44032: 0xBCA7, + 49402 - 44032: 0x98DA, + 49403 - 44032: 0x98DB, + 49404 - 44032: 0x98DC, + 49405 - 44032: 0x98DD, + 49406 - 44032: 0x98DE, + 49407 - 44032: 0x98DF, + 49408 - 44032: 0xBCA8, + 49409 - 44032: 0x98E0, + 49410 - 44032: 0x98E1, + 49411 - 44032: 0x98E2, + 49412 - 44032: 0xBCA9, + 49413 - 44032: 0x98E3, + 49414 - 44032: 0x98E4, + 49415 - 44032: 0x98E5, + 49416 - 44032: 0xBCAA, + 49417 - 44032: 0x98E6, + 49418 - 44032: 0x98E7, + 49419 - 44032: 0x98E8, + 49420 - 44032: 0x98E9, + 49421 - 44032: 0x98EA, + 49422 - 44032: 0x98EB, + 49423 - 44032: 0x98EC, + 49424 - 44032: 0xBCAB, + 49425 - 44032: 0x98ED, + 49426 - 44032: 0x98EE, + 49427 - 44032: 0x98EF, + 49428 - 44032: 0x98F0, + 49429 - 44032: 0xBCAC, + 49430 - 44032: 0x98F1, + 49431 - 44032: 0x98F2, + 49432 - 44032: 0x98F3, + 49433 - 44032: 0x98F4, + 49434 - 44032: 0x98F5, + 49435 - 44032: 0x98F6, + 49436 - 44032: 0xBCAD, + 49437 - 44032: 0xBCAE, + 49438 - 44032: 0xBCAF, + 49439 - 44032: 0xBCB0, + 49440 - 44032: 0xBCB1, + 49441 - 44032: 0x98F7, + 49442 - 44032: 0x98F8, + 49443 - 44032: 0xBCB2, + 49444 - 44032: 0xBCB3, + 49445 - 44032: 0x98F9, + 49446 - 44032: 0xBCB4, + 49447 - 44032: 0xBCB5, + 49448 - 44032: 0x98FA, + 49449 - 44032: 0x98FB, + 49450 - 44032: 0x98FC, + 49451 - 44032: 0x98FD, + 49452 - 44032: 0xBCB6, + 49453 - 44032: 0xBCB7, + 49454 - 44032: 0x98FE, + 49455 - 44032: 0xBCB8, + 49456 - 44032: 0xBCB9, + 49457 - 44032: 0xBCBA, + 49458 - 44032: 0x9941, + 49459 - 44032: 0x9942, + 49460 - 44032: 0x9943, + 49461 - 44032: 0x9944, + 49462 - 44032: 0xBCBB, + 49463 - 44032: 0x9945, + 49464 - 44032: 0xBCBC, + 49465 - 44032: 0xBCBD, + 49466 - 44032: 0x9946, + 49467 - 44032: 0x9947, + 49468 - 44032: 0xBCBE, + 49469 - 44032: 0x9948, + 49470 - 44032: 0x9949, + 49471 - 44032: 0x994A, + 49472 - 44032: 0xBCBF, + 49473 - 44032: 0x994B, + 49474 - 44032: 0x994C, + 49475 - 44032: 0x994D, + 49476 - 44032: 0x994E, + 49477 - 44032: 0x994F, + 49478 - 44032: 0x9950, + 49479 - 44032: 0x9951, + 49480 - 44032: 0xBCC0, + 49481 - 44032: 0xBCC1, + 49482 - 44032: 0x9952, + 49483 - 44032: 0xBCC2, + 49484 - 44032: 0xBCC3, + 49485 - 44032: 0xBCC4, + 49486 - 44032: 0x9953, + 49487 - 44032: 0x9954, + 49488 - 44032: 0x9955, + 49489 - 44032: 0x9956, + 49490 - 44032: 0x9957, + 49491 - 44032: 0x9958, + 49492 - 44032: 0xBCC5, + 49493 - 44032: 0xBCC6, + 49494 - 44032: 0x9959, + 49495 - 44032: 0x995A, + 49496 - 44032: 0xBCC7, + 49497 - 44032: 0x9961, + 49498 - 44032: 0x9962, + 49499 - 44032: 0x9963, + 49500 - 44032: 0xBCC8, + 49501 - 44032: 0x9964, + 49502 - 44032: 0x9965, + 49503 - 44032: 0x9966, + 49504 - 44032: 0x9967, + 49505 - 44032: 0x9968, + 49506 - 44032: 0x9969, + 49507 - 44032: 0x996A, + 49508 - 44032: 0xBCC9, + 49509 - 44032: 0xBCCA, + 49510 - 44032: 0x996B, + 49511 - 44032: 0xBCCB, + 49512 - 44032: 0xBCCC, + 49513 - 44032: 0xBCCD, + 49514 - 44032: 0x996C, + 49515 - 44032: 0x996D, + 49516 - 44032: 0x996E, + 49517 - 44032: 0x996F, + 49518 - 44032: 0x9970, + 49519 - 44032: 0x9971, + 49520 - 44032: 0xBCCE, + 49521 - 44032: 0x9972, + 49522 - 44032: 0x9973, + 49523 - 44032: 0x9974, + 49524 - 44032: 0xBCCF, + 49525 - 44032: 0x9975, + 49526 - 44032: 0x9976, + 49527 - 44032: 0x9977, + 49528 - 44032: 0xBCD0, + 49529 - 44032: 0x9978, + 49530 - 44032: 0x9979, + 49531 - 44032: 0x997A, + 49532 - 44032: 0x9981, + 49533 - 44032: 0x9982, + 49534 - 44032: 0x9983, + 49535 - 44032: 0x9984, + 49536 - 44032: 0x9985, + 49537 - 44032: 0x9986, + 49538 - 44032: 0x9987, + 49539 - 44032: 0x9988, + 49540 - 44032: 0x9989, + 49541 - 44032: 0xBCD1, + 49542 - 44032: 0x998A, + 49543 - 44032: 0x998B, + 49544 - 44032: 0x998C, + 49545 - 44032: 0x998D, + 49546 - 44032: 0x998E, + 49547 - 44032: 0x998F, + 49548 - 44032: 0xBCD2, + 49549 - 44032: 0xBCD3, + 49550 - 44032: 0xBCD4, + 49551 - 44032: 0x9990, + 49552 - 44032: 0xBCD5, + 49553 - 44032: 0x9991, + 49554 - 44032: 0x9992, + 49555 - 44032: 0x9993, + 49556 - 44032: 0xBCD6, + 49557 - 44032: 0x9994, + 49558 - 44032: 0xBCD7, + 49559 - 44032: 0x9995, + 49560 - 44032: 0x9996, + 49561 - 44032: 0x9997, + 49562 - 44032: 0x9998, + 49563 - 44032: 0x9999, + 49564 - 44032: 0xBCD8, + 49565 - 44032: 0xBCD9, + 49566 - 44032: 0x999A, + 49567 - 44032: 0xBCDA, + 49568 - 44032: 0x999B, + 49569 - 44032: 0xBCDB, + 49570 - 44032: 0x999C, + 49571 - 44032: 0x999D, + 49572 - 44032: 0x999E, + 49573 - 44032: 0xBCDC, + 49574 - 44032: 0x999F, + 49575 - 44032: 0x99A0, + 49576 - 44032: 0xBCDD, + 49577 - 44032: 0xBCDE, + 49578 - 44032: 0x99A1, + 49579 - 44032: 0x99A2, + 49580 - 44032: 0xBCDF, + 49581 - 44032: 0x99A3, + 49582 - 44032: 0x99A4, + 49583 - 44032: 0x99A5, + 49584 - 44032: 0xBCE0, + 49585 - 44032: 0x99A6, + 49586 - 44032: 0x99A7, + 49587 - 44032: 0x99A8, + 49588 - 44032: 0x99A9, + 49589 - 44032: 0x99AA, + 49590 - 44032: 0x99AB, + 49591 - 44032: 0x99AC, + 49592 - 44032: 0x99AD, + 49593 - 44032: 0x99AE, + 49594 - 44032: 0x99AF, + 49595 - 44032: 0x99B0, + 49596 - 44032: 0x99B1, + 49597 - 44032: 0xBCE1, + 49598 - 44032: 0x99B2, + 49599 - 44032: 0x99B3, + 49600 - 44032: 0x99B4, + 49601 - 44032: 0x99B5, + 49602 - 44032: 0x99B6, + 49603 - 44032: 0x99B7, + 49604 - 44032: 0xBCE2, + 49605 - 44032: 0x99B8, + 49606 - 44032: 0x99B9, + 49607 - 44032: 0x99BA, + 49608 - 44032: 0xBCE3, + 49609 - 44032: 0x99BB, + 49610 - 44032: 0x99BC, + 49611 - 44032: 0x99BD, + 49612 - 44032: 0xBCE4, + 49613 - 44032: 0x99BE, + 49614 - 44032: 0x99BF, + 49615 - 44032: 0x99C0, + 49616 - 44032: 0x99C1, + 49617 - 44032: 0x99C2, + 49618 - 44032: 0x99C3, + 49619 - 44032: 0x99C4, + 49620 - 44032: 0xBCE5, + 49621 - 44032: 0x99C5, + 49622 - 44032: 0x99C6, + 49623 - 44032: 0xBCE6, + 49624 - 44032: 0xBCE7, + 49625 - 44032: 0x99C7, + 49626 - 44032: 0x99C8, + 49627 - 44032: 0x99C9, + 49628 - 44032: 0x99CA, + 49629 - 44032: 0x99CB, + 49630 - 44032: 0x99CC, + 49631 - 44032: 0x99CD, + 49632 - 44032: 0xBCE8, + 49633 - 44032: 0x99CE, + 49634 - 44032: 0x99CF, + 49635 - 44032: 0x99D0, + 49636 - 44032: 0xBCE9, + 49637 - 44032: 0x99D1, + 49638 - 44032: 0x99D2, + 49639 - 44032: 0x99D3, + 49640 - 44032: 0xBCEA, + 49641 - 44032: 0x99D4, + 49642 - 44032: 0x99D5, + 49643 - 44032: 0x99D6, + 49644 - 44032: 0x99D7, + 49645 - 44032: 0x99D8, + 49646 - 44032: 0x99D9, + 49647 - 44032: 0x99DA, + 49648 - 44032: 0xBCEB, + 49649 - 44032: 0xBCEC, + 49650 - 44032: 0x99DB, + 49651 - 44032: 0xBCED, + 49652 - 44032: 0x99DC, + 49653 - 44032: 0x99DD, + 49654 - 44032: 0x99DE, + 49655 - 44032: 0x99DF, + 49656 - 44032: 0x99E0, + 49657 - 44032: 0x99E1, + 49658 - 44032: 0x99E2, + 49659 - 44032: 0x99E3, + 49660 - 44032: 0xBCEE, + 49661 - 44032: 0xBCEF, + 49662 - 44032: 0x99E4, + 49663 - 44032: 0x99E5, + 49664 - 44032: 0xBCF0, + 49665 - 44032: 0x99E6, + 49666 - 44032: 0x99E7, + 49667 - 44032: 0x99E8, + 49668 - 44032: 0xBCF1, + 49669 - 44032: 0x99E9, + 49670 - 44032: 0x99EA, + 49671 - 44032: 0x99EB, + 49672 - 44032: 0x99EC, + 49673 - 44032: 0x99ED, + 49674 - 44032: 0x99EE, + 49675 - 44032: 0x99EF, + 49676 - 44032: 0xBCF2, + 49677 - 44032: 0xBCF3, + 49678 - 44032: 0x99F0, + 49679 - 44032: 0xBCF4, + 49680 - 44032: 0x99F1, + 49681 - 44032: 0xBCF5, + 49682 - 44032: 0x99F2, + 49683 - 44032: 0x99F3, + 49684 - 44032: 0x99F4, + 49685 - 44032: 0x99F5, + 49686 - 44032: 0x99F6, + 49687 - 44032: 0x99F7, + 49688 - 44032: 0xBCF6, + 49689 - 44032: 0xBCF7, + 49690 - 44032: 0x99F8, + 49691 - 44032: 0x99F9, + 49692 - 44032: 0xBCF8, + 49693 - 44032: 0x99FA, + 49694 - 44032: 0x99FB, + 49695 - 44032: 0xBCF9, + 49696 - 44032: 0xBCFA, + 49697 - 44032: 0x99FC, + 49698 - 44032: 0x99FD, + 49699 - 44032: 0x99FE, + 49700 - 44032: 0x9A41, + 49701 - 44032: 0x9A42, + 49702 - 44032: 0x9A43, + 49703 - 44032: 0x9A44, + 49704 - 44032: 0xBCFB, + 49705 - 44032: 0xBCFC, + 49706 - 44032: 0x9A45, + 49707 - 44032: 0xBCFD, + 49708 - 44032: 0x9A46, + 49709 - 44032: 0xBCFE, + 49710 - 44032: 0x9A47, + 49711 - 44032: 0xBDA1, + 49712 - 44032: 0x9A48, + 49713 - 44032: 0xBDA2, + 49714 - 44032: 0xBDA3, + 49715 - 44032: 0x9A49, + 49716 - 44032: 0xBDA4, + 49717 - 44032: 0x9A4A, + 49718 - 44032: 0x9A4B, + 49719 - 44032: 0x9A4C, + 49720 - 44032: 0x9A4D, + 49721 - 44032: 0x9A4E, + 49722 - 44032: 0x9A4F, + 49723 - 44032: 0x9A50, + 49724 - 44032: 0x9A51, + 49725 - 44032: 0x9A52, + 49726 - 44032: 0x9A53, + 49727 - 44032: 0x9A54, + 49728 - 44032: 0x9A55, + 49729 - 44032: 0x9A56, + 49730 - 44032: 0x9A57, + 49731 - 44032: 0x9A58, + 49732 - 44032: 0x9A59, + 49733 - 44032: 0x9A5A, + 49734 - 44032: 0x9A61, + 49735 - 44032: 0x9A62, + 49736 - 44032: 0xBDA5, + 49737 - 44032: 0x9A63, + 49738 - 44032: 0x9A64, + 49739 - 44032: 0x9A65, + 49740 - 44032: 0x9A66, + 49741 - 44032: 0x9A67, + 49742 - 44032: 0x9A68, + 49743 - 44032: 0x9A69, + 49744 - 44032: 0xBDA6, + 49745 - 44032: 0xBDA7, + 49746 - 44032: 0x9A6A, + 49747 - 44032: 0x9A6B, + 49748 - 44032: 0xBDA8, + 49749 - 44032: 0x9A6C, + 49750 - 44032: 0x9A6D, + 49751 - 44032: 0x9A6E, + 49752 - 44032: 0xBDA9, + 49753 - 44032: 0x9A6F, + 49754 - 44032: 0x9A70, + 49755 - 44032: 0x9A71, + 49756 - 44032: 0x9A72, + 49757 - 44032: 0x9A73, + 49758 - 44032: 0x9A74, + 49759 - 44032: 0x9A75, + 49760 - 44032: 0xBDAA, + 49761 - 44032: 0x9A76, + 49762 - 44032: 0x9A77, + 49763 - 44032: 0x9A78, + 49764 - 44032: 0x9A79, + 49765 - 44032: 0xBDAB, + 49766 - 44032: 0x9A7A, + 49767 - 44032: 0x9A81, + 49768 - 44032: 0x9A82, + 49769 - 44032: 0x9A83, + 49770 - 44032: 0x9A84, + 49771 - 44032: 0x9A85, + 49772 - 44032: 0xBDAC, + 49773 - 44032: 0xBDAD, + 49774 - 44032: 0x9A86, + 49775 - 44032: 0x9A87, + 49776 - 44032: 0xBDAE, + 49777 - 44032: 0x9A88, + 49778 - 44032: 0x9A89, + 49779 - 44032: 0x9A8A, + 49780 - 44032: 0xBDAF, + 49781 - 44032: 0x9A8B, + 49782 - 44032: 0x9A8C, + 49783 - 44032: 0x9A8D, + 49784 - 44032: 0x9A8E, + 49785 - 44032: 0x9A8F, + 49786 - 44032: 0x9A90, + 49787 - 44032: 0x9A91, + 49788 - 44032: 0xBDB0, + 49789 - 44032: 0xBDB1, + 49790 - 44032: 0x9A92, + 49791 - 44032: 0xBDB2, + 49792 - 44032: 0x9A93, + 49793 - 44032: 0xBDB3, + 49794 - 44032: 0x9A94, + 49795 - 44032: 0x9A95, + 49796 - 44032: 0x9A96, + 49797 - 44032: 0x9A97, + 49798 - 44032: 0x9A98, + 49799 - 44032: 0x9A99, + 49800 - 44032: 0xBDB4, + 49801 - 44032: 0xBDB5, + 49802 - 44032: 0x9A9A, + 49803 - 44032: 0x9A9B, + 49804 - 44032: 0x9A9C, + 49805 - 44032: 0x9A9D, + 49806 - 44032: 0x9A9E, + 49807 - 44032: 0x9A9F, + 49808 - 44032: 0xBDB6, + 49809 - 44032: 0x9AA0, + 49810 - 44032: 0x9AA1, + 49811 - 44032: 0x9AA2, + 49812 - 44032: 0x9AA3, + 49813 - 44032: 0x9AA4, + 49814 - 44032: 0x9AA5, + 49815 - 44032: 0x9AA6, + 49816 - 44032: 0xBDB7, + 49817 - 44032: 0x9AA7, + 49818 - 44032: 0x9AA8, + 49819 - 44032: 0xBDB8, + 49820 - 44032: 0x9AA9, + 49821 - 44032: 0xBDB9, + 49822 - 44032: 0x9AAA, + 49823 - 44032: 0x9AAB, + 49824 - 44032: 0x9AAC, + 49825 - 44032: 0x9AAD, + 49826 - 44032: 0x9AAE, + 49827 - 44032: 0x9AAF, + 49828 - 44032: 0xBDBA, + 49829 - 44032: 0xBDBB, + 49830 - 44032: 0x9AB0, + 49831 - 44032: 0x9AB1, + 49832 - 44032: 0xBDBC, + 49833 - 44032: 0x9AB2, + 49834 - 44032: 0x9AB3, + 49835 - 44032: 0x9AB4, + 49836 - 44032: 0xBDBD, + 49837 - 44032: 0xBDBE, + 49838 - 44032: 0x9AB5, + 49839 - 44032: 0x9AB6, + 49840 - 44032: 0x9AB7, + 49841 - 44032: 0x9AB8, + 49842 - 44032: 0x9AB9, + 49843 - 44032: 0x9ABA, + 49844 - 44032: 0xBDBF, + 49845 - 44032: 0xBDC0, + 49846 - 44032: 0x9ABB, + 49847 - 44032: 0xBDC1, + 49848 - 44032: 0x9ABC, + 49849 - 44032: 0xBDC2, + 49850 - 44032: 0x9ABD, + 49851 - 44032: 0x9ABE, + 49852 - 44032: 0x9ABF, + 49853 - 44032: 0x9AC0, + 49854 - 44032: 0x9AC1, + 49855 - 44032: 0x9AC2, + 49856 - 44032: 0x9AC3, + 49857 - 44032: 0x9AC4, + 49858 - 44032: 0x9AC5, + 49859 - 44032: 0x9AC6, + 49860 - 44032: 0x9AC7, + 49861 - 44032: 0x9AC8, + 49862 - 44032: 0x9AC9, + 49863 - 44032: 0x9ACA, + 49864 - 44032: 0x9ACB, + 49865 - 44032: 0x9ACC, + 49866 - 44032: 0x9ACD, + 49867 - 44032: 0x9ACE, + 49868 - 44032: 0x9ACF, + 49869 - 44032: 0x9AD0, + 49870 - 44032: 0x9AD1, + 49871 - 44032: 0x9AD2, + 49872 - 44032: 0x9AD3, + 49873 - 44032: 0x9AD4, + 49874 - 44032: 0x9AD5, + 49875 - 44032: 0x9AD6, + 49876 - 44032: 0x9AD7, + 49877 - 44032: 0x9AD8, + 49878 - 44032: 0x9AD9, + 49879 - 44032: 0x9ADA, + 49880 - 44032: 0x9ADB, + 49881 - 44032: 0x9ADC, + 49882 - 44032: 0x9ADD, + 49883 - 44032: 0x9ADE, + 49884 - 44032: 0xBDC3, + 49885 - 44032: 0xBDC4, + 49886 - 44032: 0x9ADF, + 49887 - 44032: 0x9AE0, + 49888 - 44032: 0xBDC5, + 49889 - 44032: 0x9AE1, + 49890 - 44032: 0x9AE2, + 49891 - 44032: 0xBDC6, + 49892 - 44032: 0xBDC7, + 49893 - 44032: 0x9AE3, + 49894 - 44032: 0x9AE4, + 49895 - 44032: 0x9AE5, + 49896 - 44032: 0x9AE6, + 49897 - 44032: 0x9AE7, + 49898 - 44032: 0x9AE8, + 49899 - 44032: 0xBDC8, + 49900 - 44032: 0xBDC9, + 49901 - 44032: 0xBDCA, + 49902 - 44032: 0x9AE9, + 49903 - 44032: 0xBDCB, + 49904 - 44032: 0x9AEA, + 49905 - 44032: 0xBDCC, + 49906 - 44032: 0x9AEB, + 49907 - 44032: 0x9AEC, + 49908 - 44032: 0x9AED, + 49909 - 44032: 0x9AEE, + 49910 - 44032: 0xBDCD, + 49911 - 44032: 0x9AEF, + 49912 - 44032: 0xBDCE, + 49913 - 44032: 0xBDCF, + 49914 - 44032: 0x9AF0, + 49915 - 44032: 0xBDD0, + 49916 - 44032: 0xBDD1, + 49917 - 44032: 0x9AF1, + 49918 - 44032: 0x9AF2, + 49919 - 44032: 0x9AF3, + 49920 - 44032: 0xBDD2, + 49921 - 44032: 0x9AF4, + 49922 - 44032: 0x9AF5, + 49923 - 44032: 0x9AF6, + 49924 - 44032: 0x9AF7, + 49925 - 44032: 0x9AF8, + 49926 - 44032: 0x9AF9, + 49927 - 44032: 0x9AFA, + 49928 - 44032: 0xBDD3, + 49929 - 44032: 0xBDD4, + 49930 - 44032: 0x9AFB, + 49931 - 44032: 0x9AFC, + 49932 - 44032: 0xBDD5, + 49933 - 44032: 0xBDD6, + 49934 - 44032: 0x9AFD, + 49935 - 44032: 0x9AFE, + 49936 - 44032: 0x9B41, + 49937 - 44032: 0x9B42, + 49938 - 44032: 0x9B43, + 49939 - 44032: 0xBDD7, + 49940 - 44032: 0xBDD8, + 49941 - 44032: 0xBDD9, + 49942 - 44032: 0x9B44, + 49943 - 44032: 0x9B45, + 49944 - 44032: 0xBDDA, + 49945 - 44032: 0x9B46, + 49946 - 44032: 0x9B47, + 49947 - 44032: 0x9B48, + 49948 - 44032: 0xBDDB, + 49949 - 44032: 0x9B49, + 49950 - 44032: 0x9B4A, + 49951 - 44032: 0x9B4B, + 49952 - 44032: 0x9B4C, + 49953 - 44032: 0x9B4D, + 49954 - 44032: 0x9B4E, + 49955 - 44032: 0x9B4F, + 49956 - 44032: 0xBDDC, + 49957 - 44032: 0xBDDD, + 49958 - 44032: 0x9B50, + 49959 - 44032: 0x9B51, + 49960 - 44032: 0xBDDE, + 49961 - 44032: 0xBDDF, + 49962 - 44032: 0x9B52, + 49963 - 44032: 0x9B53, + 49964 - 44032: 0x9B54, + 49965 - 44032: 0x9B55, + 49966 - 44032: 0x9B56, + 49967 - 44032: 0x9B57, + 49968 - 44032: 0x9B58, + 49969 - 44032: 0x9B59, + 49970 - 44032: 0x9B5A, + 49971 - 44032: 0x9B61, + 49972 - 44032: 0x9B62, + 49973 - 44032: 0x9B63, + 49974 - 44032: 0x9B64, + 49975 - 44032: 0x9B65, + 49976 - 44032: 0x9B66, + 49977 - 44032: 0x9B67, + 49978 - 44032: 0x9B68, + 49979 - 44032: 0x9B69, + 49980 - 44032: 0x9B6A, + 49981 - 44032: 0x9B6B, + 49982 - 44032: 0x9B6C, + 49983 - 44032: 0x9B6D, + 49984 - 44032: 0x9B6E, + 49985 - 44032: 0x9B6F, + 49986 - 44032: 0x9B70, + 49987 - 44032: 0x9B71, + 49988 - 44032: 0x9B72, + 49989 - 44032: 0xBDE0, + 49990 - 44032: 0x9B73, + 49991 - 44032: 0x9B74, + 49992 - 44032: 0x9B75, + 49993 - 44032: 0x9B76, + 49994 - 44032: 0x9B77, + 49995 - 44032: 0x9B78, + 49996 - 44032: 0x9B79, + 49997 - 44032: 0x9B7A, + 49998 - 44032: 0x9B81, + 49999 - 44032: 0x9B82, + 50000 - 44032: 0x9B83, + 50001 - 44032: 0x9B84, + 50002 - 44032: 0x9B85, + 50003 - 44032: 0x9B86, + 50004 - 44032: 0x9B87, + 50005 - 44032: 0x9B88, + 50006 - 44032: 0x9B89, + 50007 - 44032: 0x9B8A, + 50008 - 44032: 0x9B8B, + 50009 - 44032: 0x9B8C, + 50010 - 44032: 0x9B8D, + 50011 - 44032: 0x9B8E, + 50012 - 44032: 0x9B8F, + 50013 - 44032: 0x9B90, + 50014 - 44032: 0x9B91, + 50015 - 44032: 0x9B92, + 50016 - 44032: 0x9B93, + 50017 - 44032: 0x9B94, + 50018 - 44032: 0x9B95, + 50019 - 44032: 0x9B96, + 50020 - 44032: 0x9B97, + 50021 - 44032: 0x9B98, + 50022 - 44032: 0x9B99, + 50023 - 44032: 0x9B9A, + 50024 - 44032: 0xBDE1, + 50025 - 44032: 0xBDE2, + 50026 - 44032: 0x9B9B, + 50027 - 44032: 0x9B9C, + 50028 - 44032: 0xBDE3, + 50029 - 44032: 0x9B9D, + 50030 - 44032: 0x9B9E, + 50031 - 44032: 0x9B9F, + 50032 - 44032: 0xBDE4, + 50033 - 44032: 0x9BA0, + 50034 - 44032: 0xBDE5, + 50035 - 44032: 0x9BA1, + 50036 - 44032: 0x9BA2, + 50037 - 44032: 0x9BA3, + 50038 - 44032: 0x9BA4, + 50039 - 44032: 0x9BA5, + 50040 - 44032: 0xBDE6, + 50041 - 44032: 0xBDE7, + 50042 - 44032: 0x9BA6, + 50043 - 44032: 0x9BA7, + 50044 - 44032: 0xBDE8, + 50045 - 44032: 0xBDE9, + 50046 - 44032: 0x9BA8, + 50047 - 44032: 0x9BA9, + 50048 - 44032: 0x9BAA, + 50049 - 44032: 0x9BAB, + 50050 - 44032: 0x9BAC, + 50051 - 44032: 0x9BAD, + 50052 - 44032: 0xBDEA, + 50053 - 44032: 0x9BAE, + 50054 - 44032: 0x9BAF, + 50055 - 44032: 0x9BB0, + 50056 - 44032: 0xBDEB, + 50057 - 44032: 0x9BB1, + 50058 - 44032: 0x9BB2, + 50059 - 44032: 0x9BB3, + 50060 - 44032: 0xBDEC, + 50061 - 44032: 0x9BB4, + 50062 - 44032: 0x9BB5, + 50063 - 44032: 0x9BB6, + 50064 - 44032: 0x9BB7, + 50065 - 44032: 0x9BB8, + 50066 - 44032: 0x9BB9, + 50067 - 44032: 0x9BBA, + 50068 - 44032: 0x9BBB, + 50069 - 44032: 0x9BBC, + 50070 - 44032: 0x9BBD, + 50071 - 44032: 0x9BBE, + 50072 - 44032: 0x9BBF, + 50073 - 44032: 0x9BC0, + 50074 - 44032: 0x9BC1, + 50075 - 44032: 0x9BC2, + 50076 - 44032: 0x9BC3, + 50077 - 44032: 0x9BC4, + 50078 - 44032: 0x9BC5, + 50079 - 44032: 0x9BC6, + 50080 - 44032: 0x9BC7, + 50081 - 44032: 0x9BC8, + 50082 - 44032: 0x9BC9, + 50083 - 44032: 0x9BCA, + 50084 - 44032: 0x9BCB, + 50085 - 44032: 0x9BCC, + 50086 - 44032: 0x9BCD, + 50087 - 44032: 0x9BCE, + 50088 - 44032: 0x9BCF, + 50089 - 44032: 0x9BD0, + 50090 - 44032: 0x9BD1, + 50091 - 44032: 0x9BD2, + 50092 - 44032: 0x9BD3, + 50093 - 44032: 0x9BD4, + 50094 - 44032: 0x9BD5, + 50095 - 44032: 0x9BD6, + 50096 - 44032: 0x9BD7, + 50097 - 44032: 0x9BD8, + 50098 - 44032: 0x9BD9, + 50099 - 44032: 0x9BDA, + 50100 - 44032: 0x9BDB, + 50101 - 44032: 0x9BDC, + 50102 - 44032: 0x9BDD, + 50103 - 44032: 0x9BDE, + 50104 - 44032: 0x9BDF, + 50105 - 44032: 0x9BE0, + 50106 - 44032: 0x9BE1, + 50107 - 44032: 0x9BE2, + 50108 - 44032: 0x9BE3, + 50109 - 44032: 0x9BE4, + 50110 - 44032: 0x9BE5, + 50111 - 44032: 0x9BE6, + 50112 - 44032: 0xBDED, + 50113 - 44032: 0x9BE7, + 50114 - 44032: 0x9BE8, + 50115 - 44032: 0x9BE9, + 50116 - 44032: 0x9BEA, + 50117 - 44032: 0x9BEB, + 50118 - 44032: 0x9BEC, + 50119 - 44032: 0x9BED, + 50120 - 44032: 0x9BEE, + 50121 - 44032: 0x9BEF, + 50122 - 44032: 0x9BF0, + 50123 - 44032: 0x9BF1, + 50124 - 44032: 0x9BF2, + 50125 - 44032: 0x9BF3, + 50126 - 44032: 0x9BF4, + 50127 - 44032: 0x9BF5, + 50128 - 44032: 0x9BF6, + 50129 - 44032: 0x9BF7, + 50130 - 44032: 0x9BF8, + 50131 - 44032: 0x9BF9, + 50132 - 44032: 0x9BFA, + 50133 - 44032: 0x9BFB, + 50134 - 44032: 0x9BFC, + 50135 - 44032: 0x9BFD, + 50136 - 44032: 0xBDEE, + 50137 - 44032: 0xBDEF, + 50138 - 44032: 0x9BFE, + 50139 - 44032: 0x9C41, + 50140 - 44032: 0xBDF0, + 50141 - 44032: 0x9C42, + 50142 - 44032: 0x9C43, + 50143 - 44032: 0xBDF1, + 50144 - 44032: 0xBDF2, + 50145 - 44032: 0x9C44, + 50146 - 44032: 0xBDF3, + 50147 - 44032: 0x9C45, + 50148 - 44032: 0x9C46, + 50149 - 44032: 0x9C47, + 50150 - 44032: 0x9C48, + 50151 - 44032: 0x9C49, + 50152 - 44032: 0xBDF4, + 50153 - 44032: 0xBDF5, + 50154 - 44032: 0x9C4A, + 50155 - 44032: 0x9C4B, + 50156 - 44032: 0x9C4C, + 50157 - 44032: 0xBDF6, + 50158 - 44032: 0x9C4D, + 50159 - 44032: 0x9C4E, + 50160 - 44032: 0x9C4F, + 50161 - 44032: 0x9C50, + 50162 - 44032: 0x9C51, + 50163 - 44032: 0x9C52, + 50164 - 44032: 0xBDF7, + 50165 - 44032: 0xBDF8, + 50166 - 44032: 0x9C53, + 50167 - 44032: 0x9C54, + 50168 - 44032: 0xBDF9, + 50169 - 44032: 0x9C55, + 50170 - 44032: 0x9C56, + 50171 - 44032: 0x9C57, + 50172 - 44032: 0x9C58, + 50173 - 44032: 0x9C59, + 50174 - 44032: 0x9C5A, + 50175 - 44032: 0x9C61, + 50176 - 44032: 0x9C62, + 50177 - 44032: 0x9C63, + 50178 - 44032: 0x9C64, + 50179 - 44032: 0x9C65, + 50180 - 44032: 0x9C66, + 50181 - 44032: 0x9C67, + 50182 - 44032: 0x9C68, + 50183 - 44032: 0x9C69, + 50184 - 44032: 0xBDFA, + 50185 - 44032: 0x9C6A, + 50186 - 44032: 0x9C6B, + 50187 - 44032: 0x9C6C, + 50188 - 44032: 0x9C6D, + 50189 - 44032: 0x9C6E, + 50190 - 44032: 0x9C6F, + 50191 - 44032: 0x9C70, + 50192 - 44032: 0xBDFB, + 50193 - 44032: 0x9C71, + 50194 - 44032: 0x9C72, + 50195 - 44032: 0x9C73, + 50196 - 44032: 0x9C74, + 50197 - 44032: 0x9C75, + 50198 - 44032: 0x9C76, + 50199 - 44032: 0x9C77, + 50200 - 44032: 0x9C78, + 50201 - 44032: 0x9C79, + 50202 - 44032: 0x9C7A, + 50203 - 44032: 0x9C81, + 50204 - 44032: 0x9C82, + 50205 - 44032: 0x9C83, + 50206 - 44032: 0x9C84, + 50207 - 44032: 0x9C85, + 50208 - 44032: 0x9C86, + 50209 - 44032: 0x9C87, + 50210 - 44032: 0x9C88, + 50211 - 44032: 0x9C89, + 50212 - 44032: 0xBDFC, + 50213 - 44032: 0x9C8A, + 50214 - 44032: 0x9C8B, + 50215 - 44032: 0x9C8C, + 50216 - 44032: 0x9C8D, + 50217 - 44032: 0x9C8E, + 50218 - 44032: 0x9C8F, + 50219 - 44032: 0x9C90, + 50220 - 44032: 0xBDFD, + 50221 - 44032: 0x9C91, + 50222 - 44032: 0x9C92, + 50223 - 44032: 0x9C93, + 50224 - 44032: 0xBDFE, + 50225 - 44032: 0x9C94, + 50226 - 44032: 0x9C95, + 50227 - 44032: 0x9C96, + 50228 - 44032: 0xBEA1, + 50229 - 44032: 0x9C97, + 50230 - 44032: 0x9C98, + 50231 - 44032: 0x9C99, + 50232 - 44032: 0x9C9A, + 50233 - 44032: 0x9C9B, + 50234 - 44032: 0x9C9C, + 50235 - 44032: 0x9C9D, + 50236 - 44032: 0xBEA2, + 50237 - 44032: 0xBEA3, + 50238 - 44032: 0x9C9E, + 50239 - 44032: 0x9C9F, + 50240 - 44032: 0x9CA0, + 50241 - 44032: 0x9CA1, + 50242 - 44032: 0x9CA2, + 50243 - 44032: 0x9CA3, + 50244 - 44032: 0x9CA4, + 50245 - 44032: 0x9CA5, + 50246 - 44032: 0x9CA6, + 50247 - 44032: 0x9CA7, + 50248 - 44032: 0xBEA4, + 50249 - 44032: 0x9CA8, + 50250 - 44032: 0x9CA9, + 50251 - 44032: 0x9CAA, + 50252 - 44032: 0x9CAB, + 50253 - 44032: 0x9CAC, + 50254 - 44032: 0x9CAD, + 50255 - 44032: 0x9CAE, + 50256 - 44032: 0x9CAF, + 50257 - 44032: 0x9CB0, + 50258 - 44032: 0x9CB1, + 50259 - 44032: 0x9CB2, + 50260 - 44032: 0x9CB3, + 50261 - 44032: 0x9CB4, + 50262 - 44032: 0x9CB5, + 50263 - 44032: 0x9CB6, + 50264 - 44032: 0x9CB7, + 50265 - 44032: 0x9CB8, + 50266 - 44032: 0x9CB9, + 50267 - 44032: 0x9CBA, + 50268 - 44032: 0x9CBB, + 50269 - 44032: 0x9CBC, + 50270 - 44032: 0x9CBD, + 50271 - 44032: 0x9CBE, + 50272 - 44032: 0x9CBF, + 50273 - 44032: 0x9CC0, + 50274 - 44032: 0x9CC1, + 50275 - 44032: 0x9CC2, + 50276 - 44032: 0xBEA5, + 50277 - 44032: 0xBEA6, + 50278 - 44032: 0x9CC3, + 50279 - 44032: 0x9CC4, + 50280 - 44032: 0xBEA7, + 50281 - 44032: 0x9CC5, + 50282 - 44032: 0x9CC6, + 50283 - 44032: 0x9CC7, + 50284 - 44032: 0xBEA8, + 50285 - 44032: 0x9CC8, + 50286 - 44032: 0x9CC9, + 50287 - 44032: 0x9CCA, + 50288 - 44032: 0x9CCB, + 50289 - 44032: 0x9CCC, + 50290 - 44032: 0x9CCD, + 50291 - 44032: 0x9CCE, + 50292 - 44032: 0xBEA9, + 50293 - 44032: 0xBEAA, + 50294 - 44032: 0x9CCF, + 50295 - 44032: 0x9CD0, + 50296 - 44032: 0x9CD1, + 50297 - 44032: 0xBEAB, + 50298 - 44032: 0x9CD2, + 50299 - 44032: 0x9CD3, + 50300 - 44032: 0x9CD4, + 50301 - 44032: 0x9CD5, + 50302 - 44032: 0x9CD6, + 50303 - 44032: 0x9CD7, + 50304 - 44032: 0xBEAC, + 50305 - 44032: 0x9CD8, + 50306 - 44032: 0x9CD9, + 50307 - 44032: 0x9CDA, + 50308 - 44032: 0x9CDB, + 50309 - 44032: 0x9CDC, + 50310 - 44032: 0x9CDD, + 50311 - 44032: 0x9CDE, + 50312 - 44032: 0x9CDF, + 50313 - 44032: 0x9CE0, + 50314 - 44032: 0x9CE1, + 50315 - 44032: 0x9CE2, + 50316 - 44032: 0x9CE3, + 50317 - 44032: 0x9CE4, + 50318 - 44032: 0x9CE5, + 50319 - 44032: 0x9CE6, + 50320 - 44032: 0x9CE7, + 50321 - 44032: 0x9CE8, + 50322 - 44032: 0x9CE9, + 50323 - 44032: 0x9CEA, + 50324 - 44032: 0xBEAD, + 50325 - 44032: 0x9CEB, + 50326 - 44032: 0x9CEC, + 50327 - 44032: 0x9CED, + 50328 - 44032: 0x9CEE, + 50329 - 44032: 0x9CEF, + 50330 - 44032: 0x9CF0, + 50331 - 44032: 0x9CF1, + 50332 - 44032: 0xBEAE, + 50333 - 44032: 0x9CF2, + 50334 - 44032: 0x9CF3, + 50335 - 44032: 0x9CF4, + 50336 - 44032: 0x9CF5, + 50337 - 44032: 0x9CF6, + 50338 - 44032: 0x9CF7, + 50339 - 44032: 0x9CF8, + 50340 - 44032: 0x9CF9, + 50341 - 44032: 0x9CFA, + 50342 - 44032: 0x9CFB, + 50343 - 44032: 0x9CFC, + 50344 - 44032: 0x9CFD, + 50345 - 44032: 0x9CFE, + 50346 - 44032: 0x9D41, + 50347 - 44032: 0x9D42, + 50348 - 44032: 0x9D43, + 50349 - 44032: 0x9D44, + 50350 - 44032: 0x9D45, + 50351 - 44032: 0x9D46, + 50352 - 44032: 0x9D47, + 50353 - 44032: 0x9D48, + 50354 - 44032: 0x9D49, + 50355 - 44032: 0x9D4A, + 50356 - 44032: 0x9D4B, + 50357 - 44032: 0x9D4C, + 50358 - 44032: 0x9D4D, + 50359 - 44032: 0x9D4E, + 50360 - 44032: 0xBEAF, + 50361 - 44032: 0x9D4F, + 50362 - 44032: 0x9D50, + 50363 - 44032: 0x9D51, + 50364 - 44032: 0xBEB0, + 50365 - 44032: 0x9D52, + 50366 - 44032: 0x9D53, + 50367 - 44032: 0x9D54, + 50368 - 44032: 0x9D55, + 50369 - 44032: 0x9D56, + 50370 - 44032: 0x9D57, + 50371 - 44032: 0x9D58, + 50372 - 44032: 0x9D59, + 50373 - 44032: 0x9D5A, + 50374 - 44032: 0x9D61, + 50375 - 44032: 0x9D62, + 50376 - 44032: 0x9D63, + 50377 - 44032: 0x9D64, + 50378 - 44032: 0x9D65, + 50379 - 44032: 0x9D66, + 50380 - 44032: 0x9D67, + 50381 - 44032: 0x9D68, + 50382 - 44032: 0x9D69, + 50383 - 44032: 0x9D6A, + 50384 - 44032: 0x9D6B, + 50385 - 44032: 0x9D6C, + 50386 - 44032: 0x9D6D, + 50387 - 44032: 0x9D6E, + 50388 - 44032: 0x9D6F, + 50389 - 44032: 0x9D70, + 50390 - 44032: 0x9D71, + 50391 - 44032: 0x9D72, + 50392 - 44032: 0x9D73, + 50393 - 44032: 0x9D74, + 50394 - 44032: 0x9D75, + 50395 - 44032: 0x9D76, + 50396 - 44032: 0x9D77, + 50397 - 44032: 0x9D78, + 50398 - 44032: 0x9D79, + 50399 - 44032: 0x9D7A, + 50400 - 44032: 0x9D81, + 50401 - 44032: 0x9D82, + 50402 - 44032: 0x9D83, + 50403 - 44032: 0x9D84, + 50404 - 44032: 0x9D85, + 50405 - 44032: 0x9D86, + 50406 - 44032: 0x9D87, + 50407 - 44032: 0x9D88, + 50408 - 44032: 0x9D89, + 50409 - 44032: 0xBEB1, + 50410 - 44032: 0x9D8A, + 50411 - 44032: 0x9D8B, + 50412 - 44032: 0x9D8C, + 50413 - 44032: 0x9D8D, + 50414 - 44032: 0x9D8E, + 50415 - 44032: 0x9D8F, + 50416 - 44032: 0xBEB2, + 50417 - 44032: 0xBEB3, + 50418 - 44032: 0x9D90, + 50419 - 44032: 0x9D91, + 50420 - 44032: 0xBEB4, + 50421 - 44032: 0x9D92, + 50422 - 44032: 0x9D93, + 50423 - 44032: 0x9D94, + 50424 - 44032: 0xBEB5, + 50425 - 44032: 0x9D95, + 50426 - 44032: 0xBEB6, + 50427 - 44032: 0x9D96, + 50428 - 44032: 0x9D97, + 50429 - 44032: 0x9D98, + 50430 - 44032: 0x9D99, + 50431 - 44032: 0xBEB7, + 50432 - 44032: 0xBEB8, + 50433 - 44032: 0xBEB9, + 50434 - 44032: 0x9D9A, + 50435 - 44032: 0x9D9B, + 50436 - 44032: 0x9D9C, + 50437 - 44032: 0x9D9D, + 50438 - 44032: 0x9D9E, + 50439 - 44032: 0x9D9F, + 50440 - 44032: 0x9DA0, + 50441 - 44032: 0x9DA1, + 50442 - 44032: 0x9DA2, + 50443 - 44032: 0x9DA3, + 50444 - 44032: 0xBEBA, + 50445 - 44032: 0x9DA4, + 50446 - 44032: 0x9DA5, + 50447 - 44032: 0x9DA6, + 50448 - 44032: 0xBEBB, + 50449 - 44032: 0x9DA7, + 50450 - 44032: 0x9DA8, + 50451 - 44032: 0x9DA9, + 50452 - 44032: 0xBEBC, + 50453 - 44032: 0x9DAA, + 50454 - 44032: 0x9DAB, + 50455 - 44032: 0x9DAC, + 50456 - 44032: 0x9DAD, + 50457 - 44032: 0x9DAE, + 50458 - 44032: 0x9DAF, + 50459 - 44032: 0x9DB0, + 50460 - 44032: 0xBEBD, + 50461 - 44032: 0x9DB1, + 50462 - 44032: 0x9DB2, + 50463 - 44032: 0x9DB3, + 50464 - 44032: 0x9DB4, + 50465 - 44032: 0x9DB5, + 50466 - 44032: 0x9DB6, + 50467 - 44032: 0x9DB7, + 50468 - 44032: 0x9DB8, + 50469 - 44032: 0x9DB9, + 50470 - 44032: 0x9DBA, + 50471 - 44032: 0x9DBB, + 50472 - 44032: 0xBEBE, + 50473 - 44032: 0xBEBF, + 50474 - 44032: 0x9DBC, + 50475 - 44032: 0x9DBD, + 50476 - 44032: 0xBEC0, + 50477 - 44032: 0x9DBE, + 50478 - 44032: 0x9DBF, + 50479 - 44032: 0x9DC0, + 50480 - 44032: 0xBEC1, + 50481 - 44032: 0x9DC1, + 50482 - 44032: 0x9DC2, + 50483 - 44032: 0x9DC3, + 50484 - 44032: 0x9DC4, + 50485 - 44032: 0x9DC5, + 50486 - 44032: 0x9DC6, + 50487 - 44032: 0x9DC7, + 50488 - 44032: 0xBEC2, + 50489 - 44032: 0xBEC3, + 50490 - 44032: 0x9DC8, + 50491 - 44032: 0xBEC4, + 50492 - 44032: 0x9DC9, + 50493 - 44032: 0xBEC5, + 50494 - 44032: 0x9DCA, + 50495 - 44032: 0x9DCB, + 50496 - 44032: 0x9DCC, + 50497 - 44032: 0x9DCD, + 50498 - 44032: 0x9DCE, + 50499 - 44032: 0x9DCF, + 50500 - 44032: 0xBEC6, + 50501 - 44032: 0xBEC7, + 50502 - 44032: 0x9DD0, + 50503 - 44032: 0x9DD1, + 50504 - 44032: 0xBEC8, + 50505 - 44032: 0xBEC9, + 50506 - 44032: 0xBECA, + 50507 - 44032: 0x9DD2, + 50508 - 44032: 0xBECB, + 50509 - 44032: 0xBECC, + 50510 - 44032: 0xBECD, + 50511 - 44032: 0x9DD3, + 50512 - 44032: 0x9DD4, + 50513 - 44032: 0x9DD5, + 50514 - 44032: 0x9DD6, + 50515 - 44032: 0xBECE, + 50516 - 44032: 0xBECF, + 50517 - 44032: 0xBED0, + 50518 - 44032: 0x9DD7, + 50519 - 44032: 0xBED1, + 50520 - 44032: 0xBED2, + 50521 - 44032: 0xBED3, + 50522 - 44032: 0x9DD8, + 50523 - 44032: 0x9DD9, + 50524 - 44032: 0x9DDA, + 50525 - 44032: 0xBED4, + 50526 - 44032: 0xBED5, + 50527 - 44032: 0x9DDB, + 50528 - 44032: 0xBED6, + 50529 - 44032: 0xBED7, + 50530 - 44032: 0x9DDC, + 50531 - 44032: 0x9DDD, + 50532 - 44032: 0xBED8, + 50533 - 44032: 0x9DDE, + 50534 - 44032: 0x9DDF, + 50535 - 44032: 0x9DE0, + 50536 - 44032: 0xBED9, + 50537 - 44032: 0x9DE1, + 50538 - 44032: 0x9DE2, + 50539 - 44032: 0x9DE3, + 50540 - 44032: 0x9DE4, + 50541 - 44032: 0x9DE5, + 50542 - 44032: 0x9DE6, + 50543 - 44032: 0x9DE7, + 50544 - 44032: 0xBEDA, + 50545 - 44032: 0xBEDB, + 50546 - 44032: 0x9DE8, + 50547 - 44032: 0xBEDC, + 50548 - 44032: 0xBEDD, + 50549 - 44032: 0xBEDE, + 50550 - 44032: 0x9DE9, + 50551 - 44032: 0x9DEA, + 50552 - 44032: 0x9DEB, + 50553 - 44032: 0x9DEC, + 50554 - 44032: 0x9DED, + 50555 - 44032: 0x9DEE, + 50556 - 44032: 0xBEDF, + 50557 - 44032: 0xBEE0, + 50558 - 44032: 0x9DEF, + 50559 - 44032: 0x9DF0, + 50560 - 44032: 0xBEE1, + 50561 - 44032: 0x9DF1, + 50562 - 44032: 0x9DF2, + 50563 - 44032: 0x9DF3, + 50564 - 44032: 0xBEE2, + 50565 - 44032: 0x9DF4, + 50566 - 44032: 0x9DF5, + 50567 - 44032: 0xBEE3, + 50568 - 44032: 0x9DF6, + 50569 - 44032: 0x9DF7, + 50570 - 44032: 0x9DF8, + 50571 - 44032: 0x9DF9, + 50572 - 44032: 0xBEE4, + 50573 - 44032: 0xBEE5, + 50574 - 44032: 0x9DFA, + 50575 - 44032: 0xBEE6, + 50576 - 44032: 0x9DFB, + 50577 - 44032: 0xBEE7, + 50578 - 44032: 0x9DFC, + 50579 - 44032: 0x9DFD, + 50580 - 44032: 0x9DFE, + 50581 - 44032: 0xBEE8, + 50582 - 44032: 0x9E41, + 50583 - 44032: 0xBEE9, + 50584 - 44032: 0xBEEA, + 50585 - 44032: 0x9E42, + 50586 - 44032: 0x9E43, + 50587 - 44032: 0x9E44, + 50588 - 44032: 0xBEEB, + 50589 - 44032: 0x9E45, + 50590 - 44032: 0x9E46, + 50591 - 44032: 0x9E47, + 50592 - 44032: 0xBEEC, + 50593 - 44032: 0x9E48, + 50594 - 44032: 0x9E49, + 50595 - 44032: 0x9E4A, + 50596 - 44032: 0x9E4B, + 50597 - 44032: 0x9E4C, + 50598 - 44032: 0x9E4D, + 50599 - 44032: 0x9E4E, + 50600 - 44032: 0x9E4F, + 50601 - 44032: 0xBEED, + 50602 - 44032: 0x9E50, + 50603 - 44032: 0x9E51, + 50604 - 44032: 0x9E52, + 50605 - 44032: 0x9E53, + 50606 - 44032: 0x9E54, + 50607 - 44032: 0x9E55, + 50608 - 44032: 0x9E56, + 50609 - 44032: 0x9E57, + 50610 - 44032: 0x9E58, + 50611 - 44032: 0x9E59, + 50612 - 44032: 0xBEEE, + 50613 - 44032: 0xBEEF, + 50614 - 44032: 0x9E5A, + 50615 - 44032: 0x9E61, + 50616 - 44032: 0xBEF0, + 50617 - 44032: 0xBEF1, + 50618 - 44032: 0x9E62, + 50619 - 44032: 0xBEF2, + 50620 - 44032: 0xBEF3, + 50621 - 44032: 0xBEF4, + 50622 - 44032: 0xBEF5, + 50623 - 44032: 0x9E63, + 50624 - 44032: 0x9E64, + 50625 - 44032: 0x9E65, + 50626 - 44032: 0x9E66, + 50627 - 44032: 0x9E67, + 50628 - 44032: 0xBEF6, + 50629 - 44032: 0xBEF7, + 50630 - 44032: 0xBEF8, + 50631 - 44032: 0xBEF9, + 50632 - 44032: 0xBEFA, + 50633 - 44032: 0xBEFB, + 50634 - 44032: 0xBEFC, + 50635 - 44032: 0x9E68, + 50636 - 44032: 0xBEFD, + 50637 - 44032: 0x9E69, + 50638 - 44032: 0xBEFE, + 50639 - 44032: 0x9E6A, + 50640 - 44032: 0xBFA1, + 50641 - 44032: 0xBFA2, + 50642 - 44032: 0x9E6B, + 50643 - 44032: 0x9E6C, + 50644 - 44032: 0xBFA3, + 50645 - 44032: 0x9E6D, + 50646 - 44032: 0x9E6E, + 50647 - 44032: 0x9E6F, + 50648 - 44032: 0xBFA4, + 50649 - 44032: 0x9E70, + 50650 - 44032: 0x9E71, + 50651 - 44032: 0x9E72, + 50652 - 44032: 0x9E73, + 50653 - 44032: 0x9E74, + 50654 - 44032: 0x9E75, + 50655 - 44032: 0x9E76, + 50656 - 44032: 0xBFA5, + 50657 - 44032: 0xBFA6, + 50658 - 44032: 0x9E77, + 50659 - 44032: 0xBFA7, + 50660 - 44032: 0x9E78, + 50661 - 44032: 0xBFA8, + 50662 - 44032: 0x9E79, + 50663 - 44032: 0x9E7A, + 50664 - 44032: 0x9E81, + 50665 - 44032: 0x9E82, + 50666 - 44032: 0x9E83, + 50667 - 44032: 0x9E84, + 50668 - 44032: 0xBFA9, + 50669 - 44032: 0xBFAA, + 50670 - 44032: 0xBFAB, + 50671 - 44032: 0x9E85, + 50672 - 44032: 0xBFAC, + 50673 - 44032: 0x9E86, + 50674 - 44032: 0x9E87, + 50675 - 44032: 0x9E88, + 50676 - 44032: 0xBFAD, + 50677 - 44032: 0x9E89, + 50678 - 44032: 0xBFAE, + 50679 - 44032: 0xBFAF, + 50680 - 44032: 0x9E8A, + 50681 - 44032: 0x9E8B, + 50682 - 44032: 0x9E8C, + 50683 - 44032: 0x9E8D, + 50684 - 44032: 0xBFB0, + 50685 - 44032: 0xBFB1, + 50686 - 44032: 0xBFB2, + 50687 - 44032: 0xBFB3, + 50688 - 44032: 0xBFB4, + 50689 - 44032: 0xBFB5, + 50690 - 44032: 0x9E8E, + 50691 - 44032: 0x9E8F, + 50692 - 44032: 0x9E90, + 50693 - 44032: 0xBFB6, + 50694 - 44032: 0xBFB7, + 50695 - 44032: 0xBFB8, + 50696 - 44032: 0xBFB9, + 50697 - 44032: 0x9E91, + 50698 - 44032: 0x9E92, + 50699 - 44032: 0x9E93, + 50700 - 44032: 0xBFBA, + 50701 - 44032: 0x9E94, + 50702 - 44032: 0x9E95, + 50703 - 44032: 0x9E96, + 50704 - 44032: 0xBFBB, + 50705 - 44032: 0x9E97, + 50706 - 44032: 0x9E98, + 50707 - 44032: 0x9E99, + 50708 - 44032: 0x9E9A, + 50709 - 44032: 0x9E9B, + 50710 - 44032: 0x9E9C, + 50711 - 44032: 0x9E9D, + 50712 - 44032: 0xBFBC, + 50713 - 44032: 0xBFBD, + 50714 - 44032: 0x9E9E, + 50715 - 44032: 0xBFBE, + 50716 - 44032: 0xBFBF, + 50717 - 44032: 0x9E9F, + 50718 - 44032: 0x9EA0, + 50719 - 44032: 0x9EA1, + 50720 - 44032: 0x9EA2, + 50721 - 44032: 0x9EA3, + 50722 - 44032: 0x9EA4, + 50723 - 44032: 0x9EA5, + 50724 - 44032: 0xBFC0, + 50725 - 44032: 0xBFC1, + 50726 - 44032: 0x9EA6, + 50727 - 44032: 0x9EA7, + 50728 - 44032: 0xBFC2, + 50729 - 44032: 0x9EA8, + 50730 - 44032: 0x9EA9, + 50731 - 44032: 0x9EAA, + 50732 - 44032: 0xBFC3, + 50733 - 44032: 0xBFC4, + 50734 - 44032: 0xBFC5, + 50735 - 44032: 0x9EAB, + 50736 - 44032: 0xBFC6, + 50737 - 44032: 0x9EAC, + 50738 - 44032: 0x9EAD, + 50739 - 44032: 0xBFC7, + 50740 - 44032: 0xBFC8, + 50741 - 44032: 0xBFC9, + 50742 - 44032: 0x9EAE, + 50743 - 44032: 0xBFCA, + 50744 - 44032: 0x9EAF, + 50745 - 44032: 0xBFCB, + 50746 - 44032: 0x9EB0, + 50747 - 44032: 0xBFCC, + 50748 - 44032: 0x9EB1, + 50749 - 44032: 0x9EB2, + 50750 - 44032: 0x9EB3, + 50751 - 44032: 0x9EB4, + 50752 - 44032: 0xBFCD, + 50753 - 44032: 0xBFCE, + 50754 - 44032: 0x9EB5, + 50755 - 44032: 0x9EB6, + 50756 - 44032: 0xBFCF, + 50757 - 44032: 0x9EB7, + 50758 - 44032: 0x9EB8, + 50759 - 44032: 0x9EB9, + 50760 - 44032: 0xBFD0, + 50761 - 44032: 0x9EBA, + 50762 - 44032: 0x9EBB, + 50763 - 44032: 0x9EBC, + 50764 - 44032: 0x9EBD, + 50765 - 44032: 0x9EBE, + 50766 - 44032: 0x9EBF, + 50767 - 44032: 0x9EC0, + 50768 - 44032: 0xBFD1, + 50769 - 44032: 0xBFD2, + 50770 - 44032: 0x9EC1, + 50771 - 44032: 0xBFD3, + 50772 - 44032: 0xBFD4, + 50773 - 44032: 0xBFD5, + 50774 - 44032: 0x9EC2, + 50775 - 44032: 0x9EC3, + 50776 - 44032: 0x9EC4, + 50777 - 44032: 0x9EC5, + 50778 - 44032: 0x9EC6, + 50779 - 44032: 0x9EC7, + 50780 - 44032: 0xBFD6, + 50781 - 44032: 0xBFD7, + 50782 - 44032: 0x9EC8, + 50783 - 44032: 0x9EC9, + 50784 - 44032: 0xBFD8, + 50785 - 44032: 0x9ECA, + 50786 - 44032: 0x9ECB, + 50787 - 44032: 0x9ECC, + 50788 - 44032: 0x9ECD, + 50789 - 44032: 0x9ECE, + 50790 - 44032: 0x9ECF, + 50791 - 44032: 0x9ED0, + 50792 - 44032: 0x9ED1, + 50793 - 44032: 0x9ED2, + 50794 - 44032: 0x9ED3, + 50795 - 44032: 0x9ED4, + 50796 - 44032: 0xBFD9, + 50797 - 44032: 0x9ED5, + 50798 - 44032: 0x9ED6, + 50799 - 44032: 0xBFDA, + 50800 - 44032: 0x9ED7, + 50801 - 44032: 0xBFDB, + 50802 - 44032: 0x9ED8, + 50803 - 44032: 0x9ED9, + 50804 - 44032: 0x9EDA, + 50805 - 44032: 0x9EDB, + 50806 - 44032: 0x9EDC, + 50807 - 44032: 0x9EDD, + 50808 - 44032: 0xBFDC, + 50809 - 44032: 0xBFDD, + 50810 - 44032: 0x9EDE, + 50811 - 44032: 0x9EDF, + 50812 - 44032: 0xBFDE, + 50813 - 44032: 0x9EE0, + 50814 - 44032: 0x9EE1, + 50815 - 44032: 0x9EE2, + 50816 - 44032: 0xBFDF, + 50817 - 44032: 0x9EE3, + 50818 - 44032: 0x9EE4, + 50819 - 44032: 0x9EE5, + 50820 - 44032: 0x9EE6, + 50821 - 44032: 0x9EE7, + 50822 - 44032: 0x9EE8, + 50823 - 44032: 0x9EE9, + 50824 - 44032: 0xBFE0, + 50825 - 44032: 0xBFE1, + 50826 - 44032: 0x9EEA, + 50827 - 44032: 0xBFE2, + 50828 - 44032: 0x9EEB, + 50829 - 44032: 0xBFE3, + 50830 - 44032: 0x9EEC, + 50831 - 44032: 0x9EED, + 50832 - 44032: 0x9EEE, + 50833 - 44032: 0x9EEF, + 50834 - 44032: 0x9EF0, + 50835 - 44032: 0x9EF1, + 50836 - 44032: 0xBFE4, + 50837 - 44032: 0xBFE5, + 50838 - 44032: 0x9EF2, + 50839 - 44032: 0x9EF3, + 50840 - 44032: 0xBFE6, + 50841 - 44032: 0x9EF4, + 50842 - 44032: 0x9EF5, + 50843 - 44032: 0x9EF6, + 50844 - 44032: 0xBFE7, + 50845 - 44032: 0x9EF7, + 50846 - 44032: 0x9EF8, + 50847 - 44032: 0x9EF9, + 50848 - 44032: 0x9EFA, + 50849 - 44032: 0x9EFB, + 50850 - 44032: 0x9EFC, + 50851 - 44032: 0x9EFD, + 50852 - 44032: 0xBFE8, + 50853 - 44032: 0xBFE9, + 50854 - 44032: 0x9EFE, + 50855 - 44032: 0xBFEA, + 50856 - 44032: 0x9F41, + 50857 - 44032: 0xBFEB, + 50858 - 44032: 0x9F42, + 50859 - 44032: 0x9F43, + 50860 - 44032: 0x9F44, + 50861 - 44032: 0x9F45, + 50862 - 44032: 0x9F46, + 50863 - 44032: 0x9F47, + 50864 - 44032: 0xBFEC, + 50865 - 44032: 0xBFED, + 50866 - 44032: 0x9F48, + 50867 - 44032: 0x9F49, + 50868 - 44032: 0xBFEE, + 50869 - 44032: 0x9F4A, + 50870 - 44032: 0x9F4B, + 50871 - 44032: 0x9F4C, + 50872 - 44032: 0xBFEF, + 50873 - 44032: 0xBFF0, + 50874 - 44032: 0xBFF1, + 50875 - 44032: 0x9F4D, + 50876 - 44032: 0x9F4E, + 50877 - 44032: 0x9F4F, + 50878 - 44032: 0x9F50, + 50879 - 44032: 0x9F51, + 50880 - 44032: 0xBFF2, + 50881 - 44032: 0xBFF3, + 50882 - 44032: 0x9F52, + 50883 - 44032: 0xBFF4, + 50884 - 44032: 0x9F53, + 50885 - 44032: 0xBFF5, + 50886 - 44032: 0x9F54, + 50887 - 44032: 0x9F55, + 50888 - 44032: 0x9F56, + 50889 - 44032: 0x9F57, + 50890 - 44032: 0x9F58, + 50891 - 44032: 0x9F59, + 50892 - 44032: 0xBFF6, + 50893 - 44032: 0xBFF7, + 50894 - 44032: 0x9F5A, + 50895 - 44032: 0x9F61, + 50896 - 44032: 0xBFF8, + 50897 - 44032: 0x9F62, + 50898 - 44032: 0x9F63, + 50899 - 44032: 0x9F64, + 50900 - 44032: 0xBFF9, + 50901 - 44032: 0x9F65, + 50902 - 44032: 0x9F66, + 50903 - 44032: 0x9F67, + 50904 - 44032: 0x9F68, + 50905 - 44032: 0x9F69, + 50906 - 44032: 0x9F6A, + 50907 - 44032: 0x9F6B, + 50908 - 44032: 0xBFFA, + 50909 - 44032: 0xBFFB, + 50910 - 44032: 0x9F6C, + 50911 - 44032: 0x9F6D, + 50912 - 44032: 0xBFFC, + 50913 - 44032: 0xBFFD, + 50914 - 44032: 0x9F6E, + 50915 - 44032: 0x9F6F, + 50916 - 44032: 0x9F70, + 50917 - 44032: 0x9F71, + 50918 - 44032: 0x9F72, + 50919 - 44032: 0x9F73, + 50920 - 44032: 0xBFFE, + 50921 - 44032: 0xC0A1, + 50922 - 44032: 0x9F74, + 50923 - 44032: 0x9F75, + 50924 - 44032: 0xC0A2, + 50925 - 44032: 0x9F76, + 50926 - 44032: 0x9F77, + 50927 - 44032: 0x9F78, + 50928 - 44032: 0xC0A3, + 50929 - 44032: 0x9F79, + 50930 - 44032: 0x9F7A, + 50931 - 44032: 0x9F81, + 50932 - 44032: 0x9F82, + 50933 - 44032: 0x9F83, + 50934 - 44032: 0x9F84, + 50935 - 44032: 0x9F85, + 50936 - 44032: 0xC0A4, + 50937 - 44032: 0xC0A5, + 50938 - 44032: 0x9F86, + 50939 - 44032: 0x9F87, + 50940 - 44032: 0x9F88, + 50941 - 44032: 0xC0A6, + 50942 - 44032: 0x9F89, + 50943 - 44032: 0x9F8A, + 50944 - 44032: 0x9F8B, + 50945 - 44032: 0x9F8C, + 50946 - 44032: 0x9F8D, + 50947 - 44032: 0x9F8E, + 50948 - 44032: 0xC0A7, + 50949 - 44032: 0xC0A8, + 50950 - 44032: 0x9F8F, + 50951 - 44032: 0x9F90, + 50952 - 44032: 0xC0A9, + 50953 - 44032: 0x9F91, + 50954 - 44032: 0x9F92, + 50955 - 44032: 0x9F93, + 50956 - 44032: 0xC0AA, + 50957 - 44032: 0x9F94, + 50958 - 44032: 0x9F95, + 50959 - 44032: 0x9F96, + 50960 - 44032: 0x9F97, + 50961 - 44032: 0x9F98, + 50962 - 44032: 0x9F99, + 50963 - 44032: 0x9F9A, + 50964 - 44032: 0xC0AB, + 50965 - 44032: 0xC0AC, + 50966 - 44032: 0x9F9B, + 50967 - 44032: 0xC0AD, + 50968 - 44032: 0x9F9C, + 50969 - 44032: 0xC0AE, + 50970 - 44032: 0x9F9D, + 50971 - 44032: 0x9F9E, + 50972 - 44032: 0x9F9F, + 50973 - 44032: 0x9FA0, + 50974 - 44032: 0x9FA1, + 50975 - 44032: 0x9FA2, + 50976 - 44032: 0xC0AF, + 50977 - 44032: 0xC0B0, + 50978 - 44032: 0x9FA3, + 50979 - 44032: 0x9FA4, + 50980 - 44032: 0xC0B1, + 50981 - 44032: 0x9FA5, + 50982 - 44032: 0x9FA6, + 50983 - 44032: 0x9FA7, + 50984 - 44032: 0xC0B2, + 50985 - 44032: 0x9FA8, + 50986 - 44032: 0x9FA9, + 50987 - 44032: 0x9FAA, + 50988 - 44032: 0x9FAB, + 50989 - 44032: 0x9FAC, + 50990 - 44032: 0x9FAD, + 50991 - 44032: 0x9FAE, + 50992 - 44032: 0xC0B3, + 50993 - 44032: 0xC0B4, + 50994 - 44032: 0x9FAF, + 50995 - 44032: 0xC0B5, + 50996 - 44032: 0x9FB0, + 50997 - 44032: 0xC0B6, + 50998 - 44032: 0x9FB1, + 50999 - 44032: 0xC0B7, + 51000 - 44032: 0x9FB2, + 51001 - 44032: 0x9FB3, + 51002 - 44032: 0x9FB4, + 51003 - 44032: 0x9FB5, + 51004 - 44032: 0xC0B8, + 51005 - 44032: 0xC0B9, + 51006 - 44032: 0x9FB6, + 51007 - 44032: 0x9FB7, + 51008 - 44032: 0xC0BA, + 51009 - 44032: 0x9FB8, + 51010 - 44032: 0x9FB9, + 51011 - 44032: 0x9FBA, + 51012 - 44032: 0xC0BB, + 51013 - 44032: 0x9FBB, + 51014 - 44032: 0x9FBC, + 51015 - 44032: 0x9FBD, + 51016 - 44032: 0x9FBE, + 51017 - 44032: 0x9FBF, + 51018 - 44032: 0xC0BC, + 51019 - 44032: 0x9FC0, + 51020 - 44032: 0xC0BD, + 51021 - 44032: 0xC0BE, + 51022 - 44032: 0x9FC1, + 51023 - 44032: 0xC0BF, + 51024 - 44032: 0x9FC2, + 51025 - 44032: 0xC0C0, + 51026 - 44032: 0xC0C1, + 51027 - 44032: 0xC0C2, + 51028 - 44032: 0xC0C3, + 51029 - 44032: 0xC0C4, + 51030 - 44032: 0xC0C5, + 51031 - 44032: 0xC0C6, + 51032 - 44032: 0xC0C7, + 51033 - 44032: 0x9FC3, + 51034 - 44032: 0x9FC4, + 51035 - 44032: 0x9FC5, + 51036 - 44032: 0xC0C8, + 51037 - 44032: 0x9FC6, + 51038 - 44032: 0x9FC7, + 51039 - 44032: 0x9FC8, + 51040 - 44032: 0xC0C9, + 51041 - 44032: 0x9FC9, + 51042 - 44032: 0x9FCA, + 51043 - 44032: 0x9FCB, + 51044 - 44032: 0x9FCC, + 51045 - 44032: 0x9FCD, + 51046 - 44032: 0x9FCE, + 51047 - 44032: 0x9FCF, + 51048 - 44032: 0xC0CA, + 51049 - 44032: 0x9FD0, + 51050 - 44032: 0x9FD1, + 51051 - 44032: 0xC0CB, + 51052 - 44032: 0x9FD2, + 51053 - 44032: 0x9FD3, + 51054 - 44032: 0x9FD4, + 51055 - 44032: 0x9FD5, + 51056 - 44032: 0x9FD6, + 51057 - 44032: 0x9FD7, + 51058 - 44032: 0x9FD8, + 51059 - 44032: 0x9FD9, + 51060 - 44032: 0xC0CC, + 51061 - 44032: 0xC0CD, + 51062 - 44032: 0x9FDA, + 51063 - 44032: 0x9FDB, + 51064 - 44032: 0xC0CE, + 51065 - 44032: 0x9FDC, + 51066 - 44032: 0x9FDD, + 51067 - 44032: 0x9FDE, + 51068 - 44032: 0xC0CF, + 51069 - 44032: 0xC0D0, + 51070 - 44032: 0xC0D1, + 51071 - 44032: 0x9FDF, + 51072 - 44032: 0x9FE0, + 51073 - 44032: 0x9FE1, + 51074 - 44032: 0x9FE2, + 51075 - 44032: 0xC0D2, + 51076 - 44032: 0xC0D3, + 51077 - 44032: 0xC0D4, + 51078 - 44032: 0x9FE3, + 51079 - 44032: 0xC0D5, + 51080 - 44032: 0xC0D6, + 51081 - 44032: 0xC0D7, + 51082 - 44032: 0xC0D8, + 51083 - 44032: 0x9FE4, + 51084 - 44032: 0x9FE5, + 51085 - 44032: 0x9FE6, + 51086 - 44032: 0xC0D9, + 51087 - 44032: 0x9FE7, + 51088 - 44032: 0xC0DA, + 51089 - 44032: 0xC0DB, + 51090 - 44032: 0x9FE8, + 51091 - 44032: 0x9FE9, + 51092 - 44032: 0xC0DC, + 51093 - 44032: 0x9FEA, + 51094 - 44032: 0xC0DD, + 51095 - 44032: 0xC0DE, + 51096 - 44032: 0xC0DF, + 51097 - 44032: 0x9FEB, + 51098 - 44032: 0xC0E0, + 51099 - 44032: 0x9FEC, + 51100 - 44032: 0x9FED, + 51101 - 44032: 0x9FEE, + 51102 - 44032: 0x9FEF, + 51103 - 44032: 0x9FF0, + 51104 - 44032: 0xC0E1, + 51105 - 44032: 0xC0E2, + 51106 - 44032: 0x9FF1, + 51107 - 44032: 0xC0E3, + 51108 - 44032: 0xC0E4, + 51109 - 44032: 0xC0E5, + 51110 - 44032: 0xC0E6, + 51111 - 44032: 0x9FF2, + 51112 - 44032: 0x9FF3, + 51113 - 44032: 0x9FF4, + 51114 - 44032: 0x9FF5, + 51115 - 44032: 0x9FF6, + 51116 - 44032: 0xC0E7, + 51117 - 44032: 0xC0E8, + 51118 - 44032: 0x9FF7, + 51119 - 44032: 0x9FF8, + 51120 - 44032: 0xC0E9, + 51121 - 44032: 0x9FF9, + 51122 - 44032: 0x9FFA, + 51123 - 44032: 0x9FFB, + 51124 - 44032: 0xC0EA, + 51125 - 44032: 0x9FFC, + 51126 - 44032: 0x9FFD, + 51127 - 44032: 0x9FFE, + 51128 - 44032: 0xA041, + 51129 - 44032: 0xA042, + 51130 - 44032: 0xA043, + 51131 - 44032: 0xA044, + 51132 - 44032: 0xC0EB, + 51133 - 44032: 0xC0EC, + 51134 - 44032: 0xA045, + 51135 - 44032: 0xC0ED, + 51136 - 44032: 0xC0EE, + 51137 - 44032: 0xC0EF, + 51138 - 44032: 0xA046, + 51139 - 44032: 0xA047, + 51140 - 44032: 0xA048, + 51141 - 44032: 0xA049, + 51142 - 44032: 0xA04A, + 51143 - 44032: 0xA04B, + 51144 - 44032: 0xC0F0, + 51145 - 44032: 0xC0F1, + 51146 - 44032: 0xA04C, + 51147 - 44032: 0xA04D, + 51148 - 44032: 0xC0F2, + 51149 - 44032: 0xA04E, + 51150 - 44032: 0xC0F3, + 51151 - 44032: 0xA04F, + 51152 - 44032: 0xC0F4, + 51153 - 44032: 0xA050, + 51154 - 44032: 0xA051, + 51155 - 44032: 0xA052, + 51156 - 44032: 0xA053, + 51157 - 44032: 0xA054, + 51158 - 44032: 0xA055, + 51159 - 44032: 0xA056, + 51160 - 44032: 0xC0F5, + 51161 - 44032: 0xA057, + 51162 - 44032: 0xA058, + 51163 - 44032: 0xA059, + 51164 - 44032: 0xA05A, + 51165 - 44032: 0xC0F6, + 51166 - 44032: 0xA061, + 51167 - 44032: 0xA062, + 51168 - 44032: 0xA063, + 51169 - 44032: 0xA064, + 51170 - 44032: 0xA065, + 51171 - 44032: 0xA066, + 51172 - 44032: 0xC0F7, + 51173 - 44032: 0xA067, + 51174 - 44032: 0xA068, + 51175 - 44032: 0xA069, + 51176 - 44032: 0xC0F8, + 51177 - 44032: 0xA06A, + 51178 - 44032: 0xA06B, + 51179 - 44032: 0xA06C, + 51180 - 44032: 0xC0F9, + 51181 - 44032: 0xA06D, + 51182 - 44032: 0xA06E, + 51183 - 44032: 0xA06F, + 51184 - 44032: 0xA070, + 51185 - 44032: 0xA071, + 51186 - 44032: 0xA072, + 51187 - 44032: 0xA073, + 51188 - 44032: 0xA074, + 51189 - 44032: 0xA075, + 51190 - 44032: 0xA076, + 51191 - 44032: 0xA077, + 51192 - 44032: 0xA078, + 51193 - 44032: 0xA079, + 51194 - 44032: 0xA07A, + 51195 - 44032: 0xA081, + 51196 - 44032: 0xA082, + 51197 - 44032: 0xA083, + 51198 - 44032: 0xA084, + 51199 - 44032: 0xA085, + 51200 - 44032: 0xC0FA, + 51201 - 44032: 0xC0FB, + 51202 - 44032: 0xA086, + 51203 - 44032: 0xA087, + 51204 - 44032: 0xC0FC, + 51205 - 44032: 0xA088, + 51206 - 44032: 0xA089, + 51207 - 44032: 0xA08A, + 51208 - 44032: 0xC0FD, + 51209 - 44032: 0xA08B, + 51210 - 44032: 0xC0FE, + 51211 - 44032: 0xA08C, + 51212 - 44032: 0xA08D, + 51213 - 44032: 0xA08E, + 51214 - 44032: 0xA08F, + 51215 - 44032: 0xA090, + 51216 - 44032: 0xC1A1, + 51217 - 44032: 0xC1A2, + 51218 - 44032: 0xA091, + 51219 - 44032: 0xC1A3, + 51220 - 44032: 0xA092, + 51221 - 44032: 0xC1A4, + 51222 - 44032: 0xC1A5, + 51223 - 44032: 0xA093, + 51224 - 44032: 0xA094, + 51225 - 44032: 0xA095, + 51226 - 44032: 0xA096, + 51227 - 44032: 0xA097, + 51228 - 44032: 0xC1A6, + 51229 - 44032: 0xC1A7, + 51230 - 44032: 0xA098, + 51231 - 44032: 0xA099, + 51232 - 44032: 0xC1A8, + 51233 - 44032: 0xA09A, + 51234 - 44032: 0xA09B, + 51235 - 44032: 0xA09C, + 51236 - 44032: 0xC1A9, + 51237 - 44032: 0xA09D, + 51238 - 44032: 0xA09E, + 51239 - 44032: 0xA09F, + 51240 - 44032: 0xA0A0, + 51241 - 44032: 0xA0A1, + 51242 - 44032: 0xA0A2, + 51243 - 44032: 0xA0A3, + 51244 - 44032: 0xC1AA, + 51245 - 44032: 0xC1AB, + 51246 - 44032: 0xA0A4, + 51247 - 44032: 0xC1AC, + 51248 - 44032: 0xA0A5, + 51249 - 44032: 0xC1AD, + 51250 - 44032: 0xA0A6, + 51251 - 44032: 0xA0A7, + 51252 - 44032: 0xA0A8, + 51253 - 44032: 0xA0A9, + 51254 - 44032: 0xA0AA, + 51255 - 44032: 0xA0AB, + 51256 - 44032: 0xC1AE, + 51257 - 44032: 0xA0AC, + 51258 - 44032: 0xA0AD, + 51259 - 44032: 0xA0AE, + 51260 - 44032: 0xC1AF, + 51261 - 44032: 0xA0AF, + 51262 - 44032: 0xA0B0, + 51263 - 44032: 0xA0B1, + 51264 - 44032: 0xC1B0, + 51265 - 44032: 0xA0B2, + 51266 - 44032: 0xA0B3, + 51267 - 44032: 0xA0B4, + 51268 - 44032: 0xA0B5, + 51269 - 44032: 0xA0B6, + 51270 - 44032: 0xA0B7, + 51271 - 44032: 0xA0B8, + 51272 - 44032: 0xC1B1, + 51273 - 44032: 0xC1B2, + 51274 - 44032: 0xA0B9, + 51275 - 44032: 0xA0BA, + 51276 - 44032: 0xC1B3, + 51277 - 44032: 0xC1B4, + 51278 - 44032: 0xA0BB, + 51279 - 44032: 0xA0BC, + 51280 - 44032: 0xA0BD, + 51281 - 44032: 0xA0BE, + 51282 - 44032: 0xA0BF, + 51283 - 44032: 0xA0C0, + 51284 - 44032: 0xC1B5, + 51285 - 44032: 0xA0C1, + 51286 - 44032: 0xA0C2, + 51287 - 44032: 0xA0C3, + 51288 - 44032: 0xA0C4, + 51289 - 44032: 0xA0C5, + 51290 - 44032: 0xA0C6, + 51291 - 44032: 0xA0C7, + 51292 - 44032: 0xA0C8, + 51293 - 44032: 0xA0C9, + 51294 - 44032: 0xA0CA, + 51295 - 44032: 0xA0CB, + 51296 - 44032: 0xA0CC, + 51297 - 44032: 0xA0CD, + 51298 - 44032: 0xA0CE, + 51299 - 44032: 0xA0CF, + 51300 - 44032: 0xA0D0, + 51301 - 44032: 0xA0D1, + 51302 - 44032: 0xA0D2, + 51303 - 44032: 0xA0D3, + 51304 - 44032: 0xA0D4, + 51305 - 44032: 0xA0D5, + 51306 - 44032: 0xA0D6, + 51307 - 44032: 0xA0D7, + 51308 - 44032: 0xA0D8, + 51309 - 44032: 0xA0D9, + 51310 - 44032: 0xA0DA, + 51311 - 44032: 0xA0DB, + 51312 - 44032: 0xC1B6, + 51313 - 44032: 0xC1B7, + 51314 - 44032: 0xA0DC, + 51315 - 44032: 0xA0DD, + 51316 - 44032: 0xC1B8, + 51317 - 44032: 0xA0DE, + 51318 - 44032: 0xA0DF, + 51319 - 44032: 0xA0E0, + 51320 - 44032: 0xC1B9, + 51321 - 44032: 0xA0E1, + 51322 - 44032: 0xC1BA, + 51323 - 44032: 0xA0E2, + 51324 - 44032: 0xA0E3, + 51325 - 44032: 0xA0E4, + 51326 - 44032: 0xA0E5, + 51327 - 44032: 0xA0E6, + 51328 - 44032: 0xC1BB, + 51329 - 44032: 0xC1BC, + 51330 - 44032: 0xA0E7, + 51331 - 44032: 0xC1BD, + 51332 - 44032: 0xA0E8, + 51333 - 44032: 0xC1BE, + 51334 - 44032: 0xC1BF, + 51335 - 44032: 0xC1C0, + 51336 - 44032: 0xA0E9, + 51337 - 44032: 0xA0EA, + 51338 - 44032: 0xA0EB, + 51339 - 44032: 0xC1C1, + 51340 - 44032: 0xC1C2, + 51341 - 44032: 0xC1C3, + 51342 - 44032: 0xA0EC, + 51343 - 44032: 0xA0ED, + 51344 - 44032: 0xA0EE, + 51345 - 44032: 0xA0EF, + 51346 - 44032: 0xA0F0, + 51347 - 44032: 0xA0F1, + 51348 - 44032: 0xC1C4, + 51349 - 44032: 0xA0F2, + 51350 - 44032: 0xA0F3, + 51351 - 44032: 0xA0F4, + 51352 - 44032: 0xA0F5, + 51353 - 44032: 0xA0F6, + 51354 - 44032: 0xA0F7, + 51355 - 44032: 0xA0F8, + 51356 - 44032: 0xA0F9, + 51357 - 44032: 0xC1C5, + 51358 - 44032: 0xA0FA, + 51359 - 44032: 0xC1C6, + 51360 - 44032: 0xA0FB, + 51361 - 44032: 0xC1C7, + 51362 - 44032: 0xA0FC, + 51363 - 44032: 0xA0FD, + 51364 - 44032: 0xA0FE, + 51365 - 44032: 0xA141, + 51366 - 44032: 0xA142, + 51367 - 44032: 0xA143, + 51368 - 44032: 0xC1C8, + 51369 - 44032: 0xA144, + 51370 - 44032: 0xA145, + 51371 - 44032: 0xA146, + 51372 - 44032: 0xA147, + 51373 - 44032: 0xA148, + 51374 - 44032: 0xA149, + 51375 - 44032: 0xA14A, + 51376 - 44032: 0xA14B, + 51377 - 44032: 0xA14C, + 51378 - 44032: 0xA14D, + 51379 - 44032: 0xA14E, + 51380 - 44032: 0xA14F, + 51381 - 44032: 0xA150, + 51382 - 44032: 0xA151, + 51383 - 44032: 0xA152, + 51384 - 44032: 0xA153, + 51385 - 44032: 0xA154, + 51386 - 44032: 0xA155, + 51387 - 44032: 0xA156, + 51388 - 44032: 0xC1C9, + 51389 - 44032: 0xC1CA, + 51390 - 44032: 0xA157, + 51391 - 44032: 0xA158, + 51392 - 44032: 0xA159, + 51393 - 44032: 0xA15A, + 51394 - 44032: 0xA161, + 51395 - 44032: 0xA162, + 51396 - 44032: 0xC1CB, + 51397 - 44032: 0xA163, + 51398 - 44032: 0xA164, + 51399 - 44032: 0xA165, + 51400 - 44032: 0xC1CC, + 51401 - 44032: 0xA166, + 51402 - 44032: 0xA167, + 51403 - 44032: 0xA168, + 51404 - 44032: 0xC1CD, + 51405 - 44032: 0xA169, + 51406 - 44032: 0xA16A, + 51407 - 44032: 0xA16B, + 51408 - 44032: 0xA16C, + 51409 - 44032: 0xA16D, + 51410 - 44032: 0xA16E, + 51411 - 44032: 0xA16F, + 51412 - 44032: 0xC1CE, + 51413 - 44032: 0xC1CF, + 51414 - 44032: 0xA170, + 51415 - 44032: 0xC1D0, + 51416 - 44032: 0xA171, + 51417 - 44032: 0xC1D1, + 51418 - 44032: 0xA172, + 51419 - 44032: 0xA173, + 51420 - 44032: 0xA174, + 51421 - 44032: 0xA175, + 51422 - 44032: 0xA176, + 51423 - 44032: 0xA177, + 51424 - 44032: 0xC1D2, + 51425 - 44032: 0xC1D3, + 51426 - 44032: 0xA178, + 51427 - 44032: 0xA179, + 51428 - 44032: 0xC1D4, + 51429 - 44032: 0xA17A, + 51430 - 44032: 0xA181, + 51431 - 44032: 0xA182, + 51432 - 44032: 0xA183, + 51433 - 44032: 0xA184, + 51434 - 44032: 0xA185, + 51435 - 44032: 0xA186, + 51436 - 44032: 0xA187, + 51437 - 44032: 0xA188, + 51438 - 44032: 0xA189, + 51439 - 44032: 0xA18A, + 51440 - 44032: 0xA18B, + 51441 - 44032: 0xA18C, + 51442 - 44032: 0xA18D, + 51443 - 44032: 0xA18E, + 51444 - 44032: 0xA18F, + 51445 - 44032: 0xC1D5, + 51446 - 44032: 0xA190, + 51447 - 44032: 0xA191, + 51448 - 44032: 0xA192, + 51449 - 44032: 0xA193, + 51450 - 44032: 0xA194, + 51451 - 44032: 0xA195, + 51452 - 44032: 0xC1D6, + 51453 - 44032: 0xC1D7, + 51454 - 44032: 0xA196, + 51455 - 44032: 0xA197, + 51456 - 44032: 0xC1D8, + 51457 - 44032: 0xA198, + 51458 - 44032: 0xA199, + 51459 - 44032: 0xA19A, + 51460 - 44032: 0xC1D9, + 51461 - 44032: 0xC1DA, + 51462 - 44032: 0xC1DB, + 51463 - 44032: 0xA19B, + 51464 - 44032: 0xA19C, + 51465 - 44032: 0xA19D, + 51466 - 44032: 0xA19E, + 51467 - 44032: 0xA19F, + 51468 - 44032: 0xC1DC, + 51469 - 44032: 0xC1DD, + 51470 - 44032: 0xA1A0, + 51471 - 44032: 0xC1DE, + 51472 - 44032: 0xA241, + 51473 - 44032: 0xC1DF, + 51474 - 44032: 0xA242, + 51475 - 44032: 0xA243, + 51476 - 44032: 0xA244, + 51477 - 44032: 0xA245, + 51478 - 44032: 0xA246, + 51479 - 44032: 0xA247, + 51480 - 44032: 0xC1E0, + 51481 - 44032: 0xA248, + 51482 - 44032: 0xA249, + 51483 - 44032: 0xA24A, + 51484 - 44032: 0xA24B, + 51485 - 44032: 0xA24C, + 51486 - 44032: 0xA24D, + 51487 - 44032: 0xA24E, + 51488 - 44032: 0xA24F, + 51489 - 44032: 0xA250, + 51490 - 44032: 0xA251, + 51491 - 44032: 0xA252, + 51492 - 44032: 0xA253, + 51493 - 44032: 0xA254, + 51494 - 44032: 0xA255, + 51495 - 44032: 0xA256, + 51496 - 44032: 0xA257, + 51497 - 44032: 0xA258, + 51498 - 44032: 0xA259, + 51499 - 44032: 0xA25A, + 51500 - 44032: 0xC1E1, + 51501 - 44032: 0xA261, + 51502 - 44032: 0xA262, + 51503 - 44032: 0xA263, + 51504 - 44032: 0xA264, + 51505 - 44032: 0xA265, + 51506 - 44032: 0xA266, + 51507 - 44032: 0xA267, + 51508 - 44032: 0xC1E2, + 51509 - 44032: 0xA268, + 51510 - 44032: 0xA269, + 51511 - 44032: 0xA26A, + 51512 - 44032: 0xA26B, + 51513 - 44032: 0xA26C, + 51514 - 44032: 0xA26D, + 51515 - 44032: 0xA26E, + 51516 - 44032: 0xA26F, + 51517 - 44032: 0xA270, + 51518 - 44032: 0xA271, + 51519 - 44032: 0xA272, + 51520 - 44032: 0xA273, + 51521 - 44032: 0xA274, + 51522 - 44032: 0xA275, + 51523 - 44032: 0xA276, + 51524 - 44032: 0xA277, + 51525 - 44032: 0xA278, + 51526 - 44032: 0xA279, + 51527 - 44032: 0xA27A, + 51528 - 44032: 0xA281, + 51529 - 44032: 0xA282, + 51530 - 44032: 0xA283, + 51531 - 44032: 0xA284, + 51532 - 44032: 0xA285, + 51533 - 44032: 0xA286, + 51534 - 44032: 0xA287, + 51535 - 44032: 0xA288, + 51536 - 44032: 0xC1E3, + 51537 - 44032: 0xC1E4, + 51538 - 44032: 0xA289, + 51539 - 44032: 0xA28A, + 51540 - 44032: 0xC1E5, + 51541 - 44032: 0xA28B, + 51542 - 44032: 0xA28C, + 51543 - 44032: 0xA28D, + 51544 - 44032: 0xC1E6, + 51545 - 44032: 0xA28E, + 51546 - 44032: 0xA28F, + 51547 - 44032: 0xA290, + 51548 - 44032: 0xA291, + 51549 - 44032: 0xA292, + 51550 - 44032: 0xA293, + 51551 - 44032: 0xA294, + 51552 - 44032: 0xC1E7, + 51553 - 44032: 0xC1E8, + 51554 - 44032: 0xA295, + 51555 - 44032: 0xC1E9, + 51556 - 44032: 0xA296, + 51557 - 44032: 0xA297, + 51558 - 44032: 0xA298, + 51559 - 44032: 0xA299, + 51560 - 44032: 0xA29A, + 51561 - 44032: 0xA29B, + 51562 - 44032: 0xA29C, + 51563 - 44032: 0xA29D, + 51564 - 44032: 0xC1EA, + 51565 - 44032: 0xA29E, + 51566 - 44032: 0xA29F, + 51567 - 44032: 0xA2A0, + 51568 - 44032: 0xC1EB, + 51569 - 44032: 0xA341, + 51570 - 44032: 0xA342, + 51571 - 44032: 0xA343, + 51572 - 44032: 0xC1EC, + 51573 - 44032: 0xA344, + 51574 - 44032: 0xA345, + 51575 - 44032: 0xA346, + 51576 - 44032: 0xA347, + 51577 - 44032: 0xA348, + 51578 - 44032: 0xA349, + 51579 - 44032: 0xA34A, + 51580 - 44032: 0xC1ED, + 51581 - 44032: 0xA34B, + 51582 - 44032: 0xA34C, + 51583 - 44032: 0xA34D, + 51584 - 44032: 0xA34E, + 51585 - 44032: 0xA34F, + 51586 - 44032: 0xA350, + 51587 - 44032: 0xA351, + 51588 - 44032: 0xA352, + 51589 - 44032: 0xA353, + 51590 - 44032: 0xA354, + 51591 - 44032: 0xA355, + 51592 - 44032: 0xC1EE, + 51593 - 44032: 0xC1EF, + 51594 - 44032: 0xA356, + 51595 - 44032: 0xA357, + 51596 - 44032: 0xC1F0, + 51597 - 44032: 0xA358, + 51598 - 44032: 0xA359, + 51599 - 44032: 0xA35A, + 51600 - 44032: 0xC1F1, + 51601 - 44032: 0xA361, + 51602 - 44032: 0xA362, + 51603 - 44032: 0xA363, + 51604 - 44032: 0xA364, + 51605 - 44032: 0xA365, + 51606 - 44032: 0xA366, + 51607 - 44032: 0xA367, + 51608 - 44032: 0xC1F2, + 51609 - 44032: 0xC1F3, + 51610 - 44032: 0xA368, + 51611 - 44032: 0xC1F4, + 51612 - 44032: 0xA369, + 51613 - 44032: 0xC1F5, + 51614 - 44032: 0xA36A, + 51615 - 44032: 0xA36B, + 51616 - 44032: 0xA36C, + 51617 - 44032: 0xA36D, + 51618 - 44032: 0xA36E, + 51619 - 44032: 0xA36F, + 51620 - 44032: 0xA370, + 51621 - 44032: 0xA371, + 51622 - 44032: 0xA372, + 51623 - 44032: 0xA373, + 51624 - 44032: 0xA374, + 51625 - 44032: 0xA375, + 51626 - 44032: 0xA376, + 51627 - 44032: 0xA377, + 51628 - 44032: 0xA378, + 51629 - 44032: 0xA379, + 51630 - 44032: 0xA37A, + 51631 - 44032: 0xA381, + 51632 - 44032: 0xA382, + 51633 - 44032: 0xA383, + 51634 - 44032: 0xA384, + 51635 - 44032: 0xA385, + 51636 - 44032: 0xA386, + 51637 - 44032: 0xA387, + 51638 - 44032: 0xA388, + 51639 - 44032: 0xA389, + 51640 - 44032: 0xA38A, + 51641 - 44032: 0xA38B, + 51642 - 44032: 0xA38C, + 51643 - 44032: 0xA38D, + 51644 - 44032: 0xA38E, + 51645 - 44032: 0xA38F, + 51646 - 44032: 0xA390, + 51647 - 44032: 0xA391, + 51648 - 44032: 0xC1F6, + 51649 - 44032: 0xC1F7, + 51650 - 44032: 0xA392, + 51651 - 44032: 0xA393, + 51652 - 44032: 0xC1F8, + 51653 - 44032: 0xA394, + 51654 - 44032: 0xA395, + 51655 - 44032: 0xC1F9, + 51656 - 44032: 0xC1FA, + 51657 - 44032: 0xA396, + 51658 - 44032: 0xC1FB, + 51659 - 44032: 0xA397, + 51660 - 44032: 0xA398, + 51661 - 44032: 0xA399, + 51662 - 44032: 0xA39A, + 51663 - 44032: 0xA39B, + 51664 - 44032: 0xC1FC, + 51665 - 44032: 0xC1FD, + 51666 - 44032: 0xA39C, + 51667 - 44032: 0xC1FE, + 51668 - 44032: 0xA39D, + 51669 - 44032: 0xC2A1, + 51670 - 44032: 0xC2A2, + 51671 - 44032: 0xA39E, + 51672 - 44032: 0xA39F, + 51673 - 44032: 0xC2A3, + 51674 - 44032: 0xC2A4, + 51675 - 44032: 0xA3A0, + 51676 - 44032: 0xC2A5, + 51677 - 44032: 0xC2A6, + 51678 - 44032: 0xA441, + 51679 - 44032: 0xA442, + 51680 - 44032: 0xC2A7, + 51681 - 44032: 0xA443, + 51682 - 44032: 0xC2A8, + 51683 - 44032: 0xA444, + 51684 - 44032: 0xC2A9, + 51685 - 44032: 0xA445, + 51686 - 44032: 0xA446, + 51687 - 44032: 0xC2AA, + 51688 - 44032: 0xA447, + 51689 - 44032: 0xA448, + 51690 - 44032: 0xA449, + 51691 - 44032: 0xA44A, + 51692 - 44032: 0xC2AB, + 51693 - 44032: 0xC2AC, + 51694 - 44032: 0xA44B, + 51695 - 44032: 0xC2AD, + 51696 - 44032: 0xC2AE, + 51697 - 44032: 0xC2AF, + 51698 - 44032: 0xA44C, + 51699 - 44032: 0xA44D, + 51700 - 44032: 0xA44E, + 51701 - 44032: 0xA44F, + 51702 - 44032: 0xA450, + 51703 - 44032: 0xA451, + 51704 - 44032: 0xC2B0, + 51705 - 44032: 0xC2B1, + 51706 - 44032: 0xA452, + 51707 - 44032: 0xA453, + 51708 - 44032: 0xC2B2, + 51709 - 44032: 0xA454, + 51710 - 44032: 0xA455, + 51711 - 44032: 0xA456, + 51712 - 44032: 0xC2B3, + 51713 - 44032: 0xA457, + 51714 - 44032: 0xA458, + 51715 - 44032: 0xA459, + 51716 - 44032: 0xA45A, + 51717 - 44032: 0xA461, + 51718 - 44032: 0xA462, + 51719 - 44032: 0xA463, + 51720 - 44032: 0xC2B4, + 51721 - 44032: 0xC2B5, + 51722 - 44032: 0xA464, + 51723 - 44032: 0xC2B6, + 51724 - 44032: 0xC2B7, + 51725 - 44032: 0xC2B8, + 51726 - 44032: 0xA465, + 51727 - 44032: 0xA466, + 51728 - 44032: 0xA467, + 51729 - 44032: 0xA468, + 51730 - 44032: 0xA469, + 51731 - 44032: 0xA46A, + 51732 - 44032: 0xC2B9, + 51733 - 44032: 0xA46B, + 51734 - 44032: 0xA46C, + 51735 - 44032: 0xA46D, + 51736 - 44032: 0xC2BA, + 51737 - 44032: 0xA46E, + 51738 - 44032: 0xA46F, + 51739 - 44032: 0xA470, + 51740 - 44032: 0xA471, + 51741 - 44032: 0xA472, + 51742 - 44032: 0xA473, + 51743 - 44032: 0xA474, + 51744 - 44032: 0xA475, + 51745 - 44032: 0xA476, + 51746 - 44032: 0xA477, + 51747 - 44032: 0xA478, + 51748 - 44032: 0xA479, + 51749 - 44032: 0xA47A, + 51750 - 44032: 0xA481, + 51751 - 44032: 0xA482, + 51752 - 44032: 0xA483, + 51753 - 44032: 0xC2BB, + 51754 - 44032: 0xA484, + 51755 - 44032: 0xA485, + 51756 - 44032: 0xA486, + 51757 - 44032: 0xA487, + 51758 - 44032: 0xA488, + 51759 - 44032: 0xA489, + 51760 - 44032: 0xA48A, + 51761 - 44032: 0xA48B, + 51762 - 44032: 0xA48C, + 51763 - 44032: 0xA48D, + 51764 - 44032: 0xA48E, + 51765 - 44032: 0xA48F, + 51766 - 44032: 0xA490, + 51767 - 44032: 0xA491, + 51768 - 44032: 0xA492, + 51769 - 44032: 0xA493, + 51770 - 44032: 0xA494, + 51771 - 44032: 0xA495, + 51772 - 44032: 0xA496, + 51773 - 44032: 0xA497, + 51774 - 44032: 0xA498, + 51775 - 44032: 0xA499, + 51776 - 44032: 0xA49A, + 51777 - 44032: 0xA49B, + 51778 - 44032: 0xA49C, + 51779 - 44032: 0xA49D, + 51780 - 44032: 0xA49E, + 51781 - 44032: 0xA49F, + 51782 - 44032: 0xA4A0, + 51783 - 44032: 0xA541, + 51784 - 44032: 0xA542, + 51785 - 44032: 0xA543, + 51786 - 44032: 0xA544, + 51787 - 44032: 0xA545, + 51788 - 44032: 0xC2BC, + 51789 - 44032: 0xC2BD, + 51790 - 44032: 0xA546, + 51791 - 44032: 0xA547, + 51792 - 44032: 0xC2BE, + 51793 - 44032: 0xA548, + 51794 - 44032: 0xA549, + 51795 - 44032: 0xA54A, + 51796 - 44032: 0xC2BF, + 51797 - 44032: 0xA54B, + 51798 - 44032: 0xA54C, + 51799 - 44032: 0xA54D, + 51800 - 44032: 0xA54E, + 51801 - 44032: 0xA54F, + 51802 - 44032: 0xA550, + 51803 - 44032: 0xA551, + 51804 - 44032: 0xC2C0, + 51805 - 44032: 0xC2C1, + 51806 - 44032: 0xA552, + 51807 - 44032: 0xC2C2, + 51808 - 44032: 0xC2C3, + 51809 - 44032: 0xC2C4, + 51810 - 44032: 0xA553, + 51811 - 44032: 0xA554, + 51812 - 44032: 0xA555, + 51813 - 44032: 0xA556, + 51814 - 44032: 0xA557, + 51815 - 44032: 0xA558, + 51816 - 44032: 0xC2C5, + 51817 - 44032: 0xA559, + 51818 - 44032: 0xA55A, + 51819 - 44032: 0xA561, + 51820 - 44032: 0xA562, + 51821 - 44032: 0xA563, + 51822 - 44032: 0xA564, + 51823 - 44032: 0xA565, + 51824 - 44032: 0xA566, + 51825 - 44032: 0xA567, + 51826 - 44032: 0xA568, + 51827 - 44032: 0xA569, + 51828 - 44032: 0xA56A, + 51829 - 44032: 0xA56B, + 51830 - 44032: 0xA56C, + 51831 - 44032: 0xA56D, + 51832 - 44032: 0xA56E, + 51833 - 44032: 0xA56F, + 51834 - 44032: 0xA570, + 51835 - 44032: 0xA571, + 51836 - 44032: 0xA572, + 51837 - 44032: 0xC2C6, + 51838 - 44032: 0xA573, + 51839 - 44032: 0xA574, + 51840 - 44032: 0xA575, + 51841 - 44032: 0xA576, + 51842 - 44032: 0xA577, + 51843 - 44032: 0xA578, + 51844 - 44032: 0xC2C7, + 51845 - 44032: 0xA579, + 51846 - 44032: 0xA57A, + 51847 - 44032: 0xA581, + 51848 - 44032: 0xA582, + 51849 - 44032: 0xA583, + 51850 - 44032: 0xA584, + 51851 - 44032: 0xA585, + 51852 - 44032: 0xA586, + 51853 - 44032: 0xA587, + 51854 - 44032: 0xA588, + 51855 - 44032: 0xA589, + 51856 - 44032: 0xA58A, + 51857 - 44032: 0xA58B, + 51858 - 44032: 0xA58C, + 51859 - 44032: 0xA58D, + 51860 - 44032: 0xA58E, + 51861 - 44032: 0xA58F, + 51862 - 44032: 0xA590, + 51863 - 44032: 0xA591, + 51864 - 44032: 0xC2C8, + 51865 - 44032: 0xA592, + 51866 - 44032: 0xA593, + 51867 - 44032: 0xA594, + 51868 - 44032: 0xA595, + 51869 - 44032: 0xA596, + 51870 - 44032: 0xA597, + 51871 - 44032: 0xA598, + 51872 - 44032: 0xA599, + 51873 - 44032: 0xA59A, + 51874 - 44032: 0xA59B, + 51875 - 44032: 0xA59C, + 51876 - 44032: 0xA59D, + 51877 - 44032: 0xA59E, + 51878 - 44032: 0xA59F, + 51879 - 44032: 0xA5A0, + 51880 - 44032: 0xA641, + 51881 - 44032: 0xA642, + 51882 - 44032: 0xA643, + 51883 - 44032: 0xA644, + 51884 - 44032: 0xA645, + 51885 - 44032: 0xA646, + 51886 - 44032: 0xA647, + 51887 - 44032: 0xA648, + 51888 - 44032: 0xA649, + 51889 - 44032: 0xA64A, + 51890 - 44032: 0xA64B, + 51891 - 44032: 0xA64C, + 51892 - 44032: 0xA64D, + 51893 - 44032: 0xA64E, + 51894 - 44032: 0xA64F, + 51895 - 44032: 0xA650, + 51896 - 44032: 0xA651, + 51897 - 44032: 0xA652, + 51898 - 44032: 0xA653, + 51899 - 44032: 0xA654, + 51900 - 44032: 0xC2C9, + 51901 - 44032: 0xC2CA, + 51902 - 44032: 0xA655, + 51903 - 44032: 0xA656, + 51904 - 44032: 0xC2CB, + 51905 - 44032: 0xA657, + 51906 - 44032: 0xA658, + 51907 - 44032: 0xA659, + 51908 - 44032: 0xC2CC, + 51909 - 44032: 0xA65A, + 51910 - 44032: 0xA661, + 51911 - 44032: 0xA662, + 51912 - 44032: 0xA663, + 51913 - 44032: 0xA664, + 51914 - 44032: 0xA665, + 51915 - 44032: 0xA666, + 51916 - 44032: 0xC2CD, + 51917 - 44032: 0xC2CE, + 51918 - 44032: 0xA667, + 51919 - 44032: 0xC2CF, + 51920 - 44032: 0xA668, + 51921 - 44032: 0xC2D0, + 51922 - 44032: 0xA669, + 51923 - 44032: 0xC2D1, + 51924 - 44032: 0xA66A, + 51925 - 44032: 0xA66B, + 51926 - 44032: 0xA66C, + 51927 - 44032: 0xA66D, + 51928 - 44032: 0xC2D2, + 51929 - 44032: 0xC2D3, + 51930 - 44032: 0xA66E, + 51931 - 44032: 0xA66F, + 51932 - 44032: 0xA670, + 51933 - 44032: 0xA671, + 51934 - 44032: 0xA672, + 51935 - 44032: 0xA673, + 51936 - 44032: 0xC2D4, + 51937 - 44032: 0xA674, + 51938 - 44032: 0xA675, + 51939 - 44032: 0xA676, + 51940 - 44032: 0xA677, + 51941 - 44032: 0xA678, + 51942 - 44032: 0xA679, + 51943 - 44032: 0xA67A, + 51944 - 44032: 0xA681, + 51945 - 44032: 0xA682, + 51946 - 44032: 0xA683, + 51947 - 44032: 0xA684, + 51948 - 44032: 0xC2D5, + 51949 - 44032: 0xA685, + 51950 - 44032: 0xA686, + 51951 - 44032: 0xA687, + 51952 - 44032: 0xA688, + 51953 - 44032: 0xA689, + 51954 - 44032: 0xA68A, + 51955 - 44032: 0xA68B, + 51956 - 44032: 0xC2D6, + 51957 - 44032: 0xA68C, + 51958 - 44032: 0xA68D, + 51959 - 44032: 0xA68E, + 51960 - 44032: 0xA68F, + 51961 - 44032: 0xA690, + 51962 - 44032: 0xA691, + 51963 - 44032: 0xA692, + 51964 - 44032: 0xA693, + 51965 - 44032: 0xA694, + 51966 - 44032: 0xA695, + 51967 - 44032: 0xA696, + 51968 - 44032: 0xA697, + 51969 - 44032: 0xA698, + 51970 - 44032: 0xA699, + 51971 - 44032: 0xA69A, + 51972 - 44032: 0xA69B, + 51973 - 44032: 0xA69C, + 51974 - 44032: 0xA69D, + 51975 - 44032: 0xA69E, + 51976 - 44032: 0xC2D7, + 51977 - 44032: 0xA69F, + 51978 - 44032: 0xA6A0, + 51979 - 44032: 0xA741, + 51980 - 44032: 0xA742, + 51981 - 44032: 0xA743, + 51982 - 44032: 0xA744, + 51983 - 44032: 0xA745, + 51984 - 44032: 0xC2D8, + 51985 - 44032: 0xA746, + 51986 - 44032: 0xA747, + 51987 - 44032: 0xA748, + 51988 - 44032: 0xC2D9, + 51989 - 44032: 0xA749, + 51990 - 44032: 0xA74A, + 51991 - 44032: 0xA74B, + 51992 - 44032: 0xC2DA, + 51993 - 44032: 0xA74C, + 51994 - 44032: 0xA74D, + 51995 - 44032: 0xA74E, + 51996 - 44032: 0xA74F, + 51997 - 44032: 0xA750, + 51998 - 44032: 0xA751, + 51999 - 44032: 0xA752, + 52000 - 44032: 0xC2DB, + 52001 - 44032: 0xC2DC, + 52002 - 44032: 0xA753, + 52003 - 44032: 0xA754, + 52004 - 44032: 0xA755, + 52005 - 44032: 0xA756, + 52006 - 44032: 0xA757, + 52007 - 44032: 0xA758, + 52008 - 44032: 0xA759, + 52009 - 44032: 0xA75A, + 52010 - 44032: 0xA761, + 52011 - 44032: 0xA762, + 52012 - 44032: 0xA763, + 52013 - 44032: 0xA764, + 52014 - 44032: 0xA765, + 52015 - 44032: 0xA766, + 52016 - 44032: 0xA767, + 52017 - 44032: 0xA768, + 52018 - 44032: 0xA769, + 52019 - 44032: 0xA76A, + 52020 - 44032: 0xA76B, + 52021 - 44032: 0xA76C, + 52022 - 44032: 0xA76D, + 52023 - 44032: 0xA76E, + 52024 - 44032: 0xA76F, + 52025 - 44032: 0xA770, + 52026 - 44032: 0xA771, + 52027 - 44032: 0xA772, + 52028 - 44032: 0xA773, + 52029 - 44032: 0xA774, + 52030 - 44032: 0xA775, + 52031 - 44032: 0xA776, + 52032 - 44032: 0xA777, + 52033 - 44032: 0xC2DD, + 52034 - 44032: 0xA778, + 52035 - 44032: 0xA779, + 52036 - 44032: 0xA77A, + 52037 - 44032: 0xA781, + 52038 - 44032: 0xA782, + 52039 - 44032: 0xA783, + 52040 - 44032: 0xC2DE, + 52041 - 44032: 0xC2DF, + 52042 - 44032: 0xA784, + 52043 - 44032: 0xA785, + 52044 - 44032: 0xC2E0, + 52045 - 44032: 0xA786, + 52046 - 44032: 0xA787, + 52047 - 44032: 0xA788, + 52048 - 44032: 0xC2E1, + 52049 - 44032: 0xA789, + 52050 - 44032: 0xA78A, + 52051 - 44032: 0xA78B, + 52052 - 44032: 0xA78C, + 52053 - 44032: 0xA78D, + 52054 - 44032: 0xA78E, + 52055 - 44032: 0xA78F, + 52056 - 44032: 0xC2E2, + 52057 - 44032: 0xC2E3, + 52058 - 44032: 0xA790, + 52059 - 44032: 0xA791, + 52060 - 44032: 0xA792, + 52061 - 44032: 0xC2E4, + 52062 - 44032: 0xA793, + 52063 - 44032: 0xA794, + 52064 - 44032: 0xA795, + 52065 - 44032: 0xA796, + 52066 - 44032: 0xA797, + 52067 - 44032: 0xA798, + 52068 - 44032: 0xC2E5, + 52069 - 44032: 0xA799, + 52070 - 44032: 0xA79A, + 52071 - 44032: 0xA79B, + 52072 - 44032: 0xA79C, + 52073 - 44032: 0xA79D, + 52074 - 44032: 0xA79E, + 52075 - 44032: 0xA79F, + 52076 - 44032: 0xA7A0, + 52077 - 44032: 0xA841, + 52078 - 44032: 0xA842, + 52079 - 44032: 0xA843, + 52080 - 44032: 0xA844, + 52081 - 44032: 0xA845, + 52082 - 44032: 0xA846, + 52083 - 44032: 0xA847, + 52084 - 44032: 0xA848, + 52085 - 44032: 0xA849, + 52086 - 44032: 0xA84A, + 52087 - 44032: 0xA84B, + 52088 - 44032: 0xC2E6, + 52089 - 44032: 0xC2E7, + 52090 - 44032: 0xA84C, + 52091 - 44032: 0xA84D, + 52092 - 44032: 0xA84E, + 52093 - 44032: 0xA84F, + 52094 - 44032: 0xA850, + 52095 - 44032: 0xA851, + 52096 - 44032: 0xA852, + 52097 - 44032: 0xA853, + 52098 - 44032: 0xA854, + 52099 - 44032: 0xA855, + 52100 - 44032: 0xA856, + 52101 - 44032: 0xA857, + 52102 - 44032: 0xA858, + 52103 - 44032: 0xA859, + 52104 - 44032: 0xA85A, + 52105 - 44032: 0xA861, + 52106 - 44032: 0xA862, + 52107 - 44032: 0xA863, + 52108 - 44032: 0xA864, + 52109 - 44032: 0xA865, + 52110 - 44032: 0xA866, + 52111 - 44032: 0xA867, + 52112 - 44032: 0xA868, + 52113 - 44032: 0xA869, + 52114 - 44032: 0xA86A, + 52115 - 44032: 0xA86B, + 52116 - 44032: 0xA86C, + 52117 - 44032: 0xA86D, + 52118 - 44032: 0xA86E, + 52119 - 44032: 0xA86F, + 52120 - 44032: 0xA870, + 52121 - 44032: 0xA871, + 52122 - 44032: 0xA872, + 52123 - 44032: 0xA873, + 52124 - 44032: 0xC2E8, + 52125 - 44032: 0xA874, + 52126 - 44032: 0xA875, + 52127 - 44032: 0xA876, + 52128 - 44032: 0xA877, + 52129 - 44032: 0xA878, + 52130 - 44032: 0xA879, + 52131 - 44032: 0xA87A, + 52132 - 44032: 0xA881, + 52133 - 44032: 0xA882, + 52134 - 44032: 0xA883, + 52135 - 44032: 0xA884, + 52136 - 44032: 0xA885, + 52137 - 44032: 0xA886, + 52138 - 44032: 0xA887, + 52139 - 44032: 0xA888, + 52140 - 44032: 0xA889, + 52141 - 44032: 0xA88A, + 52142 - 44032: 0xA88B, + 52143 - 44032: 0xA88C, + 52144 - 44032: 0xA88D, + 52145 - 44032: 0xA88E, + 52146 - 44032: 0xA88F, + 52147 - 44032: 0xA890, + 52148 - 44032: 0xA891, + 52149 - 44032: 0xA892, + 52150 - 44032: 0xA893, + 52151 - 44032: 0xA894, + 52152 - 44032: 0xC2E9, + 52153 - 44032: 0xA895, + 52154 - 44032: 0xA896, + 52155 - 44032: 0xA897, + 52156 - 44032: 0xA898, + 52157 - 44032: 0xA899, + 52158 - 44032: 0xA89A, + 52159 - 44032: 0xA89B, + 52160 - 44032: 0xA89C, + 52161 - 44032: 0xA89D, + 52162 - 44032: 0xA89E, + 52163 - 44032: 0xA89F, + 52164 - 44032: 0xA8A0, + 52165 - 44032: 0xA941, + 52166 - 44032: 0xA942, + 52167 - 44032: 0xA943, + 52168 - 44032: 0xA944, + 52169 - 44032: 0xA945, + 52170 - 44032: 0xA946, + 52171 - 44032: 0xA947, + 52172 - 44032: 0xA948, + 52173 - 44032: 0xA949, + 52174 - 44032: 0xA94A, + 52175 - 44032: 0xA94B, + 52176 - 44032: 0xA94C, + 52177 - 44032: 0xA94D, + 52178 - 44032: 0xA94E, + 52179 - 44032: 0xA94F, + 52180 - 44032: 0xC2EA, + 52181 - 44032: 0xA950, + 52182 - 44032: 0xA951, + 52183 - 44032: 0xA952, + 52184 - 44032: 0xA953, + 52185 - 44032: 0xA954, + 52186 - 44032: 0xA955, + 52187 - 44032: 0xA956, + 52188 - 44032: 0xA957, + 52189 - 44032: 0xA958, + 52190 - 44032: 0xA959, + 52191 - 44032: 0xA95A, + 52192 - 44032: 0xA961, + 52193 - 44032: 0xA962, + 52194 - 44032: 0xA963, + 52195 - 44032: 0xA964, + 52196 - 44032: 0xC2EB, + 52197 - 44032: 0xA965, + 52198 - 44032: 0xA966, + 52199 - 44032: 0xC2EC, + 52200 - 44032: 0xA967, + 52201 - 44032: 0xC2ED, + 52202 - 44032: 0xA968, + 52203 - 44032: 0xA969, + 52204 - 44032: 0xA96A, + 52205 - 44032: 0xA96B, + 52206 - 44032: 0xA96C, + 52207 - 44032: 0xA96D, + 52208 - 44032: 0xA96E, + 52209 - 44032: 0xA96F, + 52210 - 44032: 0xA970, + 52211 - 44032: 0xA971, + 52212 - 44032: 0xA972, + 52213 - 44032: 0xA973, + 52214 - 44032: 0xA974, + 52215 - 44032: 0xA975, + 52216 - 44032: 0xA976, + 52217 - 44032: 0xA977, + 52218 - 44032: 0xA978, + 52219 - 44032: 0xA979, + 52220 - 44032: 0xA97A, + 52221 - 44032: 0xA981, + 52222 - 44032: 0xA982, + 52223 - 44032: 0xA983, + 52224 - 44032: 0xA984, + 52225 - 44032: 0xA985, + 52226 - 44032: 0xA986, + 52227 - 44032: 0xA987, + 52228 - 44032: 0xA988, + 52229 - 44032: 0xA989, + 52230 - 44032: 0xA98A, + 52231 - 44032: 0xA98B, + 52232 - 44032: 0xA98C, + 52233 - 44032: 0xA98D, + 52234 - 44032: 0xA98E, + 52235 - 44032: 0xA98F, + 52236 - 44032: 0xC2EE, + 52237 - 44032: 0xC2EF, + 52238 - 44032: 0xA990, + 52239 - 44032: 0xA991, + 52240 - 44032: 0xC2F0, + 52241 - 44032: 0xA992, + 52242 - 44032: 0xA993, + 52243 - 44032: 0xA994, + 52244 - 44032: 0xC2F1, + 52245 - 44032: 0xA995, + 52246 - 44032: 0xA996, + 52247 - 44032: 0xA997, + 52248 - 44032: 0xA998, + 52249 - 44032: 0xA999, + 52250 - 44032: 0xA99A, + 52251 - 44032: 0xA99B, + 52252 - 44032: 0xC2F2, + 52253 - 44032: 0xC2F3, + 52254 - 44032: 0xA99C, + 52255 - 44032: 0xA99D, + 52256 - 44032: 0xA99E, + 52257 - 44032: 0xC2F4, + 52258 - 44032: 0xC2F5, + 52259 - 44032: 0xA99F, + 52260 - 44032: 0xA9A0, + 52261 - 44032: 0xAA41, + 52262 - 44032: 0xAA42, + 52263 - 44032: 0xC2F6, + 52264 - 44032: 0xC2F7, + 52265 - 44032: 0xC2F8, + 52266 - 44032: 0xAA43, + 52267 - 44032: 0xAA44, + 52268 - 44032: 0xC2F9, + 52269 - 44032: 0xAA45, + 52270 - 44032: 0xC2FA, + 52271 - 44032: 0xAA46, + 52272 - 44032: 0xC2FB, + 52273 - 44032: 0xAA47, + 52274 - 44032: 0xAA48, + 52275 - 44032: 0xAA49, + 52276 - 44032: 0xAA4A, + 52277 - 44032: 0xAA4B, + 52278 - 44032: 0xAA4C, + 52279 - 44032: 0xAA4D, + 52280 - 44032: 0xC2FC, + 52281 - 44032: 0xC2FD, + 52282 - 44032: 0xAA4E, + 52283 - 44032: 0xC2FE, + 52284 - 44032: 0xC3A1, + 52285 - 44032: 0xC3A2, + 52286 - 44032: 0xC3A3, + 52287 - 44032: 0xAA4F, + 52288 - 44032: 0xAA50, + 52289 - 44032: 0xAA51, + 52290 - 44032: 0xAA52, + 52291 - 44032: 0xAA53, + 52292 - 44032: 0xC3A4, + 52293 - 44032: 0xC3A5, + 52294 - 44032: 0xAA54, + 52295 - 44032: 0xAA55, + 52296 - 44032: 0xC3A6, + 52297 - 44032: 0xAA56, + 52298 - 44032: 0xAA57, + 52299 - 44032: 0xAA58, + 52300 - 44032: 0xC3A7, + 52301 - 44032: 0xAA59, + 52302 - 44032: 0xAA5A, + 52303 - 44032: 0xAA61, + 52304 - 44032: 0xAA62, + 52305 - 44032: 0xAA63, + 52306 - 44032: 0xAA64, + 52307 - 44032: 0xAA65, + 52308 - 44032: 0xC3A8, + 52309 - 44032: 0xC3A9, + 52310 - 44032: 0xAA66, + 52311 - 44032: 0xC3AA, + 52312 - 44032: 0xC3AB, + 52313 - 44032: 0xC3AC, + 52314 - 44032: 0xAA67, + 52315 - 44032: 0xAA68, + 52316 - 44032: 0xAA69, + 52317 - 44032: 0xAA6A, + 52318 - 44032: 0xAA6B, + 52319 - 44032: 0xAA6C, + 52320 - 44032: 0xC3AD, + 52321 - 44032: 0xAA6D, + 52322 - 44032: 0xAA6E, + 52323 - 44032: 0xAA6F, + 52324 - 44032: 0xC3AE, + 52325 - 44032: 0xAA70, + 52326 - 44032: 0xC3AF, + 52327 - 44032: 0xAA71, + 52328 - 44032: 0xC3B0, + 52329 - 44032: 0xAA72, + 52330 - 44032: 0xAA73, + 52331 - 44032: 0xAA74, + 52332 - 44032: 0xAA75, + 52333 - 44032: 0xAA76, + 52334 - 44032: 0xAA77, + 52335 - 44032: 0xAA78, + 52336 - 44032: 0xC3B1, + 52337 - 44032: 0xAA79, + 52338 - 44032: 0xAA7A, + 52339 - 44032: 0xAA81, + 52340 - 44032: 0xAA82, + 52341 - 44032: 0xC3B2, + 52342 - 44032: 0xAA83, + 52343 - 44032: 0xAA84, + 52344 - 44032: 0xAA85, + 52345 - 44032: 0xAA86, + 52346 - 44032: 0xAA87, + 52347 - 44032: 0xAA88, + 52348 - 44032: 0xAA89, + 52349 - 44032: 0xAA8A, + 52350 - 44032: 0xAA8B, + 52351 - 44032: 0xAA8C, + 52352 - 44032: 0xAA8D, + 52353 - 44032: 0xAA8E, + 52354 - 44032: 0xAA8F, + 52355 - 44032: 0xAA90, + 52356 - 44032: 0xAA91, + 52357 - 44032: 0xAA92, + 52358 - 44032: 0xAA93, + 52359 - 44032: 0xAA94, + 52360 - 44032: 0xAA95, + 52361 - 44032: 0xAA96, + 52362 - 44032: 0xAA97, + 52363 - 44032: 0xAA98, + 52364 - 44032: 0xAA99, + 52365 - 44032: 0xAA9A, + 52366 - 44032: 0xAA9B, + 52367 - 44032: 0xAA9C, + 52368 - 44032: 0xAA9D, + 52369 - 44032: 0xAA9E, + 52370 - 44032: 0xAA9F, + 52371 - 44032: 0xAAA0, + 52372 - 44032: 0xAB41, + 52373 - 44032: 0xAB42, + 52374 - 44032: 0xAB43, + 52375 - 44032: 0xAB44, + 52376 - 44032: 0xC3B3, + 52377 - 44032: 0xC3B4, + 52378 - 44032: 0xAB45, + 52379 - 44032: 0xAB46, + 52380 - 44032: 0xC3B5, + 52381 - 44032: 0xAB47, + 52382 - 44032: 0xAB48, + 52383 - 44032: 0xAB49, + 52384 - 44032: 0xC3B6, + 52385 - 44032: 0xAB4A, + 52386 - 44032: 0xAB4B, + 52387 - 44032: 0xAB4C, + 52388 - 44032: 0xAB4D, + 52389 - 44032: 0xAB4E, + 52390 - 44032: 0xAB4F, + 52391 - 44032: 0xAB50, + 52392 - 44032: 0xC3B7, + 52393 - 44032: 0xC3B8, + 52394 - 44032: 0xAB51, + 52395 - 44032: 0xC3B9, + 52396 - 44032: 0xC3BA, + 52397 - 44032: 0xC3BB, + 52398 - 44032: 0xAB52, + 52399 - 44032: 0xAB53, + 52400 - 44032: 0xAB54, + 52401 - 44032: 0xAB55, + 52402 - 44032: 0xAB56, + 52403 - 44032: 0xAB57, + 52404 - 44032: 0xC3BC, + 52405 - 44032: 0xC3BD, + 52406 - 44032: 0xAB58, + 52407 - 44032: 0xAB59, + 52408 - 44032: 0xC3BE, + 52409 - 44032: 0xAB5A, + 52410 - 44032: 0xAB61, + 52411 - 44032: 0xAB62, + 52412 - 44032: 0xC3BF, + 52413 - 44032: 0xAB63, + 52414 - 44032: 0xAB64, + 52415 - 44032: 0xAB65, + 52416 - 44032: 0xAB66, + 52417 - 44032: 0xAB67, + 52418 - 44032: 0xAB68, + 52419 - 44032: 0xAB69, + 52420 - 44032: 0xC3C0, + 52421 - 44032: 0xC3C1, + 52422 - 44032: 0xAB6A, + 52423 - 44032: 0xC3C2, + 52424 - 44032: 0xAB6B, + 52425 - 44032: 0xC3C3, + 52426 - 44032: 0xAB6C, + 52427 - 44032: 0xAB6D, + 52428 - 44032: 0xAB6E, + 52429 - 44032: 0xAB6F, + 52430 - 44032: 0xAB70, + 52431 - 44032: 0xAB71, + 52432 - 44032: 0xC3C4, + 52433 - 44032: 0xAB72, + 52434 - 44032: 0xAB73, + 52435 - 44032: 0xAB74, + 52436 - 44032: 0xC3C5, + 52437 - 44032: 0xAB75, + 52438 - 44032: 0xAB76, + 52439 - 44032: 0xAB77, + 52440 - 44032: 0xAB78, + 52441 - 44032: 0xAB79, + 52442 - 44032: 0xAB7A, + 52443 - 44032: 0xAB81, + 52444 - 44032: 0xAB82, + 52445 - 44032: 0xAB83, + 52446 - 44032: 0xAB84, + 52447 - 44032: 0xAB85, + 52448 - 44032: 0xAB86, + 52449 - 44032: 0xAB87, + 52450 - 44032: 0xAB88, + 52451 - 44032: 0xAB89, + 52452 - 44032: 0xC3C6, + 52453 - 44032: 0xAB8A, + 52454 - 44032: 0xAB8B, + 52455 - 44032: 0xAB8C, + 52456 - 44032: 0xAB8D, + 52457 - 44032: 0xAB8E, + 52458 - 44032: 0xAB8F, + 52459 - 44032: 0xAB90, + 52460 - 44032: 0xC3C7, + 52461 - 44032: 0xAB91, + 52462 - 44032: 0xAB92, + 52463 - 44032: 0xAB93, + 52464 - 44032: 0xC3C8, + 52465 - 44032: 0xAB94, + 52466 - 44032: 0xAB95, + 52467 - 44032: 0xAB96, + 52468 - 44032: 0xAB97, + 52469 - 44032: 0xAB98, + 52470 - 44032: 0xAB99, + 52471 - 44032: 0xAB9A, + 52472 - 44032: 0xAB9B, + 52473 - 44032: 0xAB9C, + 52474 - 44032: 0xAB9D, + 52475 - 44032: 0xAB9E, + 52476 - 44032: 0xAB9F, + 52477 - 44032: 0xABA0, + 52478 - 44032: 0xAC41, + 52479 - 44032: 0xAC42, + 52480 - 44032: 0xAC43, + 52481 - 44032: 0xC3C9, + 52482 - 44032: 0xAC44, + 52483 - 44032: 0xAC45, + 52484 - 44032: 0xAC46, + 52485 - 44032: 0xAC47, + 52486 - 44032: 0xAC48, + 52487 - 44032: 0xAC49, + 52488 - 44032: 0xC3CA, + 52489 - 44032: 0xC3CB, + 52490 - 44032: 0xAC4A, + 52491 - 44032: 0xAC4B, + 52492 - 44032: 0xC3CC, + 52493 - 44032: 0xAC4C, + 52494 - 44032: 0xAC4D, + 52495 - 44032: 0xAC4E, + 52496 - 44032: 0xC3CD, + 52497 - 44032: 0xAC4F, + 52498 - 44032: 0xAC50, + 52499 - 44032: 0xAC51, + 52500 - 44032: 0xAC52, + 52501 - 44032: 0xAC53, + 52502 - 44032: 0xAC54, + 52503 - 44032: 0xAC55, + 52504 - 44032: 0xC3CE, + 52505 - 44032: 0xC3CF, + 52506 - 44032: 0xAC56, + 52507 - 44032: 0xC3D0, + 52508 - 44032: 0xAC57, + 52509 - 44032: 0xC3D1, + 52510 - 44032: 0xAC58, + 52511 - 44032: 0xAC59, + 52512 - 44032: 0xAC5A, + 52513 - 44032: 0xAC61, + 52514 - 44032: 0xAC62, + 52515 - 44032: 0xAC63, + 52516 - 44032: 0xC3D2, + 52517 - 44032: 0xAC64, + 52518 - 44032: 0xAC65, + 52519 - 44032: 0xAC66, + 52520 - 44032: 0xC3D3, + 52521 - 44032: 0xAC67, + 52522 - 44032: 0xAC68, + 52523 - 44032: 0xAC69, + 52524 - 44032: 0xC3D4, + 52525 - 44032: 0xAC6A, + 52526 - 44032: 0xAC6B, + 52527 - 44032: 0xAC6C, + 52528 - 44032: 0xAC6D, + 52529 - 44032: 0xAC6E, + 52530 - 44032: 0xAC6F, + 52531 - 44032: 0xAC70, + 52532 - 44032: 0xAC71, + 52533 - 44032: 0xAC72, + 52534 - 44032: 0xAC73, + 52535 - 44032: 0xAC74, + 52536 - 44032: 0xAC75, + 52537 - 44032: 0xC3D5, + 52538 - 44032: 0xAC76, + 52539 - 44032: 0xAC77, + 52540 - 44032: 0xAC78, + 52541 - 44032: 0xAC79, + 52542 - 44032: 0xAC7A, + 52543 - 44032: 0xAC81, + 52544 - 44032: 0xAC82, + 52545 - 44032: 0xAC83, + 52546 - 44032: 0xAC84, + 52547 - 44032: 0xAC85, + 52548 - 44032: 0xAC86, + 52549 - 44032: 0xAC87, + 52550 - 44032: 0xAC88, + 52551 - 44032: 0xAC89, + 52552 - 44032: 0xAC8A, + 52553 - 44032: 0xAC8B, + 52554 - 44032: 0xAC8C, + 52555 - 44032: 0xAC8D, + 52556 - 44032: 0xAC8E, + 52557 - 44032: 0xAC8F, + 52558 - 44032: 0xAC90, + 52559 - 44032: 0xAC91, + 52560 - 44032: 0xAC92, + 52561 - 44032: 0xAC93, + 52562 - 44032: 0xAC94, + 52563 - 44032: 0xAC95, + 52564 - 44032: 0xAC96, + 52565 - 44032: 0xAC97, + 52566 - 44032: 0xAC98, + 52567 - 44032: 0xAC99, + 52568 - 44032: 0xAC9A, + 52569 - 44032: 0xAC9B, + 52570 - 44032: 0xAC9C, + 52571 - 44032: 0xAC9D, + 52572 - 44032: 0xC3D6, + 52573 - 44032: 0xAC9E, + 52574 - 44032: 0xAC9F, + 52575 - 44032: 0xACA0, + 52576 - 44032: 0xC3D7, + 52577 - 44032: 0xAD41, + 52578 - 44032: 0xAD42, + 52579 - 44032: 0xAD43, + 52580 - 44032: 0xC3D8, + 52581 - 44032: 0xAD44, + 52582 - 44032: 0xAD45, + 52583 - 44032: 0xAD46, + 52584 - 44032: 0xAD47, + 52585 - 44032: 0xAD48, + 52586 - 44032: 0xAD49, + 52587 - 44032: 0xAD4A, + 52588 - 44032: 0xC3D9, + 52589 - 44032: 0xC3DA, + 52590 - 44032: 0xAD4B, + 52591 - 44032: 0xC3DB, + 52592 - 44032: 0xAD4C, + 52593 - 44032: 0xC3DC, + 52594 - 44032: 0xAD4D, + 52595 - 44032: 0xAD4E, + 52596 - 44032: 0xAD4F, + 52597 - 44032: 0xAD50, + 52598 - 44032: 0xAD51, + 52599 - 44032: 0xAD52, + 52600 - 44032: 0xC3DD, + 52601 - 44032: 0xAD53, + 52602 - 44032: 0xAD54, + 52603 - 44032: 0xAD55, + 52604 - 44032: 0xAD56, + 52605 - 44032: 0xAD57, + 52606 - 44032: 0xAD58, + 52607 - 44032: 0xAD59, + 52608 - 44032: 0xAD5A, + 52609 - 44032: 0xAD61, + 52610 - 44032: 0xAD62, + 52611 - 44032: 0xAD63, + 52612 - 44032: 0xAD64, + 52613 - 44032: 0xAD65, + 52614 - 44032: 0xAD66, + 52615 - 44032: 0xAD67, + 52616 - 44032: 0xC3DE, + 52617 - 44032: 0xAD68, + 52618 - 44032: 0xAD69, + 52619 - 44032: 0xAD6A, + 52620 - 44032: 0xAD6B, + 52621 - 44032: 0xAD6C, + 52622 - 44032: 0xAD6D, + 52623 - 44032: 0xAD6E, + 52624 - 44032: 0xAD6F, + 52625 - 44032: 0xAD70, + 52626 - 44032: 0xAD71, + 52627 - 44032: 0xAD72, + 52628 - 44032: 0xC3DF, + 52629 - 44032: 0xC3E0, + 52630 - 44032: 0xAD73, + 52631 - 44032: 0xAD74, + 52632 - 44032: 0xC3E1, + 52633 - 44032: 0xAD75, + 52634 - 44032: 0xAD76, + 52635 - 44032: 0xAD77, + 52636 - 44032: 0xC3E2, + 52637 - 44032: 0xAD78, + 52638 - 44032: 0xAD79, + 52639 - 44032: 0xAD7A, + 52640 - 44032: 0xAD81, + 52641 - 44032: 0xAD82, + 52642 - 44032: 0xAD83, + 52643 - 44032: 0xAD84, + 52644 - 44032: 0xC3E3, + 52645 - 44032: 0xC3E4, + 52646 - 44032: 0xAD85, + 52647 - 44032: 0xC3E5, + 52648 - 44032: 0xAD86, + 52649 - 44032: 0xC3E6, + 52650 - 44032: 0xAD87, + 52651 - 44032: 0xAD88, + 52652 - 44032: 0xAD89, + 52653 - 44032: 0xAD8A, + 52654 - 44032: 0xAD8B, + 52655 - 44032: 0xAD8C, + 52656 - 44032: 0xC3E7, + 52657 - 44032: 0xAD8D, + 52658 - 44032: 0xAD8E, + 52659 - 44032: 0xAD8F, + 52660 - 44032: 0xAD90, + 52661 - 44032: 0xAD91, + 52662 - 44032: 0xAD92, + 52663 - 44032: 0xAD93, + 52664 - 44032: 0xAD94, + 52665 - 44032: 0xAD95, + 52666 - 44032: 0xAD96, + 52667 - 44032: 0xAD97, + 52668 - 44032: 0xAD98, + 52669 - 44032: 0xAD99, + 52670 - 44032: 0xAD9A, + 52671 - 44032: 0xAD9B, + 52672 - 44032: 0xAD9C, + 52673 - 44032: 0xAD9D, + 52674 - 44032: 0xAD9E, + 52675 - 44032: 0xAD9F, + 52676 - 44032: 0xC3E8, + 52677 - 44032: 0xADA0, + 52678 - 44032: 0xAE41, + 52679 - 44032: 0xAE42, + 52680 - 44032: 0xAE43, + 52681 - 44032: 0xAE44, + 52682 - 44032: 0xAE45, + 52683 - 44032: 0xAE46, + 52684 - 44032: 0xC3E9, + 52685 - 44032: 0xAE47, + 52686 - 44032: 0xAE48, + 52687 - 44032: 0xAE49, + 52688 - 44032: 0xC3EA, + 52689 - 44032: 0xAE4A, + 52690 - 44032: 0xAE4B, + 52691 - 44032: 0xAE4C, + 52692 - 44032: 0xAE4D, + 52693 - 44032: 0xAE4E, + 52694 - 44032: 0xAE4F, + 52695 - 44032: 0xAE50, + 52696 - 44032: 0xAE51, + 52697 - 44032: 0xAE52, + 52698 - 44032: 0xAE53, + 52699 - 44032: 0xAE54, + 52700 - 44032: 0xAE55, + 52701 - 44032: 0xAE56, + 52702 - 44032: 0xAE57, + 52703 - 44032: 0xAE58, + 52704 - 44032: 0xAE59, + 52705 - 44032: 0xAE5A, + 52706 - 44032: 0xAE61, + 52707 - 44032: 0xAE62, + 52708 - 44032: 0xAE63, + 52709 - 44032: 0xAE64, + 52710 - 44032: 0xAE65, + 52711 - 44032: 0xAE66, + 52712 - 44032: 0xC3EB, + 52713 - 44032: 0xAE67, + 52714 - 44032: 0xAE68, + 52715 - 44032: 0xAE69, + 52716 - 44032: 0xC3EC, + 52717 - 44032: 0xAE6A, + 52718 - 44032: 0xAE6B, + 52719 - 44032: 0xAE6C, + 52720 - 44032: 0xC3ED, + 52721 - 44032: 0xAE6D, + 52722 - 44032: 0xAE6E, + 52723 - 44032: 0xAE6F, + 52724 - 44032: 0xAE70, + 52725 - 44032: 0xAE71, + 52726 - 44032: 0xAE72, + 52727 - 44032: 0xAE73, + 52728 - 44032: 0xC3EE, + 52729 - 44032: 0xC3EF, + 52730 - 44032: 0xAE74, + 52731 - 44032: 0xC3F0, + 52732 - 44032: 0xAE75, + 52733 - 44032: 0xC3F1, + 52734 - 44032: 0xAE76, + 52735 - 44032: 0xAE77, + 52736 - 44032: 0xAE78, + 52737 - 44032: 0xAE79, + 52738 - 44032: 0xAE7A, + 52739 - 44032: 0xAE81, + 52740 - 44032: 0xC3F2, + 52741 - 44032: 0xAE82, + 52742 - 44032: 0xAE83, + 52743 - 44032: 0xAE84, + 52744 - 44032: 0xC3F3, + 52745 - 44032: 0xAE85, + 52746 - 44032: 0xAE86, + 52747 - 44032: 0xAE87, + 52748 - 44032: 0xC3F4, + 52749 - 44032: 0xAE88, + 52750 - 44032: 0xAE89, + 52751 - 44032: 0xAE8A, + 52752 - 44032: 0xAE8B, + 52753 - 44032: 0xAE8C, + 52754 - 44032: 0xAE8D, + 52755 - 44032: 0xAE8E, + 52756 - 44032: 0xC3F5, + 52757 - 44032: 0xAE8F, + 52758 - 44032: 0xAE90, + 52759 - 44032: 0xAE91, + 52760 - 44032: 0xAE92, + 52761 - 44032: 0xC3F6, + 52762 - 44032: 0xAE93, + 52763 - 44032: 0xAE94, + 52764 - 44032: 0xAE95, + 52765 - 44032: 0xAE96, + 52766 - 44032: 0xAE97, + 52767 - 44032: 0xAE98, + 52768 - 44032: 0xC3F7, + 52769 - 44032: 0xC3F8, + 52770 - 44032: 0xAE99, + 52771 - 44032: 0xAE9A, + 52772 - 44032: 0xC3F9, + 52773 - 44032: 0xAE9B, + 52774 - 44032: 0xAE9C, + 52775 - 44032: 0xAE9D, + 52776 - 44032: 0xC3FA, + 52777 - 44032: 0xAE9E, + 52778 - 44032: 0xAE9F, + 52779 - 44032: 0xAEA0, + 52780 - 44032: 0xAF41, + 52781 - 44032: 0xAF42, + 52782 - 44032: 0xAF43, + 52783 - 44032: 0xAF44, + 52784 - 44032: 0xC3FB, + 52785 - 44032: 0xC3FC, + 52786 - 44032: 0xAF45, + 52787 - 44032: 0xC3FD, + 52788 - 44032: 0xAF46, + 52789 - 44032: 0xC3FE, + 52790 - 44032: 0xAF47, + 52791 - 44032: 0xAF48, + 52792 - 44032: 0xAF49, + 52793 - 44032: 0xAF4A, + 52794 - 44032: 0xAF4B, + 52795 - 44032: 0xAF4C, + 52796 - 44032: 0xAF4D, + 52797 - 44032: 0xAF4E, + 52798 - 44032: 0xAF4F, + 52799 - 44032: 0xAF50, + 52800 - 44032: 0xAF51, + 52801 - 44032: 0xAF52, + 52802 - 44032: 0xAF53, + 52803 - 44032: 0xAF54, + 52804 - 44032: 0xAF55, + 52805 - 44032: 0xAF56, + 52806 - 44032: 0xAF57, + 52807 - 44032: 0xAF58, + 52808 - 44032: 0xAF59, + 52809 - 44032: 0xAF5A, + 52810 - 44032: 0xAF61, + 52811 - 44032: 0xAF62, + 52812 - 44032: 0xAF63, + 52813 - 44032: 0xAF64, + 52814 - 44032: 0xAF65, + 52815 - 44032: 0xAF66, + 52816 - 44032: 0xAF67, + 52817 - 44032: 0xAF68, + 52818 - 44032: 0xAF69, + 52819 - 44032: 0xAF6A, + 52820 - 44032: 0xAF6B, + 52821 - 44032: 0xAF6C, + 52822 - 44032: 0xAF6D, + 52823 - 44032: 0xAF6E, + 52824 - 44032: 0xC4A1, + 52825 - 44032: 0xC4A2, + 52826 - 44032: 0xAF6F, + 52827 - 44032: 0xAF70, + 52828 - 44032: 0xC4A3, + 52829 - 44032: 0xAF71, + 52830 - 44032: 0xAF72, + 52831 - 44032: 0xC4A4, + 52832 - 44032: 0xC4A5, + 52833 - 44032: 0xC4A6, + 52834 - 44032: 0xAF73, + 52835 - 44032: 0xAF74, + 52836 - 44032: 0xAF75, + 52837 - 44032: 0xAF76, + 52838 - 44032: 0xAF77, + 52839 - 44032: 0xAF78, + 52840 - 44032: 0xC4A7, + 52841 - 44032: 0xC4A8, + 52842 - 44032: 0xAF79, + 52843 - 44032: 0xC4A9, + 52844 - 44032: 0xAF7A, + 52845 - 44032: 0xC4AA, + 52846 - 44032: 0xAF81, + 52847 - 44032: 0xAF82, + 52848 - 44032: 0xAF83, + 52849 - 44032: 0xAF84, + 52850 - 44032: 0xAF85, + 52851 - 44032: 0xAF86, + 52852 - 44032: 0xC4AB, + 52853 - 44032: 0xC4AC, + 52854 - 44032: 0xAF87, + 52855 - 44032: 0xAF88, + 52856 - 44032: 0xC4AD, + 52857 - 44032: 0xAF89, + 52858 - 44032: 0xAF8A, + 52859 - 44032: 0xAF8B, + 52860 - 44032: 0xC4AE, + 52861 - 44032: 0xAF8C, + 52862 - 44032: 0xAF8D, + 52863 - 44032: 0xAF8E, + 52864 - 44032: 0xAF8F, + 52865 - 44032: 0xAF90, + 52866 - 44032: 0xAF91, + 52867 - 44032: 0xAF92, + 52868 - 44032: 0xC4AF, + 52869 - 44032: 0xC4B0, + 52870 - 44032: 0xAF93, + 52871 - 44032: 0xC4B1, + 52872 - 44032: 0xAF94, + 52873 - 44032: 0xC4B2, + 52874 - 44032: 0xAF95, + 52875 - 44032: 0xAF96, + 52876 - 44032: 0xAF97, + 52877 - 44032: 0xAF98, + 52878 - 44032: 0xAF99, + 52879 - 44032: 0xAF9A, + 52880 - 44032: 0xC4B3, + 52881 - 44032: 0xC4B4, + 52882 - 44032: 0xAF9B, + 52883 - 44032: 0xAF9C, + 52884 - 44032: 0xC4B5, + 52885 - 44032: 0xAF9D, + 52886 - 44032: 0xAF9E, + 52887 - 44032: 0xAF9F, + 52888 - 44032: 0xC4B6, + 52889 - 44032: 0xAFA0, + 52890 - 44032: 0xB041, + 52891 - 44032: 0xB042, + 52892 - 44032: 0xB043, + 52893 - 44032: 0xB044, + 52894 - 44032: 0xB045, + 52895 - 44032: 0xB046, + 52896 - 44032: 0xC4B7, + 52897 - 44032: 0xC4B8, + 52898 - 44032: 0xB047, + 52899 - 44032: 0xC4B9, + 52900 - 44032: 0xC4BA, + 52901 - 44032: 0xC4BB, + 52902 - 44032: 0xB048, + 52903 - 44032: 0xB049, + 52904 - 44032: 0xB04A, + 52905 - 44032: 0xB04B, + 52906 - 44032: 0xB04C, + 52907 - 44032: 0xB04D, + 52908 - 44032: 0xC4BC, + 52909 - 44032: 0xC4BD, + 52910 - 44032: 0xB04E, + 52911 - 44032: 0xB04F, + 52912 - 44032: 0xB050, + 52913 - 44032: 0xB051, + 52914 - 44032: 0xB052, + 52915 - 44032: 0xB053, + 52916 - 44032: 0xB054, + 52917 - 44032: 0xB055, + 52918 - 44032: 0xB056, + 52919 - 44032: 0xB057, + 52920 - 44032: 0xB058, + 52921 - 44032: 0xB059, + 52922 - 44032: 0xB05A, + 52923 - 44032: 0xB061, + 52924 - 44032: 0xB062, + 52925 - 44032: 0xB063, + 52926 - 44032: 0xB064, + 52927 - 44032: 0xB065, + 52928 - 44032: 0xB066, + 52929 - 44032: 0xC4BE, + 52930 - 44032: 0xB067, + 52931 - 44032: 0xB068, + 52932 - 44032: 0xB069, + 52933 - 44032: 0xB06A, + 52934 - 44032: 0xB06B, + 52935 - 44032: 0xB06C, + 52936 - 44032: 0xB06D, + 52937 - 44032: 0xB06E, + 52938 - 44032: 0xB06F, + 52939 - 44032: 0xB070, + 52940 - 44032: 0xB071, + 52941 - 44032: 0xB072, + 52942 - 44032: 0xB073, + 52943 - 44032: 0xB074, + 52944 - 44032: 0xB075, + 52945 - 44032: 0xB076, + 52946 - 44032: 0xB077, + 52947 - 44032: 0xB078, + 52948 - 44032: 0xB079, + 52949 - 44032: 0xB07A, + 52950 - 44032: 0xB081, + 52951 - 44032: 0xB082, + 52952 - 44032: 0xB083, + 52953 - 44032: 0xB084, + 52954 - 44032: 0xB085, + 52955 - 44032: 0xB086, + 52956 - 44032: 0xB087, + 52957 - 44032: 0xB088, + 52958 - 44032: 0xB089, + 52959 - 44032: 0xB08A, + 52960 - 44032: 0xB08B, + 52961 - 44032: 0xB08C, + 52962 - 44032: 0xB08D, + 52963 - 44032: 0xB08E, + 52964 - 44032: 0xC4BF, + 52965 - 44032: 0xC4C0, + 52966 - 44032: 0xB08F, + 52967 - 44032: 0xB090, + 52968 - 44032: 0xC4C1, + 52969 - 44032: 0xB091, + 52970 - 44032: 0xB092, + 52971 - 44032: 0xC4C2, + 52972 - 44032: 0xC4C3, + 52973 - 44032: 0xB093, + 52974 - 44032: 0xB094, + 52975 - 44032: 0xB095, + 52976 - 44032: 0xB096, + 52977 - 44032: 0xB097, + 52978 - 44032: 0xB098, + 52979 - 44032: 0xB099, + 52980 - 44032: 0xC4C4, + 52981 - 44032: 0xC4C5, + 52982 - 44032: 0xB09A, + 52983 - 44032: 0xC4C6, + 52984 - 44032: 0xC4C7, + 52985 - 44032: 0xC4C8, + 52986 - 44032: 0xB09B, + 52987 - 44032: 0xB09C, + 52988 - 44032: 0xB09D, + 52989 - 44032: 0xB09E, + 52990 - 44032: 0xB09F, + 52991 - 44032: 0xB0A0, + 52992 - 44032: 0xC4C9, + 52993 - 44032: 0xC4CA, + 52994 - 44032: 0xB141, + 52995 - 44032: 0xB142, + 52996 - 44032: 0xC4CB, + 52997 - 44032: 0xB143, + 52998 - 44032: 0xB144, + 52999 - 44032: 0xB145, + 53000 - 44032: 0xC4CC, + 53001 - 44032: 0xB146, + 53002 - 44032: 0xB147, + 53003 - 44032: 0xB148, + 53004 - 44032: 0xB149, + 53005 - 44032: 0xB14A, + 53006 - 44032: 0xB14B, + 53007 - 44032: 0xB14C, + 53008 - 44032: 0xC4CD, + 53009 - 44032: 0xC4CE, + 53010 - 44032: 0xB14D, + 53011 - 44032: 0xC4CF, + 53012 - 44032: 0xB14E, + 53013 - 44032: 0xC4D0, + 53014 - 44032: 0xB14F, + 53015 - 44032: 0xB150, + 53016 - 44032: 0xB151, + 53017 - 44032: 0xB152, + 53018 - 44032: 0xB153, + 53019 - 44032: 0xB154, + 53020 - 44032: 0xC4D1, + 53021 - 44032: 0xB155, + 53022 - 44032: 0xB156, + 53023 - 44032: 0xB157, + 53024 - 44032: 0xC4D2, + 53025 - 44032: 0xB158, + 53026 - 44032: 0xB159, + 53027 - 44032: 0xB15A, + 53028 - 44032: 0xC4D3, + 53029 - 44032: 0xB161, + 53030 - 44032: 0xB162, + 53031 - 44032: 0xB163, + 53032 - 44032: 0xB164, + 53033 - 44032: 0xB165, + 53034 - 44032: 0xB166, + 53035 - 44032: 0xB167, + 53036 - 44032: 0xC4D4, + 53037 - 44032: 0xC4D5, + 53038 - 44032: 0xB168, + 53039 - 44032: 0xC4D6, + 53040 - 44032: 0xC4D7, + 53041 - 44032: 0xC4D8, + 53042 - 44032: 0xB169, + 53043 - 44032: 0xB16A, + 53044 - 44032: 0xB16B, + 53045 - 44032: 0xB16C, + 53046 - 44032: 0xB16D, + 53047 - 44032: 0xB16E, + 53048 - 44032: 0xC4D9, + 53049 - 44032: 0xB16F, + 53050 - 44032: 0xB170, + 53051 - 44032: 0xB171, + 53052 - 44032: 0xB172, + 53053 - 44032: 0xB173, + 53054 - 44032: 0xB174, + 53055 - 44032: 0xB175, + 53056 - 44032: 0xB176, + 53057 - 44032: 0xB177, + 53058 - 44032: 0xB178, + 53059 - 44032: 0xB179, + 53060 - 44032: 0xB17A, + 53061 - 44032: 0xB181, + 53062 - 44032: 0xB182, + 53063 - 44032: 0xB183, + 53064 - 44032: 0xB184, + 53065 - 44032: 0xB185, + 53066 - 44032: 0xB186, + 53067 - 44032: 0xB187, + 53068 - 44032: 0xB188, + 53069 - 44032: 0xB189, + 53070 - 44032: 0xB18A, + 53071 - 44032: 0xB18B, + 53072 - 44032: 0xB18C, + 53073 - 44032: 0xB18D, + 53074 - 44032: 0xB18E, + 53075 - 44032: 0xB18F, + 53076 - 44032: 0xC4DA, + 53077 - 44032: 0xC4DB, + 53078 - 44032: 0xB190, + 53079 - 44032: 0xB191, + 53080 - 44032: 0xC4DC, + 53081 - 44032: 0xB192, + 53082 - 44032: 0xB193, + 53083 - 44032: 0xB194, + 53084 - 44032: 0xC4DD, + 53085 - 44032: 0xB195, + 53086 - 44032: 0xB196, + 53087 - 44032: 0xB197, + 53088 - 44032: 0xB198, + 53089 - 44032: 0xB199, + 53090 - 44032: 0xB19A, + 53091 - 44032: 0xB19B, + 53092 - 44032: 0xC4DE, + 53093 - 44032: 0xC4DF, + 53094 - 44032: 0xB19C, + 53095 - 44032: 0xC4E0, + 53096 - 44032: 0xB19D, + 53097 - 44032: 0xC4E1, + 53098 - 44032: 0xB19E, + 53099 - 44032: 0xB19F, + 53100 - 44032: 0xB1A0, + 53101 - 44032: 0xB241, + 53102 - 44032: 0xB242, + 53103 - 44032: 0xB243, + 53104 - 44032: 0xC4E2, + 53105 - 44032: 0xC4E3, + 53106 - 44032: 0xB244, + 53107 - 44032: 0xB245, + 53108 - 44032: 0xC4E4, + 53109 - 44032: 0xB246, + 53110 - 44032: 0xB247, + 53111 - 44032: 0xB248, + 53112 - 44032: 0xC4E5, + 53113 - 44032: 0xB249, + 53114 - 44032: 0xB24A, + 53115 - 44032: 0xB24B, + 53116 - 44032: 0xB24C, + 53117 - 44032: 0xB24D, + 53118 - 44032: 0xB24E, + 53119 - 44032: 0xB24F, + 53120 - 44032: 0xC4E6, + 53121 - 44032: 0xB250, + 53122 - 44032: 0xB251, + 53123 - 44032: 0xB252, + 53124 - 44032: 0xB253, + 53125 - 44032: 0xC4E7, + 53126 - 44032: 0xB254, + 53127 - 44032: 0xB255, + 53128 - 44032: 0xB256, + 53129 - 44032: 0xB257, + 53130 - 44032: 0xB258, + 53131 - 44032: 0xB259, + 53132 - 44032: 0xC4E8, + 53133 - 44032: 0xB25A, + 53134 - 44032: 0xB261, + 53135 - 44032: 0xB262, + 53136 - 44032: 0xB263, + 53137 - 44032: 0xB264, + 53138 - 44032: 0xB265, + 53139 - 44032: 0xB266, + 53140 - 44032: 0xB267, + 53141 - 44032: 0xB268, + 53142 - 44032: 0xB269, + 53143 - 44032: 0xB26A, + 53144 - 44032: 0xB26B, + 53145 - 44032: 0xB26C, + 53146 - 44032: 0xB26D, + 53147 - 44032: 0xB26E, + 53148 - 44032: 0xB26F, + 53149 - 44032: 0xB270, + 53150 - 44032: 0xB271, + 53151 - 44032: 0xB272, + 53152 - 44032: 0xB273, + 53153 - 44032: 0xC4E9, + 53154 - 44032: 0xB274, + 53155 - 44032: 0xB275, + 53156 - 44032: 0xB276, + 53157 - 44032: 0xB277, + 53158 - 44032: 0xB278, + 53159 - 44032: 0xB279, + 53160 - 44032: 0xC4EA, + 53161 - 44032: 0xB27A, + 53162 - 44032: 0xB281, + 53163 - 44032: 0xB282, + 53164 - 44032: 0xB283, + 53165 - 44032: 0xB284, + 53166 - 44032: 0xB285, + 53167 - 44032: 0xB286, + 53168 - 44032: 0xC4EB, + 53169 - 44032: 0xB287, + 53170 - 44032: 0xB288, + 53171 - 44032: 0xB289, + 53172 - 44032: 0xB28A, + 53173 - 44032: 0xB28B, + 53174 - 44032: 0xB28C, + 53175 - 44032: 0xB28D, + 53176 - 44032: 0xB28E, + 53177 - 44032: 0xB28F, + 53178 - 44032: 0xB290, + 53179 - 44032: 0xB291, + 53180 - 44032: 0xB292, + 53181 - 44032: 0xB293, + 53182 - 44032: 0xB294, + 53183 - 44032: 0xB295, + 53184 - 44032: 0xB296, + 53185 - 44032: 0xB297, + 53186 - 44032: 0xB298, + 53187 - 44032: 0xB299, + 53188 - 44032: 0xC4EC, + 53189 - 44032: 0xB29A, + 53190 - 44032: 0xB29B, + 53191 - 44032: 0xB29C, + 53192 - 44032: 0xB29D, + 53193 - 44032: 0xB29E, + 53194 - 44032: 0xB29F, + 53195 - 44032: 0xB2A0, + 53196 - 44032: 0xB341, + 53197 - 44032: 0xB342, + 53198 - 44032: 0xB343, + 53199 - 44032: 0xB344, + 53200 - 44032: 0xB345, + 53201 - 44032: 0xB346, + 53202 - 44032: 0xB347, + 53203 - 44032: 0xB348, + 53204 - 44032: 0xB349, + 53205 - 44032: 0xB34A, + 53206 - 44032: 0xB34B, + 53207 - 44032: 0xB34C, + 53208 - 44032: 0xB34D, + 53209 - 44032: 0xB34E, + 53210 - 44032: 0xB34F, + 53211 - 44032: 0xB350, + 53212 - 44032: 0xB351, + 53213 - 44032: 0xB352, + 53214 - 44032: 0xB353, + 53215 - 44032: 0xB354, + 53216 - 44032: 0xC4ED, + 53217 - 44032: 0xC4EE, + 53218 - 44032: 0xB355, + 53219 - 44032: 0xB356, + 53220 - 44032: 0xC4EF, + 53221 - 44032: 0xB357, + 53222 - 44032: 0xB358, + 53223 - 44032: 0xB359, + 53224 - 44032: 0xC4F0, + 53225 - 44032: 0xB35A, + 53226 - 44032: 0xB361, + 53227 - 44032: 0xB362, + 53228 - 44032: 0xB363, + 53229 - 44032: 0xB364, + 53230 - 44032: 0xB365, + 53231 - 44032: 0xB366, + 53232 - 44032: 0xC4F1, + 53233 - 44032: 0xC4F2, + 53234 - 44032: 0xB367, + 53235 - 44032: 0xC4F3, + 53236 - 44032: 0xB368, + 53237 - 44032: 0xC4F4, + 53238 - 44032: 0xB369, + 53239 - 44032: 0xB36A, + 53240 - 44032: 0xB36B, + 53241 - 44032: 0xB36C, + 53242 - 44032: 0xB36D, + 53243 - 44032: 0xB36E, + 53244 - 44032: 0xC4F5, + 53245 - 44032: 0xB36F, + 53246 - 44032: 0xB370, + 53247 - 44032: 0xB371, + 53248 - 44032: 0xC4F6, + 53249 - 44032: 0xB372, + 53250 - 44032: 0xB373, + 53251 - 44032: 0xB374, + 53252 - 44032: 0xC4F7, + 53253 - 44032: 0xB375, + 53254 - 44032: 0xB376, + 53255 - 44032: 0xB377, + 53256 - 44032: 0xB378, + 53257 - 44032: 0xB379, + 53258 - 44032: 0xB37A, + 53259 - 44032: 0xB381, + 53260 - 44032: 0xB382, + 53261 - 44032: 0xB383, + 53262 - 44032: 0xB384, + 53263 - 44032: 0xB385, + 53264 - 44032: 0xB386, + 53265 - 44032: 0xC4F8, + 53266 - 44032: 0xB387, + 53267 - 44032: 0xB388, + 53268 - 44032: 0xB389, + 53269 - 44032: 0xB38A, + 53270 - 44032: 0xB38B, + 53271 - 44032: 0xB38C, + 53272 - 44032: 0xC4F9, + 53273 - 44032: 0xB38D, + 53274 - 44032: 0xB38E, + 53275 - 44032: 0xB38F, + 53276 - 44032: 0xB390, + 53277 - 44032: 0xB391, + 53278 - 44032: 0xB392, + 53279 - 44032: 0xB393, + 53280 - 44032: 0xB394, + 53281 - 44032: 0xB395, + 53282 - 44032: 0xB396, + 53283 - 44032: 0xB397, + 53284 - 44032: 0xB398, + 53285 - 44032: 0xB399, + 53286 - 44032: 0xB39A, + 53287 - 44032: 0xB39B, + 53288 - 44032: 0xB39C, + 53289 - 44032: 0xB39D, + 53290 - 44032: 0xB39E, + 53291 - 44032: 0xB39F, + 53292 - 44032: 0xB3A0, + 53293 - 44032: 0xC4FA, + 53294 - 44032: 0xB441, + 53295 - 44032: 0xB442, + 53296 - 44032: 0xB443, + 53297 - 44032: 0xB444, + 53298 - 44032: 0xB445, + 53299 - 44032: 0xB446, + 53300 - 44032: 0xC4FB, + 53301 - 44032: 0xC4FC, + 53302 - 44032: 0xB447, + 53303 - 44032: 0xB448, + 53304 - 44032: 0xC4FD, + 53305 - 44032: 0xB449, + 53306 - 44032: 0xB44A, + 53307 - 44032: 0xB44B, + 53308 - 44032: 0xC4FE, + 53309 - 44032: 0xB44C, + 53310 - 44032: 0xB44D, + 53311 - 44032: 0xB44E, + 53312 - 44032: 0xB44F, + 53313 - 44032: 0xB450, + 53314 - 44032: 0xB451, + 53315 - 44032: 0xB452, + 53316 - 44032: 0xC5A1, + 53317 - 44032: 0xC5A2, + 53318 - 44032: 0xB453, + 53319 - 44032: 0xC5A3, + 53320 - 44032: 0xB454, + 53321 - 44032: 0xC5A4, + 53322 - 44032: 0xB455, + 53323 - 44032: 0xB456, + 53324 - 44032: 0xB457, + 53325 - 44032: 0xB458, + 53326 - 44032: 0xB459, + 53327 - 44032: 0xB45A, + 53328 - 44032: 0xC5A5, + 53329 - 44032: 0xB461, + 53330 - 44032: 0xB462, + 53331 - 44032: 0xB463, + 53332 - 44032: 0xC5A6, + 53333 - 44032: 0xB464, + 53334 - 44032: 0xB465, + 53335 - 44032: 0xB466, + 53336 - 44032: 0xC5A7, + 53337 - 44032: 0xB467, + 53338 - 44032: 0xB468, + 53339 - 44032: 0xB469, + 53340 - 44032: 0xB46A, + 53341 - 44032: 0xB46B, + 53342 - 44032: 0xB46C, + 53343 - 44032: 0xB46D, + 53344 - 44032: 0xC5A8, + 53345 - 44032: 0xB46E, + 53346 - 44032: 0xB46F, + 53347 - 44032: 0xB470, + 53348 - 44032: 0xB471, + 53349 - 44032: 0xB472, + 53350 - 44032: 0xB473, + 53351 - 44032: 0xB474, + 53352 - 44032: 0xB475, + 53353 - 44032: 0xB476, + 53354 - 44032: 0xB477, + 53355 - 44032: 0xB478, + 53356 - 44032: 0xC5A9, + 53357 - 44032: 0xC5AA, + 53358 - 44032: 0xB479, + 53359 - 44032: 0xB47A, + 53360 - 44032: 0xC5AB, + 53361 - 44032: 0xB481, + 53362 - 44032: 0xB482, + 53363 - 44032: 0xB483, + 53364 - 44032: 0xC5AC, + 53365 - 44032: 0xB484, + 53366 - 44032: 0xB485, + 53367 - 44032: 0xB486, + 53368 - 44032: 0xB487, + 53369 - 44032: 0xB488, + 53370 - 44032: 0xB489, + 53371 - 44032: 0xB48A, + 53372 - 44032: 0xC5AD, + 53373 - 44032: 0xC5AE, + 53374 - 44032: 0xB48B, + 53375 - 44032: 0xB48C, + 53376 - 44032: 0xB48D, + 53377 - 44032: 0xC5AF, + 53378 - 44032: 0xB48E, + 53379 - 44032: 0xB48F, + 53380 - 44032: 0xB490, + 53381 - 44032: 0xB491, + 53382 - 44032: 0xB492, + 53383 - 44032: 0xB493, + 53384 - 44032: 0xB494, + 53385 - 44032: 0xB495, + 53386 - 44032: 0xB496, + 53387 - 44032: 0xB497, + 53388 - 44032: 0xB498, + 53389 - 44032: 0xB499, + 53390 - 44032: 0xB49A, + 53391 - 44032: 0xB49B, + 53392 - 44032: 0xB49C, + 53393 - 44032: 0xB49D, + 53394 - 44032: 0xB49E, + 53395 - 44032: 0xB49F, + 53396 - 44032: 0xB4A0, + 53397 - 44032: 0xB541, + 53398 - 44032: 0xB542, + 53399 - 44032: 0xB543, + 53400 - 44032: 0xB544, + 53401 - 44032: 0xB545, + 53402 - 44032: 0xB546, + 53403 - 44032: 0xB547, + 53404 - 44032: 0xB548, + 53405 - 44032: 0xB549, + 53406 - 44032: 0xB54A, + 53407 - 44032: 0xB54B, + 53408 - 44032: 0xB54C, + 53409 - 44032: 0xB54D, + 53410 - 44032: 0xB54E, + 53411 - 44032: 0xB54F, + 53412 - 44032: 0xC5B0, + 53413 - 44032: 0xC5B1, + 53414 - 44032: 0xB550, + 53415 - 44032: 0xB551, + 53416 - 44032: 0xC5B2, + 53417 - 44032: 0xB552, + 53418 - 44032: 0xB553, + 53419 - 44032: 0xB554, + 53420 - 44032: 0xC5B3, + 53421 - 44032: 0xB555, + 53422 - 44032: 0xB556, + 53423 - 44032: 0xB557, + 53424 - 44032: 0xB558, + 53425 - 44032: 0xB559, + 53426 - 44032: 0xB55A, + 53427 - 44032: 0xB561, + 53428 - 44032: 0xC5B4, + 53429 - 44032: 0xC5B5, + 53430 - 44032: 0xB562, + 53431 - 44032: 0xC5B6, + 53432 - 44032: 0xB563, + 53433 - 44032: 0xC5B7, + 53434 - 44032: 0xB564, + 53435 - 44032: 0xB565, + 53436 - 44032: 0xB566, + 53437 - 44032: 0xB567, + 53438 - 44032: 0xB568, + 53439 - 44032: 0xB569, + 53440 - 44032: 0xC5B8, + 53441 - 44032: 0xC5B9, + 53442 - 44032: 0xB56A, + 53443 - 44032: 0xB56B, + 53444 - 44032: 0xC5BA, + 53445 - 44032: 0xB56C, + 53446 - 44032: 0xB56D, + 53447 - 44032: 0xB56E, + 53448 - 44032: 0xC5BB, + 53449 - 44032: 0xC5BC, + 53450 - 44032: 0xB56F, + 53451 - 44032: 0xB570, + 53452 - 44032: 0xB571, + 53453 - 44032: 0xB572, + 53454 - 44032: 0xB573, + 53455 - 44032: 0xB574, + 53456 - 44032: 0xC5BD, + 53457 - 44032: 0xC5BE, + 53458 - 44032: 0xB575, + 53459 - 44032: 0xC5BF, + 53460 - 44032: 0xC5C0, + 53461 - 44032: 0xC5C1, + 53462 - 44032: 0xB576, + 53463 - 44032: 0xB577, + 53464 - 44032: 0xB578, + 53465 - 44032: 0xB579, + 53466 - 44032: 0xB57A, + 53467 - 44032: 0xB581, + 53468 - 44032: 0xC5C2, + 53469 - 44032: 0xC5C3, + 53470 - 44032: 0xB582, + 53471 - 44032: 0xB583, + 53472 - 44032: 0xC5C4, + 53473 - 44032: 0xB584, + 53474 - 44032: 0xB585, + 53475 - 44032: 0xB586, + 53476 - 44032: 0xC5C5, + 53477 - 44032: 0xB587, + 53478 - 44032: 0xB588, + 53479 - 44032: 0xB589, + 53480 - 44032: 0xB58A, + 53481 - 44032: 0xB58B, + 53482 - 44032: 0xB58C, + 53483 - 44032: 0xB58D, + 53484 - 44032: 0xC5C6, + 53485 - 44032: 0xC5C7, + 53486 - 44032: 0xB58E, + 53487 - 44032: 0xC5C8, + 53488 - 44032: 0xC5C9, + 53489 - 44032: 0xC5CA, + 53490 - 44032: 0xB58F, + 53491 - 44032: 0xB590, + 53492 - 44032: 0xB591, + 53493 - 44032: 0xB592, + 53494 - 44032: 0xB593, + 53495 - 44032: 0xB594, + 53496 - 44032: 0xC5CB, + 53497 - 44032: 0xB595, + 53498 - 44032: 0xB596, + 53499 - 44032: 0xB597, + 53500 - 44032: 0xB598, + 53501 - 44032: 0xB599, + 53502 - 44032: 0xB59A, + 53503 - 44032: 0xB59B, + 53504 - 44032: 0xB59C, + 53505 - 44032: 0xB59D, + 53506 - 44032: 0xB59E, + 53507 - 44032: 0xB59F, + 53508 - 44032: 0xB5A0, + 53509 - 44032: 0xB641, + 53510 - 44032: 0xB642, + 53511 - 44032: 0xB643, + 53512 - 44032: 0xB644, + 53513 - 44032: 0xB645, + 53514 - 44032: 0xB646, + 53515 - 44032: 0xB647, + 53516 - 44032: 0xB648, + 53517 - 44032: 0xC5CC, + 53518 - 44032: 0xB649, + 53519 - 44032: 0xB64A, + 53520 - 44032: 0xB64B, + 53521 - 44032: 0xB64C, + 53522 - 44032: 0xB64D, + 53523 - 44032: 0xB64E, + 53524 - 44032: 0xB64F, + 53525 - 44032: 0xB650, + 53526 - 44032: 0xB651, + 53527 - 44032: 0xB652, + 53528 - 44032: 0xB653, + 53529 - 44032: 0xB654, + 53530 - 44032: 0xB655, + 53531 - 44032: 0xB656, + 53532 - 44032: 0xB657, + 53533 - 44032: 0xB658, + 53534 - 44032: 0xB659, + 53535 - 44032: 0xB65A, + 53536 - 44032: 0xB661, + 53537 - 44032: 0xB662, + 53538 - 44032: 0xB663, + 53539 - 44032: 0xB664, + 53540 - 44032: 0xB665, + 53541 - 44032: 0xB666, + 53542 - 44032: 0xB667, + 53543 - 44032: 0xB668, + 53544 - 44032: 0xB669, + 53545 - 44032: 0xB66A, + 53546 - 44032: 0xB66B, + 53547 - 44032: 0xB66C, + 53548 - 44032: 0xB66D, + 53549 - 44032: 0xB66E, + 53550 - 44032: 0xB66F, + 53551 - 44032: 0xB670, + 53552 - 44032: 0xC5CD, + 53553 - 44032: 0xC5CE, + 53554 - 44032: 0xB671, + 53555 - 44032: 0xB672, + 53556 - 44032: 0xC5CF, + 53557 - 44032: 0xB673, + 53558 - 44032: 0xB674, + 53559 - 44032: 0xB675, + 53560 - 44032: 0xC5D0, + 53561 - 44032: 0xB676, + 53562 - 44032: 0xC5D1, + 53563 - 44032: 0xB677, + 53564 - 44032: 0xB678, + 53565 - 44032: 0xB679, + 53566 - 44032: 0xB67A, + 53567 - 44032: 0xB681, + 53568 - 44032: 0xC5D2, + 53569 - 44032: 0xC5D3, + 53570 - 44032: 0xB682, + 53571 - 44032: 0xC5D4, + 53572 - 44032: 0xC5D5, + 53573 - 44032: 0xC5D6, + 53574 - 44032: 0xB683, + 53575 - 44032: 0xB684, + 53576 - 44032: 0xB685, + 53577 - 44032: 0xB686, + 53578 - 44032: 0xB687, + 53579 - 44032: 0xB688, + 53580 - 44032: 0xC5D7, + 53581 - 44032: 0xC5D8, + 53582 - 44032: 0xB689, + 53583 - 44032: 0xB68A, + 53584 - 44032: 0xC5D9, + 53585 - 44032: 0xB68B, + 53586 - 44032: 0xB68C, + 53587 - 44032: 0xB68D, + 53588 - 44032: 0xC5DA, + 53589 - 44032: 0xB68E, + 53590 - 44032: 0xB68F, + 53591 - 44032: 0xB690, + 53592 - 44032: 0xB691, + 53593 - 44032: 0xB692, + 53594 - 44032: 0xB693, + 53595 - 44032: 0xB694, + 53596 - 44032: 0xC5DB, + 53597 - 44032: 0xC5DC, + 53598 - 44032: 0xB695, + 53599 - 44032: 0xC5DD, + 53600 - 44032: 0xB696, + 53601 - 44032: 0xC5DE, + 53602 - 44032: 0xB697, + 53603 - 44032: 0xB698, + 53604 - 44032: 0xB699, + 53605 - 44032: 0xB69A, + 53606 - 44032: 0xB69B, + 53607 - 44032: 0xB69C, + 53608 - 44032: 0xC5DF, + 53609 - 44032: 0xB69D, + 53610 - 44032: 0xB69E, + 53611 - 44032: 0xB69F, + 53612 - 44032: 0xC5E0, + 53613 - 44032: 0xB6A0, + 53614 - 44032: 0xB741, + 53615 - 44032: 0xB742, + 53616 - 44032: 0xB743, + 53617 - 44032: 0xB744, + 53618 - 44032: 0xB745, + 53619 - 44032: 0xB746, + 53620 - 44032: 0xB747, + 53621 - 44032: 0xB748, + 53622 - 44032: 0xB749, + 53623 - 44032: 0xB74A, + 53624 - 44032: 0xB74B, + 53625 - 44032: 0xB74C, + 53626 - 44032: 0xB74D, + 53627 - 44032: 0xB74E, + 53628 - 44032: 0xC5E1, + 53629 - 44032: 0xB74F, + 53630 - 44032: 0xB750, + 53631 - 44032: 0xB751, + 53632 - 44032: 0xB752, + 53633 - 44032: 0xB753, + 53634 - 44032: 0xB754, + 53635 - 44032: 0xB755, + 53636 - 44032: 0xC5E2, + 53637 - 44032: 0xB756, + 53638 - 44032: 0xB757, + 53639 - 44032: 0xB758, + 53640 - 44032: 0xC5E3, + 53641 - 44032: 0xB759, + 53642 - 44032: 0xB75A, + 53643 - 44032: 0xB761, + 53644 - 44032: 0xB762, + 53645 - 44032: 0xB763, + 53646 - 44032: 0xB764, + 53647 - 44032: 0xB765, + 53648 - 44032: 0xB766, + 53649 - 44032: 0xB767, + 53650 - 44032: 0xB768, + 53651 - 44032: 0xB769, + 53652 - 44032: 0xB76A, + 53653 - 44032: 0xB76B, + 53654 - 44032: 0xB76C, + 53655 - 44032: 0xB76D, + 53656 - 44032: 0xB76E, + 53657 - 44032: 0xB76F, + 53658 - 44032: 0xB770, + 53659 - 44032: 0xB771, + 53660 - 44032: 0xB772, + 53661 - 44032: 0xB773, + 53662 - 44032: 0xB774, + 53663 - 44032: 0xB775, + 53664 - 44032: 0xC5E4, + 53665 - 44032: 0xC5E5, + 53666 - 44032: 0xB776, + 53667 - 44032: 0xB777, + 53668 - 44032: 0xC5E6, + 53669 - 44032: 0xB778, + 53670 - 44032: 0xB779, + 53671 - 44032: 0xB77A, + 53672 - 44032: 0xC5E7, + 53673 - 44032: 0xB781, + 53674 - 44032: 0xB782, + 53675 - 44032: 0xB783, + 53676 - 44032: 0xB784, + 53677 - 44032: 0xB785, + 53678 - 44032: 0xB786, + 53679 - 44032: 0xB787, + 53680 - 44032: 0xC5E8, + 53681 - 44032: 0xC5E9, + 53682 - 44032: 0xB788, + 53683 - 44032: 0xC5EA, + 53684 - 44032: 0xB789, + 53685 - 44032: 0xC5EB, + 53686 - 44032: 0xB78A, + 53687 - 44032: 0xB78B, + 53688 - 44032: 0xB78C, + 53689 - 44032: 0xB78D, + 53690 - 44032: 0xC5EC, + 53691 - 44032: 0xB78E, + 53692 - 44032: 0xC5ED, + 53693 - 44032: 0xB78F, + 53694 - 44032: 0xB790, + 53695 - 44032: 0xB791, + 53696 - 44032: 0xC5EE, + 53697 - 44032: 0xB792, + 53698 - 44032: 0xB793, + 53699 - 44032: 0xB794, + 53700 - 44032: 0xB795, + 53701 - 44032: 0xB796, + 53702 - 44032: 0xB797, + 53703 - 44032: 0xB798, + 53704 - 44032: 0xB799, + 53705 - 44032: 0xB79A, + 53706 - 44032: 0xB79B, + 53707 - 44032: 0xB79C, + 53708 - 44032: 0xB79D, + 53709 - 44032: 0xB79E, + 53710 - 44032: 0xB79F, + 53711 - 44032: 0xB7A0, + 53712 - 44032: 0xB841, + 53713 - 44032: 0xB842, + 53714 - 44032: 0xB843, + 53715 - 44032: 0xB844, + 53716 - 44032: 0xB845, + 53717 - 44032: 0xB846, + 53718 - 44032: 0xB847, + 53719 - 44032: 0xB848, + 53720 - 44032: 0xC5EF, + 53721 - 44032: 0xB849, + 53722 - 44032: 0xB84A, + 53723 - 44032: 0xB84B, + 53724 - 44032: 0xB84C, + 53725 - 44032: 0xB84D, + 53726 - 44032: 0xB84E, + 53727 - 44032: 0xB84F, + 53728 - 44032: 0xB850, + 53729 - 44032: 0xB851, + 53730 - 44032: 0xB852, + 53731 - 44032: 0xB853, + 53732 - 44032: 0xB854, + 53733 - 44032: 0xB855, + 53734 - 44032: 0xB856, + 53735 - 44032: 0xB857, + 53736 - 44032: 0xB858, + 53737 - 44032: 0xB859, + 53738 - 44032: 0xB85A, + 53739 - 44032: 0xB861, + 53740 - 44032: 0xB862, + 53741 - 44032: 0xB863, + 53742 - 44032: 0xB864, + 53743 - 44032: 0xB865, + 53744 - 44032: 0xB866, + 53745 - 44032: 0xB867, + 53746 - 44032: 0xB868, + 53747 - 44032: 0xB869, + 53748 - 44032: 0xC5F0, + 53749 - 44032: 0xB86A, + 53750 - 44032: 0xB86B, + 53751 - 44032: 0xB86C, + 53752 - 44032: 0xC5F1, + 53753 - 44032: 0xB86D, + 53754 - 44032: 0xB86E, + 53755 - 44032: 0xB86F, + 53756 - 44032: 0xB870, + 53757 - 44032: 0xB871, + 53758 - 44032: 0xB872, + 53759 - 44032: 0xB873, + 53760 - 44032: 0xB874, + 53761 - 44032: 0xB875, + 53762 - 44032: 0xB876, + 53763 - 44032: 0xB877, + 53764 - 44032: 0xB878, + 53765 - 44032: 0xB879, + 53766 - 44032: 0xB87A, + 53767 - 44032: 0xC5F2, + 53768 - 44032: 0xB881, + 53769 - 44032: 0xC5F3, + 53770 - 44032: 0xB882, + 53771 - 44032: 0xB883, + 53772 - 44032: 0xB884, + 53773 - 44032: 0xB885, + 53774 - 44032: 0xB886, + 53775 - 44032: 0xB887, + 53776 - 44032: 0xC5F4, + 53777 - 44032: 0xB888, + 53778 - 44032: 0xB889, + 53779 - 44032: 0xB88A, + 53780 - 44032: 0xB88B, + 53781 - 44032: 0xB88C, + 53782 - 44032: 0xB88D, + 53783 - 44032: 0xB88E, + 53784 - 44032: 0xB88F, + 53785 - 44032: 0xB890, + 53786 - 44032: 0xB891, + 53787 - 44032: 0xB892, + 53788 - 44032: 0xB893, + 53789 - 44032: 0xB894, + 53790 - 44032: 0xB895, + 53791 - 44032: 0xB896, + 53792 - 44032: 0xB897, + 53793 - 44032: 0xB898, + 53794 - 44032: 0xB899, + 53795 - 44032: 0xB89A, + 53796 - 44032: 0xB89B, + 53797 - 44032: 0xB89C, + 53798 - 44032: 0xB89D, + 53799 - 44032: 0xB89E, + 53800 - 44032: 0xB89F, + 53801 - 44032: 0xB8A0, + 53802 - 44032: 0xB941, + 53803 - 44032: 0xB942, + 53804 - 44032: 0xC5F5, + 53805 - 44032: 0xC5F6, + 53806 - 44032: 0xB943, + 53807 - 44032: 0xB944, + 53808 - 44032: 0xC5F7, + 53809 - 44032: 0xB945, + 53810 - 44032: 0xB946, + 53811 - 44032: 0xB947, + 53812 - 44032: 0xC5F8, + 53813 - 44032: 0xB948, + 53814 - 44032: 0xB949, + 53815 - 44032: 0xB94A, + 53816 - 44032: 0xB94B, + 53817 - 44032: 0xB94C, + 53818 - 44032: 0xB94D, + 53819 - 44032: 0xB94E, + 53820 - 44032: 0xC5F9, + 53821 - 44032: 0xC5FA, + 53822 - 44032: 0xB94F, + 53823 - 44032: 0xC5FB, + 53824 - 44032: 0xB950, + 53825 - 44032: 0xC5FC, + 53826 - 44032: 0xB951, + 53827 - 44032: 0xB952, + 53828 - 44032: 0xB953, + 53829 - 44032: 0xB954, + 53830 - 44032: 0xB955, + 53831 - 44032: 0xB956, + 53832 - 44032: 0xC5FD, + 53833 - 44032: 0xB957, + 53834 - 44032: 0xB958, + 53835 - 44032: 0xB959, + 53836 - 44032: 0xB95A, + 53837 - 44032: 0xB961, + 53838 - 44032: 0xB962, + 53839 - 44032: 0xB963, + 53840 - 44032: 0xB964, + 53841 - 44032: 0xB965, + 53842 - 44032: 0xB966, + 53843 - 44032: 0xB967, + 53844 - 44032: 0xB968, + 53845 - 44032: 0xB969, + 53846 - 44032: 0xB96A, + 53847 - 44032: 0xB96B, + 53848 - 44032: 0xB96C, + 53849 - 44032: 0xB96D, + 53850 - 44032: 0xB96E, + 53851 - 44032: 0xB96F, + 53852 - 44032: 0xC5FE, + 53853 - 44032: 0xB970, + 53854 - 44032: 0xB971, + 53855 - 44032: 0xB972, + 53856 - 44032: 0xB973, + 53857 - 44032: 0xB974, + 53858 - 44032: 0xB975, + 53859 - 44032: 0xB976, + 53860 - 44032: 0xC6A1, + 53861 - 44032: 0xB977, + 53862 - 44032: 0xB978, + 53863 - 44032: 0xB979, + 53864 - 44032: 0xB97A, + 53865 - 44032: 0xB981, + 53866 - 44032: 0xB982, + 53867 - 44032: 0xB983, + 53868 - 44032: 0xB984, + 53869 - 44032: 0xB985, + 53870 - 44032: 0xB986, + 53871 - 44032: 0xB987, + 53872 - 44032: 0xB988, + 53873 - 44032: 0xB989, + 53874 - 44032: 0xB98A, + 53875 - 44032: 0xB98B, + 53876 - 44032: 0xB98C, + 53877 - 44032: 0xB98D, + 53878 - 44032: 0xB98E, + 53879 - 44032: 0xB98F, + 53880 - 44032: 0xB990, + 53881 - 44032: 0xB991, + 53882 - 44032: 0xB992, + 53883 - 44032: 0xB993, + 53884 - 44032: 0xB994, + 53885 - 44032: 0xB995, + 53886 - 44032: 0xB996, + 53887 - 44032: 0xB997, + 53888 - 44032: 0xC6A2, + 53889 - 44032: 0xC6A3, + 53890 - 44032: 0xB998, + 53891 - 44032: 0xB999, + 53892 - 44032: 0xC6A4, + 53893 - 44032: 0xB99A, + 53894 - 44032: 0xB99B, + 53895 - 44032: 0xB99C, + 53896 - 44032: 0xC6A5, + 53897 - 44032: 0xB99D, + 53898 - 44032: 0xB99E, + 53899 - 44032: 0xB99F, + 53900 - 44032: 0xB9A0, + 53901 - 44032: 0xBA41, + 53902 - 44032: 0xBA42, + 53903 - 44032: 0xBA43, + 53904 - 44032: 0xC6A6, + 53905 - 44032: 0xC6A7, + 53906 - 44032: 0xBA44, + 53907 - 44032: 0xBA45, + 53908 - 44032: 0xBA46, + 53909 - 44032: 0xC6A8, + 53910 - 44032: 0xBA47, + 53911 - 44032: 0xBA48, + 53912 - 44032: 0xBA49, + 53913 - 44032: 0xBA4A, + 53914 - 44032: 0xBA4B, + 53915 - 44032: 0xBA4C, + 53916 - 44032: 0xC6A9, + 53917 - 44032: 0xBA4D, + 53918 - 44032: 0xBA4E, + 53919 - 44032: 0xBA4F, + 53920 - 44032: 0xC6AA, + 53921 - 44032: 0xBA50, + 53922 - 44032: 0xBA51, + 53923 - 44032: 0xBA52, + 53924 - 44032: 0xC6AB, + 53925 - 44032: 0xBA53, + 53926 - 44032: 0xBA54, + 53927 - 44032: 0xBA55, + 53928 - 44032: 0xBA56, + 53929 - 44032: 0xBA57, + 53930 - 44032: 0xBA58, + 53931 - 44032: 0xBA59, + 53932 - 44032: 0xC6AC, + 53933 - 44032: 0xBA5A, + 53934 - 44032: 0xBA61, + 53935 - 44032: 0xBA62, + 53936 - 44032: 0xBA63, + 53937 - 44032: 0xC6AD, + 53938 - 44032: 0xBA64, + 53939 - 44032: 0xBA65, + 53940 - 44032: 0xBA66, + 53941 - 44032: 0xBA67, + 53942 - 44032: 0xBA68, + 53943 - 44032: 0xBA69, + 53944 - 44032: 0xC6AE, + 53945 - 44032: 0xC6AF, + 53946 - 44032: 0xBA6A, + 53947 - 44032: 0xBA6B, + 53948 - 44032: 0xC6B0, + 53949 - 44032: 0xBA6C, + 53950 - 44032: 0xBA6D, + 53951 - 44032: 0xC6B1, + 53952 - 44032: 0xC6B2, + 53953 - 44032: 0xBA6E, + 53954 - 44032: 0xC6B3, + 53955 - 44032: 0xBA6F, + 53956 - 44032: 0xBA70, + 53957 - 44032: 0xBA71, + 53958 - 44032: 0xBA72, + 53959 - 44032: 0xBA73, + 53960 - 44032: 0xC6B4, + 53961 - 44032: 0xC6B5, + 53962 - 44032: 0xBA74, + 53963 - 44032: 0xC6B6, + 53964 - 44032: 0xBA75, + 53965 - 44032: 0xBA76, + 53966 - 44032: 0xBA77, + 53967 - 44032: 0xBA78, + 53968 - 44032: 0xBA79, + 53969 - 44032: 0xBA7A, + 53970 - 44032: 0xBA81, + 53971 - 44032: 0xBA82, + 53972 - 44032: 0xC6B7, + 53973 - 44032: 0xBA83, + 53974 - 44032: 0xBA84, + 53975 - 44032: 0xBA85, + 53976 - 44032: 0xC6B8, + 53977 - 44032: 0xBA86, + 53978 - 44032: 0xBA87, + 53979 - 44032: 0xBA88, + 53980 - 44032: 0xC6B9, + 53981 - 44032: 0xBA89, + 53982 - 44032: 0xBA8A, + 53983 - 44032: 0xBA8B, + 53984 - 44032: 0xBA8C, + 53985 - 44032: 0xBA8D, + 53986 - 44032: 0xBA8E, + 53987 - 44032: 0xBA8F, + 53988 - 44032: 0xC6BA, + 53989 - 44032: 0xC6BB, + 53990 - 44032: 0xBA90, + 53991 - 44032: 0xBA91, + 53992 - 44032: 0xBA92, + 53993 - 44032: 0xBA93, + 53994 - 44032: 0xBA94, + 53995 - 44032: 0xBA95, + 53996 - 44032: 0xBA96, + 53997 - 44032: 0xBA97, + 53998 - 44032: 0xBA98, + 53999 - 44032: 0xBA99, + 54000 - 44032: 0xC6BC, + 54001 - 44032: 0xC6BD, + 54002 - 44032: 0xBA9A, + 54003 - 44032: 0xBA9B, + 54004 - 44032: 0xC6BE, + 54005 - 44032: 0xBA9C, + 54006 - 44032: 0xBA9D, + 54007 - 44032: 0xBA9E, + 54008 - 44032: 0xC6BF, + 54009 - 44032: 0xBA9F, + 54010 - 44032: 0xBAA0, + 54011 - 44032: 0xBB41, + 54012 - 44032: 0xBB42, + 54013 - 44032: 0xBB43, + 54014 - 44032: 0xBB44, + 54015 - 44032: 0xBB45, + 54016 - 44032: 0xC6C0, + 54017 - 44032: 0xC6C1, + 54018 - 44032: 0xBB46, + 54019 - 44032: 0xC6C2, + 54020 - 44032: 0xBB47, + 54021 - 44032: 0xC6C3, + 54022 - 44032: 0xBB48, + 54023 - 44032: 0xBB49, + 54024 - 44032: 0xBB4A, + 54025 - 44032: 0xBB4B, + 54026 - 44032: 0xBB4C, + 54027 - 44032: 0xBB4D, + 54028 - 44032: 0xC6C4, + 54029 - 44032: 0xC6C5, + 54030 - 44032: 0xC6C6, + 54031 - 44032: 0xBB4E, + 54032 - 44032: 0xC6C7, + 54033 - 44032: 0xBB4F, + 54034 - 44032: 0xBB50, + 54035 - 44032: 0xBB51, + 54036 - 44032: 0xC6C8, + 54037 - 44032: 0xBB52, + 54038 - 44032: 0xC6C9, + 54039 - 44032: 0xBB53, + 54040 - 44032: 0xBB54, + 54041 - 44032: 0xBB55, + 54042 - 44032: 0xBB56, + 54043 - 44032: 0xBB57, + 54044 - 44032: 0xC6CA, + 54045 - 44032: 0xC6CB, + 54046 - 44032: 0xBB58, + 54047 - 44032: 0xC6CC, + 54048 - 44032: 0xC6CD, + 54049 - 44032: 0xC6CE, + 54050 - 44032: 0xBB59, + 54051 - 44032: 0xBB5A, + 54052 - 44032: 0xBB61, + 54053 - 44032: 0xC6CF, + 54054 - 44032: 0xBB62, + 54055 - 44032: 0xBB63, + 54056 - 44032: 0xC6D0, + 54057 - 44032: 0xC6D1, + 54058 - 44032: 0xBB64, + 54059 - 44032: 0xBB65, + 54060 - 44032: 0xC6D2, + 54061 - 44032: 0xBB66, + 54062 - 44032: 0xBB67, + 54063 - 44032: 0xBB68, + 54064 - 44032: 0xC6D3, + 54065 - 44032: 0xBB69, + 54066 - 44032: 0xBB6A, + 54067 - 44032: 0xBB6B, + 54068 - 44032: 0xBB6C, + 54069 - 44032: 0xBB6D, + 54070 - 44032: 0xBB6E, + 54071 - 44032: 0xBB6F, + 54072 - 44032: 0xC6D4, + 54073 - 44032: 0xC6D5, + 54074 - 44032: 0xBB70, + 54075 - 44032: 0xC6D6, + 54076 - 44032: 0xC6D7, + 54077 - 44032: 0xC6D8, + 54078 - 44032: 0xBB71, + 54079 - 44032: 0xBB72, + 54080 - 44032: 0xBB73, + 54081 - 44032: 0xBB74, + 54082 - 44032: 0xBB75, + 54083 - 44032: 0xBB76, + 54084 - 44032: 0xC6D9, + 54085 - 44032: 0xC6DA, + 54086 - 44032: 0xBB77, + 54087 - 44032: 0xBB78, + 54088 - 44032: 0xBB79, + 54089 - 44032: 0xBB7A, + 54090 - 44032: 0xBB81, + 54091 - 44032: 0xBB82, + 54092 - 44032: 0xBB83, + 54093 - 44032: 0xBB84, + 54094 - 44032: 0xBB85, + 54095 - 44032: 0xBB86, + 54096 - 44032: 0xBB87, + 54097 - 44032: 0xBB88, + 54098 - 44032: 0xBB89, + 54099 - 44032: 0xBB8A, + 54100 - 44032: 0xBB8B, + 54101 - 44032: 0xBB8C, + 54102 - 44032: 0xBB8D, + 54103 - 44032: 0xBB8E, + 54104 - 44032: 0xBB8F, + 54105 - 44032: 0xBB90, + 54106 - 44032: 0xBB91, + 54107 - 44032: 0xBB92, + 54108 - 44032: 0xBB93, + 54109 - 44032: 0xBB94, + 54110 - 44032: 0xBB95, + 54111 - 44032: 0xBB96, + 54112 - 44032: 0xBB97, + 54113 - 44032: 0xBB98, + 54114 - 44032: 0xBB99, + 54115 - 44032: 0xBB9A, + 54116 - 44032: 0xBB9B, + 54117 - 44032: 0xBB9C, + 54118 - 44032: 0xBB9D, + 54119 - 44032: 0xBB9E, + 54120 - 44032: 0xBB9F, + 54121 - 44032: 0xBBA0, + 54122 - 44032: 0xBC41, + 54123 - 44032: 0xBC42, + 54124 - 44032: 0xBC43, + 54125 - 44032: 0xBC44, + 54126 - 44032: 0xBC45, + 54127 - 44032: 0xBC46, + 54128 - 44032: 0xBC47, + 54129 - 44032: 0xBC48, + 54130 - 44032: 0xBC49, + 54131 - 44032: 0xBC4A, + 54132 - 44032: 0xBC4B, + 54133 - 44032: 0xBC4C, + 54134 - 44032: 0xBC4D, + 54135 - 44032: 0xBC4E, + 54136 - 44032: 0xBC4F, + 54137 - 44032: 0xBC50, + 54138 - 44032: 0xBC51, + 54139 - 44032: 0xBC52, + 54140 - 44032: 0xC6DB, + 54141 - 44032: 0xC6DC, + 54142 - 44032: 0xBC53, + 54143 - 44032: 0xBC54, + 54144 - 44032: 0xC6DD, + 54145 - 44032: 0xBC55, + 54146 - 44032: 0xBC56, + 54147 - 44032: 0xBC57, + 54148 - 44032: 0xC6DE, + 54149 - 44032: 0xBC58, + 54150 - 44032: 0xBC59, + 54151 - 44032: 0xBC5A, + 54152 - 44032: 0xBC61, + 54153 - 44032: 0xBC62, + 54154 - 44032: 0xBC63, + 54155 - 44032: 0xBC64, + 54156 - 44032: 0xC6DF, + 54157 - 44032: 0xC6E0, + 54158 - 44032: 0xBC65, + 54159 - 44032: 0xC6E1, + 54160 - 44032: 0xC6E2, + 54161 - 44032: 0xC6E3, + 54162 - 44032: 0xBC66, + 54163 - 44032: 0xBC67, + 54164 - 44032: 0xBC68, + 54165 - 44032: 0xBC69, + 54166 - 44032: 0xBC6A, + 54167 - 44032: 0xBC6B, + 54168 - 44032: 0xC6E4, + 54169 - 44032: 0xC6E5, + 54170 - 44032: 0xBC6C, + 54171 - 44032: 0xBC6D, + 54172 - 44032: 0xC6E6, + 54173 - 44032: 0xBC6E, + 54174 - 44032: 0xBC6F, + 54175 - 44032: 0xBC70, + 54176 - 44032: 0xC6E7, + 54177 - 44032: 0xBC71, + 54178 - 44032: 0xBC72, + 54179 - 44032: 0xBC73, + 54180 - 44032: 0xBC74, + 54181 - 44032: 0xBC75, + 54182 - 44032: 0xBC76, + 54183 - 44032: 0xBC77, + 54184 - 44032: 0xC6E8, + 54185 - 44032: 0xC6E9, + 54186 - 44032: 0xBC78, + 54187 - 44032: 0xC6EA, + 54188 - 44032: 0xBC79, + 54189 - 44032: 0xC6EB, + 54190 - 44032: 0xBC7A, + 54191 - 44032: 0xBC81, + 54192 - 44032: 0xBC82, + 54193 - 44032: 0xBC83, + 54194 - 44032: 0xBC84, + 54195 - 44032: 0xBC85, + 54196 - 44032: 0xC6EC, + 54197 - 44032: 0xBC86, + 54198 - 44032: 0xBC87, + 54199 - 44032: 0xBC88, + 54200 - 44032: 0xC6ED, + 54201 - 44032: 0xBC89, + 54202 - 44032: 0xBC8A, + 54203 - 44032: 0xBC8B, + 54204 - 44032: 0xC6EE, + 54205 - 44032: 0xBC8C, + 54206 - 44032: 0xBC8D, + 54207 - 44032: 0xBC8E, + 54208 - 44032: 0xBC8F, + 54209 - 44032: 0xBC90, + 54210 - 44032: 0xBC91, + 54211 - 44032: 0xBC92, + 54212 - 44032: 0xC6EF, + 54213 - 44032: 0xC6F0, + 54214 - 44032: 0xBC93, + 54215 - 44032: 0xBC94, + 54216 - 44032: 0xC6F1, + 54217 - 44032: 0xC6F2, + 54218 - 44032: 0xBC95, + 54219 - 44032: 0xBC96, + 54220 - 44032: 0xBC97, + 54221 - 44032: 0xBC98, + 54222 - 44032: 0xBC99, + 54223 - 44032: 0xBC9A, + 54224 - 44032: 0xC6F3, + 54225 - 44032: 0xBC9B, + 54226 - 44032: 0xBC9C, + 54227 - 44032: 0xBC9D, + 54228 - 44032: 0xBC9E, + 54229 - 44032: 0xBC9F, + 54230 - 44032: 0xBCA0, + 54231 - 44032: 0xBD41, + 54232 - 44032: 0xC6F4, + 54233 - 44032: 0xBD42, + 54234 - 44032: 0xBD43, + 54235 - 44032: 0xBD44, + 54236 - 44032: 0xBD45, + 54237 - 44032: 0xBD46, + 54238 - 44032: 0xBD47, + 54239 - 44032: 0xBD48, + 54240 - 44032: 0xBD49, + 54241 - 44032: 0xC6F5, + 54242 - 44032: 0xBD4A, + 54243 - 44032: 0xC6F6, + 54244 - 44032: 0xBD4B, + 54245 - 44032: 0xBD4C, + 54246 - 44032: 0xBD4D, + 54247 - 44032: 0xBD4E, + 54248 - 44032: 0xBD4F, + 54249 - 44032: 0xBD50, + 54250 - 44032: 0xBD51, + 54251 - 44032: 0xBD52, + 54252 - 44032: 0xC6F7, + 54253 - 44032: 0xC6F8, + 54254 - 44032: 0xBD53, + 54255 - 44032: 0xBD54, + 54256 - 44032: 0xC6F9, + 54257 - 44032: 0xBD55, + 54258 - 44032: 0xBD56, + 54259 - 44032: 0xBD57, + 54260 - 44032: 0xC6FA, + 54261 - 44032: 0xBD58, + 54262 - 44032: 0xBD59, + 54263 - 44032: 0xBD5A, + 54264 - 44032: 0xBD61, + 54265 - 44032: 0xBD62, + 54266 - 44032: 0xBD63, + 54267 - 44032: 0xBD64, + 54268 - 44032: 0xC6FB, + 54269 - 44032: 0xC6FC, + 54270 - 44032: 0xBD65, + 54271 - 44032: 0xC6FD, + 54272 - 44032: 0xBD66, + 54273 - 44032: 0xC6FE, + 54274 - 44032: 0xBD67, + 54275 - 44032: 0xBD68, + 54276 - 44032: 0xBD69, + 54277 - 44032: 0xBD6A, + 54278 - 44032: 0xBD6B, + 54279 - 44032: 0xBD6C, + 54280 - 44032: 0xC7A1, + 54281 - 44032: 0xBD6D, + 54282 - 44032: 0xBD6E, + 54283 - 44032: 0xBD6F, + 54284 - 44032: 0xBD70, + 54285 - 44032: 0xBD71, + 54286 - 44032: 0xBD72, + 54287 - 44032: 0xBD73, + 54288 - 44032: 0xBD74, + 54289 - 44032: 0xBD75, + 54290 - 44032: 0xBD76, + 54291 - 44032: 0xBD77, + 54292 - 44032: 0xBD78, + 54293 - 44032: 0xBD79, + 54294 - 44032: 0xBD7A, + 54295 - 44032: 0xBD81, + 54296 - 44032: 0xBD82, + 54297 - 44032: 0xBD83, + 54298 - 44032: 0xBD84, + 54299 - 44032: 0xBD85, + 54300 - 44032: 0xBD86, + 54301 - 44032: 0xC7A2, + 54302 - 44032: 0xBD87, + 54303 - 44032: 0xBD88, + 54304 - 44032: 0xBD89, + 54305 - 44032: 0xBD8A, + 54306 - 44032: 0xBD8B, + 54307 - 44032: 0xBD8C, + 54308 - 44032: 0xBD8D, + 54309 - 44032: 0xBD8E, + 54310 - 44032: 0xBD8F, + 54311 - 44032: 0xBD90, + 54312 - 44032: 0xBD91, + 54313 - 44032: 0xBD92, + 54314 - 44032: 0xBD93, + 54315 - 44032: 0xBD94, + 54316 - 44032: 0xBD95, + 54317 - 44032: 0xBD96, + 54318 - 44032: 0xBD97, + 54319 - 44032: 0xBD98, + 54320 - 44032: 0xBD99, + 54321 - 44032: 0xBD9A, + 54322 - 44032: 0xBD9B, + 54323 - 44032: 0xBD9C, + 54324 - 44032: 0xBD9D, + 54325 - 44032: 0xBD9E, + 54326 - 44032: 0xBD9F, + 54327 - 44032: 0xBDA0, + 54328 - 44032: 0xBE41, + 54329 - 44032: 0xBE42, + 54330 - 44032: 0xBE43, + 54331 - 44032: 0xBE44, + 54332 - 44032: 0xBE45, + 54333 - 44032: 0xBE46, + 54334 - 44032: 0xBE47, + 54335 - 44032: 0xBE48, + 54336 - 44032: 0xC7A3, + 54337 - 44032: 0xBE49, + 54338 - 44032: 0xBE4A, + 54339 - 44032: 0xBE4B, + 54340 - 44032: 0xC7A4, + 54341 - 44032: 0xBE4C, + 54342 - 44032: 0xBE4D, + 54343 - 44032: 0xBE4E, + 54344 - 44032: 0xBE4F, + 54345 - 44032: 0xBE50, + 54346 - 44032: 0xBE51, + 54347 - 44032: 0xBE52, + 54348 - 44032: 0xBE53, + 54349 - 44032: 0xBE54, + 54350 - 44032: 0xBE55, + 54351 - 44032: 0xBE56, + 54352 - 44032: 0xBE57, + 54353 - 44032: 0xBE58, + 54354 - 44032: 0xBE59, + 54355 - 44032: 0xBE5A, + 54356 - 44032: 0xBE61, + 54357 - 44032: 0xBE62, + 54358 - 44032: 0xBE63, + 54359 - 44032: 0xBE64, + 54360 - 44032: 0xBE65, + 54361 - 44032: 0xBE66, + 54362 - 44032: 0xBE67, + 54363 - 44032: 0xBE68, + 54364 - 44032: 0xC7A5, + 54365 - 44032: 0xBE69, + 54366 - 44032: 0xBE6A, + 54367 - 44032: 0xBE6B, + 54368 - 44032: 0xC7A6, + 54369 - 44032: 0xBE6C, + 54370 - 44032: 0xBE6D, + 54371 - 44032: 0xBE6E, + 54372 - 44032: 0xC7A7, + 54373 - 44032: 0xBE6F, + 54374 - 44032: 0xBE70, + 54375 - 44032: 0xBE71, + 54376 - 44032: 0xBE72, + 54377 - 44032: 0xBE73, + 54378 - 44032: 0xBE74, + 54379 - 44032: 0xBE75, + 54380 - 44032: 0xBE76, + 54381 - 44032: 0xC7A8, + 54382 - 44032: 0xBE77, + 54383 - 44032: 0xC7A9, + 54384 - 44032: 0xBE78, + 54385 - 44032: 0xBE79, + 54386 - 44032: 0xBE7A, + 54387 - 44032: 0xBE81, + 54388 - 44032: 0xBE82, + 54389 - 44032: 0xBE83, + 54390 - 44032: 0xBE84, + 54391 - 44032: 0xBE85, + 54392 - 44032: 0xC7AA, + 54393 - 44032: 0xC7AB, + 54394 - 44032: 0xBE86, + 54395 - 44032: 0xBE87, + 54396 - 44032: 0xC7AC, + 54397 - 44032: 0xBE88, + 54398 - 44032: 0xBE89, + 54399 - 44032: 0xC7AD, + 54400 - 44032: 0xC7AE, + 54401 - 44032: 0xBE8A, + 54402 - 44032: 0xC7AF, + 54403 - 44032: 0xBE8B, + 54404 - 44032: 0xBE8C, + 54405 - 44032: 0xBE8D, + 54406 - 44032: 0xBE8E, + 54407 - 44032: 0xBE8F, + 54408 - 44032: 0xC7B0, + 54409 - 44032: 0xC7B1, + 54410 - 44032: 0xBE90, + 54411 - 44032: 0xC7B2, + 54412 - 44032: 0xBE91, + 54413 - 44032: 0xC7B3, + 54414 - 44032: 0xBE92, + 54415 - 44032: 0xBE93, + 54416 - 44032: 0xBE94, + 54417 - 44032: 0xBE95, + 54418 - 44032: 0xBE96, + 54419 - 44032: 0xBE97, + 54420 - 44032: 0xC7B4, + 54421 - 44032: 0xBE98, + 54422 - 44032: 0xBE99, + 54423 - 44032: 0xBE9A, + 54424 - 44032: 0xBE9B, + 54425 - 44032: 0xBE9C, + 54426 - 44032: 0xBE9D, + 54427 - 44032: 0xBE9E, + 54428 - 44032: 0xBE9F, + 54429 - 44032: 0xBEA0, + 54430 - 44032: 0xBF41, + 54431 - 44032: 0xBF42, + 54432 - 44032: 0xBF43, + 54433 - 44032: 0xBF44, + 54434 - 44032: 0xBF45, + 54435 - 44032: 0xBF46, + 54436 - 44032: 0xBF47, + 54437 - 44032: 0xBF48, + 54438 - 44032: 0xBF49, + 54439 - 44032: 0xBF4A, + 54440 - 44032: 0xBF4B, + 54441 - 44032: 0xC7B5, + 54442 - 44032: 0xBF4C, + 54443 - 44032: 0xBF4D, + 54444 - 44032: 0xBF4E, + 54445 - 44032: 0xBF4F, + 54446 - 44032: 0xBF50, + 54447 - 44032: 0xBF51, + 54448 - 44032: 0xBF52, + 54449 - 44032: 0xBF53, + 54450 - 44032: 0xBF54, + 54451 - 44032: 0xBF55, + 54452 - 44032: 0xBF56, + 54453 - 44032: 0xBF57, + 54454 - 44032: 0xBF58, + 54455 - 44032: 0xBF59, + 54456 - 44032: 0xBF5A, + 54457 - 44032: 0xBF61, + 54458 - 44032: 0xBF62, + 54459 - 44032: 0xBF63, + 54460 - 44032: 0xBF64, + 54461 - 44032: 0xBF65, + 54462 - 44032: 0xBF66, + 54463 - 44032: 0xBF67, + 54464 - 44032: 0xBF68, + 54465 - 44032: 0xBF69, + 54466 - 44032: 0xBF6A, + 54467 - 44032: 0xBF6B, + 54468 - 44032: 0xBF6C, + 54469 - 44032: 0xBF6D, + 54470 - 44032: 0xBF6E, + 54471 - 44032: 0xBF6F, + 54472 - 44032: 0xBF70, + 54473 - 44032: 0xBF71, + 54474 - 44032: 0xBF72, + 54475 - 44032: 0xBF73, + 54476 - 44032: 0xC7B6, + 54477 - 44032: 0xBF74, + 54478 - 44032: 0xBF75, + 54479 - 44032: 0xBF76, + 54480 - 44032: 0xC7B7, + 54481 - 44032: 0xBF77, + 54482 - 44032: 0xBF78, + 54483 - 44032: 0xBF79, + 54484 - 44032: 0xC7B8, + 54485 - 44032: 0xBF7A, + 54486 - 44032: 0xBF81, + 54487 - 44032: 0xBF82, + 54488 - 44032: 0xBF83, + 54489 - 44032: 0xBF84, + 54490 - 44032: 0xBF85, + 54491 - 44032: 0xBF86, + 54492 - 44032: 0xC7B9, + 54493 - 44032: 0xBF87, + 54494 - 44032: 0xBF88, + 54495 - 44032: 0xC7BA, + 54496 - 44032: 0xBF89, + 54497 - 44032: 0xBF8A, + 54498 - 44032: 0xBF8B, + 54499 - 44032: 0xBF8C, + 54500 - 44032: 0xBF8D, + 54501 - 44032: 0xBF8E, + 54502 - 44032: 0xBF8F, + 54503 - 44032: 0xBF90, + 54504 - 44032: 0xC7BB, + 54505 - 44032: 0xBF91, + 54506 - 44032: 0xBF92, + 54507 - 44032: 0xBF93, + 54508 - 44032: 0xC7BC, + 54509 - 44032: 0xBF94, + 54510 - 44032: 0xBF95, + 54511 - 44032: 0xBF96, + 54512 - 44032: 0xC7BD, + 54513 - 44032: 0xBF97, + 54514 - 44032: 0xBF98, + 54515 - 44032: 0xBF99, + 54516 - 44032: 0xBF9A, + 54517 - 44032: 0xBF9B, + 54518 - 44032: 0xBF9C, + 54519 - 44032: 0xBF9D, + 54520 - 44032: 0xC7BE, + 54521 - 44032: 0xBF9E, + 54522 - 44032: 0xBF9F, + 54523 - 44032: 0xC7BF, + 54524 - 44032: 0xBFA0, + 54525 - 44032: 0xC7C0, + 54526 - 44032: 0xC041, + 54527 - 44032: 0xC042, + 54528 - 44032: 0xC043, + 54529 - 44032: 0xC044, + 54530 - 44032: 0xC045, + 54531 - 44032: 0xC046, + 54532 - 44032: 0xC7C1, + 54533 - 44032: 0xC047, + 54534 - 44032: 0xC048, + 54535 - 44032: 0xC049, + 54536 - 44032: 0xC7C2, + 54537 - 44032: 0xC04A, + 54538 - 44032: 0xC04B, + 54539 - 44032: 0xC04C, + 54540 - 44032: 0xC7C3, + 54541 - 44032: 0xC04D, + 54542 - 44032: 0xC04E, + 54543 - 44032: 0xC04F, + 54544 - 44032: 0xC050, + 54545 - 44032: 0xC051, + 54546 - 44032: 0xC052, + 54547 - 44032: 0xC053, + 54548 - 44032: 0xC7C4, + 54549 - 44032: 0xC7C5, + 54550 - 44032: 0xC054, + 54551 - 44032: 0xC7C6, + 54552 - 44032: 0xC055, + 54553 - 44032: 0xC056, + 54554 - 44032: 0xC057, + 54555 - 44032: 0xC058, + 54556 - 44032: 0xC059, + 54557 - 44032: 0xC05A, + 54558 - 44032: 0xC061, + 54559 - 44032: 0xC062, + 54560 - 44032: 0xC063, + 54561 - 44032: 0xC064, + 54562 - 44032: 0xC065, + 54563 - 44032: 0xC066, + 54564 - 44032: 0xC067, + 54565 - 44032: 0xC068, + 54566 - 44032: 0xC069, + 54567 - 44032: 0xC06A, + 54568 - 44032: 0xC06B, + 54569 - 44032: 0xC06C, + 54570 - 44032: 0xC06D, + 54571 - 44032: 0xC06E, + 54572 - 44032: 0xC06F, + 54573 - 44032: 0xC070, + 54574 - 44032: 0xC071, + 54575 - 44032: 0xC072, + 54576 - 44032: 0xC073, + 54577 - 44032: 0xC074, + 54578 - 44032: 0xC075, + 54579 - 44032: 0xC076, + 54580 - 44032: 0xC077, + 54581 - 44032: 0xC078, + 54582 - 44032: 0xC079, + 54583 - 44032: 0xC07A, + 54584 - 44032: 0xC081, + 54585 - 44032: 0xC082, + 54586 - 44032: 0xC083, + 54587 - 44032: 0xC084, + 54588 - 44032: 0xC7C7, + 54589 - 44032: 0xC7C8, + 54590 - 44032: 0xC085, + 54591 - 44032: 0xC086, + 54592 - 44032: 0xC7C9, + 54593 - 44032: 0xC087, + 54594 - 44032: 0xC088, + 54595 - 44032: 0xC089, + 54596 - 44032: 0xC7CA, + 54597 - 44032: 0xC08A, + 54598 - 44032: 0xC08B, + 54599 - 44032: 0xC08C, + 54600 - 44032: 0xC08D, + 54601 - 44032: 0xC08E, + 54602 - 44032: 0xC08F, + 54603 - 44032: 0xC090, + 54604 - 44032: 0xC7CB, + 54605 - 44032: 0xC7CC, + 54606 - 44032: 0xC091, + 54607 - 44032: 0xC7CD, + 54608 - 44032: 0xC092, + 54609 - 44032: 0xC7CE, + 54610 - 44032: 0xC093, + 54611 - 44032: 0xC094, + 54612 - 44032: 0xC095, + 54613 - 44032: 0xC096, + 54614 - 44032: 0xC097, + 54615 - 44032: 0xC098, + 54616 - 44032: 0xC7CF, + 54617 - 44032: 0xC7D0, + 54618 - 44032: 0xC099, + 54619 - 44032: 0xC09A, + 54620 - 44032: 0xC7D1, + 54621 - 44032: 0xC09B, + 54622 - 44032: 0xC09C, + 54623 - 44032: 0xC09D, + 54624 - 44032: 0xC7D2, + 54625 - 44032: 0xC09E, + 54626 - 44032: 0xC09F, + 54627 - 44032: 0xC0A0, + 54628 - 44032: 0xC141, + 54629 - 44032: 0xC7D3, + 54630 - 44032: 0xC142, + 54631 - 44032: 0xC143, + 54632 - 44032: 0xC7D4, + 54633 - 44032: 0xC7D5, + 54634 - 44032: 0xC144, + 54635 - 44032: 0xC7D6, + 54636 - 44032: 0xC145, + 54637 - 44032: 0xC7D7, + 54638 - 44032: 0xC146, + 54639 - 44032: 0xC147, + 54640 - 44032: 0xC148, + 54641 - 44032: 0xC149, + 54642 - 44032: 0xC14A, + 54643 - 44032: 0xC14B, + 54644 - 44032: 0xC7D8, + 54645 - 44032: 0xC7D9, + 54646 - 44032: 0xC14C, + 54647 - 44032: 0xC14D, + 54648 - 44032: 0xC7DA, + 54649 - 44032: 0xC14E, + 54650 - 44032: 0xC14F, + 54651 - 44032: 0xC150, + 54652 - 44032: 0xC7DB, + 54653 - 44032: 0xC151, + 54654 - 44032: 0xC152, + 54655 - 44032: 0xC153, + 54656 - 44032: 0xC154, + 54657 - 44032: 0xC155, + 54658 - 44032: 0xC156, + 54659 - 44032: 0xC157, + 54660 - 44032: 0xC7DC, + 54661 - 44032: 0xC7DD, + 54662 - 44032: 0xC158, + 54663 - 44032: 0xC7DE, + 54664 - 44032: 0xC7DF, + 54665 - 44032: 0xC7E0, + 54666 - 44032: 0xC159, + 54667 - 44032: 0xC15A, + 54668 - 44032: 0xC161, + 54669 - 44032: 0xC162, + 54670 - 44032: 0xC163, + 54671 - 44032: 0xC164, + 54672 - 44032: 0xC7E1, + 54673 - 44032: 0xC165, + 54674 - 44032: 0xC166, + 54675 - 44032: 0xC167, + 54676 - 44032: 0xC168, + 54677 - 44032: 0xC169, + 54678 - 44032: 0xC16A, + 54679 - 44032: 0xC16B, + 54680 - 44032: 0xC16C, + 54681 - 44032: 0xC16D, + 54682 - 44032: 0xC16E, + 54683 - 44032: 0xC16F, + 54684 - 44032: 0xC170, + 54685 - 44032: 0xC171, + 54686 - 44032: 0xC172, + 54687 - 44032: 0xC173, + 54688 - 44032: 0xC174, + 54689 - 44032: 0xC175, + 54690 - 44032: 0xC176, + 54691 - 44032: 0xC177, + 54692 - 44032: 0xC178, + 54693 - 44032: 0xC7E2, + 54694 - 44032: 0xC179, + 54695 - 44032: 0xC17A, + 54696 - 44032: 0xC181, + 54697 - 44032: 0xC182, + 54698 - 44032: 0xC183, + 54699 - 44032: 0xC184, + 54700 - 44032: 0xC185, + 54701 - 44032: 0xC186, + 54702 - 44032: 0xC187, + 54703 - 44032: 0xC188, + 54704 - 44032: 0xC189, + 54705 - 44032: 0xC18A, + 54706 - 44032: 0xC18B, + 54707 - 44032: 0xC18C, + 54708 - 44032: 0xC18D, + 54709 - 44032: 0xC18E, + 54710 - 44032: 0xC18F, + 54711 - 44032: 0xC190, + 54712 - 44032: 0xC191, + 54713 - 44032: 0xC192, + 54714 - 44032: 0xC193, + 54715 - 44032: 0xC194, + 54716 - 44032: 0xC195, + 54717 - 44032: 0xC196, + 54718 - 44032: 0xC197, + 54719 - 44032: 0xC198, + 54720 - 44032: 0xC199, + 54721 - 44032: 0xC19A, + 54722 - 44032: 0xC19B, + 54723 - 44032: 0xC19C, + 54724 - 44032: 0xC19D, + 54725 - 44032: 0xC19E, + 54726 - 44032: 0xC19F, + 54727 - 44032: 0xC1A0, + 54728 - 44032: 0xC7E3, + 54729 - 44032: 0xC7E4, + 54730 - 44032: 0xC241, + 54731 - 44032: 0xC242, + 54732 - 44032: 0xC7E5, + 54733 - 44032: 0xC243, + 54734 - 44032: 0xC244, + 54735 - 44032: 0xC245, + 54736 - 44032: 0xC7E6, + 54737 - 44032: 0xC246, + 54738 - 44032: 0xC7E7, + 54739 - 44032: 0xC247, + 54740 - 44032: 0xC248, + 54741 - 44032: 0xC249, + 54742 - 44032: 0xC24A, + 54743 - 44032: 0xC24B, + 54744 - 44032: 0xC7E8, + 54745 - 44032: 0xC7E9, + 54746 - 44032: 0xC24C, + 54747 - 44032: 0xC7EA, + 54748 - 44032: 0xC24D, + 54749 - 44032: 0xC7EB, + 54750 - 44032: 0xC24E, + 54751 - 44032: 0xC24F, + 54752 - 44032: 0xC250, + 54753 - 44032: 0xC251, + 54754 - 44032: 0xC252, + 54755 - 44032: 0xC253, + 54756 - 44032: 0xC7EC, + 54757 - 44032: 0xC7ED, + 54758 - 44032: 0xC254, + 54759 - 44032: 0xC255, + 54760 - 44032: 0xC7EE, + 54761 - 44032: 0xC256, + 54762 - 44032: 0xC257, + 54763 - 44032: 0xC258, + 54764 - 44032: 0xC7EF, + 54765 - 44032: 0xC259, + 54766 - 44032: 0xC25A, + 54767 - 44032: 0xC261, + 54768 - 44032: 0xC262, + 54769 - 44032: 0xC263, + 54770 - 44032: 0xC264, + 54771 - 44032: 0xC265, + 54772 - 44032: 0xC7F0, + 54773 - 44032: 0xC7F1, + 54774 - 44032: 0xC266, + 54775 - 44032: 0xC7F2, + 54776 - 44032: 0xC267, + 54777 - 44032: 0xC7F3, + 54778 - 44032: 0xC268, + 54779 - 44032: 0xC269, + 54780 - 44032: 0xC26A, + 54781 - 44032: 0xC26B, + 54782 - 44032: 0xC26C, + 54783 - 44032: 0xC26D, + 54784 - 44032: 0xC7F4, + 54785 - 44032: 0xC7F5, + 54786 - 44032: 0xC26E, + 54787 - 44032: 0xC26F, + 54788 - 44032: 0xC7F6, + 54789 - 44032: 0xC270, + 54790 - 44032: 0xC271, + 54791 - 44032: 0xC272, + 54792 - 44032: 0xC7F7, + 54793 - 44032: 0xC273, + 54794 - 44032: 0xC274, + 54795 - 44032: 0xC275, + 54796 - 44032: 0xC276, + 54797 - 44032: 0xC277, + 54798 - 44032: 0xC278, + 54799 - 44032: 0xC279, + 54800 - 44032: 0xC7F8, + 54801 - 44032: 0xC7F9, + 54802 - 44032: 0xC27A, + 54803 - 44032: 0xC7FA, + 54804 - 44032: 0xC7FB, + 54805 - 44032: 0xC7FC, + 54806 - 44032: 0xC281, + 54807 - 44032: 0xC282, + 54808 - 44032: 0xC283, + 54809 - 44032: 0xC284, + 54810 - 44032: 0xC285, + 54811 - 44032: 0xC286, + 54812 - 44032: 0xC7FD, + 54813 - 44032: 0xC287, + 54814 - 44032: 0xC288, + 54815 - 44032: 0xC289, + 54816 - 44032: 0xC7FE, + 54817 - 44032: 0xC28A, + 54818 - 44032: 0xC28B, + 54819 - 44032: 0xC28C, + 54820 - 44032: 0xC8A1, + 54821 - 44032: 0xC28D, + 54822 - 44032: 0xC28E, + 54823 - 44032: 0xC28F, + 54824 - 44032: 0xC290, + 54825 - 44032: 0xC291, + 54826 - 44032: 0xC292, + 54827 - 44032: 0xC293, + 54828 - 44032: 0xC294, + 54829 - 44032: 0xC8A2, + 54830 - 44032: 0xC295, + 54831 - 44032: 0xC296, + 54832 - 44032: 0xC297, + 54833 - 44032: 0xC298, + 54834 - 44032: 0xC299, + 54835 - 44032: 0xC29A, + 54836 - 44032: 0xC29B, + 54837 - 44032: 0xC29C, + 54838 - 44032: 0xC29D, + 54839 - 44032: 0xC29E, + 54840 - 44032: 0xC8A3, + 54841 - 44032: 0xC8A4, + 54842 - 44032: 0xC29F, + 54843 - 44032: 0xC2A0, + 54844 - 44032: 0xC8A5, + 54845 - 44032: 0xC341, + 54846 - 44032: 0xC342, + 54847 - 44032: 0xC343, + 54848 - 44032: 0xC8A6, + 54849 - 44032: 0xC344, + 54850 - 44032: 0xC345, + 54851 - 44032: 0xC346, + 54852 - 44032: 0xC347, + 54853 - 44032: 0xC8A7, + 54854 - 44032: 0xC348, + 54855 - 44032: 0xC349, + 54856 - 44032: 0xC8A8, + 54857 - 44032: 0xC8A9, + 54858 - 44032: 0xC34A, + 54859 - 44032: 0xC8AA, + 54860 - 44032: 0xC34B, + 54861 - 44032: 0xC8AB, + 54862 - 44032: 0xC34C, + 54863 - 44032: 0xC34D, + 54864 - 44032: 0xC34E, + 54865 - 44032: 0xC8AC, + 54866 - 44032: 0xC34F, + 54867 - 44032: 0xC350, + 54868 - 44032: 0xC8AD, + 54869 - 44032: 0xC8AE, + 54870 - 44032: 0xC351, + 54871 - 44032: 0xC352, + 54872 - 44032: 0xC8AF, + 54873 - 44032: 0xC353, + 54874 - 44032: 0xC354, + 54875 - 44032: 0xC355, + 54876 - 44032: 0xC8B0, + 54877 - 44032: 0xC356, + 54878 - 44032: 0xC357, + 54879 - 44032: 0xC358, + 54880 - 44032: 0xC359, + 54881 - 44032: 0xC35A, + 54882 - 44032: 0xC361, + 54883 - 44032: 0xC362, + 54884 - 44032: 0xC363, + 54885 - 44032: 0xC364, + 54886 - 44032: 0xC365, + 54887 - 44032: 0xC8B1, + 54888 - 44032: 0xC366, + 54889 - 44032: 0xC8B2, + 54890 - 44032: 0xC367, + 54891 - 44032: 0xC368, + 54892 - 44032: 0xC369, + 54893 - 44032: 0xC36A, + 54894 - 44032: 0xC36B, + 54895 - 44032: 0xC36C, + 54896 - 44032: 0xC8B3, + 54897 - 44032: 0xC8B4, + 54898 - 44032: 0xC36D, + 54899 - 44032: 0xC36E, + 54900 - 44032: 0xC8B5, + 54901 - 44032: 0xC36F, + 54902 - 44032: 0xC370, + 54903 - 44032: 0xC371, + 54904 - 44032: 0xC372, + 54905 - 44032: 0xC373, + 54906 - 44032: 0xC374, + 54907 - 44032: 0xC375, + 54908 - 44032: 0xC376, + 54909 - 44032: 0xC377, + 54910 - 44032: 0xC378, + 54911 - 44032: 0xC379, + 54912 - 44032: 0xC37A, + 54913 - 44032: 0xC381, + 54914 - 44032: 0xC382, + 54915 - 44032: 0xC8B6, + 54916 - 44032: 0xC383, + 54917 - 44032: 0xC8B7, + 54918 - 44032: 0xC384, + 54919 - 44032: 0xC385, + 54920 - 44032: 0xC386, + 54921 - 44032: 0xC387, + 54922 - 44032: 0xC388, + 54923 - 44032: 0xC389, + 54924 - 44032: 0xC8B8, + 54925 - 44032: 0xC8B9, + 54926 - 44032: 0xC38A, + 54927 - 44032: 0xC38B, + 54928 - 44032: 0xC8BA, + 54929 - 44032: 0xC38C, + 54930 - 44032: 0xC38D, + 54931 - 44032: 0xC38E, + 54932 - 44032: 0xC8BB, + 54933 - 44032: 0xC38F, + 54934 - 44032: 0xC390, + 54935 - 44032: 0xC391, + 54936 - 44032: 0xC392, + 54937 - 44032: 0xC393, + 54938 - 44032: 0xC394, + 54939 - 44032: 0xC395, + 54940 - 44032: 0xC396, + 54941 - 44032: 0xC8BC, + 54942 - 44032: 0xC397, + 54943 - 44032: 0xC8BD, + 54944 - 44032: 0xC398, + 54945 - 44032: 0xC8BE, + 54946 - 44032: 0xC399, + 54947 - 44032: 0xC39A, + 54948 - 44032: 0xC39B, + 54949 - 44032: 0xC39C, + 54950 - 44032: 0xC39D, + 54951 - 44032: 0xC39E, + 54952 - 44032: 0xC8BF, + 54953 - 44032: 0xC39F, + 54954 - 44032: 0xC3A0, + 54955 - 44032: 0xC441, + 54956 - 44032: 0xC8C0, + 54957 - 44032: 0xC442, + 54958 - 44032: 0xC443, + 54959 - 44032: 0xC444, + 54960 - 44032: 0xC8C1, + 54961 - 44032: 0xC445, + 54962 - 44032: 0xC446, + 54963 - 44032: 0xC447, + 54964 - 44032: 0xC448, + 54965 - 44032: 0xC449, + 54966 - 44032: 0xC44A, + 54967 - 44032: 0xC44B, + 54968 - 44032: 0xC44C, + 54969 - 44032: 0xC8C2, + 54970 - 44032: 0xC44D, + 54971 - 44032: 0xC8C3, + 54972 - 44032: 0xC44E, + 54973 - 44032: 0xC44F, + 54974 - 44032: 0xC450, + 54975 - 44032: 0xC451, + 54976 - 44032: 0xC452, + 54977 - 44032: 0xC453, + 54978 - 44032: 0xC454, + 54979 - 44032: 0xC455, + 54980 - 44032: 0xC8C4, + 54981 - 44032: 0xC8C5, + 54982 - 44032: 0xC456, + 54983 - 44032: 0xC457, + 54984 - 44032: 0xC8C6, + 54985 - 44032: 0xC458, + 54986 - 44032: 0xC459, + 54987 - 44032: 0xC45A, + 54988 - 44032: 0xC8C7, + 54989 - 44032: 0xC461, + 54990 - 44032: 0xC462, + 54991 - 44032: 0xC463, + 54992 - 44032: 0xC464, + 54993 - 44032: 0xC8C8, + 54994 - 44032: 0xC465, + 54995 - 44032: 0xC466, + 54996 - 44032: 0xC8C9, + 54997 - 44032: 0xC467, + 54998 - 44032: 0xC468, + 54999 - 44032: 0xC8CA, + 55000 - 44032: 0xC469, + 55001 - 44032: 0xC8CB, + 55002 - 44032: 0xC46A, + 55003 - 44032: 0xC46B, + 55004 - 44032: 0xC46C, + 55005 - 44032: 0xC46D, + 55006 - 44032: 0xC46E, + 55007 - 44032: 0xC46F, + 55008 - 44032: 0xC8CC, + 55009 - 44032: 0xC470, + 55010 - 44032: 0xC471, + 55011 - 44032: 0xC472, + 55012 - 44032: 0xC8CD, + 55013 - 44032: 0xC473, + 55014 - 44032: 0xC474, + 55015 - 44032: 0xC475, + 55016 - 44032: 0xC8CE, + 55017 - 44032: 0xC476, + 55018 - 44032: 0xC477, + 55019 - 44032: 0xC478, + 55020 - 44032: 0xC479, + 55021 - 44032: 0xC47A, + 55022 - 44032: 0xC481, + 55023 - 44032: 0xC482, + 55024 - 44032: 0xC8CF, + 55025 - 44032: 0xC483, + 55026 - 44032: 0xC484, + 55027 - 44032: 0xC485, + 55028 - 44032: 0xC486, + 55029 - 44032: 0xC8D0, + 55030 - 44032: 0xC487, + 55031 - 44032: 0xC488, + 55032 - 44032: 0xC489, + 55033 - 44032: 0xC48A, + 55034 - 44032: 0xC48B, + 55035 - 44032: 0xC48C, + 55036 - 44032: 0xC8D1, + 55037 - 44032: 0xC8D2, + 55038 - 44032: 0xC48D, + 55039 - 44032: 0xC48E, + 55040 - 44032: 0xC8D3, + 55041 - 44032: 0xC48F, + 55042 - 44032: 0xC490, + 55043 - 44032: 0xC491, + 55044 - 44032: 0xC8D4, + 55045 - 44032: 0xC492, + 55046 - 44032: 0xC493, + 55047 - 44032: 0xC494, + 55048 - 44032: 0xC495, + 55049 - 44032: 0xC496, + 55050 - 44032: 0xC497, + 55051 - 44032: 0xC498, + 55052 - 44032: 0xC499, + 55053 - 44032: 0xC49A, + 55054 - 44032: 0xC49B, + 55055 - 44032: 0xC49C, + 55056 - 44032: 0xC49D, + 55057 - 44032: 0xC8D5, + 55058 - 44032: 0xC49E, + 55059 - 44032: 0xC49F, + 55060 - 44032: 0xC4A0, + 55061 - 44032: 0xC541, + 55062 - 44032: 0xC542, + 55063 - 44032: 0xC543, + 55064 - 44032: 0xC8D6, + 55065 - 44032: 0xC8D7, + 55066 - 44032: 0xC544, + 55067 - 44032: 0xC545, + 55068 - 44032: 0xC8D8, + 55069 - 44032: 0xC546, + 55070 - 44032: 0xC547, + 55071 - 44032: 0xC548, + 55072 - 44032: 0xC8D9, + 55073 - 44032: 0xC549, + 55074 - 44032: 0xC54A, + 55075 - 44032: 0xC54B, + 55076 - 44032: 0xC54C, + 55077 - 44032: 0xC54D, + 55078 - 44032: 0xC54E, + 55079 - 44032: 0xC54F, + 55080 - 44032: 0xC8DA, + 55081 - 44032: 0xC8DB, + 55082 - 44032: 0xC550, + 55083 - 44032: 0xC8DC, + 55084 - 44032: 0xC551, + 55085 - 44032: 0xC8DD, + 55086 - 44032: 0xC552, + 55087 - 44032: 0xC553, + 55088 - 44032: 0xC554, + 55089 - 44032: 0xC555, + 55090 - 44032: 0xC556, + 55091 - 44032: 0xC557, + 55092 - 44032: 0xC8DE, + 55093 - 44032: 0xC8DF, + 55094 - 44032: 0xC558, + 55095 - 44032: 0xC559, + 55096 - 44032: 0xC8E0, + 55097 - 44032: 0xC55A, + 55098 - 44032: 0xC561, + 55099 - 44032: 0xC562, + 55100 - 44032: 0xC8E1, + 55101 - 44032: 0xC563, + 55102 - 44032: 0xC564, + 55103 - 44032: 0xC565, + 55104 - 44032: 0xC566, + 55105 - 44032: 0xC567, + 55106 - 44032: 0xC568, + 55107 - 44032: 0xC569, + 55108 - 44032: 0xC8E2, + 55109 - 44032: 0xC56A, + 55110 - 44032: 0xC56B, + 55111 - 44032: 0xC8E3, + 55112 - 44032: 0xC56C, + 55113 - 44032: 0xC8E4, + 55114 - 44032: 0xC56D, + 55115 - 44032: 0xC56E, + 55116 - 44032: 0xC56F, + 55117 - 44032: 0xC570, + 55118 - 44032: 0xC571, + 55119 - 44032: 0xC572, + 55120 - 44032: 0xC8E5, + 55121 - 44032: 0xC8E6, + 55122 - 44032: 0xC573, + 55123 - 44032: 0xC574, + 55124 - 44032: 0xC8E7, + 55125 - 44032: 0xC575, + 55126 - 44032: 0xC8E8, + 55127 - 44032: 0xC8E9, + 55128 - 44032: 0xC8EA, + 55129 - 44032: 0xC8EB, + 55130 - 44032: 0xC576, + 55131 - 44032: 0xC577, + 55132 - 44032: 0xC578, + 55133 - 44032: 0xC579, + 55134 - 44032: 0xC57A, + 55135 - 44032: 0xC581, + 55136 - 44032: 0xC8EC, + 55137 - 44032: 0xC8ED, + 55138 - 44032: 0xC582, + 55139 - 44032: 0xC8EE, + 55140 - 44032: 0xC583, + 55141 - 44032: 0xC8EF, + 55142 - 44032: 0xC584, + 55143 - 44032: 0xC585, + 55144 - 44032: 0xC586, + 55145 - 44032: 0xC8F0, + 55146 - 44032: 0xC587, + 55147 - 44032: 0xC588, + 55148 - 44032: 0xC8F1, + 55149 - 44032: 0xC589, + 55150 - 44032: 0xC58A, + 55151 - 44032: 0xC58B, + 55152 - 44032: 0xC8F2, + 55153 - 44032: 0xC58C, + 55154 - 44032: 0xC58D, + 55155 - 44032: 0xC58E, + 55156 - 44032: 0xC8F3, + 55157 - 44032: 0xC58F, + 55158 - 44032: 0xC590, + 55159 - 44032: 0xC591, + 55160 - 44032: 0xC592, + 55161 - 44032: 0xC593, + 55162 - 44032: 0xC594, + 55163 - 44032: 0xC595, + 55164 - 44032: 0xC8F4, + 55165 - 44032: 0xC8F5, + 55166 - 44032: 0xC596, + 55167 - 44032: 0xC597, + 55168 - 44032: 0xC598, + 55169 - 44032: 0xC8F6, + 55170 - 44032: 0xC599, + 55171 - 44032: 0xC59A, + 55172 - 44032: 0xC59B, + 55173 - 44032: 0xC59C, + 55174 - 44032: 0xC59D, + 55175 - 44032: 0xC59E, + 55176 - 44032: 0xC8F7, + 55177 - 44032: 0xC8F8, + 55178 - 44032: 0xC59F, + 55179 - 44032: 0xC5A0, + 55180 - 44032: 0xC8F9, + 55181 - 44032: 0xC641, + 55182 - 44032: 0xC642, + 55183 - 44032: 0xC643, + 55184 - 44032: 0xC8FA, + 55185 - 44032: 0xC644, + 55186 - 44032: 0xC645, + 55187 - 44032: 0xC646, + 55188 - 44032: 0xC647, + 55189 - 44032: 0xC648, + 55190 - 44032: 0xC649, + 55191 - 44032: 0xC64A, + 55192 - 44032: 0xC8FB, + 55193 - 44032: 0xC8FC, + 55194 - 44032: 0xC64B, + 55195 - 44032: 0xC8FD, + 55196 - 44032: 0xC64C, + 55197 - 44032: 0xC8FE, + 55198 - 44032: 0xC64D, + 55199 - 44032: 0xC64E, + 55200 - 44032: 0xC64F, + 55201 - 44032: 0xC650, + 55202 - 44032: 0xC651, + 55203 - 44032: 0xC652, +} + +const encode2Low, encode2High = 8213, 9838 + +var encode2 = [...]uint16{ + 8213 - 8213: 0xA1AA, + 8216 - 8213: 0xA1AE, + 8217 - 8213: 0xA1AF, + 8220 - 8213: 0xA1B0, + 8221 - 8213: 0xA1B1, + 8224 - 8213: 0xA2D3, + 8225 - 8213: 0xA2D4, + 8229 - 8213: 0xA1A5, + 8230 - 8213: 0xA1A6, + 8240 - 8213: 0xA2B6, + 8242 - 8213: 0xA1C7, + 8243 - 8213: 0xA1C8, + 8251 - 8213: 0xA1D8, + 8308 - 8213: 0xA9F9, + 8319 - 8213: 0xA9FA, + 8321 - 8213: 0xA9FB, + 8322 - 8213: 0xA9FC, + 8323 - 8213: 0xA9FD, + 8324 - 8213: 0xA9FE, + 8364 - 8213: 0xA2E6, + 8451 - 8213: 0xA1C9, + 8457 - 8213: 0xA2B5, + 8467 - 8213: 0xA7A4, + 8470 - 8213: 0xA2E0, + 8481 - 8213: 0xA2E5, + 8482 - 8213: 0xA2E2, + 8486 - 8213: 0xA7D9, + 8491 - 8213: 0xA1CA, + 8531 - 8213: 0xA8F7, + 8532 - 8213: 0xA8F8, + 8539 - 8213: 0xA8FB, + 8540 - 8213: 0xA8FC, + 8541 - 8213: 0xA8FD, + 8542 - 8213: 0xA8FE, + 8544 - 8213: 0xA5B0, + 8545 - 8213: 0xA5B1, + 8546 - 8213: 0xA5B2, + 8547 - 8213: 0xA5B3, + 8548 - 8213: 0xA5B4, + 8549 - 8213: 0xA5B5, + 8550 - 8213: 0xA5B6, + 8551 - 8213: 0xA5B7, + 8552 - 8213: 0xA5B8, + 8553 - 8213: 0xA5B9, + 8560 - 8213: 0xA5A1, + 8561 - 8213: 0xA5A2, + 8562 - 8213: 0xA5A3, + 8563 - 8213: 0xA5A4, + 8564 - 8213: 0xA5A5, + 8565 - 8213: 0xA5A6, + 8566 - 8213: 0xA5A7, + 8567 - 8213: 0xA5A8, + 8568 - 8213: 0xA5A9, + 8569 - 8213: 0xA5AA, + 8592 - 8213: 0xA1E7, + 8593 - 8213: 0xA1E8, + 8594 - 8213: 0xA1E6, + 8595 - 8213: 0xA1E9, + 8596 - 8213: 0xA1EA, + 8597 - 8213: 0xA2D5, + 8598 - 8213: 0xA2D8, + 8599 - 8213: 0xA2D6, + 8600 - 8213: 0xA2D9, + 8601 - 8213: 0xA2D7, + 8658 - 8213: 0xA2A1, + 8660 - 8213: 0xA2A2, + 8704 - 8213: 0xA2A3, + 8706 - 8213: 0xA1D3, + 8707 - 8213: 0xA2A4, + 8711 - 8213: 0xA1D4, + 8712 - 8213: 0xA1F4, + 8715 - 8213: 0xA1F5, + 8719 - 8213: 0xA2B3, + 8721 - 8213: 0xA2B2, + 8730 - 8213: 0xA1EE, + 8733 - 8213: 0xA1F0, + 8734 - 8213: 0xA1C4, + 8736 - 8213: 0xA1D0, + 8741 - 8213: 0xA1AB, + 8743 - 8213: 0xA1FC, + 8744 - 8213: 0xA1FD, + 8745 - 8213: 0xA1FB, + 8746 - 8213: 0xA1FA, + 8747 - 8213: 0xA1F2, + 8748 - 8213: 0xA1F3, + 8750 - 8213: 0xA2B1, + 8756 - 8213: 0xA1C5, + 8757 - 8213: 0xA1F1, + 8764 - 8213: 0xA1AD, + 8765 - 8213: 0xA1EF, + 8786 - 8213: 0xA1D6, + 8800 - 8213: 0xA1C1, + 8801 - 8213: 0xA1D5, + 8804 - 8213: 0xA1C2, + 8805 - 8213: 0xA1C3, + 8810 - 8213: 0xA1EC, + 8811 - 8213: 0xA1ED, + 8834 - 8213: 0xA1F8, + 8835 - 8213: 0xA1F9, + 8838 - 8213: 0xA1F6, + 8839 - 8213: 0xA1F7, + 8857 - 8213: 0xA2C1, + 8869 - 8213: 0xA1D1, + 8978 - 8213: 0xA1D2, + 9312 - 8213: 0xA8E7, + 9313 - 8213: 0xA8E8, + 9314 - 8213: 0xA8E9, + 9315 - 8213: 0xA8EA, + 9316 - 8213: 0xA8EB, + 9317 - 8213: 0xA8EC, + 9318 - 8213: 0xA8ED, + 9319 - 8213: 0xA8EE, + 9320 - 8213: 0xA8EF, + 9321 - 8213: 0xA8F0, + 9322 - 8213: 0xA8F1, + 9323 - 8213: 0xA8F2, + 9324 - 8213: 0xA8F3, + 9325 - 8213: 0xA8F4, + 9326 - 8213: 0xA8F5, + 9332 - 8213: 0xA9E7, + 9333 - 8213: 0xA9E8, + 9334 - 8213: 0xA9E9, + 9335 - 8213: 0xA9EA, + 9336 - 8213: 0xA9EB, + 9337 - 8213: 0xA9EC, + 9338 - 8213: 0xA9ED, + 9339 - 8213: 0xA9EE, + 9340 - 8213: 0xA9EF, + 9341 - 8213: 0xA9F0, + 9342 - 8213: 0xA9F1, + 9343 - 8213: 0xA9F2, + 9344 - 8213: 0xA9F3, + 9345 - 8213: 0xA9F4, + 9346 - 8213: 0xA9F5, + 9372 - 8213: 0xA9CD, + 9373 - 8213: 0xA9CE, + 9374 - 8213: 0xA9CF, + 9375 - 8213: 0xA9D0, + 9376 - 8213: 0xA9D1, + 9377 - 8213: 0xA9D2, + 9378 - 8213: 0xA9D3, + 9379 - 8213: 0xA9D4, + 9380 - 8213: 0xA9D5, + 9381 - 8213: 0xA9D6, + 9382 - 8213: 0xA9D7, + 9383 - 8213: 0xA9D8, + 9384 - 8213: 0xA9D9, + 9385 - 8213: 0xA9DA, + 9386 - 8213: 0xA9DB, + 9387 - 8213: 0xA9DC, + 9388 - 8213: 0xA9DD, + 9389 - 8213: 0xA9DE, + 9390 - 8213: 0xA9DF, + 9391 - 8213: 0xA9E0, + 9392 - 8213: 0xA9E1, + 9393 - 8213: 0xA9E2, + 9394 - 8213: 0xA9E3, + 9395 - 8213: 0xA9E4, + 9396 - 8213: 0xA9E5, + 9397 - 8213: 0xA9E6, + 9424 - 8213: 0xA8CD, + 9425 - 8213: 0xA8CE, + 9426 - 8213: 0xA8CF, + 9427 - 8213: 0xA8D0, + 9428 - 8213: 0xA8D1, + 9429 - 8213: 0xA8D2, + 9430 - 8213: 0xA8D3, + 9431 - 8213: 0xA8D4, + 9432 - 8213: 0xA8D5, + 9433 - 8213: 0xA8D6, + 9434 - 8213: 0xA8D7, + 9435 - 8213: 0xA8D8, + 9436 - 8213: 0xA8D9, + 9437 - 8213: 0xA8DA, + 9438 - 8213: 0xA8DB, + 9439 - 8213: 0xA8DC, + 9440 - 8213: 0xA8DD, + 9441 - 8213: 0xA8DE, + 9442 - 8213: 0xA8DF, + 9443 - 8213: 0xA8E0, + 9444 - 8213: 0xA8E1, + 9445 - 8213: 0xA8E2, + 9446 - 8213: 0xA8E3, + 9447 - 8213: 0xA8E4, + 9448 - 8213: 0xA8E5, + 9449 - 8213: 0xA8E6, + 9472 - 8213: 0xA6A1, + 9473 - 8213: 0xA6AC, + 9474 - 8213: 0xA6A2, + 9475 - 8213: 0xA6AD, + 9484 - 8213: 0xA6A3, + 9485 - 8213: 0xA6C8, + 9486 - 8213: 0xA6C7, + 9487 - 8213: 0xA6AE, + 9488 - 8213: 0xA6A4, + 9489 - 8213: 0xA6C2, + 9490 - 8213: 0xA6C1, + 9491 - 8213: 0xA6AF, + 9492 - 8213: 0xA6A6, + 9493 - 8213: 0xA6C6, + 9494 - 8213: 0xA6C5, + 9495 - 8213: 0xA6B1, + 9496 - 8213: 0xA6A5, + 9497 - 8213: 0xA6C4, + 9498 - 8213: 0xA6C3, + 9499 - 8213: 0xA6B0, + 9500 - 8213: 0xA6A7, + 9501 - 8213: 0xA6BC, + 9502 - 8213: 0xA6C9, + 9503 - 8213: 0xA6CA, + 9504 - 8213: 0xA6B7, + 9505 - 8213: 0xA6CB, + 9506 - 8213: 0xA6CC, + 9507 - 8213: 0xA6B2, + 9508 - 8213: 0xA6A9, + 9509 - 8213: 0xA6BE, + 9510 - 8213: 0xA6CD, + 9511 - 8213: 0xA6CE, + 9512 - 8213: 0xA6B9, + 9513 - 8213: 0xA6CF, + 9514 - 8213: 0xA6D0, + 9515 - 8213: 0xA6B4, + 9516 - 8213: 0xA6A8, + 9517 - 8213: 0xA6D1, + 9518 - 8213: 0xA6D2, + 9519 - 8213: 0xA6B8, + 9520 - 8213: 0xA6BD, + 9521 - 8213: 0xA6D3, + 9522 - 8213: 0xA6D4, + 9523 - 8213: 0xA6B3, + 9524 - 8213: 0xA6AA, + 9525 - 8213: 0xA6D5, + 9526 - 8213: 0xA6D6, + 9527 - 8213: 0xA6BA, + 9528 - 8213: 0xA6BF, + 9529 - 8213: 0xA6D7, + 9530 - 8213: 0xA6D8, + 9531 - 8213: 0xA6B5, + 9532 - 8213: 0xA6AB, + 9533 - 8213: 0xA6D9, + 9534 - 8213: 0xA6DA, + 9535 - 8213: 0xA6BB, + 9536 - 8213: 0xA6DB, + 9537 - 8213: 0xA6DC, + 9538 - 8213: 0xA6C0, + 9539 - 8213: 0xA6DD, + 9540 - 8213: 0xA6DE, + 9541 - 8213: 0xA6DF, + 9542 - 8213: 0xA6E0, + 9543 - 8213: 0xA6E1, + 9544 - 8213: 0xA6E2, + 9545 - 8213: 0xA6E3, + 9546 - 8213: 0xA6E4, + 9547 - 8213: 0xA6B6, + 9618 - 8213: 0xA2C6, + 9632 - 8213: 0xA1E1, + 9633 - 8213: 0xA1E0, + 9635 - 8213: 0xA2C3, + 9636 - 8213: 0xA2C7, + 9637 - 8213: 0xA2C8, + 9638 - 8213: 0xA2CB, + 9639 - 8213: 0xA2CA, + 9640 - 8213: 0xA2C9, + 9641 - 8213: 0xA2CC, + 9650 - 8213: 0xA1E3, + 9651 - 8213: 0xA1E2, + 9654 - 8213: 0xA2BA, + 9655 - 8213: 0xA2B9, + 9660 - 8213: 0xA1E5, + 9661 - 8213: 0xA1E4, + 9664 - 8213: 0xA2B8, + 9665 - 8213: 0xA2B7, + 9670 - 8213: 0xA1DF, + 9671 - 8213: 0xA1DE, + 9672 - 8213: 0xA2C2, + 9675 - 8213: 0xA1DB, + 9678 - 8213: 0xA1DD, + 9679 - 8213: 0xA1DC, + 9680 - 8213: 0xA2C4, + 9681 - 8213: 0xA2C5, + 9733 - 8213: 0xA1DA, + 9734 - 8213: 0xA1D9, + 9742 - 8213: 0xA2CF, + 9743 - 8213: 0xA2CE, + 9756 - 8213: 0xA2D0, + 9758 - 8213: 0xA2D1, + 9792 - 8213: 0xA1CF, + 9794 - 8213: 0xA1CE, + 9824 - 8213: 0xA2BC, + 9825 - 8213: 0xA2BD, + 9827 - 8213: 0xA2C0, + 9828 - 8213: 0xA2BB, + 9829 - 8213: 0xA2BE, + 9831 - 8213: 0xA2BF, + 9832 - 8213: 0xA2CD, + 9833 - 8213: 0xA2DB, + 9834 - 8213: 0xA2DC, + 9836 - 8213: 0xA2DD, + 9837 - 8213: 0xA2DA, +} + +const encode3Low, encode3High = 12288, 13278 + +var encode3 = [...]uint16{ + 12288 - 12288: 0xA1A1, + 12289 - 12288: 0xA1A2, + 12290 - 12288: 0xA1A3, + 12291 - 12288: 0xA1A8, + 12296 - 12288: 0xA1B4, + 12297 - 12288: 0xA1B5, + 12298 - 12288: 0xA1B6, + 12299 - 12288: 0xA1B7, + 12300 - 12288: 0xA1B8, + 12301 - 12288: 0xA1B9, + 12302 - 12288: 0xA1BA, + 12303 - 12288: 0xA1BB, + 12304 - 12288: 0xA1BC, + 12305 - 12288: 0xA1BD, + 12307 - 12288: 0xA1EB, + 12308 - 12288: 0xA1B2, + 12309 - 12288: 0xA1B3, + 12353 - 12288: 0xAAA1, + 12354 - 12288: 0xAAA2, + 12355 - 12288: 0xAAA3, + 12356 - 12288: 0xAAA4, + 12357 - 12288: 0xAAA5, + 12358 - 12288: 0xAAA6, + 12359 - 12288: 0xAAA7, + 12360 - 12288: 0xAAA8, + 12361 - 12288: 0xAAA9, + 12362 - 12288: 0xAAAA, + 12363 - 12288: 0xAAAB, + 12364 - 12288: 0xAAAC, + 12365 - 12288: 0xAAAD, + 12366 - 12288: 0xAAAE, + 12367 - 12288: 0xAAAF, + 12368 - 12288: 0xAAB0, + 12369 - 12288: 0xAAB1, + 12370 - 12288: 0xAAB2, + 12371 - 12288: 0xAAB3, + 12372 - 12288: 0xAAB4, + 12373 - 12288: 0xAAB5, + 12374 - 12288: 0xAAB6, + 12375 - 12288: 0xAAB7, + 12376 - 12288: 0xAAB8, + 12377 - 12288: 0xAAB9, + 12378 - 12288: 0xAABA, + 12379 - 12288: 0xAABB, + 12380 - 12288: 0xAABC, + 12381 - 12288: 0xAABD, + 12382 - 12288: 0xAABE, + 12383 - 12288: 0xAABF, + 12384 - 12288: 0xAAC0, + 12385 - 12288: 0xAAC1, + 12386 - 12288: 0xAAC2, + 12387 - 12288: 0xAAC3, + 12388 - 12288: 0xAAC4, + 12389 - 12288: 0xAAC5, + 12390 - 12288: 0xAAC6, + 12391 - 12288: 0xAAC7, + 12392 - 12288: 0xAAC8, + 12393 - 12288: 0xAAC9, + 12394 - 12288: 0xAACA, + 12395 - 12288: 0xAACB, + 12396 - 12288: 0xAACC, + 12397 - 12288: 0xAACD, + 12398 - 12288: 0xAACE, + 12399 - 12288: 0xAACF, + 12400 - 12288: 0xAAD0, + 12401 - 12288: 0xAAD1, + 12402 - 12288: 0xAAD2, + 12403 - 12288: 0xAAD3, + 12404 - 12288: 0xAAD4, + 12405 - 12288: 0xAAD5, + 12406 - 12288: 0xAAD6, + 12407 - 12288: 0xAAD7, + 12408 - 12288: 0xAAD8, + 12409 - 12288: 0xAAD9, + 12410 - 12288: 0xAADA, + 12411 - 12288: 0xAADB, + 12412 - 12288: 0xAADC, + 12413 - 12288: 0xAADD, + 12414 - 12288: 0xAADE, + 12415 - 12288: 0xAADF, + 12416 - 12288: 0xAAE0, + 12417 - 12288: 0xAAE1, + 12418 - 12288: 0xAAE2, + 12419 - 12288: 0xAAE3, + 12420 - 12288: 0xAAE4, + 12421 - 12288: 0xAAE5, + 12422 - 12288: 0xAAE6, + 12423 - 12288: 0xAAE7, + 12424 - 12288: 0xAAE8, + 12425 - 12288: 0xAAE9, + 12426 - 12288: 0xAAEA, + 12427 - 12288: 0xAAEB, + 12428 - 12288: 0xAAEC, + 12429 - 12288: 0xAAED, + 12430 - 12288: 0xAAEE, + 12431 - 12288: 0xAAEF, + 12432 - 12288: 0xAAF0, + 12433 - 12288: 0xAAF1, + 12434 - 12288: 0xAAF2, + 12435 - 12288: 0xAAF3, + 12449 - 12288: 0xABA1, + 12450 - 12288: 0xABA2, + 12451 - 12288: 0xABA3, + 12452 - 12288: 0xABA4, + 12453 - 12288: 0xABA5, + 12454 - 12288: 0xABA6, + 12455 - 12288: 0xABA7, + 12456 - 12288: 0xABA8, + 12457 - 12288: 0xABA9, + 12458 - 12288: 0xABAA, + 12459 - 12288: 0xABAB, + 12460 - 12288: 0xABAC, + 12461 - 12288: 0xABAD, + 12462 - 12288: 0xABAE, + 12463 - 12288: 0xABAF, + 12464 - 12288: 0xABB0, + 12465 - 12288: 0xABB1, + 12466 - 12288: 0xABB2, + 12467 - 12288: 0xABB3, + 12468 - 12288: 0xABB4, + 12469 - 12288: 0xABB5, + 12470 - 12288: 0xABB6, + 12471 - 12288: 0xABB7, + 12472 - 12288: 0xABB8, + 12473 - 12288: 0xABB9, + 12474 - 12288: 0xABBA, + 12475 - 12288: 0xABBB, + 12476 - 12288: 0xABBC, + 12477 - 12288: 0xABBD, + 12478 - 12288: 0xABBE, + 12479 - 12288: 0xABBF, + 12480 - 12288: 0xABC0, + 12481 - 12288: 0xABC1, + 12482 - 12288: 0xABC2, + 12483 - 12288: 0xABC3, + 12484 - 12288: 0xABC4, + 12485 - 12288: 0xABC5, + 12486 - 12288: 0xABC6, + 12487 - 12288: 0xABC7, + 12488 - 12288: 0xABC8, + 12489 - 12288: 0xABC9, + 12490 - 12288: 0xABCA, + 12491 - 12288: 0xABCB, + 12492 - 12288: 0xABCC, + 12493 - 12288: 0xABCD, + 12494 - 12288: 0xABCE, + 12495 - 12288: 0xABCF, + 12496 - 12288: 0xABD0, + 12497 - 12288: 0xABD1, + 12498 - 12288: 0xABD2, + 12499 - 12288: 0xABD3, + 12500 - 12288: 0xABD4, + 12501 - 12288: 0xABD5, + 12502 - 12288: 0xABD6, + 12503 - 12288: 0xABD7, + 12504 - 12288: 0xABD8, + 12505 - 12288: 0xABD9, + 12506 - 12288: 0xABDA, + 12507 - 12288: 0xABDB, + 12508 - 12288: 0xABDC, + 12509 - 12288: 0xABDD, + 12510 - 12288: 0xABDE, + 12511 - 12288: 0xABDF, + 12512 - 12288: 0xABE0, + 12513 - 12288: 0xABE1, + 12514 - 12288: 0xABE2, + 12515 - 12288: 0xABE3, + 12516 - 12288: 0xABE4, + 12517 - 12288: 0xABE5, + 12518 - 12288: 0xABE6, + 12519 - 12288: 0xABE7, + 12520 - 12288: 0xABE8, + 12521 - 12288: 0xABE9, + 12522 - 12288: 0xABEA, + 12523 - 12288: 0xABEB, + 12524 - 12288: 0xABEC, + 12525 - 12288: 0xABED, + 12526 - 12288: 0xABEE, + 12527 - 12288: 0xABEF, + 12528 - 12288: 0xABF0, + 12529 - 12288: 0xABF1, + 12530 - 12288: 0xABF2, + 12531 - 12288: 0xABF3, + 12532 - 12288: 0xABF4, + 12533 - 12288: 0xABF5, + 12534 - 12288: 0xABF6, + 12593 - 12288: 0xA4A1, + 12594 - 12288: 0xA4A2, + 12595 - 12288: 0xA4A3, + 12596 - 12288: 0xA4A4, + 12597 - 12288: 0xA4A5, + 12598 - 12288: 0xA4A6, + 12599 - 12288: 0xA4A7, + 12600 - 12288: 0xA4A8, + 12601 - 12288: 0xA4A9, + 12602 - 12288: 0xA4AA, + 12603 - 12288: 0xA4AB, + 12604 - 12288: 0xA4AC, + 12605 - 12288: 0xA4AD, + 12606 - 12288: 0xA4AE, + 12607 - 12288: 0xA4AF, + 12608 - 12288: 0xA4B0, + 12609 - 12288: 0xA4B1, + 12610 - 12288: 0xA4B2, + 12611 - 12288: 0xA4B3, + 12612 - 12288: 0xA4B4, + 12613 - 12288: 0xA4B5, + 12614 - 12288: 0xA4B6, + 12615 - 12288: 0xA4B7, + 12616 - 12288: 0xA4B8, + 12617 - 12288: 0xA4B9, + 12618 - 12288: 0xA4BA, + 12619 - 12288: 0xA4BB, + 12620 - 12288: 0xA4BC, + 12621 - 12288: 0xA4BD, + 12622 - 12288: 0xA4BE, + 12623 - 12288: 0xA4BF, + 12624 - 12288: 0xA4C0, + 12625 - 12288: 0xA4C1, + 12626 - 12288: 0xA4C2, + 12627 - 12288: 0xA4C3, + 12628 - 12288: 0xA4C4, + 12629 - 12288: 0xA4C5, + 12630 - 12288: 0xA4C6, + 12631 - 12288: 0xA4C7, + 12632 - 12288: 0xA4C8, + 12633 - 12288: 0xA4C9, + 12634 - 12288: 0xA4CA, + 12635 - 12288: 0xA4CB, + 12636 - 12288: 0xA4CC, + 12637 - 12288: 0xA4CD, + 12638 - 12288: 0xA4CE, + 12639 - 12288: 0xA4CF, + 12640 - 12288: 0xA4D0, + 12641 - 12288: 0xA4D1, + 12642 - 12288: 0xA4D2, + 12643 - 12288: 0xA4D3, + 12644 - 12288: 0xA4D4, + 12645 - 12288: 0xA4D5, + 12646 - 12288: 0xA4D6, + 12647 - 12288: 0xA4D7, + 12648 - 12288: 0xA4D8, + 12649 - 12288: 0xA4D9, + 12650 - 12288: 0xA4DA, + 12651 - 12288: 0xA4DB, + 12652 - 12288: 0xA4DC, + 12653 - 12288: 0xA4DD, + 12654 - 12288: 0xA4DE, + 12655 - 12288: 0xA4DF, + 12656 - 12288: 0xA4E0, + 12657 - 12288: 0xA4E1, + 12658 - 12288: 0xA4E2, + 12659 - 12288: 0xA4E3, + 12660 - 12288: 0xA4E4, + 12661 - 12288: 0xA4E5, + 12662 - 12288: 0xA4E6, + 12663 - 12288: 0xA4E7, + 12664 - 12288: 0xA4E8, + 12665 - 12288: 0xA4E9, + 12666 - 12288: 0xA4EA, + 12667 - 12288: 0xA4EB, + 12668 - 12288: 0xA4EC, + 12669 - 12288: 0xA4ED, + 12670 - 12288: 0xA4EE, + 12671 - 12288: 0xA4EF, + 12672 - 12288: 0xA4F0, + 12673 - 12288: 0xA4F1, + 12674 - 12288: 0xA4F2, + 12675 - 12288: 0xA4F3, + 12676 - 12288: 0xA4F4, + 12677 - 12288: 0xA4F5, + 12678 - 12288: 0xA4F6, + 12679 - 12288: 0xA4F7, + 12680 - 12288: 0xA4F8, + 12681 - 12288: 0xA4F9, + 12682 - 12288: 0xA4FA, + 12683 - 12288: 0xA4FB, + 12684 - 12288: 0xA4FC, + 12685 - 12288: 0xA4FD, + 12686 - 12288: 0xA4FE, + 12800 - 12288: 0xA9B1, + 12801 - 12288: 0xA9B2, + 12802 - 12288: 0xA9B3, + 12803 - 12288: 0xA9B4, + 12804 - 12288: 0xA9B5, + 12805 - 12288: 0xA9B6, + 12806 - 12288: 0xA9B7, + 12807 - 12288: 0xA9B8, + 12808 - 12288: 0xA9B9, + 12809 - 12288: 0xA9BA, + 12810 - 12288: 0xA9BB, + 12811 - 12288: 0xA9BC, + 12812 - 12288: 0xA9BD, + 12813 - 12288: 0xA9BE, + 12814 - 12288: 0xA9BF, + 12815 - 12288: 0xA9C0, + 12816 - 12288: 0xA9C1, + 12817 - 12288: 0xA9C2, + 12818 - 12288: 0xA9C3, + 12819 - 12288: 0xA9C4, + 12820 - 12288: 0xA9C5, + 12821 - 12288: 0xA9C6, + 12822 - 12288: 0xA9C7, + 12823 - 12288: 0xA9C8, + 12824 - 12288: 0xA9C9, + 12825 - 12288: 0xA9CA, + 12826 - 12288: 0xA9CB, + 12827 - 12288: 0xA9CC, + 12828 - 12288: 0xA2DF, + 12896 - 12288: 0xA8B1, + 12897 - 12288: 0xA8B2, + 12898 - 12288: 0xA8B3, + 12899 - 12288: 0xA8B4, + 12900 - 12288: 0xA8B5, + 12901 - 12288: 0xA8B6, + 12902 - 12288: 0xA8B7, + 12903 - 12288: 0xA8B8, + 12904 - 12288: 0xA8B9, + 12905 - 12288: 0xA8BA, + 12906 - 12288: 0xA8BB, + 12907 - 12288: 0xA8BC, + 12908 - 12288: 0xA8BD, + 12909 - 12288: 0xA8BE, + 12910 - 12288: 0xA8BF, + 12911 - 12288: 0xA8C0, + 12912 - 12288: 0xA8C1, + 12913 - 12288: 0xA8C2, + 12914 - 12288: 0xA8C3, + 12915 - 12288: 0xA8C4, + 12916 - 12288: 0xA8C5, + 12917 - 12288: 0xA8C6, + 12918 - 12288: 0xA8C7, + 12919 - 12288: 0xA8C8, + 12920 - 12288: 0xA8C9, + 12921 - 12288: 0xA8CA, + 12922 - 12288: 0xA8CB, + 12923 - 12288: 0xA8CC, + 12927 - 12288: 0xA2DE, + 13184 - 12288: 0xA7C9, + 13185 - 12288: 0xA7CA, + 13186 - 12288: 0xA7CB, + 13187 - 12288: 0xA7CC, + 13188 - 12288: 0xA7CD, + 13192 - 12288: 0xA7BA, + 13193 - 12288: 0xA7BB, + 13194 - 12288: 0xA7DC, + 13195 - 12288: 0xA7DD, + 13196 - 12288: 0xA7DE, + 13197 - 12288: 0xA7B6, + 13198 - 12288: 0xA7B7, + 13199 - 12288: 0xA7B8, + 13200 - 12288: 0xA7D4, + 13201 - 12288: 0xA7D5, + 13202 - 12288: 0xA7D6, + 13203 - 12288: 0xA7D7, + 13204 - 12288: 0xA7D8, + 13205 - 12288: 0xA7A1, + 13206 - 12288: 0xA7A2, + 13207 - 12288: 0xA7A3, + 13208 - 12288: 0xA7A5, + 13209 - 12288: 0xA7AB, + 13210 - 12288: 0xA7AC, + 13211 - 12288: 0xA7AD, + 13212 - 12288: 0xA7AE, + 13213 - 12288: 0xA7AF, + 13214 - 12288: 0xA7B0, + 13215 - 12288: 0xA7B1, + 13216 - 12288: 0xA7B2, + 13217 - 12288: 0xA7B3, + 13218 - 12288: 0xA7B4, + 13219 - 12288: 0xA7A7, + 13220 - 12288: 0xA7A8, + 13221 - 12288: 0xA7A9, + 13222 - 12288: 0xA7AA, + 13223 - 12288: 0xA7BD, + 13224 - 12288: 0xA7BE, + 13225 - 12288: 0xA7E5, + 13226 - 12288: 0xA7E6, + 13227 - 12288: 0xA7E7, + 13228 - 12288: 0xA7E8, + 13229 - 12288: 0xA7E1, + 13230 - 12288: 0xA7E2, + 13231 - 12288: 0xA7E3, + 13232 - 12288: 0xA7BF, + 13233 - 12288: 0xA7C0, + 13234 - 12288: 0xA7C1, + 13235 - 12288: 0xA7C2, + 13236 - 12288: 0xA7C3, + 13237 - 12288: 0xA7C4, + 13238 - 12288: 0xA7C5, + 13239 - 12288: 0xA7C6, + 13240 - 12288: 0xA7C7, + 13241 - 12288: 0xA7C8, + 13242 - 12288: 0xA7CE, + 13243 - 12288: 0xA7CF, + 13244 - 12288: 0xA7D0, + 13245 - 12288: 0xA7D1, + 13246 - 12288: 0xA7D2, + 13247 - 12288: 0xA7D3, + 13248 - 12288: 0xA7DA, + 13249 - 12288: 0xA7DB, + 13250 - 12288: 0xA2E3, + 13251 - 12288: 0xA7EC, + 13252 - 12288: 0xA7A6, + 13253 - 12288: 0xA7E0, + 13254 - 12288: 0xA7EF, + 13255 - 12288: 0xA2E1, + 13256 - 12288: 0xA7BC, + 13257 - 12288: 0xA7ED, + 13258 - 12288: 0xA7B5, + 13263 - 12288: 0xA7B9, + 13264 - 12288: 0xA7EA, + 13267 - 12288: 0xA7EB, + 13270 - 12288: 0xA7DF, + 13272 - 12288: 0xA2E4, + 13275 - 12288: 0xA7E4, + 13276 - 12288: 0xA7EE, + 13277 - 12288: 0xA7E9, +} + +const encode4Low, encode4High = 161, 1106 + +var encode4 = [...]uint16{ + 161 - 161: 0xA2AE, + 164 - 161: 0xA2B4, + 167 - 161: 0xA1D7, + 168 - 161: 0xA1A7, + 170 - 161: 0xA8A3, + 173 - 161: 0xA1A9, + 174 - 161: 0xA2E7, + 176 - 161: 0xA1C6, + 177 - 161: 0xA1BE, + 178 - 161: 0xA9F7, + 179 - 161: 0xA9F8, + 180 - 161: 0xA2A5, + 182 - 161: 0xA2D2, + 183 - 161: 0xA1A4, + 184 - 161: 0xA2AC, + 185 - 161: 0xA9F6, + 186 - 161: 0xA8AC, + 188 - 161: 0xA8F9, + 189 - 161: 0xA8F6, + 190 - 161: 0xA8FA, + 191 - 161: 0xA2AF, + 198 - 161: 0xA8A1, + 208 - 161: 0xA8A2, + 215 - 161: 0xA1BF, + 216 - 161: 0xA8AA, + 222 - 161: 0xA8AD, + 223 - 161: 0xA9AC, + 230 - 161: 0xA9A1, + 240 - 161: 0xA9A3, + 247 - 161: 0xA1C0, + 248 - 161: 0xA9AA, + 254 - 161: 0xA9AD, + 273 - 161: 0xA9A2, + 294 - 161: 0xA8A4, + 295 - 161: 0xA9A4, + 305 - 161: 0xA9A5, + 306 - 161: 0xA8A6, + 307 - 161: 0xA9A6, + 312 - 161: 0xA9A7, + 319 - 161: 0xA8A8, + 320 - 161: 0xA9A8, + 321 - 161: 0xA8A9, + 322 - 161: 0xA9A9, + 329 - 161: 0xA9B0, + 330 - 161: 0xA8AF, + 331 - 161: 0xA9AF, + 338 - 161: 0xA8AB, + 339 - 161: 0xA9AB, + 358 - 161: 0xA8AE, + 359 - 161: 0xA9AE, + 711 - 161: 0xA2A7, + 720 - 161: 0xA2B0, + 728 - 161: 0xA2A8, + 729 - 161: 0xA2AB, + 730 - 161: 0xA2AA, + 731 - 161: 0xA2AD, + 733 - 161: 0xA2A9, + 913 - 161: 0xA5C1, + 914 - 161: 0xA5C2, + 915 - 161: 0xA5C3, + 916 - 161: 0xA5C4, + 917 - 161: 0xA5C5, + 918 - 161: 0xA5C6, + 919 - 161: 0xA5C7, + 920 - 161: 0xA5C8, + 921 - 161: 0xA5C9, + 922 - 161: 0xA5CA, + 923 - 161: 0xA5CB, + 924 - 161: 0xA5CC, + 925 - 161: 0xA5CD, + 926 - 161: 0xA5CE, + 927 - 161: 0xA5CF, + 928 - 161: 0xA5D0, + 929 - 161: 0xA5D1, + 931 - 161: 0xA5D2, + 932 - 161: 0xA5D3, + 933 - 161: 0xA5D4, + 934 - 161: 0xA5D5, + 935 - 161: 0xA5D6, + 936 - 161: 0xA5D7, + 937 - 161: 0xA5D8, + 945 - 161: 0xA5E1, + 946 - 161: 0xA5E2, + 947 - 161: 0xA5E3, + 948 - 161: 0xA5E4, + 949 - 161: 0xA5E5, + 950 - 161: 0xA5E6, + 951 - 161: 0xA5E7, + 952 - 161: 0xA5E8, + 953 - 161: 0xA5E9, + 954 - 161: 0xA5EA, + 955 - 161: 0xA5EB, + 956 - 161: 0xA5EC, + 957 - 161: 0xA5ED, + 958 - 161: 0xA5EE, + 959 - 161: 0xA5EF, + 960 - 161: 0xA5F0, + 961 - 161: 0xA5F1, + 963 - 161: 0xA5F2, + 964 - 161: 0xA5F3, + 965 - 161: 0xA5F4, + 966 - 161: 0xA5F5, + 967 - 161: 0xA5F6, + 968 - 161: 0xA5F7, + 969 - 161: 0xA5F8, + 1025 - 161: 0xACA7, + 1040 - 161: 0xACA1, + 1041 - 161: 0xACA2, + 1042 - 161: 0xACA3, + 1043 - 161: 0xACA4, + 1044 - 161: 0xACA5, + 1045 - 161: 0xACA6, + 1046 - 161: 0xACA8, + 1047 - 161: 0xACA9, + 1048 - 161: 0xACAA, + 1049 - 161: 0xACAB, + 1050 - 161: 0xACAC, + 1051 - 161: 0xACAD, + 1052 - 161: 0xACAE, + 1053 - 161: 0xACAF, + 1054 - 161: 0xACB0, + 1055 - 161: 0xACB1, + 1056 - 161: 0xACB2, + 1057 - 161: 0xACB3, + 1058 - 161: 0xACB4, + 1059 - 161: 0xACB5, + 1060 - 161: 0xACB6, + 1061 - 161: 0xACB7, + 1062 - 161: 0xACB8, + 1063 - 161: 0xACB9, + 1064 - 161: 0xACBA, + 1065 - 161: 0xACBB, + 1066 - 161: 0xACBC, + 1067 - 161: 0xACBD, + 1068 - 161: 0xACBE, + 1069 - 161: 0xACBF, + 1070 - 161: 0xACC0, + 1071 - 161: 0xACC1, + 1072 - 161: 0xACD1, + 1073 - 161: 0xACD2, + 1074 - 161: 0xACD3, + 1075 - 161: 0xACD4, + 1076 - 161: 0xACD5, + 1077 - 161: 0xACD6, + 1078 - 161: 0xACD8, + 1079 - 161: 0xACD9, + 1080 - 161: 0xACDA, + 1081 - 161: 0xACDB, + 1082 - 161: 0xACDC, + 1083 - 161: 0xACDD, + 1084 - 161: 0xACDE, + 1085 - 161: 0xACDF, + 1086 - 161: 0xACE0, + 1087 - 161: 0xACE1, + 1088 - 161: 0xACE2, + 1089 - 161: 0xACE3, + 1090 - 161: 0xACE4, + 1091 - 161: 0xACE5, + 1092 - 161: 0xACE6, + 1093 - 161: 0xACE7, + 1094 - 161: 0xACE8, + 1095 - 161: 0xACE9, + 1096 - 161: 0xACEA, + 1097 - 161: 0xACEB, + 1098 - 161: 0xACEC, + 1099 - 161: 0xACED, + 1100 - 161: 0xACEE, + 1101 - 161: 0xACEF, + 1102 - 161: 0xACF0, + 1103 - 161: 0xACF1, + 1105 - 161: 0xACD7, +} + +const encode5Low, encode5High = 63744, 64012 + +var encode5 = [...]uint16{ + 63744 - 63744: 0xCBD0, + 63745 - 63744: 0xCBD6, + 63746 - 63744: 0xCBE7, + 63747 - 63744: 0xCDCF, + 63748 - 63744: 0xCDE8, + 63749 - 63744: 0xCEAD, + 63750 - 63744: 0xCFFB, + 63751 - 63744: 0xD0A2, + 63752 - 63744: 0xD0B8, + 63753 - 63744: 0xD0D0, + 63754 - 63744: 0xD0DD, + 63755 - 63744: 0xD1D4, + 63756 - 63744: 0xD1D5, + 63757 - 63744: 0xD1D8, + 63758 - 63744: 0xD1DB, + 63759 - 63744: 0xD1DC, + 63760 - 63744: 0xD1DD, + 63761 - 63744: 0xD1DE, + 63762 - 63744: 0xD1DF, + 63763 - 63744: 0xD1E0, + 63764 - 63744: 0xD1E2, + 63765 - 63744: 0xD1E3, + 63766 - 63744: 0xD1E4, + 63767 - 63744: 0xD1E5, + 63768 - 63744: 0xD1E6, + 63769 - 63744: 0xD1E8, + 63770 - 63744: 0xD1E9, + 63771 - 63744: 0xD1EA, + 63772 - 63744: 0xD1EB, + 63773 - 63744: 0xD1ED, + 63774 - 63744: 0xD1EF, + 63775 - 63744: 0xD1F0, + 63776 - 63744: 0xD1F2, + 63777 - 63744: 0xD1F6, + 63778 - 63744: 0xD1FA, + 63779 - 63744: 0xD1FC, + 63780 - 63744: 0xD1FD, + 63781 - 63744: 0xD1FE, + 63782 - 63744: 0xD2A2, + 63783 - 63744: 0xD2A3, + 63784 - 63744: 0xD2A7, + 63785 - 63744: 0xD2A8, + 63786 - 63744: 0xD2A9, + 63787 - 63744: 0xD2AA, + 63788 - 63744: 0xD2AB, + 63789 - 63744: 0xD2AD, + 63790 - 63744: 0xD2B2, + 63791 - 63744: 0xD2BE, + 63792 - 63744: 0xD2C2, + 63793 - 63744: 0xD2C3, + 63794 - 63744: 0xD2C4, + 63795 - 63744: 0xD2C6, + 63796 - 63744: 0xD2C7, + 63797 - 63744: 0xD2C8, + 63798 - 63744: 0xD2C9, + 63799 - 63744: 0xD2CA, + 63800 - 63744: 0xD2CB, + 63801 - 63744: 0xD2CD, + 63802 - 63744: 0xD2CE, + 63803 - 63744: 0xD2CF, + 63804 - 63744: 0xD2D0, + 63805 - 63744: 0xD2D1, + 63806 - 63744: 0xD2D2, + 63807 - 63744: 0xD2D3, + 63808 - 63744: 0xD2D4, + 63809 - 63744: 0xD2D5, + 63810 - 63744: 0xD2D6, + 63811 - 63744: 0xD2D7, + 63812 - 63744: 0xD2D9, + 63813 - 63744: 0xD2DA, + 63814 - 63744: 0xD2DE, + 63815 - 63744: 0xD2DF, + 63816 - 63744: 0xD2E1, + 63817 - 63744: 0xD2E2, + 63818 - 63744: 0xD2E4, + 63819 - 63744: 0xD2E5, + 63820 - 63744: 0xD2E6, + 63821 - 63744: 0xD2E7, + 63822 - 63744: 0xD2E8, + 63823 - 63744: 0xD2E9, + 63824 - 63744: 0xD2EA, + 63825 - 63744: 0xD2EB, + 63826 - 63744: 0xD2F0, + 63827 - 63744: 0xD2F1, + 63828 - 63744: 0xD2F2, + 63829 - 63744: 0xD2F3, + 63830 - 63744: 0xD2F4, + 63831 - 63744: 0xD2F5, + 63832 - 63744: 0xD2F7, + 63833 - 63744: 0xD2F8, + 63834 - 63744: 0xD4E6, + 63835 - 63744: 0xD4FC, + 63836 - 63744: 0xD5A5, + 63837 - 63744: 0xD5AB, + 63838 - 63744: 0xD5AE, + 63839 - 63744: 0xD6B8, + 63840 - 63744: 0xD6CD, + 63841 - 63744: 0xD7CB, + 63842 - 63744: 0xD7E4, + 63843 - 63744: 0xDBC5, + 63844 - 63744: 0xDBE4, + 63845 - 63744: 0xDCA5, + 63846 - 63744: 0xDDA5, + 63847 - 63744: 0xDDD5, + 63848 - 63744: 0xDDF4, + 63849 - 63744: 0xDEFC, + 63850 - 63744: 0xDEFE, + 63851 - 63744: 0xDFB3, + 63852 - 63744: 0xDFE1, + 63853 - 63744: 0xDFE8, + 63854 - 63744: 0xE0F1, + 63855 - 63744: 0xE1AD, + 63856 - 63744: 0xE1ED, + 63857 - 63744: 0xE3F5, + 63858 - 63744: 0xE4A1, + 63859 - 63744: 0xE4A9, + 63860 - 63744: 0xE5AE, + 63861 - 63744: 0xE5B1, + 63862 - 63744: 0xE5B2, + 63863 - 63744: 0xE5B9, + 63864 - 63744: 0xE5BB, + 63865 - 63744: 0xE5BC, + 63866 - 63744: 0xE5C4, + 63867 - 63744: 0xE5CE, + 63868 - 63744: 0xE5D0, + 63869 - 63744: 0xE5D2, + 63870 - 63744: 0xE5D6, + 63871 - 63744: 0xE5FA, + 63872 - 63744: 0xE5FB, + 63873 - 63744: 0xE5FC, + 63874 - 63744: 0xE5FE, + 63875 - 63744: 0xE6A1, + 63876 - 63744: 0xE6A4, + 63877 - 63744: 0xE6A7, + 63878 - 63744: 0xE6AD, + 63879 - 63744: 0xE6AF, + 63880 - 63744: 0xE6B0, + 63881 - 63744: 0xE6B1, + 63882 - 63744: 0xE6B3, + 63883 - 63744: 0xE6B7, + 63884 - 63744: 0xE6B8, + 63885 - 63744: 0xE6BC, + 63886 - 63744: 0xE6C4, + 63887 - 63744: 0xE6C6, + 63888 - 63744: 0xE6C7, + 63889 - 63744: 0xE6CA, + 63890 - 63744: 0xE6D2, + 63891 - 63744: 0xE6D6, + 63892 - 63744: 0xE6D9, + 63893 - 63744: 0xE6DC, + 63894 - 63744: 0xE6DF, + 63895 - 63744: 0xE6E1, + 63896 - 63744: 0xE6E4, + 63897 - 63744: 0xE6E5, + 63898 - 63744: 0xE6E6, + 63899 - 63744: 0xE6E8, + 63900 - 63744: 0xE6EA, + 63901 - 63744: 0xE6EB, + 63902 - 63744: 0xE6EC, + 63903 - 63744: 0xE6EF, + 63904 - 63744: 0xE6F1, + 63905 - 63744: 0xE6F2, + 63906 - 63744: 0xE6F5, + 63907 - 63744: 0xE6F6, + 63908 - 63744: 0xE6F7, + 63909 - 63744: 0xE6F9, + 63910 - 63744: 0xE7A1, + 63911 - 63744: 0xE7A6, + 63912 - 63744: 0xE7A9, + 63913 - 63744: 0xE7AA, + 63914 - 63744: 0xE7AC, + 63915 - 63744: 0xE7AD, + 63916 - 63744: 0xE7B0, + 63917 - 63744: 0xE7BF, + 63918 - 63744: 0xE7C1, + 63919 - 63744: 0xE7C6, + 63920 - 63744: 0xE7C7, + 63921 - 63744: 0xE7CB, + 63922 - 63744: 0xE7CD, + 63923 - 63744: 0xE7CF, + 63924 - 63744: 0xE7D0, + 63925 - 63744: 0xE7D3, + 63926 - 63744: 0xE7DF, + 63927 - 63744: 0xE7E4, + 63928 - 63744: 0xE7E6, + 63929 - 63744: 0xE7F7, + 63930 - 63744: 0xE8E7, + 63931 - 63744: 0xE8E8, + 63932 - 63744: 0xE8F0, + 63933 - 63744: 0xE8F1, + 63934 - 63744: 0xE8F7, + 63935 - 63744: 0xE8F9, + 63936 - 63744: 0xE8FB, + 63937 - 63744: 0xE8FE, + 63938 - 63744: 0xE9A7, + 63939 - 63744: 0xE9AC, + 63940 - 63744: 0xE9CC, + 63941 - 63744: 0xE9F7, + 63942 - 63744: 0xEAC1, + 63943 - 63744: 0xEAE5, + 63944 - 63744: 0xEAF4, + 63945 - 63744: 0xEAF7, + 63946 - 63744: 0xEAFC, + 63947 - 63744: 0xEAFE, + 63948 - 63744: 0xEBA4, + 63949 - 63744: 0xEBA7, + 63950 - 63744: 0xEBA9, + 63951 - 63744: 0xEBAA, + 63952 - 63744: 0xEBBA, + 63953 - 63744: 0xEBBB, + 63954 - 63744: 0xEBBD, + 63955 - 63744: 0xEBC1, + 63956 - 63744: 0xEBC2, + 63957 - 63744: 0xEBC6, + 63958 - 63744: 0xEBC7, + 63959 - 63744: 0xEBCC, + 63960 - 63744: 0xEBCF, + 63961 - 63744: 0xEBD0, + 63962 - 63744: 0xEBD1, + 63963 - 63744: 0xEBD2, + 63964 - 63744: 0xEBD8, + 63965 - 63744: 0xECA6, + 63966 - 63744: 0xECA7, + 63967 - 63744: 0xECAA, + 63968 - 63744: 0xECAF, + 63969 - 63744: 0xECB0, + 63970 - 63744: 0xECB1, + 63971 - 63744: 0xECB2, + 63972 - 63744: 0xECB5, + 63973 - 63744: 0xECB8, + 63974 - 63744: 0xECBA, + 63975 - 63744: 0xECC0, + 63976 - 63744: 0xECC1, + 63977 - 63744: 0xECC5, + 63978 - 63744: 0xECC6, + 63979 - 63744: 0xECC9, + 63980 - 63744: 0xECCA, + 63981 - 63744: 0xECD5, + 63982 - 63744: 0xECDD, + 63983 - 63744: 0xECDE, + 63984 - 63744: 0xECE1, + 63985 - 63744: 0xECE4, + 63986 - 63744: 0xECE7, + 63987 - 63744: 0xECE8, + 63988 - 63744: 0xECF7, + 63989 - 63744: 0xECF8, + 63990 - 63744: 0xECFA, + 63991 - 63744: 0xEDA1, + 63992 - 63744: 0xEDA2, + 63993 - 63744: 0xEDA3, + 63994 - 63744: 0xEDEE, + 63995 - 63744: 0xEEDB, + 63996 - 63744: 0xF2BD, + 63997 - 63744: 0xF2FA, + 63998 - 63744: 0xF3B1, + 63999 - 63744: 0xF4A7, + 64000 - 63744: 0xF4EE, + 64001 - 63744: 0xF6F4, + 64002 - 63744: 0xF6F6, + 64003 - 63744: 0xF7B8, + 64004 - 63744: 0xF7C8, + 64005 - 63744: 0xF7D3, + 64006 - 63744: 0xF8DB, + 64007 - 63744: 0xF8F0, + 64008 - 63744: 0xFAA1, + 64009 - 63744: 0xFAA2, + 64010 - 63744: 0xFAE6, + 64011 - 63744: 0xFCA9, +} + +const encode6Low, encode6High = 65281, 65511 + +var encode6 = [...]uint16{ + 65281 - 65281: 0xA3A1, + 65282 - 65281: 0xA3A2, + 65283 - 65281: 0xA3A3, + 65284 - 65281: 0xA3A4, + 65285 - 65281: 0xA3A5, + 65286 - 65281: 0xA3A6, + 65287 - 65281: 0xA3A7, + 65288 - 65281: 0xA3A8, + 65289 - 65281: 0xA3A9, + 65290 - 65281: 0xA3AA, + 65291 - 65281: 0xA3AB, + 65292 - 65281: 0xA3AC, + 65293 - 65281: 0xA3AD, + 65294 - 65281: 0xA3AE, + 65295 - 65281: 0xA3AF, + 65296 - 65281: 0xA3B0, + 65297 - 65281: 0xA3B1, + 65298 - 65281: 0xA3B2, + 65299 - 65281: 0xA3B3, + 65300 - 65281: 0xA3B4, + 65301 - 65281: 0xA3B5, + 65302 - 65281: 0xA3B6, + 65303 - 65281: 0xA3B7, + 65304 - 65281: 0xA3B8, + 65305 - 65281: 0xA3B9, + 65306 - 65281: 0xA3BA, + 65307 - 65281: 0xA3BB, + 65308 - 65281: 0xA3BC, + 65309 - 65281: 0xA3BD, + 65310 - 65281: 0xA3BE, + 65311 - 65281: 0xA3BF, + 65312 - 65281: 0xA3C0, + 65313 - 65281: 0xA3C1, + 65314 - 65281: 0xA3C2, + 65315 - 65281: 0xA3C3, + 65316 - 65281: 0xA3C4, + 65317 - 65281: 0xA3C5, + 65318 - 65281: 0xA3C6, + 65319 - 65281: 0xA3C7, + 65320 - 65281: 0xA3C8, + 65321 - 65281: 0xA3C9, + 65322 - 65281: 0xA3CA, + 65323 - 65281: 0xA3CB, + 65324 - 65281: 0xA3CC, + 65325 - 65281: 0xA3CD, + 65326 - 65281: 0xA3CE, + 65327 - 65281: 0xA3CF, + 65328 - 65281: 0xA3D0, + 65329 - 65281: 0xA3D1, + 65330 - 65281: 0xA3D2, + 65331 - 65281: 0xA3D3, + 65332 - 65281: 0xA3D4, + 65333 - 65281: 0xA3D5, + 65334 - 65281: 0xA3D6, + 65335 - 65281: 0xA3D7, + 65336 - 65281: 0xA3D8, + 65337 - 65281: 0xA3D9, + 65338 - 65281: 0xA3DA, + 65339 - 65281: 0xA3DB, + 65340 - 65281: 0xA1AC, + 65341 - 65281: 0xA3DD, + 65342 - 65281: 0xA3DE, + 65343 - 65281: 0xA3DF, + 65344 - 65281: 0xA3E0, + 65345 - 65281: 0xA3E1, + 65346 - 65281: 0xA3E2, + 65347 - 65281: 0xA3E3, + 65348 - 65281: 0xA3E4, + 65349 - 65281: 0xA3E5, + 65350 - 65281: 0xA3E6, + 65351 - 65281: 0xA3E7, + 65352 - 65281: 0xA3E8, + 65353 - 65281: 0xA3E9, + 65354 - 65281: 0xA3EA, + 65355 - 65281: 0xA3EB, + 65356 - 65281: 0xA3EC, + 65357 - 65281: 0xA3ED, + 65358 - 65281: 0xA3EE, + 65359 - 65281: 0xA3EF, + 65360 - 65281: 0xA3F0, + 65361 - 65281: 0xA3F1, + 65362 - 65281: 0xA3F2, + 65363 - 65281: 0xA3F3, + 65364 - 65281: 0xA3F4, + 65365 - 65281: 0xA3F5, + 65366 - 65281: 0xA3F6, + 65367 - 65281: 0xA3F7, + 65368 - 65281: 0xA3F8, + 65369 - 65281: 0xA3F9, + 65370 - 65281: 0xA3FA, + 65371 - 65281: 0xA3FB, + 65372 - 65281: 0xA3FC, + 65373 - 65281: 0xA3FD, + 65374 - 65281: 0xA2A6, + 65504 - 65281: 0xA1CB, + 65505 - 65281: 0xA1CC, + 65506 - 65281: 0xA1FE, + 65507 - 65281: 0xA3FE, + 65509 - 65281: 0xA1CD, + 65510 - 65281: 0xA3DC, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go new file mode 100644 index 000000000000..5ecc526cf8a7 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go @@ -0,0 +1,12 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "golang.org/x/text/encoding" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{GB18030, GBK, HZGB2312} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go new file mode 100644 index 000000000000..0e0fabfd6b1e --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go @@ -0,0 +1,273 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +var ( + // GB18030 is the GB18030 encoding. + GB18030 encoding.Encoding = &gbk18030 + // GBK is the GBK encoding. It encodes an extension of the GB2312 character set + // and is also known as Code Page 936. + GBK encoding.Encoding = &gbk +) + +var gbk = internal.Encoding{ + &internal.SimpleEncoding{ + gbkDecoder{gb18030: false}, + gbkEncoder{gb18030: false}, + }, + "GBK", + identifier.GBK, +} + +var gbk18030 = internal.Encoding{ + &internal.SimpleEncoding{ + gbkDecoder{gb18030: true}, + gbkEncoder{gb18030: true}, + }, + "GB18030", + identifier.GB18030, +} + +type gbkDecoder struct { + transform.NopResetter + gb18030 bool +} + +func (d gbkDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC + // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk + // says to treat "gbk" as Code Page 936. + // GBK’s decoder is gb18030’s decoder. https://encoding.spec.whatwg.org/#gbk-decoder + // If byte is 0x80, return code point U+20AC. https://encoding.spec.whatwg.org/#gb18030-decoder + case c0 == 0x80: + r, size = '€', 1 + + case c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + c1 := src[nSrc+1] + switch { + case 0x40 <= c1 && c1 < 0x7f: + c1 -= 0x40 + case 0x80 <= c1 && c1 < 0xff: + c1 -= 0x41 + case d.gb18030 && 0x30 <= c1 && c1 < 0x40: + if nSrc+3 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + // The second byte here is always ASCII, so we can set size + // to 1 in all cases. + r, size = utf8.RuneError, 1 + goto write + } + c2 := src[nSrc+2] + if c2 < 0x81 || 0xff <= c2 { + r, size = utf8.RuneError, 1 + goto write + } + c3 := src[nSrc+3] + if c3 < 0x30 || 0x3a <= c3 { + r, size = utf8.RuneError, 1 + goto write + } + size = 4 + r = ((rune(c0-0x81)*10+rune(c1-0x30))*126+rune(c2-0x81))*10 + rune(c3-0x30) + if r < 39420 { + i, j := 0, len(gb18030) + for i < j { + h := i + (j-i)/2 + if r >= rune(gb18030[h][0]) { + i = h + 1 + } else { + j = h + } + } + dec := &gb18030[i-1] + r += rune(dec[1]) - rune(dec[0]) + goto write + } + r -= 189000 + if 0 <= r && r < 0x100000 { + r += 0x10000 + } else { + r, size = utf8.RuneError, 1 + } + goto write + default: + r, size = utf8.RuneError, 1 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0-0x81)*190 + int(c1); i < len(decode) { + r = rune(decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + default: + r, size = utf8.RuneError, 1 + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type gbkEncoder struct { + transform.NopResetter + gb18030 bool +} + +func (e gbkEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, r2, size := rune(0), rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r2 = rune(encode0[r-encode0Low]); r2 != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC + // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk + // says to treat "gbk" as Code Page 936. + // GBK’s encoder is gb18030’s encoder with its _is GBK_ set to true. https://encoding.spec.whatwg.org/#gbk-encoder + // If _is GBK_ is true and code point is U+20AC, return byte 0x80. https://encoding.spec.whatwg.org/#gb18030-encoder + if !e.gb18030 && r == '€' { + r = 0x80 + goto write1 + } + if r2 = rune(encode1[r-encode1Low]); r2 != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r2 = rune(encode2[r-encode2Low]); r2 != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r2 = rune(encode3[r-encode3Low]); r2 != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r2 = rune(encode4[r-encode4Low]); r2 != 0 { + goto write2 + } + } + + if e.gb18030 { + if r < 0x10000 { + i, j := 0, len(gb18030) + for i < j { + h := i + (j-i)/2 + if r >= rune(gb18030[h][1]) { + i = h + 1 + } else { + j = h + } + } + dec := &gb18030[i-1] + r += rune(dec[0]) - rune(dec[1]) + goto write4 + } else if r < 0x110000 { + r += 189000 - 0x10000 + goto write4 + } + } + err = internal.ErrASCIIReplacement + break + } + + write1: + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r2 >> 8) + dst[nDst+1] = uint8(r2) + nDst += 2 + continue + + write4: + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+3] = uint8(r%10 + 0x30) + r /= 10 + dst[nDst+2] = uint8(r%126 + 0x81) + r /= 126 + dst[nDst+1] = uint8(r%10 + 0x30) + r /= 10 + dst[nDst+0] = uint8(r + 0x81) + nDst += 4 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 5 { + panic("bad numEncodeTables") + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go new file mode 100644 index 000000000000..e15b7bf6a7c7 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go @@ -0,0 +1,245 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package simplifiedchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// HZGB2312 is the HZ-GB2312 encoding. +var HZGB2312 encoding.Encoding = &hzGB2312 + +var hzGB2312 = internal.Encoding{ + internal.FuncEncoding{hzGB2312NewDecoder, hzGB2312NewEncoder}, + "HZ-GB2312", + identifier.HZGB2312, +} + +func hzGB2312NewDecoder() transform.Transformer { + return new(hzGB2312Decoder) +} + +func hzGB2312NewEncoder() transform.Transformer { + return new(hzGB2312Encoder) +} + +const ( + asciiState = iota + gbState +) + +type hzGB2312Decoder int + +func (d *hzGB2312Decoder) Reset() { + *d = asciiState +} + +func (d *hzGB2312Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 +loop: + for ; nSrc < len(src); nSrc += size { + c0 := src[nSrc] + if c0 >= utf8.RuneSelf { + r, size = utf8.RuneError, 1 + goto write + } + + if c0 == '~' { + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + size = 2 + switch src[nSrc+1] { + case '{': + *d = gbState + continue + case '}': + *d = asciiState + continue + case '~': + if nDst >= len(dst) { + err = transform.ErrShortDst + break loop + } + dst[nDst] = '~' + nDst++ + continue + case '\n': + continue + default: + r = utf8.RuneError + goto write + } + } + + if *d == asciiState { + r, size = rune(c0), 1 + } else { + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + size = 2 + c1 := src[nSrc+1] + if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 { + // error + } else if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) { + r = rune(decode[i]) + if r != 0 { + goto write + } + } + if c1 > utf8.RuneSelf { + // Be consistent and always treat non-ASCII as a single error. + size = 1 + } + r = utf8.RuneError + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + } + return nDst, nSrc, err +} + +type hzGB2312Encoder int + +func (d *hzGB2312Encoder) Reset() { + *d = asciiState +} + +func (e *hzGB2312Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + if r == '~' { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = '~' + dst[nDst+1] = '~' + nDst += 2 + continue + } else if *e != asciiState { + if nDst+3 > len(dst) { + err = transform.ErrShortDst + break + } + *e = asciiState + dst[nDst+0] = '~' + dst[nDst+1] = '}' + nDst += 2 + } else if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst += 1 + continue + + } + + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto writeGB + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto writeGB + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto writeGB + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto writeGB + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto writeGB + } + } + + terminateInASCIIState: + // Switch back to ASCII state in case of error so that an ASCII + // replacement character can be written in the correct state. + if *e != asciiState { + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = '~' + dst[nDst+1] = '}' + nDst += 2 + } + err = internal.ErrASCIIReplacement + break + + writeGB: + c0 := uint8(r>>8) - 0x80 + c1 := uint8(r) - 0x80 + if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 { + goto terminateInASCIIState + } + if *e == asciiState { + if nDst+4 > len(dst) { + err = transform.ErrShortDst + break + } + *e = gbState + dst[nDst+0] = '~' + dst[nDst+1] = '{' + nDst += 2 + } else if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = c0 + dst[nDst+1] = c1 + nDst += 2 + continue + } + // TODO: should one always terminate in ASCII state to make it safe to + // concatenate two HZ-GB2312-encoded strings? + return nDst, nSrc, err +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go new file mode 100644 index 000000000000..415f52a11160 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go @@ -0,0 +1,43999 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package simplifiedchinese provides Simplified Chinese encodings such as GBK. +package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese" + +// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt +var gb18030 = [...][2]uint16{ + {0x0000, 0x0080}, + {0x0024, 0x00a5}, + {0x0026, 0x00a9}, + {0x002d, 0x00b2}, + {0x0032, 0x00b8}, + {0x0051, 0x00d8}, + {0x0059, 0x00e2}, + {0x005f, 0x00eb}, + {0x0060, 0x00ee}, + {0x0064, 0x00f4}, + {0x0067, 0x00f8}, + {0x0068, 0x00fb}, + {0x0069, 0x00fd}, + {0x006d, 0x0102}, + {0x007e, 0x0114}, + {0x0085, 0x011c}, + {0x0094, 0x012c}, + {0x00ac, 0x0145}, + {0x00af, 0x0149}, + {0x00b3, 0x014e}, + {0x00d0, 0x016c}, + {0x0132, 0x01cf}, + {0x0133, 0x01d1}, + {0x0134, 0x01d3}, + {0x0135, 0x01d5}, + {0x0136, 0x01d7}, + {0x0137, 0x01d9}, + {0x0138, 0x01db}, + {0x0139, 0x01dd}, + {0x0155, 0x01fa}, + {0x01ac, 0x0252}, + {0x01bb, 0x0262}, + {0x0220, 0x02c8}, + {0x0221, 0x02cc}, + {0x022e, 0x02da}, + {0x02e5, 0x03a2}, + {0x02e6, 0x03aa}, + {0x02ed, 0x03c2}, + {0x02ee, 0x03ca}, + {0x0325, 0x0402}, + {0x0333, 0x0450}, + {0x0334, 0x0452}, + {0x1ef2, 0x2011}, + {0x1ef4, 0x2017}, + {0x1ef5, 0x201a}, + {0x1ef7, 0x201e}, + {0x1efe, 0x2027}, + {0x1f07, 0x2031}, + {0x1f08, 0x2034}, + {0x1f09, 0x2036}, + {0x1f0e, 0x203c}, + {0x1f7e, 0x20ad}, + {0x1fd4, 0x2104}, + {0x1fd5, 0x2106}, + {0x1fd8, 0x210a}, + {0x1fe4, 0x2117}, + {0x1fee, 0x2122}, + {0x202c, 0x216c}, + {0x2030, 0x217a}, + {0x2046, 0x2194}, + {0x2048, 0x219a}, + {0x20b6, 0x2209}, + {0x20bc, 0x2210}, + {0x20bd, 0x2212}, + {0x20c0, 0x2216}, + {0x20c4, 0x221b}, + {0x20c6, 0x2221}, + {0x20c8, 0x2224}, + {0x20c9, 0x2226}, + {0x20ca, 0x222c}, + {0x20cc, 0x222f}, + {0x20d1, 0x2238}, + {0x20d6, 0x223e}, + {0x20e0, 0x2249}, + {0x20e3, 0x224d}, + {0x20e8, 0x2253}, + {0x20f5, 0x2262}, + {0x20f7, 0x2268}, + {0x20fd, 0x2270}, + {0x2122, 0x2296}, + {0x2125, 0x229a}, + {0x2130, 0x22a6}, + {0x2149, 0x22c0}, + {0x219b, 0x2313}, + {0x22e8, 0x246a}, + {0x22f2, 0x249c}, + {0x2356, 0x254c}, + {0x235a, 0x2574}, + {0x2367, 0x2590}, + {0x236a, 0x2596}, + {0x2374, 0x25a2}, + {0x2384, 0x25b4}, + {0x238c, 0x25be}, + {0x2394, 0x25c8}, + {0x2397, 0x25cc}, + {0x2399, 0x25d0}, + {0x23ab, 0x25e6}, + {0x23ca, 0x2607}, + {0x23cc, 0x260a}, + {0x2402, 0x2641}, + {0x2403, 0x2643}, + {0x2c41, 0x2e82}, + {0x2c43, 0x2e85}, + {0x2c46, 0x2e89}, + {0x2c48, 0x2e8d}, + {0x2c52, 0x2e98}, + {0x2c61, 0x2ea8}, + {0x2c63, 0x2eab}, + {0x2c66, 0x2eaf}, + {0x2c6a, 0x2eb4}, + {0x2c6c, 0x2eb8}, + {0x2c6f, 0x2ebc}, + {0x2c7d, 0x2ecb}, + {0x2da2, 0x2ffc}, + {0x2da6, 0x3004}, + {0x2da7, 0x3018}, + {0x2dac, 0x301f}, + {0x2dae, 0x302a}, + {0x2dc2, 0x303f}, + {0x2dc4, 0x3094}, + {0x2dcb, 0x309f}, + {0x2dcd, 0x30f7}, + {0x2dd2, 0x30ff}, + {0x2dd8, 0x312a}, + {0x2ece, 0x322a}, + {0x2ed5, 0x3232}, + {0x2f46, 0x32a4}, + {0x3030, 0x3390}, + {0x303c, 0x339f}, + {0x303e, 0x33a2}, + {0x3060, 0x33c5}, + {0x3069, 0x33cf}, + {0x306b, 0x33d3}, + {0x306d, 0x33d6}, + {0x30de, 0x3448}, + {0x3109, 0x3474}, + {0x3233, 0x359f}, + {0x32a2, 0x360f}, + {0x32ad, 0x361b}, + {0x35aa, 0x3919}, + {0x35ff, 0x396f}, + {0x365f, 0x39d1}, + {0x366d, 0x39e0}, + {0x3700, 0x3a74}, + {0x37da, 0x3b4f}, + {0x38f9, 0x3c6f}, + {0x396a, 0x3ce1}, + {0x3cdf, 0x4057}, + {0x3de7, 0x4160}, + {0x3fbe, 0x4338}, + {0x4032, 0x43ad}, + {0x4036, 0x43b2}, + {0x4061, 0x43de}, + {0x4159, 0x44d7}, + {0x42ce, 0x464d}, + {0x42e2, 0x4662}, + {0x43a3, 0x4724}, + {0x43a8, 0x472a}, + {0x43fa, 0x477d}, + {0x440a, 0x478e}, + {0x45c3, 0x4948}, + {0x45f5, 0x497b}, + {0x45f7, 0x497e}, + {0x45fb, 0x4984}, + {0x45fc, 0x4987}, + {0x4610, 0x499c}, + {0x4613, 0x49a0}, + {0x4629, 0x49b8}, + {0x48e8, 0x4c78}, + {0x490f, 0x4ca4}, + {0x497e, 0x4d1a}, + {0x4a12, 0x4daf}, + {0x4a63, 0x9fa6}, + {0x82bd, 0xe76c}, + {0x82be, 0xe7c8}, + {0x82bf, 0xe7e7}, + {0x82cc, 0xe815}, + {0x82cd, 0xe819}, + {0x82d2, 0xe81f}, + {0x82d9, 0xe827}, + {0x82dd, 0xe82d}, + {0x82e1, 0xe833}, + {0x82e9, 0xe83c}, + {0x82f0, 0xe844}, + {0x8300, 0xe856}, + {0x830e, 0xe865}, + {0x93d5, 0xf92d}, + {0x9421, 0xf97a}, + {0x943c, 0xf996}, + {0x948d, 0xf9e8}, + {0x9496, 0xf9f2}, + {0x94b0, 0xfa10}, + {0x94b1, 0xfa12}, + {0x94b2, 0xfa15}, + {0x94b5, 0xfa19}, + {0x94bb, 0xfa22}, + {0x94bc, 0xfa25}, + {0x94be, 0xfa2a}, + {0x98c4, 0xfe32}, + {0x98c5, 0xfe45}, + {0x98c9, 0xfe53}, + {0x98ca, 0xfe58}, + {0x98cb, 0xfe67}, + {0x98cc, 0xfe6c}, + {0x9961, 0xff5f}, + {0x99e2, 0xffe6}, +} + +// decode is the decoding table from GBK code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt +var decode = [...]uint16{ + 0: 0x4E02, + 1: 0x4E04, + 2: 0x4E05, + 3: 0x4E06, + 4: 0x4E0F, + 5: 0x4E12, + 6: 0x4E17, + 7: 0x4E1F, + 8: 0x4E20, + 9: 0x4E21, + 10: 0x4E23, + 11: 0x4E26, + 12: 0x4E29, + 13: 0x4E2E, + 14: 0x4E2F, + 15: 0x4E31, + 16: 0x4E33, + 17: 0x4E35, + 18: 0x4E37, + 19: 0x4E3C, + 20: 0x4E40, + 21: 0x4E41, + 22: 0x4E42, + 23: 0x4E44, + 24: 0x4E46, + 25: 0x4E4A, + 26: 0x4E51, + 27: 0x4E55, + 28: 0x4E57, + 29: 0x4E5A, + 30: 0x4E5B, + 31: 0x4E62, + 32: 0x4E63, + 33: 0x4E64, + 34: 0x4E65, + 35: 0x4E67, + 36: 0x4E68, + 37: 0x4E6A, + 38: 0x4E6B, + 39: 0x4E6C, + 40: 0x4E6D, + 41: 0x4E6E, + 42: 0x4E6F, + 43: 0x4E72, + 44: 0x4E74, + 45: 0x4E75, + 46: 0x4E76, + 47: 0x4E77, + 48: 0x4E78, + 49: 0x4E79, + 50: 0x4E7A, + 51: 0x4E7B, + 52: 0x4E7C, + 53: 0x4E7D, + 54: 0x4E7F, + 55: 0x4E80, + 56: 0x4E81, + 57: 0x4E82, + 58: 0x4E83, + 59: 0x4E84, + 60: 0x4E85, + 61: 0x4E87, + 62: 0x4E8A, + 63: 0x4E90, + 64: 0x4E96, + 65: 0x4E97, + 66: 0x4E99, + 67: 0x4E9C, + 68: 0x4E9D, + 69: 0x4E9E, + 70: 0x4EA3, + 71: 0x4EAA, + 72: 0x4EAF, + 73: 0x4EB0, + 74: 0x4EB1, + 75: 0x4EB4, + 76: 0x4EB6, + 77: 0x4EB7, + 78: 0x4EB8, + 79: 0x4EB9, + 80: 0x4EBC, + 81: 0x4EBD, + 82: 0x4EBE, + 83: 0x4EC8, + 84: 0x4ECC, + 85: 0x4ECF, + 86: 0x4ED0, + 87: 0x4ED2, + 88: 0x4EDA, + 89: 0x4EDB, + 90: 0x4EDC, + 91: 0x4EE0, + 92: 0x4EE2, + 93: 0x4EE6, + 94: 0x4EE7, + 95: 0x4EE9, + 96: 0x4EED, + 97: 0x4EEE, + 98: 0x4EEF, + 99: 0x4EF1, + 100: 0x4EF4, + 101: 0x4EF8, + 102: 0x4EF9, + 103: 0x4EFA, + 104: 0x4EFC, + 105: 0x4EFE, + 106: 0x4F00, + 107: 0x4F02, + 108: 0x4F03, + 109: 0x4F04, + 110: 0x4F05, + 111: 0x4F06, + 112: 0x4F07, + 113: 0x4F08, + 114: 0x4F0B, + 115: 0x4F0C, + 116: 0x4F12, + 117: 0x4F13, + 118: 0x4F14, + 119: 0x4F15, + 120: 0x4F16, + 121: 0x4F1C, + 122: 0x4F1D, + 123: 0x4F21, + 124: 0x4F23, + 125: 0x4F28, + 126: 0x4F29, + 127: 0x4F2C, + 128: 0x4F2D, + 129: 0x4F2E, + 130: 0x4F31, + 131: 0x4F33, + 132: 0x4F35, + 133: 0x4F37, + 134: 0x4F39, + 135: 0x4F3B, + 136: 0x4F3E, + 137: 0x4F3F, + 138: 0x4F40, + 139: 0x4F41, + 140: 0x4F42, + 141: 0x4F44, + 142: 0x4F45, + 143: 0x4F47, + 144: 0x4F48, + 145: 0x4F49, + 146: 0x4F4A, + 147: 0x4F4B, + 148: 0x4F4C, + 149: 0x4F52, + 150: 0x4F54, + 151: 0x4F56, + 152: 0x4F61, + 153: 0x4F62, + 154: 0x4F66, + 155: 0x4F68, + 156: 0x4F6A, + 157: 0x4F6B, + 158: 0x4F6D, + 159: 0x4F6E, + 160: 0x4F71, + 161: 0x4F72, + 162: 0x4F75, + 163: 0x4F77, + 164: 0x4F78, + 165: 0x4F79, + 166: 0x4F7A, + 167: 0x4F7D, + 168: 0x4F80, + 169: 0x4F81, + 170: 0x4F82, + 171: 0x4F85, + 172: 0x4F86, + 173: 0x4F87, + 174: 0x4F8A, + 175: 0x4F8C, + 176: 0x4F8E, + 177: 0x4F90, + 178: 0x4F92, + 179: 0x4F93, + 180: 0x4F95, + 181: 0x4F96, + 182: 0x4F98, + 183: 0x4F99, + 184: 0x4F9A, + 185: 0x4F9C, + 186: 0x4F9E, + 187: 0x4F9F, + 188: 0x4FA1, + 189: 0x4FA2, + 190: 0x4FA4, + 191: 0x4FAB, + 192: 0x4FAD, + 193: 0x4FB0, + 194: 0x4FB1, + 195: 0x4FB2, + 196: 0x4FB3, + 197: 0x4FB4, + 198: 0x4FB6, + 199: 0x4FB7, + 200: 0x4FB8, + 201: 0x4FB9, + 202: 0x4FBA, + 203: 0x4FBB, + 204: 0x4FBC, + 205: 0x4FBD, + 206: 0x4FBE, + 207: 0x4FC0, + 208: 0x4FC1, + 209: 0x4FC2, + 210: 0x4FC6, + 211: 0x4FC7, + 212: 0x4FC8, + 213: 0x4FC9, + 214: 0x4FCB, + 215: 0x4FCC, + 216: 0x4FCD, + 217: 0x4FD2, + 218: 0x4FD3, + 219: 0x4FD4, + 220: 0x4FD5, + 221: 0x4FD6, + 222: 0x4FD9, + 223: 0x4FDB, + 224: 0x4FE0, + 225: 0x4FE2, + 226: 0x4FE4, + 227: 0x4FE5, + 228: 0x4FE7, + 229: 0x4FEB, + 230: 0x4FEC, + 231: 0x4FF0, + 232: 0x4FF2, + 233: 0x4FF4, + 234: 0x4FF5, + 235: 0x4FF6, + 236: 0x4FF7, + 237: 0x4FF9, + 238: 0x4FFB, + 239: 0x4FFC, + 240: 0x4FFD, + 241: 0x4FFF, + 242: 0x5000, + 243: 0x5001, + 244: 0x5002, + 245: 0x5003, + 246: 0x5004, + 247: 0x5005, + 248: 0x5006, + 249: 0x5007, + 250: 0x5008, + 251: 0x5009, + 252: 0x500A, + 253: 0x500B, + 254: 0x500E, + 255: 0x5010, + 256: 0x5011, + 257: 0x5013, + 258: 0x5015, + 259: 0x5016, + 260: 0x5017, + 261: 0x501B, + 262: 0x501D, + 263: 0x501E, + 264: 0x5020, + 265: 0x5022, + 266: 0x5023, + 267: 0x5024, + 268: 0x5027, + 269: 0x502B, + 270: 0x502F, + 271: 0x5030, + 272: 0x5031, + 273: 0x5032, + 274: 0x5033, + 275: 0x5034, + 276: 0x5035, + 277: 0x5036, + 278: 0x5037, + 279: 0x5038, + 280: 0x5039, + 281: 0x503B, + 282: 0x503D, + 283: 0x503F, + 284: 0x5040, + 285: 0x5041, + 286: 0x5042, + 287: 0x5044, + 288: 0x5045, + 289: 0x5046, + 290: 0x5049, + 291: 0x504A, + 292: 0x504B, + 293: 0x504D, + 294: 0x5050, + 295: 0x5051, + 296: 0x5052, + 297: 0x5053, + 298: 0x5054, + 299: 0x5056, + 300: 0x5057, + 301: 0x5058, + 302: 0x5059, + 303: 0x505B, + 304: 0x505D, + 305: 0x505E, + 306: 0x505F, + 307: 0x5060, + 308: 0x5061, + 309: 0x5062, + 310: 0x5063, + 311: 0x5064, + 312: 0x5066, + 313: 0x5067, + 314: 0x5068, + 315: 0x5069, + 316: 0x506A, + 317: 0x506B, + 318: 0x506D, + 319: 0x506E, + 320: 0x506F, + 321: 0x5070, + 322: 0x5071, + 323: 0x5072, + 324: 0x5073, + 325: 0x5074, + 326: 0x5075, + 327: 0x5078, + 328: 0x5079, + 329: 0x507A, + 330: 0x507C, + 331: 0x507D, + 332: 0x5081, + 333: 0x5082, + 334: 0x5083, + 335: 0x5084, + 336: 0x5086, + 337: 0x5087, + 338: 0x5089, + 339: 0x508A, + 340: 0x508B, + 341: 0x508C, + 342: 0x508E, + 343: 0x508F, + 344: 0x5090, + 345: 0x5091, + 346: 0x5092, + 347: 0x5093, + 348: 0x5094, + 349: 0x5095, + 350: 0x5096, + 351: 0x5097, + 352: 0x5098, + 353: 0x5099, + 354: 0x509A, + 355: 0x509B, + 356: 0x509C, + 357: 0x509D, + 358: 0x509E, + 359: 0x509F, + 360: 0x50A0, + 361: 0x50A1, + 362: 0x50A2, + 363: 0x50A4, + 364: 0x50A6, + 365: 0x50AA, + 366: 0x50AB, + 367: 0x50AD, + 368: 0x50AE, + 369: 0x50AF, + 370: 0x50B0, + 371: 0x50B1, + 372: 0x50B3, + 373: 0x50B4, + 374: 0x50B5, + 375: 0x50B6, + 376: 0x50B7, + 377: 0x50B8, + 378: 0x50B9, + 379: 0x50BC, + 380: 0x50BD, + 381: 0x50BE, + 382: 0x50BF, + 383: 0x50C0, + 384: 0x50C1, + 385: 0x50C2, + 386: 0x50C3, + 387: 0x50C4, + 388: 0x50C5, + 389: 0x50C6, + 390: 0x50C7, + 391: 0x50C8, + 392: 0x50C9, + 393: 0x50CA, + 394: 0x50CB, + 395: 0x50CC, + 396: 0x50CD, + 397: 0x50CE, + 398: 0x50D0, + 399: 0x50D1, + 400: 0x50D2, + 401: 0x50D3, + 402: 0x50D4, + 403: 0x50D5, + 404: 0x50D7, + 405: 0x50D8, + 406: 0x50D9, + 407: 0x50DB, + 408: 0x50DC, + 409: 0x50DD, + 410: 0x50DE, + 411: 0x50DF, + 412: 0x50E0, + 413: 0x50E1, + 414: 0x50E2, + 415: 0x50E3, + 416: 0x50E4, + 417: 0x50E5, + 418: 0x50E8, + 419: 0x50E9, + 420: 0x50EA, + 421: 0x50EB, + 422: 0x50EF, + 423: 0x50F0, + 424: 0x50F1, + 425: 0x50F2, + 426: 0x50F4, + 427: 0x50F6, + 428: 0x50F7, + 429: 0x50F8, + 430: 0x50F9, + 431: 0x50FA, + 432: 0x50FC, + 433: 0x50FD, + 434: 0x50FE, + 435: 0x50FF, + 436: 0x5100, + 437: 0x5101, + 438: 0x5102, + 439: 0x5103, + 440: 0x5104, + 441: 0x5105, + 442: 0x5108, + 443: 0x5109, + 444: 0x510A, + 445: 0x510C, + 446: 0x510D, + 447: 0x510E, + 448: 0x510F, + 449: 0x5110, + 450: 0x5111, + 451: 0x5113, + 452: 0x5114, + 453: 0x5115, + 454: 0x5116, + 455: 0x5117, + 456: 0x5118, + 457: 0x5119, + 458: 0x511A, + 459: 0x511B, + 460: 0x511C, + 461: 0x511D, + 462: 0x511E, + 463: 0x511F, + 464: 0x5120, + 465: 0x5122, + 466: 0x5123, + 467: 0x5124, + 468: 0x5125, + 469: 0x5126, + 470: 0x5127, + 471: 0x5128, + 472: 0x5129, + 473: 0x512A, + 474: 0x512B, + 475: 0x512C, + 476: 0x512D, + 477: 0x512E, + 478: 0x512F, + 479: 0x5130, + 480: 0x5131, + 481: 0x5132, + 482: 0x5133, + 483: 0x5134, + 484: 0x5135, + 485: 0x5136, + 486: 0x5137, + 487: 0x5138, + 488: 0x5139, + 489: 0x513A, + 490: 0x513B, + 491: 0x513C, + 492: 0x513D, + 493: 0x513E, + 494: 0x5142, + 495: 0x5147, + 496: 0x514A, + 497: 0x514C, + 498: 0x514E, + 499: 0x514F, + 500: 0x5150, + 501: 0x5152, + 502: 0x5153, + 503: 0x5157, + 504: 0x5158, + 505: 0x5159, + 506: 0x515B, + 507: 0x515D, + 508: 0x515E, + 509: 0x515F, + 510: 0x5160, + 511: 0x5161, + 512: 0x5163, + 513: 0x5164, + 514: 0x5166, + 515: 0x5167, + 516: 0x5169, + 517: 0x516A, + 518: 0x516F, + 519: 0x5172, + 520: 0x517A, + 521: 0x517E, + 522: 0x517F, + 523: 0x5183, + 524: 0x5184, + 525: 0x5186, + 526: 0x5187, + 527: 0x518A, + 528: 0x518B, + 529: 0x518E, + 530: 0x518F, + 531: 0x5190, + 532: 0x5191, + 533: 0x5193, + 534: 0x5194, + 535: 0x5198, + 536: 0x519A, + 537: 0x519D, + 538: 0x519E, + 539: 0x519F, + 540: 0x51A1, + 541: 0x51A3, + 542: 0x51A6, + 543: 0x51A7, + 544: 0x51A8, + 545: 0x51A9, + 546: 0x51AA, + 547: 0x51AD, + 548: 0x51AE, + 549: 0x51B4, + 550: 0x51B8, + 551: 0x51B9, + 552: 0x51BA, + 553: 0x51BE, + 554: 0x51BF, + 555: 0x51C1, + 556: 0x51C2, + 557: 0x51C3, + 558: 0x51C5, + 559: 0x51C8, + 560: 0x51CA, + 561: 0x51CD, + 562: 0x51CE, + 563: 0x51D0, + 564: 0x51D2, + 565: 0x51D3, + 566: 0x51D4, + 567: 0x51D5, + 568: 0x51D6, + 569: 0x51D7, + 570: 0x51D8, + 571: 0x51D9, + 572: 0x51DA, + 573: 0x51DC, + 574: 0x51DE, + 575: 0x51DF, + 576: 0x51E2, + 577: 0x51E3, + 578: 0x51E5, + 579: 0x51E6, + 580: 0x51E7, + 581: 0x51E8, + 582: 0x51E9, + 583: 0x51EA, + 584: 0x51EC, + 585: 0x51EE, + 586: 0x51F1, + 587: 0x51F2, + 588: 0x51F4, + 589: 0x51F7, + 590: 0x51FE, + 591: 0x5204, + 592: 0x5205, + 593: 0x5209, + 594: 0x520B, + 595: 0x520C, + 596: 0x520F, + 597: 0x5210, + 598: 0x5213, + 599: 0x5214, + 600: 0x5215, + 601: 0x521C, + 602: 0x521E, + 603: 0x521F, + 604: 0x5221, + 605: 0x5222, + 606: 0x5223, + 607: 0x5225, + 608: 0x5226, + 609: 0x5227, + 610: 0x522A, + 611: 0x522C, + 612: 0x522F, + 613: 0x5231, + 614: 0x5232, + 615: 0x5234, + 616: 0x5235, + 617: 0x523C, + 618: 0x523E, + 619: 0x5244, + 620: 0x5245, + 621: 0x5246, + 622: 0x5247, + 623: 0x5248, + 624: 0x5249, + 625: 0x524B, + 626: 0x524E, + 627: 0x524F, + 628: 0x5252, + 629: 0x5253, + 630: 0x5255, + 631: 0x5257, + 632: 0x5258, + 633: 0x5259, + 634: 0x525A, + 635: 0x525B, + 636: 0x525D, + 637: 0x525F, + 638: 0x5260, + 639: 0x5262, + 640: 0x5263, + 641: 0x5264, + 642: 0x5266, + 643: 0x5268, + 644: 0x526B, + 645: 0x526C, + 646: 0x526D, + 647: 0x526E, + 648: 0x5270, + 649: 0x5271, + 650: 0x5273, + 651: 0x5274, + 652: 0x5275, + 653: 0x5276, + 654: 0x5277, + 655: 0x5278, + 656: 0x5279, + 657: 0x527A, + 658: 0x527B, + 659: 0x527C, + 660: 0x527E, + 661: 0x5280, + 662: 0x5283, + 663: 0x5284, + 664: 0x5285, + 665: 0x5286, + 666: 0x5287, + 667: 0x5289, + 668: 0x528A, + 669: 0x528B, + 670: 0x528C, + 671: 0x528D, + 672: 0x528E, + 673: 0x528F, + 674: 0x5291, + 675: 0x5292, + 676: 0x5294, + 677: 0x5295, + 678: 0x5296, + 679: 0x5297, + 680: 0x5298, + 681: 0x5299, + 682: 0x529A, + 683: 0x529C, + 684: 0x52A4, + 685: 0x52A5, + 686: 0x52A6, + 687: 0x52A7, + 688: 0x52AE, + 689: 0x52AF, + 690: 0x52B0, + 691: 0x52B4, + 692: 0x52B5, + 693: 0x52B6, + 694: 0x52B7, + 695: 0x52B8, + 696: 0x52B9, + 697: 0x52BA, + 698: 0x52BB, + 699: 0x52BC, + 700: 0x52BD, + 701: 0x52C0, + 702: 0x52C1, + 703: 0x52C2, + 704: 0x52C4, + 705: 0x52C5, + 706: 0x52C6, + 707: 0x52C8, + 708: 0x52CA, + 709: 0x52CC, + 710: 0x52CD, + 711: 0x52CE, + 712: 0x52CF, + 713: 0x52D1, + 714: 0x52D3, + 715: 0x52D4, + 716: 0x52D5, + 717: 0x52D7, + 718: 0x52D9, + 719: 0x52DA, + 720: 0x52DB, + 721: 0x52DC, + 722: 0x52DD, + 723: 0x52DE, + 724: 0x52E0, + 725: 0x52E1, + 726: 0x52E2, + 727: 0x52E3, + 728: 0x52E5, + 729: 0x52E6, + 730: 0x52E7, + 731: 0x52E8, + 732: 0x52E9, + 733: 0x52EA, + 734: 0x52EB, + 735: 0x52EC, + 736: 0x52ED, + 737: 0x52EE, + 738: 0x52EF, + 739: 0x52F1, + 740: 0x52F2, + 741: 0x52F3, + 742: 0x52F4, + 743: 0x52F5, + 744: 0x52F6, + 745: 0x52F7, + 746: 0x52F8, + 747: 0x52FB, + 748: 0x52FC, + 749: 0x52FD, + 750: 0x5301, + 751: 0x5302, + 752: 0x5303, + 753: 0x5304, + 754: 0x5307, + 755: 0x5309, + 756: 0x530A, + 757: 0x530B, + 758: 0x530C, + 759: 0x530E, + 760: 0x5311, + 761: 0x5312, + 762: 0x5313, + 763: 0x5314, + 764: 0x5318, + 765: 0x531B, + 766: 0x531C, + 767: 0x531E, + 768: 0x531F, + 769: 0x5322, + 770: 0x5324, + 771: 0x5325, + 772: 0x5327, + 773: 0x5328, + 774: 0x5329, + 775: 0x532B, + 776: 0x532C, + 777: 0x532D, + 778: 0x532F, + 779: 0x5330, + 780: 0x5331, + 781: 0x5332, + 782: 0x5333, + 783: 0x5334, + 784: 0x5335, + 785: 0x5336, + 786: 0x5337, + 787: 0x5338, + 788: 0x533C, + 789: 0x533D, + 790: 0x5340, + 791: 0x5342, + 792: 0x5344, + 793: 0x5346, + 794: 0x534B, + 795: 0x534C, + 796: 0x534D, + 797: 0x5350, + 798: 0x5354, + 799: 0x5358, + 800: 0x5359, + 801: 0x535B, + 802: 0x535D, + 803: 0x5365, + 804: 0x5368, + 805: 0x536A, + 806: 0x536C, + 807: 0x536D, + 808: 0x5372, + 809: 0x5376, + 810: 0x5379, + 811: 0x537B, + 812: 0x537C, + 813: 0x537D, + 814: 0x537E, + 815: 0x5380, + 816: 0x5381, + 817: 0x5383, + 818: 0x5387, + 819: 0x5388, + 820: 0x538A, + 821: 0x538E, + 822: 0x538F, + 823: 0x5390, + 824: 0x5391, + 825: 0x5392, + 826: 0x5393, + 827: 0x5394, + 828: 0x5396, + 829: 0x5397, + 830: 0x5399, + 831: 0x539B, + 832: 0x539C, + 833: 0x539E, + 834: 0x53A0, + 835: 0x53A1, + 836: 0x53A4, + 837: 0x53A7, + 838: 0x53AA, + 839: 0x53AB, + 840: 0x53AC, + 841: 0x53AD, + 842: 0x53AF, + 843: 0x53B0, + 844: 0x53B1, + 845: 0x53B2, + 846: 0x53B3, + 847: 0x53B4, + 848: 0x53B5, + 849: 0x53B7, + 850: 0x53B8, + 851: 0x53B9, + 852: 0x53BA, + 853: 0x53BC, + 854: 0x53BD, + 855: 0x53BE, + 856: 0x53C0, + 857: 0x53C3, + 858: 0x53C4, + 859: 0x53C5, + 860: 0x53C6, + 861: 0x53C7, + 862: 0x53CE, + 863: 0x53CF, + 864: 0x53D0, + 865: 0x53D2, + 866: 0x53D3, + 867: 0x53D5, + 868: 0x53DA, + 869: 0x53DC, + 870: 0x53DD, + 871: 0x53DE, + 872: 0x53E1, + 873: 0x53E2, + 874: 0x53E7, + 875: 0x53F4, + 876: 0x53FA, + 877: 0x53FE, + 878: 0x53FF, + 879: 0x5400, + 880: 0x5402, + 881: 0x5405, + 882: 0x5407, + 883: 0x540B, + 884: 0x5414, + 885: 0x5418, + 886: 0x5419, + 887: 0x541A, + 888: 0x541C, + 889: 0x5422, + 890: 0x5424, + 891: 0x5425, + 892: 0x542A, + 893: 0x5430, + 894: 0x5433, + 895: 0x5436, + 896: 0x5437, + 897: 0x543A, + 898: 0x543D, + 899: 0x543F, + 900: 0x5441, + 901: 0x5442, + 902: 0x5444, + 903: 0x5445, + 904: 0x5447, + 905: 0x5449, + 906: 0x544C, + 907: 0x544D, + 908: 0x544E, + 909: 0x544F, + 910: 0x5451, + 911: 0x545A, + 912: 0x545D, + 913: 0x545E, + 914: 0x545F, + 915: 0x5460, + 916: 0x5461, + 917: 0x5463, + 918: 0x5465, + 919: 0x5467, + 920: 0x5469, + 921: 0x546A, + 922: 0x546B, + 923: 0x546C, + 924: 0x546D, + 925: 0x546E, + 926: 0x546F, + 927: 0x5470, + 928: 0x5474, + 929: 0x5479, + 930: 0x547A, + 931: 0x547E, + 932: 0x547F, + 933: 0x5481, + 934: 0x5483, + 935: 0x5485, + 936: 0x5487, + 937: 0x5488, + 938: 0x5489, + 939: 0x548A, + 940: 0x548D, + 941: 0x5491, + 942: 0x5493, + 943: 0x5497, + 944: 0x5498, + 945: 0x549C, + 946: 0x549E, + 947: 0x549F, + 948: 0x54A0, + 949: 0x54A1, + 950: 0x54A2, + 951: 0x54A5, + 952: 0x54AE, + 953: 0x54B0, + 954: 0x54B2, + 955: 0x54B5, + 956: 0x54B6, + 957: 0x54B7, + 958: 0x54B9, + 959: 0x54BA, + 960: 0x54BC, + 961: 0x54BE, + 962: 0x54C3, + 963: 0x54C5, + 964: 0x54CA, + 965: 0x54CB, + 966: 0x54D6, + 967: 0x54D8, + 968: 0x54DB, + 969: 0x54E0, + 970: 0x54E1, + 971: 0x54E2, + 972: 0x54E3, + 973: 0x54E4, + 974: 0x54EB, + 975: 0x54EC, + 976: 0x54EF, + 977: 0x54F0, + 978: 0x54F1, + 979: 0x54F4, + 980: 0x54F5, + 981: 0x54F6, + 982: 0x54F7, + 983: 0x54F8, + 984: 0x54F9, + 985: 0x54FB, + 986: 0x54FE, + 987: 0x5500, + 988: 0x5502, + 989: 0x5503, + 990: 0x5504, + 991: 0x5505, + 992: 0x5508, + 993: 0x550A, + 994: 0x550B, + 995: 0x550C, + 996: 0x550D, + 997: 0x550E, + 998: 0x5512, + 999: 0x5513, + 1000: 0x5515, + 1001: 0x5516, + 1002: 0x5517, + 1003: 0x5518, + 1004: 0x5519, + 1005: 0x551A, + 1006: 0x551C, + 1007: 0x551D, + 1008: 0x551E, + 1009: 0x551F, + 1010: 0x5521, + 1011: 0x5525, + 1012: 0x5526, + 1013: 0x5528, + 1014: 0x5529, + 1015: 0x552B, + 1016: 0x552D, + 1017: 0x5532, + 1018: 0x5534, + 1019: 0x5535, + 1020: 0x5536, + 1021: 0x5538, + 1022: 0x5539, + 1023: 0x553A, + 1024: 0x553B, + 1025: 0x553D, + 1026: 0x5540, + 1027: 0x5542, + 1028: 0x5545, + 1029: 0x5547, + 1030: 0x5548, + 1031: 0x554B, + 1032: 0x554C, + 1033: 0x554D, + 1034: 0x554E, + 1035: 0x554F, + 1036: 0x5551, + 1037: 0x5552, + 1038: 0x5553, + 1039: 0x5554, + 1040: 0x5557, + 1041: 0x5558, + 1042: 0x5559, + 1043: 0x555A, + 1044: 0x555B, + 1045: 0x555D, + 1046: 0x555E, + 1047: 0x555F, + 1048: 0x5560, + 1049: 0x5562, + 1050: 0x5563, + 1051: 0x5568, + 1052: 0x5569, + 1053: 0x556B, + 1054: 0x556F, + 1055: 0x5570, + 1056: 0x5571, + 1057: 0x5572, + 1058: 0x5573, + 1059: 0x5574, + 1060: 0x5579, + 1061: 0x557A, + 1062: 0x557D, + 1063: 0x557F, + 1064: 0x5585, + 1065: 0x5586, + 1066: 0x558C, + 1067: 0x558D, + 1068: 0x558E, + 1069: 0x5590, + 1070: 0x5592, + 1071: 0x5593, + 1072: 0x5595, + 1073: 0x5596, + 1074: 0x5597, + 1075: 0x559A, + 1076: 0x559B, + 1077: 0x559E, + 1078: 0x55A0, + 1079: 0x55A1, + 1080: 0x55A2, + 1081: 0x55A3, + 1082: 0x55A4, + 1083: 0x55A5, + 1084: 0x55A6, + 1085: 0x55A8, + 1086: 0x55A9, + 1087: 0x55AA, + 1088: 0x55AB, + 1089: 0x55AC, + 1090: 0x55AD, + 1091: 0x55AE, + 1092: 0x55AF, + 1093: 0x55B0, + 1094: 0x55B2, + 1095: 0x55B4, + 1096: 0x55B6, + 1097: 0x55B8, + 1098: 0x55BA, + 1099: 0x55BC, + 1100: 0x55BF, + 1101: 0x55C0, + 1102: 0x55C1, + 1103: 0x55C2, + 1104: 0x55C3, + 1105: 0x55C6, + 1106: 0x55C7, + 1107: 0x55C8, + 1108: 0x55CA, + 1109: 0x55CB, + 1110: 0x55CE, + 1111: 0x55CF, + 1112: 0x55D0, + 1113: 0x55D5, + 1114: 0x55D7, + 1115: 0x55D8, + 1116: 0x55D9, + 1117: 0x55DA, + 1118: 0x55DB, + 1119: 0x55DE, + 1120: 0x55E0, + 1121: 0x55E2, + 1122: 0x55E7, + 1123: 0x55E9, + 1124: 0x55ED, + 1125: 0x55EE, + 1126: 0x55F0, + 1127: 0x55F1, + 1128: 0x55F4, + 1129: 0x55F6, + 1130: 0x55F8, + 1131: 0x55F9, + 1132: 0x55FA, + 1133: 0x55FB, + 1134: 0x55FC, + 1135: 0x55FF, + 1136: 0x5602, + 1137: 0x5603, + 1138: 0x5604, + 1139: 0x5605, + 1140: 0x5606, + 1141: 0x5607, + 1142: 0x560A, + 1143: 0x560B, + 1144: 0x560D, + 1145: 0x5610, + 1146: 0x5611, + 1147: 0x5612, + 1148: 0x5613, + 1149: 0x5614, + 1150: 0x5615, + 1151: 0x5616, + 1152: 0x5617, + 1153: 0x5619, + 1154: 0x561A, + 1155: 0x561C, + 1156: 0x561D, + 1157: 0x5620, + 1158: 0x5621, + 1159: 0x5622, + 1160: 0x5625, + 1161: 0x5626, + 1162: 0x5628, + 1163: 0x5629, + 1164: 0x562A, + 1165: 0x562B, + 1166: 0x562E, + 1167: 0x562F, + 1168: 0x5630, + 1169: 0x5633, + 1170: 0x5635, + 1171: 0x5637, + 1172: 0x5638, + 1173: 0x563A, + 1174: 0x563C, + 1175: 0x563D, + 1176: 0x563E, + 1177: 0x5640, + 1178: 0x5641, + 1179: 0x5642, + 1180: 0x5643, + 1181: 0x5644, + 1182: 0x5645, + 1183: 0x5646, + 1184: 0x5647, + 1185: 0x5648, + 1186: 0x5649, + 1187: 0x564A, + 1188: 0x564B, + 1189: 0x564F, + 1190: 0x5650, + 1191: 0x5651, + 1192: 0x5652, + 1193: 0x5653, + 1194: 0x5655, + 1195: 0x5656, + 1196: 0x565A, + 1197: 0x565B, + 1198: 0x565D, + 1199: 0x565E, + 1200: 0x565F, + 1201: 0x5660, + 1202: 0x5661, + 1203: 0x5663, + 1204: 0x5665, + 1205: 0x5666, + 1206: 0x5667, + 1207: 0x566D, + 1208: 0x566E, + 1209: 0x566F, + 1210: 0x5670, + 1211: 0x5672, + 1212: 0x5673, + 1213: 0x5674, + 1214: 0x5675, + 1215: 0x5677, + 1216: 0x5678, + 1217: 0x5679, + 1218: 0x567A, + 1219: 0x567D, + 1220: 0x567E, + 1221: 0x567F, + 1222: 0x5680, + 1223: 0x5681, + 1224: 0x5682, + 1225: 0x5683, + 1226: 0x5684, + 1227: 0x5687, + 1228: 0x5688, + 1229: 0x5689, + 1230: 0x568A, + 1231: 0x568B, + 1232: 0x568C, + 1233: 0x568D, + 1234: 0x5690, + 1235: 0x5691, + 1236: 0x5692, + 1237: 0x5694, + 1238: 0x5695, + 1239: 0x5696, + 1240: 0x5697, + 1241: 0x5698, + 1242: 0x5699, + 1243: 0x569A, + 1244: 0x569B, + 1245: 0x569C, + 1246: 0x569D, + 1247: 0x569E, + 1248: 0x569F, + 1249: 0x56A0, + 1250: 0x56A1, + 1251: 0x56A2, + 1252: 0x56A4, + 1253: 0x56A5, + 1254: 0x56A6, + 1255: 0x56A7, + 1256: 0x56A8, + 1257: 0x56A9, + 1258: 0x56AA, + 1259: 0x56AB, + 1260: 0x56AC, + 1261: 0x56AD, + 1262: 0x56AE, + 1263: 0x56B0, + 1264: 0x56B1, + 1265: 0x56B2, + 1266: 0x56B3, + 1267: 0x56B4, + 1268: 0x56B5, + 1269: 0x56B6, + 1270: 0x56B8, + 1271: 0x56B9, + 1272: 0x56BA, + 1273: 0x56BB, + 1274: 0x56BD, + 1275: 0x56BE, + 1276: 0x56BF, + 1277: 0x56C0, + 1278: 0x56C1, + 1279: 0x56C2, + 1280: 0x56C3, + 1281: 0x56C4, + 1282: 0x56C5, + 1283: 0x56C6, + 1284: 0x56C7, + 1285: 0x56C8, + 1286: 0x56C9, + 1287: 0x56CB, + 1288: 0x56CC, + 1289: 0x56CD, + 1290: 0x56CE, + 1291: 0x56CF, + 1292: 0x56D0, + 1293: 0x56D1, + 1294: 0x56D2, + 1295: 0x56D3, + 1296: 0x56D5, + 1297: 0x56D6, + 1298: 0x56D8, + 1299: 0x56D9, + 1300: 0x56DC, + 1301: 0x56E3, + 1302: 0x56E5, + 1303: 0x56E6, + 1304: 0x56E7, + 1305: 0x56E8, + 1306: 0x56E9, + 1307: 0x56EA, + 1308: 0x56EC, + 1309: 0x56EE, + 1310: 0x56EF, + 1311: 0x56F2, + 1312: 0x56F3, + 1313: 0x56F6, + 1314: 0x56F7, + 1315: 0x56F8, + 1316: 0x56FB, + 1317: 0x56FC, + 1318: 0x5700, + 1319: 0x5701, + 1320: 0x5702, + 1321: 0x5705, + 1322: 0x5707, + 1323: 0x570B, + 1324: 0x570C, + 1325: 0x570D, + 1326: 0x570E, + 1327: 0x570F, + 1328: 0x5710, + 1329: 0x5711, + 1330: 0x5712, + 1331: 0x5713, + 1332: 0x5714, + 1333: 0x5715, + 1334: 0x5716, + 1335: 0x5717, + 1336: 0x5718, + 1337: 0x5719, + 1338: 0x571A, + 1339: 0x571B, + 1340: 0x571D, + 1341: 0x571E, + 1342: 0x5720, + 1343: 0x5721, + 1344: 0x5722, + 1345: 0x5724, + 1346: 0x5725, + 1347: 0x5726, + 1348: 0x5727, + 1349: 0x572B, + 1350: 0x5731, + 1351: 0x5732, + 1352: 0x5734, + 1353: 0x5735, + 1354: 0x5736, + 1355: 0x5737, + 1356: 0x5738, + 1357: 0x573C, + 1358: 0x573D, + 1359: 0x573F, + 1360: 0x5741, + 1361: 0x5743, + 1362: 0x5744, + 1363: 0x5745, + 1364: 0x5746, + 1365: 0x5748, + 1366: 0x5749, + 1367: 0x574B, + 1368: 0x5752, + 1369: 0x5753, + 1370: 0x5754, + 1371: 0x5755, + 1372: 0x5756, + 1373: 0x5758, + 1374: 0x5759, + 1375: 0x5762, + 1376: 0x5763, + 1377: 0x5765, + 1378: 0x5767, + 1379: 0x576C, + 1380: 0x576E, + 1381: 0x5770, + 1382: 0x5771, + 1383: 0x5772, + 1384: 0x5774, + 1385: 0x5775, + 1386: 0x5778, + 1387: 0x5779, + 1388: 0x577A, + 1389: 0x577D, + 1390: 0x577E, + 1391: 0x577F, + 1392: 0x5780, + 1393: 0x5781, + 1394: 0x5787, + 1395: 0x5788, + 1396: 0x5789, + 1397: 0x578A, + 1398: 0x578D, + 1399: 0x578E, + 1400: 0x578F, + 1401: 0x5790, + 1402: 0x5791, + 1403: 0x5794, + 1404: 0x5795, + 1405: 0x5796, + 1406: 0x5797, + 1407: 0x5798, + 1408: 0x5799, + 1409: 0x579A, + 1410: 0x579C, + 1411: 0x579D, + 1412: 0x579E, + 1413: 0x579F, + 1414: 0x57A5, + 1415: 0x57A8, + 1416: 0x57AA, + 1417: 0x57AC, + 1418: 0x57AF, + 1419: 0x57B0, + 1420: 0x57B1, + 1421: 0x57B3, + 1422: 0x57B5, + 1423: 0x57B6, + 1424: 0x57B7, + 1425: 0x57B9, + 1426: 0x57BA, + 1427: 0x57BB, + 1428: 0x57BC, + 1429: 0x57BD, + 1430: 0x57BE, + 1431: 0x57BF, + 1432: 0x57C0, + 1433: 0x57C1, + 1434: 0x57C4, + 1435: 0x57C5, + 1436: 0x57C6, + 1437: 0x57C7, + 1438: 0x57C8, + 1439: 0x57C9, + 1440: 0x57CA, + 1441: 0x57CC, + 1442: 0x57CD, + 1443: 0x57D0, + 1444: 0x57D1, + 1445: 0x57D3, + 1446: 0x57D6, + 1447: 0x57D7, + 1448: 0x57DB, + 1449: 0x57DC, + 1450: 0x57DE, + 1451: 0x57E1, + 1452: 0x57E2, + 1453: 0x57E3, + 1454: 0x57E5, + 1455: 0x57E6, + 1456: 0x57E7, + 1457: 0x57E8, + 1458: 0x57E9, + 1459: 0x57EA, + 1460: 0x57EB, + 1461: 0x57EC, + 1462: 0x57EE, + 1463: 0x57F0, + 1464: 0x57F1, + 1465: 0x57F2, + 1466: 0x57F3, + 1467: 0x57F5, + 1468: 0x57F6, + 1469: 0x57F7, + 1470: 0x57FB, + 1471: 0x57FC, + 1472: 0x57FE, + 1473: 0x57FF, + 1474: 0x5801, + 1475: 0x5803, + 1476: 0x5804, + 1477: 0x5805, + 1478: 0x5808, + 1479: 0x5809, + 1480: 0x580A, + 1481: 0x580C, + 1482: 0x580E, + 1483: 0x580F, + 1484: 0x5810, + 1485: 0x5812, + 1486: 0x5813, + 1487: 0x5814, + 1488: 0x5816, + 1489: 0x5817, + 1490: 0x5818, + 1491: 0x581A, + 1492: 0x581B, + 1493: 0x581C, + 1494: 0x581D, + 1495: 0x581F, + 1496: 0x5822, + 1497: 0x5823, + 1498: 0x5825, + 1499: 0x5826, + 1500: 0x5827, + 1501: 0x5828, + 1502: 0x5829, + 1503: 0x582B, + 1504: 0x582C, + 1505: 0x582D, + 1506: 0x582E, + 1507: 0x582F, + 1508: 0x5831, + 1509: 0x5832, + 1510: 0x5833, + 1511: 0x5834, + 1512: 0x5836, + 1513: 0x5837, + 1514: 0x5838, + 1515: 0x5839, + 1516: 0x583A, + 1517: 0x583B, + 1518: 0x583C, + 1519: 0x583D, + 1520: 0x583E, + 1521: 0x583F, + 1522: 0x5840, + 1523: 0x5841, + 1524: 0x5842, + 1525: 0x5843, + 1526: 0x5845, + 1527: 0x5846, + 1528: 0x5847, + 1529: 0x5848, + 1530: 0x5849, + 1531: 0x584A, + 1532: 0x584B, + 1533: 0x584E, + 1534: 0x584F, + 1535: 0x5850, + 1536: 0x5852, + 1537: 0x5853, + 1538: 0x5855, + 1539: 0x5856, + 1540: 0x5857, + 1541: 0x5859, + 1542: 0x585A, + 1543: 0x585B, + 1544: 0x585C, + 1545: 0x585D, + 1546: 0x585F, + 1547: 0x5860, + 1548: 0x5861, + 1549: 0x5862, + 1550: 0x5863, + 1551: 0x5864, + 1552: 0x5866, + 1553: 0x5867, + 1554: 0x5868, + 1555: 0x5869, + 1556: 0x586A, + 1557: 0x586D, + 1558: 0x586E, + 1559: 0x586F, + 1560: 0x5870, + 1561: 0x5871, + 1562: 0x5872, + 1563: 0x5873, + 1564: 0x5874, + 1565: 0x5875, + 1566: 0x5876, + 1567: 0x5877, + 1568: 0x5878, + 1569: 0x5879, + 1570: 0x587A, + 1571: 0x587B, + 1572: 0x587C, + 1573: 0x587D, + 1574: 0x587F, + 1575: 0x5882, + 1576: 0x5884, + 1577: 0x5886, + 1578: 0x5887, + 1579: 0x5888, + 1580: 0x588A, + 1581: 0x588B, + 1582: 0x588C, + 1583: 0x588D, + 1584: 0x588E, + 1585: 0x588F, + 1586: 0x5890, + 1587: 0x5891, + 1588: 0x5894, + 1589: 0x5895, + 1590: 0x5896, + 1591: 0x5897, + 1592: 0x5898, + 1593: 0x589B, + 1594: 0x589C, + 1595: 0x589D, + 1596: 0x58A0, + 1597: 0x58A1, + 1598: 0x58A2, + 1599: 0x58A3, + 1600: 0x58A4, + 1601: 0x58A5, + 1602: 0x58A6, + 1603: 0x58A7, + 1604: 0x58AA, + 1605: 0x58AB, + 1606: 0x58AC, + 1607: 0x58AD, + 1608: 0x58AE, + 1609: 0x58AF, + 1610: 0x58B0, + 1611: 0x58B1, + 1612: 0x58B2, + 1613: 0x58B3, + 1614: 0x58B4, + 1615: 0x58B5, + 1616: 0x58B6, + 1617: 0x58B7, + 1618: 0x58B8, + 1619: 0x58B9, + 1620: 0x58BA, + 1621: 0x58BB, + 1622: 0x58BD, + 1623: 0x58BE, + 1624: 0x58BF, + 1625: 0x58C0, + 1626: 0x58C2, + 1627: 0x58C3, + 1628: 0x58C4, + 1629: 0x58C6, + 1630: 0x58C7, + 1631: 0x58C8, + 1632: 0x58C9, + 1633: 0x58CA, + 1634: 0x58CB, + 1635: 0x58CC, + 1636: 0x58CD, + 1637: 0x58CE, + 1638: 0x58CF, + 1639: 0x58D0, + 1640: 0x58D2, + 1641: 0x58D3, + 1642: 0x58D4, + 1643: 0x58D6, + 1644: 0x58D7, + 1645: 0x58D8, + 1646: 0x58D9, + 1647: 0x58DA, + 1648: 0x58DB, + 1649: 0x58DC, + 1650: 0x58DD, + 1651: 0x58DE, + 1652: 0x58DF, + 1653: 0x58E0, + 1654: 0x58E1, + 1655: 0x58E2, + 1656: 0x58E3, + 1657: 0x58E5, + 1658: 0x58E6, + 1659: 0x58E7, + 1660: 0x58E8, + 1661: 0x58E9, + 1662: 0x58EA, + 1663: 0x58ED, + 1664: 0x58EF, + 1665: 0x58F1, + 1666: 0x58F2, + 1667: 0x58F4, + 1668: 0x58F5, + 1669: 0x58F7, + 1670: 0x58F8, + 1671: 0x58FA, + 1672: 0x58FB, + 1673: 0x58FC, + 1674: 0x58FD, + 1675: 0x58FE, + 1676: 0x58FF, + 1677: 0x5900, + 1678: 0x5901, + 1679: 0x5903, + 1680: 0x5905, + 1681: 0x5906, + 1682: 0x5908, + 1683: 0x5909, + 1684: 0x590A, + 1685: 0x590B, + 1686: 0x590C, + 1687: 0x590E, + 1688: 0x5910, + 1689: 0x5911, + 1690: 0x5912, + 1691: 0x5913, + 1692: 0x5917, + 1693: 0x5918, + 1694: 0x591B, + 1695: 0x591D, + 1696: 0x591E, + 1697: 0x5920, + 1698: 0x5921, + 1699: 0x5922, + 1700: 0x5923, + 1701: 0x5926, + 1702: 0x5928, + 1703: 0x592C, + 1704: 0x5930, + 1705: 0x5932, + 1706: 0x5933, + 1707: 0x5935, + 1708: 0x5936, + 1709: 0x593B, + 1710: 0x593D, + 1711: 0x593E, + 1712: 0x593F, + 1713: 0x5940, + 1714: 0x5943, + 1715: 0x5945, + 1716: 0x5946, + 1717: 0x594A, + 1718: 0x594C, + 1719: 0x594D, + 1720: 0x5950, + 1721: 0x5952, + 1722: 0x5953, + 1723: 0x5959, + 1724: 0x595B, + 1725: 0x595C, + 1726: 0x595D, + 1727: 0x595E, + 1728: 0x595F, + 1729: 0x5961, + 1730: 0x5963, + 1731: 0x5964, + 1732: 0x5966, + 1733: 0x5967, + 1734: 0x5968, + 1735: 0x5969, + 1736: 0x596A, + 1737: 0x596B, + 1738: 0x596C, + 1739: 0x596D, + 1740: 0x596E, + 1741: 0x596F, + 1742: 0x5970, + 1743: 0x5971, + 1744: 0x5972, + 1745: 0x5975, + 1746: 0x5977, + 1747: 0x597A, + 1748: 0x597B, + 1749: 0x597C, + 1750: 0x597E, + 1751: 0x597F, + 1752: 0x5980, + 1753: 0x5985, + 1754: 0x5989, + 1755: 0x598B, + 1756: 0x598C, + 1757: 0x598E, + 1758: 0x598F, + 1759: 0x5990, + 1760: 0x5991, + 1761: 0x5994, + 1762: 0x5995, + 1763: 0x5998, + 1764: 0x599A, + 1765: 0x599B, + 1766: 0x599C, + 1767: 0x599D, + 1768: 0x599F, + 1769: 0x59A0, + 1770: 0x59A1, + 1771: 0x59A2, + 1772: 0x59A6, + 1773: 0x59A7, + 1774: 0x59AC, + 1775: 0x59AD, + 1776: 0x59B0, + 1777: 0x59B1, + 1778: 0x59B3, + 1779: 0x59B4, + 1780: 0x59B5, + 1781: 0x59B6, + 1782: 0x59B7, + 1783: 0x59B8, + 1784: 0x59BA, + 1785: 0x59BC, + 1786: 0x59BD, + 1787: 0x59BF, + 1788: 0x59C0, + 1789: 0x59C1, + 1790: 0x59C2, + 1791: 0x59C3, + 1792: 0x59C4, + 1793: 0x59C5, + 1794: 0x59C7, + 1795: 0x59C8, + 1796: 0x59C9, + 1797: 0x59CC, + 1798: 0x59CD, + 1799: 0x59CE, + 1800: 0x59CF, + 1801: 0x59D5, + 1802: 0x59D6, + 1803: 0x59D9, + 1804: 0x59DB, + 1805: 0x59DE, + 1806: 0x59DF, + 1807: 0x59E0, + 1808: 0x59E1, + 1809: 0x59E2, + 1810: 0x59E4, + 1811: 0x59E6, + 1812: 0x59E7, + 1813: 0x59E9, + 1814: 0x59EA, + 1815: 0x59EB, + 1816: 0x59ED, + 1817: 0x59EE, + 1818: 0x59EF, + 1819: 0x59F0, + 1820: 0x59F1, + 1821: 0x59F2, + 1822: 0x59F3, + 1823: 0x59F4, + 1824: 0x59F5, + 1825: 0x59F6, + 1826: 0x59F7, + 1827: 0x59F8, + 1828: 0x59FA, + 1829: 0x59FC, + 1830: 0x59FD, + 1831: 0x59FE, + 1832: 0x5A00, + 1833: 0x5A02, + 1834: 0x5A0A, + 1835: 0x5A0B, + 1836: 0x5A0D, + 1837: 0x5A0E, + 1838: 0x5A0F, + 1839: 0x5A10, + 1840: 0x5A12, + 1841: 0x5A14, + 1842: 0x5A15, + 1843: 0x5A16, + 1844: 0x5A17, + 1845: 0x5A19, + 1846: 0x5A1A, + 1847: 0x5A1B, + 1848: 0x5A1D, + 1849: 0x5A1E, + 1850: 0x5A21, + 1851: 0x5A22, + 1852: 0x5A24, + 1853: 0x5A26, + 1854: 0x5A27, + 1855: 0x5A28, + 1856: 0x5A2A, + 1857: 0x5A2B, + 1858: 0x5A2C, + 1859: 0x5A2D, + 1860: 0x5A2E, + 1861: 0x5A2F, + 1862: 0x5A30, + 1863: 0x5A33, + 1864: 0x5A35, + 1865: 0x5A37, + 1866: 0x5A38, + 1867: 0x5A39, + 1868: 0x5A3A, + 1869: 0x5A3B, + 1870: 0x5A3D, + 1871: 0x5A3E, + 1872: 0x5A3F, + 1873: 0x5A41, + 1874: 0x5A42, + 1875: 0x5A43, + 1876: 0x5A44, + 1877: 0x5A45, + 1878: 0x5A47, + 1879: 0x5A48, + 1880: 0x5A4B, + 1881: 0x5A4C, + 1882: 0x5A4D, + 1883: 0x5A4E, + 1884: 0x5A4F, + 1885: 0x5A50, + 1886: 0x5A51, + 1887: 0x5A52, + 1888: 0x5A53, + 1889: 0x5A54, + 1890: 0x5A56, + 1891: 0x5A57, + 1892: 0x5A58, + 1893: 0x5A59, + 1894: 0x5A5B, + 1895: 0x5A5C, + 1896: 0x5A5D, + 1897: 0x5A5E, + 1898: 0x5A5F, + 1899: 0x5A60, + 1900: 0x5A61, + 1901: 0x5A63, + 1902: 0x5A64, + 1903: 0x5A65, + 1904: 0x5A66, + 1905: 0x5A68, + 1906: 0x5A69, + 1907: 0x5A6B, + 1908: 0x5A6C, + 1909: 0x5A6D, + 1910: 0x5A6E, + 1911: 0x5A6F, + 1912: 0x5A70, + 1913: 0x5A71, + 1914: 0x5A72, + 1915: 0x5A73, + 1916: 0x5A78, + 1917: 0x5A79, + 1918: 0x5A7B, + 1919: 0x5A7C, + 1920: 0x5A7D, + 1921: 0x5A7E, + 1922: 0x5A80, + 1923: 0x5A81, + 1924: 0x5A82, + 1925: 0x5A83, + 1926: 0x5A84, + 1927: 0x5A85, + 1928: 0x5A86, + 1929: 0x5A87, + 1930: 0x5A88, + 1931: 0x5A89, + 1932: 0x5A8A, + 1933: 0x5A8B, + 1934: 0x5A8C, + 1935: 0x5A8D, + 1936: 0x5A8E, + 1937: 0x5A8F, + 1938: 0x5A90, + 1939: 0x5A91, + 1940: 0x5A93, + 1941: 0x5A94, + 1942: 0x5A95, + 1943: 0x5A96, + 1944: 0x5A97, + 1945: 0x5A98, + 1946: 0x5A99, + 1947: 0x5A9C, + 1948: 0x5A9D, + 1949: 0x5A9E, + 1950: 0x5A9F, + 1951: 0x5AA0, + 1952: 0x5AA1, + 1953: 0x5AA2, + 1954: 0x5AA3, + 1955: 0x5AA4, + 1956: 0x5AA5, + 1957: 0x5AA6, + 1958: 0x5AA7, + 1959: 0x5AA8, + 1960: 0x5AA9, + 1961: 0x5AAB, + 1962: 0x5AAC, + 1963: 0x5AAD, + 1964: 0x5AAE, + 1965: 0x5AAF, + 1966: 0x5AB0, + 1967: 0x5AB1, + 1968: 0x5AB4, + 1969: 0x5AB6, + 1970: 0x5AB7, + 1971: 0x5AB9, + 1972: 0x5ABA, + 1973: 0x5ABB, + 1974: 0x5ABC, + 1975: 0x5ABD, + 1976: 0x5ABF, + 1977: 0x5AC0, + 1978: 0x5AC3, + 1979: 0x5AC4, + 1980: 0x5AC5, + 1981: 0x5AC6, + 1982: 0x5AC7, + 1983: 0x5AC8, + 1984: 0x5ACA, + 1985: 0x5ACB, + 1986: 0x5ACD, + 1987: 0x5ACE, + 1988: 0x5ACF, + 1989: 0x5AD0, + 1990: 0x5AD1, + 1991: 0x5AD3, + 1992: 0x5AD5, + 1993: 0x5AD7, + 1994: 0x5AD9, + 1995: 0x5ADA, + 1996: 0x5ADB, + 1997: 0x5ADD, + 1998: 0x5ADE, + 1999: 0x5ADF, + 2000: 0x5AE2, + 2001: 0x5AE4, + 2002: 0x5AE5, + 2003: 0x5AE7, + 2004: 0x5AE8, + 2005: 0x5AEA, + 2006: 0x5AEC, + 2007: 0x5AED, + 2008: 0x5AEE, + 2009: 0x5AEF, + 2010: 0x5AF0, + 2011: 0x5AF2, + 2012: 0x5AF3, + 2013: 0x5AF4, + 2014: 0x5AF5, + 2015: 0x5AF6, + 2016: 0x5AF7, + 2017: 0x5AF8, + 2018: 0x5AF9, + 2019: 0x5AFA, + 2020: 0x5AFB, + 2021: 0x5AFC, + 2022: 0x5AFD, + 2023: 0x5AFE, + 2024: 0x5AFF, + 2025: 0x5B00, + 2026: 0x5B01, + 2027: 0x5B02, + 2028: 0x5B03, + 2029: 0x5B04, + 2030: 0x5B05, + 2031: 0x5B06, + 2032: 0x5B07, + 2033: 0x5B08, + 2034: 0x5B0A, + 2035: 0x5B0B, + 2036: 0x5B0C, + 2037: 0x5B0D, + 2038: 0x5B0E, + 2039: 0x5B0F, + 2040: 0x5B10, + 2041: 0x5B11, + 2042: 0x5B12, + 2043: 0x5B13, + 2044: 0x5B14, + 2045: 0x5B15, + 2046: 0x5B18, + 2047: 0x5B19, + 2048: 0x5B1A, + 2049: 0x5B1B, + 2050: 0x5B1C, + 2051: 0x5B1D, + 2052: 0x5B1E, + 2053: 0x5B1F, + 2054: 0x5B20, + 2055: 0x5B21, + 2056: 0x5B22, + 2057: 0x5B23, + 2058: 0x5B24, + 2059: 0x5B25, + 2060: 0x5B26, + 2061: 0x5B27, + 2062: 0x5B28, + 2063: 0x5B29, + 2064: 0x5B2A, + 2065: 0x5B2B, + 2066: 0x5B2C, + 2067: 0x5B2D, + 2068: 0x5B2E, + 2069: 0x5B2F, + 2070: 0x5B30, + 2071: 0x5B31, + 2072: 0x5B33, + 2073: 0x5B35, + 2074: 0x5B36, + 2075: 0x5B38, + 2076: 0x5B39, + 2077: 0x5B3A, + 2078: 0x5B3B, + 2079: 0x5B3C, + 2080: 0x5B3D, + 2081: 0x5B3E, + 2082: 0x5B3F, + 2083: 0x5B41, + 2084: 0x5B42, + 2085: 0x5B43, + 2086: 0x5B44, + 2087: 0x5B45, + 2088: 0x5B46, + 2089: 0x5B47, + 2090: 0x5B48, + 2091: 0x5B49, + 2092: 0x5B4A, + 2093: 0x5B4B, + 2094: 0x5B4C, + 2095: 0x5B4D, + 2096: 0x5B4E, + 2097: 0x5B4F, + 2098: 0x5B52, + 2099: 0x5B56, + 2100: 0x5B5E, + 2101: 0x5B60, + 2102: 0x5B61, + 2103: 0x5B67, + 2104: 0x5B68, + 2105: 0x5B6B, + 2106: 0x5B6D, + 2107: 0x5B6E, + 2108: 0x5B6F, + 2109: 0x5B72, + 2110: 0x5B74, + 2111: 0x5B76, + 2112: 0x5B77, + 2113: 0x5B78, + 2114: 0x5B79, + 2115: 0x5B7B, + 2116: 0x5B7C, + 2117: 0x5B7E, + 2118: 0x5B7F, + 2119: 0x5B82, + 2120: 0x5B86, + 2121: 0x5B8A, + 2122: 0x5B8D, + 2123: 0x5B8E, + 2124: 0x5B90, + 2125: 0x5B91, + 2126: 0x5B92, + 2127: 0x5B94, + 2128: 0x5B96, + 2129: 0x5B9F, + 2130: 0x5BA7, + 2131: 0x5BA8, + 2132: 0x5BA9, + 2133: 0x5BAC, + 2134: 0x5BAD, + 2135: 0x5BAE, + 2136: 0x5BAF, + 2137: 0x5BB1, + 2138: 0x5BB2, + 2139: 0x5BB7, + 2140: 0x5BBA, + 2141: 0x5BBB, + 2142: 0x5BBC, + 2143: 0x5BC0, + 2144: 0x5BC1, + 2145: 0x5BC3, + 2146: 0x5BC8, + 2147: 0x5BC9, + 2148: 0x5BCA, + 2149: 0x5BCB, + 2150: 0x5BCD, + 2151: 0x5BCE, + 2152: 0x5BCF, + 2153: 0x5BD1, + 2154: 0x5BD4, + 2155: 0x5BD5, + 2156: 0x5BD6, + 2157: 0x5BD7, + 2158: 0x5BD8, + 2159: 0x5BD9, + 2160: 0x5BDA, + 2161: 0x5BDB, + 2162: 0x5BDC, + 2163: 0x5BE0, + 2164: 0x5BE2, + 2165: 0x5BE3, + 2166: 0x5BE6, + 2167: 0x5BE7, + 2168: 0x5BE9, + 2169: 0x5BEA, + 2170: 0x5BEB, + 2171: 0x5BEC, + 2172: 0x5BED, + 2173: 0x5BEF, + 2174: 0x5BF1, + 2175: 0x5BF2, + 2176: 0x5BF3, + 2177: 0x5BF4, + 2178: 0x5BF5, + 2179: 0x5BF6, + 2180: 0x5BF7, + 2181: 0x5BFD, + 2182: 0x5BFE, + 2183: 0x5C00, + 2184: 0x5C02, + 2185: 0x5C03, + 2186: 0x5C05, + 2187: 0x5C07, + 2188: 0x5C08, + 2189: 0x5C0B, + 2190: 0x5C0C, + 2191: 0x5C0D, + 2192: 0x5C0E, + 2193: 0x5C10, + 2194: 0x5C12, + 2195: 0x5C13, + 2196: 0x5C17, + 2197: 0x5C19, + 2198: 0x5C1B, + 2199: 0x5C1E, + 2200: 0x5C1F, + 2201: 0x5C20, + 2202: 0x5C21, + 2203: 0x5C23, + 2204: 0x5C26, + 2205: 0x5C28, + 2206: 0x5C29, + 2207: 0x5C2A, + 2208: 0x5C2B, + 2209: 0x5C2D, + 2210: 0x5C2E, + 2211: 0x5C2F, + 2212: 0x5C30, + 2213: 0x5C32, + 2214: 0x5C33, + 2215: 0x5C35, + 2216: 0x5C36, + 2217: 0x5C37, + 2218: 0x5C43, + 2219: 0x5C44, + 2220: 0x5C46, + 2221: 0x5C47, + 2222: 0x5C4C, + 2223: 0x5C4D, + 2224: 0x5C52, + 2225: 0x5C53, + 2226: 0x5C54, + 2227: 0x5C56, + 2228: 0x5C57, + 2229: 0x5C58, + 2230: 0x5C5A, + 2231: 0x5C5B, + 2232: 0x5C5C, + 2233: 0x5C5D, + 2234: 0x5C5F, + 2235: 0x5C62, + 2236: 0x5C64, + 2237: 0x5C67, + 2238: 0x5C68, + 2239: 0x5C69, + 2240: 0x5C6A, + 2241: 0x5C6B, + 2242: 0x5C6C, + 2243: 0x5C6D, + 2244: 0x5C70, + 2245: 0x5C72, + 2246: 0x5C73, + 2247: 0x5C74, + 2248: 0x5C75, + 2249: 0x5C76, + 2250: 0x5C77, + 2251: 0x5C78, + 2252: 0x5C7B, + 2253: 0x5C7C, + 2254: 0x5C7D, + 2255: 0x5C7E, + 2256: 0x5C80, + 2257: 0x5C83, + 2258: 0x5C84, + 2259: 0x5C85, + 2260: 0x5C86, + 2261: 0x5C87, + 2262: 0x5C89, + 2263: 0x5C8A, + 2264: 0x5C8B, + 2265: 0x5C8E, + 2266: 0x5C8F, + 2267: 0x5C92, + 2268: 0x5C93, + 2269: 0x5C95, + 2270: 0x5C9D, + 2271: 0x5C9E, + 2272: 0x5C9F, + 2273: 0x5CA0, + 2274: 0x5CA1, + 2275: 0x5CA4, + 2276: 0x5CA5, + 2277: 0x5CA6, + 2278: 0x5CA7, + 2279: 0x5CA8, + 2280: 0x5CAA, + 2281: 0x5CAE, + 2282: 0x5CAF, + 2283: 0x5CB0, + 2284: 0x5CB2, + 2285: 0x5CB4, + 2286: 0x5CB6, + 2287: 0x5CB9, + 2288: 0x5CBA, + 2289: 0x5CBB, + 2290: 0x5CBC, + 2291: 0x5CBE, + 2292: 0x5CC0, + 2293: 0x5CC2, + 2294: 0x5CC3, + 2295: 0x5CC5, + 2296: 0x5CC6, + 2297: 0x5CC7, + 2298: 0x5CC8, + 2299: 0x5CC9, + 2300: 0x5CCA, + 2301: 0x5CCC, + 2302: 0x5CCD, + 2303: 0x5CCE, + 2304: 0x5CCF, + 2305: 0x5CD0, + 2306: 0x5CD1, + 2307: 0x5CD3, + 2308: 0x5CD4, + 2309: 0x5CD5, + 2310: 0x5CD6, + 2311: 0x5CD7, + 2312: 0x5CD8, + 2313: 0x5CDA, + 2314: 0x5CDB, + 2315: 0x5CDC, + 2316: 0x5CDD, + 2317: 0x5CDE, + 2318: 0x5CDF, + 2319: 0x5CE0, + 2320: 0x5CE2, + 2321: 0x5CE3, + 2322: 0x5CE7, + 2323: 0x5CE9, + 2324: 0x5CEB, + 2325: 0x5CEC, + 2326: 0x5CEE, + 2327: 0x5CEF, + 2328: 0x5CF1, + 2329: 0x5CF2, + 2330: 0x5CF3, + 2331: 0x5CF4, + 2332: 0x5CF5, + 2333: 0x5CF6, + 2334: 0x5CF7, + 2335: 0x5CF8, + 2336: 0x5CF9, + 2337: 0x5CFA, + 2338: 0x5CFC, + 2339: 0x5CFD, + 2340: 0x5CFE, + 2341: 0x5CFF, + 2342: 0x5D00, + 2343: 0x5D01, + 2344: 0x5D04, + 2345: 0x5D05, + 2346: 0x5D08, + 2347: 0x5D09, + 2348: 0x5D0A, + 2349: 0x5D0B, + 2350: 0x5D0C, + 2351: 0x5D0D, + 2352: 0x5D0F, + 2353: 0x5D10, + 2354: 0x5D11, + 2355: 0x5D12, + 2356: 0x5D13, + 2357: 0x5D15, + 2358: 0x5D17, + 2359: 0x5D18, + 2360: 0x5D19, + 2361: 0x5D1A, + 2362: 0x5D1C, + 2363: 0x5D1D, + 2364: 0x5D1F, + 2365: 0x5D20, + 2366: 0x5D21, + 2367: 0x5D22, + 2368: 0x5D23, + 2369: 0x5D25, + 2370: 0x5D28, + 2371: 0x5D2A, + 2372: 0x5D2B, + 2373: 0x5D2C, + 2374: 0x5D2F, + 2375: 0x5D30, + 2376: 0x5D31, + 2377: 0x5D32, + 2378: 0x5D33, + 2379: 0x5D35, + 2380: 0x5D36, + 2381: 0x5D37, + 2382: 0x5D38, + 2383: 0x5D39, + 2384: 0x5D3A, + 2385: 0x5D3B, + 2386: 0x5D3C, + 2387: 0x5D3F, + 2388: 0x5D40, + 2389: 0x5D41, + 2390: 0x5D42, + 2391: 0x5D43, + 2392: 0x5D44, + 2393: 0x5D45, + 2394: 0x5D46, + 2395: 0x5D48, + 2396: 0x5D49, + 2397: 0x5D4D, + 2398: 0x5D4E, + 2399: 0x5D4F, + 2400: 0x5D50, + 2401: 0x5D51, + 2402: 0x5D52, + 2403: 0x5D53, + 2404: 0x5D54, + 2405: 0x5D55, + 2406: 0x5D56, + 2407: 0x5D57, + 2408: 0x5D59, + 2409: 0x5D5A, + 2410: 0x5D5C, + 2411: 0x5D5E, + 2412: 0x5D5F, + 2413: 0x5D60, + 2414: 0x5D61, + 2415: 0x5D62, + 2416: 0x5D63, + 2417: 0x5D64, + 2418: 0x5D65, + 2419: 0x5D66, + 2420: 0x5D67, + 2421: 0x5D68, + 2422: 0x5D6A, + 2423: 0x5D6D, + 2424: 0x5D6E, + 2425: 0x5D70, + 2426: 0x5D71, + 2427: 0x5D72, + 2428: 0x5D73, + 2429: 0x5D75, + 2430: 0x5D76, + 2431: 0x5D77, + 2432: 0x5D78, + 2433: 0x5D79, + 2434: 0x5D7A, + 2435: 0x5D7B, + 2436: 0x5D7C, + 2437: 0x5D7D, + 2438: 0x5D7E, + 2439: 0x5D7F, + 2440: 0x5D80, + 2441: 0x5D81, + 2442: 0x5D83, + 2443: 0x5D84, + 2444: 0x5D85, + 2445: 0x5D86, + 2446: 0x5D87, + 2447: 0x5D88, + 2448: 0x5D89, + 2449: 0x5D8A, + 2450: 0x5D8B, + 2451: 0x5D8C, + 2452: 0x5D8D, + 2453: 0x5D8E, + 2454: 0x5D8F, + 2455: 0x5D90, + 2456: 0x5D91, + 2457: 0x5D92, + 2458: 0x5D93, + 2459: 0x5D94, + 2460: 0x5D95, + 2461: 0x5D96, + 2462: 0x5D97, + 2463: 0x5D98, + 2464: 0x5D9A, + 2465: 0x5D9B, + 2466: 0x5D9C, + 2467: 0x5D9E, + 2468: 0x5D9F, + 2469: 0x5DA0, + 2470: 0x5DA1, + 2471: 0x5DA2, + 2472: 0x5DA3, + 2473: 0x5DA4, + 2474: 0x5DA5, + 2475: 0x5DA6, + 2476: 0x5DA7, + 2477: 0x5DA8, + 2478: 0x5DA9, + 2479: 0x5DAA, + 2480: 0x5DAB, + 2481: 0x5DAC, + 2482: 0x5DAD, + 2483: 0x5DAE, + 2484: 0x5DAF, + 2485: 0x5DB0, + 2486: 0x5DB1, + 2487: 0x5DB2, + 2488: 0x5DB3, + 2489: 0x5DB4, + 2490: 0x5DB5, + 2491: 0x5DB6, + 2492: 0x5DB8, + 2493: 0x5DB9, + 2494: 0x5DBA, + 2495: 0x5DBB, + 2496: 0x5DBC, + 2497: 0x5DBD, + 2498: 0x5DBE, + 2499: 0x5DBF, + 2500: 0x5DC0, + 2501: 0x5DC1, + 2502: 0x5DC2, + 2503: 0x5DC3, + 2504: 0x5DC4, + 2505: 0x5DC6, + 2506: 0x5DC7, + 2507: 0x5DC8, + 2508: 0x5DC9, + 2509: 0x5DCA, + 2510: 0x5DCB, + 2511: 0x5DCC, + 2512: 0x5DCE, + 2513: 0x5DCF, + 2514: 0x5DD0, + 2515: 0x5DD1, + 2516: 0x5DD2, + 2517: 0x5DD3, + 2518: 0x5DD4, + 2519: 0x5DD5, + 2520: 0x5DD6, + 2521: 0x5DD7, + 2522: 0x5DD8, + 2523: 0x5DD9, + 2524: 0x5DDA, + 2525: 0x5DDC, + 2526: 0x5DDF, + 2527: 0x5DE0, + 2528: 0x5DE3, + 2529: 0x5DE4, + 2530: 0x5DEA, + 2531: 0x5DEC, + 2532: 0x5DED, + 2533: 0x5DF0, + 2534: 0x5DF5, + 2535: 0x5DF6, + 2536: 0x5DF8, + 2537: 0x5DF9, + 2538: 0x5DFA, + 2539: 0x5DFB, + 2540: 0x5DFC, + 2541: 0x5DFF, + 2542: 0x5E00, + 2543: 0x5E04, + 2544: 0x5E07, + 2545: 0x5E09, + 2546: 0x5E0A, + 2547: 0x5E0B, + 2548: 0x5E0D, + 2549: 0x5E0E, + 2550: 0x5E12, + 2551: 0x5E13, + 2552: 0x5E17, + 2553: 0x5E1E, + 2554: 0x5E1F, + 2555: 0x5E20, + 2556: 0x5E21, + 2557: 0x5E22, + 2558: 0x5E23, + 2559: 0x5E24, + 2560: 0x5E25, + 2561: 0x5E28, + 2562: 0x5E29, + 2563: 0x5E2A, + 2564: 0x5E2B, + 2565: 0x5E2C, + 2566: 0x5E2F, + 2567: 0x5E30, + 2568: 0x5E32, + 2569: 0x5E33, + 2570: 0x5E34, + 2571: 0x5E35, + 2572: 0x5E36, + 2573: 0x5E39, + 2574: 0x5E3A, + 2575: 0x5E3E, + 2576: 0x5E3F, + 2577: 0x5E40, + 2578: 0x5E41, + 2579: 0x5E43, + 2580: 0x5E46, + 2581: 0x5E47, + 2582: 0x5E48, + 2583: 0x5E49, + 2584: 0x5E4A, + 2585: 0x5E4B, + 2586: 0x5E4D, + 2587: 0x5E4E, + 2588: 0x5E4F, + 2589: 0x5E50, + 2590: 0x5E51, + 2591: 0x5E52, + 2592: 0x5E53, + 2593: 0x5E56, + 2594: 0x5E57, + 2595: 0x5E58, + 2596: 0x5E59, + 2597: 0x5E5A, + 2598: 0x5E5C, + 2599: 0x5E5D, + 2600: 0x5E5F, + 2601: 0x5E60, + 2602: 0x5E63, + 2603: 0x5E64, + 2604: 0x5E65, + 2605: 0x5E66, + 2606: 0x5E67, + 2607: 0x5E68, + 2608: 0x5E69, + 2609: 0x5E6A, + 2610: 0x5E6B, + 2611: 0x5E6C, + 2612: 0x5E6D, + 2613: 0x5E6E, + 2614: 0x5E6F, + 2615: 0x5E70, + 2616: 0x5E71, + 2617: 0x5E75, + 2618: 0x5E77, + 2619: 0x5E79, + 2620: 0x5E7E, + 2621: 0x5E81, + 2622: 0x5E82, + 2623: 0x5E83, + 2624: 0x5E85, + 2625: 0x5E88, + 2626: 0x5E89, + 2627: 0x5E8C, + 2628: 0x5E8D, + 2629: 0x5E8E, + 2630: 0x5E92, + 2631: 0x5E98, + 2632: 0x5E9B, + 2633: 0x5E9D, + 2634: 0x5EA1, + 2635: 0x5EA2, + 2636: 0x5EA3, + 2637: 0x5EA4, + 2638: 0x5EA8, + 2639: 0x5EA9, + 2640: 0x5EAA, + 2641: 0x5EAB, + 2642: 0x5EAC, + 2643: 0x5EAE, + 2644: 0x5EAF, + 2645: 0x5EB0, + 2646: 0x5EB1, + 2647: 0x5EB2, + 2648: 0x5EB4, + 2649: 0x5EBA, + 2650: 0x5EBB, + 2651: 0x5EBC, + 2652: 0x5EBD, + 2653: 0x5EBF, + 2654: 0x5EC0, + 2655: 0x5EC1, + 2656: 0x5EC2, + 2657: 0x5EC3, + 2658: 0x5EC4, + 2659: 0x5EC5, + 2660: 0x5EC6, + 2661: 0x5EC7, + 2662: 0x5EC8, + 2663: 0x5ECB, + 2664: 0x5ECC, + 2665: 0x5ECD, + 2666: 0x5ECE, + 2667: 0x5ECF, + 2668: 0x5ED0, + 2669: 0x5ED4, + 2670: 0x5ED5, + 2671: 0x5ED7, + 2672: 0x5ED8, + 2673: 0x5ED9, + 2674: 0x5EDA, + 2675: 0x5EDC, + 2676: 0x5EDD, + 2677: 0x5EDE, + 2678: 0x5EDF, + 2679: 0x5EE0, + 2680: 0x5EE1, + 2681: 0x5EE2, + 2682: 0x5EE3, + 2683: 0x5EE4, + 2684: 0x5EE5, + 2685: 0x5EE6, + 2686: 0x5EE7, + 2687: 0x5EE9, + 2688: 0x5EEB, + 2689: 0x5EEC, + 2690: 0x5EED, + 2691: 0x5EEE, + 2692: 0x5EEF, + 2693: 0x5EF0, + 2694: 0x5EF1, + 2695: 0x5EF2, + 2696: 0x5EF3, + 2697: 0x5EF5, + 2698: 0x5EF8, + 2699: 0x5EF9, + 2700: 0x5EFB, + 2701: 0x5EFC, + 2702: 0x5EFD, + 2703: 0x5F05, + 2704: 0x5F06, + 2705: 0x5F07, + 2706: 0x5F09, + 2707: 0x5F0C, + 2708: 0x5F0D, + 2709: 0x5F0E, + 2710: 0x5F10, + 2711: 0x5F12, + 2712: 0x5F14, + 2713: 0x5F16, + 2714: 0x5F19, + 2715: 0x5F1A, + 2716: 0x5F1C, + 2717: 0x5F1D, + 2718: 0x5F1E, + 2719: 0x5F21, + 2720: 0x5F22, + 2721: 0x5F23, + 2722: 0x5F24, + 2723: 0x5F28, + 2724: 0x5F2B, + 2725: 0x5F2C, + 2726: 0x5F2E, + 2727: 0x5F30, + 2728: 0x5F32, + 2729: 0x5F33, + 2730: 0x5F34, + 2731: 0x5F35, + 2732: 0x5F36, + 2733: 0x5F37, + 2734: 0x5F38, + 2735: 0x5F3B, + 2736: 0x5F3D, + 2737: 0x5F3E, + 2738: 0x5F3F, + 2739: 0x5F41, + 2740: 0x5F42, + 2741: 0x5F43, + 2742: 0x5F44, + 2743: 0x5F45, + 2744: 0x5F46, + 2745: 0x5F47, + 2746: 0x5F48, + 2747: 0x5F49, + 2748: 0x5F4A, + 2749: 0x5F4B, + 2750: 0x5F4C, + 2751: 0x5F4D, + 2752: 0x5F4E, + 2753: 0x5F4F, + 2754: 0x5F51, + 2755: 0x5F54, + 2756: 0x5F59, + 2757: 0x5F5A, + 2758: 0x5F5B, + 2759: 0x5F5C, + 2760: 0x5F5E, + 2761: 0x5F5F, + 2762: 0x5F60, + 2763: 0x5F63, + 2764: 0x5F65, + 2765: 0x5F67, + 2766: 0x5F68, + 2767: 0x5F6B, + 2768: 0x5F6E, + 2769: 0x5F6F, + 2770: 0x5F72, + 2771: 0x5F74, + 2772: 0x5F75, + 2773: 0x5F76, + 2774: 0x5F78, + 2775: 0x5F7A, + 2776: 0x5F7D, + 2777: 0x5F7E, + 2778: 0x5F7F, + 2779: 0x5F83, + 2780: 0x5F86, + 2781: 0x5F8D, + 2782: 0x5F8E, + 2783: 0x5F8F, + 2784: 0x5F91, + 2785: 0x5F93, + 2786: 0x5F94, + 2787: 0x5F96, + 2788: 0x5F9A, + 2789: 0x5F9B, + 2790: 0x5F9D, + 2791: 0x5F9E, + 2792: 0x5F9F, + 2793: 0x5FA0, + 2794: 0x5FA2, + 2795: 0x5FA3, + 2796: 0x5FA4, + 2797: 0x5FA5, + 2798: 0x5FA6, + 2799: 0x5FA7, + 2800: 0x5FA9, + 2801: 0x5FAB, + 2802: 0x5FAC, + 2803: 0x5FAF, + 2804: 0x5FB0, + 2805: 0x5FB1, + 2806: 0x5FB2, + 2807: 0x5FB3, + 2808: 0x5FB4, + 2809: 0x5FB6, + 2810: 0x5FB8, + 2811: 0x5FB9, + 2812: 0x5FBA, + 2813: 0x5FBB, + 2814: 0x5FBE, + 2815: 0x5FBF, + 2816: 0x5FC0, + 2817: 0x5FC1, + 2818: 0x5FC2, + 2819: 0x5FC7, + 2820: 0x5FC8, + 2821: 0x5FCA, + 2822: 0x5FCB, + 2823: 0x5FCE, + 2824: 0x5FD3, + 2825: 0x5FD4, + 2826: 0x5FD5, + 2827: 0x5FDA, + 2828: 0x5FDB, + 2829: 0x5FDC, + 2830: 0x5FDE, + 2831: 0x5FDF, + 2832: 0x5FE2, + 2833: 0x5FE3, + 2834: 0x5FE5, + 2835: 0x5FE6, + 2836: 0x5FE8, + 2837: 0x5FE9, + 2838: 0x5FEC, + 2839: 0x5FEF, + 2840: 0x5FF0, + 2841: 0x5FF2, + 2842: 0x5FF3, + 2843: 0x5FF4, + 2844: 0x5FF6, + 2845: 0x5FF7, + 2846: 0x5FF9, + 2847: 0x5FFA, + 2848: 0x5FFC, + 2849: 0x6007, + 2850: 0x6008, + 2851: 0x6009, + 2852: 0x600B, + 2853: 0x600C, + 2854: 0x6010, + 2855: 0x6011, + 2856: 0x6013, + 2857: 0x6017, + 2858: 0x6018, + 2859: 0x601A, + 2860: 0x601E, + 2861: 0x601F, + 2862: 0x6022, + 2863: 0x6023, + 2864: 0x6024, + 2865: 0x602C, + 2866: 0x602D, + 2867: 0x602E, + 2868: 0x6030, + 2869: 0x6031, + 2870: 0x6032, + 2871: 0x6033, + 2872: 0x6034, + 2873: 0x6036, + 2874: 0x6037, + 2875: 0x6038, + 2876: 0x6039, + 2877: 0x603A, + 2878: 0x603D, + 2879: 0x603E, + 2880: 0x6040, + 2881: 0x6044, + 2882: 0x6045, + 2883: 0x6046, + 2884: 0x6047, + 2885: 0x6048, + 2886: 0x6049, + 2887: 0x604A, + 2888: 0x604C, + 2889: 0x604E, + 2890: 0x604F, + 2891: 0x6051, + 2892: 0x6053, + 2893: 0x6054, + 2894: 0x6056, + 2895: 0x6057, + 2896: 0x6058, + 2897: 0x605B, + 2898: 0x605C, + 2899: 0x605E, + 2900: 0x605F, + 2901: 0x6060, + 2902: 0x6061, + 2903: 0x6065, + 2904: 0x6066, + 2905: 0x606E, + 2906: 0x6071, + 2907: 0x6072, + 2908: 0x6074, + 2909: 0x6075, + 2910: 0x6077, + 2911: 0x607E, + 2912: 0x6080, + 2913: 0x6081, + 2914: 0x6082, + 2915: 0x6085, + 2916: 0x6086, + 2917: 0x6087, + 2918: 0x6088, + 2919: 0x608A, + 2920: 0x608B, + 2921: 0x608E, + 2922: 0x608F, + 2923: 0x6090, + 2924: 0x6091, + 2925: 0x6093, + 2926: 0x6095, + 2927: 0x6097, + 2928: 0x6098, + 2929: 0x6099, + 2930: 0x609C, + 2931: 0x609E, + 2932: 0x60A1, + 2933: 0x60A2, + 2934: 0x60A4, + 2935: 0x60A5, + 2936: 0x60A7, + 2937: 0x60A9, + 2938: 0x60AA, + 2939: 0x60AE, + 2940: 0x60B0, + 2941: 0x60B3, + 2942: 0x60B5, + 2943: 0x60B6, + 2944: 0x60B7, + 2945: 0x60B9, + 2946: 0x60BA, + 2947: 0x60BD, + 2948: 0x60BE, + 2949: 0x60BF, + 2950: 0x60C0, + 2951: 0x60C1, + 2952: 0x60C2, + 2953: 0x60C3, + 2954: 0x60C4, + 2955: 0x60C7, + 2956: 0x60C8, + 2957: 0x60C9, + 2958: 0x60CC, + 2959: 0x60CD, + 2960: 0x60CE, + 2961: 0x60CF, + 2962: 0x60D0, + 2963: 0x60D2, + 2964: 0x60D3, + 2965: 0x60D4, + 2966: 0x60D6, + 2967: 0x60D7, + 2968: 0x60D9, + 2969: 0x60DB, + 2970: 0x60DE, + 2971: 0x60E1, + 2972: 0x60E2, + 2973: 0x60E3, + 2974: 0x60E4, + 2975: 0x60E5, + 2976: 0x60EA, + 2977: 0x60F1, + 2978: 0x60F2, + 2979: 0x60F5, + 2980: 0x60F7, + 2981: 0x60F8, + 2982: 0x60FB, + 2983: 0x60FC, + 2984: 0x60FD, + 2985: 0x60FE, + 2986: 0x60FF, + 2987: 0x6102, + 2988: 0x6103, + 2989: 0x6104, + 2990: 0x6105, + 2991: 0x6107, + 2992: 0x610A, + 2993: 0x610B, + 2994: 0x610C, + 2995: 0x6110, + 2996: 0x6111, + 2997: 0x6112, + 2998: 0x6113, + 2999: 0x6114, + 3000: 0x6116, + 3001: 0x6117, + 3002: 0x6118, + 3003: 0x6119, + 3004: 0x611B, + 3005: 0x611C, + 3006: 0x611D, + 3007: 0x611E, + 3008: 0x6121, + 3009: 0x6122, + 3010: 0x6125, + 3011: 0x6128, + 3012: 0x6129, + 3013: 0x612A, + 3014: 0x612C, + 3015: 0x612D, + 3016: 0x612E, + 3017: 0x612F, + 3018: 0x6130, + 3019: 0x6131, + 3020: 0x6132, + 3021: 0x6133, + 3022: 0x6134, + 3023: 0x6135, + 3024: 0x6136, + 3025: 0x6137, + 3026: 0x6138, + 3027: 0x6139, + 3028: 0x613A, + 3029: 0x613B, + 3030: 0x613C, + 3031: 0x613D, + 3032: 0x613E, + 3033: 0x6140, + 3034: 0x6141, + 3035: 0x6142, + 3036: 0x6143, + 3037: 0x6144, + 3038: 0x6145, + 3039: 0x6146, + 3040: 0x6147, + 3041: 0x6149, + 3042: 0x614B, + 3043: 0x614D, + 3044: 0x614F, + 3045: 0x6150, + 3046: 0x6152, + 3047: 0x6153, + 3048: 0x6154, + 3049: 0x6156, + 3050: 0x6157, + 3051: 0x6158, + 3052: 0x6159, + 3053: 0x615A, + 3054: 0x615B, + 3055: 0x615C, + 3056: 0x615E, + 3057: 0x615F, + 3058: 0x6160, + 3059: 0x6161, + 3060: 0x6163, + 3061: 0x6164, + 3062: 0x6165, + 3063: 0x6166, + 3064: 0x6169, + 3065: 0x616A, + 3066: 0x616B, + 3067: 0x616C, + 3068: 0x616D, + 3069: 0x616E, + 3070: 0x616F, + 3071: 0x6171, + 3072: 0x6172, + 3073: 0x6173, + 3074: 0x6174, + 3075: 0x6176, + 3076: 0x6178, + 3077: 0x6179, + 3078: 0x617A, + 3079: 0x617B, + 3080: 0x617C, + 3081: 0x617D, + 3082: 0x617E, + 3083: 0x617F, + 3084: 0x6180, + 3085: 0x6181, + 3086: 0x6182, + 3087: 0x6183, + 3088: 0x6184, + 3089: 0x6185, + 3090: 0x6186, + 3091: 0x6187, + 3092: 0x6188, + 3093: 0x6189, + 3094: 0x618A, + 3095: 0x618C, + 3096: 0x618D, + 3097: 0x618F, + 3098: 0x6190, + 3099: 0x6191, + 3100: 0x6192, + 3101: 0x6193, + 3102: 0x6195, + 3103: 0x6196, + 3104: 0x6197, + 3105: 0x6198, + 3106: 0x6199, + 3107: 0x619A, + 3108: 0x619B, + 3109: 0x619C, + 3110: 0x619E, + 3111: 0x619F, + 3112: 0x61A0, + 3113: 0x61A1, + 3114: 0x61A2, + 3115: 0x61A3, + 3116: 0x61A4, + 3117: 0x61A5, + 3118: 0x61A6, + 3119: 0x61AA, + 3120: 0x61AB, + 3121: 0x61AD, + 3122: 0x61AE, + 3123: 0x61AF, + 3124: 0x61B0, + 3125: 0x61B1, + 3126: 0x61B2, + 3127: 0x61B3, + 3128: 0x61B4, + 3129: 0x61B5, + 3130: 0x61B6, + 3131: 0x61B8, + 3132: 0x61B9, + 3133: 0x61BA, + 3134: 0x61BB, + 3135: 0x61BC, + 3136: 0x61BD, + 3137: 0x61BF, + 3138: 0x61C0, + 3139: 0x61C1, + 3140: 0x61C3, + 3141: 0x61C4, + 3142: 0x61C5, + 3143: 0x61C6, + 3144: 0x61C7, + 3145: 0x61C9, + 3146: 0x61CC, + 3147: 0x61CD, + 3148: 0x61CE, + 3149: 0x61CF, + 3150: 0x61D0, + 3151: 0x61D3, + 3152: 0x61D5, + 3153: 0x61D6, + 3154: 0x61D7, + 3155: 0x61D8, + 3156: 0x61D9, + 3157: 0x61DA, + 3158: 0x61DB, + 3159: 0x61DC, + 3160: 0x61DD, + 3161: 0x61DE, + 3162: 0x61DF, + 3163: 0x61E0, + 3164: 0x61E1, + 3165: 0x61E2, + 3166: 0x61E3, + 3167: 0x61E4, + 3168: 0x61E5, + 3169: 0x61E7, + 3170: 0x61E8, + 3171: 0x61E9, + 3172: 0x61EA, + 3173: 0x61EB, + 3174: 0x61EC, + 3175: 0x61ED, + 3176: 0x61EE, + 3177: 0x61EF, + 3178: 0x61F0, + 3179: 0x61F1, + 3180: 0x61F2, + 3181: 0x61F3, + 3182: 0x61F4, + 3183: 0x61F6, + 3184: 0x61F7, + 3185: 0x61F8, + 3186: 0x61F9, + 3187: 0x61FA, + 3188: 0x61FB, + 3189: 0x61FC, + 3190: 0x61FD, + 3191: 0x61FE, + 3192: 0x6200, + 3193: 0x6201, + 3194: 0x6202, + 3195: 0x6203, + 3196: 0x6204, + 3197: 0x6205, + 3198: 0x6207, + 3199: 0x6209, + 3200: 0x6213, + 3201: 0x6214, + 3202: 0x6219, + 3203: 0x621C, + 3204: 0x621D, + 3205: 0x621E, + 3206: 0x6220, + 3207: 0x6223, + 3208: 0x6226, + 3209: 0x6227, + 3210: 0x6228, + 3211: 0x6229, + 3212: 0x622B, + 3213: 0x622D, + 3214: 0x622F, + 3215: 0x6230, + 3216: 0x6231, + 3217: 0x6232, + 3218: 0x6235, + 3219: 0x6236, + 3220: 0x6238, + 3221: 0x6239, + 3222: 0x623A, + 3223: 0x623B, + 3224: 0x623C, + 3225: 0x6242, + 3226: 0x6244, + 3227: 0x6245, + 3228: 0x6246, + 3229: 0x624A, + 3230: 0x624F, + 3231: 0x6250, + 3232: 0x6255, + 3233: 0x6256, + 3234: 0x6257, + 3235: 0x6259, + 3236: 0x625A, + 3237: 0x625C, + 3238: 0x625D, + 3239: 0x625E, + 3240: 0x625F, + 3241: 0x6260, + 3242: 0x6261, + 3243: 0x6262, + 3244: 0x6264, + 3245: 0x6265, + 3246: 0x6268, + 3247: 0x6271, + 3248: 0x6272, + 3249: 0x6274, + 3250: 0x6275, + 3251: 0x6277, + 3252: 0x6278, + 3253: 0x627A, + 3254: 0x627B, + 3255: 0x627D, + 3256: 0x6281, + 3257: 0x6282, + 3258: 0x6283, + 3259: 0x6285, + 3260: 0x6286, + 3261: 0x6287, + 3262: 0x6288, + 3263: 0x628B, + 3264: 0x628C, + 3265: 0x628D, + 3266: 0x628E, + 3267: 0x628F, + 3268: 0x6290, + 3269: 0x6294, + 3270: 0x6299, + 3271: 0x629C, + 3272: 0x629D, + 3273: 0x629E, + 3274: 0x62A3, + 3275: 0x62A6, + 3276: 0x62A7, + 3277: 0x62A9, + 3278: 0x62AA, + 3279: 0x62AD, + 3280: 0x62AE, + 3281: 0x62AF, + 3282: 0x62B0, + 3283: 0x62B2, + 3284: 0x62B3, + 3285: 0x62B4, + 3286: 0x62B6, + 3287: 0x62B7, + 3288: 0x62B8, + 3289: 0x62BA, + 3290: 0x62BE, + 3291: 0x62C0, + 3292: 0x62C1, + 3293: 0x62C3, + 3294: 0x62CB, + 3295: 0x62CF, + 3296: 0x62D1, + 3297: 0x62D5, + 3298: 0x62DD, + 3299: 0x62DE, + 3300: 0x62E0, + 3301: 0x62E1, + 3302: 0x62E4, + 3303: 0x62EA, + 3304: 0x62EB, + 3305: 0x62F0, + 3306: 0x62F2, + 3307: 0x62F5, + 3308: 0x62F8, + 3309: 0x62F9, + 3310: 0x62FA, + 3311: 0x62FB, + 3312: 0x6300, + 3313: 0x6303, + 3314: 0x6304, + 3315: 0x6305, + 3316: 0x6306, + 3317: 0x630A, + 3318: 0x630B, + 3319: 0x630C, + 3320: 0x630D, + 3321: 0x630F, + 3322: 0x6310, + 3323: 0x6312, + 3324: 0x6313, + 3325: 0x6314, + 3326: 0x6315, + 3327: 0x6317, + 3328: 0x6318, + 3329: 0x6319, + 3330: 0x631C, + 3331: 0x6326, + 3332: 0x6327, + 3333: 0x6329, + 3334: 0x632C, + 3335: 0x632D, + 3336: 0x632E, + 3337: 0x6330, + 3338: 0x6331, + 3339: 0x6333, + 3340: 0x6334, + 3341: 0x6335, + 3342: 0x6336, + 3343: 0x6337, + 3344: 0x6338, + 3345: 0x633B, + 3346: 0x633C, + 3347: 0x633E, + 3348: 0x633F, + 3349: 0x6340, + 3350: 0x6341, + 3351: 0x6344, + 3352: 0x6347, + 3353: 0x6348, + 3354: 0x634A, + 3355: 0x6351, + 3356: 0x6352, + 3357: 0x6353, + 3358: 0x6354, + 3359: 0x6356, + 3360: 0x6357, + 3361: 0x6358, + 3362: 0x6359, + 3363: 0x635A, + 3364: 0x635B, + 3365: 0x635C, + 3366: 0x635D, + 3367: 0x6360, + 3368: 0x6364, + 3369: 0x6365, + 3370: 0x6366, + 3371: 0x6368, + 3372: 0x636A, + 3373: 0x636B, + 3374: 0x636C, + 3375: 0x636F, + 3376: 0x6370, + 3377: 0x6372, + 3378: 0x6373, + 3379: 0x6374, + 3380: 0x6375, + 3381: 0x6378, + 3382: 0x6379, + 3383: 0x637C, + 3384: 0x637D, + 3385: 0x637E, + 3386: 0x637F, + 3387: 0x6381, + 3388: 0x6383, + 3389: 0x6384, + 3390: 0x6385, + 3391: 0x6386, + 3392: 0x638B, + 3393: 0x638D, + 3394: 0x6391, + 3395: 0x6393, + 3396: 0x6394, + 3397: 0x6395, + 3398: 0x6397, + 3399: 0x6399, + 3400: 0x639A, + 3401: 0x639B, + 3402: 0x639C, + 3403: 0x639D, + 3404: 0x639E, + 3405: 0x639F, + 3406: 0x63A1, + 3407: 0x63A4, + 3408: 0x63A6, + 3409: 0x63AB, + 3410: 0x63AF, + 3411: 0x63B1, + 3412: 0x63B2, + 3413: 0x63B5, + 3414: 0x63B6, + 3415: 0x63B9, + 3416: 0x63BB, + 3417: 0x63BD, + 3418: 0x63BF, + 3419: 0x63C0, + 3420: 0x63C1, + 3421: 0x63C2, + 3422: 0x63C3, + 3423: 0x63C5, + 3424: 0x63C7, + 3425: 0x63C8, + 3426: 0x63CA, + 3427: 0x63CB, + 3428: 0x63CC, + 3429: 0x63D1, + 3430: 0x63D3, + 3431: 0x63D4, + 3432: 0x63D5, + 3433: 0x63D7, + 3434: 0x63D8, + 3435: 0x63D9, + 3436: 0x63DA, + 3437: 0x63DB, + 3438: 0x63DC, + 3439: 0x63DD, + 3440: 0x63DF, + 3441: 0x63E2, + 3442: 0x63E4, + 3443: 0x63E5, + 3444: 0x63E6, + 3445: 0x63E7, + 3446: 0x63E8, + 3447: 0x63EB, + 3448: 0x63EC, + 3449: 0x63EE, + 3450: 0x63EF, + 3451: 0x63F0, + 3452: 0x63F1, + 3453: 0x63F3, + 3454: 0x63F5, + 3455: 0x63F7, + 3456: 0x63F9, + 3457: 0x63FA, + 3458: 0x63FB, + 3459: 0x63FC, + 3460: 0x63FE, + 3461: 0x6403, + 3462: 0x6404, + 3463: 0x6406, + 3464: 0x6407, + 3465: 0x6408, + 3466: 0x6409, + 3467: 0x640A, + 3468: 0x640D, + 3469: 0x640E, + 3470: 0x6411, + 3471: 0x6412, + 3472: 0x6415, + 3473: 0x6416, + 3474: 0x6417, + 3475: 0x6418, + 3476: 0x6419, + 3477: 0x641A, + 3478: 0x641D, + 3479: 0x641F, + 3480: 0x6422, + 3481: 0x6423, + 3482: 0x6424, + 3483: 0x6425, + 3484: 0x6427, + 3485: 0x6428, + 3486: 0x6429, + 3487: 0x642B, + 3488: 0x642E, + 3489: 0x642F, + 3490: 0x6430, + 3491: 0x6431, + 3492: 0x6432, + 3493: 0x6433, + 3494: 0x6435, + 3495: 0x6436, + 3496: 0x6437, + 3497: 0x6438, + 3498: 0x6439, + 3499: 0x643B, + 3500: 0x643C, + 3501: 0x643E, + 3502: 0x6440, + 3503: 0x6442, + 3504: 0x6443, + 3505: 0x6449, + 3506: 0x644B, + 3507: 0x644C, + 3508: 0x644D, + 3509: 0x644E, + 3510: 0x644F, + 3511: 0x6450, + 3512: 0x6451, + 3513: 0x6453, + 3514: 0x6455, + 3515: 0x6456, + 3516: 0x6457, + 3517: 0x6459, + 3518: 0x645A, + 3519: 0x645B, + 3520: 0x645C, + 3521: 0x645D, + 3522: 0x645F, + 3523: 0x6460, + 3524: 0x6461, + 3525: 0x6462, + 3526: 0x6463, + 3527: 0x6464, + 3528: 0x6465, + 3529: 0x6466, + 3530: 0x6468, + 3531: 0x646A, + 3532: 0x646B, + 3533: 0x646C, + 3534: 0x646E, + 3535: 0x646F, + 3536: 0x6470, + 3537: 0x6471, + 3538: 0x6472, + 3539: 0x6473, + 3540: 0x6474, + 3541: 0x6475, + 3542: 0x6476, + 3543: 0x6477, + 3544: 0x647B, + 3545: 0x647C, + 3546: 0x647D, + 3547: 0x647E, + 3548: 0x647F, + 3549: 0x6480, + 3550: 0x6481, + 3551: 0x6483, + 3552: 0x6486, + 3553: 0x6488, + 3554: 0x6489, + 3555: 0x648A, + 3556: 0x648B, + 3557: 0x648C, + 3558: 0x648D, + 3559: 0x648E, + 3560: 0x648F, + 3561: 0x6490, + 3562: 0x6493, + 3563: 0x6494, + 3564: 0x6497, + 3565: 0x6498, + 3566: 0x649A, + 3567: 0x649B, + 3568: 0x649C, + 3569: 0x649D, + 3570: 0x649F, + 3571: 0x64A0, + 3572: 0x64A1, + 3573: 0x64A2, + 3574: 0x64A3, + 3575: 0x64A5, + 3576: 0x64A6, + 3577: 0x64A7, + 3578: 0x64A8, + 3579: 0x64AA, + 3580: 0x64AB, + 3581: 0x64AF, + 3582: 0x64B1, + 3583: 0x64B2, + 3584: 0x64B3, + 3585: 0x64B4, + 3586: 0x64B6, + 3587: 0x64B9, + 3588: 0x64BB, + 3589: 0x64BD, + 3590: 0x64BE, + 3591: 0x64BF, + 3592: 0x64C1, + 3593: 0x64C3, + 3594: 0x64C4, + 3595: 0x64C6, + 3596: 0x64C7, + 3597: 0x64C8, + 3598: 0x64C9, + 3599: 0x64CA, + 3600: 0x64CB, + 3601: 0x64CC, + 3602: 0x64CF, + 3603: 0x64D1, + 3604: 0x64D3, + 3605: 0x64D4, + 3606: 0x64D5, + 3607: 0x64D6, + 3608: 0x64D9, + 3609: 0x64DA, + 3610: 0x64DB, + 3611: 0x64DC, + 3612: 0x64DD, + 3613: 0x64DF, + 3614: 0x64E0, + 3615: 0x64E1, + 3616: 0x64E3, + 3617: 0x64E5, + 3618: 0x64E7, + 3619: 0x64E8, + 3620: 0x64E9, + 3621: 0x64EA, + 3622: 0x64EB, + 3623: 0x64EC, + 3624: 0x64ED, + 3625: 0x64EE, + 3626: 0x64EF, + 3627: 0x64F0, + 3628: 0x64F1, + 3629: 0x64F2, + 3630: 0x64F3, + 3631: 0x64F4, + 3632: 0x64F5, + 3633: 0x64F6, + 3634: 0x64F7, + 3635: 0x64F8, + 3636: 0x64F9, + 3637: 0x64FA, + 3638: 0x64FB, + 3639: 0x64FC, + 3640: 0x64FD, + 3641: 0x64FE, + 3642: 0x64FF, + 3643: 0x6501, + 3644: 0x6502, + 3645: 0x6503, + 3646: 0x6504, + 3647: 0x6505, + 3648: 0x6506, + 3649: 0x6507, + 3650: 0x6508, + 3651: 0x650A, + 3652: 0x650B, + 3653: 0x650C, + 3654: 0x650D, + 3655: 0x650E, + 3656: 0x650F, + 3657: 0x6510, + 3658: 0x6511, + 3659: 0x6513, + 3660: 0x6514, + 3661: 0x6515, + 3662: 0x6516, + 3663: 0x6517, + 3664: 0x6519, + 3665: 0x651A, + 3666: 0x651B, + 3667: 0x651C, + 3668: 0x651D, + 3669: 0x651E, + 3670: 0x651F, + 3671: 0x6520, + 3672: 0x6521, + 3673: 0x6522, + 3674: 0x6523, + 3675: 0x6524, + 3676: 0x6526, + 3677: 0x6527, + 3678: 0x6528, + 3679: 0x6529, + 3680: 0x652A, + 3681: 0x652C, + 3682: 0x652D, + 3683: 0x6530, + 3684: 0x6531, + 3685: 0x6532, + 3686: 0x6533, + 3687: 0x6537, + 3688: 0x653A, + 3689: 0x653C, + 3690: 0x653D, + 3691: 0x6540, + 3692: 0x6541, + 3693: 0x6542, + 3694: 0x6543, + 3695: 0x6544, + 3696: 0x6546, + 3697: 0x6547, + 3698: 0x654A, + 3699: 0x654B, + 3700: 0x654D, + 3701: 0x654E, + 3702: 0x6550, + 3703: 0x6552, + 3704: 0x6553, + 3705: 0x6554, + 3706: 0x6557, + 3707: 0x6558, + 3708: 0x655A, + 3709: 0x655C, + 3710: 0x655F, + 3711: 0x6560, + 3712: 0x6561, + 3713: 0x6564, + 3714: 0x6565, + 3715: 0x6567, + 3716: 0x6568, + 3717: 0x6569, + 3718: 0x656A, + 3719: 0x656D, + 3720: 0x656E, + 3721: 0x656F, + 3722: 0x6571, + 3723: 0x6573, + 3724: 0x6575, + 3725: 0x6576, + 3726: 0x6578, + 3727: 0x6579, + 3728: 0x657A, + 3729: 0x657B, + 3730: 0x657C, + 3731: 0x657D, + 3732: 0x657E, + 3733: 0x657F, + 3734: 0x6580, + 3735: 0x6581, + 3736: 0x6582, + 3737: 0x6583, + 3738: 0x6584, + 3739: 0x6585, + 3740: 0x6586, + 3741: 0x6588, + 3742: 0x6589, + 3743: 0x658A, + 3744: 0x658D, + 3745: 0x658E, + 3746: 0x658F, + 3747: 0x6592, + 3748: 0x6594, + 3749: 0x6595, + 3750: 0x6596, + 3751: 0x6598, + 3752: 0x659A, + 3753: 0x659D, + 3754: 0x659E, + 3755: 0x65A0, + 3756: 0x65A2, + 3757: 0x65A3, + 3758: 0x65A6, + 3759: 0x65A8, + 3760: 0x65AA, + 3761: 0x65AC, + 3762: 0x65AE, + 3763: 0x65B1, + 3764: 0x65B2, + 3765: 0x65B3, + 3766: 0x65B4, + 3767: 0x65B5, + 3768: 0x65B6, + 3769: 0x65B7, + 3770: 0x65B8, + 3771: 0x65BA, + 3772: 0x65BB, + 3773: 0x65BE, + 3774: 0x65BF, + 3775: 0x65C0, + 3776: 0x65C2, + 3777: 0x65C7, + 3778: 0x65C8, + 3779: 0x65C9, + 3780: 0x65CA, + 3781: 0x65CD, + 3782: 0x65D0, + 3783: 0x65D1, + 3784: 0x65D3, + 3785: 0x65D4, + 3786: 0x65D5, + 3787: 0x65D8, + 3788: 0x65D9, + 3789: 0x65DA, + 3790: 0x65DB, + 3791: 0x65DC, + 3792: 0x65DD, + 3793: 0x65DE, + 3794: 0x65DF, + 3795: 0x65E1, + 3796: 0x65E3, + 3797: 0x65E4, + 3798: 0x65EA, + 3799: 0x65EB, + 3800: 0x65F2, + 3801: 0x65F3, + 3802: 0x65F4, + 3803: 0x65F5, + 3804: 0x65F8, + 3805: 0x65F9, + 3806: 0x65FB, + 3807: 0x65FC, + 3808: 0x65FD, + 3809: 0x65FE, + 3810: 0x65FF, + 3811: 0x6601, + 3812: 0x6604, + 3813: 0x6605, + 3814: 0x6607, + 3815: 0x6608, + 3816: 0x6609, + 3817: 0x660B, + 3818: 0x660D, + 3819: 0x6610, + 3820: 0x6611, + 3821: 0x6612, + 3822: 0x6616, + 3823: 0x6617, + 3824: 0x6618, + 3825: 0x661A, + 3826: 0x661B, + 3827: 0x661C, + 3828: 0x661E, + 3829: 0x6621, + 3830: 0x6622, + 3831: 0x6623, + 3832: 0x6624, + 3833: 0x6626, + 3834: 0x6629, + 3835: 0x662A, + 3836: 0x662B, + 3837: 0x662C, + 3838: 0x662E, + 3839: 0x6630, + 3840: 0x6632, + 3841: 0x6633, + 3842: 0x6637, + 3843: 0x6638, + 3844: 0x6639, + 3845: 0x663A, + 3846: 0x663B, + 3847: 0x663D, + 3848: 0x663F, + 3849: 0x6640, + 3850: 0x6642, + 3851: 0x6644, + 3852: 0x6645, + 3853: 0x6646, + 3854: 0x6647, + 3855: 0x6648, + 3856: 0x6649, + 3857: 0x664A, + 3858: 0x664D, + 3859: 0x664E, + 3860: 0x6650, + 3861: 0x6651, + 3862: 0x6658, + 3863: 0x6659, + 3864: 0x665B, + 3865: 0x665C, + 3866: 0x665D, + 3867: 0x665E, + 3868: 0x6660, + 3869: 0x6662, + 3870: 0x6663, + 3871: 0x6665, + 3872: 0x6667, + 3873: 0x6669, + 3874: 0x666A, + 3875: 0x666B, + 3876: 0x666C, + 3877: 0x666D, + 3878: 0x6671, + 3879: 0x6672, + 3880: 0x6673, + 3881: 0x6675, + 3882: 0x6678, + 3883: 0x6679, + 3884: 0x667B, + 3885: 0x667C, + 3886: 0x667D, + 3887: 0x667F, + 3888: 0x6680, + 3889: 0x6681, + 3890: 0x6683, + 3891: 0x6685, + 3892: 0x6686, + 3893: 0x6688, + 3894: 0x6689, + 3895: 0x668A, + 3896: 0x668B, + 3897: 0x668D, + 3898: 0x668E, + 3899: 0x668F, + 3900: 0x6690, + 3901: 0x6692, + 3902: 0x6693, + 3903: 0x6694, + 3904: 0x6695, + 3905: 0x6698, + 3906: 0x6699, + 3907: 0x669A, + 3908: 0x669B, + 3909: 0x669C, + 3910: 0x669E, + 3911: 0x669F, + 3912: 0x66A0, + 3913: 0x66A1, + 3914: 0x66A2, + 3915: 0x66A3, + 3916: 0x66A4, + 3917: 0x66A5, + 3918: 0x66A6, + 3919: 0x66A9, + 3920: 0x66AA, + 3921: 0x66AB, + 3922: 0x66AC, + 3923: 0x66AD, + 3924: 0x66AF, + 3925: 0x66B0, + 3926: 0x66B1, + 3927: 0x66B2, + 3928: 0x66B3, + 3929: 0x66B5, + 3930: 0x66B6, + 3931: 0x66B7, + 3932: 0x66B8, + 3933: 0x66BA, + 3934: 0x66BB, + 3935: 0x66BC, + 3936: 0x66BD, + 3937: 0x66BF, + 3938: 0x66C0, + 3939: 0x66C1, + 3940: 0x66C2, + 3941: 0x66C3, + 3942: 0x66C4, + 3943: 0x66C5, + 3944: 0x66C6, + 3945: 0x66C7, + 3946: 0x66C8, + 3947: 0x66C9, + 3948: 0x66CA, + 3949: 0x66CB, + 3950: 0x66CC, + 3951: 0x66CD, + 3952: 0x66CE, + 3953: 0x66CF, + 3954: 0x66D0, + 3955: 0x66D1, + 3956: 0x66D2, + 3957: 0x66D3, + 3958: 0x66D4, + 3959: 0x66D5, + 3960: 0x66D6, + 3961: 0x66D7, + 3962: 0x66D8, + 3963: 0x66DA, + 3964: 0x66DE, + 3965: 0x66DF, + 3966: 0x66E0, + 3967: 0x66E1, + 3968: 0x66E2, + 3969: 0x66E3, + 3970: 0x66E4, + 3971: 0x66E5, + 3972: 0x66E7, + 3973: 0x66E8, + 3974: 0x66EA, + 3975: 0x66EB, + 3976: 0x66EC, + 3977: 0x66ED, + 3978: 0x66EE, + 3979: 0x66EF, + 3980: 0x66F1, + 3981: 0x66F5, + 3982: 0x66F6, + 3983: 0x66F8, + 3984: 0x66FA, + 3985: 0x66FB, + 3986: 0x66FD, + 3987: 0x6701, + 3988: 0x6702, + 3989: 0x6703, + 3990: 0x6704, + 3991: 0x6705, + 3992: 0x6706, + 3993: 0x6707, + 3994: 0x670C, + 3995: 0x670E, + 3996: 0x670F, + 3997: 0x6711, + 3998: 0x6712, + 3999: 0x6713, + 4000: 0x6716, + 4001: 0x6718, + 4002: 0x6719, + 4003: 0x671A, + 4004: 0x671C, + 4005: 0x671E, + 4006: 0x6720, + 4007: 0x6721, + 4008: 0x6722, + 4009: 0x6723, + 4010: 0x6724, + 4011: 0x6725, + 4012: 0x6727, + 4013: 0x6729, + 4014: 0x672E, + 4015: 0x6730, + 4016: 0x6732, + 4017: 0x6733, + 4018: 0x6736, + 4019: 0x6737, + 4020: 0x6738, + 4021: 0x6739, + 4022: 0x673B, + 4023: 0x673C, + 4024: 0x673E, + 4025: 0x673F, + 4026: 0x6741, + 4027: 0x6744, + 4028: 0x6745, + 4029: 0x6747, + 4030: 0x674A, + 4031: 0x674B, + 4032: 0x674D, + 4033: 0x6752, + 4034: 0x6754, + 4035: 0x6755, + 4036: 0x6757, + 4037: 0x6758, + 4038: 0x6759, + 4039: 0x675A, + 4040: 0x675B, + 4041: 0x675D, + 4042: 0x6762, + 4043: 0x6763, + 4044: 0x6764, + 4045: 0x6766, + 4046: 0x6767, + 4047: 0x676B, + 4048: 0x676C, + 4049: 0x676E, + 4050: 0x6771, + 4051: 0x6774, + 4052: 0x6776, + 4053: 0x6778, + 4054: 0x6779, + 4055: 0x677A, + 4056: 0x677B, + 4057: 0x677D, + 4058: 0x6780, + 4059: 0x6782, + 4060: 0x6783, + 4061: 0x6785, + 4062: 0x6786, + 4063: 0x6788, + 4064: 0x678A, + 4065: 0x678C, + 4066: 0x678D, + 4067: 0x678E, + 4068: 0x678F, + 4069: 0x6791, + 4070: 0x6792, + 4071: 0x6793, + 4072: 0x6794, + 4073: 0x6796, + 4074: 0x6799, + 4075: 0x679B, + 4076: 0x679F, + 4077: 0x67A0, + 4078: 0x67A1, + 4079: 0x67A4, + 4080: 0x67A6, + 4081: 0x67A9, + 4082: 0x67AC, + 4083: 0x67AE, + 4084: 0x67B1, + 4085: 0x67B2, + 4086: 0x67B4, + 4087: 0x67B9, + 4088: 0x67BA, + 4089: 0x67BB, + 4090: 0x67BC, + 4091: 0x67BD, + 4092: 0x67BE, + 4093: 0x67BF, + 4094: 0x67C0, + 4095: 0x67C2, + 4096: 0x67C5, + 4097: 0x67C6, + 4098: 0x67C7, + 4099: 0x67C8, + 4100: 0x67C9, + 4101: 0x67CA, + 4102: 0x67CB, + 4103: 0x67CC, + 4104: 0x67CD, + 4105: 0x67CE, + 4106: 0x67D5, + 4107: 0x67D6, + 4108: 0x67D7, + 4109: 0x67DB, + 4110: 0x67DF, + 4111: 0x67E1, + 4112: 0x67E3, + 4113: 0x67E4, + 4114: 0x67E6, + 4115: 0x67E7, + 4116: 0x67E8, + 4117: 0x67EA, + 4118: 0x67EB, + 4119: 0x67ED, + 4120: 0x67EE, + 4121: 0x67F2, + 4122: 0x67F5, + 4123: 0x67F6, + 4124: 0x67F7, + 4125: 0x67F8, + 4126: 0x67F9, + 4127: 0x67FA, + 4128: 0x67FB, + 4129: 0x67FC, + 4130: 0x67FE, + 4131: 0x6801, + 4132: 0x6802, + 4133: 0x6803, + 4134: 0x6804, + 4135: 0x6806, + 4136: 0x680D, + 4137: 0x6810, + 4138: 0x6812, + 4139: 0x6814, + 4140: 0x6815, + 4141: 0x6818, + 4142: 0x6819, + 4143: 0x681A, + 4144: 0x681B, + 4145: 0x681C, + 4146: 0x681E, + 4147: 0x681F, + 4148: 0x6820, + 4149: 0x6822, + 4150: 0x6823, + 4151: 0x6824, + 4152: 0x6825, + 4153: 0x6826, + 4154: 0x6827, + 4155: 0x6828, + 4156: 0x682B, + 4157: 0x682C, + 4158: 0x682D, + 4159: 0x682E, + 4160: 0x682F, + 4161: 0x6830, + 4162: 0x6831, + 4163: 0x6834, + 4164: 0x6835, + 4165: 0x6836, + 4166: 0x683A, + 4167: 0x683B, + 4168: 0x683F, + 4169: 0x6847, + 4170: 0x684B, + 4171: 0x684D, + 4172: 0x684F, + 4173: 0x6852, + 4174: 0x6856, + 4175: 0x6857, + 4176: 0x6858, + 4177: 0x6859, + 4178: 0x685A, + 4179: 0x685B, + 4180: 0x685C, + 4181: 0x685D, + 4182: 0x685E, + 4183: 0x685F, + 4184: 0x686A, + 4185: 0x686C, + 4186: 0x686D, + 4187: 0x686E, + 4188: 0x686F, + 4189: 0x6870, + 4190: 0x6871, + 4191: 0x6872, + 4192: 0x6873, + 4193: 0x6875, + 4194: 0x6878, + 4195: 0x6879, + 4196: 0x687A, + 4197: 0x687B, + 4198: 0x687C, + 4199: 0x687D, + 4200: 0x687E, + 4201: 0x687F, + 4202: 0x6880, + 4203: 0x6882, + 4204: 0x6884, + 4205: 0x6887, + 4206: 0x6888, + 4207: 0x6889, + 4208: 0x688A, + 4209: 0x688B, + 4210: 0x688C, + 4211: 0x688D, + 4212: 0x688E, + 4213: 0x6890, + 4214: 0x6891, + 4215: 0x6892, + 4216: 0x6894, + 4217: 0x6895, + 4218: 0x6896, + 4219: 0x6898, + 4220: 0x6899, + 4221: 0x689A, + 4222: 0x689B, + 4223: 0x689C, + 4224: 0x689D, + 4225: 0x689E, + 4226: 0x689F, + 4227: 0x68A0, + 4228: 0x68A1, + 4229: 0x68A3, + 4230: 0x68A4, + 4231: 0x68A5, + 4232: 0x68A9, + 4233: 0x68AA, + 4234: 0x68AB, + 4235: 0x68AC, + 4236: 0x68AE, + 4237: 0x68B1, + 4238: 0x68B2, + 4239: 0x68B4, + 4240: 0x68B6, + 4241: 0x68B7, + 4242: 0x68B8, + 4243: 0x68B9, + 4244: 0x68BA, + 4245: 0x68BB, + 4246: 0x68BC, + 4247: 0x68BD, + 4248: 0x68BE, + 4249: 0x68BF, + 4250: 0x68C1, + 4251: 0x68C3, + 4252: 0x68C4, + 4253: 0x68C5, + 4254: 0x68C6, + 4255: 0x68C7, + 4256: 0x68C8, + 4257: 0x68CA, + 4258: 0x68CC, + 4259: 0x68CE, + 4260: 0x68CF, + 4261: 0x68D0, + 4262: 0x68D1, + 4263: 0x68D3, + 4264: 0x68D4, + 4265: 0x68D6, + 4266: 0x68D7, + 4267: 0x68D9, + 4268: 0x68DB, + 4269: 0x68DC, + 4270: 0x68DD, + 4271: 0x68DE, + 4272: 0x68DF, + 4273: 0x68E1, + 4274: 0x68E2, + 4275: 0x68E4, + 4276: 0x68E5, + 4277: 0x68E6, + 4278: 0x68E7, + 4279: 0x68E8, + 4280: 0x68E9, + 4281: 0x68EA, + 4282: 0x68EB, + 4283: 0x68EC, + 4284: 0x68ED, + 4285: 0x68EF, + 4286: 0x68F2, + 4287: 0x68F3, + 4288: 0x68F4, + 4289: 0x68F6, + 4290: 0x68F7, + 4291: 0x68F8, + 4292: 0x68FB, + 4293: 0x68FD, + 4294: 0x68FE, + 4295: 0x68FF, + 4296: 0x6900, + 4297: 0x6902, + 4298: 0x6903, + 4299: 0x6904, + 4300: 0x6906, + 4301: 0x6907, + 4302: 0x6908, + 4303: 0x6909, + 4304: 0x690A, + 4305: 0x690C, + 4306: 0x690F, + 4307: 0x6911, + 4308: 0x6913, + 4309: 0x6914, + 4310: 0x6915, + 4311: 0x6916, + 4312: 0x6917, + 4313: 0x6918, + 4314: 0x6919, + 4315: 0x691A, + 4316: 0x691B, + 4317: 0x691C, + 4318: 0x691D, + 4319: 0x691E, + 4320: 0x6921, + 4321: 0x6922, + 4322: 0x6923, + 4323: 0x6925, + 4324: 0x6926, + 4325: 0x6927, + 4326: 0x6928, + 4327: 0x6929, + 4328: 0x692A, + 4329: 0x692B, + 4330: 0x692C, + 4331: 0x692E, + 4332: 0x692F, + 4333: 0x6931, + 4334: 0x6932, + 4335: 0x6933, + 4336: 0x6935, + 4337: 0x6936, + 4338: 0x6937, + 4339: 0x6938, + 4340: 0x693A, + 4341: 0x693B, + 4342: 0x693C, + 4343: 0x693E, + 4344: 0x6940, + 4345: 0x6941, + 4346: 0x6943, + 4347: 0x6944, + 4348: 0x6945, + 4349: 0x6946, + 4350: 0x6947, + 4351: 0x6948, + 4352: 0x6949, + 4353: 0x694A, + 4354: 0x694B, + 4355: 0x694C, + 4356: 0x694D, + 4357: 0x694E, + 4358: 0x694F, + 4359: 0x6950, + 4360: 0x6951, + 4361: 0x6952, + 4362: 0x6953, + 4363: 0x6955, + 4364: 0x6956, + 4365: 0x6958, + 4366: 0x6959, + 4367: 0x695B, + 4368: 0x695C, + 4369: 0x695F, + 4370: 0x6961, + 4371: 0x6962, + 4372: 0x6964, + 4373: 0x6965, + 4374: 0x6967, + 4375: 0x6968, + 4376: 0x6969, + 4377: 0x696A, + 4378: 0x696C, + 4379: 0x696D, + 4380: 0x696F, + 4381: 0x6970, + 4382: 0x6972, + 4383: 0x6973, + 4384: 0x6974, + 4385: 0x6975, + 4386: 0x6976, + 4387: 0x697A, + 4388: 0x697B, + 4389: 0x697D, + 4390: 0x697E, + 4391: 0x697F, + 4392: 0x6981, + 4393: 0x6983, + 4394: 0x6985, + 4395: 0x698A, + 4396: 0x698B, + 4397: 0x698C, + 4398: 0x698E, + 4399: 0x698F, + 4400: 0x6990, + 4401: 0x6991, + 4402: 0x6992, + 4403: 0x6993, + 4404: 0x6996, + 4405: 0x6997, + 4406: 0x6999, + 4407: 0x699A, + 4408: 0x699D, + 4409: 0x699E, + 4410: 0x699F, + 4411: 0x69A0, + 4412: 0x69A1, + 4413: 0x69A2, + 4414: 0x69A3, + 4415: 0x69A4, + 4416: 0x69A5, + 4417: 0x69A6, + 4418: 0x69A9, + 4419: 0x69AA, + 4420: 0x69AC, + 4421: 0x69AE, + 4422: 0x69AF, + 4423: 0x69B0, + 4424: 0x69B2, + 4425: 0x69B3, + 4426: 0x69B5, + 4427: 0x69B6, + 4428: 0x69B8, + 4429: 0x69B9, + 4430: 0x69BA, + 4431: 0x69BC, + 4432: 0x69BD, + 4433: 0x69BE, + 4434: 0x69BF, + 4435: 0x69C0, + 4436: 0x69C2, + 4437: 0x69C3, + 4438: 0x69C4, + 4439: 0x69C5, + 4440: 0x69C6, + 4441: 0x69C7, + 4442: 0x69C8, + 4443: 0x69C9, + 4444: 0x69CB, + 4445: 0x69CD, + 4446: 0x69CF, + 4447: 0x69D1, + 4448: 0x69D2, + 4449: 0x69D3, + 4450: 0x69D5, + 4451: 0x69D6, + 4452: 0x69D7, + 4453: 0x69D8, + 4454: 0x69D9, + 4455: 0x69DA, + 4456: 0x69DC, + 4457: 0x69DD, + 4458: 0x69DE, + 4459: 0x69E1, + 4460: 0x69E2, + 4461: 0x69E3, + 4462: 0x69E4, + 4463: 0x69E5, + 4464: 0x69E6, + 4465: 0x69E7, + 4466: 0x69E8, + 4467: 0x69E9, + 4468: 0x69EA, + 4469: 0x69EB, + 4470: 0x69EC, + 4471: 0x69EE, + 4472: 0x69EF, + 4473: 0x69F0, + 4474: 0x69F1, + 4475: 0x69F3, + 4476: 0x69F4, + 4477: 0x69F5, + 4478: 0x69F6, + 4479: 0x69F7, + 4480: 0x69F8, + 4481: 0x69F9, + 4482: 0x69FA, + 4483: 0x69FB, + 4484: 0x69FC, + 4485: 0x69FE, + 4486: 0x6A00, + 4487: 0x6A01, + 4488: 0x6A02, + 4489: 0x6A03, + 4490: 0x6A04, + 4491: 0x6A05, + 4492: 0x6A06, + 4493: 0x6A07, + 4494: 0x6A08, + 4495: 0x6A09, + 4496: 0x6A0B, + 4497: 0x6A0C, + 4498: 0x6A0D, + 4499: 0x6A0E, + 4500: 0x6A0F, + 4501: 0x6A10, + 4502: 0x6A11, + 4503: 0x6A12, + 4504: 0x6A13, + 4505: 0x6A14, + 4506: 0x6A15, + 4507: 0x6A16, + 4508: 0x6A19, + 4509: 0x6A1A, + 4510: 0x6A1B, + 4511: 0x6A1C, + 4512: 0x6A1D, + 4513: 0x6A1E, + 4514: 0x6A20, + 4515: 0x6A22, + 4516: 0x6A23, + 4517: 0x6A24, + 4518: 0x6A25, + 4519: 0x6A26, + 4520: 0x6A27, + 4521: 0x6A29, + 4522: 0x6A2B, + 4523: 0x6A2C, + 4524: 0x6A2D, + 4525: 0x6A2E, + 4526: 0x6A30, + 4527: 0x6A32, + 4528: 0x6A33, + 4529: 0x6A34, + 4530: 0x6A36, + 4531: 0x6A37, + 4532: 0x6A38, + 4533: 0x6A39, + 4534: 0x6A3A, + 4535: 0x6A3B, + 4536: 0x6A3C, + 4537: 0x6A3F, + 4538: 0x6A40, + 4539: 0x6A41, + 4540: 0x6A42, + 4541: 0x6A43, + 4542: 0x6A45, + 4543: 0x6A46, + 4544: 0x6A48, + 4545: 0x6A49, + 4546: 0x6A4A, + 4547: 0x6A4B, + 4548: 0x6A4C, + 4549: 0x6A4D, + 4550: 0x6A4E, + 4551: 0x6A4F, + 4552: 0x6A51, + 4553: 0x6A52, + 4554: 0x6A53, + 4555: 0x6A54, + 4556: 0x6A55, + 4557: 0x6A56, + 4558: 0x6A57, + 4559: 0x6A5A, + 4560: 0x6A5C, + 4561: 0x6A5D, + 4562: 0x6A5E, + 4563: 0x6A5F, + 4564: 0x6A60, + 4565: 0x6A62, + 4566: 0x6A63, + 4567: 0x6A64, + 4568: 0x6A66, + 4569: 0x6A67, + 4570: 0x6A68, + 4571: 0x6A69, + 4572: 0x6A6A, + 4573: 0x6A6B, + 4574: 0x6A6C, + 4575: 0x6A6D, + 4576: 0x6A6E, + 4577: 0x6A6F, + 4578: 0x6A70, + 4579: 0x6A72, + 4580: 0x6A73, + 4581: 0x6A74, + 4582: 0x6A75, + 4583: 0x6A76, + 4584: 0x6A77, + 4585: 0x6A78, + 4586: 0x6A7A, + 4587: 0x6A7B, + 4588: 0x6A7D, + 4589: 0x6A7E, + 4590: 0x6A7F, + 4591: 0x6A81, + 4592: 0x6A82, + 4593: 0x6A83, + 4594: 0x6A85, + 4595: 0x6A86, + 4596: 0x6A87, + 4597: 0x6A88, + 4598: 0x6A89, + 4599: 0x6A8A, + 4600: 0x6A8B, + 4601: 0x6A8C, + 4602: 0x6A8D, + 4603: 0x6A8F, + 4604: 0x6A92, + 4605: 0x6A93, + 4606: 0x6A94, + 4607: 0x6A95, + 4608: 0x6A96, + 4609: 0x6A98, + 4610: 0x6A99, + 4611: 0x6A9A, + 4612: 0x6A9B, + 4613: 0x6A9C, + 4614: 0x6A9D, + 4615: 0x6A9E, + 4616: 0x6A9F, + 4617: 0x6AA1, + 4618: 0x6AA2, + 4619: 0x6AA3, + 4620: 0x6AA4, + 4621: 0x6AA5, + 4622: 0x6AA6, + 4623: 0x6AA7, + 4624: 0x6AA8, + 4625: 0x6AAA, + 4626: 0x6AAD, + 4627: 0x6AAE, + 4628: 0x6AAF, + 4629: 0x6AB0, + 4630: 0x6AB1, + 4631: 0x6AB2, + 4632: 0x6AB3, + 4633: 0x6AB4, + 4634: 0x6AB5, + 4635: 0x6AB6, + 4636: 0x6AB7, + 4637: 0x6AB8, + 4638: 0x6AB9, + 4639: 0x6ABA, + 4640: 0x6ABB, + 4641: 0x6ABC, + 4642: 0x6ABD, + 4643: 0x6ABE, + 4644: 0x6ABF, + 4645: 0x6AC0, + 4646: 0x6AC1, + 4647: 0x6AC2, + 4648: 0x6AC3, + 4649: 0x6AC4, + 4650: 0x6AC5, + 4651: 0x6AC6, + 4652: 0x6AC7, + 4653: 0x6AC8, + 4654: 0x6AC9, + 4655: 0x6ACA, + 4656: 0x6ACB, + 4657: 0x6ACC, + 4658: 0x6ACD, + 4659: 0x6ACE, + 4660: 0x6ACF, + 4661: 0x6AD0, + 4662: 0x6AD1, + 4663: 0x6AD2, + 4664: 0x6AD3, + 4665: 0x6AD4, + 4666: 0x6AD5, + 4667: 0x6AD6, + 4668: 0x6AD7, + 4669: 0x6AD8, + 4670: 0x6AD9, + 4671: 0x6ADA, + 4672: 0x6ADB, + 4673: 0x6ADC, + 4674: 0x6ADD, + 4675: 0x6ADE, + 4676: 0x6ADF, + 4677: 0x6AE0, + 4678: 0x6AE1, + 4679: 0x6AE2, + 4680: 0x6AE3, + 4681: 0x6AE4, + 4682: 0x6AE5, + 4683: 0x6AE6, + 4684: 0x6AE7, + 4685: 0x6AE8, + 4686: 0x6AE9, + 4687: 0x6AEA, + 4688: 0x6AEB, + 4689: 0x6AEC, + 4690: 0x6AED, + 4691: 0x6AEE, + 4692: 0x6AEF, + 4693: 0x6AF0, + 4694: 0x6AF1, + 4695: 0x6AF2, + 4696: 0x6AF3, + 4697: 0x6AF4, + 4698: 0x6AF5, + 4699: 0x6AF6, + 4700: 0x6AF7, + 4701: 0x6AF8, + 4702: 0x6AF9, + 4703: 0x6AFA, + 4704: 0x6AFB, + 4705: 0x6AFC, + 4706: 0x6AFD, + 4707: 0x6AFE, + 4708: 0x6AFF, + 4709: 0x6B00, + 4710: 0x6B01, + 4711: 0x6B02, + 4712: 0x6B03, + 4713: 0x6B04, + 4714: 0x6B05, + 4715: 0x6B06, + 4716: 0x6B07, + 4717: 0x6B08, + 4718: 0x6B09, + 4719: 0x6B0A, + 4720: 0x6B0B, + 4721: 0x6B0C, + 4722: 0x6B0D, + 4723: 0x6B0E, + 4724: 0x6B0F, + 4725: 0x6B10, + 4726: 0x6B11, + 4727: 0x6B12, + 4728: 0x6B13, + 4729: 0x6B14, + 4730: 0x6B15, + 4731: 0x6B16, + 4732: 0x6B17, + 4733: 0x6B18, + 4734: 0x6B19, + 4735: 0x6B1A, + 4736: 0x6B1B, + 4737: 0x6B1C, + 4738: 0x6B1D, + 4739: 0x6B1E, + 4740: 0x6B1F, + 4741: 0x6B25, + 4742: 0x6B26, + 4743: 0x6B28, + 4744: 0x6B29, + 4745: 0x6B2A, + 4746: 0x6B2B, + 4747: 0x6B2C, + 4748: 0x6B2D, + 4749: 0x6B2E, + 4750: 0x6B2F, + 4751: 0x6B30, + 4752: 0x6B31, + 4753: 0x6B33, + 4754: 0x6B34, + 4755: 0x6B35, + 4756: 0x6B36, + 4757: 0x6B38, + 4758: 0x6B3B, + 4759: 0x6B3C, + 4760: 0x6B3D, + 4761: 0x6B3F, + 4762: 0x6B40, + 4763: 0x6B41, + 4764: 0x6B42, + 4765: 0x6B44, + 4766: 0x6B45, + 4767: 0x6B48, + 4768: 0x6B4A, + 4769: 0x6B4B, + 4770: 0x6B4D, + 4771: 0x6B4E, + 4772: 0x6B4F, + 4773: 0x6B50, + 4774: 0x6B51, + 4775: 0x6B52, + 4776: 0x6B53, + 4777: 0x6B54, + 4778: 0x6B55, + 4779: 0x6B56, + 4780: 0x6B57, + 4781: 0x6B58, + 4782: 0x6B5A, + 4783: 0x6B5B, + 4784: 0x6B5C, + 4785: 0x6B5D, + 4786: 0x6B5E, + 4787: 0x6B5F, + 4788: 0x6B60, + 4789: 0x6B61, + 4790: 0x6B68, + 4791: 0x6B69, + 4792: 0x6B6B, + 4793: 0x6B6C, + 4794: 0x6B6D, + 4795: 0x6B6E, + 4796: 0x6B6F, + 4797: 0x6B70, + 4798: 0x6B71, + 4799: 0x6B72, + 4800: 0x6B73, + 4801: 0x6B74, + 4802: 0x6B75, + 4803: 0x6B76, + 4804: 0x6B77, + 4805: 0x6B78, + 4806: 0x6B7A, + 4807: 0x6B7D, + 4808: 0x6B7E, + 4809: 0x6B7F, + 4810: 0x6B80, + 4811: 0x6B85, + 4812: 0x6B88, + 4813: 0x6B8C, + 4814: 0x6B8E, + 4815: 0x6B8F, + 4816: 0x6B90, + 4817: 0x6B91, + 4818: 0x6B94, + 4819: 0x6B95, + 4820: 0x6B97, + 4821: 0x6B98, + 4822: 0x6B99, + 4823: 0x6B9C, + 4824: 0x6B9D, + 4825: 0x6B9E, + 4826: 0x6B9F, + 4827: 0x6BA0, + 4828: 0x6BA2, + 4829: 0x6BA3, + 4830: 0x6BA4, + 4831: 0x6BA5, + 4832: 0x6BA6, + 4833: 0x6BA7, + 4834: 0x6BA8, + 4835: 0x6BA9, + 4836: 0x6BAB, + 4837: 0x6BAC, + 4838: 0x6BAD, + 4839: 0x6BAE, + 4840: 0x6BAF, + 4841: 0x6BB0, + 4842: 0x6BB1, + 4843: 0x6BB2, + 4844: 0x6BB6, + 4845: 0x6BB8, + 4846: 0x6BB9, + 4847: 0x6BBA, + 4848: 0x6BBB, + 4849: 0x6BBC, + 4850: 0x6BBD, + 4851: 0x6BBE, + 4852: 0x6BC0, + 4853: 0x6BC3, + 4854: 0x6BC4, + 4855: 0x6BC6, + 4856: 0x6BC7, + 4857: 0x6BC8, + 4858: 0x6BC9, + 4859: 0x6BCA, + 4860: 0x6BCC, + 4861: 0x6BCE, + 4862: 0x6BD0, + 4863: 0x6BD1, + 4864: 0x6BD8, + 4865: 0x6BDA, + 4866: 0x6BDC, + 4867: 0x6BDD, + 4868: 0x6BDE, + 4869: 0x6BDF, + 4870: 0x6BE0, + 4871: 0x6BE2, + 4872: 0x6BE3, + 4873: 0x6BE4, + 4874: 0x6BE5, + 4875: 0x6BE6, + 4876: 0x6BE7, + 4877: 0x6BE8, + 4878: 0x6BE9, + 4879: 0x6BEC, + 4880: 0x6BED, + 4881: 0x6BEE, + 4882: 0x6BF0, + 4883: 0x6BF1, + 4884: 0x6BF2, + 4885: 0x6BF4, + 4886: 0x6BF6, + 4887: 0x6BF7, + 4888: 0x6BF8, + 4889: 0x6BFA, + 4890: 0x6BFB, + 4891: 0x6BFC, + 4892: 0x6BFE, + 4893: 0x6BFF, + 4894: 0x6C00, + 4895: 0x6C01, + 4896: 0x6C02, + 4897: 0x6C03, + 4898: 0x6C04, + 4899: 0x6C08, + 4900: 0x6C09, + 4901: 0x6C0A, + 4902: 0x6C0B, + 4903: 0x6C0C, + 4904: 0x6C0E, + 4905: 0x6C12, + 4906: 0x6C17, + 4907: 0x6C1C, + 4908: 0x6C1D, + 4909: 0x6C1E, + 4910: 0x6C20, + 4911: 0x6C23, + 4912: 0x6C25, + 4913: 0x6C2B, + 4914: 0x6C2C, + 4915: 0x6C2D, + 4916: 0x6C31, + 4917: 0x6C33, + 4918: 0x6C36, + 4919: 0x6C37, + 4920: 0x6C39, + 4921: 0x6C3A, + 4922: 0x6C3B, + 4923: 0x6C3C, + 4924: 0x6C3E, + 4925: 0x6C3F, + 4926: 0x6C43, + 4927: 0x6C44, + 4928: 0x6C45, + 4929: 0x6C48, + 4930: 0x6C4B, + 4931: 0x6C4C, + 4932: 0x6C4D, + 4933: 0x6C4E, + 4934: 0x6C4F, + 4935: 0x6C51, + 4936: 0x6C52, + 4937: 0x6C53, + 4938: 0x6C56, + 4939: 0x6C58, + 4940: 0x6C59, + 4941: 0x6C5A, + 4942: 0x6C62, + 4943: 0x6C63, + 4944: 0x6C65, + 4945: 0x6C66, + 4946: 0x6C67, + 4947: 0x6C6B, + 4948: 0x6C6C, + 4949: 0x6C6D, + 4950: 0x6C6E, + 4951: 0x6C6F, + 4952: 0x6C71, + 4953: 0x6C73, + 4954: 0x6C75, + 4955: 0x6C77, + 4956: 0x6C78, + 4957: 0x6C7A, + 4958: 0x6C7B, + 4959: 0x6C7C, + 4960: 0x6C7F, + 4961: 0x6C80, + 4962: 0x6C84, + 4963: 0x6C87, + 4964: 0x6C8A, + 4965: 0x6C8B, + 4966: 0x6C8D, + 4967: 0x6C8E, + 4968: 0x6C91, + 4969: 0x6C92, + 4970: 0x6C95, + 4971: 0x6C96, + 4972: 0x6C97, + 4973: 0x6C98, + 4974: 0x6C9A, + 4975: 0x6C9C, + 4976: 0x6C9D, + 4977: 0x6C9E, + 4978: 0x6CA0, + 4979: 0x6CA2, + 4980: 0x6CA8, + 4981: 0x6CAC, + 4982: 0x6CAF, + 4983: 0x6CB0, + 4984: 0x6CB4, + 4985: 0x6CB5, + 4986: 0x6CB6, + 4987: 0x6CB7, + 4988: 0x6CBA, + 4989: 0x6CC0, + 4990: 0x6CC1, + 4991: 0x6CC2, + 4992: 0x6CC3, + 4993: 0x6CC6, + 4994: 0x6CC7, + 4995: 0x6CC8, + 4996: 0x6CCB, + 4997: 0x6CCD, + 4998: 0x6CCE, + 4999: 0x6CCF, + 5000: 0x6CD1, + 5001: 0x6CD2, + 5002: 0x6CD8, + 5003: 0x6CD9, + 5004: 0x6CDA, + 5005: 0x6CDC, + 5006: 0x6CDD, + 5007: 0x6CDF, + 5008: 0x6CE4, + 5009: 0x6CE6, + 5010: 0x6CE7, + 5011: 0x6CE9, + 5012: 0x6CEC, + 5013: 0x6CED, + 5014: 0x6CF2, + 5015: 0x6CF4, + 5016: 0x6CF9, + 5017: 0x6CFF, + 5018: 0x6D00, + 5019: 0x6D02, + 5020: 0x6D03, + 5021: 0x6D05, + 5022: 0x6D06, + 5023: 0x6D08, + 5024: 0x6D09, + 5025: 0x6D0A, + 5026: 0x6D0D, + 5027: 0x6D0F, + 5028: 0x6D10, + 5029: 0x6D11, + 5030: 0x6D13, + 5031: 0x6D14, + 5032: 0x6D15, + 5033: 0x6D16, + 5034: 0x6D18, + 5035: 0x6D1C, + 5036: 0x6D1D, + 5037: 0x6D1F, + 5038: 0x6D20, + 5039: 0x6D21, + 5040: 0x6D22, + 5041: 0x6D23, + 5042: 0x6D24, + 5043: 0x6D26, + 5044: 0x6D28, + 5045: 0x6D29, + 5046: 0x6D2C, + 5047: 0x6D2D, + 5048: 0x6D2F, + 5049: 0x6D30, + 5050: 0x6D34, + 5051: 0x6D36, + 5052: 0x6D37, + 5053: 0x6D38, + 5054: 0x6D3A, + 5055: 0x6D3F, + 5056: 0x6D40, + 5057: 0x6D42, + 5058: 0x6D44, + 5059: 0x6D49, + 5060: 0x6D4C, + 5061: 0x6D50, + 5062: 0x6D55, + 5063: 0x6D56, + 5064: 0x6D57, + 5065: 0x6D58, + 5066: 0x6D5B, + 5067: 0x6D5D, + 5068: 0x6D5F, + 5069: 0x6D61, + 5070: 0x6D62, + 5071: 0x6D64, + 5072: 0x6D65, + 5073: 0x6D67, + 5074: 0x6D68, + 5075: 0x6D6B, + 5076: 0x6D6C, + 5077: 0x6D6D, + 5078: 0x6D70, + 5079: 0x6D71, + 5080: 0x6D72, + 5081: 0x6D73, + 5082: 0x6D75, + 5083: 0x6D76, + 5084: 0x6D79, + 5085: 0x6D7A, + 5086: 0x6D7B, + 5087: 0x6D7D, + 5088: 0x6D7E, + 5089: 0x6D7F, + 5090: 0x6D80, + 5091: 0x6D81, + 5092: 0x6D83, + 5093: 0x6D84, + 5094: 0x6D86, + 5095: 0x6D87, + 5096: 0x6D8A, + 5097: 0x6D8B, + 5098: 0x6D8D, + 5099: 0x6D8F, + 5100: 0x6D90, + 5101: 0x6D92, + 5102: 0x6D96, + 5103: 0x6D97, + 5104: 0x6D98, + 5105: 0x6D99, + 5106: 0x6D9A, + 5107: 0x6D9C, + 5108: 0x6DA2, + 5109: 0x6DA5, + 5110: 0x6DAC, + 5111: 0x6DAD, + 5112: 0x6DB0, + 5113: 0x6DB1, + 5114: 0x6DB3, + 5115: 0x6DB4, + 5116: 0x6DB6, + 5117: 0x6DB7, + 5118: 0x6DB9, + 5119: 0x6DBA, + 5120: 0x6DBB, + 5121: 0x6DBC, + 5122: 0x6DBD, + 5123: 0x6DBE, + 5124: 0x6DC1, + 5125: 0x6DC2, + 5126: 0x6DC3, + 5127: 0x6DC8, + 5128: 0x6DC9, + 5129: 0x6DCA, + 5130: 0x6DCD, + 5131: 0x6DCE, + 5132: 0x6DCF, + 5133: 0x6DD0, + 5134: 0x6DD2, + 5135: 0x6DD3, + 5136: 0x6DD4, + 5137: 0x6DD5, + 5138: 0x6DD7, + 5139: 0x6DDA, + 5140: 0x6DDB, + 5141: 0x6DDC, + 5142: 0x6DDF, + 5143: 0x6DE2, + 5144: 0x6DE3, + 5145: 0x6DE5, + 5146: 0x6DE7, + 5147: 0x6DE8, + 5148: 0x6DE9, + 5149: 0x6DEA, + 5150: 0x6DED, + 5151: 0x6DEF, + 5152: 0x6DF0, + 5153: 0x6DF2, + 5154: 0x6DF4, + 5155: 0x6DF5, + 5156: 0x6DF6, + 5157: 0x6DF8, + 5158: 0x6DFA, + 5159: 0x6DFD, + 5160: 0x6DFE, + 5161: 0x6DFF, + 5162: 0x6E00, + 5163: 0x6E01, + 5164: 0x6E02, + 5165: 0x6E03, + 5166: 0x6E04, + 5167: 0x6E06, + 5168: 0x6E07, + 5169: 0x6E08, + 5170: 0x6E09, + 5171: 0x6E0B, + 5172: 0x6E0F, + 5173: 0x6E12, + 5174: 0x6E13, + 5175: 0x6E15, + 5176: 0x6E18, + 5177: 0x6E19, + 5178: 0x6E1B, + 5179: 0x6E1C, + 5180: 0x6E1E, + 5181: 0x6E1F, + 5182: 0x6E22, + 5183: 0x6E26, + 5184: 0x6E27, + 5185: 0x6E28, + 5186: 0x6E2A, + 5187: 0x6E2C, + 5188: 0x6E2E, + 5189: 0x6E30, + 5190: 0x6E31, + 5191: 0x6E33, + 5192: 0x6E35, + 5193: 0x6E36, + 5194: 0x6E37, + 5195: 0x6E39, + 5196: 0x6E3B, + 5197: 0x6E3C, + 5198: 0x6E3D, + 5199: 0x6E3E, + 5200: 0x6E3F, + 5201: 0x6E40, + 5202: 0x6E41, + 5203: 0x6E42, + 5204: 0x6E45, + 5205: 0x6E46, + 5206: 0x6E47, + 5207: 0x6E48, + 5208: 0x6E49, + 5209: 0x6E4A, + 5210: 0x6E4B, + 5211: 0x6E4C, + 5212: 0x6E4F, + 5213: 0x6E50, + 5214: 0x6E51, + 5215: 0x6E52, + 5216: 0x6E55, + 5217: 0x6E57, + 5218: 0x6E59, + 5219: 0x6E5A, + 5220: 0x6E5C, + 5221: 0x6E5D, + 5222: 0x6E5E, + 5223: 0x6E60, + 5224: 0x6E61, + 5225: 0x6E62, + 5226: 0x6E63, + 5227: 0x6E64, + 5228: 0x6E65, + 5229: 0x6E66, + 5230: 0x6E67, + 5231: 0x6E68, + 5232: 0x6E69, + 5233: 0x6E6A, + 5234: 0x6E6C, + 5235: 0x6E6D, + 5236: 0x6E6F, + 5237: 0x6E70, + 5238: 0x6E71, + 5239: 0x6E72, + 5240: 0x6E73, + 5241: 0x6E74, + 5242: 0x6E75, + 5243: 0x6E76, + 5244: 0x6E77, + 5245: 0x6E78, + 5246: 0x6E79, + 5247: 0x6E7A, + 5248: 0x6E7B, + 5249: 0x6E7C, + 5250: 0x6E7D, + 5251: 0x6E80, + 5252: 0x6E81, + 5253: 0x6E82, + 5254: 0x6E84, + 5255: 0x6E87, + 5256: 0x6E88, + 5257: 0x6E8A, + 5258: 0x6E8B, + 5259: 0x6E8C, + 5260: 0x6E8D, + 5261: 0x6E8E, + 5262: 0x6E91, + 5263: 0x6E92, + 5264: 0x6E93, + 5265: 0x6E94, + 5266: 0x6E95, + 5267: 0x6E96, + 5268: 0x6E97, + 5269: 0x6E99, + 5270: 0x6E9A, + 5271: 0x6E9B, + 5272: 0x6E9D, + 5273: 0x6E9E, + 5274: 0x6EA0, + 5275: 0x6EA1, + 5276: 0x6EA3, + 5277: 0x6EA4, + 5278: 0x6EA6, + 5279: 0x6EA8, + 5280: 0x6EA9, + 5281: 0x6EAB, + 5282: 0x6EAC, + 5283: 0x6EAD, + 5284: 0x6EAE, + 5285: 0x6EB0, + 5286: 0x6EB3, + 5287: 0x6EB5, + 5288: 0x6EB8, + 5289: 0x6EB9, + 5290: 0x6EBC, + 5291: 0x6EBE, + 5292: 0x6EBF, + 5293: 0x6EC0, + 5294: 0x6EC3, + 5295: 0x6EC4, + 5296: 0x6EC5, + 5297: 0x6EC6, + 5298: 0x6EC8, + 5299: 0x6EC9, + 5300: 0x6ECA, + 5301: 0x6ECC, + 5302: 0x6ECD, + 5303: 0x6ECE, + 5304: 0x6ED0, + 5305: 0x6ED2, + 5306: 0x6ED6, + 5307: 0x6ED8, + 5308: 0x6ED9, + 5309: 0x6EDB, + 5310: 0x6EDC, + 5311: 0x6EDD, + 5312: 0x6EE3, + 5313: 0x6EE7, + 5314: 0x6EEA, + 5315: 0x6EEB, + 5316: 0x6EEC, + 5317: 0x6EED, + 5318: 0x6EEE, + 5319: 0x6EEF, + 5320: 0x6EF0, + 5321: 0x6EF1, + 5322: 0x6EF2, + 5323: 0x6EF3, + 5324: 0x6EF5, + 5325: 0x6EF6, + 5326: 0x6EF7, + 5327: 0x6EF8, + 5328: 0x6EFA, + 5329: 0x6EFB, + 5330: 0x6EFC, + 5331: 0x6EFD, + 5332: 0x6EFE, + 5333: 0x6EFF, + 5334: 0x6F00, + 5335: 0x6F01, + 5336: 0x6F03, + 5337: 0x6F04, + 5338: 0x6F05, + 5339: 0x6F07, + 5340: 0x6F08, + 5341: 0x6F0A, + 5342: 0x6F0B, + 5343: 0x6F0C, + 5344: 0x6F0D, + 5345: 0x6F0E, + 5346: 0x6F10, + 5347: 0x6F11, + 5348: 0x6F12, + 5349: 0x6F16, + 5350: 0x6F17, + 5351: 0x6F18, + 5352: 0x6F19, + 5353: 0x6F1A, + 5354: 0x6F1B, + 5355: 0x6F1C, + 5356: 0x6F1D, + 5357: 0x6F1E, + 5358: 0x6F1F, + 5359: 0x6F21, + 5360: 0x6F22, + 5361: 0x6F23, + 5362: 0x6F25, + 5363: 0x6F26, + 5364: 0x6F27, + 5365: 0x6F28, + 5366: 0x6F2C, + 5367: 0x6F2E, + 5368: 0x6F30, + 5369: 0x6F32, + 5370: 0x6F34, + 5371: 0x6F35, + 5372: 0x6F37, + 5373: 0x6F38, + 5374: 0x6F39, + 5375: 0x6F3A, + 5376: 0x6F3B, + 5377: 0x6F3C, + 5378: 0x6F3D, + 5379: 0x6F3F, + 5380: 0x6F40, + 5381: 0x6F41, + 5382: 0x6F42, + 5383: 0x6F43, + 5384: 0x6F44, + 5385: 0x6F45, + 5386: 0x6F48, + 5387: 0x6F49, + 5388: 0x6F4A, + 5389: 0x6F4C, + 5390: 0x6F4E, + 5391: 0x6F4F, + 5392: 0x6F50, + 5393: 0x6F51, + 5394: 0x6F52, + 5395: 0x6F53, + 5396: 0x6F54, + 5397: 0x6F55, + 5398: 0x6F56, + 5399: 0x6F57, + 5400: 0x6F59, + 5401: 0x6F5A, + 5402: 0x6F5B, + 5403: 0x6F5D, + 5404: 0x6F5F, + 5405: 0x6F60, + 5406: 0x6F61, + 5407: 0x6F63, + 5408: 0x6F64, + 5409: 0x6F65, + 5410: 0x6F67, + 5411: 0x6F68, + 5412: 0x6F69, + 5413: 0x6F6A, + 5414: 0x6F6B, + 5415: 0x6F6C, + 5416: 0x6F6F, + 5417: 0x6F70, + 5418: 0x6F71, + 5419: 0x6F73, + 5420: 0x6F75, + 5421: 0x6F76, + 5422: 0x6F77, + 5423: 0x6F79, + 5424: 0x6F7B, + 5425: 0x6F7D, + 5426: 0x6F7E, + 5427: 0x6F7F, + 5428: 0x6F80, + 5429: 0x6F81, + 5430: 0x6F82, + 5431: 0x6F83, + 5432: 0x6F85, + 5433: 0x6F86, + 5434: 0x6F87, + 5435: 0x6F8A, + 5436: 0x6F8B, + 5437: 0x6F8F, + 5438: 0x6F90, + 5439: 0x6F91, + 5440: 0x6F92, + 5441: 0x6F93, + 5442: 0x6F94, + 5443: 0x6F95, + 5444: 0x6F96, + 5445: 0x6F97, + 5446: 0x6F98, + 5447: 0x6F99, + 5448: 0x6F9A, + 5449: 0x6F9B, + 5450: 0x6F9D, + 5451: 0x6F9E, + 5452: 0x6F9F, + 5453: 0x6FA0, + 5454: 0x6FA2, + 5455: 0x6FA3, + 5456: 0x6FA4, + 5457: 0x6FA5, + 5458: 0x6FA6, + 5459: 0x6FA8, + 5460: 0x6FA9, + 5461: 0x6FAA, + 5462: 0x6FAB, + 5463: 0x6FAC, + 5464: 0x6FAD, + 5465: 0x6FAE, + 5466: 0x6FAF, + 5467: 0x6FB0, + 5468: 0x6FB1, + 5469: 0x6FB2, + 5470: 0x6FB4, + 5471: 0x6FB5, + 5472: 0x6FB7, + 5473: 0x6FB8, + 5474: 0x6FBA, + 5475: 0x6FBB, + 5476: 0x6FBC, + 5477: 0x6FBD, + 5478: 0x6FBE, + 5479: 0x6FBF, + 5480: 0x6FC1, + 5481: 0x6FC3, + 5482: 0x6FC4, + 5483: 0x6FC5, + 5484: 0x6FC6, + 5485: 0x6FC7, + 5486: 0x6FC8, + 5487: 0x6FCA, + 5488: 0x6FCB, + 5489: 0x6FCC, + 5490: 0x6FCD, + 5491: 0x6FCE, + 5492: 0x6FCF, + 5493: 0x6FD0, + 5494: 0x6FD3, + 5495: 0x6FD4, + 5496: 0x6FD5, + 5497: 0x6FD6, + 5498: 0x6FD7, + 5499: 0x6FD8, + 5500: 0x6FD9, + 5501: 0x6FDA, + 5502: 0x6FDB, + 5503: 0x6FDC, + 5504: 0x6FDD, + 5505: 0x6FDF, + 5506: 0x6FE2, + 5507: 0x6FE3, + 5508: 0x6FE4, + 5509: 0x6FE5, + 5510: 0x6FE6, + 5511: 0x6FE7, + 5512: 0x6FE8, + 5513: 0x6FE9, + 5514: 0x6FEA, + 5515: 0x6FEB, + 5516: 0x6FEC, + 5517: 0x6FED, + 5518: 0x6FF0, + 5519: 0x6FF1, + 5520: 0x6FF2, + 5521: 0x6FF3, + 5522: 0x6FF4, + 5523: 0x6FF5, + 5524: 0x6FF6, + 5525: 0x6FF7, + 5526: 0x6FF8, + 5527: 0x6FF9, + 5528: 0x6FFA, + 5529: 0x6FFB, + 5530: 0x6FFC, + 5531: 0x6FFD, + 5532: 0x6FFE, + 5533: 0x6FFF, + 5534: 0x7000, + 5535: 0x7001, + 5536: 0x7002, + 5537: 0x7003, + 5538: 0x7004, + 5539: 0x7005, + 5540: 0x7006, + 5541: 0x7007, + 5542: 0x7008, + 5543: 0x7009, + 5544: 0x700A, + 5545: 0x700B, + 5546: 0x700C, + 5547: 0x700D, + 5548: 0x700E, + 5549: 0x700F, + 5550: 0x7010, + 5551: 0x7012, + 5552: 0x7013, + 5553: 0x7014, + 5554: 0x7015, + 5555: 0x7016, + 5556: 0x7017, + 5557: 0x7018, + 5558: 0x7019, + 5559: 0x701C, + 5560: 0x701D, + 5561: 0x701E, + 5562: 0x701F, + 5563: 0x7020, + 5564: 0x7021, + 5565: 0x7022, + 5566: 0x7024, + 5567: 0x7025, + 5568: 0x7026, + 5569: 0x7027, + 5570: 0x7028, + 5571: 0x7029, + 5572: 0x702A, + 5573: 0x702B, + 5574: 0x702C, + 5575: 0x702D, + 5576: 0x702E, + 5577: 0x702F, + 5578: 0x7030, + 5579: 0x7031, + 5580: 0x7032, + 5581: 0x7033, + 5582: 0x7034, + 5583: 0x7036, + 5584: 0x7037, + 5585: 0x7038, + 5586: 0x703A, + 5587: 0x703B, + 5588: 0x703C, + 5589: 0x703D, + 5590: 0x703E, + 5591: 0x703F, + 5592: 0x7040, + 5593: 0x7041, + 5594: 0x7042, + 5595: 0x7043, + 5596: 0x7044, + 5597: 0x7045, + 5598: 0x7046, + 5599: 0x7047, + 5600: 0x7048, + 5601: 0x7049, + 5602: 0x704A, + 5603: 0x704B, + 5604: 0x704D, + 5605: 0x704E, + 5606: 0x7050, + 5607: 0x7051, + 5608: 0x7052, + 5609: 0x7053, + 5610: 0x7054, + 5611: 0x7055, + 5612: 0x7056, + 5613: 0x7057, + 5614: 0x7058, + 5615: 0x7059, + 5616: 0x705A, + 5617: 0x705B, + 5618: 0x705C, + 5619: 0x705D, + 5620: 0x705F, + 5621: 0x7060, + 5622: 0x7061, + 5623: 0x7062, + 5624: 0x7063, + 5625: 0x7064, + 5626: 0x7065, + 5627: 0x7066, + 5628: 0x7067, + 5629: 0x7068, + 5630: 0x7069, + 5631: 0x706A, + 5632: 0x706E, + 5633: 0x7071, + 5634: 0x7072, + 5635: 0x7073, + 5636: 0x7074, + 5637: 0x7077, + 5638: 0x7079, + 5639: 0x707A, + 5640: 0x707B, + 5641: 0x707D, + 5642: 0x7081, + 5643: 0x7082, + 5644: 0x7083, + 5645: 0x7084, + 5646: 0x7086, + 5647: 0x7087, + 5648: 0x7088, + 5649: 0x708B, + 5650: 0x708C, + 5651: 0x708D, + 5652: 0x708F, + 5653: 0x7090, + 5654: 0x7091, + 5655: 0x7093, + 5656: 0x7097, + 5657: 0x7098, + 5658: 0x709A, + 5659: 0x709B, + 5660: 0x709E, + 5661: 0x709F, + 5662: 0x70A0, + 5663: 0x70A1, + 5664: 0x70A2, + 5665: 0x70A3, + 5666: 0x70A4, + 5667: 0x70A5, + 5668: 0x70A6, + 5669: 0x70A7, + 5670: 0x70A8, + 5671: 0x70A9, + 5672: 0x70AA, + 5673: 0x70B0, + 5674: 0x70B2, + 5675: 0x70B4, + 5676: 0x70B5, + 5677: 0x70B6, + 5678: 0x70BA, + 5679: 0x70BE, + 5680: 0x70BF, + 5681: 0x70C4, + 5682: 0x70C5, + 5683: 0x70C6, + 5684: 0x70C7, + 5685: 0x70C9, + 5686: 0x70CB, + 5687: 0x70CC, + 5688: 0x70CD, + 5689: 0x70CE, + 5690: 0x70CF, + 5691: 0x70D0, + 5692: 0x70D1, + 5693: 0x70D2, + 5694: 0x70D3, + 5695: 0x70D4, + 5696: 0x70D5, + 5697: 0x70D6, + 5698: 0x70D7, + 5699: 0x70DA, + 5700: 0x70DC, + 5701: 0x70DD, + 5702: 0x70DE, + 5703: 0x70E0, + 5704: 0x70E1, + 5705: 0x70E2, + 5706: 0x70E3, + 5707: 0x70E5, + 5708: 0x70EA, + 5709: 0x70EE, + 5710: 0x70F0, + 5711: 0x70F1, + 5712: 0x70F2, + 5713: 0x70F3, + 5714: 0x70F4, + 5715: 0x70F5, + 5716: 0x70F6, + 5717: 0x70F8, + 5718: 0x70FA, + 5719: 0x70FB, + 5720: 0x70FC, + 5721: 0x70FE, + 5722: 0x70FF, + 5723: 0x7100, + 5724: 0x7101, + 5725: 0x7102, + 5726: 0x7103, + 5727: 0x7104, + 5728: 0x7105, + 5729: 0x7106, + 5730: 0x7107, + 5731: 0x7108, + 5732: 0x710B, + 5733: 0x710C, + 5734: 0x710D, + 5735: 0x710E, + 5736: 0x710F, + 5737: 0x7111, + 5738: 0x7112, + 5739: 0x7114, + 5740: 0x7117, + 5741: 0x711B, + 5742: 0x711C, + 5743: 0x711D, + 5744: 0x711E, + 5745: 0x711F, + 5746: 0x7120, + 5747: 0x7121, + 5748: 0x7122, + 5749: 0x7123, + 5750: 0x7124, + 5751: 0x7125, + 5752: 0x7127, + 5753: 0x7128, + 5754: 0x7129, + 5755: 0x712A, + 5756: 0x712B, + 5757: 0x712C, + 5758: 0x712D, + 5759: 0x712E, + 5760: 0x7132, + 5761: 0x7133, + 5762: 0x7134, + 5763: 0x7135, + 5764: 0x7137, + 5765: 0x7138, + 5766: 0x7139, + 5767: 0x713A, + 5768: 0x713B, + 5769: 0x713C, + 5770: 0x713D, + 5771: 0x713E, + 5772: 0x713F, + 5773: 0x7140, + 5774: 0x7141, + 5775: 0x7142, + 5776: 0x7143, + 5777: 0x7144, + 5778: 0x7146, + 5779: 0x7147, + 5780: 0x7148, + 5781: 0x7149, + 5782: 0x714B, + 5783: 0x714D, + 5784: 0x714F, + 5785: 0x7150, + 5786: 0x7151, + 5787: 0x7152, + 5788: 0x7153, + 5789: 0x7154, + 5790: 0x7155, + 5791: 0x7156, + 5792: 0x7157, + 5793: 0x7158, + 5794: 0x7159, + 5795: 0x715A, + 5796: 0x715B, + 5797: 0x715D, + 5798: 0x715F, + 5799: 0x7160, + 5800: 0x7161, + 5801: 0x7162, + 5802: 0x7163, + 5803: 0x7165, + 5804: 0x7169, + 5805: 0x716A, + 5806: 0x716B, + 5807: 0x716C, + 5808: 0x716D, + 5809: 0x716F, + 5810: 0x7170, + 5811: 0x7171, + 5812: 0x7174, + 5813: 0x7175, + 5814: 0x7176, + 5815: 0x7177, + 5816: 0x7179, + 5817: 0x717B, + 5818: 0x717C, + 5819: 0x717E, + 5820: 0x717F, + 5821: 0x7180, + 5822: 0x7181, + 5823: 0x7182, + 5824: 0x7183, + 5825: 0x7185, + 5826: 0x7186, + 5827: 0x7187, + 5828: 0x7188, + 5829: 0x7189, + 5830: 0x718B, + 5831: 0x718C, + 5832: 0x718D, + 5833: 0x718E, + 5834: 0x7190, + 5835: 0x7191, + 5836: 0x7192, + 5837: 0x7193, + 5838: 0x7195, + 5839: 0x7196, + 5840: 0x7197, + 5841: 0x719A, + 5842: 0x719B, + 5843: 0x719C, + 5844: 0x719D, + 5845: 0x719E, + 5846: 0x71A1, + 5847: 0x71A2, + 5848: 0x71A3, + 5849: 0x71A4, + 5850: 0x71A5, + 5851: 0x71A6, + 5852: 0x71A7, + 5853: 0x71A9, + 5854: 0x71AA, + 5855: 0x71AB, + 5856: 0x71AD, + 5857: 0x71AE, + 5858: 0x71AF, + 5859: 0x71B0, + 5860: 0x71B1, + 5861: 0x71B2, + 5862: 0x71B4, + 5863: 0x71B6, + 5864: 0x71B7, + 5865: 0x71B8, + 5866: 0x71BA, + 5867: 0x71BB, + 5868: 0x71BC, + 5869: 0x71BD, + 5870: 0x71BE, + 5871: 0x71BF, + 5872: 0x71C0, + 5873: 0x71C1, + 5874: 0x71C2, + 5875: 0x71C4, + 5876: 0x71C5, + 5877: 0x71C6, + 5878: 0x71C7, + 5879: 0x71C8, + 5880: 0x71C9, + 5881: 0x71CA, + 5882: 0x71CB, + 5883: 0x71CC, + 5884: 0x71CD, + 5885: 0x71CF, + 5886: 0x71D0, + 5887: 0x71D1, + 5888: 0x71D2, + 5889: 0x71D3, + 5890: 0x71D6, + 5891: 0x71D7, + 5892: 0x71D8, + 5893: 0x71D9, + 5894: 0x71DA, + 5895: 0x71DB, + 5896: 0x71DC, + 5897: 0x71DD, + 5898: 0x71DE, + 5899: 0x71DF, + 5900: 0x71E1, + 5901: 0x71E2, + 5902: 0x71E3, + 5903: 0x71E4, + 5904: 0x71E6, + 5905: 0x71E8, + 5906: 0x71E9, + 5907: 0x71EA, + 5908: 0x71EB, + 5909: 0x71EC, + 5910: 0x71ED, + 5911: 0x71EF, + 5912: 0x71F0, + 5913: 0x71F1, + 5914: 0x71F2, + 5915: 0x71F3, + 5916: 0x71F4, + 5917: 0x71F5, + 5918: 0x71F6, + 5919: 0x71F7, + 5920: 0x71F8, + 5921: 0x71FA, + 5922: 0x71FB, + 5923: 0x71FC, + 5924: 0x71FD, + 5925: 0x71FE, + 5926: 0x71FF, + 5927: 0x7200, + 5928: 0x7201, + 5929: 0x7202, + 5930: 0x7203, + 5931: 0x7204, + 5932: 0x7205, + 5933: 0x7207, + 5934: 0x7208, + 5935: 0x7209, + 5936: 0x720A, + 5937: 0x720B, + 5938: 0x720C, + 5939: 0x720D, + 5940: 0x720E, + 5941: 0x720F, + 5942: 0x7210, + 5943: 0x7211, + 5944: 0x7212, + 5945: 0x7213, + 5946: 0x7214, + 5947: 0x7215, + 5948: 0x7216, + 5949: 0x7217, + 5950: 0x7218, + 5951: 0x7219, + 5952: 0x721A, + 5953: 0x721B, + 5954: 0x721C, + 5955: 0x721E, + 5956: 0x721F, + 5957: 0x7220, + 5958: 0x7221, + 5959: 0x7222, + 5960: 0x7223, + 5961: 0x7224, + 5962: 0x7225, + 5963: 0x7226, + 5964: 0x7227, + 5965: 0x7229, + 5966: 0x722B, + 5967: 0x722D, + 5968: 0x722E, + 5969: 0x722F, + 5970: 0x7232, + 5971: 0x7233, + 5972: 0x7234, + 5973: 0x723A, + 5974: 0x723C, + 5975: 0x723E, + 5976: 0x7240, + 5977: 0x7241, + 5978: 0x7242, + 5979: 0x7243, + 5980: 0x7244, + 5981: 0x7245, + 5982: 0x7246, + 5983: 0x7249, + 5984: 0x724A, + 5985: 0x724B, + 5986: 0x724E, + 5987: 0x724F, + 5988: 0x7250, + 5989: 0x7251, + 5990: 0x7253, + 5991: 0x7254, + 5992: 0x7255, + 5993: 0x7257, + 5994: 0x7258, + 5995: 0x725A, + 5996: 0x725C, + 5997: 0x725E, + 5998: 0x7260, + 5999: 0x7263, + 6000: 0x7264, + 6001: 0x7265, + 6002: 0x7268, + 6003: 0x726A, + 6004: 0x726B, + 6005: 0x726C, + 6006: 0x726D, + 6007: 0x7270, + 6008: 0x7271, + 6009: 0x7273, + 6010: 0x7274, + 6011: 0x7276, + 6012: 0x7277, + 6013: 0x7278, + 6014: 0x727B, + 6015: 0x727C, + 6016: 0x727D, + 6017: 0x7282, + 6018: 0x7283, + 6019: 0x7285, + 6020: 0x7286, + 6021: 0x7287, + 6022: 0x7288, + 6023: 0x7289, + 6024: 0x728C, + 6025: 0x728E, + 6026: 0x7290, + 6027: 0x7291, + 6028: 0x7293, + 6029: 0x7294, + 6030: 0x7295, + 6031: 0x7296, + 6032: 0x7297, + 6033: 0x7298, + 6034: 0x7299, + 6035: 0x729A, + 6036: 0x729B, + 6037: 0x729C, + 6038: 0x729D, + 6039: 0x729E, + 6040: 0x72A0, + 6041: 0x72A1, + 6042: 0x72A2, + 6043: 0x72A3, + 6044: 0x72A4, + 6045: 0x72A5, + 6046: 0x72A6, + 6047: 0x72A7, + 6048: 0x72A8, + 6049: 0x72A9, + 6050: 0x72AA, + 6051: 0x72AB, + 6052: 0x72AE, + 6053: 0x72B1, + 6054: 0x72B2, + 6055: 0x72B3, + 6056: 0x72B5, + 6057: 0x72BA, + 6058: 0x72BB, + 6059: 0x72BC, + 6060: 0x72BD, + 6061: 0x72BE, + 6062: 0x72BF, + 6063: 0x72C0, + 6064: 0x72C5, + 6065: 0x72C6, + 6066: 0x72C7, + 6067: 0x72C9, + 6068: 0x72CA, + 6069: 0x72CB, + 6070: 0x72CC, + 6071: 0x72CF, + 6072: 0x72D1, + 6073: 0x72D3, + 6074: 0x72D4, + 6075: 0x72D5, + 6076: 0x72D6, + 6077: 0x72D8, + 6078: 0x72DA, + 6079: 0x72DB, + 6176: 0x3000, + 6177: 0x3001, + 6178: 0x3002, + 6179: 0x00B7, + 6180: 0x02C9, + 6181: 0x02C7, + 6182: 0x00A8, + 6183: 0x3003, + 6184: 0x3005, + 6185: 0x2014, + 6186: 0xFF5E, + 6187: 0x2016, + 6188: 0x2026, + 6189: 0x2018, + 6190: 0x2019, + 6191: 0x201C, + 6192: 0x201D, + 6193: 0x3014, + 6194: 0x3015, + 6195: 0x3008, + 6196: 0x3009, + 6197: 0x300A, + 6198: 0x300B, + 6199: 0x300C, + 6200: 0x300D, + 6201: 0x300E, + 6202: 0x300F, + 6203: 0x3016, + 6204: 0x3017, + 6205: 0x3010, + 6206: 0x3011, + 6207: 0x00B1, + 6208: 0x00D7, + 6209: 0x00F7, + 6210: 0x2236, + 6211: 0x2227, + 6212: 0x2228, + 6213: 0x2211, + 6214: 0x220F, + 6215: 0x222A, + 6216: 0x2229, + 6217: 0x2208, + 6218: 0x2237, + 6219: 0x221A, + 6220: 0x22A5, + 6221: 0x2225, + 6222: 0x2220, + 6223: 0x2312, + 6224: 0x2299, + 6225: 0x222B, + 6226: 0x222E, + 6227: 0x2261, + 6228: 0x224C, + 6229: 0x2248, + 6230: 0x223D, + 6231: 0x221D, + 6232: 0x2260, + 6233: 0x226E, + 6234: 0x226F, + 6235: 0x2264, + 6236: 0x2265, + 6237: 0x221E, + 6238: 0x2235, + 6239: 0x2234, + 6240: 0x2642, + 6241: 0x2640, + 6242: 0x00B0, + 6243: 0x2032, + 6244: 0x2033, + 6245: 0x2103, + 6246: 0xFF04, + 6247: 0x00A4, + 6248: 0xFFE0, + 6249: 0xFFE1, + 6250: 0x2030, + 6251: 0x00A7, + 6252: 0x2116, + 6253: 0x2606, + 6254: 0x2605, + 6255: 0x25CB, + 6256: 0x25CF, + 6257: 0x25CE, + 6258: 0x25C7, + 6259: 0x25C6, + 6260: 0x25A1, + 6261: 0x25A0, + 6262: 0x25B3, + 6263: 0x25B2, + 6264: 0x203B, + 6265: 0x2192, + 6266: 0x2190, + 6267: 0x2191, + 6268: 0x2193, + 6269: 0x3013, + 6366: 0x2170, + 6367: 0x2171, + 6368: 0x2172, + 6369: 0x2173, + 6370: 0x2174, + 6371: 0x2175, + 6372: 0x2176, + 6373: 0x2177, + 6374: 0x2178, + 6375: 0x2179, + 6382: 0x2488, + 6383: 0x2489, + 6384: 0x248A, + 6385: 0x248B, + 6386: 0x248C, + 6387: 0x248D, + 6388: 0x248E, + 6389: 0x248F, + 6390: 0x2490, + 6391: 0x2491, + 6392: 0x2492, + 6393: 0x2493, + 6394: 0x2494, + 6395: 0x2495, + 6396: 0x2496, + 6397: 0x2497, + 6398: 0x2498, + 6399: 0x2499, + 6400: 0x249A, + 6401: 0x249B, + 6402: 0x2474, + 6403: 0x2475, + 6404: 0x2476, + 6405: 0x2477, + 6406: 0x2478, + 6407: 0x2479, + 6408: 0x247A, + 6409: 0x247B, + 6410: 0x247C, + 6411: 0x247D, + 6412: 0x247E, + 6413: 0x247F, + 6414: 0x2480, + 6415: 0x2481, + 6416: 0x2482, + 6417: 0x2483, + 6418: 0x2484, + 6419: 0x2485, + 6420: 0x2486, + 6421: 0x2487, + 6422: 0x2460, + 6423: 0x2461, + 6424: 0x2462, + 6425: 0x2463, + 6426: 0x2464, + 6427: 0x2465, + 6428: 0x2466, + 6429: 0x2467, + 6430: 0x2468, + 6431: 0x2469, + 6432: 0x20AC, + 6434: 0x3220, + 6435: 0x3221, + 6436: 0x3222, + 6437: 0x3223, + 6438: 0x3224, + 6439: 0x3225, + 6440: 0x3226, + 6441: 0x3227, + 6442: 0x3228, + 6443: 0x3229, + 6446: 0x2160, + 6447: 0x2161, + 6448: 0x2162, + 6449: 0x2163, + 6450: 0x2164, + 6451: 0x2165, + 6452: 0x2166, + 6453: 0x2167, + 6454: 0x2168, + 6455: 0x2169, + 6456: 0x216A, + 6457: 0x216B, + 6555: 0x3000, + 6556: 0xFF01, + 6557: 0xFF02, + 6558: 0xFF03, + 6559: 0xFFE5, + 6560: 0xFF05, + 6561: 0xFF06, + 6562: 0xFF07, + 6563: 0xFF08, + 6564: 0xFF09, + 6565: 0xFF0A, + 6566: 0xFF0B, + 6567: 0xFF0C, + 6568: 0xFF0D, + 6569: 0xFF0E, + 6570: 0xFF0F, + 6571: 0xFF10, + 6572: 0xFF11, + 6573: 0xFF12, + 6574: 0xFF13, + 6575: 0xFF14, + 6576: 0xFF15, + 6577: 0xFF16, + 6578: 0xFF17, + 6579: 0xFF18, + 6580: 0xFF19, + 6581: 0xFF1A, + 6582: 0xFF1B, + 6583: 0xFF1C, + 6584: 0xFF1D, + 6585: 0xFF1E, + 6586: 0xFF1F, + 6587: 0xFF20, + 6588: 0xFF21, + 6589: 0xFF22, + 6590: 0xFF23, + 6591: 0xFF24, + 6592: 0xFF25, + 6593: 0xFF26, + 6594: 0xFF27, + 6595: 0xFF28, + 6596: 0xFF29, + 6597: 0xFF2A, + 6598: 0xFF2B, + 6599: 0xFF2C, + 6600: 0xFF2D, + 6601: 0xFF2E, + 6602: 0xFF2F, + 6603: 0xFF30, + 6604: 0xFF31, + 6605: 0xFF32, + 6606: 0xFF33, + 6607: 0xFF34, + 6608: 0xFF35, + 6609: 0xFF36, + 6610: 0xFF37, + 6611: 0xFF38, + 6612: 0xFF39, + 6613: 0xFF3A, + 6614: 0xFF3B, + 6615: 0xFF3C, + 6616: 0xFF3D, + 6617: 0xFF3E, + 6618: 0xFF3F, + 6619: 0xFF40, + 6620: 0xFF41, + 6621: 0xFF42, + 6622: 0xFF43, + 6623: 0xFF44, + 6624: 0xFF45, + 6625: 0xFF46, + 6626: 0xFF47, + 6627: 0xFF48, + 6628: 0xFF49, + 6629: 0xFF4A, + 6630: 0xFF4B, + 6631: 0xFF4C, + 6632: 0xFF4D, + 6633: 0xFF4E, + 6634: 0xFF4F, + 6635: 0xFF50, + 6636: 0xFF51, + 6637: 0xFF52, + 6638: 0xFF53, + 6639: 0xFF54, + 6640: 0xFF55, + 6641: 0xFF56, + 6642: 0xFF57, + 6643: 0xFF58, + 6644: 0xFF59, + 6645: 0xFF5A, + 6646: 0xFF5B, + 6647: 0xFF5C, + 6648: 0xFF5D, + 6649: 0xFFE3, + 6746: 0x3041, + 6747: 0x3042, + 6748: 0x3043, + 6749: 0x3044, + 6750: 0x3045, + 6751: 0x3046, + 6752: 0x3047, + 6753: 0x3048, + 6754: 0x3049, + 6755: 0x304A, + 6756: 0x304B, + 6757: 0x304C, + 6758: 0x304D, + 6759: 0x304E, + 6760: 0x304F, + 6761: 0x3050, + 6762: 0x3051, + 6763: 0x3052, + 6764: 0x3053, + 6765: 0x3054, + 6766: 0x3055, + 6767: 0x3056, + 6768: 0x3057, + 6769: 0x3058, + 6770: 0x3059, + 6771: 0x305A, + 6772: 0x305B, + 6773: 0x305C, + 6774: 0x305D, + 6775: 0x305E, + 6776: 0x305F, + 6777: 0x3060, + 6778: 0x3061, + 6779: 0x3062, + 6780: 0x3063, + 6781: 0x3064, + 6782: 0x3065, + 6783: 0x3066, + 6784: 0x3067, + 6785: 0x3068, + 6786: 0x3069, + 6787: 0x306A, + 6788: 0x306B, + 6789: 0x306C, + 6790: 0x306D, + 6791: 0x306E, + 6792: 0x306F, + 6793: 0x3070, + 6794: 0x3071, + 6795: 0x3072, + 6796: 0x3073, + 6797: 0x3074, + 6798: 0x3075, + 6799: 0x3076, + 6800: 0x3077, + 6801: 0x3078, + 6802: 0x3079, + 6803: 0x307A, + 6804: 0x307B, + 6805: 0x307C, + 6806: 0x307D, + 6807: 0x307E, + 6808: 0x307F, + 6809: 0x3080, + 6810: 0x3081, + 6811: 0x3082, + 6812: 0x3083, + 6813: 0x3084, + 6814: 0x3085, + 6815: 0x3086, + 6816: 0x3087, + 6817: 0x3088, + 6818: 0x3089, + 6819: 0x308A, + 6820: 0x308B, + 6821: 0x308C, + 6822: 0x308D, + 6823: 0x308E, + 6824: 0x308F, + 6825: 0x3090, + 6826: 0x3091, + 6827: 0x3092, + 6828: 0x3093, + 6936: 0x30A1, + 6937: 0x30A2, + 6938: 0x30A3, + 6939: 0x30A4, + 6940: 0x30A5, + 6941: 0x30A6, + 6942: 0x30A7, + 6943: 0x30A8, + 6944: 0x30A9, + 6945: 0x30AA, + 6946: 0x30AB, + 6947: 0x30AC, + 6948: 0x30AD, + 6949: 0x30AE, + 6950: 0x30AF, + 6951: 0x30B0, + 6952: 0x30B1, + 6953: 0x30B2, + 6954: 0x30B3, + 6955: 0x30B4, + 6956: 0x30B5, + 6957: 0x30B6, + 6958: 0x30B7, + 6959: 0x30B8, + 6960: 0x30B9, + 6961: 0x30BA, + 6962: 0x30BB, + 6963: 0x30BC, + 6964: 0x30BD, + 6965: 0x30BE, + 6966: 0x30BF, + 6967: 0x30C0, + 6968: 0x30C1, + 6969: 0x30C2, + 6970: 0x30C3, + 6971: 0x30C4, + 6972: 0x30C5, + 6973: 0x30C6, + 6974: 0x30C7, + 6975: 0x30C8, + 6976: 0x30C9, + 6977: 0x30CA, + 6978: 0x30CB, + 6979: 0x30CC, + 6980: 0x30CD, + 6981: 0x30CE, + 6982: 0x30CF, + 6983: 0x30D0, + 6984: 0x30D1, + 6985: 0x30D2, + 6986: 0x30D3, + 6987: 0x30D4, + 6988: 0x30D5, + 6989: 0x30D6, + 6990: 0x30D7, + 6991: 0x30D8, + 6992: 0x30D9, + 6993: 0x30DA, + 6994: 0x30DB, + 6995: 0x30DC, + 6996: 0x30DD, + 6997: 0x30DE, + 6998: 0x30DF, + 6999: 0x30E0, + 7000: 0x30E1, + 7001: 0x30E2, + 7002: 0x30E3, + 7003: 0x30E4, + 7004: 0x30E5, + 7005: 0x30E6, + 7006: 0x30E7, + 7007: 0x30E8, + 7008: 0x30E9, + 7009: 0x30EA, + 7010: 0x30EB, + 7011: 0x30EC, + 7012: 0x30ED, + 7013: 0x30EE, + 7014: 0x30EF, + 7015: 0x30F0, + 7016: 0x30F1, + 7017: 0x30F2, + 7018: 0x30F3, + 7019: 0x30F4, + 7020: 0x30F5, + 7021: 0x30F6, + 7126: 0x0391, + 7127: 0x0392, + 7128: 0x0393, + 7129: 0x0394, + 7130: 0x0395, + 7131: 0x0396, + 7132: 0x0397, + 7133: 0x0398, + 7134: 0x0399, + 7135: 0x039A, + 7136: 0x039B, + 7137: 0x039C, + 7138: 0x039D, + 7139: 0x039E, + 7140: 0x039F, + 7141: 0x03A0, + 7142: 0x03A1, + 7143: 0x03A3, + 7144: 0x03A4, + 7145: 0x03A5, + 7146: 0x03A6, + 7147: 0x03A7, + 7148: 0x03A8, + 7149: 0x03A9, + 7158: 0x03B1, + 7159: 0x03B2, + 7160: 0x03B3, + 7161: 0x03B4, + 7162: 0x03B5, + 7163: 0x03B6, + 7164: 0x03B7, + 7165: 0x03B8, + 7166: 0x03B9, + 7167: 0x03BA, + 7168: 0x03BB, + 7169: 0x03BC, + 7170: 0x03BD, + 7171: 0x03BE, + 7172: 0x03BF, + 7173: 0x03C0, + 7174: 0x03C1, + 7175: 0x03C3, + 7176: 0x03C4, + 7177: 0x03C5, + 7178: 0x03C6, + 7179: 0x03C7, + 7180: 0x03C8, + 7181: 0x03C9, + 7189: 0xFE35, + 7190: 0xFE36, + 7191: 0xFE39, + 7192: 0xFE3A, + 7193: 0xFE3F, + 7194: 0xFE40, + 7195: 0xFE3D, + 7196: 0xFE3E, + 7197: 0xFE41, + 7198: 0xFE42, + 7199: 0xFE43, + 7200: 0xFE44, + 7203: 0xFE3B, + 7204: 0xFE3C, + 7205: 0xFE37, + 7206: 0xFE38, + 7207: 0xFE31, + 7209: 0xFE33, + 7210: 0xFE34, + 7316: 0x0410, + 7317: 0x0411, + 7318: 0x0412, + 7319: 0x0413, + 7320: 0x0414, + 7321: 0x0415, + 7322: 0x0401, + 7323: 0x0416, + 7324: 0x0417, + 7325: 0x0418, + 7326: 0x0419, + 7327: 0x041A, + 7328: 0x041B, + 7329: 0x041C, + 7330: 0x041D, + 7331: 0x041E, + 7332: 0x041F, + 7333: 0x0420, + 7334: 0x0421, + 7335: 0x0422, + 7336: 0x0423, + 7337: 0x0424, + 7338: 0x0425, + 7339: 0x0426, + 7340: 0x0427, + 7341: 0x0428, + 7342: 0x0429, + 7343: 0x042A, + 7344: 0x042B, + 7345: 0x042C, + 7346: 0x042D, + 7347: 0x042E, + 7348: 0x042F, + 7364: 0x0430, + 7365: 0x0431, + 7366: 0x0432, + 7367: 0x0433, + 7368: 0x0434, + 7369: 0x0435, + 7370: 0x0451, + 7371: 0x0436, + 7372: 0x0437, + 7373: 0x0438, + 7374: 0x0439, + 7375: 0x043A, + 7376: 0x043B, + 7377: 0x043C, + 7378: 0x043D, + 7379: 0x043E, + 7380: 0x043F, + 7381: 0x0440, + 7382: 0x0441, + 7383: 0x0442, + 7384: 0x0443, + 7385: 0x0444, + 7386: 0x0445, + 7387: 0x0446, + 7388: 0x0447, + 7389: 0x0448, + 7390: 0x0449, + 7391: 0x044A, + 7392: 0x044B, + 7393: 0x044C, + 7394: 0x044D, + 7395: 0x044E, + 7396: 0x044F, + 7410: 0x02CA, + 7411: 0x02CB, + 7412: 0x02D9, + 7413: 0x2013, + 7414: 0x2015, + 7415: 0x2025, + 7416: 0x2035, + 7417: 0x2105, + 7418: 0x2109, + 7419: 0x2196, + 7420: 0x2197, + 7421: 0x2198, + 7422: 0x2199, + 7423: 0x2215, + 7424: 0x221F, + 7425: 0x2223, + 7426: 0x2252, + 7427: 0x2266, + 7428: 0x2267, + 7429: 0x22BF, + 7430: 0x2550, + 7431: 0x2551, + 7432: 0x2552, + 7433: 0x2553, + 7434: 0x2554, + 7435: 0x2555, + 7436: 0x2556, + 7437: 0x2557, + 7438: 0x2558, + 7439: 0x2559, + 7440: 0x255A, + 7441: 0x255B, + 7442: 0x255C, + 7443: 0x255D, + 7444: 0x255E, + 7445: 0x255F, + 7446: 0x2560, + 7447: 0x2561, + 7448: 0x2562, + 7449: 0x2563, + 7450: 0x2564, + 7451: 0x2565, + 7452: 0x2566, + 7453: 0x2567, + 7454: 0x2568, + 7455: 0x2569, + 7456: 0x256A, + 7457: 0x256B, + 7458: 0x256C, + 7459: 0x256D, + 7460: 0x256E, + 7461: 0x256F, + 7462: 0x2570, + 7463: 0x2571, + 7464: 0x2572, + 7465: 0x2573, + 7466: 0x2581, + 7467: 0x2582, + 7468: 0x2583, + 7469: 0x2584, + 7470: 0x2585, + 7471: 0x2586, + 7472: 0x2587, + 7473: 0x2588, + 7474: 0x2589, + 7475: 0x258A, + 7476: 0x258B, + 7477: 0x258C, + 7478: 0x258D, + 7479: 0x258E, + 7480: 0x258F, + 7481: 0x2593, + 7482: 0x2594, + 7483: 0x2595, + 7484: 0x25BC, + 7485: 0x25BD, + 7486: 0x25E2, + 7487: 0x25E3, + 7488: 0x25E4, + 7489: 0x25E5, + 7490: 0x2609, + 7491: 0x2295, + 7492: 0x3012, + 7493: 0x301D, + 7494: 0x301E, + 7506: 0x0101, + 7507: 0x00E1, + 7508: 0x01CE, + 7509: 0x00E0, + 7510: 0x0113, + 7511: 0x00E9, + 7512: 0x011B, + 7513: 0x00E8, + 7514: 0x012B, + 7515: 0x00ED, + 7516: 0x01D0, + 7517: 0x00EC, + 7518: 0x014D, + 7519: 0x00F3, + 7520: 0x01D2, + 7521: 0x00F2, + 7522: 0x016B, + 7523: 0x00FA, + 7524: 0x01D4, + 7525: 0x00F9, + 7526: 0x01D6, + 7527: 0x01D8, + 7528: 0x01DA, + 7529: 0x01DC, + 7530: 0x00FC, + 7531: 0x00EA, + 7532: 0x0251, + 7534: 0x0144, + 7535: 0x0148, + 7536: 0x01F9, + 7537: 0x0261, + 7542: 0x3105, + 7543: 0x3106, + 7544: 0x3107, + 7545: 0x3108, + 7546: 0x3109, + 7547: 0x310A, + 7548: 0x310B, + 7549: 0x310C, + 7550: 0x310D, + 7551: 0x310E, + 7552: 0x310F, + 7553: 0x3110, + 7554: 0x3111, + 7555: 0x3112, + 7556: 0x3113, + 7557: 0x3114, + 7558: 0x3115, + 7559: 0x3116, + 7560: 0x3117, + 7561: 0x3118, + 7562: 0x3119, + 7563: 0x311A, + 7564: 0x311B, + 7565: 0x311C, + 7566: 0x311D, + 7567: 0x311E, + 7568: 0x311F, + 7569: 0x3120, + 7570: 0x3121, + 7571: 0x3122, + 7572: 0x3123, + 7573: 0x3124, + 7574: 0x3125, + 7575: 0x3126, + 7576: 0x3127, + 7577: 0x3128, + 7578: 0x3129, + 7600: 0x3021, + 7601: 0x3022, + 7602: 0x3023, + 7603: 0x3024, + 7604: 0x3025, + 7605: 0x3026, + 7606: 0x3027, + 7607: 0x3028, + 7608: 0x3029, + 7609: 0x32A3, + 7610: 0x338E, + 7611: 0x338F, + 7612: 0x339C, + 7613: 0x339D, + 7614: 0x339E, + 7615: 0x33A1, + 7616: 0x33C4, + 7617: 0x33CE, + 7618: 0x33D1, + 7619: 0x33D2, + 7620: 0x33D5, + 7621: 0xFE30, + 7622: 0xFFE2, + 7623: 0xFFE4, + 7625: 0x2121, + 7626: 0x3231, + 7628: 0x2010, + 7632: 0x30FC, + 7633: 0x309B, + 7634: 0x309C, + 7635: 0x30FD, + 7636: 0x30FE, + 7637: 0x3006, + 7638: 0x309D, + 7639: 0x309E, + 7640: 0xFE49, + 7641: 0xFE4A, + 7642: 0xFE4B, + 7643: 0xFE4C, + 7644: 0xFE4D, + 7645: 0xFE4E, + 7646: 0xFE4F, + 7647: 0xFE50, + 7648: 0xFE51, + 7649: 0xFE52, + 7650: 0xFE54, + 7651: 0xFE55, + 7652: 0xFE56, + 7653: 0xFE57, + 7654: 0xFE59, + 7655: 0xFE5A, + 7656: 0xFE5B, + 7657: 0xFE5C, + 7658: 0xFE5D, + 7659: 0xFE5E, + 7660: 0xFE5F, + 7661: 0xFE60, + 7662: 0xFE61, + 7663: 0xFE62, + 7664: 0xFE63, + 7665: 0xFE64, + 7666: 0xFE65, + 7667: 0xFE66, + 7668: 0xFE68, + 7669: 0xFE69, + 7670: 0xFE6A, + 7671: 0xFE6B, + 7672: 0x303E, + 7673: 0x2FF0, + 7674: 0x2FF1, + 7675: 0x2FF2, + 7676: 0x2FF3, + 7677: 0x2FF4, + 7678: 0x2FF5, + 7679: 0x2FF6, + 7680: 0x2FF7, + 7681: 0x2FF8, + 7682: 0x2FF9, + 7683: 0x2FFA, + 7684: 0x2FFB, + 7685: 0x3007, + 7699: 0x2500, + 7700: 0x2501, + 7701: 0x2502, + 7702: 0x2503, + 7703: 0x2504, + 7704: 0x2505, + 7705: 0x2506, + 7706: 0x2507, + 7707: 0x2508, + 7708: 0x2509, + 7709: 0x250A, + 7710: 0x250B, + 7711: 0x250C, + 7712: 0x250D, + 7713: 0x250E, + 7714: 0x250F, + 7715: 0x2510, + 7716: 0x2511, + 7717: 0x2512, + 7718: 0x2513, + 7719: 0x2514, + 7720: 0x2515, + 7721: 0x2516, + 7722: 0x2517, + 7723: 0x2518, + 7724: 0x2519, + 7725: 0x251A, + 7726: 0x251B, + 7727: 0x251C, + 7728: 0x251D, + 7729: 0x251E, + 7730: 0x251F, + 7731: 0x2520, + 7732: 0x2521, + 7733: 0x2522, + 7734: 0x2523, + 7735: 0x2524, + 7736: 0x2525, + 7737: 0x2526, + 7738: 0x2527, + 7739: 0x2528, + 7740: 0x2529, + 7741: 0x252A, + 7742: 0x252B, + 7743: 0x252C, + 7744: 0x252D, + 7745: 0x252E, + 7746: 0x252F, + 7747: 0x2530, + 7748: 0x2531, + 7749: 0x2532, + 7750: 0x2533, + 7751: 0x2534, + 7752: 0x2535, + 7753: 0x2536, + 7754: 0x2537, + 7755: 0x2538, + 7756: 0x2539, + 7757: 0x253A, + 7758: 0x253B, + 7759: 0x253C, + 7760: 0x253D, + 7761: 0x253E, + 7762: 0x253F, + 7763: 0x2540, + 7764: 0x2541, + 7765: 0x2542, + 7766: 0x2543, + 7767: 0x2544, + 7768: 0x2545, + 7769: 0x2546, + 7770: 0x2547, + 7771: 0x2548, + 7772: 0x2549, + 7773: 0x254A, + 7774: 0x254B, + 7790: 0x72DC, + 7791: 0x72DD, + 7792: 0x72DF, + 7793: 0x72E2, + 7794: 0x72E3, + 7795: 0x72E4, + 7796: 0x72E5, + 7797: 0x72E6, + 7798: 0x72E7, + 7799: 0x72EA, + 7800: 0x72EB, + 7801: 0x72F5, + 7802: 0x72F6, + 7803: 0x72F9, + 7804: 0x72FD, + 7805: 0x72FE, + 7806: 0x72FF, + 7807: 0x7300, + 7808: 0x7302, + 7809: 0x7304, + 7810: 0x7305, + 7811: 0x7306, + 7812: 0x7307, + 7813: 0x7308, + 7814: 0x7309, + 7815: 0x730B, + 7816: 0x730C, + 7817: 0x730D, + 7818: 0x730F, + 7819: 0x7310, + 7820: 0x7311, + 7821: 0x7312, + 7822: 0x7314, + 7823: 0x7318, + 7824: 0x7319, + 7825: 0x731A, + 7826: 0x731F, + 7827: 0x7320, + 7828: 0x7323, + 7829: 0x7324, + 7830: 0x7326, + 7831: 0x7327, + 7832: 0x7328, + 7833: 0x732D, + 7834: 0x732F, + 7835: 0x7330, + 7836: 0x7332, + 7837: 0x7333, + 7838: 0x7335, + 7839: 0x7336, + 7840: 0x733A, + 7841: 0x733B, + 7842: 0x733C, + 7843: 0x733D, + 7844: 0x7340, + 7845: 0x7341, + 7846: 0x7342, + 7847: 0x7343, + 7848: 0x7344, + 7849: 0x7345, + 7850: 0x7346, + 7851: 0x7347, + 7852: 0x7348, + 7853: 0x7349, + 7854: 0x734A, + 7855: 0x734B, + 7856: 0x734C, + 7857: 0x734E, + 7858: 0x734F, + 7859: 0x7351, + 7860: 0x7353, + 7861: 0x7354, + 7862: 0x7355, + 7863: 0x7356, + 7864: 0x7358, + 7865: 0x7359, + 7866: 0x735A, + 7867: 0x735B, + 7868: 0x735C, + 7869: 0x735D, + 7870: 0x735E, + 7871: 0x735F, + 7872: 0x7361, + 7873: 0x7362, + 7874: 0x7363, + 7875: 0x7364, + 7876: 0x7365, + 7877: 0x7366, + 7878: 0x7367, + 7879: 0x7368, + 7880: 0x7369, + 7881: 0x736A, + 7882: 0x736B, + 7883: 0x736E, + 7884: 0x7370, + 7885: 0x7371, + 7980: 0x7372, + 7981: 0x7373, + 7982: 0x7374, + 7983: 0x7375, + 7984: 0x7376, + 7985: 0x7377, + 7986: 0x7378, + 7987: 0x7379, + 7988: 0x737A, + 7989: 0x737B, + 7990: 0x737C, + 7991: 0x737D, + 7992: 0x737F, + 7993: 0x7380, + 7994: 0x7381, + 7995: 0x7382, + 7996: 0x7383, + 7997: 0x7385, + 7998: 0x7386, + 7999: 0x7388, + 8000: 0x738A, + 8001: 0x738C, + 8002: 0x738D, + 8003: 0x738F, + 8004: 0x7390, + 8005: 0x7392, + 8006: 0x7393, + 8007: 0x7394, + 8008: 0x7395, + 8009: 0x7397, + 8010: 0x7398, + 8011: 0x7399, + 8012: 0x739A, + 8013: 0x739C, + 8014: 0x739D, + 8015: 0x739E, + 8016: 0x73A0, + 8017: 0x73A1, + 8018: 0x73A3, + 8019: 0x73A4, + 8020: 0x73A5, + 8021: 0x73A6, + 8022: 0x73A7, + 8023: 0x73A8, + 8024: 0x73AA, + 8025: 0x73AC, + 8026: 0x73AD, + 8027: 0x73B1, + 8028: 0x73B4, + 8029: 0x73B5, + 8030: 0x73B6, + 8031: 0x73B8, + 8032: 0x73B9, + 8033: 0x73BC, + 8034: 0x73BD, + 8035: 0x73BE, + 8036: 0x73BF, + 8037: 0x73C1, + 8038: 0x73C3, + 8039: 0x73C4, + 8040: 0x73C5, + 8041: 0x73C6, + 8042: 0x73C7, + 8043: 0x73CB, + 8044: 0x73CC, + 8045: 0x73CE, + 8046: 0x73D2, + 8047: 0x73D3, + 8048: 0x73D4, + 8049: 0x73D5, + 8050: 0x73D6, + 8051: 0x73D7, + 8052: 0x73D8, + 8053: 0x73DA, + 8054: 0x73DB, + 8055: 0x73DC, + 8056: 0x73DD, + 8057: 0x73DF, + 8058: 0x73E1, + 8059: 0x73E2, + 8060: 0x73E3, + 8061: 0x73E4, + 8062: 0x73E6, + 8063: 0x73E8, + 8064: 0x73EA, + 8065: 0x73EB, + 8066: 0x73EC, + 8067: 0x73EE, + 8068: 0x73EF, + 8069: 0x73F0, + 8070: 0x73F1, + 8071: 0x73F3, + 8072: 0x73F4, + 8073: 0x73F5, + 8074: 0x73F6, + 8075: 0x73F7, + 8170: 0x73F8, + 8171: 0x73F9, + 8172: 0x73FA, + 8173: 0x73FB, + 8174: 0x73FC, + 8175: 0x73FD, + 8176: 0x73FE, + 8177: 0x73FF, + 8178: 0x7400, + 8179: 0x7401, + 8180: 0x7402, + 8181: 0x7404, + 8182: 0x7407, + 8183: 0x7408, + 8184: 0x740B, + 8185: 0x740C, + 8186: 0x740D, + 8187: 0x740E, + 8188: 0x7411, + 8189: 0x7412, + 8190: 0x7413, + 8191: 0x7414, + 8192: 0x7415, + 8193: 0x7416, + 8194: 0x7417, + 8195: 0x7418, + 8196: 0x7419, + 8197: 0x741C, + 8198: 0x741D, + 8199: 0x741E, + 8200: 0x741F, + 8201: 0x7420, + 8202: 0x7421, + 8203: 0x7423, + 8204: 0x7424, + 8205: 0x7427, + 8206: 0x7429, + 8207: 0x742B, + 8208: 0x742D, + 8209: 0x742F, + 8210: 0x7431, + 8211: 0x7432, + 8212: 0x7437, + 8213: 0x7438, + 8214: 0x7439, + 8215: 0x743A, + 8216: 0x743B, + 8217: 0x743D, + 8218: 0x743E, + 8219: 0x743F, + 8220: 0x7440, + 8221: 0x7442, + 8222: 0x7443, + 8223: 0x7444, + 8224: 0x7445, + 8225: 0x7446, + 8226: 0x7447, + 8227: 0x7448, + 8228: 0x7449, + 8229: 0x744A, + 8230: 0x744B, + 8231: 0x744C, + 8232: 0x744D, + 8233: 0x744E, + 8234: 0x744F, + 8235: 0x7450, + 8236: 0x7451, + 8237: 0x7452, + 8238: 0x7453, + 8239: 0x7454, + 8240: 0x7456, + 8241: 0x7458, + 8242: 0x745D, + 8243: 0x7460, + 8244: 0x7461, + 8245: 0x7462, + 8246: 0x7463, + 8247: 0x7464, + 8248: 0x7465, + 8249: 0x7466, + 8250: 0x7467, + 8251: 0x7468, + 8252: 0x7469, + 8253: 0x746A, + 8254: 0x746B, + 8255: 0x746C, + 8256: 0x746E, + 8257: 0x746F, + 8258: 0x7471, + 8259: 0x7472, + 8260: 0x7473, + 8261: 0x7474, + 8262: 0x7475, + 8263: 0x7478, + 8264: 0x7479, + 8265: 0x747A, + 8360: 0x747B, + 8361: 0x747C, + 8362: 0x747D, + 8363: 0x747F, + 8364: 0x7482, + 8365: 0x7484, + 8366: 0x7485, + 8367: 0x7486, + 8368: 0x7488, + 8369: 0x7489, + 8370: 0x748A, + 8371: 0x748C, + 8372: 0x748D, + 8373: 0x748F, + 8374: 0x7491, + 8375: 0x7492, + 8376: 0x7493, + 8377: 0x7494, + 8378: 0x7495, + 8379: 0x7496, + 8380: 0x7497, + 8381: 0x7498, + 8382: 0x7499, + 8383: 0x749A, + 8384: 0x749B, + 8385: 0x749D, + 8386: 0x749F, + 8387: 0x74A0, + 8388: 0x74A1, + 8389: 0x74A2, + 8390: 0x74A3, + 8391: 0x74A4, + 8392: 0x74A5, + 8393: 0x74A6, + 8394: 0x74AA, + 8395: 0x74AB, + 8396: 0x74AC, + 8397: 0x74AD, + 8398: 0x74AE, + 8399: 0x74AF, + 8400: 0x74B0, + 8401: 0x74B1, + 8402: 0x74B2, + 8403: 0x74B3, + 8404: 0x74B4, + 8405: 0x74B5, + 8406: 0x74B6, + 8407: 0x74B7, + 8408: 0x74B8, + 8409: 0x74B9, + 8410: 0x74BB, + 8411: 0x74BC, + 8412: 0x74BD, + 8413: 0x74BE, + 8414: 0x74BF, + 8415: 0x74C0, + 8416: 0x74C1, + 8417: 0x74C2, + 8418: 0x74C3, + 8419: 0x74C4, + 8420: 0x74C5, + 8421: 0x74C6, + 8422: 0x74C7, + 8423: 0x74C8, + 8424: 0x74C9, + 8425: 0x74CA, + 8426: 0x74CB, + 8427: 0x74CC, + 8428: 0x74CD, + 8429: 0x74CE, + 8430: 0x74CF, + 8431: 0x74D0, + 8432: 0x74D1, + 8433: 0x74D3, + 8434: 0x74D4, + 8435: 0x74D5, + 8436: 0x74D6, + 8437: 0x74D7, + 8438: 0x74D8, + 8439: 0x74D9, + 8440: 0x74DA, + 8441: 0x74DB, + 8442: 0x74DD, + 8443: 0x74DF, + 8444: 0x74E1, + 8445: 0x74E5, + 8446: 0x74E7, + 8447: 0x74E8, + 8448: 0x74E9, + 8449: 0x74EA, + 8450: 0x74EB, + 8451: 0x74EC, + 8452: 0x74ED, + 8453: 0x74F0, + 8454: 0x74F1, + 8455: 0x74F2, + 8550: 0x74F3, + 8551: 0x74F5, + 8552: 0x74F8, + 8553: 0x74F9, + 8554: 0x74FA, + 8555: 0x74FB, + 8556: 0x74FC, + 8557: 0x74FD, + 8558: 0x74FE, + 8559: 0x7500, + 8560: 0x7501, + 8561: 0x7502, + 8562: 0x7503, + 8563: 0x7505, + 8564: 0x7506, + 8565: 0x7507, + 8566: 0x7508, + 8567: 0x7509, + 8568: 0x750A, + 8569: 0x750B, + 8570: 0x750C, + 8571: 0x750E, + 8572: 0x7510, + 8573: 0x7512, + 8574: 0x7514, + 8575: 0x7515, + 8576: 0x7516, + 8577: 0x7517, + 8578: 0x751B, + 8579: 0x751D, + 8580: 0x751E, + 8581: 0x7520, + 8582: 0x7521, + 8583: 0x7522, + 8584: 0x7523, + 8585: 0x7524, + 8586: 0x7526, + 8587: 0x7527, + 8588: 0x752A, + 8589: 0x752E, + 8590: 0x7534, + 8591: 0x7536, + 8592: 0x7539, + 8593: 0x753C, + 8594: 0x753D, + 8595: 0x753F, + 8596: 0x7541, + 8597: 0x7542, + 8598: 0x7543, + 8599: 0x7544, + 8600: 0x7546, + 8601: 0x7547, + 8602: 0x7549, + 8603: 0x754A, + 8604: 0x754D, + 8605: 0x7550, + 8606: 0x7551, + 8607: 0x7552, + 8608: 0x7553, + 8609: 0x7555, + 8610: 0x7556, + 8611: 0x7557, + 8612: 0x7558, + 8613: 0x755D, + 8614: 0x755E, + 8615: 0x755F, + 8616: 0x7560, + 8617: 0x7561, + 8618: 0x7562, + 8619: 0x7563, + 8620: 0x7564, + 8621: 0x7567, + 8622: 0x7568, + 8623: 0x7569, + 8624: 0x756B, + 8625: 0x756C, + 8626: 0x756D, + 8627: 0x756E, + 8628: 0x756F, + 8629: 0x7570, + 8630: 0x7571, + 8631: 0x7573, + 8632: 0x7575, + 8633: 0x7576, + 8634: 0x7577, + 8635: 0x757A, + 8636: 0x757B, + 8637: 0x757C, + 8638: 0x757D, + 8639: 0x757E, + 8640: 0x7580, + 8641: 0x7581, + 8642: 0x7582, + 8643: 0x7584, + 8644: 0x7585, + 8645: 0x7587, + 8740: 0x7588, + 8741: 0x7589, + 8742: 0x758A, + 8743: 0x758C, + 8744: 0x758D, + 8745: 0x758E, + 8746: 0x7590, + 8747: 0x7593, + 8748: 0x7595, + 8749: 0x7598, + 8750: 0x759B, + 8751: 0x759C, + 8752: 0x759E, + 8753: 0x75A2, + 8754: 0x75A6, + 8755: 0x75A7, + 8756: 0x75A8, + 8757: 0x75A9, + 8758: 0x75AA, + 8759: 0x75AD, + 8760: 0x75B6, + 8761: 0x75B7, + 8762: 0x75BA, + 8763: 0x75BB, + 8764: 0x75BF, + 8765: 0x75C0, + 8766: 0x75C1, + 8767: 0x75C6, + 8768: 0x75CB, + 8769: 0x75CC, + 8770: 0x75CE, + 8771: 0x75CF, + 8772: 0x75D0, + 8773: 0x75D1, + 8774: 0x75D3, + 8775: 0x75D7, + 8776: 0x75D9, + 8777: 0x75DA, + 8778: 0x75DC, + 8779: 0x75DD, + 8780: 0x75DF, + 8781: 0x75E0, + 8782: 0x75E1, + 8783: 0x75E5, + 8784: 0x75E9, + 8785: 0x75EC, + 8786: 0x75ED, + 8787: 0x75EE, + 8788: 0x75EF, + 8789: 0x75F2, + 8790: 0x75F3, + 8791: 0x75F5, + 8792: 0x75F6, + 8793: 0x75F7, + 8794: 0x75F8, + 8795: 0x75FA, + 8796: 0x75FB, + 8797: 0x75FD, + 8798: 0x75FE, + 8799: 0x7602, + 8800: 0x7604, + 8801: 0x7606, + 8802: 0x7607, + 8803: 0x7608, + 8804: 0x7609, + 8805: 0x760B, + 8806: 0x760D, + 8807: 0x760E, + 8808: 0x760F, + 8809: 0x7611, + 8810: 0x7612, + 8811: 0x7613, + 8812: 0x7614, + 8813: 0x7616, + 8814: 0x761A, + 8815: 0x761C, + 8816: 0x761D, + 8817: 0x761E, + 8818: 0x7621, + 8819: 0x7623, + 8820: 0x7627, + 8821: 0x7628, + 8822: 0x762C, + 8823: 0x762E, + 8824: 0x762F, + 8825: 0x7631, + 8826: 0x7632, + 8827: 0x7636, + 8828: 0x7637, + 8829: 0x7639, + 8830: 0x763A, + 8831: 0x763B, + 8832: 0x763D, + 8833: 0x7641, + 8834: 0x7642, + 8835: 0x7644, + 8930: 0x7645, + 8931: 0x7646, + 8932: 0x7647, + 8933: 0x7648, + 8934: 0x7649, + 8935: 0x764A, + 8936: 0x764B, + 8937: 0x764E, + 8938: 0x764F, + 8939: 0x7650, + 8940: 0x7651, + 8941: 0x7652, + 8942: 0x7653, + 8943: 0x7655, + 8944: 0x7657, + 8945: 0x7658, + 8946: 0x7659, + 8947: 0x765A, + 8948: 0x765B, + 8949: 0x765D, + 8950: 0x765F, + 8951: 0x7660, + 8952: 0x7661, + 8953: 0x7662, + 8954: 0x7664, + 8955: 0x7665, + 8956: 0x7666, + 8957: 0x7667, + 8958: 0x7668, + 8959: 0x7669, + 8960: 0x766A, + 8961: 0x766C, + 8962: 0x766D, + 8963: 0x766E, + 8964: 0x7670, + 8965: 0x7671, + 8966: 0x7672, + 8967: 0x7673, + 8968: 0x7674, + 8969: 0x7675, + 8970: 0x7676, + 8971: 0x7677, + 8972: 0x7679, + 8973: 0x767A, + 8974: 0x767C, + 8975: 0x767F, + 8976: 0x7680, + 8977: 0x7681, + 8978: 0x7683, + 8979: 0x7685, + 8980: 0x7689, + 8981: 0x768A, + 8982: 0x768C, + 8983: 0x768D, + 8984: 0x768F, + 8985: 0x7690, + 8986: 0x7692, + 8987: 0x7694, + 8988: 0x7695, + 8989: 0x7697, + 8990: 0x7698, + 8991: 0x769A, + 8992: 0x769B, + 8993: 0x769C, + 8994: 0x769D, + 8995: 0x769E, + 8996: 0x769F, + 8997: 0x76A0, + 8998: 0x76A1, + 8999: 0x76A2, + 9000: 0x76A3, + 9001: 0x76A5, + 9002: 0x76A6, + 9003: 0x76A7, + 9004: 0x76A8, + 9005: 0x76A9, + 9006: 0x76AA, + 9007: 0x76AB, + 9008: 0x76AC, + 9009: 0x76AD, + 9010: 0x76AF, + 9011: 0x76B0, + 9012: 0x76B3, + 9013: 0x76B5, + 9014: 0x76B6, + 9015: 0x76B7, + 9016: 0x76B8, + 9017: 0x76B9, + 9018: 0x76BA, + 9019: 0x76BB, + 9020: 0x76BC, + 9021: 0x76BD, + 9022: 0x76BE, + 9023: 0x76C0, + 9024: 0x76C1, + 9025: 0x76C3, + 9026: 0x554A, + 9027: 0x963F, + 9028: 0x57C3, + 9029: 0x6328, + 9030: 0x54CE, + 9031: 0x5509, + 9032: 0x54C0, + 9033: 0x7691, + 9034: 0x764C, + 9035: 0x853C, + 9036: 0x77EE, + 9037: 0x827E, + 9038: 0x788D, + 9039: 0x7231, + 9040: 0x9698, + 9041: 0x978D, + 9042: 0x6C28, + 9043: 0x5B89, + 9044: 0x4FFA, + 9045: 0x6309, + 9046: 0x6697, + 9047: 0x5CB8, + 9048: 0x80FA, + 9049: 0x6848, + 9050: 0x80AE, + 9051: 0x6602, + 9052: 0x76CE, + 9053: 0x51F9, + 9054: 0x6556, + 9055: 0x71AC, + 9056: 0x7FF1, + 9057: 0x8884, + 9058: 0x50B2, + 9059: 0x5965, + 9060: 0x61CA, + 9061: 0x6FB3, + 9062: 0x82AD, + 9063: 0x634C, + 9064: 0x6252, + 9065: 0x53ED, + 9066: 0x5427, + 9067: 0x7B06, + 9068: 0x516B, + 9069: 0x75A4, + 9070: 0x5DF4, + 9071: 0x62D4, + 9072: 0x8DCB, + 9073: 0x9776, + 9074: 0x628A, + 9075: 0x8019, + 9076: 0x575D, + 9077: 0x9738, + 9078: 0x7F62, + 9079: 0x7238, + 9080: 0x767D, + 9081: 0x67CF, + 9082: 0x767E, + 9083: 0x6446, + 9084: 0x4F70, + 9085: 0x8D25, + 9086: 0x62DC, + 9087: 0x7A17, + 9088: 0x6591, + 9089: 0x73ED, + 9090: 0x642C, + 9091: 0x6273, + 9092: 0x822C, + 9093: 0x9881, + 9094: 0x677F, + 9095: 0x7248, + 9096: 0x626E, + 9097: 0x62CC, + 9098: 0x4F34, + 9099: 0x74E3, + 9100: 0x534A, + 9101: 0x529E, + 9102: 0x7ECA, + 9103: 0x90A6, + 9104: 0x5E2E, + 9105: 0x6886, + 9106: 0x699C, + 9107: 0x8180, + 9108: 0x7ED1, + 9109: 0x68D2, + 9110: 0x78C5, + 9111: 0x868C, + 9112: 0x9551, + 9113: 0x508D, + 9114: 0x8C24, + 9115: 0x82DE, + 9116: 0x80DE, + 9117: 0x5305, + 9118: 0x8912, + 9119: 0x5265, + 9120: 0x76C4, + 9121: 0x76C7, + 9122: 0x76C9, + 9123: 0x76CB, + 9124: 0x76CC, + 9125: 0x76D3, + 9126: 0x76D5, + 9127: 0x76D9, + 9128: 0x76DA, + 9129: 0x76DC, + 9130: 0x76DD, + 9131: 0x76DE, + 9132: 0x76E0, + 9133: 0x76E1, + 9134: 0x76E2, + 9135: 0x76E3, + 9136: 0x76E4, + 9137: 0x76E6, + 9138: 0x76E7, + 9139: 0x76E8, + 9140: 0x76E9, + 9141: 0x76EA, + 9142: 0x76EB, + 9143: 0x76EC, + 9144: 0x76ED, + 9145: 0x76F0, + 9146: 0x76F3, + 9147: 0x76F5, + 9148: 0x76F6, + 9149: 0x76F7, + 9150: 0x76FA, + 9151: 0x76FB, + 9152: 0x76FD, + 9153: 0x76FF, + 9154: 0x7700, + 9155: 0x7702, + 9156: 0x7703, + 9157: 0x7705, + 9158: 0x7706, + 9159: 0x770A, + 9160: 0x770C, + 9161: 0x770E, + 9162: 0x770F, + 9163: 0x7710, + 9164: 0x7711, + 9165: 0x7712, + 9166: 0x7713, + 9167: 0x7714, + 9168: 0x7715, + 9169: 0x7716, + 9170: 0x7717, + 9171: 0x7718, + 9172: 0x771B, + 9173: 0x771C, + 9174: 0x771D, + 9175: 0x771E, + 9176: 0x7721, + 9177: 0x7723, + 9178: 0x7724, + 9179: 0x7725, + 9180: 0x7727, + 9181: 0x772A, + 9182: 0x772B, + 9183: 0x772C, + 9184: 0x772E, + 9185: 0x7730, + 9186: 0x7731, + 9187: 0x7732, + 9188: 0x7733, + 9189: 0x7734, + 9190: 0x7739, + 9191: 0x773B, + 9192: 0x773D, + 9193: 0x773E, + 9194: 0x773F, + 9195: 0x7742, + 9196: 0x7744, + 9197: 0x7745, + 9198: 0x7746, + 9199: 0x7748, + 9200: 0x7749, + 9201: 0x774A, + 9202: 0x774B, + 9203: 0x774C, + 9204: 0x774D, + 9205: 0x774E, + 9206: 0x774F, + 9207: 0x7752, + 9208: 0x7753, + 9209: 0x7754, + 9210: 0x7755, + 9211: 0x7756, + 9212: 0x7757, + 9213: 0x7758, + 9214: 0x7759, + 9215: 0x775C, + 9216: 0x8584, + 9217: 0x96F9, + 9218: 0x4FDD, + 9219: 0x5821, + 9220: 0x9971, + 9221: 0x5B9D, + 9222: 0x62B1, + 9223: 0x62A5, + 9224: 0x66B4, + 9225: 0x8C79, + 9226: 0x9C8D, + 9227: 0x7206, + 9228: 0x676F, + 9229: 0x7891, + 9230: 0x60B2, + 9231: 0x5351, + 9232: 0x5317, + 9233: 0x8F88, + 9234: 0x80CC, + 9235: 0x8D1D, + 9236: 0x94A1, + 9237: 0x500D, + 9238: 0x72C8, + 9239: 0x5907, + 9240: 0x60EB, + 9241: 0x7119, + 9242: 0x88AB, + 9243: 0x5954, + 9244: 0x82EF, + 9245: 0x672C, + 9246: 0x7B28, + 9247: 0x5D29, + 9248: 0x7EF7, + 9249: 0x752D, + 9250: 0x6CF5, + 9251: 0x8E66, + 9252: 0x8FF8, + 9253: 0x903C, + 9254: 0x9F3B, + 9255: 0x6BD4, + 9256: 0x9119, + 9257: 0x7B14, + 9258: 0x5F7C, + 9259: 0x78A7, + 9260: 0x84D6, + 9261: 0x853D, + 9262: 0x6BD5, + 9263: 0x6BD9, + 9264: 0x6BD6, + 9265: 0x5E01, + 9266: 0x5E87, + 9267: 0x75F9, + 9268: 0x95ED, + 9269: 0x655D, + 9270: 0x5F0A, + 9271: 0x5FC5, + 9272: 0x8F9F, + 9273: 0x58C1, + 9274: 0x81C2, + 9275: 0x907F, + 9276: 0x965B, + 9277: 0x97AD, + 9278: 0x8FB9, + 9279: 0x7F16, + 9280: 0x8D2C, + 9281: 0x6241, + 9282: 0x4FBF, + 9283: 0x53D8, + 9284: 0x535E, + 9285: 0x8FA8, + 9286: 0x8FA9, + 9287: 0x8FAB, + 9288: 0x904D, + 9289: 0x6807, + 9290: 0x5F6A, + 9291: 0x8198, + 9292: 0x8868, + 9293: 0x9CD6, + 9294: 0x618B, + 9295: 0x522B, + 9296: 0x762A, + 9297: 0x5F6C, + 9298: 0x658C, + 9299: 0x6FD2, + 9300: 0x6EE8, + 9301: 0x5BBE, + 9302: 0x6448, + 9303: 0x5175, + 9304: 0x51B0, + 9305: 0x67C4, + 9306: 0x4E19, + 9307: 0x79C9, + 9308: 0x997C, + 9309: 0x70B3, + 9310: 0x775D, + 9311: 0x775E, + 9312: 0x775F, + 9313: 0x7760, + 9314: 0x7764, + 9315: 0x7767, + 9316: 0x7769, + 9317: 0x776A, + 9318: 0x776D, + 9319: 0x776E, + 9320: 0x776F, + 9321: 0x7770, + 9322: 0x7771, + 9323: 0x7772, + 9324: 0x7773, + 9325: 0x7774, + 9326: 0x7775, + 9327: 0x7776, + 9328: 0x7777, + 9329: 0x7778, + 9330: 0x777A, + 9331: 0x777B, + 9332: 0x777C, + 9333: 0x7781, + 9334: 0x7782, + 9335: 0x7783, + 9336: 0x7786, + 9337: 0x7787, + 9338: 0x7788, + 9339: 0x7789, + 9340: 0x778A, + 9341: 0x778B, + 9342: 0x778F, + 9343: 0x7790, + 9344: 0x7793, + 9345: 0x7794, + 9346: 0x7795, + 9347: 0x7796, + 9348: 0x7797, + 9349: 0x7798, + 9350: 0x7799, + 9351: 0x779A, + 9352: 0x779B, + 9353: 0x779C, + 9354: 0x779D, + 9355: 0x779E, + 9356: 0x77A1, + 9357: 0x77A3, + 9358: 0x77A4, + 9359: 0x77A6, + 9360: 0x77A8, + 9361: 0x77AB, + 9362: 0x77AD, + 9363: 0x77AE, + 9364: 0x77AF, + 9365: 0x77B1, + 9366: 0x77B2, + 9367: 0x77B4, + 9368: 0x77B6, + 9369: 0x77B7, + 9370: 0x77B8, + 9371: 0x77B9, + 9372: 0x77BA, + 9373: 0x77BC, + 9374: 0x77BE, + 9375: 0x77C0, + 9376: 0x77C1, + 9377: 0x77C2, + 9378: 0x77C3, + 9379: 0x77C4, + 9380: 0x77C5, + 9381: 0x77C6, + 9382: 0x77C7, + 9383: 0x77C8, + 9384: 0x77C9, + 9385: 0x77CA, + 9386: 0x77CB, + 9387: 0x77CC, + 9388: 0x77CE, + 9389: 0x77CF, + 9390: 0x77D0, + 9391: 0x77D1, + 9392: 0x77D2, + 9393: 0x77D3, + 9394: 0x77D4, + 9395: 0x77D5, + 9396: 0x77D6, + 9397: 0x77D8, + 9398: 0x77D9, + 9399: 0x77DA, + 9400: 0x77DD, + 9401: 0x77DE, + 9402: 0x77DF, + 9403: 0x77E0, + 9404: 0x77E1, + 9405: 0x77E4, + 9406: 0x75C5, + 9407: 0x5E76, + 9408: 0x73BB, + 9409: 0x83E0, + 9410: 0x64AD, + 9411: 0x62E8, + 9412: 0x94B5, + 9413: 0x6CE2, + 9414: 0x535A, + 9415: 0x52C3, + 9416: 0x640F, + 9417: 0x94C2, + 9418: 0x7B94, + 9419: 0x4F2F, + 9420: 0x5E1B, + 9421: 0x8236, + 9422: 0x8116, + 9423: 0x818A, + 9424: 0x6E24, + 9425: 0x6CCA, + 9426: 0x9A73, + 9427: 0x6355, + 9428: 0x535C, + 9429: 0x54FA, + 9430: 0x8865, + 9431: 0x57E0, + 9432: 0x4E0D, + 9433: 0x5E03, + 9434: 0x6B65, + 9435: 0x7C3F, + 9436: 0x90E8, + 9437: 0x6016, + 9438: 0x64E6, + 9439: 0x731C, + 9440: 0x88C1, + 9441: 0x6750, + 9442: 0x624D, + 9443: 0x8D22, + 9444: 0x776C, + 9445: 0x8E29, + 9446: 0x91C7, + 9447: 0x5F69, + 9448: 0x83DC, + 9449: 0x8521, + 9450: 0x9910, + 9451: 0x53C2, + 9452: 0x8695, + 9453: 0x6B8B, + 9454: 0x60ED, + 9455: 0x60E8, + 9456: 0x707F, + 9457: 0x82CD, + 9458: 0x8231, + 9459: 0x4ED3, + 9460: 0x6CA7, + 9461: 0x85CF, + 9462: 0x64CD, + 9463: 0x7CD9, + 9464: 0x69FD, + 9465: 0x66F9, + 9466: 0x8349, + 9467: 0x5395, + 9468: 0x7B56, + 9469: 0x4FA7, + 9470: 0x518C, + 9471: 0x6D4B, + 9472: 0x5C42, + 9473: 0x8E6D, + 9474: 0x63D2, + 9475: 0x53C9, + 9476: 0x832C, + 9477: 0x8336, + 9478: 0x67E5, + 9479: 0x78B4, + 9480: 0x643D, + 9481: 0x5BDF, + 9482: 0x5C94, + 9483: 0x5DEE, + 9484: 0x8BE7, + 9485: 0x62C6, + 9486: 0x67F4, + 9487: 0x8C7A, + 9488: 0x6400, + 9489: 0x63BA, + 9490: 0x8749, + 9491: 0x998B, + 9492: 0x8C17, + 9493: 0x7F20, + 9494: 0x94F2, + 9495: 0x4EA7, + 9496: 0x9610, + 9497: 0x98A4, + 9498: 0x660C, + 9499: 0x7316, + 9500: 0x77E6, + 9501: 0x77E8, + 9502: 0x77EA, + 9503: 0x77EF, + 9504: 0x77F0, + 9505: 0x77F1, + 9506: 0x77F2, + 9507: 0x77F4, + 9508: 0x77F5, + 9509: 0x77F7, + 9510: 0x77F9, + 9511: 0x77FA, + 9512: 0x77FB, + 9513: 0x77FC, + 9514: 0x7803, + 9515: 0x7804, + 9516: 0x7805, + 9517: 0x7806, + 9518: 0x7807, + 9519: 0x7808, + 9520: 0x780A, + 9521: 0x780B, + 9522: 0x780E, + 9523: 0x780F, + 9524: 0x7810, + 9525: 0x7813, + 9526: 0x7815, + 9527: 0x7819, + 9528: 0x781B, + 9529: 0x781E, + 9530: 0x7820, + 9531: 0x7821, + 9532: 0x7822, + 9533: 0x7824, + 9534: 0x7828, + 9535: 0x782A, + 9536: 0x782B, + 9537: 0x782E, + 9538: 0x782F, + 9539: 0x7831, + 9540: 0x7832, + 9541: 0x7833, + 9542: 0x7835, + 9543: 0x7836, + 9544: 0x783D, + 9545: 0x783F, + 9546: 0x7841, + 9547: 0x7842, + 9548: 0x7843, + 9549: 0x7844, + 9550: 0x7846, + 9551: 0x7848, + 9552: 0x7849, + 9553: 0x784A, + 9554: 0x784B, + 9555: 0x784D, + 9556: 0x784F, + 9557: 0x7851, + 9558: 0x7853, + 9559: 0x7854, + 9560: 0x7858, + 9561: 0x7859, + 9562: 0x785A, + 9563: 0x785B, + 9564: 0x785C, + 9565: 0x785E, + 9566: 0x785F, + 9567: 0x7860, + 9568: 0x7861, + 9569: 0x7862, + 9570: 0x7863, + 9571: 0x7864, + 9572: 0x7865, + 9573: 0x7866, + 9574: 0x7867, + 9575: 0x7868, + 9576: 0x7869, + 9577: 0x786F, + 9578: 0x7870, + 9579: 0x7871, + 9580: 0x7872, + 9581: 0x7873, + 9582: 0x7874, + 9583: 0x7875, + 9584: 0x7876, + 9585: 0x7878, + 9586: 0x7879, + 9587: 0x787A, + 9588: 0x787B, + 9589: 0x787D, + 9590: 0x787E, + 9591: 0x787F, + 9592: 0x7880, + 9593: 0x7881, + 9594: 0x7882, + 9595: 0x7883, + 9596: 0x573A, + 9597: 0x5C1D, + 9598: 0x5E38, + 9599: 0x957F, + 9600: 0x507F, + 9601: 0x80A0, + 9602: 0x5382, + 9603: 0x655E, + 9604: 0x7545, + 9605: 0x5531, + 9606: 0x5021, + 9607: 0x8D85, + 9608: 0x6284, + 9609: 0x949E, + 9610: 0x671D, + 9611: 0x5632, + 9612: 0x6F6E, + 9613: 0x5DE2, + 9614: 0x5435, + 9615: 0x7092, + 9616: 0x8F66, + 9617: 0x626F, + 9618: 0x64A4, + 9619: 0x63A3, + 9620: 0x5F7B, + 9621: 0x6F88, + 9622: 0x90F4, + 9623: 0x81E3, + 9624: 0x8FB0, + 9625: 0x5C18, + 9626: 0x6668, + 9627: 0x5FF1, + 9628: 0x6C89, + 9629: 0x9648, + 9630: 0x8D81, + 9631: 0x886C, + 9632: 0x6491, + 9633: 0x79F0, + 9634: 0x57CE, + 9635: 0x6A59, + 9636: 0x6210, + 9637: 0x5448, + 9638: 0x4E58, + 9639: 0x7A0B, + 9640: 0x60E9, + 9641: 0x6F84, + 9642: 0x8BDA, + 9643: 0x627F, + 9644: 0x901E, + 9645: 0x9A8B, + 9646: 0x79E4, + 9647: 0x5403, + 9648: 0x75F4, + 9649: 0x6301, + 9650: 0x5319, + 9651: 0x6C60, + 9652: 0x8FDF, + 9653: 0x5F1B, + 9654: 0x9A70, + 9655: 0x803B, + 9656: 0x9F7F, + 9657: 0x4F88, + 9658: 0x5C3A, + 9659: 0x8D64, + 9660: 0x7FC5, + 9661: 0x65A5, + 9662: 0x70BD, + 9663: 0x5145, + 9664: 0x51B2, + 9665: 0x866B, + 9666: 0x5D07, + 9667: 0x5BA0, + 9668: 0x62BD, + 9669: 0x916C, + 9670: 0x7574, + 9671: 0x8E0C, + 9672: 0x7A20, + 9673: 0x6101, + 9674: 0x7B79, + 9675: 0x4EC7, + 9676: 0x7EF8, + 9677: 0x7785, + 9678: 0x4E11, + 9679: 0x81ED, + 9680: 0x521D, + 9681: 0x51FA, + 9682: 0x6A71, + 9683: 0x53A8, + 9684: 0x8E87, + 9685: 0x9504, + 9686: 0x96CF, + 9687: 0x6EC1, + 9688: 0x9664, + 9689: 0x695A, + 9690: 0x7884, + 9691: 0x7885, + 9692: 0x7886, + 9693: 0x7888, + 9694: 0x788A, + 9695: 0x788B, + 9696: 0x788F, + 9697: 0x7890, + 9698: 0x7892, + 9699: 0x7894, + 9700: 0x7895, + 9701: 0x7896, + 9702: 0x7899, + 9703: 0x789D, + 9704: 0x789E, + 9705: 0x78A0, + 9706: 0x78A2, + 9707: 0x78A4, + 9708: 0x78A6, + 9709: 0x78A8, + 9710: 0x78A9, + 9711: 0x78AA, + 9712: 0x78AB, + 9713: 0x78AC, + 9714: 0x78AD, + 9715: 0x78AE, + 9716: 0x78AF, + 9717: 0x78B5, + 9718: 0x78B6, + 9719: 0x78B7, + 9720: 0x78B8, + 9721: 0x78BA, + 9722: 0x78BB, + 9723: 0x78BC, + 9724: 0x78BD, + 9725: 0x78BF, + 9726: 0x78C0, + 9727: 0x78C2, + 9728: 0x78C3, + 9729: 0x78C4, + 9730: 0x78C6, + 9731: 0x78C7, + 9732: 0x78C8, + 9733: 0x78CC, + 9734: 0x78CD, + 9735: 0x78CE, + 9736: 0x78CF, + 9737: 0x78D1, + 9738: 0x78D2, + 9739: 0x78D3, + 9740: 0x78D6, + 9741: 0x78D7, + 9742: 0x78D8, + 9743: 0x78DA, + 9744: 0x78DB, + 9745: 0x78DC, + 9746: 0x78DD, + 9747: 0x78DE, + 9748: 0x78DF, + 9749: 0x78E0, + 9750: 0x78E1, + 9751: 0x78E2, + 9752: 0x78E3, + 9753: 0x78E4, + 9754: 0x78E5, + 9755: 0x78E6, + 9756: 0x78E7, + 9757: 0x78E9, + 9758: 0x78EA, + 9759: 0x78EB, + 9760: 0x78ED, + 9761: 0x78EE, + 9762: 0x78EF, + 9763: 0x78F0, + 9764: 0x78F1, + 9765: 0x78F3, + 9766: 0x78F5, + 9767: 0x78F6, + 9768: 0x78F8, + 9769: 0x78F9, + 9770: 0x78FB, + 9771: 0x78FC, + 9772: 0x78FD, + 9773: 0x78FE, + 9774: 0x78FF, + 9775: 0x7900, + 9776: 0x7902, + 9777: 0x7903, + 9778: 0x7904, + 9779: 0x7906, + 9780: 0x7907, + 9781: 0x7908, + 9782: 0x7909, + 9783: 0x790A, + 9784: 0x790B, + 9785: 0x790C, + 9786: 0x7840, + 9787: 0x50A8, + 9788: 0x77D7, + 9789: 0x6410, + 9790: 0x89E6, + 9791: 0x5904, + 9792: 0x63E3, + 9793: 0x5DDD, + 9794: 0x7A7F, + 9795: 0x693D, + 9796: 0x4F20, + 9797: 0x8239, + 9798: 0x5598, + 9799: 0x4E32, + 9800: 0x75AE, + 9801: 0x7A97, + 9802: 0x5E62, + 9803: 0x5E8A, + 9804: 0x95EF, + 9805: 0x521B, + 9806: 0x5439, + 9807: 0x708A, + 9808: 0x6376, + 9809: 0x9524, + 9810: 0x5782, + 9811: 0x6625, + 9812: 0x693F, + 9813: 0x9187, + 9814: 0x5507, + 9815: 0x6DF3, + 9816: 0x7EAF, + 9817: 0x8822, + 9818: 0x6233, + 9819: 0x7EF0, + 9820: 0x75B5, + 9821: 0x8328, + 9822: 0x78C1, + 9823: 0x96CC, + 9824: 0x8F9E, + 9825: 0x6148, + 9826: 0x74F7, + 9827: 0x8BCD, + 9828: 0x6B64, + 9829: 0x523A, + 9830: 0x8D50, + 9831: 0x6B21, + 9832: 0x806A, + 9833: 0x8471, + 9834: 0x56F1, + 9835: 0x5306, + 9836: 0x4ECE, + 9837: 0x4E1B, + 9838: 0x51D1, + 9839: 0x7C97, + 9840: 0x918B, + 9841: 0x7C07, + 9842: 0x4FC3, + 9843: 0x8E7F, + 9844: 0x7BE1, + 9845: 0x7A9C, + 9846: 0x6467, + 9847: 0x5D14, + 9848: 0x50AC, + 9849: 0x8106, + 9850: 0x7601, + 9851: 0x7CB9, + 9852: 0x6DEC, + 9853: 0x7FE0, + 9854: 0x6751, + 9855: 0x5B58, + 9856: 0x5BF8, + 9857: 0x78CB, + 9858: 0x64AE, + 9859: 0x6413, + 9860: 0x63AA, + 9861: 0x632B, + 9862: 0x9519, + 9863: 0x642D, + 9864: 0x8FBE, + 9865: 0x7B54, + 9866: 0x7629, + 9867: 0x6253, + 9868: 0x5927, + 9869: 0x5446, + 9870: 0x6B79, + 9871: 0x50A3, + 9872: 0x6234, + 9873: 0x5E26, + 9874: 0x6B86, + 9875: 0x4EE3, + 9876: 0x8D37, + 9877: 0x888B, + 9878: 0x5F85, + 9879: 0x902E, + 9880: 0x790D, + 9881: 0x790E, + 9882: 0x790F, + 9883: 0x7910, + 9884: 0x7911, + 9885: 0x7912, + 9886: 0x7914, + 9887: 0x7915, + 9888: 0x7916, + 9889: 0x7917, + 9890: 0x7918, + 9891: 0x7919, + 9892: 0x791A, + 9893: 0x791B, + 9894: 0x791C, + 9895: 0x791D, + 9896: 0x791F, + 9897: 0x7920, + 9898: 0x7921, + 9899: 0x7922, + 9900: 0x7923, + 9901: 0x7925, + 9902: 0x7926, + 9903: 0x7927, + 9904: 0x7928, + 9905: 0x7929, + 9906: 0x792A, + 9907: 0x792B, + 9908: 0x792C, + 9909: 0x792D, + 9910: 0x792E, + 9911: 0x792F, + 9912: 0x7930, + 9913: 0x7931, + 9914: 0x7932, + 9915: 0x7933, + 9916: 0x7935, + 9917: 0x7936, + 9918: 0x7937, + 9919: 0x7938, + 9920: 0x7939, + 9921: 0x793D, + 9922: 0x793F, + 9923: 0x7942, + 9924: 0x7943, + 9925: 0x7944, + 9926: 0x7945, + 9927: 0x7947, + 9928: 0x794A, + 9929: 0x794B, + 9930: 0x794C, + 9931: 0x794D, + 9932: 0x794E, + 9933: 0x794F, + 9934: 0x7950, + 9935: 0x7951, + 9936: 0x7952, + 9937: 0x7954, + 9938: 0x7955, + 9939: 0x7958, + 9940: 0x7959, + 9941: 0x7961, + 9942: 0x7963, + 9943: 0x7964, + 9944: 0x7966, + 9945: 0x7969, + 9946: 0x796A, + 9947: 0x796B, + 9948: 0x796C, + 9949: 0x796E, + 9950: 0x7970, + 9951: 0x7971, + 9952: 0x7972, + 9953: 0x7973, + 9954: 0x7974, + 9955: 0x7975, + 9956: 0x7976, + 9957: 0x7979, + 9958: 0x797B, + 9959: 0x797C, + 9960: 0x797D, + 9961: 0x797E, + 9962: 0x797F, + 9963: 0x7982, + 9964: 0x7983, + 9965: 0x7986, + 9966: 0x7987, + 9967: 0x7988, + 9968: 0x7989, + 9969: 0x798B, + 9970: 0x798C, + 9971: 0x798D, + 9972: 0x798E, + 9973: 0x7990, + 9974: 0x7991, + 9975: 0x7992, + 9976: 0x6020, + 9977: 0x803D, + 9978: 0x62C5, + 9979: 0x4E39, + 9980: 0x5355, + 9981: 0x90F8, + 9982: 0x63B8, + 9983: 0x80C6, + 9984: 0x65E6, + 9985: 0x6C2E, + 9986: 0x4F46, + 9987: 0x60EE, + 9988: 0x6DE1, + 9989: 0x8BDE, + 9990: 0x5F39, + 9991: 0x86CB, + 9992: 0x5F53, + 9993: 0x6321, + 9994: 0x515A, + 9995: 0x8361, + 9996: 0x6863, + 9997: 0x5200, + 9998: 0x6363, + 9999: 0x8E48, + 10000: 0x5012, + 10001: 0x5C9B, + 10002: 0x7977, + 10003: 0x5BFC, + 10004: 0x5230, + 10005: 0x7A3B, + 10006: 0x60BC, + 10007: 0x9053, + 10008: 0x76D7, + 10009: 0x5FB7, + 10010: 0x5F97, + 10011: 0x7684, + 10012: 0x8E6C, + 10013: 0x706F, + 10014: 0x767B, + 10015: 0x7B49, + 10016: 0x77AA, + 10017: 0x51F3, + 10018: 0x9093, + 10019: 0x5824, + 10020: 0x4F4E, + 10021: 0x6EF4, + 10022: 0x8FEA, + 10023: 0x654C, + 10024: 0x7B1B, + 10025: 0x72C4, + 10026: 0x6DA4, + 10027: 0x7FDF, + 10028: 0x5AE1, + 10029: 0x62B5, + 10030: 0x5E95, + 10031: 0x5730, + 10032: 0x8482, + 10033: 0x7B2C, + 10034: 0x5E1D, + 10035: 0x5F1F, + 10036: 0x9012, + 10037: 0x7F14, + 10038: 0x98A0, + 10039: 0x6382, + 10040: 0x6EC7, + 10041: 0x7898, + 10042: 0x70B9, + 10043: 0x5178, + 10044: 0x975B, + 10045: 0x57AB, + 10046: 0x7535, + 10047: 0x4F43, + 10048: 0x7538, + 10049: 0x5E97, + 10050: 0x60E6, + 10051: 0x5960, + 10052: 0x6DC0, + 10053: 0x6BBF, + 10054: 0x7889, + 10055: 0x53FC, + 10056: 0x96D5, + 10057: 0x51CB, + 10058: 0x5201, + 10059: 0x6389, + 10060: 0x540A, + 10061: 0x9493, + 10062: 0x8C03, + 10063: 0x8DCC, + 10064: 0x7239, + 10065: 0x789F, + 10066: 0x8776, + 10067: 0x8FED, + 10068: 0x8C0D, + 10069: 0x53E0, + 10070: 0x7993, + 10071: 0x7994, + 10072: 0x7995, + 10073: 0x7996, + 10074: 0x7997, + 10075: 0x7998, + 10076: 0x7999, + 10077: 0x799B, + 10078: 0x799C, + 10079: 0x799D, + 10080: 0x799E, + 10081: 0x799F, + 10082: 0x79A0, + 10083: 0x79A1, + 10084: 0x79A2, + 10085: 0x79A3, + 10086: 0x79A4, + 10087: 0x79A5, + 10088: 0x79A6, + 10089: 0x79A8, + 10090: 0x79A9, + 10091: 0x79AA, + 10092: 0x79AB, + 10093: 0x79AC, + 10094: 0x79AD, + 10095: 0x79AE, + 10096: 0x79AF, + 10097: 0x79B0, + 10098: 0x79B1, + 10099: 0x79B2, + 10100: 0x79B4, + 10101: 0x79B5, + 10102: 0x79B6, + 10103: 0x79B7, + 10104: 0x79B8, + 10105: 0x79BC, + 10106: 0x79BF, + 10107: 0x79C2, + 10108: 0x79C4, + 10109: 0x79C5, + 10110: 0x79C7, + 10111: 0x79C8, + 10112: 0x79CA, + 10113: 0x79CC, + 10114: 0x79CE, + 10115: 0x79CF, + 10116: 0x79D0, + 10117: 0x79D3, + 10118: 0x79D4, + 10119: 0x79D6, + 10120: 0x79D7, + 10121: 0x79D9, + 10122: 0x79DA, + 10123: 0x79DB, + 10124: 0x79DC, + 10125: 0x79DD, + 10126: 0x79DE, + 10127: 0x79E0, + 10128: 0x79E1, + 10129: 0x79E2, + 10130: 0x79E5, + 10131: 0x79E8, + 10132: 0x79EA, + 10133: 0x79EC, + 10134: 0x79EE, + 10135: 0x79F1, + 10136: 0x79F2, + 10137: 0x79F3, + 10138: 0x79F4, + 10139: 0x79F5, + 10140: 0x79F6, + 10141: 0x79F7, + 10142: 0x79F9, + 10143: 0x79FA, + 10144: 0x79FC, + 10145: 0x79FE, + 10146: 0x79FF, + 10147: 0x7A01, + 10148: 0x7A04, + 10149: 0x7A05, + 10150: 0x7A07, + 10151: 0x7A08, + 10152: 0x7A09, + 10153: 0x7A0A, + 10154: 0x7A0C, + 10155: 0x7A0F, + 10156: 0x7A10, + 10157: 0x7A11, + 10158: 0x7A12, + 10159: 0x7A13, + 10160: 0x7A15, + 10161: 0x7A16, + 10162: 0x7A18, + 10163: 0x7A19, + 10164: 0x7A1B, + 10165: 0x7A1C, + 10166: 0x4E01, + 10167: 0x76EF, + 10168: 0x53EE, + 10169: 0x9489, + 10170: 0x9876, + 10171: 0x9F0E, + 10172: 0x952D, + 10173: 0x5B9A, + 10174: 0x8BA2, + 10175: 0x4E22, + 10176: 0x4E1C, + 10177: 0x51AC, + 10178: 0x8463, + 10179: 0x61C2, + 10180: 0x52A8, + 10181: 0x680B, + 10182: 0x4F97, + 10183: 0x606B, + 10184: 0x51BB, + 10185: 0x6D1E, + 10186: 0x515C, + 10187: 0x6296, + 10188: 0x6597, + 10189: 0x9661, + 10190: 0x8C46, + 10191: 0x9017, + 10192: 0x75D8, + 10193: 0x90FD, + 10194: 0x7763, + 10195: 0x6BD2, + 10196: 0x728A, + 10197: 0x72EC, + 10198: 0x8BFB, + 10199: 0x5835, + 10200: 0x7779, + 10201: 0x8D4C, + 10202: 0x675C, + 10203: 0x9540, + 10204: 0x809A, + 10205: 0x5EA6, + 10206: 0x6E21, + 10207: 0x5992, + 10208: 0x7AEF, + 10209: 0x77ED, + 10210: 0x953B, + 10211: 0x6BB5, + 10212: 0x65AD, + 10213: 0x7F0E, + 10214: 0x5806, + 10215: 0x5151, + 10216: 0x961F, + 10217: 0x5BF9, + 10218: 0x58A9, + 10219: 0x5428, + 10220: 0x8E72, + 10221: 0x6566, + 10222: 0x987F, + 10223: 0x56E4, + 10224: 0x949D, + 10225: 0x76FE, + 10226: 0x9041, + 10227: 0x6387, + 10228: 0x54C6, + 10229: 0x591A, + 10230: 0x593A, + 10231: 0x579B, + 10232: 0x8EB2, + 10233: 0x6735, + 10234: 0x8DFA, + 10235: 0x8235, + 10236: 0x5241, + 10237: 0x60F0, + 10238: 0x5815, + 10239: 0x86FE, + 10240: 0x5CE8, + 10241: 0x9E45, + 10242: 0x4FC4, + 10243: 0x989D, + 10244: 0x8BB9, + 10245: 0x5A25, + 10246: 0x6076, + 10247: 0x5384, + 10248: 0x627C, + 10249: 0x904F, + 10250: 0x9102, + 10251: 0x997F, + 10252: 0x6069, + 10253: 0x800C, + 10254: 0x513F, + 10255: 0x8033, + 10256: 0x5C14, + 10257: 0x9975, + 10258: 0x6D31, + 10259: 0x4E8C, + 10260: 0x7A1D, + 10261: 0x7A1F, + 10262: 0x7A21, + 10263: 0x7A22, + 10264: 0x7A24, + 10265: 0x7A25, + 10266: 0x7A26, + 10267: 0x7A27, + 10268: 0x7A28, + 10269: 0x7A29, + 10270: 0x7A2A, + 10271: 0x7A2B, + 10272: 0x7A2C, + 10273: 0x7A2D, + 10274: 0x7A2E, + 10275: 0x7A2F, + 10276: 0x7A30, + 10277: 0x7A31, + 10278: 0x7A32, + 10279: 0x7A34, + 10280: 0x7A35, + 10281: 0x7A36, + 10282: 0x7A38, + 10283: 0x7A3A, + 10284: 0x7A3E, + 10285: 0x7A40, + 10286: 0x7A41, + 10287: 0x7A42, + 10288: 0x7A43, + 10289: 0x7A44, + 10290: 0x7A45, + 10291: 0x7A47, + 10292: 0x7A48, + 10293: 0x7A49, + 10294: 0x7A4A, + 10295: 0x7A4B, + 10296: 0x7A4C, + 10297: 0x7A4D, + 10298: 0x7A4E, + 10299: 0x7A4F, + 10300: 0x7A50, + 10301: 0x7A52, + 10302: 0x7A53, + 10303: 0x7A54, + 10304: 0x7A55, + 10305: 0x7A56, + 10306: 0x7A58, + 10307: 0x7A59, + 10308: 0x7A5A, + 10309: 0x7A5B, + 10310: 0x7A5C, + 10311: 0x7A5D, + 10312: 0x7A5E, + 10313: 0x7A5F, + 10314: 0x7A60, + 10315: 0x7A61, + 10316: 0x7A62, + 10317: 0x7A63, + 10318: 0x7A64, + 10319: 0x7A65, + 10320: 0x7A66, + 10321: 0x7A67, + 10322: 0x7A68, + 10323: 0x7A69, + 10324: 0x7A6A, + 10325: 0x7A6B, + 10326: 0x7A6C, + 10327: 0x7A6D, + 10328: 0x7A6E, + 10329: 0x7A6F, + 10330: 0x7A71, + 10331: 0x7A72, + 10332: 0x7A73, + 10333: 0x7A75, + 10334: 0x7A7B, + 10335: 0x7A7C, + 10336: 0x7A7D, + 10337: 0x7A7E, + 10338: 0x7A82, + 10339: 0x7A85, + 10340: 0x7A87, + 10341: 0x7A89, + 10342: 0x7A8A, + 10343: 0x7A8B, + 10344: 0x7A8C, + 10345: 0x7A8E, + 10346: 0x7A8F, + 10347: 0x7A90, + 10348: 0x7A93, + 10349: 0x7A94, + 10350: 0x7A99, + 10351: 0x7A9A, + 10352: 0x7A9B, + 10353: 0x7A9E, + 10354: 0x7AA1, + 10355: 0x7AA2, + 10356: 0x8D30, + 10357: 0x53D1, + 10358: 0x7F5A, + 10359: 0x7B4F, + 10360: 0x4F10, + 10361: 0x4E4F, + 10362: 0x9600, + 10363: 0x6CD5, + 10364: 0x73D0, + 10365: 0x85E9, + 10366: 0x5E06, + 10367: 0x756A, + 10368: 0x7FFB, + 10369: 0x6A0A, + 10370: 0x77FE, + 10371: 0x9492, + 10372: 0x7E41, + 10373: 0x51E1, + 10374: 0x70E6, + 10375: 0x53CD, + 10376: 0x8FD4, + 10377: 0x8303, + 10378: 0x8D29, + 10379: 0x72AF, + 10380: 0x996D, + 10381: 0x6CDB, + 10382: 0x574A, + 10383: 0x82B3, + 10384: 0x65B9, + 10385: 0x80AA, + 10386: 0x623F, + 10387: 0x9632, + 10388: 0x59A8, + 10389: 0x4EFF, + 10390: 0x8BBF, + 10391: 0x7EBA, + 10392: 0x653E, + 10393: 0x83F2, + 10394: 0x975E, + 10395: 0x5561, + 10396: 0x98DE, + 10397: 0x80A5, + 10398: 0x532A, + 10399: 0x8BFD, + 10400: 0x5420, + 10401: 0x80BA, + 10402: 0x5E9F, + 10403: 0x6CB8, + 10404: 0x8D39, + 10405: 0x82AC, + 10406: 0x915A, + 10407: 0x5429, + 10408: 0x6C1B, + 10409: 0x5206, + 10410: 0x7EB7, + 10411: 0x575F, + 10412: 0x711A, + 10413: 0x6C7E, + 10414: 0x7C89, + 10415: 0x594B, + 10416: 0x4EFD, + 10417: 0x5FFF, + 10418: 0x6124, + 10419: 0x7CAA, + 10420: 0x4E30, + 10421: 0x5C01, + 10422: 0x67AB, + 10423: 0x8702, + 10424: 0x5CF0, + 10425: 0x950B, + 10426: 0x98CE, + 10427: 0x75AF, + 10428: 0x70FD, + 10429: 0x9022, + 10430: 0x51AF, + 10431: 0x7F1D, + 10432: 0x8BBD, + 10433: 0x5949, + 10434: 0x51E4, + 10435: 0x4F5B, + 10436: 0x5426, + 10437: 0x592B, + 10438: 0x6577, + 10439: 0x80A4, + 10440: 0x5B75, + 10441: 0x6276, + 10442: 0x62C2, + 10443: 0x8F90, + 10444: 0x5E45, + 10445: 0x6C1F, + 10446: 0x7B26, + 10447: 0x4F0F, + 10448: 0x4FD8, + 10449: 0x670D, + 10450: 0x7AA3, + 10451: 0x7AA4, + 10452: 0x7AA7, + 10453: 0x7AA9, + 10454: 0x7AAA, + 10455: 0x7AAB, + 10456: 0x7AAE, + 10457: 0x7AAF, + 10458: 0x7AB0, + 10459: 0x7AB1, + 10460: 0x7AB2, + 10461: 0x7AB4, + 10462: 0x7AB5, + 10463: 0x7AB6, + 10464: 0x7AB7, + 10465: 0x7AB8, + 10466: 0x7AB9, + 10467: 0x7ABA, + 10468: 0x7ABB, + 10469: 0x7ABC, + 10470: 0x7ABD, + 10471: 0x7ABE, + 10472: 0x7AC0, + 10473: 0x7AC1, + 10474: 0x7AC2, + 10475: 0x7AC3, + 10476: 0x7AC4, + 10477: 0x7AC5, + 10478: 0x7AC6, + 10479: 0x7AC7, + 10480: 0x7AC8, + 10481: 0x7AC9, + 10482: 0x7ACA, + 10483: 0x7ACC, + 10484: 0x7ACD, + 10485: 0x7ACE, + 10486: 0x7ACF, + 10487: 0x7AD0, + 10488: 0x7AD1, + 10489: 0x7AD2, + 10490: 0x7AD3, + 10491: 0x7AD4, + 10492: 0x7AD5, + 10493: 0x7AD7, + 10494: 0x7AD8, + 10495: 0x7ADA, + 10496: 0x7ADB, + 10497: 0x7ADC, + 10498: 0x7ADD, + 10499: 0x7AE1, + 10500: 0x7AE2, + 10501: 0x7AE4, + 10502: 0x7AE7, + 10503: 0x7AE8, + 10504: 0x7AE9, + 10505: 0x7AEA, + 10506: 0x7AEB, + 10507: 0x7AEC, + 10508: 0x7AEE, + 10509: 0x7AF0, + 10510: 0x7AF1, + 10511: 0x7AF2, + 10512: 0x7AF3, + 10513: 0x7AF4, + 10514: 0x7AF5, + 10515: 0x7AF6, + 10516: 0x7AF7, + 10517: 0x7AF8, + 10518: 0x7AFB, + 10519: 0x7AFC, + 10520: 0x7AFE, + 10521: 0x7B00, + 10522: 0x7B01, + 10523: 0x7B02, + 10524: 0x7B05, + 10525: 0x7B07, + 10526: 0x7B09, + 10527: 0x7B0C, + 10528: 0x7B0D, + 10529: 0x7B0E, + 10530: 0x7B10, + 10531: 0x7B12, + 10532: 0x7B13, + 10533: 0x7B16, + 10534: 0x7B17, + 10535: 0x7B18, + 10536: 0x7B1A, + 10537: 0x7B1C, + 10538: 0x7B1D, + 10539: 0x7B1F, + 10540: 0x7B21, + 10541: 0x7B22, + 10542: 0x7B23, + 10543: 0x7B27, + 10544: 0x7B29, + 10545: 0x7B2D, + 10546: 0x6D6E, + 10547: 0x6DAA, + 10548: 0x798F, + 10549: 0x88B1, + 10550: 0x5F17, + 10551: 0x752B, + 10552: 0x629A, + 10553: 0x8F85, + 10554: 0x4FEF, + 10555: 0x91DC, + 10556: 0x65A7, + 10557: 0x812F, + 10558: 0x8151, + 10559: 0x5E9C, + 10560: 0x8150, + 10561: 0x8D74, + 10562: 0x526F, + 10563: 0x8986, + 10564: 0x8D4B, + 10565: 0x590D, + 10566: 0x5085, + 10567: 0x4ED8, + 10568: 0x961C, + 10569: 0x7236, + 10570: 0x8179, + 10571: 0x8D1F, + 10572: 0x5BCC, + 10573: 0x8BA3, + 10574: 0x9644, + 10575: 0x5987, + 10576: 0x7F1A, + 10577: 0x5490, + 10578: 0x5676, + 10579: 0x560E, + 10580: 0x8BE5, + 10581: 0x6539, + 10582: 0x6982, + 10583: 0x9499, + 10584: 0x76D6, + 10585: 0x6E89, + 10586: 0x5E72, + 10587: 0x7518, + 10588: 0x6746, + 10589: 0x67D1, + 10590: 0x7AFF, + 10591: 0x809D, + 10592: 0x8D76, + 10593: 0x611F, + 10594: 0x79C6, + 10595: 0x6562, + 10596: 0x8D63, + 10597: 0x5188, + 10598: 0x521A, + 10599: 0x94A2, + 10600: 0x7F38, + 10601: 0x809B, + 10602: 0x7EB2, + 10603: 0x5C97, + 10604: 0x6E2F, + 10605: 0x6760, + 10606: 0x7BD9, + 10607: 0x768B, + 10608: 0x9AD8, + 10609: 0x818F, + 10610: 0x7F94, + 10611: 0x7CD5, + 10612: 0x641E, + 10613: 0x9550, + 10614: 0x7A3F, + 10615: 0x544A, + 10616: 0x54E5, + 10617: 0x6B4C, + 10618: 0x6401, + 10619: 0x6208, + 10620: 0x9E3D, + 10621: 0x80F3, + 10622: 0x7599, + 10623: 0x5272, + 10624: 0x9769, + 10625: 0x845B, + 10626: 0x683C, + 10627: 0x86E4, + 10628: 0x9601, + 10629: 0x9694, + 10630: 0x94EC, + 10631: 0x4E2A, + 10632: 0x5404, + 10633: 0x7ED9, + 10634: 0x6839, + 10635: 0x8DDF, + 10636: 0x8015, + 10637: 0x66F4, + 10638: 0x5E9A, + 10639: 0x7FB9, + 10640: 0x7B2F, + 10641: 0x7B30, + 10642: 0x7B32, + 10643: 0x7B34, + 10644: 0x7B35, + 10645: 0x7B36, + 10646: 0x7B37, + 10647: 0x7B39, + 10648: 0x7B3B, + 10649: 0x7B3D, + 10650: 0x7B3F, + 10651: 0x7B40, + 10652: 0x7B41, + 10653: 0x7B42, + 10654: 0x7B43, + 10655: 0x7B44, + 10656: 0x7B46, + 10657: 0x7B48, + 10658: 0x7B4A, + 10659: 0x7B4D, + 10660: 0x7B4E, + 10661: 0x7B53, + 10662: 0x7B55, + 10663: 0x7B57, + 10664: 0x7B59, + 10665: 0x7B5C, + 10666: 0x7B5E, + 10667: 0x7B5F, + 10668: 0x7B61, + 10669: 0x7B63, + 10670: 0x7B64, + 10671: 0x7B65, + 10672: 0x7B66, + 10673: 0x7B67, + 10674: 0x7B68, + 10675: 0x7B69, + 10676: 0x7B6A, + 10677: 0x7B6B, + 10678: 0x7B6C, + 10679: 0x7B6D, + 10680: 0x7B6F, + 10681: 0x7B70, + 10682: 0x7B73, + 10683: 0x7B74, + 10684: 0x7B76, + 10685: 0x7B78, + 10686: 0x7B7A, + 10687: 0x7B7C, + 10688: 0x7B7D, + 10689: 0x7B7F, + 10690: 0x7B81, + 10691: 0x7B82, + 10692: 0x7B83, + 10693: 0x7B84, + 10694: 0x7B86, + 10695: 0x7B87, + 10696: 0x7B88, + 10697: 0x7B89, + 10698: 0x7B8A, + 10699: 0x7B8B, + 10700: 0x7B8C, + 10701: 0x7B8E, + 10702: 0x7B8F, + 10703: 0x7B91, + 10704: 0x7B92, + 10705: 0x7B93, + 10706: 0x7B96, + 10707: 0x7B98, + 10708: 0x7B99, + 10709: 0x7B9A, + 10710: 0x7B9B, + 10711: 0x7B9E, + 10712: 0x7B9F, + 10713: 0x7BA0, + 10714: 0x7BA3, + 10715: 0x7BA4, + 10716: 0x7BA5, + 10717: 0x7BAE, + 10718: 0x7BAF, + 10719: 0x7BB0, + 10720: 0x7BB2, + 10721: 0x7BB3, + 10722: 0x7BB5, + 10723: 0x7BB6, + 10724: 0x7BB7, + 10725: 0x7BB9, + 10726: 0x7BBA, + 10727: 0x7BBB, + 10728: 0x7BBC, + 10729: 0x7BBD, + 10730: 0x7BBE, + 10731: 0x7BBF, + 10732: 0x7BC0, + 10733: 0x7BC2, + 10734: 0x7BC3, + 10735: 0x7BC4, + 10736: 0x57C2, + 10737: 0x803F, + 10738: 0x6897, + 10739: 0x5DE5, + 10740: 0x653B, + 10741: 0x529F, + 10742: 0x606D, + 10743: 0x9F9A, + 10744: 0x4F9B, + 10745: 0x8EAC, + 10746: 0x516C, + 10747: 0x5BAB, + 10748: 0x5F13, + 10749: 0x5DE9, + 10750: 0x6C5E, + 10751: 0x62F1, + 10752: 0x8D21, + 10753: 0x5171, + 10754: 0x94A9, + 10755: 0x52FE, + 10756: 0x6C9F, + 10757: 0x82DF, + 10758: 0x72D7, + 10759: 0x57A2, + 10760: 0x6784, + 10761: 0x8D2D, + 10762: 0x591F, + 10763: 0x8F9C, + 10764: 0x83C7, + 10765: 0x5495, + 10766: 0x7B8D, + 10767: 0x4F30, + 10768: 0x6CBD, + 10769: 0x5B64, + 10770: 0x59D1, + 10771: 0x9F13, + 10772: 0x53E4, + 10773: 0x86CA, + 10774: 0x9AA8, + 10775: 0x8C37, + 10776: 0x80A1, + 10777: 0x6545, + 10778: 0x987E, + 10779: 0x56FA, + 10780: 0x96C7, + 10781: 0x522E, + 10782: 0x74DC, + 10783: 0x5250, + 10784: 0x5BE1, + 10785: 0x6302, + 10786: 0x8902, + 10787: 0x4E56, + 10788: 0x62D0, + 10789: 0x602A, + 10790: 0x68FA, + 10791: 0x5173, + 10792: 0x5B98, + 10793: 0x51A0, + 10794: 0x89C2, + 10795: 0x7BA1, + 10796: 0x9986, + 10797: 0x7F50, + 10798: 0x60EF, + 10799: 0x704C, + 10800: 0x8D2F, + 10801: 0x5149, + 10802: 0x5E7F, + 10803: 0x901B, + 10804: 0x7470, + 10805: 0x89C4, + 10806: 0x572D, + 10807: 0x7845, + 10808: 0x5F52, + 10809: 0x9F9F, + 10810: 0x95FA, + 10811: 0x8F68, + 10812: 0x9B3C, + 10813: 0x8BE1, + 10814: 0x7678, + 10815: 0x6842, + 10816: 0x67DC, + 10817: 0x8DEA, + 10818: 0x8D35, + 10819: 0x523D, + 10820: 0x8F8A, + 10821: 0x6EDA, + 10822: 0x68CD, + 10823: 0x9505, + 10824: 0x90ED, + 10825: 0x56FD, + 10826: 0x679C, + 10827: 0x88F9, + 10828: 0x8FC7, + 10829: 0x54C8, + 10830: 0x7BC5, + 10831: 0x7BC8, + 10832: 0x7BC9, + 10833: 0x7BCA, + 10834: 0x7BCB, + 10835: 0x7BCD, + 10836: 0x7BCE, + 10837: 0x7BCF, + 10838: 0x7BD0, + 10839: 0x7BD2, + 10840: 0x7BD4, + 10841: 0x7BD5, + 10842: 0x7BD6, + 10843: 0x7BD7, + 10844: 0x7BD8, + 10845: 0x7BDB, + 10846: 0x7BDC, + 10847: 0x7BDE, + 10848: 0x7BDF, + 10849: 0x7BE0, + 10850: 0x7BE2, + 10851: 0x7BE3, + 10852: 0x7BE4, + 10853: 0x7BE7, + 10854: 0x7BE8, + 10855: 0x7BE9, + 10856: 0x7BEB, + 10857: 0x7BEC, + 10858: 0x7BED, + 10859: 0x7BEF, + 10860: 0x7BF0, + 10861: 0x7BF2, + 10862: 0x7BF3, + 10863: 0x7BF4, + 10864: 0x7BF5, + 10865: 0x7BF6, + 10866: 0x7BF8, + 10867: 0x7BF9, + 10868: 0x7BFA, + 10869: 0x7BFB, + 10870: 0x7BFD, + 10871: 0x7BFF, + 10872: 0x7C00, + 10873: 0x7C01, + 10874: 0x7C02, + 10875: 0x7C03, + 10876: 0x7C04, + 10877: 0x7C05, + 10878: 0x7C06, + 10879: 0x7C08, + 10880: 0x7C09, + 10881: 0x7C0A, + 10882: 0x7C0D, + 10883: 0x7C0E, + 10884: 0x7C10, + 10885: 0x7C11, + 10886: 0x7C12, + 10887: 0x7C13, + 10888: 0x7C14, + 10889: 0x7C15, + 10890: 0x7C17, + 10891: 0x7C18, + 10892: 0x7C19, + 10893: 0x7C1A, + 10894: 0x7C1B, + 10895: 0x7C1C, + 10896: 0x7C1D, + 10897: 0x7C1E, + 10898: 0x7C20, + 10899: 0x7C21, + 10900: 0x7C22, + 10901: 0x7C23, + 10902: 0x7C24, + 10903: 0x7C25, + 10904: 0x7C28, + 10905: 0x7C29, + 10906: 0x7C2B, + 10907: 0x7C2C, + 10908: 0x7C2D, + 10909: 0x7C2E, + 10910: 0x7C2F, + 10911: 0x7C30, + 10912: 0x7C31, + 10913: 0x7C32, + 10914: 0x7C33, + 10915: 0x7C34, + 10916: 0x7C35, + 10917: 0x7C36, + 10918: 0x7C37, + 10919: 0x7C39, + 10920: 0x7C3A, + 10921: 0x7C3B, + 10922: 0x7C3C, + 10923: 0x7C3D, + 10924: 0x7C3E, + 10925: 0x7C42, + 10926: 0x9AB8, + 10927: 0x5B69, + 10928: 0x6D77, + 10929: 0x6C26, + 10930: 0x4EA5, + 10931: 0x5BB3, + 10932: 0x9A87, + 10933: 0x9163, + 10934: 0x61A8, + 10935: 0x90AF, + 10936: 0x97E9, + 10937: 0x542B, + 10938: 0x6DB5, + 10939: 0x5BD2, + 10940: 0x51FD, + 10941: 0x558A, + 10942: 0x7F55, + 10943: 0x7FF0, + 10944: 0x64BC, + 10945: 0x634D, + 10946: 0x65F1, + 10947: 0x61BE, + 10948: 0x608D, + 10949: 0x710A, + 10950: 0x6C57, + 10951: 0x6C49, + 10952: 0x592F, + 10953: 0x676D, + 10954: 0x822A, + 10955: 0x58D5, + 10956: 0x568E, + 10957: 0x8C6A, + 10958: 0x6BEB, + 10959: 0x90DD, + 10960: 0x597D, + 10961: 0x8017, + 10962: 0x53F7, + 10963: 0x6D69, + 10964: 0x5475, + 10965: 0x559D, + 10966: 0x8377, + 10967: 0x83CF, + 10968: 0x6838, + 10969: 0x79BE, + 10970: 0x548C, + 10971: 0x4F55, + 10972: 0x5408, + 10973: 0x76D2, + 10974: 0x8C89, + 10975: 0x9602, + 10976: 0x6CB3, + 10977: 0x6DB8, + 10978: 0x8D6B, + 10979: 0x8910, + 10980: 0x9E64, + 10981: 0x8D3A, + 10982: 0x563F, + 10983: 0x9ED1, + 10984: 0x75D5, + 10985: 0x5F88, + 10986: 0x72E0, + 10987: 0x6068, + 10988: 0x54FC, + 10989: 0x4EA8, + 10990: 0x6A2A, + 10991: 0x8861, + 10992: 0x6052, + 10993: 0x8F70, + 10994: 0x54C4, + 10995: 0x70D8, + 10996: 0x8679, + 10997: 0x9E3F, + 10998: 0x6D2A, + 10999: 0x5B8F, + 11000: 0x5F18, + 11001: 0x7EA2, + 11002: 0x5589, + 11003: 0x4FAF, + 11004: 0x7334, + 11005: 0x543C, + 11006: 0x539A, + 11007: 0x5019, + 11008: 0x540E, + 11009: 0x547C, + 11010: 0x4E4E, + 11011: 0x5FFD, + 11012: 0x745A, + 11013: 0x58F6, + 11014: 0x846B, + 11015: 0x80E1, + 11016: 0x8774, + 11017: 0x72D0, + 11018: 0x7CCA, + 11019: 0x6E56, + 11020: 0x7C43, + 11021: 0x7C44, + 11022: 0x7C45, + 11023: 0x7C46, + 11024: 0x7C47, + 11025: 0x7C48, + 11026: 0x7C49, + 11027: 0x7C4A, + 11028: 0x7C4B, + 11029: 0x7C4C, + 11030: 0x7C4E, + 11031: 0x7C4F, + 11032: 0x7C50, + 11033: 0x7C51, + 11034: 0x7C52, + 11035: 0x7C53, + 11036: 0x7C54, + 11037: 0x7C55, + 11038: 0x7C56, + 11039: 0x7C57, + 11040: 0x7C58, + 11041: 0x7C59, + 11042: 0x7C5A, + 11043: 0x7C5B, + 11044: 0x7C5C, + 11045: 0x7C5D, + 11046: 0x7C5E, + 11047: 0x7C5F, + 11048: 0x7C60, + 11049: 0x7C61, + 11050: 0x7C62, + 11051: 0x7C63, + 11052: 0x7C64, + 11053: 0x7C65, + 11054: 0x7C66, + 11055: 0x7C67, + 11056: 0x7C68, + 11057: 0x7C69, + 11058: 0x7C6A, + 11059: 0x7C6B, + 11060: 0x7C6C, + 11061: 0x7C6D, + 11062: 0x7C6E, + 11063: 0x7C6F, + 11064: 0x7C70, + 11065: 0x7C71, + 11066: 0x7C72, + 11067: 0x7C75, + 11068: 0x7C76, + 11069: 0x7C77, + 11070: 0x7C78, + 11071: 0x7C79, + 11072: 0x7C7A, + 11073: 0x7C7E, + 11074: 0x7C7F, + 11075: 0x7C80, + 11076: 0x7C81, + 11077: 0x7C82, + 11078: 0x7C83, + 11079: 0x7C84, + 11080: 0x7C85, + 11081: 0x7C86, + 11082: 0x7C87, + 11083: 0x7C88, + 11084: 0x7C8A, + 11085: 0x7C8B, + 11086: 0x7C8C, + 11087: 0x7C8D, + 11088: 0x7C8E, + 11089: 0x7C8F, + 11090: 0x7C90, + 11091: 0x7C93, + 11092: 0x7C94, + 11093: 0x7C96, + 11094: 0x7C99, + 11095: 0x7C9A, + 11096: 0x7C9B, + 11097: 0x7CA0, + 11098: 0x7CA1, + 11099: 0x7CA3, + 11100: 0x7CA6, + 11101: 0x7CA7, + 11102: 0x7CA8, + 11103: 0x7CA9, + 11104: 0x7CAB, + 11105: 0x7CAC, + 11106: 0x7CAD, + 11107: 0x7CAF, + 11108: 0x7CB0, + 11109: 0x7CB4, + 11110: 0x7CB5, + 11111: 0x7CB6, + 11112: 0x7CB7, + 11113: 0x7CB8, + 11114: 0x7CBA, + 11115: 0x7CBB, + 11116: 0x5F27, + 11117: 0x864E, + 11118: 0x552C, + 11119: 0x62A4, + 11120: 0x4E92, + 11121: 0x6CAA, + 11122: 0x6237, + 11123: 0x82B1, + 11124: 0x54D7, + 11125: 0x534E, + 11126: 0x733E, + 11127: 0x6ED1, + 11128: 0x753B, + 11129: 0x5212, + 11130: 0x5316, + 11131: 0x8BDD, + 11132: 0x69D0, + 11133: 0x5F8A, + 11134: 0x6000, + 11135: 0x6DEE, + 11136: 0x574F, + 11137: 0x6B22, + 11138: 0x73AF, + 11139: 0x6853, + 11140: 0x8FD8, + 11141: 0x7F13, + 11142: 0x6362, + 11143: 0x60A3, + 11144: 0x5524, + 11145: 0x75EA, + 11146: 0x8C62, + 11147: 0x7115, + 11148: 0x6DA3, + 11149: 0x5BA6, + 11150: 0x5E7B, + 11151: 0x8352, + 11152: 0x614C, + 11153: 0x9EC4, + 11154: 0x78FA, + 11155: 0x8757, + 11156: 0x7C27, + 11157: 0x7687, + 11158: 0x51F0, + 11159: 0x60F6, + 11160: 0x714C, + 11161: 0x6643, + 11162: 0x5E4C, + 11163: 0x604D, + 11164: 0x8C0E, + 11165: 0x7070, + 11166: 0x6325, + 11167: 0x8F89, + 11168: 0x5FBD, + 11169: 0x6062, + 11170: 0x86D4, + 11171: 0x56DE, + 11172: 0x6BC1, + 11173: 0x6094, + 11174: 0x6167, + 11175: 0x5349, + 11176: 0x60E0, + 11177: 0x6666, + 11178: 0x8D3F, + 11179: 0x79FD, + 11180: 0x4F1A, + 11181: 0x70E9, + 11182: 0x6C47, + 11183: 0x8BB3, + 11184: 0x8BF2, + 11185: 0x7ED8, + 11186: 0x8364, + 11187: 0x660F, + 11188: 0x5A5A, + 11189: 0x9B42, + 11190: 0x6D51, + 11191: 0x6DF7, + 11192: 0x8C41, + 11193: 0x6D3B, + 11194: 0x4F19, + 11195: 0x706B, + 11196: 0x83B7, + 11197: 0x6216, + 11198: 0x60D1, + 11199: 0x970D, + 11200: 0x8D27, + 11201: 0x7978, + 11202: 0x51FB, + 11203: 0x573E, + 11204: 0x57FA, + 11205: 0x673A, + 11206: 0x7578, + 11207: 0x7A3D, + 11208: 0x79EF, + 11209: 0x7B95, + 11210: 0x7CBF, + 11211: 0x7CC0, + 11212: 0x7CC2, + 11213: 0x7CC3, + 11214: 0x7CC4, + 11215: 0x7CC6, + 11216: 0x7CC9, + 11217: 0x7CCB, + 11218: 0x7CCE, + 11219: 0x7CCF, + 11220: 0x7CD0, + 11221: 0x7CD1, + 11222: 0x7CD2, + 11223: 0x7CD3, + 11224: 0x7CD4, + 11225: 0x7CD8, + 11226: 0x7CDA, + 11227: 0x7CDB, + 11228: 0x7CDD, + 11229: 0x7CDE, + 11230: 0x7CE1, + 11231: 0x7CE2, + 11232: 0x7CE3, + 11233: 0x7CE4, + 11234: 0x7CE5, + 11235: 0x7CE6, + 11236: 0x7CE7, + 11237: 0x7CE9, + 11238: 0x7CEA, + 11239: 0x7CEB, + 11240: 0x7CEC, + 11241: 0x7CED, + 11242: 0x7CEE, + 11243: 0x7CF0, + 11244: 0x7CF1, + 11245: 0x7CF2, + 11246: 0x7CF3, + 11247: 0x7CF4, + 11248: 0x7CF5, + 11249: 0x7CF6, + 11250: 0x7CF7, + 11251: 0x7CF9, + 11252: 0x7CFA, + 11253: 0x7CFC, + 11254: 0x7CFD, + 11255: 0x7CFE, + 11256: 0x7CFF, + 11257: 0x7D00, + 11258: 0x7D01, + 11259: 0x7D02, + 11260: 0x7D03, + 11261: 0x7D04, + 11262: 0x7D05, + 11263: 0x7D06, + 11264: 0x7D07, + 11265: 0x7D08, + 11266: 0x7D09, + 11267: 0x7D0B, + 11268: 0x7D0C, + 11269: 0x7D0D, + 11270: 0x7D0E, + 11271: 0x7D0F, + 11272: 0x7D10, + 11273: 0x7D11, + 11274: 0x7D12, + 11275: 0x7D13, + 11276: 0x7D14, + 11277: 0x7D15, + 11278: 0x7D16, + 11279: 0x7D17, + 11280: 0x7D18, + 11281: 0x7D19, + 11282: 0x7D1A, + 11283: 0x7D1B, + 11284: 0x7D1C, + 11285: 0x7D1D, + 11286: 0x7D1E, + 11287: 0x7D1F, + 11288: 0x7D21, + 11289: 0x7D23, + 11290: 0x7D24, + 11291: 0x7D25, + 11292: 0x7D26, + 11293: 0x7D28, + 11294: 0x7D29, + 11295: 0x7D2A, + 11296: 0x7D2C, + 11297: 0x7D2D, + 11298: 0x7D2E, + 11299: 0x7D30, + 11300: 0x7D31, + 11301: 0x7D32, + 11302: 0x7D33, + 11303: 0x7D34, + 11304: 0x7D35, + 11305: 0x7D36, + 11306: 0x808C, + 11307: 0x9965, + 11308: 0x8FF9, + 11309: 0x6FC0, + 11310: 0x8BA5, + 11311: 0x9E21, + 11312: 0x59EC, + 11313: 0x7EE9, + 11314: 0x7F09, + 11315: 0x5409, + 11316: 0x6781, + 11317: 0x68D8, + 11318: 0x8F91, + 11319: 0x7C4D, + 11320: 0x96C6, + 11321: 0x53CA, + 11322: 0x6025, + 11323: 0x75BE, + 11324: 0x6C72, + 11325: 0x5373, + 11326: 0x5AC9, + 11327: 0x7EA7, + 11328: 0x6324, + 11329: 0x51E0, + 11330: 0x810A, + 11331: 0x5DF1, + 11332: 0x84DF, + 11333: 0x6280, + 11334: 0x5180, + 11335: 0x5B63, + 11336: 0x4F0E, + 11337: 0x796D, + 11338: 0x5242, + 11339: 0x60B8, + 11340: 0x6D4E, + 11341: 0x5BC4, + 11342: 0x5BC2, + 11343: 0x8BA1, + 11344: 0x8BB0, + 11345: 0x65E2, + 11346: 0x5FCC, + 11347: 0x9645, + 11348: 0x5993, + 11349: 0x7EE7, + 11350: 0x7EAA, + 11351: 0x5609, + 11352: 0x67B7, + 11353: 0x5939, + 11354: 0x4F73, + 11355: 0x5BB6, + 11356: 0x52A0, + 11357: 0x835A, + 11358: 0x988A, + 11359: 0x8D3E, + 11360: 0x7532, + 11361: 0x94BE, + 11362: 0x5047, + 11363: 0x7A3C, + 11364: 0x4EF7, + 11365: 0x67B6, + 11366: 0x9A7E, + 11367: 0x5AC1, + 11368: 0x6B7C, + 11369: 0x76D1, + 11370: 0x575A, + 11371: 0x5C16, + 11372: 0x7B3A, + 11373: 0x95F4, + 11374: 0x714E, + 11375: 0x517C, + 11376: 0x80A9, + 11377: 0x8270, + 11378: 0x5978, + 11379: 0x7F04, + 11380: 0x8327, + 11381: 0x68C0, + 11382: 0x67EC, + 11383: 0x78B1, + 11384: 0x7877, + 11385: 0x62E3, + 11386: 0x6361, + 11387: 0x7B80, + 11388: 0x4FED, + 11389: 0x526A, + 11390: 0x51CF, + 11391: 0x8350, + 11392: 0x69DB, + 11393: 0x9274, + 11394: 0x8DF5, + 11395: 0x8D31, + 11396: 0x89C1, + 11397: 0x952E, + 11398: 0x7BAD, + 11399: 0x4EF6, + 11400: 0x7D37, + 11401: 0x7D38, + 11402: 0x7D39, + 11403: 0x7D3A, + 11404: 0x7D3B, + 11405: 0x7D3C, + 11406: 0x7D3D, + 11407: 0x7D3E, + 11408: 0x7D3F, + 11409: 0x7D40, + 11410: 0x7D41, + 11411: 0x7D42, + 11412: 0x7D43, + 11413: 0x7D44, + 11414: 0x7D45, + 11415: 0x7D46, + 11416: 0x7D47, + 11417: 0x7D48, + 11418: 0x7D49, + 11419: 0x7D4A, + 11420: 0x7D4B, + 11421: 0x7D4C, + 11422: 0x7D4D, + 11423: 0x7D4E, + 11424: 0x7D4F, + 11425: 0x7D50, + 11426: 0x7D51, + 11427: 0x7D52, + 11428: 0x7D53, + 11429: 0x7D54, + 11430: 0x7D55, + 11431: 0x7D56, + 11432: 0x7D57, + 11433: 0x7D58, + 11434: 0x7D59, + 11435: 0x7D5A, + 11436: 0x7D5B, + 11437: 0x7D5C, + 11438: 0x7D5D, + 11439: 0x7D5E, + 11440: 0x7D5F, + 11441: 0x7D60, + 11442: 0x7D61, + 11443: 0x7D62, + 11444: 0x7D63, + 11445: 0x7D64, + 11446: 0x7D65, + 11447: 0x7D66, + 11448: 0x7D67, + 11449: 0x7D68, + 11450: 0x7D69, + 11451: 0x7D6A, + 11452: 0x7D6B, + 11453: 0x7D6C, + 11454: 0x7D6D, + 11455: 0x7D6F, + 11456: 0x7D70, + 11457: 0x7D71, + 11458: 0x7D72, + 11459: 0x7D73, + 11460: 0x7D74, + 11461: 0x7D75, + 11462: 0x7D76, + 11463: 0x7D78, + 11464: 0x7D79, + 11465: 0x7D7A, + 11466: 0x7D7B, + 11467: 0x7D7C, + 11468: 0x7D7D, + 11469: 0x7D7E, + 11470: 0x7D7F, + 11471: 0x7D80, + 11472: 0x7D81, + 11473: 0x7D82, + 11474: 0x7D83, + 11475: 0x7D84, + 11476: 0x7D85, + 11477: 0x7D86, + 11478: 0x7D87, + 11479: 0x7D88, + 11480: 0x7D89, + 11481: 0x7D8A, + 11482: 0x7D8B, + 11483: 0x7D8C, + 11484: 0x7D8D, + 11485: 0x7D8E, + 11486: 0x7D8F, + 11487: 0x7D90, + 11488: 0x7D91, + 11489: 0x7D92, + 11490: 0x7D93, + 11491: 0x7D94, + 11492: 0x7D95, + 11493: 0x7D96, + 11494: 0x7D97, + 11495: 0x7D98, + 11496: 0x5065, + 11497: 0x8230, + 11498: 0x5251, + 11499: 0x996F, + 11500: 0x6E10, + 11501: 0x6E85, + 11502: 0x6DA7, + 11503: 0x5EFA, + 11504: 0x50F5, + 11505: 0x59DC, + 11506: 0x5C06, + 11507: 0x6D46, + 11508: 0x6C5F, + 11509: 0x7586, + 11510: 0x848B, + 11511: 0x6868, + 11512: 0x5956, + 11513: 0x8BB2, + 11514: 0x5320, + 11515: 0x9171, + 11516: 0x964D, + 11517: 0x8549, + 11518: 0x6912, + 11519: 0x7901, + 11520: 0x7126, + 11521: 0x80F6, + 11522: 0x4EA4, + 11523: 0x90CA, + 11524: 0x6D47, + 11525: 0x9A84, + 11526: 0x5A07, + 11527: 0x56BC, + 11528: 0x6405, + 11529: 0x94F0, + 11530: 0x77EB, + 11531: 0x4FA5, + 11532: 0x811A, + 11533: 0x72E1, + 11534: 0x89D2, + 11535: 0x997A, + 11536: 0x7F34, + 11537: 0x7EDE, + 11538: 0x527F, + 11539: 0x6559, + 11540: 0x9175, + 11541: 0x8F7F, + 11542: 0x8F83, + 11543: 0x53EB, + 11544: 0x7A96, + 11545: 0x63ED, + 11546: 0x63A5, + 11547: 0x7686, + 11548: 0x79F8, + 11549: 0x8857, + 11550: 0x9636, + 11551: 0x622A, + 11552: 0x52AB, + 11553: 0x8282, + 11554: 0x6854, + 11555: 0x6770, + 11556: 0x6377, + 11557: 0x776B, + 11558: 0x7AED, + 11559: 0x6D01, + 11560: 0x7ED3, + 11561: 0x89E3, + 11562: 0x59D0, + 11563: 0x6212, + 11564: 0x85C9, + 11565: 0x82A5, + 11566: 0x754C, + 11567: 0x501F, + 11568: 0x4ECB, + 11569: 0x75A5, + 11570: 0x8BEB, + 11571: 0x5C4A, + 11572: 0x5DFE, + 11573: 0x7B4B, + 11574: 0x65A4, + 11575: 0x91D1, + 11576: 0x4ECA, + 11577: 0x6D25, + 11578: 0x895F, + 11579: 0x7D27, + 11580: 0x9526, + 11581: 0x4EC5, + 11582: 0x8C28, + 11583: 0x8FDB, + 11584: 0x9773, + 11585: 0x664B, + 11586: 0x7981, + 11587: 0x8FD1, + 11588: 0x70EC, + 11589: 0x6D78, + 11590: 0x7D99, + 11591: 0x7D9A, + 11592: 0x7D9B, + 11593: 0x7D9C, + 11594: 0x7D9D, + 11595: 0x7D9E, + 11596: 0x7D9F, + 11597: 0x7DA0, + 11598: 0x7DA1, + 11599: 0x7DA2, + 11600: 0x7DA3, + 11601: 0x7DA4, + 11602: 0x7DA5, + 11603: 0x7DA7, + 11604: 0x7DA8, + 11605: 0x7DA9, + 11606: 0x7DAA, + 11607: 0x7DAB, + 11608: 0x7DAC, + 11609: 0x7DAD, + 11610: 0x7DAF, + 11611: 0x7DB0, + 11612: 0x7DB1, + 11613: 0x7DB2, + 11614: 0x7DB3, + 11615: 0x7DB4, + 11616: 0x7DB5, + 11617: 0x7DB6, + 11618: 0x7DB7, + 11619: 0x7DB8, + 11620: 0x7DB9, + 11621: 0x7DBA, + 11622: 0x7DBB, + 11623: 0x7DBC, + 11624: 0x7DBD, + 11625: 0x7DBE, + 11626: 0x7DBF, + 11627: 0x7DC0, + 11628: 0x7DC1, + 11629: 0x7DC2, + 11630: 0x7DC3, + 11631: 0x7DC4, + 11632: 0x7DC5, + 11633: 0x7DC6, + 11634: 0x7DC7, + 11635: 0x7DC8, + 11636: 0x7DC9, + 11637: 0x7DCA, + 11638: 0x7DCB, + 11639: 0x7DCC, + 11640: 0x7DCD, + 11641: 0x7DCE, + 11642: 0x7DCF, + 11643: 0x7DD0, + 11644: 0x7DD1, + 11645: 0x7DD2, + 11646: 0x7DD3, + 11647: 0x7DD4, + 11648: 0x7DD5, + 11649: 0x7DD6, + 11650: 0x7DD7, + 11651: 0x7DD8, + 11652: 0x7DD9, + 11653: 0x7DDA, + 11654: 0x7DDB, + 11655: 0x7DDC, + 11656: 0x7DDD, + 11657: 0x7DDE, + 11658: 0x7DDF, + 11659: 0x7DE0, + 11660: 0x7DE1, + 11661: 0x7DE2, + 11662: 0x7DE3, + 11663: 0x7DE4, + 11664: 0x7DE5, + 11665: 0x7DE6, + 11666: 0x7DE7, + 11667: 0x7DE8, + 11668: 0x7DE9, + 11669: 0x7DEA, + 11670: 0x7DEB, + 11671: 0x7DEC, + 11672: 0x7DED, + 11673: 0x7DEE, + 11674: 0x7DEF, + 11675: 0x7DF0, + 11676: 0x7DF1, + 11677: 0x7DF2, + 11678: 0x7DF3, + 11679: 0x7DF4, + 11680: 0x7DF5, + 11681: 0x7DF6, + 11682: 0x7DF7, + 11683: 0x7DF8, + 11684: 0x7DF9, + 11685: 0x7DFA, + 11686: 0x5C3D, + 11687: 0x52B2, + 11688: 0x8346, + 11689: 0x5162, + 11690: 0x830E, + 11691: 0x775B, + 11692: 0x6676, + 11693: 0x9CB8, + 11694: 0x4EAC, + 11695: 0x60CA, + 11696: 0x7CBE, + 11697: 0x7CB3, + 11698: 0x7ECF, + 11699: 0x4E95, + 11700: 0x8B66, + 11701: 0x666F, + 11702: 0x9888, + 11703: 0x9759, + 11704: 0x5883, + 11705: 0x656C, + 11706: 0x955C, + 11707: 0x5F84, + 11708: 0x75C9, + 11709: 0x9756, + 11710: 0x7ADF, + 11711: 0x7ADE, + 11712: 0x51C0, + 11713: 0x70AF, + 11714: 0x7A98, + 11715: 0x63EA, + 11716: 0x7A76, + 11717: 0x7EA0, + 11718: 0x7396, + 11719: 0x97ED, + 11720: 0x4E45, + 11721: 0x7078, + 11722: 0x4E5D, + 11723: 0x9152, + 11724: 0x53A9, + 11725: 0x6551, + 11726: 0x65E7, + 11727: 0x81FC, + 11728: 0x8205, + 11729: 0x548E, + 11730: 0x5C31, + 11731: 0x759A, + 11732: 0x97A0, + 11733: 0x62D8, + 11734: 0x72D9, + 11735: 0x75BD, + 11736: 0x5C45, + 11737: 0x9A79, + 11738: 0x83CA, + 11739: 0x5C40, + 11740: 0x5480, + 11741: 0x77E9, + 11742: 0x4E3E, + 11743: 0x6CAE, + 11744: 0x805A, + 11745: 0x62D2, + 11746: 0x636E, + 11747: 0x5DE8, + 11748: 0x5177, + 11749: 0x8DDD, + 11750: 0x8E1E, + 11751: 0x952F, + 11752: 0x4FF1, + 11753: 0x53E5, + 11754: 0x60E7, + 11755: 0x70AC, + 11756: 0x5267, + 11757: 0x6350, + 11758: 0x9E43, + 11759: 0x5A1F, + 11760: 0x5026, + 11761: 0x7737, + 11762: 0x5377, + 11763: 0x7EE2, + 11764: 0x6485, + 11765: 0x652B, + 11766: 0x6289, + 11767: 0x6398, + 11768: 0x5014, + 11769: 0x7235, + 11770: 0x89C9, + 11771: 0x51B3, + 11772: 0x8BC0, + 11773: 0x7EDD, + 11774: 0x5747, + 11775: 0x83CC, + 11776: 0x94A7, + 11777: 0x519B, + 11778: 0x541B, + 11779: 0x5CFB, + 11780: 0x7DFB, + 11781: 0x7DFC, + 11782: 0x7DFD, + 11783: 0x7DFE, + 11784: 0x7DFF, + 11785: 0x7E00, + 11786: 0x7E01, + 11787: 0x7E02, + 11788: 0x7E03, + 11789: 0x7E04, + 11790: 0x7E05, + 11791: 0x7E06, + 11792: 0x7E07, + 11793: 0x7E08, + 11794: 0x7E09, + 11795: 0x7E0A, + 11796: 0x7E0B, + 11797: 0x7E0C, + 11798: 0x7E0D, + 11799: 0x7E0E, + 11800: 0x7E0F, + 11801: 0x7E10, + 11802: 0x7E11, + 11803: 0x7E12, + 11804: 0x7E13, + 11805: 0x7E14, + 11806: 0x7E15, + 11807: 0x7E16, + 11808: 0x7E17, + 11809: 0x7E18, + 11810: 0x7E19, + 11811: 0x7E1A, + 11812: 0x7E1B, + 11813: 0x7E1C, + 11814: 0x7E1D, + 11815: 0x7E1E, + 11816: 0x7E1F, + 11817: 0x7E20, + 11818: 0x7E21, + 11819: 0x7E22, + 11820: 0x7E23, + 11821: 0x7E24, + 11822: 0x7E25, + 11823: 0x7E26, + 11824: 0x7E27, + 11825: 0x7E28, + 11826: 0x7E29, + 11827: 0x7E2A, + 11828: 0x7E2B, + 11829: 0x7E2C, + 11830: 0x7E2D, + 11831: 0x7E2E, + 11832: 0x7E2F, + 11833: 0x7E30, + 11834: 0x7E31, + 11835: 0x7E32, + 11836: 0x7E33, + 11837: 0x7E34, + 11838: 0x7E35, + 11839: 0x7E36, + 11840: 0x7E37, + 11841: 0x7E38, + 11842: 0x7E39, + 11843: 0x7E3A, + 11844: 0x7E3C, + 11845: 0x7E3D, + 11846: 0x7E3E, + 11847: 0x7E3F, + 11848: 0x7E40, + 11849: 0x7E42, + 11850: 0x7E43, + 11851: 0x7E44, + 11852: 0x7E45, + 11853: 0x7E46, + 11854: 0x7E48, + 11855: 0x7E49, + 11856: 0x7E4A, + 11857: 0x7E4B, + 11858: 0x7E4C, + 11859: 0x7E4D, + 11860: 0x7E4E, + 11861: 0x7E4F, + 11862: 0x7E50, + 11863: 0x7E51, + 11864: 0x7E52, + 11865: 0x7E53, + 11866: 0x7E54, + 11867: 0x7E55, + 11868: 0x7E56, + 11869: 0x7E57, + 11870: 0x7E58, + 11871: 0x7E59, + 11872: 0x7E5A, + 11873: 0x7E5B, + 11874: 0x7E5C, + 11875: 0x7E5D, + 11876: 0x4FCA, + 11877: 0x7AE3, + 11878: 0x6D5A, + 11879: 0x90E1, + 11880: 0x9A8F, + 11881: 0x5580, + 11882: 0x5496, + 11883: 0x5361, + 11884: 0x54AF, + 11885: 0x5F00, + 11886: 0x63E9, + 11887: 0x6977, + 11888: 0x51EF, + 11889: 0x6168, + 11890: 0x520A, + 11891: 0x582A, + 11892: 0x52D8, + 11893: 0x574E, + 11894: 0x780D, + 11895: 0x770B, + 11896: 0x5EB7, + 11897: 0x6177, + 11898: 0x7CE0, + 11899: 0x625B, + 11900: 0x6297, + 11901: 0x4EA2, + 11902: 0x7095, + 11903: 0x8003, + 11904: 0x62F7, + 11905: 0x70E4, + 11906: 0x9760, + 11907: 0x5777, + 11908: 0x82DB, + 11909: 0x67EF, + 11910: 0x68F5, + 11911: 0x78D5, + 11912: 0x9897, + 11913: 0x79D1, + 11914: 0x58F3, + 11915: 0x54B3, + 11916: 0x53EF, + 11917: 0x6E34, + 11918: 0x514B, + 11919: 0x523B, + 11920: 0x5BA2, + 11921: 0x8BFE, + 11922: 0x80AF, + 11923: 0x5543, + 11924: 0x57A6, + 11925: 0x6073, + 11926: 0x5751, + 11927: 0x542D, + 11928: 0x7A7A, + 11929: 0x6050, + 11930: 0x5B54, + 11931: 0x63A7, + 11932: 0x62A0, + 11933: 0x53E3, + 11934: 0x6263, + 11935: 0x5BC7, + 11936: 0x67AF, + 11937: 0x54ED, + 11938: 0x7A9F, + 11939: 0x82E6, + 11940: 0x9177, + 11941: 0x5E93, + 11942: 0x88E4, + 11943: 0x5938, + 11944: 0x57AE, + 11945: 0x630E, + 11946: 0x8DE8, + 11947: 0x80EF, + 11948: 0x5757, + 11949: 0x7B77, + 11950: 0x4FA9, + 11951: 0x5FEB, + 11952: 0x5BBD, + 11953: 0x6B3E, + 11954: 0x5321, + 11955: 0x7B50, + 11956: 0x72C2, + 11957: 0x6846, + 11958: 0x77FF, + 11959: 0x7736, + 11960: 0x65F7, + 11961: 0x51B5, + 11962: 0x4E8F, + 11963: 0x76D4, + 11964: 0x5CBF, + 11965: 0x7AA5, + 11966: 0x8475, + 11967: 0x594E, + 11968: 0x9B41, + 11969: 0x5080, + 11970: 0x7E5E, + 11971: 0x7E5F, + 11972: 0x7E60, + 11973: 0x7E61, + 11974: 0x7E62, + 11975: 0x7E63, + 11976: 0x7E64, + 11977: 0x7E65, + 11978: 0x7E66, + 11979: 0x7E67, + 11980: 0x7E68, + 11981: 0x7E69, + 11982: 0x7E6A, + 11983: 0x7E6B, + 11984: 0x7E6C, + 11985: 0x7E6D, + 11986: 0x7E6E, + 11987: 0x7E6F, + 11988: 0x7E70, + 11989: 0x7E71, + 11990: 0x7E72, + 11991: 0x7E73, + 11992: 0x7E74, + 11993: 0x7E75, + 11994: 0x7E76, + 11995: 0x7E77, + 11996: 0x7E78, + 11997: 0x7E79, + 11998: 0x7E7A, + 11999: 0x7E7B, + 12000: 0x7E7C, + 12001: 0x7E7D, + 12002: 0x7E7E, + 12003: 0x7E7F, + 12004: 0x7E80, + 12005: 0x7E81, + 12006: 0x7E83, + 12007: 0x7E84, + 12008: 0x7E85, + 12009: 0x7E86, + 12010: 0x7E87, + 12011: 0x7E88, + 12012: 0x7E89, + 12013: 0x7E8A, + 12014: 0x7E8B, + 12015: 0x7E8C, + 12016: 0x7E8D, + 12017: 0x7E8E, + 12018: 0x7E8F, + 12019: 0x7E90, + 12020: 0x7E91, + 12021: 0x7E92, + 12022: 0x7E93, + 12023: 0x7E94, + 12024: 0x7E95, + 12025: 0x7E96, + 12026: 0x7E97, + 12027: 0x7E98, + 12028: 0x7E99, + 12029: 0x7E9A, + 12030: 0x7E9C, + 12031: 0x7E9D, + 12032: 0x7E9E, + 12033: 0x7EAE, + 12034: 0x7EB4, + 12035: 0x7EBB, + 12036: 0x7EBC, + 12037: 0x7ED6, + 12038: 0x7EE4, + 12039: 0x7EEC, + 12040: 0x7EF9, + 12041: 0x7F0A, + 12042: 0x7F10, + 12043: 0x7F1E, + 12044: 0x7F37, + 12045: 0x7F39, + 12046: 0x7F3B, + 12047: 0x7F3C, + 12048: 0x7F3D, + 12049: 0x7F3E, + 12050: 0x7F3F, + 12051: 0x7F40, + 12052: 0x7F41, + 12053: 0x7F43, + 12054: 0x7F46, + 12055: 0x7F47, + 12056: 0x7F48, + 12057: 0x7F49, + 12058: 0x7F4A, + 12059: 0x7F4B, + 12060: 0x7F4C, + 12061: 0x7F4D, + 12062: 0x7F4E, + 12063: 0x7F4F, + 12064: 0x7F52, + 12065: 0x7F53, + 12066: 0x9988, + 12067: 0x6127, + 12068: 0x6E83, + 12069: 0x5764, + 12070: 0x6606, + 12071: 0x6346, + 12072: 0x56F0, + 12073: 0x62EC, + 12074: 0x6269, + 12075: 0x5ED3, + 12076: 0x9614, + 12077: 0x5783, + 12078: 0x62C9, + 12079: 0x5587, + 12080: 0x8721, + 12081: 0x814A, + 12082: 0x8FA3, + 12083: 0x5566, + 12084: 0x83B1, + 12085: 0x6765, + 12086: 0x8D56, + 12087: 0x84DD, + 12088: 0x5A6A, + 12089: 0x680F, + 12090: 0x62E6, + 12091: 0x7BEE, + 12092: 0x9611, + 12093: 0x5170, + 12094: 0x6F9C, + 12095: 0x8C30, + 12096: 0x63FD, + 12097: 0x89C8, + 12098: 0x61D2, + 12099: 0x7F06, + 12100: 0x70C2, + 12101: 0x6EE5, + 12102: 0x7405, + 12103: 0x6994, + 12104: 0x72FC, + 12105: 0x5ECA, + 12106: 0x90CE, + 12107: 0x6717, + 12108: 0x6D6A, + 12109: 0x635E, + 12110: 0x52B3, + 12111: 0x7262, + 12112: 0x8001, + 12113: 0x4F6C, + 12114: 0x59E5, + 12115: 0x916A, + 12116: 0x70D9, + 12117: 0x6D9D, + 12118: 0x52D2, + 12119: 0x4E50, + 12120: 0x96F7, + 12121: 0x956D, + 12122: 0x857E, + 12123: 0x78CA, + 12124: 0x7D2F, + 12125: 0x5121, + 12126: 0x5792, + 12127: 0x64C2, + 12128: 0x808B, + 12129: 0x7C7B, + 12130: 0x6CEA, + 12131: 0x68F1, + 12132: 0x695E, + 12133: 0x51B7, + 12134: 0x5398, + 12135: 0x68A8, + 12136: 0x7281, + 12137: 0x9ECE, + 12138: 0x7BF1, + 12139: 0x72F8, + 12140: 0x79BB, + 12141: 0x6F13, + 12142: 0x7406, + 12143: 0x674E, + 12144: 0x91CC, + 12145: 0x9CA4, + 12146: 0x793C, + 12147: 0x8389, + 12148: 0x8354, + 12149: 0x540F, + 12150: 0x6817, + 12151: 0x4E3D, + 12152: 0x5389, + 12153: 0x52B1, + 12154: 0x783E, + 12155: 0x5386, + 12156: 0x5229, + 12157: 0x5088, + 12158: 0x4F8B, + 12159: 0x4FD0, + 12160: 0x7F56, + 12161: 0x7F59, + 12162: 0x7F5B, + 12163: 0x7F5C, + 12164: 0x7F5D, + 12165: 0x7F5E, + 12166: 0x7F60, + 12167: 0x7F63, + 12168: 0x7F64, + 12169: 0x7F65, + 12170: 0x7F66, + 12171: 0x7F67, + 12172: 0x7F6B, + 12173: 0x7F6C, + 12174: 0x7F6D, + 12175: 0x7F6F, + 12176: 0x7F70, + 12177: 0x7F73, + 12178: 0x7F75, + 12179: 0x7F76, + 12180: 0x7F77, + 12181: 0x7F78, + 12182: 0x7F7A, + 12183: 0x7F7B, + 12184: 0x7F7C, + 12185: 0x7F7D, + 12186: 0x7F7F, + 12187: 0x7F80, + 12188: 0x7F82, + 12189: 0x7F83, + 12190: 0x7F84, + 12191: 0x7F85, + 12192: 0x7F86, + 12193: 0x7F87, + 12194: 0x7F88, + 12195: 0x7F89, + 12196: 0x7F8B, + 12197: 0x7F8D, + 12198: 0x7F8F, + 12199: 0x7F90, + 12200: 0x7F91, + 12201: 0x7F92, + 12202: 0x7F93, + 12203: 0x7F95, + 12204: 0x7F96, + 12205: 0x7F97, + 12206: 0x7F98, + 12207: 0x7F99, + 12208: 0x7F9B, + 12209: 0x7F9C, + 12210: 0x7FA0, + 12211: 0x7FA2, + 12212: 0x7FA3, + 12213: 0x7FA5, + 12214: 0x7FA6, + 12215: 0x7FA8, + 12216: 0x7FA9, + 12217: 0x7FAA, + 12218: 0x7FAB, + 12219: 0x7FAC, + 12220: 0x7FAD, + 12221: 0x7FAE, + 12222: 0x7FB1, + 12223: 0x7FB3, + 12224: 0x7FB4, + 12225: 0x7FB5, + 12226: 0x7FB6, + 12227: 0x7FB7, + 12228: 0x7FBA, + 12229: 0x7FBB, + 12230: 0x7FBE, + 12231: 0x7FC0, + 12232: 0x7FC2, + 12233: 0x7FC3, + 12234: 0x7FC4, + 12235: 0x7FC6, + 12236: 0x7FC7, + 12237: 0x7FC8, + 12238: 0x7FC9, + 12239: 0x7FCB, + 12240: 0x7FCD, + 12241: 0x7FCF, + 12242: 0x7FD0, + 12243: 0x7FD1, + 12244: 0x7FD2, + 12245: 0x7FD3, + 12246: 0x7FD6, + 12247: 0x7FD7, + 12248: 0x7FD9, + 12249: 0x7FDA, + 12250: 0x7FDB, + 12251: 0x7FDC, + 12252: 0x7FDD, + 12253: 0x7FDE, + 12254: 0x7FE2, + 12255: 0x7FE3, + 12256: 0x75E2, + 12257: 0x7ACB, + 12258: 0x7C92, + 12259: 0x6CA5, + 12260: 0x96B6, + 12261: 0x529B, + 12262: 0x7483, + 12263: 0x54E9, + 12264: 0x4FE9, + 12265: 0x8054, + 12266: 0x83B2, + 12267: 0x8FDE, + 12268: 0x9570, + 12269: 0x5EC9, + 12270: 0x601C, + 12271: 0x6D9F, + 12272: 0x5E18, + 12273: 0x655B, + 12274: 0x8138, + 12275: 0x94FE, + 12276: 0x604B, + 12277: 0x70BC, + 12278: 0x7EC3, + 12279: 0x7CAE, + 12280: 0x51C9, + 12281: 0x6881, + 12282: 0x7CB1, + 12283: 0x826F, + 12284: 0x4E24, + 12285: 0x8F86, + 12286: 0x91CF, + 12287: 0x667E, + 12288: 0x4EAE, + 12289: 0x8C05, + 12290: 0x64A9, + 12291: 0x804A, + 12292: 0x50DA, + 12293: 0x7597, + 12294: 0x71CE, + 12295: 0x5BE5, + 12296: 0x8FBD, + 12297: 0x6F66, + 12298: 0x4E86, + 12299: 0x6482, + 12300: 0x9563, + 12301: 0x5ED6, + 12302: 0x6599, + 12303: 0x5217, + 12304: 0x88C2, + 12305: 0x70C8, + 12306: 0x52A3, + 12307: 0x730E, + 12308: 0x7433, + 12309: 0x6797, + 12310: 0x78F7, + 12311: 0x9716, + 12312: 0x4E34, + 12313: 0x90BB, + 12314: 0x9CDE, + 12315: 0x6DCB, + 12316: 0x51DB, + 12317: 0x8D41, + 12318: 0x541D, + 12319: 0x62CE, + 12320: 0x73B2, + 12321: 0x83F1, + 12322: 0x96F6, + 12323: 0x9F84, + 12324: 0x94C3, + 12325: 0x4F36, + 12326: 0x7F9A, + 12327: 0x51CC, + 12328: 0x7075, + 12329: 0x9675, + 12330: 0x5CAD, + 12331: 0x9886, + 12332: 0x53E6, + 12333: 0x4EE4, + 12334: 0x6E9C, + 12335: 0x7409, + 12336: 0x69B4, + 12337: 0x786B, + 12338: 0x998F, + 12339: 0x7559, + 12340: 0x5218, + 12341: 0x7624, + 12342: 0x6D41, + 12343: 0x67F3, + 12344: 0x516D, + 12345: 0x9F99, + 12346: 0x804B, + 12347: 0x5499, + 12348: 0x7B3C, + 12349: 0x7ABF, + 12350: 0x7FE4, + 12351: 0x7FE7, + 12352: 0x7FE8, + 12353: 0x7FEA, + 12354: 0x7FEB, + 12355: 0x7FEC, + 12356: 0x7FED, + 12357: 0x7FEF, + 12358: 0x7FF2, + 12359: 0x7FF4, + 12360: 0x7FF5, + 12361: 0x7FF6, + 12362: 0x7FF7, + 12363: 0x7FF8, + 12364: 0x7FF9, + 12365: 0x7FFA, + 12366: 0x7FFD, + 12367: 0x7FFE, + 12368: 0x7FFF, + 12369: 0x8002, + 12370: 0x8007, + 12371: 0x8008, + 12372: 0x8009, + 12373: 0x800A, + 12374: 0x800E, + 12375: 0x800F, + 12376: 0x8011, + 12377: 0x8013, + 12378: 0x801A, + 12379: 0x801B, + 12380: 0x801D, + 12381: 0x801E, + 12382: 0x801F, + 12383: 0x8021, + 12384: 0x8023, + 12385: 0x8024, + 12386: 0x802B, + 12387: 0x802C, + 12388: 0x802D, + 12389: 0x802E, + 12390: 0x802F, + 12391: 0x8030, + 12392: 0x8032, + 12393: 0x8034, + 12394: 0x8039, + 12395: 0x803A, + 12396: 0x803C, + 12397: 0x803E, + 12398: 0x8040, + 12399: 0x8041, + 12400: 0x8044, + 12401: 0x8045, + 12402: 0x8047, + 12403: 0x8048, + 12404: 0x8049, + 12405: 0x804E, + 12406: 0x804F, + 12407: 0x8050, + 12408: 0x8051, + 12409: 0x8053, + 12410: 0x8055, + 12411: 0x8056, + 12412: 0x8057, + 12413: 0x8059, + 12414: 0x805B, + 12415: 0x805C, + 12416: 0x805D, + 12417: 0x805E, + 12418: 0x805F, + 12419: 0x8060, + 12420: 0x8061, + 12421: 0x8062, + 12422: 0x8063, + 12423: 0x8064, + 12424: 0x8065, + 12425: 0x8066, + 12426: 0x8067, + 12427: 0x8068, + 12428: 0x806B, + 12429: 0x806C, + 12430: 0x806D, + 12431: 0x806E, + 12432: 0x806F, + 12433: 0x8070, + 12434: 0x8072, + 12435: 0x8073, + 12436: 0x8074, + 12437: 0x8075, + 12438: 0x8076, + 12439: 0x8077, + 12440: 0x8078, + 12441: 0x8079, + 12442: 0x807A, + 12443: 0x807B, + 12444: 0x807C, + 12445: 0x807D, + 12446: 0x9686, + 12447: 0x5784, + 12448: 0x62E2, + 12449: 0x9647, + 12450: 0x697C, + 12451: 0x5A04, + 12452: 0x6402, + 12453: 0x7BD3, + 12454: 0x6F0F, + 12455: 0x964B, + 12456: 0x82A6, + 12457: 0x5362, + 12458: 0x9885, + 12459: 0x5E90, + 12460: 0x7089, + 12461: 0x63B3, + 12462: 0x5364, + 12463: 0x864F, + 12464: 0x9C81, + 12465: 0x9E93, + 12466: 0x788C, + 12467: 0x9732, + 12468: 0x8DEF, + 12469: 0x8D42, + 12470: 0x9E7F, + 12471: 0x6F5E, + 12472: 0x7984, + 12473: 0x5F55, + 12474: 0x9646, + 12475: 0x622E, + 12476: 0x9A74, + 12477: 0x5415, + 12478: 0x94DD, + 12479: 0x4FA3, + 12480: 0x65C5, + 12481: 0x5C65, + 12482: 0x5C61, + 12483: 0x7F15, + 12484: 0x8651, + 12485: 0x6C2F, + 12486: 0x5F8B, + 12487: 0x7387, + 12488: 0x6EE4, + 12489: 0x7EFF, + 12490: 0x5CE6, + 12491: 0x631B, + 12492: 0x5B6A, + 12493: 0x6EE6, + 12494: 0x5375, + 12495: 0x4E71, + 12496: 0x63A0, + 12497: 0x7565, + 12498: 0x62A1, + 12499: 0x8F6E, + 12500: 0x4F26, + 12501: 0x4ED1, + 12502: 0x6CA6, + 12503: 0x7EB6, + 12504: 0x8BBA, + 12505: 0x841D, + 12506: 0x87BA, + 12507: 0x7F57, + 12508: 0x903B, + 12509: 0x9523, + 12510: 0x7BA9, + 12511: 0x9AA1, + 12512: 0x88F8, + 12513: 0x843D, + 12514: 0x6D1B, + 12515: 0x9A86, + 12516: 0x7EDC, + 12517: 0x5988, + 12518: 0x9EBB, + 12519: 0x739B, + 12520: 0x7801, + 12521: 0x8682, + 12522: 0x9A6C, + 12523: 0x9A82, + 12524: 0x561B, + 12525: 0x5417, + 12526: 0x57CB, + 12527: 0x4E70, + 12528: 0x9EA6, + 12529: 0x5356, + 12530: 0x8FC8, + 12531: 0x8109, + 12532: 0x7792, + 12533: 0x9992, + 12534: 0x86EE, + 12535: 0x6EE1, + 12536: 0x8513, + 12537: 0x66FC, + 12538: 0x6162, + 12539: 0x6F2B, + 12540: 0x807E, + 12541: 0x8081, + 12542: 0x8082, + 12543: 0x8085, + 12544: 0x8088, + 12545: 0x808A, + 12546: 0x808D, + 12547: 0x808E, + 12548: 0x808F, + 12549: 0x8090, + 12550: 0x8091, + 12551: 0x8092, + 12552: 0x8094, + 12553: 0x8095, + 12554: 0x8097, + 12555: 0x8099, + 12556: 0x809E, + 12557: 0x80A3, + 12558: 0x80A6, + 12559: 0x80A7, + 12560: 0x80A8, + 12561: 0x80AC, + 12562: 0x80B0, + 12563: 0x80B3, + 12564: 0x80B5, + 12565: 0x80B6, + 12566: 0x80B8, + 12567: 0x80B9, + 12568: 0x80BB, + 12569: 0x80C5, + 12570: 0x80C7, + 12571: 0x80C8, + 12572: 0x80C9, + 12573: 0x80CA, + 12574: 0x80CB, + 12575: 0x80CF, + 12576: 0x80D0, + 12577: 0x80D1, + 12578: 0x80D2, + 12579: 0x80D3, + 12580: 0x80D4, + 12581: 0x80D5, + 12582: 0x80D8, + 12583: 0x80DF, + 12584: 0x80E0, + 12585: 0x80E2, + 12586: 0x80E3, + 12587: 0x80E6, + 12588: 0x80EE, + 12589: 0x80F5, + 12590: 0x80F7, + 12591: 0x80F9, + 12592: 0x80FB, + 12593: 0x80FE, + 12594: 0x80FF, + 12595: 0x8100, + 12596: 0x8101, + 12597: 0x8103, + 12598: 0x8104, + 12599: 0x8105, + 12600: 0x8107, + 12601: 0x8108, + 12602: 0x810B, + 12603: 0x810C, + 12604: 0x8115, + 12605: 0x8117, + 12606: 0x8119, + 12607: 0x811B, + 12608: 0x811C, + 12609: 0x811D, + 12610: 0x811F, + 12611: 0x8120, + 12612: 0x8121, + 12613: 0x8122, + 12614: 0x8123, + 12615: 0x8124, + 12616: 0x8125, + 12617: 0x8126, + 12618: 0x8127, + 12619: 0x8128, + 12620: 0x8129, + 12621: 0x812A, + 12622: 0x812B, + 12623: 0x812D, + 12624: 0x812E, + 12625: 0x8130, + 12626: 0x8133, + 12627: 0x8134, + 12628: 0x8135, + 12629: 0x8137, + 12630: 0x8139, + 12631: 0x813A, + 12632: 0x813B, + 12633: 0x813C, + 12634: 0x813D, + 12635: 0x813F, + 12636: 0x8C29, + 12637: 0x8292, + 12638: 0x832B, + 12639: 0x76F2, + 12640: 0x6C13, + 12641: 0x5FD9, + 12642: 0x83BD, + 12643: 0x732B, + 12644: 0x8305, + 12645: 0x951A, + 12646: 0x6BDB, + 12647: 0x77DB, + 12648: 0x94C6, + 12649: 0x536F, + 12650: 0x8302, + 12651: 0x5192, + 12652: 0x5E3D, + 12653: 0x8C8C, + 12654: 0x8D38, + 12655: 0x4E48, + 12656: 0x73AB, + 12657: 0x679A, + 12658: 0x6885, + 12659: 0x9176, + 12660: 0x9709, + 12661: 0x7164, + 12662: 0x6CA1, + 12663: 0x7709, + 12664: 0x5A92, + 12665: 0x9541, + 12666: 0x6BCF, + 12667: 0x7F8E, + 12668: 0x6627, + 12669: 0x5BD0, + 12670: 0x59B9, + 12671: 0x5A9A, + 12672: 0x95E8, + 12673: 0x95F7, + 12674: 0x4EEC, + 12675: 0x840C, + 12676: 0x8499, + 12677: 0x6AAC, + 12678: 0x76DF, + 12679: 0x9530, + 12680: 0x731B, + 12681: 0x68A6, + 12682: 0x5B5F, + 12683: 0x772F, + 12684: 0x919A, + 12685: 0x9761, + 12686: 0x7CDC, + 12687: 0x8FF7, + 12688: 0x8C1C, + 12689: 0x5F25, + 12690: 0x7C73, + 12691: 0x79D8, + 12692: 0x89C5, + 12693: 0x6CCC, + 12694: 0x871C, + 12695: 0x5BC6, + 12696: 0x5E42, + 12697: 0x68C9, + 12698: 0x7720, + 12699: 0x7EF5, + 12700: 0x5195, + 12701: 0x514D, + 12702: 0x52C9, + 12703: 0x5A29, + 12704: 0x7F05, + 12705: 0x9762, + 12706: 0x82D7, + 12707: 0x63CF, + 12708: 0x7784, + 12709: 0x85D0, + 12710: 0x79D2, + 12711: 0x6E3A, + 12712: 0x5E99, + 12713: 0x5999, + 12714: 0x8511, + 12715: 0x706D, + 12716: 0x6C11, + 12717: 0x62BF, + 12718: 0x76BF, + 12719: 0x654F, + 12720: 0x60AF, + 12721: 0x95FD, + 12722: 0x660E, + 12723: 0x879F, + 12724: 0x9E23, + 12725: 0x94ED, + 12726: 0x540D, + 12727: 0x547D, + 12728: 0x8C2C, + 12729: 0x6478, + 12730: 0x8140, + 12731: 0x8141, + 12732: 0x8142, + 12733: 0x8143, + 12734: 0x8144, + 12735: 0x8145, + 12736: 0x8147, + 12737: 0x8149, + 12738: 0x814D, + 12739: 0x814E, + 12740: 0x814F, + 12741: 0x8152, + 12742: 0x8156, + 12743: 0x8157, + 12744: 0x8158, + 12745: 0x815B, + 12746: 0x815C, + 12747: 0x815D, + 12748: 0x815E, + 12749: 0x815F, + 12750: 0x8161, + 12751: 0x8162, + 12752: 0x8163, + 12753: 0x8164, + 12754: 0x8166, + 12755: 0x8168, + 12756: 0x816A, + 12757: 0x816B, + 12758: 0x816C, + 12759: 0x816F, + 12760: 0x8172, + 12761: 0x8173, + 12762: 0x8175, + 12763: 0x8176, + 12764: 0x8177, + 12765: 0x8178, + 12766: 0x8181, + 12767: 0x8183, + 12768: 0x8184, + 12769: 0x8185, + 12770: 0x8186, + 12771: 0x8187, + 12772: 0x8189, + 12773: 0x818B, + 12774: 0x818C, + 12775: 0x818D, + 12776: 0x818E, + 12777: 0x8190, + 12778: 0x8192, + 12779: 0x8193, + 12780: 0x8194, + 12781: 0x8195, + 12782: 0x8196, + 12783: 0x8197, + 12784: 0x8199, + 12785: 0x819A, + 12786: 0x819E, + 12787: 0x819F, + 12788: 0x81A0, + 12789: 0x81A1, + 12790: 0x81A2, + 12791: 0x81A4, + 12792: 0x81A5, + 12793: 0x81A7, + 12794: 0x81A9, + 12795: 0x81AB, + 12796: 0x81AC, + 12797: 0x81AD, + 12798: 0x81AE, + 12799: 0x81AF, + 12800: 0x81B0, + 12801: 0x81B1, + 12802: 0x81B2, + 12803: 0x81B4, + 12804: 0x81B5, + 12805: 0x81B6, + 12806: 0x81B7, + 12807: 0x81B8, + 12808: 0x81B9, + 12809: 0x81BC, + 12810: 0x81BD, + 12811: 0x81BE, + 12812: 0x81BF, + 12813: 0x81C4, + 12814: 0x81C5, + 12815: 0x81C7, + 12816: 0x81C8, + 12817: 0x81C9, + 12818: 0x81CB, + 12819: 0x81CD, + 12820: 0x81CE, + 12821: 0x81CF, + 12822: 0x81D0, + 12823: 0x81D1, + 12824: 0x81D2, + 12825: 0x81D3, + 12826: 0x6479, + 12827: 0x8611, + 12828: 0x6A21, + 12829: 0x819C, + 12830: 0x78E8, + 12831: 0x6469, + 12832: 0x9B54, + 12833: 0x62B9, + 12834: 0x672B, + 12835: 0x83AB, + 12836: 0x58A8, + 12837: 0x9ED8, + 12838: 0x6CAB, + 12839: 0x6F20, + 12840: 0x5BDE, + 12841: 0x964C, + 12842: 0x8C0B, + 12843: 0x725F, + 12844: 0x67D0, + 12845: 0x62C7, + 12846: 0x7261, + 12847: 0x4EA9, + 12848: 0x59C6, + 12849: 0x6BCD, + 12850: 0x5893, + 12851: 0x66AE, + 12852: 0x5E55, + 12853: 0x52DF, + 12854: 0x6155, + 12855: 0x6728, + 12856: 0x76EE, + 12857: 0x7766, + 12858: 0x7267, + 12859: 0x7A46, + 12860: 0x62FF, + 12861: 0x54EA, + 12862: 0x5450, + 12863: 0x94A0, + 12864: 0x90A3, + 12865: 0x5A1C, + 12866: 0x7EB3, + 12867: 0x6C16, + 12868: 0x4E43, + 12869: 0x5976, + 12870: 0x8010, + 12871: 0x5948, + 12872: 0x5357, + 12873: 0x7537, + 12874: 0x96BE, + 12875: 0x56CA, + 12876: 0x6320, + 12877: 0x8111, + 12878: 0x607C, + 12879: 0x95F9, + 12880: 0x6DD6, + 12881: 0x5462, + 12882: 0x9981, + 12883: 0x5185, + 12884: 0x5AE9, + 12885: 0x80FD, + 12886: 0x59AE, + 12887: 0x9713, + 12888: 0x502A, + 12889: 0x6CE5, + 12890: 0x5C3C, + 12891: 0x62DF, + 12892: 0x4F60, + 12893: 0x533F, + 12894: 0x817B, + 12895: 0x9006, + 12896: 0x6EBA, + 12897: 0x852B, + 12898: 0x62C8, + 12899: 0x5E74, + 12900: 0x78BE, + 12901: 0x64B5, + 12902: 0x637B, + 12903: 0x5FF5, + 12904: 0x5A18, + 12905: 0x917F, + 12906: 0x9E1F, + 12907: 0x5C3F, + 12908: 0x634F, + 12909: 0x8042, + 12910: 0x5B7D, + 12911: 0x556E, + 12912: 0x954A, + 12913: 0x954D, + 12914: 0x6D85, + 12915: 0x60A8, + 12916: 0x67E0, + 12917: 0x72DE, + 12918: 0x51DD, + 12919: 0x5B81, + 12920: 0x81D4, + 12921: 0x81D5, + 12922: 0x81D6, + 12923: 0x81D7, + 12924: 0x81D8, + 12925: 0x81D9, + 12926: 0x81DA, + 12927: 0x81DB, + 12928: 0x81DC, + 12929: 0x81DD, + 12930: 0x81DE, + 12931: 0x81DF, + 12932: 0x81E0, + 12933: 0x81E1, + 12934: 0x81E2, + 12935: 0x81E4, + 12936: 0x81E5, + 12937: 0x81E6, + 12938: 0x81E8, + 12939: 0x81E9, + 12940: 0x81EB, + 12941: 0x81EE, + 12942: 0x81EF, + 12943: 0x81F0, + 12944: 0x81F1, + 12945: 0x81F2, + 12946: 0x81F5, + 12947: 0x81F6, + 12948: 0x81F7, + 12949: 0x81F8, + 12950: 0x81F9, + 12951: 0x81FA, + 12952: 0x81FD, + 12953: 0x81FF, + 12954: 0x8203, + 12955: 0x8207, + 12956: 0x8208, + 12957: 0x8209, + 12958: 0x820A, + 12959: 0x820B, + 12960: 0x820E, + 12961: 0x820F, + 12962: 0x8211, + 12963: 0x8213, + 12964: 0x8215, + 12965: 0x8216, + 12966: 0x8217, + 12967: 0x8218, + 12968: 0x8219, + 12969: 0x821A, + 12970: 0x821D, + 12971: 0x8220, + 12972: 0x8224, + 12973: 0x8225, + 12974: 0x8226, + 12975: 0x8227, + 12976: 0x8229, + 12977: 0x822E, + 12978: 0x8232, + 12979: 0x823A, + 12980: 0x823C, + 12981: 0x823D, + 12982: 0x823F, + 12983: 0x8240, + 12984: 0x8241, + 12985: 0x8242, + 12986: 0x8243, + 12987: 0x8245, + 12988: 0x8246, + 12989: 0x8248, + 12990: 0x824A, + 12991: 0x824C, + 12992: 0x824D, + 12993: 0x824E, + 12994: 0x8250, + 12995: 0x8251, + 12996: 0x8252, + 12997: 0x8253, + 12998: 0x8254, + 12999: 0x8255, + 13000: 0x8256, + 13001: 0x8257, + 13002: 0x8259, + 13003: 0x825B, + 13004: 0x825C, + 13005: 0x825D, + 13006: 0x825E, + 13007: 0x8260, + 13008: 0x8261, + 13009: 0x8262, + 13010: 0x8263, + 13011: 0x8264, + 13012: 0x8265, + 13013: 0x8266, + 13014: 0x8267, + 13015: 0x8269, + 13016: 0x62E7, + 13017: 0x6CDE, + 13018: 0x725B, + 13019: 0x626D, + 13020: 0x94AE, + 13021: 0x7EBD, + 13022: 0x8113, + 13023: 0x6D53, + 13024: 0x519C, + 13025: 0x5F04, + 13026: 0x5974, + 13027: 0x52AA, + 13028: 0x6012, + 13029: 0x5973, + 13030: 0x6696, + 13031: 0x8650, + 13032: 0x759F, + 13033: 0x632A, + 13034: 0x61E6, + 13035: 0x7CEF, + 13036: 0x8BFA, + 13037: 0x54E6, + 13038: 0x6B27, + 13039: 0x9E25, + 13040: 0x6BB4, + 13041: 0x85D5, + 13042: 0x5455, + 13043: 0x5076, + 13044: 0x6CA4, + 13045: 0x556A, + 13046: 0x8DB4, + 13047: 0x722C, + 13048: 0x5E15, + 13049: 0x6015, + 13050: 0x7436, + 13051: 0x62CD, + 13052: 0x6392, + 13053: 0x724C, + 13054: 0x5F98, + 13055: 0x6E43, + 13056: 0x6D3E, + 13057: 0x6500, + 13058: 0x6F58, + 13059: 0x76D8, + 13060: 0x78D0, + 13061: 0x76FC, + 13062: 0x7554, + 13063: 0x5224, + 13064: 0x53DB, + 13065: 0x4E53, + 13066: 0x5E9E, + 13067: 0x65C1, + 13068: 0x802A, + 13069: 0x80D6, + 13070: 0x629B, + 13071: 0x5486, + 13072: 0x5228, + 13073: 0x70AE, + 13074: 0x888D, + 13075: 0x8DD1, + 13076: 0x6CE1, + 13077: 0x5478, + 13078: 0x80DA, + 13079: 0x57F9, + 13080: 0x88F4, + 13081: 0x8D54, + 13082: 0x966A, + 13083: 0x914D, + 13084: 0x4F69, + 13085: 0x6C9B, + 13086: 0x55B7, + 13087: 0x76C6, + 13088: 0x7830, + 13089: 0x62A8, + 13090: 0x70F9, + 13091: 0x6F8E, + 13092: 0x5F6D, + 13093: 0x84EC, + 13094: 0x68DA, + 13095: 0x787C, + 13096: 0x7BF7, + 13097: 0x81A8, + 13098: 0x670B, + 13099: 0x9E4F, + 13100: 0x6367, + 13101: 0x78B0, + 13102: 0x576F, + 13103: 0x7812, + 13104: 0x9739, + 13105: 0x6279, + 13106: 0x62AB, + 13107: 0x5288, + 13108: 0x7435, + 13109: 0x6BD7, + 13110: 0x826A, + 13111: 0x826B, + 13112: 0x826C, + 13113: 0x826D, + 13114: 0x8271, + 13115: 0x8275, + 13116: 0x8276, + 13117: 0x8277, + 13118: 0x8278, + 13119: 0x827B, + 13120: 0x827C, + 13121: 0x8280, + 13122: 0x8281, + 13123: 0x8283, + 13124: 0x8285, + 13125: 0x8286, + 13126: 0x8287, + 13127: 0x8289, + 13128: 0x828C, + 13129: 0x8290, + 13130: 0x8293, + 13131: 0x8294, + 13132: 0x8295, + 13133: 0x8296, + 13134: 0x829A, + 13135: 0x829B, + 13136: 0x829E, + 13137: 0x82A0, + 13138: 0x82A2, + 13139: 0x82A3, + 13140: 0x82A7, + 13141: 0x82B2, + 13142: 0x82B5, + 13143: 0x82B6, + 13144: 0x82BA, + 13145: 0x82BB, + 13146: 0x82BC, + 13147: 0x82BF, + 13148: 0x82C0, + 13149: 0x82C2, + 13150: 0x82C3, + 13151: 0x82C5, + 13152: 0x82C6, + 13153: 0x82C9, + 13154: 0x82D0, + 13155: 0x82D6, + 13156: 0x82D9, + 13157: 0x82DA, + 13158: 0x82DD, + 13159: 0x82E2, + 13160: 0x82E7, + 13161: 0x82E8, + 13162: 0x82E9, + 13163: 0x82EA, + 13164: 0x82EC, + 13165: 0x82ED, + 13166: 0x82EE, + 13167: 0x82F0, + 13168: 0x82F2, + 13169: 0x82F3, + 13170: 0x82F5, + 13171: 0x82F6, + 13172: 0x82F8, + 13173: 0x82FA, + 13174: 0x82FC, + 13175: 0x82FD, + 13176: 0x82FE, + 13177: 0x82FF, + 13178: 0x8300, + 13179: 0x830A, + 13180: 0x830B, + 13181: 0x830D, + 13182: 0x8310, + 13183: 0x8312, + 13184: 0x8313, + 13185: 0x8316, + 13186: 0x8318, + 13187: 0x8319, + 13188: 0x831D, + 13189: 0x831E, + 13190: 0x831F, + 13191: 0x8320, + 13192: 0x8321, + 13193: 0x8322, + 13194: 0x8323, + 13195: 0x8324, + 13196: 0x8325, + 13197: 0x8326, + 13198: 0x8329, + 13199: 0x832A, + 13200: 0x832E, + 13201: 0x8330, + 13202: 0x8332, + 13203: 0x8337, + 13204: 0x833B, + 13205: 0x833D, + 13206: 0x5564, + 13207: 0x813E, + 13208: 0x75B2, + 13209: 0x76AE, + 13210: 0x5339, + 13211: 0x75DE, + 13212: 0x50FB, + 13213: 0x5C41, + 13214: 0x8B6C, + 13215: 0x7BC7, + 13216: 0x504F, + 13217: 0x7247, + 13218: 0x9A97, + 13219: 0x98D8, + 13220: 0x6F02, + 13221: 0x74E2, + 13222: 0x7968, + 13223: 0x6487, + 13224: 0x77A5, + 13225: 0x62FC, + 13226: 0x9891, + 13227: 0x8D2B, + 13228: 0x54C1, + 13229: 0x8058, + 13230: 0x4E52, + 13231: 0x576A, + 13232: 0x82F9, + 13233: 0x840D, + 13234: 0x5E73, + 13235: 0x51ED, + 13236: 0x74F6, + 13237: 0x8BC4, + 13238: 0x5C4F, + 13239: 0x5761, + 13240: 0x6CFC, + 13241: 0x9887, + 13242: 0x5A46, + 13243: 0x7834, + 13244: 0x9B44, + 13245: 0x8FEB, + 13246: 0x7C95, + 13247: 0x5256, + 13248: 0x6251, + 13249: 0x94FA, + 13250: 0x4EC6, + 13251: 0x8386, + 13252: 0x8461, + 13253: 0x83E9, + 13254: 0x84B2, + 13255: 0x57D4, + 13256: 0x6734, + 13257: 0x5703, + 13258: 0x666E, + 13259: 0x6D66, + 13260: 0x8C31, + 13261: 0x66DD, + 13262: 0x7011, + 13263: 0x671F, + 13264: 0x6B3A, + 13265: 0x6816, + 13266: 0x621A, + 13267: 0x59BB, + 13268: 0x4E03, + 13269: 0x51C4, + 13270: 0x6F06, + 13271: 0x67D2, + 13272: 0x6C8F, + 13273: 0x5176, + 13274: 0x68CB, + 13275: 0x5947, + 13276: 0x6B67, + 13277: 0x7566, + 13278: 0x5D0E, + 13279: 0x8110, + 13280: 0x9F50, + 13281: 0x65D7, + 13282: 0x7948, + 13283: 0x7941, + 13284: 0x9A91, + 13285: 0x8D77, + 13286: 0x5C82, + 13287: 0x4E5E, + 13288: 0x4F01, + 13289: 0x542F, + 13290: 0x5951, + 13291: 0x780C, + 13292: 0x5668, + 13293: 0x6C14, + 13294: 0x8FC4, + 13295: 0x5F03, + 13296: 0x6C7D, + 13297: 0x6CE3, + 13298: 0x8BAB, + 13299: 0x6390, + 13300: 0x833E, + 13301: 0x833F, + 13302: 0x8341, + 13303: 0x8342, + 13304: 0x8344, + 13305: 0x8345, + 13306: 0x8348, + 13307: 0x834A, + 13308: 0x834B, + 13309: 0x834C, + 13310: 0x834D, + 13311: 0x834E, + 13312: 0x8353, + 13313: 0x8355, + 13314: 0x8356, + 13315: 0x8357, + 13316: 0x8358, + 13317: 0x8359, + 13318: 0x835D, + 13319: 0x8362, + 13320: 0x8370, + 13321: 0x8371, + 13322: 0x8372, + 13323: 0x8373, + 13324: 0x8374, + 13325: 0x8375, + 13326: 0x8376, + 13327: 0x8379, + 13328: 0x837A, + 13329: 0x837E, + 13330: 0x837F, + 13331: 0x8380, + 13332: 0x8381, + 13333: 0x8382, + 13334: 0x8383, + 13335: 0x8384, + 13336: 0x8387, + 13337: 0x8388, + 13338: 0x838A, + 13339: 0x838B, + 13340: 0x838C, + 13341: 0x838D, + 13342: 0x838F, + 13343: 0x8390, + 13344: 0x8391, + 13345: 0x8394, + 13346: 0x8395, + 13347: 0x8396, + 13348: 0x8397, + 13349: 0x8399, + 13350: 0x839A, + 13351: 0x839D, + 13352: 0x839F, + 13353: 0x83A1, + 13354: 0x83A2, + 13355: 0x83A3, + 13356: 0x83A4, + 13357: 0x83A5, + 13358: 0x83A6, + 13359: 0x83A7, + 13360: 0x83AC, + 13361: 0x83AD, + 13362: 0x83AE, + 13363: 0x83AF, + 13364: 0x83B5, + 13365: 0x83BB, + 13366: 0x83BE, + 13367: 0x83BF, + 13368: 0x83C2, + 13369: 0x83C3, + 13370: 0x83C4, + 13371: 0x83C6, + 13372: 0x83C8, + 13373: 0x83C9, + 13374: 0x83CB, + 13375: 0x83CD, + 13376: 0x83CE, + 13377: 0x83D0, + 13378: 0x83D1, + 13379: 0x83D2, + 13380: 0x83D3, + 13381: 0x83D5, + 13382: 0x83D7, + 13383: 0x83D9, + 13384: 0x83DA, + 13385: 0x83DB, + 13386: 0x83DE, + 13387: 0x83E2, + 13388: 0x83E3, + 13389: 0x83E4, + 13390: 0x83E6, + 13391: 0x83E7, + 13392: 0x83E8, + 13393: 0x83EB, + 13394: 0x83EC, + 13395: 0x83ED, + 13396: 0x6070, + 13397: 0x6D3D, + 13398: 0x7275, + 13399: 0x6266, + 13400: 0x948E, + 13401: 0x94C5, + 13402: 0x5343, + 13403: 0x8FC1, + 13404: 0x7B7E, + 13405: 0x4EDF, + 13406: 0x8C26, + 13407: 0x4E7E, + 13408: 0x9ED4, + 13409: 0x94B1, + 13410: 0x94B3, + 13411: 0x524D, + 13412: 0x6F5C, + 13413: 0x9063, + 13414: 0x6D45, + 13415: 0x8C34, + 13416: 0x5811, + 13417: 0x5D4C, + 13418: 0x6B20, + 13419: 0x6B49, + 13420: 0x67AA, + 13421: 0x545B, + 13422: 0x8154, + 13423: 0x7F8C, + 13424: 0x5899, + 13425: 0x8537, + 13426: 0x5F3A, + 13427: 0x62A2, + 13428: 0x6A47, + 13429: 0x9539, + 13430: 0x6572, + 13431: 0x6084, + 13432: 0x6865, + 13433: 0x77A7, + 13434: 0x4E54, + 13435: 0x4FA8, + 13436: 0x5DE7, + 13437: 0x9798, + 13438: 0x64AC, + 13439: 0x7FD8, + 13440: 0x5CED, + 13441: 0x4FCF, + 13442: 0x7A8D, + 13443: 0x5207, + 13444: 0x8304, + 13445: 0x4E14, + 13446: 0x602F, + 13447: 0x7A83, + 13448: 0x94A6, + 13449: 0x4FB5, + 13450: 0x4EB2, + 13451: 0x79E6, + 13452: 0x7434, + 13453: 0x52E4, + 13454: 0x82B9, + 13455: 0x64D2, + 13456: 0x79BD, + 13457: 0x5BDD, + 13458: 0x6C81, + 13459: 0x9752, + 13460: 0x8F7B, + 13461: 0x6C22, + 13462: 0x503E, + 13463: 0x537F, + 13464: 0x6E05, + 13465: 0x64CE, + 13466: 0x6674, + 13467: 0x6C30, + 13468: 0x60C5, + 13469: 0x9877, + 13470: 0x8BF7, + 13471: 0x5E86, + 13472: 0x743C, + 13473: 0x7A77, + 13474: 0x79CB, + 13475: 0x4E18, + 13476: 0x90B1, + 13477: 0x7403, + 13478: 0x6C42, + 13479: 0x56DA, + 13480: 0x914B, + 13481: 0x6CC5, + 13482: 0x8D8B, + 13483: 0x533A, + 13484: 0x86C6, + 13485: 0x66F2, + 13486: 0x8EAF, + 13487: 0x5C48, + 13488: 0x9A71, + 13489: 0x6E20, + 13490: 0x83EE, + 13491: 0x83EF, + 13492: 0x83F3, + 13493: 0x83F4, + 13494: 0x83F5, + 13495: 0x83F6, + 13496: 0x83F7, + 13497: 0x83FA, + 13498: 0x83FB, + 13499: 0x83FC, + 13500: 0x83FE, + 13501: 0x83FF, + 13502: 0x8400, + 13503: 0x8402, + 13504: 0x8405, + 13505: 0x8407, + 13506: 0x8408, + 13507: 0x8409, + 13508: 0x840A, + 13509: 0x8410, + 13510: 0x8412, + 13511: 0x8413, + 13512: 0x8414, + 13513: 0x8415, + 13514: 0x8416, + 13515: 0x8417, + 13516: 0x8419, + 13517: 0x841A, + 13518: 0x841B, + 13519: 0x841E, + 13520: 0x841F, + 13521: 0x8420, + 13522: 0x8421, + 13523: 0x8422, + 13524: 0x8423, + 13525: 0x8429, + 13526: 0x842A, + 13527: 0x842B, + 13528: 0x842C, + 13529: 0x842D, + 13530: 0x842E, + 13531: 0x842F, + 13532: 0x8430, + 13533: 0x8432, + 13534: 0x8433, + 13535: 0x8434, + 13536: 0x8435, + 13537: 0x8436, + 13538: 0x8437, + 13539: 0x8439, + 13540: 0x843A, + 13541: 0x843B, + 13542: 0x843E, + 13543: 0x843F, + 13544: 0x8440, + 13545: 0x8441, + 13546: 0x8442, + 13547: 0x8443, + 13548: 0x8444, + 13549: 0x8445, + 13550: 0x8447, + 13551: 0x8448, + 13552: 0x8449, + 13553: 0x844A, + 13554: 0x844B, + 13555: 0x844C, + 13556: 0x844D, + 13557: 0x844E, + 13558: 0x844F, + 13559: 0x8450, + 13560: 0x8452, + 13561: 0x8453, + 13562: 0x8454, + 13563: 0x8455, + 13564: 0x8456, + 13565: 0x8458, + 13566: 0x845D, + 13567: 0x845E, + 13568: 0x845F, + 13569: 0x8460, + 13570: 0x8462, + 13571: 0x8464, + 13572: 0x8465, + 13573: 0x8466, + 13574: 0x8467, + 13575: 0x8468, + 13576: 0x846A, + 13577: 0x846E, + 13578: 0x846F, + 13579: 0x8470, + 13580: 0x8472, + 13581: 0x8474, + 13582: 0x8477, + 13583: 0x8479, + 13584: 0x847B, + 13585: 0x847C, + 13586: 0x53D6, + 13587: 0x5A36, + 13588: 0x9F8B, + 13589: 0x8DA3, + 13590: 0x53BB, + 13591: 0x5708, + 13592: 0x98A7, + 13593: 0x6743, + 13594: 0x919B, + 13595: 0x6CC9, + 13596: 0x5168, + 13597: 0x75CA, + 13598: 0x62F3, + 13599: 0x72AC, + 13600: 0x5238, + 13601: 0x529D, + 13602: 0x7F3A, + 13603: 0x7094, + 13604: 0x7638, + 13605: 0x5374, + 13606: 0x9E4A, + 13607: 0x69B7, + 13608: 0x786E, + 13609: 0x96C0, + 13610: 0x88D9, + 13611: 0x7FA4, + 13612: 0x7136, + 13613: 0x71C3, + 13614: 0x5189, + 13615: 0x67D3, + 13616: 0x74E4, + 13617: 0x58E4, + 13618: 0x6518, + 13619: 0x56B7, + 13620: 0x8BA9, + 13621: 0x9976, + 13622: 0x6270, + 13623: 0x7ED5, + 13624: 0x60F9, + 13625: 0x70ED, + 13626: 0x58EC, + 13627: 0x4EC1, + 13628: 0x4EBA, + 13629: 0x5FCD, + 13630: 0x97E7, + 13631: 0x4EFB, + 13632: 0x8BA4, + 13633: 0x5203, + 13634: 0x598A, + 13635: 0x7EAB, + 13636: 0x6254, + 13637: 0x4ECD, + 13638: 0x65E5, + 13639: 0x620E, + 13640: 0x8338, + 13641: 0x84C9, + 13642: 0x8363, + 13643: 0x878D, + 13644: 0x7194, + 13645: 0x6EB6, + 13646: 0x5BB9, + 13647: 0x7ED2, + 13648: 0x5197, + 13649: 0x63C9, + 13650: 0x67D4, + 13651: 0x8089, + 13652: 0x8339, + 13653: 0x8815, + 13654: 0x5112, + 13655: 0x5B7A, + 13656: 0x5982, + 13657: 0x8FB1, + 13658: 0x4E73, + 13659: 0x6C5D, + 13660: 0x5165, + 13661: 0x8925, + 13662: 0x8F6F, + 13663: 0x962E, + 13664: 0x854A, + 13665: 0x745E, + 13666: 0x9510, + 13667: 0x95F0, + 13668: 0x6DA6, + 13669: 0x82E5, + 13670: 0x5F31, + 13671: 0x6492, + 13672: 0x6D12, + 13673: 0x8428, + 13674: 0x816E, + 13675: 0x9CC3, + 13676: 0x585E, + 13677: 0x8D5B, + 13678: 0x4E09, + 13679: 0x53C1, + 13680: 0x847D, + 13681: 0x847E, + 13682: 0x847F, + 13683: 0x8480, + 13684: 0x8481, + 13685: 0x8483, + 13686: 0x8484, + 13687: 0x8485, + 13688: 0x8486, + 13689: 0x848A, + 13690: 0x848D, + 13691: 0x848F, + 13692: 0x8490, + 13693: 0x8491, + 13694: 0x8492, + 13695: 0x8493, + 13696: 0x8494, + 13697: 0x8495, + 13698: 0x8496, + 13699: 0x8498, + 13700: 0x849A, + 13701: 0x849B, + 13702: 0x849D, + 13703: 0x849E, + 13704: 0x849F, + 13705: 0x84A0, + 13706: 0x84A2, + 13707: 0x84A3, + 13708: 0x84A4, + 13709: 0x84A5, + 13710: 0x84A6, + 13711: 0x84A7, + 13712: 0x84A8, + 13713: 0x84A9, + 13714: 0x84AA, + 13715: 0x84AB, + 13716: 0x84AC, + 13717: 0x84AD, + 13718: 0x84AE, + 13719: 0x84B0, + 13720: 0x84B1, + 13721: 0x84B3, + 13722: 0x84B5, + 13723: 0x84B6, + 13724: 0x84B7, + 13725: 0x84BB, + 13726: 0x84BC, + 13727: 0x84BE, + 13728: 0x84C0, + 13729: 0x84C2, + 13730: 0x84C3, + 13731: 0x84C5, + 13732: 0x84C6, + 13733: 0x84C7, + 13734: 0x84C8, + 13735: 0x84CB, + 13736: 0x84CC, + 13737: 0x84CE, + 13738: 0x84CF, + 13739: 0x84D2, + 13740: 0x84D4, + 13741: 0x84D5, + 13742: 0x84D7, + 13743: 0x84D8, + 13744: 0x84D9, + 13745: 0x84DA, + 13746: 0x84DB, + 13747: 0x84DC, + 13748: 0x84DE, + 13749: 0x84E1, + 13750: 0x84E2, + 13751: 0x84E4, + 13752: 0x84E7, + 13753: 0x84E8, + 13754: 0x84E9, + 13755: 0x84EA, + 13756: 0x84EB, + 13757: 0x84ED, + 13758: 0x84EE, + 13759: 0x84EF, + 13760: 0x84F1, + 13761: 0x84F2, + 13762: 0x84F3, + 13763: 0x84F4, + 13764: 0x84F5, + 13765: 0x84F6, + 13766: 0x84F7, + 13767: 0x84F8, + 13768: 0x84F9, + 13769: 0x84FA, + 13770: 0x84FB, + 13771: 0x84FD, + 13772: 0x84FE, + 13773: 0x8500, + 13774: 0x8501, + 13775: 0x8502, + 13776: 0x4F1E, + 13777: 0x6563, + 13778: 0x6851, + 13779: 0x55D3, + 13780: 0x4E27, + 13781: 0x6414, + 13782: 0x9A9A, + 13783: 0x626B, + 13784: 0x5AC2, + 13785: 0x745F, + 13786: 0x8272, + 13787: 0x6DA9, + 13788: 0x68EE, + 13789: 0x50E7, + 13790: 0x838E, + 13791: 0x7802, + 13792: 0x6740, + 13793: 0x5239, + 13794: 0x6C99, + 13795: 0x7EB1, + 13796: 0x50BB, + 13797: 0x5565, + 13798: 0x715E, + 13799: 0x7B5B, + 13800: 0x6652, + 13801: 0x73CA, + 13802: 0x82EB, + 13803: 0x6749, + 13804: 0x5C71, + 13805: 0x5220, + 13806: 0x717D, + 13807: 0x886B, + 13808: 0x95EA, + 13809: 0x9655, + 13810: 0x64C5, + 13811: 0x8D61, + 13812: 0x81B3, + 13813: 0x5584, + 13814: 0x6C55, + 13815: 0x6247, + 13816: 0x7F2E, + 13817: 0x5892, + 13818: 0x4F24, + 13819: 0x5546, + 13820: 0x8D4F, + 13821: 0x664C, + 13822: 0x4E0A, + 13823: 0x5C1A, + 13824: 0x88F3, + 13825: 0x68A2, + 13826: 0x634E, + 13827: 0x7A0D, + 13828: 0x70E7, + 13829: 0x828D, + 13830: 0x52FA, + 13831: 0x97F6, + 13832: 0x5C11, + 13833: 0x54E8, + 13834: 0x90B5, + 13835: 0x7ECD, + 13836: 0x5962, + 13837: 0x8D4A, + 13838: 0x86C7, + 13839: 0x820C, + 13840: 0x820D, + 13841: 0x8D66, + 13842: 0x6444, + 13843: 0x5C04, + 13844: 0x6151, + 13845: 0x6D89, + 13846: 0x793E, + 13847: 0x8BBE, + 13848: 0x7837, + 13849: 0x7533, + 13850: 0x547B, + 13851: 0x4F38, + 13852: 0x8EAB, + 13853: 0x6DF1, + 13854: 0x5A20, + 13855: 0x7EC5, + 13856: 0x795E, + 13857: 0x6C88, + 13858: 0x5BA1, + 13859: 0x5A76, + 13860: 0x751A, + 13861: 0x80BE, + 13862: 0x614E, + 13863: 0x6E17, + 13864: 0x58F0, + 13865: 0x751F, + 13866: 0x7525, + 13867: 0x7272, + 13868: 0x5347, + 13869: 0x7EF3, + 13870: 0x8503, + 13871: 0x8504, + 13872: 0x8505, + 13873: 0x8506, + 13874: 0x8507, + 13875: 0x8508, + 13876: 0x8509, + 13877: 0x850A, + 13878: 0x850B, + 13879: 0x850D, + 13880: 0x850E, + 13881: 0x850F, + 13882: 0x8510, + 13883: 0x8512, + 13884: 0x8514, + 13885: 0x8515, + 13886: 0x8516, + 13887: 0x8518, + 13888: 0x8519, + 13889: 0x851B, + 13890: 0x851C, + 13891: 0x851D, + 13892: 0x851E, + 13893: 0x8520, + 13894: 0x8522, + 13895: 0x8523, + 13896: 0x8524, + 13897: 0x8525, + 13898: 0x8526, + 13899: 0x8527, + 13900: 0x8528, + 13901: 0x8529, + 13902: 0x852A, + 13903: 0x852D, + 13904: 0x852E, + 13905: 0x852F, + 13906: 0x8530, + 13907: 0x8531, + 13908: 0x8532, + 13909: 0x8533, + 13910: 0x8534, + 13911: 0x8535, + 13912: 0x8536, + 13913: 0x853E, + 13914: 0x853F, + 13915: 0x8540, + 13916: 0x8541, + 13917: 0x8542, + 13918: 0x8544, + 13919: 0x8545, + 13920: 0x8546, + 13921: 0x8547, + 13922: 0x854B, + 13923: 0x854C, + 13924: 0x854D, + 13925: 0x854E, + 13926: 0x854F, + 13927: 0x8550, + 13928: 0x8551, + 13929: 0x8552, + 13930: 0x8553, + 13931: 0x8554, + 13932: 0x8555, + 13933: 0x8557, + 13934: 0x8558, + 13935: 0x855A, + 13936: 0x855B, + 13937: 0x855C, + 13938: 0x855D, + 13939: 0x855F, + 13940: 0x8560, + 13941: 0x8561, + 13942: 0x8562, + 13943: 0x8563, + 13944: 0x8565, + 13945: 0x8566, + 13946: 0x8567, + 13947: 0x8569, + 13948: 0x856A, + 13949: 0x856B, + 13950: 0x856C, + 13951: 0x856D, + 13952: 0x856E, + 13953: 0x856F, + 13954: 0x8570, + 13955: 0x8571, + 13956: 0x8573, + 13957: 0x8575, + 13958: 0x8576, + 13959: 0x8577, + 13960: 0x8578, + 13961: 0x857C, + 13962: 0x857D, + 13963: 0x857F, + 13964: 0x8580, + 13965: 0x8581, + 13966: 0x7701, + 13967: 0x76DB, + 13968: 0x5269, + 13969: 0x80DC, + 13970: 0x5723, + 13971: 0x5E08, + 13972: 0x5931, + 13973: 0x72EE, + 13974: 0x65BD, + 13975: 0x6E7F, + 13976: 0x8BD7, + 13977: 0x5C38, + 13978: 0x8671, + 13979: 0x5341, + 13980: 0x77F3, + 13981: 0x62FE, + 13982: 0x65F6, + 13983: 0x4EC0, + 13984: 0x98DF, + 13985: 0x8680, + 13986: 0x5B9E, + 13987: 0x8BC6, + 13988: 0x53F2, + 13989: 0x77E2, + 13990: 0x4F7F, + 13991: 0x5C4E, + 13992: 0x9A76, + 13993: 0x59CB, + 13994: 0x5F0F, + 13995: 0x793A, + 13996: 0x58EB, + 13997: 0x4E16, + 13998: 0x67FF, + 13999: 0x4E8B, + 14000: 0x62ED, + 14001: 0x8A93, + 14002: 0x901D, + 14003: 0x52BF, + 14004: 0x662F, + 14005: 0x55DC, + 14006: 0x566C, + 14007: 0x9002, + 14008: 0x4ED5, + 14009: 0x4F8D, + 14010: 0x91CA, + 14011: 0x9970, + 14012: 0x6C0F, + 14013: 0x5E02, + 14014: 0x6043, + 14015: 0x5BA4, + 14016: 0x89C6, + 14017: 0x8BD5, + 14018: 0x6536, + 14019: 0x624B, + 14020: 0x9996, + 14021: 0x5B88, + 14022: 0x5BFF, + 14023: 0x6388, + 14024: 0x552E, + 14025: 0x53D7, + 14026: 0x7626, + 14027: 0x517D, + 14028: 0x852C, + 14029: 0x67A2, + 14030: 0x68B3, + 14031: 0x6B8A, + 14032: 0x6292, + 14033: 0x8F93, + 14034: 0x53D4, + 14035: 0x8212, + 14036: 0x6DD1, + 14037: 0x758F, + 14038: 0x4E66, + 14039: 0x8D4E, + 14040: 0x5B70, + 14041: 0x719F, + 14042: 0x85AF, + 14043: 0x6691, + 14044: 0x66D9, + 14045: 0x7F72, + 14046: 0x8700, + 14047: 0x9ECD, + 14048: 0x9F20, + 14049: 0x5C5E, + 14050: 0x672F, + 14051: 0x8FF0, + 14052: 0x6811, + 14053: 0x675F, + 14054: 0x620D, + 14055: 0x7AD6, + 14056: 0x5885, + 14057: 0x5EB6, + 14058: 0x6570, + 14059: 0x6F31, + 14060: 0x8582, + 14061: 0x8583, + 14062: 0x8586, + 14063: 0x8588, + 14064: 0x8589, + 14065: 0x858A, + 14066: 0x858B, + 14067: 0x858C, + 14068: 0x858D, + 14069: 0x858E, + 14070: 0x8590, + 14071: 0x8591, + 14072: 0x8592, + 14073: 0x8593, + 14074: 0x8594, + 14075: 0x8595, + 14076: 0x8596, + 14077: 0x8597, + 14078: 0x8598, + 14079: 0x8599, + 14080: 0x859A, + 14081: 0x859D, + 14082: 0x859E, + 14083: 0x859F, + 14084: 0x85A0, + 14085: 0x85A1, + 14086: 0x85A2, + 14087: 0x85A3, + 14088: 0x85A5, + 14089: 0x85A6, + 14090: 0x85A7, + 14091: 0x85A9, + 14092: 0x85AB, + 14093: 0x85AC, + 14094: 0x85AD, + 14095: 0x85B1, + 14096: 0x85B2, + 14097: 0x85B3, + 14098: 0x85B4, + 14099: 0x85B5, + 14100: 0x85B6, + 14101: 0x85B8, + 14102: 0x85BA, + 14103: 0x85BB, + 14104: 0x85BC, + 14105: 0x85BD, + 14106: 0x85BE, + 14107: 0x85BF, + 14108: 0x85C0, + 14109: 0x85C2, + 14110: 0x85C3, + 14111: 0x85C4, + 14112: 0x85C5, + 14113: 0x85C6, + 14114: 0x85C7, + 14115: 0x85C8, + 14116: 0x85CA, + 14117: 0x85CB, + 14118: 0x85CC, + 14119: 0x85CD, + 14120: 0x85CE, + 14121: 0x85D1, + 14122: 0x85D2, + 14123: 0x85D4, + 14124: 0x85D6, + 14125: 0x85D7, + 14126: 0x85D8, + 14127: 0x85D9, + 14128: 0x85DA, + 14129: 0x85DB, + 14130: 0x85DD, + 14131: 0x85DE, + 14132: 0x85DF, + 14133: 0x85E0, + 14134: 0x85E1, + 14135: 0x85E2, + 14136: 0x85E3, + 14137: 0x85E5, + 14138: 0x85E6, + 14139: 0x85E7, + 14140: 0x85E8, + 14141: 0x85EA, + 14142: 0x85EB, + 14143: 0x85EC, + 14144: 0x85ED, + 14145: 0x85EE, + 14146: 0x85EF, + 14147: 0x85F0, + 14148: 0x85F1, + 14149: 0x85F2, + 14150: 0x85F3, + 14151: 0x85F4, + 14152: 0x85F5, + 14153: 0x85F6, + 14154: 0x85F7, + 14155: 0x85F8, + 14156: 0x6055, + 14157: 0x5237, + 14158: 0x800D, + 14159: 0x6454, + 14160: 0x8870, + 14161: 0x7529, + 14162: 0x5E05, + 14163: 0x6813, + 14164: 0x62F4, + 14165: 0x971C, + 14166: 0x53CC, + 14167: 0x723D, + 14168: 0x8C01, + 14169: 0x6C34, + 14170: 0x7761, + 14171: 0x7A0E, + 14172: 0x542E, + 14173: 0x77AC, + 14174: 0x987A, + 14175: 0x821C, + 14176: 0x8BF4, + 14177: 0x7855, + 14178: 0x6714, + 14179: 0x70C1, + 14180: 0x65AF, + 14181: 0x6495, + 14182: 0x5636, + 14183: 0x601D, + 14184: 0x79C1, + 14185: 0x53F8, + 14186: 0x4E1D, + 14187: 0x6B7B, + 14188: 0x8086, + 14189: 0x5BFA, + 14190: 0x55E3, + 14191: 0x56DB, + 14192: 0x4F3A, + 14193: 0x4F3C, + 14194: 0x9972, + 14195: 0x5DF3, + 14196: 0x677E, + 14197: 0x8038, + 14198: 0x6002, + 14199: 0x9882, + 14200: 0x9001, + 14201: 0x5B8B, + 14202: 0x8BBC, + 14203: 0x8BF5, + 14204: 0x641C, + 14205: 0x8258, + 14206: 0x64DE, + 14207: 0x55FD, + 14208: 0x82CF, + 14209: 0x9165, + 14210: 0x4FD7, + 14211: 0x7D20, + 14212: 0x901F, + 14213: 0x7C9F, + 14214: 0x50F3, + 14215: 0x5851, + 14216: 0x6EAF, + 14217: 0x5BBF, + 14218: 0x8BC9, + 14219: 0x8083, + 14220: 0x9178, + 14221: 0x849C, + 14222: 0x7B97, + 14223: 0x867D, + 14224: 0x968B, + 14225: 0x968F, + 14226: 0x7EE5, + 14227: 0x9AD3, + 14228: 0x788E, + 14229: 0x5C81, + 14230: 0x7A57, + 14231: 0x9042, + 14232: 0x96A7, + 14233: 0x795F, + 14234: 0x5B59, + 14235: 0x635F, + 14236: 0x7B0B, + 14237: 0x84D1, + 14238: 0x68AD, + 14239: 0x5506, + 14240: 0x7F29, + 14241: 0x7410, + 14242: 0x7D22, + 14243: 0x9501, + 14244: 0x6240, + 14245: 0x584C, + 14246: 0x4ED6, + 14247: 0x5B83, + 14248: 0x5979, + 14249: 0x5854, + 14250: 0x85F9, + 14251: 0x85FA, + 14252: 0x85FC, + 14253: 0x85FD, + 14254: 0x85FE, + 14255: 0x8600, + 14256: 0x8601, + 14257: 0x8602, + 14258: 0x8603, + 14259: 0x8604, + 14260: 0x8606, + 14261: 0x8607, + 14262: 0x8608, + 14263: 0x8609, + 14264: 0x860A, + 14265: 0x860B, + 14266: 0x860C, + 14267: 0x860D, + 14268: 0x860E, + 14269: 0x860F, + 14270: 0x8610, + 14271: 0x8612, + 14272: 0x8613, + 14273: 0x8614, + 14274: 0x8615, + 14275: 0x8617, + 14276: 0x8618, + 14277: 0x8619, + 14278: 0x861A, + 14279: 0x861B, + 14280: 0x861C, + 14281: 0x861D, + 14282: 0x861E, + 14283: 0x861F, + 14284: 0x8620, + 14285: 0x8621, + 14286: 0x8622, + 14287: 0x8623, + 14288: 0x8624, + 14289: 0x8625, + 14290: 0x8626, + 14291: 0x8628, + 14292: 0x862A, + 14293: 0x862B, + 14294: 0x862C, + 14295: 0x862D, + 14296: 0x862E, + 14297: 0x862F, + 14298: 0x8630, + 14299: 0x8631, + 14300: 0x8632, + 14301: 0x8633, + 14302: 0x8634, + 14303: 0x8635, + 14304: 0x8636, + 14305: 0x8637, + 14306: 0x8639, + 14307: 0x863A, + 14308: 0x863B, + 14309: 0x863D, + 14310: 0x863E, + 14311: 0x863F, + 14312: 0x8640, + 14313: 0x8641, + 14314: 0x8642, + 14315: 0x8643, + 14316: 0x8644, + 14317: 0x8645, + 14318: 0x8646, + 14319: 0x8647, + 14320: 0x8648, + 14321: 0x8649, + 14322: 0x864A, + 14323: 0x864B, + 14324: 0x864C, + 14325: 0x8652, + 14326: 0x8653, + 14327: 0x8655, + 14328: 0x8656, + 14329: 0x8657, + 14330: 0x8658, + 14331: 0x8659, + 14332: 0x865B, + 14333: 0x865C, + 14334: 0x865D, + 14335: 0x865F, + 14336: 0x8660, + 14337: 0x8661, + 14338: 0x8663, + 14339: 0x8664, + 14340: 0x8665, + 14341: 0x8666, + 14342: 0x8667, + 14343: 0x8668, + 14344: 0x8669, + 14345: 0x866A, + 14346: 0x736D, + 14347: 0x631E, + 14348: 0x8E4B, + 14349: 0x8E0F, + 14350: 0x80CE, + 14351: 0x82D4, + 14352: 0x62AC, + 14353: 0x53F0, + 14354: 0x6CF0, + 14355: 0x915E, + 14356: 0x592A, + 14357: 0x6001, + 14358: 0x6C70, + 14359: 0x574D, + 14360: 0x644A, + 14361: 0x8D2A, + 14362: 0x762B, + 14363: 0x6EE9, + 14364: 0x575B, + 14365: 0x6A80, + 14366: 0x75F0, + 14367: 0x6F6D, + 14368: 0x8C2D, + 14369: 0x8C08, + 14370: 0x5766, + 14371: 0x6BEF, + 14372: 0x8892, + 14373: 0x78B3, + 14374: 0x63A2, + 14375: 0x53F9, + 14376: 0x70AD, + 14377: 0x6C64, + 14378: 0x5858, + 14379: 0x642A, + 14380: 0x5802, + 14381: 0x68E0, + 14382: 0x819B, + 14383: 0x5510, + 14384: 0x7CD6, + 14385: 0x5018, + 14386: 0x8EBA, + 14387: 0x6DCC, + 14388: 0x8D9F, + 14389: 0x70EB, + 14390: 0x638F, + 14391: 0x6D9B, + 14392: 0x6ED4, + 14393: 0x7EE6, + 14394: 0x8404, + 14395: 0x6843, + 14396: 0x9003, + 14397: 0x6DD8, + 14398: 0x9676, + 14399: 0x8BA8, + 14400: 0x5957, + 14401: 0x7279, + 14402: 0x85E4, + 14403: 0x817E, + 14404: 0x75BC, + 14405: 0x8A8A, + 14406: 0x68AF, + 14407: 0x5254, + 14408: 0x8E22, + 14409: 0x9511, + 14410: 0x63D0, + 14411: 0x9898, + 14412: 0x8E44, + 14413: 0x557C, + 14414: 0x4F53, + 14415: 0x66FF, + 14416: 0x568F, + 14417: 0x60D5, + 14418: 0x6D95, + 14419: 0x5243, + 14420: 0x5C49, + 14421: 0x5929, + 14422: 0x6DFB, + 14423: 0x586B, + 14424: 0x7530, + 14425: 0x751C, + 14426: 0x606C, + 14427: 0x8214, + 14428: 0x8146, + 14429: 0x6311, + 14430: 0x6761, + 14431: 0x8FE2, + 14432: 0x773A, + 14433: 0x8DF3, + 14434: 0x8D34, + 14435: 0x94C1, + 14436: 0x5E16, + 14437: 0x5385, + 14438: 0x542C, + 14439: 0x70C3, + 14440: 0x866D, + 14441: 0x866F, + 14442: 0x8670, + 14443: 0x8672, + 14444: 0x8673, + 14445: 0x8674, + 14446: 0x8675, + 14447: 0x8676, + 14448: 0x8677, + 14449: 0x8678, + 14450: 0x8683, + 14451: 0x8684, + 14452: 0x8685, + 14453: 0x8686, + 14454: 0x8687, + 14455: 0x8688, + 14456: 0x8689, + 14457: 0x868E, + 14458: 0x868F, + 14459: 0x8690, + 14460: 0x8691, + 14461: 0x8692, + 14462: 0x8694, + 14463: 0x8696, + 14464: 0x8697, + 14465: 0x8698, + 14466: 0x8699, + 14467: 0x869A, + 14468: 0x869B, + 14469: 0x869E, + 14470: 0x869F, + 14471: 0x86A0, + 14472: 0x86A1, + 14473: 0x86A2, + 14474: 0x86A5, + 14475: 0x86A6, + 14476: 0x86AB, + 14477: 0x86AD, + 14478: 0x86AE, + 14479: 0x86B2, + 14480: 0x86B3, + 14481: 0x86B7, + 14482: 0x86B8, + 14483: 0x86B9, + 14484: 0x86BB, + 14485: 0x86BC, + 14486: 0x86BD, + 14487: 0x86BE, + 14488: 0x86BF, + 14489: 0x86C1, + 14490: 0x86C2, + 14491: 0x86C3, + 14492: 0x86C5, + 14493: 0x86C8, + 14494: 0x86CC, + 14495: 0x86CD, + 14496: 0x86D2, + 14497: 0x86D3, + 14498: 0x86D5, + 14499: 0x86D6, + 14500: 0x86D7, + 14501: 0x86DA, + 14502: 0x86DC, + 14503: 0x86DD, + 14504: 0x86E0, + 14505: 0x86E1, + 14506: 0x86E2, + 14507: 0x86E3, + 14508: 0x86E5, + 14509: 0x86E6, + 14510: 0x86E7, + 14511: 0x86E8, + 14512: 0x86EA, + 14513: 0x86EB, + 14514: 0x86EC, + 14515: 0x86EF, + 14516: 0x86F5, + 14517: 0x86F6, + 14518: 0x86F7, + 14519: 0x86FA, + 14520: 0x86FB, + 14521: 0x86FC, + 14522: 0x86FD, + 14523: 0x86FF, + 14524: 0x8701, + 14525: 0x8704, + 14526: 0x8705, + 14527: 0x8706, + 14528: 0x870B, + 14529: 0x870C, + 14530: 0x870E, + 14531: 0x870F, + 14532: 0x8710, + 14533: 0x8711, + 14534: 0x8714, + 14535: 0x8716, + 14536: 0x6C40, + 14537: 0x5EF7, + 14538: 0x505C, + 14539: 0x4EAD, + 14540: 0x5EAD, + 14541: 0x633A, + 14542: 0x8247, + 14543: 0x901A, + 14544: 0x6850, + 14545: 0x916E, + 14546: 0x77B3, + 14547: 0x540C, + 14548: 0x94DC, + 14549: 0x5F64, + 14550: 0x7AE5, + 14551: 0x6876, + 14552: 0x6345, + 14553: 0x7B52, + 14554: 0x7EDF, + 14555: 0x75DB, + 14556: 0x5077, + 14557: 0x6295, + 14558: 0x5934, + 14559: 0x900F, + 14560: 0x51F8, + 14561: 0x79C3, + 14562: 0x7A81, + 14563: 0x56FE, + 14564: 0x5F92, + 14565: 0x9014, + 14566: 0x6D82, + 14567: 0x5C60, + 14568: 0x571F, + 14569: 0x5410, + 14570: 0x5154, + 14571: 0x6E4D, + 14572: 0x56E2, + 14573: 0x63A8, + 14574: 0x9893, + 14575: 0x817F, + 14576: 0x8715, + 14577: 0x892A, + 14578: 0x9000, + 14579: 0x541E, + 14580: 0x5C6F, + 14581: 0x81C0, + 14582: 0x62D6, + 14583: 0x6258, + 14584: 0x8131, + 14585: 0x9E35, + 14586: 0x9640, + 14587: 0x9A6E, + 14588: 0x9A7C, + 14589: 0x692D, + 14590: 0x59A5, + 14591: 0x62D3, + 14592: 0x553E, + 14593: 0x6316, + 14594: 0x54C7, + 14595: 0x86D9, + 14596: 0x6D3C, + 14597: 0x5A03, + 14598: 0x74E6, + 14599: 0x889C, + 14600: 0x6B6A, + 14601: 0x5916, + 14602: 0x8C4C, + 14603: 0x5F2F, + 14604: 0x6E7E, + 14605: 0x73A9, + 14606: 0x987D, + 14607: 0x4E38, + 14608: 0x70F7, + 14609: 0x5B8C, + 14610: 0x7897, + 14611: 0x633D, + 14612: 0x665A, + 14613: 0x7696, + 14614: 0x60CB, + 14615: 0x5B9B, + 14616: 0x5A49, + 14617: 0x4E07, + 14618: 0x8155, + 14619: 0x6C6A, + 14620: 0x738B, + 14621: 0x4EA1, + 14622: 0x6789, + 14623: 0x7F51, + 14624: 0x5F80, + 14625: 0x65FA, + 14626: 0x671B, + 14627: 0x5FD8, + 14628: 0x5984, + 14629: 0x5A01, + 14630: 0x8719, + 14631: 0x871B, + 14632: 0x871D, + 14633: 0x871F, + 14634: 0x8720, + 14635: 0x8724, + 14636: 0x8726, + 14637: 0x8727, + 14638: 0x8728, + 14639: 0x872A, + 14640: 0x872B, + 14641: 0x872C, + 14642: 0x872D, + 14643: 0x872F, + 14644: 0x8730, + 14645: 0x8732, + 14646: 0x8733, + 14647: 0x8735, + 14648: 0x8736, + 14649: 0x8738, + 14650: 0x8739, + 14651: 0x873A, + 14652: 0x873C, + 14653: 0x873D, + 14654: 0x8740, + 14655: 0x8741, + 14656: 0x8742, + 14657: 0x8743, + 14658: 0x8744, + 14659: 0x8745, + 14660: 0x8746, + 14661: 0x874A, + 14662: 0x874B, + 14663: 0x874D, + 14664: 0x874F, + 14665: 0x8750, + 14666: 0x8751, + 14667: 0x8752, + 14668: 0x8754, + 14669: 0x8755, + 14670: 0x8756, + 14671: 0x8758, + 14672: 0x875A, + 14673: 0x875B, + 14674: 0x875C, + 14675: 0x875D, + 14676: 0x875E, + 14677: 0x875F, + 14678: 0x8761, + 14679: 0x8762, + 14680: 0x8766, + 14681: 0x8767, + 14682: 0x8768, + 14683: 0x8769, + 14684: 0x876A, + 14685: 0x876B, + 14686: 0x876C, + 14687: 0x876D, + 14688: 0x876F, + 14689: 0x8771, + 14690: 0x8772, + 14691: 0x8773, + 14692: 0x8775, + 14693: 0x8777, + 14694: 0x8778, + 14695: 0x8779, + 14696: 0x877A, + 14697: 0x877F, + 14698: 0x8780, + 14699: 0x8781, + 14700: 0x8784, + 14701: 0x8786, + 14702: 0x8787, + 14703: 0x8789, + 14704: 0x878A, + 14705: 0x878C, + 14706: 0x878E, + 14707: 0x878F, + 14708: 0x8790, + 14709: 0x8791, + 14710: 0x8792, + 14711: 0x8794, + 14712: 0x8795, + 14713: 0x8796, + 14714: 0x8798, + 14715: 0x8799, + 14716: 0x879A, + 14717: 0x879B, + 14718: 0x879C, + 14719: 0x879D, + 14720: 0x879E, + 14721: 0x87A0, + 14722: 0x87A1, + 14723: 0x87A2, + 14724: 0x87A3, + 14725: 0x87A4, + 14726: 0x5DCD, + 14727: 0x5FAE, + 14728: 0x5371, + 14729: 0x97E6, + 14730: 0x8FDD, + 14731: 0x6845, + 14732: 0x56F4, + 14733: 0x552F, + 14734: 0x60DF, + 14735: 0x4E3A, + 14736: 0x6F4D, + 14737: 0x7EF4, + 14738: 0x82C7, + 14739: 0x840E, + 14740: 0x59D4, + 14741: 0x4F1F, + 14742: 0x4F2A, + 14743: 0x5C3E, + 14744: 0x7EAC, + 14745: 0x672A, + 14746: 0x851A, + 14747: 0x5473, + 14748: 0x754F, + 14749: 0x80C3, + 14750: 0x5582, + 14751: 0x9B4F, + 14752: 0x4F4D, + 14753: 0x6E2D, + 14754: 0x8C13, + 14755: 0x5C09, + 14756: 0x6170, + 14757: 0x536B, + 14758: 0x761F, + 14759: 0x6E29, + 14760: 0x868A, + 14761: 0x6587, + 14762: 0x95FB, + 14763: 0x7EB9, + 14764: 0x543B, + 14765: 0x7A33, + 14766: 0x7D0A, + 14767: 0x95EE, + 14768: 0x55E1, + 14769: 0x7FC1, + 14770: 0x74EE, + 14771: 0x631D, + 14772: 0x8717, + 14773: 0x6DA1, + 14774: 0x7A9D, + 14775: 0x6211, + 14776: 0x65A1, + 14777: 0x5367, + 14778: 0x63E1, + 14779: 0x6C83, + 14780: 0x5DEB, + 14781: 0x545C, + 14782: 0x94A8, + 14783: 0x4E4C, + 14784: 0x6C61, + 14785: 0x8BEC, + 14786: 0x5C4B, + 14787: 0x65E0, + 14788: 0x829C, + 14789: 0x68A7, + 14790: 0x543E, + 14791: 0x5434, + 14792: 0x6BCB, + 14793: 0x6B66, + 14794: 0x4E94, + 14795: 0x6342, + 14796: 0x5348, + 14797: 0x821E, + 14798: 0x4F0D, + 14799: 0x4FAE, + 14800: 0x575E, + 14801: 0x620A, + 14802: 0x96FE, + 14803: 0x6664, + 14804: 0x7269, + 14805: 0x52FF, + 14806: 0x52A1, + 14807: 0x609F, + 14808: 0x8BEF, + 14809: 0x6614, + 14810: 0x7199, + 14811: 0x6790, + 14812: 0x897F, + 14813: 0x7852, + 14814: 0x77FD, + 14815: 0x6670, + 14816: 0x563B, + 14817: 0x5438, + 14818: 0x9521, + 14819: 0x727A, + 14820: 0x87A5, + 14821: 0x87A6, + 14822: 0x87A7, + 14823: 0x87A9, + 14824: 0x87AA, + 14825: 0x87AE, + 14826: 0x87B0, + 14827: 0x87B1, + 14828: 0x87B2, + 14829: 0x87B4, + 14830: 0x87B6, + 14831: 0x87B7, + 14832: 0x87B8, + 14833: 0x87B9, + 14834: 0x87BB, + 14835: 0x87BC, + 14836: 0x87BE, + 14837: 0x87BF, + 14838: 0x87C1, + 14839: 0x87C2, + 14840: 0x87C3, + 14841: 0x87C4, + 14842: 0x87C5, + 14843: 0x87C7, + 14844: 0x87C8, + 14845: 0x87C9, + 14846: 0x87CC, + 14847: 0x87CD, + 14848: 0x87CE, + 14849: 0x87CF, + 14850: 0x87D0, + 14851: 0x87D4, + 14852: 0x87D5, + 14853: 0x87D6, + 14854: 0x87D7, + 14855: 0x87D8, + 14856: 0x87D9, + 14857: 0x87DA, + 14858: 0x87DC, + 14859: 0x87DD, + 14860: 0x87DE, + 14861: 0x87DF, + 14862: 0x87E1, + 14863: 0x87E2, + 14864: 0x87E3, + 14865: 0x87E4, + 14866: 0x87E6, + 14867: 0x87E7, + 14868: 0x87E8, + 14869: 0x87E9, + 14870: 0x87EB, + 14871: 0x87EC, + 14872: 0x87ED, + 14873: 0x87EF, + 14874: 0x87F0, + 14875: 0x87F1, + 14876: 0x87F2, + 14877: 0x87F3, + 14878: 0x87F4, + 14879: 0x87F5, + 14880: 0x87F6, + 14881: 0x87F7, + 14882: 0x87F8, + 14883: 0x87FA, + 14884: 0x87FB, + 14885: 0x87FC, + 14886: 0x87FD, + 14887: 0x87FF, + 14888: 0x8800, + 14889: 0x8801, + 14890: 0x8802, + 14891: 0x8804, + 14892: 0x8805, + 14893: 0x8806, + 14894: 0x8807, + 14895: 0x8808, + 14896: 0x8809, + 14897: 0x880B, + 14898: 0x880C, + 14899: 0x880D, + 14900: 0x880E, + 14901: 0x880F, + 14902: 0x8810, + 14903: 0x8811, + 14904: 0x8812, + 14905: 0x8814, + 14906: 0x8817, + 14907: 0x8818, + 14908: 0x8819, + 14909: 0x881A, + 14910: 0x881C, + 14911: 0x881D, + 14912: 0x881E, + 14913: 0x881F, + 14914: 0x8820, + 14915: 0x8823, + 14916: 0x7A00, + 14917: 0x606F, + 14918: 0x5E0C, + 14919: 0x6089, + 14920: 0x819D, + 14921: 0x5915, + 14922: 0x60DC, + 14923: 0x7184, + 14924: 0x70EF, + 14925: 0x6EAA, + 14926: 0x6C50, + 14927: 0x7280, + 14928: 0x6A84, + 14929: 0x88AD, + 14930: 0x5E2D, + 14931: 0x4E60, + 14932: 0x5AB3, + 14933: 0x559C, + 14934: 0x94E3, + 14935: 0x6D17, + 14936: 0x7CFB, + 14937: 0x9699, + 14938: 0x620F, + 14939: 0x7EC6, + 14940: 0x778E, + 14941: 0x867E, + 14942: 0x5323, + 14943: 0x971E, + 14944: 0x8F96, + 14945: 0x6687, + 14946: 0x5CE1, + 14947: 0x4FA0, + 14948: 0x72ED, + 14949: 0x4E0B, + 14950: 0x53A6, + 14951: 0x590F, + 14952: 0x5413, + 14953: 0x6380, + 14954: 0x9528, + 14955: 0x5148, + 14956: 0x4ED9, + 14957: 0x9C9C, + 14958: 0x7EA4, + 14959: 0x54B8, + 14960: 0x8D24, + 14961: 0x8854, + 14962: 0x8237, + 14963: 0x95F2, + 14964: 0x6D8E, + 14965: 0x5F26, + 14966: 0x5ACC, + 14967: 0x663E, + 14968: 0x9669, + 14969: 0x73B0, + 14970: 0x732E, + 14971: 0x53BF, + 14972: 0x817A, + 14973: 0x9985, + 14974: 0x7FA1, + 14975: 0x5BAA, + 14976: 0x9677, + 14977: 0x9650, + 14978: 0x7EBF, + 14979: 0x76F8, + 14980: 0x53A2, + 14981: 0x9576, + 14982: 0x9999, + 14983: 0x7BB1, + 14984: 0x8944, + 14985: 0x6E58, + 14986: 0x4E61, + 14987: 0x7FD4, + 14988: 0x7965, + 14989: 0x8BE6, + 14990: 0x60F3, + 14991: 0x54CD, + 14992: 0x4EAB, + 14993: 0x9879, + 14994: 0x5DF7, + 14995: 0x6A61, + 14996: 0x50CF, + 14997: 0x5411, + 14998: 0x8C61, + 14999: 0x8427, + 15000: 0x785D, + 15001: 0x9704, + 15002: 0x524A, + 15003: 0x54EE, + 15004: 0x56A3, + 15005: 0x9500, + 15006: 0x6D88, + 15007: 0x5BB5, + 15008: 0x6DC6, + 15009: 0x6653, + 15010: 0x8824, + 15011: 0x8825, + 15012: 0x8826, + 15013: 0x8827, + 15014: 0x8828, + 15015: 0x8829, + 15016: 0x882A, + 15017: 0x882B, + 15018: 0x882C, + 15019: 0x882D, + 15020: 0x882E, + 15021: 0x882F, + 15022: 0x8830, + 15023: 0x8831, + 15024: 0x8833, + 15025: 0x8834, + 15026: 0x8835, + 15027: 0x8836, + 15028: 0x8837, + 15029: 0x8838, + 15030: 0x883A, + 15031: 0x883B, + 15032: 0x883D, + 15033: 0x883E, + 15034: 0x883F, + 15035: 0x8841, + 15036: 0x8842, + 15037: 0x8843, + 15038: 0x8846, + 15039: 0x8847, + 15040: 0x8848, + 15041: 0x8849, + 15042: 0x884A, + 15043: 0x884B, + 15044: 0x884E, + 15045: 0x884F, + 15046: 0x8850, + 15047: 0x8851, + 15048: 0x8852, + 15049: 0x8853, + 15050: 0x8855, + 15051: 0x8856, + 15052: 0x8858, + 15053: 0x885A, + 15054: 0x885B, + 15055: 0x885C, + 15056: 0x885D, + 15057: 0x885E, + 15058: 0x885F, + 15059: 0x8860, + 15060: 0x8866, + 15061: 0x8867, + 15062: 0x886A, + 15063: 0x886D, + 15064: 0x886F, + 15065: 0x8871, + 15066: 0x8873, + 15067: 0x8874, + 15068: 0x8875, + 15069: 0x8876, + 15070: 0x8878, + 15071: 0x8879, + 15072: 0x887A, + 15073: 0x887B, + 15074: 0x887C, + 15075: 0x8880, + 15076: 0x8883, + 15077: 0x8886, + 15078: 0x8887, + 15079: 0x8889, + 15080: 0x888A, + 15081: 0x888C, + 15082: 0x888E, + 15083: 0x888F, + 15084: 0x8890, + 15085: 0x8891, + 15086: 0x8893, + 15087: 0x8894, + 15088: 0x8895, + 15089: 0x8897, + 15090: 0x8898, + 15091: 0x8899, + 15092: 0x889A, + 15093: 0x889B, + 15094: 0x889D, + 15095: 0x889E, + 15096: 0x889F, + 15097: 0x88A0, + 15098: 0x88A1, + 15099: 0x88A3, + 15100: 0x88A5, + 15101: 0x88A6, + 15102: 0x88A7, + 15103: 0x88A8, + 15104: 0x88A9, + 15105: 0x88AA, + 15106: 0x5C0F, + 15107: 0x5B5D, + 15108: 0x6821, + 15109: 0x8096, + 15110: 0x5578, + 15111: 0x7B11, + 15112: 0x6548, + 15113: 0x6954, + 15114: 0x4E9B, + 15115: 0x6B47, + 15116: 0x874E, + 15117: 0x978B, + 15118: 0x534F, + 15119: 0x631F, + 15120: 0x643A, + 15121: 0x90AA, + 15122: 0x659C, + 15123: 0x80C1, + 15124: 0x8C10, + 15125: 0x5199, + 15126: 0x68B0, + 15127: 0x5378, + 15128: 0x87F9, + 15129: 0x61C8, + 15130: 0x6CC4, + 15131: 0x6CFB, + 15132: 0x8C22, + 15133: 0x5C51, + 15134: 0x85AA, + 15135: 0x82AF, + 15136: 0x950C, + 15137: 0x6B23, + 15138: 0x8F9B, + 15139: 0x65B0, + 15140: 0x5FFB, + 15141: 0x5FC3, + 15142: 0x4FE1, + 15143: 0x8845, + 15144: 0x661F, + 15145: 0x8165, + 15146: 0x7329, + 15147: 0x60FA, + 15148: 0x5174, + 15149: 0x5211, + 15150: 0x578B, + 15151: 0x5F62, + 15152: 0x90A2, + 15153: 0x884C, + 15154: 0x9192, + 15155: 0x5E78, + 15156: 0x674F, + 15157: 0x6027, + 15158: 0x59D3, + 15159: 0x5144, + 15160: 0x51F6, + 15161: 0x80F8, + 15162: 0x5308, + 15163: 0x6C79, + 15164: 0x96C4, + 15165: 0x718A, + 15166: 0x4F11, + 15167: 0x4FEE, + 15168: 0x7F9E, + 15169: 0x673D, + 15170: 0x55C5, + 15171: 0x9508, + 15172: 0x79C0, + 15173: 0x8896, + 15174: 0x7EE3, + 15175: 0x589F, + 15176: 0x620C, + 15177: 0x9700, + 15178: 0x865A, + 15179: 0x5618, + 15180: 0x987B, + 15181: 0x5F90, + 15182: 0x8BB8, + 15183: 0x84C4, + 15184: 0x9157, + 15185: 0x53D9, + 15186: 0x65ED, + 15187: 0x5E8F, + 15188: 0x755C, + 15189: 0x6064, + 15190: 0x7D6E, + 15191: 0x5A7F, + 15192: 0x7EEA, + 15193: 0x7EED, + 15194: 0x8F69, + 15195: 0x55A7, + 15196: 0x5BA3, + 15197: 0x60AC, + 15198: 0x65CB, + 15199: 0x7384, + 15200: 0x88AC, + 15201: 0x88AE, + 15202: 0x88AF, + 15203: 0x88B0, + 15204: 0x88B2, + 15205: 0x88B3, + 15206: 0x88B4, + 15207: 0x88B5, + 15208: 0x88B6, + 15209: 0x88B8, + 15210: 0x88B9, + 15211: 0x88BA, + 15212: 0x88BB, + 15213: 0x88BD, + 15214: 0x88BE, + 15215: 0x88BF, + 15216: 0x88C0, + 15217: 0x88C3, + 15218: 0x88C4, + 15219: 0x88C7, + 15220: 0x88C8, + 15221: 0x88CA, + 15222: 0x88CB, + 15223: 0x88CC, + 15224: 0x88CD, + 15225: 0x88CF, + 15226: 0x88D0, + 15227: 0x88D1, + 15228: 0x88D3, + 15229: 0x88D6, + 15230: 0x88D7, + 15231: 0x88DA, + 15232: 0x88DB, + 15233: 0x88DC, + 15234: 0x88DD, + 15235: 0x88DE, + 15236: 0x88E0, + 15237: 0x88E1, + 15238: 0x88E6, + 15239: 0x88E7, + 15240: 0x88E9, + 15241: 0x88EA, + 15242: 0x88EB, + 15243: 0x88EC, + 15244: 0x88ED, + 15245: 0x88EE, + 15246: 0x88EF, + 15247: 0x88F2, + 15248: 0x88F5, + 15249: 0x88F6, + 15250: 0x88F7, + 15251: 0x88FA, + 15252: 0x88FB, + 15253: 0x88FD, + 15254: 0x88FF, + 15255: 0x8900, + 15256: 0x8901, + 15257: 0x8903, + 15258: 0x8904, + 15259: 0x8905, + 15260: 0x8906, + 15261: 0x8907, + 15262: 0x8908, + 15263: 0x8909, + 15264: 0x890B, + 15265: 0x890C, + 15266: 0x890D, + 15267: 0x890E, + 15268: 0x890F, + 15269: 0x8911, + 15270: 0x8914, + 15271: 0x8915, + 15272: 0x8916, + 15273: 0x8917, + 15274: 0x8918, + 15275: 0x891C, + 15276: 0x891D, + 15277: 0x891E, + 15278: 0x891F, + 15279: 0x8920, + 15280: 0x8922, + 15281: 0x8923, + 15282: 0x8924, + 15283: 0x8926, + 15284: 0x8927, + 15285: 0x8928, + 15286: 0x8929, + 15287: 0x892C, + 15288: 0x892D, + 15289: 0x892E, + 15290: 0x892F, + 15291: 0x8931, + 15292: 0x8932, + 15293: 0x8933, + 15294: 0x8935, + 15295: 0x8937, + 15296: 0x9009, + 15297: 0x7663, + 15298: 0x7729, + 15299: 0x7EDA, + 15300: 0x9774, + 15301: 0x859B, + 15302: 0x5B66, + 15303: 0x7A74, + 15304: 0x96EA, + 15305: 0x8840, + 15306: 0x52CB, + 15307: 0x718F, + 15308: 0x5FAA, + 15309: 0x65EC, + 15310: 0x8BE2, + 15311: 0x5BFB, + 15312: 0x9A6F, + 15313: 0x5DE1, + 15314: 0x6B89, + 15315: 0x6C5B, + 15316: 0x8BAD, + 15317: 0x8BAF, + 15318: 0x900A, + 15319: 0x8FC5, + 15320: 0x538B, + 15321: 0x62BC, + 15322: 0x9E26, + 15323: 0x9E2D, + 15324: 0x5440, + 15325: 0x4E2B, + 15326: 0x82BD, + 15327: 0x7259, + 15328: 0x869C, + 15329: 0x5D16, + 15330: 0x8859, + 15331: 0x6DAF, + 15332: 0x96C5, + 15333: 0x54D1, + 15334: 0x4E9A, + 15335: 0x8BB6, + 15336: 0x7109, + 15337: 0x54BD, + 15338: 0x9609, + 15339: 0x70DF, + 15340: 0x6DF9, + 15341: 0x76D0, + 15342: 0x4E25, + 15343: 0x7814, + 15344: 0x8712, + 15345: 0x5CA9, + 15346: 0x5EF6, + 15347: 0x8A00, + 15348: 0x989C, + 15349: 0x960E, + 15350: 0x708E, + 15351: 0x6CBF, + 15352: 0x5944, + 15353: 0x63A9, + 15354: 0x773C, + 15355: 0x884D, + 15356: 0x6F14, + 15357: 0x8273, + 15358: 0x5830, + 15359: 0x71D5, + 15360: 0x538C, + 15361: 0x781A, + 15362: 0x96C1, + 15363: 0x5501, + 15364: 0x5F66, + 15365: 0x7130, + 15366: 0x5BB4, + 15367: 0x8C1A, + 15368: 0x9A8C, + 15369: 0x6B83, + 15370: 0x592E, + 15371: 0x9E2F, + 15372: 0x79E7, + 15373: 0x6768, + 15374: 0x626C, + 15375: 0x4F6F, + 15376: 0x75A1, + 15377: 0x7F8A, + 15378: 0x6D0B, + 15379: 0x9633, + 15380: 0x6C27, + 15381: 0x4EF0, + 15382: 0x75D2, + 15383: 0x517B, + 15384: 0x6837, + 15385: 0x6F3E, + 15386: 0x9080, + 15387: 0x8170, + 15388: 0x5996, + 15389: 0x7476, + 15390: 0x8938, + 15391: 0x8939, + 15392: 0x893A, + 15393: 0x893B, + 15394: 0x893C, + 15395: 0x893D, + 15396: 0x893E, + 15397: 0x893F, + 15398: 0x8940, + 15399: 0x8942, + 15400: 0x8943, + 15401: 0x8945, + 15402: 0x8946, + 15403: 0x8947, + 15404: 0x8948, + 15405: 0x8949, + 15406: 0x894A, + 15407: 0x894B, + 15408: 0x894C, + 15409: 0x894D, + 15410: 0x894E, + 15411: 0x894F, + 15412: 0x8950, + 15413: 0x8951, + 15414: 0x8952, + 15415: 0x8953, + 15416: 0x8954, + 15417: 0x8955, + 15418: 0x8956, + 15419: 0x8957, + 15420: 0x8958, + 15421: 0x8959, + 15422: 0x895A, + 15423: 0x895B, + 15424: 0x895C, + 15425: 0x895D, + 15426: 0x8960, + 15427: 0x8961, + 15428: 0x8962, + 15429: 0x8963, + 15430: 0x8964, + 15431: 0x8965, + 15432: 0x8967, + 15433: 0x8968, + 15434: 0x8969, + 15435: 0x896A, + 15436: 0x896B, + 15437: 0x896C, + 15438: 0x896D, + 15439: 0x896E, + 15440: 0x896F, + 15441: 0x8970, + 15442: 0x8971, + 15443: 0x8972, + 15444: 0x8973, + 15445: 0x8974, + 15446: 0x8975, + 15447: 0x8976, + 15448: 0x8977, + 15449: 0x8978, + 15450: 0x8979, + 15451: 0x897A, + 15452: 0x897C, + 15453: 0x897D, + 15454: 0x897E, + 15455: 0x8980, + 15456: 0x8982, + 15457: 0x8984, + 15458: 0x8985, + 15459: 0x8987, + 15460: 0x8988, + 15461: 0x8989, + 15462: 0x898A, + 15463: 0x898B, + 15464: 0x898C, + 15465: 0x898D, + 15466: 0x898E, + 15467: 0x898F, + 15468: 0x8990, + 15469: 0x8991, + 15470: 0x8992, + 15471: 0x8993, + 15472: 0x8994, + 15473: 0x8995, + 15474: 0x8996, + 15475: 0x8997, + 15476: 0x8998, + 15477: 0x8999, + 15478: 0x899A, + 15479: 0x899B, + 15480: 0x899C, + 15481: 0x899D, + 15482: 0x899E, + 15483: 0x899F, + 15484: 0x89A0, + 15485: 0x89A1, + 15486: 0x6447, + 15487: 0x5C27, + 15488: 0x9065, + 15489: 0x7A91, + 15490: 0x8C23, + 15491: 0x59DA, + 15492: 0x54AC, + 15493: 0x8200, + 15494: 0x836F, + 15495: 0x8981, + 15496: 0x8000, + 15497: 0x6930, + 15498: 0x564E, + 15499: 0x8036, + 15500: 0x7237, + 15501: 0x91CE, + 15502: 0x51B6, + 15503: 0x4E5F, + 15504: 0x9875, + 15505: 0x6396, + 15506: 0x4E1A, + 15507: 0x53F6, + 15508: 0x66F3, + 15509: 0x814B, + 15510: 0x591C, + 15511: 0x6DB2, + 15512: 0x4E00, + 15513: 0x58F9, + 15514: 0x533B, + 15515: 0x63D6, + 15516: 0x94F1, + 15517: 0x4F9D, + 15518: 0x4F0A, + 15519: 0x8863, + 15520: 0x9890, + 15521: 0x5937, + 15522: 0x9057, + 15523: 0x79FB, + 15524: 0x4EEA, + 15525: 0x80F0, + 15526: 0x7591, + 15527: 0x6C82, + 15528: 0x5B9C, + 15529: 0x59E8, + 15530: 0x5F5D, + 15531: 0x6905, + 15532: 0x8681, + 15533: 0x501A, + 15534: 0x5DF2, + 15535: 0x4E59, + 15536: 0x77E3, + 15537: 0x4EE5, + 15538: 0x827A, + 15539: 0x6291, + 15540: 0x6613, + 15541: 0x9091, + 15542: 0x5C79, + 15543: 0x4EBF, + 15544: 0x5F79, + 15545: 0x81C6, + 15546: 0x9038, + 15547: 0x8084, + 15548: 0x75AB, + 15549: 0x4EA6, + 15550: 0x88D4, + 15551: 0x610F, + 15552: 0x6BC5, + 15553: 0x5FC6, + 15554: 0x4E49, + 15555: 0x76CA, + 15556: 0x6EA2, + 15557: 0x8BE3, + 15558: 0x8BAE, + 15559: 0x8C0A, + 15560: 0x8BD1, + 15561: 0x5F02, + 15562: 0x7FFC, + 15563: 0x7FCC, + 15564: 0x7ECE, + 15565: 0x8335, + 15566: 0x836B, + 15567: 0x56E0, + 15568: 0x6BB7, + 15569: 0x97F3, + 15570: 0x9634, + 15571: 0x59FB, + 15572: 0x541F, + 15573: 0x94F6, + 15574: 0x6DEB, + 15575: 0x5BC5, + 15576: 0x996E, + 15577: 0x5C39, + 15578: 0x5F15, + 15579: 0x9690, + 15580: 0x89A2, + 15581: 0x89A3, + 15582: 0x89A4, + 15583: 0x89A5, + 15584: 0x89A6, + 15585: 0x89A7, + 15586: 0x89A8, + 15587: 0x89A9, + 15588: 0x89AA, + 15589: 0x89AB, + 15590: 0x89AC, + 15591: 0x89AD, + 15592: 0x89AE, + 15593: 0x89AF, + 15594: 0x89B0, + 15595: 0x89B1, + 15596: 0x89B2, + 15597: 0x89B3, + 15598: 0x89B4, + 15599: 0x89B5, + 15600: 0x89B6, + 15601: 0x89B7, + 15602: 0x89B8, + 15603: 0x89B9, + 15604: 0x89BA, + 15605: 0x89BB, + 15606: 0x89BC, + 15607: 0x89BD, + 15608: 0x89BE, + 15609: 0x89BF, + 15610: 0x89C0, + 15611: 0x89C3, + 15612: 0x89CD, + 15613: 0x89D3, + 15614: 0x89D4, + 15615: 0x89D5, + 15616: 0x89D7, + 15617: 0x89D8, + 15618: 0x89D9, + 15619: 0x89DB, + 15620: 0x89DD, + 15621: 0x89DF, + 15622: 0x89E0, + 15623: 0x89E1, + 15624: 0x89E2, + 15625: 0x89E4, + 15626: 0x89E7, + 15627: 0x89E8, + 15628: 0x89E9, + 15629: 0x89EA, + 15630: 0x89EC, + 15631: 0x89ED, + 15632: 0x89EE, + 15633: 0x89F0, + 15634: 0x89F1, + 15635: 0x89F2, + 15636: 0x89F4, + 15637: 0x89F5, + 15638: 0x89F6, + 15639: 0x89F7, + 15640: 0x89F8, + 15641: 0x89F9, + 15642: 0x89FA, + 15643: 0x89FB, + 15644: 0x89FC, + 15645: 0x89FD, + 15646: 0x89FE, + 15647: 0x89FF, + 15648: 0x8A01, + 15649: 0x8A02, + 15650: 0x8A03, + 15651: 0x8A04, + 15652: 0x8A05, + 15653: 0x8A06, + 15654: 0x8A08, + 15655: 0x8A09, + 15656: 0x8A0A, + 15657: 0x8A0B, + 15658: 0x8A0C, + 15659: 0x8A0D, + 15660: 0x8A0E, + 15661: 0x8A0F, + 15662: 0x8A10, + 15663: 0x8A11, + 15664: 0x8A12, + 15665: 0x8A13, + 15666: 0x8A14, + 15667: 0x8A15, + 15668: 0x8A16, + 15669: 0x8A17, + 15670: 0x8A18, + 15671: 0x8A19, + 15672: 0x8A1A, + 15673: 0x8A1B, + 15674: 0x8A1C, + 15675: 0x8A1D, + 15676: 0x5370, + 15677: 0x82F1, + 15678: 0x6A31, + 15679: 0x5A74, + 15680: 0x9E70, + 15681: 0x5E94, + 15682: 0x7F28, + 15683: 0x83B9, + 15684: 0x8424, + 15685: 0x8425, + 15686: 0x8367, + 15687: 0x8747, + 15688: 0x8FCE, + 15689: 0x8D62, + 15690: 0x76C8, + 15691: 0x5F71, + 15692: 0x9896, + 15693: 0x786C, + 15694: 0x6620, + 15695: 0x54DF, + 15696: 0x62E5, + 15697: 0x4F63, + 15698: 0x81C3, + 15699: 0x75C8, + 15700: 0x5EB8, + 15701: 0x96CD, + 15702: 0x8E0A, + 15703: 0x86F9, + 15704: 0x548F, + 15705: 0x6CF3, + 15706: 0x6D8C, + 15707: 0x6C38, + 15708: 0x607F, + 15709: 0x52C7, + 15710: 0x7528, + 15711: 0x5E7D, + 15712: 0x4F18, + 15713: 0x60A0, + 15714: 0x5FE7, + 15715: 0x5C24, + 15716: 0x7531, + 15717: 0x90AE, + 15718: 0x94C0, + 15719: 0x72B9, + 15720: 0x6CB9, + 15721: 0x6E38, + 15722: 0x9149, + 15723: 0x6709, + 15724: 0x53CB, + 15725: 0x53F3, + 15726: 0x4F51, + 15727: 0x91C9, + 15728: 0x8BF1, + 15729: 0x53C8, + 15730: 0x5E7C, + 15731: 0x8FC2, + 15732: 0x6DE4, + 15733: 0x4E8E, + 15734: 0x76C2, + 15735: 0x6986, + 15736: 0x865E, + 15737: 0x611A, + 15738: 0x8206, + 15739: 0x4F59, + 15740: 0x4FDE, + 15741: 0x903E, + 15742: 0x9C7C, + 15743: 0x6109, + 15744: 0x6E1D, + 15745: 0x6E14, + 15746: 0x9685, + 15747: 0x4E88, + 15748: 0x5A31, + 15749: 0x96E8, + 15750: 0x4E0E, + 15751: 0x5C7F, + 15752: 0x79B9, + 15753: 0x5B87, + 15754: 0x8BED, + 15755: 0x7FBD, + 15756: 0x7389, + 15757: 0x57DF, + 15758: 0x828B, + 15759: 0x90C1, + 15760: 0x5401, + 15761: 0x9047, + 15762: 0x55BB, + 15763: 0x5CEA, + 15764: 0x5FA1, + 15765: 0x6108, + 15766: 0x6B32, + 15767: 0x72F1, + 15768: 0x80B2, + 15769: 0x8A89, + 15770: 0x8A1E, + 15771: 0x8A1F, + 15772: 0x8A20, + 15773: 0x8A21, + 15774: 0x8A22, + 15775: 0x8A23, + 15776: 0x8A24, + 15777: 0x8A25, + 15778: 0x8A26, + 15779: 0x8A27, + 15780: 0x8A28, + 15781: 0x8A29, + 15782: 0x8A2A, + 15783: 0x8A2B, + 15784: 0x8A2C, + 15785: 0x8A2D, + 15786: 0x8A2E, + 15787: 0x8A2F, + 15788: 0x8A30, + 15789: 0x8A31, + 15790: 0x8A32, + 15791: 0x8A33, + 15792: 0x8A34, + 15793: 0x8A35, + 15794: 0x8A36, + 15795: 0x8A37, + 15796: 0x8A38, + 15797: 0x8A39, + 15798: 0x8A3A, + 15799: 0x8A3B, + 15800: 0x8A3C, + 15801: 0x8A3D, + 15802: 0x8A3F, + 15803: 0x8A40, + 15804: 0x8A41, + 15805: 0x8A42, + 15806: 0x8A43, + 15807: 0x8A44, + 15808: 0x8A45, + 15809: 0x8A46, + 15810: 0x8A47, + 15811: 0x8A49, + 15812: 0x8A4A, + 15813: 0x8A4B, + 15814: 0x8A4C, + 15815: 0x8A4D, + 15816: 0x8A4E, + 15817: 0x8A4F, + 15818: 0x8A50, + 15819: 0x8A51, + 15820: 0x8A52, + 15821: 0x8A53, + 15822: 0x8A54, + 15823: 0x8A55, + 15824: 0x8A56, + 15825: 0x8A57, + 15826: 0x8A58, + 15827: 0x8A59, + 15828: 0x8A5A, + 15829: 0x8A5B, + 15830: 0x8A5C, + 15831: 0x8A5D, + 15832: 0x8A5E, + 15833: 0x8A5F, + 15834: 0x8A60, + 15835: 0x8A61, + 15836: 0x8A62, + 15837: 0x8A63, + 15838: 0x8A64, + 15839: 0x8A65, + 15840: 0x8A66, + 15841: 0x8A67, + 15842: 0x8A68, + 15843: 0x8A69, + 15844: 0x8A6A, + 15845: 0x8A6B, + 15846: 0x8A6C, + 15847: 0x8A6D, + 15848: 0x8A6E, + 15849: 0x8A6F, + 15850: 0x8A70, + 15851: 0x8A71, + 15852: 0x8A72, + 15853: 0x8A73, + 15854: 0x8A74, + 15855: 0x8A75, + 15856: 0x8A76, + 15857: 0x8A77, + 15858: 0x8A78, + 15859: 0x8A7A, + 15860: 0x8A7B, + 15861: 0x8A7C, + 15862: 0x8A7D, + 15863: 0x8A7E, + 15864: 0x8A7F, + 15865: 0x8A80, + 15866: 0x6D74, + 15867: 0x5BD3, + 15868: 0x88D5, + 15869: 0x9884, + 15870: 0x8C6B, + 15871: 0x9A6D, + 15872: 0x9E33, + 15873: 0x6E0A, + 15874: 0x51A4, + 15875: 0x5143, + 15876: 0x57A3, + 15877: 0x8881, + 15878: 0x539F, + 15879: 0x63F4, + 15880: 0x8F95, + 15881: 0x56ED, + 15882: 0x5458, + 15883: 0x5706, + 15884: 0x733F, + 15885: 0x6E90, + 15886: 0x7F18, + 15887: 0x8FDC, + 15888: 0x82D1, + 15889: 0x613F, + 15890: 0x6028, + 15891: 0x9662, + 15892: 0x66F0, + 15893: 0x7EA6, + 15894: 0x8D8A, + 15895: 0x8DC3, + 15896: 0x94A5, + 15897: 0x5CB3, + 15898: 0x7CA4, + 15899: 0x6708, + 15900: 0x60A6, + 15901: 0x9605, + 15902: 0x8018, + 15903: 0x4E91, + 15904: 0x90E7, + 15905: 0x5300, + 15906: 0x9668, + 15907: 0x5141, + 15908: 0x8FD0, + 15909: 0x8574, + 15910: 0x915D, + 15911: 0x6655, + 15912: 0x97F5, + 15913: 0x5B55, + 15914: 0x531D, + 15915: 0x7838, + 15916: 0x6742, + 15917: 0x683D, + 15918: 0x54C9, + 15919: 0x707E, + 15920: 0x5BB0, + 15921: 0x8F7D, + 15922: 0x518D, + 15923: 0x5728, + 15924: 0x54B1, + 15925: 0x6512, + 15926: 0x6682, + 15927: 0x8D5E, + 15928: 0x8D43, + 15929: 0x810F, + 15930: 0x846C, + 15931: 0x906D, + 15932: 0x7CDF, + 15933: 0x51FF, + 15934: 0x85FB, + 15935: 0x67A3, + 15936: 0x65E9, + 15937: 0x6FA1, + 15938: 0x86A4, + 15939: 0x8E81, + 15940: 0x566A, + 15941: 0x9020, + 15942: 0x7682, + 15943: 0x7076, + 15944: 0x71E5, + 15945: 0x8D23, + 15946: 0x62E9, + 15947: 0x5219, + 15948: 0x6CFD, + 15949: 0x8D3C, + 15950: 0x600E, + 15951: 0x589E, + 15952: 0x618E, + 15953: 0x66FE, + 15954: 0x8D60, + 15955: 0x624E, + 15956: 0x55B3, + 15957: 0x6E23, + 15958: 0x672D, + 15959: 0x8F67, + 15960: 0x8A81, + 15961: 0x8A82, + 15962: 0x8A83, + 15963: 0x8A84, + 15964: 0x8A85, + 15965: 0x8A86, + 15966: 0x8A87, + 15967: 0x8A88, + 15968: 0x8A8B, + 15969: 0x8A8C, + 15970: 0x8A8D, + 15971: 0x8A8E, + 15972: 0x8A8F, + 15973: 0x8A90, + 15974: 0x8A91, + 15975: 0x8A92, + 15976: 0x8A94, + 15977: 0x8A95, + 15978: 0x8A96, + 15979: 0x8A97, + 15980: 0x8A98, + 15981: 0x8A99, + 15982: 0x8A9A, + 15983: 0x8A9B, + 15984: 0x8A9C, + 15985: 0x8A9D, + 15986: 0x8A9E, + 15987: 0x8A9F, + 15988: 0x8AA0, + 15989: 0x8AA1, + 15990: 0x8AA2, + 15991: 0x8AA3, + 15992: 0x8AA4, + 15993: 0x8AA5, + 15994: 0x8AA6, + 15995: 0x8AA7, + 15996: 0x8AA8, + 15997: 0x8AA9, + 15998: 0x8AAA, + 15999: 0x8AAB, + 16000: 0x8AAC, + 16001: 0x8AAD, + 16002: 0x8AAE, + 16003: 0x8AAF, + 16004: 0x8AB0, + 16005: 0x8AB1, + 16006: 0x8AB2, + 16007: 0x8AB3, + 16008: 0x8AB4, + 16009: 0x8AB5, + 16010: 0x8AB6, + 16011: 0x8AB7, + 16012: 0x8AB8, + 16013: 0x8AB9, + 16014: 0x8ABA, + 16015: 0x8ABB, + 16016: 0x8ABC, + 16017: 0x8ABD, + 16018: 0x8ABE, + 16019: 0x8ABF, + 16020: 0x8AC0, + 16021: 0x8AC1, + 16022: 0x8AC2, + 16023: 0x8AC3, + 16024: 0x8AC4, + 16025: 0x8AC5, + 16026: 0x8AC6, + 16027: 0x8AC7, + 16028: 0x8AC8, + 16029: 0x8AC9, + 16030: 0x8ACA, + 16031: 0x8ACB, + 16032: 0x8ACC, + 16033: 0x8ACD, + 16034: 0x8ACE, + 16035: 0x8ACF, + 16036: 0x8AD0, + 16037: 0x8AD1, + 16038: 0x8AD2, + 16039: 0x8AD3, + 16040: 0x8AD4, + 16041: 0x8AD5, + 16042: 0x8AD6, + 16043: 0x8AD7, + 16044: 0x8AD8, + 16045: 0x8AD9, + 16046: 0x8ADA, + 16047: 0x8ADB, + 16048: 0x8ADC, + 16049: 0x8ADD, + 16050: 0x8ADE, + 16051: 0x8ADF, + 16052: 0x8AE0, + 16053: 0x8AE1, + 16054: 0x8AE2, + 16055: 0x8AE3, + 16056: 0x94E1, + 16057: 0x95F8, + 16058: 0x7728, + 16059: 0x6805, + 16060: 0x69A8, + 16061: 0x548B, + 16062: 0x4E4D, + 16063: 0x70B8, + 16064: 0x8BC8, + 16065: 0x6458, + 16066: 0x658B, + 16067: 0x5B85, + 16068: 0x7A84, + 16069: 0x503A, + 16070: 0x5BE8, + 16071: 0x77BB, + 16072: 0x6BE1, + 16073: 0x8A79, + 16074: 0x7C98, + 16075: 0x6CBE, + 16076: 0x76CF, + 16077: 0x65A9, + 16078: 0x8F97, + 16079: 0x5D2D, + 16080: 0x5C55, + 16081: 0x8638, + 16082: 0x6808, + 16083: 0x5360, + 16084: 0x6218, + 16085: 0x7AD9, + 16086: 0x6E5B, + 16087: 0x7EFD, + 16088: 0x6A1F, + 16089: 0x7AE0, + 16090: 0x5F70, + 16091: 0x6F33, + 16092: 0x5F20, + 16093: 0x638C, + 16094: 0x6DA8, + 16095: 0x6756, + 16096: 0x4E08, + 16097: 0x5E10, + 16098: 0x8D26, + 16099: 0x4ED7, + 16100: 0x80C0, + 16101: 0x7634, + 16102: 0x969C, + 16103: 0x62DB, + 16104: 0x662D, + 16105: 0x627E, + 16106: 0x6CBC, + 16107: 0x8D75, + 16108: 0x7167, + 16109: 0x7F69, + 16110: 0x5146, + 16111: 0x8087, + 16112: 0x53EC, + 16113: 0x906E, + 16114: 0x6298, + 16115: 0x54F2, + 16116: 0x86F0, + 16117: 0x8F99, + 16118: 0x8005, + 16119: 0x9517, + 16120: 0x8517, + 16121: 0x8FD9, + 16122: 0x6D59, + 16123: 0x73CD, + 16124: 0x659F, + 16125: 0x771F, + 16126: 0x7504, + 16127: 0x7827, + 16128: 0x81FB, + 16129: 0x8D1E, + 16130: 0x9488, + 16131: 0x4FA6, + 16132: 0x6795, + 16133: 0x75B9, + 16134: 0x8BCA, + 16135: 0x9707, + 16136: 0x632F, + 16137: 0x9547, + 16138: 0x9635, + 16139: 0x84B8, + 16140: 0x6323, + 16141: 0x7741, + 16142: 0x5F81, + 16143: 0x72F0, + 16144: 0x4E89, + 16145: 0x6014, + 16146: 0x6574, + 16147: 0x62EF, + 16148: 0x6B63, + 16149: 0x653F, + 16150: 0x8AE4, + 16151: 0x8AE5, + 16152: 0x8AE6, + 16153: 0x8AE7, + 16154: 0x8AE8, + 16155: 0x8AE9, + 16156: 0x8AEA, + 16157: 0x8AEB, + 16158: 0x8AEC, + 16159: 0x8AED, + 16160: 0x8AEE, + 16161: 0x8AEF, + 16162: 0x8AF0, + 16163: 0x8AF1, + 16164: 0x8AF2, + 16165: 0x8AF3, + 16166: 0x8AF4, + 16167: 0x8AF5, + 16168: 0x8AF6, + 16169: 0x8AF7, + 16170: 0x8AF8, + 16171: 0x8AF9, + 16172: 0x8AFA, + 16173: 0x8AFB, + 16174: 0x8AFC, + 16175: 0x8AFD, + 16176: 0x8AFE, + 16177: 0x8AFF, + 16178: 0x8B00, + 16179: 0x8B01, + 16180: 0x8B02, + 16181: 0x8B03, + 16182: 0x8B04, + 16183: 0x8B05, + 16184: 0x8B06, + 16185: 0x8B08, + 16186: 0x8B09, + 16187: 0x8B0A, + 16188: 0x8B0B, + 16189: 0x8B0C, + 16190: 0x8B0D, + 16191: 0x8B0E, + 16192: 0x8B0F, + 16193: 0x8B10, + 16194: 0x8B11, + 16195: 0x8B12, + 16196: 0x8B13, + 16197: 0x8B14, + 16198: 0x8B15, + 16199: 0x8B16, + 16200: 0x8B17, + 16201: 0x8B18, + 16202: 0x8B19, + 16203: 0x8B1A, + 16204: 0x8B1B, + 16205: 0x8B1C, + 16206: 0x8B1D, + 16207: 0x8B1E, + 16208: 0x8B1F, + 16209: 0x8B20, + 16210: 0x8B21, + 16211: 0x8B22, + 16212: 0x8B23, + 16213: 0x8B24, + 16214: 0x8B25, + 16215: 0x8B27, + 16216: 0x8B28, + 16217: 0x8B29, + 16218: 0x8B2A, + 16219: 0x8B2B, + 16220: 0x8B2C, + 16221: 0x8B2D, + 16222: 0x8B2E, + 16223: 0x8B2F, + 16224: 0x8B30, + 16225: 0x8B31, + 16226: 0x8B32, + 16227: 0x8B33, + 16228: 0x8B34, + 16229: 0x8B35, + 16230: 0x8B36, + 16231: 0x8B37, + 16232: 0x8B38, + 16233: 0x8B39, + 16234: 0x8B3A, + 16235: 0x8B3B, + 16236: 0x8B3C, + 16237: 0x8B3D, + 16238: 0x8B3E, + 16239: 0x8B3F, + 16240: 0x8B40, + 16241: 0x8B41, + 16242: 0x8B42, + 16243: 0x8B43, + 16244: 0x8B44, + 16245: 0x8B45, + 16246: 0x5E27, + 16247: 0x75C7, + 16248: 0x90D1, + 16249: 0x8BC1, + 16250: 0x829D, + 16251: 0x679D, + 16252: 0x652F, + 16253: 0x5431, + 16254: 0x8718, + 16255: 0x77E5, + 16256: 0x80A2, + 16257: 0x8102, + 16258: 0x6C41, + 16259: 0x4E4B, + 16260: 0x7EC7, + 16261: 0x804C, + 16262: 0x76F4, + 16263: 0x690D, + 16264: 0x6B96, + 16265: 0x6267, + 16266: 0x503C, + 16267: 0x4F84, + 16268: 0x5740, + 16269: 0x6307, + 16270: 0x6B62, + 16271: 0x8DBE, + 16272: 0x53EA, + 16273: 0x65E8, + 16274: 0x7EB8, + 16275: 0x5FD7, + 16276: 0x631A, + 16277: 0x63B7, + 16278: 0x81F3, + 16279: 0x81F4, + 16280: 0x7F6E, + 16281: 0x5E1C, + 16282: 0x5CD9, + 16283: 0x5236, + 16284: 0x667A, + 16285: 0x79E9, + 16286: 0x7A1A, + 16287: 0x8D28, + 16288: 0x7099, + 16289: 0x75D4, + 16290: 0x6EDE, + 16291: 0x6CBB, + 16292: 0x7A92, + 16293: 0x4E2D, + 16294: 0x76C5, + 16295: 0x5FE0, + 16296: 0x949F, + 16297: 0x8877, + 16298: 0x7EC8, + 16299: 0x79CD, + 16300: 0x80BF, + 16301: 0x91CD, + 16302: 0x4EF2, + 16303: 0x4F17, + 16304: 0x821F, + 16305: 0x5468, + 16306: 0x5DDE, + 16307: 0x6D32, + 16308: 0x8BCC, + 16309: 0x7CA5, + 16310: 0x8F74, + 16311: 0x8098, + 16312: 0x5E1A, + 16313: 0x5492, + 16314: 0x76B1, + 16315: 0x5B99, + 16316: 0x663C, + 16317: 0x9AA4, + 16318: 0x73E0, + 16319: 0x682A, + 16320: 0x86DB, + 16321: 0x6731, + 16322: 0x732A, + 16323: 0x8BF8, + 16324: 0x8BDB, + 16325: 0x9010, + 16326: 0x7AF9, + 16327: 0x70DB, + 16328: 0x716E, + 16329: 0x62C4, + 16330: 0x77A9, + 16331: 0x5631, + 16332: 0x4E3B, + 16333: 0x8457, + 16334: 0x67F1, + 16335: 0x52A9, + 16336: 0x86C0, + 16337: 0x8D2E, + 16338: 0x94F8, + 16339: 0x7B51, + 16340: 0x8B46, + 16341: 0x8B47, + 16342: 0x8B48, + 16343: 0x8B49, + 16344: 0x8B4A, + 16345: 0x8B4B, + 16346: 0x8B4C, + 16347: 0x8B4D, + 16348: 0x8B4E, + 16349: 0x8B4F, + 16350: 0x8B50, + 16351: 0x8B51, + 16352: 0x8B52, + 16353: 0x8B53, + 16354: 0x8B54, + 16355: 0x8B55, + 16356: 0x8B56, + 16357: 0x8B57, + 16358: 0x8B58, + 16359: 0x8B59, + 16360: 0x8B5A, + 16361: 0x8B5B, + 16362: 0x8B5C, + 16363: 0x8B5D, + 16364: 0x8B5E, + 16365: 0x8B5F, + 16366: 0x8B60, + 16367: 0x8B61, + 16368: 0x8B62, + 16369: 0x8B63, + 16370: 0x8B64, + 16371: 0x8B65, + 16372: 0x8B67, + 16373: 0x8B68, + 16374: 0x8B69, + 16375: 0x8B6A, + 16376: 0x8B6B, + 16377: 0x8B6D, + 16378: 0x8B6E, + 16379: 0x8B6F, + 16380: 0x8B70, + 16381: 0x8B71, + 16382: 0x8B72, + 16383: 0x8B73, + 16384: 0x8B74, + 16385: 0x8B75, + 16386: 0x8B76, + 16387: 0x8B77, + 16388: 0x8B78, + 16389: 0x8B79, + 16390: 0x8B7A, + 16391: 0x8B7B, + 16392: 0x8B7C, + 16393: 0x8B7D, + 16394: 0x8B7E, + 16395: 0x8B7F, + 16396: 0x8B80, + 16397: 0x8B81, + 16398: 0x8B82, + 16399: 0x8B83, + 16400: 0x8B84, + 16401: 0x8B85, + 16402: 0x8B86, + 16403: 0x8B87, + 16404: 0x8B88, + 16405: 0x8B89, + 16406: 0x8B8A, + 16407: 0x8B8B, + 16408: 0x8B8C, + 16409: 0x8B8D, + 16410: 0x8B8E, + 16411: 0x8B8F, + 16412: 0x8B90, + 16413: 0x8B91, + 16414: 0x8B92, + 16415: 0x8B93, + 16416: 0x8B94, + 16417: 0x8B95, + 16418: 0x8B96, + 16419: 0x8B97, + 16420: 0x8B98, + 16421: 0x8B99, + 16422: 0x8B9A, + 16423: 0x8B9B, + 16424: 0x8B9C, + 16425: 0x8B9D, + 16426: 0x8B9E, + 16427: 0x8B9F, + 16428: 0x8BAC, + 16429: 0x8BB1, + 16430: 0x8BBB, + 16431: 0x8BC7, + 16432: 0x8BD0, + 16433: 0x8BEA, + 16434: 0x8C09, + 16435: 0x8C1E, + 16436: 0x4F4F, + 16437: 0x6CE8, + 16438: 0x795D, + 16439: 0x9A7B, + 16440: 0x6293, + 16441: 0x722A, + 16442: 0x62FD, + 16443: 0x4E13, + 16444: 0x7816, + 16445: 0x8F6C, + 16446: 0x64B0, + 16447: 0x8D5A, + 16448: 0x7BC6, + 16449: 0x6869, + 16450: 0x5E84, + 16451: 0x88C5, + 16452: 0x5986, + 16453: 0x649E, + 16454: 0x58EE, + 16455: 0x72B6, + 16456: 0x690E, + 16457: 0x9525, + 16458: 0x8FFD, + 16459: 0x8D58, + 16460: 0x5760, + 16461: 0x7F00, + 16462: 0x8C06, + 16463: 0x51C6, + 16464: 0x6349, + 16465: 0x62D9, + 16466: 0x5353, + 16467: 0x684C, + 16468: 0x7422, + 16469: 0x8301, + 16470: 0x914C, + 16471: 0x5544, + 16472: 0x7740, + 16473: 0x707C, + 16474: 0x6D4A, + 16475: 0x5179, + 16476: 0x54A8, + 16477: 0x8D44, + 16478: 0x59FF, + 16479: 0x6ECB, + 16480: 0x6DC4, + 16481: 0x5B5C, + 16482: 0x7D2B, + 16483: 0x4ED4, + 16484: 0x7C7D, + 16485: 0x6ED3, + 16486: 0x5B50, + 16487: 0x81EA, + 16488: 0x6E0D, + 16489: 0x5B57, + 16490: 0x9B03, + 16491: 0x68D5, + 16492: 0x8E2A, + 16493: 0x5B97, + 16494: 0x7EFC, + 16495: 0x603B, + 16496: 0x7EB5, + 16497: 0x90B9, + 16498: 0x8D70, + 16499: 0x594F, + 16500: 0x63CD, + 16501: 0x79DF, + 16502: 0x8DB3, + 16503: 0x5352, + 16504: 0x65CF, + 16505: 0x7956, + 16506: 0x8BC5, + 16507: 0x963B, + 16508: 0x7EC4, + 16509: 0x94BB, + 16510: 0x7E82, + 16511: 0x5634, + 16512: 0x9189, + 16513: 0x6700, + 16514: 0x7F6A, + 16515: 0x5C0A, + 16516: 0x9075, + 16517: 0x6628, + 16518: 0x5DE6, + 16519: 0x4F50, + 16520: 0x67DE, + 16521: 0x505A, + 16522: 0x4F5C, + 16523: 0x5750, + 16524: 0x5EA7, + 16530: 0x8C38, + 16531: 0x8C39, + 16532: 0x8C3A, + 16533: 0x8C3B, + 16534: 0x8C3C, + 16535: 0x8C3D, + 16536: 0x8C3E, + 16537: 0x8C3F, + 16538: 0x8C40, + 16539: 0x8C42, + 16540: 0x8C43, + 16541: 0x8C44, + 16542: 0x8C45, + 16543: 0x8C48, + 16544: 0x8C4A, + 16545: 0x8C4B, + 16546: 0x8C4D, + 16547: 0x8C4E, + 16548: 0x8C4F, + 16549: 0x8C50, + 16550: 0x8C51, + 16551: 0x8C52, + 16552: 0x8C53, + 16553: 0x8C54, + 16554: 0x8C56, + 16555: 0x8C57, + 16556: 0x8C58, + 16557: 0x8C59, + 16558: 0x8C5B, + 16559: 0x8C5C, + 16560: 0x8C5D, + 16561: 0x8C5E, + 16562: 0x8C5F, + 16563: 0x8C60, + 16564: 0x8C63, + 16565: 0x8C64, + 16566: 0x8C65, + 16567: 0x8C66, + 16568: 0x8C67, + 16569: 0x8C68, + 16570: 0x8C69, + 16571: 0x8C6C, + 16572: 0x8C6D, + 16573: 0x8C6E, + 16574: 0x8C6F, + 16575: 0x8C70, + 16576: 0x8C71, + 16577: 0x8C72, + 16578: 0x8C74, + 16579: 0x8C75, + 16580: 0x8C76, + 16581: 0x8C77, + 16582: 0x8C7B, + 16583: 0x8C7C, + 16584: 0x8C7D, + 16585: 0x8C7E, + 16586: 0x8C7F, + 16587: 0x8C80, + 16588: 0x8C81, + 16589: 0x8C83, + 16590: 0x8C84, + 16591: 0x8C86, + 16592: 0x8C87, + 16593: 0x8C88, + 16594: 0x8C8B, + 16595: 0x8C8D, + 16596: 0x8C8E, + 16597: 0x8C8F, + 16598: 0x8C90, + 16599: 0x8C91, + 16600: 0x8C92, + 16601: 0x8C93, + 16602: 0x8C95, + 16603: 0x8C96, + 16604: 0x8C97, + 16605: 0x8C99, + 16606: 0x8C9A, + 16607: 0x8C9B, + 16608: 0x8C9C, + 16609: 0x8C9D, + 16610: 0x8C9E, + 16611: 0x8C9F, + 16612: 0x8CA0, + 16613: 0x8CA1, + 16614: 0x8CA2, + 16615: 0x8CA3, + 16616: 0x8CA4, + 16617: 0x8CA5, + 16618: 0x8CA6, + 16619: 0x8CA7, + 16620: 0x8CA8, + 16621: 0x8CA9, + 16622: 0x8CAA, + 16623: 0x8CAB, + 16624: 0x8CAC, + 16625: 0x8CAD, + 16626: 0x4E8D, + 16627: 0x4E0C, + 16628: 0x5140, + 16629: 0x4E10, + 16630: 0x5EFF, + 16631: 0x5345, + 16632: 0x4E15, + 16633: 0x4E98, + 16634: 0x4E1E, + 16635: 0x9B32, + 16636: 0x5B6C, + 16637: 0x5669, + 16638: 0x4E28, + 16639: 0x79BA, + 16640: 0x4E3F, + 16641: 0x5315, + 16642: 0x4E47, + 16643: 0x592D, + 16644: 0x723B, + 16645: 0x536E, + 16646: 0x6C10, + 16647: 0x56DF, + 16648: 0x80E4, + 16649: 0x9997, + 16650: 0x6BD3, + 16651: 0x777E, + 16652: 0x9F17, + 16653: 0x4E36, + 16654: 0x4E9F, + 16655: 0x9F10, + 16656: 0x4E5C, + 16657: 0x4E69, + 16658: 0x4E93, + 16659: 0x8288, + 16660: 0x5B5B, + 16661: 0x556C, + 16662: 0x560F, + 16663: 0x4EC4, + 16664: 0x538D, + 16665: 0x539D, + 16666: 0x53A3, + 16667: 0x53A5, + 16668: 0x53AE, + 16669: 0x9765, + 16670: 0x8D5D, + 16671: 0x531A, + 16672: 0x53F5, + 16673: 0x5326, + 16674: 0x532E, + 16675: 0x533E, + 16676: 0x8D5C, + 16677: 0x5366, + 16678: 0x5363, + 16679: 0x5202, + 16680: 0x5208, + 16681: 0x520E, + 16682: 0x522D, + 16683: 0x5233, + 16684: 0x523F, + 16685: 0x5240, + 16686: 0x524C, + 16687: 0x525E, + 16688: 0x5261, + 16689: 0x525C, + 16690: 0x84AF, + 16691: 0x527D, + 16692: 0x5282, + 16693: 0x5281, + 16694: 0x5290, + 16695: 0x5293, + 16696: 0x5182, + 16697: 0x7F54, + 16698: 0x4EBB, + 16699: 0x4EC3, + 16700: 0x4EC9, + 16701: 0x4EC2, + 16702: 0x4EE8, + 16703: 0x4EE1, + 16704: 0x4EEB, + 16705: 0x4EDE, + 16706: 0x4F1B, + 16707: 0x4EF3, + 16708: 0x4F22, + 16709: 0x4F64, + 16710: 0x4EF5, + 16711: 0x4F25, + 16712: 0x4F27, + 16713: 0x4F09, + 16714: 0x4F2B, + 16715: 0x4F5E, + 16716: 0x4F67, + 16717: 0x6538, + 16718: 0x4F5A, + 16719: 0x4F5D, + 16720: 0x8CAE, + 16721: 0x8CAF, + 16722: 0x8CB0, + 16723: 0x8CB1, + 16724: 0x8CB2, + 16725: 0x8CB3, + 16726: 0x8CB4, + 16727: 0x8CB5, + 16728: 0x8CB6, + 16729: 0x8CB7, + 16730: 0x8CB8, + 16731: 0x8CB9, + 16732: 0x8CBA, + 16733: 0x8CBB, + 16734: 0x8CBC, + 16735: 0x8CBD, + 16736: 0x8CBE, + 16737: 0x8CBF, + 16738: 0x8CC0, + 16739: 0x8CC1, + 16740: 0x8CC2, + 16741: 0x8CC3, + 16742: 0x8CC4, + 16743: 0x8CC5, + 16744: 0x8CC6, + 16745: 0x8CC7, + 16746: 0x8CC8, + 16747: 0x8CC9, + 16748: 0x8CCA, + 16749: 0x8CCB, + 16750: 0x8CCC, + 16751: 0x8CCD, + 16752: 0x8CCE, + 16753: 0x8CCF, + 16754: 0x8CD0, + 16755: 0x8CD1, + 16756: 0x8CD2, + 16757: 0x8CD3, + 16758: 0x8CD4, + 16759: 0x8CD5, + 16760: 0x8CD6, + 16761: 0x8CD7, + 16762: 0x8CD8, + 16763: 0x8CD9, + 16764: 0x8CDA, + 16765: 0x8CDB, + 16766: 0x8CDC, + 16767: 0x8CDD, + 16768: 0x8CDE, + 16769: 0x8CDF, + 16770: 0x8CE0, + 16771: 0x8CE1, + 16772: 0x8CE2, + 16773: 0x8CE3, + 16774: 0x8CE4, + 16775: 0x8CE5, + 16776: 0x8CE6, + 16777: 0x8CE7, + 16778: 0x8CE8, + 16779: 0x8CE9, + 16780: 0x8CEA, + 16781: 0x8CEB, + 16782: 0x8CEC, + 16783: 0x8CED, + 16784: 0x8CEE, + 16785: 0x8CEF, + 16786: 0x8CF0, + 16787: 0x8CF1, + 16788: 0x8CF2, + 16789: 0x8CF3, + 16790: 0x8CF4, + 16791: 0x8CF5, + 16792: 0x8CF6, + 16793: 0x8CF7, + 16794: 0x8CF8, + 16795: 0x8CF9, + 16796: 0x8CFA, + 16797: 0x8CFB, + 16798: 0x8CFC, + 16799: 0x8CFD, + 16800: 0x8CFE, + 16801: 0x8CFF, + 16802: 0x8D00, + 16803: 0x8D01, + 16804: 0x8D02, + 16805: 0x8D03, + 16806: 0x8D04, + 16807: 0x8D05, + 16808: 0x8D06, + 16809: 0x8D07, + 16810: 0x8D08, + 16811: 0x8D09, + 16812: 0x8D0A, + 16813: 0x8D0B, + 16814: 0x8D0C, + 16815: 0x8D0D, + 16816: 0x4F5F, + 16817: 0x4F57, + 16818: 0x4F32, + 16819: 0x4F3D, + 16820: 0x4F76, + 16821: 0x4F74, + 16822: 0x4F91, + 16823: 0x4F89, + 16824: 0x4F83, + 16825: 0x4F8F, + 16826: 0x4F7E, + 16827: 0x4F7B, + 16828: 0x4FAA, + 16829: 0x4F7C, + 16830: 0x4FAC, + 16831: 0x4F94, + 16832: 0x4FE6, + 16833: 0x4FE8, + 16834: 0x4FEA, + 16835: 0x4FC5, + 16836: 0x4FDA, + 16837: 0x4FE3, + 16838: 0x4FDC, + 16839: 0x4FD1, + 16840: 0x4FDF, + 16841: 0x4FF8, + 16842: 0x5029, + 16843: 0x504C, + 16844: 0x4FF3, + 16845: 0x502C, + 16846: 0x500F, + 16847: 0x502E, + 16848: 0x502D, + 16849: 0x4FFE, + 16850: 0x501C, + 16851: 0x500C, + 16852: 0x5025, + 16853: 0x5028, + 16854: 0x507E, + 16855: 0x5043, + 16856: 0x5055, + 16857: 0x5048, + 16858: 0x504E, + 16859: 0x506C, + 16860: 0x507B, + 16861: 0x50A5, + 16862: 0x50A7, + 16863: 0x50A9, + 16864: 0x50BA, + 16865: 0x50D6, + 16866: 0x5106, + 16867: 0x50ED, + 16868: 0x50EC, + 16869: 0x50E6, + 16870: 0x50EE, + 16871: 0x5107, + 16872: 0x510B, + 16873: 0x4EDD, + 16874: 0x6C3D, + 16875: 0x4F58, + 16876: 0x4F65, + 16877: 0x4FCE, + 16878: 0x9FA0, + 16879: 0x6C46, + 16880: 0x7C74, + 16881: 0x516E, + 16882: 0x5DFD, + 16883: 0x9EC9, + 16884: 0x9998, + 16885: 0x5181, + 16886: 0x5914, + 16887: 0x52F9, + 16888: 0x530D, + 16889: 0x8A07, + 16890: 0x5310, + 16891: 0x51EB, + 16892: 0x5919, + 16893: 0x5155, + 16894: 0x4EA0, + 16895: 0x5156, + 16896: 0x4EB3, + 16897: 0x886E, + 16898: 0x88A4, + 16899: 0x4EB5, + 16900: 0x8114, + 16901: 0x88D2, + 16902: 0x7980, + 16903: 0x5B34, + 16904: 0x8803, + 16905: 0x7FB8, + 16906: 0x51AB, + 16907: 0x51B1, + 16908: 0x51BD, + 16909: 0x51BC, + 16910: 0x8D0E, + 16911: 0x8D0F, + 16912: 0x8D10, + 16913: 0x8D11, + 16914: 0x8D12, + 16915: 0x8D13, + 16916: 0x8D14, + 16917: 0x8D15, + 16918: 0x8D16, + 16919: 0x8D17, + 16920: 0x8D18, + 16921: 0x8D19, + 16922: 0x8D1A, + 16923: 0x8D1B, + 16924: 0x8D1C, + 16925: 0x8D20, + 16926: 0x8D51, + 16927: 0x8D52, + 16928: 0x8D57, + 16929: 0x8D5F, + 16930: 0x8D65, + 16931: 0x8D68, + 16932: 0x8D69, + 16933: 0x8D6A, + 16934: 0x8D6C, + 16935: 0x8D6E, + 16936: 0x8D6F, + 16937: 0x8D71, + 16938: 0x8D72, + 16939: 0x8D78, + 16940: 0x8D79, + 16941: 0x8D7A, + 16942: 0x8D7B, + 16943: 0x8D7C, + 16944: 0x8D7D, + 16945: 0x8D7E, + 16946: 0x8D7F, + 16947: 0x8D80, + 16948: 0x8D82, + 16949: 0x8D83, + 16950: 0x8D86, + 16951: 0x8D87, + 16952: 0x8D88, + 16953: 0x8D89, + 16954: 0x8D8C, + 16955: 0x8D8D, + 16956: 0x8D8E, + 16957: 0x8D8F, + 16958: 0x8D90, + 16959: 0x8D92, + 16960: 0x8D93, + 16961: 0x8D95, + 16962: 0x8D96, + 16963: 0x8D97, + 16964: 0x8D98, + 16965: 0x8D99, + 16966: 0x8D9A, + 16967: 0x8D9B, + 16968: 0x8D9C, + 16969: 0x8D9D, + 16970: 0x8D9E, + 16971: 0x8DA0, + 16972: 0x8DA1, + 16973: 0x8DA2, + 16974: 0x8DA4, + 16975: 0x8DA5, + 16976: 0x8DA6, + 16977: 0x8DA7, + 16978: 0x8DA8, + 16979: 0x8DA9, + 16980: 0x8DAA, + 16981: 0x8DAB, + 16982: 0x8DAC, + 16983: 0x8DAD, + 16984: 0x8DAE, + 16985: 0x8DAF, + 16986: 0x8DB0, + 16987: 0x8DB2, + 16988: 0x8DB6, + 16989: 0x8DB7, + 16990: 0x8DB9, + 16991: 0x8DBB, + 16992: 0x8DBD, + 16993: 0x8DC0, + 16994: 0x8DC1, + 16995: 0x8DC2, + 16996: 0x8DC5, + 16997: 0x8DC7, + 16998: 0x8DC8, + 16999: 0x8DC9, + 17000: 0x8DCA, + 17001: 0x8DCD, + 17002: 0x8DD0, + 17003: 0x8DD2, + 17004: 0x8DD3, + 17005: 0x8DD4, + 17006: 0x51C7, + 17007: 0x5196, + 17008: 0x51A2, + 17009: 0x51A5, + 17010: 0x8BA0, + 17011: 0x8BA6, + 17012: 0x8BA7, + 17013: 0x8BAA, + 17014: 0x8BB4, + 17015: 0x8BB5, + 17016: 0x8BB7, + 17017: 0x8BC2, + 17018: 0x8BC3, + 17019: 0x8BCB, + 17020: 0x8BCF, + 17021: 0x8BCE, + 17022: 0x8BD2, + 17023: 0x8BD3, + 17024: 0x8BD4, + 17025: 0x8BD6, + 17026: 0x8BD8, + 17027: 0x8BD9, + 17028: 0x8BDC, + 17029: 0x8BDF, + 17030: 0x8BE0, + 17031: 0x8BE4, + 17032: 0x8BE8, + 17033: 0x8BE9, + 17034: 0x8BEE, + 17035: 0x8BF0, + 17036: 0x8BF3, + 17037: 0x8BF6, + 17038: 0x8BF9, + 17039: 0x8BFC, + 17040: 0x8BFF, + 17041: 0x8C00, + 17042: 0x8C02, + 17043: 0x8C04, + 17044: 0x8C07, + 17045: 0x8C0C, + 17046: 0x8C0F, + 17047: 0x8C11, + 17048: 0x8C12, + 17049: 0x8C14, + 17050: 0x8C15, + 17051: 0x8C16, + 17052: 0x8C19, + 17053: 0x8C1B, + 17054: 0x8C18, + 17055: 0x8C1D, + 17056: 0x8C1F, + 17057: 0x8C20, + 17058: 0x8C21, + 17059: 0x8C25, + 17060: 0x8C27, + 17061: 0x8C2A, + 17062: 0x8C2B, + 17063: 0x8C2E, + 17064: 0x8C2F, + 17065: 0x8C32, + 17066: 0x8C33, + 17067: 0x8C35, + 17068: 0x8C36, + 17069: 0x5369, + 17070: 0x537A, + 17071: 0x961D, + 17072: 0x9622, + 17073: 0x9621, + 17074: 0x9631, + 17075: 0x962A, + 17076: 0x963D, + 17077: 0x963C, + 17078: 0x9642, + 17079: 0x9649, + 17080: 0x9654, + 17081: 0x965F, + 17082: 0x9667, + 17083: 0x966C, + 17084: 0x9672, + 17085: 0x9674, + 17086: 0x9688, + 17087: 0x968D, + 17088: 0x9697, + 17089: 0x96B0, + 17090: 0x9097, + 17091: 0x909B, + 17092: 0x909D, + 17093: 0x9099, + 17094: 0x90AC, + 17095: 0x90A1, + 17096: 0x90B4, + 17097: 0x90B3, + 17098: 0x90B6, + 17099: 0x90BA, + 17100: 0x8DD5, + 17101: 0x8DD8, + 17102: 0x8DD9, + 17103: 0x8DDC, + 17104: 0x8DE0, + 17105: 0x8DE1, + 17106: 0x8DE2, + 17107: 0x8DE5, + 17108: 0x8DE6, + 17109: 0x8DE7, + 17110: 0x8DE9, + 17111: 0x8DED, + 17112: 0x8DEE, + 17113: 0x8DF0, + 17114: 0x8DF1, + 17115: 0x8DF2, + 17116: 0x8DF4, + 17117: 0x8DF6, + 17118: 0x8DFC, + 17119: 0x8DFE, + 17120: 0x8DFF, + 17121: 0x8E00, + 17122: 0x8E01, + 17123: 0x8E02, + 17124: 0x8E03, + 17125: 0x8E04, + 17126: 0x8E06, + 17127: 0x8E07, + 17128: 0x8E08, + 17129: 0x8E0B, + 17130: 0x8E0D, + 17131: 0x8E0E, + 17132: 0x8E10, + 17133: 0x8E11, + 17134: 0x8E12, + 17135: 0x8E13, + 17136: 0x8E15, + 17137: 0x8E16, + 17138: 0x8E17, + 17139: 0x8E18, + 17140: 0x8E19, + 17141: 0x8E1A, + 17142: 0x8E1B, + 17143: 0x8E1C, + 17144: 0x8E20, + 17145: 0x8E21, + 17146: 0x8E24, + 17147: 0x8E25, + 17148: 0x8E26, + 17149: 0x8E27, + 17150: 0x8E28, + 17151: 0x8E2B, + 17152: 0x8E2D, + 17153: 0x8E30, + 17154: 0x8E32, + 17155: 0x8E33, + 17156: 0x8E34, + 17157: 0x8E36, + 17158: 0x8E37, + 17159: 0x8E38, + 17160: 0x8E3B, + 17161: 0x8E3C, + 17162: 0x8E3E, + 17163: 0x8E3F, + 17164: 0x8E43, + 17165: 0x8E45, + 17166: 0x8E46, + 17167: 0x8E4C, + 17168: 0x8E4D, + 17169: 0x8E4E, + 17170: 0x8E4F, + 17171: 0x8E50, + 17172: 0x8E53, + 17173: 0x8E54, + 17174: 0x8E55, + 17175: 0x8E56, + 17176: 0x8E57, + 17177: 0x8E58, + 17178: 0x8E5A, + 17179: 0x8E5B, + 17180: 0x8E5C, + 17181: 0x8E5D, + 17182: 0x8E5E, + 17183: 0x8E5F, + 17184: 0x8E60, + 17185: 0x8E61, + 17186: 0x8E62, + 17187: 0x8E63, + 17188: 0x8E64, + 17189: 0x8E65, + 17190: 0x8E67, + 17191: 0x8E68, + 17192: 0x8E6A, + 17193: 0x8E6B, + 17194: 0x8E6E, + 17195: 0x8E71, + 17196: 0x90B8, + 17197: 0x90B0, + 17198: 0x90CF, + 17199: 0x90C5, + 17200: 0x90BE, + 17201: 0x90D0, + 17202: 0x90C4, + 17203: 0x90C7, + 17204: 0x90D3, + 17205: 0x90E6, + 17206: 0x90E2, + 17207: 0x90DC, + 17208: 0x90D7, + 17209: 0x90DB, + 17210: 0x90EB, + 17211: 0x90EF, + 17212: 0x90FE, + 17213: 0x9104, + 17214: 0x9122, + 17215: 0x911E, + 17216: 0x9123, + 17217: 0x9131, + 17218: 0x912F, + 17219: 0x9139, + 17220: 0x9143, + 17221: 0x9146, + 17222: 0x520D, + 17223: 0x5942, + 17224: 0x52A2, + 17225: 0x52AC, + 17226: 0x52AD, + 17227: 0x52BE, + 17228: 0x54FF, + 17229: 0x52D0, + 17230: 0x52D6, + 17231: 0x52F0, + 17232: 0x53DF, + 17233: 0x71EE, + 17234: 0x77CD, + 17235: 0x5EF4, + 17236: 0x51F5, + 17237: 0x51FC, + 17238: 0x9B2F, + 17239: 0x53B6, + 17240: 0x5F01, + 17241: 0x755A, + 17242: 0x5DEF, + 17243: 0x574C, + 17244: 0x57A9, + 17245: 0x57A1, + 17246: 0x587E, + 17247: 0x58BC, + 17248: 0x58C5, + 17249: 0x58D1, + 17250: 0x5729, + 17251: 0x572C, + 17252: 0x572A, + 17253: 0x5733, + 17254: 0x5739, + 17255: 0x572E, + 17256: 0x572F, + 17257: 0x575C, + 17258: 0x573B, + 17259: 0x5742, + 17260: 0x5769, + 17261: 0x5785, + 17262: 0x576B, + 17263: 0x5786, + 17264: 0x577C, + 17265: 0x577B, + 17266: 0x5768, + 17267: 0x576D, + 17268: 0x5776, + 17269: 0x5773, + 17270: 0x57AD, + 17271: 0x57A4, + 17272: 0x578C, + 17273: 0x57B2, + 17274: 0x57CF, + 17275: 0x57A7, + 17276: 0x57B4, + 17277: 0x5793, + 17278: 0x57A0, + 17279: 0x57D5, + 17280: 0x57D8, + 17281: 0x57DA, + 17282: 0x57D9, + 17283: 0x57D2, + 17284: 0x57B8, + 17285: 0x57F4, + 17286: 0x57EF, + 17287: 0x57F8, + 17288: 0x57E4, + 17289: 0x57DD, + 17290: 0x8E73, + 17291: 0x8E75, + 17292: 0x8E77, + 17293: 0x8E78, + 17294: 0x8E79, + 17295: 0x8E7A, + 17296: 0x8E7B, + 17297: 0x8E7D, + 17298: 0x8E7E, + 17299: 0x8E80, + 17300: 0x8E82, + 17301: 0x8E83, + 17302: 0x8E84, + 17303: 0x8E86, + 17304: 0x8E88, + 17305: 0x8E89, + 17306: 0x8E8A, + 17307: 0x8E8B, + 17308: 0x8E8C, + 17309: 0x8E8D, + 17310: 0x8E8E, + 17311: 0x8E91, + 17312: 0x8E92, + 17313: 0x8E93, + 17314: 0x8E95, + 17315: 0x8E96, + 17316: 0x8E97, + 17317: 0x8E98, + 17318: 0x8E99, + 17319: 0x8E9A, + 17320: 0x8E9B, + 17321: 0x8E9D, + 17322: 0x8E9F, + 17323: 0x8EA0, + 17324: 0x8EA1, + 17325: 0x8EA2, + 17326: 0x8EA3, + 17327: 0x8EA4, + 17328: 0x8EA5, + 17329: 0x8EA6, + 17330: 0x8EA7, + 17331: 0x8EA8, + 17332: 0x8EA9, + 17333: 0x8EAA, + 17334: 0x8EAD, + 17335: 0x8EAE, + 17336: 0x8EB0, + 17337: 0x8EB1, + 17338: 0x8EB3, + 17339: 0x8EB4, + 17340: 0x8EB5, + 17341: 0x8EB6, + 17342: 0x8EB7, + 17343: 0x8EB8, + 17344: 0x8EB9, + 17345: 0x8EBB, + 17346: 0x8EBC, + 17347: 0x8EBD, + 17348: 0x8EBE, + 17349: 0x8EBF, + 17350: 0x8EC0, + 17351: 0x8EC1, + 17352: 0x8EC2, + 17353: 0x8EC3, + 17354: 0x8EC4, + 17355: 0x8EC5, + 17356: 0x8EC6, + 17357: 0x8EC7, + 17358: 0x8EC8, + 17359: 0x8EC9, + 17360: 0x8ECA, + 17361: 0x8ECB, + 17362: 0x8ECC, + 17363: 0x8ECD, + 17364: 0x8ECF, + 17365: 0x8ED0, + 17366: 0x8ED1, + 17367: 0x8ED2, + 17368: 0x8ED3, + 17369: 0x8ED4, + 17370: 0x8ED5, + 17371: 0x8ED6, + 17372: 0x8ED7, + 17373: 0x8ED8, + 17374: 0x8ED9, + 17375: 0x8EDA, + 17376: 0x8EDB, + 17377: 0x8EDC, + 17378: 0x8EDD, + 17379: 0x8EDE, + 17380: 0x8EDF, + 17381: 0x8EE0, + 17382: 0x8EE1, + 17383: 0x8EE2, + 17384: 0x8EE3, + 17385: 0x8EE4, + 17386: 0x580B, + 17387: 0x580D, + 17388: 0x57FD, + 17389: 0x57ED, + 17390: 0x5800, + 17391: 0x581E, + 17392: 0x5819, + 17393: 0x5844, + 17394: 0x5820, + 17395: 0x5865, + 17396: 0x586C, + 17397: 0x5881, + 17398: 0x5889, + 17399: 0x589A, + 17400: 0x5880, + 17401: 0x99A8, + 17402: 0x9F19, + 17403: 0x61FF, + 17404: 0x8279, + 17405: 0x827D, + 17406: 0x827F, + 17407: 0x828F, + 17408: 0x828A, + 17409: 0x82A8, + 17410: 0x8284, + 17411: 0x828E, + 17412: 0x8291, + 17413: 0x8297, + 17414: 0x8299, + 17415: 0x82AB, + 17416: 0x82B8, + 17417: 0x82BE, + 17418: 0x82B0, + 17419: 0x82C8, + 17420: 0x82CA, + 17421: 0x82E3, + 17422: 0x8298, + 17423: 0x82B7, + 17424: 0x82AE, + 17425: 0x82CB, + 17426: 0x82CC, + 17427: 0x82C1, + 17428: 0x82A9, + 17429: 0x82B4, + 17430: 0x82A1, + 17431: 0x82AA, + 17432: 0x829F, + 17433: 0x82C4, + 17434: 0x82CE, + 17435: 0x82A4, + 17436: 0x82E1, + 17437: 0x8309, + 17438: 0x82F7, + 17439: 0x82E4, + 17440: 0x830F, + 17441: 0x8307, + 17442: 0x82DC, + 17443: 0x82F4, + 17444: 0x82D2, + 17445: 0x82D8, + 17446: 0x830C, + 17447: 0x82FB, + 17448: 0x82D3, + 17449: 0x8311, + 17450: 0x831A, + 17451: 0x8306, + 17452: 0x8314, + 17453: 0x8315, + 17454: 0x82E0, + 17455: 0x82D5, + 17456: 0x831C, + 17457: 0x8351, + 17458: 0x835B, + 17459: 0x835C, + 17460: 0x8308, + 17461: 0x8392, + 17462: 0x833C, + 17463: 0x8334, + 17464: 0x8331, + 17465: 0x839B, + 17466: 0x835E, + 17467: 0x832F, + 17468: 0x834F, + 17469: 0x8347, + 17470: 0x8343, + 17471: 0x835F, + 17472: 0x8340, + 17473: 0x8317, + 17474: 0x8360, + 17475: 0x832D, + 17476: 0x833A, + 17477: 0x8333, + 17478: 0x8366, + 17479: 0x8365, + 17480: 0x8EE5, + 17481: 0x8EE6, + 17482: 0x8EE7, + 17483: 0x8EE8, + 17484: 0x8EE9, + 17485: 0x8EEA, + 17486: 0x8EEB, + 17487: 0x8EEC, + 17488: 0x8EED, + 17489: 0x8EEE, + 17490: 0x8EEF, + 17491: 0x8EF0, + 17492: 0x8EF1, + 17493: 0x8EF2, + 17494: 0x8EF3, + 17495: 0x8EF4, + 17496: 0x8EF5, + 17497: 0x8EF6, + 17498: 0x8EF7, + 17499: 0x8EF8, + 17500: 0x8EF9, + 17501: 0x8EFA, + 17502: 0x8EFB, + 17503: 0x8EFC, + 17504: 0x8EFD, + 17505: 0x8EFE, + 17506: 0x8EFF, + 17507: 0x8F00, + 17508: 0x8F01, + 17509: 0x8F02, + 17510: 0x8F03, + 17511: 0x8F04, + 17512: 0x8F05, + 17513: 0x8F06, + 17514: 0x8F07, + 17515: 0x8F08, + 17516: 0x8F09, + 17517: 0x8F0A, + 17518: 0x8F0B, + 17519: 0x8F0C, + 17520: 0x8F0D, + 17521: 0x8F0E, + 17522: 0x8F0F, + 17523: 0x8F10, + 17524: 0x8F11, + 17525: 0x8F12, + 17526: 0x8F13, + 17527: 0x8F14, + 17528: 0x8F15, + 17529: 0x8F16, + 17530: 0x8F17, + 17531: 0x8F18, + 17532: 0x8F19, + 17533: 0x8F1A, + 17534: 0x8F1B, + 17535: 0x8F1C, + 17536: 0x8F1D, + 17537: 0x8F1E, + 17538: 0x8F1F, + 17539: 0x8F20, + 17540: 0x8F21, + 17541: 0x8F22, + 17542: 0x8F23, + 17543: 0x8F24, + 17544: 0x8F25, + 17545: 0x8F26, + 17546: 0x8F27, + 17547: 0x8F28, + 17548: 0x8F29, + 17549: 0x8F2A, + 17550: 0x8F2B, + 17551: 0x8F2C, + 17552: 0x8F2D, + 17553: 0x8F2E, + 17554: 0x8F2F, + 17555: 0x8F30, + 17556: 0x8F31, + 17557: 0x8F32, + 17558: 0x8F33, + 17559: 0x8F34, + 17560: 0x8F35, + 17561: 0x8F36, + 17562: 0x8F37, + 17563: 0x8F38, + 17564: 0x8F39, + 17565: 0x8F3A, + 17566: 0x8F3B, + 17567: 0x8F3C, + 17568: 0x8F3D, + 17569: 0x8F3E, + 17570: 0x8F3F, + 17571: 0x8F40, + 17572: 0x8F41, + 17573: 0x8F42, + 17574: 0x8F43, + 17575: 0x8F44, + 17576: 0x8368, + 17577: 0x831B, + 17578: 0x8369, + 17579: 0x836C, + 17580: 0x836A, + 17581: 0x836D, + 17582: 0x836E, + 17583: 0x83B0, + 17584: 0x8378, + 17585: 0x83B3, + 17586: 0x83B4, + 17587: 0x83A0, + 17588: 0x83AA, + 17589: 0x8393, + 17590: 0x839C, + 17591: 0x8385, + 17592: 0x837C, + 17593: 0x83B6, + 17594: 0x83A9, + 17595: 0x837D, + 17596: 0x83B8, + 17597: 0x837B, + 17598: 0x8398, + 17599: 0x839E, + 17600: 0x83A8, + 17601: 0x83BA, + 17602: 0x83BC, + 17603: 0x83C1, + 17604: 0x8401, + 17605: 0x83E5, + 17606: 0x83D8, + 17607: 0x5807, + 17608: 0x8418, + 17609: 0x840B, + 17610: 0x83DD, + 17611: 0x83FD, + 17612: 0x83D6, + 17613: 0x841C, + 17614: 0x8438, + 17615: 0x8411, + 17616: 0x8406, + 17617: 0x83D4, + 17618: 0x83DF, + 17619: 0x840F, + 17620: 0x8403, + 17621: 0x83F8, + 17622: 0x83F9, + 17623: 0x83EA, + 17624: 0x83C5, + 17625: 0x83C0, + 17626: 0x8426, + 17627: 0x83F0, + 17628: 0x83E1, + 17629: 0x845C, + 17630: 0x8451, + 17631: 0x845A, + 17632: 0x8459, + 17633: 0x8473, + 17634: 0x8487, + 17635: 0x8488, + 17636: 0x847A, + 17637: 0x8489, + 17638: 0x8478, + 17639: 0x843C, + 17640: 0x8446, + 17641: 0x8469, + 17642: 0x8476, + 17643: 0x848C, + 17644: 0x848E, + 17645: 0x8431, + 17646: 0x846D, + 17647: 0x84C1, + 17648: 0x84CD, + 17649: 0x84D0, + 17650: 0x84E6, + 17651: 0x84BD, + 17652: 0x84D3, + 17653: 0x84CA, + 17654: 0x84BF, + 17655: 0x84BA, + 17656: 0x84E0, + 17657: 0x84A1, + 17658: 0x84B9, + 17659: 0x84B4, + 17660: 0x8497, + 17661: 0x84E5, + 17662: 0x84E3, + 17663: 0x850C, + 17664: 0x750D, + 17665: 0x8538, + 17666: 0x84F0, + 17667: 0x8539, + 17668: 0x851F, + 17669: 0x853A, + 17670: 0x8F45, + 17671: 0x8F46, + 17672: 0x8F47, + 17673: 0x8F48, + 17674: 0x8F49, + 17675: 0x8F4A, + 17676: 0x8F4B, + 17677: 0x8F4C, + 17678: 0x8F4D, + 17679: 0x8F4E, + 17680: 0x8F4F, + 17681: 0x8F50, + 17682: 0x8F51, + 17683: 0x8F52, + 17684: 0x8F53, + 17685: 0x8F54, + 17686: 0x8F55, + 17687: 0x8F56, + 17688: 0x8F57, + 17689: 0x8F58, + 17690: 0x8F59, + 17691: 0x8F5A, + 17692: 0x8F5B, + 17693: 0x8F5C, + 17694: 0x8F5D, + 17695: 0x8F5E, + 17696: 0x8F5F, + 17697: 0x8F60, + 17698: 0x8F61, + 17699: 0x8F62, + 17700: 0x8F63, + 17701: 0x8F64, + 17702: 0x8F65, + 17703: 0x8F6A, + 17704: 0x8F80, + 17705: 0x8F8C, + 17706: 0x8F92, + 17707: 0x8F9D, + 17708: 0x8FA0, + 17709: 0x8FA1, + 17710: 0x8FA2, + 17711: 0x8FA4, + 17712: 0x8FA5, + 17713: 0x8FA6, + 17714: 0x8FA7, + 17715: 0x8FAA, + 17716: 0x8FAC, + 17717: 0x8FAD, + 17718: 0x8FAE, + 17719: 0x8FAF, + 17720: 0x8FB2, + 17721: 0x8FB3, + 17722: 0x8FB4, + 17723: 0x8FB5, + 17724: 0x8FB7, + 17725: 0x8FB8, + 17726: 0x8FBA, + 17727: 0x8FBB, + 17728: 0x8FBC, + 17729: 0x8FBF, + 17730: 0x8FC0, + 17731: 0x8FC3, + 17732: 0x8FC6, + 17733: 0x8FC9, + 17734: 0x8FCA, + 17735: 0x8FCB, + 17736: 0x8FCC, + 17737: 0x8FCD, + 17738: 0x8FCF, + 17739: 0x8FD2, + 17740: 0x8FD6, + 17741: 0x8FD7, + 17742: 0x8FDA, + 17743: 0x8FE0, + 17744: 0x8FE1, + 17745: 0x8FE3, + 17746: 0x8FE7, + 17747: 0x8FEC, + 17748: 0x8FEF, + 17749: 0x8FF1, + 17750: 0x8FF2, + 17751: 0x8FF4, + 17752: 0x8FF5, + 17753: 0x8FF6, + 17754: 0x8FFA, + 17755: 0x8FFB, + 17756: 0x8FFC, + 17757: 0x8FFE, + 17758: 0x8FFF, + 17759: 0x9007, + 17760: 0x9008, + 17761: 0x900C, + 17762: 0x900E, + 17763: 0x9013, + 17764: 0x9015, + 17765: 0x9018, + 17766: 0x8556, + 17767: 0x853B, + 17768: 0x84FF, + 17769: 0x84FC, + 17770: 0x8559, + 17771: 0x8548, + 17772: 0x8568, + 17773: 0x8564, + 17774: 0x855E, + 17775: 0x857A, + 17776: 0x77A2, + 17777: 0x8543, + 17778: 0x8572, + 17779: 0x857B, + 17780: 0x85A4, + 17781: 0x85A8, + 17782: 0x8587, + 17783: 0x858F, + 17784: 0x8579, + 17785: 0x85AE, + 17786: 0x859C, + 17787: 0x8585, + 17788: 0x85B9, + 17789: 0x85B7, + 17790: 0x85B0, + 17791: 0x85D3, + 17792: 0x85C1, + 17793: 0x85DC, + 17794: 0x85FF, + 17795: 0x8627, + 17796: 0x8605, + 17797: 0x8629, + 17798: 0x8616, + 17799: 0x863C, + 17800: 0x5EFE, + 17801: 0x5F08, + 17802: 0x593C, + 17803: 0x5941, + 17804: 0x8037, + 17805: 0x5955, + 17806: 0x595A, + 17807: 0x5958, + 17808: 0x530F, + 17809: 0x5C22, + 17810: 0x5C25, + 17811: 0x5C2C, + 17812: 0x5C34, + 17813: 0x624C, + 17814: 0x626A, + 17815: 0x629F, + 17816: 0x62BB, + 17817: 0x62CA, + 17818: 0x62DA, + 17819: 0x62D7, + 17820: 0x62EE, + 17821: 0x6322, + 17822: 0x62F6, + 17823: 0x6339, + 17824: 0x634B, + 17825: 0x6343, + 17826: 0x63AD, + 17827: 0x63F6, + 17828: 0x6371, + 17829: 0x637A, + 17830: 0x638E, + 17831: 0x63B4, + 17832: 0x636D, + 17833: 0x63AC, + 17834: 0x638A, + 17835: 0x6369, + 17836: 0x63AE, + 17837: 0x63BC, + 17838: 0x63F2, + 17839: 0x63F8, + 17840: 0x63E0, + 17841: 0x63FF, + 17842: 0x63C4, + 17843: 0x63DE, + 17844: 0x63CE, + 17845: 0x6452, + 17846: 0x63C6, + 17847: 0x63BE, + 17848: 0x6445, + 17849: 0x6441, + 17850: 0x640B, + 17851: 0x641B, + 17852: 0x6420, + 17853: 0x640C, + 17854: 0x6426, + 17855: 0x6421, + 17856: 0x645E, + 17857: 0x6484, + 17858: 0x646D, + 17859: 0x6496, + 17860: 0x9019, + 17861: 0x901C, + 17862: 0x9023, + 17863: 0x9024, + 17864: 0x9025, + 17865: 0x9027, + 17866: 0x9028, + 17867: 0x9029, + 17868: 0x902A, + 17869: 0x902B, + 17870: 0x902C, + 17871: 0x9030, + 17872: 0x9031, + 17873: 0x9032, + 17874: 0x9033, + 17875: 0x9034, + 17876: 0x9037, + 17877: 0x9039, + 17878: 0x903A, + 17879: 0x903D, + 17880: 0x903F, + 17881: 0x9040, + 17882: 0x9043, + 17883: 0x9045, + 17884: 0x9046, + 17885: 0x9048, + 17886: 0x9049, + 17887: 0x904A, + 17888: 0x904B, + 17889: 0x904C, + 17890: 0x904E, + 17891: 0x9054, + 17892: 0x9055, + 17893: 0x9056, + 17894: 0x9059, + 17895: 0x905A, + 17896: 0x905C, + 17897: 0x905D, + 17898: 0x905E, + 17899: 0x905F, + 17900: 0x9060, + 17901: 0x9061, + 17902: 0x9064, + 17903: 0x9066, + 17904: 0x9067, + 17905: 0x9069, + 17906: 0x906A, + 17907: 0x906B, + 17908: 0x906C, + 17909: 0x906F, + 17910: 0x9070, + 17911: 0x9071, + 17912: 0x9072, + 17913: 0x9073, + 17914: 0x9076, + 17915: 0x9077, + 17916: 0x9078, + 17917: 0x9079, + 17918: 0x907A, + 17919: 0x907B, + 17920: 0x907C, + 17921: 0x907E, + 17922: 0x9081, + 17923: 0x9084, + 17924: 0x9085, + 17925: 0x9086, + 17926: 0x9087, + 17927: 0x9089, + 17928: 0x908A, + 17929: 0x908C, + 17930: 0x908D, + 17931: 0x908E, + 17932: 0x908F, + 17933: 0x9090, + 17934: 0x9092, + 17935: 0x9094, + 17936: 0x9096, + 17937: 0x9098, + 17938: 0x909A, + 17939: 0x909C, + 17940: 0x909E, + 17941: 0x909F, + 17942: 0x90A0, + 17943: 0x90A4, + 17944: 0x90A5, + 17945: 0x90A7, + 17946: 0x90A8, + 17947: 0x90A9, + 17948: 0x90AB, + 17949: 0x90AD, + 17950: 0x90B2, + 17951: 0x90B7, + 17952: 0x90BC, + 17953: 0x90BD, + 17954: 0x90BF, + 17955: 0x90C0, + 17956: 0x647A, + 17957: 0x64B7, + 17958: 0x64B8, + 17959: 0x6499, + 17960: 0x64BA, + 17961: 0x64C0, + 17962: 0x64D0, + 17963: 0x64D7, + 17964: 0x64E4, + 17965: 0x64E2, + 17966: 0x6509, + 17967: 0x6525, + 17968: 0x652E, + 17969: 0x5F0B, + 17970: 0x5FD2, + 17971: 0x7519, + 17972: 0x5F11, + 17973: 0x535F, + 17974: 0x53F1, + 17975: 0x53FD, + 17976: 0x53E9, + 17977: 0x53E8, + 17978: 0x53FB, + 17979: 0x5412, + 17980: 0x5416, + 17981: 0x5406, + 17982: 0x544B, + 17983: 0x5452, + 17984: 0x5453, + 17985: 0x5454, + 17986: 0x5456, + 17987: 0x5443, + 17988: 0x5421, + 17989: 0x5457, + 17990: 0x5459, + 17991: 0x5423, + 17992: 0x5432, + 17993: 0x5482, + 17994: 0x5494, + 17995: 0x5477, + 17996: 0x5471, + 17997: 0x5464, + 17998: 0x549A, + 17999: 0x549B, + 18000: 0x5484, + 18001: 0x5476, + 18002: 0x5466, + 18003: 0x549D, + 18004: 0x54D0, + 18005: 0x54AD, + 18006: 0x54C2, + 18007: 0x54B4, + 18008: 0x54D2, + 18009: 0x54A7, + 18010: 0x54A6, + 18011: 0x54D3, + 18012: 0x54D4, + 18013: 0x5472, + 18014: 0x54A3, + 18015: 0x54D5, + 18016: 0x54BB, + 18017: 0x54BF, + 18018: 0x54CC, + 18019: 0x54D9, + 18020: 0x54DA, + 18021: 0x54DC, + 18022: 0x54A9, + 18023: 0x54AA, + 18024: 0x54A4, + 18025: 0x54DD, + 18026: 0x54CF, + 18027: 0x54DE, + 18028: 0x551B, + 18029: 0x54E7, + 18030: 0x5520, + 18031: 0x54FD, + 18032: 0x5514, + 18033: 0x54F3, + 18034: 0x5522, + 18035: 0x5523, + 18036: 0x550F, + 18037: 0x5511, + 18038: 0x5527, + 18039: 0x552A, + 18040: 0x5567, + 18041: 0x558F, + 18042: 0x55B5, + 18043: 0x5549, + 18044: 0x556D, + 18045: 0x5541, + 18046: 0x5555, + 18047: 0x553F, + 18048: 0x5550, + 18049: 0x553C, + 18050: 0x90C2, + 18051: 0x90C3, + 18052: 0x90C6, + 18053: 0x90C8, + 18054: 0x90C9, + 18055: 0x90CB, + 18056: 0x90CC, + 18057: 0x90CD, + 18058: 0x90D2, + 18059: 0x90D4, + 18060: 0x90D5, + 18061: 0x90D6, + 18062: 0x90D8, + 18063: 0x90D9, + 18064: 0x90DA, + 18065: 0x90DE, + 18066: 0x90DF, + 18067: 0x90E0, + 18068: 0x90E3, + 18069: 0x90E4, + 18070: 0x90E5, + 18071: 0x90E9, + 18072: 0x90EA, + 18073: 0x90EC, + 18074: 0x90EE, + 18075: 0x90F0, + 18076: 0x90F1, + 18077: 0x90F2, + 18078: 0x90F3, + 18079: 0x90F5, + 18080: 0x90F6, + 18081: 0x90F7, + 18082: 0x90F9, + 18083: 0x90FA, + 18084: 0x90FB, + 18085: 0x90FC, + 18086: 0x90FF, + 18087: 0x9100, + 18088: 0x9101, + 18089: 0x9103, + 18090: 0x9105, + 18091: 0x9106, + 18092: 0x9107, + 18093: 0x9108, + 18094: 0x9109, + 18095: 0x910A, + 18096: 0x910B, + 18097: 0x910C, + 18098: 0x910D, + 18099: 0x910E, + 18100: 0x910F, + 18101: 0x9110, + 18102: 0x9111, + 18103: 0x9112, + 18104: 0x9113, + 18105: 0x9114, + 18106: 0x9115, + 18107: 0x9116, + 18108: 0x9117, + 18109: 0x9118, + 18110: 0x911A, + 18111: 0x911B, + 18112: 0x911C, + 18113: 0x911D, + 18114: 0x911F, + 18115: 0x9120, + 18116: 0x9121, + 18117: 0x9124, + 18118: 0x9125, + 18119: 0x9126, + 18120: 0x9127, + 18121: 0x9128, + 18122: 0x9129, + 18123: 0x912A, + 18124: 0x912B, + 18125: 0x912C, + 18126: 0x912D, + 18127: 0x912E, + 18128: 0x9130, + 18129: 0x9132, + 18130: 0x9133, + 18131: 0x9134, + 18132: 0x9135, + 18133: 0x9136, + 18134: 0x9137, + 18135: 0x9138, + 18136: 0x913A, + 18137: 0x913B, + 18138: 0x913C, + 18139: 0x913D, + 18140: 0x913E, + 18141: 0x913F, + 18142: 0x9140, + 18143: 0x9141, + 18144: 0x9142, + 18145: 0x9144, + 18146: 0x5537, + 18147: 0x5556, + 18148: 0x5575, + 18149: 0x5576, + 18150: 0x5577, + 18151: 0x5533, + 18152: 0x5530, + 18153: 0x555C, + 18154: 0x558B, + 18155: 0x55D2, + 18156: 0x5583, + 18157: 0x55B1, + 18158: 0x55B9, + 18159: 0x5588, + 18160: 0x5581, + 18161: 0x559F, + 18162: 0x557E, + 18163: 0x55D6, + 18164: 0x5591, + 18165: 0x557B, + 18166: 0x55DF, + 18167: 0x55BD, + 18168: 0x55BE, + 18169: 0x5594, + 18170: 0x5599, + 18171: 0x55EA, + 18172: 0x55F7, + 18173: 0x55C9, + 18174: 0x561F, + 18175: 0x55D1, + 18176: 0x55EB, + 18177: 0x55EC, + 18178: 0x55D4, + 18179: 0x55E6, + 18180: 0x55DD, + 18181: 0x55C4, + 18182: 0x55EF, + 18183: 0x55E5, + 18184: 0x55F2, + 18185: 0x55F3, + 18186: 0x55CC, + 18187: 0x55CD, + 18188: 0x55E8, + 18189: 0x55F5, + 18190: 0x55E4, + 18191: 0x8F94, + 18192: 0x561E, + 18193: 0x5608, + 18194: 0x560C, + 18195: 0x5601, + 18196: 0x5624, + 18197: 0x5623, + 18198: 0x55FE, + 18199: 0x5600, + 18200: 0x5627, + 18201: 0x562D, + 18202: 0x5658, + 18203: 0x5639, + 18204: 0x5657, + 18205: 0x562C, + 18206: 0x564D, + 18207: 0x5662, + 18208: 0x5659, + 18209: 0x565C, + 18210: 0x564C, + 18211: 0x5654, + 18212: 0x5686, + 18213: 0x5664, + 18214: 0x5671, + 18215: 0x566B, + 18216: 0x567B, + 18217: 0x567C, + 18218: 0x5685, + 18219: 0x5693, + 18220: 0x56AF, + 18221: 0x56D4, + 18222: 0x56D7, + 18223: 0x56DD, + 18224: 0x56E1, + 18225: 0x56F5, + 18226: 0x56EB, + 18227: 0x56F9, + 18228: 0x56FF, + 18229: 0x5704, + 18230: 0x570A, + 18231: 0x5709, + 18232: 0x571C, + 18233: 0x5E0F, + 18234: 0x5E19, + 18235: 0x5E14, + 18236: 0x5E11, + 18237: 0x5E31, + 18238: 0x5E3B, + 18239: 0x5E3C, + 18240: 0x9145, + 18241: 0x9147, + 18242: 0x9148, + 18243: 0x9151, + 18244: 0x9153, + 18245: 0x9154, + 18246: 0x9155, + 18247: 0x9156, + 18248: 0x9158, + 18249: 0x9159, + 18250: 0x915B, + 18251: 0x915C, + 18252: 0x915F, + 18253: 0x9160, + 18254: 0x9166, + 18255: 0x9167, + 18256: 0x9168, + 18257: 0x916B, + 18258: 0x916D, + 18259: 0x9173, + 18260: 0x917A, + 18261: 0x917B, + 18262: 0x917C, + 18263: 0x9180, + 18264: 0x9181, + 18265: 0x9182, + 18266: 0x9183, + 18267: 0x9184, + 18268: 0x9186, + 18269: 0x9188, + 18270: 0x918A, + 18271: 0x918E, + 18272: 0x918F, + 18273: 0x9193, + 18274: 0x9194, + 18275: 0x9195, + 18276: 0x9196, + 18277: 0x9197, + 18278: 0x9198, + 18279: 0x9199, + 18280: 0x919C, + 18281: 0x919D, + 18282: 0x919E, + 18283: 0x919F, + 18284: 0x91A0, + 18285: 0x91A1, + 18286: 0x91A4, + 18287: 0x91A5, + 18288: 0x91A6, + 18289: 0x91A7, + 18290: 0x91A8, + 18291: 0x91A9, + 18292: 0x91AB, + 18293: 0x91AC, + 18294: 0x91B0, + 18295: 0x91B1, + 18296: 0x91B2, + 18297: 0x91B3, + 18298: 0x91B6, + 18299: 0x91B7, + 18300: 0x91B8, + 18301: 0x91B9, + 18302: 0x91BB, + 18303: 0x91BC, + 18304: 0x91BD, + 18305: 0x91BE, + 18306: 0x91BF, + 18307: 0x91C0, + 18308: 0x91C1, + 18309: 0x91C2, + 18310: 0x91C3, + 18311: 0x91C4, + 18312: 0x91C5, + 18313: 0x91C6, + 18314: 0x91C8, + 18315: 0x91CB, + 18316: 0x91D0, + 18317: 0x91D2, + 18318: 0x91D3, + 18319: 0x91D4, + 18320: 0x91D5, + 18321: 0x91D6, + 18322: 0x91D7, + 18323: 0x91D8, + 18324: 0x91D9, + 18325: 0x91DA, + 18326: 0x91DB, + 18327: 0x91DD, + 18328: 0x91DE, + 18329: 0x91DF, + 18330: 0x91E0, + 18331: 0x91E1, + 18332: 0x91E2, + 18333: 0x91E3, + 18334: 0x91E4, + 18335: 0x91E5, + 18336: 0x5E37, + 18337: 0x5E44, + 18338: 0x5E54, + 18339: 0x5E5B, + 18340: 0x5E5E, + 18341: 0x5E61, + 18342: 0x5C8C, + 18343: 0x5C7A, + 18344: 0x5C8D, + 18345: 0x5C90, + 18346: 0x5C96, + 18347: 0x5C88, + 18348: 0x5C98, + 18349: 0x5C99, + 18350: 0x5C91, + 18351: 0x5C9A, + 18352: 0x5C9C, + 18353: 0x5CB5, + 18354: 0x5CA2, + 18355: 0x5CBD, + 18356: 0x5CAC, + 18357: 0x5CAB, + 18358: 0x5CB1, + 18359: 0x5CA3, + 18360: 0x5CC1, + 18361: 0x5CB7, + 18362: 0x5CC4, + 18363: 0x5CD2, + 18364: 0x5CE4, + 18365: 0x5CCB, + 18366: 0x5CE5, + 18367: 0x5D02, + 18368: 0x5D03, + 18369: 0x5D27, + 18370: 0x5D26, + 18371: 0x5D2E, + 18372: 0x5D24, + 18373: 0x5D1E, + 18374: 0x5D06, + 18375: 0x5D1B, + 18376: 0x5D58, + 18377: 0x5D3E, + 18378: 0x5D34, + 18379: 0x5D3D, + 18380: 0x5D6C, + 18381: 0x5D5B, + 18382: 0x5D6F, + 18383: 0x5D5D, + 18384: 0x5D6B, + 18385: 0x5D4B, + 18386: 0x5D4A, + 18387: 0x5D69, + 18388: 0x5D74, + 18389: 0x5D82, + 18390: 0x5D99, + 18391: 0x5D9D, + 18392: 0x8C73, + 18393: 0x5DB7, + 18394: 0x5DC5, + 18395: 0x5F73, + 18396: 0x5F77, + 18397: 0x5F82, + 18398: 0x5F87, + 18399: 0x5F89, + 18400: 0x5F8C, + 18401: 0x5F95, + 18402: 0x5F99, + 18403: 0x5F9C, + 18404: 0x5FA8, + 18405: 0x5FAD, + 18406: 0x5FB5, + 18407: 0x5FBC, + 18408: 0x8862, + 18409: 0x5F61, + 18410: 0x72AD, + 18411: 0x72B0, + 18412: 0x72B4, + 18413: 0x72B7, + 18414: 0x72B8, + 18415: 0x72C3, + 18416: 0x72C1, + 18417: 0x72CE, + 18418: 0x72CD, + 18419: 0x72D2, + 18420: 0x72E8, + 18421: 0x72EF, + 18422: 0x72E9, + 18423: 0x72F2, + 18424: 0x72F4, + 18425: 0x72F7, + 18426: 0x7301, + 18427: 0x72F3, + 18428: 0x7303, + 18429: 0x72FA, + 18430: 0x91E6, + 18431: 0x91E7, + 18432: 0x91E8, + 18433: 0x91E9, + 18434: 0x91EA, + 18435: 0x91EB, + 18436: 0x91EC, + 18437: 0x91ED, + 18438: 0x91EE, + 18439: 0x91EF, + 18440: 0x91F0, + 18441: 0x91F1, + 18442: 0x91F2, + 18443: 0x91F3, + 18444: 0x91F4, + 18445: 0x91F5, + 18446: 0x91F6, + 18447: 0x91F7, + 18448: 0x91F8, + 18449: 0x91F9, + 18450: 0x91FA, + 18451: 0x91FB, + 18452: 0x91FC, + 18453: 0x91FD, + 18454: 0x91FE, + 18455: 0x91FF, + 18456: 0x9200, + 18457: 0x9201, + 18458: 0x9202, + 18459: 0x9203, + 18460: 0x9204, + 18461: 0x9205, + 18462: 0x9206, + 18463: 0x9207, + 18464: 0x9208, + 18465: 0x9209, + 18466: 0x920A, + 18467: 0x920B, + 18468: 0x920C, + 18469: 0x920D, + 18470: 0x920E, + 18471: 0x920F, + 18472: 0x9210, + 18473: 0x9211, + 18474: 0x9212, + 18475: 0x9213, + 18476: 0x9214, + 18477: 0x9215, + 18478: 0x9216, + 18479: 0x9217, + 18480: 0x9218, + 18481: 0x9219, + 18482: 0x921A, + 18483: 0x921B, + 18484: 0x921C, + 18485: 0x921D, + 18486: 0x921E, + 18487: 0x921F, + 18488: 0x9220, + 18489: 0x9221, + 18490: 0x9222, + 18491: 0x9223, + 18492: 0x9224, + 18493: 0x9225, + 18494: 0x9226, + 18495: 0x9227, + 18496: 0x9228, + 18497: 0x9229, + 18498: 0x922A, + 18499: 0x922B, + 18500: 0x922C, + 18501: 0x922D, + 18502: 0x922E, + 18503: 0x922F, + 18504: 0x9230, + 18505: 0x9231, + 18506: 0x9232, + 18507: 0x9233, + 18508: 0x9234, + 18509: 0x9235, + 18510: 0x9236, + 18511: 0x9237, + 18512: 0x9238, + 18513: 0x9239, + 18514: 0x923A, + 18515: 0x923B, + 18516: 0x923C, + 18517: 0x923D, + 18518: 0x923E, + 18519: 0x923F, + 18520: 0x9240, + 18521: 0x9241, + 18522: 0x9242, + 18523: 0x9243, + 18524: 0x9244, + 18525: 0x9245, + 18526: 0x72FB, + 18527: 0x7317, + 18528: 0x7313, + 18529: 0x7321, + 18530: 0x730A, + 18531: 0x731E, + 18532: 0x731D, + 18533: 0x7315, + 18534: 0x7322, + 18535: 0x7339, + 18536: 0x7325, + 18537: 0x732C, + 18538: 0x7338, + 18539: 0x7331, + 18540: 0x7350, + 18541: 0x734D, + 18542: 0x7357, + 18543: 0x7360, + 18544: 0x736C, + 18545: 0x736F, + 18546: 0x737E, + 18547: 0x821B, + 18548: 0x5925, + 18549: 0x98E7, + 18550: 0x5924, + 18551: 0x5902, + 18552: 0x9963, + 18553: 0x9967, + 18554: 0x9968, + 18555: 0x9969, + 18556: 0x996A, + 18557: 0x996B, + 18558: 0x996C, + 18559: 0x9974, + 18560: 0x9977, + 18561: 0x997D, + 18562: 0x9980, + 18563: 0x9984, + 18564: 0x9987, + 18565: 0x998A, + 18566: 0x998D, + 18567: 0x9990, + 18568: 0x9991, + 18569: 0x9993, + 18570: 0x9994, + 18571: 0x9995, + 18572: 0x5E80, + 18573: 0x5E91, + 18574: 0x5E8B, + 18575: 0x5E96, + 18576: 0x5EA5, + 18577: 0x5EA0, + 18578: 0x5EB9, + 18579: 0x5EB5, + 18580: 0x5EBE, + 18581: 0x5EB3, + 18582: 0x8D53, + 18583: 0x5ED2, + 18584: 0x5ED1, + 18585: 0x5EDB, + 18586: 0x5EE8, + 18587: 0x5EEA, + 18588: 0x81BA, + 18589: 0x5FC4, + 18590: 0x5FC9, + 18591: 0x5FD6, + 18592: 0x5FCF, + 18593: 0x6003, + 18594: 0x5FEE, + 18595: 0x6004, + 18596: 0x5FE1, + 18597: 0x5FE4, + 18598: 0x5FFE, + 18599: 0x6005, + 18600: 0x6006, + 18601: 0x5FEA, + 18602: 0x5FED, + 18603: 0x5FF8, + 18604: 0x6019, + 18605: 0x6035, + 18606: 0x6026, + 18607: 0x601B, + 18608: 0x600F, + 18609: 0x600D, + 18610: 0x6029, + 18611: 0x602B, + 18612: 0x600A, + 18613: 0x603F, + 18614: 0x6021, + 18615: 0x6078, + 18616: 0x6079, + 18617: 0x607B, + 18618: 0x607A, + 18619: 0x6042, + 18620: 0x9246, + 18621: 0x9247, + 18622: 0x9248, + 18623: 0x9249, + 18624: 0x924A, + 18625: 0x924B, + 18626: 0x924C, + 18627: 0x924D, + 18628: 0x924E, + 18629: 0x924F, + 18630: 0x9250, + 18631: 0x9251, + 18632: 0x9252, + 18633: 0x9253, + 18634: 0x9254, + 18635: 0x9255, + 18636: 0x9256, + 18637: 0x9257, + 18638: 0x9258, + 18639: 0x9259, + 18640: 0x925A, + 18641: 0x925B, + 18642: 0x925C, + 18643: 0x925D, + 18644: 0x925E, + 18645: 0x925F, + 18646: 0x9260, + 18647: 0x9261, + 18648: 0x9262, + 18649: 0x9263, + 18650: 0x9264, + 18651: 0x9265, + 18652: 0x9266, + 18653: 0x9267, + 18654: 0x9268, + 18655: 0x9269, + 18656: 0x926A, + 18657: 0x926B, + 18658: 0x926C, + 18659: 0x926D, + 18660: 0x926E, + 18661: 0x926F, + 18662: 0x9270, + 18663: 0x9271, + 18664: 0x9272, + 18665: 0x9273, + 18666: 0x9275, + 18667: 0x9276, + 18668: 0x9277, + 18669: 0x9278, + 18670: 0x9279, + 18671: 0x927A, + 18672: 0x927B, + 18673: 0x927C, + 18674: 0x927D, + 18675: 0x927E, + 18676: 0x927F, + 18677: 0x9280, + 18678: 0x9281, + 18679: 0x9282, + 18680: 0x9283, + 18681: 0x9284, + 18682: 0x9285, + 18683: 0x9286, + 18684: 0x9287, + 18685: 0x9288, + 18686: 0x9289, + 18687: 0x928A, + 18688: 0x928B, + 18689: 0x928C, + 18690: 0x928D, + 18691: 0x928F, + 18692: 0x9290, + 18693: 0x9291, + 18694: 0x9292, + 18695: 0x9293, + 18696: 0x9294, + 18697: 0x9295, + 18698: 0x9296, + 18699: 0x9297, + 18700: 0x9298, + 18701: 0x9299, + 18702: 0x929A, + 18703: 0x929B, + 18704: 0x929C, + 18705: 0x929D, + 18706: 0x929E, + 18707: 0x929F, + 18708: 0x92A0, + 18709: 0x92A1, + 18710: 0x92A2, + 18711: 0x92A3, + 18712: 0x92A4, + 18713: 0x92A5, + 18714: 0x92A6, + 18715: 0x92A7, + 18716: 0x606A, + 18717: 0x607D, + 18718: 0x6096, + 18719: 0x609A, + 18720: 0x60AD, + 18721: 0x609D, + 18722: 0x6083, + 18723: 0x6092, + 18724: 0x608C, + 18725: 0x609B, + 18726: 0x60EC, + 18727: 0x60BB, + 18728: 0x60B1, + 18729: 0x60DD, + 18730: 0x60D8, + 18731: 0x60C6, + 18732: 0x60DA, + 18733: 0x60B4, + 18734: 0x6120, + 18735: 0x6126, + 18736: 0x6115, + 18737: 0x6123, + 18738: 0x60F4, + 18739: 0x6100, + 18740: 0x610E, + 18741: 0x612B, + 18742: 0x614A, + 18743: 0x6175, + 18744: 0x61AC, + 18745: 0x6194, + 18746: 0x61A7, + 18747: 0x61B7, + 18748: 0x61D4, + 18749: 0x61F5, + 18750: 0x5FDD, + 18751: 0x96B3, + 18752: 0x95E9, + 18753: 0x95EB, + 18754: 0x95F1, + 18755: 0x95F3, + 18756: 0x95F5, + 18757: 0x95F6, + 18758: 0x95FC, + 18759: 0x95FE, + 18760: 0x9603, + 18761: 0x9604, + 18762: 0x9606, + 18763: 0x9608, + 18764: 0x960A, + 18765: 0x960B, + 18766: 0x960C, + 18767: 0x960D, + 18768: 0x960F, + 18769: 0x9612, + 18770: 0x9615, + 18771: 0x9616, + 18772: 0x9617, + 18773: 0x9619, + 18774: 0x961A, + 18775: 0x4E2C, + 18776: 0x723F, + 18777: 0x6215, + 18778: 0x6C35, + 18779: 0x6C54, + 18780: 0x6C5C, + 18781: 0x6C4A, + 18782: 0x6CA3, + 18783: 0x6C85, + 18784: 0x6C90, + 18785: 0x6C94, + 18786: 0x6C8C, + 18787: 0x6C68, + 18788: 0x6C69, + 18789: 0x6C74, + 18790: 0x6C76, + 18791: 0x6C86, + 18792: 0x6CA9, + 18793: 0x6CD0, + 18794: 0x6CD4, + 18795: 0x6CAD, + 18796: 0x6CF7, + 18797: 0x6CF8, + 18798: 0x6CF1, + 18799: 0x6CD7, + 18800: 0x6CB2, + 18801: 0x6CE0, + 18802: 0x6CD6, + 18803: 0x6CFA, + 18804: 0x6CEB, + 18805: 0x6CEE, + 18806: 0x6CB1, + 18807: 0x6CD3, + 18808: 0x6CEF, + 18809: 0x6CFE, + 18810: 0x92A8, + 18811: 0x92A9, + 18812: 0x92AA, + 18813: 0x92AB, + 18814: 0x92AC, + 18815: 0x92AD, + 18816: 0x92AF, + 18817: 0x92B0, + 18818: 0x92B1, + 18819: 0x92B2, + 18820: 0x92B3, + 18821: 0x92B4, + 18822: 0x92B5, + 18823: 0x92B6, + 18824: 0x92B7, + 18825: 0x92B8, + 18826: 0x92B9, + 18827: 0x92BA, + 18828: 0x92BB, + 18829: 0x92BC, + 18830: 0x92BD, + 18831: 0x92BE, + 18832: 0x92BF, + 18833: 0x92C0, + 18834: 0x92C1, + 18835: 0x92C2, + 18836: 0x92C3, + 18837: 0x92C4, + 18838: 0x92C5, + 18839: 0x92C6, + 18840: 0x92C7, + 18841: 0x92C9, + 18842: 0x92CA, + 18843: 0x92CB, + 18844: 0x92CC, + 18845: 0x92CD, + 18846: 0x92CE, + 18847: 0x92CF, + 18848: 0x92D0, + 18849: 0x92D1, + 18850: 0x92D2, + 18851: 0x92D3, + 18852: 0x92D4, + 18853: 0x92D5, + 18854: 0x92D6, + 18855: 0x92D7, + 18856: 0x92D8, + 18857: 0x92D9, + 18858: 0x92DA, + 18859: 0x92DB, + 18860: 0x92DC, + 18861: 0x92DD, + 18862: 0x92DE, + 18863: 0x92DF, + 18864: 0x92E0, + 18865: 0x92E1, + 18866: 0x92E2, + 18867: 0x92E3, + 18868: 0x92E4, + 18869: 0x92E5, + 18870: 0x92E6, + 18871: 0x92E7, + 18872: 0x92E8, + 18873: 0x92E9, + 18874: 0x92EA, + 18875: 0x92EB, + 18876: 0x92EC, + 18877: 0x92ED, + 18878: 0x92EE, + 18879: 0x92EF, + 18880: 0x92F0, + 18881: 0x92F1, + 18882: 0x92F2, + 18883: 0x92F3, + 18884: 0x92F4, + 18885: 0x92F5, + 18886: 0x92F6, + 18887: 0x92F7, + 18888: 0x92F8, + 18889: 0x92F9, + 18890: 0x92FA, + 18891: 0x92FB, + 18892: 0x92FC, + 18893: 0x92FD, + 18894: 0x92FE, + 18895: 0x92FF, + 18896: 0x9300, + 18897: 0x9301, + 18898: 0x9302, + 18899: 0x9303, + 18900: 0x9304, + 18901: 0x9305, + 18902: 0x9306, + 18903: 0x9307, + 18904: 0x9308, + 18905: 0x9309, + 18906: 0x6D39, + 18907: 0x6D27, + 18908: 0x6D0C, + 18909: 0x6D43, + 18910: 0x6D48, + 18911: 0x6D07, + 18912: 0x6D04, + 18913: 0x6D19, + 18914: 0x6D0E, + 18915: 0x6D2B, + 18916: 0x6D4D, + 18917: 0x6D2E, + 18918: 0x6D35, + 18919: 0x6D1A, + 18920: 0x6D4F, + 18921: 0x6D52, + 18922: 0x6D54, + 18923: 0x6D33, + 18924: 0x6D91, + 18925: 0x6D6F, + 18926: 0x6D9E, + 18927: 0x6DA0, + 18928: 0x6D5E, + 18929: 0x6D93, + 18930: 0x6D94, + 18931: 0x6D5C, + 18932: 0x6D60, + 18933: 0x6D7C, + 18934: 0x6D63, + 18935: 0x6E1A, + 18936: 0x6DC7, + 18937: 0x6DC5, + 18938: 0x6DDE, + 18939: 0x6E0E, + 18940: 0x6DBF, + 18941: 0x6DE0, + 18942: 0x6E11, + 18943: 0x6DE6, + 18944: 0x6DDD, + 18945: 0x6DD9, + 18946: 0x6E16, + 18947: 0x6DAB, + 18948: 0x6E0C, + 18949: 0x6DAE, + 18950: 0x6E2B, + 18951: 0x6E6E, + 18952: 0x6E4E, + 18953: 0x6E6B, + 18954: 0x6EB2, + 18955: 0x6E5F, + 18956: 0x6E86, + 18957: 0x6E53, + 18958: 0x6E54, + 18959: 0x6E32, + 18960: 0x6E25, + 18961: 0x6E44, + 18962: 0x6EDF, + 18963: 0x6EB1, + 18964: 0x6E98, + 18965: 0x6EE0, + 18966: 0x6F2D, + 18967: 0x6EE2, + 18968: 0x6EA5, + 18969: 0x6EA7, + 18970: 0x6EBD, + 18971: 0x6EBB, + 18972: 0x6EB7, + 18973: 0x6ED7, + 18974: 0x6EB4, + 18975: 0x6ECF, + 18976: 0x6E8F, + 18977: 0x6EC2, + 18978: 0x6E9F, + 18979: 0x6F62, + 18980: 0x6F46, + 18981: 0x6F47, + 18982: 0x6F24, + 18983: 0x6F15, + 18984: 0x6EF9, + 18985: 0x6F2F, + 18986: 0x6F36, + 18987: 0x6F4B, + 18988: 0x6F74, + 18989: 0x6F2A, + 18990: 0x6F09, + 18991: 0x6F29, + 18992: 0x6F89, + 18993: 0x6F8D, + 18994: 0x6F8C, + 18995: 0x6F78, + 18996: 0x6F72, + 18997: 0x6F7C, + 18998: 0x6F7A, + 18999: 0x6FD1, + 19000: 0x930A, + 19001: 0x930B, + 19002: 0x930C, + 19003: 0x930D, + 19004: 0x930E, + 19005: 0x930F, + 19006: 0x9310, + 19007: 0x9311, + 19008: 0x9312, + 19009: 0x9313, + 19010: 0x9314, + 19011: 0x9315, + 19012: 0x9316, + 19013: 0x9317, + 19014: 0x9318, + 19015: 0x9319, + 19016: 0x931A, + 19017: 0x931B, + 19018: 0x931C, + 19019: 0x931D, + 19020: 0x931E, + 19021: 0x931F, + 19022: 0x9320, + 19023: 0x9321, + 19024: 0x9322, + 19025: 0x9323, + 19026: 0x9324, + 19027: 0x9325, + 19028: 0x9326, + 19029: 0x9327, + 19030: 0x9328, + 19031: 0x9329, + 19032: 0x932A, + 19033: 0x932B, + 19034: 0x932C, + 19035: 0x932D, + 19036: 0x932E, + 19037: 0x932F, + 19038: 0x9330, + 19039: 0x9331, + 19040: 0x9332, + 19041: 0x9333, + 19042: 0x9334, + 19043: 0x9335, + 19044: 0x9336, + 19045: 0x9337, + 19046: 0x9338, + 19047: 0x9339, + 19048: 0x933A, + 19049: 0x933B, + 19050: 0x933C, + 19051: 0x933D, + 19052: 0x933F, + 19053: 0x9340, + 19054: 0x9341, + 19055: 0x9342, + 19056: 0x9343, + 19057: 0x9344, + 19058: 0x9345, + 19059: 0x9346, + 19060: 0x9347, + 19061: 0x9348, + 19062: 0x9349, + 19063: 0x934A, + 19064: 0x934B, + 19065: 0x934C, + 19066: 0x934D, + 19067: 0x934E, + 19068: 0x934F, + 19069: 0x9350, + 19070: 0x9351, + 19071: 0x9352, + 19072: 0x9353, + 19073: 0x9354, + 19074: 0x9355, + 19075: 0x9356, + 19076: 0x9357, + 19077: 0x9358, + 19078: 0x9359, + 19079: 0x935A, + 19080: 0x935B, + 19081: 0x935C, + 19082: 0x935D, + 19083: 0x935E, + 19084: 0x935F, + 19085: 0x9360, + 19086: 0x9361, + 19087: 0x9362, + 19088: 0x9363, + 19089: 0x9364, + 19090: 0x9365, + 19091: 0x9366, + 19092: 0x9367, + 19093: 0x9368, + 19094: 0x9369, + 19095: 0x936B, + 19096: 0x6FC9, + 19097: 0x6FA7, + 19098: 0x6FB9, + 19099: 0x6FB6, + 19100: 0x6FC2, + 19101: 0x6FE1, + 19102: 0x6FEE, + 19103: 0x6FDE, + 19104: 0x6FE0, + 19105: 0x6FEF, + 19106: 0x701A, + 19107: 0x7023, + 19108: 0x701B, + 19109: 0x7039, + 19110: 0x7035, + 19111: 0x704F, + 19112: 0x705E, + 19113: 0x5B80, + 19114: 0x5B84, + 19115: 0x5B95, + 19116: 0x5B93, + 19117: 0x5BA5, + 19118: 0x5BB8, + 19119: 0x752F, + 19120: 0x9A9E, + 19121: 0x6434, + 19122: 0x5BE4, + 19123: 0x5BEE, + 19124: 0x8930, + 19125: 0x5BF0, + 19126: 0x8E47, + 19127: 0x8B07, + 19128: 0x8FB6, + 19129: 0x8FD3, + 19130: 0x8FD5, + 19131: 0x8FE5, + 19132: 0x8FEE, + 19133: 0x8FE4, + 19134: 0x8FE9, + 19135: 0x8FE6, + 19136: 0x8FF3, + 19137: 0x8FE8, + 19138: 0x9005, + 19139: 0x9004, + 19140: 0x900B, + 19141: 0x9026, + 19142: 0x9011, + 19143: 0x900D, + 19144: 0x9016, + 19145: 0x9021, + 19146: 0x9035, + 19147: 0x9036, + 19148: 0x902D, + 19149: 0x902F, + 19150: 0x9044, + 19151: 0x9051, + 19152: 0x9052, + 19153: 0x9050, + 19154: 0x9068, + 19155: 0x9058, + 19156: 0x9062, + 19157: 0x905B, + 19158: 0x66B9, + 19159: 0x9074, + 19160: 0x907D, + 19161: 0x9082, + 19162: 0x9088, + 19163: 0x9083, + 19164: 0x908B, + 19165: 0x5F50, + 19166: 0x5F57, + 19167: 0x5F56, + 19168: 0x5F58, + 19169: 0x5C3B, + 19170: 0x54AB, + 19171: 0x5C50, + 19172: 0x5C59, + 19173: 0x5B71, + 19174: 0x5C63, + 19175: 0x5C66, + 19176: 0x7FBC, + 19177: 0x5F2A, + 19178: 0x5F29, + 19179: 0x5F2D, + 19180: 0x8274, + 19181: 0x5F3C, + 19182: 0x9B3B, + 19183: 0x5C6E, + 19184: 0x5981, + 19185: 0x5983, + 19186: 0x598D, + 19187: 0x59A9, + 19188: 0x59AA, + 19189: 0x59A3, + 19190: 0x936C, + 19191: 0x936D, + 19192: 0x936E, + 19193: 0x936F, + 19194: 0x9370, + 19195: 0x9371, + 19196: 0x9372, + 19197: 0x9373, + 19198: 0x9374, + 19199: 0x9375, + 19200: 0x9376, + 19201: 0x9377, + 19202: 0x9378, + 19203: 0x9379, + 19204: 0x937A, + 19205: 0x937B, + 19206: 0x937C, + 19207: 0x937D, + 19208: 0x937E, + 19209: 0x937F, + 19210: 0x9380, + 19211: 0x9381, + 19212: 0x9382, + 19213: 0x9383, + 19214: 0x9384, + 19215: 0x9385, + 19216: 0x9386, + 19217: 0x9387, + 19218: 0x9388, + 19219: 0x9389, + 19220: 0x938A, + 19221: 0x938B, + 19222: 0x938C, + 19223: 0x938D, + 19224: 0x938E, + 19225: 0x9390, + 19226: 0x9391, + 19227: 0x9392, + 19228: 0x9393, + 19229: 0x9394, + 19230: 0x9395, + 19231: 0x9396, + 19232: 0x9397, + 19233: 0x9398, + 19234: 0x9399, + 19235: 0x939A, + 19236: 0x939B, + 19237: 0x939C, + 19238: 0x939D, + 19239: 0x939E, + 19240: 0x939F, + 19241: 0x93A0, + 19242: 0x93A1, + 19243: 0x93A2, + 19244: 0x93A3, + 19245: 0x93A4, + 19246: 0x93A5, + 19247: 0x93A6, + 19248: 0x93A7, + 19249: 0x93A8, + 19250: 0x93A9, + 19251: 0x93AA, + 19252: 0x93AB, + 19253: 0x93AC, + 19254: 0x93AD, + 19255: 0x93AE, + 19256: 0x93AF, + 19257: 0x93B0, + 19258: 0x93B1, + 19259: 0x93B2, + 19260: 0x93B3, + 19261: 0x93B4, + 19262: 0x93B5, + 19263: 0x93B6, + 19264: 0x93B7, + 19265: 0x93B8, + 19266: 0x93B9, + 19267: 0x93BA, + 19268: 0x93BB, + 19269: 0x93BC, + 19270: 0x93BD, + 19271: 0x93BE, + 19272: 0x93BF, + 19273: 0x93C0, + 19274: 0x93C1, + 19275: 0x93C2, + 19276: 0x93C3, + 19277: 0x93C4, + 19278: 0x93C5, + 19279: 0x93C6, + 19280: 0x93C7, + 19281: 0x93C8, + 19282: 0x93C9, + 19283: 0x93CB, + 19284: 0x93CC, + 19285: 0x93CD, + 19286: 0x5997, + 19287: 0x59CA, + 19288: 0x59AB, + 19289: 0x599E, + 19290: 0x59A4, + 19291: 0x59D2, + 19292: 0x59B2, + 19293: 0x59AF, + 19294: 0x59D7, + 19295: 0x59BE, + 19296: 0x5A05, + 19297: 0x5A06, + 19298: 0x59DD, + 19299: 0x5A08, + 19300: 0x59E3, + 19301: 0x59D8, + 19302: 0x59F9, + 19303: 0x5A0C, + 19304: 0x5A09, + 19305: 0x5A32, + 19306: 0x5A34, + 19307: 0x5A11, + 19308: 0x5A23, + 19309: 0x5A13, + 19310: 0x5A40, + 19311: 0x5A67, + 19312: 0x5A4A, + 19313: 0x5A55, + 19314: 0x5A3C, + 19315: 0x5A62, + 19316: 0x5A75, + 19317: 0x80EC, + 19318: 0x5AAA, + 19319: 0x5A9B, + 19320: 0x5A77, + 19321: 0x5A7A, + 19322: 0x5ABE, + 19323: 0x5AEB, + 19324: 0x5AB2, + 19325: 0x5AD2, + 19326: 0x5AD4, + 19327: 0x5AB8, + 19328: 0x5AE0, + 19329: 0x5AE3, + 19330: 0x5AF1, + 19331: 0x5AD6, + 19332: 0x5AE6, + 19333: 0x5AD8, + 19334: 0x5ADC, + 19335: 0x5B09, + 19336: 0x5B17, + 19337: 0x5B16, + 19338: 0x5B32, + 19339: 0x5B37, + 19340: 0x5B40, + 19341: 0x5C15, + 19342: 0x5C1C, + 19343: 0x5B5A, + 19344: 0x5B65, + 19345: 0x5B73, + 19346: 0x5B51, + 19347: 0x5B53, + 19348: 0x5B62, + 19349: 0x9A75, + 19350: 0x9A77, + 19351: 0x9A78, + 19352: 0x9A7A, + 19353: 0x9A7F, + 19354: 0x9A7D, + 19355: 0x9A80, + 19356: 0x9A81, + 19357: 0x9A85, + 19358: 0x9A88, + 19359: 0x9A8A, + 19360: 0x9A90, + 19361: 0x9A92, + 19362: 0x9A93, + 19363: 0x9A96, + 19364: 0x9A98, + 19365: 0x9A9B, + 19366: 0x9A9C, + 19367: 0x9A9D, + 19368: 0x9A9F, + 19369: 0x9AA0, + 19370: 0x9AA2, + 19371: 0x9AA3, + 19372: 0x9AA5, + 19373: 0x9AA7, + 19374: 0x7E9F, + 19375: 0x7EA1, + 19376: 0x7EA3, + 19377: 0x7EA5, + 19378: 0x7EA8, + 19379: 0x7EA9, + 19380: 0x93CE, + 19381: 0x93CF, + 19382: 0x93D0, + 19383: 0x93D1, + 19384: 0x93D2, + 19385: 0x93D3, + 19386: 0x93D4, + 19387: 0x93D5, + 19388: 0x93D7, + 19389: 0x93D8, + 19390: 0x93D9, + 19391: 0x93DA, + 19392: 0x93DB, + 19393: 0x93DC, + 19394: 0x93DD, + 19395: 0x93DE, + 19396: 0x93DF, + 19397: 0x93E0, + 19398: 0x93E1, + 19399: 0x93E2, + 19400: 0x93E3, + 19401: 0x93E4, + 19402: 0x93E5, + 19403: 0x93E6, + 19404: 0x93E7, + 19405: 0x93E8, + 19406: 0x93E9, + 19407: 0x93EA, + 19408: 0x93EB, + 19409: 0x93EC, + 19410: 0x93ED, + 19411: 0x93EE, + 19412: 0x93EF, + 19413: 0x93F0, + 19414: 0x93F1, + 19415: 0x93F2, + 19416: 0x93F3, + 19417: 0x93F4, + 19418: 0x93F5, + 19419: 0x93F6, + 19420: 0x93F7, + 19421: 0x93F8, + 19422: 0x93F9, + 19423: 0x93FA, + 19424: 0x93FB, + 19425: 0x93FC, + 19426: 0x93FD, + 19427: 0x93FE, + 19428: 0x93FF, + 19429: 0x9400, + 19430: 0x9401, + 19431: 0x9402, + 19432: 0x9403, + 19433: 0x9404, + 19434: 0x9405, + 19435: 0x9406, + 19436: 0x9407, + 19437: 0x9408, + 19438: 0x9409, + 19439: 0x940A, + 19440: 0x940B, + 19441: 0x940C, + 19442: 0x940D, + 19443: 0x940E, + 19444: 0x940F, + 19445: 0x9410, + 19446: 0x9411, + 19447: 0x9412, + 19448: 0x9413, + 19449: 0x9414, + 19450: 0x9415, + 19451: 0x9416, + 19452: 0x9417, + 19453: 0x9418, + 19454: 0x9419, + 19455: 0x941A, + 19456: 0x941B, + 19457: 0x941C, + 19458: 0x941D, + 19459: 0x941E, + 19460: 0x941F, + 19461: 0x9420, + 19462: 0x9421, + 19463: 0x9422, + 19464: 0x9423, + 19465: 0x9424, + 19466: 0x9425, + 19467: 0x9426, + 19468: 0x9427, + 19469: 0x9428, + 19470: 0x9429, + 19471: 0x942A, + 19472: 0x942B, + 19473: 0x942C, + 19474: 0x942D, + 19475: 0x942E, + 19476: 0x7EAD, + 19477: 0x7EB0, + 19478: 0x7EBE, + 19479: 0x7EC0, + 19480: 0x7EC1, + 19481: 0x7EC2, + 19482: 0x7EC9, + 19483: 0x7ECB, + 19484: 0x7ECC, + 19485: 0x7ED0, + 19486: 0x7ED4, + 19487: 0x7ED7, + 19488: 0x7EDB, + 19489: 0x7EE0, + 19490: 0x7EE1, + 19491: 0x7EE8, + 19492: 0x7EEB, + 19493: 0x7EEE, + 19494: 0x7EEF, + 19495: 0x7EF1, + 19496: 0x7EF2, + 19497: 0x7F0D, + 19498: 0x7EF6, + 19499: 0x7EFA, + 19500: 0x7EFB, + 19501: 0x7EFE, + 19502: 0x7F01, + 19503: 0x7F02, + 19504: 0x7F03, + 19505: 0x7F07, + 19506: 0x7F08, + 19507: 0x7F0B, + 19508: 0x7F0C, + 19509: 0x7F0F, + 19510: 0x7F11, + 19511: 0x7F12, + 19512: 0x7F17, + 19513: 0x7F19, + 19514: 0x7F1C, + 19515: 0x7F1B, + 19516: 0x7F1F, + 19517: 0x7F21, + 19518: 0x7F22, + 19519: 0x7F23, + 19520: 0x7F24, + 19521: 0x7F25, + 19522: 0x7F26, + 19523: 0x7F27, + 19524: 0x7F2A, + 19525: 0x7F2B, + 19526: 0x7F2C, + 19527: 0x7F2D, + 19528: 0x7F2F, + 19529: 0x7F30, + 19530: 0x7F31, + 19531: 0x7F32, + 19532: 0x7F33, + 19533: 0x7F35, + 19534: 0x5E7A, + 19535: 0x757F, + 19536: 0x5DDB, + 19537: 0x753E, + 19538: 0x9095, + 19539: 0x738E, + 19540: 0x7391, + 19541: 0x73AE, + 19542: 0x73A2, + 19543: 0x739F, + 19544: 0x73CF, + 19545: 0x73C2, + 19546: 0x73D1, + 19547: 0x73B7, + 19548: 0x73B3, + 19549: 0x73C0, + 19550: 0x73C9, + 19551: 0x73C8, + 19552: 0x73E5, + 19553: 0x73D9, + 19554: 0x987C, + 19555: 0x740A, + 19556: 0x73E9, + 19557: 0x73E7, + 19558: 0x73DE, + 19559: 0x73BA, + 19560: 0x73F2, + 19561: 0x740F, + 19562: 0x742A, + 19563: 0x745B, + 19564: 0x7426, + 19565: 0x7425, + 19566: 0x7428, + 19567: 0x7430, + 19568: 0x742E, + 19569: 0x742C, + 19570: 0x942F, + 19571: 0x9430, + 19572: 0x9431, + 19573: 0x9432, + 19574: 0x9433, + 19575: 0x9434, + 19576: 0x9435, + 19577: 0x9436, + 19578: 0x9437, + 19579: 0x9438, + 19580: 0x9439, + 19581: 0x943A, + 19582: 0x943B, + 19583: 0x943C, + 19584: 0x943D, + 19585: 0x943F, + 19586: 0x9440, + 19587: 0x9441, + 19588: 0x9442, + 19589: 0x9443, + 19590: 0x9444, + 19591: 0x9445, + 19592: 0x9446, + 19593: 0x9447, + 19594: 0x9448, + 19595: 0x9449, + 19596: 0x944A, + 19597: 0x944B, + 19598: 0x944C, + 19599: 0x944D, + 19600: 0x944E, + 19601: 0x944F, + 19602: 0x9450, + 19603: 0x9451, + 19604: 0x9452, + 19605: 0x9453, + 19606: 0x9454, + 19607: 0x9455, + 19608: 0x9456, + 19609: 0x9457, + 19610: 0x9458, + 19611: 0x9459, + 19612: 0x945A, + 19613: 0x945B, + 19614: 0x945C, + 19615: 0x945D, + 19616: 0x945E, + 19617: 0x945F, + 19618: 0x9460, + 19619: 0x9461, + 19620: 0x9462, + 19621: 0x9463, + 19622: 0x9464, + 19623: 0x9465, + 19624: 0x9466, + 19625: 0x9467, + 19626: 0x9468, + 19627: 0x9469, + 19628: 0x946A, + 19629: 0x946C, + 19630: 0x946D, + 19631: 0x946E, + 19632: 0x946F, + 19633: 0x9470, + 19634: 0x9471, + 19635: 0x9472, + 19636: 0x9473, + 19637: 0x9474, + 19638: 0x9475, + 19639: 0x9476, + 19640: 0x9477, + 19641: 0x9478, + 19642: 0x9479, + 19643: 0x947A, + 19644: 0x947B, + 19645: 0x947C, + 19646: 0x947D, + 19647: 0x947E, + 19648: 0x947F, + 19649: 0x9480, + 19650: 0x9481, + 19651: 0x9482, + 19652: 0x9483, + 19653: 0x9484, + 19654: 0x9491, + 19655: 0x9496, + 19656: 0x9498, + 19657: 0x94C7, + 19658: 0x94CF, + 19659: 0x94D3, + 19660: 0x94D4, + 19661: 0x94DA, + 19662: 0x94E6, + 19663: 0x94FB, + 19664: 0x951C, + 19665: 0x9520, + 19666: 0x741B, + 19667: 0x741A, + 19668: 0x7441, + 19669: 0x745C, + 19670: 0x7457, + 19671: 0x7455, + 19672: 0x7459, + 19673: 0x7477, + 19674: 0x746D, + 19675: 0x747E, + 19676: 0x749C, + 19677: 0x748E, + 19678: 0x7480, + 19679: 0x7481, + 19680: 0x7487, + 19681: 0x748B, + 19682: 0x749E, + 19683: 0x74A8, + 19684: 0x74A9, + 19685: 0x7490, + 19686: 0x74A7, + 19687: 0x74D2, + 19688: 0x74BA, + 19689: 0x97EA, + 19690: 0x97EB, + 19691: 0x97EC, + 19692: 0x674C, + 19693: 0x6753, + 19694: 0x675E, + 19695: 0x6748, + 19696: 0x6769, + 19697: 0x67A5, + 19698: 0x6787, + 19699: 0x676A, + 19700: 0x6773, + 19701: 0x6798, + 19702: 0x67A7, + 19703: 0x6775, + 19704: 0x67A8, + 19705: 0x679E, + 19706: 0x67AD, + 19707: 0x678B, + 19708: 0x6777, + 19709: 0x677C, + 19710: 0x67F0, + 19711: 0x6809, + 19712: 0x67D8, + 19713: 0x680A, + 19714: 0x67E9, + 19715: 0x67B0, + 19716: 0x680C, + 19717: 0x67D9, + 19718: 0x67B5, + 19719: 0x67DA, + 19720: 0x67B3, + 19721: 0x67DD, + 19722: 0x6800, + 19723: 0x67C3, + 19724: 0x67B8, + 19725: 0x67E2, + 19726: 0x680E, + 19727: 0x67C1, + 19728: 0x67FD, + 19729: 0x6832, + 19730: 0x6833, + 19731: 0x6860, + 19732: 0x6861, + 19733: 0x684E, + 19734: 0x6862, + 19735: 0x6844, + 19736: 0x6864, + 19737: 0x6883, + 19738: 0x681D, + 19739: 0x6855, + 19740: 0x6866, + 19741: 0x6841, + 19742: 0x6867, + 19743: 0x6840, + 19744: 0x683E, + 19745: 0x684A, + 19746: 0x6849, + 19747: 0x6829, + 19748: 0x68B5, + 19749: 0x688F, + 19750: 0x6874, + 19751: 0x6877, + 19752: 0x6893, + 19753: 0x686B, + 19754: 0x68C2, + 19755: 0x696E, + 19756: 0x68FC, + 19757: 0x691F, + 19758: 0x6920, + 19759: 0x68F9, + 19760: 0x9527, + 19761: 0x9533, + 19762: 0x953D, + 19763: 0x9543, + 19764: 0x9548, + 19765: 0x954B, + 19766: 0x9555, + 19767: 0x955A, + 19768: 0x9560, + 19769: 0x956E, + 19770: 0x9574, + 19771: 0x9575, + 19772: 0x9577, + 19773: 0x9578, + 19774: 0x9579, + 19775: 0x957A, + 19776: 0x957B, + 19777: 0x957C, + 19778: 0x957D, + 19779: 0x957E, + 19780: 0x9580, + 19781: 0x9581, + 19782: 0x9582, + 19783: 0x9583, + 19784: 0x9584, + 19785: 0x9585, + 19786: 0x9586, + 19787: 0x9587, + 19788: 0x9588, + 19789: 0x9589, + 19790: 0x958A, + 19791: 0x958B, + 19792: 0x958C, + 19793: 0x958D, + 19794: 0x958E, + 19795: 0x958F, + 19796: 0x9590, + 19797: 0x9591, + 19798: 0x9592, + 19799: 0x9593, + 19800: 0x9594, + 19801: 0x9595, + 19802: 0x9596, + 19803: 0x9597, + 19804: 0x9598, + 19805: 0x9599, + 19806: 0x959A, + 19807: 0x959B, + 19808: 0x959C, + 19809: 0x959D, + 19810: 0x959E, + 19811: 0x959F, + 19812: 0x95A0, + 19813: 0x95A1, + 19814: 0x95A2, + 19815: 0x95A3, + 19816: 0x95A4, + 19817: 0x95A5, + 19818: 0x95A6, + 19819: 0x95A7, + 19820: 0x95A8, + 19821: 0x95A9, + 19822: 0x95AA, + 19823: 0x95AB, + 19824: 0x95AC, + 19825: 0x95AD, + 19826: 0x95AE, + 19827: 0x95AF, + 19828: 0x95B0, + 19829: 0x95B1, + 19830: 0x95B2, + 19831: 0x95B3, + 19832: 0x95B4, + 19833: 0x95B5, + 19834: 0x95B6, + 19835: 0x95B7, + 19836: 0x95B8, + 19837: 0x95B9, + 19838: 0x95BA, + 19839: 0x95BB, + 19840: 0x95BC, + 19841: 0x95BD, + 19842: 0x95BE, + 19843: 0x95BF, + 19844: 0x95C0, + 19845: 0x95C1, + 19846: 0x95C2, + 19847: 0x95C3, + 19848: 0x95C4, + 19849: 0x95C5, + 19850: 0x95C6, + 19851: 0x95C7, + 19852: 0x95C8, + 19853: 0x95C9, + 19854: 0x95CA, + 19855: 0x95CB, + 19856: 0x6924, + 19857: 0x68F0, + 19858: 0x690B, + 19859: 0x6901, + 19860: 0x6957, + 19861: 0x68E3, + 19862: 0x6910, + 19863: 0x6971, + 19864: 0x6939, + 19865: 0x6960, + 19866: 0x6942, + 19867: 0x695D, + 19868: 0x6984, + 19869: 0x696B, + 19870: 0x6980, + 19871: 0x6998, + 19872: 0x6978, + 19873: 0x6934, + 19874: 0x69CC, + 19875: 0x6987, + 19876: 0x6988, + 19877: 0x69CE, + 19878: 0x6989, + 19879: 0x6966, + 19880: 0x6963, + 19881: 0x6979, + 19882: 0x699B, + 19883: 0x69A7, + 19884: 0x69BB, + 19885: 0x69AB, + 19886: 0x69AD, + 19887: 0x69D4, + 19888: 0x69B1, + 19889: 0x69C1, + 19890: 0x69CA, + 19891: 0x69DF, + 19892: 0x6995, + 19893: 0x69E0, + 19894: 0x698D, + 19895: 0x69FF, + 19896: 0x6A2F, + 19897: 0x69ED, + 19898: 0x6A17, + 19899: 0x6A18, + 19900: 0x6A65, + 19901: 0x69F2, + 19902: 0x6A44, + 19903: 0x6A3E, + 19904: 0x6AA0, + 19905: 0x6A50, + 19906: 0x6A5B, + 19907: 0x6A35, + 19908: 0x6A8E, + 19909: 0x6A79, + 19910: 0x6A3D, + 19911: 0x6A28, + 19912: 0x6A58, + 19913: 0x6A7C, + 19914: 0x6A91, + 19915: 0x6A90, + 19916: 0x6AA9, + 19917: 0x6A97, + 19918: 0x6AAB, + 19919: 0x7337, + 19920: 0x7352, + 19921: 0x6B81, + 19922: 0x6B82, + 19923: 0x6B87, + 19924: 0x6B84, + 19925: 0x6B92, + 19926: 0x6B93, + 19927: 0x6B8D, + 19928: 0x6B9A, + 19929: 0x6B9B, + 19930: 0x6BA1, + 19931: 0x6BAA, + 19932: 0x8F6B, + 19933: 0x8F6D, + 19934: 0x8F71, + 19935: 0x8F72, + 19936: 0x8F73, + 19937: 0x8F75, + 19938: 0x8F76, + 19939: 0x8F78, + 19940: 0x8F77, + 19941: 0x8F79, + 19942: 0x8F7A, + 19943: 0x8F7C, + 19944: 0x8F7E, + 19945: 0x8F81, + 19946: 0x8F82, + 19947: 0x8F84, + 19948: 0x8F87, + 19949: 0x8F8B, + 19950: 0x95CC, + 19951: 0x95CD, + 19952: 0x95CE, + 19953: 0x95CF, + 19954: 0x95D0, + 19955: 0x95D1, + 19956: 0x95D2, + 19957: 0x95D3, + 19958: 0x95D4, + 19959: 0x95D5, + 19960: 0x95D6, + 19961: 0x95D7, + 19962: 0x95D8, + 19963: 0x95D9, + 19964: 0x95DA, + 19965: 0x95DB, + 19966: 0x95DC, + 19967: 0x95DD, + 19968: 0x95DE, + 19969: 0x95DF, + 19970: 0x95E0, + 19971: 0x95E1, + 19972: 0x95E2, + 19973: 0x95E3, + 19974: 0x95E4, + 19975: 0x95E5, + 19976: 0x95E6, + 19977: 0x95E7, + 19978: 0x95EC, + 19979: 0x95FF, + 19980: 0x9607, + 19981: 0x9613, + 19982: 0x9618, + 19983: 0x961B, + 19984: 0x961E, + 19985: 0x9620, + 19986: 0x9623, + 19987: 0x9624, + 19988: 0x9625, + 19989: 0x9626, + 19990: 0x9627, + 19991: 0x9628, + 19992: 0x9629, + 19993: 0x962B, + 19994: 0x962C, + 19995: 0x962D, + 19996: 0x962F, + 19997: 0x9630, + 19998: 0x9637, + 19999: 0x9638, + 20000: 0x9639, + 20001: 0x963A, + 20002: 0x963E, + 20003: 0x9641, + 20004: 0x9643, + 20005: 0x964A, + 20006: 0x964E, + 20007: 0x964F, + 20008: 0x9651, + 20009: 0x9652, + 20010: 0x9653, + 20011: 0x9656, + 20012: 0x9657, + 20013: 0x9658, + 20014: 0x9659, + 20015: 0x965A, + 20016: 0x965C, + 20017: 0x965D, + 20018: 0x965E, + 20019: 0x9660, + 20020: 0x9663, + 20021: 0x9665, + 20022: 0x9666, + 20023: 0x966B, + 20024: 0x966D, + 20025: 0x966E, + 20026: 0x966F, + 20027: 0x9670, + 20028: 0x9671, + 20029: 0x9673, + 20030: 0x9678, + 20031: 0x9679, + 20032: 0x967A, + 20033: 0x967B, + 20034: 0x967C, + 20035: 0x967D, + 20036: 0x967E, + 20037: 0x967F, + 20038: 0x9680, + 20039: 0x9681, + 20040: 0x9682, + 20041: 0x9683, + 20042: 0x9684, + 20043: 0x9687, + 20044: 0x9689, + 20045: 0x968A, + 20046: 0x8F8D, + 20047: 0x8F8E, + 20048: 0x8F8F, + 20049: 0x8F98, + 20050: 0x8F9A, + 20051: 0x8ECE, + 20052: 0x620B, + 20053: 0x6217, + 20054: 0x621B, + 20055: 0x621F, + 20056: 0x6222, + 20057: 0x6221, + 20058: 0x6225, + 20059: 0x6224, + 20060: 0x622C, + 20061: 0x81E7, + 20062: 0x74EF, + 20063: 0x74F4, + 20064: 0x74FF, + 20065: 0x750F, + 20066: 0x7511, + 20067: 0x7513, + 20068: 0x6534, + 20069: 0x65EE, + 20070: 0x65EF, + 20071: 0x65F0, + 20072: 0x660A, + 20073: 0x6619, + 20074: 0x6772, + 20075: 0x6603, + 20076: 0x6615, + 20077: 0x6600, + 20078: 0x7085, + 20079: 0x66F7, + 20080: 0x661D, + 20081: 0x6634, + 20082: 0x6631, + 20083: 0x6636, + 20084: 0x6635, + 20085: 0x8006, + 20086: 0x665F, + 20087: 0x6654, + 20088: 0x6641, + 20089: 0x664F, + 20090: 0x6656, + 20091: 0x6661, + 20092: 0x6657, + 20093: 0x6677, + 20094: 0x6684, + 20095: 0x668C, + 20096: 0x66A7, + 20097: 0x669D, + 20098: 0x66BE, + 20099: 0x66DB, + 20100: 0x66DC, + 20101: 0x66E6, + 20102: 0x66E9, + 20103: 0x8D32, + 20104: 0x8D33, + 20105: 0x8D36, + 20106: 0x8D3B, + 20107: 0x8D3D, + 20108: 0x8D40, + 20109: 0x8D45, + 20110: 0x8D46, + 20111: 0x8D48, + 20112: 0x8D49, + 20113: 0x8D47, + 20114: 0x8D4D, + 20115: 0x8D55, + 20116: 0x8D59, + 20117: 0x89C7, + 20118: 0x89CA, + 20119: 0x89CB, + 20120: 0x89CC, + 20121: 0x89CE, + 20122: 0x89CF, + 20123: 0x89D0, + 20124: 0x89D1, + 20125: 0x726E, + 20126: 0x729F, + 20127: 0x725D, + 20128: 0x7266, + 20129: 0x726F, + 20130: 0x727E, + 20131: 0x727F, + 20132: 0x7284, + 20133: 0x728B, + 20134: 0x728D, + 20135: 0x728F, + 20136: 0x7292, + 20137: 0x6308, + 20138: 0x6332, + 20139: 0x63B0, + 20140: 0x968C, + 20141: 0x968E, + 20142: 0x9691, + 20143: 0x9692, + 20144: 0x9693, + 20145: 0x9695, + 20146: 0x9696, + 20147: 0x969A, + 20148: 0x969B, + 20149: 0x969D, + 20150: 0x969E, + 20151: 0x969F, + 20152: 0x96A0, + 20153: 0x96A1, + 20154: 0x96A2, + 20155: 0x96A3, + 20156: 0x96A4, + 20157: 0x96A5, + 20158: 0x96A6, + 20159: 0x96A8, + 20160: 0x96A9, + 20161: 0x96AA, + 20162: 0x96AB, + 20163: 0x96AC, + 20164: 0x96AD, + 20165: 0x96AE, + 20166: 0x96AF, + 20167: 0x96B1, + 20168: 0x96B2, + 20169: 0x96B4, + 20170: 0x96B5, + 20171: 0x96B7, + 20172: 0x96B8, + 20173: 0x96BA, + 20174: 0x96BB, + 20175: 0x96BF, + 20176: 0x96C2, + 20177: 0x96C3, + 20178: 0x96C8, + 20179: 0x96CA, + 20180: 0x96CB, + 20181: 0x96D0, + 20182: 0x96D1, + 20183: 0x96D3, + 20184: 0x96D4, + 20185: 0x96D6, + 20186: 0x96D7, + 20187: 0x96D8, + 20188: 0x96D9, + 20189: 0x96DA, + 20190: 0x96DB, + 20191: 0x96DC, + 20192: 0x96DD, + 20193: 0x96DE, + 20194: 0x96DF, + 20195: 0x96E1, + 20196: 0x96E2, + 20197: 0x96E3, + 20198: 0x96E4, + 20199: 0x96E5, + 20200: 0x96E6, + 20201: 0x96E7, + 20202: 0x96EB, + 20203: 0x96EC, + 20204: 0x96ED, + 20205: 0x96EE, + 20206: 0x96F0, + 20207: 0x96F1, + 20208: 0x96F2, + 20209: 0x96F4, + 20210: 0x96F5, + 20211: 0x96F8, + 20212: 0x96FA, + 20213: 0x96FB, + 20214: 0x96FC, + 20215: 0x96FD, + 20216: 0x96FF, + 20217: 0x9702, + 20218: 0x9703, + 20219: 0x9705, + 20220: 0x970A, + 20221: 0x970B, + 20222: 0x970C, + 20223: 0x9710, + 20224: 0x9711, + 20225: 0x9712, + 20226: 0x9714, + 20227: 0x9715, + 20228: 0x9717, + 20229: 0x9718, + 20230: 0x9719, + 20231: 0x971A, + 20232: 0x971B, + 20233: 0x971D, + 20234: 0x971F, + 20235: 0x9720, + 20236: 0x643F, + 20237: 0x64D8, + 20238: 0x8004, + 20239: 0x6BEA, + 20240: 0x6BF3, + 20241: 0x6BFD, + 20242: 0x6BF5, + 20243: 0x6BF9, + 20244: 0x6C05, + 20245: 0x6C07, + 20246: 0x6C06, + 20247: 0x6C0D, + 20248: 0x6C15, + 20249: 0x6C18, + 20250: 0x6C19, + 20251: 0x6C1A, + 20252: 0x6C21, + 20253: 0x6C29, + 20254: 0x6C24, + 20255: 0x6C2A, + 20256: 0x6C32, + 20257: 0x6535, + 20258: 0x6555, + 20259: 0x656B, + 20260: 0x724D, + 20261: 0x7252, + 20262: 0x7256, + 20263: 0x7230, + 20264: 0x8662, + 20265: 0x5216, + 20266: 0x809F, + 20267: 0x809C, + 20268: 0x8093, + 20269: 0x80BC, + 20270: 0x670A, + 20271: 0x80BD, + 20272: 0x80B1, + 20273: 0x80AB, + 20274: 0x80AD, + 20275: 0x80B4, + 20276: 0x80B7, + 20277: 0x80E7, + 20278: 0x80E8, + 20279: 0x80E9, + 20280: 0x80EA, + 20281: 0x80DB, + 20282: 0x80C2, + 20283: 0x80C4, + 20284: 0x80D9, + 20285: 0x80CD, + 20286: 0x80D7, + 20287: 0x6710, + 20288: 0x80DD, + 20289: 0x80EB, + 20290: 0x80F1, + 20291: 0x80F4, + 20292: 0x80ED, + 20293: 0x810D, + 20294: 0x810E, + 20295: 0x80F2, + 20296: 0x80FC, + 20297: 0x6715, + 20298: 0x8112, + 20299: 0x8C5A, + 20300: 0x8136, + 20301: 0x811E, + 20302: 0x812C, + 20303: 0x8118, + 20304: 0x8132, + 20305: 0x8148, + 20306: 0x814C, + 20307: 0x8153, + 20308: 0x8174, + 20309: 0x8159, + 20310: 0x815A, + 20311: 0x8171, + 20312: 0x8160, + 20313: 0x8169, + 20314: 0x817C, + 20315: 0x817D, + 20316: 0x816D, + 20317: 0x8167, + 20318: 0x584D, + 20319: 0x5AB5, + 20320: 0x8188, + 20321: 0x8182, + 20322: 0x8191, + 20323: 0x6ED5, + 20324: 0x81A3, + 20325: 0x81AA, + 20326: 0x81CC, + 20327: 0x6726, + 20328: 0x81CA, + 20329: 0x81BB, + 20330: 0x9721, + 20331: 0x9722, + 20332: 0x9723, + 20333: 0x9724, + 20334: 0x9725, + 20335: 0x9726, + 20336: 0x9727, + 20337: 0x9728, + 20338: 0x9729, + 20339: 0x972B, + 20340: 0x972C, + 20341: 0x972E, + 20342: 0x972F, + 20343: 0x9731, + 20344: 0x9733, + 20345: 0x9734, + 20346: 0x9735, + 20347: 0x9736, + 20348: 0x9737, + 20349: 0x973A, + 20350: 0x973B, + 20351: 0x973C, + 20352: 0x973D, + 20353: 0x973F, + 20354: 0x9740, + 20355: 0x9741, + 20356: 0x9742, + 20357: 0x9743, + 20358: 0x9744, + 20359: 0x9745, + 20360: 0x9746, + 20361: 0x9747, + 20362: 0x9748, + 20363: 0x9749, + 20364: 0x974A, + 20365: 0x974B, + 20366: 0x974C, + 20367: 0x974D, + 20368: 0x974E, + 20369: 0x974F, + 20370: 0x9750, + 20371: 0x9751, + 20372: 0x9754, + 20373: 0x9755, + 20374: 0x9757, + 20375: 0x9758, + 20376: 0x975A, + 20377: 0x975C, + 20378: 0x975D, + 20379: 0x975F, + 20380: 0x9763, + 20381: 0x9764, + 20382: 0x9766, + 20383: 0x9767, + 20384: 0x9768, + 20385: 0x976A, + 20386: 0x976B, + 20387: 0x976C, + 20388: 0x976D, + 20389: 0x976E, + 20390: 0x976F, + 20391: 0x9770, + 20392: 0x9771, + 20393: 0x9772, + 20394: 0x9775, + 20395: 0x9777, + 20396: 0x9778, + 20397: 0x9779, + 20398: 0x977A, + 20399: 0x977B, + 20400: 0x977D, + 20401: 0x977E, + 20402: 0x977F, + 20403: 0x9780, + 20404: 0x9781, + 20405: 0x9782, + 20406: 0x9783, + 20407: 0x9784, + 20408: 0x9786, + 20409: 0x9787, + 20410: 0x9788, + 20411: 0x9789, + 20412: 0x978A, + 20413: 0x978C, + 20414: 0x978E, + 20415: 0x978F, + 20416: 0x9790, + 20417: 0x9793, + 20418: 0x9795, + 20419: 0x9796, + 20420: 0x9797, + 20421: 0x9799, + 20422: 0x979A, + 20423: 0x979B, + 20424: 0x979C, + 20425: 0x979D, + 20426: 0x81C1, + 20427: 0x81A6, + 20428: 0x6B24, + 20429: 0x6B37, + 20430: 0x6B39, + 20431: 0x6B43, + 20432: 0x6B46, + 20433: 0x6B59, + 20434: 0x98D1, + 20435: 0x98D2, + 20436: 0x98D3, + 20437: 0x98D5, + 20438: 0x98D9, + 20439: 0x98DA, + 20440: 0x6BB3, + 20441: 0x5F40, + 20442: 0x6BC2, + 20443: 0x89F3, + 20444: 0x6590, + 20445: 0x9F51, + 20446: 0x6593, + 20447: 0x65BC, + 20448: 0x65C6, + 20449: 0x65C4, + 20450: 0x65C3, + 20451: 0x65CC, + 20452: 0x65CE, + 20453: 0x65D2, + 20454: 0x65D6, + 20455: 0x7080, + 20456: 0x709C, + 20457: 0x7096, + 20458: 0x709D, + 20459: 0x70BB, + 20460: 0x70C0, + 20461: 0x70B7, + 20462: 0x70AB, + 20463: 0x70B1, + 20464: 0x70E8, + 20465: 0x70CA, + 20466: 0x7110, + 20467: 0x7113, + 20468: 0x7116, + 20469: 0x712F, + 20470: 0x7131, + 20471: 0x7173, + 20472: 0x715C, + 20473: 0x7168, + 20474: 0x7145, + 20475: 0x7172, + 20476: 0x714A, + 20477: 0x7178, + 20478: 0x717A, + 20479: 0x7198, + 20480: 0x71B3, + 20481: 0x71B5, + 20482: 0x71A8, + 20483: 0x71A0, + 20484: 0x71E0, + 20485: 0x71D4, + 20486: 0x71E7, + 20487: 0x71F9, + 20488: 0x721D, + 20489: 0x7228, + 20490: 0x706C, + 20491: 0x7118, + 20492: 0x7166, + 20493: 0x71B9, + 20494: 0x623E, + 20495: 0x623D, + 20496: 0x6243, + 20497: 0x6248, + 20498: 0x6249, + 20499: 0x793B, + 20500: 0x7940, + 20501: 0x7946, + 20502: 0x7949, + 20503: 0x795B, + 20504: 0x795C, + 20505: 0x7953, + 20506: 0x795A, + 20507: 0x7962, + 20508: 0x7957, + 20509: 0x7960, + 20510: 0x796F, + 20511: 0x7967, + 20512: 0x797A, + 20513: 0x7985, + 20514: 0x798A, + 20515: 0x799A, + 20516: 0x79A7, + 20517: 0x79B3, + 20518: 0x5FD1, + 20519: 0x5FD0, + 20520: 0x979E, + 20521: 0x979F, + 20522: 0x97A1, + 20523: 0x97A2, + 20524: 0x97A4, + 20525: 0x97A5, + 20526: 0x97A6, + 20527: 0x97A7, + 20528: 0x97A8, + 20529: 0x97A9, + 20530: 0x97AA, + 20531: 0x97AC, + 20532: 0x97AE, + 20533: 0x97B0, + 20534: 0x97B1, + 20535: 0x97B3, + 20536: 0x97B5, + 20537: 0x97B6, + 20538: 0x97B7, + 20539: 0x97B8, + 20540: 0x97B9, + 20541: 0x97BA, + 20542: 0x97BB, + 20543: 0x97BC, + 20544: 0x97BD, + 20545: 0x97BE, + 20546: 0x97BF, + 20547: 0x97C0, + 20548: 0x97C1, + 20549: 0x97C2, + 20550: 0x97C3, + 20551: 0x97C4, + 20552: 0x97C5, + 20553: 0x97C6, + 20554: 0x97C7, + 20555: 0x97C8, + 20556: 0x97C9, + 20557: 0x97CA, + 20558: 0x97CB, + 20559: 0x97CC, + 20560: 0x97CD, + 20561: 0x97CE, + 20562: 0x97CF, + 20563: 0x97D0, + 20564: 0x97D1, + 20565: 0x97D2, + 20566: 0x97D3, + 20567: 0x97D4, + 20568: 0x97D5, + 20569: 0x97D6, + 20570: 0x97D7, + 20571: 0x97D8, + 20572: 0x97D9, + 20573: 0x97DA, + 20574: 0x97DB, + 20575: 0x97DC, + 20576: 0x97DD, + 20577: 0x97DE, + 20578: 0x97DF, + 20579: 0x97E0, + 20580: 0x97E1, + 20581: 0x97E2, + 20582: 0x97E3, + 20583: 0x97E4, + 20584: 0x97E5, + 20585: 0x97E8, + 20586: 0x97EE, + 20587: 0x97EF, + 20588: 0x97F0, + 20589: 0x97F1, + 20590: 0x97F2, + 20591: 0x97F4, + 20592: 0x97F7, + 20593: 0x97F8, + 20594: 0x97F9, + 20595: 0x97FA, + 20596: 0x97FB, + 20597: 0x97FC, + 20598: 0x97FD, + 20599: 0x97FE, + 20600: 0x97FF, + 20601: 0x9800, + 20602: 0x9801, + 20603: 0x9802, + 20604: 0x9803, + 20605: 0x9804, + 20606: 0x9805, + 20607: 0x9806, + 20608: 0x9807, + 20609: 0x9808, + 20610: 0x9809, + 20611: 0x980A, + 20612: 0x980B, + 20613: 0x980C, + 20614: 0x980D, + 20615: 0x980E, + 20616: 0x603C, + 20617: 0x605D, + 20618: 0x605A, + 20619: 0x6067, + 20620: 0x6041, + 20621: 0x6059, + 20622: 0x6063, + 20623: 0x60AB, + 20624: 0x6106, + 20625: 0x610D, + 20626: 0x615D, + 20627: 0x61A9, + 20628: 0x619D, + 20629: 0x61CB, + 20630: 0x61D1, + 20631: 0x6206, + 20632: 0x8080, + 20633: 0x807F, + 20634: 0x6C93, + 20635: 0x6CF6, + 20636: 0x6DFC, + 20637: 0x77F6, + 20638: 0x77F8, + 20639: 0x7800, + 20640: 0x7809, + 20641: 0x7817, + 20642: 0x7818, + 20643: 0x7811, + 20644: 0x65AB, + 20645: 0x782D, + 20646: 0x781C, + 20647: 0x781D, + 20648: 0x7839, + 20649: 0x783A, + 20650: 0x783B, + 20651: 0x781F, + 20652: 0x783C, + 20653: 0x7825, + 20654: 0x782C, + 20655: 0x7823, + 20656: 0x7829, + 20657: 0x784E, + 20658: 0x786D, + 20659: 0x7856, + 20660: 0x7857, + 20661: 0x7826, + 20662: 0x7850, + 20663: 0x7847, + 20664: 0x784C, + 20665: 0x786A, + 20666: 0x789B, + 20667: 0x7893, + 20668: 0x789A, + 20669: 0x7887, + 20670: 0x789C, + 20671: 0x78A1, + 20672: 0x78A3, + 20673: 0x78B2, + 20674: 0x78B9, + 20675: 0x78A5, + 20676: 0x78D4, + 20677: 0x78D9, + 20678: 0x78C9, + 20679: 0x78EC, + 20680: 0x78F2, + 20681: 0x7905, + 20682: 0x78F4, + 20683: 0x7913, + 20684: 0x7924, + 20685: 0x791E, + 20686: 0x7934, + 20687: 0x9F9B, + 20688: 0x9EF9, + 20689: 0x9EFB, + 20690: 0x9EFC, + 20691: 0x76F1, + 20692: 0x7704, + 20693: 0x770D, + 20694: 0x76F9, + 20695: 0x7707, + 20696: 0x7708, + 20697: 0x771A, + 20698: 0x7722, + 20699: 0x7719, + 20700: 0x772D, + 20701: 0x7726, + 20702: 0x7735, + 20703: 0x7738, + 20704: 0x7750, + 20705: 0x7751, + 20706: 0x7747, + 20707: 0x7743, + 20708: 0x775A, + 20709: 0x7768, + 20710: 0x980F, + 20711: 0x9810, + 20712: 0x9811, + 20713: 0x9812, + 20714: 0x9813, + 20715: 0x9814, + 20716: 0x9815, + 20717: 0x9816, + 20718: 0x9817, + 20719: 0x9818, + 20720: 0x9819, + 20721: 0x981A, + 20722: 0x981B, + 20723: 0x981C, + 20724: 0x981D, + 20725: 0x981E, + 20726: 0x981F, + 20727: 0x9820, + 20728: 0x9821, + 20729: 0x9822, + 20730: 0x9823, + 20731: 0x9824, + 20732: 0x9825, + 20733: 0x9826, + 20734: 0x9827, + 20735: 0x9828, + 20736: 0x9829, + 20737: 0x982A, + 20738: 0x982B, + 20739: 0x982C, + 20740: 0x982D, + 20741: 0x982E, + 20742: 0x982F, + 20743: 0x9830, + 20744: 0x9831, + 20745: 0x9832, + 20746: 0x9833, + 20747: 0x9834, + 20748: 0x9835, + 20749: 0x9836, + 20750: 0x9837, + 20751: 0x9838, + 20752: 0x9839, + 20753: 0x983A, + 20754: 0x983B, + 20755: 0x983C, + 20756: 0x983D, + 20757: 0x983E, + 20758: 0x983F, + 20759: 0x9840, + 20760: 0x9841, + 20761: 0x9842, + 20762: 0x9843, + 20763: 0x9844, + 20764: 0x9845, + 20765: 0x9846, + 20766: 0x9847, + 20767: 0x9848, + 20768: 0x9849, + 20769: 0x984A, + 20770: 0x984B, + 20771: 0x984C, + 20772: 0x984D, + 20773: 0x984E, + 20774: 0x984F, + 20775: 0x9850, + 20776: 0x9851, + 20777: 0x9852, + 20778: 0x9853, + 20779: 0x9854, + 20780: 0x9855, + 20781: 0x9856, + 20782: 0x9857, + 20783: 0x9858, + 20784: 0x9859, + 20785: 0x985A, + 20786: 0x985B, + 20787: 0x985C, + 20788: 0x985D, + 20789: 0x985E, + 20790: 0x985F, + 20791: 0x9860, + 20792: 0x9861, + 20793: 0x9862, + 20794: 0x9863, + 20795: 0x9864, + 20796: 0x9865, + 20797: 0x9866, + 20798: 0x9867, + 20799: 0x9868, + 20800: 0x9869, + 20801: 0x986A, + 20802: 0x986B, + 20803: 0x986C, + 20804: 0x986D, + 20805: 0x986E, + 20806: 0x7762, + 20807: 0x7765, + 20808: 0x777F, + 20809: 0x778D, + 20810: 0x777D, + 20811: 0x7780, + 20812: 0x778C, + 20813: 0x7791, + 20814: 0x779F, + 20815: 0x77A0, + 20816: 0x77B0, + 20817: 0x77B5, + 20818: 0x77BD, + 20819: 0x753A, + 20820: 0x7540, + 20821: 0x754E, + 20822: 0x754B, + 20823: 0x7548, + 20824: 0x755B, + 20825: 0x7572, + 20826: 0x7579, + 20827: 0x7583, + 20828: 0x7F58, + 20829: 0x7F61, + 20830: 0x7F5F, + 20831: 0x8A48, + 20832: 0x7F68, + 20833: 0x7F74, + 20834: 0x7F71, + 20835: 0x7F79, + 20836: 0x7F81, + 20837: 0x7F7E, + 20838: 0x76CD, + 20839: 0x76E5, + 20840: 0x8832, + 20841: 0x9485, + 20842: 0x9486, + 20843: 0x9487, + 20844: 0x948B, + 20845: 0x948A, + 20846: 0x948C, + 20847: 0x948D, + 20848: 0x948F, + 20849: 0x9490, + 20850: 0x9494, + 20851: 0x9497, + 20852: 0x9495, + 20853: 0x949A, + 20854: 0x949B, + 20855: 0x949C, + 20856: 0x94A3, + 20857: 0x94A4, + 20858: 0x94AB, + 20859: 0x94AA, + 20860: 0x94AD, + 20861: 0x94AC, + 20862: 0x94AF, + 20863: 0x94B0, + 20864: 0x94B2, + 20865: 0x94B4, + 20866: 0x94B6, + 20867: 0x94B7, + 20868: 0x94B8, + 20869: 0x94B9, + 20870: 0x94BA, + 20871: 0x94BC, + 20872: 0x94BD, + 20873: 0x94BF, + 20874: 0x94C4, + 20875: 0x94C8, + 20876: 0x94C9, + 20877: 0x94CA, + 20878: 0x94CB, + 20879: 0x94CC, + 20880: 0x94CD, + 20881: 0x94CE, + 20882: 0x94D0, + 20883: 0x94D1, + 20884: 0x94D2, + 20885: 0x94D5, + 20886: 0x94D6, + 20887: 0x94D7, + 20888: 0x94D9, + 20889: 0x94D8, + 20890: 0x94DB, + 20891: 0x94DE, + 20892: 0x94DF, + 20893: 0x94E0, + 20894: 0x94E2, + 20895: 0x94E4, + 20896: 0x94E5, + 20897: 0x94E7, + 20898: 0x94E8, + 20899: 0x94EA, + 20900: 0x986F, + 20901: 0x9870, + 20902: 0x9871, + 20903: 0x9872, + 20904: 0x9873, + 20905: 0x9874, + 20906: 0x988B, + 20907: 0x988E, + 20908: 0x9892, + 20909: 0x9895, + 20910: 0x9899, + 20911: 0x98A3, + 20912: 0x98A8, + 20913: 0x98A9, + 20914: 0x98AA, + 20915: 0x98AB, + 20916: 0x98AC, + 20917: 0x98AD, + 20918: 0x98AE, + 20919: 0x98AF, + 20920: 0x98B0, + 20921: 0x98B1, + 20922: 0x98B2, + 20923: 0x98B3, + 20924: 0x98B4, + 20925: 0x98B5, + 20926: 0x98B6, + 20927: 0x98B7, + 20928: 0x98B8, + 20929: 0x98B9, + 20930: 0x98BA, + 20931: 0x98BB, + 20932: 0x98BC, + 20933: 0x98BD, + 20934: 0x98BE, + 20935: 0x98BF, + 20936: 0x98C0, + 20937: 0x98C1, + 20938: 0x98C2, + 20939: 0x98C3, + 20940: 0x98C4, + 20941: 0x98C5, + 20942: 0x98C6, + 20943: 0x98C7, + 20944: 0x98C8, + 20945: 0x98C9, + 20946: 0x98CA, + 20947: 0x98CB, + 20948: 0x98CC, + 20949: 0x98CD, + 20950: 0x98CF, + 20951: 0x98D0, + 20952: 0x98D4, + 20953: 0x98D6, + 20954: 0x98D7, + 20955: 0x98DB, + 20956: 0x98DC, + 20957: 0x98DD, + 20958: 0x98E0, + 20959: 0x98E1, + 20960: 0x98E2, + 20961: 0x98E3, + 20962: 0x98E4, + 20963: 0x98E5, + 20964: 0x98E6, + 20965: 0x98E9, + 20966: 0x98EA, + 20967: 0x98EB, + 20968: 0x98EC, + 20969: 0x98ED, + 20970: 0x98EE, + 20971: 0x98EF, + 20972: 0x98F0, + 20973: 0x98F1, + 20974: 0x98F2, + 20975: 0x98F3, + 20976: 0x98F4, + 20977: 0x98F5, + 20978: 0x98F6, + 20979: 0x98F7, + 20980: 0x98F8, + 20981: 0x98F9, + 20982: 0x98FA, + 20983: 0x98FB, + 20984: 0x98FC, + 20985: 0x98FD, + 20986: 0x98FE, + 20987: 0x98FF, + 20988: 0x9900, + 20989: 0x9901, + 20990: 0x9902, + 20991: 0x9903, + 20992: 0x9904, + 20993: 0x9905, + 20994: 0x9906, + 20995: 0x9907, + 20996: 0x94E9, + 20997: 0x94EB, + 20998: 0x94EE, + 20999: 0x94EF, + 21000: 0x94F3, + 21001: 0x94F4, + 21002: 0x94F5, + 21003: 0x94F7, + 21004: 0x94F9, + 21005: 0x94FC, + 21006: 0x94FD, + 21007: 0x94FF, + 21008: 0x9503, + 21009: 0x9502, + 21010: 0x9506, + 21011: 0x9507, + 21012: 0x9509, + 21013: 0x950A, + 21014: 0x950D, + 21015: 0x950E, + 21016: 0x950F, + 21017: 0x9512, + 21018: 0x9513, + 21019: 0x9514, + 21020: 0x9515, + 21021: 0x9516, + 21022: 0x9518, + 21023: 0x951B, + 21024: 0x951D, + 21025: 0x951E, + 21026: 0x951F, + 21027: 0x9522, + 21028: 0x952A, + 21029: 0x952B, + 21030: 0x9529, + 21031: 0x952C, + 21032: 0x9531, + 21033: 0x9532, + 21034: 0x9534, + 21035: 0x9536, + 21036: 0x9537, + 21037: 0x9538, + 21038: 0x953C, + 21039: 0x953E, + 21040: 0x953F, + 21041: 0x9542, + 21042: 0x9535, + 21043: 0x9544, + 21044: 0x9545, + 21045: 0x9546, + 21046: 0x9549, + 21047: 0x954C, + 21048: 0x954E, + 21049: 0x954F, + 21050: 0x9552, + 21051: 0x9553, + 21052: 0x9554, + 21053: 0x9556, + 21054: 0x9557, + 21055: 0x9558, + 21056: 0x9559, + 21057: 0x955B, + 21058: 0x955E, + 21059: 0x955F, + 21060: 0x955D, + 21061: 0x9561, + 21062: 0x9562, + 21063: 0x9564, + 21064: 0x9565, + 21065: 0x9566, + 21066: 0x9567, + 21067: 0x9568, + 21068: 0x9569, + 21069: 0x956A, + 21070: 0x956B, + 21071: 0x956C, + 21072: 0x956F, + 21073: 0x9571, + 21074: 0x9572, + 21075: 0x9573, + 21076: 0x953A, + 21077: 0x77E7, + 21078: 0x77EC, + 21079: 0x96C9, + 21080: 0x79D5, + 21081: 0x79ED, + 21082: 0x79E3, + 21083: 0x79EB, + 21084: 0x7A06, + 21085: 0x5D47, + 21086: 0x7A03, + 21087: 0x7A02, + 21088: 0x7A1E, + 21089: 0x7A14, + 21090: 0x9908, + 21091: 0x9909, + 21092: 0x990A, + 21093: 0x990B, + 21094: 0x990C, + 21095: 0x990E, + 21096: 0x990F, + 21097: 0x9911, + 21098: 0x9912, + 21099: 0x9913, + 21100: 0x9914, + 21101: 0x9915, + 21102: 0x9916, + 21103: 0x9917, + 21104: 0x9918, + 21105: 0x9919, + 21106: 0x991A, + 21107: 0x991B, + 21108: 0x991C, + 21109: 0x991D, + 21110: 0x991E, + 21111: 0x991F, + 21112: 0x9920, + 21113: 0x9921, + 21114: 0x9922, + 21115: 0x9923, + 21116: 0x9924, + 21117: 0x9925, + 21118: 0x9926, + 21119: 0x9927, + 21120: 0x9928, + 21121: 0x9929, + 21122: 0x992A, + 21123: 0x992B, + 21124: 0x992C, + 21125: 0x992D, + 21126: 0x992F, + 21127: 0x9930, + 21128: 0x9931, + 21129: 0x9932, + 21130: 0x9933, + 21131: 0x9934, + 21132: 0x9935, + 21133: 0x9936, + 21134: 0x9937, + 21135: 0x9938, + 21136: 0x9939, + 21137: 0x993A, + 21138: 0x993B, + 21139: 0x993C, + 21140: 0x993D, + 21141: 0x993E, + 21142: 0x993F, + 21143: 0x9940, + 21144: 0x9941, + 21145: 0x9942, + 21146: 0x9943, + 21147: 0x9944, + 21148: 0x9945, + 21149: 0x9946, + 21150: 0x9947, + 21151: 0x9948, + 21152: 0x9949, + 21153: 0x994A, + 21154: 0x994B, + 21155: 0x994C, + 21156: 0x994D, + 21157: 0x994E, + 21158: 0x994F, + 21159: 0x9950, + 21160: 0x9951, + 21161: 0x9952, + 21162: 0x9953, + 21163: 0x9956, + 21164: 0x9957, + 21165: 0x9958, + 21166: 0x9959, + 21167: 0x995A, + 21168: 0x995B, + 21169: 0x995C, + 21170: 0x995D, + 21171: 0x995E, + 21172: 0x995F, + 21173: 0x9960, + 21174: 0x9961, + 21175: 0x9962, + 21176: 0x9964, + 21177: 0x9966, + 21178: 0x9973, + 21179: 0x9978, + 21180: 0x9979, + 21181: 0x997B, + 21182: 0x997E, + 21183: 0x9982, + 21184: 0x9983, + 21185: 0x9989, + 21186: 0x7A39, + 21187: 0x7A37, + 21188: 0x7A51, + 21189: 0x9ECF, + 21190: 0x99A5, + 21191: 0x7A70, + 21192: 0x7688, + 21193: 0x768E, + 21194: 0x7693, + 21195: 0x7699, + 21196: 0x76A4, + 21197: 0x74DE, + 21198: 0x74E0, + 21199: 0x752C, + 21200: 0x9E20, + 21201: 0x9E22, + 21202: 0x9E28, + 21203: 0x9E29, + 21204: 0x9E2A, + 21205: 0x9E2B, + 21206: 0x9E2C, + 21207: 0x9E32, + 21208: 0x9E31, + 21209: 0x9E36, + 21210: 0x9E38, + 21211: 0x9E37, + 21212: 0x9E39, + 21213: 0x9E3A, + 21214: 0x9E3E, + 21215: 0x9E41, + 21216: 0x9E42, + 21217: 0x9E44, + 21218: 0x9E46, + 21219: 0x9E47, + 21220: 0x9E48, + 21221: 0x9E49, + 21222: 0x9E4B, + 21223: 0x9E4C, + 21224: 0x9E4E, + 21225: 0x9E51, + 21226: 0x9E55, + 21227: 0x9E57, + 21228: 0x9E5A, + 21229: 0x9E5B, + 21230: 0x9E5C, + 21231: 0x9E5E, + 21232: 0x9E63, + 21233: 0x9E66, + 21234: 0x9E67, + 21235: 0x9E68, + 21236: 0x9E69, + 21237: 0x9E6A, + 21238: 0x9E6B, + 21239: 0x9E6C, + 21240: 0x9E71, + 21241: 0x9E6D, + 21242: 0x9E73, + 21243: 0x7592, + 21244: 0x7594, + 21245: 0x7596, + 21246: 0x75A0, + 21247: 0x759D, + 21248: 0x75AC, + 21249: 0x75A3, + 21250: 0x75B3, + 21251: 0x75B4, + 21252: 0x75B8, + 21253: 0x75C4, + 21254: 0x75B1, + 21255: 0x75B0, + 21256: 0x75C3, + 21257: 0x75C2, + 21258: 0x75D6, + 21259: 0x75CD, + 21260: 0x75E3, + 21261: 0x75E8, + 21262: 0x75E6, + 21263: 0x75E4, + 21264: 0x75EB, + 21265: 0x75E7, + 21266: 0x7603, + 21267: 0x75F1, + 21268: 0x75FC, + 21269: 0x75FF, + 21270: 0x7610, + 21271: 0x7600, + 21272: 0x7605, + 21273: 0x760C, + 21274: 0x7617, + 21275: 0x760A, + 21276: 0x7625, + 21277: 0x7618, + 21278: 0x7615, + 21279: 0x7619, + 21280: 0x998C, + 21281: 0x998E, + 21282: 0x999A, + 21283: 0x999B, + 21284: 0x999C, + 21285: 0x999D, + 21286: 0x999E, + 21287: 0x999F, + 21288: 0x99A0, + 21289: 0x99A1, + 21290: 0x99A2, + 21291: 0x99A3, + 21292: 0x99A4, + 21293: 0x99A6, + 21294: 0x99A7, + 21295: 0x99A9, + 21296: 0x99AA, + 21297: 0x99AB, + 21298: 0x99AC, + 21299: 0x99AD, + 21300: 0x99AE, + 21301: 0x99AF, + 21302: 0x99B0, + 21303: 0x99B1, + 21304: 0x99B2, + 21305: 0x99B3, + 21306: 0x99B4, + 21307: 0x99B5, + 21308: 0x99B6, + 21309: 0x99B7, + 21310: 0x99B8, + 21311: 0x99B9, + 21312: 0x99BA, + 21313: 0x99BB, + 21314: 0x99BC, + 21315: 0x99BD, + 21316: 0x99BE, + 21317: 0x99BF, + 21318: 0x99C0, + 21319: 0x99C1, + 21320: 0x99C2, + 21321: 0x99C3, + 21322: 0x99C4, + 21323: 0x99C5, + 21324: 0x99C6, + 21325: 0x99C7, + 21326: 0x99C8, + 21327: 0x99C9, + 21328: 0x99CA, + 21329: 0x99CB, + 21330: 0x99CC, + 21331: 0x99CD, + 21332: 0x99CE, + 21333: 0x99CF, + 21334: 0x99D0, + 21335: 0x99D1, + 21336: 0x99D2, + 21337: 0x99D3, + 21338: 0x99D4, + 21339: 0x99D5, + 21340: 0x99D6, + 21341: 0x99D7, + 21342: 0x99D8, + 21343: 0x99D9, + 21344: 0x99DA, + 21345: 0x99DB, + 21346: 0x99DC, + 21347: 0x99DD, + 21348: 0x99DE, + 21349: 0x99DF, + 21350: 0x99E0, + 21351: 0x99E1, + 21352: 0x99E2, + 21353: 0x99E3, + 21354: 0x99E4, + 21355: 0x99E5, + 21356: 0x99E6, + 21357: 0x99E7, + 21358: 0x99E8, + 21359: 0x99E9, + 21360: 0x99EA, + 21361: 0x99EB, + 21362: 0x99EC, + 21363: 0x99ED, + 21364: 0x99EE, + 21365: 0x99EF, + 21366: 0x99F0, + 21367: 0x99F1, + 21368: 0x99F2, + 21369: 0x99F3, + 21370: 0x99F4, + 21371: 0x99F5, + 21372: 0x99F6, + 21373: 0x99F7, + 21374: 0x99F8, + 21375: 0x99F9, + 21376: 0x761B, + 21377: 0x763C, + 21378: 0x7622, + 21379: 0x7620, + 21380: 0x7640, + 21381: 0x762D, + 21382: 0x7630, + 21383: 0x763F, + 21384: 0x7635, + 21385: 0x7643, + 21386: 0x763E, + 21387: 0x7633, + 21388: 0x764D, + 21389: 0x765E, + 21390: 0x7654, + 21391: 0x765C, + 21392: 0x7656, + 21393: 0x766B, + 21394: 0x766F, + 21395: 0x7FCA, + 21396: 0x7AE6, + 21397: 0x7A78, + 21398: 0x7A79, + 21399: 0x7A80, + 21400: 0x7A86, + 21401: 0x7A88, + 21402: 0x7A95, + 21403: 0x7AA6, + 21404: 0x7AA0, + 21405: 0x7AAC, + 21406: 0x7AA8, + 21407: 0x7AAD, + 21408: 0x7AB3, + 21409: 0x8864, + 21410: 0x8869, + 21411: 0x8872, + 21412: 0x887D, + 21413: 0x887F, + 21414: 0x8882, + 21415: 0x88A2, + 21416: 0x88C6, + 21417: 0x88B7, + 21418: 0x88BC, + 21419: 0x88C9, + 21420: 0x88E2, + 21421: 0x88CE, + 21422: 0x88E3, + 21423: 0x88E5, + 21424: 0x88F1, + 21425: 0x891A, + 21426: 0x88FC, + 21427: 0x88E8, + 21428: 0x88FE, + 21429: 0x88F0, + 21430: 0x8921, + 21431: 0x8919, + 21432: 0x8913, + 21433: 0x891B, + 21434: 0x890A, + 21435: 0x8934, + 21436: 0x892B, + 21437: 0x8936, + 21438: 0x8941, + 21439: 0x8966, + 21440: 0x897B, + 21441: 0x758B, + 21442: 0x80E5, + 21443: 0x76B2, + 21444: 0x76B4, + 21445: 0x77DC, + 21446: 0x8012, + 21447: 0x8014, + 21448: 0x8016, + 21449: 0x801C, + 21450: 0x8020, + 21451: 0x8022, + 21452: 0x8025, + 21453: 0x8026, + 21454: 0x8027, + 21455: 0x8029, + 21456: 0x8028, + 21457: 0x8031, + 21458: 0x800B, + 21459: 0x8035, + 21460: 0x8043, + 21461: 0x8046, + 21462: 0x804D, + 21463: 0x8052, + 21464: 0x8069, + 21465: 0x8071, + 21466: 0x8983, + 21467: 0x9878, + 21468: 0x9880, + 21469: 0x9883, + 21470: 0x99FA, + 21471: 0x99FB, + 21472: 0x99FC, + 21473: 0x99FD, + 21474: 0x99FE, + 21475: 0x99FF, + 21476: 0x9A00, + 21477: 0x9A01, + 21478: 0x9A02, + 21479: 0x9A03, + 21480: 0x9A04, + 21481: 0x9A05, + 21482: 0x9A06, + 21483: 0x9A07, + 21484: 0x9A08, + 21485: 0x9A09, + 21486: 0x9A0A, + 21487: 0x9A0B, + 21488: 0x9A0C, + 21489: 0x9A0D, + 21490: 0x9A0E, + 21491: 0x9A0F, + 21492: 0x9A10, + 21493: 0x9A11, + 21494: 0x9A12, + 21495: 0x9A13, + 21496: 0x9A14, + 21497: 0x9A15, + 21498: 0x9A16, + 21499: 0x9A17, + 21500: 0x9A18, + 21501: 0x9A19, + 21502: 0x9A1A, + 21503: 0x9A1B, + 21504: 0x9A1C, + 21505: 0x9A1D, + 21506: 0x9A1E, + 21507: 0x9A1F, + 21508: 0x9A20, + 21509: 0x9A21, + 21510: 0x9A22, + 21511: 0x9A23, + 21512: 0x9A24, + 21513: 0x9A25, + 21514: 0x9A26, + 21515: 0x9A27, + 21516: 0x9A28, + 21517: 0x9A29, + 21518: 0x9A2A, + 21519: 0x9A2B, + 21520: 0x9A2C, + 21521: 0x9A2D, + 21522: 0x9A2E, + 21523: 0x9A2F, + 21524: 0x9A30, + 21525: 0x9A31, + 21526: 0x9A32, + 21527: 0x9A33, + 21528: 0x9A34, + 21529: 0x9A35, + 21530: 0x9A36, + 21531: 0x9A37, + 21532: 0x9A38, + 21533: 0x9A39, + 21534: 0x9A3A, + 21535: 0x9A3B, + 21536: 0x9A3C, + 21537: 0x9A3D, + 21538: 0x9A3E, + 21539: 0x9A3F, + 21540: 0x9A40, + 21541: 0x9A41, + 21542: 0x9A42, + 21543: 0x9A43, + 21544: 0x9A44, + 21545: 0x9A45, + 21546: 0x9A46, + 21547: 0x9A47, + 21548: 0x9A48, + 21549: 0x9A49, + 21550: 0x9A4A, + 21551: 0x9A4B, + 21552: 0x9A4C, + 21553: 0x9A4D, + 21554: 0x9A4E, + 21555: 0x9A4F, + 21556: 0x9A50, + 21557: 0x9A51, + 21558: 0x9A52, + 21559: 0x9A53, + 21560: 0x9A54, + 21561: 0x9A55, + 21562: 0x9A56, + 21563: 0x9A57, + 21564: 0x9A58, + 21565: 0x9A59, + 21566: 0x9889, + 21567: 0x988C, + 21568: 0x988D, + 21569: 0x988F, + 21570: 0x9894, + 21571: 0x989A, + 21572: 0x989B, + 21573: 0x989E, + 21574: 0x989F, + 21575: 0x98A1, + 21576: 0x98A2, + 21577: 0x98A5, + 21578: 0x98A6, + 21579: 0x864D, + 21580: 0x8654, + 21581: 0x866C, + 21582: 0x866E, + 21583: 0x867F, + 21584: 0x867A, + 21585: 0x867C, + 21586: 0x867B, + 21587: 0x86A8, + 21588: 0x868D, + 21589: 0x868B, + 21590: 0x86AC, + 21591: 0x869D, + 21592: 0x86A7, + 21593: 0x86A3, + 21594: 0x86AA, + 21595: 0x8693, + 21596: 0x86A9, + 21597: 0x86B6, + 21598: 0x86C4, + 21599: 0x86B5, + 21600: 0x86CE, + 21601: 0x86B0, + 21602: 0x86BA, + 21603: 0x86B1, + 21604: 0x86AF, + 21605: 0x86C9, + 21606: 0x86CF, + 21607: 0x86B4, + 21608: 0x86E9, + 21609: 0x86F1, + 21610: 0x86F2, + 21611: 0x86ED, + 21612: 0x86F3, + 21613: 0x86D0, + 21614: 0x8713, + 21615: 0x86DE, + 21616: 0x86F4, + 21617: 0x86DF, + 21618: 0x86D8, + 21619: 0x86D1, + 21620: 0x8703, + 21621: 0x8707, + 21622: 0x86F8, + 21623: 0x8708, + 21624: 0x870A, + 21625: 0x870D, + 21626: 0x8709, + 21627: 0x8723, + 21628: 0x873B, + 21629: 0x871E, + 21630: 0x8725, + 21631: 0x872E, + 21632: 0x871A, + 21633: 0x873E, + 21634: 0x8748, + 21635: 0x8734, + 21636: 0x8731, + 21637: 0x8729, + 21638: 0x8737, + 21639: 0x873F, + 21640: 0x8782, + 21641: 0x8722, + 21642: 0x877D, + 21643: 0x877E, + 21644: 0x877B, + 21645: 0x8760, + 21646: 0x8770, + 21647: 0x874C, + 21648: 0x876E, + 21649: 0x878B, + 21650: 0x8753, + 21651: 0x8763, + 21652: 0x877C, + 21653: 0x8764, + 21654: 0x8759, + 21655: 0x8765, + 21656: 0x8793, + 21657: 0x87AF, + 21658: 0x87A8, + 21659: 0x87D2, + 21660: 0x9A5A, + 21661: 0x9A5B, + 21662: 0x9A5C, + 21663: 0x9A5D, + 21664: 0x9A5E, + 21665: 0x9A5F, + 21666: 0x9A60, + 21667: 0x9A61, + 21668: 0x9A62, + 21669: 0x9A63, + 21670: 0x9A64, + 21671: 0x9A65, + 21672: 0x9A66, + 21673: 0x9A67, + 21674: 0x9A68, + 21675: 0x9A69, + 21676: 0x9A6A, + 21677: 0x9A6B, + 21678: 0x9A72, + 21679: 0x9A83, + 21680: 0x9A89, + 21681: 0x9A8D, + 21682: 0x9A8E, + 21683: 0x9A94, + 21684: 0x9A95, + 21685: 0x9A99, + 21686: 0x9AA6, + 21687: 0x9AA9, + 21688: 0x9AAA, + 21689: 0x9AAB, + 21690: 0x9AAC, + 21691: 0x9AAD, + 21692: 0x9AAE, + 21693: 0x9AAF, + 21694: 0x9AB2, + 21695: 0x9AB3, + 21696: 0x9AB4, + 21697: 0x9AB5, + 21698: 0x9AB9, + 21699: 0x9ABB, + 21700: 0x9ABD, + 21701: 0x9ABE, + 21702: 0x9ABF, + 21703: 0x9AC3, + 21704: 0x9AC4, + 21705: 0x9AC6, + 21706: 0x9AC7, + 21707: 0x9AC8, + 21708: 0x9AC9, + 21709: 0x9ACA, + 21710: 0x9ACD, + 21711: 0x9ACE, + 21712: 0x9ACF, + 21713: 0x9AD0, + 21714: 0x9AD2, + 21715: 0x9AD4, + 21716: 0x9AD5, + 21717: 0x9AD6, + 21718: 0x9AD7, + 21719: 0x9AD9, + 21720: 0x9ADA, + 21721: 0x9ADB, + 21722: 0x9ADC, + 21723: 0x9ADD, + 21724: 0x9ADE, + 21725: 0x9AE0, + 21726: 0x9AE2, + 21727: 0x9AE3, + 21728: 0x9AE4, + 21729: 0x9AE5, + 21730: 0x9AE7, + 21731: 0x9AE8, + 21732: 0x9AE9, + 21733: 0x9AEA, + 21734: 0x9AEC, + 21735: 0x9AEE, + 21736: 0x9AF0, + 21737: 0x9AF1, + 21738: 0x9AF2, + 21739: 0x9AF3, + 21740: 0x9AF4, + 21741: 0x9AF5, + 21742: 0x9AF6, + 21743: 0x9AF7, + 21744: 0x9AF8, + 21745: 0x9AFA, + 21746: 0x9AFC, + 21747: 0x9AFD, + 21748: 0x9AFE, + 21749: 0x9AFF, + 21750: 0x9B00, + 21751: 0x9B01, + 21752: 0x9B02, + 21753: 0x9B04, + 21754: 0x9B05, + 21755: 0x9B06, + 21756: 0x87C6, + 21757: 0x8788, + 21758: 0x8785, + 21759: 0x87AD, + 21760: 0x8797, + 21761: 0x8783, + 21762: 0x87AB, + 21763: 0x87E5, + 21764: 0x87AC, + 21765: 0x87B5, + 21766: 0x87B3, + 21767: 0x87CB, + 21768: 0x87D3, + 21769: 0x87BD, + 21770: 0x87D1, + 21771: 0x87C0, + 21772: 0x87CA, + 21773: 0x87DB, + 21774: 0x87EA, + 21775: 0x87E0, + 21776: 0x87EE, + 21777: 0x8816, + 21778: 0x8813, + 21779: 0x87FE, + 21780: 0x880A, + 21781: 0x881B, + 21782: 0x8821, + 21783: 0x8839, + 21784: 0x883C, + 21785: 0x7F36, + 21786: 0x7F42, + 21787: 0x7F44, + 21788: 0x7F45, + 21789: 0x8210, + 21790: 0x7AFA, + 21791: 0x7AFD, + 21792: 0x7B08, + 21793: 0x7B03, + 21794: 0x7B04, + 21795: 0x7B15, + 21796: 0x7B0A, + 21797: 0x7B2B, + 21798: 0x7B0F, + 21799: 0x7B47, + 21800: 0x7B38, + 21801: 0x7B2A, + 21802: 0x7B19, + 21803: 0x7B2E, + 21804: 0x7B31, + 21805: 0x7B20, + 21806: 0x7B25, + 21807: 0x7B24, + 21808: 0x7B33, + 21809: 0x7B3E, + 21810: 0x7B1E, + 21811: 0x7B58, + 21812: 0x7B5A, + 21813: 0x7B45, + 21814: 0x7B75, + 21815: 0x7B4C, + 21816: 0x7B5D, + 21817: 0x7B60, + 21818: 0x7B6E, + 21819: 0x7B7B, + 21820: 0x7B62, + 21821: 0x7B72, + 21822: 0x7B71, + 21823: 0x7B90, + 21824: 0x7BA6, + 21825: 0x7BA7, + 21826: 0x7BB8, + 21827: 0x7BAC, + 21828: 0x7B9D, + 21829: 0x7BA8, + 21830: 0x7B85, + 21831: 0x7BAA, + 21832: 0x7B9C, + 21833: 0x7BA2, + 21834: 0x7BAB, + 21835: 0x7BB4, + 21836: 0x7BD1, + 21837: 0x7BC1, + 21838: 0x7BCC, + 21839: 0x7BDD, + 21840: 0x7BDA, + 21841: 0x7BE5, + 21842: 0x7BE6, + 21843: 0x7BEA, + 21844: 0x7C0C, + 21845: 0x7BFE, + 21846: 0x7BFC, + 21847: 0x7C0F, + 21848: 0x7C16, + 21849: 0x7C0B, + 21850: 0x9B07, + 21851: 0x9B09, + 21852: 0x9B0A, + 21853: 0x9B0B, + 21854: 0x9B0C, + 21855: 0x9B0D, + 21856: 0x9B0E, + 21857: 0x9B10, + 21858: 0x9B11, + 21859: 0x9B12, + 21860: 0x9B14, + 21861: 0x9B15, + 21862: 0x9B16, + 21863: 0x9B17, + 21864: 0x9B18, + 21865: 0x9B19, + 21866: 0x9B1A, + 21867: 0x9B1B, + 21868: 0x9B1C, + 21869: 0x9B1D, + 21870: 0x9B1E, + 21871: 0x9B20, + 21872: 0x9B21, + 21873: 0x9B22, + 21874: 0x9B24, + 21875: 0x9B25, + 21876: 0x9B26, + 21877: 0x9B27, + 21878: 0x9B28, + 21879: 0x9B29, + 21880: 0x9B2A, + 21881: 0x9B2B, + 21882: 0x9B2C, + 21883: 0x9B2D, + 21884: 0x9B2E, + 21885: 0x9B30, + 21886: 0x9B31, + 21887: 0x9B33, + 21888: 0x9B34, + 21889: 0x9B35, + 21890: 0x9B36, + 21891: 0x9B37, + 21892: 0x9B38, + 21893: 0x9B39, + 21894: 0x9B3A, + 21895: 0x9B3D, + 21896: 0x9B3E, + 21897: 0x9B3F, + 21898: 0x9B40, + 21899: 0x9B46, + 21900: 0x9B4A, + 21901: 0x9B4B, + 21902: 0x9B4C, + 21903: 0x9B4E, + 21904: 0x9B50, + 21905: 0x9B52, + 21906: 0x9B53, + 21907: 0x9B55, + 21908: 0x9B56, + 21909: 0x9B57, + 21910: 0x9B58, + 21911: 0x9B59, + 21912: 0x9B5A, + 21913: 0x9B5B, + 21914: 0x9B5C, + 21915: 0x9B5D, + 21916: 0x9B5E, + 21917: 0x9B5F, + 21918: 0x9B60, + 21919: 0x9B61, + 21920: 0x9B62, + 21921: 0x9B63, + 21922: 0x9B64, + 21923: 0x9B65, + 21924: 0x9B66, + 21925: 0x9B67, + 21926: 0x9B68, + 21927: 0x9B69, + 21928: 0x9B6A, + 21929: 0x9B6B, + 21930: 0x9B6C, + 21931: 0x9B6D, + 21932: 0x9B6E, + 21933: 0x9B6F, + 21934: 0x9B70, + 21935: 0x9B71, + 21936: 0x9B72, + 21937: 0x9B73, + 21938: 0x9B74, + 21939: 0x9B75, + 21940: 0x9B76, + 21941: 0x9B77, + 21942: 0x9B78, + 21943: 0x9B79, + 21944: 0x9B7A, + 21945: 0x9B7B, + 21946: 0x7C1F, + 21947: 0x7C2A, + 21948: 0x7C26, + 21949: 0x7C38, + 21950: 0x7C41, + 21951: 0x7C40, + 21952: 0x81FE, + 21953: 0x8201, + 21954: 0x8202, + 21955: 0x8204, + 21956: 0x81EC, + 21957: 0x8844, + 21958: 0x8221, + 21959: 0x8222, + 21960: 0x8223, + 21961: 0x822D, + 21962: 0x822F, + 21963: 0x8228, + 21964: 0x822B, + 21965: 0x8238, + 21966: 0x823B, + 21967: 0x8233, + 21968: 0x8234, + 21969: 0x823E, + 21970: 0x8244, + 21971: 0x8249, + 21972: 0x824B, + 21973: 0x824F, + 21974: 0x825A, + 21975: 0x825F, + 21976: 0x8268, + 21977: 0x887E, + 21978: 0x8885, + 21979: 0x8888, + 21980: 0x88D8, + 21981: 0x88DF, + 21982: 0x895E, + 21983: 0x7F9D, + 21984: 0x7F9F, + 21985: 0x7FA7, + 21986: 0x7FAF, + 21987: 0x7FB0, + 21988: 0x7FB2, + 21989: 0x7C7C, + 21990: 0x6549, + 21991: 0x7C91, + 21992: 0x7C9D, + 21993: 0x7C9C, + 21994: 0x7C9E, + 21995: 0x7CA2, + 21996: 0x7CB2, + 21997: 0x7CBC, + 21998: 0x7CBD, + 21999: 0x7CC1, + 22000: 0x7CC7, + 22001: 0x7CCC, + 22002: 0x7CCD, + 22003: 0x7CC8, + 22004: 0x7CC5, + 22005: 0x7CD7, + 22006: 0x7CE8, + 22007: 0x826E, + 22008: 0x66A8, + 22009: 0x7FBF, + 22010: 0x7FCE, + 22011: 0x7FD5, + 22012: 0x7FE5, + 22013: 0x7FE1, + 22014: 0x7FE6, + 22015: 0x7FE9, + 22016: 0x7FEE, + 22017: 0x7FF3, + 22018: 0x7CF8, + 22019: 0x7D77, + 22020: 0x7DA6, + 22021: 0x7DAE, + 22022: 0x7E47, + 22023: 0x7E9B, + 22024: 0x9EB8, + 22025: 0x9EB4, + 22026: 0x8D73, + 22027: 0x8D84, + 22028: 0x8D94, + 22029: 0x8D91, + 22030: 0x8DB1, + 22031: 0x8D67, + 22032: 0x8D6D, + 22033: 0x8C47, + 22034: 0x8C49, + 22035: 0x914A, + 22036: 0x9150, + 22037: 0x914E, + 22038: 0x914F, + 22039: 0x9164, + 22040: 0x9B7C, + 22041: 0x9B7D, + 22042: 0x9B7E, + 22043: 0x9B7F, + 22044: 0x9B80, + 22045: 0x9B81, + 22046: 0x9B82, + 22047: 0x9B83, + 22048: 0x9B84, + 22049: 0x9B85, + 22050: 0x9B86, + 22051: 0x9B87, + 22052: 0x9B88, + 22053: 0x9B89, + 22054: 0x9B8A, + 22055: 0x9B8B, + 22056: 0x9B8C, + 22057: 0x9B8D, + 22058: 0x9B8E, + 22059: 0x9B8F, + 22060: 0x9B90, + 22061: 0x9B91, + 22062: 0x9B92, + 22063: 0x9B93, + 22064: 0x9B94, + 22065: 0x9B95, + 22066: 0x9B96, + 22067: 0x9B97, + 22068: 0x9B98, + 22069: 0x9B99, + 22070: 0x9B9A, + 22071: 0x9B9B, + 22072: 0x9B9C, + 22073: 0x9B9D, + 22074: 0x9B9E, + 22075: 0x9B9F, + 22076: 0x9BA0, + 22077: 0x9BA1, + 22078: 0x9BA2, + 22079: 0x9BA3, + 22080: 0x9BA4, + 22081: 0x9BA5, + 22082: 0x9BA6, + 22083: 0x9BA7, + 22084: 0x9BA8, + 22085: 0x9BA9, + 22086: 0x9BAA, + 22087: 0x9BAB, + 22088: 0x9BAC, + 22089: 0x9BAD, + 22090: 0x9BAE, + 22091: 0x9BAF, + 22092: 0x9BB0, + 22093: 0x9BB1, + 22094: 0x9BB2, + 22095: 0x9BB3, + 22096: 0x9BB4, + 22097: 0x9BB5, + 22098: 0x9BB6, + 22099: 0x9BB7, + 22100: 0x9BB8, + 22101: 0x9BB9, + 22102: 0x9BBA, + 22103: 0x9BBB, + 22104: 0x9BBC, + 22105: 0x9BBD, + 22106: 0x9BBE, + 22107: 0x9BBF, + 22108: 0x9BC0, + 22109: 0x9BC1, + 22110: 0x9BC2, + 22111: 0x9BC3, + 22112: 0x9BC4, + 22113: 0x9BC5, + 22114: 0x9BC6, + 22115: 0x9BC7, + 22116: 0x9BC8, + 22117: 0x9BC9, + 22118: 0x9BCA, + 22119: 0x9BCB, + 22120: 0x9BCC, + 22121: 0x9BCD, + 22122: 0x9BCE, + 22123: 0x9BCF, + 22124: 0x9BD0, + 22125: 0x9BD1, + 22126: 0x9BD2, + 22127: 0x9BD3, + 22128: 0x9BD4, + 22129: 0x9BD5, + 22130: 0x9BD6, + 22131: 0x9BD7, + 22132: 0x9BD8, + 22133: 0x9BD9, + 22134: 0x9BDA, + 22135: 0x9BDB, + 22136: 0x9162, + 22137: 0x9161, + 22138: 0x9170, + 22139: 0x9169, + 22140: 0x916F, + 22141: 0x917D, + 22142: 0x917E, + 22143: 0x9172, + 22144: 0x9174, + 22145: 0x9179, + 22146: 0x918C, + 22147: 0x9185, + 22148: 0x9190, + 22149: 0x918D, + 22150: 0x9191, + 22151: 0x91A2, + 22152: 0x91A3, + 22153: 0x91AA, + 22154: 0x91AD, + 22155: 0x91AE, + 22156: 0x91AF, + 22157: 0x91B5, + 22158: 0x91B4, + 22159: 0x91BA, + 22160: 0x8C55, + 22161: 0x9E7E, + 22162: 0x8DB8, + 22163: 0x8DEB, + 22164: 0x8E05, + 22165: 0x8E59, + 22166: 0x8E69, + 22167: 0x8DB5, + 22168: 0x8DBF, + 22169: 0x8DBC, + 22170: 0x8DBA, + 22171: 0x8DC4, + 22172: 0x8DD6, + 22173: 0x8DD7, + 22174: 0x8DDA, + 22175: 0x8DDE, + 22176: 0x8DCE, + 22177: 0x8DCF, + 22178: 0x8DDB, + 22179: 0x8DC6, + 22180: 0x8DEC, + 22181: 0x8DF7, + 22182: 0x8DF8, + 22183: 0x8DE3, + 22184: 0x8DF9, + 22185: 0x8DFB, + 22186: 0x8DE4, + 22187: 0x8E09, + 22188: 0x8DFD, + 22189: 0x8E14, + 22190: 0x8E1D, + 22191: 0x8E1F, + 22192: 0x8E2C, + 22193: 0x8E2E, + 22194: 0x8E23, + 22195: 0x8E2F, + 22196: 0x8E3A, + 22197: 0x8E40, + 22198: 0x8E39, + 22199: 0x8E35, + 22200: 0x8E3D, + 22201: 0x8E31, + 22202: 0x8E49, + 22203: 0x8E41, + 22204: 0x8E42, + 22205: 0x8E51, + 22206: 0x8E52, + 22207: 0x8E4A, + 22208: 0x8E70, + 22209: 0x8E76, + 22210: 0x8E7C, + 22211: 0x8E6F, + 22212: 0x8E74, + 22213: 0x8E85, + 22214: 0x8E8F, + 22215: 0x8E94, + 22216: 0x8E90, + 22217: 0x8E9C, + 22218: 0x8E9E, + 22219: 0x8C78, + 22220: 0x8C82, + 22221: 0x8C8A, + 22222: 0x8C85, + 22223: 0x8C98, + 22224: 0x8C94, + 22225: 0x659B, + 22226: 0x89D6, + 22227: 0x89DE, + 22228: 0x89DA, + 22229: 0x89DC, + 22230: 0x9BDC, + 22231: 0x9BDD, + 22232: 0x9BDE, + 22233: 0x9BDF, + 22234: 0x9BE0, + 22235: 0x9BE1, + 22236: 0x9BE2, + 22237: 0x9BE3, + 22238: 0x9BE4, + 22239: 0x9BE5, + 22240: 0x9BE6, + 22241: 0x9BE7, + 22242: 0x9BE8, + 22243: 0x9BE9, + 22244: 0x9BEA, + 22245: 0x9BEB, + 22246: 0x9BEC, + 22247: 0x9BED, + 22248: 0x9BEE, + 22249: 0x9BEF, + 22250: 0x9BF0, + 22251: 0x9BF1, + 22252: 0x9BF2, + 22253: 0x9BF3, + 22254: 0x9BF4, + 22255: 0x9BF5, + 22256: 0x9BF6, + 22257: 0x9BF7, + 22258: 0x9BF8, + 22259: 0x9BF9, + 22260: 0x9BFA, + 22261: 0x9BFB, + 22262: 0x9BFC, + 22263: 0x9BFD, + 22264: 0x9BFE, + 22265: 0x9BFF, + 22266: 0x9C00, + 22267: 0x9C01, + 22268: 0x9C02, + 22269: 0x9C03, + 22270: 0x9C04, + 22271: 0x9C05, + 22272: 0x9C06, + 22273: 0x9C07, + 22274: 0x9C08, + 22275: 0x9C09, + 22276: 0x9C0A, + 22277: 0x9C0B, + 22278: 0x9C0C, + 22279: 0x9C0D, + 22280: 0x9C0E, + 22281: 0x9C0F, + 22282: 0x9C10, + 22283: 0x9C11, + 22284: 0x9C12, + 22285: 0x9C13, + 22286: 0x9C14, + 22287: 0x9C15, + 22288: 0x9C16, + 22289: 0x9C17, + 22290: 0x9C18, + 22291: 0x9C19, + 22292: 0x9C1A, + 22293: 0x9C1B, + 22294: 0x9C1C, + 22295: 0x9C1D, + 22296: 0x9C1E, + 22297: 0x9C1F, + 22298: 0x9C20, + 22299: 0x9C21, + 22300: 0x9C22, + 22301: 0x9C23, + 22302: 0x9C24, + 22303: 0x9C25, + 22304: 0x9C26, + 22305: 0x9C27, + 22306: 0x9C28, + 22307: 0x9C29, + 22308: 0x9C2A, + 22309: 0x9C2B, + 22310: 0x9C2C, + 22311: 0x9C2D, + 22312: 0x9C2E, + 22313: 0x9C2F, + 22314: 0x9C30, + 22315: 0x9C31, + 22316: 0x9C32, + 22317: 0x9C33, + 22318: 0x9C34, + 22319: 0x9C35, + 22320: 0x9C36, + 22321: 0x9C37, + 22322: 0x9C38, + 22323: 0x9C39, + 22324: 0x9C3A, + 22325: 0x9C3B, + 22326: 0x89E5, + 22327: 0x89EB, + 22328: 0x89EF, + 22329: 0x8A3E, + 22330: 0x8B26, + 22331: 0x9753, + 22332: 0x96E9, + 22333: 0x96F3, + 22334: 0x96EF, + 22335: 0x9706, + 22336: 0x9701, + 22337: 0x9708, + 22338: 0x970F, + 22339: 0x970E, + 22340: 0x972A, + 22341: 0x972D, + 22342: 0x9730, + 22343: 0x973E, + 22344: 0x9F80, + 22345: 0x9F83, + 22346: 0x9F85, + 22347: 0x9F86, + 22348: 0x9F87, + 22349: 0x9F88, + 22350: 0x9F89, + 22351: 0x9F8A, + 22352: 0x9F8C, + 22353: 0x9EFE, + 22354: 0x9F0B, + 22355: 0x9F0D, + 22356: 0x96B9, + 22357: 0x96BC, + 22358: 0x96BD, + 22359: 0x96CE, + 22360: 0x96D2, + 22361: 0x77BF, + 22362: 0x96E0, + 22363: 0x928E, + 22364: 0x92AE, + 22365: 0x92C8, + 22366: 0x933E, + 22367: 0x936A, + 22368: 0x93CA, + 22369: 0x938F, + 22370: 0x943E, + 22371: 0x946B, + 22372: 0x9C7F, + 22373: 0x9C82, + 22374: 0x9C85, + 22375: 0x9C86, + 22376: 0x9C87, + 22377: 0x9C88, + 22378: 0x7A23, + 22379: 0x9C8B, + 22380: 0x9C8E, + 22381: 0x9C90, + 22382: 0x9C91, + 22383: 0x9C92, + 22384: 0x9C94, + 22385: 0x9C95, + 22386: 0x9C9A, + 22387: 0x9C9B, + 22388: 0x9C9E, + 22389: 0x9C9F, + 22390: 0x9CA0, + 22391: 0x9CA1, + 22392: 0x9CA2, + 22393: 0x9CA3, + 22394: 0x9CA5, + 22395: 0x9CA6, + 22396: 0x9CA7, + 22397: 0x9CA8, + 22398: 0x9CA9, + 22399: 0x9CAB, + 22400: 0x9CAD, + 22401: 0x9CAE, + 22402: 0x9CB0, + 22403: 0x9CB1, + 22404: 0x9CB2, + 22405: 0x9CB3, + 22406: 0x9CB4, + 22407: 0x9CB5, + 22408: 0x9CB6, + 22409: 0x9CB7, + 22410: 0x9CBA, + 22411: 0x9CBB, + 22412: 0x9CBC, + 22413: 0x9CBD, + 22414: 0x9CC4, + 22415: 0x9CC5, + 22416: 0x9CC6, + 22417: 0x9CC7, + 22418: 0x9CCA, + 22419: 0x9CCB, + 22420: 0x9C3C, + 22421: 0x9C3D, + 22422: 0x9C3E, + 22423: 0x9C3F, + 22424: 0x9C40, + 22425: 0x9C41, + 22426: 0x9C42, + 22427: 0x9C43, + 22428: 0x9C44, + 22429: 0x9C45, + 22430: 0x9C46, + 22431: 0x9C47, + 22432: 0x9C48, + 22433: 0x9C49, + 22434: 0x9C4A, + 22435: 0x9C4B, + 22436: 0x9C4C, + 22437: 0x9C4D, + 22438: 0x9C4E, + 22439: 0x9C4F, + 22440: 0x9C50, + 22441: 0x9C51, + 22442: 0x9C52, + 22443: 0x9C53, + 22444: 0x9C54, + 22445: 0x9C55, + 22446: 0x9C56, + 22447: 0x9C57, + 22448: 0x9C58, + 22449: 0x9C59, + 22450: 0x9C5A, + 22451: 0x9C5B, + 22452: 0x9C5C, + 22453: 0x9C5D, + 22454: 0x9C5E, + 22455: 0x9C5F, + 22456: 0x9C60, + 22457: 0x9C61, + 22458: 0x9C62, + 22459: 0x9C63, + 22460: 0x9C64, + 22461: 0x9C65, + 22462: 0x9C66, + 22463: 0x9C67, + 22464: 0x9C68, + 22465: 0x9C69, + 22466: 0x9C6A, + 22467: 0x9C6B, + 22468: 0x9C6C, + 22469: 0x9C6D, + 22470: 0x9C6E, + 22471: 0x9C6F, + 22472: 0x9C70, + 22473: 0x9C71, + 22474: 0x9C72, + 22475: 0x9C73, + 22476: 0x9C74, + 22477: 0x9C75, + 22478: 0x9C76, + 22479: 0x9C77, + 22480: 0x9C78, + 22481: 0x9C79, + 22482: 0x9C7A, + 22483: 0x9C7B, + 22484: 0x9C7D, + 22485: 0x9C7E, + 22486: 0x9C80, + 22487: 0x9C83, + 22488: 0x9C84, + 22489: 0x9C89, + 22490: 0x9C8A, + 22491: 0x9C8C, + 22492: 0x9C8F, + 22493: 0x9C93, + 22494: 0x9C96, + 22495: 0x9C97, + 22496: 0x9C98, + 22497: 0x9C99, + 22498: 0x9C9D, + 22499: 0x9CAA, + 22500: 0x9CAC, + 22501: 0x9CAF, + 22502: 0x9CB9, + 22503: 0x9CBE, + 22504: 0x9CBF, + 22505: 0x9CC0, + 22506: 0x9CC1, + 22507: 0x9CC2, + 22508: 0x9CC8, + 22509: 0x9CC9, + 22510: 0x9CD1, + 22511: 0x9CD2, + 22512: 0x9CDA, + 22513: 0x9CDB, + 22514: 0x9CE0, + 22515: 0x9CE1, + 22516: 0x9CCC, + 22517: 0x9CCD, + 22518: 0x9CCE, + 22519: 0x9CCF, + 22520: 0x9CD0, + 22521: 0x9CD3, + 22522: 0x9CD4, + 22523: 0x9CD5, + 22524: 0x9CD7, + 22525: 0x9CD8, + 22526: 0x9CD9, + 22527: 0x9CDC, + 22528: 0x9CDD, + 22529: 0x9CDF, + 22530: 0x9CE2, + 22531: 0x977C, + 22532: 0x9785, + 22533: 0x9791, + 22534: 0x9792, + 22535: 0x9794, + 22536: 0x97AF, + 22537: 0x97AB, + 22538: 0x97A3, + 22539: 0x97B2, + 22540: 0x97B4, + 22541: 0x9AB1, + 22542: 0x9AB0, + 22543: 0x9AB7, + 22544: 0x9E58, + 22545: 0x9AB6, + 22546: 0x9ABA, + 22547: 0x9ABC, + 22548: 0x9AC1, + 22549: 0x9AC0, + 22550: 0x9AC5, + 22551: 0x9AC2, + 22552: 0x9ACB, + 22553: 0x9ACC, + 22554: 0x9AD1, + 22555: 0x9B45, + 22556: 0x9B43, + 22557: 0x9B47, + 22558: 0x9B49, + 22559: 0x9B48, + 22560: 0x9B4D, + 22561: 0x9B51, + 22562: 0x98E8, + 22563: 0x990D, + 22564: 0x992E, + 22565: 0x9955, + 22566: 0x9954, + 22567: 0x9ADF, + 22568: 0x9AE1, + 22569: 0x9AE6, + 22570: 0x9AEF, + 22571: 0x9AEB, + 22572: 0x9AFB, + 22573: 0x9AED, + 22574: 0x9AF9, + 22575: 0x9B08, + 22576: 0x9B0F, + 22577: 0x9B13, + 22578: 0x9B1F, + 22579: 0x9B23, + 22580: 0x9EBD, + 22581: 0x9EBE, + 22582: 0x7E3B, + 22583: 0x9E82, + 22584: 0x9E87, + 22585: 0x9E88, + 22586: 0x9E8B, + 22587: 0x9E92, + 22588: 0x93D6, + 22589: 0x9E9D, + 22590: 0x9E9F, + 22591: 0x9EDB, + 22592: 0x9EDC, + 22593: 0x9EDD, + 22594: 0x9EE0, + 22595: 0x9EDF, + 22596: 0x9EE2, + 22597: 0x9EE9, + 22598: 0x9EE7, + 22599: 0x9EE5, + 22600: 0x9EEA, + 22601: 0x9EEF, + 22602: 0x9F22, + 22603: 0x9F2C, + 22604: 0x9F2F, + 22605: 0x9F39, + 22606: 0x9F37, + 22607: 0x9F3D, + 22608: 0x9F3E, + 22609: 0x9F44, + 22610: 0x9CE3, + 22611: 0x9CE4, + 22612: 0x9CE5, + 22613: 0x9CE6, + 22614: 0x9CE7, + 22615: 0x9CE8, + 22616: 0x9CE9, + 22617: 0x9CEA, + 22618: 0x9CEB, + 22619: 0x9CEC, + 22620: 0x9CED, + 22621: 0x9CEE, + 22622: 0x9CEF, + 22623: 0x9CF0, + 22624: 0x9CF1, + 22625: 0x9CF2, + 22626: 0x9CF3, + 22627: 0x9CF4, + 22628: 0x9CF5, + 22629: 0x9CF6, + 22630: 0x9CF7, + 22631: 0x9CF8, + 22632: 0x9CF9, + 22633: 0x9CFA, + 22634: 0x9CFB, + 22635: 0x9CFC, + 22636: 0x9CFD, + 22637: 0x9CFE, + 22638: 0x9CFF, + 22639: 0x9D00, + 22640: 0x9D01, + 22641: 0x9D02, + 22642: 0x9D03, + 22643: 0x9D04, + 22644: 0x9D05, + 22645: 0x9D06, + 22646: 0x9D07, + 22647: 0x9D08, + 22648: 0x9D09, + 22649: 0x9D0A, + 22650: 0x9D0B, + 22651: 0x9D0C, + 22652: 0x9D0D, + 22653: 0x9D0E, + 22654: 0x9D0F, + 22655: 0x9D10, + 22656: 0x9D11, + 22657: 0x9D12, + 22658: 0x9D13, + 22659: 0x9D14, + 22660: 0x9D15, + 22661: 0x9D16, + 22662: 0x9D17, + 22663: 0x9D18, + 22664: 0x9D19, + 22665: 0x9D1A, + 22666: 0x9D1B, + 22667: 0x9D1C, + 22668: 0x9D1D, + 22669: 0x9D1E, + 22670: 0x9D1F, + 22671: 0x9D20, + 22672: 0x9D21, + 22673: 0x9D22, + 22674: 0x9D23, + 22675: 0x9D24, + 22676: 0x9D25, + 22677: 0x9D26, + 22678: 0x9D27, + 22679: 0x9D28, + 22680: 0x9D29, + 22681: 0x9D2A, + 22682: 0x9D2B, + 22683: 0x9D2C, + 22684: 0x9D2D, + 22685: 0x9D2E, + 22686: 0x9D2F, + 22687: 0x9D30, + 22688: 0x9D31, + 22689: 0x9D32, + 22690: 0x9D33, + 22691: 0x9D34, + 22692: 0x9D35, + 22693: 0x9D36, + 22694: 0x9D37, + 22695: 0x9D38, + 22696: 0x9D39, + 22697: 0x9D3A, + 22698: 0x9D3B, + 22699: 0x9D3C, + 22700: 0x9D3D, + 22701: 0x9D3E, + 22702: 0x9D3F, + 22703: 0x9D40, + 22704: 0x9D41, + 22705: 0x9D42, + 22800: 0x9D43, + 22801: 0x9D44, + 22802: 0x9D45, + 22803: 0x9D46, + 22804: 0x9D47, + 22805: 0x9D48, + 22806: 0x9D49, + 22807: 0x9D4A, + 22808: 0x9D4B, + 22809: 0x9D4C, + 22810: 0x9D4D, + 22811: 0x9D4E, + 22812: 0x9D4F, + 22813: 0x9D50, + 22814: 0x9D51, + 22815: 0x9D52, + 22816: 0x9D53, + 22817: 0x9D54, + 22818: 0x9D55, + 22819: 0x9D56, + 22820: 0x9D57, + 22821: 0x9D58, + 22822: 0x9D59, + 22823: 0x9D5A, + 22824: 0x9D5B, + 22825: 0x9D5C, + 22826: 0x9D5D, + 22827: 0x9D5E, + 22828: 0x9D5F, + 22829: 0x9D60, + 22830: 0x9D61, + 22831: 0x9D62, + 22832: 0x9D63, + 22833: 0x9D64, + 22834: 0x9D65, + 22835: 0x9D66, + 22836: 0x9D67, + 22837: 0x9D68, + 22838: 0x9D69, + 22839: 0x9D6A, + 22840: 0x9D6B, + 22841: 0x9D6C, + 22842: 0x9D6D, + 22843: 0x9D6E, + 22844: 0x9D6F, + 22845: 0x9D70, + 22846: 0x9D71, + 22847: 0x9D72, + 22848: 0x9D73, + 22849: 0x9D74, + 22850: 0x9D75, + 22851: 0x9D76, + 22852: 0x9D77, + 22853: 0x9D78, + 22854: 0x9D79, + 22855: 0x9D7A, + 22856: 0x9D7B, + 22857: 0x9D7C, + 22858: 0x9D7D, + 22859: 0x9D7E, + 22860: 0x9D7F, + 22861: 0x9D80, + 22862: 0x9D81, + 22863: 0x9D82, + 22864: 0x9D83, + 22865: 0x9D84, + 22866: 0x9D85, + 22867: 0x9D86, + 22868: 0x9D87, + 22869: 0x9D88, + 22870: 0x9D89, + 22871: 0x9D8A, + 22872: 0x9D8B, + 22873: 0x9D8C, + 22874: 0x9D8D, + 22875: 0x9D8E, + 22876: 0x9D8F, + 22877: 0x9D90, + 22878: 0x9D91, + 22879: 0x9D92, + 22880: 0x9D93, + 22881: 0x9D94, + 22882: 0x9D95, + 22883: 0x9D96, + 22884: 0x9D97, + 22885: 0x9D98, + 22886: 0x9D99, + 22887: 0x9D9A, + 22888: 0x9D9B, + 22889: 0x9D9C, + 22890: 0x9D9D, + 22891: 0x9D9E, + 22892: 0x9D9F, + 22893: 0x9DA0, + 22894: 0x9DA1, + 22895: 0x9DA2, + 22990: 0x9DA3, + 22991: 0x9DA4, + 22992: 0x9DA5, + 22993: 0x9DA6, + 22994: 0x9DA7, + 22995: 0x9DA8, + 22996: 0x9DA9, + 22997: 0x9DAA, + 22998: 0x9DAB, + 22999: 0x9DAC, + 23000: 0x9DAD, + 23001: 0x9DAE, + 23002: 0x9DAF, + 23003: 0x9DB0, + 23004: 0x9DB1, + 23005: 0x9DB2, + 23006: 0x9DB3, + 23007: 0x9DB4, + 23008: 0x9DB5, + 23009: 0x9DB6, + 23010: 0x9DB7, + 23011: 0x9DB8, + 23012: 0x9DB9, + 23013: 0x9DBA, + 23014: 0x9DBB, + 23015: 0x9DBC, + 23016: 0x9DBD, + 23017: 0x9DBE, + 23018: 0x9DBF, + 23019: 0x9DC0, + 23020: 0x9DC1, + 23021: 0x9DC2, + 23022: 0x9DC3, + 23023: 0x9DC4, + 23024: 0x9DC5, + 23025: 0x9DC6, + 23026: 0x9DC7, + 23027: 0x9DC8, + 23028: 0x9DC9, + 23029: 0x9DCA, + 23030: 0x9DCB, + 23031: 0x9DCC, + 23032: 0x9DCD, + 23033: 0x9DCE, + 23034: 0x9DCF, + 23035: 0x9DD0, + 23036: 0x9DD1, + 23037: 0x9DD2, + 23038: 0x9DD3, + 23039: 0x9DD4, + 23040: 0x9DD5, + 23041: 0x9DD6, + 23042: 0x9DD7, + 23043: 0x9DD8, + 23044: 0x9DD9, + 23045: 0x9DDA, + 23046: 0x9DDB, + 23047: 0x9DDC, + 23048: 0x9DDD, + 23049: 0x9DDE, + 23050: 0x9DDF, + 23051: 0x9DE0, + 23052: 0x9DE1, + 23053: 0x9DE2, + 23054: 0x9DE3, + 23055: 0x9DE4, + 23056: 0x9DE5, + 23057: 0x9DE6, + 23058: 0x9DE7, + 23059: 0x9DE8, + 23060: 0x9DE9, + 23061: 0x9DEA, + 23062: 0x9DEB, + 23063: 0x9DEC, + 23064: 0x9DED, + 23065: 0x9DEE, + 23066: 0x9DEF, + 23067: 0x9DF0, + 23068: 0x9DF1, + 23069: 0x9DF2, + 23070: 0x9DF3, + 23071: 0x9DF4, + 23072: 0x9DF5, + 23073: 0x9DF6, + 23074: 0x9DF7, + 23075: 0x9DF8, + 23076: 0x9DF9, + 23077: 0x9DFA, + 23078: 0x9DFB, + 23079: 0x9DFC, + 23080: 0x9DFD, + 23081: 0x9DFE, + 23082: 0x9DFF, + 23083: 0x9E00, + 23084: 0x9E01, + 23085: 0x9E02, + 23180: 0x9E03, + 23181: 0x9E04, + 23182: 0x9E05, + 23183: 0x9E06, + 23184: 0x9E07, + 23185: 0x9E08, + 23186: 0x9E09, + 23187: 0x9E0A, + 23188: 0x9E0B, + 23189: 0x9E0C, + 23190: 0x9E0D, + 23191: 0x9E0E, + 23192: 0x9E0F, + 23193: 0x9E10, + 23194: 0x9E11, + 23195: 0x9E12, + 23196: 0x9E13, + 23197: 0x9E14, + 23198: 0x9E15, + 23199: 0x9E16, + 23200: 0x9E17, + 23201: 0x9E18, + 23202: 0x9E19, + 23203: 0x9E1A, + 23204: 0x9E1B, + 23205: 0x9E1C, + 23206: 0x9E1D, + 23207: 0x9E1E, + 23208: 0x9E24, + 23209: 0x9E27, + 23210: 0x9E2E, + 23211: 0x9E30, + 23212: 0x9E34, + 23213: 0x9E3B, + 23214: 0x9E3C, + 23215: 0x9E40, + 23216: 0x9E4D, + 23217: 0x9E50, + 23218: 0x9E52, + 23219: 0x9E53, + 23220: 0x9E54, + 23221: 0x9E56, + 23222: 0x9E59, + 23223: 0x9E5D, + 23224: 0x9E5F, + 23225: 0x9E60, + 23226: 0x9E61, + 23227: 0x9E62, + 23228: 0x9E65, + 23229: 0x9E6E, + 23230: 0x9E6F, + 23231: 0x9E72, + 23232: 0x9E74, + 23233: 0x9E75, + 23234: 0x9E76, + 23235: 0x9E77, + 23236: 0x9E78, + 23237: 0x9E79, + 23238: 0x9E7A, + 23239: 0x9E7B, + 23240: 0x9E7C, + 23241: 0x9E7D, + 23242: 0x9E80, + 23243: 0x9E81, + 23244: 0x9E83, + 23245: 0x9E84, + 23246: 0x9E85, + 23247: 0x9E86, + 23248: 0x9E89, + 23249: 0x9E8A, + 23250: 0x9E8C, + 23251: 0x9E8D, + 23252: 0x9E8E, + 23253: 0x9E8F, + 23254: 0x9E90, + 23255: 0x9E91, + 23256: 0x9E94, + 23257: 0x9E95, + 23258: 0x9E96, + 23259: 0x9E97, + 23260: 0x9E98, + 23261: 0x9E99, + 23262: 0x9E9A, + 23263: 0x9E9B, + 23264: 0x9E9C, + 23265: 0x9E9E, + 23266: 0x9EA0, + 23267: 0x9EA1, + 23268: 0x9EA2, + 23269: 0x9EA3, + 23270: 0x9EA4, + 23271: 0x9EA5, + 23272: 0x9EA7, + 23273: 0x9EA8, + 23274: 0x9EA9, + 23275: 0x9EAA, + 23370: 0x9EAB, + 23371: 0x9EAC, + 23372: 0x9EAD, + 23373: 0x9EAE, + 23374: 0x9EAF, + 23375: 0x9EB0, + 23376: 0x9EB1, + 23377: 0x9EB2, + 23378: 0x9EB3, + 23379: 0x9EB5, + 23380: 0x9EB6, + 23381: 0x9EB7, + 23382: 0x9EB9, + 23383: 0x9EBA, + 23384: 0x9EBC, + 23385: 0x9EBF, + 23386: 0x9EC0, + 23387: 0x9EC1, + 23388: 0x9EC2, + 23389: 0x9EC3, + 23390: 0x9EC5, + 23391: 0x9EC6, + 23392: 0x9EC7, + 23393: 0x9EC8, + 23394: 0x9ECA, + 23395: 0x9ECB, + 23396: 0x9ECC, + 23397: 0x9ED0, + 23398: 0x9ED2, + 23399: 0x9ED3, + 23400: 0x9ED5, + 23401: 0x9ED6, + 23402: 0x9ED7, + 23403: 0x9ED9, + 23404: 0x9EDA, + 23405: 0x9EDE, + 23406: 0x9EE1, + 23407: 0x9EE3, + 23408: 0x9EE4, + 23409: 0x9EE6, + 23410: 0x9EE8, + 23411: 0x9EEB, + 23412: 0x9EEC, + 23413: 0x9EED, + 23414: 0x9EEE, + 23415: 0x9EF0, + 23416: 0x9EF1, + 23417: 0x9EF2, + 23418: 0x9EF3, + 23419: 0x9EF4, + 23420: 0x9EF5, + 23421: 0x9EF6, + 23422: 0x9EF7, + 23423: 0x9EF8, + 23424: 0x9EFA, + 23425: 0x9EFD, + 23426: 0x9EFF, + 23427: 0x9F00, + 23428: 0x9F01, + 23429: 0x9F02, + 23430: 0x9F03, + 23431: 0x9F04, + 23432: 0x9F05, + 23433: 0x9F06, + 23434: 0x9F07, + 23435: 0x9F08, + 23436: 0x9F09, + 23437: 0x9F0A, + 23438: 0x9F0C, + 23439: 0x9F0F, + 23440: 0x9F11, + 23441: 0x9F12, + 23442: 0x9F14, + 23443: 0x9F15, + 23444: 0x9F16, + 23445: 0x9F18, + 23446: 0x9F1A, + 23447: 0x9F1B, + 23448: 0x9F1C, + 23449: 0x9F1D, + 23450: 0x9F1E, + 23451: 0x9F1F, + 23452: 0x9F21, + 23453: 0x9F23, + 23454: 0x9F24, + 23455: 0x9F25, + 23456: 0x9F26, + 23457: 0x9F27, + 23458: 0x9F28, + 23459: 0x9F29, + 23460: 0x9F2A, + 23461: 0x9F2B, + 23462: 0x9F2D, + 23463: 0x9F2E, + 23464: 0x9F30, + 23465: 0x9F31, + 23560: 0x9F32, + 23561: 0x9F33, + 23562: 0x9F34, + 23563: 0x9F35, + 23564: 0x9F36, + 23565: 0x9F38, + 23566: 0x9F3A, + 23567: 0x9F3C, + 23568: 0x9F3F, + 23569: 0x9F40, + 23570: 0x9F41, + 23571: 0x9F42, + 23572: 0x9F43, + 23573: 0x9F45, + 23574: 0x9F46, + 23575: 0x9F47, + 23576: 0x9F48, + 23577: 0x9F49, + 23578: 0x9F4A, + 23579: 0x9F4B, + 23580: 0x9F4C, + 23581: 0x9F4D, + 23582: 0x9F4E, + 23583: 0x9F4F, + 23584: 0x9F52, + 23585: 0x9F53, + 23586: 0x9F54, + 23587: 0x9F55, + 23588: 0x9F56, + 23589: 0x9F57, + 23590: 0x9F58, + 23591: 0x9F59, + 23592: 0x9F5A, + 23593: 0x9F5B, + 23594: 0x9F5C, + 23595: 0x9F5D, + 23596: 0x9F5E, + 23597: 0x9F5F, + 23598: 0x9F60, + 23599: 0x9F61, + 23600: 0x9F62, + 23601: 0x9F63, + 23602: 0x9F64, + 23603: 0x9F65, + 23604: 0x9F66, + 23605: 0x9F67, + 23606: 0x9F68, + 23607: 0x9F69, + 23608: 0x9F6A, + 23609: 0x9F6B, + 23610: 0x9F6C, + 23611: 0x9F6D, + 23612: 0x9F6E, + 23613: 0x9F6F, + 23614: 0x9F70, + 23615: 0x9F71, + 23616: 0x9F72, + 23617: 0x9F73, + 23618: 0x9F74, + 23619: 0x9F75, + 23620: 0x9F76, + 23621: 0x9F77, + 23622: 0x9F78, + 23623: 0x9F79, + 23624: 0x9F7A, + 23625: 0x9F7B, + 23626: 0x9F7C, + 23627: 0x9F7D, + 23628: 0x9F7E, + 23629: 0x9F81, + 23630: 0x9F82, + 23631: 0x9F8D, + 23632: 0x9F8E, + 23633: 0x9F8F, + 23634: 0x9F90, + 23635: 0x9F91, + 23636: 0x9F92, + 23637: 0x9F93, + 23638: 0x9F94, + 23639: 0x9F95, + 23640: 0x9F96, + 23641: 0x9F97, + 23642: 0x9F98, + 23643: 0x9F9C, + 23644: 0x9F9D, + 23645: 0x9F9E, + 23646: 0x9FA1, + 23647: 0x9FA2, + 23648: 0x9FA3, + 23649: 0x9FA4, + 23650: 0x9FA5, + 23651: 0xF92C, + 23652: 0xF979, + 23653: 0xF995, + 23654: 0xF9E7, + 23655: 0xF9F1, + 23750: 0xFA0C, + 23751: 0xFA0D, + 23752: 0xFA0E, + 23753: 0xFA0F, + 23754: 0xFA11, + 23755: 0xFA13, + 23756: 0xFA14, + 23757: 0xFA18, + 23758: 0xFA1F, + 23759: 0xFA20, + 23760: 0xFA21, + 23761: 0xFA23, + 23762: 0xFA24, + 23763: 0xFA27, + 23764: 0xFA28, + 23765: 0xFA29, + 23766: 0x2E81, + 23770: 0x2E84, + 23771: 0x3473, + 23772: 0x3447, + 23773: 0x2E88, + 23774: 0x2E8B, + 23776: 0x359E, + 23777: 0x361A, + 23778: 0x360E, + 23779: 0x2E8C, + 23780: 0x2E97, + 23781: 0x396E, + 23782: 0x3918, + 23784: 0x39CF, + 23785: 0x39DF, + 23786: 0x3A73, + 23787: 0x39D0, + 23790: 0x3B4E, + 23791: 0x3C6E, + 23792: 0x3CE0, + 23793: 0x2EA7, + 23796: 0x2EAA, + 23797: 0x4056, + 23798: 0x415F, + 23799: 0x2EAE, + 23800: 0x4337, + 23801: 0x2EB3, + 23802: 0x2EB6, + 23803: 0x2EB7, + 23805: 0x43B1, + 23806: 0x43AC, + 23807: 0x2EBB, + 23808: 0x43DD, + 23809: 0x44D6, + 23810: 0x4661, + 23811: 0x464C, + 23813: 0x4723, + 23814: 0x4729, + 23815: 0x477C, + 23816: 0x478D, + 23817: 0x2ECA, + 23818: 0x4947, + 23819: 0x497A, + 23820: 0x497D, + 23821: 0x4982, + 23822: 0x4983, + 23823: 0x4985, + 23824: 0x4986, + 23825: 0x499F, + 23826: 0x499B, + 23827: 0x49B7, + 23828: 0x49B6, + 23831: 0x4CA3, + 23832: 0x4C9F, + 23833: 0x4CA0, + 23834: 0x4CA1, + 23835: 0x4C77, + 23836: 0x4CA2, + 23837: 0x4D13, + 23838: 0x4D14, + 23839: 0x4D15, + 23840: 0x4D16, + 23841: 0x4D17, + 23842: 0x4D18, + 23843: 0x4D19, + 23844: 0x4DAE, +} + +const numEncodeTables = 5 + +// encodeX are the encoding tables from Unicode to GBK code, +// sorted by decreasing length. +// encode0: 28965 entries for runes in [11905, 40870). +// encode1: 1587 entries for runes in [ 8208, 9795). +// encode2: 942 entries for runes in [ 164, 1106). +// encode3: 438 entries for runes in [65072, 65510). +// encode4: 254 entries for runes in [63788, 64042). + +const encode0Low, encode0High = 11905, 40870 + +var encode0 = [...]uint16{ + 11905 - 11905: 0xFE50, + 11908 - 11905: 0xFE54, + 11912 - 11905: 0xFE57, + 11915 - 11905: 0xFE58, + 11916 - 11905: 0xFE5D, + 11927 - 11905: 0xFE5E, + 11943 - 11905: 0xFE6B, + 11946 - 11905: 0xFE6E, + 11950 - 11905: 0xFE71, + 11955 - 11905: 0xFE73, + 11958 - 11905: 0xFE74, + 11959 - 11905: 0xFE75, + 11963 - 11905: 0xFE79, + 11978 - 11905: 0xFE84, + 12272 - 11905: 0xA98A, + 12273 - 11905: 0xA98B, + 12274 - 11905: 0xA98C, + 12275 - 11905: 0xA98D, + 12276 - 11905: 0xA98E, + 12277 - 11905: 0xA98F, + 12278 - 11905: 0xA990, + 12279 - 11905: 0xA991, + 12280 - 11905: 0xA992, + 12281 - 11905: 0xA993, + 12282 - 11905: 0xA994, + 12283 - 11905: 0xA995, + 12288 - 11905: 0xA1A1, + 12289 - 11905: 0xA1A2, + 12290 - 11905: 0xA1A3, + 12291 - 11905: 0xA1A8, + 12293 - 11905: 0xA1A9, + 12294 - 11905: 0xA965, + 12295 - 11905: 0xA996, + 12296 - 11905: 0xA1B4, + 12297 - 11905: 0xA1B5, + 12298 - 11905: 0xA1B6, + 12299 - 11905: 0xA1B7, + 12300 - 11905: 0xA1B8, + 12301 - 11905: 0xA1B9, + 12302 - 11905: 0xA1BA, + 12303 - 11905: 0xA1BB, + 12304 - 11905: 0xA1BE, + 12305 - 11905: 0xA1BF, + 12306 - 11905: 0xA893, + 12307 - 11905: 0xA1FE, + 12308 - 11905: 0xA1B2, + 12309 - 11905: 0xA1B3, + 12310 - 11905: 0xA1BC, + 12311 - 11905: 0xA1BD, + 12317 - 11905: 0xA894, + 12318 - 11905: 0xA895, + 12321 - 11905: 0xA940, + 12322 - 11905: 0xA941, + 12323 - 11905: 0xA942, + 12324 - 11905: 0xA943, + 12325 - 11905: 0xA944, + 12326 - 11905: 0xA945, + 12327 - 11905: 0xA946, + 12328 - 11905: 0xA947, + 12329 - 11905: 0xA948, + 12350 - 11905: 0xA989, + 12353 - 11905: 0xA4A1, + 12354 - 11905: 0xA4A2, + 12355 - 11905: 0xA4A3, + 12356 - 11905: 0xA4A4, + 12357 - 11905: 0xA4A5, + 12358 - 11905: 0xA4A6, + 12359 - 11905: 0xA4A7, + 12360 - 11905: 0xA4A8, + 12361 - 11905: 0xA4A9, + 12362 - 11905: 0xA4AA, + 12363 - 11905: 0xA4AB, + 12364 - 11905: 0xA4AC, + 12365 - 11905: 0xA4AD, + 12366 - 11905: 0xA4AE, + 12367 - 11905: 0xA4AF, + 12368 - 11905: 0xA4B0, + 12369 - 11905: 0xA4B1, + 12370 - 11905: 0xA4B2, + 12371 - 11905: 0xA4B3, + 12372 - 11905: 0xA4B4, + 12373 - 11905: 0xA4B5, + 12374 - 11905: 0xA4B6, + 12375 - 11905: 0xA4B7, + 12376 - 11905: 0xA4B8, + 12377 - 11905: 0xA4B9, + 12378 - 11905: 0xA4BA, + 12379 - 11905: 0xA4BB, + 12380 - 11905: 0xA4BC, + 12381 - 11905: 0xA4BD, + 12382 - 11905: 0xA4BE, + 12383 - 11905: 0xA4BF, + 12384 - 11905: 0xA4C0, + 12385 - 11905: 0xA4C1, + 12386 - 11905: 0xA4C2, + 12387 - 11905: 0xA4C3, + 12388 - 11905: 0xA4C4, + 12389 - 11905: 0xA4C5, + 12390 - 11905: 0xA4C6, + 12391 - 11905: 0xA4C7, + 12392 - 11905: 0xA4C8, + 12393 - 11905: 0xA4C9, + 12394 - 11905: 0xA4CA, + 12395 - 11905: 0xA4CB, + 12396 - 11905: 0xA4CC, + 12397 - 11905: 0xA4CD, + 12398 - 11905: 0xA4CE, + 12399 - 11905: 0xA4CF, + 12400 - 11905: 0xA4D0, + 12401 - 11905: 0xA4D1, + 12402 - 11905: 0xA4D2, + 12403 - 11905: 0xA4D3, + 12404 - 11905: 0xA4D4, + 12405 - 11905: 0xA4D5, + 12406 - 11905: 0xA4D6, + 12407 - 11905: 0xA4D7, + 12408 - 11905: 0xA4D8, + 12409 - 11905: 0xA4D9, + 12410 - 11905: 0xA4DA, + 12411 - 11905: 0xA4DB, + 12412 - 11905: 0xA4DC, + 12413 - 11905: 0xA4DD, + 12414 - 11905: 0xA4DE, + 12415 - 11905: 0xA4DF, + 12416 - 11905: 0xA4E0, + 12417 - 11905: 0xA4E1, + 12418 - 11905: 0xA4E2, + 12419 - 11905: 0xA4E3, + 12420 - 11905: 0xA4E4, + 12421 - 11905: 0xA4E5, + 12422 - 11905: 0xA4E6, + 12423 - 11905: 0xA4E7, + 12424 - 11905: 0xA4E8, + 12425 - 11905: 0xA4E9, + 12426 - 11905: 0xA4EA, + 12427 - 11905: 0xA4EB, + 12428 - 11905: 0xA4EC, + 12429 - 11905: 0xA4ED, + 12430 - 11905: 0xA4EE, + 12431 - 11905: 0xA4EF, + 12432 - 11905: 0xA4F0, + 12433 - 11905: 0xA4F1, + 12434 - 11905: 0xA4F2, + 12435 - 11905: 0xA4F3, + 12443 - 11905: 0xA961, + 12444 - 11905: 0xA962, + 12445 - 11905: 0xA966, + 12446 - 11905: 0xA967, + 12449 - 11905: 0xA5A1, + 12450 - 11905: 0xA5A2, + 12451 - 11905: 0xA5A3, + 12452 - 11905: 0xA5A4, + 12453 - 11905: 0xA5A5, + 12454 - 11905: 0xA5A6, + 12455 - 11905: 0xA5A7, + 12456 - 11905: 0xA5A8, + 12457 - 11905: 0xA5A9, + 12458 - 11905: 0xA5AA, + 12459 - 11905: 0xA5AB, + 12460 - 11905: 0xA5AC, + 12461 - 11905: 0xA5AD, + 12462 - 11905: 0xA5AE, + 12463 - 11905: 0xA5AF, + 12464 - 11905: 0xA5B0, + 12465 - 11905: 0xA5B1, + 12466 - 11905: 0xA5B2, + 12467 - 11905: 0xA5B3, + 12468 - 11905: 0xA5B4, + 12469 - 11905: 0xA5B5, + 12470 - 11905: 0xA5B6, + 12471 - 11905: 0xA5B7, + 12472 - 11905: 0xA5B8, + 12473 - 11905: 0xA5B9, + 12474 - 11905: 0xA5BA, + 12475 - 11905: 0xA5BB, + 12476 - 11905: 0xA5BC, + 12477 - 11905: 0xA5BD, + 12478 - 11905: 0xA5BE, + 12479 - 11905: 0xA5BF, + 12480 - 11905: 0xA5C0, + 12481 - 11905: 0xA5C1, + 12482 - 11905: 0xA5C2, + 12483 - 11905: 0xA5C3, + 12484 - 11905: 0xA5C4, + 12485 - 11905: 0xA5C5, + 12486 - 11905: 0xA5C6, + 12487 - 11905: 0xA5C7, + 12488 - 11905: 0xA5C8, + 12489 - 11905: 0xA5C9, + 12490 - 11905: 0xA5CA, + 12491 - 11905: 0xA5CB, + 12492 - 11905: 0xA5CC, + 12493 - 11905: 0xA5CD, + 12494 - 11905: 0xA5CE, + 12495 - 11905: 0xA5CF, + 12496 - 11905: 0xA5D0, + 12497 - 11905: 0xA5D1, + 12498 - 11905: 0xA5D2, + 12499 - 11905: 0xA5D3, + 12500 - 11905: 0xA5D4, + 12501 - 11905: 0xA5D5, + 12502 - 11905: 0xA5D6, + 12503 - 11905: 0xA5D7, + 12504 - 11905: 0xA5D8, + 12505 - 11905: 0xA5D9, + 12506 - 11905: 0xA5DA, + 12507 - 11905: 0xA5DB, + 12508 - 11905: 0xA5DC, + 12509 - 11905: 0xA5DD, + 12510 - 11905: 0xA5DE, + 12511 - 11905: 0xA5DF, + 12512 - 11905: 0xA5E0, + 12513 - 11905: 0xA5E1, + 12514 - 11905: 0xA5E2, + 12515 - 11905: 0xA5E3, + 12516 - 11905: 0xA5E4, + 12517 - 11905: 0xA5E5, + 12518 - 11905: 0xA5E6, + 12519 - 11905: 0xA5E7, + 12520 - 11905: 0xA5E8, + 12521 - 11905: 0xA5E9, + 12522 - 11905: 0xA5EA, + 12523 - 11905: 0xA5EB, + 12524 - 11905: 0xA5EC, + 12525 - 11905: 0xA5ED, + 12526 - 11905: 0xA5EE, + 12527 - 11905: 0xA5EF, + 12528 - 11905: 0xA5F0, + 12529 - 11905: 0xA5F1, + 12530 - 11905: 0xA5F2, + 12531 - 11905: 0xA5F3, + 12532 - 11905: 0xA5F4, + 12533 - 11905: 0xA5F5, + 12534 - 11905: 0xA5F6, + 12540 - 11905: 0xA960, + 12541 - 11905: 0xA963, + 12542 - 11905: 0xA964, + 12549 - 11905: 0xA8C5, + 12550 - 11905: 0xA8C6, + 12551 - 11905: 0xA8C7, + 12552 - 11905: 0xA8C8, + 12553 - 11905: 0xA8C9, + 12554 - 11905: 0xA8CA, + 12555 - 11905: 0xA8CB, + 12556 - 11905: 0xA8CC, + 12557 - 11905: 0xA8CD, + 12558 - 11905: 0xA8CE, + 12559 - 11905: 0xA8CF, + 12560 - 11905: 0xA8D0, + 12561 - 11905: 0xA8D1, + 12562 - 11905: 0xA8D2, + 12563 - 11905: 0xA8D3, + 12564 - 11905: 0xA8D4, + 12565 - 11905: 0xA8D5, + 12566 - 11905: 0xA8D6, + 12567 - 11905: 0xA8D7, + 12568 - 11905: 0xA8D8, + 12569 - 11905: 0xA8D9, + 12570 - 11905: 0xA8DA, + 12571 - 11905: 0xA8DB, + 12572 - 11905: 0xA8DC, + 12573 - 11905: 0xA8DD, + 12574 - 11905: 0xA8DE, + 12575 - 11905: 0xA8DF, + 12576 - 11905: 0xA8E0, + 12577 - 11905: 0xA8E1, + 12578 - 11905: 0xA8E2, + 12579 - 11905: 0xA8E3, + 12580 - 11905: 0xA8E4, + 12581 - 11905: 0xA8E5, + 12582 - 11905: 0xA8E6, + 12583 - 11905: 0xA8E7, + 12584 - 11905: 0xA8E8, + 12585 - 11905: 0xA8E9, + 12832 - 11905: 0xA2E5, + 12833 - 11905: 0xA2E6, + 12834 - 11905: 0xA2E7, + 12835 - 11905: 0xA2E8, + 12836 - 11905: 0xA2E9, + 12837 - 11905: 0xA2EA, + 12838 - 11905: 0xA2EB, + 12839 - 11905: 0xA2EC, + 12840 - 11905: 0xA2ED, + 12841 - 11905: 0xA2EE, + 12849 - 11905: 0xA95A, + 12963 - 11905: 0xA949, + 13198 - 11905: 0xA94A, + 13199 - 11905: 0xA94B, + 13212 - 11905: 0xA94C, + 13213 - 11905: 0xA94D, + 13214 - 11905: 0xA94E, + 13217 - 11905: 0xA94F, + 13252 - 11905: 0xA950, + 13262 - 11905: 0xA951, + 13265 - 11905: 0xA952, + 13266 - 11905: 0xA953, + 13269 - 11905: 0xA954, + 13383 - 11905: 0xFE56, + 13427 - 11905: 0xFE55, + 13726 - 11905: 0xFE5A, + 13838 - 11905: 0xFE5C, + 13850 - 11905: 0xFE5B, + 14616 - 11905: 0xFE60, + 14702 - 11905: 0xFE5F, + 14799 - 11905: 0xFE62, + 14800 - 11905: 0xFE65, + 14815 - 11905: 0xFE63, + 14963 - 11905: 0xFE64, + 15182 - 11905: 0xFE68, + 15470 - 11905: 0xFE69, + 15584 - 11905: 0xFE6A, + 16470 - 11905: 0xFE6F, + 16735 - 11905: 0xFE70, + 17207 - 11905: 0xFE72, + 17324 - 11905: 0xFE78, + 17329 - 11905: 0xFE77, + 17373 - 11905: 0xFE7A, + 17622 - 11905: 0xFE7B, + 17996 - 11905: 0xFE7D, + 18017 - 11905: 0xFE7C, + 18211 - 11905: 0xFE80, + 18217 - 11905: 0xFE81, + 18300 - 11905: 0xFE82, + 18317 - 11905: 0xFE83, + 18759 - 11905: 0xFE85, + 18810 - 11905: 0xFE86, + 18813 - 11905: 0xFE87, + 18818 - 11905: 0xFE88, + 18819 - 11905: 0xFE89, + 18821 - 11905: 0xFE8A, + 18822 - 11905: 0xFE8B, + 18843 - 11905: 0xFE8D, + 18847 - 11905: 0xFE8C, + 18870 - 11905: 0xFE8F, + 18871 - 11905: 0xFE8E, + 19575 - 11905: 0xFE96, + 19615 - 11905: 0xFE93, + 19616 - 11905: 0xFE94, + 19617 - 11905: 0xFE95, + 19618 - 11905: 0xFE97, + 19619 - 11905: 0xFE92, + 19731 - 11905: 0xFE98, + 19732 - 11905: 0xFE99, + 19733 - 11905: 0xFE9A, + 19734 - 11905: 0xFE9B, + 19735 - 11905: 0xFE9C, + 19736 - 11905: 0xFE9D, + 19737 - 11905: 0xFE9E, + 19886 - 11905: 0xFE9F, + 19968 - 11905: 0xD2BB, + 19969 - 11905: 0xB6A1, + 19970 - 11905: 0x8140, + 19971 - 11905: 0xC6DF, + 19972 - 11905: 0x8141, + 19973 - 11905: 0x8142, + 19974 - 11905: 0x8143, + 19975 - 11905: 0xCDF2, + 19976 - 11905: 0xD5C9, + 19977 - 11905: 0xC8FD, + 19978 - 11905: 0xC9CF, + 19979 - 11905: 0xCFC2, + 19980 - 11905: 0xD8A2, + 19981 - 11905: 0xB2BB, + 19982 - 11905: 0xD3EB, + 19983 - 11905: 0x8144, + 19984 - 11905: 0xD8A4, + 19985 - 11905: 0xB3F3, + 19986 - 11905: 0x8145, + 19987 - 11905: 0xD7A8, + 19988 - 11905: 0xC7D2, + 19989 - 11905: 0xD8A7, + 19990 - 11905: 0xCAC0, + 19991 - 11905: 0x8146, + 19992 - 11905: 0xC7F0, + 19993 - 11905: 0xB1FB, + 19994 - 11905: 0xD2B5, + 19995 - 11905: 0xB4D4, + 19996 - 11905: 0xB6AB, + 19997 - 11905: 0xCBBF, + 19998 - 11905: 0xD8A9, + 19999 - 11905: 0x8147, + 20000 - 11905: 0x8148, + 20001 - 11905: 0x8149, + 20002 - 11905: 0xB6AA, + 20003 - 11905: 0x814A, + 20004 - 11905: 0xC1BD, + 20005 - 11905: 0xD1CF, + 20006 - 11905: 0x814B, + 20007 - 11905: 0xC9A5, + 20008 - 11905: 0xD8AD, + 20009 - 11905: 0x814C, + 20010 - 11905: 0xB8F6, + 20011 - 11905: 0xD1BE, + 20012 - 11905: 0xE3DC, + 20013 - 11905: 0xD6D0, + 20014 - 11905: 0x814D, + 20015 - 11905: 0x814E, + 20016 - 11905: 0xB7E1, + 20017 - 11905: 0x814F, + 20018 - 11905: 0xB4AE, + 20019 - 11905: 0x8150, + 20020 - 11905: 0xC1D9, + 20021 - 11905: 0x8151, + 20022 - 11905: 0xD8BC, + 20023 - 11905: 0x8152, + 20024 - 11905: 0xCDE8, + 20025 - 11905: 0xB5A4, + 20026 - 11905: 0xCEAA, + 20027 - 11905: 0xD6F7, + 20028 - 11905: 0x8153, + 20029 - 11905: 0xC0F6, + 20030 - 11905: 0xBED9, + 20031 - 11905: 0xD8AF, + 20032 - 11905: 0x8154, + 20033 - 11905: 0x8155, + 20034 - 11905: 0x8156, + 20035 - 11905: 0xC4CB, + 20036 - 11905: 0x8157, + 20037 - 11905: 0xBEC3, + 20038 - 11905: 0x8158, + 20039 - 11905: 0xD8B1, + 20040 - 11905: 0xC3B4, + 20041 - 11905: 0xD2E5, + 20042 - 11905: 0x8159, + 20043 - 11905: 0xD6AE, + 20044 - 11905: 0xCEDA, + 20045 - 11905: 0xD5A7, + 20046 - 11905: 0xBAF5, + 20047 - 11905: 0xB7A6, + 20048 - 11905: 0xC0D6, + 20049 - 11905: 0x815A, + 20050 - 11905: 0xC6B9, + 20051 - 11905: 0xC5D2, + 20052 - 11905: 0xC7C7, + 20053 - 11905: 0x815B, + 20054 - 11905: 0xB9D4, + 20055 - 11905: 0x815C, + 20056 - 11905: 0xB3CB, + 20057 - 11905: 0xD2D2, + 20058 - 11905: 0x815D, + 20059 - 11905: 0x815E, + 20060 - 11905: 0xD8BF, + 20061 - 11905: 0xBEC5, + 20062 - 11905: 0xC6F2, + 20063 - 11905: 0xD2B2, + 20064 - 11905: 0xCFB0, + 20065 - 11905: 0xCFE7, + 20066 - 11905: 0x815F, + 20067 - 11905: 0x8160, + 20068 - 11905: 0x8161, + 20069 - 11905: 0x8162, + 20070 - 11905: 0xCAE9, + 20071 - 11905: 0x8163, + 20072 - 11905: 0x8164, + 20073 - 11905: 0xD8C0, + 20074 - 11905: 0x8165, + 20075 - 11905: 0x8166, + 20076 - 11905: 0x8167, + 20077 - 11905: 0x8168, + 20078 - 11905: 0x8169, + 20079 - 11905: 0x816A, + 20080 - 11905: 0xC2F2, + 20081 - 11905: 0xC2D2, + 20082 - 11905: 0x816B, + 20083 - 11905: 0xC8E9, + 20084 - 11905: 0x816C, + 20085 - 11905: 0x816D, + 20086 - 11905: 0x816E, + 20087 - 11905: 0x816F, + 20088 - 11905: 0x8170, + 20089 - 11905: 0x8171, + 20090 - 11905: 0x8172, + 20091 - 11905: 0x8173, + 20092 - 11905: 0x8174, + 20093 - 11905: 0x8175, + 20094 - 11905: 0xC7AC, + 20095 - 11905: 0x8176, + 20096 - 11905: 0x8177, + 20097 - 11905: 0x8178, + 20098 - 11905: 0x8179, + 20099 - 11905: 0x817A, + 20100 - 11905: 0x817B, + 20101 - 11905: 0x817C, + 20102 - 11905: 0xC1CB, + 20103 - 11905: 0x817D, + 20104 - 11905: 0xD3E8, + 20105 - 11905: 0xD5F9, + 20106 - 11905: 0x817E, + 20107 - 11905: 0xCAC2, + 20108 - 11905: 0xB6FE, + 20109 - 11905: 0xD8A1, + 20110 - 11905: 0xD3DA, + 20111 - 11905: 0xBFF7, + 20112 - 11905: 0x8180, + 20113 - 11905: 0xD4C6, + 20114 - 11905: 0xBBA5, + 20115 - 11905: 0xD8C1, + 20116 - 11905: 0xCEE5, + 20117 - 11905: 0xBEAE, + 20118 - 11905: 0x8181, + 20119 - 11905: 0x8182, + 20120 - 11905: 0xD8A8, + 20121 - 11905: 0x8183, + 20122 - 11905: 0xD1C7, + 20123 - 11905: 0xD0A9, + 20124 - 11905: 0x8184, + 20125 - 11905: 0x8185, + 20126 - 11905: 0x8186, + 20127 - 11905: 0xD8BD, + 20128 - 11905: 0xD9EF, + 20129 - 11905: 0xCDF6, + 20130 - 11905: 0xBFBA, + 20131 - 11905: 0x8187, + 20132 - 11905: 0xBDBB, + 20133 - 11905: 0xBAA5, + 20134 - 11905: 0xD2E0, + 20135 - 11905: 0xB2FA, + 20136 - 11905: 0xBAE0, + 20137 - 11905: 0xC4B6, + 20138 - 11905: 0x8188, + 20139 - 11905: 0xCFED, + 20140 - 11905: 0xBEA9, + 20141 - 11905: 0xCDA4, + 20142 - 11905: 0xC1C1, + 20143 - 11905: 0x8189, + 20144 - 11905: 0x818A, + 20145 - 11905: 0x818B, + 20146 - 11905: 0xC7D7, + 20147 - 11905: 0xD9F1, + 20148 - 11905: 0x818C, + 20149 - 11905: 0xD9F4, + 20150 - 11905: 0x818D, + 20151 - 11905: 0x818E, + 20152 - 11905: 0x818F, + 20153 - 11905: 0x8190, + 20154 - 11905: 0xC8CB, + 20155 - 11905: 0xD8E9, + 20156 - 11905: 0x8191, + 20157 - 11905: 0x8192, + 20158 - 11905: 0x8193, + 20159 - 11905: 0xD2DA, + 20160 - 11905: 0xCAB2, + 20161 - 11905: 0xC8CA, + 20162 - 11905: 0xD8EC, + 20163 - 11905: 0xD8EA, + 20164 - 11905: 0xD8C6, + 20165 - 11905: 0xBDF6, + 20166 - 11905: 0xC6CD, + 20167 - 11905: 0xB3F0, + 20168 - 11905: 0x8194, + 20169 - 11905: 0xD8EB, + 20170 - 11905: 0xBDF1, + 20171 - 11905: 0xBDE9, + 20172 - 11905: 0x8195, + 20173 - 11905: 0xC8D4, + 20174 - 11905: 0xB4D3, + 20175 - 11905: 0x8196, + 20176 - 11905: 0x8197, + 20177 - 11905: 0xC2D8, + 20178 - 11905: 0x8198, + 20179 - 11905: 0xB2D6, + 20180 - 11905: 0xD7D0, + 20181 - 11905: 0xCACB, + 20182 - 11905: 0xCBFB, + 20183 - 11905: 0xD5CC, + 20184 - 11905: 0xB8B6, + 20185 - 11905: 0xCFC9, + 20186 - 11905: 0x8199, + 20187 - 11905: 0x819A, + 20188 - 11905: 0x819B, + 20189 - 11905: 0xD9DA, + 20190 - 11905: 0xD8F0, + 20191 - 11905: 0xC7AA, + 20192 - 11905: 0x819C, + 20193 - 11905: 0xD8EE, + 20194 - 11905: 0x819D, + 20195 - 11905: 0xB4FA, + 20196 - 11905: 0xC1EE, + 20197 - 11905: 0xD2D4, + 20198 - 11905: 0x819E, + 20199 - 11905: 0x819F, + 20200 - 11905: 0xD8ED, + 20201 - 11905: 0x81A0, + 20202 - 11905: 0xD2C7, + 20203 - 11905: 0xD8EF, + 20204 - 11905: 0xC3C7, + 20205 - 11905: 0x81A1, + 20206 - 11905: 0x81A2, + 20207 - 11905: 0x81A3, + 20208 - 11905: 0xD1F6, + 20209 - 11905: 0x81A4, + 20210 - 11905: 0xD6D9, + 20211 - 11905: 0xD8F2, + 20212 - 11905: 0x81A5, + 20213 - 11905: 0xD8F5, + 20214 - 11905: 0xBCFE, + 20215 - 11905: 0xBCDB, + 20216 - 11905: 0x81A6, + 20217 - 11905: 0x81A7, + 20218 - 11905: 0x81A8, + 20219 - 11905: 0xC8CE, + 20220 - 11905: 0x81A9, + 20221 - 11905: 0xB7DD, + 20222 - 11905: 0x81AA, + 20223 - 11905: 0xB7C2, + 20224 - 11905: 0x81AB, + 20225 - 11905: 0xC6F3, + 20226 - 11905: 0x81AC, + 20227 - 11905: 0x81AD, + 20228 - 11905: 0x81AE, + 20229 - 11905: 0x81AF, + 20230 - 11905: 0x81B0, + 20231 - 11905: 0x81B1, + 20232 - 11905: 0x81B2, + 20233 - 11905: 0xD8F8, + 20234 - 11905: 0xD2C1, + 20235 - 11905: 0x81B3, + 20236 - 11905: 0x81B4, + 20237 - 11905: 0xCEE9, + 20238 - 11905: 0xBCBF, + 20239 - 11905: 0xB7FC, + 20240 - 11905: 0xB7A5, + 20241 - 11905: 0xD0DD, + 20242 - 11905: 0x81B5, + 20243 - 11905: 0x81B6, + 20244 - 11905: 0x81B7, + 20245 - 11905: 0x81B8, + 20246 - 11905: 0x81B9, + 20247 - 11905: 0xD6DA, + 20248 - 11905: 0xD3C5, + 20249 - 11905: 0xBBEF, + 20250 - 11905: 0xBBE1, + 20251 - 11905: 0xD8F1, + 20252 - 11905: 0x81BA, + 20253 - 11905: 0x81BB, + 20254 - 11905: 0xC9A1, + 20255 - 11905: 0xCEB0, + 20256 - 11905: 0xB4AB, + 20257 - 11905: 0x81BC, + 20258 - 11905: 0xD8F3, + 20259 - 11905: 0x81BD, + 20260 - 11905: 0xC9CB, + 20261 - 11905: 0xD8F6, + 20262 - 11905: 0xC2D7, + 20263 - 11905: 0xD8F7, + 20264 - 11905: 0x81BE, + 20265 - 11905: 0x81BF, + 20266 - 11905: 0xCEB1, + 20267 - 11905: 0xD8F9, + 20268 - 11905: 0x81C0, + 20269 - 11905: 0x81C1, + 20270 - 11905: 0x81C2, + 20271 - 11905: 0xB2AE, + 20272 - 11905: 0xB9C0, + 20273 - 11905: 0x81C3, + 20274 - 11905: 0xD9A3, + 20275 - 11905: 0x81C4, + 20276 - 11905: 0xB0E9, + 20277 - 11905: 0x81C5, + 20278 - 11905: 0xC1E6, + 20279 - 11905: 0x81C6, + 20280 - 11905: 0xC9EC, + 20281 - 11905: 0x81C7, + 20282 - 11905: 0xCBC5, + 20283 - 11905: 0x81C8, + 20284 - 11905: 0xCBC6, + 20285 - 11905: 0xD9A4, + 20286 - 11905: 0x81C9, + 20287 - 11905: 0x81CA, + 20288 - 11905: 0x81CB, + 20289 - 11905: 0x81CC, + 20290 - 11905: 0x81CD, + 20291 - 11905: 0xB5E8, + 20292 - 11905: 0x81CE, + 20293 - 11905: 0x81CF, + 20294 - 11905: 0xB5AB, + 20295 - 11905: 0x81D0, + 20296 - 11905: 0x81D1, + 20297 - 11905: 0x81D2, + 20298 - 11905: 0x81D3, + 20299 - 11905: 0x81D4, + 20300 - 11905: 0x81D5, + 20301 - 11905: 0xCEBB, + 20302 - 11905: 0xB5CD, + 20303 - 11905: 0xD7A1, + 20304 - 11905: 0xD7F4, + 20305 - 11905: 0xD3D3, + 20306 - 11905: 0x81D6, + 20307 - 11905: 0xCCE5, + 20308 - 11905: 0x81D7, + 20309 - 11905: 0xBACE, + 20310 - 11905: 0x81D8, + 20311 - 11905: 0xD9A2, + 20312 - 11905: 0xD9DC, + 20313 - 11905: 0xD3E0, + 20314 - 11905: 0xD8FD, + 20315 - 11905: 0xB7F0, + 20316 - 11905: 0xD7F7, + 20317 - 11905: 0xD8FE, + 20318 - 11905: 0xD8FA, + 20319 - 11905: 0xD9A1, + 20320 - 11905: 0xC4E3, + 20321 - 11905: 0x81D9, + 20322 - 11905: 0x81DA, + 20323 - 11905: 0xD3B6, + 20324 - 11905: 0xD8F4, + 20325 - 11905: 0xD9DD, + 20326 - 11905: 0x81DB, + 20327 - 11905: 0xD8FB, + 20328 - 11905: 0x81DC, + 20329 - 11905: 0xC5E5, + 20330 - 11905: 0x81DD, + 20331 - 11905: 0x81DE, + 20332 - 11905: 0xC0D0, + 20333 - 11905: 0x81DF, + 20334 - 11905: 0x81E0, + 20335 - 11905: 0xD1F0, + 20336 - 11905: 0xB0DB, + 20337 - 11905: 0x81E1, + 20338 - 11905: 0x81E2, + 20339 - 11905: 0xBCD1, + 20340 - 11905: 0xD9A6, + 20341 - 11905: 0x81E3, + 20342 - 11905: 0xD9A5, + 20343 - 11905: 0x81E4, + 20344 - 11905: 0x81E5, + 20345 - 11905: 0x81E6, + 20346 - 11905: 0x81E7, + 20347 - 11905: 0xD9AC, + 20348 - 11905: 0xD9AE, + 20349 - 11905: 0x81E8, + 20350 - 11905: 0xD9AB, + 20351 - 11905: 0xCAB9, + 20352 - 11905: 0x81E9, + 20353 - 11905: 0x81EA, + 20354 - 11905: 0x81EB, + 20355 - 11905: 0xD9A9, + 20356 - 11905: 0xD6B6, + 20357 - 11905: 0x81EC, + 20358 - 11905: 0x81ED, + 20359 - 11905: 0x81EE, + 20360 - 11905: 0xB3DE, + 20361 - 11905: 0xD9A8, + 20362 - 11905: 0x81EF, + 20363 - 11905: 0xC0FD, + 20364 - 11905: 0x81F0, + 20365 - 11905: 0xCACC, + 20366 - 11905: 0x81F1, + 20367 - 11905: 0xD9AA, + 20368 - 11905: 0x81F2, + 20369 - 11905: 0xD9A7, + 20370 - 11905: 0x81F3, + 20371 - 11905: 0x81F4, + 20372 - 11905: 0xD9B0, + 20373 - 11905: 0x81F5, + 20374 - 11905: 0x81F6, + 20375 - 11905: 0xB6B1, + 20376 - 11905: 0x81F7, + 20377 - 11905: 0x81F8, + 20378 - 11905: 0x81F9, + 20379 - 11905: 0xB9A9, + 20380 - 11905: 0x81FA, + 20381 - 11905: 0xD2C0, + 20382 - 11905: 0x81FB, + 20383 - 11905: 0x81FC, + 20384 - 11905: 0xCFC0, + 20385 - 11905: 0x81FD, + 20386 - 11905: 0x81FE, + 20387 - 11905: 0xC2C2, + 20388 - 11905: 0x8240, + 20389 - 11905: 0xBDC4, + 20390 - 11905: 0xD5EC, + 20391 - 11905: 0xB2E0, + 20392 - 11905: 0xC7C8, + 20393 - 11905: 0xBFEB, + 20394 - 11905: 0xD9AD, + 20395 - 11905: 0x8241, + 20396 - 11905: 0xD9AF, + 20397 - 11905: 0x8242, + 20398 - 11905: 0xCEEA, + 20399 - 11905: 0xBAEE, + 20400 - 11905: 0x8243, + 20401 - 11905: 0x8244, + 20402 - 11905: 0x8245, + 20403 - 11905: 0x8246, + 20404 - 11905: 0x8247, + 20405 - 11905: 0xC7D6, + 20406 - 11905: 0x8248, + 20407 - 11905: 0x8249, + 20408 - 11905: 0x824A, + 20409 - 11905: 0x824B, + 20410 - 11905: 0x824C, + 20411 - 11905: 0x824D, + 20412 - 11905: 0x824E, + 20413 - 11905: 0x824F, + 20414 - 11905: 0x8250, + 20415 - 11905: 0xB1E3, + 20416 - 11905: 0x8251, + 20417 - 11905: 0x8252, + 20418 - 11905: 0x8253, + 20419 - 11905: 0xB4D9, + 20420 - 11905: 0xB6ED, + 20421 - 11905: 0xD9B4, + 20422 - 11905: 0x8254, + 20423 - 11905: 0x8255, + 20424 - 11905: 0x8256, + 20425 - 11905: 0x8257, + 20426 - 11905: 0xBFA1, + 20427 - 11905: 0x8258, + 20428 - 11905: 0x8259, + 20429 - 11905: 0x825A, + 20430 - 11905: 0xD9DE, + 20431 - 11905: 0xC7CE, + 20432 - 11905: 0xC0FE, + 20433 - 11905: 0xD9B8, + 20434 - 11905: 0x825B, + 20435 - 11905: 0x825C, + 20436 - 11905: 0x825D, + 20437 - 11905: 0x825E, + 20438 - 11905: 0x825F, + 20439 - 11905: 0xCBD7, + 20440 - 11905: 0xB7FD, + 20441 - 11905: 0x8260, + 20442 - 11905: 0xD9B5, + 20443 - 11905: 0x8261, + 20444 - 11905: 0xD9B7, + 20445 - 11905: 0xB1A3, + 20446 - 11905: 0xD3E1, + 20447 - 11905: 0xD9B9, + 20448 - 11905: 0x8262, + 20449 - 11905: 0xD0C5, + 20450 - 11905: 0x8263, + 20451 - 11905: 0xD9B6, + 20452 - 11905: 0x8264, + 20453 - 11905: 0x8265, + 20454 - 11905: 0xD9B1, + 20455 - 11905: 0x8266, + 20456 - 11905: 0xD9B2, + 20457 - 11905: 0xC1A9, + 20458 - 11905: 0xD9B3, + 20459 - 11905: 0x8267, + 20460 - 11905: 0x8268, + 20461 - 11905: 0xBCF3, + 20462 - 11905: 0xD0DE, + 20463 - 11905: 0xB8A9, + 20464 - 11905: 0x8269, + 20465 - 11905: 0xBEE3, + 20466 - 11905: 0x826A, + 20467 - 11905: 0xD9BD, + 20468 - 11905: 0x826B, + 20469 - 11905: 0x826C, + 20470 - 11905: 0x826D, + 20471 - 11905: 0x826E, + 20472 - 11905: 0xD9BA, + 20473 - 11905: 0x826F, + 20474 - 11905: 0xB0B3, + 20475 - 11905: 0x8270, + 20476 - 11905: 0x8271, + 20477 - 11905: 0x8272, + 20478 - 11905: 0xD9C2, + 20479 - 11905: 0x8273, + 20480 - 11905: 0x8274, + 20481 - 11905: 0x8275, + 20482 - 11905: 0x8276, + 20483 - 11905: 0x8277, + 20484 - 11905: 0x8278, + 20485 - 11905: 0x8279, + 20486 - 11905: 0x827A, + 20487 - 11905: 0x827B, + 20488 - 11905: 0x827C, + 20489 - 11905: 0x827D, + 20490 - 11905: 0x827E, + 20491 - 11905: 0x8280, + 20492 - 11905: 0xD9C4, + 20493 - 11905: 0xB1B6, + 20494 - 11905: 0x8281, + 20495 - 11905: 0xD9BF, + 20496 - 11905: 0x8282, + 20497 - 11905: 0x8283, + 20498 - 11905: 0xB5B9, + 20499 - 11905: 0x8284, + 20500 - 11905: 0xBEF3, + 20501 - 11905: 0x8285, + 20502 - 11905: 0x8286, + 20503 - 11905: 0x8287, + 20504 - 11905: 0xCCC8, + 20505 - 11905: 0xBAF2, + 20506 - 11905: 0xD2D0, + 20507 - 11905: 0x8288, + 20508 - 11905: 0xD9C3, + 20509 - 11905: 0x8289, + 20510 - 11905: 0x828A, + 20511 - 11905: 0xBDE8, + 20512 - 11905: 0x828B, + 20513 - 11905: 0xB3AB, + 20514 - 11905: 0x828C, + 20515 - 11905: 0x828D, + 20516 - 11905: 0x828E, + 20517 - 11905: 0xD9C5, + 20518 - 11905: 0xBEEB, + 20519 - 11905: 0x828F, + 20520 - 11905: 0xD9C6, + 20521 - 11905: 0xD9BB, + 20522 - 11905: 0xC4DF, + 20523 - 11905: 0x8290, + 20524 - 11905: 0xD9BE, + 20525 - 11905: 0xD9C1, + 20526 - 11905: 0xD9C0, + 20527 - 11905: 0x8291, + 20528 - 11905: 0x8292, + 20529 - 11905: 0x8293, + 20530 - 11905: 0x8294, + 20531 - 11905: 0x8295, + 20532 - 11905: 0x8296, + 20533 - 11905: 0x8297, + 20534 - 11905: 0x8298, + 20535 - 11905: 0x8299, + 20536 - 11905: 0x829A, + 20537 - 11905: 0x829B, + 20538 - 11905: 0xD5AE, + 20539 - 11905: 0x829C, + 20540 - 11905: 0xD6B5, + 20541 - 11905: 0x829D, + 20542 - 11905: 0xC7E3, + 20543 - 11905: 0x829E, + 20544 - 11905: 0x829F, + 20545 - 11905: 0x82A0, + 20546 - 11905: 0x82A1, + 20547 - 11905: 0xD9C8, + 20548 - 11905: 0x82A2, + 20549 - 11905: 0x82A3, + 20550 - 11905: 0x82A4, + 20551 - 11905: 0xBCD9, + 20552 - 11905: 0xD9CA, + 20553 - 11905: 0x82A5, + 20554 - 11905: 0x82A6, + 20555 - 11905: 0x82A7, + 20556 - 11905: 0xD9BC, + 20557 - 11905: 0x82A8, + 20558 - 11905: 0xD9CB, + 20559 - 11905: 0xC6AB, + 20560 - 11905: 0x82A9, + 20561 - 11905: 0x82AA, + 20562 - 11905: 0x82AB, + 20563 - 11905: 0x82AC, + 20564 - 11905: 0x82AD, + 20565 - 11905: 0xD9C9, + 20566 - 11905: 0x82AE, + 20567 - 11905: 0x82AF, + 20568 - 11905: 0x82B0, + 20569 - 11905: 0x82B1, + 20570 - 11905: 0xD7F6, + 20571 - 11905: 0x82B2, + 20572 - 11905: 0xCDA3, + 20573 - 11905: 0x82B3, + 20574 - 11905: 0x82B4, + 20575 - 11905: 0x82B5, + 20576 - 11905: 0x82B6, + 20577 - 11905: 0x82B7, + 20578 - 11905: 0x82B8, + 20579 - 11905: 0x82B9, + 20580 - 11905: 0x82BA, + 20581 - 11905: 0xBDA1, + 20582 - 11905: 0x82BB, + 20583 - 11905: 0x82BC, + 20584 - 11905: 0x82BD, + 20585 - 11905: 0x82BE, + 20586 - 11905: 0x82BF, + 20587 - 11905: 0x82C0, + 20588 - 11905: 0xD9CC, + 20589 - 11905: 0x82C1, + 20590 - 11905: 0x82C2, + 20591 - 11905: 0x82C3, + 20592 - 11905: 0x82C4, + 20593 - 11905: 0x82C5, + 20594 - 11905: 0x82C6, + 20595 - 11905: 0x82C7, + 20596 - 11905: 0x82C8, + 20597 - 11905: 0x82C9, + 20598 - 11905: 0xC5BC, + 20599 - 11905: 0xCDB5, + 20600 - 11905: 0x82CA, + 20601 - 11905: 0x82CB, + 20602 - 11905: 0x82CC, + 20603 - 11905: 0xD9CD, + 20604 - 11905: 0x82CD, + 20605 - 11905: 0x82CE, + 20606 - 11905: 0xD9C7, + 20607 - 11905: 0xB3A5, + 20608 - 11905: 0xBFFE, + 20609 - 11905: 0x82CF, + 20610 - 11905: 0x82D0, + 20611 - 11905: 0x82D1, + 20612 - 11905: 0x82D2, + 20613 - 11905: 0xB8B5, + 20614 - 11905: 0x82D3, + 20615 - 11905: 0x82D4, + 20616 - 11905: 0xC0FC, + 20617 - 11905: 0x82D5, + 20618 - 11905: 0x82D6, + 20619 - 11905: 0x82D7, + 20620 - 11905: 0x82D8, + 20621 - 11905: 0xB0F8, + 20622 - 11905: 0x82D9, + 20623 - 11905: 0x82DA, + 20624 - 11905: 0x82DB, + 20625 - 11905: 0x82DC, + 20626 - 11905: 0x82DD, + 20627 - 11905: 0x82DE, + 20628 - 11905: 0x82DF, + 20629 - 11905: 0x82E0, + 20630 - 11905: 0x82E1, + 20631 - 11905: 0x82E2, + 20632 - 11905: 0x82E3, + 20633 - 11905: 0x82E4, + 20634 - 11905: 0x82E5, + 20635 - 11905: 0x82E6, + 20636 - 11905: 0x82E7, + 20637 - 11905: 0x82E8, + 20638 - 11905: 0x82E9, + 20639 - 11905: 0x82EA, + 20640 - 11905: 0x82EB, + 20641 - 11905: 0x82EC, + 20642 - 11905: 0x82ED, + 20643 - 11905: 0xB4F6, + 20644 - 11905: 0x82EE, + 20645 - 11905: 0xD9CE, + 20646 - 11905: 0x82EF, + 20647 - 11905: 0xD9CF, + 20648 - 11905: 0xB4A2, + 20649 - 11905: 0xD9D0, + 20650 - 11905: 0x82F0, + 20651 - 11905: 0x82F1, + 20652 - 11905: 0xB4DF, + 20653 - 11905: 0x82F2, + 20654 - 11905: 0x82F3, + 20655 - 11905: 0x82F4, + 20656 - 11905: 0x82F5, + 20657 - 11905: 0x82F6, + 20658 - 11905: 0xB0C1, + 20659 - 11905: 0x82F7, + 20660 - 11905: 0x82F8, + 20661 - 11905: 0x82F9, + 20662 - 11905: 0x82FA, + 20663 - 11905: 0x82FB, + 20664 - 11905: 0x82FC, + 20665 - 11905: 0x82FD, + 20666 - 11905: 0xD9D1, + 20667 - 11905: 0xC9B5, + 20668 - 11905: 0x82FE, + 20669 - 11905: 0x8340, + 20670 - 11905: 0x8341, + 20671 - 11905: 0x8342, + 20672 - 11905: 0x8343, + 20673 - 11905: 0x8344, + 20674 - 11905: 0x8345, + 20675 - 11905: 0x8346, + 20676 - 11905: 0x8347, + 20677 - 11905: 0x8348, + 20678 - 11905: 0x8349, + 20679 - 11905: 0x834A, + 20680 - 11905: 0x834B, + 20681 - 11905: 0x834C, + 20682 - 11905: 0x834D, + 20683 - 11905: 0x834E, + 20684 - 11905: 0x834F, + 20685 - 11905: 0x8350, + 20686 - 11905: 0x8351, + 20687 - 11905: 0xCFF1, + 20688 - 11905: 0x8352, + 20689 - 11905: 0x8353, + 20690 - 11905: 0x8354, + 20691 - 11905: 0x8355, + 20692 - 11905: 0x8356, + 20693 - 11905: 0x8357, + 20694 - 11905: 0xD9D2, + 20695 - 11905: 0x8358, + 20696 - 11905: 0x8359, + 20697 - 11905: 0x835A, + 20698 - 11905: 0xC1C5, + 20699 - 11905: 0x835B, + 20700 - 11905: 0x835C, + 20701 - 11905: 0x835D, + 20702 - 11905: 0x835E, + 20703 - 11905: 0x835F, + 20704 - 11905: 0x8360, + 20705 - 11905: 0x8361, + 20706 - 11905: 0x8362, + 20707 - 11905: 0x8363, + 20708 - 11905: 0x8364, + 20709 - 11905: 0x8365, + 20710 - 11905: 0xD9D6, + 20711 - 11905: 0xC9AE, + 20712 - 11905: 0x8366, + 20713 - 11905: 0x8367, + 20714 - 11905: 0x8368, + 20715 - 11905: 0x8369, + 20716 - 11905: 0xD9D5, + 20717 - 11905: 0xD9D4, + 20718 - 11905: 0xD9D7, + 20719 - 11905: 0x836A, + 20720 - 11905: 0x836B, + 20721 - 11905: 0x836C, + 20722 - 11905: 0x836D, + 20723 - 11905: 0xCBDB, + 20724 - 11905: 0x836E, + 20725 - 11905: 0xBDA9, + 20726 - 11905: 0x836F, + 20727 - 11905: 0x8370, + 20728 - 11905: 0x8371, + 20729 - 11905: 0x8372, + 20730 - 11905: 0x8373, + 20731 - 11905: 0xC6A7, + 20732 - 11905: 0x8374, + 20733 - 11905: 0x8375, + 20734 - 11905: 0x8376, + 20735 - 11905: 0x8377, + 20736 - 11905: 0x8378, + 20737 - 11905: 0x8379, + 20738 - 11905: 0x837A, + 20739 - 11905: 0x837B, + 20740 - 11905: 0x837C, + 20741 - 11905: 0x837D, + 20742 - 11905: 0xD9D3, + 20743 - 11905: 0xD9D8, + 20744 - 11905: 0x837E, + 20745 - 11905: 0x8380, + 20746 - 11905: 0x8381, + 20747 - 11905: 0xD9D9, + 20748 - 11905: 0x8382, + 20749 - 11905: 0x8383, + 20750 - 11905: 0x8384, + 20751 - 11905: 0x8385, + 20752 - 11905: 0x8386, + 20753 - 11905: 0x8387, + 20754 - 11905: 0xC8E5, + 20755 - 11905: 0x8388, + 20756 - 11905: 0x8389, + 20757 - 11905: 0x838A, + 20758 - 11905: 0x838B, + 20759 - 11905: 0x838C, + 20760 - 11905: 0x838D, + 20761 - 11905: 0x838E, + 20762 - 11905: 0x838F, + 20763 - 11905: 0x8390, + 20764 - 11905: 0x8391, + 20765 - 11905: 0x8392, + 20766 - 11905: 0x8393, + 20767 - 11905: 0x8394, + 20768 - 11905: 0x8395, + 20769 - 11905: 0xC0DC, + 20770 - 11905: 0x8396, + 20771 - 11905: 0x8397, + 20772 - 11905: 0x8398, + 20773 - 11905: 0x8399, + 20774 - 11905: 0x839A, + 20775 - 11905: 0x839B, + 20776 - 11905: 0x839C, + 20777 - 11905: 0x839D, + 20778 - 11905: 0x839E, + 20779 - 11905: 0x839F, + 20780 - 11905: 0x83A0, + 20781 - 11905: 0x83A1, + 20782 - 11905: 0x83A2, + 20783 - 11905: 0x83A3, + 20784 - 11905: 0x83A4, + 20785 - 11905: 0x83A5, + 20786 - 11905: 0x83A6, + 20787 - 11905: 0x83A7, + 20788 - 11905: 0x83A8, + 20789 - 11905: 0x83A9, + 20790 - 11905: 0x83AA, + 20791 - 11905: 0x83AB, + 20792 - 11905: 0x83AC, + 20793 - 11905: 0x83AD, + 20794 - 11905: 0x83AE, + 20795 - 11905: 0x83AF, + 20796 - 11905: 0x83B0, + 20797 - 11905: 0x83B1, + 20798 - 11905: 0x83B2, + 20799 - 11905: 0xB6F9, + 20800 - 11905: 0xD8A3, + 20801 - 11905: 0xD4CA, + 20802 - 11905: 0x83B3, + 20803 - 11905: 0xD4AA, + 20804 - 11905: 0xD0D6, + 20805 - 11905: 0xB3E4, + 20806 - 11905: 0xD5D7, + 20807 - 11905: 0x83B4, + 20808 - 11905: 0xCFC8, + 20809 - 11905: 0xB9E2, + 20810 - 11905: 0x83B5, + 20811 - 11905: 0xBFCB, + 20812 - 11905: 0x83B6, + 20813 - 11905: 0xC3E2, + 20814 - 11905: 0x83B7, + 20815 - 11905: 0x83B8, + 20816 - 11905: 0x83B9, + 20817 - 11905: 0xB6D2, + 20818 - 11905: 0x83BA, + 20819 - 11905: 0x83BB, + 20820 - 11905: 0xCDC3, + 20821 - 11905: 0xD9EE, + 20822 - 11905: 0xD9F0, + 20823 - 11905: 0x83BC, + 20824 - 11905: 0x83BD, + 20825 - 11905: 0x83BE, + 20826 - 11905: 0xB5B3, + 20827 - 11905: 0x83BF, + 20828 - 11905: 0xB6B5, + 20829 - 11905: 0x83C0, + 20830 - 11905: 0x83C1, + 20831 - 11905: 0x83C2, + 20832 - 11905: 0x83C3, + 20833 - 11905: 0x83C4, + 20834 - 11905: 0xBEA4, + 20835 - 11905: 0x83C5, + 20836 - 11905: 0x83C6, + 20837 - 11905: 0xC8EB, + 20838 - 11905: 0x83C7, + 20839 - 11905: 0x83C8, + 20840 - 11905: 0xC8AB, + 20841 - 11905: 0x83C9, + 20842 - 11905: 0x83CA, + 20843 - 11905: 0xB0CB, + 20844 - 11905: 0xB9AB, + 20845 - 11905: 0xC1F9, + 20846 - 11905: 0xD9E2, + 20847 - 11905: 0x83CB, + 20848 - 11905: 0xC0BC, + 20849 - 11905: 0xB9B2, + 20850 - 11905: 0x83CC, + 20851 - 11905: 0xB9D8, + 20852 - 11905: 0xD0CB, + 20853 - 11905: 0xB1F8, + 20854 - 11905: 0xC6E4, + 20855 - 11905: 0xBEDF, + 20856 - 11905: 0xB5E4, + 20857 - 11905: 0xD7C8, + 20858 - 11905: 0x83CD, + 20859 - 11905: 0xD1F8, + 20860 - 11905: 0xBCE6, + 20861 - 11905: 0xCADE, + 20862 - 11905: 0x83CE, + 20863 - 11905: 0x83CF, + 20864 - 11905: 0xBCBD, + 20865 - 11905: 0xD9E6, + 20866 - 11905: 0xD8E7, + 20867 - 11905: 0x83D0, + 20868 - 11905: 0x83D1, + 20869 - 11905: 0xC4DA, + 20870 - 11905: 0x83D2, + 20871 - 11905: 0x83D3, + 20872 - 11905: 0xB8D4, + 20873 - 11905: 0xC8BD, + 20874 - 11905: 0x83D4, + 20875 - 11905: 0x83D5, + 20876 - 11905: 0xB2E1, + 20877 - 11905: 0xD4D9, + 20878 - 11905: 0x83D6, + 20879 - 11905: 0x83D7, + 20880 - 11905: 0x83D8, + 20881 - 11905: 0x83D9, + 20882 - 11905: 0xC3B0, + 20883 - 11905: 0x83DA, + 20884 - 11905: 0x83DB, + 20885 - 11905: 0xC3E1, + 20886 - 11905: 0xDAA2, + 20887 - 11905: 0xC8DF, + 20888 - 11905: 0x83DC, + 20889 - 11905: 0xD0B4, + 20890 - 11905: 0x83DD, + 20891 - 11905: 0xBEFC, + 20892 - 11905: 0xC5A9, + 20893 - 11905: 0x83DE, + 20894 - 11905: 0x83DF, + 20895 - 11905: 0x83E0, + 20896 - 11905: 0xB9DA, + 20897 - 11905: 0x83E1, + 20898 - 11905: 0xDAA3, + 20899 - 11905: 0x83E2, + 20900 - 11905: 0xD4A9, + 20901 - 11905: 0xDAA4, + 20902 - 11905: 0x83E3, + 20903 - 11905: 0x83E4, + 20904 - 11905: 0x83E5, + 20905 - 11905: 0x83E6, + 20906 - 11905: 0x83E7, + 20907 - 11905: 0xD9FB, + 20908 - 11905: 0xB6AC, + 20909 - 11905: 0x83E8, + 20910 - 11905: 0x83E9, + 20911 - 11905: 0xB7EB, + 20912 - 11905: 0xB1F9, + 20913 - 11905: 0xD9FC, + 20914 - 11905: 0xB3E5, + 20915 - 11905: 0xBEF6, + 20916 - 11905: 0x83EA, + 20917 - 11905: 0xBFF6, + 20918 - 11905: 0xD2B1, + 20919 - 11905: 0xC0E4, + 20920 - 11905: 0x83EB, + 20921 - 11905: 0x83EC, + 20922 - 11905: 0x83ED, + 20923 - 11905: 0xB6B3, + 20924 - 11905: 0xD9FE, + 20925 - 11905: 0xD9FD, + 20926 - 11905: 0x83EE, + 20927 - 11905: 0x83EF, + 20928 - 11905: 0xBEBB, + 20929 - 11905: 0x83F0, + 20930 - 11905: 0x83F1, + 20931 - 11905: 0x83F2, + 20932 - 11905: 0xC6E0, + 20933 - 11905: 0x83F3, + 20934 - 11905: 0xD7BC, + 20935 - 11905: 0xDAA1, + 20936 - 11905: 0x83F4, + 20937 - 11905: 0xC1B9, + 20938 - 11905: 0x83F5, + 20939 - 11905: 0xB5F2, + 20940 - 11905: 0xC1E8, + 20941 - 11905: 0x83F6, + 20942 - 11905: 0x83F7, + 20943 - 11905: 0xBCF5, + 20944 - 11905: 0x83F8, + 20945 - 11905: 0xB4D5, + 20946 - 11905: 0x83F9, + 20947 - 11905: 0x83FA, + 20948 - 11905: 0x83FB, + 20949 - 11905: 0x83FC, + 20950 - 11905: 0x83FD, + 20951 - 11905: 0x83FE, + 20952 - 11905: 0x8440, + 20953 - 11905: 0x8441, + 20954 - 11905: 0x8442, + 20955 - 11905: 0xC1DD, + 20956 - 11905: 0x8443, + 20957 - 11905: 0xC4FD, + 20958 - 11905: 0x8444, + 20959 - 11905: 0x8445, + 20960 - 11905: 0xBCB8, + 20961 - 11905: 0xB7B2, + 20962 - 11905: 0x8446, + 20963 - 11905: 0x8447, + 20964 - 11905: 0xB7EF, + 20965 - 11905: 0x8448, + 20966 - 11905: 0x8449, + 20967 - 11905: 0x844A, + 20968 - 11905: 0x844B, + 20969 - 11905: 0x844C, + 20970 - 11905: 0x844D, + 20971 - 11905: 0xD9EC, + 20972 - 11905: 0x844E, + 20973 - 11905: 0xC6BE, + 20974 - 11905: 0x844F, + 20975 - 11905: 0xBFAD, + 20976 - 11905: 0xBBCB, + 20977 - 11905: 0x8450, + 20978 - 11905: 0x8451, + 20979 - 11905: 0xB5CA, + 20980 - 11905: 0x8452, + 20981 - 11905: 0xDBC9, + 20982 - 11905: 0xD0D7, + 20983 - 11905: 0x8453, + 20984 - 11905: 0xCDB9, + 20985 - 11905: 0xB0BC, + 20986 - 11905: 0xB3F6, + 20987 - 11905: 0xBBF7, + 20988 - 11905: 0xDBCA, + 20989 - 11905: 0xBAAF, + 20990 - 11905: 0x8454, + 20991 - 11905: 0xD4E4, + 20992 - 11905: 0xB5B6, + 20993 - 11905: 0xB5F3, + 20994 - 11905: 0xD8D6, + 20995 - 11905: 0xC8D0, + 20996 - 11905: 0x8455, + 20997 - 11905: 0x8456, + 20998 - 11905: 0xB7D6, + 20999 - 11905: 0xC7D0, + 21000 - 11905: 0xD8D7, + 21001 - 11905: 0x8457, + 21002 - 11905: 0xBFAF, + 21003 - 11905: 0x8458, + 21004 - 11905: 0x8459, + 21005 - 11905: 0xDBBB, + 21006 - 11905: 0xD8D8, + 21007 - 11905: 0x845A, + 21008 - 11905: 0x845B, + 21009 - 11905: 0xD0CC, + 21010 - 11905: 0xBBAE, + 21011 - 11905: 0x845C, + 21012 - 11905: 0x845D, + 21013 - 11905: 0x845E, + 21014 - 11905: 0xEBBE, + 21015 - 11905: 0xC1D0, + 21016 - 11905: 0xC1F5, + 21017 - 11905: 0xD4F2, + 21018 - 11905: 0xB8D5, + 21019 - 11905: 0xB4B4, + 21020 - 11905: 0x845F, + 21021 - 11905: 0xB3F5, + 21022 - 11905: 0x8460, + 21023 - 11905: 0x8461, + 21024 - 11905: 0xC9BE, + 21025 - 11905: 0x8462, + 21026 - 11905: 0x8463, + 21027 - 11905: 0x8464, + 21028 - 11905: 0xC5D0, + 21029 - 11905: 0x8465, + 21030 - 11905: 0x8466, + 21031 - 11905: 0x8467, + 21032 - 11905: 0xC5D9, + 21033 - 11905: 0xC0FB, + 21034 - 11905: 0x8468, + 21035 - 11905: 0xB1F0, + 21036 - 11905: 0x8469, + 21037 - 11905: 0xD8D9, + 21038 - 11905: 0xB9CE, + 21039 - 11905: 0x846A, + 21040 - 11905: 0xB5BD, + 21041 - 11905: 0x846B, + 21042 - 11905: 0x846C, + 21043 - 11905: 0xD8DA, + 21044 - 11905: 0x846D, + 21045 - 11905: 0x846E, + 21046 - 11905: 0xD6C6, + 21047 - 11905: 0xCBA2, + 21048 - 11905: 0xC8AF, + 21049 - 11905: 0xC9B2, + 21050 - 11905: 0xB4CC, + 21051 - 11905: 0xBFCC, + 21052 - 11905: 0x846F, + 21053 - 11905: 0xB9F4, + 21054 - 11905: 0x8470, + 21055 - 11905: 0xD8DB, + 21056 - 11905: 0xD8DC, + 21057 - 11905: 0xB6E7, + 21058 - 11905: 0xBCC1, + 21059 - 11905: 0xCCEA, + 21060 - 11905: 0x8471, + 21061 - 11905: 0x8472, + 21062 - 11905: 0x8473, + 21063 - 11905: 0x8474, + 21064 - 11905: 0x8475, + 21065 - 11905: 0x8476, + 21066 - 11905: 0xCFF7, + 21067 - 11905: 0x8477, + 21068 - 11905: 0xD8DD, + 21069 - 11905: 0xC7B0, + 21070 - 11905: 0x8478, + 21071 - 11905: 0x8479, + 21072 - 11905: 0xB9D0, + 21073 - 11905: 0xBDA3, + 21074 - 11905: 0x847A, + 21075 - 11905: 0x847B, + 21076 - 11905: 0xCCDE, + 21077 - 11905: 0x847C, + 21078 - 11905: 0xC6CA, + 21079 - 11905: 0x847D, + 21080 - 11905: 0x847E, + 21081 - 11905: 0x8480, + 21082 - 11905: 0x8481, + 21083 - 11905: 0x8482, + 21084 - 11905: 0xD8E0, + 21085 - 11905: 0x8483, + 21086 - 11905: 0xD8DE, + 21087 - 11905: 0x8484, + 21088 - 11905: 0x8485, + 21089 - 11905: 0xD8DF, + 21090 - 11905: 0x8486, + 21091 - 11905: 0x8487, + 21092 - 11905: 0x8488, + 21093 - 11905: 0xB0FE, + 21094 - 11905: 0x8489, + 21095 - 11905: 0xBEE7, + 21096 - 11905: 0x848A, + 21097 - 11905: 0xCAA3, + 21098 - 11905: 0xBCF4, + 21099 - 11905: 0x848B, + 21100 - 11905: 0x848C, + 21101 - 11905: 0x848D, + 21102 - 11905: 0x848E, + 21103 - 11905: 0xB8B1, + 21104 - 11905: 0x848F, + 21105 - 11905: 0x8490, + 21106 - 11905: 0xB8EE, + 21107 - 11905: 0x8491, + 21108 - 11905: 0x8492, + 21109 - 11905: 0x8493, + 21110 - 11905: 0x8494, + 21111 - 11905: 0x8495, + 21112 - 11905: 0x8496, + 21113 - 11905: 0x8497, + 21114 - 11905: 0x8498, + 21115 - 11905: 0x8499, + 21116 - 11905: 0x849A, + 21117 - 11905: 0xD8E2, + 21118 - 11905: 0x849B, + 21119 - 11905: 0xBDCB, + 21120 - 11905: 0x849C, + 21121 - 11905: 0xD8E4, + 21122 - 11905: 0xD8E3, + 21123 - 11905: 0x849D, + 21124 - 11905: 0x849E, + 21125 - 11905: 0x849F, + 21126 - 11905: 0x84A0, + 21127 - 11905: 0x84A1, + 21128 - 11905: 0xC5FC, + 21129 - 11905: 0x84A2, + 21130 - 11905: 0x84A3, + 21131 - 11905: 0x84A4, + 21132 - 11905: 0x84A5, + 21133 - 11905: 0x84A6, + 21134 - 11905: 0x84A7, + 21135 - 11905: 0x84A8, + 21136 - 11905: 0xD8E5, + 21137 - 11905: 0x84A9, + 21138 - 11905: 0x84AA, + 21139 - 11905: 0xD8E6, + 21140 - 11905: 0x84AB, + 21141 - 11905: 0x84AC, + 21142 - 11905: 0x84AD, + 21143 - 11905: 0x84AE, + 21144 - 11905: 0x84AF, + 21145 - 11905: 0x84B0, + 21146 - 11905: 0x84B1, + 21147 - 11905: 0xC1A6, + 21148 - 11905: 0x84B2, + 21149 - 11905: 0xC8B0, + 21150 - 11905: 0xB0EC, + 21151 - 11905: 0xB9A6, + 21152 - 11905: 0xBCD3, + 21153 - 11905: 0xCEF1, + 21154 - 11905: 0xDBBD, + 21155 - 11905: 0xC1D3, + 21156 - 11905: 0x84B3, + 21157 - 11905: 0x84B4, + 21158 - 11905: 0x84B5, + 21159 - 11905: 0x84B6, + 21160 - 11905: 0xB6AF, + 21161 - 11905: 0xD6FA, + 21162 - 11905: 0xC5AC, + 21163 - 11905: 0xBDD9, + 21164 - 11905: 0xDBBE, + 21165 - 11905: 0xDBBF, + 21166 - 11905: 0x84B7, + 21167 - 11905: 0x84B8, + 21168 - 11905: 0x84B9, + 21169 - 11905: 0xC0F8, + 21170 - 11905: 0xBEA2, + 21171 - 11905: 0xC0CD, + 21172 - 11905: 0x84BA, + 21173 - 11905: 0x84BB, + 21174 - 11905: 0x84BC, + 21175 - 11905: 0x84BD, + 21176 - 11905: 0x84BE, + 21177 - 11905: 0x84BF, + 21178 - 11905: 0x84C0, + 21179 - 11905: 0x84C1, + 21180 - 11905: 0x84C2, + 21181 - 11905: 0x84C3, + 21182 - 11905: 0xDBC0, + 21183 - 11905: 0xCAC6, + 21184 - 11905: 0x84C4, + 21185 - 11905: 0x84C5, + 21186 - 11905: 0x84C6, + 21187 - 11905: 0xB2AA, + 21188 - 11905: 0x84C7, + 21189 - 11905: 0x84C8, + 21190 - 11905: 0x84C9, + 21191 - 11905: 0xD3C2, + 21192 - 11905: 0x84CA, + 21193 - 11905: 0xC3E3, + 21194 - 11905: 0x84CB, + 21195 - 11905: 0xD1AB, + 21196 - 11905: 0x84CC, + 21197 - 11905: 0x84CD, + 21198 - 11905: 0x84CE, + 21199 - 11905: 0x84CF, + 21200 - 11905: 0xDBC2, + 21201 - 11905: 0x84D0, + 21202 - 11905: 0xC0D5, + 21203 - 11905: 0x84D1, + 21204 - 11905: 0x84D2, + 21205 - 11905: 0x84D3, + 21206 - 11905: 0xDBC3, + 21207 - 11905: 0x84D4, + 21208 - 11905: 0xBFB1, + 21209 - 11905: 0x84D5, + 21210 - 11905: 0x84D6, + 21211 - 11905: 0x84D7, + 21212 - 11905: 0x84D8, + 21213 - 11905: 0x84D9, + 21214 - 11905: 0x84DA, + 21215 - 11905: 0xC4BC, + 21216 - 11905: 0x84DB, + 21217 - 11905: 0x84DC, + 21218 - 11905: 0x84DD, + 21219 - 11905: 0x84DE, + 21220 - 11905: 0xC7DA, + 21221 - 11905: 0x84DF, + 21222 - 11905: 0x84E0, + 21223 - 11905: 0x84E1, + 21224 - 11905: 0x84E2, + 21225 - 11905: 0x84E3, + 21226 - 11905: 0x84E4, + 21227 - 11905: 0x84E5, + 21228 - 11905: 0x84E6, + 21229 - 11905: 0x84E7, + 21230 - 11905: 0x84E8, + 21231 - 11905: 0x84E9, + 21232 - 11905: 0xDBC4, + 21233 - 11905: 0x84EA, + 21234 - 11905: 0x84EB, + 21235 - 11905: 0x84EC, + 21236 - 11905: 0x84ED, + 21237 - 11905: 0x84EE, + 21238 - 11905: 0x84EF, + 21239 - 11905: 0x84F0, + 21240 - 11905: 0x84F1, + 21241 - 11905: 0xD9E8, + 21242 - 11905: 0xC9D7, + 21243 - 11905: 0x84F2, + 21244 - 11905: 0x84F3, + 21245 - 11905: 0x84F4, + 21246 - 11905: 0xB9B4, + 21247 - 11905: 0xCEF0, + 21248 - 11905: 0xD4C8, + 21249 - 11905: 0x84F5, + 21250 - 11905: 0x84F6, + 21251 - 11905: 0x84F7, + 21252 - 11905: 0x84F8, + 21253 - 11905: 0xB0FC, + 21254 - 11905: 0xB4D2, + 21255 - 11905: 0x84F9, + 21256 - 11905: 0xD0D9, + 21257 - 11905: 0x84FA, + 21258 - 11905: 0x84FB, + 21259 - 11905: 0x84FC, + 21260 - 11905: 0x84FD, + 21261 - 11905: 0xD9E9, + 21262 - 11905: 0x84FE, + 21263 - 11905: 0xDECB, + 21264 - 11905: 0xD9EB, + 21265 - 11905: 0x8540, + 21266 - 11905: 0x8541, + 21267 - 11905: 0x8542, + 21268 - 11905: 0x8543, + 21269 - 11905: 0xD8B0, + 21270 - 11905: 0xBBAF, + 21271 - 11905: 0xB1B1, + 21272 - 11905: 0x8544, + 21273 - 11905: 0xB3D7, + 21274 - 11905: 0xD8CE, + 21275 - 11905: 0x8545, + 21276 - 11905: 0x8546, + 21277 - 11905: 0xD4D1, + 21278 - 11905: 0x8547, + 21279 - 11905: 0x8548, + 21280 - 11905: 0xBDB3, + 21281 - 11905: 0xBFEF, + 21282 - 11905: 0x8549, + 21283 - 11905: 0xCFBB, + 21284 - 11905: 0x854A, + 21285 - 11905: 0x854B, + 21286 - 11905: 0xD8D0, + 21287 - 11905: 0x854C, + 21288 - 11905: 0x854D, + 21289 - 11905: 0x854E, + 21290 - 11905: 0xB7CB, + 21291 - 11905: 0x854F, + 21292 - 11905: 0x8550, + 21293 - 11905: 0x8551, + 21294 - 11905: 0xD8D1, + 21295 - 11905: 0x8552, + 21296 - 11905: 0x8553, + 21297 - 11905: 0x8554, + 21298 - 11905: 0x8555, + 21299 - 11905: 0x8556, + 21300 - 11905: 0x8557, + 21301 - 11905: 0x8558, + 21302 - 11905: 0x8559, + 21303 - 11905: 0x855A, + 21304 - 11905: 0x855B, + 21305 - 11905: 0xC6A5, + 21306 - 11905: 0xC7F8, + 21307 - 11905: 0xD2BD, + 21308 - 11905: 0x855C, + 21309 - 11905: 0x855D, + 21310 - 11905: 0xD8D2, + 21311 - 11905: 0xC4E4, + 21312 - 11905: 0x855E, + 21313 - 11905: 0xCAAE, + 21314 - 11905: 0x855F, + 21315 - 11905: 0xC7A7, + 21316 - 11905: 0x8560, + 21317 - 11905: 0xD8A6, + 21318 - 11905: 0x8561, + 21319 - 11905: 0xC9FD, + 21320 - 11905: 0xCEE7, + 21321 - 11905: 0xBBDC, + 21322 - 11905: 0xB0EB, + 21323 - 11905: 0x8562, + 21324 - 11905: 0x8563, + 21325 - 11905: 0x8564, + 21326 - 11905: 0xBBAA, + 21327 - 11905: 0xD0AD, + 21328 - 11905: 0x8565, + 21329 - 11905: 0xB1B0, + 21330 - 11905: 0xD7E4, + 21331 - 11905: 0xD7BF, + 21332 - 11905: 0x8566, + 21333 - 11905: 0xB5A5, + 21334 - 11905: 0xC2F4, + 21335 - 11905: 0xC4CF, + 21336 - 11905: 0x8567, + 21337 - 11905: 0x8568, + 21338 - 11905: 0xB2A9, + 21339 - 11905: 0x8569, + 21340 - 11905: 0xB2B7, + 21341 - 11905: 0x856A, + 21342 - 11905: 0xB1E5, + 21343 - 11905: 0xDFB2, + 21344 - 11905: 0xD5BC, + 21345 - 11905: 0xBFA8, + 21346 - 11905: 0xC2AC, + 21347 - 11905: 0xD8D5, + 21348 - 11905: 0xC2B1, + 21349 - 11905: 0x856B, + 21350 - 11905: 0xD8D4, + 21351 - 11905: 0xCED4, + 21352 - 11905: 0x856C, + 21353 - 11905: 0xDAE0, + 21354 - 11905: 0x856D, + 21355 - 11905: 0xCEC0, + 21356 - 11905: 0x856E, + 21357 - 11905: 0x856F, + 21358 - 11905: 0xD8B4, + 21359 - 11905: 0xC3AE, + 21360 - 11905: 0xD3A1, + 21361 - 11905: 0xCEA3, + 21362 - 11905: 0x8570, + 21363 - 11905: 0xBCB4, + 21364 - 11905: 0xC8B4, + 21365 - 11905: 0xC2D1, + 21366 - 11905: 0x8571, + 21367 - 11905: 0xBEED, + 21368 - 11905: 0xD0B6, + 21369 - 11905: 0x8572, + 21370 - 11905: 0xDAE1, + 21371 - 11905: 0x8573, + 21372 - 11905: 0x8574, + 21373 - 11905: 0x8575, + 21374 - 11905: 0x8576, + 21375 - 11905: 0xC7E4, + 21376 - 11905: 0x8577, + 21377 - 11905: 0x8578, + 21378 - 11905: 0xB3A7, + 21379 - 11905: 0x8579, + 21380 - 11905: 0xB6F2, + 21381 - 11905: 0xCCFC, + 21382 - 11905: 0xC0FA, + 21383 - 11905: 0x857A, + 21384 - 11905: 0x857B, + 21385 - 11905: 0xC0F7, + 21386 - 11905: 0x857C, + 21387 - 11905: 0xD1B9, + 21388 - 11905: 0xD1E1, + 21389 - 11905: 0xD8C7, + 21390 - 11905: 0x857D, + 21391 - 11905: 0x857E, + 21392 - 11905: 0x8580, + 21393 - 11905: 0x8581, + 21394 - 11905: 0x8582, + 21395 - 11905: 0x8583, + 21396 - 11905: 0x8584, + 21397 - 11905: 0xB2DE, + 21398 - 11905: 0x8585, + 21399 - 11905: 0x8586, + 21400 - 11905: 0xC0E5, + 21401 - 11905: 0x8587, + 21402 - 11905: 0xBAF1, + 21403 - 11905: 0x8588, + 21404 - 11905: 0x8589, + 21405 - 11905: 0xD8C8, + 21406 - 11905: 0x858A, + 21407 - 11905: 0xD4AD, + 21408 - 11905: 0x858B, + 21409 - 11905: 0x858C, + 21410 - 11905: 0xCFE1, + 21411 - 11905: 0xD8C9, + 21412 - 11905: 0x858D, + 21413 - 11905: 0xD8CA, + 21414 - 11905: 0xCFC3, + 21415 - 11905: 0x858E, + 21416 - 11905: 0xB3F8, + 21417 - 11905: 0xBEC7, + 21418 - 11905: 0x858F, + 21419 - 11905: 0x8590, + 21420 - 11905: 0x8591, + 21421 - 11905: 0x8592, + 21422 - 11905: 0xD8CB, + 21423 - 11905: 0x8593, + 21424 - 11905: 0x8594, + 21425 - 11905: 0x8595, + 21426 - 11905: 0x8596, + 21427 - 11905: 0x8597, + 21428 - 11905: 0x8598, + 21429 - 11905: 0x8599, + 21430 - 11905: 0xDBCC, + 21431 - 11905: 0x859A, + 21432 - 11905: 0x859B, + 21433 - 11905: 0x859C, + 21434 - 11905: 0x859D, + 21435 - 11905: 0xC8A5, + 21436 - 11905: 0x859E, + 21437 - 11905: 0x859F, + 21438 - 11905: 0x85A0, + 21439 - 11905: 0xCFD8, + 21440 - 11905: 0x85A1, + 21441 - 11905: 0xC8FE, + 21442 - 11905: 0xB2CE, + 21443 - 11905: 0x85A2, + 21444 - 11905: 0x85A3, + 21445 - 11905: 0x85A4, + 21446 - 11905: 0x85A5, + 21447 - 11905: 0x85A6, + 21448 - 11905: 0xD3D6, + 21449 - 11905: 0xB2E6, + 21450 - 11905: 0xBCB0, + 21451 - 11905: 0xD3D1, + 21452 - 11905: 0xCBAB, + 21453 - 11905: 0xB7B4, + 21454 - 11905: 0x85A7, + 21455 - 11905: 0x85A8, + 21456 - 11905: 0x85A9, + 21457 - 11905: 0xB7A2, + 21458 - 11905: 0x85AA, + 21459 - 11905: 0x85AB, + 21460 - 11905: 0xCAE5, + 21461 - 11905: 0x85AC, + 21462 - 11905: 0xC8A1, + 21463 - 11905: 0xCADC, + 21464 - 11905: 0xB1E4, + 21465 - 11905: 0xD0F0, + 21466 - 11905: 0x85AD, + 21467 - 11905: 0xC5D1, + 21468 - 11905: 0x85AE, + 21469 - 11905: 0x85AF, + 21470 - 11905: 0x85B0, + 21471 - 11905: 0xDBC5, + 21472 - 11905: 0xB5FE, + 21473 - 11905: 0x85B1, + 21474 - 11905: 0x85B2, + 21475 - 11905: 0xBFDA, + 21476 - 11905: 0xB9C5, + 21477 - 11905: 0xBEE4, + 21478 - 11905: 0xC1ED, + 21479 - 11905: 0x85B3, + 21480 - 11905: 0xDFB6, + 21481 - 11905: 0xDFB5, + 21482 - 11905: 0xD6BB, + 21483 - 11905: 0xBDD0, + 21484 - 11905: 0xD5D9, + 21485 - 11905: 0xB0C8, + 21486 - 11905: 0xB6A3, + 21487 - 11905: 0xBFC9, + 21488 - 11905: 0xCCA8, + 21489 - 11905: 0xDFB3, + 21490 - 11905: 0xCAB7, + 21491 - 11905: 0xD3D2, + 21492 - 11905: 0x85B4, + 21493 - 11905: 0xD8CF, + 21494 - 11905: 0xD2B6, + 21495 - 11905: 0xBAC5, + 21496 - 11905: 0xCBBE, + 21497 - 11905: 0xCCBE, + 21498 - 11905: 0x85B5, + 21499 - 11905: 0xDFB7, + 21500 - 11905: 0xB5F0, + 21501 - 11905: 0xDFB4, + 21502 - 11905: 0x85B6, + 21503 - 11905: 0x85B7, + 21504 - 11905: 0x85B8, + 21505 - 11905: 0xD3F5, + 21506 - 11905: 0x85B9, + 21507 - 11905: 0xB3D4, + 21508 - 11905: 0xB8F7, + 21509 - 11905: 0x85BA, + 21510 - 11905: 0xDFBA, + 21511 - 11905: 0x85BB, + 21512 - 11905: 0xBACF, + 21513 - 11905: 0xBCAA, + 21514 - 11905: 0xB5F5, + 21515 - 11905: 0x85BC, + 21516 - 11905: 0xCDAC, + 21517 - 11905: 0xC3FB, + 21518 - 11905: 0xBAF3, + 21519 - 11905: 0xC0F4, + 21520 - 11905: 0xCDC2, + 21521 - 11905: 0xCFF2, + 21522 - 11905: 0xDFB8, + 21523 - 11905: 0xCFC5, + 21524 - 11905: 0x85BD, + 21525 - 11905: 0xC2C0, + 21526 - 11905: 0xDFB9, + 21527 - 11905: 0xC2F0, + 21528 - 11905: 0x85BE, + 21529 - 11905: 0x85BF, + 21530 - 11905: 0x85C0, + 21531 - 11905: 0xBEFD, + 21532 - 11905: 0x85C1, + 21533 - 11905: 0xC1DF, + 21534 - 11905: 0xCDCC, + 21535 - 11905: 0xD2F7, + 21536 - 11905: 0xB7CD, + 21537 - 11905: 0xDFC1, + 21538 - 11905: 0x85C2, + 21539 - 11905: 0xDFC4, + 21540 - 11905: 0x85C3, + 21541 - 11905: 0x85C4, + 21542 - 11905: 0xB7F1, + 21543 - 11905: 0xB0C9, + 21544 - 11905: 0xB6D6, + 21545 - 11905: 0xB7D4, + 21546 - 11905: 0x85C5, + 21547 - 11905: 0xBAAC, + 21548 - 11905: 0xCCFD, + 21549 - 11905: 0xBFD4, + 21550 - 11905: 0xCBB1, + 21551 - 11905: 0xC6F4, + 21552 - 11905: 0x85C6, + 21553 - 11905: 0xD6A8, + 21554 - 11905: 0xDFC5, + 21555 - 11905: 0x85C7, + 21556 - 11905: 0xCEE2, + 21557 - 11905: 0xB3B3, + 21558 - 11905: 0x85C8, + 21559 - 11905: 0x85C9, + 21560 - 11905: 0xCEFC, + 21561 - 11905: 0xB4B5, + 21562 - 11905: 0x85CA, + 21563 - 11905: 0xCEC7, + 21564 - 11905: 0xBAF0, + 21565 - 11905: 0x85CB, + 21566 - 11905: 0xCEE1, + 21567 - 11905: 0x85CC, + 21568 - 11905: 0xD1BD, + 21569 - 11905: 0x85CD, + 21570 - 11905: 0x85CE, + 21571 - 11905: 0xDFC0, + 21572 - 11905: 0x85CF, + 21573 - 11905: 0x85D0, + 21574 - 11905: 0xB4F4, + 21575 - 11905: 0x85D1, + 21576 - 11905: 0xB3CA, + 21577 - 11905: 0x85D2, + 21578 - 11905: 0xB8E6, + 21579 - 11905: 0xDFBB, + 21580 - 11905: 0x85D3, + 21581 - 11905: 0x85D4, + 21582 - 11905: 0x85D5, + 21583 - 11905: 0x85D6, + 21584 - 11905: 0xC4C5, + 21585 - 11905: 0x85D7, + 21586 - 11905: 0xDFBC, + 21587 - 11905: 0xDFBD, + 21588 - 11905: 0xDFBE, + 21589 - 11905: 0xC5BB, + 21590 - 11905: 0xDFBF, + 21591 - 11905: 0xDFC2, + 21592 - 11905: 0xD4B1, + 21593 - 11905: 0xDFC3, + 21594 - 11905: 0x85D8, + 21595 - 11905: 0xC7BA, + 21596 - 11905: 0xCED8, + 21597 - 11905: 0x85D9, + 21598 - 11905: 0x85DA, + 21599 - 11905: 0x85DB, + 21600 - 11905: 0x85DC, + 21601 - 11905: 0x85DD, + 21602 - 11905: 0xC4D8, + 21603 - 11905: 0x85DE, + 21604 - 11905: 0xDFCA, + 21605 - 11905: 0x85DF, + 21606 - 11905: 0xDFCF, + 21607 - 11905: 0x85E0, + 21608 - 11905: 0xD6DC, + 21609 - 11905: 0x85E1, + 21610 - 11905: 0x85E2, + 21611 - 11905: 0x85E3, + 21612 - 11905: 0x85E4, + 21613 - 11905: 0x85E5, + 21614 - 11905: 0x85E6, + 21615 - 11905: 0x85E7, + 21616 - 11905: 0x85E8, + 21617 - 11905: 0xDFC9, + 21618 - 11905: 0xDFDA, + 21619 - 11905: 0xCEB6, + 21620 - 11905: 0x85E9, + 21621 - 11905: 0xBAC7, + 21622 - 11905: 0xDFCE, + 21623 - 11905: 0xDFC8, + 21624 - 11905: 0xC5DE, + 21625 - 11905: 0x85EA, + 21626 - 11905: 0x85EB, + 21627 - 11905: 0xC9EB, + 21628 - 11905: 0xBAF4, + 21629 - 11905: 0xC3FC, + 21630 - 11905: 0x85EC, + 21631 - 11905: 0x85ED, + 21632 - 11905: 0xBED7, + 21633 - 11905: 0x85EE, + 21634 - 11905: 0xDFC6, + 21635 - 11905: 0x85EF, + 21636 - 11905: 0xDFCD, + 21637 - 11905: 0x85F0, + 21638 - 11905: 0xC5D8, + 21639 - 11905: 0x85F1, + 21640 - 11905: 0x85F2, + 21641 - 11905: 0x85F3, + 21642 - 11905: 0x85F4, + 21643 - 11905: 0xD5A6, + 21644 - 11905: 0xBACD, + 21645 - 11905: 0x85F5, + 21646 - 11905: 0xBECC, + 21647 - 11905: 0xD3BD, + 21648 - 11905: 0xB8C0, + 21649 - 11905: 0x85F6, + 21650 - 11905: 0xD6E4, + 21651 - 11905: 0x85F7, + 21652 - 11905: 0xDFC7, + 21653 - 11905: 0xB9BE, + 21654 - 11905: 0xBFA7, + 21655 - 11905: 0x85F8, + 21656 - 11905: 0x85F9, + 21657 - 11905: 0xC1FC, + 21658 - 11905: 0xDFCB, + 21659 - 11905: 0xDFCC, + 21660 - 11905: 0x85FA, + 21661 - 11905: 0xDFD0, + 21662 - 11905: 0x85FB, + 21663 - 11905: 0x85FC, + 21664 - 11905: 0x85FD, + 21665 - 11905: 0x85FE, + 21666 - 11905: 0x8640, + 21667 - 11905: 0xDFDB, + 21668 - 11905: 0xDFE5, + 21669 - 11905: 0x8641, + 21670 - 11905: 0xDFD7, + 21671 - 11905: 0xDFD6, + 21672 - 11905: 0xD7C9, + 21673 - 11905: 0xDFE3, + 21674 - 11905: 0xDFE4, + 21675 - 11905: 0xE5EB, + 21676 - 11905: 0xD2A7, + 21677 - 11905: 0xDFD2, + 21678 - 11905: 0x8642, + 21679 - 11905: 0xBFA9, + 21680 - 11905: 0x8643, + 21681 - 11905: 0xD4DB, + 21682 - 11905: 0x8644, + 21683 - 11905: 0xBFC8, + 21684 - 11905: 0xDFD4, + 21685 - 11905: 0x8645, + 21686 - 11905: 0x8646, + 21687 - 11905: 0x8647, + 21688 - 11905: 0xCFCC, + 21689 - 11905: 0x8648, + 21690 - 11905: 0x8649, + 21691 - 11905: 0xDFDD, + 21692 - 11905: 0x864A, + 21693 - 11905: 0xD1CA, + 21694 - 11905: 0x864B, + 21695 - 11905: 0xDFDE, + 21696 - 11905: 0xB0A7, + 21697 - 11905: 0xC6B7, + 21698 - 11905: 0xDFD3, + 21699 - 11905: 0x864C, + 21700 - 11905: 0xBAE5, + 21701 - 11905: 0x864D, + 21702 - 11905: 0xB6DF, + 21703 - 11905: 0xCDDB, + 21704 - 11905: 0xB9FE, + 21705 - 11905: 0xD4D5, + 21706 - 11905: 0x864E, + 21707 - 11905: 0x864F, + 21708 - 11905: 0xDFDF, + 21709 - 11905: 0xCFEC, + 21710 - 11905: 0xB0A5, + 21711 - 11905: 0xDFE7, + 21712 - 11905: 0xDFD1, + 21713 - 11905: 0xD1C6, + 21714 - 11905: 0xDFD5, + 21715 - 11905: 0xDFD8, + 21716 - 11905: 0xDFD9, + 21717 - 11905: 0xDFDC, + 21718 - 11905: 0x8650, + 21719 - 11905: 0xBBA9, + 21720 - 11905: 0x8651, + 21721 - 11905: 0xDFE0, + 21722 - 11905: 0xDFE1, + 21723 - 11905: 0x8652, + 21724 - 11905: 0xDFE2, + 21725 - 11905: 0xDFE6, + 21726 - 11905: 0xDFE8, + 21727 - 11905: 0xD3B4, + 21728 - 11905: 0x8653, + 21729 - 11905: 0x8654, + 21730 - 11905: 0x8655, + 21731 - 11905: 0x8656, + 21732 - 11905: 0x8657, + 21733 - 11905: 0xB8E7, + 21734 - 11905: 0xC5B6, + 21735 - 11905: 0xDFEA, + 21736 - 11905: 0xC9DA, + 21737 - 11905: 0xC1A8, + 21738 - 11905: 0xC4C4, + 21739 - 11905: 0x8658, + 21740 - 11905: 0x8659, + 21741 - 11905: 0xBFDE, + 21742 - 11905: 0xCFF8, + 21743 - 11905: 0x865A, + 21744 - 11905: 0x865B, + 21745 - 11905: 0x865C, + 21746 - 11905: 0xD5DC, + 21747 - 11905: 0xDFEE, + 21748 - 11905: 0x865D, + 21749 - 11905: 0x865E, + 21750 - 11905: 0x865F, + 21751 - 11905: 0x8660, + 21752 - 11905: 0x8661, + 21753 - 11905: 0x8662, + 21754 - 11905: 0xB2B8, + 21755 - 11905: 0x8663, + 21756 - 11905: 0xBADF, + 21757 - 11905: 0xDFEC, + 21758 - 11905: 0x8664, + 21759 - 11905: 0xDBC1, + 21760 - 11905: 0x8665, + 21761 - 11905: 0xD1E4, + 21762 - 11905: 0x8666, + 21763 - 11905: 0x8667, + 21764 - 11905: 0x8668, + 21765 - 11905: 0x8669, + 21766 - 11905: 0xCBF4, + 21767 - 11905: 0xB4BD, + 21768 - 11905: 0x866A, + 21769 - 11905: 0xB0A6, + 21770 - 11905: 0x866B, + 21771 - 11905: 0x866C, + 21772 - 11905: 0x866D, + 21773 - 11905: 0x866E, + 21774 - 11905: 0x866F, + 21775 - 11905: 0xDFF1, + 21776 - 11905: 0xCCC6, + 21777 - 11905: 0xDFF2, + 21778 - 11905: 0x8670, + 21779 - 11905: 0x8671, + 21780 - 11905: 0xDFED, + 21781 - 11905: 0x8672, + 21782 - 11905: 0x8673, + 21783 - 11905: 0x8674, + 21784 - 11905: 0x8675, + 21785 - 11905: 0x8676, + 21786 - 11905: 0x8677, + 21787 - 11905: 0xDFE9, + 21788 - 11905: 0x8678, + 21789 - 11905: 0x8679, + 21790 - 11905: 0x867A, + 21791 - 11905: 0x867B, + 21792 - 11905: 0xDFEB, + 21793 - 11905: 0x867C, + 21794 - 11905: 0xDFEF, + 21795 - 11905: 0xDFF0, + 21796 - 11905: 0xBBBD, + 21797 - 11905: 0x867D, + 21798 - 11905: 0x867E, + 21799 - 11905: 0xDFF3, + 21800 - 11905: 0x8680, + 21801 - 11905: 0x8681, + 21802 - 11905: 0xDFF4, + 21803 - 11905: 0x8682, + 21804 - 11905: 0xBBA3, + 21805 - 11905: 0x8683, + 21806 - 11905: 0xCADB, + 21807 - 11905: 0xCEA8, + 21808 - 11905: 0xE0A7, + 21809 - 11905: 0xB3AA, + 21810 - 11905: 0x8684, + 21811 - 11905: 0xE0A6, + 21812 - 11905: 0x8685, + 21813 - 11905: 0x8686, + 21814 - 11905: 0x8687, + 21815 - 11905: 0xE0A1, + 21816 - 11905: 0x8688, + 21817 - 11905: 0x8689, + 21818 - 11905: 0x868A, + 21819 - 11905: 0x868B, + 21820 - 11905: 0xDFFE, + 21821 - 11905: 0x868C, + 21822 - 11905: 0xCDD9, + 21823 - 11905: 0xDFFC, + 21824 - 11905: 0x868D, + 21825 - 11905: 0xDFFA, + 21826 - 11905: 0x868E, + 21827 - 11905: 0xBFD0, + 21828 - 11905: 0xD7C4, + 21829 - 11905: 0x868F, + 21830 - 11905: 0xC9CC, + 21831 - 11905: 0x8690, + 21832 - 11905: 0x8691, + 21833 - 11905: 0xDFF8, + 21834 - 11905: 0xB0A1, + 21835 - 11905: 0x8692, + 21836 - 11905: 0x8693, + 21837 - 11905: 0x8694, + 21838 - 11905: 0x8695, + 21839 - 11905: 0x8696, + 21840 - 11905: 0xDFFD, + 21841 - 11905: 0x8697, + 21842 - 11905: 0x8698, + 21843 - 11905: 0x8699, + 21844 - 11905: 0x869A, + 21845 - 11905: 0xDFFB, + 21846 - 11905: 0xE0A2, + 21847 - 11905: 0x869B, + 21848 - 11905: 0x869C, + 21849 - 11905: 0x869D, + 21850 - 11905: 0x869E, + 21851 - 11905: 0x869F, + 21852 - 11905: 0xE0A8, + 21853 - 11905: 0x86A0, + 21854 - 11905: 0x86A1, + 21855 - 11905: 0x86A2, + 21856 - 11905: 0x86A3, + 21857 - 11905: 0xB7C8, + 21858 - 11905: 0x86A4, + 21859 - 11905: 0x86A5, + 21860 - 11905: 0xC6A1, + 21861 - 11905: 0xC9B6, + 21862 - 11905: 0xC0B2, + 21863 - 11905: 0xDFF5, + 21864 - 11905: 0x86A6, + 21865 - 11905: 0x86A7, + 21866 - 11905: 0xC5BE, + 21867 - 11905: 0x86A8, + 21868 - 11905: 0xD8C4, + 21869 - 11905: 0xDFF9, + 21870 - 11905: 0xC4F6, + 21871 - 11905: 0x86A9, + 21872 - 11905: 0x86AA, + 21873 - 11905: 0x86AB, + 21874 - 11905: 0x86AC, + 21875 - 11905: 0x86AD, + 21876 - 11905: 0x86AE, + 21877 - 11905: 0xE0A3, + 21878 - 11905: 0xE0A4, + 21879 - 11905: 0xE0A5, + 21880 - 11905: 0xD0A5, + 21881 - 11905: 0x86AF, + 21882 - 11905: 0x86B0, + 21883 - 11905: 0xE0B4, + 21884 - 11905: 0xCCE4, + 21885 - 11905: 0x86B1, + 21886 - 11905: 0xE0B1, + 21887 - 11905: 0x86B2, + 21888 - 11905: 0xBFA6, + 21889 - 11905: 0xE0AF, + 21890 - 11905: 0xCEB9, + 21891 - 11905: 0xE0AB, + 21892 - 11905: 0xC9C6, + 21893 - 11905: 0x86B3, + 21894 - 11905: 0x86B4, + 21895 - 11905: 0xC0AE, + 21896 - 11905: 0xE0AE, + 21897 - 11905: 0xBAED, + 21898 - 11905: 0xBAB0, + 21899 - 11905: 0xE0A9, + 21900 - 11905: 0x86B5, + 21901 - 11905: 0x86B6, + 21902 - 11905: 0x86B7, + 21903 - 11905: 0xDFF6, + 21904 - 11905: 0x86B8, + 21905 - 11905: 0xE0B3, + 21906 - 11905: 0x86B9, + 21907 - 11905: 0x86BA, + 21908 - 11905: 0xE0B8, + 21909 - 11905: 0x86BB, + 21910 - 11905: 0x86BC, + 21911 - 11905: 0x86BD, + 21912 - 11905: 0xB4AD, + 21913 - 11905: 0xE0B9, + 21914 - 11905: 0x86BE, + 21915 - 11905: 0x86BF, + 21916 - 11905: 0xCFB2, + 21917 - 11905: 0xBAC8, + 21918 - 11905: 0x86C0, + 21919 - 11905: 0xE0B0, + 21920 - 11905: 0x86C1, + 21921 - 11905: 0x86C2, + 21922 - 11905: 0x86C3, + 21923 - 11905: 0x86C4, + 21924 - 11905: 0x86C5, + 21925 - 11905: 0x86C6, + 21926 - 11905: 0x86C7, + 21927 - 11905: 0xD0FA, + 21928 - 11905: 0x86C8, + 21929 - 11905: 0x86C9, + 21930 - 11905: 0x86CA, + 21931 - 11905: 0x86CB, + 21932 - 11905: 0x86CC, + 21933 - 11905: 0x86CD, + 21934 - 11905: 0x86CE, + 21935 - 11905: 0x86CF, + 21936 - 11905: 0x86D0, + 21937 - 11905: 0xE0AC, + 21938 - 11905: 0x86D1, + 21939 - 11905: 0xD4FB, + 21940 - 11905: 0x86D2, + 21941 - 11905: 0xDFF7, + 21942 - 11905: 0x86D3, + 21943 - 11905: 0xC5E7, + 21944 - 11905: 0x86D4, + 21945 - 11905: 0xE0AD, + 21946 - 11905: 0x86D5, + 21947 - 11905: 0xD3F7, + 21948 - 11905: 0x86D6, + 21949 - 11905: 0xE0B6, + 21950 - 11905: 0xE0B7, + 21951 - 11905: 0x86D7, + 21952 - 11905: 0x86D8, + 21953 - 11905: 0x86D9, + 21954 - 11905: 0x86DA, + 21955 - 11905: 0x86DB, + 21956 - 11905: 0xE0C4, + 21957 - 11905: 0xD0E1, + 21958 - 11905: 0x86DC, + 21959 - 11905: 0x86DD, + 21960 - 11905: 0x86DE, + 21961 - 11905: 0xE0BC, + 21962 - 11905: 0x86DF, + 21963 - 11905: 0x86E0, + 21964 - 11905: 0xE0C9, + 21965 - 11905: 0xE0CA, + 21966 - 11905: 0x86E1, + 21967 - 11905: 0x86E2, + 21968 - 11905: 0x86E3, + 21969 - 11905: 0xE0BE, + 21970 - 11905: 0xE0AA, + 21971 - 11905: 0xC9A4, + 21972 - 11905: 0xE0C1, + 21973 - 11905: 0x86E4, + 21974 - 11905: 0xE0B2, + 21975 - 11905: 0x86E5, + 21976 - 11905: 0x86E6, + 21977 - 11905: 0x86E7, + 21978 - 11905: 0x86E8, + 21979 - 11905: 0x86E9, + 21980 - 11905: 0xCAC8, + 21981 - 11905: 0xE0C3, + 21982 - 11905: 0x86EA, + 21983 - 11905: 0xE0B5, + 21984 - 11905: 0x86EB, + 21985 - 11905: 0xCECB, + 21986 - 11905: 0x86EC, + 21987 - 11905: 0xCBC3, + 21988 - 11905: 0xE0CD, + 21989 - 11905: 0xE0C6, + 21990 - 11905: 0xE0C2, + 21991 - 11905: 0x86ED, + 21992 - 11905: 0xE0CB, + 21993 - 11905: 0x86EE, + 21994 - 11905: 0xE0BA, + 21995 - 11905: 0xE0BF, + 21996 - 11905: 0xE0C0, + 21997 - 11905: 0x86EF, + 21998 - 11905: 0x86F0, + 21999 - 11905: 0xE0C5, + 22000 - 11905: 0x86F1, + 22001 - 11905: 0x86F2, + 22002 - 11905: 0xE0C7, + 22003 - 11905: 0xE0C8, + 22004 - 11905: 0x86F3, + 22005 - 11905: 0xE0CC, + 22006 - 11905: 0x86F4, + 22007 - 11905: 0xE0BB, + 22008 - 11905: 0x86F5, + 22009 - 11905: 0x86F6, + 22010 - 11905: 0x86F7, + 22011 - 11905: 0x86F8, + 22012 - 11905: 0x86F9, + 22013 - 11905: 0xCBD4, + 22014 - 11905: 0xE0D5, + 22015 - 11905: 0x86FA, + 22016 - 11905: 0xE0D6, + 22017 - 11905: 0xE0D2, + 22018 - 11905: 0x86FB, + 22019 - 11905: 0x86FC, + 22020 - 11905: 0x86FD, + 22021 - 11905: 0x86FE, + 22022 - 11905: 0x8740, + 22023 - 11905: 0x8741, + 22024 - 11905: 0xE0D0, + 22025 - 11905: 0xBCCE, + 22026 - 11905: 0x8742, + 22027 - 11905: 0x8743, + 22028 - 11905: 0xE0D1, + 22029 - 11905: 0x8744, + 22030 - 11905: 0xB8C2, + 22031 - 11905: 0xD8C5, + 22032 - 11905: 0x8745, + 22033 - 11905: 0x8746, + 22034 - 11905: 0x8747, + 22035 - 11905: 0x8748, + 22036 - 11905: 0x8749, + 22037 - 11905: 0x874A, + 22038 - 11905: 0x874B, + 22039 - 11905: 0x874C, + 22040 - 11905: 0xD0EA, + 22041 - 11905: 0x874D, + 22042 - 11905: 0x874E, + 22043 - 11905: 0xC2EF, + 22044 - 11905: 0x874F, + 22045 - 11905: 0x8750, + 22046 - 11905: 0xE0CF, + 22047 - 11905: 0xE0BD, + 22048 - 11905: 0x8751, + 22049 - 11905: 0x8752, + 22050 - 11905: 0x8753, + 22051 - 11905: 0xE0D4, + 22052 - 11905: 0xE0D3, + 22053 - 11905: 0x8754, + 22054 - 11905: 0x8755, + 22055 - 11905: 0xE0D7, + 22056 - 11905: 0x8756, + 22057 - 11905: 0x8757, + 22058 - 11905: 0x8758, + 22059 - 11905: 0x8759, + 22060 - 11905: 0xE0DC, + 22061 - 11905: 0xE0D8, + 22062 - 11905: 0x875A, + 22063 - 11905: 0x875B, + 22064 - 11905: 0x875C, + 22065 - 11905: 0xD6F6, + 22066 - 11905: 0xB3B0, + 22067 - 11905: 0x875D, + 22068 - 11905: 0xD7EC, + 22069 - 11905: 0x875E, + 22070 - 11905: 0xCBBB, + 22071 - 11905: 0x875F, + 22072 - 11905: 0x8760, + 22073 - 11905: 0xE0DA, + 22074 - 11905: 0x8761, + 22075 - 11905: 0xCEFB, + 22076 - 11905: 0x8762, + 22077 - 11905: 0x8763, + 22078 - 11905: 0x8764, + 22079 - 11905: 0xBAD9, + 22080 - 11905: 0x8765, + 22081 - 11905: 0x8766, + 22082 - 11905: 0x8767, + 22083 - 11905: 0x8768, + 22084 - 11905: 0x8769, + 22085 - 11905: 0x876A, + 22086 - 11905: 0x876B, + 22087 - 11905: 0x876C, + 22088 - 11905: 0x876D, + 22089 - 11905: 0x876E, + 22090 - 11905: 0x876F, + 22091 - 11905: 0x8770, + 22092 - 11905: 0xE0E1, + 22093 - 11905: 0xE0DD, + 22094 - 11905: 0xD2AD, + 22095 - 11905: 0x8771, + 22096 - 11905: 0x8772, + 22097 - 11905: 0x8773, + 22098 - 11905: 0x8774, + 22099 - 11905: 0x8775, + 22100 - 11905: 0xE0E2, + 22101 - 11905: 0x8776, + 22102 - 11905: 0x8777, + 22103 - 11905: 0xE0DB, + 22104 - 11905: 0xE0D9, + 22105 - 11905: 0xE0DF, + 22106 - 11905: 0x8778, + 22107 - 11905: 0x8779, + 22108 - 11905: 0xE0E0, + 22109 - 11905: 0x877A, + 22110 - 11905: 0x877B, + 22111 - 11905: 0x877C, + 22112 - 11905: 0x877D, + 22113 - 11905: 0x877E, + 22114 - 11905: 0xE0DE, + 22115 - 11905: 0x8780, + 22116 - 11905: 0xE0E4, + 22117 - 11905: 0x8781, + 22118 - 11905: 0x8782, + 22119 - 11905: 0x8783, + 22120 - 11905: 0xC6F7, + 22121 - 11905: 0xD8AC, + 22122 - 11905: 0xD4EB, + 22123 - 11905: 0xE0E6, + 22124 - 11905: 0xCAC9, + 22125 - 11905: 0x8784, + 22126 - 11905: 0x8785, + 22127 - 11905: 0x8786, + 22128 - 11905: 0x8787, + 22129 - 11905: 0xE0E5, + 22130 - 11905: 0x8788, + 22131 - 11905: 0x8789, + 22132 - 11905: 0x878A, + 22133 - 11905: 0x878B, + 22134 - 11905: 0xB8C1, + 22135 - 11905: 0x878C, + 22136 - 11905: 0x878D, + 22137 - 11905: 0x878E, + 22138 - 11905: 0x878F, + 22139 - 11905: 0xE0E7, + 22140 - 11905: 0xE0E8, + 22141 - 11905: 0x8790, + 22142 - 11905: 0x8791, + 22143 - 11905: 0x8792, + 22144 - 11905: 0x8793, + 22145 - 11905: 0x8794, + 22146 - 11905: 0x8795, + 22147 - 11905: 0x8796, + 22148 - 11905: 0x8797, + 22149 - 11905: 0xE0E9, + 22150 - 11905: 0xE0E3, + 22151 - 11905: 0x8798, + 22152 - 11905: 0x8799, + 22153 - 11905: 0x879A, + 22154 - 11905: 0x879B, + 22155 - 11905: 0x879C, + 22156 - 11905: 0x879D, + 22157 - 11905: 0x879E, + 22158 - 11905: 0xBABF, + 22159 - 11905: 0xCCE7, + 22160 - 11905: 0x879F, + 22161 - 11905: 0x87A0, + 22162 - 11905: 0x87A1, + 22163 - 11905: 0xE0EA, + 22164 - 11905: 0x87A2, + 22165 - 11905: 0x87A3, + 22166 - 11905: 0x87A4, + 22167 - 11905: 0x87A5, + 22168 - 11905: 0x87A6, + 22169 - 11905: 0x87A7, + 22170 - 11905: 0x87A8, + 22171 - 11905: 0x87A9, + 22172 - 11905: 0x87AA, + 22173 - 11905: 0x87AB, + 22174 - 11905: 0x87AC, + 22175 - 11905: 0x87AD, + 22176 - 11905: 0x87AE, + 22177 - 11905: 0x87AF, + 22178 - 11905: 0x87B0, + 22179 - 11905: 0xCFF9, + 22180 - 11905: 0x87B1, + 22181 - 11905: 0x87B2, + 22182 - 11905: 0x87B3, + 22183 - 11905: 0x87B4, + 22184 - 11905: 0x87B5, + 22185 - 11905: 0x87B6, + 22186 - 11905: 0x87B7, + 22187 - 11905: 0x87B8, + 22188 - 11905: 0x87B9, + 22189 - 11905: 0x87BA, + 22190 - 11905: 0x87BB, + 22191 - 11905: 0xE0EB, + 22192 - 11905: 0x87BC, + 22193 - 11905: 0x87BD, + 22194 - 11905: 0x87BE, + 22195 - 11905: 0x87BF, + 22196 - 11905: 0x87C0, + 22197 - 11905: 0x87C1, + 22198 - 11905: 0x87C2, + 22199 - 11905: 0xC8C2, + 22200 - 11905: 0x87C3, + 22201 - 11905: 0x87C4, + 22202 - 11905: 0x87C5, + 22203 - 11905: 0x87C6, + 22204 - 11905: 0xBDC0, + 22205 - 11905: 0x87C7, + 22206 - 11905: 0x87C8, + 22207 - 11905: 0x87C9, + 22208 - 11905: 0x87CA, + 22209 - 11905: 0x87CB, + 22210 - 11905: 0x87CC, + 22211 - 11905: 0x87CD, + 22212 - 11905: 0x87CE, + 22213 - 11905: 0x87CF, + 22214 - 11905: 0x87D0, + 22215 - 11905: 0x87D1, + 22216 - 11905: 0x87D2, + 22217 - 11905: 0x87D3, + 22218 - 11905: 0xC4D2, + 22219 - 11905: 0x87D4, + 22220 - 11905: 0x87D5, + 22221 - 11905: 0x87D6, + 22222 - 11905: 0x87D7, + 22223 - 11905: 0x87D8, + 22224 - 11905: 0x87D9, + 22225 - 11905: 0x87DA, + 22226 - 11905: 0x87DB, + 22227 - 11905: 0x87DC, + 22228 - 11905: 0xE0EC, + 22229 - 11905: 0x87DD, + 22230 - 11905: 0x87DE, + 22231 - 11905: 0xE0ED, + 22232 - 11905: 0x87DF, + 22233 - 11905: 0x87E0, + 22234 - 11905: 0xC7F4, + 22235 - 11905: 0xCBC4, + 22236 - 11905: 0x87E1, + 22237 - 11905: 0xE0EE, + 22238 - 11905: 0xBBD8, + 22239 - 11905: 0xD8B6, + 22240 - 11905: 0xD2F2, + 22241 - 11905: 0xE0EF, + 22242 - 11905: 0xCDC5, + 22243 - 11905: 0x87E2, + 22244 - 11905: 0xB6DA, + 22245 - 11905: 0x87E3, + 22246 - 11905: 0x87E4, + 22247 - 11905: 0x87E5, + 22248 - 11905: 0x87E6, + 22249 - 11905: 0x87E7, + 22250 - 11905: 0x87E8, + 22251 - 11905: 0xE0F1, + 22252 - 11905: 0x87E9, + 22253 - 11905: 0xD4B0, + 22254 - 11905: 0x87EA, + 22255 - 11905: 0x87EB, + 22256 - 11905: 0xC0A7, + 22257 - 11905: 0xB4D1, + 22258 - 11905: 0x87EC, + 22259 - 11905: 0x87ED, + 22260 - 11905: 0xCEA7, + 22261 - 11905: 0xE0F0, + 22262 - 11905: 0x87EE, + 22263 - 11905: 0x87EF, + 22264 - 11905: 0x87F0, + 22265 - 11905: 0xE0F2, + 22266 - 11905: 0xB9CC, + 22267 - 11905: 0x87F1, + 22268 - 11905: 0x87F2, + 22269 - 11905: 0xB9FA, + 22270 - 11905: 0xCDBC, + 22271 - 11905: 0xE0F3, + 22272 - 11905: 0x87F3, + 22273 - 11905: 0x87F4, + 22274 - 11905: 0x87F5, + 22275 - 11905: 0xC6D4, + 22276 - 11905: 0xE0F4, + 22277 - 11905: 0x87F6, + 22278 - 11905: 0xD4B2, + 22279 - 11905: 0x87F7, + 22280 - 11905: 0xC8A6, + 22281 - 11905: 0xE0F6, + 22282 - 11905: 0xE0F5, + 22283 - 11905: 0x87F8, + 22284 - 11905: 0x87F9, + 22285 - 11905: 0x87FA, + 22286 - 11905: 0x87FB, + 22287 - 11905: 0x87FC, + 22288 - 11905: 0x87FD, + 22289 - 11905: 0x87FE, + 22290 - 11905: 0x8840, + 22291 - 11905: 0x8841, + 22292 - 11905: 0x8842, + 22293 - 11905: 0x8843, + 22294 - 11905: 0x8844, + 22295 - 11905: 0x8845, + 22296 - 11905: 0x8846, + 22297 - 11905: 0x8847, + 22298 - 11905: 0x8848, + 22299 - 11905: 0x8849, + 22300 - 11905: 0xE0F7, + 22301 - 11905: 0x884A, + 22302 - 11905: 0x884B, + 22303 - 11905: 0xCDC1, + 22304 - 11905: 0x884C, + 22305 - 11905: 0x884D, + 22306 - 11905: 0x884E, + 22307 - 11905: 0xCAA5, + 22308 - 11905: 0x884F, + 22309 - 11905: 0x8850, + 22310 - 11905: 0x8851, + 22311 - 11905: 0x8852, + 22312 - 11905: 0xD4DA, + 22313 - 11905: 0xDBD7, + 22314 - 11905: 0xDBD9, + 22315 - 11905: 0x8853, + 22316 - 11905: 0xDBD8, + 22317 - 11905: 0xB9E7, + 22318 - 11905: 0xDBDC, + 22319 - 11905: 0xDBDD, + 22320 - 11905: 0xB5D8, + 22321 - 11905: 0x8854, + 22322 - 11905: 0x8855, + 22323 - 11905: 0xDBDA, + 22324 - 11905: 0x8856, + 22325 - 11905: 0x8857, + 22326 - 11905: 0x8858, + 22327 - 11905: 0x8859, + 22328 - 11905: 0x885A, + 22329 - 11905: 0xDBDB, + 22330 - 11905: 0xB3A1, + 22331 - 11905: 0xDBDF, + 22332 - 11905: 0x885B, + 22333 - 11905: 0x885C, + 22334 - 11905: 0xBBF8, + 22335 - 11905: 0x885D, + 22336 - 11905: 0xD6B7, + 22337 - 11905: 0x885E, + 22338 - 11905: 0xDBE0, + 22339 - 11905: 0x885F, + 22340 - 11905: 0x8860, + 22341 - 11905: 0x8861, + 22342 - 11905: 0x8862, + 22343 - 11905: 0xBEF9, + 22344 - 11905: 0x8863, + 22345 - 11905: 0x8864, + 22346 - 11905: 0xB7BB, + 22347 - 11905: 0x8865, + 22348 - 11905: 0xDBD0, + 22349 - 11905: 0xCCAE, + 22350 - 11905: 0xBFB2, + 22351 - 11905: 0xBBB5, + 22352 - 11905: 0xD7F8, + 22353 - 11905: 0xBFD3, + 22354 - 11905: 0x8866, + 22355 - 11905: 0x8867, + 22356 - 11905: 0x8868, + 22357 - 11905: 0x8869, + 22358 - 11905: 0x886A, + 22359 - 11905: 0xBFE9, + 22360 - 11905: 0x886B, + 22361 - 11905: 0x886C, + 22362 - 11905: 0xBCE1, + 22363 - 11905: 0xCCB3, + 22364 - 11905: 0xDBDE, + 22365 - 11905: 0xB0D3, + 22366 - 11905: 0xCEEB, + 22367 - 11905: 0xB7D8, + 22368 - 11905: 0xD7B9, + 22369 - 11905: 0xC6C2, + 22370 - 11905: 0x886D, + 22371 - 11905: 0x886E, + 22372 - 11905: 0xC0A4, + 22373 - 11905: 0x886F, + 22374 - 11905: 0xCCB9, + 22375 - 11905: 0x8870, + 22376 - 11905: 0xDBE7, + 22377 - 11905: 0xDBE1, + 22378 - 11905: 0xC6BA, + 22379 - 11905: 0xDBE3, + 22380 - 11905: 0x8871, + 22381 - 11905: 0xDBE8, + 22382 - 11905: 0x8872, + 22383 - 11905: 0xC5F7, + 22384 - 11905: 0x8873, + 22385 - 11905: 0x8874, + 22386 - 11905: 0x8875, + 22387 - 11905: 0xDBEA, + 22388 - 11905: 0x8876, + 22389 - 11905: 0x8877, + 22390 - 11905: 0xDBE9, + 22391 - 11905: 0xBFC0, + 22392 - 11905: 0x8878, + 22393 - 11905: 0x8879, + 22394 - 11905: 0x887A, + 22395 - 11905: 0xDBE6, + 22396 - 11905: 0xDBE5, + 22397 - 11905: 0x887B, + 22398 - 11905: 0x887C, + 22399 - 11905: 0x887D, + 22400 - 11905: 0x887E, + 22401 - 11905: 0x8880, + 22402 - 11905: 0xB4B9, + 22403 - 11905: 0xC0AC, + 22404 - 11905: 0xC2A2, + 22405 - 11905: 0xDBE2, + 22406 - 11905: 0xDBE4, + 22407 - 11905: 0x8881, + 22408 - 11905: 0x8882, + 22409 - 11905: 0x8883, + 22410 - 11905: 0x8884, + 22411 - 11905: 0xD0CD, + 22412 - 11905: 0xDBED, + 22413 - 11905: 0x8885, + 22414 - 11905: 0x8886, + 22415 - 11905: 0x8887, + 22416 - 11905: 0x8888, + 22417 - 11905: 0x8889, + 22418 - 11905: 0xC0DD, + 22419 - 11905: 0xDBF2, + 22420 - 11905: 0x888A, + 22421 - 11905: 0x888B, + 22422 - 11905: 0x888C, + 22423 - 11905: 0x888D, + 22424 - 11905: 0x888E, + 22425 - 11905: 0x888F, + 22426 - 11905: 0x8890, + 22427 - 11905: 0xB6E2, + 22428 - 11905: 0x8891, + 22429 - 11905: 0x8892, + 22430 - 11905: 0x8893, + 22431 - 11905: 0x8894, + 22432 - 11905: 0xDBF3, + 22433 - 11905: 0xDBD2, + 22434 - 11905: 0xB9B8, + 22435 - 11905: 0xD4AB, + 22436 - 11905: 0xDBEC, + 22437 - 11905: 0x8895, + 22438 - 11905: 0xBFD1, + 22439 - 11905: 0xDBF0, + 22440 - 11905: 0x8896, + 22441 - 11905: 0xDBD1, + 22442 - 11905: 0x8897, + 22443 - 11905: 0xB5E6, + 22444 - 11905: 0x8898, + 22445 - 11905: 0xDBEB, + 22446 - 11905: 0xBFE5, + 22447 - 11905: 0x8899, + 22448 - 11905: 0x889A, + 22449 - 11905: 0x889B, + 22450 - 11905: 0xDBEE, + 22451 - 11905: 0x889C, + 22452 - 11905: 0xDBF1, + 22453 - 11905: 0x889D, + 22454 - 11905: 0x889E, + 22455 - 11905: 0x889F, + 22456 - 11905: 0xDBF9, + 22457 - 11905: 0x88A0, + 22458 - 11905: 0x88A1, + 22459 - 11905: 0x88A2, + 22460 - 11905: 0x88A3, + 22461 - 11905: 0x88A4, + 22462 - 11905: 0x88A5, + 22463 - 11905: 0x88A6, + 22464 - 11905: 0x88A7, + 22465 - 11905: 0x88A8, + 22466 - 11905: 0xB9A1, + 22467 - 11905: 0xB0A3, + 22468 - 11905: 0x88A9, + 22469 - 11905: 0x88AA, + 22470 - 11905: 0x88AB, + 22471 - 11905: 0x88AC, + 22472 - 11905: 0x88AD, + 22473 - 11905: 0x88AE, + 22474 - 11905: 0x88AF, + 22475 - 11905: 0xC2F1, + 22476 - 11905: 0x88B0, + 22477 - 11905: 0x88B1, + 22478 - 11905: 0xB3C7, + 22479 - 11905: 0xDBEF, + 22480 - 11905: 0x88B2, + 22481 - 11905: 0x88B3, + 22482 - 11905: 0xDBF8, + 22483 - 11905: 0x88B4, + 22484 - 11905: 0xC6D2, + 22485 - 11905: 0xDBF4, + 22486 - 11905: 0x88B5, + 22487 - 11905: 0x88B6, + 22488 - 11905: 0xDBF5, + 22489 - 11905: 0xDBF7, + 22490 - 11905: 0xDBF6, + 22491 - 11905: 0x88B7, + 22492 - 11905: 0x88B8, + 22493 - 11905: 0xDBFE, + 22494 - 11905: 0x88B9, + 22495 - 11905: 0xD3F2, + 22496 - 11905: 0xB2BA, + 22497 - 11905: 0x88BA, + 22498 - 11905: 0x88BB, + 22499 - 11905: 0x88BC, + 22500 - 11905: 0xDBFD, + 22501 - 11905: 0x88BD, + 22502 - 11905: 0x88BE, + 22503 - 11905: 0x88BF, + 22504 - 11905: 0x88C0, + 22505 - 11905: 0x88C1, + 22506 - 11905: 0x88C2, + 22507 - 11905: 0x88C3, + 22508 - 11905: 0x88C4, + 22509 - 11905: 0xDCA4, + 22510 - 11905: 0x88C5, + 22511 - 11905: 0xDBFB, + 22512 - 11905: 0x88C6, + 22513 - 11905: 0x88C7, + 22514 - 11905: 0x88C8, + 22515 - 11905: 0x88C9, + 22516 - 11905: 0xDBFA, + 22517 - 11905: 0x88CA, + 22518 - 11905: 0x88CB, + 22519 - 11905: 0x88CC, + 22520 - 11905: 0xDBFC, + 22521 - 11905: 0xC5E0, + 22522 - 11905: 0xBBF9, + 22523 - 11905: 0x88CD, + 22524 - 11905: 0x88CE, + 22525 - 11905: 0xDCA3, + 22526 - 11905: 0x88CF, + 22527 - 11905: 0x88D0, + 22528 - 11905: 0xDCA5, + 22529 - 11905: 0x88D1, + 22530 - 11905: 0xCCC3, + 22531 - 11905: 0x88D2, + 22532 - 11905: 0x88D3, + 22533 - 11905: 0x88D4, + 22534 - 11905: 0xB6D1, + 22535 - 11905: 0xDDC0, + 22536 - 11905: 0x88D5, + 22537 - 11905: 0x88D6, + 22538 - 11905: 0x88D7, + 22539 - 11905: 0xDCA1, + 22540 - 11905: 0x88D8, + 22541 - 11905: 0xDCA2, + 22542 - 11905: 0x88D9, + 22543 - 11905: 0x88DA, + 22544 - 11905: 0x88DB, + 22545 - 11905: 0xC7B5, + 22546 - 11905: 0x88DC, + 22547 - 11905: 0x88DD, + 22548 - 11905: 0x88DE, + 22549 - 11905: 0xB6E9, + 22550 - 11905: 0x88DF, + 22551 - 11905: 0x88E0, + 22552 - 11905: 0x88E1, + 22553 - 11905: 0xDCA7, + 22554 - 11905: 0x88E2, + 22555 - 11905: 0x88E3, + 22556 - 11905: 0x88E4, + 22557 - 11905: 0x88E5, + 22558 - 11905: 0xDCA6, + 22559 - 11905: 0x88E6, + 22560 - 11905: 0xDCA9, + 22561 - 11905: 0xB1A4, + 22562 - 11905: 0x88E7, + 22563 - 11905: 0x88E8, + 22564 - 11905: 0xB5CC, + 22565 - 11905: 0x88E9, + 22566 - 11905: 0x88EA, + 22567 - 11905: 0x88EB, + 22568 - 11905: 0x88EC, + 22569 - 11905: 0x88ED, + 22570 - 11905: 0xBFB0, + 22571 - 11905: 0x88EE, + 22572 - 11905: 0x88EF, + 22573 - 11905: 0x88F0, + 22574 - 11905: 0x88F1, + 22575 - 11905: 0x88F2, + 22576 - 11905: 0xD1DF, + 22577 - 11905: 0x88F3, + 22578 - 11905: 0x88F4, + 22579 - 11905: 0x88F5, + 22580 - 11905: 0x88F6, + 22581 - 11905: 0xB6C2, + 22582 - 11905: 0x88F7, + 22583 - 11905: 0x88F8, + 22584 - 11905: 0x88F9, + 22585 - 11905: 0x88FA, + 22586 - 11905: 0x88FB, + 22587 - 11905: 0x88FC, + 22588 - 11905: 0x88FD, + 22589 - 11905: 0x88FE, + 22590 - 11905: 0x8940, + 22591 - 11905: 0x8941, + 22592 - 11905: 0x8942, + 22593 - 11905: 0x8943, + 22594 - 11905: 0x8944, + 22595 - 11905: 0x8945, + 22596 - 11905: 0xDCA8, + 22597 - 11905: 0x8946, + 22598 - 11905: 0x8947, + 22599 - 11905: 0x8948, + 22600 - 11905: 0x8949, + 22601 - 11905: 0x894A, + 22602 - 11905: 0x894B, + 22603 - 11905: 0x894C, + 22604 - 11905: 0xCBFA, + 22605 - 11905: 0xEBF3, + 22606 - 11905: 0x894D, + 22607 - 11905: 0x894E, + 22608 - 11905: 0x894F, + 22609 - 11905: 0xCBDC, + 22610 - 11905: 0x8950, + 22611 - 11905: 0x8951, + 22612 - 11905: 0xCBFE, + 22613 - 11905: 0x8952, + 22614 - 11905: 0x8953, + 22615 - 11905: 0x8954, + 22616 - 11905: 0xCCC1, + 22617 - 11905: 0x8955, + 22618 - 11905: 0x8956, + 22619 - 11905: 0x8957, + 22620 - 11905: 0x8958, + 22621 - 11905: 0x8959, + 22622 - 11905: 0xC8FB, + 22623 - 11905: 0x895A, + 22624 - 11905: 0x895B, + 22625 - 11905: 0x895C, + 22626 - 11905: 0x895D, + 22627 - 11905: 0x895E, + 22628 - 11905: 0x895F, + 22629 - 11905: 0xDCAA, + 22630 - 11905: 0x8960, + 22631 - 11905: 0x8961, + 22632 - 11905: 0x8962, + 22633 - 11905: 0x8963, + 22634 - 11905: 0x8964, + 22635 - 11905: 0xCCEE, + 22636 - 11905: 0xDCAB, + 22637 - 11905: 0x8965, + 22638 - 11905: 0x8966, + 22639 - 11905: 0x8967, + 22640 - 11905: 0x8968, + 22641 - 11905: 0x8969, + 22642 - 11905: 0x896A, + 22643 - 11905: 0x896B, + 22644 - 11905: 0x896C, + 22645 - 11905: 0x896D, + 22646 - 11905: 0x896E, + 22647 - 11905: 0x896F, + 22648 - 11905: 0x8970, + 22649 - 11905: 0x8971, + 22650 - 11905: 0x8972, + 22651 - 11905: 0x8973, + 22652 - 11905: 0x8974, + 22653 - 11905: 0x8975, + 22654 - 11905: 0xDBD3, + 22655 - 11905: 0x8976, + 22656 - 11905: 0xDCAF, + 22657 - 11905: 0xDCAC, + 22658 - 11905: 0x8977, + 22659 - 11905: 0xBEB3, + 22660 - 11905: 0x8978, + 22661 - 11905: 0xCAFB, + 22662 - 11905: 0x8979, + 22663 - 11905: 0x897A, + 22664 - 11905: 0x897B, + 22665 - 11905: 0xDCAD, + 22666 - 11905: 0x897C, + 22667 - 11905: 0x897D, + 22668 - 11905: 0x897E, + 22669 - 11905: 0x8980, + 22670 - 11905: 0x8981, + 22671 - 11905: 0x8982, + 22672 - 11905: 0x8983, + 22673 - 11905: 0x8984, + 22674 - 11905: 0xC9CA, + 22675 - 11905: 0xC4B9, + 22676 - 11905: 0x8985, + 22677 - 11905: 0x8986, + 22678 - 11905: 0x8987, + 22679 - 11905: 0x8988, + 22680 - 11905: 0x8989, + 22681 - 11905: 0xC7BD, + 22682 - 11905: 0xDCAE, + 22683 - 11905: 0x898A, + 22684 - 11905: 0x898B, + 22685 - 11905: 0x898C, + 22686 - 11905: 0xD4F6, + 22687 - 11905: 0xD0E6, + 22688 - 11905: 0x898D, + 22689 - 11905: 0x898E, + 22690 - 11905: 0x898F, + 22691 - 11905: 0x8990, + 22692 - 11905: 0x8991, + 22693 - 11905: 0x8992, + 22694 - 11905: 0x8993, + 22695 - 11905: 0x8994, + 22696 - 11905: 0xC4AB, + 22697 - 11905: 0xB6D5, + 22698 - 11905: 0x8995, + 22699 - 11905: 0x8996, + 22700 - 11905: 0x8997, + 22701 - 11905: 0x8998, + 22702 - 11905: 0x8999, + 22703 - 11905: 0x899A, + 22704 - 11905: 0x899B, + 22705 - 11905: 0x899C, + 22706 - 11905: 0x899D, + 22707 - 11905: 0x899E, + 22708 - 11905: 0x899F, + 22709 - 11905: 0x89A0, + 22710 - 11905: 0x89A1, + 22711 - 11905: 0x89A2, + 22712 - 11905: 0x89A3, + 22713 - 11905: 0x89A4, + 22714 - 11905: 0x89A5, + 22715 - 11905: 0x89A6, + 22716 - 11905: 0xDBD4, + 22717 - 11905: 0x89A7, + 22718 - 11905: 0x89A8, + 22719 - 11905: 0x89A9, + 22720 - 11905: 0x89AA, + 22721 - 11905: 0xB1DA, + 22722 - 11905: 0x89AB, + 22723 - 11905: 0x89AC, + 22724 - 11905: 0x89AD, + 22725 - 11905: 0xDBD5, + 22726 - 11905: 0x89AE, + 22727 - 11905: 0x89AF, + 22728 - 11905: 0x89B0, + 22729 - 11905: 0x89B1, + 22730 - 11905: 0x89B2, + 22731 - 11905: 0x89B3, + 22732 - 11905: 0x89B4, + 22733 - 11905: 0x89B5, + 22734 - 11905: 0x89B6, + 22735 - 11905: 0x89B7, + 22736 - 11905: 0x89B8, + 22737 - 11905: 0xDBD6, + 22738 - 11905: 0x89B9, + 22739 - 11905: 0x89BA, + 22740 - 11905: 0x89BB, + 22741 - 11905: 0xBABE, + 22742 - 11905: 0x89BC, + 22743 - 11905: 0x89BD, + 22744 - 11905: 0x89BE, + 22745 - 11905: 0x89BF, + 22746 - 11905: 0x89C0, + 22747 - 11905: 0x89C1, + 22748 - 11905: 0x89C2, + 22749 - 11905: 0x89C3, + 22750 - 11905: 0x89C4, + 22751 - 11905: 0x89C5, + 22752 - 11905: 0x89C6, + 22753 - 11905: 0x89C7, + 22754 - 11905: 0x89C8, + 22755 - 11905: 0x89C9, + 22756 - 11905: 0xC8C0, + 22757 - 11905: 0x89CA, + 22758 - 11905: 0x89CB, + 22759 - 11905: 0x89CC, + 22760 - 11905: 0x89CD, + 22761 - 11905: 0x89CE, + 22762 - 11905: 0x89CF, + 22763 - 11905: 0xCABF, + 22764 - 11905: 0xC8C9, + 22765 - 11905: 0x89D0, + 22766 - 11905: 0xD7B3, + 22767 - 11905: 0x89D1, + 22768 - 11905: 0xC9F9, + 22769 - 11905: 0x89D2, + 22770 - 11905: 0x89D3, + 22771 - 11905: 0xBFC7, + 22772 - 11905: 0x89D4, + 22773 - 11905: 0x89D5, + 22774 - 11905: 0xBAF8, + 22775 - 11905: 0x89D6, + 22776 - 11905: 0x89D7, + 22777 - 11905: 0xD2BC, + 22778 - 11905: 0x89D8, + 22779 - 11905: 0x89D9, + 22780 - 11905: 0x89DA, + 22781 - 11905: 0x89DB, + 22782 - 11905: 0x89DC, + 22783 - 11905: 0x89DD, + 22784 - 11905: 0x89DE, + 22785 - 11905: 0x89DF, + 22786 - 11905: 0xE2BA, + 22787 - 11905: 0x89E0, + 22788 - 11905: 0xB4A6, + 22789 - 11905: 0x89E1, + 22790 - 11905: 0x89E2, + 22791 - 11905: 0xB1B8, + 22792 - 11905: 0x89E3, + 22793 - 11905: 0x89E4, + 22794 - 11905: 0x89E5, + 22795 - 11905: 0x89E6, + 22796 - 11905: 0x89E7, + 22797 - 11905: 0xB8B4, + 22798 - 11905: 0x89E8, + 22799 - 11905: 0xCFC4, + 22800 - 11905: 0x89E9, + 22801 - 11905: 0x89EA, + 22802 - 11905: 0x89EB, + 22803 - 11905: 0x89EC, + 22804 - 11905: 0xD9E7, + 22805 - 11905: 0xCFA6, + 22806 - 11905: 0xCDE2, + 22807 - 11905: 0x89ED, + 22808 - 11905: 0x89EE, + 22809 - 11905: 0xD9ED, + 22810 - 11905: 0xB6E0, + 22811 - 11905: 0x89EF, + 22812 - 11905: 0xD2B9, + 22813 - 11905: 0x89F0, + 22814 - 11905: 0x89F1, + 22815 - 11905: 0xB9BB, + 22816 - 11905: 0x89F2, + 22817 - 11905: 0x89F3, + 22818 - 11905: 0x89F4, + 22819 - 11905: 0x89F5, + 22820 - 11905: 0xE2B9, + 22821 - 11905: 0xE2B7, + 22822 - 11905: 0x89F6, + 22823 - 11905: 0xB4F3, + 22824 - 11905: 0x89F7, + 22825 - 11905: 0xCCEC, + 22826 - 11905: 0xCCAB, + 22827 - 11905: 0xB7F2, + 22828 - 11905: 0x89F8, + 22829 - 11905: 0xD8B2, + 22830 - 11905: 0xD1EB, + 22831 - 11905: 0xBABB, + 22832 - 11905: 0x89F9, + 22833 - 11905: 0xCAA7, + 22834 - 11905: 0x89FA, + 22835 - 11905: 0x89FB, + 22836 - 11905: 0xCDB7, + 22837 - 11905: 0x89FC, + 22838 - 11905: 0x89FD, + 22839 - 11905: 0xD2C4, + 22840 - 11905: 0xBFE4, + 22841 - 11905: 0xBCD0, + 22842 - 11905: 0xB6E1, + 22843 - 11905: 0x89FE, + 22844 - 11905: 0xDEC5, + 22845 - 11905: 0x8A40, + 22846 - 11905: 0x8A41, + 22847 - 11905: 0x8A42, + 22848 - 11905: 0x8A43, + 22849 - 11905: 0xDEC6, + 22850 - 11905: 0xDBBC, + 22851 - 11905: 0x8A44, + 22852 - 11905: 0xD1D9, + 22853 - 11905: 0x8A45, + 22854 - 11905: 0x8A46, + 22855 - 11905: 0xC6E6, + 22856 - 11905: 0xC4CE, + 22857 - 11905: 0xB7EE, + 22858 - 11905: 0x8A47, + 22859 - 11905: 0xB7DC, + 22860 - 11905: 0x8A48, + 22861 - 11905: 0x8A49, + 22862 - 11905: 0xBFFC, + 22863 - 11905: 0xD7E0, + 22864 - 11905: 0x8A4A, + 22865 - 11905: 0xC6F5, + 22866 - 11905: 0x8A4B, + 22867 - 11905: 0x8A4C, + 22868 - 11905: 0xB1BC, + 22869 - 11905: 0xDEC8, + 22870 - 11905: 0xBDB1, + 22871 - 11905: 0xCCD7, + 22872 - 11905: 0xDECA, + 22873 - 11905: 0x8A4D, + 22874 - 11905: 0xDEC9, + 22875 - 11905: 0x8A4E, + 22876 - 11905: 0x8A4F, + 22877 - 11905: 0x8A50, + 22878 - 11905: 0x8A51, + 22879 - 11905: 0x8A52, + 22880 - 11905: 0xB5EC, + 22881 - 11905: 0x8A53, + 22882 - 11905: 0xC9DD, + 22883 - 11905: 0x8A54, + 22884 - 11905: 0x8A55, + 22885 - 11905: 0xB0C2, + 22886 - 11905: 0x8A56, + 22887 - 11905: 0x8A57, + 22888 - 11905: 0x8A58, + 22889 - 11905: 0x8A59, + 22890 - 11905: 0x8A5A, + 22891 - 11905: 0x8A5B, + 22892 - 11905: 0x8A5C, + 22893 - 11905: 0x8A5D, + 22894 - 11905: 0x8A5E, + 22895 - 11905: 0x8A5F, + 22896 - 11905: 0x8A60, + 22897 - 11905: 0x8A61, + 22898 - 11905: 0x8A62, + 22899 - 11905: 0xC5AE, + 22900 - 11905: 0xC5AB, + 22901 - 11905: 0x8A63, + 22902 - 11905: 0xC4CC, + 22903 - 11905: 0x8A64, + 22904 - 11905: 0xBCE9, + 22905 - 11905: 0xCBFD, + 22906 - 11905: 0x8A65, + 22907 - 11905: 0x8A66, + 22908 - 11905: 0x8A67, + 22909 - 11905: 0xBAC3, + 22910 - 11905: 0x8A68, + 22911 - 11905: 0x8A69, + 22912 - 11905: 0x8A6A, + 22913 - 11905: 0xE5F9, + 22914 - 11905: 0xC8E7, + 22915 - 11905: 0xE5FA, + 22916 - 11905: 0xCDFD, + 22917 - 11905: 0x8A6B, + 22918 - 11905: 0xD7B1, + 22919 - 11905: 0xB8BE, + 22920 - 11905: 0xC2E8, + 22921 - 11905: 0x8A6C, + 22922 - 11905: 0xC8D1, + 22923 - 11905: 0x8A6D, + 22924 - 11905: 0x8A6E, + 22925 - 11905: 0xE5FB, + 22926 - 11905: 0x8A6F, + 22927 - 11905: 0x8A70, + 22928 - 11905: 0x8A71, + 22929 - 11905: 0x8A72, + 22930 - 11905: 0xB6CA, + 22931 - 11905: 0xBCCB, + 22932 - 11905: 0x8A73, + 22933 - 11905: 0x8A74, + 22934 - 11905: 0xD1FD, + 22935 - 11905: 0xE6A1, + 22936 - 11905: 0x8A75, + 22937 - 11905: 0xC3EE, + 22938 - 11905: 0x8A76, + 22939 - 11905: 0x8A77, + 22940 - 11905: 0x8A78, + 22941 - 11905: 0x8A79, + 22942 - 11905: 0xE6A4, + 22943 - 11905: 0x8A7A, + 22944 - 11905: 0x8A7B, + 22945 - 11905: 0x8A7C, + 22946 - 11905: 0x8A7D, + 22947 - 11905: 0xE5FE, + 22948 - 11905: 0xE6A5, + 22949 - 11905: 0xCDD7, + 22950 - 11905: 0x8A7E, + 22951 - 11905: 0x8A80, + 22952 - 11905: 0xB7C1, + 22953 - 11905: 0xE5FC, + 22954 - 11905: 0xE5FD, + 22955 - 11905: 0xE6A3, + 22956 - 11905: 0x8A81, + 22957 - 11905: 0x8A82, + 22958 - 11905: 0xC4DD, + 22959 - 11905: 0xE6A8, + 22960 - 11905: 0x8A83, + 22961 - 11905: 0x8A84, + 22962 - 11905: 0xE6A7, + 22963 - 11905: 0x8A85, + 22964 - 11905: 0x8A86, + 22965 - 11905: 0x8A87, + 22966 - 11905: 0x8A88, + 22967 - 11905: 0x8A89, + 22968 - 11905: 0x8A8A, + 22969 - 11905: 0xC3C3, + 22970 - 11905: 0x8A8B, + 22971 - 11905: 0xC6DE, + 22972 - 11905: 0x8A8C, + 22973 - 11905: 0x8A8D, + 22974 - 11905: 0xE6AA, + 22975 - 11905: 0x8A8E, + 22976 - 11905: 0x8A8F, + 22977 - 11905: 0x8A90, + 22978 - 11905: 0x8A91, + 22979 - 11905: 0x8A92, + 22980 - 11905: 0x8A93, + 22981 - 11905: 0x8A94, + 22982 - 11905: 0xC4B7, + 22983 - 11905: 0x8A95, + 22984 - 11905: 0x8A96, + 22985 - 11905: 0x8A97, + 22986 - 11905: 0xE6A2, + 22987 - 11905: 0xCABC, + 22988 - 11905: 0x8A98, + 22989 - 11905: 0x8A99, + 22990 - 11905: 0x8A9A, + 22991 - 11905: 0x8A9B, + 22992 - 11905: 0xBDE3, + 22993 - 11905: 0xB9C3, + 22994 - 11905: 0xE6A6, + 22995 - 11905: 0xD0D5, + 22996 - 11905: 0xCEAF, + 22997 - 11905: 0x8A9C, + 22998 - 11905: 0x8A9D, + 22999 - 11905: 0xE6A9, + 23000 - 11905: 0xE6B0, + 23001 - 11905: 0x8A9E, + 23002 - 11905: 0xD2A6, + 23003 - 11905: 0x8A9F, + 23004 - 11905: 0xBDAA, + 23005 - 11905: 0xE6AD, + 23006 - 11905: 0x8AA0, + 23007 - 11905: 0x8AA1, + 23008 - 11905: 0x8AA2, + 23009 - 11905: 0x8AA3, + 23010 - 11905: 0x8AA4, + 23011 - 11905: 0xE6AF, + 23012 - 11905: 0x8AA5, + 23013 - 11905: 0xC0D1, + 23014 - 11905: 0x8AA6, + 23015 - 11905: 0x8AA7, + 23016 - 11905: 0xD2CC, + 23017 - 11905: 0x8AA8, + 23018 - 11905: 0x8AA9, + 23019 - 11905: 0x8AAA, + 23020 - 11905: 0xBCA7, + 23021 - 11905: 0x8AAB, + 23022 - 11905: 0x8AAC, + 23023 - 11905: 0x8AAD, + 23024 - 11905: 0x8AAE, + 23025 - 11905: 0x8AAF, + 23026 - 11905: 0x8AB0, + 23027 - 11905: 0x8AB1, + 23028 - 11905: 0x8AB2, + 23029 - 11905: 0x8AB3, + 23030 - 11905: 0x8AB4, + 23031 - 11905: 0x8AB5, + 23032 - 11905: 0x8AB6, + 23033 - 11905: 0xE6B1, + 23034 - 11905: 0x8AB7, + 23035 - 11905: 0xD2F6, + 23036 - 11905: 0x8AB8, + 23037 - 11905: 0x8AB9, + 23038 - 11905: 0x8ABA, + 23039 - 11905: 0xD7CB, + 23040 - 11905: 0x8ABB, + 23041 - 11905: 0xCDFE, + 23042 - 11905: 0x8ABC, + 23043 - 11905: 0xCDDE, + 23044 - 11905: 0xC2A6, + 23045 - 11905: 0xE6AB, + 23046 - 11905: 0xE6AC, + 23047 - 11905: 0xBDBF, + 23048 - 11905: 0xE6AE, + 23049 - 11905: 0xE6B3, + 23050 - 11905: 0x8ABD, + 23051 - 11905: 0x8ABE, + 23052 - 11905: 0xE6B2, + 23053 - 11905: 0x8ABF, + 23054 - 11905: 0x8AC0, + 23055 - 11905: 0x8AC1, + 23056 - 11905: 0x8AC2, + 23057 - 11905: 0xE6B6, + 23058 - 11905: 0x8AC3, + 23059 - 11905: 0xE6B8, + 23060 - 11905: 0x8AC4, + 23061 - 11905: 0x8AC5, + 23062 - 11905: 0x8AC6, + 23063 - 11905: 0x8AC7, + 23064 - 11905: 0xC4EF, + 23065 - 11905: 0x8AC8, + 23066 - 11905: 0x8AC9, + 23067 - 11905: 0x8ACA, + 23068 - 11905: 0xC4C8, + 23069 - 11905: 0x8ACB, + 23070 - 11905: 0x8ACC, + 23071 - 11905: 0xBEEA, + 23072 - 11905: 0xC9EF, + 23073 - 11905: 0x8ACD, + 23074 - 11905: 0x8ACE, + 23075 - 11905: 0xE6B7, + 23076 - 11905: 0x8ACF, + 23077 - 11905: 0xB6F0, + 23078 - 11905: 0x8AD0, + 23079 - 11905: 0x8AD1, + 23080 - 11905: 0x8AD2, + 23081 - 11905: 0xC3E4, + 23082 - 11905: 0x8AD3, + 23083 - 11905: 0x8AD4, + 23084 - 11905: 0x8AD5, + 23085 - 11905: 0x8AD6, + 23086 - 11905: 0x8AD7, + 23087 - 11905: 0x8AD8, + 23088 - 11905: 0x8AD9, + 23089 - 11905: 0xD3E9, + 23090 - 11905: 0xE6B4, + 23091 - 11905: 0x8ADA, + 23092 - 11905: 0xE6B5, + 23093 - 11905: 0x8ADB, + 23094 - 11905: 0xC8A2, + 23095 - 11905: 0x8ADC, + 23096 - 11905: 0x8ADD, + 23097 - 11905: 0x8ADE, + 23098 - 11905: 0x8ADF, + 23099 - 11905: 0x8AE0, + 23100 - 11905: 0xE6BD, + 23101 - 11905: 0x8AE1, + 23102 - 11905: 0x8AE2, + 23103 - 11905: 0x8AE3, + 23104 - 11905: 0xE6B9, + 23105 - 11905: 0x8AE4, + 23106 - 11905: 0x8AE5, + 23107 - 11905: 0x8AE6, + 23108 - 11905: 0x8AE7, + 23109 - 11905: 0x8AE8, + 23110 - 11905: 0xC6C5, + 23111 - 11905: 0x8AE9, + 23112 - 11905: 0x8AEA, + 23113 - 11905: 0xCDF1, + 23114 - 11905: 0xE6BB, + 23115 - 11905: 0x8AEB, + 23116 - 11905: 0x8AEC, + 23117 - 11905: 0x8AED, + 23118 - 11905: 0x8AEE, + 23119 - 11905: 0x8AEF, + 23120 - 11905: 0x8AF0, + 23121 - 11905: 0x8AF1, + 23122 - 11905: 0x8AF2, + 23123 - 11905: 0x8AF3, + 23124 - 11905: 0x8AF4, + 23125 - 11905: 0xE6BC, + 23126 - 11905: 0x8AF5, + 23127 - 11905: 0x8AF6, + 23128 - 11905: 0x8AF7, + 23129 - 11905: 0x8AF8, + 23130 - 11905: 0xBBE9, + 23131 - 11905: 0x8AF9, + 23132 - 11905: 0x8AFA, + 23133 - 11905: 0x8AFB, + 23134 - 11905: 0x8AFC, + 23135 - 11905: 0x8AFD, + 23136 - 11905: 0x8AFE, + 23137 - 11905: 0x8B40, + 23138 - 11905: 0xE6BE, + 23139 - 11905: 0x8B41, + 23140 - 11905: 0x8B42, + 23141 - 11905: 0x8B43, + 23142 - 11905: 0x8B44, + 23143 - 11905: 0xE6BA, + 23144 - 11905: 0x8B45, + 23145 - 11905: 0x8B46, + 23146 - 11905: 0xC0B7, + 23147 - 11905: 0x8B47, + 23148 - 11905: 0x8B48, + 23149 - 11905: 0x8B49, + 23150 - 11905: 0x8B4A, + 23151 - 11905: 0x8B4B, + 23152 - 11905: 0x8B4C, + 23153 - 11905: 0x8B4D, + 23154 - 11905: 0x8B4E, + 23155 - 11905: 0x8B4F, + 23156 - 11905: 0xD3A4, + 23157 - 11905: 0xE6BF, + 23158 - 11905: 0xC9F4, + 23159 - 11905: 0xE6C3, + 23160 - 11905: 0x8B50, + 23161 - 11905: 0x8B51, + 23162 - 11905: 0xE6C4, + 23163 - 11905: 0x8B52, + 23164 - 11905: 0x8B53, + 23165 - 11905: 0x8B54, + 23166 - 11905: 0x8B55, + 23167 - 11905: 0xD0F6, + 23168 - 11905: 0x8B56, + 23169 - 11905: 0x8B57, + 23170 - 11905: 0x8B58, + 23171 - 11905: 0x8B59, + 23172 - 11905: 0x8B5A, + 23173 - 11905: 0x8B5B, + 23174 - 11905: 0x8B5C, + 23175 - 11905: 0x8B5D, + 23176 - 11905: 0x8B5E, + 23177 - 11905: 0x8B5F, + 23178 - 11905: 0x8B60, + 23179 - 11905: 0x8B61, + 23180 - 11905: 0x8B62, + 23181 - 11905: 0x8B63, + 23182 - 11905: 0x8B64, + 23183 - 11905: 0x8B65, + 23184 - 11905: 0x8B66, + 23185 - 11905: 0x8B67, + 23186 - 11905: 0xC3BD, + 23187 - 11905: 0x8B68, + 23188 - 11905: 0x8B69, + 23189 - 11905: 0x8B6A, + 23190 - 11905: 0x8B6B, + 23191 - 11905: 0x8B6C, + 23192 - 11905: 0x8B6D, + 23193 - 11905: 0x8B6E, + 23194 - 11905: 0xC3C4, + 23195 - 11905: 0xE6C2, + 23196 - 11905: 0x8B6F, + 23197 - 11905: 0x8B70, + 23198 - 11905: 0x8B71, + 23199 - 11905: 0x8B72, + 23200 - 11905: 0x8B73, + 23201 - 11905: 0x8B74, + 23202 - 11905: 0x8B75, + 23203 - 11905: 0x8B76, + 23204 - 11905: 0x8B77, + 23205 - 11905: 0x8B78, + 23206 - 11905: 0x8B79, + 23207 - 11905: 0x8B7A, + 23208 - 11905: 0x8B7B, + 23209 - 11905: 0x8B7C, + 23210 - 11905: 0xE6C1, + 23211 - 11905: 0x8B7D, + 23212 - 11905: 0x8B7E, + 23213 - 11905: 0x8B80, + 23214 - 11905: 0x8B81, + 23215 - 11905: 0x8B82, + 23216 - 11905: 0x8B83, + 23217 - 11905: 0x8B84, + 23218 - 11905: 0xE6C7, + 23219 - 11905: 0xCFB1, + 23220 - 11905: 0x8B85, + 23221 - 11905: 0xEBF4, + 23222 - 11905: 0x8B86, + 23223 - 11905: 0x8B87, + 23224 - 11905: 0xE6CA, + 23225 - 11905: 0x8B88, + 23226 - 11905: 0x8B89, + 23227 - 11905: 0x8B8A, + 23228 - 11905: 0x8B8B, + 23229 - 11905: 0x8B8C, + 23230 - 11905: 0xE6C5, + 23231 - 11905: 0x8B8D, + 23232 - 11905: 0x8B8E, + 23233 - 11905: 0xBCDE, + 23234 - 11905: 0xC9A9, + 23235 - 11905: 0x8B8F, + 23236 - 11905: 0x8B90, + 23237 - 11905: 0x8B91, + 23238 - 11905: 0x8B92, + 23239 - 11905: 0x8B93, + 23240 - 11905: 0x8B94, + 23241 - 11905: 0xBCB5, + 23242 - 11905: 0x8B95, + 23243 - 11905: 0x8B96, + 23244 - 11905: 0xCFD3, + 23245 - 11905: 0x8B97, + 23246 - 11905: 0x8B98, + 23247 - 11905: 0x8B99, + 23248 - 11905: 0x8B9A, + 23249 - 11905: 0x8B9B, + 23250 - 11905: 0xE6C8, + 23251 - 11905: 0x8B9C, + 23252 - 11905: 0xE6C9, + 23253 - 11905: 0x8B9D, + 23254 - 11905: 0xE6CE, + 23255 - 11905: 0x8B9E, + 23256 - 11905: 0xE6D0, + 23257 - 11905: 0x8B9F, + 23258 - 11905: 0x8BA0, + 23259 - 11905: 0x8BA1, + 23260 - 11905: 0xE6D1, + 23261 - 11905: 0x8BA2, + 23262 - 11905: 0x8BA3, + 23263 - 11905: 0x8BA4, + 23264 - 11905: 0xE6CB, + 23265 - 11905: 0xB5D5, + 23266 - 11905: 0x8BA5, + 23267 - 11905: 0xE6CC, + 23268 - 11905: 0x8BA6, + 23269 - 11905: 0x8BA7, + 23270 - 11905: 0xE6CF, + 23271 - 11905: 0x8BA8, + 23272 - 11905: 0x8BA9, + 23273 - 11905: 0xC4DB, + 23274 - 11905: 0x8BAA, + 23275 - 11905: 0xE6C6, + 23276 - 11905: 0x8BAB, + 23277 - 11905: 0x8BAC, + 23278 - 11905: 0x8BAD, + 23279 - 11905: 0x8BAE, + 23280 - 11905: 0x8BAF, + 23281 - 11905: 0xE6CD, + 23282 - 11905: 0x8BB0, + 23283 - 11905: 0x8BB1, + 23284 - 11905: 0x8BB2, + 23285 - 11905: 0x8BB3, + 23286 - 11905: 0x8BB4, + 23287 - 11905: 0x8BB5, + 23288 - 11905: 0x8BB6, + 23289 - 11905: 0x8BB7, + 23290 - 11905: 0x8BB8, + 23291 - 11905: 0x8BB9, + 23292 - 11905: 0x8BBA, + 23293 - 11905: 0x8BBB, + 23294 - 11905: 0x8BBC, + 23295 - 11905: 0x8BBD, + 23296 - 11905: 0x8BBE, + 23297 - 11905: 0x8BBF, + 23298 - 11905: 0x8BC0, + 23299 - 11905: 0x8BC1, + 23300 - 11905: 0x8BC2, + 23301 - 11905: 0x8BC3, + 23302 - 11905: 0x8BC4, + 23303 - 11905: 0x8BC5, + 23304 - 11905: 0x8BC6, + 23305 - 11905: 0xE6D2, + 23306 - 11905: 0x8BC7, + 23307 - 11905: 0x8BC8, + 23308 - 11905: 0x8BC9, + 23309 - 11905: 0x8BCA, + 23310 - 11905: 0x8BCB, + 23311 - 11905: 0x8BCC, + 23312 - 11905: 0x8BCD, + 23313 - 11905: 0x8BCE, + 23314 - 11905: 0x8BCF, + 23315 - 11905: 0x8BD0, + 23316 - 11905: 0x8BD1, + 23317 - 11905: 0x8BD2, + 23318 - 11905: 0xE6D4, + 23319 - 11905: 0xE6D3, + 23320 - 11905: 0x8BD3, + 23321 - 11905: 0x8BD4, + 23322 - 11905: 0x8BD5, + 23323 - 11905: 0x8BD6, + 23324 - 11905: 0x8BD7, + 23325 - 11905: 0x8BD8, + 23326 - 11905: 0x8BD9, + 23327 - 11905: 0x8BDA, + 23328 - 11905: 0x8BDB, + 23329 - 11905: 0x8BDC, + 23330 - 11905: 0x8BDD, + 23331 - 11905: 0x8BDE, + 23332 - 11905: 0x8BDF, + 23333 - 11905: 0x8BE0, + 23334 - 11905: 0x8BE1, + 23335 - 11905: 0x8BE2, + 23336 - 11905: 0x8BE3, + 23337 - 11905: 0x8BE4, + 23338 - 11905: 0x8BE5, + 23339 - 11905: 0x8BE6, + 23340 - 11905: 0x8BE7, + 23341 - 11905: 0x8BE8, + 23342 - 11905: 0x8BE9, + 23343 - 11905: 0x8BEA, + 23344 - 11905: 0x8BEB, + 23345 - 11905: 0x8BEC, + 23346 - 11905: 0xE6D5, + 23347 - 11905: 0x8BED, + 23348 - 11905: 0xD9F8, + 23349 - 11905: 0x8BEE, + 23350 - 11905: 0x8BEF, + 23351 - 11905: 0xE6D6, + 23352 - 11905: 0x8BF0, + 23353 - 11905: 0x8BF1, + 23354 - 11905: 0x8BF2, + 23355 - 11905: 0x8BF3, + 23356 - 11905: 0x8BF4, + 23357 - 11905: 0x8BF5, + 23358 - 11905: 0x8BF6, + 23359 - 11905: 0x8BF7, + 23360 - 11905: 0xE6D7, + 23361 - 11905: 0x8BF8, + 23362 - 11905: 0x8BF9, + 23363 - 11905: 0x8BFA, + 23364 - 11905: 0x8BFB, + 23365 - 11905: 0x8BFC, + 23366 - 11905: 0x8BFD, + 23367 - 11905: 0x8BFE, + 23368 - 11905: 0x8C40, + 23369 - 11905: 0x8C41, + 23370 - 11905: 0x8C42, + 23371 - 11905: 0x8C43, + 23372 - 11905: 0x8C44, + 23373 - 11905: 0x8C45, + 23374 - 11905: 0x8C46, + 23375 - 11905: 0x8C47, + 23376 - 11905: 0xD7D3, + 23377 - 11905: 0xE6DD, + 23378 - 11905: 0x8C48, + 23379 - 11905: 0xE6DE, + 23380 - 11905: 0xBFD7, + 23381 - 11905: 0xD4D0, + 23382 - 11905: 0x8C49, + 23383 - 11905: 0xD7D6, + 23384 - 11905: 0xB4E6, + 23385 - 11905: 0xCBEF, + 23386 - 11905: 0xE6DA, + 23387 - 11905: 0xD8C3, + 23388 - 11905: 0xD7CE, + 23389 - 11905: 0xD0A2, + 23390 - 11905: 0x8C4A, + 23391 - 11905: 0xC3CF, + 23392 - 11905: 0x8C4B, + 23393 - 11905: 0x8C4C, + 23394 - 11905: 0xE6DF, + 23395 - 11905: 0xBCBE, + 23396 - 11905: 0xB9C2, + 23397 - 11905: 0xE6DB, + 23398 - 11905: 0xD1A7, + 23399 - 11905: 0x8C4D, + 23400 - 11905: 0x8C4E, + 23401 - 11905: 0xBAA2, + 23402 - 11905: 0xC2CF, + 23403 - 11905: 0x8C4F, + 23404 - 11905: 0xD8AB, + 23405 - 11905: 0x8C50, + 23406 - 11905: 0x8C51, + 23407 - 11905: 0x8C52, + 23408 - 11905: 0xCAEB, + 23409 - 11905: 0xE5EE, + 23410 - 11905: 0x8C53, + 23411 - 11905: 0xE6DC, + 23412 - 11905: 0x8C54, + 23413 - 11905: 0xB7F5, + 23414 - 11905: 0x8C55, + 23415 - 11905: 0x8C56, + 23416 - 11905: 0x8C57, + 23417 - 11905: 0x8C58, + 23418 - 11905: 0xC8E6, + 23419 - 11905: 0x8C59, + 23420 - 11905: 0x8C5A, + 23421 - 11905: 0xC4F5, + 23422 - 11905: 0x8C5B, + 23423 - 11905: 0x8C5C, + 23424 - 11905: 0xE5B2, + 23425 - 11905: 0xC4FE, + 23426 - 11905: 0x8C5D, + 23427 - 11905: 0xCBFC, + 23428 - 11905: 0xE5B3, + 23429 - 11905: 0xD5AC, + 23430 - 11905: 0x8C5E, + 23431 - 11905: 0xD3EE, + 23432 - 11905: 0xCAD8, + 23433 - 11905: 0xB0B2, + 23434 - 11905: 0x8C5F, + 23435 - 11905: 0xCBCE, + 23436 - 11905: 0xCDEA, + 23437 - 11905: 0x8C60, + 23438 - 11905: 0x8C61, + 23439 - 11905: 0xBAEA, + 23440 - 11905: 0x8C62, + 23441 - 11905: 0x8C63, + 23442 - 11905: 0x8C64, + 23443 - 11905: 0xE5B5, + 23444 - 11905: 0x8C65, + 23445 - 11905: 0xE5B4, + 23446 - 11905: 0x8C66, + 23447 - 11905: 0xD7DA, + 23448 - 11905: 0xB9D9, + 23449 - 11905: 0xD6E6, + 23450 - 11905: 0xB6A8, + 23451 - 11905: 0xCDF0, + 23452 - 11905: 0xD2CB, + 23453 - 11905: 0xB1A6, + 23454 - 11905: 0xCAB5, + 23455 - 11905: 0x8C67, + 23456 - 11905: 0xB3E8, + 23457 - 11905: 0xC9F3, + 23458 - 11905: 0xBFCD, + 23459 - 11905: 0xD0FB, + 23460 - 11905: 0xCAD2, + 23461 - 11905: 0xE5B6, + 23462 - 11905: 0xBBC2, + 23463 - 11905: 0x8C68, + 23464 - 11905: 0x8C69, + 23465 - 11905: 0x8C6A, + 23466 - 11905: 0xCFDC, + 23467 - 11905: 0xB9AC, + 23468 - 11905: 0x8C6B, + 23469 - 11905: 0x8C6C, + 23470 - 11905: 0x8C6D, + 23471 - 11905: 0x8C6E, + 23472 - 11905: 0xD4D7, + 23473 - 11905: 0x8C6F, + 23474 - 11905: 0x8C70, + 23475 - 11905: 0xBAA6, + 23476 - 11905: 0xD1E7, + 23477 - 11905: 0xCFFC, + 23478 - 11905: 0xBCD2, + 23479 - 11905: 0x8C71, + 23480 - 11905: 0xE5B7, + 23481 - 11905: 0xC8DD, + 23482 - 11905: 0x8C72, + 23483 - 11905: 0x8C73, + 23484 - 11905: 0x8C74, + 23485 - 11905: 0xBFED, + 23486 - 11905: 0xB1F6, + 23487 - 11905: 0xCBDE, + 23488 - 11905: 0x8C75, + 23489 - 11905: 0x8C76, + 23490 - 11905: 0xBCC5, + 23491 - 11905: 0x8C77, + 23492 - 11905: 0xBCC4, + 23493 - 11905: 0xD2FA, + 23494 - 11905: 0xC3DC, + 23495 - 11905: 0xBFDC, + 23496 - 11905: 0x8C78, + 23497 - 11905: 0x8C79, + 23498 - 11905: 0x8C7A, + 23499 - 11905: 0x8C7B, + 23500 - 11905: 0xB8BB, + 23501 - 11905: 0x8C7C, + 23502 - 11905: 0x8C7D, + 23503 - 11905: 0x8C7E, + 23504 - 11905: 0xC3C2, + 23505 - 11905: 0x8C80, + 23506 - 11905: 0xBAAE, + 23507 - 11905: 0xD4A2, + 23508 - 11905: 0x8C81, + 23509 - 11905: 0x8C82, + 23510 - 11905: 0x8C83, + 23511 - 11905: 0x8C84, + 23512 - 11905: 0x8C85, + 23513 - 11905: 0x8C86, + 23514 - 11905: 0x8C87, + 23515 - 11905: 0x8C88, + 23516 - 11905: 0x8C89, + 23517 - 11905: 0xC7DE, + 23518 - 11905: 0xC4AF, + 23519 - 11905: 0xB2EC, + 23520 - 11905: 0x8C8A, + 23521 - 11905: 0xB9D1, + 23522 - 11905: 0x8C8B, + 23523 - 11905: 0x8C8C, + 23524 - 11905: 0xE5BB, + 23525 - 11905: 0xC1C8, + 23526 - 11905: 0x8C8D, + 23527 - 11905: 0x8C8E, + 23528 - 11905: 0xD5AF, + 23529 - 11905: 0x8C8F, + 23530 - 11905: 0x8C90, + 23531 - 11905: 0x8C91, + 23532 - 11905: 0x8C92, + 23533 - 11905: 0x8C93, + 23534 - 11905: 0xE5BC, + 23535 - 11905: 0x8C94, + 23536 - 11905: 0xE5BE, + 23537 - 11905: 0x8C95, + 23538 - 11905: 0x8C96, + 23539 - 11905: 0x8C97, + 23540 - 11905: 0x8C98, + 23541 - 11905: 0x8C99, + 23542 - 11905: 0x8C9A, + 23543 - 11905: 0x8C9B, + 23544 - 11905: 0xB4E7, + 23545 - 11905: 0xB6D4, + 23546 - 11905: 0xCBC2, + 23547 - 11905: 0xD1B0, + 23548 - 11905: 0xB5BC, + 23549 - 11905: 0x8C9C, + 23550 - 11905: 0x8C9D, + 23551 - 11905: 0xCAD9, + 23552 - 11905: 0x8C9E, + 23553 - 11905: 0xB7E2, + 23554 - 11905: 0x8C9F, + 23555 - 11905: 0x8CA0, + 23556 - 11905: 0xC9E4, + 23557 - 11905: 0x8CA1, + 23558 - 11905: 0xBDAB, + 23559 - 11905: 0x8CA2, + 23560 - 11905: 0x8CA3, + 23561 - 11905: 0xCEBE, + 23562 - 11905: 0xD7F0, + 23563 - 11905: 0x8CA4, + 23564 - 11905: 0x8CA5, + 23565 - 11905: 0x8CA6, + 23566 - 11905: 0x8CA7, + 23567 - 11905: 0xD0A1, + 23568 - 11905: 0x8CA8, + 23569 - 11905: 0xC9D9, + 23570 - 11905: 0x8CA9, + 23571 - 11905: 0x8CAA, + 23572 - 11905: 0xB6FB, + 23573 - 11905: 0xE6D8, + 23574 - 11905: 0xBCE2, + 23575 - 11905: 0x8CAB, + 23576 - 11905: 0xB3BE, + 23577 - 11905: 0x8CAC, + 23578 - 11905: 0xC9D0, + 23579 - 11905: 0x8CAD, + 23580 - 11905: 0xE6D9, + 23581 - 11905: 0xB3A2, + 23582 - 11905: 0x8CAE, + 23583 - 11905: 0x8CAF, + 23584 - 11905: 0x8CB0, + 23585 - 11905: 0x8CB1, + 23586 - 11905: 0xDECC, + 23587 - 11905: 0x8CB2, + 23588 - 11905: 0xD3C8, + 23589 - 11905: 0xDECD, + 23590 - 11905: 0x8CB3, + 23591 - 11905: 0xD2A2, + 23592 - 11905: 0x8CB4, + 23593 - 11905: 0x8CB5, + 23594 - 11905: 0x8CB6, + 23595 - 11905: 0x8CB7, + 23596 - 11905: 0xDECE, + 23597 - 11905: 0x8CB8, + 23598 - 11905: 0x8CB9, + 23599 - 11905: 0x8CBA, + 23600 - 11905: 0x8CBB, + 23601 - 11905: 0xBECD, + 23602 - 11905: 0x8CBC, + 23603 - 11905: 0x8CBD, + 23604 - 11905: 0xDECF, + 23605 - 11905: 0x8CBE, + 23606 - 11905: 0x8CBF, + 23607 - 11905: 0x8CC0, + 23608 - 11905: 0xCAAC, + 23609 - 11905: 0xD2FC, + 23610 - 11905: 0xB3DF, + 23611 - 11905: 0xE5EA, + 23612 - 11905: 0xC4E1, + 23613 - 11905: 0xBEA1, + 23614 - 11905: 0xCEB2, + 23615 - 11905: 0xC4F2, + 23616 - 11905: 0xBED6, + 23617 - 11905: 0xC6A8, + 23618 - 11905: 0xB2E3, + 23619 - 11905: 0x8CC1, + 23620 - 11905: 0x8CC2, + 23621 - 11905: 0xBED3, + 23622 - 11905: 0x8CC3, + 23623 - 11905: 0x8CC4, + 23624 - 11905: 0xC7FC, + 23625 - 11905: 0xCCEB, + 23626 - 11905: 0xBDEC, + 23627 - 11905: 0xCEDD, + 23628 - 11905: 0x8CC5, + 23629 - 11905: 0x8CC6, + 23630 - 11905: 0xCABA, + 23631 - 11905: 0xC6C1, + 23632 - 11905: 0xE5EC, + 23633 - 11905: 0xD0BC, + 23634 - 11905: 0x8CC7, + 23635 - 11905: 0x8CC8, + 23636 - 11905: 0x8CC9, + 23637 - 11905: 0xD5B9, + 23638 - 11905: 0x8CCA, + 23639 - 11905: 0x8CCB, + 23640 - 11905: 0x8CCC, + 23641 - 11905: 0xE5ED, + 23642 - 11905: 0x8CCD, + 23643 - 11905: 0x8CCE, + 23644 - 11905: 0x8CCF, + 23645 - 11905: 0x8CD0, + 23646 - 11905: 0xCAF4, + 23647 - 11905: 0x8CD1, + 23648 - 11905: 0xCDC0, + 23649 - 11905: 0xC2C5, + 23650 - 11905: 0x8CD2, + 23651 - 11905: 0xE5EF, + 23652 - 11905: 0x8CD3, + 23653 - 11905: 0xC2C4, + 23654 - 11905: 0xE5F0, + 23655 - 11905: 0x8CD4, + 23656 - 11905: 0x8CD5, + 23657 - 11905: 0x8CD6, + 23658 - 11905: 0x8CD7, + 23659 - 11905: 0x8CD8, + 23660 - 11905: 0x8CD9, + 23661 - 11905: 0x8CDA, + 23662 - 11905: 0xE5F8, + 23663 - 11905: 0xCDCD, + 23664 - 11905: 0x8CDB, + 23665 - 11905: 0xC9BD, + 23666 - 11905: 0x8CDC, + 23667 - 11905: 0x8CDD, + 23668 - 11905: 0x8CDE, + 23669 - 11905: 0x8CDF, + 23670 - 11905: 0x8CE0, + 23671 - 11905: 0x8CE1, + 23672 - 11905: 0x8CE2, + 23673 - 11905: 0xD2D9, + 23674 - 11905: 0xE1A8, + 23675 - 11905: 0x8CE3, + 23676 - 11905: 0x8CE4, + 23677 - 11905: 0x8CE5, + 23678 - 11905: 0x8CE6, + 23679 - 11905: 0xD3EC, + 23680 - 11905: 0x8CE7, + 23681 - 11905: 0xCBEA, + 23682 - 11905: 0xC6F1, + 23683 - 11905: 0x8CE8, + 23684 - 11905: 0x8CE9, + 23685 - 11905: 0x8CEA, + 23686 - 11905: 0x8CEB, + 23687 - 11905: 0x8CEC, + 23688 - 11905: 0xE1AC, + 23689 - 11905: 0x8CED, + 23690 - 11905: 0x8CEE, + 23691 - 11905: 0x8CEF, + 23692 - 11905: 0xE1A7, + 23693 - 11905: 0xE1A9, + 23694 - 11905: 0x8CF0, + 23695 - 11905: 0x8CF1, + 23696 - 11905: 0xE1AA, + 23697 - 11905: 0xE1AF, + 23698 - 11905: 0x8CF2, + 23699 - 11905: 0x8CF3, + 23700 - 11905: 0xB2ED, + 23701 - 11905: 0x8CF4, + 23702 - 11905: 0xE1AB, + 23703 - 11905: 0xB8DA, + 23704 - 11905: 0xE1AD, + 23705 - 11905: 0xE1AE, + 23706 - 11905: 0xE1B0, + 23707 - 11905: 0xB5BA, + 23708 - 11905: 0xE1B1, + 23709 - 11905: 0x8CF5, + 23710 - 11905: 0x8CF6, + 23711 - 11905: 0x8CF7, + 23712 - 11905: 0x8CF8, + 23713 - 11905: 0x8CF9, + 23714 - 11905: 0xE1B3, + 23715 - 11905: 0xE1B8, + 23716 - 11905: 0x8CFA, + 23717 - 11905: 0x8CFB, + 23718 - 11905: 0x8CFC, + 23719 - 11905: 0x8CFD, + 23720 - 11905: 0x8CFE, + 23721 - 11905: 0xD1D2, + 23722 - 11905: 0x8D40, + 23723 - 11905: 0xE1B6, + 23724 - 11905: 0xE1B5, + 23725 - 11905: 0xC1EB, + 23726 - 11905: 0x8D41, + 23727 - 11905: 0x8D42, + 23728 - 11905: 0x8D43, + 23729 - 11905: 0xE1B7, + 23730 - 11905: 0x8D44, + 23731 - 11905: 0xD4C0, + 23732 - 11905: 0x8D45, + 23733 - 11905: 0xE1B2, + 23734 - 11905: 0x8D46, + 23735 - 11905: 0xE1BA, + 23736 - 11905: 0xB0B6, + 23737 - 11905: 0x8D47, + 23738 - 11905: 0x8D48, + 23739 - 11905: 0x8D49, + 23740 - 11905: 0x8D4A, + 23741 - 11905: 0xE1B4, + 23742 - 11905: 0x8D4B, + 23743 - 11905: 0xBFF9, + 23744 - 11905: 0x8D4C, + 23745 - 11905: 0xE1B9, + 23746 - 11905: 0x8D4D, + 23747 - 11905: 0x8D4E, + 23748 - 11905: 0xE1BB, + 23749 - 11905: 0x8D4F, + 23750 - 11905: 0x8D50, + 23751 - 11905: 0x8D51, + 23752 - 11905: 0x8D52, + 23753 - 11905: 0x8D53, + 23754 - 11905: 0x8D54, + 23755 - 11905: 0xE1BE, + 23756 - 11905: 0x8D55, + 23757 - 11905: 0x8D56, + 23758 - 11905: 0x8D57, + 23759 - 11905: 0x8D58, + 23760 - 11905: 0x8D59, + 23761 - 11905: 0x8D5A, + 23762 - 11905: 0xE1BC, + 23763 - 11905: 0x8D5B, + 23764 - 11905: 0x8D5C, + 23765 - 11905: 0x8D5D, + 23766 - 11905: 0x8D5E, + 23767 - 11905: 0x8D5F, + 23768 - 11905: 0x8D60, + 23769 - 11905: 0xD6C5, + 23770 - 11905: 0x8D61, + 23771 - 11905: 0x8D62, + 23772 - 11905: 0x8D63, + 23773 - 11905: 0x8D64, + 23774 - 11905: 0x8D65, + 23775 - 11905: 0x8D66, + 23776 - 11905: 0x8D67, + 23777 - 11905: 0xCFBF, + 23778 - 11905: 0x8D68, + 23779 - 11905: 0x8D69, + 23780 - 11905: 0xE1BD, + 23781 - 11905: 0xE1BF, + 23782 - 11905: 0xC2CD, + 23783 - 11905: 0x8D6A, + 23784 - 11905: 0xB6EB, + 23785 - 11905: 0x8D6B, + 23786 - 11905: 0xD3F8, + 23787 - 11905: 0x8D6C, + 23788 - 11905: 0x8D6D, + 23789 - 11905: 0xC7CD, + 23790 - 11905: 0x8D6E, + 23791 - 11905: 0x8D6F, + 23792 - 11905: 0xB7E5, + 23793 - 11905: 0x8D70, + 23794 - 11905: 0x8D71, + 23795 - 11905: 0x8D72, + 23796 - 11905: 0x8D73, + 23797 - 11905: 0x8D74, + 23798 - 11905: 0x8D75, + 23799 - 11905: 0x8D76, + 23800 - 11905: 0x8D77, + 23801 - 11905: 0x8D78, + 23802 - 11905: 0x8D79, + 23803 - 11905: 0xBEFE, + 23804 - 11905: 0x8D7A, + 23805 - 11905: 0x8D7B, + 23806 - 11905: 0x8D7C, + 23807 - 11905: 0x8D7D, + 23808 - 11905: 0x8D7E, + 23809 - 11905: 0x8D80, + 23810 - 11905: 0xE1C0, + 23811 - 11905: 0xE1C1, + 23812 - 11905: 0x8D81, + 23813 - 11905: 0x8D82, + 23814 - 11905: 0xE1C7, + 23815 - 11905: 0xB3E7, + 23816 - 11905: 0x8D83, + 23817 - 11905: 0x8D84, + 23818 - 11905: 0x8D85, + 23819 - 11905: 0x8D86, + 23820 - 11905: 0x8D87, + 23821 - 11905: 0x8D88, + 23822 - 11905: 0xC6E9, + 23823 - 11905: 0x8D89, + 23824 - 11905: 0x8D8A, + 23825 - 11905: 0x8D8B, + 23826 - 11905: 0x8D8C, + 23827 - 11905: 0x8D8D, + 23828 - 11905: 0xB4DE, + 23829 - 11905: 0x8D8E, + 23830 - 11905: 0xD1C2, + 23831 - 11905: 0x8D8F, + 23832 - 11905: 0x8D90, + 23833 - 11905: 0x8D91, + 23834 - 11905: 0x8D92, + 23835 - 11905: 0xE1C8, + 23836 - 11905: 0x8D93, + 23837 - 11905: 0x8D94, + 23838 - 11905: 0xE1C6, + 23839 - 11905: 0x8D95, + 23840 - 11905: 0x8D96, + 23841 - 11905: 0x8D97, + 23842 - 11905: 0x8D98, + 23843 - 11905: 0x8D99, + 23844 - 11905: 0xE1C5, + 23845 - 11905: 0x8D9A, + 23846 - 11905: 0xE1C3, + 23847 - 11905: 0xE1C2, + 23848 - 11905: 0x8D9B, + 23849 - 11905: 0xB1C0, + 23850 - 11905: 0x8D9C, + 23851 - 11905: 0x8D9D, + 23852 - 11905: 0x8D9E, + 23853 - 11905: 0xD5B8, + 23854 - 11905: 0xE1C4, + 23855 - 11905: 0x8D9F, + 23856 - 11905: 0x8DA0, + 23857 - 11905: 0x8DA1, + 23858 - 11905: 0x8DA2, + 23859 - 11905: 0x8DA3, + 23860 - 11905: 0xE1CB, + 23861 - 11905: 0x8DA4, + 23862 - 11905: 0x8DA5, + 23863 - 11905: 0x8DA6, + 23864 - 11905: 0x8DA7, + 23865 - 11905: 0x8DA8, + 23866 - 11905: 0x8DA9, + 23867 - 11905: 0x8DAA, + 23868 - 11905: 0x8DAB, + 23869 - 11905: 0xE1CC, + 23870 - 11905: 0xE1CA, + 23871 - 11905: 0x8DAC, + 23872 - 11905: 0x8DAD, + 23873 - 11905: 0x8DAE, + 23874 - 11905: 0x8DAF, + 23875 - 11905: 0x8DB0, + 23876 - 11905: 0x8DB1, + 23877 - 11905: 0x8DB2, + 23878 - 11905: 0x8DB3, + 23879 - 11905: 0xEFFA, + 23880 - 11905: 0x8DB4, + 23881 - 11905: 0x8DB5, + 23882 - 11905: 0xE1D3, + 23883 - 11905: 0xE1D2, + 23884 - 11905: 0xC7B6, + 23885 - 11905: 0x8DB6, + 23886 - 11905: 0x8DB7, + 23887 - 11905: 0x8DB8, + 23888 - 11905: 0x8DB9, + 23889 - 11905: 0x8DBA, + 23890 - 11905: 0x8DBB, + 23891 - 11905: 0x8DBC, + 23892 - 11905: 0x8DBD, + 23893 - 11905: 0x8DBE, + 23894 - 11905: 0x8DBF, + 23895 - 11905: 0x8DC0, + 23896 - 11905: 0xE1C9, + 23897 - 11905: 0x8DC1, + 23898 - 11905: 0x8DC2, + 23899 - 11905: 0xE1CE, + 23900 - 11905: 0x8DC3, + 23901 - 11905: 0xE1D0, + 23902 - 11905: 0x8DC4, + 23903 - 11905: 0x8DC5, + 23904 - 11905: 0x8DC6, + 23905 - 11905: 0x8DC7, + 23906 - 11905: 0x8DC8, + 23907 - 11905: 0x8DC9, + 23908 - 11905: 0x8DCA, + 23909 - 11905: 0x8DCB, + 23910 - 11905: 0x8DCC, + 23911 - 11905: 0x8DCD, + 23912 - 11905: 0x8DCE, + 23913 - 11905: 0xE1D4, + 23914 - 11905: 0x8DCF, + 23915 - 11905: 0xE1D1, + 23916 - 11905: 0xE1CD, + 23917 - 11905: 0x8DD0, + 23918 - 11905: 0x8DD1, + 23919 - 11905: 0xE1CF, + 23920 - 11905: 0x8DD2, + 23921 - 11905: 0x8DD3, + 23922 - 11905: 0x8DD4, + 23923 - 11905: 0x8DD5, + 23924 - 11905: 0xE1D5, + 23925 - 11905: 0x8DD6, + 23926 - 11905: 0x8DD7, + 23927 - 11905: 0x8DD8, + 23928 - 11905: 0x8DD9, + 23929 - 11905: 0x8DDA, + 23930 - 11905: 0x8DDB, + 23931 - 11905: 0x8DDC, + 23932 - 11905: 0x8DDD, + 23933 - 11905: 0x8DDE, + 23934 - 11905: 0x8DDF, + 23935 - 11905: 0x8DE0, + 23936 - 11905: 0x8DE1, + 23937 - 11905: 0x8DE2, + 23938 - 11905: 0xE1D6, + 23939 - 11905: 0x8DE3, + 23940 - 11905: 0x8DE4, + 23941 - 11905: 0x8DE5, + 23942 - 11905: 0x8DE6, + 23943 - 11905: 0x8DE7, + 23944 - 11905: 0x8DE8, + 23945 - 11905: 0x8DE9, + 23946 - 11905: 0x8DEA, + 23947 - 11905: 0x8DEB, + 23948 - 11905: 0x8DEC, + 23949 - 11905: 0x8DED, + 23950 - 11905: 0x8DEE, + 23951 - 11905: 0x8DEF, + 23952 - 11905: 0x8DF0, + 23953 - 11905: 0x8DF1, + 23954 - 11905: 0x8DF2, + 23955 - 11905: 0x8DF3, + 23956 - 11905: 0x8DF4, + 23957 - 11905: 0x8DF5, + 23958 - 11905: 0x8DF6, + 23959 - 11905: 0x8DF7, + 23960 - 11905: 0x8DF8, + 23961 - 11905: 0xE1D7, + 23962 - 11905: 0x8DF9, + 23963 - 11905: 0x8DFA, + 23964 - 11905: 0x8DFB, + 23965 - 11905: 0xE1D8, + 23966 - 11905: 0x8DFC, + 23967 - 11905: 0x8DFD, + 23968 - 11905: 0x8DFE, + 23969 - 11905: 0x8E40, + 23970 - 11905: 0x8E41, + 23971 - 11905: 0x8E42, + 23972 - 11905: 0x8E43, + 23973 - 11905: 0x8E44, + 23974 - 11905: 0x8E45, + 23975 - 11905: 0x8E46, + 23976 - 11905: 0x8E47, + 23977 - 11905: 0x8E48, + 23978 - 11905: 0x8E49, + 23979 - 11905: 0x8E4A, + 23980 - 11905: 0x8E4B, + 23981 - 11905: 0x8E4C, + 23982 - 11905: 0x8E4D, + 23983 - 11905: 0x8E4E, + 23984 - 11905: 0x8E4F, + 23985 - 11905: 0x8E50, + 23986 - 11905: 0x8E51, + 23987 - 11905: 0x8E52, + 23988 - 11905: 0x8E53, + 23989 - 11905: 0x8E54, + 23990 - 11905: 0x8E55, + 23991 - 11905: 0xE1DA, + 23992 - 11905: 0x8E56, + 23993 - 11905: 0x8E57, + 23994 - 11905: 0x8E58, + 23995 - 11905: 0x8E59, + 23996 - 11905: 0x8E5A, + 23997 - 11905: 0x8E5B, + 23998 - 11905: 0x8E5C, + 23999 - 11905: 0x8E5D, + 24000 - 11905: 0x8E5E, + 24001 - 11905: 0x8E5F, + 24002 - 11905: 0x8E60, + 24003 - 11905: 0x8E61, + 24004 - 11905: 0x8E62, + 24005 - 11905: 0xE1DB, + 24006 - 11905: 0x8E63, + 24007 - 11905: 0x8E64, + 24008 - 11905: 0x8E65, + 24009 - 11905: 0x8E66, + 24010 - 11905: 0x8E67, + 24011 - 11905: 0x8E68, + 24012 - 11905: 0x8E69, + 24013 - 11905: 0xCEA1, + 24014 - 11905: 0x8E6A, + 24015 - 11905: 0x8E6B, + 24016 - 11905: 0x8E6C, + 24017 - 11905: 0x8E6D, + 24018 - 11905: 0x8E6E, + 24019 - 11905: 0x8E6F, + 24020 - 11905: 0x8E70, + 24021 - 11905: 0x8E71, + 24022 - 11905: 0x8E72, + 24023 - 11905: 0x8E73, + 24024 - 11905: 0x8E74, + 24025 - 11905: 0x8E75, + 24026 - 11905: 0x8E76, + 24027 - 11905: 0xE7DD, + 24028 - 11905: 0x8E77, + 24029 - 11905: 0xB4A8, + 24030 - 11905: 0xD6DD, + 24031 - 11905: 0x8E78, + 24032 - 11905: 0x8E79, + 24033 - 11905: 0xD1B2, + 24034 - 11905: 0xB3B2, + 24035 - 11905: 0x8E7A, + 24036 - 11905: 0x8E7B, + 24037 - 11905: 0xB9A4, + 24038 - 11905: 0xD7F3, + 24039 - 11905: 0xC7C9, + 24040 - 11905: 0xBEDE, + 24041 - 11905: 0xB9AE, + 24042 - 11905: 0x8E7C, + 24043 - 11905: 0xCED7, + 24044 - 11905: 0x8E7D, + 24045 - 11905: 0x8E7E, + 24046 - 11905: 0xB2EE, + 24047 - 11905: 0xDBCF, + 24048 - 11905: 0x8E80, + 24049 - 11905: 0xBCBA, + 24050 - 11905: 0xD2D1, + 24051 - 11905: 0xCBC8, + 24052 - 11905: 0xB0CD, + 24053 - 11905: 0x8E81, + 24054 - 11905: 0x8E82, + 24055 - 11905: 0xCFEF, + 24056 - 11905: 0x8E83, + 24057 - 11905: 0x8E84, + 24058 - 11905: 0x8E85, + 24059 - 11905: 0x8E86, + 24060 - 11905: 0x8E87, + 24061 - 11905: 0xD9E3, + 24062 - 11905: 0xBDED, + 24063 - 11905: 0x8E88, + 24064 - 11905: 0x8E89, + 24065 - 11905: 0xB1D2, + 24066 - 11905: 0xCAD0, + 24067 - 11905: 0xB2BC, + 24068 - 11905: 0x8E8A, + 24069 - 11905: 0xCBA7, + 24070 - 11905: 0xB7AB, + 24071 - 11905: 0x8E8B, + 24072 - 11905: 0xCAA6, + 24073 - 11905: 0x8E8C, + 24074 - 11905: 0x8E8D, + 24075 - 11905: 0x8E8E, + 24076 - 11905: 0xCFA3, + 24077 - 11905: 0x8E8F, + 24078 - 11905: 0x8E90, + 24079 - 11905: 0xE0F8, + 24080 - 11905: 0xD5CA, + 24081 - 11905: 0xE0FB, + 24082 - 11905: 0x8E91, + 24083 - 11905: 0x8E92, + 24084 - 11905: 0xE0FA, + 24085 - 11905: 0xC5C1, + 24086 - 11905: 0xCCFB, + 24087 - 11905: 0x8E93, + 24088 - 11905: 0xC1B1, + 24089 - 11905: 0xE0F9, + 24090 - 11905: 0xD6E3, + 24091 - 11905: 0xB2AF, + 24092 - 11905: 0xD6C4, + 24093 - 11905: 0xB5DB, + 24094 - 11905: 0x8E94, + 24095 - 11905: 0x8E95, + 24096 - 11905: 0x8E96, + 24097 - 11905: 0x8E97, + 24098 - 11905: 0x8E98, + 24099 - 11905: 0x8E99, + 24100 - 11905: 0x8E9A, + 24101 - 11905: 0x8E9B, + 24102 - 11905: 0xB4F8, + 24103 - 11905: 0xD6A1, + 24104 - 11905: 0x8E9C, + 24105 - 11905: 0x8E9D, + 24106 - 11905: 0x8E9E, + 24107 - 11905: 0x8E9F, + 24108 - 11905: 0x8EA0, + 24109 - 11905: 0xCFAF, + 24110 - 11905: 0xB0EF, + 24111 - 11905: 0x8EA1, + 24112 - 11905: 0x8EA2, + 24113 - 11905: 0xE0FC, + 24114 - 11905: 0x8EA3, + 24115 - 11905: 0x8EA4, + 24116 - 11905: 0x8EA5, + 24117 - 11905: 0x8EA6, + 24118 - 11905: 0x8EA7, + 24119 - 11905: 0xE1A1, + 24120 - 11905: 0xB3A3, + 24121 - 11905: 0x8EA8, + 24122 - 11905: 0x8EA9, + 24123 - 11905: 0xE0FD, + 24124 - 11905: 0xE0FE, + 24125 - 11905: 0xC3B1, + 24126 - 11905: 0x8EAA, + 24127 - 11905: 0x8EAB, + 24128 - 11905: 0x8EAC, + 24129 - 11905: 0x8EAD, + 24130 - 11905: 0xC3DD, + 24131 - 11905: 0x8EAE, + 24132 - 11905: 0xE1A2, + 24133 - 11905: 0xB7F9, + 24134 - 11905: 0x8EAF, + 24135 - 11905: 0x8EB0, + 24136 - 11905: 0x8EB1, + 24137 - 11905: 0x8EB2, + 24138 - 11905: 0x8EB3, + 24139 - 11905: 0x8EB4, + 24140 - 11905: 0xBBCF, + 24141 - 11905: 0x8EB5, + 24142 - 11905: 0x8EB6, + 24143 - 11905: 0x8EB7, + 24144 - 11905: 0x8EB8, + 24145 - 11905: 0x8EB9, + 24146 - 11905: 0x8EBA, + 24147 - 11905: 0x8EBB, + 24148 - 11905: 0xE1A3, + 24149 - 11905: 0xC4BB, + 24150 - 11905: 0x8EBC, + 24151 - 11905: 0x8EBD, + 24152 - 11905: 0x8EBE, + 24153 - 11905: 0x8EBF, + 24154 - 11905: 0x8EC0, + 24155 - 11905: 0xE1A4, + 24156 - 11905: 0x8EC1, + 24157 - 11905: 0x8EC2, + 24158 - 11905: 0xE1A5, + 24159 - 11905: 0x8EC3, + 24160 - 11905: 0x8EC4, + 24161 - 11905: 0xE1A6, + 24162 - 11905: 0xB4B1, + 24163 - 11905: 0x8EC5, + 24164 - 11905: 0x8EC6, + 24165 - 11905: 0x8EC7, + 24166 - 11905: 0x8EC8, + 24167 - 11905: 0x8EC9, + 24168 - 11905: 0x8ECA, + 24169 - 11905: 0x8ECB, + 24170 - 11905: 0x8ECC, + 24171 - 11905: 0x8ECD, + 24172 - 11905: 0x8ECE, + 24173 - 11905: 0x8ECF, + 24174 - 11905: 0x8ED0, + 24175 - 11905: 0x8ED1, + 24176 - 11905: 0x8ED2, + 24177 - 11905: 0x8ED3, + 24178 - 11905: 0xB8C9, + 24179 - 11905: 0xC6BD, + 24180 - 11905: 0xC4EA, + 24181 - 11905: 0x8ED4, + 24182 - 11905: 0xB2A2, + 24183 - 11905: 0x8ED5, + 24184 - 11905: 0xD0D2, + 24185 - 11905: 0x8ED6, + 24186 - 11905: 0xE7DB, + 24187 - 11905: 0xBBC3, + 24188 - 11905: 0xD3D7, + 24189 - 11905: 0xD3C4, + 24190 - 11905: 0x8ED7, + 24191 - 11905: 0xB9E3, + 24192 - 11905: 0xE2CF, + 24193 - 11905: 0x8ED8, + 24194 - 11905: 0x8ED9, + 24195 - 11905: 0x8EDA, + 24196 - 11905: 0xD7AF, + 24197 - 11905: 0x8EDB, + 24198 - 11905: 0xC7EC, + 24199 - 11905: 0xB1D3, + 24200 - 11905: 0x8EDC, + 24201 - 11905: 0x8EDD, + 24202 - 11905: 0xB4B2, + 24203 - 11905: 0xE2D1, + 24204 - 11905: 0x8EDE, + 24205 - 11905: 0x8EDF, + 24206 - 11905: 0x8EE0, + 24207 - 11905: 0xD0F2, + 24208 - 11905: 0xC2AE, + 24209 - 11905: 0xE2D0, + 24210 - 11905: 0x8EE1, + 24211 - 11905: 0xBFE2, + 24212 - 11905: 0xD3A6, + 24213 - 11905: 0xB5D7, + 24214 - 11905: 0xE2D2, + 24215 - 11905: 0xB5EA, + 24216 - 11905: 0x8EE2, + 24217 - 11905: 0xC3ED, + 24218 - 11905: 0xB8FD, + 24219 - 11905: 0x8EE3, + 24220 - 11905: 0xB8AE, + 24221 - 11905: 0x8EE4, + 24222 - 11905: 0xC5D3, + 24223 - 11905: 0xB7CF, + 24224 - 11905: 0xE2D4, + 24225 - 11905: 0x8EE5, + 24226 - 11905: 0x8EE6, + 24227 - 11905: 0x8EE7, + 24228 - 11905: 0x8EE8, + 24229 - 11905: 0xE2D3, + 24230 - 11905: 0xB6C8, + 24231 - 11905: 0xD7F9, + 24232 - 11905: 0x8EE9, + 24233 - 11905: 0x8EEA, + 24234 - 11905: 0x8EEB, + 24235 - 11905: 0x8EEC, + 24236 - 11905: 0x8EED, + 24237 - 11905: 0xCDA5, + 24238 - 11905: 0x8EEE, + 24239 - 11905: 0x8EEF, + 24240 - 11905: 0x8EF0, + 24241 - 11905: 0x8EF1, + 24242 - 11905: 0x8EF2, + 24243 - 11905: 0xE2D8, + 24244 - 11905: 0x8EF3, + 24245 - 11905: 0xE2D6, + 24246 - 11905: 0xCAFC, + 24247 - 11905: 0xBFB5, + 24248 - 11905: 0xD3B9, + 24249 - 11905: 0xE2D5, + 24250 - 11905: 0x8EF4, + 24251 - 11905: 0x8EF5, + 24252 - 11905: 0x8EF6, + 24253 - 11905: 0x8EF7, + 24254 - 11905: 0xE2D7, + 24255 - 11905: 0x8EF8, + 24256 - 11905: 0x8EF9, + 24257 - 11905: 0x8EFA, + 24258 - 11905: 0x8EFB, + 24259 - 11905: 0x8EFC, + 24260 - 11905: 0x8EFD, + 24261 - 11905: 0x8EFE, + 24262 - 11905: 0x8F40, + 24263 - 11905: 0x8F41, + 24264 - 11905: 0x8F42, + 24265 - 11905: 0xC1AE, + 24266 - 11905: 0xC0C8, + 24267 - 11905: 0x8F43, + 24268 - 11905: 0x8F44, + 24269 - 11905: 0x8F45, + 24270 - 11905: 0x8F46, + 24271 - 11905: 0x8F47, + 24272 - 11905: 0x8F48, + 24273 - 11905: 0xE2DB, + 24274 - 11905: 0xE2DA, + 24275 - 11905: 0xC0AA, + 24276 - 11905: 0x8F49, + 24277 - 11905: 0x8F4A, + 24278 - 11905: 0xC1CE, + 24279 - 11905: 0x8F4B, + 24280 - 11905: 0x8F4C, + 24281 - 11905: 0x8F4D, + 24282 - 11905: 0x8F4E, + 24283 - 11905: 0xE2DC, + 24284 - 11905: 0x8F4F, + 24285 - 11905: 0x8F50, + 24286 - 11905: 0x8F51, + 24287 - 11905: 0x8F52, + 24288 - 11905: 0x8F53, + 24289 - 11905: 0x8F54, + 24290 - 11905: 0x8F55, + 24291 - 11905: 0x8F56, + 24292 - 11905: 0x8F57, + 24293 - 11905: 0x8F58, + 24294 - 11905: 0x8F59, + 24295 - 11905: 0x8F5A, + 24296 - 11905: 0xE2DD, + 24297 - 11905: 0x8F5B, + 24298 - 11905: 0xE2DE, + 24299 - 11905: 0x8F5C, + 24300 - 11905: 0x8F5D, + 24301 - 11905: 0x8F5E, + 24302 - 11905: 0x8F5F, + 24303 - 11905: 0x8F60, + 24304 - 11905: 0x8F61, + 24305 - 11905: 0x8F62, + 24306 - 11905: 0x8F63, + 24307 - 11905: 0x8F64, + 24308 - 11905: 0xDBC8, + 24309 - 11905: 0x8F65, + 24310 - 11905: 0xD1D3, + 24311 - 11905: 0xCDA2, + 24312 - 11905: 0x8F66, + 24313 - 11905: 0x8F67, + 24314 - 11905: 0xBDA8, + 24315 - 11905: 0x8F68, + 24316 - 11905: 0x8F69, + 24317 - 11905: 0x8F6A, + 24318 - 11905: 0xDEC3, + 24319 - 11905: 0xD8A5, + 24320 - 11905: 0xBFAA, + 24321 - 11905: 0xDBCD, + 24322 - 11905: 0xD2EC, + 24323 - 11905: 0xC6FA, + 24324 - 11905: 0xC5AA, + 24325 - 11905: 0x8F6B, + 24326 - 11905: 0x8F6C, + 24327 - 11905: 0x8F6D, + 24328 - 11905: 0xDEC4, + 24329 - 11905: 0x8F6E, + 24330 - 11905: 0xB1D7, + 24331 - 11905: 0xDFAE, + 24332 - 11905: 0x8F6F, + 24333 - 11905: 0x8F70, + 24334 - 11905: 0x8F71, + 24335 - 11905: 0xCABD, + 24336 - 11905: 0x8F72, + 24337 - 11905: 0xDFB1, + 24338 - 11905: 0x8F73, + 24339 - 11905: 0xB9AD, + 24340 - 11905: 0x8F74, + 24341 - 11905: 0xD2FD, + 24342 - 11905: 0x8F75, + 24343 - 11905: 0xB8A5, + 24344 - 11905: 0xBAEB, + 24345 - 11905: 0x8F76, + 24346 - 11905: 0x8F77, + 24347 - 11905: 0xB3DA, + 24348 - 11905: 0x8F78, + 24349 - 11905: 0x8F79, + 24350 - 11905: 0x8F7A, + 24351 - 11905: 0xB5DC, + 24352 - 11905: 0xD5C5, + 24353 - 11905: 0x8F7B, + 24354 - 11905: 0x8F7C, + 24355 - 11905: 0x8F7D, + 24356 - 11905: 0x8F7E, + 24357 - 11905: 0xC3D6, + 24358 - 11905: 0xCFD2, + 24359 - 11905: 0xBBA1, + 24360 - 11905: 0x8F80, + 24361 - 11905: 0xE5F3, + 24362 - 11905: 0xE5F2, + 24363 - 11905: 0x8F81, + 24364 - 11905: 0x8F82, + 24365 - 11905: 0xE5F4, + 24366 - 11905: 0x8F83, + 24367 - 11905: 0xCDE4, + 24368 - 11905: 0x8F84, + 24369 - 11905: 0xC8F5, + 24370 - 11905: 0x8F85, + 24371 - 11905: 0x8F86, + 24372 - 11905: 0x8F87, + 24373 - 11905: 0x8F88, + 24374 - 11905: 0x8F89, + 24375 - 11905: 0x8F8A, + 24376 - 11905: 0x8F8B, + 24377 - 11905: 0xB5AF, + 24378 - 11905: 0xC7BF, + 24379 - 11905: 0x8F8C, + 24380 - 11905: 0xE5F6, + 24381 - 11905: 0x8F8D, + 24382 - 11905: 0x8F8E, + 24383 - 11905: 0x8F8F, + 24384 - 11905: 0xECB0, + 24385 - 11905: 0x8F90, + 24386 - 11905: 0x8F91, + 24387 - 11905: 0x8F92, + 24388 - 11905: 0x8F93, + 24389 - 11905: 0x8F94, + 24390 - 11905: 0x8F95, + 24391 - 11905: 0x8F96, + 24392 - 11905: 0x8F97, + 24393 - 11905: 0x8F98, + 24394 - 11905: 0x8F99, + 24395 - 11905: 0x8F9A, + 24396 - 11905: 0x8F9B, + 24397 - 11905: 0x8F9C, + 24398 - 11905: 0x8F9D, + 24399 - 11905: 0x8F9E, + 24400 - 11905: 0xE5E6, + 24401 - 11905: 0x8F9F, + 24402 - 11905: 0xB9E9, + 24403 - 11905: 0xB5B1, + 24404 - 11905: 0x8FA0, + 24405 - 11905: 0xC2BC, + 24406 - 11905: 0xE5E8, + 24407 - 11905: 0xE5E7, + 24408 - 11905: 0xE5E9, + 24409 - 11905: 0x8FA1, + 24410 - 11905: 0x8FA2, + 24411 - 11905: 0x8FA3, + 24412 - 11905: 0x8FA4, + 24413 - 11905: 0xD2CD, + 24414 - 11905: 0x8FA5, + 24415 - 11905: 0x8FA6, + 24416 - 11905: 0x8FA7, + 24417 - 11905: 0xE1EA, + 24418 - 11905: 0xD0CE, + 24419 - 11905: 0x8FA8, + 24420 - 11905: 0xCDAE, + 24421 - 11905: 0x8FA9, + 24422 - 11905: 0xD1E5, + 24423 - 11905: 0x8FAA, + 24424 - 11905: 0x8FAB, + 24425 - 11905: 0xB2CA, + 24426 - 11905: 0xB1EB, + 24427 - 11905: 0x8FAC, + 24428 - 11905: 0xB1F2, + 24429 - 11905: 0xC5ED, + 24430 - 11905: 0x8FAD, + 24431 - 11905: 0x8FAE, + 24432 - 11905: 0xD5C3, + 24433 - 11905: 0xD3B0, + 24434 - 11905: 0x8FAF, + 24435 - 11905: 0xE1DC, + 24436 - 11905: 0x8FB0, + 24437 - 11905: 0x8FB1, + 24438 - 11905: 0x8FB2, + 24439 - 11905: 0xE1DD, + 24440 - 11905: 0x8FB3, + 24441 - 11905: 0xD2DB, + 24442 - 11905: 0x8FB4, + 24443 - 11905: 0xB3B9, + 24444 - 11905: 0xB1CB, + 24445 - 11905: 0x8FB5, + 24446 - 11905: 0x8FB6, + 24447 - 11905: 0x8FB7, + 24448 - 11905: 0xCDF9, + 24449 - 11905: 0xD5F7, + 24450 - 11905: 0xE1DE, + 24451 - 11905: 0x8FB8, + 24452 - 11905: 0xBEB6, + 24453 - 11905: 0xB4FD, + 24454 - 11905: 0x8FB9, + 24455 - 11905: 0xE1DF, + 24456 - 11905: 0xBADC, + 24457 - 11905: 0xE1E0, + 24458 - 11905: 0xBBB2, + 24459 - 11905: 0xC2C9, + 24460 - 11905: 0xE1E1, + 24461 - 11905: 0x8FBA, + 24462 - 11905: 0x8FBB, + 24463 - 11905: 0x8FBC, + 24464 - 11905: 0xD0EC, + 24465 - 11905: 0x8FBD, + 24466 - 11905: 0xCDBD, + 24467 - 11905: 0x8FBE, + 24468 - 11905: 0x8FBF, + 24469 - 11905: 0xE1E2, + 24470 - 11905: 0x8FC0, + 24471 - 11905: 0xB5C3, + 24472 - 11905: 0xC5C7, + 24473 - 11905: 0xE1E3, + 24474 - 11905: 0x8FC1, + 24475 - 11905: 0x8FC2, + 24476 - 11905: 0xE1E4, + 24477 - 11905: 0x8FC3, + 24478 - 11905: 0x8FC4, + 24479 - 11905: 0x8FC5, + 24480 - 11905: 0x8FC6, + 24481 - 11905: 0xD3F9, + 24482 - 11905: 0x8FC7, + 24483 - 11905: 0x8FC8, + 24484 - 11905: 0x8FC9, + 24485 - 11905: 0x8FCA, + 24486 - 11905: 0x8FCB, + 24487 - 11905: 0x8FCC, + 24488 - 11905: 0xE1E5, + 24489 - 11905: 0x8FCD, + 24490 - 11905: 0xD1AD, + 24491 - 11905: 0x8FCE, + 24492 - 11905: 0x8FCF, + 24493 - 11905: 0xE1E6, + 24494 - 11905: 0xCEA2, + 24495 - 11905: 0x8FD0, + 24496 - 11905: 0x8FD1, + 24497 - 11905: 0x8FD2, + 24498 - 11905: 0x8FD3, + 24499 - 11905: 0x8FD4, + 24500 - 11905: 0x8FD5, + 24501 - 11905: 0xE1E7, + 24502 - 11905: 0x8FD6, + 24503 - 11905: 0xB5C2, + 24504 - 11905: 0x8FD7, + 24505 - 11905: 0x8FD8, + 24506 - 11905: 0x8FD9, + 24507 - 11905: 0x8FDA, + 24508 - 11905: 0xE1E8, + 24509 - 11905: 0xBBD5, + 24510 - 11905: 0x8FDB, + 24511 - 11905: 0x8FDC, + 24512 - 11905: 0x8FDD, + 24513 - 11905: 0x8FDE, + 24514 - 11905: 0x8FDF, + 24515 - 11905: 0xD0C4, + 24516 - 11905: 0xE2E0, + 24517 - 11905: 0xB1D8, + 24518 - 11905: 0xD2E4, + 24519 - 11905: 0x8FE0, + 24520 - 11905: 0x8FE1, + 24521 - 11905: 0xE2E1, + 24522 - 11905: 0x8FE2, + 24523 - 11905: 0x8FE3, + 24524 - 11905: 0xBCC9, + 24525 - 11905: 0xC8CC, + 24526 - 11905: 0x8FE4, + 24527 - 11905: 0xE2E3, + 24528 - 11905: 0xECFE, + 24529 - 11905: 0xECFD, + 24530 - 11905: 0xDFAF, + 24531 - 11905: 0x8FE5, + 24532 - 11905: 0x8FE6, + 24533 - 11905: 0x8FE7, + 24534 - 11905: 0xE2E2, + 24535 - 11905: 0xD6BE, + 24536 - 11905: 0xCDFC, + 24537 - 11905: 0xC3A6, + 24538 - 11905: 0x8FE8, + 24539 - 11905: 0x8FE9, + 24540 - 11905: 0x8FEA, + 24541 - 11905: 0xE3C3, + 24542 - 11905: 0x8FEB, + 24543 - 11905: 0x8FEC, + 24544 - 11905: 0xD6D2, + 24545 - 11905: 0xE2E7, + 24546 - 11905: 0x8FED, + 24547 - 11905: 0x8FEE, + 24548 - 11905: 0xE2E8, + 24549 - 11905: 0x8FEF, + 24550 - 11905: 0x8FF0, + 24551 - 11905: 0xD3C7, + 24552 - 11905: 0x8FF1, + 24553 - 11905: 0x8FF2, + 24554 - 11905: 0xE2EC, + 24555 - 11905: 0xBFEC, + 24556 - 11905: 0x8FF3, + 24557 - 11905: 0xE2ED, + 24558 - 11905: 0xE2E5, + 24559 - 11905: 0x8FF4, + 24560 - 11905: 0x8FF5, + 24561 - 11905: 0xB3C0, + 24562 - 11905: 0x8FF6, + 24563 - 11905: 0x8FF7, + 24564 - 11905: 0x8FF8, + 24565 - 11905: 0xC4EE, + 24566 - 11905: 0x8FF9, + 24567 - 11905: 0x8FFA, + 24568 - 11905: 0xE2EE, + 24569 - 11905: 0x8FFB, + 24570 - 11905: 0x8FFC, + 24571 - 11905: 0xD0C3, + 24572 - 11905: 0x8FFD, + 24573 - 11905: 0xBAF6, + 24574 - 11905: 0xE2E9, + 24575 - 11905: 0xB7DE, + 24576 - 11905: 0xBBB3, + 24577 - 11905: 0xCCAC, + 24578 - 11905: 0xCBCB, + 24579 - 11905: 0xE2E4, + 24580 - 11905: 0xE2E6, + 24581 - 11905: 0xE2EA, + 24582 - 11905: 0xE2EB, + 24583 - 11905: 0x8FFE, + 24584 - 11905: 0x9040, + 24585 - 11905: 0x9041, + 24586 - 11905: 0xE2F7, + 24587 - 11905: 0x9042, + 24588 - 11905: 0x9043, + 24589 - 11905: 0xE2F4, + 24590 - 11905: 0xD4F5, + 24591 - 11905: 0xE2F3, + 24592 - 11905: 0x9044, + 24593 - 11905: 0x9045, + 24594 - 11905: 0xC5AD, + 24595 - 11905: 0x9046, + 24596 - 11905: 0xD5FA, + 24597 - 11905: 0xC5C2, + 24598 - 11905: 0xB2C0, + 24599 - 11905: 0x9047, + 24600 - 11905: 0x9048, + 24601 - 11905: 0xE2EF, + 24602 - 11905: 0x9049, + 24603 - 11905: 0xE2F2, + 24604 - 11905: 0xC1AF, + 24605 - 11905: 0xCBBC, + 24606 - 11905: 0x904A, + 24607 - 11905: 0x904B, + 24608 - 11905: 0xB5A1, + 24609 - 11905: 0xE2F9, + 24610 - 11905: 0x904C, + 24611 - 11905: 0x904D, + 24612 - 11905: 0x904E, + 24613 - 11905: 0xBCB1, + 24614 - 11905: 0xE2F1, + 24615 - 11905: 0xD0D4, + 24616 - 11905: 0xD4B9, + 24617 - 11905: 0xE2F5, + 24618 - 11905: 0xB9D6, + 24619 - 11905: 0xE2F6, + 24620 - 11905: 0x904F, + 24621 - 11905: 0x9050, + 24622 - 11905: 0x9051, + 24623 - 11905: 0xC7D3, + 24624 - 11905: 0x9052, + 24625 - 11905: 0x9053, + 24626 - 11905: 0x9054, + 24627 - 11905: 0x9055, + 24628 - 11905: 0x9056, + 24629 - 11905: 0xE2F0, + 24630 - 11905: 0x9057, + 24631 - 11905: 0x9058, + 24632 - 11905: 0x9059, + 24633 - 11905: 0x905A, + 24634 - 11905: 0x905B, + 24635 - 11905: 0xD7DC, + 24636 - 11905: 0xEDA1, + 24637 - 11905: 0x905C, + 24638 - 11905: 0x905D, + 24639 - 11905: 0xE2F8, + 24640 - 11905: 0x905E, + 24641 - 11905: 0xEDA5, + 24642 - 11905: 0xE2FE, + 24643 - 11905: 0xCAD1, + 24644 - 11905: 0x905F, + 24645 - 11905: 0x9060, + 24646 - 11905: 0x9061, + 24647 - 11905: 0x9062, + 24648 - 11905: 0x9063, + 24649 - 11905: 0x9064, + 24650 - 11905: 0x9065, + 24651 - 11905: 0xC1B5, + 24652 - 11905: 0x9066, + 24653 - 11905: 0xBBD0, + 24654 - 11905: 0x9067, + 24655 - 11905: 0x9068, + 24656 - 11905: 0xBFD6, + 24657 - 11905: 0x9069, + 24658 - 11905: 0xBAE3, + 24659 - 11905: 0x906A, + 24660 - 11905: 0x906B, + 24661 - 11905: 0xCBA1, + 24662 - 11905: 0x906C, + 24663 - 11905: 0x906D, + 24664 - 11905: 0x906E, + 24665 - 11905: 0xEDA6, + 24666 - 11905: 0xEDA3, + 24667 - 11905: 0x906F, + 24668 - 11905: 0x9070, + 24669 - 11905: 0xEDA2, + 24670 - 11905: 0x9071, + 24671 - 11905: 0x9072, + 24672 - 11905: 0x9073, + 24673 - 11905: 0x9074, + 24674 - 11905: 0xBBD6, + 24675 - 11905: 0xEDA7, + 24676 - 11905: 0xD0F4, + 24677 - 11905: 0x9075, + 24678 - 11905: 0x9076, + 24679 - 11905: 0xEDA4, + 24680 - 11905: 0xBADE, + 24681 - 11905: 0xB6F7, + 24682 - 11905: 0xE3A1, + 24683 - 11905: 0xB6B2, + 24684 - 11905: 0xCCF1, + 24685 - 11905: 0xB9A7, + 24686 - 11905: 0x9077, + 24687 - 11905: 0xCFA2, + 24688 - 11905: 0xC7A1, + 24689 - 11905: 0x9078, + 24690 - 11905: 0x9079, + 24691 - 11905: 0xBFD2, + 24692 - 11905: 0x907A, + 24693 - 11905: 0x907B, + 24694 - 11905: 0xB6F1, + 24695 - 11905: 0x907C, + 24696 - 11905: 0xE2FA, + 24697 - 11905: 0xE2FB, + 24698 - 11905: 0xE2FD, + 24699 - 11905: 0xE2FC, + 24700 - 11905: 0xC4D5, + 24701 - 11905: 0xE3A2, + 24702 - 11905: 0x907D, + 24703 - 11905: 0xD3C1, + 24704 - 11905: 0x907E, + 24705 - 11905: 0x9080, + 24706 - 11905: 0x9081, + 24707 - 11905: 0xE3A7, + 24708 - 11905: 0xC7C4, + 24709 - 11905: 0x9082, + 24710 - 11905: 0x9083, + 24711 - 11905: 0x9084, + 24712 - 11905: 0x9085, + 24713 - 11905: 0xCFA4, + 24714 - 11905: 0x9086, + 24715 - 11905: 0x9087, + 24716 - 11905: 0xE3A9, + 24717 - 11905: 0xBAB7, + 24718 - 11905: 0x9088, + 24719 - 11905: 0x9089, + 24720 - 11905: 0x908A, + 24721 - 11905: 0x908B, + 24722 - 11905: 0xE3A8, + 24723 - 11905: 0x908C, + 24724 - 11905: 0xBBDA, + 24725 - 11905: 0x908D, + 24726 - 11905: 0xE3A3, + 24727 - 11905: 0x908E, + 24728 - 11905: 0x908F, + 24729 - 11905: 0x9090, + 24730 - 11905: 0xE3A4, + 24731 - 11905: 0xE3AA, + 24732 - 11905: 0x9091, + 24733 - 11905: 0xE3A6, + 24734 - 11905: 0x9092, + 24735 - 11905: 0xCEF2, + 24736 - 11905: 0xD3C6, + 24737 - 11905: 0x9093, + 24738 - 11905: 0x9094, + 24739 - 11905: 0xBBBC, + 24740 - 11905: 0x9095, + 24741 - 11905: 0x9096, + 24742 - 11905: 0xD4C3, + 24743 - 11905: 0x9097, + 24744 - 11905: 0xC4FA, + 24745 - 11905: 0x9098, + 24746 - 11905: 0x9099, + 24747 - 11905: 0xEDA8, + 24748 - 11905: 0xD0FC, + 24749 - 11905: 0xE3A5, + 24750 - 11905: 0x909A, + 24751 - 11905: 0xC3F5, + 24752 - 11905: 0x909B, + 24753 - 11905: 0xE3AD, + 24754 - 11905: 0xB1AF, + 24755 - 11905: 0x909C, + 24756 - 11905: 0xE3B2, + 24757 - 11905: 0x909D, + 24758 - 11905: 0x909E, + 24759 - 11905: 0x909F, + 24760 - 11905: 0xBCC2, + 24761 - 11905: 0x90A0, + 24762 - 11905: 0x90A1, + 24763 - 11905: 0xE3AC, + 24764 - 11905: 0xB5BF, + 24765 - 11905: 0x90A2, + 24766 - 11905: 0x90A3, + 24767 - 11905: 0x90A4, + 24768 - 11905: 0x90A5, + 24769 - 11905: 0x90A6, + 24770 - 11905: 0x90A7, + 24771 - 11905: 0x90A8, + 24772 - 11905: 0x90A9, + 24773 - 11905: 0xC7E9, + 24774 - 11905: 0xE3B0, + 24775 - 11905: 0x90AA, + 24776 - 11905: 0x90AB, + 24777 - 11905: 0x90AC, + 24778 - 11905: 0xBEAA, + 24779 - 11905: 0xCDEF, + 24780 - 11905: 0x90AD, + 24781 - 11905: 0x90AE, + 24782 - 11905: 0x90AF, + 24783 - 11905: 0x90B0, + 24784 - 11905: 0x90B1, + 24785 - 11905: 0xBBF3, + 24786 - 11905: 0x90B2, + 24787 - 11905: 0x90B3, + 24788 - 11905: 0x90B4, + 24789 - 11905: 0xCCE8, + 24790 - 11905: 0x90B5, + 24791 - 11905: 0x90B6, + 24792 - 11905: 0xE3AF, + 24793 - 11905: 0x90B7, + 24794 - 11905: 0xE3B1, + 24795 - 11905: 0x90B8, + 24796 - 11905: 0xCFA7, + 24797 - 11905: 0xE3AE, + 24798 - 11905: 0x90B9, + 24799 - 11905: 0xCEA9, + 24800 - 11905: 0xBBDD, + 24801 - 11905: 0x90BA, + 24802 - 11905: 0x90BB, + 24803 - 11905: 0x90BC, + 24804 - 11905: 0x90BD, + 24805 - 11905: 0x90BE, + 24806 - 11905: 0xB5EB, + 24807 - 11905: 0xBEE5, + 24808 - 11905: 0xB2D2, + 24809 - 11905: 0xB3CD, + 24810 - 11905: 0x90BF, + 24811 - 11905: 0xB1B9, + 24812 - 11905: 0xE3AB, + 24813 - 11905: 0xB2D1, + 24814 - 11905: 0xB5AC, + 24815 - 11905: 0xB9DF, + 24816 - 11905: 0xB6E8, + 24817 - 11905: 0x90C0, + 24818 - 11905: 0x90C1, + 24819 - 11905: 0xCFEB, + 24820 - 11905: 0xE3B7, + 24821 - 11905: 0x90C2, + 24822 - 11905: 0xBBCC, + 24823 - 11905: 0x90C3, + 24824 - 11905: 0x90C4, + 24825 - 11905: 0xC8C7, + 24826 - 11905: 0xD0CA, + 24827 - 11905: 0x90C5, + 24828 - 11905: 0x90C6, + 24829 - 11905: 0x90C7, + 24830 - 11905: 0x90C8, + 24831 - 11905: 0x90C9, + 24832 - 11905: 0xE3B8, + 24833 - 11905: 0xB3EE, + 24834 - 11905: 0x90CA, + 24835 - 11905: 0x90CB, + 24836 - 11905: 0x90CC, + 24837 - 11905: 0x90CD, + 24838 - 11905: 0xEDA9, + 24839 - 11905: 0x90CE, + 24840 - 11905: 0xD3FA, + 24841 - 11905: 0xD3E4, + 24842 - 11905: 0x90CF, + 24843 - 11905: 0x90D0, + 24844 - 11905: 0x90D1, + 24845 - 11905: 0xEDAA, + 24846 - 11905: 0xE3B9, + 24847 - 11905: 0xD2E2, + 24848 - 11905: 0x90D2, + 24849 - 11905: 0x90D3, + 24850 - 11905: 0x90D4, + 24851 - 11905: 0x90D5, + 24852 - 11905: 0x90D6, + 24853 - 11905: 0xE3B5, + 24854 - 11905: 0x90D7, + 24855 - 11905: 0x90D8, + 24856 - 11905: 0x90D9, + 24857 - 11905: 0x90DA, + 24858 - 11905: 0xD3DE, + 24859 - 11905: 0x90DB, + 24860 - 11905: 0x90DC, + 24861 - 11905: 0x90DD, + 24862 - 11905: 0x90DE, + 24863 - 11905: 0xB8D0, + 24864 - 11905: 0xE3B3, + 24865 - 11905: 0x90DF, + 24866 - 11905: 0x90E0, + 24867 - 11905: 0xE3B6, + 24868 - 11905: 0xB7DF, + 24869 - 11905: 0x90E1, + 24870 - 11905: 0xE3B4, + 24871 - 11905: 0xC0A2, + 24872 - 11905: 0x90E2, + 24873 - 11905: 0x90E3, + 24874 - 11905: 0x90E4, + 24875 - 11905: 0xE3BA, + 24876 - 11905: 0x90E5, + 24877 - 11905: 0x90E6, + 24878 - 11905: 0x90E7, + 24879 - 11905: 0x90E8, + 24880 - 11905: 0x90E9, + 24881 - 11905: 0x90EA, + 24882 - 11905: 0x90EB, + 24883 - 11905: 0x90EC, + 24884 - 11905: 0x90ED, + 24885 - 11905: 0x90EE, + 24886 - 11905: 0x90EF, + 24887 - 11905: 0x90F0, + 24888 - 11905: 0x90F1, + 24889 - 11905: 0x90F2, + 24890 - 11905: 0x90F3, + 24891 - 11905: 0x90F4, + 24892 - 11905: 0x90F5, + 24893 - 11905: 0x90F6, + 24894 - 11905: 0x90F7, + 24895 - 11905: 0xD4B8, + 24896 - 11905: 0x90F8, + 24897 - 11905: 0x90F9, + 24898 - 11905: 0x90FA, + 24899 - 11905: 0x90FB, + 24900 - 11905: 0x90FC, + 24901 - 11905: 0x90FD, + 24902 - 11905: 0x90FE, + 24903 - 11905: 0x9140, + 24904 - 11905: 0xB4C8, + 24905 - 11905: 0x9141, + 24906 - 11905: 0xE3BB, + 24907 - 11905: 0x9142, + 24908 - 11905: 0xBBC5, + 24909 - 11905: 0x9143, + 24910 - 11905: 0xC9F7, + 24911 - 11905: 0x9144, + 24912 - 11905: 0x9145, + 24913 - 11905: 0xC9E5, + 24914 - 11905: 0x9146, + 24915 - 11905: 0x9147, + 24916 - 11905: 0x9148, + 24917 - 11905: 0xC4BD, + 24918 - 11905: 0x9149, + 24919 - 11905: 0x914A, + 24920 - 11905: 0x914B, + 24921 - 11905: 0x914C, + 24922 - 11905: 0x914D, + 24923 - 11905: 0x914E, + 24924 - 11905: 0x914F, + 24925 - 11905: 0xEDAB, + 24926 - 11905: 0x9150, + 24927 - 11905: 0x9151, + 24928 - 11905: 0x9152, + 24929 - 11905: 0x9153, + 24930 - 11905: 0xC2FD, + 24931 - 11905: 0x9154, + 24932 - 11905: 0x9155, + 24933 - 11905: 0x9156, + 24934 - 11905: 0x9157, + 24935 - 11905: 0xBBDB, + 24936 - 11905: 0xBFAE, + 24937 - 11905: 0x9158, + 24938 - 11905: 0x9159, + 24939 - 11905: 0x915A, + 24940 - 11905: 0x915B, + 24941 - 11905: 0x915C, + 24942 - 11905: 0x915D, + 24943 - 11905: 0x915E, + 24944 - 11905: 0xCEBF, + 24945 - 11905: 0x915F, + 24946 - 11905: 0x9160, + 24947 - 11905: 0x9161, + 24948 - 11905: 0x9162, + 24949 - 11905: 0xE3BC, + 24950 - 11905: 0x9163, + 24951 - 11905: 0xBFB6, + 24952 - 11905: 0x9164, + 24953 - 11905: 0x9165, + 24954 - 11905: 0x9166, + 24955 - 11905: 0x9167, + 24956 - 11905: 0x9168, + 24957 - 11905: 0x9169, + 24958 - 11905: 0x916A, + 24959 - 11905: 0x916B, + 24960 - 11905: 0x916C, + 24961 - 11905: 0x916D, + 24962 - 11905: 0x916E, + 24963 - 11905: 0x916F, + 24964 - 11905: 0x9170, + 24965 - 11905: 0x9171, + 24966 - 11905: 0x9172, + 24967 - 11905: 0x9173, + 24968 - 11905: 0x9174, + 24969 - 11905: 0x9175, + 24970 - 11905: 0x9176, + 24971 - 11905: 0xB1EF, + 24972 - 11905: 0x9177, + 24973 - 11905: 0x9178, + 24974 - 11905: 0xD4F7, + 24975 - 11905: 0x9179, + 24976 - 11905: 0x917A, + 24977 - 11905: 0x917B, + 24978 - 11905: 0x917C, + 24979 - 11905: 0x917D, + 24980 - 11905: 0xE3BE, + 24981 - 11905: 0x917E, + 24982 - 11905: 0x9180, + 24983 - 11905: 0x9181, + 24984 - 11905: 0x9182, + 24985 - 11905: 0x9183, + 24986 - 11905: 0x9184, + 24987 - 11905: 0x9185, + 24988 - 11905: 0x9186, + 24989 - 11905: 0xEDAD, + 24990 - 11905: 0x9187, + 24991 - 11905: 0x9188, + 24992 - 11905: 0x9189, + 24993 - 11905: 0x918A, + 24994 - 11905: 0x918B, + 24995 - 11905: 0x918C, + 24996 - 11905: 0x918D, + 24997 - 11905: 0x918E, + 24998 - 11905: 0x918F, + 24999 - 11905: 0xE3BF, + 25000 - 11905: 0xBAA9, + 25001 - 11905: 0xEDAC, + 25002 - 11905: 0x9190, + 25003 - 11905: 0x9191, + 25004 - 11905: 0xE3BD, + 25005 - 11905: 0x9192, + 25006 - 11905: 0x9193, + 25007 - 11905: 0x9194, + 25008 - 11905: 0x9195, + 25009 - 11905: 0x9196, + 25010 - 11905: 0x9197, + 25011 - 11905: 0x9198, + 25012 - 11905: 0x9199, + 25013 - 11905: 0x919A, + 25014 - 11905: 0x919B, + 25015 - 11905: 0xE3C0, + 25016 - 11905: 0x919C, + 25017 - 11905: 0x919D, + 25018 - 11905: 0x919E, + 25019 - 11905: 0x919F, + 25020 - 11905: 0x91A0, + 25021 - 11905: 0x91A1, + 25022 - 11905: 0xBAB6, + 25023 - 11905: 0x91A2, + 25024 - 11905: 0x91A3, + 25025 - 11905: 0x91A4, + 25026 - 11905: 0xB6AE, + 25027 - 11905: 0x91A5, + 25028 - 11905: 0x91A6, + 25029 - 11905: 0x91A7, + 25030 - 11905: 0x91A8, + 25031 - 11905: 0x91A9, + 25032 - 11905: 0xD0B8, + 25033 - 11905: 0x91AA, + 25034 - 11905: 0xB0C3, + 25035 - 11905: 0xEDAE, + 25036 - 11905: 0x91AB, + 25037 - 11905: 0x91AC, + 25038 - 11905: 0x91AD, + 25039 - 11905: 0x91AE, + 25040 - 11905: 0x91AF, + 25041 - 11905: 0xEDAF, + 25042 - 11905: 0xC0C1, + 25043 - 11905: 0x91B0, + 25044 - 11905: 0xE3C1, + 25045 - 11905: 0x91B1, + 25046 - 11905: 0x91B2, + 25047 - 11905: 0x91B3, + 25048 - 11905: 0x91B4, + 25049 - 11905: 0x91B5, + 25050 - 11905: 0x91B6, + 25051 - 11905: 0x91B7, + 25052 - 11905: 0x91B8, + 25053 - 11905: 0x91B9, + 25054 - 11905: 0x91BA, + 25055 - 11905: 0x91BB, + 25056 - 11905: 0x91BC, + 25057 - 11905: 0x91BD, + 25058 - 11905: 0x91BE, + 25059 - 11905: 0x91BF, + 25060 - 11905: 0x91C0, + 25061 - 11905: 0x91C1, + 25062 - 11905: 0xC5B3, + 25063 - 11905: 0x91C2, + 25064 - 11905: 0x91C3, + 25065 - 11905: 0x91C4, + 25066 - 11905: 0x91C5, + 25067 - 11905: 0x91C6, + 25068 - 11905: 0x91C7, + 25069 - 11905: 0x91C8, + 25070 - 11905: 0x91C9, + 25071 - 11905: 0x91CA, + 25072 - 11905: 0x91CB, + 25073 - 11905: 0x91CC, + 25074 - 11905: 0x91CD, + 25075 - 11905: 0x91CE, + 25076 - 11905: 0x91CF, + 25077 - 11905: 0xE3C2, + 25078 - 11905: 0x91D0, + 25079 - 11905: 0x91D1, + 25080 - 11905: 0x91D2, + 25081 - 11905: 0x91D3, + 25082 - 11905: 0x91D4, + 25083 - 11905: 0x91D5, + 25084 - 11905: 0x91D6, + 25085 - 11905: 0x91D7, + 25086 - 11905: 0x91D8, + 25087 - 11905: 0xDCB2, + 25088 - 11905: 0x91D9, + 25089 - 11905: 0x91DA, + 25090 - 11905: 0x91DB, + 25091 - 11905: 0x91DC, + 25092 - 11905: 0x91DD, + 25093 - 11905: 0x91DE, + 25094 - 11905: 0xEDB0, + 25095 - 11905: 0x91DF, + 25096 - 11905: 0xB8EA, + 25097 - 11905: 0x91E0, + 25098 - 11905: 0xCEEC, + 25099 - 11905: 0xEAA7, + 25100 - 11905: 0xD0E7, + 25101 - 11905: 0xCAF9, + 25102 - 11905: 0xC8D6, + 25103 - 11905: 0xCFB7, + 25104 - 11905: 0xB3C9, + 25105 - 11905: 0xCED2, + 25106 - 11905: 0xBDE4, + 25107 - 11905: 0x91E1, + 25108 - 11905: 0x91E2, + 25109 - 11905: 0xE3DE, + 25110 - 11905: 0xBBF2, + 25111 - 11905: 0xEAA8, + 25112 - 11905: 0xD5BD, + 25113 - 11905: 0x91E3, + 25114 - 11905: 0xC6DD, + 25115 - 11905: 0xEAA9, + 25116 - 11905: 0x91E4, + 25117 - 11905: 0x91E5, + 25118 - 11905: 0x91E6, + 25119 - 11905: 0xEAAA, + 25120 - 11905: 0x91E7, + 25121 - 11905: 0xEAAC, + 25122 - 11905: 0xEAAB, + 25123 - 11905: 0x91E8, + 25124 - 11905: 0xEAAE, + 25125 - 11905: 0xEAAD, + 25126 - 11905: 0x91E9, + 25127 - 11905: 0x91EA, + 25128 - 11905: 0x91EB, + 25129 - 11905: 0x91EC, + 25130 - 11905: 0xBDD8, + 25131 - 11905: 0x91ED, + 25132 - 11905: 0xEAAF, + 25133 - 11905: 0x91EE, + 25134 - 11905: 0xC2BE, + 25135 - 11905: 0x91EF, + 25136 - 11905: 0x91F0, + 25137 - 11905: 0x91F1, + 25138 - 11905: 0x91F2, + 25139 - 11905: 0xB4C1, + 25140 - 11905: 0xB4F7, + 25141 - 11905: 0x91F3, + 25142 - 11905: 0x91F4, + 25143 - 11905: 0xBBA7, + 25144 - 11905: 0x91F5, + 25145 - 11905: 0x91F6, + 25146 - 11905: 0x91F7, + 25147 - 11905: 0x91F8, + 25148 - 11905: 0x91F9, + 25149 - 11905: 0xECE6, + 25150 - 11905: 0xECE5, + 25151 - 11905: 0xB7BF, + 25152 - 11905: 0xCBF9, + 25153 - 11905: 0xB1E2, + 25154 - 11905: 0x91FA, + 25155 - 11905: 0xECE7, + 25156 - 11905: 0x91FB, + 25157 - 11905: 0x91FC, + 25158 - 11905: 0x91FD, + 25159 - 11905: 0xC9C8, + 25160 - 11905: 0xECE8, + 25161 - 11905: 0xECE9, + 25162 - 11905: 0x91FE, + 25163 - 11905: 0xCAD6, + 25164 - 11905: 0xDED0, + 25165 - 11905: 0xB2C5, + 25166 - 11905: 0xD4FA, + 25167 - 11905: 0x9240, + 25168 - 11905: 0x9241, + 25169 - 11905: 0xC6CB, + 25170 - 11905: 0xB0C7, + 25171 - 11905: 0xB4F2, + 25172 - 11905: 0xC8D3, + 25173 - 11905: 0x9242, + 25174 - 11905: 0x9243, + 25175 - 11905: 0x9244, + 25176 - 11905: 0xCDD0, + 25177 - 11905: 0x9245, + 25178 - 11905: 0x9246, + 25179 - 11905: 0xBFB8, + 25180 - 11905: 0x9247, + 25181 - 11905: 0x9248, + 25182 - 11905: 0x9249, + 25183 - 11905: 0x924A, + 25184 - 11905: 0x924B, + 25185 - 11905: 0x924C, + 25186 - 11905: 0x924D, + 25187 - 11905: 0xBFDB, + 25188 - 11905: 0x924E, + 25189 - 11905: 0x924F, + 25190 - 11905: 0xC7A4, + 25191 - 11905: 0xD6B4, + 25192 - 11905: 0x9250, + 25193 - 11905: 0xC0A9, + 25194 - 11905: 0xDED1, + 25195 - 11905: 0xC9A8, + 25196 - 11905: 0xD1EF, + 25197 - 11905: 0xC5A4, + 25198 - 11905: 0xB0E7, + 25199 - 11905: 0xB3B6, + 25200 - 11905: 0xC8C5, + 25201 - 11905: 0x9251, + 25202 - 11905: 0x9252, + 25203 - 11905: 0xB0E2, + 25204 - 11905: 0x9253, + 25205 - 11905: 0x9254, + 25206 - 11905: 0xB7F6, + 25207 - 11905: 0x9255, + 25208 - 11905: 0x9256, + 25209 - 11905: 0xC5FA, + 25210 - 11905: 0x9257, + 25211 - 11905: 0x9258, + 25212 - 11905: 0xB6F3, + 25213 - 11905: 0x9259, + 25214 - 11905: 0xD5D2, + 25215 - 11905: 0xB3D0, + 25216 - 11905: 0xBCBC, + 25217 - 11905: 0x925A, + 25218 - 11905: 0x925B, + 25219 - 11905: 0x925C, + 25220 - 11905: 0xB3AD, + 25221 - 11905: 0x925D, + 25222 - 11905: 0x925E, + 25223 - 11905: 0x925F, + 25224 - 11905: 0x9260, + 25225 - 11905: 0xBEF1, + 25226 - 11905: 0xB0D1, + 25227 - 11905: 0x9261, + 25228 - 11905: 0x9262, + 25229 - 11905: 0x9263, + 25230 - 11905: 0x9264, + 25231 - 11905: 0x9265, + 25232 - 11905: 0x9266, + 25233 - 11905: 0xD2D6, + 25234 - 11905: 0xCAE3, + 25235 - 11905: 0xD7A5, + 25236 - 11905: 0x9267, + 25237 - 11905: 0xCDB6, + 25238 - 11905: 0xB6B6, + 25239 - 11905: 0xBFB9, + 25240 - 11905: 0xD5DB, + 25241 - 11905: 0x9268, + 25242 - 11905: 0xB8A7, + 25243 - 11905: 0xC5D7, + 25244 - 11905: 0x9269, + 25245 - 11905: 0x926A, + 25246 - 11905: 0x926B, + 25247 - 11905: 0xDED2, + 25248 - 11905: 0xBFD9, + 25249 - 11905: 0xC2D5, + 25250 - 11905: 0xC7C0, + 25251 - 11905: 0x926C, + 25252 - 11905: 0xBBA4, + 25253 - 11905: 0xB1A8, + 25254 - 11905: 0x926D, + 25255 - 11905: 0x926E, + 25256 - 11905: 0xC5EA, + 25257 - 11905: 0x926F, + 25258 - 11905: 0x9270, + 25259 - 11905: 0xC5FB, + 25260 - 11905: 0xCCA7, + 25261 - 11905: 0x9271, + 25262 - 11905: 0x9272, + 25263 - 11905: 0x9273, + 25264 - 11905: 0x9274, + 25265 - 11905: 0xB1A7, + 25266 - 11905: 0x9275, + 25267 - 11905: 0x9276, + 25268 - 11905: 0x9277, + 25269 - 11905: 0xB5D6, + 25270 - 11905: 0x9278, + 25271 - 11905: 0x9279, + 25272 - 11905: 0x927A, + 25273 - 11905: 0xC4A8, + 25274 - 11905: 0x927B, + 25275 - 11905: 0xDED3, + 25276 - 11905: 0xD1BA, + 25277 - 11905: 0xB3E9, + 25278 - 11905: 0x927C, + 25279 - 11905: 0xC3F2, + 25280 - 11905: 0x927D, + 25281 - 11905: 0x927E, + 25282 - 11905: 0xB7F7, + 25283 - 11905: 0x9280, + 25284 - 11905: 0xD6F4, + 25285 - 11905: 0xB5A3, + 25286 - 11905: 0xB2F0, + 25287 - 11905: 0xC4B4, + 25288 - 11905: 0xC4E9, + 25289 - 11905: 0xC0AD, + 25290 - 11905: 0xDED4, + 25291 - 11905: 0x9281, + 25292 - 11905: 0xB0E8, + 25293 - 11905: 0xC5C4, + 25294 - 11905: 0xC1E0, + 25295 - 11905: 0x9282, + 25296 - 11905: 0xB9D5, + 25297 - 11905: 0x9283, + 25298 - 11905: 0xBEDC, + 25299 - 11905: 0xCDD8, + 25300 - 11905: 0xB0CE, + 25301 - 11905: 0x9284, + 25302 - 11905: 0xCDCF, + 25303 - 11905: 0xDED6, + 25304 - 11905: 0xBED0, + 25305 - 11905: 0xD7BE, + 25306 - 11905: 0xDED5, + 25307 - 11905: 0xD5D0, + 25308 - 11905: 0xB0DD, + 25309 - 11905: 0x9285, + 25310 - 11905: 0x9286, + 25311 - 11905: 0xC4E2, + 25312 - 11905: 0x9287, + 25313 - 11905: 0x9288, + 25314 - 11905: 0xC2A3, + 25315 - 11905: 0xBCF0, + 25316 - 11905: 0x9289, + 25317 - 11905: 0xD3B5, + 25318 - 11905: 0xC0B9, + 25319 - 11905: 0xC5A1, + 25320 - 11905: 0xB2A6, + 25321 - 11905: 0xD4F1, + 25322 - 11905: 0x928A, + 25323 - 11905: 0x928B, + 25324 - 11905: 0xC0A8, + 25325 - 11905: 0xCAC3, + 25326 - 11905: 0xDED7, + 25327 - 11905: 0xD5FC, + 25328 - 11905: 0x928C, + 25329 - 11905: 0xB9B0, + 25330 - 11905: 0x928D, + 25331 - 11905: 0xC8AD, + 25332 - 11905: 0xCBA9, + 25333 - 11905: 0x928E, + 25334 - 11905: 0xDED9, + 25335 - 11905: 0xBFBD, + 25336 - 11905: 0x928F, + 25337 - 11905: 0x9290, + 25338 - 11905: 0x9291, + 25339 - 11905: 0x9292, + 25340 - 11905: 0xC6B4, + 25341 - 11905: 0xD7A7, + 25342 - 11905: 0xCAB0, + 25343 - 11905: 0xC4C3, + 25344 - 11905: 0x9293, + 25345 - 11905: 0xB3D6, + 25346 - 11905: 0xB9D2, + 25347 - 11905: 0x9294, + 25348 - 11905: 0x9295, + 25349 - 11905: 0x9296, + 25350 - 11905: 0x9297, + 25351 - 11905: 0xD6B8, + 25352 - 11905: 0xEAFC, + 25353 - 11905: 0xB0B4, + 25354 - 11905: 0x9298, + 25355 - 11905: 0x9299, + 25356 - 11905: 0x929A, + 25357 - 11905: 0x929B, + 25358 - 11905: 0xBFE6, + 25359 - 11905: 0x929C, + 25360 - 11905: 0x929D, + 25361 - 11905: 0xCCF4, + 25362 - 11905: 0x929E, + 25363 - 11905: 0x929F, + 25364 - 11905: 0x92A0, + 25365 - 11905: 0x92A1, + 25366 - 11905: 0xCDDA, + 25367 - 11905: 0x92A2, + 25368 - 11905: 0x92A3, + 25369 - 11905: 0x92A4, + 25370 - 11905: 0xD6BF, + 25371 - 11905: 0xC2CE, + 25372 - 11905: 0x92A5, + 25373 - 11905: 0xCECE, + 25374 - 11905: 0xCCA2, + 25375 - 11905: 0xD0AE, + 25376 - 11905: 0xC4D3, + 25377 - 11905: 0xB5B2, + 25378 - 11905: 0xDED8, + 25379 - 11905: 0xD5F5, + 25380 - 11905: 0xBCB7, + 25381 - 11905: 0xBBD3, + 25382 - 11905: 0x92A6, + 25383 - 11905: 0x92A7, + 25384 - 11905: 0xB0A4, + 25385 - 11905: 0x92A8, + 25386 - 11905: 0xC5B2, + 25387 - 11905: 0xB4EC, + 25388 - 11905: 0x92A9, + 25389 - 11905: 0x92AA, + 25390 - 11905: 0x92AB, + 25391 - 11905: 0xD5F1, + 25392 - 11905: 0x92AC, + 25393 - 11905: 0x92AD, + 25394 - 11905: 0xEAFD, + 25395 - 11905: 0x92AE, + 25396 - 11905: 0x92AF, + 25397 - 11905: 0x92B0, + 25398 - 11905: 0x92B1, + 25399 - 11905: 0x92B2, + 25400 - 11905: 0x92B3, + 25401 - 11905: 0xDEDA, + 25402 - 11905: 0xCDA6, + 25403 - 11905: 0x92B4, + 25404 - 11905: 0x92B5, + 25405 - 11905: 0xCDEC, + 25406 - 11905: 0x92B6, + 25407 - 11905: 0x92B7, + 25408 - 11905: 0x92B8, + 25409 - 11905: 0x92B9, + 25410 - 11905: 0xCEE6, + 25411 - 11905: 0xDEDC, + 25412 - 11905: 0x92BA, + 25413 - 11905: 0xCDB1, + 25414 - 11905: 0xC0A6, + 25415 - 11905: 0x92BB, + 25416 - 11905: 0x92BC, + 25417 - 11905: 0xD7BD, + 25418 - 11905: 0x92BD, + 25419 - 11905: 0xDEDB, + 25420 - 11905: 0xB0C6, + 25421 - 11905: 0xBAB4, + 25422 - 11905: 0xC9D3, + 25423 - 11905: 0xC4F3, + 25424 - 11905: 0xBEE8, + 25425 - 11905: 0x92BE, + 25426 - 11905: 0x92BF, + 25427 - 11905: 0x92C0, + 25428 - 11905: 0x92C1, + 25429 - 11905: 0xB2B6, + 25430 - 11905: 0x92C2, + 25431 - 11905: 0x92C3, + 25432 - 11905: 0x92C4, + 25433 - 11905: 0x92C5, + 25434 - 11905: 0x92C6, + 25435 - 11905: 0x92C7, + 25436 - 11905: 0x92C8, + 25437 - 11905: 0x92C9, + 25438 - 11905: 0xC0CC, + 25439 - 11905: 0xCBF0, + 25440 - 11905: 0x92CA, + 25441 - 11905: 0xBCF1, + 25442 - 11905: 0xBBBB, + 25443 - 11905: 0xB5B7, + 25444 - 11905: 0x92CB, + 25445 - 11905: 0x92CC, + 25446 - 11905: 0x92CD, + 25447 - 11905: 0xC5F5, + 25448 - 11905: 0x92CE, + 25449 - 11905: 0xDEE6, + 25450 - 11905: 0x92CF, + 25451 - 11905: 0x92D0, + 25452 - 11905: 0x92D1, + 25453 - 11905: 0xDEE3, + 25454 - 11905: 0xBEDD, + 25455 - 11905: 0x92D2, + 25456 - 11905: 0x92D3, + 25457 - 11905: 0xDEDF, + 25458 - 11905: 0x92D4, + 25459 - 11905: 0x92D5, + 25460 - 11905: 0x92D6, + 25461 - 11905: 0x92D7, + 25462 - 11905: 0xB4B7, + 25463 - 11905: 0xBDDD, + 25464 - 11905: 0x92D8, + 25465 - 11905: 0x92D9, + 25466 - 11905: 0xDEE0, + 25467 - 11905: 0xC4ED, + 25468 - 11905: 0x92DA, + 25469 - 11905: 0x92DB, + 25470 - 11905: 0x92DC, + 25471 - 11905: 0x92DD, + 25472 - 11905: 0xCFC6, + 25473 - 11905: 0x92DE, + 25474 - 11905: 0xB5E0, + 25475 - 11905: 0x92DF, + 25476 - 11905: 0x92E0, + 25477 - 11905: 0x92E1, + 25478 - 11905: 0x92E2, + 25479 - 11905: 0xB6DE, + 25480 - 11905: 0xCADA, + 25481 - 11905: 0xB5F4, + 25482 - 11905: 0xDEE5, + 25483 - 11905: 0x92E3, + 25484 - 11905: 0xD5C6, + 25485 - 11905: 0x92E4, + 25486 - 11905: 0xDEE1, + 25487 - 11905: 0xCCCD, + 25488 - 11905: 0xC6FE, + 25489 - 11905: 0x92E5, + 25490 - 11905: 0xC5C5, + 25491 - 11905: 0x92E6, + 25492 - 11905: 0x92E7, + 25493 - 11905: 0x92E8, + 25494 - 11905: 0xD2B4, + 25495 - 11905: 0x92E9, + 25496 - 11905: 0xBEF2, + 25497 - 11905: 0x92EA, + 25498 - 11905: 0x92EB, + 25499 - 11905: 0x92EC, + 25500 - 11905: 0x92ED, + 25501 - 11905: 0x92EE, + 25502 - 11905: 0x92EF, + 25503 - 11905: 0x92F0, + 25504 - 11905: 0xC2D3, + 25505 - 11905: 0x92F1, + 25506 - 11905: 0xCCBD, + 25507 - 11905: 0xB3B8, + 25508 - 11905: 0x92F2, + 25509 - 11905: 0xBDD3, + 25510 - 11905: 0x92F3, + 25511 - 11905: 0xBFD8, + 25512 - 11905: 0xCDC6, + 25513 - 11905: 0xD1DA, + 25514 - 11905: 0xB4EB, + 25515 - 11905: 0x92F4, + 25516 - 11905: 0xDEE4, + 25517 - 11905: 0xDEDD, + 25518 - 11905: 0xDEE7, + 25519 - 11905: 0x92F5, + 25520 - 11905: 0xEAFE, + 25521 - 11905: 0x92F6, + 25522 - 11905: 0x92F7, + 25523 - 11905: 0xC2B0, + 25524 - 11905: 0xDEE2, + 25525 - 11905: 0x92F8, + 25526 - 11905: 0x92F9, + 25527 - 11905: 0xD6C0, + 25528 - 11905: 0xB5A7, + 25529 - 11905: 0x92FA, + 25530 - 11905: 0xB2F4, + 25531 - 11905: 0x92FB, + 25532 - 11905: 0xDEE8, + 25533 - 11905: 0x92FC, + 25534 - 11905: 0xDEF2, + 25535 - 11905: 0x92FD, + 25536 - 11905: 0x92FE, + 25537 - 11905: 0x9340, + 25538 - 11905: 0x9341, + 25539 - 11905: 0x9342, + 25540 - 11905: 0xDEED, + 25541 - 11905: 0x9343, + 25542 - 11905: 0xDEF1, + 25543 - 11905: 0x9344, + 25544 - 11905: 0x9345, + 25545 - 11905: 0xC8E0, + 25546 - 11905: 0x9346, + 25547 - 11905: 0x9347, + 25548 - 11905: 0x9348, + 25549 - 11905: 0xD7E1, + 25550 - 11905: 0xDEEF, + 25551 - 11905: 0xC3E8, + 25552 - 11905: 0xCCE1, + 25553 - 11905: 0x9349, + 25554 - 11905: 0xB2E5, + 25555 - 11905: 0x934A, + 25556 - 11905: 0x934B, + 25557 - 11905: 0x934C, + 25558 - 11905: 0xD2BE, + 25559 - 11905: 0x934D, + 25560 - 11905: 0x934E, + 25561 - 11905: 0x934F, + 25562 - 11905: 0x9350, + 25563 - 11905: 0x9351, + 25564 - 11905: 0x9352, + 25565 - 11905: 0x9353, + 25566 - 11905: 0xDEEE, + 25567 - 11905: 0x9354, + 25568 - 11905: 0xDEEB, + 25569 - 11905: 0xCED5, + 25570 - 11905: 0x9355, + 25571 - 11905: 0xB4A7, + 25572 - 11905: 0x9356, + 25573 - 11905: 0x9357, + 25574 - 11905: 0x9358, + 25575 - 11905: 0x9359, + 25576 - 11905: 0x935A, + 25577 - 11905: 0xBFAB, + 25578 - 11905: 0xBEBE, + 25579 - 11905: 0x935B, + 25580 - 11905: 0x935C, + 25581 - 11905: 0xBDD2, + 25582 - 11905: 0x935D, + 25583 - 11905: 0x935E, + 25584 - 11905: 0x935F, + 25585 - 11905: 0x9360, + 25586 - 11905: 0xDEE9, + 25587 - 11905: 0x9361, + 25588 - 11905: 0xD4AE, + 25589 - 11905: 0x9362, + 25590 - 11905: 0xDEDE, + 25591 - 11905: 0x9363, + 25592 - 11905: 0xDEEA, + 25593 - 11905: 0x9364, + 25594 - 11905: 0x9365, + 25595 - 11905: 0x9366, + 25596 - 11905: 0x9367, + 25597 - 11905: 0xC0BF, + 25598 - 11905: 0x9368, + 25599 - 11905: 0xDEEC, + 25600 - 11905: 0xB2F3, + 25601 - 11905: 0xB8E9, + 25602 - 11905: 0xC2A7, + 25603 - 11905: 0x9369, + 25604 - 11905: 0x936A, + 25605 - 11905: 0xBDC1, + 25606 - 11905: 0x936B, + 25607 - 11905: 0x936C, + 25608 - 11905: 0x936D, + 25609 - 11905: 0x936E, + 25610 - 11905: 0x936F, + 25611 - 11905: 0xDEF5, + 25612 - 11905: 0xDEF8, + 25613 - 11905: 0x9370, + 25614 - 11905: 0x9371, + 25615 - 11905: 0xB2AB, + 25616 - 11905: 0xB4A4, + 25617 - 11905: 0x9372, + 25618 - 11905: 0x9373, + 25619 - 11905: 0xB4EA, + 25620 - 11905: 0xC9A6, + 25621 - 11905: 0x9374, + 25622 - 11905: 0x9375, + 25623 - 11905: 0x9376, + 25624 - 11905: 0x9377, + 25625 - 11905: 0x9378, + 25626 - 11905: 0x9379, + 25627 - 11905: 0xDEF6, + 25628 - 11905: 0xCBD1, + 25629 - 11905: 0x937A, + 25630 - 11905: 0xB8E3, + 25631 - 11905: 0x937B, + 25632 - 11905: 0xDEF7, + 25633 - 11905: 0xDEFA, + 25634 - 11905: 0x937C, + 25635 - 11905: 0x937D, + 25636 - 11905: 0x937E, + 25637 - 11905: 0x9380, + 25638 - 11905: 0xDEF9, + 25639 - 11905: 0x9381, + 25640 - 11905: 0x9382, + 25641 - 11905: 0x9383, + 25642 - 11905: 0xCCC2, + 25643 - 11905: 0x9384, + 25644 - 11905: 0xB0E1, + 25645 - 11905: 0xB4EE, + 25646 - 11905: 0x9385, + 25647 - 11905: 0x9386, + 25648 - 11905: 0x9387, + 25649 - 11905: 0x9388, + 25650 - 11905: 0x9389, + 25651 - 11905: 0x938A, + 25652 - 11905: 0xE5BA, + 25653 - 11905: 0x938B, + 25654 - 11905: 0x938C, + 25655 - 11905: 0x938D, + 25656 - 11905: 0x938E, + 25657 - 11905: 0x938F, + 25658 - 11905: 0xD0AF, + 25659 - 11905: 0x9390, + 25660 - 11905: 0x9391, + 25661 - 11905: 0xB2EB, + 25662 - 11905: 0x9392, + 25663 - 11905: 0xEBA1, + 25664 - 11905: 0x9393, + 25665 - 11905: 0xDEF4, + 25666 - 11905: 0x9394, + 25667 - 11905: 0x9395, + 25668 - 11905: 0xC9E3, + 25669 - 11905: 0xDEF3, + 25670 - 11905: 0xB0DA, + 25671 - 11905: 0xD2A1, + 25672 - 11905: 0xB1F7, + 25673 - 11905: 0x9396, + 25674 - 11905: 0xCCAF, + 25675 - 11905: 0x9397, + 25676 - 11905: 0x9398, + 25677 - 11905: 0x9399, + 25678 - 11905: 0x939A, + 25679 - 11905: 0x939B, + 25680 - 11905: 0x939C, + 25681 - 11905: 0x939D, + 25682 - 11905: 0xDEF0, + 25683 - 11905: 0x939E, + 25684 - 11905: 0xCBA4, + 25685 - 11905: 0x939F, + 25686 - 11905: 0x93A0, + 25687 - 11905: 0x93A1, + 25688 - 11905: 0xD5AA, + 25689 - 11905: 0x93A2, + 25690 - 11905: 0x93A3, + 25691 - 11905: 0x93A4, + 25692 - 11905: 0x93A5, + 25693 - 11905: 0x93A6, + 25694 - 11905: 0xDEFB, + 25695 - 11905: 0x93A7, + 25696 - 11905: 0x93A8, + 25697 - 11905: 0x93A9, + 25698 - 11905: 0x93AA, + 25699 - 11905: 0x93AB, + 25700 - 11905: 0x93AC, + 25701 - 11905: 0x93AD, + 25702 - 11905: 0x93AE, + 25703 - 11905: 0xB4DD, + 25704 - 11905: 0x93AF, + 25705 - 11905: 0xC4A6, + 25706 - 11905: 0x93B0, + 25707 - 11905: 0x93B1, + 25708 - 11905: 0x93B2, + 25709 - 11905: 0xDEFD, + 25710 - 11905: 0x93B3, + 25711 - 11905: 0x93B4, + 25712 - 11905: 0x93B5, + 25713 - 11905: 0x93B6, + 25714 - 11905: 0x93B7, + 25715 - 11905: 0x93B8, + 25716 - 11905: 0x93B9, + 25717 - 11905: 0x93BA, + 25718 - 11905: 0x93BB, + 25719 - 11905: 0x93BC, + 25720 - 11905: 0xC3FE, + 25721 - 11905: 0xC4A1, + 25722 - 11905: 0xDFA1, + 25723 - 11905: 0x93BD, + 25724 - 11905: 0x93BE, + 25725 - 11905: 0x93BF, + 25726 - 11905: 0x93C0, + 25727 - 11905: 0x93C1, + 25728 - 11905: 0x93C2, + 25729 - 11905: 0x93C3, + 25730 - 11905: 0xC1CC, + 25731 - 11905: 0x93C4, + 25732 - 11905: 0xDEFC, + 25733 - 11905: 0xBEEF, + 25734 - 11905: 0x93C5, + 25735 - 11905: 0xC6B2, + 25736 - 11905: 0x93C6, + 25737 - 11905: 0x93C7, + 25738 - 11905: 0x93C8, + 25739 - 11905: 0x93C9, + 25740 - 11905: 0x93CA, + 25741 - 11905: 0x93CB, + 25742 - 11905: 0x93CC, + 25743 - 11905: 0x93CD, + 25744 - 11905: 0x93CE, + 25745 - 11905: 0xB3C5, + 25746 - 11905: 0xC8F6, + 25747 - 11905: 0x93CF, + 25748 - 11905: 0x93D0, + 25749 - 11905: 0xCBBA, + 25750 - 11905: 0xDEFE, + 25751 - 11905: 0x93D1, + 25752 - 11905: 0x93D2, + 25753 - 11905: 0xDFA4, + 25754 - 11905: 0x93D3, + 25755 - 11905: 0x93D4, + 25756 - 11905: 0x93D5, + 25757 - 11905: 0x93D6, + 25758 - 11905: 0xD7B2, + 25759 - 11905: 0x93D7, + 25760 - 11905: 0x93D8, + 25761 - 11905: 0x93D9, + 25762 - 11905: 0x93DA, + 25763 - 11905: 0x93DB, + 25764 - 11905: 0xB3B7, + 25765 - 11905: 0x93DC, + 25766 - 11905: 0x93DD, + 25767 - 11905: 0x93DE, + 25768 - 11905: 0x93DF, + 25769 - 11905: 0xC1C3, + 25770 - 11905: 0x93E0, + 25771 - 11905: 0x93E1, + 25772 - 11905: 0xC7CB, + 25773 - 11905: 0xB2A5, + 25774 - 11905: 0xB4E9, + 25775 - 11905: 0x93E2, + 25776 - 11905: 0xD7AB, + 25777 - 11905: 0x93E3, + 25778 - 11905: 0x93E4, + 25779 - 11905: 0x93E5, + 25780 - 11905: 0x93E6, + 25781 - 11905: 0xC4EC, + 25782 - 11905: 0x93E7, + 25783 - 11905: 0xDFA2, + 25784 - 11905: 0xDFA3, + 25785 - 11905: 0x93E8, + 25786 - 11905: 0xDFA5, + 25787 - 11905: 0x93E9, + 25788 - 11905: 0xBAB3, + 25789 - 11905: 0x93EA, + 25790 - 11905: 0x93EB, + 25791 - 11905: 0x93EC, + 25792 - 11905: 0xDFA6, + 25793 - 11905: 0x93ED, + 25794 - 11905: 0xC0DE, + 25795 - 11905: 0x93EE, + 25796 - 11905: 0x93EF, + 25797 - 11905: 0xC9C3, + 25798 - 11905: 0x93F0, + 25799 - 11905: 0x93F1, + 25800 - 11905: 0x93F2, + 25801 - 11905: 0x93F3, + 25802 - 11905: 0x93F4, + 25803 - 11905: 0x93F5, + 25804 - 11905: 0x93F6, + 25805 - 11905: 0xB2D9, + 25806 - 11905: 0xC7E6, + 25807 - 11905: 0x93F7, + 25808 - 11905: 0xDFA7, + 25809 - 11905: 0x93F8, + 25810 - 11905: 0xC7DC, + 25811 - 11905: 0x93F9, + 25812 - 11905: 0x93FA, + 25813 - 11905: 0x93FB, + 25814 - 11905: 0x93FC, + 25815 - 11905: 0xDFA8, + 25816 - 11905: 0xEBA2, + 25817 - 11905: 0x93FD, + 25818 - 11905: 0x93FE, + 25819 - 11905: 0x9440, + 25820 - 11905: 0x9441, + 25821 - 11905: 0x9442, + 25822 - 11905: 0xCBD3, + 25823 - 11905: 0x9443, + 25824 - 11905: 0x9444, + 25825 - 11905: 0x9445, + 25826 - 11905: 0xDFAA, + 25827 - 11905: 0x9446, + 25828 - 11905: 0xDFA9, + 25829 - 11905: 0x9447, + 25830 - 11905: 0xB2C1, + 25831 - 11905: 0x9448, + 25832 - 11905: 0x9449, + 25833 - 11905: 0x944A, + 25834 - 11905: 0x944B, + 25835 - 11905: 0x944C, + 25836 - 11905: 0x944D, + 25837 - 11905: 0x944E, + 25838 - 11905: 0x944F, + 25839 - 11905: 0x9450, + 25840 - 11905: 0x9451, + 25841 - 11905: 0x9452, + 25842 - 11905: 0x9453, + 25843 - 11905: 0x9454, + 25844 - 11905: 0x9455, + 25845 - 11905: 0x9456, + 25846 - 11905: 0x9457, + 25847 - 11905: 0x9458, + 25848 - 11905: 0x9459, + 25849 - 11905: 0x945A, + 25850 - 11905: 0x945B, + 25851 - 11905: 0x945C, + 25852 - 11905: 0x945D, + 25853 - 11905: 0x945E, + 25854 - 11905: 0x945F, + 25855 - 11905: 0x9460, + 25856 - 11905: 0xC5CA, + 25857 - 11905: 0x9461, + 25858 - 11905: 0x9462, + 25859 - 11905: 0x9463, + 25860 - 11905: 0x9464, + 25861 - 11905: 0x9465, + 25862 - 11905: 0x9466, + 25863 - 11905: 0x9467, + 25864 - 11905: 0x9468, + 25865 - 11905: 0xDFAB, + 25866 - 11905: 0x9469, + 25867 - 11905: 0x946A, + 25868 - 11905: 0x946B, + 25869 - 11905: 0x946C, + 25870 - 11905: 0x946D, + 25871 - 11905: 0x946E, + 25872 - 11905: 0x946F, + 25873 - 11905: 0x9470, + 25874 - 11905: 0xD4DC, + 25875 - 11905: 0x9471, + 25876 - 11905: 0x9472, + 25877 - 11905: 0x9473, + 25878 - 11905: 0x9474, + 25879 - 11905: 0x9475, + 25880 - 11905: 0xC8C1, + 25881 - 11905: 0x9476, + 25882 - 11905: 0x9477, + 25883 - 11905: 0x9478, + 25884 - 11905: 0x9479, + 25885 - 11905: 0x947A, + 25886 - 11905: 0x947B, + 25887 - 11905: 0x947C, + 25888 - 11905: 0x947D, + 25889 - 11905: 0x947E, + 25890 - 11905: 0x9480, + 25891 - 11905: 0x9481, + 25892 - 11905: 0x9482, + 25893 - 11905: 0xDFAC, + 25894 - 11905: 0x9483, + 25895 - 11905: 0x9484, + 25896 - 11905: 0x9485, + 25897 - 11905: 0x9486, + 25898 - 11905: 0x9487, + 25899 - 11905: 0xBEF0, + 25900 - 11905: 0x9488, + 25901 - 11905: 0x9489, + 25902 - 11905: 0xDFAD, + 25903 - 11905: 0xD6A7, + 25904 - 11905: 0x948A, + 25905 - 11905: 0x948B, + 25906 - 11905: 0x948C, + 25907 - 11905: 0x948D, + 25908 - 11905: 0xEAB7, + 25909 - 11905: 0xEBB6, + 25910 - 11905: 0xCAD5, + 25911 - 11905: 0x948E, + 25912 - 11905: 0xD8FC, + 25913 - 11905: 0xB8C4, + 25914 - 11905: 0x948F, + 25915 - 11905: 0xB9A5, + 25916 - 11905: 0x9490, + 25917 - 11905: 0x9491, + 25918 - 11905: 0xB7C5, + 25919 - 11905: 0xD5FE, + 25920 - 11905: 0x9492, + 25921 - 11905: 0x9493, + 25922 - 11905: 0x9494, + 25923 - 11905: 0x9495, + 25924 - 11905: 0x9496, + 25925 - 11905: 0xB9CA, + 25926 - 11905: 0x9497, + 25927 - 11905: 0x9498, + 25928 - 11905: 0xD0A7, + 25929 - 11905: 0xF4CD, + 25930 - 11905: 0x9499, + 25931 - 11905: 0x949A, + 25932 - 11905: 0xB5D0, + 25933 - 11905: 0x949B, + 25934 - 11905: 0x949C, + 25935 - 11905: 0xC3F4, + 25936 - 11905: 0x949D, + 25937 - 11905: 0xBEC8, + 25938 - 11905: 0x949E, + 25939 - 11905: 0x949F, + 25940 - 11905: 0x94A0, + 25941 - 11905: 0xEBB7, + 25942 - 11905: 0xB0BD, + 25943 - 11905: 0x94A1, + 25944 - 11905: 0x94A2, + 25945 - 11905: 0xBDCC, + 25946 - 11905: 0x94A3, + 25947 - 11905: 0xC1B2, + 25948 - 11905: 0x94A4, + 25949 - 11905: 0xB1D6, + 25950 - 11905: 0xB3A8, + 25951 - 11905: 0x94A5, + 25952 - 11905: 0x94A6, + 25953 - 11905: 0x94A7, + 25954 - 11905: 0xB8D2, + 25955 - 11905: 0xC9A2, + 25956 - 11905: 0x94A8, + 25957 - 11905: 0x94A9, + 25958 - 11905: 0xB6D8, + 25959 - 11905: 0x94AA, + 25960 - 11905: 0x94AB, + 25961 - 11905: 0x94AC, + 25962 - 11905: 0x94AD, + 25963 - 11905: 0xEBB8, + 25964 - 11905: 0xBEB4, + 25965 - 11905: 0x94AE, + 25966 - 11905: 0x94AF, + 25967 - 11905: 0x94B0, + 25968 - 11905: 0xCAFD, + 25969 - 11905: 0x94B1, + 25970 - 11905: 0xC7C3, + 25971 - 11905: 0x94B2, + 25972 - 11905: 0xD5FB, + 25973 - 11905: 0x94B3, + 25974 - 11905: 0x94B4, + 25975 - 11905: 0xB7F3, + 25976 - 11905: 0x94B5, + 25977 - 11905: 0x94B6, + 25978 - 11905: 0x94B7, + 25979 - 11905: 0x94B8, + 25980 - 11905: 0x94B9, + 25981 - 11905: 0x94BA, + 25982 - 11905: 0x94BB, + 25983 - 11905: 0x94BC, + 25984 - 11905: 0x94BD, + 25985 - 11905: 0x94BE, + 25986 - 11905: 0x94BF, + 25987 - 11905: 0x94C0, + 25988 - 11905: 0x94C1, + 25989 - 11905: 0x94C2, + 25990 - 11905: 0x94C3, + 25991 - 11905: 0xCEC4, + 25992 - 11905: 0x94C4, + 25993 - 11905: 0x94C5, + 25994 - 11905: 0x94C6, + 25995 - 11905: 0xD5AB, + 25996 - 11905: 0xB1F3, + 25997 - 11905: 0x94C7, + 25998 - 11905: 0x94C8, + 25999 - 11905: 0x94C9, + 26000 - 11905: 0xECB3, + 26001 - 11905: 0xB0DF, + 26002 - 11905: 0x94CA, + 26003 - 11905: 0xECB5, + 26004 - 11905: 0x94CB, + 26005 - 11905: 0x94CC, + 26006 - 11905: 0x94CD, + 26007 - 11905: 0xB6B7, + 26008 - 11905: 0x94CE, + 26009 - 11905: 0xC1CF, + 26010 - 11905: 0x94CF, + 26011 - 11905: 0xF5FA, + 26012 - 11905: 0xD0B1, + 26013 - 11905: 0x94D0, + 26014 - 11905: 0x94D1, + 26015 - 11905: 0xD5E5, + 26016 - 11905: 0x94D2, + 26017 - 11905: 0xCED3, + 26018 - 11905: 0x94D3, + 26019 - 11905: 0x94D4, + 26020 - 11905: 0xBDEF, + 26021 - 11905: 0xB3E2, + 26022 - 11905: 0x94D5, + 26023 - 11905: 0xB8AB, + 26024 - 11905: 0x94D6, + 26025 - 11905: 0xD5B6, + 26026 - 11905: 0x94D7, + 26027 - 11905: 0xEDBD, + 26028 - 11905: 0x94D8, + 26029 - 11905: 0xB6CF, + 26030 - 11905: 0x94D9, + 26031 - 11905: 0xCBB9, + 26032 - 11905: 0xD0C2, + 26033 - 11905: 0x94DA, + 26034 - 11905: 0x94DB, + 26035 - 11905: 0x94DC, + 26036 - 11905: 0x94DD, + 26037 - 11905: 0x94DE, + 26038 - 11905: 0x94DF, + 26039 - 11905: 0x94E0, + 26040 - 11905: 0x94E1, + 26041 - 11905: 0xB7BD, + 26042 - 11905: 0x94E2, + 26043 - 11905: 0x94E3, + 26044 - 11905: 0xECB6, + 26045 - 11905: 0xCAA9, + 26046 - 11905: 0x94E4, + 26047 - 11905: 0x94E5, + 26048 - 11905: 0x94E6, + 26049 - 11905: 0xC5D4, + 26050 - 11905: 0x94E7, + 26051 - 11905: 0xECB9, + 26052 - 11905: 0xECB8, + 26053 - 11905: 0xC2C3, + 26054 - 11905: 0xECB7, + 26055 - 11905: 0x94E8, + 26056 - 11905: 0x94E9, + 26057 - 11905: 0x94EA, + 26058 - 11905: 0x94EB, + 26059 - 11905: 0xD0FD, + 26060 - 11905: 0xECBA, + 26061 - 11905: 0x94EC, + 26062 - 11905: 0xECBB, + 26063 - 11905: 0xD7E5, + 26064 - 11905: 0x94ED, + 26065 - 11905: 0x94EE, + 26066 - 11905: 0xECBC, + 26067 - 11905: 0x94EF, + 26068 - 11905: 0x94F0, + 26069 - 11905: 0x94F1, + 26070 - 11905: 0xECBD, + 26071 - 11905: 0xC6EC, + 26072 - 11905: 0x94F2, + 26073 - 11905: 0x94F3, + 26074 - 11905: 0x94F4, + 26075 - 11905: 0x94F5, + 26076 - 11905: 0x94F6, + 26077 - 11905: 0x94F7, + 26078 - 11905: 0x94F8, + 26079 - 11905: 0x94F9, + 26080 - 11905: 0xCEDE, + 26081 - 11905: 0x94FA, + 26082 - 11905: 0xBCC8, + 26083 - 11905: 0x94FB, + 26084 - 11905: 0x94FC, + 26085 - 11905: 0xC8D5, + 26086 - 11905: 0xB5A9, + 26087 - 11905: 0xBEC9, + 26088 - 11905: 0xD6BC, + 26089 - 11905: 0xD4E7, + 26090 - 11905: 0x94FD, + 26091 - 11905: 0x94FE, + 26092 - 11905: 0xD1AE, + 26093 - 11905: 0xD0F1, + 26094 - 11905: 0xEAB8, + 26095 - 11905: 0xEAB9, + 26096 - 11905: 0xEABA, + 26097 - 11905: 0xBAB5, + 26098 - 11905: 0x9540, + 26099 - 11905: 0x9541, + 26100 - 11905: 0x9542, + 26101 - 11905: 0x9543, + 26102 - 11905: 0xCAB1, + 26103 - 11905: 0xBFF5, + 26104 - 11905: 0x9544, + 26105 - 11905: 0x9545, + 26106 - 11905: 0xCDFA, + 26107 - 11905: 0x9546, + 26108 - 11905: 0x9547, + 26109 - 11905: 0x9548, + 26110 - 11905: 0x9549, + 26111 - 11905: 0x954A, + 26112 - 11905: 0xEAC0, + 26113 - 11905: 0x954B, + 26114 - 11905: 0xB0BA, + 26115 - 11905: 0xEABE, + 26116 - 11905: 0x954C, + 26117 - 11905: 0x954D, + 26118 - 11905: 0xC0A5, + 26119 - 11905: 0x954E, + 26120 - 11905: 0x954F, + 26121 - 11905: 0x9550, + 26122 - 11905: 0xEABB, + 26123 - 11905: 0x9551, + 26124 - 11905: 0xB2FD, + 26125 - 11905: 0x9552, + 26126 - 11905: 0xC3F7, + 26127 - 11905: 0xBBE8, + 26128 - 11905: 0x9553, + 26129 - 11905: 0x9554, + 26130 - 11905: 0x9555, + 26131 - 11905: 0xD2D7, + 26132 - 11905: 0xCEF4, + 26133 - 11905: 0xEABF, + 26134 - 11905: 0x9556, + 26135 - 11905: 0x9557, + 26136 - 11905: 0x9558, + 26137 - 11905: 0xEABC, + 26138 - 11905: 0x9559, + 26139 - 11905: 0x955A, + 26140 - 11905: 0x955B, + 26141 - 11905: 0xEAC3, + 26142 - 11905: 0x955C, + 26143 - 11905: 0xD0C7, + 26144 - 11905: 0xD3B3, + 26145 - 11905: 0x955D, + 26146 - 11905: 0x955E, + 26147 - 11905: 0x955F, + 26148 - 11905: 0x9560, + 26149 - 11905: 0xB4BA, + 26150 - 11905: 0x9561, + 26151 - 11905: 0xC3C1, + 26152 - 11905: 0xD7F2, + 26153 - 11905: 0x9562, + 26154 - 11905: 0x9563, + 26155 - 11905: 0x9564, + 26156 - 11905: 0x9565, + 26157 - 11905: 0xD5D1, + 26158 - 11905: 0x9566, + 26159 - 11905: 0xCAC7, + 26160 - 11905: 0x9567, + 26161 - 11905: 0xEAC5, + 26162 - 11905: 0x9568, + 26163 - 11905: 0x9569, + 26164 - 11905: 0xEAC4, + 26165 - 11905: 0xEAC7, + 26166 - 11905: 0xEAC6, + 26167 - 11905: 0x956A, + 26168 - 11905: 0x956B, + 26169 - 11905: 0x956C, + 26170 - 11905: 0x956D, + 26171 - 11905: 0x956E, + 26172 - 11905: 0xD6E7, + 26173 - 11905: 0x956F, + 26174 - 11905: 0xCFD4, + 26175 - 11905: 0x9570, + 26176 - 11905: 0x9571, + 26177 - 11905: 0xEACB, + 26178 - 11905: 0x9572, + 26179 - 11905: 0xBBCE, + 26180 - 11905: 0x9573, + 26181 - 11905: 0x9574, + 26182 - 11905: 0x9575, + 26183 - 11905: 0x9576, + 26184 - 11905: 0x9577, + 26185 - 11905: 0x9578, + 26186 - 11905: 0x9579, + 26187 - 11905: 0xBDFA, + 26188 - 11905: 0xC9CE, + 26189 - 11905: 0x957A, + 26190 - 11905: 0x957B, + 26191 - 11905: 0xEACC, + 26192 - 11905: 0x957C, + 26193 - 11905: 0x957D, + 26194 - 11905: 0xC9B9, + 26195 - 11905: 0xCFFE, + 26196 - 11905: 0xEACA, + 26197 - 11905: 0xD4CE, + 26198 - 11905: 0xEACD, + 26199 - 11905: 0xEACF, + 26200 - 11905: 0x957E, + 26201 - 11905: 0x9580, + 26202 - 11905: 0xCDED, + 26203 - 11905: 0x9581, + 26204 - 11905: 0x9582, + 26205 - 11905: 0x9583, + 26206 - 11905: 0x9584, + 26207 - 11905: 0xEAC9, + 26208 - 11905: 0x9585, + 26209 - 11905: 0xEACE, + 26210 - 11905: 0x9586, + 26211 - 11905: 0x9587, + 26212 - 11905: 0xCEEE, + 26213 - 11905: 0x9588, + 26214 - 11905: 0xBBDE, + 26215 - 11905: 0x9589, + 26216 - 11905: 0xB3BF, + 26217 - 11905: 0x958A, + 26218 - 11905: 0x958B, + 26219 - 11905: 0x958C, + 26220 - 11905: 0x958D, + 26221 - 11905: 0x958E, + 26222 - 11905: 0xC6D5, + 26223 - 11905: 0xBEB0, + 26224 - 11905: 0xCEFA, + 26225 - 11905: 0x958F, + 26226 - 11905: 0x9590, + 26227 - 11905: 0x9591, + 26228 - 11905: 0xC7E7, + 26229 - 11905: 0x9592, + 26230 - 11905: 0xBEA7, + 26231 - 11905: 0xEAD0, + 26232 - 11905: 0x9593, + 26233 - 11905: 0x9594, + 26234 - 11905: 0xD6C7, + 26235 - 11905: 0x9595, + 26236 - 11905: 0x9596, + 26237 - 11905: 0x9597, + 26238 - 11905: 0xC1C0, + 26239 - 11905: 0x9598, + 26240 - 11905: 0x9599, + 26241 - 11905: 0x959A, + 26242 - 11905: 0xD4DD, + 26243 - 11905: 0x959B, + 26244 - 11905: 0xEAD1, + 26245 - 11905: 0x959C, + 26246 - 11905: 0x959D, + 26247 - 11905: 0xCFBE, + 26248 - 11905: 0x959E, + 26249 - 11905: 0x959F, + 26250 - 11905: 0x95A0, + 26251 - 11905: 0x95A1, + 26252 - 11905: 0xEAD2, + 26253 - 11905: 0x95A2, + 26254 - 11905: 0x95A3, + 26255 - 11905: 0x95A4, + 26256 - 11905: 0x95A5, + 26257 - 11905: 0xCAEE, + 26258 - 11905: 0x95A6, + 26259 - 11905: 0x95A7, + 26260 - 11905: 0x95A8, + 26261 - 11905: 0x95A9, + 26262 - 11905: 0xC5AF, + 26263 - 11905: 0xB0B5, + 26264 - 11905: 0x95AA, + 26265 - 11905: 0x95AB, + 26266 - 11905: 0x95AC, + 26267 - 11905: 0x95AD, + 26268 - 11905: 0x95AE, + 26269 - 11905: 0xEAD4, + 26270 - 11905: 0x95AF, + 26271 - 11905: 0x95B0, + 26272 - 11905: 0x95B1, + 26273 - 11905: 0x95B2, + 26274 - 11905: 0x95B3, + 26275 - 11905: 0x95B4, + 26276 - 11905: 0x95B5, + 26277 - 11905: 0x95B6, + 26278 - 11905: 0x95B7, + 26279 - 11905: 0xEAD3, + 26280 - 11905: 0xF4DF, + 26281 - 11905: 0x95B8, + 26282 - 11905: 0x95B9, + 26283 - 11905: 0x95BA, + 26284 - 11905: 0x95BB, + 26285 - 11905: 0x95BC, + 26286 - 11905: 0xC4BA, + 26287 - 11905: 0x95BD, + 26288 - 11905: 0x95BE, + 26289 - 11905: 0x95BF, + 26290 - 11905: 0x95C0, + 26291 - 11905: 0x95C1, + 26292 - 11905: 0xB1A9, + 26293 - 11905: 0x95C2, + 26294 - 11905: 0x95C3, + 26295 - 11905: 0x95C4, + 26296 - 11905: 0x95C5, + 26297 - 11905: 0xE5DF, + 26298 - 11905: 0x95C6, + 26299 - 11905: 0x95C7, + 26300 - 11905: 0x95C8, + 26301 - 11905: 0x95C9, + 26302 - 11905: 0xEAD5, + 26303 - 11905: 0x95CA, + 26304 - 11905: 0x95CB, + 26305 - 11905: 0x95CC, + 26306 - 11905: 0x95CD, + 26307 - 11905: 0x95CE, + 26308 - 11905: 0x95CF, + 26309 - 11905: 0x95D0, + 26310 - 11905: 0x95D1, + 26311 - 11905: 0x95D2, + 26312 - 11905: 0x95D3, + 26313 - 11905: 0x95D4, + 26314 - 11905: 0x95D5, + 26315 - 11905: 0x95D6, + 26316 - 11905: 0x95D7, + 26317 - 11905: 0x95D8, + 26318 - 11905: 0x95D9, + 26319 - 11905: 0x95DA, + 26320 - 11905: 0x95DB, + 26321 - 11905: 0x95DC, + 26322 - 11905: 0x95DD, + 26323 - 11905: 0x95DE, + 26324 - 11905: 0x95DF, + 26325 - 11905: 0x95E0, + 26326 - 11905: 0x95E1, + 26327 - 11905: 0x95E2, + 26328 - 11905: 0x95E3, + 26329 - 11905: 0xCAEF, + 26330 - 11905: 0x95E4, + 26331 - 11905: 0xEAD6, + 26332 - 11905: 0xEAD7, + 26333 - 11905: 0xC6D8, + 26334 - 11905: 0x95E5, + 26335 - 11905: 0x95E6, + 26336 - 11905: 0x95E7, + 26337 - 11905: 0x95E8, + 26338 - 11905: 0x95E9, + 26339 - 11905: 0x95EA, + 26340 - 11905: 0x95EB, + 26341 - 11905: 0x95EC, + 26342 - 11905: 0xEAD8, + 26343 - 11905: 0x95ED, + 26344 - 11905: 0x95EE, + 26345 - 11905: 0xEAD9, + 26346 - 11905: 0x95EF, + 26347 - 11905: 0x95F0, + 26348 - 11905: 0x95F1, + 26349 - 11905: 0x95F2, + 26350 - 11905: 0x95F3, + 26351 - 11905: 0x95F4, + 26352 - 11905: 0xD4BB, + 26353 - 11905: 0x95F5, + 26354 - 11905: 0xC7FA, + 26355 - 11905: 0xD2B7, + 26356 - 11905: 0xB8FC, + 26357 - 11905: 0x95F6, + 26358 - 11905: 0x95F7, + 26359 - 11905: 0xEAC2, + 26360 - 11905: 0x95F8, + 26361 - 11905: 0xB2DC, + 26362 - 11905: 0x95F9, + 26363 - 11905: 0x95FA, + 26364 - 11905: 0xC2FC, + 26365 - 11905: 0x95FB, + 26366 - 11905: 0xD4F8, + 26367 - 11905: 0xCCE6, + 26368 - 11905: 0xD7EE, + 26369 - 11905: 0x95FC, + 26370 - 11905: 0x95FD, + 26371 - 11905: 0x95FE, + 26372 - 11905: 0x9640, + 26373 - 11905: 0x9641, + 26374 - 11905: 0x9642, + 26375 - 11905: 0x9643, + 26376 - 11905: 0xD4C2, + 26377 - 11905: 0xD3D0, + 26378 - 11905: 0xEBC3, + 26379 - 11905: 0xC5F3, + 26380 - 11905: 0x9644, + 26381 - 11905: 0xB7FE, + 26382 - 11905: 0x9645, + 26383 - 11905: 0x9646, + 26384 - 11905: 0xEBD4, + 26385 - 11905: 0x9647, + 26386 - 11905: 0x9648, + 26387 - 11905: 0x9649, + 26388 - 11905: 0xCBB7, + 26389 - 11905: 0xEBDE, + 26390 - 11905: 0x964A, + 26391 - 11905: 0xC0CA, + 26392 - 11905: 0x964B, + 26393 - 11905: 0x964C, + 26394 - 11905: 0x964D, + 26395 - 11905: 0xCDFB, + 26396 - 11905: 0x964E, + 26397 - 11905: 0xB3AF, + 26398 - 11905: 0x964F, + 26399 - 11905: 0xC6DA, + 26400 - 11905: 0x9650, + 26401 - 11905: 0x9651, + 26402 - 11905: 0x9652, + 26403 - 11905: 0x9653, + 26404 - 11905: 0x9654, + 26405 - 11905: 0x9655, + 26406 - 11905: 0xEBFC, + 26407 - 11905: 0x9656, + 26408 - 11905: 0xC4BE, + 26409 - 11905: 0x9657, + 26410 - 11905: 0xCEB4, + 26411 - 11905: 0xC4A9, + 26412 - 11905: 0xB1BE, + 26413 - 11905: 0xD4FD, + 26414 - 11905: 0x9658, + 26415 - 11905: 0xCAF5, + 26416 - 11905: 0x9659, + 26417 - 11905: 0xD6EC, + 26418 - 11905: 0x965A, + 26419 - 11905: 0x965B, + 26420 - 11905: 0xC6D3, + 26421 - 11905: 0xB6E4, + 26422 - 11905: 0x965C, + 26423 - 11905: 0x965D, + 26424 - 11905: 0x965E, + 26425 - 11905: 0x965F, + 26426 - 11905: 0xBBFA, + 26427 - 11905: 0x9660, + 26428 - 11905: 0x9661, + 26429 - 11905: 0xD0E0, + 26430 - 11905: 0x9662, + 26431 - 11905: 0x9663, + 26432 - 11905: 0xC9B1, + 26433 - 11905: 0x9664, + 26434 - 11905: 0xD4D3, + 26435 - 11905: 0xC8A8, + 26436 - 11905: 0x9665, + 26437 - 11905: 0x9666, + 26438 - 11905: 0xB8CB, + 26439 - 11905: 0x9667, + 26440 - 11905: 0xE8BE, + 26441 - 11905: 0xC9BC, + 26442 - 11905: 0x9668, + 26443 - 11905: 0x9669, + 26444 - 11905: 0xE8BB, + 26445 - 11905: 0x966A, + 26446 - 11905: 0xC0EE, + 26447 - 11905: 0xD0D3, + 26448 - 11905: 0xB2C4, + 26449 - 11905: 0xB4E5, + 26450 - 11905: 0x966B, + 26451 - 11905: 0xE8BC, + 26452 - 11905: 0x966C, + 26453 - 11905: 0x966D, + 26454 - 11905: 0xD5C8, + 26455 - 11905: 0x966E, + 26456 - 11905: 0x966F, + 26457 - 11905: 0x9670, + 26458 - 11905: 0x9671, + 26459 - 11905: 0x9672, + 26460 - 11905: 0xB6C5, + 26461 - 11905: 0x9673, + 26462 - 11905: 0xE8BD, + 26463 - 11905: 0xCAF8, + 26464 - 11905: 0xB8DC, + 26465 - 11905: 0xCCF5, + 26466 - 11905: 0x9674, + 26467 - 11905: 0x9675, + 26468 - 11905: 0x9676, + 26469 - 11905: 0xC0B4, + 26470 - 11905: 0x9677, + 26471 - 11905: 0x9678, + 26472 - 11905: 0xD1EE, + 26473 - 11905: 0xE8BF, + 26474 - 11905: 0xE8C2, + 26475 - 11905: 0x9679, + 26476 - 11905: 0x967A, + 26477 - 11905: 0xBABC, + 26478 - 11905: 0x967B, + 26479 - 11905: 0xB1AD, + 26480 - 11905: 0xBDDC, + 26481 - 11905: 0x967C, + 26482 - 11905: 0xEABD, + 26483 - 11905: 0xE8C3, + 26484 - 11905: 0x967D, + 26485 - 11905: 0xE8C6, + 26486 - 11905: 0x967E, + 26487 - 11905: 0xE8CB, + 26488 - 11905: 0x9680, + 26489 - 11905: 0x9681, + 26490 - 11905: 0x9682, + 26491 - 11905: 0x9683, + 26492 - 11905: 0xE8CC, + 26493 - 11905: 0x9684, + 26494 - 11905: 0xCBC9, + 26495 - 11905: 0xB0E5, + 26496 - 11905: 0x9685, + 26497 - 11905: 0xBCAB, + 26498 - 11905: 0x9686, + 26499 - 11905: 0x9687, + 26500 - 11905: 0xB9B9, + 26501 - 11905: 0x9688, + 26502 - 11905: 0x9689, + 26503 - 11905: 0xE8C1, + 26504 - 11905: 0x968A, + 26505 - 11905: 0xCDF7, + 26506 - 11905: 0x968B, + 26507 - 11905: 0xE8CA, + 26508 - 11905: 0x968C, + 26509 - 11905: 0x968D, + 26510 - 11905: 0x968E, + 26511 - 11905: 0x968F, + 26512 - 11905: 0xCEF6, + 26513 - 11905: 0x9690, + 26514 - 11905: 0x9691, + 26515 - 11905: 0x9692, + 26516 - 11905: 0x9693, + 26517 - 11905: 0xD5ED, + 26518 - 11905: 0x9694, + 26519 - 11905: 0xC1D6, + 26520 - 11905: 0xE8C4, + 26521 - 11905: 0x9695, + 26522 - 11905: 0xC3B6, + 26523 - 11905: 0x9696, + 26524 - 11905: 0xB9FB, + 26525 - 11905: 0xD6A6, + 26526 - 11905: 0xE8C8, + 26527 - 11905: 0x9697, + 26528 - 11905: 0x9698, + 26529 - 11905: 0x9699, + 26530 - 11905: 0xCAE0, + 26531 - 11905: 0xD4E6, + 26532 - 11905: 0x969A, + 26533 - 11905: 0xE8C0, + 26534 - 11905: 0x969B, + 26535 - 11905: 0xE8C5, + 26536 - 11905: 0xE8C7, + 26537 - 11905: 0x969C, + 26538 - 11905: 0xC7B9, + 26539 - 11905: 0xB7E3, + 26540 - 11905: 0x969D, + 26541 - 11905: 0xE8C9, + 26542 - 11905: 0x969E, + 26543 - 11905: 0xBFDD, + 26544 - 11905: 0xE8D2, + 26545 - 11905: 0x969F, + 26546 - 11905: 0x96A0, + 26547 - 11905: 0xE8D7, + 26548 - 11905: 0x96A1, + 26549 - 11905: 0xE8D5, + 26550 - 11905: 0xBCDC, + 26551 - 11905: 0xBCCF, + 26552 - 11905: 0xE8DB, + 26553 - 11905: 0x96A2, + 26554 - 11905: 0x96A3, + 26555 - 11905: 0x96A4, + 26556 - 11905: 0x96A5, + 26557 - 11905: 0x96A6, + 26558 - 11905: 0x96A7, + 26559 - 11905: 0x96A8, + 26560 - 11905: 0x96A9, + 26561 - 11905: 0xE8DE, + 26562 - 11905: 0x96AA, + 26563 - 11905: 0xE8DA, + 26564 - 11905: 0xB1FA, + 26565 - 11905: 0x96AB, + 26566 - 11905: 0x96AC, + 26567 - 11905: 0x96AD, + 26568 - 11905: 0x96AE, + 26569 - 11905: 0x96AF, + 26570 - 11905: 0x96B0, + 26571 - 11905: 0x96B1, + 26572 - 11905: 0x96B2, + 26573 - 11905: 0x96B3, + 26574 - 11905: 0x96B4, + 26575 - 11905: 0xB0D8, + 26576 - 11905: 0xC4B3, + 26577 - 11905: 0xB8CC, + 26578 - 11905: 0xC6E2, + 26579 - 11905: 0xC8BE, + 26580 - 11905: 0xC8E1, + 26581 - 11905: 0x96B5, + 26582 - 11905: 0x96B6, + 26583 - 11905: 0x96B7, + 26584 - 11905: 0xE8CF, + 26585 - 11905: 0xE8D4, + 26586 - 11905: 0xE8D6, + 26587 - 11905: 0x96B8, + 26588 - 11905: 0xB9F1, + 26589 - 11905: 0xE8D8, + 26590 - 11905: 0xD7F5, + 26591 - 11905: 0x96B9, + 26592 - 11905: 0xC4FB, + 26593 - 11905: 0x96BA, + 26594 - 11905: 0xE8DC, + 26595 - 11905: 0x96BB, + 26596 - 11905: 0x96BC, + 26597 - 11905: 0xB2E9, + 26598 - 11905: 0x96BD, + 26599 - 11905: 0x96BE, + 26600 - 11905: 0x96BF, + 26601 - 11905: 0xE8D1, + 26602 - 11905: 0x96C0, + 26603 - 11905: 0x96C1, + 26604 - 11905: 0xBCED, + 26605 - 11905: 0x96C2, + 26606 - 11905: 0x96C3, + 26607 - 11905: 0xBFC2, + 26608 - 11905: 0xE8CD, + 26609 - 11905: 0xD6F9, + 26610 - 11905: 0x96C4, + 26611 - 11905: 0xC1F8, + 26612 - 11905: 0xB2F1, + 26613 - 11905: 0x96C5, + 26614 - 11905: 0x96C6, + 26615 - 11905: 0x96C7, + 26616 - 11905: 0x96C8, + 26617 - 11905: 0x96C9, + 26618 - 11905: 0x96CA, + 26619 - 11905: 0x96CB, + 26620 - 11905: 0x96CC, + 26621 - 11905: 0xE8DF, + 26622 - 11905: 0x96CD, + 26623 - 11905: 0xCAC1, + 26624 - 11905: 0xE8D9, + 26625 - 11905: 0x96CE, + 26626 - 11905: 0x96CF, + 26627 - 11905: 0x96D0, + 26628 - 11905: 0x96D1, + 26629 - 11905: 0xD5A4, + 26630 - 11905: 0x96D2, + 26631 - 11905: 0xB1EA, + 26632 - 11905: 0xD5BB, + 26633 - 11905: 0xE8CE, + 26634 - 11905: 0xE8D0, + 26635 - 11905: 0xB6B0, + 26636 - 11905: 0xE8D3, + 26637 - 11905: 0x96D3, + 26638 - 11905: 0xE8DD, + 26639 - 11905: 0xC0B8, + 26640 - 11905: 0x96D4, + 26641 - 11905: 0xCAF7, + 26642 - 11905: 0x96D5, + 26643 - 11905: 0xCBA8, + 26644 - 11905: 0x96D6, + 26645 - 11905: 0x96D7, + 26646 - 11905: 0xC6DC, + 26647 - 11905: 0xC0F5, + 26648 - 11905: 0x96D8, + 26649 - 11905: 0x96D9, + 26650 - 11905: 0x96DA, + 26651 - 11905: 0x96DB, + 26652 - 11905: 0x96DC, + 26653 - 11905: 0xE8E9, + 26654 - 11905: 0x96DD, + 26655 - 11905: 0x96DE, + 26656 - 11905: 0x96DF, + 26657 - 11905: 0xD0A3, + 26658 - 11905: 0x96E0, + 26659 - 11905: 0x96E1, + 26660 - 11905: 0x96E2, + 26661 - 11905: 0x96E3, + 26662 - 11905: 0x96E4, + 26663 - 11905: 0x96E5, + 26664 - 11905: 0x96E6, + 26665 - 11905: 0xE8F2, + 26666 - 11905: 0xD6EA, + 26667 - 11905: 0x96E7, + 26668 - 11905: 0x96E8, + 26669 - 11905: 0x96E9, + 26670 - 11905: 0x96EA, + 26671 - 11905: 0x96EB, + 26672 - 11905: 0x96EC, + 26673 - 11905: 0x96ED, + 26674 - 11905: 0xE8E0, + 26675 - 11905: 0xE8E1, + 26676 - 11905: 0x96EE, + 26677 - 11905: 0x96EF, + 26678 - 11905: 0x96F0, + 26679 - 11905: 0xD1F9, + 26680 - 11905: 0xBACB, + 26681 - 11905: 0xB8F9, + 26682 - 11905: 0x96F1, + 26683 - 11905: 0x96F2, + 26684 - 11905: 0xB8F1, + 26685 - 11905: 0xD4D4, + 26686 - 11905: 0xE8EF, + 26687 - 11905: 0x96F3, + 26688 - 11905: 0xE8EE, + 26689 - 11905: 0xE8EC, + 26690 - 11905: 0xB9F0, + 26691 - 11905: 0xCCD2, + 26692 - 11905: 0xE8E6, + 26693 - 11905: 0xCEA6, + 26694 - 11905: 0xBFF2, + 26695 - 11905: 0x96F4, + 26696 - 11905: 0xB0B8, + 26697 - 11905: 0xE8F1, + 26698 - 11905: 0xE8F0, + 26699 - 11905: 0x96F5, + 26700 - 11905: 0xD7C0, + 26701 - 11905: 0x96F6, + 26702 - 11905: 0xE8E4, + 26703 - 11905: 0x96F7, + 26704 - 11905: 0xCDA9, + 26705 - 11905: 0xC9A3, + 26706 - 11905: 0x96F8, + 26707 - 11905: 0xBBB8, + 26708 - 11905: 0xBDDB, + 26709 - 11905: 0xE8EA, + 26710 - 11905: 0x96F9, + 26711 - 11905: 0x96FA, + 26712 - 11905: 0x96FB, + 26713 - 11905: 0x96FC, + 26714 - 11905: 0x96FD, + 26715 - 11905: 0x96FE, + 26716 - 11905: 0x9740, + 26717 - 11905: 0x9741, + 26718 - 11905: 0x9742, + 26719 - 11905: 0x9743, + 26720 - 11905: 0xE8E2, + 26721 - 11905: 0xE8E3, + 26722 - 11905: 0xE8E5, + 26723 - 11905: 0xB5B5, + 26724 - 11905: 0xE8E7, + 26725 - 11905: 0xC7C5, + 26726 - 11905: 0xE8EB, + 26727 - 11905: 0xE8ED, + 26728 - 11905: 0xBDB0, + 26729 - 11905: 0xD7AE, + 26730 - 11905: 0x9744, + 26731 - 11905: 0xE8F8, + 26732 - 11905: 0x9745, + 26733 - 11905: 0x9746, + 26734 - 11905: 0x9747, + 26735 - 11905: 0x9748, + 26736 - 11905: 0x9749, + 26737 - 11905: 0x974A, + 26738 - 11905: 0x974B, + 26739 - 11905: 0x974C, + 26740 - 11905: 0xE8F5, + 26741 - 11905: 0x974D, + 26742 - 11905: 0xCDB0, + 26743 - 11905: 0xE8F6, + 26744 - 11905: 0x974E, + 26745 - 11905: 0x974F, + 26746 - 11905: 0x9750, + 26747 - 11905: 0x9751, + 26748 - 11905: 0x9752, + 26749 - 11905: 0x9753, + 26750 - 11905: 0x9754, + 26751 - 11905: 0x9755, + 26752 - 11905: 0x9756, + 26753 - 11905: 0xC1BA, + 26754 - 11905: 0x9757, + 26755 - 11905: 0xE8E8, + 26756 - 11905: 0x9758, + 26757 - 11905: 0xC3B7, + 26758 - 11905: 0xB0F0, + 26759 - 11905: 0x9759, + 26760 - 11905: 0x975A, + 26761 - 11905: 0x975B, + 26762 - 11905: 0x975C, + 26763 - 11905: 0x975D, + 26764 - 11905: 0x975E, + 26765 - 11905: 0x975F, + 26766 - 11905: 0x9760, + 26767 - 11905: 0xE8F4, + 26768 - 11905: 0x9761, + 26769 - 11905: 0x9762, + 26770 - 11905: 0x9763, + 26771 - 11905: 0xE8F7, + 26772 - 11905: 0x9764, + 26773 - 11905: 0x9765, + 26774 - 11905: 0x9766, + 26775 - 11905: 0xB9A3, + 26776 - 11905: 0x9767, + 26777 - 11905: 0x9768, + 26778 - 11905: 0x9769, + 26779 - 11905: 0x976A, + 26780 - 11905: 0x976B, + 26781 - 11905: 0x976C, + 26782 - 11905: 0x976D, + 26783 - 11905: 0x976E, + 26784 - 11905: 0x976F, + 26785 - 11905: 0x9770, + 26786 - 11905: 0xC9D2, + 26787 - 11905: 0x9771, + 26788 - 11905: 0x9772, + 26789 - 11905: 0x9773, + 26790 - 11905: 0xC3CE, + 26791 - 11905: 0xCEE0, + 26792 - 11905: 0xC0E6, + 26793 - 11905: 0x9774, + 26794 - 11905: 0x9775, + 26795 - 11905: 0x9776, + 26796 - 11905: 0x9777, + 26797 - 11905: 0xCBF3, + 26798 - 11905: 0x9778, + 26799 - 11905: 0xCCDD, + 26800 - 11905: 0xD0B5, + 26801 - 11905: 0x9779, + 26802 - 11905: 0x977A, + 26803 - 11905: 0xCAE1, + 26804 - 11905: 0x977B, + 26805 - 11905: 0xE8F3, + 26806 - 11905: 0x977C, + 26807 - 11905: 0x977D, + 26808 - 11905: 0x977E, + 26809 - 11905: 0x9780, + 26810 - 11905: 0x9781, + 26811 - 11905: 0x9782, + 26812 - 11905: 0x9783, + 26813 - 11905: 0x9784, + 26814 - 11905: 0x9785, + 26815 - 11905: 0x9786, + 26816 - 11905: 0xBCEC, + 26817 - 11905: 0x9787, + 26818 - 11905: 0xE8F9, + 26819 - 11905: 0x9788, + 26820 - 11905: 0x9789, + 26821 - 11905: 0x978A, + 26822 - 11905: 0x978B, + 26823 - 11905: 0x978C, + 26824 - 11905: 0x978D, + 26825 - 11905: 0xC3DE, + 26826 - 11905: 0x978E, + 26827 - 11905: 0xC6E5, + 26828 - 11905: 0x978F, + 26829 - 11905: 0xB9F7, + 26830 - 11905: 0x9790, + 26831 - 11905: 0x9791, + 26832 - 11905: 0x9792, + 26833 - 11905: 0x9793, + 26834 - 11905: 0xB0F4, + 26835 - 11905: 0x9794, + 26836 - 11905: 0x9795, + 26837 - 11905: 0xD7D8, + 26838 - 11905: 0x9796, + 26839 - 11905: 0x9797, + 26840 - 11905: 0xBCAC, + 26841 - 11905: 0x9798, + 26842 - 11905: 0xC5EF, + 26843 - 11905: 0x9799, + 26844 - 11905: 0x979A, + 26845 - 11905: 0x979B, + 26846 - 11905: 0x979C, + 26847 - 11905: 0x979D, + 26848 - 11905: 0xCCC4, + 26849 - 11905: 0x979E, + 26850 - 11905: 0x979F, + 26851 - 11905: 0xE9A6, + 26852 - 11905: 0x97A0, + 26853 - 11905: 0x97A1, + 26854 - 11905: 0x97A2, + 26855 - 11905: 0x97A3, + 26856 - 11905: 0x97A4, + 26857 - 11905: 0x97A5, + 26858 - 11905: 0x97A6, + 26859 - 11905: 0x97A7, + 26860 - 11905: 0x97A8, + 26861 - 11905: 0x97A9, + 26862 - 11905: 0xC9AD, + 26863 - 11905: 0x97AA, + 26864 - 11905: 0xE9A2, + 26865 - 11905: 0xC0E2, + 26866 - 11905: 0x97AB, + 26867 - 11905: 0x97AC, + 26868 - 11905: 0x97AD, + 26869 - 11905: 0xBFC3, + 26870 - 11905: 0x97AE, + 26871 - 11905: 0x97AF, + 26872 - 11905: 0x97B0, + 26873 - 11905: 0xE8FE, + 26874 - 11905: 0xB9D7, + 26875 - 11905: 0x97B1, + 26876 - 11905: 0xE8FB, + 26877 - 11905: 0x97B2, + 26878 - 11905: 0x97B3, + 26879 - 11905: 0x97B4, + 26880 - 11905: 0x97B5, + 26881 - 11905: 0xE9A4, + 26882 - 11905: 0x97B6, + 26883 - 11905: 0x97B7, + 26884 - 11905: 0x97B8, + 26885 - 11905: 0xD2CE, + 26886 - 11905: 0x97B9, + 26887 - 11905: 0x97BA, + 26888 - 11905: 0x97BB, + 26889 - 11905: 0x97BC, + 26890 - 11905: 0x97BD, + 26891 - 11905: 0xE9A3, + 26892 - 11905: 0x97BE, + 26893 - 11905: 0xD6B2, + 26894 - 11905: 0xD7B5, + 26895 - 11905: 0x97BF, + 26896 - 11905: 0xE9A7, + 26897 - 11905: 0x97C0, + 26898 - 11905: 0xBDB7, + 26899 - 11905: 0x97C1, + 26900 - 11905: 0x97C2, + 26901 - 11905: 0x97C3, + 26902 - 11905: 0x97C4, + 26903 - 11905: 0x97C5, + 26904 - 11905: 0x97C6, + 26905 - 11905: 0x97C7, + 26906 - 11905: 0x97C8, + 26907 - 11905: 0x97C9, + 26908 - 11905: 0x97CA, + 26909 - 11905: 0x97CB, + 26910 - 11905: 0x97CC, + 26911 - 11905: 0xE8FC, + 26912 - 11905: 0xE8FD, + 26913 - 11905: 0x97CD, + 26914 - 11905: 0x97CE, + 26915 - 11905: 0x97CF, + 26916 - 11905: 0xE9A1, + 26917 - 11905: 0x97D0, + 26918 - 11905: 0x97D1, + 26919 - 11905: 0x97D2, + 26920 - 11905: 0x97D3, + 26921 - 11905: 0x97D4, + 26922 - 11905: 0x97D5, + 26923 - 11905: 0x97D6, + 26924 - 11905: 0x97D7, + 26925 - 11905: 0xCDD6, + 26926 - 11905: 0x97D8, + 26927 - 11905: 0x97D9, + 26928 - 11905: 0xD2AC, + 26929 - 11905: 0x97DA, + 26930 - 11905: 0x97DB, + 26931 - 11905: 0x97DC, + 26932 - 11905: 0xE9B2, + 26933 - 11905: 0x97DD, + 26934 - 11905: 0x97DE, + 26935 - 11905: 0x97DF, + 26936 - 11905: 0x97E0, + 26937 - 11905: 0xE9A9, + 26938 - 11905: 0x97E1, + 26939 - 11905: 0x97E2, + 26940 - 11905: 0x97E3, + 26941 - 11905: 0xB4AA, + 26942 - 11905: 0x97E4, + 26943 - 11905: 0xB4BB, + 26944 - 11905: 0x97E5, + 26945 - 11905: 0x97E6, + 26946 - 11905: 0xE9AB, + 26947 - 11905: 0x97E7, + 26948 - 11905: 0x97E8, + 26949 - 11905: 0x97E9, + 26950 - 11905: 0x97EA, + 26951 - 11905: 0x97EB, + 26952 - 11905: 0x97EC, + 26953 - 11905: 0x97ED, + 26954 - 11905: 0x97EE, + 26955 - 11905: 0x97EF, + 26956 - 11905: 0x97F0, + 26957 - 11905: 0x97F1, + 26958 - 11905: 0x97F2, + 26959 - 11905: 0x97F3, + 26960 - 11905: 0x97F4, + 26961 - 11905: 0x97F5, + 26962 - 11905: 0x97F6, + 26963 - 11905: 0x97F7, + 26964 - 11905: 0xD0A8, + 26965 - 11905: 0x97F8, + 26966 - 11905: 0x97F9, + 26967 - 11905: 0xE9A5, + 26968 - 11905: 0x97FA, + 26969 - 11905: 0x97FB, + 26970 - 11905: 0xB3FE, + 26971 - 11905: 0x97FC, + 26972 - 11905: 0x97FD, + 26973 - 11905: 0xE9AC, + 26974 - 11905: 0xC0E3, + 26975 - 11905: 0x97FE, + 26976 - 11905: 0xE9AA, + 26977 - 11905: 0x9840, + 26978 - 11905: 0x9841, + 26979 - 11905: 0xE9B9, + 26980 - 11905: 0x9842, + 26981 - 11905: 0x9843, + 26982 - 11905: 0xE9B8, + 26983 - 11905: 0x9844, + 26984 - 11905: 0x9845, + 26985 - 11905: 0x9846, + 26986 - 11905: 0x9847, + 26987 - 11905: 0xE9AE, + 26988 - 11905: 0x9848, + 26989 - 11905: 0x9849, + 26990 - 11905: 0xE8FA, + 26991 - 11905: 0x984A, + 26992 - 11905: 0x984B, + 26993 - 11905: 0xE9A8, + 26994 - 11905: 0x984C, + 26995 - 11905: 0x984D, + 26996 - 11905: 0x984E, + 26997 - 11905: 0x984F, + 26998 - 11905: 0x9850, + 26999 - 11905: 0xBFAC, + 27000 - 11905: 0xE9B1, + 27001 - 11905: 0xE9BA, + 27002 - 11905: 0x9851, + 27003 - 11905: 0x9852, + 27004 - 11905: 0xC2A5, + 27005 - 11905: 0x9853, + 27006 - 11905: 0x9854, + 27007 - 11905: 0x9855, + 27008 - 11905: 0xE9AF, + 27009 - 11905: 0x9856, + 27010 - 11905: 0xB8C5, + 27011 - 11905: 0x9857, + 27012 - 11905: 0xE9AD, + 27013 - 11905: 0x9858, + 27014 - 11905: 0xD3DC, + 27015 - 11905: 0xE9B4, + 27016 - 11905: 0xE9B5, + 27017 - 11905: 0xE9B7, + 27018 - 11905: 0x9859, + 27019 - 11905: 0x985A, + 27020 - 11905: 0x985B, + 27021 - 11905: 0xE9C7, + 27022 - 11905: 0x985C, + 27023 - 11905: 0x985D, + 27024 - 11905: 0x985E, + 27025 - 11905: 0x985F, + 27026 - 11905: 0x9860, + 27027 - 11905: 0x9861, + 27028 - 11905: 0xC0C6, + 27029 - 11905: 0xE9C5, + 27030 - 11905: 0x9862, + 27031 - 11905: 0x9863, + 27032 - 11905: 0xE9B0, + 27033 - 11905: 0x9864, + 27034 - 11905: 0x9865, + 27035 - 11905: 0xE9BB, + 27036 - 11905: 0xB0F1, + 27037 - 11905: 0x9866, + 27038 - 11905: 0x9867, + 27039 - 11905: 0x9868, + 27040 - 11905: 0x9869, + 27041 - 11905: 0x986A, + 27042 - 11905: 0x986B, + 27043 - 11905: 0x986C, + 27044 - 11905: 0x986D, + 27045 - 11905: 0x986E, + 27046 - 11905: 0x986F, + 27047 - 11905: 0xE9BC, + 27048 - 11905: 0xD5A5, + 27049 - 11905: 0x9870, + 27050 - 11905: 0x9871, + 27051 - 11905: 0xE9BE, + 27052 - 11905: 0x9872, + 27053 - 11905: 0xE9BF, + 27054 - 11905: 0x9873, + 27055 - 11905: 0x9874, + 27056 - 11905: 0x9875, + 27057 - 11905: 0xE9C1, + 27058 - 11905: 0x9876, + 27059 - 11905: 0x9877, + 27060 - 11905: 0xC1F1, + 27061 - 11905: 0x9878, + 27062 - 11905: 0x9879, + 27063 - 11905: 0xC8B6, + 27064 - 11905: 0x987A, + 27065 - 11905: 0x987B, + 27066 - 11905: 0x987C, + 27067 - 11905: 0xE9BD, + 27068 - 11905: 0x987D, + 27069 - 11905: 0x987E, + 27070 - 11905: 0x9880, + 27071 - 11905: 0x9881, + 27072 - 11905: 0x9882, + 27073 - 11905: 0xE9C2, + 27074 - 11905: 0x9883, + 27075 - 11905: 0x9884, + 27076 - 11905: 0x9885, + 27077 - 11905: 0x9886, + 27078 - 11905: 0x9887, + 27079 - 11905: 0x9888, + 27080 - 11905: 0x9889, + 27081 - 11905: 0x988A, + 27082 - 11905: 0xE9C3, + 27083 - 11905: 0x988B, + 27084 - 11905: 0xE9B3, + 27085 - 11905: 0x988C, + 27086 - 11905: 0xE9B6, + 27087 - 11905: 0x988D, + 27088 - 11905: 0xBBB1, + 27089 - 11905: 0x988E, + 27090 - 11905: 0x988F, + 27091 - 11905: 0x9890, + 27092 - 11905: 0xE9C0, + 27093 - 11905: 0x9891, + 27094 - 11905: 0x9892, + 27095 - 11905: 0x9893, + 27096 - 11905: 0x9894, + 27097 - 11905: 0x9895, + 27098 - 11905: 0x9896, + 27099 - 11905: 0xBCF7, + 27100 - 11905: 0x9897, + 27101 - 11905: 0x9898, + 27102 - 11905: 0x9899, + 27103 - 11905: 0xE9C4, + 27104 - 11905: 0xE9C6, + 27105 - 11905: 0x989A, + 27106 - 11905: 0x989B, + 27107 - 11905: 0x989C, + 27108 - 11905: 0x989D, + 27109 - 11905: 0x989E, + 27110 - 11905: 0x989F, + 27111 - 11905: 0x98A0, + 27112 - 11905: 0x98A1, + 27113 - 11905: 0x98A2, + 27114 - 11905: 0x98A3, + 27115 - 11905: 0x98A4, + 27116 - 11905: 0x98A5, + 27117 - 11905: 0xE9CA, + 27118 - 11905: 0x98A6, + 27119 - 11905: 0x98A7, + 27120 - 11905: 0x98A8, + 27121 - 11905: 0x98A9, + 27122 - 11905: 0xE9CE, + 27123 - 11905: 0x98AA, + 27124 - 11905: 0x98AB, + 27125 - 11905: 0x98AC, + 27126 - 11905: 0x98AD, + 27127 - 11905: 0x98AE, + 27128 - 11905: 0x98AF, + 27129 - 11905: 0x98B0, + 27130 - 11905: 0x98B1, + 27131 - 11905: 0x98B2, + 27132 - 11905: 0x98B3, + 27133 - 11905: 0xB2DB, + 27134 - 11905: 0x98B4, + 27135 - 11905: 0xE9C8, + 27136 - 11905: 0x98B5, + 27137 - 11905: 0x98B6, + 27138 - 11905: 0x98B7, + 27139 - 11905: 0x98B8, + 27140 - 11905: 0x98B9, + 27141 - 11905: 0x98BA, + 27142 - 11905: 0x98BB, + 27143 - 11905: 0x98BC, + 27144 - 11905: 0x98BD, + 27145 - 11905: 0x98BE, + 27146 - 11905: 0xB7AE, + 27147 - 11905: 0x98BF, + 27148 - 11905: 0x98C0, + 27149 - 11905: 0x98C1, + 27150 - 11905: 0x98C2, + 27151 - 11905: 0x98C3, + 27152 - 11905: 0x98C4, + 27153 - 11905: 0x98C5, + 27154 - 11905: 0x98C6, + 27155 - 11905: 0x98C7, + 27156 - 11905: 0x98C8, + 27157 - 11905: 0x98C9, + 27158 - 11905: 0x98CA, + 27159 - 11905: 0xE9CB, + 27160 - 11905: 0xE9CC, + 27161 - 11905: 0x98CB, + 27162 - 11905: 0x98CC, + 27163 - 11905: 0x98CD, + 27164 - 11905: 0x98CE, + 27165 - 11905: 0x98CF, + 27166 - 11905: 0x98D0, + 27167 - 11905: 0xD5C1, + 27168 - 11905: 0x98D1, + 27169 - 11905: 0xC4A3, + 27170 - 11905: 0x98D2, + 27171 - 11905: 0x98D3, + 27172 - 11905: 0x98D4, + 27173 - 11905: 0x98D5, + 27174 - 11905: 0x98D6, + 27175 - 11905: 0x98D7, + 27176 - 11905: 0xE9D8, + 27177 - 11905: 0x98D8, + 27178 - 11905: 0xBAE1, + 27179 - 11905: 0x98D9, + 27180 - 11905: 0x98DA, + 27181 - 11905: 0x98DB, + 27182 - 11905: 0x98DC, + 27183 - 11905: 0xE9C9, + 27184 - 11905: 0x98DD, + 27185 - 11905: 0xD3A3, + 27186 - 11905: 0x98DE, + 27187 - 11905: 0x98DF, + 27188 - 11905: 0x98E0, + 27189 - 11905: 0xE9D4, + 27190 - 11905: 0x98E1, + 27191 - 11905: 0x98E2, + 27192 - 11905: 0x98E3, + 27193 - 11905: 0x98E4, + 27194 - 11905: 0x98E5, + 27195 - 11905: 0x98E6, + 27196 - 11905: 0x98E7, + 27197 - 11905: 0xE9D7, + 27198 - 11905: 0xE9D0, + 27199 - 11905: 0x98E8, + 27200 - 11905: 0x98E9, + 27201 - 11905: 0x98EA, + 27202 - 11905: 0x98EB, + 27203 - 11905: 0x98EC, + 27204 - 11905: 0xE9CF, + 27205 - 11905: 0x98ED, + 27206 - 11905: 0x98EE, + 27207 - 11905: 0xC7C1, + 27208 - 11905: 0x98EF, + 27209 - 11905: 0x98F0, + 27210 - 11905: 0x98F1, + 27211 - 11905: 0x98F2, + 27212 - 11905: 0x98F3, + 27213 - 11905: 0x98F4, + 27214 - 11905: 0x98F5, + 27215 - 11905: 0x98F6, + 27216 - 11905: 0xE9D2, + 27217 - 11905: 0x98F7, + 27218 - 11905: 0x98F8, + 27219 - 11905: 0x98F9, + 27220 - 11905: 0x98FA, + 27221 - 11905: 0x98FB, + 27222 - 11905: 0x98FC, + 27223 - 11905: 0x98FD, + 27224 - 11905: 0xE9D9, + 27225 - 11905: 0xB3C8, + 27226 - 11905: 0x98FE, + 27227 - 11905: 0xE9D3, + 27228 - 11905: 0x9940, + 27229 - 11905: 0x9941, + 27230 - 11905: 0x9942, + 27231 - 11905: 0x9943, + 27232 - 11905: 0x9944, + 27233 - 11905: 0xCFF0, + 27234 - 11905: 0x9945, + 27235 - 11905: 0x9946, + 27236 - 11905: 0x9947, + 27237 - 11905: 0xE9CD, + 27238 - 11905: 0x9948, + 27239 - 11905: 0x9949, + 27240 - 11905: 0x994A, + 27241 - 11905: 0x994B, + 27242 - 11905: 0x994C, + 27243 - 11905: 0x994D, + 27244 - 11905: 0x994E, + 27245 - 11905: 0x994F, + 27246 - 11905: 0x9950, + 27247 - 11905: 0x9951, + 27248 - 11905: 0x9952, + 27249 - 11905: 0xB3F7, + 27250 - 11905: 0x9953, + 27251 - 11905: 0x9954, + 27252 - 11905: 0x9955, + 27253 - 11905: 0x9956, + 27254 - 11905: 0x9957, + 27255 - 11905: 0x9958, + 27256 - 11905: 0x9959, + 27257 - 11905: 0xE9D6, + 27258 - 11905: 0x995A, + 27259 - 11905: 0x995B, + 27260 - 11905: 0xE9DA, + 27261 - 11905: 0x995C, + 27262 - 11905: 0x995D, + 27263 - 11905: 0x995E, + 27264 - 11905: 0xCCB4, + 27265 - 11905: 0x995F, + 27266 - 11905: 0x9960, + 27267 - 11905: 0x9961, + 27268 - 11905: 0xCFAD, + 27269 - 11905: 0x9962, + 27270 - 11905: 0x9963, + 27271 - 11905: 0x9964, + 27272 - 11905: 0x9965, + 27273 - 11905: 0x9966, + 27274 - 11905: 0x9967, + 27275 - 11905: 0x9968, + 27276 - 11905: 0x9969, + 27277 - 11905: 0x996A, + 27278 - 11905: 0xE9D5, + 27279 - 11905: 0x996B, + 27280 - 11905: 0xE9DC, + 27281 - 11905: 0xE9DB, + 27282 - 11905: 0x996C, + 27283 - 11905: 0x996D, + 27284 - 11905: 0x996E, + 27285 - 11905: 0x996F, + 27286 - 11905: 0x9970, + 27287 - 11905: 0xE9DE, + 27288 - 11905: 0x9971, + 27289 - 11905: 0x9972, + 27290 - 11905: 0x9973, + 27291 - 11905: 0x9974, + 27292 - 11905: 0x9975, + 27293 - 11905: 0x9976, + 27294 - 11905: 0x9977, + 27295 - 11905: 0x9978, + 27296 - 11905: 0xE9D1, + 27297 - 11905: 0x9979, + 27298 - 11905: 0x997A, + 27299 - 11905: 0x997B, + 27300 - 11905: 0x997C, + 27301 - 11905: 0x997D, + 27302 - 11905: 0x997E, + 27303 - 11905: 0x9980, + 27304 - 11905: 0x9981, + 27305 - 11905: 0xE9DD, + 27306 - 11905: 0x9982, + 27307 - 11905: 0xE9DF, + 27308 - 11905: 0xC3CA, + 27309 - 11905: 0x9983, + 27310 - 11905: 0x9984, + 27311 - 11905: 0x9985, + 27312 - 11905: 0x9986, + 27313 - 11905: 0x9987, + 27314 - 11905: 0x9988, + 27315 - 11905: 0x9989, + 27316 - 11905: 0x998A, + 27317 - 11905: 0x998B, + 27318 - 11905: 0x998C, + 27319 - 11905: 0x998D, + 27320 - 11905: 0x998E, + 27321 - 11905: 0x998F, + 27322 - 11905: 0x9990, + 27323 - 11905: 0x9991, + 27324 - 11905: 0x9992, + 27325 - 11905: 0x9993, + 27326 - 11905: 0x9994, + 27327 - 11905: 0x9995, + 27328 - 11905: 0x9996, + 27329 - 11905: 0x9997, + 27330 - 11905: 0x9998, + 27331 - 11905: 0x9999, + 27332 - 11905: 0x999A, + 27333 - 11905: 0x999B, + 27334 - 11905: 0x999C, + 27335 - 11905: 0x999D, + 27336 - 11905: 0x999E, + 27337 - 11905: 0x999F, + 27338 - 11905: 0x99A0, + 27339 - 11905: 0x99A1, + 27340 - 11905: 0x99A2, + 27341 - 11905: 0x99A3, + 27342 - 11905: 0x99A4, + 27343 - 11905: 0x99A5, + 27344 - 11905: 0x99A6, + 27345 - 11905: 0x99A7, + 27346 - 11905: 0x99A8, + 27347 - 11905: 0x99A9, + 27348 - 11905: 0x99AA, + 27349 - 11905: 0x99AB, + 27350 - 11905: 0x99AC, + 27351 - 11905: 0x99AD, + 27352 - 11905: 0x99AE, + 27353 - 11905: 0x99AF, + 27354 - 11905: 0x99B0, + 27355 - 11905: 0x99B1, + 27356 - 11905: 0x99B2, + 27357 - 11905: 0x99B3, + 27358 - 11905: 0x99B4, + 27359 - 11905: 0x99B5, + 27360 - 11905: 0x99B6, + 27361 - 11905: 0x99B7, + 27362 - 11905: 0x99B8, + 27363 - 11905: 0x99B9, + 27364 - 11905: 0x99BA, + 27365 - 11905: 0x99BB, + 27366 - 11905: 0x99BC, + 27367 - 11905: 0x99BD, + 27368 - 11905: 0x99BE, + 27369 - 11905: 0x99BF, + 27370 - 11905: 0x99C0, + 27371 - 11905: 0x99C1, + 27372 - 11905: 0x99C2, + 27373 - 11905: 0x99C3, + 27374 - 11905: 0x99C4, + 27375 - 11905: 0x99C5, + 27376 - 11905: 0x99C6, + 27377 - 11905: 0x99C7, + 27378 - 11905: 0x99C8, + 27379 - 11905: 0x99C9, + 27380 - 11905: 0x99CA, + 27381 - 11905: 0x99CB, + 27382 - 11905: 0x99CC, + 27383 - 11905: 0x99CD, + 27384 - 11905: 0x99CE, + 27385 - 11905: 0x99CF, + 27386 - 11905: 0x99D0, + 27387 - 11905: 0x99D1, + 27388 - 11905: 0x99D2, + 27389 - 11905: 0x99D3, + 27390 - 11905: 0x99D4, + 27391 - 11905: 0x99D5, + 27392 - 11905: 0x99D6, + 27393 - 11905: 0x99D7, + 27394 - 11905: 0x99D8, + 27395 - 11905: 0x99D9, + 27396 - 11905: 0x99DA, + 27397 - 11905: 0x99DB, + 27398 - 11905: 0x99DC, + 27399 - 11905: 0x99DD, + 27400 - 11905: 0x99DE, + 27401 - 11905: 0x99DF, + 27402 - 11905: 0x99E0, + 27403 - 11905: 0x99E1, + 27404 - 11905: 0x99E2, + 27405 - 11905: 0x99E3, + 27406 - 11905: 0x99E4, + 27407 - 11905: 0x99E5, + 27408 - 11905: 0x99E6, + 27409 - 11905: 0x99E7, + 27410 - 11905: 0x99E8, + 27411 - 11905: 0x99E9, + 27412 - 11905: 0x99EA, + 27413 - 11905: 0x99EB, + 27414 - 11905: 0x99EC, + 27415 - 11905: 0x99ED, + 27416 - 11905: 0x99EE, + 27417 - 11905: 0x99EF, + 27418 - 11905: 0x99F0, + 27419 - 11905: 0x99F1, + 27420 - 11905: 0x99F2, + 27421 - 11905: 0x99F3, + 27422 - 11905: 0x99F4, + 27423 - 11905: 0x99F5, + 27424 - 11905: 0xC7B7, + 27425 - 11905: 0xB4CE, + 27426 - 11905: 0xBBB6, + 27427 - 11905: 0xD0C0, + 27428 - 11905: 0xECA3, + 27429 - 11905: 0x99F6, + 27430 - 11905: 0x99F7, + 27431 - 11905: 0xC5B7, + 27432 - 11905: 0x99F8, + 27433 - 11905: 0x99F9, + 27434 - 11905: 0x99FA, + 27435 - 11905: 0x99FB, + 27436 - 11905: 0x99FC, + 27437 - 11905: 0x99FD, + 27438 - 11905: 0x99FE, + 27439 - 11905: 0x9A40, + 27440 - 11905: 0x9A41, + 27441 - 11905: 0x9A42, + 27442 - 11905: 0xD3FB, + 27443 - 11905: 0x9A43, + 27444 - 11905: 0x9A44, + 27445 - 11905: 0x9A45, + 27446 - 11905: 0x9A46, + 27447 - 11905: 0xECA4, + 27448 - 11905: 0x9A47, + 27449 - 11905: 0xECA5, + 27450 - 11905: 0xC6DB, + 27451 - 11905: 0x9A48, + 27452 - 11905: 0x9A49, + 27453 - 11905: 0x9A4A, + 27454 - 11905: 0xBFEE, + 27455 - 11905: 0x9A4B, + 27456 - 11905: 0x9A4C, + 27457 - 11905: 0x9A4D, + 27458 - 11905: 0x9A4E, + 27459 - 11905: 0xECA6, + 27460 - 11905: 0x9A4F, + 27461 - 11905: 0x9A50, + 27462 - 11905: 0xECA7, + 27463 - 11905: 0xD0AA, + 27464 - 11905: 0x9A51, + 27465 - 11905: 0xC7B8, + 27466 - 11905: 0x9A52, + 27467 - 11905: 0x9A53, + 27468 - 11905: 0xB8E8, + 27469 - 11905: 0x9A54, + 27470 - 11905: 0x9A55, + 27471 - 11905: 0x9A56, + 27472 - 11905: 0x9A57, + 27473 - 11905: 0x9A58, + 27474 - 11905: 0x9A59, + 27475 - 11905: 0x9A5A, + 27476 - 11905: 0x9A5B, + 27477 - 11905: 0x9A5C, + 27478 - 11905: 0x9A5D, + 27479 - 11905: 0x9A5E, + 27480 - 11905: 0x9A5F, + 27481 - 11905: 0xECA8, + 27482 - 11905: 0x9A60, + 27483 - 11905: 0x9A61, + 27484 - 11905: 0x9A62, + 27485 - 11905: 0x9A63, + 27486 - 11905: 0x9A64, + 27487 - 11905: 0x9A65, + 27488 - 11905: 0x9A66, + 27489 - 11905: 0x9A67, + 27490 - 11905: 0xD6B9, + 27491 - 11905: 0xD5FD, + 27492 - 11905: 0xB4CB, + 27493 - 11905: 0xB2BD, + 27494 - 11905: 0xCEE4, + 27495 - 11905: 0xC6E7, + 27496 - 11905: 0x9A68, + 27497 - 11905: 0x9A69, + 27498 - 11905: 0xCDE1, + 27499 - 11905: 0x9A6A, + 27500 - 11905: 0x9A6B, + 27501 - 11905: 0x9A6C, + 27502 - 11905: 0x9A6D, + 27503 - 11905: 0x9A6E, + 27504 - 11905: 0x9A6F, + 27505 - 11905: 0x9A70, + 27506 - 11905: 0x9A71, + 27507 - 11905: 0x9A72, + 27508 - 11905: 0x9A73, + 27509 - 11905: 0x9A74, + 27510 - 11905: 0x9A75, + 27511 - 11905: 0x9A76, + 27512 - 11905: 0x9A77, + 27513 - 11905: 0xB4F5, + 27514 - 11905: 0x9A78, + 27515 - 11905: 0xCBC0, + 27516 - 11905: 0xBCDF, + 27517 - 11905: 0x9A79, + 27518 - 11905: 0x9A7A, + 27519 - 11905: 0x9A7B, + 27520 - 11905: 0x9A7C, + 27521 - 11905: 0xE9E2, + 27522 - 11905: 0xE9E3, + 27523 - 11905: 0xD1EA, + 27524 - 11905: 0xE9E5, + 27525 - 11905: 0x9A7D, + 27526 - 11905: 0xB4F9, + 27527 - 11905: 0xE9E4, + 27528 - 11905: 0x9A7E, + 27529 - 11905: 0xD1B3, + 27530 - 11905: 0xCAE2, + 27531 - 11905: 0xB2D0, + 27532 - 11905: 0x9A80, + 27533 - 11905: 0xE9E8, + 27534 - 11905: 0x9A81, + 27535 - 11905: 0x9A82, + 27536 - 11905: 0x9A83, + 27537 - 11905: 0x9A84, + 27538 - 11905: 0xE9E6, + 27539 - 11905: 0xE9E7, + 27540 - 11905: 0x9A85, + 27541 - 11905: 0x9A86, + 27542 - 11905: 0xD6B3, + 27543 - 11905: 0x9A87, + 27544 - 11905: 0x9A88, + 27545 - 11905: 0x9A89, + 27546 - 11905: 0xE9E9, + 27547 - 11905: 0xE9EA, + 27548 - 11905: 0x9A8A, + 27549 - 11905: 0x9A8B, + 27550 - 11905: 0x9A8C, + 27551 - 11905: 0x9A8D, + 27552 - 11905: 0x9A8E, + 27553 - 11905: 0xE9EB, + 27554 - 11905: 0x9A8F, + 27555 - 11905: 0x9A90, + 27556 - 11905: 0x9A91, + 27557 - 11905: 0x9A92, + 27558 - 11905: 0x9A93, + 27559 - 11905: 0x9A94, + 27560 - 11905: 0x9A95, + 27561 - 11905: 0x9A96, + 27562 - 11905: 0xE9EC, + 27563 - 11905: 0x9A97, + 27564 - 11905: 0x9A98, + 27565 - 11905: 0x9A99, + 27566 - 11905: 0x9A9A, + 27567 - 11905: 0x9A9B, + 27568 - 11905: 0x9A9C, + 27569 - 11905: 0x9A9D, + 27570 - 11905: 0x9A9E, + 27571 - 11905: 0xECAF, + 27572 - 11905: 0xC5B9, + 27573 - 11905: 0xB6CE, + 27574 - 11905: 0x9A9F, + 27575 - 11905: 0xD2F3, + 27576 - 11905: 0x9AA0, + 27577 - 11905: 0x9AA1, + 27578 - 11905: 0x9AA2, + 27579 - 11905: 0x9AA3, + 27580 - 11905: 0x9AA4, + 27581 - 11905: 0x9AA5, + 27582 - 11905: 0x9AA6, + 27583 - 11905: 0xB5EE, + 27584 - 11905: 0x9AA7, + 27585 - 11905: 0xBBD9, + 27586 - 11905: 0xECB1, + 27587 - 11905: 0x9AA8, + 27588 - 11905: 0x9AA9, + 27589 - 11905: 0xD2E3, + 27590 - 11905: 0x9AAA, + 27591 - 11905: 0x9AAB, + 27592 - 11905: 0x9AAC, + 27593 - 11905: 0x9AAD, + 27594 - 11905: 0x9AAE, + 27595 - 11905: 0xCEE3, + 27596 - 11905: 0x9AAF, + 27597 - 11905: 0xC4B8, + 27598 - 11905: 0x9AB0, + 27599 - 11905: 0xC3BF, + 27600 - 11905: 0x9AB1, + 27601 - 11905: 0x9AB2, + 27602 - 11905: 0xB6BE, + 27603 - 11905: 0xD8B9, + 27604 - 11905: 0xB1C8, + 27605 - 11905: 0xB1CF, + 27606 - 11905: 0xB1D1, + 27607 - 11905: 0xC5FE, + 27608 - 11905: 0x9AB3, + 27609 - 11905: 0xB1D0, + 27610 - 11905: 0x9AB4, + 27611 - 11905: 0xC3AB, + 27612 - 11905: 0x9AB5, + 27613 - 11905: 0x9AB6, + 27614 - 11905: 0x9AB7, + 27615 - 11905: 0x9AB8, + 27616 - 11905: 0x9AB9, + 27617 - 11905: 0xD5B1, + 27618 - 11905: 0x9ABA, + 27619 - 11905: 0x9ABB, + 27620 - 11905: 0x9ABC, + 27621 - 11905: 0x9ABD, + 27622 - 11905: 0x9ABE, + 27623 - 11905: 0x9ABF, + 27624 - 11905: 0x9AC0, + 27625 - 11905: 0x9AC1, + 27626 - 11905: 0xEBA4, + 27627 - 11905: 0xBAC1, + 27628 - 11905: 0x9AC2, + 27629 - 11905: 0x9AC3, + 27630 - 11905: 0x9AC4, + 27631 - 11905: 0xCCBA, + 27632 - 11905: 0x9AC5, + 27633 - 11905: 0x9AC6, + 27634 - 11905: 0x9AC7, + 27635 - 11905: 0xEBA5, + 27636 - 11905: 0x9AC8, + 27637 - 11905: 0xEBA7, + 27638 - 11905: 0x9AC9, + 27639 - 11905: 0x9ACA, + 27640 - 11905: 0x9ACB, + 27641 - 11905: 0xEBA8, + 27642 - 11905: 0x9ACC, + 27643 - 11905: 0x9ACD, + 27644 - 11905: 0x9ACE, + 27645 - 11905: 0xEBA6, + 27646 - 11905: 0x9ACF, + 27647 - 11905: 0x9AD0, + 27648 - 11905: 0x9AD1, + 27649 - 11905: 0x9AD2, + 27650 - 11905: 0x9AD3, + 27651 - 11905: 0x9AD4, + 27652 - 11905: 0x9AD5, + 27653 - 11905: 0xEBA9, + 27654 - 11905: 0xEBAB, + 27655 - 11905: 0xEBAA, + 27656 - 11905: 0x9AD6, + 27657 - 11905: 0x9AD7, + 27658 - 11905: 0x9AD8, + 27659 - 11905: 0x9AD9, + 27660 - 11905: 0x9ADA, + 27661 - 11905: 0xEBAC, + 27662 - 11905: 0x9ADB, + 27663 - 11905: 0xCACF, + 27664 - 11905: 0xD8B5, + 27665 - 11905: 0xC3F1, + 27666 - 11905: 0x9ADC, + 27667 - 11905: 0xC3A5, + 27668 - 11905: 0xC6F8, + 27669 - 11905: 0xEBAD, + 27670 - 11905: 0xC4CA, + 27671 - 11905: 0x9ADD, + 27672 - 11905: 0xEBAE, + 27673 - 11905: 0xEBAF, + 27674 - 11905: 0xEBB0, + 27675 - 11905: 0xB7D5, + 27676 - 11905: 0x9ADE, + 27677 - 11905: 0x9ADF, + 27678 - 11905: 0x9AE0, + 27679 - 11905: 0xB7FA, + 27680 - 11905: 0x9AE1, + 27681 - 11905: 0xEBB1, + 27682 - 11905: 0xC7E2, + 27683 - 11905: 0x9AE2, + 27684 - 11905: 0xEBB3, + 27685 - 11905: 0x9AE3, + 27686 - 11905: 0xBAA4, + 27687 - 11905: 0xD1F5, + 27688 - 11905: 0xB0B1, + 27689 - 11905: 0xEBB2, + 27690 - 11905: 0xEBB4, + 27691 - 11905: 0x9AE4, + 27692 - 11905: 0x9AE5, + 27693 - 11905: 0x9AE6, + 27694 - 11905: 0xB5AA, + 27695 - 11905: 0xC2C8, + 27696 - 11905: 0xC7E8, + 27697 - 11905: 0x9AE7, + 27698 - 11905: 0xEBB5, + 27699 - 11905: 0x9AE8, + 27700 - 11905: 0xCBAE, + 27701 - 11905: 0xE3DF, + 27702 - 11905: 0x9AE9, + 27703 - 11905: 0x9AEA, + 27704 - 11905: 0xD3C0, + 27705 - 11905: 0x9AEB, + 27706 - 11905: 0x9AEC, + 27707 - 11905: 0x9AED, + 27708 - 11905: 0x9AEE, + 27709 - 11905: 0xD9DB, + 27710 - 11905: 0x9AEF, + 27711 - 11905: 0x9AF0, + 27712 - 11905: 0xCDA1, + 27713 - 11905: 0xD6AD, + 27714 - 11905: 0xC7F3, + 27715 - 11905: 0x9AF1, + 27716 - 11905: 0x9AF2, + 27717 - 11905: 0x9AF3, + 27718 - 11905: 0xD9E0, + 27719 - 11905: 0xBBE3, + 27720 - 11905: 0x9AF4, + 27721 - 11905: 0xBABA, + 27722 - 11905: 0xE3E2, + 27723 - 11905: 0x9AF5, + 27724 - 11905: 0x9AF6, + 27725 - 11905: 0x9AF7, + 27726 - 11905: 0x9AF8, + 27727 - 11905: 0x9AF9, + 27728 - 11905: 0xCFAB, + 27729 - 11905: 0x9AFA, + 27730 - 11905: 0x9AFB, + 27731 - 11905: 0x9AFC, + 27732 - 11905: 0xE3E0, + 27733 - 11905: 0xC9C7, + 27734 - 11905: 0x9AFD, + 27735 - 11905: 0xBAB9, + 27736 - 11905: 0x9AFE, + 27737 - 11905: 0x9B40, + 27738 - 11905: 0x9B41, + 27739 - 11905: 0xD1B4, + 27740 - 11905: 0xE3E1, + 27741 - 11905: 0xC8EA, + 27742 - 11905: 0xB9AF, + 27743 - 11905: 0xBDAD, + 27744 - 11905: 0xB3D8, + 27745 - 11905: 0xCEDB, + 27746 - 11905: 0x9B42, + 27747 - 11905: 0x9B43, + 27748 - 11905: 0xCCC0, + 27749 - 11905: 0x9B44, + 27750 - 11905: 0x9B45, + 27751 - 11905: 0x9B46, + 27752 - 11905: 0xE3E8, + 27753 - 11905: 0xE3E9, + 27754 - 11905: 0xCDF4, + 27755 - 11905: 0x9B47, + 27756 - 11905: 0x9B48, + 27757 - 11905: 0x9B49, + 27758 - 11905: 0x9B4A, + 27759 - 11905: 0x9B4B, + 27760 - 11905: 0xCCAD, + 27761 - 11905: 0x9B4C, + 27762 - 11905: 0xBCB3, + 27763 - 11905: 0x9B4D, + 27764 - 11905: 0xE3EA, + 27765 - 11905: 0x9B4E, + 27766 - 11905: 0xE3EB, + 27767 - 11905: 0x9B4F, + 27768 - 11905: 0x9B50, + 27769 - 11905: 0xD0DA, + 27770 - 11905: 0x9B51, + 27771 - 11905: 0x9B52, + 27772 - 11905: 0x9B53, + 27773 - 11905: 0xC6FB, + 27774 - 11905: 0xB7DA, + 27775 - 11905: 0x9B54, + 27776 - 11905: 0x9B55, + 27777 - 11905: 0xC7DF, + 27778 - 11905: 0xD2CA, + 27779 - 11905: 0xCED6, + 27780 - 11905: 0x9B56, + 27781 - 11905: 0xE3E4, + 27782 - 11905: 0xE3EC, + 27783 - 11905: 0x9B57, + 27784 - 11905: 0xC9F2, + 27785 - 11905: 0xB3C1, + 27786 - 11905: 0x9B58, + 27787 - 11905: 0x9B59, + 27788 - 11905: 0xE3E7, + 27789 - 11905: 0x9B5A, + 27790 - 11905: 0x9B5B, + 27791 - 11905: 0xC6E3, + 27792 - 11905: 0xE3E5, + 27793 - 11905: 0x9B5C, + 27794 - 11905: 0x9B5D, + 27795 - 11905: 0xEDB3, + 27796 - 11905: 0xE3E6, + 27797 - 11905: 0x9B5E, + 27798 - 11905: 0x9B5F, + 27799 - 11905: 0x9B60, + 27800 - 11905: 0x9B61, + 27801 - 11905: 0xC9B3, + 27802 - 11905: 0x9B62, + 27803 - 11905: 0xC5E6, + 27804 - 11905: 0x9B63, + 27805 - 11905: 0x9B64, + 27806 - 11905: 0x9B65, + 27807 - 11905: 0xB9B5, + 27808 - 11905: 0x9B66, + 27809 - 11905: 0xC3BB, + 27810 - 11905: 0x9B67, + 27811 - 11905: 0xE3E3, + 27812 - 11905: 0xC5BD, + 27813 - 11905: 0xC1A4, + 27814 - 11905: 0xC2D9, + 27815 - 11905: 0xB2D7, + 27816 - 11905: 0x9B68, + 27817 - 11905: 0xE3ED, + 27818 - 11905: 0xBBA6, + 27819 - 11905: 0xC4AD, + 27820 - 11905: 0x9B69, + 27821 - 11905: 0xE3F0, + 27822 - 11905: 0xBEDA, + 27823 - 11905: 0x9B6A, + 27824 - 11905: 0x9B6B, + 27825 - 11905: 0xE3FB, + 27826 - 11905: 0xE3F5, + 27827 - 11905: 0xBAD3, + 27828 - 11905: 0x9B6C, + 27829 - 11905: 0x9B6D, + 27830 - 11905: 0x9B6E, + 27831 - 11905: 0x9B6F, + 27832 - 11905: 0xB7D0, + 27833 - 11905: 0xD3CD, + 27834 - 11905: 0x9B70, + 27835 - 11905: 0xD6CE, + 27836 - 11905: 0xD5D3, + 27837 - 11905: 0xB9C1, + 27838 - 11905: 0xD5B4, + 27839 - 11905: 0xD1D8, + 27840 - 11905: 0x9B71, + 27841 - 11905: 0x9B72, + 27842 - 11905: 0x9B73, + 27843 - 11905: 0x9B74, + 27844 - 11905: 0xD0B9, + 27845 - 11905: 0xC7F6, + 27846 - 11905: 0x9B75, + 27847 - 11905: 0x9B76, + 27848 - 11905: 0x9B77, + 27849 - 11905: 0xC8AA, + 27850 - 11905: 0xB2B4, + 27851 - 11905: 0x9B78, + 27852 - 11905: 0xC3DA, + 27853 - 11905: 0x9B79, + 27854 - 11905: 0x9B7A, + 27855 - 11905: 0x9B7B, + 27856 - 11905: 0xE3EE, + 27857 - 11905: 0x9B7C, + 27858 - 11905: 0x9B7D, + 27859 - 11905: 0xE3FC, + 27860 - 11905: 0xE3EF, + 27861 - 11905: 0xB7A8, + 27862 - 11905: 0xE3F7, + 27863 - 11905: 0xE3F4, + 27864 - 11905: 0x9B7E, + 27865 - 11905: 0x9B80, + 27866 - 11905: 0x9B81, + 27867 - 11905: 0xB7BA, + 27868 - 11905: 0x9B82, + 27869 - 11905: 0x9B83, + 27870 - 11905: 0xC5A2, + 27871 - 11905: 0x9B84, + 27872 - 11905: 0xE3F6, + 27873 - 11905: 0xC5DD, + 27874 - 11905: 0xB2A8, + 27875 - 11905: 0xC6FC, + 27876 - 11905: 0x9B85, + 27877 - 11905: 0xC4E0, + 27878 - 11905: 0x9B86, + 27879 - 11905: 0x9B87, + 27880 - 11905: 0xD7A2, + 27881 - 11905: 0x9B88, + 27882 - 11905: 0xC0E1, + 27883 - 11905: 0xE3F9, + 27884 - 11905: 0x9B89, + 27885 - 11905: 0x9B8A, + 27886 - 11905: 0xE3FA, + 27887 - 11905: 0xE3FD, + 27888 - 11905: 0xCCA9, + 27889 - 11905: 0xE3F3, + 27890 - 11905: 0x9B8B, + 27891 - 11905: 0xD3BE, + 27892 - 11905: 0x9B8C, + 27893 - 11905: 0xB1C3, + 27894 - 11905: 0xEDB4, + 27895 - 11905: 0xE3F1, + 27896 - 11905: 0xE3F2, + 27897 - 11905: 0x9B8D, + 27898 - 11905: 0xE3F8, + 27899 - 11905: 0xD0BA, + 27900 - 11905: 0xC6C3, + 27901 - 11905: 0xD4F3, + 27902 - 11905: 0xE3FE, + 27903 - 11905: 0x9B8E, + 27904 - 11905: 0x9B8F, + 27905 - 11905: 0xBDE0, + 27906 - 11905: 0x9B90, + 27907 - 11905: 0x9B91, + 27908 - 11905: 0xE4A7, + 27909 - 11905: 0x9B92, + 27910 - 11905: 0x9B93, + 27911 - 11905: 0xE4A6, + 27912 - 11905: 0x9B94, + 27913 - 11905: 0x9B95, + 27914 - 11905: 0x9B96, + 27915 - 11905: 0xD1F3, + 27916 - 11905: 0xE4A3, + 27917 - 11905: 0x9B97, + 27918 - 11905: 0xE4A9, + 27919 - 11905: 0x9B98, + 27920 - 11905: 0x9B99, + 27921 - 11905: 0x9B9A, + 27922 - 11905: 0xC8F7, + 27923 - 11905: 0x9B9B, + 27924 - 11905: 0x9B9C, + 27925 - 11905: 0x9B9D, + 27926 - 11905: 0x9B9E, + 27927 - 11905: 0xCFB4, + 27928 - 11905: 0x9B9F, + 27929 - 11905: 0xE4A8, + 27930 - 11905: 0xE4AE, + 27931 - 11905: 0xC2E5, + 27932 - 11905: 0x9BA0, + 27933 - 11905: 0x9BA1, + 27934 - 11905: 0xB6B4, + 27935 - 11905: 0x9BA2, + 27936 - 11905: 0x9BA3, + 27937 - 11905: 0x9BA4, + 27938 - 11905: 0x9BA5, + 27939 - 11905: 0x9BA6, + 27940 - 11905: 0x9BA7, + 27941 - 11905: 0xBDF2, + 27942 - 11905: 0x9BA8, + 27943 - 11905: 0xE4A2, + 27944 - 11905: 0x9BA9, + 27945 - 11905: 0x9BAA, + 27946 - 11905: 0xBAE9, + 27947 - 11905: 0xE4AA, + 27948 - 11905: 0x9BAB, + 27949 - 11905: 0x9BAC, + 27950 - 11905: 0xE4AC, + 27951 - 11905: 0x9BAD, + 27952 - 11905: 0x9BAE, + 27953 - 11905: 0xB6FD, + 27954 - 11905: 0xD6DE, + 27955 - 11905: 0xE4B2, + 27956 - 11905: 0x9BAF, + 27957 - 11905: 0xE4AD, + 27958 - 11905: 0x9BB0, + 27959 - 11905: 0x9BB1, + 27960 - 11905: 0x9BB2, + 27961 - 11905: 0xE4A1, + 27962 - 11905: 0x9BB3, + 27963 - 11905: 0xBBEE, + 27964 - 11905: 0xCDDD, + 27965 - 11905: 0xC7A2, + 27966 - 11905: 0xC5C9, + 27967 - 11905: 0x9BB4, + 27968 - 11905: 0x9BB5, + 27969 - 11905: 0xC1F7, + 27970 - 11905: 0x9BB6, + 27971 - 11905: 0xE4A4, + 27972 - 11905: 0x9BB7, + 27973 - 11905: 0xC7B3, + 27974 - 11905: 0xBDAC, + 27975 - 11905: 0xBDBD, + 27976 - 11905: 0xE4A5, + 27977 - 11905: 0x9BB8, + 27978 - 11905: 0xD7C7, + 27979 - 11905: 0xB2E2, + 27980 - 11905: 0x9BB9, + 27981 - 11905: 0xE4AB, + 27982 - 11905: 0xBCC3, + 27983 - 11905: 0xE4AF, + 27984 - 11905: 0x9BBA, + 27985 - 11905: 0xBBEB, + 27986 - 11905: 0xE4B0, + 27987 - 11905: 0xC5A8, + 27988 - 11905: 0xE4B1, + 27989 - 11905: 0x9BBB, + 27990 - 11905: 0x9BBC, + 27991 - 11905: 0x9BBD, + 27992 - 11905: 0x9BBE, + 27993 - 11905: 0xD5E3, + 27994 - 11905: 0xBFA3, + 27995 - 11905: 0x9BBF, + 27996 - 11905: 0xE4BA, + 27997 - 11905: 0x9BC0, + 27998 - 11905: 0xE4B7, + 27999 - 11905: 0x9BC1, + 28000 - 11905: 0xE4BB, + 28001 - 11905: 0x9BC2, + 28002 - 11905: 0x9BC3, + 28003 - 11905: 0xE4BD, + 28004 - 11905: 0x9BC4, + 28005 - 11905: 0x9BC5, + 28006 - 11905: 0xC6D6, + 28007 - 11905: 0x9BC6, + 28008 - 11905: 0x9BC7, + 28009 - 11905: 0xBAC6, + 28010 - 11905: 0xC0CB, + 28011 - 11905: 0x9BC8, + 28012 - 11905: 0x9BC9, + 28013 - 11905: 0x9BCA, + 28014 - 11905: 0xB8A1, + 28015 - 11905: 0xE4B4, + 28016 - 11905: 0x9BCB, + 28017 - 11905: 0x9BCC, + 28018 - 11905: 0x9BCD, + 28019 - 11905: 0x9BCE, + 28020 - 11905: 0xD4A1, + 28021 - 11905: 0x9BCF, + 28022 - 11905: 0x9BD0, + 28023 - 11905: 0xBAA3, + 28024 - 11905: 0xBDFE, + 28025 - 11905: 0x9BD1, + 28026 - 11905: 0x9BD2, + 28027 - 11905: 0x9BD3, + 28028 - 11905: 0xE4BC, + 28029 - 11905: 0x9BD4, + 28030 - 11905: 0x9BD5, + 28031 - 11905: 0x9BD6, + 28032 - 11905: 0x9BD7, + 28033 - 11905: 0x9BD8, + 28034 - 11905: 0xCDBF, + 28035 - 11905: 0x9BD9, + 28036 - 11905: 0x9BDA, + 28037 - 11905: 0xC4F9, + 28038 - 11905: 0x9BDB, + 28039 - 11905: 0x9BDC, + 28040 - 11905: 0xCFFB, + 28041 - 11905: 0xC9E6, + 28042 - 11905: 0x9BDD, + 28043 - 11905: 0x9BDE, + 28044 - 11905: 0xD3BF, + 28045 - 11905: 0x9BDF, + 28046 - 11905: 0xCFD1, + 28047 - 11905: 0x9BE0, + 28048 - 11905: 0x9BE1, + 28049 - 11905: 0xE4B3, + 28050 - 11905: 0x9BE2, + 28051 - 11905: 0xE4B8, + 28052 - 11905: 0xE4B9, + 28053 - 11905: 0xCCE9, + 28054 - 11905: 0x9BE3, + 28055 - 11905: 0x9BE4, + 28056 - 11905: 0x9BE5, + 28057 - 11905: 0x9BE6, + 28058 - 11905: 0x9BE7, + 28059 - 11905: 0xCCCE, + 28060 - 11905: 0x9BE8, + 28061 - 11905: 0xC0D4, + 28062 - 11905: 0xE4B5, + 28063 - 11905: 0xC1B0, + 28064 - 11905: 0xE4B6, + 28065 - 11905: 0xCED0, + 28066 - 11905: 0x9BE9, + 28067 - 11905: 0xBBC1, + 28068 - 11905: 0xB5D3, + 28069 - 11905: 0x9BEA, + 28070 - 11905: 0xC8F3, + 28071 - 11905: 0xBDA7, + 28072 - 11905: 0xD5C7, + 28073 - 11905: 0xC9AC, + 28074 - 11905: 0xB8A2, + 28075 - 11905: 0xE4CA, + 28076 - 11905: 0x9BEB, + 28077 - 11905: 0x9BEC, + 28078 - 11905: 0xE4CC, + 28079 - 11905: 0xD1C4, + 28080 - 11905: 0x9BED, + 28081 - 11905: 0x9BEE, + 28082 - 11905: 0xD2BA, + 28083 - 11905: 0x9BEF, + 28084 - 11905: 0x9BF0, + 28085 - 11905: 0xBAAD, + 28086 - 11905: 0x9BF1, + 28087 - 11905: 0x9BF2, + 28088 - 11905: 0xBAD4, + 28089 - 11905: 0x9BF3, + 28090 - 11905: 0x9BF4, + 28091 - 11905: 0x9BF5, + 28092 - 11905: 0x9BF6, + 28093 - 11905: 0x9BF7, + 28094 - 11905: 0x9BF8, + 28095 - 11905: 0xE4C3, + 28096 - 11905: 0xB5ED, + 28097 - 11905: 0x9BF9, + 28098 - 11905: 0x9BFA, + 28099 - 11905: 0x9BFB, + 28100 - 11905: 0xD7CD, + 28101 - 11905: 0xE4C0, + 28102 - 11905: 0xCFFD, + 28103 - 11905: 0xE4BF, + 28104 - 11905: 0x9BFC, + 28105 - 11905: 0x9BFD, + 28106 - 11905: 0x9BFE, + 28107 - 11905: 0xC1DC, + 28108 - 11905: 0xCCCA, + 28109 - 11905: 0x9C40, + 28110 - 11905: 0x9C41, + 28111 - 11905: 0x9C42, + 28112 - 11905: 0x9C43, + 28113 - 11905: 0xCAE7, + 28114 - 11905: 0x9C44, + 28115 - 11905: 0x9C45, + 28116 - 11905: 0x9C46, + 28117 - 11905: 0x9C47, + 28118 - 11905: 0xC4D7, + 28119 - 11905: 0x9C48, + 28120 - 11905: 0xCCD4, + 28121 - 11905: 0xE4C8, + 28122 - 11905: 0x9C49, + 28123 - 11905: 0x9C4A, + 28124 - 11905: 0x9C4B, + 28125 - 11905: 0xE4C7, + 28126 - 11905: 0xE4C1, + 28127 - 11905: 0x9C4C, + 28128 - 11905: 0xE4C4, + 28129 - 11905: 0xB5AD, + 28130 - 11905: 0x9C4D, + 28131 - 11905: 0x9C4E, + 28132 - 11905: 0xD3D9, + 28133 - 11905: 0x9C4F, + 28134 - 11905: 0xE4C6, + 28135 - 11905: 0x9C50, + 28136 - 11905: 0x9C51, + 28137 - 11905: 0x9C52, + 28138 - 11905: 0x9C53, + 28139 - 11905: 0xD2F9, + 28140 - 11905: 0xB4E3, + 28141 - 11905: 0x9C54, + 28142 - 11905: 0xBBB4, + 28143 - 11905: 0x9C55, + 28144 - 11905: 0x9C56, + 28145 - 11905: 0xC9EE, + 28146 - 11905: 0x9C57, + 28147 - 11905: 0xB4BE, + 28148 - 11905: 0x9C58, + 28149 - 11905: 0x9C59, + 28150 - 11905: 0x9C5A, + 28151 - 11905: 0xBBEC, + 28152 - 11905: 0x9C5B, + 28153 - 11905: 0xD1CD, + 28154 - 11905: 0x9C5C, + 28155 - 11905: 0xCCED, + 28156 - 11905: 0xEDB5, + 28157 - 11905: 0x9C5D, + 28158 - 11905: 0x9C5E, + 28159 - 11905: 0x9C5F, + 28160 - 11905: 0x9C60, + 28161 - 11905: 0x9C61, + 28162 - 11905: 0x9C62, + 28163 - 11905: 0x9C63, + 28164 - 11905: 0x9C64, + 28165 - 11905: 0xC7E5, + 28166 - 11905: 0x9C65, + 28167 - 11905: 0x9C66, + 28168 - 11905: 0x9C67, + 28169 - 11905: 0x9C68, + 28170 - 11905: 0xD4A8, + 28171 - 11905: 0x9C69, + 28172 - 11905: 0xE4CB, + 28173 - 11905: 0xD7D5, + 28174 - 11905: 0xE4C2, + 28175 - 11905: 0x9C6A, + 28176 - 11905: 0xBDA5, + 28177 - 11905: 0xE4C5, + 28178 - 11905: 0x9C6B, + 28179 - 11905: 0x9C6C, + 28180 - 11905: 0xD3E6, + 28181 - 11905: 0x9C6D, + 28182 - 11905: 0xE4C9, + 28183 - 11905: 0xC9F8, + 28184 - 11905: 0x9C6E, + 28185 - 11905: 0x9C6F, + 28186 - 11905: 0xE4BE, + 28187 - 11905: 0x9C70, + 28188 - 11905: 0x9C71, + 28189 - 11905: 0xD3E5, + 28190 - 11905: 0x9C72, + 28191 - 11905: 0x9C73, + 28192 - 11905: 0xC7FE, + 28193 - 11905: 0xB6C9, + 28194 - 11905: 0x9C74, + 28195 - 11905: 0xD4FC, + 28196 - 11905: 0xB2B3, + 28197 - 11905: 0xE4D7, + 28198 - 11905: 0x9C75, + 28199 - 11905: 0x9C76, + 28200 - 11905: 0x9C77, + 28201 - 11905: 0xCEC2, + 28202 - 11905: 0x9C78, + 28203 - 11905: 0xE4CD, + 28204 - 11905: 0x9C79, + 28205 - 11905: 0xCEBC, + 28206 - 11905: 0x9C7A, + 28207 - 11905: 0xB8DB, + 28208 - 11905: 0x9C7B, + 28209 - 11905: 0x9C7C, + 28210 - 11905: 0xE4D6, + 28211 - 11905: 0x9C7D, + 28212 - 11905: 0xBFCA, + 28213 - 11905: 0x9C7E, + 28214 - 11905: 0x9C80, + 28215 - 11905: 0x9C81, + 28216 - 11905: 0xD3CE, + 28217 - 11905: 0x9C82, + 28218 - 11905: 0xC3EC, + 28219 - 11905: 0x9C83, + 28220 - 11905: 0x9C84, + 28221 - 11905: 0x9C85, + 28222 - 11905: 0x9C86, + 28223 - 11905: 0x9C87, + 28224 - 11905: 0x9C88, + 28225 - 11905: 0x9C89, + 28226 - 11905: 0x9C8A, + 28227 - 11905: 0xC5C8, + 28228 - 11905: 0xE4D8, + 28229 - 11905: 0x9C8B, + 28230 - 11905: 0x9C8C, + 28231 - 11905: 0x9C8D, + 28232 - 11905: 0x9C8E, + 28233 - 11905: 0x9C8F, + 28234 - 11905: 0x9C90, + 28235 - 11905: 0x9C91, + 28236 - 11905: 0x9C92, + 28237 - 11905: 0xCDC4, + 28238 - 11905: 0xE4CF, + 28239 - 11905: 0x9C93, + 28240 - 11905: 0x9C94, + 28241 - 11905: 0x9C95, + 28242 - 11905: 0x9C96, + 28243 - 11905: 0xE4D4, + 28244 - 11905: 0xE4D5, + 28245 - 11905: 0x9C97, + 28246 - 11905: 0xBAFE, + 28247 - 11905: 0x9C98, + 28248 - 11905: 0xCFE6, + 28249 - 11905: 0x9C99, + 28250 - 11905: 0x9C9A, + 28251 - 11905: 0xD5BF, + 28252 - 11905: 0x9C9B, + 28253 - 11905: 0x9C9C, + 28254 - 11905: 0x9C9D, + 28255 - 11905: 0xE4D2, + 28256 - 11905: 0x9C9E, + 28257 - 11905: 0x9C9F, + 28258 - 11905: 0x9CA0, + 28259 - 11905: 0x9CA1, + 28260 - 11905: 0x9CA2, + 28261 - 11905: 0x9CA3, + 28262 - 11905: 0x9CA4, + 28263 - 11905: 0x9CA5, + 28264 - 11905: 0x9CA6, + 28265 - 11905: 0x9CA7, + 28266 - 11905: 0x9CA8, + 28267 - 11905: 0xE4D0, + 28268 - 11905: 0x9CA9, + 28269 - 11905: 0x9CAA, + 28270 - 11905: 0xE4CE, + 28271 - 11905: 0x9CAB, + 28272 - 11905: 0x9CAC, + 28273 - 11905: 0x9CAD, + 28274 - 11905: 0x9CAE, + 28275 - 11905: 0x9CAF, + 28276 - 11905: 0x9CB0, + 28277 - 11905: 0x9CB1, + 28278 - 11905: 0x9CB2, + 28279 - 11905: 0x9CB3, + 28280 - 11905: 0x9CB4, + 28281 - 11905: 0x9CB5, + 28282 - 11905: 0x9CB6, + 28283 - 11905: 0x9CB7, + 28284 - 11905: 0x9CB8, + 28285 - 11905: 0x9CB9, + 28286 - 11905: 0xCDE5, + 28287 - 11905: 0xCAAA, + 28288 - 11905: 0x9CBA, + 28289 - 11905: 0x9CBB, + 28290 - 11905: 0x9CBC, + 28291 - 11905: 0xC0A3, + 28292 - 11905: 0x9CBD, + 28293 - 11905: 0xBDA6, + 28294 - 11905: 0xE4D3, + 28295 - 11905: 0x9CBE, + 28296 - 11905: 0x9CBF, + 28297 - 11905: 0xB8C8, + 28298 - 11905: 0x9CC0, + 28299 - 11905: 0x9CC1, + 28300 - 11905: 0x9CC2, + 28301 - 11905: 0x9CC3, + 28302 - 11905: 0x9CC4, + 28303 - 11905: 0xE4E7, + 28304 - 11905: 0xD4B4, + 28305 - 11905: 0x9CC5, + 28306 - 11905: 0x9CC6, + 28307 - 11905: 0x9CC7, + 28308 - 11905: 0x9CC8, + 28309 - 11905: 0x9CC9, + 28310 - 11905: 0x9CCA, + 28311 - 11905: 0x9CCB, + 28312 - 11905: 0xE4DB, + 28313 - 11905: 0x9CCC, + 28314 - 11905: 0x9CCD, + 28315 - 11905: 0x9CCE, + 28316 - 11905: 0xC1EF, + 28317 - 11905: 0x9CCF, + 28318 - 11905: 0x9CD0, + 28319 - 11905: 0xE4E9, + 28320 - 11905: 0x9CD1, + 28321 - 11905: 0x9CD2, + 28322 - 11905: 0xD2E7, + 28323 - 11905: 0x9CD3, + 28324 - 11905: 0x9CD4, + 28325 - 11905: 0xE4DF, + 28326 - 11905: 0x9CD5, + 28327 - 11905: 0xE4E0, + 28328 - 11905: 0x9CD6, + 28329 - 11905: 0x9CD7, + 28330 - 11905: 0xCFAA, + 28331 - 11905: 0x9CD8, + 28332 - 11905: 0x9CD9, + 28333 - 11905: 0x9CDA, + 28334 - 11905: 0x9CDB, + 28335 - 11905: 0xCBDD, + 28336 - 11905: 0x9CDC, + 28337 - 11905: 0xE4DA, + 28338 - 11905: 0xE4D1, + 28339 - 11905: 0x9CDD, + 28340 - 11905: 0xE4E5, + 28341 - 11905: 0x9CDE, + 28342 - 11905: 0xC8DC, + 28343 - 11905: 0xE4E3, + 28344 - 11905: 0x9CDF, + 28345 - 11905: 0x9CE0, + 28346 - 11905: 0xC4E7, + 28347 - 11905: 0xE4E2, + 28348 - 11905: 0x9CE1, + 28349 - 11905: 0xE4E1, + 28350 - 11905: 0x9CE2, + 28351 - 11905: 0x9CE3, + 28352 - 11905: 0x9CE4, + 28353 - 11905: 0xB3FC, + 28354 - 11905: 0xE4E8, + 28355 - 11905: 0x9CE5, + 28356 - 11905: 0x9CE6, + 28357 - 11905: 0x9CE7, + 28358 - 11905: 0x9CE8, + 28359 - 11905: 0xB5E1, + 28360 - 11905: 0x9CE9, + 28361 - 11905: 0x9CEA, + 28362 - 11905: 0x9CEB, + 28363 - 11905: 0xD7CC, + 28364 - 11905: 0x9CEC, + 28365 - 11905: 0x9CED, + 28366 - 11905: 0x9CEE, + 28367 - 11905: 0xE4E6, + 28368 - 11905: 0x9CEF, + 28369 - 11905: 0xBBAC, + 28370 - 11905: 0x9CF0, + 28371 - 11905: 0xD7D2, + 28372 - 11905: 0xCCCF, + 28373 - 11905: 0xEBF8, + 28374 - 11905: 0x9CF1, + 28375 - 11905: 0xE4E4, + 28376 - 11905: 0x9CF2, + 28377 - 11905: 0x9CF3, + 28378 - 11905: 0xB9F6, + 28379 - 11905: 0x9CF4, + 28380 - 11905: 0x9CF5, + 28381 - 11905: 0x9CF6, + 28382 - 11905: 0xD6CD, + 28383 - 11905: 0xE4D9, + 28384 - 11905: 0xE4DC, + 28385 - 11905: 0xC2FA, + 28386 - 11905: 0xE4DE, + 28387 - 11905: 0x9CF7, + 28388 - 11905: 0xC2CB, + 28389 - 11905: 0xC0C4, + 28390 - 11905: 0xC2D0, + 28391 - 11905: 0x9CF8, + 28392 - 11905: 0xB1F5, + 28393 - 11905: 0xCCB2, + 28394 - 11905: 0x9CF9, + 28395 - 11905: 0x9CFA, + 28396 - 11905: 0x9CFB, + 28397 - 11905: 0x9CFC, + 28398 - 11905: 0x9CFD, + 28399 - 11905: 0x9CFE, + 28400 - 11905: 0x9D40, + 28401 - 11905: 0x9D41, + 28402 - 11905: 0x9D42, + 28403 - 11905: 0x9D43, + 28404 - 11905: 0xB5CE, + 28405 - 11905: 0x9D44, + 28406 - 11905: 0x9D45, + 28407 - 11905: 0x9D46, + 28408 - 11905: 0x9D47, + 28409 - 11905: 0xE4EF, + 28410 - 11905: 0x9D48, + 28411 - 11905: 0x9D49, + 28412 - 11905: 0x9D4A, + 28413 - 11905: 0x9D4B, + 28414 - 11905: 0x9D4C, + 28415 - 11905: 0x9D4D, + 28416 - 11905: 0x9D4E, + 28417 - 11905: 0x9D4F, + 28418 - 11905: 0xC6AF, + 28419 - 11905: 0x9D50, + 28420 - 11905: 0x9D51, + 28421 - 11905: 0x9D52, + 28422 - 11905: 0xC6E1, + 28423 - 11905: 0x9D53, + 28424 - 11905: 0x9D54, + 28425 - 11905: 0xE4F5, + 28426 - 11905: 0x9D55, + 28427 - 11905: 0x9D56, + 28428 - 11905: 0x9D57, + 28429 - 11905: 0x9D58, + 28430 - 11905: 0x9D59, + 28431 - 11905: 0xC2A9, + 28432 - 11905: 0x9D5A, + 28433 - 11905: 0x9D5B, + 28434 - 11905: 0x9D5C, + 28435 - 11905: 0xC0EC, + 28436 - 11905: 0xD1DD, + 28437 - 11905: 0xE4EE, + 28438 - 11905: 0x9D5D, + 28439 - 11905: 0x9D5E, + 28440 - 11905: 0x9D5F, + 28441 - 11905: 0x9D60, + 28442 - 11905: 0x9D61, + 28443 - 11905: 0x9D62, + 28444 - 11905: 0x9D63, + 28445 - 11905: 0x9D64, + 28446 - 11905: 0x9D65, + 28447 - 11905: 0x9D66, + 28448 - 11905: 0xC4AE, + 28449 - 11905: 0x9D67, + 28450 - 11905: 0x9D68, + 28451 - 11905: 0x9D69, + 28452 - 11905: 0xE4ED, + 28453 - 11905: 0x9D6A, + 28454 - 11905: 0x9D6B, + 28455 - 11905: 0x9D6C, + 28456 - 11905: 0x9D6D, + 28457 - 11905: 0xE4F6, + 28458 - 11905: 0xE4F4, + 28459 - 11905: 0xC2FE, + 28460 - 11905: 0x9D6E, + 28461 - 11905: 0xE4DD, + 28462 - 11905: 0x9D6F, + 28463 - 11905: 0xE4F0, + 28464 - 11905: 0x9D70, + 28465 - 11905: 0xCAFE, + 28466 - 11905: 0x9D71, + 28467 - 11905: 0xD5C4, + 28468 - 11905: 0x9D72, + 28469 - 11905: 0x9D73, + 28470 - 11905: 0xE4F1, + 28471 - 11905: 0x9D74, + 28472 - 11905: 0x9D75, + 28473 - 11905: 0x9D76, + 28474 - 11905: 0x9D77, + 28475 - 11905: 0x9D78, + 28476 - 11905: 0x9D79, + 28477 - 11905: 0x9D7A, + 28478 - 11905: 0xD1FA, + 28479 - 11905: 0x9D7B, + 28480 - 11905: 0x9D7C, + 28481 - 11905: 0x9D7D, + 28482 - 11905: 0x9D7E, + 28483 - 11905: 0x9D80, + 28484 - 11905: 0x9D81, + 28485 - 11905: 0x9D82, + 28486 - 11905: 0xE4EB, + 28487 - 11905: 0xE4EC, + 28488 - 11905: 0x9D83, + 28489 - 11905: 0x9D84, + 28490 - 11905: 0x9D85, + 28491 - 11905: 0xE4F2, + 28492 - 11905: 0x9D86, + 28493 - 11905: 0xCEAB, + 28494 - 11905: 0x9D87, + 28495 - 11905: 0x9D88, + 28496 - 11905: 0x9D89, + 28497 - 11905: 0x9D8A, + 28498 - 11905: 0x9D8B, + 28499 - 11905: 0x9D8C, + 28500 - 11905: 0x9D8D, + 28501 - 11905: 0x9D8E, + 28502 - 11905: 0x9D8F, + 28503 - 11905: 0x9D90, + 28504 - 11905: 0xC5CB, + 28505 - 11905: 0x9D91, + 28506 - 11905: 0x9D92, + 28507 - 11905: 0x9D93, + 28508 - 11905: 0xC7B1, + 28509 - 11905: 0x9D94, + 28510 - 11905: 0xC2BA, + 28511 - 11905: 0x9D95, + 28512 - 11905: 0x9D96, + 28513 - 11905: 0x9D97, + 28514 - 11905: 0xE4EA, + 28515 - 11905: 0x9D98, + 28516 - 11905: 0x9D99, + 28517 - 11905: 0x9D9A, + 28518 - 11905: 0xC1CA, + 28519 - 11905: 0x9D9B, + 28520 - 11905: 0x9D9C, + 28521 - 11905: 0x9D9D, + 28522 - 11905: 0x9D9E, + 28523 - 11905: 0x9D9F, + 28524 - 11905: 0x9DA0, + 28525 - 11905: 0xCCB6, + 28526 - 11905: 0xB3B1, + 28527 - 11905: 0x9DA1, + 28528 - 11905: 0x9DA2, + 28529 - 11905: 0x9DA3, + 28530 - 11905: 0xE4FB, + 28531 - 11905: 0x9DA4, + 28532 - 11905: 0xE4F3, + 28533 - 11905: 0x9DA5, + 28534 - 11905: 0x9DA6, + 28535 - 11905: 0x9DA7, + 28536 - 11905: 0xE4FA, + 28537 - 11905: 0x9DA8, + 28538 - 11905: 0xE4FD, + 28539 - 11905: 0x9DA9, + 28540 - 11905: 0xE4FC, + 28541 - 11905: 0x9DAA, + 28542 - 11905: 0x9DAB, + 28543 - 11905: 0x9DAC, + 28544 - 11905: 0x9DAD, + 28545 - 11905: 0x9DAE, + 28546 - 11905: 0x9DAF, + 28547 - 11905: 0x9DB0, + 28548 - 11905: 0xB3CE, + 28549 - 11905: 0x9DB1, + 28550 - 11905: 0x9DB2, + 28551 - 11905: 0x9DB3, + 28552 - 11905: 0xB3BA, + 28553 - 11905: 0xE4F7, + 28554 - 11905: 0x9DB4, + 28555 - 11905: 0x9DB5, + 28556 - 11905: 0xE4F9, + 28557 - 11905: 0xE4F8, + 28558 - 11905: 0xC5EC, + 28559 - 11905: 0x9DB6, + 28560 - 11905: 0x9DB7, + 28561 - 11905: 0x9DB8, + 28562 - 11905: 0x9DB9, + 28563 - 11905: 0x9DBA, + 28564 - 11905: 0x9DBB, + 28565 - 11905: 0x9DBC, + 28566 - 11905: 0x9DBD, + 28567 - 11905: 0x9DBE, + 28568 - 11905: 0x9DBF, + 28569 - 11905: 0x9DC0, + 28570 - 11905: 0x9DC1, + 28571 - 11905: 0x9DC2, + 28572 - 11905: 0xC0BD, + 28573 - 11905: 0x9DC3, + 28574 - 11905: 0x9DC4, + 28575 - 11905: 0x9DC5, + 28576 - 11905: 0x9DC6, + 28577 - 11905: 0xD4E8, + 28578 - 11905: 0x9DC7, + 28579 - 11905: 0x9DC8, + 28580 - 11905: 0x9DC9, + 28581 - 11905: 0x9DCA, + 28582 - 11905: 0x9DCB, + 28583 - 11905: 0xE5A2, + 28584 - 11905: 0x9DCC, + 28585 - 11905: 0x9DCD, + 28586 - 11905: 0x9DCE, + 28587 - 11905: 0x9DCF, + 28588 - 11905: 0x9DD0, + 28589 - 11905: 0x9DD1, + 28590 - 11905: 0x9DD2, + 28591 - 11905: 0x9DD3, + 28592 - 11905: 0x9DD4, + 28593 - 11905: 0x9DD5, + 28594 - 11905: 0x9DD6, + 28595 - 11905: 0xB0C4, + 28596 - 11905: 0x9DD7, + 28597 - 11905: 0x9DD8, + 28598 - 11905: 0xE5A4, + 28599 - 11905: 0x9DD9, + 28600 - 11905: 0x9DDA, + 28601 - 11905: 0xE5A3, + 28602 - 11905: 0x9DDB, + 28603 - 11905: 0x9DDC, + 28604 - 11905: 0x9DDD, + 28605 - 11905: 0x9DDE, + 28606 - 11905: 0x9DDF, + 28607 - 11905: 0x9DE0, + 28608 - 11905: 0xBCA4, + 28609 - 11905: 0x9DE1, + 28610 - 11905: 0xE5A5, + 28611 - 11905: 0x9DE2, + 28612 - 11905: 0x9DE3, + 28613 - 11905: 0x9DE4, + 28614 - 11905: 0x9DE5, + 28615 - 11905: 0x9DE6, + 28616 - 11905: 0x9DE7, + 28617 - 11905: 0xE5A1, + 28618 - 11905: 0x9DE8, + 28619 - 11905: 0x9DE9, + 28620 - 11905: 0x9DEA, + 28621 - 11905: 0x9DEB, + 28622 - 11905: 0x9DEC, + 28623 - 11905: 0x9DED, + 28624 - 11905: 0x9DEE, + 28625 - 11905: 0xE4FE, + 28626 - 11905: 0xB1F4, + 28627 - 11905: 0x9DEF, + 28628 - 11905: 0x9DF0, + 28629 - 11905: 0x9DF1, + 28630 - 11905: 0x9DF2, + 28631 - 11905: 0x9DF3, + 28632 - 11905: 0x9DF4, + 28633 - 11905: 0x9DF5, + 28634 - 11905: 0x9DF6, + 28635 - 11905: 0x9DF7, + 28636 - 11905: 0x9DF8, + 28637 - 11905: 0x9DF9, + 28638 - 11905: 0xE5A8, + 28639 - 11905: 0x9DFA, + 28640 - 11905: 0xE5A9, + 28641 - 11905: 0xE5A6, + 28642 - 11905: 0x9DFB, + 28643 - 11905: 0x9DFC, + 28644 - 11905: 0x9DFD, + 28645 - 11905: 0x9DFE, + 28646 - 11905: 0x9E40, + 28647 - 11905: 0x9E41, + 28648 - 11905: 0x9E42, + 28649 - 11905: 0x9E43, + 28650 - 11905: 0x9E44, + 28651 - 11905: 0x9E45, + 28652 - 11905: 0x9E46, + 28653 - 11905: 0x9E47, + 28654 - 11905: 0xE5A7, + 28655 - 11905: 0xE5AA, + 28656 - 11905: 0x9E48, + 28657 - 11905: 0x9E49, + 28658 - 11905: 0x9E4A, + 28659 - 11905: 0x9E4B, + 28660 - 11905: 0x9E4C, + 28661 - 11905: 0x9E4D, + 28662 - 11905: 0x9E4E, + 28663 - 11905: 0x9E4F, + 28664 - 11905: 0x9E50, + 28665 - 11905: 0x9E51, + 28666 - 11905: 0x9E52, + 28667 - 11905: 0x9E53, + 28668 - 11905: 0x9E54, + 28669 - 11905: 0x9E55, + 28670 - 11905: 0x9E56, + 28671 - 11905: 0x9E57, + 28672 - 11905: 0x9E58, + 28673 - 11905: 0x9E59, + 28674 - 11905: 0x9E5A, + 28675 - 11905: 0x9E5B, + 28676 - 11905: 0x9E5C, + 28677 - 11905: 0x9E5D, + 28678 - 11905: 0x9E5E, + 28679 - 11905: 0x9E5F, + 28680 - 11905: 0x9E60, + 28681 - 11905: 0x9E61, + 28682 - 11905: 0x9E62, + 28683 - 11905: 0x9E63, + 28684 - 11905: 0x9E64, + 28685 - 11905: 0x9E65, + 28686 - 11905: 0x9E66, + 28687 - 11905: 0x9E67, + 28688 - 11905: 0x9E68, + 28689 - 11905: 0xC6D9, + 28690 - 11905: 0x9E69, + 28691 - 11905: 0x9E6A, + 28692 - 11905: 0x9E6B, + 28693 - 11905: 0x9E6C, + 28694 - 11905: 0x9E6D, + 28695 - 11905: 0x9E6E, + 28696 - 11905: 0x9E6F, + 28697 - 11905: 0x9E70, + 28698 - 11905: 0xE5AB, + 28699 - 11905: 0xE5AD, + 28700 - 11905: 0x9E71, + 28701 - 11905: 0x9E72, + 28702 - 11905: 0x9E73, + 28703 - 11905: 0x9E74, + 28704 - 11905: 0x9E75, + 28705 - 11905: 0x9E76, + 28706 - 11905: 0x9E77, + 28707 - 11905: 0xE5AC, + 28708 - 11905: 0x9E78, + 28709 - 11905: 0x9E79, + 28710 - 11905: 0x9E7A, + 28711 - 11905: 0x9E7B, + 28712 - 11905: 0x9E7C, + 28713 - 11905: 0x9E7D, + 28714 - 11905: 0x9E7E, + 28715 - 11905: 0x9E80, + 28716 - 11905: 0x9E81, + 28717 - 11905: 0x9E82, + 28718 - 11905: 0x9E83, + 28719 - 11905: 0x9E84, + 28720 - 11905: 0x9E85, + 28721 - 11905: 0x9E86, + 28722 - 11905: 0x9E87, + 28723 - 11905: 0x9E88, + 28724 - 11905: 0x9E89, + 28725 - 11905: 0xE5AF, + 28726 - 11905: 0x9E8A, + 28727 - 11905: 0x9E8B, + 28728 - 11905: 0x9E8C, + 28729 - 11905: 0xE5AE, + 28730 - 11905: 0x9E8D, + 28731 - 11905: 0x9E8E, + 28732 - 11905: 0x9E8F, + 28733 - 11905: 0x9E90, + 28734 - 11905: 0x9E91, + 28735 - 11905: 0x9E92, + 28736 - 11905: 0x9E93, + 28737 - 11905: 0x9E94, + 28738 - 11905: 0x9E95, + 28739 - 11905: 0x9E96, + 28740 - 11905: 0x9E97, + 28741 - 11905: 0x9E98, + 28742 - 11905: 0x9E99, + 28743 - 11905: 0x9E9A, + 28744 - 11905: 0x9E9B, + 28745 - 11905: 0x9E9C, + 28746 - 11905: 0x9E9D, + 28747 - 11905: 0x9E9E, + 28748 - 11905: 0xB9E0, + 28749 - 11905: 0x9E9F, + 28750 - 11905: 0x9EA0, + 28751 - 11905: 0xE5B0, + 28752 - 11905: 0x9EA1, + 28753 - 11905: 0x9EA2, + 28754 - 11905: 0x9EA3, + 28755 - 11905: 0x9EA4, + 28756 - 11905: 0x9EA5, + 28757 - 11905: 0x9EA6, + 28758 - 11905: 0x9EA7, + 28759 - 11905: 0x9EA8, + 28760 - 11905: 0x9EA9, + 28761 - 11905: 0x9EAA, + 28762 - 11905: 0x9EAB, + 28763 - 11905: 0x9EAC, + 28764 - 11905: 0x9EAD, + 28765 - 11905: 0x9EAE, + 28766 - 11905: 0xE5B1, + 28767 - 11905: 0x9EAF, + 28768 - 11905: 0x9EB0, + 28769 - 11905: 0x9EB1, + 28770 - 11905: 0x9EB2, + 28771 - 11905: 0x9EB3, + 28772 - 11905: 0x9EB4, + 28773 - 11905: 0x9EB5, + 28774 - 11905: 0x9EB6, + 28775 - 11905: 0x9EB7, + 28776 - 11905: 0x9EB8, + 28777 - 11905: 0x9EB9, + 28778 - 11905: 0x9EBA, + 28779 - 11905: 0xBBF0, + 28780 - 11905: 0xECE1, + 28781 - 11905: 0xC3F0, + 28782 - 11905: 0x9EBB, + 28783 - 11905: 0xB5C6, + 28784 - 11905: 0xBBD2, + 28785 - 11905: 0x9EBC, + 28786 - 11905: 0x9EBD, + 28787 - 11905: 0x9EBE, + 28788 - 11905: 0x9EBF, + 28789 - 11905: 0xC1E9, + 28790 - 11905: 0xD4EE, + 28791 - 11905: 0x9EC0, + 28792 - 11905: 0xBEC4, + 28793 - 11905: 0x9EC1, + 28794 - 11905: 0x9EC2, + 28795 - 11905: 0x9EC3, + 28796 - 11905: 0xD7C6, + 28797 - 11905: 0x9EC4, + 28798 - 11905: 0xD4D6, + 28799 - 11905: 0xB2D3, + 28800 - 11905: 0xECBE, + 28801 - 11905: 0x9EC5, + 28802 - 11905: 0x9EC6, + 28803 - 11905: 0x9EC7, + 28804 - 11905: 0x9EC8, + 28805 - 11905: 0xEAC1, + 28806 - 11905: 0x9EC9, + 28807 - 11905: 0x9ECA, + 28808 - 11905: 0x9ECB, + 28809 - 11905: 0xC2AF, + 28810 - 11905: 0xB4B6, + 28811 - 11905: 0x9ECC, + 28812 - 11905: 0x9ECD, + 28813 - 11905: 0x9ECE, + 28814 - 11905: 0xD1D7, + 28815 - 11905: 0x9ECF, + 28816 - 11905: 0x9ED0, + 28817 - 11905: 0x9ED1, + 28818 - 11905: 0xB3B4, + 28819 - 11905: 0x9ED2, + 28820 - 11905: 0xC8B2, + 28821 - 11905: 0xBFBB, + 28822 - 11905: 0xECC0, + 28823 - 11905: 0x9ED3, + 28824 - 11905: 0x9ED4, + 28825 - 11905: 0xD6CB, + 28826 - 11905: 0x9ED5, + 28827 - 11905: 0x9ED6, + 28828 - 11905: 0xECBF, + 28829 - 11905: 0xECC1, + 28830 - 11905: 0x9ED7, + 28831 - 11905: 0x9ED8, + 28832 - 11905: 0x9ED9, + 28833 - 11905: 0x9EDA, + 28834 - 11905: 0x9EDB, + 28835 - 11905: 0x9EDC, + 28836 - 11905: 0x9EDD, + 28837 - 11905: 0x9EDE, + 28838 - 11905: 0x9EDF, + 28839 - 11905: 0x9EE0, + 28840 - 11905: 0x9EE1, + 28841 - 11905: 0x9EE2, + 28842 - 11905: 0x9EE3, + 28843 - 11905: 0xECC5, + 28844 - 11905: 0xBEE6, + 28845 - 11905: 0xCCBF, + 28846 - 11905: 0xC5DA, + 28847 - 11905: 0xBEBC, + 28848 - 11905: 0x9EE4, + 28849 - 11905: 0xECC6, + 28850 - 11905: 0x9EE5, + 28851 - 11905: 0xB1FE, + 28852 - 11905: 0x9EE6, + 28853 - 11905: 0x9EE7, + 28854 - 11905: 0x9EE8, + 28855 - 11905: 0xECC4, + 28856 - 11905: 0xD5A8, + 28857 - 11905: 0xB5E3, + 28858 - 11905: 0x9EE9, + 28859 - 11905: 0xECC2, + 28860 - 11905: 0xC1B6, + 28861 - 11905: 0xB3E3, + 28862 - 11905: 0x9EEA, + 28863 - 11905: 0x9EEB, + 28864 - 11905: 0xECC3, + 28865 - 11905: 0xCBB8, + 28866 - 11905: 0xC0C3, + 28867 - 11905: 0xCCFE, + 28868 - 11905: 0x9EEC, + 28869 - 11905: 0x9EED, + 28870 - 11905: 0x9EEE, + 28871 - 11905: 0x9EEF, + 28872 - 11905: 0xC1D2, + 28873 - 11905: 0x9EF0, + 28874 - 11905: 0xECC8, + 28875 - 11905: 0x9EF1, + 28876 - 11905: 0x9EF2, + 28877 - 11905: 0x9EF3, + 28878 - 11905: 0x9EF4, + 28879 - 11905: 0x9EF5, + 28880 - 11905: 0x9EF6, + 28881 - 11905: 0x9EF7, + 28882 - 11905: 0x9EF8, + 28883 - 11905: 0x9EF9, + 28884 - 11905: 0x9EFA, + 28885 - 11905: 0x9EFB, + 28886 - 11905: 0x9EFC, + 28887 - 11905: 0x9EFD, + 28888 - 11905: 0xBAE6, + 28889 - 11905: 0xC0D3, + 28890 - 11905: 0x9EFE, + 28891 - 11905: 0xD6F2, + 28892 - 11905: 0x9F40, + 28893 - 11905: 0x9F41, + 28894 - 11905: 0x9F42, + 28895 - 11905: 0xD1CC, + 28896 - 11905: 0x9F43, + 28897 - 11905: 0x9F44, + 28898 - 11905: 0x9F45, + 28899 - 11905: 0x9F46, + 28900 - 11905: 0xBFBE, + 28901 - 11905: 0x9F47, + 28902 - 11905: 0xB7B3, + 28903 - 11905: 0xC9D5, + 28904 - 11905: 0xECC7, + 28905 - 11905: 0xBBE2, + 28906 - 11905: 0x9F48, + 28907 - 11905: 0xCCCC, + 28908 - 11905: 0xBDFD, + 28909 - 11905: 0xC8C8, + 28910 - 11905: 0x9F49, + 28911 - 11905: 0xCFA9, + 28912 - 11905: 0x9F4A, + 28913 - 11905: 0x9F4B, + 28914 - 11905: 0x9F4C, + 28915 - 11905: 0x9F4D, + 28916 - 11905: 0x9F4E, + 28917 - 11905: 0x9F4F, + 28918 - 11905: 0x9F50, + 28919 - 11905: 0xCDE9, + 28920 - 11905: 0x9F51, + 28921 - 11905: 0xC5EB, + 28922 - 11905: 0x9F52, + 28923 - 11905: 0x9F53, + 28924 - 11905: 0x9F54, + 28925 - 11905: 0xB7E9, + 28926 - 11905: 0x9F55, + 28927 - 11905: 0x9F56, + 28928 - 11905: 0x9F57, + 28929 - 11905: 0x9F58, + 28930 - 11905: 0x9F59, + 28931 - 11905: 0x9F5A, + 28932 - 11905: 0x9F5B, + 28933 - 11905: 0x9F5C, + 28934 - 11905: 0x9F5D, + 28935 - 11905: 0x9F5E, + 28936 - 11905: 0x9F5F, + 28937 - 11905: 0xD1C9, + 28938 - 11905: 0xBAB8, + 28939 - 11905: 0x9F60, + 28940 - 11905: 0x9F61, + 28941 - 11905: 0x9F62, + 28942 - 11905: 0x9F63, + 28943 - 11905: 0x9F64, + 28944 - 11905: 0xECC9, + 28945 - 11905: 0x9F65, + 28946 - 11905: 0x9F66, + 28947 - 11905: 0xECCA, + 28948 - 11905: 0x9F67, + 28949 - 11905: 0xBBC0, + 28950 - 11905: 0xECCB, + 28951 - 11905: 0x9F68, + 28952 - 11905: 0xECE2, + 28953 - 11905: 0xB1BA, + 28954 - 11905: 0xB7D9, + 28955 - 11905: 0x9F69, + 28956 - 11905: 0x9F6A, + 28957 - 11905: 0x9F6B, + 28958 - 11905: 0x9F6C, + 28959 - 11905: 0x9F6D, + 28960 - 11905: 0x9F6E, + 28961 - 11905: 0x9F6F, + 28962 - 11905: 0x9F70, + 28963 - 11905: 0x9F71, + 28964 - 11905: 0x9F72, + 28965 - 11905: 0x9F73, + 28966 - 11905: 0xBDB9, + 28967 - 11905: 0x9F74, + 28968 - 11905: 0x9F75, + 28969 - 11905: 0x9F76, + 28970 - 11905: 0x9F77, + 28971 - 11905: 0x9F78, + 28972 - 11905: 0x9F79, + 28973 - 11905: 0x9F7A, + 28974 - 11905: 0x9F7B, + 28975 - 11905: 0xECCC, + 28976 - 11905: 0xD1E6, + 28977 - 11905: 0xECCD, + 28978 - 11905: 0x9F7C, + 28979 - 11905: 0x9F7D, + 28980 - 11905: 0x9F7E, + 28981 - 11905: 0x9F80, + 28982 - 11905: 0xC8BB, + 28983 - 11905: 0x9F81, + 28984 - 11905: 0x9F82, + 28985 - 11905: 0x9F83, + 28986 - 11905: 0x9F84, + 28987 - 11905: 0x9F85, + 28988 - 11905: 0x9F86, + 28989 - 11905: 0x9F87, + 28990 - 11905: 0x9F88, + 28991 - 11905: 0x9F89, + 28992 - 11905: 0x9F8A, + 28993 - 11905: 0x9F8B, + 28994 - 11905: 0x9F8C, + 28995 - 11905: 0x9F8D, + 28996 - 11905: 0x9F8E, + 28997 - 11905: 0xECD1, + 28998 - 11905: 0x9F8F, + 28999 - 11905: 0x9F90, + 29000 - 11905: 0x9F91, + 29001 - 11905: 0x9F92, + 29002 - 11905: 0xECD3, + 29003 - 11905: 0x9F93, + 29004 - 11905: 0xBBCD, + 29005 - 11905: 0x9F94, + 29006 - 11905: 0xBCE5, + 29007 - 11905: 0x9F95, + 29008 - 11905: 0x9F96, + 29009 - 11905: 0x9F97, + 29010 - 11905: 0x9F98, + 29011 - 11905: 0x9F99, + 29012 - 11905: 0x9F9A, + 29013 - 11905: 0x9F9B, + 29014 - 11905: 0x9F9C, + 29015 - 11905: 0x9F9D, + 29016 - 11905: 0x9F9E, + 29017 - 11905: 0x9F9F, + 29018 - 11905: 0x9FA0, + 29019 - 11905: 0x9FA1, + 29020 - 11905: 0xECCF, + 29021 - 11905: 0x9FA2, + 29022 - 11905: 0xC9B7, + 29023 - 11905: 0x9FA3, + 29024 - 11905: 0x9FA4, + 29025 - 11905: 0x9FA5, + 29026 - 11905: 0x9FA6, + 29027 - 11905: 0x9FA7, + 29028 - 11905: 0xC3BA, + 29029 - 11905: 0x9FA8, + 29030 - 11905: 0xECE3, + 29031 - 11905: 0xD5D5, + 29032 - 11905: 0xECD0, + 29033 - 11905: 0x9FA9, + 29034 - 11905: 0x9FAA, + 29035 - 11905: 0x9FAB, + 29036 - 11905: 0x9FAC, + 29037 - 11905: 0x9FAD, + 29038 - 11905: 0xD6F3, + 29039 - 11905: 0x9FAE, + 29040 - 11905: 0x9FAF, + 29041 - 11905: 0x9FB0, + 29042 - 11905: 0xECD2, + 29043 - 11905: 0xECCE, + 29044 - 11905: 0x9FB1, + 29045 - 11905: 0x9FB2, + 29046 - 11905: 0x9FB3, + 29047 - 11905: 0x9FB4, + 29048 - 11905: 0xECD4, + 29049 - 11905: 0x9FB5, + 29050 - 11905: 0xECD5, + 29051 - 11905: 0x9FB6, + 29052 - 11905: 0x9FB7, + 29053 - 11905: 0xC9BF, + 29054 - 11905: 0x9FB8, + 29055 - 11905: 0x9FB9, + 29056 - 11905: 0x9FBA, + 29057 - 11905: 0x9FBB, + 29058 - 11905: 0x9FBC, + 29059 - 11905: 0x9FBD, + 29060 - 11905: 0xCFA8, + 29061 - 11905: 0x9FBE, + 29062 - 11905: 0x9FBF, + 29063 - 11905: 0x9FC0, + 29064 - 11905: 0x9FC1, + 29065 - 11905: 0x9FC2, + 29066 - 11905: 0xD0DC, + 29067 - 11905: 0x9FC3, + 29068 - 11905: 0x9FC4, + 29069 - 11905: 0x9FC5, + 29070 - 11905: 0x9FC6, + 29071 - 11905: 0xD1AC, + 29072 - 11905: 0x9FC7, + 29073 - 11905: 0x9FC8, + 29074 - 11905: 0x9FC9, + 29075 - 11905: 0x9FCA, + 29076 - 11905: 0xC8DB, + 29077 - 11905: 0x9FCB, + 29078 - 11905: 0x9FCC, + 29079 - 11905: 0x9FCD, + 29080 - 11905: 0xECD6, + 29081 - 11905: 0xCEF5, + 29082 - 11905: 0x9FCE, + 29083 - 11905: 0x9FCF, + 29084 - 11905: 0x9FD0, + 29085 - 11905: 0x9FD1, + 29086 - 11905: 0x9FD2, + 29087 - 11905: 0xCAEC, + 29088 - 11905: 0xECDA, + 29089 - 11905: 0x9FD3, + 29090 - 11905: 0x9FD4, + 29091 - 11905: 0x9FD5, + 29092 - 11905: 0x9FD6, + 29093 - 11905: 0x9FD7, + 29094 - 11905: 0x9FD8, + 29095 - 11905: 0x9FD9, + 29096 - 11905: 0xECD9, + 29097 - 11905: 0x9FDA, + 29098 - 11905: 0x9FDB, + 29099 - 11905: 0x9FDC, + 29100 - 11905: 0xB0BE, + 29101 - 11905: 0x9FDD, + 29102 - 11905: 0x9FDE, + 29103 - 11905: 0x9FDF, + 29104 - 11905: 0x9FE0, + 29105 - 11905: 0x9FE1, + 29106 - 11905: 0x9FE2, + 29107 - 11905: 0xECD7, + 29108 - 11905: 0x9FE3, + 29109 - 11905: 0xECD8, + 29110 - 11905: 0x9FE4, + 29111 - 11905: 0x9FE5, + 29112 - 11905: 0x9FE6, + 29113 - 11905: 0xECE4, + 29114 - 11905: 0x9FE7, + 29115 - 11905: 0x9FE8, + 29116 - 11905: 0x9FE9, + 29117 - 11905: 0x9FEA, + 29118 - 11905: 0x9FEB, + 29119 - 11905: 0x9FEC, + 29120 - 11905: 0x9FED, + 29121 - 11905: 0x9FEE, + 29122 - 11905: 0x9FEF, + 29123 - 11905: 0xC8BC, + 29124 - 11905: 0x9FF0, + 29125 - 11905: 0x9FF1, + 29126 - 11905: 0x9FF2, + 29127 - 11905: 0x9FF3, + 29128 - 11905: 0x9FF4, + 29129 - 11905: 0x9FF5, + 29130 - 11905: 0x9FF6, + 29131 - 11905: 0x9FF7, + 29132 - 11905: 0x9FF8, + 29133 - 11905: 0x9FF9, + 29134 - 11905: 0xC1C7, + 29135 - 11905: 0x9FFA, + 29136 - 11905: 0x9FFB, + 29137 - 11905: 0x9FFC, + 29138 - 11905: 0x9FFD, + 29139 - 11905: 0x9FFE, + 29140 - 11905: 0xECDC, + 29141 - 11905: 0xD1E0, + 29142 - 11905: 0xA040, + 29143 - 11905: 0xA041, + 29144 - 11905: 0xA042, + 29145 - 11905: 0xA043, + 29146 - 11905: 0xA044, + 29147 - 11905: 0xA045, + 29148 - 11905: 0xA046, + 29149 - 11905: 0xA047, + 29150 - 11905: 0xA048, + 29151 - 11905: 0xA049, + 29152 - 11905: 0xECDB, + 29153 - 11905: 0xA04A, + 29154 - 11905: 0xA04B, + 29155 - 11905: 0xA04C, + 29156 - 11905: 0xA04D, + 29157 - 11905: 0xD4EF, + 29158 - 11905: 0xA04E, + 29159 - 11905: 0xECDD, + 29160 - 11905: 0xA04F, + 29161 - 11905: 0xA050, + 29162 - 11905: 0xA051, + 29163 - 11905: 0xA052, + 29164 - 11905: 0xA053, + 29165 - 11905: 0xA054, + 29166 - 11905: 0xDBC6, + 29167 - 11905: 0xA055, + 29168 - 11905: 0xA056, + 29169 - 11905: 0xA057, + 29170 - 11905: 0xA058, + 29171 - 11905: 0xA059, + 29172 - 11905: 0xA05A, + 29173 - 11905: 0xA05B, + 29174 - 11905: 0xA05C, + 29175 - 11905: 0xA05D, + 29176 - 11905: 0xA05E, + 29177 - 11905: 0xECDE, + 29178 - 11905: 0xA05F, + 29179 - 11905: 0xA060, + 29180 - 11905: 0xA061, + 29181 - 11905: 0xA062, + 29182 - 11905: 0xA063, + 29183 - 11905: 0xA064, + 29184 - 11905: 0xA065, + 29185 - 11905: 0xA066, + 29186 - 11905: 0xA067, + 29187 - 11905: 0xA068, + 29188 - 11905: 0xA069, + 29189 - 11905: 0xA06A, + 29190 - 11905: 0xB1AC, + 29191 - 11905: 0xA06B, + 29192 - 11905: 0xA06C, + 29193 - 11905: 0xA06D, + 29194 - 11905: 0xA06E, + 29195 - 11905: 0xA06F, + 29196 - 11905: 0xA070, + 29197 - 11905: 0xA071, + 29198 - 11905: 0xA072, + 29199 - 11905: 0xA073, + 29200 - 11905: 0xA074, + 29201 - 11905: 0xA075, + 29202 - 11905: 0xA076, + 29203 - 11905: 0xA077, + 29204 - 11905: 0xA078, + 29205 - 11905: 0xA079, + 29206 - 11905: 0xA07A, + 29207 - 11905: 0xA07B, + 29208 - 11905: 0xA07C, + 29209 - 11905: 0xA07D, + 29210 - 11905: 0xA07E, + 29211 - 11905: 0xA080, + 29212 - 11905: 0xA081, + 29213 - 11905: 0xECDF, + 29214 - 11905: 0xA082, + 29215 - 11905: 0xA083, + 29216 - 11905: 0xA084, + 29217 - 11905: 0xA085, + 29218 - 11905: 0xA086, + 29219 - 11905: 0xA087, + 29220 - 11905: 0xA088, + 29221 - 11905: 0xA089, + 29222 - 11905: 0xA08A, + 29223 - 11905: 0xA08B, + 29224 - 11905: 0xECE0, + 29225 - 11905: 0xA08C, + 29226 - 11905: 0xD7A6, + 29227 - 11905: 0xA08D, + 29228 - 11905: 0xC5C0, + 29229 - 11905: 0xA08E, + 29230 - 11905: 0xA08F, + 29231 - 11905: 0xA090, + 29232 - 11905: 0xEBBC, + 29233 - 11905: 0xB0AE, + 29234 - 11905: 0xA091, + 29235 - 11905: 0xA092, + 29236 - 11905: 0xA093, + 29237 - 11905: 0xBEF4, + 29238 - 11905: 0xB8B8, + 29239 - 11905: 0xD2AF, + 29240 - 11905: 0xB0D6, + 29241 - 11905: 0xB5F9, + 29242 - 11905: 0xA094, + 29243 - 11905: 0xD8B3, + 29244 - 11905: 0xA095, + 29245 - 11905: 0xCBAC, + 29246 - 11905: 0xA096, + 29247 - 11905: 0xE3DD, + 29248 - 11905: 0xA097, + 29249 - 11905: 0xA098, + 29250 - 11905: 0xA099, + 29251 - 11905: 0xA09A, + 29252 - 11905: 0xA09B, + 29253 - 11905: 0xA09C, + 29254 - 11905: 0xA09D, + 29255 - 11905: 0xC6AC, + 29256 - 11905: 0xB0E6, + 29257 - 11905: 0xA09E, + 29258 - 11905: 0xA09F, + 29259 - 11905: 0xA0A0, + 29260 - 11905: 0xC5C6, + 29261 - 11905: 0xEBB9, + 29262 - 11905: 0xA0A1, + 29263 - 11905: 0xA0A2, + 29264 - 11905: 0xA0A3, + 29265 - 11905: 0xA0A4, + 29266 - 11905: 0xEBBA, + 29267 - 11905: 0xA0A5, + 29268 - 11905: 0xA0A6, + 29269 - 11905: 0xA0A7, + 29270 - 11905: 0xEBBB, + 29271 - 11905: 0xA0A8, + 29272 - 11905: 0xA0A9, + 29273 - 11905: 0xD1C0, + 29274 - 11905: 0xA0AA, + 29275 - 11905: 0xC5A3, + 29276 - 11905: 0xA0AB, + 29277 - 11905: 0xEAF2, + 29278 - 11905: 0xA0AC, + 29279 - 11905: 0xC4B2, + 29280 - 11905: 0xA0AD, + 29281 - 11905: 0xC4B5, + 29282 - 11905: 0xC0CE, + 29283 - 11905: 0xA0AE, + 29284 - 11905: 0xA0AF, + 29285 - 11905: 0xA0B0, + 29286 - 11905: 0xEAF3, + 29287 - 11905: 0xC4C1, + 29288 - 11905: 0xA0B1, + 29289 - 11905: 0xCEEF, + 29290 - 11905: 0xA0B2, + 29291 - 11905: 0xA0B3, + 29292 - 11905: 0xA0B4, + 29293 - 11905: 0xA0B5, + 29294 - 11905: 0xEAF0, + 29295 - 11905: 0xEAF4, + 29296 - 11905: 0xA0B6, + 29297 - 11905: 0xA0B7, + 29298 - 11905: 0xC9FC, + 29299 - 11905: 0xA0B8, + 29300 - 11905: 0xA0B9, + 29301 - 11905: 0xC7A3, + 29302 - 11905: 0xA0BA, + 29303 - 11905: 0xA0BB, + 29304 - 11905: 0xA0BC, + 29305 - 11905: 0xCCD8, + 29306 - 11905: 0xCEFE, + 29307 - 11905: 0xA0BD, + 29308 - 11905: 0xA0BE, + 29309 - 11905: 0xA0BF, + 29310 - 11905: 0xEAF5, + 29311 - 11905: 0xEAF6, + 29312 - 11905: 0xCFAC, + 29313 - 11905: 0xC0E7, + 29314 - 11905: 0xA0C0, + 29315 - 11905: 0xA0C1, + 29316 - 11905: 0xEAF7, + 29317 - 11905: 0xA0C2, + 29318 - 11905: 0xA0C3, + 29319 - 11905: 0xA0C4, + 29320 - 11905: 0xA0C5, + 29321 - 11905: 0xA0C6, + 29322 - 11905: 0xB6BF, + 29323 - 11905: 0xEAF8, + 29324 - 11905: 0xA0C7, + 29325 - 11905: 0xEAF9, + 29326 - 11905: 0xA0C8, + 29327 - 11905: 0xEAFA, + 29328 - 11905: 0xA0C9, + 29329 - 11905: 0xA0CA, + 29330 - 11905: 0xEAFB, + 29331 - 11905: 0xA0CB, + 29332 - 11905: 0xA0CC, + 29333 - 11905: 0xA0CD, + 29334 - 11905: 0xA0CE, + 29335 - 11905: 0xA0CF, + 29336 - 11905: 0xA0D0, + 29337 - 11905: 0xA0D1, + 29338 - 11905: 0xA0D2, + 29339 - 11905: 0xA0D3, + 29340 - 11905: 0xA0D4, + 29341 - 11905: 0xA0D5, + 29342 - 11905: 0xA0D6, + 29343 - 11905: 0xEAF1, + 29344 - 11905: 0xA0D7, + 29345 - 11905: 0xA0D8, + 29346 - 11905: 0xA0D9, + 29347 - 11905: 0xA0DA, + 29348 - 11905: 0xA0DB, + 29349 - 11905: 0xA0DC, + 29350 - 11905: 0xA0DD, + 29351 - 11905: 0xA0DE, + 29352 - 11905: 0xA0DF, + 29353 - 11905: 0xA0E0, + 29354 - 11905: 0xA0E1, + 29355 - 11905: 0xA0E2, + 29356 - 11905: 0xC8AE, + 29357 - 11905: 0xE1EB, + 29358 - 11905: 0xA0E3, + 29359 - 11905: 0xB7B8, + 29360 - 11905: 0xE1EC, + 29361 - 11905: 0xA0E4, + 29362 - 11905: 0xA0E5, + 29363 - 11905: 0xA0E6, + 29364 - 11905: 0xE1ED, + 29365 - 11905: 0xA0E7, + 29366 - 11905: 0xD7B4, + 29367 - 11905: 0xE1EE, + 29368 - 11905: 0xE1EF, + 29369 - 11905: 0xD3CC, + 29370 - 11905: 0xA0E8, + 29371 - 11905: 0xA0E9, + 29372 - 11905: 0xA0EA, + 29373 - 11905: 0xA0EB, + 29374 - 11905: 0xA0EC, + 29375 - 11905: 0xA0ED, + 29376 - 11905: 0xA0EE, + 29377 - 11905: 0xE1F1, + 29378 - 11905: 0xBFF1, + 29379 - 11905: 0xE1F0, + 29380 - 11905: 0xB5D2, + 29381 - 11905: 0xA0EF, + 29382 - 11905: 0xA0F0, + 29383 - 11905: 0xA0F1, + 29384 - 11905: 0xB1B7, + 29385 - 11905: 0xA0F2, + 29386 - 11905: 0xA0F3, + 29387 - 11905: 0xA0F4, + 29388 - 11905: 0xA0F5, + 29389 - 11905: 0xE1F3, + 29390 - 11905: 0xE1F2, + 29391 - 11905: 0xA0F6, + 29392 - 11905: 0xBAFC, + 29393 - 11905: 0xA0F7, + 29394 - 11905: 0xE1F4, + 29395 - 11905: 0xA0F8, + 29396 - 11905: 0xA0F9, + 29397 - 11905: 0xA0FA, + 29398 - 11905: 0xA0FB, + 29399 - 11905: 0xB9B7, + 29400 - 11905: 0xA0FC, + 29401 - 11905: 0xBED1, + 29402 - 11905: 0xA0FD, + 29403 - 11905: 0xA0FE, + 29404 - 11905: 0xAA40, + 29405 - 11905: 0xAA41, + 29406 - 11905: 0xC4FC, + 29407 - 11905: 0xAA42, + 29408 - 11905: 0xBADD, + 29409 - 11905: 0xBDC6, + 29410 - 11905: 0xAA43, + 29411 - 11905: 0xAA44, + 29412 - 11905: 0xAA45, + 29413 - 11905: 0xAA46, + 29414 - 11905: 0xAA47, + 29415 - 11905: 0xAA48, + 29416 - 11905: 0xE1F5, + 29417 - 11905: 0xE1F7, + 29418 - 11905: 0xAA49, + 29419 - 11905: 0xAA4A, + 29420 - 11905: 0xB6C0, + 29421 - 11905: 0xCFC1, + 29422 - 11905: 0xCAA8, + 29423 - 11905: 0xE1F6, + 29424 - 11905: 0xD5F8, + 29425 - 11905: 0xD3FC, + 29426 - 11905: 0xE1F8, + 29427 - 11905: 0xE1FC, + 29428 - 11905: 0xE1F9, + 29429 - 11905: 0xAA4B, + 29430 - 11905: 0xAA4C, + 29431 - 11905: 0xE1FA, + 29432 - 11905: 0xC0EA, + 29433 - 11905: 0xAA4D, + 29434 - 11905: 0xE1FE, + 29435 - 11905: 0xE2A1, + 29436 - 11905: 0xC0C7, + 29437 - 11905: 0xAA4E, + 29438 - 11905: 0xAA4F, + 29439 - 11905: 0xAA50, + 29440 - 11905: 0xAA51, + 29441 - 11905: 0xE1FB, + 29442 - 11905: 0xAA52, + 29443 - 11905: 0xE1FD, + 29444 - 11905: 0xAA53, + 29445 - 11905: 0xAA54, + 29446 - 11905: 0xAA55, + 29447 - 11905: 0xAA56, + 29448 - 11905: 0xAA57, + 29449 - 11905: 0xAA58, + 29450 - 11905: 0xE2A5, + 29451 - 11905: 0xAA59, + 29452 - 11905: 0xAA5A, + 29453 - 11905: 0xAA5B, + 29454 - 11905: 0xC1D4, + 29455 - 11905: 0xAA5C, + 29456 - 11905: 0xAA5D, + 29457 - 11905: 0xAA5E, + 29458 - 11905: 0xAA5F, + 29459 - 11905: 0xE2A3, + 29460 - 11905: 0xAA60, + 29461 - 11905: 0xE2A8, + 29462 - 11905: 0xB2FE, + 29463 - 11905: 0xE2A2, + 29464 - 11905: 0xAA61, + 29465 - 11905: 0xAA62, + 29466 - 11905: 0xAA63, + 29467 - 11905: 0xC3CD, + 29468 - 11905: 0xB2C2, + 29469 - 11905: 0xE2A7, + 29470 - 11905: 0xE2A6, + 29471 - 11905: 0xAA64, + 29472 - 11905: 0xAA65, + 29473 - 11905: 0xE2A4, + 29474 - 11905: 0xE2A9, + 29475 - 11905: 0xAA66, + 29476 - 11905: 0xAA67, + 29477 - 11905: 0xE2AB, + 29478 - 11905: 0xAA68, + 29479 - 11905: 0xAA69, + 29480 - 11905: 0xAA6A, + 29481 - 11905: 0xD0C9, + 29482 - 11905: 0xD6ED, + 29483 - 11905: 0xC3A8, + 29484 - 11905: 0xE2AC, + 29485 - 11905: 0xAA6B, + 29486 - 11905: 0xCFD7, + 29487 - 11905: 0xAA6C, + 29488 - 11905: 0xAA6D, + 29489 - 11905: 0xE2AE, + 29490 - 11905: 0xAA6E, + 29491 - 11905: 0xAA6F, + 29492 - 11905: 0xBAEF, + 29493 - 11905: 0xAA70, + 29494 - 11905: 0xAA71, + 29495 - 11905: 0xE9E0, + 29496 - 11905: 0xE2AD, + 29497 - 11905: 0xE2AA, + 29498 - 11905: 0xAA72, + 29499 - 11905: 0xAA73, + 29500 - 11905: 0xAA74, + 29501 - 11905: 0xAA75, + 29502 - 11905: 0xBBAB, + 29503 - 11905: 0xD4B3, + 29504 - 11905: 0xAA76, + 29505 - 11905: 0xAA77, + 29506 - 11905: 0xAA78, + 29507 - 11905: 0xAA79, + 29508 - 11905: 0xAA7A, + 29509 - 11905: 0xAA7B, + 29510 - 11905: 0xAA7C, + 29511 - 11905: 0xAA7D, + 29512 - 11905: 0xAA7E, + 29513 - 11905: 0xAA80, + 29514 - 11905: 0xAA81, + 29515 - 11905: 0xAA82, + 29516 - 11905: 0xAA83, + 29517 - 11905: 0xE2B0, + 29518 - 11905: 0xAA84, + 29519 - 11905: 0xAA85, + 29520 - 11905: 0xE2AF, + 29521 - 11905: 0xAA86, + 29522 - 11905: 0xE9E1, + 29523 - 11905: 0xAA87, + 29524 - 11905: 0xAA88, + 29525 - 11905: 0xAA89, + 29526 - 11905: 0xAA8A, + 29527 - 11905: 0xE2B1, + 29528 - 11905: 0xAA8B, + 29529 - 11905: 0xAA8C, + 29530 - 11905: 0xAA8D, + 29531 - 11905: 0xAA8E, + 29532 - 11905: 0xAA8F, + 29533 - 11905: 0xAA90, + 29534 - 11905: 0xAA91, + 29535 - 11905: 0xAA92, + 29536 - 11905: 0xE2B2, + 29537 - 11905: 0xAA93, + 29538 - 11905: 0xAA94, + 29539 - 11905: 0xAA95, + 29540 - 11905: 0xAA96, + 29541 - 11905: 0xAA97, + 29542 - 11905: 0xAA98, + 29543 - 11905: 0xAA99, + 29544 - 11905: 0xAA9A, + 29545 - 11905: 0xAA9B, + 29546 - 11905: 0xAA9C, + 29547 - 11905: 0xAA9D, + 29548 - 11905: 0xE2B3, + 29549 - 11905: 0xCCA1, + 29550 - 11905: 0xAA9E, + 29551 - 11905: 0xE2B4, + 29552 - 11905: 0xAA9F, + 29553 - 11905: 0xAAA0, + 29554 - 11905: 0xAB40, + 29555 - 11905: 0xAB41, + 29556 - 11905: 0xAB42, + 29557 - 11905: 0xAB43, + 29558 - 11905: 0xAB44, + 29559 - 11905: 0xAB45, + 29560 - 11905: 0xAB46, + 29561 - 11905: 0xAB47, + 29562 - 11905: 0xAB48, + 29563 - 11905: 0xAB49, + 29564 - 11905: 0xAB4A, + 29565 - 11905: 0xAB4B, + 29566 - 11905: 0xE2B5, + 29567 - 11905: 0xAB4C, + 29568 - 11905: 0xAB4D, + 29569 - 11905: 0xAB4E, + 29570 - 11905: 0xAB4F, + 29571 - 11905: 0xAB50, + 29572 - 11905: 0xD0FE, + 29573 - 11905: 0xAB51, + 29574 - 11905: 0xAB52, + 29575 - 11905: 0xC2CA, + 29576 - 11905: 0xAB53, + 29577 - 11905: 0xD3F1, + 29578 - 11905: 0xAB54, + 29579 - 11905: 0xCDF5, + 29580 - 11905: 0xAB55, + 29581 - 11905: 0xAB56, + 29582 - 11905: 0xE7E0, + 29583 - 11905: 0xAB57, + 29584 - 11905: 0xAB58, + 29585 - 11905: 0xE7E1, + 29586 - 11905: 0xAB59, + 29587 - 11905: 0xAB5A, + 29588 - 11905: 0xAB5B, + 29589 - 11905: 0xAB5C, + 29590 - 11905: 0xBEC1, + 29591 - 11905: 0xAB5D, + 29592 - 11905: 0xAB5E, + 29593 - 11905: 0xAB5F, + 29594 - 11905: 0xAB60, + 29595 - 11905: 0xC2EA, + 29596 - 11905: 0xAB61, + 29597 - 11905: 0xAB62, + 29598 - 11905: 0xAB63, + 29599 - 11905: 0xE7E4, + 29600 - 11905: 0xAB64, + 29601 - 11905: 0xAB65, + 29602 - 11905: 0xE7E3, + 29603 - 11905: 0xAB66, + 29604 - 11905: 0xAB67, + 29605 - 11905: 0xAB68, + 29606 - 11905: 0xAB69, + 29607 - 11905: 0xAB6A, + 29608 - 11905: 0xAB6B, + 29609 - 11905: 0xCDE6, + 29610 - 11905: 0xAB6C, + 29611 - 11905: 0xC3B5, + 29612 - 11905: 0xAB6D, + 29613 - 11905: 0xAB6E, + 29614 - 11905: 0xE7E2, + 29615 - 11905: 0xBBB7, + 29616 - 11905: 0xCFD6, + 29617 - 11905: 0xAB6F, + 29618 - 11905: 0xC1E1, + 29619 - 11905: 0xE7E9, + 29620 - 11905: 0xAB70, + 29621 - 11905: 0xAB71, + 29622 - 11905: 0xAB72, + 29623 - 11905: 0xE7E8, + 29624 - 11905: 0xAB73, + 29625 - 11905: 0xAB74, + 29626 - 11905: 0xE7F4, + 29627 - 11905: 0xB2A3, + 29628 - 11905: 0xAB75, + 29629 - 11905: 0xAB76, + 29630 - 11905: 0xAB77, + 29631 - 11905: 0xAB78, + 29632 - 11905: 0xE7EA, + 29633 - 11905: 0xAB79, + 29634 - 11905: 0xE7E6, + 29635 - 11905: 0xAB7A, + 29636 - 11905: 0xAB7B, + 29637 - 11905: 0xAB7C, + 29638 - 11905: 0xAB7D, + 29639 - 11905: 0xAB7E, + 29640 - 11905: 0xE7EC, + 29641 - 11905: 0xE7EB, + 29642 - 11905: 0xC9BA, + 29643 - 11905: 0xAB80, + 29644 - 11905: 0xAB81, + 29645 - 11905: 0xD5E4, + 29646 - 11905: 0xAB82, + 29647 - 11905: 0xE7E5, + 29648 - 11905: 0xB7A9, + 29649 - 11905: 0xE7E7, + 29650 - 11905: 0xAB83, + 29651 - 11905: 0xAB84, + 29652 - 11905: 0xAB85, + 29653 - 11905: 0xAB86, + 29654 - 11905: 0xAB87, + 29655 - 11905: 0xAB88, + 29656 - 11905: 0xAB89, + 29657 - 11905: 0xE7EE, + 29658 - 11905: 0xAB8A, + 29659 - 11905: 0xAB8B, + 29660 - 11905: 0xAB8C, + 29661 - 11905: 0xAB8D, + 29662 - 11905: 0xE7F3, + 29663 - 11905: 0xAB8E, + 29664 - 11905: 0xD6E9, + 29665 - 11905: 0xAB8F, + 29666 - 11905: 0xAB90, + 29667 - 11905: 0xAB91, + 29668 - 11905: 0xAB92, + 29669 - 11905: 0xE7ED, + 29670 - 11905: 0xAB93, + 29671 - 11905: 0xE7F2, + 29672 - 11905: 0xAB94, + 29673 - 11905: 0xE7F1, + 29674 - 11905: 0xAB95, + 29675 - 11905: 0xAB96, + 29676 - 11905: 0xAB97, + 29677 - 11905: 0xB0E0, + 29678 - 11905: 0xAB98, + 29679 - 11905: 0xAB99, + 29680 - 11905: 0xAB9A, + 29681 - 11905: 0xAB9B, + 29682 - 11905: 0xE7F5, + 29683 - 11905: 0xAB9C, + 29684 - 11905: 0xAB9D, + 29685 - 11905: 0xAB9E, + 29686 - 11905: 0xAB9F, + 29687 - 11905: 0xABA0, + 29688 - 11905: 0xAC40, + 29689 - 11905: 0xAC41, + 29690 - 11905: 0xAC42, + 29691 - 11905: 0xAC43, + 29692 - 11905: 0xAC44, + 29693 - 11905: 0xAC45, + 29694 - 11905: 0xAC46, + 29695 - 11905: 0xAC47, + 29696 - 11905: 0xAC48, + 29697 - 11905: 0xAC49, + 29698 - 11905: 0xAC4A, + 29699 - 11905: 0xC7F2, + 29700 - 11905: 0xAC4B, + 29701 - 11905: 0xC0C5, + 29702 - 11905: 0xC0ED, + 29703 - 11905: 0xAC4C, + 29704 - 11905: 0xAC4D, + 29705 - 11905: 0xC1F0, + 29706 - 11905: 0xE7F0, + 29707 - 11905: 0xAC4E, + 29708 - 11905: 0xAC4F, + 29709 - 11905: 0xAC50, + 29710 - 11905: 0xAC51, + 29711 - 11905: 0xE7F6, + 29712 - 11905: 0xCBF6, + 29713 - 11905: 0xAC52, + 29714 - 11905: 0xAC53, + 29715 - 11905: 0xAC54, + 29716 - 11905: 0xAC55, + 29717 - 11905: 0xAC56, + 29718 - 11905: 0xAC57, + 29719 - 11905: 0xAC58, + 29720 - 11905: 0xAC59, + 29721 - 11905: 0xAC5A, + 29722 - 11905: 0xE8A2, + 29723 - 11905: 0xE8A1, + 29724 - 11905: 0xAC5B, + 29725 - 11905: 0xAC5C, + 29726 - 11905: 0xAC5D, + 29727 - 11905: 0xAC5E, + 29728 - 11905: 0xAC5F, + 29729 - 11905: 0xAC60, + 29730 - 11905: 0xD7C1, + 29731 - 11905: 0xAC61, + 29732 - 11905: 0xAC62, + 29733 - 11905: 0xE7FA, + 29734 - 11905: 0xE7F9, + 29735 - 11905: 0xAC63, + 29736 - 11905: 0xE7FB, + 29737 - 11905: 0xAC64, + 29738 - 11905: 0xE7F7, + 29739 - 11905: 0xAC65, + 29740 - 11905: 0xE7FE, + 29741 - 11905: 0xAC66, + 29742 - 11905: 0xE7FD, + 29743 - 11905: 0xAC67, + 29744 - 11905: 0xE7FC, + 29745 - 11905: 0xAC68, + 29746 - 11905: 0xAC69, + 29747 - 11905: 0xC1D5, + 29748 - 11905: 0xC7D9, + 29749 - 11905: 0xC5FD, + 29750 - 11905: 0xC5C3, + 29751 - 11905: 0xAC6A, + 29752 - 11905: 0xAC6B, + 29753 - 11905: 0xAC6C, + 29754 - 11905: 0xAC6D, + 29755 - 11905: 0xAC6E, + 29756 - 11905: 0xC7ED, + 29757 - 11905: 0xAC6F, + 29758 - 11905: 0xAC70, + 29759 - 11905: 0xAC71, + 29760 - 11905: 0xAC72, + 29761 - 11905: 0xE8A3, + 29762 - 11905: 0xAC73, + 29763 - 11905: 0xAC74, + 29764 - 11905: 0xAC75, + 29765 - 11905: 0xAC76, + 29766 - 11905: 0xAC77, + 29767 - 11905: 0xAC78, + 29768 - 11905: 0xAC79, + 29769 - 11905: 0xAC7A, + 29770 - 11905: 0xAC7B, + 29771 - 11905: 0xAC7C, + 29772 - 11905: 0xAC7D, + 29773 - 11905: 0xAC7E, + 29774 - 11905: 0xAC80, + 29775 - 11905: 0xAC81, + 29776 - 11905: 0xAC82, + 29777 - 11905: 0xAC83, + 29778 - 11905: 0xAC84, + 29779 - 11905: 0xAC85, + 29780 - 11905: 0xAC86, + 29781 - 11905: 0xE8A6, + 29782 - 11905: 0xAC87, + 29783 - 11905: 0xE8A5, + 29784 - 11905: 0xAC88, + 29785 - 11905: 0xE8A7, + 29786 - 11905: 0xBAF7, + 29787 - 11905: 0xE7F8, + 29788 - 11905: 0xE8A4, + 29789 - 11905: 0xAC89, + 29790 - 11905: 0xC8F0, + 29791 - 11905: 0xC9AA, + 29792 - 11905: 0xAC8A, + 29793 - 11905: 0xAC8B, + 29794 - 11905: 0xAC8C, + 29795 - 11905: 0xAC8D, + 29796 - 11905: 0xAC8E, + 29797 - 11905: 0xAC8F, + 29798 - 11905: 0xAC90, + 29799 - 11905: 0xAC91, + 29800 - 11905: 0xAC92, + 29801 - 11905: 0xAC93, + 29802 - 11905: 0xAC94, + 29803 - 11905: 0xAC95, + 29804 - 11905: 0xAC96, + 29805 - 11905: 0xE8A9, + 29806 - 11905: 0xAC97, + 29807 - 11905: 0xAC98, + 29808 - 11905: 0xB9E5, + 29809 - 11905: 0xAC99, + 29810 - 11905: 0xAC9A, + 29811 - 11905: 0xAC9B, + 29812 - 11905: 0xAC9C, + 29813 - 11905: 0xAC9D, + 29814 - 11905: 0xD1FE, + 29815 - 11905: 0xE8A8, + 29816 - 11905: 0xAC9E, + 29817 - 11905: 0xAC9F, + 29818 - 11905: 0xACA0, + 29819 - 11905: 0xAD40, + 29820 - 11905: 0xAD41, + 29821 - 11905: 0xAD42, + 29822 - 11905: 0xE8AA, + 29823 - 11905: 0xAD43, + 29824 - 11905: 0xE8AD, + 29825 - 11905: 0xE8AE, + 29826 - 11905: 0xAD44, + 29827 - 11905: 0xC1A7, + 29828 - 11905: 0xAD45, + 29829 - 11905: 0xAD46, + 29830 - 11905: 0xAD47, + 29831 - 11905: 0xE8AF, + 29832 - 11905: 0xAD48, + 29833 - 11905: 0xAD49, + 29834 - 11905: 0xAD4A, + 29835 - 11905: 0xE8B0, + 29836 - 11905: 0xAD4B, + 29837 - 11905: 0xAD4C, + 29838 - 11905: 0xE8AC, + 29839 - 11905: 0xAD4D, + 29840 - 11905: 0xE8B4, + 29841 - 11905: 0xAD4E, + 29842 - 11905: 0xAD4F, + 29843 - 11905: 0xAD50, + 29844 - 11905: 0xAD51, + 29845 - 11905: 0xAD52, + 29846 - 11905: 0xAD53, + 29847 - 11905: 0xAD54, + 29848 - 11905: 0xAD55, + 29849 - 11905: 0xAD56, + 29850 - 11905: 0xAD57, + 29851 - 11905: 0xAD58, + 29852 - 11905: 0xE8AB, + 29853 - 11905: 0xAD59, + 29854 - 11905: 0xE8B1, + 29855 - 11905: 0xAD5A, + 29856 - 11905: 0xAD5B, + 29857 - 11905: 0xAD5C, + 29858 - 11905: 0xAD5D, + 29859 - 11905: 0xAD5E, + 29860 - 11905: 0xAD5F, + 29861 - 11905: 0xAD60, + 29862 - 11905: 0xAD61, + 29863 - 11905: 0xE8B5, + 29864 - 11905: 0xE8B2, + 29865 - 11905: 0xE8B3, + 29866 - 11905: 0xAD62, + 29867 - 11905: 0xAD63, + 29868 - 11905: 0xAD64, + 29869 - 11905: 0xAD65, + 29870 - 11905: 0xAD66, + 29871 - 11905: 0xAD67, + 29872 - 11905: 0xAD68, + 29873 - 11905: 0xAD69, + 29874 - 11905: 0xAD6A, + 29875 - 11905: 0xAD6B, + 29876 - 11905: 0xAD6C, + 29877 - 11905: 0xAD6D, + 29878 - 11905: 0xAD6E, + 29879 - 11905: 0xAD6F, + 29880 - 11905: 0xAD70, + 29881 - 11905: 0xAD71, + 29882 - 11905: 0xE8B7, + 29883 - 11905: 0xAD72, + 29884 - 11905: 0xAD73, + 29885 - 11905: 0xAD74, + 29886 - 11905: 0xAD75, + 29887 - 11905: 0xAD76, + 29888 - 11905: 0xAD77, + 29889 - 11905: 0xAD78, + 29890 - 11905: 0xAD79, + 29891 - 11905: 0xAD7A, + 29892 - 11905: 0xAD7B, + 29893 - 11905: 0xAD7C, + 29894 - 11905: 0xAD7D, + 29895 - 11905: 0xAD7E, + 29896 - 11905: 0xAD80, + 29897 - 11905: 0xAD81, + 29898 - 11905: 0xAD82, + 29899 - 11905: 0xAD83, + 29900 - 11905: 0xAD84, + 29901 - 11905: 0xAD85, + 29902 - 11905: 0xAD86, + 29903 - 11905: 0xAD87, + 29904 - 11905: 0xAD88, + 29905 - 11905: 0xAD89, + 29906 - 11905: 0xE8B6, + 29907 - 11905: 0xAD8A, + 29908 - 11905: 0xAD8B, + 29909 - 11905: 0xAD8C, + 29910 - 11905: 0xAD8D, + 29911 - 11905: 0xAD8E, + 29912 - 11905: 0xAD8F, + 29913 - 11905: 0xAD90, + 29914 - 11905: 0xAD91, + 29915 - 11905: 0xAD92, + 29916 - 11905: 0xB9CF, + 29917 - 11905: 0xAD93, + 29918 - 11905: 0xF0AC, + 29919 - 11905: 0xAD94, + 29920 - 11905: 0xF0AD, + 29921 - 11905: 0xAD95, + 29922 - 11905: 0xC6B0, + 29923 - 11905: 0xB0EA, + 29924 - 11905: 0xC8BF, + 29925 - 11905: 0xAD96, + 29926 - 11905: 0xCDDF, + 29927 - 11905: 0xAD97, + 29928 - 11905: 0xAD98, + 29929 - 11905: 0xAD99, + 29930 - 11905: 0xAD9A, + 29931 - 11905: 0xAD9B, + 29932 - 11905: 0xAD9C, + 29933 - 11905: 0xAD9D, + 29934 - 11905: 0xCECD, + 29935 - 11905: 0xEAB1, + 29936 - 11905: 0xAD9E, + 29937 - 11905: 0xAD9F, + 29938 - 11905: 0xADA0, + 29939 - 11905: 0xAE40, + 29940 - 11905: 0xEAB2, + 29941 - 11905: 0xAE41, + 29942 - 11905: 0xC6BF, + 29943 - 11905: 0xB4C9, + 29944 - 11905: 0xAE42, + 29945 - 11905: 0xAE43, + 29946 - 11905: 0xAE44, + 29947 - 11905: 0xAE45, + 29948 - 11905: 0xAE46, + 29949 - 11905: 0xAE47, + 29950 - 11905: 0xAE48, + 29951 - 11905: 0xEAB3, + 29952 - 11905: 0xAE49, + 29953 - 11905: 0xAE4A, + 29954 - 11905: 0xAE4B, + 29955 - 11905: 0xAE4C, + 29956 - 11905: 0xD5E7, + 29957 - 11905: 0xAE4D, + 29958 - 11905: 0xAE4E, + 29959 - 11905: 0xAE4F, + 29960 - 11905: 0xAE50, + 29961 - 11905: 0xAE51, + 29962 - 11905: 0xAE52, + 29963 - 11905: 0xAE53, + 29964 - 11905: 0xAE54, + 29965 - 11905: 0xDDF9, + 29966 - 11905: 0xAE55, + 29967 - 11905: 0xEAB4, + 29968 - 11905: 0xAE56, + 29969 - 11905: 0xEAB5, + 29970 - 11905: 0xAE57, + 29971 - 11905: 0xEAB6, + 29972 - 11905: 0xAE58, + 29973 - 11905: 0xAE59, + 29974 - 11905: 0xAE5A, + 29975 - 11905: 0xAE5B, + 29976 - 11905: 0xB8CA, + 29977 - 11905: 0xDFB0, + 29978 - 11905: 0xC9F5, + 29979 - 11905: 0xAE5C, + 29980 - 11905: 0xCCF0, + 29981 - 11905: 0xAE5D, + 29982 - 11905: 0xAE5E, + 29983 - 11905: 0xC9FA, + 29984 - 11905: 0xAE5F, + 29985 - 11905: 0xAE60, + 29986 - 11905: 0xAE61, + 29987 - 11905: 0xAE62, + 29988 - 11905: 0xAE63, + 29989 - 11905: 0xC9FB, + 29990 - 11905: 0xAE64, + 29991 - 11905: 0xAE65, + 29992 - 11905: 0xD3C3, + 29993 - 11905: 0xCBA6, + 29994 - 11905: 0xAE66, + 29995 - 11905: 0xB8A6, + 29996 - 11905: 0xF0AE, + 29997 - 11905: 0xB1C2, + 29998 - 11905: 0xAE67, + 29999 - 11905: 0xE5B8, + 30000 - 11905: 0xCCEF, + 30001 - 11905: 0xD3C9, + 30002 - 11905: 0xBCD7, + 30003 - 11905: 0xC9EA, + 30004 - 11905: 0xAE68, + 30005 - 11905: 0xB5E7, + 30006 - 11905: 0xAE69, + 30007 - 11905: 0xC4D0, + 30008 - 11905: 0xB5E9, + 30009 - 11905: 0xAE6A, + 30010 - 11905: 0xEEAE, + 30011 - 11905: 0xBBAD, + 30012 - 11905: 0xAE6B, + 30013 - 11905: 0xAE6C, + 30014 - 11905: 0xE7DE, + 30015 - 11905: 0xAE6D, + 30016 - 11905: 0xEEAF, + 30017 - 11905: 0xAE6E, + 30018 - 11905: 0xAE6F, + 30019 - 11905: 0xAE70, + 30020 - 11905: 0xAE71, + 30021 - 11905: 0xB3A9, + 30022 - 11905: 0xAE72, + 30023 - 11905: 0xAE73, + 30024 - 11905: 0xEEB2, + 30025 - 11905: 0xAE74, + 30026 - 11905: 0xAE75, + 30027 - 11905: 0xEEB1, + 30028 - 11905: 0xBDE7, + 30029 - 11905: 0xAE76, + 30030 - 11905: 0xEEB0, + 30031 - 11905: 0xCEB7, + 30032 - 11905: 0xAE77, + 30033 - 11905: 0xAE78, + 30034 - 11905: 0xAE79, + 30035 - 11905: 0xAE7A, + 30036 - 11905: 0xC5CF, + 30037 - 11905: 0xAE7B, + 30038 - 11905: 0xAE7C, + 30039 - 11905: 0xAE7D, + 30040 - 11905: 0xAE7E, + 30041 - 11905: 0xC1F4, + 30042 - 11905: 0xDBCE, + 30043 - 11905: 0xEEB3, + 30044 - 11905: 0xD0F3, + 30045 - 11905: 0xAE80, + 30046 - 11905: 0xAE81, + 30047 - 11905: 0xAE82, + 30048 - 11905: 0xAE83, + 30049 - 11905: 0xAE84, + 30050 - 11905: 0xAE85, + 30051 - 11905: 0xAE86, + 30052 - 11905: 0xAE87, + 30053 - 11905: 0xC2D4, + 30054 - 11905: 0xC6E8, + 30055 - 11905: 0xAE88, + 30056 - 11905: 0xAE89, + 30057 - 11905: 0xAE8A, + 30058 - 11905: 0xB7AC, + 30059 - 11905: 0xAE8B, + 30060 - 11905: 0xAE8C, + 30061 - 11905: 0xAE8D, + 30062 - 11905: 0xAE8E, + 30063 - 11905: 0xAE8F, + 30064 - 11905: 0xAE90, + 30065 - 11905: 0xAE91, + 30066 - 11905: 0xEEB4, + 30067 - 11905: 0xAE92, + 30068 - 11905: 0xB3EB, + 30069 - 11905: 0xAE93, + 30070 - 11905: 0xAE94, + 30071 - 11905: 0xAE95, + 30072 - 11905: 0xBBFB, + 30073 - 11905: 0xEEB5, + 30074 - 11905: 0xAE96, + 30075 - 11905: 0xAE97, + 30076 - 11905: 0xAE98, + 30077 - 11905: 0xAE99, + 30078 - 11905: 0xAE9A, + 30079 - 11905: 0xE7DC, + 30080 - 11905: 0xAE9B, + 30081 - 11905: 0xAE9C, + 30082 - 11905: 0xAE9D, + 30083 - 11905: 0xEEB6, + 30084 - 11905: 0xAE9E, + 30085 - 11905: 0xAE9F, + 30086 - 11905: 0xBDAE, + 30087 - 11905: 0xAEA0, + 30088 - 11905: 0xAF40, + 30089 - 11905: 0xAF41, + 30090 - 11905: 0xAF42, + 30091 - 11905: 0xF1E2, + 30092 - 11905: 0xAF43, + 30093 - 11905: 0xAF44, + 30094 - 11905: 0xAF45, + 30095 - 11905: 0xCAE8, + 30096 - 11905: 0xAF46, + 30097 - 11905: 0xD2C9, + 30098 - 11905: 0xF0DA, + 30099 - 11905: 0xAF47, + 30100 - 11905: 0xF0DB, + 30101 - 11905: 0xAF48, + 30102 - 11905: 0xF0DC, + 30103 - 11905: 0xC1C6, + 30104 - 11905: 0xAF49, + 30105 - 11905: 0xB8ED, + 30106 - 11905: 0xBECE, + 30107 - 11905: 0xAF4A, + 30108 - 11905: 0xAF4B, + 30109 - 11905: 0xF0DE, + 30110 - 11905: 0xAF4C, + 30111 - 11905: 0xC5B1, + 30112 - 11905: 0xF0DD, + 30113 - 11905: 0xD1F1, + 30114 - 11905: 0xAF4D, + 30115 - 11905: 0xF0E0, + 30116 - 11905: 0xB0CC, + 30117 - 11905: 0xBDEA, + 30118 - 11905: 0xAF4E, + 30119 - 11905: 0xAF4F, + 30120 - 11905: 0xAF50, + 30121 - 11905: 0xAF51, + 30122 - 11905: 0xAF52, + 30123 - 11905: 0xD2DF, + 30124 - 11905: 0xF0DF, + 30125 - 11905: 0xAF53, + 30126 - 11905: 0xB4AF, + 30127 - 11905: 0xB7E8, + 30128 - 11905: 0xF0E6, + 30129 - 11905: 0xF0E5, + 30130 - 11905: 0xC6A3, + 30131 - 11905: 0xF0E1, + 30132 - 11905: 0xF0E2, + 30133 - 11905: 0xB4C3, + 30134 - 11905: 0xAF54, + 30135 - 11905: 0xAF55, + 30136 - 11905: 0xF0E3, + 30137 - 11905: 0xD5EE, + 30138 - 11905: 0xAF56, + 30139 - 11905: 0xAF57, + 30140 - 11905: 0xCCDB, + 30141 - 11905: 0xBED2, + 30142 - 11905: 0xBCB2, + 30143 - 11905: 0xAF58, + 30144 - 11905: 0xAF59, + 30145 - 11905: 0xAF5A, + 30146 - 11905: 0xF0E8, + 30147 - 11905: 0xF0E7, + 30148 - 11905: 0xF0E4, + 30149 - 11905: 0xB2A1, + 30150 - 11905: 0xAF5B, + 30151 - 11905: 0xD6A2, + 30152 - 11905: 0xD3B8, + 30153 - 11905: 0xBEB7, + 30154 - 11905: 0xC8AC, + 30155 - 11905: 0xAF5C, + 30156 - 11905: 0xAF5D, + 30157 - 11905: 0xF0EA, + 30158 - 11905: 0xAF5E, + 30159 - 11905: 0xAF5F, + 30160 - 11905: 0xAF60, + 30161 - 11905: 0xAF61, + 30162 - 11905: 0xD1F7, + 30163 - 11905: 0xAF62, + 30164 - 11905: 0xD6CC, + 30165 - 11905: 0xBADB, + 30166 - 11905: 0xF0E9, + 30167 - 11905: 0xAF63, + 30168 - 11905: 0xB6BB, + 30169 - 11905: 0xAF64, + 30170 - 11905: 0xAF65, + 30171 - 11905: 0xCDB4, + 30172 - 11905: 0xAF66, + 30173 - 11905: 0xAF67, + 30174 - 11905: 0xC6A6, + 30175 - 11905: 0xAF68, + 30176 - 11905: 0xAF69, + 30177 - 11905: 0xAF6A, + 30178 - 11905: 0xC1A1, + 30179 - 11905: 0xF0EB, + 30180 - 11905: 0xF0EE, + 30181 - 11905: 0xAF6B, + 30182 - 11905: 0xF0ED, + 30183 - 11905: 0xF0F0, + 30184 - 11905: 0xF0EC, + 30185 - 11905: 0xAF6C, + 30186 - 11905: 0xBBBE, + 30187 - 11905: 0xF0EF, + 30188 - 11905: 0xAF6D, + 30189 - 11905: 0xAF6E, + 30190 - 11905: 0xAF6F, + 30191 - 11905: 0xAF70, + 30192 - 11905: 0xCCB5, + 30193 - 11905: 0xF0F2, + 30194 - 11905: 0xAF71, + 30195 - 11905: 0xAF72, + 30196 - 11905: 0xB3D5, + 30197 - 11905: 0xAF73, + 30198 - 11905: 0xAF74, + 30199 - 11905: 0xAF75, + 30200 - 11905: 0xAF76, + 30201 - 11905: 0xB1D4, + 30202 - 11905: 0xAF77, + 30203 - 11905: 0xAF78, + 30204 - 11905: 0xF0F3, + 30205 - 11905: 0xAF79, + 30206 - 11905: 0xAF7A, + 30207 - 11905: 0xF0F4, + 30208 - 11905: 0xF0F6, + 30209 - 11905: 0xB4E1, + 30210 - 11905: 0xAF7B, + 30211 - 11905: 0xF0F1, + 30212 - 11905: 0xAF7C, + 30213 - 11905: 0xF0F7, + 30214 - 11905: 0xAF7D, + 30215 - 11905: 0xAF7E, + 30216 - 11905: 0xAF80, + 30217 - 11905: 0xAF81, + 30218 - 11905: 0xF0FA, + 30219 - 11905: 0xAF82, + 30220 - 11905: 0xF0F8, + 30221 - 11905: 0xAF83, + 30222 - 11905: 0xAF84, + 30223 - 11905: 0xAF85, + 30224 - 11905: 0xF0F5, + 30225 - 11905: 0xAF86, + 30226 - 11905: 0xAF87, + 30227 - 11905: 0xAF88, + 30228 - 11905: 0xAF89, + 30229 - 11905: 0xF0FD, + 30230 - 11905: 0xAF8A, + 30231 - 11905: 0xF0F9, + 30232 - 11905: 0xF0FC, + 30233 - 11905: 0xF0FE, + 30234 - 11905: 0xAF8B, + 30235 - 11905: 0xF1A1, + 30236 - 11905: 0xAF8C, + 30237 - 11905: 0xAF8D, + 30238 - 11905: 0xAF8E, + 30239 - 11905: 0xCEC1, + 30240 - 11905: 0xF1A4, + 30241 - 11905: 0xAF8F, + 30242 - 11905: 0xF1A3, + 30243 - 11905: 0xAF90, + 30244 - 11905: 0xC1F6, + 30245 - 11905: 0xF0FB, + 30246 - 11905: 0xCADD, + 30247 - 11905: 0xAF91, + 30248 - 11905: 0xAF92, + 30249 - 11905: 0xB4F1, + 30250 - 11905: 0xB1F1, + 30251 - 11905: 0xCCB1, + 30252 - 11905: 0xAF93, + 30253 - 11905: 0xF1A6, + 30254 - 11905: 0xAF94, + 30255 - 11905: 0xAF95, + 30256 - 11905: 0xF1A7, + 30257 - 11905: 0xAF96, + 30258 - 11905: 0xAF97, + 30259 - 11905: 0xF1AC, + 30260 - 11905: 0xD5CE, + 30261 - 11905: 0xF1A9, + 30262 - 11905: 0xAF98, + 30263 - 11905: 0xAF99, + 30264 - 11905: 0xC8B3, + 30265 - 11905: 0xAF9A, + 30266 - 11905: 0xAF9B, + 30267 - 11905: 0xAF9C, + 30268 - 11905: 0xF1A2, + 30269 - 11905: 0xAF9D, + 30270 - 11905: 0xF1AB, + 30271 - 11905: 0xF1A8, + 30272 - 11905: 0xF1A5, + 30273 - 11905: 0xAF9E, + 30274 - 11905: 0xAF9F, + 30275 - 11905: 0xF1AA, + 30276 - 11905: 0xAFA0, + 30277 - 11905: 0xB040, + 30278 - 11905: 0xB041, + 30279 - 11905: 0xB042, + 30280 - 11905: 0xB043, + 30281 - 11905: 0xB044, + 30282 - 11905: 0xB045, + 30283 - 11905: 0xB046, + 30284 - 11905: 0xB0A9, + 30285 - 11905: 0xF1AD, + 30286 - 11905: 0xB047, + 30287 - 11905: 0xB048, + 30288 - 11905: 0xB049, + 30289 - 11905: 0xB04A, + 30290 - 11905: 0xB04B, + 30291 - 11905: 0xB04C, + 30292 - 11905: 0xF1AF, + 30293 - 11905: 0xB04D, + 30294 - 11905: 0xF1B1, + 30295 - 11905: 0xB04E, + 30296 - 11905: 0xB04F, + 30297 - 11905: 0xB050, + 30298 - 11905: 0xB051, + 30299 - 11905: 0xB052, + 30300 - 11905: 0xF1B0, + 30301 - 11905: 0xB053, + 30302 - 11905: 0xF1AE, + 30303 - 11905: 0xB054, + 30304 - 11905: 0xB055, + 30305 - 11905: 0xB056, + 30306 - 11905: 0xB057, + 30307 - 11905: 0xD1A2, + 30308 - 11905: 0xB058, + 30309 - 11905: 0xB059, + 30310 - 11905: 0xB05A, + 30311 - 11905: 0xB05B, + 30312 - 11905: 0xB05C, + 30313 - 11905: 0xB05D, + 30314 - 11905: 0xB05E, + 30315 - 11905: 0xF1B2, + 30316 - 11905: 0xB05F, + 30317 - 11905: 0xB060, + 30318 - 11905: 0xB061, + 30319 - 11905: 0xF1B3, + 30320 - 11905: 0xB062, + 30321 - 11905: 0xB063, + 30322 - 11905: 0xB064, + 30323 - 11905: 0xB065, + 30324 - 11905: 0xB066, + 30325 - 11905: 0xB067, + 30326 - 11905: 0xB068, + 30327 - 11905: 0xB069, + 30328 - 11905: 0xB9EF, + 30329 - 11905: 0xB06A, + 30330 - 11905: 0xB06B, + 30331 - 11905: 0xB5C7, + 30332 - 11905: 0xB06C, + 30333 - 11905: 0xB0D7, + 30334 - 11905: 0xB0D9, + 30335 - 11905: 0xB06D, + 30336 - 11905: 0xB06E, + 30337 - 11905: 0xB06F, + 30338 - 11905: 0xD4ED, + 30339 - 11905: 0xB070, + 30340 - 11905: 0xB5C4, + 30341 - 11905: 0xB071, + 30342 - 11905: 0xBDD4, + 30343 - 11905: 0xBBCA, + 30344 - 11905: 0xF0A7, + 30345 - 11905: 0xB072, + 30346 - 11905: 0xB073, + 30347 - 11905: 0xB8DE, + 30348 - 11905: 0xB074, + 30349 - 11905: 0xB075, + 30350 - 11905: 0xF0A8, + 30351 - 11905: 0xB076, + 30352 - 11905: 0xB077, + 30353 - 11905: 0xB0A8, + 30354 - 11905: 0xB078, + 30355 - 11905: 0xF0A9, + 30356 - 11905: 0xB079, + 30357 - 11905: 0xB07A, + 30358 - 11905: 0xCDEE, + 30359 - 11905: 0xB07B, + 30360 - 11905: 0xB07C, + 30361 - 11905: 0xF0AA, + 30362 - 11905: 0xB07D, + 30363 - 11905: 0xB07E, + 30364 - 11905: 0xB080, + 30365 - 11905: 0xB081, + 30366 - 11905: 0xB082, + 30367 - 11905: 0xB083, + 30368 - 11905: 0xB084, + 30369 - 11905: 0xB085, + 30370 - 11905: 0xB086, + 30371 - 11905: 0xB087, + 30372 - 11905: 0xF0AB, + 30373 - 11905: 0xB088, + 30374 - 11905: 0xB089, + 30375 - 11905: 0xB08A, + 30376 - 11905: 0xB08B, + 30377 - 11905: 0xB08C, + 30378 - 11905: 0xB08D, + 30379 - 11905: 0xB08E, + 30380 - 11905: 0xB08F, + 30381 - 11905: 0xB090, + 30382 - 11905: 0xC6A4, + 30383 - 11905: 0xB091, + 30384 - 11905: 0xB092, + 30385 - 11905: 0xD6E5, + 30386 - 11905: 0xF1E4, + 30387 - 11905: 0xB093, + 30388 - 11905: 0xF1E5, + 30389 - 11905: 0xB094, + 30390 - 11905: 0xB095, + 30391 - 11905: 0xB096, + 30392 - 11905: 0xB097, + 30393 - 11905: 0xB098, + 30394 - 11905: 0xB099, + 30395 - 11905: 0xB09A, + 30396 - 11905: 0xB09B, + 30397 - 11905: 0xB09C, + 30398 - 11905: 0xB09D, + 30399 - 11905: 0xC3F3, + 30400 - 11905: 0xB09E, + 30401 - 11905: 0xB09F, + 30402 - 11905: 0xD3DB, + 30403 - 11905: 0xB0A0, + 30404 - 11905: 0xB140, + 30405 - 11905: 0xD6D1, + 30406 - 11905: 0xC5E8, + 30407 - 11905: 0xB141, + 30408 - 11905: 0xD3AF, + 30409 - 11905: 0xB142, + 30410 - 11905: 0xD2E6, + 30411 - 11905: 0xB143, + 30412 - 11905: 0xB144, + 30413 - 11905: 0xEEC1, + 30414 - 11905: 0xB0BB, + 30415 - 11905: 0xD5B5, + 30416 - 11905: 0xD1CE, + 30417 - 11905: 0xBCE0, + 30418 - 11905: 0xBAD0, + 30419 - 11905: 0xB145, + 30420 - 11905: 0xBFF8, + 30421 - 11905: 0xB146, + 30422 - 11905: 0xB8C7, + 30423 - 11905: 0xB5C1, + 30424 - 11905: 0xC5CC, + 30425 - 11905: 0xB147, + 30426 - 11905: 0xB148, + 30427 - 11905: 0xCAA2, + 30428 - 11905: 0xB149, + 30429 - 11905: 0xB14A, + 30430 - 11905: 0xB14B, + 30431 - 11905: 0xC3CB, + 30432 - 11905: 0xB14C, + 30433 - 11905: 0xB14D, + 30434 - 11905: 0xB14E, + 30435 - 11905: 0xB14F, + 30436 - 11905: 0xB150, + 30437 - 11905: 0xEEC2, + 30438 - 11905: 0xB151, + 30439 - 11905: 0xB152, + 30440 - 11905: 0xB153, + 30441 - 11905: 0xB154, + 30442 - 11905: 0xB155, + 30443 - 11905: 0xB156, + 30444 - 11905: 0xB157, + 30445 - 11905: 0xB158, + 30446 - 11905: 0xC4BF, + 30447 - 11905: 0xB6A2, + 30448 - 11905: 0xB159, + 30449 - 11905: 0xEDEC, + 30450 - 11905: 0xC3A4, + 30451 - 11905: 0xB15A, + 30452 - 11905: 0xD6B1, + 30453 - 11905: 0xB15B, + 30454 - 11905: 0xB15C, + 30455 - 11905: 0xB15D, + 30456 - 11905: 0xCFE0, + 30457 - 11905: 0xEDEF, + 30458 - 11905: 0xB15E, + 30459 - 11905: 0xB15F, + 30460 - 11905: 0xC5CE, + 30461 - 11905: 0xB160, + 30462 - 11905: 0xB6DC, + 30463 - 11905: 0xB161, + 30464 - 11905: 0xB162, + 30465 - 11905: 0xCAA1, + 30466 - 11905: 0xB163, + 30467 - 11905: 0xB164, + 30468 - 11905: 0xEDED, + 30469 - 11905: 0xB165, + 30470 - 11905: 0xB166, + 30471 - 11905: 0xEDF0, + 30472 - 11905: 0xEDF1, + 30473 - 11905: 0xC3BC, + 30474 - 11905: 0xB167, + 30475 - 11905: 0xBFB4, + 30476 - 11905: 0xB168, + 30477 - 11905: 0xEDEE, + 30478 - 11905: 0xB169, + 30479 - 11905: 0xB16A, + 30480 - 11905: 0xB16B, + 30481 - 11905: 0xB16C, + 30482 - 11905: 0xB16D, + 30483 - 11905: 0xB16E, + 30484 - 11905: 0xB16F, + 30485 - 11905: 0xB170, + 30486 - 11905: 0xB171, + 30487 - 11905: 0xB172, + 30488 - 11905: 0xB173, + 30489 - 11905: 0xEDF4, + 30490 - 11905: 0xEDF2, + 30491 - 11905: 0xB174, + 30492 - 11905: 0xB175, + 30493 - 11905: 0xB176, + 30494 - 11905: 0xB177, + 30495 - 11905: 0xD5E6, + 30496 - 11905: 0xC3DF, + 30497 - 11905: 0xB178, + 30498 - 11905: 0xEDF3, + 30499 - 11905: 0xB179, + 30500 - 11905: 0xB17A, + 30501 - 11905: 0xB17B, + 30502 - 11905: 0xEDF6, + 30503 - 11905: 0xB17C, + 30504 - 11905: 0xD5A3, + 30505 - 11905: 0xD1A3, + 30506 - 11905: 0xB17D, + 30507 - 11905: 0xB17E, + 30508 - 11905: 0xB180, + 30509 - 11905: 0xEDF5, + 30510 - 11905: 0xB181, + 30511 - 11905: 0xC3D0, + 30512 - 11905: 0xB182, + 30513 - 11905: 0xB183, + 30514 - 11905: 0xB184, + 30515 - 11905: 0xB185, + 30516 - 11905: 0xB186, + 30517 - 11905: 0xEDF7, + 30518 - 11905: 0xBFF4, + 30519 - 11905: 0xBEEC, + 30520 - 11905: 0xEDF8, + 30521 - 11905: 0xB187, + 30522 - 11905: 0xCCF7, + 30523 - 11905: 0xB188, + 30524 - 11905: 0xD1DB, + 30525 - 11905: 0xB189, + 30526 - 11905: 0xB18A, + 30527 - 11905: 0xB18B, + 30528 - 11905: 0xD7C5, + 30529 - 11905: 0xD5F6, + 30530 - 11905: 0xB18C, + 30531 - 11905: 0xEDFC, + 30532 - 11905: 0xB18D, + 30533 - 11905: 0xB18E, + 30534 - 11905: 0xB18F, + 30535 - 11905: 0xEDFB, + 30536 - 11905: 0xB190, + 30537 - 11905: 0xB191, + 30538 - 11905: 0xB192, + 30539 - 11905: 0xB193, + 30540 - 11905: 0xB194, + 30541 - 11905: 0xB195, + 30542 - 11905: 0xB196, + 30543 - 11905: 0xB197, + 30544 - 11905: 0xEDF9, + 30545 - 11905: 0xEDFA, + 30546 - 11905: 0xB198, + 30547 - 11905: 0xB199, + 30548 - 11905: 0xB19A, + 30549 - 11905: 0xB19B, + 30550 - 11905: 0xB19C, + 30551 - 11905: 0xB19D, + 30552 - 11905: 0xB19E, + 30553 - 11905: 0xB19F, + 30554 - 11905: 0xEDFD, + 30555 - 11905: 0xBEA6, + 30556 - 11905: 0xB1A0, + 30557 - 11905: 0xB240, + 30558 - 11905: 0xB241, + 30559 - 11905: 0xB242, + 30560 - 11905: 0xB243, + 30561 - 11905: 0xCBAF, + 30562 - 11905: 0xEEA1, + 30563 - 11905: 0xB6BD, + 30564 - 11905: 0xB244, + 30565 - 11905: 0xEEA2, + 30566 - 11905: 0xC4C0, + 30567 - 11905: 0xB245, + 30568 - 11905: 0xEDFE, + 30569 - 11905: 0xB246, + 30570 - 11905: 0xB247, + 30571 - 11905: 0xBDDE, + 30572 - 11905: 0xB2C7, + 30573 - 11905: 0xB248, + 30574 - 11905: 0xB249, + 30575 - 11905: 0xB24A, + 30576 - 11905: 0xB24B, + 30577 - 11905: 0xB24C, + 30578 - 11905: 0xB24D, + 30579 - 11905: 0xB24E, + 30580 - 11905: 0xB24F, + 30581 - 11905: 0xB250, + 30582 - 11905: 0xB251, + 30583 - 11905: 0xB252, + 30584 - 11905: 0xB253, + 30585 - 11905: 0xB6C3, + 30586 - 11905: 0xB254, + 30587 - 11905: 0xB255, + 30588 - 11905: 0xB256, + 30589 - 11905: 0xEEA5, + 30590 - 11905: 0xD8BA, + 30591 - 11905: 0xEEA3, + 30592 - 11905: 0xEEA6, + 30593 - 11905: 0xB257, + 30594 - 11905: 0xB258, + 30595 - 11905: 0xB259, + 30596 - 11905: 0xC3E9, + 30597 - 11905: 0xB3F2, + 30598 - 11905: 0xB25A, + 30599 - 11905: 0xB25B, + 30600 - 11905: 0xB25C, + 30601 - 11905: 0xB25D, + 30602 - 11905: 0xB25E, + 30603 - 11905: 0xB25F, + 30604 - 11905: 0xEEA7, + 30605 - 11905: 0xEEA4, + 30606 - 11905: 0xCFB9, + 30607 - 11905: 0xB260, + 30608 - 11905: 0xB261, + 30609 - 11905: 0xEEA8, + 30610 - 11905: 0xC2F7, + 30611 - 11905: 0xB262, + 30612 - 11905: 0xB263, + 30613 - 11905: 0xB264, + 30614 - 11905: 0xB265, + 30615 - 11905: 0xB266, + 30616 - 11905: 0xB267, + 30617 - 11905: 0xB268, + 30618 - 11905: 0xB269, + 30619 - 11905: 0xB26A, + 30620 - 11905: 0xB26B, + 30621 - 11905: 0xB26C, + 30622 - 11905: 0xB26D, + 30623 - 11905: 0xEEA9, + 30624 - 11905: 0xEEAA, + 30625 - 11905: 0xB26E, + 30626 - 11905: 0xDEAB, + 30627 - 11905: 0xB26F, + 30628 - 11905: 0xB270, + 30629 - 11905: 0xC6B3, + 30630 - 11905: 0xB271, + 30631 - 11905: 0xC7C6, + 30632 - 11905: 0xB272, + 30633 - 11905: 0xD6F5, + 30634 - 11905: 0xB5C9, + 30635 - 11905: 0xB273, + 30636 - 11905: 0xCBB2, + 30637 - 11905: 0xB274, + 30638 - 11905: 0xB275, + 30639 - 11905: 0xB276, + 30640 - 11905: 0xEEAB, + 30641 - 11905: 0xB277, + 30642 - 11905: 0xB278, + 30643 - 11905: 0xCDAB, + 30644 - 11905: 0xB279, + 30645 - 11905: 0xEEAC, + 30646 - 11905: 0xB27A, + 30647 - 11905: 0xB27B, + 30648 - 11905: 0xB27C, + 30649 - 11905: 0xB27D, + 30650 - 11905: 0xB27E, + 30651 - 11905: 0xD5B0, + 30652 - 11905: 0xB280, + 30653 - 11905: 0xEEAD, + 30654 - 11905: 0xB281, + 30655 - 11905: 0xF6C4, + 30656 - 11905: 0xB282, + 30657 - 11905: 0xB283, + 30658 - 11905: 0xB284, + 30659 - 11905: 0xB285, + 30660 - 11905: 0xB286, + 30661 - 11905: 0xB287, + 30662 - 11905: 0xB288, + 30663 - 11905: 0xB289, + 30664 - 11905: 0xB28A, + 30665 - 11905: 0xB28B, + 30666 - 11905: 0xB28C, + 30667 - 11905: 0xB28D, + 30668 - 11905: 0xB28E, + 30669 - 11905: 0xDBC7, + 30670 - 11905: 0xB28F, + 30671 - 11905: 0xB290, + 30672 - 11905: 0xB291, + 30673 - 11905: 0xB292, + 30674 - 11905: 0xB293, + 30675 - 11905: 0xB294, + 30676 - 11905: 0xB295, + 30677 - 11905: 0xB296, + 30678 - 11905: 0xB297, + 30679 - 11905: 0xB4A3, + 30680 - 11905: 0xB298, + 30681 - 11905: 0xB299, + 30682 - 11905: 0xB29A, + 30683 - 11905: 0xC3AC, + 30684 - 11905: 0xF1E6, + 30685 - 11905: 0xB29B, + 30686 - 11905: 0xB29C, + 30687 - 11905: 0xB29D, + 30688 - 11905: 0xB29E, + 30689 - 11905: 0xB29F, + 30690 - 11905: 0xCAB8, + 30691 - 11905: 0xD2D3, + 30692 - 11905: 0xB2A0, + 30693 - 11905: 0xD6AA, + 30694 - 11905: 0xB340, + 30695 - 11905: 0xEFF2, + 30696 - 11905: 0xB341, + 30697 - 11905: 0xBED8, + 30698 - 11905: 0xB342, + 30699 - 11905: 0xBDC3, + 30700 - 11905: 0xEFF3, + 30701 - 11905: 0xB6CC, + 30702 - 11905: 0xB0AB, + 30703 - 11905: 0xB343, + 30704 - 11905: 0xB344, + 30705 - 11905: 0xB345, + 30706 - 11905: 0xB346, + 30707 - 11905: 0xCAAF, + 30708 - 11905: 0xB347, + 30709 - 11905: 0xB348, + 30710 - 11905: 0xEDB6, + 30711 - 11905: 0xB349, + 30712 - 11905: 0xEDB7, + 30713 - 11905: 0xB34A, + 30714 - 11905: 0xB34B, + 30715 - 11905: 0xB34C, + 30716 - 11905: 0xB34D, + 30717 - 11905: 0xCEF9, + 30718 - 11905: 0xB7AF, + 30719 - 11905: 0xBFF3, + 30720 - 11905: 0xEDB8, + 30721 - 11905: 0xC2EB, + 30722 - 11905: 0xC9B0, + 30723 - 11905: 0xB34E, + 30724 - 11905: 0xB34F, + 30725 - 11905: 0xB350, + 30726 - 11905: 0xB351, + 30727 - 11905: 0xB352, + 30728 - 11905: 0xB353, + 30729 - 11905: 0xEDB9, + 30730 - 11905: 0xB354, + 30731 - 11905: 0xB355, + 30732 - 11905: 0xC6F6, + 30733 - 11905: 0xBFB3, + 30734 - 11905: 0xB356, + 30735 - 11905: 0xB357, + 30736 - 11905: 0xB358, + 30737 - 11905: 0xEDBC, + 30738 - 11905: 0xC5F8, + 30739 - 11905: 0xB359, + 30740 - 11905: 0xD1D0, + 30741 - 11905: 0xB35A, + 30742 - 11905: 0xD7A9, + 30743 - 11905: 0xEDBA, + 30744 - 11905: 0xEDBB, + 30745 - 11905: 0xB35B, + 30746 - 11905: 0xD1E2, + 30747 - 11905: 0xB35C, + 30748 - 11905: 0xEDBF, + 30749 - 11905: 0xEDC0, + 30750 - 11905: 0xB35D, + 30751 - 11905: 0xEDC4, + 30752 - 11905: 0xB35E, + 30753 - 11905: 0xB35F, + 30754 - 11905: 0xB360, + 30755 - 11905: 0xEDC8, + 30756 - 11905: 0xB361, + 30757 - 11905: 0xEDC6, + 30758 - 11905: 0xEDCE, + 30759 - 11905: 0xD5E8, + 30760 - 11905: 0xB362, + 30761 - 11905: 0xEDC9, + 30762 - 11905: 0xB363, + 30763 - 11905: 0xB364, + 30764 - 11905: 0xEDC7, + 30765 - 11905: 0xEDBE, + 30766 - 11905: 0xB365, + 30767 - 11905: 0xB366, + 30768 - 11905: 0xC5E9, + 30769 - 11905: 0xB367, + 30770 - 11905: 0xB368, + 30771 - 11905: 0xB369, + 30772 - 11905: 0xC6C6, + 30773 - 11905: 0xB36A, + 30774 - 11905: 0xB36B, + 30775 - 11905: 0xC9E9, + 30776 - 11905: 0xD4D2, + 30777 - 11905: 0xEDC1, + 30778 - 11905: 0xEDC2, + 30779 - 11905: 0xEDC3, + 30780 - 11905: 0xEDC5, + 30781 - 11905: 0xB36C, + 30782 - 11905: 0xC0F9, + 30783 - 11905: 0xB36D, + 30784 - 11905: 0xB4A1, + 30785 - 11905: 0xB36E, + 30786 - 11905: 0xB36F, + 30787 - 11905: 0xB370, + 30788 - 11905: 0xB371, + 30789 - 11905: 0xB9E8, + 30790 - 11905: 0xB372, + 30791 - 11905: 0xEDD0, + 30792 - 11905: 0xB373, + 30793 - 11905: 0xB374, + 30794 - 11905: 0xB375, + 30795 - 11905: 0xB376, + 30796 - 11905: 0xEDD1, + 30797 - 11905: 0xB377, + 30798 - 11905: 0xEDCA, + 30799 - 11905: 0xB378, + 30800 - 11905: 0xEDCF, + 30801 - 11905: 0xB379, + 30802 - 11905: 0xCEF8, + 30803 - 11905: 0xB37A, + 30804 - 11905: 0xB37B, + 30805 - 11905: 0xCBB6, + 30806 - 11905: 0xEDCC, + 30807 - 11905: 0xEDCD, + 30808 - 11905: 0xB37C, + 30809 - 11905: 0xB37D, + 30810 - 11905: 0xB37E, + 30811 - 11905: 0xB380, + 30812 - 11905: 0xB381, + 30813 - 11905: 0xCFF5, + 30814 - 11905: 0xB382, + 30815 - 11905: 0xB383, + 30816 - 11905: 0xB384, + 30817 - 11905: 0xB385, + 30818 - 11905: 0xB386, + 30819 - 11905: 0xB387, + 30820 - 11905: 0xB388, + 30821 - 11905: 0xB389, + 30822 - 11905: 0xB38A, + 30823 - 11905: 0xB38B, + 30824 - 11905: 0xB38C, + 30825 - 11905: 0xB38D, + 30826 - 11905: 0xEDD2, + 30827 - 11905: 0xC1F2, + 30828 - 11905: 0xD3B2, + 30829 - 11905: 0xEDCB, + 30830 - 11905: 0xC8B7, + 30831 - 11905: 0xB38E, + 30832 - 11905: 0xB38F, + 30833 - 11905: 0xB390, + 30834 - 11905: 0xB391, + 30835 - 11905: 0xB392, + 30836 - 11905: 0xB393, + 30837 - 11905: 0xB394, + 30838 - 11905: 0xB395, + 30839 - 11905: 0xBCEF, + 30840 - 11905: 0xB396, + 30841 - 11905: 0xB397, + 30842 - 11905: 0xB398, + 30843 - 11905: 0xB399, + 30844 - 11905: 0xC5F0, + 30845 - 11905: 0xB39A, + 30846 - 11905: 0xB39B, + 30847 - 11905: 0xB39C, + 30848 - 11905: 0xB39D, + 30849 - 11905: 0xB39E, + 30850 - 11905: 0xB39F, + 30851 - 11905: 0xB3A0, + 30852 - 11905: 0xB440, + 30853 - 11905: 0xB441, + 30854 - 11905: 0xB442, + 30855 - 11905: 0xEDD6, + 30856 - 11905: 0xB443, + 30857 - 11905: 0xB5EF, + 30858 - 11905: 0xB444, + 30859 - 11905: 0xB445, + 30860 - 11905: 0xC2B5, + 30861 - 11905: 0xB0AD, + 30862 - 11905: 0xCBE9, + 30863 - 11905: 0xB446, + 30864 - 11905: 0xB447, + 30865 - 11905: 0xB1AE, + 30866 - 11905: 0xB448, + 30867 - 11905: 0xEDD4, + 30868 - 11905: 0xB449, + 30869 - 11905: 0xB44A, + 30870 - 11905: 0xB44B, + 30871 - 11905: 0xCDEB, + 30872 - 11905: 0xB5E2, + 30873 - 11905: 0xB44C, + 30874 - 11905: 0xEDD5, + 30875 - 11905: 0xEDD3, + 30876 - 11905: 0xEDD7, + 30877 - 11905: 0xB44D, + 30878 - 11905: 0xB44E, + 30879 - 11905: 0xB5FA, + 30880 - 11905: 0xB44F, + 30881 - 11905: 0xEDD8, + 30882 - 11905: 0xB450, + 30883 - 11905: 0xEDD9, + 30884 - 11905: 0xB451, + 30885 - 11905: 0xEDDC, + 30886 - 11905: 0xB452, + 30887 - 11905: 0xB1CC, + 30888 - 11905: 0xB453, + 30889 - 11905: 0xB454, + 30890 - 11905: 0xB455, + 30891 - 11905: 0xB456, + 30892 - 11905: 0xB457, + 30893 - 11905: 0xB458, + 30894 - 11905: 0xB459, + 30895 - 11905: 0xB45A, + 30896 - 11905: 0xC5F6, + 30897 - 11905: 0xBCEE, + 30898 - 11905: 0xEDDA, + 30899 - 11905: 0xCCBC, + 30900 - 11905: 0xB2EA, + 30901 - 11905: 0xB45B, + 30902 - 11905: 0xB45C, + 30903 - 11905: 0xB45D, + 30904 - 11905: 0xB45E, + 30905 - 11905: 0xEDDB, + 30906 - 11905: 0xB45F, + 30907 - 11905: 0xB460, + 30908 - 11905: 0xB461, + 30909 - 11905: 0xB462, + 30910 - 11905: 0xC4EB, + 30911 - 11905: 0xB463, + 30912 - 11905: 0xB464, + 30913 - 11905: 0xB4C5, + 30914 - 11905: 0xB465, + 30915 - 11905: 0xB466, + 30916 - 11905: 0xB467, + 30917 - 11905: 0xB0F5, + 30918 - 11905: 0xB468, + 30919 - 11905: 0xB469, + 30920 - 11905: 0xB46A, + 30921 - 11905: 0xEDDF, + 30922 - 11905: 0xC0DA, + 30923 - 11905: 0xB4E8, + 30924 - 11905: 0xB46B, + 30925 - 11905: 0xB46C, + 30926 - 11905: 0xB46D, + 30927 - 11905: 0xB46E, + 30928 - 11905: 0xC5CD, + 30929 - 11905: 0xB46F, + 30930 - 11905: 0xB470, + 30931 - 11905: 0xB471, + 30932 - 11905: 0xEDDD, + 30933 - 11905: 0xBFC4, + 30934 - 11905: 0xB472, + 30935 - 11905: 0xB473, + 30936 - 11905: 0xB474, + 30937 - 11905: 0xEDDE, + 30938 - 11905: 0xB475, + 30939 - 11905: 0xB476, + 30940 - 11905: 0xB477, + 30941 - 11905: 0xB478, + 30942 - 11905: 0xB479, + 30943 - 11905: 0xB47A, + 30944 - 11905: 0xB47B, + 30945 - 11905: 0xB47C, + 30946 - 11905: 0xB47D, + 30947 - 11905: 0xB47E, + 30948 - 11905: 0xB480, + 30949 - 11905: 0xB481, + 30950 - 11905: 0xB482, + 30951 - 11905: 0xB483, + 30952 - 11905: 0xC4A5, + 30953 - 11905: 0xB484, + 30954 - 11905: 0xB485, + 30955 - 11905: 0xB486, + 30956 - 11905: 0xEDE0, + 30957 - 11905: 0xB487, + 30958 - 11905: 0xB488, + 30959 - 11905: 0xB489, + 30960 - 11905: 0xB48A, + 30961 - 11905: 0xB48B, + 30962 - 11905: 0xEDE1, + 30963 - 11905: 0xB48C, + 30964 - 11905: 0xEDE3, + 30965 - 11905: 0xB48D, + 30966 - 11905: 0xB48E, + 30967 - 11905: 0xC1D7, + 30968 - 11905: 0xB48F, + 30969 - 11905: 0xB490, + 30970 - 11905: 0xBBC7, + 30971 - 11905: 0xB491, + 30972 - 11905: 0xB492, + 30973 - 11905: 0xB493, + 30974 - 11905: 0xB494, + 30975 - 11905: 0xB495, + 30976 - 11905: 0xB496, + 30977 - 11905: 0xBDB8, + 30978 - 11905: 0xB497, + 30979 - 11905: 0xB498, + 30980 - 11905: 0xB499, + 30981 - 11905: 0xEDE2, + 30982 - 11905: 0xB49A, + 30983 - 11905: 0xB49B, + 30984 - 11905: 0xB49C, + 30985 - 11905: 0xB49D, + 30986 - 11905: 0xB49E, + 30987 - 11905: 0xB49F, + 30988 - 11905: 0xB4A0, + 30989 - 11905: 0xB540, + 30990 - 11905: 0xB541, + 30991 - 11905: 0xB542, + 30992 - 11905: 0xB543, + 30993 - 11905: 0xB544, + 30994 - 11905: 0xB545, + 30995 - 11905: 0xEDE4, + 30996 - 11905: 0xB546, + 30997 - 11905: 0xB547, + 30998 - 11905: 0xB548, + 30999 - 11905: 0xB549, + 31000 - 11905: 0xB54A, + 31001 - 11905: 0xB54B, + 31002 - 11905: 0xB54C, + 31003 - 11905: 0xB54D, + 31004 - 11905: 0xB54E, + 31005 - 11905: 0xB54F, + 31006 - 11905: 0xEDE6, + 31007 - 11905: 0xB550, + 31008 - 11905: 0xB551, + 31009 - 11905: 0xB552, + 31010 - 11905: 0xB553, + 31011 - 11905: 0xB554, + 31012 - 11905: 0xEDE5, + 31013 - 11905: 0xB555, + 31014 - 11905: 0xB556, + 31015 - 11905: 0xB557, + 31016 - 11905: 0xB558, + 31017 - 11905: 0xB559, + 31018 - 11905: 0xB55A, + 31019 - 11905: 0xB55B, + 31020 - 11905: 0xB55C, + 31021 - 11905: 0xB55D, + 31022 - 11905: 0xB55E, + 31023 - 11905: 0xB55F, + 31024 - 11905: 0xB560, + 31025 - 11905: 0xB561, + 31026 - 11905: 0xB562, + 31027 - 11905: 0xB563, + 31028 - 11905: 0xEDE7, + 31029 - 11905: 0xB564, + 31030 - 11905: 0xB565, + 31031 - 11905: 0xB566, + 31032 - 11905: 0xB567, + 31033 - 11905: 0xB568, + 31034 - 11905: 0xCABE, + 31035 - 11905: 0xECEA, + 31036 - 11905: 0xC0F1, + 31037 - 11905: 0xB569, + 31038 - 11905: 0xC9E7, + 31039 - 11905: 0xB56A, + 31040 - 11905: 0xECEB, + 31041 - 11905: 0xC6EE, + 31042 - 11905: 0xB56B, + 31043 - 11905: 0xB56C, + 31044 - 11905: 0xB56D, + 31045 - 11905: 0xB56E, + 31046 - 11905: 0xECEC, + 31047 - 11905: 0xB56F, + 31048 - 11905: 0xC6ED, + 31049 - 11905: 0xECED, + 31050 - 11905: 0xB570, + 31051 - 11905: 0xB571, + 31052 - 11905: 0xB572, + 31053 - 11905: 0xB573, + 31054 - 11905: 0xB574, + 31055 - 11905: 0xB575, + 31056 - 11905: 0xB576, + 31057 - 11905: 0xB577, + 31058 - 11905: 0xB578, + 31059 - 11905: 0xECF0, + 31060 - 11905: 0xB579, + 31061 - 11905: 0xB57A, + 31062 - 11905: 0xD7E6, + 31063 - 11905: 0xECF3, + 31064 - 11905: 0xB57B, + 31065 - 11905: 0xB57C, + 31066 - 11905: 0xECF1, + 31067 - 11905: 0xECEE, + 31068 - 11905: 0xECEF, + 31069 - 11905: 0xD7A3, + 31070 - 11905: 0xC9F1, + 31071 - 11905: 0xCBEE, + 31072 - 11905: 0xECF4, + 31073 - 11905: 0xB57D, + 31074 - 11905: 0xECF2, + 31075 - 11905: 0xB57E, + 31076 - 11905: 0xB580, + 31077 - 11905: 0xCFE9, + 31078 - 11905: 0xB581, + 31079 - 11905: 0xECF6, + 31080 - 11905: 0xC6B1, + 31081 - 11905: 0xB582, + 31082 - 11905: 0xB583, + 31083 - 11905: 0xB584, + 31084 - 11905: 0xB585, + 31085 - 11905: 0xBCC0, + 31086 - 11905: 0xB586, + 31087 - 11905: 0xECF5, + 31088 - 11905: 0xB587, + 31089 - 11905: 0xB588, + 31090 - 11905: 0xB589, + 31091 - 11905: 0xB58A, + 31092 - 11905: 0xB58B, + 31093 - 11905: 0xB58C, + 31094 - 11905: 0xB58D, + 31095 - 11905: 0xB5BB, + 31096 - 11905: 0xBBF6, + 31097 - 11905: 0xB58E, + 31098 - 11905: 0xECF7, + 31099 - 11905: 0xB58F, + 31100 - 11905: 0xB590, + 31101 - 11905: 0xB591, + 31102 - 11905: 0xB592, + 31103 - 11905: 0xB593, + 31104 - 11905: 0xD9F7, + 31105 - 11905: 0xBDFB, + 31106 - 11905: 0xB594, + 31107 - 11905: 0xB595, + 31108 - 11905: 0xC2BB, + 31109 - 11905: 0xECF8, + 31110 - 11905: 0xB596, + 31111 - 11905: 0xB597, + 31112 - 11905: 0xB598, + 31113 - 11905: 0xB599, + 31114 - 11905: 0xECF9, + 31115 - 11905: 0xB59A, + 31116 - 11905: 0xB59B, + 31117 - 11905: 0xB59C, + 31118 - 11905: 0xB59D, + 31119 - 11905: 0xB8A3, + 31120 - 11905: 0xB59E, + 31121 - 11905: 0xB59F, + 31122 - 11905: 0xB5A0, + 31123 - 11905: 0xB640, + 31124 - 11905: 0xB641, + 31125 - 11905: 0xB642, + 31126 - 11905: 0xB643, + 31127 - 11905: 0xB644, + 31128 - 11905: 0xB645, + 31129 - 11905: 0xB646, + 31130 - 11905: 0xECFA, + 31131 - 11905: 0xB647, + 31132 - 11905: 0xB648, + 31133 - 11905: 0xB649, + 31134 - 11905: 0xB64A, + 31135 - 11905: 0xB64B, + 31136 - 11905: 0xB64C, + 31137 - 11905: 0xB64D, + 31138 - 11905: 0xB64E, + 31139 - 11905: 0xB64F, + 31140 - 11905: 0xB650, + 31141 - 11905: 0xB651, + 31142 - 11905: 0xB652, + 31143 - 11905: 0xECFB, + 31144 - 11905: 0xB653, + 31145 - 11905: 0xB654, + 31146 - 11905: 0xB655, + 31147 - 11905: 0xB656, + 31148 - 11905: 0xB657, + 31149 - 11905: 0xB658, + 31150 - 11905: 0xB659, + 31151 - 11905: 0xB65A, + 31152 - 11905: 0xB65B, + 31153 - 11905: 0xB65C, + 31154 - 11905: 0xB65D, + 31155 - 11905: 0xECFC, + 31156 - 11905: 0xB65E, + 31157 - 11905: 0xB65F, + 31158 - 11905: 0xB660, + 31159 - 11905: 0xB661, + 31160 - 11905: 0xB662, + 31161 - 11905: 0xD3ED, + 31162 - 11905: 0xD8AE, + 31163 - 11905: 0xC0EB, + 31164 - 11905: 0xB663, + 31165 - 11905: 0xC7DD, + 31166 - 11905: 0xBACC, + 31167 - 11905: 0xB664, + 31168 - 11905: 0xD0E3, + 31169 - 11905: 0xCBBD, + 31170 - 11905: 0xB665, + 31171 - 11905: 0xCDBA, + 31172 - 11905: 0xB666, + 31173 - 11905: 0xB667, + 31174 - 11905: 0xB8D1, + 31175 - 11905: 0xB668, + 31176 - 11905: 0xB669, + 31177 - 11905: 0xB1FC, + 31178 - 11905: 0xB66A, + 31179 - 11905: 0xC7EF, + 31180 - 11905: 0xB66B, + 31181 - 11905: 0xD6D6, + 31182 - 11905: 0xB66C, + 31183 - 11905: 0xB66D, + 31184 - 11905: 0xB66E, + 31185 - 11905: 0xBFC6, + 31186 - 11905: 0xC3EB, + 31187 - 11905: 0xB66F, + 31188 - 11905: 0xB670, + 31189 - 11905: 0xEFF5, + 31190 - 11905: 0xB671, + 31191 - 11905: 0xB672, + 31192 - 11905: 0xC3D8, + 31193 - 11905: 0xB673, + 31194 - 11905: 0xB674, + 31195 - 11905: 0xB675, + 31196 - 11905: 0xB676, + 31197 - 11905: 0xB677, + 31198 - 11905: 0xB678, + 31199 - 11905: 0xD7E2, + 31200 - 11905: 0xB679, + 31201 - 11905: 0xB67A, + 31202 - 11905: 0xB67B, + 31203 - 11905: 0xEFF7, + 31204 - 11905: 0xB3D3, + 31205 - 11905: 0xB67C, + 31206 - 11905: 0xC7D8, + 31207 - 11905: 0xD1ED, + 31208 - 11905: 0xB67D, + 31209 - 11905: 0xD6C8, + 31210 - 11905: 0xB67E, + 31211 - 11905: 0xEFF8, + 31212 - 11905: 0xB680, + 31213 - 11905: 0xEFF6, + 31214 - 11905: 0xB681, + 31215 - 11905: 0xBBFD, + 31216 - 11905: 0xB3C6, + 31217 - 11905: 0xB682, + 31218 - 11905: 0xB683, + 31219 - 11905: 0xB684, + 31220 - 11905: 0xB685, + 31221 - 11905: 0xB686, + 31222 - 11905: 0xB687, + 31223 - 11905: 0xB688, + 31224 - 11905: 0xBDD5, + 31225 - 11905: 0xB689, + 31226 - 11905: 0xB68A, + 31227 - 11905: 0xD2C6, + 31228 - 11905: 0xB68B, + 31229 - 11905: 0xBBE0, + 31230 - 11905: 0xB68C, + 31231 - 11905: 0xB68D, + 31232 - 11905: 0xCFA1, + 31233 - 11905: 0xB68E, + 31234 - 11905: 0xEFFC, + 31235 - 11905: 0xEFFB, + 31236 - 11905: 0xB68F, + 31237 - 11905: 0xB690, + 31238 - 11905: 0xEFF9, + 31239 - 11905: 0xB691, + 31240 - 11905: 0xB692, + 31241 - 11905: 0xB693, + 31242 - 11905: 0xB694, + 31243 - 11905: 0xB3CC, + 31244 - 11905: 0xB695, + 31245 - 11905: 0xC9D4, + 31246 - 11905: 0xCBB0, + 31247 - 11905: 0xB696, + 31248 - 11905: 0xB697, + 31249 - 11905: 0xB698, + 31250 - 11905: 0xB699, + 31251 - 11905: 0xB69A, + 31252 - 11905: 0xEFFE, + 31253 - 11905: 0xB69B, + 31254 - 11905: 0xB69C, + 31255 - 11905: 0xB0DE, + 31256 - 11905: 0xB69D, + 31257 - 11905: 0xB69E, + 31258 - 11905: 0xD6C9, + 31259 - 11905: 0xB69F, + 31260 - 11905: 0xB6A0, + 31261 - 11905: 0xB740, + 31262 - 11905: 0xEFFD, + 31263 - 11905: 0xB741, + 31264 - 11905: 0xB3ED, + 31265 - 11905: 0xB742, + 31266 - 11905: 0xB743, + 31267 - 11905: 0xF6D5, + 31268 - 11905: 0xB744, + 31269 - 11905: 0xB745, + 31270 - 11905: 0xB746, + 31271 - 11905: 0xB747, + 31272 - 11905: 0xB748, + 31273 - 11905: 0xB749, + 31274 - 11905: 0xB74A, + 31275 - 11905: 0xB74B, + 31276 - 11905: 0xB74C, + 31277 - 11905: 0xB74D, + 31278 - 11905: 0xB74E, + 31279 - 11905: 0xB74F, + 31280 - 11905: 0xB750, + 31281 - 11905: 0xB751, + 31282 - 11905: 0xB752, + 31283 - 11905: 0xCEC8, + 31284 - 11905: 0xB753, + 31285 - 11905: 0xB754, + 31286 - 11905: 0xB755, + 31287 - 11905: 0xF0A2, + 31288 - 11905: 0xB756, + 31289 - 11905: 0xF0A1, + 31290 - 11905: 0xB757, + 31291 - 11905: 0xB5BE, + 31292 - 11905: 0xBCDA, + 31293 - 11905: 0xBBFC, + 31294 - 11905: 0xB758, + 31295 - 11905: 0xB8E5, + 31296 - 11905: 0xB759, + 31297 - 11905: 0xB75A, + 31298 - 11905: 0xB75B, + 31299 - 11905: 0xB75C, + 31300 - 11905: 0xB75D, + 31301 - 11905: 0xB75E, + 31302 - 11905: 0xC4C2, + 31303 - 11905: 0xB75F, + 31304 - 11905: 0xB760, + 31305 - 11905: 0xB761, + 31306 - 11905: 0xB762, + 31307 - 11905: 0xB763, + 31308 - 11905: 0xB764, + 31309 - 11905: 0xB765, + 31310 - 11905: 0xB766, + 31311 - 11905: 0xB767, + 31312 - 11905: 0xB768, + 31313 - 11905: 0xF0A3, + 31314 - 11905: 0xB769, + 31315 - 11905: 0xB76A, + 31316 - 11905: 0xB76B, + 31317 - 11905: 0xB76C, + 31318 - 11905: 0xB76D, + 31319 - 11905: 0xCBEB, + 31320 - 11905: 0xB76E, + 31321 - 11905: 0xB76F, + 31322 - 11905: 0xB770, + 31323 - 11905: 0xB771, + 31324 - 11905: 0xB772, + 31325 - 11905: 0xB773, + 31326 - 11905: 0xB774, + 31327 - 11905: 0xB775, + 31328 - 11905: 0xB776, + 31329 - 11905: 0xB777, + 31330 - 11905: 0xB778, + 31331 - 11905: 0xB779, + 31332 - 11905: 0xB77A, + 31333 - 11905: 0xB77B, + 31334 - 11905: 0xB77C, + 31335 - 11905: 0xB77D, + 31336 - 11905: 0xB77E, + 31337 - 11905: 0xB780, + 31338 - 11905: 0xB781, + 31339 - 11905: 0xB782, + 31340 - 11905: 0xB783, + 31341 - 11905: 0xB784, + 31342 - 11905: 0xB785, + 31343 - 11905: 0xB786, + 31344 - 11905: 0xF0A6, + 31345 - 11905: 0xB787, + 31346 - 11905: 0xB788, + 31347 - 11905: 0xB789, + 31348 - 11905: 0xD1A8, + 31349 - 11905: 0xB78A, + 31350 - 11905: 0xBEBF, + 31351 - 11905: 0xC7EE, + 31352 - 11905: 0xF1B6, + 31353 - 11905: 0xF1B7, + 31354 - 11905: 0xBFD5, + 31355 - 11905: 0xB78B, + 31356 - 11905: 0xB78C, + 31357 - 11905: 0xB78D, + 31358 - 11905: 0xB78E, + 31359 - 11905: 0xB4A9, + 31360 - 11905: 0xF1B8, + 31361 - 11905: 0xCDBB, + 31362 - 11905: 0xB78F, + 31363 - 11905: 0xC7D4, + 31364 - 11905: 0xD5AD, + 31365 - 11905: 0xB790, + 31366 - 11905: 0xF1B9, + 31367 - 11905: 0xB791, + 31368 - 11905: 0xF1BA, + 31369 - 11905: 0xB792, + 31370 - 11905: 0xB793, + 31371 - 11905: 0xB794, + 31372 - 11905: 0xB795, + 31373 - 11905: 0xC7CF, + 31374 - 11905: 0xB796, + 31375 - 11905: 0xB797, + 31376 - 11905: 0xB798, + 31377 - 11905: 0xD2A4, + 31378 - 11905: 0xD6CF, + 31379 - 11905: 0xB799, + 31380 - 11905: 0xB79A, + 31381 - 11905: 0xF1BB, + 31382 - 11905: 0xBDD1, + 31383 - 11905: 0xB4B0, + 31384 - 11905: 0xBEBD, + 31385 - 11905: 0xB79B, + 31386 - 11905: 0xB79C, + 31387 - 11905: 0xB79D, + 31388 - 11905: 0xB4DC, + 31389 - 11905: 0xCED1, + 31390 - 11905: 0xB79E, + 31391 - 11905: 0xBFDF, + 31392 - 11905: 0xF1BD, + 31393 - 11905: 0xB79F, + 31394 - 11905: 0xB7A0, + 31395 - 11905: 0xB840, + 31396 - 11905: 0xB841, + 31397 - 11905: 0xBFFA, + 31398 - 11905: 0xF1BC, + 31399 - 11905: 0xB842, + 31400 - 11905: 0xF1BF, + 31401 - 11905: 0xB843, + 31402 - 11905: 0xB844, + 31403 - 11905: 0xB845, + 31404 - 11905: 0xF1BE, + 31405 - 11905: 0xF1C0, + 31406 - 11905: 0xB846, + 31407 - 11905: 0xB847, + 31408 - 11905: 0xB848, + 31409 - 11905: 0xB849, + 31410 - 11905: 0xB84A, + 31411 - 11905: 0xF1C1, + 31412 - 11905: 0xB84B, + 31413 - 11905: 0xB84C, + 31414 - 11905: 0xB84D, + 31415 - 11905: 0xB84E, + 31416 - 11905: 0xB84F, + 31417 - 11905: 0xB850, + 31418 - 11905: 0xB851, + 31419 - 11905: 0xB852, + 31420 - 11905: 0xB853, + 31421 - 11905: 0xB854, + 31422 - 11905: 0xB855, + 31423 - 11905: 0xC1FE, + 31424 - 11905: 0xB856, + 31425 - 11905: 0xB857, + 31426 - 11905: 0xB858, + 31427 - 11905: 0xB859, + 31428 - 11905: 0xB85A, + 31429 - 11905: 0xB85B, + 31430 - 11905: 0xB85C, + 31431 - 11905: 0xB85D, + 31432 - 11905: 0xB85E, + 31433 - 11905: 0xB85F, + 31434 - 11905: 0xB860, + 31435 - 11905: 0xC1A2, + 31436 - 11905: 0xB861, + 31437 - 11905: 0xB862, + 31438 - 11905: 0xB863, + 31439 - 11905: 0xB864, + 31440 - 11905: 0xB865, + 31441 - 11905: 0xB866, + 31442 - 11905: 0xB867, + 31443 - 11905: 0xB868, + 31444 - 11905: 0xB869, + 31445 - 11905: 0xB86A, + 31446 - 11905: 0xCAFA, + 31447 - 11905: 0xB86B, + 31448 - 11905: 0xB86C, + 31449 - 11905: 0xD5BE, + 31450 - 11905: 0xB86D, + 31451 - 11905: 0xB86E, + 31452 - 11905: 0xB86F, + 31453 - 11905: 0xB870, + 31454 - 11905: 0xBEBA, + 31455 - 11905: 0xBEB9, + 31456 - 11905: 0xD5C2, + 31457 - 11905: 0xB871, + 31458 - 11905: 0xB872, + 31459 - 11905: 0xBFA2, + 31460 - 11905: 0xB873, + 31461 - 11905: 0xCDAF, + 31462 - 11905: 0xF1B5, + 31463 - 11905: 0xB874, + 31464 - 11905: 0xB875, + 31465 - 11905: 0xB876, + 31466 - 11905: 0xB877, + 31467 - 11905: 0xB878, + 31468 - 11905: 0xB879, + 31469 - 11905: 0xBDDF, + 31470 - 11905: 0xB87A, + 31471 - 11905: 0xB6CB, + 31472 - 11905: 0xB87B, + 31473 - 11905: 0xB87C, + 31474 - 11905: 0xB87D, + 31475 - 11905: 0xB87E, + 31476 - 11905: 0xB880, + 31477 - 11905: 0xB881, + 31478 - 11905: 0xB882, + 31479 - 11905: 0xB883, + 31480 - 11905: 0xB884, + 31481 - 11905: 0xD6F1, + 31482 - 11905: 0xF3C3, + 31483 - 11905: 0xB885, + 31484 - 11905: 0xB886, + 31485 - 11905: 0xF3C4, + 31486 - 11905: 0xB887, + 31487 - 11905: 0xB8CD, + 31488 - 11905: 0xB888, + 31489 - 11905: 0xB889, + 31490 - 11905: 0xB88A, + 31491 - 11905: 0xF3C6, + 31492 - 11905: 0xF3C7, + 31493 - 11905: 0xB88B, + 31494 - 11905: 0xB0CA, + 31495 - 11905: 0xB88C, + 31496 - 11905: 0xF3C5, + 31497 - 11905: 0xB88D, + 31498 - 11905: 0xF3C9, + 31499 - 11905: 0xCBF1, + 31500 - 11905: 0xB88E, + 31501 - 11905: 0xB88F, + 31502 - 11905: 0xB890, + 31503 - 11905: 0xF3CB, + 31504 - 11905: 0xB891, + 31505 - 11905: 0xD0A6, + 31506 - 11905: 0xB892, + 31507 - 11905: 0xB893, + 31508 - 11905: 0xB1CA, + 31509 - 11905: 0xF3C8, + 31510 - 11905: 0xB894, + 31511 - 11905: 0xB895, + 31512 - 11905: 0xB896, + 31513 - 11905: 0xF3CF, + 31514 - 11905: 0xB897, + 31515 - 11905: 0xB5D1, + 31516 - 11905: 0xB898, + 31517 - 11905: 0xB899, + 31518 - 11905: 0xF3D7, + 31519 - 11905: 0xB89A, + 31520 - 11905: 0xF3D2, + 31521 - 11905: 0xB89B, + 31522 - 11905: 0xB89C, + 31523 - 11905: 0xB89D, + 31524 - 11905: 0xF3D4, + 31525 - 11905: 0xF3D3, + 31526 - 11905: 0xB7FB, + 31527 - 11905: 0xB89E, + 31528 - 11905: 0xB1BF, + 31529 - 11905: 0xB89F, + 31530 - 11905: 0xF3CE, + 31531 - 11905: 0xF3CA, + 31532 - 11905: 0xB5DA, + 31533 - 11905: 0xB8A0, + 31534 - 11905: 0xF3D0, + 31535 - 11905: 0xB940, + 31536 - 11905: 0xB941, + 31537 - 11905: 0xF3D1, + 31538 - 11905: 0xB942, + 31539 - 11905: 0xF3D5, + 31540 - 11905: 0xB943, + 31541 - 11905: 0xB944, + 31542 - 11905: 0xB945, + 31543 - 11905: 0xB946, + 31544 - 11905: 0xF3CD, + 31545 - 11905: 0xB947, + 31546 - 11905: 0xBCE3, + 31547 - 11905: 0xB948, + 31548 - 11905: 0xC1FD, + 31549 - 11905: 0xB949, + 31550 - 11905: 0xF3D6, + 31551 - 11905: 0xB94A, + 31552 - 11905: 0xB94B, + 31553 - 11905: 0xB94C, + 31554 - 11905: 0xB94D, + 31555 - 11905: 0xB94E, + 31556 - 11905: 0xB94F, + 31557 - 11905: 0xF3DA, + 31558 - 11905: 0xB950, + 31559 - 11905: 0xF3CC, + 31560 - 11905: 0xB951, + 31561 - 11905: 0xB5C8, + 31562 - 11905: 0xB952, + 31563 - 11905: 0xBDEE, + 31564 - 11905: 0xF3DC, + 31565 - 11905: 0xB953, + 31566 - 11905: 0xB954, + 31567 - 11905: 0xB7A4, + 31568 - 11905: 0xBFF0, + 31569 - 11905: 0xD6FE, + 31570 - 11905: 0xCDB2, + 31571 - 11905: 0xB955, + 31572 - 11905: 0xB4F0, + 31573 - 11905: 0xB956, + 31574 - 11905: 0xB2DF, + 31575 - 11905: 0xB957, + 31576 - 11905: 0xF3D8, + 31577 - 11905: 0xB958, + 31578 - 11905: 0xF3D9, + 31579 - 11905: 0xC9B8, + 31580 - 11905: 0xB959, + 31581 - 11905: 0xF3DD, + 31582 - 11905: 0xB95A, + 31583 - 11905: 0xB95B, + 31584 - 11905: 0xF3DE, + 31585 - 11905: 0xB95C, + 31586 - 11905: 0xF3E1, + 31587 - 11905: 0xB95D, + 31588 - 11905: 0xB95E, + 31589 - 11905: 0xB95F, + 31590 - 11905: 0xB960, + 31591 - 11905: 0xB961, + 31592 - 11905: 0xB962, + 31593 - 11905: 0xB963, + 31594 - 11905: 0xB964, + 31595 - 11905: 0xB965, + 31596 - 11905: 0xB966, + 31597 - 11905: 0xB967, + 31598 - 11905: 0xF3DF, + 31599 - 11905: 0xB968, + 31600 - 11905: 0xB969, + 31601 - 11905: 0xF3E3, + 31602 - 11905: 0xF3E2, + 31603 - 11905: 0xB96A, + 31604 - 11905: 0xB96B, + 31605 - 11905: 0xF3DB, + 31606 - 11905: 0xB96C, + 31607 - 11905: 0xBFEA, + 31608 - 11905: 0xB96D, + 31609 - 11905: 0xB3EF, + 31610 - 11905: 0xB96E, + 31611 - 11905: 0xF3E0, + 31612 - 11905: 0xB96F, + 31613 - 11905: 0xB970, + 31614 - 11905: 0xC7A9, + 31615 - 11905: 0xB971, + 31616 - 11905: 0xBCF2, + 31617 - 11905: 0xB972, + 31618 - 11905: 0xB973, + 31619 - 11905: 0xB974, + 31620 - 11905: 0xB975, + 31621 - 11905: 0xF3EB, + 31622 - 11905: 0xB976, + 31623 - 11905: 0xB977, + 31624 - 11905: 0xB978, + 31625 - 11905: 0xB979, + 31626 - 11905: 0xB97A, + 31627 - 11905: 0xB97B, + 31628 - 11905: 0xB97C, + 31629 - 11905: 0xB9BF, + 31630 - 11905: 0xB97D, + 31631 - 11905: 0xB97E, + 31632 - 11905: 0xF3E4, + 31633 - 11905: 0xB980, + 31634 - 11905: 0xB981, + 31635 - 11905: 0xB982, + 31636 - 11905: 0xB2AD, + 31637 - 11905: 0xBBFE, + 31638 - 11905: 0xB983, + 31639 - 11905: 0xCBE3, + 31640 - 11905: 0xB984, + 31641 - 11905: 0xB985, + 31642 - 11905: 0xB986, + 31643 - 11905: 0xB987, + 31644 - 11905: 0xF3ED, + 31645 - 11905: 0xF3E9, + 31646 - 11905: 0xB988, + 31647 - 11905: 0xB989, + 31648 - 11905: 0xB98A, + 31649 - 11905: 0xB9DC, + 31650 - 11905: 0xF3EE, + 31651 - 11905: 0xB98B, + 31652 - 11905: 0xB98C, + 31653 - 11905: 0xB98D, + 31654 - 11905: 0xF3E5, + 31655 - 11905: 0xF3E6, + 31656 - 11905: 0xF3EA, + 31657 - 11905: 0xC2E1, + 31658 - 11905: 0xF3EC, + 31659 - 11905: 0xF3EF, + 31660 - 11905: 0xF3E8, + 31661 - 11905: 0xBCFD, + 31662 - 11905: 0xB98E, + 31663 - 11905: 0xB98F, + 31664 - 11905: 0xB990, + 31665 - 11905: 0xCFE4, + 31666 - 11905: 0xB991, + 31667 - 11905: 0xB992, + 31668 - 11905: 0xF3F0, + 31669 - 11905: 0xB993, + 31670 - 11905: 0xB994, + 31671 - 11905: 0xB995, + 31672 - 11905: 0xF3E7, + 31673 - 11905: 0xB996, + 31674 - 11905: 0xB997, + 31675 - 11905: 0xB998, + 31676 - 11905: 0xB999, + 31677 - 11905: 0xB99A, + 31678 - 11905: 0xB99B, + 31679 - 11905: 0xB99C, + 31680 - 11905: 0xB99D, + 31681 - 11905: 0xF3F2, + 31682 - 11905: 0xB99E, + 31683 - 11905: 0xB99F, + 31684 - 11905: 0xB9A0, + 31685 - 11905: 0xBA40, + 31686 - 11905: 0xD7AD, + 31687 - 11905: 0xC6AA, + 31688 - 11905: 0xBA41, + 31689 - 11905: 0xBA42, + 31690 - 11905: 0xBA43, + 31691 - 11905: 0xBA44, + 31692 - 11905: 0xF3F3, + 31693 - 11905: 0xBA45, + 31694 - 11905: 0xBA46, + 31695 - 11905: 0xBA47, + 31696 - 11905: 0xBA48, + 31697 - 11905: 0xF3F1, + 31698 - 11905: 0xBA49, + 31699 - 11905: 0xC2A8, + 31700 - 11905: 0xBA4A, + 31701 - 11905: 0xBA4B, + 31702 - 11905: 0xBA4C, + 31703 - 11905: 0xBA4D, + 31704 - 11905: 0xBA4E, + 31705 - 11905: 0xB8DD, + 31706 - 11905: 0xF3F5, + 31707 - 11905: 0xBA4F, + 31708 - 11905: 0xBA50, + 31709 - 11905: 0xF3F4, + 31710 - 11905: 0xBA51, + 31711 - 11905: 0xBA52, + 31712 - 11905: 0xBA53, + 31713 - 11905: 0xB4DB, + 31714 - 11905: 0xBA54, + 31715 - 11905: 0xBA55, + 31716 - 11905: 0xBA56, + 31717 - 11905: 0xF3F6, + 31718 - 11905: 0xF3F7, + 31719 - 11905: 0xBA57, + 31720 - 11905: 0xBA58, + 31721 - 11905: 0xBA59, + 31722 - 11905: 0xF3F8, + 31723 - 11905: 0xBA5A, + 31724 - 11905: 0xBA5B, + 31725 - 11905: 0xBA5C, + 31726 - 11905: 0xC0BA, + 31727 - 11905: 0xBA5D, + 31728 - 11905: 0xBA5E, + 31729 - 11905: 0xC0E9, + 31730 - 11905: 0xBA5F, + 31731 - 11905: 0xBA60, + 31732 - 11905: 0xBA61, + 31733 - 11905: 0xBA62, + 31734 - 11905: 0xBA63, + 31735 - 11905: 0xC5F1, + 31736 - 11905: 0xBA64, + 31737 - 11905: 0xBA65, + 31738 - 11905: 0xBA66, + 31739 - 11905: 0xBA67, + 31740 - 11905: 0xF3FB, + 31741 - 11905: 0xBA68, + 31742 - 11905: 0xF3FA, + 31743 - 11905: 0xBA69, + 31744 - 11905: 0xBA6A, + 31745 - 11905: 0xBA6B, + 31746 - 11905: 0xBA6C, + 31747 - 11905: 0xBA6D, + 31748 - 11905: 0xBA6E, + 31749 - 11905: 0xBA6F, + 31750 - 11905: 0xBA70, + 31751 - 11905: 0xB4D8, + 31752 - 11905: 0xBA71, + 31753 - 11905: 0xBA72, + 31754 - 11905: 0xBA73, + 31755 - 11905: 0xF3FE, + 31756 - 11905: 0xF3F9, + 31757 - 11905: 0xBA74, + 31758 - 11905: 0xBA75, + 31759 - 11905: 0xF3FC, + 31760 - 11905: 0xBA76, + 31761 - 11905: 0xBA77, + 31762 - 11905: 0xBA78, + 31763 - 11905: 0xBA79, + 31764 - 11905: 0xBA7A, + 31765 - 11905: 0xBA7B, + 31766 - 11905: 0xF3FD, + 31767 - 11905: 0xBA7C, + 31768 - 11905: 0xBA7D, + 31769 - 11905: 0xBA7E, + 31770 - 11905: 0xBA80, + 31771 - 11905: 0xBA81, + 31772 - 11905: 0xBA82, + 31773 - 11905: 0xBA83, + 31774 - 11905: 0xBA84, + 31775 - 11905: 0xF4A1, + 31776 - 11905: 0xBA85, + 31777 - 11905: 0xBA86, + 31778 - 11905: 0xBA87, + 31779 - 11905: 0xBA88, + 31780 - 11905: 0xBA89, + 31781 - 11905: 0xBA8A, + 31782 - 11905: 0xF4A3, + 31783 - 11905: 0xBBC9, + 31784 - 11905: 0xBA8B, + 31785 - 11905: 0xBA8C, + 31786 - 11905: 0xF4A2, + 31787 - 11905: 0xBA8D, + 31788 - 11905: 0xBA8E, + 31789 - 11905: 0xBA8F, + 31790 - 11905: 0xBA90, + 31791 - 11905: 0xBA91, + 31792 - 11905: 0xBA92, + 31793 - 11905: 0xBA93, + 31794 - 11905: 0xBA94, + 31795 - 11905: 0xBA95, + 31796 - 11905: 0xBA96, + 31797 - 11905: 0xBA97, + 31798 - 11905: 0xBA98, + 31799 - 11905: 0xBA99, + 31800 - 11905: 0xF4A4, + 31801 - 11905: 0xBA9A, + 31802 - 11905: 0xBA9B, + 31803 - 11905: 0xBA9C, + 31804 - 11905: 0xBA9D, + 31805 - 11905: 0xBA9E, + 31806 - 11905: 0xBA9F, + 31807 - 11905: 0xB2BE, + 31808 - 11905: 0xF4A6, + 31809 - 11905: 0xF4A5, + 31810 - 11905: 0xBAA0, + 31811 - 11905: 0xBB40, + 31812 - 11905: 0xBB41, + 31813 - 11905: 0xBB42, + 31814 - 11905: 0xBB43, + 31815 - 11905: 0xBB44, + 31816 - 11905: 0xBB45, + 31817 - 11905: 0xBB46, + 31818 - 11905: 0xBB47, + 31819 - 11905: 0xBB48, + 31820 - 11905: 0xBB49, + 31821 - 11905: 0xBCAE, + 31822 - 11905: 0xBB4A, + 31823 - 11905: 0xBB4B, + 31824 - 11905: 0xBB4C, + 31825 - 11905: 0xBB4D, + 31826 - 11905: 0xBB4E, + 31827 - 11905: 0xBB4F, + 31828 - 11905: 0xBB50, + 31829 - 11905: 0xBB51, + 31830 - 11905: 0xBB52, + 31831 - 11905: 0xBB53, + 31832 - 11905: 0xBB54, + 31833 - 11905: 0xBB55, + 31834 - 11905: 0xBB56, + 31835 - 11905: 0xBB57, + 31836 - 11905: 0xBB58, + 31837 - 11905: 0xBB59, + 31838 - 11905: 0xBB5A, + 31839 - 11905: 0xBB5B, + 31840 - 11905: 0xBB5C, + 31841 - 11905: 0xBB5D, + 31842 - 11905: 0xBB5E, + 31843 - 11905: 0xBB5F, + 31844 - 11905: 0xBB60, + 31845 - 11905: 0xBB61, + 31846 - 11905: 0xBB62, + 31847 - 11905: 0xBB63, + 31848 - 11905: 0xBB64, + 31849 - 11905: 0xBB65, + 31850 - 11905: 0xBB66, + 31851 - 11905: 0xBB67, + 31852 - 11905: 0xBB68, + 31853 - 11905: 0xBB69, + 31854 - 11905: 0xBB6A, + 31855 - 11905: 0xBB6B, + 31856 - 11905: 0xBB6C, + 31857 - 11905: 0xBB6D, + 31858 - 11905: 0xBB6E, + 31859 - 11905: 0xC3D7, + 31860 - 11905: 0xD9E1, + 31861 - 11905: 0xBB6F, + 31862 - 11905: 0xBB70, + 31863 - 11905: 0xBB71, + 31864 - 11905: 0xBB72, + 31865 - 11905: 0xBB73, + 31866 - 11905: 0xBB74, + 31867 - 11905: 0xC0E0, + 31868 - 11905: 0xF4CC, + 31869 - 11905: 0xD7D1, + 31870 - 11905: 0xBB75, + 31871 - 11905: 0xBB76, + 31872 - 11905: 0xBB77, + 31873 - 11905: 0xBB78, + 31874 - 11905: 0xBB79, + 31875 - 11905: 0xBB7A, + 31876 - 11905: 0xBB7B, + 31877 - 11905: 0xBB7C, + 31878 - 11905: 0xBB7D, + 31879 - 11905: 0xBB7E, + 31880 - 11905: 0xBB80, + 31881 - 11905: 0xB7DB, + 31882 - 11905: 0xBB81, + 31883 - 11905: 0xBB82, + 31884 - 11905: 0xBB83, + 31885 - 11905: 0xBB84, + 31886 - 11905: 0xBB85, + 31887 - 11905: 0xBB86, + 31888 - 11905: 0xBB87, + 31889 - 11905: 0xF4CE, + 31890 - 11905: 0xC1A3, + 31891 - 11905: 0xBB88, + 31892 - 11905: 0xBB89, + 31893 - 11905: 0xC6C9, + 31894 - 11905: 0xBB8A, + 31895 - 11905: 0xB4D6, + 31896 - 11905: 0xD5B3, + 31897 - 11905: 0xBB8B, + 31898 - 11905: 0xBB8C, + 31899 - 11905: 0xBB8D, + 31900 - 11905: 0xF4D0, + 31901 - 11905: 0xF4CF, + 31902 - 11905: 0xF4D1, + 31903 - 11905: 0xCBDA, + 31904 - 11905: 0xBB8E, + 31905 - 11905: 0xBB8F, + 31906 - 11905: 0xF4D2, + 31907 - 11905: 0xBB90, + 31908 - 11905: 0xD4C1, + 31909 - 11905: 0xD6E0, + 31910 - 11905: 0xBB91, + 31911 - 11905: 0xBB92, + 31912 - 11905: 0xBB93, + 31913 - 11905: 0xBB94, + 31914 - 11905: 0xB7E0, + 31915 - 11905: 0xBB95, + 31916 - 11905: 0xBB96, + 31917 - 11905: 0xBB97, + 31918 - 11905: 0xC1B8, + 31919 - 11905: 0xBB98, + 31920 - 11905: 0xBB99, + 31921 - 11905: 0xC1BB, + 31922 - 11905: 0xF4D3, + 31923 - 11905: 0xBEAC, + 31924 - 11905: 0xBB9A, + 31925 - 11905: 0xBB9B, + 31926 - 11905: 0xBB9C, + 31927 - 11905: 0xBB9D, + 31928 - 11905: 0xBB9E, + 31929 - 11905: 0xB4E2, + 31930 - 11905: 0xBB9F, + 31931 - 11905: 0xBBA0, + 31932 - 11905: 0xF4D4, + 31933 - 11905: 0xF4D5, + 31934 - 11905: 0xBEAB, + 31935 - 11905: 0xBC40, + 31936 - 11905: 0xBC41, + 31937 - 11905: 0xF4D6, + 31938 - 11905: 0xBC42, + 31939 - 11905: 0xBC43, + 31940 - 11905: 0xBC44, + 31941 - 11905: 0xF4DB, + 31942 - 11905: 0xBC45, + 31943 - 11905: 0xF4D7, + 31944 - 11905: 0xF4DA, + 31945 - 11905: 0xBC46, + 31946 - 11905: 0xBAFD, + 31947 - 11905: 0xBC47, + 31948 - 11905: 0xF4D8, + 31949 - 11905: 0xF4D9, + 31950 - 11905: 0xBC48, + 31951 - 11905: 0xBC49, + 31952 - 11905: 0xBC4A, + 31953 - 11905: 0xBC4B, + 31954 - 11905: 0xBC4C, + 31955 - 11905: 0xBC4D, + 31956 - 11905: 0xBC4E, + 31957 - 11905: 0xB8E2, + 31958 - 11905: 0xCCC7, + 31959 - 11905: 0xF4DC, + 31960 - 11905: 0xBC4F, + 31961 - 11905: 0xB2DA, + 31962 - 11905: 0xBC50, + 31963 - 11905: 0xBC51, + 31964 - 11905: 0xC3D3, + 31965 - 11905: 0xBC52, + 31966 - 11905: 0xBC53, + 31967 - 11905: 0xD4E3, + 31968 - 11905: 0xBFB7, + 31969 - 11905: 0xBC54, + 31970 - 11905: 0xBC55, + 31971 - 11905: 0xBC56, + 31972 - 11905: 0xBC57, + 31973 - 11905: 0xBC58, + 31974 - 11905: 0xBC59, + 31975 - 11905: 0xBC5A, + 31976 - 11905: 0xF4DD, + 31977 - 11905: 0xBC5B, + 31978 - 11905: 0xBC5C, + 31979 - 11905: 0xBC5D, + 31980 - 11905: 0xBC5E, + 31981 - 11905: 0xBC5F, + 31982 - 11905: 0xBC60, + 31983 - 11905: 0xC5B4, + 31984 - 11905: 0xBC61, + 31985 - 11905: 0xBC62, + 31986 - 11905: 0xBC63, + 31987 - 11905: 0xBC64, + 31988 - 11905: 0xBC65, + 31989 - 11905: 0xBC66, + 31990 - 11905: 0xBC67, + 31991 - 11905: 0xBC68, + 31992 - 11905: 0xF4E9, + 31993 - 11905: 0xBC69, + 31994 - 11905: 0xBC6A, + 31995 - 11905: 0xCFB5, + 31996 - 11905: 0xBC6B, + 31997 - 11905: 0xBC6C, + 31998 - 11905: 0xBC6D, + 31999 - 11905: 0xBC6E, + 32000 - 11905: 0xBC6F, + 32001 - 11905: 0xBC70, + 32002 - 11905: 0xBC71, + 32003 - 11905: 0xBC72, + 32004 - 11905: 0xBC73, + 32005 - 11905: 0xBC74, + 32006 - 11905: 0xBC75, + 32007 - 11905: 0xBC76, + 32008 - 11905: 0xBC77, + 32009 - 11905: 0xBC78, + 32010 - 11905: 0xCEC9, + 32011 - 11905: 0xBC79, + 32012 - 11905: 0xBC7A, + 32013 - 11905: 0xBC7B, + 32014 - 11905: 0xBC7C, + 32015 - 11905: 0xBC7D, + 32016 - 11905: 0xBC7E, + 32017 - 11905: 0xBC80, + 32018 - 11905: 0xBC81, + 32019 - 11905: 0xBC82, + 32020 - 11905: 0xBC83, + 32021 - 11905: 0xBC84, + 32022 - 11905: 0xBC85, + 32023 - 11905: 0xBC86, + 32024 - 11905: 0xBC87, + 32025 - 11905: 0xBC88, + 32026 - 11905: 0xBC89, + 32027 - 11905: 0xBC8A, + 32028 - 11905: 0xBC8B, + 32029 - 11905: 0xBC8C, + 32030 - 11905: 0xBC8D, + 32031 - 11905: 0xBC8E, + 32032 - 11905: 0xCBD8, + 32033 - 11905: 0xBC8F, + 32034 - 11905: 0xCBF7, + 32035 - 11905: 0xBC90, + 32036 - 11905: 0xBC91, + 32037 - 11905: 0xBC92, + 32038 - 11905: 0xBC93, + 32039 - 11905: 0xBDF4, + 32040 - 11905: 0xBC94, + 32041 - 11905: 0xBC95, + 32042 - 11905: 0xBC96, + 32043 - 11905: 0xD7CF, + 32044 - 11905: 0xBC97, + 32045 - 11905: 0xBC98, + 32046 - 11905: 0xBC99, + 32047 - 11905: 0xC0DB, + 32048 - 11905: 0xBC9A, + 32049 - 11905: 0xBC9B, + 32050 - 11905: 0xBC9C, + 32051 - 11905: 0xBC9D, + 32052 - 11905: 0xBC9E, + 32053 - 11905: 0xBC9F, + 32054 - 11905: 0xBCA0, + 32055 - 11905: 0xBD40, + 32056 - 11905: 0xBD41, + 32057 - 11905: 0xBD42, + 32058 - 11905: 0xBD43, + 32059 - 11905: 0xBD44, + 32060 - 11905: 0xBD45, + 32061 - 11905: 0xBD46, + 32062 - 11905: 0xBD47, + 32063 - 11905: 0xBD48, + 32064 - 11905: 0xBD49, + 32065 - 11905: 0xBD4A, + 32066 - 11905: 0xBD4B, + 32067 - 11905: 0xBD4C, + 32068 - 11905: 0xBD4D, + 32069 - 11905: 0xBD4E, + 32070 - 11905: 0xBD4F, + 32071 - 11905: 0xBD50, + 32072 - 11905: 0xBD51, + 32073 - 11905: 0xBD52, + 32074 - 11905: 0xBD53, + 32075 - 11905: 0xBD54, + 32076 - 11905: 0xBD55, + 32077 - 11905: 0xBD56, + 32078 - 11905: 0xBD57, + 32079 - 11905: 0xBD58, + 32080 - 11905: 0xBD59, + 32081 - 11905: 0xBD5A, + 32082 - 11905: 0xBD5B, + 32083 - 11905: 0xBD5C, + 32084 - 11905: 0xBD5D, + 32085 - 11905: 0xBD5E, + 32086 - 11905: 0xBD5F, + 32087 - 11905: 0xBD60, + 32088 - 11905: 0xBD61, + 32089 - 11905: 0xBD62, + 32090 - 11905: 0xBD63, + 32091 - 11905: 0xBD64, + 32092 - 11905: 0xBD65, + 32093 - 11905: 0xBD66, + 32094 - 11905: 0xBD67, + 32095 - 11905: 0xBD68, + 32096 - 11905: 0xBD69, + 32097 - 11905: 0xBD6A, + 32098 - 11905: 0xBD6B, + 32099 - 11905: 0xBD6C, + 32100 - 11905: 0xBD6D, + 32101 - 11905: 0xBD6E, + 32102 - 11905: 0xBD6F, + 32103 - 11905: 0xBD70, + 32104 - 11905: 0xBD71, + 32105 - 11905: 0xBD72, + 32106 - 11905: 0xBD73, + 32107 - 11905: 0xBD74, + 32108 - 11905: 0xBD75, + 32109 - 11905: 0xBD76, + 32110 - 11905: 0xD0F5, + 32111 - 11905: 0xBD77, + 32112 - 11905: 0xBD78, + 32113 - 11905: 0xBD79, + 32114 - 11905: 0xBD7A, + 32115 - 11905: 0xBD7B, + 32116 - 11905: 0xBD7C, + 32117 - 11905: 0xBD7D, + 32118 - 11905: 0xBD7E, + 32119 - 11905: 0xF4EA, + 32120 - 11905: 0xBD80, + 32121 - 11905: 0xBD81, + 32122 - 11905: 0xBD82, + 32123 - 11905: 0xBD83, + 32124 - 11905: 0xBD84, + 32125 - 11905: 0xBD85, + 32126 - 11905: 0xBD86, + 32127 - 11905: 0xBD87, + 32128 - 11905: 0xBD88, + 32129 - 11905: 0xBD89, + 32130 - 11905: 0xBD8A, + 32131 - 11905: 0xBD8B, + 32132 - 11905: 0xBD8C, + 32133 - 11905: 0xBD8D, + 32134 - 11905: 0xBD8E, + 32135 - 11905: 0xBD8F, + 32136 - 11905: 0xBD90, + 32137 - 11905: 0xBD91, + 32138 - 11905: 0xBD92, + 32139 - 11905: 0xBD93, + 32140 - 11905: 0xBD94, + 32141 - 11905: 0xBD95, + 32142 - 11905: 0xBD96, + 32143 - 11905: 0xBD97, + 32144 - 11905: 0xBD98, + 32145 - 11905: 0xBD99, + 32146 - 11905: 0xBD9A, + 32147 - 11905: 0xBD9B, + 32148 - 11905: 0xBD9C, + 32149 - 11905: 0xBD9D, + 32150 - 11905: 0xBD9E, + 32151 - 11905: 0xBD9F, + 32152 - 11905: 0xBDA0, + 32153 - 11905: 0xBE40, + 32154 - 11905: 0xBE41, + 32155 - 11905: 0xBE42, + 32156 - 11905: 0xBE43, + 32157 - 11905: 0xBE44, + 32158 - 11905: 0xBE45, + 32159 - 11905: 0xBE46, + 32160 - 11905: 0xBE47, + 32161 - 11905: 0xBE48, + 32162 - 11905: 0xBE49, + 32163 - 11905: 0xBE4A, + 32164 - 11905: 0xBE4B, + 32165 - 11905: 0xBE4C, + 32166 - 11905: 0xF4EB, + 32167 - 11905: 0xBE4D, + 32168 - 11905: 0xBE4E, + 32169 - 11905: 0xBE4F, + 32170 - 11905: 0xBE50, + 32171 - 11905: 0xBE51, + 32172 - 11905: 0xBE52, + 32173 - 11905: 0xBE53, + 32174 - 11905: 0xF4EC, + 32175 - 11905: 0xBE54, + 32176 - 11905: 0xBE55, + 32177 - 11905: 0xBE56, + 32178 - 11905: 0xBE57, + 32179 - 11905: 0xBE58, + 32180 - 11905: 0xBE59, + 32181 - 11905: 0xBE5A, + 32182 - 11905: 0xBE5B, + 32183 - 11905: 0xBE5C, + 32184 - 11905: 0xBE5D, + 32185 - 11905: 0xBE5E, + 32186 - 11905: 0xBE5F, + 32187 - 11905: 0xBE60, + 32188 - 11905: 0xBE61, + 32189 - 11905: 0xBE62, + 32190 - 11905: 0xBE63, + 32191 - 11905: 0xBE64, + 32192 - 11905: 0xBE65, + 32193 - 11905: 0xBE66, + 32194 - 11905: 0xBE67, + 32195 - 11905: 0xBE68, + 32196 - 11905: 0xBE69, + 32197 - 11905: 0xBE6A, + 32198 - 11905: 0xBE6B, + 32199 - 11905: 0xBE6C, + 32200 - 11905: 0xBE6D, + 32201 - 11905: 0xBE6E, + 32202 - 11905: 0xBE6F, + 32203 - 11905: 0xBE70, + 32204 - 11905: 0xBE71, + 32205 - 11905: 0xBE72, + 32206 - 11905: 0xBE73, + 32207 - 11905: 0xBE74, + 32208 - 11905: 0xBE75, + 32209 - 11905: 0xBE76, + 32210 - 11905: 0xBE77, + 32211 - 11905: 0xBE78, + 32212 - 11905: 0xBE79, + 32213 - 11905: 0xBE7A, + 32214 - 11905: 0xBE7B, + 32215 - 11905: 0xBE7C, + 32216 - 11905: 0xBE7D, + 32217 - 11905: 0xBE7E, + 32218 - 11905: 0xBE80, + 32219 - 11905: 0xBE81, + 32220 - 11905: 0xBE82, + 32221 - 11905: 0xBE83, + 32222 - 11905: 0xBE84, + 32223 - 11905: 0xBE85, + 32224 - 11905: 0xBE86, + 32225 - 11905: 0xBE87, + 32226 - 11905: 0xBE88, + 32227 - 11905: 0xBE89, + 32228 - 11905: 0xBE8A, + 32229 - 11905: 0xBE8B, + 32230 - 11905: 0xBE8C, + 32231 - 11905: 0xBE8D, + 32232 - 11905: 0xBE8E, + 32233 - 11905: 0xBE8F, + 32234 - 11905: 0xBE90, + 32235 - 11905: 0xBE91, + 32236 - 11905: 0xBE92, + 32237 - 11905: 0xBE93, + 32238 - 11905: 0xBE94, + 32239 - 11905: 0xBE95, + 32240 - 11905: 0xBE96, + 32241 - 11905: 0xBE97, + 32242 - 11905: 0xBE98, + 32243 - 11905: 0xBE99, + 32244 - 11905: 0xBE9A, + 32245 - 11905: 0xBE9B, + 32246 - 11905: 0xBE9C, + 32247 - 11905: 0xBE9D, + 32248 - 11905: 0xBE9E, + 32249 - 11905: 0xBE9F, + 32250 - 11905: 0xBEA0, + 32251 - 11905: 0xBF40, + 32252 - 11905: 0xBF41, + 32253 - 11905: 0xBF42, + 32254 - 11905: 0xBF43, + 32255 - 11905: 0xBF44, + 32256 - 11905: 0xBF45, + 32257 - 11905: 0xBF46, + 32258 - 11905: 0xBF47, + 32259 - 11905: 0xBF48, + 32260 - 11905: 0xBF49, + 32261 - 11905: 0xBF4A, + 32262 - 11905: 0xBF4B, + 32263 - 11905: 0xBF4C, + 32264 - 11905: 0xBF4D, + 32265 - 11905: 0xBF4E, + 32266 - 11905: 0xBF4F, + 32267 - 11905: 0xBF50, + 32268 - 11905: 0xBF51, + 32269 - 11905: 0xBF52, + 32270 - 11905: 0xBF53, + 32271 - 11905: 0xBF54, + 32272 - 11905: 0xBF55, + 32273 - 11905: 0xBF56, + 32274 - 11905: 0xBF57, + 32275 - 11905: 0xBF58, + 32276 - 11905: 0xBF59, + 32277 - 11905: 0xBF5A, + 32278 - 11905: 0xBF5B, + 32279 - 11905: 0xBF5C, + 32280 - 11905: 0xBF5D, + 32281 - 11905: 0xBF5E, + 32282 - 11905: 0xBF5F, + 32283 - 11905: 0xBF60, + 32284 - 11905: 0xBF61, + 32285 - 11905: 0xBF62, + 32286 - 11905: 0xBF63, + 32287 - 11905: 0xBF64, + 32288 - 11905: 0xBF65, + 32289 - 11905: 0xBF66, + 32290 - 11905: 0xBF67, + 32291 - 11905: 0xBF68, + 32292 - 11905: 0xBF69, + 32293 - 11905: 0xBF6A, + 32294 - 11905: 0xBF6B, + 32295 - 11905: 0xBF6C, + 32296 - 11905: 0xBF6D, + 32297 - 11905: 0xBF6E, + 32298 - 11905: 0xBF6F, + 32299 - 11905: 0xBF70, + 32300 - 11905: 0xBF71, + 32301 - 11905: 0xBF72, + 32302 - 11905: 0xBF73, + 32303 - 11905: 0xBF74, + 32304 - 11905: 0xBF75, + 32305 - 11905: 0xBF76, + 32306 - 11905: 0xBF77, + 32307 - 11905: 0xBF78, + 32308 - 11905: 0xBF79, + 32309 - 11905: 0xBF7A, + 32310 - 11905: 0xBF7B, + 32311 - 11905: 0xBF7C, + 32312 - 11905: 0xBF7D, + 32313 - 11905: 0xBF7E, + 32314 - 11905: 0xBF80, + 32315 - 11905: 0xF7E3, + 32316 - 11905: 0xBF81, + 32317 - 11905: 0xBF82, + 32318 - 11905: 0xBF83, + 32319 - 11905: 0xBF84, + 32320 - 11905: 0xBF85, + 32321 - 11905: 0xB7B1, + 32322 - 11905: 0xBF86, + 32323 - 11905: 0xBF87, + 32324 - 11905: 0xBF88, + 32325 - 11905: 0xBF89, + 32326 - 11905: 0xBF8A, + 32327 - 11905: 0xF4ED, + 32328 - 11905: 0xBF8B, + 32329 - 11905: 0xBF8C, + 32330 - 11905: 0xBF8D, + 32331 - 11905: 0xBF8E, + 32332 - 11905: 0xBF8F, + 32333 - 11905: 0xBF90, + 32334 - 11905: 0xBF91, + 32335 - 11905: 0xBF92, + 32336 - 11905: 0xBF93, + 32337 - 11905: 0xBF94, + 32338 - 11905: 0xBF95, + 32339 - 11905: 0xBF96, + 32340 - 11905: 0xBF97, + 32341 - 11905: 0xBF98, + 32342 - 11905: 0xBF99, + 32343 - 11905: 0xBF9A, + 32344 - 11905: 0xBF9B, + 32345 - 11905: 0xBF9C, + 32346 - 11905: 0xBF9D, + 32347 - 11905: 0xBF9E, + 32348 - 11905: 0xBF9F, + 32349 - 11905: 0xBFA0, + 32350 - 11905: 0xC040, + 32351 - 11905: 0xC041, + 32352 - 11905: 0xC042, + 32353 - 11905: 0xC043, + 32354 - 11905: 0xC044, + 32355 - 11905: 0xC045, + 32356 - 11905: 0xC046, + 32357 - 11905: 0xC047, + 32358 - 11905: 0xC048, + 32359 - 11905: 0xC049, + 32360 - 11905: 0xC04A, + 32361 - 11905: 0xC04B, + 32362 - 11905: 0xC04C, + 32363 - 11905: 0xC04D, + 32364 - 11905: 0xC04E, + 32365 - 11905: 0xC04F, + 32366 - 11905: 0xC050, + 32367 - 11905: 0xC051, + 32368 - 11905: 0xC052, + 32369 - 11905: 0xC053, + 32370 - 11905: 0xC054, + 32371 - 11905: 0xC055, + 32372 - 11905: 0xC056, + 32373 - 11905: 0xC057, + 32374 - 11905: 0xC058, + 32375 - 11905: 0xC059, + 32376 - 11905: 0xC05A, + 32377 - 11905: 0xC05B, + 32378 - 11905: 0xC05C, + 32379 - 11905: 0xC05D, + 32380 - 11905: 0xC05E, + 32381 - 11905: 0xC05F, + 32382 - 11905: 0xC060, + 32383 - 11905: 0xC061, + 32384 - 11905: 0xC062, + 32385 - 11905: 0xC063, + 32386 - 11905: 0xD7EB, + 32387 - 11905: 0xC064, + 32388 - 11905: 0xC065, + 32389 - 11905: 0xC066, + 32390 - 11905: 0xC067, + 32391 - 11905: 0xC068, + 32392 - 11905: 0xC069, + 32393 - 11905: 0xC06A, + 32394 - 11905: 0xC06B, + 32395 - 11905: 0xC06C, + 32396 - 11905: 0xC06D, + 32397 - 11905: 0xC06E, + 32398 - 11905: 0xC06F, + 32399 - 11905: 0xC070, + 32400 - 11905: 0xC071, + 32401 - 11905: 0xC072, + 32402 - 11905: 0xC073, + 32403 - 11905: 0xC074, + 32404 - 11905: 0xC075, + 32405 - 11905: 0xC076, + 32406 - 11905: 0xC077, + 32407 - 11905: 0xC078, + 32408 - 11905: 0xC079, + 32409 - 11905: 0xC07A, + 32410 - 11905: 0xC07B, + 32411 - 11905: 0xF4EE, + 32412 - 11905: 0xC07C, + 32413 - 11905: 0xC07D, + 32414 - 11905: 0xC07E, + 32415 - 11905: 0xE6F9, + 32416 - 11905: 0xBEC0, + 32417 - 11905: 0xE6FA, + 32418 - 11905: 0xBAEC, + 32419 - 11905: 0xE6FB, + 32420 - 11905: 0xCFCB, + 32421 - 11905: 0xE6FC, + 32422 - 11905: 0xD4BC, + 32423 - 11905: 0xBCB6, + 32424 - 11905: 0xE6FD, + 32425 - 11905: 0xE6FE, + 32426 - 11905: 0xBCCD, + 32427 - 11905: 0xC8D2, + 32428 - 11905: 0xCEB3, + 32429 - 11905: 0xE7A1, + 32430 - 11905: 0xC080, + 32431 - 11905: 0xB4BF, + 32432 - 11905: 0xE7A2, + 32433 - 11905: 0xC9B4, + 32434 - 11905: 0xB8D9, + 32435 - 11905: 0xC4C9, + 32436 - 11905: 0xC081, + 32437 - 11905: 0xD7DD, + 32438 - 11905: 0xC2DA, + 32439 - 11905: 0xB7D7, + 32440 - 11905: 0xD6BD, + 32441 - 11905: 0xCEC6, + 32442 - 11905: 0xB7C4, + 32443 - 11905: 0xC082, + 32444 - 11905: 0xC083, + 32445 - 11905: 0xC5A6, + 32446 - 11905: 0xE7A3, + 32447 - 11905: 0xCFDF, + 32448 - 11905: 0xE7A4, + 32449 - 11905: 0xE7A5, + 32450 - 11905: 0xE7A6, + 32451 - 11905: 0xC1B7, + 32452 - 11905: 0xD7E9, + 32453 - 11905: 0xC9F0, + 32454 - 11905: 0xCFB8, + 32455 - 11905: 0xD6AF, + 32456 - 11905: 0xD6D5, + 32457 - 11905: 0xE7A7, + 32458 - 11905: 0xB0ED, + 32459 - 11905: 0xE7A8, + 32460 - 11905: 0xE7A9, + 32461 - 11905: 0xC9DC, + 32462 - 11905: 0xD2EF, + 32463 - 11905: 0xBEAD, + 32464 - 11905: 0xE7AA, + 32465 - 11905: 0xB0F3, + 32466 - 11905: 0xC8DE, + 32467 - 11905: 0xBDE1, + 32468 - 11905: 0xE7AB, + 32469 - 11905: 0xC8C6, + 32470 - 11905: 0xC084, + 32471 - 11905: 0xE7AC, + 32472 - 11905: 0xBBE6, + 32473 - 11905: 0xB8F8, + 32474 - 11905: 0xD1A4, + 32475 - 11905: 0xE7AD, + 32476 - 11905: 0xC2E7, + 32477 - 11905: 0xBEF8, + 32478 - 11905: 0xBDCA, + 32479 - 11905: 0xCDB3, + 32480 - 11905: 0xE7AE, + 32481 - 11905: 0xE7AF, + 32482 - 11905: 0xBEEE, + 32483 - 11905: 0xD0E5, + 32484 - 11905: 0xC085, + 32485 - 11905: 0xCBE7, + 32486 - 11905: 0xCCD0, + 32487 - 11905: 0xBCCC, + 32488 - 11905: 0xE7B0, + 32489 - 11905: 0xBCA8, + 32490 - 11905: 0xD0F7, + 32491 - 11905: 0xE7B1, + 32492 - 11905: 0xC086, + 32493 - 11905: 0xD0F8, + 32494 - 11905: 0xE7B2, + 32495 - 11905: 0xE7B3, + 32496 - 11905: 0xB4C2, + 32497 - 11905: 0xE7B4, + 32498 - 11905: 0xE7B5, + 32499 - 11905: 0xC9FE, + 32500 - 11905: 0xCEAC, + 32501 - 11905: 0xC3E0, + 32502 - 11905: 0xE7B7, + 32503 - 11905: 0xB1C1, + 32504 - 11905: 0xB3F1, + 32505 - 11905: 0xC087, + 32506 - 11905: 0xE7B8, + 32507 - 11905: 0xE7B9, + 32508 - 11905: 0xD7DB, + 32509 - 11905: 0xD5C0, + 32510 - 11905: 0xE7BA, + 32511 - 11905: 0xC2CC, + 32512 - 11905: 0xD7BA, + 32513 - 11905: 0xE7BB, + 32514 - 11905: 0xE7BC, + 32515 - 11905: 0xE7BD, + 32516 - 11905: 0xBCEA, + 32517 - 11905: 0xC3E5, + 32518 - 11905: 0xC0C2, + 32519 - 11905: 0xE7BE, + 32520 - 11905: 0xE7BF, + 32521 - 11905: 0xBCA9, + 32522 - 11905: 0xC088, + 32523 - 11905: 0xE7C0, + 32524 - 11905: 0xE7C1, + 32525 - 11905: 0xE7B6, + 32526 - 11905: 0xB6D0, + 32527 - 11905: 0xE7C2, + 32528 - 11905: 0xC089, + 32529 - 11905: 0xE7C3, + 32530 - 11905: 0xE7C4, + 32531 - 11905: 0xBBBA, + 32532 - 11905: 0xB5DE, + 32533 - 11905: 0xC2C6, + 32534 - 11905: 0xB1E0, + 32535 - 11905: 0xE7C5, + 32536 - 11905: 0xD4B5, + 32537 - 11905: 0xE7C6, + 32538 - 11905: 0xB8BF, + 32539 - 11905: 0xE7C8, + 32540 - 11905: 0xE7C7, + 32541 - 11905: 0xB7EC, + 32542 - 11905: 0xC08A, + 32543 - 11905: 0xE7C9, + 32544 - 11905: 0xB2F8, + 32545 - 11905: 0xE7CA, + 32546 - 11905: 0xE7CB, + 32547 - 11905: 0xE7CC, + 32548 - 11905: 0xE7CD, + 32549 - 11905: 0xE7CE, + 32550 - 11905: 0xE7CF, + 32551 - 11905: 0xE7D0, + 32552 - 11905: 0xD3A7, + 32553 - 11905: 0xCBF5, + 32554 - 11905: 0xE7D1, + 32555 - 11905: 0xE7D2, + 32556 - 11905: 0xE7D3, + 32557 - 11905: 0xE7D4, + 32558 - 11905: 0xC9C9, + 32559 - 11905: 0xE7D5, + 32560 - 11905: 0xE7D6, + 32561 - 11905: 0xE7D7, + 32562 - 11905: 0xE7D8, + 32563 - 11905: 0xE7D9, + 32564 - 11905: 0xBDC9, + 32565 - 11905: 0xE7DA, + 32566 - 11905: 0xF3BE, + 32567 - 11905: 0xC08B, + 32568 - 11905: 0xB8D7, + 32569 - 11905: 0xC08C, + 32570 - 11905: 0xC8B1, + 32571 - 11905: 0xC08D, + 32572 - 11905: 0xC08E, + 32573 - 11905: 0xC08F, + 32574 - 11905: 0xC090, + 32575 - 11905: 0xC091, + 32576 - 11905: 0xC092, + 32577 - 11905: 0xC093, + 32578 - 11905: 0xF3BF, + 32579 - 11905: 0xC094, + 32580 - 11905: 0xF3C0, + 32581 - 11905: 0xF3C1, + 32582 - 11905: 0xC095, + 32583 - 11905: 0xC096, + 32584 - 11905: 0xC097, + 32585 - 11905: 0xC098, + 32586 - 11905: 0xC099, + 32587 - 11905: 0xC09A, + 32588 - 11905: 0xC09B, + 32589 - 11905: 0xC09C, + 32590 - 11905: 0xC09D, + 32591 - 11905: 0xC09E, + 32592 - 11905: 0xB9DE, + 32593 - 11905: 0xCDF8, + 32594 - 11905: 0xC09F, + 32595 - 11905: 0xC0A0, + 32596 - 11905: 0xD8E8, + 32597 - 11905: 0xBAB1, + 32598 - 11905: 0xC140, + 32599 - 11905: 0xC2DE, + 32600 - 11905: 0xEEB7, + 32601 - 11905: 0xC141, + 32602 - 11905: 0xB7A3, + 32603 - 11905: 0xC142, + 32604 - 11905: 0xC143, + 32605 - 11905: 0xC144, + 32606 - 11905: 0xC145, + 32607 - 11905: 0xEEB9, + 32608 - 11905: 0xC146, + 32609 - 11905: 0xEEB8, + 32610 - 11905: 0xB0D5, + 32611 - 11905: 0xC147, + 32612 - 11905: 0xC148, + 32613 - 11905: 0xC149, + 32614 - 11905: 0xC14A, + 32615 - 11905: 0xC14B, + 32616 - 11905: 0xEEBB, + 32617 - 11905: 0xD5D6, + 32618 - 11905: 0xD7EF, + 32619 - 11905: 0xC14C, + 32620 - 11905: 0xC14D, + 32621 - 11905: 0xC14E, + 32622 - 11905: 0xD6C3, + 32623 - 11905: 0xC14F, + 32624 - 11905: 0xC150, + 32625 - 11905: 0xEEBD, + 32626 - 11905: 0xCAF0, + 32627 - 11905: 0xC151, + 32628 - 11905: 0xEEBC, + 32629 - 11905: 0xC152, + 32630 - 11905: 0xC153, + 32631 - 11905: 0xC154, + 32632 - 11905: 0xC155, + 32633 - 11905: 0xEEBE, + 32634 - 11905: 0xC156, + 32635 - 11905: 0xC157, + 32636 - 11905: 0xC158, + 32637 - 11905: 0xC159, + 32638 - 11905: 0xEEC0, + 32639 - 11905: 0xC15A, + 32640 - 11905: 0xC15B, + 32641 - 11905: 0xEEBF, + 32642 - 11905: 0xC15C, + 32643 - 11905: 0xC15D, + 32644 - 11905: 0xC15E, + 32645 - 11905: 0xC15F, + 32646 - 11905: 0xC160, + 32647 - 11905: 0xC161, + 32648 - 11905: 0xC162, + 32649 - 11905: 0xC163, + 32650 - 11905: 0xD1F2, + 32651 - 11905: 0xC164, + 32652 - 11905: 0xC7BC, + 32653 - 11905: 0xC165, + 32654 - 11905: 0xC3C0, + 32655 - 11905: 0xC166, + 32656 - 11905: 0xC167, + 32657 - 11905: 0xC168, + 32658 - 11905: 0xC169, + 32659 - 11905: 0xC16A, + 32660 - 11905: 0xB8E1, + 32661 - 11905: 0xC16B, + 32662 - 11905: 0xC16C, + 32663 - 11905: 0xC16D, + 32664 - 11905: 0xC16E, + 32665 - 11905: 0xC16F, + 32666 - 11905: 0xC1E7, + 32667 - 11905: 0xC170, + 32668 - 11905: 0xC171, + 32669 - 11905: 0xF4C6, + 32670 - 11905: 0xD0DF, + 32671 - 11905: 0xF4C7, + 32672 - 11905: 0xC172, + 32673 - 11905: 0xCFDB, + 32674 - 11905: 0xC173, + 32675 - 11905: 0xC174, + 32676 - 11905: 0xC8BA, + 32677 - 11905: 0xC175, + 32678 - 11905: 0xC176, + 32679 - 11905: 0xF4C8, + 32680 - 11905: 0xC177, + 32681 - 11905: 0xC178, + 32682 - 11905: 0xC179, + 32683 - 11905: 0xC17A, + 32684 - 11905: 0xC17B, + 32685 - 11905: 0xC17C, + 32686 - 11905: 0xC17D, + 32687 - 11905: 0xF4C9, + 32688 - 11905: 0xF4CA, + 32689 - 11905: 0xC17E, + 32690 - 11905: 0xF4CB, + 32691 - 11905: 0xC180, + 32692 - 11905: 0xC181, + 32693 - 11905: 0xC182, + 32694 - 11905: 0xC183, + 32695 - 11905: 0xC184, + 32696 - 11905: 0xD9FA, + 32697 - 11905: 0xB8FE, + 32698 - 11905: 0xC185, + 32699 - 11905: 0xC186, + 32700 - 11905: 0xE5F1, + 32701 - 11905: 0xD3F0, + 32702 - 11905: 0xC187, + 32703 - 11905: 0xF4E0, + 32704 - 11905: 0xC188, + 32705 - 11905: 0xCECC, + 32706 - 11905: 0xC189, + 32707 - 11905: 0xC18A, + 32708 - 11905: 0xC18B, + 32709 - 11905: 0xB3E1, + 32710 - 11905: 0xC18C, + 32711 - 11905: 0xC18D, + 32712 - 11905: 0xC18E, + 32713 - 11905: 0xC18F, + 32714 - 11905: 0xF1B4, + 32715 - 11905: 0xC190, + 32716 - 11905: 0xD2EE, + 32717 - 11905: 0xC191, + 32718 - 11905: 0xF4E1, + 32719 - 11905: 0xC192, + 32720 - 11905: 0xC193, + 32721 - 11905: 0xC194, + 32722 - 11905: 0xC195, + 32723 - 11905: 0xC196, + 32724 - 11905: 0xCFE8, + 32725 - 11905: 0xF4E2, + 32726 - 11905: 0xC197, + 32727 - 11905: 0xC198, + 32728 - 11905: 0xC7CC, + 32729 - 11905: 0xC199, + 32730 - 11905: 0xC19A, + 32731 - 11905: 0xC19B, + 32732 - 11905: 0xC19C, + 32733 - 11905: 0xC19D, + 32734 - 11905: 0xC19E, + 32735 - 11905: 0xB5D4, + 32736 - 11905: 0xB4E4, + 32737 - 11905: 0xF4E4, + 32738 - 11905: 0xC19F, + 32739 - 11905: 0xC1A0, + 32740 - 11905: 0xC240, + 32741 - 11905: 0xF4E3, + 32742 - 11905: 0xF4E5, + 32743 - 11905: 0xC241, + 32744 - 11905: 0xC242, + 32745 - 11905: 0xF4E6, + 32746 - 11905: 0xC243, + 32747 - 11905: 0xC244, + 32748 - 11905: 0xC245, + 32749 - 11905: 0xC246, + 32750 - 11905: 0xF4E7, + 32751 - 11905: 0xC247, + 32752 - 11905: 0xBAB2, + 32753 - 11905: 0xB0BF, + 32754 - 11905: 0xC248, + 32755 - 11905: 0xF4E8, + 32756 - 11905: 0xC249, + 32757 - 11905: 0xC24A, + 32758 - 11905: 0xC24B, + 32759 - 11905: 0xC24C, + 32760 - 11905: 0xC24D, + 32761 - 11905: 0xC24E, + 32762 - 11905: 0xC24F, + 32763 - 11905: 0xB7AD, + 32764 - 11905: 0xD2ED, + 32765 - 11905: 0xC250, + 32766 - 11905: 0xC251, + 32767 - 11905: 0xC252, + 32768 - 11905: 0xD2AB, + 32769 - 11905: 0xC0CF, + 32770 - 11905: 0xC253, + 32771 - 11905: 0xBFBC, + 32772 - 11905: 0xEBA3, + 32773 - 11905: 0xD5DF, + 32774 - 11905: 0xEAC8, + 32775 - 11905: 0xC254, + 32776 - 11905: 0xC255, + 32777 - 11905: 0xC256, + 32778 - 11905: 0xC257, + 32779 - 11905: 0xF1F3, + 32780 - 11905: 0xB6F8, + 32781 - 11905: 0xCBA3, + 32782 - 11905: 0xC258, + 32783 - 11905: 0xC259, + 32784 - 11905: 0xC4CD, + 32785 - 11905: 0xC25A, + 32786 - 11905: 0xF1E7, + 32787 - 11905: 0xC25B, + 32788 - 11905: 0xF1E8, + 32789 - 11905: 0xB8FB, + 32790 - 11905: 0xF1E9, + 32791 - 11905: 0xBAC4, + 32792 - 11905: 0xD4C5, + 32793 - 11905: 0xB0D2, + 32794 - 11905: 0xC25C, + 32795 - 11905: 0xC25D, + 32796 - 11905: 0xF1EA, + 32797 - 11905: 0xC25E, + 32798 - 11905: 0xC25F, + 32799 - 11905: 0xC260, + 32800 - 11905: 0xF1EB, + 32801 - 11905: 0xC261, + 32802 - 11905: 0xF1EC, + 32803 - 11905: 0xC262, + 32804 - 11905: 0xC263, + 32805 - 11905: 0xF1ED, + 32806 - 11905: 0xF1EE, + 32807 - 11905: 0xF1EF, + 32808 - 11905: 0xF1F1, + 32809 - 11905: 0xF1F0, + 32810 - 11905: 0xC5D5, + 32811 - 11905: 0xC264, + 32812 - 11905: 0xC265, + 32813 - 11905: 0xC266, + 32814 - 11905: 0xC267, + 32815 - 11905: 0xC268, + 32816 - 11905: 0xC269, + 32817 - 11905: 0xF1F2, + 32818 - 11905: 0xC26A, + 32819 - 11905: 0xB6FA, + 32820 - 11905: 0xC26B, + 32821 - 11905: 0xF1F4, + 32822 - 11905: 0xD2AE, + 32823 - 11905: 0xDEC7, + 32824 - 11905: 0xCBCA, + 32825 - 11905: 0xC26C, + 32826 - 11905: 0xC26D, + 32827 - 11905: 0xB3DC, + 32828 - 11905: 0xC26E, + 32829 - 11905: 0xB5A2, + 32830 - 11905: 0xC26F, + 32831 - 11905: 0xB9A2, + 32832 - 11905: 0xC270, + 32833 - 11905: 0xC271, + 32834 - 11905: 0xC4F4, + 32835 - 11905: 0xF1F5, + 32836 - 11905: 0xC272, + 32837 - 11905: 0xC273, + 32838 - 11905: 0xF1F6, + 32839 - 11905: 0xC274, + 32840 - 11905: 0xC275, + 32841 - 11905: 0xC276, + 32842 - 11905: 0xC1C4, + 32843 - 11905: 0xC1FB, + 32844 - 11905: 0xD6B0, + 32845 - 11905: 0xF1F7, + 32846 - 11905: 0xC277, + 32847 - 11905: 0xC278, + 32848 - 11905: 0xC279, + 32849 - 11905: 0xC27A, + 32850 - 11905: 0xF1F8, + 32851 - 11905: 0xC27B, + 32852 - 11905: 0xC1AA, + 32853 - 11905: 0xC27C, + 32854 - 11905: 0xC27D, + 32855 - 11905: 0xC27E, + 32856 - 11905: 0xC6B8, + 32857 - 11905: 0xC280, + 32858 - 11905: 0xBEDB, + 32859 - 11905: 0xC281, + 32860 - 11905: 0xC282, + 32861 - 11905: 0xC283, + 32862 - 11905: 0xC284, + 32863 - 11905: 0xC285, + 32864 - 11905: 0xC286, + 32865 - 11905: 0xC287, + 32866 - 11905: 0xC288, + 32867 - 11905: 0xC289, + 32868 - 11905: 0xC28A, + 32869 - 11905: 0xC28B, + 32870 - 11905: 0xC28C, + 32871 - 11905: 0xC28D, + 32872 - 11905: 0xC28E, + 32873 - 11905: 0xF1F9, + 32874 - 11905: 0xB4CF, + 32875 - 11905: 0xC28F, + 32876 - 11905: 0xC290, + 32877 - 11905: 0xC291, + 32878 - 11905: 0xC292, + 32879 - 11905: 0xC293, + 32880 - 11905: 0xC294, + 32881 - 11905: 0xF1FA, + 32882 - 11905: 0xC295, + 32883 - 11905: 0xC296, + 32884 - 11905: 0xC297, + 32885 - 11905: 0xC298, + 32886 - 11905: 0xC299, + 32887 - 11905: 0xC29A, + 32888 - 11905: 0xC29B, + 32889 - 11905: 0xC29C, + 32890 - 11905: 0xC29D, + 32891 - 11905: 0xC29E, + 32892 - 11905: 0xC29F, + 32893 - 11905: 0xC2A0, + 32894 - 11905: 0xC340, + 32895 - 11905: 0xEDB2, + 32896 - 11905: 0xEDB1, + 32897 - 11905: 0xC341, + 32898 - 11905: 0xC342, + 32899 - 11905: 0xCBE0, + 32900 - 11905: 0xD2DE, + 32901 - 11905: 0xC343, + 32902 - 11905: 0xCBC1, + 32903 - 11905: 0xD5D8, + 32904 - 11905: 0xC344, + 32905 - 11905: 0xC8E2, + 32906 - 11905: 0xC345, + 32907 - 11905: 0xC0DF, + 32908 - 11905: 0xBCA1, + 32909 - 11905: 0xC346, + 32910 - 11905: 0xC347, + 32911 - 11905: 0xC348, + 32912 - 11905: 0xC349, + 32913 - 11905: 0xC34A, + 32914 - 11905: 0xC34B, + 32915 - 11905: 0xEBC1, + 32916 - 11905: 0xC34C, + 32917 - 11905: 0xC34D, + 32918 - 11905: 0xD0A4, + 32919 - 11905: 0xC34E, + 32920 - 11905: 0xD6E2, + 32921 - 11905: 0xC34F, + 32922 - 11905: 0xB6C7, + 32923 - 11905: 0xB8D8, + 32924 - 11905: 0xEBC0, + 32925 - 11905: 0xB8CE, + 32926 - 11905: 0xC350, + 32927 - 11905: 0xEBBF, + 32928 - 11905: 0xB3A6, + 32929 - 11905: 0xB9C9, + 32930 - 11905: 0xD6AB, + 32931 - 11905: 0xC351, + 32932 - 11905: 0xB7F4, + 32933 - 11905: 0xB7CA, + 32934 - 11905: 0xC352, + 32935 - 11905: 0xC353, + 32936 - 11905: 0xC354, + 32937 - 11905: 0xBCE7, + 32938 - 11905: 0xB7BE, + 32939 - 11905: 0xEBC6, + 32940 - 11905: 0xC355, + 32941 - 11905: 0xEBC7, + 32942 - 11905: 0xB0B9, + 32943 - 11905: 0xBFCF, + 32944 - 11905: 0xC356, + 32945 - 11905: 0xEBC5, + 32946 - 11905: 0xD3FD, + 32947 - 11905: 0xC357, + 32948 - 11905: 0xEBC8, + 32949 - 11905: 0xC358, + 32950 - 11905: 0xC359, + 32951 - 11905: 0xEBC9, + 32952 - 11905: 0xC35A, + 32953 - 11905: 0xC35B, + 32954 - 11905: 0xB7CE, + 32955 - 11905: 0xC35C, + 32956 - 11905: 0xEBC2, + 32957 - 11905: 0xEBC4, + 32958 - 11905: 0xC9F6, + 32959 - 11905: 0xD6D7, + 32960 - 11905: 0xD5CD, + 32961 - 11905: 0xD0B2, + 32962 - 11905: 0xEBCF, + 32963 - 11905: 0xCEB8, + 32964 - 11905: 0xEBD0, + 32965 - 11905: 0xC35D, + 32966 - 11905: 0xB5A8, + 32967 - 11905: 0xC35E, + 32968 - 11905: 0xC35F, + 32969 - 11905: 0xC360, + 32970 - 11905: 0xC361, + 32971 - 11905: 0xC362, + 32972 - 11905: 0xB1B3, + 32973 - 11905: 0xEBD2, + 32974 - 11905: 0xCCA5, + 32975 - 11905: 0xC363, + 32976 - 11905: 0xC364, + 32977 - 11905: 0xC365, + 32978 - 11905: 0xC366, + 32979 - 11905: 0xC367, + 32980 - 11905: 0xC368, + 32981 - 11905: 0xC369, + 32982 - 11905: 0xC5D6, + 32983 - 11905: 0xEBD3, + 32984 - 11905: 0xC36A, + 32985 - 11905: 0xEBD1, + 32986 - 11905: 0xC5DF, + 32987 - 11905: 0xEBCE, + 32988 - 11905: 0xCAA4, + 32989 - 11905: 0xEBD5, + 32990 - 11905: 0xB0FB, + 32991 - 11905: 0xC36B, + 32992 - 11905: 0xC36C, + 32993 - 11905: 0xBAFA, + 32994 - 11905: 0xC36D, + 32995 - 11905: 0xC36E, + 32996 - 11905: 0xD8B7, + 32997 - 11905: 0xF1E3, + 32998 - 11905: 0xC36F, + 32999 - 11905: 0xEBCA, + 33000 - 11905: 0xEBCB, + 33001 - 11905: 0xEBCC, + 33002 - 11905: 0xEBCD, + 33003 - 11905: 0xEBD6, + 33004 - 11905: 0xE6C0, + 33005 - 11905: 0xEBD9, + 33006 - 11905: 0xC370, + 33007 - 11905: 0xBFE8, + 33008 - 11905: 0xD2C8, + 33009 - 11905: 0xEBD7, + 33010 - 11905: 0xEBDC, + 33011 - 11905: 0xB8EC, + 33012 - 11905: 0xEBD8, + 33013 - 11905: 0xC371, + 33014 - 11905: 0xBDBA, + 33015 - 11905: 0xC372, + 33016 - 11905: 0xD0D8, + 33017 - 11905: 0xC373, + 33018 - 11905: 0xB0B7, + 33019 - 11905: 0xC374, + 33020 - 11905: 0xEBDD, + 33021 - 11905: 0xC4DC, + 33022 - 11905: 0xC375, + 33023 - 11905: 0xC376, + 33024 - 11905: 0xC377, + 33025 - 11905: 0xC378, + 33026 - 11905: 0xD6AC, + 33027 - 11905: 0xC379, + 33028 - 11905: 0xC37A, + 33029 - 11905: 0xC37B, + 33030 - 11905: 0xB4E0, + 33031 - 11905: 0xC37C, + 33032 - 11905: 0xC37D, + 33033 - 11905: 0xC2F6, + 33034 - 11905: 0xBCB9, + 33035 - 11905: 0xC37E, + 33036 - 11905: 0xC380, + 33037 - 11905: 0xEBDA, + 33038 - 11905: 0xEBDB, + 33039 - 11905: 0xD4E0, + 33040 - 11905: 0xC6EA, + 33041 - 11905: 0xC4D4, + 33042 - 11905: 0xEBDF, + 33043 - 11905: 0xC5A7, + 33044 - 11905: 0xD9F5, + 33045 - 11905: 0xC381, + 33046 - 11905: 0xB2B1, + 33047 - 11905: 0xC382, + 33048 - 11905: 0xEBE4, + 33049 - 11905: 0xC383, + 33050 - 11905: 0xBDC5, + 33051 - 11905: 0xC384, + 33052 - 11905: 0xC385, + 33053 - 11905: 0xC386, + 33054 - 11905: 0xEBE2, + 33055 - 11905: 0xC387, + 33056 - 11905: 0xC388, + 33057 - 11905: 0xC389, + 33058 - 11905: 0xC38A, + 33059 - 11905: 0xC38B, + 33060 - 11905: 0xC38C, + 33061 - 11905: 0xC38D, + 33062 - 11905: 0xC38E, + 33063 - 11905: 0xC38F, + 33064 - 11905: 0xC390, + 33065 - 11905: 0xC391, + 33066 - 11905: 0xC392, + 33067 - 11905: 0xC393, + 33068 - 11905: 0xEBE3, + 33069 - 11905: 0xC394, + 33070 - 11905: 0xC395, + 33071 - 11905: 0xB8AC, + 33072 - 11905: 0xC396, + 33073 - 11905: 0xCDD1, + 33074 - 11905: 0xEBE5, + 33075 - 11905: 0xC397, + 33076 - 11905: 0xC398, + 33077 - 11905: 0xC399, + 33078 - 11905: 0xEBE1, + 33079 - 11905: 0xC39A, + 33080 - 11905: 0xC1B3, + 33081 - 11905: 0xC39B, + 33082 - 11905: 0xC39C, + 33083 - 11905: 0xC39D, + 33084 - 11905: 0xC39E, + 33085 - 11905: 0xC39F, + 33086 - 11905: 0xC6A2, + 33087 - 11905: 0xC3A0, + 33088 - 11905: 0xC440, + 33089 - 11905: 0xC441, + 33090 - 11905: 0xC442, + 33091 - 11905: 0xC443, + 33092 - 11905: 0xC444, + 33093 - 11905: 0xC445, + 33094 - 11905: 0xCCF3, + 33095 - 11905: 0xC446, + 33096 - 11905: 0xEBE6, + 33097 - 11905: 0xC447, + 33098 - 11905: 0xC0B0, + 33099 - 11905: 0xD2B8, + 33100 - 11905: 0xEBE7, + 33101 - 11905: 0xC448, + 33102 - 11905: 0xC449, + 33103 - 11905: 0xC44A, + 33104 - 11905: 0xB8AF, + 33105 - 11905: 0xB8AD, + 33106 - 11905: 0xC44B, + 33107 - 11905: 0xEBE8, + 33108 - 11905: 0xC7BB, + 33109 - 11905: 0xCDF3, + 33110 - 11905: 0xC44C, + 33111 - 11905: 0xC44D, + 33112 - 11905: 0xC44E, + 33113 - 11905: 0xEBEA, + 33114 - 11905: 0xEBEB, + 33115 - 11905: 0xC44F, + 33116 - 11905: 0xC450, + 33117 - 11905: 0xC451, + 33118 - 11905: 0xC452, + 33119 - 11905: 0xC453, + 33120 - 11905: 0xEBED, + 33121 - 11905: 0xC454, + 33122 - 11905: 0xC455, + 33123 - 11905: 0xC456, + 33124 - 11905: 0xC457, + 33125 - 11905: 0xD0C8, + 33126 - 11905: 0xC458, + 33127 - 11905: 0xEBF2, + 33128 - 11905: 0xC459, + 33129 - 11905: 0xEBEE, + 33130 - 11905: 0xC45A, + 33131 - 11905: 0xC45B, + 33132 - 11905: 0xC45C, + 33133 - 11905: 0xEBF1, + 33134 - 11905: 0xC8F9, + 33135 - 11905: 0xC45D, + 33136 - 11905: 0xD1FC, + 33137 - 11905: 0xEBEC, + 33138 - 11905: 0xC45E, + 33139 - 11905: 0xC45F, + 33140 - 11905: 0xEBE9, + 33141 - 11905: 0xC460, + 33142 - 11905: 0xC461, + 33143 - 11905: 0xC462, + 33144 - 11905: 0xC463, + 33145 - 11905: 0xB8B9, + 33146 - 11905: 0xCFD9, + 33147 - 11905: 0xC4E5, + 33148 - 11905: 0xEBEF, + 33149 - 11905: 0xEBF0, + 33150 - 11905: 0xCCDA, + 33151 - 11905: 0xCDC8, + 33152 - 11905: 0xB0F2, + 33153 - 11905: 0xC464, + 33154 - 11905: 0xEBF6, + 33155 - 11905: 0xC465, + 33156 - 11905: 0xC466, + 33157 - 11905: 0xC467, + 33158 - 11905: 0xC468, + 33159 - 11905: 0xC469, + 33160 - 11905: 0xEBF5, + 33161 - 11905: 0xC46A, + 33162 - 11905: 0xB2B2, + 33163 - 11905: 0xC46B, + 33164 - 11905: 0xC46C, + 33165 - 11905: 0xC46D, + 33166 - 11905: 0xC46E, + 33167 - 11905: 0xB8E0, + 33168 - 11905: 0xC46F, + 33169 - 11905: 0xEBF7, + 33170 - 11905: 0xC470, + 33171 - 11905: 0xC471, + 33172 - 11905: 0xC472, + 33173 - 11905: 0xC473, + 33174 - 11905: 0xC474, + 33175 - 11905: 0xC475, + 33176 - 11905: 0xB1EC, + 33177 - 11905: 0xC476, + 33178 - 11905: 0xC477, + 33179 - 11905: 0xCCC5, + 33180 - 11905: 0xC4A4, + 33181 - 11905: 0xCFA5, + 33182 - 11905: 0xC478, + 33183 - 11905: 0xC479, + 33184 - 11905: 0xC47A, + 33185 - 11905: 0xC47B, + 33186 - 11905: 0xC47C, + 33187 - 11905: 0xEBF9, + 33188 - 11905: 0xC47D, + 33189 - 11905: 0xC47E, + 33190 - 11905: 0xECA2, + 33191 - 11905: 0xC480, + 33192 - 11905: 0xC5F2, + 33193 - 11905: 0xC481, + 33194 - 11905: 0xEBFA, + 33195 - 11905: 0xC482, + 33196 - 11905: 0xC483, + 33197 - 11905: 0xC484, + 33198 - 11905: 0xC485, + 33199 - 11905: 0xC486, + 33200 - 11905: 0xC487, + 33201 - 11905: 0xC488, + 33202 - 11905: 0xC489, + 33203 - 11905: 0xC9C5, + 33204 - 11905: 0xC48A, + 33205 - 11905: 0xC48B, + 33206 - 11905: 0xC48C, + 33207 - 11905: 0xC48D, + 33208 - 11905: 0xC48E, + 33209 - 11905: 0xC48F, + 33210 - 11905: 0xE2DF, + 33211 - 11905: 0xEBFE, + 33212 - 11905: 0xC490, + 33213 - 11905: 0xC491, + 33214 - 11905: 0xC492, + 33215 - 11905: 0xC493, + 33216 - 11905: 0xCDCE, + 33217 - 11905: 0xECA1, + 33218 - 11905: 0xB1DB, + 33219 - 11905: 0xD3B7, + 33220 - 11905: 0xC494, + 33221 - 11905: 0xC495, + 33222 - 11905: 0xD2DC, + 33223 - 11905: 0xC496, + 33224 - 11905: 0xC497, + 33225 - 11905: 0xC498, + 33226 - 11905: 0xEBFD, + 33227 - 11905: 0xC499, + 33228 - 11905: 0xEBFB, + 33229 - 11905: 0xC49A, + 33230 - 11905: 0xC49B, + 33231 - 11905: 0xC49C, + 33232 - 11905: 0xC49D, + 33233 - 11905: 0xC49E, + 33234 - 11905: 0xC49F, + 33235 - 11905: 0xC4A0, + 33236 - 11905: 0xC540, + 33237 - 11905: 0xC541, + 33238 - 11905: 0xC542, + 33239 - 11905: 0xC543, + 33240 - 11905: 0xC544, + 33241 - 11905: 0xC545, + 33242 - 11905: 0xC546, + 33243 - 11905: 0xC547, + 33244 - 11905: 0xC548, + 33245 - 11905: 0xC549, + 33246 - 11905: 0xC54A, + 33247 - 11905: 0xC54B, + 33248 - 11905: 0xC54C, + 33249 - 11905: 0xC54D, + 33250 - 11905: 0xC54E, + 33251 - 11905: 0xB3BC, + 33252 - 11905: 0xC54F, + 33253 - 11905: 0xC550, + 33254 - 11905: 0xC551, + 33255 - 11905: 0xEAB0, + 33256 - 11905: 0xC552, + 33257 - 11905: 0xC553, + 33258 - 11905: 0xD7D4, + 33259 - 11905: 0xC554, + 33260 - 11905: 0xF4AB, + 33261 - 11905: 0xB3F4, + 33262 - 11905: 0xC555, + 33263 - 11905: 0xC556, + 33264 - 11905: 0xC557, + 33265 - 11905: 0xC558, + 33266 - 11905: 0xC559, + 33267 - 11905: 0xD6C1, + 33268 - 11905: 0xD6C2, + 33269 - 11905: 0xC55A, + 33270 - 11905: 0xC55B, + 33271 - 11905: 0xC55C, + 33272 - 11905: 0xC55D, + 33273 - 11905: 0xC55E, + 33274 - 11905: 0xC55F, + 33275 - 11905: 0xD5E9, + 33276 - 11905: 0xBECA, + 33277 - 11905: 0xC560, + 33278 - 11905: 0xF4A7, + 33279 - 11905: 0xC561, + 33280 - 11905: 0xD2A8, + 33281 - 11905: 0xF4A8, + 33282 - 11905: 0xF4A9, + 33283 - 11905: 0xC562, + 33284 - 11905: 0xF4AA, + 33285 - 11905: 0xBECB, + 33286 - 11905: 0xD3DF, + 33287 - 11905: 0xC563, + 33288 - 11905: 0xC564, + 33289 - 11905: 0xC565, + 33290 - 11905: 0xC566, + 33291 - 11905: 0xC567, + 33292 - 11905: 0xC9E0, + 33293 - 11905: 0xC9E1, + 33294 - 11905: 0xC568, + 33295 - 11905: 0xC569, + 33296 - 11905: 0xF3C2, + 33297 - 11905: 0xC56A, + 33298 - 11905: 0xCAE6, + 33299 - 11905: 0xC56B, + 33300 - 11905: 0xCCF2, + 33301 - 11905: 0xC56C, + 33302 - 11905: 0xC56D, + 33303 - 11905: 0xC56E, + 33304 - 11905: 0xC56F, + 33305 - 11905: 0xC570, + 33306 - 11905: 0xC571, + 33307 - 11905: 0xE2B6, + 33308 - 11905: 0xCBB4, + 33309 - 11905: 0xC572, + 33310 - 11905: 0xCEE8, + 33311 - 11905: 0xD6DB, + 33312 - 11905: 0xC573, + 33313 - 11905: 0xF4AD, + 33314 - 11905: 0xF4AE, + 33315 - 11905: 0xF4AF, + 33316 - 11905: 0xC574, + 33317 - 11905: 0xC575, + 33318 - 11905: 0xC576, + 33319 - 11905: 0xC577, + 33320 - 11905: 0xF4B2, + 33321 - 11905: 0xC578, + 33322 - 11905: 0xBABD, + 33323 - 11905: 0xF4B3, + 33324 - 11905: 0xB0E3, + 33325 - 11905: 0xF4B0, + 33326 - 11905: 0xC579, + 33327 - 11905: 0xF4B1, + 33328 - 11905: 0xBDA2, + 33329 - 11905: 0xB2D5, + 33330 - 11905: 0xC57A, + 33331 - 11905: 0xF4B6, + 33332 - 11905: 0xF4B7, + 33333 - 11905: 0xB6E6, + 33334 - 11905: 0xB2B0, + 33335 - 11905: 0xCFCF, + 33336 - 11905: 0xF4B4, + 33337 - 11905: 0xB4AC, + 33338 - 11905: 0xC57B, + 33339 - 11905: 0xF4B5, + 33340 - 11905: 0xC57C, + 33341 - 11905: 0xC57D, + 33342 - 11905: 0xF4B8, + 33343 - 11905: 0xC57E, + 33344 - 11905: 0xC580, + 33345 - 11905: 0xC581, + 33346 - 11905: 0xC582, + 33347 - 11905: 0xC583, + 33348 - 11905: 0xF4B9, + 33349 - 11905: 0xC584, + 33350 - 11905: 0xC585, + 33351 - 11905: 0xCDA7, + 33352 - 11905: 0xC586, + 33353 - 11905: 0xF4BA, + 33354 - 11905: 0xC587, + 33355 - 11905: 0xF4BB, + 33356 - 11905: 0xC588, + 33357 - 11905: 0xC589, + 33358 - 11905: 0xC58A, + 33359 - 11905: 0xF4BC, + 33360 - 11905: 0xC58B, + 33361 - 11905: 0xC58C, + 33362 - 11905: 0xC58D, + 33363 - 11905: 0xC58E, + 33364 - 11905: 0xC58F, + 33365 - 11905: 0xC590, + 33366 - 11905: 0xC591, + 33367 - 11905: 0xC592, + 33368 - 11905: 0xCBD2, + 33369 - 11905: 0xC593, + 33370 - 11905: 0xF4BD, + 33371 - 11905: 0xC594, + 33372 - 11905: 0xC595, + 33373 - 11905: 0xC596, + 33374 - 11905: 0xC597, + 33375 - 11905: 0xF4BE, + 33376 - 11905: 0xC598, + 33377 - 11905: 0xC599, + 33378 - 11905: 0xC59A, + 33379 - 11905: 0xC59B, + 33380 - 11905: 0xC59C, + 33381 - 11905: 0xC59D, + 33382 - 11905: 0xC59E, + 33383 - 11905: 0xC59F, + 33384 - 11905: 0xF4BF, + 33385 - 11905: 0xC5A0, + 33386 - 11905: 0xC640, + 33387 - 11905: 0xC641, + 33388 - 11905: 0xC642, + 33389 - 11905: 0xC643, + 33390 - 11905: 0xF4DE, + 33391 - 11905: 0xC1BC, + 33392 - 11905: 0xBCE8, + 33393 - 11905: 0xC644, + 33394 - 11905: 0xC9AB, + 33395 - 11905: 0xD1DE, + 33396 - 11905: 0xE5F5, + 33397 - 11905: 0xC645, + 33398 - 11905: 0xC646, + 33399 - 11905: 0xC647, + 33400 - 11905: 0xC648, + 33401 - 11905: 0xDCB3, + 33402 - 11905: 0xD2D5, + 33403 - 11905: 0xC649, + 33404 - 11905: 0xC64A, + 33405 - 11905: 0xDCB4, + 33406 - 11905: 0xB0AC, + 33407 - 11905: 0xDCB5, + 33408 - 11905: 0xC64B, + 33409 - 11905: 0xC64C, + 33410 - 11905: 0xBDDA, + 33411 - 11905: 0xC64D, + 33412 - 11905: 0xDCB9, + 33413 - 11905: 0xC64E, + 33414 - 11905: 0xC64F, + 33415 - 11905: 0xC650, + 33416 - 11905: 0xD8C2, + 33417 - 11905: 0xC651, + 33418 - 11905: 0xDCB7, + 33419 - 11905: 0xD3F3, + 33420 - 11905: 0xC652, + 33421 - 11905: 0xC9D6, + 33422 - 11905: 0xDCBA, + 33423 - 11905: 0xDCB6, + 33424 - 11905: 0xC653, + 33425 - 11905: 0xDCBB, + 33426 - 11905: 0xC3A2, + 33427 - 11905: 0xC654, + 33428 - 11905: 0xC655, + 33429 - 11905: 0xC656, + 33430 - 11905: 0xC657, + 33431 - 11905: 0xDCBC, + 33432 - 11905: 0xDCC5, + 33433 - 11905: 0xDCBD, + 33434 - 11905: 0xC658, + 33435 - 11905: 0xC659, + 33436 - 11905: 0xCEDF, + 33437 - 11905: 0xD6A5, + 33438 - 11905: 0xC65A, + 33439 - 11905: 0xDCCF, + 33440 - 11905: 0xC65B, + 33441 - 11905: 0xDCCD, + 33442 - 11905: 0xC65C, + 33443 - 11905: 0xC65D, + 33444 - 11905: 0xDCD2, + 33445 - 11905: 0xBDE6, + 33446 - 11905: 0xC2AB, + 33447 - 11905: 0xC65E, + 33448 - 11905: 0xDCB8, + 33449 - 11905: 0xDCCB, + 33450 - 11905: 0xDCCE, + 33451 - 11905: 0xDCBE, + 33452 - 11905: 0xB7D2, + 33453 - 11905: 0xB0C5, + 33454 - 11905: 0xDCC7, + 33455 - 11905: 0xD0BE, + 33456 - 11905: 0xDCC1, + 33457 - 11905: 0xBBA8, + 33458 - 11905: 0xC65F, + 33459 - 11905: 0xB7BC, + 33460 - 11905: 0xDCCC, + 33461 - 11905: 0xC660, + 33462 - 11905: 0xC661, + 33463 - 11905: 0xDCC6, + 33464 - 11905: 0xDCBF, + 33465 - 11905: 0xC7DB, + 33466 - 11905: 0xC662, + 33467 - 11905: 0xC663, + 33468 - 11905: 0xC664, + 33469 - 11905: 0xD1BF, + 33470 - 11905: 0xDCC0, + 33471 - 11905: 0xC665, + 33472 - 11905: 0xC666, + 33473 - 11905: 0xDCCA, + 33474 - 11905: 0xC667, + 33475 - 11905: 0xC668, + 33476 - 11905: 0xDCD0, + 33477 - 11905: 0xC669, + 33478 - 11905: 0xC66A, + 33479 - 11905: 0xCEAD, + 33480 - 11905: 0xDCC2, + 33481 - 11905: 0xC66B, + 33482 - 11905: 0xDCC3, + 33483 - 11905: 0xDCC8, + 33484 - 11905: 0xDCC9, + 33485 - 11905: 0xB2D4, + 33486 - 11905: 0xDCD1, + 33487 - 11905: 0xCBD5, + 33488 - 11905: 0xC66C, + 33489 - 11905: 0xD4B7, + 33490 - 11905: 0xDCDB, + 33491 - 11905: 0xDCDF, + 33492 - 11905: 0xCCA6, + 33493 - 11905: 0xDCE6, + 33494 - 11905: 0xC66D, + 33495 - 11905: 0xC3E7, + 33496 - 11905: 0xDCDC, + 33497 - 11905: 0xC66E, + 33498 - 11905: 0xC66F, + 33499 - 11905: 0xBFC1, + 33500 - 11905: 0xDCD9, + 33501 - 11905: 0xC670, + 33502 - 11905: 0xB0FA, + 33503 - 11905: 0xB9B6, + 33504 - 11905: 0xDCE5, + 33505 - 11905: 0xDCD3, + 33506 - 11905: 0xC671, + 33507 - 11905: 0xDCC4, + 33508 - 11905: 0xDCD6, + 33509 - 11905: 0xC8F4, + 33510 - 11905: 0xBFE0, + 33511 - 11905: 0xC672, + 33512 - 11905: 0xC673, + 33513 - 11905: 0xC674, + 33514 - 11905: 0xC675, + 33515 - 11905: 0xC9BB, + 33516 - 11905: 0xC676, + 33517 - 11905: 0xC677, + 33518 - 11905: 0xC678, + 33519 - 11905: 0xB1BD, + 33520 - 11905: 0xC679, + 33521 - 11905: 0xD3A2, + 33522 - 11905: 0xC67A, + 33523 - 11905: 0xC67B, + 33524 - 11905: 0xDCDA, + 33525 - 11905: 0xC67C, + 33526 - 11905: 0xC67D, + 33527 - 11905: 0xDCD5, + 33528 - 11905: 0xC67E, + 33529 - 11905: 0xC6BB, + 33530 - 11905: 0xC680, + 33531 - 11905: 0xDCDE, + 33532 - 11905: 0xC681, + 33533 - 11905: 0xC682, + 33534 - 11905: 0xC683, + 33535 - 11905: 0xC684, + 33536 - 11905: 0xC685, + 33537 - 11905: 0xD7C2, + 33538 - 11905: 0xC3AF, + 33539 - 11905: 0xB7B6, + 33540 - 11905: 0xC7D1, + 33541 - 11905: 0xC3A9, + 33542 - 11905: 0xDCE2, + 33543 - 11905: 0xDCD8, + 33544 - 11905: 0xDCEB, + 33545 - 11905: 0xDCD4, + 33546 - 11905: 0xC686, + 33547 - 11905: 0xC687, + 33548 - 11905: 0xDCDD, + 33549 - 11905: 0xC688, + 33550 - 11905: 0xBEA5, + 33551 - 11905: 0xDCD7, + 33552 - 11905: 0xC689, + 33553 - 11905: 0xDCE0, + 33554 - 11905: 0xC68A, + 33555 - 11905: 0xC68B, + 33556 - 11905: 0xDCE3, + 33557 - 11905: 0xDCE4, + 33558 - 11905: 0xC68C, + 33559 - 11905: 0xDCF8, + 33560 - 11905: 0xC68D, + 33561 - 11905: 0xC68E, + 33562 - 11905: 0xDCE1, + 33563 - 11905: 0xDDA2, + 33564 - 11905: 0xDCE7, + 33565 - 11905: 0xC68F, + 33566 - 11905: 0xC690, + 33567 - 11905: 0xC691, + 33568 - 11905: 0xC692, + 33569 - 11905: 0xC693, + 33570 - 11905: 0xC694, + 33571 - 11905: 0xC695, + 33572 - 11905: 0xC696, + 33573 - 11905: 0xC697, + 33574 - 11905: 0xC698, + 33575 - 11905: 0xBCEB, + 33576 - 11905: 0xB4C4, + 33577 - 11905: 0xC699, + 33578 - 11905: 0xC69A, + 33579 - 11905: 0xC3A3, + 33580 - 11905: 0xB2E7, + 33581 - 11905: 0xDCFA, + 33582 - 11905: 0xC69B, + 33583 - 11905: 0xDCF2, + 33584 - 11905: 0xC69C, + 33585 - 11905: 0xDCEF, + 33586 - 11905: 0xC69D, + 33587 - 11905: 0xDCFC, + 33588 - 11905: 0xDCEE, + 33589 - 11905: 0xD2F0, + 33590 - 11905: 0xB2E8, + 33591 - 11905: 0xC69E, + 33592 - 11905: 0xC8D7, + 33593 - 11905: 0xC8E3, + 33594 - 11905: 0xDCFB, + 33595 - 11905: 0xC69F, + 33596 - 11905: 0xDCED, + 33597 - 11905: 0xC6A0, + 33598 - 11905: 0xC740, + 33599 - 11905: 0xC741, + 33600 - 11905: 0xDCF7, + 33601 - 11905: 0xC742, + 33602 - 11905: 0xC743, + 33603 - 11905: 0xDCF5, + 33604 - 11905: 0xC744, + 33605 - 11905: 0xC745, + 33606 - 11905: 0xBEA3, + 33607 - 11905: 0xDCF4, + 33608 - 11905: 0xC746, + 33609 - 11905: 0xB2DD, + 33610 - 11905: 0xC747, + 33611 - 11905: 0xC748, + 33612 - 11905: 0xC749, + 33613 - 11905: 0xC74A, + 33614 - 11905: 0xC74B, + 33615 - 11905: 0xDCF3, + 33616 - 11905: 0xBCF6, + 33617 - 11905: 0xDCE8, + 33618 - 11905: 0xBBC4, + 33619 - 11905: 0xC74C, + 33620 - 11905: 0xC0F3, + 33621 - 11905: 0xC74D, + 33622 - 11905: 0xC74E, + 33623 - 11905: 0xC74F, + 33624 - 11905: 0xC750, + 33625 - 11905: 0xC751, + 33626 - 11905: 0xBCD4, + 33627 - 11905: 0xDCE9, + 33628 - 11905: 0xDCEA, + 33629 - 11905: 0xC752, + 33630 - 11905: 0xDCF1, + 33631 - 11905: 0xDCF6, + 33632 - 11905: 0xDCF9, + 33633 - 11905: 0xB5B4, + 33634 - 11905: 0xC753, + 33635 - 11905: 0xC8D9, + 33636 - 11905: 0xBBE7, + 33637 - 11905: 0xDCFE, + 33638 - 11905: 0xDCFD, + 33639 - 11905: 0xD3AB, + 33640 - 11905: 0xDDA1, + 33641 - 11905: 0xDDA3, + 33642 - 11905: 0xDDA5, + 33643 - 11905: 0xD2F1, + 33644 - 11905: 0xDDA4, + 33645 - 11905: 0xDDA6, + 33646 - 11905: 0xDDA7, + 33647 - 11905: 0xD2A9, + 33648 - 11905: 0xC754, + 33649 - 11905: 0xC755, + 33650 - 11905: 0xC756, + 33651 - 11905: 0xC757, + 33652 - 11905: 0xC758, + 33653 - 11905: 0xC759, + 33654 - 11905: 0xC75A, + 33655 - 11905: 0xBAC9, + 33656 - 11905: 0xDDA9, + 33657 - 11905: 0xC75B, + 33658 - 11905: 0xC75C, + 33659 - 11905: 0xDDB6, + 33660 - 11905: 0xDDB1, + 33661 - 11905: 0xDDB4, + 33662 - 11905: 0xC75D, + 33663 - 11905: 0xC75E, + 33664 - 11905: 0xC75F, + 33665 - 11905: 0xC760, + 33666 - 11905: 0xC761, + 33667 - 11905: 0xC762, + 33668 - 11905: 0xC763, + 33669 - 11905: 0xDDB0, + 33670 - 11905: 0xC6CE, + 33671 - 11905: 0xC764, + 33672 - 11905: 0xC765, + 33673 - 11905: 0xC0F2, + 33674 - 11905: 0xC766, + 33675 - 11905: 0xC767, + 33676 - 11905: 0xC768, + 33677 - 11905: 0xC769, + 33678 - 11905: 0xC9AF, + 33679 - 11905: 0xC76A, + 33680 - 11905: 0xC76B, + 33681 - 11905: 0xC76C, + 33682 - 11905: 0xDCEC, + 33683 - 11905: 0xDDAE, + 33684 - 11905: 0xC76D, + 33685 - 11905: 0xC76E, + 33686 - 11905: 0xC76F, + 33687 - 11905: 0xC770, + 33688 - 11905: 0xDDB7, + 33689 - 11905: 0xC771, + 33690 - 11905: 0xC772, + 33691 - 11905: 0xDCF0, + 33692 - 11905: 0xDDAF, + 33693 - 11905: 0xC773, + 33694 - 11905: 0xDDB8, + 33695 - 11905: 0xC774, + 33696 - 11905: 0xDDAC, + 33697 - 11905: 0xC775, + 33698 - 11905: 0xC776, + 33699 - 11905: 0xC777, + 33700 - 11905: 0xC778, + 33701 - 11905: 0xC779, + 33702 - 11905: 0xC77A, + 33703 - 11905: 0xC77B, + 33704 - 11905: 0xDDB9, + 33705 - 11905: 0xDDB3, + 33706 - 11905: 0xDDAD, + 33707 - 11905: 0xC4AA, + 33708 - 11905: 0xC77C, + 33709 - 11905: 0xC77D, + 33710 - 11905: 0xC77E, + 33711 - 11905: 0xC780, + 33712 - 11905: 0xDDA8, + 33713 - 11905: 0xC0B3, + 33714 - 11905: 0xC1AB, + 33715 - 11905: 0xDDAA, + 33716 - 11905: 0xDDAB, + 33717 - 11905: 0xC781, + 33718 - 11905: 0xDDB2, + 33719 - 11905: 0xBBF1, + 33720 - 11905: 0xDDB5, + 33721 - 11905: 0xD3A8, + 33722 - 11905: 0xDDBA, + 33723 - 11905: 0xC782, + 33724 - 11905: 0xDDBB, + 33725 - 11905: 0xC3A7, + 33726 - 11905: 0xC783, + 33727 - 11905: 0xC784, + 33728 - 11905: 0xDDD2, + 33729 - 11905: 0xDDBC, + 33730 - 11905: 0xC785, + 33731 - 11905: 0xC786, + 33732 - 11905: 0xC787, + 33733 - 11905: 0xDDD1, + 33734 - 11905: 0xC788, + 33735 - 11905: 0xB9BD, + 33736 - 11905: 0xC789, + 33737 - 11905: 0xC78A, + 33738 - 11905: 0xBED5, + 33739 - 11905: 0xC78B, + 33740 - 11905: 0xBEFA, + 33741 - 11905: 0xC78C, + 33742 - 11905: 0xC78D, + 33743 - 11905: 0xBACA, + 33744 - 11905: 0xC78E, + 33745 - 11905: 0xC78F, + 33746 - 11905: 0xC790, + 33747 - 11905: 0xC791, + 33748 - 11905: 0xDDCA, + 33749 - 11905: 0xC792, + 33750 - 11905: 0xDDC5, + 33751 - 11905: 0xC793, + 33752 - 11905: 0xDDBF, + 33753 - 11905: 0xC794, + 33754 - 11905: 0xC795, + 33755 - 11905: 0xC796, + 33756 - 11905: 0xB2CB, + 33757 - 11905: 0xDDC3, + 33758 - 11905: 0xC797, + 33759 - 11905: 0xDDCB, + 33760 - 11905: 0xB2A4, + 33761 - 11905: 0xDDD5, + 33762 - 11905: 0xC798, + 33763 - 11905: 0xC799, + 33764 - 11905: 0xC79A, + 33765 - 11905: 0xDDBE, + 33766 - 11905: 0xC79B, + 33767 - 11905: 0xC79C, + 33768 - 11905: 0xC79D, + 33769 - 11905: 0xC6D0, + 33770 - 11905: 0xDDD0, + 33771 - 11905: 0xC79E, + 33772 - 11905: 0xC79F, + 33773 - 11905: 0xC7A0, + 33774 - 11905: 0xC840, + 33775 - 11905: 0xC841, + 33776 - 11905: 0xDDD4, + 33777 - 11905: 0xC1E2, + 33778 - 11905: 0xB7C6, + 33779 - 11905: 0xC842, + 33780 - 11905: 0xC843, + 33781 - 11905: 0xC844, + 33782 - 11905: 0xC845, + 33783 - 11905: 0xC846, + 33784 - 11905: 0xDDCE, + 33785 - 11905: 0xDDCF, + 33786 - 11905: 0xC847, + 33787 - 11905: 0xC848, + 33788 - 11905: 0xC849, + 33789 - 11905: 0xDDC4, + 33790 - 11905: 0xC84A, + 33791 - 11905: 0xC84B, + 33792 - 11905: 0xC84C, + 33793 - 11905: 0xDDBD, + 33794 - 11905: 0xC84D, + 33795 - 11905: 0xDDCD, + 33796 - 11905: 0xCCD1, + 33797 - 11905: 0xC84E, + 33798 - 11905: 0xDDC9, + 33799 - 11905: 0xC84F, + 33800 - 11905: 0xC850, + 33801 - 11905: 0xC851, + 33802 - 11905: 0xC852, + 33803 - 11905: 0xDDC2, + 33804 - 11905: 0xC3C8, + 33805 - 11905: 0xC6BC, + 33806 - 11905: 0xCEAE, + 33807 - 11905: 0xDDCC, + 33808 - 11905: 0xC853, + 33809 - 11905: 0xDDC8, + 33810 - 11905: 0xC854, + 33811 - 11905: 0xC855, + 33812 - 11905: 0xC856, + 33813 - 11905: 0xC857, + 33814 - 11905: 0xC858, + 33815 - 11905: 0xC859, + 33816 - 11905: 0xDDC1, + 33817 - 11905: 0xC85A, + 33818 - 11905: 0xC85B, + 33819 - 11905: 0xC85C, + 33820 - 11905: 0xDDC6, + 33821 - 11905: 0xC2DC, + 33822 - 11905: 0xC85D, + 33823 - 11905: 0xC85E, + 33824 - 11905: 0xC85F, + 33825 - 11905: 0xC860, + 33826 - 11905: 0xC861, + 33827 - 11905: 0xC862, + 33828 - 11905: 0xD3A9, + 33829 - 11905: 0xD3AA, + 33830 - 11905: 0xDDD3, + 33831 - 11905: 0xCFF4, + 33832 - 11905: 0xC8F8, + 33833 - 11905: 0xC863, + 33834 - 11905: 0xC864, + 33835 - 11905: 0xC865, + 33836 - 11905: 0xC866, + 33837 - 11905: 0xC867, + 33838 - 11905: 0xC868, + 33839 - 11905: 0xC869, + 33840 - 11905: 0xC86A, + 33841 - 11905: 0xDDE6, + 33842 - 11905: 0xC86B, + 33843 - 11905: 0xC86C, + 33844 - 11905: 0xC86D, + 33845 - 11905: 0xC86E, + 33846 - 11905: 0xC86F, + 33847 - 11905: 0xC870, + 33848 - 11905: 0xDDC7, + 33849 - 11905: 0xC871, + 33850 - 11905: 0xC872, + 33851 - 11905: 0xC873, + 33852 - 11905: 0xDDE0, + 33853 - 11905: 0xC2E4, + 33854 - 11905: 0xC874, + 33855 - 11905: 0xC875, + 33856 - 11905: 0xC876, + 33857 - 11905: 0xC877, + 33858 - 11905: 0xC878, + 33859 - 11905: 0xC879, + 33860 - 11905: 0xC87A, + 33861 - 11905: 0xC87B, + 33862 - 11905: 0xDDE1, + 33863 - 11905: 0xC87C, + 33864 - 11905: 0xC87D, + 33865 - 11905: 0xC87E, + 33866 - 11905: 0xC880, + 33867 - 11905: 0xC881, + 33868 - 11905: 0xC882, + 33869 - 11905: 0xC883, + 33870 - 11905: 0xC884, + 33871 - 11905: 0xC885, + 33872 - 11905: 0xC886, + 33873 - 11905: 0xDDD7, + 33874 - 11905: 0xC887, + 33875 - 11905: 0xC888, + 33876 - 11905: 0xC889, + 33877 - 11905: 0xC88A, + 33878 - 11905: 0xC88B, + 33879 - 11905: 0xD6F8, + 33880 - 11905: 0xC88C, + 33881 - 11905: 0xDDD9, + 33882 - 11905: 0xDDD8, + 33883 - 11905: 0xB8F0, + 33884 - 11905: 0xDDD6, + 33885 - 11905: 0xC88D, + 33886 - 11905: 0xC88E, + 33887 - 11905: 0xC88F, + 33888 - 11905: 0xC890, + 33889 - 11905: 0xC6CF, + 33890 - 11905: 0xC891, + 33891 - 11905: 0xB6AD, + 33892 - 11905: 0xC892, + 33893 - 11905: 0xC893, + 33894 - 11905: 0xC894, + 33895 - 11905: 0xC895, + 33896 - 11905: 0xC896, + 33897 - 11905: 0xDDE2, + 33898 - 11905: 0xC897, + 33899 - 11905: 0xBAF9, + 33900 - 11905: 0xD4E1, + 33901 - 11905: 0xDDE7, + 33902 - 11905: 0xC898, + 33903 - 11905: 0xC899, + 33904 - 11905: 0xC89A, + 33905 - 11905: 0xB4D0, + 33906 - 11905: 0xC89B, + 33907 - 11905: 0xDDDA, + 33908 - 11905: 0xC89C, + 33909 - 11905: 0xBFFB, + 33910 - 11905: 0xDDE3, + 33911 - 11905: 0xC89D, + 33912 - 11905: 0xDDDF, + 33913 - 11905: 0xC89E, + 33914 - 11905: 0xDDDD, + 33915 - 11905: 0xC89F, + 33916 - 11905: 0xC8A0, + 33917 - 11905: 0xC940, + 33918 - 11905: 0xC941, + 33919 - 11905: 0xC942, + 33920 - 11905: 0xC943, + 33921 - 11905: 0xC944, + 33922 - 11905: 0xB5D9, + 33923 - 11905: 0xC945, + 33924 - 11905: 0xC946, + 33925 - 11905: 0xC947, + 33926 - 11905: 0xC948, + 33927 - 11905: 0xDDDB, + 33928 - 11905: 0xDDDC, + 33929 - 11905: 0xDDDE, + 33930 - 11905: 0xC949, + 33931 - 11905: 0xBDAF, + 33932 - 11905: 0xDDE4, + 33933 - 11905: 0xC94A, + 33934 - 11905: 0xDDE5, + 33935 - 11905: 0xC94B, + 33936 - 11905: 0xC94C, + 33937 - 11905: 0xC94D, + 33938 - 11905: 0xC94E, + 33939 - 11905: 0xC94F, + 33940 - 11905: 0xC950, + 33941 - 11905: 0xC951, + 33942 - 11905: 0xC952, + 33943 - 11905: 0xDDF5, + 33944 - 11905: 0xC953, + 33945 - 11905: 0xC3C9, + 33946 - 11905: 0xC954, + 33947 - 11905: 0xC955, + 33948 - 11905: 0xCBE2, + 33949 - 11905: 0xC956, + 33950 - 11905: 0xC957, + 33951 - 11905: 0xC958, + 33952 - 11905: 0xC959, + 33953 - 11905: 0xDDF2, + 33954 - 11905: 0xC95A, + 33955 - 11905: 0xC95B, + 33956 - 11905: 0xC95C, + 33957 - 11905: 0xC95D, + 33958 - 11905: 0xC95E, + 33959 - 11905: 0xC95F, + 33960 - 11905: 0xC960, + 33961 - 11905: 0xC961, + 33962 - 11905: 0xC962, + 33963 - 11905: 0xC963, + 33964 - 11905: 0xC964, + 33965 - 11905: 0xC965, + 33966 - 11905: 0xC966, + 33967 - 11905: 0xD8E1, + 33968 - 11905: 0xC967, + 33969 - 11905: 0xC968, + 33970 - 11905: 0xC6D1, + 33971 - 11905: 0xC969, + 33972 - 11905: 0xDDF4, + 33973 - 11905: 0xC96A, + 33974 - 11905: 0xC96B, + 33975 - 11905: 0xC96C, + 33976 - 11905: 0xD5F4, + 33977 - 11905: 0xDDF3, + 33978 - 11905: 0xDDF0, + 33979 - 11905: 0xC96D, + 33980 - 11905: 0xC96E, + 33981 - 11905: 0xDDEC, + 33982 - 11905: 0xC96F, + 33983 - 11905: 0xDDEF, + 33984 - 11905: 0xC970, + 33985 - 11905: 0xDDE8, + 33986 - 11905: 0xC971, + 33987 - 11905: 0xC972, + 33988 - 11905: 0xD0EE, + 33989 - 11905: 0xC973, + 33990 - 11905: 0xC974, + 33991 - 11905: 0xC975, + 33992 - 11905: 0xC976, + 33993 - 11905: 0xC8D8, + 33994 - 11905: 0xDDEE, + 33995 - 11905: 0xC977, + 33996 - 11905: 0xC978, + 33997 - 11905: 0xDDE9, + 33998 - 11905: 0xC979, + 33999 - 11905: 0xC97A, + 34000 - 11905: 0xDDEA, + 34001 - 11905: 0xCBF2, + 34002 - 11905: 0xC97B, + 34003 - 11905: 0xDDED, + 34004 - 11905: 0xC97C, + 34005 - 11905: 0xC97D, + 34006 - 11905: 0xB1CD, + 34007 - 11905: 0xC97E, + 34008 - 11905: 0xC980, + 34009 - 11905: 0xC981, + 34010 - 11905: 0xC982, + 34011 - 11905: 0xC983, + 34012 - 11905: 0xC984, + 34013 - 11905: 0xC0B6, + 34014 - 11905: 0xC985, + 34015 - 11905: 0xBCBB, + 34016 - 11905: 0xDDF1, + 34017 - 11905: 0xC986, + 34018 - 11905: 0xC987, + 34019 - 11905: 0xDDF7, + 34020 - 11905: 0xC988, + 34021 - 11905: 0xDDF6, + 34022 - 11905: 0xDDEB, + 34023 - 11905: 0xC989, + 34024 - 11905: 0xC98A, + 34025 - 11905: 0xC98B, + 34026 - 11905: 0xC98C, + 34027 - 11905: 0xC98D, + 34028 - 11905: 0xC5EE, + 34029 - 11905: 0xC98E, + 34030 - 11905: 0xC98F, + 34031 - 11905: 0xC990, + 34032 - 11905: 0xDDFB, + 34033 - 11905: 0xC991, + 34034 - 11905: 0xC992, + 34035 - 11905: 0xC993, + 34036 - 11905: 0xC994, + 34037 - 11905: 0xC995, + 34038 - 11905: 0xC996, + 34039 - 11905: 0xC997, + 34040 - 11905: 0xC998, + 34041 - 11905: 0xC999, + 34042 - 11905: 0xC99A, + 34043 - 11905: 0xC99B, + 34044 - 11905: 0xDEA4, + 34045 - 11905: 0xC99C, + 34046 - 11905: 0xC99D, + 34047 - 11905: 0xDEA3, + 34048 - 11905: 0xC99E, + 34049 - 11905: 0xC99F, + 34050 - 11905: 0xC9A0, + 34051 - 11905: 0xCA40, + 34052 - 11905: 0xCA41, + 34053 - 11905: 0xCA42, + 34054 - 11905: 0xCA43, + 34055 - 11905: 0xCA44, + 34056 - 11905: 0xCA45, + 34057 - 11905: 0xCA46, + 34058 - 11905: 0xCA47, + 34059 - 11905: 0xCA48, + 34060 - 11905: 0xDDF8, + 34061 - 11905: 0xCA49, + 34062 - 11905: 0xCA4A, + 34063 - 11905: 0xCA4B, + 34064 - 11905: 0xCA4C, + 34065 - 11905: 0xC3EF, + 34066 - 11905: 0xCA4D, + 34067 - 11905: 0xC2FB, + 34068 - 11905: 0xCA4E, + 34069 - 11905: 0xCA4F, + 34070 - 11905: 0xCA50, + 34071 - 11905: 0xD5E1, + 34072 - 11905: 0xCA51, + 34073 - 11905: 0xCA52, + 34074 - 11905: 0xCEB5, + 34075 - 11905: 0xCA53, + 34076 - 11905: 0xCA54, + 34077 - 11905: 0xCA55, + 34078 - 11905: 0xCA56, + 34079 - 11905: 0xDDFD, + 34080 - 11905: 0xCA57, + 34081 - 11905: 0xB2CC, + 34082 - 11905: 0xCA58, + 34083 - 11905: 0xCA59, + 34084 - 11905: 0xCA5A, + 34085 - 11905: 0xCA5B, + 34086 - 11905: 0xCA5C, + 34087 - 11905: 0xCA5D, + 34088 - 11905: 0xCA5E, + 34089 - 11905: 0xCA5F, + 34090 - 11905: 0xCA60, + 34091 - 11905: 0xC4E8, + 34092 - 11905: 0xCADF, + 34093 - 11905: 0xCA61, + 34094 - 11905: 0xCA62, + 34095 - 11905: 0xCA63, + 34096 - 11905: 0xCA64, + 34097 - 11905: 0xCA65, + 34098 - 11905: 0xCA66, + 34099 - 11905: 0xCA67, + 34100 - 11905: 0xCA68, + 34101 - 11905: 0xCA69, + 34102 - 11905: 0xCA6A, + 34103 - 11905: 0xC7BE, + 34104 - 11905: 0xDDFA, + 34105 - 11905: 0xDDFC, + 34106 - 11905: 0xDDFE, + 34107 - 11905: 0xDEA2, + 34108 - 11905: 0xB0AA, + 34109 - 11905: 0xB1CE, + 34110 - 11905: 0xCA6B, + 34111 - 11905: 0xCA6C, + 34112 - 11905: 0xCA6D, + 34113 - 11905: 0xCA6E, + 34114 - 11905: 0xCA6F, + 34115 - 11905: 0xDEAC, + 34116 - 11905: 0xCA70, + 34117 - 11905: 0xCA71, + 34118 - 11905: 0xCA72, + 34119 - 11905: 0xCA73, + 34120 - 11905: 0xDEA6, + 34121 - 11905: 0xBDB6, + 34122 - 11905: 0xC8EF, + 34123 - 11905: 0xCA74, + 34124 - 11905: 0xCA75, + 34125 - 11905: 0xCA76, + 34126 - 11905: 0xCA77, + 34127 - 11905: 0xCA78, + 34128 - 11905: 0xCA79, + 34129 - 11905: 0xCA7A, + 34130 - 11905: 0xCA7B, + 34131 - 11905: 0xCA7C, + 34132 - 11905: 0xCA7D, + 34133 - 11905: 0xCA7E, + 34134 - 11905: 0xDEA1, + 34135 - 11905: 0xCA80, + 34136 - 11905: 0xCA81, + 34137 - 11905: 0xDEA5, + 34138 - 11905: 0xCA82, + 34139 - 11905: 0xCA83, + 34140 - 11905: 0xCA84, + 34141 - 11905: 0xCA85, + 34142 - 11905: 0xDEA9, + 34143 - 11905: 0xCA86, + 34144 - 11905: 0xCA87, + 34145 - 11905: 0xCA88, + 34146 - 11905: 0xCA89, + 34147 - 11905: 0xCA8A, + 34148 - 11905: 0xDEA8, + 34149 - 11905: 0xCA8B, + 34150 - 11905: 0xCA8C, + 34151 - 11905: 0xCA8D, + 34152 - 11905: 0xDEA7, + 34153 - 11905: 0xCA8E, + 34154 - 11905: 0xCA8F, + 34155 - 11905: 0xCA90, + 34156 - 11905: 0xCA91, + 34157 - 11905: 0xCA92, + 34158 - 11905: 0xCA93, + 34159 - 11905: 0xCA94, + 34160 - 11905: 0xCA95, + 34161 - 11905: 0xCA96, + 34162 - 11905: 0xDEAD, + 34163 - 11905: 0xCA97, + 34164 - 11905: 0xD4CC, + 34165 - 11905: 0xCA98, + 34166 - 11905: 0xCA99, + 34167 - 11905: 0xCA9A, + 34168 - 11905: 0xCA9B, + 34169 - 11905: 0xDEB3, + 34170 - 11905: 0xDEAA, + 34171 - 11905: 0xDEAE, + 34172 - 11905: 0xCA9C, + 34173 - 11905: 0xCA9D, + 34174 - 11905: 0xC0D9, + 34175 - 11905: 0xCA9E, + 34176 - 11905: 0xCA9F, + 34177 - 11905: 0xCAA0, + 34178 - 11905: 0xCB40, + 34179 - 11905: 0xCB41, + 34180 - 11905: 0xB1A1, + 34181 - 11905: 0xDEB6, + 34182 - 11905: 0xCB42, + 34183 - 11905: 0xDEB1, + 34184 - 11905: 0xCB43, + 34185 - 11905: 0xCB44, + 34186 - 11905: 0xCB45, + 34187 - 11905: 0xCB46, + 34188 - 11905: 0xCB47, + 34189 - 11905: 0xCB48, + 34190 - 11905: 0xCB49, + 34191 - 11905: 0xDEB2, + 34192 - 11905: 0xCB4A, + 34193 - 11905: 0xCB4B, + 34194 - 11905: 0xCB4C, + 34195 - 11905: 0xCB4D, + 34196 - 11905: 0xCB4E, + 34197 - 11905: 0xCB4F, + 34198 - 11905: 0xCB50, + 34199 - 11905: 0xCB51, + 34200 - 11905: 0xCB52, + 34201 - 11905: 0xCB53, + 34202 - 11905: 0xCB54, + 34203 - 11905: 0xD1A6, + 34204 - 11905: 0xDEB5, + 34205 - 11905: 0xCB55, + 34206 - 11905: 0xCB56, + 34207 - 11905: 0xCB57, + 34208 - 11905: 0xCB58, + 34209 - 11905: 0xCB59, + 34210 - 11905: 0xCB5A, + 34211 - 11905: 0xCB5B, + 34212 - 11905: 0xDEAF, + 34213 - 11905: 0xCB5C, + 34214 - 11905: 0xCB5D, + 34215 - 11905: 0xCB5E, + 34216 - 11905: 0xDEB0, + 34217 - 11905: 0xCB5F, + 34218 - 11905: 0xD0BD, + 34219 - 11905: 0xCB60, + 34220 - 11905: 0xCB61, + 34221 - 11905: 0xCB62, + 34222 - 11905: 0xDEB4, + 34223 - 11905: 0xCAED, + 34224 - 11905: 0xDEB9, + 34225 - 11905: 0xCB63, + 34226 - 11905: 0xCB64, + 34227 - 11905: 0xCB65, + 34228 - 11905: 0xCB66, + 34229 - 11905: 0xCB67, + 34230 - 11905: 0xCB68, + 34231 - 11905: 0xDEB8, + 34232 - 11905: 0xCB69, + 34233 - 11905: 0xDEB7, + 34234 - 11905: 0xCB6A, + 34235 - 11905: 0xCB6B, + 34236 - 11905: 0xCB6C, + 34237 - 11905: 0xCB6D, + 34238 - 11905: 0xCB6E, + 34239 - 11905: 0xCB6F, + 34240 - 11905: 0xCB70, + 34241 - 11905: 0xDEBB, + 34242 - 11905: 0xCB71, + 34243 - 11905: 0xCB72, + 34244 - 11905: 0xCB73, + 34245 - 11905: 0xCB74, + 34246 - 11905: 0xCB75, + 34247 - 11905: 0xCB76, + 34248 - 11905: 0xCB77, + 34249 - 11905: 0xBDE5, + 34250 - 11905: 0xCB78, + 34251 - 11905: 0xCB79, + 34252 - 11905: 0xCB7A, + 34253 - 11905: 0xCB7B, + 34254 - 11905: 0xCB7C, + 34255 - 11905: 0xB2D8, + 34256 - 11905: 0xC3EA, + 34257 - 11905: 0xCB7D, + 34258 - 11905: 0xCB7E, + 34259 - 11905: 0xDEBA, + 34260 - 11905: 0xCB80, + 34261 - 11905: 0xC5BA, + 34262 - 11905: 0xCB81, + 34263 - 11905: 0xCB82, + 34264 - 11905: 0xCB83, + 34265 - 11905: 0xCB84, + 34266 - 11905: 0xCB85, + 34267 - 11905: 0xCB86, + 34268 - 11905: 0xDEBC, + 34269 - 11905: 0xCB87, + 34270 - 11905: 0xCB88, + 34271 - 11905: 0xCB89, + 34272 - 11905: 0xCB8A, + 34273 - 11905: 0xCB8B, + 34274 - 11905: 0xCB8C, + 34275 - 11905: 0xCB8D, + 34276 - 11905: 0xCCD9, + 34277 - 11905: 0xCB8E, + 34278 - 11905: 0xCB8F, + 34279 - 11905: 0xCB90, + 34280 - 11905: 0xCB91, + 34281 - 11905: 0xB7AA, + 34282 - 11905: 0xCB92, + 34283 - 11905: 0xCB93, + 34284 - 11905: 0xCB94, + 34285 - 11905: 0xCB95, + 34286 - 11905: 0xCB96, + 34287 - 11905: 0xCB97, + 34288 - 11905: 0xCB98, + 34289 - 11905: 0xCB99, + 34290 - 11905: 0xCB9A, + 34291 - 11905: 0xCB9B, + 34292 - 11905: 0xCB9C, + 34293 - 11905: 0xCB9D, + 34294 - 11905: 0xCB9E, + 34295 - 11905: 0xCB9F, + 34296 - 11905: 0xCBA0, + 34297 - 11905: 0xCC40, + 34298 - 11905: 0xCC41, + 34299 - 11905: 0xD4E5, + 34300 - 11905: 0xCC42, + 34301 - 11905: 0xCC43, + 34302 - 11905: 0xCC44, + 34303 - 11905: 0xDEBD, + 34304 - 11905: 0xCC45, + 34305 - 11905: 0xCC46, + 34306 - 11905: 0xCC47, + 34307 - 11905: 0xCC48, + 34308 - 11905: 0xCC49, + 34309 - 11905: 0xDEBF, + 34310 - 11905: 0xCC4A, + 34311 - 11905: 0xCC4B, + 34312 - 11905: 0xCC4C, + 34313 - 11905: 0xCC4D, + 34314 - 11905: 0xCC4E, + 34315 - 11905: 0xCC4F, + 34316 - 11905: 0xCC50, + 34317 - 11905: 0xCC51, + 34318 - 11905: 0xCC52, + 34319 - 11905: 0xCC53, + 34320 - 11905: 0xCC54, + 34321 - 11905: 0xC4A2, + 34322 - 11905: 0xCC55, + 34323 - 11905: 0xCC56, + 34324 - 11905: 0xCC57, + 34325 - 11905: 0xCC58, + 34326 - 11905: 0xDEC1, + 34327 - 11905: 0xCC59, + 34328 - 11905: 0xCC5A, + 34329 - 11905: 0xCC5B, + 34330 - 11905: 0xCC5C, + 34331 - 11905: 0xCC5D, + 34332 - 11905: 0xCC5E, + 34333 - 11905: 0xCC5F, + 34334 - 11905: 0xCC60, + 34335 - 11905: 0xCC61, + 34336 - 11905: 0xCC62, + 34337 - 11905: 0xCC63, + 34338 - 11905: 0xCC64, + 34339 - 11905: 0xCC65, + 34340 - 11905: 0xCC66, + 34341 - 11905: 0xCC67, + 34342 - 11905: 0xCC68, + 34343 - 11905: 0xDEBE, + 34344 - 11905: 0xCC69, + 34345 - 11905: 0xDEC0, + 34346 - 11905: 0xCC6A, + 34347 - 11905: 0xCC6B, + 34348 - 11905: 0xCC6C, + 34349 - 11905: 0xCC6D, + 34350 - 11905: 0xCC6E, + 34351 - 11905: 0xCC6F, + 34352 - 11905: 0xCC70, + 34353 - 11905: 0xCC71, + 34354 - 11905: 0xCC72, + 34355 - 11905: 0xCC73, + 34356 - 11905: 0xCC74, + 34357 - 11905: 0xCC75, + 34358 - 11905: 0xCC76, + 34359 - 11905: 0xCC77, + 34360 - 11905: 0xD5BA, + 34361 - 11905: 0xCC78, + 34362 - 11905: 0xCC79, + 34363 - 11905: 0xCC7A, + 34364 - 11905: 0xDEC2, + 34365 - 11905: 0xCC7B, + 34366 - 11905: 0xCC7C, + 34367 - 11905: 0xCC7D, + 34368 - 11905: 0xCC7E, + 34369 - 11905: 0xCC80, + 34370 - 11905: 0xCC81, + 34371 - 11905: 0xCC82, + 34372 - 11905: 0xCC83, + 34373 - 11905: 0xCC84, + 34374 - 11905: 0xCC85, + 34375 - 11905: 0xCC86, + 34376 - 11905: 0xCC87, + 34377 - 11905: 0xCC88, + 34378 - 11905: 0xCC89, + 34379 - 11905: 0xCC8A, + 34380 - 11905: 0xCC8B, + 34381 - 11905: 0xF2AE, + 34382 - 11905: 0xBBA2, + 34383 - 11905: 0xC2B2, + 34384 - 11905: 0xC5B0, + 34385 - 11905: 0xC2C7, + 34386 - 11905: 0xCC8C, + 34387 - 11905: 0xCC8D, + 34388 - 11905: 0xF2AF, + 34389 - 11905: 0xCC8E, + 34390 - 11905: 0xCC8F, + 34391 - 11905: 0xCC90, + 34392 - 11905: 0xCC91, + 34393 - 11905: 0xCC92, + 34394 - 11905: 0xD0E9, + 34395 - 11905: 0xCC93, + 34396 - 11905: 0xCC94, + 34397 - 11905: 0xCC95, + 34398 - 11905: 0xD3DD, + 34399 - 11905: 0xCC96, + 34400 - 11905: 0xCC97, + 34401 - 11905: 0xCC98, + 34402 - 11905: 0xEBBD, + 34403 - 11905: 0xCC99, + 34404 - 11905: 0xCC9A, + 34405 - 11905: 0xCC9B, + 34406 - 11905: 0xCC9C, + 34407 - 11905: 0xCC9D, + 34408 - 11905: 0xCC9E, + 34409 - 11905: 0xCC9F, + 34410 - 11905: 0xCCA0, + 34411 - 11905: 0xB3E6, + 34412 - 11905: 0xF2B0, + 34413 - 11905: 0xCD40, + 34414 - 11905: 0xF2B1, + 34415 - 11905: 0xCD41, + 34416 - 11905: 0xCD42, + 34417 - 11905: 0xCAAD, + 34418 - 11905: 0xCD43, + 34419 - 11905: 0xCD44, + 34420 - 11905: 0xCD45, + 34421 - 11905: 0xCD46, + 34422 - 11905: 0xCD47, + 34423 - 11905: 0xCD48, + 34424 - 11905: 0xCD49, + 34425 - 11905: 0xBAE7, + 34426 - 11905: 0xF2B3, + 34427 - 11905: 0xF2B5, + 34428 - 11905: 0xF2B4, + 34429 - 11905: 0xCBE4, + 34430 - 11905: 0xCFBA, + 34431 - 11905: 0xF2B2, + 34432 - 11905: 0xCAB4, + 34433 - 11905: 0xD2CF, + 34434 - 11905: 0xC2EC, + 34435 - 11905: 0xCD4A, + 34436 - 11905: 0xCD4B, + 34437 - 11905: 0xCD4C, + 34438 - 11905: 0xCD4D, + 34439 - 11905: 0xCD4E, + 34440 - 11905: 0xCD4F, + 34441 - 11905: 0xCD50, + 34442 - 11905: 0xCEC3, + 34443 - 11905: 0xF2B8, + 34444 - 11905: 0xB0F6, + 34445 - 11905: 0xF2B7, + 34446 - 11905: 0xCD51, + 34447 - 11905: 0xCD52, + 34448 - 11905: 0xCD53, + 34449 - 11905: 0xCD54, + 34450 - 11905: 0xCD55, + 34451 - 11905: 0xF2BE, + 34452 - 11905: 0xCD56, + 34453 - 11905: 0xB2CF, + 34454 - 11905: 0xCD57, + 34455 - 11905: 0xCD58, + 34456 - 11905: 0xCD59, + 34457 - 11905: 0xCD5A, + 34458 - 11905: 0xCD5B, + 34459 - 11905: 0xCD5C, + 34460 - 11905: 0xD1C1, + 34461 - 11905: 0xF2BA, + 34462 - 11905: 0xCD5D, + 34463 - 11905: 0xCD5E, + 34464 - 11905: 0xCD5F, + 34465 - 11905: 0xCD60, + 34466 - 11905: 0xCD61, + 34467 - 11905: 0xF2BC, + 34468 - 11905: 0xD4E9, + 34469 - 11905: 0xCD62, + 34470 - 11905: 0xCD63, + 34471 - 11905: 0xF2BB, + 34472 - 11905: 0xF2B6, + 34473 - 11905: 0xF2BF, + 34474 - 11905: 0xF2BD, + 34475 - 11905: 0xCD64, + 34476 - 11905: 0xF2B9, + 34477 - 11905: 0xCD65, + 34478 - 11905: 0xCD66, + 34479 - 11905: 0xF2C7, + 34480 - 11905: 0xF2C4, + 34481 - 11905: 0xF2C6, + 34482 - 11905: 0xCD67, + 34483 - 11905: 0xCD68, + 34484 - 11905: 0xF2CA, + 34485 - 11905: 0xF2C2, + 34486 - 11905: 0xF2C0, + 34487 - 11905: 0xCD69, + 34488 - 11905: 0xCD6A, + 34489 - 11905: 0xCD6B, + 34490 - 11905: 0xF2C5, + 34491 - 11905: 0xCD6C, + 34492 - 11905: 0xCD6D, + 34493 - 11905: 0xCD6E, + 34494 - 11905: 0xCD6F, + 34495 - 11905: 0xCD70, + 34496 - 11905: 0xD6FB, + 34497 - 11905: 0xCD71, + 34498 - 11905: 0xCD72, + 34499 - 11905: 0xCD73, + 34500 - 11905: 0xF2C1, + 34501 - 11905: 0xCD74, + 34502 - 11905: 0xC7F9, + 34503 - 11905: 0xC9DF, + 34504 - 11905: 0xCD75, + 34505 - 11905: 0xF2C8, + 34506 - 11905: 0xB9C6, + 34507 - 11905: 0xB5B0, + 34508 - 11905: 0xCD76, + 34509 - 11905: 0xCD77, + 34510 - 11905: 0xF2C3, + 34511 - 11905: 0xF2C9, + 34512 - 11905: 0xF2D0, + 34513 - 11905: 0xF2D6, + 34514 - 11905: 0xCD78, + 34515 - 11905: 0xCD79, + 34516 - 11905: 0xBBD7, + 34517 - 11905: 0xCD7A, + 34518 - 11905: 0xCD7B, + 34519 - 11905: 0xCD7C, + 34520 - 11905: 0xF2D5, + 34521 - 11905: 0xCDDC, + 34522 - 11905: 0xCD7D, + 34523 - 11905: 0xD6EB, + 34524 - 11905: 0xCD7E, + 34525 - 11905: 0xCD80, + 34526 - 11905: 0xF2D2, + 34527 - 11905: 0xF2D4, + 34528 - 11905: 0xCD81, + 34529 - 11905: 0xCD82, + 34530 - 11905: 0xCD83, + 34531 - 11905: 0xCD84, + 34532 - 11905: 0xB8F2, + 34533 - 11905: 0xCD85, + 34534 - 11905: 0xCD86, + 34535 - 11905: 0xCD87, + 34536 - 11905: 0xCD88, + 34537 - 11905: 0xF2CB, + 34538 - 11905: 0xCD89, + 34539 - 11905: 0xCD8A, + 34540 - 11905: 0xCD8B, + 34541 - 11905: 0xF2CE, + 34542 - 11905: 0xC2F9, + 34543 - 11905: 0xCD8C, + 34544 - 11905: 0xD5DD, + 34545 - 11905: 0xF2CC, + 34546 - 11905: 0xF2CD, + 34547 - 11905: 0xF2CF, + 34548 - 11905: 0xF2D3, + 34549 - 11905: 0xCD8D, + 34550 - 11905: 0xCD8E, + 34551 - 11905: 0xCD8F, + 34552 - 11905: 0xF2D9, + 34553 - 11905: 0xD3BC, + 34554 - 11905: 0xCD90, + 34555 - 11905: 0xCD91, + 34556 - 11905: 0xCD92, + 34557 - 11905: 0xCD93, + 34558 - 11905: 0xB6EA, + 34559 - 11905: 0xCD94, + 34560 - 11905: 0xCAF1, + 34561 - 11905: 0xCD95, + 34562 - 11905: 0xB7E4, + 34563 - 11905: 0xF2D7, + 34564 - 11905: 0xCD96, + 34565 - 11905: 0xCD97, + 34566 - 11905: 0xCD98, + 34567 - 11905: 0xF2D8, + 34568 - 11905: 0xF2DA, + 34569 - 11905: 0xF2DD, + 34570 - 11905: 0xF2DB, + 34571 - 11905: 0xCD99, + 34572 - 11905: 0xCD9A, + 34573 - 11905: 0xF2DC, + 34574 - 11905: 0xCD9B, + 34575 - 11905: 0xCD9C, + 34576 - 11905: 0xCD9D, + 34577 - 11905: 0xCD9E, + 34578 - 11905: 0xD1D1, + 34579 - 11905: 0xF2D1, + 34580 - 11905: 0xCD9F, + 34581 - 11905: 0xCDC9, + 34582 - 11905: 0xCDA0, + 34583 - 11905: 0xCECF, + 34584 - 11905: 0xD6A9, + 34585 - 11905: 0xCE40, + 34586 - 11905: 0xF2E3, + 34587 - 11905: 0xCE41, + 34588 - 11905: 0xC3DB, + 34589 - 11905: 0xCE42, + 34590 - 11905: 0xF2E0, + 34591 - 11905: 0xCE43, + 34592 - 11905: 0xCE44, + 34593 - 11905: 0xC0AF, + 34594 - 11905: 0xF2EC, + 34595 - 11905: 0xF2DE, + 34596 - 11905: 0xCE45, + 34597 - 11905: 0xF2E1, + 34598 - 11905: 0xCE46, + 34599 - 11905: 0xCE47, + 34600 - 11905: 0xCE48, + 34601 - 11905: 0xF2E8, + 34602 - 11905: 0xCE49, + 34603 - 11905: 0xCE4A, + 34604 - 11905: 0xCE4B, + 34605 - 11905: 0xCE4C, + 34606 - 11905: 0xF2E2, + 34607 - 11905: 0xCE4D, + 34608 - 11905: 0xCE4E, + 34609 - 11905: 0xF2E7, + 34610 - 11905: 0xCE4F, + 34611 - 11905: 0xCE50, + 34612 - 11905: 0xF2E6, + 34613 - 11905: 0xCE51, + 34614 - 11905: 0xCE52, + 34615 - 11905: 0xF2E9, + 34616 - 11905: 0xCE53, + 34617 - 11905: 0xCE54, + 34618 - 11905: 0xCE55, + 34619 - 11905: 0xF2DF, + 34620 - 11905: 0xCE56, + 34621 - 11905: 0xCE57, + 34622 - 11905: 0xF2E4, + 34623 - 11905: 0xF2EA, + 34624 - 11905: 0xCE58, + 34625 - 11905: 0xCE59, + 34626 - 11905: 0xCE5A, + 34627 - 11905: 0xCE5B, + 34628 - 11905: 0xCE5C, + 34629 - 11905: 0xCE5D, + 34630 - 11905: 0xCE5E, + 34631 - 11905: 0xD3AC, + 34632 - 11905: 0xF2E5, + 34633 - 11905: 0xB2F5, + 34634 - 11905: 0xCE5F, + 34635 - 11905: 0xCE60, + 34636 - 11905: 0xF2F2, + 34637 - 11905: 0xCE61, + 34638 - 11905: 0xD0AB, + 34639 - 11905: 0xCE62, + 34640 - 11905: 0xCE63, + 34641 - 11905: 0xCE64, + 34642 - 11905: 0xCE65, + 34643 - 11905: 0xF2F5, + 34644 - 11905: 0xCE66, + 34645 - 11905: 0xCE67, + 34646 - 11905: 0xCE68, + 34647 - 11905: 0xBBC8, + 34648 - 11905: 0xCE69, + 34649 - 11905: 0xF2F9, + 34650 - 11905: 0xCE6A, + 34651 - 11905: 0xCE6B, + 34652 - 11905: 0xCE6C, + 34653 - 11905: 0xCE6D, + 34654 - 11905: 0xCE6E, + 34655 - 11905: 0xCE6F, + 34656 - 11905: 0xF2F0, + 34657 - 11905: 0xCE70, + 34658 - 11905: 0xCE71, + 34659 - 11905: 0xF2F6, + 34660 - 11905: 0xF2F8, + 34661 - 11905: 0xF2FA, + 34662 - 11905: 0xCE72, + 34663 - 11905: 0xCE73, + 34664 - 11905: 0xCE74, + 34665 - 11905: 0xCE75, + 34666 - 11905: 0xCE76, + 34667 - 11905: 0xCE77, + 34668 - 11905: 0xCE78, + 34669 - 11905: 0xCE79, + 34670 - 11905: 0xF2F3, + 34671 - 11905: 0xCE7A, + 34672 - 11905: 0xF2F1, + 34673 - 11905: 0xCE7B, + 34674 - 11905: 0xCE7C, + 34675 - 11905: 0xCE7D, + 34676 - 11905: 0xBAFB, + 34677 - 11905: 0xCE7E, + 34678 - 11905: 0xB5FB, + 34679 - 11905: 0xCE80, + 34680 - 11905: 0xCE81, + 34681 - 11905: 0xCE82, + 34682 - 11905: 0xCE83, + 34683 - 11905: 0xF2EF, + 34684 - 11905: 0xF2F7, + 34685 - 11905: 0xF2ED, + 34686 - 11905: 0xF2EE, + 34687 - 11905: 0xCE84, + 34688 - 11905: 0xCE85, + 34689 - 11905: 0xCE86, + 34690 - 11905: 0xF2EB, + 34691 - 11905: 0xF3A6, + 34692 - 11905: 0xCE87, + 34693 - 11905: 0xF3A3, + 34694 - 11905: 0xCE88, + 34695 - 11905: 0xCE89, + 34696 - 11905: 0xF3A2, + 34697 - 11905: 0xCE8A, + 34698 - 11905: 0xCE8B, + 34699 - 11905: 0xF2F4, + 34700 - 11905: 0xCE8C, + 34701 - 11905: 0xC8DA, + 34702 - 11905: 0xCE8D, + 34703 - 11905: 0xCE8E, + 34704 - 11905: 0xCE8F, + 34705 - 11905: 0xCE90, + 34706 - 11905: 0xCE91, + 34707 - 11905: 0xF2FB, + 34708 - 11905: 0xCE92, + 34709 - 11905: 0xCE93, + 34710 - 11905: 0xCE94, + 34711 - 11905: 0xF3A5, + 34712 - 11905: 0xCE95, + 34713 - 11905: 0xCE96, + 34714 - 11905: 0xCE97, + 34715 - 11905: 0xCE98, + 34716 - 11905: 0xCE99, + 34717 - 11905: 0xCE9A, + 34718 - 11905: 0xCE9B, + 34719 - 11905: 0xC3F8, + 34720 - 11905: 0xCE9C, + 34721 - 11905: 0xCE9D, + 34722 - 11905: 0xCE9E, + 34723 - 11905: 0xCE9F, + 34724 - 11905: 0xCEA0, + 34725 - 11905: 0xCF40, + 34726 - 11905: 0xCF41, + 34727 - 11905: 0xCF42, + 34728 - 11905: 0xF2FD, + 34729 - 11905: 0xCF43, + 34730 - 11905: 0xCF44, + 34731 - 11905: 0xF3A7, + 34732 - 11905: 0xF3A9, + 34733 - 11905: 0xF3A4, + 34734 - 11905: 0xCF45, + 34735 - 11905: 0xF2FC, + 34736 - 11905: 0xCF46, + 34737 - 11905: 0xCF47, + 34738 - 11905: 0xCF48, + 34739 - 11905: 0xF3AB, + 34740 - 11905: 0xCF49, + 34741 - 11905: 0xF3AA, + 34742 - 11905: 0xCF4A, + 34743 - 11905: 0xCF4B, + 34744 - 11905: 0xCF4C, + 34745 - 11905: 0xCF4D, + 34746 - 11905: 0xC2DD, + 34747 - 11905: 0xCF4E, + 34748 - 11905: 0xCF4F, + 34749 - 11905: 0xF3AE, + 34750 - 11905: 0xCF50, + 34751 - 11905: 0xCF51, + 34752 - 11905: 0xF3B0, + 34753 - 11905: 0xCF52, + 34754 - 11905: 0xCF53, + 34755 - 11905: 0xCF54, + 34756 - 11905: 0xCF55, + 34757 - 11905: 0xCF56, + 34758 - 11905: 0xF3A1, + 34759 - 11905: 0xCF57, + 34760 - 11905: 0xCF58, + 34761 - 11905: 0xCF59, + 34762 - 11905: 0xF3B1, + 34763 - 11905: 0xF3AC, + 34764 - 11905: 0xCF5A, + 34765 - 11905: 0xCF5B, + 34766 - 11905: 0xCF5C, + 34767 - 11905: 0xCF5D, + 34768 - 11905: 0xCF5E, + 34769 - 11905: 0xF3AF, + 34770 - 11905: 0xF2FE, + 34771 - 11905: 0xF3AD, + 34772 - 11905: 0xCF5F, + 34773 - 11905: 0xCF60, + 34774 - 11905: 0xCF61, + 34775 - 11905: 0xCF62, + 34776 - 11905: 0xCF63, + 34777 - 11905: 0xCF64, + 34778 - 11905: 0xCF65, + 34779 - 11905: 0xF3B2, + 34780 - 11905: 0xCF66, + 34781 - 11905: 0xCF67, + 34782 - 11905: 0xCF68, + 34783 - 11905: 0xCF69, + 34784 - 11905: 0xF3B4, + 34785 - 11905: 0xCF6A, + 34786 - 11905: 0xCF6B, + 34787 - 11905: 0xCF6C, + 34788 - 11905: 0xCF6D, + 34789 - 11905: 0xF3A8, + 34790 - 11905: 0xCF6E, + 34791 - 11905: 0xCF6F, + 34792 - 11905: 0xCF70, + 34793 - 11905: 0xCF71, + 34794 - 11905: 0xF3B3, + 34795 - 11905: 0xCF72, + 34796 - 11905: 0xCF73, + 34797 - 11905: 0xCF74, + 34798 - 11905: 0xF3B5, + 34799 - 11905: 0xCF75, + 34800 - 11905: 0xCF76, + 34801 - 11905: 0xCF77, + 34802 - 11905: 0xCF78, + 34803 - 11905: 0xCF79, + 34804 - 11905: 0xCF7A, + 34805 - 11905: 0xCF7B, + 34806 - 11905: 0xCF7C, + 34807 - 11905: 0xCF7D, + 34808 - 11905: 0xCF7E, + 34809 - 11905: 0xD0B7, + 34810 - 11905: 0xCF80, + 34811 - 11905: 0xCF81, + 34812 - 11905: 0xCF82, + 34813 - 11905: 0xCF83, + 34814 - 11905: 0xF3B8, + 34815 - 11905: 0xCF84, + 34816 - 11905: 0xCF85, + 34817 - 11905: 0xCF86, + 34818 - 11905: 0xCF87, + 34819 - 11905: 0xD9F9, + 34820 - 11905: 0xCF88, + 34821 - 11905: 0xCF89, + 34822 - 11905: 0xCF8A, + 34823 - 11905: 0xCF8B, + 34824 - 11905: 0xCF8C, + 34825 - 11905: 0xCF8D, + 34826 - 11905: 0xF3B9, + 34827 - 11905: 0xCF8E, + 34828 - 11905: 0xCF8F, + 34829 - 11905: 0xCF90, + 34830 - 11905: 0xCF91, + 34831 - 11905: 0xCF92, + 34832 - 11905: 0xCF93, + 34833 - 11905: 0xCF94, + 34834 - 11905: 0xCF95, + 34835 - 11905: 0xF3B7, + 34836 - 11905: 0xCF96, + 34837 - 11905: 0xC8E4, + 34838 - 11905: 0xF3B6, + 34839 - 11905: 0xCF97, + 34840 - 11905: 0xCF98, + 34841 - 11905: 0xCF99, + 34842 - 11905: 0xCF9A, + 34843 - 11905: 0xF3BA, + 34844 - 11905: 0xCF9B, + 34845 - 11905: 0xCF9C, + 34846 - 11905: 0xCF9D, + 34847 - 11905: 0xCF9E, + 34848 - 11905: 0xCF9F, + 34849 - 11905: 0xF3BB, + 34850 - 11905: 0xB4C0, + 34851 - 11905: 0xCFA0, + 34852 - 11905: 0xD040, + 34853 - 11905: 0xD041, + 34854 - 11905: 0xD042, + 34855 - 11905: 0xD043, + 34856 - 11905: 0xD044, + 34857 - 11905: 0xD045, + 34858 - 11905: 0xD046, + 34859 - 11905: 0xD047, + 34860 - 11905: 0xD048, + 34861 - 11905: 0xD049, + 34862 - 11905: 0xD04A, + 34863 - 11905: 0xD04B, + 34864 - 11905: 0xD04C, + 34865 - 11905: 0xD04D, + 34866 - 11905: 0xEEC3, + 34867 - 11905: 0xD04E, + 34868 - 11905: 0xD04F, + 34869 - 11905: 0xD050, + 34870 - 11905: 0xD051, + 34871 - 11905: 0xD052, + 34872 - 11905: 0xD053, + 34873 - 11905: 0xF3BC, + 34874 - 11905: 0xD054, + 34875 - 11905: 0xD055, + 34876 - 11905: 0xF3BD, + 34877 - 11905: 0xD056, + 34878 - 11905: 0xD057, + 34879 - 11905: 0xD058, + 34880 - 11905: 0xD1AA, + 34881 - 11905: 0xD059, + 34882 - 11905: 0xD05A, + 34883 - 11905: 0xD05B, + 34884 - 11905: 0xF4AC, + 34885 - 11905: 0xD0C6, + 34886 - 11905: 0xD05C, + 34887 - 11905: 0xD05D, + 34888 - 11905: 0xD05E, + 34889 - 11905: 0xD05F, + 34890 - 11905: 0xD060, + 34891 - 11905: 0xD061, + 34892 - 11905: 0xD0D0, + 34893 - 11905: 0xD1DC, + 34894 - 11905: 0xD062, + 34895 - 11905: 0xD063, + 34896 - 11905: 0xD064, + 34897 - 11905: 0xD065, + 34898 - 11905: 0xD066, + 34899 - 11905: 0xD067, + 34900 - 11905: 0xCFCE, + 34901 - 11905: 0xD068, + 34902 - 11905: 0xD069, + 34903 - 11905: 0xBDD6, + 34904 - 11905: 0xD06A, + 34905 - 11905: 0xD1C3, + 34906 - 11905: 0xD06B, + 34907 - 11905: 0xD06C, + 34908 - 11905: 0xD06D, + 34909 - 11905: 0xD06E, + 34910 - 11905: 0xD06F, + 34911 - 11905: 0xD070, + 34912 - 11905: 0xD071, + 34913 - 11905: 0xBAE2, + 34914 - 11905: 0xE1E9, + 34915 - 11905: 0xD2C2, + 34916 - 11905: 0xF1C2, + 34917 - 11905: 0xB2B9, + 34918 - 11905: 0xD072, + 34919 - 11905: 0xD073, + 34920 - 11905: 0xB1ED, + 34921 - 11905: 0xF1C3, + 34922 - 11905: 0xD074, + 34923 - 11905: 0xC9C0, + 34924 - 11905: 0xB3C4, + 34925 - 11905: 0xD075, + 34926 - 11905: 0xD9F2, + 34927 - 11905: 0xD076, + 34928 - 11905: 0xCBA5, + 34929 - 11905: 0xD077, + 34930 - 11905: 0xF1C4, + 34931 - 11905: 0xD078, + 34932 - 11905: 0xD079, + 34933 - 11905: 0xD07A, + 34934 - 11905: 0xD07B, + 34935 - 11905: 0xD6D4, + 34936 - 11905: 0xD07C, + 34937 - 11905: 0xD07D, + 34938 - 11905: 0xD07E, + 34939 - 11905: 0xD080, + 34940 - 11905: 0xD081, + 34941 - 11905: 0xF1C5, + 34942 - 11905: 0xF4C0, + 34943 - 11905: 0xF1C6, + 34944 - 11905: 0xD082, + 34945 - 11905: 0xD4AC, + 34946 - 11905: 0xF1C7, + 34947 - 11905: 0xD083, + 34948 - 11905: 0xB0C0, + 34949 - 11905: 0xF4C1, + 34950 - 11905: 0xD084, + 34951 - 11905: 0xD085, + 34952 - 11905: 0xF4C2, + 34953 - 11905: 0xD086, + 34954 - 11905: 0xD087, + 34955 - 11905: 0xB4FC, + 34956 - 11905: 0xD088, + 34957 - 11905: 0xC5DB, + 34958 - 11905: 0xD089, + 34959 - 11905: 0xD08A, + 34960 - 11905: 0xD08B, + 34961 - 11905: 0xD08C, + 34962 - 11905: 0xCCBB, + 34963 - 11905: 0xD08D, + 34964 - 11905: 0xD08E, + 34965 - 11905: 0xD08F, + 34966 - 11905: 0xD0E4, + 34967 - 11905: 0xD090, + 34968 - 11905: 0xD091, + 34969 - 11905: 0xD092, + 34970 - 11905: 0xD093, + 34971 - 11905: 0xD094, + 34972 - 11905: 0xCDE0, + 34973 - 11905: 0xD095, + 34974 - 11905: 0xD096, + 34975 - 11905: 0xD097, + 34976 - 11905: 0xD098, + 34977 - 11905: 0xD099, + 34978 - 11905: 0xF1C8, + 34979 - 11905: 0xD09A, + 34980 - 11905: 0xD9F3, + 34981 - 11905: 0xD09B, + 34982 - 11905: 0xD09C, + 34983 - 11905: 0xD09D, + 34984 - 11905: 0xD09E, + 34985 - 11905: 0xD09F, + 34986 - 11905: 0xD0A0, + 34987 - 11905: 0xB1BB, + 34988 - 11905: 0xD140, + 34989 - 11905: 0xCFAE, + 34990 - 11905: 0xD141, + 34991 - 11905: 0xD142, + 34992 - 11905: 0xD143, + 34993 - 11905: 0xB8A4, + 34994 - 11905: 0xD144, + 34995 - 11905: 0xD145, + 34996 - 11905: 0xD146, + 34997 - 11905: 0xD147, + 34998 - 11905: 0xD148, + 34999 - 11905: 0xF1CA, + 35000 - 11905: 0xD149, + 35001 - 11905: 0xD14A, + 35002 - 11905: 0xD14B, + 35003 - 11905: 0xD14C, + 35004 - 11905: 0xF1CB, + 35005 - 11905: 0xD14D, + 35006 - 11905: 0xD14E, + 35007 - 11905: 0xD14F, + 35008 - 11905: 0xD150, + 35009 - 11905: 0xB2C3, + 35010 - 11905: 0xC1D1, + 35011 - 11905: 0xD151, + 35012 - 11905: 0xD152, + 35013 - 11905: 0xD7B0, + 35014 - 11905: 0xF1C9, + 35015 - 11905: 0xD153, + 35016 - 11905: 0xD154, + 35017 - 11905: 0xF1CC, + 35018 - 11905: 0xD155, + 35019 - 11905: 0xD156, + 35020 - 11905: 0xD157, + 35021 - 11905: 0xD158, + 35022 - 11905: 0xF1CE, + 35023 - 11905: 0xD159, + 35024 - 11905: 0xD15A, + 35025 - 11905: 0xD15B, + 35026 - 11905: 0xD9F6, + 35027 - 11905: 0xD15C, + 35028 - 11905: 0xD2E1, + 35029 - 11905: 0xD4A3, + 35030 - 11905: 0xD15D, + 35031 - 11905: 0xD15E, + 35032 - 11905: 0xF4C3, + 35033 - 11905: 0xC8B9, + 35034 - 11905: 0xD15F, + 35035 - 11905: 0xD160, + 35036 - 11905: 0xD161, + 35037 - 11905: 0xD162, + 35038 - 11905: 0xD163, + 35039 - 11905: 0xF4C4, + 35040 - 11905: 0xD164, + 35041 - 11905: 0xD165, + 35042 - 11905: 0xF1CD, + 35043 - 11905: 0xF1CF, + 35044 - 11905: 0xBFE3, + 35045 - 11905: 0xF1D0, + 35046 - 11905: 0xD166, + 35047 - 11905: 0xD167, + 35048 - 11905: 0xF1D4, + 35049 - 11905: 0xD168, + 35050 - 11905: 0xD169, + 35051 - 11905: 0xD16A, + 35052 - 11905: 0xD16B, + 35053 - 11905: 0xD16C, + 35054 - 11905: 0xD16D, + 35055 - 11905: 0xD16E, + 35056 - 11905: 0xF1D6, + 35057 - 11905: 0xF1D1, + 35058 - 11905: 0xD16F, + 35059 - 11905: 0xC9D1, + 35060 - 11905: 0xC5E1, + 35061 - 11905: 0xD170, + 35062 - 11905: 0xD171, + 35063 - 11905: 0xD172, + 35064 - 11905: 0xC2E3, + 35065 - 11905: 0xB9FC, + 35066 - 11905: 0xD173, + 35067 - 11905: 0xD174, + 35068 - 11905: 0xF1D3, + 35069 - 11905: 0xD175, + 35070 - 11905: 0xF1D5, + 35071 - 11905: 0xD176, + 35072 - 11905: 0xD177, + 35073 - 11905: 0xD178, + 35074 - 11905: 0xB9D3, + 35075 - 11905: 0xD179, + 35076 - 11905: 0xD17A, + 35077 - 11905: 0xD17B, + 35078 - 11905: 0xD17C, + 35079 - 11905: 0xD17D, + 35080 - 11905: 0xD17E, + 35081 - 11905: 0xD180, + 35082 - 11905: 0xF1DB, + 35083 - 11905: 0xD181, + 35084 - 11905: 0xD182, + 35085 - 11905: 0xD183, + 35086 - 11905: 0xD184, + 35087 - 11905: 0xD185, + 35088 - 11905: 0xBAD6, + 35089 - 11905: 0xD186, + 35090 - 11905: 0xB0FD, + 35091 - 11905: 0xF1D9, + 35092 - 11905: 0xD187, + 35093 - 11905: 0xD188, + 35094 - 11905: 0xD189, + 35095 - 11905: 0xD18A, + 35096 - 11905: 0xD18B, + 35097 - 11905: 0xF1D8, + 35098 - 11905: 0xF1D2, + 35099 - 11905: 0xF1DA, + 35100 - 11905: 0xD18C, + 35101 - 11905: 0xD18D, + 35102 - 11905: 0xD18E, + 35103 - 11905: 0xD18F, + 35104 - 11905: 0xD190, + 35105 - 11905: 0xF1D7, + 35106 - 11905: 0xD191, + 35107 - 11905: 0xD192, + 35108 - 11905: 0xD193, + 35109 - 11905: 0xC8EC, + 35110 - 11905: 0xD194, + 35111 - 11905: 0xD195, + 35112 - 11905: 0xD196, + 35113 - 11905: 0xD197, + 35114 - 11905: 0xCDCA, + 35115 - 11905: 0xF1DD, + 35116 - 11905: 0xD198, + 35117 - 11905: 0xD199, + 35118 - 11905: 0xD19A, + 35119 - 11905: 0xD19B, + 35120 - 11905: 0xE5BD, + 35121 - 11905: 0xD19C, + 35122 - 11905: 0xD19D, + 35123 - 11905: 0xD19E, + 35124 - 11905: 0xF1DC, + 35125 - 11905: 0xD19F, + 35126 - 11905: 0xF1DE, + 35127 - 11905: 0xD1A0, + 35128 - 11905: 0xD240, + 35129 - 11905: 0xD241, + 35130 - 11905: 0xD242, + 35131 - 11905: 0xD243, + 35132 - 11905: 0xD244, + 35133 - 11905: 0xD245, + 35134 - 11905: 0xD246, + 35135 - 11905: 0xD247, + 35136 - 11905: 0xD248, + 35137 - 11905: 0xF1DF, + 35138 - 11905: 0xD249, + 35139 - 11905: 0xD24A, + 35140 - 11905: 0xCFE5, + 35141 - 11905: 0xD24B, + 35142 - 11905: 0xD24C, + 35143 - 11905: 0xD24D, + 35144 - 11905: 0xD24E, + 35145 - 11905: 0xD24F, + 35146 - 11905: 0xD250, + 35147 - 11905: 0xD251, + 35148 - 11905: 0xD252, + 35149 - 11905: 0xD253, + 35150 - 11905: 0xD254, + 35151 - 11905: 0xD255, + 35152 - 11905: 0xD256, + 35153 - 11905: 0xD257, + 35154 - 11905: 0xD258, + 35155 - 11905: 0xD259, + 35156 - 11905: 0xD25A, + 35157 - 11905: 0xD25B, + 35158 - 11905: 0xD25C, + 35159 - 11905: 0xD25D, + 35160 - 11905: 0xD25E, + 35161 - 11905: 0xD25F, + 35162 - 11905: 0xD260, + 35163 - 11905: 0xD261, + 35164 - 11905: 0xD262, + 35165 - 11905: 0xD263, + 35166 - 11905: 0xF4C5, + 35167 - 11905: 0xBDF3, + 35168 - 11905: 0xD264, + 35169 - 11905: 0xD265, + 35170 - 11905: 0xD266, + 35171 - 11905: 0xD267, + 35172 - 11905: 0xD268, + 35173 - 11905: 0xD269, + 35174 - 11905: 0xF1E0, + 35175 - 11905: 0xD26A, + 35176 - 11905: 0xD26B, + 35177 - 11905: 0xD26C, + 35178 - 11905: 0xD26D, + 35179 - 11905: 0xD26E, + 35180 - 11905: 0xD26F, + 35181 - 11905: 0xD270, + 35182 - 11905: 0xD271, + 35183 - 11905: 0xD272, + 35184 - 11905: 0xD273, + 35185 - 11905: 0xD274, + 35186 - 11905: 0xD275, + 35187 - 11905: 0xD276, + 35188 - 11905: 0xD277, + 35189 - 11905: 0xD278, + 35190 - 11905: 0xD279, + 35191 - 11905: 0xD27A, + 35192 - 11905: 0xD27B, + 35193 - 11905: 0xD27C, + 35194 - 11905: 0xD27D, + 35195 - 11905: 0xF1E1, + 35196 - 11905: 0xD27E, + 35197 - 11905: 0xD280, + 35198 - 11905: 0xD281, + 35199 - 11905: 0xCEF7, + 35200 - 11905: 0xD282, + 35201 - 11905: 0xD2AA, + 35202 - 11905: 0xD283, + 35203 - 11905: 0xF1FB, + 35204 - 11905: 0xD284, + 35205 - 11905: 0xD285, + 35206 - 11905: 0xB8B2, + 35207 - 11905: 0xD286, + 35208 - 11905: 0xD287, + 35209 - 11905: 0xD288, + 35210 - 11905: 0xD289, + 35211 - 11905: 0xD28A, + 35212 - 11905: 0xD28B, + 35213 - 11905: 0xD28C, + 35214 - 11905: 0xD28D, + 35215 - 11905: 0xD28E, + 35216 - 11905: 0xD28F, + 35217 - 11905: 0xD290, + 35218 - 11905: 0xD291, + 35219 - 11905: 0xD292, + 35220 - 11905: 0xD293, + 35221 - 11905: 0xD294, + 35222 - 11905: 0xD295, + 35223 - 11905: 0xD296, + 35224 - 11905: 0xD297, + 35225 - 11905: 0xD298, + 35226 - 11905: 0xD299, + 35227 - 11905: 0xD29A, + 35228 - 11905: 0xD29B, + 35229 - 11905: 0xD29C, + 35230 - 11905: 0xD29D, + 35231 - 11905: 0xD29E, + 35232 - 11905: 0xD29F, + 35233 - 11905: 0xD2A0, + 35234 - 11905: 0xD340, + 35235 - 11905: 0xD341, + 35236 - 11905: 0xD342, + 35237 - 11905: 0xD343, + 35238 - 11905: 0xD344, + 35239 - 11905: 0xD345, + 35240 - 11905: 0xD346, + 35241 - 11905: 0xD347, + 35242 - 11905: 0xD348, + 35243 - 11905: 0xD349, + 35244 - 11905: 0xD34A, + 35245 - 11905: 0xD34B, + 35246 - 11905: 0xD34C, + 35247 - 11905: 0xD34D, + 35248 - 11905: 0xD34E, + 35249 - 11905: 0xD34F, + 35250 - 11905: 0xD350, + 35251 - 11905: 0xD351, + 35252 - 11905: 0xD352, + 35253 - 11905: 0xD353, + 35254 - 11905: 0xD354, + 35255 - 11905: 0xD355, + 35256 - 11905: 0xD356, + 35257 - 11905: 0xD357, + 35258 - 11905: 0xD358, + 35259 - 11905: 0xD359, + 35260 - 11905: 0xD35A, + 35261 - 11905: 0xD35B, + 35262 - 11905: 0xD35C, + 35263 - 11905: 0xD35D, + 35264 - 11905: 0xD35E, + 35265 - 11905: 0xBCFB, + 35266 - 11905: 0xB9DB, + 35267 - 11905: 0xD35F, + 35268 - 11905: 0xB9E6, + 35269 - 11905: 0xC3D9, + 35270 - 11905: 0xCAD3, + 35271 - 11905: 0xEAE8, + 35272 - 11905: 0xC0C0, + 35273 - 11905: 0xBEF5, + 35274 - 11905: 0xEAE9, + 35275 - 11905: 0xEAEA, + 35276 - 11905: 0xEAEB, + 35277 - 11905: 0xD360, + 35278 - 11905: 0xEAEC, + 35279 - 11905: 0xEAED, + 35280 - 11905: 0xEAEE, + 35281 - 11905: 0xEAEF, + 35282 - 11905: 0xBDC7, + 35283 - 11905: 0xD361, + 35284 - 11905: 0xD362, + 35285 - 11905: 0xD363, + 35286 - 11905: 0xF5FB, + 35287 - 11905: 0xD364, + 35288 - 11905: 0xD365, + 35289 - 11905: 0xD366, + 35290 - 11905: 0xF5FD, + 35291 - 11905: 0xD367, + 35292 - 11905: 0xF5FE, + 35293 - 11905: 0xD368, + 35294 - 11905: 0xF5FC, + 35295 - 11905: 0xD369, + 35296 - 11905: 0xD36A, + 35297 - 11905: 0xD36B, + 35298 - 11905: 0xD36C, + 35299 - 11905: 0xBDE2, + 35300 - 11905: 0xD36D, + 35301 - 11905: 0xF6A1, + 35302 - 11905: 0xB4A5, + 35303 - 11905: 0xD36E, + 35304 - 11905: 0xD36F, + 35305 - 11905: 0xD370, + 35306 - 11905: 0xD371, + 35307 - 11905: 0xF6A2, + 35308 - 11905: 0xD372, + 35309 - 11905: 0xD373, + 35310 - 11905: 0xD374, + 35311 - 11905: 0xF6A3, + 35312 - 11905: 0xD375, + 35313 - 11905: 0xD376, + 35314 - 11905: 0xD377, + 35315 - 11905: 0xECB2, + 35316 - 11905: 0xD378, + 35317 - 11905: 0xD379, + 35318 - 11905: 0xD37A, + 35319 - 11905: 0xD37B, + 35320 - 11905: 0xD37C, + 35321 - 11905: 0xD37D, + 35322 - 11905: 0xD37E, + 35323 - 11905: 0xD380, + 35324 - 11905: 0xD381, + 35325 - 11905: 0xD382, + 35326 - 11905: 0xD383, + 35327 - 11905: 0xD384, + 35328 - 11905: 0xD1D4, + 35329 - 11905: 0xD385, + 35330 - 11905: 0xD386, + 35331 - 11905: 0xD387, + 35332 - 11905: 0xD388, + 35333 - 11905: 0xD389, + 35334 - 11905: 0xD38A, + 35335 - 11905: 0xD9EA, + 35336 - 11905: 0xD38B, + 35337 - 11905: 0xD38C, + 35338 - 11905: 0xD38D, + 35339 - 11905: 0xD38E, + 35340 - 11905: 0xD38F, + 35341 - 11905: 0xD390, + 35342 - 11905: 0xD391, + 35343 - 11905: 0xD392, + 35344 - 11905: 0xD393, + 35345 - 11905: 0xD394, + 35346 - 11905: 0xD395, + 35347 - 11905: 0xD396, + 35348 - 11905: 0xD397, + 35349 - 11905: 0xD398, + 35350 - 11905: 0xD399, + 35351 - 11905: 0xD39A, + 35352 - 11905: 0xD39B, + 35353 - 11905: 0xD39C, + 35354 - 11905: 0xD39D, + 35355 - 11905: 0xD39E, + 35356 - 11905: 0xD39F, + 35357 - 11905: 0xD3A0, + 35358 - 11905: 0xD440, + 35359 - 11905: 0xD441, + 35360 - 11905: 0xD442, + 35361 - 11905: 0xD443, + 35362 - 11905: 0xD444, + 35363 - 11905: 0xD445, + 35364 - 11905: 0xD446, + 35365 - 11905: 0xD447, + 35366 - 11905: 0xD448, + 35367 - 11905: 0xD449, + 35368 - 11905: 0xD44A, + 35369 - 11905: 0xD44B, + 35370 - 11905: 0xD44C, + 35371 - 11905: 0xD44D, + 35372 - 11905: 0xD44E, + 35373 - 11905: 0xD44F, + 35374 - 11905: 0xD450, + 35375 - 11905: 0xD451, + 35376 - 11905: 0xD452, + 35377 - 11905: 0xD453, + 35378 - 11905: 0xD454, + 35379 - 11905: 0xD455, + 35380 - 11905: 0xD456, + 35381 - 11905: 0xD457, + 35382 - 11905: 0xD458, + 35383 - 11905: 0xD459, + 35384 - 11905: 0xD45A, + 35385 - 11905: 0xD45B, + 35386 - 11905: 0xD45C, + 35387 - 11905: 0xD45D, + 35388 - 11905: 0xD45E, + 35389 - 11905: 0xD45F, + 35390 - 11905: 0xF6A4, + 35391 - 11905: 0xD460, + 35392 - 11905: 0xD461, + 35393 - 11905: 0xD462, + 35394 - 11905: 0xD463, + 35395 - 11905: 0xD464, + 35396 - 11905: 0xD465, + 35397 - 11905: 0xD466, + 35398 - 11905: 0xD467, + 35399 - 11905: 0xD468, + 35400 - 11905: 0xEEBA, + 35401 - 11905: 0xD469, + 35402 - 11905: 0xD46A, + 35403 - 11905: 0xD46B, + 35404 - 11905: 0xD46C, + 35405 - 11905: 0xD46D, + 35406 - 11905: 0xD46E, + 35407 - 11905: 0xD46F, + 35408 - 11905: 0xD470, + 35409 - 11905: 0xD471, + 35410 - 11905: 0xD472, + 35411 - 11905: 0xD473, + 35412 - 11905: 0xD474, + 35413 - 11905: 0xD475, + 35414 - 11905: 0xD476, + 35415 - 11905: 0xD477, + 35416 - 11905: 0xD478, + 35417 - 11905: 0xD479, + 35418 - 11905: 0xD47A, + 35419 - 11905: 0xD47B, + 35420 - 11905: 0xD47C, + 35421 - 11905: 0xD47D, + 35422 - 11905: 0xD47E, + 35423 - 11905: 0xD480, + 35424 - 11905: 0xD481, + 35425 - 11905: 0xD482, + 35426 - 11905: 0xD483, + 35427 - 11905: 0xD484, + 35428 - 11905: 0xD485, + 35429 - 11905: 0xD486, + 35430 - 11905: 0xD487, + 35431 - 11905: 0xD488, + 35432 - 11905: 0xD489, + 35433 - 11905: 0xD48A, + 35434 - 11905: 0xD48B, + 35435 - 11905: 0xD48C, + 35436 - 11905: 0xD48D, + 35437 - 11905: 0xD48E, + 35438 - 11905: 0xD48F, + 35439 - 11905: 0xD490, + 35440 - 11905: 0xD491, + 35441 - 11905: 0xD492, + 35442 - 11905: 0xD493, + 35443 - 11905: 0xD494, + 35444 - 11905: 0xD495, + 35445 - 11905: 0xD496, + 35446 - 11905: 0xD497, + 35447 - 11905: 0xD498, + 35448 - 11905: 0xD499, + 35449 - 11905: 0xD5B2, + 35450 - 11905: 0xD49A, + 35451 - 11905: 0xD49B, + 35452 - 11905: 0xD49C, + 35453 - 11905: 0xD49D, + 35454 - 11905: 0xD49E, + 35455 - 11905: 0xD49F, + 35456 - 11905: 0xD4A0, + 35457 - 11905: 0xD540, + 35458 - 11905: 0xD541, + 35459 - 11905: 0xD542, + 35460 - 11905: 0xD543, + 35461 - 11905: 0xD544, + 35462 - 11905: 0xD545, + 35463 - 11905: 0xD546, + 35464 - 11905: 0xD547, + 35465 - 11905: 0xD3FE, + 35466 - 11905: 0xCCDC, + 35467 - 11905: 0xD548, + 35468 - 11905: 0xD549, + 35469 - 11905: 0xD54A, + 35470 - 11905: 0xD54B, + 35471 - 11905: 0xD54C, + 35472 - 11905: 0xD54D, + 35473 - 11905: 0xD54E, + 35474 - 11905: 0xD54F, + 35475 - 11905: 0xCAC4, + 35476 - 11905: 0xD550, + 35477 - 11905: 0xD551, + 35478 - 11905: 0xD552, + 35479 - 11905: 0xD553, + 35480 - 11905: 0xD554, + 35481 - 11905: 0xD555, + 35482 - 11905: 0xD556, + 35483 - 11905: 0xD557, + 35484 - 11905: 0xD558, + 35485 - 11905: 0xD559, + 35486 - 11905: 0xD55A, + 35487 - 11905: 0xD55B, + 35488 - 11905: 0xD55C, + 35489 - 11905: 0xD55D, + 35490 - 11905: 0xD55E, + 35491 - 11905: 0xD55F, + 35492 - 11905: 0xD560, + 35493 - 11905: 0xD561, + 35494 - 11905: 0xD562, + 35495 - 11905: 0xD563, + 35496 - 11905: 0xD564, + 35497 - 11905: 0xD565, + 35498 - 11905: 0xD566, + 35499 - 11905: 0xD567, + 35500 - 11905: 0xD568, + 35501 - 11905: 0xD569, + 35502 - 11905: 0xD56A, + 35503 - 11905: 0xD56B, + 35504 - 11905: 0xD56C, + 35505 - 11905: 0xD56D, + 35506 - 11905: 0xD56E, + 35507 - 11905: 0xD56F, + 35508 - 11905: 0xD570, + 35509 - 11905: 0xD571, + 35510 - 11905: 0xD572, + 35511 - 11905: 0xD573, + 35512 - 11905: 0xD574, + 35513 - 11905: 0xD575, + 35514 - 11905: 0xD576, + 35515 - 11905: 0xD577, + 35516 - 11905: 0xD578, + 35517 - 11905: 0xD579, + 35518 - 11905: 0xD57A, + 35519 - 11905: 0xD57B, + 35520 - 11905: 0xD57C, + 35521 - 11905: 0xD57D, + 35522 - 11905: 0xD57E, + 35523 - 11905: 0xD580, + 35524 - 11905: 0xD581, + 35525 - 11905: 0xD582, + 35526 - 11905: 0xD583, + 35527 - 11905: 0xD584, + 35528 - 11905: 0xD585, + 35529 - 11905: 0xD586, + 35530 - 11905: 0xD587, + 35531 - 11905: 0xD588, + 35532 - 11905: 0xD589, + 35533 - 11905: 0xD58A, + 35534 - 11905: 0xD58B, + 35535 - 11905: 0xD58C, + 35536 - 11905: 0xD58D, + 35537 - 11905: 0xD58E, + 35538 - 11905: 0xD58F, + 35539 - 11905: 0xD590, + 35540 - 11905: 0xD591, + 35541 - 11905: 0xD592, + 35542 - 11905: 0xD593, + 35543 - 11905: 0xD594, + 35544 - 11905: 0xD595, + 35545 - 11905: 0xD596, + 35546 - 11905: 0xD597, + 35547 - 11905: 0xD598, + 35548 - 11905: 0xD599, + 35549 - 11905: 0xD59A, + 35550 - 11905: 0xD59B, + 35551 - 11905: 0xD59C, + 35552 - 11905: 0xD59D, + 35553 - 11905: 0xD59E, + 35554 - 11905: 0xD59F, + 35555 - 11905: 0xD5A0, + 35556 - 11905: 0xD640, + 35557 - 11905: 0xD641, + 35558 - 11905: 0xD642, + 35559 - 11905: 0xD643, + 35560 - 11905: 0xD644, + 35561 - 11905: 0xD645, + 35562 - 11905: 0xD646, + 35563 - 11905: 0xD647, + 35564 - 11905: 0xD648, + 35565 - 11905: 0xD649, + 35566 - 11905: 0xD64A, + 35567 - 11905: 0xD64B, + 35568 - 11905: 0xD64C, + 35569 - 11905: 0xD64D, + 35570 - 11905: 0xD64E, + 35571 - 11905: 0xD64F, + 35572 - 11905: 0xD650, + 35573 - 11905: 0xD651, + 35574 - 11905: 0xD652, + 35575 - 11905: 0xD653, + 35576 - 11905: 0xD654, + 35577 - 11905: 0xD655, + 35578 - 11905: 0xD656, + 35579 - 11905: 0xD657, + 35580 - 11905: 0xD658, + 35581 - 11905: 0xD659, + 35582 - 11905: 0xD65A, + 35583 - 11905: 0xD65B, + 35584 - 11905: 0xD65C, + 35585 - 11905: 0xD65D, + 35586 - 11905: 0xD65E, + 35587 - 11905: 0xD65F, + 35588 - 11905: 0xD660, + 35589 - 11905: 0xD661, + 35590 - 11905: 0xD662, + 35591 - 11905: 0xE5C0, + 35592 - 11905: 0xD663, + 35593 - 11905: 0xD664, + 35594 - 11905: 0xD665, + 35595 - 11905: 0xD666, + 35596 - 11905: 0xD667, + 35597 - 11905: 0xD668, + 35598 - 11905: 0xD669, + 35599 - 11905: 0xD66A, + 35600 - 11905: 0xD66B, + 35601 - 11905: 0xD66C, + 35602 - 11905: 0xD66D, + 35603 - 11905: 0xD66E, + 35604 - 11905: 0xD66F, + 35605 - 11905: 0xD670, + 35606 - 11905: 0xD671, + 35607 - 11905: 0xD672, + 35608 - 11905: 0xD673, + 35609 - 11905: 0xD674, + 35610 - 11905: 0xD675, + 35611 - 11905: 0xD676, + 35612 - 11905: 0xD677, + 35613 - 11905: 0xD678, + 35614 - 11905: 0xD679, + 35615 - 11905: 0xD67A, + 35616 - 11905: 0xD67B, + 35617 - 11905: 0xD67C, + 35618 - 11905: 0xD67D, + 35619 - 11905: 0xD67E, + 35620 - 11905: 0xD680, + 35621 - 11905: 0xD681, + 35622 - 11905: 0xF6A5, + 35623 - 11905: 0xD682, + 35624 - 11905: 0xD683, + 35625 - 11905: 0xD684, + 35626 - 11905: 0xD685, + 35627 - 11905: 0xD686, + 35628 - 11905: 0xD687, + 35629 - 11905: 0xD688, + 35630 - 11905: 0xD689, + 35631 - 11905: 0xD68A, + 35632 - 11905: 0xD68B, + 35633 - 11905: 0xD68C, + 35634 - 11905: 0xD68D, + 35635 - 11905: 0xD68E, + 35636 - 11905: 0xD68F, + 35637 - 11905: 0xD690, + 35638 - 11905: 0xD691, + 35639 - 11905: 0xD692, + 35640 - 11905: 0xD693, + 35641 - 11905: 0xD694, + 35642 - 11905: 0xD695, + 35643 - 11905: 0xD696, + 35644 - 11905: 0xD697, + 35645 - 11905: 0xD698, + 35646 - 11905: 0xD699, + 35647 - 11905: 0xD69A, + 35648 - 11905: 0xD69B, + 35649 - 11905: 0xD69C, + 35650 - 11905: 0xD69D, + 35651 - 11905: 0xD69E, + 35652 - 11905: 0xD69F, + 35653 - 11905: 0xD6A0, + 35654 - 11905: 0xD740, + 35655 - 11905: 0xD741, + 35656 - 11905: 0xD742, + 35657 - 11905: 0xD743, + 35658 - 11905: 0xD744, + 35659 - 11905: 0xD745, + 35660 - 11905: 0xD746, + 35661 - 11905: 0xD747, + 35662 - 11905: 0xD748, + 35663 - 11905: 0xD749, + 35664 - 11905: 0xD74A, + 35665 - 11905: 0xD74B, + 35666 - 11905: 0xD74C, + 35667 - 11905: 0xD74D, + 35668 - 11905: 0xD74E, + 35669 - 11905: 0xD74F, + 35670 - 11905: 0xD750, + 35671 - 11905: 0xD751, + 35672 - 11905: 0xD752, + 35673 - 11905: 0xD753, + 35674 - 11905: 0xD754, + 35675 - 11905: 0xD755, + 35676 - 11905: 0xD756, + 35677 - 11905: 0xD757, + 35678 - 11905: 0xD758, + 35679 - 11905: 0xD759, + 35680 - 11905: 0xD75A, + 35681 - 11905: 0xD75B, + 35682 - 11905: 0xD75C, + 35683 - 11905: 0xD75D, + 35684 - 11905: 0xD75E, + 35685 - 11905: 0xD75F, + 35686 - 11905: 0xBEAF, + 35687 - 11905: 0xD760, + 35688 - 11905: 0xD761, + 35689 - 11905: 0xD762, + 35690 - 11905: 0xD763, + 35691 - 11905: 0xD764, + 35692 - 11905: 0xC6A9, + 35693 - 11905: 0xD765, + 35694 - 11905: 0xD766, + 35695 - 11905: 0xD767, + 35696 - 11905: 0xD768, + 35697 - 11905: 0xD769, + 35698 - 11905: 0xD76A, + 35699 - 11905: 0xD76B, + 35700 - 11905: 0xD76C, + 35701 - 11905: 0xD76D, + 35702 - 11905: 0xD76E, + 35703 - 11905: 0xD76F, + 35704 - 11905: 0xD770, + 35705 - 11905: 0xD771, + 35706 - 11905: 0xD772, + 35707 - 11905: 0xD773, + 35708 - 11905: 0xD774, + 35709 - 11905: 0xD775, + 35710 - 11905: 0xD776, + 35711 - 11905: 0xD777, + 35712 - 11905: 0xD778, + 35713 - 11905: 0xD779, + 35714 - 11905: 0xD77A, + 35715 - 11905: 0xD77B, + 35716 - 11905: 0xD77C, + 35717 - 11905: 0xD77D, + 35718 - 11905: 0xD77E, + 35719 - 11905: 0xD780, + 35720 - 11905: 0xD781, + 35721 - 11905: 0xD782, + 35722 - 11905: 0xD783, + 35723 - 11905: 0xD784, + 35724 - 11905: 0xD785, + 35725 - 11905: 0xD786, + 35726 - 11905: 0xD787, + 35727 - 11905: 0xD788, + 35728 - 11905: 0xD789, + 35729 - 11905: 0xD78A, + 35730 - 11905: 0xD78B, + 35731 - 11905: 0xD78C, + 35732 - 11905: 0xD78D, + 35733 - 11905: 0xD78E, + 35734 - 11905: 0xD78F, + 35735 - 11905: 0xD790, + 35736 - 11905: 0xD791, + 35737 - 11905: 0xD792, + 35738 - 11905: 0xD793, + 35739 - 11905: 0xD794, + 35740 - 11905: 0xD795, + 35741 - 11905: 0xD796, + 35742 - 11905: 0xD797, + 35743 - 11905: 0xD798, + 35744 - 11905: 0xDAA5, + 35745 - 11905: 0xBCC6, + 35746 - 11905: 0xB6A9, + 35747 - 11905: 0xB8BC, + 35748 - 11905: 0xC8CF, + 35749 - 11905: 0xBCA5, + 35750 - 11905: 0xDAA6, + 35751 - 11905: 0xDAA7, + 35752 - 11905: 0xCCD6, + 35753 - 11905: 0xC8C3, + 35754 - 11905: 0xDAA8, + 35755 - 11905: 0xC6FD, + 35756 - 11905: 0xD799, + 35757 - 11905: 0xD1B5, + 35758 - 11905: 0xD2E9, + 35759 - 11905: 0xD1B6, + 35760 - 11905: 0xBCC7, + 35761 - 11905: 0xD79A, + 35762 - 11905: 0xBDB2, + 35763 - 11905: 0xBBE4, + 35764 - 11905: 0xDAA9, + 35765 - 11905: 0xDAAA, + 35766 - 11905: 0xD1C8, + 35767 - 11905: 0xDAAB, + 35768 - 11905: 0xD0ED, + 35769 - 11905: 0xB6EF, + 35770 - 11905: 0xC2DB, + 35771 - 11905: 0xD79B, + 35772 - 11905: 0xCBCF, + 35773 - 11905: 0xB7ED, + 35774 - 11905: 0xC9E8, + 35775 - 11905: 0xB7C3, + 35776 - 11905: 0xBEF7, + 35777 - 11905: 0xD6A4, + 35778 - 11905: 0xDAAC, + 35779 - 11905: 0xDAAD, + 35780 - 11905: 0xC6C0, + 35781 - 11905: 0xD7E7, + 35782 - 11905: 0xCAB6, + 35783 - 11905: 0xD79C, + 35784 - 11905: 0xD5A9, + 35785 - 11905: 0xCBDF, + 35786 - 11905: 0xD5EF, + 35787 - 11905: 0xDAAE, + 35788 - 11905: 0xD6DF, + 35789 - 11905: 0xB4CA, + 35790 - 11905: 0xDAB0, + 35791 - 11905: 0xDAAF, + 35792 - 11905: 0xD79D, + 35793 - 11905: 0xD2EB, + 35794 - 11905: 0xDAB1, + 35795 - 11905: 0xDAB2, + 35796 - 11905: 0xDAB3, + 35797 - 11905: 0xCAD4, + 35798 - 11905: 0xDAB4, + 35799 - 11905: 0xCAAB, + 35800 - 11905: 0xDAB5, + 35801 - 11905: 0xDAB6, + 35802 - 11905: 0xB3CF, + 35803 - 11905: 0xD6EF, + 35804 - 11905: 0xDAB7, + 35805 - 11905: 0xBBB0, + 35806 - 11905: 0xB5AE, + 35807 - 11905: 0xDAB8, + 35808 - 11905: 0xDAB9, + 35809 - 11905: 0xB9EE, + 35810 - 11905: 0xD1AF, + 35811 - 11905: 0xD2E8, + 35812 - 11905: 0xDABA, + 35813 - 11905: 0xB8C3, + 35814 - 11905: 0xCFEA, + 35815 - 11905: 0xB2EF, + 35816 - 11905: 0xDABB, + 35817 - 11905: 0xDABC, + 35818 - 11905: 0xD79E, + 35819 - 11905: 0xBDEB, + 35820 - 11905: 0xCEDC, + 35821 - 11905: 0xD3EF, + 35822 - 11905: 0xDABD, + 35823 - 11905: 0xCEF3, + 35824 - 11905: 0xDABE, + 35825 - 11905: 0xD3D5, + 35826 - 11905: 0xBBE5, + 35827 - 11905: 0xDABF, + 35828 - 11905: 0xCBB5, + 35829 - 11905: 0xCBD0, + 35830 - 11905: 0xDAC0, + 35831 - 11905: 0xC7EB, + 35832 - 11905: 0xD6EE, + 35833 - 11905: 0xDAC1, + 35834 - 11905: 0xC5B5, + 35835 - 11905: 0xB6C1, + 35836 - 11905: 0xDAC2, + 35837 - 11905: 0xB7CC, + 35838 - 11905: 0xBFCE, + 35839 - 11905: 0xDAC3, + 35840 - 11905: 0xDAC4, + 35841 - 11905: 0xCBAD, + 35842 - 11905: 0xDAC5, + 35843 - 11905: 0xB5F7, + 35844 - 11905: 0xDAC6, + 35845 - 11905: 0xC1C2, + 35846 - 11905: 0xD7BB, + 35847 - 11905: 0xDAC7, + 35848 - 11905: 0xCCB8, + 35849 - 11905: 0xD79F, + 35850 - 11905: 0xD2EA, + 35851 - 11905: 0xC4B1, + 35852 - 11905: 0xDAC8, + 35853 - 11905: 0xB5FD, + 35854 - 11905: 0xBBD1, + 35855 - 11905: 0xDAC9, + 35856 - 11905: 0xD0B3, + 35857 - 11905: 0xDACA, + 35858 - 11905: 0xDACB, + 35859 - 11905: 0xCEBD, + 35860 - 11905: 0xDACC, + 35861 - 11905: 0xDACD, + 35862 - 11905: 0xDACE, + 35863 - 11905: 0xB2F7, + 35864 - 11905: 0xDAD1, + 35865 - 11905: 0xDACF, + 35866 - 11905: 0xD1E8, + 35867 - 11905: 0xDAD0, + 35868 - 11905: 0xC3D5, + 35869 - 11905: 0xDAD2, + 35870 - 11905: 0xD7A0, + 35871 - 11905: 0xDAD3, + 35872 - 11905: 0xDAD4, + 35873 - 11905: 0xDAD5, + 35874 - 11905: 0xD0BB, + 35875 - 11905: 0xD2A5, + 35876 - 11905: 0xB0F9, + 35877 - 11905: 0xDAD6, + 35878 - 11905: 0xC7AB, + 35879 - 11905: 0xDAD7, + 35880 - 11905: 0xBDF7, + 35881 - 11905: 0xC3A1, + 35882 - 11905: 0xDAD8, + 35883 - 11905: 0xDAD9, + 35884 - 11905: 0xC3FD, + 35885 - 11905: 0xCCB7, + 35886 - 11905: 0xDADA, + 35887 - 11905: 0xDADB, + 35888 - 11905: 0xC0BE, + 35889 - 11905: 0xC6D7, + 35890 - 11905: 0xDADC, + 35891 - 11905: 0xDADD, + 35892 - 11905: 0xC7B4, + 35893 - 11905: 0xDADE, + 35894 - 11905: 0xDADF, + 35895 - 11905: 0xB9C8, + 35896 - 11905: 0xD840, + 35897 - 11905: 0xD841, + 35898 - 11905: 0xD842, + 35899 - 11905: 0xD843, + 35900 - 11905: 0xD844, + 35901 - 11905: 0xD845, + 35902 - 11905: 0xD846, + 35903 - 11905: 0xD847, + 35904 - 11905: 0xD848, + 35905 - 11905: 0xBBED, + 35906 - 11905: 0xD849, + 35907 - 11905: 0xD84A, + 35908 - 11905: 0xD84B, + 35909 - 11905: 0xD84C, + 35910 - 11905: 0xB6B9, + 35911 - 11905: 0xF4F8, + 35912 - 11905: 0xD84D, + 35913 - 11905: 0xF4F9, + 35914 - 11905: 0xD84E, + 35915 - 11905: 0xD84F, + 35916 - 11905: 0xCDE3, + 35917 - 11905: 0xD850, + 35918 - 11905: 0xD851, + 35919 - 11905: 0xD852, + 35920 - 11905: 0xD853, + 35921 - 11905: 0xD854, + 35922 - 11905: 0xD855, + 35923 - 11905: 0xD856, + 35924 - 11905: 0xD857, + 35925 - 11905: 0xF5B9, + 35926 - 11905: 0xD858, + 35927 - 11905: 0xD859, + 35928 - 11905: 0xD85A, + 35929 - 11905: 0xD85B, + 35930 - 11905: 0xEBE0, + 35931 - 11905: 0xD85C, + 35932 - 11905: 0xD85D, + 35933 - 11905: 0xD85E, + 35934 - 11905: 0xD85F, + 35935 - 11905: 0xD860, + 35936 - 11905: 0xD861, + 35937 - 11905: 0xCFF3, + 35938 - 11905: 0xBBBF, + 35939 - 11905: 0xD862, + 35940 - 11905: 0xD863, + 35941 - 11905: 0xD864, + 35942 - 11905: 0xD865, + 35943 - 11905: 0xD866, + 35944 - 11905: 0xD867, + 35945 - 11905: 0xD868, + 35946 - 11905: 0xBAC0, + 35947 - 11905: 0xD4A5, + 35948 - 11905: 0xD869, + 35949 - 11905: 0xD86A, + 35950 - 11905: 0xD86B, + 35951 - 11905: 0xD86C, + 35952 - 11905: 0xD86D, + 35953 - 11905: 0xD86E, + 35954 - 11905: 0xD86F, + 35955 - 11905: 0xE1D9, + 35956 - 11905: 0xD870, + 35957 - 11905: 0xD871, + 35958 - 11905: 0xD872, + 35959 - 11905: 0xD873, + 35960 - 11905: 0xF5F4, + 35961 - 11905: 0xB1AA, + 35962 - 11905: 0xB2F2, + 35963 - 11905: 0xD874, + 35964 - 11905: 0xD875, + 35965 - 11905: 0xD876, + 35966 - 11905: 0xD877, + 35967 - 11905: 0xD878, + 35968 - 11905: 0xD879, + 35969 - 11905: 0xD87A, + 35970 - 11905: 0xF5F5, + 35971 - 11905: 0xD87B, + 35972 - 11905: 0xD87C, + 35973 - 11905: 0xF5F7, + 35974 - 11905: 0xD87D, + 35975 - 11905: 0xD87E, + 35976 - 11905: 0xD880, + 35977 - 11905: 0xBAD1, + 35978 - 11905: 0xF5F6, + 35979 - 11905: 0xD881, + 35980 - 11905: 0xC3B2, + 35981 - 11905: 0xD882, + 35982 - 11905: 0xD883, + 35983 - 11905: 0xD884, + 35984 - 11905: 0xD885, + 35985 - 11905: 0xD886, + 35986 - 11905: 0xD887, + 35987 - 11905: 0xD888, + 35988 - 11905: 0xF5F9, + 35989 - 11905: 0xD889, + 35990 - 11905: 0xD88A, + 35991 - 11905: 0xD88B, + 35992 - 11905: 0xF5F8, + 35993 - 11905: 0xD88C, + 35994 - 11905: 0xD88D, + 35995 - 11905: 0xD88E, + 35996 - 11905: 0xD88F, + 35997 - 11905: 0xD890, + 35998 - 11905: 0xD891, + 35999 - 11905: 0xD892, + 36000 - 11905: 0xD893, + 36001 - 11905: 0xD894, + 36002 - 11905: 0xD895, + 36003 - 11905: 0xD896, + 36004 - 11905: 0xD897, + 36005 - 11905: 0xD898, + 36006 - 11905: 0xD899, + 36007 - 11905: 0xD89A, + 36008 - 11905: 0xD89B, + 36009 - 11905: 0xD89C, + 36010 - 11905: 0xD89D, + 36011 - 11905: 0xD89E, + 36012 - 11905: 0xD89F, + 36013 - 11905: 0xD8A0, + 36014 - 11905: 0xD940, + 36015 - 11905: 0xD941, + 36016 - 11905: 0xD942, + 36017 - 11905: 0xD943, + 36018 - 11905: 0xD944, + 36019 - 11905: 0xD945, + 36020 - 11905: 0xD946, + 36021 - 11905: 0xD947, + 36022 - 11905: 0xD948, + 36023 - 11905: 0xD949, + 36024 - 11905: 0xD94A, + 36025 - 11905: 0xD94B, + 36026 - 11905: 0xD94C, + 36027 - 11905: 0xD94D, + 36028 - 11905: 0xD94E, + 36029 - 11905: 0xD94F, + 36030 - 11905: 0xD950, + 36031 - 11905: 0xD951, + 36032 - 11905: 0xD952, + 36033 - 11905: 0xD953, + 36034 - 11905: 0xD954, + 36035 - 11905: 0xD955, + 36036 - 11905: 0xD956, + 36037 - 11905: 0xD957, + 36038 - 11905: 0xD958, + 36039 - 11905: 0xD959, + 36040 - 11905: 0xD95A, + 36041 - 11905: 0xD95B, + 36042 - 11905: 0xD95C, + 36043 - 11905: 0xD95D, + 36044 - 11905: 0xD95E, + 36045 - 11905: 0xD95F, + 36046 - 11905: 0xD960, + 36047 - 11905: 0xD961, + 36048 - 11905: 0xD962, + 36049 - 11905: 0xD963, + 36050 - 11905: 0xD964, + 36051 - 11905: 0xD965, + 36052 - 11905: 0xD966, + 36053 - 11905: 0xD967, + 36054 - 11905: 0xD968, + 36055 - 11905: 0xD969, + 36056 - 11905: 0xD96A, + 36057 - 11905: 0xD96B, + 36058 - 11905: 0xD96C, + 36059 - 11905: 0xD96D, + 36060 - 11905: 0xD96E, + 36061 - 11905: 0xD96F, + 36062 - 11905: 0xD970, + 36063 - 11905: 0xD971, + 36064 - 11905: 0xD972, + 36065 - 11905: 0xD973, + 36066 - 11905: 0xD974, + 36067 - 11905: 0xD975, + 36068 - 11905: 0xD976, + 36069 - 11905: 0xD977, + 36070 - 11905: 0xD978, + 36071 - 11905: 0xD979, + 36072 - 11905: 0xD97A, + 36073 - 11905: 0xD97B, + 36074 - 11905: 0xD97C, + 36075 - 11905: 0xD97D, + 36076 - 11905: 0xD97E, + 36077 - 11905: 0xD980, + 36078 - 11905: 0xD981, + 36079 - 11905: 0xD982, + 36080 - 11905: 0xD983, + 36081 - 11905: 0xD984, + 36082 - 11905: 0xD985, + 36083 - 11905: 0xD986, + 36084 - 11905: 0xD987, + 36085 - 11905: 0xD988, + 36086 - 11905: 0xD989, + 36087 - 11905: 0xD98A, + 36088 - 11905: 0xD98B, + 36089 - 11905: 0xD98C, + 36090 - 11905: 0xD98D, + 36091 - 11905: 0xD98E, + 36092 - 11905: 0xD98F, + 36093 - 11905: 0xD990, + 36094 - 11905: 0xD991, + 36095 - 11905: 0xD992, + 36096 - 11905: 0xD993, + 36097 - 11905: 0xD994, + 36098 - 11905: 0xD995, + 36099 - 11905: 0xD996, + 36100 - 11905: 0xD997, + 36101 - 11905: 0xD998, + 36102 - 11905: 0xD999, + 36103 - 11905: 0xD99A, + 36104 - 11905: 0xD99B, + 36105 - 11905: 0xD99C, + 36106 - 11905: 0xD99D, + 36107 - 11905: 0xD99E, + 36108 - 11905: 0xD99F, + 36109 - 11905: 0xD9A0, + 36110 - 11905: 0xDA40, + 36111 - 11905: 0xDA41, + 36112 - 11905: 0xDA42, + 36113 - 11905: 0xDA43, + 36114 - 11905: 0xDA44, + 36115 - 11905: 0xDA45, + 36116 - 11905: 0xDA46, + 36117 - 11905: 0xDA47, + 36118 - 11905: 0xDA48, + 36119 - 11905: 0xDA49, + 36120 - 11905: 0xDA4A, + 36121 - 11905: 0xDA4B, + 36122 - 11905: 0xDA4C, + 36123 - 11905: 0xDA4D, + 36124 - 11905: 0xDA4E, + 36125 - 11905: 0xB1B4, + 36126 - 11905: 0xD5EA, + 36127 - 11905: 0xB8BA, + 36128 - 11905: 0xDA4F, + 36129 - 11905: 0xB9B1, + 36130 - 11905: 0xB2C6, + 36131 - 11905: 0xD4F0, + 36132 - 11905: 0xCFCD, + 36133 - 11905: 0xB0DC, + 36134 - 11905: 0xD5CB, + 36135 - 11905: 0xBBF5, + 36136 - 11905: 0xD6CA, + 36137 - 11905: 0xB7B7, + 36138 - 11905: 0xCCB0, + 36139 - 11905: 0xC6B6, + 36140 - 11905: 0xB1E1, + 36141 - 11905: 0xB9BA, + 36142 - 11905: 0xD6FC, + 36143 - 11905: 0xB9E1, + 36144 - 11905: 0xB7A1, + 36145 - 11905: 0xBCFA, + 36146 - 11905: 0xEADA, + 36147 - 11905: 0xEADB, + 36148 - 11905: 0xCCF9, + 36149 - 11905: 0xB9F3, + 36150 - 11905: 0xEADC, + 36151 - 11905: 0xB4FB, + 36152 - 11905: 0xC3B3, + 36153 - 11905: 0xB7D1, + 36154 - 11905: 0xBAD8, + 36155 - 11905: 0xEADD, + 36156 - 11905: 0xD4F4, + 36157 - 11905: 0xEADE, + 36158 - 11905: 0xBCD6, + 36159 - 11905: 0xBBDF, + 36160 - 11905: 0xEADF, + 36161 - 11905: 0xC1DE, + 36162 - 11905: 0xC2B8, + 36163 - 11905: 0xD4DF, + 36164 - 11905: 0xD7CA, + 36165 - 11905: 0xEAE0, + 36166 - 11905: 0xEAE1, + 36167 - 11905: 0xEAE4, + 36168 - 11905: 0xEAE2, + 36169 - 11905: 0xEAE3, + 36170 - 11905: 0xC9DE, + 36171 - 11905: 0xB8B3, + 36172 - 11905: 0xB6C4, + 36173 - 11905: 0xEAE5, + 36174 - 11905: 0xCAEA, + 36175 - 11905: 0xC9CD, + 36176 - 11905: 0xB4CD, + 36177 - 11905: 0xDA50, + 36178 - 11905: 0xDA51, + 36179 - 11905: 0xE2D9, + 36180 - 11905: 0xC5E2, + 36181 - 11905: 0xEAE6, + 36182 - 11905: 0xC0B5, + 36183 - 11905: 0xDA52, + 36184 - 11905: 0xD7B8, + 36185 - 11905: 0xEAE7, + 36186 - 11905: 0xD7AC, + 36187 - 11905: 0xC8FC, + 36188 - 11905: 0xD8D3, + 36189 - 11905: 0xD8CD, + 36190 - 11905: 0xD4DE, + 36191 - 11905: 0xDA53, + 36192 - 11905: 0xD4F9, + 36193 - 11905: 0xC9C4, + 36194 - 11905: 0xD3AE, + 36195 - 11905: 0xB8D3, + 36196 - 11905: 0xB3E0, + 36197 - 11905: 0xDA54, + 36198 - 11905: 0xC9E2, + 36199 - 11905: 0xF4F6, + 36200 - 11905: 0xDA55, + 36201 - 11905: 0xDA56, + 36202 - 11905: 0xDA57, + 36203 - 11905: 0xBAD5, + 36204 - 11905: 0xDA58, + 36205 - 11905: 0xF4F7, + 36206 - 11905: 0xDA59, + 36207 - 11905: 0xDA5A, + 36208 - 11905: 0xD7DF, + 36209 - 11905: 0xDA5B, + 36210 - 11905: 0xDA5C, + 36211 - 11905: 0xF4F1, + 36212 - 11905: 0xB8B0, + 36213 - 11905: 0xD5D4, + 36214 - 11905: 0xB8CF, + 36215 - 11905: 0xC6F0, + 36216 - 11905: 0xDA5D, + 36217 - 11905: 0xDA5E, + 36218 - 11905: 0xDA5F, + 36219 - 11905: 0xDA60, + 36220 - 11905: 0xDA61, + 36221 - 11905: 0xDA62, + 36222 - 11905: 0xDA63, + 36223 - 11905: 0xDA64, + 36224 - 11905: 0xDA65, + 36225 - 11905: 0xB3C3, + 36226 - 11905: 0xDA66, + 36227 - 11905: 0xDA67, + 36228 - 11905: 0xF4F2, + 36229 - 11905: 0xB3AC, + 36230 - 11905: 0xDA68, + 36231 - 11905: 0xDA69, + 36232 - 11905: 0xDA6A, + 36233 - 11905: 0xDA6B, + 36234 - 11905: 0xD4BD, + 36235 - 11905: 0xC7F7, + 36236 - 11905: 0xDA6C, + 36237 - 11905: 0xDA6D, + 36238 - 11905: 0xDA6E, + 36239 - 11905: 0xDA6F, + 36240 - 11905: 0xDA70, + 36241 - 11905: 0xF4F4, + 36242 - 11905: 0xDA71, + 36243 - 11905: 0xDA72, + 36244 - 11905: 0xF4F3, + 36245 - 11905: 0xDA73, + 36246 - 11905: 0xDA74, + 36247 - 11905: 0xDA75, + 36248 - 11905: 0xDA76, + 36249 - 11905: 0xDA77, + 36250 - 11905: 0xDA78, + 36251 - 11905: 0xDA79, + 36252 - 11905: 0xDA7A, + 36253 - 11905: 0xDA7B, + 36254 - 11905: 0xDA7C, + 36255 - 11905: 0xCCCB, + 36256 - 11905: 0xDA7D, + 36257 - 11905: 0xDA7E, + 36258 - 11905: 0xDA80, + 36259 - 11905: 0xC8A4, + 36260 - 11905: 0xDA81, + 36261 - 11905: 0xDA82, + 36262 - 11905: 0xDA83, + 36263 - 11905: 0xDA84, + 36264 - 11905: 0xDA85, + 36265 - 11905: 0xDA86, + 36266 - 11905: 0xDA87, + 36267 - 11905: 0xDA88, + 36268 - 11905: 0xDA89, + 36269 - 11905: 0xDA8A, + 36270 - 11905: 0xDA8B, + 36271 - 11905: 0xDA8C, + 36272 - 11905: 0xDA8D, + 36273 - 11905: 0xF4F5, + 36274 - 11905: 0xDA8E, + 36275 - 11905: 0xD7E3, + 36276 - 11905: 0xC5BF, + 36277 - 11905: 0xF5C0, + 36278 - 11905: 0xDA8F, + 36279 - 11905: 0xDA90, + 36280 - 11905: 0xF5BB, + 36281 - 11905: 0xDA91, + 36282 - 11905: 0xF5C3, + 36283 - 11905: 0xDA92, + 36284 - 11905: 0xF5C2, + 36285 - 11905: 0xDA93, + 36286 - 11905: 0xD6BA, + 36287 - 11905: 0xF5C1, + 36288 - 11905: 0xDA94, + 36289 - 11905: 0xDA95, + 36290 - 11905: 0xDA96, + 36291 - 11905: 0xD4BE, + 36292 - 11905: 0xF5C4, + 36293 - 11905: 0xDA97, + 36294 - 11905: 0xF5CC, + 36295 - 11905: 0xDA98, + 36296 - 11905: 0xDA99, + 36297 - 11905: 0xDA9A, + 36298 - 11905: 0xDA9B, + 36299 - 11905: 0xB0CF, + 36300 - 11905: 0xB5F8, + 36301 - 11905: 0xDA9C, + 36302 - 11905: 0xF5C9, + 36303 - 11905: 0xF5CA, + 36304 - 11905: 0xDA9D, + 36305 - 11905: 0xC5DC, + 36306 - 11905: 0xDA9E, + 36307 - 11905: 0xDA9F, + 36308 - 11905: 0xDAA0, + 36309 - 11905: 0xDB40, + 36310 - 11905: 0xF5C5, + 36311 - 11905: 0xF5C6, + 36312 - 11905: 0xDB41, + 36313 - 11905: 0xDB42, + 36314 - 11905: 0xF5C7, + 36315 - 11905: 0xF5CB, + 36316 - 11905: 0xDB43, + 36317 - 11905: 0xBEE0, + 36318 - 11905: 0xF5C8, + 36319 - 11905: 0xB8FA, + 36320 - 11905: 0xDB44, + 36321 - 11905: 0xDB45, + 36322 - 11905: 0xDB46, + 36323 - 11905: 0xF5D0, + 36324 - 11905: 0xF5D3, + 36325 - 11905: 0xDB47, + 36326 - 11905: 0xDB48, + 36327 - 11905: 0xDB49, + 36328 - 11905: 0xBFE7, + 36329 - 11905: 0xDB4A, + 36330 - 11905: 0xB9F2, + 36331 - 11905: 0xF5BC, + 36332 - 11905: 0xF5CD, + 36333 - 11905: 0xDB4B, + 36334 - 11905: 0xDB4C, + 36335 - 11905: 0xC2B7, + 36336 - 11905: 0xDB4D, + 36337 - 11905: 0xDB4E, + 36338 - 11905: 0xDB4F, + 36339 - 11905: 0xCCF8, + 36340 - 11905: 0xDB50, + 36341 - 11905: 0xBCF9, + 36342 - 11905: 0xDB51, + 36343 - 11905: 0xF5CE, + 36344 - 11905: 0xF5CF, + 36345 - 11905: 0xF5D1, + 36346 - 11905: 0xB6E5, + 36347 - 11905: 0xF5D2, + 36348 - 11905: 0xDB52, + 36349 - 11905: 0xF5D5, + 36350 - 11905: 0xDB53, + 36351 - 11905: 0xDB54, + 36352 - 11905: 0xDB55, + 36353 - 11905: 0xDB56, + 36354 - 11905: 0xDB57, + 36355 - 11905: 0xDB58, + 36356 - 11905: 0xDB59, + 36357 - 11905: 0xF5BD, + 36358 - 11905: 0xDB5A, + 36359 - 11905: 0xDB5B, + 36360 - 11905: 0xDB5C, + 36361 - 11905: 0xF5D4, + 36362 - 11905: 0xD3BB, + 36363 - 11905: 0xDB5D, + 36364 - 11905: 0xB3EC, + 36365 - 11905: 0xDB5E, + 36366 - 11905: 0xDB5F, + 36367 - 11905: 0xCCA4, + 36368 - 11905: 0xDB60, + 36369 - 11905: 0xDB61, + 36370 - 11905: 0xDB62, + 36371 - 11905: 0xDB63, + 36372 - 11905: 0xF5D6, + 36373 - 11905: 0xDB64, + 36374 - 11905: 0xDB65, + 36375 - 11905: 0xDB66, + 36376 - 11905: 0xDB67, + 36377 - 11905: 0xDB68, + 36378 - 11905: 0xDB69, + 36379 - 11905: 0xDB6A, + 36380 - 11905: 0xDB6B, + 36381 - 11905: 0xF5D7, + 36382 - 11905: 0xBEE1, + 36383 - 11905: 0xF5D8, + 36384 - 11905: 0xDB6C, + 36385 - 11905: 0xDB6D, + 36386 - 11905: 0xCCDF, + 36387 - 11905: 0xF5DB, + 36388 - 11905: 0xDB6E, + 36389 - 11905: 0xDB6F, + 36390 - 11905: 0xDB70, + 36391 - 11905: 0xDB71, + 36392 - 11905: 0xDB72, + 36393 - 11905: 0xB2C8, + 36394 - 11905: 0xD7D9, + 36395 - 11905: 0xDB73, + 36396 - 11905: 0xF5D9, + 36397 - 11905: 0xDB74, + 36398 - 11905: 0xF5DA, + 36399 - 11905: 0xF5DC, + 36400 - 11905: 0xDB75, + 36401 - 11905: 0xF5E2, + 36402 - 11905: 0xDB76, + 36403 - 11905: 0xDB77, + 36404 - 11905: 0xDB78, + 36405 - 11905: 0xF5E0, + 36406 - 11905: 0xDB79, + 36407 - 11905: 0xDB7A, + 36408 - 11905: 0xDB7B, + 36409 - 11905: 0xF5DF, + 36410 - 11905: 0xF5DD, + 36411 - 11905: 0xDB7C, + 36412 - 11905: 0xDB7D, + 36413 - 11905: 0xF5E1, + 36414 - 11905: 0xDB7E, + 36415 - 11905: 0xDB80, + 36416 - 11905: 0xF5DE, + 36417 - 11905: 0xF5E4, + 36418 - 11905: 0xF5E5, + 36419 - 11905: 0xDB81, + 36420 - 11905: 0xCCE3, + 36421 - 11905: 0xDB82, + 36422 - 11905: 0xDB83, + 36423 - 11905: 0xE5BF, + 36424 - 11905: 0xB5B8, + 36425 - 11905: 0xF5E3, + 36426 - 11905: 0xF5E8, + 36427 - 11905: 0xCCA3, + 36428 - 11905: 0xDB84, + 36429 - 11905: 0xDB85, + 36430 - 11905: 0xDB86, + 36431 - 11905: 0xDB87, + 36432 - 11905: 0xDB88, + 36433 - 11905: 0xF5E6, + 36434 - 11905: 0xF5E7, + 36435 - 11905: 0xDB89, + 36436 - 11905: 0xDB8A, + 36437 - 11905: 0xDB8B, + 36438 - 11905: 0xDB8C, + 36439 - 11905: 0xDB8D, + 36440 - 11905: 0xDB8E, + 36441 - 11905: 0xF5BE, + 36442 - 11905: 0xDB8F, + 36443 - 11905: 0xDB90, + 36444 - 11905: 0xDB91, + 36445 - 11905: 0xDB92, + 36446 - 11905: 0xDB93, + 36447 - 11905: 0xDB94, + 36448 - 11905: 0xDB95, + 36449 - 11905: 0xDB96, + 36450 - 11905: 0xDB97, + 36451 - 11905: 0xDB98, + 36452 - 11905: 0xDB99, + 36453 - 11905: 0xDB9A, + 36454 - 11905: 0xB1C4, + 36455 - 11905: 0xDB9B, + 36456 - 11905: 0xDB9C, + 36457 - 11905: 0xF5BF, + 36458 - 11905: 0xDB9D, + 36459 - 11905: 0xDB9E, + 36460 - 11905: 0xB5C5, + 36461 - 11905: 0xB2E4, + 36462 - 11905: 0xDB9F, + 36463 - 11905: 0xF5EC, + 36464 - 11905: 0xF5E9, + 36465 - 11905: 0xDBA0, + 36466 - 11905: 0xB6D7, + 36467 - 11905: 0xDC40, + 36468 - 11905: 0xF5ED, + 36469 - 11905: 0xDC41, + 36470 - 11905: 0xF5EA, + 36471 - 11905: 0xDC42, + 36472 - 11905: 0xDC43, + 36473 - 11905: 0xDC44, + 36474 - 11905: 0xDC45, + 36475 - 11905: 0xDC46, + 36476 - 11905: 0xF5EB, + 36477 - 11905: 0xDC47, + 36478 - 11905: 0xDC48, + 36479 - 11905: 0xB4DA, + 36480 - 11905: 0xDC49, + 36481 - 11905: 0xD4EA, + 36482 - 11905: 0xDC4A, + 36483 - 11905: 0xDC4B, + 36484 - 11905: 0xDC4C, + 36485 - 11905: 0xF5EE, + 36486 - 11905: 0xDC4D, + 36487 - 11905: 0xB3F9, + 36488 - 11905: 0xDC4E, + 36489 - 11905: 0xDC4F, + 36490 - 11905: 0xDC50, + 36491 - 11905: 0xDC51, + 36492 - 11905: 0xDC52, + 36493 - 11905: 0xDC53, + 36494 - 11905: 0xDC54, + 36495 - 11905: 0xF5EF, + 36496 - 11905: 0xF5F1, + 36497 - 11905: 0xDC55, + 36498 - 11905: 0xDC56, + 36499 - 11905: 0xDC57, + 36500 - 11905: 0xF5F0, + 36501 - 11905: 0xDC58, + 36502 - 11905: 0xDC59, + 36503 - 11905: 0xDC5A, + 36504 - 11905: 0xDC5B, + 36505 - 11905: 0xDC5C, + 36506 - 11905: 0xDC5D, + 36507 - 11905: 0xDC5E, + 36508 - 11905: 0xF5F2, + 36509 - 11905: 0xDC5F, + 36510 - 11905: 0xF5F3, + 36511 - 11905: 0xDC60, + 36512 - 11905: 0xDC61, + 36513 - 11905: 0xDC62, + 36514 - 11905: 0xDC63, + 36515 - 11905: 0xDC64, + 36516 - 11905: 0xDC65, + 36517 - 11905: 0xDC66, + 36518 - 11905: 0xDC67, + 36519 - 11905: 0xDC68, + 36520 - 11905: 0xDC69, + 36521 - 11905: 0xDC6A, + 36522 - 11905: 0xDC6B, + 36523 - 11905: 0xC9ED, + 36524 - 11905: 0xB9AA, + 36525 - 11905: 0xDC6C, + 36526 - 11905: 0xDC6D, + 36527 - 11905: 0xC7FB, + 36528 - 11905: 0xDC6E, + 36529 - 11905: 0xDC6F, + 36530 - 11905: 0xB6E3, + 36531 - 11905: 0xDC70, + 36532 - 11905: 0xDC71, + 36533 - 11905: 0xDC72, + 36534 - 11905: 0xDC73, + 36535 - 11905: 0xDC74, + 36536 - 11905: 0xDC75, + 36537 - 11905: 0xDC76, + 36538 - 11905: 0xCCC9, + 36539 - 11905: 0xDC77, + 36540 - 11905: 0xDC78, + 36541 - 11905: 0xDC79, + 36542 - 11905: 0xDC7A, + 36543 - 11905: 0xDC7B, + 36544 - 11905: 0xDC7C, + 36545 - 11905: 0xDC7D, + 36546 - 11905: 0xDC7E, + 36547 - 11905: 0xDC80, + 36548 - 11905: 0xDC81, + 36549 - 11905: 0xDC82, + 36550 - 11905: 0xDC83, + 36551 - 11905: 0xDC84, + 36552 - 11905: 0xDC85, + 36553 - 11905: 0xDC86, + 36554 - 11905: 0xDC87, + 36555 - 11905: 0xDC88, + 36556 - 11905: 0xDC89, + 36557 - 11905: 0xDC8A, + 36558 - 11905: 0xEAA6, + 36559 - 11905: 0xDC8B, + 36560 - 11905: 0xDC8C, + 36561 - 11905: 0xDC8D, + 36562 - 11905: 0xDC8E, + 36563 - 11905: 0xDC8F, + 36564 - 11905: 0xDC90, + 36565 - 11905: 0xDC91, + 36566 - 11905: 0xDC92, + 36567 - 11905: 0xDC93, + 36568 - 11905: 0xDC94, + 36569 - 11905: 0xDC95, + 36570 - 11905: 0xDC96, + 36571 - 11905: 0xDC97, + 36572 - 11905: 0xDC98, + 36573 - 11905: 0xDC99, + 36574 - 11905: 0xDC9A, + 36575 - 11905: 0xDC9B, + 36576 - 11905: 0xDC9C, + 36577 - 11905: 0xDC9D, + 36578 - 11905: 0xDC9E, + 36579 - 11905: 0xDC9F, + 36580 - 11905: 0xDCA0, + 36581 - 11905: 0xDD40, + 36582 - 11905: 0xDD41, + 36583 - 11905: 0xDD42, + 36584 - 11905: 0xDD43, + 36585 - 11905: 0xDD44, + 36586 - 11905: 0xDD45, + 36587 - 11905: 0xDD46, + 36588 - 11905: 0xDD47, + 36589 - 11905: 0xDD48, + 36590 - 11905: 0xDD49, + 36591 - 11905: 0xDD4A, + 36592 - 11905: 0xDD4B, + 36593 - 11905: 0xDD4C, + 36594 - 11905: 0xDD4D, + 36595 - 11905: 0xDD4E, + 36596 - 11905: 0xDD4F, + 36597 - 11905: 0xDD50, + 36598 - 11905: 0xDD51, + 36599 - 11905: 0xDD52, + 36600 - 11905: 0xDD53, + 36601 - 11905: 0xDD54, + 36602 - 11905: 0xDD55, + 36603 - 11905: 0xDD56, + 36604 - 11905: 0xDD57, + 36605 - 11905: 0xDD58, + 36606 - 11905: 0xDD59, + 36607 - 11905: 0xDD5A, + 36608 - 11905: 0xDD5B, + 36609 - 11905: 0xDD5C, + 36610 - 11905: 0xDD5D, + 36611 - 11905: 0xDD5E, + 36612 - 11905: 0xDD5F, + 36613 - 11905: 0xDD60, + 36614 - 11905: 0xDD61, + 36615 - 11905: 0xDD62, + 36616 - 11905: 0xDD63, + 36617 - 11905: 0xDD64, + 36618 - 11905: 0xDD65, + 36619 - 11905: 0xDD66, + 36620 - 11905: 0xDD67, + 36621 - 11905: 0xDD68, + 36622 - 11905: 0xDD69, + 36623 - 11905: 0xDD6A, + 36624 - 11905: 0xDD6B, + 36625 - 11905: 0xDD6C, + 36626 - 11905: 0xDD6D, + 36627 - 11905: 0xDD6E, + 36628 - 11905: 0xDD6F, + 36629 - 11905: 0xDD70, + 36630 - 11905: 0xDD71, + 36631 - 11905: 0xDD72, + 36632 - 11905: 0xDD73, + 36633 - 11905: 0xDD74, + 36634 - 11905: 0xDD75, + 36635 - 11905: 0xDD76, + 36636 - 11905: 0xDD77, + 36637 - 11905: 0xDD78, + 36638 - 11905: 0xDD79, + 36639 - 11905: 0xDD7A, + 36640 - 11905: 0xDD7B, + 36641 - 11905: 0xDD7C, + 36642 - 11905: 0xDD7D, + 36643 - 11905: 0xDD7E, + 36644 - 11905: 0xDD80, + 36645 - 11905: 0xDD81, + 36646 - 11905: 0xDD82, + 36647 - 11905: 0xDD83, + 36648 - 11905: 0xDD84, + 36649 - 11905: 0xDD85, + 36650 - 11905: 0xDD86, + 36651 - 11905: 0xDD87, + 36652 - 11905: 0xDD88, + 36653 - 11905: 0xDD89, + 36654 - 11905: 0xDD8A, + 36655 - 11905: 0xDD8B, + 36656 - 11905: 0xDD8C, + 36657 - 11905: 0xDD8D, + 36658 - 11905: 0xDD8E, + 36659 - 11905: 0xDD8F, + 36660 - 11905: 0xDD90, + 36661 - 11905: 0xDD91, + 36662 - 11905: 0xDD92, + 36663 - 11905: 0xDD93, + 36664 - 11905: 0xDD94, + 36665 - 11905: 0xDD95, + 36666 - 11905: 0xDD96, + 36667 - 11905: 0xDD97, + 36668 - 11905: 0xDD98, + 36669 - 11905: 0xDD99, + 36670 - 11905: 0xDD9A, + 36671 - 11905: 0xDD9B, + 36672 - 11905: 0xDD9C, + 36673 - 11905: 0xDD9D, + 36674 - 11905: 0xDD9E, + 36675 - 11905: 0xDD9F, + 36676 - 11905: 0xDDA0, + 36677 - 11905: 0xDE40, + 36678 - 11905: 0xDE41, + 36679 - 11905: 0xDE42, + 36680 - 11905: 0xDE43, + 36681 - 11905: 0xDE44, + 36682 - 11905: 0xDE45, + 36683 - 11905: 0xDE46, + 36684 - 11905: 0xDE47, + 36685 - 11905: 0xDE48, + 36686 - 11905: 0xDE49, + 36687 - 11905: 0xDE4A, + 36688 - 11905: 0xDE4B, + 36689 - 11905: 0xDE4C, + 36690 - 11905: 0xDE4D, + 36691 - 11905: 0xDE4E, + 36692 - 11905: 0xDE4F, + 36693 - 11905: 0xDE50, + 36694 - 11905: 0xDE51, + 36695 - 11905: 0xDE52, + 36696 - 11905: 0xDE53, + 36697 - 11905: 0xDE54, + 36698 - 11905: 0xDE55, + 36699 - 11905: 0xDE56, + 36700 - 11905: 0xDE57, + 36701 - 11905: 0xDE58, + 36702 - 11905: 0xDE59, + 36703 - 11905: 0xDE5A, + 36704 - 11905: 0xDE5B, + 36705 - 11905: 0xDE5C, + 36706 - 11905: 0xDE5D, + 36707 - 11905: 0xDE5E, + 36708 - 11905: 0xDE5F, + 36709 - 11905: 0xDE60, + 36710 - 11905: 0xB3B5, + 36711 - 11905: 0xD4FE, + 36712 - 11905: 0xB9EC, + 36713 - 11905: 0xD0F9, + 36714 - 11905: 0xDE61, + 36715 - 11905: 0xE9ED, + 36716 - 11905: 0xD7AA, + 36717 - 11905: 0xE9EE, + 36718 - 11905: 0xC2D6, + 36719 - 11905: 0xC8ED, + 36720 - 11905: 0xBAE4, + 36721 - 11905: 0xE9EF, + 36722 - 11905: 0xE9F0, + 36723 - 11905: 0xE9F1, + 36724 - 11905: 0xD6E1, + 36725 - 11905: 0xE9F2, + 36726 - 11905: 0xE9F3, + 36727 - 11905: 0xE9F5, + 36728 - 11905: 0xE9F4, + 36729 - 11905: 0xE9F6, + 36730 - 11905: 0xE9F7, + 36731 - 11905: 0xC7E1, + 36732 - 11905: 0xE9F8, + 36733 - 11905: 0xD4D8, + 36734 - 11905: 0xE9F9, + 36735 - 11905: 0xBDCE, + 36736 - 11905: 0xDE62, + 36737 - 11905: 0xE9FA, + 36738 - 11905: 0xE9FB, + 36739 - 11905: 0xBDCF, + 36740 - 11905: 0xE9FC, + 36741 - 11905: 0xB8A8, + 36742 - 11905: 0xC1BE, + 36743 - 11905: 0xE9FD, + 36744 - 11905: 0xB1B2, + 36745 - 11905: 0xBBD4, + 36746 - 11905: 0xB9F5, + 36747 - 11905: 0xE9FE, + 36748 - 11905: 0xDE63, + 36749 - 11905: 0xEAA1, + 36750 - 11905: 0xEAA2, + 36751 - 11905: 0xEAA3, + 36752 - 11905: 0xB7F8, + 36753 - 11905: 0xBCAD, + 36754 - 11905: 0xDE64, + 36755 - 11905: 0xCAE4, + 36756 - 11905: 0xE0CE, + 36757 - 11905: 0xD4AF, + 36758 - 11905: 0xCFBD, + 36759 - 11905: 0xD5B7, + 36760 - 11905: 0xEAA4, + 36761 - 11905: 0xD5DE, + 36762 - 11905: 0xEAA5, + 36763 - 11905: 0xD0C1, + 36764 - 11905: 0xB9BC, + 36765 - 11905: 0xDE65, + 36766 - 11905: 0xB4C7, + 36767 - 11905: 0xB1D9, + 36768 - 11905: 0xDE66, + 36769 - 11905: 0xDE67, + 36770 - 11905: 0xDE68, + 36771 - 11905: 0xC0B1, + 36772 - 11905: 0xDE69, + 36773 - 11905: 0xDE6A, + 36774 - 11905: 0xDE6B, + 36775 - 11905: 0xDE6C, + 36776 - 11905: 0xB1E6, + 36777 - 11905: 0xB1E7, + 36778 - 11905: 0xDE6D, + 36779 - 11905: 0xB1E8, + 36780 - 11905: 0xDE6E, + 36781 - 11905: 0xDE6F, + 36782 - 11905: 0xDE70, + 36783 - 11905: 0xDE71, + 36784 - 11905: 0xB3BD, + 36785 - 11905: 0xC8E8, + 36786 - 11905: 0xDE72, + 36787 - 11905: 0xDE73, + 36788 - 11905: 0xDE74, + 36789 - 11905: 0xDE75, + 36790 - 11905: 0xE5C1, + 36791 - 11905: 0xDE76, + 36792 - 11905: 0xDE77, + 36793 - 11905: 0xB1DF, + 36794 - 11905: 0xDE78, + 36795 - 11905: 0xDE79, + 36796 - 11905: 0xDE7A, + 36797 - 11905: 0xC1C9, + 36798 - 11905: 0xB4EF, + 36799 - 11905: 0xDE7B, + 36800 - 11905: 0xDE7C, + 36801 - 11905: 0xC7A8, + 36802 - 11905: 0xD3D8, + 36803 - 11905: 0xDE7D, + 36804 - 11905: 0xC6F9, + 36805 - 11905: 0xD1B8, + 36806 - 11905: 0xDE7E, + 36807 - 11905: 0xB9FD, + 36808 - 11905: 0xC2F5, + 36809 - 11905: 0xDE80, + 36810 - 11905: 0xDE81, + 36811 - 11905: 0xDE82, + 36812 - 11905: 0xDE83, + 36813 - 11905: 0xDE84, + 36814 - 11905: 0xD3AD, + 36815 - 11905: 0xDE85, + 36816 - 11905: 0xD4CB, + 36817 - 11905: 0xBDFC, + 36818 - 11905: 0xDE86, + 36819 - 11905: 0xE5C2, + 36820 - 11905: 0xB7B5, + 36821 - 11905: 0xE5C3, + 36822 - 11905: 0xDE87, + 36823 - 11905: 0xDE88, + 36824 - 11905: 0xBBB9, + 36825 - 11905: 0xD5E2, + 36826 - 11905: 0xDE89, + 36827 - 11905: 0xBDF8, + 36828 - 11905: 0xD4B6, + 36829 - 11905: 0xCEA5, + 36830 - 11905: 0xC1AC, + 36831 - 11905: 0xB3D9, + 36832 - 11905: 0xDE8A, + 36833 - 11905: 0xDE8B, + 36834 - 11905: 0xCCF6, + 36835 - 11905: 0xDE8C, + 36836 - 11905: 0xE5C6, + 36837 - 11905: 0xE5C4, + 36838 - 11905: 0xE5C8, + 36839 - 11905: 0xDE8D, + 36840 - 11905: 0xE5CA, + 36841 - 11905: 0xE5C7, + 36842 - 11905: 0xB5CF, + 36843 - 11905: 0xC6C8, + 36844 - 11905: 0xDE8E, + 36845 - 11905: 0xB5FC, + 36846 - 11905: 0xE5C5, + 36847 - 11905: 0xDE8F, + 36848 - 11905: 0xCAF6, + 36849 - 11905: 0xDE90, + 36850 - 11905: 0xDE91, + 36851 - 11905: 0xE5C9, + 36852 - 11905: 0xDE92, + 36853 - 11905: 0xDE93, + 36854 - 11905: 0xDE94, + 36855 - 11905: 0xC3D4, + 36856 - 11905: 0xB1C5, + 36857 - 11905: 0xBCA3, + 36858 - 11905: 0xDE95, + 36859 - 11905: 0xDE96, + 36860 - 11905: 0xDE97, + 36861 - 11905: 0xD7B7, + 36862 - 11905: 0xDE98, + 36863 - 11905: 0xDE99, + 36864 - 11905: 0xCDCB, + 36865 - 11905: 0xCBCD, + 36866 - 11905: 0xCACA, + 36867 - 11905: 0xCCD3, + 36868 - 11905: 0xE5CC, + 36869 - 11905: 0xE5CB, + 36870 - 11905: 0xC4E6, + 36871 - 11905: 0xDE9A, + 36872 - 11905: 0xDE9B, + 36873 - 11905: 0xD1A1, + 36874 - 11905: 0xD1B7, + 36875 - 11905: 0xE5CD, + 36876 - 11905: 0xDE9C, + 36877 - 11905: 0xE5D0, + 36878 - 11905: 0xDE9D, + 36879 - 11905: 0xCDB8, + 36880 - 11905: 0xD6F0, + 36881 - 11905: 0xE5CF, + 36882 - 11905: 0xB5DD, + 36883 - 11905: 0xDE9E, + 36884 - 11905: 0xCDBE, + 36885 - 11905: 0xDE9F, + 36886 - 11905: 0xE5D1, + 36887 - 11905: 0xB6BA, + 36888 - 11905: 0xDEA0, + 36889 - 11905: 0xDF40, + 36890 - 11905: 0xCDA8, + 36891 - 11905: 0xB9E4, + 36892 - 11905: 0xDF41, + 36893 - 11905: 0xCAC5, + 36894 - 11905: 0xB3D1, + 36895 - 11905: 0xCBD9, + 36896 - 11905: 0xD4EC, + 36897 - 11905: 0xE5D2, + 36898 - 11905: 0xB7EA, + 36899 - 11905: 0xDF42, + 36900 - 11905: 0xDF43, + 36901 - 11905: 0xDF44, + 36902 - 11905: 0xE5CE, + 36903 - 11905: 0xDF45, + 36904 - 11905: 0xDF46, + 36905 - 11905: 0xDF47, + 36906 - 11905: 0xDF48, + 36907 - 11905: 0xDF49, + 36908 - 11905: 0xDF4A, + 36909 - 11905: 0xE5D5, + 36910 - 11905: 0xB4FE, + 36911 - 11905: 0xE5D6, + 36912 - 11905: 0xDF4B, + 36913 - 11905: 0xDF4C, + 36914 - 11905: 0xDF4D, + 36915 - 11905: 0xDF4E, + 36916 - 11905: 0xDF4F, + 36917 - 11905: 0xE5D3, + 36918 - 11905: 0xE5D4, + 36919 - 11905: 0xDF50, + 36920 - 11905: 0xD2DD, + 36921 - 11905: 0xDF51, + 36922 - 11905: 0xDF52, + 36923 - 11905: 0xC2DF, + 36924 - 11905: 0xB1C6, + 36925 - 11905: 0xDF53, + 36926 - 11905: 0xD3E2, + 36927 - 11905: 0xDF54, + 36928 - 11905: 0xDF55, + 36929 - 11905: 0xB6DD, + 36930 - 11905: 0xCBEC, + 36931 - 11905: 0xDF56, + 36932 - 11905: 0xE5D7, + 36933 - 11905: 0xDF57, + 36934 - 11905: 0xDF58, + 36935 - 11905: 0xD3F6, + 36936 - 11905: 0xDF59, + 36937 - 11905: 0xDF5A, + 36938 - 11905: 0xDF5B, + 36939 - 11905: 0xDF5C, + 36940 - 11905: 0xDF5D, + 36941 - 11905: 0xB1E9, + 36942 - 11905: 0xDF5E, + 36943 - 11905: 0xB6F4, + 36944 - 11905: 0xE5DA, + 36945 - 11905: 0xE5D8, + 36946 - 11905: 0xE5D9, + 36947 - 11905: 0xB5C0, + 36948 - 11905: 0xDF5F, + 36949 - 11905: 0xDF60, + 36950 - 11905: 0xDF61, + 36951 - 11905: 0xD2C5, + 36952 - 11905: 0xE5DC, + 36953 - 11905: 0xDF62, + 36954 - 11905: 0xDF63, + 36955 - 11905: 0xE5DE, + 36956 - 11905: 0xDF64, + 36957 - 11905: 0xDF65, + 36958 - 11905: 0xDF66, + 36959 - 11905: 0xDF67, + 36960 - 11905: 0xDF68, + 36961 - 11905: 0xDF69, + 36962 - 11905: 0xE5DD, + 36963 - 11905: 0xC7B2, + 36964 - 11905: 0xDF6A, + 36965 - 11905: 0xD2A3, + 36966 - 11905: 0xDF6B, + 36967 - 11905: 0xDF6C, + 36968 - 11905: 0xE5DB, + 36969 - 11905: 0xDF6D, + 36970 - 11905: 0xDF6E, + 36971 - 11905: 0xDF6F, + 36972 - 11905: 0xDF70, + 36973 - 11905: 0xD4E2, + 36974 - 11905: 0xD5DA, + 36975 - 11905: 0xDF71, + 36976 - 11905: 0xDF72, + 36977 - 11905: 0xDF73, + 36978 - 11905: 0xDF74, + 36979 - 11905: 0xDF75, + 36980 - 11905: 0xE5E0, + 36981 - 11905: 0xD7F1, + 36982 - 11905: 0xDF76, + 36983 - 11905: 0xDF77, + 36984 - 11905: 0xDF78, + 36985 - 11905: 0xDF79, + 36986 - 11905: 0xDF7A, + 36987 - 11905: 0xDF7B, + 36988 - 11905: 0xDF7C, + 36989 - 11905: 0xE5E1, + 36990 - 11905: 0xDF7D, + 36991 - 11905: 0xB1DC, + 36992 - 11905: 0xD1FB, + 36993 - 11905: 0xDF7E, + 36994 - 11905: 0xE5E2, + 36995 - 11905: 0xE5E4, + 36996 - 11905: 0xDF80, + 36997 - 11905: 0xDF81, + 36998 - 11905: 0xDF82, + 36999 - 11905: 0xDF83, + 37000 - 11905: 0xE5E3, + 37001 - 11905: 0xDF84, + 37002 - 11905: 0xDF85, + 37003 - 11905: 0xE5E5, + 37004 - 11905: 0xDF86, + 37005 - 11905: 0xDF87, + 37006 - 11905: 0xDF88, + 37007 - 11905: 0xDF89, + 37008 - 11905: 0xDF8A, + 37009 - 11905: 0xD2D8, + 37010 - 11905: 0xDF8B, + 37011 - 11905: 0xB5CB, + 37012 - 11905: 0xDF8C, + 37013 - 11905: 0xE7DF, + 37014 - 11905: 0xDF8D, + 37015 - 11905: 0xDAF5, + 37016 - 11905: 0xDF8E, + 37017 - 11905: 0xDAF8, + 37018 - 11905: 0xDF8F, + 37019 - 11905: 0xDAF6, + 37020 - 11905: 0xDF90, + 37021 - 11905: 0xDAF7, + 37022 - 11905: 0xDF91, + 37023 - 11905: 0xDF92, + 37024 - 11905: 0xDF93, + 37025 - 11905: 0xDAFA, + 37026 - 11905: 0xD0CF, + 37027 - 11905: 0xC4C7, + 37028 - 11905: 0xDF94, + 37029 - 11905: 0xDF95, + 37030 - 11905: 0xB0EE, + 37031 - 11905: 0xDF96, + 37032 - 11905: 0xDF97, + 37033 - 11905: 0xDF98, + 37034 - 11905: 0xD0B0, + 37035 - 11905: 0xDF99, + 37036 - 11905: 0xDAF9, + 37037 - 11905: 0xDF9A, + 37038 - 11905: 0xD3CA, + 37039 - 11905: 0xBAAA, + 37040 - 11905: 0xDBA2, + 37041 - 11905: 0xC7F1, + 37042 - 11905: 0xDF9B, + 37043 - 11905: 0xDAFC, + 37044 - 11905: 0xDAFB, + 37045 - 11905: 0xC9DB, + 37046 - 11905: 0xDAFD, + 37047 - 11905: 0xDF9C, + 37048 - 11905: 0xDBA1, + 37049 - 11905: 0xD7DE, + 37050 - 11905: 0xDAFE, + 37051 - 11905: 0xC1DA, + 37052 - 11905: 0xDF9D, + 37053 - 11905: 0xDF9E, + 37054 - 11905: 0xDBA5, + 37055 - 11905: 0xDF9F, + 37056 - 11905: 0xDFA0, + 37057 - 11905: 0xD3F4, + 37058 - 11905: 0xE040, + 37059 - 11905: 0xE041, + 37060 - 11905: 0xDBA7, + 37061 - 11905: 0xDBA4, + 37062 - 11905: 0xE042, + 37063 - 11905: 0xDBA8, + 37064 - 11905: 0xE043, + 37065 - 11905: 0xE044, + 37066 - 11905: 0xBDBC, + 37067 - 11905: 0xE045, + 37068 - 11905: 0xE046, + 37069 - 11905: 0xE047, + 37070 - 11905: 0xC0C9, + 37071 - 11905: 0xDBA3, + 37072 - 11905: 0xDBA6, + 37073 - 11905: 0xD6A3, + 37074 - 11905: 0xE048, + 37075 - 11905: 0xDBA9, + 37076 - 11905: 0xE049, + 37077 - 11905: 0xE04A, + 37078 - 11905: 0xE04B, + 37079 - 11905: 0xDBAD, + 37080 - 11905: 0xE04C, + 37081 - 11905: 0xE04D, + 37082 - 11905: 0xE04E, + 37083 - 11905: 0xDBAE, + 37084 - 11905: 0xDBAC, + 37085 - 11905: 0xBAC2, + 37086 - 11905: 0xE04F, + 37087 - 11905: 0xE050, + 37088 - 11905: 0xE051, + 37089 - 11905: 0xBFA4, + 37090 - 11905: 0xDBAB, + 37091 - 11905: 0xE052, + 37092 - 11905: 0xE053, + 37093 - 11905: 0xE054, + 37094 - 11905: 0xDBAA, + 37095 - 11905: 0xD4C7, + 37096 - 11905: 0xB2BF, + 37097 - 11905: 0xE055, + 37098 - 11905: 0xE056, + 37099 - 11905: 0xDBAF, + 37100 - 11905: 0xE057, + 37101 - 11905: 0xB9F9, + 37102 - 11905: 0xE058, + 37103 - 11905: 0xDBB0, + 37104 - 11905: 0xE059, + 37105 - 11905: 0xE05A, + 37106 - 11905: 0xE05B, + 37107 - 11905: 0xE05C, + 37108 - 11905: 0xB3BB, + 37109 - 11905: 0xE05D, + 37110 - 11905: 0xE05E, + 37111 - 11905: 0xE05F, + 37112 - 11905: 0xB5A6, + 37113 - 11905: 0xE060, + 37114 - 11905: 0xE061, + 37115 - 11905: 0xE062, + 37116 - 11905: 0xE063, + 37117 - 11905: 0xB6BC, + 37118 - 11905: 0xDBB1, + 37119 - 11905: 0xE064, + 37120 - 11905: 0xE065, + 37121 - 11905: 0xE066, + 37122 - 11905: 0xB6F5, + 37123 - 11905: 0xE067, + 37124 - 11905: 0xDBB2, + 37125 - 11905: 0xE068, + 37126 - 11905: 0xE069, + 37127 - 11905: 0xE06A, + 37128 - 11905: 0xE06B, + 37129 - 11905: 0xE06C, + 37130 - 11905: 0xE06D, + 37131 - 11905: 0xE06E, + 37132 - 11905: 0xE06F, + 37133 - 11905: 0xE070, + 37134 - 11905: 0xE071, + 37135 - 11905: 0xE072, + 37136 - 11905: 0xE073, + 37137 - 11905: 0xE074, + 37138 - 11905: 0xE075, + 37139 - 11905: 0xE076, + 37140 - 11905: 0xE077, + 37141 - 11905: 0xE078, + 37142 - 11905: 0xE079, + 37143 - 11905: 0xE07A, + 37144 - 11905: 0xE07B, + 37145 - 11905: 0xB1C9, + 37146 - 11905: 0xE07C, + 37147 - 11905: 0xE07D, + 37148 - 11905: 0xE07E, + 37149 - 11905: 0xE080, + 37150 - 11905: 0xDBB4, + 37151 - 11905: 0xE081, + 37152 - 11905: 0xE082, + 37153 - 11905: 0xE083, + 37154 - 11905: 0xDBB3, + 37155 - 11905: 0xDBB5, + 37156 - 11905: 0xE084, + 37157 - 11905: 0xE085, + 37158 - 11905: 0xE086, + 37159 - 11905: 0xE087, + 37160 - 11905: 0xE088, + 37161 - 11905: 0xE089, + 37162 - 11905: 0xE08A, + 37163 - 11905: 0xE08B, + 37164 - 11905: 0xE08C, + 37165 - 11905: 0xE08D, + 37166 - 11905: 0xE08E, + 37167 - 11905: 0xDBB7, + 37168 - 11905: 0xE08F, + 37169 - 11905: 0xDBB6, + 37170 - 11905: 0xE090, + 37171 - 11905: 0xE091, + 37172 - 11905: 0xE092, + 37173 - 11905: 0xE093, + 37174 - 11905: 0xE094, + 37175 - 11905: 0xE095, + 37176 - 11905: 0xE096, + 37177 - 11905: 0xDBB8, + 37178 - 11905: 0xE097, + 37179 - 11905: 0xE098, + 37180 - 11905: 0xE099, + 37181 - 11905: 0xE09A, + 37182 - 11905: 0xE09B, + 37183 - 11905: 0xE09C, + 37184 - 11905: 0xE09D, + 37185 - 11905: 0xE09E, + 37186 - 11905: 0xE09F, + 37187 - 11905: 0xDBB9, + 37188 - 11905: 0xE0A0, + 37189 - 11905: 0xE140, + 37190 - 11905: 0xDBBA, + 37191 - 11905: 0xE141, + 37192 - 11905: 0xE142, + 37193 - 11905: 0xD3CF, + 37194 - 11905: 0xF4FA, + 37195 - 11905: 0xC7F5, + 37196 - 11905: 0xD7C3, + 37197 - 11905: 0xC5E4, + 37198 - 11905: 0xF4FC, + 37199 - 11905: 0xF4FD, + 37200 - 11905: 0xF4FB, + 37201 - 11905: 0xE143, + 37202 - 11905: 0xBEC6, + 37203 - 11905: 0xE144, + 37204 - 11905: 0xE145, + 37205 - 11905: 0xE146, + 37206 - 11905: 0xE147, + 37207 - 11905: 0xD0EF, + 37208 - 11905: 0xE148, + 37209 - 11905: 0xE149, + 37210 - 11905: 0xB7D3, + 37211 - 11905: 0xE14A, + 37212 - 11905: 0xE14B, + 37213 - 11905: 0xD4CD, + 37214 - 11905: 0xCCAA, + 37215 - 11905: 0xE14C, + 37216 - 11905: 0xE14D, + 37217 - 11905: 0xF5A2, + 37218 - 11905: 0xF5A1, + 37219 - 11905: 0xBAA8, + 37220 - 11905: 0xF4FE, + 37221 - 11905: 0xCBD6, + 37222 - 11905: 0xE14E, + 37223 - 11905: 0xE14F, + 37224 - 11905: 0xE150, + 37225 - 11905: 0xF5A4, + 37226 - 11905: 0xC0D2, + 37227 - 11905: 0xE151, + 37228 - 11905: 0xB3EA, + 37229 - 11905: 0xE152, + 37230 - 11905: 0xCDAA, + 37231 - 11905: 0xF5A5, + 37232 - 11905: 0xF5A3, + 37233 - 11905: 0xBDB4, + 37234 - 11905: 0xF5A8, + 37235 - 11905: 0xE153, + 37236 - 11905: 0xF5A9, + 37237 - 11905: 0xBDCD, + 37238 - 11905: 0xC3B8, + 37239 - 11905: 0xBFE1, + 37240 - 11905: 0xCBE1, + 37241 - 11905: 0xF5AA, + 37242 - 11905: 0xE154, + 37243 - 11905: 0xE155, + 37244 - 11905: 0xE156, + 37245 - 11905: 0xF5A6, + 37246 - 11905: 0xF5A7, + 37247 - 11905: 0xC4F0, + 37248 - 11905: 0xE157, + 37249 - 11905: 0xE158, + 37250 - 11905: 0xE159, + 37251 - 11905: 0xE15A, + 37252 - 11905: 0xE15B, + 37253 - 11905: 0xF5AC, + 37254 - 11905: 0xE15C, + 37255 - 11905: 0xB4BC, + 37256 - 11905: 0xE15D, + 37257 - 11905: 0xD7ED, + 37258 - 11905: 0xE15E, + 37259 - 11905: 0xB4D7, + 37260 - 11905: 0xF5AB, + 37261 - 11905: 0xF5AE, + 37262 - 11905: 0xE15F, + 37263 - 11905: 0xE160, + 37264 - 11905: 0xF5AD, + 37265 - 11905: 0xF5AF, + 37266 - 11905: 0xD0D1, + 37267 - 11905: 0xE161, + 37268 - 11905: 0xE162, + 37269 - 11905: 0xE163, + 37270 - 11905: 0xE164, + 37271 - 11905: 0xE165, + 37272 - 11905: 0xE166, + 37273 - 11905: 0xE167, + 37274 - 11905: 0xC3D1, + 37275 - 11905: 0xC8A9, + 37276 - 11905: 0xE168, + 37277 - 11905: 0xE169, + 37278 - 11905: 0xE16A, + 37279 - 11905: 0xE16B, + 37280 - 11905: 0xE16C, + 37281 - 11905: 0xE16D, + 37282 - 11905: 0xF5B0, + 37283 - 11905: 0xF5B1, + 37284 - 11905: 0xE16E, + 37285 - 11905: 0xE16F, + 37286 - 11905: 0xE170, + 37287 - 11905: 0xE171, + 37288 - 11905: 0xE172, + 37289 - 11905: 0xE173, + 37290 - 11905: 0xF5B2, + 37291 - 11905: 0xE174, + 37292 - 11905: 0xE175, + 37293 - 11905: 0xF5B3, + 37294 - 11905: 0xF5B4, + 37295 - 11905: 0xF5B5, + 37296 - 11905: 0xE176, + 37297 - 11905: 0xE177, + 37298 - 11905: 0xE178, + 37299 - 11905: 0xE179, + 37300 - 11905: 0xF5B7, + 37301 - 11905: 0xF5B6, + 37302 - 11905: 0xE17A, + 37303 - 11905: 0xE17B, + 37304 - 11905: 0xE17C, + 37305 - 11905: 0xE17D, + 37306 - 11905: 0xF5B8, + 37307 - 11905: 0xE17E, + 37308 - 11905: 0xE180, + 37309 - 11905: 0xE181, + 37310 - 11905: 0xE182, + 37311 - 11905: 0xE183, + 37312 - 11905: 0xE184, + 37313 - 11905: 0xE185, + 37314 - 11905: 0xE186, + 37315 - 11905: 0xE187, + 37316 - 11905: 0xE188, + 37317 - 11905: 0xE189, + 37318 - 11905: 0xE18A, + 37319 - 11905: 0xB2C9, + 37320 - 11905: 0xE18B, + 37321 - 11905: 0xD3D4, + 37322 - 11905: 0xCACD, + 37323 - 11905: 0xE18C, + 37324 - 11905: 0xC0EF, + 37325 - 11905: 0xD6D8, + 37326 - 11905: 0xD2B0, + 37327 - 11905: 0xC1BF, + 37328 - 11905: 0xE18D, + 37329 - 11905: 0xBDF0, + 37330 - 11905: 0xE18E, + 37331 - 11905: 0xE18F, + 37332 - 11905: 0xE190, + 37333 - 11905: 0xE191, + 37334 - 11905: 0xE192, + 37335 - 11905: 0xE193, + 37336 - 11905: 0xE194, + 37337 - 11905: 0xE195, + 37338 - 11905: 0xE196, + 37339 - 11905: 0xE197, + 37340 - 11905: 0xB8AA, + 37341 - 11905: 0xE198, + 37342 - 11905: 0xE199, + 37343 - 11905: 0xE19A, + 37344 - 11905: 0xE19B, + 37345 - 11905: 0xE19C, + 37346 - 11905: 0xE19D, + 37347 - 11905: 0xE19E, + 37348 - 11905: 0xE19F, + 37349 - 11905: 0xE1A0, + 37350 - 11905: 0xE240, + 37351 - 11905: 0xE241, + 37352 - 11905: 0xE242, + 37353 - 11905: 0xE243, + 37354 - 11905: 0xE244, + 37355 - 11905: 0xE245, + 37356 - 11905: 0xE246, + 37357 - 11905: 0xE247, + 37358 - 11905: 0xE248, + 37359 - 11905: 0xE249, + 37360 - 11905: 0xE24A, + 37361 - 11905: 0xE24B, + 37362 - 11905: 0xE24C, + 37363 - 11905: 0xE24D, + 37364 - 11905: 0xE24E, + 37365 - 11905: 0xE24F, + 37366 - 11905: 0xE250, + 37367 - 11905: 0xE251, + 37368 - 11905: 0xE252, + 37369 - 11905: 0xE253, + 37370 - 11905: 0xE254, + 37371 - 11905: 0xE255, + 37372 - 11905: 0xE256, + 37373 - 11905: 0xE257, + 37374 - 11905: 0xE258, + 37375 - 11905: 0xE259, + 37376 - 11905: 0xE25A, + 37377 - 11905: 0xE25B, + 37378 - 11905: 0xE25C, + 37379 - 11905: 0xE25D, + 37380 - 11905: 0xE25E, + 37381 - 11905: 0xE25F, + 37382 - 11905: 0xE260, + 37383 - 11905: 0xE261, + 37384 - 11905: 0xE262, + 37385 - 11905: 0xE263, + 37386 - 11905: 0xE264, + 37387 - 11905: 0xE265, + 37388 - 11905: 0xE266, + 37389 - 11905: 0xE267, + 37390 - 11905: 0xE268, + 37391 - 11905: 0xE269, + 37392 - 11905: 0xE26A, + 37393 - 11905: 0xE26B, + 37394 - 11905: 0xE26C, + 37395 - 11905: 0xE26D, + 37396 - 11905: 0xE26E, + 37397 - 11905: 0xE26F, + 37398 - 11905: 0xE270, + 37399 - 11905: 0xE271, + 37400 - 11905: 0xE272, + 37401 - 11905: 0xE273, + 37402 - 11905: 0xE274, + 37403 - 11905: 0xE275, + 37404 - 11905: 0xE276, + 37405 - 11905: 0xE277, + 37406 - 11905: 0xE278, + 37407 - 11905: 0xE279, + 37408 - 11905: 0xE27A, + 37409 - 11905: 0xE27B, + 37410 - 11905: 0xE27C, + 37411 - 11905: 0xE27D, + 37412 - 11905: 0xE27E, + 37413 - 11905: 0xE280, + 37414 - 11905: 0xE281, + 37415 - 11905: 0xE282, + 37416 - 11905: 0xE283, + 37417 - 11905: 0xE284, + 37418 - 11905: 0xE285, + 37419 - 11905: 0xE286, + 37420 - 11905: 0xE287, + 37421 - 11905: 0xE288, + 37422 - 11905: 0xE289, + 37423 - 11905: 0xE28A, + 37424 - 11905: 0xE28B, + 37425 - 11905: 0xE28C, + 37426 - 11905: 0xE28D, + 37427 - 11905: 0xE28E, + 37428 - 11905: 0xE28F, + 37429 - 11905: 0xE290, + 37430 - 11905: 0xE291, + 37431 - 11905: 0xE292, + 37432 - 11905: 0xE293, + 37433 - 11905: 0xE294, + 37434 - 11905: 0xE295, + 37435 - 11905: 0xE296, + 37436 - 11905: 0xE297, + 37437 - 11905: 0xE298, + 37438 - 11905: 0xE299, + 37439 - 11905: 0xE29A, + 37440 - 11905: 0xE29B, + 37441 - 11905: 0xE29C, + 37442 - 11905: 0xE29D, + 37443 - 11905: 0xE29E, + 37444 - 11905: 0xE29F, + 37445 - 11905: 0xE2A0, + 37446 - 11905: 0xE340, + 37447 - 11905: 0xE341, + 37448 - 11905: 0xE342, + 37449 - 11905: 0xE343, + 37450 - 11905: 0xE344, + 37451 - 11905: 0xE345, + 37452 - 11905: 0xE346, + 37453 - 11905: 0xE347, + 37454 - 11905: 0xE348, + 37455 - 11905: 0xE349, + 37456 - 11905: 0xE34A, + 37457 - 11905: 0xE34B, + 37458 - 11905: 0xE34C, + 37459 - 11905: 0xE34D, + 37460 - 11905: 0xE34E, + 37461 - 11905: 0xE34F, + 37462 - 11905: 0xE350, + 37463 - 11905: 0xE351, + 37464 - 11905: 0xE352, + 37465 - 11905: 0xE353, + 37466 - 11905: 0xE354, + 37467 - 11905: 0xE355, + 37468 - 11905: 0xE356, + 37469 - 11905: 0xE357, + 37470 - 11905: 0xE358, + 37471 - 11905: 0xE359, + 37472 - 11905: 0xE35A, + 37473 - 11905: 0xE35B, + 37474 - 11905: 0xE35C, + 37475 - 11905: 0xE35D, + 37476 - 11905: 0xE35E, + 37477 - 11905: 0xE35F, + 37478 - 11905: 0xE360, + 37479 - 11905: 0xE361, + 37480 - 11905: 0xE362, + 37481 - 11905: 0xE363, + 37482 - 11905: 0xE364, + 37483 - 11905: 0xE365, + 37484 - 11905: 0xE366, + 37485 - 11905: 0xE367, + 37486 - 11905: 0xE368, + 37487 - 11905: 0xE369, + 37488 - 11905: 0xE36A, + 37489 - 11905: 0xE36B, + 37490 - 11905: 0xE36C, + 37491 - 11905: 0xE36D, + 37492 - 11905: 0xBCF8, + 37493 - 11905: 0xE36E, + 37494 - 11905: 0xE36F, + 37495 - 11905: 0xE370, + 37496 - 11905: 0xE371, + 37497 - 11905: 0xE372, + 37498 - 11905: 0xE373, + 37499 - 11905: 0xE374, + 37500 - 11905: 0xE375, + 37501 - 11905: 0xE376, + 37502 - 11905: 0xE377, + 37503 - 11905: 0xE378, + 37504 - 11905: 0xE379, + 37505 - 11905: 0xE37A, + 37506 - 11905: 0xE37B, + 37507 - 11905: 0xE37C, + 37508 - 11905: 0xE37D, + 37509 - 11905: 0xE37E, + 37510 - 11905: 0xE380, + 37511 - 11905: 0xE381, + 37512 - 11905: 0xE382, + 37513 - 11905: 0xE383, + 37514 - 11905: 0xE384, + 37515 - 11905: 0xE385, + 37516 - 11905: 0xE386, + 37517 - 11905: 0xE387, + 37518 - 11905: 0xF6C6, + 37519 - 11905: 0xE388, + 37520 - 11905: 0xE389, + 37521 - 11905: 0xE38A, + 37522 - 11905: 0xE38B, + 37523 - 11905: 0xE38C, + 37524 - 11905: 0xE38D, + 37525 - 11905: 0xE38E, + 37526 - 11905: 0xE38F, + 37527 - 11905: 0xE390, + 37528 - 11905: 0xE391, + 37529 - 11905: 0xE392, + 37530 - 11905: 0xE393, + 37531 - 11905: 0xE394, + 37532 - 11905: 0xE395, + 37533 - 11905: 0xE396, + 37534 - 11905: 0xE397, + 37535 - 11905: 0xE398, + 37536 - 11905: 0xE399, + 37537 - 11905: 0xE39A, + 37538 - 11905: 0xE39B, + 37539 - 11905: 0xE39C, + 37540 - 11905: 0xE39D, + 37541 - 11905: 0xE39E, + 37542 - 11905: 0xE39F, + 37543 - 11905: 0xE3A0, + 37544 - 11905: 0xE440, + 37545 - 11905: 0xE441, + 37546 - 11905: 0xE442, + 37547 - 11905: 0xE443, + 37548 - 11905: 0xE444, + 37549 - 11905: 0xE445, + 37550 - 11905: 0xF6C7, + 37551 - 11905: 0xE446, + 37552 - 11905: 0xE447, + 37553 - 11905: 0xE448, + 37554 - 11905: 0xE449, + 37555 - 11905: 0xE44A, + 37556 - 11905: 0xE44B, + 37557 - 11905: 0xE44C, + 37558 - 11905: 0xE44D, + 37559 - 11905: 0xE44E, + 37560 - 11905: 0xE44F, + 37561 - 11905: 0xE450, + 37562 - 11905: 0xE451, + 37563 - 11905: 0xE452, + 37564 - 11905: 0xE453, + 37565 - 11905: 0xE454, + 37566 - 11905: 0xE455, + 37567 - 11905: 0xE456, + 37568 - 11905: 0xE457, + 37569 - 11905: 0xE458, + 37570 - 11905: 0xE459, + 37571 - 11905: 0xE45A, + 37572 - 11905: 0xE45B, + 37573 - 11905: 0xE45C, + 37574 - 11905: 0xE45D, + 37575 - 11905: 0xE45E, + 37576 - 11905: 0xF6C8, + 37577 - 11905: 0xE45F, + 37578 - 11905: 0xE460, + 37579 - 11905: 0xE461, + 37580 - 11905: 0xE462, + 37581 - 11905: 0xE463, + 37582 - 11905: 0xE464, + 37583 - 11905: 0xE465, + 37584 - 11905: 0xE466, + 37585 - 11905: 0xE467, + 37586 - 11905: 0xE468, + 37587 - 11905: 0xE469, + 37588 - 11905: 0xE46A, + 37589 - 11905: 0xE46B, + 37590 - 11905: 0xE46C, + 37591 - 11905: 0xE46D, + 37592 - 11905: 0xE46E, + 37593 - 11905: 0xE46F, + 37594 - 11905: 0xE470, + 37595 - 11905: 0xE471, + 37596 - 11905: 0xE472, + 37597 - 11905: 0xE473, + 37598 - 11905: 0xE474, + 37599 - 11905: 0xE475, + 37600 - 11905: 0xE476, + 37601 - 11905: 0xE477, + 37602 - 11905: 0xE478, + 37603 - 11905: 0xE479, + 37604 - 11905: 0xE47A, + 37605 - 11905: 0xE47B, + 37606 - 11905: 0xE47C, + 37607 - 11905: 0xE47D, + 37608 - 11905: 0xE47E, + 37609 - 11905: 0xE480, + 37610 - 11905: 0xE481, + 37611 - 11905: 0xE482, + 37612 - 11905: 0xE483, + 37613 - 11905: 0xE484, + 37614 - 11905: 0xE485, + 37615 - 11905: 0xE486, + 37616 - 11905: 0xE487, + 37617 - 11905: 0xE488, + 37618 - 11905: 0xE489, + 37619 - 11905: 0xE48A, + 37620 - 11905: 0xE48B, + 37621 - 11905: 0xE48C, + 37622 - 11905: 0xE48D, + 37623 - 11905: 0xE48E, + 37624 - 11905: 0xE48F, + 37625 - 11905: 0xE490, + 37626 - 11905: 0xE491, + 37627 - 11905: 0xE492, + 37628 - 11905: 0xE493, + 37629 - 11905: 0xE494, + 37630 - 11905: 0xE495, + 37631 - 11905: 0xE496, + 37632 - 11905: 0xE497, + 37633 - 11905: 0xE498, + 37634 - 11905: 0xE499, + 37635 - 11905: 0xE49A, + 37636 - 11905: 0xE49B, + 37637 - 11905: 0xE49C, + 37638 - 11905: 0xE49D, + 37639 - 11905: 0xE49E, + 37640 - 11905: 0xE49F, + 37641 - 11905: 0xE4A0, + 37642 - 11905: 0xE540, + 37643 - 11905: 0xE541, + 37644 - 11905: 0xE542, + 37645 - 11905: 0xE543, + 37646 - 11905: 0xE544, + 37647 - 11905: 0xE545, + 37648 - 11905: 0xE546, + 37649 - 11905: 0xE547, + 37650 - 11905: 0xE548, + 37651 - 11905: 0xE549, + 37652 - 11905: 0xE54A, + 37653 - 11905: 0xE54B, + 37654 - 11905: 0xE54C, + 37655 - 11905: 0xE54D, + 37656 - 11905: 0xE54E, + 37657 - 11905: 0xE54F, + 37658 - 11905: 0xE550, + 37659 - 11905: 0xE551, + 37660 - 11905: 0xE552, + 37661 - 11905: 0xE553, + 37662 - 11905: 0xE554, + 37663 - 11905: 0xE555, + 37664 - 11905: 0xE556, + 37665 - 11905: 0xE557, + 37666 - 11905: 0xE558, + 37667 - 11905: 0xE559, + 37668 - 11905: 0xE55A, + 37669 - 11905: 0xE55B, + 37670 - 11905: 0xE55C, + 37671 - 11905: 0xE55D, + 37672 - 11905: 0xE55E, + 37673 - 11905: 0xE55F, + 37674 - 11905: 0xE560, + 37675 - 11905: 0xE561, + 37676 - 11905: 0xE562, + 37677 - 11905: 0xE563, + 37678 - 11905: 0xE564, + 37679 - 11905: 0xE565, + 37680 - 11905: 0xE566, + 37681 - 11905: 0xE567, + 37682 - 11905: 0xE568, + 37683 - 11905: 0xE569, + 37684 - 11905: 0xE56A, + 37685 - 11905: 0xE56B, + 37686 - 11905: 0xE56C, + 37687 - 11905: 0xE56D, + 37688 - 11905: 0xE56E, + 37689 - 11905: 0xE56F, + 37690 - 11905: 0xE570, + 37691 - 11905: 0xE571, + 37692 - 11905: 0xE572, + 37693 - 11905: 0xE573, + 37694 - 11905: 0xF6C9, + 37695 - 11905: 0xE574, + 37696 - 11905: 0xE575, + 37697 - 11905: 0xE576, + 37698 - 11905: 0xE577, + 37699 - 11905: 0xE578, + 37700 - 11905: 0xE579, + 37701 - 11905: 0xE57A, + 37702 - 11905: 0xE57B, + 37703 - 11905: 0xE57C, + 37704 - 11905: 0xE57D, + 37705 - 11905: 0xE57E, + 37706 - 11905: 0xE580, + 37707 - 11905: 0xE581, + 37708 - 11905: 0xE582, + 37709 - 11905: 0xE583, + 37710 - 11905: 0xE584, + 37711 - 11905: 0xE585, + 37712 - 11905: 0xE586, + 37713 - 11905: 0xE587, + 37714 - 11905: 0xE588, + 37715 - 11905: 0xE589, + 37716 - 11905: 0xE58A, + 37717 - 11905: 0xE58B, + 37718 - 11905: 0xE58C, + 37719 - 11905: 0xE58D, + 37720 - 11905: 0xE58E, + 37721 - 11905: 0xE58F, + 37722 - 11905: 0xE590, + 37723 - 11905: 0xE591, + 37724 - 11905: 0xE592, + 37725 - 11905: 0xE593, + 37726 - 11905: 0xE594, + 37727 - 11905: 0xE595, + 37728 - 11905: 0xE596, + 37729 - 11905: 0xE597, + 37730 - 11905: 0xE598, + 37731 - 11905: 0xE599, + 37732 - 11905: 0xE59A, + 37733 - 11905: 0xE59B, + 37734 - 11905: 0xE59C, + 37735 - 11905: 0xE59D, + 37736 - 11905: 0xE59E, + 37737 - 11905: 0xE59F, + 37738 - 11905: 0xF6CA, + 37739 - 11905: 0xE5A0, + 37740 - 11905: 0xE640, + 37741 - 11905: 0xE641, + 37742 - 11905: 0xE642, + 37743 - 11905: 0xE643, + 37744 - 11905: 0xE644, + 37745 - 11905: 0xE645, + 37746 - 11905: 0xE646, + 37747 - 11905: 0xE647, + 37748 - 11905: 0xE648, + 37749 - 11905: 0xE649, + 37750 - 11905: 0xE64A, + 37751 - 11905: 0xE64B, + 37752 - 11905: 0xE64C, + 37753 - 11905: 0xE64D, + 37754 - 11905: 0xE64E, + 37755 - 11905: 0xE64F, + 37756 - 11905: 0xE650, + 37757 - 11905: 0xE651, + 37758 - 11905: 0xE652, + 37759 - 11905: 0xE653, + 37760 - 11905: 0xE654, + 37761 - 11905: 0xE655, + 37762 - 11905: 0xE656, + 37763 - 11905: 0xE657, + 37764 - 11905: 0xE658, + 37765 - 11905: 0xE659, + 37766 - 11905: 0xE65A, + 37767 - 11905: 0xE65B, + 37768 - 11905: 0xE65C, + 37769 - 11905: 0xE65D, + 37770 - 11905: 0xE65E, + 37771 - 11905: 0xE65F, + 37772 - 11905: 0xE660, + 37773 - 11905: 0xE661, + 37774 - 11905: 0xE662, + 37775 - 11905: 0xF6CC, + 37776 - 11905: 0xE663, + 37777 - 11905: 0xE664, + 37778 - 11905: 0xE665, + 37779 - 11905: 0xE666, + 37780 - 11905: 0xE667, + 37781 - 11905: 0xE668, + 37782 - 11905: 0xE669, + 37783 - 11905: 0xE66A, + 37784 - 11905: 0xE66B, + 37785 - 11905: 0xE66C, + 37786 - 11905: 0xE66D, + 37787 - 11905: 0xE66E, + 37788 - 11905: 0xE66F, + 37789 - 11905: 0xE670, + 37790 - 11905: 0xE671, + 37791 - 11905: 0xE672, + 37792 - 11905: 0xE673, + 37793 - 11905: 0xE674, + 37794 - 11905: 0xE675, + 37795 - 11905: 0xE676, + 37796 - 11905: 0xE677, + 37797 - 11905: 0xE678, + 37798 - 11905: 0xE679, + 37799 - 11905: 0xE67A, + 37800 - 11905: 0xE67B, + 37801 - 11905: 0xE67C, + 37802 - 11905: 0xE67D, + 37803 - 11905: 0xE67E, + 37804 - 11905: 0xE680, + 37805 - 11905: 0xE681, + 37806 - 11905: 0xE682, + 37807 - 11905: 0xE683, + 37808 - 11905: 0xE684, + 37809 - 11905: 0xE685, + 37810 - 11905: 0xE686, + 37811 - 11905: 0xE687, + 37812 - 11905: 0xE688, + 37813 - 11905: 0xE689, + 37814 - 11905: 0xE68A, + 37815 - 11905: 0xE68B, + 37816 - 11905: 0xE68C, + 37817 - 11905: 0xE68D, + 37818 - 11905: 0xE68E, + 37819 - 11905: 0xE68F, + 37820 - 11905: 0xE690, + 37821 - 11905: 0xE691, + 37822 - 11905: 0xE692, + 37823 - 11905: 0xE693, + 37824 - 11905: 0xE694, + 37825 - 11905: 0xE695, + 37826 - 11905: 0xE696, + 37827 - 11905: 0xE697, + 37828 - 11905: 0xE698, + 37829 - 11905: 0xE699, + 37830 - 11905: 0xE69A, + 37831 - 11905: 0xE69B, + 37832 - 11905: 0xE69C, + 37833 - 11905: 0xE69D, + 37834 - 11905: 0xF6CB, + 37835 - 11905: 0xE69E, + 37836 - 11905: 0xE69F, + 37837 - 11905: 0xE6A0, + 37838 - 11905: 0xE740, + 37839 - 11905: 0xE741, + 37840 - 11905: 0xE742, + 37841 - 11905: 0xE743, + 37842 - 11905: 0xE744, + 37843 - 11905: 0xE745, + 37844 - 11905: 0xE746, + 37845 - 11905: 0xE747, + 37846 - 11905: 0xF7E9, + 37847 - 11905: 0xE748, + 37848 - 11905: 0xE749, + 37849 - 11905: 0xE74A, + 37850 - 11905: 0xE74B, + 37851 - 11905: 0xE74C, + 37852 - 11905: 0xE74D, + 37853 - 11905: 0xE74E, + 37854 - 11905: 0xE74F, + 37855 - 11905: 0xE750, + 37856 - 11905: 0xE751, + 37857 - 11905: 0xE752, + 37858 - 11905: 0xE753, + 37859 - 11905: 0xE754, + 37860 - 11905: 0xE755, + 37861 - 11905: 0xE756, + 37862 - 11905: 0xE757, + 37863 - 11905: 0xE758, + 37864 - 11905: 0xE759, + 37865 - 11905: 0xE75A, + 37866 - 11905: 0xE75B, + 37867 - 11905: 0xE75C, + 37868 - 11905: 0xE75D, + 37869 - 11905: 0xE75E, + 37870 - 11905: 0xE75F, + 37871 - 11905: 0xE760, + 37872 - 11905: 0xE761, + 37873 - 11905: 0xE762, + 37874 - 11905: 0xE763, + 37875 - 11905: 0xE764, + 37876 - 11905: 0xE765, + 37877 - 11905: 0xE766, + 37878 - 11905: 0xE767, + 37879 - 11905: 0xE768, + 37880 - 11905: 0xE769, + 37881 - 11905: 0xE76A, + 37882 - 11905: 0xE76B, + 37883 - 11905: 0xE76C, + 37884 - 11905: 0xE76D, + 37885 - 11905: 0xE76E, + 37886 - 11905: 0xE76F, + 37887 - 11905: 0xE770, + 37888 - 11905: 0xE771, + 37889 - 11905: 0xE772, + 37890 - 11905: 0xE773, + 37891 - 11905: 0xE774, + 37892 - 11905: 0xE775, + 37893 - 11905: 0xE776, + 37894 - 11905: 0xE777, + 37895 - 11905: 0xE778, + 37896 - 11905: 0xE779, + 37897 - 11905: 0xE77A, + 37898 - 11905: 0xE77B, + 37899 - 11905: 0xE77C, + 37900 - 11905: 0xE77D, + 37901 - 11905: 0xE77E, + 37902 - 11905: 0xE780, + 37903 - 11905: 0xE781, + 37904 - 11905: 0xE782, + 37905 - 11905: 0xE783, + 37906 - 11905: 0xE784, + 37907 - 11905: 0xE785, + 37908 - 11905: 0xE786, + 37909 - 11905: 0xE787, + 37910 - 11905: 0xE788, + 37911 - 11905: 0xE789, + 37912 - 11905: 0xE78A, + 37913 - 11905: 0xE78B, + 37914 - 11905: 0xE78C, + 37915 - 11905: 0xE78D, + 37916 - 11905: 0xE78E, + 37917 - 11905: 0xE78F, + 37918 - 11905: 0xE790, + 37919 - 11905: 0xE791, + 37920 - 11905: 0xE792, + 37921 - 11905: 0xE793, + 37922 - 11905: 0xE794, + 37923 - 11905: 0xE795, + 37924 - 11905: 0xE796, + 37925 - 11905: 0xE797, + 37926 - 11905: 0xE798, + 37927 - 11905: 0xE799, + 37928 - 11905: 0xE79A, + 37929 - 11905: 0xE79B, + 37930 - 11905: 0xE79C, + 37931 - 11905: 0xE79D, + 37932 - 11905: 0xE79E, + 37933 - 11905: 0xE79F, + 37934 - 11905: 0xE7A0, + 37935 - 11905: 0xE840, + 37936 - 11905: 0xE841, + 37937 - 11905: 0xE842, + 37938 - 11905: 0xE843, + 37939 - 11905: 0xE844, + 37940 - 11905: 0xE845, + 37941 - 11905: 0xE846, + 37942 - 11905: 0xE847, + 37943 - 11905: 0xE848, + 37944 - 11905: 0xE849, + 37945 - 11905: 0xE84A, + 37946 - 11905: 0xE84B, + 37947 - 11905: 0xE84C, + 37948 - 11905: 0xE84D, + 37949 - 11905: 0xE84E, + 37950 - 11905: 0xF6CD, + 37951 - 11905: 0xE84F, + 37952 - 11905: 0xE850, + 37953 - 11905: 0xE851, + 37954 - 11905: 0xE852, + 37955 - 11905: 0xE853, + 37956 - 11905: 0xE854, + 37957 - 11905: 0xE855, + 37958 - 11905: 0xE856, + 37959 - 11905: 0xE857, + 37960 - 11905: 0xE858, + 37961 - 11905: 0xE859, + 37962 - 11905: 0xE85A, + 37963 - 11905: 0xE85B, + 37964 - 11905: 0xE85C, + 37965 - 11905: 0xE85D, + 37966 - 11905: 0xE85E, + 37967 - 11905: 0xE85F, + 37968 - 11905: 0xE860, + 37969 - 11905: 0xE861, + 37970 - 11905: 0xE862, + 37971 - 11905: 0xE863, + 37972 - 11905: 0xE864, + 37973 - 11905: 0xE865, + 37974 - 11905: 0xE866, + 37975 - 11905: 0xE867, + 37976 - 11905: 0xE868, + 37977 - 11905: 0xE869, + 37978 - 11905: 0xE86A, + 37979 - 11905: 0xE86B, + 37980 - 11905: 0xE86C, + 37981 - 11905: 0xE86D, + 37982 - 11905: 0xE86E, + 37983 - 11905: 0xE86F, + 37984 - 11905: 0xE870, + 37985 - 11905: 0xE871, + 37986 - 11905: 0xE872, + 37987 - 11905: 0xE873, + 37988 - 11905: 0xE874, + 37989 - 11905: 0xE875, + 37990 - 11905: 0xE876, + 37991 - 11905: 0xE877, + 37992 - 11905: 0xE878, + 37993 - 11905: 0xE879, + 37994 - 11905: 0xE87A, + 37995 - 11905: 0xF6CE, + 37996 - 11905: 0xE87B, + 37997 - 11905: 0xE87C, + 37998 - 11905: 0xE87D, + 37999 - 11905: 0xE87E, + 38000 - 11905: 0xE880, + 38001 - 11905: 0xE881, + 38002 - 11905: 0xE882, + 38003 - 11905: 0xE883, + 38004 - 11905: 0xE884, + 38005 - 11905: 0xE885, + 38006 - 11905: 0xE886, + 38007 - 11905: 0xE887, + 38008 - 11905: 0xE888, + 38009 - 11905: 0xE889, + 38010 - 11905: 0xE88A, + 38011 - 11905: 0xE88B, + 38012 - 11905: 0xE88C, + 38013 - 11905: 0xE88D, + 38014 - 11905: 0xE88E, + 38015 - 11905: 0xE88F, + 38016 - 11905: 0xE890, + 38017 - 11905: 0xE891, + 38018 - 11905: 0xE892, + 38019 - 11905: 0xE893, + 38020 - 11905: 0xE894, + 38021 - 11905: 0xEEC4, + 38022 - 11905: 0xEEC5, + 38023 - 11905: 0xEEC6, + 38024 - 11905: 0xD5EB, + 38025 - 11905: 0xB6A4, + 38026 - 11905: 0xEEC8, + 38027 - 11905: 0xEEC7, + 38028 - 11905: 0xEEC9, + 38029 - 11905: 0xEECA, + 38030 - 11905: 0xC7A5, + 38031 - 11905: 0xEECB, + 38032 - 11905: 0xEECC, + 38033 - 11905: 0xE895, + 38034 - 11905: 0xB7B0, + 38035 - 11905: 0xB5F6, + 38036 - 11905: 0xEECD, + 38037 - 11905: 0xEECF, + 38038 - 11905: 0xE896, + 38039 - 11905: 0xEECE, + 38040 - 11905: 0xE897, + 38041 - 11905: 0xB8C6, + 38042 - 11905: 0xEED0, + 38043 - 11905: 0xEED1, + 38044 - 11905: 0xEED2, + 38045 - 11905: 0xB6DB, + 38046 - 11905: 0xB3AE, + 38047 - 11905: 0xD6D3, + 38048 - 11905: 0xC4C6, + 38049 - 11905: 0xB1B5, + 38050 - 11905: 0xB8D6, + 38051 - 11905: 0xEED3, + 38052 - 11905: 0xEED4, + 38053 - 11905: 0xD4BF, + 38054 - 11905: 0xC7D5, + 38055 - 11905: 0xBEFB, + 38056 - 11905: 0xCED9, + 38057 - 11905: 0xB9B3, + 38058 - 11905: 0xEED6, + 38059 - 11905: 0xEED5, + 38060 - 11905: 0xEED8, + 38061 - 11905: 0xEED7, + 38062 - 11905: 0xC5A5, + 38063 - 11905: 0xEED9, + 38064 - 11905: 0xEEDA, + 38065 - 11905: 0xC7AE, + 38066 - 11905: 0xEEDB, + 38067 - 11905: 0xC7AF, + 38068 - 11905: 0xEEDC, + 38069 - 11905: 0xB2A7, + 38070 - 11905: 0xEEDD, + 38071 - 11905: 0xEEDE, + 38072 - 11905: 0xEEDF, + 38073 - 11905: 0xEEE0, + 38074 - 11905: 0xEEE1, + 38075 - 11905: 0xD7EA, + 38076 - 11905: 0xEEE2, + 38077 - 11905: 0xEEE3, + 38078 - 11905: 0xBCD8, + 38079 - 11905: 0xEEE4, + 38080 - 11905: 0xD3CB, + 38081 - 11905: 0xCCFA, + 38082 - 11905: 0xB2AC, + 38083 - 11905: 0xC1E5, + 38084 - 11905: 0xEEE5, + 38085 - 11905: 0xC7A6, + 38086 - 11905: 0xC3AD, + 38087 - 11905: 0xE898, + 38088 - 11905: 0xEEE6, + 38089 - 11905: 0xEEE7, + 38090 - 11905: 0xEEE8, + 38091 - 11905: 0xEEE9, + 38092 - 11905: 0xEEEA, + 38093 - 11905: 0xEEEB, + 38094 - 11905: 0xEEEC, + 38095 - 11905: 0xE899, + 38096 - 11905: 0xEEED, + 38097 - 11905: 0xEEEE, + 38098 - 11905: 0xEEEF, + 38099 - 11905: 0xE89A, + 38100 - 11905: 0xE89B, + 38101 - 11905: 0xEEF0, + 38102 - 11905: 0xEEF1, + 38103 - 11905: 0xEEF2, + 38104 - 11905: 0xEEF4, + 38105 - 11905: 0xEEF3, + 38106 - 11905: 0xE89C, + 38107 - 11905: 0xEEF5, + 38108 - 11905: 0xCDAD, + 38109 - 11905: 0xC2C1, + 38110 - 11905: 0xEEF6, + 38111 - 11905: 0xEEF7, + 38112 - 11905: 0xEEF8, + 38113 - 11905: 0xD5A1, + 38114 - 11905: 0xEEF9, + 38115 - 11905: 0xCFB3, + 38116 - 11905: 0xEEFA, + 38117 - 11905: 0xEEFB, + 38118 - 11905: 0xE89D, + 38119 - 11905: 0xEEFC, + 38120 - 11905: 0xEEFD, + 38121 - 11905: 0xEFA1, + 38122 - 11905: 0xEEFE, + 38123 - 11905: 0xEFA2, + 38124 - 11905: 0xB8F5, + 38125 - 11905: 0xC3FA, + 38126 - 11905: 0xEFA3, + 38127 - 11905: 0xEFA4, + 38128 - 11905: 0xBDC2, + 38129 - 11905: 0xD2BF, + 38130 - 11905: 0xB2F9, + 38131 - 11905: 0xEFA5, + 38132 - 11905: 0xEFA6, + 38133 - 11905: 0xEFA7, + 38134 - 11905: 0xD2F8, + 38135 - 11905: 0xEFA8, + 38136 - 11905: 0xD6FD, + 38137 - 11905: 0xEFA9, + 38138 - 11905: 0xC6CC, + 38139 - 11905: 0xE89E, + 38140 - 11905: 0xEFAA, + 38141 - 11905: 0xEFAB, + 38142 - 11905: 0xC1B4, + 38143 - 11905: 0xEFAC, + 38144 - 11905: 0xCFFA, + 38145 - 11905: 0xCBF8, + 38146 - 11905: 0xEFAE, + 38147 - 11905: 0xEFAD, + 38148 - 11905: 0xB3FA, + 38149 - 11905: 0xB9F8, + 38150 - 11905: 0xEFAF, + 38151 - 11905: 0xEFB0, + 38152 - 11905: 0xD0E2, + 38153 - 11905: 0xEFB1, + 38154 - 11905: 0xEFB2, + 38155 - 11905: 0xB7E6, + 38156 - 11905: 0xD0BF, + 38157 - 11905: 0xEFB3, + 38158 - 11905: 0xEFB4, + 38159 - 11905: 0xEFB5, + 38160 - 11905: 0xC8F1, + 38161 - 11905: 0xCCE0, + 38162 - 11905: 0xEFB6, + 38163 - 11905: 0xEFB7, + 38164 - 11905: 0xEFB8, + 38165 - 11905: 0xEFB9, + 38166 - 11905: 0xEFBA, + 38167 - 11905: 0xD5E0, + 38168 - 11905: 0xEFBB, + 38169 - 11905: 0xB4ED, + 38170 - 11905: 0xC3AA, + 38171 - 11905: 0xEFBC, + 38172 - 11905: 0xE89F, + 38173 - 11905: 0xEFBD, + 38174 - 11905: 0xEFBE, + 38175 - 11905: 0xEFBF, + 38176 - 11905: 0xE8A0, + 38177 - 11905: 0xCEFD, + 38178 - 11905: 0xEFC0, + 38179 - 11905: 0xC2E0, + 38180 - 11905: 0xB4B8, + 38181 - 11905: 0xD7B6, + 38182 - 11905: 0xBDF5, + 38183 - 11905: 0xE940, + 38184 - 11905: 0xCFC7, + 38185 - 11905: 0xEFC3, + 38186 - 11905: 0xEFC1, + 38187 - 11905: 0xEFC2, + 38188 - 11905: 0xEFC4, + 38189 - 11905: 0xB6A7, + 38190 - 11905: 0xBCFC, + 38191 - 11905: 0xBEE2, + 38192 - 11905: 0xC3CC, + 38193 - 11905: 0xEFC5, + 38194 - 11905: 0xEFC6, + 38195 - 11905: 0xE941, + 38196 - 11905: 0xEFC7, + 38197 - 11905: 0xEFCF, + 38198 - 11905: 0xEFC8, + 38199 - 11905: 0xEFC9, + 38200 - 11905: 0xEFCA, + 38201 - 11905: 0xC7C2, + 38202 - 11905: 0xEFF1, + 38203 - 11905: 0xB6CD, + 38204 - 11905: 0xEFCB, + 38205 - 11905: 0xE942, + 38206 - 11905: 0xEFCC, + 38207 - 11905: 0xEFCD, + 38208 - 11905: 0xB6C6, + 38209 - 11905: 0xC3BE, + 38210 - 11905: 0xEFCE, + 38211 - 11905: 0xE943, + 38212 - 11905: 0xEFD0, + 38213 - 11905: 0xEFD1, + 38214 - 11905: 0xEFD2, + 38215 - 11905: 0xD5F2, + 38216 - 11905: 0xE944, + 38217 - 11905: 0xEFD3, + 38218 - 11905: 0xC4F7, + 38219 - 11905: 0xE945, + 38220 - 11905: 0xEFD4, + 38221 - 11905: 0xC4F8, + 38222 - 11905: 0xEFD5, + 38223 - 11905: 0xEFD6, + 38224 - 11905: 0xB8E4, + 38225 - 11905: 0xB0F7, + 38226 - 11905: 0xEFD7, + 38227 - 11905: 0xEFD8, + 38228 - 11905: 0xEFD9, + 38229 - 11905: 0xE946, + 38230 - 11905: 0xEFDA, + 38231 - 11905: 0xEFDB, + 38232 - 11905: 0xEFDC, + 38233 - 11905: 0xEFDD, + 38234 - 11905: 0xE947, + 38235 - 11905: 0xEFDE, + 38236 - 11905: 0xBEB5, + 38237 - 11905: 0xEFE1, + 38238 - 11905: 0xEFDF, + 38239 - 11905: 0xEFE0, + 38240 - 11905: 0xE948, + 38241 - 11905: 0xEFE2, + 38242 - 11905: 0xEFE3, + 38243 - 11905: 0xC1CD, + 38244 - 11905: 0xEFE4, + 38245 - 11905: 0xEFE5, + 38246 - 11905: 0xEFE6, + 38247 - 11905: 0xEFE7, + 38248 - 11905: 0xEFE8, + 38249 - 11905: 0xEFE9, + 38250 - 11905: 0xEFEA, + 38251 - 11905: 0xEFEB, + 38252 - 11905: 0xEFEC, + 38253 - 11905: 0xC0D8, + 38254 - 11905: 0xE949, + 38255 - 11905: 0xEFED, + 38256 - 11905: 0xC1AD, + 38257 - 11905: 0xEFEE, + 38258 - 11905: 0xEFEF, + 38259 - 11905: 0xEFF0, + 38260 - 11905: 0xE94A, + 38261 - 11905: 0xE94B, + 38262 - 11905: 0xCFE2, + 38263 - 11905: 0xE94C, + 38264 - 11905: 0xE94D, + 38265 - 11905: 0xE94E, + 38266 - 11905: 0xE94F, + 38267 - 11905: 0xE950, + 38268 - 11905: 0xE951, + 38269 - 11905: 0xE952, + 38270 - 11905: 0xE953, + 38271 - 11905: 0xB3A4, + 38272 - 11905: 0xE954, + 38273 - 11905: 0xE955, + 38274 - 11905: 0xE956, + 38275 - 11905: 0xE957, + 38276 - 11905: 0xE958, + 38277 - 11905: 0xE959, + 38278 - 11905: 0xE95A, + 38279 - 11905: 0xE95B, + 38280 - 11905: 0xE95C, + 38281 - 11905: 0xE95D, + 38282 - 11905: 0xE95E, + 38283 - 11905: 0xE95F, + 38284 - 11905: 0xE960, + 38285 - 11905: 0xE961, + 38286 - 11905: 0xE962, + 38287 - 11905: 0xE963, + 38288 - 11905: 0xE964, + 38289 - 11905: 0xE965, + 38290 - 11905: 0xE966, + 38291 - 11905: 0xE967, + 38292 - 11905: 0xE968, + 38293 - 11905: 0xE969, + 38294 - 11905: 0xE96A, + 38295 - 11905: 0xE96B, + 38296 - 11905: 0xE96C, + 38297 - 11905: 0xE96D, + 38298 - 11905: 0xE96E, + 38299 - 11905: 0xE96F, + 38300 - 11905: 0xE970, + 38301 - 11905: 0xE971, + 38302 - 11905: 0xE972, + 38303 - 11905: 0xE973, + 38304 - 11905: 0xE974, + 38305 - 11905: 0xE975, + 38306 - 11905: 0xE976, + 38307 - 11905: 0xE977, + 38308 - 11905: 0xE978, + 38309 - 11905: 0xE979, + 38310 - 11905: 0xE97A, + 38311 - 11905: 0xE97B, + 38312 - 11905: 0xE97C, + 38313 - 11905: 0xE97D, + 38314 - 11905: 0xE97E, + 38315 - 11905: 0xE980, + 38316 - 11905: 0xE981, + 38317 - 11905: 0xE982, + 38318 - 11905: 0xE983, + 38319 - 11905: 0xE984, + 38320 - 11905: 0xE985, + 38321 - 11905: 0xE986, + 38322 - 11905: 0xE987, + 38323 - 11905: 0xE988, + 38324 - 11905: 0xE989, + 38325 - 11905: 0xE98A, + 38326 - 11905: 0xE98B, + 38327 - 11905: 0xE98C, + 38328 - 11905: 0xE98D, + 38329 - 11905: 0xE98E, + 38330 - 11905: 0xE98F, + 38331 - 11905: 0xE990, + 38332 - 11905: 0xE991, + 38333 - 11905: 0xE992, + 38334 - 11905: 0xE993, + 38335 - 11905: 0xE994, + 38336 - 11905: 0xE995, + 38337 - 11905: 0xE996, + 38338 - 11905: 0xE997, + 38339 - 11905: 0xE998, + 38340 - 11905: 0xE999, + 38341 - 11905: 0xE99A, + 38342 - 11905: 0xE99B, + 38343 - 11905: 0xE99C, + 38344 - 11905: 0xE99D, + 38345 - 11905: 0xE99E, + 38346 - 11905: 0xE99F, + 38347 - 11905: 0xE9A0, + 38348 - 11905: 0xEA40, + 38349 - 11905: 0xEA41, + 38350 - 11905: 0xEA42, + 38351 - 11905: 0xEA43, + 38352 - 11905: 0xEA44, + 38353 - 11905: 0xEA45, + 38354 - 11905: 0xEA46, + 38355 - 11905: 0xEA47, + 38356 - 11905: 0xEA48, + 38357 - 11905: 0xEA49, + 38358 - 11905: 0xEA4A, + 38359 - 11905: 0xEA4B, + 38360 - 11905: 0xEA4C, + 38361 - 11905: 0xEA4D, + 38362 - 11905: 0xEA4E, + 38363 - 11905: 0xEA4F, + 38364 - 11905: 0xEA50, + 38365 - 11905: 0xEA51, + 38366 - 11905: 0xEA52, + 38367 - 11905: 0xEA53, + 38368 - 11905: 0xEA54, + 38369 - 11905: 0xEA55, + 38370 - 11905: 0xEA56, + 38371 - 11905: 0xEA57, + 38372 - 11905: 0xEA58, + 38373 - 11905: 0xEA59, + 38374 - 11905: 0xEA5A, + 38375 - 11905: 0xEA5B, + 38376 - 11905: 0xC3C5, + 38377 - 11905: 0xE3C5, + 38378 - 11905: 0xC9C1, + 38379 - 11905: 0xE3C6, + 38380 - 11905: 0xEA5C, + 38381 - 11905: 0xB1D5, + 38382 - 11905: 0xCECA, + 38383 - 11905: 0xB4B3, + 38384 - 11905: 0xC8F2, + 38385 - 11905: 0xE3C7, + 38386 - 11905: 0xCFD0, + 38387 - 11905: 0xE3C8, + 38388 - 11905: 0xBCE4, + 38389 - 11905: 0xE3C9, + 38390 - 11905: 0xE3CA, + 38391 - 11905: 0xC3C6, + 38392 - 11905: 0xD5A2, + 38393 - 11905: 0xC4D6, + 38394 - 11905: 0xB9EB, + 38395 - 11905: 0xCEC5, + 38396 - 11905: 0xE3CB, + 38397 - 11905: 0xC3F6, + 38398 - 11905: 0xE3CC, + 38399 - 11905: 0xEA5D, + 38400 - 11905: 0xB7A7, + 38401 - 11905: 0xB8F3, + 38402 - 11905: 0xBAD2, + 38403 - 11905: 0xE3CD, + 38404 - 11905: 0xE3CE, + 38405 - 11905: 0xD4C4, + 38406 - 11905: 0xE3CF, + 38407 - 11905: 0xEA5E, + 38408 - 11905: 0xE3D0, + 38409 - 11905: 0xD1CB, + 38410 - 11905: 0xE3D1, + 38411 - 11905: 0xE3D2, + 38412 - 11905: 0xE3D3, + 38413 - 11905: 0xE3D4, + 38414 - 11905: 0xD1D6, + 38415 - 11905: 0xE3D5, + 38416 - 11905: 0xB2FB, + 38417 - 11905: 0xC0BB, + 38418 - 11905: 0xE3D6, + 38419 - 11905: 0xEA5F, + 38420 - 11905: 0xC0AB, + 38421 - 11905: 0xE3D7, + 38422 - 11905: 0xE3D8, + 38423 - 11905: 0xE3D9, + 38424 - 11905: 0xEA60, + 38425 - 11905: 0xE3DA, + 38426 - 11905: 0xE3DB, + 38427 - 11905: 0xEA61, + 38428 - 11905: 0xB8B7, + 38429 - 11905: 0xDAE2, + 38430 - 11905: 0xEA62, + 38431 - 11905: 0xB6D3, + 38432 - 11905: 0xEA63, + 38433 - 11905: 0xDAE4, + 38434 - 11905: 0xDAE3, + 38435 - 11905: 0xEA64, + 38436 - 11905: 0xEA65, + 38437 - 11905: 0xEA66, + 38438 - 11905: 0xEA67, + 38439 - 11905: 0xEA68, + 38440 - 11905: 0xEA69, + 38441 - 11905: 0xEA6A, + 38442 - 11905: 0xDAE6, + 38443 - 11905: 0xEA6B, + 38444 - 11905: 0xEA6C, + 38445 - 11905: 0xEA6D, + 38446 - 11905: 0xC8EE, + 38447 - 11905: 0xEA6E, + 38448 - 11905: 0xEA6F, + 38449 - 11905: 0xDAE5, + 38450 - 11905: 0xB7C0, + 38451 - 11905: 0xD1F4, + 38452 - 11905: 0xD2F5, + 38453 - 11905: 0xD5F3, + 38454 - 11905: 0xBDD7, + 38455 - 11905: 0xEA70, + 38456 - 11905: 0xEA71, + 38457 - 11905: 0xEA72, + 38458 - 11905: 0xEA73, + 38459 - 11905: 0xD7E8, + 38460 - 11905: 0xDAE8, + 38461 - 11905: 0xDAE7, + 38462 - 11905: 0xEA74, + 38463 - 11905: 0xB0A2, + 38464 - 11905: 0xCDD3, + 38465 - 11905: 0xEA75, + 38466 - 11905: 0xDAE9, + 38467 - 11905: 0xEA76, + 38468 - 11905: 0xB8BD, + 38469 - 11905: 0xBCCA, + 38470 - 11905: 0xC2BD, + 38471 - 11905: 0xC2A4, + 38472 - 11905: 0xB3C2, + 38473 - 11905: 0xDAEA, + 38474 - 11905: 0xEA77, + 38475 - 11905: 0xC2AA, + 38476 - 11905: 0xC4B0, + 38477 - 11905: 0xBDB5, + 38478 - 11905: 0xEA78, + 38479 - 11905: 0xEA79, + 38480 - 11905: 0xCFDE, + 38481 - 11905: 0xEA7A, + 38482 - 11905: 0xEA7B, + 38483 - 11905: 0xEA7C, + 38484 - 11905: 0xDAEB, + 38485 - 11905: 0xC9C2, + 38486 - 11905: 0xEA7D, + 38487 - 11905: 0xEA7E, + 38488 - 11905: 0xEA80, + 38489 - 11905: 0xEA81, + 38490 - 11905: 0xEA82, + 38491 - 11905: 0xB1DD, + 38492 - 11905: 0xEA83, + 38493 - 11905: 0xEA84, + 38494 - 11905: 0xEA85, + 38495 - 11905: 0xDAEC, + 38496 - 11905: 0xEA86, + 38497 - 11905: 0xB6B8, + 38498 - 11905: 0xD4BA, + 38499 - 11905: 0xEA87, + 38500 - 11905: 0xB3FD, + 38501 - 11905: 0xEA88, + 38502 - 11905: 0xEA89, + 38503 - 11905: 0xDAED, + 38504 - 11905: 0xD4C9, + 38505 - 11905: 0xCFD5, + 38506 - 11905: 0xC5E3, + 38507 - 11905: 0xEA8A, + 38508 - 11905: 0xDAEE, + 38509 - 11905: 0xEA8B, + 38510 - 11905: 0xEA8C, + 38511 - 11905: 0xEA8D, + 38512 - 11905: 0xEA8E, + 38513 - 11905: 0xEA8F, + 38514 - 11905: 0xDAEF, + 38515 - 11905: 0xEA90, + 38516 - 11905: 0xDAF0, + 38517 - 11905: 0xC1EA, + 38518 - 11905: 0xCCD5, + 38519 - 11905: 0xCFDD, + 38520 - 11905: 0xEA91, + 38521 - 11905: 0xEA92, + 38522 - 11905: 0xEA93, + 38523 - 11905: 0xEA94, + 38524 - 11905: 0xEA95, + 38525 - 11905: 0xEA96, + 38526 - 11905: 0xEA97, + 38527 - 11905: 0xEA98, + 38528 - 11905: 0xEA99, + 38529 - 11905: 0xEA9A, + 38530 - 11905: 0xEA9B, + 38531 - 11905: 0xEA9C, + 38532 - 11905: 0xEA9D, + 38533 - 11905: 0xD3E7, + 38534 - 11905: 0xC2A1, + 38535 - 11905: 0xEA9E, + 38536 - 11905: 0xDAF1, + 38537 - 11905: 0xEA9F, + 38538 - 11905: 0xEAA0, + 38539 - 11905: 0xCBE5, + 38540 - 11905: 0xEB40, + 38541 - 11905: 0xDAF2, + 38542 - 11905: 0xEB41, + 38543 - 11905: 0xCBE6, + 38544 - 11905: 0xD2FE, + 38545 - 11905: 0xEB42, + 38546 - 11905: 0xEB43, + 38547 - 11905: 0xEB44, + 38548 - 11905: 0xB8F4, + 38549 - 11905: 0xEB45, + 38550 - 11905: 0xEB46, + 38551 - 11905: 0xDAF3, + 38552 - 11905: 0xB0AF, + 38553 - 11905: 0xCFB6, + 38554 - 11905: 0xEB47, + 38555 - 11905: 0xEB48, + 38556 - 11905: 0xD5CF, + 38557 - 11905: 0xEB49, + 38558 - 11905: 0xEB4A, + 38559 - 11905: 0xEB4B, + 38560 - 11905: 0xEB4C, + 38561 - 11905: 0xEB4D, + 38562 - 11905: 0xEB4E, + 38563 - 11905: 0xEB4F, + 38564 - 11905: 0xEB50, + 38565 - 11905: 0xEB51, + 38566 - 11905: 0xEB52, + 38567 - 11905: 0xCBED, + 38568 - 11905: 0xEB53, + 38569 - 11905: 0xEB54, + 38570 - 11905: 0xEB55, + 38571 - 11905: 0xEB56, + 38572 - 11905: 0xEB57, + 38573 - 11905: 0xEB58, + 38574 - 11905: 0xEB59, + 38575 - 11905: 0xEB5A, + 38576 - 11905: 0xDAF4, + 38577 - 11905: 0xEB5B, + 38578 - 11905: 0xEB5C, + 38579 - 11905: 0xE3C4, + 38580 - 11905: 0xEB5D, + 38581 - 11905: 0xEB5E, + 38582 - 11905: 0xC1A5, + 38583 - 11905: 0xEB5F, + 38584 - 11905: 0xEB60, + 38585 - 11905: 0xF6BF, + 38586 - 11905: 0xEB61, + 38587 - 11905: 0xEB62, + 38588 - 11905: 0xF6C0, + 38589 - 11905: 0xF6C1, + 38590 - 11905: 0xC4D1, + 38591 - 11905: 0xEB63, + 38592 - 11905: 0xC8B8, + 38593 - 11905: 0xD1E3, + 38594 - 11905: 0xEB64, + 38595 - 11905: 0xEB65, + 38596 - 11905: 0xD0DB, + 38597 - 11905: 0xD1C5, + 38598 - 11905: 0xBCAF, + 38599 - 11905: 0xB9CD, + 38600 - 11905: 0xEB66, + 38601 - 11905: 0xEFF4, + 38602 - 11905: 0xEB67, + 38603 - 11905: 0xEB68, + 38604 - 11905: 0xB4C6, + 38605 - 11905: 0xD3BA, + 38606 - 11905: 0xF6C2, + 38607 - 11905: 0xB3FB, + 38608 - 11905: 0xEB69, + 38609 - 11905: 0xEB6A, + 38610 - 11905: 0xF6C3, + 38611 - 11905: 0xEB6B, + 38612 - 11905: 0xEB6C, + 38613 - 11905: 0xB5F1, + 38614 - 11905: 0xEB6D, + 38615 - 11905: 0xEB6E, + 38616 - 11905: 0xEB6F, + 38617 - 11905: 0xEB70, + 38618 - 11905: 0xEB71, + 38619 - 11905: 0xEB72, + 38620 - 11905: 0xEB73, + 38621 - 11905: 0xEB74, + 38622 - 11905: 0xEB75, + 38623 - 11905: 0xEB76, + 38624 - 11905: 0xF6C5, + 38625 - 11905: 0xEB77, + 38626 - 11905: 0xEB78, + 38627 - 11905: 0xEB79, + 38628 - 11905: 0xEB7A, + 38629 - 11905: 0xEB7B, + 38630 - 11905: 0xEB7C, + 38631 - 11905: 0xEB7D, + 38632 - 11905: 0xD3EA, + 38633 - 11905: 0xF6A7, + 38634 - 11905: 0xD1A9, + 38635 - 11905: 0xEB7E, + 38636 - 11905: 0xEB80, + 38637 - 11905: 0xEB81, + 38638 - 11905: 0xEB82, + 38639 - 11905: 0xF6A9, + 38640 - 11905: 0xEB83, + 38641 - 11905: 0xEB84, + 38642 - 11905: 0xEB85, + 38643 - 11905: 0xF6A8, + 38644 - 11905: 0xEB86, + 38645 - 11905: 0xEB87, + 38646 - 11905: 0xC1E3, + 38647 - 11905: 0xC0D7, + 38648 - 11905: 0xEB88, + 38649 - 11905: 0xB1A2, + 38650 - 11905: 0xEB89, + 38651 - 11905: 0xEB8A, + 38652 - 11905: 0xEB8B, + 38653 - 11905: 0xEB8C, + 38654 - 11905: 0xCEED, + 38655 - 11905: 0xEB8D, + 38656 - 11905: 0xD0E8, + 38657 - 11905: 0xF6AB, + 38658 - 11905: 0xEB8E, + 38659 - 11905: 0xEB8F, + 38660 - 11905: 0xCFF6, + 38661 - 11905: 0xEB90, + 38662 - 11905: 0xF6AA, + 38663 - 11905: 0xD5F0, + 38664 - 11905: 0xF6AC, + 38665 - 11905: 0xC3B9, + 38666 - 11905: 0xEB91, + 38667 - 11905: 0xEB92, + 38668 - 11905: 0xEB93, + 38669 - 11905: 0xBBF4, + 38670 - 11905: 0xF6AE, + 38671 - 11905: 0xF6AD, + 38672 - 11905: 0xEB94, + 38673 - 11905: 0xEB95, + 38674 - 11905: 0xEB96, + 38675 - 11905: 0xC4DE, + 38676 - 11905: 0xEB97, + 38677 - 11905: 0xEB98, + 38678 - 11905: 0xC1D8, + 38679 - 11905: 0xEB99, + 38680 - 11905: 0xEB9A, + 38681 - 11905: 0xEB9B, + 38682 - 11905: 0xEB9C, + 38683 - 11905: 0xEB9D, + 38684 - 11905: 0xCBAA, + 38685 - 11905: 0xEB9E, + 38686 - 11905: 0xCFBC, + 38687 - 11905: 0xEB9F, + 38688 - 11905: 0xEBA0, + 38689 - 11905: 0xEC40, + 38690 - 11905: 0xEC41, + 38691 - 11905: 0xEC42, + 38692 - 11905: 0xEC43, + 38693 - 11905: 0xEC44, + 38694 - 11905: 0xEC45, + 38695 - 11905: 0xEC46, + 38696 - 11905: 0xEC47, + 38697 - 11905: 0xEC48, + 38698 - 11905: 0xF6AF, + 38699 - 11905: 0xEC49, + 38700 - 11905: 0xEC4A, + 38701 - 11905: 0xF6B0, + 38702 - 11905: 0xEC4B, + 38703 - 11905: 0xEC4C, + 38704 - 11905: 0xF6B1, + 38705 - 11905: 0xEC4D, + 38706 - 11905: 0xC2B6, + 38707 - 11905: 0xEC4E, + 38708 - 11905: 0xEC4F, + 38709 - 11905: 0xEC50, + 38710 - 11905: 0xEC51, + 38711 - 11905: 0xEC52, + 38712 - 11905: 0xB0D4, + 38713 - 11905: 0xC5F9, + 38714 - 11905: 0xEC53, + 38715 - 11905: 0xEC54, + 38716 - 11905: 0xEC55, + 38717 - 11905: 0xEC56, + 38718 - 11905: 0xF6B2, + 38719 - 11905: 0xEC57, + 38720 - 11905: 0xEC58, + 38721 - 11905: 0xEC59, + 38722 - 11905: 0xEC5A, + 38723 - 11905: 0xEC5B, + 38724 - 11905: 0xEC5C, + 38725 - 11905: 0xEC5D, + 38726 - 11905: 0xEC5E, + 38727 - 11905: 0xEC5F, + 38728 - 11905: 0xEC60, + 38729 - 11905: 0xEC61, + 38730 - 11905: 0xEC62, + 38731 - 11905: 0xEC63, + 38732 - 11905: 0xEC64, + 38733 - 11905: 0xEC65, + 38734 - 11905: 0xEC66, + 38735 - 11905: 0xEC67, + 38736 - 11905: 0xEC68, + 38737 - 11905: 0xEC69, + 38738 - 11905: 0xC7E0, + 38739 - 11905: 0xF6A6, + 38740 - 11905: 0xEC6A, + 38741 - 11905: 0xEC6B, + 38742 - 11905: 0xBEB8, + 38743 - 11905: 0xEC6C, + 38744 - 11905: 0xEC6D, + 38745 - 11905: 0xBEB2, + 38746 - 11905: 0xEC6E, + 38747 - 11905: 0xB5E5, + 38748 - 11905: 0xEC6F, + 38749 - 11905: 0xEC70, + 38750 - 11905: 0xB7C7, + 38751 - 11905: 0xEC71, + 38752 - 11905: 0xBFBF, + 38753 - 11905: 0xC3D2, + 38754 - 11905: 0xC3E6, + 38755 - 11905: 0xEC72, + 38756 - 11905: 0xEC73, + 38757 - 11905: 0xD8CC, + 38758 - 11905: 0xEC74, + 38759 - 11905: 0xEC75, + 38760 - 11905: 0xEC76, + 38761 - 11905: 0xB8EF, + 38762 - 11905: 0xEC77, + 38763 - 11905: 0xEC78, + 38764 - 11905: 0xEC79, + 38765 - 11905: 0xEC7A, + 38766 - 11905: 0xEC7B, + 38767 - 11905: 0xEC7C, + 38768 - 11905: 0xEC7D, + 38769 - 11905: 0xEC7E, + 38770 - 11905: 0xEC80, + 38771 - 11905: 0xBDF9, + 38772 - 11905: 0xD1A5, + 38773 - 11905: 0xEC81, + 38774 - 11905: 0xB0D0, + 38775 - 11905: 0xEC82, + 38776 - 11905: 0xEC83, + 38777 - 11905: 0xEC84, + 38778 - 11905: 0xEC85, + 38779 - 11905: 0xEC86, + 38780 - 11905: 0xF7B0, + 38781 - 11905: 0xEC87, + 38782 - 11905: 0xEC88, + 38783 - 11905: 0xEC89, + 38784 - 11905: 0xEC8A, + 38785 - 11905: 0xEC8B, + 38786 - 11905: 0xEC8C, + 38787 - 11905: 0xEC8D, + 38788 - 11905: 0xEC8E, + 38789 - 11905: 0xF7B1, + 38790 - 11905: 0xEC8F, + 38791 - 11905: 0xEC90, + 38792 - 11905: 0xEC91, + 38793 - 11905: 0xEC92, + 38794 - 11905: 0xEC93, + 38795 - 11905: 0xD0AC, + 38796 - 11905: 0xEC94, + 38797 - 11905: 0xB0B0, + 38798 - 11905: 0xEC95, + 38799 - 11905: 0xEC96, + 38800 - 11905: 0xEC97, + 38801 - 11905: 0xF7B2, + 38802 - 11905: 0xF7B3, + 38803 - 11905: 0xEC98, + 38804 - 11905: 0xF7B4, + 38805 - 11905: 0xEC99, + 38806 - 11905: 0xEC9A, + 38807 - 11905: 0xEC9B, + 38808 - 11905: 0xC7CA, + 38809 - 11905: 0xEC9C, + 38810 - 11905: 0xEC9D, + 38811 - 11905: 0xEC9E, + 38812 - 11905: 0xEC9F, + 38813 - 11905: 0xECA0, + 38814 - 11905: 0xED40, + 38815 - 11905: 0xED41, + 38816 - 11905: 0xBECF, + 38817 - 11905: 0xED42, + 38818 - 11905: 0xED43, + 38819 - 11905: 0xF7B7, + 38820 - 11905: 0xED44, + 38821 - 11905: 0xED45, + 38822 - 11905: 0xED46, + 38823 - 11905: 0xED47, + 38824 - 11905: 0xED48, + 38825 - 11905: 0xED49, + 38826 - 11905: 0xED4A, + 38827 - 11905: 0xF7B6, + 38828 - 11905: 0xED4B, + 38829 - 11905: 0xB1DE, + 38830 - 11905: 0xED4C, + 38831 - 11905: 0xF7B5, + 38832 - 11905: 0xED4D, + 38833 - 11905: 0xED4E, + 38834 - 11905: 0xF7B8, + 38835 - 11905: 0xED4F, + 38836 - 11905: 0xF7B9, + 38837 - 11905: 0xED50, + 38838 - 11905: 0xED51, + 38839 - 11905: 0xED52, + 38840 - 11905: 0xED53, + 38841 - 11905: 0xED54, + 38842 - 11905: 0xED55, + 38843 - 11905: 0xED56, + 38844 - 11905: 0xED57, + 38845 - 11905: 0xED58, + 38846 - 11905: 0xED59, + 38847 - 11905: 0xED5A, + 38848 - 11905: 0xED5B, + 38849 - 11905: 0xED5C, + 38850 - 11905: 0xED5D, + 38851 - 11905: 0xED5E, + 38852 - 11905: 0xED5F, + 38853 - 11905: 0xED60, + 38854 - 11905: 0xED61, + 38855 - 11905: 0xED62, + 38856 - 11905: 0xED63, + 38857 - 11905: 0xED64, + 38858 - 11905: 0xED65, + 38859 - 11905: 0xED66, + 38860 - 11905: 0xED67, + 38861 - 11905: 0xED68, + 38862 - 11905: 0xED69, + 38863 - 11905: 0xED6A, + 38864 - 11905: 0xED6B, + 38865 - 11905: 0xED6C, + 38866 - 11905: 0xED6D, + 38867 - 11905: 0xED6E, + 38868 - 11905: 0xED6F, + 38869 - 11905: 0xED70, + 38870 - 11905: 0xED71, + 38871 - 11905: 0xED72, + 38872 - 11905: 0xED73, + 38873 - 11905: 0xED74, + 38874 - 11905: 0xED75, + 38875 - 11905: 0xED76, + 38876 - 11905: 0xED77, + 38877 - 11905: 0xED78, + 38878 - 11905: 0xED79, + 38879 - 11905: 0xED7A, + 38880 - 11905: 0xED7B, + 38881 - 11905: 0xED7C, + 38882 - 11905: 0xED7D, + 38883 - 11905: 0xED7E, + 38884 - 11905: 0xED80, + 38885 - 11905: 0xED81, + 38886 - 11905: 0xCEA4, + 38887 - 11905: 0xC8CD, + 38888 - 11905: 0xED82, + 38889 - 11905: 0xBAAB, + 38890 - 11905: 0xE8B8, + 38891 - 11905: 0xE8B9, + 38892 - 11905: 0xE8BA, + 38893 - 11905: 0xBEC2, + 38894 - 11905: 0xED83, + 38895 - 11905: 0xED84, + 38896 - 11905: 0xED85, + 38897 - 11905: 0xED86, + 38898 - 11905: 0xED87, + 38899 - 11905: 0xD2F4, + 38900 - 11905: 0xED88, + 38901 - 11905: 0xD4CF, + 38902 - 11905: 0xC9D8, + 38903 - 11905: 0xED89, + 38904 - 11905: 0xED8A, + 38905 - 11905: 0xED8B, + 38906 - 11905: 0xED8C, + 38907 - 11905: 0xED8D, + 38908 - 11905: 0xED8E, + 38909 - 11905: 0xED8F, + 38910 - 11905: 0xED90, + 38911 - 11905: 0xED91, + 38912 - 11905: 0xED92, + 38913 - 11905: 0xED93, + 38914 - 11905: 0xED94, + 38915 - 11905: 0xED95, + 38916 - 11905: 0xED96, + 38917 - 11905: 0xED97, + 38918 - 11905: 0xED98, + 38919 - 11905: 0xED99, + 38920 - 11905: 0xED9A, + 38921 - 11905: 0xED9B, + 38922 - 11905: 0xED9C, + 38923 - 11905: 0xED9D, + 38924 - 11905: 0xED9E, + 38925 - 11905: 0xED9F, + 38926 - 11905: 0xEDA0, + 38927 - 11905: 0xEE40, + 38928 - 11905: 0xEE41, + 38929 - 11905: 0xEE42, + 38930 - 11905: 0xEE43, + 38931 - 11905: 0xEE44, + 38932 - 11905: 0xEE45, + 38933 - 11905: 0xEE46, + 38934 - 11905: 0xEE47, + 38935 - 11905: 0xEE48, + 38936 - 11905: 0xEE49, + 38937 - 11905: 0xEE4A, + 38938 - 11905: 0xEE4B, + 38939 - 11905: 0xEE4C, + 38940 - 11905: 0xEE4D, + 38941 - 11905: 0xEE4E, + 38942 - 11905: 0xEE4F, + 38943 - 11905: 0xEE50, + 38944 - 11905: 0xEE51, + 38945 - 11905: 0xEE52, + 38946 - 11905: 0xEE53, + 38947 - 11905: 0xEE54, + 38948 - 11905: 0xEE55, + 38949 - 11905: 0xEE56, + 38950 - 11905: 0xEE57, + 38951 - 11905: 0xEE58, + 38952 - 11905: 0xEE59, + 38953 - 11905: 0xEE5A, + 38954 - 11905: 0xEE5B, + 38955 - 11905: 0xEE5C, + 38956 - 11905: 0xEE5D, + 38957 - 11905: 0xEE5E, + 38958 - 11905: 0xEE5F, + 38959 - 11905: 0xEE60, + 38960 - 11905: 0xEE61, + 38961 - 11905: 0xEE62, + 38962 - 11905: 0xEE63, + 38963 - 11905: 0xEE64, + 38964 - 11905: 0xEE65, + 38965 - 11905: 0xEE66, + 38966 - 11905: 0xEE67, + 38967 - 11905: 0xEE68, + 38968 - 11905: 0xEE69, + 38969 - 11905: 0xEE6A, + 38970 - 11905: 0xEE6B, + 38971 - 11905: 0xEE6C, + 38972 - 11905: 0xEE6D, + 38973 - 11905: 0xEE6E, + 38974 - 11905: 0xEE6F, + 38975 - 11905: 0xEE70, + 38976 - 11905: 0xEE71, + 38977 - 11905: 0xEE72, + 38978 - 11905: 0xEE73, + 38979 - 11905: 0xEE74, + 38980 - 11905: 0xEE75, + 38981 - 11905: 0xEE76, + 38982 - 11905: 0xEE77, + 38983 - 11905: 0xEE78, + 38984 - 11905: 0xEE79, + 38985 - 11905: 0xEE7A, + 38986 - 11905: 0xEE7B, + 38987 - 11905: 0xEE7C, + 38988 - 11905: 0xEE7D, + 38989 - 11905: 0xEE7E, + 38990 - 11905: 0xEE80, + 38991 - 11905: 0xEE81, + 38992 - 11905: 0xEE82, + 38993 - 11905: 0xEE83, + 38994 - 11905: 0xEE84, + 38995 - 11905: 0xEE85, + 38996 - 11905: 0xEE86, + 38997 - 11905: 0xEE87, + 38998 - 11905: 0xEE88, + 38999 - 11905: 0xEE89, + 39000 - 11905: 0xEE8A, + 39001 - 11905: 0xEE8B, + 39002 - 11905: 0xEE8C, + 39003 - 11905: 0xEE8D, + 39004 - 11905: 0xEE8E, + 39005 - 11905: 0xEE8F, + 39006 - 11905: 0xEE90, + 39007 - 11905: 0xEE91, + 39008 - 11905: 0xEE92, + 39009 - 11905: 0xEE93, + 39010 - 11905: 0xEE94, + 39011 - 11905: 0xEE95, + 39012 - 11905: 0xEE96, + 39013 - 11905: 0xEE97, + 39014 - 11905: 0xEE98, + 39015 - 11905: 0xEE99, + 39016 - 11905: 0xEE9A, + 39017 - 11905: 0xEE9B, + 39018 - 11905: 0xEE9C, + 39019 - 11905: 0xEE9D, + 39020 - 11905: 0xEE9E, + 39021 - 11905: 0xEE9F, + 39022 - 11905: 0xEEA0, + 39023 - 11905: 0xEF40, + 39024 - 11905: 0xEF41, + 39025 - 11905: 0xEF42, + 39026 - 11905: 0xEF43, + 39027 - 11905: 0xEF44, + 39028 - 11905: 0xEF45, + 39029 - 11905: 0xD2B3, + 39030 - 11905: 0xB6A5, + 39031 - 11905: 0xC7EA, + 39032 - 11905: 0xF1FC, + 39033 - 11905: 0xCFEE, + 39034 - 11905: 0xCBB3, + 39035 - 11905: 0xD0EB, + 39036 - 11905: 0xE7EF, + 39037 - 11905: 0xCDE7, + 39038 - 11905: 0xB9CB, + 39039 - 11905: 0xB6D9, + 39040 - 11905: 0xF1FD, + 39041 - 11905: 0xB0E4, + 39042 - 11905: 0xCBCC, + 39043 - 11905: 0xF1FE, + 39044 - 11905: 0xD4A4, + 39045 - 11905: 0xC2AD, + 39046 - 11905: 0xC1EC, + 39047 - 11905: 0xC6C4, + 39048 - 11905: 0xBEB1, + 39049 - 11905: 0xF2A1, + 39050 - 11905: 0xBCD5, + 39051 - 11905: 0xEF46, + 39052 - 11905: 0xF2A2, + 39053 - 11905: 0xF2A3, + 39054 - 11905: 0xEF47, + 39055 - 11905: 0xF2A4, + 39056 - 11905: 0xD2C3, + 39057 - 11905: 0xC6B5, + 39058 - 11905: 0xEF48, + 39059 - 11905: 0xCDC7, + 39060 - 11905: 0xF2A5, + 39061 - 11905: 0xEF49, + 39062 - 11905: 0xD3B1, + 39063 - 11905: 0xBFC5, + 39064 - 11905: 0xCCE2, + 39065 - 11905: 0xEF4A, + 39066 - 11905: 0xF2A6, + 39067 - 11905: 0xF2A7, + 39068 - 11905: 0xD1D5, + 39069 - 11905: 0xB6EE, + 39070 - 11905: 0xF2A8, + 39071 - 11905: 0xF2A9, + 39072 - 11905: 0xB5DF, + 39073 - 11905: 0xF2AA, + 39074 - 11905: 0xF2AB, + 39075 - 11905: 0xEF4B, + 39076 - 11905: 0xB2FC, + 39077 - 11905: 0xF2AC, + 39078 - 11905: 0xF2AD, + 39079 - 11905: 0xC8A7, + 39080 - 11905: 0xEF4C, + 39081 - 11905: 0xEF4D, + 39082 - 11905: 0xEF4E, + 39083 - 11905: 0xEF4F, + 39084 - 11905: 0xEF50, + 39085 - 11905: 0xEF51, + 39086 - 11905: 0xEF52, + 39087 - 11905: 0xEF53, + 39088 - 11905: 0xEF54, + 39089 - 11905: 0xEF55, + 39090 - 11905: 0xEF56, + 39091 - 11905: 0xEF57, + 39092 - 11905: 0xEF58, + 39093 - 11905: 0xEF59, + 39094 - 11905: 0xEF5A, + 39095 - 11905: 0xEF5B, + 39096 - 11905: 0xEF5C, + 39097 - 11905: 0xEF5D, + 39098 - 11905: 0xEF5E, + 39099 - 11905: 0xEF5F, + 39100 - 11905: 0xEF60, + 39101 - 11905: 0xEF61, + 39102 - 11905: 0xEF62, + 39103 - 11905: 0xEF63, + 39104 - 11905: 0xEF64, + 39105 - 11905: 0xEF65, + 39106 - 11905: 0xEF66, + 39107 - 11905: 0xEF67, + 39108 - 11905: 0xEF68, + 39109 - 11905: 0xEF69, + 39110 - 11905: 0xEF6A, + 39111 - 11905: 0xEF6B, + 39112 - 11905: 0xEF6C, + 39113 - 11905: 0xEF6D, + 39114 - 11905: 0xEF6E, + 39115 - 11905: 0xEF6F, + 39116 - 11905: 0xEF70, + 39117 - 11905: 0xEF71, + 39118 - 11905: 0xB7E7, + 39119 - 11905: 0xEF72, + 39120 - 11905: 0xEF73, + 39121 - 11905: 0xECA9, + 39122 - 11905: 0xECAA, + 39123 - 11905: 0xECAB, + 39124 - 11905: 0xEF74, + 39125 - 11905: 0xECAC, + 39126 - 11905: 0xEF75, + 39127 - 11905: 0xEF76, + 39128 - 11905: 0xC6AE, + 39129 - 11905: 0xECAD, + 39130 - 11905: 0xECAE, + 39131 - 11905: 0xEF77, + 39132 - 11905: 0xEF78, + 39133 - 11905: 0xEF79, + 39134 - 11905: 0xB7C9, + 39135 - 11905: 0xCAB3, + 39136 - 11905: 0xEF7A, + 39137 - 11905: 0xEF7B, + 39138 - 11905: 0xEF7C, + 39139 - 11905: 0xEF7D, + 39140 - 11905: 0xEF7E, + 39141 - 11905: 0xEF80, + 39142 - 11905: 0xEF81, + 39143 - 11905: 0xE2B8, + 39144 - 11905: 0xF7CF, + 39145 - 11905: 0xEF82, + 39146 - 11905: 0xEF83, + 39147 - 11905: 0xEF84, + 39148 - 11905: 0xEF85, + 39149 - 11905: 0xEF86, + 39150 - 11905: 0xEF87, + 39151 - 11905: 0xEF88, + 39152 - 11905: 0xEF89, + 39153 - 11905: 0xEF8A, + 39154 - 11905: 0xEF8B, + 39155 - 11905: 0xEF8C, + 39156 - 11905: 0xEF8D, + 39157 - 11905: 0xEF8E, + 39158 - 11905: 0xEF8F, + 39159 - 11905: 0xEF90, + 39160 - 11905: 0xEF91, + 39161 - 11905: 0xEF92, + 39162 - 11905: 0xEF93, + 39163 - 11905: 0xEF94, + 39164 - 11905: 0xEF95, + 39165 - 11905: 0xEF96, + 39166 - 11905: 0xEF97, + 39167 - 11905: 0xEF98, + 39168 - 11905: 0xEF99, + 39169 - 11905: 0xEF9A, + 39170 - 11905: 0xEF9B, + 39171 - 11905: 0xEF9C, + 39172 - 11905: 0xEF9D, + 39173 - 11905: 0xEF9E, + 39174 - 11905: 0xEF9F, + 39175 - 11905: 0xEFA0, + 39176 - 11905: 0xF040, + 39177 - 11905: 0xF041, + 39178 - 11905: 0xF042, + 39179 - 11905: 0xF043, + 39180 - 11905: 0xF044, + 39181 - 11905: 0xF7D0, + 39182 - 11905: 0xF045, + 39183 - 11905: 0xF046, + 39184 - 11905: 0xB2CD, + 39185 - 11905: 0xF047, + 39186 - 11905: 0xF048, + 39187 - 11905: 0xF049, + 39188 - 11905: 0xF04A, + 39189 - 11905: 0xF04B, + 39190 - 11905: 0xF04C, + 39191 - 11905: 0xF04D, + 39192 - 11905: 0xF04E, + 39193 - 11905: 0xF04F, + 39194 - 11905: 0xF050, + 39195 - 11905: 0xF051, + 39196 - 11905: 0xF052, + 39197 - 11905: 0xF053, + 39198 - 11905: 0xF054, + 39199 - 11905: 0xF055, + 39200 - 11905: 0xF056, + 39201 - 11905: 0xF057, + 39202 - 11905: 0xF058, + 39203 - 11905: 0xF059, + 39204 - 11905: 0xF05A, + 39205 - 11905: 0xF05B, + 39206 - 11905: 0xF05C, + 39207 - 11905: 0xF05D, + 39208 - 11905: 0xF05E, + 39209 - 11905: 0xF05F, + 39210 - 11905: 0xF060, + 39211 - 11905: 0xF061, + 39212 - 11905: 0xF062, + 39213 - 11905: 0xF063, + 39214 - 11905: 0xF7D1, + 39215 - 11905: 0xF064, + 39216 - 11905: 0xF065, + 39217 - 11905: 0xF066, + 39218 - 11905: 0xF067, + 39219 - 11905: 0xF068, + 39220 - 11905: 0xF069, + 39221 - 11905: 0xF06A, + 39222 - 11905: 0xF06B, + 39223 - 11905: 0xF06C, + 39224 - 11905: 0xF06D, + 39225 - 11905: 0xF06E, + 39226 - 11905: 0xF06F, + 39227 - 11905: 0xF070, + 39228 - 11905: 0xF071, + 39229 - 11905: 0xF072, + 39230 - 11905: 0xF073, + 39231 - 11905: 0xF074, + 39232 - 11905: 0xF075, + 39233 - 11905: 0xF076, + 39234 - 11905: 0xF077, + 39235 - 11905: 0xF078, + 39236 - 11905: 0xF079, + 39237 - 11905: 0xF07A, + 39238 - 11905: 0xF07B, + 39239 - 11905: 0xF07C, + 39240 - 11905: 0xF07D, + 39241 - 11905: 0xF07E, + 39242 - 11905: 0xF080, + 39243 - 11905: 0xF081, + 39244 - 11905: 0xF082, + 39245 - 11905: 0xF083, + 39246 - 11905: 0xF084, + 39247 - 11905: 0xF085, + 39248 - 11905: 0xF086, + 39249 - 11905: 0xF087, + 39250 - 11905: 0xF088, + 39251 - 11905: 0xF089, + 39252 - 11905: 0xF7D3, + 39253 - 11905: 0xF7D2, + 39254 - 11905: 0xF08A, + 39255 - 11905: 0xF08B, + 39256 - 11905: 0xF08C, + 39257 - 11905: 0xF08D, + 39258 - 11905: 0xF08E, + 39259 - 11905: 0xF08F, + 39260 - 11905: 0xF090, + 39261 - 11905: 0xF091, + 39262 - 11905: 0xF092, + 39263 - 11905: 0xF093, + 39264 - 11905: 0xF094, + 39265 - 11905: 0xF095, + 39266 - 11905: 0xF096, + 39267 - 11905: 0xE2BB, + 39268 - 11905: 0xF097, + 39269 - 11905: 0xBCA2, + 39270 - 11905: 0xF098, + 39271 - 11905: 0xE2BC, + 39272 - 11905: 0xE2BD, + 39273 - 11905: 0xE2BE, + 39274 - 11905: 0xE2BF, + 39275 - 11905: 0xE2C0, + 39276 - 11905: 0xE2C1, + 39277 - 11905: 0xB7B9, + 39278 - 11905: 0xD2FB, + 39279 - 11905: 0xBDA4, + 39280 - 11905: 0xCACE, + 39281 - 11905: 0xB1A5, + 39282 - 11905: 0xCBC7, + 39283 - 11905: 0xF099, + 39284 - 11905: 0xE2C2, + 39285 - 11905: 0xB6FC, + 39286 - 11905: 0xC8C4, + 39287 - 11905: 0xE2C3, + 39288 - 11905: 0xF09A, + 39289 - 11905: 0xF09B, + 39290 - 11905: 0xBDC8, + 39291 - 11905: 0xF09C, + 39292 - 11905: 0xB1FD, + 39293 - 11905: 0xE2C4, + 39294 - 11905: 0xF09D, + 39295 - 11905: 0xB6F6, + 39296 - 11905: 0xE2C5, + 39297 - 11905: 0xC4D9, + 39298 - 11905: 0xF09E, + 39299 - 11905: 0xF09F, + 39300 - 11905: 0xE2C6, + 39301 - 11905: 0xCFDA, + 39302 - 11905: 0xB9DD, + 39303 - 11905: 0xE2C7, + 39304 - 11905: 0xC0A1, + 39305 - 11905: 0xF0A0, + 39306 - 11905: 0xE2C8, + 39307 - 11905: 0xB2F6, + 39308 - 11905: 0xF140, + 39309 - 11905: 0xE2C9, + 39310 - 11905: 0xF141, + 39311 - 11905: 0xC1F3, + 39312 - 11905: 0xE2CA, + 39313 - 11905: 0xE2CB, + 39314 - 11905: 0xC2F8, + 39315 - 11905: 0xE2CC, + 39316 - 11905: 0xE2CD, + 39317 - 11905: 0xE2CE, + 39318 - 11905: 0xCAD7, + 39319 - 11905: 0xD8B8, + 39320 - 11905: 0xD9E5, + 39321 - 11905: 0xCFE3, + 39322 - 11905: 0xF142, + 39323 - 11905: 0xF143, + 39324 - 11905: 0xF144, + 39325 - 11905: 0xF145, + 39326 - 11905: 0xF146, + 39327 - 11905: 0xF147, + 39328 - 11905: 0xF148, + 39329 - 11905: 0xF149, + 39330 - 11905: 0xF14A, + 39331 - 11905: 0xF14B, + 39332 - 11905: 0xF14C, + 39333 - 11905: 0xF0A5, + 39334 - 11905: 0xF14D, + 39335 - 11905: 0xF14E, + 39336 - 11905: 0xDCB0, + 39337 - 11905: 0xF14F, + 39338 - 11905: 0xF150, + 39339 - 11905: 0xF151, + 39340 - 11905: 0xF152, + 39341 - 11905: 0xF153, + 39342 - 11905: 0xF154, + 39343 - 11905: 0xF155, + 39344 - 11905: 0xF156, + 39345 - 11905: 0xF157, + 39346 - 11905: 0xF158, + 39347 - 11905: 0xF159, + 39348 - 11905: 0xF15A, + 39349 - 11905: 0xF15B, + 39350 - 11905: 0xF15C, + 39351 - 11905: 0xF15D, + 39352 - 11905: 0xF15E, + 39353 - 11905: 0xF15F, + 39354 - 11905: 0xF160, + 39355 - 11905: 0xF161, + 39356 - 11905: 0xF162, + 39357 - 11905: 0xF163, + 39358 - 11905: 0xF164, + 39359 - 11905: 0xF165, + 39360 - 11905: 0xF166, + 39361 - 11905: 0xF167, + 39362 - 11905: 0xF168, + 39363 - 11905: 0xF169, + 39364 - 11905: 0xF16A, + 39365 - 11905: 0xF16B, + 39366 - 11905: 0xF16C, + 39367 - 11905: 0xF16D, + 39368 - 11905: 0xF16E, + 39369 - 11905: 0xF16F, + 39370 - 11905: 0xF170, + 39371 - 11905: 0xF171, + 39372 - 11905: 0xF172, + 39373 - 11905: 0xF173, + 39374 - 11905: 0xF174, + 39375 - 11905: 0xF175, + 39376 - 11905: 0xF176, + 39377 - 11905: 0xF177, + 39378 - 11905: 0xF178, + 39379 - 11905: 0xF179, + 39380 - 11905: 0xF17A, + 39381 - 11905: 0xF17B, + 39382 - 11905: 0xF17C, + 39383 - 11905: 0xF17D, + 39384 - 11905: 0xF17E, + 39385 - 11905: 0xF180, + 39386 - 11905: 0xF181, + 39387 - 11905: 0xF182, + 39388 - 11905: 0xF183, + 39389 - 11905: 0xF184, + 39390 - 11905: 0xF185, + 39391 - 11905: 0xF186, + 39392 - 11905: 0xF187, + 39393 - 11905: 0xF188, + 39394 - 11905: 0xF189, + 39395 - 11905: 0xF18A, + 39396 - 11905: 0xF18B, + 39397 - 11905: 0xF18C, + 39398 - 11905: 0xF18D, + 39399 - 11905: 0xF18E, + 39400 - 11905: 0xF18F, + 39401 - 11905: 0xF190, + 39402 - 11905: 0xF191, + 39403 - 11905: 0xF192, + 39404 - 11905: 0xF193, + 39405 - 11905: 0xF194, + 39406 - 11905: 0xF195, + 39407 - 11905: 0xF196, + 39408 - 11905: 0xF197, + 39409 - 11905: 0xF198, + 39410 - 11905: 0xF199, + 39411 - 11905: 0xF19A, + 39412 - 11905: 0xF19B, + 39413 - 11905: 0xF19C, + 39414 - 11905: 0xF19D, + 39415 - 11905: 0xF19E, + 39416 - 11905: 0xF19F, + 39417 - 11905: 0xF1A0, + 39418 - 11905: 0xF240, + 39419 - 11905: 0xF241, + 39420 - 11905: 0xF242, + 39421 - 11905: 0xF243, + 39422 - 11905: 0xF244, + 39423 - 11905: 0xF245, + 39424 - 11905: 0xF246, + 39425 - 11905: 0xF247, + 39426 - 11905: 0xF248, + 39427 - 11905: 0xF249, + 39428 - 11905: 0xF24A, + 39429 - 11905: 0xF24B, + 39430 - 11905: 0xF24C, + 39431 - 11905: 0xF24D, + 39432 - 11905: 0xF24E, + 39433 - 11905: 0xF24F, + 39434 - 11905: 0xF250, + 39435 - 11905: 0xF251, + 39436 - 11905: 0xF252, + 39437 - 11905: 0xF253, + 39438 - 11905: 0xF254, + 39439 - 11905: 0xF255, + 39440 - 11905: 0xF256, + 39441 - 11905: 0xF257, + 39442 - 11905: 0xF258, + 39443 - 11905: 0xF259, + 39444 - 11905: 0xF25A, + 39445 - 11905: 0xF25B, + 39446 - 11905: 0xF25C, + 39447 - 11905: 0xF25D, + 39448 - 11905: 0xF25E, + 39449 - 11905: 0xF25F, + 39450 - 11905: 0xF260, + 39451 - 11905: 0xF261, + 39452 - 11905: 0xF262, + 39453 - 11905: 0xF263, + 39454 - 11905: 0xF264, + 39455 - 11905: 0xF265, + 39456 - 11905: 0xF266, + 39457 - 11905: 0xF267, + 39458 - 11905: 0xF268, + 39459 - 11905: 0xF269, + 39460 - 11905: 0xF26A, + 39461 - 11905: 0xF26B, + 39462 - 11905: 0xF26C, + 39463 - 11905: 0xF26D, + 39464 - 11905: 0xF26E, + 39465 - 11905: 0xF26F, + 39466 - 11905: 0xF270, + 39467 - 11905: 0xF271, + 39468 - 11905: 0xF272, + 39469 - 11905: 0xF273, + 39470 - 11905: 0xF274, + 39471 - 11905: 0xF275, + 39472 - 11905: 0xF276, + 39473 - 11905: 0xF277, + 39474 - 11905: 0xF278, + 39475 - 11905: 0xF279, + 39476 - 11905: 0xF27A, + 39477 - 11905: 0xF27B, + 39478 - 11905: 0xF27C, + 39479 - 11905: 0xF27D, + 39480 - 11905: 0xF27E, + 39481 - 11905: 0xF280, + 39482 - 11905: 0xF281, + 39483 - 11905: 0xF282, + 39484 - 11905: 0xF283, + 39485 - 11905: 0xF284, + 39486 - 11905: 0xF285, + 39487 - 11905: 0xF286, + 39488 - 11905: 0xF287, + 39489 - 11905: 0xF288, + 39490 - 11905: 0xF289, + 39491 - 11905: 0xF28A, + 39492 - 11905: 0xF28B, + 39493 - 11905: 0xF28C, + 39494 - 11905: 0xF28D, + 39495 - 11905: 0xF28E, + 39496 - 11905: 0xF28F, + 39497 - 11905: 0xF290, + 39498 - 11905: 0xF291, + 39499 - 11905: 0xF292, + 39500 - 11905: 0xF293, + 39501 - 11905: 0xF294, + 39502 - 11905: 0xF295, + 39503 - 11905: 0xF296, + 39504 - 11905: 0xF297, + 39505 - 11905: 0xF298, + 39506 - 11905: 0xF299, + 39507 - 11905: 0xF29A, + 39508 - 11905: 0xF29B, + 39509 - 11905: 0xF29C, + 39510 - 11905: 0xF29D, + 39511 - 11905: 0xF29E, + 39512 - 11905: 0xF29F, + 39513 - 11905: 0xF2A0, + 39514 - 11905: 0xF340, + 39515 - 11905: 0xF341, + 39516 - 11905: 0xF342, + 39517 - 11905: 0xF343, + 39518 - 11905: 0xF344, + 39519 - 11905: 0xF345, + 39520 - 11905: 0xF346, + 39521 - 11905: 0xF347, + 39522 - 11905: 0xF348, + 39523 - 11905: 0xF349, + 39524 - 11905: 0xF34A, + 39525 - 11905: 0xF34B, + 39526 - 11905: 0xF34C, + 39527 - 11905: 0xF34D, + 39528 - 11905: 0xF34E, + 39529 - 11905: 0xF34F, + 39530 - 11905: 0xF350, + 39531 - 11905: 0xF351, + 39532 - 11905: 0xC2ED, + 39533 - 11905: 0xD4A6, + 39534 - 11905: 0xCDD4, + 39535 - 11905: 0xD1B1, + 39536 - 11905: 0xB3DB, + 39537 - 11905: 0xC7FD, + 39538 - 11905: 0xF352, + 39539 - 11905: 0xB2B5, + 39540 - 11905: 0xC2BF, + 39541 - 11905: 0xE6E0, + 39542 - 11905: 0xCABB, + 39543 - 11905: 0xE6E1, + 39544 - 11905: 0xE6E2, + 39545 - 11905: 0xBED4, + 39546 - 11905: 0xE6E3, + 39547 - 11905: 0xD7A4, + 39548 - 11905: 0xCDD5, + 39549 - 11905: 0xE6E5, + 39550 - 11905: 0xBCDD, + 39551 - 11905: 0xE6E4, + 39552 - 11905: 0xE6E6, + 39553 - 11905: 0xE6E7, + 39554 - 11905: 0xC2EE, + 39555 - 11905: 0xF353, + 39556 - 11905: 0xBDBE, + 39557 - 11905: 0xE6E8, + 39558 - 11905: 0xC2E6, + 39559 - 11905: 0xBAA7, + 39560 - 11905: 0xE6E9, + 39561 - 11905: 0xF354, + 39562 - 11905: 0xE6EA, + 39563 - 11905: 0xB3D2, + 39564 - 11905: 0xD1E9, + 39565 - 11905: 0xF355, + 39566 - 11905: 0xF356, + 39567 - 11905: 0xBFA5, + 39568 - 11905: 0xE6EB, + 39569 - 11905: 0xC6EF, + 39570 - 11905: 0xE6EC, + 39571 - 11905: 0xE6ED, + 39572 - 11905: 0xF357, + 39573 - 11905: 0xF358, + 39574 - 11905: 0xE6EE, + 39575 - 11905: 0xC6AD, + 39576 - 11905: 0xE6EF, + 39577 - 11905: 0xF359, + 39578 - 11905: 0xC9A7, + 39579 - 11905: 0xE6F0, + 39580 - 11905: 0xE6F1, + 39581 - 11905: 0xE6F2, + 39582 - 11905: 0xE5B9, + 39583 - 11905: 0xE6F3, + 39584 - 11905: 0xE6F4, + 39585 - 11905: 0xC2E2, + 39586 - 11905: 0xE6F5, + 39587 - 11905: 0xE6F6, + 39588 - 11905: 0xD6E8, + 39589 - 11905: 0xE6F7, + 39590 - 11905: 0xF35A, + 39591 - 11905: 0xE6F8, + 39592 - 11905: 0xB9C7, + 39593 - 11905: 0xF35B, + 39594 - 11905: 0xF35C, + 39595 - 11905: 0xF35D, + 39596 - 11905: 0xF35E, + 39597 - 11905: 0xF35F, + 39598 - 11905: 0xF360, + 39599 - 11905: 0xF361, + 39600 - 11905: 0xF7BB, + 39601 - 11905: 0xF7BA, + 39602 - 11905: 0xF362, + 39603 - 11905: 0xF363, + 39604 - 11905: 0xF364, + 39605 - 11905: 0xF365, + 39606 - 11905: 0xF7BE, + 39607 - 11905: 0xF7BC, + 39608 - 11905: 0xBAA1, + 39609 - 11905: 0xF366, + 39610 - 11905: 0xF7BF, + 39611 - 11905: 0xF367, + 39612 - 11905: 0xF7C0, + 39613 - 11905: 0xF368, + 39614 - 11905: 0xF369, + 39615 - 11905: 0xF36A, + 39616 - 11905: 0xF7C2, + 39617 - 11905: 0xF7C1, + 39618 - 11905: 0xF7C4, + 39619 - 11905: 0xF36B, + 39620 - 11905: 0xF36C, + 39621 - 11905: 0xF7C3, + 39622 - 11905: 0xF36D, + 39623 - 11905: 0xF36E, + 39624 - 11905: 0xF36F, + 39625 - 11905: 0xF370, + 39626 - 11905: 0xF371, + 39627 - 11905: 0xF7C5, + 39628 - 11905: 0xF7C6, + 39629 - 11905: 0xF372, + 39630 - 11905: 0xF373, + 39631 - 11905: 0xF374, + 39632 - 11905: 0xF375, + 39633 - 11905: 0xF7C7, + 39634 - 11905: 0xF376, + 39635 - 11905: 0xCBE8, + 39636 - 11905: 0xF377, + 39637 - 11905: 0xF378, + 39638 - 11905: 0xF379, + 39639 - 11905: 0xF37A, + 39640 - 11905: 0xB8DF, + 39641 - 11905: 0xF37B, + 39642 - 11905: 0xF37C, + 39643 - 11905: 0xF37D, + 39644 - 11905: 0xF37E, + 39645 - 11905: 0xF380, + 39646 - 11905: 0xF381, + 39647 - 11905: 0xF7D4, + 39648 - 11905: 0xF382, + 39649 - 11905: 0xF7D5, + 39650 - 11905: 0xF383, + 39651 - 11905: 0xF384, + 39652 - 11905: 0xF385, + 39653 - 11905: 0xF386, + 39654 - 11905: 0xF7D6, + 39655 - 11905: 0xF387, + 39656 - 11905: 0xF388, + 39657 - 11905: 0xF389, + 39658 - 11905: 0xF38A, + 39659 - 11905: 0xF7D8, + 39660 - 11905: 0xF38B, + 39661 - 11905: 0xF7DA, + 39662 - 11905: 0xF38C, + 39663 - 11905: 0xF7D7, + 39664 - 11905: 0xF38D, + 39665 - 11905: 0xF38E, + 39666 - 11905: 0xF38F, + 39667 - 11905: 0xF390, + 39668 - 11905: 0xF391, + 39669 - 11905: 0xF392, + 39670 - 11905: 0xF393, + 39671 - 11905: 0xF394, + 39672 - 11905: 0xF395, + 39673 - 11905: 0xF7DB, + 39674 - 11905: 0xF396, + 39675 - 11905: 0xF7D9, + 39676 - 11905: 0xF397, + 39677 - 11905: 0xF398, + 39678 - 11905: 0xF399, + 39679 - 11905: 0xF39A, + 39680 - 11905: 0xF39B, + 39681 - 11905: 0xF39C, + 39682 - 11905: 0xF39D, + 39683 - 11905: 0xD7D7, + 39684 - 11905: 0xF39E, + 39685 - 11905: 0xF39F, + 39686 - 11905: 0xF3A0, + 39687 - 11905: 0xF440, + 39688 - 11905: 0xF7DC, + 39689 - 11905: 0xF441, + 39690 - 11905: 0xF442, + 39691 - 11905: 0xF443, + 39692 - 11905: 0xF444, + 39693 - 11905: 0xF445, + 39694 - 11905: 0xF446, + 39695 - 11905: 0xF7DD, + 39696 - 11905: 0xF447, + 39697 - 11905: 0xF448, + 39698 - 11905: 0xF449, + 39699 - 11905: 0xF7DE, + 39700 - 11905: 0xF44A, + 39701 - 11905: 0xF44B, + 39702 - 11905: 0xF44C, + 39703 - 11905: 0xF44D, + 39704 - 11905: 0xF44E, + 39705 - 11905: 0xF44F, + 39706 - 11905: 0xF450, + 39707 - 11905: 0xF451, + 39708 - 11905: 0xF452, + 39709 - 11905: 0xF453, + 39710 - 11905: 0xF454, + 39711 - 11905: 0xF7DF, + 39712 - 11905: 0xF455, + 39713 - 11905: 0xF456, + 39714 - 11905: 0xF457, + 39715 - 11905: 0xF7E0, + 39716 - 11905: 0xF458, + 39717 - 11905: 0xF459, + 39718 - 11905: 0xF45A, + 39719 - 11905: 0xF45B, + 39720 - 11905: 0xF45C, + 39721 - 11905: 0xF45D, + 39722 - 11905: 0xF45E, + 39723 - 11905: 0xF45F, + 39724 - 11905: 0xF460, + 39725 - 11905: 0xF461, + 39726 - 11905: 0xF462, + 39727 - 11905: 0xDBCB, + 39728 - 11905: 0xF463, + 39729 - 11905: 0xF464, + 39730 - 11905: 0xD8AA, + 39731 - 11905: 0xF465, + 39732 - 11905: 0xF466, + 39733 - 11905: 0xF467, + 39734 - 11905: 0xF468, + 39735 - 11905: 0xF469, + 39736 - 11905: 0xF46A, + 39737 - 11905: 0xF46B, + 39738 - 11905: 0xF46C, + 39739 - 11905: 0xE5F7, + 39740 - 11905: 0xB9ED, + 39741 - 11905: 0xF46D, + 39742 - 11905: 0xF46E, + 39743 - 11905: 0xF46F, + 39744 - 11905: 0xF470, + 39745 - 11905: 0xBFFD, + 39746 - 11905: 0xBBEA, + 39747 - 11905: 0xF7C9, + 39748 - 11905: 0xC6C7, + 39749 - 11905: 0xF7C8, + 39750 - 11905: 0xF471, + 39751 - 11905: 0xF7CA, + 39752 - 11905: 0xF7CC, + 39753 - 11905: 0xF7CB, + 39754 - 11905: 0xF472, + 39755 - 11905: 0xF473, + 39756 - 11905: 0xF474, + 39757 - 11905: 0xF7CD, + 39758 - 11905: 0xF475, + 39759 - 11905: 0xCEBA, + 39760 - 11905: 0xF476, + 39761 - 11905: 0xF7CE, + 39762 - 11905: 0xF477, + 39763 - 11905: 0xF478, + 39764 - 11905: 0xC4A7, + 39765 - 11905: 0xF479, + 39766 - 11905: 0xF47A, + 39767 - 11905: 0xF47B, + 39768 - 11905: 0xF47C, + 39769 - 11905: 0xF47D, + 39770 - 11905: 0xF47E, + 39771 - 11905: 0xF480, + 39772 - 11905: 0xF481, + 39773 - 11905: 0xF482, + 39774 - 11905: 0xF483, + 39775 - 11905: 0xF484, + 39776 - 11905: 0xF485, + 39777 - 11905: 0xF486, + 39778 - 11905: 0xF487, + 39779 - 11905: 0xF488, + 39780 - 11905: 0xF489, + 39781 - 11905: 0xF48A, + 39782 - 11905: 0xF48B, + 39783 - 11905: 0xF48C, + 39784 - 11905: 0xF48D, + 39785 - 11905: 0xF48E, + 39786 - 11905: 0xF48F, + 39787 - 11905: 0xF490, + 39788 - 11905: 0xF491, + 39789 - 11905: 0xF492, + 39790 - 11905: 0xF493, + 39791 - 11905: 0xF494, + 39792 - 11905: 0xF495, + 39793 - 11905: 0xF496, + 39794 - 11905: 0xF497, + 39795 - 11905: 0xF498, + 39796 - 11905: 0xF499, + 39797 - 11905: 0xF49A, + 39798 - 11905: 0xF49B, + 39799 - 11905: 0xF49C, + 39800 - 11905: 0xF49D, + 39801 - 11905: 0xF49E, + 39802 - 11905: 0xF49F, + 39803 - 11905: 0xF4A0, + 39804 - 11905: 0xF540, + 39805 - 11905: 0xF541, + 39806 - 11905: 0xF542, + 39807 - 11905: 0xF543, + 39808 - 11905: 0xF544, + 39809 - 11905: 0xF545, + 39810 - 11905: 0xF546, + 39811 - 11905: 0xF547, + 39812 - 11905: 0xF548, + 39813 - 11905: 0xF549, + 39814 - 11905: 0xF54A, + 39815 - 11905: 0xF54B, + 39816 - 11905: 0xF54C, + 39817 - 11905: 0xF54D, + 39818 - 11905: 0xF54E, + 39819 - 11905: 0xF54F, + 39820 - 11905: 0xF550, + 39821 - 11905: 0xF551, + 39822 - 11905: 0xF552, + 39823 - 11905: 0xF553, + 39824 - 11905: 0xF554, + 39825 - 11905: 0xF555, + 39826 - 11905: 0xF556, + 39827 - 11905: 0xF557, + 39828 - 11905: 0xF558, + 39829 - 11905: 0xF559, + 39830 - 11905: 0xF55A, + 39831 - 11905: 0xF55B, + 39832 - 11905: 0xF55C, + 39833 - 11905: 0xF55D, + 39834 - 11905: 0xF55E, + 39835 - 11905: 0xF55F, + 39836 - 11905: 0xF560, + 39837 - 11905: 0xF561, + 39838 - 11905: 0xF562, + 39839 - 11905: 0xF563, + 39840 - 11905: 0xF564, + 39841 - 11905: 0xF565, + 39842 - 11905: 0xF566, + 39843 - 11905: 0xF567, + 39844 - 11905: 0xF568, + 39845 - 11905: 0xF569, + 39846 - 11905: 0xF56A, + 39847 - 11905: 0xF56B, + 39848 - 11905: 0xF56C, + 39849 - 11905: 0xF56D, + 39850 - 11905: 0xF56E, + 39851 - 11905: 0xF56F, + 39852 - 11905: 0xF570, + 39853 - 11905: 0xF571, + 39854 - 11905: 0xF572, + 39855 - 11905: 0xF573, + 39856 - 11905: 0xF574, + 39857 - 11905: 0xF575, + 39858 - 11905: 0xF576, + 39859 - 11905: 0xF577, + 39860 - 11905: 0xF578, + 39861 - 11905: 0xF579, + 39862 - 11905: 0xF57A, + 39863 - 11905: 0xF57B, + 39864 - 11905: 0xF57C, + 39865 - 11905: 0xF57D, + 39866 - 11905: 0xF57E, + 39867 - 11905: 0xF580, + 39868 - 11905: 0xF581, + 39869 - 11905: 0xF582, + 39870 - 11905: 0xF583, + 39871 - 11905: 0xF584, + 39872 - 11905: 0xF585, + 39873 - 11905: 0xF586, + 39874 - 11905: 0xF587, + 39875 - 11905: 0xF588, + 39876 - 11905: 0xF589, + 39877 - 11905: 0xF58A, + 39878 - 11905: 0xF58B, + 39879 - 11905: 0xF58C, + 39880 - 11905: 0xF58D, + 39881 - 11905: 0xF58E, + 39882 - 11905: 0xF58F, + 39883 - 11905: 0xF590, + 39884 - 11905: 0xF591, + 39885 - 11905: 0xF592, + 39886 - 11905: 0xF593, + 39887 - 11905: 0xF594, + 39888 - 11905: 0xF595, + 39889 - 11905: 0xF596, + 39890 - 11905: 0xF597, + 39891 - 11905: 0xF598, + 39892 - 11905: 0xF599, + 39893 - 11905: 0xF59A, + 39894 - 11905: 0xF59B, + 39895 - 11905: 0xF59C, + 39896 - 11905: 0xF59D, + 39897 - 11905: 0xF59E, + 39898 - 11905: 0xF59F, + 39899 - 11905: 0xF5A0, + 39900 - 11905: 0xF640, + 39901 - 11905: 0xF641, + 39902 - 11905: 0xF642, + 39903 - 11905: 0xF643, + 39904 - 11905: 0xF644, + 39905 - 11905: 0xF645, + 39906 - 11905: 0xF646, + 39907 - 11905: 0xF647, + 39908 - 11905: 0xF648, + 39909 - 11905: 0xF649, + 39910 - 11905: 0xF64A, + 39911 - 11905: 0xF64B, + 39912 - 11905: 0xF64C, + 39913 - 11905: 0xF64D, + 39914 - 11905: 0xF64E, + 39915 - 11905: 0xF64F, + 39916 - 11905: 0xF650, + 39917 - 11905: 0xF651, + 39918 - 11905: 0xF652, + 39919 - 11905: 0xF653, + 39920 - 11905: 0xF654, + 39921 - 11905: 0xF655, + 39922 - 11905: 0xF656, + 39923 - 11905: 0xF657, + 39924 - 11905: 0xF658, + 39925 - 11905: 0xF659, + 39926 - 11905: 0xF65A, + 39927 - 11905: 0xF65B, + 39928 - 11905: 0xF65C, + 39929 - 11905: 0xF65D, + 39930 - 11905: 0xF65E, + 39931 - 11905: 0xF65F, + 39932 - 11905: 0xF660, + 39933 - 11905: 0xF661, + 39934 - 11905: 0xF662, + 39935 - 11905: 0xF663, + 39936 - 11905: 0xF664, + 39937 - 11905: 0xF665, + 39938 - 11905: 0xF666, + 39939 - 11905: 0xF667, + 39940 - 11905: 0xF668, + 39941 - 11905: 0xF669, + 39942 - 11905: 0xF66A, + 39943 - 11905: 0xF66B, + 39944 - 11905: 0xF66C, + 39945 - 11905: 0xF66D, + 39946 - 11905: 0xF66E, + 39947 - 11905: 0xF66F, + 39948 - 11905: 0xF670, + 39949 - 11905: 0xF671, + 39950 - 11905: 0xF672, + 39951 - 11905: 0xF673, + 39952 - 11905: 0xF674, + 39953 - 11905: 0xF675, + 39954 - 11905: 0xF676, + 39955 - 11905: 0xF677, + 39956 - 11905: 0xF678, + 39957 - 11905: 0xF679, + 39958 - 11905: 0xF67A, + 39959 - 11905: 0xF67B, + 39960 - 11905: 0xF67C, + 39961 - 11905: 0xF67D, + 39962 - 11905: 0xF67E, + 39963 - 11905: 0xF680, + 39964 - 11905: 0xF681, + 39965 - 11905: 0xF682, + 39966 - 11905: 0xF683, + 39967 - 11905: 0xF684, + 39968 - 11905: 0xF685, + 39969 - 11905: 0xF686, + 39970 - 11905: 0xF687, + 39971 - 11905: 0xF688, + 39972 - 11905: 0xF689, + 39973 - 11905: 0xF68A, + 39974 - 11905: 0xF68B, + 39975 - 11905: 0xF68C, + 39976 - 11905: 0xF68D, + 39977 - 11905: 0xF68E, + 39978 - 11905: 0xF68F, + 39979 - 11905: 0xF690, + 39980 - 11905: 0xF691, + 39981 - 11905: 0xF692, + 39982 - 11905: 0xF693, + 39983 - 11905: 0xF694, + 39984 - 11905: 0xF695, + 39985 - 11905: 0xF696, + 39986 - 11905: 0xF697, + 39987 - 11905: 0xF698, + 39988 - 11905: 0xF699, + 39989 - 11905: 0xF69A, + 39990 - 11905: 0xF69B, + 39991 - 11905: 0xF69C, + 39992 - 11905: 0xF69D, + 39993 - 11905: 0xF69E, + 39994 - 11905: 0xF69F, + 39995 - 11905: 0xF6A0, + 39996 - 11905: 0xF740, + 39997 - 11905: 0xF741, + 39998 - 11905: 0xF742, + 39999 - 11905: 0xF743, + 40000 - 11905: 0xF744, + 40001 - 11905: 0xF745, + 40002 - 11905: 0xF746, + 40003 - 11905: 0xF747, + 40004 - 11905: 0xF748, + 40005 - 11905: 0xF749, + 40006 - 11905: 0xF74A, + 40007 - 11905: 0xF74B, + 40008 - 11905: 0xF74C, + 40009 - 11905: 0xF74D, + 40010 - 11905: 0xF74E, + 40011 - 11905: 0xF74F, + 40012 - 11905: 0xF750, + 40013 - 11905: 0xF751, + 40014 - 11905: 0xF752, + 40015 - 11905: 0xF753, + 40016 - 11905: 0xF754, + 40017 - 11905: 0xF755, + 40018 - 11905: 0xF756, + 40019 - 11905: 0xF757, + 40020 - 11905: 0xF758, + 40021 - 11905: 0xF759, + 40022 - 11905: 0xF75A, + 40023 - 11905: 0xF75B, + 40024 - 11905: 0xF75C, + 40025 - 11905: 0xF75D, + 40026 - 11905: 0xF75E, + 40027 - 11905: 0xF75F, + 40028 - 11905: 0xF760, + 40029 - 11905: 0xF761, + 40030 - 11905: 0xF762, + 40031 - 11905: 0xF763, + 40032 - 11905: 0xF764, + 40033 - 11905: 0xF765, + 40034 - 11905: 0xF766, + 40035 - 11905: 0xF767, + 40036 - 11905: 0xF768, + 40037 - 11905: 0xF769, + 40038 - 11905: 0xF76A, + 40039 - 11905: 0xF76B, + 40040 - 11905: 0xF76C, + 40041 - 11905: 0xF76D, + 40042 - 11905: 0xF76E, + 40043 - 11905: 0xF76F, + 40044 - 11905: 0xF770, + 40045 - 11905: 0xF771, + 40046 - 11905: 0xF772, + 40047 - 11905: 0xF773, + 40048 - 11905: 0xF774, + 40049 - 11905: 0xF775, + 40050 - 11905: 0xF776, + 40051 - 11905: 0xF777, + 40052 - 11905: 0xF778, + 40053 - 11905: 0xF779, + 40054 - 11905: 0xF77A, + 40055 - 11905: 0xF77B, + 40056 - 11905: 0xF77C, + 40057 - 11905: 0xF77D, + 40058 - 11905: 0xF77E, + 40059 - 11905: 0xF780, + 40060 - 11905: 0xD3E3, + 40061 - 11905: 0xF781, + 40062 - 11905: 0xF782, + 40063 - 11905: 0xF6CF, + 40064 - 11905: 0xF783, + 40065 - 11905: 0xC2B3, + 40066 - 11905: 0xF6D0, + 40067 - 11905: 0xF784, + 40068 - 11905: 0xF785, + 40069 - 11905: 0xF6D1, + 40070 - 11905: 0xF6D2, + 40071 - 11905: 0xF6D3, + 40072 - 11905: 0xF6D4, + 40073 - 11905: 0xF786, + 40074 - 11905: 0xF787, + 40075 - 11905: 0xF6D6, + 40076 - 11905: 0xF788, + 40077 - 11905: 0xB1AB, + 40078 - 11905: 0xF6D7, + 40079 - 11905: 0xF789, + 40080 - 11905: 0xF6D8, + 40081 - 11905: 0xF6D9, + 40082 - 11905: 0xF6DA, + 40083 - 11905: 0xF78A, + 40084 - 11905: 0xF6DB, + 40085 - 11905: 0xF6DC, + 40086 - 11905: 0xF78B, + 40087 - 11905: 0xF78C, + 40088 - 11905: 0xF78D, + 40089 - 11905: 0xF78E, + 40090 - 11905: 0xF6DD, + 40091 - 11905: 0xF6DE, + 40092 - 11905: 0xCFCA, + 40093 - 11905: 0xF78F, + 40094 - 11905: 0xF6DF, + 40095 - 11905: 0xF6E0, + 40096 - 11905: 0xF6E1, + 40097 - 11905: 0xF6E2, + 40098 - 11905: 0xF6E3, + 40099 - 11905: 0xF6E4, + 40100 - 11905: 0xC0F0, + 40101 - 11905: 0xF6E5, + 40102 - 11905: 0xF6E6, + 40103 - 11905: 0xF6E7, + 40104 - 11905: 0xF6E8, + 40105 - 11905: 0xF6E9, + 40106 - 11905: 0xF790, + 40107 - 11905: 0xF6EA, + 40108 - 11905: 0xF791, + 40109 - 11905: 0xF6EB, + 40110 - 11905: 0xF6EC, + 40111 - 11905: 0xF792, + 40112 - 11905: 0xF6ED, + 40113 - 11905: 0xF6EE, + 40114 - 11905: 0xF6EF, + 40115 - 11905: 0xF6F0, + 40116 - 11905: 0xF6F1, + 40117 - 11905: 0xF6F2, + 40118 - 11905: 0xF6F3, + 40119 - 11905: 0xF6F4, + 40120 - 11905: 0xBEA8, + 40121 - 11905: 0xF793, + 40122 - 11905: 0xF6F5, + 40123 - 11905: 0xF6F6, + 40124 - 11905: 0xF6F7, + 40125 - 11905: 0xF6F8, + 40126 - 11905: 0xF794, + 40127 - 11905: 0xF795, + 40128 - 11905: 0xF796, + 40129 - 11905: 0xF797, + 40130 - 11905: 0xF798, + 40131 - 11905: 0xC8FA, + 40132 - 11905: 0xF6F9, + 40133 - 11905: 0xF6FA, + 40134 - 11905: 0xF6FB, + 40135 - 11905: 0xF6FC, + 40136 - 11905: 0xF799, + 40137 - 11905: 0xF79A, + 40138 - 11905: 0xF6FD, + 40139 - 11905: 0xF6FE, + 40140 - 11905: 0xF7A1, + 40141 - 11905: 0xF7A2, + 40142 - 11905: 0xF7A3, + 40143 - 11905: 0xF7A4, + 40144 - 11905: 0xF7A5, + 40145 - 11905: 0xF79B, + 40146 - 11905: 0xF79C, + 40147 - 11905: 0xF7A6, + 40148 - 11905: 0xF7A7, + 40149 - 11905: 0xF7A8, + 40150 - 11905: 0xB1EE, + 40151 - 11905: 0xF7A9, + 40152 - 11905: 0xF7AA, + 40153 - 11905: 0xF7AB, + 40154 - 11905: 0xF79D, + 40155 - 11905: 0xF79E, + 40156 - 11905: 0xF7AC, + 40157 - 11905: 0xF7AD, + 40158 - 11905: 0xC1DB, + 40159 - 11905: 0xF7AE, + 40160 - 11905: 0xF79F, + 40161 - 11905: 0xF7A0, + 40162 - 11905: 0xF7AF, + 40163 - 11905: 0xF840, + 40164 - 11905: 0xF841, + 40165 - 11905: 0xF842, + 40166 - 11905: 0xF843, + 40167 - 11905: 0xF844, + 40168 - 11905: 0xF845, + 40169 - 11905: 0xF846, + 40170 - 11905: 0xF847, + 40171 - 11905: 0xF848, + 40172 - 11905: 0xF849, + 40173 - 11905: 0xF84A, + 40174 - 11905: 0xF84B, + 40175 - 11905: 0xF84C, + 40176 - 11905: 0xF84D, + 40177 - 11905: 0xF84E, + 40178 - 11905: 0xF84F, + 40179 - 11905: 0xF850, + 40180 - 11905: 0xF851, + 40181 - 11905: 0xF852, + 40182 - 11905: 0xF853, + 40183 - 11905: 0xF854, + 40184 - 11905: 0xF855, + 40185 - 11905: 0xF856, + 40186 - 11905: 0xF857, + 40187 - 11905: 0xF858, + 40188 - 11905: 0xF859, + 40189 - 11905: 0xF85A, + 40190 - 11905: 0xF85B, + 40191 - 11905: 0xF85C, + 40192 - 11905: 0xF85D, + 40193 - 11905: 0xF85E, + 40194 - 11905: 0xF85F, + 40195 - 11905: 0xF860, + 40196 - 11905: 0xF861, + 40197 - 11905: 0xF862, + 40198 - 11905: 0xF863, + 40199 - 11905: 0xF864, + 40200 - 11905: 0xF865, + 40201 - 11905: 0xF866, + 40202 - 11905: 0xF867, + 40203 - 11905: 0xF868, + 40204 - 11905: 0xF869, + 40205 - 11905: 0xF86A, + 40206 - 11905: 0xF86B, + 40207 - 11905: 0xF86C, + 40208 - 11905: 0xF86D, + 40209 - 11905: 0xF86E, + 40210 - 11905: 0xF86F, + 40211 - 11905: 0xF870, + 40212 - 11905: 0xF871, + 40213 - 11905: 0xF872, + 40214 - 11905: 0xF873, + 40215 - 11905: 0xF874, + 40216 - 11905: 0xF875, + 40217 - 11905: 0xF876, + 40218 - 11905: 0xF877, + 40219 - 11905: 0xF878, + 40220 - 11905: 0xF879, + 40221 - 11905: 0xF87A, + 40222 - 11905: 0xF87B, + 40223 - 11905: 0xF87C, + 40224 - 11905: 0xF87D, + 40225 - 11905: 0xF87E, + 40226 - 11905: 0xF880, + 40227 - 11905: 0xF881, + 40228 - 11905: 0xF882, + 40229 - 11905: 0xF883, + 40230 - 11905: 0xF884, + 40231 - 11905: 0xF885, + 40232 - 11905: 0xF886, + 40233 - 11905: 0xF887, + 40234 - 11905: 0xF888, + 40235 - 11905: 0xF889, + 40236 - 11905: 0xF88A, + 40237 - 11905: 0xF88B, + 40238 - 11905: 0xF88C, + 40239 - 11905: 0xF88D, + 40240 - 11905: 0xF88E, + 40241 - 11905: 0xF88F, + 40242 - 11905: 0xF890, + 40243 - 11905: 0xF891, + 40244 - 11905: 0xF892, + 40245 - 11905: 0xF893, + 40246 - 11905: 0xF894, + 40247 - 11905: 0xF895, + 40248 - 11905: 0xF896, + 40249 - 11905: 0xF897, + 40250 - 11905: 0xF898, + 40251 - 11905: 0xF899, + 40252 - 11905: 0xF89A, + 40253 - 11905: 0xF89B, + 40254 - 11905: 0xF89C, + 40255 - 11905: 0xF89D, + 40256 - 11905: 0xF89E, + 40257 - 11905: 0xF89F, + 40258 - 11905: 0xF8A0, + 40259 - 11905: 0xF940, + 40260 - 11905: 0xF941, + 40261 - 11905: 0xF942, + 40262 - 11905: 0xF943, + 40263 - 11905: 0xF944, + 40264 - 11905: 0xF945, + 40265 - 11905: 0xF946, + 40266 - 11905: 0xF947, + 40267 - 11905: 0xF948, + 40268 - 11905: 0xF949, + 40269 - 11905: 0xF94A, + 40270 - 11905: 0xF94B, + 40271 - 11905: 0xF94C, + 40272 - 11905: 0xF94D, + 40273 - 11905: 0xF94E, + 40274 - 11905: 0xF94F, + 40275 - 11905: 0xF950, + 40276 - 11905: 0xF951, + 40277 - 11905: 0xF952, + 40278 - 11905: 0xF953, + 40279 - 11905: 0xF954, + 40280 - 11905: 0xF955, + 40281 - 11905: 0xF956, + 40282 - 11905: 0xF957, + 40283 - 11905: 0xF958, + 40284 - 11905: 0xF959, + 40285 - 11905: 0xF95A, + 40286 - 11905: 0xF95B, + 40287 - 11905: 0xF95C, + 40288 - 11905: 0xF95D, + 40289 - 11905: 0xF95E, + 40290 - 11905: 0xF95F, + 40291 - 11905: 0xF960, + 40292 - 11905: 0xF961, + 40293 - 11905: 0xF962, + 40294 - 11905: 0xF963, + 40295 - 11905: 0xF964, + 40296 - 11905: 0xF965, + 40297 - 11905: 0xF966, + 40298 - 11905: 0xF967, + 40299 - 11905: 0xF968, + 40300 - 11905: 0xF969, + 40301 - 11905: 0xF96A, + 40302 - 11905: 0xF96B, + 40303 - 11905: 0xF96C, + 40304 - 11905: 0xF96D, + 40305 - 11905: 0xF96E, + 40306 - 11905: 0xF96F, + 40307 - 11905: 0xF970, + 40308 - 11905: 0xF971, + 40309 - 11905: 0xF972, + 40310 - 11905: 0xF973, + 40311 - 11905: 0xF974, + 40312 - 11905: 0xF975, + 40313 - 11905: 0xF976, + 40314 - 11905: 0xF977, + 40315 - 11905: 0xF978, + 40316 - 11905: 0xF979, + 40317 - 11905: 0xF97A, + 40318 - 11905: 0xF97B, + 40319 - 11905: 0xF97C, + 40320 - 11905: 0xF97D, + 40321 - 11905: 0xF97E, + 40322 - 11905: 0xF980, + 40323 - 11905: 0xF981, + 40324 - 11905: 0xF982, + 40325 - 11905: 0xF983, + 40326 - 11905: 0xF984, + 40327 - 11905: 0xF985, + 40328 - 11905: 0xF986, + 40329 - 11905: 0xF987, + 40330 - 11905: 0xF988, + 40331 - 11905: 0xF989, + 40332 - 11905: 0xF98A, + 40333 - 11905: 0xF98B, + 40334 - 11905: 0xF98C, + 40335 - 11905: 0xF98D, + 40336 - 11905: 0xF98E, + 40337 - 11905: 0xF98F, + 40338 - 11905: 0xF990, + 40339 - 11905: 0xF991, + 40340 - 11905: 0xF992, + 40341 - 11905: 0xF993, + 40342 - 11905: 0xF994, + 40343 - 11905: 0xF995, + 40344 - 11905: 0xF996, + 40345 - 11905: 0xF997, + 40346 - 11905: 0xF998, + 40347 - 11905: 0xF999, + 40348 - 11905: 0xF99A, + 40349 - 11905: 0xF99B, + 40350 - 11905: 0xF99C, + 40351 - 11905: 0xF99D, + 40352 - 11905: 0xF99E, + 40353 - 11905: 0xF99F, + 40354 - 11905: 0xF9A0, + 40355 - 11905: 0xFA40, + 40356 - 11905: 0xFA41, + 40357 - 11905: 0xFA42, + 40358 - 11905: 0xFA43, + 40359 - 11905: 0xFA44, + 40360 - 11905: 0xFA45, + 40361 - 11905: 0xFA46, + 40362 - 11905: 0xFA47, + 40363 - 11905: 0xFA48, + 40364 - 11905: 0xFA49, + 40365 - 11905: 0xFA4A, + 40366 - 11905: 0xFA4B, + 40367 - 11905: 0xFA4C, + 40368 - 11905: 0xFA4D, + 40369 - 11905: 0xFA4E, + 40370 - 11905: 0xFA4F, + 40371 - 11905: 0xFA50, + 40372 - 11905: 0xFA51, + 40373 - 11905: 0xFA52, + 40374 - 11905: 0xFA53, + 40375 - 11905: 0xFA54, + 40376 - 11905: 0xFA55, + 40377 - 11905: 0xFA56, + 40378 - 11905: 0xFA57, + 40379 - 11905: 0xFA58, + 40380 - 11905: 0xFA59, + 40381 - 11905: 0xFA5A, + 40382 - 11905: 0xFA5B, + 40383 - 11905: 0xFA5C, + 40384 - 11905: 0xFA5D, + 40385 - 11905: 0xFA5E, + 40386 - 11905: 0xFA5F, + 40387 - 11905: 0xFA60, + 40388 - 11905: 0xFA61, + 40389 - 11905: 0xFA62, + 40390 - 11905: 0xFA63, + 40391 - 11905: 0xFA64, + 40392 - 11905: 0xFA65, + 40393 - 11905: 0xFA66, + 40394 - 11905: 0xFA67, + 40395 - 11905: 0xFA68, + 40396 - 11905: 0xFA69, + 40397 - 11905: 0xFA6A, + 40398 - 11905: 0xFA6B, + 40399 - 11905: 0xFA6C, + 40400 - 11905: 0xFA6D, + 40401 - 11905: 0xFA6E, + 40402 - 11905: 0xFA6F, + 40403 - 11905: 0xFA70, + 40404 - 11905: 0xFA71, + 40405 - 11905: 0xFA72, + 40406 - 11905: 0xFA73, + 40407 - 11905: 0xFA74, + 40408 - 11905: 0xFA75, + 40409 - 11905: 0xFA76, + 40410 - 11905: 0xFA77, + 40411 - 11905: 0xFA78, + 40412 - 11905: 0xFA79, + 40413 - 11905: 0xFA7A, + 40414 - 11905: 0xFA7B, + 40415 - 11905: 0xFA7C, + 40416 - 11905: 0xFA7D, + 40417 - 11905: 0xFA7E, + 40418 - 11905: 0xFA80, + 40419 - 11905: 0xFA81, + 40420 - 11905: 0xFA82, + 40421 - 11905: 0xFA83, + 40422 - 11905: 0xFA84, + 40423 - 11905: 0xFA85, + 40424 - 11905: 0xFA86, + 40425 - 11905: 0xFA87, + 40426 - 11905: 0xFA88, + 40427 - 11905: 0xFA89, + 40428 - 11905: 0xFA8A, + 40429 - 11905: 0xFA8B, + 40430 - 11905: 0xFA8C, + 40431 - 11905: 0xFA8D, + 40432 - 11905: 0xFA8E, + 40433 - 11905: 0xFA8F, + 40434 - 11905: 0xFA90, + 40435 - 11905: 0xFA91, + 40436 - 11905: 0xFA92, + 40437 - 11905: 0xFA93, + 40438 - 11905: 0xFA94, + 40439 - 11905: 0xFA95, + 40440 - 11905: 0xFA96, + 40441 - 11905: 0xFA97, + 40442 - 11905: 0xFA98, + 40443 - 11905: 0xFA99, + 40444 - 11905: 0xFA9A, + 40445 - 11905: 0xFA9B, + 40446 - 11905: 0xFA9C, + 40447 - 11905: 0xFA9D, + 40448 - 11905: 0xFA9E, + 40449 - 11905: 0xFA9F, + 40450 - 11905: 0xFAA0, + 40451 - 11905: 0xFB40, + 40452 - 11905: 0xFB41, + 40453 - 11905: 0xFB42, + 40454 - 11905: 0xFB43, + 40455 - 11905: 0xFB44, + 40456 - 11905: 0xFB45, + 40457 - 11905: 0xFB46, + 40458 - 11905: 0xFB47, + 40459 - 11905: 0xFB48, + 40460 - 11905: 0xFB49, + 40461 - 11905: 0xFB4A, + 40462 - 11905: 0xFB4B, + 40463 - 11905: 0xFB4C, + 40464 - 11905: 0xFB4D, + 40465 - 11905: 0xFB4E, + 40466 - 11905: 0xFB4F, + 40467 - 11905: 0xFB50, + 40468 - 11905: 0xFB51, + 40469 - 11905: 0xFB52, + 40470 - 11905: 0xFB53, + 40471 - 11905: 0xFB54, + 40472 - 11905: 0xFB55, + 40473 - 11905: 0xFB56, + 40474 - 11905: 0xFB57, + 40475 - 11905: 0xFB58, + 40476 - 11905: 0xFB59, + 40477 - 11905: 0xFB5A, + 40478 - 11905: 0xFB5B, + 40479 - 11905: 0xC4F1, + 40480 - 11905: 0xF0AF, + 40481 - 11905: 0xBCA6, + 40482 - 11905: 0xF0B0, + 40483 - 11905: 0xC3F9, + 40484 - 11905: 0xFB5C, + 40485 - 11905: 0xC5B8, + 40486 - 11905: 0xD1BB, + 40487 - 11905: 0xFB5D, + 40488 - 11905: 0xF0B1, + 40489 - 11905: 0xF0B2, + 40490 - 11905: 0xF0B3, + 40491 - 11905: 0xF0B4, + 40492 - 11905: 0xF0B5, + 40493 - 11905: 0xD1BC, + 40494 - 11905: 0xFB5E, + 40495 - 11905: 0xD1EC, + 40496 - 11905: 0xFB5F, + 40497 - 11905: 0xF0B7, + 40498 - 11905: 0xF0B6, + 40499 - 11905: 0xD4A7, + 40500 - 11905: 0xFB60, + 40501 - 11905: 0xCDD2, + 40502 - 11905: 0xF0B8, + 40503 - 11905: 0xF0BA, + 40504 - 11905: 0xF0B9, + 40505 - 11905: 0xF0BB, + 40506 - 11905: 0xF0BC, + 40507 - 11905: 0xFB61, + 40508 - 11905: 0xFB62, + 40509 - 11905: 0xB8EB, + 40510 - 11905: 0xF0BD, + 40511 - 11905: 0xBAE8, + 40512 - 11905: 0xFB63, + 40513 - 11905: 0xF0BE, + 40514 - 11905: 0xF0BF, + 40515 - 11905: 0xBEE9, + 40516 - 11905: 0xF0C0, + 40517 - 11905: 0xB6EC, + 40518 - 11905: 0xF0C1, + 40519 - 11905: 0xF0C2, + 40520 - 11905: 0xF0C3, + 40521 - 11905: 0xF0C4, + 40522 - 11905: 0xC8B5, + 40523 - 11905: 0xF0C5, + 40524 - 11905: 0xF0C6, + 40525 - 11905: 0xFB64, + 40526 - 11905: 0xF0C7, + 40527 - 11905: 0xC5F4, + 40528 - 11905: 0xFB65, + 40529 - 11905: 0xF0C8, + 40530 - 11905: 0xFB66, + 40531 - 11905: 0xFB67, + 40532 - 11905: 0xFB68, + 40533 - 11905: 0xF0C9, + 40534 - 11905: 0xFB69, + 40535 - 11905: 0xF0CA, + 40536 - 11905: 0xF7BD, + 40537 - 11905: 0xFB6A, + 40538 - 11905: 0xF0CB, + 40539 - 11905: 0xF0CC, + 40540 - 11905: 0xF0CD, + 40541 - 11905: 0xFB6B, + 40542 - 11905: 0xF0CE, + 40543 - 11905: 0xFB6C, + 40544 - 11905: 0xFB6D, + 40545 - 11905: 0xFB6E, + 40546 - 11905: 0xFB6F, + 40547 - 11905: 0xF0CF, + 40548 - 11905: 0xBAD7, + 40549 - 11905: 0xFB70, + 40550 - 11905: 0xF0D0, + 40551 - 11905: 0xF0D1, + 40552 - 11905: 0xF0D2, + 40553 - 11905: 0xF0D3, + 40554 - 11905: 0xF0D4, + 40555 - 11905: 0xF0D5, + 40556 - 11905: 0xF0D6, + 40557 - 11905: 0xF0D8, + 40558 - 11905: 0xFB71, + 40559 - 11905: 0xFB72, + 40560 - 11905: 0xD3A5, + 40561 - 11905: 0xF0D7, + 40562 - 11905: 0xFB73, + 40563 - 11905: 0xF0D9, + 40564 - 11905: 0xFB74, + 40565 - 11905: 0xFB75, + 40566 - 11905: 0xFB76, + 40567 - 11905: 0xFB77, + 40568 - 11905: 0xFB78, + 40569 - 11905: 0xFB79, + 40570 - 11905: 0xFB7A, + 40571 - 11905: 0xFB7B, + 40572 - 11905: 0xFB7C, + 40573 - 11905: 0xFB7D, + 40574 - 11905: 0xF5BA, + 40575 - 11905: 0xC2B9, + 40576 - 11905: 0xFB7E, + 40577 - 11905: 0xFB80, + 40578 - 11905: 0xF7E4, + 40579 - 11905: 0xFB81, + 40580 - 11905: 0xFB82, + 40581 - 11905: 0xFB83, + 40582 - 11905: 0xFB84, + 40583 - 11905: 0xF7E5, + 40584 - 11905: 0xF7E6, + 40585 - 11905: 0xFB85, + 40586 - 11905: 0xFB86, + 40587 - 11905: 0xF7E7, + 40588 - 11905: 0xFB87, + 40589 - 11905: 0xFB88, + 40590 - 11905: 0xFB89, + 40591 - 11905: 0xFB8A, + 40592 - 11905: 0xFB8B, + 40593 - 11905: 0xFB8C, + 40594 - 11905: 0xF7E8, + 40595 - 11905: 0xC2B4, + 40596 - 11905: 0xFB8D, + 40597 - 11905: 0xFB8E, + 40598 - 11905: 0xFB8F, + 40599 - 11905: 0xFB90, + 40600 - 11905: 0xFB91, + 40601 - 11905: 0xFB92, + 40602 - 11905: 0xFB93, + 40603 - 11905: 0xFB94, + 40604 - 11905: 0xFB95, + 40605 - 11905: 0xF7EA, + 40606 - 11905: 0xFB96, + 40607 - 11905: 0xF7EB, + 40608 - 11905: 0xFB97, + 40609 - 11905: 0xFB98, + 40610 - 11905: 0xFB99, + 40611 - 11905: 0xFB9A, + 40612 - 11905: 0xFB9B, + 40613 - 11905: 0xFB9C, + 40614 - 11905: 0xC2F3, + 40615 - 11905: 0xFB9D, + 40616 - 11905: 0xFB9E, + 40617 - 11905: 0xFB9F, + 40618 - 11905: 0xFBA0, + 40619 - 11905: 0xFC40, + 40620 - 11905: 0xFC41, + 40621 - 11905: 0xFC42, + 40622 - 11905: 0xFC43, + 40623 - 11905: 0xFC44, + 40624 - 11905: 0xFC45, + 40625 - 11905: 0xFC46, + 40626 - 11905: 0xFC47, + 40627 - 11905: 0xFC48, + 40628 - 11905: 0xF4F0, + 40629 - 11905: 0xFC49, + 40630 - 11905: 0xFC4A, + 40631 - 11905: 0xFC4B, + 40632 - 11905: 0xF4EF, + 40633 - 11905: 0xFC4C, + 40634 - 11905: 0xFC4D, + 40635 - 11905: 0xC2E9, + 40636 - 11905: 0xFC4E, + 40637 - 11905: 0xF7E1, + 40638 - 11905: 0xF7E2, + 40639 - 11905: 0xFC4F, + 40640 - 11905: 0xFC50, + 40641 - 11905: 0xFC51, + 40642 - 11905: 0xFC52, + 40643 - 11905: 0xFC53, + 40644 - 11905: 0xBBC6, + 40645 - 11905: 0xFC54, + 40646 - 11905: 0xFC55, + 40647 - 11905: 0xFC56, + 40648 - 11905: 0xFC57, + 40649 - 11905: 0xD9E4, + 40650 - 11905: 0xFC58, + 40651 - 11905: 0xFC59, + 40652 - 11905: 0xFC5A, + 40653 - 11905: 0xCAF2, + 40654 - 11905: 0xC0E8, + 40655 - 11905: 0xF0A4, + 40656 - 11905: 0xFC5B, + 40657 - 11905: 0xBADA, + 40658 - 11905: 0xFC5C, + 40659 - 11905: 0xFC5D, + 40660 - 11905: 0xC7AD, + 40661 - 11905: 0xFC5E, + 40662 - 11905: 0xFC5F, + 40663 - 11905: 0xFC60, + 40664 - 11905: 0xC4AC, + 40665 - 11905: 0xFC61, + 40666 - 11905: 0xFC62, + 40667 - 11905: 0xF7EC, + 40668 - 11905: 0xF7ED, + 40669 - 11905: 0xF7EE, + 40670 - 11905: 0xFC63, + 40671 - 11905: 0xF7F0, + 40672 - 11905: 0xF7EF, + 40673 - 11905: 0xFC64, + 40674 - 11905: 0xF7F1, + 40675 - 11905: 0xFC65, + 40676 - 11905: 0xFC66, + 40677 - 11905: 0xF7F4, + 40678 - 11905: 0xFC67, + 40679 - 11905: 0xF7F3, + 40680 - 11905: 0xFC68, + 40681 - 11905: 0xF7F2, + 40682 - 11905: 0xF7F5, + 40683 - 11905: 0xFC69, + 40684 - 11905: 0xFC6A, + 40685 - 11905: 0xFC6B, + 40686 - 11905: 0xFC6C, + 40687 - 11905: 0xF7F6, + 40688 - 11905: 0xFC6D, + 40689 - 11905: 0xFC6E, + 40690 - 11905: 0xFC6F, + 40691 - 11905: 0xFC70, + 40692 - 11905: 0xFC71, + 40693 - 11905: 0xFC72, + 40694 - 11905: 0xFC73, + 40695 - 11905: 0xFC74, + 40696 - 11905: 0xFC75, + 40697 - 11905: 0xEDE9, + 40698 - 11905: 0xFC76, + 40699 - 11905: 0xEDEA, + 40700 - 11905: 0xEDEB, + 40701 - 11905: 0xFC77, + 40702 - 11905: 0xF6BC, + 40703 - 11905: 0xFC78, + 40704 - 11905: 0xFC79, + 40705 - 11905: 0xFC7A, + 40706 - 11905: 0xFC7B, + 40707 - 11905: 0xFC7C, + 40708 - 11905: 0xFC7D, + 40709 - 11905: 0xFC7E, + 40710 - 11905: 0xFC80, + 40711 - 11905: 0xFC81, + 40712 - 11905: 0xFC82, + 40713 - 11905: 0xFC83, + 40714 - 11905: 0xFC84, + 40715 - 11905: 0xF6BD, + 40716 - 11905: 0xFC85, + 40717 - 11905: 0xF6BE, + 40718 - 11905: 0xB6A6, + 40719 - 11905: 0xFC86, + 40720 - 11905: 0xD8BE, + 40721 - 11905: 0xFC87, + 40722 - 11905: 0xFC88, + 40723 - 11905: 0xB9C4, + 40724 - 11905: 0xFC89, + 40725 - 11905: 0xFC8A, + 40726 - 11905: 0xFC8B, + 40727 - 11905: 0xD8BB, + 40728 - 11905: 0xFC8C, + 40729 - 11905: 0xDCB1, + 40730 - 11905: 0xFC8D, + 40731 - 11905: 0xFC8E, + 40732 - 11905: 0xFC8F, + 40733 - 11905: 0xFC90, + 40734 - 11905: 0xFC91, + 40735 - 11905: 0xFC92, + 40736 - 11905: 0xCAF3, + 40737 - 11905: 0xFC93, + 40738 - 11905: 0xF7F7, + 40739 - 11905: 0xFC94, + 40740 - 11905: 0xFC95, + 40741 - 11905: 0xFC96, + 40742 - 11905: 0xFC97, + 40743 - 11905: 0xFC98, + 40744 - 11905: 0xFC99, + 40745 - 11905: 0xFC9A, + 40746 - 11905: 0xFC9B, + 40747 - 11905: 0xFC9C, + 40748 - 11905: 0xF7F8, + 40749 - 11905: 0xFC9D, + 40750 - 11905: 0xFC9E, + 40751 - 11905: 0xF7F9, + 40752 - 11905: 0xFC9F, + 40753 - 11905: 0xFCA0, + 40754 - 11905: 0xFD40, + 40755 - 11905: 0xFD41, + 40756 - 11905: 0xFD42, + 40757 - 11905: 0xFD43, + 40758 - 11905: 0xFD44, + 40759 - 11905: 0xF7FB, + 40760 - 11905: 0xFD45, + 40761 - 11905: 0xF7FA, + 40762 - 11905: 0xFD46, + 40763 - 11905: 0xB1C7, + 40764 - 11905: 0xFD47, + 40765 - 11905: 0xF7FC, + 40766 - 11905: 0xF7FD, + 40767 - 11905: 0xFD48, + 40768 - 11905: 0xFD49, + 40769 - 11905: 0xFD4A, + 40770 - 11905: 0xFD4B, + 40771 - 11905: 0xFD4C, + 40772 - 11905: 0xF7FE, + 40773 - 11905: 0xFD4D, + 40774 - 11905: 0xFD4E, + 40775 - 11905: 0xFD4F, + 40776 - 11905: 0xFD50, + 40777 - 11905: 0xFD51, + 40778 - 11905: 0xFD52, + 40779 - 11905: 0xFD53, + 40780 - 11905: 0xFD54, + 40781 - 11905: 0xFD55, + 40782 - 11905: 0xFD56, + 40783 - 11905: 0xFD57, + 40784 - 11905: 0xC6EB, + 40785 - 11905: 0xECB4, + 40786 - 11905: 0xFD58, + 40787 - 11905: 0xFD59, + 40788 - 11905: 0xFD5A, + 40789 - 11905: 0xFD5B, + 40790 - 11905: 0xFD5C, + 40791 - 11905: 0xFD5D, + 40792 - 11905: 0xFD5E, + 40793 - 11905: 0xFD5F, + 40794 - 11905: 0xFD60, + 40795 - 11905: 0xFD61, + 40796 - 11905: 0xFD62, + 40797 - 11905: 0xFD63, + 40798 - 11905: 0xFD64, + 40799 - 11905: 0xFD65, + 40800 - 11905: 0xFD66, + 40801 - 11905: 0xFD67, + 40802 - 11905: 0xFD68, + 40803 - 11905: 0xFD69, + 40804 - 11905: 0xFD6A, + 40805 - 11905: 0xFD6B, + 40806 - 11905: 0xFD6C, + 40807 - 11905: 0xFD6D, + 40808 - 11905: 0xFD6E, + 40809 - 11905: 0xFD6F, + 40810 - 11905: 0xFD70, + 40811 - 11905: 0xFD71, + 40812 - 11905: 0xFD72, + 40813 - 11905: 0xFD73, + 40814 - 11905: 0xFD74, + 40815 - 11905: 0xFD75, + 40816 - 11905: 0xFD76, + 40817 - 11905: 0xFD77, + 40818 - 11905: 0xFD78, + 40819 - 11905: 0xFD79, + 40820 - 11905: 0xFD7A, + 40821 - 11905: 0xFD7B, + 40822 - 11905: 0xFD7C, + 40823 - 11905: 0xFD7D, + 40824 - 11905: 0xFD7E, + 40825 - 11905: 0xFD80, + 40826 - 11905: 0xFD81, + 40827 - 11905: 0xFD82, + 40828 - 11905: 0xFD83, + 40829 - 11905: 0xFD84, + 40830 - 11905: 0xFD85, + 40831 - 11905: 0xB3DD, + 40832 - 11905: 0xF6B3, + 40833 - 11905: 0xFD86, + 40834 - 11905: 0xFD87, + 40835 - 11905: 0xF6B4, + 40836 - 11905: 0xC1E4, + 40837 - 11905: 0xF6B5, + 40838 - 11905: 0xF6B6, + 40839 - 11905: 0xF6B7, + 40840 - 11905: 0xF6B8, + 40841 - 11905: 0xF6B9, + 40842 - 11905: 0xF6BA, + 40843 - 11905: 0xC8A3, + 40844 - 11905: 0xF6BB, + 40845 - 11905: 0xFD88, + 40846 - 11905: 0xFD89, + 40847 - 11905: 0xFD8A, + 40848 - 11905: 0xFD8B, + 40849 - 11905: 0xFD8C, + 40850 - 11905: 0xFD8D, + 40851 - 11905: 0xFD8E, + 40852 - 11905: 0xFD8F, + 40853 - 11905: 0xFD90, + 40854 - 11905: 0xFD91, + 40855 - 11905: 0xFD92, + 40856 - 11905: 0xFD93, + 40857 - 11905: 0xC1FA, + 40858 - 11905: 0xB9A8, + 40859 - 11905: 0xEDE8, + 40860 - 11905: 0xFD94, + 40861 - 11905: 0xFD95, + 40862 - 11905: 0xFD96, + 40863 - 11905: 0xB9EA, + 40864 - 11905: 0xD9DF, + 40865 - 11905: 0xFD97, + 40866 - 11905: 0xFD98, + 40867 - 11905: 0xFD99, + 40868 - 11905: 0xFD9A, + 40869 - 11905: 0xFD9B, +} + +const encode1Low, encode1High = 8208, 9795 + +var encode1 = [...]uint16{ + 8208 - 8208: 0xA95C, + 8211 - 8208: 0xA843, + 8212 - 8208: 0xA1AA, + 8213 - 8208: 0xA844, + 8214 - 8208: 0xA1AC, + 8216 - 8208: 0xA1AE, + 8217 - 8208: 0xA1AF, + 8220 - 8208: 0xA1B0, + 8221 - 8208: 0xA1B1, + 8229 - 8208: 0xA845, + 8230 - 8208: 0xA1AD, + 8240 - 8208: 0xA1EB, + 8242 - 8208: 0xA1E4, + 8243 - 8208: 0xA1E5, + 8245 - 8208: 0xA846, + 8251 - 8208: 0xA1F9, + 8364 - 8208: 0xA2E3, + 8451 - 8208: 0xA1E6, + 8453 - 8208: 0xA847, + 8457 - 8208: 0xA848, + 8470 - 8208: 0xA1ED, + 8481 - 8208: 0xA959, + 8544 - 8208: 0xA2F1, + 8545 - 8208: 0xA2F2, + 8546 - 8208: 0xA2F3, + 8547 - 8208: 0xA2F4, + 8548 - 8208: 0xA2F5, + 8549 - 8208: 0xA2F6, + 8550 - 8208: 0xA2F7, + 8551 - 8208: 0xA2F8, + 8552 - 8208: 0xA2F9, + 8553 - 8208: 0xA2FA, + 8554 - 8208: 0xA2FB, + 8555 - 8208: 0xA2FC, + 8560 - 8208: 0xA2A1, + 8561 - 8208: 0xA2A2, + 8562 - 8208: 0xA2A3, + 8563 - 8208: 0xA2A4, + 8564 - 8208: 0xA2A5, + 8565 - 8208: 0xA2A6, + 8566 - 8208: 0xA2A7, + 8567 - 8208: 0xA2A8, + 8568 - 8208: 0xA2A9, + 8569 - 8208: 0xA2AA, + 8592 - 8208: 0xA1FB, + 8593 - 8208: 0xA1FC, + 8594 - 8208: 0xA1FA, + 8595 - 8208: 0xA1FD, + 8598 - 8208: 0xA849, + 8599 - 8208: 0xA84A, + 8600 - 8208: 0xA84B, + 8601 - 8208: 0xA84C, + 8712 - 8208: 0xA1CA, + 8719 - 8208: 0xA1C7, + 8721 - 8208: 0xA1C6, + 8725 - 8208: 0xA84D, + 8730 - 8208: 0xA1CC, + 8733 - 8208: 0xA1D8, + 8734 - 8208: 0xA1DE, + 8735 - 8208: 0xA84E, + 8736 - 8208: 0xA1CF, + 8739 - 8208: 0xA84F, + 8741 - 8208: 0xA1CE, + 8743 - 8208: 0xA1C4, + 8744 - 8208: 0xA1C5, + 8745 - 8208: 0xA1C9, + 8746 - 8208: 0xA1C8, + 8747 - 8208: 0xA1D2, + 8750 - 8208: 0xA1D3, + 8756 - 8208: 0xA1E0, + 8757 - 8208: 0xA1DF, + 8758 - 8208: 0xA1C3, + 8759 - 8208: 0xA1CB, + 8765 - 8208: 0xA1D7, + 8776 - 8208: 0xA1D6, + 8780 - 8208: 0xA1D5, + 8786 - 8208: 0xA850, + 8800 - 8208: 0xA1D9, + 8801 - 8208: 0xA1D4, + 8804 - 8208: 0xA1DC, + 8805 - 8208: 0xA1DD, + 8806 - 8208: 0xA851, + 8807 - 8208: 0xA852, + 8814 - 8208: 0xA1DA, + 8815 - 8208: 0xA1DB, + 8853 - 8208: 0xA892, + 8857 - 8208: 0xA1D1, + 8869 - 8208: 0xA1CD, + 8895 - 8208: 0xA853, + 8978 - 8208: 0xA1D0, + 9312 - 8208: 0xA2D9, + 9313 - 8208: 0xA2DA, + 9314 - 8208: 0xA2DB, + 9315 - 8208: 0xA2DC, + 9316 - 8208: 0xA2DD, + 9317 - 8208: 0xA2DE, + 9318 - 8208: 0xA2DF, + 9319 - 8208: 0xA2E0, + 9320 - 8208: 0xA2E1, + 9321 - 8208: 0xA2E2, + 9332 - 8208: 0xA2C5, + 9333 - 8208: 0xA2C6, + 9334 - 8208: 0xA2C7, + 9335 - 8208: 0xA2C8, + 9336 - 8208: 0xA2C9, + 9337 - 8208: 0xA2CA, + 9338 - 8208: 0xA2CB, + 9339 - 8208: 0xA2CC, + 9340 - 8208: 0xA2CD, + 9341 - 8208: 0xA2CE, + 9342 - 8208: 0xA2CF, + 9343 - 8208: 0xA2D0, + 9344 - 8208: 0xA2D1, + 9345 - 8208: 0xA2D2, + 9346 - 8208: 0xA2D3, + 9347 - 8208: 0xA2D4, + 9348 - 8208: 0xA2D5, + 9349 - 8208: 0xA2D6, + 9350 - 8208: 0xA2D7, + 9351 - 8208: 0xA2D8, + 9352 - 8208: 0xA2B1, + 9353 - 8208: 0xA2B2, + 9354 - 8208: 0xA2B3, + 9355 - 8208: 0xA2B4, + 9356 - 8208: 0xA2B5, + 9357 - 8208: 0xA2B6, + 9358 - 8208: 0xA2B7, + 9359 - 8208: 0xA2B8, + 9360 - 8208: 0xA2B9, + 9361 - 8208: 0xA2BA, + 9362 - 8208: 0xA2BB, + 9363 - 8208: 0xA2BC, + 9364 - 8208: 0xA2BD, + 9365 - 8208: 0xA2BE, + 9366 - 8208: 0xA2BF, + 9367 - 8208: 0xA2C0, + 9368 - 8208: 0xA2C1, + 9369 - 8208: 0xA2C2, + 9370 - 8208: 0xA2C3, + 9371 - 8208: 0xA2C4, + 9472 - 8208: 0xA9A4, + 9473 - 8208: 0xA9A5, + 9474 - 8208: 0xA9A6, + 9475 - 8208: 0xA9A7, + 9476 - 8208: 0xA9A8, + 9477 - 8208: 0xA9A9, + 9478 - 8208: 0xA9AA, + 9479 - 8208: 0xA9AB, + 9480 - 8208: 0xA9AC, + 9481 - 8208: 0xA9AD, + 9482 - 8208: 0xA9AE, + 9483 - 8208: 0xA9AF, + 9484 - 8208: 0xA9B0, + 9485 - 8208: 0xA9B1, + 9486 - 8208: 0xA9B2, + 9487 - 8208: 0xA9B3, + 9488 - 8208: 0xA9B4, + 9489 - 8208: 0xA9B5, + 9490 - 8208: 0xA9B6, + 9491 - 8208: 0xA9B7, + 9492 - 8208: 0xA9B8, + 9493 - 8208: 0xA9B9, + 9494 - 8208: 0xA9BA, + 9495 - 8208: 0xA9BB, + 9496 - 8208: 0xA9BC, + 9497 - 8208: 0xA9BD, + 9498 - 8208: 0xA9BE, + 9499 - 8208: 0xA9BF, + 9500 - 8208: 0xA9C0, + 9501 - 8208: 0xA9C1, + 9502 - 8208: 0xA9C2, + 9503 - 8208: 0xA9C3, + 9504 - 8208: 0xA9C4, + 9505 - 8208: 0xA9C5, + 9506 - 8208: 0xA9C6, + 9507 - 8208: 0xA9C7, + 9508 - 8208: 0xA9C8, + 9509 - 8208: 0xA9C9, + 9510 - 8208: 0xA9CA, + 9511 - 8208: 0xA9CB, + 9512 - 8208: 0xA9CC, + 9513 - 8208: 0xA9CD, + 9514 - 8208: 0xA9CE, + 9515 - 8208: 0xA9CF, + 9516 - 8208: 0xA9D0, + 9517 - 8208: 0xA9D1, + 9518 - 8208: 0xA9D2, + 9519 - 8208: 0xA9D3, + 9520 - 8208: 0xA9D4, + 9521 - 8208: 0xA9D5, + 9522 - 8208: 0xA9D6, + 9523 - 8208: 0xA9D7, + 9524 - 8208: 0xA9D8, + 9525 - 8208: 0xA9D9, + 9526 - 8208: 0xA9DA, + 9527 - 8208: 0xA9DB, + 9528 - 8208: 0xA9DC, + 9529 - 8208: 0xA9DD, + 9530 - 8208: 0xA9DE, + 9531 - 8208: 0xA9DF, + 9532 - 8208: 0xA9E0, + 9533 - 8208: 0xA9E1, + 9534 - 8208: 0xA9E2, + 9535 - 8208: 0xA9E3, + 9536 - 8208: 0xA9E4, + 9537 - 8208: 0xA9E5, + 9538 - 8208: 0xA9E6, + 9539 - 8208: 0xA9E7, + 9540 - 8208: 0xA9E8, + 9541 - 8208: 0xA9E9, + 9542 - 8208: 0xA9EA, + 9543 - 8208: 0xA9EB, + 9544 - 8208: 0xA9EC, + 9545 - 8208: 0xA9ED, + 9546 - 8208: 0xA9EE, + 9547 - 8208: 0xA9EF, + 9552 - 8208: 0xA854, + 9553 - 8208: 0xA855, + 9554 - 8208: 0xA856, + 9555 - 8208: 0xA857, + 9556 - 8208: 0xA858, + 9557 - 8208: 0xA859, + 9558 - 8208: 0xA85A, + 9559 - 8208: 0xA85B, + 9560 - 8208: 0xA85C, + 9561 - 8208: 0xA85D, + 9562 - 8208: 0xA85E, + 9563 - 8208: 0xA85F, + 9564 - 8208: 0xA860, + 9565 - 8208: 0xA861, + 9566 - 8208: 0xA862, + 9567 - 8208: 0xA863, + 9568 - 8208: 0xA864, + 9569 - 8208: 0xA865, + 9570 - 8208: 0xA866, + 9571 - 8208: 0xA867, + 9572 - 8208: 0xA868, + 9573 - 8208: 0xA869, + 9574 - 8208: 0xA86A, + 9575 - 8208: 0xA86B, + 9576 - 8208: 0xA86C, + 9577 - 8208: 0xA86D, + 9578 - 8208: 0xA86E, + 9579 - 8208: 0xA86F, + 9580 - 8208: 0xA870, + 9581 - 8208: 0xA871, + 9582 - 8208: 0xA872, + 9583 - 8208: 0xA873, + 9584 - 8208: 0xA874, + 9585 - 8208: 0xA875, + 9586 - 8208: 0xA876, + 9587 - 8208: 0xA877, + 9601 - 8208: 0xA878, + 9602 - 8208: 0xA879, + 9603 - 8208: 0xA87A, + 9604 - 8208: 0xA87B, + 9605 - 8208: 0xA87C, + 9606 - 8208: 0xA87D, + 9607 - 8208: 0xA87E, + 9608 - 8208: 0xA880, + 9609 - 8208: 0xA881, + 9610 - 8208: 0xA882, + 9611 - 8208: 0xA883, + 9612 - 8208: 0xA884, + 9613 - 8208: 0xA885, + 9614 - 8208: 0xA886, + 9615 - 8208: 0xA887, + 9619 - 8208: 0xA888, + 9620 - 8208: 0xA889, + 9621 - 8208: 0xA88A, + 9632 - 8208: 0xA1F6, + 9633 - 8208: 0xA1F5, + 9650 - 8208: 0xA1F8, + 9651 - 8208: 0xA1F7, + 9660 - 8208: 0xA88B, + 9661 - 8208: 0xA88C, + 9670 - 8208: 0xA1F4, + 9671 - 8208: 0xA1F3, + 9675 - 8208: 0xA1F0, + 9678 - 8208: 0xA1F2, + 9679 - 8208: 0xA1F1, + 9698 - 8208: 0xA88D, + 9699 - 8208: 0xA88E, + 9700 - 8208: 0xA88F, + 9701 - 8208: 0xA890, + 9733 - 8208: 0xA1EF, + 9734 - 8208: 0xA1EE, + 9737 - 8208: 0xA891, + 9792 - 8208: 0xA1E2, + 9794 - 8208: 0xA1E1, +} + +const encode2Low, encode2High = 164, 1106 + +var encode2 = [...]uint16{ + 164 - 164: 0xA1E8, + 167 - 164: 0xA1EC, + 168 - 164: 0xA1A7, + 176 - 164: 0xA1E3, + 177 - 164: 0xA1C0, + 183 - 164: 0xA1A4, + 215 - 164: 0xA1C1, + 224 - 164: 0xA8A4, + 225 - 164: 0xA8A2, + 232 - 164: 0xA8A8, + 233 - 164: 0xA8A6, + 234 - 164: 0xA8BA, + 236 - 164: 0xA8AC, + 237 - 164: 0xA8AA, + 242 - 164: 0xA8B0, + 243 - 164: 0xA8AE, + 247 - 164: 0xA1C2, + 249 - 164: 0xA8B4, + 250 - 164: 0xA8B2, + 252 - 164: 0xA8B9, + 257 - 164: 0xA8A1, + 275 - 164: 0xA8A5, + 283 - 164: 0xA8A7, + 299 - 164: 0xA8A9, + 324 - 164: 0xA8BD, + 328 - 164: 0xA8BE, + 333 - 164: 0xA8AD, + 363 - 164: 0xA8B1, + 462 - 164: 0xA8A3, + 464 - 164: 0xA8AB, + 466 - 164: 0xA8AF, + 468 - 164: 0xA8B3, + 470 - 164: 0xA8B5, + 472 - 164: 0xA8B6, + 474 - 164: 0xA8B7, + 476 - 164: 0xA8B8, + 505 - 164: 0xA8BF, + 593 - 164: 0xA8BB, + 609 - 164: 0xA8C0, + 711 - 164: 0xA1A6, + 713 - 164: 0xA1A5, + 714 - 164: 0xA840, + 715 - 164: 0xA841, + 729 - 164: 0xA842, + 913 - 164: 0xA6A1, + 914 - 164: 0xA6A2, + 915 - 164: 0xA6A3, + 916 - 164: 0xA6A4, + 917 - 164: 0xA6A5, + 918 - 164: 0xA6A6, + 919 - 164: 0xA6A7, + 920 - 164: 0xA6A8, + 921 - 164: 0xA6A9, + 922 - 164: 0xA6AA, + 923 - 164: 0xA6AB, + 924 - 164: 0xA6AC, + 925 - 164: 0xA6AD, + 926 - 164: 0xA6AE, + 927 - 164: 0xA6AF, + 928 - 164: 0xA6B0, + 929 - 164: 0xA6B1, + 931 - 164: 0xA6B2, + 932 - 164: 0xA6B3, + 933 - 164: 0xA6B4, + 934 - 164: 0xA6B5, + 935 - 164: 0xA6B6, + 936 - 164: 0xA6B7, + 937 - 164: 0xA6B8, + 945 - 164: 0xA6C1, + 946 - 164: 0xA6C2, + 947 - 164: 0xA6C3, + 948 - 164: 0xA6C4, + 949 - 164: 0xA6C5, + 950 - 164: 0xA6C6, + 951 - 164: 0xA6C7, + 952 - 164: 0xA6C8, + 953 - 164: 0xA6C9, + 954 - 164: 0xA6CA, + 955 - 164: 0xA6CB, + 956 - 164: 0xA6CC, + 957 - 164: 0xA6CD, + 958 - 164: 0xA6CE, + 959 - 164: 0xA6CF, + 960 - 164: 0xA6D0, + 961 - 164: 0xA6D1, + 963 - 164: 0xA6D2, + 964 - 164: 0xA6D3, + 965 - 164: 0xA6D4, + 966 - 164: 0xA6D5, + 967 - 164: 0xA6D6, + 968 - 164: 0xA6D7, + 969 - 164: 0xA6D8, + 1025 - 164: 0xA7A7, + 1040 - 164: 0xA7A1, + 1041 - 164: 0xA7A2, + 1042 - 164: 0xA7A3, + 1043 - 164: 0xA7A4, + 1044 - 164: 0xA7A5, + 1045 - 164: 0xA7A6, + 1046 - 164: 0xA7A8, + 1047 - 164: 0xA7A9, + 1048 - 164: 0xA7AA, + 1049 - 164: 0xA7AB, + 1050 - 164: 0xA7AC, + 1051 - 164: 0xA7AD, + 1052 - 164: 0xA7AE, + 1053 - 164: 0xA7AF, + 1054 - 164: 0xA7B0, + 1055 - 164: 0xA7B1, + 1056 - 164: 0xA7B2, + 1057 - 164: 0xA7B3, + 1058 - 164: 0xA7B4, + 1059 - 164: 0xA7B5, + 1060 - 164: 0xA7B6, + 1061 - 164: 0xA7B7, + 1062 - 164: 0xA7B8, + 1063 - 164: 0xA7B9, + 1064 - 164: 0xA7BA, + 1065 - 164: 0xA7BB, + 1066 - 164: 0xA7BC, + 1067 - 164: 0xA7BD, + 1068 - 164: 0xA7BE, + 1069 - 164: 0xA7BF, + 1070 - 164: 0xA7C0, + 1071 - 164: 0xA7C1, + 1072 - 164: 0xA7D1, + 1073 - 164: 0xA7D2, + 1074 - 164: 0xA7D3, + 1075 - 164: 0xA7D4, + 1076 - 164: 0xA7D5, + 1077 - 164: 0xA7D6, + 1078 - 164: 0xA7D8, + 1079 - 164: 0xA7D9, + 1080 - 164: 0xA7DA, + 1081 - 164: 0xA7DB, + 1082 - 164: 0xA7DC, + 1083 - 164: 0xA7DD, + 1084 - 164: 0xA7DE, + 1085 - 164: 0xA7DF, + 1086 - 164: 0xA7E0, + 1087 - 164: 0xA7E1, + 1088 - 164: 0xA7E2, + 1089 - 164: 0xA7E3, + 1090 - 164: 0xA7E4, + 1091 - 164: 0xA7E5, + 1092 - 164: 0xA7E6, + 1093 - 164: 0xA7E7, + 1094 - 164: 0xA7E8, + 1095 - 164: 0xA7E9, + 1096 - 164: 0xA7EA, + 1097 - 164: 0xA7EB, + 1098 - 164: 0xA7EC, + 1099 - 164: 0xA7ED, + 1100 - 164: 0xA7EE, + 1101 - 164: 0xA7EF, + 1102 - 164: 0xA7F0, + 1103 - 164: 0xA7F1, + 1105 - 164: 0xA7D7, +} + +const encode3Low, encode3High = 65072, 65510 + +var encode3 = [...]uint16{ + 65072 - 65072: 0xA955, + 65073 - 65072: 0xA6F2, + 65075 - 65072: 0xA6F4, + 65076 - 65072: 0xA6F5, + 65077 - 65072: 0xA6E0, + 65078 - 65072: 0xA6E1, + 65079 - 65072: 0xA6F0, + 65080 - 65072: 0xA6F1, + 65081 - 65072: 0xA6E2, + 65082 - 65072: 0xA6E3, + 65083 - 65072: 0xA6EE, + 65084 - 65072: 0xA6EF, + 65085 - 65072: 0xA6E6, + 65086 - 65072: 0xA6E7, + 65087 - 65072: 0xA6E4, + 65088 - 65072: 0xA6E5, + 65089 - 65072: 0xA6E8, + 65090 - 65072: 0xA6E9, + 65091 - 65072: 0xA6EA, + 65092 - 65072: 0xA6EB, + 65097 - 65072: 0xA968, + 65098 - 65072: 0xA969, + 65099 - 65072: 0xA96A, + 65100 - 65072: 0xA96B, + 65101 - 65072: 0xA96C, + 65102 - 65072: 0xA96D, + 65103 - 65072: 0xA96E, + 65104 - 65072: 0xA96F, + 65105 - 65072: 0xA970, + 65106 - 65072: 0xA971, + 65108 - 65072: 0xA972, + 65109 - 65072: 0xA973, + 65110 - 65072: 0xA974, + 65111 - 65072: 0xA975, + 65113 - 65072: 0xA976, + 65114 - 65072: 0xA977, + 65115 - 65072: 0xA978, + 65116 - 65072: 0xA979, + 65117 - 65072: 0xA97A, + 65118 - 65072: 0xA97B, + 65119 - 65072: 0xA97C, + 65120 - 65072: 0xA97D, + 65121 - 65072: 0xA97E, + 65122 - 65072: 0xA980, + 65123 - 65072: 0xA981, + 65124 - 65072: 0xA982, + 65125 - 65072: 0xA983, + 65126 - 65072: 0xA984, + 65128 - 65072: 0xA985, + 65129 - 65072: 0xA986, + 65130 - 65072: 0xA987, + 65131 - 65072: 0xA988, + 65281 - 65072: 0xA3A1, + 65282 - 65072: 0xA3A2, + 65283 - 65072: 0xA3A3, + 65284 - 65072: 0xA1E7, + 65285 - 65072: 0xA3A5, + 65286 - 65072: 0xA3A6, + 65287 - 65072: 0xA3A7, + 65288 - 65072: 0xA3A8, + 65289 - 65072: 0xA3A9, + 65290 - 65072: 0xA3AA, + 65291 - 65072: 0xA3AB, + 65292 - 65072: 0xA3AC, + 65293 - 65072: 0xA3AD, + 65294 - 65072: 0xA3AE, + 65295 - 65072: 0xA3AF, + 65296 - 65072: 0xA3B0, + 65297 - 65072: 0xA3B1, + 65298 - 65072: 0xA3B2, + 65299 - 65072: 0xA3B3, + 65300 - 65072: 0xA3B4, + 65301 - 65072: 0xA3B5, + 65302 - 65072: 0xA3B6, + 65303 - 65072: 0xA3B7, + 65304 - 65072: 0xA3B8, + 65305 - 65072: 0xA3B9, + 65306 - 65072: 0xA3BA, + 65307 - 65072: 0xA3BB, + 65308 - 65072: 0xA3BC, + 65309 - 65072: 0xA3BD, + 65310 - 65072: 0xA3BE, + 65311 - 65072: 0xA3BF, + 65312 - 65072: 0xA3C0, + 65313 - 65072: 0xA3C1, + 65314 - 65072: 0xA3C2, + 65315 - 65072: 0xA3C3, + 65316 - 65072: 0xA3C4, + 65317 - 65072: 0xA3C5, + 65318 - 65072: 0xA3C6, + 65319 - 65072: 0xA3C7, + 65320 - 65072: 0xA3C8, + 65321 - 65072: 0xA3C9, + 65322 - 65072: 0xA3CA, + 65323 - 65072: 0xA3CB, + 65324 - 65072: 0xA3CC, + 65325 - 65072: 0xA3CD, + 65326 - 65072: 0xA3CE, + 65327 - 65072: 0xA3CF, + 65328 - 65072: 0xA3D0, + 65329 - 65072: 0xA3D1, + 65330 - 65072: 0xA3D2, + 65331 - 65072: 0xA3D3, + 65332 - 65072: 0xA3D4, + 65333 - 65072: 0xA3D5, + 65334 - 65072: 0xA3D6, + 65335 - 65072: 0xA3D7, + 65336 - 65072: 0xA3D8, + 65337 - 65072: 0xA3D9, + 65338 - 65072: 0xA3DA, + 65339 - 65072: 0xA3DB, + 65340 - 65072: 0xA3DC, + 65341 - 65072: 0xA3DD, + 65342 - 65072: 0xA3DE, + 65343 - 65072: 0xA3DF, + 65344 - 65072: 0xA3E0, + 65345 - 65072: 0xA3E1, + 65346 - 65072: 0xA3E2, + 65347 - 65072: 0xA3E3, + 65348 - 65072: 0xA3E4, + 65349 - 65072: 0xA3E5, + 65350 - 65072: 0xA3E6, + 65351 - 65072: 0xA3E7, + 65352 - 65072: 0xA3E8, + 65353 - 65072: 0xA3E9, + 65354 - 65072: 0xA3EA, + 65355 - 65072: 0xA3EB, + 65356 - 65072: 0xA3EC, + 65357 - 65072: 0xA3ED, + 65358 - 65072: 0xA3EE, + 65359 - 65072: 0xA3EF, + 65360 - 65072: 0xA3F0, + 65361 - 65072: 0xA3F1, + 65362 - 65072: 0xA3F2, + 65363 - 65072: 0xA3F3, + 65364 - 65072: 0xA3F4, + 65365 - 65072: 0xA3F5, + 65366 - 65072: 0xA3F6, + 65367 - 65072: 0xA3F7, + 65368 - 65072: 0xA3F8, + 65369 - 65072: 0xA3F9, + 65370 - 65072: 0xA3FA, + 65371 - 65072: 0xA3FB, + 65372 - 65072: 0xA3FC, + 65373 - 65072: 0xA3FD, + 65374 - 65072: 0xA1AB, + 65504 - 65072: 0xA1E9, + 65505 - 65072: 0xA1EA, + 65506 - 65072: 0xA956, + 65507 - 65072: 0xA3FE, + 65508 - 65072: 0xA957, + 65509 - 65072: 0xA3A4, +} + +const encode4Low, encode4High = 63788, 64042 + +var encode4 = [...]uint16{ + 63788 - 63788: 0xFD9C, + 63865 - 63788: 0xFD9D, + 63893 - 63788: 0xFD9E, + 63975 - 63788: 0xFD9F, + 63985 - 63788: 0xFDA0, + 64012 - 63788: 0xFE40, + 64013 - 63788: 0xFE41, + 64014 - 63788: 0xFE42, + 64015 - 63788: 0xFE43, + 64017 - 63788: 0xFE44, + 64019 - 63788: 0xFE45, + 64020 - 63788: 0xFE46, + 64024 - 63788: 0xFE47, + 64031 - 63788: 0xFE48, + 64032 - 63788: 0xFE49, + 64033 - 63788: 0xFE4A, + 64035 - 63788: 0xFE4B, + 64036 - 63788: 0xFE4C, + 64039 - 63788: 0xFE4D, + 64040 - 63788: 0xFE4E, + 64041 - 63788: 0xFE4F, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go new file mode 100644 index 000000000000..1fcddde08297 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go @@ -0,0 +1,199 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traditionalchinese + +import ( + "unicode/utf8" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal" + "golang.org/x/text/encoding/internal/identifier" + "golang.org/x/text/transform" +) + +// All is a list of all defined encodings in this package. +var All = []encoding.Encoding{Big5} + +// Big5 is the Big5 encoding, also known as Code Page 950. +var Big5 encoding.Encoding = &big5 + +var big5 = internal.Encoding{ + &internal.SimpleEncoding{big5Decoder{}, big5Encoder{}}, + "Big5", + identifier.Big5, +} + +type big5Decoder struct{ transform.NopResetter } + +func (big5Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size, s := rune(0), 0, "" +loop: + for ; nSrc < len(src); nSrc += size { + switch c0 := src[nSrc]; { + case c0 < utf8.RuneSelf: + r, size = rune(c0), 1 + + case 0x81 <= c0 && c0 < 0xff: + if nSrc+1 >= len(src) { + if !atEOF { + err = transform.ErrShortSrc + break loop + } + r, size = utf8.RuneError, 1 + goto write + } + c1 := src[nSrc+1] + switch { + case 0x40 <= c1 && c1 < 0x7f: + c1 -= 0x40 + case 0xa1 <= c1 && c1 < 0xff: + c1 -= 0x62 + case c1 < 0x40: + r, size = utf8.RuneError, 1 + goto write + default: + r, size = utf8.RuneError, 2 + goto write + } + r, size = '\ufffd', 2 + if i := int(c0-0x81)*157 + int(c1); i < len(decode) { + if 1133 <= i && i < 1167 { + // The two-rune special cases for LATIN CAPITAL / SMALL E WITH CIRCUMFLEX + // AND MACRON / CARON are from http://encoding.spec.whatwg.org/#big5 + switch i { + case 1133: + s = "\u00CA\u0304" + goto writeStr + case 1135: + s = "\u00CA\u030C" + goto writeStr + case 1164: + s = "\u00EA\u0304" + goto writeStr + case 1166: + s = "\u00EA\u030C" + goto writeStr + } + } + r = rune(decode[i]) + if r == 0 { + r = '\ufffd' + } + } + + default: + r, size = utf8.RuneError, 1 + } + + write: + if nDst+utf8.RuneLen(r) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += utf8.EncodeRune(dst[nDst:], r) + continue loop + + writeStr: + if nDst+len(s) > len(dst) { + err = transform.ErrShortDst + break loop + } + nDst += copy(dst[nDst:], s) + continue loop + } + return nDst, nSrc, err +} + +type big5Encoder struct{ transform.NopResetter } + +func (big5Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { + r, size := rune(0), 0 + for ; nSrc < len(src); nSrc += size { + r = rune(src[nSrc]) + + // Decode a 1-byte rune. + if r < utf8.RuneSelf { + size = 1 + if nDst >= len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst] = uint8(r) + nDst++ + continue + + } else { + // Decode a multi-byte rune. + r, size = utf8.DecodeRune(src[nSrc:]) + if size == 1 { + // All valid runes of size 1 (those below utf8.RuneSelf) were + // handled above. We have invalid UTF-8 or we haven't seen the + // full character yet. + if !atEOF && !utf8.FullRune(src[nSrc:]) { + err = transform.ErrShortSrc + break + } + } + } + + if r >= utf8.RuneSelf { + // func init checks that the switch covers all tables. + switch { + case encode0Low <= r && r < encode0High: + if r = rune(encode0[r-encode0Low]); r != 0 { + goto write2 + } + case encode1Low <= r && r < encode1High: + if r = rune(encode1[r-encode1Low]); r != 0 { + goto write2 + } + case encode2Low <= r && r < encode2High: + if r = rune(encode2[r-encode2Low]); r != 0 { + goto write2 + } + case encode3Low <= r && r < encode3High: + if r = rune(encode3[r-encode3Low]); r != 0 { + goto write2 + } + case encode4Low <= r && r < encode4High: + if r = rune(encode4[r-encode4Low]); r != 0 { + goto write2 + } + case encode5Low <= r && r < encode5High: + if r = rune(encode5[r-encode5Low]); r != 0 { + goto write2 + } + case encode6Low <= r && r < encode6High: + if r = rune(encode6[r-encode6Low]); r != 0 { + goto write2 + } + case encode7Low <= r && r < encode7High: + if r = rune(encode7[r-encode7Low]); r != 0 { + goto write2 + } + } + err = internal.ErrASCIIReplacement + break + } + + write2: + if nDst+2 > len(dst) { + err = transform.ErrShortDst + break + } + dst[nDst+0] = uint8(r >> 8) + dst[nDst+1] = uint8(r) + nDst += 2 + continue + } + return nDst, nSrc, err +} + +func init() { + // Check that the hard-coded encode switch covers all tables. + if numEncodeTables != 8 { + panic("bad numEncodeTables") + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go b/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go new file mode 100644 index 000000000000..d909e38e5e05 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go @@ -0,0 +1,37142 @@ +// generated by go run maketables.go; DO NOT EDIT + +// Package traditionalchinese provides Traditional Chinese encodings such as Big5. +package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese" + +// decode is the decoding table from Big5 code to Unicode. +// It is defined at http://encoding.spec.whatwg.org/index-big5.txt +var decode = [...]uint32{ + 942: 0x000043F0, + 943: 0x00004C32, + 944: 0x00004603, + 945: 0x000045A6, + 946: 0x00004578, + 947: 0x00027267, + 948: 0x00004D77, + 949: 0x000045B3, + 950: 0x00027CB1, + 951: 0x00004CE2, + 952: 0x00027CC5, + 953: 0x00003B95, + 954: 0x00004736, + 955: 0x00004744, + 956: 0x00004C47, + 957: 0x00004C40, + 958: 0x000242BF, + 959: 0x00023617, + 960: 0x00027352, + 961: 0x00026E8B, + 962: 0x000270D2, + 963: 0x00004C57, + 964: 0x0002A351, + 965: 0x0000474F, + 966: 0x000045DA, + 967: 0x00004C85, + 968: 0x00027C6C, + 969: 0x00004D07, + 970: 0x00004AA4, + 971: 0x000046A1, + 972: 0x00026B23, + 973: 0x00007225, + 974: 0x00025A54, + 975: 0x00021A63, + 976: 0x00023E06, + 977: 0x00023F61, + 978: 0x0000664D, + 979: 0x000056FB, + 981: 0x00007D95, + 982: 0x0000591D, + 983: 0x00028BB9, + 984: 0x00003DF4, + 985: 0x00009734, + 986: 0x00027BEF, + 987: 0x00005BDB, + 988: 0x00021D5E, + 989: 0x00005AA4, + 990: 0x00003625, + 991: 0x00029EB0, + 992: 0x00005AD1, + 993: 0x00005BB7, + 994: 0x00005CFC, + 995: 0x0000676E, + 996: 0x00008593, + 997: 0x00029945, + 998: 0x00007461, + 999: 0x0000749D, + 1000: 0x00003875, + 1001: 0x00021D53, + 1002: 0x0002369E, + 1003: 0x00026021, + 1004: 0x00003EEC, + 1005: 0x000258DE, + 1006: 0x00003AF5, + 1007: 0x00007AFC, + 1008: 0x00009F97, + 1009: 0x00024161, + 1010: 0x0002890D, + 1011: 0x000231EA, + 1012: 0x00020A8A, + 1013: 0x0002325E, + 1014: 0x0000430A, + 1015: 0x00008484, + 1016: 0x00009F96, + 1017: 0x0000942F, + 1018: 0x00004930, + 1019: 0x00008613, + 1020: 0x00005896, + 1021: 0x0000974A, + 1022: 0x00009218, + 1023: 0x000079D0, + 1024: 0x00007A32, + 1025: 0x00006660, + 1026: 0x00006A29, + 1027: 0x0000889D, + 1028: 0x0000744C, + 1029: 0x00007BC5, + 1030: 0x00006782, + 1031: 0x00007A2C, + 1032: 0x0000524F, + 1033: 0x00009046, + 1034: 0x000034E6, + 1035: 0x000073C4, + 1036: 0x00025DB9, + 1037: 0x000074C6, + 1038: 0x00009FC7, + 1039: 0x000057B3, + 1040: 0x0000492F, + 1041: 0x0000544C, + 1042: 0x00004131, + 1043: 0x0002368E, + 1044: 0x00005818, + 1045: 0x00007A72, + 1046: 0x00027B65, + 1047: 0x00008B8F, + 1048: 0x000046AE, + 1049: 0x00026E88, + 1050: 0x00004181, + 1051: 0x00025D99, + 1052: 0x00007BAE, + 1053: 0x000224BC, + 1054: 0x00009FC8, + 1055: 0x000224C1, + 1056: 0x000224C9, + 1057: 0x000224CC, + 1058: 0x00009FC9, + 1059: 0x00008504, + 1060: 0x000235BB, + 1061: 0x000040B4, + 1062: 0x00009FCA, + 1063: 0x000044E1, + 1064: 0x0002ADFF, + 1065: 0x000062C1, + 1066: 0x0000706E, + 1067: 0x00009FCB, + 1099: 0x000031C0, + 1100: 0x000031C1, + 1101: 0x000031C2, + 1102: 0x000031C3, + 1103: 0x000031C4, + 1104: 0x0002010C, + 1105: 0x000031C5, + 1106: 0x000200D1, + 1107: 0x000200CD, + 1108: 0x000031C6, + 1109: 0x000031C7, + 1110: 0x000200CB, + 1111: 0x00021FE8, + 1112: 0x000031C8, + 1113: 0x000200CA, + 1114: 0x000031C9, + 1115: 0x000031CA, + 1116: 0x000031CB, + 1117: 0x000031CC, + 1118: 0x0002010E, + 1119: 0x000031CD, + 1120: 0x000031CE, + 1121: 0x00000100, + 1122: 0x000000C1, + 1123: 0x000001CD, + 1124: 0x000000C0, + 1125: 0x00000112, + 1126: 0x000000C9, + 1127: 0x0000011A, + 1128: 0x000000C8, + 1129: 0x0000014C, + 1130: 0x000000D3, + 1131: 0x000001D1, + 1132: 0x000000D2, + 1134: 0x00001EBE, + 1136: 0x00001EC0, + 1137: 0x000000CA, + 1138: 0x00000101, + 1139: 0x000000E1, + 1140: 0x000001CE, + 1141: 0x000000E0, + 1142: 0x00000251, + 1143: 0x00000113, + 1144: 0x000000E9, + 1145: 0x0000011B, + 1146: 0x000000E8, + 1147: 0x0000012B, + 1148: 0x000000ED, + 1149: 0x000001D0, + 1150: 0x000000EC, + 1151: 0x0000014D, + 1152: 0x000000F3, + 1153: 0x000001D2, + 1154: 0x000000F2, + 1155: 0x0000016B, + 1156: 0x000000FA, + 1157: 0x000001D4, + 1158: 0x000000F9, + 1159: 0x000001D6, + 1160: 0x000001D8, + 1161: 0x000001DA, + 1162: 0x000001DC, + 1163: 0x000000FC, + 1165: 0x00001EBF, + 1167: 0x00001EC1, + 1168: 0x000000EA, + 1169: 0x00000261, + 1170: 0x000023DA, + 1171: 0x000023DB, + 1256: 0x0002A3A9, + 1257: 0x00021145, + 1259: 0x0000650A, + 1262: 0x00004E3D, + 1263: 0x00006EDD, + 1264: 0x00009D4E, + 1265: 0x000091DF, + 1268: 0x00027735, + 1269: 0x00006491, + 1270: 0x00004F1A, + 1271: 0x00004F28, + 1272: 0x00004FA8, + 1273: 0x00005156, + 1274: 0x00005174, + 1275: 0x0000519C, + 1276: 0x000051E4, + 1277: 0x000052A1, + 1278: 0x000052A8, + 1279: 0x0000533B, + 1280: 0x0000534E, + 1281: 0x000053D1, + 1282: 0x000053D8, + 1283: 0x000056E2, + 1284: 0x000058F0, + 1285: 0x00005904, + 1286: 0x00005907, + 1287: 0x00005932, + 1288: 0x00005934, + 1289: 0x00005B66, + 1290: 0x00005B9E, + 1291: 0x00005B9F, + 1292: 0x00005C9A, + 1293: 0x00005E86, + 1294: 0x0000603B, + 1295: 0x00006589, + 1296: 0x000067FE, + 1297: 0x00006804, + 1298: 0x00006865, + 1299: 0x00006D4E, + 1300: 0x000070BC, + 1301: 0x00007535, + 1302: 0x00007EA4, + 1303: 0x00007EAC, + 1304: 0x00007EBA, + 1305: 0x00007EC7, + 1306: 0x00007ECF, + 1307: 0x00007EDF, + 1308: 0x00007F06, + 1309: 0x00007F37, + 1310: 0x0000827A, + 1311: 0x000082CF, + 1312: 0x0000836F, + 1313: 0x000089C6, + 1314: 0x00008BBE, + 1315: 0x00008BE2, + 1316: 0x00008F66, + 1317: 0x00008F67, + 1318: 0x00008F6E, + 1319: 0x00007411, + 1320: 0x00007CFC, + 1321: 0x00007DCD, + 1322: 0x00006946, + 1323: 0x00007AC9, + 1324: 0x00005227, + 1329: 0x0000918C, + 1330: 0x000078B8, + 1331: 0x0000915E, + 1332: 0x000080BC, + 1334: 0x00008D0B, + 1335: 0x000080F6, + 1336: 0x000209E7, + 1339: 0x0000809F, + 1340: 0x00009EC7, + 1341: 0x00004CCD, + 1342: 0x00009DC9, + 1343: 0x00009E0C, + 1344: 0x00004C3E, + 1345: 0x00029DF6, + 1346: 0x0002700E, + 1347: 0x00009E0A, + 1348: 0x0002A133, + 1349: 0x000035C1, + 1351: 0x00006E9A, + 1352: 0x0000823E, + 1353: 0x00007519, + 1355: 0x00004911, + 1356: 0x00009A6C, + 1357: 0x00009A8F, + 1358: 0x00009F99, + 1359: 0x00007987, + 1360: 0x0002846C, + 1361: 0x00021DCA, + 1362: 0x000205D0, + 1363: 0x00022AE6, + 1364: 0x00004E24, + 1365: 0x00004E81, + 1366: 0x00004E80, + 1367: 0x00004E87, + 1368: 0x00004EBF, + 1369: 0x00004EEB, + 1370: 0x00004F37, + 1371: 0x0000344C, + 1372: 0x00004FBD, + 1373: 0x00003E48, + 1374: 0x00005003, + 1375: 0x00005088, + 1376: 0x0000347D, + 1377: 0x00003493, + 1378: 0x000034A5, + 1379: 0x00005186, + 1380: 0x00005905, + 1381: 0x000051DB, + 1382: 0x000051FC, + 1383: 0x00005205, + 1384: 0x00004E89, + 1385: 0x00005279, + 1386: 0x00005290, + 1387: 0x00005327, + 1388: 0x000035C7, + 1389: 0x000053A9, + 1390: 0x00003551, + 1391: 0x000053B0, + 1392: 0x00003553, + 1393: 0x000053C2, + 1394: 0x00005423, + 1395: 0x0000356D, + 1396: 0x00003572, + 1397: 0x00003681, + 1398: 0x00005493, + 1399: 0x000054A3, + 1400: 0x000054B4, + 1401: 0x000054B9, + 1402: 0x000054D0, + 1403: 0x000054EF, + 1404: 0x00005518, + 1405: 0x00005523, + 1406: 0x00005528, + 1407: 0x00003598, + 1408: 0x0000553F, + 1409: 0x000035A5, + 1410: 0x000035BF, + 1411: 0x000055D7, + 1412: 0x000035C5, + 1413: 0x00027D84, + 1414: 0x00005525, + 1416: 0x00020C42, + 1417: 0x00020D15, + 1418: 0x0002512B, + 1419: 0x00005590, + 1420: 0x00022CC6, + 1421: 0x000039EC, + 1422: 0x00020341, + 1423: 0x00008E46, + 1424: 0x00024DB8, + 1425: 0x000294E5, + 1426: 0x00004053, + 1427: 0x000280BE, + 1428: 0x0000777A, + 1429: 0x00022C38, + 1430: 0x00003A34, + 1431: 0x000047D5, + 1432: 0x0002815D, + 1433: 0x000269F2, + 1434: 0x00024DEA, + 1435: 0x000064DD, + 1436: 0x00020D7C, + 1437: 0x00020FB4, + 1438: 0x00020CD5, + 1439: 0x000210F4, + 1440: 0x0000648D, + 1441: 0x00008E7E, + 1442: 0x00020E96, + 1443: 0x00020C0B, + 1444: 0x00020F64, + 1445: 0x00022CA9, + 1446: 0x00028256, + 1447: 0x000244D3, + 1449: 0x00020D46, + 1450: 0x00029A4D, + 1451: 0x000280E9, + 1452: 0x000047F4, + 1453: 0x00024EA7, + 1454: 0x00022CC2, + 1455: 0x00009AB2, + 1456: 0x00003A67, + 1457: 0x000295F4, + 1458: 0x00003FED, + 1459: 0x00003506, + 1460: 0x000252C7, + 1461: 0x000297D4, + 1462: 0x000278C8, + 1463: 0x00022D44, + 1464: 0x00009D6E, + 1465: 0x00009815, + 1467: 0x000043D9, + 1468: 0x000260A5, + 1469: 0x000064B4, + 1470: 0x000054E3, + 1471: 0x00022D4C, + 1472: 0x00022BCA, + 1473: 0x00021077, + 1474: 0x000039FB, + 1475: 0x0002106F, + 1476: 0x000266DA, + 1477: 0x00026716, + 1478: 0x000279A0, + 1479: 0x000064EA, + 1480: 0x00025052, + 1481: 0x00020C43, + 1482: 0x00008E68, + 1483: 0x000221A1, + 1484: 0x00028B4C, + 1485: 0x00020731, + 1487: 0x0000480B, + 1488: 0x000201A9, + 1489: 0x00003FFA, + 1490: 0x00005873, + 1491: 0x00022D8D, + 1493: 0x000245C8, + 1494: 0x000204FC, + 1495: 0x00026097, + 1496: 0x00020F4C, + 1497: 0x00020D96, + 1498: 0x00005579, + 1499: 0x000040BB, + 1500: 0x000043BA, + 1502: 0x00004AB4, + 1503: 0x00022A66, + 1504: 0x0002109D, + 1505: 0x000081AA, + 1506: 0x000098F5, + 1507: 0x00020D9C, + 1508: 0x00006379, + 1509: 0x000039FE, + 1510: 0x00022775, + 1511: 0x00008DC0, + 1512: 0x000056A1, + 1513: 0x0000647C, + 1514: 0x00003E43, + 1516: 0x0002A601, + 1517: 0x00020E09, + 1518: 0x00022ACF, + 1519: 0x00022CC9, + 1521: 0x000210C8, + 1522: 0x000239C2, + 1523: 0x00003992, + 1524: 0x00003A06, + 1525: 0x0002829B, + 1526: 0x00003578, + 1527: 0x00025E49, + 1528: 0x000220C7, + 1529: 0x00005652, + 1530: 0x00020F31, + 1531: 0x00022CB2, + 1532: 0x00029720, + 1533: 0x000034BC, + 1534: 0x00006C3D, + 1535: 0x00024E3B, + 1538: 0x00027574, + 1539: 0x00022E8B, + 1540: 0x00022208, + 1541: 0x0002A65B, + 1542: 0x00028CCD, + 1543: 0x00020E7A, + 1544: 0x00020C34, + 1545: 0x0002681C, + 1546: 0x00007F93, + 1547: 0x000210CF, + 1548: 0x00022803, + 1549: 0x00022939, + 1550: 0x000035FB, + 1551: 0x000251E3, + 1552: 0x00020E8C, + 1553: 0x00020F8D, + 1554: 0x00020EAA, + 1555: 0x00003F93, + 1556: 0x00020F30, + 1557: 0x00020D47, + 1558: 0x0002114F, + 1559: 0x00020E4C, + 1561: 0x00020EAB, + 1562: 0x00020BA9, + 1563: 0x00020D48, + 1564: 0x000210C0, + 1565: 0x0002113D, + 1566: 0x00003FF9, + 1567: 0x00022696, + 1568: 0x00006432, + 1569: 0x00020FAD, + 1570: 0x000233F4, + 1571: 0x00027639, + 1572: 0x00022BCE, + 1573: 0x00020D7E, + 1574: 0x00020D7F, + 1575: 0x00022C51, + 1576: 0x00022C55, + 1577: 0x00003A18, + 1578: 0x00020E98, + 1579: 0x000210C7, + 1580: 0x00020F2E, + 1581: 0x0002A632, + 1582: 0x00026B50, + 1583: 0x00028CD2, + 1584: 0x00028D99, + 1585: 0x00028CCA, + 1586: 0x000095AA, + 1587: 0x000054CC, + 1588: 0x000082C4, + 1589: 0x000055B9, + 1591: 0x00029EC3, + 1592: 0x00009C26, + 1593: 0x00009AB6, + 1594: 0x0002775E, + 1595: 0x00022DEE, + 1596: 0x00007140, + 1597: 0x0000816D, + 1598: 0x000080EC, + 1599: 0x00005C1C, + 1600: 0x00026572, + 1601: 0x00008134, + 1602: 0x00003797, + 1603: 0x0000535F, + 1604: 0x000280BD, + 1605: 0x000091B6, + 1606: 0x00020EFA, + 1607: 0x00020E0F, + 1608: 0x00020E77, + 1609: 0x00020EFB, + 1610: 0x000035DD, + 1611: 0x00024DEB, + 1612: 0x00003609, + 1613: 0x00020CD6, + 1614: 0x000056AF, + 1615: 0x000227B5, + 1616: 0x000210C9, + 1617: 0x00020E10, + 1618: 0x00020E78, + 1619: 0x00021078, + 1620: 0x00021148, + 1621: 0x00028207, + 1622: 0x00021455, + 1623: 0x00020E79, + 1624: 0x00024E50, + 1625: 0x00022DA4, + 1626: 0x00005A54, + 1627: 0x0002101D, + 1628: 0x0002101E, + 1629: 0x000210F5, + 1630: 0x000210F6, + 1631: 0x0000579C, + 1632: 0x00020E11, + 1633: 0x00027694, + 1634: 0x000282CD, + 1635: 0x00020FB5, + 1636: 0x00020E7B, + 1637: 0x0002517E, + 1638: 0x00003703, + 1639: 0x00020FB6, + 1640: 0x00021180, + 1641: 0x000252D8, + 1642: 0x0002A2BD, + 1643: 0x000249DA, + 1644: 0x0002183A, + 1645: 0x00024177, + 1646: 0x0002827C, + 1647: 0x00005899, + 1648: 0x00005268, + 1649: 0x0000361A, + 1650: 0x0002573D, + 1651: 0x00007BB2, + 1652: 0x00005B68, + 1653: 0x00004800, + 1654: 0x00004B2C, + 1655: 0x00009F27, + 1656: 0x000049E7, + 1657: 0x00009C1F, + 1658: 0x00009B8D, + 1659: 0x00025B74, + 1660: 0x0002313D, + 1661: 0x000055FB, + 1662: 0x000035F2, + 1663: 0x00005689, + 1664: 0x00004E28, + 1665: 0x00005902, + 1666: 0x00021BC1, + 1667: 0x0002F878, + 1668: 0x00009751, + 1669: 0x00020086, + 1670: 0x00004E5B, + 1671: 0x00004EBB, + 1672: 0x0000353E, + 1673: 0x00005C23, + 1674: 0x00005F51, + 1675: 0x00005FC4, + 1676: 0x000038FA, + 1677: 0x0000624C, + 1678: 0x00006535, + 1679: 0x00006B7A, + 1680: 0x00006C35, + 1681: 0x00006C3A, + 1682: 0x0000706C, + 1683: 0x0000722B, + 1684: 0x00004E2C, + 1685: 0x000072AD, + 1686: 0x000248E9, + 1687: 0x00007F52, + 1688: 0x0000793B, + 1689: 0x00007CF9, + 1690: 0x00007F53, + 1691: 0x0002626A, + 1692: 0x000034C1, + 1694: 0x0002634B, + 1695: 0x00008002, + 1696: 0x00008080, + 1697: 0x00026612, + 1698: 0x00026951, + 1699: 0x0000535D, + 1700: 0x00008864, + 1701: 0x000089C1, + 1702: 0x000278B2, + 1703: 0x00008BA0, + 1704: 0x00008D1D, + 1705: 0x00009485, + 1706: 0x00009578, + 1707: 0x0000957F, + 1708: 0x000095E8, + 1709: 0x00028E0F, + 1710: 0x000097E6, + 1711: 0x00009875, + 1712: 0x000098CE, + 1713: 0x000098DE, + 1714: 0x00009963, + 1715: 0x00029810, + 1716: 0x00009C7C, + 1717: 0x00009E1F, + 1718: 0x00009EC4, + 1719: 0x00006B6F, + 1720: 0x0000F907, + 1721: 0x00004E37, + 1722: 0x00020087, + 1723: 0x0000961D, + 1724: 0x00006237, + 1725: 0x000094A2, + 1727: 0x0000503B, + 1728: 0x00006DFE, + 1729: 0x00029C73, + 1730: 0x00009FA6, + 1731: 0x00003DC9, + 1732: 0x0000888F, + 1733: 0x0002414E, + 1734: 0x00007077, + 1735: 0x00005CF5, + 1736: 0x00004B20, + 1737: 0x000251CD, + 1738: 0x00003559, + 1739: 0x00025D30, + 1740: 0x00006122, + 1741: 0x00028A32, + 1742: 0x00008FA7, + 1743: 0x000091F6, + 1744: 0x00007191, + 1745: 0x00006719, + 1746: 0x000073BA, + 1747: 0x00023281, + 1748: 0x0002A107, + 1749: 0x00003C8B, + 1750: 0x00021980, + 1751: 0x00004B10, + 1752: 0x000078E4, + 1753: 0x00007402, + 1754: 0x000051AE, + 1755: 0x0002870F, + 1756: 0x00004009, + 1757: 0x00006A63, + 1758: 0x0002A2BA, + 1759: 0x00004223, + 1760: 0x0000860F, + 1761: 0x00020A6F, + 1762: 0x00007A2A, + 1763: 0x00029947, + 1764: 0x00028AEA, + 1765: 0x00009755, + 1766: 0x0000704D, + 1767: 0x00005324, + 1768: 0x0002207E, + 1769: 0x000093F4, + 1770: 0x000076D9, + 1771: 0x000289E3, + 1772: 0x00009FA7, + 1773: 0x000077DD, + 1774: 0x00004EA3, + 1775: 0x00004FF0, + 1776: 0x000050BC, + 1777: 0x00004E2F, + 1778: 0x00004F17, + 1779: 0x00009FA8, + 1780: 0x00005434, + 1781: 0x00007D8B, + 1782: 0x00005892, + 1783: 0x000058D0, + 1784: 0x00021DB6, + 1785: 0x00005E92, + 1786: 0x00005E99, + 1787: 0x00005FC2, + 1788: 0x00022712, + 1789: 0x0000658B, + 1790: 0x000233F9, + 1791: 0x00006919, + 1792: 0x00006A43, + 1793: 0x00023C63, + 1794: 0x00006CFF, + 1796: 0x00007200, + 1797: 0x00024505, + 1798: 0x0000738C, + 1799: 0x00003EDB, + 1800: 0x00024A13, + 1801: 0x00005B15, + 1802: 0x000074B9, + 1803: 0x00008B83, + 1804: 0x00025CA4, + 1805: 0x00025695, + 1806: 0x00007A93, + 1807: 0x00007BEC, + 1808: 0x00007CC3, + 1809: 0x00007E6C, + 1810: 0x000082F8, + 1811: 0x00008597, + 1812: 0x00009FA9, + 1813: 0x00008890, + 1814: 0x00009FAA, + 1815: 0x00008EB9, + 1816: 0x00009FAB, + 1817: 0x00008FCF, + 1818: 0x0000855F, + 1819: 0x000099E0, + 1820: 0x00009221, + 1821: 0x00009FAC, + 1822: 0x00028DB9, + 1823: 0x0002143F, + 1824: 0x00004071, + 1825: 0x000042A2, + 1826: 0x00005A1A, + 1830: 0x00009868, + 1831: 0x0000676B, + 1832: 0x00004276, + 1833: 0x0000573D, + 1835: 0x000085D6, + 1836: 0x0002497B, + 1837: 0x000082BF, + 1838: 0x0002710D, + 1839: 0x00004C81, + 1840: 0x00026D74, + 1841: 0x00005D7B, + 1842: 0x00026B15, + 1843: 0x00026FBE, + 1844: 0x00009FAD, + 1845: 0x00009FAE, + 1846: 0x00005B96, + 1847: 0x00009FAF, + 1848: 0x000066E7, + 1849: 0x00007E5B, + 1850: 0x00006E57, + 1851: 0x000079CA, + 1852: 0x00003D88, + 1853: 0x000044C3, + 1854: 0x00023256, + 1855: 0x00022796, + 1856: 0x0000439A, + 1857: 0x00004536, + 1859: 0x00005CD5, + 1860: 0x00023B1A, + 1861: 0x00008AF9, + 1862: 0x00005C78, + 1863: 0x00003D12, + 1864: 0x00023551, + 1865: 0x00005D78, + 1866: 0x00009FB2, + 1867: 0x00007157, + 1868: 0x00004558, + 1869: 0x000240EC, + 1870: 0x00021E23, + 1871: 0x00004C77, + 1872: 0x00003978, + 1873: 0x0000344A, + 1874: 0x000201A4, + 1875: 0x00026C41, + 1876: 0x00008ACC, + 1877: 0x00004FB4, + 1878: 0x00020239, + 1879: 0x000059BF, + 1880: 0x0000816C, + 1881: 0x00009856, + 1882: 0x000298FA, + 1883: 0x00005F3B, + 1884: 0x00020B9F, + 1886: 0x000221C1, + 1887: 0x0002896D, + 1888: 0x00004102, + 1889: 0x000046BB, + 1890: 0x00029079, + 1891: 0x00003F07, + 1892: 0x00009FB3, + 1893: 0x0002A1B5, + 1894: 0x000040F8, + 1895: 0x000037D6, + 1896: 0x000046F7, + 1897: 0x00026C46, + 1898: 0x0000417C, + 1899: 0x000286B2, + 1900: 0x000273FF, + 1901: 0x0000456D, + 1902: 0x000038D4, + 1903: 0x0002549A, + 1904: 0x00004561, + 1905: 0x0000451B, + 1906: 0x00004D89, + 1907: 0x00004C7B, + 1908: 0x00004D76, + 1909: 0x000045EA, + 1910: 0x00003FC8, + 1911: 0x00024B0F, + 1912: 0x00003661, + 1913: 0x000044DE, + 1914: 0x000044BD, + 1915: 0x000041ED, + 1916: 0x00005D3E, + 1917: 0x00005D48, + 1918: 0x00005D56, + 1919: 0x00003DFC, + 1920: 0x0000380F, + 1921: 0x00005DA4, + 1922: 0x00005DB9, + 1923: 0x00003820, + 1924: 0x00003838, + 1925: 0x00005E42, + 1926: 0x00005EBD, + 1927: 0x00005F25, + 1928: 0x00005F83, + 1929: 0x00003908, + 1930: 0x00003914, + 1931: 0x0000393F, + 1932: 0x0000394D, + 1933: 0x000060D7, + 1934: 0x0000613D, + 1935: 0x00005CE5, + 1936: 0x00003989, + 1937: 0x000061B7, + 1938: 0x000061B9, + 1939: 0x000061CF, + 1940: 0x000039B8, + 1941: 0x0000622C, + 1942: 0x00006290, + 1943: 0x000062E5, + 1944: 0x00006318, + 1945: 0x000039F8, + 1946: 0x000056B1, + 1947: 0x00003A03, + 1948: 0x000063E2, + 1949: 0x000063FB, + 1950: 0x00006407, + 1951: 0x0000645A, + 1952: 0x00003A4B, + 1953: 0x000064C0, + 1954: 0x00005D15, + 1955: 0x00005621, + 1956: 0x00009F9F, + 1957: 0x00003A97, + 1958: 0x00006586, + 1959: 0x00003ABD, + 1960: 0x000065FF, + 1961: 0x00006653, + 1962: 0x00003AF2, + 1963: 0x00006692, + 1964: 0x00003B22, + 1965: 0x00006716, + 1966: 0x00003B42, + 1967: 0x000067A4, + 1968: 0x00006800, + 1969: 0x00003B58, + 1970: 0x0000684A, + 1971: 0x00006884, + 1972: 0x00003B72, + 1973: 0x00003B71, + 1974: 0x00003B7B, + 1975: 0x00006909, + 1976: 0x00006943, + 1977: 0x0000725C, + 1978: 0x00006964, + 1979: 0x0000699F, + 1980: 0x00006985, + 1981: 0x00003BBC, + 1982: 0x000069D6, + 1983: 0x00003BDD, + 1984: 0x00006A65, + 1985: 0x00006A74, + 1986: 0x00006A71, + 1987: 0x00006A82, + 1988: 0x00003BEC, + 1989: 0x00006A99, + 1990: 0x00003BF2, + 1991: 0x00006AAB, + 1992: 0x00006AB5, + 1993: 0x00006AD4, + 1994: 0x00006AF6, + 1995: 0x00006B81, + 1996: 0x00006BC1, + 1997: 0x00006BEA, + 1998: 0x00006C75, + 1999: 0x00006CAA, + 2000: 0x00003CCB, + 2001: 0x00006D02, + 2002: 0x00006D06, + 2003: 0x00006D26, + 2004: 0x00006D81, + 2005: 0x00003CEF, + 2006: 0x00006DA4, + 2007: 0x00006DB1, + 2008: 0x00006E15, + 2009: 0x00006E18, + 2010: 0x00006E29, + 2011: 0x00006E86, + 2012: 0x000289C0, + 2013: 0x00006EBB, + 2014: 0x00006EE2, + 2015: 0x00006EDA, + 2016: 0x00009F7F, + 2017: 0x00006EE8, + 2018: 0x00006EE9, + 2019: 0x00006F24, + 2020: 0x00006F34, + 2021: 0x00003D46, + 2022: 0x00023F41, + 2023: 0x00006F81, + 2024: 0x00006FBE, + 2025: 0x00003D6A, + 2026: 0x00003D75, + 2027: 0x000071B7, + 2028: 0x00005C99, + 2029: 0x00003D8A, + 2030: 0x0000702C, + 2031: 0x00003D91, + 2032: 0x00007050, + 2033: 0x00007054, + 2034: 0x0000706F, + 2035: 0x0000707F, + 2036: 0x00007089, + 2037: 0x00020325, + 2038: 0x000043C1, + 2039: 0x000035F1, + 2040: 0x00020ED8, + 2041: 0x00023ED7, + 2042: 0x000057BE, + 2043: 0x00026ED3, + 2044: 0x0000713E, + 2045: 0x000257E0, + 2046: 0x0000364E, + 2047: 0x000069A2, + 2048: 0x00028BE9, + 2049: 0x00005B74, + 2050: 0x00007A49, + 2051: 0x000258E1, + 2052: 0x000294D9, + 2053: 0x00007A65, + 2054: 0x00007A7D, + 2055: 0x000259AC, + 2056: 0x00007ABB, + 2057: 0x00007AB0, + 2058: 0x00007AC2, + 2059: 0x00007AC3, + 2060: 0x000071D1, + 2061: 0x0002648D, + 2062: 0x000041CA, + 2063: 0x00007ADA, + 2064: 0x00007ADD, + 2065: 0x00007AEA, + 2066: 0x000041EF, + 2067: 0x000054B2, + 2068: 0x00025C01, + 2069: 0x00007B0B, + 2070: 0x00007B55, + 2071: 0x00007B29, + 2072: 0x0002530E, + 2073: 0x00025CFE, + 2074: 0x00007BA2, + 2075: 0x00007B6F, + 2076: 0x0000839C, + 2077: 0x00025BB4, + 2078: 0x00026C7F, + 2079: 0x00007BD0, + 2080: 0x00008421, + 2081: 0x00007B92, + 2082: 0x00007BB8, + 2083: 0x00025D20, + 2084: 0x00003DAD, + 2085: 0x00025C65, + 2086: 0x00008492, + 2087: 0x00007BFA, + 2088: 0x00007C06, + 2089: 0x00007C35, + 2090: 0x00025CC1, + 2091: 0x00007C44, + 2092: 0x00007C83, + 2093: 0x00024882, + 2094: 0x00007CA6, + 2095: 0x0000667D, + 2096: 0x00024578, + 2097: 0x00007CC9, + 2098: 0x00007CC7, + 2099: 0x00007CE6, + 2100: 0x00007C74, + 2101: 0x00007CF3, + 2102: 0x00007CF5, + 2103: 0x00007CCE, + 2104: 0x00007E67, + 2105: 0x0000451D, + 2106: 0x00026E44, + 2107: 0x00007D5D, + 2108: 0x00026ED6, + 2109: 0x0000748D, + 2110: 0x00007D89, + 2111: 0x00007DAB, + 2112: 0x00007135, + 2113: 0x00007DB3, + 2114: 0x00007DD2, + 2115: 0x00024057, + 2116: 0x00026029, + 2117: 0x00007DE4, + 2118: 0x00003D13, + 2119: 0x00007DF5, + 2120: 0x000217F9, + 2121: 0x00007DE5, + 2122: 0x0002836D, + 2123: 0x00007E1D, + 2124: 0x00026121, + 2125: 0x0002615A, + 2126: 0x00007E6E, + 2127: 0x00007E92, + 2128: 0x0000432B, + 2129: 0x0000946C, + 2130: 0x00007E27, + 2131: 0x00007F40, + 2132: 0x00007F41, + 2133: 0x00007F47, + 2134: 0x00007936, + 2135: 0x000262D0, + 2136: 0x000099E1, + 2137: 0x00007F97, + 2138: 0x00026351, + 2139: 0x00007FA3, + 2140: 0x00021661, + 2141: 0x00020068, + 2142: 0x0000455C, + 2143: 0x00023766, + 2144: 0x00004503, + 2145: 0x0002833A, + 2146: 0x00007FFA, + 2147: 0x00026489, + 2148: 0x00008005, + 2149: 0x00008008, + 2150: 0x0000801D, + 2151: 0x00008028, + 2152: 0x0000802F, + 2153: 0x0002A087, + 2154: 0x00026CC3, + 2155: 0x0000803B, + 2156: 0x0000803C, + 2157: 0x00008061, + 2158: 0x00022714, + 2159: 0x00004989, + 2160: 0x00026626, + 2161: 0x00023DE3, + 2162: 0x000266E8, + 2163: 0x00006725, + 2164: 0x000080A7, + 2165: 0x00028A48, + 2166: 0x00008107, + 2167: 0x0000811A, + 2168: 0x000058B0, + 2169: 0x000226F6, + 2170: 0x00006C7F, + 2171: 0x00026498, + 2172: 0x00024FB8, + 2173: 0x000064E7, + 2174: 0x0002148A, + 2175: 0x00008218, + 2176: 0x0002185E, + 2177: 0x00006A53, + 2178: 0x00024A65, + 2179: 0x00024A95, + 2180: 0x0000447A, + 2181: 0x00008229, + 2182: 0x00020B0D, + 2183: 0x00026A52, + 2184: 0x00023D7E, + 2185: 0x00004FF9, + 2186: 0x000214FD, + 2187: 0x000084E2, + 2188: 0x00008362, + 2189: 0x00026B0A, + 2190: 0x000249A7, + 2191: 0x00023530, + 2192: 0x00021773, + 2193: 0x00023DF8, + 2194: 0x000082AA, + 2195: 0x0000691B, + 2196: 0x0002F994, + 2197: 0x000041DB, + 2198: 0x0000854B, + 2199: 0x000082D0, + 2200: 0x0000831A, + 2201: 0x00020E16, + 2202: 0x000217B4, + 2203: 0x000036C1, + 2204: 0x0002317D, + 2205: 0x0002355A, + 2206: 0x0000827B, + 2207: 0x000082E2, + 2208: 0x00008318, + 2209: 0x00023E8B, + 2210: 0x00026DA3, + 2211: 0x00026B05, + 2212: 0x00026B97, + 2213: 0x000235CE, + 2214: 0x00003DBF, + 2215: 0x0000831D, + 2216: 0x000055EC, + 2217: 0x00008385, + 2218: 0x0000450B, + 2219: 0x00026DA5, + 2220: 0x000083AC, + 2221: 0x000083C1, + 2222: 0x000083D3, + 2223: 0x0000347E, + 2224: 0x00026ED4, + 2225: 0x00006A57, + 2226: 0x0000855A, + 2227: 0x00003496, + 2228: 0x00026E42, + 2229: 0x00022EEF, + 2230: 0x00008458, + 2231: 0x00025BE4, + 2232: 0x00008471, + 2233: 0x00003DD3, + 2234: 0x000044E4, + 2235: 0x00006AA7, + 2236: 0x0000844A, + 2237: 0x00023CB5, + 2238: 0x00007958, + 2239: 0x000084A8, + 2240: 0x00026B96, + 2241: 0x00026E77, + 2242: 0x00026E43, + 2243: 0x000084DE, + 2244: 0x0000840F, + 2245: 0x00008391, + 2246: 0x000044A0, + 2247: 0x00008493, + 2248: 0x000084E4, + 2249: 0x00025C91, + 2250: 0x00004240, + 2251: 0x00025CC0, + 2252: 0x00004543, + 2253: 0x00008534, + 2254: 0x00005AF2, + 2255: 0x00026E99, + 2256: 0x00004527, + 2257: 0x00008573, + 2258: 0x00004516, + 2259: 0x000067BF, + 2260: 0x00008616, + 2261: 0x00028625, + 2262: 0x0002863B, + 2263: 0x000085C1, + 2264: 0x00027088, + 2265: 0x00008602, + 2266: 0x00021582, + 2267: 0x000270CD, + 2268: 0x0002F9B2, + 2269: 0x0000456A, + 2270: 0x00008628, + 2271: 0x00003648, + 2272: 0x000218A2, + 2273: 0x000053F7, + 2274: 0x0002739A, + 2275: 0x0000867E, + 2276: 0x00008771, + 2277: 0x0002A0F8, + 2278: 0x000087EE, + 2279: 0x00022C27, + 2280: 0x000087B1, + 2281: 0x000087DA, + 2282: 0x0000880F, + 2283: 0x00005661, + 2284: 0x0000866C, + 2285: 0x00006856, + 2286: 0x0000460F, + 2287: 0x00008845, + 2288: 0x00008846, + 2289: 0x000275E0, + 2290: 0x00023DB9, + 2291: 0x000275E4, + 2292: 0x0000885E, + 2293: 0x0000889C, + 2294: 0x0000465B, + 2295: 0x000088B4, + 2296: 0x000088B5, + 2297: 0x000063C1, + 2298: 0x000088C5, + 2299: 0x00007777, + 2300: 0x0002770F, + 2301: 0x00008987, + 2302: 0x0000898A, + 2303: 0x000089A6, + 2304: 0x000089A9, + 2305: 0x000089A7, + 2306: 0x000089BC, + 2307: 0x00028A25, + 2308: 0x000089E7, + 2309: 0x00027924, + 2310: 0x00027ABD, + 2311: 0x00008A9C, + 2312: 0x00007793, + 2313: 0x000091FE, + 2314: 0x00008A90, + 2315: 0x00027A59, + 2316: 0x00007AE9, + 2317: 0x00027B3A, + 2318: 0x00023F8F, + 2319: 0x00004713, + 2320: 0x00027B38, + 2321: 0x0000717C, + 2322: 0x00008B0C, + 2323: 0x00008B1F, + 2324: 0x00025430, + 2325: 0x00025565, + 2326: 0x00008B3F, + 2327: 0x00008B4C, + 2328: 0x00008B4D, + 2329: 0x00008AA9, + 2330: 0x00024A7A, + 2331: 0x00008B90, + 2332: 0x00008B9B, + 2333: 0x00008AAF, + 2334: 0x000216DF, + 2335: 0x00004615, + 2336: 0x0000884F, + 2337: 0x00008C9B, + 2338: 0x00027D54, + 2339: 0x00027D8F, + 2340: 0x0002F9D4, + 2341: 0x00003725, + 2342: 0x00027D53, + 2343: 0x00008CD6, + 2344: 0x00027D98, + 2345: 0x00027DBD, + 2346: 0x00008D12, + 2347: 0x00008D03, + 2348: 0x00021910, + 2349: 0x00008CDB, + 2350: 0x0000705C, + 2351: 0x00008D11, + 2352: 0x00024CC9, + 2353: 0x00003ED0, + 2354: 0x00008D77, + 2355: 0x00008DA9, + 2356: 0x00028002, + 2357: 0x00021014, + 2358: 0x0002498A, + 2359: 0x00003B7C, + 2360: 0x000281BC, + 2361: 0x0002710C, + 2362: 0x00007AE7, + 2363: 0x00008EAD, + 2364: 0x00008EB6, + 2365: 0x00008EC3, + 2366: 0x000092D4, + 2367: 0x00008F19, + 2368: 0x00008F2D, + 2369: 0x00028365, + 2370: 0x00028412, + 2371: 0x00008FA5, + 2372: 0x00009303, + 2373: 0x0002A29F, + 2374: 0x00020A50, + 2375: 0x00008FB3, + 2376: 0x0000492A, + 2377: 0x000289DE, + 2378: 0x0002853D, + 2379: 0x00023DBB, + 2380: 0x00005EF8, + 2381: 0x00023262, + 2382: 0x00008FF9, + 2383: 0x0002A014, + 2384: 0x000286BC, + 2385: 0x00028501, + 2386: 0x00022325, + 2387: 0x00003980, + 2388: 0x00026ED7, + 2389: 0x00009037, + 2390: 0x0002853C, + 2391: 0x00027ABE, + 2392: 0x00009061, + 2393: 0x0002856C, + 2394: 0x0002860B, + 2395: 0x000090A8, + 2396: 0x00028713, + 2397: 0x000090C4, + 2398: 0x000286E6, + 2399: 0x000090AE, + 2400: 0x000090FD, + 2401: 0x00009167, + 2402: 0x00003AF0, + 2403: 0x000091A9, + 2404: 0x000091C4, + 2405: 0x00007CAC, + 2406: 0x00028933, + 2407: 0x00021E89, + 2408: 0x0000920E, + 2409: 0x00006C9F, + 2410: 0x00009241, + 2411: 0x00009262, + 2412: 0x000255B9, + 2413: 0x000092B9, + 2414: 0x00028AC6, + 2415: 0x00023C9B, + 2416: 0x00028B0C, + 2417: 0x000255DB, + 2418: 0x00020D31, + 2419: 0x0000932C, + 2420: 0x0000936B, + 2421: 0x00028AE1, + 2422: 0x00028BEB, + 2423: 0x0000708F, + 2424: 0x00005AC3, + 2425: 0x00028AE2, + 2426: 0x00028AE5, + 2427: 0x00004965, + 2428: 0x00009244, + 2429: 0x00028BEC, + 2430: 0x00028C39, + 2431: 0x00028BFF, + 2432: 0x00009373, + 2433: 0x0000945B, + 2434: 0x00008EBC, + 2435: 0x00009585, + 2436: 0x000095A6, + 2437: 0x00009426, + 2438: 0x000095A0, + 2439: 0x00006FF6, + 2440: 0x000042B9, + 2441: 0x0002267A, + 2442: 0x000286D8, + 2443: 0x0002127C, + 2444: 0x00023E2E, + 2445: 0x000049DF, + 2446: 0x00006C1C, + 2447: 0x0000967B, + 2448: 0x00009696, + 2449: 0x0000416C, + 2450: 0x000096A3, + 2451: 0x00026ED5, + 2452: 0x000061DA, + 2453: 0x000096B6, + 2454: 0x000078F5, + 2455: 0x00028AE0, + 2456: 0x000096BD, + 2457: 0x000053CC, + 2458: 0x000049A1, + 2459: 0x00026CB8, + 2460: 0x00020274, + 2461: 0x00026410, + 2462: 0x000290AF, + 2463: 0x000290E5, + 2464: 0x00024AD1, + 2465: 0x00021915, + 2466: 0x0002330A, + 2467: 0x00009731, + 2468: 0x00008642, + 2469: 0x00009736, + 2470: 0x00004A0F, + 2471: 0x0000453D, + 2472: 0x00004585, + 2473: 0x00024AE9, + 2474: 0x00007075, + 2475: 0x00005B41, + 2476: 0x0000971B, + 2477: 0x0000975C, + 2478: 0x000291D5, + 2479: 0x00009757, + 2480: 0x00005B4A, + 2481: 0x000291EB, + 2482: 0x0000975F, + 2483: 0x00009425, + 2484: 0x000050D0, + 2485: 0x000230B7, + 2486: 0x000230BC, + 2487: 0x00009789, + 2488: 0x0000979F, + 2489: 0x000097B1, + 2490: 0x000097BE, + 2491: 0x000097C0, + 2492: 0x000097D2, + 2493: 0x000097E0, + 2494: 0x0002546C, + 2495: 0x000097EE, + 2496: 0x0000741C, + 2497: 0x00029433, + 2498: 0x000097FF, + 2499: 0x000097F5, + 2500: 0x0002941D, + 2501: 0x0002797A, + 2502: 0x00004AD1, + 2503: 0x00009834, + 2504: 0x00009833, + 2505: 0x0000984B, + 2506: 0x00009866, + 2507: 0x00003B0E, + 2508: 0x00027175, + 2509: 0x00003D51, + 2510: 0x00020630, + 2511: 0x0002415C, + 2512: 0x00025706, + 2513: 0x000098CA, + 2514: 0x000098B7, + 2515: 0x000098C8, + 2516: 0x000098C7, + 2517: 0x00004AFF, + 2518: 0x00026D27, + 2519: 0x000216D3, + 2520: 0x000055B0, + 2521: 0x000098E1, + 2522: 0x000098E6, + 2523: 0x000098EC, + 2524: 0x00009378, + 2525: 0x00009939, + 2526: 0x00024A29, + 2527: 0x00004B72, + 2528: 0x00029857, + 2529: 0x00029905, + 2530: 0x000099F5, + 2531: 0x00009A0C, + 2532: 0x00009A3B, + 2533: 0x00009A10, + 2534: 0x00009A58, + 2535: 0x00025725, + 2536: 0x000036C4, + 2537: 0x000290B1, + 2538: 0x00029BD5, + 2539: 0x00009AE0, + 2540: 0x00009AE2, + 2541: 0x00029B05, + 2542: 0x00009AF4, + 2543: 0x00004C0E, + 2544: 0x00009B14, + 2545: 0x00009B2D, + 2546: 0x00028600, + 2547: 0x00005034, + 2548: 0x00009B34, + 2549: 0x000269A8, + 2550: 0x000038C3, + 2551: 0x0002307D, + 2552: 0x00009B50, + 2553: 0x00009B40, + 2554: 0x00029D3E, + 2555: 0x00005A45, + 2556: 0x00021863, + 2557: 0x00009B8E, + 2558: 0x0002424B, + 2559: 0x00009C02, + 2560: 0x00009BFF, + 2561: 0x00009C0C, + 2562: 0x00029E68, + 2563: 0x00009DD4, + 2564: 0x00029FB7, + 2565: 0x0002A192, + 2566: 0x0002A1AB, + 2567: 0x0002A0E1, + 2568: 0x0002A123, + 2569: 0x0002A1DF, + 2570: 0x00009D7E, + 2571: 0x00009D83, + 2572: 0x0002A134, + 2573: 0x00009E0E, + 2574: 0x00006888, + 2575: 0x00009DC4, + 2576: 0x0002215B, + 2577: 0x0002A193, + 2578: 0x0002A220, + 2579: 0x0002193B, + 2580: 0x0002A233, + 2581: 0x00009D39, + 2582: 0x0002A0B9, + 2583: 0x0002A2B4, + 2584: 0x00009E90, + 2585: 0x00009E95, + 2586: 0x00009E9E, + 2587: 0x00009EA2, + 2588: 0x00004D34, + 2589: 0x00009EAA, + 2590: 0x00009EAF, + 2591: 0x00024364, + 2592: 0x00009EC1, + 2593: 0x00003B60, + 2594: 0x000039E5, + 2595: 0x00003D1D, + 2596: 0x00004F32, + 2597: 0x000037BE, + 2598: 0x00028C2B, + 2599: 0x00009F02, + 2600: 0x00009F08, + 2601: 0x00004B96, + 2602: 0x00009424, + 2603: 0x00026DA2, + 2604: 0x00009F17, + 2605: 0x00009F16, + 2606: 0x00009F39, + 2607: 0x0000569F, + 2608: 0x0000568A, + 2609: 0x00009F45, + 2610: 0x000099B8, + 2611: 0x0002908B, + 2612: 0x000097F2, + 2613: 0x0000847F, + 2614: 0x00009F62, + 2615: 0x00009F69, + 2616: 0x00007ADC, + 2617: 0x00009F8E, + 2618: 0x00007216, + 2619: 0x00004BBE, + 2620: 0x00024975, + 2621: 0x000249BB, + 2622: 0x00007177, + 2623: 0x000249F8, + 2624: 0x00024348, + 2625: 0x00024A51, + 2626: 0x0000739E, + 2627: 0x00028BDA, + 2628: 0x000218FA, + 2629: 0x0000799F, + 2630: 0x0002897E, + 2631: 0x00028E36, + 2632: 0x00009369, + 2633: 0x000093F3, + 2634: 0x00028A44, + 2635: 0x000092EC, + 2636: 0x00009381, + 2637: 0x000093CB, + 2638: 0x0002896C, + 2639: 0x000244B9, + 2640: 0x00007217, + 2641: 0x00003EEB, + 2642: 0x00007772, + 2643: 0x00007A43, + 2644: 0x000070D0, + 2645: 0x00024473, + 2646: 0x000243F8, + 2647: 0x0000717E, + 2648: 0x000217EF, + 2649: 0x000070A3, + 2650: 0x000218BE, + 2651: 0x00023599, + 2652: 0x00003EC7, + 2653: 0x00021885, + 2654: 0x0002542F, + 2655: 0x000217F8, + 2656: 0x00003722, + 2657: 0x000216FB, + 2658: 0x00021839, + 2659: 0x000036E1, + 2660: 0x00021774, + 2661: 0x000218D1, + 2662: 0x00025F4B, + 2663: 0x00003723, + 2664: 0x000216C0, + 2665: 0x0000575B, + 2666: 0x00024A25, + 2667: 0x000213FE, + 2668: 0x000212A8, + 2669: 0x000213C6, + 2670: 0x000214B6, + 2671: 0x00008503, + 2672: 0x000236A6, + 2673: 0x00008503, + 2674: 0x00008455, + 2675: 0x00024994, + 2676: 0x00027165, + 2677: 0x00023E31, + 2678: 0x0002555C, + 2679: 0x00023EFB, + 2680: 0x00027052, + 2681: 0x000044F4, + 2682: 0x000236EE, + 2683: 0x0002999D, + 2684: 0x00026F26, + 2685: 0x000067F9, + 2686: 0x00003733, + 2687: 0x00003C15, + 2688: 0x00003DE7, + 2689: 0x0000586C, + 2690: 0x00021922, + 2691: 0x00006810, + 2692: 0x00004057, + 2693: 0x0002373F, + 2694: 0x000240E1, + 2695: 0x0002408B, + 2696: 0x0002410F, + 2697: 0x00026C21, + 2698: 0x000054CB, + 2699: 0x0000569E, + 2700: 0x000266B1, + 2701: 0x00005692, + 2702: 0x00020FDF, + 2703: 0x00020BA8, + 2704: 0x00020E0D, + 2705: 0x000093C6, + 2706: 0x00028B13, + 2707: 0x0000939C, + 2708: 0x00004EF8, + 2709: 0x0000512B, + 2710: 0x00003819, + 2711: 0x00024436, + 2712: 0x00004EBC, + 2713: 0x00020465, + 2714: 0x0002037F, + 2715: 0x00004F4B, + 2716: 0x00004F8A, + 2717: 0x00025651, + 2718: 0x00005A68, + 2719: 0x000201AB, + 2720: 0x000203CB, + 2721: 0x00003999, + 2722: 0x0002030A, + 2723: 0x00020414, + 2724: 0x00003435, + 2725: 0x00004F29, + 2726: 0x000202C0, + 2727: 0x00028EB3, + 2728: 0x00020275, + 2729: 0x00008ADA, + 2730: 0x0002020C, + 2731: 0x00004E98, + 2732: 0x000050CD, + 2733: 0x0000510D, + 2734: 0x00004FA2, + 2735: 0x00004F03, + 2736: 0x00024A0E, + 2737: 0x00023E8A, + 2738: 0x00004F42, + 2739: 0x0000502E, + 2740: 0x0000506C, + 2741: 0x00005081, + 2742: 0x00004FCC, + 2743: 0x00004FE5, + 2744: 0x00005058, + 2745: 0x000050FC, + 2746: 0x00005159, + 2747: 0x0000515B, + 2748: 0x0000515D, + 2749: 0x0000515E, + 2750: 0x00006E76, + 2751: 0x00023595, + 2752: 0x00023E39, + 2753: 0x00023EBF, + 2754: 0x00006D72, + 2755: 0x00021884, + 2756: 0x00023E89, + 2757: 0x000051A8, + 2758: 0x000051C3, + 2759: 0x000205E0, + 2760: 0x000044DD, + 2761: 0x000204A3, + 2762: 0x00020492, + 2763: 0x00020491, + 2764: 0x00008D7A, + 2765: 0x00028A9C, + 2766: 0x0002070E, + 2767: 0x00005259, + 2768: 0x000052A4, + 2769: 0x00020873, + 2770: 0x000052E1, + 2771: 0x0000936E, + 2772: 0x0000467A, + 2773: 0x0000718C, + 2774: 0x0002438C, + 2775: 0x00020C20, + 2776: 0x000249AC, + 2777: 0x000210E4, + 2778: 0x000069D1, + 2779: 0x00020E1D, + 2780: 0x00007479, + 2781: 0x00003EDE, + 2782: 0x00007499, + 2783: 0x00007414, + 2784: 0x00007456, + 2785: 0x00007398, + 2786: 0x00004B8E, + 2787: 0x00024ABC, + 2788: 0x0002408D, + 2789: 0x000053D0, + 2790: 0x00003584, + 2791: 0x0000720F, + 2792: 0x000240C9, + 2793: 0x000055B4, + 2794: 0x00020345, + 2795: 0x000054CD, + 2796: 0x00020BC6, + 2797: 0x0000571D, + 2798: 0x0000925D, + 2799: 0x000096F4, + 2800: 0x00009366, + 2801: 0x000057DD, + 2802: 0x0000578D, + 2803: 0x0000577F, + 2804: 0x0000363E, + 2805: 0x000058CB, + 2806: 0x00005A99, + 2807: 0x00028A46, + 2808: 0x000216FA, + 2809: 0x0002176F, + 2810: 0x00021710, + 2811: 0x00005A2C, + 2812: 0x000059B8, + 2813: 0x0000928F, + 2814: 0x00005A7E, + 2815: 0x00005ACF, + 2816: 0x00005A12, + 2817: 0x00025946, + 2818: 0x000219F3, + 2819: 0x00021861, + 2820: 0x00024295, + 2821: 0x000036F5, + 2822: 0x00006D05, + 2823: 0x00007443, + 2824: 0x00005A21, + 2825: 0x00025E83, + 2826: 0x00005A81, + 2827: 0x00028BD7, + 2828: 0x00020413, + 2829: 0x000093E0, + 2830: 0x0000748C, + 2831: 0x00021303, + 2832: 0x00007105, + 2833: 0x00004972, + 2834: 0x00009408, + 2835: 0x000289FB, + 2836: 0x000093BD, + 2837: 0x000037A0, + 2838: 0x00005C1E, + 2839: 0x00005C9E, + 2840: 0x00005E5E, + 2841: 0x00005E48, + 2842: 0x00021996, + 2843: 0x0002197C, + 2844: 0x00023AEE, + 2845: 0x00005ECD, + 2846: 0x00005B4F, + 2847: 0x00021903, + 2848: 0x00021904, + 2849: 0x00003701, + 2850: 0x000218A0, + 2851: 0x000036DD, + 2852: 0x000216FE, + 2853: 0x000036D3, + 2854: 0x0000812A, + 2855: 0x00028A47, + 2856: 0x00021DBA, + 2857: 0x00023472, + 2858: 0x000289A8, + 2859: 0x00005F0C, + 2860: 0x00005F0E, + 2861: 0x00021927, + 2862: 0x000217AB, + 2863: 0x00005A6B, + 2864: 0x0002173B, + 2865: 0x00005B44, + 2866: 0x00008614, + 2867: 0x000275FD, + 2868: 0x00008860, + 2869: 0x0000607E, + 2870: 0x00022860, + 2871: 0x0002262B, + 2872: 0x00005FDB, + 2873: 0x00003EB8, + 2874: 0x000225AF, + 2875: 0x000225BE, + 2876: 0x00029088, + 2877: 0x00026F73, + 2878: 0x000061C0, + 2879: 0x0002003E, + 2880: 0x00020046, + 2881: 0x0002261B, + 2882: 0x00006199, + 2883: 0x00006198, + 2884: 0x00006075, + 2885: 0x00022C9B, + 2886: 0x00022D07, + 2887: 0x000246D4, + 2888: 0x0002914D, + 2889: 0x00006471, + 2890: 0x00024665, + 2891: 0x00022B6A, + 2892: 0x00003A29, + 2893: 0x00022B22, + 2894: 0x00023450, + 2895: 0x000298EA, + 2896: 0x00022E78, + 2897: 0x00006337, + 2898: 0x0002A45B, + 2899: 0x000064B6, + 2900: 0x00006331, + 2901: 0x000063D1, + 2902: 0x000249E3, + 2903: 0x00022D67, + 2904: 0x000062A4, + 2905: 0x00022CA1, + 2906: 0x0000643B, + 2907: 0x0000656B, + 2908: 0x00006972, + 2909: 0x00003BF4, + 2910: 0x0002308E, + 2911: 0x000232AD, + 2912: 0x00024989, + 2913: 0x000232AB, + 2914: 0x0000550D, + 2915: 0x000232E0, + 2916: 0x000218D9, + 2917: 0x0002943F, + 2918: 0x000066CE, + 2919: 0x00023289, + 2920: 0x000231B3, + 2921: 0x00003AE0, + 2922: 0x00004190, + 2923: 0x00025584, + 2924: 0x00028B22, + 2925: 0x0002558F, + 2926: 0x000216FC, + 2927: 0x0002555B, + 2928: 0x00025425, + 2929: 0x000078EE, + 2930: 0x00023103, + 2931: 0x0002182A, + 2932: 0x00023234, + 2933: 0x00003464, + 2934: 0x0002320F, + 2935: 0x00023182, + 2936: 0x000242C9, + 2937: 0x0000668E, + 2938: 0x00026D24, + 2939: 0x0000666B, + 2940: 0x00004B93, + 2941: 0x00006630, + 2942: 0x00027870, + 2943: 0x00021DEB, + 2944: 0x00006663, + 2945: 0x000232D2, + 2946: 0x000232E1, + 2947: 0x0000661E, + 2948: 0x00025872, + 2949: 0x000038D1, + 2950: 0x0002383A, + 2951: 0x000237BC, + 2952: 0x00003B99, + 2953: 0x000237A2, + 2954: 0x000233FE, + 2955: 0x000074D0, + 2956: 0x00003B96, + 2957: 0x0000678F, + 2958: 0x0002462A, + 2959: 0x000068B6, + 2960: 0x0000681E, + 2961: 0x00003BC4, + 2962: 0x00006ABE, + 2963: 0x00003863, + 2964: 0x000237D5, + 2965: 0x00024487, + 2966: 0x00006A33, + 2967: 0x00006A52, + 2968: 0x00006AC9, + 2969: 0x00006B05, + 2970: 0x00021912, + 2971: 0x00006511, + 2972: 0x00006898, + 2973: 0x00006A4C, + 2974: 0x00003BD7, + 2975: 0x00006A7A, + 2976: 0x00006B57, + 2977: 0x00023FC0, + 2978: 0x00023C9A, + 2979: 0x000093A0, + 2980: 0x000092F2, + 2981: 0x00028BEA, + 2982: 0x00028ACB, + 2983: 0x00009289, + 2984: 0x0002801E, + 2985: 0x000289DC, + 2986: 0x00009467, + 2987: 0x00006DA5, + 2988: 0x00006F0B, + 2989: 0x000249EC, + 2990: 0x00006D67, + 2991: 0x00023F7F, + 2992: 0x00003D8F, + 2993: 0x00006E04, + 2994: 0x0002403C, + 2995: 0x00005A3D, + 2996: 0x00006E0A, + 2997: 0x00005847, + 2998: 0x00006D24, + 2999: 0x00007842, + 3000: 0x0000713B, + 3001: 0x0002431A, + 3002: 0x00024276, + 3003: 0x000070F1, + 3004: 0x00007250, + 3005: 0x00007287, + 3006: 0x00007294, + 3007: 0x0002478F, + 3008: 0x00024725, + 3009: 0x00005179, + 3010: 0x00024AA4, + 3011: 0x000205EB, + 3012: 0x0000747A, + 3013: 0x00023EF8, + 3014: 0x0002365F, + 3015: 0x00024A4A, + 3016: 0x00024917, + 3017: 0x00025FE1, + 3018: 0x00003F06, + 3019: 0x00003EB1, + 3020: 0x00024ADF, + 3021: 0x00028C23, + 3022: 0x00023F35, + 3023: 0x000060A7, + 3024: 0x00003EF3, + 3025: 0x000074CC, + 3026: 0x0000743C, + 3027: 0x00009387, + 3028: 0x00007437, + 3029: 0x0000449F, + 3030: 0x00026DEA, + 3031: 0x00004551, + 3032: 0x00007583, + 3033: 0x00003F63, + 3034: 0x00024CD9, + 3035: 0x00024D06, + 3036: 0x00003F58, + 3037: 0x00007555, + 3038: 0x00007673, + 3039: 0x0002A5C6, + 3040: 0x00003B19, + 3041: 0x00007468, + 3042: 0x00028ACC, + 3043: 0x000249AB, + 3044: 0x0002498E, + 3045: 0x00003AFB, + 3046: 0x00003DCD, + 3047: 0x00024A4E, + 3048: 0x00003EFF, + 3049: 0x000249C5, + 3050: 0x000248F3, + 3051: 0x000091FA, + 3052: 0x00005732, + 3053: 0x00009342, + 3054: 0x00028AE3, + 3055: 0x00021864, + 3056: 0x000050DF, + 3057: 0x00025221, + 3058: 0x000251E7, + 3059: 0x00007778, + 3060: 0x00023232, + 3061: 0x0000770E, + 3062: 0x0000770F, + 3063: 0x0000777B, + 3064: 0x00024697, + 3065: 0x00023781, + 3066: 0x00003A5E, + 3067: 0x000248F0, + 3068: 0x00007438, + 3069: 0x0000749B, + 3070: 0x00003EBF, + 3071: 0x00024ABA, + 3072: 0x00024AC7, + 3073: 0x000040C8, + 3074: 0x00024A96, + 3075: 0x000261AE, + 3076: 0x00009307, + 3077: 0x00025581, + 3078: 0x0000781E, + 3079: 0x0000788D, + 3080: 0x00007888, + 3081: 0x000078D2, + 3082: 0x000073D0, + 3083: 0x00007959, + 3084: 0x00027741, + 3085: 0x000256E3, + 3086: 0x0000410E, + 3087: 0x0000799B, + 3088: 0x00008496, + 3089: 0x000079A5, + 3090: 0x00006A2D, + 3091: 0x00023EFA, + 3092: 0x00007A3A, + 3093: 0x000079F4, + 3094: 0x0000416E, + 3095: 0x000216E6, + 3096: 0x00004132, + 3097: 0x00009235, + 3098: 0x000079F1, + 3099: 0x00020D4C, + 3100: 0x0002498C, + 3101: 0x00020299, + 3102: 0x00023DBA, + 3103: 0x0002176E, + 3104: 0x00003597, + 3105: 0x0000556B, + 3106: 0x00003570, + 3107: 0x000036AA, + 3108: 0x000201D4, + 3109: 0x00020C0D, + 3110: 0x00007AE2, + 3111: 0x00005A59, + 3112: 0x000226F5, + 3113: 0x00025AAF, + 3114: 0x00025A9C, + 3115: 0x00005A0D, + 3116: 0x0002025B, + 3117: 0x000078F0, + 3118: 0x00005A2A, + 3119: 0x00025BC6, + 3120: 0x00007AFE, + 3121: 0x000041F9, + 3122: 0x00007C5D, + 3123: 0x00007C6D, + 3124: 0x00004211, + 3125: 0x00025BB3, + 3126: 0x00025EBC, + 3127: 0x00025EA6, + 3128: 0x00007CCD, + 3129: 0x000249F9, + 3130: 0x000217B0, + 3131: 0x00007C8E, + 3132: 0x00007C7C, + 3133: 0x00007CAE, + 3134: 0x00006AB2, + 3135: 0x00007DDC, + 3136: 0x00007E07, + 3137: 0x00007DD3, + 3138: 0x00007F4E, + 3139: 0x00026261, + 3140: 0x0002615C, + 3141: 0x00027B48, + 3142: 0x00007D97, + 3143: 0x00025E82, + 3144: 0x0000426A, + 3145: 0x00026B75, + 3146: 0x00020916, + 3147: 0x000067D6, + 3148: 0x0002004E, + 3149: 0x000235CF, + 3150: 0x000057C4, + 3151: 0x00026412, + 3152: 0x000263F8, + 3153: 0x00024962, + 3154: 0x00007FDD, + 3155: 0x00007B27, + 3156: 0x0002082C, + 3157: 0x00025AE9, + 3158: 0x00025D43, + 3159: 0x00007B0C, + 3160: 0x00025E0E, + 3161: 0x000099E6, + 3162: 0x00008645, + 3163: 0x00009A63, + 3164: 0x00006A1C, + 3165: 0x0002343F, + 3166: 0x000039E2, + 3167: 0x000249F7, + 3168: 0x000265AD, + 3169: 0x00009A1F, + 3170: 0x000265A0, + 3171: 0x00008480, + 3172: 0x00027127, + 3173: 0x00026CD1, + 3174: 0x000044EA, + 3175: 0x00008137, + 3176: 0x00004402, + 3177: 0x000080C6, + 3178: 0x00008109, + 3179: 0x00008142, + 3180: 0x000267B4, + 3181: 0x000098C3, + 3182: 0x00026A42, + 3183: 0x00008262, + 3184: 0x00008265, + 3185: 0x00026A51, + 3186: 0x00008453, + 3187: 0x00026DA7, + 3188: 0x00008610, + 3189: 0x0002721B, + 3190: 0x00005A86, + 3191: 0x0000417F, + 3192: 0x00021840, + 3193: 0x00005B2B, + 3194: 0x000218A1, + 3195: 0x00005AE4, + 3196: 0x000218D8, + 3197: 0x000086A0, + 3198: 0x0002F9BC, + 3199: 0x00023D8F, + 3200: 0x0000882D, + 3201: 0x00027422, + 3202: 0x00005A02, + 3203: 0x0000886E, + 3204: 0x00004F45, + 3205: 0x00008887, + 3206: 0x000088BF, + 3207: 0x000088E6, + 3208: 0x00008965, + 3209: 0x0000894D, + 3210: 0x00025683, + 3211: 0x00008954, + 3212: 0x00027785, + 3213: 0x00027784, + 3214: 0x00028BF5, + 3215: 0x00028BD9, + 3216: 0x00028B9C, + 3217: 0x000289F9, + 3218: 0x00003EAD, + 3219: 0x000084A3, + 3220: 0x000046F5, + 3221: 0x000046CF, + 3222: 0x000037F2, + 3223: 0x00008A3D, + 3224: 0x00008A1C, + 3225: 0x00029448, + 3226: 0x00005F4D, + 3227: 0x0000922B, + 3228: 0x00024284, + 3229: 0x000065D4, + 3230: 0x00007129, + 3231: 0x000070C4, + 3232: 0x00021845, + 3233: 0x00009D6D, + 3234: 0x00008C9F, + 3235: 0x00008CE9, + 3236: 0x00027DDC, + 3237: 0x0000599A, + 3238: 0x000077C3, + 3239: 0x000059F0, + 3240: 0x0000436E, + 3241: 0x000036D4, + 3242: 0x00008E2A, + 3243: 0x00008EA7, + 3244: 0x00024C09, + 3245: 0x00008F30, + 3246: 0x00008F4A, + 3247: 0x000042F4, + 3248: 0x00006C58, + 3249: 0x00006FBB, + 3250: 0x00022321, + 3251: 0x0000489B, + 3252: 0x00006F79, + 3253: 0x00006E8B, + 3254: 0x000217DA, + 3255: 0x00009BE9, + 3256: 0x000036B5, + 3257: 0x0002492F, + 3258: 0x000090BB, + 3259: 0x00009097, + 3260: 0x00005571, + 3261: 0x00004906, + 3262: 0x000091BB, + 3263: 0x00009404, + 3264: 0x00028A4B, + 3265: 0x00004062, + 3266: 0x00028AFC, + 3267: 0x00009427, + 3268: 0x00028C1D, + 3269: 0x00028C3B, + 3270: 0x000084E5, + 3271: 0x00008A2B, + 3272: 0x00009599, + 3273: 0x000095A7, + 3274: 0x00009597, + 3275: 0x00009596, + 3276: 0x00028D34, + 3277: 0x00007445, + 3278: 0x00003EC2, + 3279: 0x000248FF, + 3280: 0x00024A42, + 3281: 0x000243EA, + 3282: 0x00003EE7, + 3283: 0x00023225, + 3284: 0x0000968F, + 3285: 0x00028EE7, + 3286: 0x00028E66, + 3287: 0x00028E65, + 3288: 0x00003ECC, + 3289: 0x000249ED, + 3290: 0x00024A78, + 3291: 0x00023FEE, + 3292: 0x00007412, + 3293: 0x0000746B, + 3294: 0x00003EFC, + 3295: 0x00009741, + 3296: 0x000290B0, + 3297: 0x00006847, + 3298: 0x00004A1D, + 3299: 0x00029093, + 3300: 0x000257DF, + 3301: 0x0000975D, + 3302: 0x00009368, + 3303: 0x00028989, + 3304: 0x00028C26, + 3305: 0x00028B2F, + 3306: 0x000263BE, + 3307: 0x000092BA, + 3308: 0x00005B11, + 3309: 0x00008B69, + 3310: 0x0000493C, + 3311: 0x000073F9, + 3312: 0x0002421B, + 3313: 0x0000979B, + 3314: 0x00009771, + 3315: 0x00009938, + 3316: 0x00020F26, + 3317: 0x00005DC1, + 3318: 0x00028BC5, + 3319: 0x00024AB2, + 3320: 0x0000981F, + 3321: 0x000294DA, + 3322: 0x000092F6, + 3323: 0x000295D7, + 3324: 0x000091E5, + 3325: 0x000044C0, + 3326: 0x00028B50, + 3327: 0x00024A67, + 3328: 0x00028B64, + 3329: 0x000098DC, + 3330: 0x00028A45, + 3331: 0x00003F00, + 3332: 0x0000922A, + 3333: 0x00004925, + 3334: 0x00008414, + 3335: 0x0000993B, + 3336: 0x0000994D, + 3337: 0x00027B06, + 3338: 0x00003DFD, + 3339: 0x0000999B, + 3340: 0x00004B6F, + 3341: 0x000099AA, + 3342: 0x00009A5C, + 3343: 0x00028B65, + 3344: 0x000258C8, + 3345: 0x00006A8F, + 3346: 0x00009A21, + 3347: 0x00005AFE, + 3348: 0x00009A2F, + 3349: 0x000298F1, + 3350: 0x00004B90, + 3351: 0x00029948, + 3352: 0x000099BC, + 3353: 0x00004BBD, + 3354: 0x00004B97, + 3355: 0x0000937D, + 3356: 0x00005872, + 3357: 0x00021302, + 3358: 0x00005822, + 3359: 0x000249B8, + 3360: 0x000214E8, + 3361: 0x00007844, + 3362: 0x0002271F, + 3363: 0x00023DB8, + 3364: 0x000068C5, + 3365: 0x00003D7D, + 3366: 0x00009458, + 3367: 0x00003927, + 3368: 0x00006150, + 3369: 0x00022781, + 3370: 0x0002296B, + 3371: 0x00006107, + 3372: 0x00009C4F, + 3373: 0x00009C53, + 3374: 0x00009C7B, + 3375: 0x00009C35, + 3376: 0x00009C10, + 3377: 0x00009B7F, + 3378: 0x00009BCF, + 3379: 0x00029E2D, + 3380: 0x00009B9F, + 3381: 0x0002A1F5, + 3382: 0x0002A0FE, + 3383: 0x00009D21, + 3384: 0x00004CAE, + 3385: 0x00024104, + 3386: 0x00009E18, + 3387: 0x00004CB0, + 3388: 0x00009D0C, + 3389: 0x0002A1B4, + 3390: 0x0002A0ED, + 3391: 0x0002A0F3, + 3392: 0x0002992F, + 3393: 0x00009DA5, + 3394: 0x000084BD, + 3395: 0x00026E12, + 3396: 0x00026FDF, + 3397: 0x00026B82, + 3398: 0x000085FC, + 3399: 0x00004533, + 3400: 0x00026DA4, + 3401: 0x00026E84, + 3402: 0x00026DF0, + 3403: 0x00008420, + 3404: 0x000085EE, + 3405: 0x00026E00, + 3406: 0x000237D7, + 3407: 0x00026064, + 3408: 0x000079E2, + 3409: 0x0002359C, + 3410: 0x00023640, + 3411: 0x0000492D, + 3412: 0x000249DE, + 3413: 0x00003D62, + 3414: 0x000093DB, + 3415: 0x000092BE, + 3416: 0x00009348, + 3417: 0x000202BF, + 3418: 0x000078B9, + 3419: 0x00009277, + 3420: 0x0000944D, + 3421: 0x00004FE4, + 3422: 0x00003440, + 3423: 0x00009064, + 3424: 0x0002555D, + 3425: 0x0000783D, + 3426: 0x00007854, + 3427: 0x000078B6, + 3428: 0x0000784B, + 3429: 0x00021757, + 3430: 0x000231C9, + 3431: 0x00024941, + 3432: 0x0000369A, + 3433: 0x00004F72, + 3434: 0x00006FDA, + 3435: 0x00006FD9, + 3436: 0x0000701E, + 3437: 0x0000701E, + 3438: 0x00005414, + 3439: 0x000241B5, + 3440: 0x000057BB, + 3441: 0x000058F3, + 3442: 0x0000578A, + 3443: 0x00009D16, + 3444: 0x000057D7, + 3445: 0x00007134, + 3446: 0x000034AF, + 3447: 0x000241AC, + 3448: 0x000071EB, + 3449: 0x00026C40, + 3450: 0x00024F97, + 3451: 0x00005B28, + 3452: 0x000217B5, + 3453: 0x00028A49, + 3454: 0x0000610C, + 3455: 0x00005ACE, + 3456: 0x00005A0B, + 3457: 0x000042BC, + 3458: 0x00024488, + 3459: 0x0000372C, + 3460: 0x00004B7B, + 3461: 0x000289FC, + 3462: 0x000093BB, + 3463: 0x000093B8, + 3464: 0x000218D6, + 3465: 0x00020F1D, + 3466: 0x00008472, + 3467: 0x00026CC0, + 3468: 0x00021413, + 3469: 0x000242FA, + 3470: 0x00022C26, + 3471: 0x000243C1, + 3472: 0x00005994, + 3473: 0x00023DB7, + 3474: 0x00026741, + 3475: 0x00007DA8, + 3476: 0x0002615B, + 3477: 0x000260A4, + 3478: 0x000249B9, + 3479: 0x0002498B, + 3480: 0x000289FA, + 3481: 0x000092E5, + 3482: 0x000073E2, + 3483: 0x00003EE9, + 3484: 0x000074B4, + 3485: 0x00028B63, + 3486: 0x0002189F, + 3487: 0x00003EE1, + 3488: 0x00024AB3, + 3489: 0x00006AD8, + 3490: 0x000073F3, + 3491: 0x000073FB, + 3492: 0x00003ED6, + 3493: 0x00024A3E, + 3494: 0x00024A94, + 3495: 0x000217D9, + 3496: 0x00024A66, + 3497: 0x000203A7, + 3498: 0x00021424, + 3499: 0x000249E5, + 3500: 0x00007448, + 3501: 0x00024916, + 3502: 0x000070A5, + 3503: 0x00024976, + 3504: 0x00009284, + 3505: 0x000073E6, + 3506: 0x0000935F, + 3507: 0x000204FE, + 3508: 0x00009331, + 3509: 0x00028ACE, + 3510: 0x00028A16, + 3511: 0x00009386, + 3512: 0x00028BE7, + 3513: 0x000255D5, + 3514: 0x00004935, + 3515: 0x00028A82, + 3516: 0x0000716B, + 3517: 0x00024943, + 3518: 0x00020CFF, + 3519: 0x000056A4, + 3520: 0x0002061A, + 3521: 0x00020BEB, + 3522: 0x00020CB8, + 3523: 0x00005502, + 3524: 0x000079C4, + 3525: 0x000217FA, + 3526: 0x00007DFE, + 3527: 0x000216C2, + 3528: 0x00024A50, + 3529: 0x00021852, + 3530: 0x0000452E, + 3531: 0x00009401, + 3532: 0x0000370A, + 3533: 0x00028AC0, + 3534: 0x000249AD, + 3535: 0x000059B0, + 3536: 0x000218BF, + 3537: 0x00021883, + 3538: 0x00027484, + 3539: 0x00005AA1, + 3540: 0x000036E2, + 3541: 0x00023D5B, + 3542: 0x000036B0, + 3543: 0x0000925F, + 3544: 0x00005A79, + 3545: 0x00028A81, + 3546: 0x00021862, + 3547: 0x00009374, + 3548: 0x00003CCD, + 3549: 0x00020AB4, + 3550: 0x00004A96, + 3551: 0x0000398A, + 3552: 0x000050F4, + 3553: 0x00003D69, + 3554: 0x00003D4C, + 3555: 0x0002139C, + 3556: 0x00007175, + 3557: 0x000042FB, + 3558: 0x00028218, + 3559: 0x00006E0F, + 3560: 0x000290E4, + 3561: 0x000044EB, + 3562: 0x00006D57, + 3563: 0x00027E4F, + 3564: 0x00007067, + 3565: 0x00006CAF, + 3566: 0x00003CD6, + 3567: 0x00023FED, + 3568: 0x00023E2D, + 3569: 0x00006E02, + 3570: 0x00006F0C, + 3571: 0x00003D6F, + 3572: 0x000203F5, + 3573: 0x00007551, + 3574: 0x000036BC, + 3575: 0x000034C8, + 3576: 0x00004680, + 3577: 0x00003EDA, + 3578: 0x00004871, + 3579: 0x000059C4, + 3580: 0x0000926E, + 3581: 0x0000493E, + 3582: 0x00008F41, + 3583: 0x00028C1C, + 3584: 0x00026BC0, + 3585: 0x00005812, + 3586: 0x000057C8, + 3587: 0x000036D6, + 3588: 0x00021452, + 3589: 0x000070FE, + 3590: 0x00024362, + 3591: 0x00024A71, + 3592: 0x00022FE3, + 3593: 0x000212B0, + 3594: 0x000223BD, + 3595: 0x000068B9, + 3596: 0x00006967, + 3597: 0x00021398, + 3598: 0x000234E5, + 3599: 0x00027BF4, + 3600: 0x000236DF, + 3601: 0x00028A83, + 3602: 0x000237D6, + 3603: 0x000233FA, + 3604: 0x00024C9F, + 3605: 0x00006A1A, + 3606: 0x000236AD, + 3607: 0x00026CB7, + 3608: 0x0000843E, + 3609: 0x000044DF, + 3610: 0x000044CE, + 3611: 0x00026D26, + 3612: 0x00026D51, + 3613: 0x00026C82, + 3614: 0x00026FDE, + 3615: 0x00006F17, + 3616: 0x00027109, + 3617: 0x0000833D, + 3618: 0x0002173A, + 3619: 0x000083ED, + 3620: 0x00026C80, + 3621: 0x00027053, + 3622: 0x000217DB, + 3623: 0x00005989, + 3624: 0x00005A82, + 3625: 0x000217B3, + 3626: 0x00005A61, + 3627: 0x00005A71, + 3628: 0x00021905, + 3629: 0x000241FC, + 3630: 0x0000372D, + 3631: 0x000059EF, + 3632: 0x0002173C, + 3633: 0x000036C7, + 3634: 0x0000718E, + 3635: 0x00009390, + 3636: 0x0000669A, + 3637: 0x000242A5, + 3638: 0x00005A6E, + 3639: 0x00005A2B, + 3640: 0x00024293, + 3641: 0x00006A2B, + 3642: 0x00023EF9, + 3643: 0x00027736, + 3644: 0x0002445B, + 3645: 0x000242CA, + 3646: 0x0000711D, + 3647: 0x00024259, + 3648: 0x000289E1, + 3649: 0x00004FB0, + 3650: 0x00026D28, + 3651: 0x00005CC2, + 3652: 0x000244CE, + 3653: 0x00027E4D, + 3654: 0x000243BD, + 3655: 0x00006A0C, + 3656: 0x00024256, + 3657: 0x00021304, + 3658: 0x000070A6, + 3659: 0x00007133, + 3660: 0x000243E9, + 3661: 0x00003DA5, + 3662: 0x00006CDF, + 3663: 0x0002F825, + 3664: 0x00024A4F, + 3665: 0x00007E65, + 3666: 0x000059EB, + 3667: 0x00005D2F, + 3668: 0x00003DF3, + 3669: 0x00005F5C, + 3670: 0x00024A5D, + 3671: 0x000217DF, + 3672: 0x00007DA4, + 3673: 0x00008426, + 3674: 0x00005485, + 3675: 0x00023AFA, + 3676: 0x00023300, + 3677: 0x00020214, + 3678: 0x0000577E, + 3679: 0x000208D5, + 3680: 0x00020619, + 3681: 0x00003FE5, + 3682: 0x00021F9E, + 3683: 0x0002A2B6, + 3684: 0x00007003, + 3685: 0x0002915B, + 3686: 0x00005D70, + 3687: 0x0000738F, + 3688: 0x00007CD3, + 3689: 0x00028A59, + 3690: 0x00029420, + 3691: 0x00004FC8, + 3692: 0x00007FE7, + 3693: 0x000072CD, + 3694: 0x00007310, + 3695: 0x00027AF4, + 3696: 0x00007338, + 3697: 0x00007339, + 3698: 0x000256F6, + 3699: 0x00007341, + 3700: 0x00007348, + 3701: 0x00003EA9, + 3702: 0x00027B18, + 3703: 0x0000906C, + 3704: 0x000071F5, + 3705: 0x000248F2, + 3706: 0x000073E1, + 3707: 0x000081F6, + 3708: 0x00003ECA, + 3709: 0x0000770C, + 3710: 0x00003ED1, + 3711: 0x00006CA2, + 3712: 0x000056FD, + 3713: 0x00007419, + 3714: 0x0000741E, + 3715: 0x0000741F, + 3716: 0x00003EE2, + 3717: 0x00003EF0, + 3718: 0x00003EF4, + 3719: 0x00003EFA, + 3720: 0x000074D3, + 3721: 0x00003F0E, + 3722: 0x00003F53, + 3723: 0x00007542, + 3724: 0x0000756D, + 3725: 0x00007572, + 3726: 0x0000758D, + 3727: 0x00003F7C, + 3728: 0x000075C8, + 3729: 0x000075DC, + 3730: 0x00003FC0, + 3731: 0x0000764D, + 3732: 0x00003FD7, + 3733: 0x00007674, + 3734: 0x00003FDC, + 3735: 0x0000767A, + 3736: 0x00024F5C, + 3737: 0x00007188, + 3738: 0x00005623, + 3739: 0x00008980, + 3740: 0x00005869, + 3741: 0x0000401D, + 3742: 0x00007743, + 3743: 0x00004039, + 3744: 0x00006761, + 3745: 0x00004045, + 3746: 0x000035DB, + 3747: 0x00007798, + 3748: 0x0000406A, + 3749: 0x0000406F, + 3750: 0x00005C5E, + 3751: 0x000077BE, + 3752: 0x000077CB, + 3753: 0x000058F2, + 3754: 0x00007818, + 3755: 0x000070B9, + 3756: 0x0000781C, + 3757: 0x000040A8, + 3758: 0x00007839, + 3759: 0x00007847, + 3760: 0x00007851, + 3761: 0x00007866, + 3762: 0x00008448, + 3763: 0x00025535, + 3764: 0x00007933, + 3765: 0x00006803, + 3766: 0x00007932, + 3767: 0x00004103, + 3768: 0x00004109, + 3769: 0x00007991, + 3770: 0x00007999, + 3771: 0x00008FBB, + 3772: 0x00007A06, + 3773: 0x00008FBC, + 3774: 0x00004167, + 3775: 0x00007A91, + 3776: 0x000041B2, + 3777: 0x00007ABC, + 3778: 0x00008279, + 3779: 0x000041C4, + 3780: 0x00007ACF, + 3781: 0x00007ADB, + 3782: 0x000041CF, + 3783: 0x00004E21, + 3784: 0x00007B62, + 3785: 0x00007B6C, + 3786: 0x00007B7B, + 3787: 0x00007C12, + 3788: 0x00007C1B, + 3789: 0x00004260, + 3790: 0x0000427A, + 3791: 0x00007C7B, + 3792: 0x00007C9C, + 3793: 0x0000428C, + 3794: 0x00007CB8, + 3795: 0x00004294, + 3796: 0x00007CED, + 3797: 0x00008F93, + 3798: 0x000070C0, + 3799: 0x00020CCF, + 3800: 0x00007DCF, + 3801: 0x00007DD4, + 3802: 0x00007DD0, + 3803: 0x00007DFD, + 3804: 0x00007FAE, + 3805: 0x00007FB4, + 3806: 0x0000729F, + 3807: 0x00004397, + 3808: 0x00008020, + 3809: 0x00008025, + 3810: 0x00007B39, + 3811: 0x0000802E, + 3812: 0x00008031, + 3813: 0x00008054, + 3814: 0x00003DCC, + 3815: 0x000057B4, + 3816: 0x000070A0, + 3817: 0x000080B7, + 3818: 0x000080E9, + 3819: 0x000043ED, + 3820: 0x0000810C, + 3821: 0x0000732A, + 3822: 0x0000810E, + 3823: 0x00008112, + 3824: 0x00007560, + 3825: 0x00008114, + 3826: 0x00004401, + 3827: 0x00003B39, + 3828: 0x00008156, + 3829: 0x00008159, + 3830: 0x0000815A, + 3831: 0x00004413, + 3832: 0x0000583A, + 3833: 0x0000817C, + 3834: 0x00008184, + 3835: 0x00004425, + 3836: 0x00008193, + 3837: 0x0000442D, + 3838: 0x000081A5, + 3839: 0x000057EF, + 3840: 0x000081C1, + 3841: 0x000081E4, + 3842: 0x00008254, + 3843: 0x0000448F, + 3844: 0x000082A6, + 3845: 0x00008276, + 3846: 0x000082CA, + 3847: 0x000082D8, + 3848: 0x000082FF, + 3849: 0x000044B0, + 3850: 0x00008357, + 3851: 0x00009669, + 3852: 0x0000698A, + 3853: 0x00008405, + 3854: 0x000070F5, + 3855: 0x00008464, + 3856: 0x000060E3, + 3857: 0x00008488, + 3858: 0x00004504, + 3859: 0x000084BE, + 3860: 0x000084E1, + 3861: 0x000084F8, + 3862: 0x00008510, + 3863: 0x00008538, + 3864: 0x00008552, + 3865: 0x0000453B, + 3866: 0x0000856F, + 3867: 0x00008570, + 3868: 0x000085E0, + 3869: 0x00004577, + 3870: 0x00008672, + 3871: 0x00008692, + 3872: 0x000086B2, + 3873: 0x000086EF, + 3874: 0x00009645, + 3875: 0x0000878B, + 3876: 0x00004606, + 3877: 0x00004617, + 3878: 0x000088AE, + 3879: 0x000088FF, + 3880: 0x00008924, + 3881: 0x00008947, + 3882: 0x00008991, + 3883: 0x00027967, + 3884: 0x00008A29, + 3885: 0x00008A38, + 3886: 0x00008A94, + 3887: 0x00008AB4, + 3888: 0x00008C51, + 3889: 0x00008CD4, + 3890: 0x00008CF2, + 3891: 0x00008D1C, + 3892: 0x00004798, + 3893: 0x0000585F, + 3894: 0x00008DC3, + 3895: 0x000047ED, + 3896: 0x00004EEE, + 3897: 0x00008E3A, + 3898: 0x000055D8, + 3899: 0x00005754, + 3900: 0x00008E71, + 3901: 0x000055F5, + 3902: 0x00008EB0, + 3903: 0x00004837, + 3904: 0x00008ECE, + 3905: 0x00008EE2, + 3906: 0x00008EE4, + 3907: 0x00008EED, + 3908: 0x00008EF2, + 3909: 0x00008FB7, + 3910: 0x00008FC1, + 3911: 0x00008FCA, + 3912: 0x00008FCC, + 3913: 0x00009033, + 3914: 0x000099C4, + 3915: 0x000048AD, + 3916: 0x000098E0, + 3917: 0x00009213, + 3918: 0x0000491E, + 3919: 0x00009228, + 3920: 0x00009258, + 3921: 0x0000926B, + 3922: 0x000092B1, + 3923: 0x000092AE, + 3924: 0x000092BF, + 3925: 0x000092E3, + 3926: 0x000092EB, + 3927: 0x000092F3, + 3928: 0x000092F4, + 3929: 0x000092FD, + 3930: 0x00009343, + 3931: 0x00009384, + 3932: 0x000093AD, + 3933: 0x00004945, + 3934: 0x00004951, + 3935: 0x00009EBF, + 3936: 0x00009417, + 3937: 0x00005301, + 3938: 0x0000941D, + 3939: 0x0000942D, + 3940: 0x0000943E, + 3941: 0x0000496A, + 3942: 0x00009454, + 3943: 0x00009479, + 3944: 0x0000952D, + 3945: 0x000095A2, + 3946: 0x000049A7, + 3947: 0x000095F4, + 3948: 0x00009633, + 3949: 0x000049E5, + 3950: 0x000067A0, + 3951: 0x00004A24, + 3952: 0x00009740, + 3953: 0x00004A35, + 3954: 0x000097B2, + 3955: 0x000097C2, + 3956: 0x00005654, + 3957: 0x00004AE4, + 3958: 0x000060E8, + 3959: 0x000098B9, + 3960: 0x00004B19, + 3961: 0x000098F1, + 3962: 0x00005844, + 3963: 0x0000990E, + 3964: 0x00009919, + 3965: 0x000051B4, + 3966: 0x0000991C, + 3967: 0x00009937, + 3968: 0x00009942, + 3969: 0x0000995D, + 3970: 0x00009962, + 3971: 0x00004B70, + 3972: 0x000099C5, + 3973: 0x00004B9D, + 3974: 0x00009A3C, + 3975: 0x00009B0F, + 3976: 0x00007A83, + 3977: 0x00009B69, + 3978: 0x00009B81, + 3979: 0x00009BDD, + 3980: 0x00009BF1, + 3981: 0x00009BF4, + 3982: 0x00004C6D, + 3983: 0x00009C20, + 3984: 0x0000376F, + 3985: 0x00021BC2, + 3986: 0x00009D49, + 3987: 0x00009C3A, + 3988: 0x00009EFE, + 3989: 0x00005650, + 3990: 0x00009D93, + 3991: 0x00009DBD, + 3992: 0x00009DC0, + 3993: 0x00009DFC, + 3994: 0x000094F6, + 3995: 0x00008FB6, + 3996: 0x00009E7B, + 3997: 0x00009EAC, + 3998: 0x00009EB1, + 3999: 0x00009EBD, + 4000: 0x00009EC6, + 4001: 0x000094DC, + 4002: 0x00009EE2, + 4003: 0x00009EF1, + 4004: 0x00009EF8, + 4005: 0x00007AC8, + 4006: 0x00009F44, + 4007: 0x00020094, + 4008: 0x000202B7, + 4009: 0x000203A0, + 4010: 0x0000691A, + 4011: 0x000094C3, + 4012: 0x000059AC, + 4013: 0x000204D7, + 4014: 0x00005840, + 4015: 0x000094C1, + 4016: 0x000037B9, + 4017: 0x000205D5, + 4018: 0x00020615, + 4019: 0x00020676, + 4020: 0x000216BA, + 4021: 0x00005757, + 4022: 0x00007173, + 4023: 0x00020AC2, + 4024: 0x00020ACD, + 4025: 0x00020BBF, + 4026: 0x0000546A, + 4027: 0x0002F83B, + 4028: 0x00020BCB, + 4029: 0x0000549E, + 4030: 0x00020BFB, + 4031: 0x00020C3B, + 4032: 0x00020C53, + 4033: 0x00020C65, + 4034: 0x00020C7C, + 4035: 0x000060E7, + 4036: 0x00020C8D, + 4037: 0x0000567A, + 4038: 0x00020CB5, + 4039: 0x00020CDD, + 4040: 0x00020CED, + 4041: 0x00020D6F, + 4042: 0x00020DB2, + 4043: 0x00020DC8, + 4044: 0x00006955, + 4045: 0x00009C2F, + 4046: 0x000087A5, + 4047: 0x00020E04, + 4048: 0x00020E0E, + 4049: 0x00020ED7, + 4050: 0x00020F90, + 4051: 0x00020F2D, + 4052: 0x00020E73, + 4053: 0x00005C20, + 4054: 0x00020FBC, + 4055: 0x00005E0B, + 4056: 0x0002105C, + 4057: 0x0002104F, + 4058: 0x00021076, + 4059: 0x0000671E, + 4060: 0x0002107B, + 4061: 0x00021088, + 4062: 0x00021096, + 4063: 0x00003647, + 4064: 0x000210BF, + 4065: 0x000210D3, + 4066: 0x0002112F, + 4067: 0x0002113B, + 4068: 0x00005364, + 4069: 0x000084AD, + 4070: 0x000212E3, + 4071: 0x00021375, + 4072: 0x00021336, + 4073: 0x00008B81, + 4074: 0x00021577, + 4075: 0x00021619, + 4076: 0x000217C3, + 4077: 0x000217C7, + 4078: 0x00004E78, + 4079: 0x000070BB, + 4080: 0x0002182D, + 4081: 0x0002196A, + 4082: 0x00021A2D, + 4083: 0x00021A45, + 4084: 0x00021C2A, + 4085: 0x00021C70, + 4086: 0x00021CAC, + 4087: 0x00021EC8, + 4088: 0x000062C3, + 4089: 0x00021ED5, + 4090: 0x00021F15, + 4091: 0x00007198, + 4092: 0x00006855, + 4093: 0x00022045, + 4094: 0x000069E9, + 4095: 0x000036C8, + 4096: 0x0002227C, + 4097: 0x000223D7, + 4098: 0x000223FA, + 4099: 0x0002272A, + 4100: 0x00022871, + 4101: 0x0002294F, + 4102: 0x000082FD, + 4103: 0x00022967, + 4104: 0x00022993, + 4105: 0x00022AD5, + 4106: 0x000089A5, + 4107: 0x00022AE8, + 4108: 0x00008FA0, + 4109: 0x00022B0E, + 4110: 0x000097B8, + 4111: 0x00022B3F, + 4112: 0x00009847, + 4113: 0x00009ABD, + 4114: 0x00022C4C, + 4116: 0x00022C88, + 4117: 0x00022CB7, + 4118: 0x00025BE8, + 4119: 0x00022D08, + 4120: 0x00022D12, + 4121: 0x00022DB7, + 4122: 0x00022D95, + 4123: 0x00022E42, + 4124: 0x00022F74, + 4125: 0x00022FCC, + 4126: 0x00023033, + 4127: 0x00023066, + 4128: 0x0002331F, + 4129: 0x000233DE, + 4130: 0x00005FB1, + 4131: 0x00006648, + 4132: 0x000066BF, + 4133: 0x00027A79, + 4134: 0x00023567, + 4135: 0x000235F3, + 4136: 0x00007201, + 4137: 0x000249BA, + 4138: 0x000077D7, + 4139: 0x0002361A, + 4140: 0x00023716, + 4141: 0x00007E87, + 4142: 0x00020346, + 4143: 0x000058B5, + 4144: 0x0000670E, + 4145: 0x00006918, + 4146: 0x00023AA7, + 4147: 0x00027657, + 4148: 0x00025FE2, + 4149: 0x00023E11, + 4150: 0x00023EB9, + 4151: 0x000275FE, + 4152: 0x0002209A, + 4153: 0x000048D0, + 4154: 0x00004AB8, + 4155: 0x00024119, + 4156: 0x00028A9A, + 4157: 0x000242EE, + 4158: 0x0002430D, + 4159: 0x0002403B, + 4160: 0x00024334, + 4161: 0x00024396, + 4162: 0x00024A45, + 4163: 0x000205CA, + 4164: 0x000051D2, + 4165: 0x00020611, + 4166: 0x0000599F, + 4167: 0x00021EA8, + 4168: 0x00003BBE, + 4169: 0x00023CFF, + 4170: 0x00024404, + 4171: 0x000244D6, + 4172: 0x00005788, + 4173: 0x00024674, + 4174: 0x0000399B, + 4175: 0x0002472F, + 4176: 0x000285E8, + 4177: 0x000299C9, + 4178: 0x00003762, + 4179: 0x000221C3, + 4180: 0x00008B5E, + 4181: 0x00028B4E, + 4182: 0x000099D6, + 4183: 0x00024812, + 4184: 0x000248FB, + 4185: 0x00024A15, + 4186: 0x00007209, + 4187: 0x00024AC0, + 4188: 0x00020C78, + 4189: 0x00005965, + 4190: 0x00024EA5, + 4191: 0x00024F86, + 4192: 0x00020779, + 4193: 0x00008EDA, + 4194: 0x0002502C, + 4195: 0x0000528F, + 4196: 0x0000573F, + 4197: 0x00007171, + 4198: 0x00025299, + 4199: 0x00025419, + 4200: 0x00023F4A, + 4201: 0x00024AA7, + 4202: 0x000055BC, + 4203: 0x00025446, + 4204: 0x0002546E, + 4205: 0x00026B52, + 4206: 0x000091D4, + 4207: 0x00003473, + 4208: 0x0002553F, + 4209: 0x00027632, + 4210: 0x0002555E, + 4211: 0x00004718, + 4212: 0x00025562, + 4213: 0x00025566, + 4214: 0x000257C7, + 4215: 0x0002493F, + 4216: 0x0002585D, + 4217: 0x00005066, + 4218: 0x000034FB, + 4219: 0x000233CC, + 4220: 0x000060DE, + 4221: 0x00025903, + 4222: 0x0000477C, + 4223: 0x00028948, + 4224: 0x00025AAE, + 4225: 0x00025B89, + 4226: 0x00025C06, + 4227: 0x00021D90, + 4228: 0x000057A1, + 4229: 0x00007151, + 4230: 0x00006FB6, + 4231: 0x00026102, + 4232: 0x00027C12, + 4233: 0x00009056, + 4234: 0x000261B2, + 4235: 0x00024F9A, + 4236: 0x00008B62, + 4237: 0x00026402, + 4238: 0x0002644A, + 4239: 0x00005D5B, + 4240: 0x00026BF7, + 4241: 0x00008F36, + 4242: 0x00026484, + 4243: 0x0002191C, + 4244: 0x00008AEA, + 4245: 0x000249F6, + 4246: 0x00026488, + 4247: 0x00023FEF, + 4248: 0x00026512, + 4249: 0x00004BC0, + 4250: 0x000265BF, + 4251: 0x000266B5, + 4252: 0x0002271B, + 4253: 0x00009465, + 4254: 0x000257E1, + 4255: 0x00006195, + 4256: 0x00005A27, + 4257: 0x0002F8CD, + 4258: 0x00004FBB, + 4259: 0x000056B9, + 4260: 0x00024521, + 4261: 0x000266FC, + 4262: 0x00004E6A, + 4263: 0x00024934, + 4264: 0x00009656, + 4265: 0x00006D8F, + 4266: 0x00026CBD, + 4267: 0x00003618, + 4268: 0x00008977, + 4269: 0x00026799, + 4270: 0x0002686E, + 4271: 0x00026411, + 4272: 0x0002685E, + 4273: 0x000071DF, + 4274: 0x000268C7, + 4275: 0x00007B42, + 4276: 0x000290C0, + 4277: 0x00020A11, + 4278: 0x00026926, + 4279: 0x00009104, + 4280: 0x00026939, + 4281: 0x00007A45, + 4282: 0x00009DF0, + 4283: 0x000269FA, + 4284: 0x00009A26, + 4285: 0x00026A2D, + 4286: 0x0000365F, + 4287: 0x00026469, + 4288: 0x00020021, + 4289: 0x00007983, + 4290: 0x00026A34, + 4291: 0x00026B5B, + 4292: 0x00005D2C, + 4293: 0x00023519, + 4294: 0x000083CF, + 4295: 0x00026B9D, + 4296: 0x000046D0, + 4297: 0x00026CA4, + 4298: 0x0000753B, + 4299: 0x00008865, + 4300: 0x00026DAE, + 4301: 0x000058B6, + 4302: 0x0000371C, + 4303: 0x0002258D, + 4304: 0x0002704B, + 4305: 0x000271CD, + 4306: 0x00003C54, + 4307: 0x00027280, + 4308: 0x00027285, + 4309: 0x00009281, + 4310: 0x0002217A, + 4311: 0x0002728B, + 4312: 0x00009330, + 4313: 0x000272E6, + 4314: 0x000249D0, + 4315: 0x00006C39, + 4316: 0x0000949F, + 4317: 0x00027450, + 4318: 0x00020EF8, + 4319: 0x00008827, + 4320: 0x000088F5, + 4321: 0x00022926, + 4322: 0x00028473, + 4323: 0x000217B1, + 4324: 0x00006EB8, + 4325: 0x00024A2A, + 4326: 0x00021820, + 4327: 0x000039A4, + 4328: 0x000036B9, + 4329: 0x00005C10, + 4330: 0x000079E3, + 4331: 0x0000453F, + 4332: 0x000066B6, + 4333: 0x00029CAD, + 4334: 0x000298A4, + 4335: 0x00008943, + 4336: 0x000277CC, + 4337: 0x00027858, + 4338: 0x000056D6, + 4339: 0x000040DF, + 4340: 0x0002160A, + 4341: 0x000039A1, + 4342: 0x0002372F, + 4343: 0x000280E8, + 4344: 0x000213C5, + 4345: 0x000071AD, + 4346: 0x00008366, + 4347: 0x000279DD, + 4348: 0x000291A8, + 4349: 0x00005A67, + 4350: 0x00004CB7, + 4351: 0x000270AF, + 4352: 0x000289AB, + 4353: 0x000279FD, + 4354: 0x00027A0A, + 4355: 0x00027B0B, + 4356: 0x00027D66, + 4357: 0x0002417A, + 4358: 0x00007B43, + 4359: 0x0000797E, + 4360: 0x00028009, + 4361: 0x00006FB5, + 4362: 0x0002A2DF, + 4363: 0x00006A03, + 4364: 0x00028318, + 4365: 0x000053A2, + 4366: 0x00026E07, + 4367: 0x000093BF, + 4368: 0x00006836, + 4369: 0x0000975D, + 4370: 0x0002816F, + 4371: 0x00028023, + 4372: 0x000269B5, + 4373: 0x000213ED, + 4374: 0x0002322F, + 4375: 0x00028048, + 4376: 0x00005D85, + 4377: 0x00028C30, + 4378: 0x00028083, + 4379: 0x00005715, + 4380: 0x00009823, + 4381: 0x00028949, + 4382: 0x00005DAB, + 4383: 0x00024988, + 4384: 0x000065BE, + 4385: 0x000069D5, + 4386: 0x000053D2, + 4387: 0x00024AA5, + 4388: 0x00023F81, + 4389: 0x00003C11, + 4390: 0x00006736, + 4391: 0x00028090, + 4392: 0x000280F4, + 4393: 0x0002812E, + 4394: 0x00021FA1, + 4395: 0x0002814F, + 4396: 0x00028189, + 4397: 0x000281AF, + 4398: 0x0002821A, + 4399: 0x00028306, + 4400: 0x0002832F, + 4401: 0x0002838A, + 4402: 0x000035CA, + 4403: 0x00028468, + 4404: 0x000286AA, + 4405: 0x000048FA, + 4406: 0x000063E6, + 4407: 0x00028956, + 4408: 0x00007808, + 4409: 0x00009255, + 4410: 0x000289B8, + 4411: 0x000043F2, + 4412: 0x000289E7, + 4413: 0x000043DF, + 4414: 0x000289E8, + 4415: 0x00028B46, + 4416: 0x00028BD4, + 4417: 0x000059F8, + 4418: 0x00028C09, + 4419: 0x00008F0B, + 4420: 0x00028FC5, + 4421: 0x000290EC, + 4422: 0x00007B51, + 4423: 0x00029110, + 4424: 0x0002913C, + 4425: 0x00003DF7, + 4426: 0x0002915E, + 4427: 0x00024ACA, + 4428: 0x00008FD0, + 4429: 0x0000728F, + 4430: 0x0000568B, + 4431: 0x000294E7, + 4432: 0x000295E9, + 4433: 0x000295B0, + 4434: 0x000295B8, + 4435: 0x00029732, + 4436: 0x000298D1, + 4437: 0x00029949, + 4438: 0x0002996A, + 4439: 0x000299C3, + 4440: 0x00029A28, + 4441: 0x00029B0E, + 4442: 0x00029D5A, + 4443: 0x00029D9B, + 4444: 0x00007E9F, + 4445: 0x00029EF8, + 4446: 0x00029F23, + 4447: 0x00004CA4, + 4448: 0x00009547, + 4449: 0x0002A293, + 4450: 0x000071A2, + 4451: 0x0002A2FF, + 4452: 0x00004D91, + 4453: 0x00009012, + 4454: 0x0002A5CB, + 4455: 0x00004D9C, + 4456: 0x00020C9C, + 4457: 0x00008FBE, + 4458: 0x000055C1, + 4459: 0x00008FBA, + 4460: 0x000224B0, + 4461: 0x00008FB9, + 4462: 0x00024A93, + 4463: 0x00004509, + 4464: 0x00007E7F, + 4465: 0x00006F56, + 4466: 0x00006AB1, + 4467: 0x00004EEA, + 4468: 0x000034E4, + 4469: 0x00028B2C, + 4470: 0x0002789D, + 4471: 0x0000373A, + 4472: 0x00008E80, + 4473: 0x000217F5, + 4474: 0x00028024, + 4475: 0x00028B6C, + 4476: 0x00028B99, + 4477: 0x00027A3E, + 4478: 0x000266AF, + 4479: 0x00003DEB, + 4480: 0x00027655, + 4481: 0x00023CB7, + 4482: 0x00025635, + 4483: 0x00025956, + 4484: 0x00004E9A, + 4485: 0x00025E81, + 4486: 0x00026258, + 4487: 0x000056BF, + 4488: 0x00020E6D, + 4489: 0x00008E0E, + 4490: 0x00005B6D, + 4491: 0x00023E88, + 4492: 0x00024C9E, + 4493: 0x000063DE, + 4494: 0x000062D0, + 4495: 0x000217F6, + 4496: 0x0002187B, + 4497: 0x00006530, + 4498: 0x0000562D, + 4499: 0x00025C4A, + 4500: 0x0000541A, + 4501: 0x00025311, + 4502: 0x00003DC6, + 4503: 0x00029D98, + 4504: 0x00004C7D, + 4505: 0x00005622, + 4506: 0x0000561E, + 4507: 0x00007F49, + 4508: 0x00025ED8, + 4509: 0x00005975, + 4510: 0x00023D40, + 4511: 0x00008770, + 4512: 0x00004E1C, + 4513: 0x00020FEA, + 4514: 0x00020D49, + 4515: 0x000236BA, + 4516: 0x00008117, + 4517: 0x00009D5E, + 4518: 0x00008D18, + 4519: 0x0000763B, + 4520: 0x00009C45, + 4521: 0x0000764E, + 4522: 0x000077B9, + 4523: 0x00009345, + 4524: 0x00005432, + 4525: 0x00008148, + 4526: 0x000082F7, + 4527: 0x00005625, + 4528: 0x00008132, + 4529: 0x00008418, + 4530: 0x000080BD, + 4531: 0x000055EA, + 4532: 0x00007962, + 4533: 0x00005643, + 4534: 0x00005416, + 4535: 0x00020E9D, + 4536: 0x000035CE, + 4537: 0x00005605, + 4538: 0x000055F1, + 4539: 0x000066F1, + 4540: 0x000282E2, + 4541: 0x0000362D, + 4542: 0x00007534, + 4543: 0x000055F0, + 4544: 0x000055BA, + 4545: 0x00005497, + 4546: 0x00005572, + 4547: 0x00020C41, + 4548: 0x00020C96, + 4549: 0x00005ED0, + 4550: 0x00025148, + 4551: 0x00020E76, + 4552: 0x00022C62, + 4553: 0x00020EA2, + 4554: 0x00009EAB, + 4555: 0x00007D5A, + 4556: 0x000055DE, + 4557: 0x00021075, + 4558: 0x0000629D, + 4559: 0x0000976D, + 4560: 0x00005494, + 4561: 0x00008CCD, + 4562: 0x000071F6, + 4563: 0x00009176, + 4564: 0x000063FC, + 4565: 0x000063B9, + 4566: 0x000063FE, + 4567: 0x00005569, + 4568: 0x00022B43, + 4569: 0x00009C72, + 4570: 0x00022EB3, + 4571: 0x0000519A, + 4572: 0x000034DF, + 4573: 0x00020DA7, + 4574: 0x000051A7, + 4575: 0x0000544D, + 4576: 0x0000551E, + 4577: 0x00005513, + 4578: 0x00007666, + 4579: 0x00008E2D, + 4580: 0x0002688A, + 4581: 0x000075B1, + 4582: 0x000080B6, + 4583: 0x00008804, + 4584: 0x00008786, + 4585: 0x000088C7, + 4586: 0x000081B6, + 4587: 0x0000841C, + 4588: 0x000210C1, + 4589: 0x000044EC, + 4590: 0x00007304, + 4591: 0x00024706, + 4592: 0x00005B90, + 4593: 0x0000830B, + 4594: 0x00026893, + 4595: 0x0000567B, + 4596: 0x000226F4, + 4597: 0x00027D2F, + 4598: 0x000241A3, + 4599: 0x00027D73, + 4600: 0x00026ED0, + 4601: 0x000272B6, + 4602: 0x00009170, + 4603: 0x000211D9, + 4604: 0x00009208, + 4605: 0x00023CFC, + 4606: 0x0002A6A9, + 4607: 0x00020EAC, + 4608: 0x00020EF9, + 4609: 0x00007266, + 4610: 0x00021CA2, + 4611: 0x0000474E, + 4612: 0x00024FC2, + 4613: 0x00027FF9, + 4614: 0x00020FEB, + 4615: 0x000040FA, + 4616: 0x00009C5D, + 4617: 0x0000651F, + 4618: 0x00022DA0, + 4619: 0x000048F3, + 4620: 0x000247E0, + 4621: 0x00029D7C, + 4622: 0x00020FEC, + 4623: 0x00020E0A, + 4624: 0x00006062, + 4625: 0x000275A3, + 4626: 0x00020FED, + 4628: 0x00026048, + 4629: 0x00021187, + 4630: 0x000071A3, + 4631: 0x00007E8E, + 4632: 0x00009D50, + 4633: 0x00004E1A, + 4634: 0x00004E04, + 4635: 0x00003577, + 4636: 0x00005B0D, + 4637: 0x00006CB2, + 4638: 0x00005367, + 4639: 0x000036AC, + 4640: 0x000039DC, + 4641: 0x0000537D, + 4642: 0x000036A5, + 4643: 0x00024618, + 4644: 0x0000589A, + 4645: 0x00024B6E, + 4646: 0x0000822D, + 4647: 0x0000544B, + 4648: 0x000057AA, + 4649: 0x00025A95, + 4650: 0x00020979, + 4652: 0x00003A52, + 4653: 0x00022465, + 4654: 0x00007374, + 4655: 0x00029EAC, + 4656: 0x00004D09, + 4657: 0x00009BED, + 4658: 0x00023CFE, + 4659: 0x00029F30, + 4660: 0x00004C5B, + 4661: 0x00024FA9, + 4662: 0x0002959E, + 4663: 0x00029FDE, + 4664: 0x0000845C, + 4665: 0x00023DB6, + 4666: 0x000272B2, + 4667: 0x000267B3, + 4668: 0x00023720, + 4669: 0x0000632E, + 4670: 0x00007D25, + 4671: 0x00023EF7, + 4672: 0x00023E2C, + 4673: 0x00003A2A, + 4674: 0x00009008, + 4675: 0x000052CC, + 4676: 0x00003E74, + 4677: 0x0000367A, + 4678: 0x000045E9, + 4679: 0x0002048E, + 4680: 0x00007640, + 4681: 0x00005AF0, + 4682: 0x00020EB6, + 4683: 0x0000787A, + 4684: 0x00027F2E, + 4685: 0x000058A7, + 4686: 0x000040BF, + 4687: 0x0000567C, + 4688: 0x00009B8B, + 4689: 0x00005D74, + 4690: 0x00007654, + 4691: 0x0002A434, + 4692: 0x00009E85, + 4693: 0x00004CE1, + 4694: 0x000075F9, + 4695: 0x000037FB, + 4696: 0x00006119, + 4697: 0x000230DA, + 4698: 0x000243F2, + 4700: 0x0000565D, + 4701: 0x000212A9, + 4702: 0x000057A7, + 4703: 0x00024963, + 4704: 0x00029E06, + 4705: 0x00005234, + 4706: 0x000270AE, + 4707: 0x000035AD, + 4708: 0x00006C4A, + 4709: 0x00009D7C, + 4710: 0x00007C56, + 4711: 0x00009B39, + 4712: 0x000057DE, + 4713: 0x0002176C, + 4714: 0x00005C53, + 4715: 0x000064D3, + 4716: 0x000294D0, + 4717: 0x00026335, + 4718: 0x00027164, + 4719: 0x000086AD, + 4720: 0x00020D28, + 4721: 0x00026D22, + 4722: 0x00024AE2, + 4723: 0x00020D71, + 4725: 0x000051FE, + 4726: 0x00021F0F, + 4727: 0x00005D8E, + 4728: 0x00009703, + 4729: 0x00021DD1, + 4730: 0x00009E81, + 4731: 0x0000904C, + 4732: 0x00007B1F, + 4733: 0x00009B02, + 4734: 0x00005CD1, + 4735: 0x00007BA3, + 4736: 0x00006268, + 4737: 0x00006335, + 4738: 0x00009AFF, + 4739: 0x00007BCF, + 4740: 0x00009B2A, + 4741: 0x00007C7E, + 4742: 0x00009B2E, + 4743: 0x00007C42, + 4744: 0x00007C86, + 4745: 0x00009C15, + 4746: 0x00007BFC, + 4747: 0x00009B09, + 4748: 0x00009F17, + 4749: 0x00009C1B, + 4750: 0x0002493E, + 4751: 0x00009F5A, + 4752: 0x00005573, + 4753: 0x00005BC3, + 4754: 0x00004FFD, + 4755: 0x00009E98, + 4756: 0x00004FF2, + 4757: 0x00005260, + 4758: 0x00003E06, + 4759: 0x000052D1, + 4760: 0x00005767, + 4761: 0x00005056, + 4762: 0x000059B7, + 4763: 0x00005E12, + 4764: 0x000097C8, + 4765: 0x00009DAB, + 4766: 0x00008F5C, + 4767: 0x00005469, + 4768: 0x000097B4, + 4769: 0x00009940, + 4770: 0x000097BA, + 4771: 0x0000532C, + 4772: 0x00006130, + 4773: 0x0000692C, + 4774: 0x000053DA, + 4775: 0x00009C0A, + 4776: 0x00009D02, + 4777: 0x00004C3B, + 4778: 0x00009641, + 4779: 0x00006980, + 4780: 0x000050A6, + 4781: 0x00007546, + 4782: 0x0002176D, + 4783: 0x000099DA, + 4784: 0x00005273, + 4786: 0x00009159, + 4787: 0x00009681, + 4788: 0x0000915C, + 4790: 0x00009151, + 4791: 0x00028E97, + 4792: 0x0000637F, + 4793: 0x00026D23, + 4794: 0x00006ACA, + 4795: 0x00005611, + 4796: 0x0000918E, + 4797: 0x0000757A, + 4798: 0x00006285, + 4799: 0x000203FC, + 4800: 0x0000734F, + 4801: 0x00007C70, + 4802: 0x00025C21, + 4803: 0x00023CFD, + 4805: 0x00024919, + 4806: 0x000076D6, + 4807: 0x00009B9D, + 4808: 0x00004E2A, + 4809: 0x00020CD4, + 4810: 0x000083BE, + 4811: 0x00008842, + 4813: 0x00005C4A, + 4814: 0x000069C0, + 4815: 0x000050ED, + 4816: 0x0000577A, + 4817: 0x0000521F, + 4818: 0x00005DF5, + 4819: 0x00004ECE, + 4820: 0x00006C31, + 4821: 0x000201F2, + 4822: 0x00004F39, + 4823: 0x0000549C, + 4824: 0x000054DA, + 4825: 0x0000529A, + 4826: 0x00008D82, + 4827: 0x000035FE, + 4828: 0x00005F0C, + 4829: 0x000035F3, + 4831: 0x00006B52, + 4832: 0x0000917C, + 4833: 0x00009FA5, + 4834: 0x00009B97, + 4835: 0x0000982E, + 4836: 0x000098B4, + 4837: 0x00009ABA, + 4838: 0x00009EA8, + 4839: 0x00009E84, + 4840: 0x0000717A, + 4841: 0x00007B14, + 4843: 0x00006BFA, + 4844: 0x00008818, + 4845: 0x00007F78, + 4847: 0x00005620, + 4848: 0x0002A64A, + 4849: 0x00008E77, + 4850: 0x00009F53, + 4852: 0x00008DD4, + 4853: 0x00008E4F, + 4854: 0x00009E1C, + 4855: 0x00008E01, + 4856: 0x00006282, + 4857: 0x0002837D, + 4858: 0x00008E28, + 4859: 0x00008E75, + 4860: 0x00007AD3, + 4861: 0x00024A77, + 4862: 0x00007A3E, + 4863: 0x000078D8, + 4864: 0x00006CEA, + 4865: 0x00008A67, + 4866: 0x00007607, + 4867: 0x00028A5A, + 4868: 0x00009F26, + 4869: 0x00006CCE, + 4870: 0x000087D6, + 4871: 0x000075C3, + 4872: 0x0002A2B2, + 4873: 0x00007853, + 4874: 0x0002F840, + 4875: 0x00008D0C, + 4876: 0x000072E2, + 4877: 0x00007371, + 4878: 0x00008B2D, + 4879: 0x00007302, + 4880: 0x000074F1, + 4881: 0x00008CEB, + 4882: 0x00024ABB, + 4883: 0x0000862F, + 4884: 0x00005FBA, + 4885: 0x000088A0, + 4886: 0x000044B7, + 4888: 0x0002183B, + 4889: 0x00026E05, + 4891: 0x00008A7E, + 4892: 0x0002251B, + 4894: 0x000060FD, + 4895: 0x00007667, + 4896: 0x00009AD7, + 4897: 0x00009D44, + 4898: 0x0000936E, + 4899: 0x00009B8F, + 4900: 0x000087F5, + 4902: 0x0000880F, + 4903: 0x00008CF7, + 4904: 0x0000732C, + 4905: 0x00009721, + 4906: 0x00009BB0, + 4907: 0x000035D6, + 4908: 0x000072B2, + 4909: 0x00004C07, + 4910: 0x00007C51, + 4911: 0x0000994A, + 4912: 0x00026159, + 4913: 0x00006159, + 4914: 0x00004C04, + 4915: 0x00009E96, + 4916: 0x0000617D, + 4918: 0x0000575F, + 4919: 0x0000616F, + 4920: 0x000062A6, + 4921: 0x00006239, + 4922: 0x000062CE, + 4923: 0x00003A5C, + 4924: 0x000061E2, + 4925: 0x000053AA, + 4926: 0x000233F5, + 4927: 0x00006364, + 4928: 0x00006802, + 4929: 0x000035D2, + 4930: 0x00005D57, + 4931: 0x00028BC2, + 4932: 0x00008FDA, + 4933: 0x00028E39, + 4935: 0x000050D9, + 4936: 0x00021D46, + 4937: 0x00007906, + 4938: 0x00005332, + 4939: 0x00009638, + 4940: 0x00020F3B, + 4941: 0x00004065, + 4943: 0x000077FE, + 4945: 0x00007CC2, + 4946: 0x00025F1A, + 4947: 0x00007CDA, + 4948: 0x00007A2D, + 4949: 0x00008066, + 4950: 0x00008063, + 4951: 0x00007D4D, + 4952: 0x00007505, + 4953: 0x000074F2, + 4954: 0x00008994, + 4955: 0x0000821A, + 4956: 0x0000670C, + 4957: 0x00008062, + 4958: 0x00027486, + 4959: 0x0000805B, + 4960: 0x000074F0, + 4961: 0x00008103, + 4962: 0x00007724, + 4963: 0x00008989, + 4964: 0x000267CC, + 4965: 0x00007553, + 4966: 0x00026ED1, + 4967: 0x000087A9, + 4968: 0x000087CE, + 4969: 0x000081C8, + 4970: 0x0000878C, + 4971: 0x00008A49, + 4972: 0x00008CAD, + 4973: 0x00008B43, + 4974: 0x0000772B, + 4975: 0x000074F8, + 4976: 0x000084DA, + 4977: 0x00003635, + 4978: 0x000069B2, + 4979: 0x00008DA6, + 4981: 0x000089A9, + 4982: 0x00007468, + 4983: 0x00006DB9, + 4984: 0x000087C1, + 4985: 0x00024011, + 4986: 0x000074E7, + 4987: 0x00003DDB, + 4988: 0x00007176, + 4989: 0x000060A4, + 4990: 0x0000619C, + 4991: 0x00003CD1, + 4992: 0x00007162, + 4993: 0x00006077, + 4995: 0x00007F71, + 4996: 0x00028B2D, + 4997: 0x00007250, + 4998: 0x000060E9, + 4999: 0x00004B7E, + 5000: 0x00005220, + 5001: 0x00003C18, + 5002: 0x00023CC7, + 5003: 0x00025ED7, + 5004: 0x00027656, + 5005: 0x00025531, + 5006: 0x00021944, + 5007: 0x000212FE, + 5008: 0x00029903, + 5009: 0x00026DDC, + 5010: 0x000270AD, + 5011: 0x00005CC1, + 5012: 0x000261AD, + 5013: 0x00028A0F, + 5014: 0x00023677, + 5015: 0x000200EE, + 5016: 0x00026846, + 5017: 0x00024F0E, + 5018: 0x00004562, + 5019: 0x00005B1F, + 5020: 0x0002634C, + 5021: 0x00009F50, + 5022: 0x00009EA6, + 5023: 0x0002626B, + 5024: 0x00003000, + 5025: 0x0000FF0C, + 5026: 0x00003001, + 5027: 0x00003002, + 5028: 0x0000FF0E, + 5029: 0x00002027, + 5030: 0x0000FF1B, + 5031: 0x0000FF1A, + 5032: 0x0000FF1F, + 5033: 0x0000FF01, + 5034: 0x0000FE30, + 5035: 0x00002026, + 5036: 0x00002025, + 5037: 0x0000FE50, + 5038: 0x0000FE51, + 5039: 0x0000FE52, + 5040: 0x000000B7, + 5041: 0x0000FE54, + 5042: 0x0000FE55, + 5043: 0x0000FE56, + 5044: 0x0000FE57, + 5045: 0x0000FF5C, + 5046: 0x00002013, + 5047: 0x0000FE31, + 5048: 0x00002014, + 5049: 0x0000FE33, + 5050: 0x00002574, + 5051: 0x0000FE34, + 5052: 0x0000FE4F, + 5053: 0x0000FF08, + 5054: 0x0000FF09, + 5055: 0x0000FE35, + 5056: 0x0000FE36, + 5057: 0x0000FF5B, + 5058: 0x0000FF5D, + 5059: 0x0000FE37, + 5060: 0x0000FE38, + 5061: 0x00003014, + 5062: 0x00003015, + 5063: 0x0000FE39, + 5064: 0x0000FE3A, + 5065: 0x00003010, + 5066: 0x00003011, + 5067: 0x0000FE3B, + 5068: 0x0000FE3C, + 5069: 0x0000300A, + 5070: 0x0000300B, + 5071: 0x0000FE3D, + 5072: 0x0000FE3E, + 5073: 0x00003008, + 5074: 0x00003009, + 5075: 0x0000FE3F, + 5076: 0x0000FE40, + 5077: 0x0000300C, + 5078: 0x0000300D, + 5079: 0x0000FE41, + 5080: 0x0000FE42, + 5081: 0x0000300E, + 5082: 0x0000300F, + 5083: 0x0000FE43, + 5084: 0x0000FE44, + 5085: 0x0000FE59, + 5086: 0x0000FE5A, + 5087: 0x0000FE5B, + 5088: 0x0000FE5C, + 5089: 0x0000FE5D, + 5090: 0x0000FE5E, + 5091: 0x00002018, + 5092: 0x00002019, + 5093: 0x0000201C, + 5094: 0x0000201D, + 5095: 0x0000301D, + 5096: 0x0000301E, + 5097: 0x00002035, + 5098: 0x00002032, + 5099: 0x0000FF03, + 5100: 0x0000FF06, + 5101: 0x0000FF0A, + 5102: 0x0000203B, + 5103: 0x000000A7, + 5104: 0x00003003, + 5105: 0x000025CB, + 5106: 0x000025CF, + 5107: 0x000025B3, + 5108: 0x000025B2, + 5109: 0x000025CE, + 5110: 0x00002606, + 5111: 0x00002605, + 5112: 0x000025C7, + 5113: 0x000025C6, + 5114: 0x000025A1, + 5115: 0x000025A0, + 5116: 0x000025BD, + 5117: 0x000025BC, + 5118: 0x000032A3, + 5119: 0x00002105, + 5120: 0x000000AF, + 5121: 0x0000FFE3, + 5122: 0x0000FF3F, + 5123: 0x000002CD, + 5124: 0x0000FE49, + 5125: 0x0000FE4A, + 5126: 0x0000FE4D, + 5127: 0x0000FE4E, + 5128: 0x0000FE4B, + 5129: 0x0000FE4C, + 5130: 0x0000FE5F, + 5131: 0x0000FE60, + 5132: 0x0000FE61, + 5133: 0x0000FF0B, + 5134: 0x0000FF0D, + 5135: 0x000000D7, + 5136: 0x000000F7, + 5137: 0x000000B1, + 5138: 0x0000221A, + 5139: 0x0000FF1C, + 5140: 0x0000FF1E, + 5141: 0x0000FF1D, + 5142: 0x00002266, + 5143: 0x00002267, + 5144: 0x00002260, + 5145: 0x0000221E, + 5146: 0x00002252, + 5147: 0x00002261, + 5148: 0x0000FE62, + 5149: 0x0000FE63, + 5150: 0x0000FE64, + 5151: 0x0000FE65, + 5152: 0x0000FE66, + 5153: 0x0000FF5E, + 5154: 0x00002229, + 5155: 0x0000222A, + 5156: 0x000022A5, + 5157: 0x00002220, + 5158: 0x0000221F, + 5159: 0x000022BF, + 5160: 0x000033D2, + 5161: 0x000033D1, + 5162: 0x0000222B, + 5163: 0x0000222E, + 5164: 0x00002235, + 5165: 0x00002234, + 5166: 0x00002640, + 5167: 0x00002642, + 5168: 0x00002295, + 5169: 0x00002299, + 5170: 0x00002191, + 5171: 0x00002193, + 5172: 0x00002190, + 5173: 0x00002192, + 5174: 0x00002196, + 5175: 0x00002197, + 5176: 0x00002199, + 5177: 0x00002198, + 5178: 0x00002225, + 5179: 0x00002223, + 5180: 0x0000FF0F, + 5181: 0x0000FF3C, + 5182: 0x00002215, + 5183: 0x0000FE68, + 5184: 0x0000FF04, + 5185: 0x0000FFE5, + 5186: 0x00003012, + 5187: 0x0000FFE0, + 5188: 0x0000FFE1, + 5189: 0x0000FF05, + 5190: 0x0000FF20, + 5191: 0x00002103, + 5192: 0x00002109, + 5193: 0x0000FE69, + 5194: 0x0000FE6A, + 5195: 0x0000FE6B, + 5196: 0x000033D5, + 5197: 0x0000339C, + 5198: 0x0000339D, + 5199: 0x0000339E, + 5200: 0x000033CE, + 5201: 0x000033A1, + 5202: 0x0000338E, + 5203: 0x0000338F, + 5204: 0x000033C4, + 5205: 0x000000B0, + 5206: 0x00005159, + 5207: 0x0000515B, + 5208: 0x0000515E, + 5209: 0x0000515D, + 5210: 0x00005161, + 5211: 0x00005163, + 5212: 0x000055E7, + 5213: 0x000074E9, + 5214: 0x00007CCE, + 5215: 0x00002581, + 5216: 0x00002582, + 5217: 0x00002583, + 5218: 0x00002584, + 5219: 0x00002585, + 5220: 0x00002586, + 5221: 0x00002587, + 5222: 0x00002588, + 5223: 0x0000258F, + 5224: 0x0000258E, + 5225: 0x0000258D, + 5226: 0x0000258C, + 5227: 0x0000258B, + 5228: 0x0000258A, + 5229: 0x00002589, + 5230: 0x0000253C, + 5231: 0x00002534, + 5232: 0x0000252C, + 5233: 0x00002524, + 5234: 0x0000251C, + 5235: 0x00002594, + 5236: 0x00002500, + 5237: 0x00002502, + 5238: 0x00002595, + 5239: 0x0000250C, + 5240: 0x00002510, + 5241: 0x00002514, + 5242: 0x00002518, + 5243: 0x0000256D, + 5244: 0x0000256E, + 5245: 0x00002570, + 5246: 0x0000256F, + 5247: 0x00002550, + 5248: 0x0000255E, + 5249: 0x0000256A, + 5250: 0x00002561, + 5251: 0x000025E2, + 5252: 0x000025E3, + 5253: 0x000025E5, + 5254: 0x000025E4, + 5255: 0x00002571, + 5256: 0x00002572, + 5257: 0x00002573, + 5258: 0x0000FF10, + 5259: 0x0000FF11, + 5260: 0x0000FF12, + 5261: 0x0000FF13, + 5262: 0x0000FF14, + 5263: 0x0000FF15, + 5264: 0x0000FF16, + 5265: 0x0000FF17, + 5266: 0x0000FF18, + 5267: 0x0000FF19, + 5268: 0x00002160, + 5269: 0x00002161, + 5270: 0x00002162, + 5271: 0x00002163, + 5272: 0x00002164, + 5273: 0x00002165, + 5274: 0x00002166, + 5275: 0x00002167, + 5276: 0x00002168, + 5277: 0x00002169, + 5278: 0x00003021, + 5279: 0x00003022, + 5280: 0x00003023, + 5281: 0x00003024, + 5282: 0x00003025, + 5283: 0x00003026, + 5284: 0x00003027, + 5285: 0x00003028, + 5286: 0x00003029, + 5287: 0x00005341, + 5288: 0x00005344, + 5289: 0x00005345, + 5290: 0x0000FF21, + 5291: 0x0000FF22, + 5292: 0x0000FF23, + 5293: 0x0000FF24, + 5294: 0x0000FF25, + 5295: 0x0000FF26, + 5296: 0x0000FF27, + 5297: 0x0000FF28, + 5298: 0x0000FF29, + 5299: 0x0000FF2A, + 5300: 0x0000FF2B, + 5301: 0x0000FF2C, + 5302: 0x0000FF2D, + 5303: 0x0000FF2E, + 5304: 0x0000FF2F, + 5305: 0x0000FF30, + 5306: 0x0000FF31, + 5307: 0x0000FF32, + 5308: 0x0000FF33, + 5309: 0x0000FF34, + 5310: 0x0000FF35, + 5311: 0x0000FF36, + 5312: 0x0000FF37, + 5313: 0x0000FF38, + 5314: 0x0000FF39, + 5315: 0x0000FF3A, + 5316: 0x0000FF41, + 5317: 0x0000FF42, + 5318: 0x0000FF43, + 5319: 0x0000FF44, + 5320: 0x0000FF45, + 5321: 0x0000FF46, + 5322: 0x0000FF47, + 5323: 0x0000FF48, + 5324: 0x0000FF49, + 5325: 0x0000FF4A, + 5326: 0x0000FF4B, + 5327: 0x0000FF4C, + 5328: 0x0000FF4D, + 5329: 0x0000FF4E, + 5330: 0x0000FF4F, + 5331: 0x0000FF50, + 5332: 0x0000FF51, + 5333: 0x0000FF52, + 5334: 0x0000FF53, + 5335: 0x0000FF54, + 5336: 0x0000FF55, + 5337: 0x0000FF56, + 5338: 0x0000FF57, + 5339: 0x0000FF58, + 5340: 0x0000FF59, + 5341: 0x0000FF5A, + 5342: 0x00000391, + 5343: 0x00000392, + 5344: 0x00000393, + 5345: 0x00000394, + 5346: 0x00000395, + 5347: 0x00000396, + 5348: 0x00000397, + 5349: 0x00000398, + 5350: 0x00000399, + 5351: 0x0000039A, + 5352: 0x0000039B, + 5353: 0x0000039C, + 5354: 0x0000039D, + 5355: 0x0000039E, + 5356: 0x0000039F, + 5357: 0x000003A0, + 5358: 0x000003A1, + 5359: 0x000003A3, + 5360: 0x000003A4, + 5361: 0x000003A5, + 5362: 0x000003A6, + 5363: 0x000003A7, + 5364: 0x000003A8, + 5365: 0x000003A9, + 5366: 0x000003B1, + 5367: 0x000003B2, + 5368: 0x000003B3, + 5369: 0x000003B4, + 5370: 0x000003B5, + 5371: 0x000003B6, + 5372: 0x000003B7, + 5373: 0x000003B8, + 5374: 0x000003B9, + 5375: 0x000003BA, + 5376: 0x000003BB, + 5377: 0x000003BC, + 5378: 0x000003BD, + 5379: 0x000003BE, + 5380: 0x000003BF, + 5381: 0x000003C0, + 5382: 0x000003C1, + 5383: 0x000003C3, + 5384: 0x000003C4, + 5385: 0x000003C5, + 5386: 0x000003C6, + 5387: 0x000003C7, + 5388: 0x000003C8, + 5389: 0x000003C9, + 5390: 0x00003105, + 5391: 0x00003106, + 5392: 0x00003107, + 5393: 0x00003108, + 5394: 0x00003109, + 5395: 0x0000310A, + 5396: 0x0000310B, + 5397: 0x0000310C, + 5398: 0x0000310D, + 5399: 0x0000310E, + 5400: 0x0000310F, + 5401: 0x00003110, + 5402: 0x00003111, + 5403: 0x00003112, + 5404: 0x00003113, + 5405: 0x00003114, + 5406: 0x00003115, + 5407: 0x00003116, + 5408: 0x00003117, + 5409: 0x00003118, + 5410: 0x00003119, + 5411: 0x0000311A, + 5412: 0x0000311B, + 5413: 0x0000311C, + 5414: 0x0000311D, + 5415: 0x0000311E, + 5416: 0x0000311F, + 5417: 0x00003120, + 5418: 0x00003121, + 5419: 0x00003122, + 5420: 0x00003123, + 5421: 0x00003124, + 5422: 0x00003125, + 5423: 0x00003126, + 5424: 0x00003127, + 5425: 0x00003128, + 5426: 0x00003129, + 5427: 0x000002D9, + 5428: 0x000002C9, + 5429: 0x000002CA, + 5430: 0x000002C7, + 5431: 0x000002CB, + 5432: 0x00002400, + 5433: 0x00002401, + 5434: 0x00002402, + 5435: 0x00002403, + 5436: 0x00002404, + 5437: 0x00002405, + 5438: 0x00002406, + 5439: 0x00002407, + 5440: 0x00002408, + 5441: 0x00002409, + 5442: 0x0000240A, + 5443: 0x0000240B, + 5444: 0x0000240C, + 5445: 0x0000240D, + 5446: 0x0000240E, + 5447: 0x0000240F, + 5448: 0x00002410, + 5449: 0x00002411, + 5450: 0x00002412, + 5451: 0x00002413, + 5452: 0x00002414, + 5453: 0x00002415, + 5454: 0x00002416, + 5455: 0x00002417, + 5456: 0x00002418, + 5457: 0x00002419, + 5458: 0x0000241A, + 5459: 0x0000241B, + 5460: 0x0000241C, + 5461: 0x0000241D, + 5462: 0x0000241E, + 5463: 0x0000241F, + 5464: 0x00002421, + 5465: 0x000020AC, + 5495: 0x00004E00, + 5496: 0x00004E59, + 5497: 0x00004E01, + 5498: 0x00004E03, + 5499: 0x00004E43, + 5500: 0x00004E5D, + 5501: 0x00004E86, + 5502: 0x00004E8C, + 5503: 0x00004EBA, + 5504: 0x0000513F, + 5505: 0x00005165, + 5506: 0x0000516B, + 5507: 0x000051E0, + 5508: 0x00005200, + 5509: 0x00005201, + 5510: 0x0000529B, + 5511: 0x00005315, + 5512: 0x00005341, + 5513: 0x0000535C, + 5514: 0x000053C8, + 5515: 0x00004E09, + 5516: 0x00004E0B, + 5517: 0x00004E08, + 5518: 0x00004E0A, + 5519: 0x00004E2B, + 5520: 0x00004E38, + 5521: 0x000051E1, + 5522: 0x00004E45, + 5523: 0x00004E48, + 5524: 0x00004E5F, + 5525: 0x00004E5E, + 5526: 0x00004E8E, + 5527: 0x00004EA1, + 5528: 0x00005140, + 5529: 0x00005203, + 5530: 0x000052FA, + 5531: 0x00005343, + 5532: 0x000053C9, + 5533: 0x000053E3, + 5534: 0x0000571F, + 5535: 0x000058EB, + 5536: 0x00005915, + 5537: 0x00005927, + 5538: 0x00005973, + 5539: 0x00005B50, + 5540: 0x00005B51, + 5541: 0x00005B53, + 5542: 0x00005BF8, + 5543: 0x00005C0F, + 5544: 0x00005C22, + 5545: 0x00005C38, + 5546: 0x00005C71, + 5547: 0x00005DDD, + 5548: 0x00005DE5, + 5549: 0x00005DF1, + 5550: 0x00005DF2, + 5551: 0x00005DF3, + 5552: 0x00005DFE, + 5553: 0x00005E72, + 5554: 0x00005EFE, + 5555: 0x00005F0B, + 5556: 0x00005F13, + 5557: 0x0000624D, + 5558: 0x00004E11, + 5559: 0x00004E10, + 5560: 0x00004E0D, + 5561: 0x00004E2D, + 5562: 0x00004E30, + 5563: 0x00004E39, + 5564: 0x00004E4B, + 5565: 0x00005C39, + 5566: 0x00004E88, + 5567: 0x00004E91, + 5568: 0x00004E95, + 5569: 0x00004E92, + 5570: 0x00004E94, + 5571: 0x00004EA2, + 5572: 0x00004EC1, + 5573: 0x00004EC0, + 5574: 0x00004EC3, + 5575: 0x00004EC6, + 5576: 0x00004EC7, + 5577: 0x00004ECD, + 5578: 0x00004ECA, + 5579: 0x00004ECB, + 5580: 0x00004EC4, + 5581: 0x00005143, + 5582: 0x00005141, + 5583: 0x00005167, + 5584: 0x0000516D, + 5585: 0x0000516E, + 5586: 0x0000516C, + 5587: 0x00005197, + 5588: 0x000051F6, + 5589: 0x00005206, + 5590: 0x00005207, + 5591: 0x00005208, + 5592: 0x000052FB, + 5593: 0x000052FE, + 5594: 0x000052FF, + 5595: 0x00005316, + 5596: 0x00005339, + 5597: 0x00005348, + 5598: 0x00005347, + 5599: 0x00005345, + 5600: 0x0000535E, + 5601: 0x00005384, + 5602: 0x000053CB, + 5603: 0x000053CA, + 5604: 0x000053CD, + 5605: 0x000058EC, + 5606: 0x00005929, + 5607: 0x0000592B, + 5608: 0x0000592A, + 5609: 0x0000592D, + 5610: 0x00005B54, + 5611: 0x00005C11, + 5612: 0x00005C24, + 5613: 0x00005C3A, + 5614: 0x00005C6F, + 5615: 0x00005DF4, + 5616: 0x00005E7B, + 5617: 0x00005EFF, + 5618: 0x00005F14, + 5619: 0x00005F15, + 5620: 0x00005FC3, + 5621: 0x00006208, + 5622: 0x00006236, + 5623: 0x0000624B, + 5624: 0x0000624E, + 5625: 0x0000652F, + 5626: 0x00006587, + 5627: 0x00006597, + 5628: 0x000065A4, + 5629: 0x000065B9, + 5630: 0x000065E5, + 5631: 0x000066F0, + 5632: 0x00006708, + 5633: 0x00006728, + 5634: 0x00006B20, + 5635: 0x00006B62, + 5636: 0x00006B79, + 5637: 0x00006BCB, + 5638: 0x00006BD4, + 5639: 0x00006BDB, + 5640: 0x00006C0F, + 5641: 0x00006C34, + 5642: 0x0000706B, + 5643: 0x0000722A, + 5644: 0x00007236, + 5645: 0x0000723B, + 5646: 0x00007247, + 5647: 0x00007259, + 5648: 0x0000725B, + 5649: 0x000072AC, + 5650: 0x0000738B, + 5651: 0x00004E19, + 5652: 0x00004E16, + 5653: 0x00004E15, + 5654: 0x00004E14, + 5655: 0x00004E18, + 5656: 0x00004E3B, + 5657: 0x00004E4D, + 5658: 0x00004E4F, + 5659: 0x00004E4E, + 5660: 0x00004EE5, + 5661: 0x00004ED8, + 5662: 0x00004ED4, + 5663: 0x00004ED5, + 5664: 0x00004ED6, + 5665: 0x00004ED7, + 5666: 0x00004EE3, + 5667: 0x00004EE4, + 5668: 0x00004ED9, + 5669: 0x00004EDE, + 5670: 0x00005145, + 5671: 0x00005144, + 5672: 0x00005189, + 5673: 0x0000518A, + 5674: 0x000051AC, + 5675: 0x000051F9, + 5676: 0x000051FA, + 5677: 0x000051F8, + 5678: 0x0000520A, + 5679: 0x000052A0, + 5680: 0x0000529F, + 5681: 0x00005305, + 5682: 0x00005306, + 5683: 0x00005317, + 5684: 0x0000531D, + 5685: 0x00004EDF, + 5686: 0x0000534A, + 5687: 0x00005349, + 5688: 0x00005361, + 5689: 0x00005360, + 5690: 0x0000536F, + 5691: 0x0000536E, + 5692: 0x000053BB, + 5693: 0x000053EF, + 5694: 0x000053E4, + 5695: 0x000053F3, + 5696: 0x000053EC, + 5697: 0x000053EE, + 5698: 0x000053E9, + 5699: 0x000053E8, + 5700: 0x000053FC, + 5701: 0x000053F8, + 5702: 0x000053F5, + 5703: 0x000053EB, + 5704: 0x000053E6, + 5705: 0x000053EA, + 5706: 0x000053F2, + 5707: 0x000053F1, + 5708: 0x000053F0, + 5709: 0x000053E5, + 5710: 0x000053ED, + 5711: 0x000053FB, + 5712: 0x000056DB, + 5713: 0x000056DA, + 5714: 0x00005916, + 5715: 0x0000592E, + 5716: 0x00005931, + 5717: 0x00005974, + 5718: 0x00005976, + 5719: 0x00005B55, + 5720: 0x00005B83, + 5721: 0x00005C3C, + 5722: 0x00005DE8, + 5723: 0x00005DE7, + 5724: 0x00005DE6, + 5725: 0x00005E02, + 5726: 0x00005E03, + 5727: 0x00005E73, + 5728: 0x00005E7C, + 5729: 0x00005F01, + 5730: 0x00005F18, + 5731: 0x00005F17, + 5732: 0x00005FC5, + 5733: 0x0000620A, + 5734: 0x00006253, + 5735: 0x00006254, + 5736: 0x00006252, + 5737: 0x00006251, + 5738: 0x000065A5, + 5739: 0x000065E6, + 5740: 0x0000672E, + 5741: 0x0000672C, + 5742: 0x0000672A, + 5743: 0x0000672B, + 5744: 0x0000672D, + 5745: 0x00006B63, + 5746: 0x00006BCD, + 5747: 0x00006C11, + 5748: 0x00006C10, + 5749: 0x00006C38, + 5750: 0x00006C41, + 5751: 0x00006C40, + 5752: 0x00006C3E, + 5753: 0x000072AF, + 5754: 0x00007384, + 5755: 0x00007389, + 5756: 0x000074DC, + 5757: 0x000074E6, + 5758: 0x00007518, + 5759: 0x0000751F, + 5760: 0x00007528, + 5761: 0x00007529, + 5762: 0x00007530, + 5763: 0x00007531, + 5764: 0x00007532, + 5765: 0x00007533, + 5766: 0x0000758B, + 5767: 0x0000767D, + 5768: 0x000076AE, + 5769: 0x000076BF, + 5770: 0x000076EE, + 5771: 0x000077DB, + 5772: 0x000077E2, + 5773: 0x000077F3, + 5774: 0x0000793A, + 5775: 0x000079BE, + 5776: 0x00007A74, + 5777: 0x00007ACB, + 5778: 0x00004E1E, + 5779: 0x00004E1F, + 5780: 0x00004E52, + 5781: 0x00004E53, + 5782: 0x00004E69, + 5783: 0x00004E99, + 5784: 0x00004EA4, + 5785: 0x00004EA6, + 5786: 0x00004EA5, + 5787: 0x00004EFF, + 5788: 0x00004F09, + 5789: 0x00004F19, + 5790: 0x00004F0A, + 5791: 0x00004F15, + 5792: 0x00004F0D, + 5793: 0x00004F10, + 5794: 0x00004F11, + 5795: 0x00004F0F, + 5796: 0x00004EF2, + 5797: 0x00004EF6, + 5798: 0x00004EFB, + 5799: 0x00004EF0, + 5800: 0x00004EF3, + 5801: 0x00004EFD, + 5802: 0x00004F01, + 5803: 0x00004F0B, + 5804: 0x00005149, + 5805: 0x00005147, + 5806: 0x00005146, + 5807: 0x00005148, + 5808: 0x00005168, + 5809: 0x00005171, + 5810: 0x0000518D, + 5811: 0x000051B0, + 5812: 0x00005217, + 5813: 0x00005211, + 5814: 0x00005212, + 5815: 0x0000520E, + 5816: 0x00005216, + 5817: 0x000052A3, + 5818: 0x00005308, + 5819: 0x00005321, + 5820: 0x00005320, + 5821: 0x00005370, + 5822: 0x00005371, + 5823: 0x00005409, + 5824: 0x0000540F, + 5825: 0x0000540C, + 5826: 0x0000540A, + 5827: 0x00005410, + 5828: 0x00005401, + 5829: 0x0000540B, + 5830: 0x00005404, + 5831: 0x00005411, + 5832: 0x0000540D, + 5833: 0x00005408, + 5834: 0x00005403, + 5835: 0x0000540E, + 5836: 0x00005406, + 5837: 0x00005412, + 5838: 0x000056E0, + 5839: 0x000056DE, + 5840: 0x000056DD, + 5841: 0x00005733, + 5842: 0x00005730, + 5843: 0x00005728, + 5844: 0x0000572D, + 5845: 0x0000572C, + 5846: 0x0000572F, + 5847: 0x00005729, + 5848: 0x00005919, + 5849: 0x0000591A, + 5850: 0x00005937, + 5851: 0x00005938, + 5852: 0x00005984, + 5853: 0x00005978, + 5854: 0x00005983, + 5855: 0x0000597D, + 5856: 0x00005979, + 5857: 0x00005982, + 5858: 0x00005981, + 5859: 0x00005B57, + 5860: 0x00005B58, + 5861: 0x00005B87, + 5862: 0x00005B88, + 5863: 0x00005B85, + 5864: 0x00005B89, + 5865: 0x00005BFA, + 5866: 0x00005C16, + 5867: 0x00005C79, + 5868: 0x00005DDE, + 5869: 0x00005E06, + 5870: 0x00005E76, + 5871: 0x00005E74, + 5872: 0x00005F0F, + 5873: 0x00005F1B, + 5874: 0x00005FD9, + 5875: 0x00005FD6, + 5876: 0x0000620E, + 5877: 0x0000620C, + 5878: 0x0000620D, + 5879: 0x00006210, + 5880: 0x00006263, + 5881: 0x0000625B, + 5882: 0x00006258, + 5883: 0x00006536, + 5884: 0x000065E9, + 5885: 0x000065E8, + 5886: 0x000065EC, + 5887: 0x000065ED, + 5888: 0x000066F2, + 5889: 0x000066F3, + 5890: 0x00006709, + 5891: 0x0000673D, + 5892: 0x00006734, + 5893: 0x00006731, + 5894: 0x00006735, + 5895: 0x00006B21, + 5896: 0x00006B64, + 5897: 0x00006B7B, + 5898: 0x00006C16, + 5899: 0x00006C5D, + 5900: 0x00006C57, + 5901: 0x00006C59, + 5902: 0x00006C5F, + 5903: 0x00006C60, + 5904: 0x00006C50, + 5905: 0x00006C55, + 5906: 0x00006C61, + 5907: 0x00006C5B, + 5908: 0x00006C4D, + 5909: 0x00006C4E, + 5910: 0x00007070, + 5911: 0x0000725F, + 5912: 0x0000725D, + 5913: 0x0000767E, + 5914: 0x00007AF9, + 5915: 0x00007C73, + 5916: 0x00007CF8, + 5917: 0x00007F36, + 5918: 0x00007F8A, + 5919: 0x00007FBD, + 5920: 0x00008001, + 5921: 0x00008003, + 5922: 0x0000800C, + 5923: 0x00008012, + 5924: 0x00008033, + 5925: 0x0000807F, + 5926: 0x00008089, + 5927: 0x0000808B, + 5928: 0x0000808C, + 5929: 0x000081E3, + 5930: 0x000081EA, + 5931: 0x000081F3, + 5932: 0x000081FC, + 5933: 0x0000820C, + 5934: 0x0000821B, + 5935: 0x0000821F, + 5936: 0x0000826E, + 5937: 0x00008272, + 5938: 0x0000827E, + 5939: 0x0000866B, + 5940: 0x00008840, + 5941: 0x0000884C, + 5942: 0x00008863, + 5943: 0x0000897F, + 5944: 0x00009621, + 5945: 0x00004E32, + 5946: 0x00004EA8, + 5947: 0x00004F4D, + 5948: 0x00004F4F, + 5949: 0x00004F47, + 5950: 0x00004F57, + 5951: 0x00004F5E, + 5952: 0x00004F34, + 5953: 0x00004F5B, + 5954: 0x00004F55, + 5955: 0x00004F30, + 5956: 0x00004F50, + 5957: 0x00004F51, + 5958: 0x00004F3D, + 5959: 0x00004F3A, + 5960: 0x00004F38, + 5961: 0x00004F43, + 5962: 0x00004F54, + 5963: 0x00004F3C, + 5964: 0x00004F46, + 5965: 0x00004F63, + 5966: 0x00004F5C, + 5967: 0x00004F60, + 5968: 0x00004F2F, + 5969: 0x00004F4E, + 5970: 0x00004F36, + 5971: 0x00004F59, + 5972: 0x00004F5D, + 5973: 0x00004F48, + 5974: 0x00004F5A, + 5975: 0x0000514C, + 5976: 0x0000514B, + 5977: 0x0000514D, + 5978: 0x00005175, + 5979: 0x000051B6, + 5980: 0x000051B7, + 5981: 0x00005225, + 5982: 0x00005224, + 5983: 0x00005229, + 5984: 0x0000522A, + 5985: 0x00005228, + 5986: 0x000052AB, + 5987: 0x000052A9, + 5988: 0x000052AA, + 5989: 0x000052AC, + 5990: 0x00005323, + 5991: 0x00005373, + 5992: 0x00005375, + 5993: 0x0000541D, + 5994: 0x0000542D, + 5995: 0x0000541E, + 5996: 0x0000543E, + 5997: 0x00005426, + 5998: 0x0000544E, + 5999: 0x00005427, + 6000: 0x00005446, + 6001: 0x00005443, + 6002: 0x00005433, + 6003: 0x00005448, + 6004: 0x00005442, + 6005: 0x0000541B, + 6006: 0x00005429, + 6007: 0x0000544A, + 6008: 0x00005439, + 6009: 0x0000543B, + 6010: 0x00005438, + 6011: 0x0000542E, + 6012: 0x00005435, + 6013: 0x00005436, + 6014: 0x00005420, + 6015: 0x0000543C, + 6016: 0x00005440, + 6017: 0x00005431, + 6018: 0x0000542B, + 6019: 0x0000541F, + 6020: 0x0000542C, + 6021: 0x000056EA, + 6022: 0x000056F0, + 6023: 0x000056E4, + 6024: 0x000056EB, + 6025: 0x0000574A, + 6026: 0x00005751, + 6027: 0x00005740, + 6028: 0x0000574D, + 6029: 0x00005747, + 6030: 0x0000574E, + 6031: 0x0000573E, + 6032: 0x00005750, + 6033: 0x0000574F, + 6034: 0x0000573B, + 6035: 0x000058EF, + 6036: 0x0000593E, + 6037: 0x0000599D, + 6038: 0x00005992, + 6039: 0x000059A8, + 6040: 0x0000599E, + 6041: 0x000059A3, + 6042: 0x00005999, + 6043: 0x00005996, + 6044: 0x0000598D, + 6045: 0x000059A4, + 6046: 0x00005993, + 6047: 0x0000598A, + 6048: 0x000059A5, + 6049: 0x00005B5D, + 6050: 0x00005B5C, + 6051: 0x00005B5A, + 6052: 0x00005B5B, + 6053: 0x00005B8C, + 6054: 0x00005B8B, + 6055: 0x00005B8F, + 6056: 0x00005C2C, + 6057: 0x00005C40, + 6058: 0x00005C41, + 6059: 0x00005C3F, + 6060: 0x00005C3E, + 6061: 0x00005C90, + 6062: 0x00005C91, + 6063: 0x00005C94, + 6064: 0x00005C8C, + 6065: 0x00005DEB, + 6066: 0x00005E0C, + 6067: 0x00005E8F, + 6068: 0x00005E87, + 6069: 0x00005E8A, + 6070: 0x00005EF7, + 6071: 0x00005F04, + 6072: 0x00005F1F, + 6073: 0x00005F64, + 6074: 0x00005F62, + 6075: 0x00005F77, + 6076: 0x00005F79, + 6077: 0x00005FD8, + 6078: 0x00005FCC, + 6079: 0x00005FD7, + 6080: 0x00005FCD, + 6081: 0x00005FF1, + 6082: 0x00005FEB, + 6083: 0x00005FF8, + 6084: 0x00005FEA, + 6085: 0x00006212, + 6086: 0x00006211, + 6087: 0x00006284, + 6088: 0x00006297, + 6089: 0x00006296, + 6090: 0x00006280, + 6091: 0x00006276, + 6092: 0x00006289, + 6093: 0x0000626D, + 6094: 0x0000628A, + 6095: 0x0000627C, + 6096: 0x0000627E, + 6097: 0x00006279, + 6098: 0x00006273, + 6099: 0x00006292, + 6100: 0x0000626F, + 6101: 0x00006298, + 6102: 0x0000626E, + 6103: 0x00006295, + 6104: 0x00006293, + 6105: 0x00006291, + 6106: 0x00006286, + 6107: 0x00006539, + 6108: 0x0000653B, + 6109: 0x00006538, + 6110: 0x000065F1, + 6111: 0x000066F4, + 6112: 0x0000675F, + 6113: 0x0000674E, + 6114: 0x0000674F, + 6115: 0x00006750, + 6116: 0x00006751, + 6117: 0x0000675C, + 6118: 0x00006756, + 6119: 0x0000675E, + 6120: 0x00006749, + 6121: 0x00006746, + 6122: 0x00006760, + 6123: 0x00006753, + 6124: 0x00006757, + 6125: 0x00006B65, + 6126: 0x00006BCF, + 6127: 0x00006C42, + 6128: 0x00006C5E, + 6129: 0x00006C99, + 6130: 0x00006C81, + 6131: 0x00006C88, + 6132: 0x00006C89, + 6133: 0x00006C85, + 6134: 0x00006C9B, + 6135: 0x00006C6A, + 6136: 0x00006C7A, + 6137: 0x00006C90, + 6138: 0x00006C70, + 6139: 0x00006C8C, + 6140: 0x00006C68, + 6141: 0x00006C96, + 6142: 0x00006C92, + 6143: 0x00006C7D, + 6144: 0x00006C83, + 6145: 0x00006C72, + 6146: 0x00006C7E, + 6147: 0x00006C74, + 6148: 0x00006C86, + 6149: 0x00006C76, + 6150: 0x00006C8D, + 6151: 0x00006C94, + 6152: 0x00006C98, + 6153: 0x00006C82, + 6154: 0x00007076, + 6155: 0x0000707C, + 6156: 0x0000707D, + 6157: 0x00007078, + 6158: 0x00007262, + 6159: 0x00007261, + 6160: 0x00007260, + 6161: 0x000072C4, + 6162: 0x000072C2, + 6163: 0x00007396, + 6164: 0x0000752C, + 6165: 0x0000752B, + 6166: 0x00007537, + 6167: 0x00007538, + 6168: 0x00007682, + 6169: 0x000076EF, + 6170: 0x000077E3, + 6171: 0x000079C1, + 6172: 0x000079C0, + 6173: 0x000079BF, + 6174: 0x00007A76, + 6175: 0x00007CFB, + 6176: 0x00007F55, + 6177: 0x00008096, + 6178: 0x00008093, + 6179: 0x0000809D, + 6180: 0x00008098, + 6181: 0x0000809B, + 6182: 0x0000809A, + 6183: 0x000080B2, + 6184: 0x0000826F, + 6185: 0x00008292, + 6186: 0x0000828B, + 6187: 0x0000828D, + 6188: 0x0000898B, + 6189: 0x000089D2, + 6190: 0x00008A00, + 6191: 0x00008C37, + 6192: 0x00008C46, + 6193: 0x00008C55, + 6194: 0x00008C9D, + 6195: 0x00008D64, + 6196: 0x00008D70, + 6197: 0x00008DB3, + 6198: 0x00008EAB, + 6199: 0x00008ECA, + 6200: 0x00008F9B, + 6201: 0x00008FB0, + 6202: 0x00008FC2, + 6203: 0x00008FC6, + 6204: 0x00008FC5, + 6205: 0x00008FC4, + 6206: 0x00005DE1, + 6207: 0x00009091, + 6208: 0x000090A2, + 6209: 0x000090AA, + 6210: 0x000090A6, + 6211: 0x000090A3, + 6212: 0x00009149, + 6213: 0x000091C6, + 6214: 0x000091CC, + 6215: 0x00009632, + 6216: 0x0000962E, + 6217: 0x00009631, + 6218: 0x0000962A, + 6219: 0x0000962C, + 6220: 0x00004E26, + 6221: 0x00004E56, + 6222: 0x00004E73, + 6223: 0x00004E8B, + 6224: 0x00004E9B, + 6225: 0x00004E9E, + 6226: 0x00004EAB, + 6227: 0x00004EAC, + 6228: 0x00004F6F, + 6229: 0x00004F9D, + 6230: 0x00004F8D, + 6231: 0x00004F73, + 6232: 0x00004F7F, + 6233: 0x00004F6C, + 6234: 0x00004F9B, + 6235: 0x00004F8B, + 6236: 0x00004F86, + 6237: 0x00004F83, + 6238: 0x00004F70, + 6239: 0x00004F75, + 6240: 0x00004F88, + 6241: 0x00004F69, + 6242: 0x00004F7B, + 6243: 0x00004F96, + 6244: 0x00004F7E, + 6245: 0x00004F8F, + 6246: 0x00004F91, + 6247: 0x00004F7A, + 6248: 0x00005154, + 6249: 0x00005152, + 6250: 0x00005155, + 6251: 0x00005169, + 6252: 0x00005177, + 6253: 0x00005176, + 6254: 0x00005178, + 6255: 0x000051BD, + 6256: 0x000051FD, + 6257: 0x0000523B, + 6258: 0x00005238, + 6259: 0x00005237, + 6260: 0x0000523A, + 6261: 0x00005230, + 6262: 0x0000522E, + 6263: 0x00005236, + 6264: 0x00005241, + 6265: 0x000052BE, + 6266: 0x000052BB, + 6267: 0x00005352, + 6268: 0x00005354, + 6269: 0x00005353, + 6270: 0x00005351, + 6271: 0x00005366, + 6272: 0x00005377, + 6273: 0x00005378, + 6274: 0x00005379, + 6275: 0x000053D6, + 6276: 0x000053D4, + 6277: 0x000053D7, + 6278: 0x00005473, + 6279: 0x00005475, + 6280: 0x00005496, + 6281: 0x00005478, + 6282: 0x00005495, + 6283: 0x00005480, + 6284: 0x0000547B, + 6285: 0x00005477, + 6286: 0x00005484, + 6287: 0x00005492, + 6288: 0x00005486, + 6289: 0x0000547C, + 6290: 0x00005490, + 6291: 0x00005471, + 6292: 0x00005476, + 6293: 0x0000548C, + 6294: 0x0000549A, + 6295: 0x00005462, + 6296: 0x00005468, + 6297: 0x0000548B, + 6298: 0x0000547D, + 6299: 0x0000548E, + 6300: 0x000056FA, + 6301: 0x00005783, + 6302: 0x00005777, + 6303: 0x0000576A, + 6304: 0x00005769, + 6305: 0x00005761, + 6306: 0x00005766, + 6307: 0x00005764, + 6308: 0x0000577C, + 6309: 0x0000591C, + 6310: 0x00005949, + 6311: 0x00005947, + 6312: 0x00005948, + 6313: 0x00005944, + 6314: 0x00005954, + 6315: 0x000059BE, + 6316: 0x000059BB, + 6317: 0x000059D4, + 6318: 0x000059B9, + 6319: 0x000059AE, + 6320: 0x000059D1, + 6321: 0x000059C6, + 6322: 0x000059D0, + 6323: 0x000059CD, + 6324: 0x000059CB, + 6325: 0x000059D3, + 6326: 0x000059CA, + 6327: 0x000059AF, + 6328: 0x000059B3, + 6329: 0x000059D2, + 6330: 0x000059C5, + 6331: 0x00005B5F, + 6332: 0x00005B64, + 6333: 0x00005B63, + 6334: 0x00005B97, + 6335: 0x00005B9A, + 6336: 0x00005B98, + 6337: 0x00005B9C, + 6338: 0x00005B99, + 6339: 0x00005B9B, + 6340: 0x00005C1A, + 6341: 0x00005C48, + 6342: 0x00005C45, + 6343: 0x00005C46, + 6344: 0x00005CB7, + 6345: 0x00005CA1, + 6346: 0x00005CB8, + 6347: 0x00005CA9, + 6348: 0x00005CAB, + 6349: 0x00005CB1, + 6350: 0x00005CB3, + 6351: 0x00005E18, + 6352: 0x00005E1A, + 6353: 0x00005E16, + 6354: 0x00005E15, + 6355: 0x00005E1B, + 6356: 0x00005E11, + 6357: 0x00005E78, + 6358: 0x00005E9A, + 6359: 0x00005E97, + 6360: 0x00005E9C, + 6361: 0x00005E95, + 6362: 0x00005E96, + 6363: 0x00005EF6, + 6364: 0x00005F26, + 6365: 0x00005F27, + 6366: 0x00005F29, + 6367: 0x00005F80, + 6368: 0x00005F81, + 6369: 0x00005F7F, + 6370: 0x00005F7C, + 6371: 0x00005FDD, + 6372: 0x00005FE0, + 6373: 0x00005FFD, + 6374: 0x00005FF5, + 6375: 0x00005FFF, + 6376: 0x0000600F, + 6377: 0x00006014, + 6378: 0x0000602F, + 6379: 0x00006035, + 6380: 0x00006016, + 6381: 0x0000602A, + 6382: 0x00006015, + 6383: 0x00006021, + 6384: 0x00006027, + 6385: 0x00006029, + 6386: 0x0000602B, + 6387: 0x0000601B, + 6388: 0x00006216, + 6389: 0x00006215, + 6390: 0x0000623F, + 6391: 0x0000623E, + 6392: 0x00006240, + 6393: 0x0000627F, + 6394: 0x000062C9, + 6395: 0x000062CC, + 6396: 0x000062C4, + 6397: 0x000062BF, + 6398: 0x000062C2, + 6399: 0x000062B9, + 6400: 0x000062D2, + 6401: 0x000062DB, + 6402: 0x000062AB, + 6403: 0x000062D3, + 6404: 0x000062D4, + 6405: 0x000062CB, + 6406: 0x000062C8, + 6407: 0x000062A8, + 6408: 0x000062BD, + 6409: 0x000062BC, + 6410: 0x000062D0, + 6411: 0x000062D9, + 6412: 0x000062C7, + 6413: 0x000062CD, + 6414: 0x000062B5, + 6415: 0x000062DA, + 6416: 0x000062B1, + 6417: 0x000062D8, + 6418: 0x000062D6, + 6419: 0x000062D7, + 6420: 0x000062C6, + 6421: 0x000062AC, + 6422: 0x000062CE, + 6423: 0x0000653E, + 6424: 0x000065A7, + 6425: 0x000065BC, + 6426: 0x000065FA, + 6427: 0x00006614, + 6428: 0x00006613, + 6429: 0x0000660C, + 6430: 0x00006606, + 6431: 0x00006602, + 6432: 0x0000660E, + 6433: 0x00006600, + 6434: 0x0000660F, + 6435: 0x00006615, + 6436: 0x0000660A, + 6437: 0x00006607, + 6438: 0x0000670D, + 6439: 0x0000670B, + 6440: 0x0000676D, + 6441: 0x0000678B, + 6442: 0x00006795, + 6443: 0x00006771, + 6444: 0x0000679C, + 6445: 0x00006773, + 6446: 0x00006777, + 6447: 0x00006787, + 6448: 0x0000679D, + 6449: 0x00006797, + 6450: 0x0000676F, + 6451: 0x00006770, + 6452: 0x0000677F, + 6453: 0x00006789, + 6454: 0x0000677E, + 6455: 0x00006790, + 6456: 0x00006775, + 6457: 0x0000679A, + 6458: 0x00006793, + 6459: 0x0000677C, + 6460: 0x0000676A, + 6461: 0x00006772, + 6462: 0x00006B23, + 6463: 0x00006B66, + 6464: 0x00006B67, + 6465: 0x00006B7F, + 6466: 0x00006C13, + 6467: 0x00006C1B, + 6468: 0x00006CE3, + 6469: 0x00006CE8, + 6470: 0x00006CF3, + 6471: 0x00006CB1, + 6472: 0x00006CCC, + 6473: 0x00006CE5, + 6474: 0x00006CB3, + 6475: 0x00006CBD, + 6476: 0x00006CBE, + 6477: 0x00006CBC, + 6478: 0x00006CE2, + 6479: 0x00006CAB, + 6480: 0x00006CD5, + 6481: 0x00006CD3, + 6482: 0x00006CB8, + 6483: 0x00006CC4, + 6484: 0x00006CB9, + 6485: 0x00006CC1, + 6486: 0x00006CAE, + 6487: 0x00006CD7, + 6488: 0x00006CC5, + 6489: 0x00006CF1, + 6490: 0x00006CBF, + 6491: 0x00006CBB, + 6492: 0x00006CE1, + 6493: 0x00006CDB, + 6494: 0x00006CCA, + 6495: 0x00006CAC, + 6496: 0x00006CEF, + 6497: 0x00006CDC, + 6498: 0x00006CD6, + 6499: 0x00006CE0, + 6500: 0x00007095, + 6501: 0x0000708E, + 6502: 0x00007092, + 6503: 0x0000708A, + 6504: 0x00007099, + 6505: 0x0000722C, + 6506: 0x0000722D, + 6507: 0x00007238, + 6508: 0x00007248, + 6509: 0x00007267, + 6510: 0x00007269, + 6511: 0x000072C0, + 6512: 0x000072CE, + 6513: 0x000072D9, + 6514: 0x000072D7, + 6515: 0x000072D0, + 6516: 0x000073A9, + 6517: 0x000073A8, + 6518: 0x0000739F, + 6519: 0x000073AB, + 6520: 0x000073A5, + 6521: 0x0000753D, + 6522: 0x0000759D, + 6523: 0x00007599, + 6524: 0x0000759A, + 6525: 0x00007684, + 6526: 0x000076C2, + 6527: 0x000076F2, + 6528: 0x000076F4, + 6529: 0x000077E5, + 6530: 0x000077FD, + 6531: 0x0000793E, + 6532: 0x00007940, + 6533: 0x00007941, + 6534: 0x000079C9, + 6535: 0x000079C8, + 6536: 0x00007A7A, + 6537: 0x00007A79, + 6538: 0x00007AFA, + 6539: 0x00007CFE, + 6540: 0x00007F54, + 6541: 0x00007F8C, + 6542: 0x00007F8B, + 6543: 0x00008005, + 6544: 0x000080BA, + 6545: 0x000080A5, + 6546: 0x000080A2, + 6547: 0x000080B1, + 6548: 0x000080A1, + 6549: 0x000080AB, + 6550: 0x000080A9, + 6551: 0x000080B4, + 6552: 0x000080AA, + 6553: 0x000080AF, + 6554: 0x000081E5, + 6555: 0x000081FE, + 6556: 0x0000820D, + 6557: 0x000082B3, + 6558: 0x0000829D, + 6559: 0x00008299, + 6560: 0x000082AD, + 6561: 0x000082BD, + 6562: 0x0000829F, + 6563: 0x000082B9, + 6564: 0x000082B1, + 6565: 0x000082AC, + 6566: 0x000082A5, + 6567: 0x000082AF, + 6568: 0x000082B8, + 6569: 0x000082A3, + 6570: 0x000082B0, + 6571: 0x000082BE, + 6572: 0x000082B7, + 6573: 0x0000864E, + 6574: 0x00008671, + 6575: 0x0000521D, + 6576: 0x00008868, + 6577: 0x00008ECB, + 6578: 0x00008FCE, + 6579: 0x00008FD4, + 6580: 0x00008FD1, + 6581: 0x000090B5, + 6582: 0x000090B8, + 6583: 0x000090B1, + 6584: 0x000090B6, + 6585: 0x000091C7, + 6586: 0x000091D1, + 6587: 0x00009577, + 6588: 0x00009580, + 6589: 0x0000961C, + 6590: 0x00009640, + 6591: 0x0000963F, + 6592: 0x0000963B, + 6593: 0x00009644, + 6594: 0x00009642, + 6595: 0x000096B9, + 6596: 0x000096E8, + 6597: 0x00009752, + 6598: 0x0000975E, + 6599: 0x00004E9F, + 6600: 0x00004EAD, + 6601: 0x00004EAE, + 6602: 0x00004FE1, + 6603: 0x00004FB5, + 6604: 0x00004FAF, + 6605: 0x00004FBF, + 6606: 0x00004FE0, + 6607: 0x00004FD1, + 6608: 0x00004FCF, + 6609: 0x00004FDD, + 6610: 0x00004FC3, + 6611: 0x00004FB6, + 6612: 0x00004FD8, + 6613: 0x00004FDF, + 6614: 0x00004FCA, + 6615: 0x00004FD7, + 6616: 0x00004FAE, + 6617: 0x00004FD0, + 6618: 0x00004FC4, + 6619: 0x00004FC2, + 6620: 0x00004FDA, + 6621: 0x00004FCE, + 6622: 0x00004FDE, + 6623: 0x00004FB7, + 6624: 0x00005157, + 6625: 0x00005192, + 6626: 0x00005191, + 6627: 0x000051A0, + 6628: 0x0000524E, + 6629: 0x00005243, + 6630: 0x0000524A, + 6631: 0x0000524D, + 6632: 0x0000524C, + 6633: 0x0000524B, + 6634: 0x00005247, + 6635: 0x000052C7, + 6636: 0x000052C9, + 6637: 0x000052C3, + 6638: 0x000052C1, + 6639: 0x0000530D, + 6640: 0x00005357, + 6641: 0x0000537B, + 6642: 0x0000539A, + 6643: 0x000053DB, + 6644: 0x000054AC, + 6645: 0x000054C0, + 6646: 0x000054A8, + 6647: 0x000054CE, + 6648: 0x000054C9, + 6649: 0x000054B8, + 6650: 0x000054A6, + 6651: 0x000054B3, + 6652: 0x000054C7, + 6653: 0x000054C2, + 6654: 0x000054BD, + 6655: 0x000054AA, + 6656: 0x000054C1, + 6657: 0x000054C4, + 6658: 0x000054C8, + 6659: 0x000054AF, + 6660: 0x000054AB, + 6661: 0x000054B1, + 6662: 0x000054BB, + 6663: 0x000054A9, + 6664: 0x000054A7, + 6665: 0x000054BF, + 6666: 0x000056FF, + 6667: 0x00005782, + 6668: 0x0000578B, + 6669: 0x000057A0, + 6670: 0x000057A3, + 6671: 0x000057A2, + 6672: 0x000057CE, + 6673: 0x000057AE, + 6674: 0x00005793, + 6675: 0x00005955, + 6676: 0x00005951, + 6677: 0x0000594F, + 6678: 0x0000594E, + 6679: 0x00005950, + 6680: 0x000059DC, + 6681: 0x000059D8, + 6682: 0x000059FF, + 6683: 0x000059E3, + 6684: 0x000059E8, + 6685: 0x00005A03, + 6686: 0x000059E5, + 6687: 0x000059EA, + 6688: 0x000059DA, + 6689: 0x000059E6, + 6690: 0x00005A01, + 6691: 0x000059FB, + 6692: 0x00005B69, + 6693: 0x00005BA3, + 6694: 0x00005BA6, + 6695: 0x00005BA4, + 6696: 0x00005BA2, + 6697: 0x00005BA5, + 6698: 0x00005C01, + 6699: 0x00005C4E, + 6700: 0x00005C4F, + 6701: 0x00005C4D, + 6702: 0x00005C4B, + 6703: 0x00005CD9, + 6704: 0x00005CD2, + 6705: 0x00005DF7, + 6706: 0x00005E1D, + 6707: 0x00005E25, + 6708: 0x00005E1F, + 6709: 0x00005E7D, + 6710: 0x00005EA0, + 6711: 0x00005EA6, + 6712: 0x00005EFA, + 6713: 0x00005F08, + 6714: 0x00005F2D, + 6715: 0x00005F65, + 6716: 0x00005F88, + 6717: 0x00005F85, + 6718: 0x00005F8A, + 6719: 0x00005F8B, + 6720: 0x00005F87, + 6721: 0x00005F8C, + 6722: 0x00005F89, + 6723: 0x00006012, + 6724: 0x0000601D, + 6725: 0x00006020, + 6726: 0x00006025, + 6727: 0x0000600E, + 6728: 0x00006028, + 6729: 0x0000604D, + 6730: 0x00006070, + 6731: 0x00006068, + 6732: 0x00006062, + 6733: 0x00006046, + 6734: 0x00006043, + 6735: 0x0000606C, + 6736: 0x0000606B, + 6737: 0x0000606A, + 6738: 0x00006064, + 6739: 0x00006241, + 6740: 0x000062DC, + 6741: 0x00006316, + 6742: 0x00006309, + 6743: 0x000062FC, + 6744: 0x000062ED, + 6745: 0x00006301, + 6746: 0x000062EE, + 6747: 0x000062FD, + 6748: 0x00006307, + 6749: 0x000062F1, + 6750: 0x000062F7, + 6751: 0x000062EF, + 6752: 0x000062EC, + 6753: 0x000062FE, + 6754: 0x000062F4, + 6755: 0x00006311, + 6756: 0x00006302, + 6757: 0x0000653F, + 6758: 0x00006545, + 6759: 0x000065AB, + 6760: 0x000065BD, + 6761: 0x000065E2, + 6762: 0x00006625, + 6763: 0x0000662D, + 6764: 0x00006620, + 6765: 0x00006627, + 6766: 0x0000662F, + 6767: 0x0000661F, + 6768: 0x00006628, + 6769: 0x00006631, + 6770: 0x00006624, + 6771: 0x000066F7, + 6772: 0x000067FF, + 6773: 0x000067D3, + 6774: 0x000067F1, + 6775: 0x000067D4, + 6776: 0x000067D0, + 6777: 0x000067EC, + 6778: 0x000067B6, + 6779: 0x000067AF, + 6780: 0x000067F5, + 6781: 0x000067E9, + 6782: 0x000067EF, + 6783: 0x000067C4, + 6784: 0x000067D1, + 6785: 0x000067B4, + 6786: 0x000067DA, + 6787: 0x000067E5, + 6788: 0x000067B8, + 6789: 0x000067CF, + 6790: 0x000067DE, + 6791: 0x000067F3, + 6792: 0x000067B0, + 6793: 0x000067D9, + 6794: 0x000067E2, + 6795: 0x000067DD, + 6796: 0x000067D2, + 6797: 0x00006B6A, + 6798: 0x00006B83, + 6799: 0x00006B86, + 6800: 0x00006BB5, + 6801: 0x00006BD2, + 6802: 0x00006BD7, + 6803: 0x00006C1F, + 6804: 0x00006CC9, + 6805: 0x00006D0B, + 6806: 0x00006D32, + 6807: 0x00006D2A, + 6808: 0x00006D41, + 6809: 0x00006D25, + 6810: 0x00006D0C, + 6811: 0x00006D31, + 6812: 0x00006D1E, + 6813: 0x00006D17, + 6814: 0x00006D3B, + 6815: 0x00006D3D, + 6816: 0x00006D3E, + 6817: 0x00006D36, + 6818: 0x00006D1B, + 6819: 0x00006CF5, + 6820: 0x00006D39, + 6821: 0x00006D27, + 6822: 0x00006D38, + 6823: 0x00006D29, + 6824: 0x00006D2E, + 6825: 0x00006D35, + 6826: 0x00006D0E, + 6827: 0x00006D2B, + 6828: 0x000070AB, + 6829: 0x000070BA, + 6830: 0x000070B3, + 6831: 0x000070AC, + 6832: 0x000070AF, + 6833: 0x000070AD, + 6834: 0x000070B8, + 6835: 0x000070AE, + 6836: 0x000070A4, + 6837: 0x00007230, + 6838: 0x00007272, + 6839: 0x0000726F, + 6840: 0x00007274, + 6841: 0x000072E9, + 6842: 0x000072E0, + 6843: 0x000072E1, + 6844: 0x000073B7, + 6845: 0x000073CA, + 6846: 0x000073BB, + 6847: 0x000073B2, + 6848: 0x000073CD, + 6849: 0x000073C0, + 6850: 0x000073B3, + 6851: 0x0000751A, + 6852: 0x0000752D, + 6853: 0x0000754F, + 6854: 0x0000754C, + 6855: 0x0000754E, + 6856: 0x0000754B, + 6857: 0x000075AB, + 6858: 0x000075A4, + 6859: 0x000075A5, + 6860: 0x000075A2, + 6861: 0x000075A3, + 6862: 0x00007678, + 6863: 0x00007686, + 6864: 0x00007687, + 6865: 0x00007688, + 6866: 0x000076C8, + 6867: 0x000076C6, + 6868: 0x000076C3, + 6869: 0x000076C5, + 6870: 0x00007701, + 6871: 0x000076F9, + 6872: 0x000076F8, + 6873: 0x00007709, + 6874: 0x0000770B, + 6875: 0x000076FE, + 6876: 0x000076FC, + 6877: 0x00007707, + 6878: 0x000077DC, + 6879: 0x00007802, + 6880: 0x00007814, + 6881: 0x0000780C, + 6882: 0x0000780D, + 6883: 0x00007946, + 6884: 0x00007949, + 6885: 0x00007948, + 6886: 0x00007947, + 6887: 0x000079B9, + 6888: 0x000079BA, + 6889: 0x000079D1, + 6890: 0x000079D2, + 6891: 0x000079CB, + 6892: 0x00007A7F, + 6893: 0x00007A81, + 6894: 0x00007AFF, + 6895: 0x00007AFD, + 6896: 0x00007C7D, + 6897: 0x00007D02, + 6898: 0x00007D05, + 6899: 0x00007D00, + 6900: 0x00007D09, + 6901: 0x00007D07, + 6902: 0x00007D04, + 6903: 0x00007D06, + 6904: 0x00007F38, + 6905: 0x00007F8E, + 6906: 0x00007FBF, + 6907: 0x00008004, + 6908: 0x00008010, + 6909: 0x0000800D, + 6910: 0x00008011, + 6911: 0x00008036, + 6912: 0x000080D6, + 6913: 0x000080E5, + 6914: 0x000080DA, + 6915: 0x000080C3, + 6916: 0x000080C4, + 6917: 0x000080CC, + 6918: 0x000080E1, + 6919: 0x000080DB, + 6920: 0x000080CE, + 6921: 0x000080DE, + 6922: 0x000080E4, + 6923: 0x000080DD, + 6924: 0x000081F4, + 6925: 0x00008222, + 6926: 0x000082E7, + 6927: 0x00008303, + 6928: 0x00008305, + 6929: 0x000082E3, + 6930: 0x000082DB, + 6931: 0x000082E6, + 6932: 0x00008304, + 6933: 0x000082E5, + 6934: 0x00008302, + 6935: 0x00008309, + 6936: 0x000082D2, + 6937: 0x000082D7, + 6938: 0x000082F1, + 6939: 0x00008301, + 6940: 0x000082DC, + 6941: 0x000082D4, + 6942: 0x000082D1, + 6943: 0x000082DE, + 6944: 0x000082D3, + 6945: 0x000082DF, + 6946: 0x000082EF, + 6947: 0x00008306, + 6948: 0x00008650, + 6949: 0x00008679, + 6950: 0x0000867B, + 6951: 0x0000867A, + 6952: 0x0000884D, + 6953: 0x0000886B, + 6954: 0x00008981, + 6955: 0x000089D4, + 6956: 0x00008A08, + 6957: 0x00008A02, + 6958: 0x00008A03, + 6959: 0x00008C9E, + 6960: 0x00008CA0, + 6961: 0x00008D74, + 6962: 0x00008D73, + 6963: 0x00008DB4, + 6964: 0x00008ECD, + 6965: 0x00008ECC, + 6966: 0x00008FF0, + 6967: 0x00008FE6, + 6968: 0x00008FE2, + 6969: 0x00008FEA, + 6970: 0x00008FE5, + 6971: 0x00008FED, + 6972: 0x00008FEB, + 6973: 0x00008FE4, + 6974: 0x00008FE8, + 6975: 0x000090CA, + 6976: 0x000090CE, + 6977: 0x000090C1, + 6978: 0x000090C3, + 6979: 0x0000914B, + 6980: 0x0000914A, + 6981: 0x000091CD, + 6982: 0x00009582, + 6983: 0x00009650, + 6984: 0x0000964B, + 6985: 0x0000964C, + 6986: 0x0000964D, + 6987: 0x00009762, + 6988: 0x00009769, + 6989: 0x000097CB, + 6990: 0x000097ED, + 6991: 0x000097F3, + 6992: 0x00009801, + 6993: 0x000098A8, + 6994: 0x000098DB, + 6995: 0x000098DF, + 6996: 0x00009996, + 6997: 0x00009999, + 6998: 0x00004E58, + 6999: 0x00004EB3, + 7000: 0x0000500C, + 7001: 0x0000500D, + 7002: 0x00005023, + 7003: 0x00004FEF, + 7004: 0x00005026, + 7005: 0x00005025, + 7006: 0x00004FF8, + 7007: 0x00005029, + 7008: 0x00005016, + 7009: 0x00005006, + 7010: 0x0000503C, + 7011: 0x0000501F, + 7012: 0x0000501A, + 7013: 0x00005012, + 7014: 0x00005011, + 7015: 0x00004FFA, + 7016: 0x00005000, + 7017: 0x00005014, + 7018: 0x00005028, + 7019: 0x00004FF1, + 7020: 0x00005021, + 7021: 0x0000500B, + 7022: 0x00005019, + 7023: 0x00005018, + 7024: 0x00004FF3, + 7025: 0x00004FEE, + 7026: 0x0000502D, + 7027: 0x0000502A, + 7028: 0x00004FFE, + 7029: 0x0000502B, + 7030: 0x00005009, + 7031: 0x0000517C, + 7032: 0x000051A4, + 7033: 0x000051A5, + 7034: 0x000051A2, + 7035: 0x000051CD, + 7036: 0x000051CC, + 7037: 0x000051C6, + 7038: 0x000051CB, + 7039: 0x00005256, + 7040: 0x0000525C, + 7041: 0x00005254, + 7042: 0x0000525B, + 7043: 0x0000525D, + 7044: 0x0000532A, + 7045: 0x0000537F, + 7046: 0x0000539F, + 7047: 0x0000539D, + 7048: 0x000053DF, + 7049: 0x000054E8, + 7050: 0x00005510, + 7051: 0x00005501, + 7052: 0x00005537, + 7053: 0x000054FC, + 7054: 0x000054E5, + 7055: 0x000054F2, + 7056: 0x00005506, + 7057: 0x000054FA, + 7058: 0x00005514, + 7059: 0x000054E9, + 7060: 0x000054ED, + 7061: 0x000054E1, + 7062: 0x00005509, + 7063: 0x000054EE, + 7064: 0x000054EA, + 7065: 0x000054E6, + 7066: 0x00005527, + 7067: 0x00005507, + 7068: 0x000054FD, + 7069: 0x0000550F, + 7070: 0x00005703, + 7071: 0x00005704, + 7072: 0x000057C2, + 7073: 0x000057D4, + 7074: 0x000057CB, + 7075: 0x000057C3, + 7076: 0x00005809, + 7077: 0x0000590F, + 7078: 0x00005957, + 7079: 0x00005958, + 7080: 0x0000595A, + 7081: 0x00005A11, + 7082: 0x00005A18, + 7083: 0x00005A1C, + 7084: 0x00005A1F, + 7085: 0x00005A1B, + 7086: 0x00005A13, + 7087: 0x000059EC, + 7088: 0x00005A20, + 7089: 0x00005A23, + 7090: 0x00005A29, + 7091: 0x00005A25, + 7092: 0x00005A0C, + 7093: 0x00005A09, + 7094: 0x00005B6B, + 7095: 0x00005C58, + 7096: 0x00005BB0, + 7097: 0x00005BB3, + 7098: 0x00005BB6, + 7099: 0x00005BB4, + 7100: 0x00005BAE, + 7101: 0x00005BB5, + 7102: 0x00005BB9, + 7103: 0x00005BB8, + 7104: 0x00005C04, + 7105: 0x00005C51, + 7106: 0x00005C55, + 7107: 0x00005C50, + 7108: 0x00005CED, + 7109: 0x00005CFD, + 7110: 0x00005CFB, + 7111: 0x00005CEA, + 7112: 0x00005CE8, + 7113: 0x00005CF0, + 7114: 0x00005CF6, + 7115: 0x00005D01, + 7116: 0x00005CF4, + 7117: 0x00005DEE, + 7118: 0x00005E2D, + 7119: 0x00005E2B, + 7120: 0x00005EAB, + 7121: 0x00005EAD, + 7122: 0x00005EA7, + 7123: 0x00005F31, + 7124: 0x00005F92, + 7125: 0x00005F91, + 7126: 0x00005F90, + 7127: 0x00006059, + 7128: 0x00006063, + 7129: 0x00006065, + 7130: 0x00006050, + 7131: 0x00006055, + 7132: 0x0000606D, + 7133: 0x00006069, + 7134: 0x0000606F, + 7135: 0x00006084, + 7136: 0x0000609F, + 7137: 0x0000609A, + 7138: 0x0000608D, + 7139: 0x00006094, + 7140: 0x0000608C, + 7141: 0x00006085, + 7142: 0x00006096, + 7143: 0x00006247, + 7144: 0x000062F3, + 7145: 0x00006308, + 7146: 0x000062FF, + 7147: 0x0000634E, + 7148: 0x0000633E, + 7149: 0x0000632F, + 7150: 0x00006355, + 7151: 0x00006342, + 7152: 0x00006346, + 7153: 0x0000634F, + 7154: 0x00006349, + 7155: 0x0000633A, + 7156: 0x00006350, + 7157: 0x0000633D, + 7158: 0x0000632A, + 7159: 0x0000632B, + 7160: 0x00006328, + 7161: 0x0000634D, + 7162: 0x0000634C, + 7163: 0x00006548, + 7164: 0x00006549, + 7165: 0x00006599, + 7166: 0x000065C1, + 7167: 0x000065C5, + 7168: 0x00006642, + 7169: 0x00006649, + 7170: 0x0000664F, + 7171: 0x00006643, + 7172: 0x00006652, + 7173: 0x0000664C, + 7174: 0x00006645, + 7175: 0x00006641, + 7176: 0x000066F8, + 7177: 0x00006714, + 7178: 0x00006715, + 7179: 0x00006717, + 7180: 0x00006821, + 7181: 0x00006838, + 7182: 0x00006848, + 7183: 0x00006846, + 7184: 0x00006853, + 7185: 0x00006839, + 7186: 0x00006842, + 7187: 0x00006854, + 7188: 0x00006829, + 7189: 0x000068B3, + 7190: 0x00006817, + 7191: 0x0000684C, + 7192: 0x00006851, + 7193: 0x0000683D, + 7194: 0x000067F4, + 7195: 0x00006850, + 7196: 0x00006840, + 7197: 0x0000683C, + 7198: 0x00006843, + 7199: 0x0000682A, + 7200: 0x00006845, + 7201: 0x00006813, + 7202: 0x00006818, + 7203: 0x00006841, + 7204: 0x00006B8A, + 7205: 0x00006B89, + 7206: 0x00006BB7, + 7207: 0x00006C23, + 7208: 0x00006C27, + 7209: 0x00006C28, + 7210: 0x00006C26, + 7211: 0x00006C24, + 7212: 0x00006CF0, + 7213: 0x00006D6A, + 7214: 0x00006D95, + 7215: 0x00006D88, + 7216: 0x00006D87, + 7217: 0x00006D66, + 7218: 0x00006D78, + 7219: 0x00006D77, + 7220: 0x00006D59, + 7221: 0x00006D93, + 7222: 0x00006D6C, + 7223: 0x00006D89, + 7224: 0x00006D6E, + 7225: 0x00006D5A, + 7226: 0x00006D74, + 7227: 0x00006D69, + 7228: 0x00006D8C, + 7229: 0x00006D8A, + 7230: 0x00006D79, + 7231: 0x00006D85, + 7232: 0x00006D65, + 7233: 0x00006D94, + 7234: 0x000070CA, + 7235: 0x000070D8, + 7236: 0x000070E4, + 7237: 0x000070D9, + 7238: 0x000070C8, + 7239: 0x000070CF, + 7240: 0x00007239, + 7241: 0x00007279, + 7242: 0x000072FC, + 7243: 0x000072F9, + 7244: 0x000072FD, + 7245: 0x000072F8, + 7246: 0x000072F7, + 7247: 0x00007386, + 7248: 0x000073ED, + 7249: 0x00007409, + 7250: 0x000073EE, + 7251: 0x000073E0, + 7252: 0x000073EA, + 7253: 0x000073DE, + 7254: 0x00007554, + 7255: 0x0000755D, + 7256: 0x0000755C, + 7257: 0x0000755A, + 7258: 0x00007559, + 7259: 0x000075BE, + 7260: 0x000075C5, + 7261: 0x000075C7, + 7262: 0x000075B2, + 7263: 0x000075B3, + 7264: 0x000075BD, + 7265: 0x000075BC, + 7266: 0x000075B9, + 7267: 0x000075C2, + 7268: 0x000075B8, + 7269: 0x0000768B, + 7270: 0x000076B0, + 7271: 0x000076CA, + 7272: 0x000076CD, + 7273: 0x000076CE, + 7274: 0x00007729, + 7275: 0x0000771F, + 7276: 0x00007720, + 7277: 0x00007728, + 7278: 0x000077E9, + 7279: 0x00007830, + 7280: 0x00007827, + 7281: 0x00007838, + 7282: 0x0000781D, + 7283: 0x00007834, + 7284: 0x00007837, + 7285: 0x00007825, + 7286: 0x0000782D, + 7287: 0x00007820, + 7288: 0x0000781F, + 7289: 0x00007832, + 7290: 0x00007955, + 7291: 0x00007950, + 7292: 0x00007960, + 7293: 0x0000795F, + 7294: 0x00007956, + 7295: 0x0000795E, + 7296: 0x0000795D, + 7297: 0x00007957, + 7298: 0x0000795A, + 7299: 0x000079E4, + 7300: 0x000079E3, + 7301: 0x000079E7, + 7302: 0x000079DF, + 7303: 0x000079E6, + 7304: 0x000079E9, + 7305: 0x000079D8, + 7306: 0x00007A84, + 7307: 0x00007A88, + 7308: 0x00007AD9, + 7309: 0x00007B06, + 7310: 0x00007B11, + 7311: 0x00007C89, + 7312: 0x00007D21, + 7313: 0x00007D17, + 7314: 0x00007D0B, + 7315: 0x00007D0A, + 7316: 0x00007D20, + 7317: 0x00007D22, + 7318: 0x00007D14, + 7319: 0x00007D10, + 7320: 0x00007D15, + 7321: 0x00007D1A, + 7322: 0x00007D1C, + 7323: 0x00007D0D, + 7324: 0x00007D19, + 7325: 0x00007D1B, + 7326: 0x00007F3A, + 7327: 0x00007F5F, + 7328: 0x00007F94, + 7329: 0x00007FC5, + 7330: 0x00007FC1, + 7331: 0x00008006, + 7332: 0x00008018, + 7333: 0x00008015, + 7334: 0x00008019, + 7335: 0x00008017, + 7336: 0x0000803D, + 7337: 0x0000803F, + 7338: 0x000080F1, + 7339: 0x00008102, + 7340: 0x000080F0, + 7341: 0x00008105, + 7342: 0x000080ED, + 7343: 0x000080F4, + 7344: 0x00008106, + 7345: 0x000080F8, + 7346: 0x000080F3, + 7347: 0x00008108, + 7348: 0x000080FD, + 7349: 0x0000810A, + 7350: 0x000080FC, + 7351: 0x000080EF, + 7352: 0x000081ED, + 7353: 0x000081EC, + 7354: 0x00008200, + 7355: 0x00008210, + 7356: 0x0000822A, + 7357: 0x0000822B, + 7358: 0x00008228, + 7359: 0x0000822C, + 7360: 0x000082BB, + 7361: 0x0000832B, + 7362: 0x00008352, + 7363: 0x00008354, + 7364: 0x0000834A, + 7365: 0x00008338, + 7366: 0x00008350, + 7367: 0x00008349, + 7368: 0x00008335, + 7369: 0x00008334, + 7370: 0x0000834F, + 7371: 0x00008332, + 7372: 0x00008339, + 7373: 0x00008336, + 7374: 0x00008317, + 7375: 0x00008340, + 7376: 0x00008331, + 7377: 0x00008328, + 7378: 0x00008343, + 7379: 0x00008654, + 7380: 0x0000868A, + 7381: 0x000086AA, + 7382: 0x00008693, + 7383: 0x000086A4, + 7384: 0x000086A9, + 7385: 0x0000868C, + 7386: 0x000086A3, + 7387: 0x0000869C, + 7388: 0x00008870, + 7389: 0x00008877, + 7390: 0x00008881, + 7391: 0x00008882, + 7392: 0x0000887D, + 7393: 0x00008879, + 7394: 0x00008A18, + 7395: 0x00008A10, + 7396: 0x00008A0E, + 7397: 0x00008A0C, + 7398: 0x00008A15, + 7399: 0x00008A0A, + 7400: 0x00008A17, + 7401: 0x00008A13, + 7402: 0x00008A16, + 7403: 0x00008A0F, + 7404: 0x00008A11, + 7405: 0x00008C48, + 7406: 0x00008C7A, + 7407: 0x00008C79, + 7408: 0x00008CA1, + 7409: 0x00008CA2, + 7410: 0x00008D77, + 7411: 0x00008EAC, + 7412: 0x00008ED2, + 7413: 0x00008ED4, + 7414: 0x00008ECF, + 7415: 0x00008FB1, + 7416: 0x00009001, + 7417: 0x00009006, + 7418: 0x00008FF7, + 7419: 0x00009000, + 7420: 0x00008FFA, + 7421: 0x00008FF4, + 7422: 0x00009003, + 7423: 0x00008FFD, + 7424: 0x00009005, + 7425: 0x00008FF8, + 7426: 0x00009095, + 7427: 0x000090E1, + 7428: 0x000090DD, + 7429: 0x000090E2, + 7430: 0x00009152, + 7431: 0x0000914D, + 7432: 0x0000914C, + 7433: 0x000091D8, + 7434: 0x000091DD, + 7435: 0x000091D7, + 7436: 0x000091DC, + 7437: 0x000091D9, + 7438: 0x00009583, + 7439: 0x00009662, + 7440: 0x00009663, + 7441: 0x00009661, + 7442: 0x0000965B, + 7443: 0x0000965D, + 7444: 0x00009664, + 7445: 0x00009658, + 7446: 0x0000965E, + 7447: 0x000096BB, + 7448: 0x000098E2, + 7449: 0x000099AC, + 7450: 0x00009AA8, + 7451: 0x00009AD8, + 7452: 0x00009B25, + 7453: 0x00009B32, + 7454: 0x00009B3C, + 7455: 0x00004E7E, + 7456: 0x0000507A, + 7457: 0x0000507D, + 7458: 0x0000505C, + 7459: 0x00005047, + 7460: 0x00005043, + 7461: 0x0000504C, + 7462: 0x0000505A, + 7463: 0x00005049, + 7464: 0x00005065, + 7465: 0x00005076, + 7466: 0x0000504E, + 7467: 0x00005055, + 7468: 0x00005075, + 7469: 0x00005074, + 7470: 0x00005077, + 7471: 0x0000504F, + 7472: 0x0000500F, + 7473: 0x0000506F, + 7474: 0x0000506D, + 7475: 0x0000515C, + 7476: 0x00005195, + 7477: 0x000051F0, + 7478: 0x0000526A, + 7479: 0x0000526F, + 7480: 0x000052D2, + 7481: 0x000052D9, + 7482: 0x000052D8, + 7483: 0x000052D5, + 7484: 0x00005310, + 7485: 0x0000530F, + 7486: 0x00005319, + 7487: 0x0000533F, + 7488: 0x00005340, + 7489: 0x0000533E, + 7490: 0x000053C3, + 7491: 0x000066FC, + 7492: 0x00005546, + 7493: 0x0000556A, + 7494: 0x00005566, + 7495: 0x00005544, + 7496: 0x0000555E, + 7497: 0x00005561, + 7498: 0x00005543, + 7499: 0x0000554A, + 7500: 0x00005531, + 7501: 0x00005556, + 7502: 0x0000554F, + 7503: 0x00005555, + 7504: 0x0000552F, + 7505: 0x00005564, + 7506: 0x00005538, + 7507: 0x0000552E, + 7508: 0x0000555C, + 7509: 0x0000552C, + 7510: 0x00005563, + 7511: 0x00005533, + 7512: 0x00005541, + 7513: 0x00005557, + 7514: 0x00005708, + 7515: 0x0000570B, + 7516: 0x00005709, + 7517: 0x000057DF, + 7518: 0x00005805, + 7519: 0x0000580A, + 7520: 0x00005806, + 7521: 0x000057E0, + 7522: 0x000057E4, + 7523: 0x000057FA, + 7524: 0x00005802, + 7525: 0x00005835, + 7526: 0x000057F7, + 7527: 0x000057F9, + 7528: 0x00005920, + 7529: 0x00005962, + 7530: 0x00005A36, + 7531: 0x00005A41, + 7532: 0x00005A49, + 7533: 0x00005A66, + 7534: 0x00005A6A, + 7535: 0x00005A40, + 7536: 0x00005A3C, + 7537: 0x00005A62, + 7538: 0x00005A5A, + 7539: 0x00005A46, + 7540: 0x00005A4A, + 7541: 0x00005B70, + 7542: 0x00005BC7, + 7543: 0x00005BC5, + 7544: 0x00005BC4, + 7545: 0x00005BC2, + 7546: 0x00005BBF, + 7547: 0x00005BC6, + 7548: 0x00005C09, + 7549: 0x00005C08, + 7550: 0x00005C07, + 7551: 0x00005C60, + 7552: 0x00005C5C, + 7553: 0x00005C5D, + 7554: 0x00005D07, + 7555: 0x00005D06, + 7556: 0x00005D0E, + 7557: 0x00005D1B, + 7558: 0x00005D16, + 7559: 0x00005D22, + 7560: 0x00005D11, + 7561: 0x00005D29, + 7562: 0x00005D14, + 7563: 0x00005D19, + 7564: 0x00005D24, + 7565: 0x00005D27, + 7566: 0x00005D17, + 7567: 0x00005DE2, + 7568: 0x00005E38, + 7569: 0x00005E36, + 7570: 0x00005E33, + 7571: 0x00005E37, + 7572: 0x00005EB7, + 7573: 0x00005EB8, + 7574: 0x00005EB6, + 7575: 0x00005EB5, + 7576: 0x00005EBE, + 7577: 0x00005F35, + 7578: 0x00005F37, + 7579: 0x00005F57, + 7580: 0x00005F6C, + 7581: 0x00005F69, + 7582: 0x00005F6B, + 7583: 0x00005F97, + 7584: 0x00005F99, + 7585: 0x00005F9E, + 7586: 0x00005F98, + 7587: 0x00005FA1, + 7588: 0x00005FA0, + 7589: 0x00005F9C, + 7590: 0x0000607F, + 7591: 0x000060A3, + 7592: 0x00006089, + 7593: 0x000060A0, + 7594: 0x000060A8, + 7595: 0x000060CB, + 7596: 0x000060B4, + 7597: 0x000060E6, + 7598: 0x000060BD, + 7599: 0x000060C5, + 7600: 0x000060BB, + 7601: 0x000060B5, + 7602: 0x000060DC, + 7603: 0x000060BC, + 7604: 0x000060D8, + 7605: 0x000060D5, + 7606: 0x000060C6, + 7607: 0x000060DF, + 7608: 0x000060B8, + 7609: 0x000060DA, + 7610: 0x000060C7, + 7611: 0x0000621A, + 7612: 0x0000621B, + 7613: 0x00006248, + 7614: 0x000063A0, + 7615: 0x000063A7, + 7616: 0x00006372, + 7617: 0x00006396, + 7618: 0x000063A2, + 7619: 0x000063A5, + 7620: 0x00006377, + 7621: 0x00006367, + 7622: 0x00006398, + 7623: 0x000063AA, + 7624: 0x00006371, + 7625: 0x000063A9, + 7626: 0x00006389, + 7627: 0x00006383, + 7628: 0x0000639B, + 7629: 0x0000636B, + 7630: 0x000063A8, + 7631: 0x00006384, + 7632: 0x00006388, + 7633: 0x00006399, + 7634: 0x000063A1, + 7635: 0x000063AC, + 7636: 0x00006392, + 7637: 0x0000638F, + 7638: 0x00006380, + 7639: 0x0000637B, + 7640: 0x00006369, + 7641: 0x00006368, + 7642: 0x0000637A, + 7643: 0x0000655D, + 7644: 0x00006556, + 7645: 0x00006551, + 7646: 0x00006559, + 7647: 0x00006557, + 7648: 0x0000555F, + 7649: 0x0000654F, + 7650: 0x00006558, + 7651: 0x00006555, + 7652: 0x00006554, + 7653: 0x0000659C, + 7654: 0x0000659B, + 7655: 0x000065AC, + 7656: 0x000065CF, + 7657: 0x000065CB, + 7658: 0x000065CC, + 7659: 0x000065CE, + 7660: 0x0000665D, + 7661: 0x0000665A, + 7662: 0x00006664, + 7663: 0x00006668, + 7664: 0x00006666, + 7665: 0x0000665E, + 7666: 0x000066F9, + 7667: 0x000052D7, + 7668: 0x0000671B, + 7669: 0x00006881, + 7670: 0x000068AF, + 7671: 0x000068A2, + 7672: 0x00006893, + 7673: 0x000068B5, + 7674: 0x0000687F, + 7675: 0x00006876, + 7676: 0x000068B1, + 7677: 0x000068A7, + 7678: 0x00006897, + 7679: 0x000068B0, + 7680: 0x00006883, + 7681: 0x000068C4, + 7682: 0x000068AD, + 7683: 0x00006886, + 7684: 0x00006885, + 7685: 0x00006894, + 7686: 0x0000689D, + 7687: 0x000068A8, + 7688: 0x0000689F, + 7689: 0x000068A1, + 7690: 0x00006882, + 7691: 0x00006B32, + 7692: 0x00006BBA, + 7693: 0x00006BEB, + 7694: 0x00006BEC, + 7695: 0x00006C2B, + 7696: 0x00006D8E, + 7697: 0x00006DBC, + 7698: 0x00006DF3, + 7699: 0x00006DD9, + 7700: 0x00006DB2, + 7701: 0x00006DE1, + 7702: 0x00006DCC, + 7703: 0x00006DE4, + 7704: 0x00006DFB, + 7705: 0x00006DFA, + 7706: 0x00006E05, + 7707: 0x00006DC7, + 7708: 0x00006DCB, + 7709: 0x00006DAF, + 7710: 0x00006DD1, + 7711: 0x00006DAE, + 7712: 0x00006DDE, + 7713: 0x00006DF9, + 7714: 0x00006DB8, + 7715: 0x00006DF7, + 7716: 0x00006DF5, + 7717: 0x00006DC5, + 7718: 0x00006DD2, + 7719: 0x00006E1A, + 7720: 0x00006DB5, + 7721: 0x00006DDA, + 7722: 0x00006DEB, + 7723: 0x00006DD8, + 7724: 0x00006DEA, + 7725: 0x00006DF1, + 7726: 0x00006DEE, + 7727: 0x00006DE8, + 7728: 0x00006DC6, + 7729: 0x00006DC4, + 7730: 0x00006DAA, + 7731: 0x00006DEC, + 7732: 0x00006DBF, + 7733: 0x00006DE6, + 7734: 0x000070F9, + 7735: 0x00007109, + 7736: 0x0000710A, + 7737: 0x000070FD, + 7738: 0x000070EF, + 7739: 0x0000723D, + 7740: 0x0000727D, + 7741: 0x00007281, + 7742: 0x0000731C, + 7743: 0x0000731B, + 7744: 0x00007316, + 7745: 0x00007313, + 7746: 0x00007319, + 7747: 0x00007387, + 7748: 0x00007405, + 7749: 0x0000740A, + 7750: 0x00007403, + 7751: 0x00007406, + 7752: 0x000073FE, + 7753: 0x0000740D, + 7754: 0x000074E0, + 7755: 0x000074F6, + 7756: 0x000074F7, + 7757: 0x0000751C, + 7758: 0x00007522, + 7759: 0x00007565, + 7760: 0x00007566, + 7761: 0x00007562, + 7762: 0x00007570, + 7763: 0x0000758F, + 7764: 0x000075D4, + 7765: 0x000075D5, + 7766: 0x000075B5, + 7767: 0x000075CA, + 7768: 0x000075CD, + 7769: 0x0000768E, + 7770: 0x000076D4, + 7771: 0x000076D2, + 7772: 0x000076DB, + 7773: 0x00007737, + 7774: 0x0000773E, + 7775: 0x0000773C, + 7776: 0x00007736, + 7777: 0x00007738, + 7778: 0x0000773A, + 7779: 0x0000786B, + 7780: 0x00007843, + 7781: 0x0000784E, + 7782: 0x00007965, + 7783: 0x00007968, + 7784: 0x0000796D, + 7785: 0x000079FB, + 7786: 0x00007A92, + 7787: 0x00007A95, + 7788: 0x00007B20, + 7789: 0x00007B28, + 7790: 0x00007B1B, + 7791: 0x00007B2C, + 7792: 0x00007B26, + 7793: 0x00007B19, + 7794: 0x00007B1E, + 7795: 0x00007B2E, + 7796: 0x00007C92, + 7797: 0x00007C97, + 7798: 0x00007C95, + 7799: 0x00007D46, + 7800: 0x00007D43, + 7801: 0x00007D71, + 7802: 0x00007D2E, + 7803: 0x00007D39, + 7804: 0x00007D3C, + 7805: 0x00007D40, + 7806: 0x00007D30, + 7807: 0x00007D33, + 7808: 0x00007D44, + 7809: 0x00007D2F, + 7810: 0x00007D42, + 7811: 0x00007D32, + 7812: 0x00007D31, + 7813: 0x00007F3D, + 7814: 0x00007F9E, + 7815: 0x00007F9A, + 7816: 0x00007FCC, + 7817: 0x00007FCE, + 7818: 0x00007FD2, + 7819: 0x0000801C, + 7820: 0x0000804A, + 7821: 0x00008046, + 7822: 0x0000812F, + 7823: 0x00008116, + 7824: 0x00008123, + 7825: 0x0000812B, + 7826: 0x00008129, + 7827: 0x00008130, + 7828: 0x00008124, + 7829: 0x00008202, + 7830: 0x00008235, + 7831: 0x00008237, + 7832: 0x00008236, + 7833: 0x00008239, + 7834: 0x0000838E, + 7835: 0x0000839E, + 7836: 0x00008398, + 7837: 0x00008378, + 7838: 0x000083A2, + 7839: 0x00008396, + 7840: 0x000083BD, + 7841: 0x000083AB, + 7842: 0x00008392, + 7843: 0x0000838A, + 7844: 0x00008393, + 7845: 0x00008389, + 7846: 0x000083A0, + 7847: 0x00008377, + 7848: 0x0000837B, + 7849: 0x0000837C, + 7850: 0x00008386, + 7851: 0x000083A7, + 7852: 0x00008655, + 7853: 0x00005F6A, + 7854: 0x000086C7, + 7855: 0x000086C0, + 7856: 0x000086B6, + 7857: 0x000086C4, + 7858: 0x000086B5, + 7859: 0x000086C6, + 7860: 0x000086CB, + 7861: 0x000086B1, + 7862: 0x000086AF, + 7863: 0x000086C9, + 7864: 0x00008853, + 7865: 0x0000889E, + 7866: 0x00008888, + 7867: 0x000088AB, + 7868: 0x00008892, + 7869: 0x00008896, + 7870: 0x0000888D, + 7871: 0x0000888B, + 7872: 0x00008993, + 7873: 0x0000898F, + 7874: 0x00008A2A, + 7875: 0x00008A1D, + 7876: 0x00008A23, + 7877: 0x00008A25, + 7878: 0x00008A31, + 7879: 0x00008A2D, + 7880: 0x00008A1F, + 7881: 0x00008A1B, + 7882: 0x00008A22, + 7883: 0x00008C49, + 7884: 0x00008C5A, + 7885: 0x00008CA9, + 7886: 0x00008CAC, + 7887: 0x00008CAB, + 7888: 0x00008CA8, + 7889: 0x00008CAA, + 7890: 0x00008CA7, + 7891: 0x00008D67, + 7892: 0x00008D66, + 7893: 0x00008DBE, + 7894: 0x00008DBA, + 7895: 0x00008EDB, + 7896: 0x00008EDF, + 7897: 0x00009019, + 7898: 0x0000900D, + 7899: 0x0000901A, + 7900: 0x00009017, + 7901: 0x00009023, + 7902: 0x0000901F, + 7903: 0x0000901D, + 7904: 0x00009010, + 7905: 0x00009015, + 7906: 0x0000901E, + 7907: 0x00009020, + 7908: 0x0000900F, + 7909: 0x00009022, + 7910: 0x00009016, + 7911: 0x0000901B, + 7912: 0x00009014, + 7913: 0x000090E8, + 7914: 0x000090ED, + 7915: 0x000090FD, + 7916: 0x00009157, + 7917: 0x000091CE, + 7918: 0x000091F5, + 7919: 0x000091E6, + 7920: 0x000091E3, + 7921: 0x000091E7, + 7922: 0x000091ED, + 7923: 0x000091E9, + 7924: 0x00009589, + 7925: 0x0000966A, + 7926: 0x00009675, + 7927: 0x00009673, + 7928: 0x00009678, + 7929: 0x00009670, + 7930: 0x00009674, + 7931: 0x00009676, + 7932: 0x00009677, + 7933: 0x0000966C, + 7934: 0x000096C0, + 7935: 0x000096EA, + 7936: 0x000096E9, + 7937: 0x00007AE0, + 7938: 0x00007ADF, + 7939: 0x00009802, + 7940: 0x00009803, + 7941: 0x00009B5A, + 7942: 0x00009CE5, + 7943: 0x00009E75, + 7944: 0x00009E7F, + 7945: 0x00009EA5, + 7946: 0x00009EBB, + 7947: 0x000050A2, + 7948: 0x0000508D, + 7949: 0x00005085, + 7950: 0x00005099, + 7951: 0x00005091, + 7952: 0x00005080, + 7953: 0x00005096, + 7954: 0x00005098, + 7955: 0x0000509A, + 7956: 0x00006700, + 7957: 0x000051F1, + 7958: 0x00005272, + 7959: 0x00005274, + 7960: 0x00005275, + 7961: 0x00005269, + 7962: 0x000052DE, + 7963: 0x000052DD, + 7964: 0x000052DB, + 7965: 0x0000535A, + 7966: 0x000053A5, + 7967: 0x0000557B, + 7968: 0x00005580, + 7969: 0x000055A7, + 7970: 0x0000557C, + 7971: 0x0000558A, + 7972: 0x0000559D, + 7973: 0x00005598, + 7974: 0x00005582, + 7975: 0x0000559C, + 7976: 0x000055AA, + 7977: 0x00005594, + 7978: 0x00005587, + 7979: 0x0000558B, + 7980: 0x00005583, + 7981: 0x000055B3, + 7982: 0x000055AE, + 7983: 0x0000559F, + 7984: 0x0000553E, + 7985: 0x000055B2, + 7986: 0x0000559A, + 7987: 0x000055BB, + 7988: 0x000055AC, + 7989: 0x000055B1, + 7990: 0x0000557E, + 7991: 0x00005589, + 7992: 0x000055AB, + 7993: 0x00005599, + 7994: 0x0000570D, + 7995: 0x0000582F, + 7996: 0x0000582A, + 7997: 0x00005834, + 7998: 0x00005824, + 7999: 0x00005830, + 8000: 0x00005831, + 8001: 0x00005821, + 8002: 0x0000581D, + 8003: 0x00005820, + 8004: 0x000058F9, + 8005: 0x000058FA, + 8006: 0x00005960, + 8007: 0x00005A77, + 8008: 0x00005A9A, + 8009: 0x00005A7F, + 8010: 0x00005A92, + 8011: 0x00005A9B, + 8012: 0x00005AA7, + 8013: 0x00005B73, + 8014: 0x00005B71, + 8015: 0x00005BD2, + 8016: 0x00005BCC, + 8017: 0x00005BD3, + 8018: 0x00005BD0, + 8019: 0x00005C0A, + 8020: 0x00005C0B, + 8021: 0x00005C31, + 8022: 0x00005D4C, + 8023: 0x00005D50, + 8024: 0x00005D34, + 8025: 0x00005D47, + 8026: 0x00005DFD, + 8027: 0x00005E45, + 8028: 0x00005E3D, + 8029: 0x00005E40, + 8030: 0x00005E43, + 8031: 0x00005E7E, + 8032: 0x00005ECA, + 8033: 0x00005EC1, + 8034: 0x00005EC2, + 8035: 0x00005EC4, + 8036: 0x00005F3C, + 8037: 0x00005F6D, + 8038: 0x00005FA9, + 8039: 0x00005FAA, + 8040: 0x00005FA8, + 8041: 0x000060D1, + 8042: 0x000060E1, + 8043: 0x000060B2, + 8044: 0x000060B6, + 8045: 0x000060E0, + 8046: 0x0000611C, + 8047: 0x00006123, + 8048: 0x000060FA, + 8049: 0x00006115, + 8050: 0x000060F0, + 8051: 0x000060FB, + 8052: 0x000060F4, + 8053: 0x00006168, + 8054: 0x000060F1, + 8055: 0x0000610E, + 8056: 0x000060F6, + 8057: 0x00006109, + 8058: 0x00006100, + 8059: 0x00006112, + 8060: 0x0000621F, + 8061: 0x00006249, + 8062: 0x000063A3, + 8063: 0x0000638C, + 8064: 0x000063CF, + 8065: 0x000063C0, + 8066: 0x000063E9, + 8067: 0x000063C9, + 8068: 0x000063C6, + 8069: 0x000063CD, + 8070: 0x000063D2, + 8071: 0x000063E3, + 8072: 0x000063D0, + 8073: 0x000063E1, + 8074: 0x000063D6, + 8075: 0x000063ED, + 8076: 0x000063EE, + 8077: 0x00006376, + 8078: 0x000063F4, + 8079: 0x000063EA, + 8080: 0x000063DB, + 8081: 0x00006452, + 8082: 0x000063DA, + 8083: 0x000063F9, + 8084: 0x0000655E, + 8085: 0x00006566, + 8086: 0x00006562, + 8087: 0x00006563, + 8088: 0x00006591, + 8089: 0x00006590, + 8090: 0x000065AF, + 8091: 0x0000666E, + 8092: 0x00006670, + 8093: 0x00006674, + 8094: 0x00006676, + 8095: 0x0000666F, + 8096: 0x00006691, + 8097: 0x0000667A, + 8098: 0x0000667E, + 8099: 0x00006677, + 8100: 0x000066FE, + 8101: 0x000066FF, + 8102: 0x0000671F, + 8103: 0x0000671D, + 8104: 0x000068FA, + 8105: 0x000068D5, + 8106: 0x000068E0, + 8107: 0x000068D8, + 8108: 0x000068D7, + 8109: 0x00006905, + 8110: 0x000068DF, + 8111: 0x000068F5, + 8112: 0x000068EE, + 8113: 0x000068E7, + 8114: 0x000068F9, + 8115: 0x000068D2, + 8116: 0x000068F2, + 8117: 0x000068E3, + 8118: 0x000068CB, + 8119: 0x000068CD, + 8120: 0x0000690D, + 8121: 0x00006912, + 8122: 0x0000690E, + 8123: 0x000068C9, + 8124: 0x000068DA, + 8125: 0x0000696E, + 8126: 0x000068FB, + 8127: 0x00006B3E, + 8128: 0x00006B3A, + 8129: 0x00006B3D, + 8130: 0x00006B98, + 8131: 0x00006B96, + 8132: 0x00006BBC, + 8133: 0x00006BEF, + 8134: 0x00006C2E, + 8135: 0x00006C2F, + 8136: 0x00006C2C, + 8137: 0x00006E2F, + 8138: 0x00006E38, + 8139: 0x00006E54, + 8140: 0x00006E21, + 8141: 0x00006E32, + 8142: 0x00006E67, + 8143: 0x00006E4A, + 8144: 0x00006E20, + 8145: 0x00006E25, + 8146: 0x00006E23, + 8147: 0x00006E1B, + 8148: 0x00006E5B, + 8149: 0x00006E58, + 8150: 0x00006E24, + 8151: 0x00006E56, + 8152: 0x00006E6E, + 8153: 0x00006E2D, + 8154: 0x00006E26, + 8155: 0x00006E6F, + 8156: 0x00006E34, + 8157: 0x00006E4D, + 8158: 0x00006E3A, + 8159: 0x00006E2C, + 8160: 0x00006E43, + 8161: 0x00006E1D, + 8162: 0x00006E3E, + 8163: 0x00006ECB, + 8164: 0x00006E89, + 8165: 0x00006E19, + 8166: 0x00006E4E, + 8167: 0x00006E63, + 8168: 0x00006E44, + 8169: 0x00006E72, + 8170: 0x00006E69, + 8171: 0x00006E5F, + 8172: 0x00007119, + 8173: 0x0000711A, + 8174: 0x00007126, + 8175: 0x00007130, + 8176: 0x00007121, + 8177: 0x00007136, + 8178: 0x0000716E, + 8179: 0x0000711C, + 8180: 0x0000724C, + 8181: 0x00007284, + 8182: 0x00007280, + 8183: 0x00007336, + 8184: 0x00007325, + 8185: 0x00007334, + 8186: 0x00007329, + 8187: 0x0000743A, + 8188: 0x0000742A, + 8189: 0x00007433, + 8190: 0x00007422, + 8191: 0x00007425, + 8192: 0x00007435, + 8193: 0x00007436, + 8194: 0x00007434, + 8195: 0x0000742F, + 8196: 0x0000741B, + 8197: 0x00007426, + 8198: 0x00007428, + 8199: 0x00007525, + 8200: 0x00007526, + 8201: 0x0000756B, + 8202: 0x0000756A, + 8203: 0x000075E2, + 8204: 0x000075DB, + 8205: 0x000075E3, + 8206: 0x000075D9, + 8207: 0x000075D8, + 8208: 0x000075DE, + 8209: 0x000075E0, + 8210: 0x0000767B, + 8211: 0x0000767C, + 8212: 0x00007696, + 8213: 0x00007693, + 8214: 0x000076B4, + 8215: 0x000076DC, + 8216: 0x0000774F, + 8217: 0x000077ED, + 8218: 0x0000785D, + 8219: 0x0000786C, + 8220: 0x0000786F, + 8221: 0x00007A0D, + 8222: 0x00007A08, + 8223: 0x00007A0B, + 8224: 0x00007A05, + 8225: 0x00007A00, + 8226: 0x00007A98, + 8227: 0x00007A97, + 8228: 0x00007A96, + 8229: 0x00007AE5, + 8230: 0x00007AE3, + 8231: 0x00007B49, + 8232: 0x00007B56, + 8233: 0x00007B46, + 8234: 0x00007B50, + 8235: 0x00007B52, + 8236: 0x00007B54, + 8237: 0x00007B4D, + 8238: 0x00007B4B, + 8239: 0x00007B4F, + 8240: 0x00007B51, + 8241: 0x00007C9F, + 8242: 0x00007CA5, + 8243: 0x00007D5E, + 8244: 0x00007D50, + 8245: 0x00007D68, + 8246: 0x00007D55, + 8247: 0x00007D2B, + 8248: 0x00007D6E, + 8249: 0x00007D72, + 8250: 0x00007D61, + 8251: 0x00007D66, + 8252: 0x00007D62, + 8253: 0x00007D70, + 8254: 0x00007D73, + 8255: 0x00005584, + 8256: 0x00007FD4, + 8257: 0x00007FD5, + 8258: 0x0000800B, + 8259: 0x00008052, + 8260: 0x00008085, + 8261: 0x00008155, + 8262: 0x00008154, + 8263: 0x0000814B, + 8264: 0x00008151, + 8265: 0x0000814E, + 8266: 0x00008139, + 8267: 0x00008146, + 8268: 0x0000813E, + 8269: 0x0000814C, + 8270: 0x00008153, + 8271: 0x00008174, + 8272: 0x00008212, + 8273: 0x0000821C, + 8274: 0x000083E9, + 8275: 0x00008403, + 8276: 0x000083F8, + 8277: 0x0000840D, + 8278: 0x000083E0, + 8279: 0x000083C5, + 8280: 0x0000840B, + 8281: 0x000083C1, + 8282: 0x000083EF, + 8283: 0x000083F1, + 8284: 0x000083F4, + 8285: 0x00008457, + 8286: 0x0000840A, + 8287: 0x000083F0, + 8288: 0x0000840C, + 8289: 0x000083CC, + 8290: 0x000083FD, + 8291: 0x000083F2, + 8292: 0x000083CA, + 8293: 0x00008438, + 8294: 0x0000840E, + 8295: 0x00008404, + 8296: 0x000083DC, + 8297: 0x00008407, + 8298: 0x000083D4, + 8299: 0x000083DF, + 8300: 0x0000865B, + 8301: 0x000086DF, + 8302: 0x000086D9, + 8303: 0x000086ED, + 8304: 0x000086D4, + 8305: 0x000086DB, + 8306: 0x000086E4, + 8307: 0x000086D0, + 8308: 0x000086DE, + 8309: 0x00008857, + 8310: 0x000088C1, + 8311: 0x000088C2, + 8312: 0x000088B1, + 8313: 0x00008983, + 8314: 0x00008996, + 8315: 0x00008A3B, + 8316: 0x00008A60, + 8317: 0x00008A55, + 8318: 0x00008A5E, + 8319: 0x00008A3C, + 8320: 0x00008A41, + 8321: 0x00008A54, + 8322: 0x00008A5B, + 8323: 0x00008A50, + 8324: 0x00008A46, + 8325: 0x00008A34, + 8326: 0x00008A3A, + 8327: 0x00008A36, + 8328: 0x00008A56, + 8329: 0x00008C61, + 8330: 0x00008C82, + 8331: 0x00008CAF, + 8332: 0x00008CBC, + 8333: 0x00008CB3, + 8334: 0x00008CBD, + 8335: 0x00008CC1, + 8336: 0x00008CBB, + 8337: 0x00008CC0, + 8338: 0x00008CB4, + 8339: 0x00008CB7, + 8340: 0x00008CB6, + 8341: 0x00008CBF, + 8342: 0x00008CB8, + 8343: 0x00008D8A, + 8344: 0x00008D85, + 8345: 0x00008D81, + 8346: 0x00008DCE, + 8347: 0x00008DDD, + 8348: 0x00008DCB, + 8349: 0x00008DDA, + 8350: 0x00008DD1, + 8351: 0x00008DCC, + 8352: 0x00008DDB, + 8353: 0x00008DC6, + 8354: 0x00008EFB, + 8355: 0x00008EF8, + 8356: 0x00008EFC, + 8357: 0x00008F9C, + 8358: 0x0000902E, + 8359: 0x00009035, + 8360: 0x00009031, + 8361: 0x00009038, + 8362: 0x00009032, + 8363: 0x00009036, + 8364: 0x00009102, + 8365: 0x000090F5, + 8366: 0x00009109, + 8367: 0x000090FE, + 8368: 0x00009163, + 8369: 0x00009165, + 8370: 0x000091CF, + 8371: 0x00009214, + 8372: 0x00009215, + 8373: 0x00009223, + 8374: 0x00009209, + 8375: 0x0000921E, + 8376: 0x0000920D, + 8377: 0x00009210, + 8378: 0x00009207, + 8379: 0x00009211, + 8380: 0x00009594, + 8381: 0x0000958F, + 8382: 0x0000958B, + 8383: 0x00009591, + 8384: 0x00009593, + 8385: 0x00009592, + 8386: 0x0000958E, + 8387: 0x0000968A, + 8388: 0x0000968E, + 8389: 0x0000968B, + 8390: 0x0000967D, + 8391: 0x00009685, + 8392: 0x00009686, + 8393: 0x0000968D, + 8394: 0x00009672, + 8395: 0x00009684, + 8396: 0x000096C1, + 8397: 0x000096C5, + 8398: 0x000096C4, + 8399: 0x000096C6, + 8400: 0x000096C7, + 8401: 0x000096EF, + 8402: 0x000096F2, + 8403: 0x000097CC, + 8404: 0x00009805, + 8405: 0x00009806, + 8406: 0x00009808, + 8407: 0x000098E7, + 8408: 0x000098EA, + 8409: 0x000098EF, + 8410: 0x000098E9, + 8411: 0x000098F2, + 8412: 0x000098ED, + 8413: 0x000099AE, + 8414: 0x000099AD, + 8415: 0x00009EC3, + 8416: 0x00009ECD, + 8417: 0x00009ED1, + 8418: 0x00004E82, + 8419: 0x000050AD, + 8420: 0x000050B5, + 8421: 0x000050B2, + 8422: 0x000050B3, + 8423: 0x000050C5, + 8424: 0x000050BE, + 8425: 0x000050AC, + 8426: 0x000050B7, + 8427: 0x000050BB, + 8428: 0x000050AF, + 8429: 0x000050C7, + 8430: 0x0000527F, + 8431: 0x00005277, + 8432: 0x0000527D, + 8433: 0x000052DF, + 8434: 0x000052E6, + 8435: 0x000052E4, + 8436: 0x000052E2, + 8437: 0x000052E3, + 8438: 0x0000532F, + 8439: 0x000055DF, + 8440: 0x000055E8, + 8441: 0x000055D3, + 8442: 0x000055E6, + 8443: 0x000055CE, + 8444: 0x000055DC, + 8445: 0x000055C7, + 8446: 0x000055D1, + 8447: 0x000055E3, + 8448: 0x000055E4, + 8449: 0x000055EF, + 8450: 0x000055DA, + 8451: 0x000055E1, + 8452: 0x000055C5, + 8453: 0x000055C6, + 8454: 0x000055E5, + 8455: 0x000055C9, + 8456: 0x00005712, + 8457: 0x00005713, + 8458: 0x0000585E, + 8459: 0x00005851, + 8460: 0x00005858, + 8461: 0x00005857, + 8462: 0x0000585A, + 8463: 0x00005854, + 8464: 0x0000586B, + 8465: 0x0000584C, + 8466: 0x0000586D, + 8467: 0x0000584A, + 8468: 0x00005862, + 8469: 0x00005852, + 8470: 0x0000584B, + 8471: 0x00005967, + 8472: 0x00005AC1, + 8473: 0x00005AC9, + 8474: 0x00005ACC, + 8475: 0x00005ABE, + 8476: 0x00005ABD, + 8477: 0x00005ABC, + 8478: 0x00005AB3, + 8479: 0x00005AC2, + 8480: 0x00005AB2, + 8481: 0x00005D69, + 8482: 0x00005D6F, + 8483: 0x00005E4C, + 8484: 0x00005E79, + 8485: 0x00005EC9, + 8486: 0x00005EC8, + 8487: 0x00005F12, + 8488: 0x00005F59, + 8489: 0x00005FAC, + 8490: 0x00005FAE, + 8491: 0x0000611A, + 8492: 0x0000610F, + 8493: 0x00006148, + 8494: 0x0000611F, + 8495: 0x000060F3, + 8496: 0x0000611B, + 8497: 0x000060F9, + 8498: 0x00006101, + 8499: 0x00006108, + 8500: 0x0000614E, + 8501: 0x0000614C, + 8502: 0x00006144, + 8503: 0x0000614D, + 8504: 0x0000613E, + 8505: 0x00006134, + 8506: 0x00006127, + 8507: 0x0000610D, + 8508: 0x00006106, + 8509: 0x00006137, + 8510: 0x00006221, + 8511: 0x00006222, + 8512: 0x00006413, + 8513: 0x0000643E, + 8514: 0x0000641E, + 8515: 0x0000642A, + 8516: 0x0000642D, + 8517: 0x0000643D, + 8518: 0x0000642C, + 8519: 0x0000640F, + 8520: 0x0000641C, + 8521: 0x00006414, + 8522: 0x0000640D, + 8523: 0x00006436, + 8524: 0x00006416, + 8525: 0x00006417, + 8526: 0x00006406, + 8527: 0x0000656C, + 8528: 0x0000659F, + 8529: 0x000065B0, + 8530: 0x00006697, + 8531: 0x00006689, + 8532: 0x00006687, + 8533: 0x00006688, + 8534: 0x00006696, + 8535: 0x00006684, + 8536: 0x00006698, + 8537: 0x0000668D, + 8538: 0x00006703, + 8539: 0x00006994, + 8540: 0x0000696D, + 8541: 0x0000695A, + 8542: 0x00006977, + 8543: 0x00006960, + 8544: 0x00006954, + 8545: 0x00006975, + 8546: 0x00006930, + 8547: 0x00006982, + 8548: 0x0000694A, + 8549: 0x00006968, + 8550: 0x0000696B, + 8551: 0x0000695E, + 8552: 0x00006953, + 8553: 0x00006979, + 8554: 0x00006986, + 8555: 0x0000695D, + 8556: 0x00006963, + 8557: 0x0000695B, + 8558: 0x00006B47, + 8559: 0x00006B72, + 8560: 0x00006BC0, + 8561: 0x00006BBF, + 8562: 0x00006BD3, + 8563: 0x00006BFD, + 8564: 0x00006EA2, + 8565: 0x00006EAF, + 8566: 0x00006ED3, + 8567: 0x00006EB6, + 8568: 0x00006EC2, + 8569: 0x00006E90, + 8570: 0x00006E9D, + 8571: 0x00006EC7, + 8572: 0x00006EC5, + 8573: 0x00006EA5, + 8574: 0x00006E98, + 8575: 0x00006EBC, + 8576: 0x00006EBA, + 8577: 0x00006EAB, + 8578: 0x00006ED1, + 8579: 0x00006E96, + 8580: 0x00006E9C, + 8581: 0x00006EC4, + 8582: 0x00006ED4, + 8583: 0x00006EAA, + 8584: 0x00006EA7, + 8585: 0x00006EB4, + 8586: 0x0000714E, + 8587: 0x00007159, + 8588: 0x00007169, + 8589: 0x00007164, + 8590: 0x00007149, + 8591: 0x00007167, + 8592: 0x0000715C, + 8593: 0x0000716C, + 8594: 0x00007166, + 8595: 0x0000714C, + 8596: 0x00007165, + 8597: 0x0000715E, + 8598: 0x00007146, + 8599: 0x00007168, + 8600: 0x00007156, + 8601: 0x0000723A, + 8602: 0x00007252, + 8603: 0x00007337, + 8604: 0x00007345, + 8605: 0x0000733F, + 8606: 0x0000733E, + 8607: 0x0000746F, + 8608: 0x0000745A, + 8609: 0x00007455, + 8610: 0x0000745F, + 8611: 0x0000745E, + 8612: 0x00007441, + 8613: 0x0000743F, + 8614: 0x00007459, + 8615: 0x0000745B, + 8616: 0x0000745C, + 8617: 0x00007576, + 8618: 0x00007578, + 8619: 0x00007600, + 8620: 0x000075F0, + 8621: 0x00007601, + 8622: 0x000075F2, + 8623: 0x000075F1, + 8624: 0x000075FA, + 8625: 0x000075FF, + 8626: 0x000075F4, + 8627: 0x000075F3, + 8628: 0x000076DE, + 8629: 0x000076DF, + 8630: 0x0000775B, + 8631: 0x0000776B, + 8632: 0x00007766, + 8633: 0x0000775E, + 8634: 0x00007763, + 8635: 0x00007779, + 8636: 0x0000776A, + 8637: 0x0000776C, + 8638: 0x0000775C, + 8639: 0x00007765, + 8640: 0x00007768, + 8641: 0x00007762, + 8642: 0x000077EE, + 8643: 0x0000788E, + 8644: 0x000078B0, + 8645: 0x00007897, + 8646: 0x00007898, + 8647: 0x0000788C, + 8648: 0x00007889, + 8649: 0x0000787C, + 8650: 0x00007891, + 8651: 0x00007893, + 8652: 0x0000787F, + 8653: 0x0000797A, + 8654: 0x0000797F, + 8655: 0x00007981, + 8656: 0x0000842C, + 8657: 0x000079BD, + 8658: 0x00007A1C, + 8659: 0x00007A1A, + 8660: 0x00007A20, + 8661: 0x00007A14, + 8662: 0x00007A1F, + 8663: 0x00007A1E, + 8664: 0x00007A9F, + 8665: 0x00007AA0, + 8666: 0x00007B77, + 8667: 0x00007BC0, + 8668: 0x00007B60, + 8669: 0x00007B6E, + 8670: 0x00007B67, + 8671: 0x00007CB1, + 8672: 0x00007CB3, + 8673: 0x00007CB5, + 8674: 0x00007D93, + 8675: 0x00007D79, + 8676: 0x00007D91, + 8677: 0x00007D81, + 8678: 0x00007D8F, + 8679: 0x00007D5B, + 8680: 0x00007F6E, + 8681: 0x00007F69, + 8682: 0x00007F6A, + 8683: 0x00007F72, + 8684: 0x00007FA9, + 8685: 0x00007FA8, + 8686: 0x00007FA4, + 8687: 0x00008056, + 8688: 0x00008058, + 8689: 0x00008086, + 8690: 0x00008084, + 8691: 0x00008171, + 8692: 0x00008170, + 8693: 0x00008178, + 8694: 0x00008165, + 8695: 0x0000816E, + 8696: 0x00008173, + 8697: 0x0000816B, + 8698: 0x00008179, + 8699: 0x0000817A, + 8700: 0x00008166, + 8701: 0x00008205, + 8702: 0x00008247, + 8703: 0x00008482, + 8704: 0x00008477, + 8705: 0x0000843D, + 8706: 0x00008431, + 8707: 0x00008475, + 8708: 0x00008466, + 8709: 0x0000846B, + 8710: 0x00008449, + 8711: 0x0000846C, + 8712: 0x0000845B, + 8713: 0x0000843C, + 8714: 0x00008435, + 8715: 0x00008461, + 8716: 0x00008463, + 8717: 0x00008469, + 8718: 0x0000846D, + 8719: 0x00008446, + 8720: 0x0000865E, + 8721: 0x0000865C, + 8722: 0x0000865F, + 8723: 0x000086F9, + 8724: 0x00008713, + 8725: 0x00008708, + 8726: 0x00008707, + 8727: 0x00008700, + 8728: 0x000086FE, + 8729: 0x000086FB, + 8730: 0x00008702, + 8731: 0x00008703, + 8732: 0x00008706, + 8733: 0x0000870A, + 8734: 0x00008859, + 8735: 0x000088DF, + 8736: 0x000088D4, + 8737: 0x000088D9, + 8738: 0x000088DC, + 8739: 0x000088D8, + 8740: 0x000088DD, + 8741: 0x000088E1, + 8742: 0x000088CA, + 8743: 0x000088D5, + 8744: 0x000088D2, + 8745: 0x0000899C, + 8746: 0x000089E3, + 8747: 0x00008A6B, + 8748: 0x00008A72, + 8749: 0x00008A73, + 8750: 0x00008A66, + 8751: 0x00008A69, + 8752: 0x00008A70, + 8753: 0x00008A87, + 8754: 0x00008A7C, + 8755: 0x00008A63, + 8756: 0x00008AA0, + 8757: 0x00008A71, + 8758: 0x00008A85, + 8759: 0x00008A6D, + 8760: 0x00008A62, + 8761: 0x00008A6E, + 8762: 0x00008A6C, + 8763: 0x00008A79, + 8764: 0x00008A7B, + 8765: 0x00008A3E, + 8766: 0x00008A68, + 8767: 0x00008C62, + 8768: 0x00008C8A, + 8769: 0x00008C89, + 8770: 0x00008CCA, + 8771: 0x00008CC7, + 8772: 0x00008CC8, + 8773: 0x00008CC4, + 8774: 0x00008CB2, + 8775: 0x00008CC3, + 8776: 0x00008CC2, + 8777: 0x00008CC5, + 8778: 0x00008DE1, + 8779: 0x00008DDF, + 8780: 0x00008DE8, + 8781: 0x00008DEF, + 8782: 0x00008DF3, + 8783: 0x00008DFA, + 8784: 0x00008DEA, + 8785: 0x00008DE4, + 8786: 0x00008DE6, + 8787: 0x00008EB2, + 8788: 0x00008F03, + 8789: 0x00008F09, + 8790: 0x00008EFE, + 8791: 0x00008F0A, + 8792: 0x00008F9F, + 8793: 0x00008FB2, + 8794: 0x0000904B, + 8795: 0x0000904A, + 8796: 0x00009053, + 8797: 0x00009042, + 8798: 0x00009054, + 8799: 0x0000903C, + 8800: 0x00009055, + 8801: 0x00009050, + 8802: 0x00009047, + 8803: 0x0000904F, + 8804: 0x0000904E, + 8805: 0x0000904D, + 8806: 0x00009051, + 8807: 0x0000903E, + 8808: 0x00009041, + 8809: 0x00009112, + 8810: 0x00009117, + 8811: 0x0000916C, + 8812: 0x0000916A, + 8813: 0x00009169, + 8814: 0x000091C9, + 8815: 0x00009237, + 8816: 0x00009257, + 8817: 0x00009238, + 8818: 0x0000923D, + 8819: 0x00009240, + 8820: 0x0000923E, + 8821: 0x0000925B, + 8822: 0x0000924B, + 8823: 0x00009264, + 8824: 0x00009251, + 8825: 0x00009234, + 8826: 0x00009249, + 8827: 0x0000924D, + 8828: 0x00009245, + 8829: 0x00009239, + 8830: 0x0000923F, + 8831: 0x0000925A, + 8832: 0x00009598, + 8833: 0x00009698, + 8834: 0x00009694, + 8835: 0x00009695, + 8836: 0x000096CD, + 8837: 0x000096CB, + 8838: 0x000096C9, + 8839: 0x000096CA, + 8840: 0x000096F7, + 8841: 0x000096FB, + 8842: 0x000096F9, + 8843: 0x000096F6, + 8844: 0x00009756, + 8845: 0x00009774, + 8846: 0x00009776, + 8847: 0x00009810, + 8848: 0x00009811, + 8849: 0x00009813, + 8850: 0x0000980A, + 8851: 0x00009812, + 8852: 0x0000980C, + 8853: 0x000098FC, + 8854: 0x000098F4, + 8855: 0x000098FD, + 8856: 0x000098FE, + 8857: 0x000099B3, + 8858: 0x000099B1, + 8859: 0x000099B4, + 8860: 0x00009AE1, + 8861: 0x00009CE9, + 8862: 0x00009E82, + 8863: 0x00009F0E, + 8864: 0x00009F13, + 8865: 0x00009F20, + 8866: 0x000050E7, + 8867: 0x000050EE, + 8868: 0x000050E5, + 8869: 0x000050D6, + 8870: 0x000050ED, + 8871: 0x000050DA, + 8872: 0x000050D5, + 8873: 0x000050CF, + 8874: 0x000050D1, + 8875: 0x000050F1, + 8876: 0x000050CE, + 8877: 0x000050E9, + 8878: 0x00005162, + 8879: 0x000051F3, + 8880: 0x00005283, + 8881: 0x00005282, + 8882: 0x00005331, + 8883: 0x000053AD, + 8884: 0x000055FE, + 8885: 0x00005600, + 8886: 0x0000561B, + 8887: 0x00005617, + 8888: 0x000055FD, + 8889: 0x00005614, + 8890: 0x00005606, + 8891: 0x00005609, + 8892: 0x0000560D, + 8893: 0x0000560E, + 8894: 0x000055F7, + 8895: 0x00005616, + 8896: 0x0000561F, + 8897: 0x00005608, + 8898: 0x00005610, + 8899: 0x000055F6, + 8900: 0x00005718, + 8901: 0x00005716, + 8902: 0x00005875, + 8903: 0x0000587E, + 8904: 0x00005883, + 8905: 0x00005893, + 8906: 0x0000588A, + 8907: 0x00005879, + 8908: 0x00005885, + 8909: 0x0000587D, + 8910: 0x000058FD, + 8911: 0x00005925, + 8912: 0x00005922, + 8913: 0x00005924, + 8914: 0x0000596A, + 8915: 0x00005969, + 8916: 0x00005AE1, + 8917: 0x00005AE6, + 8918: 0x00005AE9, + 8919: 0x00005AD7, + 8920: 0x00005AD6, + 8921: 0x00005AD8, + 8922: 0x00005AE3, + 8923: 0x00005B75, + 8924: 0x00005BDE, + 8925: 0x00005BE7, + 8926: 0x00005BE1, + 8927: 0x00005BE5, + 8928: 0x00005BE6, + 8929: 0x00005BE8, + 8930: 0x00005BE2, + 8931: 0x00005BE4, + 8932: 0x00005BDF, + 8933: 0x00005C0D, + 8934: 0x00005C62, + 8935: 0x00005D84, + 8936: 0x00005D87, + 8937: 0x00005E5B, + 8938: 0x00005E63, + 8939: 0x00005E55, + 8940: 0x00005E57, + 8941: 0x00005E54, + 8942: 0x00005ED3, + 8943: 0x00005ED6, + 8944: 0x00005F0A, + 8945: 0x00005F46, + 8946: 0x00005F70, + 8947: 0x00005FB9, + 8948: 0x00006147, + 8949: 0x0000613F, + 8950: 0x0000614B, + 8951: 0x00006177, + 8952: 0x00006162, + 8953: 0x00006163, + 8954: 0x0000615F, + 8955: 0x0000615A, + 8956: 0x00006158, + 8957: 0x00006175, + 8958: 0x0000622A, + 8959: 0x00006487, + 8960: 0x00006458, + 8961: 0x00006454, + 8962: 0x000064A4, + 8963: 0x00006478, + 8964: 0x0000645F, + 8965: 0x0000647A, + 8966: 0x00006451, + 8967: 0x00006467, + 8968: 0x00006434, + 8969: 0x0000646D, + 8970: 0x0000647B, + 8971: 0x00006572, + 8972: 0x000065A1, + 8973: 0x000065D7, + 8974: 0x000065D6, + 8975: 0x000066A2, + 8976: 0x000066A8, + 8977: 0x0000669D, + 8978: 0x0000699C, + 8979: 0x000069A8, + 8980: 0x00006995, + 8981: 0x000069C1, + 8982: 0x000069AE, + 8983: 0x000069D3, + 8984: 0x000069CB, + 8985: 0x0000699B, + 8986: 0x000069B7, + 8987: 0x000069BB, + 8988: 0x000069AB, + 8989: 0x000069B4, + 8990: 0x000069D0, + 8991: 0x000069CD, + 8992: 0x000069AD, + 8993: 0x000069CC, + 8994: 0x000069A6, + 8995: 0x000069C3, + 8996: 0x000069A3, + 8997: 0x00006B49, + 8998: 0x00006B4C, + 8999: 0x00006C33, + 9000: 0x00006F33, + 9001: 0x00006F14, + 9002: 0x00006EFE, + 9003: 0x00006F13, + 9004: 0x00006EF4, + 9005: 0x00006F29, + 9006: 0x00006F3E, + 9007: 0x00006F20, + 9008: 0x00006F2C, + 9009: 0x00006F0F, + 9010: 0x00006F02, + 9011: 0x00006F22, + 9012: 0x00006EFF, + 9013: 0x00006EEF, + 9014: 0x00006F06, + 9015: 0x00006F31, + 9016: 0x00006F38, + 9017: 0x00006F32, + 9018: 0x00006F23, + 9019: 0x00006F15, + 9020: 0x00006F2B, + 9021: 0x00006F2F, + 9022: 0x00006F88, + 9023: 0x00006F2A, + 9024: 0x00006EEC, + 9025: 0x00006F01, + 9026: 0x00006EF2, + 9027: 0x00006ECC, + 9028: 0x00006EF7, + 9029: 0x00007194, + 9030: 0x00007199, + 9031: 0x0000717D, + 9032: 0x0000718A, + 9033: 0x00007184, + 9034: 0x00007192, + 9035: 0x0000723E, + 9036: 0x00007292, + 9037: 0x00007296, + 9038: 0x00007344, + 9039: 0x00007350, + 9040: 0x00007464, + 9041: 0x00007463, + 9042: 0x0000746A, + 9043: 0x00007470, + 9044: 0x0000746D, + 9045: 0x00007504, + 9046: 0x00007591, + 9047: 0x00007627, + 9048: 0x0000760D, + 9049: 0x0000760B, + 9050: 0x00007609, + 9051: 0x00007613, + 9052: 0x000076E1, + 9053: 0x000076E3, + 9054: 0x00007784, + 9055: 0x0000777D, + 9056: 0x0000777F, + 9057: 0x00007761, + 9058: 0x000078C1, + 9059: 0x0000789F, + 9060: 0x000078A7, + 9061: 0x000078B3, + 9062: 0x000078A9, + 9063: 0x000078A3, + 9064: 0x0000798E, + 9065: 0x0000798F, + 9066: 0x0000798D, + 9067: 0x00007A2E, + 9068: 0x00007A31, + 9069: 0x00007AAA, + 9070: 0x00007AA9, + 9071: 0x00007AED, + 9072: 0x00007AEF, + 9073: 0x00007BA1, + 9074: 0x00007B95, + 9075: 0x00007B8B, + 9076: 0x00007B75, + 9077: 0x00007B97, + 9078: 0x00007B9D, + 9079: 0x00007B94, + 9080: 0x00007B8F, + 9081: 0x00007BB8, + 9082: 0x00007B87, + 9083: 0x00007B84, + 9084: 0x00007CB9, + 9085: 0x00007CBD, + 9086: 0x00007CBE, + 9087: 0x00007DBB, + 9088: 0x00007DB0, + 9089: 0x00007D9C, + 9090: 0x00007DBD, + 9091: 0x00007DBE, + 9092: 0x00007DA0, + 9093: 0x00007DCA, + 9094: 0x00007DB4, + 9095: 0x00007DB2, + 9096: 0x00007DB1, + 9097: 0x00007DBA, + 9098: 0x00007DA2, + 9099: 0x00007DBF, + 9100: 0x00007DB5, + 9101: 0x00007DB8, + 9102: 0x00007DAD, + 9103: 0x00007DD2, + 9104: 0x00007DC7, + 9105: 0x00007DAC, + 9106: 0x00007F70, + 9107: 0x00007FE0, + 9108: 0x00007FE1, + 9109: 0x00007FDF, + 9110: 0x0000805E, + 9111: 0x0000805A, + 9112: 0x00008087, + 9113: 0x00008150, + 9114: 0x00008180, + 9115: 0x0000818F, + 9116: 0x00008188, + 9117: 0x0000818A, + 9118: 0x0000817F, + 9119: 0x00008182, + 9120: 0x000081E7, + 9121: 0x000081FA, + 9122: 0x00008207, + 9123: 0x00008214, + 9124: 0x0000821E, + 9125: 0x0000824B, + 9126: 0x000084C9, + 9127: 0x000084BF, + 9128: 0x000084C6, + 9129: 0x000084C4, + 9130: 0x00008499, + 9131: 0x0000849E, + 9132: 0x000084B2, + 9133: 0x0000849C, + 9134: 0x000084CB, + 9135: 0x000084B8, + 9136: 0x000084C0, + 9137: 0x000084D3, + 9138: 0x00008490, + 9139: 0x000084BC, + 9140: 0x000084D1, + 9141: 0x000084CA, + 9142: 0x0000873F, + 9143: 0x0000871C, + 9144: 0x0000873B, + 9145: 0x00008722, + 9146: 0x00008725, + 9147: 0x00008734, + 9148: 0x00008718, + 9149: 0x00008755, + 9150: 0x00008737, + 9151: 0x00008729, + 9152: 0x000088F3, + 9153: 0x00008902, + 9154: 0x000088F4, + 9155: 0x000088F9, + 9156: 0x000088F8, + 9157: 0x000088FD, + 9158: 0x000088E8, + 9159: 0x0000891A, + 9160: 0x000088EF, + 9161: 0x00008AA6, + 9162: 0x00008A8C, + 9163: 0x00008A9E, + 9164: 0x00008AA3, + 9165: 0x00008A8D, + 9166: 0x00008AA1, + 9167: 0x00008A93, + 9168: 0x00008AA4, + 9169: 0x00008AAA, + 9170: 0x00008AA5, + 9171: 0x00008AA8, + 9172: 0x00008A98, + 9173: 0x00008A91, + 9174: 0x00008A9A, + 9175: 0x00008AA7, + 9176: 0x00008C6A, + 9177: 0x00008C8D, + 9178: 0x00008C8C, + 9179: 0x00008CD3, + 9180: 0x00008CD1, + 9181: 0x00008CD2, + 9182: 0x00008D6B, + 9183: 0x00008D99, + 9184: 0x00008D95, + 9185: 0x00008DFC, + 9186: 0x00008F14, + 9187: 0x00008F12, + 9188: 0x00008F15, + 9189: 0x00008F13, + 9190: 0x00008FA3, + 9191: 0x00009060, + 9192: 0x00009058, + 9193: 0x0000905C, + 9194: 0x00009063, + 9195: 0x00009059, + 9196: 0x0000905E, + 9197: 0x00009062, + 9198: 0x0000905D, + 9199: 0x0000905B, + 9200: 0x00009119, + 9201: 0x00009118, + 9202: 0x0000911E, + 9203: 0x00009175, + 9204: 0x00009178, + 9205: 0x00009177, + 9206: 0x00009174, + 9207: 0x00009278, + 9208: 0x00009280, + 9209: 0x00009285, + 9210: 0x00009298, + 9211: 0x00009296, + 9212: 0x0000927B, + 9213: 0x00009293, + 9214: 0x0000929C, + 9215: 0x000092A8, + 9216: 0x0000927C, + 9217: 0x00009291, + 9218: 0x000095A1, + 9219: 0x000095A8, + 9220: 0x000095A9, + 9221: 0x000095A3, + 9222: 0x000095A5, + 9223: 0x000095A4, + 9224: 0x00009699, + 9225: 0x0000969C, + 9226: 0x0000969B, + 9227: 0x000096CC, + 9228: 0x000096D2, + 9229: 0x00009700, + 9230: 0x0000977C, + 9231: 0x00009785, + 9232: 0x000097F6, + 9233: 0x00009817, + 9234: 0x00009818, + 9235: 0x000098AF, + 9236: 0x000098B1, + 9237: 0x00009903, + 9238: 0x00009905, + 9239: 0x0000990C, + 9240: 0x00009909, + 9241: 0x000099C1, + 9242: 0x00009AAF, + 9243: 0x00009AB0, + 9244: 0x00009AE6, + 9245: 0x00009B41, + 9246: 0x00009B42, + 9247: 0x00009CF4, + 9248: 0x00009CF6, + 9249: 0x00009CF3, + 9250: 0x00009EBC, + 9251: 0x00009F3B, + 9252: 0x00009F4A, + 9253: 0x00005104, + 9254: 0x00005100, + 9255: 0x000050FB, + 9256: 0x000050F5, + 9257: 0x000050F9, + 9258: 0x00005102, + 9259: 0x00005108, + 9260: 0x00005109, + 9261: 0x00005105, + 9262: 0x000051DC, + 9263: 0x00005287, + 9264: 0x00005288, + 9265: 0x00005289, + 9266: 0x0000528D, + 9267: 0x0000528A, + 9268: 0x000052F0, + 9269: 0x000053B2, + 9270: 0x0000562E, + 9271: 0x0000563B, + 9272: 0x00005639, + 9273: 0x00005632, + 9274: 0x0000563F, + 9275: 0x00005634, + 9276: 0x00005629, + 9277: 0x00005653, + 9278: 0x0000564E, + 9279: 0x00005657, + 9280: 0x00005674, + 9281: 0x00005636, + 9282: 0x0000562F, + 9283: 0x00005630, + 9284: 0x00005880, + 9285: 0x0000589F, + 9286: 0x0000589E, + 9287: 0x000058B3, + 9288: 0x0000589C, + 9289: 0x000058AE, + 9290: 0x000058A9, + 9291: 0x000058A6, + 9292: 0x0000596D, + 9293: 0x00005B09, + 9294: 0x00005AFB, + 9295: 0x00005B0B, + 9296: 0x00005AF5, + 9297: 0x00005B0C, + 9298: 0x00005B08, + 9299: 0x00005BEE, + 9300: 0x00005BEC, + 9301: 0x00005BE9, + 9302: 0x00005BEB, + 9303: 0x00005C64, + 9304: 0x00005C65, + 9305: 0x00005D9D, + 9306: 0x00005D94, + 9307: 0x00005E62, + 9308: 0x00005E5F, + 9309: 0x00005E61, + 9310: 0x00005EE2, + 9311: 0x00005EDA, + 9312: 0x00005EDF, + 9313: 0x00005EDD, + 9314: 0x00005EE3, + 9315: 0x00005EE0, + 9316: 0x00005F48, + 9317: 0x00005F71, + 9318: 0x00005FB7, + 9319: 0x00005FB5, + 9320: 0x00006176, + 9321: 0x00006167, + 9322: 0x0000616E, + 9323: 0x0000615D, + 9324: 0x00006155, + 9325: 0x00006182, + 9326: 0x0000617C, + 9327: 0x00006170, + 9328: 0x0000616B, + 9329: 0x0000617E, + 9330: 0x000061A7, + 9331: 0x00006190, + 9332: 0x000061AB, + 9333: 0x0000618E, + 9334: 0x000061AC, + 9335: 0x0000619A, + 9336: 0x000061A4, + 9337: 0x00006194, + 9338: 0x000061AE, + 9339: 0x0000622E, + 9340: 0x00006469, + 9341: 0x0000646F, + 9342: 0x00006479, + 9343: 0x0000649E, + 9344: 0x000064B2, + 9345: 0x00006488, + 9346: 0x00006490, + 9347: 0x000064B0, + 9348: 0x000064A5, + 9349: 0x00006493, + 9350: 0x00006495, + 9351: 0x000064A9, + 9352: 0x00006492, + 9353: 0x000064AE, + 9354: 0x000064AD, + 9355: 0x000064AB, + 9356: 0x0000649A, + 9357: 0x000064AC, + 9358: 0x00006499, + 9359: 0x000064A2, + 9360: 0x000064B3, + 9361: 0x00006575, + 9362: 0x00006577, + 9363: 0x00006578, + 9364: 0x000066AE, + 9365: 0x000066AB, + 9366: 0x000066B4, + 9367: 0x000066B1, + 9368: 0x00006A23, + 9369: 0x00006A1F, + 9370: 0x000069E8, + 9371: 0x00006A01, + 9372: 0x00006A1E, + 9373: 0x00006A19, + 9374: 0x000069FD, + 9375: 0x00006A21, + 9376: 0x00006A13, + 9377: 0x00006A0A, + 9378: 0x000069F3, + 9379: 0x00006A02, + 9380: 0x00006A05, + 9381: 0x000069ED, + 9382: 0x00006A11, + 9383: 0x00006B50, + 9384: 0x00006B4E, + 9385: 0x00006BA4, + 9386: 0x00006BC5, + 9387: 0x00006BC6, + 9388: 0x00006F3F, + 9389: 0x00006F7C, + 9390: 0x00006F84, + 9391: 0x00006F51, + 9392: 0x00006F66, + 9393: 0x00006F54, + 9394: 0x00006F86, + 9395: 0x00006F6D, + 9396: 0x00006F5B, + 9397: 0x00006F78, + 9398: 0x00006F6E, + 9399: 0x00006F8E, + 9400: 0x00006F7A, + 9401: 0x00006F70, + 9402: 0x00006F64, + 9403: 0x00006F97, + 9404: 0x00006F58, + 9405: 0x00006ED5, + 9406: 0x00006F6F, + 9407: 0x00006F60, + 9408: 0x00006F5F, + 9409: 0x0000719F, + 9410: 0x000071AC, + 9411: 0x000071B1, + 9412: 0x000071A8, + 9413: 0x00007256, + 9414: 0x0000729B, + 9415: 0x0000734E, + 9416: 0x00007357, + 9417: 0x00007469, + 9418: 0x0000748B, + 9419: 0x00007483, + 9420: 0x0000747E, + 9421: 0x00007480, + 9422: 0x0000757F, + 9423: 0x00007620, + 9424: 0x00007629, + 9425: 0x0000761F, + 9426: 0x00007624, + 9427: 0x00007626, + 9428: 0x00007621, + 9429: 0x00007622, + 9430: 0x0000769A, + 9431: 0x000076BA, + 9432: 0x000076E4, + 9433: 0x0000778E, + 9434: 0x00007787, + 9435: 0x0000778C, + 9436: 0x00007791, + 9437: 0x0000778B, + 9438: 0x000078CB, + 9439: 0x000078C5, + 9440: 0x000078BA, + 9441: 0x000078CA, + 9442: 0x000078BE, + 9443: 0x000078D5, + 9444: 0x000078BC, + 9445: 0x000078D0, + 9446: 0x00007A3F, + 9447: 0x00007A3C, + 9448: 0x00007A40, + 9449: 0x00007A3D, + 9450: 0x00007A37, + 9451: 0x00007A3B, + 9452: 0x00007AAF, + 9453: 0x00007AAE, + 9454: 0x00007BAD, + 9455: 0x00007BB1, + 9456: 0x00007BC4, + 9457: 0x00007BB4, + 9458: 0x00007BC6, + 9459: 0x00007BC7, + 9460: 0x00007BC1, + 9461: 0x00007BA0, + 9462: 0x00007BCC, + 9463: 0x00007CCA, + 9464: 0x00007DE0, + 9465: 0x00007DF4, + 9466: 0x00007DEF, + 9467: 0x00007DFB, + 9468: 0x00007DD8, + 9469: 0x00007DEC, + 9470: 0x00007DDD, + 9471: 0x00007DE8, + 9472: 0x00007DE3, + 9473: 0x00007DDA, + 9474: 0x00007DDE, + 9475: 0x00007DE9, + 9476: 0x00007D9E, + 9477: 0x00007DD9, + 9478: 0x00007DF2, + 9479: 0x00007DF9, + 9480: 0x00007F75, + 9481: 0x00007F77, + 9482: 0x00007FAF, + 9483: 0x00007FE9, + 9484: 0x00008026, + 9485: 0x0000819B, + 9486: 0x0000819C, + 9487: 0x0000819D, + 9488: 0x000081A0, + 9489: 0x0000819A, + 9490: 0x00008198, + 9491: 0x00008517, + 9492: 0x0000853D, + 9493: 0x0000851A, + 9494: 0x000084EE, + 9495: 0x0000852C, + 9496: 0x0000852D, + 9497: 0x00008513, + 9498: 0x00008511, + 9499: 0x00008523, + 9500: 0x00008521, + 9501: 0x00008514, + 9502: 0x000084EC, + 9503: 0x00008525, + 9504: 0x000084FF, + 9505: 0x00008506, + 9506: 0x00008782, + 9507: 0x00008774, + 9508: 0x00008776, + 9509: 0x00008760, + 9510: 0x00008766, + 9511: 0x00008778, + 9512: 0x00008768, + 9513: 0x00008759, + 9514: 0x00008757, + 9515: 0x0000874C, + 9516: 0x00008753, + 9517: 0x0000885B, + 9518: 0x0000885D, + 9519: 0x00008910, + 9520: 0x00008907, + 9521: 0x00008912, + 9522: 0x00008913, + 9523: 0x00008915, + 9524: 0x0000890A, + 9525: 0x00008ABC, + 9526: 0x00008AD2, + 9527: 0x00008AC7, + 9528: 0x00008AC4, + 9529: 0x00008A95, + 9530: 0x00008ACB, + 9531: 0x00008AF8, + 9532: 0x00008AB2, + 9533: 0x00008AC9, + 9534: 0x00008AC2, + 9535: 0x00008ABF, + 9536: 0x00008AB0, + 9537: 0x00008AD6, + 9538: 0x00008ACD, + 9539: 0x00008AB6, + 9540: 0x00008AB9, + 9541: 0x00008ADB, + 9542: 0x00008C4C, + 9543: 0x00008C4E, + 9544: 0x00008C6C, + 9545: 0x00008CE0, + 9546: 0x00008CDE, + 9547: 0x00008CE6, + 9548: 0x00008CE4, + 9549: 0x00008CEC, + 9550: 0x00008CED, + 9551: 0x00008CE2, + 9552: 0x00008CE3, + 9553: 0x00008CDC, + 9554: 0x00008CEA, + 9555: 0x00008CE1, + 9556: 0x00008D6D, + 9557: 0x00008D9F, + 9558: 0x00008DA3, + 9559: 0x00008E2B, + 9560: 0x00008E10, + 9561: 0x00008E1D, + 9562: 0x00008E22, + 9563: 0x00008E0F, + 9564: 0x00008E29, + 9565: 0x00008E1F, + 9566: 0x00008E21, + 9567: 0x00008E1E, + 9568: 0x00008EBA, + 9569: 0x00008F1D, + 9570: 0x00008F1B, + 9571: 0x00008F1F, + 9572: 0x00008F29, + 9573: 0x00008F26, + 9574: 0x00008F2A, + 9575: 0x00008F1C, + 9576: 0x00008F1E, + 9577: 0x00008F25, + 9578: 0x00009069, + 9579: 0x0000906E, + 9580: 0x00009068, + 9581: 0x0000906D, + 9582: 0x00009077, + 9583: 0x00009130, + 9584: 0x0000912D, + 9585: 0x00009127, + 9586: 0x00009131, + 9587: 0x00009187, + 9588: 0x00009189, + 9589: 0x0000918B, + 9590: 0x00009183, + 9591: 0x000092C5, + 9592: 0x000092BB, + 9593: 0x000092B7, + 9594: 0x000092EA, + 9595: 0x000092AC, + 9596: 0x000092E4, + 9597: 0x000092C1, + 9598: 0x000092B3, + 9599: 0x000092BC, + 9600: 0x000092D2, + 9601: 0x000092C7, + 9602: 0x000092F0, + 9603: 0x000092B2, + 9604: 0x000095AD, + 9605: 0x000095B1, + 9606: 0x00009704, + 9607: 0x00009706, + 9608: 0x00009707, + 9609: 0x00009709, + 9610: 0x00009760, + 9611: 0x0000978D, + 9612: 0x0000978B, + 9613: 0x0000978F, + 9614: 0x00009821, + 9615: 0x0000982B, + 9616: 0x0000981C, + 9617: 0x000098B3, + 9618: 0x0000990A, + 9619: 0x00009913, + 9620: 0x00009912, + 9621: 0x00009918, + 9622: 0x000099DD, + 9623: 0x000099D0, + 9624: 0x000099DF, + 9625: 0x000099DB, + 9626: 0x000099D1, + 9627: 0x000099D5, + 9628: 0x000099D2, + 9629: 0x000099D9, + 9630: 0x00009AB7, + 9631: 0x00009AEE, + 9632: 0x00009AEF, + 9633: 0x00009B27, + 9634: 0x00009B45, + 9635: 0x00009B44, + 9636: 0x00009B77, + 9637: 0x00009B6F, + 9638: 0x00009D06, + 9639: 0x00009D09, + 9640: 0x00009D03, + 9641: 0x00009EA9, + 9642: 0x00009EBE, + 9643: 0x00009ECE, + 9644: 0x000058A8, + 9645: 0x00009F52, + 9646: 0x00005112, + 9647: 0x00005118, + 9648: 0x00005114, + 9649: 0x00005110, + 9650: 0x00005115, + 9651: 0x00005180, + 9652: 0x000051AA, + 9653: 0x000051DD, + 9654: 0x00005291, + 9655: 0x00005293, + 9656: 0x000052F3, + 9657: 0x00005659, + 9658: 0x0000566B, + 9659: 0x00005679, + 9660: 0x00005669, + 9661: 0x00005664, + 9662: 0x00005678, + 9663: 0x0000566A, + 9664: 0x00005668, + 9665: 0x00005665, + 9666: 0x00005671, + 9667: 0x0000566F, + 9668: 0x0000566C, + 9669: 0x00005662, + 9670: 0x00005676, + 9671: 0x000058C1, + 9672: 0x000058BE, + 9673: 0x000058C7, + 9674: 0x000058C5, + 9675: 0x0000596E, + 9676: 0x00005B1D, + 9677: 0x00005B34, + 9678: 0x00005B78, + 9679: 0x00005BF0, + 9680: 0x00005C0E, + 9681: 0x00005F4A, + 9682: 0x000061B2, + 9683: 0x00006191, + 9684: 0x000061A9, + 9685: 0x0000618A, + 9686: 0x000061CD, + 9687: 0x000061B6, + 9688: 0x000061BE, + 9689: 0x000061CA, + 9690: 0x000061C8, + 9691: 0x00006230, + 9692: 0x000064C5, + 9693: 0x000064C1, + 9694: 0x000064CB, + 9695: 0x000064BB, + 9696: 0x000064BC, + 9697: 0x000064DA, + 9698: 0x000064C4, + 9699: 0x000064C7, + 9700: 0x000064C2, + 9701: 0x000064CD, + 9702: 0x000064BF, + 9703: 0x000064D2, + 9704: 0x000064D4, + 9705: 0x000064BE, + 9706: 0x00006574, + 9707: 0x000066C6, + 9708: 0x000066C9, + 9709: 0x000066B9, + 9710: 0x000066C4, + 9711: 0x000066C7, + 9712: 0x000066B8, + 9713: 0x00006A3D, + 9714: 0x00006A38, + 9715: 0x00006A3A, + 9716: 0x00006A59, + 9717: 0x00006A6B, + 9718: 0x00006A58, + 9719: 0x00006A39, + 9720: 0x00006A44, + 9721: 0x00006A62, + 9722: 0x00006A61, + 9723: 0x00006A4B, + 9724: 0x00006A47, + 9725: 0x00006A35, + 9726: 0x00006A5F, + 9727: 0x00006A48, + 9728: 0x00006B59, + 9729: 0x00006B77, + 9730: 0x00006C05, + 9731: 0x00006FC2, + 9732: 0x00006FB1, + 9733: 0x00006FA1, + 9734: 0x00006FC3, + 9735: 0x00006FA4, + 9736: 0x00006FC1, + 9737: 0x00006FA7, + 9738: 0x00006FB3, + 9739: 0x00006FC0, + 9740: 0x00006FB9, + 9741: 0x00006FB6, + 9742: 0x00006FA6, + 9743: 0x00006FA0, + 9744: 0x00006FB4, + 9745: 0x000071BE, + 9746: 0x000071C9, + 9747: 0x000071D0, + 9748: 0x000071D2, + 9749: 0x000071C8, + 9750: 0x000071D5, + 9751: 0x000071B9, + 9752: 0x000071CE, + 9753: 0x000071D9, + 9754: 0x000071DC, + 9755: 0x000071C3, + 9756: 0x000071C4, + 9757: 0x00007368, + 9758: 0x0000749C, + 9759: 0x000074A3, + 9760: 0x00007498, + 9761: 0x0000749F, + 9762: 0x0000749E, + 9763: 0x000074E2, + 9764: 0x0000750C, + 9765: 0x0000750D, + 9766: 0x00007634, + 9767: 0x00007638, + 9768: 0x0000763A, + 9769: 0x000076E7, + 9770: 0x000076E5, + 9771: 0x000077A0, + 9772: 0x0000779E, + 9773: 0x0000779F, + 9774: 0x000077A5, + 9775: 0x000078E8, + 9776: 0x000078DA, + 9777: 0x000078EC, + 9778: 0x000078E7, + 9779: 0x000079A6, + 9780: 0x00007A4D, + 9781: 0x00007A4E, + 9782: 0x00007A46, + 9783: 0x00007A4C, + 9784: 0x00007A4B, + 9785: 0x00007ABA, + 9786: 0x00007BD9, + 9787: 0x00007C11, + 9788: 0x00007BC9, + 9789: 0x00007BE4, + 9790: 0x00007BDB, + 9791: 0x00007BE1, + 9792: 0x00007BE9, + 9793: 0x00007BE6, + 9794: 0x00007CD5, + 9795: 0x00007CD6, + 9796: 0x00007E0A, + 9797: 0x00007E11, + 9798: 0x00007E08, + 9799: 0x00007E1B, + 9800: 0x00007E23, + 9801: 0x00007E1E, + 9802: 0x00007E1D, + 9803: 0x00007E09, + 9804: 0x00007E10, + 9805: 0x00007F79, + 9806: 0x00007FB2, + 9807: 0x00007FF0, + 9808: 0x00007FF1, + 9809: 0x00007FEE, + 9810: 0x00008028, + 9811: 0x000081B3, + 9812: 0x000081A9, + 9813: 0x000081A8, + 9814: 0x000081FB, + 9815: 0x00008208, + 9816: 0x00008258, + 9817: 0x00008259, + 9818: 0x0000854A, + 9819: 0x00008559, + 9820: 0x00008548, + 9821: 0x00008568, + 9822: 0x00008569, + 9823: 0x00008543, + 9824: 0x00008549, + 9825: 0x0000856D, + 9826: 0x0000856A, + 9827: 0x0000855E, + 9828: 0x00008783, + 9829: 0x0000879F, + 9830: 0x0000879E, + 9831: 0x000087A2, + 9832: 0x0000878D, + 9833: 0x00008861, + 9834: 0x0000892A, + 9835: 0x00008932, + 9836: 0x00008925, + 9837: 0x0000892B, + 9838: 0x00008921, + 9839: 0x000089AA, + 9840: 0x000089A6, + 9841: 0x00008AE6, + 9842: 0x00008AFA, + 9843: 0x00008AEB, + 9844: 0x00008AF1, + 9845: 0x00008B00, + 9846: 0x00008ADC, + 9847: 0x00008AE7, + 9848: 0x00008AEE, + 9849: 0x00008AFE, + 9850: 0x00008B01, + 9851: 0x00008B02, + 9852: 0x00008AF7, + 9853: 0x00008AED, + 9854: 0x00008AF3, + 9855: 0x00008AF6, + 9856: 0x00008AFC, + 9857: 0x00008C6B, + 9858: 0x00008C6D, + 9859: 0x00008C93, + 9860: 0x00008CF4, + 9861: 0x00008E44, + 9862: 0x00008E31, + 9863: 0x00008E34, + 9864: 0x00008E42, + 9865: 0x00008E39, + 9866: 0x00008E35, + 9867: 0x00008F3B, + 9868: 0x00008F2F, + 9869: 0x00008F38, + 9870: 0x00008F33, + 9871: 0x00008FA8, + 9872: 0x00008FA6, + 9873: 0x00009075, + 9874: 0x00009074, + 9875: 0x00009078, + 9876: 0x00009072, + 9877: 0x0000907C, + 9878: 0x0000907A, + 9879: 0x00009134, + 9880: 0x00009192, + 9881: 0x00009320, + 9882: 0x00009336, + 9883: 0x000092F8, + 9884: 0x00009333, + 9885: 0x0000932F, + 9886: 0x00009322, + 9887: 0x000092FC, + 9888: 0x0000932B, + 9889: 0x00009304, + 9890: 0x0000931A, + 9891: 0x00009310, + 9892: 0x00009326, + 9893: 0x00009321, + 9894: 0x00009315, + 9895: 0x0000932E, + 9896: 0x00009319, + 9897: 0x000095BB, + 9898: 0x000096A7, + 9899: 0x000096A8, + 9900: 0x000096AA, + 9901: 0x000096D5, + 9902: 0x0000970E, + 9903: 0x00009711, + 9904: 0x00009716, + 9905: 0x0000970D, + 9906: 0x00009713, + 9907: 0x0000970F, + 9908: 0x0000975B, + 9909: 0x0000975C, + 9910: 0x00009766, + 9911: 0x00009798, + 9912: 0x00009830, + 9913: 0x00009838, + 9914: 0x0000983B, + 9915: 0x00009837, + 9916: 0x0000982D, + 9917: 0x00009839, + 9918: 0x00009824, + 9919: 0x00009910, + 9920: 0x00009928, + 9921: 0x0000991E, + 9922: 0x0000991B, + 9923: 0x00009921, + 9924: 0x0000991A, + 9925: 0x000099ED, + 9926: 0x000099E2, + 9927: 0x000099F1, + 9928: 0x00009AB8, + 9929: 0x00009ABC, + 9930: 0x00009AFB, + 9931: 0x00009AED, + 9932: 0x00009B28, + 9933: 0x00009B91, + 9934: 0x00009D15, + 9935: 0x00009D23, + 9936: 0x00009D26, + 9937: 0x00009D28, + 9938: 0x00009D12, + 9939: 0x00009D1B, + 9940: 0x00009ED8, + 9941: 0x00009ED4, + 9942: 0x00009F8D, + 9943: 0x00009F9C, + 9944: 0x0000512A, + 9945: 0x0000511F, + 9946: 0x00005121, + 9947: 0x00005132, + 9948: 0x000052F5, + 9949: 0x0000568E, + 9950: 0x00005680, + 9951: 0x00005690, + 9952: 0x00005685, + 9953: 0x00005687, + 9954: 0x0000568F, + 9955: 0x000058D5, + 9956: 0x000058D3, + 9957: 0x000058D1, + 9958: 0x000058CE, + 9959: 0x00005B30, + 9960: 0x00005B2A, + 9961: 0x00005B24, + 9962: 0x00005B7A, + 9963: 0x00005C37, + 9964: 0x00005C68, + 9965: 0x00005DBC, + 9966: 0x00005DBA, + 9967: 0x00005DBD, + 9968: 0x00005DB8, + 9969: 0x00005E6B, + 9970: 0x00005F4C, + 9971: 0x00005FBD, + 9972: 0x000061C9, + 9973: 0x000061C2, + 9974: 0x000061C7, + 9975: 0x000061E6, + 9976: 0x000061CB, + 9977: 0x00006232, + 9978: 0x00006234, + 9979: 0x000064CE, + 9980: 0x000064CA, + 9981: 0x000064D8, + 9982: 0x000064E0, + 9983: 0x000064F0, + 9984: 0x000064E6, + 9985: 0x000064EC, + 9986: 0x000064F1, + 9987: 0x000064E2, + 9988: 0x000064ED, + 9989: 0x00006582, + 9990: 0x00006583, + 9991: 0x000066D9, + 9992: 0x000066D6, + 9993: 0x00006A80, + 9994: 0x00006A94, + 9995: 0x00006A84, + 9996: 0x00006AA2, + 9997: 0x00006A9C, + 9998: 0x00006ADB, + 9999: 0x00006AA3, + 10000: 0x00006A7E, + 10001: 0x00006A97, + 10002: 0x00006A90, + 10003: 0x00006AA0, + 10004: 0x00006B5C, + 10005: 0x00006BAE, + 10006: 0x00006BDA, + 10007: 0x00006C08, + 10008: 0x00006FD8, + 10009: 0x00006FF1, + 10010: 0x00006FDF, + 10011: 0x00006FE0, + 10012: 0x00006FDB, + 10013: 0x00006FE4, + 10014: 0x00006FEB, + 10015: 0x00006FEF, + 10016: 0x00006F80, + 10017: 0x00006FEC, + 10018: 0x00006FE1, + 10019: 0x00006FE9, + 10020: 0x00006FD5, + 10021: 0x00006FEE, + 10022: 0x00006FF0, + 10023: 0x000071E7, + 10024: 0x000071DF, + 10025: 0x000071EE, + 10026: 0x000071E6, + 10027: 0x000071E5, + 10028: 0x000071ED, + 10029: 0x000071EC, + 10030: 0x000071F4, + 10031: 0x000071E0, + 10032: 0x00007235, + 10033: 0x00007246, + 10034: 0x00007370, + 10035: 0x00007372, + 10036: 0x000074A9, + 10037: 0x000074B0, + 10038: 0x000074A6, + 10039: 0x000074A8, + 10040: 0x00007646, + 10041: 0x00007642, + 10042: 0x0000764C, + 10043: 0x000076EA, + 10044: 0x000077B3, + 10045: 0x000077AA, + 10046: 0x000077B0, + 10047: 0x000077AC, + 10048: 0x000077A7, + 10049: 0x000077AD, + 10050: 0x000077EF, + 10051: 0x000078F7, + 10052: 0x000078FA, + 10053: 0x000078F4, + 10054: 0x000078EF, + 10055: 0x00007901, + 10056: 0x000079A7, + 10057: 0x000079AA, + 10058: 0x00007A57, + 10059: 0x00007ABF, + 10060: 0x00007C07, + 10061: 0x00007C0D, + 10062: 0x00007BFE, + 10063: 0x00007BF7, + 10064: 0x00007C0C, + 10065: 0x00007BE0, + 10066: 0x00007CE0, + 10067: 0x00007CDC, + 10068: 0x00007CDE, + 10069: 0x00007CE2, + 10070: 0x00007CDF, + 10071: 0x00007CD9, + 10072: 0x00007CDD, + 10073: 0x00007E2E, + 10074: 0x00007E3E, + 10075: 0x00007E46, + 10076: 0x00007E37, + 10077: 0x00007E32, + 10078: 0x00007E43, + 10079: 0x00007E2B, + 10080: 0x00007E3D, + 10081: 0x00007E31, + 10082: 0x00007E45, + 10083: 0x00007E41, + 10084: 0x00007E34, + 10085: 0x00007E39, + 10086: 0x00007E48, + 10087: 0x00007E35, + 10088: 0x00007E3F, + 10089: 0x00007E2F, + 10090: 0x00007F44, + 10091: 0x00007FF3, + 10092: 0x00007FFC, + 10093: 0x00008071, + 10094: 0x00008072, + 10095: 0x00008070, + 10096: 0x0000806F, + 10097: 0x00008073, + 10098: 0x000081C6, + 10099: 0x000081C3, + 10100: 0x000081BA, + 10101: 0x000081C2, + 10102: 0x000081C0, + 10103: 0x000081BF, + 10104: 0x000081BD, + 10105: 0x000081C9, + 10106: 0x000081BE, + 10107: 0x000081E8, + 10108: 0x00008209, + 10109: 0x00008271, + 10110: 0x000085AA, + 10111: 0x00008584, + 10112: 0x0000857E, + 10113: 0x0000859C, + 10114: 0x00008591, + 10115: 0x00008594, + 10116: 0x000085AF, + 10117: 0x0000859B, + 10118: 0x00008587, + 10119: 0x000085A8, + 10120: 0x0000858A, + 10121: 0x00008667, + 10122: 0x000087C0, + 10123: 0x000087D1, + 10124: 0x000087B3, + 10125: 0x000087D2, + 10126: 0x000087C6, + 10127: 0x000087AB, + 10128: 0x000087BB, + 10129: 0x000087BA, + 10130: 0x000087C8, + 10131: 0x000087CB, + 10132: 0x0000893B, + 10133: 0x00008936, + 10134: 0x00008944, + 10135: 0x00008938, + 10136: 0x0000893D, + 10137: 0x000089AC, + 10138: 0x00008B0E, + 10139: 0x00008B17, + 10140: 0x00008B19, + 10141: 0x00008B1B, + 10142: 0x00008B0A, + 10143: 0x00008B20, + 10144: 0x00008B1D, + 10145: 0x00008B04, + 10146: 0x00008B10, + 10147: 0x00008C41, + 10148: 0x00008C3F, + 10149: 0x00008C73, + 10150: 0x00008CFA, + 10151: 0x00008CFD, + 10152: 0x00008CFC, + 10153: 0x00008CF8, + 10154: 0x00008CFB, + 10155: 0x00008DA8, + 10156: 0x00008E49, + 10157: 0x00008E4B, + 10158: 0x00008E48, + 10159: 0x00008E4A, + 10160: 0x00008F44, + 10161: 0x00008F3E, + 10162: 0x00008F42, + 10163: 0x00008F45, + 10164: 0x00008F3F, + 10165: 0x0000907F, + 10166: 0x0000907D, + 10167: 0x00009084, + 10168: 0x00009081, + 10169: 0x00009082, + 10170: 0x00009080, + 10171: 0x00009139, + 10172: 0x000091A3, + 10173: 0x0000919E, + 10174: 0x0000919C, + 10175: 0x0000934D, + 10176: 0x00009382, + 10177: 0x00009328, + 10178: 0x00009375, + 10179: 0x0000934A, + 10180: 0x00009365, + 10181: 0x0000934B, + 10182: 0x00009318, + 10183: 0x0000937E, + 10184: 0x0000936C, + 10185: 0x0000935B, + 10186: 0x00009370, + 10187: 0x0000935A, + 10188: 0x00009354, + 10189: 0x000095CA, + 10190: 0x000095CB, + 10191: 0x000095CC, + 10192: 0x000095C8, + 10193: 0x000095C6, + 10194: 0x000096B1, + 10195: 0x000096B8, + 10196: 0x000096D6, + 10197: 0x0000971C, + 10198: 0x0000971E, + 10199: 0x000097A0, + 10200: 0x000097D3, + 10201: 0x00009846, + 10202: 0x000098B6, + 10203: 0x00009935, + 10204: 0x00009A01, + 10205: 0x000099FF, + 10206: 0x00009BAE, + 10207: 0x00009BAB, + 10208: 0x00009BAA, + 10209: 0x00009BAD, + 10210: 0x00009D3B, + 10211: 0x00009D3F, + 10212: 0x00009E8B, + 10213: 0x00009ECF, + 10214: 0x00009EDE, + 10215: 0x00009EDC, + 10216: 0x00009EDD, + 10217: 0x00009EDB, + 10218: 0x00009F3E, + 10219: 0x00009F4B, + 10220: 0x000053E2, + 10221: 0x00005695, + 10222: 0x000056AE, + 10223: 0x000058D9, + 10224: 0x000058D8, + 10225: 0x00005B38, + 10226: 0x00005F5D, + 10227: 0x000061E3, + 10228: 0x00006233, + 10229: 0x000064F4, + 10230: 0x000064F2, + 10231: 0x000064FE, + 10232: 0x00006506, + 10233: 0x000064FA, + 10234: 0x000064FB, + 10235: 0x000064F7, + 10236: 0x000065B7, + 10237: 0x000066DC, + 10238: 0x00006726, + 10239: 0x00006AB3, + 10240: 0x00006AAC, + 10241: 0x00006AC3, + 10242: 0x00006ABB, + 10243: 0x00006AB8, + 10244: 0x00006AC2, + 10245: 0x00006AAE, + 10246: 0x00006AAF, + 10247: 0x00006B5F, + 10248: 0x00006B78, + 10249: 0x00006BAF, + 10250: 0x00007009, + 10251: 0x0000700B, + 10252: 0x00006FFE, + 10253: 0x00007006, + 10254: 0x00006FFA, + 10255: 0x00007011, + 10256: 0x0000700F, + 10257: 0x000071FB, + 10258: 0x000071FC, + 10259: 0x000071FE, + 10260: 0x000071F8, + 10261: 0x00007377, + 10262: 0x00007375, + 10263: 0x000074A7, + 10264: 0x000074BF, + 10265: 0x00007515, + 10266: 0x00007656, + 10267: 0x00007658, + 10268: 0x00007652, + 10269: 0x000077BD, + 10270: 0x000077BF, + 10271: 0x000077BB, + 10272: 0x000077BC, + 10273: 0x0000790E, + 10274: 0x000079AE, + 10275: 0x00007A61, + 10276: 0x00007A62, + 10277: 0x00007A60, + 10278: 0x00007AC4, + 10279: 0x00007AC5, + 10280: 0x00007C2B, + 10281: 0x00007C27, + 10282: 0x00007C2A, + 10283: 0x00007C1E, + 10284: 0x00007C23, + 10285: 0x00007C21, + 10286: 0x00007CE7, + 10287: 0x00007E54, + 10288: 0x00007E55, + 10289: 0x00007E5E, + 10290: 0x00007E5A, + 10291: 0x00007E61, + 10292: 0x00007E52, + 10293: 0x00007E59, + 10294: 0x00007F48, + 10295: 0x00007FF9, + 10296: 0x00007FFB, + 10297: 0x00008077, + 10298: 0x00008076, + 10299: 0x000081CD, + 10300: 0x000081CF, + 10301: 0x0000820A, + 10302: 0x000085CF, + 10303: 0x000085A9, + 10304: 0x000085CD, + 10305: 0x000085D0, + 10306: 0x000085C9, + 10307: 0x000085B0, + 10308: 0x000085BA, + 10309: 0x000085B9, + 10310: 0x000085A6, + 10311: 0x000087EF, + 10312: 0x000087EC, + 10313: 0x000087F2, + 10314: 0x000087E0, + 10315: 0x00008986, + 10316: 0x000089B2, + 10317: 0x000089F4, + 10318: 0x00008B28, + 10319: 0x00008B39, + 10320: 0x00008B2C, + 10321: 0x00008B2B, + 10322: 0x00008C50, + 10323: 0x00008D05, + 10324: 0x00008E59, + 10325: 0x00008E63, + 10326: 0x00008E66, + 10327: 0x00008E64, + 10328: 0x00008E5F, + 10329: 0x00008E55, + 10330: 0x00008EC0, + 10331: 0x00008F49, + 10332: 0x00008F4D, + 10333: 0x00009087, + 10334: 0x00009083, + 10335: 0x00009088, + 10336: 0x000091AB, + 10337: 0x000091AC, + 10338: 0x000091D0, + 10339: 0x00009394, + 10340: 0x0000938A, + 10341: 0x00009396, + 10342: 0x000093A2, + 10343: 0x000093B3, + 10344: 0x000093AE, + 10345: 0x000093AC, + 10346: 0x000093B0, + 10347: 0x00009398, + 10348: 0x0000939A, + 10349: 0x00009397, + 10350: 0x000095D4, + 10351: 0x000095D6, + 10352: 0x000095D0, + 10353: 0x000095D5, + 10354: 0x000096E2, + 10355: 0x000096DC, + 10356: 0x000096D9, + 10357: 0x000096DB, + 10358: 0x000096DE, + 10359: 0x00009724, + 10360: 0x000097A3, + 10361: 0x000097A6, + 10362: 0x000097AD, + 10363: 0x000097F9, + 10364: 0x0000984D, + 10365: 0x0000984F, + 10366: 0x0000984C, + 10367: 0x0000984E, + 10368: 0x00009853, + 10369: 0x000098BA, + 10370: 0x0000993E, + 10371: 0x0000993F, + 10372: 0x0000993D, + 10373: 0x0000992E, + 10374: 0x000099A5, + 10375: 0x00009A0E, + 10376: 0x00009AC1, + 10377: 0x00009B03, + 10378: 0x00009B06, + 10379: 0x00009B4F, + 10380: 0x00009B4E, + 10381: 0x00009B4D, + 10382: 0x00009BCA, + 10383: 0x00009BC9, + 10384: 0x00009BFD, + 10385: 0x00009BC8, + 10386: 0x00009BC0, + 10387: 0x00009D51, + 10388: 0x00009D5D, + 10389: 0x00009D60, + 10390: 0x00009EE0, + 10391: 0x00009F15, + 10392: 0x00009F2C, + 10393: 0x00005133, + 10394: 0x000056A5, + 10395: 0x000058DE, + 10396: 0x000058DF, + 10397: 0x000058E2, + 10398: 0x00005BF5, + 10399: 0x00009F90, + 10400: 0x00005EEC, + 10401: 0x000061F2, + 10402: 0x000061F7, + 10403: 0x000061F6, + 10404: 0x000061F5, + 10405: 0x00006500, + 10406: 0x0000650F, + 10407: 0x000066E0, + 10408: 0x000066DD, + 10409: 0x00006AE5, + 10410: 0x00006ADD, + 10411: 0x00006ADA, + 10412: 0x00006AD3, + 10413: 0x0000701B, + 10414: 0x0000701F, + 10415: 0x00007028, + 10416: 0x0000701A, + 10417: 0x0000701D, + 10418: 0x00007015, + 10419: 0x00007018, + 10420: 0x00007206, + 10421: 0x0000720D, + 10422: 0x00007258, + 10423: 0x000072A2, + 10424: 0x00007378, + 10425: 0x0000737A, + 10426: 0x000074BD, + 10427: 0x000074CA, + 10428: 0x000074E3, + 10429: 0x00007587, + 10430: 0x00007586, + 10431: 0x0000765F, + 10432: 0x00007661, + 10433: 0x000077C7, + 10434: 0x00007919, + 10435: 0x000079B1, + 10436: 0x00007A6B, + 10437: 0x00007A69, + 10438: 0x00007C3E, + 10439: 0x00007C3F, + 10440: 0x00007C38, + 10441: 0x00007C3D, + 10442: 0x00007C37, + 10443: 0x00007C40, + 10444: 0x00007E6B, + 10445: 0x00007E6D, + 10446: 0x00007E79, + 10447: 0x00007E69, + 10448: 0x00007E6A, + 10449: 0x00007F85, + 10450: 0x00007E73, + 10451: 0x00007FB6, + 10452: 0x00007FB9, + 10453: 0x00007FB8, + 10454: 0x000081D8, + 10455: 0x000085E9, + 10456: 0x000085DD, + 10457: 0x000085EA, + 10458: 0x000085D5, + 10459: 0x000085E4, + 10460: 0x000085E5, + 10461: 0x000085F7, + 10462: 0x000087FB, + 10463: 0x00008805, + 10464: 0x0000880D, + 10465: 0x000087F9, + 10466: 0x000087FE, + 10467: 0x00008960, + 10468: 0x0000895F, + 10469: 0x00008956, + 10470: 0x0000895E, + 10471: 0x00008B41, + 10472: 0x00008B5C, + 10473: 0x00008B58, + 10474: 0x00008B49, + 10475: 0x00008B5A, + 10476: 0x00008B4E, + 10477: 0x00008B4F, + 10478: 0x00008B46, + 10479: 0x00008B59, + 10480: 0x00008D08, + 10481: 0x00008D0A, + 10482: 0x00008E7C, + 10483: 0x00008E72, + 10484: 0x00008E87, + 10485: 0x00008E76, + 10486: 0x00008E6C, + 10487: 0x00008E7A, + 10488: 0x00008E74, + 10489: 0x00008F54, + 10490: 0x00008F4E, + 10491: 0x00008FAD, + 10492: 0x0000908A, + 10493: 0x0000908B, + 10494: 0x000091B1, + 10495: 0x000091AE, + 10496: 0x000093E1, + 10497: 0x000093D1, + 10498: 0x000093DF, + 10499: 0x000093C3, + 10500: 0x000093C8, + 10501: 0x000093DC, + 10502: 0x000093DD, + 10503: 0x000093D6, + 10504: 0x000093E2, + 10505: 0x000093CD, + 10506: 0x000093D8, + 10507: 0x000093E4, + 10508: 0x000093D7, + 10509: 0x000093E8, + 10510: 0x000095DC, + 10511: 0x000096B4, + 10512: 0x000096E3, + 10513: 0x0000972A, + 10514: 0x00009727, + 10515: 0x00009761, + 10516: 0x000097DC, + 10517: 0x000097FB, + 10518: 0x0000985E, + 10519: 0x00009858, + 10520: 0x0000985B, + 10521: 0x000098BC, + 10522: 0x00009945, + 10523: 0x00009949, + 10524: 0x00009A16, + 10525: 0x00009A19, + 10526: 0x00009B0D, + 10527: 0x00009BE8, + 10528: 0x00009BE7, + 10529: 0x00009BD6, + 10530: 0x00009BDB, + 10531: 0x00009D89, + 10532: 0x00009D61, + 10533: 0x00009D72, + 10534: 0x00009D6A, + 10535: 0x00009D6C, + 10536: 0x00009E92, + 10537: 0x00009E97, + 10538: 0x00009E93, + 10539: 0x00009EB4, + 10540: 0x000052F8, + 10541: 0x000056A8, + 10542: 0x000056B7, + 10543: 0x000056B6, + 10544: 0x000056B4, + 10545: 0x000056BC, + 10546: 0x000058E4, + 10547: 0x00005B40, + 10548: 0x00005B43, + 10549: 0x00005B7D, + 10550: 0x00005BF6, + 10551: 0x00005DC9, + 10552: 0x000061F8, + 10553: 0x000061FA, + 10554: 0x00006518, + 10555: 0x00006514, + 10556: 0x00006519, + 10557: 0x000066E6, + 10558: 0x00006727, + 10559: 0x00006AEC, + 10560: 0x0000703E, + 10561: 0x00007030, + 10562: 0x00007032, + 10563: 0x00007210, + 10564: 0x0000737B, + 10565: 0x000074CF, + 10566: 0x00007662, + 10567: 0x00007665, + 10568: 0x00007926, + 10569: 0x0000792A, + 10570: 0x0000792C, + 10571: 0x0000792B, + 10572: 0x00007AC7, + 10573: 0x00007AF6, + 10574: 0x00007C4C, + 10575: 0x00007C43, + 10576: 0x00007C4D, + 10577: 0x00007CEF, + 10578: 0x00007CF0, + 10579: 0x00008FAE, + 10580: 0x00007E7D, + 10581: 0x00007E7C, + 10582: 0x00007E82, + 10583: 0x00007F4C, + 10584: 0x00008000, + 10585: 0x000081DA, + 10586: 0x00008266, + 10587: 0x000085FB, + 10588: 0x000085F9, + 10589: 0x00008611, + 10590: 0x000085FA, + 10591: 0x00008606, + 10592: 0x0000860B, + 10593: 0x00008607, + 10594: 0x0000860A, + 10595: 0x00008814, + 10596: 0x00008815, + 10597: 0x00008964, + 10598: 0x000089BA, + 10599: 0x000089F8, + 10600: 0x00008B70, + 10601: 0x00008B6C, + 10602: 0x00008B66, + 10603: 0x00008B6F, + 10604: 0x00008B5F, + 10605: 0x00008B6B, + 10606: 0x00008D0F, + 10607: 0x00008D0D, + 10608: 0x00008E89, + 10609: 0x00008E81, + 10610: 0x00008E85, + 10611: 0x00008E82, + 10612: 0x000091B4, + 10613: 0x000091CB, + 10614: 0x00009418, + 10615: 0x00009403, + 10616: 0x000093FD, + 10617: 0x000095E1, + 10618: 0x00009730, + 10619: 0x000098C4, + 10620: 0x00009952, + 10621: 0x00009951, + 10622: 0x000099A8, + 10623: 0x00009A2B, + 10624: 0x00009A30, + 10625: 0x00009A37, + 10626: 0x00009A35, + 10627: 0x00009C13, + 10628: 0x00009C0D, + 10629: 0x00009E79, + 10630: 0x00009EB5, + 10631: 0x00009EE8, + 10632: 0x00009F2F, + 10633: 0x00009F5F, + 10634: 0x00009F63, + 10635: 0x00009F61, + 10636: 0x00005137, + 10637: 0x00005138, + 10638: 0x000056C1, + 10639: 0x000056C0, + 10640: 0x000056C2, + 10641: 0x00005914, + 10642: 0x00005C6C, + 10643: 0x00005DCD, + 10644: 0x000061FC, + 10645: 0x000061FE, + 10646: 0x0000651D, + 10647: 0x0000651C, + 10648: 0x00006595, + 10649: 0x000066E9, + 10650: 0x00006AFB, + 10651: 0x00006B04, + 10652: 0x00006AFA, + 10653: 0x00006BB2, + 10654: 0x0000704C, + 10655: 0x0000721B, + 10656: 0x000072A7, + 10657: 0x000074D6, + 10658: 0x000074D4, + 10659: 0x00007669, + 10660: 0x000077D3, + 10661: 0x00007C50, + 10662: 0x00007E8F, + 10663: 0x00007E8C, + 10664: 0x00007FBC, + 10665: 0x00008617, + 10666: 0x0000862D, + 10667: 0x0000861A, + 10668: 0x00008823, + 10669: 0x00008822, + 10670: 0x00008821, + 10671: 0x0000881F, + 10672: 0x0000896A, + 10673: 0x0000896C, + 10674: 0x000089BD, + 10675: 0x00008B74, + 10676: 0x00008B77, + 10677: 0x00008B7D, + 10678: 0x00008D13, + 10679: 0x00008E8A, + 10680: 0x00008E8D, + 10681: 0x00008E8B, + 10682: 0x00008F5F, + 10683: 0x00008FAF, + 10684: 0x000091BA, + 10685: 0x0000942E, + 10686: 0x00009433, + 10687: 0x00009435, + 10688: 0x0000943A, + 10689: 0x00009438, + 10690: 0x00009432, + 10691: 0x0000942B, + 10692: 0x000095E2, + 10693: 0x00009738, + 10694: 0x00009739, + 10695: 0x00009732, + 10696: 0x000097FF, + 10697: 0x00009867, + 10698: 0x00009865, + 10699: 0x00009957, + 10700: 0x00009A45, + 10701: 0x00009A43, + 10702: 0x00009A40, + 10703: 0x00009A3E, + 10704: 0x00009ACF, + 10705: 0x00009B54, + 10706: 0x00009B51, + 10707: 0x00009C2D, + 10708: 0x00009C25, + 10709: 0x00009DAF, + 10710: 0x00009DB4, + 10711: 0x00009DC2, + 10712: 0x00009DB8, + 10713: 0x00009E9D, + 10714: 0x00009EEF, + 10715: 0x00009F19, + 10716: 0x00009F5C, + 10717: 0x00009F66, + 10718: 0x00009F67, + 10719: 0x0000513C, + 10720: 0x0000513B, + 10721: 0x000056C8, + 10722: 0x000056CA, + 10723: 0x000056C9, + 10724: 0x00005B7F, + 10725: 0x00005DD4, + 10726: 0x00005DD2, + 10727: 0x00005F4E, + 10728: 0x000061FF, + 10729: 0x00006524, + 10730: 0x00006B0A, + 10731: 0x00006B61, + 10732: 0x00007051, + 10733: 0x00007058, + 10734: 0x00007380, + 10735: 0x000074E4, + 10736: 0x0000758A, + 10737: 0x0000766E, + 10738: 0x0000766C, + 10739: 0x000079B3, + 10740: 0x00007C60, + 10741: 0x00007C5F, + 10742: 0x0000807E, + 10743: 0x0000807D, + 10744: 0x000081DF, + 10745: 0x00008972, + 10746: 0x0000896F, + 10747: 0x000089FC, + 10748: 0x00008B80, + 10749: 0x00008D16, + 10750: 0x00008D17, + 10751: 0x00008E91, + 10752: 0x00008E93, + 10753: 0x00008F61, + 10754: 0x00009148, + 10755: 0x00009444, + 10756: 0x00009451, + 10757: 0x00009452, + 10758: 0x0000973D, + 10759: 0x0000973E, + 10760: 0x000097C3, + 10761: 0x000097C1, + 10762: 0x0000986B, + 10763: 0x00009955, + 10764: 0x00009A55, + 10765: 0x00009A4D, + 10766: 0x00009AD2, + 10767: 0x00009B1A, + 10768: 0x00009C49, + 10769: 0x00009C31, + 10770: 0x00009C3E, + 10771: 0x00009C3B, + 10772: 0x00009DD3, + 10773: 0x00009DD7, + 10774: 0x00009F34, + 10775: 0x00009F6C, + 10776: 0x00009F6A, + 10777: 0x00009F94, + 10778: 0x000056CC, + 10779: 0x00005DD6, + 10780: 0x00006200, + 10781: 0x00006523, + 10782: 0x0000652B, + 10783: 0x0000652A, + 10784: 0x000066EC, + 10785: 0x00006B10, + 10786: 0x000074DA, + 10787: 0x00007ACA, + 10788: 0x00007C64, + 10789: 0x00007C63, + 10790: 0x00007C65, + 10791: 0x00007E93, + 10792: 0x00007E96, + 10793: 0x00007E94, + 10794: 0x000081E2, + 10795: 0x00008638, + 10796: 0x0000863F, + 10797: 0x00008831, + 10798: 0x00008B8A, + 10799: 0x00009090, + 10800: 0x0000908F, + 10801: 0x00009463, + 10802: 0x00009460, + 10803: 0x00009464, + 10804: 0x00009768, + 10805: 0x0000986F, + 10806: 0x0000995C, + 10807: 0x00009A5A, + 10808: 0x00009A5B, + 10809: 0x00009A57, + 10810: 0x00009AD3, + 10811: 0x00009AD4, + 10812: 0x00009AD1, + 10813: 0x00009C54, + 10814: 0x00009C57, + 10815: 0x00009C56, + 10816: 0x00009DE5, + 10817: 0x00009E9F, + 10818: 0x00009EF4, + 10819: 0x000056D1, + 10820: 0x000058E9, + 10821: 0x0000652C, + 10822: 0x0000705E, + 10823: 0x00007671, + 10824: 0x00007672, + 10825: 0x000077D7, + 10826: 0x00007F50, + 10827: 0x00007F88, + 10828: 0x00008836, + 10829: 0x00008839, + 10830: 0x00008862, + 10831: 0x00008B93, + 10832: 0x00008B92, + 10833: 0x00008B96, + 10834: 0x00008277, + 10835: 0x00008D1B, + 10836: 0x000091C0, + 10837: 0x0000946A, + 10838: 0x00009742, + 10839: 0x00009748, + 10840: 0x00009744, + 10841: 0x000097C6, + 10842: 0x00009870, + 10843: 0x00009A5F, + 10844: 0x00009B22, + 10845: 0x00009B58, + 10846: 0x00009C5F, + 10847: 0x00009DF9, + 10848: 0x00009DFA, + 10849: 0x00009E7C, + 10850: 0x00009E7D, + 10851: 0x00009F07, + 10852: 0x00009F77, + 10853: 0x00009F72, + 10854: 0x00005EF3, + 10855: 0x00006B16, + 10856: 0x00007063, + 10857: 0x00007C6C, + 10858: 0x00007C6E, + 10859: 0x0000883B, + 10860: 0x000089C0, + 10861: 0x00008EA1, + 10862: 0x000091C1, + 10863: 0x00009472, + 10864: 0x00009470, + 10865: 0x00009871, + 10866: 0x0000995E, + 10867: 0x00009AD6, + 10868: 0x00009B23, + 10869: 0x00009ECC, + 10870: 0x00007064, + 10871: 0x000077DA, + 10872: 0x00008B9A, + 10873: 0x00009477, + 10874: 0x000097C9, + 10875: 0x00009A62, + 10876: 0x00009A65, + 10877: 0x00007E9C, + 10878: 0x00008B9C, + 10879: 0x00008EAA, + 10880: 0x000091C5, + 10881: 0x0000947D, + 10882: 0x0000947E, + 10883: 0x0000947C, + 10884: 0x00009C77, + 10885: 0x00009C78, + 10886: 0x00009EF7, + 10887: 0x00008C54, + 10888: 0x0000947F, + 10889: 0x00009E1A, + 10890: 0x00007228, + 10891: 0x00009A6A, + 10892: 0x00009B31, + 10893: 0x00009E1B, + 10894: 0x00009E1E, + 10895: 0x00007C72, + 10896: 0x00002460, + 10897: 0x00002461, + 10898: 0x00002462, + 10899: 0x00002463, + 10900: 0x00002464, + 10901: 0x00002465, + 10902: 0x00002466, + 10903: 0x00002467, + 10904: 0x00002468, + 10905: 0x00002469, + 10906: 0x00002474, + 10907: 0x00002475, + 10908: 0x00002476, + 10909: 0x00002477, + 10910: 0x00002478, + 10911: 0x00002479, + 10912: 0x0000247A, + 10913: 0x0000247B, + 10914: 0x0000247C, + 10915: 0x0000247D, + 10916: 0x00002170, + 10917: 0x00002171, + 10918: 0x00002172, + 10919: 0x00002173, + 10920: 0x00002174, + 10921: 0x00002175, + 10922: 0x00002176, + 10923: 0x00002177, + 10924: 0x00002178, + 10925: 0x00002179, + 10926: 0x00004E36, + 10927: 0x00004E3F, + 10928: 0x00004E85, + 10929: 0x00004EA0, + 10930: 0x00005182, + 10931: 0x00005196, + 10932: 0x000051AB, + 10933: 0x000052F9, + 10934: 0x00005338, + 10935: 0x00005369, + 10936: 0x000053B6, + 10937: 0x0000590A, + 10938: 0x00005B80, + 10939: 0x00005DDB, + 10940: 0x00002F33, + 10941: 0x00005E7F, + 10942: 0x00005EF4, + 10943: 0x00005F50, + 10944: 0x00005F61, + 10945: 0x00006534, + 10946: 0x000065E0, + 10947: 0x00007592, + 10948: 0x00007676, + 10949: 0x00008FB5, + 10950: 0x000096B6, + 10951: 0x000000A8, + 10952: 0x000002C6, + 10953: 0x000030FD, + 10954: 0x000030FE, + 10955: 0x0000309D, + 10956: 0x0000309E, + 10957: 0x00003003, + 10958: 0x00004EDD, + 10959: 0x00003005, + 10960: 0x00003006, + 10961: 0x00003007, + 10962: 0x000030FC, + 10963: 0x0000FF3B, + 10964: 0x0000FF3D, + 10965: 0x0000273D, + 10966: 0x00003041, + 10967: 0x00003042, + 10968: 0x00003043, + 10969: 0x00003044, + 10970: 0x00003045, + 10971: 0x00003046, + 10972: 0x00003047, + 10973: 0x00003048, + 10974: 0x00003049, + 10975: 0x0000304A, + 10976: 0x0000304B, + 10977: 0x0000304C, + 10978: 0x0000304D, + 10979: 0x0000304E, + 10980: 0x0000304F, + 10981: 0x00003050, + 10982: 0x00003051, + 10983: 0x00003052, + 10984: 0x00003053, + 10985: 0x00003054, + 10986: 0x00003055, + 10987: 0x00003056, + 10988: 0x00003057, + 10989: 0x00003058, + 10990: 0x00003059, + 10991: 0x0000305A, + 10992: 0x0000305B, + 10993: 0x0000305C, + 10994: 0x0000305D, + 10995: 0x0000305E, + 10996: 0x0000305F, + 10997: 0x00003060, + 10998: 0x00003061, + 10999: 0x00003062, + 11000: 0x00003063, + 11001: 0x00003064, + 11002: 0x00003065, + 11003: 0x00003066, + 11004: 0x00003067, + 11005: 0x00003068, + 11006: 0x00003069, + 11007: 0x0000306A, + 11008: 0x0000306B, + 11009: 0x0000306C, + 11010: 0x0000306D, + 11011: 0x0000306E, + 11012: 0x0000306F, + 11013: 0x00003070, + 11014: 0x00003071, + 11015: 0x00003072, + 11016: 0x00003073, + 11017: 0x00003074, + 11018: 0x00003075, + 11019: 0x00003076, + 11020: 0x00003077, + 11021: 0x00003078, + 11022: 0x00003079, + 11023: 0x0000307A, + 11024: 0x0000307B, + 11025: 0x0000307C, + 11026: 0x0000307D, + 11027: 0x0000307E, + 11028: 0x0000307F, + 11029: 0x00003080, + 11030: 0x00003081, + 11031: 0x00003082, + 11032: 0x00003083, + 11033: 0x00003084, + 11034: 0x00003085, + 11035: 0x00003086, + 11036: 0x00003087, + 11037: 0x00003088, + 11038: 0x00003089, + 11039: 0x0000308A, + 11040: 0x0000308B, + 11041: 0x0000308C, + 11042: 0x0000308D, + 11043: 0x0000308E, + 11044: 0x0000308F, + 11045: 0x00003090, + 11046: 0x00003091, + 11047: 0x00003092, + 11048: 0x00003093, + 11049: 0x000030A1, + 11050: 0x000030A2, + 11051: 0x000030A3, + 11052: 0x000030A4, + 11053: 0x000030A5, + 11054: 0x000030A6, + 11055: 0x000030A7, + 11056: 0x000030A8, + 11057: 0x000030A9, + 11058: 0x000030AA, + 11059: 0x000030AB, + 11060: 0x000030AC, + 11061: 0x000030AD, + 11062: 0x000030AE, + 11063: 0x000030AF, + 11064: 0x000030B0, + 11065: 0x000030B1, + 11066: 0x000030B2, + 11067: 0x000030B3, + 11068: 0x000030B4, + 11069: 0x000030B5, + 11070: 0x000030B6, + 11071: 0x000030B7, + 11072: 0x000030B8, + 11073: 0x000030B9, + 11074: 0x000030BA, + 11075: 0x000030BB, + 11076: 0x000030BC, + 11077: 0x000030BD, + 11078: 0x000030BE, + 11079: 0x000030BF, + 11080: 0x000030C0, + 11081: 0x000030C1, + 11082: 0x000030C2, + 11083: 0x000030C3, + 11084: 0x000030C4, + 11085: 0x000030C5, + 11086: 0x000030C6, + 11087: 0x000030C7, + 11088: 0x000030C8, + 11089: 0x000030C9, + 11090: 0x000030CA, + 11091: 0x000030CB, + 11092: 0x000030CC, + 11093: 0x000030CD, + 11094: 0x000030CE, + 11095: 0x000030CF, + 11096: 0x000030D0, + 11097: 0x000030D1, + 11098: 0x000030D2, + 11099: 0x000030D3, + 11100: 0x000030D4, + 11101: 0x000030D5, + 11102: 0x000030D6, + 11103: 0x000030D7, + 11104: 0x000030D8, + 11105: 0x000030D9, + 11106: 0x000030DA, + 11107: 0x000030DB, + 11108: 0x000030DC, + 11109: 0x000030DD, + 11110: 0x000030DE, + 11111: 0x000030DF, + 11112: 0x000030E0, + 11113: 0x000030E1, + 11114: 0x000030E2, + 11115: 0x000030E3, + 11116: 0x000030E4, + 11117: 0x000030E5, + 11118: 0x000030E6, + 11119: 0x000030E7, + 11120: 0x000030E8, + 11121: 0x000030E9, + 11122: 0x000030EA, + 11123: 0x000030EB, + 11124: 0x000030EC, + 11125: 0x000030ED, + 11126: 0x000030EE, + 11127: 0x000030EF, + 11128: 0x000030F0, + 11129: 0x000030F1, + 11130: 0x000030F2, + 11131: 0x000030F3, + 11132: 0x000030F4, + 11133: 0x000030F5, + 11134: 0x000030F6, + 11135: 0x00000410, + 11136: 0x00000411, + 11137: 0x00000412, + 11138: 0x00000413, + 11139: 0x00000414, + 11140: 0x00000415, + 11141: 0x00000401, + 11142: 0x00000416, + 11143: 0x00000417, + 11144: 0x00000418, + 11145: 0x00000419, + 11146: 0x0000041A, + 11147: 0x0000041B, + 11148: 0x0000041C, + 11149: 0x0000041D, + 11150: 0x0000041E, + 11151: 0x0000041F, + 11152: 0x00000420, + 11153: 0x00000421, + 11154: 0x00000422, + 11155: 0x00000423, + 11156: 0x00000424, + 11157: 0x00000425, + 11158: 0x00000426, + 11159: 0x00000427, + 11160: 0x00000428, + 11161: 0x00000429, + 11162: 0x0000042A, + 11163: 0x0000042B, + 11164: 0x0000042C, + 11165: 0x0000042D, + 11166: 0x0000042E, + 11167: 0x0000042F, + 11168: 0x00000430, + 11169: 0x00000431, + 11170: 0x00000432, + 11171: 0x00000433, + 11172: 0x00000434, + 11173: 0x00000435, + 11174: 0x00000451, + 11175: 0x00000436, + 11176: 0x00000437, + 11177: 0x00000438, + 11178: 0x00000439, + 11179: 0x0000043A, + 11180: 0x0000043B, + 11181: 0x0000043C, + 11182: 0x0000043D, + 11183: 0x0000043E, + 11184: 0x0000043F, + 11185: 0x00000440, + 11186: 0x00000441, + 11187: 0x00000442, + 11188: 0x00000443, + 11189: 0x00000444, + 11190: 0x00000445, + 11191: 0x00000446, + 11192: 0x00000447, + 11193: 0x00000448, + 11194: 0x00000449, + 11195: 0x0000044A, + 11196: 0x0000044B, + 11197: 0x0000044C, + 11198: 0x0000044D, + 11199: 0x0000044E, + 11200: 0x0000044F, + 11201: 0x000021E7, + 11202: 0x000021B8, + 11203: 0x000021B9, + 11204: 0x000031CF, + 11205: 0x000200CC, + 11206: 0x00004E5A, + 11207: 0x0002008A, + 11208: 0x00005202, + 11209: 0x00004491, + 11210: 0x00009FB0, + 11211: 0x00005188, + 11212: 0x00009FB1, + 11213: 0x00027607, + 11254: 0x0000FFE2, + 11255: 0x0000FFE4, + 11256: 0x0000FF07, + 11257: 0x0000FF02, + 11258: 0x00003231, + 11259: 0x00002116, + 11260: 0x00002121, + 11261: 0x0000309B, + 11262: 0x0000309C, + 11263: 0x00002E80, + 11264: 0x00002E84, + 11265: 0x00002E86, + 11266: 0x00002E87, + 11267: 0x00002E88, + 11268: 0x00002E8A, + 11269: 0x00002E8C, + 11270: 0x00002E8D, + 11271: 0x00002E95, + 11272: 0x00002E9C, + 11273: 0x00002E9D, + 11274: 0x00002EA5, + 11275: 0x00002EA7, + 11276: 0x00002EAA, + 11277: 0x00002EAC, + 11278: 0x00002EAE, + 11279: 0x00002EB6, + 11280: 0x00002EBC, + 11281: 0x00002EBE, + 11282: 0x00002EC6, + 11283: 0x00002ECA, + 11284: 0x00002ECC, + 11285: 0x00002ECD, + 11286: 0x00002ECF, + 11287: 0x00002ED6, + 11288: 0x00002ED7, + 11289: 0x00002EDE, + 11290: 0x00002EE3, + 11294: 0x00000283, + 11295: 0x00000250, + 11296: 0x0000025B, + 11297: 0x00000254, + 11298: 0x00000275, + 11299: 0x00000153, + 11300: 0x000000F8, + 11301: 0x0000014B, + 11302: 0x0000028A, + 11303: 0x0000026A, + 11304: 0x00004E42, + 11305: 0x00004E5C, + 11306: 0x000051F5, + 11307: 0x0000531A, + 11308: 0x00005382, + 11309: 0x00004E07, + 11310: 0x00004E0C, + 11311: 0x00004E47, + 11312: 0x00004E8D, + 11313: 0x000056D7, + 11314: 0x0000FA0C, + 11315: 0x00005C6E, + 11316: 0x00005F73, + 11317: 0x00004E0F, + 11318: 0x00005187, + 11319: 0x00004E0E, + 11320: 0x00004E2E, + 11321: 0x00004E93, + 11322: 0x00004EC2, + 11323: 0x00004EC9, + 11324: 0x00004EC8, + 11325: 0x00005198, + 11326: 0x000052FC, + 11327: 0x0000536C, + 11328: 0x000053B9, + 11329: 0x00005720, + 11330: 0x00005903, + 11331: 0x0000592C, + 11332: 0x00005C10, + 11333: 0x00005DFF, + 11334: 0x000065E1, + 11335: 0x00006BB3, + 11336: 0x00006BCC, + 11337: 0x00006C14, + 11338: 0x0000723F, + 11339: 0x00004E31, + 11340: 0x00004E3C, + 11341: 0x00004EE8, + 11342: 0x00004EDC, + 11343: 0x00004EE9, + 11344: 0x00004EE1, + 11345: 0x00004EDD, + 11346: 0x00004EDA, + 11347: 0x0000520C, + 11348: 0x0000531C, + 11349: 0x0000534C, + 11350: 0x00005722, + 11351: 0x00005723, + 11352: 0x00005917, + 11353: 0x0000592F, + 11354: 0x00005B81, + 11355: 0x00005B84, + 11356: 0x00005C12, + 11357: 0x00005C3B, + 11358: 0x00005C74, + 11359: 0x00005C73, + 11360: 0x00005E04, + 11361: 0x00005E80, + 11362: 0x00005E82, + 11363: 0x00005FC9, + 11364: 0x00006209, + 11365: 0x00006250, + 11366: 0x00006C15, + 11367: 0x00006C36, + 11368: 0x00006C43, + 11369: 0x00006C3F, + 11370: 0x00006C3B, + 11371: 0x000072AE, + 11372: 0x000072B0, + 11373: 0x0000738A, + 11374: 0x000079B8, + 11375: 0x0000808A, + 11376: 0x0000961E, + 11377: 0x00004F0E, + 11378: 0x00004F18, + 11379: 0x00004F2C, + 11380: 0x00004EF5, + 11381: 0x00004F14, + 11382: 0x00004EF1, + 11383: 0x00004F00, + 11384: 0x00004EF7, + 11385: 0x00004F08, + 11386: 0x00004F1D, + 11387: 0x00004F02, + 11388: 0x00004F05, + 11389: 0x00004F22, + 11390: 0x00004F13, + 11391: 0x00004F04, + 11392: 0x00004EF4, + 11393: 0x00004F12, + 11394: 0x000051B1, + 11395: 0x00005213, + 11396: 0x00005209, + 11397: 0x00005210, + 11398: 0x000052A6, + 11399: 0x00005322, + 11400: 0x0000531F, + 11401: 0x0000534D, + 11402: 0x0000538A, + 11403: 0x00005407, + 11404: 0x000056E1, + 11405: 0x000056DF, + 11406: 0x0000572E, + 11407: 0x0000572A, + 11408: 0x00005734, + 11409: 0x0000593C, + 11410: 0x00005980, + 11411: 0x0000597C, + 11412: 0x00005985, + 11413: 0x0000597B, + 11414: 0x0000597E, + 11415: 0x00005977, + 11416: 0x0000597F, + 11417: 0x00005B56, + 11418: 0x00005C15, + 11419: 0x00005C25, + 11420: 0x00005C7C, + 11421: 0x00005C7A, + 11422: 0x00005C7B, + 11423: 0x00005C7E, + 11424: 0x00005DDF, + 11425: 0x00005E75, + 11426: 0x00005E84, + 11427: 0x00005F02, + 11428: 0x00005F1A, + 11429: 0x00005F74, + 11430: 0x00005FD5, + 11431: 0x00005FD4, + 11432: 0x00005FCF, + 11433: 0x0000625C, + 11434: 0x0000625E, + 11435: 0x00006264, + 11436: 0x00006261, + 11437: 0x00006266, + 11438: 0x00006262, + 11439: 0x00006259, + 11440: 0x00006260, + 11441: 0x0000625A, + 11442: 0x00006265, + 11443: 0x000065EF, + 11444: 0x000065EE, + 11445: 0x0000673E, + 11446: 0x00006739, + 11447: 0x00006738, + 11448: 0x0000673B, + 11449: 0x0000673A, + 11450: 0x0000673F, + 11451: 0x0000673C, + 11452: 0x00006733, + 11453: 0x00006C18, + 11454: 0x00006C46, + 11455: 0x00006C52, + 11456: 0x00006C5C, + 11457: 0x00006C4F, + 11458: 0x00006C4A, + 11459: 0x00006C54, + 11460: 0x00006C4B, + 11461: 0x00006C4C, + 11462: 0x00007071, + 11463: 0x0000725E, + 11464: 0x000072B4, + 11465: 0x000072B5, + 11466: 0x0000738E, + 11467: 0x0000752A, + 11468: 0x0000767F, + 11469: 0x00007A75, + 11470: 0x00007F51, + 11471: 0x00008278, + 11472: 0x0000827C, + 11473: 0x00008280, + 11474: 0x0000827D, + 11475: 0x0000827F, + 11476: 0x0000864D, + 11477: 0x0000897E, + 11478: 0x00009099, + 11479: 0x00009097, + 11480: 0x00009098, + 11481: 0x0000909B, + 11482: 0x00009094, + 11483: 0x00009622, + 11484: 0x00009624, + 11485: 0x00009620, + 11486: 0x00009623, + 11487: 0x00004F56, + 11488: 0x00004F3B, + 11489: 0x00004F62, + 11490: 0x00004F49, + 11491: 0x00004F53, + 11492: 0x00004F64, + 11493: 0x00004F3E, + 11494: 0x00004F67, + 11495: 0x00004F52, + 11496: 0x00004F5F, + 11497: 0x00004F41, + 11498: 0x00004F58, + 11499: 0x00004F2D, + 11500: 0x00004F33, + 11501: 0x00004F3F, + 11502: 0x00004F61, + 11503: 0x0000518F, + 11504: 0x000051B9, + 11505: 0x0000521C, + 11506: 0x0000521E, + 11507: 0x00005221, + 11508: 0x000052AD, + 11509: 0x000052AE, + 11510: 0x00005309, + 11511: 0x00005363, + 11512: 0x00005372, + 11513: 0x0000538E, + 11514: 0x0000538F, + 11515: 0x00005430, + 11516: 0x00005437, + 11517: 0x0000542A, + 11518: 0x00005454, + 11519: 0x00005445, + 11520: 0x00005419, + 11521: 0x0000541C, + 11522: 0x00005425, + 11523: 0x00005418, + 11524: 0x0000543D, + 11525: 0x0000544F, + 11526: 0x00005441, + 11527: 0x00005428, + 11528: 0x00005424, + 11529: 0x00005447, + 11530: 0x000056EE, + 11531: 0x000056E7, + 11532: 0x000056E5, + 11533: 0x00005741, + 11534: 0x00005745, + 11535: 0x0000574C, + 11536: 0x00005749, + 11537: 0x0000574B, + 11538: 0x00005752, + 11539: 0x00005906, + 11540: 0x00005940, + 11541: 0x000059A6, + 11542: 0x00005998, + 11543: 0x000059A0, + 11544: 0x00005997, + 11545: 0x0000598E, + 11546: 0x000059A2, + 11547: 0x00005990, + 11548: 0x0000598F, + 11549: 0x000059A7, + 11550: 0x000059A1, + 11551: 0x00005B8E, + 11552: 0x00005B92, + 11553: 0x00005C28, + 11554: 0x00005C2A, + 11555: 0x00005C8D, + 11556: 0x00005C8F, + 11557: 0x00005C88, + 11558: 0x00005C8B, + 11559: 0x00005C89, + 11560: 0x00005C92, + 11561: 0x00005C8A, + 11562: 0x00005C86, + 11563: 0x00005C93, + 11564: 0x00005C95, + 11565: 0x00005DE0, + 11566: 0x00005E0A, + 11567: 0x00005E0E, + 11568: 0x00005E8B, + 11569: 0x00005E89, + 11570: 0x00005E8C, + 11571: 0x00005E88, + 11572: 0x00005E8D, + 11573: 0x00005F05, + 11574: 0x00005F1D, + 11575: 0x00005F78, + 11576: 0x00005F76, + 11577: 0x00005FD2, + 11578: 0x00005FD1, + 11579: 0x00005FD0, + 11580: 0x00005FED, + 11581: 0x00005FE8, + 11582: 0x00005FEE, + 11583: 0x00005FF3, + 11584: 0x00005FE1, + 11585: 0x00005FE4, + 11586: 0x00005FE3, + 11587: 0x00005FFA, + 11588: 0x00005FEF, + 11589: 0x00005FF7, + 11590: 0x00005FFB, + 11591: 0x00006000, + 11592: 0x00005FF4, + 11593: 0x0000623A, + 11594: 0x00006283, + 11595: 0x0000628C, + 11596: 0x0000628E, + 11597: 0x0000628F, + 11598: 0x00006294, + 11599: 0x00006287, + 11600: 0x00006271, + 11601: 0x0000627B, + 11602: 0x0000627A, + 11603: 0x00006270, + 11604: 0x00006281, + 11605: 0x00006288, + 11606: 0x00006277, + 11607: 0x0000627D, + 11608: 0x00006272, + 11609: 0x00006274, + 11610: 0x00006537, + 11611: 0x000065F0, + 11612: 0x000065F4, + 11613: 0x000065F3, + 11614: 0x000065F2, + 11615: 0x000065F5, + 11616: 0x00006745, + 11617: 0x00006747, + 11618: 0x00006759, + 11619: 0x00006755, + 11620: 0x0000674C, + 11621: 0x00006748, + 11622: 0x0000675D, + 11623: 0x0000674D, + 11624: 0x0000675A, + 11625: 0x0000674B, + 11626: 0x00006BD0, + 11627: 0x00006C19, + 11628: 0x00006C1A, + 11629: 0x00006C78, + 11630: 0x00006C67, + 11631: 0x00006C6B, + 11632: 0x00006C84, + 11633: 0x00006C8B, + 11634: 0x00006C8F, + 11635: 0x00006C71, + 11636: 0x00006C6F, + 11637: 0x00006C69, + 11638: 0x00006C9A, + 11639: 0x00006C6D, + 11640: 0x00006C87, + 11641: 0x00006C95, + 11642: 0x00006C9C, + 11643: 0x00006C66, + 11644: 0x00006C73, + 11645: 0x00006C65, + 11646: 0x00006C7B, + 11647: 0x00006C8E, + 11648: 0x00007074, + 11649: 0x0000707A, + 11650: 0x00007263, + 11651: 0x000072BF, + 11652: 0x000072BD, + 11653: 0x000072C3, + 11654: 0x000072C6, + 11655: 0x000072C1, + 11656: 0x000072BA, + 11657: 0x000072C5, + 11658: 0x00007395, + 11659: 0x00007397, + 11660: 0x00007393, + 11661: 0x00007394, + 11662: 0x00007392, + 11663: 0x0000753A, + 11664: 0x00007539, + 11665: 0x00007594, + 11666: 0x00007595, + 11667: 0x00007681, + 11668: 0x0000793D, + 11669: 0x00008034, + 11670: 0x00008095, + 11671: 0x00008099, + 11672: 0x00008090, + 11673: 0x00008092, + 11674: 0x0000809C, + 11675: 0x00008290, + 11676: 0x0000828F, + 11677: 0x00008285, + 11678: 0x0000828E, + 11679: 0x00008291, + 11680: 0x00008293, + 11681: 0x0000828A, + 11682: 0x00008283, + 11683: 0x00008284, + 11684: 0x00008C78, + 11685: 0x00008FC9, + 11686: 0x00008FBF, + 11687: 0x0000909F, + 11688: 0x000090A1, + 11689: 0x000090A5, + 11690: 0x0000909E, + 11691: 0x000090A7, + 11692: 0x000090A0, + 11693: 0x00009630, + 11694: 0x00009628, + 11695: 0x0000962F, + 11696: 0x0000962D, + 11697: 0x00004E33, + 11698: 0x00004F98, + 11699: 0x00004F7C, + 11700: 0x00004F85, + 11701: 0x00004F7D, + 11702: 0x00004F80, + 11703: 0x00004F87, + 11704: 0x00004F76, + 11705: 0x00004F74, + 11706: 0x00004F89, + 11707: 0x00004F84, + 11708: 0x00004F77, + 11709: 0x00004F4C, + 11710: 0x00004F97, + 11711: 0x00004F6A, + 11712: 0x00004F9A, + 11713: 0x00004F79, + 11714: 0x00004F81, + 11715: 0x00004F78, + 11716: 0x00004F90, + 11717: 0x00004F9C, + 11718: 0x00004F94, + 11719: 0x00004F9E, + 11720: 0x00004F92, + 11721: 0x00004F82, + 11722: 0x00004F95, + 11723: 0x00004F6B, + 11724: 0x00004F6E, + 11725: 0x0000519E, + 11726: 0x000051BC, + 11727: 0x000051BE, + 11728: 0x00005235, + 11729: 0x00005232, + 11730: 0x00005233, + 11731: 0x00005246, + 11732: 0x00005231, + 11733: 0x000052BC, + 11734: 0x0000530A, + 11735: 0x0000530B, + 11736: 0x0000533C, + 11737: 0x00005392, + 11738: 0x00005394, + 11739: 0x00005487, + 11740: 0x0000547F, + 11741: 0x00005481, + 11742: 0x00005491, + 11743: 0x00005482, + 11744: 0x00005488, + 11745: 0x0000546B, + 11746: 0x0000547A, + 11747: 0x0000547E, + 11748: 0x00005465, + 11749: 0x0000546C, + 11750: 0x00005474, + 11751: 0x00005466, + 11752: 0x0000548D, + 11753: 0x0000546F, + 11754: 0x00005461, + 11755: 0x00005460, + 11756: 0x00005498, + 11757: 0x00005463, + 11758: 0x00005467, + 11759: 0x00005464, + 11760: 0x000056F7, + 11761: 0x000056F9, + 11762: 0x0000576F, + 11763: 0x00005772, + 11764: 0x0000576D, + 11765: 0x0000576B, + 11766: 0x00005771, + 11767: 0x00005770, + 11768: 0x00005776, + 11769: 0x00005780, + 11770: 0x00005775, + 11771: 0x0000577B, + 11772: 0x00005773, + 11773: 0x00005774, + 11774: 0x00005762, + 11775: 0x00005768, + 11776: 0x0000577D, + 11777: 0x0000590C, + 11778: 0x00005945, + 11779: 0x000059B5, + 11780: 0x000059BA, + 11781: 0x000059CF, + 11782: 0x000059CE, + 11783: 0x000059B2, + 11784: 0x000059CC, + 11785: 0x000059C1, + 11786: 0x000059B6, + 11787: 0x000059BC, + 11788: 0x000059C3, + 11789: 0x000059D6, + 11790: 0x000059B1, + 11791: 0x000059BD, + 11792: 0x000059C0, + 11793: 0x000059C8, + 11794: 0x000059B4, + 11795: 0x000059C7, + 11796: 0x00005B62, + 11797: 0x00005B65, + 11798: 0x00005B93, + 11799: 0x00005B95, + 11800: 0x00005C44, + 11801: 0x00005C47, + 11802: 0x00005CAE, + 11803: 0x00005CA4, + 11804: 0x00005CA0, + 11805: 0x00005CB5, + 11806: 0x00005CAF, + 11807: 0x00005CA8, + 11808: 0x00005CAC, + 11809: 0x00005C9F, + 11810: 0x00005CA3, + 11811: 0x00005CAD, + 11812: 0x00005CA2, + 11813: 0x00005CAA, + 11814: 0x00005CA7, + 11815: 0x00005C9D, + 11816: 0x00005CA5, + 11817: 0x00005CB6, + 11818: 0x00005CB0, + 11819: 0x00005CA6, + 11820: 0x00005E17, + 11821: 0x00005E14, + 11822: 0x00005E19, + 11823: 0x00005F28, + 11824: 0x00005F22, + 11825: 0x00005F23, + 11826: 0x00005F24, + 11827: 0x00005F54, + 11828: 0x00005F82, + 11829: 0x00005F7E, + 11830: 0x00005F7D, + 11831: 0x00005FDE, + 11832: 0x00005FE5, + 11833: 0x0000602D, + 11834: 0x00006026, + 11835: 0x00006019, + 11836: 0x00006032, + 11837: 0x0000600B, + 11838: 0x00006034, + 11839: 0x0000600A, + 11840: 0x00006017, + 11841: 0x00006033, + 11842: 0x0000601A, + 11843: 0x0000601E, + 11844: 0x0000602C, + 11845: 0x00006022, + 11846: 0x0000600D, + 11847: 0x00006010, + 11848: 0x0000602E, + 11849: 0x00006013, + 11850: 0x00006011, + 11851: 0x0000600C, + 11852: 0x00006009, + 11853: 0x0000601C, + 11854: 0x00006214, + 11855: 0x0000623D, + 11856: 0x000062AD, + 11857: 0x000062B4, + 11858: 0x000062D1, + 11859: 0x000062BE, + 11860: 0x000062AA, + 11861: 0x000062B6, + 11862: 0x000062CA, + 11863: 0x000062AE, + 11864: 0x000062B3, + 11865: 0x000062AF, + 11866: 0x000062BB, + 11867: 0x000062A9, + 11868: 0x000062B0, + 11869: 0x000062B8, + 11870: 0x0000653D, + 11871: 0x000065A8, + 11872: 0x000065BB, + 11873: 0x00006609, + 11874: 0x000065FC, + 11875: 0x00006604, + 11876: 0x00006612, + 11877: 0x00006608, + 11878: 0x000065FB, + 11879: 0x00006603, + 11880: 0x0000660B, + 11881: 0x0000660D, + 11882: 0x00006605, + 11883: 0x000065FD, + 11884: 0x00006611, + 11885: 0x00006610, + 11886: 0x000066F6, + 11887: 0x0000670A, + 11888: 0x00006785, + 11889: 0x0000676C, + 11890: 0x0000678E, + 11891: 0x00006792, + 11892: 0x00006776, + 11893: 0x0000677B, + 11894: 0x00006798, + 11895: 0x00006786, + 11896: 0x00006784, + 11897: 0x00006774, + 11898: 0x0000678D, + 11899: 0x0000678C, + 11900: 0x0000677A, + 11901: 0x0000679F, + 11902: 0x00006791, + 11903: 0x00006799, + 11904: 0x00006783, + 11905: 0x0000677D, + 11906: 0x00006781, + 11907: 0x00006778, + 11908: 0x00006779, + 11909: 0x00006794, + 11910: 0x00006B25, + 11911: 0x00006B80, + 11912: 0x00006B7E, + 11913: 0x00006BDE, + 11914: 0x00006C1D, + 11915: 0x00006C93, + 11916: 0x00006CEC, + 11917: 0x00006CEB, + 11918: 0x00006CEE, + 11919: 0x00006CD9, + 11920: 0x00006CB6, + 11921: 0x00006CD4, + 11922: 0x00006CAD, + 11923: 0x00006CE7, + 11924: 0x00006CB7, + 11925: 0x00006CD0, + 11926: 0x00006CC2, + 11927: 0x00006CBA, + 11928: 0x00006CC3, + 11929: 0x00006CC6, + 11930: 0x00006CED, + 11931: 0x00006CF2, + 11932: 0x00006CD2, + 11933: 0x00006CDD, + 11934: 0x00006CB4, + 11935: 0x00006C8A, + 11936: 0x00006C9D, + 11937: 0x00006C80, + 11938: 0x00006CDE, + 11939: 0x00006CC0, + 11940: 0x00006D30, + 11941: 0x00006CCD, + 11942: 0x00006CC7, + 11943: 0x00006CB0, + 11944: 0x00006CF9, + 11945: 0x00006CCF, + 11946: 0x00006CE9, + 11947: 0x00006CD1, + 11948: 0x00007094, + 11949: 0x00007098, + 11950: 0x00007085, + 11951: 0x00007093, + 11952: 0x00007086, + 11953: 0x00007084, + 11954: 0x00007091, + 11955: 0x00007096, + 11956: 0x00007082, + 11957: 0x0000709A, + 11958: 0x00007083, + 11959: 0x0000726A, + 11960: 0x000072D6, + 11961: 0x000072CB, + 11962: 0x000072D8, + 11963: 0x000072C9, + 11964: 0x000072DC, + 11965: 0x000072D2, + 11966: 0x000072D4, + 11967: 0x000072DA, + 11968: 0x000072CC, + 11969: 0x000072D1, + 11970: 0x000073A4, + 11971: 0x000073A1, + 11972: 0x000073AD, + 11973: 0x000073A6, + 11974: 0x000073A2, + 11975: 0x000073A0, + 11976: 0x000073AC, + 11977: 0x0000739D, + 11978: 0x000074DD, + 11979: 0x000074E8, + 11980: 0x0000753F, + 11981: 0x00007540, + 11982: 0x0000753E, + 11983: 0x0000758C, + 11984: 0x00007598, + 11985: 0x000076AF, + 11986: 0x000076F3, + 11987: 0x000076F1, + 11988: 0x000076F0, + 11989: 0x000076F5, + 11990: 0x000077F8, + 11991: 0x000077FC, + 11992: 0x000077F9, + 11993: 0x000077FB, + 11994: 0x000077FA, + 11995: 0x000077F7, + 11996: 0x00007942, + 11997: 0x0000793F, + 11998: 0x000079C5, + 11999: 0x00007A78, + 12000: 0x00007A7B, + 12001: 0x00007AFB, + 12002: 0x00007C75, + 12003: 0x00007CFD, + 12004: 0x00008035, + 12005: 0x0000808F, + 12006: 0x000080AE, + 12007: 0x000080A3, + 12008: 0x000080B8, + 12009: 0x000080B5, + 12010: 0x000080AD, + 12011: 0x00008220, + 12012: 0x000082A0, + 12013: 0x000082C0, + 12014: 0x000082AB, + 12015: 0x0000829A, + 12016: 0x00008298, + 12017: 0x0000829B, + 12018: 0x000082B5, + 12019: 0x000082A7, + 12020: 0x000082AE, + 12021: 0x000082BC, + 12022: 0x0000829E, + 12023: 0x000082BA, + 12024: 0x000082B4, + 12025: 0x000082A8, + 12026: 0x000082A1, + 12027: 0x000082A9, + 12028: 0x000082C2, + 12029: 0x000082A4, + 12030: 0x000082C3, + 12031: 0x000082B6, + 12032: 0x000082A2, + 12033: 0x00008670, + 12034: 0x0000866F, + 12035: 0x0000866D, + 12036: 0x0000866E, + 12037: 0x00008C56, + 12038: 0x00008FD2, + 12039: 0x00008FCB, + 12040: 0x00008FD3, + 12041: 0x00008FCD, + 12042: 0x00008FD6, + 12043: 0x00008FD5, + 12044: 0x00008FD7, + 12045: 0x000090B2, + 12046: 0x000090B4, + 12047: 0x000090AF, + 12048: 0x000090B3, + 12049: 0x000090B0, + 12050: 0x00009639, + 12051: 0x0000963D, + 12052: 0x0000963C, + 12053: 0x0000963A, + 12054: 0x00009643, + 12055: 0x00004FCD, + 12056: 0x00004FC5, + 12057: 0x00004FD3, + 12058: 0x00004FB2, + 12059: 0x00004FC9, + 12060: 0x00004FCB, + 12061: 0x00004FC1, + 12062: 0x00004FD4, + 12063: 0x00004FDC, + 12064: 0x00004FD9, + 12065: 0x00004FBB, + 12066: 0x00004FB3, + 12067: 0x00004FDB, + 12068: 0x00004FC7, + 12069: 0x00004FD6, + 12070: 0x00004FBA, + 12071: 0x00004FC0, + 12072: 0x00004FB9, + 12073: 0x00004FEC, + 12074: 0x00005244, + 12075: 0x00005249, + 12076: 0x000052C0, + 12077: 0x000052C2, + 12078: 0x0000533D, + 12079: 0x0000537C, + 12080: 0x00005397, + 12081: 0x00005396, + 12082: 0x00005399, + 12083: 0x00005398, + 12084: 0x000054BA, + 12085: 0x000054A1, + 12086: 0x000054AD, + 12087: 0x000054A5, + 12088: 0x000054CF, + 12089: 0x000054C3, + 12090: 0x0000830D, + 12091: 0x000054B7, + 12092: 0x000054AE, + 12093: 0x000054D6, + 12094: 0x000054B6, + 12095: 0x000054C5, + 12096: 0x000054C6, + 12097: 0x000054A0, + 12098: 0x00005470, + 12099: 0x000054BC, + 12100: 0x000054A2, + 12101: 0x000054BE, + 12102: 0x00005472, + 12103: 0x000054DE, + 12104: 0x000054B0, + 12105: 0x000057B5, + 12106: 0x0000579E, + 12107: 0x0000579F, + 12108: 0x000057A4, + 12109: 0x0000578C, + 12110: 0x00005797, + 12111: 0x0000579D, + 12112: 0x0000579B, + 12113: 0x00005794, + 12114: 0x00005798, + 12115: 0x0000578F, + 12116: 0x00005799, + 12117: 0x000057A5, + 12118: 0x0000579A, + 12119: 0x00005795, + 12120: 0x000058F4, + 12121: 0x0000590D, + 12122: 0x00005953, + 12123: 0x000059E1, + 12124: 0x000059DE, + 12125: 0x000059EE, + 12126: 0x00005A00, + 12127: 0x000059F1, + 12128: 0x000059DD, + 12129: 0x000059FA, + 12130: 0x000059FD, + 12131: 0x000059FC, + 12132: 0x000059F6, + 12133: 0x000059E4, + 12134: 0x000059F2, + 12135: 0x000059F7, + 12136: 0x000059DB, + 12137: 0x000059E9, + 12138: 0x000059F3, + 12139: 0x000059F5, + 12140: 0x000059E0, + 12141: 0x000059FE, + 12142: 0x000059F4, + 12143: 0x000059ED, + 12144: 0x00005BA8, + 12145: 0x00005C4C, + 12146: 0x00005CD0, + 12147: 0x00005CD8, + 12148: 0x00005CCC, + 12149: 0x00005CD7, + 12150: 0x00005CCB, + 12151: 0x00005CDB, + 12152: 0x00005CDE, + 12153: 0x00005CDA, + 12154: 0x00005CC9, + 12155: 0x00005CC7, + 12156: 0x00005CCA, + 12157: 0x00005CD6, + 12158: 0x00005CD3, + 12159: 0x00005CD4, + 12160: 0x00005CCF, + 12161: 0x00005CC8, + 12162: 0x00005CC6, + 12163: 0x00005CCE, + 12164: 0x00005CDF, + 12165: 0x00005CF8, + 12166: 0x00005DF9, + 12167: 0x00005E21, + 12168: 0x00005E22, + 12169: 0x00005E23, + 12170: 0x00005E20, + 12171: 0x00005E24, + 12172: 0x00005EB0, + 12173: 0x00005EA4, + 12174: 0x00005EA2, + 12175: 0x00005E9B, + 12176: 0x00005EA3, + 12177: 0x00005EA5, + 12178: 0x00005F07, + 12179: 0x00005F2E, + 12180: 0x00005F56, + 12181: 0x00005F86, + 12182: 0x00006037, + 12183: 0x00006039, + 12184: 0x00006054, + 12185: 0x00006072, + 12186: 0x0000605E, + 12187: 0x00006045, + 12188: 0x00006053, + 12189: 0x00006047, + 12190: 0x00006049, + 12191: 0x0000605B, + 12192: 0x0000604C, + 12193: 0x00006040, + 12194: 0x00006042, + 12195: 0x0000605F, + 12196: 0x00006024, + 12197: 0x00006044, + 12198: 0x00006058, + 12199: 0x00006066, + 12200: 0x0000606E, + 12201: 0x00006242, + 12202: 0x00006243, + 12203: 0x000062CF, + 12204: 0x0000630D, + 12205: 0x0000630B, + 12206: 0x000062F5, + 12207: 0x0000630E, + 12208: 0x00006303, + 12209: 0x000062EB, + 12210: 0x000062F9, + 12211: 0x0000630F, + 12212: 0x0000630C, + 12213: 0x000062F8, + 12214: 0x000062F6, + 12215: 0x00006300, + 12216: 0x00006313, + 12217: 0x00006314, + 12218: 0x000062FA, + 12219: 0x00006315, + 12220: 0x000062FB, + 12221: 0x000062F0, + 12222: 0x00006541, + 12223: 0x00006543, + 12224: 0x000065AA, + 12225: 0x000065BF, + 12226: 0x00006636, + 12227: 0x00006621, + 12228: 0x00006632, + 12229: 0x00006635, + 12230: 0x0000661C, + 12231: 0x00006626, + 12232: 0x00006622, + 12233: 0x00006633, + 12234: 0x0000662B, + 12235: 0x0000663A, + 12236: 0x0000661D, + 12237: 0x00006634, + 12238: 0x00006639, + 12239: 0x0000662E, + 12240: 0x0000670F, + 12241: 0x00006710, + 12242: 0x000067C1, + 12243: 0x000067F2, + 12244: 0x000067C8, + 12245: 0x000067BA, + 12246: 0x000067DC, + 12247: 0x000067BB, + 12248: 0x000067F8, + 12249: 0x000067D8, + 12250: 0x000067C0, + 12251: 0x000067B7, + 12252: 0x000067C5, + 12253: 0x000067EB, + 12254: 0x000067E4, + 12255: 0x000067DF, + 12256: 0x000067B5, + 12257: 0x000067CD, + 12258: 0x000067B3, + 12259: 0x000067F7, + 12260: 0x000067F6, + 12261: 0x000067EE, + 12262: 0x000067E3, + 12263: 0x000067C2, + 12264: 0x000067B9, + 12265: 0x000067CE, + 12266: 0x000067E7, + 12267: 0x000067F0, + 12268: 0x000067B2, + 12269: 0x000067FC, + 12270: 0x000067C6, + 12271: 0x000067ED, + 12272: 0x000067CC, + 12273: 0x000067AE, + 12274: 0x000067E6, + 12275: 0x000067DB, + 12276: 0x000067FA, + 12277: 0x000067C9, + 12278: 0x000067CA, + 12279: 0x000067C3, + 12280: 0x000067EA, + 12281: 0x000067CB, + 12282: 0x00006B28, + 12283: 0x00006B82, + 12284: 0x00006B84, + 12285: 0x00006BB6, + 12286: 0x00006BD6, + 12287: 0x00006BD8, + 12288: 0x00006BE0, + 12289: 0x00006C20, + 12290: 0x00006C21, + 12291: 0x00006D28, + 12292: 0x00006D34, + 12293: 0x00006D2D, + 12294: 0x00006D1F, + 12295: 0x00006D3C, + 12296: 0x00006D3F, + 12297: 0x00006D12, + 12298: 0x00006D0A, + 12299: 0x00006CDA, + 12300: 0x00006D33, + 12301: 0x00006D04, + 12302: 0x00006D19, + 12303: 0x00006D3A, + 12304: 0x00006D1A, + 12305: 0x00006D11, + 12306: 0x00006D00, + 12307: 0x00006D1D, + 12308: 0x00006D42, + 12309: 0x00006D01, + 12310: 0x00006D18, + 12311: 0x00006D37, + 12312: 0x00006D03, + 12313: 0x00006D0F, + 12314: 0x00006D40, + 12315: 0x00006D07, + 12316: 0x00006D20, + 12317: 0x00006D2C, + 12318: 0x00006D08, + 12319: 0x00006D22, + 12320: 0x00006D09, + 12321: 0x00006D10, + 12322: 0x000070B7, + 12323: 0x0000709F, + 12324: 0x000070BE, + 12325: 0x000070B1, + 12326: 0x000070B0, + 12327: 0x000070A1, + 12328: 0x000070B4, + 12329: 0x000070B5, + 12330: 0x000070A9, + 12331: 0x00007241, + 12332: 0x00007249, + 12333: 0x0000724A, + 12334: 0x0000726C, + 12335: 0x00007270, + 12336: 0x00007273, + 12337: 0x0000726E, + 12338: 0x000072CA, + 12339: 0x000072E4, + 12340: 0x000072E8, + 12341: 0x000072EB, + 12342: 0x000072DF, + 12343: 0x000072EA, + 12344: 0x000072E6, + 12345: 0x000072E3, + 12346: 0x00007385, + 12347: 0x000073CC, + 12348: 0x000073C2, + 12349: 0x000073C8, + 12350: 0x000073C5, + 12351: 0x000073B9, + 12352: 0x000073B6, + 12353: 0x000073B5, + 12354: 0x000073B4, + 12355: 0x000073EB, + 12356: 0x000073BF, + 12357: 0x000073C7, + 12358: 0x000073BE, + 12359: 0x000073C3, + 12360: 0x000073C6, + 12361: 0x000073B8, + 12362: 0x000073CB, + 12363: 0x000074EC, + 12364: 0x000074EE, + 12365: 0x0000752E, + 12366: 0x00007547, + 12367: 0x00007548, + 12368: 0x000075A7, + 12369: 0x000075AA, + 12370: 0x00007679, + 12371: 0x000076C4, + 12372: 0x00007708, + 12373: 0x00007703, + 12374: 0x00007704, + 12375: 0x00007705, + 12376: 0x0000770A, + 12377: 0x000076F7, + 12378: 0x000076FB, + 12379: 0x000076FA, + 12380: 0x000077E7, + 12381: 0x000077E8, + 12382: 0x00007806, + 12383: 0x00007811, + 12384: 0x00007812, + 12385: 0x00007805, + 12386: 0x00007810, + 12387: 0x0000780F, + 12388: 0x0000780E, + 12389: 0x00007809, + 12390: 0x00007803, + 12391: 0x00007813, + 12392: 0x0000794A, + 12393: 0x0000794C, + 12394: 0x0000794B, + 12395: 0x00007945, + 12396: 0x00007944, + 12397: 0x000079D5, + 12398: 0x000079CD, + 12399: 0x000079CF, + 12400: 0x000079D6, + 12401: 0x000079CE, + 12402: 0x00007A80, + 12403: 0x00007A7E, + 12404: 0x00007AD1, + 12405: 0x00007B00, + 12406: 0x00007B01, + 12407: 0x00007C7A, + 12408: 0x00007C78, + 12409: 0x00007C79, + 12410: 0x00007C7F, + 12411: 0x00007C80, + 12412: 0x00007C81, + 12413: 0x00007D03, + 12414: 0x00007D08, + 12415: 0x00007D01, + 12416: 0x00007F58, + 12417: 0x00007F91, + 12418: 0x00007F8D, + 12419: 0x00007FBE, + 12420: 0x00008007, + 12421: 0x0000800E, + 12422: 0x0000800F, + 12423: 0x00008014, + 12424: 0x00008037, + 12425: 0x000080D8, + 12426: 0x000080C7, + 12427: 0x000080E0, + 12428: 0x000080D1, + 12429: 0x000080C8, + 12430: 0x000080C2, + 12431: 0x000080D0, + 12432: 0x000080C5, + 12433: 0x000080E3, + 12434: 0x000080D9, + 12435: 0x000080DC, + 12436: 0x000080CA, + 12437: 0x000080D5, + 12438: 0x000080C9, + 12439: 0x000080CF, + 12440: 0x000080D7, + 12441: 0x000080E6, + 12442: 0x000080CD, + 12443: 0x000081FF, + 12444: 0x00008221, + 12445: 0x00008294, + 12446: 0x000082D9, + 12447: 0x000082FE, + 12448: 0x000082F9, + 12449: 0x00008307, + 12450: 0x000082E8, + 12451: 0x00008300, + 12452: 0x000082D5, + 12453: 0x0000833A, + 12454: 0x000082EB, + 12455: 0x000082D6, + 12456: 0x000082F4, + 12457: 0x000082EC, + 12458: 0x000082E1, + 12459: 0x000082F2, + 12460: 0x000082F5, + 12461: 0x0000830C, + 12462: 0x000082FB, + 12463: 0x000082F6, + 12464: 0x000082F0, + 12465: 0x000082EA, + 12466: 0x000082E4, + 12467: 0x000082E0, + 12468: 0x000082FA, + 12469: 0x000082F3, + 12470: 0x000082ED, + 12471: 0x00008677, + 12472: 0x00008674, + 12473: 0x0000867C, + 12474: 0x00008673, + 12475: 0x00008841, + 12476: 0x0000884E, + 12477: 0x00008867, + 12478: 0x0000886A, + 12479: 0x00008869, + 12480: 0x000089D3, + 12481: 0x00008A04, + 12482: 0x00008A07, + 12483: 0x00008D72, + 12484: 0x00008FE3, + 12485: 0x00008FE1, + 12486: 0x00008FEE, + 12487: 0x00008FE0, + 12488: 0x000090F1, + 12489: 0x000090BD, + 12490: 0x000090BF, + 12491: 0x000090D5, + 12492: 0x000090C5, + 12493: 0x000090BE, + 12494: 0x000090C7, + 12495: 0x000090CB, + 12496: 0x000090C8, + 12497: 0x000091D4, + 12498: 0x000091D3, + 12499: 0x00009654, + 12500: 0x0000964F, + 12501: 0x00009651, + 12502: 0x00009653, + 12503: 0x0000964A, + 12504: 0x0000964E, + 12505: 0x0000501E, + 12506: 0x00005005, + 12507: 0x00005007, + 12508: 0x00005013, + 12509: 0x00005022, + 12510: 0x00005030, + 12511: 0x0000501B, + 12512: 0x00004FF5, + 12513: 0x00004FF4, + 12514: 0x00005033, + 12515: 0x00005037, + 12516: 0x0000502C, + 12517: 0x00004FF6, + 12518: 0x00004FF7, + 12519: 0x00005017, + 12520: 0x0000501C, + 12521: 0x00005020, + 12522: 0x00005027, + 12523: 0x00005035, + 12524: 0x0000502F, + 12525: 0x00005031, + 12526: 0x0000500E, + 12527: 0x0000515A, + 12528: 0x00005194, + 12529: 0x00005193, + 12530: 0x000051CA, + 12531: 0x000051C4, + 12532: 0x000051C5, + 12533: 0x000051C8, + 12534: 0x000051CE, + 12535: 0x00005261, + 12536: 0x0000525A, + 12537: 0x00005252, + 12538: 0x0000525E, + 12539: 0x0000525F, + 12540: 0x00005255, + 12541: 0x00005262, + 12542: 0x000052CD, + 12543: 0x0000530E, + 12544: 0x0000539E, + 12545: 0x00005526, + 12546: 0x000054E2, + 12547: 0x00005517, + 12548: 0x00005512, + 12549: 0x000054E7, + 12550: 0x000054F3, + 12551: 0x000054E4, + 12552: 0x0000551A, + 12553: 0x000054FF, + 12554: 0x00005504, + 12555: 0x00005508, + 12556: 0x000054EB, + 12557: 0x00005511, + 12558: 0x00005505, + 12559: 0x000054F1, + 12560: 0x0000550A, + 12561: 0x000054FB, + 12562: 0x000054F7, + 12563: 0x000054F8, + 12564: 0x000054E0, + 12565: 0x0000550E, + 12566: 0x00005503, + 12567: 0x0000550B, + 12568: 0x00005701, + 12569: 0x00005702, + 12570: 0x000057CC, + 12571: 0x00005832, + 12572: 0x000057D5, + 12573: 0x000057D2, + 12574: 0x000057BA, + 12575: 0x000057C6, + 12576: 0x000057BD, + 12577: 0x000057BC, + 12578: 0x000057B8, + 12579: 0x000057B6, + 12580: 0x000057BF, + 12581: 0x000057C7, + 12582: 0x000057D0, + 12583: 0x000057B9, + 12584: 0x000057C1, + 12585: 0x0000590E, + 12586: 0x0000594A, + 12587: 0x00005A19, + 12588: 0x00005A16, + 12589: 0x00005A2D, + 12590: 0x00005A2E, + 12591: 0x00005A15, + 12592: 0x00005A0F, + 12593: 0x00005A17, + 12594: 0x00005A0A, + 12595: 0x00005A1E, + 12596: 0x00005A33, + 12597: 0x00005B6C, + 12598: 0x00005BA7, + 12599: 0x00005BAD, + 12600: 0x00005BAC, + 12601: 0x00005C03, + 12602: 0x00005C56, + 12603: 0x00005C54, + 12604: 0x00005CEC, + 12605: 0x00005CFF, + 12606: 0x00005CEE, + 12607: 0x00005CF1, + 12608: 0x00005CF7, + 12609: 0x00005D00, + 12610: 0x00005CF9, + 12611: 0x00005E29, + 12612: 0x00005E28, + 12613: 0x00005EA8, + 12614: 0x00005EAE, + 12615: 0x00005EAA, + 12616: 0x00005EAC, + 12617: 0x00005F33, + 12618: 0x00005F30, + 12619: 0x00005F67, + 12620: 0x0000605D, + 12621: 0x0000605A, + 12622: 0x00006067, + 12623: 0x00006041, + 12624: 0x000060A2, + 12625: 0x00006088, + 12626: 0x00006080, + 12627: 0x00006092, + 12628: 0x00006081, + 12629: 0x0000609D, + 12630: 0x00006083, + 12631: 0x00006095, + 12632: 0x0000609B, + 12633: 0x00006097, + 12634: 0x00006087, + 12635: 0x0000609C, + 12636: 0x0000608E, + 12637: 0x00006219, + 12638: 0x00006246, + 12639: 0x000062F2, + 12640: 0x00006310, + 12641: 0x00006356, + 12642: 0x0000632C, + 12643: 0x00006344, + 12644: 0x00006345, + 12645: 0x00006336, + 12646: 0x00006343, + 12647: 0x000063E4, + 12648: 0x00006339, + 12649: 0x0000634B, + 12650: 0x0000634A, + 12651: 0x0000633C, + 12652: 0x00006329, + 12653: 0x00006341, + 12654: 0x00006334, + 12655: 0x00006358, + 12656: 0x00006354, + 12657: 0x00006359, + 12658: 0x0000632D, + 12659: 0x00006347, + 12660: 0x00006333, + 12661: 0x0000635A, + 12662: 0x00006351, + 12663: 0x00006338, + 12664: 0x00006357, + 12665: 0x00006340, + 12666: 0x00006348, + 12667: 0x0000654A, + 12668: 0x00006546, + 12669: 0x000065C6, + 12670: 0x000065C3, + 12671: 0x000065C4, + 12672: 0x000065C2, + 12673: 0x0000664A, + 12674: 0x0000665F, + 12675: 0x00006647, + 12676: 0x00006651, + 12677: 0x00006712, + 12678: 0x00006713, + 12679: 0x0000681F, + 12680: 0x0000681A, + 12681: 0x00006849, + 12682: 0x00006832, + 12683: 0x00006833, + 12684: 0x0000683B, + 12685: 0x0000684B, + 12686: 0x0000684F, + 12687: 0x00006816, + 12688: 0x00006831, + 12689: 0x0000681C, + 12690: 0x00006835, + 12691: 0x0000682B, + 12692: 0x0000682D, + 12693: 0x0000682F, + 12694: 0x0000684E, + 12695: 0x00006844, + 12696: 0x00006834, + 12697: 0x0000681D, + 12698: 0x00006812, + 12699: 0x00006814, + 12700: 0x00006826, + 12701: 0x00006828, + 12702: 0x0000682E, + 12703: 0x0000684D, + 12704: 0x0000683A, + 12705: 0x00006825, + 12706: 0x00006820, + 12707: 0x00006B2C, + 12708: 0x00006B2F, + 12709: 0x00006B2D, + 12710: 0x00006B31, + 12711: 0x00006B34, + 12712: 0x00006B6D, + 12713: 0x00008082, + 12714: 0x00006B88, + 12715: 0x00006BE6, + 12716: 0x00006BE4, + 12717: 0x00006BE8, + 12718: 0x00006BE3, + 12719: 0x00006BE2, + 12720: 0x00006BE7, + 12721: 0x00006C25, + 12722: 0x00006D7A, + 12723: 0x00006D63, + 12724: 0x00006D64, + 12725: 0x00006D76, + 12726: 0x00006D0D, + 12727: 0x00006D61, + 12728: 0x00006D92, + 12729: 0x00006D58, + 12730: 0x00006D62, + 12731: 0x00006D6D, + 12732: 0x00006D6F, + 12733: 0x00006D91, + 12734: 0x00006D8D, + 12735: 0x00006DEF, + 12736: 0x00006D7F, + 12737: 0x00006D86, + 12738: 0x00006D5E, + 12739: 0x00006D67, + 12740: 0x00006D60, + 12741: 0x00006D97, + 12742: 0x00006D70, + 12743: 0x00006D7C, + 12744: 0x00006D5F, + 12745: 0x00006D82, + 12746: 0x00006D98, + 12747: 0x00006D2F, + 12748: 0x00006D68, + 12749: 0x00006D8B, + 12750: 0x00006D7E, + 12751: 0x00006D80, + 12752: 0x00006D84, + 12753: 0x00006D16, + 12754: 0x00006D83, + 12755: 0x00006D7B, + 12756: 0x00006D7D, + 12757: 0x00006D75, + 12758: 0x00006D90, + 12759: 0x000070DC, + 12760: 0x000070D3, + 12761: 0x000070D1, + 12762: 0x000070DD, + 12763: 0x000070CB, + 12764: 0x00007F39, + 12765: 0x000070E2, + 12766: 0x000070D7, + 12767: 0x000070D2, + 12768: 0x000070DE, + 12769: 0x000070E0, + 12770: 0x000070D4, + 12771: 0x000070CD, + 12772: 0x000070C5, + 12773: 0x000070C6, + 12774: 0x000070C7, + 12775: 0x000070DA, + 12776: 0x000070CE, + 12777: 0x000070E1, + 12778: 0x00007242, + 12779: 0x00007278, + 12780: 0x00007277, + 12781: 0x00007276, + 12782: 0x00007300, + 12783: 0x000072FA, + 12784: 0x000072F4, + 12785: 0x000072FE, + 12786: 0x000072F6, + 12787: 0x000072F3, + 12788: 0x000072FB, + 12789: 0x00007301, + 12790: 0x000073D3, + 12791: 0x000073D9, + 12792: 0x000073E5, + 12793: 0x000073D6, + 12794: 0x000073BC, + 12795: 0x000073E7, + 12796: 0x000073E3, + 12797: 0x000073E9, + 12798: 0x000073DC, + 12799: 0x000073D2, + 12800: 0x000073DB, + 12801: 0x000073D4, + 12802: 0x000073DD, + 12803: 0x000073DA, + 12804: 0x000073D7, + 12805: 0x000073D8, + 12806: 0x000073E8, + 12807: 0x000074DE, + 12808: 0x000074DF, + 12809: 0x000074F4, + 12810: 0x000074F5, + 12811: 0x00007521, + 12812: 0x0000755B, + 12813: 0x0000755F, + 12814: 0x000075B0, + 12815: 0x000075C1, + 12816: 0x000075BB, + 12817: 0x000075C4, + 12818: 0x000075C0, + 12819: 0x000075BF, + 12820: 0x000075B6, + 12821: 0x000075BA, + 12822: 0x0000768A, + 12823: 0x000076C9, + 12824: 0x0000771D, + 12825: 0x0000771B, + 12826: 0x00007710, + 12827: 0x00007713, + 12828: 0x00007712, + 12829: 0x00007723, + 12830: 0x00007711, + 12831: 0x00007715, + 12832: 0x00007719, + 12833: 0x0000771A, + 12834: 0x00007722, + 12835: 0x00007727, + 12836: 0x00007823, + 12837: 0x0000782C, + 12838: 0x00007822, + 12839: 0x00007835, + 12840: 0x0000782F, + 12841: 0x00007828, + 12842: 0x0000782E, + 12843: 0x0000782B, + 12844: 0x00007821, + 12845: 0x00007829, + 12846: 0x00007833, + 12847: 0x0000782A, + 12848: 0x00007831, + 12849: 0x00007954, + 12850: 0x0000795B, + 12851: 0x0000794F, + 12852: 0x0000795C, + 12853: 0x00007953, + 12854: 0x00007952, + 12855: 0x00007951, + 12856: 0x000079EB, + 12857: 0x000079EC, + 12858: 0x000079E0, + 12859: 0x000079EE, + 12860: 0x000079ED, + 12861: 0x000079EA, + 12862: 0x000079DC, + 12863: 0x000079DE, + 12864: 0x000079DD, + 12865: 0x00007A86, + 12866: 0x00007A89, + 12867: 0x00007A85, + 12868: 0x00007A8B, + 12869: 0x00007A8C, + 12870: 0x00007A8A, + 12871: 0x00007A87, + 12872: 0x00007AD8, + 12873: 0x00007B10, + 12874: 0x00007B04, + 12875: 0x00007B13, + 12876: 0x00007B05, + 12877: 0x00007B0F, + 12878: 0x00007B08, + 12879: 0x00007B0A, + 12880: 0x00007B0E, + 12881: 0x00007B09, + 12882: 0x00007B12, + 12883: 0x00007C84, + 12884: 0x00007C91, + 12885: 0x00007C8A, + 12886: 0x00007C8C, + 12887: 0x00007C88, + 12888: 0x00007C8D, + 12889: 0x00007C85, + 12890: 0x00007D1E, + 12891: 0x00007D1D, + 12892: 0x00007D11, + 12893: 0x00007D0E, + 12894: 0x00007D18, + 12895: 0x00007D16, + 12896: 0x00007D13, + 12897: 0x00007D1F, + 12898: 0x00007D12, + 12899: 0x00007D0F, + 12900: 0x00007D0C, + 12901: 0x00007F5C, + 12902: 0x00007F61, + 12903: 0x00007F5E, + 12904: 0x00007F60, + 12905: 0x00007F5D, + 12906: 0x00007F5B, + 12907: 0x00007F96, + 12908: 0x00007F92, + 12909: 0x00007FC3, + 12910: 0x00007FC2, + 12911: 0x00007FC0, + 12912: 0x00008016, + 12913: 0x0000803E, + 12914: 0x00008039, + 12915: 0x000080FA, + 12916: 0x000080F2, + 12917: 0x000080F9, + 12918: 0x000080F5, + 12919: 0x00008101, + 12920: 0x000080FB, + 12921: 0x00008100, + 12922: 0x00008201, + 12923: 0x0000822F, + 12924: 0x00008225, + 12925: 0x00008333, + 12926: 0x0000832D, + 12927: 0x00008344, + 12928: 0x00008319, + 12929: 0x00008351, + 12930: 0x00008325, + 12931: 0x00008356, + 12932: 0x0000833F, + 12933: 0x00008341, + 12934: 0x00008326, + 12935: 0x0000831C, + 12936: 0x00008322, + 12937: 0x00008342, + 12938: 0x0000834E, + 12939: 0x0000831B, + 12940: 0x0000832A, + 12941: 0x00008308, + 12942: 0x0000833C, + 12943: 0x0000834D, + 12944: 0x00008316, + 12945: 0x00008324, + 12946: 0x00008320, + 12947: 0x00008337, + 12948: 0x0000832F, + 12949: 0x00008329, + 12950: 0x00008347, + 12951: 0x00008345, + 12952: 0x0000834C, + 12953: 0x00008353, + 12954: 0x0000831E, + 12955: 0x0000832C, + 12956: 0x0000834B, + 12957: 0x00008327, + 12958: 0x00008348, + 12959: 0x00008653, + 12960: 0x00008652, + 12961: 0x000086A2, + 12962: 0x000086A8, + 12963: 0x00008696, + 12964: 0x0000868D, + 12965: 0x00008691, + 12966: 0x0000869E, + 12967: 0x00008687, + 12968: 0x00008697, + 12969: 0x00008686, + 12970: 0x0000868B, + 12971: 0x0000869A, + 12972: 0x00008685, + 12973: 0x000086A5, + 12974: 0x00008699, + 12975: 0x000086A1, + 12976: 0x000086A7, + 12977: 0x00008695, + 12978: 0x00008698, + 12979: 0x0000868E, + 12980: 0x0000869D, + 12981: 0x00008690, + 12982: 0x00008694, + 12983: 0x00008843, + 12984: 0x00008844, + 12985: 0x0000886D, + 12986: 0x00008875, + 12987: 0x00008876, + 12988: 0x00008872, + 12989: 0x00008880, + 12990: 0x00008871, + 12991: 0x0000887F, + 12992: 0x0000886F, + 12993: 0x00008883, + 12994: 0x0000887E, + 12995: 0x00008874, + 12996: 0x0000887C, + 12997: 0x00008A12, + 12998: 0x00008C47, + 12999: 0x00008C57, + 13000: 0x00008C7B, + 13001: 0x00008CA4, + 13002: 0x00008CA3, + 13003: 0x00008D76, + 13004: 0x00008D78, + 13005: 0x00008DB5, + 13006: 0x00008DB7, + 13007: 0x00008DB6, + 13008: 0x00008ED1, + 13009: 0x00008ED3, + 13010: 0x00008FFE, + 13011: 0x00008FF5, + 13012: 0x00009002, + 13013: 0x00008FFF, + 13014: 0x00008FFB, + 13015: 0x00009004, + 13016: 0x00008FFC, + 13017: 0x00008FF6, + 13018: 0x000090D6, + 13019: 0x000090E0, + 13020: 0x000090D9, + 13021: 0x000090DA, + 13022: 0x000090E3, + 13023: 0x000090DF, + 13024: 0x000090E5, + 13025: 0x000090D8, + 13026: 0x000090DB, + 13027: 0x000090D7, + 13028: 0x000090DC, + 13029: 0x000090E4, + 13030: 0x00009150, + 13031: 0x0000914E, + 13032: 0x0000914F, + 13033: 0x000091D5, + 13034: 0x000091E2, + 13035: 0x000091DA, + 13036: 0x0000965C, + 13037: 0x0000965F, + 13038: 0x000096BC, + 13039: 0x000098E3, + 13040: 0x00009ADF, + 13041: 0x00009B2F, + 13042: 0x00004E7F, + 13043: 0x00005070, + 13044: 0x0000506A, + 13045: 0x00005061, + 13046: 0x0000505E, + 13047: 0x00005060, + 13048: 0x00005053, + 13049: 0x0000504B, + 13050: 0x0000505D, + 13051: 0x00005072, + 13052: 0x00005048, + 13053: 0x0000504D, + 13054: 0x00005041, + 13055: 0x0000505B, + 13056: 0x0000504A, + 13057: 0x00005062, + 13058: 0x00005015, + 13059: 0x00005045, + 13060: 0x0000505F, + 13061: 0x00005069, + 13062: 0x0000506B, + 13063: 0x00005063, + 13064: 0x00005064, + 13065: 0x00005046, + 13066: 0x00005040, + 13067: 0x0000506E, + 13068: 0x00005073, + 13069: 0x00005057, + 13070: 0x00005051, + 13071: 0x000051D0, + 13072: 0x0000526B, + 13073: 0x0000526D, + 13074: 0x0000526C, + 13075: 0x0000526E, + 13076: 0x000052D6, + 13077: 0x000052D3, + 13078: 0x0000532D, + 13079: 0x0000539C, + 13080: 0x00005575, + 13081: 0x00005576, + 13082: 0x0000553C, + 13083: 0x0000554D, + 13084: 0x00005550, + 13085: 0x00005534, + 13086: 0x0000552A, + 13087: 0x00005551, + 13088: 0x00005562, + 13089: 0x00005536, + 13090: 0x00005535, + 13091: 0x00005530, + 13092: 0x00005552, + 13093: 0x00005545, + 13094: 0x0000550C, + 13095: 0x00005532, + 13096: 0x00005565, + 13097: 0x0000554E, + 13098: 0x00005539, + 13099: 0x00005548, + 13100: 0x0000552D, + 13101: 0x0000553B, + 13102: 0x00005540, + 13103: 0x0000554B, + 13104: 0x0000570A, + 13105: 0x00005707, + 13106: 0x000057FB, + 13107: 0x00005814, + 13108: 0x000057E2, + 13109: 0x000057F6, + 13110: 0x000057DC, + 13111: 0x000057F4, + 13112: 0x00005800, + 13113: 0x000057ED, + 13114: 0x000057FD, + 13115: 0x00005808, + 13116: 0x000057F8, + 13117: 0x0000580B, + 13118: 0x000057F3, + 13119: 0x000057CF, + 13120: 0x00005807, + 13121: 0x000057EE, + 13122: 0x000057E3, + 13123: 0x000057F2, + 13124: 0x000057E5, + 13125: 0x000057EC, + 13126: 0x000057E1, + 13127: 0x0000580E, + 13128: 0x000057FC, + 13129: 0x00005810, + 13130: 0x000057E7, + 13131: 0x00005801, + 13132: 0x0000580C, + 13133: 0x000057F1, + 13134: 0x000057E9, + 13135: 0x000057F0, + 13136: 0x0000580D, + 13137: 0x00005804, + 13138: 0x0000595C, + 13139: 0x00005A60, + 13140: 0x00005A58, + 13141: 0x00005A55, + 13142: 0x00005A67, + 13143: 0x00005A5E, + 13144: 0x00005A38, + 13145: 0x00005A35, + 13146: 0x00005A6D, + 13147: 0x00005A50, + 13148: 0x00005A5F, + 13149: 0x00005A65, + 13150: 0x00005A6C, + 13151: 0x00005A53, + 13152: 0x00005A64, + 13153: 0x00005A57, + 13154: 0x00005A43, + 13155: 0x00005A5D, + 13156: 0x00005A52, + 13157: 0x00005A44, + 13158: 0x00005A5B, + 13159: 0x00005A48, + 13160: 0x00005A8E, + 13161: 0x00005A3E, + 13162: 0x00005A4D, + 13163: 0x00005A39, + 13164: 0x00005A4C, + 13165: 0x00005A70, + 13166: 0x00005A69, + 13167: 0x00005A47, + 13168: 0x00005A51, + 13169: 0x00005A56, + 13170: 0x00005A42, + 13171: 0x00005A5C, + 13172: 0x00005B72, + 13173: 0x00005B6E, + 13174: 0x00005BC1, + 13175: 0x00005BC0, + 13176: 0x00005C59, + 13177: 0x00005D1E, + 13178: 0x00005D0B, + 13179: 0x00005D1D, + 13180: 0x00005D1A, + 13181: 0x00005D20, + 13182: 0x00005D0C, + 13183: 0x00005D28, + 13184: 0x00005D0D, + 13185: 0x00005D26, + 13186: 0x00005D25, + 13187: 0x00005D0F, + 13188: 0x00005D30, + 13189: 0x00005D12, + 13190: 0x00005D23, + 13191: 0x00005D1F, + 13192: 0x00005D2E, + 13193: 0x00005E3E, + 13194: 0x00005E34, + 13195: 0x00005EB1, + 13196: 0x00005EB4, + 13197: 0x00005EB9, + 13198: 0x00005EB2, + 13199: 0x00005EB3, + 13200: 0x00005F36, + 13201: 0x00005F38, + 13202: 0x00005F9B, + 13203: 0x00005F96, + 13204: 0x00005F9F, + 13205: 0x0000608A, + 13206: 0x00006090, + 13207: 0x00006086, + 13208: 0x000060BE, + 13209: 0x000060B0, + 13210: 0x000060BA, + 13211: 0x000060D3, + 13212: 0x000060D4, + 13213: 0x000060CF, + 13214: 0x000060E4, + 13215: 0x000060D9, + 13216: 0x000060DD, + 13217: 0x000060C8, + 13218: 0x000060B1, + 13219: 0x000060DB, + 13220: 0x000060B7, + 13221: 0x000060CA, + 13222: 0x000060BF, + 13223: 0x000060C3, + 13224: 0x000060CD, + 13225: 0x000060C0, + 13226: 0x00006332, + 13227: 0x00006365, + 13228: 0x0000638A, + 13229: 0x00006382, + 13230: 0x0000637D, + 13231: 0x000063BD, + 13232: 0x0000639E, + 13233: 0x000063AD, + 13234: 0x0000639D, + 13235: 0x00006397, + 13236: 0x000063AB, + 13237: 0x0000638E, + 13238: 0x0000636F, + 13239: 0x00006387, + 13240: 0x00006390, + 13241: 0x0000636E, + 13242: 0x000063AF, + 13243: 0x00006375, + 13244: 0x0000639C, + 13245: 0x0000636D, + 13246: 0x000063AE, + 13247: 0x0000637C, + 13248: 0x000063A4, + 13249: 0x0000633B, + 13250: 0x0000639F, + 13251: 0x00006378, + 13252: 0x00006385, + 13253: 0x00006381, + 13254: 0x00006391, + 13255: 0x0000638D, + 13256: 0x00006370, + 13257: 0x00006553, + 13258: 0x000065CD, + 13259: 0x00006665, + 13260: 0x00006661, + 13261: 0x0000665B, + 13262: 0x00006659, + 13263: 0x0000665C, + 13264: 0x00006662, + 13265: 0x00006718, + 13266: 0x00006879, + 13267: 0x00006887, + 13268: 0x00006890, + 13269: 0x0000689C, + 13270: 0x0000686D, + 13271: 0x0000686E, + 13272: 0x000068AE, + 13273: 0x000068AB, + 13274: 0x00006956, + 13275: 0x0000686F, + 13276: 0x000068A3, + 13277: 0x000068AC, + 13278: 0x000068A9, + 13279: 0x00006875, + 13280: 0x00006874, + 13281: 0x000068B2, + 13282: 0x0000688F, + 13283: 0x00006877, + 13284: 0x00006892, + 13285: 0x0000687C, + 13286: 0x0000686B, + 13287: 0x00006872, + 13288: 0x000068AA, + 13289: 0x00006880, + 13290: 0x00006871, + 13291: 0x0000687E, + 13292: 0x0000689B, + 13293: 0x00006896, + 13294: 0x0000688B, + 13295: 0x000068A0, + 13296: 0x00006889, + 13297: 0x000068A4, + 13298: 0x00006878, + 13299: 0x0000687B, + 13300: 0x00006891, + 13301: 0x0000688C, + 13302: 0x0000688A, + 13303: 0x0000687D, + 13304: 0x00006B36, + 13305: 0x00006B33, + 13306: 0x00006B37, + 13307: 0x00006B38, + 13308: 0x00006B91, + 13309: 0x00006B8F, + 13310: 0x00006B8D, + 13311: 0x00006B8E, + 13312: 0x00006B8C, + 13313: 0x00006C2A, + 13314: 0x00006DC0, + 13315: 0x00006DAB, + 13316: 0x00006DB4, + 13317: 0x00006DB3, + 13318: 0x00006E74, + 13319: 0x00006DAC, + 13320: 0x00006DE9, + 13321: 0x00006DE2, + 13322: 0x00006DB7, + 13323: 0x00006DF6, + 13324: 0x00006DD4, + 13325: 0x00006E00, + 13326: 0x00006DC8, + 13327: 0x00006DE0, + 13328: 0x00006DDF, + 13329: 0x00006DD6, + 13330: 0x00006DBE, + 13331: 0x00006DE5, + 13332: 0x00006DDC, + 13333: 0x00006DDD, + 13334: 0x00006DDB, + 13335: 0x00006DF4, + 13336: 0x00006DCA, + 13337: 0x00006DBD, + 13338: 0x00006DED, + 13339: 0x00006DF0, + 13340: 0x00006DBA, + 13341: 0x00006DD5, + 13342: 0x00006DC2, + 13343: 0x00006DCF, + 13344: 0x00006DC9, + 13345: 0x00006DD0, + 13346: 0x00006DF2, + 13347: 0x00006DD3, + 13348: 0x00006DFD, + 13349: 0x00006DD7, + 13350: 0x00006DCD, + 13351: 0x00006DE3, + 13352: 0x00006DBB, + 13353: 0x000070FA, + 13354: 0x0000710D, + 13355: 0x000070F7, + 13356: 0x00007117, + 13357: 0x000070F4, + 13358: 0x0000710C, + 13359: 0x000070F0, + 13360: 0x00007104, + 13361: 0x000070F3, + 13362: 0x00007110, + 13363: 0x000070FC, + 13364: 0x000070FF, + 13365: 0x00007106, + 13366: 0x00007113, + 13367: 0x00007100, + 13368: 0x000070F8, + 13369: 0x000070F6, + 13370: 0x0000710B, + 13371: 0x00007102, + 13372: 0x0000710E, + 13373: 0x0000727E, + 13374: 0x0000727B, + 13375: 0x0000727C, + 13376: 0x0000727F, + 13377: 0x0000731D, + 13378: 0x00007317, + 13379: 0x00007307, + 13380: 0x00007311, + 13381: 0x00007318, + 13382: 0x0000730A, + 13383: 0x00007308, + 13384: 0x000072FF, + 13385: 0x0000730F, + 13386: 0x0000731E, + 13387: 0x00007388, + 13388: 0x000073F6, + 13389: 0x000073F8, + 13390: 0x000073F5, + 13391: 0x00007404, + 13392: 0x00007401, + 13393: 0x000073FD, + 13394: 0x00007407, + 13395: 0x00007400, + 13396: 0x000073FA, + 13397: 0x000073FC, + 13398: 0x000073FF, + 13399: 0x0000740C, + 13400: 0x0000740B, + 13401: 0x000073F4, + 13402: 0x00007408, + 13403: 0x00007564, + 13404: 0x00007563, + 13405: 0x000075CE, + 13406: 0x000075D2, + 13407: 0x000075CF, + 13408: 0x000075CB, + 13409: 0x000075CC, + 13410: 0x000075D1, + 13411: 0x000075D0, + 13412: 0x0000768F, + 13413: 0x00007689, + 13414: 0x000076D3, + 13415: 0x00007739, + 13416: 0x0000772F, + 13417: 0x0000772D, + 13418: 0x00007731, + 13419: 0x00007732, + 13420: 0x00007734, + 13421: 0x00007733, + 13422: 0x0000773D, + 13423: 0x00007725, + 13424: 0x0000773B, + 13425: 0x00007735, + 13426: 0x00007848, + 13427: 0x00007852, + 13428: 0x00007849, + 13429: 0x0000784D, + 13430: 0x0000784A, + 13431: 0x0000784C, + 13432: 0x00007826, + 13433: 0x00007845, + 13434: 0x00007850, + 13435: 0x00007964, + 13436: 0x00007967, + 13437: 0x00007969, + 13438: 0x0000796A, + 13439: 0x00007963, + 13440: 0x0000796B, + 13441: 0x00007961, + 13442: 0x000079BB, + 13443: 0x000079FA, + 13444: 0x000079F8, + 13445: 0x000079F6, + 13446: 0x000079F7, + 13447: 0x00007A8F, + 13448: 0x00007A94, + 13449: 0x00007A90, + 13450: 0x00007B35, + 13451: 0x00007B47, + 13452: 0x00007B34, + 13453: 0x00007B25, + 13454: 0x00007B30, + 13455: 0x00007B22, + 13456: 0x00007B24, + 13457: 0x00007B33, + 13458: 0x00007B18, + 13459: 0x00007B2A, + 13460: 0x00007B1D, + 13461: 0x00007B31, + 13462: 0x00007B2B, + 13463: 0x00007B2D, + 13464: 0x00007B2F, + 13465: 0x00007B32, + 13466: 0x00007B38, + 13467: 0x00007B1A, + 13468: 0x00007B23, + 13469: 0x00007C94, + 13470: 0x00007C98, + 13471: 0x00007C96, + 13472: 0x00007CA3, + 13473: 0x00007D35, + 13474: 0x00007D3D, + 13475: 0x00007D38, + 13476: 0x00007D36, + 13477: 0x00007D3A, + 13478: 0x00007D45, + 13479: 0x00007D2C, + 13480: 0x00007D29, + 13481: 0x00007D41, + 13482: 0x00007D47, + 13483: 0x00007D3E, + 13484: 0x00007D3F, + 13485: 0x00007D4A, + 13486: 0x00007D3B, + 13487: 0x00007D28, + 13488: 0x00007F63, + 13489: 0x00007F95, + 13490: 0x00007F9C, + 13491: 0x00007F9D, + 13492: 0x00007F9B, + 13493: 0x00007FCA, + 13494: 0x00007FCB, + 13495: 0x00007FCD, + 13496: 0x00007FD0, + 13497: 0x00007FD1, + 13498: 0x00007FC7, + 13499: 0x00007FCF, + 13500: 0x00007FC9, + 13501: 0x0000801F, + 13502: 0x0000801E, + 13503: 0x0000801B, + 13504: 0x00008047, + 13505: 0x00008043, + 13506: 0x00008048, + 13507: 0x00008118, + 13508: 0x00008125, + 13509: 0x00008119, + 13510: 0x0000811B, + 13511: 0x0000812D, + 13512: 0x0000811F, + 13513: 0x0000812C, + 13514: 0x0000811E, + 13515: 0x00008121, + 13516: 0x00008115, + 13517: 0x00008127, + 13518: 0x0000811D, + 13519: 0x00008122, + 13520: 0x00008211, + 13521: 0x00008238, + 13522: 0x00008233, + 13523: 0x0000823A, + 13524: 0x00008234, + 13525: 0x00008232, + 13526: 0x00008274, + 13527: 0x00008390, + 13528: 0x000083A3, + 13529: 0x000083A8, + 13530: 0x0000838D, + 13531: 0x0000837A, + 13532: 0x00008373, + 13533: 0x000083A4, + 13534: 0x00008374, + 13535: 0x0000838F, + 13536: 0x00008381, + 13537: 0x00008395, + 13538: 0x00008399, + 13539: 0x00008375, + 13540: 0x00008394, + 13541: 0x000083A9, + 13542: 0x0000837D, + 13543: 0x00008383, + 13544: 0x0000838C, + 13545: 0x0000839D, + 13546: 0x0000839B, + 13547: 0x000083AA, + 13548: 0x0000838B, + 13549: 0x0000837E, + 13550: 0x000083A5, + 13551: 0x000083AF, + 13552: 0x00008388, + 13553: 0x00008397, + 13554: 0x000083B0, + 13555: 0x0000837F, + 13556: 0x000083A6, + 13557: 0x00008387, + 13558: 0x000083AE, + 13559: 0x00008376, + 13560: 0x0000839A, + 13561: 0x00008659, + 13562: 0x00008656, + 13563: 0x000086BF, + 13564: 0x000086B7, + 13565: 0x000086C2, + 13566: 0x000086C1, + 13567: 0x000086C5, + 13568: 0x000086BA, + 13569: 0x000086B0, + 13570: 0x000086C8, + 13571: 0x000086B9, + 13572: 0x000086B3, + 13573: 0x000086B8, + 13574: 0x000086CC, + 13575: 0x000086B4, + 13576: 0x000086BB, + 13577: 0x000086BC, + 13578: 0x000086C3, + 13579: 0x000086BD, + 13580: 0x000086BE, + 13581: 0x00008852, + 13582: 0x00008889, + 13583: 0x00008895, + 13584: 0x000088A8, + 13585: 0x000088A2, + 13586: 0x000088AA, + 13587: 0x0000889A, + 13588: 0x00008891, + 13589: 0x000088A1, + 13590: 0x0000889F, + 13591: 0x00008898, + 13592: 0x000088A7, + 13593: 0x00008899, + 13594: 0x0000889B, + 13595: 0x00008897, + 13596: 0x000088A4, + 13597: 0x000088AC, + 13598: 0x0000888C, + 13599: 0x00008893, + 13600: 0x0000888E, + 13601: 0x00008982, + 13602: 0x000089D6, + 13603: 0x000089D9, + 13604: 0x000089D5, + 13605: 0x00008A30, + 13606: 0x00008A27, + 13607: 0x00008A2C, + 13608: 0x00008A1E, + 13609: 0x00008C39, + 13610: 0x00008C3B, + 13611: 0x00008C5C, + 13612: 0x00008C5D, + 13613: 0x00008C7D, + 13614: 0x00008CA5, + 13615: 0x00008D7D, + 13616: 0x00008D7B, + 13617: 0x00008D79, + 13618: 0x00008DBC, + 13619: 0x00008DC2, + 13620: 0x00008DB9, + 13621: 0x00008DBF, + 13622: 0x00008DC1, + 13623: 0x00008ED8, + 13624: 0x00008EDE, + 13625: 0x00008EDD, + 13626: 0x00008EDC, + 13627: 0x00008ED7, + 13628: 0x00008EE0, + 13629: 0x00008EE1, + 13630: 0x00009024, + 13631: 0x0000900B, + 13632: 0x00009011, + 13633: 0x0000901C, + 13634: 0x0000900C, + 13635: 0x00009021, + 13636: 0x000090EF, + 13637: 0x000090EA, + 13638: 0x000090F0, + 13639: 0x000090F4, + 13640: 0x000090F2, + 13641: 0x000090F3, + 13642: 0x000090D4, + 13643: 0x000090EB, + 13644: 0x000090EC, + 13645: 0x000090E9, + 13646: 0x00009156, + 13647: 0x00009158, + 13648: 0x0000915A, + 13649: 0x00009153, + 13650: 0x00009155, + 13651: 0x000091EC, + 13652: 0x000091F4, + 13653: 0x000091F1, + 13654: 0x000091F3, + 13655: 0x000091F8, + 13656: 0x000091E4, + 13657: 0x000091F9, + 13658: 0x000091EA, + 13659: 0x000091EB, + 13660: 0x000091F7, + 13661: 0x000091E8, + 13662: 0x000091EE, + 13663: 0x0000957A, + 13664: 0x00009586, + 13665: 0x00009588, + 13666: 0x0000967C, + 13667: 0x0000966D, + 13668: 0x0000966B, + 13669: 0x00009671, + 13670: 0x0000966F, + 13671: 0x000096BF, + 13672: 0x0000976A, + 13673: 0x00009804, + 13674: 0x000098E5, + 13675: 0x00009997, + 13676: 0x0000509B, + 13677: 0x00005095, + 13678: 0x00005094, + 13679: 0x0000509E, + 13680: 0x0000508B, + 13681: 0x000050A3, + 13682: 0x00005083, + 13683: 0x0000508C, + 13684: 0x0000508E, + 13685: 0x0000509D, + 13686: 0x00005068, + 13687: 0x0000509C, + 13688: 0x00005092, + 13689: 0x00005082, + 13690: 0x00005087, + 13691: 0x0000515F, + 13692: 0x000051D4, + 13693: 0x00005312, + 13694: 0x00005311, + 13695: 0x000053A4, + 13696: 0x000053A7, + 13697: 0x00005591, + 13698: 0x000055A8, + 13699: 0x000055A5, + 13700: 0x000055AD, + 13701: 0x00005577, + 13702: 0x00005645, + 13703: 0x000055A2, + 13704: 0x00005593, + 13705: 0x00005588, + 13706: 0x0000558F, + 13707: 0x000055B5, + 13708: 0x00005581, + 13709: 0x000055A3, + 13710: 0x00005592, + 13711: 0x000055A4, + 13712: 0x0000557D, + 13713: 0x0000558C, + 13714: 0x000055A6, + 13715: 0x0000557F, + 13716: 0x00005595, + 13717: 0x000055A1, + 13718: 0x0000558E, + 13719: 0x0000570C, + 13720: 0x00005829, + 13721: 0x00005837, + 13722: 0x00005819, + 13723: 0x0000581E, + 13724: 0x00005827, + 13725: 0x00005823, + 13726: 0x00005828, + 13727: 0x000057F5, + 13728: 0x00005848, + 13729: 0x00005825, + 13730: 0x0000581C, + 13731: 0x0000581B, + 13732: 0x00005833, + 13733: 0x0000583F, + 13734: 0x00005836, + 13735: 0x0000582E, + 13736: 0x00005839, + 13737: 0x00005838, + 13738: 0x0000582D, + 13739: 0x0000582C, + 13740: 0x0000583B, + 13741: 0x00005961, + 13742: 0x00005AAF, + 13743: 0x00005A94, + 13744: 0x00005A9F, + 13745: 0x00005A7A, + 13746: 0x00005AA2, + 13747: 0x00005A9E, + 13748: 0x00005A78, + 13749: 0x00005AA6, + 13750: 0x00005A7C, + 13751: 0x00005AA5, + 13752: 0x00005AAC, + 13753: 0x00005A95, + 13754: 0x00005AAE, + 13755: 0x00005A37, + 13756: 0x00005A84, + 13757: 0x00005A8A, + 13758: 0x00005A97, + 13759: 0x00005A83, + 13760: 0x00005A8B, + 13761: 0x00005AA9, + 13762: 0x00005A7B, + 13763: 0x00005A7D, + 13764: 0x00005A8C, + 13765: 0x00005A9C, + 13766: 0x00005A8F, + 13767: 0x00005A93, + 13768: 0x00005A9D, + 13769: 0x00005BEA, + 13770: 0x00005BCD, + 13771: 0x00005BCB, + 13772: 0x00005BD4, + 13773: 0x00005BD1, + 13774: 0x00005BCA, + 13775: 0x00005BCE, + 13776: 0x00005C0C, + 13777: 0x00005C30, + 13778: 0x00005D37, + 13779: 0x00005D43, + 13780: 0x00005D6B, + 13781: 0x00005D41, + 13782: 0x00005D4B, + 13783: 0x00005D3F, + 13784: 0x00005D35, + 13785: 0x00005D51, + 13786: 0x00005D4E, + 13787: 0x00005D55, + 13788: 0x00005D33, + 13789: 0x00005D3A, + 13790: 0x00005D52, + 13791: 0x00005D3D, + 13792: 0x00005D31, + 13793: 0x00005D59, + 13794: 0x00005D42, + 13795: 0x00005D39, + 13796: 0x00005D49, + 13797: 0x00005D38, + 13798: 0x00005D3C, + 13799: 0x00005D32, + 13800: 0x00005D36, + 13801: 0x00005D40, + 13802: 0x00005D45, + 13803: 0x00005E44, + 13804: 0x00005E41, + 13805: 0x00005F58, + 13806: 0x00005FA6, + 13807: 0x00005FA5, + 13808: 0x00005FAB, + 13809: 0x000060C9, + 13810: 0x000060B9, + 13811: 0x000060CC, + 13812: 0x000060E2, + 13813: 0x000060CE, + 13814: 0x000060C4, + 13815: 0x00006114, + 13816: 0x000060F2, + 13817: 0x0000610A, + 13818: 0x00006116, + 13819: 0x00006105, + 13820: 0x000060F5, + 13821: 0x00006113, + 13822: 0x000060F8, + 13823: 0x000060FC, + 13824: 0x000060FE, + 13825: 0x000060C1, + 13826: 0x00006103, + 13827: 0x00006118, + 13828: 0x0000611D, + 13829: 0x00006110, + 13830: 0x000060FF, + 13831: 0x00006104, + 13832: 0x0000610B, + 13833: 0x0000624A, + 13834: 0x00006394, + 13835: 0x000063B1, + 13836: 0x000063B0, + 13837: 0x000063CE, + 13838: 0x000063E5, + 13839: 0x000063E8, + 13840: 0x000063EF, + 13841: 0x000063C3, + 13842: 0x0000649D, + 13843: 0x000063F3, + 13844: 0x000063CA, + 13845: 0x000063E0, + 13846: 0x000063F6, + 13847: 0x000063D5, + 13848: 0x000063F2, + 13849: 0x000063F5, + 13850: 0x00006461, + 13851: 0x000063DF, + 13852: 0x000063BE, + 13853: 0x000063DD, + 13854: 0x000063DC, + 13855: 0x000063C4, + 13856: 0x000063D8, + 13857: 0x000063D3, + 13858: 0x000063C2, + 13859: 0x000063C7, + 13860: 0x000063CC, + 13861: 0x000063CB, + 13862: 0x000063C8, + 13863: 0x000063F0, + 13864: 0x000063D7, + 13865: 0x000063D9, + 13866: 0x00006532, + 13867: 0x00006567, + 13868: 0x0000656A, + 13869: 0x00006564, + 13870: 0x0000655C, + 13871: 0x00006568, + 13872: 0x00006565, + 13873: 0x0000658C, + 13874: 0x0000659D, + 13875: 0x0000659E, + 13876: 0x000065AE, + 13877: 0x000065D0, + 13878: 0x000065D2, + 13879: 0x0000667C, + 13880: 0x0000666C, + 13881: 0x0000667B, + 13882: 0x00006680, + 13883: 0x00006671, + 13884: 0x00006679, + 13885: 0x0000666A, + 13886: 0x00006672, + 13887: 0x00006701, + 13888: 0x0000690C, + 13889: 0x000068D3, + 13890: 0x00006904, + 13891: 0x000068DC, + 13892: 0x0000692A, + 13893: 0x000068EC, + 13894: 0x000068EA, + 13895: 0x000068F1, + 13896: 0x0000690F, + 13897: 0x000068D6, + 13898: 0x000068F7, + 13899: 0x000068EB, + 13900: 0x000068E4, + 13901: 0x000068F6, + 13902: 0x00006913, + 13903: 0x00006910, + 13904: 0x000068F3, + 13905: 0x000068E1, + 13906: 0x00006907, + 13907: 0x000068CC, + 13908: 0x00006908, + 13909: 0x00006970, + 13910: 0x000068B4, + 13911: 0x00006911, + 13912: 0x000068EF, + 13913: 0x000068C6, + 13914: 0x00006914, + 13915: 0x000068F8, + 13916: 0x000068D0, + 13917: 0x000068FD, + 13918: 0x000068FC, + 13919: 0x000068E8, + 13920: 0x0000690B, + 13921: 0x0000690A, + 13922: 0x00006917, + 13923: 0x000068CE, + 13924: 0x000068C8, + 13925: 0x000068DD, + 13926: 0x000068DE, + 13927: 0x000068E6, + 13928: 0x000068F4, + 13929: 0x000068D1, + 13930: 0x00006906, + 13931: 0x000068D4, + 13932: 0x000068E9, + 13933: 0x00006915, + 13934: 0x00006925, + 13935: 0x000068C7, + 13936: 0x00006B39, + 13937: 0x00006B3B, + 13938: 0x00006B3F, + 13939: 0x00006B3C, + 13940: 0x00006B94, + 13941: 0x00006B97, + 13942: 0x00006B99, + 13943: 0x00006B95, + 13944: 0x00006BBD, + 13945: 0x00006BF0, + 13946: 0x00006BF2, + 13947: 0x00006BF3, + 13948: 0x00006C30, + 13949: 0x00006DFC, + 13950: 0x00006E46, + 13951: 0x00006E47, + 13952: 0x00006E1F, + 13953: 0x00006E49, + 13954: 0x00006E88, + 13955: 0x00006E3C, + 13956: 0x00006E3D, + 13957: 0x00006E45, + 13958: 0x00006E62, + 13959: 0x00006E2B, + 13960: 0x00006E3F, + 13961: 0x00006E41, + 13962: 0x00006E5D, + 13963: 0x00006E73, + 13964: 0x00006E1C, + 13965: 0x00006E33, + 13966: 0x00006E4B, + 13967: 0x00006E40, + 13968: 0x00006E51, + 13969: 0x00006E3B, + 13970: 0x00006E03, + 13971: 0x00006E2E, + 13972: 0x00006E5E, + 13973: 0x00006E68, + 13974: 0x00006E5C, + 13975: 0x00006E61, + 13976: 0x00006E31, + 13977: 0x00006E28, + 13978: 0x00006E60, + 13979: 0x00006E71, + 13980: 0x00006E6B, + 13981: 0x00006E39, + 13982: 0x00006E22, + 13983: 0x00006E30, + 13984: 0x00006E53, + 13985: 0x00006E65, + 13986: 0x00006E27, + 13987: 0x00006E78, + 13988: 0x00006E64, + 13989: 0x00006E77, + 13990: 0x00006E55, + 13991: 0x00006E79, + 13992: 0x00006E52, + 13993: 0x00006E66, + 13994: 0x00006E35, + 13995: 0x00006E36, + 13996: 0x00006E5A, + 13997: 0x00007120, + 13998: 0x0000711E, + 13999: 0x0000712F, + 14000: 0x000070FB, + 14001: 0x0000712E, + 14002: 0x00007131, + 14003: 0x00007123, + 14004: 0x00007125, + 14005: 0x00007122, + 14006: 0x00007132, + 14007: 0x0000711F, + 14008: 0x00007128, + 14009: 0x0000713A, + 14010: 0x0000711B, + 14011: 0x0000724B, + 14012: 0x0000725A, + 14013: 0x00007288, + 14014: 0x00007289, + 14015: 0x00007286, + 14016: 0x00007285, + 14017: 0x0000728B, + 14018: 0x00007312, + 14019: 0x0000730B, + 14020: 0x00007330, + 14021: 0x00007322, + 14022: 0x00007331, + 14023: 0x00007333, + 14024: 0x00007327, + 14025: 0x00007332, + 14026: 0x0000732D, + 14027: 0x00007326, + 14028: 0x00007323, + 14029: 0x00007335, + 14030: 0x0000730C, + 14031: 0x0000742E, + 14032: 0x0000742C, + 14033: 0x00007430, + 14034: 0x0000742B, + 14035: 0x00007416, + 14036: 0x0000741A, + 14037: 0x00007421, + 14038: 0x0000742D, + 14039: 0x00007431, + 14040: 0x00007424, + 14041: 0x00007423, + 14042: 0x0000741D, + 14043: 0x00007429, + 14044: 0x00007420, + 14045: 0x00007432, + 14046: 0x000074FB, + 14047: 0x0000752F, + 14048: 0x0000756F, + 14049: 0x0000756C, + 14050: 0x000075E7, + 14051: 0x000075DA, + 14052: 0x000075E1, + 14053: 0x000075E6, + 14054: 0x000075DD, + 14055: 0x000075DF, + 14056: 0x000075E4, + 14057: 0x000075D7, + 14058: 0x00007695, + 14059: 0x00007692, + 14060: 0x000076DA, + 14061: 0x00007746, + 14062: 0x00007747, + 14063: 0x00007744, + 14064: 0x0000774D, + 14065: 0x00007745, + 14066: 0x0000774A, + 14067: 0x0000774E, + 14068: 0x0000774B, + 14069: 0x0000774C, + 14070: 0x000077DE, + 14071: 0x000077EC, + 14072: 0x00007860, + 14073: 0x00007864, + 14074: 0x00007865, + 14075: 0x0000785C, + 14076: 0x0000786D, + 14077: 0x00007871, + 14078: 0x0000786A, + 14079: 0x0000786E, + 14080: 0x00007870, + 14081: 0x00007869, + 14082: 0x00007868, + 14083: 0x0000785E, + 14084: 0x00007862, + 14085: 0x00007974, + 14086: 0x00007973, + 14087: 0x00007972, + 14088: 0x00007970, + 14089: 0x00007A02, + 14090: 0x00007A0A, + 14091: 0x00007A03, + 14092: 0x00007A0C, + 14093: 0x00007A04, + 14094: 0x00007A99, + 14095: 0x00007AE6, + 14096: 0x00007AE4, + 14097: 0x00007B4A, + 14098: 0x00007B3B, + 14099: 0x00007B44, + 14100: 0x00007B48, + 14101: 0x00007B4C, + 14102: 0x00007B4E, + 14103: 0x00007B40, + 14104: 0x00007B58, + 14105: 0x00007B45, + 14106: 0x00007CA2, + 14107: 0x00007C9E, + 14108: 0x00007CA8, + 14109: 0x00007CA1, + 14110: 0x00007D58, + 14111: 0x00007D6F, + 14112: 0x00007D63, + 14113: 0x00007D53, + 14114: 0x00007D56, + 14115: 0x00007D67, + 14116: 0x00007D6A, + 14117: 0x00007D4F, + 14118: 0x00007D6D, + 14119: 0x00007D5C, + 14120: 0x00007D6B, + 14121: 0x00007D52, + 14122: 0x00007D54, + 14123: 0x00007D69, + 14124: 0x00007D51, + 14125: 0x00007D5F, + 14126: 0x00007D4E, + 14127: 0x00007F3E, + 14128: 0x00007F3F, + 14129: 0x00007F65, + 14130: 0x00007F66, + 14131: 0x00007FA2, + 14132: 0x00007FA0, + 14133: 0x00007FA1, + 14134: 0x00007FD7, + 14135: 0x00008051, + 14136: 0x0000804F, + 14137: 0x00008050, + 14138: 0x000080FE, + 14139: 0x000080D4, + 14140: 0x00008143, + 14141: 0x0000814A, + 14142: 0x00008152, + 14143: 0x0000814F, + 14144: 0x00008147, + 14145: 0x0000813D, + 14146: 0x0000814D, + 14147: 0x0000813A, + 14148: 0x000081E6, + 14149: 0x000081EE, + 14150: 0x000081F7, + 14151: 0x000081F8, + 14152: 0x000081F9, + 14153: 0x00008204, + 14154: 0x0000823C, + 14155: 0x0000823D, + 14156: 0x0000823F, + 14157: 0x00008275, + 14158: 0x0000833B, + 14159: 0x000083CF, + 14160: 0x000083F9, + 14161: 0x00008423, + 14162: 0x000083C0, + 14163: 0x000083E8, + 14164: 0x00008412, + 14165: 0x000083E7, + 14166: 0x000083E4, + 14167: 0x000083FC, + 14168: 0x000083F6, + 14169: 0x00008410, + 14170: 0x000083C6, + 14171: 0x000083C8, + 14172: 0x000083EB, + 14173: 0x000083E3, + 14174: 0x000083BF, + 14175: 0x00008401, + 14176: 0x000083DD, + 14177: 0x000083E5, + 14178: 0x000083D8, + 14179: 0x000083FF, + 14180: 0x000083E1, + 14181: 0x000083CB, + 14182: 0x000083CE, + 14183: 0x000083D6, + 14184: 0x000083F5, + 14185: 0x000083C9, + 14186: 0x00008409, + 14187: 0x0000840F, + 14188: 0x000083DE, + 14189: 0x00008411, + 14190: 0x00008406, + 14191: 0x000083C2, + 14192: 0x000083F3, + 14193: 0x000083D5, + 14194: 0x000083FA, + 14195: 0x000083C7, + 14196: 0x000083D1, + 14197: 0x000083EA, + 14198: 0x00008413, + 14199: 0x000083C3, + 14200: 0x000083EC, + 14201: 0x000083EE, + 14202: 0x000083C4, + 14203: 0x000083FB, + 14204: 0x000083D7, + 14205: 0x000083E2, + 14206: 0x0000841B, + 14207: 0x000083DB, + 14208: 0x000083FE, + 14209: 0x000086D8, + 14210: 0x000086E2, + 14211: 0x000086E6, + 14212: 0x000086D3, + 14213: 0x000086E3, + 14214: 0x000086DA, + 14215: 0x000086EA, + 14216: 0x000086DD, + 14217: 0x000086EB, + 14218: 0x000086DC, + 14219: 0x000086EC, + 14220: 0x000086E9, + 14221: 0x000086D7, + 14222: 0x000086E8, + 14223: 0x000086D1, + 14224: 0x00008848, + 14225: 0x00008856, + 14226: 0x00008855, + 14227: 0x000088BA, + 14228: 0x000088D7, + 14229: 0x000088B9, + 14230: 0x000088B8, + 14231: 0x000088C0, + 14232: 0x000088BE, + 14233: 0x000088B6, + 14234: 0x000088BC, + 14235: 0x000088B7, + 14236: 0x000088BD, + 14237: 0x000088B2, + 14238: 0x00008901, + 14239: 0x000088C9, + 14240: 0x00008995, + 14241: 0x00008998, + 14242: 0x00008997, + 14243: 0x000089DD, + 14244: 0x000089DA, + 14245: 0x000089DB, + 14246: 0x00008A4E, + 14247: 0x00008A4D, + 14248: 0x00008A39, + 14249: 0x00008A59, + 14250: 0x00008A40, + 14251: 0x00008A57, + 14252: 0x00008A58, + 14253: 0x00008A44, + 14254: 0x00008A45, + 14255: 0x00008A52, + 14256: 0x00008A48, + 14257: 0x00008A51, + 14258: 0x00008A4A, + 14259: 0x00008A4C, + 14260: 0x00008A4F, + 14261: 0x00008C5F, + 14262: 0x00008C81, + 14263: 0x00008C80, + 14264: 0x00008CBA, + 14265: 0x00008CBE, + 14266: 0x00008CB0, + 14267: 0x00008CB9, + 14268: 0x00008CB5, + 14269: 0x00008D84, + 14270: 0x00008D80, + 14271: 0x00008D89, + 14272: 0x00008DD8, + 14273: 0x00008DD3, + 14274: 0x00008DCD, + 14275: 0x00008DC7, + 14276: 0x00008DD6, + 14277: 0x00008DDC, + 14278: 0x00008DCF, + 14279: 0x00008DD5, + 14280: 0x00008DD9, + 14281: 0x00008DC8, + 14282: 0x00008DD7, + 14283: 0x00008DC5, + 14284: 0x00008EEF, + 14285: 0x00008EF7, + 14286: 0x00008EFA, + 14287: 0x00008EF9, + 14288: 0x00008EE6, + 14289: 0x00008EEE, + 14290: 0x00008EE5, + 14291: 0x00008EF5, + 14292: 0x00008EE7, + 14293: 0x00008EE8, + 14294: 0x00008EF6, + 14295: 0x00008EEB, + 14296: 0x00008EF1, + 14297: 0x00008EEC, + 14298: 0x00008EF4, + 14299: 0x00008EE9, + 14300: 0x0000902D, + 14301: 0x00009034, + 14302: 0x0000902F, + 14303: 0x00009106, + 14304: 0x0000912C, + 14305: 0x00009104, + 14306: 0x000090FF, + 14307: 0x000090FC, + 14308: 0x00009108, + 14309: 0x000090F9, + 14310: 0x000090FB, + 14311: 0x00009101, + 14312: 0x00009100, + 14313: 0x00009107, + 14314: 0x00009105, + 14315: 0x00009103, + 14316: 0x00009161, + 14317: 0x00009164, + 14318: 0x0000915F, + 14319: 0x00009162, + 14320: 0x00009160, + 14321: 0x00009201, + 14322: 0x0000920A, + 14323: 0x00009225, + 14324: 0x00009203, + 14325: 0x0000921A, + 14326: 0x00009226, + 14327: 0x0000920F, + 14328: 0x0000920C, + 14329: 0x00009200, + 14330: 0x00009212, + 14331: 0x000091FF, + 14332: 0x000091FD, + 14333: 0x00009206, + 14334: 0x00009204, + 14335: 0x00009227, + 14336: 0x00009202, + 14337: 0x0000921C, + 14338: 0x00009224, + 14339: 0x00009219, + 14340: 0x00009217, + 14341: 0x00009205, + 14342: 0x00009216, + 14343: 0x0000957B, + 14344: 0x0000958D, + 14345: 0x0000958C, + 14346: 0x00009590, + 14347: 0x00009687, + 14348: 0x0000967E, + 14349: 0x00009688, + 14350: 0x00009689, + 14351: 0x00009683, + 14352: 0x00009680, + 14353: 0x000096C2, + 14354: 0x000096C8, + 14355: 0x000096C3, + 14356: 0x000096F1, + 14357: 0x000096F0, + 14358: 0x0000976C, + 14359: 0x00009770, + 14360: 0x0000976E, + 14361: 0x00009807, + 14362: 0x000098A9, + 14363: 0x000098EB, + 14364: 0x00009CE6, + 14365: 0x00009EF9, + 14366: 0x00004E83, + 14367: 0x00004E84, + 14368: 0x00004EB6, + 14369: 0x000050BD, + 14370: 0x000050BF, + 14371: 0x000050C6, + 14372: 0x000050AE, + 14373: 0x000050C4, + 14374: 0x000050CA, + 14375: 0x000050B4, + 14376: 0x000050C8, + 14377: 0x000050C2, + 14378: 0x000050B0, + 14379: 0x000050C1, + 14380: 0x000050BA, + 14381: 0x000050B1, + 14382: 0x000050CB, + 14383: 0x000050C9, + 14384: 0x000050B6, + 14385: 0x000050B8, + 14386: 0x000051D7, + 14387: 0x0000527A, + 14388: 0x00005278, + 14389: 0x0000527B, + 14390: 0x0000527C, + 14391: 0x000055C3, + 14392: 0x000055DB, + 14393: 0x000055CC, + 14394: 0x000055D0, + 14395: 0x000055CB, + 14396: 0x000055CA, + 14397: 0x000055DD, + 14398: 0x000055C0, + 14399: 0x000055D4, + 14400: 0x000055C4, + 14401: 0x000055E9, + 14402: 0x000055BF, + 14403: 0x000055D2, + 14404: 0x0000558D, + 14405: 0x000055CF, + 14406: 0x000055D5, + 14407: 0x000055E2, + 14408: 0x000055D6, + 14409: 0x000055C8, + 14410: 0x000055F2, + 14411: 0x000055CD, + 14412: 0x000055D9, + 14413: 0x000055C2, + 14414: 0x00005714, + 14415: 0x00005853, + 14416: 0x00005868, + 14417: 0x00005864, + 14418: 0x0000584F, + 14419: 0x0000584D, + 14420: 0x00005849, + 14421: 0x0000586F, + 14422: 0x00005855, + 14423: 0x0000584E, + 14424: 0x0000585D, + 14425: 0x00005859, + 14426: 0x00005865, + 14427: 0x0000585B, + 14428: 0x0000583D, + 14429: 0x00005863, + 14430: 0x00005871, + 14431: 0x000058FC, + 14432: 0x00005AC7, + 14433: 0x00005AC4, + 14434: 0x00005ACB, + 14435: 0x00005ABA, + 14436: 0x00005AB8, + 14437: 0x00005AB1, + 14438: 0x00005AB5, + 14439: 0x00005AB0, + 14440: 0x00005ABF, + 14441: 0x00005AC8, + 14442: 0x00005ABB, + 14443: 0x00005AC6, + 14444: 0x00005AB7, + 14445: 0x00005AC0, + 14446: 0x00005ACA, + 14447: 0x00005AB4, + 14448: 0x00005AB6, + 14449: 0x00005ACD, + 14450: 0x00005AB9, + 14451: 0x00005A90, + 14452: 0x00005BD6, + 14453: 0x00005BD8, + 14454: 0x00005BD9, + 14455: 0x00005C1F, + 14456: 0x00005C33, + 14457: 0x00005D71, + 14458: 0x00005D63, + 14459: 0x00005D4A, + 14460: 0x00005D65, + 14461: 0x00005D72, + 14462: 0x00005D6C, + 14463: 0x00005D5E, + 14464: 0x00005D68, + 14465: 0x00005D67, + 14466: 0x00005D62, + 14467: 0x00005DF0, + 14468: 0x00005E4F, + 14469: 0x00005E4E, + 14470: 0x00005E4A, + 14471: 0x00005E4D, + 14472: 0x00005E4B, + 14473: 0x00005EC5, + 14474: 0x00005ECC, + 14475: 0x00005EC6, + 14476: 0x00005ECB, + 14477: 0x00005EC7, + 14478: 0x00005F40, + 14479: 0x00005FAF, + 14480: 0x00005FAD, + 14481: 0x000060F7, + 14482: 0x00006149, + 14483: 0x0000614A, + 14484: 0x0000612B, + 14485: 0x00006145, + 14486: 0x00006136, + 14487: 0x00006132, + 14488: 0x0000612E, + 14489: 0x00006146, + 14490: 0x0000612F, + 14491: 0x0000614F, + 14492: 0x00006129, + 14493: 0x00006140, + 14494: 0x00006220, + 14495: 0x00009168, + 14496: 0x00006223, + 14497: 0x00006225, + 14498: 0x00006224, + 14499: 0x000063C5, + 14500: 0x000063F1, + 14501: 0x000063EB, + 14502: 0x00006410, + 14503: 0x00006412, + 14504: 0x00006409, + 14505: 0x00006420, + 14506: 0x00006424, + 14507: 0x00006433, + 14508: 0x00006443, + 14509: 0x0000641F, + 14510: 0x00006415, + 14511: 0x00006418, + 14512: 0x00006439, + 14513: 0x00006437, + 14514: 0x00006422, + 14515: 0x00006423, + 14516: 0x0000640C, + 14517: 0x00006426, + 14518: 0x00006430, + 14519: 0x00006428, + 14520: 0x00006441, + 14521: 0x00006435, + 14522: 0x0000642F, + 14523: 0x0000640A, + 14524: 0x0000641A, + 14525: 0x00006440, + 14526: 0x00006425, + 14527: 0x00006427, + 14528: 0x0000640B, + 14529: 0x000063E7, + 14530: 0x0000641B, + 14531: 0x0000642E, + 14532: 0x00006421, + 14533: 0x0000640E, + 14534: 0x0000656F, + 14535: 0x00006592, + 14536: 0x000065D3, + 14537: 0x00006686, + 14538: 0x0000668C, + 14539: 0x00006695, + 14540: 0x00006690, + 14541: 0x0000668B, + 14542: 0x0000668A, + 14543: 0x00006699, + 14544: 0x00006694, + 14545: 0x00006678, + 14546: 0x00006720, + 14547: 0x00006966, + 14548: 0x0000695F, + 14549: 0x00006938, + 14550: 0x0000694E, + 14551: 0x00006962, + 14552: 0x00006971, + 14553: 0x0000693F, + 14554: 0x00006945, + 14555: 0x0000696A, + 14556: 0x00006939, + 14557: 0x00006942, + 14558: 0x00006957, + 14559: 0x00006959, + 14560: 0x0000697A, + 14561: 0x00006948, + 14562: 0x00006949, + 14563: 0x00006935, + 14564: 0x0000696C, + 14565: 0x00006933, + 14566: 0x0000693D, + 14567: 0x00006965, + 14568: 0x000068F0, + 14569: 0x00006978, + 14570: 0x00006934, + 14571: 0x00006969, + 14572: 0x00006940, + 14573: 0x0000696F, + 14574: 0x00006944, + 14575: 0x00006976, + 14576: 0x00006958, + 14577: 0x00006941, + 14578: 0x00006974, + 14579: 0x0000694C, + 14580: 0x0000693B, + 14581: 0x0000694B, + 14582: 0x00006937, + 14583: 0x0000695C, + 14584: 0x0000694F, + 14585: 0x00006951, + 14586: 0x00006932, + 14587: 0x00006952, + 14588: 0x0000692F, + 14589: 0x0000697B, + 14590: 0x0000693C, + 14591: 0x00006B46, + 14592: 0x00006B45, + 14593: 0x00006B43, + 14594: 0x00006B42, + 14595: 0x00006B48, + 14596: 0x00006B41, + 14597: 0x00006B9B, + 14598: 0x0000FA0D, + 14599: 0x00006BFB, + 14600: 0x00006BFC, + 14601: 0x00006BF9, + 14602: 0x00006BF7, + 14603: 0x00006BF8, + 14604: 0x00006E9B, + 14605: 0x00006ED6, + 14606: 0x00006EC8, + 14607: 0x00006E8F, + 14608: 0x00006EC0, + 14609: 0x00006E9F, + 14610: 0x00006E93, + 14611: 0x00006E94, + 14612: 0x00006EA0, + 14613: 0x00006EB1, + 14614: 0x00006EB9, + 14615: 0x00006EC6, + 14616: 0x00006ED2, + 14617: 0x00006EBD, + 14618: 0x00006EC1, + 14619: 0x00006E9E, + 14620: 0x00006EC9, + 14621: 0x00006EB7, + 14622: 0x00006EB0, + 14623: 0x00006ECD, + 14624: 0x00006EA6, + 14625: 0x00006ECF, + 14626: 0x00006EB2, + 14627: 0x00006EBE, + 14628: 0x00006EC3, + 14629: 0x00006EDC, + 14630: 0x00006ED8, + 14631: 0x00006E99, + 14632: 0x00006E92, + 14633: 0x00006E8E, + 14634: 0x00006E8D, + 14635: 0x00006EA4, + 14636: 0x00006EA1, + 14637: 0x00006EBF, + 14638: 0x00006EB3, + 14639: 0x00006ED0, + 14640: 0x00006ECA, + 14641: 0x00006E97, + 14642: 0x00006EAE, + 14643: 0x00006EA3, + 14644: 0x00007147, + 14645: 0x00007154, + 14646: 0x00007152, + 14647: 0x00007163, + 14648: 0x00007160, + 14649: 0x00007141, + 14650: 0x0000715D, + 14651: 0x00007162, + 14652: 0x00007172, + 14653: 0x00007178, + 14654: 0x0000716A, + 14655: 0x00007161, + 14656: 0x00007142, + 14657: 0x00007158, + 14658: 0x00007143, + 14659: 0x0000714B, + 14660: 0x00007170, + 14661: 0x0000715F, + 14662: 0x00007150, + 14663: 0x00007153, + 14664: 0x00007144, + 14665: 0x0000714D, + 14666: 0x0000715A, + 14667: 0x0000724F, + 14668: 0x0000728D, + 14669: 0x0000728C, + 14670: 0x00007291, + 14671: 0x00007290, + 14672: 0x0000728E, + 14673: 0x0000733C, + 14674: 0x00007342, + 14675: 0x0000733B, + 14676: 0x0000733A, + 14677: 0x00007340, + 14678: 0x0000734A, + 14679: 0x00007349, + 14680: 0x00007444, + 14681: 0x0000744A, + 14682: 0x0000744B, + 14683: 0x00007452, + 14684: 0x00007451, + 14685: 0x00007457, + 14686: 0x00007440, + 14687: 0x0000744F, + 14688: 0x00007450, + 14689: 0x0000744E, + 14690: 0x00007442, + 14691: 0x00007446, + 14692: 0x0000744D, + 14693: 0x00007454, + 14694: 0x000074E1, + 14695: 0x000074FF, + 14696: 0x000074FE, + 14697: 0x000074FD, + 14698: 0x0000751D, + 14699: 0x00007579, + 14700: 0x00007577, + 14701: 0x00006983, + 14702: 0x000075EF, + 14703: 0x0000760F, + 14704: 0x00007603, + 14705: 0x000075F7, + 14706: 0x000075FE, + 14707: 0x000075FC, + 14708: 0x000075F9, + 14709: 0x000075F8, + 14710: 0x00007610, + 14711: 0x000075FB, + 14712: 0x000075F6, + 14713: 0x000075ED, + 14714: 0x000075F5, + 14715: 0x000075FD, + 14716: 0x00007699, + 14717: 0x000076B5, + 14718: 0x000076DD, + 14719: 0x00007755, + 14720: 0x0000775F, + 14721: 0x00007760, + 14722: 0x00007752, + 14723: 0x00007756, + 14724: 0x0000775A, + 14725: 0x00007769, + 14726: 0x00007767, + 14727: 0x00007754, + 14728: 0x00007759, + 14729: 0x0000776D, + 14730: 0x000077E0, + 14731: 0x00007887, + 14732: 0x0000789A, + 14733: 0x00007894, + 14734: 0x0000788F, + 14735: 0x00007884, + 14736: 0x00007895, + 14737: 0x00007885, + 14738: 0x00007886, + 14739: 0x000078A1, + 14740: 0x00007883, + 14741: 0x00007879, + 14742: 0x00007899, + 14743: 0x00007880, + 14744: 0x00007896, + 14745: 0x0000787B, + 14746: 0x0000797C, + 14747: 0x00007982, + 14748: 0x0000797D, + 14749: 0x00007979, + 14750: 0x00007A11, + 14751: 0x00007A18, + 14752: 0x00007A19, + 14753: 0x00007A12, + 14754: 0x00007A17, + 14755: 0x00007A15, + 14756: 0x00007A22, + 14757: 0x00007A13, + 14758: 0x00007A1B, + 14759: 0x00007A10, + 14760: 0x00007AA3, + 14761: 0x00007AA2, + 14762: 0x00007A9E, + 14763: 0x00007AEB, + 14764: 0x00007B66, + 14765: 0x00007B64, + 14766: 0x00007B6D, + 14767: 0x00007B74, + 14768: 0x00007B69, + 14769: 0x00007B72, + 14770: 0x00007B65, + 14771: 0x00007B73, + 14772: 0x00007B71, + 14773: 0x00007B70, + 14774: 0x00007B61, + 14775: 0x00007B78, + 14776: 0x00007B76, + 14777: 0x00007B63, + 14778: 0x00007CB2, + 14779: 0x00007CB4, + 14780: 0x00007CAF, + 14781: 0x00007D88, + 14782: 0x00007D86, + 14783: 0x00007D80, + 14784: 0x00007D8D, + 14785: 0x00007D7F, + 14786: 0x00007D85, + 14787: 0x00007D7A, + 14788: 0x00007D8E, + 14789: 0x00007D7B, + 14790: 0x00007D83, + 14791: 0x00007D7C, + 14792: 0x00007D8C, + 14793: 0x00007D94, + 14794: 0x00007D84, + 14795: 0x00007D7D, + 14796: 0x00007D92, + 14797: 0x00007F6D, + 14798: 0x00007F6B, + 14799: 0x00007F67, + 14800: 0x00007F68, + 14801: 0x00007F6C, + 14802: 0x00007FA6, + 14803: 0x00007FA5, + 14804: 0x00007FA7, + 14805: 0x00007FDB, + 14806: 0x00007FDC, + 14807: 0x00008021, + 14808: 0x00008164, + 14809: 0x00008160, + 14810: 0x00008177, + 14811: 0x0000815C, + 14812: 0x00008169, + 14813: 0x0000815B, + 14814: 0x00008162, + 14815: 0x00008172, + 14816: 0x00006721, + 14817: 0x0000815E, + 14818: 0x00008176, + 14819: 0x00008167, + 14820: 0x0000816F, + 14821: 0x00008144, + 14822: 0x00008161, + 14823: 0x0000821D, + 14824: 0x00008249, + 14825: 0x00008244, + 14826: 0x00008240, + 14827: 0x00008242, + 14828: 0x00008245, + 14829: 0x000084F1, + 14830: 0x0000843F, + 14831: 0x00008456, + 14832: 0x00008476, + 14833: 0x00008479, + 14834: 0x0000848F, + 14835: 0x0000848D, + 14836: 0x00008465, + 14837: 0x00008451, + 14838: 0x00008440, + 14839: 0x00008486, + 14840: 0x00008467, + 14841: 0x00008430, + 14842: 0x0000844D, + 14843: 0x0000847D, + 14844: 0x0000845A, + 14845: 0x00008459, + 14846: 0x00008474, + 14847: 0x00008473, + 14848: 0x0000845D, + 14849: 0x00008507, + 14850: 0x0000845E, + 14851: 0x00008437, + 14852: 0x0000843A, + 14853: 0x00008434, + 14854: 0x0000847A, + 14855: 0x00008443, + 14856: 0x00008478, + 14857: 0x00008432, + 14858: 0x00008445, + 14859: 0x00008429, + 14860: 0x000083D9, + 14861: 0x0000844B, + 14862: 0x0000842F, + 14863: 0x00008442, + 14864: 0x0000842D, + 14865: 0x0000845F, + 14866: 0x00008470, + 14867: 0x00008439, + 14868: 0x0000844E, + 14869: 0x0000844C, + 14870: 0x00008452, + 14871: 0x0000846F, + 14872: 0x000084C5, + 14873: 0x0000848E, + 14874: 0x0000843B, + 14875: 0x00008447, + 14876: 0x00008436, + 14877: 0x00008433, + 14878: 0x00008468, + 14879: 0x0000847E, + 14880: 0x00008444, + 14881: 0x0000842B, + 14882: 0x00008460, + 14883: 0x00008454, + 14884: 0x0000846E, + 14885: 0x00008450, + 14886: 0x0000870B, + 14887: 0x00008704, + 14888: 0x000086F7, + 14889: 0x0000870C, + 14890: 0x000086FA, + 14891: 0x000086D6, + 14892: 0x000086F5, + 14893: 0x0000874D, + 14894: 0x000086F8, + 14895: 0x0000870E, + 14896: 0x00008709, + 14897: 0x00008701, + 14898: 0x000086F6, + 14899: 0x0000870D, + 14900: 0x00008705, + 14901: 0x000088D6, + 14902: 0x000088CB, + 14903: 0x000088CD, + 14904: 0x000088CE, + 14905: 0x000088DE, + 14906: 0x000088DB, + 14907: 0x000088DA, + 14908: 0x000088CC, + 14909: 0x000088D0, + 14910: 0x00008985, + 14911: 0x0000899B, + 14912: 0x000089DF, + 14913: 0x000089E5, + 14914: 0x000089E4, + 14915: 0x000089E1, + 14916: 0x000089E0, + 14917: 0x000089E2, + 14918: 0x000089DC, + 14919: 0x000089E6, + 14920: 0x00008A76, + 14921: 0x00008A86, + 14922: 0x00008A7F, + 14923: 0x00008A61, + 14924: 0x00008A3F, + 14925: 0x00008A77, + 14926: 0x00008A82, + 14927: 0x00008A84, + 14928: 0x00008A75, + 14929: 0x00008A83, + 14930: 0x00008A81, + 14931: 0x00008A74, + 14932: 0x00008A7A, + 14933: 0x00008C3C, + 14934: 0x00008C4B, + 14935: 0x00008C4A, + 14936: 0x00008C65, + 14937: 0x00008C64, + 14938: 0x00008C66, + 14939: 0x00008C86, + 14940: 0x00008C84, + 14941: 0x00008C85, + 14942: 0x00008CCC, + 14943: 0x00008D68, + 14944: 0x00008D69, + 14945: 0x00008D91, + 14946: 0x00008D8C, + 14947: 0x00008D8E, + 14948: 0x00008D8F, + 14949: 0x00008D8D, + 14950: 0x00008D93, + 14951: 0x00008D94, + 14952: 0x00008D90, + 14953: 0x00008D92, + 14954: 0x00008DF0, + 14955: 0x00008DE0, + 14956: 0x00008DEC, + 14957: 0x00008DF1, + 14958: 0x00008DEE, + 14959: 0x00008DD0, + 14960: 0x00008DE9, + 14961: 0x00008DE3, + 14962: 0x00008DE2, + 14963: 0x00008DE7, + 14964: 0x00008DF2, + 14965: 0x00008DEB, + 14966: 0x00008DF4, + 14967: 0x00008F06, + 14968: 0x00008EFF, + 14969: 0x00008F01, + 14970: 0x00008F00, + 14971: 0x00008F05, + 14972: 0x00008F07, + 14973: 0x00008F08, + 14974: 0x00008F02, + 14975: 0x00008F0B, + 14976: 0x00009052, + 14977: 0x0000903F, + 14978: 0x00009044, + 14979: 0x00009049, + 14980: 0x0000903D, + 14981: 0x00009110, + 14982: 0x0000910D, + 14983: 0x0000910F, + 14984: 0x00009111, + 14985: 0x00009116, + 14986: 0x00009114, + 14987: 0x0000910B, + 14988: 0x0000910E, + 14989: 0x0000916E, + 14990: 0x0000916F, + 14991: 0x00009248, + 14992: 0x00009252, + 14993: 0x00009230, + 14994: 0x0000923A, + 14995: 0x00009266, + 14996: 0x00009233, + 14997: 0x00009265, + 14998: 0x0000925E, + 14999: 0x00009283, + 15000: 0x0000922E, + 15001: 0x0000924A, + 15002: 0x00009246, + 15003: 0x0000926D, + 15004: 0x0000926C, + 15005: 0x0000924F, + 15006: 0x00009260, + 15007: 0x00009267, + 15008: 0x0000926F, + 15009: 0x00009236, + 15010: 0x00009261, + 15011: 0x00009270, + 15012: 0x00009231, + 15013: 0x00009254, + 15014: 0x00009263, + 15015: 0x00009250, + 15016: 0x00009272, + 15017: 0x0000924E, + 15018: 0x00009253, + 15019: 0x0000924C, + 15020: 0x00009256, + 15021: 0x00009232, + 15022: 0x0000959F, + 15023: 0x0000959C, + 15024: 0x0000959E, + 15025: 0x0000959B, + 15026: 0x00009692, + 15027: 0x00009693, + 15028: 0x00009691, + 15029: 0x00009697, + 15030: 0x000096CE, + 15031: 0x000096FA, + 15032: 0x000096FD, + 15033: 0x000096F8, + 15034: 0x000096F5, + 15035: 0x00009773, + 15036: 0x00009777, + 15037: 0x00009778, + 15038: 0x00009772, + 15039: 0x0000980F, + 15040: 0x0000980D, + 15041: 0x0000980E, + 15042: 0x000098AC, + 15043: 0x000098F6, + 15044: 0x000098F9, + 15045: 0x000099AF, + 15046: 0x000099B2, + 15047: 0x000099B0, + 15048: 0x000099B5, + 15049: 0x00009AAD, + 15050: 0x00009AAB, + 15051: 0x00009B5B, + 15052: 0x00009CEA, + 15053: 0x00009CED, + 15054: 0x00009CE7, + 15055: 0x00009E80, + 15056: 0x00009EFD, + 15057: 0x000050E6, + 15058: 0x000050D4, + 15059: 0x000050D7, + 15060: 0x000050E8, + 15061: 0x000050F3, + 15062: 0x000050DB, + 15063: 0x000050EA, + 15064: 0x000050DD, + 15065: 0x000050E4, + 15066: 0x000050D3, + 15067: 0x000050EC, + 15068: 0x000050F0, + 15069: 0x000050EF, + 15070: 0x000050E3, + 15071: 0x000050E0, + 15072: 0x000051D8, + 15073: 0x00005280, + 15074: 0x00005281, + 15075: 0x000052E9, + 15076: 0x000052EB, + 15077: 0x00005330, + 15078: 0x000053AC, + 15079: 0x00005627, + 15080: 0x00005615, + 15081: 0x0000560C, + 15082: 0x00005612, + 15083: 0x000055FC, + 15084: 0x0000560F, + 15085: 0x0000561C, + 15086: 0x00005601, + 15087: 0x00005613, + 15088: 0x00005602, + 15089: 0x000055FA, + 15090: 0x0000561D, + 15091: 0x00005604, + 15092: 0x000055FF, + 15093: 0x000055F9, + 15094: 0x00005889, + 15095: 0x0000587C, + 15096: 0x00005890, + 15097: 0x00005898, + 15098: 0x00005886, + 15099: 0x00005881, + 15100: 0x0000587F, + 15101: 0x00005874, + 15102: 0x0000588B, + 15103: 0x0000587A, + 15104: 0x00005887, + 15105: 0x00005891, + 15106: 0x0000588E, + 15107: 0x00005876, + 15108: 0x00005882, + 15109: 0x00005888, + 15110: 0x0000587B, + 15111: 0x00005894, + 15112: 0x0000588F, + 15113: 0x000058FE, + 15114: 0x0000596B, + 15115: 0x00005ADC, + 15116: 0x00005AEE, + 15117: 0x00005AE5, + 15118: 0x00005AD5, + 15119: 0x00005AEA, + 15120: 0x00005ADA, + 15121: 0x00005AED, + 15122: 0x00005AEB, + 15123: 0x00005AF3, + 15124: 0x00005AE2, + 15125: 0x00005AE0, + 15126: 0x00005ADB, + 15127: 0x00005AEC, + 15128: 0x00005ADE, + 15129: 0x00005ADD, + 15130: 0x00005AD9, + 15131: 0x00005AE8, + 15132: 0x00005ADF, + 15133: 0x00005B77, + 15134: 0x00005BE0, + 15135: 0x00005BE3, + 15136: 0x00005C63, + 15137: 0x00005D82, + 15138: 0x00005D80, + 15139: 0x00005D7D, + 15140: 0x00005D86, + 15141: 0x00005D7A, + 15142: 0x00005D81, + 15143: 0x00005D77, + 15144: 0x00005D8A, + 15145: 0x00005D89, + 15146: 0x00005D88, + 15147: 0x00005D7E, + 15148: 0x00005D7C, + 15149: 0x00005D8D, + 15150: 0x00005D79, + 15151: 0x00005D7F, + 15152: 0x00005E58, + 15153: 0x00005E59, + 15154: 0x00005E53, + 15155: 0x00005ED8, + 15156: 0x00005ED1, + 15157: 0x00005ED7, + 15158: 0x00005ECE, + 15159: 0x00005EDC, + 15160: 0x00005ED5, + 15161: 0x00005ED9, + 15162: 0x00005ED2, + 15163: 0x00005ED4, + 15164: 0x00005F44, + 15165: 0x00005F43, + 15166: 0x00005F6F, + 15167: 0x00005FB6, + 15168: 0x0000612C, + 15169: 0x00006128, + 15170: 0x00006141, + 15171: 0x0000615E, + 15172: 0x00006171, + 15173: 0x00006173, + 15174: 0x00006152, + 15175: 0x00006153, + 15176: 0x00006172, + 15177: 0x0000616C, + 15178: 0x00006180, + 15179: 0x00006174, + 15180: 0x00006154, + 15181: 0x0000617A, + 15182: 0x0000615B, + 15183: 0x00006165, + 15184: 0x0000613B, + 15185: 0x0000616A, + 15186: 0x00006161, + 15187: 0x00006156, + 15188: 0x00006229, + 15189: 0x00006227, + 15190: 0x0000622B, + 15191: 0x0000642B, + 15192: 0x0000644D, + 15193: 0x0000645B, + 15194: 0x0000645D, + 15195: 0x00006474, + 15196: 0x00006476, + 15197: 0x00006472, + 15198: 0x00006473, + 15199: 0x0000647D, + 15200: 0x00006475, + 15201: 0x00006466, + 15202: 0x000064A6, + 15203: 0x0000644E, + 15204: 0x00006482, + 15205: 0x0000645E, + 15206: 0x0000645C, + 15207: 0x0000644B, + 15208: 0x00006453, + 15209: 0x00006460, + 15210: 0x00006450, + 15211: 0x0000647F, + 15212: 0x0000643F, + 15213: 0x0000646C, + 15214: 0x0000646B, + 15215: 0x00006459, + 15216: 0x00006465, + 15217: 0x00006477, + 15218: 0x00006573, + 15219: 0x000065A0, + 15220: 0x000066A1, + 15221: 0x000066A0, + 15222: 0x0000669F, + 15223: 0x00006705, + 15224: 0x00006704, + 15225: 0x00006722, + 15226: 0x000069B1, + 15227: 0x000069B6, + 15228: 0x000069C9, + 15229: 0x000069A0, + 15230: 0x000069CE, + 15231: 0x00006996, + 15232: 0x000069B0, + 15233: 0x000069AC, + 15234: 0x000069BC, + 15235: 0x00006991, + 15236: 0x00006999, + 15237: 0x0000698E, + 15238: 0x000069A7, + 15239: 0x0000698D, + 15240: 0x000069A9, + 15241: 0x000069BE, + 15242: 0x000069AF, + 15243: 0x000069BF, + 15244: 0x000069C4, + 15245: 0x000069BD, + 15246: 0x000069A4, + 15247: 0x000069D4, + 15248: 0x000069B9, + 15249: 0x000069CA, + 15250: 0x0000699A, + 15251: 0x000069CF, + 15252: 0x000069B3, + 15253: 0x00006993, + 15254: 0x000069AA, + 15255: 0x000069A1, + 15256: 0x0000699E, + 15257: 0x000069D9, + 15258: 0x00006997, + 15259: 0x00006990, + 15260: 0x000069C2, + 15261: 0x000069B5, + 15262: 0x000069A5, + 15263: 0x000069C6, + 15264: 0x00006B4A, + 15265: 0x00006B4D, + 15266: 0x00006B4B, + 15267: 0x00006B9E, + 15268: 0x00006B9F, + 15269: 0x00006BA0, + 15270: 0x00006BC3, + 15271: 0x00006BC4, + 15272: 0x00006BFE, + 15273: 0x00006ECE, + 15274: 0x00006EF5, + 15275: 0x00006EF1, + 15276: 0x00006F03, + 15277: 0x00006F25, + 15278: 0x00006EF8, + 15279: 0x00006F37, + 15280: 0x00006EFB, + 15281: 0x00006F2E, + 15282: 0x00006F09, + 15283: 0x00006F4E, + 15284: 0x00006F19, + 15285: 0x00006F1A, + 15286: 0x00006F27, + 15287: 0x00006F18, + 15288: 0x00006F3B, + 15289: 0x00006F12, + 15290: 0x00006EED, + 15291: 0x00006F0A, + 15292: 0x00006F36, + 15293: 0x00006F73, + 15294: 0x00006EF9, + 15295: 0x00006EEE, + 15296: 0x00006F2D, + 15297: 0x00006F40, + 15298: 0x00006F30, + 15299: 0x00006F3C, + 15300: 0x00006F35, + 15301: 0x00006EEB, + 15302: 0x00006F07, + 15303: 0x00006F0E, + 15304: 0x00006F43, + 15305: 0x00006F05, + 15306: 0x00006EFD, + 15307: 0x00006EF6, + 15308: 0x00006F39, + 15309: 0x00006F1C, + 15310: 0x00006EFC, + 15311: 0x00006F3A, + 15312: 0x00006F1F, + 15313: 0x00006F0D, + 15314: 0x00006F1E, + 15315: 0x00006F08, + 15316: 0x00006F21, + 15317: 0x00007187, + 15318: 0x00007190, + 15319: 0x00007189, + 15320: 0x00007180, + 15321: 0x00007185, + 15322: 0x00007182, + 15323: 0x0000718F, + 15324: 0x0000717B, + 15325: 0x00007186, + 15326: 0x00007181, + 15327: 0x00007197, + 15328: 0x00007244, + 15329: 0x00007253, + 15330: 0x00007297, + 15331: 0x00007295, + 15332: 0x00007293, + 15333: 0x00007343, + 15334: 0x0000734D, + 15335: 0x00007351, + 15336: 0x0000734C, + 15337: 0x00007462, + 15338: 0x00007473, + 15339: 0x00007471, + 15340: 0x00007475, + 15341: 0x00007472, + 15342: 0x00007467, + 15343: 0x0000746E, + 15344: 0x00007500, + 15345: 0x00007502, + 15346: 0x00007503, + 15347: 0x0000757D, + 15348: 0x00007590, + 15349: 0x00007616, + 15350: 0x00007608, + 15351: 0x0000760C, + 15352: 0x00007615, + 15353: 0x00007611, + 15354: 0x0000760A, + 15355: 0x00007614, + 15356: 0x000076B8, + 15357: 0x00007781, + 15358: 0x0000777C, + 15359: 0x00007785, + 15360: 0x00007782, + 15361: 0x0000776E, + 15362: 0x00007780, + 15363: 0x0000776F, + 15364: 0x0000777E, + 15365: 0x00007783, + 15366: 0x000078B2, + 15367: 0x000078AA, + 15368: 0x000078B4, + 15369: 0x000078AD, + 15370: 0x000078A8, + 15371: 0x0000787E, + 15372: 0x000078AB, + 15373: 0x0000789E, + 15374: 0x000078A5, + 15375: 0x000078A0, + 15376: 0x000078AC, + 15377: 0x000078A2, + 15378: 0x000078A4, + 15379: 0x00007998, + 15380: 0x0000798A, + 15381: 0x0000798B, + 15382: 0x00007996, + 15383: 0x00007995, + 15384: 0x00007994, + 15385: 0x00007993, + 15386: 0x00007997, + 15387: 0x00007988, + 15388: 0x00007992, + 15389: 0x00007990, + 15390: 0x00007A2B, + 15391: 0x00007A4A, + 15392: 0x00007A30, + 15393: 0x00007A2F, + 15394: 0x00007A28, + 15395: 0x00007A26, + 15396: 0x00007AA8, + 15397: 0x00007AAB, + 15398: 0x00007AAC, + 15399: 0x00007AEE, + 15400: 0x00007B88, + 15401: 0x00007B9C, + 15402: 0x00007B8A, + 15403: 0x00007B91, + 15404: 0x00007B90, + 15405: 0x00007B96, + 15406: 0x00007B8D, + 15407: 0x00007B8C, + 15408: 0x00007B9B, + 15409: 0x00007B8E, + 15410: 0x00007B85, + 15411: 0x00007B98, + 15412: 0x00005284, + 15413: 0x00007B99, + 15414: 0x00007BA4, + 15415: 0x00007B82, + 15416: 0x00007CBB, + 15417: 0x00007CBF, + 15418: 0x00007CBC, + 15419: 0x00007CBA, + 15420: 0x00007DA7, + 15421: 0x00007DB7, + 15422: 0x00007DC2, + 15423: 0x00007DA3, + 15424: 0x00007DAA, + 15425: 0x00007DC1, + 15426: 0x00007DC0, + 15427: 0x00007DC5, + 15428: 0x00007D9D, + 15429: 0x00007DCE, + 15430: 0x00007DC4, + 15431: 0x00007DC6, + 15432: 0x00007DCB, + 15433: 0x00007DCC, + 15434: 0x00007DAF, + 15435: 0x00007DB9, + 15436: 0x00007D96, + 15437: 0x00007DBC, + 15438: 0x00007D9F, + 15439: 0x00007DA6, + 15440: 0x00007DAE, + 15441: 0x00007DA9, + 15442: 0x00007DA1, + 15443: 0x00007DC9, + 15444: 0x00007F73, + 15445: 0x00007FE2, + 15446: 0x00007FE3, + 15447: 0x00007FE5, + 15448: 0x00007FDE, + 15449: 0x00008024, + 15450: 0x0000805D, + 15451: 0x0000805C, + 15452: 0x00008189, + 15453: 0x00008186, + 15454: 0x00008183, + 15455: 0x00008187, + 15456: 0x0000818D, + 15457: 0x0000818C, + 15458: 0x0000818B, + 15459: 0x00008215, + 15460: 0x00008497, + 15461: 0x000084A4, + 15462: 0x000084A1, + 15463: 0x0000849F, + 15464: 0x000084BA, + 15465: 0x000084CE, + 15466: 0x000084C2, + 15467: 0x000084AC, + 15468: 0x000084AE, + 15469: 0x000084AB, + 15470: 0x000084B9, + 15471: 0x000084B4, + 15472: 0x000084C1, + 15473: 0x000084CD, + 15474: 0x000084AA, + 15475: 0x0000849A, + 15476: 0x000084B1, + 15477: 0x000084D0, + 15478: 0x0000849D, + 15479: 0x000084A7, + 15480: 0x000084BB, + 15481: 0x000084A2, + 15482: 0x00008494, + 15483: 0x000084C7, + 15484: 0x000084CC, + 15485: 0x0000849B, + 15486: 0x000084A9, + 15487: 0x000084AF, + 15488: 0x000084A8, + 15489: 0x000084D6, + 15490: 0x00008498, + 15491: 0x000084B6, + 15492: 0x000084CF, + 15493: 0x000084A0, + 15494: 0x000084D7, + 15495: 0x000084D4, + 15496: 0x000084D2, + 15497: 0x000084DB, + 15498: 0x000084B0, + 15499: 0x00008491, + 15500: 0x00008661, + 15501: 0x00008733, + 15502: 0x00008723, + 15503: 0x00008728, + 15504: 0x0000876B, + 15505: 0x00008740, + 15506: 0x0000872E, + 15507: 0x0000871E, + 15508: 0x00008721, + 15509: 0x00008719, + 15510: 0x0000871B, + 15511: 0x00008743, + 15512: 0x0000872C, + 15513: 0x00008741, + 15514: 0x0000873E, + 15515: 0x00008746, + 15516: 0x00008720, + 15517: 0x00008732, + 15518: 0x0000872A, + 15519: 0x0000872D, + 15520: 0x0000873C, + 15521: 0x00008712, + 15522: 0x0000873A, + 15523: 0x00008731, + 15524: 0x00008735, + 15525: 0x00008742, + 15526: 0x00008726, + 15527: 0x00008727, + 15528: 0x00008738, + 15529: 0x00008724, + 15530: 0x0000871A, + 15531: 0x00008730, + 15532: 0x00008711, + 15533: 0x000088F7, + 15534: 0x000088E7, + 15535: 0x000088F1, + 15536: 0x000088F2, + 15537: 0x000088FA, + 15538: 0x000088FE, + 15539: 0x000088EE, + 15540: 0x000088FC, + 15541: 0x000088F6, + 15542: 0x000088FB, + 15543: 0x000088F0, + 15544: 0x000088EC, + 15545: 0x000088EB, + 15546: 0x0000899D, + 15547: 0x000089A1, + 15548: 0x0000899F, + 15549: 0x0000899E, + 15550: 0x000089E9, + 15551: 0x000089EB, + 15552: 0x000089E8, + 15553: 0x00008AAB, + 15554: 0x00008A99, + 15555: 0x00008A8B, + 15556: 0x00008A92, + 15557: 0x00008A8F, + 15558: 0x00008A96, + 15559: 0x00008C3D, + 15560: 0x00008C68, + 15561: 0x00008C69, + 15562: 0x00008CD5, + 15563: 0x00008CCF, + 15564: 0x00008CD7, + 15565: 0x00008D96, + 15566: 0x00008E09, + 15567: 0x00008E02, + 15568: 0x00008DFF, + 15569: 0x00008E0D, + 15570: 0x00008DFD, + 15571: 0x00008E0A, + 15572: 0x00008E03, + 15573: 0x00008E07, + 15574: 0x00008E06, + 15575: 0x00008E05, + 15576: 0x00008DFE, + 15577: 0x00008E00, + 15578: 0x00008E04, + 15579: 0x00008F10, + 15580: 0x00008F11, + 15581: 0x00008F0E, + 15582: 0x00008F0D, + 15583: 0x00009123, + 15584: 0x0000911C, + 15585: 0x00009120, + 15586: 0x00009122, + 15587: 0x0000911F, + 15588: 0x0000911D, + 15589: 0x0000911A, + 15590: 0x00009124, + 15591: 0x00009121, + 15592: 0x0000911B, + 15593: 0x0000917A, + 15594: 0x00009172, + 15595: 0x00009179, + 15596: 0x00009173, + 15597: 0x000092A5, + 15598: 0x000092A4, + 15599: 0x00009276, + 15600: 0x0000929B, + 15601: 0x0000927A, + 15602: 0x000092A0, + 15603: 0x00009294, + 15604: 0x000092AA, + 15605: 0x0000928D, + 15606: 0x000092A6, + 15607: 0x0000929A, + 15608: 0x000092AB, + 15609: 0x00009279, + 15610: 0x00009297, + 15611: 0x0000927F, + 15612: 0x000092A3, + 15613: 0x000092EE, + 15614: 0x0000928E, + 15615: 0x00009282, + 15616: 0x00009295, + 15617: 0x000092A2, + 15618: 0x0000927D, + 15619: 0x00009288, + 15620: 0x000092A1, + 15621: 0x0000928A, + 15622: 0x00009286, + 15623: 0x0000928C, + 15624: 0x00009299, + 15625: 0x000092A7, + 15626: 0x0000927E, + 15627: 0x00009287, + 15628: 0x000092A9, + 15629: 0x0000929D, + 15630: 0x0000928B, + 15631: 0x0000922D, + 15632: 0x0000969E, + 15633: 0x000096A1, + 15634: 0x000096FF, + 15635: 0x00009758, + 15636: 0x0000977D, + 15637: 0x0000977A, + 15638: 0x0000977E, + 15639: 0x00009783, + 15640: 0x00009780, + 15641: 0x00009782, + 15642: 0x0000977B, + 15643: 0x00009784, + 15644: 0x00009781, + 15645: 0x0000977F, + 15646: 0x000097CE, + 15647: 0x000097CD, + 15648: 0x00009816, + 15649: 0x000098AD, + 15650: 0x000098AE, + 15651: 0x00009902, + 15652: 0x00009900, + 15653: 0x00009907, + 15654: 0x0000999D, + 15655: 0x0000999C, + 15656: 0x000099C3, + 15657: 0x000099B9, + 15658: 0x000099BB, + 15659: 0x000099BA, + 15660: 0x000099C2, + 15661: 0x000099BD, + 15662: 0x000099C7, + 15663: 0x00009AB1, + 15664: 0x00009AE3, + 15665: 0x00009AE7, + 15666: 0x00009B3E, + 15667: 0x00009B3F, + 15668: 0x00009B60, + 15669: 0x00009B61, + 15670: 0x00009B5F, + 15671: 0x00009CF1, + 15672: 0x00009CF2, + 15673: 0x00009CF5, + 15674: 0x00009EA7, + 15675: 0x000050FF, + 15676: 0x00005103, + 15677: 0x00005130, + 15678: 0x000050F8, + 15679: 0x00005106, + 15680: 0x00005107, + 15681: 0x000050F6, + 15682: 0x000050FE, + 15683: 0x0000510B, + 15684: 0x0000510C, + 15685: 0x000050FD, + 15686: 0x0000510A, + 15687: 0x0000528B, + 15688: 0x0000528C, + 15689: 0x000052F1, + 15690: 0x000052EF, + 15691: 0x00005648, + 15692: 0x00005642, + 15693: 0x0000564C, + 15694: 0x00005635, + 15695: 0x00005641, + 15696: 0x0000564A, + 15697: 0x00005649, + 15698: 0x00005646, + 15699: 0x00005658, + 15700: 0x0000565A, + 15701: 0x00005640, + 15702: 0x00005633, + 15703: 0x0000563D, + 15704: 0x0000562C, + 15705: 0x0000563E, + 15706: 0x00005638, + 15707: 0x0000562A, + 15708: 0x0000563A, + 15709: 0x0000571A, + 15710: 0x000058AB, + 15711: 0x0000589D, + 15712: 0x000058B1, + 15713: 0x000058A0, + 15714: 0x000058A3, + 15715: 0x000058AF, + 15716: 0x000058AC, + 15717: 0x000058A5, + 15718: 0x000058A1, + 15719: 0x000058FF, + 15720: 0x00005AFF, + 15721: 0x00005AF4, + 15722: 0x00005AFD, + 15723: 0x00005AF7, + 15724: 0x00005AF6, + 15725: 0x00005B03, + 15726: 0x00005AF8, + 15727: 0x00005B02, + 15728: 0x00005AF9, + 15729: 0x00005B01, + 15730: 0x00005B07, + 15731: 0x00005B05, + 15732: 0x00005B0F, + 15733: 0x00005C67, + 15734: 0x00005D99, + 15735: 0x00005D97, + 15736: 0x00005D9F, + 15737: 0x00005D92, + 15738: 0x00005DA2, + 15739: 0x00005D93, + 15740: 0x00005D95, + 15741: 0x00005DA0, + 15742: 0x00005D9C, + 15743: 0x00005DA1, + 15744: 0x00005D9A, + 15745: 0x00005D9E, + 15746: 0x00005E69, + 15747: 0x00005E5D, + 15748: 0x00005E60, + 15749: 0x00005E5C, + 15750: 0x00007DF3, + 15751: 0x00005EDB, + 15752: 0x00005EDE, + 15753: 0x00005EE1, + 15754: 0x00005F49, + 15755: 0x00005FB2, + 15756: 0x0000618B, + 15757: 0x00006183, + 15758: 0x00006179, + 15759: 0x000061B1, + 15760: 0x000061B0, + 15761: 0x000061A2, + 15762: 0x00006189, + 15763: 0x0000619B, + 15764: 0x00006193, + 15765: 0x000061AF, + 15766: 0x000061AD, + 15767: 0x0000619F, + 15768: 0x00006192, + 15769: 0x000061AA, + 15770: 0x000061A1, + 15771: 0x0000618D, + 15772: 0x00006166, + 15773: 0x000061B3, + 15774: 0x0000622D, + 15775: 0x0000646E, + 15776: 0x00006470, + 15777: 0x00006496, + 15778: 0x000064A0, + 15779: 0x00006485, + 15780: 0x00006497, + 15781: 0x0000649C, + 15782: 0x0000648F, + 15783: 0x0000648B, + 15784: 0x0000648A, + 15785: 0x0000648C, + 15786: 0x000064A3, + 15787: 0x0000649F, + 15788: 0x00006468, + 15789: 0x000064B1, + 15790: 0x00006498, + 15791: 0x00006576, + 15792: 0x0000657A, + 15793: 0x00006579, + 15794: 0x0000657B, + 15795: 0x000065B2, + 15796: 0x000065B3, + 15797: 0x000066B5, + 15798: 0x000066B0, + 15799: 0x000066A9, + 15800: 0x000066B2, + 15801: 0x000066B7, + 15802: 0x000066AA, + 15803: 0x000066AF, + 15804: 0x00006A00, + 15805: 0x00006A06, + 15806: 0x00006A17, + 15807: 0x000069E5, + 15808: 0x000069F8, + 15809: 0x00006A15, + 15810: 0x000069F1, + 15811: 0x000069E4, + 15812: 0x00006A20, + 15813: 0x000069FF, + 15814: 0x000069EC, + 15815: 0x000069E2, + 15816: 0x00006A1B, + 15817: 0x00006A1D, + 15818: 0x000069FE, + 15819: 0x00006A27, + 15820: 0x000069F2, + 15821: 0x000069EE, + 15822: 0x00006A14, + 15823: 0x000069F7, + 15824: 0x000069E7, + 15825: 0x00006A40, + 15826: 0x00006A08, + 15827: 0x000069E6, + 15828: 0x000069FB, + 15829: 0x00006A0D, + 15830: 0x000069FC, + 15831: 0x000069EB, + 15832: 0x00006A09, + 15833: 0x00006A04, + 15834: 0x00006A18, + 15835: 0x00006A25, + 15836: 0x00006A0F, + 15837: 0x000069F6, + 15838: 0x00006A26, + 15839: 0x00006A07, + 15840: 0x000069F4, + 15841: 0x00006A16, + 15842: 0x00006B51, + 15843: 0x00006BA5, + 15844: 0x00006BA3, + 15845: 0x00006BA2, + 15846: 0x00006BA6, + 15847: 0x00006C01, + 15848: 0x00006C00, + 15849: 0x00006BFF, + 15850: 0x00006C02, + 15851: 0x00006F41, + 15852: 0x00006F26, + 15853: 0x00006F7E, + 15854: 0x00006F87, + 15855: 0x00006FC6, + 15856: 0x00006F92, + 15857: 0x00006F8D, + 15858: 0x00006F89, + 15859: 0x00006F8C, + 15860: 0x00006F62, + 15861: 0x00006F4F, + 15862: 0x00006F85, + 15863: 0x00006F5A, + 15864: 0x00006F96, + 15865: 0x00006F76, + 15866: 0x00006F6C, + 15867: 0x00006F82, + 15868: 0x00006F55, + 15869: 0x00006F72, + 15870: 0x00006F52, + 15871: 0x00006F50, + 15872: 0x00006F57, + 15873: 0x00006F94, + 15874: 0x00006F93, + 15875: 0x00006F5D, + 15876: 0x00006F00, + 15877: 0x00006F61, + 15878: 0x00006F6B, + 15879: 0x00006F7D, + 15880: 0x00006F67, + 15881: 0x00006F90, + 15882: 0x00006F53, + 15883: 0x00006F8B, + 15884: 0x00006F69, + 15885: 0x00006F7F, + 15886: 0x00006F95, + 15887: 0x00006F63, + 15888: 0x00006F77, + 15889: 0x00006F6A, + 15890: 0x00006F7B, + 15891: 0x000071B2, + 15892: 0x000071AF, + 15893: 0x0000719B, + 15894: 0x000071B0, + 15895: 0x000071A0, + 15896: 0x0000719A, + 15897: 0x000071A9, + 15898: 0x000071B5, + 15899: 0x0000719D, + 15900: 0x000071A5, + 15901: 0x0000719E, + 15902: 0x000071A4, + 15903: 0x000071A1, + 15904: 0x000071AA, + 15905: 0x0000719C, + 15906: 0x000071A7, + 15907: 0x000071B3, + 15908: 0x00007298, + 15909: 0x0000729A, + 15910: 0x00007358, + 15911: 0x00007352, + 15912: 0x0000735E, + 15913: 0x0000735F, + 15914: 0x00007360, + 15915: 0x0000735D, + 15916: 0x0000735B, + 15917: 0x00007361, + 15918: 0x0000735A, + 15919: 0x00007359, + 15920: 0x00007362, + 15921: 0x00007487, + 15922: 0x00007489, + 15923: 0x0000748A, + 15924: 0x00007486, + 15925: 0x00007481, + 15926: 0x0000747D, + 15927: 0x00007485, + 15928: 0x00007488, + 15929: 0x0000747C, + 15930: 0x00007479, + 15931: 0x00007508, + 15932: 0x00007507, + 15933: 0x0000757E, + 15934: 0x00007625, + 15935: 0x0000761E, + 15936: 0x00007619, + 15937: 0x0000761D, + 15938: 0x0000761C, + 15939: 0x00007623, + 15940: 0x0000761A, + 15941: 0x00007628, + 15942: 0x0000761B, + 15943: 0x0000769C, + 15944: 0x0000769D, + 15945: 0x0000769E, + 15946: 0x0000769B, + 15947: 0x0000778D, + 15948: 0x0000778F, + 15949: 0x00007789, + 15950: 0x00007788, + 15951: 0x000078CD, + 15952: 0x000078BB, + 15953: 0x000078CF, + 15954: 0x000078CC, + 15955: 0x000078D1, + 15956: 0x000078CE, + 15957: 0x000078D4, + 15958: 0x000078C8, + 15959: 0x000078C3, + 15960: 0x000078C4, + 15961: 0x000078C9, + 15962: 0x0000799A, + 15963: 0x000079A1, + 15964: 0x000079A0, + 15965: 0x0000799C, + 15966: 0x000079A2, + 15967: 0x0000799B, + 15968: 0x00006B76, + 15969: 0x00007A39, + 15970: 0x00007AB2, + 15971: 0x00007AB4, + 15972: 0x00007AB3, + 15973: 0x00007BB7, + 15974: 0x00007BCB, + 15975: 0x00007BBE, + 15976: 0x00007BAC, + 15977: 0x00007BCE, + 15978: 0x00007BAF, + 15979: 0x00007BB9, + 15980: 0x00007BCA, + 15981: 0x00007BB5, + 15982: 0x00007CC5, + 15983: 0x00007CC8, + 15984: 0x00007CCC, + 15985: 0x00007CCB, + 15986: 0x00007DF7, + 15987: 0x00007DDB, + 15988: 0x00007DEA, + 15989: 0x00007DE7, + 15990: 0x00007DD7, + 15991: 0x00007DE1, + 15992: 0x00007E03, + 15993: 0x00007DFA, + 15994: 0x00007DE6, + 15995: 0x00007DF6, + 15996: 0x00007DF1, + 15997: 0x00007DF0, + 15998: 0x00007DEE, + 15999: 0x00007DDF, + 16000: 0x00007F76, + 16001: 0x00007FAC, + 16002: 0x00007FB0, + 16003: 0x00007FAD, + 16004: 0x00007FED, + 16005: 0x00007FEB, + 16006: 0x00007FEA, + 16007: 0x00007FEC, + 16008: 0x00007FE6, + 16009: 0x00007FE8, + 16010: 0x00008064, + 16011: 0x00008067, + 16012: 0x000081A3, + 16013: 0x0000819F, + 16014: 0x0000819E, + 16015: 0x00008195, + 16016: 0x000081A2, + 16017: 0x00008199, + 16018: 0x00008197, + 16019: 0x00008216, + 16020: 0x0000824F, + 16021: 0x00008253, + 16022: 0x00008252, + 16023: 0x00008250, + 16024: 0x0000824E, + 16025: 0x00008251, + 16026: 0x00008524, + 16027: 0x0000853B, + 16028: 0x0000850F, + 16029: 0x00008500, + 16030: 0x00008529, + 16031: 0x0000850E, + 16032: 0x00008509, + 16033: 0x0000850D, + 16034: 0x0000851F, + 16035: 0x0000850A, + 16036: 0x00008527, + 16037: 0x0000851C, + 16038: 0x000084FB, + 16039: 0x0000852B, + 16040: 0x000084FA, + 16041: 0x00008508, + 16042: 0x0000850C, + 16043: 0x000084F4, + 16044: 0x0000852A, + 16045: 0x000084F2, + 16046: 0x00008515, + 16047: 0x000084F7, + 16048: 0x000084EB, + 16049: 0x000084F3, + 16050: 0x000084FC, + 16051: 0x00008512, + 16052: 0x000084EA, + 16053: 0x000084E9, + 16054: 0x00008516, + 16055: 0x000084FE, + 16056: 0x00008528, + 16057: 0x0000851D, + 16058: 0x0000852E, + 16059: 0x00008502, + 16060: 0x000084FD, + 16061: 0x0000851E, + 16062: 0x000084F6, + 16063: 0x00008531, + 16064: 0x00008526, + 16065: 0x000084E7, + 16066: 0x000084E8, + 16067: 0x000084F0, + 16068: 0x000084EF, + 16069: 0x000084F9, + 16070: 0x00008518, + 16071: 0x00008520, + 16072: 0x00008530, + 16073: 0x0000850B, + 16074: 0x00008519, + 16075: 0x0000852F, + 16076: 0x00008662, + 16077: 0x00008756, + 16078: 0x00008763, + 16079: 0x00008764, + 16080: 0x00008777, + 16081: 0x000087E1, + 16082: 0x00008773, + 16083: 0x00008758, + 16084: 0x00008754, + 16085: 0x0000875B, + 16086: 0x00008752, + 16087: 0x00008761, + 16088: 0x0000875A, + 16089: 0x00008751, + 16090: 0x0000875E, + 16091: 0x0000876D, + 16092: 0x0000876A, + 16093: 0x00008750, + 16094: 0x0000874E, + 16095: 0x0000875F, + 16096: 0x0000875D, + 16097: 0x0000876F, + 16098: 0x0000876C, + 16099: 0x0000877A, + 16100: 0x0000876E, + 16101: 0x0000875C, + 16102: 0x00008765, + 16103: 0x0000874F, + 16104: 0x0000877B, + 16105: 0x00008775, + 16106: 0x00008762, + 16107: 0x00008767, + 16108: 0x00008769, + 16109: 0x0000885A, + 16110: 0x00008905, + 16111: 0x0000890C, + 16112: 0x00008914, + 16113: 0x0000890B, + 16114: 0x00008917, + 16115: 0x00008918, + 16116: 0x00008919, + 16117: 0x00008906, + 16118: 0x00008916, + 16119: 0x00008911, + 16120: 0x0000890E, + 16121: 0x00008909, + 16122: 0x000089A2, + 16123: 0x000089A4, + 16124: 0x000089A3, + 16125: 0x000089ED, + 16126: 0x000089F0, + 16127: 0x000089EC, + 16128: 0x00008ACF, + 16129: 0x00008AC6, + 16130: 0x00008AB8, + 16131: 0x00008AD3, + 16132: 0x00008AD1, + 16133: 0x00008AD4, + 16134: 0x00008AD5, + 16135: 0x00008ABB, + 16136: 0x00008AD7, + 16137: 0x00008ABE, + 16138: 0x00008AC0, + 16139: 0x00008AC5, + 16140: 0x00008AD8, + 16141: 0x00008AC3, + 16142: 0x00008ABA, + 16143: 0x00008ABD, + 16144: 0x00008AD9, + 16145: 0x00008C3E, + 16146: 0x00008C4D, + 16147: 0x00008C8F, + 16148: 0x00008CE5, + 16149: 0x00008CDF, + 16150: 0x00008CD9, + 16151: 0x00008CE8, + 16152: 0x00008CDA, + 16153: 0x00008CDD, + 16154: 0x00008CE7, + 16155: 0x00008DA0, + 16156: 0x00008D9C, + 16157: 0x00008DA1, + 16158: 0x00008D9B, + 16159: 0x00008E20, + 16160: 0x00008E23, + 16161: 0x00008E25, + 16162: 0x00008E24, + 16163: 0x00008E2E, + 16164: 0x00008E15, + 16165: 0x00008E1B, + 16166: 0x00008E16, + 16167: 0x00008E11, + 16168: 0x00008E19, + 16169: 0x00008E26, + 16170: 0x00008E27, + 16171: 0x00008E14, + 16172: 0x00008E12, + 16173: 0x00008E18, + 16174: 0x00008E13, + 16175: 0x00008E1C, + 16176: 0x00008E17, + 16177: 0x00008E1A, + 16178: 0x00008F2C, + 16179: 0x00008F24, + 16180: 0x00008F18, + 16181: 0x00008F1A, + 16182: 0x00008F20, + 16183: 0x00008F23, + 16184: 0x00008F16, + 16185: 0x00008F17, + 16186: 0x00009073, + 16187: 0x00009070, + 16188: 0x0000906F, + 16189: 0x00009067, + 16190: 0x0000906B, + 16191: 0x0000912F, + 16192: 0x0000912B, + 16193: 0x00009129, + 16194: 0x0000912A, + 16195: 0x00009132, + 16196: 0x00009126, + 16197: 0x0000912E, + 16198: 0x00009185, + 16199: 0x00009186, + 16200: 0x0000918A, + 16201: 0x00009181, + 16202: 0x00009182, + 16203: 0x00009184, + 16204: 0x00009180, + 16205: 0x000092D0, + 16206: 0x000092C3, + 16207: 0x000092C4, + 16208: 0x000092C0, + 16209: 0x000092D9, + 16210: 0x000092B6, + 16211: 0x000092CF, + 16212: 0x000092F1, + 16213: 0x000092DF, + 16214: 0x000092D8, + 16215: 0x000092E9, + 16216: 0x000092D7, + 16217: 0x000092DD, + 16218: 0x000092CC, + 16219: 0x000092EF, + 16220: 0x000092C2, + 16221: 0x000092E8, + 16222: 0x000092CA, + 16223: 0x000092C8, + 16224: 0x000092CE, + 16225: 0x000092E6, + 16226: 0x000092CD, + 16227: 0x000092D5, + 16228: 0x000092C9, + 16229: 0x000092E0, + 16230: 0x000092DE, + 16231: 0x000092E7, + 16232: 0x000092D1, + 16233: 0x000092D3, + 16234: 0x000092B5, + 16235: 0x000092E1, + 16236: 0x000092C6, + 16237: 0x000092B4, + 16238: 0x0000957C, + 16239: 0x000095AC, + 16240: 0x000095AB, + 16241: 0x000095AE, + 16242: 0x000095B0, + 16243: 0x000096A4, + 16244: 0x000096A2, + 16245: 0x000096D3, + 16246: 0x00009705, + 16247: 0x00009708, + 16248: 0x00009702, + 16249: 0x0000975A, + 16250: 0x0000978A, + 16251: 0x0000978E, + 16252: 0x00009788, + 16253: 0x000097D0, + 16254: 0x000097CF, + 16255: 0x0000981E, + 16256: 0x0000981D, + 16257: 0x00009826, + 16258: 0x00009829, + 16259: 0x00009828, + 16260: 0x00009820, + 16261: 0x0000981B, + 16262: 0x00009827, + 16263: 0x000098B2, + 16264: 0x00009908, + 16265: 0x000098FA, + 16266: 0x00009911, + 16267: 0x00009914, + 16268: 0x00009916, + 16269: 0x00009917, + 16270: 0x00009915, + 16271: 0x000099DC, + 16272: 0x000099CD, + 16273: 0x000099CF, + 16274: 0x000099D3, + 16275: 0x000099D4, + 16276: 0x000099CE, + 16277: 0x000099C9, + 16278: 0x000099D6, + 16279: 0x000099D8, + 16280: 0x000099CB, + 16281: 0x000099D7, + 16282: 0x000099CC, + 16283: 0x00009AB3, + 16284: 0x00009AEC, + 16285: 0x00009AEB, + 16286: 0x00009AF3, + 16287: 0x00009AF2, + 16288: 0x00009AF1, + 16289: 0x00009B46, + 16290: 0x00009B43, + 16291: 0x00009B67, + 16292: 0x00009B74, + 16293: 0x00009B71, + 16294: 0x00009B66, + 16295: 0x00009B76, + 16296: 0x00009B75, + 16297: 0x00009B70, + 16298: 0x00009B68, + 16299: 0x00009B64, + 16300: 0x00009B6C, + 16301: 0x00009CFC, + 16302: 0x00009CFA, + 16303: 0x00009CFD, + 16304: 0x00009CFF, + 16305: 0x00009CF7, + 16306: 0x00009D07, + 16307: 0x00009D00, + 16308: 0x00009CF9, + 16309: 0x00009CFB, + 16310: 0x00009D08, + 16311: 0x00009D05, + 16312: 0x00009D04, + 16313: 0x00009E83, + 16314: 0x00009ED3, + 16315: 0x00009F0F, + 16316: 0x00009F10, + 16317: 0x0000511C, + 16318: 0x00005113, + 16319: 0x00005117, + 16320: 0x0000511A, + 16321: 0x00005111, + 16322: 0x000051DE, + 16323: 0x00005334, + 16324: 0x000053E1, + 16325: 0x00005670, + 16326: 0x00005660, + 16327: 0x0000566E, + 16328: 0x00005673, + 16329: 0x00005666, + 16330: 0x00005663, + 16331: 0x0000566D, + 16332: 0x00005672, + 16333: 0x0000565E, + 16334: 0x00005677, + 16335: 0x0000571C, + 16336: 0x0000571B, + 16337: 0x000058C8, + 16338: 0x000058BD, + 16339: 0x000058C9, + 16340: 0x000058BF, + 16341: 0x000058BA, + 16342: 0x000058C2, + 16343: 0x000058BC, + 16344: 0x000058C6, + 16345: 0x00005B17, + 16346: 0x00005B19, + 16347: 0x00005B1B, + 16348: 0x00005B21, + 16349: 0x00005B14, + 16350: 0x00005B13, + 16351: 0x00005B10, + 16352: 0x00005B16, + 16353: 0x00005B28, + 16354: 0x00005B1A, + 16355: 0x00005B20, + 16356: 0x00005B1E, + 16357: 0x00005BEF, + 16358: 0x00005DAC, + 16359: 0x00005DB1, + 16360: 0x00005DA9, + 16361: 0x00005DA7, + 16362: 0x00005DB5, + 16363: 0x00005DB0, + 16364: 0x00005DAE, + 16365: 0x00005DAA, + 16366: 0x00005DA8, + 16367: 0x00005DB2, + 16368: 0x00005DAD, + 16369: 0x00005DAF, + 16370: 0x00005DB4, + 16371: 0x00005E67, + 16372: 0x00005E68, + 16373: 0x00005E66, + 16374: 0x00005E6F, + 16375: 0x00005EE9, + 16376: 0x00005EE7, + 16377: 0x00005EE6, + 16378: 0x00005EE8, + 16379: 0x00005EE5, + 16380: 0x00005F4B, + 16381: 0x00005FBC, + 16382: 0x0000619D, + 16383: 0x000061A8, + 16384: 0x00006196, + 16385: 0x000061C5, + 16386: 0x000061B4, + 16387: 0x000061C6, + 16388: 0x000061C1, + 16389: 0x000061CC, + 16390: 0x000061BA, + 16391: 0x000061BF, + 16392: 0x000061B8, + 16393: 0x0000618C, + 16394: 0x000064D7, + 16395: 0x000064D6, + 16396: 0x000064D0, + 16397: 0x000064CF, + 16398: 0x000064C9, + 16399: 0x000064BD, + 16400: 0x00006489, + 16401: 0x000064C3, + 16402: 0x000064DB, + 16403: 0x000064F3, + 16404: 0x000064D9, + 16405: 0x00006533, + 16406: 0x0000657F, + 16407: 0x0000657C, + 16408: 0x000065A2, + 16409: 0x000066C8, + 16410: 0x000066BE, + 16411: 0x000066C0, + 16412: 0x000066CA, + 16413: 0x000066CB, + 16414: 0x000066CF, + 16415: 0x000066BD, + 16416: 0x000066BB, + 16417: 0x000066BA, + 16418: 0x000066CC, + 16419: 0x00006723, + 16420: 0x00006A34, + 16421: 0x00006A66, + 16422: 0x00006A49, + 16423: 0x00006A67, + 16424: 0x00006A32, + 16425: 0x00006A68, + 16426: 0x00006A3E, + 16427: 0x00006A5D, + 16428: 0x00006A6D, + 16429: 0x00006A76, + 16430: 0x00006A5B, + 16431: 0x00006A51, + 16432: 0x00006A28, + 16433: 0x00006A5A, + 16434: 0x00006A3B, + 16435: 0x00006A3F, + 16436: 0x00006A41, + 16437: 0x00006A6A, + 16438: 0x00006A64, + 16439: 0x00006A50, + 16440: 0x00006A4F, + 16441: 0x00006A54, + 16442: 0x00006A6F, + 16443: 0x00006A69, + 16444: 0x00006A60, + 16445: 0x00006A3C, + 16446: 0x00006A5E, + 16447: 0x00006A56, + 16448: 0x00006A55, + 16449: 0x00006A4D, + 16450: 0x00006A4E, + 16451: 0x00006A46, + 16452: 0x00006B55, + 16453: 0x00006B54, + 16454: 0x00006B56, + 16455: 0x00006BA7, + 16456: 0x00006BAA, + 16457: 0x00006BAB, + 16458: 0x00006BC8, + 16459: 0x00006BC7, + 16460: 0x00006C04, + 16461: 0x00006C03, + 16462: 0x00006C06, + 16463: 0x00006FAD, + 16464: 0x00006FCB, + 16465: 0x00006FA3, + 16466: 0x00006FC7, + 16467: 0x00006FBC, + 16468: 0x00006FCE, + 16469: 0x00006FC8, + 16470: 0x00006F5E, + 16471: 0x00006FC4, + 16472: 0x00006FBD, + 16473: 0x00006F9E, + 16474: 0x00006FCA, + 16475: 0x00006FA8, + 16476: 0x00007004, + 16477: 0x00006FA5, + 16478: 0x00006FAE, + 16479: 0x00006FBA, + 16480: 0x00006FAC, + 16481: 0x00006FAA, + 16482: 0x00006FCF, + 16483: 0x00006FBF, + 16484: 0x00006FB8, + 16485: 0x00006FA2, + 16486: 0x00006FC9, + 16487: 0x00006FAB, + 16488: 0x00006FCD, + 16489: 0x00006FAF, + 16490: 0x00006FB2, + 16491: 0x00006FB0, + 16492: 0x000071C5, + 16493: 0x000071C2, + 16494: 0x000071BF, + 16495: 0x000071B8, + 16496: 0x000071D6, + 16497: 0x000071C0, + 16498: 0x000071C1, + 16499: 0x000071CB, + 16500: 0x000071D4, + 16501: 0x000071CA, + 16502: 0x000071C7, + 16503: 0x000071CF, + 16504: 0x000071BD, + 16505: 0x000071D8, + 16506: 0x000071BC, + 16507: 0x000071C6, + 16508: 0x000071DA, + 16509: 0x000071DB, + 16510: 0x0000729D, + 16511: 0x0000729E, + 16512: 0x00007369, + 16513: 0x00007366, + 16514: 0x00007367, + 16515: 0x0000736C, + 16516: 0x00007365, + 16517: 0x0000736B, + 16518: 0x0000736A, + 16519: 0x0000747F, + 16520: 0x0000749A, + 16521: 0x000074A0, + 16522: 0x00007494, + 16523: 0x00007492, + 16524: 0x00007495, + 16525: 0x000074A1, + 16526: 0x0000750B, + 16527: 0x00007580, + 16528: 0x0000762F, + 16529: 0x0000762D, + 16530: 0x00007631, + 16531: 0x0000763D, + 16532: 0x00007633, + 16533: 0x0000763C, + 16534: 0x00007635, + 16535: 0x00007632, + 16536: 0x00007630, + 16537: 0x000076BB, + 16538: 0x000076E6, + 16539: 0x0000779A, + 16540: 0x0000779D, + 16541: 0x000077A1, + 16542: 0x0000779C, + 16543: 0x0000779B, + 16544: 0x000077A2, + 16545: 0x000077A3, + 16546: 0x00007795, + 16547: 0x00007799, + 16548: 0x00007797, + 16549: 0x000078DD, + 16550: 0x000078E9, + 16551: 0x000078E5, + 16552: 0x000078EA, + 16553: 0x000078DE, + 16554: 0x000078E3, + 16555: 0x000078DB, + 16556: 0x000078E1, + 16557: 0x000078E2, + 16558: 0x000078ED, + 16559: 0x000078DF, + 16560: 0x000078E0, + 16561: 0x000079A4, + 16562: 0x00007A44, + 16563: 0x00007A48, + 16564: 0x00007A47, + 16565: 0x00007AB6, + 16566: 0x00007AB8, + 16567: 0x00007AB5, + 16568: 0x00007AB1, + 16569: 0x00007AB7, + 16570: 0x00007BDE, + 16571: 0x00007BE3, + 16572: 0x00007BE7, + 16573: 0x00007BDD, + 16574: 0x00007BD5, + 16575: 0x00007BE5, + 16576: 0x00007BDA, + 16577: 0x00007BE8, + 16578: 0x00007BF9, + 16579: 0x00007BD4, + 16580: 0x00007BEA, + 16581: 0x00007BE2, + 16582: 0x00007BDC, + 16583: 0x00007BEB, + 16584: 0x00007BD8, + 16585: 0x00007BDF, + 16586: 0x00007CD2, + 16587: 0x00007CD4, + 16588: 0x00007CD7, + 16589: 0x00007CD0, + 16590: 0x00007CD1, + 16591: 0x00007E12, + 16592: 0x00007E21, + 16593: 0x00007E17, + 16594: 0x00007E0C, + 16595: 0x00007E1F, + 16596: 0x00007E20, + 16597: 0x00007E13, + 16598: 0x00007E0E, + 16599: 0x00007E1C, + 16600: 0x00007E15, + 16601: 0x00007E1A, + 16602: 0x00007E22, + 16603: 0x00007E0B, + 16604: 0x00007E0F, + 16605: 0x00007E16, + 16606: 0x00007E0D, + 16607: 0x00007E14, + 16608: 0x00007E25, + 16609: 0x00007E24, + 16610: 0x00007F43, + 16611: 0x00007F7B, + 16612: 0x00007F7C, + 16613: 0x00007F7A, + 16614: 0x00007FB1, + 16615: 0x00007FEF, + 16616: 0x0000802A, + 16617: 0x00008029, + 16618: 0x0000806C, + 16619: 0x000081B1, + 16620: 0x000081A6, + 16621: 0x000081AE, + 16622: 0x000081B9, + 16623: 0x000081B5, + 16624: 0x000081AB, + 16625: 0x000081B0, + 16626: 0x000081AC, + 16627: 0x000081B4, + 16628: 0x000081B2, + 16629: 0x000081B7, + 16630: 0x000081A7, + 16631: 0x000081F2, + 16632: 0x00008255, + 16633: 0x00008256, + 16634: 0x00008257, + 16635: 0x00008556, + 16636: 0x00008545, + 16637: 0x0000856B, + 16638: 0x0000854D, + 16639: 0x00008553, + 16640: 0x00008561, + 16641: 0x00008558, + 16642: 0x00008540, + 16643: 0x00008546, + 16644: 0x00008564, + 16645: 0x00008541, + 16646: 0x00008562, + 16647: 0x00008544, + 16648: 0x00008551, + 16649: 0x00008547, + 16650: 0x00008563, + 16651: 0x0000853E, + 16652: 0x0000855B, + 16653: 0x00008571, + 16654: 0x0000854E, + 16655: 0x0000856E, + 16656: 0x00008575, + 16657: 0x00008555, + 16658: 0x00008567, + 16659: 0x00008560, + 16660: 0x0000858C, + 16661: 0x00008566, + 16662: 0x0000855D, + 16663: 0x00008554, + 16664: 0x00008565, + 16665: 0x0000856C, + 16666: 0x00008663, + 16667: 0x00008665, + 16668: 0x00008664, + 16669: 0x0000879B, + 16670: 0x0000878F, + 16671: 0x00008797, + 16672: 0x00008793, + 16673: 0x00008792, + 16674: 0x00008788, + 16675: 0x00008781, + 16676: 0x00008796, + 16677: 0x00008798, + 16678: 0x00008779, + 16679: 0x00008787, + 16680: 0x000087A3, + 16681: 0x00008785, + 16682: 0x00008790, + 16683: 0x00008791, + 16684: 0x0000879D, + 16685: 0x00008784, + 16686: 0x00008794, + 16687: 0x0000879C, + 16688: 0x0000879A, + 16689: 0x00008789, + 16690: 0x0000891E, + 16691: 0x00008926, + 16692: 0x00008930, + 16693: 0x0000892D, + 16694: 0x0000892E, + 16695: 0x00008927, + 16696: 0x00008931, + 16697: 0x00008922, + 16698: 0x00008929, + 16699: 0x00008923, + 16700: 0x0000892F, + 16701: 0x0000892C, + 16702: 0x0000891F, + 16703: 0x000089F1, + 16704: 0x00008AE0, + 16705: 0x00008AE2, + 16706: 0x00008AF2, + 16707: 0x00008AF4, + 16708: 0x00008AF5, + 16709: 0x00008ADD, + 16710: 0x00008B14, + 16711: 0x00008AE4, + 16712: 0x00008ADF, + 16713: 0x00008AF0, + 16714: 0x00008AC8, + 16715: 0x00008ADE, + 16716: 0x00008AE1, + 16717: 0x00008AE8, + 16718: 0x00008AFF, + 16719: 0x00008AEF, + 16720: 0x00008AFB, + 16721: 0x00008C91, + 16722: 0x00008C92, + 16723: 0x00008C90, + 16724: 0x00008CF5, + 16725: 0x00008CEE, + 16726: 0x00008CF1, + 16727: 0x00008CF0, + 16728: 0x00008CF3, + 16729: 0x00008D6C, + 16730: 0x00008D6E, + 16731: 0x00008DA5, + 16732: 0x00008DA7, + 16733: 0x00008E33, + 16734: 0x00008E3E, + 16735: 0x00008E38, + 16736: 0x00008E40, + 16737: 0x00008E45, + 16738: 0x00008E36, + 16739: 0x00008E3C, + 16740: 0x00008E3D, + 16741: 0x00008E41, + 16742: 0x00008E30, + 16743: 0x00008E3F, + 16744: 0x00008EBD, + 16745: 0x00008F36, + 16746: 0x00008F2E, + 16747: 0x00008F35, + 16748: 0x00008F32, + 16749: 0x00008F39, + 16750: 0x00008F37, + 16751: 0x00008F34, + 16752: 0x00009076, + 16753: 0x00009079, + 16754: 0x0000907B, + 16755: 0x00009086, + 16756: 0x000090FA, + 16757: 0x00009133, + 16758: 0x00009135, + 16759: 0x00009136, + 16760: 0x00009193, + 16761: 0x00009190, + 16762: 0x00009191, + 16763: 0x0000918D, + 16764: 0x0000918F, + 16765: 0x00009327, + 16766: 0x0000931E, + 16767: 0x00009308, + 16768: 0x0000931F, + 16769: 0x00009306, + 16770: 0x0000930F, + 16771: 0x0000937A, + 16772: 0x00009338, + 16773: 0x0000933C, + 16774: 0x0000931B, + 16775: 0x00009323, + 16776: 0x00009312, + 16777: 0x00009301, + 16778: 0x00009346, + 16779: 0x0000932D, + 16780: 0x0000930E, + 16781: 0x0000930D, + 16782: 0x000092CB, + 16783: 0x0000931D, + 16784: 0x000092FA, + 16785: 0x00009325, + 16786: 0x00009313, + 16787: 0x000092F9, + 16788: 0x000092F7, + 16789: 0x00009334, + 16790: 0x00009302, + 16791: 0x00009324, + 16792: 0x000092FF, + 16793: 0x00009329, + 16794: 0x00009339, + 16795: 0x00009335, + 16796: 0x0000932A, + 16797: 0x00009314, + 16798: 0x0000930C, + 16799: 0x0000930B, + 16800: 0x000092FE, + 16801: 0x00009309, + 16802: 0x00009300, + 16803: 0x000092FB, + 16804: 0x00009316, + 16805: 0x000095BC, + 16806: 0x000095CD, + 16807: 0x000095BE, + 16808: 0x000095B9, + 16809: 0x000095BA, + 16810: 0x000095B6, + 16811: 0x000095BF, + 16812: 0x000095B5, + 16813: 0x000095BD, + 16814: 0x000096A9, + 16815: 0x000096D4, + 16816: 0x0000970B, + 16817: 0x00009712, + 16818: 0x00009710, + 16819: 0x00009799, + 16820: 0x00009797, + 16821: 0x00009794, + 16822: 0x000097F0, + 16823: 0x000097F8, + 16824: 0x00009835, + 16825: 0x0000982F, + 16826: 0x00009832, + 16827: 0x00009924, + 16828: 0x0000991F, + 16829: 0x00009927, + 16830: 0x00009929, + 16831: 0x0000999E, + 16832: 0x000099EE, + 16833: 0x000099EC, + 16834: 0x000099E5, + 16835: 0x000099E4, + 16836: 0x000099F0, + 16837: 0x000099E3, + 16838: 0x000099EA, + 16839: 0x000099E9, + 16840: 0x000099E7, + 16841: 0x00009AB9, + 16842: 0x00009ABF, + 16843: 0x00009AB4, + 16844: 0x00009ABB, + 16845: 0x00009AF6, + 16846: 0x00009AFA, + 16847: 0x00009AF9, + 16848: 0x00009AF7, + 16849: 0x00009B33, + 16850: 0x00009B80, + 16851: 0x00009B85, + 16852: 0x00009B87, + 16853: 0x00009B7C, + 16854: 0x00009B7E, + 16855: 0x00009B7B, + 16856: 0x00009B82, + 16857: 0x00009B93, + 16858: 0x00009B92, + 16859: 0x00009B90, + 16860: 0x00009B7A, + 16861: 0x00009B95, + 16862: 0x00009B7D, + 16863: 0x00009B88, + 16864: 0x00009D25, + 16865: 0x00009D17, + 16866: 0x00009D20, + 16867: 0x00009D1E, + 16868: 0x00009D14, + 16869: 0x00009D29, + 16870: 0x00009D1D, + 16871: 0x00009D18, + 16872: 0x00009D22, + 16873: 0x00009D10, + 16874: 0x00009D19, + 16875: 0x00009D1F, + 16876: 0x00009E88, + 16877: 0x00009E86, + 16878: 0x00009E87, + 16879: 0x00009EAE, + 16880: 0x00009EAD, + 16881: 0x00009ED5, + 16882: 0x00009ED6, + 16883: 0x00009EFA, + 16884: 0x00009F12, + 16885: 0x00009F3D, + 16886: 0x00005126, + 16887: 0x00005125, + 16888: 0x00005122, + 16889: 0x00005124, + 16890: 0x00005120, + 16891: 0x00005129, + 16892: 0x000052F4, + 16893: 0x00005693, + 16894: 0x0000568C, + 16895: 0x0000568D, + 16896: 0x00005686, + 16897: 0x00005684, + 16898: 0x00005683, + 16899: 0x0000567E, + 16900: 0x00005682, + 16901: 0x0000567F, + 16902: 0x00005681, + 16903: 0x000058D6, + 16904: 0x000058D4, + 16905: 0x000058CF, + 16906: 0x000058D2, + 16907: 0x00005B2D, + 16908: 0x00005B25, + 16909: 0x00005B32, + 16910: 0x00005B23, + 16911: 0x00005B2C, + 16912: 0x00005B27, + 16913: 0x00005B26, + 16914: 0x00005B2F, + 16915: 0x00005B2E, + 16916: 0x00005B7B, + 16917: 0x00005BF1, + 16918: 0x00005BF2, + 16919: 0x00005DB7, + 16920: 0x00005E6C, + 16921: 0x00005E6A, + 16922: 0x00005FBE, + 16923: 0x00005FBB, + 16924: 0x000061C3, + 16925: 0x000061B5, + 16926: 0x000061BC, + 16927: 0x000061E7, + 16928: 0x000061E0, + 16929: 0x000061E5, + 16930: 0x000061E4, + 16931: 0x000061E8, + 16932: 0x000061DE, + 16933: 0x000064EF, + 16934: 0x000064E9, + 16935: 0x000064E3, + 16936: 0x000064EB, + 16937: 0x000064E4, + 16938: 0x000064E8, + 16939: 0x00006581, + 16940: 0x00006580, + 16941: 0x000065B6, + 16942: 0x000065DA, + 16943: 0x000066D2, + 16944: 0x00006A8D, + 16945: 0x00006A96, + 16946: 0x00006A81, + 16947: 0x00006AA5, + 16948: 0x00006A89, + 16949: 0x00006A9F, + 16950: 0x00006A9B, + 16951: 0x00006AA1, + 16952: 0x00006A9E, + 16953: 0x00006A87, + 16954: 0x00006A93, + 16955: 0x00006A8E, + 16956: 0x00006A95, + 16957: 0x00006A83, + 16958: 0x00006AA8, + 16959: 0x00006AA4, + 16960: 0x00006A91, + 16961: 0x00006A7F, + 16962: 0x00006AA6, + 16963: 0x00006A9A, + 16964: 0x00006A85, + 16965: 0x00006A8C, + 16966: 0x00006A92, + 16967: 0x00006B5B, + 16968: 0x00006BAD, + 16969: 0x00006C09, + 16970: 0x00006FCC, + 16971: 0x00006FA9, + 16972: 0x00006FF4, + 16973: 0x00006FD4, + 16974: 0x00006FE3, + 16975: 0x00006FDC, + 16976: 0x00006FED, + 16977: 0x00006FE7, + 16978: 0x00006FE6, + 16979: 0x00006FDE, + 16980: 0x00006FF2, + 16981: 0x00006FDD, + 16982: 0x00006FE2, + 16983: 0x00006FE8, + 16984: 0x000071E1, + 16985: 0x000071F1, + 16986: 0x000071E8, + 16987: 0x000071F2, + 16988: 0x000071E4, + 16989: 0x000071F0, + 16990: 0x000071E2, + 16991: 0x00007373, + 16992: 0x0000736E, + 16993: 0x0000736F, + 16994: 0x00007497, + 16995: 0x000074B2, + 16996: 0x000074AB, + 16997: 0x00007490, + 16998: 0x000074AA, + 16999: 0x000074AD, + 17000: 0x000074B1, + 17001: 0x000074A5, + 17002: 0x000074AF, + 17003: 0x00007510, + 17004: 0x00007511, + 17005: 0x00007512, + 17006: 0x0000750F, + 17007: 0x00007584, + 17008: 0x00007643, + 17009: 0x00007648, + 17010: 0x00007649, + 17011: 0x00007647, + 17012: 0x000076A4, + 17013: 0x000076E9, + 17014: 0x000077B5, + 17015: 0x000077AB, + 17016: 0x000077B2, + 17017: 0x000077B7, + 17018: 0x000077B6, + 17019: 0x000077B4, + 17020: 0x000077B1, + 17021: 0x000077A8, + 17022: 0x000077F0, + 17023: 0x000078F3, + 17024: 0x000078FD, + 17025: 0x00007902, + 17026: 0x000078FB, + 17027: 0x000078FC, + 17028: 0x000078F2, + 17029: 0x00007905, + 17030: 0x000078F9, + 17031: 0x000078FE, + 17032: 0x00007904, + 17033: 0x000079AB, + 17034: 0x000079A8, + 17035: 0x00007A5C, + 17036: 0x00007A5B, + 17037: 0x00007A56, + 17038: 0x00007A58, + 17039: 0x00007A54, + 17040: 0x00007A5A, + 17041: 0x00007ABE, + 17042: 0x00007AC0, + 17043: 0x00007AC1, + 17044: 0x00007C05, + 17045: 0x00007C0F, + 17046: 0x00007BF2, + 17047: 0x00007C00, + 17048: 0x00007BFF, + 17049: 0x00007BFB, + 17050: 0x00007C0E, + 17051: 0x00007BF4, + 17052: 0x00007C0B, + 17053: 0x00007BF3, + 17054: 0x00007C02, + 17055: 0x00007C09, + 17056: 0x00007C03, + 17057: 0x00007C01, + 17058: 0x00007BF8, + 17059: 0x00007BFD, + 17060: 0x00007C06, + 17061: 0x00007BF0, + 17062: 0x00007BF1, + 17063: 0x00007C10, + 17064: 0x00007C0A, + 17065: 0x00007CE8, + 17066: 0x00007E2D, + 17067: 0x00007E3C, + 17068: 0x00007E42, + 17069: 0x00007E33, + 17070: 0x00009848, + 17071: 0x00007E38, + 17072: 0x00007E2A, + 17073: 0x00007E49, + 17074: 0x00007E40, + 17075: 0x00007E47, + 17076: 0x00007E29, + 17077: 0x00007E4C, + 17078: 0x00007E30, + 17079: 0x00007E3B, + 17080: 0x00007E36, + 17081: 0x00007E44, + 17082: 0x00007E3A, + 17083: 0x00007F45, + 17084: 0x00007F7F, + 17085: 0x00007F7E, + 17086: 0x00007F7D, + 17087: 0x00007FF4, + 17088: 0x00007FF2, + 17089: 0x0000802C, + 17090: 0x000081BB, + 17091: 0x000081C4, + 17092: 0x000081CC, + 17093: 0x000081CA, + 17094: 0x000081C5, + 17095: 0x000081C7, + 17096: 0x000081BC, + 17097: 0x000081E9, + 17098: 0x0000825B, + 17099: 0x0000825A, + 17100: 0x0000825C, + 17101: 0x00008583, + 17102: 0x00008580, + 17103: 0x0000858F, + 17104: 0x000085A7, + 17105: 0x00008595, + 17106: 0x000085A0, + 17107: 0x0000858B, + 17108: 0x000085A3, + 17109: 0x0000857B, + 17110: 0x000085A4, + 17111: 0x0000859A, + 17112: 0x0000859E, + 17113: 0x00008577, + 17114: 0x0000857C, + 17115: 0x00008589, + 17116: 0x000085A1, + 17117: 0x0000857A, + 17118: 0x00008578, + 17119: 0x00008557, + 17120: 0x0000858E, + 17121: 0x00008596, + 17122: 0x00008586, + 17123: 0x0000858D, + 17124: 0x00008599, + 17125: 0x0000859D, + 17126: 0x00008581, + 17127: 0x000085A2, + 17128: 0x00008582, + 17129: 0x00008588, + 17130: 0x00008585, + 17131: 0x00008579, + 17132: 0x00008576, + 17133: 0x00008598, + 17134: 0x00008590, + 17135: 0x0000859F, + 17136: 0x00008668, + 17137: 0x000087BE, + 17138: 0x000087AA, + 17139: 0x000087AD, + 17140: 0x000087C5, + 17141: 0x000087B0, + 17142: 0x000087AC, + 17143: 0x000087B9, + 17144: 0x000087B5, + 17145: 0x000087BC, + 17146: 0x000087AE, + 17147: 0x000087C9, + 17148: 0x000087C3, + 17149: 0x000087C2, + 17150: 0x000087CC, + 17151: 0x000087B7, + 17152: 0x000087AF, + 17153: 0x000087C4, + 17154: 0x000087CA, + 17155: 0x000087B4, + 17156: 0x000087B6, + 17157: 0x000087BF, + 17158: 0x000087B8, + 17159: 0x000087BD, + 17160: 0x000087DE, + 17161: 0x000087B2, + 17162: 0x00008935, + 17163: 0x00008933, + 17164: 0x0000893C, + 17165: 0x0000893E, + 17166: 0x00008941, + 17167: 0x00008952, + 17168: 0x00008937, + 17169: 0x00008942, + 17170: 0x000089AD, + 17171: 0x000089AF, + 17172: 0x000089AE, + 17173: 0x000089F2, + 17174: 0x000089F3, + 17175: 0x00008B1E, + 17176: 0x00008B18, + 17177: 0x00008B16, + 17178: 0x00008B11, + 17179: 0x00008B05, + 17180: 0x00008B0B, + 17181: 0x00008B22, + 17182: 0x00008B0F, + 17183: 0x00008B12, + 17184: 0x00008B15, + 17185: 0x00008B07, + 17186: 0x00008B0D, + 17187: 0x00008B08, + 17188: 0x00008B06, + 17189: 0x00008B1C, + 17190: 0x00008B13, + 17191: 0x00008B1A, + 17192: 0x00008C4F, + 17193: 0x00008C70, + 17194: 0x00008C72, + 17195: 0x00008C71, + 17196: 0x00008C6F, + 17197: 0x00008C95, + 17198: 0x00008C94, + 17199: 0x00008CF9, + 17200: 0x00008D6F, + 17201: 0x00008E4E, + 17202: 0x00008E4D, + 17203: 0x00008E53, + 17204: 0x00008E50, + 17205: 0x00008E4C, + 17206: 0x00008E47, + 17207: 0x00008F43, + 17208: 0x00008F40, + 17209: 0x00009085, + 17210: 0x0000907E, + 17211: 0x00009138, + 17212: 0x0000919A, + 17213: 0x000091A2, + 17214: 0x0000919B, + 17215: 0x00009199, + 17216: 0x0000919F, + 17217: 0x000091A1, + 17218: 0x0000919D, + 17219: 0x000091A0, + 17220: 0x000093A1, + 17221: 0x00009383, + 17222: 0x000093AF, + 17223: 0x00009364, + 17224: 0x00009356, + 17225: 0x00009347, + 17226: 0x0000937C, + 17227: 0x00009358, + 17228: 0x0000935C, + 17229: 0x00009376, + 17230: 0x00009349, + 17231: 0x00009350, + 17232: 0x00009351, + 17233: 0x00009360, + 17234: 0x0000936D, + 17235: 0x0000938F, + 17236: 0x0000934C, + 17237: 0x0000936A, + 17238: 0x00009379, + 17239: 0x00009357, + 17240: 0x00009355, + 17241: 0x00009352, + 17242: 0x0000934F, + 17243: 0x00009371, + 17244: 0x00009377, + 17245: 0x0000937B, + 17246: 0x00009361, + 17247: 0x0000935E, + 17248: 0x00009363, + 17249: 0x00009367, + 17250: 0x00009380, + 17251: 0x0000934E, + 17252: 0x00009359, + 17253: 0x000095C7, + 17254: 0x000095C0, + 17255: 0x000095C9, + 17256: 0x000095C3, + 17257: 0x000095C5, + 17258: 0x000095B7, + 17259: 0x000096AE, + 17260: 0x000096B0, + 17261: 0x000096AC, + 17262: 0x00009720, + 17263: 0x0000971F, + 17264: 0x00009718, + 17265: 0x0000971D, + 17266: 0x00009719, + 17267: 0x0000979A, + 17268: 0x000097A1, + 17269: 0x0000979C, + 17270: 0x0000979E, + 17271: 0x0000979D, + 17272: 0x000097D5, + 17273: 0x000097D4, + 17274: 0x000097F1, + 17275: 0x00009841, + 17276: 0x00009844, + 17277: 0x0000984A, + 17278: 0x00009849, + 17279: 0x00009845, + 17280: 0x00009843, + 17281: 0x00009925, + 17282: 0x0000992B, + 17283: 0x0000992C, + 17284: 0x0000992A, + 17285: 0x00009933, + 17286: 0x00009932, + 17287: 0x0000992F, + 17288: 0x0000992D, + 17289: 0x00009931, + 17290: 0x00009930, + 17291: 0x00009998, + 17292: 0x000099A3, + 17293: 0x000099A1, + 17294: 0x00009A02, + 17295: 0x000099FA, + 17296: 0x000099F4, + 17297: 0x000099F7, + 17298: 0x000099F9, + 17299: 0x000099F8, + 17300: 0x000099F6, + 17301: 0x000099FB, + 17302: 0x000099FD, + 17303: 0x000099FE, + 17304: 0x000099FC, + 17305: 0x00009A03, + 17306: 0x00009ABE, + 17307: 0x00009AFE, + 17308: 0x00009AFD, + 17309: 0x00009B01, + 17310: 0x00009AFC, + 17311: 0x00009B48, + 17312: 0x00009B9A, + 17313: 0x00009BA8, + 17314: 0x00009B9E, + 17315: 0x00009B9B, + 17316: 0x00009BA6, + 17317: 0x00009BA1, + 17318: 0x00009BA5, + 17319: 0x00009BA4, + 17320: 0x00009B86, + 17321: 0x00009BA2, + 17322: 0x00009BA0, + 17323: 0x00009BAF, + 17324: 0x00009D33, + 17325: 0x00009D41, + 17326: 0x00009D67, + 17327: 0x00009D36, + 17328: 0x00009D2E, + 17329: 0x00009D2F, + 17330: 0x00009D31, + 17331: 0x00009D38, + 17332: 0x00009D30, + 17333: 0x00009D45, + 17334: 0x00009D42, + 17335: 0x00009D43, + 17336: 0x00009D3E, + 17337: 0x00009D37, + 17338: 0x00009D40, + 17339: 0x00009D3D, + 17340: 0x00007FF5, + 17341: 0x00009D2D, + 17342: 0x00009E8A, + 17343: 0x00009E89, + 17344: 0x00009E8D, + 17345: 0x00009EB0, + 17346: 0x00009EC8, + 17347: 0x00009EDA, + 17348: 0x00009EFB, + 17349: 0x00009EFF, + 17350: 0x00009F24, + 17351: 0x00009F23, + 17352: 0x00009F22, + 17353: 0x00009F54, + 17354: 0x00009FA0, + 17355: 0x00005131, + 17356: 0x0000512D, + 17357: 0x0000512E, + 17358: 0x00005698, + 17359: 0x0000569C, + 17360: 0x00005697, + 17361: 0x0000569A, + 17362: 0x0000569D, + 17363: 0x00005699, + 17364: 0x00005970, + 17365: 0x00005B3C, + 17366: 0x00005C69, + 17367: 0x00005C6A, + 17368: 0x00005DC0, + 17369: 0x00005E6D, + 17370: 0x00005E6E, + 17371: 0x000061D8, + 17372: 0x000061DF, + 17373: 0x000061ED, + 17374: 0x000061EE, + 17375: 0x000061F1, + 17376: 0x000061EA, + 17377: 0x000061F0, + 17378: 0x000061EB, + 17379: 0x000061D6, + 17380: 0x000061E9, + 17381: 0x000064FF, + 17382: 0x00006504, + 17383: 0x000064FD, + 17384: 0x000064F8, + 17385: 0x00006501, + 17386: 0x00006503, + 17387: 0x000064FC, + 17388: 0x00006594, + 17389: 0x000065DB, + 17390: 0x000066DA, + 17391: 0x000066DB, + 17392: 0x000066D8, + 17393: 0x00006AC5, + 17394: 0x00006AB9, + 17395: 0x00006ABD, + 17396: 0x00006AE1, + 17397: 0x00006AC6, + 17398: 0x00006ABA, + 17399: 0x00006AB6, + 17400: 0x00006AB7, + 17401: 0x00006AC7, + 17402: 0x00006AB4, + 17403: 0x00006AAD, + 17404: 0x00006B5E, + 17405: 0x00006BC9, + 17406: 0x00006C0B, + 17407: 0x00007007, + 17408: 0x0000700C, + 17409: 0x0000700D, + 17410: 0x00007001, + 17411: 0x00007005, + 17412: 0x00007014, + 17413: 0x0000700E, + 17414: 0x00006FFF, + 17415: 0x00007000, + 17416: 0x00006FFB, + 17417: 0x00007026, + 17418: 0x00006FFC, + 17419: 0x00006FF7, + 17420: 0x0000700A, + 17421: 0x00007201, + 17422: 0x000071FF, + 17423: 0x000071F9, + 17424: 0x00007203, + 17425: 0x000071FD, + 17426: 0x00007376, + 17427: 0x000074B8, + 17428: 0x000074C0, + 17429: 0x000074B5, + 17430: 0x000074C1, + 17431: 0x000074BE, + 17432: 0x000074B6, + 17433: 0x000074BB, + 17434: 0x000074C2, + 17435: 0x00007514, + 17436: 0x00007513, + 17437: 0x0000765C, + 17438: 0x00007664, + 17439: 0x00007659, + 17440: 0x00007650, + 17441: 0x00007653, + 17442: 0x00007657, + 17443: 0x0000765A, + 17444: 0x000076A6, + 17445: 0x000076BD, + 17446: 0x000076EC, + 17447: 0x000077C2, + 17448: 0x000077BA, + 17449: 0x000078FF, + 17450: 0x0000790C, + 17451: 0x00007913, + 17452: 0x00007914, + 17453: 0x00007909, + 17454: 0x00007910, + 17455: 0x00007912, + 17456: 0x00007911, + 17457: 0x000079AD, + 17458: 0x000079AC, + 17459: 0x00007A5F, + 17460: 0x00007C1C, + 17461: 0x00007C29, + 17462: 0x00007C19, + 17463: 0x00007C20, + 17464: 0x00007C1F, + 17465: 0x00007C2D, + 17466: 0x00007C1D, + 17467: 0x00007C26, + 17468: 0x00007C28, + 17469: 0x00007C22, + 17470: 0x00007C25, + 17471: 0x00007C30, + 17472: 0x00007E5C, + 17473: 0x00007E50, + 17474: 0x00007E56, + 17475: 0x00007E63, + 17476: 0x00007E58, + 17477: 0x00007E62, + 17478: 0x00007E5F, + 17479: 0x00007E51, + 17480: 0x00007E60, + 17481: 0x00007E57, + 17482: 0x00007E53, + 17483: 0x00007FB5, + 17484: 0x00007FB3, + 17485: 0x00007FF7, + 17486: 0x00007FF8, + 17487: 0x00008075, + 17488: 0x000081D1, + 17489: 0x000081D2, + 17490: 0x000081D0, + 17491: 0x0000825F, + 17492: 0x0000825E, + 17493: 0x000085B4, + 17494: 0x000085C6, + 17495: 0x000085C0, + 17496: 0x000085C3, + 17497: 0x000085C2, + 17498: 0x000085B3, + 17499: 0x000085B5, + 17500: 0x000085BD, + 17501: 0x000085C7, + 17502: 0x000085C4, + 17503: 0x000085BF, + 17504: 0x000085CB, + 17505: 0x000085CE, + 17506: 0x000085C8, + 17507: 0x000085C5, + 17508: 0x000085B1, + 17509: 0x000085B6, + 17510: 0x000085D2, + 17511: 0x00008624, + 17512: 0x000085B8, + 17513: 0x000085B7, + 17514: 0x000085BE, + 17515: 0x00008669, + 17516: 0x000087E7, + 17517: 0x000087E6, + 17518: 0x000087E2, + 17519: 0x000087DB, + 17520: 0x000087EB, + 17521: 0x000087EA, + 17522: 0x000087E5, + 17523: 0x000087DF, + 17524: 0x000087F3, + 17525: 0x000087E4, + 17526: 0x000087D4, + 17527: 0x000087DC, + 17528: 0x000087D3, + 17529: 0x000087ED, + 17530: 0x000087D8, + 17531: 0x000087E3, + 17532: 0x000087A4, + 17533: 0x000087D7, + 17534: 0x000087D9, + 17535: 0x00008801, + 17536: 0x000087F4, + 17537: 0x000087E8, + 17538: 0x000087DD, + 17539: 0x00008953, + 17540: 0x0000894B, + 17541: 0x0000894F, + 17542: 0x0000894C, + 17543: 0x00008946, + 17544: 0x00008950, + 17545: 0x00008951, + 17546: 0x00008949, + 17547: 0x00008B2A, + 17548: 0x00008B27, + 17549: 0x00008B23, + 17550: 0x00008B33, + 17551: 0x00008B30, + 17552: 0x00008B35, + 17553: 0x00008B47, + 17554: 0x00008B2F, + 17555: 0x00008B3C, + 17556: 0x00008B3E, + 17557: 0x00008B31, + 17558: 0x00008B25, + 17559: 0x00008B37, + 17560: 0x00008B26, + 17561: 0x00008B36, + 17562: 0x00008B2E, + 17563: 0x00008B24, + 17564: 0x00008B3B, + 17565: 0x00008B3D, + 17566: 0x00008B3A, + 17567: 0x00008C42, + 17568: 0x00008C75, + 17569: 0x00008C99, + 17570: 0x00008C98, + 17571: 0x00008C97, + 17572: 0x00008CFE, + 17573: 0x00008D04, + 17574: 0x00008D02, + 17575: 0x00008D00, + 17576: 0x00008E5C, + 17577: 0x00008E62, + 17578: 0x00008E60, + 17579: 0x00008E57, + 17580: 0x00008E56, + 17581: 0x00008E5E, + 17582: 0x00008E65, + 17583: 0x00008E67, + 17584: 0x00008E5B, + 17585: 0x00008E5A, + 17586: 0x00008E61, + 17587: 0x00008E5D, + 17588: 0x00008E69, + 17589: 0x00008E54, + 17590: 0x00008F46, + 17591: 0x00008F47, + 17592: 0x00008F48, + 17593: 0x00008F4B, + 17594: 0x00009128, + 17595: 0x0000913A, + 17596: 0x0000913B, + 17597: 0x0000913E, + 17598: 0x000091A8, + 17599: 0x000091A5, + 17600: 0x000091A7, + 17601: 0x000091AF, + 17602: 0x000091AA, + 17603: 0x000093B5, + 17604: 0x0000938C, + 17605: 0x00009392, + 17606: 0x000093B7, + 17607: 0x0000939B, + 17608: 0x0000939D, + 17609: 0x00009389, + 17610: 0x000093A7, + 17611: 0x0000938E, + 17612: 0x000093AA, + 17613: 0x0000939E, + 17614: 0x000093A6, + 17615: 0x00009395, + 17616: 0x00009388, + 17617: 0x00009399, + 17618: 0x0000939F, + 17619: 0x0000938D, + 17620: 0x000093B1, + 17621: 0x00009391, + 17622: 0x000093B2, + 17623: 0x000093A4, + 17624: 0x000093A8, + 17625: 0x000093B4, + 17626: 0x000093A3, + 17627: 0x000093A5, + 17628: 0x000095D2, + 17629: 0x000095D3, + 17630: 0x000095D1, + 17631: 0x000096B3, + 17632: 0x000096D7, + 17633: 0x000096DA, + 17634: 0x00005DC2, + 17635: 0x000096DF, + 17636: 0x000096D8, + 17637: 0x000096DD, + 17638: 0x00009723, + 17639: 0x00009722, + 17640: 0x00009725, + 17641: 0x000097AC, + 17642: 0x000097AE, + 17643: 0x000097A8, + 17644: 0x000097AB, + 17645: 0x000097A4, + 17646: 0x000097AA, + 17647: 0x000097A2, + 17648: 0x000097A5, + 17649: 0x000097D7, + 17650: 0x000097D9, + 17651: 0x000097D6, + 17652: 0x000097D8, + 17653: 0x000097FA, + 17654: 0x00009850, + 17655: 0x00009851, + 17656: 0x00009852, + 17657: 0x000098B8, + 17658: 0x00009941, + 17659: 0x0000993C, + 17660: 0x0000993A, + 17661: 0x00009A0F, + 17662: 0x00009A0B, + 17663: 0x00009A09, + 17664: 0x00009A0D, + 17665: 0x00009A04, + 17666: 0x00009A11, + 17667: 0x00009A0A, + 17668: 0x00009A05, + 17669: 0x00009A07, + 17670: 0x00009A06, + 17671: 0x00009AC0, + 17672: 0x00009ADC, + 17673: 0x00009B08, + 17674: 0x00009B04, + 17675: 0x00009B05, + 17676: 0x00009B29, + 17677: 0x00009B35, + 17678: 0x00009B4A, + 17679: 0x00009B4C, + 17680: 0x00009B4B, + 17681: 0x00009BC7, + 17682: 0x00009BC6, + 17683: 0x00009BC3, + 17684: 0x00009BBF, + 17685: 0x00009BC1, + 17686: 0x00009BB5, + 17687: 0x00009BB8, + 17688: 0x00009BD3, + 17689: 0x00009BB6, + 17690: 0x00009BC4, + 17691: 0x00009BB9, + 17692: 0x00009BBD, + 17693: 0x00009D5C, + 17694: 0x00009D53, + 17695: 0x00009D4F, + 17696: 0x00009D4A, + 17697: 0x00009D5B, + 17698: 0x00009D4B, + 17699: 0x00009D59, + 17700: 0x00009D56, + 17701: 0x00009D4C, + 17702: 0x00009D57, + 17703: 0x00009D52, + 17704: 0x00009D54, + 17705: 0x00009D5F, + 17706: 0x00009D58, + 17707: 0x00009D5A, + 17708: 0x00009E8E, + 17709: 0x00009E8C, + 17710: 0x00009EDF, + 17711: 0x00009F01, + 17712: 0x00009F00, + 17713: 0x00009F16, + 17714: 0x00009F25, + 17715: 0x00009F2B, + 17716: 0x00009F2A, + 17717: 0x00009F29, + 17718: 0x00009F28, + 17719: 0x00009F4C, + 17720: 0x00009F55, + 17721: 0x00005134, + 17722: 0x00005135, + 17723: 0x00005296, + 17724: 0x000052F7, + 17725: 0x000053B4, + 17726: 0x000056AB, + 17727: 0x000056AD, + 17728: 0x000056A6, + 17729: 0x000056A7, + 17730: 0x000056AA, + 17731: 0x000056AC, + 17732: 0x000058DA, + 17733: 0x000058DD, + 17734: 0x000058DB, + 17735: 0x00005912, + 17736: 0x00005B3D, + 17737: 0x00005B3E, + 17738: 0x00005B3F, + 17739: 0x00005DC3, + 17740: 0x00005E70, + 17741: 0x00005FBF, + 17742: 0x000061FB, + 17743: 0x00006507, + 17744: 0x00006510, + 17745: 0x0000650D, + 17746: 0x00006509, + 17747: 0x0000650C, + 17748: 0x0000650E, + 17749: 0x00006584, + 17750: 0x000065DE, + 17751: 0x000065DD, + 17752: 0x000066DE, + 17753: 0x00006AE7, + 17754: 0x00006AE0, + 17755: 0x00006ACC, + 17756: 0x00006AD1, + 17757: 0x00006AD9, + 17758: 0x00006ACB, + 17759: 0x00006ADF, + 17760: 0x00006ADC, + 17761: 0x00006AD0, + 17762: 0x00006AEB, + 17763: 0x00006ACF, + 17764: 0x00006ACD, + 17765: 0x00006ADE, + 17766: 0x00006B60, + 17767: 0x00006BB0, + 17768: 0x00006C0C, + 17769: 0x00007019, + 17770: 0x00007027, + 17771: 0x00007020, + 17772: 0x00007016, + 17773: 0x0000702B, + 17774: 0x00007021, + 17775: 0x00007022, + 17776: 0x00007023, + 17777: 0x00007029, + 17778: 0x00007017, + 17779: 0x00007024, + 17780: 0x0000701C, + 17781: 0x0000702A, + 17782: 0x0000720C, + 17783: 0x0000720A, + 17784: 0x00007207, + 17785: 0x00007202, + 17786: 0x00007205, + 17787: 0x000072A5, + 17788: 0x000072A6, + 17789: 0x000072A4, + 17790: 0x000072A3, + 17791: 0x000072A1, + 17792: 0x000074CB, + 17793: 0x000074C5, + 17794: 0x000074B7, + 17795: 0x000074C3, + 17796: 0x00007516, + 17797: 0x00007660, + 17798: 0x000077C9, + 17799: 0x000077CA, + 17800: 0x000077C4, + 17801: 0x000077F1, + 17802: 0x0000791D, + 17803: 0x0000791B, + 17804: 0x00007921, + 17805: 0x0000791C, + 17806: 0x00007917, + 17807: 0x0000791E, + 17808: 0x000079B0, + 17809: 0x00007A67, + 17810: 0x00007A68, + 17811: 0x00007C33, + 17812: 0x00007C3C, + 17813: 0x00007C39, + 17814: 0x00007C2C, + 17815: 0x00007C3B, + 17816: 0x00007CEC, + 17817: 0x00007CEA, + 17818: 0x00007E76, + 17819: 0x00007E75, + 17820: 0x00007E78, + 17821: 0x00007E70, + 17822: 0x00007E77, + 17823: 0x00007E6F, + 17824: 0x00007E7A, + 17825: 0x00007E72, + 17826: 0x00007E74, + 17827: 0x00007E68, + 17828: 0x00007F4B, + 17829: 0x00007F4A, + 17830: 0x00007F83, + 17831: 0x00007F86, + 17832: 0x00007FB7, + 17833: 0x00007FFD, + 17834: 0x00007FFE, + 17835: 0x00008078, + 17836: 0x000081D7, + 17837: 0x000081D5, + 17838: 0x00008264, + 17839: 0x00008261, + 17840: 0x00008263, + 17841: 0x000085EB, + 17842: 0x000085F1, + 17843: 0x000085ED, + 17844: 0x000085D9, + 17845: 0x000085E1, + 17846: 0x000085E8, + 17847: 0x000085DA, + 17848: 0x000085D7, + 17849: 0x000085EC, + 17850: 0x000085F2, + 17851: 0x000085F8, + 17852: 0x000085D8, + 17853: 0x000085DF, + 17854: 0x000085E3, + 17855: 0x000085DC, + 17856: 0x000085D1, + 17857: 0x000085F0, + 17858: 0x000085E6, + 17859: 0x000085EF, + 17860: 0x000085DE, + 17861: 0x000085E2, + 17862: 0x00008800, + 17863: 0x000087FA, + 17864: 0x00008803, + 17865: 0x000087F6, + 17866: 0x000087F7, + 17867: 0x00008809, + 17868: 0x0000880C, + 17869: 0x0000880B, + 17870: 0x00008806, + 17871: 0x000087FC, + 17872: 0x00008808, + 17873: 0x000087FF, + 17874: 0x0000880A, + 17875: 0x00008802, + 17876: 0x00008962, + 17877: 0x0000895A, + 17878: 0x0000895B, + 17879: 0x00008957, + 17880: 0x00008961, + 17881: 0x0000895C, + 17882: 0x00008958, + 17883: 0x0000895D, + 17884: 0x00008959, + 17885: 0x00008988, + 17886: 0x000089B7, + 17887: 0x000089B6, + 17888: 0x000089F6, + 17889: 0x00008B50, + 17890: 0x00008B48, + 17891: 0x00008B4A, + 17892: 0x00008B40, + 17893: 0x00008B53, + 17894: 0x00008B56, + 17895: 0x00008B54, + 17896: 0x00008B4B, + 17897: 0x00008B55, + 17898: 0x00008B51, + 17899: 0x00008B42, + 17900: 0x00008B52, + 17901: 0x00008B57, + 17902: 0x00008C43, + 17903: 0x00008C77, + 17904: 0x00008C76, + 17905: 0x00008C9A, + 17906: 0x00008D06, + 17907: 0x00008D07, + 17908: 0x00008D09, + 17909: 0x00008DAC, + 17910: 0x00008DAA, + 17911: 0x00008DAD, + 17912: 0x00008DAB, + 17913: 0x00008E6D, + 17914: 0x00008E78, + 17915: 0x00008E73, + 17916: 0x00008E6A, + 17917: 0x00008E6F, + 17918: 0x00008E7B, + 17919: 0x00008EC2, + 17920: 0x00008F52, + 17921: 0x00008F51, + 17922: 0x00008F4F, + 17923: 0x00008F50, + 17924: 0x00008F53, + 17925: 0x00008FB4, + 17926: 0x00009140, + 17927: 0x0000913F, + 17928: 0x000091B0, + 17929: 0x000091AD, + 17930: 0x000093DE, + 17931: 0x000093C7, + 17932: 0x000093CF, + 17933: 0x000093C2, + 17934: 0x000093DA, + 17935: 0x000093D0, + 17936: 0x000093F9, + 17937: 0x000093EC, + 17938: 0x000093CC, + 17939: 0x000093D9, + 17940: 0x000093A9, + 17941: 0x000093E6, + 17942: 0x000093CA, + 17943: 0x000093D4, + 17944: 0x000093EE, + 17945: 0x000093E3, + 17946: 0x000093D5, + 17947: 0x000093C4, + 17948: 0x000093CE, + 17949: 0x000093C0, + 17950: 0x000093D2, + 17951: 0x000093E7, + 17952: 0x0000957D, + 17953: 0x000095DA, + 17954: 0x000095DB, + 17955: 0x000096E1, + 17956: 0x00009729, + 17957: 0x0000972B, + 17958: 0x0000972C, + 17959: 0x00009728, + 17960: 0x00009726, + 17961: 0x000097B3, + 17962: 0x000097B7, + 17963: 0x000097B6, + 17964: 0x000097DD, + 17965: 0x000097DE, + 17966: 0x000097DF, + 17967: 0x0000985C, + 17968: 0x00009859, + 17969: 0x0000985D, + 17970: 0x00009857, + 17971: 0x000098BF, + 17972: 0x000098BD, + 17973: 0x000098BB, + 17974: 0x000098BE, + 17975: 0x00009948, + 17976: 0x00009947, + 17977: 0x00009943, + 17978: 0x000099A6, + 17979: 0x000099A7, + 17980: 0x00009A1A, + 17981: 0x00009A15, + 17982: 0x00009A25, + 17983: 0x00009A1D, + 17984: 0x00009A24, + 17985: 0x00009A1B, + 17986: 0x00009A22, + 17987: 0x00009A20, + 17988: 0x00009A27, + 17989: 0x00009A23, + 17990: 0x00009A1E, + 17991: 0x00009A1C, + 17992: 0x00009A14, + 17993: 0x00009AC2, + 17994: 0x00009B0B, + 17995: 0x00009B0A, + 17996: 0x00009B0E, + 17997: 0x00009B0C, + 17998: 0x00009B37, + 17999: 0x00009BEA, + 18000: 0x00009BEB, + 18001: 0x00009BE0, + 18002: 0x00009BDE, + 18003: 0x00009BE4, + 18004: 0x00009BE6, + 18005: 0x00009BE2, + 18006: 0x00009BF0, + 18007: 0x00009BD4, + 18008: 0x00009BD7, + 18009: 0x00009BEC, + 18010: 0x00009BDC, + 18011: 0x00009BD9, + 18012: 0x00009BE5, + 18013: 0x00009BD5, + 18014: 0x00009BE1, + 18015: 0x00009BDA, + 18016: 0x00009D77, + 18017: 0x00009D81, + 18018: 0x00009D8A, + 18019: 0x00009D84, + 18020: 0x00009D88, + 18021: 0x00009D71, + 18022: 0x00009D80, + 18023: 0x00009D78, + 18024: 0x00009D86, + 18025: 0x00009D8B, + 18026: 0x00009D8C, + 18027: 0x00009D7D, + 18028: 0x00009D6B, + 18029: 0x00009D74, + 18030: 0x00009D75, + 18031: 0x00009D70, + 18032: 0x00009D69, + 18033: 0x00009D85, + 18034: 0x00009D73, + 18035: 0x00009D7B, + 18036: 0x00009D82, + 18037: 0x00009D6F, + 18038: 0x00009D79, + 18039: 0x00009D7F, + 18040: 0x00009D87, + 18041: 0x00009D68, + 18042: 0x00009E94, + 18043: 0x00009E91, + 18044: 0x00009EC0, + 18045: 0x00009EFC, + 18046: 0x00009F2D, + 18047: 0x00009F40, + 18048: 0x00009F41, + 18049: 0x00009F4D, + 18050: 0x00009F56, + 18051: 0x00009F57, + 18052: 0x00009F58, + 18053: 0x00005337, + 18054: 0x000056B2, + 18055: 0x000056B5, + 18056: 0x000056B3, + 18057: 0x000058E3, + 18058: 0x00005B45, + 18059: 0x00005DC6, + 18060: 0x00005DC7, + 18061: 0x00005EEE, + 18062: 0x00005EEF, + 18063: 0x00005FC0, + 18064: 0x00005FC1, + 18065: 0x000061F9, + 18066: 0x00006517, + 18067: 0x00006516, + 18068: 0x00006515, + 18069: 0x00006513, + 18070: 0x000065DF, + 18071: 0x000066E8, + 18072: 0x000066E3, + 18073: 0x000066E4, + 18074: 0x00006AF3, + 18075: 0x00006AF0, + 18076: 0x00006AEA, + 18077: 0x00006AE8, + 18078: 0x00006AF9, + 18079: 0x00006AF1, + 18080: 0x00006AEE, + 18081: 0x00006AEF, + 18082: 0x0000703C, + 18083: 0x00007035, + 18084: 0x0000702F, + 18085: 0x00007037, + 18086: 0x00007034, + 18087: 0x00007031, + 18088: 0x00007042, + 18089: 0x00007038, + 18090: 0x0000703F, + 18091: 0x0000703A, + 18092: 0x00007039, + 18093: 0x00007040, + 18094: 0x0000703B, + 18095: 0x00007033, + 18096: 0x00007041, + 18097: 0x00007213, + 18098: 0x00007214, + 18099: 0x000072A8, + 18100: 0x0000737D, + 18101: 0x0000737C, + 18102: 0x000074BA, + 18103: 0x000076AB, + 18104: 0x000076AA, + 18105: 0x000076BE, + 18106: 0x000076ED, + 18107: 0x000077CC, + 18108: 0x000077CE, + 18109: 0x000077CF, + 18110: 0x000077CD, + 18111: 0x000077F2, + 18112: 0x00007925, + 18113: 0x00007923, + 18114: 0x00007927, + 18115: 0x00007928, + 18116: 0x00007924, + 18117: 0x00007929, + 18118: 0x000079B2, + 18119: 0x00007A6E, + 18120: 0x00007A6C, + 18121: 0x00007A6D, + 18122: 0x00007AF7, + 18123: 0x00007C49, + 18124: 0x00007C48, + 18125: 0x00007C4A, + 18126: 0x00007C47, + 18127: 0x00007C45, + 18128: 0x00007CEE, + 18129: 0x00007E7B, + 18130: 0x00007E7E, + 18131: 0x00007E81, + 18132: 0x00007E80, + 18133: 0x00007FBA, + 18134: 0x00007FFF, + 18135: 0x00008079, + 18136: 0x000081DB, + 18137: 0x000081D9, + 18138: 0x0000820B, + 18139: 0x00008268, + 18140: 0x00008269, + 18141: 0x00008622, + 18142: 0x000085FF, + 18143: 0x00008601, + 18144: 0x000085FE, + 18145: 0x0000861B, + 18146: 0x00008600, + 18147: 0x000085F6, + 18148: 0x00008604, + 18149: 0x00008609, + 18150: 0x00008605, + 18151: 0x0000860C, + 18152: 0x000085FD, + 18153: 0x00008819, + 18154: 0x00008810, + 18155: 0x00008811, + 18156: 0x00008817, + 18157: 0x00008813, + 18158: 0x00008816, + 18159: 0x00008963, + 18160: 0x00008966, + 18161: 0x000089B9, + 18162: 0x000089F7, + 18163: 0x00008B60, + 18164: 0x00008B6A, + 18165: 0x00008B5D, + 18166: 0x00008B68, + 18167: 0x00008B63, + 18168: 0x00008B65, + 18169: 0x00008B67, + 18170: 0x00008B6D, + 18171: 0x00008DAE, + 18172: 0x00008E86, + 18173: 0x00008E88, + 18174: 0x00008E84, + 18175: 0x00008F59, + 18176: 0x00008F56, + 18177: 0x00008F57, + 18178: 0x00008F55, + 18179: 0x00008F58, + 18180: 0x00008F5A, + 18181: 0x0000908D, + 18182: 0x00009143, + 18183: 0x00009141, + 18184: 0x000091B7, + 18185: 0x000091B5, + 18186: 0x000091B2, + 18187: 0x000091B3, + 18188: 0x0000940B, + 18189: 0x00009413, + 18190: 0x000093FB, + 18191: 0x00009420, + 18192: 0x0000940F, + 18193: 0x00009414, + 18194: 0x000093FE, + 18195: 0x00009415, + 18196: 0x00009410, + 18197: 0x00009428, + 18198: 0x00009419, + 18199: 0x0000940D, + 18200: 0x000093F5, + 18201: 0x00009400, + 18202: 0x000093F7, + 18203: 0x00009407, + 18204: 0x0000940E, + 18205: 0x00009416, + 18206: 0x00009412, + 18207: 0x000093FA, + 18208: 0x00009409, + 18209: 0x000093F8, + 18210: 0x0000940A, + 18211: 0x000093FF, + 18212: 0x000093FC, + 18213: 0x0000940C, + 18214: 0x000093F6, + 18215: 0x00009411, + 18216: 0x00009406, + 18217: 0x000095DE, + 18218: 0x000095E0, + 18219: 0x000095DF, + 18220: 0x0000972E, + 18221: 0x0000972F, + 18222: 0x000097B9, + 18223: 0x000097BB, + 18224: 0x000097FD, + 18225: 0x000097FE, + 18226: 0x00009860, + 18227: 0x00009862, + 18228: 0x00009863, + 18229: 0x0000985F, + 18230: 0x000098C1, + 18231: 0x000098C2, + 18232: 0x00009950, + 18233: 0x0000994E, + 18234: 0x00009959, + 18235: 0x0000994C, + 18236: 0x0000994B, + 18237: 0x00009953, + 18238: 0x00009A32, + 18239: 0x00009A34, + 18240: 0x00009A31, + 18241: 0x00009A2C, + 18242: 0x00009A2A, + 18243: 0x00009A36, + 18244: 0x00009A29, + 18245: 0x00009A2E, + 18246: 0x00009A38, + 18247: 0x00009A2D, + 18248: 0x00009AC7, + 18249: 0x00009ACA, + 18250: 0x00009AC6, + 18251: 0x00009B10, + 18252: 0x00009B12, + 18253: 0x00009B11, + 18254: 0x00009C0B, + 18255: 0x00009C08, + 18256: 0x00009BF7, + 18257: 0x00009C05, + 18258: 0x00009C12, + 18259: 0x00009BF8, + 18260: 0x00009C40, + 18261: 0x00009C07, + 18262: 0x00009C0E, + 18263: 0x00009C06, + 18264: 0x00009C17, + 18265: 0x00009C14, + 18266: 0x00009C09, + 18267: 0x00009D9F, + 18268: 0x00009D99, + 18269: 0x00009DA4, + 18270: 0x00009D9D, + 18271: 0x00009D92, + 18272: 0x00009D98, + 18273: 0x00009D90, + 18274: 0x00009D9B, + 18275: 0x00009DA0, + 18276: 0x00009D94, + 18277: 0x00009D9C, + 18278: 0x00009DAA, + 18279: 0x00009D97, + 18280: 0x00009DA1, + 18281: 0x00009D9A, + 18282: 0x00009DA2, + 18283: 0x00009DA8, + 18284: 0x00009D9E, + 18285: 0x00009DA3, + 18286: 0x00009DBF, + 18287: 0x00009DA9, + 18288: 0x00009D96, + 18289: 0x00009DA6, + 18290: 0x00009DA7, + 18291: 0x00009E99, + 18292: 0x00009E9B, + 18293: 0x00009E9A, + 18294: 0x00009EE5, + 18295: 0x00009EE4, + 18296: 0x00009EE7, + 18297: 0x00009EE6, + 18298: 0x00009F30, + 18299: 0x00009F2E, + 18300: 0x00009F5B, + 18301: 0x00009F60, + 18302: 0x00009F5E, + 18303: 0x00009F5D, + 18304: 0x00009F59, + 18305: 0x00009F91, + 18306: 0x0000513A, + 18307: 0x00005139, + 18308: 0x00005298, + 18309: 0x00005297, + 18310: 0x000056C3, + 18311: 0x000056BD, + 18312: 0x000056BE, + 18313: 0x00005B48, + 18314: 0x00005B47, + 18315: 0x00005DCB, + 18316: 0x00005DCF, + 18317: 0x00005EF1, + 18318: 0x000061FD, + 18319: 0x0000651B, + 18320: 0x00006B02, + 18321: 0x00006AFC, + 18322: 0x00006B03, + 18323: 0x00006AF8, + 18324: 0x00006B00, + 18325: 0x00007043, + 18326: 0x00007044, + 18327: 0x0000704A, + 18328: 0x00007048, + 18329: 0x00007049, + 18330: 0x00007045, + 18331: 0x00007046, + 18332: 0x0000721D, + 18333: 0x0000721A, + 18334: 0x00007219, + 18335: 0x0000737E, + 18336: 0x00007517, + 18337: 0x0000766A, + 18338: 0x000077D0, + 18339: 0x0000792D, + 18340: 0x00007931, + 18341: 0x0000792F, + 18342: 0x00007C54, + 18343: 0x00007C53, + 18344: 0x00007CF2, + 18345: 0x00007E8A, + 18346: 0x00007E87, + 18347: 0x00007E88, + 18348: 0x00007E8B, + 18349: 0x00007E86, + 18350: 0x00007E8D, + 18351: 0x00007F4D, + 18352: 0x00007FBB, + 18353: 0x00008030, + 18354: 0x000081DD, + 18355: 0x00008618, + 18356: 0x0000862A, + 18357: 0x00008626, + 18358: 0x0000861F, + 18359: 0x00008623, + 18360: 0x0000861C, + 18361: 0x00008619, + 18362: 0x00008627, + 18363: 0x0000862E, + 18364: 0x00008621, + 18365: 0x00008620, + 18366: 0x00008629, + 18367: 0x0000861E, + 18368: 0x00008625, + 18369: 0x00008829, + 18370: 0x0000881D, + 18371: 0x0000881B, + 18372: 0x00008820, + 18373: 0x00008824, + 18374: 0x0000881C, + 18375: 0x0000882B, + 18376: 0x0000884A, + 18377: 0x0000896D, + 18378: 0x00008969, + 18379: 0x0000896E, + 18380: 0x0000896B, + 18381: 0x000089FA, + 18382: 0x00008B79, + 18383: 0x00008B78, + 18384: 0x00008B45, + 18385: 0x00008B7A, + 18386: 0x00008B7B, + 18387: 0x00008D10, + 18388: 0x00008D14, + 18389: 0x00008DAF, + 18390: 0x00008E8E, + 18391: 0x00008E8C, + 18392: 0x00008F5E, + 18393: 0x00008F5B, + 18394: 0x00008F5D, + 18395: 0x00009146, + 18396: 0x00009144, + 18397: 0x00009145, + 18398: 0x000091B9, + 18399: 0x0000943F, + 18400: 0x0000943B, + 18401: 0x00009436, + 18402: 0x00009429, + 18403: 0x0000943D, + 18404: 0x0000943C, + 18405: 0x00009430, + 18406: 0x00009439, + 18407: 0x0000942A, + 18408: 0x00009437, + 18409: 0x0000942C, + 18410: 0x00009440, + 18411: 0x00009431, + 18412: 0x000095E5, + 18413: 0x000095E4, + 18414: 0x000095E3, + 18415: 0x00009735, + 18416: 0x0000973A, + 18417: 0x000097BF, + 18418: 0x000097E1, + 18419: 0x00009864, + 18420: 0x000098C9, + 18421: 0x000098C6, + 18422: 0x000098C0, + 18423: 0x00009958, + 18424: 0x00009956, + 18425: 0x00009A39, + 18426: 0x00009A3D, + 18427: 0x00009A46, + 18428: 0x00009A44, + 18429: 0x00009A42, + 18430: 0x00009A41, + 18431: 0x00009A3A, + 18432: 0x00009A3F, + 18433: 0x00009ACD, + 18434: 0x00009B15, + 18435: 0x00009B17, + 18436: 0x00009B18, + 18437: 0x00009B16, + 18438: 0x00009B3A, + 18439: 0x00009B52, + 18440: 0x00009C2B, + 18441: 0x00009C1D, + 18442: 0x00009C1C, + 18443: 0x00009C2C, + 18444: 0x00009C23, + 18445: 0x00009C28, + 18446: 0x00009C29, + 18447: 0x00009C24, + 18448: 0x00009C21, + 18449: 0x00009DB7, + 18450: 0x00009DB6, + 18451: 0x00009DBC, + 18452: 0x00009DC1, + 18453: 0x00009DC7, + 18454: 0x00009DCA, + 18455: 0x00009DCF, + 18456: 0x00009DBE, + 18457: 0x00009DC5, + 18458: 0x00009DC3, + 18459: 0x00009DBB, + 18460: 0x00009DB5, + 18461: 0x00009DCE, + 18462: 0x00009DB9, + 18463: 0x00009DBA, + 18464: 0x00009DAC, + 18465: 0x00009DC8, + 18466: 0x00009DB1, + 18467: 0x00009DAD, + 18468: 0x00009DCC, + 18469: 0x00009DB3, + 18470: 0x00009DCD, + 18471: 0x00009DB2, + 18472: 0x00009E7A, + 18473: 0x00009E9C, + 18474: 0x00009EEB, + 18475: 0x00009EEE, + 18476: 0x00009EED, + 18477: 0x00009F1B, + 18478: 0x00009F18, + 18479: 0x00009F1A, + 18480: 0x00009F31, + 18481: 0x00009F4E, + 18482: 0x00009F65, + 18483: 0x00009F64, + 18484: 0x00009F92, + 18485: 0x00004EB9, + 18486: 0x000056C6, + 18487: 0x000056C5, + 18488: 0x000056CB, + 18489: 0x00005971, + 18490: 0x00005B4B, + 18491: 0x00005B4C, + 18492: 0x00005DD5, + 18493: 0x00005DD1, + 18494: 0x00005EF2, + 18495: 0x00006521, + 18496: 0x00006520, + 18497: 0x00006526, + 18498: 0x00006522, + 18499: 0x00006B0B, + 18500: 0x00006B08, + 18501: 0x00006B09, + 18502: 0x00006C0D, + 18503: 0x00007055, + 18504: 0x00007056, + 18505: 0x00007057, + 18506: 0x00007052, + 18507: 0x0000721E, + 18508: 0x0000721F, + 18509: 0x000072A9, + 18510: 0x0000737F, + 18511: 0x000074D8, + 18512: 0x000074D5, + 18513: 0x000074D9, + 18514: 0x000074D7, + 18515: 0x0000766D, + 18516: 0x000076AD, + 18517: 0x00007935, + 18518: 0x000079B4, + 18519: 0x00007A70, + 18520: 0x00007A71, + 18521: 0x00007C57, + 18522: 0x00007C5C, + 18523: 0x00007C59, + 18524: 0x00007C5B, + 18525: 0x00007C5A, + 18526: 0x00007CF4, + 18527: 0x00007CF1, + 18528: 0x00007E91, + 18529: 0x00007F4F, + 18530: 0x00007F87, + 18531: 0x000081DE, + 18532: 0x0000826B, + 18533: 0x00008634, + 18534: 0x00008635, + 18535: 0x00008633, + 18536: 0x0000862C, + 18537: 0x00008632, + 18538: 0x00008636, + 18539: 0x0000882C, + 18540: 0x00008828, + 18541: 0x00008826, + 18542: 0x0000882A, + 18543: 0x00008825, + 18544: 0x00008971, + 18545: 0x000089BF, + 18546: 0x000089BE, + 18547: 0x000089FB, + 18548: 0x00008B7E, + 18549: 0x00008B84, + 18550: 0x00008B82, + 18551: 0x00008B86, + 18552: 0x00008B85, + 18553: 0x00008B7F, + 18554: 0x00008D15, + 18555: 0x00008E95, + 18556: 0x00008E94, + 18557: 0x00008E9A, + 18558: 0x00008E92, + 18559: 0x00008E90, + 18560: 0x00008E96, + 18561: 0x00008E97, + 18562: 0x00008F60, + 18563: 0x00008F62, + 18564: 0x00009147, + 18565: 0x0000944C, + 18566: 0x00009450, + 18567: 0x0000944A, + 18568: 0x0000944B, + 18569: 0x0000944F, + 18570: 0x00009447, + 18571: 0x00009445, + 18572: 0x00009448, + 18573: 0x00009449, + 18574: 0x00009446, + 18575: 0x0000973F, + 18576: 0x000097E3, + 18577: 0x0000986A, + 18578: 0x00009869, + 18579: 0x000098CB, + 18580: 0x00009954, + 18581: 0x0000995B, + 18582: 0x00009A4E, + 18583: 0x00009A53, + 18584: 0x00009A54, + 18585: 0x00009A4C, + 18586: 0x00009A4F, + 18587: 0x00009A48, + 18588: 0x00009A4A, + 18589: 0x00009A49, + 18590: 0x00009A52, + 18591: 0x00009A50, + 18592: 0x00009AD0, + 18593: 0x00009B19, + 18594: 0x00009B2B, + 18595: 0x00009B3B, + 18596: 0x00009B56, + 18597: 0x00009B55, + 18598: 0x00009C46, + 18599: 0x00009C48, + 18600: 0x00009C3F, + 18601: 0x00009C44, + 18602: 0x00009C39, + 18603: 0x00009C33, + 18604: 0x00009C41, + 18605: 0x00009C3C, + 18606: 0x00009C37, + 18607: 0x00009C34, + 18608: 0x00009C32, + 18609: 0x00009C3D, + 18610: 0x00009C36, + 18611: 0x00009DDB, + 18612: 0x00009DD2, + 18613: 0x00009DDE, + 18614: 0x00009DDA, + 18615: 0x00009DCB, + 18616: 0x00009DD0, + 18617: 0x00009DDC, + 18618: 0x00009DD1, + 18619: 0x00009DDF, + 18620: 0x00009DE9, + 18621: 0x00009DD9, + 18622: 0x00009DD8, + 18623: 0x00009DD6, + 18624: 0x00009DF5, + 18625: 0x00009DD5, + 18626: 0x00009DDD, + 18627: 0x00009EB6, + 18628: 0x00009EF0, + 18629: 0x00009F35, + 18630: 0x00009F33, + 18631: 0x00009F32, + 18632: 0x00009F42, + 18633: 0x00009F6B, + 18634: 0x00009F95, + 18635: 0x00009FA2, + 18636: 0x0000513D, + 18637: 0x00005299, + 18638: 0x000058E8, + 18639: 0x000058E7, + 18640: 0x00005972, + 18641: 0x00005B4D, + 18642: 0x00005DD8, + 18643: 0x0000882F, + 18644: 0x00005F4F, + 18645: 0x00006201, + 18646: 0x00006203, + 18647: 0x00006204, + 18648: 0x00006529, + 18649: 0x00006525, + 18650: 0x00006596, + 18651: 0x000066EB, + 18652: 0x00006B11, + 18653: 0x00006B12, + 18654: 0x00006B0F, + 18655: 0x00006BCA, + 18656: 0x0000705B, + 18657: 0x0000705A, + 18658: 0x00007222, + 18659: 0x00007382, + 18660: 0x00007381, + 18661: 0x00007383, + 18662: 0x00007670, + 18663: 0x000077D4, + 18664: 0x00007C67, + 18665: 0x00007C66, + 18666: 0x00007E95, + 18667: 0x0000826C, + 18668: 0x0000863A, + 18669: 0x00008640, + 18670: 0x00008639, + 18671: 0x0000863C, + 18672: 0x00008631, + 18673: 0x0000863B, + 18674: 0x0000863E, + 18675: 0x00008830, + 18676: 0x00008832, + 18677: 0x0000882E, + 18678: 0x00008833, + 18679: 0x00008976, + 18680: 0x00008974, + 18681: 0x00008973, + 18682: 0x000089FE, + 18683: 0x00008B8C, + 18684: 0x00008B8E, + 18685: 0x00008B8B, + 18686: 0x00008B88, + 18687: 0x00008C45, + 18688: 0x00008D19, + 18689: 0x00008E98, + 18690: 0x00008F64, + 18691: 0x00008F63, + 18692: 0x000091BC, + 18693: 0x00009462, + 18694: 0x00009455, + 18695: 0x0000945D, + 18696: 0x00009457, + 18697: 0x0000945E, + 18698: 0x000097C4, + 18699: 0x000097C5, + 18700: 0x00009800, + 18701: 0x00009A56, + 18702: 0x00009A59, + 18703: 0x00009B1E, + 18704: 0x00009B1F, + 18705: 0x00009B20, + 18706: 0x00009C52, + 18707: 0x00009C58, + 18708: 0x00009C50, + 18709: 0x00009C4A, + 18710: 0x00009C4D, + 18711: 0x00009C4B, + 18712: 0x00009C55, + 18713: 0x00009C59, + 18714: 0x00009C4C, + 18715: 0x00009C4E, + 18716: 0x00009DFB, + 18717: 0x00009DF7, + 18718: 0x00009DEF, + 18719: 0x00009DE3, + 18720: 0x00009DEB, + 18721: 0x00009DF8, + 18722: 0x00009DE4, + 18723: 0x00009DF6, + 18724: 0x00009DE1, + 18725: 0x00009DEE, + 18726: 0x00009DE6, + 18727: 0x00009DF2, + 18728: 0x00009DF0, + 18729: 0x00009DE2, + 18730: 0x00009DEC, + 18731: 0x00009DF4, + 18732: 0x00009DF3, + 18733: 0x00009DE8, + 18734: 0x00009DED, + 18735: 0x00009EC2, + 18736: 0x00009ED0, + 18737: 0x00009EF2, + 18738: 0x00009EF3, + 18739: 0x00009F06, + 18740: 0x00009F1C, + 18741: 0x00009F38, + 18742: 0x00009F37, + 18743: 0x00009F36, + 18744: 0x00009F43, + 18745: 0x00009F4F, + 18746: 0x00009F71, + 18747: 0x00009F70, + 18748: 0x00009F6E, + 18749: 0x00009F6F, + 18750: 0x000056D3, + 18751: 0x000056CD, + 18752: 0x00005B4E, + 18753: 0x00005C6D, + 18754: 0x0000652D, + 18755: 0x000066ED, + 18756: 0x000066EE, + 18757: 0x00006B13, + 18758: 0x0000705F, + 18759: 0x00007061, + 18760: 0x0000705D, + 18761: 0x00007060, + 18762: 0x00007223, + 18763: 0x000074DB, + 18764: 0x000074E5, + 18765: 0x000077D5, + 18766: 0x00007938, + 18767: 0x000079B7, + 18768: 0x000079B6, + 18769: 0x00007C6A, + 18770: 0x00007E97, + 18771: 0x00007F89, + 18772: 0x0000826D, + 18773: 0x00008643, + 18774: 0x00008838, + 18775: 0x00008837, + 18776: 0x00008835, + 18777: 0x0000884B, + 18778: 0x00008B94, + 18779: 0x00008B95, + 18780: 0x00008E9E, + 18781: 0x00008E9F, + 18782: 0x00008EA0, + 18783: 0x00008E9D, + 18784: 0x000091BE, + 18785: 0x000091BD, + 18786: 0x000091C2, + 18787: 0x0000946B, + 18788: 0x00009468, + 18789: 0x00009469, + 18790: 0x000096E5, + 18791: 0x00009746, + 18792: 0x00009743, + 18793: 0x00009747, + 18794: 0x000097C7, + 18795: 0x000097E5, + 18796: 0x00009A5E, + 18797: 0x00009AD5, + 18798: 0x00009B59, + 18799: 0x00009C63, + 18800: 0x00009C67, + 18801: 0x00009C66, + 18802: 0x00009C62, + 18803: 0x00009C5E, + 18804: 0x00009C60, + 18805: 0x00009E02, + 18806: 0x00009DFE, + 18807: 0x00009E07, + 18808: 0x00009E03, + 18809: 0x00009E06, + 18810: 0x00009E05, + 18811: 0x00009E00, + 18812: 0x00009E01, + 18813: 0x00009E09, + 18814: 0x00009DFF, + 18815: 0x00009DFD, + 18816: 0x00009E04, + 18817: 0x00009EA0, + 18818: 0x00009F1E, + 18819: 0x00009F46, + 18820: 0x00009F74, + 18821: 0x00009F75, + 18822: 0x00009F76, + 18823: 0x000056D4, + 18824: 0x0000652E, + 18825: 0x000065B8, + 18826: 0x00006B18, + 18827: 0x00006B19, + 18828: 0x00006B17, + 18829: 0x00006B1A, + 18830: 0x00007062, + 18831: 0x00007226, + 18832: 0x000072AA, + 18833: 0x000077D8, + 18834: 0x000077D9, + 18835: 0x00007939, + 18836: 0x00007C69, + 18837: 0x00007C6B, + 18838: 0x00007CF6, + 18839: 0x00007E9A, + 18840: 0x00007E98, + 18841: 0x00007E9B, + 18842: 0x00007E99, + 18843: 0x000081E0, + 18844: 0x000081E1, + 18845: 0x00008646, + 18846: 0x00008647, + 18847: 0x00008648, + 18848: 0x00008979, + 18849: 0x0000897A, + 18850: 0x0000897C, + 18851: 0x0000897B, + 18852: 0x000089FF, + 18853: 0x00008B98, + 18854: 0x00008B99, + 18855: 0x00008EA5, + 18856: 0x00008EA4, + 18857: 0x00008EA3, + 18858: 0x0000946E, + 18859: 0x0000946D, + 18860: 0x0000946F, + 18861: 0x00009471, + 18862: 0x00009473, + 18863: 0x00009749, + 18864: 0x00009872, + 18865: 0x0000995F, + 18866: 0x00009C68, + 18867: 0x00009C6E, + 18868: 0x00009C6D, + 18869: 0x00009E0B, + 18870: 0x00009E0D, + 18871: 0x00009E10, + 18872: 0x00009E0F, + 18873: 0x00009E12, + 18874: 0x00009E11, + 18875: 0x00009EA1, + 18876: 0x00009EF5, + 18877: 0x00009F09, + 18878: 0x00009F47, + 18879: 0x00009F78, + 18880: 0x00009F7B, + 18881: 0x00009F7A, + 18882: 0x00009F79, + 18883: 0x0000571E, + 18884: 0x00007066, + 18885: 0x00007C6F, + 18886: 0x0000883C, + 18887: 0x00008DB2, + 18888: 0x00008EA6, + 18889: 0x000091C3, + 18890: 0x00009474, + 18891: 0x00009478, + 18892: 0x00009476, + 18893: 0x00009475, + 18894: 0x00009A60, + 18895: 0x00009C74, + 18896: 0x00009C73, + 18897: 0x00009C71, + 18898: 0x00009C75, + 18899: 0x00009E14, + 18900: 0x00009E13, + 18901: 0x00009EF6, + 18902: 0x00009F0A, + 18903: 0x00009FA4, + 18904: 0x00007068, + 18905: 0x00007065, + 18906: 0x00007CF7, + 18907: 0x0000866A, + 18908: 0x0000883E, + 18909: 0x0000883D, + 18910: 0x0000883F, + 18911: 0x00008B9E, + 18912: 0x00008C9C, + 18913: 0x00008EA9, + 18914: 0x00008EC9, + 18915: 0x0000974B, + 18916: 0x00009873, + 18917: 0x00009874, + 18918: 0x000098CC, + 18919: 0x00009961, + 18920: 0x000099AB, + 18921: 0x00009A64, + 18922: 0x00009A66, + 18923: 0x00009A67, + 18924: 0x00009B24, + 18925: 0x00009E15, + 18926: 0x00009E17, + 18927: 0x00009F48, + 18928: 0x00006207, + 18929: 0x00006B1E, + 18930: 0x00007227, + 18931: 0x0000864C, + 18932: 0x00008EA8, + 18933: 0x00009482, + 18934: 0x00009480, + 18935: 0x00009481, + 18936: 0x00009A69, + 18937: 0x00009A68, + 18938: 0x00009B2E, + 18939: 0x00009E19, + 18940: 0x00007229, + 18941: 0x0000864B, + 18942: 0x00008B9F, + 18943: 0x00009483, + 18944: 0x00009C79, + 18945: 0x00009EB7, + 18946: 0x00007675, + 18947: 0x00009A6B, + 18948: 0x00009C7A, + 18949: 0x00009E1D, + 18950: 0x00007069, + 18951: 0x0000706A, + 18952: 0x00009EA4, + 18953: 0x00009F7E, + 18954: 0x00009F49, + 18955: 0x00009F98, + 18956: 0x00007881, + 18957: 0x000092B9, + 18958: 0x000088CF, + 18959: 0x000058BB, + 18960: 0x00006052, + 18961: 0x00007CA7, + 18962: 0x00005AFA, + 18963: 0x00002554, + 18964: 0x00002566, + 18965: 0x00002557, + 18966: 0x00002560, + 18967: 0x0000256C, + 18968: 0x00002563, + 18969: 0x0000255A, + 18970: 0x00002569, + 18971: 0x0000255D, + 18972: 0x00002552, + 18973: 0x00002564, + 18974: 0x00002555, + 18975: 0x0000255E, + 18976: 0x0000256A, + 18977: 0x00002561, + 18978: 0x00002558, + 18979: 0x00002567, + 18980: 0x0000255B, + 18981: 0x00002553, + 18982: 0x00002565, + 18983: 0x00002556, + 18984: 0x0000255F, + 18985: 0x0000256B, + 18986: 0x00002562, + 18987: 0x00002559, + 18988: 0x00002568, + 18989: 0x0000255C, + 18990: 0x00002551, + 18991: 0x00002550, + 18992: 0x0000256D, + 18993: 0x0000256E, + 18994: 0x00002570, + 18995: 0x0000256F, + 18996: 0x0000FFED, + 18997: 0x00020547, + 18998: 0x000092DB, + 18999: 0x000205DF, + 19000: 0x00023FC5, + 19001: 0x0000854C, + 19002: 0x000042B5, + 19003: 0x000073EF, + 19004: 0x000051B5, + 19005: 0x00003649, + 19006: 0x00024942, + 19007: 0x000289E4, + 19008: 0x00009344, + 19009: 0x000219DB, + 19010: 0x000082EE, + 19011: 0x00023CC8, + 19012: 0x0000783C, + 19013: 0x00006744, + 19014: 0x000062DF, + 19015: 0x00024933, + 19016: 0x000289AA, + 19017: 0x000202A0, + 19018: 0x00026BB3, + 19019: 0x00021305, + 19020: 0x00004FAB, + 19021: 0x000224ED, + 19022: 0x00005008, + 19023: 0x00026D29, + 19024: 0x00027A84, + 19025: 0x00023600, + 19026: 0x00024AB1, + 19027: 0x00022513, + 19028: 0x00005029, + 19029: 0x0002037E, + 19030: 0x00005FA4, + 19031: 0x00020380, + 19032: 0x00020347, + 19033: 0x00006EDB, + 19034: 0x0002041F, + 19035: 0x0000507D, + 19036: 0x00005101, + 19037: 0x0000347A, + 19038: 0x0000510E, + 19039: 0x0000986C, + 19040: 0x00003743, + 19041: 0x00008416, + 19042: 0x000249A4, + 19043: 0x00020487, + 19044: 0x00005160, + 19045: 0x000233B4, + 19046: 0x0000516A, + 19047: 0x00020BFF, + 19048: 0x000220FC, + 19049: 0x000202E5, + 19050: 0x00022530, + 19051: 0x0002058E, + 19052: 0x00023233, + 19053: 0x00021983, + 19054: 0x00005B82, + 19055: 0x0000877D, + 19056: 0x000205B3, + 19057: 0x00023C99, + 19058: 0x000051B2, + 19059: 0x000051B8, + 19060: 0x00009D34, + 19061: 0x000051C9, + 19062: 0x000051CF, + 19063: 0x000051D1, + 19064: 0x00003CDC, + 19065: 0x000051D3, + 19066: 0x00024AA6, + 19067: 0x000051B3, + 19068: 0x000051E2, + 19069: 0x00005342, + 19070: 0x000051ED, + 19071: 0x000083CD, + 19072: 0x0000693E, + 19073: 0x0002372D, + 19074: 0x00005F7B, + 19075: 0x0000520B, + 19076: 0x00005226, + 19077: 0x0000523C, + 19078: 0x000052B5, + 19079: 0x00005257, + 19080: 0x00005294, + 19081: 0x000052B9, + 19082: 0x000052C5, + 19083: 0x00007C15, + 19084: 0x00008542, + 19085: 0x000052E0, + 19086: 0x0000860D, + 19087: 0x00026B13, + 19088: 0x00005305, + 19089: 0x00028ADE, + 19090: 0x00005549, + 19091: 0x00006ED9, + 19092: 0x00023F80, + 19093: 0x00020954, + 19094: 0x00023FEC, + 19095: 0x00005333, + 19096: 0x00005344, + 19097: 0x00020BE2, + 19098: 0x00006CCB, + 19099: 0x00021726, + 19100: 0x0000681B, + 19101: 0x000073D5, + 19102: 0x0000604A, + 19103: 0x00003EAA, + 19104: 0x000038CC, + 19105: 0x000216E8, + 19106: 0x000071DD, + 19107: 0x000044A2, + 19108: 0x0000536D, + 19109: 0x00005374, + 19110: 0x000286AB, + 19111: 0x0000537E, + 19112: 0x0000537F, + 19113: 0x00021596, + 19114: 0x00021613, + 19115: 0x000077E6, + 19116: 0x00005393, + 19117: 0x00028A9B, + 19118: 0x000053A0, + 19119: 0x000053AB, + 19120: 0x000053AE, + 19121: 0x000073A7, + 19122: 0x00025772, + 19123: 0x00003F59, + 19124: 0x0000739C, + 19125: 0x000053C1, + 19126: 0x000053C5, + 19127: 0x00006C49, + 19128: 0x00004E49, + 19129: 0x000057FE, + 19130: 0x000053D9, + 19131: 0x00003AAB, + 19132: 0x00020B8F, + 19133: 0x000053E0, + 19134: 0x00023FEB, + 19135: 0x00022DA3, + 19136: 0x000053F6, + 19137: 0x00020C77, + 19138: 0x00005413, + 19139: 0x00007079, + 19140: 0x0000552B, + 19141: 0x00006657, + 19142: 0x00006D5B, + 19143: 0x0000546D, + 19144: 0x00026B53, + 19145: 0x00020D74, + 19146: 0x0000555D, + 19147: 0x0000548F, + 19148: 0x000054A4, + 19149: 0x000047A6, + 19150: 0x0002170D, + 19151: 0x00020EDD, + 19152: 0x00003DB4, + 19153: 0x00020D4D, + 19154: 0x000289BC, + 19155: 0x00022698, + 19156: 0x00005547, + 19157: 0x00004CED, + 19158: 0x0000542F, + 19159: 0x00007417, + 19160: 0x00005586, + 19161: 0x000055A9, + 19162: 0x00005605, + 19163: 0x000218D7, + 19164: 0x0002403A, + 19165: 0x00004552, + 19166: 0x00024435, + 19167: 0x000066B3, + 19168: 0x000210B4, + 19169: 0x00005637, + 19170: 0x000066CD, + 19171: 0x0002328A, + 19172: 0x000066A4, + 19173: 0x000066AD, + 19174: 0x0000564D, + 19175: 0x0000564F, + 19176: 0x000078F1, + 19177: 0x000056F1, + 19178: 0x00009787, + 19179: 0x000053FE, + 19180: 0x00005700, + 19181: 0x000056EF, + 19182: 0x000056ED, + 19183: 0x00028B66, + 19184: 0x00003623, + 19185: 0x0002124F, + 19186: 0x00005746, + 19187: 0x000241A5, + 19188: 0x00006C6E, + 19189: 0x0000708B, + 19190: 0x00005742, + 19191: 0x000036B1, + 19192: 0x00026C7E, + 19193: 0x000057E6, + 19194: 0x00021416, + 19195: 0x00005803, + 19196: 0x00021454, + 19197: 0x00024363, + 19198: 0x00005826, + 19199: 0x00024BF5, + 19200: 0x0000585C, + 19201: 0x000058AA, + 19202: 0x00003561, + 19203: 0x000058E0, + 19204: 0x000058DC, + 19205: 0x0002123C, + 19206: 0x000058FB, + 19207: 0x00005BFF, + 19208: 0x00005743, + 19209: 0x0002A150, + 19210: 0x00024278, + 19211: 0x000093D3, + 19212: 0x000035A1, + 19213: 0x0000591F, + 19214: 0x000068A6, + 19215: 0x000036C3, + 19216: 0x00006E59, + 19217: 0x0002163E, + 19218: 0x00005A24, + 19219: 0x00005553, + 19220: 0x00021692, + 19221: 0x00008505, + 19222: 0x000059C9, + 19223: 0x00020D4E, + 19224: 0x00026C81, + 19225: 0x00026D2A, + 19226: 0x000217DC, + 19227: 0x000059D9, + 19228: 0x000217FB, + 19229: 0x000217B2, + 19230: 0x00026DA6, + 19231: 0x00006D71, + 19232: 0x00021828, + 19233: 0x000216D5, + 19234: 0x000059F9, + 19235: 0x00026E45, + 19236: 0x00005AAB, + 19237: 0x00005A63, + 19238: 0x000036E6, + 19239: 0x000249A9, + 19240: 0x00005A77, + 19241: 0x00003708, + 19242: 0x00005A96, + 19243: 0x00007465, + 19244: 0x00005AD3, + 19245: 0x00026FA1, + 19246: 0x00022554, + 19247: 0x00003D85, + 19248: 0x00021911, + 19249: 0x00003732, + 19250: 0x000216B8, + 19251: 0x00005E83, + 19252: 0x000052D0, + 19253: 0x00005B76, + 19254: 0x00006588, + 19255: 0x00005B7C, + 19256: 0x00027A0E, + 19257: 0x00004004, + 19258: 0x0000485D, + 19259: 0x00020204, + 19260: 0x00005BD5, + 19261: 0x00006160, + 19262: 0x00021A34, + 19263: 0x000259CC, + 19264: 0x000205A5, + 19265: 0x00005BF3, + 19266: 0x00005B9D, + 19267: 0x00004D10, + 19268: 0x00005C05, + 19269: 0x00021B44, + 19270: 0x00005C13, + 19271: 0x000073CE, + 19272: 0x00005C14, + 19273: 0x00021CA5, + 19274: 0x00026B28, + 19275: 0x00005C49, + 19276: 0x000048DD, + 19277: 0x00005C85, + 19278: 0x00005CE9, + 19279: 0x00005CEF, + 19280: 0x00005D8B, + 19281: 0x00021DF9, + 19282: 0x00021E37, + 19283: 0x00005D10, + 19284: 0x00005D18, + 19285: 0x00005D46, + 19286: 0x00021EA4, + 19287: 0x00005CBA, + 19288: 0x00005DD7, + 19289: 0x000082FC, + 19290: 0x0000382D, + 19291: 0x00024901, + 19292: 0x00022049, + 19293: 0x00022173, + 19294: 0x00008287, + 19295: 0x00003836, + 19296: 0x00003BC2, + 19297: 0x00005E2E, + 19298: 0x00006A8A, + 19299: 0x00005E75, + 19300: 0x00005E7A, + 19301: 0x000244BC, + 19302: 0x00020CD3, + 19303: 0x000053A6, + 19304: 0x00004EB7, + 19305: 0x00005ED0, + 19306: 0x000053A8, + 19307: 0x00021771, + 19308: 0x00005E09, + 19309: 0x00005EF4, + 19310: 0x00028482, + 19311: 0x00005EF9, + 19312: 0x00005EFB, + 19313: 0x000038A0, + 19314: 0x00005EFC, + 19315: 0x0000683E, + 19316: 0x0000941B, + 19317: 0x00005F0D, + 19318: 0x000201C1, + 19319: 0x0002F894, + 19320: 0x00003ADE, + 19321: 0x000048AE, + 19322: 0x0002133A, + 19323: 0x00005F3A, + 19324: 0x00026888, + 19325: 0x000223D0, + 19326: 0x00005F58, + 19327: 0x00022471, + 19328: 0x00005F63, + 19329: 0x000097BD, + 19330: 0x00026E6E, + 19331: 0x00005F72, + 19332: 0x00009340, + 19333: 0x00028A36, + 19334: 0x00005FA7, + 19335: 0x00005DB6, + 19336: 0x00003D5F, + 19337: 0x00025250, + 19338: 0x00021F6A, + 19339: 0x000270F8, + 19340: 0x00022668, + 19341: 0x000091D6, + 19342: 0x0002029E, + 19343: 0x00028A29, + 19344: 0x00006031, + 19345: 0x00006685, + 19346: 0x00021877, + 19347: 0x00003963, + 19348: 0x00003DC7, + 19349: 0x00003639, + 19350: 0x00005790, + 19351: 0x000227B4, + 19352: 0x00007971, + 19353: 0x00003E40, + 19354: 0x0000609E, + 19355: 0x000060A4, + 19356: 0x000060B3, + 19357: 0x00024982, + 19358: 0x0002498F, + 19359: 0x00027A53, + 19360: 0x000074A4, + 19361: 0x000050E1, + 19362: 0x00005AA0, + 19363: 0x00006164, + 19364: 0x00008424, + 19365: 0x00006142, + 19366: 0x0002F8A6, + 19367: 0x00026ED2, + 19368: 0x00006181, + 19369: 0x000051F4, + 19370: 0x00020656, + 19371: 0x00006187, + 19372: 0x00005BAA, + 19373: 0x00023FB7, + 19374: 0x0002285F, + 19375: 0x000061D3, + 19376: 0x00028B9D, + 19377: 0x0002995D, + 19378: 0x000061D0, + 19379: 0x00003932, + 19380: 0x00022980, + 19381: 0x000228C1, + 19382: 0x00006023, + 19383: 0x0000615C, + 19384: 0x0000651E, + 19385: 0x0000638B, + 19386: 0x00020118, + 19387: 0x000062C5, + 19388: 0x00021770, + 19389: 0x000062D5, + 19390: 0x00022E0D, + 19391: 0x0000636C, + 19392: 0x000249DF, + 19393: 0x00003A17, + 19394: 0x00006438, + 19395: 0x000063F8, + 19396: 0x0002138E, + 19397: 0x000217FC, + 19398: 0x00006490, + 19399: 0x00006F8A, + 19400: 0x00022E36, + 19401: 0x00009814, + 19402: 0x0002408C, + 19403: 0x0002571D, + 19404: 0x000064E1, + 19405: 0x000064E5, + 19406: 0x0000947B, + 19407: 0x00003A66, + 19408: 0x0000643A, + 19409: 0x00003A57, + 19410: 0x0000654D, + 19411: 0x00006F16, + 19412: 0x00024A28, + 19413: 0x00024A23, + 19414: 0x00006585, + 19415: 0x0000656D, + 19416: 0x0000655F, + 19417: 0x0002307E, + 19418: 0x000065B5, + 19419: 0x00024940, + 19420: 0x00004B37, + 19421: 0x000065D1, + 19422: 0x000040D8, + 19423: 0x00021829, + 19424: 0x000065E0, + 19425: 0x000065E3, + 19426: 0x00005FDF, + 19427: 0x00023400, + 19428: 0x00006618, + 19429: 0x000231F7, + 19430: 0x000231F8, + 19431: 0x00006644, + 19432: 0x000231A4, + 19433: 0x000231A5, + 19434: 0x0000664B, + 19435: 0x00020E75, + 19436: 0x00006667, + 19437: 0x000251E6, + 19438: 0x00006673, + 19439: 0x00006674, + 19440: 0x00021E3D, + 19441: 0x00023231, + 19442: 0x000285F4, + 19443: 0x000231C8, + 19444: 0x00025313, + 19445: 0x000077C5, + 19446: 0x000228F7, + 19447: 0x000099A4, + 19448: 0x00006702, + 19449: 0x0002439C, + 19450: 0x00024A21, + 19451: 0x00003B2B, + 19452: 0x000069FA, + 19453: 0x000237C2, + 19454: 0x0000675E, + 19455: 0x00006767, + 19456: 0x00006762, + 19457: 0x000241CD, + 19458: 0x000290ED, + 19459: 0x000067D7, + 19460: 0x000044E9, + 19461: 0x00006822, + 19462: 0x00006E50, + 19463: 0x0000923C, + 19464: 0x00006801, + 19465: 0x000233E6, + 19466: 0x00026DA0, + 19467: 0x0000685D, + 19468: 0x0002346F, + 19469: 0x000069E1, + 19470: 0x00006A0B, + 19471: 0x00028ADF, + 19472: 0x00006973, + 19473: 0x000068C3, + 19474: 0x000235CD, + 19475: 0x00006901, + 19476: 0x00006900, + 19477: 0x00003D32, + 19478: 0x00003A01, + 19479: 0x0002363C, + 19480: 0x00003B80, + 19481: 0x000067AC, + 19482: 0x00006961, + 19483: 0x00028A4A, + 19484: 0x000042FC, + 19485: 0x00006936, + 19486: 0x00006998, + 19487: 0x00003BA1, + 19488: 0x000203C9, + 19489: 0x00008363, + 19490: 0x00005090, + 19491: 0x000069F9, + 19492: 0x00023659, + 19493: 0x0002212A, + 19494: 0x00006A45, + 19495: 0x00023703, + 19496: 0x00006A9D, + 19497: 0x00003BF3, + 19498: 0x000067B1, + 19499: 0x00006AC8, + 19500: 0x0002919C, + 19501: 0x00003C0D, + 19502: 0x00006B1D, + 19503: 0x00020923, + 19504: 0x000060DE, + 19505: 0x00006B35, + 19506: 0x00006B74, + 19507: 0x000227CD, + 19508: 0x00006EB5, + 19509: 0x00023ADB, + 19510: 0x000203B5, + 19511: 0x00021958, + 19512: 0x00003740, + 19513: 0x00005421, + 19514: 0x00023B5A, + 19515: 0x00006BE1, + 19516: 0x00023EFC, + 19517: 0x00006BDC, + 19518: 0x00006C37, + 19519: 0x0002248B, + 19520: 0x000248F1, + 19521: 0x00026B51, + 19522: 0x00006C5A, + 19523: 0x00008226, + 19524: 0x00006C79, + 19525: 0x00023DBC, + 19526: 0x000044C5, + 19527: 0x00023DBD, + 19528: 0x000241A4, + 19529: 0x0002490C, + 19530: 0x00024900, + 19531: 0x00023CC9, + 19532: 0x000036E5, + 19533: 0x00003CEB, + 19534: 0x00020D32, + 19535: 0x00009B83, + 19536: 0x000231F9, + 19537: 0x00022491, + 19538: 0x00007F8F, + 19539: 0x00006837, + 19540: 0x00026D25, + 19541: 0x00026DA1, + 19542: 0x00026DEB, + 19543: 0x00006D96, + 19544: 0x00006D5C, + 19545: 0x00006E7C, + 19546: 0x00006F04, + 19547: 0x0002497F, + 19548: 0x00024085, + 19549: 0x00026E72, + 19550: 0x00008533, + 19551: 0x00026F74, + 19552: 0x000051C7, + 19553: 0x00006C9C, + 19554: 0x00006E1D, + 19555: 0x0000842E, + 19556: 0x00028B21, + 19557: 0x00006E2F, + 19558: 0x00023E2F, + 19559: 0x00007453, + 19560: 0x00023F82, + 19561: 0x000079CC, + 19562: 0x00006E4F, + 19563: 0x00005A91, + 19564: 0x0002304B, + 19565: 0x00006FF8, + 19566: 0x0000370D, + 19567: 0x00006F9D, + 19568: 0x00023E30, + 19569: 0x00006EFA, + 19570: 0x00021497, + 19571: 0x0002403D, + 19572: 0x00004555, + 19573: 0x000093F0, + 19574: 0x00006F44, + 19575: 0x00006F5C, + 19576: 0x00003D4E, + 19577: 0x00006F74, + 19578: 0x00029170, + 19579: 0x00003D3B, + 19580: 0x00006F9F, + 19581: 0x00024144, + 19582: 0x00006FD3, + 19583: 0x00024091, + 19584: 0x00024155, + 19585: 0x00024039, + 19586: 0x00023FF0, + 19587: 0x00023FB4, + 19588: 0x0002413F, + 19589: 0x000051DF, + 19590: 0x00024156, + 19591: 0x00024157, + 19592: 0x00024140, + 19593: 0x000261DD, + 19594: 0x0000704B, + 19595: 0x0000707E, + 19596: 0x000070A7, + 19597: 0x00007081, + 19598: 0x000070CC, + 19599: 0x000070D5, + 19600: 0x000070D6, + 19601: 0x000070DF, + 19602: 0x00004104, + 19603: 0x00003DE8, + 19604: 0x000071B4, + 19605: 0x00007196, + 19606: 0x00024277, + 19607: 0x0000712B, + 19608: 0x00007145, + 19609: 0x00005A88, + 19610: 0x0000714A, + 19611: 0x0000716E, + 19612: 0x00005C9C, + 19613: 0x00024365, + 19614: 0x0000714F, + 19615: 0x00009362, + 19616: 0x000242C1, + 19617: 0x0000712C, + 19618: 0x0002445A, + 19619: 0x00024A27, + 19620: 0x00024A22, + 19621: 0x000071BA, + 19622: 0x00028BE8, + 19623: 0x000070BD, + 19624: 0x0000720E, + 19625: 0x00009442, + 19626: 0x00007215, + 19627: 0x00005911, + 19628: 0x00009443, + 19629: 0x00007224, + 19630: 0x00009341, + 19631: 0x00025605, + 19632: 0x0000722E, + 19633: 0x00007240, + 19634: 0x00024974, + 19635: 0x000068BD, + 19636: 0x00007255, + 19637: 0x00007257, + 19638: 0x00003E55, + 19639: 0x00023044, + 19640: 0x0000680D, + 19641: 0x00006F3D, + 19642: 0x00007282, + 19643: 0x0000732A, + 19644: 0x0000732B, + 19645: 0x00024823, + 19646: 0x0002882B, + 19647: 0x000048ED, + 19648: 0x00028804, + 19649: 0x00007328, + 19650: 0x0000732E, + 19651: 0x000073CF, + 19652: 0x000073AA, + 19653: 0x00020C3A, + 19654: 0x00026A2E, + 19655: 0x000073C9, + 19656: 0x00007449, + 19657: 0x000241E2, + 19658: 0x000216E7, + 19659: 0x00024A24, + 19660: 0x00006623, + 19661: 0x000036C5, + 19662: 0x000249B7, + 19663: 0x0002498D, + 19664: 0x000249FB, + 19665: 0x000073F7, + 19666: 0x00007415, + 19667: 0x00006903, + 19668: 0x00024A26, + 19669: 0x00007439, + 19670: 0x000205C3, + 19671: 0x00003ED7, + 19672: 0x0000745C, + 19673: 0x000228AD, + 19674: 0x00007460, + 19675: 0x00028EB2, + 19676: 0x00007447, + 19677: 0x000073E4, + 19678: 0x00007476, + 19679: 0x000083B9, + 19680: 0x0000746C, + 19681: 0x00003730, + 19682: 0x00007474, + 19683: 0x000093F1, + 19684: 0x00006A2C, + 19685: 0x00007482, + 19686: 0x00004953, + 19687: 0x00024A8C, + 19688: 0x0002415F, + 19689: 0x00024A79, + 19690: 0x00028B8F, + 19691: 0x00005B46, + 19692: 0x00028C03, + 19693: 0x0002189E, + 19694: 0x000074C8, + 19695: 0x00021988, + 19696: 0x0000750E, + 19697: 0x000074E9, + 19698: 0x0000751E, + 19699: 0x00028ED9, + 19700: 0x00021A4B, + 19701: 0x00005BD7, + 19702: 0x00028EAC, + 19703: 0x00009385, + 19704: 0x0000754D, + 19705: 0x0000754A, + 19706: 0x00007567, + 19707: 0x0000756E, + 19708: 0x00024F82, + 19709: 0x00003F04, + 19710: 0x00024D13, + 19711: 0x0000758E, + 19712: 0x0000745D, + 19713: 0x0000759E, + 19714: 0x000075B4, + 19715: 0x00007602, + 19716: 0x0000762C, + 19717: 0x00007651, + 19718: 0x0000764F, + 19719: 0x0000766F, + 19720: 0x00007676, + 19721: 0x000263F5, + 19722: 0x00007690, + 19723: 0x000081EF, + 19724: 0x000037F8, + 19725: 0x00026911, + 19726: 0x0002690E, + 19727: 0x000076A1, + 19728: 0x000076A5, + 19729: 0x000076B7, + 19730: 0x000076CC, + 19731: 0x00026F9F, + 19732: 0x00008462, + 19733: 0x0002509D, + 19734: 0x0002517D, + 19735: 0x00021E1C, + 19736: 0x0000771E, + 19737: 0x00007726, + 19738: 0x00007740, + 19739: 0x000064AF, + 19740: 0x00025220, + 19741: 0x00007758, + 19742: 0x000232AC, + 19743: 0x000077AF, + 19744: 0x00028964, + 19745: 0x00028968, + 19746: 0x000216C1, + 19747: 0x000077F4, + 19748: 0x00007809, + 19749: 0x00021376, + 19750: 0x00024A12, + 19751: 0x000068CA, + 19752: 0x000078AF, + 19753: 0x000078C7, + 19754: 0x000078D3, + 19755: 0x000096A5, + 19756: 0x0000792E, + 19757: 0x000255E0, + 19758: 0x000078D7, + 19759: 0x00007934, + 19760: 0x000078B1, + 19761: 0x0002760C, + 19762: 0x00008FB8, + 19763: 0x00008884, + 19764: 0x00028B2B, + 19765: 0x00026083, + 19766: 0x0002261C, + 19767: 0x00007986, + 19768: 0x00008900, + 19769: 0x00006902, + 19770: 0x00007980, + 19771: 0x00025857, + 19772: 0x0000799D, + 19773: 0x00027B39, + 19774: 0x0000793C, + 19775: 0x000079A9, + 19776: 0x00006E2A, + 19777: 0x00027126, + 19778: 0x00003EA8, + 19779: 0x000079C6, + 19780: 0x0002910D, + 19781: 0x000079D4, +} + +const numEncodeTables = 8 + +// encodeX are the encoding tables from Unicode to Big5 code, +// sorted by decreasing length. +// encode0: 42633 entries for runes in [131105, 173738). +// encode1: 29004 entries for runes in [ 11904, 40908). +// encode2: 2176 entries for runes in [ 7870, 10046). +// encode3: 939 entries for runes in [ 167, 1106). +// encode4: 446 entries for runes in [ 65072, 65518). +// encode5: 432 entries for runes in [194597, 195029). +// encode6: 263 entries for runes in [ 63751, 64014). +// encode7: 1 entries for runes in [175615, 175616). + +const encode0Low, encode0High = 131105, 173738 + +var encode0 = [...]uint16{ + 131105 - 131105: 0x9C71, + 131134 - 131105: 0x9375, + 131142 - 131105: 0x9376, + 131150 - 131105: 0x9548, + 131176 - 131105: 0x8EC6, + 131206 - 131105: 0x8BC5, + 131207 - 131105: 0x8BFA, + 131210 - 131105: 0xC87C, + 131220 - 131105: 0x9AB4, + 131274 - 131105: 0x884E, + 131275 - 131105: 0x884B, + 131276 - 131105: 0xC87A, + 131277 - 131105: 0x8848, + 131281 - 131105: 0x8847, + 131310 - 131105: 0xA0F6, + 131340 - 131105: 0x8845, + 131342 - 131105: 0x8853, + 131352 - 131105: 0xFCAD, + 131492 - 131105: 0x8CF5, + 131497 - 131105: 0x8AAD, + 131499 - 131105: 0x9272, + 131521 - 131105: 0xFC47, + 131540 - 131105: 0x94DF, + 131570 - 131105: 0x9FD1, + 131588 - 131105: 0xFBCB, + 131596 - 131105: 0x927D, + 131604 - 131105: 0x98A4, + 131641 - 131105: 0x8CF9, + 131675 - 131105: 0x94E7, + 131700 - 131105: 0x90CB, + 131701 - 131105: 0x927B, + 131737 - 131105: 0x94D8, + 131742 - 131105: 0xFC5F, + 131744 - 131105: 0xFA54, + 131767 - 131105: 0x9AB5, + 131775 - 131105: 0x96DA, + 131776 - 131105: 0x9279, + 131813 - 131105: 0xFA74, + 131850 - 131105: 0x9275, + 131877 - 131105: 0x8DFB, + 131905 - 131105: 0x8A49, + 131909 - 131105: 0x92DF, + 131910 - 131105: 0x9B7C, + 131911 - 131105: 0xFA63, + 131966 - 131105: 0xFA60, + 131967 - 131105: 0x926D, + 131968 - 131105: 0xFA62, + 132000 - 131105: 0x9AB6, + 132007 - 131105: 0x976B, + 132021 - 131105: 0xFD6A, + 132041 - 131105: 0xFD54, + 132043 - 131105: 0x9273, + 132085 - 131105: 0x97D8, + 132092 - 131105: 0x9FBB, + 132115 - 131105: 0x9342, + 132116 - 131105: 0x9276, + 132127 - 131105: 0xFA65, + 132197 - 131105: 0x926C, + 132231 - 131105: 0xFA6E, + 132238 - 131105: 0x9EE0, + 132241 - 131105: 0x92C0, + 132242 - 131105: 0x92BF, + 132259 - 131105: 0x92BE, + 132311 - 131105: 0x9ABA, + 132348 - 131105: 0x8AB3, + 132350 - 131105: 0x9775, + 132423 - 131105: 0xFA40, + 132494 - 131105: 0xFA76, + 132517 - 131105: 0xFBD0, + 132531 - 131105: 0xFA7B, + 132547 - 131105: 0xFE6D, + 132554 - 131105: 0x9BB3, + 132560 - 131105: 0x89CC, + 132565 - 131105: 0x9ABE, + 132575 - 131105: 0xFA42, + 132576 - 131105: 0x92BC, + 132587 - 131105: 0x945C, + 132625 - 131105: 0x9BB5, + 132629 - 131105: 0x9ABF, + 132633 - 131105: 0x98A7, + 132634 - 131105: 0x97A4, + 132656 - 131105: 0x90FD, + 132694 - 131105: 0xFC7B, + 132726 - 131105: 0x9AC0, + 132878 - 131105: 0x92C3, + 132913 - 131105: 0x8AAA, + 132985 - 131105: 0x9BD0, + 133164 - 131105: 0x9550, + 133235 - 131105: 0x92C6, + 133333 - 131105: 0x98A6, + 133398 - 131105: 0x9546, + 133411 - 131105: 0xFD63, + 133460 - 131105: 0xFAC2, + 133497 - 131105: 0x9EC3, + 133607 - 131105: 0x89B2, + 133649 - 131105: 0x9C66, + 133712 - 131105: 0x9053, + 133743 - 131105: 0x8C62, + 133770 - 131105: 0x87A8, + 133812 - 131105: 0x97C1, + 133826 - 131105: 0x9AC4, + 133837 - 131105: 0x9AC5, + 133901 - 131105: 0x8EEF, + 134031 - 131105: 0xFAE9, + 134047 - 131105: 0x8D40, + 134056 - 131105: 0x9262, + 134057 - 131105: 0x8AF7, + 134079 - 131105: 0x9AC6, + 134086 - 131105: 0x92E1, + 134091 - 131105: 0x9AC9, + 134114 - 131105: 0xFAC6, + 134123 - 131105: 0x97A5, + 134139 - 131105: 0x9ACB, + 134143 - 131105: 0xFA72, + 134155 - 131105: 0x8A5E, + 134157 - 131105: 0x94E0, + 134176 - 131105: 0x92CC, + 134196 - 131105: 0x8AE5, + 134202 - 131105: 0xFE5C, + 134203 - 131105: 0x9ACC, + 134209 - 131105: 0x9DF9, + 134210 - 131105: 0x8A43, + 134211 - 131105: 0x8AA6, + 134227 - 131105: 0x9ACD, + 134245 - 131105: 0x9ACE, + 134263 - 131105: 0xFAEE, + 134264 - 131105: 0x9BCC, + 134268 - 131105: 0x9ACF, + 134285 - 131105: 0x9AD1, + 134294 - 131105: 0x9DFA, + 134300 - 131105: 0x9D7C, + 134325 - 131105: 0x9AD3, + 134328 - 131105: 0x97A6, + 134351 - 131105: 0x995F, + 134355 - 131105: 0xFBF6, + 134356 - 131105: 0x9FC5, + 134357 - 131105: 0x8A59, + 134358 - 131105: 0x8B6B, + 134365 - 131105: 0x9AD4, + 134381 - 131105: 0x9AD5, + 134399 - 131105: 0x97A2, + 134421 - 131105: 0x8A44, + 134440 - 131105: 0x9F4A, + 134449 - 131105: 0x90A1, + 134450 - 131105: 0xFDA4, + 134470 - 131105: 0x8A64, + 134471 - 131105: 0x8AF2, + 134472 - 131105: 0x8AF8, + 134473 - 131105: 0x9DD8, + 134476 - 131105: 0x94D6, + 134477 - 131105: 0xFAFE, + 134478 - 131105: 0xFBA7, + 134511 - 131105: 0x9AD6, + 134513 - 131105: 0x9F4D, + 134516 - 131105: 0xFAF6, + 134524 - 131105: 0x8A57, + 134526 - 131105: 0x8B43, + 134527 - 131105: 0x8B44, + 134550 - 131105: 0x8AB6, + 134556 - 131105: 0x8AC0, + 134567 - 131105: 0x9E54, + 134578 - 131105: 0x9AD7, + 134600 - 131105: 0x9AD8, + 134660 - 131105: 0x9ADC, + 134665 - 131105: 0x8ACA, + 134666 - 131105: 0x9EA8, + 134669 - 131105: 0x9263, + 134670 - 131105: 0x9ADD, + 134671 - 131105: 0x8B65, + 134672 - 131105: 0x8B6F, + 134673 - 131105: 0x8B7E, + 134678 - 131105: 0x8F43, + 134685 - 131105: 0x92D0, + 134732 - 131105: 0x8AF4, + 134765 - 131105: 0x9DBE, + 134771 - 131105: 0x9AE1, + 134773 - 131105: 0xFCDE, + 134774 - 131105: 0x9DFD, + 134775 - 131105: 0x8B66, + 134776 - 131105: 0x8B70, + 134777 - 131105: 0x8B75, + 134778 - 131105: 0x8AE4, + 134779 - 131105: 0x8BA4, + 134796 - 131105: 0x8AED, + 134806 - 131105: 0x8A5D, + 134808 - 131105: 0x8B48, + 134813 - 131105: 0x9DED, + 134818 - 131105: 0x9E40, + 134826 - 131105: 0x8AEF, + 134827 - 131105: 0x8AF6, + 134828 - 131105: 0x9E76, + 134838 - 131105: 0x9EE3, + 134871 - 131105: 0x9ADE, + 134872 - 131105: 0x8DFE, + 134877 - 131105: 0xFAFC, + 134904 - 131105: 0x9CB1, + 134905 - 131105: 0x9E77, + 134906 - 131105: 0x8B64, + 134907 - 131105: 0x8B67, + 134941 - 131105: 0x974B, + 134950 - 131105: 0x9653, + 134957 - 131105: 0x9AE0, + 134958 - 131105: 0x8B4A, + 134960 - 131105: 0x8AF1, + 134961 - 131105: 0x8AD7, + 134971 - 131105: 0xA0AB, + 134988 - 131105: 0x8AB5, + 135012 - 131105: 0x8A5F, + 135053 - 131105: 0x8AEE, + 135056 - 131105: 0x9ADF, + 135085 - 131105: 0x8AFE, + 135092 - 131105: 0x8A58, + 135093 - 131105: 0x8BA3, + 135094 - 131105: 0x8BA7, + 135100 - 131105: 0x9AE3, + 135135 - 131105: 0x9261, + 135146 - 131105: 0x9DD7, + 135147 - 131105: 0x9E7D, + 135148 - 131105: 0x9EA7, + 135149 - 131105: 0x9EAB, + 135188 - 131105: 0x9042, + 135197 - 131105: 0x8B79, + 135198 - 131105: 0x8B7A, + 135247 - 131105: 0x9AE6, + 135260 - 131105: 0x9AE5, + 135279 - 131105: 0x8A7E, + 135285 - 131105: 0x9E44, + 135286 - 131105: 0x9AE7, + 135287 - 131105: 0x8A7C, + 135288 - 131105: 0x8B71, + 135291 - 131105: 0x9AE9, + 135304 - 131105: 0x9AEA, + 135318 - 131105: 0x9AEB, + 135325 - 131105: 0x8ABD, + 135348 - 131105: 0xFB4E, + 135359 - 131105: 0x9AED, + 135360 - 131105: 0x8AF9, + 135361 - 131105: 0x9E63, + 135367 - 131105: 0x8B49, + 135368 - 131105: 0x8ACE, + 135369 - 131105: 0x8B6E, + 135375 - 131105: 0x8AE8, + 135379 - 131105: 0x9AEE, + 135396 - 131105: 0x92CE, + 135412 - 131105: 0x8A5A, + 135413 - 131105: 0x8B7B, + 135414 - 131105: 0x8B7C, + 135471 - 131105: 0x9AEF, + 135483 - 131105: 0x9AF0, + 135485 - 131105: 0x8AFA, + 135493 - 131105: 0x8941, + 135496 - 131105: 0x8B72, + 135503 - 131105: 0x8AF3, + 135552 - 131105: 0x8BA8, + 135559 - 131105: 0x9EAE, + 135641 - 131105: 0x9E72, + 135740 - 131105: 0xFB73, + 135759 - 131105: 0xFB5F, + 135804 - 131105: 0x90BA, + 135848 - 131105: 0x91FE, + 135849 - 131105: 0x9EF6, + 135856 - 131105: 0x97ED, + 135907 - 131105: 0x9AF3, + 135934 - 131105: 0xA0EE, + 135938 - 131105: 0x967C, + 135939 - 131105: 0x9345, + 135940 - 131105: 0x986E, + 135941 - 131105: 0xFA56, + 135990 - 131105: 0x9AF5, + 135994 - 131105: 0xFC4B, + 136053 - 131105: 0x9AF4, + 136054 - 131105: 0xFEDE, + 136078 - 131105: 0xFCB7, + 136088 - 131105: 0x97F1, + 136092 - 131105: 0x97C7, + 136133 - 131105: 0x9CCB, + 136134 - 131105: 0x9240, + 136173 - 131105: 0x9CE8, + 136190 - 131105: 0x91FD, + 136211 - 131105: 0x974E, + 136214 - 131105: 0xFB68, + 136228 - 131105: 0x976C, + 136255 - 131105: 0x8CC2, + 136274 - 131105: 0x97E8, + 136276 - 131105: 0xFB6A, + 136277 - 131105: 0x8B74, + 136330 - 131105: 0x8EE7, + 136343 - 131105: 0xFDC8, + 136374 - 131105: 0x9241, + 136424 - 131105: 0x96A1, + 136445 - 131105: 0x8EF3, + 136567 - 131105: 0x9AF7, + 136578 - 131105: 0x8FA6, + 136598 - 131105: 0xFAD6, + 136714 - 131105: 0x9CC7, + 136723 - 131105: 0xFAD7, + 136729 - 131105: 0x9AF8, + 136766 - 131105: 0xFBA1, + 136801 - 131105: 0x8EC5, + 136850 - 131105: 0xFBA4, + 136888 - 131105: 0xFBC2, + 136890 - 131105: 0x9AC1, + 136896 - 131105: 0x91FA, + 136897 - 131105: 0xFEDB, + 136898 - 131105: 0x97AB, + 136915 - 131105: 0x9147, + 136917 - 131105: 0xFBB1, + 136927 - 131105: 0x8FEA, + 136934 - 131105: 0x94D2, + 136935 - 131105: 0xFE61, + 136936 - 131105: 0xFACE, + 136954 - 131105: 0x92ED, + 136955 - 131105: 0x91F3, + 136956 - 131105: 0x93C6, + 136958 - 131105: 0x935A, + 136973 - 131105: 0xFAFB, + 136976 - 131105: 0x92EF, + 136998 - 131105: 0xFAC8, + 137018 - 131105: 0x9847, + 137019 - 131105: 0x9366, + 137020 - 131105: 0x9855, + 137047 - 131105: 0x96E6, + 137068 - 131105: 0x9F43, + 137069 - 131105: 0x9FAA, + 137070 - 131105: 0x94DA, + 137071 - 131105: 0x92EE, + 137072 - 131105: 0xFCAF, + 137073 - 131105: 0xFBFB, + 137075 - 131105: 0x8EF9, + 137076 - 131105: 0x91F6, + 137131 - 131105: 0x9364, + 137136 - 131105: 0x94F5, + 137137 - 131105: 0x9CB6, + 137138 - 131105: 0xFBAD, + 137139 - 131105: 0x984E, + 137140 - 131105: 0x8F44, + 137141 - 131105: 0x96FD, + 137155 - 131105: 0x9AF9, + 137159 - 131105: 0x9AFA, + 137177 - 131105: 0x9769, + 137178 - 131105: 0x95D4, + 137179 - 131105: 0x984B, + 137180 - 131105: 0xFBAA, + 137183 - 131105: 0x987C, + 137199 - 131105: 0x91EA, + 137205 - 131105: 0x9DAF, + 137206 - 131105: 0x9DC5, + 137208 - 131105: 0x91F1, + 137209 - 131105: 0x8EB1, + 137210 - 131105: 0x97A9, + 137211 - 131105: 0xFBAC, + 137212 - 131105: 0xFCB8, + 137248 - 131105: 0x9CB9, + 137256 - 131105: 0xFBB0, + 137257 - 131105: 0xFCD2, + 137258 - 131105: 0x93CB, + 137261 - 131105: 0x9AFD, + 137273 - 131105: 0x91F4, + 137274 - 131105: 0x8BAC, + 137275 - 131105: 0xA055, + 137280 - 131105: 0x9574, + 137285 - 131105: 0x95BE, + 137298 - 131105: 0x97AD, + 137310 - 131105: 0x8EE9, + 137313 - 131105: 0x92F8, + 137314 - 131105: 0x97BE, + 137315 - 131105: 0x916C, + 137316 - 131105: 0x94AA, + 137335 - 131105: 0xFC63, + 137339 - 131105: 0x9DC6, + 137347 - 131105: 0x97B5, + 137348 - 131105: 0x92B8, + 137349 - 131105: 0x91EF, + 137374 - 131105: 0xFEA6, + 137375 - 131105: 0x9760, + 137376 - 131105: 0x9358, + 137377 - 131105: 0x9576, + 137378 - 131105: 0x8FAC, + 137406 - 131105: 0x91EC, + 137407 - 131105: 0x97B4, + 137425 - 131105: 0x91F7, + 137430 - 131105: 0x974A, + 137431 - 131105: 0xFB49, + 137432 - 131105: 0x9578, + 137433 - 131105: 0x93BC, + 137466 - 131105: 0x91D6, + 137475 - 131105: 0x9355, + 137476 - 131105: 0x9356, + 137477 - 131105: 0x9851, + 137488 - 131105: 0x8FF8, + 137489 - 131105: 0xFBC0, + 137490 - 131105: 0x93F2, + 137493 - 131105: 0x90D0, + 137500 - 131105: 0x9C44, + 137506 - 131105: 0x9255, + 137511 - 131105: 0x9363, + 137531 - 131105: 0x91A5, + 137540 - 131105: 0xA0ED, + 137560 - 131105: 0xFD6B, + 137578 - 131105: 0x9AFE, + 137596 - 131105: 0x9351, + 137600 - 131105: 0x8C57, + 137603 - 131105: 0xFA78, + 137608 - 131105: 0xFEA8, + 137622 - 131105: 0x9350, + 137691 - 131105: 0xFA4C, + 137715 - 131105: 0x92F7, + 137773 - 131105: 0x9B40, + 137780 - 131105: 0xFBCE, + 137797 - 131105: 0x9B41, + 137803 - 131105: 0xFEAD, + 137827 - 131105: 0x8761, + 138052 - 131105: 0xFBD5, + 138177 - 131105: 0x8BC2, + 138178 - 131105: 0x9A7C, + 138282 - 131105: 0x9B42, + 138352 - 131105: 0x9B43, + 138402 - 131105: 0x9E79, + 138405 - 131105: 0xFBD9, + 138412 - 131105: 0x9B44, + 138566 - 131105: 0xA0A7, + 138579 - 131105: 0x877B, + 138590 - 131105: 0x876E, + 138640 - 131105: 0x9BF3, + 138678 - 131105: 0x8C79, + 138682 - 131105: 0x935E, + 138698 - 131105: 0x89CB, + 138705 - 131105: 0x9F53, + 138731 - 131105: 0x93D7, + 138745 - 131105: 0xFBE1, + 138780 - 131105: 0xFED0, + 138787 - 131105: 0x8CF1, + 138807 - 131105: 0xFBE2, + 138813 - 131105: 0xFCE3, + 138889 - 131105: 0x9074, + 138916 - 131105: 0xFBE6, + 138920 - 131105: 0x9BB7, + 138952 - 131105: 0x9B45, + 138965 - 131105: 0x9B47, + 139023 - 131105: 0x9F50, + 139029 - 131105: 0x9B48, + 139114 - 131105: 0xFC5B, + 139166 - 131105: 0x98A9, + 139169 - 131105: 0x9CFD, + 139240 - 131105: 0x884C, + 139333 - 131105: 0x9B4B, + 139337 - 131105: 0xFBEC, + 139390 - 131105: 0x8C69, + 139418 - 131105: 0x9BA8, + 139463 - 131105: 0x8AD5, + 139516 - 131105: 0xFA73, + 139562 - 131105: 0xFD59, + 139611 - 131105: 0x91A2, + 139635 - 131105: 0xFBED, + 139642 - 131105: 0x9CA9, + 139681 - 131105: 0x8AA8, + 139713 - 131105: 0x8D42, + 139715 - 131105: 0x9BC3, + 139784 - 131105: 0x8AE1, + 139900 - 131105: 0x9B4E, + 140065 - 131105: 0x95D0, + 140069 - 131105: 0x905F, + 140221 - 131105: 0x97EE, + 140240 - 131105: 0xFC4E, + 140247 - 131105: 0x9B4F, + 140282 - 131105: 0x9B50, + 140389 - 131105: 0x9EC6, + 140401 - 131105: 0xFC50, + 140427 - 131105: 0xFD73, + 140433 - 131105: 0xFDA7, + 140464 - 131105: 0x9DA2, + 140476 - 131105: 0x87D1, + 140481 - 131105: 0x87D3, + 140489 - 131105: 0x87D4, + 140492 - 131105: 0x87D5, + 140525 - 131105: 0xFA58, + 140563 - 131105: 0xFA5E, + 140571 - 131105: 0xA059, + 140592 - 131105: 0xFA75, + 140628 - 131105: 0xFBBE, + 140685 - 131105: 0x9CA2, + 140719 - 131105: 0x9370, + 140734 - 131105: 0x9371, + 140827 - 131105: 0x9377, + 140828 - 131105: 0xFEEF, + 140843 - 131105: 0x936D, + 140904 - 131105: 0xFC5D, + 140922 - 131105: 0x90B8, + 140950 - 131105: 0x8AFC, + 140952 - 131105: 0xFB41, + 141044 - 131105: 0x9E6B, + 141045 - 131105: 0x94E3, + 141046 - 131105: 0x8EE2, + 141074 - 131105: 0x8C7D, + 141076 - 131105: 0x8ED7, + 141083 - 131105: 0x9C4D, + 141087 - 131105: 0x96A3, + 141098 - 131105: 0x9B51, + 141173 - 131105: 0x8AC3, + 141185 - 131105: 0x96AA, + 141206 - 131105: 0x8CE2, + 141236 - 131105: 0xFC68, + 141237 - 131105: 0x8B6D, + 141261 - 131105: 0xFD67, + 141315 - 131105: 0x8AE9, + 141407 - 131105: 0xFCA1, + 141408 - 131105: 0x936C, + 141425 - 131105: 0x9B52, + 141485 - 131105: 0xFE70, + 141505 - 131105: 0xFCA8, + 141559 - 131105: 0xFCE9, + 141606 - 131105: 0x9CB4, + 141625 - 131105: 0x8AEA, + 141647 - 131105: 0x9B53, + 141671 - 131105: 0x9B55, + 141675 - 131105: 0x96AB, + 141696 - 131105: 0xFCA7, + 141715 - 131105: 0x9B56, + 141926 - 131105: 0x8ABC, + 142031 - 131105: 0x8ACB, + 142037 - 131105: 0x9B57, + 142054 - 131105: 0x89CD, + 142056 - 131105: 0x9B59, + 142094 - 131105: 0x9B5B, + 142114 - 131105: 0x93A5, + 142143 - 131105: 0x9B5D, + 142147 - 131105: 0x9E4F, + 142186 - 131105: 0x93A3, + 142282 - 131105: 0x8A7B, + 142286 - 131105: 0x8B42, + 142374 - 131105: 0x9750, + 142375 - 131105: 0x8FB3, + 142392 - 131105: 0x8A50, + 142412 - 131105: 0x9B60, + 142417 - 131105: 0x8B45, + 142421 - 131105: 0x8B46, + 142434 - 131105: 0x9DFE, + 142472 - 131105: 0x9B62, + 142491 - 131105: 0x937B, + 142497 - 131105: 0x93B1, + 142505 - 131105: 0x8A60, + 142514 - 131105: 0x8AD8, + 142519 - 131105: 0x9B63, + 142530 - 131105: 0x8A69, + 142534 - 131105: 0x8A47, + 142537 - 131105: 0x8ACC, + 142599 - 131105: 0x937C, + 142600 - 131105: 0x9B65, + 142610 - 131105: 0x9B66, + 142660 - 131105: 0x8A72, + 142668 - 131105: 0x8A7A, + 142695 - 131105: 0x93AF, + 142733 - 131105: 0x8AB0, + 142741 - 131105: 0x9B68, + 142752 - 131105: 0x9EA3, + 142755 - 131105: 0xFAEC, + 142756 - 131105: 0x8B77, + 142775 - 131105: 0x9B67, + 142830 - 131105: 0x8B59, + 142861 - 131105: 0xFCB1, + 142902 - 131105: 0xFCBB, + 142914 - 131105: 0x9B69, + 142968 - 131105: 0x93A8, + 142987 - 131105: 0x8AE0, + 143027 - 131105: 0x9E51, + 143087 - 131105: 0x8F5F, + 143220 - 131105: 0x9B6A, + 143308 - 131105: 0x9B6B, + 143331 - 131105: 0x97EC, + 143411 - 131105: 0x9B6C, + 143428 - 131105: 0xFE4E, + 143435 - 131105: 0xFDC2, + 143462 - 131105: 0x9B6D, + 143485 - 131105: 0x9167, + 143486 - 131105: 0xFCCC, + 143502 - 131105: 0x93B6, + 143543 - 131105: 0x90E4, + 143548 - 131105: 0x90E5, + 143578 - 131105: 0x9EF2, + 143619 - 131105: 0x93CA, + 143677 - 131105: 0x8BBC, + 143741 - 131105: 0x8F46, + 143746 - 131105: 0x93CF, + 143780 - 131105: 0xFCDB, + 143781 - 131105: 0xFCDC, + 143795 - 131105: 0x93C0, + 143816 - 131105: 0xFCE6, + 143817 - 131105: 0x96E7, + 143850 - 131105: 0x87A7, + 143863 - 131105: 0xFCD8, + 143864 - 131105: 0xFCD9, + 143865 - 131105: 0xFDA6, + 143887 - 131105: 0x93CE, + 143909 - 131105: 0x95F1, + 143919 - 131105: 0x9CE9, + 143921 - 131105: 0xFCE4, + 143922 - 131105: 0x94AF, + 143923 - 131105: 0xFA77, + 143924 - 131105: 0x93CC, + 143958 - 131105: 0x8CE1, + 143966 - 131105: 0x87A9, + 143970 - 131105: 0x905A, + 144001 - 131105: 0x8C54, + 144009 - 131105: 0x93BF, + 144010 - 131105: 0xFB51, + 144043 - 131105: 0x93B9, + 144044 - 131105: 0xFED7, + 144045 - 131105: 0x93B7, + 144082 - 131105: 0x93D9, + 144096 - 131105: 0x93BB, + 144097 - 131105: 0x93DA, + 144128 - 131105: 0x98A3, + 144138 - 131105: 0x90D1, + 144159 - 131105: 0x9B6E, + 144308 - 131105: 0xFA70, + 144332 - 131105: 0x9BEB, + 144350 - 131105: 0x9B6F, + 144358 - 131105: 0xFCFC, + 144372 - 131105: 0x8B40, + 144373 - 131105: 0xA07B, + 144377 - 131105: 0x8CA1, + 144378 - 131105: 0x97F7, + 144382 - 131105: 0x93E2, + 144384 - 131105: 0xFCD6, + 144447 - 131105: 0x9559, + 144464 - 131105: 0x93A6, + 144495 - 131105: 0xFD40, + 144498 - 131105: 0x935F, + 144613 - 131105: 0x97F2, + 144665 - 131105: 0x9C76, + 144688 - 131105: 0x8EF8, + 144721 - 131105: 0x8CEB, + 144730 - 131105: 0x8F47, + 144743 - 131105: 0x9B74, + 144789 - 131105: 0x92B4, + 144793 - 131105: 0x91ED, + 144796 - 131105: 0x96D2, + 144827 - 131105: 0x87D8, + 144845 - 131105: 0xFD46, + 144846 - 131105: 0x8F4F, + 144847 - 131105: 0x9549, + 144883 - 131105: 0x9B75, + 144896 - 131105: 0xFA5C, + 144919 - 131105: 0x8751, + 144922 - 131105: 0x9B79, + 144956 - 131105: 0xFD4B, + 144960 - 131105: 0x96D3, + 144985 - 131105: 0xFD58, + 144991 - 131105: 0x945F, + 145015 - 131105: 0xA0F5, + 145038 - 131105: 0x87C7, + 145054 - 131105: 0x877C, + 145062 - 131105: 0x9243, + 145069 - 131105: 0x97FA, + 145082 - 131105: 0x9DD9, + 145119 - 131105: 0x97F4, + 145134 - 131105: 0x924D, + 145155 - 131105: 0xFD5B, + 145174 - 131105: 0x9B7A, + 145184 - 131105: 0x9ED5, + 145197 - 131105: 0xFAAE, + 145199 - 131105: 0x9CC9, + 145215 - 131105: 0x9258, + 145254 - 131105: 0x8EC8, + 145281 - 131105: 0x94B4, + 145314 - 131105: 0x93E1, + 145340 - 131105: 0x93DF, + 145346 - 131105: 0xFCF0, + 145365 - 131105: 0x93EC, + 145366 - 131105: 0x97F6, + 145367 - 131105: 0x96CF, + 145466 - 131105: 0x93DE, + 145858 - 131105: 0x8ACF, + 146087 - 131105: 0x9BA2, + 146139 - 131105: 0xFD69, + 146158 - 131105: 0x9352, + 146170 - 131105: 0x98A2, + 146202 - 131105: 0x8CE7, + 146266 - 131105: 0xFD6E, + 146531 - 131105: 0x8CA4, + 146585 - 131105: 0xFA7C, + 146586 - 131105: 0x93FA, + 146587 - 131105: 0x907C, + 146613 - 131105: 0x8F67, + 146615 - 131105: 0x9DB7, + 146631 - 131105: 0xA0E9, + 146632 - 131105: 0xFA4E, + 146633 - 131105: 0xFDA1, + 146684 - 131105: 0x9E74, + 146685 - 131105: 0x9FBF, + 146686 - 131105: 0x9ECB, + 146687 - 131105: 0x9BB9, + 146752 - 131105: 0x9DD4, + 146779 - 131105: 0x97B9, + 146814 - 131105: 0x8EF1, + 146831 - 131105: 0x957B, + 146870 - 131105: 0x9ED2, + 146871 - 131105: 0x9753, + 146872 - 131105: 0x96A4, + 146873 - 131105: 0x8FBE, + 146874 - 131105: 0x94D9, + 146875 - 131105: 0x9058, + 146876 - 131105: 0xFD79, + 146877 - 131105: 0xFD7B, + 146915 - 131105: 0x8EDA, + 146936 - 131105: 0x8EFA, + 146950 - 131105: 0x8762, + 146961 - 131105: 0x9BA5, + 146988 - 131105: 0x9ED9, + 146989 - 131105: 0x97D4, + 146990 - 131105: 0x90BB, + 146991 - 131105: 0xFDBC, + 146992 - 131105: 0xFDC6, + 146993 - 131105: 0x9248, + 147001 - 131105: 0x92B5, + 147080 - 131105: 0x9DC1, + 147081 - 131105: 0x92B9, + 147082 - 131105: 0x92A6, + 147083 - 131105: 0x8F4B, + 147129 - 131105: 0x9BA6, + 147135 - 131105: 0x92B6, + 147159 - 131105: 0x8E40, + 147191 - 131105: 0x9ED8, + 147192 - 131105: 0x945E, + 147193 - 131105: 0x985F, + 147194 - 131105: 0x94CE, + 147195 - 131105: 0x924A, + 147196 - 131105: 0xFD70, + 147253 - 131105: 0x9467, + 147265 - 131105: 0x8DEC, + 147274 - 131105: 0x9BD8, + 147297 - 131105: 0x8763, + 147327 - 131105: 0x9448, + 147328 - 131105: 0xFAC1, + 147329 - 131105: 0x9CF7, + 147330 - 131105: 0xFDBE, + 147343 - 131105: 0x8FDA, + 147380 - 131105: 0xFDD9, + 147383 - 131105: 0xFC7E, + 147392 - 131105: 0x93F9, + 147397 - 131105: 0xFA43, + 147435 - 131105: 0xFAEB, + 147436 - 131105: 0xFAC3, + 147437 - 131105: 0x97D3, + 147438 - 131105: 0x95F9, + 147439 - 131105: 0x9C48, + 147440 - 131105: 0xFDD8, + 147473 - 131105: 0xA0D8, + 147513 - 131105: 0xFDD7, + 147514 - 131105: 0xFB4A, + 147515 - 131105: 0x9BAF, + 147516 - 131105: 0x944B, + 147517 - 131105: 0xFDC9, + 147543 - 131105: 0x8EAC, + 147589 - 131105: 0xFDB2, + 147595 - 131105: 0x925A, + 147596 - 131105: 0xFCBD, + 147597 - 131105: 0x92D9, + 147601 - 131105: 0xFDD5, + 147657 - 131105: 0x92DD, + 147681 - 131105: 0x9259, + 147692 - 131105: 0x8CF0, + 147716 - 131105: 0x96BA, + 147727 - 131105: 0x925B, + 147737 - 131105: 0x9BAB, + 147775 - 131105: 0xFDDA, + 147776 - 131105: 0xFDDE, + 147780 - 131105: 0xFDD3, + 147790 - 131105: 0x8C46, + 147797 - 131105: 0xFDD6, + 147798 - 131105: 0xFDDC, + 147799 - 131105: 0xFDDD, + 147804 - 131105: 0x90FE, + 147807 - 131105: 0xFEA1, + 147809 - 131105: 0x87A5, + 147831 - 131105: 0x8BAD, + 147834 - 131105: 0x9CD8, + 147875 - 131105: 0x9E6D, + 147876 - 131105: 0xFD7C, + 147877 - 131105: 0xFB61, + 147884 - 131105: 0x96F8, + 147893 - 131105: 0x96F0, + 147917 - 131105: 0xFCF4, + 147938 - 131105: 0xFE60, + 147964 - 131105: 0x9852, + 147995 - 131105: 0x964F, + 148043 - 131105: 0x916E, + 148054 - 131105: 0x986D, + 148057 - 131105: 0x9864, + 148086 - 131105: 0x9453, + 148087 - 131105: 0xFDEC, + 148088 - 131105: 0xFB78, + 148100 - 131105: 0x95BA, + 148115 - 131105: 0x985D, + 148117 - 131105: 0x92F9, + 148133 - 131105: 0x985A, + 148159 - 131105: 0x8750, + 148161 - 131105: 0xFDF6, + 148169 - 131105: 0x93D0, + 148170 - 131105: 0x9862, + 148206 - 131105: 0x9BAD, + 148218 - 131105: 0x974F, + 148237 - 131105: 0x9BAE, + 148250 - 131105: 0x9452, + 148276 - 131105: 0x9BB0, + 148296 - 131105: 0x91D2, + 148322 - 131105: 0x97EA, + 148323 - 131105: 0xFB6B, + 148324 - 131105: 0x91B1, + 148325 - 131105: 0xFDF3, + 148364 - 131105: 0x92CB, + 148374 - 131105: 0x9BB1, + 148380 - 131105: 0xFCEC, + 148413 - 131105: 0x986B, + 148417 - 131105: 0x9751, + 148457 - 131105: 0x9871, + 148458 - 131105: 0x95EF, + 148466 - 131105: 0x9EF3, + 148472 - 131105: 0x91E8, + 148484 - 131105: 0x9BBA, + 148533 - 131105: 0xFB4C, + 148534 - 131105: 0x926A, + 148570 - 131105: 0xFDF8, + 148571 - 131105: 0x9861, + 148595 - 131105: 0x91E7, + 148615 - 131105: 0x93ED, + 148616 - 131105: 0x9744, + 148665 - 131105: 0x91E1, + 148668 - 131105: 0xFBF5, + 148686 - 131105: 0x9869, + 148691 - 131105: 0x8A62, + 148694 - 131105: 0x9BBB, + 148741 - 131105: 0x8CA8, + 148769 - 131105: 0x9C55, + 148856 - 131105: 0x8E77, + 148936 - 131105: 0x8AB2, + 149016 - 131105: 0x9EBC, + 149034 - 131105: 0x93E6, + 149093 - 131105: 0x93A2, + 149108 - 131105: 0x9BBD, + 149143 - 131105: 0x94B3, + 149204 - 131105: 0x937D, + 149254 - 131105: 0x9E66, + 149285 - 131105: 0x9459, + 149295 - 131105: 0x9BBF, + 149391 - 131105: 0x9458, + 149472 - 131105: 0x9EA5, + 149522 - 131105: 0x9BC7, + 149539 - 131105: 0xFE54, + 149634 - 131105: 0x8E74, + 149737 - 131105: 0x8BD6, + 149744 - 131105: 0x94B6, + 149745 - 131105: 0xFD74, + 149746 - 131105: 0x98C0, + 149747 - 131105: 0x94A5, + 149755 - 131105: 0x9BC8, + 149759 - 131105: 0x95ED, + 149760 - 131105: 0xFD7E, + 149761 - 131105: 0xFBEB, + 149772 - 131105: 0xFD7D, + 149782 - 131105: 0x976F, + 149783 - 131105: 0x9461, + 149785 - 131105: 0x9FC1, + 149807 - 131105: 0x95D7, + 149811 - 131105: 0xFA52, + 149812 - 131105: 0x9C58, + 149822 - 131105: 0x9F68, + 149823 - 131105: 0x9BE7, + 149824 - 131105: 0xFCCE, + 149825 - 131105: 0x96E8, + 149826 - 131105: 0xFA49, + 149827 - 131105: 0x97A1, + 149858 - 131105: 0x954D, + 149859 - 131105: 0x9EF8, + 149876 - 131105: 0xFE49, + 149877 - 131105: 0x91CE, + 149878 - 131105: 0x9771, + 149883 - 131105: 0x8CCF, + 149887 - 131105: 0xFDB1, + 149890 - 131105: 0xFC6E, + 149896 - 131105: 0x9CF2, + 149897 - 131105: 0x93B8, + 149898 - 131105: 0x9043, + 149899 - 131105: 0x9759, + 149900 - 131105: 0x94D7, + 149901 - 131105: 0xFE66, + 149902 - 131105: 0x947D, + 149903 - 131105: 0xFC6F, + 149908 - 131105: 0x9246, + 149924 - 131105: 0xFA6D, + 149927 - 131105: 0x8EF7, + 149929 - 131105: 0xFBB7, + 149931 - 131105: 0x947C, + 149932 - 131105: 0x92CD, + 149933 - 131105: 0x97B2, + 149943 - 131105: 0xFE65, + 149944 - 131105: 0x967E, + 149945 - 131105: 0x9758, + 149946 - 131105: 0x9B77, + 149947 - 131105: 0x91CF, + 149957 - 131105: 0x94A4, + 149968 - 131105: 0x9CAD, + 149978 - 131105: 0x8BAB, + 149982 - 131105: 0x96D5, + 149983 - 131105: 0xFCB3, + 149987 - 131105: 0x93AE, + 149989 - 131105: 0x976D, + 149996 - 131105: 0x9446, + 149997 - 131105: 0x95F7, + 150006 - 131105: 0x9C46, + 150007 - 131105: 0x955B, + 150008 - 131105: 0x91D1, + 150009 - 131105: 0x94F4, + 150011 - 131105: 0xFE67, + 150030 - 131105: 0x92A5, + 150034 - 131105: 0xFEDF, + 150035 - 131105: 0x8CAB, + 150037 - 131105: 0x9BC9, + 150049 - 131105: 0xFCED, + 150050 - 131105: 0xFDFA, + 150051 - 131105: 0xFCC8, + 150052 - 131105: 0xFE62, + 150053 - 131105: 0x91FC, + 150054 - 131105: 0xFE6B, + 150055 - 131105: 0xFDF9, + 150056 - 131105: 0xFCC7, + 150057 - 131105: 0x914E, + 150058 - 131105: 0x9CB8, + 150078 - 131105: 0x9767, + 150082 - 131105: 0x95EE, + 150085 - 131105: 0x9BB2, + 150090 - 131105: 0x9460, + 150094 - 131105: 0x94A2, + 150095 - 131105: 0x9875, + 150096 - 131105: 0x97AC, + 150097 - 131105: 0x91D3, + 150109 - 131105: 0x987B, + 150117 - 131105: 0x8EEB, + 150118 - 131105: 0x976A, + 150119 - 131105: 0x965E, + 150129 - 131105: 0x97EB, + 150135 - 131105: 0x9FF9, + 150136 - 131105: 0x95F8, + 150137 - 131105: 0xFEA2, + 150138 - 131105: 0x8FE6, + 150156 - 131105: 0xFE7E, + 150163 - 131105: 0x9DA4, + 150164 - 131105: 0x9768, + 150165 - 131105: 0x8EEC, + 150166 - 131105: 0x94BD, + 150180 - 131105: 0x945B, + 150181 - 131105: 0x9CF6, + 150182 - 131105: 0xFAA7, + 150183 - 131105: 0x9BD9, + 150193 - 131105: 0xFA5D, + 150194 - 131105: 0x9656, + 150195 - 131105: 0x9762, + 150202 - 131105: 0x94BA, + 150203 - 131105: 0xA04F, + 150204 - 131105: 0x92D8, + 150208 - 131105: 0x9BCB, + 150215 - 131105: 0x94BB, + 150218 - 131105: 0x9D5F, + 150225 - 131105: 0x90CF, + 150239 - 131105: 0x9465, + 150242 - 131105: 0x9F4C, + 150249 - 131105: 0x90D8, + 150287 - 131105: 0x8D5B, + 150382 - 131105: 0x9EBE, + 150517 - 131105: 0xFB6D, + 150537 - 131105: 0x95CA, + 150686 - 131105: 0x9DC2, + 150687 - 131105: 0x97F8, + 150729 - 131105: 0x8FFC, + 150745 - 131105: 0x9473, + 150790 - 131105: 0x9474, + 150803 - 131105: 0xFEB7, + 150968 - 131105: 0x8A4B, + 151018 - 131105: 0x8A55, + 151019 - 131105: 0x8B69, + 151099 - 131105: 0x8ADC, + 151120 - 131105: 0x8B76, + 151205 - 131105: 0x9BCE, + 151207 - 131105: 0x8A68, + 151310 - 131105: 0xA0F8, + 151388 - 131105: 0x98DF, + 151426 - 131105: 0xFEB5, + 151430 - 131105: 0x9BCF, + 151447 - 131105: 0x96FB, + 151450 - 131105: 0x9BFB, + 151465 - 131105: 0x9ECE, + 151480 - 131105: 0x8EE5, + 151490 - 131105: 0x9E7B, + 151596 - 131105: 0x9BD2, + 151634 - 131105: 0x8AA5, + 151709 - 131105: 0xFECE, + 151851 - 131105: 0x8A45, + 151880 - 131105: 0x9DFC, + 151933 - 131105: 0xFECF, + 151934 - 131105: 0x8BA5, + 152013 - 131105: 0x8C4A, + 152035 - 131105: 0x8AEC, + 152038 - 131105: 0xFCE0, + 152039 - 131105: 0x94AD, + 152096 - 131105: 0xFED5, + 152097 - 131105: 0x94AC, + 152144 - 131105: 0xFC5A, + 152217 - 131105: 0x9BD6, + 152263 - 131105: 0x8A6F, + 152280 - 131105: 0x8BA9, + 152334 - 131105: 0x8E5F, + 152337 - 131105: 0x9DCB, + 152339 - 131105: 0xFCE7, + 152601 - 131105: 0x9BD7, + 152613 - 131105: 0x93C8, + 152623 - 131105: 0x91F0, + 152624 - 131105: 0x8FE0, + 152646 - 131105: 0x9BDB, + 152684 - 131105: 0x90ED, + 152686 - 131105: 0x9BDC, + 152730 - 131105: 0x8D53, + 152881 - 131105: 0xA0EC, + 152885 - 131105: 0x98FA, + 152895 - 131105: 0x9BE0, + 152923 - 131105: 0x93C7, + 152924 - 131105: 0x9249, + 152925 - 131105: 0x96E1, + 152926 - 131105: 0x9BE2, + 152930 - 131105: 0x9BE4, + 152933 - 131105: 0x8FE1, + 152934 - 131105: 0x9BE5, + 152961 - 131105: 0x94C0, + 152964 - 131105: 0x93C3, + 152975 - 131105: 0x93C5, + 153017 - 131105: 0x9079, + 153045 - 131105: 0x977B, + 153051 - 131105: 0x907E, + 153056 - 131105: 0xFEE6, + 153093 - 131105: 0xFE46, + 153141 - 131105: 0x9DB8, + 153169 - 131105: 0x9270, + 153219 - 131105: 0x95A8, + 153237 - 131105: 0x8CB0, + 153315 - 131105: 0x94C8, + 153334 - 131105: 0x98B9, + 153350 - 131105: 0x9140, + 153373 - 131105: 0xFCBE, + 153381 - 131105: 0x9157, + 153405 - 131105: 0x8BB2, + 153458 - 131105: 0xFADF, + 153543 - 131105: 0x9BE6, + 153567 - 131105: 0x9643, + 153568 - 131105: 0x8E44, + 153569 - 131105: 0x9C4F, + 153687 - 131105: 0xFEF4, + 153693 - 131105: 0x9BE8, + 153714 - 131105: 0x93DC, + 153800 - 131105: 0x966F, + 153822 - 131105: 0x87A1, + 153825 - 131105: 0x8E4A, + 153859 - 131105: 0x9BED, + 153926 - 131105: 0x92F6, + 153942 - 131105: 0x9DB9, + 154028 - 131105: 0x8E4E, + 154060 - 131105: 0xFBCF, + 154196 - 131105: 0x8760, + 154261 - 131105: 0x9EC2, + 154268 - 131105: 0x94E5, + 154286 - 131105: 0x9BF0, + 154287 - 131105: 0x94E4, + 154345 - 131105: 0x9551, + 154484 - 131105: 0x8BBB, + 154505 - 131105: 0x9BF1, + 154547 - 131105: 0x94F0, + 154548 - 131105: 0x8E64, + 154566 - 131105: 0x94EA, + 154596 - 131105: 0x8F61, + 154600 - 131105: 0x9B64, + 154625 - 131105: 0x8E5B, + 154630 - 131105: 0x9BF2, + 154657 - 131105: 0x9FBE, + 154698 - 131105: 0x9DC9, + 154725 - 131105: 0x8E6C, + 154769 - 131105: 0x8F73, + 154788 - 131105: 0x8CAF, + 154816 - 131105: 0x8F75, + 154817 - 131105: 0x8E71, + 154878 - 131105: 0x8E60, + 154912 - 131105: 0x8E6A, + 154928 - 131105: 0x8C4C, + 154947 - 131105: 0x9552, + 155033 - 131105: 0x87CF, + 155065 - 131105: 0x87C0, + 155150 - 131105: 0x9554, + 155209 - 131105: 0x8AD4, + 155265 - 131105: 0x9DBB, + 155266 - 131105: 0x9543, + 155267 - 131105: 0x92FE, + 155302 - 131105: 0x94F2, + 155324 - 131105: 0x94F1, + 155351 - 131105: 0xA0EA, + 155352 - 131105: 0x9DD2, + 155418 - 131105: 0xA0B1, + 155467 - 131105: 0x91F8, + 155617 - 131105: 0x9462, + 155618 - 131105: 0x9BA4, + 155681 - 131105: 0x877D, + 155689 - 131105: 0x8EAD, + 155720 - 131105: 0x9EAD, + 155748 - 131105: 0x96D0, + 155779 - 131105: 0xFEEE, + 155799 - 131105: 0x8AB4, + 155812 - 131105: 0x9757, + 155813 - 131105: 0x8A77, + 155906 - 131105: 0x9BF7, + 155937 - 131105: 0x8EB5, + 155993 - 131105: 0xA06D, + 155994 - 131105: 0x8EB6, + 155995 - 131105: 0x9756, + 155996 - 131105: 0x9540, + 156077 - 131105: 0xA0F3, + 156078 - 131105: 0x94BE, + 156082 - 131105: 0x9BFA, + 156125 - 131105: 0xFDDF, + 156248 - 131105: 0x9DBC, + 156257 - 131105: 0x94FE, + 156266 - 131105: 0x8BDB, + 156267 - 131105: 0xA0FE, + 156368 - 131105: 0x8EC0, + 156469 - 131105: 0x9F47, + 156491 - 131105: 0x8BDE, + 156492 - 131105: 0xA0FB, + 156497 - 131105: 0x8EC3, + 156606 - 131105: 0x9649, + 156661 - 131105: 0xFEC2, + 156664 - 131105: 0x954C, + 156674 - 131105: 0x9BFD, + 156688 - 131105: 0x90CC, + 156689 - 131105: 0x9C60, + 156690 - 131105: 0x954B, + 156746 - 131105: 0x9BFE, + 156777 - 131105: 0x9C70, + 156804 - 131105: 0x9C43, + 156808 - 131105: 0x9C47, + 156809 - 131105: 0x8ECC, + 156813 - 131105: 0x8E54, + 156824 - 131105: 0x8EE4, + 156946 - 131105: 0x9C49, + 157042 - 131105: 0x8B5E, + 157088 - 131105: 0x955E, + 157101 - 131105: 0x955C, + 157119 - 131105: 0x9C4B, + 157202 - 131105: 0x8BE1, + 157222 - 131105: 0x8ED9, + 157359 - 131105: 0x9DB4, + 157361 - 131105: 0x925F, + 157365 - 131105: 0x9C4C, + 157402 - 131105: 0x8AA1, + 157416 - 131105: 0x8EDB, + 157436 - 131105: 0x9C56, + 157462 - 131105: 0x8AA2, + 157505 - 131105: 0x9754, + 157593 - 131105: 0x9C5E, + 157619 - 131105: 0x9ED4, + 157620 - 131105: 0x9568, + 157644 - 131105: 0xA0C3, + 157724 - 131105: 0x8AE6, + 157766 - 131105: 0xA0F7, + 157790 - 131105: 0x9C61, + 157806 - 131105: 0x9C5F, + 157832 - 131105: 0xFC4D, + 157834 - 131105: 0x9E5B, + 157843 - 131105: 0x9E69, + 157895 - 131105: 0x9C63, + 157966 - 131105: 0xFEC7, + 157969 - 131105: 0xFEC6, + 157990 - 131105: 0x9C67, + 158009 - 131105: 0x9C69, + 158033 - 131105: 0x8BE2, + 158120 - 131105: 0x9165, + 158133 - 131105: 0x9CE7, + 158194 - 131105: 0x8A54, + 158202 - 131105: 0x9C6C, + 158253 - 131105: 0x9C6E, + 158254 - 131105: 0xFE5D, + 158260 - 131105: 0x9C73, + 158274 - 131105: 0x956A, + 158289 - 131105: 0x956D, + 158290 - 131105: 0x8EF0, + 158469 - 131105: 0x8F4D, + 158474 - 131105: 0x8EF6, + 158483 - 131105: 0xFABC, + 158485 - 131105: 0x8CD5, + 158499 - 131105: 0x875E, + 158504 - 131105: 0xFBDA, + 158544 - 131105: 0x8B4C, + 158545 - 131105: 0xFD75, + 158546 - 131105: 0x9BDD, + 158547 - 131105: 0xFAF5, + 158555 - 131105: 0x9C74, + 158581 - 131105: 0x9545, + 158594 - 131105: 0x96C6, + 158614 - 131105: 0x8F6A, + 158615 - 131105: 0x8F4E, + 158621 - 131105: 0x9C78, + 158643 - 131105: 0xFA55, + 158656 - 131105: 0x97E4, + 158711 - 131105: 0x9C41, + 158753 - 131105: 0x925C, + 158784 - 131105: 0x96FA, + 158785 - 131105: 0x8CF6, + 158790 - 131105: 0x8D4D, + 158846 - 131105: 0xFB66, + 158847 - 131105: 0x8E65, + 158848 - 131105: 0x9849, + 158849 - 131105: 0xFBA8, + 158850 - 131105: 0x9842, + 158884 - 131105: 0x9C7A, + 158903 - 131105: 0x97FB, + 158904 - 131105: 0x90CA, + 158909 - 131105: 0x9C5B, + 158912 - 131105: 0x974D, + 158915 - 131105: 0x8ED3, + 158929 - 131105: 0x9561, + 159010 - 131105: 0x9F4B, + 159011 - 131105: 0x9FB5, + 159012 - 131105: 0x93D2, + 159013 - 131105: 0xFDAA, + 159014 - 131105: 0x9840, + 159015 - 131105: 0x9146, + 159016 - 131105: 0x9867, + 159017 - 131105: 0xFA5A, + 159018 - 131105: 0xFBA9, + 159057 - 131105: 0x9841, + 159092 - 131105: 0x8CD3, + 159136 - 131105: 0xFCFD, + 159137 - 131105: 0xFDAB, + 159138 - 131105: 0x91BD, + 159139 - 131105: 0x8F4C, + 159140 - 131105: 0x96C9, + 159141 - 131105: 0x8F55, + 159142 - 131105: 0xFBAE, + 159143 - 131105: 0x956F, + 159150 - 131105: 0x9C7D, + 159196 - 131105: 0xA0F0, + 159210 - 131105: 0x946F, + 159211 - 131105: 0xFDAC, + 159216 - 131105: 0x96CB, + 159232 - 131105: 0x96CE, + 159237 - 131105: 0xA056, + 159239 - 131105: 0x9CE1, + 159250 - 131105: 0x96C4, + 159298 - 131105: 0x8F5E, + 159299 - 131105: 0x8F6C, + 159300 - 131105: 0x8EA3, + 159301 - 131105: 0xFBB3, + 159342 - 131105: 0xFC53, + 159346 - 131105: 0xFDB3, + 159351 - 131105: 0x8F6B, + 159364 - 131105: 0x96CA, + 159368 - 131105: 0x87CD, + 159371 - 131105: 0x8753, + 159385 - 131105: 0x8F79, + 159440 - 131105: 0x9E6F, + 159441 - 131105: 0xA0C5, + 159442 - 131105: 0xFC78, + 159443 - 131105: 0x8E42, + 159444 - 131105: 0x8F5A, + 159445 - 131105: 0x90C2, + 159446 - 131105: 0x8EA5, + 159447 - 131105: 0x9061, + 159526 - 131105: 0x924F, + 159603 - 131105: 0x9373, + 159604 - 131105: 0xFDB5, + 159647 - 131105: 0xFECC, + 159649 - 131105: 0xFBBD, + 159678 - 131105: 0x8CD6, + 159710 - 131105: 0x9843, + 159711 - 131105: 0x96C5, + 159758 - 131105: 0x89BC, + 159819 - 131105: 0x9CA3, + 159826 - 131105: 0x924B, + 159827 - 131105: 0x984A, + 159880 - 131105: 0x8FA4, + 159917 - 131105: 0xA0F1, + 159918 - 131105: 0x9EFB, + 159919 - 131105: 0x9CD2, + 159949 - 131105: 0x8FA7, + 159954 - 131105: 0x8754, + 159992 - 131105: 0xFC5C, + 160009 - 131105: 0x9845, + 160012 - 131105: 0x9046, + 160013 - 131105: 0x8CD1, + 160038 - 131105: 0xFEFA, + 160039 - 131105: 0x9560, + 160100 - 131105: 0x9F48, + 160101 - 131105: 0x9247, + 160117 - 131105: 0x90FB, + 160205 - 131105: 0x9CA4, + 160283 - 131105: 0x9571, + 160359 - 131105: 0x8745, + 160384 - 131105: 0x9CA6, + 160389 - 131105: 0x9CA7, + 160395 - 131105: 0x9CAA, + 160434 - 131105: 0x9ED3, + 160438 - 131105: 0x9E70, + 160486 - 131105: 0x9CAC, + 160594 - 131105: 0x8752, + 160666 - 131105: 0x8FAE, + 160767 - 131105: 0x8D50, + 160802 - 131105: 0x957D, + 160848 - 131105: 0x9CB0, + 160900 - 131105: 0x97B6, + 160902 - 131105: 0xA0BD, + 161140 - 131105: 0x8ADF, + 161187 - 131105: 0x9EAA, + 161248 - 131105: 0x8FBD, + 161252 - 131105: 0x8FBF, + 161277 - 131105: 0x9369, + 161278 - 131105: 0x9BA7, + 161287 - 131105: 0xC8A4, + 161292 - 131105: 0xFEEA, + 161330 - 131105: 0x9BE1, + 161337 - 131105: 0x8B41, + 161365 - 131105: 0x9DB6, + 161366 - 131105: 0xA0EB, + 161367 - 131105: 0x9BA3, + 161428 - 131105: 0x8BA1, + 161551 - 131105: 0x8FC8, + 161589 - 131105: 0x894C, + 161590 - 131105: 0x9860, + 161601 - 131105: 0x94C7, + 161630 - 131105: 0x8B58, + 161668 - 131105: 0x95AB, + 161669 - 131105: 0x95AA, + 161740 - 131105: 0x9CC3, + 161880 - 131105: 0x9CC4, + 161904 - 131105: 0x93D6, + 161949 - 131105: 0x9DAC, + 161970 - 131105: 0x8BE6, + 161992 - 131105: 0x8A71, + 162084 - 131105: 0x8FD1, + 162151 - 131105: 0x99D5, + 162170 - 131105: 0x90F4, + 162208 - 131105: 0x8AA3, + 162269 - 131105: 0x9CCE, + 162301 - 131105: 0x9CD4, + 162314 - 131105: 0x9CD5, + 162318 - 131105: 0xFBC8, + 162366 - 131105: 0x9DB3, + 162387 - 131105: 0xFC70, + 162393 - 131105: 0x8FD7, + 162425 - 131105: 0x9B73, + 162436 - 131105: 0xFA5B, + 162493 - 131105: 0x8FD2, + 162494 - 131105: 0x9064, + 162548 - 131105: 0x98B6, + 162566 - 131105: 0x9668, + 162571 - 131105: 0x9CD6, + 162584 - 131105: 0x98BD, + 162616 - 131105: 0x8FDC, + 162617 - 131105: 0xFEF6, + 162618 - 131105: 0x8FD9, + 162632 - 131105: 0x9541, + 162661 - 131105: 0x87CA, + 162799 - 131105: 0x876C, + 162804 - 131105: 0x97F3, + 162834 - 131105: 0x9BF8, + 162924 - 131105: 0x875A, + 162993 - 131105: 0x8748, + 163013 - 131105: 0x874A, + 163119 - 131105: 0x9E6C, + 163155 - 131105: 0x8FF2, + 163156 - 131105: 0x8FEE, + 163174 - 131105: 0x9CD7, + 163187 - 131105: 0x9E6E, + 163204 - 131105: 0x8A40, + 163215 - 131105: 0x8FEF, + 163224 - 131105: 0x8FF4, + 163261 - 131105: 0x8FF5, + 163292 - 131105: 0x95C2, + 163405 - 131105: 0x986A, + 163407 - 131105: 0x97CF, + 163630 - 131105: 0x9EE5, + 163833 - 131105: 0x9E7C, + 163842 - 131105: 0x9041, + 163849 - 131105: 0x9CDB, + 163870 - 131105: 0x9441, + 163875 - 131105: 0x9CE6, + 163876 - 131105: 0x9DB0, + 163912 - 131105: 0x9CEA, + 163971 - 131105: 0x9CED, + 163984 - 131105: 0x9CFA, + 164029 - 131105: 0x8B62, + 164030 - 131105: 0x8A4E, + 164072 - 131105: 0x9CCA, + 164073 - 131105: 0x8A66, + 164084 - 131105: 0x9CFB, + 164142 - 131105: 0x9CFC, + 164175 - 131105: 0x9CFE, + 164189 - 131105: 0x8A53, + 164207 - 131105: 0x9CE5, + 164233 - 131105: 0x9D40, + 164271 - 131105: 0x9D41, + 164284 - 131105: 0x9045, + 164359 - 131105: 0x8B73, + 164376 - 131105: 0x97CA, + 164378 - 131105: 0x9D42, + 164438 - 131105: 0x8A61, + 164476 - 131105: 0x8BAE, + 164507 - 131105: 0x8AD2, + 164557 - 131105: 0x8BA2, + 164578 - 131105: 0x9DF2, + 164614 - 131105: 0x9D43, + 164632 - 131105: 0x9CDF, + 164655 - 131105: 0x9D44, + 164666 - 131105: 0x8ECA, + 164709 - 131105: 0x904E, + 164717 - 131105: 0x8EB3, + 164733 - 131105: 0x9FF5, + 164746 - 131105: 0x9D45, + 164882 - 131105: 0x904F, + 164968 - 131105: 0x9D47, + 164972 - 131105: 0x89CA, + 164979 - 131105: 0x9CB5, + 164994 - 131105: 0xFBFE, + 165121 - 131105: 0x905E, + 165180 - 131105: 0x9063, + 165181 - 131105: 0x9057, + 165228 - 131105: 0x9066, + 165352 - 131105: 0x9BC0, + 165364 - 131105: 0xFCE5, + 165376 - 131105: 0x9162, + 165387 - 131105: 0x9067, + 165413 - 131105: 0x8FA1, + 165435 - 131105: 0x8FA2, + 165546 - 131105: 0x9D48, + 165547 - 131105: 0xFAD3, + 165554 - 131105: 0x8D4F, + 165564 - 131105: 0x905D, + 165592 - 131105: 0x90B9, + 165606 - 131105: 0x906B, + 165647 - 131105: 0x8C5C, + 165651 - 131105: 0x9069, + 165892 - 131105: 0xFE57, + 165931 - 131105: 0xFE55, + 166157 - 131105: 0x87A6, + 166195 - 131105: 0x9073, + 166216 - 131105: 0x9BEF, + 166217 - 131105: 0x9CF0, + 166230 - 131105: 0x9D4B, + 166244 - 131105: 0xFED9, + 166248 - 131105: 0xFEDA, + 166252 - 131105: 0x91E0, + 166253 - 131105: 0x8D43, + 166270 - 131105: 0x91D8, + 166281 - 131105: 0x9646, + 166312 - 131105: 0x9360, + 166314 - 131105: 0xFA53, + 166315 - 131105: 0x9CD3, + 166328 - 131105: 0x9D4E, + 166332 - 131105: 0xFB40, + 166336 - 131105: 0x8DE2, + 166364 - 131105: 0x9442, + 166366 - 131105: 0x9056, + 166369 - 131105: 0x9865, + 166371 - 131105: 0x8C6C, + 166372 - 131105: 0xFA4A, + 166375 - 131105: 0x9D50, + 166376 - 131105: 0x9D52, + 166393 - 131105: 0x95AF, + 166394 - 131105: 0x975A, + 166395 - 131105: 0x9349, + 166396 - 131105: 0x9747, + 166415 - 131105: 0xA0F4, + 166422 - 131105: 0x9778, + 166437 - 131105: 0x8FCF, + 166441 - 131105: 0xFC60, + 166450 - 131105: 0x8C4E, + 166454 - 131105: 0xFC56, + 166468 - 131105: 0x91DC, + 166469 - 131105: 0x9661, + 166470 - 131105: 0x92EC, + 166471 - 131105: 0x935D, + 166472 - 131105: 0x8EDE, + 166473 - 131105: 0x96FE, + 166474 - 131105: 0xFD4F, + 166475 - 131105: 0x95DE, + 166489 - 131105: 0x98B0, + 166490 - 131105: 0xA040, + 166529 - 131105: 0x97BD, + 166530 - 131105: 0x977D, + 166531 - 131105: 0x97F5, + 166554 - 131105: 0x9BAC, + 166555 - 131105: 0xFADA, + 166556 - 131105: 0x92C2, + 166592 - 131105: 0x97B1, + 166598 - 131105: 0x907B, + 166603 - 131105: 0x93FE, + 166604 - 131105: 0x947B, + 166606 - 131105: 0x9777, + 166622 - 131105: 0xFABE, + 166623 - 131105: 0xFD43, + 166624 - 131105: 0x90C6, + 166625 - 131105: 0x90A4, + 166626 - 131105: 0x90A8, + 166627 - 131105: 0x94A9, + 166629 - 131105: 0x90A9, + 166634 - 131105: 0x8C65, + 166652 - 131105: 0x95E0, + 166668 - 131105: 0x907D, + 166675 - 131105: 0x9265, + 166689 - 131105: 0xFDBA, + 166690 - 131105: 0x93C4, + 166699 - 131105: 0xFEED, + 166700 - 131105: 0x9DAB, + 166701 - 131105: 0xA0E3, + 166703 - 131105: 0x9648, + 166726 - 131105: 0x9D53, + 166732 - 131105: 0x8AA9, + 166734 - 131105: 0x9BC5, + 166736 - 131105: 0x965D, + 166755 - 131105: 0x975F, + 166756 - 131105: 0x965F, + 166757 - 131105: 0x966E, + 166758 - 131105: 0xFB5D, + 166764 - 131105: 0x9DB1, + 166799 - 131105: 0xFEA3, + 166809 - 131105: 0x9DB2, + 166812 - 131105: 0x95AE, + 166813 - 131105: 0xFCA3, + 166841 - 131105: 0x8769, + 166850 - 131105: 0xA0A2, + 166853 - 131105: 0x9655, + 166868 - 131105: 0x9D54, + 166871 - 131105: 0x9341, + 166873 - 131105: 0x95AD, + 166874 - 131105: 0x91D5, + 166887 - 131105: 0x977A, + 166888 - 131105: 0xFDFC, + 166889 - 131105: 0x8E47, + 166890 - 131105: 0x93FD, + 166891 - 131105: 0x90A5, + 166892 - 131105: 0x90AC, + 166901 - 131105: 0x95AC, + 166911 - 131105: 0x90AE, + 166915 - 131105: 0xFEA5, + 166921 - 131105: 0x9D56, + 166940 - 131105: 0x97E3, + 166941 - 131105: 0x95E2, + 166947 - 131105: 0x9466, + 166950 - 131105: 0x9647, + 166955 - 131105: 0x91B8, + 166960 - 131105: 0x9CEC, + 166969 - 131105: 0x90AD, + 166971 - 131105: 0x95E3, + 167114 - 131105: 0x8B4F, + 167117 - 131105: 0x8AE3, + 167122 - 131105: 0x8B4D, + 167220 - 131105: 0x95EA, + 167321 - 131105: 0x8B4E, + 167353 - 131105: 0x8CC1, + 167439 - 131105: 0x8BED, + 167478 - 131105: 0x91D9, + 167481 - 131105: 0xA0A4, + 167525 - 131105: 0x95F5, + 167526 - 131105: 0x95F4, + 167575 - 131105: 0x9FB3, + 167596 - 131105: 0xFEAF, + 167602 - 131105: 0xFE72, + 167603 - 131105: 0x927A, + 167641 - 131105: 0xFEAC, + 167655 - 131105: 0x95F3, + 167877 - 131105: 0x9D58, + 168057 - 131105: 0x8D46, + 168072 - 131105: 0x9372, + 168075 - 131105: 0x91C5, + 168083 - 131105: 0x9642, + 168111 - 131105: 0x90CD, + 168112 - 131105: 0x95FE, + 168113 - 131105: 0x9159, + 168128 - 131105: 0x9C65, + 168164 - 131105: 0x97CC, + 168165 - 131105: 0x90CE, + 168172 - 131105: 0x9D59, + 168173 - 131105: 0xFCF5, + 168205 - 131105: 0xFEFD, + 168208 - 131105: 0x9D5B, + 168252 - 131105: 0x9D5C, + 168269 - 131105: 0x937E, + 168283 - 131105: 0x98AC, + 168286 - 131105: 0x9D5E, + 168304 - 131105: 0xFDD0, + 168348 - 131105: 0xFD60, + 168360 - 131105: 0x9CCF, + 168405 - 131105: 0x90DD, + 168427 - 131105: 0x90E0, + 168989 - 131105: 0x90F3, + 168992 - 131105: 0x98B1, + 169011 - 131105: 0x90F0, + 169023 - 131105: 0x93BD, + 169032 - 131105: 0x95B7, + 169168 - 131105: 0x9F46, + 169177 - 131105: 0x8E4B, + 169178 - 131105: 0x9658, + 169189 - 131105: 0x8A4C, + 169191 - 131105: 0x9D63, + 169374 - 131105: 0x9ECF, + 169392 - 131105: 0x9D65, + 169400 - 131105: 0x9D66, + 169431 - 131105: 0x965A, + 169449 - 131105: 0x9D64, + 169460 - 131105: 0x8A6C, + 169760 - 131105: 0x8AD9, + 169778 - 131105: 0x9D67, + 169940 - 131105: 0x8A70, + 170000 - 131105: 0x8BF3, + 170071 - 131105: 0x9150, + 170148 - 131105: 0x9CC1, + 170193 - 131105: 0x9D68, + 170218 - 131105: 0x93A7, + 170225 - 131105: 0x9674, + 170234 - 131105: 0x8CFD, + 170243 - 131105: 0xA0EF, + 170245 - 131105: 0x9151, + 170287 - 131105: 0x96C1, + 170309 - 131105: 0x8777, + 170311 - 131105: 0x8C64, + 170312 - 131105: 0x9676, + 170313 - 131105: 0x9D69, + 170333 - 131105: 0xFCA4, + 170346 - 131105: 0x9D6A, + 170397 - 131105: 0x924E, + 170435 - 131105: 0x9D6B, + 170441 - 131105: 0x9BC1, + 170536 - 131105: 0x9D6C, + 170573 - 131105: 0x8A65, + 170757 - 131105: 0x915D, + 170766 - 131105: 0x9D6D, + 170965 - 131105: 0x915A, + 171123 - 131105: 0x8C42, + 171181 - 131105: 0x9CC0, + 171326 - 131105: 0x916A, + 171354 - 131105: 0x9D6E, + 171388 - 131105: 0x9EA6, + 171416 - 131105: 0x9DCD, + 171419 - 131105: 0x9D6F, + 171510 - 131105: 0x89BB, + 171526 - 131105: 0x9EF9, + 171565 - 131105: 0x96B4, + 171624 - 131105: 0x9172, + 171692 - 131105: 0x9EC8, + 171696 - 131105: 0x8771, + 171715 - 131105: 0x8B55, + 171768 - 131105: 0x9D71, + 171811 - 131105: 0x9D72, + 171824 - 131105: 0x9ECC, + 171959 - 131105: 0x9174, + 171998 - 131105: 0x9ED0, + 172052 - 131105: 0x905C, + 172167 - 131105: 0x8ED2, + 172217 - 131105: 0x91A8, + 172257 - 131105: 0x9177, + 172269 - 131105: 0x96BF, + 172275 - 131105: 0x96C0, + 172280 - 131105: 0x8FB1, + 172286 - 131105: 0x96B7, + 172295 - 131105: 0x8C55, + 172323 - 131105: 0x9178, + 172339 - 131105: 0x89BE, + 172340 - 131105: 0x917C, + 172368 - 131105: 0xFB77, + 172434 - 131105: 0x9175, + 172435 - 131105: 0x91A3, + 172459 - 131105: 0x9176, + 172468 - 131105: 0x96BE, + 172469 - 131105: 0x8D49, + 172511 - 131105: 0x9179, + 172533 - 131105: 0x96B6, + 172576 - 131105: 0x91A4, + 172595 - 131105: 0x91A6, + 172691 - 131105: 0x9D75, + 172703 - 131105: 0x9052, + 172722 - 131105: 0xA045, + 172724 - 131105: 0x91A9, + 172726 - 131105: 0x98AA, + 172730 - 131105: 0x8C5F, + 172733 - 131105: 0x8BAA, + 172767 - 131105: 0x9CDD, + 172799 - 131105: 0x9D77, + 172881 - 131105: 0x8756, + 172969 - 131105: 0x8940, + 173108 - 131105: 0x9EEC, + 173147 - 131105: 0x93AA, + 173510 - 131105: 0x9478, + 173515 - 131105: 0x9D7A, + 173569 - 131105: 0x8AC9, + 173618 - 131105: 0x8B4B, + 173642 - 131105: 0x9FEC, + 173659 - 131105: 0x8AE2, + 173737 - 131105: 0x9E75, +} + +const encode1Low, encode1High = 11904, 40908 + +var encode1 = [...]uint16{ + 11904 - 11904: 0xC8D6, + 11908 - 11904: 0xC8D7, + 11910 - 11904: 0xC8D8, + 11911 - 11904: 0xC8D9, + 11912 - 11904: 0xC8DA, + 11914 - 11904: 0xC8DB, + 11916 - 11904: 0xC8DC, + 11917 - 11904: 0xC8DD, + 11925 - 11904: 0xC8DE, + 11932 - 11904: 0xC8DF, + 11933 - 11904: 0xC8E0, + 11941 - 11904: 0xC8E1, + 11943 - 11904: 0xC8E2, + 11946 - 11904: 0xC8E3, + 11948 - 11904: 0xC8E4, + 11950 - 11904: 0xC8E5, + 11958 - 11904: 0xC8E6, + 11964 - 11904: 0xC8E7, + 11966 - 11904: 0xC8E8, + 11974 - 11904: 0xC8E9, + 11978 - 11904: 0xC8EA, + 11980 - 11904: 0xC8EB, + 11981 - 11904: 0xC8EC, + 11983 - 11904: 0xC8ED, + 11990 - 11904: 0xC8EE, + 11991 - 11904: 0xC8EF, + 11998 - 11904: 0xC8F0, + 12003 - 11904: 0xC8F1, + 12083 - 11904: 0xC6CD, + 12288 - 11904: 0xA140, + 12289 - 11904: 0xA142, + 12290 - 11904: 0xA143, + 12291 - 11904: 0xC6DE, + 12293 - 11904: 0xC6E0, + 12294 - 11904: 0xC6E1, + 12295 - 11904: 0xC6E2, + 12296 - 11904: 0xA171, + 12297 - 11904: 0xA172, + 12298 - 11904: 0xA16D, + 12299 - 11904: 0xA16E, + 12300 - 11904: 0xA175, + 12301 - 11904: 0xA176, + 12302 - 11904: 0xA179, + 12303 - 11904: 0xA17A, + 12304 - 11904: 0xA169, + 12305 - 11904: 0xA16A, + 12306 - 11904: 0xA245, + 12308 - 11904: 0xA165, + 12309 - 11904: 0xA166, + 12317 - 11904: 0xA1A9, + 12318 - 11904: 0xA1AA, + 12321 - 11904: 0xA2C3, + 12322 - 11904: 0xA2C4, + 12323 - 11904: 0xA2C5, + 12324 - 11904: 0xA2C6, + 12325 - 11904: 0xA2C7, + 12326 - 11904: 0xA2C8, + 12327 - 11904: 0xA2C9, + 12328 - 11904: 0xA2CA, + 12329 - 11904: 0xA2CB, + 12353 - 11904: 0xC6E7, + 12354 - 11904: 0xC6E8, + 12355 - 11904: 0xC6E9, + 12356 - 11904: 0xC6EA, + 12357 - 11904: 0xC6EB, + 12358 - 11904: 0xC6EC, + 12359 - 11904: 0xC6ED, + 12360 - 11904: 0xC6EE, + 12361 - 11904: 0xC6EF, + 12362 - 11904: 0xC6F0, + 12363 - 11904: 0xC6F1, + 12364 - 11904: 0xC6F2, + 12365 - 11904: 0xC6F3, + 12366 - 11904: 0xC6F4, + 12367 - 11904: 0xC6F5, + 12368 - 11904: 0xC6F6, + 12369 - 11904: 0xC6F7, + 12370 - 11904: 0xC6F8, + 12371 - 11904: 0xC6F9, + 12372 - 11904: 0xC6FA, + 12373 - 11904: 0xC6FB, + 12374 - 11904: 0xC6FC, + 12375 - 11904: 0xC6FD, + 12376 - 11904: 0xC6FE, + 12377 - 11904: 0xC740, + 12378 - 11904: 0xC741, + 12379 - 11904: 0xC742, + 12380 - 11904: 0xC743, + 12381 - 11904: 0xC744, + 12382 - 11904: 0xC745, + 12383 - 11904: 0xC746, + 12384 - 11904: 0xC747, + 12385 - 11904: 0xC748, + 12386 - 11904: 0xC749, + 12387 - 11904: 0xC74A, + 12388 - 11904: 0xC74B, + 12389 - 11904: 0xC74C, + 12390 - 11904: 0xC74D, + 12391 - 11904: 0xC74E, + 12392 - 11904: 0xC74F, + 12393 - 11904: 0xC750, + 12394 - 11904: 0xC751, + 12395 - 11904: 0xC752, + 12396 - 11904: 0xC753, + 12397 - 11904: 0xC754, + 12398 - 11904: 0xC755, + 12399 - 11904: 0xC756, + 12400 - 11904: 0xC757, + 12401 - 11904: 0xC758, + 12402 - 11904: 0xC759, + 12403 - 11904: 0xC75A, + 12404 - 11904: 0xC75B, + 12405 - 11904: 0xC75C, + 12406 - 11904: 0xC75D, + 12407 - 11904: 0xC75E, + 12408 - 11904: 0xC75F, + 12409 - 11904: 0xC760, + 12410 - 11904: 0xC761, + 12411 - 11904: 0xC762, + 12412 - 11904: 0xC763, + 12413 - 11904: 0xC764, + 12414 - 11904: 0xC765, + 12415 - 11904: 0xC766, + 12416 - 11904: 0xC767, + 12417 - 11904: 0xC768, + 12418 - 11904: 0xC769, + 12419 - 11904: 0xC76A, + 12420 - 11904: 0xC76B, + 12421 - 11904: 0xC76C, + 12422 - 11904: 0xC76D, + 12423 - 11904: 0xC76E, + 12424 - 11904: 0xC76F, + 12425 - 11904: 0xC770, + 12426 - 11904: 0xC771, + 12427 - 11904: 0xC772, + 12428 - 11904: 0xC773, + 12429 - 11904: 0xC774, + 12430 - 11904: 0xC775, + 12431 - 11904: 0xC776, + 12432 - 11904: 0xC777, + 12433 - 11904: 0xC778, + 12434 - 11904: 0xC779, + 12435 - 11904: 0xC77A, + 12443 - 11904: 0xC8D4, + 12444 - 11904: 0xC8D5, + 12445 - 11904: 0xC6DC, + 12446 - 11904: 0xC6DD, + 12449 - 11904: 0xC77B, + 12450 - 11904: 0xC77C, + 12451 - 11904: 0xC77D, + 12452 - 11904: 0xC77E, + 12453 - 11904: 0xC7A1, + 12454 - 11904: 0xC7A2, + 12455 - 11904: 0xC7A3, + 12456 - 11904: 0xC7A4, + 12457 - 11904: 0xC7A5, + 12458 - 11904: 0xC7A6, + 12459 - 11904: 0xC7A7, + 12460 - 11904: 0xC7A8, + 12461 - 11904: 0xC7A9, + 12462 - 11904: 0xC7AA, + 12463 - 11904: 0xC7AB, + 12464 - 11904: 0xC7AC, + 12465 - 11904: 0xC7AD, + 12466 - 11904: 0xC7AE, + 12467 - 11904: 0xC7AF, + 12468 - 11904: 0xC7B0, + 12469 - 11904: 0xC7B1, + 12470 - 11904: 0xC7B2, + 12471 - 11904: 0xC7B3, + 12472 - 11904: 0xC7B4, + 12473 - 11904: 0xC7B5, + 12474 - 11904: 0xC7B6, + 12475 - 11904: 0xC7B7, + 12476 - 11904: 0xC7B8, + 12477 - 11904: 0xC7B9, + 12478 - 11904: 0xC7BA, + 12479 - 11904: 0xC7BB, + 12480 - 11904: 0xC7BC, + 12481 - 11904: 0xC7BD, + 12482 - 11904: 0xC7BE, + 12483 - 11904: 0xC7BF, + 12484 - 11904: 0xC7C0, + 12485 - 11904: 0xC7C1, + 12486 - 11904: 0xC7C2, + 12487 - 11904: 0xC7C3, + 12488 - 11904: 0xC7C4, + 12489 - 11904: 0xC7C5, + 12490 - 11904: 0xC7C6, + 12491 - 11904: 0xC7C7, + 12492 - 11904: 0xC7C8, + 12493 - 11904: 0xC7C9, + 12494 - 11904: 0xC7CA, + 12495 - 11904: 0xC7CB, + 12496 - 11904: 0xC7CC, + 12497 - 11904: 0xC7CD, + 12498 - 11904: 0xC7CE, + 12499 - 11904: 0xC7CF, + 12500 - 11904: 0xC7D0, + 12501 - 11904: 0xC7D1, + 12502 - 11904: 0xC7D2, + 12503 - 11904: 0xC7D3, + 12504 - 11904: 0xC7D4, + 12505 - 11904: 0xC7D5, + 12506 - 11904: 0xC7D6, + 12507 - 11904: 0xC7D7, + 12508 - 11904: 0xC7D8, + 12509 - 11904: 0xC7D9, + 12510 - 11904: 0xC7DA, + 12511 - 11904: 0xC7DB, + 12512 - 11904: 0xC7DC, + 12513 - 11904: 0xC7DD, + 12514 - 11904: 0xC7DE, + 12515 - 11904: 0xC7DF, + 12516 - 11904: 0xC7E0, + 12517 - 11904: 0xC7E1, + 12518 - 11904: 0xC7E2, + 12519 - 11904: 0xC7E3, + 12520 - 11904: 0xC7E4, + 12521 - 11904: 0xC7E5, + 12522 - 11904: 0xC7E6, + 12523 - 11904: 0xC7E7, + 12524 - 11904: 0xC7E8, + 12525 - 11904: 0xC7E9, + 12526 - 11904: 0xC7EA, + 12527 - 11904: 0xC7EB, + 12528 - 11904: 0xC7EC, + 12529 - 11904: 0xC7ED, + 12530 - 11904: 0xC7EE, + 12531 - 11904: 0xC7EF, + 12532 - 11904: 0xC7F0, + 12533 - 11904: 0xC7F1, + 12534 - 11904: 0xC7F2, + 12540 - 11904: 0xC6E3, + 12541 - 11904: 0xC6DA, + 12542 - 11904: 0xC6DB, + 12549 - 11904: 0xA374, + 12550 - 11904: 0xA375, + 12551 - 11904: 0xA376, + 12552 - 11904: 0xA377, + 12553 - 11904: 0xA378, + 12554 - 11904: 0xA379, + 12555 - 11904: 0xA37A, + 12556 - 11904: 0xA37B, + 12557 - 11904: 0xA37C, + 12558 - 11904: 0xA37D, + 12559 - 11904: 0xA37E, + 12560 - 11904: 0xA3A1, + 12561 - 11904: 0xA3A2, + 12562 - 11904: 0xA3A3, + 12563 - 11904: 0xA3A4, + 12564 - 11904: 0xA3A5, + 12565 - 11904: 0xA3A6, + 12566 - 11904: 0xA3A7, + 12567 - 11904: 0xA3A8, + 12568 - 11904: 0xA3A9, + 12569 - 11904: 0xA3AA, + 12570 - 11904: 0xA3AB, + 12571 - 11904: 0xA3AC, + 12572 - 11904: 0xA3AD, + 12573 - 11904: 0xA3AE, + 12574 - 11904: 0xA3AF, + 12575 - 11904: 0xA3B0, + 12576 - 11904: 0xA3B1, + 12577 - 11904: 0xA3B2, + 12578 - 11904: 0xA3B3, + 12579 - 11904: 0xA3B4, + 12580 - 11904: 0xA3B5, + 12581 - 11904: 0xA3B6, + 12582 - 11904: 0xA3B7, + 12583 - 11904: 0xA3B8, + 12584 - 11904: 0xA3B9, + 12585 - 11904: 0xA3BA, + 12736 - 11904: 0x8840, + 12737 - 11904: 0x8841, + 12738 - 11904: 0x8842, + 12739 - 11904: 0x8843, + 12740 - 11904: 0x8844, + 12741 - 11904: 0x8846, + 12742 - 11904: 0x8849, + 12743 - 11904: 0x884A, + 12744 - 11904: 0x884D, + 12745 - 11904: 0x884F, + 12746 - 11904: 0x8850, + 12747 - 11904: 0x8851, + 12748 - 11904: 0x8852, + 12749 - 11904: 0x8854, + 12750 - 11904: 0x8855, + 12751 - 11904: 0xC879, + 12849 - 11904: 0xC8D1, + 12963 - 11904: 0xA1C0, + 13198 - 11904: 0xA255, + 13199 - 11904: 0xA256, + 13212 - 11904: 0xA250, + 13213 - 11904: 0xA251, + 13214 - 11904: 0xA252, + 13217 - 11904: 0xA254, + 13252 - 11904: 0xA257, + 13262 - 11904: 0xA253, + 13265 - 11904: 0xA1EB, + 13266 - 11904: 0xA1EA, + 13269 - 11904: 0xA24F, + 13365 - 11904: 0x9277, + 13376 - 11904: 0x96DF, + 13386 - 11904: 0x8CF4, + 13388 - 11904: 0x89D5, + 13412 - 11904: 0x93CD, + 13427 - 11904: 0x9BDF, + 13434 - 11904: 0xFA68, + 13437 - 11904: 0x89DA, + 13438 - 11904: 0x8F59, + 13459 - 11904: 0x89DB, + 13462 - 11904: 0x8F5D, + 13477 - 11904: 0x89DC, + 13487 - 11904: 0x96F7, + 13500 - 11904: 0x8ADA, + 13505 - 11904: 0x8BDC, + 13512 - 11904: 0x97DB, + 13535 - 11904: 0x9E53, + 13540 - 11904: 0x9DAA, + 13542 - 11904: 0x87BE, + 13563 - 11904: 0x9BEA, + 13574 - 11904: 0x8A6E, + 13630 - 11904: 0x8BC8, + 13649 - 11904: 0x89E8, + 13651 - 11904: 0x89EA, + 13657 - 11904: 0x8C4B, + 13665 - 11904: 0xFB70, + 13677 - 11904: 0x89ED, + 13680 - 11904: 0x94DD, + 13682 - 11904: 0x89EE, + 13687 - 11904: 0x9EB4, + 13688 - 11904: 0x8AD3, + 13700 - 11904: 0x92DB, + 13719 - 11904: 0x94DB, + 13720 - 11904: 0x89F9, + 13729 - 11904: 0xFB7A, + 13733 - 11904: 0x89FB, + 13741 - 11904: 0x9EFC, + 13759 - 11904: 0x89FC, + 13761 - 11904: 0x89BF, + 13765 - 11904: 0x89FE, + 13767 - 11904: 0x89E6, + 13770 - 11904: 0x9D46, + 13774 - 11904: 0x9DEE, + 13778 - 11904: 0xA07E, + 13782 - 11904: 0xA068, + 13787 - 11904: 0x98E9, + 13789 - 11904: 0x8B68, + 13809 - 11904: 0x8DFD, + 13810 - 11904: 0x8BBE, + 13811 - 11904: 0x9FD9, + 13819 - 11904: 0x8AEB, + 13822 - 11904: 0x9FD7, + 13833 - 11904: 0x8B6A, + 13848 - 11904: 0x9C5C, + 13850 - 11904: 0x8BB1, + 13859 - 11904: 0xFB5E, + 13861 - 11904: 0x8770, + 13869 - 11904: 0x9DF3, + 13877 - 11904: 0xA0D0, + 13881 - 11904: 0xFC66, + 13886 - 11904: 0x92E9, + 13895 - 11904: 0x9AEC, + 13896 - 11904: 0x8FAB, + 13897 - 11904: 0xFA48, + 13902 - 11904: 0x8E45, + 13919 - 11904: 0x9C6F, + 13921 - 11904: 0x8D5C, + 13946 - 11904: 0x9EDE, + 13953 - 11904: 0x89EF, + 13978 - 11904: 0x96E9, + 13989 - 11904: 0x9EBB, + 13994 - 11904: 0x94DE, + 13996 - 11904: 0x9EB8, + 14000 - 11904: 0x97BA, + 14001 - 11904: 0xFB65, + 14005 - 11904: 0x95D6, + 14009 - 11904: 0x9CBB, + 14012 - 11904: 0x97DA, + 14017 - 11904: 0x8F45, + 14019 - 11904: 0xFB7D, + 14020 - 11904: 0x9158, + 14021 - 11904: 0xFE64, + 14023 - 11904: 0x9856, + 14024 - 11904: 0x9B4D, + 14035 - 11904: 0x935B, + 14036 - 11904: 0x95C7, + 14038 - 11904: 0x97E7, + 14045 - 11904: 0x9359, + 14049 - 11904: 0x91F5, + 14050 - 11904: 0x97B8, + 14053 - 11904: 0xFDA2, + 14054 - 11904: 0xFBB6, + 14069 - 11904: 0x92FA, + 14081 - 11904: 0x9357, + 14083 - 11904: 0x8BA6, + 14088 - 11904: 0xFBB9, + 14090 - 11904: 0x97B0, + 14093 - 11904: 0xFDC4, + 14108 - 11904: 0x9CA1, + 14114 - 11904: 0x91F2, + 14115 - 11904: 0x91F9, + 14117 - 11904: 0x8FF1, + 14124 - 11904: 0x9745, + 14125 - 11904: 0x9853, + 14128 - 11904: 0xFE78, + 14130 - 11904: 0xFBC1, + 14131 - 11904: 0x9251, + 14138 - 11904: 0x9DAD, + 14144 - 11904: 0xFD6C, + 14147 - 11904: 0xFA6B, + 14178 - 11904: 0x9BC2, + 14191 - 11904: 0x9A7B, + 14231 - 11904: 0x8B60, + 14240 - 11904: 0x934B, + 14265 - 11904: 0x9ABD, + 14270 - 11904: 0x91B7, + 14294 - 11904: 0x8D4B, + 14322 - 11904: 0x95B4, + 14328 - 11904: 0xFEC5, + 14331 - 11904: 0x9EF0, + 14351 - 11904: 0x8D64, + 14361 - 11904: 0x9269, + 14368 - 11904: 0x8D67, + 14381 - 11904: 0xFBEA, + 14390 - 11904: 0xFBEF, + 14392 - 11904: 0x8D68, + 14435 - 11904: 0x93EB, + 14453 - 11904: 0x877A, + 14496 - 11904: 0xFC42, + 14531 - 11904: 0x9166, + 14540 - 11904: 0xFACD, + 14545 - 11904: 0x93DD, + 14548 - 11904: 0x8D52, + 14586 - 11904: 0x8BCC, + 14600 - 11904: 0x8D6D, + 14612 - 11904: 0x8D6E, + 14631 - 11904: 0x96A8, + 14642 - 11904: 0xFCA6, + 14655 - 11904: 0x8D6F, + 14669 - 11904: 0x8D70, + 14691 - 11904: 0xFC64, + 14712 - 11904: 0x8CF3, + 14720 - 11904: 0x9060, + 14729 - 11904: 0x8D74, + 14730 - 11904: 0x97C3, + 14738 - 11904: 0x8AD0, + 14745 - 11904: 0x9274, + 14747 - 11904: 0x9BBE, + 14753 - 11904: 0x9CC8, + 14756 - 11904: 0x9CBA, + 14776 - 11904: 0x8D78, + 14812 - 11904: 0x9EB9, + 14818 - 11904: 0x955A, + 14821 - 11904: 0x91B4, + 14828 - 11904: 0x8A48, + 14840 - 11904: 0x8D7D, + 14843 - 11904: 0x8A7D, + 14846 - 11904: 0x8AC2, + 14849 - 11904: 0xFD4A, + 14851 - 11904: 0x8DA1, + 14854 - 11904: 0x8AD1, + 14871 - 11904: 0xFCB4, + 14872 - 11904: 0x8B47, + 14889 - 11904: 0x93A4, + 14890 - 11904: 0x9EDA, + 14900 - 11904: 0x8A51, + 14923 - 11904: 0x8DA6, + 14930 - 11904: 0x9EC5, + 14935 - 11904: 0xFCC4, + 14940 - 11904: 0xA078, + 14942 - 11904: 0x94B5, + 14950 - 11904: 0xFCC2, + 14951 - 11904: 0x8A6B, + 14999 - 11904: 0x8DAB, + 15019 - 11904: 0xFAE8, + 15037 - 11904: 0x8DAD, + 15070 - 11904: 0xFC49, + 15072 - 11904: 0x93C1, + 15088 - 11904: 0x906F, + 15090 - 11904: 0x8DB0, + 15093 - 11904: 0x87A2, + 15099 - 11904: 0x947E, + 15118 - 11904: 0x90FA, + 15129 - 11904: 0x9479, + 15138 - 11904: 0x8DB2, + 15147 - 11904: 0xFCEE, + 15161 - 11904: 0x997B, + 15170 - 11904: 0x8DB4, + 15192 - 11904: 0x8DB7, + 15200 - 11904: 0x91B3, + 15217 - 11904: 0x8DBB, + 15218 - 11904: 0x8DBA, + 15227 - 11904: 0x8DBC, + 15228 - 11904: 0x9044, + 15232 - 11904: 0xFD4C, + 15253 - 11904: 0x874B, + 15254 - 11904: 0x93E4, + 15257 - 11904: 0x93E0, + 15265 - 11904: 0xFD53, + 15292 - 11904: 0x8DC3, + 15294 - 11904: 0x9BB8, + 15298 - 11904: 0xFBF0, + 15300 - 11904: 0x93E9, + 15319 - 11904: 0x93F6, + 15325 - 11904: 0x8DC5, + 15340 - 11904: 0x8DCA, + 15346 - 11904: 0x8DCC, + 15347 - 11904: 0xFD5D, + 15348 - 11904: 0x93B5, + 15373 - 11904: 0xFD61, + 15377 - 11904: 0x9CF8, + 15381 - 11904: 0x9252, + 15384 - 11904: 0xA0E8, + 15444 - 11904: 0x9CA5, + 15499 - 11904: 0x8C56, + 15563 - 11904: 0x8DD6, + 15565 - 11904: 0x97C0, + 15569 - 11904: 0xA0DE, + 15574 - 11904: 0x97D2, + 15580 - 11904: 0xFAA5, + 15595 - 11904: 0xFDA3, + 15599 - 11904: 0x8DDB, + 15634 - 11904: 0x8CEA, + 15635 - 11904: 0x8EAF, + 15645 - 11904: 0x91B5, + 15666 - 11904: 0xFD49, + 15675 - 11904: 0xFDD1, + 15686 - 11904: 0x8DEB, + 15692 - 11904: 0x97C6, + 15694 - 11904: 0xFDCE, + 15697 - 11904: 0x90FC, + 15711 - 11904: 0xFC59, + 15714 - 11904: 0x96D6, + 15721 - 11904: 0x97C5, + 15722 - 11904: 0x8DEF, + 15727 - 11904: 0x97D7, + 15733 - 11904: 0x8DF0, + 15741 - 11904: 0x96A6, + 15749 - 11904: 0xFBBF, + 15752 - 11904: 0x8CDF, + 15754 - 11904: 0x8DF3, + 15759 - 11904: 0x9449, + 15761 - 11904: 0x8DF5, + 15781 - 11904: 0x9872, + 15789 - 11904: 0x8E6B, + 15796 - 11904: 0xFAFD, + 15807 - 11904: 0x8F50, + 15814 - 11904: 0x9DCC, + 15815 - 11904: 0xFC65, + 15817 - 11904: 0x8C44, + 15820 - 11904: 0x996E, + 15821 - 11904: 0x94A1, + 15827 - 11904: 0x8F63, + 15835 - 11904: 0xA0DA, + 15847 - 11904: 0x9253, + 15848 - 11904: 0xFDE9, + 15851 - 11904: 0x9DB5, + 15859 - 11904: 0x9879, + 15860 - 11904: 0x876A, + 15863 - 11904: 0x9D5D, + 15868 - 11904: 0x8D63, + 15869 - 11904: 0x9669, + 15878 - 11904: 0x9F70, + 15936 - 11904: 0xFC6A, + 15939 - 11904: 0x8AC7, + 15944 - 11904: 0x89D7, + 15957 - 11904: 0xFE4D, + 15988 - 11904: 0x9EDD, + 16040 - 11904: 0xFEFB, + 16041 - 11904: 0x98BC, + 16042 - 11904: 0xFACC, + 16045 - 11904: 0x95B0, + 16049 - 11904: 0x9464, + 16056 - 11904: 0x936F, + 16063 - 11904: 0x94B9, + 16066 - 11904: 0x95EC, + 16071 - 11904: 0x91EE, + 16074 - 11904: 0x98C3, + 16076 - 11904: 0x95F6, + 16080 - 11904: 0x8FFD, + 16081 - 11904: 0x98C5, + 16086 - 11904: 0x9766, + 16087 - 11904: 0xFE6E, + 16090 - 11904: 0x97DD, + 16091 - 11904: 0x8CAA, + 16094 - 11904: 0x92D2, + 16097 - 11904: 0x9761, + 16098 - 11904: 0x98CB, + 16103 - 11904: 0x95F0, + 16105 - 11904: 0x975D, + 16107 - 11904: 0x91E3, + 16108 - 11904: 0x877E, + 16112 - 11904: 0x98CC, + 16115 - 11904: 0x9469, + 16116 - 11904: 0x98CD, + 16122 - 11904: 0x98CE, + 16124 - 11904: 0x95FC, + 16127 - 11904: 0x94A3, + 16128 - 11904: 0x9662, + 16132 - 11904: 0xFEB6, + 16134 - 11904: 0x9463, + 16135 - 11904: 0x8D47, + 16142 - 11904: 0x98D0, + 16211 - 11904: 0x98D1, + 16216 - 11904: 0x9475, + 16217 - 11904: 0xFAE0, + 16227 - 11904: 0x9472, + 16252 - 11904: 0x98D6, + 16275 - 11904: 0x8AF0, + 16320 - 11904: 0x98D9, + 16328 - 11904: 0x8D5A, + 16343 - 11904: 0x98DB, + 16348 - 11904: 0x98DD, + 16357 - 11904: 0x98A8, + 16365 - 11904: 0x8A6D, + 16377 - 11904: 0x8AFB, + 16378 - 11904: 0x8AAE, + 16388 - 11904: 0xFBC9, + 16393 - 11904: 0x8C5D, + 16413 - 11904: 0x98E4, + 16441 - 11904: 0x98E6, + 16453 - 11904: 0x98E8, + 16467 - 11904: 0x8A4D, + 16471 - 11904: 0x9257, + 16482 - 11904: 0x95DF, + 16485 - 11904: 0xA0AC, + 16490 - 11904: 0x98EB, + 16495 - 11904: 0x98EC, + 16497 - 11904: 0x8CC3, + 16552 - 11904: 0x98F4, + 16564 - 11904: 0x87D9, + 16571 - 11904: 0x8AB8, + 16575 - 11904: 0x9EE7, + 16584 - 11904: 0x94BC, + 16600 - 11904: 0xFCD1, + 16607 - 11904: 0x9CC6, + 16632 - 11904: 0x8D4A, + 16634 - 11904: 0x9E7E, + 16642 - 11904: 0x8D44, + 16643 - 11904: 0x98FE, + 16644 - 11904: 0xFDE8, + 16649 - 11904: 0x9940, + 16654 - 11904: 0x94C9, + 16689 - 11904: 0x87C6, + 16690 - 11904: 0x94D3, + 16743 - 11904: 0x9946, + 16748 - 11904: 0x90C0, + 16750 - 11904: 0x94D1, + 16764 - 11904: 0x8D4E, + 16767 - 11904: 0x9573, + 16769 - 11904: 0x87CE, + 16784 - 11904: 0x93C2, + 16818 - 11904: 0x9948, + 16836 - 11904: 0x994B, + 16842 - 11904: 0x8E55, + 16847 - 11904: 0x994E, + 16859 - 11904: 0x8EFE, + 16877 - 11904: 0x8D5F, + 16879 - 11904: 0x8E59, + 16889 - 11904: 0x94EC, + 16913 - 11904: 0x94EF, + 16931 - 11904: 0x8C60, + 16960 - 11904: 0x8F74, + 16992 - 11904: 0x9955, + 17002 - 11904: 0x9544, + 17014 - 11904: 0x8CCB, + 17018 - 11904: 0x9956, + 17036 - 11904: 0x9959, + 17044 - 11904: 0x995B, + 17058 - 11904: 0x8CC4, + 17077 - 11904: 0xFA45, + 17081 - 11904: 0x90B7, + 17084 - 11904: 0x9743, + 17140 - 11904: 0x95CD, + 17147 - 11904: 0x97C9, + 17148 - 11904: 0xFD50, + 17162 - 11904: 0x87AA, + 17195 - 11904: 0x8EB9, + 17262 - 11904: 0x95C6, + 17303 - 11904: 0x9967, + 17306 - 11904: 0x8CE3, + 17338 - 11904: 0x8AB9, + 17345 - 11904: 0x8DFC, + 17369 - 11904: 0x8A76, + 17375 - 11904: 0x9D51, + 17389 - 11904: 0x9973, + 17392 - 11904: 0x8740, + 17394 - 11904: 0x9D4F, + 17409 - 11904: 0x997A, + 17410 - 11904: 0x9564, + 17427 - 11904: 0x99A1, + 17445 - 11904: 0x99A5, + 17453 - 11904: 0x99A7, + 17530 - 11904: 0x8EED, + 17551 - 11904: 0x99AD, + 17553 - 11904: 0xC87E, + 17567 - 11904: 0x946E, + 17568 - 11904: 0x8F70, + 17570 - 11904: 0xFAD0, + 17584 - 11904: 0x99B3, + 17591 - 11904: 0xA053, + 17597 - 11904: 0x8D5E, + 17600 - 11904: 0x965C, + 17603 - 11904: 0x8CE0, + 17605 - 11904: 0xFD7A, + 17614 - 11904: 0x97FE, + 17629 - 11904: 0x92BD, + 17630 - 11904: 0x8D5D, + 17631 - 11904: 0x97FD, + 17633 - 11904: 0x87DB, + 17636 - 11904: 0x8F64, + 17641 - 11904: 0xFCF7, + 17642 - 11904: 0x9562, + 17643 - 11904: 0x97CD, + 17644 - 11904: 0x9E64, + 17652 - 11904: 0x924C, + 17667 - 11904: 0x8EC9, + 17668 - 11904: 0x99BC, + 17673 - 11904: 0x9DA5, + 17675 - 11904: 0x8F54, + 17686 - 11904: 0x8F7C, + 17691 - 11904: 0x8D55, + 17693 - 11904: 0x8EA2, + 17703 - 11904: 0x8F7A, + 17710 - 11904: 0x97AE, + 17715 - 11904: 0x96C8, + 17718 - 11904: 0x8CE4, + 17723 - 11904: 0x99C3, + 17725 - 11904: 0x90D6, + 17727 - 11904: 0x9CBE, + 17731 - 11904: 0x8F76, + 17745 - 11904: 0x9470, + 17746 - 11904: 0xFB4B, + 17749 - 11904: 0xFDCA, + 17752 - 11904: 0x8CEF, + 17756 - 11904: 0x8EC7, + 17761 - 11904: 0x8D54, + 17762 - 11904: 0xA0F9, + 17770 - 11904: 0x8FA9, + 17773 - 11904: 0x8D51, + 17783 - 11904: 0x99C7, + 17784 - 11904: 0x8744, + 17797 - 11904: 0x90D7, + 17830 - 11904: 0x8743, + 17843 - 11904: 0x8747, + 17882 - 11904: 0x8758, + 17897 - 11904: 0x9EDF, + 17898 - 11904: 0x8D59, + 17923 - 11904: 0x8742, + 17926 - 11904: 0x99CE, + 17935 - 11904: 0x8FBA, + 17941 - 11904: 0x8FEB, + 17943 - 11904: 0x99CF, + 18011 - 11904: 0x8FC2, + 18042 - 11904: 0x92C9, + 18048 - 11904: 0x97DC, + 18081 - 11904: 0x875D, + 18094 - 11904: 0x87CC, + 18107 - 11904: 0x8D45, + 18127 - 11904: 0x95B3, + 18128 - 11904: 0x9C79, + 18165 - 11904: 0x95B2, + 18167 - 11904: 0x8D4C, + 18195 - 11904: 0x8FDB, + 18200 - 11904: 0x9BE3, + 18230 - 11904: 0x874C, + 18244 - 11904: 0x874D, + 18254 - 11904: 0x9E7A, + 18255 - 11904: 0x8757, + 18300 - 11904: 0x9BEE, + 18328 - 11904: 0x99DE, + 18342 - 11904: 0xFAFA, + 18389 - 11904: 0x8A52, + 18413 - 11904: 0x99E1, + 18420 - 11904: 0x8A67, + 18432 - 11904: 0x8BB5, + 18443 - 11904: 0x8AAC, + 18487 - 11904: 0x99E9, + 18525 - 11904: 0xFBCA, + 18545 - 11904: 0x97DE, + 18587 - 11904: 0x95D1, + 18605 - 11904: 0x99F5, + 18606 - 11904: 0xFC4A, + 18640 - 11904: 0x9BA9, + 18653 - 11904: 0xFBDC, + 18669 - 11904: 0xFE56, + 18675 - 11904: 0x9EA4, + 18682 - 11904: 0x9D49, + 18694 - 11904: 0x95DB, + 18705 - 11904: 0x89C5, + 18718 - 11904: 0x99F8, + 18725 - 11904: 0x9664, + 18730 - 11904: 0x9055, + 18733 - 11904: 0x96D4, + 18735 - 11904: 0x87C4, + 18736 - 11904: 0x87AE, + 18741 - 11904: 0x977C, + 18748 - 11904: 0x964D, + 18750 - 11904: 0x97E1, + 18757 - 11904: 0x9A48, + 18769 - 11904: 0x9A49, + 18771 - 11904: 0xFE7D, + 18789 - 11904: 0x90AA, + 18794 - 11904: 0x9A50, + 18802 - 11904: 0x9347, + 18825 - 11904: 0x8ED8, + 18849 - 11904: 0x90C9, + 18855 - 11904: 0x9A55, + 18911 - 11904: 0x90BC, + 18917 - 11904: 0x9A58, + 18919 - 11904: 0x8BB8, + 18959 - 11904: 0x90D5, + 18973 - 11904: 0x9641, + 18980 - 11904: 0x9A5A, + 18997 - 11904: 0x9A5C, + 19094 - 11904: 0x97C2, + 19108 - 11904: 0x875C, + 19124 - 11904: 0x8ABB, + 19128 - 11904: 0x9BAA, + 19153 - 11904: 0x90F5, + 19172 - 11904: 0x9A60, + 19199 - 11904: 0x9145, + 19216 - 11904: 0x8C58, + 19225 - 11904: 0x9A63, + 19232 - 11904: 0x8C49, + 19244 - 11904: 0x8BB6, + 19255 - 11904: 0xFCCF, + 19311 - 11904: 0x966B, + 19312 - 11904: 0x9A6E, + 19314 - 11904: 0x914F, + 19323 - 11904: 0x9746, + 19326 - 11904: 0xA0E6, + 19342 - 11904: 0x92D7, + 19344 - 11904: 0x9675, + 19347 - 11904: 0x93D4, + 19350 - 11904: 0x91BB, + 19351 - 11904: 0x9679, + 19357 - 11904: 0x9A70, + 19389 - 11904: 0x9678, + 19390 - 11904: 0x91CD, + 19392 - 11904: 0x9C4A, + 19460 - 11904: 0xA06F, + 19463 - 11904: 0xA06A, + 19470 - 11904: 0x915F, + 19506 - 11904: 0x8741, + 19515 - 11904: 0x9FA5, + 19518 - 11904: 0x89BA, + 19520 - 11904: 0x874F, + 19527 - 11904: 0x874E, + 19543 - 11904: 0x8755, + 19547 - 11904: 0x9ECD, + 19565 - 11904: 0x9A79, + 19575 - 11904: 0x8CF2, + 19579 - 11904: 0x8D57, + 19581 - 11904: 0x9DCE, + 19585 - 11904: 0x8CD2, + 19589 - 11904: 0x8759, + 19620 - 11904: 0x9D73, + 19630 - 11904: 0x96B9, + 19632 - 11904: 0x96BC, + 19639 - 11904: 0x9CD1, + 19661 - 11904: 0x89B7, + 19681 - 11904: 0x9EEE, + 19682 - 11904: 0x8749, + 19693 - 11904: 0xFB43, + 19719 - 11904: 0x875B, + 19721 - 11904: 0x9EC9, + 19728 - 11904: 0xFBD3, + 19764 - 11904: 0x91AE, + 19830 - 11904: 0x8D58, + 19831 - 11904: 0x8746, + 19849 - 11904: 0x8D56, + 19857 - 11904: 0x9D78, + 19868 - 11904: 0x9D7B, + 19968 - 11904: 0xA440, + 19969 - 11904: 0xA442, + 19971 - 11904: 0xA443, + 19972 - 11904: 0x9EB3, + 19975 - 11904: 0xC945, + 19976 - 11904: 0xA456, + 19977 - 11904: 0xA454, + 19978 - 11904: 0xA457, + 19979 - 11904: 0xA455, + 19980 - 11904: 0xC946, + 19981 - 11904: 0xA4A3, + 19982 - 11904: 0xC94F, + 19983 - 11904: 0xC94D, + 19984 - 11904: 0xA4A2, + 19985 - 11904: 0xA4A1, + 19988 - 11904: 0xA542, + 19989 - 11904: 0xA541, + 19990 - 11904: 0xA540, + 19992 - 11904: 0xA543, + 19993 - 11904: 0xA4FE, + 19994 - 11904: 0x9EB2, + 19996 - 11904: 0x9DD6, + 19998 - 11904: 0xA5E0, + 19999 - 11904: 0xA5E1, + 20001 - 11904: 0x994F, + 20004 - 11904: 0x89CE, + 20006 - 11904: 0xA8C3, + 20008 - 11904: 0x8BC0, + 20010 - 11904: 0x9FC4, + 20011 - 11904: 0xA458, + 20012 - 11904: 0x8BD4, + 20013 - 11904: 0xA4A4, + 20014 - 11904: 0xC950, + 20015 - 11904: 0x8C72, + 20016 - 11904: 0xA4A5, + 20017 - 11904: 0xC963, + 20018 - 11904: 0xA6EA, + 20019 - 11904: 0xCBB1, + 20022 - 11904: 0xC6BF, + 20023 - 11904: 0x8BF9, + 20024 - 11904: 0xA459, + 20025 - 11904: 0xA4A6, + 20027 - 11904: 0xA544, + 20028 - 11904: 0xC964, + 20029 - 11904: 0x8946, + 20031 - 11904: 0xC6C0, + 20034 - 11904: 0xC940, + 20035 - 11904: 0xA444, + 20037 - 11904: 0xA45B, + 20039 - 11904: 0xC947, + 20040 - 11904: 0xA45C, + 20041 - 11904: 0xFAE5, + 20043 - 11904: 0xA4A7, + 20045 - 11904: 0xA545, + 20046 - 11904: 0xA547, + 20047 - 11904: 0xA546, + 20050 - 11904: 0xA5E2, + 20051 - 11904: 0xA5E3, + 20054 - 11904: 0xA8C4, + 20056 - 11904: 0xADBC, + 20057 - 11904: 0xA441, + 20058 - 11904: 0xC87B, + 20059 - 11904: 0x8BC6, + 20060 - 11904: 0xC941, + 20061 - 11904: 0xA445, + 20062 - 11904: 0xA45E, + 20063 - 11904: 0xA45D, + 20073 - 11904: 0xA5E4, + 20074 - 11904: 0x9C57, + 20083 - 11904: 0xA8C5, + 20088 - 11904: 0x9AFB, + 20094 - 11904: 0xB0AE, + 20095 - 11904: 0xD44B, + 20096 - 11904: 0x89D0, + 20097 - 11904: 0x89CF, + 20098 - 11904: 0xB6C3, + 20099 - 11904: 0xDCB1, + 20100 - 11904: 0xDCB2, + 20101 - 11904: 0xC6C1, + 20102 - 11904: 0xA446, + 20103 - 11904: 0x89D1, + 20104 - 11904: 0xA4A9, + 20105 - 11904: 0x89E2, + 20107 - 11904: 0xA8C6, + 20108 - 11904: 0xA447, + 20109 - 11904: 0xC948, + 20110 - 11904: 0xA45F, + 20113 - 11904: 0xA4AA, + 20114 - 11904: 0xA4AC, + 20115 - 11904: 0xC951, + 20116 - 11904: 0xA4AD, + 20117 - 11904: 0xA4AB, + 20120 - 11904: 0x927E, + 20121 - 11904: 0xA5E5, + 20122 - 11904: 0x9DBA, + 20123 - 11904: 0xA8C7, + 20126 - 11904: 0xA8C8, + 20127 - 11904: 0xAB45, + 20128 - 11904: 0xC6C2, + 20129 - 11904: 0xA460, + 20130 - 11904: 0xA4AE, + 20131 - 11904: 0x8C6F, + 20132 - 11904: 0xA5E6, + 20133 - 11904: 0xA5E8, + 20134 - 11904: 0xA5E7, + 20136 - 11904: 0xA6EB, + 20139 - 11904: 0xA8C9, + 20140 - 11904: 0xA8CA, + 20141 - 11904: 0xAB46, + 20142 - 11904: 0xAB47, + 20147 - 11904: 0xADBD, + 20150 - 11904: 0xDCB3, + 20151 - 11904: 0xFBF8, + 20153 - 11904: 0xF6D6, + 20154 - 11904: 0xA448, + 20155 - 11904: 0x8BC7, + 20156 - 11904: 0x926B, + 20159 - 11904: 0x89D2, + 20160 - 11904: 0xA4B0, + 20161 - 11904: 0xA4AF, + 20162 - 11904: 0xC952, + 20163 - 11904: 0xA4B1, + 20164 - 11904: 0xA4B7, + 20166 - 11904: 0xA4B2, + 20167 - 11904: 0xA4B3, + 20168 - 11904: 0xC954, + 20169 - 11904: 0xC953, + 20170 - 11904: 0xA4B5, + 20171 - 11904: 0xA4B6, + 20173 - 11904: 0xA4B4, + 20174 - 11904: 0x9FCF, + 20180 - 11904: 0xA54A, + 20181 - 11904: 0xA54B, + 20182 - 11904: 0xA54C, + 20183 - 11904: 0xA54D, + 20184 - 11904: 0xA549, + 20185 - 11904: 0xA550, + 20186 - 11904: 0xC96A, + 20188 - 11904: 0xC966, + 20189 - 11904: 0xC969, + 20190 - 11904: 0xA551, + 20191 - 11904: 0xA561, + 20193 - 11904: 0xC968, + 20195 - 11904: 0xA54E, + 20196 - 11904: 0xA54F, + 20197 - 11904: 0xA548, + 20200 - 11904: 0xC965, + 20201 - 11904: 0xC967, + 20202 - 11904: 0x9DA9, + 20203 - 11904: 0x89D3, + 20206 - 11904: 0x99E2, + 20208 - 11904: 0xA5F5, + 20209 - 11904: 0xC9B0, + 20210 - 11904: 0xA5F2, + 20211 - 11904: 0xA5F6, + 20212 - 11904: 0xC9BA, + 20213 - 11904: 0xC9AE, + 20214 - 11904: 0xA5F3, + 20215 - 11904: 0xC9B2, + 20216 - 11904: 0x9267, + 20219 - 11904: 0xA5F4, + 20221 - 11904: 0xA5F7, + 20223 - 11904: 0xA5E9, + 20224 - 11904: 0xC9B1, + 20225 - 11904: 0xA5F8, + 20226 - 11904: 0xC9B5, + 20227 - 11904: 0x92A4, + 20228 - 11904: 0xC9B9, + 20229 - 11904: 0xC9B6, + 20232 - 11904: 0xC9B3, + 20233 - 11904: 0xA5EA, + 20234 - 11904: 0xA5EC, + 20235 - 11904: 0xA5F9, + 20237 - 11904: 0xA5EE, + 20238 - 11904: 0xC9AB, + 20239 - 11904: 0xA5F1, + 20240 - 11904: 0xA5EF, + 20241 - 11904: 0xA5F0, + 20242 - 11904: 0xC9BB, + 20243 - 11904: 0xC9B8, + 20244 - 11904: 0xC9AF, + 20245 - 11904: 0xA5ED, + 20247 - 11904: 0x8C73, + 20248 - 11904: 0xC9AC, + 20249 - 11904: 0xA5EB, + 20250 - 11904: 0x894E, + 20253 - 11904: 0xC9B4, + 20258 - 11904: 0xC9B7, + 20264 - 11904: 0x894F, + 20265 - 11904: 0x9278, + 20268 - 11904: 0xC9AD, + 20269 - 11904: 0xCA66, + 20271 - 11904: 0xA742, + 20272 - 11904: 0xA6F4, + 20274 - 11904: 0x91B6, + 20275 - 11904: 0xCA67, + 20276 - 11904: 0xA6F1, + 20278 - 11904: 0xA744, + 20279 - 11904: 0x89D4, + 20280 - 11904: 0xA6F9, + 20281 - 11904: 0x9FD2, + 20282 - 11904: 0xA6F8, + 20283 - 11904: 0xCA5B, + 20284 - 11904: 0xA6FC, + 20285 - 11904: 0xA6F7, + 20286 - 11904: 0xCA60, + 20287 - 11904: 0xCA68, + 20289 - 11904: 0xCA64, + 20290 - 11904: 0x92A7, + 20291 - 11904: 0xA6FA, + 20293 - 11904: 0x95A2, + 20294 - 11904: 0xA6FD, + 20295 - 11904: 0xA6EE, + 20296 - 11904: 0xA747, + 20297 - 11904: 0xCA5D, + 20299 - 11904: 0x926E, + 20300 - 11904: 0xCBBD, + 20301 - 11904: 0xA6EC, + 20302 - 11904: 0xA743, + 20303 - 11904: 0xA6ED, + 20304 - 11904: 0xA6F5, + 20305 - 11904: 0xA6F6, + 20306 - 11904: 0xCA62, + 20307 - 11904: 0xCA5E, + 20308 - 11904: 0xA6FB, + 20309 - 11904: 0xA6F3, + 20310 - 11904: 0xCA5A, + 20311 - 11904: 0xA6EF, + 20312 - 11904: 0xCA65, + 20313 - 11904: 0xA745, + 20314 - 11904: 0xA748, + 20315 - 11904: 0xA6F2, + 20316 - 11904: 0xA740, + 20317 - 11904: 0xA746, + 20318 - 11904: 0xA6F0, + 20319 - 11904: 0xCA63, + 20320 - 11904: 0xA741, + 20321 - 11904: 0xCA69, + 20322 - 11904: 0xCA5C, + 20323 - 11904: 0xA6FE, + 20324 - 11904: 0xCA5F, + 20327 - 11904: 0xCA61, + 20329 - 11904: 0xA8D8, + 20330 - 11904: 0xCBBF, + 20331 - 11904: 0xCBCB, + 20332 - 11904: 0xA8D0, + 20334 - 11904: 0xCBCC, + 20335 - 11904: 0xA8CB, + 20336 - 11904: 0xA8D5, + 20338 - 11904: 0x96EA, + 20339 - 11904: 0xA8CE, + 20340 - 11904: 0xCBB9, + 20341 - 11904: 0xA8D6, + 20342 - 11904: 0xCBB8, + 20343 - 11904: 0xCBBC, + 20344 - 11904: 0xCBC3, + 20345 - 11904: 0xCBC1, + 20346 - 11904: 0xA8DE, + 20347 - 11904: 0xA8D9, + 20348 - 11904: 0xCBB3, + 20349 - 11904: 0xCBB5, + 20350 - 11904: 0xA8DB, + 20351 - 11904: 0xA8CF, + 20352 - 11904: 0xCBB6, + 20353 - 11904: 0xCBC2, + 20354 - 11904: 0xCBC9, + 20355 - 11904: 0xA8D4, + 20356 - 11904: 0xCBBB, + 20357 - 11904: 0xCBB4, + 20358 - 11904: 0xA8D3, + 20359 - 11904: 0xCBB7, + 20360 - 11904: 0xA8D7, + 20361 - 11904: 0xCBBA, + 20362 - 11904: 0x926F, + 20363 - 11904: 0xA8D2, + 20365 - 11904: 0xA8CD, + 20367 - 11904: 0xA8DC, + 20368 - 11904: 0xCBC4, + 20369 - 11904: 0xA8DD, + 20370 - 11904: 0xCBC8, + 20372 - 11904: 0xCBC6, + 20373 - 11904: 0xCBCA, + 20374 - 11904: 0xA8DA, + 20375 - 11904: 0xCBBE, + 20376 - 11904: 0xCBB2, + 20378 - 11904: 0xCBC0, + 20379 - 11904: 0xA8D1, + 20380 - 11904: 0xCBC5, + 20381 - 11904: 0xA8CC, + 20382 - 11904: 0xCBC7, + 20386 - 11904: 0x92A3, + 20392 - 11904: 0x8950, + 20395 - 11904: 0xFA57, + 20398 - 11904: 0xAB56, + 20399 - 11904: 0xAB4A, + 20400 - 11904: 0x9866, + 20402 - 11904: 0xCDE0, + 20403 - 11904: 0xCDE8, + 20404 - 11904: 0x8CF8, + 20405 - 11904: 0xAB49, + 20406 - 11904: 0xAB51, + 20407 - 11904: 0xAB5D, + 20409 - 11904: 0xCDEE, + 20410 - 11904: 0xCDEC, + 20411 - 11904: 0xCDE7, + 20413 - 11904: 0x89D6, + 20415 - 11904: 0xAB4B, + 20416 - 11904: 0xCDED, + 20417 - 11904: 0xCDE3, + 20418 - 11904: 0xAB59, + 20419 - 11904: 0xAB50, + 20420 - 11904: 0xAB58, + 20421 - 11904: 0xCDDE, + 20423 - 11904: 0xCDEA, + 20424 - 11904: 0x98B2, + 20425 - 11904: 0xCDE1, + 20426 - 11904: 0xAB54, + 20427 - 11904: 0xCDE2, + 20428 - 11904: 0x92AB, + 20429 - 11904: 0xCDDD, + 20430 - 11904: 0xAB5B, + 20431 - 11904: 0xAB4E, + 20432 - 11904: 0xAB57, + 20433 - 11904: 0xAB4D, + 20435 - 11904: 0xCDDF, + 20436 - 11904: 0xCDE4, + 20438 - 11904: 0xCDEB, + 20439 - 11904: 0xAB55, + 20440 - 11904: 0xAB52, + 20441 - 11904: 0xCDE6, + 20442 - 11904: 0xAB5A, + 20443 - 11904: 0xCDE9, + 20444 - 11904: 0xCDE5, + 20445 - 11904: 0xAB4F, + 20446 - 11904: 0xAB5C, + 20447 - 11904: 0xAB53, + 20448 - 11904: 0xAB4C, + 20449 - 11904: 0xAB48, + 20452 - 11904: 0x96DE, + 20453 - 11904: 0x92AC, + 20460 - 11904: 0xCDEF, + 20462 - 11904: 0xADD7, + 20463 - 11904: 0xADC1, + 20464 - 11904: 0x8C70, + 20465 - 11904: 0xADD1, + 20466 - 11904: 0x9F6E, + 20467 - 11904: 0xADD6, + 20468 - 11904: 0xD0D0, + 20469 - 11904: 0xD0CF, + 20470 - 11904: 0xD0D4, + 20471 - 11904: 0xD0D5, + 20472 - 11904: 0xADC4, + 20473 - 11904: 0x8EF2, + 20474 - 11904: 0xADCD, + 20477 - 11904: 0x9F6C, + 20478 - 11904: 0xADDA, + 20480 - 11904: 0xADCE, + 20483 - 11904: 0x89D8, + 20485 - 11904: 0xD0C9, + 20486 - 11904: 0xADC7, + 20487 - 11904: 0xD0CA, + 20488 - 11904: 0xFA59, + 20489 - 11904: 0xADDC, + 20491 - 11904: 0xADD3, + 20492 - 11904: 0xADBE, + 20493 - 11904: 0xADBF, + 20494 - 11904: 0xD0DD, + 20495 - 11904: 0xB0BF, + 20497 - 11904: 0xADCC, + 20498 - 11904: 0xADCB, + 20499 - 11904: 0xD0CB, + 20500 - 11904: 0xADCF, + 20501 - 11904: 0xD45B, + 20502 - 11904: 0xADC6, + 20503 - 11904: 0xD0D6, + 20504 - 11904: 0xADD5, + 20505 - 11904: 0xADD4, + 20506 - 11904: 0xADCA, + 20507 - 11904: 0xD0CE, + 20508 - 11904: 0xD0D7, + 20510 - 11904: 0xD0C8, + 20511 - 11904: 0xADC9, + 20512 - 11904: 0xD0D8, + 20513 - 11904: 0xADD2, + 20514 - 11904: 0xD0CC, + 20515 - 11904: 0xADC0, + 20517 - 11904: 0xADC3, + 20518 - 11904: 0xADC2, + 20519 - 11904: 0xD0D9, + 20520 - 11904: 0xADD0, + 20521 - 11904: 0xFA5F, + 20522 - 11904: 0xADD9, + 20523 - 11904: 0xADDB, + 20524 - 11904: 0xD0D3, + 20525 - 11904: 0xADD8, + 20526 - 11904: 0x92A8, + 20527 - 11904: 0xD0DB, + 20528 - 11904: 0xD0CD, + 20529 - 11904: 0xD0DC, + 20531 - 11904: 0xD0D1, + 20532 - 11904: 0x9163, + 20533 - 11904: 0xD0DA, + 20535 - 11904: 0xD0D2, + 20539 - 11904: 0x8C40, + 20540 - 11904: 0xADC8, + 20544 - 11904: 0xD463, + 20545 - 11904: 0xD457, + 20547 - 11904: 0xB0B3, + 20549 - 11904: 0xD45C, + 20550 - 11904: 0xD462, + 20551 - 11904: 0xB0B2, + 20552 - 11904: 0xD455, + 20553 - 11904: 0xB0B6, + 20554 - 11904: 0xD459, + 20555 - 11904: 0xD452, + 20556 - 11904: 0xB0B4, + 20557 - 11904: 0xD456, + 20558 - 11904: 0xB0B9, + 20559 - 11904: 0xB0BE, + 20561 - 11904: 0xD467, + 20563 - 11904: 0xD451, + 20565 - 11904: 0xB0BA, + 20566 - 11904: 0x9F73, + 20567 - 11904: 0xD466, + 20568 - 11904: 0x92AD, + 20570 - 11904: 0xB0B5, + 20571 - 11904: 0xD458, + 20572 - 11904: 0xB0B1, + 20573 - 11904: 0xD453, + 20574 - 11904: 0xD44F, + 20575 - 11904: 0xD45D, + 20576 - 11904: 0xD450, + 20577 - 11904: 0xD44E, + 20578 - 11904: 0xD45A, + 20579 - 11904: 0xD460, + 20580 - 11904: 0xD461, + 20581 - 11904: 0xB0B7, + 20582 - 11904: 0x9BE9, + 20584 - 11904: 0xD85B, + 20585 - 11904: 0xD45E, + 20586 - 11904: 0xD44D, + 20587 - 11904: 0xD45F, + 20588 - 11904: 0x92A9, + 20589 - 11904: 0xB0C1, + 20590 - 11904: 0xD464, + 20591 - 11904: 0xB0C0, + 20592 - 11904: 0xD44C, + 20594 - 11904: 0xD454, + 20595 - 11904: 0xD465, + 20596 - 11904: 0xB0BC, + 20597 - 11904: 0xB0BB, + 20598 - 11904: 0xB0B8, + 20599 - 11904: 0xB0BD, + 20602 - 11904: 0xB0AF, + 20605 - 11904: 0xFA66, + 20608 - 11904: 0xB3C8, + 20609 - 11904: 0x92AA, + 20610 - 11904: 0xD85E, + 20611 - 11904: 0xD857, + 20613 - 11904: 0xB3C5, + 20615 - 11904: 0xD85F, + 20616 - 11904: 0x89D9, + 20619 - 11904: 0xD855, + 20620 - 11904: 0xD858, + 20621 - 11904: 0xB3C4, + 20622 - 11904: 0xD859, + 20624 - 11904: 0xFD56, + 20625 - 11904: 0xB3C7, + 20626 - 11904: 0xD85D, + 20628 - 11904: 0xD853, + 20629 - 11904: 0xD852, + 20630 - 11904: 0xB3C9, + 20632 - 11904: 0xB3CA, + 20633 - 11904: 0xB3C6, + 20634 - 11904: 0xB3CB, + 20635 - 11904: 0xD851, + 20636 - 11904: 0xD85C, + 20637 - 11904: 0xD85A, + 20638 - 11904: 0xD854, + 20642 - 11904: 0xB3C3, + 20643 - 11904: 0xD856, + 20646 - 11904: 0x9FA8, + 20652 - 11904: 0xB6CA, + 20653 - 11904: 0xB6C4, + 20654 - 11904: 0xDCB7, + 20655 - 11904: 0xB6CD, + 20656 - 11904: 0xDCBD, + 20657 - 11904: 0xDCC0, + 20658 - 11904: 0xB6C6, + 20659 - 11904: 0xB6C7, + 20660 - 11904: 0xDCBA, + 20661 - 11904: 0xB6C5, + 20662 - 11904: 0xDCC3, + 20663 - 11904: 0xB6CB, + 20664 - 11904: 0xDCC4, + 20666 - 11904: 0xDCBF, + 20667 - 11904: 0xB6CC, + 20668 - 11904: 0x8C71, + 20669 - 11904: 0xDCB4, + 20670 - 11904: 0xB6C9, + 20671 - 11904: 0xDCB5, + 20673 - 11904: 0xDCBE, + 20674 - 11904: 0xDCBC, + 20676 - 11904: 0xDCB8, + 20677 - 11904: 0xB6C8, + 20678 - 11904: 0xDCB6, + 20679 - 11904: 0xB6CE, + 20680 - 11904: 0xDCBB, + 20681 - 11904: 0xDCC2, + 20682 - 11904: 0xDCB9, + 20683 - 11904: 0xDCC1, + 20685 - 11904: 0x92A1, + 20686 - 11904: 0xB9B6, + 20687 - 11904: 0xB9B3, + 20688 - 11904: 0x90E3, + 20689 - 11904: 0xB9B4, + 20691 - 11904: 0xE0F9, + 20692 - 11904: 0xE0F1, + 20693 - 11904: 0xB9B2, + 20694 - 11904: 0xB9AF, + 20695 - 11904: 0xE0F2, + 20697 - 11904: 0xA0A6, + 20698 - 11904: 0xB9B1, + 20699 - 11904: 0xE0F5, + 20701 - 11904: 0xE0F7, + 20703 - 11904: 0x94AB, + 20704 - 11904: 0xE0FE, + 20705 - 11904: 0xFC72, + 20707 - 11904: 0xE0FD, + 20708 - 11904: 0xE0F8, + 20709 - 11904: 0xB9AE, + 20710 - 11904: 0xE0F0, + 20711 - 11904: 0xB9AC, + 20712 - 11904: 0xE0F3, + 20713 - 11904: 0xB9B7, + 20714 - 11904: 0xE0F6, + 20716 - 11904: 0xE0FA, + 20717 - 11904: 0xB9B0, + 20718 - 11904: 0xB9AD, + 20719 - 11904: 0xE0FC, + 20720 - 11904: 0xE0FB, + 20721 - 11904: 0xB9B5, + 20723 - 11904: 0xE0F4, + 20724 - 11904: 0x97C4, + 20725 - 11904: 0xBBF8, + 20726 - 11904: 0xE4EC, + 20728 - 11904: 0xE4E9, + 20729 - 11904: 0xBBF9, + 20731 - 11904: 0xBBF7, + 20732 - 11904: 0x92AE, + 20733 - 11904: 0xE4F0, + 20734 - 11904: 0xE4ED, + 20735 - 11904: 0xE4E6, + 20736 - 11904: 0xBBF6, + 20737 - 11904: 0xFA67, + 20738 - 11904: 0xBBFA, + 20739 - 11904: 0xE4E7, + 20740 - 11904: 0xBBF5, + 20741 - 11904: 0xBBFD, + 20742 - 11904: 0xE4EA, + 20743 - 11904: 0xE4EB, + 20744 - 11904: 0xBBFB, + 20745 - 11904: 0xBBFC, + 20746 - 11904: 0xE4F1, + 20747 - 11904: 0xE4EE, + 20748 - 11904: 0xE4EF, + 20749 - 11904: 0x92A2, + 20750 - 11904: 0xFA69, + 20752 - 11904: 0xBEAA, + 20753 - 11904: 0xE8F8, + 20754 - 11904: 0xBEA7, + 20755 - 11904: 0xE8F5, + 20756 - 11904: 0xBEA9, + 20757 - 11904: 0xBEAB, + 20759 - 11904: 0xE8F6, + 20760 - 11904: 0xBEA8, + 20762 - 11904: 0xE8F7, + 20764 - 11904: 0xE8F4, + 20767 - 11904: 0xC076, + 20768 - 11904: 0xECBD, + 20769 - 11904: 0xC077, + 20770 - 11904: 0xECBB, + 20772 - 11904: 0xECBC, + 20773 - 11904: 0xECBA, + 20774 - 11904: 0xECB9, + 20777 - 11904: 0xECBE, + 20778 - 11904: 0xC075, + 20779 - 11904: 0x9268, + 20781 - 11904: 0xEFB8, + 20782 - 11904: 0xEFB9, + 20784 - 11904: 0xE4E8, + 20785 - 11904: 0xEFB7, + 20786 - 11904: 0xC078, + 20787 - 11904: 0xC35F, + 20788 - 11904: 0xF1EB, + 20789 - 11904: 0xF1EC, + 20791 - 11904: 0xC4D7, + 20792 - 11904: 0xC4D8, + 20793 - 11904: 0xF5C1, + 20794 - 11904: 0xF5C0, + 20795 - 11904: 0xC56C, + 20796 - 11904: 0xC56B, + 20797 - 11904: 0xF7D0, + 20799 - 11904: 0xA449, + 20800 - 11904: 0xA461, + 20801 - 11904: 0xA4B9, + 20803 - 11904: 0xA4B8, + 20804 - 11904: 0xA553, + 20805 - 11904: 0xA552, + 20806 - 11904: 0xA5FC, + 20807 - 11904: 0xA5FB, + 20808 - 11904: 0xA5FD, + 20809 - 11904: 0xA5FA, + 20811 - 11904: 0xA74A, + 20812 - 11904: 0xA749, + 20813 - 11904: 0xA74B, + 20818 - 11904: 0xA8E0, + 20820 - 11904: 0xA8DF, + 20821 - 11904: 0xA8E1, + 20822 - 11904: 0x8951, + 20823 - 11904: 0xAB5E, + 20825 - 11904: 0xA259, + 20826 - 11904: 0xD0DE, + 20827 - 11904: 0xA25A, + 20828 - 11904: 0xB0C2, + 20829 - 11904: 0xA25C, + 20830 - 11904: 0xA25B, + 20831 - 11904: 0xD860, + 20832 - 11904: 0xFA6F, + 20833 - 11904: 0xA25D, + 20834 - 11904: 0xB9B8, + 20835 - 11904: 0xA25E, + 20837 - 11904: 0xA44A, + 20839 - 11904: 0xA4BA, + 20840 - 11904: 0xA5FE, + 20841 - 11904: 0xA8E2, + 20842 - 11904: 0xFA71, + 20843 - 11904: 0xA44B, + 20844 - 11904: 0xA4BD, + 20845 - 11904: 0xA4BB, + 20846 - 11904: 0xA4BC, + 20849 - 11904: 0xA640, + 20852 - 11904: 0x8952, + 20853 - 11904: 0xA74C, + 20854 - 11904: 0xA8E4, + 20855 - 11904: 0xA8E3, + 20856 - 11904: 0xA8E5, + 20857 - 11904: 0x945A, + 20860 - 11904: 0xADDD, + 20864 - 11904: 0xBEAC, + 20866 - 11904: 0xC6C3, + 20870 - 11904: 0x89DD, + 20871 - 11904: 0xC94E, + 20872 - 11904: 0xC8A2, + 20873 - 11904: 0xA554, + 20874 - 11904: 0xA555, + 20877 - 11904: 0xA641, + 20879 - 11904: 0xCA6A, + 20881 - 11904: 0xAB60, + 20882 - 11904: 0xAB5F, + 20883 - 11904: 0xD0E0, + 20884 - 11904: 0xD0DF, + 20885 - 11904: 0xB0C3, + 20886 - 11904: 0xC6C4, + 20887 - 11904: 0xA4BE, + 20888 - 11904: 0xC955, + 20890 - 11904: 0x9E52, + 20892 - 11904: 0x8953, + 20894 - 11904: 0xCBCD, + 20896 - 11904: 0xAB61, + 20898 - 11904: 0xADE0, + 20900 - 11904: 0xADDE, + 20901 - 11904: 0xADDF, + 20903 - 11904: 0x9E55, + 20904 - 11904: 0x92BA, + 20906 - 11904: 0xBEAD, + 20907 - 11904: 0xC6C5, + 20908 - 11904: 0xA556, + 20910 - 11904: 0x8C5B, + 20912 - 11904: 0xA642, + 20913 - 11904: 0xC9BC, + 20914 - 11904: 0xFA7D, + 20915 - 11904: 0xFAA8, + 20916 - 11904: 0x9A68, + 20917 - 11904: 0xFA47, + 20918 - 11904: 0xA74D, + 20919 - 11904: 0xA74E, + 20920 - 11904: 0xFA7E, + 20921 - 11904: 0xCA6B, + 20924 - 11904: 0xCBCE, + 20925 - 11904: 0xA8E6, + 20926 - 11904: 0xCBCF, + 20931 - 11904: 0x92BB, + 20932 - 11904: 0xD0E2, + 20933 - 11904: 0xD0E3, + 20934 - 11904: 0xADE3, + 20935 - 11904: 0xFDB6, + 20936 - 11904: 0xD0E4, + 20937 - 11904: 0xFAA2, + 20938 - 11904: 0xD0E1, + 20939 - 11904: 0xADE4, + 20940 - 11904: 0xADE2, + 20941 - 11904: 0xADE1, + 20942 - 11904: 0xD0E5, + 20943 - 11904: 0xFAA3, + 20944 - 11904: 0xD468, + 20945 - 11904: 0xFAA4, + 20946 - 11904: 0x9BB4, + 20947 - 11904: 0xFAA6, + 20948 - 11904: 0xD861, + 20951 - 11904: 0xDCC5, + 20952 - 11904: 0xE140, + 20955 - 11904: 0x89DF, + 20956 - 11904: 0xBBFE, + 20957 - 11904: 0xBEAE, + 20958 - 11904: 0xE8F9, + 20959 - 11904: 0xFDDB, + 20960 - 11904: 0xA44C, + 20961 - 11904: 0xA45A, + 20962 - 11904: 0xFAA9, + 20964 - 11904: 0x8954, + 20973 - 11904: 0xFAAB, + 20976 - 11904: 0xB0C4, + 20977 - 11904: 0xB3CD, + 20979 - 11904: 0xB9B9, + 20980 - 11904: 0xFC7A, + 20981 - 11904: 0xC942, + 20982 - 11904: 0xA4BF, + 20984 - 11904: 0xA559, + 20985 - 11904: 0xA557, + 20986 - 11904: 0xA558, + 20988 - 11904: 0x89E0, + 20989 - 11904: 0xA8E7, + 20990 - 11904: 0x9F4F, + 20992 - 11904: 0xA44D, + 20993 - 11904: 0xA44E, + 20994 - 11904: 0xC87D, + 20995 - 11904: 0xA462, + 20997 - 11904: 0x89E1, + 20998 - 11904: 0xA4C0, + 20999 - 11904: 0xA4C1, + 21000 - 11904: 0xA4C2, + 21001 - 11904: 0xC9BE, + 21002 - 11904: 0xA55A, + 21003 - 11904: 0xFAB0, + 21004 - 11904: 0xC96B, + 21006 - 11904: 0xA646, + 21008 - 11904: 0xC9BF, + 21009 - 11904: 0xA644, + 21010 - 11904: 0xA645, + 21011 - 11904: 0xC9BD, + 21014 - 11904: 0xA647, + 21015 - 11904: 0xA643, + 21020 - 11904: 0xCA6C, + 21021 - 11904: 0xAAEC, + 21022 - 11904: 0xCA6D, + 21023 - 11904: 0x9FCD, + 21024 - 11904: 0xA0E7, + 21025 - 11904: 0xCA6E, + 21028 - 11904: 0xA750, + 21029 - 11904: 0xA74F, + 21030 - 11904: 0xFAB1, + 21031 - 11904: 0x89A6, + 21032 - 11904: 0xA753, + 21033 - 11904: 0xA751, + 21034 - 11904: 0xA752, + 21038 - 11904: 0xA8ED, + 21040 - 11904: 0xA8EC, + 21041 - 11904: 0xCBD4, + 21042 - 11904: 0xCBD1, + 21043 - 11904: 0xCBD2, + 21044 - 11904: 0x9EFA, + 21045 - 11904: 0xCBD0, + 21046 - 11904: 0xA8EE, + 21047 - 11904: 0xA8EA, + 21048 - 11904: 0xA8E9, + 21050 - 11904: 0xA8EB, + 21051 - 11904: 0xA8E8, + 21052 - 11904: 0xFAB2, + 21057 - 11904: 0xA8EF, + 21059 - 11904: 0xAB63, + 21060 - 11904: 0xCDF0, + 21062 - 11904: 0xCBD3, + 21063 - 11904: 0xAB68, + 21065 - 11904: 0xCDF1, + 21066 - 11904: 0xAB64, + 21067 - 11904: 0xAB67, + 21068 - 11904: 0xAB66, + 21069 - 11904: 0xAB65, + 21070 - 11904: 0xAB62, + 21071 - 11904: 0x87BC, + 21074 - 11904: 0xD0E8, + 21076 - 11904: 0xADE7, + 21077 - 11904: 0xD0EB, + 21078 - 11904: 0xADE5, + 21079 - 11904: 0xFAB4, + 21081 - 11904: 0x92C4, + 21082 - 11904: 0xD0E7, + 21083 - 11904: 0xADE8, + 21084 - 11904: 0xADE6, + 21085 - 11904: 0xADE9, + 21086 - 11904: 0xD0E9, + 21087 - 11904: 0xD0EA, + 21088 - 11904: 0x9F6F, + 21089 - 11904: 0xD0E6, + 21090 - 11904: 0xD0EC, + 21096 - 11904: 0x8BB0, + 21097 - 11904: 0xB3D1, + 21098 - 11904: 0xB0C5, + 21099 - 11904: 0xD469, + 21100 - 11904: 0xD46B, + 21101 - 11904: 0xD46A, + 21102 - 11904: 0xD46C, + 21103 - 11904: 0xB0C6, + 21106 - 11904: 0xB3CE, + 21107 - 11904: 0x9FAC, + 21108 - 11904: 0xB3CF, + 21109 - 11904: 0xB3D0, + 21111 - 11904: 0xB6D0, + 21112 - 11904: 0xDCC7, + 21113 - 11904: 0x89E3, + 21114 - 11904: 0xDCC6, + 21115 - 11904: 0xDCC8, + 21116 - 11904: 0xDCC9, + 21117 - 11904: 0xB6D1, + 21119 - 11904: 0xB6CF, + 21120 - 11904: 0xE141, + 21121 - 11904: 0xE142, + 21122 - 11904: 0xB9BB, + 21123 - 11904: 0xB9BA, + 21124 - 11904: 0xE35A, + 21127 - 11904: 0xBC40, + 21128 - 11904: 0xBC41, + 21129 - 11904: 0xBC42, + 21130 - 11904: 0xBC44, + 21131 - 11904: 0xE4F2, + 21132 - 11904: 0xE4F3, + 21133 - 11904: 0xBC43, + 21135 - 11904: 0x9BD3, + 21136 - 11904: 0x89E4, + 21137 - 11904: 0xBEAF, + 21139 - 11904: 0xBEB0, + 21140 - 11904: 0xFAB5, + 21142 - 11904: 0xF1ED, + 21143 - 11904: 0xF5C3, + 21144 - 11904: 0xF5C2, + 21145 - 11904: 0xF7D1, + 21146 - 11904: 0x9FD5, + 21147 - 11904: 0xA44F, + 21151 - 11904: 0xA55C, + 21152 - 11904: 0xA55B, + 21153 - 11904: 0x8955, + 21155 - 11904: 0xA648, + 21156 - 11904: 0x92C5, + 21158 - 11904: 0xC9C0, + 21160 - 11904: 0x8956, + 21161 - 11904: 0xA755, + 21162 - 11904: 0xA756, + 21163 - 11904: 0xA754, + 21164 - 11904: 0xA757, + 21165 - 11904: 0xCA6F, + 21166 - 11904: 0xCA70, + 21173 - 11904: 0xFAB3, + 21177 - 11904: 0xFAB6, + 21179 - 11904: 0xA8F1, + 21180 - 11904: 0xCBD5, + 21182 - 11904: 0xA8F0, + 21184 - 11904: 0xCDF2, + 21185 - 11904: 0xAB6C, + 21186 - 11904: 0xCDF3, + 21187 - 11904: 0xAB6B, + 21189 - 11904: 0xFAB7, + 21191 - 11904: 0xAB69, + 21193 - 11904: 0xAB6A, + 21196 - 11904: 0x9EDC, + 21197 - 11904: 0xD0ED, + 21200 - 11904: 0xFBC4, + 21201 - 11904: 0x9F71, + 21202 - 11904: 0xB0C7, + 21203 - 11904: 0xD46E, + 21205 - 11904: 0xB0CA, + 21206 - 11904: 0xD46D, + 21207 - 11904: 0xB1E5, + 21208 - 11904: 0xB0C9, + 21209 - 11904: 0xB0C8, + 21211 - 11904: 0xB3D4, + 21213 - 11904: 0xB3D3, + 21214 - 11904: 0xB3D2, + 21215 - 11904: 0xB6D2, + 21216 - 11904: 0xFABA, + 21217 - 11904: 0x92C7, + 21218 - 11904: 0xB6D5, + 21219 - 11904: 0xB6D6, + 21220 - 11904: 0xB6D4, + 21222 - 11904: 0xB6D3, + 21225 - 11904: 0xE143, + 21227 - 11904: 0xE144, + 21231 - 11904: 0xE4F5, + 21232 - 11904: 0xBC45, + 21233 - 11904: 0xE4F4, + 21235 - 11904: 0xBEB1, + 21236 - 11904: 0xECBF, + 21237 - 11904: 0xC079, + 21239 - 11904: 0xF1EE, + 21240 - 11904: 0xC455, + 21241 - 11904: 0xC6C6, + 21242 - 11904: 0xA463, + 21243 - 11904: 0xA4C3, + 21244 - 11904: 0xC956, + 21246 - 11904: 0xA4C4, + 21247 - 11904: 0xA4C5, + 21249 - 11904: 0x9A4C, + 21253 - 11904: 0xFABD, + 21254 - 11904: 0xA55E, + 21256 - 11904: 0xA649, + 21257 - 11904: 0xCA71, + 21258 - 11904: 0xCBD6, + 21259 - 11904: 0xCBD7, + 21261 - 11904: 0xAB6D, + 21262 - 11904: 0xD0EE, + 21263 - 11904: 0xB0CC, + 21264 - 11904: 0xB0CB, + 21265 - 11904: 0xD863, + 21266 - 11904: 0xD862, + 21269 - 11904: 0xA450, + 21270 - 11904: 0xA4C6, + 21271 - 11904: 0xA55F, + 21273 - 11904: 0xB0CD, + 21274 - 11904: 0xC943, + 21276 - 11904: 0xC96C, + 21277 - 11904: 0xA560, + 21279 - 11904: 0xC9C2, + 21280 - 11904: 0xA64B, + 21281 - 11904: 0xA64A, + 21282 - 11904: 0xC9C1, + 21283 - 11904: 0xA758, + 21284 - 11904: 0x8C68, + 21287 - 11904: 0x89E5, + 21290 - 11904: 0xADEA, + 21292 - 11904: 0x9F7D, + 21293 - 11904: 0xD46F, + 21295 - 11904: 0xB6D7, + 21296 - 11904: 0xE145, + 21297 - 11904: 0xB9BC, + 21298 - 11904: 0xA0A9, + 21299 - 11904: 0xFAC4, + 21300 - 11904: 0xE8FA, + 21303 - 11904: 0xF3FD, + 21304 - 11904: 0xC6C7, + 21305 - 11904: 0xA4C7, + 21307 - 11904: 0x8957, + 21308 - 11904: 0xCBD8, + 21309 - 11904: 0xCDF4, + 21310 - 11904: 0xB0D0, + 21311 - 11904: 0xB0CE, + 21312 - 11904: 0xB0CF, + 21313 - 11904: 0xA451, + 21314 - 11904: 0xFAAA, + 21315 - 11904: 0xA464, + 21316 - 11904: 0xFAC5, + 21317 - 11904: 0xA4CA, + 21319 - 11904: 0xA4C9, + 21320 - 11904: 0xA4C8, + 21321 - 11904: 0xA563, + 21322 - 11904: 0xA562, + 21324 - 11904: 0xC96D, + 21325 - 11904: 0xC9C3, + 21326 - 11904: 0x8958, + 21329 - 11904: 0xA8F5, + 21330 - 11904: 0xA8F2, + 21331 - 11904: 0xA8F4, + 21332 - 11904: 0xA8F3, + 21335 - 11904: 0xAB6E, + 21338 - 11904: 0xB3D5, + 21340 - 11904: 0xA452, + 21341 - 11904: 0x8BE3, + 21342 - 11904: 0xA4CB, + 21343 - 11904: 0x8B61, + 21344 - 11904: 0xA565, + 21345 - 11904: 0xA564, + 21347 - 11904: 0xCA72, + 21348 - 11904: 0x9AF1, + 21350 - 11904: 0xA8F6, + 21351 - 11904: 0x9EB7, + 21353 - 11904: 0xC6C8, + 21356 - 11904: 0xC957, + 21357 - 11904: 0xFAD1, + 21358 - 11904: 0xA567, + 21359 - 11904: 0xA566, + 21360 - 11904: 0xA64C, + 21361 - 11904: 0xA64D, + 21362 - 11904: 0xCA73, + 21363 - 11904: 0xA759, + 21364 - 11904: 0xFAD2, + 21365 - 11904: 0xA75A, + 21367 - 11904: 0xA8F7, + 21368 - 11904: 0xA8F8, + 21369 - 11904: 0xA8F9, + 21371 - 11904: 0xAB6F, + 21372 - 11904: 0xCDF5, + 21373 - 11904: 0x9EBA, + 21374 - 11904: 0xFAD4, + 21375 - 11904: 0xFAD5, + 21378 - 11904: 0xC944, + 21380 - 11904: 0xA4CC, + 21386 - 11904: 0xC9C4, + 21390 - 11904: 0xCA74, + 21391 - 11904: 0xCA75, + 21394 - 11904: 0xCBD9, + 21395 - 11904: 0xFAD9, + 21396 - 11904: 0xCBDA, + 21398 - 11904: 0xCDF7, + 21399 - 11904: 0xCDF6, + 21400 - 11904: 0xCDF9, + 21401 - 11904: 0xCDF8, + 21402 - 11904: 0xAB70, + 21404 - 11904: 0xD470, + 21405 - 11904: 0xADED, + 21406 - 11904: 0xD0EF, + 21407 - 11904: 0xADEC, + 21408 - 11904: 0xFADB, + 21410 - 11904: 0x9CE0, + 21412 - 11904: 0xD864, + 21413 - 11904: 0xB3D6, + 21414 - 11904: 0xFBF7, + 21415 - 11904: 0xD865, + 21416 - 11904: 0xFBFA, + 21417 - 11904: 0x89E7, + 21418 - 11904: 0xA07A, + 21419 - 11904: 0xFADC, + 21420 - 11904: 0xE146, + 21421 - 11904: 0xB9BD, + 21422 - 11904: 0xFADD, + 21424 - 11904: 0x89E9, + 21426 - 11904: 0xBC46, + 21428 - 11904: 0xF1EF, + 21430 - 11904: 0xC6C9, + 21433 - 11904: 0xC958, + 21435 - 11904: 0xA568, + 21441 - 11904: 0xFAE2, + 21442 - 11904: 0x89EB, + 21443 - 11904: 0xB0D1, + 21445 - 11904: 0xFAE3, + 21448 - 11904: 0xA453, + 21449 - 11904: 0xA465, + 21450 - 11904: 0xA4CE, + 21451 - 11904: 0xA4CD, + 21452 - 11904: 0x90C8, + 21453 - 11904: 0xA4CF, + 21456 - 11904: 0x92DA, + 21457 - 11904: 0x8959, + 21458 - 11904: 0x9CF5, + 21460 - 11904: 0xA8FB, + 21462 - 11904: 0xA8FA, + 21463 - 11904: 0xA8FC, + 21464 - 11904: 0x895A, + 21465 - 11904: 0xFAE7, + 21466 - 11904: 0x9FA2, + 21467 - 11904: 0xAB71, + 21471 - 11904: 0xADEE, + 21472 - 11904: 0xFAEA, + 21473 - 11904: 0xE8FB, + 21474 - 11904: 0xC24F, + 21475 - 11904: 0xA466, + 21476 - 11904: 0xA56A, + 21477 - 11904: 0xA579, + 21478 - 11904: 0xA574, + 21480 - 11904: 0xA56F, + 21481 - 11904: 0xA56E, + 21482 - 11904: 0xA575, + 21483 - 11904: 0xA573, + 21484 - 11904: 0xA56C, + 21485 - 11904: 0xA57A, + 21486 - 11904: 0xA56D, + 21487 - 11904: 0xA569, + 21488 - 11904: 0xA578, + 21489 - 11904: 0xA577, + 21490 - 11904: 0xA576, + 21491 - 11904: 0xA56B, + 21493 - 11904: 0xA572, + 21494 - 11904: 0xFAED, + 21495 - 11904: 0x8FAD, + 21496 - 11904: 0xA571, + 21499 - 11904: 0xA57B, + 21500 - 11904: 0xA570, + 21502 - 11904: 0xFB59, + 21505 - 11904: 0xA653, + 21507 - 11904: 0xA659, + 21508 - 11904: 0xA655, + 21510 - 11904: 0xA65B, + 21511 - 11904: 0xC9C5, + 21512 - 11904: 0xA658, + 21513 - 11904: 0xA64E, + 21514 - 11904: 0xA651, + 21515 - 11904: 0xA654, + 21516 - 11904: 0xA650, + 21517 - 11904: 0xA657, + 21518 - 11904: 0xA65A, + 21519 - 11904: 0xA64F, + 21520 - 11904: 0xA652, + 21521 - 11904: 0xA656, + 21522 - 11904: 0xA65C, + 21523 - 11904: 0xFAEF, + 21524 - 11904: 0x96EF, + 21526 - 11904: 0x9DEC, + 21528 - 11904: 0xCA7E, + 21529 - 11904: 0xCA7B, + 21530 - 11904: 0x9DCA, + 21531 - 11904: 0xA767, + 21532 - 11904: 0xCA7C, + 21533 - 11904: 0xA75B, + 21534 - 11904: 0xA75D, + 21535 - 11904: 0xA775, + 21536 - 11904: 0xA770, + 21537 - 11904: 0xFD6D, + 21539 - 11904: 0x89EC, + 21540 - 11904: 0xCAA5, + 21541 - 11904: 0xCA7D, + 21542 - 11904: 0xA75F, + 21543 - 11904: 0xA761, + 21544 - 11904: 0xCAA4, + 21545 - 11904: 0xA768, + 21546 - 11904: 0xCA78, + 21547 - 11904: 0xA774, + 21548 - 11904: 0xA776, + 21549 - 11904: 0xA75C, + 21550 - 11904: 0xA76D, + 21551 - 11904: 0xFB44, + 21552 - 11904: 0xCA76, + 21553 - 11904: 0xA773, + 21554 - 11904: 0x9DE2, + 21555 - 11904: 0xA764, + 21556 - 11904: 0x8C75, + 21557 - 11904: 0xA76E, + 21558 - 11904: 0xA76F, + 21559 - 11904: 0xCA77, + 21560 - 11904: 0xA76C, + 21561 - 11904: 0xA76A, + 21563 - 11904: 0xA76B, + 21564 - 11904: 0xA771, + 21565 - 11904: 0xCAA1, + 21566 - 11904: 0xA75E, + 21568 - 11904: 0xA772, + 21569 - 11904: 0xCAA3, + 21570 - 11904: 0xA766, + 21571 - 11904: 0xA763, + 21573 - 11904: 0xCA7A, + 21574 - 11904: 0xA762, + 21575 - 11904: 0xCAA6, + 21576 - 11904: 0xA765, + 21578 - 11904: 0xA769, + 21579 - 11904: 0x9EC0, + 21580 - 11904: 0x87C5, + 21581 - 11904: 0x9E56, + 21582 - 11904: 0xA760, + 21583 - 11904: 0xCAA2, + 21588 - 11904: 0xCA79, + 21600 - 11904: 0xCBEB, + 21601 - 11904: 0xCBEA, + 21602 - 11904: 0xA94F, + 21603 - 11904: 0xCBED, + 21604 - 11904: 0xCBEF, + 21605 - 11904: 0xCBE4, + 21606 - 11904: 0xCBE7, + 21607 - 11904: 0xCBEE, + 21608 - 11904: 0xA950, + 21609 - 11904: 0x9F79, + 21610 - 11904: 0x9AC7, + 21611 - 11904: 0xCBE1, + 21612 - 11904: 0xCBE5, + 21613 - 11904: 0xFAF4, + 21615 - 11904: 0xCBE9, + 21616 - 11904: 0xCE49, + 21617 - 11904: 0xA94B, + 21618 - 11904: 0xCE4D, + 21619 - 11904: 0xA8FD, + 21620 - 11904: 0xCBE6, + 21621 - 11904: 0xA8FE, + 21622 - 11904: 0xA94C, + 21623 - 11904: 0xA945, + 21624 - 11904: 0xA941, + 21626 - 11904: 0xCBE2, + 21627 - 11904: 0xA944, + 21628 - 11904: 0xA949, + 21629 - 11904: 0xA952, + 21630 - 11904: 0xCBE3, + 21631 - 11904: 0xCBDC, + 21632 - 11904: 0xA943, + 21633 - 11904: 0xCBDD, + 21634 - 11904: 0xCBDF, + 21636 - 11904: 0xA946, + 21637 - 11904: 0x98A1, + 21638 - 11904: 0xA948, + 21639 - 11904: 0xCBDB, + 21640 - 11904: 0xCBE0, + 21643 - 11904: 0xA951, + 21644 - 11904: 0xA94D, + 21645 - 11904: 0xCBE8, + 21646 - 11904: 0xA953, + 21647 - 11904: 0xFAF8, + 21648 - 11904: 0xA94A, + 21649 - 11904: 0xCBDE, + 21650 - 11904: 0xA947, + 21651 - 11904: 0x89F0, + 21652 - 11904: 0x9E47, + 21653 - 11904: 0xA942, + 21654 - 11904: 0xA940, + 21655 - 11904: 0x9DF7, + 21656 - 11904: 0xCBEC, + 21658 - 11904: 0xA94E, + 21660 - 11904: 0x9FD3, + 21662 - 11904: 0x9ACA, + 21664 - 11904: 0xCE48, + 21665 - 11904: 0xCDFB, + 21666 - 11904: 0xCE4B, + 21667 - 11904: 0x89F1, + 21668 - 11904: 0xFAF9, + 21669 - 11904: 0xCDFD, + 21670 - 11904: 0xAB78, + 21671 - 11904: 0xABA8, + 21672 - 11904: 0xAB74, + 21673 - 11904: 0xABA7, + 21674 - 11904: 0xAB7D, + 21675 - 11904: 0xABA4, + 21676 - 11904: 0xAB72, + 21677 - 11904: 0xCDFC, + 21678 - 11904: 0xCE43, + 21679 - 11904: 0xABA3, + 21680 - 11904: 0xCE4F, + 21681 - 11904: 0xABA5, + 21682 - 11904: 0x8E5A, + 21683 - 11904: 0xAB79, + 21684 - 11904: 0x89F2, + 21686 - 11904: 0xCE45, + 21687 - 11904: 0xCE42, + 21688 - 11904: 0xAB77, + 21689 - 11904: 0x89F3, + 21690 - 11904: 0xCDFA, + 21691 - 11904: 0xABA6, + 21692 - 11904: 0xCE4A, + 21693 - 11904: 0xAB7C, + 21694 - 11904: 0xCE4C, + 21695 - 11904: 0xABA9, + 21696 - 11904: 0xAB73, + 21697 - 11904: 0xAB7E, + 21698 - 11904: 0xAB7B, + 21699 - 11904: 0xCE40, + 21700 - 11904: 0xABA1, + 21701 - 11904: 0xCE46, + 21702 - 11904: 0xCE47, + 21703 - 11904: 0xAB7A, + 21704 - 11904: 0xABA2, + 21705 - 11904: 0xAB76, + 21707 - 11904: 0x925D, + 21708 - 11904: 0x8B51, + 21709 - 11904: 0x92E0, + 21710 - 11904: 0xAB75, + 21711 - 11904: 0xCDFE, + 21712 - 11904: 0x89F4, + 21718 - 11904: 0xCE44, + 21722 - 11904: 0x9FD4, + 21726 - 11904: 0xCE4E, + 21728 - 11904: 0xD144, + 21729 - 11904: 0xADFB, + 21730 - 11904: 0xD0F1, + 21731 - 11904: 0x8A79, + 21732 - 11904: 0xD0F6, + 21733 - 11904: 0xADF4, + 21734 - 11904: 0xAE40, + 21735 - 11904: 0xD0F4, + 21736 - 11904: 0xADEF, + 21737 - 11904: 0xADF9, + 21738 - 11904: 0xADFE, + 21739 - 11904: 0xD0FB, + 21741 - 11904: 0xADFA, + 21742 - 11904: 0xADFD, + 21743 - 11904: 0x89F5, + 21745 - 11904: 0xD0FE, + 21746 - 11904: 0xADF5, + 21747 - 11904: 0xD0F5, + 21751 - 11904: 0xD142, + 21752 - 11904: 0xD143, + 21754 - 11904: 0xADF7, + 21755 - 11904: 0xD141, + 21756 - 11904: 0xADF3, + 21757 - 11904: 0xAE43, + 21759 - 11904: 0xD0F8, + 21761 - 11904: 0xADF1, + 21762 - 11904: 0x97A7, + 21763 - 11904: 0xD146, + 21764 - 11904: 0xD0F9, + 21765 - 11904: 0xD0FD, + 21766 - 11904: 0xADF6, + 21767 - 11904: 0xAE42, + 21768 - 11904: 0xD0FA, + 21769 - 11904: 0xADFC, + 21770 - 11904: 0xD140, + 21771 - 11904: 0xD147, + 21772 - 11904: 0xD4A1, + 21773 - 11904: 0x93BA, + 21774 - 11904: 0xD145, + 21775 - 11904: 0xAE44, + 21776 - 11904: 0xADF0, + 21777 - 11904: 0xD0FC, + 21778 - 11904: 0xD0F3, + 21779 - 11904: 0x9E58, + 21780 - 11904: 0xADF8, + 21783 - 11904: 0xD0F2, + 21784 - 11904: 0x89F6, + 21786 - 11904: 0xD0F7, + 21790 - 11904: 0x9E57, + 21795 - 11904: 0x89F7, + 21797 - 11904: 0x8A41, + 21798 - 11904: 0xD0F0, + 21799 - 11904: 0xAE41, + 21800 - 11904: 0x89F8, + 21802 - 11904: 0xD477, + 21803 - 11904: 0xFAF1, + 21804 - 11904: 0xB0E4, + 21805 - 11904: 0xD4A7, + 21806 - 11904: 0xB0E2, + 21807 - 11904: 0xB0DF, + 21808 - 11904: 0xD47C, + 21809 - 11904: 0xB0DB, + 21810 - 11904: 0xD4A2, + 21811 - 11904: 0xB0E6, + 21812 - 11904: 0xD476, + 21813 - 11904: 0xD47B, + 21814 - 11904: 0xD47A, + 21815 - 11904: 0xADF2, + 21816 - 11904: 0xB0E1, + 21817 - 11904: 0xD4A5, + 21819 - 11904: 0xD4A8, + 21820 - 11904: 0xD473, + 21822 - 11904: 0xB3E8, + 21823 - 11904: 0x89FA, + 21824 - 11904: 0xD4A9, + 21825 - 11904: 0xB0E7, + 21827 - 11904: 0xB0D9, + 21828 - 11904: 0xB0D6, + 21829 - 11904: 0xD47E, + 21830 - 11904: 0xB0D3, + 21831 - 11904: 0xFB42, + 21832 - 11904: 0xD4A6, + 21833 - 11904: 0xFABF, + 21834 - 11904: 0xB0DA, + 21835 - 11904: 0xD4AA, + 21837 - 11904: 0xD474, + 21838 - 11904: 0xD4A4, + 21839 - 11904: 0xB0DD, + 21840 - 11904: 0xD475, + 21841 - 11904: 0xD478, + 21842 - 11904: 0xD47D, + 21843 - 11904: 0xFBA3, + 21845 - 11904: 0xB0DE, + 21846 - 11904: 0xB0DC, + 21847 - 11904: 0xB0E8, + 21852 - 11904: 0xB0E3, + 21853 - 11904: 0xFAF7, + 21854 - 11904: 0xB0D7, + 21855 - 11904: 0xB1D2, + 21857 - 11904: 0xB0D8, + 21858 - 11904: 0xD479, + 21859 - 11904: 0xB0E5, + 21860 - 11904: 0xB0E0, + 21861 - 11904: 0xD4A3, + 21862 - 11904: 0xB0D5, + 21865 - 11904: 0x9E4E, + 21866 - 11904: 0xB0D4, + 21867 - 11904: 0x94DC, + 21873 - 11904: 0x95DA, + 21874 - 11904: 0x9DF8, + 21875 - 11904: 0x9F6A, + 21877 - 11904: 0xD471, + 21878 - 11904: 0xD472, + 21879 - 11904: 0xD86A, + 21881 - 11904: 0x8AB7, + 21883 - 11904: 0xB3D7, + 21884 - 11904: 0xB3DA, + 21885 - 11904: 0xD875, + 21886 - 11904: 0xB3EE, + 21887 - 11904: 0xD878, + 21888 - 11904: 0xB3D8, + 21889 - 11904: 0xD871, + 21890 - 11904: 0xB3DE, + 21891 - 11904: 0xB3E4, + 21892 - 11904: 0xB5BD, + 21894 - 11904: 0xFB46, + 21895 - 11904: 0xB3E2, + 21896 - 11904: 0xD86E, + 21897 - 11904: 0xB3EF, + 21898 - 11904: 0xB3DB, + 21899 - 11904: 0xB3E3, + 21900 - 11904: 0xD876, + 21901 - 11904: 0xDCD7, + 21902 - 11904: 0xD87B, + 21903 - 11904: 0xD86F, + 21904 - 11904: 0x8A46, + 21905 - 11904: 0xD866, + 21906 - 11904: 0xD873, + 21907 - 11904: 0xD86D, + 21908 - 11904: 0xB3E1, + 21909 - 11904: 0xD879, + 21912 - 11904: 0xB3DD, + 21913 - 11904: 0xB3F1, + 21914 - 11904: 0xB3EA, + 21916 - 11904: 0xB3DF, + 21917 - 11904: 0xB3DC, + 21919 - 11904: 0xB3E7, + 21921 - 11904: 0xD87A, + 21922 - 11904: 0xD86C, + 21923 - 11904: 0xD872, + 21924 - 11904: 0xD874, + 21925 - 11904: 0xD868, + 21926 - 11904: 0xD877, + 21927 - 11904: 0xB3D9, + 21928 - 11904: 0xD867, + 21929 - 11904: 0xFB47, + 21930 - 11904: 0xB3E0, + 21931 - 11904: 0xB3F0, + 21932 - 11904: 0xB3EC, + 21933 - 11904: 0xD869, + 21934 - 11904: 0xB3E6, + 21936 - 11904: 0x9148, + 21937 - 11904: 0xB3ED, + 21938 - 11904: 0xB3E9, + 21939 - 11904: 0xB3E5, + 21940 - 11904: 0x92DE, + 21941 - 11904: 0xD870, + 21945 - 11904: 0x8B53, + 21946 - 11904: 0x9DF6, + 21947 - 11904: 0xB3EB, + 21948 - 11904: 0x9BDA, + 21951 - 11904: 0xDCD5, + 21952 - 11904: 0xDCD1, + 21953 - 11904: 0x9D7E, + 21954 - 11904: 0xDCE0, + 21955 - 11904: 0xDCCA, + 21956 - 11904: 0xDCD3, + 21957 - 11904: 0xB6E5, + 21958 - 11904: 0xB6E6, + 21959 - 11904: 0xB6DE, + 21960 - 11904: 0xDCDC, + 21961 - 11904: 0xB6E8, + 21962 - 11904: 0xDCCF, + 21963 - 11904: 0xDCCE, + 21964 - 11904: 0xDCCC, + 21965 - 11904: 0xDCDE, + 21966 - 11904: 0xB6DC, + 21967 - 11904: 0xDCD8, + 21968 - 11904: 0xDCCD, + 21969 - 11904: 0xB6DF, + 21970 - 11904: 0xDCD6, + 21971 - 11904: 0xB6DA, + 21972 - 11904: 0xDCD2, + 21973 - 11904: 0xDCD9, + 21974 - 11904: 0xDCDB, + 21975 - 11904: 0x89FD, + 21976 - 11904: 0x99E4, + 21977 - 11904: 0xDCDF, + 21978 - 11904: 0xB6E3, + 21979 - 11904: 0xDCCB, + 21980 - 11904: 0xB6DD, + 21981 - 11904: 0xDCD0, + 21982 - 11904: 0x9E43, + 21983 - 11904: 0xB6D8, + 21985 - 11904: 0xB6E4, + 21986 - 11904: 0xDCDA, + 21987 - 11904: 0xB6E0, + 21988 - 11904: 0xB6E1, + 21989 - 11904: 0xB6E7, + 21990 - 11904: 0xB6DB, + 21991 - 11904: 0xA25F, + 21992 - 11904: 0xB6D9, + 21993 - 11904: 0xDCD4, + 21994 - 11904: 0x9DE9, + 21996 - 11904: 0x8F52, + 21999 - 11904: 0xB6E2, + 22000 - 11904: 0x9DF5, + 22001 - 11904: 0x9DF0, + 22002 - 11904: 0xDCDD, + 22005 - 11904: 0x99E7, + 22006 - 11904: 0xB9CD, + 22007 - 11904: 0xB9C8, + 22009 - 11904: 0xE155, + 22010 - 11904: 0xE151, + 22011 - 11904: 0x8BBD, + 22012 - 11904: 0xE14B, + 22013 - 11904: 0xB9C2, + 22014 - 11904: 0xB9BE, + 22015 - 11904: 0xE154, + 22016 - 11904: 0xB9BF, + 22017 - 11904: 0xE14E, + 22018 - 11904: 0xE150, + 22020 - 11904: 0xE153, + 22021 - 11904: 0xFB48, + 22022 - 11904: 0xB9C4, + 22024 - 11904: 0xB9CB, + 22025 - 11904: 0xB9C5, + 22028 - 11904: 0xE149, + 22029 - 11904: 0xB9C6, + 22030 - 11904: 0xB9C7, + 22031 - 11904: 0xE14C, + 22032 - 11904: 0xB9CC, + 22033 - 11904: 0x9FB7, + 22034 - 11904: 0xE14A, + 22035 - 11904: 0xE14F, + 22036 - 11904: 0xB9C3, + 22037 - 11904: 0xE148, + 22038 - 11904: 0xB9C9, + 22039 - 11904: 0xB9C1, + 22043 - 11904: 0xB9C0, + 22044 - 11904: 0xE14D, + 22045 - 11904: 0xE152, + 22046 - 11904: 0x9DD0, + 22047 - 11904: 0xB9CA, + 22048 - 11904: 0x9FEB, + 22049 - 11904: 0x8DA9, + 22050 - 11904: 0x9DCF, + 22051 - 11904: 0x98E1, + 22053 - 11904: 0x9DE5, + 22055 - 11904: 0xE147, + 22057 - 11904: 0xBC4D, + 22058 - 11904: 0xE547, + 22060 - 11904: 0xE544, + 22061 - 11904: 0x9DC8, + 22062 - 11904: 0xBC47, + 22063 - 11904: 0xBC53, + 22064 - 11904: 0xBC54, + 22066 - 11904: 0xBC4A, + 22067 - 11904: 0xE542, + 22068 - 11904: 0xBC4C, + 22069 - 11904: 0xE4F9, + 22070 - 11904: 0xBC52, + 22071 - 11904: 0xFB4F, + 22072 - 11904: 0xE546, + 22073 - 11904: 0xBC49, + 22074 - 11904: 0xE548, + 22075 - 11904: 0xBC48, + 22077 - 11904: 0xE543, + 22078 - 11904: 0xE545, + 22079 - 11904: 0xBC4B, + 22080 - 11904: 0xE541, + 22081 - 11904: 0xE4FA, + 22082 - 11904: 0xE4F7, + 22083 - 11904: 0x9DEB, + 22085 - 11904: 0xD86B, + 22086 - 11904: 0xE4FD, + 22088 - 11904: 0xE4F6, + 22089 - 11904: 0xE4FC, + 22090 - 11904: 0xE4FB, + 22092 - 11904: 0xE4F8, + 22093 - 11904: 0xFB54, + 22094 - 11904: 0xBC4F, + 22095 - 11904: 0xFB55, + 22096 - 11904: 0x9AA2, + 22098 - 11904: 0x8AD6, + 22099 - 11904: 0xBC4E, + 22100 - 11904: 0x9A5F, + 22103 - 11904: 0xBC50, + 22104 - 11904: 0xE4FE, + 22105 - 11904: 0xBEB2, + 22106 - 11904: 0xE540, + 22109 - 11904: 0x9EF5, + 22110 - 11904: 0xE945, + 22112 - 11904: 0xE8FD, + 22113 - 11904: 0x8FB7, + 22114 - 11904: 0xBEBE, + 22115 - 11904: 0xE942, + 22116 - 11904: 0xBEB6, + 22117 - 11904: 0xBEBA, + 22118 - 11904: 0xE941, + 22120 - 11904: 0xBEB9, + 22121 - 11904: 0xBEB5, + 22122 - 11904: 0xBEB8, + 22123 - 11904: 0xBEB3, + 22124 - 11904: 0xBEBD, + 22125 - 11904: 0xE943, + 22126 - 11904: 0xE8FE, + 22127 - 11904: 0xBEBC, + 22128 - 11904: 0xE8FC, + 22129 - 11904: 0xBEBB, + 22130 - 11904: 0xE944, + 22131 - 11904: 0xE940, + 22132 - 11904: 0xBC51, + 22134 - 11904: 0xBEBF, + 22135 - 11904: 0xE946, + 22136 - 11904: 0xBEB7, + 22137 - 11904: 0xBEB4, + 22138 - 11904: 0x9AD2, + 22139 - 11904: 0x9E6A, + 22140 - 11904: 0x9EE8, + 22142 - 11904: 0xECC6, + 22143 - 11904: 0xECC8, + 22144 - 11904: 0xC07B, + 22145 - 11904: 0xECC9, + 22146 - 11904: 0xECC7, + 22147 - 11904: 0xECC5, + 22148 - 11904: 0xECC4, + 22149 - 11904: 0xC07D, + 22150 - 11904: 0xECC3, + 22151 - 11904: 0xC07E, + 22153 - 11904: 0x8BBF, + 22154 - 11904: 0x91C2, + 22155 - 11904: 0x9D62, + 22156 - 11904: 0xECC1, + 22157 - 11904: 0xECC2, + 22158 - 11904: 0xC07A, + 22159 - 11904: 0xC0A1, + 22160 - 11904: 0xC07C, + 22162 - 11904: 0x9260, + 22163 - 11904: 0xECC0, + 22165 - 11904: 0xC250, + 22167 - 11904: 0xEFBC, + 22168 - 11904: 0xEFBA, + 22169 - 11904: 0xEFBF, + 22170 - 11904: 0xEFBD, + 22172 - 11904: 0xEFBB, + 22173 - 11904: 0xEFBE, + 22174 - 11904: 0x925E, + 22175 - 11904: 0x91C1, + 22177 - 11904: 0x8AC5, + 22180 - 11904: 0x97A3, + 22181 - 11904: 0xC360, + 22182 - 11904: 0xF1F2, + 22183 - 11904: 0xF1F3, + 22184 - 11904: 0xC456, + 22186 - 11904: 0xF1F4, + 22187 - 11904: 0xF1F0, + 22188 - 11904: 0xF1F5, + 22189 - 11904: 0xF1F1, + 22190 - 11904: 0xC251, + 22191 - 11904: 0x8B6C, + 22193 - 11904: 0x8D7E, + 22194 - 11904: 0xF3FE, + 22195 - 11904: 0xF441, + 22196 - 11904: 0xC459, + 22197 - 11904: 0xF440, + 22198 - 11904: 0xC458, + 22199 - 11904: 0xC457, + 22201 - 11904: 0x9C54, + 22204 - 11904: 0xC45A, + 22205 - 11904: 0xF5C5, + 22206 - 11904: 0xF5C6, + 22207 - 11904: 0x9DBD, + 22208 - 11904: 0xC4DA, + 22209 - 11904: 0xC4D9, + 22210 - 11904: 0xC4DB, + 22211 - 11904: 0xF5C4, + 22213 - 11904: 0xF6D8, + 22214 - 11904: 0xF6D7, + 22216 - 11904: 0xC56D, + 22217 - 11904: 0xC56F, + 22218 - 11904: 0xC56E, + 22219 - 11904: 0xF6D9, + 22220 - 11904: 0xC5C8, + 22221 - 11904: 0xF8A6, + 22225 - 11904: 0xC5F1, + 22227 - 11904: 0xF8A5, + 22228 - 11904: 0xF8EE, + 22230 - 11904: 0x9CC5, + 22231 - 11904: 0xC949, + 22234 - 11904: 0xA57D, + 22235 - 11904: 0xA57C, + 22237 - 11904: 0xA65F, + 22238 - 11904: 0xA65E, + 22239 - 11904: 0xC9C7, + 22240 - 11904: 0xA65D, + 22241 - 11904: 0xC9C6, + 22242 - 11904: 0x895B, + 22244 - 11904: 0xA779, + 22245 - 11904: 0xCAA9, + 22247 - 11904: 0xCAA8, + 22250 - 11904: 0xA777, + 22251 - 11904: 0xA77A, + 22253 - 11904: 0xFB5C, + 22254 - 11904: 0xCAA7, + 22255 - 11904: 0xFB5B, + 22256 - 11904: 0xA778, + 22257 - 11904: 0xFB57, + 22263 - 11904: 0xCBF0, + 22265 - 11904: 0xCBF1, + 22266 - 11904: 0xA954, + 22267 - 11904: 0x8765, + 22269 - 11904: 0x98C7, + 22271 - 11904: 0xABAA, + 22272 - 11904: 0xFB5A, + 22273 - 11904: 0xD148, + 22274 - 11904: 0xD149, + 22275 - 11904: 0xAE45, + 22276 - 11904: 0xAE46, + 22279 - 11904: 0xD4AC, + 22280 - 11904: 0xB0E9, + 22281 - 11904: 0xB0EB, + 22282 - 11904: 0xD4AB, + 22283 - 11904: 0xB0EA, + 22284 - 11904: 0xD87C, + 22285 - 11904: 0xB3F2, + 22290 - 11904: 0xB6E9, + 22291 - 11904: 0xB6EA, + 22292 - 11904: 0xDCE1, + 22293 - 11904: 0x9CEE, + 22294 - 11904: 0xB9CF, + 22296 - 11904: 0xB9CE, + 22298 - 11904: 0xE549, + 22299 - 11904: 0xE948, + 22300 - 11904: 0xE947, + 22301 - 11904: 0x92E2, + 22302 - 11904: 0xF96B, + 22303 - 11904: 0xA467, + 22304 - 11904: 0xC959, + 22306 - 11904: 0xC96E, + 22307 - 11904: 0xC96F, + 22312 - 11904: 0xA662, + 22313 - 11904: 0xA666, + 22314 - 11904: 0xC9C9, + 22316 - 11904: 0xA664, + 22317 - 11904: 0xA663, + 22318 - 11904: 0xC9C8, + 22319 - 11904: 0xA665, + 22320 - 11904: 0xA661, + 22322 - 11904: 0x94A7, + 22323 - 11904: 0xA660, + 22324 - 11904: 0xC9CA, + 22331 - 11904: 0xA7A6, + 22333 - 11904: 0x8CCC, + 22334 - 11904: 0xA7A3, + 22335 - 11904: 0x9BD4, + 22336 - 11904: 0xA77D, + 22337 - 11904: 0xCAAA, + 22338 - 11904: 0xFB64, + 22339 - 11904: 0xFB76, + 22341 - 11904: 0xCAAB, + 22342 - 11904: 0xFB60, + 22343 - 11904: 0xA7A1, + 22345 - 11904: 0xCAAD, + 22346 - 11904: 0xA77B, + 22347 - 11904: 0xCAAE, + 22348 - 11904: 0xCAAC, + 22349 - 11904: 0xA77E, + 22350 - 11904: 0xA7A2, + 22351 - 11904: 0xA7A5, + 22352 - 11904: 0xA7A4, + 22353 - 11904: 0xA77C, + 22354 - 11904: 0xCAAF, + 22356 - 11904: 0x99E5, + 22359 - 11904: 0x9AC2, + 22363 - 11904: 0x91FB, + 22367 - 11904: 0xA073, + 22369 - 11904: 0xA959, + 22370 - 11904: 0xCBFE, + 22372 - 11904: 0xA95B, + 22374 - 11904: 0xA95A, + 22375 - 11904: 0x9F72, + 22376 - 11904: 0xCC40, + 22377 - 11904: 0xA958, + 22378 - 11904: 0xA957, + 22379 - 11904: 0xCBF5, + 22381 - 11904: 0xCBF4, + 22383 - 11904: 0xCBF2, + 22384 - 11904: 0xCBF7, + 22385 - 11904: 0xCBF6, + 22386 - 11904: 0xCBF3, + 22387 - 11904: 0xCBFC, + 22388 - 11904: 0xCBFD, + 22389 - 11904: 0xCBFA, + 22390 - 11904: 0xCBF8, + 22391 - 11904: 0xA956, + 22394 - 11904: 0x9FCC, + 22395 - 11904: 0xCBFB, + 22396 - 11904: 0xA95C, + 22397 - 11904: 0xCC41, + 22398 - 11904: 0x98A5, + 22399 - 11904: 0x92E8, + 22400 - 11904: 0xCBF9, + 22402 - 11904: 0xABAB, + 22403 - 11904: 0xA955, + 22408 - 11904: 0x9BBC, + 22410 - 11904: 0x96F3, + 22411 - 11904: 0xABAC, + 22412 - 11904: 0xCE54, + 22413 - 11904: 0x92E7, + 22415 - 11904: 0xCE5A, + 22416 - 11904: 0xFC67, + 22419 - 11904: 0xABB2, + 22420 - 11904: 0xCE58, + 22421 - 11904: 0xCE5E, + 22423 - 11904: 0xCE55, + 22424 - 11904: 0xCE59, + 22425 - 11904: 0xCE5B, + 22426 - 11904: 0xCE5D, + 22427 - 11904: 0xCE57, + 22428 - 11904: 0x8B7D, + 22429 - 11904: 0xCE56, + 22430 - 11904: 0xCE51, + 22431 - 11904: 0xCE52, + 22432 - 11904: 0xABAD, + 22433 - 11904: 0x9BF4, + 22434 - 11904: 0xABAF, + 22435 - 11904: 0xABAE, + 22436 - 11904: 0xCE53, + 22437 - 11904: 0xCE5C, + 22439 - 11904: 0x9EF7, + 22442 - 11904: 0x9EC1, + 22446 - 11904: 0xABB1, + 22451 - 11904: 0x87C3, + 22452 - 11904: 0x996F, + 22453 - 11904: 0xCE50, + 22454 - 11904: 0xD153, + 22456 - 11904: 0xD152, + 22457 - 11904: 0xD157, + 22458 - 11904: 0xD14E, + 22459 - 11904: 0x96F1, + 22460 - 11904: 0xD151, + 22461 - 11904: 0xD150, + 22462 - 11904: 0x8E41, + 22463 - 11904: 0xD154, + 22465 - 11904: 0xD158, + 22466 - 11904: 0xAE47, + 22467 - 11904: 0xAE4A, + 22468 - 11904: 0x954A, + 22470 - 11904: 0xD14F, + 22471 - 11904: 0xD155, + 22472 - 11904: 0x97E6, + 22475 - 11904: 0xAE49, + 22476 - 11904: 0xD14A, + 22478 - 11904: 0xABB0, + 22479 - 11904: 0xD4BA, + 22480 - 11904: 0xD156, + 22482 - 11904: 0xD14D, + 22484 - 11904: 0xAE48, + 22485 - 11904: 0xD14C, + 22487 - 11904: 0x96F5, + 22492 - 11904: 0xD4B1, + 22493 - 11904: 0x92E6, + 22494 - 11904: 0x9F42, + 22495 - 11904: 0xB0EC, + 22496 - 11904: 0xB0F0, + 22497 - 11904: 0xD4C1, + 22498 - 11904: 0xD4AF, + 22499 - 11904: 0xD4BD, + 22500 - 11904: 0xB0F1, + 22501 - 11904: 0xD4BF, + 22502 - 11904: 0xFB67, + 22503 - 11904: 0xD4C5, + 22505 - 11904: 0xD4C9, + 22508 - 11904: 0xD4C0, + 22509 - 11904: 0xD4B4, + 22510 - 11904: 0xD4BC, + 22511 - 11904: 0x99A9, + 22512 - 11904: 0xD4CA, + 22513 - 11904: 0xD4C8, + 22514 - 11904: 0xD4BE, + 22515 - 11904: 0xD4B9, + 22516 - 11904: 0xD4B2, + 22517 - 11904: 0xD8A6, + 22518 - 11904: 0xD4B0, + 22519 - 11904: 0xB0F5, + 22520 - 11904: 0xD4B7, + 22521 - 11904: 0xB0F6, + 22522 - 11904: 0xB0F2, + 22523 - 11904: 0xD4AD, + 22524 - 11904: 0xD4C3, + 22525 - 11904: 0xD4B5, + 22526 - 11904: 0xFAE6, + 22528 - 11904: 0xD4B3, + 22529 - 11904: 0xD4C6, + 22530 - 11904: 0xB0F3, + 22531 - 11904: 0xFB69, + 22532 - 11904: 0xD4CC, + 22533 - 11904: 0xB0ED, + 22534 - 11904: 0xB0EF, + 22535 - 11904: 0xD4BB, + 22536 - 11904: 0xD4B6, + 22537 - 11904: 0xAE4B, + 22538 - 11904: 0xB0EE, + 22539 - 11904: 0xD4B8, + 22540 - 11904: 0xD4C7, + 22541 - 11904: 0xD4CB, + 22542 - 11904: 0xD4C2, + 22544 - 11904: 0xD4C4, + 22546 - 11904: 0x97E5, + 22548 - 11904: 0xD4AE, + 22552 - 11904: 0x87C8, + 22553 - 11904: 0xD8A1, + 22555 - 11904: 0xD8AA, + 22556 - 11904: 0xD8A9, + 22557 - 11904: 0xB3FA, + 22558 - 11904: 0xD8A2, + 22560 - 11904: 0xB3FB, + 22561 - 11904: 0xB3F9, + 22562 - 11904: 0x967D, + 22563 - 11904: 0xD8A4, + 22564 - 11904: 0xB3F6, + 22565 - 11904: 0xD8A8, + 22566 - 11904: 0xFB6C, + 22567 - 11904: 0xD8A3, + 22568 - 11904: 0xD8A5, + 22569 - 11904: 0xD87D, + 22570 - 11904: 0xB3F4, + 22572 - 11904: 0xD8B2, + 22573 - 11904: 0xD8B1, + 22574 - 11904: 0xD8AE, + 22575 - 11904: 0xB3F3, + 22576 - 11904: 0xB3F7, + 22577 - 11904: 0xB3F8, + 22578 - 11904: 0xD14B, + 22579 - 11904: 0xD8AB, + 22580 - 11904: 0xB3F5, + 22581 - 11904: 0xB0F4, + 22582 - 11904: 0xD8AD, + 22583 - 11904: 0xD87E, + 22584 - 11904: 0xD8B0, + 22585 - 11904: 0xD8AF, + 22586 - 11904: 0x99A2, + 22587 - 11904: 0xD8B3, + 22589 - 11904: 0xDCEF, + 22591 - 11904: 0xD8AC, + 22592 - 11904: 0x9ABB, + 22596 - 11904: 0x9A65, + 22599 - 11904: 0x944E, + 22600 - 11904: 0xD8A7, + 22601 - 11904: 0xDCE7, + 22602 - 11904: 0xB6F4, + 22603 - 11904: 0xB6F7, + 22604 - 11904: 0xB6F2, + 22605 - 11904: 0xDCE6, + 22606 - 11904: 0xDCEA, + 22607 - 11904: 0xDCE5, + 22609 - 11904: 0xB6EC, + 22610 - 11904: 0xB6F6, + 22611 - 11904: 0xDCE2, + 22612 - 11904: 0xB6F0, + 22613 - 11904: 0xDCE9, + 22615 - 11904: 0xB6EE, + 22616 - 11904: 0xB6ED, + 22617 - 11904: 0xDCEC, + 22618 - 11904: 0xB6EF, + 22619 - 11904: 0xDCEE, + 22620 - 11904: 0xFB6E, + 22621 - 11904: 0xDCEB, + 22622 - 11904: 0xB6EB, + 22623 - 11904: 0x99DF, + 22626 - 11904: 0xB6F5, + 22627 - 11904: 0xDCF0, + 22628 - 11904: 0xDCE4, + 22629 - 11904: 0xDCED, + 22632 - 11904: 0xDCE3, + 22633 - 11904: 0x98E3, + 22635 - 11904: 0xB6F1, + 22636 - 11904: 0x9254, + 22637 - 11904: 0xB6F3, + 22639 - 11904: 0xDCE8, + 22641 - 11904: 0xDCF1, + 22642 - 11904: 0x967B, + 22643 - 11904: 0x8AAF, + 22644 - 11904: 0xE15D, + 22645 - 11904: 0xB9D0, + 22646 - 11904: 0xE163, + 22649 - 11904: 0xB9D5, + 22650 - 11904: 0xE15F, + 22651 - 11904: 0xE166, + 22652 - 11904: 0xE157, + 22653 - 11904: 0xB9D7, + 22654 - 11904: 0xB9D1, + 22655 - 11904: 0xE15C, + 22656 - 11904: 0xBC55, + 22657 - 11904: 0xE15B, + 22658 - 11904: 0xE164, + 22659 - 11904: 0xB9D2, + 22661 - 11904: 0xB9D6, + 22662 - 11904: 0xE15A, + 22663 - 11904: 0xE160, + 22664 - 11904: 0xE165, + 22665 - 11904: 0xE156, + 22666 - 11904: 0xB9D4, + 22667 - 11904: 0xE15E, + 22670 - 11904: 0xE162, + 22671 - 11904: 0xE168, + 22672 - 11904: 0xE158, + 22673 - 11904: 0xE161, + 22674 - 11904: 0x8C77, + 22675 - 11904: 0xB9D3, + 22676 - 11904: 0xE167, + 22678 - 11904: 0x87B0, + 22680 - 11904: 0xE159, + 22681 - 11904: 0x8BAF, + 22682 - 11904: 0x9EBD, + 22684 - 11904: 0xBC59, + 22685 - 11904: 0xE54B, + 22686 - 11904: 0xBC57, + 22687 - 11904: 0xBC56, + 22688 - 11904: 0xE54D, + 22689 - 11904: 0xE552, + 22691 - 11904: 0xE54E, + 22693 - 11904: 0xE551, + 22694 - 11904: 0xBC5C, + 22695 - 11904: 0x9EE6, + 22696 - 11904: 0xBEA5, + 22697 - 11904: 0xBC5B, + 22698 - 11904: 0xFB6F, + 22699 - 11904: 0xE54A, + 22700 - 11904: 0xE550, + 22702 - 11904: 0xBC5A, + 22703 - 11904: 0xE54F, + 22704 - 11904: 0x8EE1, + 22705 - 11904: 0xE54C, + 22707 - 11904: 0xBC58, + 22709 - 11904: 0x9B7D, + 22710 - 11904: 0x9C7E, + 22714 - 11904: 0xE94D, + 22715 - 11904: 0xF9D9, + 22716 - 11904: 0xE94F, + 22717 - 11904: 0xE94A, + 22718 - 11904: 0xBEC1, + 22719 - 11904: 0xE94C, + 22721 - 11904: 0xBEC0, + 22722 - 11904: 0xE94E, + 22725 - 11904: 0xBEC3, + 22726 - 11904: 0xE950, + 22727 - 11904: 0xBEC2, + 22728 - 11904: 0xE949, + 22729 - 11904: 0xE94B, + 22731 - 11904: 0x92EA, + 22734 - 11904: 0xC0A5, + 22735 - 11904: 0xECCC, + 22736 - 11904: 0x8C78, + 22737 - 11904: 0xC0A4, + 22738 - 11904: 0xECCD, + 22739 - 11904: 0xC0A3, + 22740 - 11904: 0xECCB, + 22741 - 11904: 0xC0A2, + 22742 - 11904: 0xECCA, + 22744 - 11904: 0xC253, + 22745 - 11904: 0xC252, + 22746 - 11904: 0xF1F6, + 22747 - 11904: 0xF1F8, + 22748 - 11904: 0xFB72, + 22749 - 11904: 0xF1F7, + 22750 - 11904: 0xC361, + 22751 - 11904: 0xC362, + 22752 - 11904: 0xFB71, + 22754 - 11904: 0xC363, + 22755 - 11904: 0xF442, + 22756 - 11904: 0xC45B, + 22759 - 11904: 0xF7D3, + 22760 - 11904: 0xF7D2, + 22761 - 11904: 0xC5F2, + 22763 - 11904: 0xA468, + 22764 - 11904: 0xA4D0, + 22767 - 11904: 0xA7A7, + 22768 - 11904: 0x895C, + 22770 - 11904: 0x98F0, + 22771 - 11904: 0x96F2, + 22772 - 11904: 0xCE5F, + 22777 - 11904: 0xB3FC, + 22778 - 11904: 0xB3FD, + 22779 - 11904: 0xFB74, + 22780 - 11904: 0xDCF2, + 22781 - 11904: 0xB9D8, + 22782 - 11904: 0xE169, + 22783 - 11904: 0xE553, + 22786 - 11904: 0x8BC1, + 22787 - 11904: 0xC95A, + 22788 - 11904: 0x895D, + 22789 - 11904: 0x89DE, + 22790 - 11904: 0xCAB0, + 22791 - 11904: 0x895E, + 22794 - 11904: 0xC6CA, + 22796 - 11904: 0xCC42, + 22797 - 11904: 0xCE60, + 22798 - 11904: 0xD159, + 22799 - 11904: 0xAE4C, + 22801 - 11904: 0xFE42, + 22802 - 11904: 0xF1F9, + 22804 - 11904: 0xC4DC, + 22805 - 11904: 0xA469, + 22806 - 11904: 0xA57E, + 22807 - 11904: 0xC970, + 22809 - 11904: 0xA667, + 22810 - 11904: 0xA668, + 22812 - 11904: 0xA95D, + 22813 - 11904: 0x8768, + 22815 - 11904: 0xFB7B, + 22816 - 11904: 0xB0F7, + 22818 - 11904: 0xB9DA, + 22820 - 11904: 0xB9DB, + 22821 - 11904: 0xB9D9, + 22823 - 11904: 0xA46A, + 22825 - 11904: 0xA4D1, + 22826 - 11904: 0xA4D3, + 22827 - 11904: 0xA4D2, + 22828 - 11904: 0xC95B, + 22829 - 11904: 0xA4D4, + 22830 - 11904: 0xA5A1, + 22831 - 11904: 0xC971, + 22833 - 11904: 0xA5A2, + 22834 - 11904: 0x895F, + 22836 - 11904: 0x8960, + 22839 - 11904: 0xA669, + 22840 - 11904: 0xA66A, + 22844 - 11904: 0xC9CB, + 22846 - 11904: 0xA7A8, + 22848 - 11904: 0xCAB1, + 22852 - 11904: 0xA961, + 22853 - 11904: 0xCC43, + 22855 - 11904: 0xA95F, + 22856 - 11904: 0xA960, + 22857 - 11904: 0xA95E, + 22858 - 11904: 0xD15A, + 22862 - 11904: 0xABB6, + 22863 - 11904: 0xABB5, + 22864 - 11904: 0xABB7, + 22865 - 11904: 0xABB4, + 22867 - 11904: 0xCE61, + 22868 - 11904: 0xA962, + 22869 - 11904: 0xABB3, + 22871 - 11904: 0xAE4D, + 22872 - 11904: 0xAE4E, + 22874 - 11904: 0xAE4F, + 22876 - 11904: 0xD4CD, + 22880 - 11904: 0xB3FE, + 22881 - 11904: 0xD8B4, + 22882 - 11904: 0xB0F8, + 22885 - 11904: 0x9BCD, + 22887 - 11904: 0xB6F8, + 22889 - 11904: 0xB9DD, + 22890 - 11904: 0xB9DC, + 22891 - 11904: 0xE16A, + 22893 - 11904: 0xBC5D, + 22894 - 11904: 0xBEC4, + 22896 - 11904: 0xEFC0, + 22897 - 11904: 0xF6DA, + 22898 - 11904: 0xF7D4, + 22899 - 11904: 0xA46B, + 22900 - 11904: 0xA5A3, + 22901 - 11904: 0x9DD3, + 22902 - 11904: 0xA5A4, + 22903 - 11904: 0xC9D1, + 22904 - 11904: 0xA66C, + 22905 - 11904: 0xA66F, + 22907 - 11904: 0xC9CF, + 22908 - 11904: 0xC9CD, + 22909 - 11904: 0xA66E, + 22910 - 11904: 0xC9D0, + 22911 - 11904: 0xC9D2, + 22912 - 11904: 0xC9CC, + 22913 - 11904: 0xA671, + 22914 - 11904: 0xA670, + 22915 - 11904: 0xA66D, + 22916 - 11904: 0xA66B, + 22917 - 11904: 0xC9CE, + 22921 - 11904: 0x984C, + 22922 - 11904: 0xA7B3, + 22925 - 11904: 0xA7B0, + 22926 - 11904: 0xCAB6, + 22927 - 11904: 0xCAB9, + 22928 - 11904: 0xCAB8, + 22930 - 11904: 0xA7AA, + 22931 - 11904: 0xA7B2, + 22932 - 11904: 0x9752, + 22934 - 11904: 0xA7AF, + 22935 - 11904: 0xCAB5, + 22936 - 11904: 0xCAB3, + 22937 - 11904: 0xA7AE, + 22938 - 11904: 0x95C3, + 22941 - 11904: 0xA7A9, + 22942 - 11904: 0xA7AC, + 22943 - 11904: 0x9BB6, + 22944 - 11904: 0xCAB4, + 22945 - 11904: 0xCABB, + 22946 - 11904: 0xCAB7, + 22947 - 11904: 0xA7AD, + 22948 - 11904: 0xA7B1, + 22949 - 11904: 0xA7B4, + 22950 - 11904: 0xCAB2, + 22951 - 11904: 0xCABA, + 22952 - 11904: 0xA7AB, + 22956 - 11904: 0x9AB9, + 22958 - 11904: 0xA967, + 22959 - 11904: 0xA96F, + 22960 - 11904: 0x97B3, + 22961 - 11904: 0xCC4F, + 22962 - 11904: 0xCC48, + 22963 - 11904: 0xA970, + 22964 - 11904: 0xCC53, + 22965 - 11904: 0xCC44, + 22966 - 11904: 0xCC4B, + 22967 - 11904: 0x9F74, + 22968 - 11904: 0x92F1, + 22969 - 11904: 0xA966, + 22970 - 11904: 0xCC45, + 22971 - 11904: 0xA964, + 22972 - 11904: 0xCC4C, + 22973 - 11904: 0xCC50, + 22974 - 11904: 0xA963, + 22975 - 11904: 0x8CFA, + 22976 - 11904: 0xCC51, + 22977 - 11904: 0xCC4A, + 22979 - 11904: 0xCC4D, + 22980 - 11904: 0x97DF, + 22981 - 11904: 0xA972, + 22982 - 11904: 0xA969, + 22983 - 11904: 0xCC54, + 22984 - 11904: 0xCC52, + 22985 - 11904: 0xFBA6, + 22986 - 11904: 0xA96E, + 22987 - 11904: 0xA96C, + 22988 - 11904: 0xCC49, + 22989 - 11904: 0xA96B, + 22990 - 11904: 0xCC47, + 22991 - 11904: 0xCC46, + 22992 - 11904: 0xA96A, + 22993 - 11904: 0xA968, + 22994 - 11904: 0xA971, + 22995 - 11904: 0xA96D, + 22996 - 11904: 0xA965, + 22998 - 11904: 0xCC4E, + 23000 - 11904: 0xABB9, + 23001 - 11904: 0xFBAB, + 23002 - 11904: 0xABC0, + 23003 - 11904: 0xCE6F, + 23004 - 11904: 0xABB8, + 23005 - 11904: 0xCE67, + 23006 - 11904: 0xCE63, + 23008 - 11904: 0xCE73, + 23009 - 11904: 0xCE62, + 23011 - 11904: 0xABBB, + 23012 - 11904: 0xCE6C, + 23013 - 11904: 0xABBE, + 23014 - 11904: 0xABC1, + 23016 - 11904: 0xABBC, + 23017 - 11904: 0xCE70, + 23018 - 11904: 0xABBF, + 23019 - 11904: 0x9877, + 23020 - 11904: 0xAE56, + 23021 - 11904: 0xCE76, + 23022 - 11904: 0xCE64, + 23023 - 11904: 0x9854, + 23024 - 11904: 0x95C5, + 23025 - 11904: 0xCE66, + 23026 - 11904: 0xCE6D, + 23027 - 11904: 0xCE71, + 23028 - 11904: 0xCE75, + 23029 - 11904: 0xCE72, + 23030 - 11904: 0xCE6B, + 23031 - 11904: 0xCE6E, + 23032 - 11904: 0x9D55, + 23033 - 11904: 0xFBB2, + 23034 - 11904: 0xCE68, + 23035 - 11904: 0xABC3, + 23036 - 11904: 0xCE6A, + 23037 - 11904: 0xCE69, + 23038 - 11904: 0xCE74, + 23039 - 11904: 0xABBA, + 23040 - 11904: 0xCE65, + 23041 - 11904: 0xABC2, + 23042 - 11904: 0x957E, + 23043 - 11904: 0xABBD, + 23049 - 11904: 0xAE5C, + 23050 - 11904: 0xD162, + 23051 - 11904: 0x9742, + 23052 - 11904: 0xAE5B, + 23053 - 11904: 0x94E6, + 23055 - 11904: 0xD160, + 23057 - 11904: 0xAE50, + 23058 - 11904: 0x92F5, + 23059 - 11904: 0xAE55, + 23061 - 11904: 0xD15F, + 23062 - 11904: 0xD15C, + 23063 - 11904: 0xD161, + 23064 - 11904: 0xAE51, + 23065 - 11904: 0xD15B, + 23066 - 11904: 0x8CC5, + 23067 - 11904: 0xAE54, + 23068 - 11904: 0xAE52, + 23070 - 11904: 0xD163, + 23071 - 11904: 0xAE53, + 23072 - 11904: 0xAE57, + 23073 - 11904: 0x92FD, + 23075 - 11904: 0xAE58, + 23076 - 11904: 0xFBA2, + 23077 - 11904: 0xAE5A, + 23079 - 11904: 0x9C51, + 23081 - 11904: 0xAE59, + 23082 - 11904: 0x94E9, + 23083 - 11904: 0x985C, + 23084 - 11904: 0x92F0, + 23085 - 11904: 0xD15D, + 23086 - 11904: 0xD15E, + 23091 - 11904: 0xD164, + 23093 - 11904: 0xD4D4, + 23094 - 11904: 0xB0F9, + 23095 - 11904: 0xD8C2, + 23096 - 11904: 0xD4D3, + 23097 - 11904: 0xD4E6, + 23100 - 11904: 0xB140, + 23101 - 11904: 0x944C, + 23102 - 11904: 0xD4E4, + 23104 - 11904: 0xB0FE, + 23105 - 11904: 0xB0FA, + 23106 - 11904: 0xD4ED, + 23107 - 11904: 0xD4DD, + 23108 - 11904: 0xD4E0, + 23109 - 11904: 0x916B, + 23110 - 11904: 0xB143, + 23111 - 11904: 0xD4EA, + 23112 - 11904: 0xD4E2, + 23113 - 11904: 0xB0FB, + 23114 - 11904: 0xB144, + 23116 - 11904: 0xD4E7, + 23117 - 11904: 0xD4E5, + 23120 - 11904: 0xD4D6, + 23121 - 11904: 0xD4EB, + 23122 - 11904: 0xD4DF, + 23123 - 11904: 0xD4DA, + 23124 - 11904: 0x8B78, + 23125 - 11904: 0xD4D0, + 23126 - 11904: 0xD4EC, + 23127 - 11904: 0xD4DC, + 23128 - 11904: 0xD4CF, + 23129 - 11904: 0x94E2, + 23130 - 11904: 0xB142, + 23131 - 11904: 0xD4E1, + 23132 - 11904: 0xD4EE, + 23133 - 11904: 0xD4DE, + 23134 - 11904: 0xD4D2, + 23135 - 11904: 0xD4D7, + 23136 - 11904: 0xD4CE, + 23137 - 11904: 0x984F, + 23138 - 11904: 0xB141, + 23139 - 11904: 0xFBB5, + 23140 - 11904: 0xD4DB, + 23141 - 11904: 0xD4D8, + 23142 - 11904: 0xB0FC, + 23143 - 11904: 0xD4D1, + 23144 - 11904: 0x9271, + 23145 - 11904: 0xD4E9, + 23146 - 11904: 0xB0FD, + 23147 - 11904: 0x9365, + 23148 - 11904: 0xD4D9, + 23149 - 11904: 0xD4D5, + 23150 - 11904: 0x985B, + 23152 - 11904: 0xD4E8, + 23153 - 11904: 0x9850, + 23159 - 11904: 0xFBB8, + 23160 - 11904: 0xD8BB, + 23161 - 11904: 0x97BC, + 23162 - 11904: 0xD8B8, + 23163 - 11904: 0xD8C9, + 23164 - 11904: 0xD8BD, + 23165 - 11904: 0xD8CA, + 23166 - 11904: 0x92F3, + 23167 - 11904: 0xB442, + 23169 - 11904: 0x9340, + 23170 - 11904: 0x984D, + 23171 - 11904: 0xD8C6, + 23172 - 11904: 0xD8C3, + 23174 - 11904: 0x9572, + 23176 - 11904: 0xFDEF, + 23178 - 11904: 0xD8C4, + 23179 - 11904: 0xD8C7, + 23180 - 11904: 0xD8CB, + 23182 - 11904: 0xD4E3, + 23183 - 11904: 0xD8CD, + 23184 - 11904: 0xDD47, + 23185 - 11904: 0xFDC1, + 23186 - 11904: 0xB443, + 23187 - 11904: 0xD8CE, + 23188 - 11904: 0xD8B6, + 23189 - 11904: 0xD8C0, + 23190 - 11904: 0xFBBA, + 23191 - 11904: 0xD8C5, + 23193 - 11904: 0x92EB, + 23194 - 11904: 0xB441, + 23195 - 11904: 0xB444, + 23196 - 11904: 0xD8CC, + 23197 - 11904: 0xD8CF, + 23198 - 11904: 0xD8BA, + 23199 - 11904: 0xD8B7, + 23200 - 11904: 0xFC73, + 23201 - 11904: 0x97B7, + 23202 - 11904: 0xD8B9, + 23204 - 11904: 0x876F, + 23205 - 11904: 0xD8BE, + 23206 - 11904: 0xD8BC, + 23207 - 11904: 0xB445, + 23209 - 11904: 0xD8C8, + 23211 - 11904: 0xFBB4, + 23212 - 11904: 0xD8BF, + 23214 - 11904: 0xD8C1, + 23215 - 11904: 0xD8B5, + 23216 - 11904: 0xDCFA, + 23217 - 11904: 0xDCF8, + 23218 - 11904: 0xB742, + 23219 - 11904: 0xB740, + 23220 - 11904: 0xDD43, + 23221 - 11904: 0xDCF9, + 23222 - 11904: 0xDD44, + 23223 - 11904: 0xDD40, + 23224 - 11904: 0xDCF7, + 23225 - 11904: 0xDD46, + 23226 - 11904: 0xDCF6, + 23227 - 11904: 0xDCFD, + 23228 - 11904: 0xB6FE, + 23229 - 11904: 0xB6FD, + 23230 - 11904: 0xB6FC, + 23231 - 11904: 0xDCFB, + 23232 - 11904: 0xDD41, + 23233 - 11904: 0xB6F9, + 23234 - 11904: 0xB741, + 23235 - 11904: 0x90A7, + 23236 - 11904: 0xDCF4, + 23238 - 11904: 0xDCFE, + 23239 - 11904: 0xDCF3, + 23240 - 11904: 0xDCFC, + 23241 - 11904: 0xB6FA, + 23242 - 11904: 0xDD42, + 23243 - 11904: 0xDCF5, + 23244 - 11904: 0xB6FB, + 23245 - 11904: 0xDD45, + 23246 - 11904: 0x9741, + 23247 - 11904: 0x92F4, + 23249 - 11904: 0x8772, + 23251 - 11904: 0xFBBC, + 23253 - 11904: 0xE16E, + 23254 - 11904: 0xB9E2, + 23255 - 11904: 0xB9E1, + 23256 - 11904: 0xB9E3, + 23257 - 11904: 0xE17A, + 23258 - 11904: 0xE170, + 23259 - 11904: 0xE176, + 23260 - 11904: 0xE16B, + 23261 - 11904: 0xE179, + 23262 - 11904: 0xE178, + 23263 - 11904: 0xE17C, + 23264 - 11904: 0xE175, + 23265 - 11904: 0xB9DE, + 23266 - 11904: 0xE174, + 23267 - 11904: 0xB9E4, + 23268 - 11904: 0x9577, + 23269 - 11904: 0xE16D, + 23270 - 11904: 0xB9DF, + 23272 - 11904: 0xE17B, + 23273 - 11904: 0xB9E0, + 23274 - 11904: 0xE16F, + 23275 - 11904: 0xE172, + 23276 - 11904: 0xE177, + 23277 - 11904: 0xE171, + 23278 - 11904: 0xE16C, + 23280 - 11904: 0x9EE2, + 23282 - 11904: 0x8F78, + 23283 - 11904: 0xE173, + 23284 - 11904: 0xE555, + 23285 - 11904: 0xBC61, + 23286 - 11904: 0xE558, + 23287 - 11904: 0xE557, + 23288 - 11904: 0xE55A, + 23289 - 11904: 0xE55C, + 23290 - 11904: 0xF9DC, + 23291 - 11904: 0xBC5F, + 23293 - 11904: 0xE556, + 23294 - 11904: 0x9672, + 23295 - 11904: 0xE554, + 23297 - 11904: 0xE55D, + 23298 - 11904: 0xE55B, + 23299 - 11904: 0xE559, + 23301 - 11904: 0xE55F, + 23303 - 11904: 0xE55E, + 23304 - 11904: 0xBC63, + 23305 - 11904: 0xBC5E, + 23307 - 11904: 0xBC60, + 23308 - 11904: 0xBC62, + 23309 - 11904: 0x9EB5, + 23311 - 11904: 0xE560, + 23312 - 11904: 0xE957, + 23313 - 11904: 0x964B, + 23315 - 11904: 0xE956, + 23316 - 11904: 0xE955, + 23317 - 11904: 0x8CAC, + 23318 - 11904: 0xE958, + 23319 - 11904: 0xE951, + 23321 - 11904: 0xE952, + 23322 - 11904: 0xE95A, + 23323 - 11904: 0xE953, + 23325 - 11904: 0xBEC5, + 23326 - 11904: 0xE95C, + 23327 - 11904: 0xA0FA, + 23328 - 11904: 0xE95B, + 23329 - 11904: 0xE954, + 23331 - 11904: 0xECD1, + 23332 - 11904: 0xC0A8, + 23333 - 11904: 0xECCF, + 23334 - 11904: 0xECD4, + 23335 - 11904: 0xECD3, + 23336 - 11904: 0xE959, + 23338 - 11904: 0xC0A7, + 23339 - 11904: 0x9575, + 23340 - 11904: 0xECD2, + 23341 - 11904: 0xECCE, + 23342 - 11904: 0xECD6, + 23343 - 11904: 0xECD5, + 23344 - 11904: 0xC0A6, + 23346 - 11904: 0xECD0, + 23348 - 11904: 0xBEC6, + 23352 - 11904: 0xC254, + 23356 - 11904: 0xEFC1, + 23357 - 11904: 0xF1FA, + 23358 - 11904: 0xF1FB, + 23359 - 11904: 0xF1FC, + 23360 - 11904: 0xC45C, + 23361 - 11904: 0x90DA, + 23363 - 11904: 0xC45D, + 23364 - 11904: 0x9367, + 23365 - 11904: 0xF443, + 23366 - 11904: 0xFEA4, + 23367 - 11904: 0xF5C8, + 23368 - 11904: 0xF5C7, + 23370 - 11904: 0x90DF, + 23371 - 11904: 0xF6DB, + 23372 - 11904: 0xF6DC, + 23373 - 11904: 0xF7D5, + 23374 - 11904: 0xF8A7, + 23375 - 11904: 0x9354, + 23376 - 11904: 0xA46C, + 23377 - 11904: 0xA46D, + 23379 - 11904: 0xA46E, + 23380 - 11904: 0xA4D5, + 23381 - 11904: 0xA5A5, + 23382 - 11904: 0xC9D3, + 23383 - 11904: 0xA672, + 23384 - 11904: 0xA673, + 23386 - 11904: 0xA7B7, + 23387 - 11904: 0xA7B8, + 23388 - 11904: 0xA7B6, + 23389 - 11904: 0xA7B5, + 23391 - 11904: 0xA973, + 23394 - 11904: 0xCC55, + 23395 - 11904: 0xA975, + 23396 - 11904: 0xA974, + 23397 - 11904: 0xCC56, + 23398 - 11904: 0x8961, + 23400 - 11904: 0x8BB4, + 23401 - 11904: 0xABC4, + 23403 - 11904: 0xAE5D, + 23404 - 11904: 0xD165, + 23405 - 11904: 0x9DC0, + 23406 - 11904: 0xD4F0, + 23408 - 11904: 0xB145, + 23409 - 11904: 0xB447, + 23410 - 11904: 0xD4EF, + 23411 - 11904: 0xB446, + 23412 - 11904: 0x8E48, + 23413 - 11904: 0xB9E5, + 23414 - 11904: 0xFBC5, + 23415 - 11904: 0xE17D, + 23416 - 11904: 0xBEC7, + 23418 - 11904: 0xC0A9, + 23419 - 11904: 0xECD7, + 23420 - 11904: 0xFBC7, + 23421 - 11904: 0xC45E, + 23423 - 11904: 0xC570, + 23424 - 11904: 0xC6CB, + 23425 - 11904: 0xC972, + 23426 - 11904: 0xFA79, + 23427 - 11904: 0xA5A6, + 23428 - 11904: 0xC973, + 23429 - 11904: 0xA676, + 23431 - 11904: 0xA674, + 23432 - 11904: 0xA675, + 23433 - 11904: 0xA677, + 23435 - 11904: 0xA7BA, + 23436 - 11904: 0xA7B9, + 23438 - 11904: 0xCABC, + 23439 - 11904: 0xA7BB, + 23440 - 11904: 0x9E67, + 23442 - 11904: 0xCABD, + 23443 - 11904: 0xCC57, + 23445 - 11904: 0xCC58, + 23446 - 11904: 0x8CD9, + 23447 - 11904: 0xA976, + 23448 - 11904: 0xA978, + 23449 - 11904: 0xA97A, + 23450 - 11904: 0xA977, + 23451 - 11904: 0xA97B, + 23452 - 11904: 0xA979, + 23453 - 11904: 0xFBD2, + 23454 - 11904: 0x8962, + 23455 - 11904: 0x8963, + 23458 - 11904: 0xABC8, + 23459 - 11904: 0xABC5, + 23460 - 11904: 0xABC7, + 23461 - 11904: 0xABC9, + 23462 - 11904: 0xABC6, + 23463 - 11904: 0xD166, + 23464 - 11904: 0xCE77, + 23466 - 11904: 0xFC7D, + 23468 - 11904: 0xD168, + 23469 - 11904: 0xD167, + 23470 - 11904: 0xAE63, + 23472 - 11904: 0xAE5F, + 23475 - 11904: 0xAE60, + 23476 - 11904: 0xAE62, + 23477 - 11904: 0xAE64, + 23478 - 11904: 0xAE61, + 23479 - 11904: 0x8773, + 23480 - 11904: 0xAE66, + 23481 - 11904: 0xAE65, + 23487 - 11904: 0xB14A, + 23488 - 11904: 0xD4F2, + 23489 - 11904: 0xD4F1, + 23490 - 11904: 0xB149, + 23491 - 11904: 0x9F6B, + 23492 - 11904: 0xB148, + 23493 - 11904: 0xB147, + 23494 - 11904: 0xB14B, + 23495 - 11904: 0xB146, + 23498 - 11904: 0xD8D5, + 23499 - 11904: 0xD8D2, + 23500 - 11904: 0xB449, + 23501 - 11904: 0xD8D1, + 23502 - 11904: 0xD8D6, + 23504 - 11904: 0xB44B, + 23505 - 11904: 0xD8D4, + 23506 - 11904: 0xB448, + 23507 - 11904: 0xB44A, + 23508 - 11904: 0xD8D3, + 23509 - 11904: 0xFBCC, + 23510 - 11904: 0xDD48, + 23511 - 11904: 0xFEAE, + 23512 - 11904: 0xDD49, + 23513 - 11904: 0xDD4A, + 23515 - 11904: 0x876D, + 23518 - 11904: 0xB9E6, + 23519 - 11904: 0xB9EE, + 23520 - 11904: 0xE17E, + 23521 - 11904: 0xB9E8, + 23522 - 11904: 0xB9EC, + 23523 - 11904: 0xE1A1, + 23524 - 11904: 0xB9ED, + 23525 - 11904: 0xB9E9, + 23526 - 11904: 0xB9EA, + 23527 - 11904: 0xB9E7, + 23528 - 11904: 0xB9EB, + 23529 - 11904: 0xBC66, + 23530 - 11904: 0xD8D0, + 23531 - 11904: 0xBC67, + 23532 - 11904: 0xBC65, + 23534 - 11904: 0xBC64, + 23535 - 11904: 0xE95D, + 23536 - 11904: 0xBEC8, + 23537 - 11904: 0xECD8, + 23538 - 11904: 0xECD9, + 23539 - 11904: 0xFBD1, + 23541 - 11904: 0xC364, + 23542 - 11904: 0xC45F, + 23544 - 11904: 0xA46F, + 23546 - 11904: 0xA678, + 23551 - 11904: 0xFB75, + 23553 - 11904: 0xABCA, + 23555 - 11904: 0xD169, + 23556 - 11904: 0xAE67, + 23557 - 11904: 0xFBD4, + 23559 - 11904: 0xB14E, + 23560 - 11904: 0xB14D, + 23561 - 11904: 0xB14C, + 23562 - 11904: 0xB44C, + 23563 - 11904: 0xB44D, + 23564 - 11904: 0xD8D7, + 23565 - 11904: 0xB9EF, + 23566 - 11904: 0xBEC9, + 23567 - 11904: 0xA470, + 23568 - 11904: 0xC95C, + 23569 - 11904: 0xA4D6, + 23570 - 11904: 0xC974, + 23571 - 11904: 0xFBD6, + 23572 - 11904: 0xFBD8, + 23573 - 11904: 0xC9D4, + 23574 - 11904: 0xA679, + 23578 - 11904: 0xA97C, + 23580 - 11904: 0x8B5D, + 23582 - 11904: 0x934C, + 23583 - 11904: 0xDD4B, + 23584 - 11904: 0x9AE2, + 23586 - 11904: 0xA471, + 23587 - 11904: 0x8BC9, + 23588 - 11904: 0xA4D7, + 23589 - 11904: 0xC9D5, + 23592 - 11904: 0xCABE, + 23594 - 11904: 0xCABF, + 23596 - 11904: 0xA7BC, + 23600 - 11904: 0xD8D8, + 23601 - 11904: 0xB44E, + 23603 - 11904: 0xDD4C, + 23607 - 11904: 0xC0AA, + 23608 - 11904: 0xA472, + 23609 - 11904: 0xA4A8, + 23610 - 11904: 0xA4D8, + 23611 - 11904: 0xC975, + 23612 - 11904: 0xA5A7, + 23614 - 11904: 0xA7C0, + 23615 - 11904: 0xA7BF, + 23616 - 11904: 0xA7BD, + 23617 - 11904: 0xA7BE, + 23620 - 11904: 0xCC59, + 23621 - 11904: 0xA97E, + 23622 - 11904: 0xA9A1, + 23623 - 11904: 0xCC5A, + 23624 - 11904: 0xA97D, + 23625 - 11904: 0xFBDB, + 23626 - 11904: 0x9FC9, + 23627 - 11904: 0xABCE, + 23628 - 11904: 0xCE78, + 23629 - 11904: 0xABCD, + 23630 - 11904: 0xABCB, + 23631 - 11904: 0xABCC, + 23632 - 11904: 0xAE6A, + 23633 - 11904: 0xAE68, + 23635 - 11904: 0x9F44, + 23636 - 11904: 0xD16B, + 23637 - 11904: 0xAE69, + 23638 - 11904: 0xD16A, + 23640 - 11904: 0xAE5E, + 23641 - 11904: 0xD4F3, + 23644 - 11904: 0xB150, + 23645 - 11904: 0xB151, + 23646 - 11904: 0x98ED, + 23648 - 11904: 0xB14F, + 23650 - 11904: 0xB9F0, + 23651 - 11904: 0xE1A2, + 23652 - 11904: 0xBC68, + 23653 - 11904: 0xBC69, + 23655 - 11904: 0xE561, + 23656 - 11904: 0xC0AB, + 23657 - 11904: 0xEFC2, + 23658 - 11904: 0xEFC3, + 23660 - 11904: 0xC4DD, + 23661 - 11904: 0xF8A8, + 23662 - 11904: 0xC94B, + 23663 - 11904: 0xA4D9, + 23665 - 11904: 0xA473, + 23667 - 11904: 0xC977, + 23668 - 11904: 0xC976, + 23672 - 11904: 0x8CE9, + 23673 - 11904: 0xA67A, + 23674 - 11904: 0xC9D7, + 23675 - 11904: 0xC9D8, + 23676 - 11904: 0xC9D6, + 23678 - 11904: 0xC9D9, + 23685 - 11904: 0xFBDD, + 23686 - 11904: 0xCAC7, + 23688 - 11904: 0xCAC2, + 23689 - 11904: 0xCAC4, + 23690 - 11904: 0xCAC6, + 23691 - 11904: 0xCAC3, + 23692 - 11904: 0xA7C4, + 23693 - 11904: 0xCAC0, + 23695 - 11904: 0xCAC1, + 23696 - 11904: 0xA7C1, + 23697 - 11904: 0xA7C2, + 23698 - 11904: 0xCAC5, + 23699 - 11904: 0xCAC8, + 23700 - 11904: 0xA7C3, + 23701 - 11904: 0xCAC9, + 23705 - 11904: 0x8DF2, + 23706 - 11904: 0x8964, + 23708 - 11904: 0xFDF2, + 23709 - 11904: 0xCC68, + 23710 - 11904: 0x934D, + 23711 - 11904: 0xCC62, + 23712 - 11904: 0xCC5D, + 23713 - 11904: 0xA9A3, + 23714 - 11904: 0xCC65, + 23715 - 11904: 0xCC63, + 23716 - 11904: 0xCC5C, + 23717 - 11904: 0xCC69, + 23718 - 11904: 0xCC6C, + 23719 - 11904: 0xCC67, + 23720 - 11904: 0xCC60, + 23721 - 11904: 0xA9A5, + 23722 - 11904: 0xCC66, + 23723 - 11904: 0xA9A6, + 23724 - 11904: 0xCC61, + 23725 - 11904: 0xCC64, + 23726 - 11904: 0xCC5B, + 23727 - 11904: 0xCC5F, + 23728 - 11904: 0xCC6B, + 23729 - 11904: 0xA9A7, + 23731 - 11904: 0xA9A8, + 23733 - 11904: 0xCC5E, + 23734 - 11904: 0xCC6A, + 23735 - 11904: 0xA9A2, + 23736 - 11904: 0xA9A4, + 23738 - 11904: 0xFBE7, + 23745 - 11904: 0xA0F2, + 23746 - 11904: 0x9868, + 23750 - 11904: 0xCEAB, + 23751 - 11904: 0xCEA4, + 23752 - 11904: 0xCEAA, + 23753 - 11904: 0xCEA3, + 23754 - 11904: 0xCEA5, + 23755 - 11904: 0xCE7D, + 23756 - 11904: 0xCE7B, + 23758 - 11904: 0xCEAC, + 23759 - 11904: 0xCEA9, + 23760 - 11904: 0xCE79, + 23761 - 11904: 0x9F58, + 23762 - 11904: 0xABD0, + 23763 - 11904: 0xCEA7, + 23764 - 11904: 0xCEA8, + 23765 - 11904: 0x8CE6, + 23766 - 11904: 0xCEA6, + 23767 - 11904: 0xCE7C, + 23768 - 11904: 0xCE7A, + 23769 - 11904: 0xABCF, + 23770 - 11904: 0xCEA2, + 23771 - 11904: 0xCE7E, + 23774 - 11904: 0xCEA1, + 23775 - 11904: 0xCEAD, + 23781 - 11904: 0x8D73, + 23784 - 11904: 0xAE6F, + 23785 - 11904: 0xFBDE, + 23786 - 11904: 0xAE6E, + 23788 - 11904: 0xD16C, + 23789 - 11904: 0xAE6B, + 23790 - 11904: 0xD16E, + 23791 - 11904: 0xFBDF, + 23792 - 11904: 0xAE70, + 23793 - 11904: 0xD16F, + 23796 - 11904: 0xAE73, + 23797 - 11904: 0x8C48, + 23798 - 11904: 0xAE71, + 23799 - 11904: 0xD170, + 23800 - 11904: 0xCEAE, + 23801 - 11904: 0xD172, + 23803 - 11904: 0xAE6D, + 23804 - 11904: 0x8774, + 23805 - 11904: 0xAE6C, + 23807 - 11904: 0xD16D, + 23808 - 11904: 0xD171, + 23809 - 11904: 0xAE72, + 23814 - 11904: 0xB153, + 23815 - 11904: 0xB152, + 23819 - 11904: 0xD4F5, + 23820 - 11904: 0xD4F9, + 23821 - 11904: 0xD4FB, + 23822 - 11904: 0xB154, + 23823 - 11904: 0xD4FE, + 23824 - 11904: 0xFBE3, + 23825 - 11904: 0xB158, + 23826 - 11904: 0xD541, + 23828 - 11904: 0xB15A, + 23829 - 11904: 0x8DA8, + 23830 - 11904: 0xB156, + 23831 - 11904: 0xB15E, + 23832 - 11904: 0xFBE4, + 23833 - 11904: 0xB15B, + 23834 - 11904: 0xD4F7, + 23835 - 11904: 0xB155, + 23837 - 11904: 0xD4F6, + 23838 - 11904: 0xD4F4, + 23839 - 11904: 0xD543, + 23840 - 11904: 0xD4F8, + 23842 - 11904: 0xB157, + 23843 - 11904: 0xD542, + 23844 - 11904: 0xB15C, + 23845 - 11904: 0xD4FD, + 23846 - 11904: 0xD4FC, + 23847 - 11904: 0xB15D, + 23848 - 11904: 0xD4FA, + 23849 - 11904: 0xB159, + 23852 - 11904: 0x9C75, + 23854 - 11904: 0xD544, + 23855 - 11904: 0x9878, + 23856 - 11904: 0xD540, + 23857 - 11904: 0xD8E7, + 23858 - 11904: 0xD8EE, + 23859 - 11904: 0xD8E3, + 23860 - 11904: 0xB451, + 23861 - 11904: 0xD8DF, + 23862 - 11904: 0xD8EF, + 23863 - 11904: 0xD8D9, + 23864 - 11904: 0xD8EC, + 23865 - 11904: 0xD8EA, + 23866 - 11904: 0xD8E4, + 23868 - 11904: 0xD8ED, + 23869 - 11904: 0xD8E6, + 23870 - 11904: 0x8D60, + 23871 - 11904: 0xD8DE, + 23872 - 11904: 0xD8F0, + 23873 - 11904: 0xD8DC, + 23874 - 11904: 0xD8E9, + 23875 - 11904: 0xD8DA, + 23877 - 11904: 0xD8F1, + 23878 - 11904: 0xFBE5, + 23879 - 11904: 0xB452, + 23880 - 11904: 0x8D61, + 23881 - 11904: 0xD8EB, + 23882 - 11904: 0xDD4F, + 23883 - 11904: 0xD8DD, + 23884 - 11904: 0xB44F, + 23886 - 11904: 0xD8E1, + 23888 - 11904: 0xB450, + 23889 - 11904: 0xD8E0, + 23890 - 11904: 0xD8E5, + 23893 - 11904: 0xD8E2, + 23894 - 11904: 0x8D62, + 23895 - 11904: 0xA0A1, + 23897 - 11904: 0xD8E8, + 23899 - 11904: 0x9C40, + 23902 - 11904: 0xDD53, + 23906 - 11904: 0xDD56, + 23907 - 11904: 0xDD4E, + 23909 - 11904: 0xDD50, + 23911 - 11904: 0xDD55, + 23912 - 11904: 0xDD54, + 23913 - 11904: 0xB743, + 23915 - 11904: 0xD8DB, + 23916 - 11904: 0xDD52, + 23919 - 11904: 0xB744, + 23920 - 11904: 0x98AD, + 23921 - 11904: 0xDD4D, + 23922 - 11904: 0xDD51, + 23924 - 11904: 0x9EEA, + 23927 - 11904: 0xE1A9, + 23928 - 11904: 0x8CEC, + 23929 - 11904: 0xE1B0, + 23930 - 11904: 0xE1A7, + 23931 - 11904: 0x8CD4, + 23932 - 11904: 0xE1AE, + 23933 - 11904: 0xE1A5, + 23934 - 11904: 0xE1AD, + 23935 - 11904: 0xE1B1, + 23936 - 11904: 0xE1A4, + 23937 - 11904: 0xE1A8, + 23938 - 11904: 0xE1A3, + 23940 - 11904: 0xB9F1, + 23941 - 11904: 0x9CEB, + 23942 - 11904: 0xE1A6, + 23943 - 11904: 0xB9F2, + 23944 - 11904: 0xE1AC, + 23945 - 11904: 0xE1AB, + 23946 - 11904: 0xE1AA, + 23947 - 11904: 0xFBE0, + 23949 - 11904: 0xE1AF, + 23950 - 11904: 0x9F51, + 23954 - 11904: 0xE565, + 23955 - 11904: 0xE567, + 23956 - 11904: 0xBC6B, + 23957 - 11904: 0xE568, + 23959 - 11904: 0xE563, + 23961 - 11904: 0xE562, + 23962 - 11904: 0xE56C, + 23964 - 11904: 0xE56A, + 23965 - 11904: 0xBC6A, + 23966 - 11904: 0xE56D, + 23967 - 11904: 0xE564, + 23968 - 11904: 0xE569, + 23969 - 11904: 0xE56B, + 23970 - 11904: 0xE566, + 23972 - 11904: 0x8D65, + 23975 - 11904: 0xE961, + 23976 - 11904: 0xE966, + 23977 - 11904: 0xE960, + 23978 - 11904: 0xE965, + 23979 - 11904: 0x9CF1, + 23980 - 11904: 0xE95E, + 23981 - 11904: 0xE968, + 23982 - 11904: 0xE964, + 23983 - 11904: 0xE969, + 23984 - 11904: 0xE963, + 23985 - 11904: 0xE95F, + 23986 - 11904: 0xE967, + 23988 - 11904: 0xE96A, + 23989 - 11904: 0xE962, + 23990 - 11904: 0xFC58, + 23991 - 11904: 0xECDA, + 23992 - 11904: 0xC0AF, + 23993 - 11904: 0x8D66, + 23994 - 11904: 0xC0AD, + 23996 - 11904: 0xC0AC, + 23997 - 11904: 0xC0AE, + 24000 - 11904: 0xEFC4, + 24001 - 11904: 0x9654, + 24002 - 11904: 0xF172, + 24003 - 11904: 0xF1FD, + 24006 - 11904: 0xF444, + 24007 - 11904: 0xF445, + 24009 - 11904: 0xC460, + 24011 - 11904: 0xF5C9, + 24013 - 11904: 0xC4DE, + 24015 - 11904: 0xF5CA, + 24017 - 11904: 0xF6DE, + 24018 - 11904: 0xC572, + 24020 - 11904: 0xC571, + 24021 - 11904: 0xF6DD, + 24022 - 11904: 0xC5C9, + 24023 - 11904: 0xFBE8, + 24024 - 11904: 0xF7D6, + 24027 - 11904: 0xC6CC, + 24029 - 11904: 0xA474, + 24030 - 11904: 0xA67B, + 24031 - 11904: 0xC9DA, + 24032 - 11904: 0xCACA, + 24033 - 11904: 0xA8B5, + 24034 - 11904: 0xB15F, + 24037 - 11904: 0xA475, + 24038 - 11904: 0xA5AA, + 24039 - 11904: 0xA5A9, + 24040 - 11904: 0xA5A8, + 24043 - 11904: 0xA7C5, + 24046 - 11904: 0xAE74, + 24048 - 11904: 0xDD57, + 24049 - 11904: 0xA476, + 24050 - 11904: 0xA477, + 24051 - 11904: 0xA478, + 24052 - 11904: 0xA4DA, + 24053 - 11904: 0x9FCE, + 24055 - 11904: 0xABD1, + 24057 - 11904: 0xCEAF, + 24061 - 11904: 0xB453, + 24062 - 11904: 0xA479, + 24063 - 11904: 0xC95D, + 24066 - 11904: 0xA5AB, + 24067 - 11904: 0xA5AC, + 24068 - 11904: 0xC978, + 24070 - 11904: 0xA67C, + 24073 - 11904: 0xFBFC, + 24074 - 11904: 0xCACB, + 24075 - 11904: 0x9AE4, + 24076 - 11904: 0xA7C6, + 24078 - 11904: 0xCACC, + 24081 - 11904: 0xA9AE, + 24082 - 11904: 0x9F75, + 24084 - 11904: 0xCC6E, + 24085 - 11904: 0xA9AC, + 24086 - 11904: 0xA9AB, + 24087 - 11904: 0xCC6D, + 24088 - 11904: 0xA9A9, + 24089 - 11904: 0xCC6F, + 24090 - 11904: 0xA9AA, + 24091 - 11904: 0xA9AD, + 24093 - 11904: 0xABD2, + 24095 - 11904: 0xABD4, + 24096 - 11904: 0xCEB3, + 24097 - 11904: 0xCEB0, + 24098 - 11904: 0xCEB1, + 24099 - 11904: 0xCEB2, + 24100 - 11904: 0xCEB4, + 24101 - 11904: 0xABD3, + 24104 - 11904: 0xD174, + 24105 - 11904: 0xD173, + 24107 - 11904: 0xAE76, + 24109 - 11904: 0xAE75, + 24110 - 11904: 0xFBF1, + 24115 - 11904: 0xB162, + 24116 - 11904: 0xD546, + 24118 - 11904: 0xB161, + 24119 - 11904: 0xB163, + 24120 - 11904: 0xB160, + 24125 - 11904: 0xB455, + 24126 - 11904: 0xD545, + 24128 - 11904: 0xB456, + 24129 - 11904: 0xD8F3, + 24130 - 11904: 0x8D69, + 24131 - 11904: 0xB457, + 24132 - 11904: 0xD8F2, + 24133 - 11904: 0xB454, + 24136 - 11904: 0x934F, + 24138 - 11904: 0xDD5A, + 24139 - 11904: 0xDD5C, + 24140 - 11904: 0xB745, + 24141 - 11904: 0xDD5B, + 24142 - 11904: 0xDD59, + 24143 - 11904: 0xDD58, + 24147 - 11904: 0xE1B4, + 24148 - 11904: 0xB9F7, + 24149 - 11904: 0xB9F5, + 24151 - 11904: 0xB9F6, + 24152 - 11904: 0xE1B2, + 24153 - 11904: 0xE1B3, + 24155 - 11904: 0xB9F3, + 24156 - 11904: 0xE571, + 24157 - 11904: 0xE56F, + 24158 - 11904: 0x934E, + 24159 - 11904: 0xBC6D, + 24160 - 11904: 0xE570, + 24161 - 11904: 0xBC6E, + 24162 - 11904: 0xBC6C, + 24163 - 11904: 0xB9F4, + 24166 - 11904: 0xE96D, + 24167 - 11904: 0xE96B, + 24168 - 11904: 0xE96C, + 24169 - 11904: 0xE56E, + 24170 - 11904: 0xECDC, + 24171 - 11904: 0xC0B0, + 24172 - 11904: 0xECDB, + 24173 - 11904: 0xEFC5, + 24174 - 11904: 0xEFC6, + 24175 - 11904: 0xE96E, + 24176 - 11904: 0xF1FE, + 24178 - 11904: 0xA47A, + 24179 - 11904: 0xA5AD, + 24180 - 11904: 0xA67E, + 24181 - 11904: 0xFBF3, + 24182 - 11904: 0xA67D, + 24184 - 11904: 0xA9AF, + 24185 - 11904: 0xB746, + 24186 - 11904: 0xFBF4, + 24187 - 11904: 0xA4DB, + 24188 - 11904: 0xA5AE, + 24189 - 11904: 0xABD5, + 24190 - 11904: 0xB458, + 24191 - 11904: 0xC6CE, + 24192 - 11904: 0xC979, + 24194 - 11904: 0xC97A, + 24195 - 11904: 0xFBC3, + 24196 - 11904: 0xC9DC, + 24198 - 11904: 0x8965, + 24199 - 11904: 0xA7C8, + 24200 - 11904: 0xCAD0, + 24201 - 11904: 0xCACE, + 24202 - 11904: 0xA7C9, + 24203 - 11904: 0xCACD, + 24204 - 11904: 0xCACF, + 24205 - 11904: 0xCAD1, + 24207 - 11904: 0xA7C7, + 24210 - 11904: 0x8C7A, + 24213 - 11904: 0xA9B3, + 24214 - 11904: 0xA9B4, + 24215 - 11904: 0xA9B1, + 24217 - 11904: 0x8C7B, + 24218 - 11904: 0xA9B0, + 24219 - 11904: 0xCEB8, + 24220 - 11904: 0xA9B2, + 24224 - 11904: 0xABD6, + 24226 - 11904: 0xCEB7, + 24227 - 11904: 0xCEB9, + 24228 - 11904: 0xCEB6, + 24229 - 11904: 0xCEBA, + 24230 - 11904: 0xABD7, + 24231 - 11904: 0xAE79, + 24232 - 11904: 0xD175, + 24234 - 11904: 0xD177, + 24235 - 11904: 0xAE77, + 24236 - 11904: 0xD178, + 24237 - 11904: 0xAE78, + 24238 - 11904: 0xD176, + 24240 - 11904: 0xCEB5, + 24241 - 11904: 0xD547, + 24242 - 11904: 0xD54A, + 24243 - 11904: 0xD54B, + 24244 - 11904: 0xD548, + 24245 - 11904: 0xB167, + 24246 - 11904: 0xB166, + 24247 - 11904: 0xB164, + 24248 - 11904: 0xB165, + 24249 - 11904: 0xD549, + 24253 - 11904: 0x8D6A, + 24254 - 11904: 0xB168, + 24257 - 11904: 0xB45A, + 24258 - 11904: 0xB45B, + 24260 - 11904: 0xB45C, + 24261 - 11904: 0xDD5D, + 24262 - 11904: 0xDD5F, + 24263 - 11904: 0xDD61, + 24264 - 11904: 0xB748, + 24265 - 11904: 0xB747, + 24266 - 11904: 0xB459, + 24267 - 11904: 0xDD60, + 24268 - 11904: 0xDD5E, + 24269 - 11904: 0x9353, + 24270 - 11904: 0xE1B8, + 24272 - 11904: 0xFBF9, + 24273 - 11904: 0xE1B6, + 24274 - 11904: 0xE1BC, + 24275 - 11904: 0xB9F8, + 24276 - 11904: 0xE1BD, + 24277 - 11904: 0xE1BA, + 24278 - 11904: 0xB9F9, + 24279 - 11904: 0xE1B7, + 24280 - 11904: 0xE1B5, + 24281 - 11904: 0xE1BB, + 24282 - 11904: 0xBC70, + 24283 - 11904: 0xE573, + 24284 - 11904: 0xE1B9, + 24285 - 11904: 0xBC72, + 24286 - 11904: 0xE574, + 24287 - 11904: 0xBC71, + 24288 - 11904: 0xBC74, + 24289 - 11904: 0xE575, + 24290 - 11904: 0xBC6F, + 24291 - 11904: 0xBC73, + 24293 - 11904: 0xE973, + 24294 - 11904: 0xE971, + 24295 - 11904: 0xE970, + 24296 - 11904: 0xE972, + 24297 - 11904: 0xE96F, + 24300 - 11904: 0xC366, + 24302 - 11904: 0xF446, + 24303 - 11904: 0xF447, + 24305 - 11904: 0xF5CB, + 24306 - 11904: 0xF6DF, + 24307 - 11904: 0xC655, + 24308 - 11904: 0xFBFD, + 24310 - 11904: 0xA9B5, + 24311 - 11904: 0xA7CA, + 24312 - 11904: 0x9059, + 24313 - 11904: 0xFC40, + 24314 - 11904: 0xABD8, + 24315 - 11904: 0xFC41, + 24316 - 11904: 0xFC43, + 24318 - 11904: 0xA47B, + 24319 - 11904: 0xA4DC, + 24321 - 11904: 0xA5AF, + 24322 - 11904: 0xC9DD, + 24324 - 11904: 0xA7CB, + 24325 - 11904: 0xCAD2, + 24327 - 11904: 0xCEBB, + 24328 - 11904: 0xABD9, + 24330 - 11904: 0xB9FA, + 24331 - 11904: 0xA47C, + 24332 - 11904: 0x9FD8, + 24333 - 11904: 0xFC46, + 24334 - 11904: 0x9362, + 24335 - 11904: 0xA6A1, + 24338 - 11904: 0xB749, + 24339 - 11904: 0xA47D, + 24340 - 11904: 0xA4DD, + 24341 - 11904: 0xA4DE, + 24343 - 11904: 0xA5B1, + 24344 - 11904: 0xA5B0, + 24346 - 11904: 0xC9DE, + 24347 - 11904: 0xA6A2, + 24349 - 11904: 0xCAD3, + 24351 - 11904: 0xA7CC, + 24354 - 11904: 0xCC71, + 24355 - 11904: 0xCC72, + 24356 - 11904: 0xCC73, + 24357 - 11904: 0x8D6B, + 24358 - 11904: 0xA9B6, + 24359 - 11904: 0xA9B7, + 24360 - 11904: 0xCC70, + 24361 - 11904: 0xA9B8, + 24365 - 11904: 0xABDA, + 24366 - 11904: 0xCEBC, + 24368 - 11904: 0xD17A, + 24369 - 11904: 0xAE7A, + 24371 - 11904: 0xD179, + 24373 - 11904: 0xB169, + 24374 - 11904: 0xD54C, + 24375 - 11904: 0xB16A, + 24376 - 11904: 0xD54D, + 24378 - 11904: 0xFC4C, + 24379 - 11904: 0x8CFE, + 24380 - 11904: 0xB45D, + 24384 - 11904: 0xDD62, + 24387 - 11904: 0xE1BF, + 24388 - 11904: 0xE1BE, + 24390 - 11904: 0xB9FB, + 24392 - 11904: 0xBC75, + 24393 - 11904: 0xE576, + 24394 - 11904: 0xBECA, + 24395 - 11904: 0xE974, + 24396 - 11904: 0xC0B1, + 24397 - 11904: 0x95B8, + 24398 - 11904: 0xC573, + 24399 - 11904: 0xF7D8, + 24400 - 11904: 0xC6D0, + 24401 - 11904: 0x8BCA, + 24404 - 11904: 0xCC74, + 24406 - 11904: 0xCEBD, + 24407 - 11904: 0xB16B, + 24408 - 11904: 0xFC4F, + 24409 - 11904: 0xB74A, + 24412 - 11904: 0x987A, + 24413 - 11904: 0xC255, + 24417 - 11904: 0xC6D1, + 24418 - 11904: 0xA7CE, + 24419 - 11904: 0xFC51, + 24420 - 11904: 0xA7CD, + 24421 - 11904: 0xABDB, + 24423 - 11904: 0xD17B, + 24425 - 11904: 0xB16D, + 24426 - 11904: 0xB343, + 24427 - 11904: 0xB16E, + 24428 - 11904: 0xB16C, + 24429 - 11904: 0xB45E, + 24431 - 11904: 0xE1C0, + 24432 - 11904: 0xB9FC, + 24433 - 11904: 0xBC76, + 24434 - 11904: 0xFC54, + 24435 - 11904: 0xC94C, + 24436 - 11904: 0xC9DF, + 24438 - 11904: 0xCAD5, + 24439 - 11904: 0xA7CF, + 24440 - 11904: 0xCAD4, + 24441 - 11904: 0xA7D0, + 24443 - 11904: 0xFAAF, + 24444 - 11904: 0xA9BC, + 24445 - 11904: 0xCC77, + 24446 - 11904: 0xCC76, + 24447 - 11904: 0xA9BB, + 24448 - 11904: 0xA9B9, + 24449 - 11904: 0xA9BA, + 24450 - 11904: 0xCC75, + 24451 - 11904: 0x8D6C, + 24453 - 11904: 0xABDD, + 24454 - 11904: 0xCEBE, + 24455 - 11904: 0xABE0, + 24456 - 11904: 0xABDC, + 24457 - 11904: 0xABE2, + 24458 - 11904: 0xABDE, + 24459 - 11904: 0xABDF, + 24460 - 11904: 0xABE1, + 24464 - 11904: 0xAE7D, + 24465 - 11904: 0xAE7C, + 24466 - 11904: 0xAE7B, + 24470 - 11904: 0xD54F, + 24471 - 11904: 0xB16F, + 24472 - 11904: 0xB172, + 24473 - 11904: 0xB170, + 24475 - 11904: 0xD54E, + 24476 - 11904: 0xB175, + 24478 - 11904: 0xB171, + 24479 - 11904: 0xD550, + 24480 - 11904: 0xB174, + 24481 - 11904: 0xB173, + 24484 - 11904: 0xFA61, + 24485 - 11904: 0xD8F6, + 24486 - 11904: 0xD8F5, + 24487 - 11904: 0xFC57, + 24488 - 11904: 0xB461, + 24489 - 11904: 0xB45F, + 24490 - 11904: 0xB460, + 24491 - 11904: 0xD8F7, + 24492 - 11904: 0xB74B, + 24493 - 11904: 0xDD64, + 24494 - 11904: 0xB74C, + 24495 - 11904: 0xDD63, + 24497 - 11904: 0x9B70, + 24498 - 11904: 0xE577, + 24501 - 11904: 0xBC78, + 24502 - 11904: 0xE1C1, + 24503 - 11904: 0xBC77, + 24505 - 11904: 0xB9FD, + 24506 - 11904: 0xA051, + 24507 - 11904: 0xECDE, + 24508 - 11904: 0xE975, + 24509 - 11904: 0xC0B2, + 24510 - 11904: 0xECDD, + 24511 - 11904: 0xF240, + 24512 - 11904: 0xF448, + 24513 - 11904: 0xF449, + 24514 - 11904: 0x8C7C, + 24515 - 11904: 0xA4DF, + 24516 - 11904: 0x8BCB, + 24517 - 11904: 0xA5B2, + 24521 - 11904: 0xC97B, + 24524 - 11904: 0xA7D2, + 24525 - 11904: 0xA7D4, + 24527 - 11904: 0xC9E2, + 24528 - 11904: 0xCAD8, + 24529 - 11904: 0xCAD7, + 24530 - 11904: 0xCAD6, + 24532 - 11904: 0xC9E1, + 24533 - 11904: 0xC9E0, + 24534 - 11904: 0xA6A4, + 24535 - 11904: 0xA7D3, + 24536 - 11904: 0xA7D1, + 24537 - 11904: 0xA6A3, + 24539 - 11904: 0x936E, + 24541 - 11904: 0xA9BD, + 24542 - 11904: 0xCC78, + 24543 - 11904: 0xFCD5, + 24544 - 11904: 0xA9BE, + 24545 - 11904: 0xCADD, + 24547 - 11904: 0xCADF, + 24548 - 11904: 0xCADE, + 24549 - 11904: 0xCC79, + 24552 - 11904: 0xCADA, + 24554 - 11904: 0xA7D8, + 24555 - 11904: 0xA7D6, + 24557 - 11904: 0xCAD9, + 24558 - 11904: 0xCADB, + 24559 - 11904: 0xCAE1, + 24561 - 11904: 0xA7D5, + 24563 - 11904: 0xCADC, + 24564 - 11904: 0xCAE5, + 24565 - 11904: 0xA9C0, + 24567 - 11904: 0xCAE2, + 24568 - 11904: 0xA7D7, + 24570 - 11904: 0xCAE0, + 24571 - 11904: 0xCAE3, + 24573 - 11904: 0xA9BF, + 24575 - 11904: 0xA9C1, + 24576 - 11904: 0xCAE4, + 24585 - 11904: 0xCCAF, + 24586 - 11904: 0xCCA2, + 24587 - 11904: 0xCC7E, + 24588 - 11904: 0xCCAE, + 24589 - 11904: 0xCCA9, + 24590 - 11904: 0xABE7, + 24591 - 11904: 0xA9C2, + 24592 - 11904: 0xCCAA, + 24593 - 11904: 0xCCAD, + 24594 - 11904: 0xABE3, + 24595 - 11904: 0xCCAC, + 24596 - 11904: 0xA9C3, + 24597 - 11904: 0xA9C8, + 24598 - 11904: 0xA9C6, + 24599 - 11904: 0xCCA3, + 24601 - 11904: 0xCC7C, + 24602 - 11904: 0xCCA5, + 24603 - 11904: 0xA9CD, + 24604 - 11904: 0xCCB0, + 24605 - 11904: 0xABE4, + 24606 - 11904: 0xCCA6, + 24608 - 11904: 0xABE5, + 24609 - 11904: 0xA9C9, + 24610 - 11904: 0xCCA8, + 24611 - 11904: 0xFCA9, + 24612 - 11904: 0xCECD, + 24613 - 11904: 0xABE6, + 24614 - 11904: 0xCC7B, + 24615 - 11904: 0xA9CA, + 24616 - 11904: 0xABE8, + 24617 - 11904: 0xA9CB, + 24618 - 11904: 0xA9C7, + 24619 - 11904: 0xA9CC, + 24620 - 11904: 0xCCA7, + 24621 - 11904: 0xCC7A, + 24622 - 11904: 0xCCAB, + 24623 - 11904: 0xA9C4, + 24625 - 11904: 0xFC61, + 24626 - 11904: 0xCC7D, + 24627 - 11904: 0xCCA4, + 24628 - 11904: 0xCCA1, + 24629 - 11904: 0xA9C5, + 24631 - 11904: 0xCEBF, + 24633 - 11904: 0xCEC0, + 24635 - 11904: 0x8966, + 24640 - 11904: 0xCECA, + 24641 - 11904: 0xD1A1, + 24642 - 11904: 0xCECB, + 24643 - 11904: 0xABEE, + 24644 - 11904: 0xCECE, + 24645 - 11904: 0xCEC4, + 24646 - 11904: 0xABED, + 24647 - 11904: 0xCEC6, + 24649 - 11904: 0xCEC7, + 24650 - 11904: 0xFACB, + 24652 - 11904: 0xCEC9, + 24653 - 11904: 0xABE9, + 24656 - 11904: 0xAEA3, + 24658 - 11904: 0xF9DA, + 24659 - 11904: 0xCEC5, + 24660 - 11904: 0xCEC1, + 24661 - 11904: 0xAEA4, + 24664 - 11904: 0xCECF, + 24665 - 11904: 0xAE7E, + 24666 - 11904: 0xD17D, + 24667 - 11904: 0xCEC8, + 24669 - 11904: 0xD17C, + 24670 - 11904: 0xCEC3, + 24671 - 11904: 0xCECC, + 24674 - 11904: 0xABEC, + 24675 - 11904: 0xAEA1, + 24676 - 11904: 0xABF2, + 24677 - 11904: 0xAEA2, + 24678 - 11904: 0xCED0, + 24679 - 11904: 0xD17E, + 24680 - 11904: 0xABEB, + 24681 - 11904: 0xAEA6, + 24682 - 11904: 0xABF1, + 24683 - 11904: 0xABF0, + 24684 - 11904: 0xABEF, + 24685 - 11904: 0xAEA5, + 24686 - 11904: 0xCED1, + 24687 - 11904: 0xAEA7, + 24688 - 11904: 0xABEA, + 24690 - 11904: 0xCEC2, + 24693 - 11904: 0x937A, + 24695 - 11904: 0xA0E0, + 24702 - 11904: 0x936B, + 24703 - 11904: 0xB176, + 24704 - 11904: 0xD1A4, + 24705 - 11904: 0xD1A6, + 24707 - 11904: 0xD1A8, + 24708 - 11904: 0xAEA8, + 24709 - 11904: 0xAEAE, + 24710 - 11904: 0xD553, + 24711 - 11904: 0xD1AC, + 24712 - 11904: 0xD1A3, + 24713 - 11904: 0xB178, + 24714 - 11904: 0xD551, + 24716 - 11904: 0xAEAD, + 24717 - 11904: 0xAEAB, + 24718 - 11904: 0xD1AE, + 24720 - 11904: 0xD552, + 24722 - 11904: 0xD1A5, + 24724 - 11904: 0xAEAC, + 24725 - 11904: 0xD1A9, + 24726 - 11904: 0xAEAF, + 24727 - 11904: 0xD1AB, + 24730 - 11904: 0xAEAA, + 24731 - 11904: 0xD1AA, + 24732 - 11904: 0xD1AD, + 24733 - 11904: 0xD1A7, + 24734 - 11904: 0xFC6B, + 24735 - 11904: 0xAEA9, + 24736 - 11904: 0xB179, + 24738 - 11904: 0xD1A2, + 24739 - 11904: 0xB177, + 24740 - 11904: 0xFC6C, + 24743 - 11904: 0x9468, + 24744 - 11904: 0xB17A, + 24752 - 11904: 0xD555, + 24753 - 11904: 0xD55E, + 24754 - 11904: 0xB464, + 24755 - 11904: 0xFC6D, + 24756 - 11904: 0xB17C, + 24757 - 11904: 0xB1A3, + 24758 - 11904: 0xB465, + 24759 - 11904: 0xD560, + 24760 - 11904: 0xB1AA, + 24761 - 11904: 0xD8F9, + 24762 - 11904: 0xD556, + 24763 - 11904: 0xB1A2, + 24764 - 11904: 0xB1A5, + 24765 - 11904: 0xB17E, + 24766 - 11904: 0xD554, + 24767 - 11904: 0xD562, + 24768 - 11904: 0xD565, + 24769 - 11904: 0xD949, + 24771 - 11904: 0xD563, + 24772 - 11904: 0xD8FD, + 24773 - 11904: 0xB1A1, + 24774 - 11904: 0xB1A8, + 24775 - 11904: 0xB1AC, + 24776 - 11904: 0xD55D, + 24777 - 11904: 0xD8F8, + 24778 - 11904: 0xD561, + 24779 - 11904: 0xB17B, + 24780 - 11904: 0xD8FA, + 24781 - 11904: 0xD564, + 24782 - 11904: 0xD8FC, + 24783 - 11904: 0xD559, + 24785 - 11904: 0xB462, + 24787 - 11904: 0xD557, + 24788 - 11904: 0xD558, + 24789 - 11904: 0xB1A7, + 24791 - 11904: 0x8D71, + 24792 - 11904: 0xB1A6, + 24793 - 11904: 0xD55B, + 24794 - 11904: 0xB1AB, + 24795 - 11904: 0xD55F, + 24796 - 11904: 0xB1A4, + 24797 - 11904: 0xD55C, + 24798 - 11904: 0xFD64, + 24799 - 11904: 0xB1A9, + 24800 - 11904: 0xB466, + 24801 - 11904: 0xB463, + 24802 - 11904: 0xD8FB, + 24803 - 11904: 0x99BA, + 24804 - 11904: 0xD55A, + 24806 - 11904: 0xB17D, + 24807 - 11904: 0x9AD0, + 24808 - 11904: 0x9A61, + 24809 - 11904: 0xA0E5, + 24816 - 11904: 0xB46B, + 24817 - 11904: 0xB46F, + 24818 - 11904: 0xD940, + 24819 - 11904: 0xB751, + 24820 - 11904: 0xB46D, + 24821 - 11904: 0xD944, + 24822 - 11904: 0xB471, + 24823 - 11904: 0xDD65, + 24824 - 11904: 0xD946, + 24825 - 11904: 0xB753, + 24826 - 11904: 0xB469, + 24827 - 11904: 0xB46C, + 24828 - 11904: 0xD947, + 24829 - 11904: 0xA05B, + 24830 - 11904: 0xD948, + 24831 - 11904: 0xD94E, + 24832 - 11904: 0xB473, + 24833 - 11904: 0xB754, + 24835 - 11904: 0xD94A, + 24836 - 11904: 0xD94F, + 24837 - 11904: 0xD943, + 24838 - 11904: 0xB75E, + 24839 - 11904: 0x96AC, + 24840 - 11904: 0xB755, + 24841 - 11904: 0xB472, + 24842 - 11904: 0xD941, + 24843 - 11904: 0xD950, + 24844 - 11904: 0x9740, + 24845 - 11904: 0xB75D, + 24846 - 11904: 0xB470, + 24847 - 11904: 0xB74E, + 24848 - 11904: 0xD94D, + 24850 - 11904: 0xB474, + 24851 - 11904: 0xD945, + 24852 - 11904: 0xD8FE, + 24853 - 11904: 0xB46A, + 24854 - 11904: 0xD942, + 24856 - 11904: 0xD94B, + 24857 - 11904: 0x9EF1, + 24858 - 11904: 0xB74D, + 24859 - 11904: 0xB752, + 24860 - 11904: 0xB467, + 24861 - 11904: 0xD94C, + 24863 - 11904: 0xB750, + 24866 - 11904: 0x8C4D, + 24867 - 11904: 0xB468, + 24871 - 11904: 0xB75C, + 24872 - 11904: 0xE1C3, + 24873 - 11904: 0xDD70, + 24875 - 11904: 0xDD68, + 24876 - 11904: 0xE1C2, + 24878 - 11904: 0xDD6C, + 24879 - 11904: 0xDD6E, + 24880 - 11904: 0x9F7E, + 24882 - 11904: 0xDD6B, + 24884 - 11904: 0xB75B, + 24886 - 11904: 0xDD6A, + 24887 - 11904: 0xB75F, + 24891 - 11904: 0xE1D2, + 24893 - 11904: 0x8D72, + 24894 - 11904: 0xB75A, + 24895 - 11904: 0xBA40, + 24896 - 11904: 0xDD71, + 24897 - 11904: 0xE1C4, + 24898 - 11904: 0xFC76, + 24900 - 11904: 0xB758, + 24901 - 11904: 0xDD69, + 24902 - 11904: 0xDD6D, + 24903 - 11904: 0xB9FE, + 24904 - 11904: 0xB74F, + 24905 - 11904: 0xDD66, + 24906 - 11904: 0xDD67, + 24907 - 11904: 0xBA41, + 24908 - 11904: 0xB757, + 24909 - 11904: 0xB759, + 24910 - 11904: 0xB756, + 24911 - 11904: 0xDD6F, + 24912 - 11904: 0x96A9, + 24914 - 11904: 0xE1C8, + 24915 - 11904: 0xE1C9, + 24916 - 11904: 0xE1CE, + 24917 - 11904: 0xBC7D, + 24918 - 11904: 0xE1D5, + 24920 - 11904: 0xBA47, + 24921 - 11904: 0xA06E, + 24922 - 11904: 0xBA46, + 24923 - 11904: 0xE1D0, + 24924 - 11904: 0xFCAA, + 24925 - 11904: 0xBC7C, + 24926 - 11904: 0xE1C5, + 24927 - 11904: 0xBA45, + 24928 - 11904: 0xFBCD, + 24929 - 11904: 0xE1D4, + 24930 - 11904: 0xBA43, + 24931 - 11904: 0xBA44, + 24932 - 11904: 0xFC74, + 24933 - 11904: 0xE1D1, + 24934 - 11904: 0xE5AA, + 24935 - 11904: 0xBC7A, + 24936 - 11904: 0xB46E, + 24938 - 11904: 0xE1D3, + 24939 - 11904: 0xBCA3, + 24940 - 11904: 0xE1CB, + 24942 - 11904: 0xBC7B, + 24943 - 11904: 0xA074, + 24944 - 11904: 0xBCA2, + 24945 - 11904: 0xE1C6, + 24946 - 11904: 0xE1CA, + 24947 - 11904: 0xE1C7, + 24948 - 11904: 0xE1CD, + 24949 - 11904: 0xBA48, + 24950 - 11904: 0xBC79, + 24951 - 11904: 0xBA42, + 24953 - 11904: 0xE57A, + 24954 - 11904: 0xE1CF, + 24956 - 11904: 0xBCA1, + 24957 - 11904: 0xA071, + 24958 - 11904: 0xBCA4, + 24960 - 11904: 0xE1CC, + 24961 - 11904: 0xFC79, + 24962 - 11904: 0xBC7E, + 24963 - 11904: 0xE579, + 24967 - 11904: 0xFC7C, + 24969 - 11904: 0xE57E, + 24970 - 11904: 0xBECE, + 24971 - 11904: 0xE578, + 24972 - 11904: 0xE9A3, + 24973 - 11904: 0xE5A9, + 24974 - 11904: 0xBCA8, + 24976 - 11904: 0xBCA6, + 24977 - 11904: 0xBECC, + 24978 - 11904: 0xE5A6, + 24979 - 11904: 0xE5A2, + 24980 - 11904: 0xBCAC, + 24981 - 11904: 0x9C50, + 24982 - 11904: 0xE978, + 24984 - 11904: 0x9379, + 24985 - 11904: 0x9378, + 24986 - 11904: 0xBCAA, + 24987 - 11904: 0xE5A1, + 24988 - 11904: 0xA0DD, + 24989 - 11904: 0xE976, + 24991 - 11904: 0xE5A5, + 24993 - 11904: 0xE5A8, + 24994 - 11904: 0xE57D, + 24996 - 11904: 0xBCAB, + 24999 - 11904: 0xBCA5, + 25000 - 11904: 0xE977, + 25001 - 11904: 0xBECD, + 25002 - 11904: 0xE5A7, + 25003 - 11904: 0xBCA7, + 25004 - 11904: 0xBCA9, + 25005 - 11904: 0xE5A4, + 25006 - 11904: 0xBCAD, + 25007 - 11904: 0xE5A3, + 25008 - 11904: 0xE57C, + 25009 - 11904: 0xE57B, + 25010 - 11904: 0xBECB, + 25011 - 11904: 0xE5AB, + 25012 - 11904: 0xE97A, + 25013 - 11904: 0xECE0, + 25014 - 11904: 0xBED0, + 25015 - 11904: 0x8D75, + 25016 - 11904: 0xE9A2, + 25017 - 11904: 0x8D76, + 25018 - 11904: 0xE97E, + 25020 - 11904: 0xECE1, + 25022 - 11904: 0xBED1, + 25023 - 11904: 0xE9A1, + 25024 - 11904: 0x9374, + 25025 - 11904: 0xE97C, + 25026 - 11904: 0xC0B4, + 25027 - 11904: 0xECDF, + 25029 - 11904: 0xE979, + 25030 - 11904: 0xE97B, + 25031 - 11904: 0xC0B5, + 25032 - 11904: 0xBED3, + 25033 - 11904: 0xC0B3, + 25034 - 11904: 0xBED2, + 25035 - 11904: 0xC0B7, + 25036 - 11904: 0xE97D, + 25037 - 11904: 0xBECF, + 25039 - 11904: 0x8D77, + 25040 - 11904: 0xFCA5, + 25043 - 11904: 0xFCA2, + 25046 - 11904: 0xEFCF, + 25048 - 11904: 0xEFC7, + 25050 - 11904: 0x90C3, + 25054 - 11904: 0xECE7, + 25055 - 11904: 0xEFC8, + 25056 - 11904: 0xECE3, + 25058 - 11904: 0xA079, + 25059 - 11904: 0xC256, + 25060 - 11904: 0xECE5, + 25061 - 11904: 0xECE4, + 25062 - 11904: 0xC0B6, + 25063 - 11904: 0xECE2, + 25064 - 11904: 0xECE6, + 25065 - 11904: 0xEFD0, + 25066 - 11904: 0xEFCC, + 25067 - 11904: 0xEFCE, + 25069 - 11904: 0xEFC9, + 25070 - 11904: 0xEFCA, + 25072 - 11904: 0xEFCD, + 25073 - 11904: 0xEFCB, + 25074 - 11904: 0xC367, + 25077 - 11904: 0xC36A, + 25078 - 11904: 0xC369, + 25079 - 11904: 0xC368, + 25080 - 11904: 0xC461, + 25081 - 11904: 0xF44A, + 25082 - 11904: 0xC462, + 25083 - 11904: 0xF241, + 25084 - 11904: 0xC4DF, + 25085 - 11904: 0xF5CC, + 25086 - 11904: 0xC4E0, + 25087 - 11904: 0xC574, + 25088 - 11904: 0xC5CA, + 25089 - 11904: 0xF7D9, + 25091 - 11904: 0xF7DA, + 25092 - 11904: 0xF7DB, + 25095 - 11904: 0xF9BA, + 25096 - 11904: 0xA4E0, + 25097 - 11904: 0xC97C, + 25098 - 11904: 0xA5B3, + 25100 - 11904: 0xA6A6, + 25101 - 11904: 0xA6A7, + 25102 - 11904: 0xA6A5, + 25104 - 11904: 0xA6A8, + 25105 - 11904: 0xA7DA, + 25106 - 11904: 0xA7D9, + 25108 - 11904: 0xCCB1, + 25109 - 11904: 0xA9CF, + 25110 - 11904: 0xA9CE, + 25113 - 11904: 0xD1AF, + 25114 - 11904: 0xB1AD, + 25115 - 11904: 0xB1AE, + 25119 - 11904: 0xB475, + 25120 - 11904: 0xDD72, + 25121 - 11904: 0xB760, + 25122 - 11904: 0xB761, + 25123 - 11904: 0xDD74, + 25124 - 11904: 0xDD76, + 25125 - 11904: 0xDD75, + 25127 - 11904: 0xE1D7, + 25129 - 11904: 0xE1D6, + 25130 - 11904: 0xBA49, + 25131 - 11904: 0xE1D8, + 25132 - 11904: 0x8D79, + 25133 - 11904: 0xE5AC, + 25134 - 11904: 0xBCAE, + 25136 - 11904: 0xBED4, + 25138 - 11904: 0xC0B8, + 25139 - 11904: 0xC257, + 25140 - 11904: 0xC0B9, + 25142 - 11904: 0xA4E1, + 25143 - 11904: 0x8BFC, + 25145 - 11904: 0xA076, + 25146 - 11904: 0xCAE6, + 25149 - 11904: 0xCCB2, + 25150 - 11904: 0xA9D1, + 25151 - 11904: 0xA9D0, + 25152 - 11904: 0xA9D2, + 25153 - 11904: 0xABF3, + 25154 - 11904: 0xCED2, + 25155 - 11904: 0xCED3, + 25158 - 11904: 0xD1B0, + 25159 - 11904: 0xAEB0, + 25160 - 11904: 0xB1AF, + 25161 - 11904: 0xB476, + 25162 - 11904: 0xD951, + 25163 - 11904: 0xA4E2, + 25164 - 11904: 0x8BCD, + 25165 - 11904: 0xA47E, + 25166 - 11904: 0xA4E3, + 25168 - 11904: 0xC97D, + 25169 - 11904: 0xA5B7, + 25170 - 11904: 0xA5B6, + 25171 - 11904: 0xA5B4, + 25172 - 11904: 0xA5B5, + 25176 - 11904: 0xA6AB, + 25177 - 11904: 0xC9E9, + 25178 - 11904: 0xC9EB, + 25179 - 11904: 0xA6AA, + 25180 - 11904: 0xC9E3, + 25182 - 11904: 0xC9E4, + 25184 - 11904: 0xC9EA, + 25185 - 11904: 0xC9E6, + 25186 - 11904: 0xC9E8, + 25187 - 11904: 0xA6A9, + 25188 - 11904: 0xC9E5, + 25189 - 11904: 0xC9EC, + 25190 - 11904: 0xC9E7, + 25192 - 11904: 0x9F5A, + 25197 - 11904: 0xA7E1, + 25198 - 11904: 0xA7EA, + 25199 - 11904: 0xA7E8, + 25200 - 11904: 0xCAF0, + 25201 - 11904: 0xCAED, + 25202 - 11904: 0xCAF5, + 25203 - 11904: 0xA7E6, + 25204 - 11904: 0xCAF6, + 25206 - 11904: 0xA7DF, + 25207 - 11904: 0xCAF3, + 25209 - 11904: 0xA7E5, + 25210 - 11904: 0xCAEF, + 25211 - 11904: 0xCAEE, + 25212 - 11904: 0xA7E3, + 25213 - 11904: 0xCAF4, + 25214 - 11904: 0xA7E4, + 25215 - 11904: 0xA9D3, + 25216 - 11904: 0xA7DE, + 25217 - 11904: 0xCAF1, + 25218 - 11904: 0x9FF4, + 25219 - 11904: 0xCAE7, + 25220 - 11904: 0xA7DB, + 25221 - 11904: 0x9FBA, + 25222 - 11904: 0xA7EE, + 25223 - 11904: 0xCAEC, + 25224 - 11904: 0xCAF2, + 25225 - 11904: 0xA7E0, + 25226 - 11904: 0xA7E2, + 25228 - 11904: 0xCAE8, + 25230 - 11904: 0xCAE9, + 25231 - 11904: 0xCAEA, + 25232 - 11904: 0x8D7A, + 25233 - 11904: 0xA7ED, + 25234 - 11904: 0xA7E7, + 25235 - 11904: 0xA7EC, + 25236 - 11904: 0xCAEB, + 25237 - 11904: 0xA7EB, + 25238 - 11904: 0xA7DD, + 25239 - 11904: 0xA7DC, + 25240 - 11904: 0xA7E9, + 25245 - 11904: 0x9E45, + 25252 - 11904: 0x93B0, + 25254 - 11904: 0xA075, + 25256 - 11904: 0xA9E1, + 25257 - 11904: 0xCCBE, + 25258 - 11904: 0xCCB7, + 25259 - 11904: 0xA9DC, + 25260 - 11904: 0xA9EF, + 25261 - 11904: 0xCCB3, + 25262 - 11904: 0xCCBA, + 25263 - 11904: 0xCCBC, + 25264 - 11904: 0xCCBF, + 25265 - 11904: 0xA9EA, + 25267 - 11904: 0xCCBB, + 25268 - 11904: 0xCCB4, + 25269 - 11904: 0xA9E8, + 25270 - 11904: 0xCCB8, + 25272 - 11904: 0xCCC0, + 25273 - 11904: 0xA9D9, + 25275 - 11904: 0xCCBD, + 25276 - 11904: 0xA9E3, + 25277 - 11904: 0xA9E2, + 25278 - 11904: 0xCCB6, + 25279 - 11904: 0xA9D7, + 25281 - 11904: 0x87DD, + 25282 - 11904: 0xA9D8, + 25283 - 11904: 0x9B46, + 25284 - 11904: 0xA9D6, + 25285 - 11904: 0xFCAE, + 25286 - 11904: 0xA9EE, + 25287 - 11904: 0xA9E6, + 25288 - 11904: 0xA9E0, + 25289 - 11904: 0xA9D4, + 25290 - 11904: 0xCCB9, + 25291 - 11904: 0xA9DF, + 25292 - 11904: 0xA9D5, + 25293 - 11904: 0xA9E7, + 25294 - 11904: 0xA9F0, + 25295 - 11904: 0xCED4, + 25296 - 11904: 0xA9E4, + 25297 - 11904: 0xCCB5, + 25298 - 11904: 0xA9DA, + 25299 - 11904: 0xA9DD, + 25300 - 11904: 0xA9DE, + 25301 - 11904: 0xFCB0, + 25302 - 11904: 0xA9EC, + 25303 - 11904: 0xA9ED, + 25304 - 11904: 0xA9EB, + 25305 - 11904: 0xA9E5, + 25306 - 11904: 0xA9E9, + 25307 - 11904: 0xA9DB, + 25308 - 11904: 0xABF4, + 25311 - 11904: 0xFA51, + 25317 - 11904: 0x8D7B, + 25323 - 11904: 0xCEDA, + 25324 - 11904: 0xAC41, + 25325 - 11904: 0xABF8, + 25326 - 11904: 0xABFA, + 25327 - 11904: 0xAC40, + 25328 - 11904: 0xCEE6, + 25329 - 11904: 0xABFD, + 25330 - 11904: 0xD1B1, + 25331 - 11904: 0xAEB1, + 25332 - 11904: 0xAC43, + 25333 - 11904: 0xCED7, + 25334 - 11904: 0xCEDF, + 25335 - 11904: 0xABFE, + 25336 - 11904: 0xCEDE, + 25337 - 11904: 0xCEDB, + 25338 - 11904: 0xCEE3, + 25339 - 11904: 0xCEE5, + 25340 - 11904: 0xABF7, + 25341 - 11904: 0xABFB, + 25342 - 11904: 0xAC42, + 25343 - 11904: 0xAEB3, + 25344 - 11904: 0xCEE0, + 25345 - 11904: 0xABF9, + 25346 - 11904: 0xAC45, + 25347 - 11904: 0xCED9, + 25351 - 11904: 0xABFC, + 25352 - 11904: 0xAEB2, + 25353 - 11904: 0xABF6, + 25355 - 11904: 0xCED6, + 25356 - 11904: 0xCEDD, + 25357 - 11904: 0xCED5, + 25358 - 11904: 0xCED8, + 25359 - 11904: 0xCEDC, + 25360 - 11904: 0xD1B2, + 25361 - 11904: 0xAC44, + 25363 - 11904: 0xCEE1, + 25364 - 11904: 0xCEE2, + 25365 - 11904: 0xCEE4, + 25366 - 11904: 0xABF5, + 25368 - 11904: 0x8D7C, + 25384 - 11904: 0xAEC1, + 25385 - 11904: 0xD1BE, + 25386 - 11904: 0xAEBF, + 25387 - 11904: 0xAEC0, + 25388 - 11904: 0xD1B4, + 25389 - 11904: 0xD1C4, + 25390 - 11904: 0x9ED6, + 25391 - 11904: 0xAEB6, + 25393 - 11904: 0x93AC, + 25394 - 11904: 0xD566, + 25395 - 11904: 0xD1C6, + 25396 - 11904: 0xD1C0, + 25397 - 11904: 0x9F5B, + 25398 - 11904: 0xD1B7, + 25399 - 11904: 0x93A9, + 25400 - 11904: 0xD1C9, + 25401 - 11904: 0xD1BA, + 25402 - 11904: 0xAEBC, + 25403 - 11904: 0xD57D, + 25404 - 11904: 0xD1BD, + 25405 - 11904: 0xAEBE, + 25406 - 11904: 0xAEB5, + 25408 - 11904: 0xD1CB, + 25409 - 11904: 0xD1BF, + 25410 - 11904: 0xAEB8, + 25411 - 11904: 0xD1B8, + 25412 - 11904: 0xD1B5, + 25413 - 11904: 0xD1B6, + 25414 - 11904: 0xAEB9, + 25415 - 11904: 0xD1C5, + 25416 - 11904: 0xD1CC, + 25417 - 11904: 0xAEBB, + 25418 - 11904: 0xD1BC, + 25419 - 11904: 0xD1BB, + 25420 - 11904: 0xAEC3, + 25421 - 11904: 0xAEC2, + 25422 - 11904: 0xAEB4, + 25423 - 11904: 0xAEBA, + 25424 - 11904: 0xAEBD, + 25425 - 11904: 0xD1C8, + 25428 - 11904: 0xD1C2, + 25429 - 11904: 0xAEB7, + 25430 - 11904: 0xD1B3, + 25431 - 11904: 0xD1CA, + 25432 - 11904: 0xD1C1, + 25433 - 11904: 0xD1C3, + 25434 - 11904: 0xD1C7, + 25444 - 11904: 0xA07C, + 25445 - 11904: 0xD567, + 25447 - 11904: 0xB1B7, + 25448 - 11904: 0xB1CB, + 25449 - 11904: 0xB1CA, + 25451 - 11904: 0xB1BF, + 25452 - 11904: 0xFCB2, + 25453 - 11904: 0xD579, + 25454 - 11904: 0xD575, + 25455 - 11904: 0xD572, + 25456 - 11904: 0xD5A6, + 25457 - 11904: 0xB1BA, + 25458 - 11904: 0xB1B2, + 25461 - 11904: 0xD577, + 25462 - 11904: 0xB4A8, + 25463 - 11904: 0xB1B6, + 25464 - 11904: 0xD5A1, + 25465 - 11904: 0x8AC1, + 25466 - 11904: 0xB1CC, + 25467 - 11904: 0xB1C9, + 25468 - 11904: 0xD57B, + 25469 - 11904: 0xD56A, + 25471 - 11904: 0x9FB4, + 25472 - 11904: 0xB1C8, + 25473 - 11904: 0xD5A3, + 25474 - 11904: 0xD569, + 25475 - 11904: 0xB1BD, + 25476 - 11904: 0xB1C1, + 25477 - 11904: 0xD5A2, + 25479 - 11904: 0xD573, + 25480 - 11904: 0xB1C2, + 25481 - 11904: 0xB1BC, + 25482 - 11904: 0xD568, + 25483 - 11904: 0xFCAC, + 25484 - 11904: 0xB478, + 25485 - 11904: 0xD5A5, + 25486 - 11904: 0xD571, + 25487 - 11904: 0xB1C7, + 25488 - 11904: 0xD574, + 25489 - 11904: 0xD5A4, + 25490 - 11904: 0xB1C6, + 25492 - 11904: 0xD952, + 25494 - 11904: 0xB1B3, + 25495 - 11904: 0xD56F, + 25496 - 11904: 0xB1B8, + 25497 - 11904: 0xB1C3, + 25499 - 11904: 0xB1BE, + 25500 - 11904: 0xD578, + 25501 - 11904: 0xD56E, + 25502 - 11904: 0xD56C, + 25503 - 11904: 0xD57E, + 25504 - 11904: 0xB1B0, + 25505 - 11904: 0xB1C4, + 25506 - 11904: 0xB1B4, + 25507 - 11904: 0xB477, + 25508 - 11904: 0xD57C, + 25509 - 11904: 0xB1B5, + 25511 - 11904: 0xB1B1, + 25512 - 11904: 0xB1C0, + 25513 - 11904: 0xB1BB, + 25514 - 11904: 0xB1B9, + 25515 - 11904: 0xD570, + 25516 - 11904: 0xB1C5, + 25517 - 11904: 0xD56D, + 25518 - 11904: 0xD57A, + 25519 - 11904: 0xD576, + 25520 - 11904: 0xD954, + 25521 - 11904: 0xD953, + 25529 - 11904: 0x9E4C, + 25533 - 11904: 0xD56B, + 25534 - 11904: 0xD964, + 25536 - 11904: 0xB47A, + 25537 - 11904: 0x8FC5, + 25538 - 11904: 0xD96A, + 25539 - 11904: 0xD959, + 25540 - 11904: 0xD967, + 25541 - 11904: 0xDD77, + 25542 - 11904: 0xB47D, + 25543 - 11904: 0xD96B, + 25544 - 11904: 0xD96E, + 25545 - 11904: 0xB47C, + 25546 - 11904: 0xD95C, + 25547 - 11904: 0xD96D, + 25548 - 11904: 0xD96C, + 25549 - 11904: 0xB47E, + 25550 - 11904: 0xD955, + 25551 - 11904: 0xB479, + 25552 - 11904: 0xB4A3, + 25553 - 11904: 0x93AD, + 25554 - 11904: 0xB4A1, + 25555 - 11904: 0xD969, + 25557 - 11904: 0xD95F, + 25558 - 11904: 0xB4A5, + 25559 - 11904: 0xD970, + 25560 - 11904: 0xD968, + 25561 - 11904: 0xD971, + 25562 - 11904: 0xB4AD, + 25563 - 11904: 0xB4AB, + 25564 - 11904: 0xD966, + 25565 - 11904: 0xD965, + 25566 - 11904: 0x9DC3, + 25567 - 11904: 0xD963, + 25568 - 11904: 0xD95D, + 25569 - 11904: 0xB4A4, + 25570 - 11904: 0x8DA2, + 25571 - 11904: 0xB4A2, + 25572 - 11904: 0xD1B9, + 25573 - 11904: 0xD956, + 25574 - 11904: 0x9D4A, + 25575 - 11904: 0xDDB7, + 25576 - 11904: 0xD957, + 25577 - 11904: 0xB47B, + 25578 - 11904: 0xB4AA, + 25579 - 11904: 0xDD79, + 25581 - 11904: 0xB4A6, + 25582 - 11904: 0xB4A7, + 25583 - 11904: 0xD958, + 25584 - 11904: 0xD96F, + 25585 - 11904: 0xDD78, + 25586 - 11904: 0xD960, + 25587 - 11904: 0xD95B, + 25588 - 11904: 0xB4A9, + 25589 - 11904: 0xD961, + 25590 - 11904: 0xD95E, + 25592 - 11904: 0xFCB6, + 25593 - 11904: 0xB4AE, + 25595 - 11904: 0x8DA3, + 25596 - 11904: 0x9E4B, + 25598 - 11904: 0x9E4D, + 25606 - 11904: 0xB770, + 25607 - 11904: 0x8DA4, + 25609 - 11904: 0xDD7C, + 25610 - 11904: 0xDDB1, + 25611 - 11904: 0xDDB6, + 25612 - 11904: 0xDDAA, + 25613 - 11904: 0xB76C, + 25614 - 11904: 0xDDBB, + 25615 - 11904: 0xB769, + 25616 - 11904: 0xDD7A, + 25618 - 11904: 0xDD7B, + 25619 - 11904: 0xB762, + 25620 - 11904: 0xB76B, + 25621 - 11904: 0xDDA4, + 25622 - 11904: 0xB76E, + 25623 - 11904: 0xB76F, + 25624 - 11904: 0xDDA5, + 25626 - 11904: 0xDDB2, + 25627 - 11904: 0xDDB8, + 25628 - 11904: 0xB76A, + 25630 - 11904: 0xB764, + 25631 - 11904: 0xDDA3, + 25632 - 11904: 0xDD7D, + 25633 - 11904: 0xDDBA, + 25634 - 11904: 0xDDA8, + 25635 - 11904: 0xDDA9, + 25636 - 11904: 0xDD7E, + 25637 - 11904: 0xDDB4, + 25638 - 11904: 0xDDAB, + 25639 - 11904: 0xDDB5, + 25640 - 11904: 0xDDAD, + 25642 - 11904: 0xB765, + 25643 - 11904: 0xE1D9, + 25644 - 11904: 0xB768, + 25645 - 11904: 0xB766, + 25646 - 11904: 0xDDB9, + 25647 - 11904: 0xDDB0, + 25648 - 11904: 0xDDAC, + 25650 - 11904: 0x8AFD, + 25651 - 11904: 0xDDA1, + 25652 - 11904: 0xBA53, + 25653 - 11904: 0xDDAF, + 25654 - 11904: 0xB76D, + 25655 - 11904: 0xDDA7, + 25656 - 11904: 0xFCB5, + 25657 - 11904: 0xDDA6, + 25658 - 11904: 0xFCC3, + 25659 - 11904: 0x93B2, + 25661 - 11904: 0xB767, + 25662 - 11904: 0xB763, + 25663 - 11904: 0xE1EE, + 25664 - 11904: 0xDDB3, + 25665 - 11904: 0xDDAE, + 25667 - 11904: 0xDDA2, + 25675 - 11904: 0xE1E9, + 25677 - 11904: 0xE1DA, + 25678 - 11904: 0xE1E5, + 25680 - 11904: 0xE1EC, + 25681 - 11904: 0xBA51, + 25682 - 11904: 0xB4AC, + 25683 - 11904: 0xE1EA, + 25684 - 11904: 0xBA4C, + 25688 - 11904: 0xBA4B, + 25689 - 11904: 0xE1F1, + 25690 - 11904: 0x8DA5, + 25691 - 11904: 0xE1DB, + 25692 - 11904: 0xE1E8, + 25693 - 11904: 0xE1DC, + 25694 - 11904: 0xE1E7, + 25695 - 11904: 0xBA4F, + 25696 - 11904: 0xE1EB, + 25697 - 11904: 0xD962, + 25701 - 11904: 0xE1F2, + 25702 - 11904: 0xE1E3, + 25703 - 11904: 0xBA52, + 25704 - 11904: 0xE5BA, + 25705 - 11904: 0xBCAF, + 25707 - 11904: 0xE1F0, + 25708 - 11904: 0xE1EF, + 25709 - 11904: 0xBA54, + 25710 - 11904: 0xE5AD, + 25711 - 11904: 0xBCB0, + 25712 - 11904: 0xE5AE, + 25713 - 11904: 0x93A1, + 25714 - 11904: 0xE1DF, + 25715 - 11904: 0xE1E0, + 25716 - 11904: 0xE1DD, + 25717 - 11904: 0xE1E2, + 25718 - 11904: 0xE1DE, + 25719 - 11904: 0xE1F3, + 25720 - 11904: 0xBA4E, + 25721 - 11904: 0xBCB1, + 25722 - 11904: 0xBA50, + 25723 - 11904: 0xBA55, + 25724 - 11904: 0x8AC6, + 25725 - 11904: 0xE1E1, + 25727 - 11904: 0xE1ED, + 25730 - 11904: 0xE1E6, + 25733 - 11904: 0xE5B1, + 25735 - 11904: 0xBA4A, + 25736 - 11904: 0xBCB4, + 25737 - 11904: 0xE9AA, + 25738 - 11904: 0xE5B6, + 25739 - 11904: 0xE5B5, + 25740 - 11904: 0xE5B7, + 25741 - 11904: 0x8A5B, + 25743 - 11904: 0xE5B4, + 25744 - 11904: 0xFCB9, + 25745 - 11904: 0x894D, + 25746 - 11904: 0xBCBB, + 25747 - 11904: 0xBCB8, + 25749 - 11904: 0xBCB9, + 25750 - 11904: 0xE5AF, + 25751 - 11904: 0xE5B2, + 25752 - 11904: 0xE5BC, + 25753 - 11904: 0xBCC1, + 25754 - 11904: 0xBCBF, + 25756 - 11904: 0xE5B3, + 25757 - 11904: 0xD95A, + 25758 - 11904: 0xBCB2, + 25759 - 11904: 0xE5B9, + 25760 - 11904: 0xE5B0, + 25762 - 11904: 0xBCC2, + 25763 - 11904: 0xE5B8, + 25764 - 11904: 0xBA4D, + 25765 - 11904: 0xBCB7, + 25766 - 11904: 0xE1E4, + 25769 - 11904: 0xBCBA, + 25771 - 11904: 0xBCBE, + 25772 - 11904: 0xBCC0, + 25773 - 11904: 0xBCBD, + 25774 - 11904: 0xBCBC, + 25775 - 11904: 0xFED4, + 25776 - 11904: 0xBCB6, + 25777 - 11904: 0xE5BB, + 25778 - 11904: 0xBCB3, + 25779 - 11904: 0xBCC3, + 25780 - 11904: 0x8A78, + 25782 - 11904: 0x93AB, + 25787 - 11904: 0xBED8, + 25788 - 11904: 0xBED9, + 25789 - 11904: 0xE9A9, + 25790 - 11904: 0xBEE2, + 25791 - 11904: 0xBEDF, + 25792 - 11904: 0x8DA7, + 25793 - 11904: 0xBED6, + 25794 - 11904: 0xBEDD, + 25795 - 11904: 0xE9AB, + 25796 - 11904: 0xBEDB, + 25797 - 11904: 0xBED5, + 25799 - 11904: 0xBEDC, + 25801 - 11904: 0xE9A8, + 25802 - 11904: 0xC0BB, + 25803 - 11904: 0xBED7, + 25805 - 11904: 0xBEDE, + 25806 - 11904: 0xC0BA, + 25807 - 11904: 0xE9A7, + 25808 - 11904: 0xE9A6, + 25810 - 11904: 0xBEE0, + 25811 - 11904: 0x9F45, + 25812 - 11904: 0xBEE1, + 25814 - 11904: 0xE9A5, + 25815 - 11904: 0xE9A4, + 25816 - 11904: 0xC0BC, + 25817 - 11904: 0xE9AE, + 25818 - 11904: 0xBEDA, + 25819 - 11904: 0xE9AC, + 25821 - 11904: 0x8A56, + 25824 - 11904: 0xC0BD, + 25825 - 11904: 0xFCBF, + 25826 - 11904: 0xC0C2, + 25827 - 11904: 0xECEA, + 25828 - 11904: 0xECEC, + 25829 - 11904: 0xFCC0, + 25830 - 11904: 0xC0BF, + 25831 - 11904: 0x8EE6, + 25832 - 11904: 0xECED, + 25833 - 11904: 0xECE9, + 25834 - 11904: 0x8AA4, + 25835 - 11904: 0xECEB, + 25836 - 11904: 0xC0C0, + 25837 - 11904: 0xC0C3, + 25839 - 11904: 0xECE8, + 25840 - 11904: 0xC0BE, + 25841 - 11904: 0xC0C1, + 25842 - 11904: 0xC259, + 25843 - 11904: 0xE9AD, + 25844 - 11904: 0xC258, + 25847 - 11904: 0xC25E, + 25848 - 11904: 0xEFD4, + 25850 - 11904: 0xC25C, + 25851 - 11904: 0xC25D, + 25852 - 11904: 0xEFD7, + 25853 - 11904: 0xEFD3, + 25854 - 11904: 0xC25A, + 25855 - 11904: 0xEFD1, + 25856 - 11904: 0xC36B, + 25857 - 11904: 0xEFD5, + 25859 - 11904: 0xEFD6, + 25860 - 11904: 0xEFD2, + 25862 - 11904: 0xC25B, + 25863 - 11904: 0xF242, + 25865 - 11904: 0xF245, + 25866 - 11904: 0x8943, + 25868 - 11904: 0xF246, + 25869 - 11904: 0xF244, + 25870 - 11904: 0xF247, + 25871 - 11904: 0xC36C, + 25872 - 11904: 0xF243, + 25873 - 11904: 0x93F3, + 25875 - 11904: 0xF44E, + 25876 - 11904: 0xC464, + 25877 - 11904: 0xF44D, + 25878 - 11904: 0xF44C, + 25879 - 11904: 0xF44B, + 25880 - 11904: 0xC463, + 25881 - 11904: 0xC465, + 25883 - 11904: 0xF5CD, + 25884 - 11904: 0xC4E2, + 25885 - 11904: 0xC4E1, + 25886 - 11904: 0xFCAB, + 25887 - 11904: 0x9EA2, + 25888 - 11904: 0xF6E1, + 25889 - 11904: 0xF6E0, + 25890 - 11904: 0xF6E3, + 25891 - 11904: 0xC5CB, + 25892 - 11904: 0xC575, + 25893 - 11904: 0xF7DD, + 25894 - 11904: 0xF6E2, + 25897 - 11904: 0xF7DC, + 25898 - 11904: 0xC5CD, + 25899 - 11904: 0xC5CC, + 25900 - 11904: 0xC5F3, + 25901 - 11904: 0xF8A9, + 25902 - 11904: 0xF8EF, + 25903 - 11904: 0xA4E4, + 25904 - 11904: 0x9DC7, + 25906 - 11904: 0xD972, + 25907 - 11904: 0xE9AF, + 25908 - 11904: 0xC6D2, + 25909 - 11904: 0x8BCE, + 25910 - 11904: 0xA6AC, + 25911 - 11904: 0xCAF7, + 25912 - 11904: 0xA7F1, + 25913 - 11904: 0xA7EF, + 25915 - 11904: 0xA7F0, + 25917 - 11904: 0xCCC1, + 25918 - 11904: 0xA9F1, + 25919 - 11904: 0xAC46, + 25921 - 11904: 0xCEE7, + 25923 - 11904: 0xCEE8, + 25925 - 11904: 0xAC47, + 25926 - 11904: 0xD1CE, + 25928 - 11904: 0xAEC4, + 25929 - 11904: 0xAEC5, + 25930 - 11904: 0xD1CD, + 25933 - 11904: 0xFCC5, + 25935 - 11904: 0xB1D3, + 25937 - 11904: 0xB1CF, + 25939 - 11904: 0xD5A7, + 25940 - 11904: 0xB1D6, + 25941 - 11904: 0xB1D5, + 25942 - 11904: 0xB1CE, + 25943 - 11904: 0xB1D1, + 25944 - 11904: 0xB1D4, + 25945 - 11904: 0xB1D0, + 25948 - 11904: 0xD976, + 25949 - 11904: 0xB1CD, + 25950 - 11904: 0xB4AF, + 25951 - 11904: 0xFCCB, + 25954 - 11904: 0xB4B1, + 25955 - 11904: 0xB4B2, + 25956 - 11904: 0xD975, + 25957 - 11904: 0xD978, + 25958 - 11904: 0xB4B0, + 25959 - 11904: 0xD973, + 25960 - 11904: 0xD977, + 25962 - 11904: 0xD974, + 25963 - 11904: 0x93B3, + 25964 - 11904: 0xB771, + 25965 - 11904: 0xFCCA, + 25967 - 11904: 0xDDBC, + 25970 - 11904: 0xBA56, + 25971 - 11904: 0xE1F4, + 25972 - 11904: 0xBEE3, + 25973 - 11904: 0xBCC4, + 25974 - 11904: 0xE5BD, + 25975 - 11904: 0xBCC5, + 25976 - 11904: 0xBCC6, + 25977 - 11904: 0xE5BF, + 25978 - 11904: 0xE5BE, + 25979 - 11904: 0xE5C0, + 25980 - 11904: 0xE9B1, + 25983 - 11904: 0xE9B0, + 25984 - 11904: 0xECEF, + 25985 - 11904: 0xECEE, + 25986 - 11904: 0xC0C4, + 25987 - 11904: 0xC0C5, + 25988 - 11904: 0xF248, + 25989 - 11904: 0xFCC9, + 25990 - 11904: 0x8DAC, + 25991 - 11904: 0xA4E5, + 25992 - 11904: 0xFBC6, + 25993 - 11904: 0x8967, + 25995 - 11904: 0x8C7E, + 25996 - 11904: 0xD979, + 26000 - 11904: 0xB4B4, + 26001 - 11904: 0xB4B3, + 26002 - 11904: 0xDDBD, + 26004 - 11904: 0xEFD8, + 26005 - 11904: 0xC4E3, + 26006 - 11904: 0xF7DE, + 26007 - 11904: 0xA4E6, + 26009 - 11904: 0xAEC6, + 26011 - 11904: 0xB1D8, + 26012 - 11904: 0xB1D7, + 26013 - 11904: 0xD97A, + 26014 - 11904: 0xD97B, + 26015 - 11904: 0xB772, + 26016 - 11904: 0xE1F5, + 26017 - 11904: 0xBA57, + 26018 - 11904: 0xE9B2, + 26020 - 11904: 0xA4E7, + 26021 - 11904: 0xA5B8, + 26023 - 11904: 0xA9F2, + 26024 - 11904: 0xCCC2, + 26026 - 11904: 0xCEE9, + 26027 - 11904: 0xAC48, + 26028 - 11904: 0xB1D9, + 26030 - 11904: 0xD97C, + 26031 - 11904: 0xB4B5, + 26032 - 11904: 0xB773, + 26034 - 11904: 0xE5C1, + 26035 - 11904: 0xE5C2, + 26037 - 11904: 0xFCCD, + 26038 - 11904: 0xECF0, + 26039 - 11904: 0xC25F, + 26040 - 11904: 0xF8F0, + 26041 - 11904: 0xA4E8, + 26043 - 11904: 0xCCC3, + 26044 - 11904: 0xA9F3, + 26045 - 11904: 0xAC49, + 26046 - 11904: 0x9CF3, + 26047 - 11904: 0xCEEA, + 26049 - 11904: 0xAEC7, + 26050 - 11904: 0xD1D2, + 26051 - 11904: 0xD1D0, + 26052 - 11904: 0xD1D1, + 26053 - 11904: 0xAEC8, + 26054 - 11904: 0xD1CF, + 26059 - 11904: 0xB1DB, + 26060 - 11904: 0xB1DC, + 26061 - 11904: 0xD5A8, + 26062 - 11904: 0xB1DD, + 26063 - 11904: 0xB1DA, + 26064 - 11904: 0xD97D, + 26065 - 11904: 0xFCD0, + 26066 - 11904: 0xD97E, + 26067 - 11904: 0xDDBE, + 26068 - 11904: 0x95BB, + 26070 - 11904: 0xBA59, + 26071 - 11904: 0xBA58, + 26074 - 11904: 0xECF1, + 26075 - 11904: 0xEFD9, + 26077 - 11904: 0xF24A, + 26078 - 11904: 0xF249, + 26079 - 11904: 0xF44F, + 26080 - 11904: 0xFCD3, + 26081 - 11904: 0xC95E, + 26082 - 11904: 0xAC4A, + 26083 - 11904: 0xFCD4, + 26085 - 11904: 0xA4E9, + 26086 - 11904: 0xA5B9, + 26088 - 11904: 0xA6AE, + 26089 - 11904: 0xA6AD, + 26092 - 11904: 0xA6AF, + 26093 - 11904: 0xA6B0, + 26094 - 11904: 0xC9EE, + 26095 - 11904: 0xC9ED, + 26096 - 11904: 0xCAF8, + 26097 - 11904: 0xA7F2, + 26098 - 11904: 0xCAFB, + 26099 - 11904: 0xCAFA, + 26100 - 11904: 0xCAF9, + 26101 - 11904: 0xCAFC, + 26106 - 11904: 0xA9F4, + 26107 - 11904: 0xCCC9, + 26108 - 11904: 0xCCC5, + 26109 - 11904: 0xCCCE, + 26111 - 11904: 0x8DAE, + 26112 - 11904: 0xA9FB, + 26114 - 11904: 0xA9F9, + 26115 - 11904: 0xCCCA, + 26116 - 11904: 0xCCC6, + 26117 - 11904: 0xCCCD, + 26118 - 11904: 0xA9F8, + 26119 - 11904: 0xAA40, + 26120 - 11904: 0xCCC8, + 26121 - 11904: 0xCCC4, + 26122 - 11904: 0xA9FE, + 26123 - 11904: 0xCCCB, + 26124 - 11904: 0xA9F7, + 26125 - 11904: 0xCCCC, + 26126 - 11904: 0xA9FA, + 26127 - 11904: 0xA9FC, + 26128 - 11904: 0xCCD0, + 26129 - 11904: 0xCCCF, + 26130 - 11904: 0xCCC7, + 26131 - 11904: 0xA9F6, + 26132 - 11904: 0xA9F5, + 26133 - 11904: 0xA9FD, + 26136 - 11904: 0xFCD7, + 26140 - 11904: 0xCEEF, + 26141 - 11904: 0xCEF5, + 26142 - 11904: 0x93DB, + 26143 - 11904: 0xAC50, + 26144 - 11904: 0xAC4D, + 26145 - 11904: 0xCEEC, + 26146 - 11904: 0xCEF1, + 26147 - 11904: 0xFE63, + 26148 - 11904: 0xAC53, + 26149 - 11904: 0xAC4B, + 26150 - 11904: 0xCEF0, + 26151 - 11904: 0xAC4E, + 26152 - 11904: 0xAC51, + 26155 - 11904: 0xCEF3, + 26157 - 11904: 0xAC4C, + 26158 - 11904: 0xCEF8, + 26159 - 11904: 0xAC4F, + 26160 - 11904: 0x93D5, + 26161 - 11904: 0xAC52, + 26162 - 11904: 0xCEED, + 26163 - 11904: 0xCEF2, + 26164 - 11904: 0xCEF6, + 26165 - 11904: 0xCEEE, + 26166 - 11904: 0xCEEB, + 26169 - 11904: 0xCEF7, + 26170 - 11904: 0xCEF4, + 26177 - 11904: 0xAED0, + 26178 - 11904: 0xAEC9, + 26179 - 11904: 0xAECC, + 26180 - 11904: 0xFCDA, + 26181 - 11904: 0xAECF, + 26183 - 11904: 0xD1D5, + 26184 - 11904: 0x9B71, + 26185 - 11904: 0xAECA, + 26186 - 11904: 0xD1D3, + 26187 - 11904: 0xFCDD, + 26188 - 11904: 0xAECE, + 26189 - 11904: 0x8764, + 26191 - 11904: 0xAECB, + 26193 - 11904: 0xD1D6, + 26194 - 11904: 0xAECD, + 26195 - 11904: 0x8DAF, + 26199 - 11904: 0xFAF2, + 26201 - 11904: 0xD5AC, + 26202 - 11904: 0xB1DF, + 26203 - 11904: 0xD5AB, + 26204 - 11904: 0xD5AD, + 26205 - 11904: 0xB1DE, + 26206 - 11904: 0xB1E3, + 26207 - 11904: 0xD1D4, + 26208 - 11904: 0x87B5, + 26209 - 11904: 0xD5AA, + 26210 - 11904: 0xD5AE, + 26211 - 11904: 0x93D8, + 26212 - 11904: 0xB1E0, + 26213 - 11904: 0xD5A9, + 26214 - 11904: 0xB1E2, + 26215 - 11904: 0xFCDF, + 26216 - 11904: 0xB1E1, + 26218 - 11904: 0xD9A7, + 26219 - 11904: 0x93D3, + 26220 - 11904: 0xD9A2, + 26222 - 11904: 0xB4B6, + 26223 - 11904: 0xB4BA, + 26224 - 11904: 0xB4B7, + 26225 - 11904: 0xD9A5, + 26226 - 11904: 0xD9A8, + 26227 - 11904: 0xFCE1, + 26228 - 11904: 0xFCE2, + 26230 - 11904: 0xB4B9, + 26231 - 11904: 0xB4BE, + 26232 - 11904: 0xDDC7, + 26233 - 11904: 0xD9A6, + 26234 - 11904: 0xB4BC, + 26235 - 11904: 0xD9A3, + 26236 - 11904: 0xD9A1, + 26237 - 11904: 0x8E76, + 26238 - 11904: 0xB4BD, + 26240 - 11904: 0xD9A4, + 26244 - 11904: 0xB779, + 26245 - 11904: 0xFC62, + 26246 - 11904: 0xDDBF, + 26247 - 11904: 0xB776, + 26248 - 11904: 0xB777, + 26249 - 11904: 0xB775, + 26250 - 11904: 0xDDC4, + 26251 - 11904: 0xDDC3, + 26252 - 11904: 0xDDC0, + 26253 - 11904: 0xB77B, + 26254 - 11904: 0x93D1, + 26256 - 11904: 0xDDC2, + 26257 - 11904: 0xB4BB, + 26258 - 11904: 0x8DB1, + 26260 - 11904: 0xDDC6, + 26261 - 11904: 0xDDC1, + 26262 - 11904: 0xB778, + 26263 - 11904: 0xB774, + 26264 - 11904: 0xB77A, + 26265 - 11904: 0xDDC5, + 26266 - 11904: 0x9859, + 26269 - 11904: 0xBA5C, + 26271 - 11904: 0xE1F8, + 26272 - 11904: 0xE1F7, + 26273 - 11904: 0xE1F6, + 26274 - 11904: 0xBA5A, + 26276 - 11904: 0xFB52, + 26280 - 11904: 0xBA5B, + 26281 - 11904: 0xE5C5, + 26282 - 11904: 0xE5C8, + 26283 - 11904: 0xBCC8, + 26285 - 11904: 0xFB53, + 26286 - 11904: 0xBCC7, + 26287 - 11904: 0xE5C9, + 26288 - 11904: 0xE5C4, + 26289 - 11904: 0xBCCA, + 26290 - 11904: 0xE5C6, + 26291 - 11904: 0xFB4D, + 26292 - 11904: 0xBCC9, + 26293 - 11904: 0xE5C3, + 26294 - 11904: 0x9CBF, + 26295 - 11904: 0xE5C7, + 26296 - 11904: 0xBEE9, + 26297 - 11904: 0xBEE6, + 26298 - 11904: 0xE9BB, + 26299 - 11904: 0xE9BA, + 26301 - 11904: 0xE9B9, + 26302 - 11904: 0xE9B4, + 26303 - 11904: 0x9B72, + 26304 - 11904: 0xE9B5, + 26308 - 11904: 0xBEE7, + 26310 - 11904: 0xBEE4, + 26311 - 11904: 0xBEE8, + 26312 - 11904: 0xE9B3, + 26313 - 11904: 0xBEE5, + 26314 - 11904: 0xE9B6, + 26315 - 11904: 0xE9B7, + 26316 - 11904: 0xE9BC, + 26317 - 11904: 0xFB50, + 26318 - 11904: 0x93BE, + 26319 - 11904: 0xE9B8, + 26322 - 11904: 0xECF2, + 26326 - 11904: 0xC0C7, + 26328 - 11904: 0xEFDC, + 26329 - 11904: 0xC0C6, + 26330 - 11904: 0xEFDA, + 26331 - 11904: 0xEFDB, + 26332 - 11904: 0xC260, + 26333 - 11904: 0xC36E, + 26334 - 11904: 0xF24B, + 26336 - 11904: 0xC36D, + 26339 - 11904: 0xF451, + 26340 - 11904: 0xF452, + 26342 - 11904: 0xC466, + 26343 - 11904: 0x8CDB, + 26344 - 11904: 0xF450, + 26345 - 11904: 0xC4E4, + 26347 - 11904: 0xF7DF, + 26348 - 11904: 0xC5CE, + 26349 - 11904: 0xF8AA, + 26350 - 11904: 0xF8AB, + 26352 - 11904: 0xA4EA, + 26353 - 11904: 0x9DF1, + 26354 - 11904: 0xA6B1, + 26355 - 11904: 0xA6B2, + 26356 - 11904: 0xA7F3, + 26358 - 11904: 0xCCD1, + 26359 - 11904: 0xAC54, + 26360 - 11904: 0xAED1, + 26361 - 11904: 0xB1E4, + 26364 - 11904: 0xB0D2, + 26366 - 11904: 0xB4BF, + 26367 - 11904: 0xB4C0, + 26368 - 11904: 0xB3CC, + 26369 - 11904: 0xD9A9, + 26370 - 11904: 0xFCEB, + 26371 - 11904: 0xB77C, + 26372 - 11904: 0xE1FA, + 26373 - 11904: 0xE1F9, + 26376 - 11904: 0xA4EB, + 26377 - 11904: 0xA6B3, + 26378 - 11904: 0xCCD2, + 26379 - 11904: 0xAA42, + 26380 - 11904: 0xA0BB, + 26381 - 11904: 0xAA41, + 26382 - 11904: 0x9B7E, + 26383 - 11904: 0xCEF9, + 26384 - 11904: 0xCEFA, + 26386 - 11904: 0xD1D7, + 26387 - 11904: 0xD1D8, + 26388 - 11904: 0xAED2, + 26389 - 11904: 0xAED3, + 26390 - 11904: 0x8DB3, + 26391 - 11904: 0xAED4, + 26392 - 11904: 0xD5AF, + 26393 - 11904: 0x8C52, + 26395 - 11904: 0xB1E6, + 26397 - 11904: 0xB4C2, + 26398 - 11904: 0x9AE8, + 26399 - 11904: 0xB4C1, + 26400 - 11904: 0xDDC8, + 26401 - 11904: 0xDF7A, + 26402 - 11904: 0xE1FB, + 26403 - 11904: 0xE9BD, + 26405 - 11904: 0x8EDC, + 26406 - 11904: 0xC261, + 26407 - 11904: 0xC467, + 26408 - 11904: 0xA4EC, + 26410 - 11904: 0xA5BC, + 26411 - 11904: 0xA5BD, + 26412 - 11904: 0xA5BB, + 26413 - 11904: 0xA5BE, + 26414 - 11904: 0xA5BA, + 26417 - 11904: 0xA6B6, + 26419 - 11904: 0xC9F6, + 26420 - 11904: 0xA6B5, + 26421 - 11904: 0xA6B7, + 26422 - 11904: 0x9CF9, + 26424 - 11904: 0xC9F1, + 26425 - 11904: 0xC9F0, + 26426 - 11904: 0xC9F3, + 26427 - 11904: 0xC9F2, + 26428 - 11904: 0xC9F5, + 26429 - 11904: 0xA6B4, + 26430 - 11904: 0xC9EF, + 26431 - 11904: 0xC9F4, + 26436 - 11904: 0xFA50, + 26437 - 11904: 0xCAFD, + 26438 - 11904: 0xA7FD, + 26439 - 11904: 0xCAFE, + 26440 - 11904: 0xCB43, + 26441 - 11904: 0xA7FC, + 26443 - 11904: 0xCB47, + 26444 - 11904: 0xCB42, + 26445 - 11904: 0xCB45, + 26446 - 11904: 0xA7F5, + 26447 - 11904: 0xA7F6, + 26448 - 11904: 0xA7F7, + 26449 - 11904: 0xA7F8, + 26451 - 11904: 0xA840, + 26453 - 11904: 0xCB41, + 26454 - 11904: 0xA7FA, + 26455 - 11904: 0xA841, + 26457 - 11904: 0xCB40, + 26458 - 11904: 0xCB46, + 26460 - 11904: 0xA7F9, + 26461 - 11904: 0xCB44, + 26462 - 11904: 0xFCF1, + 26463 - 11904: 0xA7F4, + 26464 - 11904: 0xA7FE, + 26465 - 11904: 0x98E7, + 26466 - 11904: 0xFCF3, + 26471 - 11904: 0xFCF2, + 26474 - 11904: 0xAA57, + 26475 - 11904: 0x8CCA, + 26476 - 11904: 0xCCD4, + 26477 - 11904: 0xAA43, + 26478 - 11904: 0x8775, + 26479 - 11904: 0xAA4D, + 26480 - 11904: 0xAA4E, + 26481 - 11904: 0xAA46, + 26482 - 11904: 0xAA58, + 26483 - 11904: 0xAA48, + 26484 - 11904: 0xCCDC, + 26485 - 11904: 0xAA53, + 26486 - 11904: 0xCCD7, + 26487 - 11904: 0xAA49, + 26488 - 11904: 0xCCE6, + 26489 - 11904: 0xCCE7, + 26490 - 11904: 0xCCDF, + 26491 - 11904: 0xCCD8, + 26492 - 11904: 0xAA56, + 26493 - 11904: 0xCCE4, + 26494 - 11904: 0xAA51, + 26495 - 11904: 0xAA4F, + 26497 - 11904: 0xCCE5, + 26498 - 11904: 0x87BA, + 26499 - 11904: 0xCCE3, + 26500 - 11904: 0xCCDB, + 26501 - 11904: 0xCCD3, + 26502 - 11904: 0xCCDA, + 26503 - 11904: 0xAA4A, + 26505 - 11904: 0xAA50, + 26507 - 11904: 0xAA44, + 26508 - 11904: 0xCCDE, + 26509 - 11904: 0xCCDD, + 26510 - 11904: 0xCCD5, + 26511 - 11904: 0x93E5, + 26512 - 11904: 0xAA52, + 26513 - 11904: 0xCCE1, + 26514 - 11904: 0xCCD6, + 26515 - 11904: 0xAA55, + 26516 - 11904: 0xCCE8, + 26517 - 11904: 0xAA45, + 26519 - 11904: 0xAA4C, + 26520 - 11904: 0xCCD9, + 26521 - 11904: 0xCCE2, + 26522 - 11904: 0xAA54, + 26524 - 11904: 0xAA47, + 26525 - 11904: 0xAA4B, + 26527 - 11904: 0xCCE0, + 26528 - 11904: 0x9A59, + 26532 - 11904: 0x8DB5, + 26540 - 11904: 0xFD4D, + 26542 - 11904: 0xCF5B, + 26543 - 11904: 0xAC5C, + 26544 - 11904: 0xAC69, + 26545 - 11904: 0xFD5E, + 26546 - 11904: 0xCF56, + 26547 - 11904: 0xCF4C, + 26548 - 11904: 0xAC62, + 26549 - 11904: 0xCF4A, + 26550 - 11904: 0xAC5B, + 26551 - 11904: 0xCF45, + 26552 - 11904: 0xAC65, + 26553 - 11904: 0xCF52, + 26554 - 11904: 0xCEFE, + 26555 - 11904: 0xCF41, + 26559 - 11904: 0x8F7D, + 26560 - 11904: 0xCF44, + 26561 - 11904: 0xCEFB, + 26562 - 11904: 0xCF51, + 26563 - 11904: 0xCF61, + 26564 - 11904: 0xAC60, + 26565 - 11904: 0xCF46, + 26566 - 11904: 0xCF58, + 26568 - 11904: 0xCEFD, + 26569 - 11904: 0xCF5F, + 26570 - 11904: 0xCF60, + 26571 - 11904: 0xCF63, + 26572 - 11904: 0xCF5A, + 26573 - 11904: 0xCF4B, + 26574 - 11904: 0xCF53, + 26575 - 11904: 0xAC66, + 26576 - 11904: 0xAC59, + 26577 - 11904: 0xAC61, + 26578 - 11904: 0xAC6D, + 26579 - 11904: 0xAC56, + 26580 - 11904: 0xAC58, + 26582 - 11904: 0x9547, + 26583 - 11904: 0xFCF6, + 26584 - 11904: 0xCF43, + 26585 - 11904: 0xAC6A, + 26586 - 11904: 0xAC63, + 26587 - 11904: 0xCF5D, + 26588 - 11904: 0xCF40, + 26589 - 11904: 0xAC6C, + 26590 - 11904: 0xAC67, + 26591 - 11904: 0xCF49, + 26594 - 11904: 0xAC6B, + 26595 - 11904: 0xCF50, + 26596 - 11904: 0xCF48, + 26597 - 11904: 0xAC64, + 26598 - 11904: 0xCF5C, + 26599 - 11904: 0xCF54, + 26601 - 11904: 0xAC5E, + 26602 - 11904: 0xCF62, + 26603 - 11904: 0xCF47, + 26604 - 11904: 0xAC5A, + 26605 - 11904: 0xCF59, + 26606 - 11904: 0xCF4F, + 26607 - 11904: 0xAC5F, + 26608 - 11904: 0xCF55, + 26609 - 11904: 0xAC57, + 26610 - 11904: 0xCEFC, + 26611 - 11904: 0xAC68, + 26612 - 11904: 0xAEE3, + 26613 - 11904: 0xAC5D, + 26614 - 11904: 0xCF4E, + 26615 - 11904: 0xCF4D, + 26616 - 11904: 0xCF42, + 26617 - 11904: 0x9250, + 26618 - 11904: 0xCF5E, + 26620 - 11904: 0xCF57, + 26622 - 11904: 0x8968, + 26623 - 11904: 0xAC55, + 26624 - 11904: 0x8DB6, + 26625 - 11904: 0xFCFB, + 26626 - 11904: 0xA07D, + 26627 - 11904: 0x98FC, + 26628 - 11904: 0x8969, + 26637 - 11904: 0xFE4F, + 26640 - 11904: 0x9256, + 26642 - 11904: 0xD1EC, + 26643 - 11904: 0xAEEA, + 26644 - 11904: 0xD1ED, + 26646 - 11904: 0xD1E1, + 26647 - 11904: 0xAEDF, + 26648 - 11904: 0xAEEB, + 26650 - 11904: 0xD1DA, + 26651 - 11904: 0xFAC9, + 26652 - 11904: 0xD1E3, + 26653 - 11904: 0xD1EB, + 26654 - 11904: 0x93E8, + 26655 - 11904: 0xD1D9, + 26656 - 11904: 0xD1F4, + 26657 - 11904: 0xAED5, + 26658 - 11904: 0xFCF8, + 26661 - 11904: 0xD1F3, + 26662 - 11904: 0xD1EE, + 26664 - 11904: 0xD1EF, + 26665 - 11904: 0xAEDD, + 26666 - 11904: 0xAEE8, + 26667 - 11904: 0xD1E5, + 26669 - 11904: 0xD1E6, + 26670 - 11904: 0xD1F0, + 26671 - 11904: 0xD1E7, + 26673 - 11904: 0xD1E2, + 26674 - 11904: 0xD1DC, + 26675 - 11904: 0xD1DD, + 26676 - 11904: 0xD1EA, + 26677 - 11904: 0xD1E4, + 26678 - 11904: 0x9CE3, + 26679 - 11904: 0xFDA9, + 26680 - 11904: 0xAED6, + 26681 - 11904: 0xAEDA, + 26682 - 11904: 0xD1F2, + 26683 - 11904: 0xD1DE, + 26684 - 11904: 0xAEE6, + 26685 - 11904: 0xAEE2, + 26686 - 11904: 0xFC44, + 26688 - 11904: 0xAEE5, + 26689 - 11904: 0xAEEC, + 26690 - 11904: 0xAEDB, + 26691 - 11904: 0xAEE7, + 26692 - 11904: 0xD1E9, + 26693 - 11904: 0xAEE9, + 26694 - 11904: 0xAED8, + 26695 - 11904: 0x9640, + 26696 - 11904: 0xAED7, + 26697 - 11904: 0xD1DB, + 26698 - 11904: 0x8DB8, + 26699 - 11904: 0xD1DF, + 26700 - 11904: 0xAEE0, + 26701 - 11904: 0xD1F1, + 26702 - 11904: 0xD1E8, + 26703 - 11904: 0xD1E0, + 26704 - 11904: 0xAEE4, + 26705 - 11904: 0xAEE1, + 26707 - 11904: 0xAED9, + 26708 - 11904: 0xAEDC, + 26709 - 11904: 0x9B4A, + 26710 - 11904: 0x8FB9, + 26717 - 11904: 0xFCFE, + 26725 - 11904: 0x896A, + 26731 - 11904: 0xD5C4, + 26733 - 11904: 0xD5B4, + 26734 - 11904: 0xD5B5, + 26735 - 11904: 0xD5B9, + 26737 - 11904: 0xD5C8, + 26738 - 11904: 0xD5C5, + 26740 - 11904: 0xD5BE, + 26741 - 11904: 0xD5BD, + 26742 - 11904: 0xB1ED, + 26743 - 11904: 0xD5C1, + 26744 - 11904: 0xD5D0, + 26745 - 11904: 0xD5B0, + 26747 - 11904: 0xD5D1, + 26748 - 11904: 0xD5C3, + 26749 - 11904: 0xD5D5, + 26750 - 11904: 0xD5C9, + 26751 - 11904: 0xB1EC, + 26752 - 11904: 0xD5C7, + 26753 - 11904: 0xB1E7, + 26754 - 11904: 0xB1FC, + 26755 - 11904: 0xB1F2, + 26756 - 11904: 0x8DB9, + 26757 - 11904: 0xB1F6, + 26758 - 11904: 0xB1F5, + 26759 - 11904: 0xD5B1, + 26760 - 11904: 0x917E, + 26761 - 11904: 0xD5CE, + 26762 - 11904: 0xD5D4, + 26763 - 11904: 0xD5CC, + 26764 - 11904: 0xD5D3, + 26767 - 11904: 0xD5C0, + 26768 - 11904: 0xD5B2, + 26769 - 11904: 0xD5D2, + 26770 - 11904: 0xD5C2, + 26771 - 11904: 0xB1EA, + 26772 - 11904: 0xB1F7, + 26774 - 11904: 0xD5CB, + 26775 - 11904: 0xB1F0, + 26776 - 11904: 0x93F4, + 26779 - 11904: 0xD5CA, + 26780 - 11904: 0xD5B3, + 26781 - 11904: 0xB1F8, + 26783 - 11904: 0xB1FA, + 26784 - 11904: 0xD5CD, + 26785 - 11904: 0xB1FB, + 26786 - 11904: 0xB1E9, + 26787 - 11904: 0xD5BA, + 26788 - 11904: 0xD5CF, + 26790 - 11904: 0xFB7C, + 26791 - 11904: 0xB1EF, + 26792 - 11904: 0xB1F9, + 26793 - 11904: 0xD5BC, + 26794 - 11904: 0xD5C6, + 26795 - 11904: 0xD5B7, + 26796 - 11904: 0xD5BB, + 26797 - 11904: 0xB1F4, + 26798 - 11904: 0xD5B6, + 26799 - 11904: 0xB1E8, + 26800 - 11904: 0xB1F1, + 26801 - 11904: 0xB1EE, + 26802 - 11904: 0xD5BF, + 26803 - 11904: 0xAEDE, + 26804 - 11904: 0xD9C0, + 26805 - 11904: 0xB1EB, + 26806 - 11904: 0x93E7, + 26809 - 11904: 0x97EF, + 26813 - 11904: 0xFE4A, + 26819 - 11904: 0xFD45, + 26820 - 11904: 0xB1F3, + 26821 - 11904: 0x96A5, + 26822 - 11904: 0xD9C3, + 26823 - 11904: 0xD9D9, + 26824 - 11904: 0xD9CE, + 26825 - 11904: 0xB4D6, + 26826 - 11904: 0xFEE0, + 26827 - 11904: 0xB4D1, + 26828 - 11904: 0xD9BD, + 26829 - 11904: 0xB4D2, + 26830 - 11904: 0xD9CD, + 26832 - 11904: 0xD9C6, + 26833 - 11904: 0xD9D3, + 26834 - 11904: 0xB4CE, + 26835 - 11904: 0xD9AB, + 26836 - 11904: 0xD9D5, + 26837 - 11904: 0xB4C4, + 26838 - 11904: 0xD9B3, + 26839 - 11904: 0xB4C7, + 26840 - 11904: 0xB4C6, + 26842 - 11904: 0xB4D7, + 26844 - 11904: 0xD9AD, + 26845 - 11904: 0xD9CF, + 26846 - 11904: 0xD9D0, + 26847 - 11904: 0xB4C9, + 26848 - 11904: 0xB4C5, + 26849 - 11904: 0xD9BB, + 26851 - 11904: 0xB4D0, + 26852 - 11904: 0xD9B6, + 26854 - 11904: 0xD9D1, + 26855 - 11904: 0xB4CC, + 26856 - 11904: 0xD9C9, + 26857 - 11904: 0xD9D6, + 26858 - 11904: 0xD9B0, + 26859 - 11904: 0xD9B5, + 26860 - 11904: 0xD9AF, + 26862 - 11904: 0xB4CB, + 26863 - 11904: 0xD9C2, + 26864 - 11904: 0xDDDE, + 26865 - 11904: 0xD9B1, + 26866 - 11904: 0xB4CF, + 26867 - 11904: 0xD9BA, + 26868 - 11904: 0xD9D2, + 26869 - 11904: 0xB4CA, + 26870 - 11904: 0xD9B7, + 26871 - 11904: 0xD9B4, + 26872 - 11904: 0xD9C5, + 26873 - 11904: 0xB4CD, + 26874 - 11904: 0xB4C3, + 26875 - 11904: 0xB4D9, + 26876 - 11904: 0xD9C8, + 26877 - 11904: 0xD9C7, + 26880 - 11904: 0xFD48, + 26881 - 11904: 0xFD47, + 26882 - 11904: 0xFEF2, + 26883 - 11904: 0xFE6A, + 26884 - 11904: 0xD9AC, + 26885 - 11904: 0xB4C8, + 26886 - 11904: 0xD9D4, + 26887 - 11904: 0xD9BC, + 26888 - 11904: 0xD9BE, + 26889 - 11904: 0x8DBD, + 26890 - 11904: 0xD9CB, + 26891 - 11904: 0xD9CA, + 26892 - 11904: 0xD9AA, + 26893 - 11904: 0xB4D3, + 26894 - 11904: 0xB4D5, + 26895 - 11904: 0xD9B2, + 26896 - 11904: 0xD9B9, + 26897 - 11904: 0xD9C1, + 26898 - 11904: 0xB4D4, + 26899 - 11904: 0xD9B8, + 26900 - 11904: 0xD9C4, + 26901 - 11904: 0xD9D7, + 26903 - 11904: 0xD9CC, + 26904 - 11904: 0x9BA1, + 26905 - 11904: 0x8CA2, + 26906 - 11904: 0x9AB7, + 26907 - 11904: 0x8EFC, + 26917 - 11904: 0xD9D8, + 26922 - 11904: 0xD9AE, + 26924 - 11904: 0x9FA1, + 26927 - 11904: 0xDDF2, + 26928 - 11904: 0xB7A6, + 26930 - 11904: 0xDDF0, + 26931 - 11904: 0xDDDB, + 26932 - 11904: 0xDDE0, + 26933 - 11904: 0xDDD9, + 26934 - 11904: 0xFD51, + 26935 - 11904: 0xDDEC, + 26936 - 11904: 0xDDCB, + 26937 - 11904: 0xDDD2, + 26939 - 11904: 0xDDEA, + 26940 - 11904: 0xDDF4, + 26941 - 11904: 0xDDDC, + 26942 - 11904: 0xFAAD, + 26943 - 11904: 0xDDCF, + 26944 - 11904: 0xDDE2, + 26945 - 11904: 0xDDE7, + 26946 - 11904: 0xDDD3, + 26947 - 11904: 0x8DBE, + 26948 - 11904: 0xDDE4, + 26949 - 11904: 0xDDD0, + 26950 - 11904: 0x89A4, + 26952 - 11904: 0xDDD7, + 26953 - 11904: 0xDDD8, + 26954 - 11904: 0xB7A8, + 26955 - 11904: 0xDDEB, + 26956 - 11904: 0xDDE9, + 26958 - 11904: 0xDDCC, + 26959 - 11904: 0xDDEE, + 26961 - 11904: 0xDDEF, + 26962 - 11904: 0xDDF1, + 26963 - 11904: 0xB7AC, + 26964 - 11904: 0xB7A4, + 26965 - 11904: 0x9AD9, + 26966 - 11904: 0xD5B8, + 26967 - 11904: 0xDDD4, + 26968 - 11904: 0xDDE6, + 26969 - 11904: 0xDDD5, + 26970 - 11904: 0xB7A1, + 26971 - 11904: 0xB7B1, + 26972 - 11904: 0xDDED, + 26973 - 11904: 0xB7AF, + 26974 - 11904: 0xB7AB, + 26975 - 11904: 0xDDCA, + 26976 - 11904: 0xB7A3, + 26977 - 11904: 0xFD4E, + 26978 - 11904: 0xDDCD, + 26979 - 11904: 0xB7B0, + 26980 - 11904: 0x8DC0, + 26981 - 11904: 0xDDDD, + 26982 - 11904: 0xDDC9, + 26983 - 11904: 0x97F0, + 26984 - 11904: 0xB7A9, + 26985 - 11904: 0xDDE1, + 26986 - 11904: 0xDDD1, + 26987 - 11904: 0xB7AA, + 26988 - 11904: 0xDDDA, + 26989 - 11904: 0xB77E, + 26990 - 11904: 0xB4D8, + 26991 - 11904: 0xDDE3, + 26992 - 11904: 0xD9BF, + 26993 - 11904: 0xDDCE, + 26994 - 11904: 0x93B4, + 26995 - 11904: 0xFD44, + 26996 - 11904: 0xDDE8, + 26997 - 11904: 0xB7A5, + 26998 - 11904: 0xDDE5, + 26999 - 11904: 0xB7A2, + 27000 - 11904: 0xDDDF, + 27001 - 11904: 0xB7AD, + 27002 - 11904: 0xDDD6, + 27003 - 11904: 0xDDF3, + 27008 - 11904: 0x9FA7, + 27010 - 11904: 0xB7A7, + 27011 - 11904: 0xDEC6, + 27013 - 11904: 0x8DC2, + 27014 - 11904: 0xB7AE, + 27018 - 11904: 0x99B6, + 27021 - 11904: 0xE24A, + 27022 - 11904: 0xE248, + 27024 - 11904: 0xE25E, + 27025 - 11904: 0xE246, + 27027 - 11904: 0xE258, + 27028 - 11904: 0xB77D, + 27029 - 11904: 0xBA5F, + 27030 - 11904: 0xE242, + 27031 - 11904: 0xE25D, + 27032 - 11904: 0xFD52, + 27033 - 11904: 0xE247, + 27034 - 11904: 0xE255, + 27035 - 11904: 0xBA64, + 27036 - 11904: 0xBA5D, + 27038 - 11904: 0xE25B, + 27039 - 11904: 0x8DC1, + 27040 - 11904: 0xE240, + 27041 - 11904: 0xE25A, + 27042 - 11904: 0x8E46, + 27043 - 11904: 0xBA6F, + 27044 - 11904: 0xE251, + 27045 - 11904: 0xE261, + 27046 - 11904: 0xBA6D, + 27047 - 11904: 0xE249, + 27048 - 11904: 0xBA5E, + 27049 - 11904: 0xE24B, + 27050 - 11904: 0xE259, + 27051 - 11904: 0xBA67, + 27052 - 11904: 0xE244, + 27053 - 11904: 0xBA6B, + 27054 - 11904: 0xBA61, + 27055 - 11904: 0xE24D, + 27056 - 11904: 0xE243, + 27057 - 11904: 0xE1FC, + 27058 - 11904: 0xA0D1, + 27059 - 11904: 0xE257, + 27060 - 11904: 0xBA68, + 27061 - 11904: 0xE260, + 27062 - 11904: 0xE1FD, + 27063 - 11904: 0xBA65, + 27065 - 11904: 0xE253, + 27067 - 11904: 0xBA66, + 27068 - 11904: 0xE245, + 27069 - 11904: 0xE250, + 27070 - 11904: 0xE24C, + 27071 - 11904: 0xE24E, + 27072 - 11904: 0x9FCA, + 27073 - 11904: 0xBA60, + 27074 - 11904: 0xE25F, + 27075 - 11904: 0xBA6E, + 27076 - 11904: 0xE24F, + 27078 - 11904: 0xE262, + 27081 - 11904: 0xE1FE, + 27082 - 11904: 0xE254, + 27083 - 11904: 0xBA63, + 27084 - 11904: 0xBA6C, + 27085 - 11904: 0xBA6A, + 27086 - 11904: 0xE241, + 27087 - 11904: 0xE256, + 27088 - 11904: 0xBA69, + 27089 - 11904: 0x92CF, + 27091 - 11904: 0xBA62, + 27092 - 11904: 0xE252, + 27093 - 11904: 0x9CF4, + 27094 - 11904: 0x8DC4, + 27097 - 11904: 0xE25C, + 27105 - 11904: 0xFD41, + 27106 - 11904: 0xE5D5, + 27108 - 11904: 0xE5D1, + 27109 - 11904: 0xE5CD, + 27110 - 11904: 0xE5E1, + 27111 - 11904: 0xE5DE, + 27112 - 11904: 0xBCCD, + 27113 - 11904: 0x9B4C, + 27115 - 11904: 0xE5E5, + 27116 - 11904: 0xE5D4, + 27117 - 11904: 0xBCD8, + 27118 - 11904: 0xE5DB, + 27121 - 11904: 0xE5D0, + 27122 - 11904: 0xE5DA, + 27123 - 11904: 0xBCD5, + 27124 - 11904: 0xE5EE, + 27126 - 11904: 0xE5EB, + 27127 - 11904: 0xE5DD, + 27128 - 11904: 0xE5CE, + 27129 - 11904: 0xFD57, + 27130 - 11904: 0xFCEF, + 27131 - 11904: 0xE5E2, + 27132 - 11904: 0xE5E4, + 27133 - 11904: 0xBCD1, + 27134 - 11904: 0xE5D8, + 27135 - 11904: 0xE5D3, + 27136 - 11904: 0xE5CA, + 27137 - 11904: 0xBCCE, + 27138 - 11904: 0xBCD6, + 27139 - 11904: 0x9CDE, + 27140 - 11904: 0xE5E7, + 27141 - 11904: 0xBCD7, + 27142 - 11904: 0xE5CB, + 27143 - 11904: 0xE5ED, + 27144 - 11904: 0xE5E0, + 27145 - 11904: 0xE5E6, + 27146 - 11904: 0xBCD4, + 27147 - 11904: 0xFD42, + 27148 - 11904: 0x986C, + 27149 - 11904: 0xE5E3, + 27151 - 11904: 0xE5EA, + 27153 - 11904: 0xBCD9, + 27155 - 11904: 0xBCD3, + 27156 - 11904: 0xE5DC, + 27157 - 11904: 0xE5CF, + 27158 - 11904: 0xE5EF, + 27159 - 11904: 0xE5CC, + 27160 - 11904: 0xE5E8, + 27161 - 11904: 0xBCD0, + 27162 - 11904: 0x97F9, + 27163 - 11904: 0xE5D6, + 27164 - 11904: 0x9558, + 27165 - 11904: 0xE5D7, + 27166 - 11904: 0xBCCF, + 27167 - 11904: 0xBCCC, + 27168 - 11904: 0xE5D2, + 27169 - 11904: 0xBCD2, + 27171 - 11904: 0xBCCB, + 27173 - 11904: 0xE5E9, + 27174 - 11904: 0xE5EC, + 27175 - 11904: 0xE5D9, + 27176 - 11904: 0xE9CA, + 27177 - 11904: 0x87B6, + 27179 - 11904: 0x985E, + 27180 - 11904: 0xFE7B, + 27181 - 11904: 0x94CD, + 27186 - 11904: 0xE9C2, + 27187 - 11904: 0x93EE, + 27188 - 11904: 0xE9BE, + 27189 - 11904: 0xBEF6, + 27192 - 11904: 0xBEEB, + 27193 - 11904: 0xBEF0, + 27194 - 11904: 0xBEEC, + 27195 - 11904: 0xE9CC, + 27196 - 11904: 0xE9D7, + 27197 - 11904: 0xBEEA, + 27198 - 11904: 0xE9C4, + 27199 - 11904: 0xE9CD, + 27200 - 11904: 0xE5DF, + 27201 - 11904: 0xE9CE, + 27203 - 11904: 0x8CA3, + 27204 - 11904: 0xBEF1, + 27205 - 11904: 0xFD5A, + 27206 - 11904: 0xE9DD, + 27207 - 11904: 0xBEF5, + 27208 - 11904: 0xBEF8, + 27209 - 11904: 0xE9C0, + 27211 - 11904: 0xBEF4, + 27212 - 11904: 0x93F5, + 27213 - 11904: 0xE9DB, + 27214 - 11904: 0xE9DC, + 27215 - 11904: 0xE9D2, + 27216 - 11904: 0xE9D1, + 27217 - 11904: 0xE9C9, + 27218 - 11904: 0x93EF, + 27219 - 11904: 0x8EEA, + 27220 - 11904: 0xE9D3, + 27221 - 11904: 0xE9DA, + 27222 - 11904: 0xE9D9, + 27223 - 11904: 0x8F5B, + 27224 - 11904: 0xBEEF, + 27225 - 11904: 0xBEED, + 27226 - 11904: 0xE9CB, + 27227 - 11904: 0xE9C8, + 27229 - 11904: 0xE9C5, + 27230 - 11904: 0xE9D8, + 27231 - 11904: 0xBEF7, + 27232 - 11904: 0xE9D6, + 27233 - 11904: 0xBEF3, + 27234 - 11904: 0xBEF2, + 27235 - 11904: 0x8C5E, + 27236 - 11904: 0xE9D0, + 27237 - 11904: 0x8DC6, + 27238 - 11904: 0xE9BF, + 27239 - 11904: 0xE9C1, + 27240 - 11904: 0xE9C3, + 27241 - 11904: 0xE9D5, + 27242 - 11904: 0xE9CF, + 27243 - 11904: 0xBEEE, + 27245 - 11904: 0xE9C6, + 27247 - 11904: 0xE9D4, + 27249 - 11904: 0x8DC8, + 27252 - 11904: 0x8DC7, + 27254 - 11904: 0xE9C7, + 27258 - 11904: 0x93F7, + 27262 - 11904: 0xC0CF, + 27263 - 11904: 0xED45, + 27264 - 11904: 0xC0C8, + 27265 - 11904: 0xECF5, + 27266 - 11904: 0x8DC9, + 27267 - 11904: 0xED41, + 27268 - 11904: 0xC0CA, + 27269 - 11904: 0xED48, + 27271 - 11904: 0xECFC, + 27273 - 11904: 0xECF7, + 27274 - 11904: 0xFBF2, + 27276 - 11904: 0xED49, + 27277 - 11904: 0xECF3, + 27278 - 11904: 0xECFE, + 27279 - 11904: 0x9670, + 27280 - 11904: 0xC0D1, + 27281 - 11904: 0xED44, + 27282 - 11904: 0xED4A, + 27283 - 11904: 0xECFD, + 27284 - 11904: 0xC0C9, + 27285 - 11904: 0xED40, + 27286 - 11904: 0xECF4, + 27287 - 11904: 0xC0D0, + 27289 - 11904: 0x8DCB, + 27290 - 11904: 0xED47, + 27291 - 11904: 0xECF9, + 27292 - 11904: 0xC0CC, + 27293 - 11904: 0xFD5C, + 27294 - 11904: 0xECFB, + 27295 - 11904: 0xECF8, + 27296 - 11904: 0xC0D2, + 27297 - 11904: 0xECFA, + 27298 - 11904: 0xC0CB, + 27299 - 11904: 0xC0CE, + 27300 - 11904: 0xED43, + 27301 - 11904: 0xECF6, + 27302 - 11904: 0xED46, + 27303 - 11904: 0x8F65, + 27304 - 11904: 0xED42, + 27307 - 11904: 0x8DCD, + 27308 - 11904: 0xC263, + 27309 - 11904: 0xEFE7, + 27310 - 11904: 0xC268, + 27311 - 11904: 0xC269, + 27313 - 11904: 0x9DA8, + 27314 - 11904: 0x94F9, + 27315 - 11904: 0xC262, + 27316 - 11904: 0xEFE6, + 27317 - 11904: 0x8DCE, + 27318 - 11904: 0xEFE3, + 27319 - 11904: 0xEFE4, + 27320 - 11904: 0xC266, + 27321 - 11904: 0xEFDE, + 27322 - 11904: 0xEFE2, + 27323 - 11904: 0xC265, + 27325 - 11904: 0xEFDF, + 27326 - 11904: 0x93EA, + 27330 - 11904: 0xC267, + 27331 - 11904: 0xC264, + 27333 - 11904: 0xEFDD, + 27334 - 11904: 0xEFE1, + 27335 - 11904: 0xEFE5, + 27336 - 11904: 0xFD5F, + 27337 - 11904: 0x93F0, + 27338 - 11904: 0x9FB6, + 27339 - 11904: 0xF251, + 27340 - 11904: 0xF24E, + 27341 - 11904: 0xF257, + 27343 - 11904: 0xF256, + 27344 - 11904: 0xF254, + 27345 - 11904: 0xF24F, + 27347 - 11904: 0xC372, + 27348 - 11904: 0x8DCF, + 27352 - 11904: 0x9763, + 27353 - 11904: 0xF250, + 27354 - 11904: 0xC371, + 27355 - 11904: 0xC0CD, + 27356 - 11904: 0xF253, + 27357 - 11904: 0xC370, + 27358 - 11904: 0xF258, + 27359 - 11904: 0xF252, + 27360 - 11904: 0xF24D, + 27361 - 11904: 0xEFE0, + 27365 - 11904: 0xC36F, + 27367 - 11904: 0xF24C, + 27368 - 11904: 0xF456, + 27370 - 11904: 0xF455, + 27371 - 11904: 0xF255, + 27372 - 11904: 0xC468, + 27374 - 11904: 0xF459, + 27375 - 11904: 0xF45A, + 27376 - 11904: 0xF454, + 27377 - 11904: 0xF458, + 27379 - 11904: 0xF453, + 27382 - 11904: 0x8DD0, + 27384 - 11904: 0xF5D1, + 27385 - 11904: 0xF457, + 27386 - 11904: 0xC4E7, + 27387 - 11904: 0xC4E5, + 27388 - 11904: 0xF5CF, + 27392 - 11904: 0xF5D2, + 27394 - 11904: 0xF5CE, + 27395 - 11904: 0xF5D0, + 27396 - 11904: 0xC4E6, + 27397 - 11904: 0x93F1, + 27400 - 11904: 0xF6E5, + 27401 - 11904: 0xF6E6, + 27402 - 11904: 0xC576, + 27403 - 11904: 0xF6E4, + 27407 - 11904: 0xF7E2, + 27408 - 11904: 0xC5CF, + 27409 - 11904: 0xF7E0, + 27410 - 11904: 0xF7E1, + 27411 - 11904: 0xF8AC, + 27414 - 11904: 0xC656, + 27415 - 11904: 0xF8F3, + 27416 - 11904: 0xF8F1, + 27417 - 11904: 0xF8F2, + 27418 - 11904: 0xF8F4, + 27421 - 11904: 0xFD62, + 27422 - 11904: 0xF9BB, + 27424 - 11904: 0xA4ED, + 27425 - 11904: 0xA6B8, + 27427 - 11904: 0xAA59, + 27429 - 11904: 0xCCE9, + 27432 - 11904: 0xCF64, + 27436 - 11904: 0xD1F5, + 27437 - 11904: 0xD1F7, + 27439 - 11904: 0xD1F6, + 27441 - 11904: 0xD1F8, + 27442 - 11904: 0xB1FD, + 27443 - 11904: 0xD5D7, + 27444 - 11904: 0xD1F9, + 27445 - 11904: 0xFD65, + 27446 - 11904: 0xD5D6, + 27447 - 11904: 0xD5D8, + 27448 - 11904: 0xD5D9, + 27449 - 11904: 0xD9DA, + 27450 - 11904: 0xB4DB, + 27451 - 11904: 0xD9DB, + 27452 - 11904: 0xD9DD, + 27453 - 11904: 0xB4DC, + 27454 - 11904: 0xB4DA, + 27455 - 11904: 0xD9DC, + 27457 - 11904: 0xDDFA, + 27458 - 11904: 0xDDF8, + 27459 - 11904: 0xDDF7, + 27461 - 11904: 0xDDF6, + 27462 - 11904: 0xDDF5, + 27463 - 11904: 0xB7B2, + 27464 - 11904: 0xDDF9, + 27465 - 11904: 0xBA70, + 27466 - 11904: 0xE263, + 27467 - 11904: 0xE265, + 27468 - 11904: 0xBA71, + 27469 - 11904: 0xE264, + 27470 - 11904: 0xBCDB, + 27472 - 11904: 0xBCDA, + 27473 - 11904: 0xE5F0, + 27474 - 11904: 0x9FDB, + 27476 - 11904: 0xE9DF, + 27477 - 11904: 0xE9DE, + 27478 - 11904: 0xE9E0, + 27479 - 11904: 0x93F8, + 27481 - 11904: 0xBEF9, + 27483 - 11904: 0xED4B, + 27484 - 11904: 0xC0D3, + 27486 - 11904: 0xEFE8, + 27487 - 11904: 0xC26A, + 27488 - 11904: 0xF259, + 27489 - 11904: 0xC577, + 27490 - 11904: 0xA4EE, + 27491 - 11904: 0xA5BF, + 27492 - 11904: 0xA6B9, + 27493 - 11904: 0xA842, + 27494 - 11904: 0xAA5A, + 27495 - 11904: 0xAA5B, + 27498 - 11904: 0xAC6E, + 27501 - 11904: 0xD1FA, + 27503 - 11904: 0x8BF7, + 27506 - 11904: 0xB7B3, + 27508 - 11904: 0xFD66, + 27510 - 11904: 0xE6D1, + 27511 - 11904: 0xBEFA, + 27512 - 11904: 0xC26B, + 27513 - 11904: 0xA4EF, + 27514 - 11904: 0x8BCF, + 27515 - 11904: 0xA6BA, + 27518 - 11904: 0xCCEB, + 27519 - 11904: 0xAA5C, + 27520 - 11904: 0xCCEA, + 27521 - 11904: 0x8DD1, + 27522 - 11904: 0xCF65, + 27523 - 11904: 0xAC6F, + 27524 - 11904: 0xCF66, + 27526 - 11904: 0xAC70, + 27528 - 11904: 0xD1FC, + 27529 - 11904: 0xAEEE, + 27530 - 11904: 0xAEED, + 27532 - 11904: 0xD5DE, + 27533 - 11904: 0xD5DC, + 27534 - 11904: 0xD5DD, + 27535 - 11904: 0xD5DB, + 27537 - 11904: 0xD5DA, + 27540 - 11904: 0xD9DE, + 27541 - 11904: 0xD9E1, + 27542 - 11904: 0xB4DE, + 27543 - 11904: 0xD9DF, + 27544 - 11904: 0xB4DD, + 27545 - 11904: 0xD9E0, + 27547 - 11904: 0xDDFB, + 27550 - 11904: 0xE266, + 27551 - 11904: 0xE267, + 27552 - 11904: 0xE268, + 27554 - 11904: 0xE5F3, + 27555 - 11904: 0xE5F2, + 27556 - 11904: 0xBCDC, + 27557 - 11904: 0xE5F1, + 27558 - 11904: 0xE5F4, + 27559 - 11904: 0xE9E1, + 27562 - 11904: 0xE9E2, + 27563 - 11904: 0xE9E3, + 27565 - 11904: 0xED4C, + 27566 - 11904: 0xC0D4, + 27567 - 11904: 0xC26C, + 27568 - 11904: 0xF25A, + 27570 - 11904: 0xC4E8, + 27571 - 11904: 0xC95F, + 27573 - 11904: 0xAC71, + 27574 - 11904: 0xCF67, + 27575 - 11904: 0xAEEF, + 27578 - 11904: 0xB1FE, + 27580 - 11904: 0xB4DF, + 27581 - 11904: 0xD9E2, + 27583 - 11904: 0xB7B5, + 27584 - 11904: 0xB7B4, + 27585 - 11904: 0x8DD2, + 27587 - 11904: 0xE269, + 27588 - 11904: 0xE26A, + 27589 - 11904: 0xBCDD, + 27590 - 11904: 0xBCDE, + 27591 - 11904: 0xE9E5, + 27592 - 11904: 0xE9E4, + 27593 - 11904: 0xEFE9, + 27594 - 11904: 0xF7E3, + 27595 - 11904: 0xA4F0, + 27596 - 11904: 0xC960, + 27597 - 11904: 0xA5C0, + 27599 - 11904: 0xA843, + 27600 - 11904: 0xCB48, + 27602 - 11904: 0xAC72, + 27603 - 11904: 0xB7B6, + 27604 - 11904: 0xA4F1, + 27606 - 11904: 0xCF68, + 27607 - 11904: 0xAC73, + 27608 - 11904: 0xCF69, + 27610 - 11904: 0xC0D5, + 27611 - 11904: 0xA4F2, + 27612 - 11904: 0xFD71, + 27614 - 11904: 0xCCEC, + 27616 - 11904: 0xCF6A, + 27617 - 11904: 0xFD6F, + 27618 - 11904: 0xD242, + 27619 - 11904: 0xD241, + 27620 - 11904: 0xD1FE, + 27622 - 11904: 0xD1FD, + 27623 - 11904: 0xD243, + 27624 - 11904: 0xD240, + 27626 - 11904: 0x8DD3, + 27627 - 11904: 0xB240, + 27628 - 11904: 0xB241, + 27631 - 11904: 0xB4E0, + 27632 - 11904: 0xD9E3, + 27634 - 11904: 0xD9E4, + 27635 - 11904: 0xD9E5, + 27639 - 11904: 0xDE41, + 27640 - 11904: 0xDE42, + 27641 - 11904: 0xDE40, + 27642 - 11904: 0x9FE7, + 27643 - 11904: 0xDDFD, + 27644 - 11904: 0xDDFE, + 27645 - 11904: 0xB7B7, + 27646 - 11904: 0xE26B, + 27647 - 11904: 0xE5F7, + 27648 - 11904: 0xE5F6, + 27649 - 11904: 0xE5F5, + 27650 - 11904: 0xE5F8, + 27651 - 11904: 0xE9E7, + 27652 - 11904: 0xE9E6, + 27653 - 11904: 0xBEFB, + 27654 - 11904: 0xE9E8, + 27656 - 11904: 0xC0D6, + 27657 - 11904: 0xED4D, + 27659 - 11904: 0xEFEA, + 27660 - 11904: 0xF25B, + 27661 - 11904: 0xF6E7, + 27663 - 11904: 0xA4F3, + 27664 - 11904: 0xA5C2, + 27665 - 11904: 0xA5C1, + 27667 - 11904: 0xAA5D, + 27668 - 11904: 0xC961, + 27669 - 11904: 0xC97E, + 27670 - 11904: 0xA6BB, + 27672 - 11904: 0xC9F7, + 27673 - 11904: 0xCB49, + 27674 - 11904: 0xCB4A, + 27675 - 11904: 0xAA5E, + 27676 - 11904: 0x90BD, + 27677 - 11904: 0xCCED, + 27679 - 11904: 0xAC74, + 27680 - 11904: 0xCF6B, + 27681 - 11904: 0xCF6C, + 27683 - 11904: 0xAEF0, + 27684 - 11904: 0xAEF4, + 27685 - 11904: 0xD244, + 27686 - 11904: 0xAEF3, + 27687 - 11904: 0xAEF1, + 27688 - 11904: 0xAEF2, + 27690 - 11904: 0xD5DF, + 27691 - 11904: 0xB242, + 27692 - 11904: 0xB4E3, + 27694 - 11904: 0xB4E1, + 27695 - 11904: 0xB4E2, + 27696 - 11904: 0xD9E6, + 27697 - 11904: 0x9FD0, + 27699 - 11904: 0xBA72, + 27700 - 11904: 0xA4F4, + 27701 - 11904: 0x8BD0, + 27702 - 11904: 0xC9A1, + 27703 - 11904: 0xFD72, + 27704 - 11904: 0xA5C3, + 27705 - 11904: 0x9CAE, + 27706 - 11904: 0x8BD1, + 27707 - 11904: 0xC9A4, + 27709 - 11904: 0x8ADB, + 27710 - 11904: 0xA5C6, + 27711 - 11904: 0xC9A3, + 27712 - 11904: 0xA5C5, + 27713 - 11904: 0xA5C4, + 27714 - 11904: 0xA844, + 27715 - 11904: 0xC9A2, + 27718 - 11904: 0xC9F8, + 27721 - 11904: 0xFAE4, + 27722 - 11904: 0xC9FC, + 27723 - 11904: 0xC9FE, + 27724 - 11904: 0xCA40, + 27725 - 11904: 0xA6C5, + 27726 - 11904: 0xA6C6, + 27727 - 11904: 0xC9FB, + 27728 - 11904: 0xA6C1, + 27730 - 11904: 0xC9F9, + 27732 - 11904: 0xC9FD, + 27733 - 11904: 0xA6C2, + 27735 - 11904: 0xA6BD, + 27736 - 11904: 0x95CE, + 27737 - 11904: 0xA6BE, + 27738 - 11904: 0xFD76, + 27739 - 11904: 0xA6C4, + 27740 - 11904: 0xC9FA, + 27741 - 11904: 0xA6BC, + 27742 - 11904: 0xA845, + 27743 - 11904: 0xA6BF, + 27744 - 11904: 0xA6C0, + 27745 - 11904: 0xA6C3, + 27749 - 11904: 0xCB5B, + 27750 - 11904: 0xCB59, + 27751 - 11904: 0xCB4C, + 27752 - 11904: 0xA851, + 27753 - 11904: 0xCB53, + 27754 - 11904: 0xA84C, + 27755 - 11904: 0xCB4D, + 27757 - 11904: 0xCB55, + 27758 - 11904: 0xFB62, + 27759 - 11904: 0xCB52, + 27760 - 11904: 0xA84F, + 27761 - 11904: 0xCB51, + 27762 - 11904: 0xA856, + 27763 - 11904: 0xCB5A, + 27764 - 11904: 0xA858, + 27765 - 11904: 0x8DD4, + 27766 - 11904: 0xA85A, + 27768 - 11904: 0xCB4B, + 27769 - 11904: 0xFD78, + 27770 - 11904: 0xA84D, + 27771 - 11904: 0xCB5C, + 27773 - 11904: 0xA854, + 27774 - 11904: 0xA857, + 27775 - 11904: 0x8EE3, + 27776 - 11904: 0xCD45, + 27777 - 11904: 0xA847, + 27778 - 11904: 0xA85E, + 27779 - 11904: 0xA855, + 27780 - 11904: 0xCB4E, + 27781 - 11904: 0xA84A, + 27782 - 11904: 0xA859, + 27783 - 11904: 0xCB56, + 27784 - 11904: 0xA848, + 27785 - 11904: 0xA849, + 27786 - 11904: 0xCD43, + 27787 - 11904: 0xCB4F, + 27788 - 11904: 0xA850, + 27789 - 11904: 0xA85B, + 27790 - 11904: 0xCB5D, + 27791 - 11904: 0xCB50, + 27792 - 11904: 0xA84E, + 27794 - 11904: 0xA853, + 27795 - 11904: 0xCCEE, + 27796 - 11904: 0xA85C, + 27797 - 11904: 0xCB57, + 27798 - 11904: 0xA852, + 27800 - 11904: 0xA85D, + 27801 - 11904: 0xA846, + 27802 - 11904: 0xCB54, + 27803 - 11904: 0xA84B, + 27804 - 11904: 0xFDB7, + 27805 - 11904: 0xCD44, + 27807 - 11904: 0x9076, + 27810 - 11904: 0x98C6, + 27818 - 11904: 0x8DD5, + 27819 - 11904: 0xAA6A, + 27820 - 11904: 0xAA7A, + 27821 - 11904: 0xCCF5, + 27822 - 11904: 0xAA71, + 27823 - 11904: 0x97D1, + 27824 - 11904: 0xCD4B, + 27825 - 11904: 0xAA62, + 27826 - 11904: 0x9EB6, + 27827 - 11904: 0xAA65, + 27828 - 11904: 0xCD42, + 27830 - 11904: 0xCCF3, + 27831 - 11904: 0xCCF7, + 27832 - 11904: 0xAA6D, + 27833 - 11904: 0xAA6F, + 27834 - 11904: 0xCCFA, + 27835 - 11904: 0xAA76, + 27836 - 11904: 0xAA68, + 27837 - 11904: 0xAA66, + 27838 - 11904: 0xAA67, + 27839 - 11904: 0xAA75, + 27840 - 11904: 0xCD47, + 27841 - 11904: 0xAA70, + 27842 - 11904: 0xCCF9, + 27843 - 11904: 0xCCFB, + 27844 - 11904: 0xAA6E, + 27845 - 11904: 0xAA73, + 27846 - 11904: 0xCCFC, + 27847 - 11904: 0xCD4A, + 27849 - 11904: 0xAC75, + 27850 - 11904: 0xAA79, + 27851 - 11904: 0xFAC7, + 27852 - 11904: 0xAA63, + 27853 - 11904: 0xCD49, + 27854 - 11904: 0xA042, + 27855 - 11904: 0xCD4D, + 27856 - 11904: 0xCCF8, + 27857 - 11904: 0xCD4F, + 27858 - 11904: 0xCD40, + 27859 - 11904: 0xAA6C, + 27860 - 11904: 0xCCF4, + 27861 - 11904: 0xAA6B, + 27862 - 11904: 0xAA7D, + 27863 - 11904: 0xAA72, + 27865 - 11904: 0xCCF2, + 27866 - 11904: 0xCF75, + 27867 - 11904: 0xAA78, + 27868 - 11904: 0xAA7C, + 27869 - 11904: 0xCD41, + 27870 - 11904: 0xCD46, + 27871 - 11904: 0x9873, + 27872 - 11904: 0xAA7E, + 27873 - 11904: 0xAA77, + 27874 - 11904: 0xAA69, + 27875 - 11904: 0xAA5F, + 27877 - 11904: 0xAA64, + 27879 - 11904: 0xCCF6, + 27880 - 11904: 0xAA60, + 27881 - 11904: 0xCD4E, + 27882 - 11904: 0x9FFC, + 27883 - 11904: 0xCCF0, + 27884 - 11904: 0xCCEF, + 27885 - 11904: 0xCCFD, + 27886 - 11904: 0xCCF1, + 27887 - 11904: 0xAA7B, + 27888 - 11904: 0xAEF5, + 27889 - 11904: 0xAA74, + 27890 - 11904: 0xCCFE, + 27891 - 11904: 0xAA61, + 27893 - 11904: 0xACA6, + 27897 - 11904: 0xCD4C, + 27903 - 11904: 0x8CA5, + 27904 - 11904: 0xCF7C, + 27905 - 11904: 0xCFA1, + 27906 - 11904: 0x8DD7, + 27907 - 11904: 0xCFA4, + 27908 - 11904: 0xCF77, + 27909 - 11904: 0x92FB, + 27910 - 11904: 0x8DD8, + 27911 - 11904: 0xCFA7, + 27912 - 11904: 0xCFAA, + 27913 - 11904: 0xCFAC, + 27914 - 11904: 0xCF74, + 27915 - 11904: 0xAC76, + 27916 - 11904: 0xAC7B, + 27917 - 11904: 0xD249, + 27918 - 11904: 0xACAD, + 27919 - 11904: 0xCFA5, + 27920 - 11904: 0xCFAD, + 27921 - 11904: 0xCF7B, + 27922 - 11904: 0xCF73, + 27926 - 11904: 0xD264, + 27927 - 11904: 0xAC7E, + 27928 - 11904: 0xCFA2, + 27929 - 11904: 0xCF78, + 27930 - 11904: 0xCF7A, + 27931 - 11904: 0xACA5, + 27933 - 11904: 0xCF7D, + 27934 - 11904: 0xAC7D, + 27935 - 11904: 0xCF70, + 27936 - 11904: 0xCFA8, + 27938 - 11904: 0xCFAB, + 27940 - 11904: 0x944F, + 27941 - 11904: 0xAC7A, + 27942 - 11904: 0x8DD9, + 27943 - 11904: 0xACA8, + 27944 - 11904: 0xCF6D, + 27945 - 11904: 0xACAA, + 27946 - 11904: 0xAC78, + 27947 - 11904: 0xACAE, + 27948 - 11904: 0xCFA9, + 27949 - 11904: 0xCF6F, + 27950 - 11904: 0xACAB, + 27951 - 11904: 0xD25E, + 27952 - 11904: 0xCD48, + 27953 - 11904: 0xAC7C, + 27954 - 11904: 0xAC77, + 27955 - 11904: 0xCF76, + 27956 - 11904: 0xCF6E, + 27957 - 11904: 0xACAC, + 27958 - 11904: 0xACA4, + 27959 - 11904: 0xCFA3, + 27960 - 11904: 0xACA9, + 27961 - 11904: 0xACA7, + 27962 - 11904: 0xCF79, + 27963 - 11904: 0xACA1, + 27964 - 11904: 0xCF71, + 27965 - 11904: 0xACA2, + 27966 - 11904: 0xACA3, + 27967 - 11904: 0xCF72, + 27968 - 11904: 0xCFA6, + 27969 - 11904: 0xAC79, + 27970 - 11904: 0xCF7E, + 27982 - 11904: 0x896B, + 27991 - 11904: 0x97CE, + 27992 - 11904: 0xD24C, + 27993 - 11904: 0xAEFD, + 27994 - 11904: 0xAF43, + 27995 - 11904: 0xFAF3, + 27996 - 11904: 0xFDAE, + 27998 - 11904: 0xD255, + 27999 - 11904: 0xD25B, + 28000 - 11904: 0xD257, + 28001 - 11904: 0xD24A, + 28002 - 11904: 0xD24D, + 28003 - 11904: 0xD246, + 28004 - 11904: 0xD247, + 28005 - 11904: 0xAF4A, + 28006 - 11904: 0xAEFA, + 28007 - 11904: 0xD256, + 28008 - 11904: 0xD25F, + 28009 - 11904: 0xAF45, + 28010 - 11904: 0xAEF6, + 28012 - 11904: 0xAF40, + 28013 - 11904: 0xD24E, + 28014 - 11904: 0xAF42, + 28015 - 11904: 0xD24F, + 28016 - 11904: 0xD259, + 28017 - 11904: 0xFBAF, + 28018 - 11904: 0x92B7, + 28020 - 11904: 0xAF44, + 28021 - 11904: 0xD268, + 28022 - 11904: 0xD248, + 28023 - 11904: 0xAEFC, + 28024 - 11904: 0xAEFB, + 28025 - 11904: 0xAF48, + 28026 - 11904: 0xD245, + 28027 - 11904: 0xD266, + 28028 - 11904: 0xD25A, + 28029 - 11904: 0xD267, + 28030 - 11904: 0xD261, + 28031 - 11904: 0xD253, + 28032 - 11904: 0xD262, + 28033 - 11904: 0x8DDA, + 28034 - 11904: 0xD25C, + 28035 - 11904: 0xD265, + 28036 - 11904: 0xD263, + 28037 - 11904: 0xAF49, + 28038 - 11904: 0xD254, + 28039 - 11904: 0xAEF9, + 28040 - 11904: 0xAEF8, + 28041 - 11904: 0xAF41, + 28042 - 11904: 0xAF47, + 28043 - 11904: 0xD260, + 28044 - 11904: 0xAF46, + 28045 - 11904: 0xD251, + 28046 - 11904: 0xB243, + 28047 - 11904: 0x9C5A, + 28048 - 11904: 0xD269, + 28049 - 11904: 0xD250, + 28050 - 11904: 0xD24B, + 28051 - 11904: 0xAEFE, + 28052 - 11904: 0xAF4B, + 28053 - 11904: 0xAEF7, + 28054 - 11904: 0xFDAD, + 28055 - 11904: 0xD258, + 28056 - 11904: 0xD25D, + 28068 - 11904: 0x8DDC, + 28069 - 11904: 0x9444, + 28074 - 11904: 0xB265, + 28075 - 11904: 0xD5E1, + 28076 - 11904: 0xD5E5, + 28078 - 11904: 0xB252, + 28079 - 11904: 0xB250, + 28081 - 11904: 0x8DDD, + 28082 - 11904: 0xB247, + 28083 - 11904: 0xD5E3, + 28084 - 11904: 0xD5E2, + 28085 - 11904: 0xB25B, + 28087 - 11904: 0xD5E8, + 28088 - 11904: 0xB255, + 28089 - 11904: 0xA0D6, + 28090 - 11904: 0xD5FA, + 28091 - 11904: 0xD647, + 28092 - 11904: 0xB244, + 28093 - 11904: 0xD5F7, + 28094 - 11904: 0xD5F0, + 28095 - 11904: 0xB267, + 28096 - 11904: 0xD5E0, + 28098 - 11904: 0xD5FC, + 28100 - 11904: 0xB264, + 28101 - 11904: 0xB258, + 28102 - 11904: 0xB263, + 28103 - 11904: 0xB24E, + 28104 - 11904: 0xD5EC, + 28105 - 11904: 0xD5FE, + 28106 - 11904: 0xD5F6, + 28107 - 11904: 0xB24F, + 28108 - 11904: 0xB249, + 28109 - 11904: 0xD645, + 28111 - 11904: 0xD5FD, + 28112 - 11904: 0xD640, + 28113 - 11904: 0xB251, + 28114 - 11904: 0xB259, + 28115 - 11904: 0xD642, + 28116 - 11904: 0xD5EA, + 28117 - 11904: 0xD5FB, + 28118 - 11904: 0xD5EF, + 28119 - 11904: 0xD644, + 28120 - 11904: 0xB25E, + 28121 - 11904: 0xB246, + 28122 - 11904: 0xB25C, + 28123 - 11904: 0xD5F4, + 28124 - 11904: 0xD5F2, + 28125 - 11904: 0xD5F3, + 28126 - 11904: 0xB253, + 28127 - 11904: 0xD5EE, + 28128 - 11904: 0xD5ED, + 28129 - 11904: 0xB248, + 28130 - 11904: 0xD5E7, + 28131 - 11904: 0xD646, + 28132 - 11904: 0xB24A, + 28133 - 11904: 0xD5F1, + 28134 - 11904: 0xB268, + 28136 - 11904: 0xB262, + 28137 - 11904: 0xD5E6, + 28138 - 11904: 0xB25F, + 28139 - 11904: 0xB25D, + 28140 - 11904: 0xB266, + 28141 - 11904: 0xD5F8, + 28142 - 11904: 0xB261, + 28143 - 11904: 0xD252, + 28144 - 11904: 0xD5F9, + 28145 - 11904: 0xB260, + 28146 - 11904: 0xD641, + 28147 - 11904: 0xB245, + 28148 - 11904: 0xD5F5, + 28149 - 11904: 0xB257, + 28150 - 11904: 0xD5E9, + 28151 - 11904: 0xB256, + 28153 - 11904: 0xB254, + 28154 - 11904: 0xB24C, + 28155 - 11904: 0xB24B, + 28156 - 11904: 0xD9E7, + 28157 - 11904: 0xD643, + 28158 - 11904: 0x8C41, + 28160 - 11904: 0xD5EB, + 28162 - 11904: 0x97D5, + 28163 - 11904: 0xD9FC, + 28164 - 11904: 0x944A, + 28165 - 11904: 0xB24D, + 28170 - 11904: 0x944D, + 28175 - 11904: 0x97CB, + 28181 - 11904: 0x8DDE, + 28184 - 11904: 0x8DDF, + 28185 - 11904: 0xB541, + 28186 - 11904: 0xB25A, + 28187 - 11904: 0xB4EE, + 28188 - 11904: 0xD9F6, + 28189 - 11904: 0xFDB8, + 28191 - 11904: 0xD9EA, + 28192 - 11904: 0xB4EB, + 28193 - 11904: 0xB4E7, + 28194 - 11904: 0xDA49, + 28195 - 11904: 0xB4ED, + 28196 - 11904: 0xB4F1, + 28197 - 11904: 0xB4EC, + 28198 - 11904: 0xB4F5, + 28199 - 11904: 0xDA4D, + 28200 - 11904: 0xDA44, + 28201 - 11904: 0x8DE0, + 28202 - 11904: 0xFEF9, + 28203 - 11904: 0xD9F1, + 28204 - 11904: 0xB4FA, + 28205 - 11904: 0xB4F4, + 28206 - 11904: 0xD9FD, + 28207 - 11904: 0xFDBB, + 28208 - 11904: 0xDA4A, + 28209 - 11904: 0xDA43, + 28210 - 11904: 0xB4E8, + 28211 - 11904: 0xD9F7, + 28212 - 11904: 0xB4F7, + 28213 - 11904: 0xDA55, + 28214 - 11904: 0xDA56, + 28216 - 11904: 0xB4E5, + 28217 - 11904: 0xDA48, + 28218 - 11904: 0xB4F9, + 28219 - 11904: 0xD9FB, + 28220 - 11904: 0xD9ED, + 28221 - 11904: 0xD9EE, + 28222 - 11904: 0xB4FD, + 28223 - 11904: 0xD9F2, + 28224 - 11904: 0xD9F9, + 28225 - 11904: 0xD9F3, + 28227 - 11904: 0xB4FB, + 28228 - 11904: 0xB544, + 28229 - 11904: 0xD9EF, + 28230 - 11904: 0xD9E8, + 28231 - 11904: 0xD9E9, + 28233 - 11904: 0xD9EB, + 28234 - 11904: 0xB4EA, + 28235 - 11904: 0xD9F8, + 28237 - 11904: 0xB4F8, + 28238 - 11904: 0xB542, + 28239 - 11904: 0xFDC0, + 28240 - 11904: 0xFCF9, + 28241 - 11904: 0xD9FA, + 28242 - 11904: 0xDA53, + 28243 - 11904: 0xDA4B, + 28244 - 11904: 0xB4E6, + 28245 - 11904: 0xDA51, + 28246 - 11904: 0xB4F2, + 28247 - 11904: 0x8CDD, + 28248 - 11904: 0xB4F0, + 28249 - 11904: 0xFB7E, + 28250 - 11904: 0xDA57, + 28251 - 11904: 0xB4EF, + 28252 - 11904: 0xDA41, + 28253 - 11904: 0xD9F4, + 28254 - 11904: 0xD9FE, + 28255 - 11904: 0xB547, + 28256 - 11904: 0xDA45, + 28257 - 11904: 0xDA42, + 28258 - 11904: 0xD9F0, + 28259 - 11904: 0xB543, + 28260 - 11904: 0xDA4F, + 28261 - 11904: 0xDA4C, + 28262 - 11904: 0xDA54, + 28263 - 11904: 0xB4E9, + 28264 - 11904: 0xDA40, + 28265 - 11904: 0xB546, + 28267 - 11904: 0xDA47, + 28270 - 11904: 0xB4F3, + 28271 - 11904: 0xB4F6, + 28273 - 11904: 0xDA46, + 28274 - 11904: 0xB545, + 28275 - 11904: 0xD9F5, + 28276 - 11904: 0xD5E4, + 28278 - 11904: 0x92B3, + 28279 - 11904: 0xDA50, + 28280 - 11904: 0xDA4E, + 28281 - 11904: 0xDA52, + 28284 - 11904: 0xFDAF, + 28294 - 11904: 0x8DE1, + 28296 - 11904: 0xD9EC, + 28297 - 11904: 0xB540, + 28299 - 11904: 0x95D3, + 28301 - 11904: 0xDE61, + 28302 - 11904: 0xDE60, + 28303 - 11904: 0xDE46, + 28304 - 11904: 0xB7BD, + 28306 - 11904: 0xDE5F, + 28307 - 11904: 0xDE49, + 28308 - 11904: 0xDE4A, + 28310 - 11904: 0xB7C7, + 28311 - 11904: 0xDE68, + 28312 - 11904: 0xB7C2, + 28313 - 11904: 0xDE5E, + 28314 - 11904: 0x89C1, + 28315 - 11904: 0xDE43, + 28316 - 11904: 0xB7C8, + 28317 - 11904: 0xB7BE, + 28318 - 11904: 0xDE52, + 28319 - 11904: 0xDE48, + 28320 - 11904: 0xDE4B, + 28321 - 11904: 0xDE63, + 28322 - 11904: 0xB7B8, + 28323 - 11904: 0xDE6A, + 28324 - 11904: 0xDE62, + 28325 - 11904: 0xB7C1, + 28326 - 11904: 0xDE57, + 28327 - 11904: 0xB7CC, + 28330 - 11904: 0xB7CB, + 28331 - 11904: 0xB7C5, + 28334 - 11904: 0xDE69, + 28335 - 11904: 0xB7B9, + 28336 - 11904: 0xDE55, + 28337 - 11904: 0xDE4C, + 28338 - 11904: 0xDE59, + 28339 - 11904: 0xDE65, + 28340 - 11904: 0xB7CD, + 28341 - 11904: 0xFD68, + 28342 - 11904: 0xB7BB, + 28343 - 11904: 0xDE54, + 28344 - 11904: 0x9CB7, + 28345 - 11904: 0xDE4D, + 28346 - 11904: 0xB7C4, + 28347 - 11904: 0x8DE3, + 28348 - 11904: 0xB7C3, + 28349 - 11904: 0xDE50, + 28350 - 11904: 0xDE5A, + 28351 - 11904: 0xDE64, + 28352 - 11904: 0xDE47, + 28353 - 11904: 0xDE51, + 28354 - 11904: 0xB7BC, + 28355 - 11904: 0xDE5B, + 28356 - 11904: 0xB7C9, + 28357 - 11904: 0xB7C0, + 28358 - 11904: 0xDE4E, + 28359 - 11904: 0xB7BF, + 28360 - 11904: 0xDE45, + 28361 - 11904: 0xDE53, + 28362 - 11904: 0xDE67, + 28363 - 11904: 0xB4FE, + 28364 - 11904: 0xBAB0, + 28365 - 11904: 0xDE56, + 28366 - 11904: 0xE26C, + 28367 - 11904: 0xDE58, + 28368 - 11904: 0xDE66, + 28369 - 11904: 0xB7C6, + 28370 - 11904: 0xDE4F, + 28371 - 11904: 0xB7BA, + 28372 - 11904: 0xB7CA, + 28373 - 11904: 0xBCF0, + 28374 - 11904: 0xDE44, + 28376 - 11904: 0xDE5D, + 28377 - 11904: 0xFAC0, + 28378 - 11904: 0x8DE5, + 28379 - 11904: 0xFA64, + 28380 - 11904: 0xDE5C, + 28381 - 11904: 0x8947, + 28386 - 11904: 0x8DE4, + 28392 - 11904: 0x8DE7, + 28393 - 11904: 0x8DE8, + 28395 - 11904: 0xE2AA, + 28396 - 11904: 0xBAAD, + 28397 - 11904: 0xE27D, + 28398 - 11904: 0xE2A4, + 28399 - 11904: 0xBAA2, + 28401 - 11904: 0xE26E, + 28402 - 11904: 0xBAAF, + 28404 - 11904: 0xBA77, + 28405 - 11904: 0xE26D, + 28406 - 11904: 0xE2B0, + 28407 - 11904: 0xBAB1, + 28408 - 11904: 0xE271, + 28409 - 11904: 0xE2A3, + 28410 - 11904: 0xFDC7, + 28411 - 11904: 0xE273, + 28412 - 11904: 0xE2B3, + 28413 - 11904: 0xE2AF, + 28414 - 11904: 0xBA75, + 28415 - 11904: 0xBAA1, + 28416 - 11904: 0xE653, + 28417 - 11904: 0xBAAE, + 28418 - 11904: 0xBA7D, + 28419 - 11904: 0xE26F, + 28420 - 11904: 0xFDB0, + 28421 - 11904: 0xE2AE, + 28422 - 11904: 0xBAA3, + 28423 - 11904: 0xE2AB, + 28424 - 11904: 0xE2B8, + 28425 - 11904: 0xE275, + 28426 - 11904: 0xE27E, + 28427 - 11904: 0x9445, + 28428 - 11904: 0x97D6, + 28429 - 11904: 0xE2B6, + 28430 - 11904: 0xE2AC, + 28431 - 11904: 0xBA7C, + 28434 - 11904: 0xE27C, + 28435 - 11904: 0xBA76, + 28436 - 11904: 0xBA74, + 28437 - 11904: 0xBAA8, + 28438 - 11904: 0xFCC6, + 28439 - 11904: 0x9844, + 28440 - 11904: 0xE27A, + 28441 - 11904: 0xE277, + 28442 - 11904: 0xE278, + 28444 - 11904: 0xE2B2, + 28446 - 11904: 0xE2B7, + 28447 - 11904: 0xE2B5, + 28448 - 11904: 0xBA7A, + 28449 - 11904: 0xE2B9, + 28450 - 11904: 0xBA7E, + 28451 - 11904: 0xBAA7, + 28452 - 11904: 0x8DE9, + 28453 - 11904: 0xE270, + 28454 - 11904: 0xE5FA, + 28455 - 11904: 0xE279, + 28457 - 11904: 0xBA78, + 28458 - 11904: 0xBAAC, + 28459 - 11904: 0xBAA9, + 28460 - 11904: 0xBA7B, + 28461 - 11904: 0xE2A5, + 28462 - 11904: 0xE274, + 28463 - 11904: 0xBAAA, + 28464 - 11904: 0xE2A7, + 28465 - 11904: 0xBAA4, + 28466 - 11904: 0xBAA6, + 28467 - 11904: 0xBA73, + 28468 - 11904: 0x8DEA, + 28469 - 11904: 0xE2A9, + 28470 - 11904: 0xE2A1, + 28471 - 11904: 0xE272, + 28472 - 11904: 0xBAA5, + 28473 - 11904: 0xE2B1, + 28474 - 11904: 0xE2B4, + 28475 - 11904: 0xE27B, + 28476 - 11904: 0xE2A8, + 28477 - 11904: 0xFE50, + 28478 - 11904: 0xBA79, + 28479 - 11904: 0xBCDF, + 28480 - 11904: 0xE2A6, + 28481 - 11904: 0xE5F9, + 28483 - 11904: 0xE2AD, + 28484 - 11904: 0xFDCC, + 28494 - 11904: 0xE276, + 28495 - 11904: 0xE644, + 28496 - 11904: 0xE64E, + 28497 - 11904: 0xBCE2, + 28498 - 11904: 0xE64D, + 28499 - 11904: 0xE659, + 28500 - 11904: 0xBCE4, + 28501 - 11904: 0xE64B, + 28502 - 11904: 0x9DA7, + 28503 - 11904: 0xE64F, + 28504 - 11904: 0xBCEF, + 28506 - 11904: 0xE646, + 28507 - 11904: 0xBCE7, + 28508 - 11904: 0xFDCD, + 28509 - 11904: 0xE652, + 28510 - 11904: 0xE9F0, + 28511 - 11904: 0xBCF3, + 28512 - 11904: 0xBCF2, + 28513 - 11904: 0xE654, + 28514 - 11904: 0xE643, + 28515 - 11904: 0xE65E, + 28516 - 11904: 0xBCED, + 28518 - 11904: 0xBCE3, + 28519 - 11904: 0xE657, + 28521 - 11904: 0xE65B, + 28522 - 11904: 0xE660, + 28523 - 11904: 0xE655, + 28524 - 11904: 0xE649, + 28525 - 11904: 0xBCE6, + 28526 - 11904: 0xBCE9, + 28527 - 11904: 0xBCF1, + 28528 - 11904: 0xBCEC, + 28530 - 11904: 0xE64C, + 28531 - 11904: 0xE2A2, + 28532 - 11904: 0xFDCF, + 28534 - 11904: 0xE648, + 28535 - 11904: 0xE65F, + 28536 - 11904: 0xBCE8, + 28537 - 11904: 0x95D2, + 28538 - 11904: 0xBCEB, + 28539 - 11904: 0xE661, + 28540 - 11904: 0xBCE0, + 28541 - 11904: 0xE656, + 28542 - 11904: 0xE5FB, + 28543 - 11904: 0xE65C, + 28544 - 11904: 0xC0DF, + 28545 - 11904: 0x8DED, + 28546 - 11904: 0xE64A, + 28548 - 11904: 0xBCE1, + 28549 - 11904: 0xE645, + 28550 - 11904: 0xBCE5, + 28551 - 11904: 0xE5FC, + 28552 - 11904: 0xBAAB, + 28553 - 11904: 0xE641, + 28554 - 11904: 0xFCBA, + 28555 - 11904: 0xE65A, + 28556 - 11904: 0xE642, + 28557 - 11904: 0xE640, + 28558 - 11904: 0xBCEA, + 28560 - 11904: 0xE658, + 28562 - 11904: 0xE5FE, + 28563 - 11904: 0xE651, + 28564 - 11904: 0xE650, + 28565 - 11904: 0xE65D, + 28566 - 11904: 0xE647, + 28567 - 11904: 0xBCEE, + 28573 - 11904: 0xFDC5, + 28574 - 11904: 0xE9F3, + 28575 - 11904: 0xFDD2, + 28576 - 11904: 0xBF49, + 28577 - 11904: 0xBEFE, + 28578 - 11904: 0xEA40, + 28579 - 11904: 0xE9EB, + 28580 - 11904: 0xBF41, + 28581 - 11904: 0xE9F7, + 28582 - 11904: 0xBF48, + 28583 - 11904: 0xBF43, + 28584 - 11904: 0xE9F5, + 28585 - 11904: 0xED4F, + 28586 - 11904: 0xE9FB, + 28587 - 11904: 0xEA42, + 28588 - 11904: 0xE9FA, + 28589 - 11904: 0xE9E9, + 28590 - 11904: 0xE9F8, + 28591 - 11904: 0xEA44, + 28592 - 11904: 0xEA46, + 28593 - 11904: 0xBEFD, + 28594 - 11904: 0xEA45, + 28595 - 11904: 0xBF44, + 28596 - 11904: 0xBF4A, + 28597 - 11904: 0x9CDC, + 28598 - 11904: 0xBF47, + 28600 - 11904: 0xE9FE, + 28601 - 11904: 0xBF46, + 28602 - 11904: 0xE9F9, + 28603 - 11904: 0x95CF, + 28604 - 11904: 0xE9ED, + 28605 - 11904: 0xE9F2, + 28606 - 11904: 0x8DEE, + 28607 - 11904: 0xE9FD, + 28608 - 11904: 0xBF45, + 28609 - 11904: 0xBF42, + 28610 - 11904: 0xBEFC, + 28611 - 11904: 0xBF40, + 28612 - 11904: 0xE9F1, + 28614 - 11904: 0xE5FD, + 28615 - 11904: 0xE9EC, + 28616 - 11904: 0xE9EF, + 28617 - 11904: 0xEA41, + 28618 - 11904: 0xE9F4, + 28619 - 11904: 0xE9EA, + 28620 - 11904: 0xED4E, + 28621 - 11904: 0xEA43, + 28622 - 11904: 0xE9EE, + 28623 - 11904: 0xE9FC, + 28627 - 11904: 0xFDD4, + 28628 - 11904: 0xED51, + 28629 - 11904: 0xC0E3, + 28632 - 11904: 0xC0D7, + 28633 - 11904: 0x96EC, + 28634 - 11904: 0x96EB, + 28635 - 11904: 0xC0DB, + 28636 - 11904: 0xED53, + 28637 - 11904: 0xED59, + 28638 - 11904: 0xED57, + 28639 - 11904: 0xC0D9, + 28640 - 11904: 0xC0DA, + 28641 - 11904: 0xC0E1, + 28642 - 11904: 0xED5A, + 28643 - 11904: 0xED52, + 28644 - 11904: 0xC0DC, + 28646 - 11904: 0xED56, + 28647 - 11904: 0xED55, + 28648 - 11904: 0xED5B, + 28649 - 11904: 0xC0E2, + 28651 - 11904: 0xC0DD, + 28652 - 11904: 0xC0E0, + 28653 - 11904: 0xED54, + 28654 - 11904: 0xC0E4, + 28655 - 11904: 0xC0DE, + 28656 - 11904: 0xC0E5, + 28657 - 11904: 0xC0D8, + 28658 - 11904: 0xED58, + 28660 - 11904: 0xED50, + 28662 - 11904: 0x90B6, + 28663 - 11904: 0xEFF7, + 28664 - 11904: 0xFDC3, + 28666 - 11904: 0xC271, + 28667 - 11904: 0xEFF4, + 28668 - 11904: 0xEFF6, + 28670 - 11904: 0xC26F, + 28671 - 11904: 0xEFF2, + 28672 - 11904: 0xEFF3, + 28673 - 11904: 0xEFEE, + 28675 - 11904: 0x98AB, + 28676 - 11904: 0xE9F6, + 28677 - 11904: 0xEFEF, + 28678 - 11904: 0xC270, + 28679 - 11904: 0xEFEB, + 28681 - 11904: 0xC26D, + 28682 - 11904: 0xEFF8, + 28683 - 11904: 0xC26E, + 28684 - 11904: 0xEFEC, + 28685 - 11904: 0xEFED, + 28686 - 11904: 0xEFF1, + 28687 - 11904: 0xC273, + 28689 - 11904: 0xC272, + 28692 - 11904: 0xEFF0, + 28693 - 11904: 0xC378, + 28694 - 11904: 0xF25F, + 28695 - 11904: 0xF265, + 28696 - 11904: 0xC379, + 28697 - 11904: 0xF25C, + 28698 - 11904: 0xC376, + 28699 - 11904: 0xC373, + 28700 - 11904: 0xF267, + 28701 - 11904: 0xC377, + 28702 - 11904: 0x96EE, + 28703 - 11904: 0xC374, + 28704 - 11904: 0xF25E, + 28705 - 11904: 0xF261, + 28706 - 11904: 0xF262, + 28707 - 11904: 0xF263, + 28708 - 11904: 0xF266, + 28710 - 11904: 0xEFF5, + 28711 - 11904: 0xF25D, + 28712 - 11904: 0xC375, + 28713 - 11904: 0xF264, + 28714 - 11904: 0xF268, + 28715 - 11904: 0xF260, + 28716 - 11904: 0x8DF4, + 28719 - 11904: 0xF45D, + 28720 - 11904: 0xC46A, + 28721 - 11904: 0xF460, + 28722 - 11904: 0xC46B, + 28723 - 11904: 0xF468, + 28724 - 11904: 0xF45F, + 28725 - 11904: 0xF45C, + 28727 - 11904: 0xF45E, + 28728 - 11904: 0xF462, + 28729 - 11904: 0xF465, + 28730 - 11904: 0xF464, + 28731 - 11904: 0xF467, + 28732 - 11904: 0xF45B, + 28734 - 11904: 0xC469, + 28735 - 11904: 0xF463, + 28736 - 11904: 0xF466, + 28737 - 11904: 0xF469, + 28738 - 11904: 0xF461, + 28739 - 11904: 0xF5D3, + 28740 - 11904: 0xF5D4, + 28741 - 11904: 0xF5D8, + 28742 - 11904: 0xF5D9, + 28744 - 11904: 0xF5D6, + 28745 - 11904: 0xF5D7, + 28746 - 11904: 0xF5D5, + 28747 - 11904: 0xFDE0, + 28748 - 11904: 0xC4E9, + 28749 - 11904: 0x8C67, + 28752 - 11904: 0x8DF6, + 28753 - 11904: 0xC578, + 28754 - 11904: 0xF6EB, + 28756 - 11904: 0x8DF7, + 28757 - 11904: 0xF6E8, + 28758 - 11904: 0xF6E9, + 28759 - 11904: 0xF6EA, + 28760 - 11904: 0xC579, + 28762 - 11904: 0xF7E5, + 28763 - 11904: 0xF7E4, + 28764 - 11904: 0x8FFA, + 28765 - 11904: 0xF8AF, + 28766 - 11904: 0xC5F4, + 28767 - 11904: 0xF8AD, + 28768 - 11904: 0xF8B0, + 28769 - 11904: 0xF8AE, + 28770 - 11904: 0xF8F5, + 28771 - 11904: 0xC657, + 28772 - 11904: 0xC665, + 28773 - 11904: 0xF9A3, + 28774 - 11904: 0xF96C, + 28775 - 11904: 0x97D0, + 28776 - 11904: 0xF9A2, + 28777 - 11904: 0xF9D0, + 28778 - 11904: 0xF9D1, + 28779 - 11904: 0xA4F5, + 28780 - 11904: 0x8BD2, + 28782 - 11904: 0x87DE, + 28783 - 11904: 0x8DF8, + 28784 - 11904: 0xA6C7, + 28785 - 11904: 0xCA41, + 28788 - 11904: 0xCB5E, + 28789 - 11904: 0x90D9, + 28790 - 11904: 0xA85F, + 28791 - 11904: 0x8C47, + 28792 - 11904: 0xA862, + 28793 - 11904: 0xFAF0, + 28794 - 11904: 0xCB5F, + 28796 - 11904: 0xA860, + 28797 - 11904: 0xA861, + 28798 - 11904: 0xFDE1, + 28799 - 11904: 0x8DF9, + 28801 - 11904: 0xFDE3, + 28802 - 11904: 0xCD58, + 28803 - 11904: 0xCD5A, + 28804 - 11904: 0xCD55, + 28805 - 11904: 0xCD52, + 28806 - 11904: 0xCD54, + 28809 - 11904: 0x8DFA, + 28810 - 11904: 0xAAA4, + 28811 - 11904: 0xFB63, + 28814 - 11904: 0xAAA2, + 28815 - 11904: 0x90A6, + 28817 - 11904: 0xCD56, + 28818 - 11904: 0xAAA3, + 28819 - 11904: 0xCD53, + 28820 - 11904: 0xCD50, + 28821 - 11904: 0xAAA1, + 28822 - 11904: 0xCD57, + 28824 - 11904: 0xCD51, + 28825 - 11904: 0xAAA5, + 28826 - 11904: 0xCD59, + 28831 - 11904: 0xCFAF, + 28832 - 11904: 0x9970, + 28833 - 11904: 0xCFB3, + 28835 - 11904: 0x91EB, + 28836 - 11904: 0xACB7, + 28837 - 11904: 0x9770, + 28838 - 11904: 0x986F, + 28839 - 11904: 0xFDE2, + 28841 - 11904: 0xCFB6, + 28843 - 11904: 0xACAF, + 28844 - 11904: 0xACB2, + 28845 - 11904: 0xACB4, + 28846 - 11904: 0xACB6, + 28847 - 11904: 0xACB3, + 28848 - 11904: 0xCFB2, + 28849 - 11904: 0xCFB1, + 28851 - 11904: 0xACB1, + 28852 - 11904: 0xCFB4, + 28853 - 11904: 0xCFB5, + 28855 - 11904: 0xCFAE, + 28856 - 11904: 0xACB5, + 28857 - 11904: 0x98F2, + 28858 - 11904: 0xACB0, + 28859 - 11904: 0x9AFC, + 28860 - 11904: 0x896C, + 28861 - 11904: 0xFDFD, + 28862 - 11904: 0xCFB0, + 28864 - 11904: 0x995E, + 28868 - 11904: 0x95BD, + 28869 - 11904: 0xD277, + 28870 - 11904: 0xD278, + 28871 - 11904: 0xD279, + 28872 - 11904: 0xAF50, + 28874 - 11904: 0xAF4C, + 28875 - 11904: 0xD26E, + 28876 - 11904: 0xFDE4, + 28877 - 11904: 0xD276, + 28878 - 11904: 0xD27B, + 28879 - 11904: 0xAF51, + 28880 - 11904: 0x91E6, + 28881 - 11904: 0xD26C, + 28882 - 11904: 0xD272, + 28883 - 11904: 0xD26B, + 28884 - 11904: 0xD275, + 28885 - 11904: 0xFDE5, + 28886 - 11904: 0xFDE6, + 28887 - 11904: 0xD271, + 28888 - 11904: 0xAF4D, + 28889 - 11904: 0xAF4F, + 28890 - 11904: 0xD27A, + 28892 - 11904: 0xD26A, + 28893 - 11904: 0xD26D, + 28894 - 11904: 0xD273, + 28895 - 11904: 0xFDE7, + 28896 - 11904: 0xD274, + 28897 - 11904: 0xD27C, + 28898 - 11904: 0xD270, + 28900 - 11904: 0xAF4E, + 28911 - 11904: 0xB26D, + 28912 - 11904: 0xD64E, + 28913 - 11904: 0x9454, + 28915 - 11904: 0xD650, + 28916 - 11904: 0xD64C, + 28917 - 11904: 0x99B8, + 28918 - 11904: 0xD658, + 28919 - 11904: 0xD64A, + 28920 - 11904: 0xD657, + 28921 - 11904: 0xB269, + 28922 - 11904: 0xD648, + 28923 - 11904: 0xDA5B, + 28924 - 11904: 0xD652, + 28925 - 11904: 0xB26C, + 28926 - 11904: 0x97E9, + 28927 - 11904: 0xD653, + 28928 - 11904: 0xD656, + 28930 - 11904: 0xD65A, + 28932 - 11904: 0xD64F, + 28933 - 11904: 0x9346, + 28934 - 11904: 0xD654, + 28937 - 11904: 0xB26A, + 28938 - 11904: 0xB26B, + 28939 - 11904: 0xD659, + 28940 - 11904: 0xD64D, + 28941 - 11904: 0xD649, + 28942 - 11904: 0xD65B, + 28944 - 11904: 0xD651, + 28947 - 11904: 0xD655, + 28951 - 11904: 0xD64B, + 28953 - 11904: 0xB548, + 28954 - 11904: 0xB549, + 28955 - 11904: 0xDA65, + 28956 - 11904: 0xB54F, + 28957 - 11904: 0x9863, + 28958 - 11904: 0xDA59, + 28959 - 11904: 0xDA62, + 28960 - 11904: 0xDA58, + 28961 - 11904: 0xB54C, + 28962 - 11904: 0xDA60, + 28963 - 11904: 0xDA5E, + 28965 - 11904: 0xDA5F, + 28966 - 11904: 0xB54A, + 28968 - 11904: 0xDA63, + 28969 - 11904: 0x95BC, + 28971 - 11904: 0xFDED, + 28972 - 11904: 0xFDF7, + 28974 - 11904: 0xDA5C, + 28975 - 11904: 0xDA5A, + 28976 - 11904: 0xB54B, + 28977 - 11904: 0xDA5D, + 28978 - 11904: 0xDA61, + 28979 - 11904: 0x9870, + 28980 - 11904: 0x96F6, + 28981 - 11904: 0x8EA9, + 28982 - 11904: 0xB54D, + 28986 - 11904: 0xDA64, + 28987 - 11904: 0x9451, + 28990 - 11904: 0x8E43, + 28992 - 11904: 0x8B5A, + 28993 - 11904: 0xDE70, + 28994 - 11904: 0xDE77, + 28995 - 11904: 0xDE79, + 28996 - 11904: 0xDEA1, + 28997 - 11904: 0xFDEE, + 28998 - 11904: 0xB7DA, + 28999 - 11904: 0xDE6B, + 29001 - 11904: 0xB7D2, + 29002 - 11904: 0xFDF0, + 29003 - 11904: 0xDE7A, + 29004 - 11904: 0xB7D7, + 29005 - 11904: 0xDEA2, + 29006 - 11904: 0xB7CE, + 29007 - 11904: 0xFDF4, + 29008 - 11904: 0xDE7D, + 29009 - 11904: 0x9BF5, + 29010 - 11904: 0xDE6D, + 29011 - 11904: 0xDE7E, + 29012 - 11904: 0xDE6C, + 29014 - 11904: 0xB7DC, + 29015 - 11904: 0x8CEE, + 29016 - 11904: 0xDE78, + 29017 - 11904: 0xB7CF, + 29018 - 11904: 0xDEA3, + 29020 - 11904: 0xB7D4, + 29021 - 11904: 0xDE71, + 29022 - 11904: 0xB7D9, + 29023 - 11904: 0xDE7C, + 29024 - 11904: 0xDE6F, + 29025 - 11904: 0xDE76, + 29026 - 11904: 0xDE72, + 29027 - 11904: 0xDE6E, + 29028 - 11904: 0xB7D1, + 29029 - 11904: 0xB7D8, + 29030 - 11904: 0xB7D6, + 29031 - 11904: 0xB7D3, + 29032 - 11904: 0xB7DB, + 29033 - 11904: 0xB7D0, + 29034 - 11904: 0xDE75, + 29035 - 11904: 0x977E, + 29036 - 11904: 0xB7D5, + 29038 - 11904: 0xFDF1, + 29040 - 11904: 0xDE7B, + 29041 - 11904: 0x9BD5, + 29042 - 11904: 0xDE73, + 29043 - 11904: 0x9AC3, + 29045 - 11904: 0x97C8, + 29046 - 11904: 0xA0DB, + 29047 - 11904: 0x91D0, + 29048 - 11904: 0xDE74, + 29050 - 11904: 0x9FE4, + 29051 - 11904: 0xE2C1, + 29052 - 11904: 0x8FDD, + 29053 - 11904: 0xBAB4, + 29054 - 11904: 0x91E9, + 29056 - 11904: 0xE2BD, + 29057 - 11904: 0xE2C3, + 29058 - 11904: 0xE2BF, + 29060 - 11904: 0xBAB6, + 29061 - 11904: 0xE2BE, + 29062 - 11904: 0xE2C2, + 29063 - 11904: 0xE2BA, + 29064 - 11904: 0x98E0, + 29065 - 11904: 0xE2BC, + 29066 - 11904: 0xBAB5, + 29068 - 11904: 0x92CA, + 29070 - 11904: 0x9857, + 29071 - 11904: 0xE2C0, + 29072 - 11904: 0xE2BB, + 29073 - 11904: 0x8C51, + 29074 - 11904: 0xBAB7, + 29076 - 11904: 0xBAB2, + 29078 - 11904: 0xFDEB, + 29079 - 11904: 0xE2C4, + 29080 - 11904: 0x9B49, + 29081 - 11904: 0xBAB3, + 29082 - 11904: 0xE667, + 29083 - 11904: 0xE664, + 29084 - 11904: 0xE670, + 29085 - 11904: 0xE66A, + 29086 - 11904: 0xE66C, + 29087 - 11904: 0xBCF4, + 29088 - 11904: 0xE666, + 29089 - 11904: 0xE66E, + 29090 - 11904: 0x9D76, + 29091 - 11904: 0x9EAF, + 29092 - 11904: 0xE66D, + 29093 - 11904: 0xE66B, + 29095 - 11904: 0xE671, + 29096 - 11904: 0xBCF7, + 29097 - 11904: 0xE668, + 29098 - 11904: 0xE66F, + 29100 - 11904: 0xBCF5, + 29101 - 11904: 0x9CCC, + 29103 - 11904: 0xE663, + 29104 - 11904: 0xE665, + 29105 - 11904: 0xBCF6, + 29106 - 11904: 0xE662, + 29107 - 11904: 0xE672, + 29108 - 11904: 0xFDEA, + 29109 - 11904: 0xE669, + 29111 - 11904: 0x8DF1, + 29112 - 11904: 0xEA4A, + 29113 - 11904: 0xBF51, + 29114 - 11904: 0xFDFB, + 29116 - 11904: 0xEA55, + 29117 - 11904: 0xEA53, + 29118 - 11904: 0xBF4B, + 29119 - 11904: 0xEA49, + 29120 - 11904: 0xEA4C, + 29121 - 11904: 0xEA4D, + 29122 - 11904: 0xEA48, + 29123 - 11904: 0xBF55, + 29124 - 11904: 0xBF56, + 29125 - 11904: 0xEA47, + 29126 - 11904: 0xEA56, + 29127 - 11904: 0xEA51, + 29128 - 11904: 0xBF4F, + 29129 - 11904: 0xBF4C, + 29130 - 11904: 0xEA50, + 29131 - 11904: 0xEA4E, + 29134 - 11904: 0xBF52, + 29135 - 11904: 0xEA52, + 29136 - 11904: 0xBF4D, + 29137 - 11904: 0x8E53, + 29138 - 11904: 0xBF4E, + 29140 - 11904: 0xEA4F, + 29141 - 11904: 0xBF50, + 29142 - 11904: 0xEA4B, + 29144 - 11904: 0xEA54, + 29145 - 11904: 0xBF53, + 29146 - 11904: 0xEA57, + 29147 - 11904: 0xEA58, + 29148 - 11904: 0xBF54, + 29149 - 11904: 0xFACF, + 29151 - 11904: 0xC0E7, + 29152 - 11904: 0xC0EE, + 29153 - 11904: 0xED5C, + 29154 - 11904: 0xED62, + 29156 - 11904: 0xED60, + 29157 - 11904: 0xC0EA, + 29158 - 11904: 0xC0E9, + 29159 - 11904: 0xC0E6, + 29160 - 11904: 0xED5E, + 29163 - 11904: 0x96F9, + 29164 - 11904: 0xC0EC, + 29165 - 11904: 0xC0EB, + 29166 - 11904: 0xC0E8, + 29168 - 11904: 0xED61, + 29169 - 11904: 0xED5D, + 29170 - 11904: 0xED5F, + 29172 - 11904: 0xC0ED, + 29173 - 11904: 0x98BF, + 29174 - 11904: 0x9E49, + 29176 - 11904: 0xC277, + 29177 - 11904: 0xEFFB, + 29179 - 11904: 0xC274, + 29180 - 11904: 0xC275, + 29181 - 11904: 0xEFFD, + 29182 - 11904: 0xC276, + 29183 - 11904: 0xEFFA, + 29184 - 11904: 0x8CA7, + 29185 - 11904: 0xEFF9, + 29186 - 11904: 0xF26C, + 29187 - 11904: 0xEFFC, + 29189 - 11904: 0xF26D, + 29190 - 11904: 0xC37A, + 29191 - 11904: 0xF26B, + 29193 - 11904: 0x9BCA, + 29194 - 11904: 0xF26A, + 29196 - 11904: 0xF269, + 29197 - 11904: 0xC37B, + 29198 - 11904: 0xFDFE, + 29199 - 11904: 0x92DC, + 29200 - 11904: 0xC46C, + 29203 - 11904: 0xF46A, + 29204 - 11904: 0xF46B, + 29205 - 11904: 0xFE41, + 29206 - 11904: 0x91CC, + 29207 - 11904: 0x91E2, + 29209 - 11904: 0xF5DC, + 29210 - 11904: 0xF5DB, + 29211 - 11904: 0xC4EA, + 29213 - 11904: 0xF5DA, + 29214 - 11904: 0xF6EC, + 29215 - 11904: 0xF6ED, + 29218 - 11904: 0xF7E6, + 29219 - 11904: 0xF8B1, + 29220 - 11904: 0xFE44, + 29221 - 11904: 0x875F, + 29222 - 11904: 0xF8F6, + 29223 - 11904: 0xF9BC, + 29224 - 11904: 0xC679, + 29225 - 11904: 0xF9C6, + 29226 - 11904: 0xA4F6, + 29227 - 11904: 0x8BD3, + 29228 - 11904: 0xAAA6, + 29229 - 11904: 0xAAA7, + 29230 - 11904: 0xFE47, + 29232 - 11904: 0xACB8, + 29237 - 11904: 0xC0EF, + 29238 - 11904: 0xA4F7, + 29240 - 11904: 0xAAA8, + 29241 - 11904: 0xAF52, + 29242 - 11904: 0xB7DD, + 29243 - 11904: 0xA4F8, + 29245 - 11904: 0xB26E, + 29246 - 11904: 0xBAB8, + 29247 - 11904: 0xC962, + 29248 - 11904: 0xFE48, + 29249 - 11904: 0xCFB7, + 29250 - 11904: 0xD27D, + 29252 - 11904: 0xE2C5, + 29254 - 11904: 0xC0F0, + 29255 - 11904: 0xA4F9, + 29256 - 11904: 0xAAA9, + 29257 - 11904: 0xCFB8, + 29258 - 11904: 0xCFB9, + 29259 - 11904: 0xDA66, + 29260 - 11904: 0xB550, + 29263 - 11904: 0xDEA4, + 29264 - 11904: 0xA0E4, + 29266 - 11904: 0xB7DE, + 29267 - 11904: 0xE2C6, + 29269 - 11904: 0xFE4B, + 29270 - 11904: 0xBCF8, + 29271 - 11904: 0xFE4C, + 29272 - 11904: 0xC37C, + 29273 - 11904: 0xA4FA, + 29274 - 11904: 0xDA67, + 29275 - 11904: 0xA4FB, + 29276 - 11904: 0x8DBF, + 29277 - 11904: 0xA6C9, + 29278 - 11904: 0xCA42, + 29279 - 11904: 0xA6C8, + 29280 - 11904: 0xA865, + 29281 - 11904: 0xA864, + 29282 - 11904: 0xA863, + 29283 - 11904: 0xCB60, + 29286 - 11904: 0x9E78, + 29287 - 11904: 0xAAAA, + 29289 - 11904: 0xAAAB, + 29290 - 11904: 0xCD5B, + 29292 - 11904: 0xCFBA, + 29294 - 11904: 0xCFBD, + 29295 - 11904: 0xACBA, + 29296 - 11904: 0xCFBB, + 29298 - 11904: 0xACB9, + 29299 - 11904: 0xCFBC, + 29300 - 11904: 0xACBB, + 29302 - 11904: 0xD2A2, + 29303 - 11904: 0xD2A1, + 29304 - 11904: 0xD27E, + 29305 - 11904: 0xAF53, + 29307 - 11904: 0xD65D, + 29308 - 11904: 0xD65E, + 29309 - 11904: 0xB26F, + 29310 - 11904: 0xD65C, + 29311 - 11904: 0xD65F, + 29312 - 11904: 0xB552, + 29313 - 11904: 0xB270, + 29314 - 11904: 0xFE51, + 29316 - 11904: 0xB551, + 29317 - 11904: 0xDA6B, + 29318 - 11904: 0xDA6A, + 29319 - 11904: 0x9456, + 29320 - 11904: 0xDA68, + 29321 - 11904: 0xDA69, + 29323 - 11904: 0xDA6C, + 29324 - 11904: 0xDEA6, + 29325 - 11904: 0xDEA5, + 29326 - 11904: 0xDEA9, + 29327 - 11904: 0x9D61, + 29328 - 11904: 0xDEA8, + 29329 - 11904: 0xDEA7, + 29330 - 11904: 0xBAB9, + 29331 - 11904: 0xE2C9, + 29332 - 11904: 0x9457, + 29333 - 11904: 0xE2C8, + 29334 - 11904: 0xBABA, + 29335 - 11904: 0xE2C7, + 29336 - 11904: 0xE673, + 29338 - 11904: 0xE674, + 29339 - 11904: 0xBCF9, + 29341 - 11904: 0xEA59, + 29342 - 11904: 0xEA5A, + 29343 - 11904: 0x9966, + 29345 - 11904: 0xF272, + 29346 - 11904: 0xC37D, + 29347 - 11904: 0xF271, + 29348 - 11904: 0xF270, + 29349 - 11904: 0xF26E, + 29350 - 11904: 0xF26F, + 29351 - 11904: 0xC4EB, + 29352 - 11904: 0xF46C, + 29353 - 11904: 0xF6EE, + 29354 - 11904: 0xF8F7, + 29356 - 11904: 0xA4FC, + 29357 - 11904: 0x8BD5, + 29358 - 11904: 0xC9A5, + 29359 - 11904: 0xA5C7, + 29360 - 11904: 0xC9A6, + 29362 - 11904: 0xA069, + 29364 - 11904: 0xCA43, + 29365 - 11904: 0xCA44, + 29370 - 11904: 0xCB66, + 29373 - 11904: 0xCB62, + 29375 - 11904: 0xCB61, + 29376 - 11904: 0xAAAC, + 29377 - 11904: 0xCB65, + 29378 - 11904: 0xA867, + 29379 - 11904: 0xCB63, + 29380 - 11904: 0xA866, + 29381 - 11904: 0xCB67, + 29382 - 11904: 0xCB64, + 29385 - 11904: 0xCD5F, + 29386 - 11904: 0xCFBE, + 29387 - 11904: 0xCD5D, + 29388 - 11904: 0xCD64, + 29389 - 11904: 0x98B4, + 29390 - 11904: 0xAAAD, + 29392 - 11904: 0xAAB0, + 29393 - 11904: 0xCD65, + 29394 - 11904: 0xCD61, + 29396 - 11904: 0xCD62, + 29398 - 11904: 0xCD5C, + 29399 - 11904: 0xAAAF, + 29400 - 11904: 0xCD5E, + 29401 - 11904: 0xAAAE, + 29402 - 11904: 0xCD63, + 29404 - 11904: 0xCD60, + 29407 - 11904: 0xCFC2, + 29408 - 11904: 0xACBD, + 29409 - 11904: 0xACBE, + 29410 - 11904: 0xA049, + 29411 - 11904: 0xCFC5, + 29412 - 11904: 0xCFBF, + 29414 - 11904: 0xCFC4, + 29416 - 11904: 0xCFC0, + 29417 - 11904: 0xACBC, + 29418 - 11904: 0xCFC3, + 29419 - 11904: 0xCFC1, + 29427 - 11904: 0xD2A8, + 29428 - 11904: 0xD2A5, + 29430 - 11904: 0xD2A7, + 29431 - 11904: 0xAF58, + 29432 - 11904: 0xAF57, + 29433 - 11904: 0xAF55, + 29434 - 11904: 0xD2A4, + 29435 - 11904: 0xD2A9, + 29436 - 11904: 0xAF54, + 29437 - 11904: 0xAF56, + 29438 - 11904: 0xD2A6, + 29439 - 11904: 0xD667, + 29440 - 11904: 0xD2A3, + 29441 - 11904: 0xD2AA, + 29442 - 11904: 0xA04C, + 29444 - 11904: 0x9E65, + 29447 - 11904: 0xD662, + 29448 - 11904: 0xD666, + 29450 - 11904: 0xD665, + 29451 - 11904: 0xDA6E, + 29452 - 11904: 0xDA79, + 29455 - 11904: 0xD668, + 29456 - 11904: 0x98B5, + 29457 - 11904: 0xD663, + 29458 - 11904: 0xDA6D, + 29459 - 11904: 0xB274, + 29462 - 11904: 0xB273, + 29463 - 11904: 0xD661, + 29464 - 11904: 0xD664, + 29465 - 11904: 0xB275, + 29467 - 11904: 0xB272, + 29468 - 11904: 0xB271, + 29469 - 11904: 0xD660, + 29470 - 11904: 0xD669, + 29474 - 11904: 0xDA70, + 29475 - 11904: 0xDA77, + 29477 - 11904: 0xB554, + 29478 - 11904: 0xDA76, + 29479 - 11904: 0xDA73, + 29480 - 11904: 0xFE58, + 29481 - 11904: 0xB556, + 29482 - 11904: 0xFE52, + 29483 - 11904: 0xFE53, + 29484 - 11904: 0xA065, + 29485 - 11904: 0xDA75, + 29486 - 11904: 0xFE59, + 29488 - 11904: 0xDA6F, + 29489 - 11904: 0xDA71, + 29490 - 11904: 0xDA74, + 29491 - 11904: 0xDA72, + 29492 - 11904: 0xB555, + 29493 - 11904: 0xDA78, + 29494 - 11904: 0xB553, + 29495 - 11904: 0xB7DF, + 29496 - 11904: 0x98B7, + 29497 - 11904: 0x98B8, + 29498 - 11904: 0xDEAD, + 29499 - 11904: 0xDEAC, + 29500 - 11904: 0xDEAA, + 29502 - 11904: 0xB7E2, + 29503 - 11904: 0xB7E1, + 29504 - 11904: 0xDEAE, + 29505 - 11904: 0x98BA, + 29506 - 11904: 0xDEAB, + 29507 - 11904: 0xE2CA, + 29508 - 11904: 0xBABB, + 29509 - 11904: 0xB7E0, + 29512 - 11904: 0x98BB, + 29513 - 11904: 0xDEB0, + 29514 - 11904: 0xDEAF, + 29516 - 11904: 0xE2CD, + 29517 - 11904: 0xE2CB, + 29518 - 11904: 0xBCFA, + 29519 - 11904: 0x9FBC, + 29520 - 11904: 0xBABC, + 29521 - 11904: 0xE2CC, + 29522 - 11904: 0xE676, + 29527 - 11904: 0xBCFB, + 29528 - 11904: 0xE675, + 29529 - 11904: 0xE67E, + 29530 - 11904: 0xE67D, + 29531 - 11904: 0xE67B, + 29533 - 11904: 0xE67A, + 29534 - 11904: 0xE677, + 29535 - 11904: 0xE678, + 29536 - 11904: 0xE679, + 29537 - 11904: 0xE67C, + 29538 - 11904: 0xE6A1, + 29541 - 11904: 0xEA5F, + 29542 - 11904: 0xEA5C, + 29543 - 11904: 0xEA5D, + 29544 - 11904: 0xBF57, + 29545 - 11904: 0xEA5B, + 29546 - 11904: 0xEA61, + 29547 - 11904: 0xEA60, + 29548 - 11904: 0xEA5E, + 29550 - 11904: 0xED64, + 29551 - 11904: 0xED65, + 29552 - 11904: 0xC0F1, + 29553 - 11904: 0xA04A, + 29554 - 11904: 0xC0F2, + 29555 - 11904: 0xED63, + 29556 - 11904: 0x9EC7, + 29557 - 11904: 0xC279, + 29558 - 11904: 0xEFFE, + 29559 - 11904: 0xC278, + 29560 - 11904: 0xC37E, + 29562 - 11904: 0xC3A1, + 29563 - 11904: 0xC46D, + 29564 - 11904: 0xF46E, + 29565 - 11904: 0xF46D, + 29566 - 11904: 0xF5DD, + 29567 - 11904: 0xF6EF, + 29568 - 11904: 0xC57A, + 29569 - 11904: 0xF7E8, + 29570 - 11904: 0xF7E7, + 29571 - 11904: 0xF7E9, + 29572 - 11904: 0xA5C8, + 29573 - 11904: 0xCFC6, + 29574 - 11904: 0xAF59, + 29575 - 11904: 0xB276, + 29576 - 11904: 0xD66A, + 29577 - 11904: 0xA5C9, + 29578 - 11904: 0xC9A7, + 29579 - 11904: 0xA4FD, + 29580 - 11904: 0x8CA9, + 29582 - 11904: 0xCA45, + 29583 - 11904: 0x98AE, + 29586 - 11904: 0xCB6C, + 29587 - 11904: 0xCB6A, + 29588 - 11904: 0xCB6B, + 29589 - 11904: 0xCB68, + 29590 - 11904: 0xA868, + 29591 - 11904: 0xCB69, + 29592 - 11904: 0x92D6, + 29596 - 11904: 0xFAE1, + 29597 - 11904: 0xCD6D, + 29598 - 11904: 0x91D4, + 29599 - 11904: 0xAAB3, + 29600 - 11904: 0xCD6B, + 29601 - 11904: 0xCD67, + 29602 - 11904: 0xCD6A, + 29604 - 11904: 0xCD66, + 29605 - 11904: 0xAAB5, + 29606 - 11904: 0xCD69, + 29607 - 11904: 0xFADE, + 29608 - 11904: 0xAAB2, + 29609 - 11904: 0xAAB1, + 29610 - 11904: 0xFE5B, + 29611 - 11904: 0xAAB4, + 29612 - 11904: 0xCD6C, + 29613 - 11904: 0xCD68, + 29618 - 11904: 0xACC2, + 29619 - 11904: 0xACC5, + 29620 - 11904: 0xCFCE, + 29621 - 11904: 0xCFCD, + 29622 - 11904: 0xCFCC, + 29623 - 11904: 0xACBF, + 29624 - 11904: 0xCFD5, + 29625 - 11904: 0xCFCB, + 29626 - 11904: 0x8C53, + 29627 - 11904: 0xACC1, + 29628 - 11904: 0xD2AF, + 29630 - 11904: 0xCFD2, + 29631 - 11904: 0xCFD0, + 29632 - 11904: 0xACC4, + 29634 - 11904: 0xCFC8, + 29635 - 11904: 0xCFD3, + 29636 - 11904: 0x87BF, + 29637 - 11904: 0xCFCA, + 29638 - 11904: 0xCFD4, + 29639 - 11904: 0xCFD1, + 29640 - 11904: 0xCFC9, + 29641 - 11904: 0xFE5E, + 29642 - 11904: 0xACC0, + 29643 - 11904: 0xCFD6, + 29644 - 11904: 0xCFC7, + 29645 - 11904: 0xACC3, + 29646 - 11904: 0xFBD7, + 29647 - 11904: 0xFE5A, + 29648 - 11904: 0x94C5, + 29650 - 11904: 0xD2B4, + 29651 - 11904: 0xD2AB, + 29652 - 11904: 0xD2B6, + 29653 - 11904: 0xFACA, + 29654 - 11904: 0xD2AE, + 29655 - 11904: 0xD2B9, + 29656 - 11904: 0xD2BA, + 29657 - 11904: 0xD2AC, + 29658 - 11904: 0xD2B8, + 29659 - 11904: 0xD2B5, + 29660 - 11904: 0xD2B3, + 29661 - 11904: 0xD2B7, + 29662 - 11904: 0xAF5F, + 29664 - 11904: 0xAF5D, + 29665 - 11904: 0x98C1, + 29666 - 11904: 0x975C, + 29667 - 11904: 0xD2B1, + 29668 - 11904: 0xFE74, + 29669 - 11904: 0xD2AD, + 29670 - 11904: 0x9773, + 29671 - 11904: 0xD2B0, + 29672 - 11904: 0xD2BB, + 29673 - 11904: 0xD2B2, + 29674 - 11904: 0xAF5E, + 29675 - 11904: 0xCFCF, + 29677 - 11904: 0xAF5A, + 29678 - 11904: 0xAF5C, + 29679 - 11904: 0xFA46, + 29683 - 11904: 0x9764, + 29684 - 11904: 0xD678, + 29685 - 11904: 0xD66D, + 29686 - 11904: 0xD66B, + 29687 - 11904: 0xFE68, + 29688 - 11904: 0xD66C, + 29689 - 11904: 0x964E, + 29690 - 11904: 0xD673, + 29691 - 11904: 0x9765, + 29692 - 11904: 0xD674, + 29693 - 11904: 0xD670, + 29694 - 11904: 0xB27B, + 29695 - 11904: 0xD675, + 29696 - 11904: 0xD672, + 29697 - 11904: 0xD66F, + 29698 - 11904: 0x8C5A, + 29699 - 11904: 0xB279, + 29700 - 11904: 0xD66E, + 29701 - 11904: 0xB277, + 29702 - 11904: 0xB27A, + 29703 - 11904: 0xD671, + 29704 - 11904: 0xD679, + 29705 - 11904: 0xAF5B, + 29706 - 11904: 0xB278, + 29707 - 11904: 0xD677, + 29708 - 11904: 0xD676, + 29709 - 11904: 0xB27C, + 29713 - 11904: 0x89A1, + 29714 - 11904: 0x95FA, + 29716 - 11904: 0x92D4, + 29717 - 11904: 0xFE69, + 29718 - 11904: 0xDA7E, + 29719 - 11904: 0xFB45, + 29721 - 11904: 0x98C8, + 29722 - 11904: 0xDAA1, + 29723 - 11904: 0xB560, + 29724 - 11904: 0x90EF, + 29725 - 11904: 0xDAA7, + 29726 - 11904: 0x98C9, + 29727 - 11904: 0x98CA, + 29728 - 11904: 0xDAA9, + 29729 - 11904: 0xDAA2, + 29730 - 11904: 0xB55A, + 29731 - 11904: 0xDAA6, + 29732 - 11904: 0xDAA5, + 29733 - 11904: 0xB55B, + 29734 - 11904: 0xB561, + 29736 - 11904: 0xB562, + 29737 - 11904: 0xDAA8, + 29738 - 11904: 0xB558, + 29739 - 11904: 0xDA7D, + 29740 - 11904: 0xDA7B, + 29741 - 11904: 0xDAA3, + 29742 - 11904: 0xDA7A, + 29743 - 11904: 0xB55F, + 29744 - 11904: 0xDA7C, + 29745 - 11904: 0xDAA4, + 29746 - 11904: 0xDAAA, + 29747 - 11904: 0xB559, + 29748 - 11904: 0xB55E, + 29749 - 11904: 0xB55C, + 29750 - 11904: 0xB55D, + 29751 - 11904: 0x946D, + 29752 - 11904: 0x94B7, + 29753 - 11904: 0xFE6C, + 29754 - 11904: 0xB557, + 29756 - 11904: 0x946B, + 29759 - 11904: 0xB7E9, + 29760 - 11904: 0xDEB7, + 29761 - 11904: 0xB7E8, + 29762 - 11904: 0xDEBB, + 29763 - 11904: 0x92FC, + 29764 - 11904: 0xDEB1, + 29765 - 11904: 0x95EB, + 29766 - 11904: 0xDEBC, + 29767 - 11904: 0xFE73, + 29768 - 11904: 0x976E, + 29769 - 11904: 0xFE5F, + 29770 - 11904: 0xDEB2, + 29771 - 11904: 0xDEB3, + 29772 - 11904: 0x87B8, + 29773 - 11904: 0xDEBD, + 29774 - 11904: 0xDEBA, + 29775 - 11904: 0xDEB8, + 29776 - 11904: 0xDEB9, + 29777 - 11904: 0xDEB5, + 29778 - 11904: 0xDEB4, + 29779 - 11904: 0xFDBD, + 29780 - 11904: 0xDEBE, + 29781 - 11904: 0xB7E5, + 29782 - 11904: 0x92D5, + 29783 - 11904: 0xDEB6, + 29785 - 11904: 0xB7EA, + 29786 - 11904: 0xB7E4, + 29787 - 11904: 0xB7EB, + 29788 - 11904: 0xFE6F, + 29789 - 11904: 0xFEB9, + 29790 - 11904: 0xB7E7, + 29791 - 11904: 0xB7E6, + 29792 - 11904: 0xFE71, + 29793 - 11904: 0x8778, + 29794 - 11904: 0xE2CE, + 29795 - 11904: 0xBABE, + 29796 - 11904: 0xBABD, + 29797 - 11904: 0xFBBB, + 29799 - 11904: 0xE2D3, + 29800 - 11904: 0xA0D5, + 29801 - 11904: 0xBCFC, + 29802 - 11904: 0xBABF, + 29803 - 11904: 0x95FB, + 29804 - 11904: 0xFE77, + 29805 - 11904: 0xBAC1, + 29806 - 11904: 0xE2D4, + 29807 - 11904: 0xB7E3, + 29808 - 11904: 0xBAC0, + 29809 - 11904: 0xE2D0, + 29810 - 11904: 0xE2D2, + 29811 - 11904: 0xE2CF, + 29812 - 11904: 0xFE79, + 29813 - 11904: 0xE2D1, + 29814 - 11904: 0xFE75, + 29817 - 11904: 0xE6AB, + 29818 - 11904: 0x945D, + 29820 - 11904: 0xE6AA, + 29821 - 11904: 0xE6A7, + 29822 - 11904: 0xBD40, + 29823 - 11904: 0xEA62, + 29824 - 11904: 0xBD41, + 29825 - 11904: 0xE6A6, + 29826 - 11904: 0xFE7C, + 29827 - 11904: 0xBCFE, + 29829 - 11904: 0xE6A8, + 29830 - 11904: 0xE6A5, + 29831 - 11904: 0xE6A2, + 29832 - 11904: 0xE6A9, + 29833 - 11904: 0xE6A3, + 29834 - 11904: 0xE6A4, + 29835 - 11904: 0xBCFD, + 29836 - 11904: 0x9344, + 29837 - 11904: 0x8EA6, + 29840 - 11904: 0xED69, + 29842 - 11904: 0xEA66, + 29844 - 11904: 0xEA65, + 29845 - 11904: 0xEA67, + 29847 - 11904: 0xED66, + 29848 - 11904: 0xBF5A, + 29849 - 11904: 0x92D3, + 29850 - 11904: 0xEA63, + 29851 - 11904: 0x94B8, + 29852 - 11904: 0xBF58, + 29853 - 11904: 0x8779, + 29854 - 11904: 0xBF5C, + 29855 - 11904: 0xBF5B, + 29856 - 11904: 0xEA64, + 29857 - 11904: 0xEA68, + 29859 - 11904: 0xBF59, + 29860 - 11904: 0xFC71, + 29861 - 11904: 0xED6D, + 29862 - 11904: 0xC0F5, + 29863 - 11904: 0xC27A, + 29864 - 11904: 0xC0F6, + 29865 - 11904: 0xC0F3, + 29866 - 11904: 0xED6A, + 29867 - 11904: 0xED68, + 29869 - 11904: 0xED6B, + 29871 - 11904: 0xED6E, + 29872 - 11904: 0xC0F4, + 29873 - 11904: 0xED6C, + 29874 - 11904: 0xED67, + 29876 - 11904: 0x975E, + 29877 - 11904: 0xF042, + 29878 - 11904: 0xF045, + 29879 - 11904: 0xF275, + 29880 - 11904: 0xF040, + 29881 - 11904: 0x8CAD, + 29882 - 11904: 0xF46F, + 29883 - 11904: 0xF046, + 29885 - 11904: 0xC3A2, + 29886 - 11904: 0xF044, + 29887 - 11904: 0xC27B, + 29888 - 11904: 0xF041, + 29889 - 11904: 0xF043, + 29890 - 11904: 0xF047, + 29891 - 11904: 0xF276, + 29893 - 11904: 0xF274, + 29894 - 11904: 0x87C1, + 29896 - 11904: 0xFEA7, + 29898 - 11904: 0xC3A3, + 29899 - 11904: 0xF273, + 29900 - 11904: 0x946A, + 29903 - 11904: 0xC46E, + 29904 - 11904: 0x93E3, + 29907 - 11904: 0x98CF, + 29908 - 11904: 0xC4ED, + 29909 - 11904: 0xF6F1, + 29910 - 11904: 0xC4EC, + 29911 - 11904: 0xF6F3, + 29912 - 11904: 0xF6F0, + 29913 - 11904: 0xF6F2, + 29914 - 11904: 0xC5D0, + 29915 - 11904: 0xF8B2, + 29916 - 11904: 0xA5CA, + 29917 - 11904: 0xCD6E, + 29918 - 11904: 0xD2BC, + 29919 - 11904: 0xD2BD, + 29920 - 11904: 0xB27D, + 29921 - 11904: 0xDEBF, + 29922 - 11904: 0xBF5D, + 29923 - 11904: 0xC3A4, + 29924 - 11904: 0xC57B, + 29925 - 11904: 0xF8B3, + 29926 - 11904: 0xA5CB, + 29927 - 11904: 0xA0D9, + 29928 - 11904: 0xCD6F, + 29929 - 11904: 0xFEAA, + 29932 - 11904: 0xCFD7, + 29934 - 11904: 0xCFD8, + 29936 - 11904: 0xA0BF, + 29937 - 11904: 0xA04D, + 29938 - 11904: 0xA0B8, + 29940 - 11904: 0xD2BE, + 29941 - 11904: 0xD2BF, + 29942 - 11904: 0xB27E, + 29943 - 11904: 0xB2A1, + 29944 - 11904: 0xA0CE, + 29947 - 11904: 0xDAAB, + 29949 - 11904: 0xDEC2, + 29950 - 11904: 0xDEC1, + 29951 - 11904: 0xDEC0, + 29952 - 11904: 0xE2D5, + 29954 - 11904: 0xE2D6, + 29955 - 11904: 0xE2D7, + 29956 - 11904: 0xBAC2, + 29957 - 11904: 0xA0B7, + 29959 - 11904: 0xE6AD, + 29960 - 11904: 0xE6AC, + 29963 - 11904: 0xEA69, + 29964 - 11904: 0xBF5E, + 29965 - 11904: 0xBF5F, + 29966 - 11904: 0xFEA9, + 29967 - 11904: 0xED72, + 29968 - 11904: 0xED6F, + 29969 - 11904: 0xED70, + 29970 - 11904: 0xED71, + 29971 - 11904: 0xF049, + 29972 - 11904: 0xF048, + 29973 - 11904: 0xC27C, + 29974 - 11904: 0xF277, + 29975 - 11904: 0xF5DE, + 29976 - 11904: 0xA5CC, + 29977 - 11904: 0x89C3, + 29978 - 11904: 0xACC6, + 29980 - 11904: 0xB2A2, + 29981 - 11904: 0xDEC3, + 29982 - 11904: 0xFEAB, + 29983 - 11904: 0xA5CD, + 29985 - 11904: 0xD2C0, + 29986 - 11904: 0xB2A3, + 29989 - 11904: 0xB563, + 29990 - 11904: 0xB564, + 29992 - 11904: 0xA5CE, + 29993 - 11904: 0xA5CF, + 29994 - 11904: 0xCA46, + 29995 - 11904: 0xA86A, + 29996 - 11904: 0xA869, + 29997 - 11904: 0xACC7, + 29998 - 11904: 0xCFD9, + 29999 - 11904: 0xDAAC, + 30000 - 11904: 0xA5D0, + 30001 - 11904: 0xA5D1, + 30002 - 11904: 0xA5D2, + 30003 - 11904: 0xA5D3, + 30004 - 11904: 0x9DF4, + 30005 - 11904: 0x896D, + 30007 - 11904: 0xA86B, + 30008 - 11904: 0xA86C, + 30009 - 11904: 0xCB6E, + 30010 - 11904: 0xCB6D, + 30011 - 11904: 0x9C7B, + 30013 - 11904: 0xAAB6, + 30014 - 11904: 0xCD72, + 30015 - 11904: 0xCD70, + 30016 - 11904: 0xCD71, + 30018 - 11904: 0x98D2, + 30022 - 11904: 0x9FA9, + 30023 - 11904: 0xCFDA, + 30024 - 11904: 0xCFDB, + 30026 - 11904: 0xFEB2, + 30027 - 11904: 0xACCB, + 30028 - 11904: 0xACC9, + 30029 - 11904: 0xFEB1, + 30030 - 11904: 0xACCA, + 30031 - 11904: 0xACC8, + 30033 - 11904: 0x97D9, + 30035 - 11904: 0xA0C4, + 30036 - 11904: 0xAF60, + 30037 - 11904: 0x9476, + 30041 - 11904: 0xAF64, + 30042 - 11904: 0xAF63, + 30043 - 11904: 0xD2C1, + 30044 - 11904: 0xAF62, + 30045 - 11904: 0xAF61, + 30047 - 11904: 0xD2C2, + 30048 - 11904: 0x9978, + 30050 - 11904: 0xB2A6, + 30051 - 11904: 0xD67B, + 30052 - 11904: 0xD67A, + 30053 - 11904: 0xB2A4, + 30054 - 11904: 0xB2A5, + 30055 - 11904: 0xFEB3, + 30058 - 11904: 0xB566, + 30059 - 11904: 0xB565, + 30060 - 11904: 0xDAAE, + 30061 - 11904: 0x98D3, + 30062 - 11904: 0xFEB4, + 30063 - 11904: 0xDAAD, + 30064 - 11904: 0xB2A7, + 30066 - 11904: 0x98D4, + 30070 - 11904: 0xB7ED, + 30071 - 11904: 0xDEC5, + 30072 - 11904: 0xB7EE, + 30073 - 11904: 0xDEC4, + 30074 - 11904: 0x9FB9, + 30077 - 11904: 0xE2D8, + 30078 - 11904: 0xE6AE, + 30079 - 11904: 0xBD42, + 30080 - 11904: 0xEA6A, + 30083 - 11904: 0x9471, + 30084 - 11904: 0xED73, + 30086 - 11904: 0xC3A6, + 30087 - 11904: 0xC3A5, + 30090 - 11904: 0xC57C, + 30091 - 11904: 0xA5D4, + 30092 - 11904: 0xCD73, + 30093 - 11904: 0x98D5, + 30094 - 11904: 0xFEB8, + 30095 - 11904: 0xB2A8, + 30096 - 11904: 0xE2D9, + 30097 - 11904: 0xBAC3, + 30098 - 11904: 0xC6D4, + 30100 - 11904: 0xCB6F, + 30101 - 11904: 0xCB70, + 30104 - 11904: 0xCD74, + 30105 - 11904: 0xAAB8, + 30106 - 11904: 0xAAB9, + 30109 - 11904: 0xAAB7, + 30110 - 11904: 0xFEBA, + 30114 - 11904: 0xACCF, + 30115 - 11904: 0xACD0, + 30116 - 11904: 0xACCD, + 30117 - 11904: 0xACCE, + 30119 - 11904: 0xCFDC, + 30122 - 11904: 0xCFDD, + 30123 - 11904: 0xACCC, + 30128 - 11904: 0xD2C3, + 30129 - 11904: 0x9E5C, + 30130 - 11904: 0xAF68, + 30131 - 11904: 0xAF69, + 30132 - 11904: 0xFEBB, + 30133 - 11904: 0xB2AB, + 30134 - 11904: 0xD2C9, + 30136 - 11904: 0xAF6E, + 30137 - 11904: 0xAF6C, + 30138 - 11904: 0xD2CA, + 30139 - 11904: 0xD2C5, + 30140 - 11904: 0xAF6B, + 30141 - 11904: 0xAF6A, + 30142 - 11904: 0xAF65, + 30143 - 11904: 0xD2C8, + 30144 - 11904: 0xD2C7, + 30145 - 11904: 0xD2C4, + 30146 - 11904: 0xAF6D, + 30147 - 11904: 0xA044, + 30148 - 11904: 0xD2C6, + 30149 - 11904: 0xAF66, + 30151 - 11904: 0xAF67, + 30152 - 11904: 0x98D7, + 30154 - 11904: 0xB2AC, + 30155 - 11904: 0xD6A1, + 30156 - 11904: 0xD6A2, + 30157 - 11904: 0xB2AD, + 30158 - 11904: 0xD67C, + 30159 - 11904: 0xD67E, + 30160 - 11904: 0xD6A4, + 30161 - 11904: 0xD6A3, + 30162 - 11904: 0xD67D, + 30164 - 11904: 0xB2A9, + 30165 - 11904: 0xB2AA, + 30167 - 11904: 0xDAB6, + 30168 - 11904: 0xB56B, + 30169 - 11904: 0xB56A, + 30170 - 11904: 0xDAB0, + 30171 - 11904: 0xB568, + 30172 - 11904: 0x98D8, + 30173 - 11904: 0xDAB3, + 30174 - 11904: 0xB56C, + 30175 - 11904: 0xDAB4, + 30176 - 11904: 0xB56D, + 30177 - 11904: 0xDAB1, + 30178 - 11904: 0xB567, + 30179 - 11904: 0xB569, + 30180 - 11904: 0xDAB5, + 30182 - 11904: 0xDAB2, + 30183 - 11904: 0xDAAF, + 30189 - 11904: 0xDED2, + 30191 - 11904: 0xDEC7, + 30192 - 11904: 0xB7F0, + 30193 - 11904: 0xB7F3, + 30194 - 11904: 0xB7F2, + 30195 - 11904: 0xB7F7, + 30196 - 11904: 0xB7F6, + 30197 - 11904: 0xDED3, + 30198 - 11904: 0xDED1, + 30199 - 11904: 0xDECA, + 30200 - 11904: 0xDECE, + 30201 - 11904: 0xDECD, + 30202 - 11904: 0xB7F4, + 30203 - 11904: 0xDED0, + 30204 - 11904: 0xDECC, + 30205 - 11904: 0xDED4, + 30206 - 11904: 0xDECB, + 30207 - 11904: 0xB7F5, + 30208 - 11904: 0xB7EF, + 30209 - 11904: 0xB7F1, + 30210 - 11904: 0xFEBC, + 30211 - 11904: 0xDEC9, + 30215 - 11904: 0x9FFE, + 30216 - 11904: 0xE2DB, + 30217 - 11904: 0xBAC7, + 30218 - 11904: 0xE2DF, + 30219 - 11904: 0xBAC6, + 30220 - 11904: 0xE2DC, + 30221 - 11904: 0xBAC5, + 30223 - 11904: 0xDEC8, + 30224 - 11904: 0xDECF, + 30225 - 11904: 0xE2DE, + 30227 - 11904: 0xBAC8, + 30228 - 11904: 0xE2E0, + 30229 - 11904: 0xE2DD, + 30230 - 11904: 0xE2DA, + 30233 - 11904: 0xE6B1, + 30234 - 11904: 0xE6B5, + 30235 - 11904: 0xE6B7, + 30236 - 11904: 0xE6B3, + 30237 - 11904: 0xE6B2, + 30238 - 11904: 0xE6B0, + 30239 - 11904: 0xBD45, + 30240 - 11904: 0xBD43, + 30241 - 11904: 0xBD48, + 30242 - 11904: 0xBD49, + 30243 - 11904: 0xE6B4, + 30244 - 11904: 0xBD46, + 30245 - 11904: 0xE6AF, + 30246 - 11904: 0xBD47, + 30247 - 11904: 0xBAC4, + 30248 - 11904: 0xE6B6, + 30249 - 11904: 0xBD44, + 30252 - 11904: 0xFEBD, + 30253 - 11904: 0xEA6C, + 30255 - 11904: 0xEA6B, + 30256 - 11904: 0xEA73, + 30257 - 11904: 0xEA6D, + 30258 - 11904: 0xEA72, + 30259 - 11904: 0xEA6F, + 30260 - 11904: 0xBF60, + 30261 - 11904: 0xEA71, + 30264 - 11904: 0xBF61, + 30266 - 11904: 0xBF62, + 30267 - 11904: 0x9DDD, + 30268 - 11904: 0xEA70, + 30269 - 11904: 0xEA6E, + 30272 - 11904: 0x9EE1, + 30274 - 11904: 0xC0F8, + 30275 - 11904: 0xED74, + 30278 - 11904: 0xC0F7, + 30279 - 11904: 0xED77, + 30280 - 11904: 0xED75, + 30281 - 11904: 0xED76, + 30284 - 11904: 0xC0F9, + 30285 - 11904: 0x98DA, + 30286 - 11904: 0x9DDF, + 30287 - 11904: 0xFEBF, + 30288 - 11904: 0xF04D, + 30289 - 11904: 0xFEBE, + 30290 - 11904: 0xC2A1, + 30291 - 11904: 0xF04E, + 30292 - 11904: 0x9EEB, + 30294 - 11904: 0xC27D, + 30295 - 11904: 0xF04F, + 30296 - 11904: 0xC27E, + 30297 - 11904: 0xF04C, + 30298 - 11904: 0xF050, + 30300 - 11904: 0xF04A, + 30303 - 11904: 0xC3A7, + 30304 - 11904: 0xF278, + 30305 - 11904: 0xC3A8, + 30306 - 11904: 0xC46F, + 30308 - 11904: 0xF04B, + 30309 - 11904: 0xC470, + 30310 - 11904: 0x9E59, + 30311 - 11904: 0xA05C, + 30313 - 11904: 0xC4EE, + 30314 - 11904: 0xF5DF, + 30316 - 11904: 0xC57E, + 30317 - 11904: 0xF6F4, + 30318 - 11904: 0xC57D, + 30319 - 11904: 0xFEC0, + 30320 - 11904: 0xF7EA, + 30321 - 11904: 0xC5F5, + 30322 - 11904: 0xC5F6, + 30323 - 11904: 0x9477, + 30324 - 11904: 0x98DC, + 30325 - 11904: 0xF9CC, + 30326 - 11904: 0xFEC1, + 30328 - 11904: 0xACD1, + 30329 - 11904: 0xCFDE, + 30330 - 11904: 0x98DE, + 30331 - 11904: 0xB56E, + 30332 - 11904: 0xB56F, + 30333 - 11904: 0xA5D5, + 30334 - 11904: 0xA6CA, + 30335 - 11904: 0xCA47, + 30337 - 11904: 0xCB71, + 30338 - 11904: 0xA86D, + 30340 - 11904: 0xAABA, + 30342 - 11904: 0xACD2, + 30343 - 11904: 0xACD3, + 30344 - 11904: 0xACD4, + 30345 - 11904: 0xD6A6, + 30346 - 11904: 0xD2CB, + 30347 - 11904: 0xAF6F, + 30350 - 11904: 0xB2AE, + 30351 - 11904: 0xD6A5, + 30352 - 11904: 0xFEC3, + 30354 - 11904: 0xDAB8, + 30355 - 11904: 0xB571, + 30357 - 11904: 0xDAB7, + 30358 - 11904: 0xB570, + 30361 - 11904: 0xDED5, + 30362 - 11904: 0xBD4A, + 30363 - 11904: 0xE6BB, + 30364 - 11904: 0xE6B8, + 30365 - 11904: 0xE6B9, + 30366 - 11904: 0xE6BA, + 30369 - 11904: 0xFEC8, + 30372 - 11904: 0xED78, + 30373 - 11904: 0xFEC9, + 30374 - 11904: 0xF051, + 30378 - 11904: 0xF471, + 30379 - 11904: 0xF470, + 30381 - 11904: 0xF6F5, + 30382 - 11904: 0xA5D6, + 30383 - 11904: 0xCD75, + 30384 - 11904: 0xAF70, + 30388 - 11904: 0xB572, + 30389 - 11904: 0xDED6, + 30391 - 11904: 0xFECA, + 30392 - 11904: 0xE2E1, + 30394 - 11904: 0xBD4B, + 30395 - 11904: 0xEA74, + 30397 - 11904: 0xF052, + 30398 - 11904: 0xF472, + 30399 - 11904: 0xA5D7, + 30402 - 11904: 0xAABB, + 30403 - 11904: 0xACD7, + 30404 - 11904: 0xCFDF, + 30405 - 11904: 0xACD8, + 30406 - 11904: 0xACD6, + 30408 - 11904: 0xACD5, + 30409 - 11904: 0xD2CC, + 30410 - 11904: 0xAF71, + 30412 - 11904: 0xFECB, + 30413 - 11904: 0xAF72, + 30414 - 11904: 0xAF73, + 30418 - 11904: 0xB2B0, + 30419 - 11904: 0xD6A7, + 30420 - 11904: 0xB2AF, + 30422 - 11904: 0x9FC2, + 30425 - 11904: 0x8C6B, + 30426 - 11904: 0xDAB9, + 30427 - 11904: 0xB2B1, + 30428 - 11904: 0xB573, + 30429 - 11904: 0xDED7, + 30430 - 11904: 0xB7F8, + 30431 - 11904: 0xB7F9, + 30433 - 11904: 0xBAC9, + 30435 - 11904: 0xBACA, + 30436 - 11904: 0xBD4C, + 30437 - 11904: 0xBF64, + 30438 - 11904: 0xEA75, + 30439 - 11904: 0xBF63, + 30441 - 11904: 0xED79, + 30442 - 11904: 0xC0FA, + 30444 - 11904: 0xF053, + 30445 - 11904: 0xF473, + 30446 - 11904: 0xA5D8, + 30447 - 11904: 0xA86E, + 30448 - 11904: 0xCD78, + 30449 - 11904: 0xCD77, + 30450 - 11904: 0xAABC, + 30451 - 11904: 0xCD76, + 30452 - 11904: 0xAABD, + 30453 - 11904: 0xCD79, + 30455 - 11904: 0xCFE5, + 30456 - 11904: 0xACDB, + 30457 - 11904: 0xACDA, + 30458 - 11904: 0xCFE7, + 30459 - 11904: 0xCFE6, + 30460 - 11904: 0xACDF, + 30462 - 11904: 0xACDE, + 30465 - 11904: 0xACD9, + 30467 - 11904: 0xCFE1, + 30468 - 11904: 0xCFE2, + 30469 - 11904: 0xCFE3, + 30471 - 11904: 0xACE0, + 30472 - 11904: 0xCFE0, + 30473 - 11904: 0xACDC, + 30474 - 11904: 0xCFE4, + 30475 - 11904: 0xACDD, + 30476 - 11904: 0x98C4, + 30478 - 11904: 0x94B0, + 30479 - 11904: 0x94B1, + 30480 - 11904: 0xD2CF, + 30481 - 11904: 0xD2D3, + 30482 - 11904: 0xD2D1, + 30483 - 11904: 0xD2D0, + 30485 - 11904: 0xD2D4, + 30489 - 11904: 0xD2D5, + 30490 - 11904: 0xD2D6, + 30491 - 11904: 0xD2CE, + 30493 - 11904: 0xD2CD, + 30494 - 11904: 0xFED1, + 30495 - 11904: 0xAF75, + 30496 - 11904: 0xAF76, + 30498 - 11904: 0xD2D7, + 30499 - 11904: 0xD2D2, + 30500 - 11904: 0xA0C1, + 30501 - 11904: 0xD6B0, + 30502 - 11904: 0xFED2, + 30503 - 11904: 0xD2D8, + 30504 - 11904: 0xAF77, + 30505 - 11904: 0xAF74, + 30507 - 11904: 0xA0CD, + 30509 - 11904: 0xD6AA, + 30511 - 11904: 0xD6A9, + 30513 - 11904: 0xD6AB, + 30514 - 11904: 0xD6AC, + 30515 - 11904: 0xD6AE, + 30516 - 11904: 0xD6AD, + 30517 - 11904: 0xD6B2, + 30518 - 11904: 0xB2B5, + 30519 - 11904: 0xB2B2, + 30520 - 11904: 0xB2B6, + 30521 - 11904: 0xD6A8, + 30522 - 11904: 0xB2B7, + 30523 - 11904: 0xD6B1, + 30524 - 11904: 0xB2B4, + 30525 - 11904: 0xD6AF, + 30526 - 11904: 0xB2B3, + 30528 - 11904: 0xFED3, + 30531 - 11904: 0x98E5, + 30532 - 11904: 0xDABC, + 30533 - 11904: 0xDABE, + 30534 - 11904: 0xDABA, + 30535 - 11904: 0xDABB, + 30538 - 11904: 0xDABF, + 30539 - 11904: 0xDAC1, + 30540 - 11904: 0xDAC2, + 30541 - 11904: 0xDABD, + 30542 - 11904: 0xDAC0, + 30543 - 11904: 0xB574, + 30546 - 11904: 0xDEDB, + 30548 - 11904: 0xDEE0, + 30549 - 11904: 0xDED8, + 30550 - 11904: 0xDEDC, + 30552 - 11904: 0xFED6, + 30553 - 11904: 0xDEE1, + 30554 - 11904: 0xDEDD, + 30555 - 11904: 0xB7FA, + 30556 - 11904: 0xB843, + 30558 - 11904: 0xB7FD, + 30559 - 11904: 0xDED9, + 30560 - 11904: 0xDEDA, + 30561 - 11904: 0xBACE, + 30562 - 11904: 0xB846, + 30563 - 11904: 0xB7FE, + 30565 - 11904: 0xB844, + 30566 - 11904: 0xB7FC, + 30567 - 11904: 0xDEDF, + 30568 - 11904: 0xB845, + 30569 - 11904: 0xDEDE, + 30570 - 11904: 0xB841, + 30571 - 11904: 0xB7FB, + 30572 - 11904: 0xB842, + 30573 - 11904: 0xDEE2, + 30574 - 11904: 0xE2E6, + 30575 - 11904: 0xE2E8, + 30578 - 11904: 0x91E4, + 30583 - 11904: 0x8FC7, + 30584 - 11904: 0x94AE, + 30585 - 11904: 0xB840, + 30586 - 11904: 0x8A4F, + 30587 - 11904: 0x94B2, + 30588 - 11904: 0xE2E3, + 30589 - 11904: 0xBACC, + 30590 - 11904: 0xE2E9, + 30591 - 11904: 0xBACD, + 30592 - 11904: 0xE2E7, + 30593 - 11904: 0xE2E2, + 30594 - 11904: 0xE2E5, + 30595 - 11904: 0xE2EA, + 30596 - 11904: 0xBACB, + 30597 - 11904: 0xE2E4, + 30599 - 11904: 0xBD4E, + 30600 - 11904: 0xE6BF, + 30601 - 11904: 0xE6BE, + 30603 - 11904: 0xBD51, + 30604 - 11904: 0xBD4F, + 30605 - 11904: 0xE6BC, + 30606 - 11904: 0xBD4D, + 30607 - 11904: 0xE6BD, + 30609 - 11904: 0xBD50, + 30611 - 11904: 0x8FD4, + 30613 - 11904: 0xEA7D, + 30615 - 11904: 0xEAA1, + 30616 - 11904: 0x98EA, + 30617 - 11904: 0xEA7E, + 30618 - 11904: 0xEA76, + 30619 - 11904: 0xEA7A, + 30620 - 11904: 0xEA79, + 30621 - 11904: 0xEA77, + 30622 - 11904: 0xBF66, + 30623 - 11904: 0xBF67, + 30624 - 11904: 0xBF65, + 30625 - 11904: 0xEA78, + 30626 - 11904: 0xEA7B, + 30627 - 11904: 0xEA7C, + 30629 - 11904: 0xBF68, + 30631 - 11904: 0xC140, + 30632 - 11904: 0xEDA3, + 30634 - 11904: 0xC0FC, + 30635 - 11904: 0xED7B, + 30636 - 11904: 0xC0FE, + 30637 - 11904: 0xC141, + 30639 - 11904: 0xFED8, + 30640 - 11904: 0xC0FD, + 30641 - 11904: 0xEDA2, + 30642 - 11904: 0xED7C, + 30643 - 11904: 0xC0FB, + 30644 - 11904: 0xEDA1, + 30645 - 11904: 0xED7A, + 30646 - 11904: 0xED7E, + 30647 - 11904: 0xED7D, + 30649 - 11904: 0x9DE0, + 30650 - 11904: 0xF055, + 30651 - 11904: 0xC2A4, + 30652 - 11904: 0xC2A5, + 30653 - 11904: 0xC2A2, + 30654 - 11904: 0x98EE, + 30655 - 11904: 0xC2A3, + 30658 - 11904: 0xF054, + 30659 - 11904: 0x95C4, + 30660 - 11904: 0xF27B, + 30661 - 11904: 0xFCE8, + 30663 - 11904: 0xC3A9, + 30665 - 11904: 0xF279, + 30666 - 11904: 0xF27A, + 30667 - 11904: 0x98EF, + 30668 - 11904: 0xF474, + 30669 - 11904: 0xF477, + 30670 - 11904: 0xF475, + 30671 - 11904: 0xF476, + 30672 - 11904: 0xF5E0, + 30675 - 11904: 0xC4EF, + 30676 - 11904: 0xF7EB, + 30677 - 11904: 0xF8B4, + 30679 - 11904: 0xC5F7, + 30680 - 11904: 0xF8F8, + 30681 - 11904: 0xF8F9, + 30682 - 11904: 0xC666, + 30683 - 11904: 0xA5D9, + 30684 - 11904: 0xACE1, + 30685 - 11904: 0x8C6E, + 30686 - 11904: 0xDAC3, + 30688 - 11904: 0xDEE3, + 30690 - 11904: 0xA5DA, + 30691 - 11904: 0xA86F, + 30693 - 11904: 0xAABE, + 30694 - 11904: 0xFAD8, + 30695 - 11904: 0xCFE8, + 30696 - 11904: 0xCFE9, + 30697 - 11904: 0xAF78, + 30700 - 11904: 0xDAC4, + 30701 - 11904: 0xB575, + 30702 - 11904: 0xB847, + 30703 - 11904: 0xC142, + 30704 - 11904: 0xEDA4, + 30705 - 11904: 0xF27C, + 30706 - 11904: 0xF478, + 30707 - 11904: 0xA5DB, + 30708 - 11904: 0xFEDC, + 30711 - 11904: 0xCDA1, + 30712 - 11904: 0xCD7A, + 30713 - 11904: 0xCD7C, + 30714 - 11904: 0xCD7E, + 30715 - 11904: 0xCD7D, + 30716 - 11904: 0xCD7B, + 30717 - 11904: 0xAABF, + 30718 - 11904: 0xA0AE, + 30722 - 11904: 0xACE2, + 30723 - 11904: 0xCFF2, + 30725 - 11904: 0xCFED, + 30726 - 11904: 0xCFEA, + 30728 - 11904: 0x9D4C, + 30729 - 11904: 0xFEDD, + 30732 - 11904: 0xACE4, + 30733 - 11904: 0xACE5, + 30734 - 11904: 0xCFF0, + 30735 - 11904: 0xCFEF, + 30736 - 11904: 0xCFEE, + 30737 - 11904: 0xCFEB, + 30738 - 11904: 0xCFEC, + 30739 - 11904: 0xCFF3, + 30740 - 11904: 0xACE3, + 30744 - 11904: 0x98F1, + 30748 - 11904: 0x98F3, + 30749 - 11904: 0xAF7C, + 30750 - 11904: 0x94C1, + 30751 - 11904: 0xAFA4, + 30752 - 11904: 0xAFA3, + 30753 - 11904: 0xD2E1, + 30754 - 11904: 0xD2DB, + 30755 - 11904: 0xD2D9, + 30757 - 11904: 0xAFA1, + 30758 - 11904: 0xD6B9, + 30759 - 11904: 0xAF7A, + 30760 - 11904: 0xD2DE, + 30761 - 11904: 0xD2E2, + 30762 - 11904: 0xD2E4, + 30763 - 11904: 0xD2E0, + 30764 - 11904: 0xD2DA, + 30765 - 11904: 0xAFA2, + 30766 - 11904: 0xD2DF, + 30767 - 11904: 0xD2DD, + 30768 - 11904: 0xAF79, + 30769 - 11904: 0xD2E5, + 30770 - 11904: 0xAFA5, + 30771 - 11904: 0xD2E3, + 30772 - 11904: 0xAF7D, + 30773 - 11904: 0xD2DC, + 30775 - 11904: 0xAF7E, + 30776 - 11904: 0xAF7B, + 30777 - 11904: 0x98F5, + 30780 - 11904: 0xFA4F, + 30781 - 11904: 0x96E2, + 30786 - 11904: 0x9450, + 30787 - 11904: 0xB2B9, + 30788 - 11904: 0x96A2, + 30789 - 11904: 0xD6BA, + 30791 - 11904: 0x98F6, + 30792 - 11904: 0xD6B3, + 30793 - 11904: 0xD6B5, + 30794 - 11904: 0xD6B7, + 30795 - 11904: 0x96E5, + 30796 - 11904: 0xD6B8, + 30797 - 11904: 0xD6B6, + 30798 - 11904: 0xB2BA, + 30800 - 11904: 0xD6BB, + 30801 - 11904: 0x98F7, + 30802 - 11904: 0xD6B4, + 30803 - 11904: 0xA046, + 30804 - 11904: 0x96E3, + 30812 - 11904: 0xDAC8, + 30813 - 11904: 0xB576, + 30814 - 11904: 0xDAD0, + 30816 - 11904: 0xDAC5, + 30818 - 11904: 0xDAD1, + 30820 - 11904: 0xDAC6, + 30821 - 11904: 0xDAC7, + 30822 - 11904: 0x98F8, + 30824 - 11904: 0xDACF, + 30825 - 11904: 0xDACE, + 30826 - 11904: 0xDACB, + 30827 - 11904: 0xB2B8, + 30828 - 11904: 0xB577, + 30829 - 11904: 0xDAC9, + 30830 - 11904: 0xDACC, + 30831 - 11904: 0xB578, + 30832 - 11904: 0xDACD, + 30833 - 11904: 0xDACA, + 30841 - 11904: 0xDEEE, + 30842 - 11904: 0x9EE4, + 30843 - 11904: 0xDEF2, + 30844 - 11904: 0xB84E, + 30846 - 11904: 0xE2F0, + 30847 - 11904: 0xB851, + 30848 - 11904: 0xDEF0, + 30849 - 11904: 0xF9D6, + 30851 - 11904: 0xDEED, + 30852 - 11904: 0xDEE8, + 30853 - 11904: 0xDEEA, + 30854 - 11904: 0xDEEB, + 30855 - 11904: 0xDEE4, + 30856 - 11904: 0x94C3, + 30857 - 11904: 0xB84D, + 30860 - 11904: 0xB84C, + 30861 - 11904: 0x94C2, + 30862 - 11904: 0xB848, + 30863 - 11904: 0xDEE7, + 30865 - 11904: 0xB84F, + 30867 - 11904: 0xB850, + 30868 - 11904: 0xDEE6, + 30869 - 11904: 0xDEE9, + 30870 - 11904: 0xDEF1, + 30871 - 11904: 0xB84A, + 30872 - 11904: 0xB84B, + 30873 - 11904: 0xDEEF, + 30874 - 11904: 0xDEE5, + 30878 - 11904: 0xE2F2, + 30879 - 11904: 0xBAD0, + 30880 - 11904: 0xE2F4, + 30881 - 11904: 0xDEEC, + 30882 - 11904: 0xE2F6, + 30883 - 11904: 0xBAD4, + 30884 - 11904: 0xE2F7, + 30885 - 11904: 0xE2F3, + 30887 - 11904: 0xBAD1, + 30888 - 11904: 0xE2EF, + 30889 - 11904: 0xBAD3, + 30890 - 11904: 0xE2EC, + 30891 - 11904: 0xE2F1, + 30892 - 11904: 0xE2F5, + 30893 - 11904: 0xE2EE, + 30895 - 11904: 0xFEE1, + 30896 - 11904: 0xB849, + 30897 - 11904: 0xFEE9, + 30898 - 11904: 0xE2EB, + 30899 - 11904: 0xBAD2, + 30900 - 11904: 0xE2ED, + 30902 - 11904: 0x96E4, + 30904 - 11904: 0x89AC, + 30905 - 11904: 0x96DB, + 30906 - 11904: 0xBD54, + 30907 - 11904: 0xE6C1, + 30908 - 11904: 0xBD58, + 30910 - 11904: 0xBD56, + 30913 - 11904: 0xBACF, + 30915 - 11904: 0xE6C8, + 30916 - 11904: 0xE6C9, + 30917 - 11904: 0xBD53, + 30919 - 11904: 0xFEE2, + 30920 - 11904: 0xE6C7, + 30921 - 11904: 0xE6CA, + 30922 - 11904: 0xBD55, + 30923 - 11904: 0xBD52, + 30924 - 11904: 0xE6C3, + 30925 - 11904: 0xE6C0, + 30926 - 11904: 0xE6C5, + 30927 - 11904: 0xE6C2, + 30928 - 11904: 0xBD59, + 30929 - 11904: 0xE6C4, + 30930 - 11904: 0x94C4, + 30931 - 11904: 0xFEE3, + 30932 - 11904: 0xE6C6, + 30933 - 11904: 0xBD57, + 30935 - 11904: 0xFEE7, + 30936 - 11904: 0x9FFB, + 30938 - 11904: 0xBF6A, + 30939 - 11904: 0xEAA8, + 30941 - 11904: 0xEAA2, + 30942 - 11904: 0xEAA6, + 30943 - 11904: 0xEAAC, + 30944 - 11904: 0xEAAD, + 30945 - 11904: 0xEAA9, + 30946 - 11904: 0xEAAA, + 30947 - 11904: 0xEAA7, + 30948 - 11904: 0x8C59, + 30949 - 11904: 0xEAA4, + 30951 - 11904: 0xBF6C, + 30952 - 11904: 0xBF69, + 30953 - 11904: 0xEAA3, + 30954 - 11904: 0xEAA5, + 30956 - 11904: 0xBF6B, + 30957 - 11904: 0xEAAB, + 30958 - 11904: 0x93C9, + 30959 - 11904: 0xC146, + 30960 - 11904: 0x94E8, + 30961 - 11904: 0xFB56, + 30962 - 11904: 0xEDAA, + 30963 - 11904: 0xEDA5, + 30964 - 11904: 0xC145, + 30965 - 11904: 0x90C5, + 30967 - 11904: 0xC143, + 30969 - 11904: 0xEDAC, + 30970 - 11904: 0xC144, + 30971 - 11904: 0xEDA8, + 30972 - 11904: 0xEDA9, + 30973 - 11904: 0xEDA6, + 30974 - 11904: 0xEDAD, + 30975 - 11904: 0xF056, + 30977 - 11904: 0xC147, + 30978 - 11904: 0xEDA7, + 30980 - 11904: 0xEDAE, + 30981 - 11904: 0xEDAB, + 30982 - 11904: 0xA0A8, + 30985 - 11904: 0xF05A, + 30988 - 11904: 0xF057, + 30990 - 11904: 0xC2A6, + 30992 - 11904: 0xF05B, + 30993 - 11904: 0xF05D, + 30994 - 11904: 0xF05C, + 30995 - 11904: 0xF058, + 30996 - 11904: 0xF059, + 30999 - 11904: 0xF2A3, + 31001 - 11904: 0xC3AA, + 31003 - 11904: 0xF27E, + 31004 - 11904: 0xF2A2, + 31005 - 11904: 0xF27D, + 31006 - 11904: 0xF2A4, + 31009 - 11904: 0xF2A1, + 31011 - 11904: 0xF47A, + 31012 - 11904: 0xF47D, + 31013 - 11904: 0xF479, + 31014 - 11904: 0xC471, + 31015 - 11904: 0xF47B, + 31016 - 11904: 0xF47C, + 31017 - 11904: 0xF47E, + 31018 - 11904: 0xC472, + 31019 - 11904: 0xC474, + 31020 - 11904: 0xC473, + 31021 - 11904: 0xF5E1, + 31022 - 11904: 0xFEE5, + 31023 - 11904: 0xF5E3, + 31025 - 11904: 0xF5E2, + 31026 - 11904: 0x98FD, + 31027 - 11904: 0x98FB, + 31028 - 11904: 0xFEE8, + 31029 - 11904: 0xF6F6, + 31030 - 11904: 0x8EBF, + 31032 - 11904: 0xF8B5, + 31033 - 11904: 0xF8FA, + 31034 - 11904: 0xA5DC, + 31035 - 11904: 0x8BD8, + 31036 - 11904: 0xFEF7, + 31037 - 11904: 0xCB72, + 31038 - 11904: 0xAAC0, + 31039 - 11904: 0xCDA3, + 31040 - 11904: 0xAAC1, + 31041 - 11904: 0xAAC2, + 31042 - 11904: 0xCDA2, + 31044 - 11904: 0xCFF8, + 31045 - 11904: 0xCFF7, + 31046 - 11904: 0xACE6, + 31047 - 11904: 0xACE9, + 31048 - 11904: 0xACE8, + 31049 - 11904: 0xACE7, + 31050 - 11904: 0xCFF4, + 31051 - 11904: 0xCFF6, + 31052 - 11904: 0xCFF5, + 31055 - 11904: 0xD2E8, + 31056 - 11904: 0xAFA7, + 31057 - 11904: 0xD2EC, + 31058 - 11904: 0xD2EB, + 31059 - 11904: 0xD2EA, + 31060 - 11904: 0xD2E6, + 31061 - 11904: 0xAFA6, + 31062 - 11904: 0xAFAA, + 31063 - 11904: 0xAFAD, + 31064 - 11904: 0x8F68, + 31065 - 11904: 0x94C6, + 31066 - 11904: 0xAFAE, + 31067 - 11904: 0xD2E7, + 31068 - 11904: 0xD2E9, + 31069 - 11904: 0xAFAC, + 31070 - 11904: 0xAFAB, + 31071 - 11904: 0xAFA9, + 31072 - 11904: 0xAFA8, + 31073 - 11904: 0xD6C2, + 31074 - 11904: 0x9DEA, + 31075 - 11904: 0xD6C0, + 31076 - 11904: 0xD6BC, + 31077 - 11904: 0xB2BB, + 31079 - 11904: 0xD6BD, + 31080 - 11904: 0xB2BC, + 31081 - 11904: 0xD6BE, + 31082 - 11904: 0xD6BF, + 31083 - 11904: 0xD6C1, + 31085 - 11904: 0xB2BD, + 31088 - 11904: 0xDAD5, + 31089 - 11904: 0xFC69, + 31090 - 11904: 0xDAD4, + 31091 - 11904: 0xDAD3, + 31092 - 11904: 0xDAD2, + 31097 - 11904: 0xDEF6, + 31098 - 11904: 0xB852, + 31100 - 11904: 0xDEF3, + 31101 - 11904: 0xDEF5, + 31102 - 11904: 0x9CDA, + 31103 - 11904: 0xB853, + 31104 - 11904: 0xFEF3, + 31105 - 11904: 0xB854, + 31106 - 11904: 0xDEF4, + 31107 - 11904: 0x9C72, + 31110 - 11904: 0xFEF0, + 31111 - 11904: 0x89C9, + 31112 - 11904: 0xE341, + 31114 - 11904: 0xE2F9, + 31115 - 11904: 0xE2FA, + 31117 - 11904: 0xBAD7, + 31118 - 11904: 0xBAD5, + 31119 - 11904: 0xBAD6, + 31120 - 11904: 0xE343, + 31121 - 11904: 0x9941, + 31122 - 11904: 0xE342, + 31123 - 11904: 0xE2FE, + 31124 - 11904: 0xE2FD, + 31125 - 11904: 0xE2FC, + 31126 - 11904: 0xE2FB, + 31127 - 11904: 0xE340, + 31128 - 11904: 0xE2F8, + 31129 - 11904: 0x9942, + 31130 - 11904: 0xE6CB, + 31131 - 11904: 0xE6D0, + 31132 - 11904: 0xE6CE, + 31133 - 11904: 0xFEF5, + 31135 - 11904: 0x91D7, + 31136 - 11904: 0xE6CD, + 31137 - 11904: 0xE6CC, + 31138 - 11904: 0xE6CF, + 31140 - 11904: 0xEAAE, + 31141 - 11904: 0x94CC, + 31142 - 11904: 0xBF6D, + 31143 - 11904: 0xC148, + 31144 - 11904: 0xEDB0, + 31145 - 11904: 0xFEF8, + 31146 - 11904: 0xC149, + 31147 - 11904: 0xEDAF, + 31148 - 11904: 0xF05F, + 31149 - 11904: 0xF05E, + 31150 - 11904: 0xC2A7, + 31152 - 11904: 0xF2A5, + 31153 - 11904: 0xC3AB, + 31154 - 11904: 0xF4A1, + 31155 - 11904: 0xC5A1, + 31156 - 11904: 0xF6F7, + 31158 - 11904: 0xF8B7, + 31159 - 11904: 0xF8B6, + 31160 - 11904: 0xC9A8, + 31161 - 11904: 0xACEA, + 31162 - 11904: 0xACEB, + 31163 - 11904: 0xD6C3, + 31165 - 11904: 0xB856, + 31166 - 11904: 0xA5DD, + 31167 - 11904: 0xA872, + 31168 - 11904: 0xA871, + 31169 - 11904: 0xA870, + 31172 - 11904: 0x97A8, + 31173 - 11904: 0xCDA4, + 31174 - 11904: 0xFEFC, + 31176 - 11904: 0xAAC4, + 31177 - 11904: 0xAAC3, + 31178 - 11904: 0x8CDE, + 31179 - 11904: 0xACEE, + 31180 - 11904: 0xFDBF, + 31181 - 11904: 0xCFFA, + 31182 - 11904: 0xCFFD, + 31183 - 11904: 0xCFFB, + 31184 - 11904: 0x87B3, + 31185 - 11904: 0xACEC, + 31186 - 11904: 0xACED, + 31188 - 11904: 0xFEFE, + 31189 - 11904: 0xCFF9, + 31190 - 11904: 0xCFFC, + 31192 - 11904: 0xAFB5, + 31196 - 11904: 0xD2F3, + 31197 - 11904: 0xD2F5, + 31198 - 11904: 0xD2F4, + 31199 - 11904: 0xAFB2, + 31200 - 11904: 0xD2EF, + 31202 - 11904: 0x96D1, + 31203 - 11904: 0xAFB0, + 31204 - 11904: 0xAFAF, + 31206 - 11904: 0xAFB3, + 31207 - 11904: 0xAFB1, + 31209 - 11904: 0xAFB4, + 31210 - 11904: 0xD2F2, + 31211 - 11904: 0xD2ED, + 31212 - 11904: 0xD2EE, + 31213 - 11904: 0xD2F1, + 31214 - 11904: 0xD2F0, + 31217 - 11904: 0x94D5, + 31220 - 11904: 0x94D0, + 31222 - 11904: 0xD6C6, + 31223 - 11904: 0xD6C7, + 31224 - 11904: 0xD6C5, + 31226 - 11904: 0xD6C4, + 31227 - 11904: 0xB2BE, + 31232 - 11904: 0xB57D, + 31234 - 11904: 0xDAD6, + 31235 - 11904: 0xDAD8, + 31236 - 11904: 0xDADA, + 31237 - 11904: 0xB57C, + 31238 - 11904: 0x9944, + 31240 - 11904: 0xB57A, + 31242 - 11904: 0xDAD7, + 31243 - 11904: 0xB57B, + 31244 - 11904: 0xDAD9, + 31245 - 11904: 0xB579, + 31248 - 11904: 0xDF41, + 31249 - 11904: 0xDEF7, + 31250 - 11904: 0xDEFA, + 31251 - 11904: 0xDEFE, + 31252 - 11904: 0xB85A, + 31253 - 11904: 0xDEFC, + 31255 - 11904: 0xDEFB, + 31256 - 11904: 0xDEF8, + 31257 - 11904: 0xDEF9, + 31258 - 11904: 0xB858, + 31259 - 11904: 0xDF40, + 31260 - 11904: 0xB857, + 31262 - 11904: 0xB85C, + 31263 - 11904: 0xB85B, + 31264 - 11904: 0xB859, + 31266 - 11904: 0xDEFD, + 31270 - 11904: 0xE349, + 31272 - 11904: 0xE348, + 31274 - 11904: 0x8C63, + 31275 - 11904: 0xE344, + 31276 - 11904: 0x87BB, + 31277 - 11904: 0xA0B3, + 31278 - 11904: 0xBAD8, + 31279 - 11904: 0xE347, + 31280 - 11904: 0xE346, + 31281 - 11904: 0xBAD9, + 31282 - 11904: 0x87B4, + 31287 - 11904: 0xBD5E, + 31289 - 11904: 0xE6D2, + 31290 - 11904: 0x94CF, + 31291 - 11904: 0xBD5F, + 31292 - 11904: 0xBD5B, + 31293 - 11904: 0xBD5D, + 31294 - 11904: 0x9FFA, + 31295 - 11904: 0xBD5A, + 31296 - 11904: 0xBD5C, + 31299 - 11904: 0x91E5, + 31300 - 11904: 0xEAAF, + 31301 - 11904: 0x9C6A, + 31302 - 11904: 0xBF70, + 31303 - 11904: 0xEAB1, + 31304 - 11904: 0xEAB0, + 31305 - 11904: 0x8E49, + 31306 - 11904: 0xE345, + 31307 - 11904: 0xBF72, + 31308 - 11904: 0xBF71, + 31309 - 11904: 0xBF6E, + 31310 - 11904: 0xBF6F, + 31316 - 11904: 0xEDB5, + 31318 - 11904: 0xEDB3, + 31319 - 11904: 0xC14A, + 31320 - 11904: 0xEDB4, + 31322 - 11904: 0xEDB6, + 31323 - 11904: 0xEDB2, + 31324 - 11904: 0xEDB1, + 31327 - 11904: 0xF060, + 31328 - 11904: 0xC2AA, + 31329 - 11904: 0xC2A8, + 31330 - 11904: 0xC2A9, + 31333 - 11904: 0x8E4C, + 31335 - 11904: 0xF2A6, + 31336 - 11904: 0xF2A7, + 31337 - 11904: 0xC3AD, + 31339 - 11904: 0xC3AC, + 31340 - 11904: 0xF4A3, + 31341 - 11904: 0xF4A4, + 31342 - 11904: 0xF4A2, + 31344 - 11904: 0xF6F8, + 31345 - 11904: 0xF6F9, + 31346 - 11904: 0x87C9, + 31348 - 11904: 0xA5DE, + 31349 - 11904: 0xCA48, + 31350 - 11904: 0xA873, + 31352 - 11904: 0xCDA5, + 31353 - 11904: 0xAAC6, + 31354 - 11904: 0xAAC5, + 31355 - 11904: 0xCDA6, + 31357 - 11904: 0x8E4D, + 31358 - 11904: 0xD040, + 31359 - 11904: 0xACEF, + 31360 - 11904: 0xCFFE, + 31361 - 11904: 0xACF0, + 31363 - 11904: 0x9A73, + 31364 - 11904: 0xAFB6, + 31365 - 11904: 0xD2F8, + 31366 - 11904: 0xD2F6, + 31367 - 11904: 0xD2FC, + 31368 - 11904: 0xAFB7, + 31369 - 11904: 0xD2F7, + 31370 - 11904: 0xD2FB, + 31371 - 11904: 0xD2F9, + 31372 - 11904: 0xD2FA, + 31375 - 11904: 0xD6C8, + 31376 - 11904: 0xD6CA, + 31377 - 11904: 0x9947, + 31378 - 11904: 0xB2BF, + 31379 - 11904: 0x8CB1, + 31380 - 11904: 0xD6C9, + 31381 - 11904: 0xB2C0, + 31382 - 11904: 0xB5A2, + 31383 - 11904: 0xB5A1, + 31384 - 11904: 0xB57E, + 31385 - 11904: 0xDADB, + 31390 - 11904: 0xDF44, + 31391 - 11904: 0xB85D, + 31392 - 11904: 0xB85E, + 31394 - 11904: 0xDF43, + 31395 - 11904: 0xDF42, + 31400 - 11904: 0xE34A, + 31401 - 11904: 0xBADB, + 31402 - 11904: 0xBADA, + 31403 - 11904: 0xE34B, + 31404 - 11904: 0xE34C, + 31406 - 11904: 0xBD61, + 31407 - 11904: 0xBD60, + 31408 - 11904: 0x8E50, + 31409 - 11904: 0xEAB5, + 31410 - 11904: 0xE6D3, + 31411 - 11904: 0xE6D5, + 31412 - 11904: 0xE6D4, + 31413 - 11904: 0xEAB4, + 31414 - 11904: 0xEAB2, + 31415 - 11904: 0xEAB6, + 31416 - 11904: 0xEAB3, + 31418 - 11904: 0xBF73, + 31419 - 11904: 0x8E4F, + 31420 - 11904: 0x9949, + 31422 - 11904: 0xEDB7, + 31423 - 11904: 0xC14B, + 31424 - 11904: 0xEDB8, + 31425 - 11904: 0xEDB9, + 31426 - 11904: 0x8E51, + 31427 - 11904: 0x8E52, + 31428 - 11904: 0xC2AB, + 31429 - 11904: 0xC2AC, + 31431 - 11904: 0xC475, + 31432 - 11904: 0x9AB2, + 31433 - 11904: 0x89A5, + 31434 - 11904: 0xC5D1, + 31435 - 11904: 0xA5DF, + 31439 - 11904: 0x994C, + 31441 - 11904: 0xD041, + 31443 - 11904: 0x9FF8, + 31448 - 11904: 0xD2FD, + 31449 - 11904: 0xAFB8, + 31450 - 11904: 0x8E56, + 31451 - 11904: 0x994D, + 31452 - 11904: 0x91CA, + 31453 - 11904: 0x8E57, + 31455 - 11904: 0xB3BA, + 31456 - 11904: 0xB3B9, + 31458 - 11904: 0x94E1, + 31459 - 11904: 0xB5A4, + 31460 - 11904: 0xDADD, + 31461 - 11904: 0xB5A3, + 31462 - 11904: 0xDADC, + 31463 - 11904: 0x9047, + 31465 - 11904: 0x8FD8, + 31466 - 11904: 0x8E58, + 31467 - 11904: 0xDF45, + 31469 - 11904: 0xBADC, + 31470 - 11904: 0xE34D, + 31471 - 11904: 0xBADD, + 31478 - 11904: 0xC476, + 31479 - 11904: 0xF4A5, + 31481 - 11904: 0xA6CB, + 31482 - 11904: 0xAAC7, + 31483 - 11904: 0xCDA7, + 31484 - 11904: 0x87A3, + 31485 - 11904: 0xACF2, + 31486 - 11904: 0x94EB, + 31487 - 11904: 0xACF1, + 31488 - 11904: 0xD042, + 31489 - 11904: 0xD043, + 31492 - 11904: 0xD340, + 31493 - 11904: 0xD342, + 31494 - 11904: 0xAFB9, + 31496 - 11904: 0xD344, + 31497 - 11904: 0xD347, + 31498 - 11904: 0xD345, + 31499 - 11904: 0x8E5C, + 31500 - 11904: 0x9553, + 31502 - 11904: 0xD346, + 31503 - 11904: 0xD343, + 31504 - 11904: 0xD2FE, + 31505 - 11904: 0xAFBA, + 31506 - 11904: 0xD348, + 31507 - 11904: 0xD341, + 31508 - 11904: 0x9FE5, + 31512 - 11904: 0xD6D3, + 31513 - 11904: 0xB2C6, + 31514 - 11904: 0xD6DC, + 31515 - 11904: 0xB2C3, + 31517 - 11904: 0xD6D5, + 31518 - 11904: 0xB2C7, + 31519 - 11904: 0x9F56, + 31520 - 11904: 0xB2C1, + 31522 - 11904: 0xD6D0, + 31523 - 11904: 0xD6DD, + 31524 - 11904: 0xD6D1, + 31525 - 11904: 0xD6CE, + 31526 - 11904: 0xB2C5, + 31527 - 11904: 0x954F, + 31528 - 11904: 0xB2C2, + 31529 - 11904: 0x8E5E, + 31530 - 11904: 0xD6D4, + 31531 - 11904: 0xD6D7, + 31532 - 11904: 0xB2C4, + 31533 - 11904: 0xD6D8, + 31534 - 11904: 0xB2C8, + 31535 - 11904: 0xD6D9, + 31536 - 11904: 0xD6CF, + 31537 - 11904: 0xD6D6, + 31538 - 11904: 0xD6DA, + 31539 - 11904: 0xD6D2, + 31540 - 11904: 0xD6CD, + 31541 - 11904: 0xD6CB, + 31544 - 11904: 0xD6DB, + 31545 - 11904: 0x996A, + 31547 - 11904: 0xDADF, + 31552 - 11904: 0xDAE4, + 31554 - 11904: 0x9C64, + 31555 - 11904: 0x9CD9, + 31556 - 11904: 0xDAE0, + 31557 - 11904: 0xDAE6, + 31558 - 11904: 0xB5A7, + 31559 - 11904: 0xD6CC, + 31560 - 11904: 0xDAE1, + 31561 - 11904: 0xB5A5, + 31562 - 11904: 0xDADE, + 31563 - 11904: 0xB5AC, + 31564 - 11904: 0xDAE2, + 31565 - 11904: 0xB5AB, + 31566 - 11904: 0xDAE3, + 31567 - 11904: 0xB5AD, + 31568 - 11904: 0xB5A8, + 31569 - 11904: 0xB5AE, + 31570 - 11904: 0xB5A9, + 31572 - 11904: 0xB5AA, + 31573 - 11904: 0x8E5D, + 31574 - 11904: 0xB5A6, + 31576 - 11904: 0xDAE5, + 31584 - 11904: 0xB861, + 31585 - 11904: 0xDF50, + 31586 - 11904: 0x9950, + 31587 - 11904: 0xDF53, + 31588 - 11904: 0xDF47, + 31589 - 11904: 0xDF4C, + 31590 - 11904: 0xDF46, + 31591 - 11904: 0xB863, + 31593 - 11904: 0xDF4A, + 31596 - 11904: 0x9951, + 31597 - 11904: 0xDF48, + 31598 - 11904: 0xB862, + 31599 - 11904: 0x8E62, + 31600 - 11904: 0xDF4F, + 31601 - 11904: 0xDF4E, + 31602 - 11904: 0xDF4B, + 31603 - 11904: 0xDF4D, + 31604 - 11904: 0xDF49, + 31605 - 11904: 0xBAE1, + 31606 - 11904: 0xDF52, + 31607 - 11904: 0xB85F, + 31608 - 11904: 0xDF51, + 31611 - 11904: 0x9952, + 31618 - 11904: 0xE35D, + 31620 - 11904: 0xBAE8, + 31621 - 11904: 0xE358, + 31623 - 11904: 0xBAE7, + 31624 - 11904: 0xE34E, + 31626 - 11904: 0xE350, + 31627 - 11904: 0xBAE0, + 31628 - 11904: 0xE355, + 31629 - 11904: 0xE354, + 31630 - 11904: 0xE357, + 31631 - 11904: 0xBAE5, + 31632 - 11904: 0xE352, + 31633 - 11904: 0xE351, + 31634 - 11904: 0x8E68, + 31636 - 11904: 0xBAE4, + 31637 - 11904: 0xBADF, + 31638 - 11904: 0xE353, + 31639 - 11904: 0xBAE2, + 31640 - 11904: 0xE359, + 31641 - 11904: 0xE35B, + 31643 - 11904: 0xE356, + 31644 - 11904: 0xE34F, + 31645 - 11904: 0xBAE3, + 31648 - 11904: 0xBD69, + 31649 - 11904: 0xBADE, + 31650 - 11904: 0x8E61, + 31651 - 11904: 0x9F59, + 31652 - 11904: 0xE35C, + 31660 - 11904: 0xE6D9, + 31661 - 11904: 0xBD62, + 31662 - 11904: 0x87D0, + 31663 - 11904: 0xE6DB, + 31665 - 11904: 0xBD63, + 31666 - 11904: 0x8BB3, + 31668 - 11904: 0xBD65, + 31669 - 11904: 0xE6DE, + 31671 - 11904: 0xE6D6, + 31672 - 11904: 0xBAE6, + 31673 - 11904: 0xE6DC, + 31678 - 11904: 0xE6D8, + 31680 - 11904: 0xB860, + 31681 - 11904: 0xBD68, + 31684 - 11904: 0xBD64, + 31685 - 11904: 0x87B9, + 31686 - 11904: 0xBD66, + 31687 - 11904: 0xBD67, + 31689 - 11904: 0xBF76, + 31690 - 11904: 0xE6DD, + 31691 - 11904: 0xE6D7, + 31692 - 11904: 0xBD6A, + 31694 - 11904: 0xE6DA, + 31695 - 11904: 0x9F5D, + 31696 - 11904: 0x8E66, + 31700 - 11904: 0xEAC0, + 31701 - 11904: 0xEABB, + 31704 - 11904: 0xEAC5, + 31705 - 11904: 0xBF74, + 31706 - 11904: 0xEABD, + 31707 - 11904: 0xBF78, + 31708 - 11904: 0xEAC3, + 31709 - 11904: 0xEABA, + 31710 - 11904: 0xEAB7, + 31711 - 11904: 0xEAC6, + 31712 - 11904: 0xC151, + 31713 - 11904: 0xBF79, + 31714 - 11904: 0xEAC2, + 31715 - 11904: 0xEAB8, + 31716 - 11904: 0xBF77, + 31717 - 11904: 0xEABC, + 31718 - 11904: 0xBF7B, + 31719 - 11904: 0xEAB9, + 31720 - 11904: 0xEABE, + 31721 - 11904: 0xBF7A, + 31722 - 11904: 0xEAC1, + 31723 - 11904: 0xEAC4, + 31724 - 11904: 0x8CB2, + 31728 - 11904: 0xEDCB, + 31729 - 11904: 0xEDCC, + 31730 - 11904: 0xEDBC, + 31731 - 11904: 0xEDC3, + 31732 - 11904: 0xEDC1, + 31735 - 11904: 0xC14F, + 31736 - 11904: 0xEDC8, + 31737 - 11904: 0xEABF, + 31738 - 11904: 0x8E6E, + 31739 - 11904: 0xEDBF, + 31740 - 11904: 0x9F64, + 31741 - 11904: 0xEDC9, + 31742 - 11904: 0xC14E, + 31743 - 11904: 0xEDBE, + 31744 - 11904: 0xEDBD, + 31745 - 11904: 0xEDC7, + 31746 - 11904: 0xEDC4, + 31747 - 11904: 0xEDC6, + 31749 - 11904: 0xEDBA, + 31750 - 11904: 0xEDCA, + 31751 - 11904: 0xC14C, + 31753 - 11904: 0xEDC5, + 31754 - 11904: 0xEDCE, + 31755 - 11904: 0xEDC2, + 31756 - 11904: 0xC150, + 31757 - 11904: 0xC14D, + 31758 - 11904: 0xEDC0, + 31759 - 11904: 0xEDBB, + 31760 - 11904: 0xEDCD, + 31761 - 11904: 0xBF75, + 31762 - 11904: 0x9953, + 31765 - 11904: 0xFAB8, + 31769 - 11904: 0xF063, + 31771 - 11904: 0x9954, + 31772 - 11904: 0xF061, + 31773 - 11904: 0xF067, + 31774 - 11904: 0xC2B0, + 31775 - 11904: 0xF065, + 31776 - 11904: 0xF064, + 31777 - 11904: 0xC2B2, + 31778 - 11904: 0xF06A, + 31779 - 11904: 0xC2B1, + 31781 - 11904: 0xF06B, + 31782 - 11904: 0xF068, + 31783 - 11904: 0xC2AE, + 31784 - 11904: 0xF069, + 31785 - 11904: 0xF062, + 31786 - 11904: 0xC2AF, + 31787 - 11904: 0xC2AD, + 31788 - 11904: 0xF2AB, + 31789 - 11904: 0xF066, + 31792 - 11904: 0xF06C, + 31795 - 11904: 0xF2A8, + 31797 - 11904: 0x8E70, + 31799 - 11904: 0xC3B2, + 31800 - 11904: 0xC3B0, + 31801 - 11904: 0xF2AA, + 31803 - 11904: 0xF2AC, + 31804 - 11904: 0xF2A9, + 31805 - 11904: 0xC3B1, + 31806 - 11904: 0xC3AE, + 31807 - 11904: 0xC3AF, + 31808 - 11904: 0xC3B3, + 31810 - 11904: 0x9F61, + 31811 - 11904: 0xC478, + 31812 - 11904: 0x8E72, + 31813 - 11904: 0xF4AA, + 31815 - 11904: 0xF4A9, + 31816 - 11904: 0xF4A7, + 31817 - 11904: 0xF4A6, + 31818 - 11904: 0xF4A8, + 31820 - 11904: 0xC477, + 31821 - 11904: 0xC479, + 31824 - 11904: 0xC4F0, + 31825 - 11904: 0xA06B, + 31827 - 11904: 0xF5E5, + 31828 - 11904: 0xF5E4, + 31830 - 11904: 0x9F40, + 31831 - 11904: 0xF6FA, + 31833 - 11904: 0xF6FC, + 31834 - 11904: 0xF6FE, + 31835 - 11904: 0xF6FD, + 31836 - 11904: 0xF6FB, + 31837 - 11904: 0x94ED, + 31839 - 11904: 0xC5A3, + 31840 - 11904: 0xC5A2, + 31843 - 11904: 0xC5D3, + 31844 - 11904: 0xC5D2, + 31845 - 11904: 0xC5D4, + 31846 - 11904: 0xF7ED, + 31847 - 11904: 0xF7EC, + 31849 - 11904: 0xF8FB, + 31850 - 11904: 0xF8B8, + 31851 - 11904: 0xF8FC, + 31852 - 11904: 0xC658, + 31853 - 11904: 0x94EE, + 31854 - 11904: 0xC659, + 31855 - 11904: 0xF96D, + 31856 - 11904: 0x9FBD, + 31858 - 11904: 0xC67E, + 31859 - 11904: 0xA6CC, + 31860 - 11904: 0x8E7B, + 31861 - 11904: 0xCDA8, + 31864 - 11904: 0xD045, + 31865 - 11904: 0xD046, + 31866 - 11904: 0xD044, + 31867 - 11904: 0x9957, + 31868 - 11904: 0x94F7, + 31869 - 11904: 0xACF3, + 31870 - 11904: 0x9F5F, + 31871 - 11904: 0xD047, + 31872 - 11904: 0xD048, + 31873 - 11904: 0xD049, + 31875 - 11904: 0x8E73, + 31876 - 11904: 0xD349, + 31877 - 11904: 0xD34F, + 31878 - 11904: 0x9F62, + 31880 - 11904: 0xD34D, + 31881 - 11904: 0xAFBB, + 31882 - 11904: 0xD34B, + 31884 - 11904: 0xD34C, + 31885 - 11904: 0xD34E, + 31886 - 11904: 0x94F6, + 31889 - 11904: 0xD34A, + 31890 - 11904: 0xB2C9, + 31892 - 11904: 0xD6DE, + 31893 - 11904: 0xB2CB, + 31894 - 11904: 0xD6E0, + 31895 - 11904: 0xB2CA, + 31896 - 11904: 0xD6DF, + 31900 - 11904: 0x9958, + 31902 - 11904: 0xDAE8, + 31903 - 11904: 0xB5AF, + 31905 - 11904: 0xDAEA, + 31906 - 11904: 0xDAE7, + 31907 - 11904: 0xD6E1, + 31909 - 11904: 0xB5B0, + 31910 - 11904: 0x8E75, + 31911 - 11904: 0xF9DB, + 31912 - 11904: 0xDAE9, + 31916 - 11904: 0x9072, + 31918 - 11904: 0x94F8, + 31919 - 11904: 0xDF56, + 31921 - 11904: 0xB864, + 31922 - 11904: 0xDF54, + 31923 - 11904: 0xB865, + 31924 - 11904: 0xDF55, + 31925 - 11904: 0xB866, + 31928 - 11904: 0x995A, + 31929 - 11904: 0xBAE9, + 31930 - 11904: 0xE361, + 31931 - 11904: 0xE35E, + 31932 - 11904: 0xE360, + 31933 - 11904: 0xBAEA, + 31934 - 11904: 0xBAEB, + 31935 - 11904: 0xE35F, + 31938 - 11904: 0xA0B0, + 31939 - 11904: 0x8CB3, + 31941 - 11904: 0xE6DF, + 31943 - 11904: 0x8E79, + 31944 - 11904: 0xE6E0, + 31945 - 11904: 0x8E78, + 31946 - 11904: 0xBD6B, + 31947 - 11904: 0xE6E2, + 31948 - 11904: 0xE6E1, + 31949 - 11904: 0x94F3, + 31950 - 11904: 0xA261, + 31952 - 11904: 0xEACA, + 31953 - 11904: 0xEACB, + 31954 - 11904: 0xEAC7, + 31955 - 11904: 0x98AF, + 31956 - 11904: 0xEAC8, + 31957 - 11904: 0xBF7C, + 31958 - 11904: 0xBF7D, + 31959 - 11904: 0xEAC9, + 31961 - 11904: 0xC157, + 31962 - 11904: 0xA0B2, + 31964 - 11904: 0xC153, + 31965 - 11904: 0xC158, + 31966 - 11904: 0xC154, + 31967 - 11904: 0xC156, + 31968 - 11904: 0xC152, + 31970 - 11904: 0xC155, + 31974 - 11904: 0x8E7A, + 31975 - 11904: 0xC2B3, + 31976 - 11904: 0xEDCF, + 31978 - 11904: 0xF2AE, + 31980 - 11904: 0xF2AD, + 31981 - 11904: 0x995C, + 31982 - 11904: 0xF4AB, + 31983 - 11904: 0xC47A, + 31984 - 11904: 0xC47B, + 31985 - 11904: 0xF741, + 31986 - 11904: 0xF5E6, + 31987 - 11904: 0x8E7C, + 31988 - 11904: 0xF740, + 31989 - 11904: 0x8E7D, + 31990 - 11904: 0xF8FD, + 31991 - 11904: 0xF9A4, + 31992 - 11904: 0xA6CD, + 31993 - 11904: 0x8BD9, + 31995 - 11904: 0xA874, + 31996 - 11904: 0x89A2, + 31997 - 11904: 0xCDA9, + 31998 - 11904: 0xAAC8, + 32000 - 11904: 0xACF6, + 32001 - 11904: 0xD04C, + 32002 - 11904: 0xACF4, + 32003 - 11904: 0xD04A, + 32004 - 11904: 0xACF9, + 32005 - 11904: 0xACF5, + 32006 - 11904: 0xACFA, + 32007 - 11904: 0xACF8, + 32008 - 11904: 0xD04B, + 32009 - 11904: 0xACF7, + 32010 - 11904: 0xAFBF, + 32011 - 11904: 0xAFBE, + 32012 - 11904: 0xD35A, + 32013 - 11904: 0xAFC7, + 32014 - 11904: 0xD353, + 32015 - 11904: 0xD359, + 32016 - 11904: 0xAFC3, + 32017 - 11904: 0xD352, + 32018 - 11904: 0xD358, + 32019 - 11904: 0xD356, + 32020 - 11904: 0xAFC2, + 32021 - 11904: 0xAFC4, + 32022 - 11904: 0xD355, + 32023 - 11904: 0xAFBD, + 32024 - 11904: 0xD354, + 32025 - 11904: 0xAFC8, + 32026 - 11904: 0xAFC5, + 32027 - 11904: 0xAFC9, + 32028 - 11904: 0xAFC6, + 32029 - 11904: 0xD351, + 32030 - 11904: 0xD350, + 32031 - 11904: 0xD357, + 32032 - 11904: 0xAFC0, + 32033 - 11904: 0xAFBC, + 32034 - 11904: 0xAFC1, + 32037 - 11904: 0x9ED7, + 32040 - 11904: 0xD6F0, + 32041 - 11904: 0xD6E9, + 32043 - 11904: 0xB5B5, + 32044 - 11904: 0xD6E8, + 32046 - 11904: 0xB2CF, + 32047 - 11904: 0xB2D6, + 32048 - 11904: 0xB2D3, + 32049 - 11904: 0xB2D9, + 32050 - 11904: 0xB2D8, + 32051 - 11904: 0xB2D4, + 32053 - 11904: 0xD6E2, + 32054 - 11904: 0xD6E5, + 32056 - 11904: 0xD6E4, + 32057 - 11904: 0xB2D0, + 32058 - 11904: 0xD6E6, + 32059 - 11904: 0xD6EF, + 32060 - 11904: 0xB2D1, + 32061 - 11904: 0xD6E3, + 32062 - 11904: 0xD6EC, + 32063 - 11904: 0xD6ED, + 32064 - 11904: 0xB2D2, + 32065 - 11904: 0xD6EA, + 32066 - 11904: 0xB2D7, + 32067 - 11904: 0xB2CD, + 32068 - 11904: 0xB2D5, + 32069 - 11904: 0xD6E7, + 32070 - 11904: 0xB2CC, + 32071 - 11904: 0xD6EB, + 32074 - 11904: 0xD6EE, + 32077 - 11904: 0xA0B6, + 32078 - 11904: 0xDAFB, + 32079 - 11904: 0xDAF2, + 32080 - 11904: 0xB5B2, + 32081 - 11904: 0xDAF9, + 32082 - 11904: 0xDAF6, + 32083 - 11904: 0xDAEE, + 32084 - 11904: 0xDAF7, + 32085 - 11904: 0xB5B4, + 32086 - 11904: 0xDAEF, + 32088 - 11904: 0xDAEB, + 32090 - 11904: 0x9E42, + 32091 - 11904: 0xB86C, + 32092 - 11904: 0xDAF4, + 32093 - 11904: 0x8EA4, + 32094 - 11904: 0xB5B1, + 32095 - 11904: 0xDAFA, + 32097 - 11904: 0xB5B8, + 32098 - 11904: 0xB5BA, + 32099 - 11904: 0xDAED, + 32102 - 11904: 0xB5B9, + 32103 - 11904: 0xDAF0, + 32104 - 11904: 0xB5B3, + 32105 - 11904: 0xDAF8, + 32106 - 11904: 0xDAF1, + 32107 - 11904: 0xDAF5, + 32109 - 11904: 0xDAF3, + 32110 - 11904: 0xB5B6, + 32111 - 11904: 0xDAEC, + 32112 - 11904: 0xB5BB, + 32113 - 11904: 0xB2CE, + 32114 - 11904: 0xB5B7, + 32115 - 11904: 0xB5BC, + 32121 - 11904: 0xB868, + 32122 - 11904: 0xDF5D, + 32123 - 11904: 0xDF5F, + 32124 - 11904: 0xDF61, + 32125 - 11904: 0xDF65, + 32127 - 11904: 0xDF5B, + 32128 - 11904: 0xDF59, + 32129 - 11904: 0xB86A, + 32131 - 11904: 0xDF60, + 32132 - 11904: 0xDF64, + 32133 - 11904: 0xDF5C, + 32134 - 11904: 0xDF58, + 32136 - 11904: 0xDF57, + 32137 - 11904: 0x8EA7, + 32139 - 11904: 0x8C76, + 32140 - 11904: 0xDF62, + 32141 - 11904: 0xDF5A, + 32142 - 11904: 0xDF5E, + 32143 - 11904: 0xB86B, + 32145 - 11904: 0xB869, + 32146 - 11904: 0xDF66, + 32147 - 11904: 0xB867, + 32148 - 11904: 0xDF63, + 32149 - 11904: 0x8767, + 32150 - 11904: 0xE372, + 32151 - 11904: 0x9542, + 32156 - 11904: 0xBAEE, + 32157 - 11904: 0xE36A, + 32158 - 11904: 0xBD78, + 32159 - 11904: 0xE374, + 32160 - 11904: 0xBAF1, + 32161 - 11904: 0xE378, + 32162 - 11904: 0xBAF7, + 32163 - 11904: 0xE365, + 32164 - 11904: 0x987D, + 32166 - 11904: 0xE375, + 32167 - 11904: 0xE362, + 32168 - 11904: 0x9755, + 32169 - 11904: 0xE377, + 32170 - 11904: 0xE366, + 32171 - 11904: 0x8EA8, + 32172 - 11904: 0xBAFE, + 32173 - 11904: 0xBAFB, + 32174 - 11904: 0xE376, + 32175 - 11904: 0xE370, + 32176 - 11904: 0xBAED, + 32177 - 11904: 0xBAF5, + 32178 - 11904: 0xBAF4, + 32179 - 11904: 0x8EAA, + 32180 - 11904: 0xBAF3, + 32181 - 11904: 0xBAF9, + 32183 - 11904: 0xE363, + 32184 - 11904: 0xBAFA, + 32185 - 11904: 0xE371, + 32186 - 11904: 0xBAF6, + 32187 - 11904: 0xBAEC, + 32188 - 11904: 0xE373, + 32189 - 11904: 0xBAEF, + 32190 - 11904: 0xBAF0, + 32191 - 11904: 0xBAF8, + 32192 - 11904: 0xE368, + 32193 - 11904: 0xE367, + 32194 - 11904: 0xE364, + 32196 - 11904: 0xE36C, + 32197 - 11904: 0xE369, + 32198 - 11904: 0xE36D, + 32199 - 11904: 0xBAFD, + 32201 - 11904: 0xE379, + 32202 - 11904: 0xBAF2, + 32203 - 11904: 0xE36E, + 32204 - 11904: 0xE36F, + 32205 - 11904: 0x89A3, + 32206 - 11904: 0xE36B, + 32207 - 11904: 0x9960, + 32208 - 11904: 0x9962, + 32210 - 11904: 0xBAFC, + 32211 - 11904: 0x94FC, + 32212 - 11904: 0x9961, + 32215 - 11904: 0xE6E7, + 32216 - 11904: 0xBD70, + 32217 - 11904: 0xBD79, + 32218 - 11904: 0xBD75, + 32219 - 11904: 0xE6E4, + 32220 - 11904: 0x94FA, + 32221 - 11904: 0xBD72, + 32222 - 11904: 0xBD76, + 32223 - 11904: 0xE6F0, + 32224 - 11904: 0xBD6C, + 32225 - 11904: 0xE6E8, + 32227 - 11904: 0xBD74, + 32228 - 11904: 0x8EAE, + 32229 - 11904: 0x8EB2, + 32230 - 11904: 0xE6EB, + 32231 - 11904: 0xE6E6, + 32232 - 11904: 0xBD73, + 32233 - 11904: 0xBD77, + 32234 - 11904: 0xE6E5, + 32236 - 11904: 0xBD71, + 32238 - 11904: 0xE6EF, + 32239 - 11904: 0xBD6E, + 32240 - 11904: 0xE6EE, + 32241 - 11904: 0xE6ED, + 32242 - 11904: 0xBD7A, + 32243 - 11904: 0xE572, + 32244 - 11904: 0xBD6D, + 32245 - 11904: 0x8EB0, + 32246 - 11904: 0xE6EC, + 32247 - 11904: 0xE6E3, + 32249 - 11904: 0xBD7B, + 32250 - 11904: 0xE6EA, + 32251 - 11904: 0xBD6F, + 32253 - 11904: 0x9963, + 32254 - 11904: 0x97AA, + 32259 - 11904: 0xE6E9, + 32263 - 11904: 0x94FB, + 32264 - 11904: 0xBFA2, + 32265 - 11904: 0xBFA7, + 32266 - 11904: 0xBF7E, + 32267 - 11904: 0xEAD8, + 32268 - 11904: 0xEACF, + 32269 - 11904: 0xEADB, + 32270 - 11904: 0xEAD3, + 32271 - 11904: 0xEAD9, + 32272 - 11904: 0xBFA8, + 32273 - 11904: 0xBFA1, + 32274 - 11904: 0xEACC, + 32275 - 11904: 0xEAD2, + 32276 - 11904: 0xEADC, + 32277 - 11904: 0xEAD5, + 32278 - 11904: 0xEADA, + 32279 - 11904: 0xEACE, + 32282 - 11904: 0xEAD6, + 32283 - 11904: 0xBFA3, + 32284 - 11904: 0xEAD4, + 32285 - 11904: 0xBFA6, + 32286 - 11904: 0xBFA5, + 32287 - 11904: 0xEAD0, + 32288 - 11904: 0xEAD1, + 32289 - 11904: 0xEACD, + 32290 - 11904: 0xEAD7, + 32291 - 11904: 0xBFA4, + 32292 - 11904: 0xEADE, + 32293 - 11904: 0xEADD, + 32295 - 11904: 0x8EBB, + 32297 - 11904: 0xEDDA, + 32298 - 11904: 0xEDD6, + 32299 - 11904: 0xC15F, + 32301 - 11904: 0xEDD0, + 32302 - 11904: 0xC159, + 32303 - 11904: 0xC169, + 32304 - 11904: 0xEDDC, + 32305 - 11904: 0xC161, + 32306 - 11904: 0xC15D, + 32307 - 11904: 0xEDD3, + 32308 - 11904: 0xC164, + 32309 - 11904: 0xC167, + 32310 - 11904: 0xEDDE, + 32311 - 11904: 0xC15C, + 32312 - 11904: 0xEDD5, + 32313 - 11904: 0xC165, + 32314 - 11904: 0xEDE0, + 32315 - 11904: 0xEDDD, + 32316 - 11904: 0xEDD1, + 32317 - 11904: 0xC160, + 32318 - 11904: 0xC15A, + 32319 - 11904: 0xC168, + 32320 - 11904: 0xEDD8, + 32321 - 11904: 0xC163, + 32322 - 11904: 0xEDD2, + 32323 - 11904: 0xC15E, + 32324 - 11904: 0xEDDF, + 32325 - 11904: 0xC162, + 32326 - 11904: 0xC15B, + 32327 - 11904: 0xEDD9, + 32328 - 11904: 0xC166, + 32329 - 11904: 0xEDD7, + 32332 - 11904: 0xEDDB, + 32336 - 11904: 0xF06E, + 32337 - 11904: 0xF074, + 32338 - 11904: 0xC2B9, + 32339 - 11904: 0xF077, + 32340 - 11904: 0xC2B4, + 32341 - 11904: 0xC2B5, + 32342 - 11904: 0xF06F, + 32343 - 11904: 0xF076, + 32344 - 11904: 0xF071, + 32345 - 11904: 0xC2BA, + 32346 - 11904: 0xC2B7, + 32347 - 11904: 0x8CDC, + 32348 - 11904: 0xF06D, + 32350 - 11904: 0xC2B6, + 32351 - 11904: 0xF073, + 32352 - 11904: 0xF075, + 32353 - 11904: 0xC2B8, + 32354 - 11904: 0xF072, + 32355 - 11904: 0xF070, + 32357 - 11904: 0x9876, + 32359 - 11904: 0x8EA1, + 32360 - 11904: 0xF2B8, + 32361 - 11904: 0xC3B7, + 32362 - 11904: 0xC3B8, + 32363 - 11904: 0xC3B4, + 32364 - 11904: 0x8CB4, + 32365 - 11904: 0xC3B5, + 32366 - 11904: 0x8EB7, + 32367 - 11904: 0xF2B4, + 32368 - 11904: 0xF2B2, + 32370 - 11904: 0xF2B6, + 32371 - 11904: 0xC3BA, + 32372 - 11904: 0xF2B7, + 32373 - 11904: 0xF2B0, + 32374 - 11904: 0xF2AF, + 32375 - 11904: 0xF2B3, + 32376 - 11904: 0xF2B1, + 32377 - 11904: 0xC3B6, + 32378 - 11904: 0xF2B5, + 32379 - 11904: 0xF4AC, + 32380 - 11904: 0xC47E, + 32381 - 11904: 0xC47D, + 32382 - 11904: 0xF4AD, + 32383 - 11904: 0x9DA6, + 32384 - 11904: 0xF4AF, + 32385 - 11904: 0xF4AE, + 32386 - 11904: 0xC4A1, + 32390 - 11904: 0xF5EB, + 32391 - 11904: 0xF5E8, + 32392 - 11904: 0xF5E9, + 32394 - 11904: 0xF5E7, + 32395 - 11904: 0xF5EA, + 32396 - 11904: 0xC4F2, + 32397 - 11904: 0xF5EC, + 32398 - 11904: 0x9EB0, + 32399 - 11904: 0xC4F1, + 32401 - 11904: 0xF742, + 32402 - 11904: 0x8EB8, + 32403 - 11904: 0xC5D5, + 32404 - 11904: 0xC5D7, + 32405 - 11904: 0xF7EE, + 32406 - 11904: 0xC5D6, + 32407 - 11904: 0xF8B9, + 32408 - 11904: 0xF940, + 32409 - 11904: 0xF942, + 32410 - 11904: 0xF8FE, + 32411 - 11904: 0xF941, + 32412 - 11904: 0xC66C, + 32415 - 11904: 0x9D70, + 32420 - 11904: 0x896E, + 32428 - 11904: 0x896F, + 32442 - 11904: 0x8970, + 32455 - 11904: 0x8971, + 32463 - 11904: 0x8972, + 32479 - 11904: 0x8973, + 32518 - 11904: 0x8974, + 32566 - 11904: 0xA6CE, + 32567 - 11904: 0x8975, + 32568 - 11904: 0xACFB, + 32569 - 11904: 0xD26F, + 32570 - 11904: 0xAFCA, + 32573 - 11904: 0xB2DA, + 32574 - 11904: 0xDAFC, + 32575 - 11904: 0xDAFD, + 32576 - 11904: 0x8EBC, + 32577 - 11904: 0x8EBD, + 32579 - 11904: 0xEADF, + 32580 - 11904: 0xC16A, + 32581 - 11904: 0xEDE1, + 32583 - 11904: 0x8EBE, + 32584 - 11904: 0xC2BB, + 32585 - 11904: 0x9DD1, + 32586 - 11904: 0xF2BA, + 32587 - 11904: 0xF2B9, + 32588 - 11904: 0xC4A2, + 32589 - 11904: 0xF5ED, + 32590 - 11904: 0x94FD, + 32591 - 11904: 0xF743, + 32592 - 11904: 0xC5F8, + 32593 - 11904: 0xCA49, + 32594 - 11904: 0x8BD7, + 32595 - 11904: 0x8BDA, + 32596 - 11904: 0xAAC9, + 32597 - 11904: 0xA875, + 32600 - 11904: 0xD04D, + 32603 - 11904: 0xD360, + 32604 - 11904: 0xD35B, + 32605 - 11904: 0xD35F, + 32606 - 11904: 0xD35D, + 32607 - 11904: 0xAFCB, + 32608 - 11904: 0xD35E, + 32609 - 11904: 0xD35C, + 32611 - 11904: 0xD6F1, + 32613 - 11904: 0xDAFE, + 32614 - 11904: 0xDB40, + 32615 - 11904: 0xDF69, + 32616 - 11904: 0xDF6A, + 32617 - 11904: 0xB86E, + 32618 - 11904: 0xB86F, + 32619 - 11904: 0xDF68, + 32620 - 11904: 0xDF6B, + 32621 - 11904: 0xDF67, + 32622 - 11904: 0xB86D, + 32624 - 11904: 0xBB40, + 32625 - 11904: 0xA0E2, + 32626 - 11904: 0xB870, + 32627 - 11904: 0xE37A, + 32629 - 11904: 0xBD7C, + 32630 - 11904: 0xE6F1, + 32631 - 11904: 0xBD7D, + 32632 - 11904: 0x9FE9, + 32633 - 11904: 0xBFA9, + 32634 - 11904: 0xEAE2, + 32635 - 11904: 0xEAE0, + 32636 - 11904: 0xEAE1, + 32637 - 11904: 0xEDE4, + 32638 - 11904: 0xEDE3, + 32639 - 11904: 0xEDE2, + 32643 - 11904: 0xF2BB, + 32645 - 11904: 0xC3B9, + 32646 - 11904: 0xF2BC, + 32647 - 11904: 0xF744, + 32648 - 11904: 0xC5F9, + 32649 - 11904: 0xF8BA, + 32650 - 11904: 0xA6CF, + 32651 - 11904: 0xAACB, + 32652 - 11904: 0xAACA, + 32653 - 11904: 0xD04F, + 32654 - 11904: 0xACFC, + 32655 - 11904: 0xFDA8, + 32657 - 11904: 0xD04E, + 32658 - 11904: 0xD362, + 32659 - 11904: 0x8AE7, + 32660 - 11904: 0xAFCC, + 32661 - 11904: 0xD6F2, + 32662 - 11904: 0xD361, + 32663 - 11904: 0x8EC2, + 32666 - 11904: 0xB2DC, + 32667 - 11904: 0xD6F5, + 32668 - 11904: 0xD6F3, + 32669 - 11904: 0xD6F4, + 32670 - 11904: 0xB2DB, + 32672 - 11904: 0xDB42, + 32673 - 11904: 0xDB43, + 32674 - 11904: 0xDB41, + 32675 - 11904: 0x8EC4, + 32676 - 11904: 0xB873, + 32677 - 11904: 0xDF6D, + 32678 - 11904: 0xDF6C, + 32679 - 11904: 0xDF6E, + 32680 - 11904: 0xB872, + 32681 - 11904: 0xB871, + 32684 - 11904: 0xE6F2, + 32685 - 11904: 0xE6F4, + 32686 - 11904: 0x9964, + 32687 - 11904: 0xBD7E, + 32688 - 11904: 0xE6F3, + 32689 - 11904: 0xEAE3, + 32690 - 11904: 0xBFAA, + 32691 - 11904: 0xF079, + 32692 - 11904: 0x9965, + 32693 - 11904: 0xF078, + 32694 - 11904: 0xC3BB, + 32695 - 11904: 0xF2BD, + 32696 - 11904: 0xC3BD, + 32697 - 11904: 0xC3BC, + 32698 - 11904: 0xF4B0, + 32699 - 11904: 0xF5EE, + 32700 - 11904: 0xC4F3, + 32701 - 11904: 0xA6D0, + 32702 - 11904: 0xD050, + 32703 - 11904: 0xACFD, + 32704 - 11904: 0xD365, + 32705 - 11904: 0xAFCE, + 32706 - 11904: 0xD364, + 32707 - 11904: 0xD363, + 32709 - 11904: 0xAFCD, + 32711 - 11904: 0xD6FB, + 32713 - 11904: 0xD6FD, + 32714 - 11904: 0xD6F6, + 32715 - 11904: 0xD6F7, + 32716 - 11904: 0xB2DD, + 32717 - 11904: 0xD6F8, + 32718 - 11904: 0xB2DE, + 32719 - 11904: 0xD6FC, + 32720 - 11904: 0xD6F9, + 32721 - 11904: 0xD6FA, + 32722 - 11904: 0xB2DF, + 32724 - 11904: 0xB5BE, + 32725 - 11904: 0xB5BF, + 32727 - 11904: 0xDB44, + 32731 - 11904: 0xDF6F, + 32732 - 11904: 0xDF70, + 32733 - 11904: 0x954E, + 32734 - 11904: 0xE37E, + 32735 - 11904: 0xBB43, + 32736 - 11904: 0xBB41, + 32737 - 11904: 0xBB42, + 32738 - 11904: 0xE37B, + 32739 - 11904: 0xE37C, + 32741 - 11904: 0xE37D, + 32742 - 11904: 0xE6F9, + 32743 - 11904: 0x98B3, + 32744 - 11904: 0xE6FA, + 32745 - 11904: 0xBDA1, + 32746 - 11904: 0xE6F7, + 32747 - 11904: 0xE6F6, + 32748 - 11904: 0xE6F8, + 32749 - 11904: 0xE6F5, + 32750 - 11904: 0xBFAD, + 32751 - 11904: 0xEAE4, + 32752 - 11904: 0xBFAB, + 32753 - 11904: 0xBFAC, + 32754 - 11904: 0xEDE6, + 32755 - 11904: 0xC16B, + 32756 - 11904: 0xEDE5, + 32757 - 11904: 0xEFA8, + 32759 - 11904: 0xF07A, + 32760 - 11904: 0xF07B, + 32761 - 11904: 0xC2BC, + 32762 - 11904: 0x8ECB, + 32763 - 11904: 0xC2BD, + 32764 - 11904: 0xC16C, + 32765 - 11904: 0xF2BE, + 32766 - 11904: 0xF2BF, + 32767 - 11904: 0xF4B1, + 32768 - 11904: 0xC4A3, + 32769 - 11904: 0xA6D1, + 32770 - 11904: 0x8BDF, + 32771 - 11904: 0xA6D2, + 32772 - 11904: 0xACFE, + 32773 - 11904: 0xAACC, + 32774 - 11904: 0xAFCF, + 32775 - 11904: 0xD051, + 32776 - 11904: 0x8ECE, + 32779 - 11904: 0xB5C0, + 32780 - 11904: 0xA6D3, + 32781 - 11904: 0xAD41, + 32782 - 11904: 0xD052, + 32783 - 11904: 0xD053, + 32784 - 11904: 0xAD40, + 32785 - 11904: 0xAD42, + 32786 - 11904: 0xA6D4, + 32788 - 11904: 0xD054, + 32789 - 11904: 0xAFD1, + 32790 - 11904: 0xD366, + 32791 - 11904: 0xAFD3, + 32792 - 11904: 0xAFD0, + 32793 - 11904: 0xAFD2, + 32795 - 11904: 0xD741, + 32796 - 11904: 0xB2E0, + 32797 - 11904: 0x8ECF, + 32798 - 11904: 0xD740, + 32799 - 11904: 0xD6FE, + 32800 - 11904: 0x9968, + 32801 - 11904: 0xDF71, + 32804 - 11904: 0xE3A1, + 32805 - 11904: 0x9969, + 32806 - 11904: 0xBDA2, + 32808 - 11904: 0xBFAE, + 32809 - 11904: 0xEAE6, + 32810 - 11904: 0xEAE5, + 32812 - 11904: 0xEDE7, + 32814 - 11904: 0x996B, + 32815 - 11904: 0x8ED1, + 32816 - 11904: 0xF5EF, + 32817 - 11904: 0x996C, + 32819 - 11904: 0xA6D5, + 32820 - 11904: 0xCB73, + 32821 - 11904: 0xCDAA, + 32822 - 11904: 0xAD43, + 32823 - 11904: 0xD055, + 32825 - 11904: 0xD368, + 32827 - 11904: 0x8ED4, + 32828 - 11904: 0x8ED5, + 32829 - 11904: 0xAFD4, + 32830 - 11904: 0xD367, + 32831 - 11904: 0xAFD5, + 32835 - 11904: 0xD743, + 32838 - 11904: 0xB2E2, + 32839 - 11904: 0xD742, + 32840 - 11904: 0xD744, + 32842 - 11904: 0xB2E1, + 32847 - 11904: 0xDB46, + 32848 - 11904: 0xDB47, + 32849 - 11904: 0xDB45, + 32850 - 11904: 0xB5C1, + 32852 - 11904: 0x996D, + 32854 - 11904: 0xB874, + 32856 - 11904: 0xB875, + 32858 - 11904: 0xBB45, + 32859 - 11904: 0xA0BE, + 32860 - 11904: 0xE3A3, + 32861 - 11904: 0xE3A2, + 32862 - 11904: 0xBB44, + 32865 - 11904: 0x8ED6, + 32866 - 11904: 0xA0BC, + 32867 - 11904: 0xA0B5, + 32868 - 11904: 0xE6FB, + 32870 - 11904: 0xA0B4, + 32871 - 11904: 0xE6FC, + 32876 - 11904: 0xEAE7, + 32879 - 11904: 0xC170, + 32880 - 11904: 0xC16F, + 32881 - 11904: 0xC16D, + 32882 - 11904: 0xC16E, + 32883 - 11904: 0xC171, + 32885 - 11904: 0xF07C, + 32886 - 11904: 0xC2BF, + 32887 - 11904: 0xC2BE, + 32888 - 11904: 0xF2C0, + 32889 - 11904: 0xF4B2, + 32893 - 11904: 0xC5A5, + 32894 - 11904: 0xC5A4, + 32895 - 11904: 0xA6D6, + 32896 - 11904: 0x8BE0, + 32898 - 11904: 0xD1FB, + 32900 - 11904: 0xB877, + 32901 - 11904: 0xB5C2, + 32902 - 11904: 0xB876, + 32903 - 11904: 0xBB46, + 32905 - 11904: 0xA6D7, + 32906 - 11904: 0xC9A9, + 32907 - 11904: 0xA6D8, + 32908 - 11904: 0xA6D9, + 32911 - 11904: 0xCDAB, + 32912 - 11904: 0xCB76, + 32914 - 11904: 0xCB77, + 32915 - 11904: 0xA877, + 32917 - 11904: 0xCB74, + 32918 - 11904: 0xA876, + 32920 - 11904: 0xA879, + 32921 - 11904: 0xCB75, + 32922 - 11904: 0xA87B, + 32923 - 11904: 0xA87A, + 32924 - 11904: 0xCB78, + 32925 - 11904: 0xA878, + 32927 - 11904: 0x89B5, + 32929 - 11904: 0xAAD1, + 32930 - 11904: 0xAACF, + 32931 - 11904: 0xCDAD, + 32933 - 11904: 0xAACE, + 32935 - 11904: 0x8EDD, + 32937 - 11904: 0xAAD3, + 32938 - 11904: 0xAAD5, + 32939 - 11904: 0xAAD2, + 32941 - 11904: 0xCDB0, + 32942 - 11904: 0xCDAC, + 32943 - 11904: 0xAAD6, + 32945 - 11904: 0xAAD0, + 32946 - 11904: 0xA87C, + 32948 - 11904: 0xAAD4, + 32949 - 11904: 0xCDAF, + 32950 - 11904: 0x9E5D, + 32951 - 11904: 0x9971, + 32952 - 11904: 0xCDAE, + 32954 - 11904: 0xAACD, + 32956 - 11904: 0x89AE, + 32957 - 11904: 0x9DE8, + 32962 - 11904: 0xD05B, + 32963 - 11904: 0xAD47, + 32964 - 11904: 0xAD48, + 32965 - 11904: 0xD05D, + 32966 - 11904: 0x9565, + 32967 - 11904: 0xD057, + 32968 - 11904: 0xD05A, + 32969 - 11904: 0xD063, + 32970 - 11904: 0xD061, + 32972 - 11904: 0xAD49, + 32973 - 11904: 0xD067, + 32974 - 11904: 0xAD4C, + 32975 - 11904: 0xD064, + 32976 - 11904: 0xD05C, + 32977 - 11904: 0xD059, + 32980 - 11904: 0xDB49, + 32981 - 11904: 0xD062, + 32982 - 11904: 0xAD44, + 32983 - 11904: 0xD065, + 32984 - 11904: 0xD056, + 32985 - 11904: 0xD05F, + 32986 - 11904: 0xAD46, + 32987 - 11904: 0xAD4B, + 32988 - 11904: 0xD060, + 32989 - 11904: 0xAD4F, + 32990 - 11904: 0xAD4D, + 32992 - 11904: 0xD058, + 32993 - 11904: 0xAD4A, + 32995 - 11904: 0xD05E, + 32996 - 11904: 0xAD4E, + 32997 - 11904: 0xAD45, + 32998 - 11904: 0xD066, + 33001 - 11904: 0x9972, + 33004 - 11904: 0x8B5C, + 33005 - 11904: 0xAFDA, + 33007 - 11904: 0xAFE3, + 33008 - 11904: 0xAFD8, + 33009 - 11904: 0xAFD6, + 33010 - 11904: 0xD36A, + 33011 - 11904: 0xAFDE, + 33012 - 11904: 0xAFDB, + 33013 - 11904: 0xD36C, + 33014 - 11904: 0x89B1, + 33016 - 11904: 0xAFDD, + 33017 - 11904: 0xD36B, + 33018 - 11904: 0xD369, + 33019 - 11904: 0xD36E, + 33020 - 11904: 0xAFE2, + 33021 - 11904: 0xAFE0, + 33022 - 11904: 0xDB48, + 33024 - 11904: 0xD36F, + 33025 - 11904: 0xD36D, + 33026 - 11904: 0xAFD7, + 33027 - 11904: 0xA0C0, + 33029 - 11904: 0xAFD9, + 33030 - 11904: 0xAFDC, + 33031 - 11904: 0x8EDF, + 33032 - 11904: 0xAFDF, + 33033 - 11904: 0x9566, + 33034 - 11904: 0xAFE1, + 33036 - 11904: 0x9974, + 33038 - 11904: 0x9976, + 33042 - 11904: 0x9977, + 33044 - 11904: 0x9979, + 33045 - 11904: 0xD74E, + 33046 - 11904: 0xB2E4, + 33047 - 11904: 0x9DDA, + 33048 - 11904: 0xD745, + 33049 - 11904: 0xD747, + 33050 - 11904: 0x8EE0, + 33051 - 11904: 0xD748, + 33053 - 11904: 0xD750, + 33054 - 11904: 0xD74C, + 33055 - 11904: 0xD74A, + 33057 - 11904: 0xD74D, + 33058 - 11904: 0xD751, + 33059 - 11904: 0xB2E5, + 33060 - 11904: 0xB2E9, + 33061 - 11904: 0xD746, + 33063 - 11904: 0xD74F, + 33065 - 11904: 0xB2E7, + 33066 - 11904: 0x935C, + 33067 - 11904: 0xB2E6, + 33068 - 11904: 0xD74B, + 33069 - 11904: 0xD749, + 33071 - 11904: 0xB2E3, + 33072 - 11904: 0xB2E8, + 33074 - 11904: 0x9DE6, + 33076 - 11904: 0x8B5F, + 33079 - 11904: 0x9563, + 33081 - 11904: 0xB5C8, + 33082 - 11904: 0xDB51, + 33085 - 11904: 0xDB4F, + 33086 - 11904: 0xB5CA, + 33090 - 11904: 0x9567, + 33091 - 11904: 0xDB4A, + 33092 - 11904: 0xDFA1, + 33094 - 11904: 0xB5C9, + 33095 - 11904: 0xDB4E, + 33096 - 11904: 0x9DE3, + 33098 - 11904: 0xDB4B, + 33099 - 11904: 0xB5C5, + 33100 - 11904: 0xB5CB, + 33101 - 11904: 0xDB50, + 33102 - 11904: 0xB5C7, + 33103 - 11904: 0xDB4D, + 33104 - 11904: 0xBB47, + 33105 - 11904: 0xB5C6, + 33106 - 11904: 0xDB4C, + 33107 - 11904: 0xB5CC, + 33108 - 11904: 0xB5C4, + 33109 - 11904: 0xB5C3, + 33110 - 11904: 0x997C, + 33113 - 11904: 0x997D, + 33114 - 11904: 0x997E, + 33115 - 11904: 0xDF77, + 33116 - 11904: 0xDF75, + 33118 - 11904: 0xDF7B, + 33120 - 11904: 0xDF73, + 33121 - 11904: 0xDFA2, + 33122 - 11904: 0xDF78, + 33124 - 11904: 0xDF72, + 33125 - 11904: 0xB87B, + 33126 - 11904: 0xB8A3, + 33127 - 11904: 0xDF7D, + 33129 - 11904: 0xDF76, + 33131 - 11904: 0xB87E, + 33132 - 11904: 0x8CFB, + 33133 - 11904: 0x8B5B, + 33134 - 11904: 0xB87C, + 33135 - 11904: 0xDF7E, + 33136 - 11904: 0xB879, + 33137 - 11904: 0xB878, + 33138 - 11904: 0xDF79, + 33139 - 11904: 0xB87D, + 33140 - 11904: 0xB5CD, + 33142 - 11904: 0xDF7C, + 33143 - 11904: 0xDF74, + 33144 - 11904: 0xB87A, + 33145 - 11904: 0xB8A1, + 33146 - 11904: 0xB8A2, + 33148 - 11904: 0x99A3, + 33151 - 11904: 0xBB4C, + 33152 - 11904: 0xBB48, + 33154 - 11904: 0xBB4D, + 33155 - 11904: 0xE3A6, + 33156 - 11904: 0x99A4, + 33158 - 11904: 0xE3A5, + 33159 - 11904: 0xE3A7, + 33160 - 11904: 0xBB4A, + 33161 - 11904: 0xE3A4, + 33162 - 11904: 0xBB4B, + 33163 - 11904: 0xE3AA, + 33164 - 11904: 0xE3A9, + 33165 - 11904: 0xE3A8, + 33167 - 11904: 0xBB49, + 33171 - 11904: 0x99A6, + 33173 - 11904: 0xE741, + 33175 - 11904: 0xE744, + 33176 - 11904: 0xBDA8, + 33177 - 11904: 0xE743, + 33178 - 11904: 0xBDA7, + 33179 - 11904: 0xBDA3, + 33180 - 11904: 0xBDA4, + 33181 - 11904: 0xBDA5, + 33182 - 11904: 0xE740, + 33183 - 11904: 0xE6FE, + 33184 - 11904: 0xBDA6, + 33186 - 11904: 0xE742, + 33187 - 11904: 0xE6FD, + 33189 - 11904: 0x99A8, + 33190 - 11904: 0xEAE9, + 33191 - 11904: 0xEAF3, + 33192 - 11904: 0xBFB1, + 33193 - 11904: 0xBFB0, + 33194 - 11904: 0x8ABE, + 33195 - 11904: 0xEAED, + 33196 - 11904: 0xEAEF, + 33198 - 11904: 0xEAEA, + 33200 - 11904: 0xEAEE, + 33201 - 11904: 0xEAE8, + 33202 - 11904: 0xEAF1, + 33203 - 11904: 0xBFAF, + 33204 - 11904: 0xEAF0, + 33205 - 11904: 0xEAEC, + 33206 - 11904: 0x9E61, + 33207 - 11904: 0xEAF2, + 33209 - 11904: 0xEAEB, + 33210 - 11904: 0xC174, + 33211 - 11904: 0xEDE8, + 33212 - 11904: 0xEDEE, + 33213 - 11904: 0xC178, + 33214 - 11904: 0xC17A, + 33215 - 11904: 0xC177, + 33216 - 11904: 0xC176, + 33217 - 11904: 0x99AA, + 33218 - 11904: 0xC175, + 33219 - 11904: 0xC173, + 33220 - 11904: 0xEDE9, + 33221 - 11904: 0xEDEC, + 33222 - 11904: 0xC172, + 33223 - 11904: 0xEDED, + 33224 - 11904: 0xA0C8, + 33225 - 11904: 0xC179, + 33226 - 11904: 0xEDEB, + 33228 - 11904: 0xEDEA, + 33229 - 11904: 0xC2C0, + 33231 - 11904: 0xC2C1, + 33232 - 11904: 0xF0A1, + 33233 - 11904: 0xF07D, + 33234 - 11904: 0xF07E, + 33237 - 11904: 0xF2C2, + 33239 - 11904: 0xF2C1, + 33240 - 11904: 0xC3BE, + 33241 - 11904: 0xF4B4, + 33242 - 11904: 0xC4A4, + 33243 - 11904: 0xF4B3, + 33245 - 11904: 0xF5F0, + 33246 - 11904: 0xF745, + 33247 - 11904: 0xC5A6, + 33248 - 11904: 0xF943, + 33249 - 11904: 0xF944, + 33250 - 11904: 0xC5D8, + 33251 - 11904: 0xA6DA, + 33252 - 11904: 0x99AB, + 33253 - 11904: 0xAAD7, + 33254 - 11904: 0xDB52, + 33255 - 11904: 0xBB4E, + 33256 - 11904: 0xC17B, + 33257 - 11904: 0xEDEF, + 33258 - 11904: 0xA6DB, + 33260 - 11904: 0xAFE5, + 33261 - 11904: 0xAFE4, + 33262 - 11904: 0xDB53, + 33263 - 11904: 0xFEC4, + 33266 - 11904: 0xEAF4, + 33267 - 11904: 0xA6DC, + 33268 - 11904: 0xAD50, + 33270 - 11904: 0x98C2, + 33271 - 11904: 0xDB54, + 33272 - 11904: 0xDB55, + 33273 - 11904: 0xDB56, + 33274 - 11904: 0xBB4F, + 33275 - 11904: 0xBFB2, + 33276 - 11904: 0xA6DD, + 33278 - 11904: 0xAAD8, + 33279 - 11904: 0xD068, + 33280 - 11904: 0xAFE6, + 33281 - 11904: 0xD370, + 33282 - 11904: 0xB2EA, + 33284 - 11904: 0xDB57, + 33285 - 11904: 0xB8A4, + 33287 - 11904: 0xBB50, + 33288 - 11904: 0xBFB3, + 33289 - 11904: 0xC17C, + 33290 - 11904: 0xC2C2, + 33291 - 11904: 0xF4B5, + 33292 - 11904: 0xA6DE, + 33293 - 11904: 0xAAD9, + 33296 - 11904: 0xAFE7, + 33297 - 11904: 0xD752, + 33298 - 11904: 0xB5CE, + 33300 - 11904: 0xBB51, + 33301 - 11904: 0xE3AB, + 33302 - 11904: 0xE745, + 33304 - 11904: 0x8EE8, + 33306 - 11904: 0xA0BA, + 33307 - 11904: 0xA6DF, + 33308 - 11904: 0xB5CF, + 33309 - 11904: 0xDFA3, + 33310 - 11904: 0xBB52, + 33311 - 11904: 0xA6E0, + 33312 - 11904: 0xCDB1, + 33313 - 11904: 0xD069, + 33314 - 11904: 0xAD51, + 33317 - 11904: 0xD372, + 33318 - 11904: 0xFD77, + 33320 - 11904: 0xAFEA, + 33321 - 11904: 0x8EEE, + 33322 - 11904: 0xAFE8, + 33323 - 11904: 0xAFE9, + 33324 - 11904: 0xAFEB, + 33325 - 11904: 0x9EBF, + 33327 - 11904: 0xD371, + 33330 - 11904: 0xD757, + 33331 - 11904: 0xD754, + 33332 - 11904: 0xD756, + 33333 - 11904: 0xB2EB, + 33334 - 11904: 0xB2ED, + 33335 - 11904: 0xB2EC, + 33336 - 11904: 0xD753, + 33337 - 11904: 0xB2EE, + 33338 - 11904: 0xD755, + 33340 - 11904: 0xDB58, + 33341 - 11904: 0xDB59, + 33342 - 11904: 0x89C2, + 33343 - 11904: 0xDB5A, + 33344 - 11904: 0xDFA6, + 33346 - 11904: 0xDFA7, + 33348 - 11904: 0xDFA5, + 33349 - 11904: 0xDFA8, + 33351 - 11904: 0xB8A5, + 33353 - 11904: 0xDFA4, + 33355 - 11904: 0xBB53, + 33358 - 11904: 0xE74A, + 33359 - 11904: 0xE746, + 33360 - 11904: 0xE749, + 33361 - 11904: 0xE74B, + 33362 - 11904: 0xE748, + 33363 - 11904: 0xE747, + 33364 - 11904: 0x99AC, + 33365 - 11904: 0xEAF5, + 33366 - 11904: 0xEAF6, + 33367 - 11904: 0xEAF7, + 33368 - 11904: 0xBFB4, + 33369 - 11904: 0xBFB5, + 33370 - 11904: 0xEDF1, + 33371 - 11904: 0xEDF0, + 33372 - 11904: 0xEDF2, + 33374 - 11904: 0xF0A3, + 33375 - 11904: 0xF0A2, + 33377 - 11904: 0xF2C4, + 33378 - 11904: 0x956B, + 33379 - 11904: 0xF2C5, + 33380 - 11904: 0xF2C3, + 33381 - 11904: 0x956C, + 33382 - 11904: 0xC4A5, + 33384 - 11904: 0xF4B6, + 33385 - 11904: 0xF4B7, + 33387 - 11904: 0xF746, + 33388 - 11904: 0xF7EF, + 33389 - 11904: 0xF8BB, + 33390 - 11904: 0xA6E1, + 33391 - 11904: 0xA87D, + 33393 - 11904: 0xC17D, + 33394 - 11904: 0xA6E2, + 33396 - 11904: 0xD758, + 33397 - 11904: 0xDB5B, + 33398 - 11904: 0x99AF, + 33399 - 11904: 0xC641, + 33400 - 11904: 0xCA4A, + 33401 - 11904: 0x994A, + 33402 - 11904: 0x8976, + 33403 - 11904: 0x8F48, + 33404 - 11904: 0xCA4B, + 33405 - 11904: 0xCA4D, + 33406 - 11904: 0xA6E3, + 33407 - 11904: 0xCA4E, + 33408 - 11904: 0xCA4C, + 33411 - 11904: 0xCBA2, + 33412 - 11904: 0xCBA3, + 33413 - 11904: 0xCB7B, + 33415 - 11904: 0xFBEE, + 33418 - 11904: 0xCBA1, + 33419 - 11904: 0xA8A1, + 33421 - 11904: 0xA8A2, + 33422 - 11904: 0xCB7C, + 33423 - 11904: 0xCB7A, + 33424 - 11904: 0xCB79, + 33425 - 11904: 0xCB7D, + 33426 - 11904: 0xA87E, + 33427 - 11904: 0xCB7E, + 33428 - 11904: 0xD06A, + 33432 - 11904: 0xCDB6, + 33433 - 11904: 0xAADC, + 33434 - 11904: 0xCDB5, + 33435 - 11904: 0xCDB7, + 33437 - 11904: 0xAADB, + 33438 - 11904: 0xCDBC, + 33439 - 11904: 0xAADF, + 33440 - 11904: 0xCDB2, + 33441 - 11904: 0xCDC0, + 33442 - 11904: 0xCDC6, + 33443 - 11904: 0xAAE6, + 33444 - 11904: 0xCDC3, + 33445 - 11904: 0xAAE3, + 33446 - 11904: 0x99AE, + 33447 - 11904: 0xCDB9, + 33448 - 11904: 0xCDBF, + 33449 - 11904: 0xCDC1, + 33450 - 11904: 0x8EFB, + 33451 - 11904: 0xCDB4, + 33452 - 11904: 0xAAE2, + 33453 - 11904: 0xAADD, + 33454 - 11904: 0xCDBA, + 33455 - 11904: 0xAAE4, + 33456 - 11904: 0xAAE7, + 33457 - 11904: 0xAAE1, + 33459 - 11904: 0xAADA, + 33460 - 11904: 0xCDBE, + 33461 - 11904: 0xCDB8, + 33462 - 11904: 0xCDC5, + 33463 - 11904: 0xAAE9, + 33464 - 11904: 0xAAE5, + 33465 - 11904: 0xAAE0, + 33466 - 11904: 0xCDBD, + 33467 - 11904: 0xAFEC, + 33468 - 11904: 0xCDBB, + 33469 - 11904: 0xAADE, + 33470 - 11904: 0xAAE8, + 33471 - 11904: 0x8CD0, + 33472 - 11904: 0xCDB3, + 33474 - 11904: 0xCDC2, + 33475 - 11904: 0xCDC4, + 33476 - 11904: 0x8B52, + 33482 - 11904: 0x99B0, + 33487 - 11904: 0x8977, + 33488 - 11904: 0x8F41, + 33489 - 11904: 0xAD62, + 33490 - 11904: 0xAD5C, + 33491 - 11904: 0xAD64, + 33492 - 11904: 0xAD61, + 33493 - 11904: 0xD071, + 33494 - 11904: 0xD074, + 33495 - 11904: 0xAD5D, + 33496 - 11904: 0x99B1, + 33497 - 11904: 0xD06B, + 33499 - 11904: 0xAD56, + 33500 - 11904: 0xAD60, + 33502 - 11904: 0xAD63, + 33503 - 11904: 0xAD65, + 33504 - 11904: 0xD0A2, + 33505 - 11904: 0xD077, + 33506 - 11904: 0x8F49, + 33507 - 11904: 0xAD55, + 33508 - 11904: 0xD0A1, + 33509 - 11904: 0xAD59, + 33510 - 11904: 0xAD57, + 33511 - 11904: 0xAD52, + 33512 - 11904: 0xD06F, + 33514 - 11904: 0xD07E, + 33515 - 11904: 0xD073, + 33516 - 11904: 0xD076, + 33517 - 11904: 0xD0A5, + 33518 - 11904: 0xFA4D, + 33519 - 11904: 0xAD66, + 33520 - 11904: 0xD07D, + 33521 - 11904: 0xAD5E, + 33522 - 11904: 0xD078, + 33523 - 11904: 0xD0A4, + 33524 - 11904: 0xD075, + 33525 - 11904: 0xD079, + 33526 - 11904: 0xD07C, + 33527 - 11904: 0x9DE4, + 33528 - 11904: 0x8CB5, + 33529 - 11904: 0xD06D, + 33530 - 11904: 0xD0A3, + 33531 - 11904: 0xD07B, + 33532 - 11904: 0xFBE9, + 33533 - 11904: 0x9B54, + 33534 - 11904: 0xD06C, + 33535 - 11904: 0x99B2, + 33536 - 11904: 0xD070, + 33537 - 11904: 0xAD5F, + 33538 - 11904: 0xAD5A, + 33539 - 11904: 0xAD53, + 33540 - 11904: 0xAD58, + 33541 - 11904: 0xAD54, + 33542 - 11904: 0xAD67, + 33543 - 11904: 0xD06E, + 33544 - 11904: 0xD3A5, + 33545 - 11904: 0xAD5B, + 33547 - 11904: 0x9E68, + 33548 - 11904: 0xD07A, + 33549 - 11904: 0xCE41, + 33558 - 11904: 0xD3A8, + 33559 - 11904: 0xAFFA, + 33560 - 11904: 0x8F4A, + 33561 - 11904: 0xD376, + 33562 - 11904: 0x8F42, + 33563 - 11904: 0xD3A3, + 33564 - 11904: 0xD37D, + 33565 - 11904: 0x8F51, + 33566 - 11904: 0xD3B2, + 33568 - 11904: 0xD3AA, + 33570 - 11904: 0xD37E, + 33572 - 11904: 0xD3A9, + 33573 - 11904: 0xD378, + 33574 - 11904: 0xD37C, + 33575 - 11904: 0xD3B5, + 33576 - 11904: 0xAFFD, + 33577 - 11904: 0xD3AD, + 33578 - 11904: 0xD3A4, + 33579 - 11904: 0xAFED, + 33580 - 11904: 0xD3B3, + 33581 - 11904: 0xD374, + 33583 - 11904: 0xD3AC, + 33585 - 11904: 0xAFFC, + 33586 - 11904: 0xAFF7, + 33587 - 11904: 0xD373, + 33588 - 11904: 0xAFF5, + 33589 - 11904: 0xAFF4, + 33590 - 11904: 0xAFF9, + 33591 - 11904: 0xD3AB, + 33592 - 11904: 0xAFF1, + 33593 - 11904: 0xAFF8, + 33594 - 11904: 0xD072, + 33595 - 11904: 0xDB5C, + 33596 - 11904: 0xD3A6, + 33597 - 11904: 0x9846, + 33599 - 11904: 0xD37A, + 33600 - 11904: 0xAFFB, + 33601 - 11904: 0xD37B, + 33602 - 11904: 0xD3A1, + 33603 - 11904: 0xAFFE, + 33604 - 11904: 0xD375, + 33605 - 11904: 0xD3AF, + 33607 - 11904: 0xD3AE, + 33608 - 11904: 0xD3B6, + 33609 - 11904: 0xAFF3, + 33610 - 11904: 0xAFF0, + 33611 - 11904: 0xD3B4, + 33612 - 11904: 0xD3B0, + 33613 - 11904: 0xD3A7, + 33614 - 11904: 0xD3A2, + 33615 - 11904: 0xAFF6, + 33616 - 11904: 0xAFF2, + 33617 - 11904: 0xD377, + 33618 - 11904: 0xAFEE, + 33619 - 11904: 0xD3B1, + 33620 - 11904: 0xAFEF, + 33622 - 11904: 0xD379, + 33623 - 11904: 0x99B4, + 33634 - 11904: 0x8EF5, + 33635 - 11904: 0xFD55, + 33638 - 11904: 0x9CCD, + 33647 - 11904: 0x8978, + 33651 - 11904: 0xD75E, + 33652 - 11904: 0xD760, + 33653 - 11904: 0xD765, + 33654 - 11904: 0xD779, + 33655 - 11904: 0xB2FC, + 33656 - 11904: 0xB2F2, + 33658 - 11904: 0xD75D, + 33659 - 11904: 0xB2FD, + 33660 - 11904: 0xB2FE, + 33661 - 11904: 0xD768, + 33662 - 11904: 0xD76F, + 33663 - 11904: 0xD775, + 33665 - 11904: 0xD762, + 33667 - 11904: 0xD769, + 33669 - 11904: 0x8F53, + 33670 - 11904: 0xB340, + 33671 - 11904: 0xD777, + 33672 - 11904: 0xD772, + 33673 - 11904: 0xB2FA, + 33674 - 11904: 0xB2F8, + 33675 - 11904: 0xD76E, + 33676 - 11904: 0xD76A, + 33677 - 11904: 0xD75C, + 33678 - 11904: 0xB2EF, + 33679 - 11904: 0xD761, + 33680 - 11904: 0xD759, + 33681 - 11904: 0x8F6F, + 33682 - 11904: 0xB2F7, + 33683 - 11904: 0xB2F9, + 33684 - 11904: 0xD766, + 33685 - 11904: 0xD763, + 33686 - 11904: 0xB2F4, + 33687 - 11904: 0xD773, + 33688 - 11904: 0xB2F1, + 33689 - 11904: 0xD764, + 33690 - 11904: 0xD77A, + 33691 - 11904: 0xD76C, + 33692 - 11904: 0x8E63, + 33693 - 11904: 0xD76B, + 33694 - 11904: 0xB2F0, + 33696 - 11904: 0xB2FB, + 33698 - 11904: 0xB2F3, + 33699 - 11904: 0xD75A, + 33700 - 11904: 0xD75F, + 33701 - 11904: 0xD770, + 33702 - 11904: 0xD776, + 33703 - 11904: 0xB341, + 33704 - 11904: 0xD75B, + 33705 - 11904: 0xD767, + 33706 - 11904: 0xD76D, + 33707 - 11904: 0xB2F6, + 33708 - 11904: 0x8F56, + 33710 - 11904: 0xD778, + 33711 - 11904: 0xD771, + 33712 - 11904: 0xD774, + 33721 - 11904: 0xFE76, + 33725 - 11904: 0xB2F5, + 33726 - 11904: 0x9FC6, + 33727 - 11904: 0xDB6C, + 33728 - 11904: 0xDB60, + 33729 - 11904: 0xB5D7, + 33730 - 11904: 0xDB7D, + 33731 - 11904: 0xDBA7, + 33732 - 11904: 0xDBAA, + 33733 - 11904: 0xB5D5, + 33734 - 11904: 0xDB68, + 33735 - 11904: 0xDBA3, + 33736 - 11904: 0xDB69, + 33737 - 11904: 0xDB77, + 33738 - 11904: 0xB5E2, + 33739 - 11904: 0xDB73, + 33740 - 11904: 0xB5DF, + 33741 - 11904: 0xFAAC, + 33742 - 11904: 0xDB74, + 33743 - 11904: 0xDB5D, + 33745 - 11904: 0xDBA4, + 33747 - 11904: 0x8F58, + 33748 - 11904: 0xB5E8, + 33749 - 11904: 0xDBA1, + 33750 - 11904: 0xDB75, + 33751 - 11904: 0xDBAC, + 33752 - 11904: 0xDB70, + 33753 - 11904: 0xDFC8, + 33755 - 11904: 0xDBAF, + 33756 - 11904: 0xB5E6, + 33757 - 11904: 0xDB6E, + 33758 - 11904: 0xDB7A, + 33759 - 11904: 0xB5E9, + 33760 - 11904: 0xB5D4, + 33761 - 11904: 0xDB72, + 33762 - 11904: 0xDBAD, + 33763 - 11904: 0xDB6B, + 33764 - 11904: 0xDB64, + 33765 - 11904: 0xDB6F, + 33767 - 11904: 0xDB63, + 33768 - 11904: 0xDB61, + 33769 - 11904: 0xB5D0, + 33770 - 11904: 0xDBA5, + 33771 - 11904: 0xDB6A, + 33772 - 11904: 0xDBA8, + 33773 - 11904: 0x9848, + 33774 - 11904: 0xDBA9, + 33775 - 11904: 0xB5D8, + 33776 - 11904: 0xB5DD, + 33777 - 11904: 0xB5D9, + 33778 - 11904: 0xB5E1, + 33779 - 11904: 0xDB7E, + 33780 - 11904: 0xB5DA, + 33781 - 11904: 0xDB76, + 33782 - 11904: 0xDB66, + 33784 - 11904: 0xB5D2, + 33785 - 11904: 0xDB5E, + 33786 - 11904: 0xDBA2, + 33787 - 11904: 0xDBAB, + 33788 - 11904: 0xDB65, + 33789 - 11904: 0xB5E0, + 33790 - 11904: 0xDBB0, + 33791 - 11904: 0xDB71, + 33793 - 11904: 0xDB6D, + 33795 - 11904: 0xB5D1, + 33796 - 11904: 0xB5E5, + 33797 - 11904: 0x99B7, + 33798 - 11904: 0xDB7C, + 33799 - 11904: 0xB5E7, + 33801 - 11904: 0xDB78, + 33802 - 11904: 0xB5DC, + 33803 - 11904: 0xB5D6, + 33804 - 11904: 0xB5DE, + 33805 - 11904: 0xB5D3, + 33806 - 11904: 0xB5E4, + 33807 - 11904: 0xDB79, + 33808 - 11904: 0xDB67, + 33809 - 11904: 0xDB7B, + 33810 - 11904: 0xDB62, + 33811 - 11904: 0xDBA6, + 33812 - 11904: 0x9665, + 33814 - 11904: 0xFA6C, + 33816 - 11904: 0x9DE7, + 33819 - 11904: 0xDBAE, + 33820 - 11904: 0x9E62, + 33824 - 11904: 0x96CC, + 33825 - 11904: 0x8E67, + 33827 - 11904: 0xDB5F, + 33828 - 11904: 0xFC75, + 33830 - 11904: 0x987E, + 33833 - 11904: 0xDFC7, + 33835 - 11904: 0xDFDD, + 33836 - 11904: 0xB855, + 33837 - 11904: 0xDFCC, + 33838 - 11904: 0xFDB9, + 33839 - 11904: 0xDFCA, + 33840 - 11904: 0xDFB5, + 33841 - 11904: 0xB8A9, + 33842 - 11904: 0xDFC5, + 33843 - 11904: 0xDFD9, + 33844 - 11904: 0xDFC1, + 33845 - 11904: 0xB8B1, + 33846 - 11904: 0xDFD8, + 33847 - 11904: 0xDFBF, + 33848 - 11904: 0xB5E3, + 33849 - 11904: 0xDFCF, + 33850 - 11904: 0xDFC0, + 33851 - 11904: 0xDFD6, + 33852 - 11904: 0xB8B0, + 33853 - 11904: 0xB8A8, + 33854 - 11904: 0x97FC, + 33855 - 11904: 0xDFAA, + 33856 - 11904: 0xDFB2, + 33858 - 11904: 0xDFCB, + 33859 - 11904: 0xDFC3, + 33860 - 11904: 0xDFDC, + 33861 - 11904: 0xDFC6, + 33862 - 11904: 0xB8B6, + 33863 - 11904: 0xDFD7, + 33864 - 11904: 0x98F9, + 33865 - 11904: 0xB8AD, + 33866 - 11904: 0x8F66, + 33867 - 11904: 0xDFC9, + 33868 - 11904: 0xDFD1, + 33869 - 11904: 0xDFB6, + 33870 - 11904: 0xDFD0, + 33872 - 11904: 0xDFE1, + 33873 - 11904: 0xDFB1, + 33874 - 11904: 0xDFD2, + 33875 - 11904: 0x956E, + 33876 - 11904: 0xDFDF, + 33877 - 11904: 0x9245, + 33878 - 11904: 0xDFAB, + 33879 - 11904: 0xB5DB, + 33880 - 11904: 0x8F60, + 33881 - 11904: 0xDFB9, + 33882 - 11904: 0xDFB8, + 33883 - 11904: 0xB8AF, + 33884 - 11904: 0x9ED1, + 33885 - 11904: 0xDFBC, + 33886 - 11904: 0xDFBE, + 33887 - 11904: 0xDFCD, + 33888 - 11904: 0xDFDE, + 33889 - 11904: 0xB8B2, + 33890 - 11904: 0xFECD, + 33891 - 11904: 0xB8B3, + 33892 - 11904: 0x99B9, + 33893 - 11904: 0xDFB0, + 33894 - 11904: 0xB8AB, + 33895 - 11904: 0xDFB4, + 33896 - 11904: 0xDFDA, + 33897 - 11904: 0xB8B4, + 33899 - 11904: 0xB8AC, + 33900 - 11904: 0xB8AE, + 33901 - 11904: 0xB8B5, + 33902 - 11904: 0xDFE0, + 33903 - 11904: 0xDFD3, + 33904 - 11904: 0xDFCE, + 33905 - 11904: 0x8F62, + 33906 - 11904: 0x974C, + 33907 - 11904: 0xDFBB, + 33908 - 11904: 0xDFBA, + 33909 - 11904: 0xB8AA, + 33910 - 11904: 0xDFAC, + 33911 - 11904: 0xB8A7, + 33912 - 11904: 0xDFC4, + 33913 - 11904: 0xDFAD, + 33914 - 11904: 0xDFC2, + 33917 - 11904: 0xDFB7, + 33918 - 11904: 0xDFDB, + 33919 - 11904: 0x91C7, + 33920 - 11904: 0x955F, + 33922 - 11904: 0xB8A6, + 33924 - 11904: 0x87AB, + 33926 - 11904: 0xDFB3, + 33928 - 11904: 0x99BB, + 33933 - 11904: 0xDFAF, + 33934 - 11904: 0xDFD5, + 33935 - 11904: 0xDFAE, + 33936 - 11904: 0xBB60, + 33937 - 11904: 0xE3D3, + 33938 - 11904: 0x8E6D, + 33939 - 11904: 0x8F71, + 33940 - 11904: 0xE3C2, + 33942 - 11904: 0x94CB, + 33943 - 11904: 0xE3AC, + 33944 - 11904: 0xE3CA, + 33945 - 11904: 0xBB58, + 33946 - 11904: 0xE3BB, + 33947 - 11904: 0xE3C5, + 33948 - 11904: 0xBB5B, + 33949 - 11904: 0xE3BE, + 33950 - 11904: 0xBB59, + 33951 - 11904: 0xE3AF, + 33952 - 11904: 0xE3CD, + 33953 - 11904: 0xE3AE, + 33954 - 11904: 0xE3C1, + 33955 - 11904: 0x95B1, + 33956 - 11904: 0xE3AD, + 33959 - 11904: 0xE3BF, + 33960 - 11904: 0xE3C8, + 33961 - 11904: 0xE3C6, + 33962 - 11904: 0xE3BA, + 33963 - 11904: 0xE3B5, + 33964 - 11904: 0xE3B3, + 33965 - 11904: 0x9AF2, + 33966 - 11904: 0xE3B4, + 33967 - 11904: 0xE3C7, + 33968 - 11904: 0xE3D2, + 33969 - 11904: 0xE3BC, + 33970 - 11904: 0xBB5A, + 33972 - 11904: 0xE3B7, + 33974 - 11904: 0xE3CB, + 33976 - 11904: 0xBB5D, + 33977 - 11904: 0xE3B6, + 33978 - 11904: 0xE3B0, + 33979 - 11904: 0xE3C0, + 33980 - 11904: 0xBB61, + 33981 - 11904: 0x96C3, + 33982 - 11904: 0x99BD, + 33983 - 11904: 0xBB55, + 33984 - 11904: 0xBB5E, + 33985 - 11904: 0xE3B8, + 33986 - 11904: 0xE3B2, + 33988 - 11904: 0xBB57, + 33989 - 11904: 0xDFD4, + 33990 - 11904: 0xBB56, + 33991 - 11904: 0xE3C3, + 33993 - 11904: 0xBB54, + 33994 - 11904: 0xBB63, + 33995 - 11904: 0xBB5C, + 33996 - 11904: 0xE3C4, + 33997 - 11904: 0xE3B9, + 33998 - 11904: 0xE3B1, + 33999 - 11904: 0xE3CC, + 34000 - 11904: 0xE3BD, + 34001 - 11904: 0xBB62, + 34002 - 11904: 0xE3D0, + 34003 - 11904: 0xBB5F, + 34004 - 11904: 0xE3CF, + 34006 - 11904: 0xE3C9, + 34007 - 11904: 0xE3CE, + 34010 - 11904: 0xA0CF, + 34011 - 11904: 0xE3D1, + 34014 - 11904: 0x8F6D, + 34017 - 11904: 0x99BE, + 34018 - 11904: 0x8EF4, + 34020 - 11904: 0x8F72, + 34021 - 11904: 0x95E4, + 34023 - 11904: 0xE773, + 34024 - 11904: 0xE774, + 34025 - 11904: 0xE767, + 34026 - 11904: 0xE766, + 34027 - 11904: 0xE762, + 34028 - 11904: 0xBDB4, + 34030 - 11904: 0xBDAC, + 34031 - 11904: 0xE776, + 34032 - 11904: 0xE775, + 34033 - 11904: 0xDFA9, + 34034 - 11904: 0xE75F, + 34035 - 11904: 0xE763, + 34036 - 11904: 0xE75D, + 34038 - 11904: 0xE770, + 34039 - 11904: 0xE761, + 34040 - 11904: 0x99BF, + 34041 - 11904: 0xE777, + 34042 - 11904: 0xE75A, + 34043 - 11904: 0xE758, + 34044 - 11904: 0xE764, + 34045 - 11904: 0xE76E, + 34046 - 11904: 0xE769, + 34047 - 11904: 0xBDB6, + 34048 - 11904: 0xE74F, + 34050 - 11904: 0xE76D, + 34051 - 11904: 0x9244, + 34052 - 11904: 0x87D7, + 34053 - 11904: 0xFBA5, + 34054 - 11904: 0xBDB7, + 34055 - 11904: 0xDFBD, + 34056 - 11904: 0xE75B, + 34057 - 11904: 0xE752, + 34058 - 11904: 0xE755, + 34059 - 11904: 0xE77B, + 34060 - 11904: 0xE75C, + 34061 - 11904: 0xE753, + 34062 - 11904: 0xE751, + 34063 - 11904: 0xE74E, + 34064 - 11904: 0x99C0, + 34065 - 11904: 0xBDB0, + 34066 - 11904: 0xE765, + 34067 - 11904: 0xBDAF, + 34068 - 11904: 0xBDB3, + 34069 - 11904: 0xE760, + 34070 - 11904: 0xE768, + 34071 - 11904: 0xBDA9, + 34072 - 11904: 0xE778, + 34073 - 11904: 0xE77C, + 34074 - 11904: 0xBDAB, + 34076 - 11904: 0xE757, + 34077 - 11904: 0xE76B, + 34078 - 11904: 0xE76F, + 34079 - 11904: 0xE754, + 34080 - 11904: 0xE779, + 34081 - 11904: 0xBDB2, + 34083 - 11904: 0xBDB1, + 34084 - 11904: 0xE74C, + 34085 - 11904: 0xBDB5, + 34086 - 11904: 0xE772, + 34087 - 11904: 0xE756, + 34088 - 11904: 0xE76A, + 34089 - 11904: 0xE750, + 34090 - 11904: 0xE75E, + 34091 - 11904: 0xE759, + 34092 - 11904: 0xBDAD, + 34093 - 11904: 0xBDAE, + 34094 - 11904: 0xE76C, + 34095 - 11904: 0xE77D, + 34096 - 11904: 0xE77A, + 34097 - 11904: 0xE771, + 34099 - 11904: 0xFDB4, + 34100 - 11904: 0x8F77, + 34104 - 11904: 0x99C1, + 34107 - 11904: 0xE74D, + 34109 - 11904: 0xBDAA, + 34110 - 11904: 0xEB49, + 34112 - 11904: 0xEB40, + 34113 - 11904: 0xEB43, + 34114 - 11904: 0xFAB9, + 34115 - 11904: 0xBFBB, + 34116 - 11904: 0xEB45, + 34117 - 11904: 0xEAF9, + 34118 - 11904: 0xEB41, + 34119 - 11904: 0xEB47, + 34120 - 11904: 0xBFB8, + 34121 - 11904: 0xBFBC, + 34122 - 11904: 0xBFB6, + 34123 - 11904: 0x8F40, + 34124 - 11904: 0xFA44, + 34125 - 11904: 0xEAFB, + 34126 - 11904: 0xEB4C, + 34129 - 11904: 0xEB46, + 34130 - 11904: 0x99C2, + 34131 - 11904: 0xEAFC, + 34132 - 11904: 0xEB55, + 34133 - 11904: 0xEB4F, + 34134 - 11904: 0xEAF8, + 34135 - 11904: 0xEE46, + 34136 - 11904: 0xEAFE, + 34137 - 11904: 0xBFB7, + 34138 - 11904: 0x8F5C, + 34139 - 11904: 0xEB4A, + 34141 - 11904: 0xEB54, + 34142 - 11904: 0xBFBF, + 34143 - 11904: 0x8CBD, + 34144 - 11904: 0xEB51, + 34145 - 11904: 0xEAFD, + 34146 - 11904: 0xEB44, + 34147 - 11904: 0xEB48, + 34148 - 11904: 0xEB42, + 34149 - 11904: 0xEB56, + 34150 - 11904: 0xEB53, + 34151 - 11904: 0xEB50, + 34152 - 11904: 0xBFB9, + 34153 - 11904: 0xBFBA, + 34154 - 11904: 0xBFBE, + 34155 - 11904: 0xEAFA, + 34156 - 11904: 0xEB57, + 34157 - 11904: 0xBFBD, + 34158 - 11904: 0xEB4D, + 34159 - 11904: 0x99C4, + 34160 - 11904: 0x99C5, + 34161 - 11904: 0xEB4B, + 34163 - 11904: 0x8F7B, + 34165 - 11904: 0xEB4E, + 34166 - 11904: 0xEE53, + 34167 - 11904: 0xEE40, + 34168 - 11904: 0xEE45, + 34169 - 11904: 0xEE52, + 34170 - 11904: 0xEE44, + 34171 - 11904: 0xEDFB, + 34172 - 11904: 0xEE41, + 34174 - 11904: 0xC1A2, + 34176 - 11904: 0xEDF4, + 34177 - 11904: 0xEE4D, + 34178 - 11904: 0xEE4F, + 34179 - 11904: 0xEDF3, + 34180 - 11904: 0xC1A1, + 34181 - 11904: 0xEE51, + 34182 - 11904: 0xEE49, + 34183 - 11904: 0xC1A8, + 34184 - 11904: 0xEE50, + 34185 - 11904: 0xEE42, + 34186 - 11904: 0xC1AA, + 34187 - 11904: 0xEDF9, + 34188 - 11904: 0xEB52, + 34189 - 11904: 0xEE4A, + 34190 - 11904: 0xEE47, + 34191 - 11904: 0xEDF5, + 34192 - 11904: 0xEE55, + 34193 - 11904: 0xC1A4, + 34195 - 11904: 0x8776, + 34196 - 11904: 0xC1A5, + 34197 - 11904: 0xEDF7, + 34198 - 11904: 0xEE48, + 34199 - 11904: 0x8CB6, + 34200 - 11904: 0xEE54, + 34201 - 11904: 0xEE4B, + 34202 - 11904: 0xEDFD, + 34203 - 11904: 0xC1A7, + 34204 - 11904: 0xC1A3, + 34205 - 11904: 0xEE4C, + 34206 - 11904: 0xEDFE, + 34207 - 11904: 0xEE56, + 34208 - 11904: 0xEDF8, + 34209 - 11904: 0xEE43, + 34210 - 11904: 0xEE4E, + 34211 - 11904: 0xEDFA, + 34212 - 11904: 0xEDFC, + 34214 - 11904: 0xC2CB, + 34215 - 11904: 0xEDF6, + 34216 - 11904: 0xC1A9, + 34217 - 11904: 0xC2C4, + 34218 - 11904: 0xC17E, + 34223 - 11904: 0xC1A6, + 34224 - 11904: 0xC2C8, + 34225 - 11904: 0xF0B3, + 34227 - 11904: 0xF0A9, + 34228 - 11904: 0xF0A4, + 34229 - 11904: 0xF0AA, + 34230 - 11904: 0xF0B4, + 34231 - 11904: 0xF0B8, + 34232 - 11904: 0xF0B7, + 34233 - 11904: 0xC2CA, + 34234 - 11904: 0xC2C9, + 34237 - 11904: 0xF0AB, + 34238 - 11904: 0xF0B9, + 34239 - 11904: 0xF0AE, + 34240 - 11904: 0xF0A6, + 34241 - 11904: 0x8FA3, + 34242 - 11904: 0xF0A8, + 34243 - 11904: 0xF0A7, + 34244 - 11904: 0xF0AD, + 34245 - 11904: 0xF0B2, + 34246 - 11904: 0xF0A5, + 34247 - 11904: 0xF0AC, + 34248 - 11904: 0xF0B1, + 34249 - 11904: 0xC2C7, + 34251 - 11904: 0xF0AF, + 34253 - 11904: 0xC2C5, + 34254 - 11904: 0xF0B0, + 34255 - 11904: 0xC2C3, + 34256 - 11904: 0xC2C6, + 34257 - 11904: 0xF2D5, + 34258 - 11904: 0xF0B5, + 34261 - 11904: 0xC3C2, + 34262 - 11904: 0x8CCE, + 34263 - 11904: 0xF2CD, + 34264 - 11904: 0xF2D1, + 34265 - 11904: 0xF2C9, + 34266 - 11904: 0xF2CC, + 34268 - 11904: 0xF2D4, + 34269 - 11904: 0xC3C0, + 34270 - 11904: 0xF2D9, + 34271 - 11904: 0xF2D2, + 34272 - 11904: 0x99C6, + 34273 - 11904: 0xF2CA, + 34274 - 11904: 0xF2DA, + 34275 - 11904: 0xF2D3, + 34276 - 11904: 0xC3C3, + 34277 - 11904: 0xC3C4, + 34278 - 11904: 0xF2D7, + 34280 - 11904: 0xF2CB, + 34281 - 11904: 0xC3BF, + 34282 - 11904: 0xC3C1, + 34283 - 11904: 0xF2C6, + 34284 - 11904: 0xF2CE, + 34285 - 11904: 0xF2C8, + 34286 - 11904: 0x96CD, + 34287 - 11904: 0xF2D8, + 34288 - 11904: 0xF2D6, + 34289 - 11904: 0xF2C7, + 34290 - 11904: 0xF2CF, + 34294 - 11904: 0xF4BE, + 34295 - 11904: 0xC3C5, + 34296 - 11904: 0xF2D0, + 34297 - 11904: 0xC4A7, + 34298 - 11904: 0xC4A9, + 34299 - 11904: 0xC4A6, + 34300 - 11904: 0x96C7, + 34301 - 11904: 0xF4C3, + 34302 - 11904: 0xF4BB, + 34303 - 11904: 0xF4B9, + 34304 - 11904: 0xF4BD, + 34305 - 11904: 0xF4BA, + 34306 - 11904: 0x8FA5, + 34308 - 11904: 0xF4BF, + 34309 - 11904: 0xF4C1, + 34310 - 11904: 0xC4AA, + 34311 - 11904: 0xC4AC, + 34313 - 11904: 0xF4C0, + 34314 - 11904: 0xC4AD, + 34315 - 11904: 0xC4AB, + 34316 - 11904: 0xF4C2, + 34317 - 11904: 0xFABB, + 34319 - 11904: 0x8C61, + 34320 - 11904: 0x9570, + 34321 - 11904: 0xC4A8, + 34323 - 11904: 0x87AF, + 34324 - 11904: 0x9368, + 34326 - 11904: 0x8F7E, + 34327 - 11904: 0xC4F4, + 34328 - 11904: 0xF5F1, + 34329 - 11904: 0xF5F7, + 34330 - 11904: 0xC4F6, + 34331 - 11904: 0xF4BC, + 34332 - 11904: 0xF5F6, + 34334 - 11904: 0xF5FD, + 34335 - 11904: 0xF5F4, + 34336 - 11904: 0xF5FB, + 34337 - 11904: 0xF5FA, + 34338 - 11904: 0xF4B8, + 34339 - 11904: 0xF5F5, + 34340 - 11904: 0xF0B6, + 34341 - 11904: 0xF5FE, + 34342 - 11904: 0xF5F3, + 34343 - 11904: 0xF5F8, + 34344 - 11904: 0x8FAA, + 34345 - 11904: 0xF5FC, + 34346 - 11904: 0xF5F2, + 34348 - 11904: 0xF74A, + 34349 - 11904: 0xC4F5, + 34350 - 11904: 0xF5F9, + 34351 - 11904: 0xA050, + 34353 - 11904: 0xF7F4, + 34354 - 11904: 0xF74B, + 34355 - 11904: 0xF749, + 34356 - 11904: 0xF747, + 34357 - 11904: 0xF748, + 34358 - 11904: 0xF74C, + 34360 - 11904: 0xC5D9, + 34361 - 11904: 0xF7F2, + 34362 - 11904: 0xF7F0, + 34363 - 11904: 0xF7F5, + 34364 - 11904: 0xF7F3, + 34366 - 11904: 0xF7F6, + 34367 - 11904: 0xC5DA, + 34368 - 11904: 0xF7F1, + 34370 - 11904: 0x90D3, + 34371 - 11904: 0xF8BC, + 34373 - 11904: 0x9556, + 34374 - 11904: 0xF945, + 34375 - 11904: 0xF946, + 34376 - 11904: 0xF947, + 34379 - 11904: 0xF9C7, + 34380 - 11904: 0xF9BD, + 34381 - 11904: 0xCA4F, + 34382 - 11904: 0xAAEA, + 34384 - 11904: 0xAD68, + 34386 - 11904: 0xD3B8, + 34387 - 11904: 0xD3B7, + 34388 - 11904: 0xB040, + 34389 - 11904: 0xB342, + 34390 - 11904: 0xD77C, + 34393 - 11904: 0xD77B, + 34395 - 11904: 0xB5EA, + 34396 - 11904: 0xB8B8, + 34398 - 11904: 0xB8B7, + 34399 - 11904: 0xB8B9, + 34401 - 11904: 0xE3D4, + 34402 - 11904: 0xE77E, + 34403 - 11904: 0xEB58, + 34404 - 11904: 0xEB5A, + 34405 - 11904: 0xEB59, + 34407 - 11904: 0xC1AB, + 34408 - 11904: 0xEE57, + 34409 - 11904: 0xF0BA, + 34410 - 11904: 0xF9A5, + 34411 - 11904: 0xA6E4, + 34412 - 11904: 0x8FB8, + 34413 - 11904: 0xCDC9, + 34414 - 11904: 0xCDCA, + 34415 - 11904: 0xCDC8, + 34416 - 11904: 0xCDC7, + 34417 - 11904: 0xAAEB, + 34418 - 11904: 0x99C8, + 34419 - 11904: 0xD0A9, + 34420 - 11904: 0xD0A7, + 34423 - 11904: 0xD0A6, + 34425 - 11904: 0xAD69, + 34426 - 11904: 0xAD6B, + 34427 - 11904: 0xAD6A, + 34428 - 11904: 0xD0A8, + 34430 - 11904: 0x8FAF, + 34437 - 11904: 0xD3C4, + 34438 - 11904: 0xD3C1, + 34439 - 11904: 0xD3BF, + 34442 - 11904: 0xB041, + 34443 - 11904: 0xD3C2, + 34444 - 11904: 0xB046, + 34445 - 11904: 0xD3BC, + 34446 - 11904: 0xD3CB, + 34448 - 11904: 0xD3CD, + 34449 - 11904: 0xD3BD, + 34450 - 11904: 0x99C9, + 34451 - 11904: 0xB043, + 34452 - 11904: 0xD3CE, + 34453 - 11904: 0xD3C9, + 34454 - 11904: 0xD3BB, + 34455 - 11904: 0xD3C0, + 34456 - 11904: 0xD3CA, + 34457 - 11904: 0xD3C6, + 34458 - 11904: 0xD3C3, + 34460 - 11904: 0xB048, + 34461 - 11904: 0xD3CC, + 34462 - 11904: 0xD3BE, + 34464 - 11904: 0x9579, + 34465 - 11904: 0xD3C7, + 34466 - 11904: 0xD3B9, + 34467 - 11904: 0xB047, + 34468 - 11904: 0xB044, + 34469 - 11904: 0xD3C5, + 34471 - 11904: 0xD3C8, + 34472 - 11904: 0xD3BA, + 34473 - 11904: 0xB045, + 34474 - 11904: 0xB042, + 34477 - 11904: 0x9F49, + 34479 - 11904: 0xB34C, + 34480 - 11904: 0xD7A5, + 34481 - 11904: 0xB34B, + 34482 - 11904: 0x99CA, + 34483 - 11904: 0xD7A8, + 34484 - 11904: 0xD7AB, + 34485 - 11904: 0xB348, + 34486 - 11904: 0xB346, + 34487 - 11904: 0xD77E, + 34488 - 11904: 0xD7A9, + 34489 - 11904: 0xD7A7, + 34490 - 11904: 0xD7A4, + 34491 - 11904: 0xD7AC, + 34492 - 11904: 0xD7AD, + 34493 - 11904: 0xD7AF, + 34494 - 11904: 0xD7B0, + 34495 - 11904: 0xD77D, + 34496 - 11904: 0xB345, + 34497 - 11904: 0xD7A2, + 34498 - 11904: 0xD7A1, + 34499 - 11904: 0xD7AE, + 34500 - 11904: 0xB347, + 34501 - 11904: 0xD7A3, + 34502 - 11904: 0xB349, + 34503 - 11904: 0xB344, + 34504 - 11904: 0xD7A6, + 34505 - 11904: 0xB34D, + 34507 - 11904: 0xB34A, + 34508 - 11904: 0xD7AA, + 34512 - 11904: 0xB5F1, + 34513 - 11904: 0xDBBF, + 34515 - 11904: 0xDBB4, + 34516 - 11904: 0xB5EE, + 34518 - 11904: 0xDFE7, + 34519 - 11904: 0xDBBD, + 34520 - 11904: 0xDBB1, + 34521 - 11904: 0xB5EC, + 34522 - 11904: 0xDBB6, + 34523 - 11904: 0xB5EF, + 34524 - 11904: 0xDBBA, + 34525 - 11904: 0xDBB8, + 34526 - 11904: 0xB5F2, + 34527 - 11904: 0xB5EB, + 34530 - 11904: 0xDBB2, + 34531 - 11904: 0xDBB5, + 34532 - 11904: 0xB5F0, + 34534 - 11904: 0xDBB3, + 34536 - 11904: 0xDBBE, + 34537 - 11904: 0xDBBC, + 34538 - 11904: 0xDBB7, + 34539 - 11904: 0xDBB9, + 34540 - 11904: 0xDBBB, + 34541 - 11904: 0xB5ED, + 34543 - 11904: 0x99CB, + 34549 - 11904: 0xDFE8, + 34550 - 11904: 0xDFEE, + 34551 - 11904: 0xDFE4, + 34552 - 11904: 0xDFEA, + 34553 - 11904: 0xB8BA, + 34554 - 11904: 0xDFE6, + 34555 - 11904: 0xB8C0, + 34558 - 11904: 0xB8BF, + 34560 - 11904: 0xB8BE, + 34561 - 11904: 0xDFED, + 34562 - 11904: 0xB8C1, + 34563 - 11904: 0xB8C2, + 34564 - 11904: 0xDFE3, + 34565 - 11904: 0xDFF0, + 34566 - 11904: 0xB8C3, + 34567 - 11904: 0xB8BD, + 34568 - 11904: 0xB8BC, + 34569 - 11904: 0xDFEC, + 34570 - 11904: 0xB8C4, + 34571 - 11904: 0xDFE2, + 34572 - 11904: 0xDFE5, + 34573 - 11904: 0xDFEF, + 34574 - 11904: 0xDFEB, + 34577 - 11904: 0xE3F4, + 34578 - 11904: 0xE3E9, + 34579 - 11904: 0xB8BB, + 34584 - 11904: 0xBB6A, + 34585 - 11904: 0xE3DD, + 34586 - 11904: 0xE3F2, + 34587 - 11904: 0xE3DE, + 34588 - 11904: 0xBB65, + 34590 - 11904: 0xE3DB, + 34592 - 11904: 0xE3E4, + 34593 - 11904: 0xE3DC, + 34594 - 11904: 0xBB67, + 34595 - 11904: 0xE3D6, + 34596 - 11904: 0xE3F1, + 34597 - 11904: 0xBB68, + 34598 - 11904: 0xE3EE, + 34599 - 11904: 0xE3EF, + 34600 - 11904: 0xE3D7, + 34601 - 11904: 0xBB6D, + 34602 - 11904: 0xE3E6, + 34604 - 11904: 0xE3E0, + 34605 - 11904: 0xE3E7, + 34606 - 11904: 0xE3DA, + 34608 - 11904: 0xE3F3, + 34609 - 11904: 0xE3EB, + 34610 - 11904: 0xE3E5, + 34611 - 11904: 0xE3D5, + 34612 - 11904: 0xBB69, + 34613 - 11904: 0xE3EC, + 34615 - 11904: 0xBB6C, + 34616 - 11904: 0xE3F0, + 34618 - 11904: 0xE3EA, + 34619 - 11904: 0xBB66, + 34620 - 11904: 0xE3E8, + 34622 - 11904: 0xE3E2, + 34623 - 11904: 0xBB64, + 34624 - 11904: 0xE3D9, + 34625 - 11904: 0xE3E1, + 34626 - 11904: 0xE3ED, + 34627 - 11904: 0xE3DF, + 34630 - 11904: 0xE3E3, + 34636 - 11904: 0xBDC1, + 34637 - 11904: 0xDFE9, + 34638 - 11904: 0xE7B2, + 34639 - 11904: 0xE7BB, + 34640 - 11904: 0xE7B1, + 34641 - 11904: 0xE7AD, + 34642 - 11904: 0xE7AA, + 34643 - 11904: 0xBDC2, + 34644 - 11904: 0xE7A8, + 34645 - 11904: 0xBB6B, + 34646 - 11904: 0xE7A1, + 34647 - 11904: 0xBDC0, + 34648 - 11904: 0xE7A7, + 34649 - 11904: 0xBDBF, + 34650 - 11904: 0xE7AC, + 34651 - 11904: 0xE7A9, + 34652 - 11904: 0xE7B9, + 34653 - 11904: 0xE7B4, + 34654 - 11904: 0xE7AE, + 34655 - 11904: 0xE7B3, + 34656 - 11904: 0xBDBB, + 34657 - 11904: 0xE7AB, + 34658 - 11904: 0xE7BE, + 34659 - 11904: 0xE7A2, + 34660 - 11904: 0xE7A3, + 34661 - 11904: 0xE7BA, + 34662 - 11904: 0xBDBC, + 34663 - 11904: 0xE7BF, + 34664 - 11904: 0xBDBE, + 34665 - 11904: 0xE7C0, + 34666 - 11904: 0xE7B0, + 34667 - 11904: 0xE3D8, + 34668 - 11904: 0xE7B6, + 34669 - 11904: 0xE7AF, + 34670 - 11904: 0xE7B8, + 34671 - 11904: 0xE7B5, + 34672 - 11904: 0x9DD5, + 34673 - 11904: 0x8FB0, + 34675 - 11904: 0xE7A6, + 34676 - 11904: 0xBDB9, + 34677 - 11904: 0xE7BD, + 34678 - 11904: 0xBDBA, + 34679 - 11904: 0xE7A4, + 34680 - 11904: 0xBDBD, + 34681 - 11904: 0xEB64, + 34682 - 11904: 0xE7B7, + 34683 - 11904: 0xE7BC, + 34685 - 11904: 0xFA7A, + 34689 - 11904: 0xEB61, + 34690 - 11904: 0xBDB8, + 34691 - 11904: 0xBFC0, + 34692 - 11904: 0xEB6B, + 34693 - 11904: 0xEB67, + 34694 - 11904: 0x9E5F, + 34695 - 11904: 0xEB65, + 34696 - 11904: 0xEB60, + 34697 - 11904: 0xEB6F, + 34699 - 11904: 0x99CD, + 34700 - 11904: 0xA0C9, + 34701 - 11904: 0xBFC4, + 34703 - 11904: 0xEB5C, + 34704 - 11904: 0xEB68, + 34705 - 11904: 0xEB69, + 34706 - 11904: 0xEB5F, + 34707 - 11904: 0xEB5E, + 34708 - 11904: 0xEB6C, + 34710 - 11904: 0xEB62, + 34711 - 11904: 0xEB5D, + 34712 - 11904: 0xEB63, + 34714 - 11904: 0xEB6E, + 34715 - 11904: 0xEB5B, + 34716 - 11904: 0xEB6D, + 34717 - 11904: 0xEB6A, + 34718 - 11904: 0xBFC2, + 34719 - 11904: 0xBFC1, + 34722 - 11904: 0xBFC3, + 34723 - 11904: 0xEB66, + 34724 - 11904: 0xF0CB, + 34725 - 11904: 0x9ADB, + 34729 - 11904: 0xA0C6, + 34730 - 11904: 0xEE59, + 34731 - 11904: 0xC1B1, + 34732 - 11904: 0xEE5D, + 34733 - 11904: 0xEE5A, + 34734 - 11904: 0xEE61, + 34735 - 11904: 0xEE67, + 34736 - 11904: 0xEE5C, + 34737 - 11904: 0x8FB4, + 34738 - 11904: 0xEE70, + 34739 - 11904: 0xC1AE, + 34740 - 11904: 0xEE6A, + 34741 - 11904: 0xEE5F, + 34742 - 11904: 0xEE6B, + 34743 - 11904: 0xEE66, + 34744 - 11904: 0xEE6D, + 34745 - 11904: 0xEE5E, + 34746 - 11904: 0xC1B3, + 34747 - 11904: 0xC1B2, + 34748 - 11904: 0xEE60, + 34749 - 11904: 0xEE6E, + 34750 - 11904: 0xEE58, + 34751 - 11904: 0xEE6C, + 34752 - 11904: 0xC1AC, + 34753 - 11904: 0xA0D7, + 34754 - 11904: 0xEE64, + 34755 - 11904: 0xEE63, + 34756 - 11904: 0xEE68, + 34757 - 11904: 0xEE5B, + 34758 - 11904: 0xC1B0, + 34760 - 11904: 0xC1B4, + 34761 - 11904: 0xEE62, + 34762 - 11904: 0xEE69, + 34763 - 11904: 0xC1B5, + 34764 - 11904: 0xEE65, + 34766 - 11904: 0xA0C7, + 34769 - 11904: 0xC1AD, + 34770 - 11904: 0xC1AF, + 34771 - 11904: 0xF0C7, + 34772 - 11904: 0xF0C5, + 34774 - 11904: 0xA043, + 34775 - 11904: 0xF0CC, + 34776 - 11904: 0xF0C9, + 34777 - 11904: 0xF0CD, + 34778 - 11904: 0x8FB5, + 34779 - 11904: 0xF0BE, + 34780 - 11904: 0xF0C6, + 34781 - 11904: 0xF0D1, + 34782 - 11904: 0xEE6F, + 34783 - 11904: 0xF0C2, + 34784 - 11904: 0xC2CF, + 34785 - 11904: 0xE7A5, + 34786 - 11904: 0xF0BD, + 34787 - 11904: 0xF0CA, + 34788 - 11904: 0xF0C4, + 34789 - 11904: 0xF0C1, + 34790 - 11904: 0xF0BC, + 34791 - 11904: 0xF0BB, + 34792 - 11904: 0xF0D0, + 34794 - 11904: 0xF0C0, + 34795 - 11904: 0xF0BF, + 34796 - 11904: 0xC2CD, + 34797 - 11904: 0xF0C8, + 34798 - 11904: 0x8FB2, + 34799 - 11904: 0xC2CC, + 34802 - 11904: 0xC2CE, + 34803 - 11904: 0xF0C3, + 34804 - 11904: 0xF0CF, + 34805 - 11904: 0xA061, + 34806 - 11904: 0xF2DE, + 34807 - 11904: 0xF2DF, + 34809 - 11904: 0xC3C9, + 34810 - 11904: 0xF2DC, + 34811 - 11904: 0xC3C6, + 34812 - 11904: 0xF2E4, + 34814 - 11904: 0xC3CA, + 34815 - 11904: 0xF2E6, + 34816 - 11904: 0xF2DB, + 34817 - 11904: 0xF0CE, + 34818 - 11904: 0xF2E8, + 34819 - 11904: 0xF2DD, + 34820 - 11904: 0x9E5E, + 34821 - 11904: 0xC3C7, + 34822 - 11904: 0xF2E3, + 34824 - 11904: 0xF2E5, + 34825 - 11904: 0xF2E0, + 34826 - 11904: 0xF2E7, + 34827 - 11904: 0xF2E2, + 34828 - 11904: 0xF2E1, + 34829 - 11904: 0xC3C8, + 34831 - 11904: 0xA063, + 34832 - 11904: 0xF4C5, + 34833 - 11904: 0xF4C6, + 34835 - 11904: 0xF4C8, + 34836 - 11904: 0xC4AE, + 34837 - 11904: 0xC4AF, + 34838 - 11904: 0xF4C9, + 34839 - 11904: 0xF4C7, + 34840 - 11904: 0x9FE8, + 34841 - 11904: 0xF4C4, + 34843 - 11904: 0xF642, + 34844 - 11904: 0xF645, + 34845 - 11904: 0xF641, + 34847 - 11904: 0xC4FA, + 34848 - 11904: 0xF643, + 34849 - 11904: 0xC4F9, + 34850 - 11904: 0xC4F8, + 34851 - 11904: 0xC4F7, + 34852 - 11904: 0xF644, + 34853 - 11904: 0xF751, + 34854 - 11904: 0xF74F, + 34855 - 11904: 0x9CB2, + 34856 - 11904: 0xF74E, + 34857 - 11904: 0xF640, + 34858 - 11904: 0xF750, + 34859 - 11904: 0xF646, + 34860 - 11904: 0xF74D, + 34861 - 11904: 0x957C, + 34862 - 11904: 0xF7F9, + 34863 - 11904: 0xF7D7, + 34864 - 11904: 0xF7F7, + 34865 - 11904: 0xC5DB, + 34866 - 11904: 0xF7F8, + 34867 - 11904: 0xF7FA, + 34869 - 11904: 0xF8BF, + 34870 - 11904: 0xC5FA, + 34871 - 11904: 0xF8BE, + 34872 - 11904: 0xF8BD, + 34873 - 11904: 0xC5FB, + 34875 - 11904: 0xC65A, + 34876 - 11904: 0xF96E, + 34877 - 11904: 0xF9A7, + 34878 - 11904: 0xF9A6, + 34879 - 11904: 0xF9A8, + 34880 - 11904: 0xA6E5, + 34881 - 11904: 0xD0AA, + 34882 - 11904: 0x9FC7, + 34883 - 11904: 0xD3CF, + 34884 - 11904: 0xD3D0, + 34885 - 11904: 0x8FBB, + 34886 - 11904: 0x8FBC, + 34888 - 11904: 0xDBC0, + 34890 - 11904: 0xF647, + 34891 - 11904: 0xF8C0, + 34892 - 11904: 0xA6E6, + 34893 - 11904: 0xAD6C, + 34894 - 11904: 0xD0AB, + 34895 - 11904: 0x8FEC, + 34898 - 11904: 0xD7B1, + 34899 - 11904: 0xB34E, + 34901 - 11904: 0xDBC2, + 34902 - 11904: 0xDBC1, + 34903 - 11904: 0xB5F3, + 34905 - 11904: 0xB8C5, + 34906 - 11904: 0xE7C1, + 34907 - 11904: 0xBDC3, + 34909 - 11904: 0xBDC4, + 34910 - 11904: 0x8FC0, + 34912 - 11904: 0x936A, + 34913 - 11904: 0xBFC5, + 34914 - 11904: 0xC5FC, + 34915 - 11904: 0xA6E7, + 34916 - 11904: 0x8BE4, + 34917 - 11904: 0x9C7C, + 34919 - 11904: 0xD0AC, + 34920 - 11904: 0xAAED, + 34921 - 11904: 0xD0AE, + 34922 - 11904: 0xD0AD, + 34923 - 11904: 0xAD6D, + 34925 - 11904: 0xD3D1, + 34926 - 11904: 0x95A1, + 34927 - 11904: 0xD3D8, + 34928 - 11904: 0xB049, + 34929 - 11904: 0xD3D6, + 34930 - 11904: 0xD3D4, + 34932 - 11904: 0xD3DB, + 34933 - 11904: 0xD3D2, + 34934 - 11904: 0xD3D3, + 34935 - 11904: 0xB04A, + 34937 - 11904: 0xB04E, + 34940 - 11904: 0xD3DC, + 34941 - 11904: 0xB04D, + 34942 - 11904: 0xD3DA, + 34943 - 11904: 0xD3D7, + 34944 - 11904: 0xD3D5, + 34945 - 11904: 0xB04B, + 34946 - 11904: 0xB04C, + 34947 - 11904: 0xD3D9, + 34948 - 11904: 0xFEEC, + 34951 - 11904: 0x95A3, + 34952 - 11904: 0xB350, + 34953 - 11904: 0xD7B2, + 34955 - 11904: 0xB355, + 34956 - 11904: 0xD7C2, + 34957 - 11904: 0xB354, + 34958 - 11904: 0xD7C4, + 34959 - 11904: 0x8C45, + 34960 - 11904: 0x8CB8, + 34961 - 11904: 0xD7B8, + 34962 - 11904: 0xB352, + 34963 - 11904: 0xD7C3, + 34965 - 11904: 0xD7B3, + 34966 - 11904: 0xB353, + 34967 - 11904: 0xD7BF, + 34968 - 11904: 0xD7BB, + 34969 - 11904: 0xD7BD, + 34970 - 11904: 0xD7B7, + 34971 - 11904: 0xD7BE, + 34972 - 11904: 0x8FC1, + 34973 - 11904: 0x87B7, + 34974 - 11904: 0xB34F, + 34975 - 11904: 0xD7BA, + 34976 - 11904: 0xA052, + 34977 - 11904: 0xD7B9, + 34978 - 11904: 0xD7B5, + 34980 - 11904: 0xD7C0, + 34983 - 11904: 0xD7BC, + 34984 - 11904: 0xD7B4, + 34986 - 11904: 0xD7B6, + 34987 - 11904: 0xB351, + 34988 - 11904: 0xD7C1, + 34990 - 11904: 0x99D0, + 34993 - 11904: 0xB5F6, + 34994 - 11904: 0xDBCD, + 34996 - 11904: 0x8FC3, + 34997 - 11904: 0x8FC4, + 34998 - 11904: 0xDBC9, + 34999 - 11904: 0xDBCB, + 35000 - 11904: 0xDBC6, + 35001 - 11904: 0xDBC5, + 35002 - 11904: 0xDBC3, + 35004 - 11904: 0xDBCA, + 35005 - 11904: 0xDBCC, + 35006 - 11904: 0xDBC8, + 35007 - 11904: 0x95A4, + 35008 - 11904: 0xDBC7, + 35009 - 11904: 0xB5F4, + 35010 - 11904: 0xB5F5, + 35013 - 11904: 0x8FC6, + 35015 - 11904: 0x9E60, + 35017 - 11904: 0xDBCF, + 35018 - 11904: 0xB8CD, + 35019 - 11904: 0xDFF2, + 35020 - 11904: 0xDFF8, + 35021 - 11904: 0xDFF3, + 35022 - 11904: 0xDFF4, + 35023 - 11904: 0xF9D8, + 35024 - 11904: 0xDFF9, + 35026 - 11904: 0xB8CF, + 35028 - 11904: 0xB8C7, + 35029 - 11904: 0xB8CE, + 35030 - 11904: 0xDFF1, + 35031 - 11904: 0xDBC4, + 35032 - 11904: 0xB8CA, + 35033 - 11904: 0xB8C8, + 35034 - 11904: 0xDFF7, + 35035 - 11904: 0xDFF6, + 35036 - 11904: 0xB8C9, + 35037 - 11904: 0xB8CB, + 35038 - 11904: 0xDFF5, + 35039 - 11904: 0xB8C6, + 35041 - 11904: 0xB8CC, + 35046 - 11904: 0x95A5, + 35047 - 11904: 0xE3F6, + 35048 - 11904: 0xBB74, + 35051 - 11904: 0xE442, + 35052 - 11904: 0xE441, + 35054 - 11904: 0xE3FB, + 35055 - 11904: 0xBB76, + 35056 - 11904: 0xE440, + 35057 - 11904: 0xE3F7, + 35058 - 11904: 0xE3F8, + 35059 - 11904: 0xBB6E, + 35060 - 11904: 0xBB70, + 35061 - 11904: 0x9CB3, + 35062 - 11904: 0xE3FD, + 35063 - 11904: 0xE3F5, + 35064 - 11904: 0xBB72, + 35065 - 11904: 0xBB71, + 35066 - 11904: 0xE3F9, + 35067 - 11904: 0xE3FE, + 35068 - 11904: 0xE3FC, + 35069 - 11904: 0xBB73, + 35070 - 11904: 0xE3FA, + 35071 - 11904: 0x99D1, + 35072 - 11904: 0xFEF1, + 35073 - 11904: 0xDBCE, + 35074 - 11904: 0xBB6F, + 35077 - 11904: 0xE7C2, + 35078 - 11904: 0xE7C9, + 35079 - 11904: 0xBDC6, + 35081 - 11904: 0xE7CD, + 35082 - 11904: 0xBDCA, + 35083 - 11904: 0xE7C5, + 35084 - 11904: 0xE7C3, + 35086 - 11904: 0xE7CC, + 35088 - 11904: 0xBDC5, + 35089 - 11904: 0xE7CB, + 35090 - 11904: 0xBDC7, + 35091 - 11904: 0xBDC8, + 35092 - 11904: 0xE7C4, + 35093 - 11904: 0xBDC9, + 35094 - 11904: 0xE7CA, + 35095 - 11904: 0xE7C6, + 35096 - 11904: 0xE7C7, + 35097 - 11904: 0xE7C8, + 35098 - 11904: 0xBB75, + 35102 - 11904: 0xEB70, + 35103 - 11904: 0xEB7C, + 35105 - 11904: 0xBFCA, + 35106 - 11904: 0xEB77, + 35107 - 11904: 0xEB79, + 35108 - 11904: 0x99D2, + 35109 - 11904: 0xBFC8, + 35110 - 11904: 0xEB71, + 35111 - 11904: 0xEB75, + 35113 - 11904: 0xEB78, + 35114 - 11904: 0xBFC6, + 35115 - 11904: 0xBFC9, + 35116 - 11904: 0xEB7B, + 35117 - 11904: 0xEB73, + 35118 - 11904: 0xEB74, + 35119 - 11904: 0xEB7A, + 35120 - 11904: 0xEB72, + 35121 - 11904: 0xEB76, + 35122 - 11904: 0xBFC7, + 35123 - 11904: 0xEE72, + 35125 - 11904: 0xEE71, + 35126 - 11904: 0xC1B7, + 35127 - 11904: 0xEE77, + 35128 - 11904: 0xC1B9, + 35131 - 11904: 0xC1B6, + 35132 - 11904: 0xEE73, + 35133 - 11904: 0xC1BA, + 35134 - 11904: 0xEE74, + 35137 - 11904: 0xEE75, + 35138 - 11904: 0xEE78, + 35139 - 11904: 0x9CC2, + 35140 - 11904: 0xC1B8, + 35142 - 11904: 0xF0D6, + 35143 - 11904: 0x99D3, + 35145 - 11904: 0xF0D9, + 35147 - 11904: 0xF0D3, + 35148 - 11904: 0xF0D5, + 35149 - 11904: 0x95A7, + 35151 - 11904: 0xF0D4, + 35152 - 11904: 0xF0D7, + 35153 - 11904: 0xF0D8, + 35154 - 11904: 0xEE76, + 35155 - 11904: 0xF0D2, + 35156 - 11904: 0x95A9, + 35158 - 11904: 0xC3CD, + 35159 - 11904: 0xF2EC, + 35160 - 11904: 0xF2EF, + 35161 - 11904: 0xF2F1, + 35162 - 11904: 0xF2EA, + 35163 - 11904: 0xF2EB, + 35164 - 11904: 0xF2EE, + 35165 - 11904: 0xF2F0, + 35166 - 11904: 0xC3CE, + 35167 - 11904: 0xC3CC, + 35168 - 11904: 0xC3CB, + 35169 - 11904: 0xF2ED, + 35170 - 11904: 0xF2E9, + 35171 - 11904: 0xF4CA, + 35172 - 11904: 0xC4B0, + 35173 - 11904: 0x95A6, + 35174 - 11904: 0xF4CB, + 35177 - 11904: 0xF649, + 35178 - 11904: 0xC4FB, + 35179 - 11904: 0xF64B, + 35180 - 11904: 0xC4FC, + 35181 - 11904: 0xF648, + 35182 - 11904: 0xF64A, + 35183 - 11904: 0xC5A8, + 35185 - 11904: 0xF752, + 35186 - 11904: 0xC5A7, + 35187 - 11904: 0xF7FD, + 35188 - 11904: 0xF7FC, + 35190 - 11904: 0xF7FB, + 35191 - 11904: 0x9C5D, + 35193 - 11904: 0xF948, + 35194 - 11904: 0xF949, + 35195 - 11904: 0xF94B, + 35196 - 11904: 0xF94A, + 35198 - 11904: 0xCA50, + 35199 - 11904: 0xA6E8, + 35200 - 11904: 0x98E2, + 35201 - 11904: 0xAD6E, + 35202 - 11904: 0xD7C5, + 35203 - 11904: 0xB5F7, + 35205 - 11904: 0xDFFA, + 35206 - 11904: 0xC2D0, + 35207 - 11904: 0x8FC9, + 35208 - 11904: 0xF2F2, + 35209 - 11904: 0xA0C2, + 35210 - 11904: 0x8FCA, + 35211 - 11904: 0xA8A3, + 35215 - 11904: 0xB357, + 35217 - 11904: 0x99D4, + 35219 - 11904: 0xB356, + 35220 - 11904: 0xA0B9, + 35221 - 11904: 0xDBD0, + 35222 - 11904: 0xB5F8, + 35223 - 11904: 0xDBD2, + 35224 - 11904: 0xDBD1, + 35227 - 11904: 0xDFFB, + 35228 - 11904: 0xB8D0, + 35229 - 11904: 0xE443, + 35230 - 11904: 0xE446, + 35231 - 11904: 0xE445, + 35233 - 11904: 0xE444, + 35234 - 11904: 0xE7CE, + 35235 - 11904: 0xE7D0, + 35236 - 11904: 0xE7CF, + 35237 - 11904: 0x9B58, + 35238 - 11904: 0xBFCC, + 35239 - 11904: 0x8FCD, + 35241 - 11904: 0xA0D4, + 35242 - 11904: 0xBFCB, + 35244 - 11904: 0xC1BB, + 35245 - 11904: 0xEE79, + 35246 - 11904: 0xEE7B, + 35247 - 11904: 0xEE7A, + 35250 - 11904: 0xC2D1, + 35254 - 11904: 0xF2F4, + 35255 - 11904: 0xF2F3, + 35257 - 11904: 0xF4CC, + 35258 - 11904: 0xC4B1, + 35260 - 11904: 0x8FCE, + 35261 - 11904: 0xC4FD, + 35262 - 11904: 0xF754, + 35263 - 11904: 0xF753, + 35264 - 11904: 0xC65B, + 35265 - 11904: 0x8BE5, + 35270 - 11904: 0x8979, + 35282 - 11904: 0xA8A4, + 35283 - 11904: 0xD0AF, + 35284 - 11904: 0xAD6F, + 35285 - 11904: 0xD7C8, + 35286 - 11904: 0xD7C6, + 35289 - 11904: 0xD7C7, + 35290 - 11904: 0xDBD4, + 35291 - 11904: 0xDBD5, + 35292 - 11904: 0xE043, + 35293 - 11904: 0xDBD3, + 35295 - 11904: 0xDFFC, + 35296 - 11904: 0xE041, + 35297 - 11904: 0xE040, + 35298 - 11904: 0xE042, + 35299 - 11904: 0xB8D1, + 35300 - 11904: 0xDFFE, + 35301 - 11904: 0xDFFD, + 35302 - 11904: 0xE044, + 35303 - 11904: 0x8FD0, + 35304 - 11904: 0xE449, + 35305 - 11904: 0xE447, + 35307 - 11904: 0xE448, + 35308 - 11904: 0xE7D3, + 35309 - 11904: 0xE7D1, + 35312 - 11904: 0xE7D2, + 35313 - 11904: 0xEB7D, + 35314 - 11904: 0xEE7C, + 35315 - 11904: 0xEE7D, + 35316 - 11904: 0xC2D2, + 35318 - 11904: 0xF2F5, + 35319 - 11904: 0xF4CD, + 35320 - 11904: 0xC4B2, + 35322 - 11904: 0xF64C, + 35323 - 11904: 0xF755, + 35324 - 11904: 0xC5A9, + 35326 - 11904: 0xF7FE, + 35327 - 11904: 0xF94C, + 35328 - 11904: 0xA8A5, + 35330 - 11904: 0xAD71, + 35331 - 11904: 0xAD72, + 35332 - 11904: 0xD0B0, + 35335 - 11904: 0xD0B1, + 35336 - 11904: 0xAD70, + 35338 - 11904: 0xB054, + 35340 - 11904: 0xB052, + 35342 - 11904: 0xB051, + 35343 - 11904: 0xB058, + 35344 - 11904: 0xB050, + 35345 - 11904: 0xB059, + 35346 - 11904: 0xD3DD, + 35347 - 11904: 0xB056, + 35349 - 11904: 0xB053, + 35350 - 11904: 0xB057, + 35351 - 11904: 0xB055, + 35352 - 11904: 0xB04F, + 35355 - 11904: 0xB35F, + 35356 - 11904: 0x95B6, + 35357 - 11904: 0xB359, + 35358 - 11904: 0xD7CC, + 35359 - 11904: 0xB35E, + 35362 - 11904: 0xB360, + 35363 - 11904: 0xB35A, + 35365 - 11904: 0xB35B, + 35367 - 11904: 0xD7CA, + 35369 - 11904: 0x99D6, + 35370 - 11904: 0xB358, + 35371 - 11904: 0x95E5, + 35372 - 11904: 0xD7CB, + 35373 - 11904: 0xB35D, + 35376 - 11904: 0xD7C9, + 35377 - 11904: 0xB35C, + 35380 - 11904: 0xB644, + 35382 - 11904: 0xB646, + 35384 - 11904: 0x99D7, + 35385 - 11904: 0xDBD8, + 35386 - 11904: 0xB645, + 35387 - 11904: 0xB5F9, + 35388 - 11904: 0xB5FD, + 35389 - 11904: 0x95B5, + 35390 - 11904: 0xB8E4, + 35391 - 11904: 0xE049, + 35392 - 11904: 0xDBDA, + 35393 - 11904: 0xB5FE, + 35396 - 11904: 0xDBDD, + 35397 - 11904: 0xDBDE, + 35398 - 11904: 0xB643, + 35400 - 11904: 0xDBE0, + 35401 - 11904: 0xA0CA, + 35402 - 11904: 0xDBE2, + 35404 - 11904: 0xDBE3, + 35405 - 11904: 0xDBD7, + 35406 - 11904: 0xDBD6, + 35407 - 11904: 0xDBE4, + 35408 - 11904: 0xB642, + 35409 - 11904: 0xDBE1, + 35410 - 11904: 0xDBDF, + 35412 - 11904: 0xB640, + 35413 - 11904: 0xB5FB, + 35414 - 11904: 0xB647, + 35415 - 11904: 0xDBDB, + 35416 - 11904: 0xDBDC, + 35417 - 11904: 0xDBD9, + 35419 - 11904: 0xB641, + 35422 - 11904: 0xB5FC, + 35424 - 11904: 0xB5FA, + 35425 - 11904: 0xE048, + 35426 - 11904: 0xB8DF, + 35427 - 11904: 0xB8DA, + 35430 - 11904: 0xB8D5, + 35431 - 11904: 0x9FFD, + 35432 - 11904: 0xB8E5, + 35433 - 11904: 0xB8D6, + 35435 - 11904: 0xB8D2, + 35436 - 11904: 0xB8E1, + 35437 - 11904: 0xB8DE, + 35438 - 11904: 0xB8E0, + 35440 - 11904: 0xB8D7, + 35441 - 11904: 0xB8DC, + 35442 - 11904: 0xB8D3, + 35443 - 11904: 0xB8D4, + 35444 - 11904: 0xE050, + 35445 - 11904: 0xE04D, + 35446 - 11904: 0xE045, + 35447 - 11904: 0xE04A, + 35449 - 11904: 0xB8E2, + 35450 - 11904: 0xE051, + 35451 - 11904: 0xB8E3, + 35452 - 11904: 0xB8D9, + 35454 - 11904: 0xA058, + 35455 - 11904: 0xE047, + 35457 - 11904: 0xE04F, + 35458 - 11904: 0xE04B, + 35459 - 11904: 0xE04E, + 35460 - 11904: 0xE04C, + 35461 - 11904: 0xB8DD, + 35462 - 11904: 0xE046, + 35463 - 11904: 0xB8D8, + 35467 - 11904: 0xE44C, + 35468 - 11904: 0xBB78, + 35469 - 11904: 0xBB7B, + 35471 - 11904: 0xE44E, + 35472 - 11904: 0x8FD6, + 35473 - 11904: 0xBBA5, + 35474 - 11904: 0xE44D, + 35475 - 11904: 0xBB7D, + 35476 - 11904: 0x99D8, + 35477 - 11904: 0xBDCF, + 35478 - 11904: 0xE44F, + 35480 - 11904: 0xBBA4, + 35481 - 11904: 0xE44B, + 35482 - 11904: 0xBBA6, + 35484 - 11904: 0x8FD3, + 35486 - 11904: 0xBB79, + 35488 - 11904: 0xB8DB, + 35489 - 11904: 0xBB7C, + 35491 - 11904: 0xBB7A, + 35492 - 11904: 0xBB7E, + 35493 - 11904: 0xBBA2, + 35494 - 11904: 0xBB77, + 35495 - 11904: 0xBBA7, + 35496 - 11904: 0xBBA3, + 35497 - 11904: 0x8FE5, + 35498 - 11904: 0xBBA1, + 35499 - 11904: 0xE44A, + 35503 - 11904: 0x8FE9, + 35504 - 11904: 0xBDD6, + 35506 - 11904: 0xBDD2, + 35508 - 11904: 0x99D9, + 35510 - 11904: 0xBDD9, + 35512 - 11904: 0xE7D6, + 35513 - 11904: 0xBDDA, + 35514 - 11904: 0xE7E2, + 35515 - 11904: 0xE7DB, + 35516 - 11904: 0xBDCB, + 35517 - 11904: 0xE7E3, + 35518 - 11904: 0xE7DD, + 35519 - 11904: 0xBDD5, + 35520 - 11904: 0xE7DE, + 35522 - 11904: 0xBDD4, + 35523 - 11904: 0xE7E1, + 35524 - 11904: 0xBDCE, + 35525 - 11904: 0xE7DF, + 35526 - 11904: 0xE7D5, + 35527 - 11904: 0xBDCD, + 35528 - 11904: 0xEBAA, + 35529 - 11904: 0xBDD3, + 35531 - 11904: 0xBDD0, + 35532 - 11904: 0x8CF7, + 35533 - 11904: 0xBDD8, + 35535 - 11904: 0xE7D4, + 35537 - 11904: 0xE7D8, + 35538 - 11904: 0xBDCC, + 35539 - 11904: 0xE7D7, + 35540 - 11904: 0xE7D9, + 35541 - 11904: 0xE7DA, + 35542 - 11904: 0xBDD7, + 35543 - 11904: 0xE7DC, + 35544 - 11904: 0xE7E0, + 35545 - 11904: 0xE7E4, + 35546 - 11904: 0x927C, + 35547 - 11904: 0xBDDB, + 35548 - 11904: 0xBFD2, + 35549 - 11904: 0xEBA5, + 35550 - 11904: 0xEBAB, + 35551 - 11904: 0xEBA8, + 35552 - 11904: 0xEB7E, + 35553 - 11904: 0xEBAC, + 35554 - 11904: 0xEBA1, + 35556 - 11904: 0xEBA7, + 35558 - 11904: 0xBFCD, + 35559 - 11904: 0xBFD3, + 35560 - 11904: 0xEBAD, + 35562 - 11904: 0x9C45, + 35563 - 11904: 0xBFCF, + 35565 - 11904: 0xBFD9, + 35566 - 11904: 0xBFD4, + 35567 - 11904: 0xEBAF, + 35568 - 11904: 0xEBA9, + 35569 - 11904: 0xBFD0, + 35570 - 11904: 0xEBA2, + 35571 - 11904: 0xBFDA, + 35572 - 11904: 0xEBA3, + 35573 - 11904: 0xEBA4, + 35574 - 11904: 0xBFDB, + 35575 - 11904: 0xBFD8, + 35576 - 11904: 0xBDD1, + 35577 - 11904: 0x8CE8, + 35578 - 11904: 0xBFCE, + 35579 - 11904: 0xEBB0, + 35580 - 11904: 0xBFDC, + 35582 - 11904: 0xBFD5, + 35583 - 11904: 0xEBAE, + 35584 - 11904: 0xBFD1, + 35585 - 11904: 0xBFD6, + 35586 - 11904: 0xBFD7, + 35588 - 11904: 0xC1C3, + 35589 - 11904: 0xEEA4, + 35590 - 11904: 0xEEAD, + 35591 - 11904: 0xEEAA, + 35592 - 11904: 0xEEAC, + 35594 - 11904: 0xC1C0, + 35595 - 11904: 0xEEA5, + 35596 - 11904: 0x8FDE, + 35597 - 11904: 0xEEAB, + 35598 - 11904: 0xC1BC, + 35599 - 11904: 0xEEA7, + 35600 - 11904: 0xC1C4, + 35601 - 11904: 0xEEA3, + 35602 - 11904: 0xEEA8, + 35603 - 11904: 0xEEAF, + 35604 - 11904: 0xEBA6, + 35605 - 11904: 0xEEA9, + 35606 - 11904: 0xEEA2, + 35607 - 11904: 0xC1BD, + 35608 - 11904: 0xEEA1, + 35609 - 11904: 0xC1BE, + 35610 - 11904: 0xEEB0, + 35611 - 11904: 0xC1BF, + 35612 - 11904: 0xEEAE, + 35613 - 11904: 0xC1C2, + 35614 - 11904: 0xEE7E, + 35615 - 11904: 0x8FDF, + 35616 - 11904: 0xC1C1, + 35618 - 11904: 0xEEA6, + 35619 - 11904: 0xF0DC, + 35620 - 11904: 0xF0EA, + 35621 - 11904: 0xF0E5, + 35622 - 11904: 0xF0E7, + 35623 - 11904: 0xF0DB, + 35624 - 11904: 0xC2D3, + 35626 - 11904: 0xF0DA, + 35627 - 11904: 0xC2D6, + 35628 - 11904: 0xC2D5, + 35629 - 11904: 0xA04B, + 35630 - 11904: 0xF0E9, + 35631 - 11904: 0xF0E1, + 35632 - 11904: 0xF0DE, + 35633 - 11904: 0xF0E4, + 35635 - 11904: 0xF0DD, + 35637 - 11904: 0xF0DF, + 35638 - 11904: 0xF0E8, + 35639 - 11904: 0xF0E6, + 35641 - 11904: 0xC2D4, + 35642 - 11904: 0xF0ED, + 35643 - 11904: 0xF0EB, + 35644 - 11904: 0xF0E2, + 35645 - 11904: 0xF0EC, + 35646 - 11904: 0xF0E3, + 35647 - 11904: 0x8FE2, + 35648 - 11904: 0xF2F9, + 35649 - 11904: 0xC3CF, + 35650 - 11904: 0xF341, + 35651 - 11904: 0xA0CC, + 35653 - 11904: 0xF64F, + 35654 - 11904: 0xC3D6, + 35655 - 11904: 0xF0E0, + 35656 - 11904: 0xF2F7, + 35657 - 11904: 0xC3D2, + 35658 - 11904: 0xF2F8, + 35659 - 11904: 0xF2FD, + 35660 - 11904: 0x8FE3, + 35661 - 11904: 0x8FE4, + 35662 - 11904: 0xC3D4, + 35663 - 11904: 0xC3D5, + 35664 - 11904: 0xF2F6, + 35665 - 11904: 0xF340, + 35666 - 11904: 0xF342, + 35667 - 11904: 0xF2FA, + 35668 - 11904: 0xF2FC, + 35669 - 11904: 0xF2FE, + 35670 - 11904: 0xF2FB, + 35671 - 11904: 0xF343, + 35672 - 11904: 0xC3D1, + 35673 - 11904: 0xC3D7, + 35674 - 11904: 0xC3D3, + 35676 - 11904: 0xC3D0, + 35677 - 11904: 0xF4D0, + 35678 - 11904: 0x9BC4, + 35679 - 11904: 0xC4B7, + 35680 - 11904: 0xF4CE, + 35682 - 11904: 0x9BFC, + 35683 - 11904: 0xF4D2, + 35685 - 11904: 0xF4D3, + 35686 - 11904: 0xC4B5, + 35687 - 11904: 0xF4D4, + 35688 - 11904: 0xF4D1, + 35689 - 11904: 0x964C, + 35690 - 11904: 0xF4CF, + 35691 - 11904: 0xC4B8, + 35692 - 11904: 0xC4B4, + 35693 - 11904: 0xF4D5, + 35695 - 11904: 0xC4B6, + 35696 - 11904: 0xC4B3, + 35700 - 11904: 0xC4FE, + 35703 - 11904: 0xC540, + 35704 - 11904: 0xF64E, + 35705 - 11904: 0xF64D, + 35706 - 11904: 0xF650, + 35707 - 11904: 0xF651, + 35709 - 11904: 0xC541, + 35710 - 11904: 0xF756, + 35711 - 11904: 0xF75B, + 35712 - 11904: 0xC5AA, + 35713 - 11904: 0x9AF6, + 35714 - 11904: 0xF758, + 35715 - 11904: 0x8CAE, + 35716 - 11904: 0xF757, + 35717 - 11904: 0xF75A, + 35718 - 11904: 0xF759, + 35720 - 11904: 0xF843, + 35722 - 11904: 0xC5DC, + 35723 - 11904: 0xF842, + 35724 - 11904: 0xF840, + 35726 - 11904: 0xF841, + 35727 - 11904: 0x87CB, + 35728 - 11904: 0x8FE7, + 35730 - 11904: 0xC5FE, + 35731 - 11904: 0xC5FD, + 35732 - 11904: 0xF8C1, + 35733 - 11904: 0xF8C2, + 35734 - 11904: 0xC640, + 35736 - 11904: 0xF94D, + 35737 - 11904: 0xF94E, + 35738 - 11904: 0xC667, + 35739 - 11904: 0x8FE8, + 35740 - 11904: 0xC66D, + 35742 - 11904: 0xF9A9, + 35743 - 11904: 0xF9C8, + 35744 - 11904: 0x8BE7, + 35774 - 11904: 0x897A, + 35810 - 11904: 0x897B, + 35895 - 11904: 0xA8A6, + 35897 - 11904: 0xD7CD, + 35899 - 11904: 0xD7CE, + 35900 - 11904: 0xE052, + 35901 - 11904: 0xE450, + 35902 - 11904: 0xE7E5, + 35903 - 11904: 0xC1C6, + 35905 - 11904: 0xC1C5, + 35906 - 11904: 0xF0EE, + 35907 - 11904: 0xF344, + 35909 - 11904: 0xF844, + 35910 - 11904: 0xA8A7, + 35911 - 11904: 0xD3DE, + 35912 - 11904: 0xB05A, + 35913 - 11904: 0xB361, + 35914 - 11904: 0xE054, + 35915 - 11904: 0xE053, + 35916 - 11904: 0xBDDC, + 35917 - 11904: 0xE7E6, + 35918 - 11904: 0xBDDD, + 35919 - 11904: 0xEEB1, + 35920 - 11904: 0xC2D7, + 35921 - 11904: 0x99DA, + 35924 - 11904: 0xC676, + 35925 - 11904: 0xA8A8, + 35926 - 11904: 0xCDCB, + 35927 - 11904: 0xD3DF, + 35930 - 11904: 0xB362, + 35932 - 11904: 0xD7CF, + 35933 - 11904: 0xD7D0, + 35935 - 11904: 0xDBE5, + 35937 - 11904: 0xB648, + 35938 - 11904: 0xB8E6, + 35940 - 11904: 0xE056, + 35941 - 11904: 0xE055, + 35942 - 11904: 0xE057, + 35944 - 11904: 0xE451, + 35945 - 11904: 0xE452, + 35946 - 11904: 0xBBA8, + 35947 - 11904: 0xBFDD, + 35948 - 11904: 0xBDDE, + 35949 - 11904: 0xBFDE, + 35951 - 11904: 0xEEB5, + 35952 - 11904: 0xEEB2, + 35953 - 11904: 0xEEB4, + 35954 - 11904: 0xEEB3, + 35955 - 11904: 0xC1C7, + 35957 - 11904: 0xF0EF, + 35958 - 11904: 0xF346, + 35959 - 11904: 0xF345, + 35960 - 11904: 0xCBA4, + 35961 - 11904: 0xB05C, + 35962 - 11904: 0xB05B, + 35963 - 11904: 0xD3E0, + 35965 - 11904: 0xD7D1, + 35968 - 11904: 0xDBE7, + 35969 - 11904: 0xDBE6, + 35970 - 11904: 0xB649, + 35972 - 11904: 0xE059, + 35973 - 11904: 0xE05A, + 35974 - 11904: 0xE058, + 35977 - 11904: 0xB8E8, + 35978 - 11904: 0xB8E7, + 35980 - 11904: 0xBBAA, + 35981 - 11904: 0xBBA9, + 35983 - 11904: 0xE7E7, + 35984 - 11904: 0xEBB3, + 35985 - 11904: 0xEBB1, + 35986 - 11904: 0xEBB2, + 35987 - 11904: 0xBFDF, + 35988 - 11904: 0xEEB7, + 35989 - 11904: 0xEEB6, + 35991 - 11904: 0xF0F2, + 35992 - 11904: 0xF0F1, + 35993 - 11904: 0xF0F0, + 35994 - 11904: 0xF347, + 35995 - 11904: 0x8FED, + 35996 - 11904: 0xF9AA, + 35997 - 11904: 0xA8A9, + 35998 - 11904: 0xAD73, + 35999 - 11904: 0x95C0, + 36000 - 11904: 0xAD74, + 36001 - 11904: 0xB05D, + 36002 - 11904: 0xB05E, + 36003 - 11904: 0xD3E2, + 36004 - 11904: 0xD3E1, + 36005 - 11904: 0xD7D2, + 36007 - 11904: 0xB368, + 36008 - 11904: 0xB366, + 36009 - 11904: 0xB363, + 36010 - 11904: 0xB367, + 36011 - 11904: 0xB365, + 36012 - 11904: 0xB364, + 36013 - 11904: 0xA0CB, + 36015 - 11904: 0xB64A, + 36016 - 11904: 0xDBEA, + 36018 - 11904: 0xB8ED, + 36019 - 11904: 0xB64C, + 36020 - 11904: 0xB651, + 36021 - 11904: 0xDBEC, + 36022 - 11904: 0xB653, + 36023 - 11904: 0xB652, + 36024 - 11904: 0xB655, + 36025 - 11904: 0xDBEB, + 36026 - 11904: 0xDBE8, + 36027 - 11904: 0xB64F, + 36028 - 11904: 0xB64B, + 36029 - 11904: 0xB64D, + 36030 - 11904: 0xDBE9, + 36031 - 11904: 0xB654, + 36032 - 11904: 0xB650, + 36033 - 11904: 0xB64E, + 36034 - 11904: 0xB8EF, + 36035 - 11904: 0xB8EE, + 36036 - 11904: 0xB8EC, + 36037 - 11904: 0xB8F0, + 36039 - 11904: 0xB8EA, + 36040 - 11904: 0xB8EB, + 36042 - 11904: 0xB8E9, + 36044 - 11904: 0xE05B, + 36045 - 11904: 0x9E48, + 36047 - 11904: 0xE454, + 36049 - 11904: 0xBBAC, + 36050 - 11904: 0xBBAD, + 36051 - 11904: 0xBBAB, + 36052 - 11904: 0x99DB, + 36053 - 11904: 0xE453, + 36054 - 11904: 0x8FF3, + 36055 - 11904: 0xE455, + 36057 - 11904: 0xE7EA, + 36058 - 11904: 0xE7EC, + 36059 - 11904: 0x8FF9, + 36060 - 11904: 0xBDE7, + 36061 - 11904: 0xE7ED, + 36062 - 11904: 0xBDE0, + 36063 - 11904: 0xE7E9, + 36064 - 11904: 0xBDDF, + 36065 - 11904: 0xBDE9, + 36066 - 11904: 0xBDE5, + 36067 - 11904: 0xBDE6, + 36068 - 11904: 0xBDE2, + 36069 - 11904: 0xE7E8, + 36070 - 11904: 0xBDE1, + 36071 - 11904: 0xE7EE, + 36072 - 11904: 0xE7EB, + 36073 - 11904: 0x95C1, + 36074 - 11904: 0xBDE8, + 36075 - 11904: 0xA04E, + 36076 - 11904: 0xBDE3, + 36077 - 11904: 0xBDE4, + 36078 - 11904: 0xEBB5, + 36080 - 11904: 0xEBB7, + 36081 - 11904: 0xEBB6, + 36082 - 11904: 0x99DC, + 36083 - 11904: 0xEBB8, + 36084 - 11904: 0xBFE0, + 36085 - 11904: 0xEBB4, + 36087 - 11904: 0xA064, + 36088 - 11904: 0xC1CB, + 36089 - 11904: 0xEEB8, + 36090 - 11904: 0xC1C8, + 36091 - 11904: 0xC1CC, + 36092 - 11904: 0xC1CA, + 36093 - 11904: 0xC1C9, + 36094 - 11904: 0xF0F3, + 36096 - 11904: 0xF0F6, + 36098 - 11904: 0xF0F5, + 36099 - 11904: 0x8FF7, + 36100 - 11904: 0xF0F4, + 36101 - 11904: 0xC2D8, + 36102 - 11904: 0xF348, + 36103 - 11904: 0xF349, + 36104 - 11904: 0xC3D8, + 36105 - 11904: 0xF34A, + 36106 - 11904: 0xC3D9, + 36107 - 11904: 0x89B0, + 36108 - 11904: 0xA048, + 36109 - 11904: 0xC4BA, + 36111 - 11904: 0xC4B9, + 36112 - 11904: 0xF652, + 36113 - 11904: 0x8FFB, + 36114 - 11904: 0x8FF6, + 36115 - 11904: 0xC542, + 36116 - 11904: 0xF653, + 36117 - 11904: 0xF75C, + 36118 - 11904: 0xC5AB, + 36119 - 11904: 0xC5AC, + 36120 - 11904: 0x9DDC, + 36121 - 11904: 0xF845, + 36123 - 11904: 0xC642, + 36124 - 11904: 0x99DD, + 36125 - 11904: 0x8BE8, + 36196 - 11904: 0xA8AA, + 36198 - 11904: 0xB36A, + 36199 - 11904: 0xB369, + 36200 - 11904: 0xE05C, + 36201 - 11904: 0xE05D, + 36203 - 11904: 0xBBAE, + 36204 - 11904: 0xEBB9, + 36205 - 11904: 0xBDEA, + 36206 - 11904: 0xEBBA, + 36207 - 11904: 0xEEB9, + 36208 - 11904: 0xA8AB, + 36210 - 11904: 0xD0B2, + 36211 - 11904: 0xAD76, + 36212 - 11904: 0xAD75, + 36214 - 11904: 0xD3E3, + 36215 - 11904: 0xB05F, + 36216 - 11904: 0xD3E4, + 36217 - 11904: 0xD7D5, + 36218 - 11904: 0x92C1, + 36219 - 11904: 0xD7D4, + 36221 - 11904: 0xD7D3, + 36224 - 11904: 0xDBEE, + 36225 - 11904: 0xB658, + 36226 - 11904: 0x9FD6, + 36228 - 11904: 0xDBED, + 36229 - 11904: 0xB657, + 36233 - 11904: 0xDBEF, + 36234 - 11904: 0xB656, + 36236 - 11904: 0xE05F, + 36237 - 11904: 0xE062, + 36238 - 11904: 0xE060, + 36239 - 11904: 0xE061, + 36240 - 11904: 0xE065, + 36241 - 11904: 0xE05E, + 36242 - 11904: 0xE066, + 36243 - 11904: 0xE063, + 36244 - 11904: 0xE064, + 36245 - 11904: 0xBBB0, + 36246 - 11904: 0xE456, + 36249 - 11904: 0xBBAF, + 36251 - 11904: 0xE7F2, + 36252 - 11904: 0xE7F0, + 36255 - 11904: 0xBDEB, + 36256 - 11904: 0xE7EF, + 36257 - 11904: 0xE7F1, + 36259 - 11904: 0xBDEC, + 36261 - 11904: 0xEBBB, + 36262 - 11904: 0xA0D2, + 36263 - 11904: 0xEBBC, + 36264 - 11904: 0xC1CD, + 36265 - 11904: 0x9040, + 36266 - 11904: 0xF34C, + 36267 - 11904: 0xF34E, + 36268 - 11904: 0xF34B, + 36269 - 11904: 0xF34D, + 36270 - 11904: 0xF4D6, + 36271 - 11904: 0xF654, + 36274 - 11904: 0xF96F, + 36275 - 11904: 0xA8AC, + 36276 - 11904: 0xAD77, + 36277 - 11904: 0xD3E5, + 36278 - 11904: 0xD3E7, + 36279 - 11904: 0xD3E6, + 36281 - 11904: 0xD7D8, + 36282 - 11904: 0xB36C, + 36284 - 11904: 0xD7D6, + 36286 - 11904: 0xB36B, + 36287 - 11904: 0xD7D9, + 36288 - 11904: 0x8AC4, + 36289 - 11904: 0xD7DA, + 36290 - 11904: 0xD7D7, + 36291 - 11904: 0x99E0, + 36293 - 11904: 0xDBFB, + 36294 - 11904: 0xB660, + 36295 - 11904: 0xDBF3, + 36296 - 11904: 0xDBF9, + 36299 - 11904: 0xB65B, + 36300 - 11904: 0xB65E, + 36301 - 11904: 0xDBF2, + 36302 - 11904: 0xB659, + 36303 - 11904: 0xDBF6, + 36304 - 11904: 0xE06C, + 36305 - 11904: 0xB65D, + 36307 - 11904: 0xDBF1, + 36308 - 11904: 0x9FF0, + 36309 - 11904: 0xDBF7, + 36310 - 11904: 0xDBF4, + 36311 - 11904: 0xDBFA, + 36312 - 11904: 0xDBF0, + 36313 - 11904: 0xDBF8, + 36314 - 11904: 0xB65C, + 36315 - 11904: 0xB65F, + 36316 - 11904: 0xDBF5, + 36317 - 11904: 0xB65A, + 36319 - 11904: 0xB8F2, + 36320 - 11904: 0xE068, + 36321 - 11904: 0xB8F1, + 36322 - 11904: 0xE06F, + 36323 - 11904: 0xE06E, + 36324 - 11904: 0xB8F8, + 36326 - 11904: 0xB8F9, + 36327 - 11904: 0xE070, + 36328 - 11904: 0xB8F3, + 36329 - 11904: 0xE06D, + 36330 - 11904: 0xB8F7, + 36331 - 11904: 0xE072, + 36332 - 11904: 0xE069, + 36334 - 11904: 0xE06B, + 36335 - 11904: 0xB8F4, + 36336 - 11904: 0xE067, + 36337 - 11904: 0xE06A, + 36338 - 11904: 0xE071, + 36339 - 11904: 0xB8F5, + 36340 - 11904: 0xE073, + 36346 - 11904: 0xB8F6, + 36348 - 11904: 0xBBB1, + 36349 - 11904: 0xE45B, + 36350 - 11904: 0xE461, + 36351 - 11904: 0xE459, + 36352 - 11904: 0xE462, + 36353 - 11904: 0x9FF3, + 36354 - 11904: 0xE458, + 36355 - 11904: 0xE45D, + 36356 - 11904: 0xE463, + 36357 - 11904: 0xE460, + 36358 - 11904: 0xE45F, + 36359 - 11904: 0xE45E, + 36361 - 11904: 0xE457, + 36362 - 11904: 0xE45C, + 36365 - 11904: 0xE45A, + 36366 - 11904: 0x9DBF, + 36367 - 11904: 0xBDF1, + 36368 - 11904: 0xBDEE, + 36369 - 11904: 0xE7FB, + 36370 - 11904: 0xE841, + 36371 - 11904: 0xE843, + 36372 - 11904: 0xE840, + 36373 - 11904: 0xE7F8, + 36374 - 11904: 0xE7FA, + 36375 - 11904: 0xE845, + 36376 - 11904: 0xE842, + 36377 - 11904: 0xE7FC, + 36378 - 11904: 0xE846, + 36379 - 11904: 0xE7F9, + 36380 - 11904: 0xE844, + 36381 - 11904: 0xBDEF, + 36382 - 11904: 0xBDF5, + 36383 - 11904: 0xBDF3, + 36384 - 11904: 0xE7F3, + 36385 - 11904: 0xBDF4, + 36386 - 11904: 0xBDF0, + 36387 - 11904: 0xE7F4, + 36388 - 11904: 0xE7F6, + 36389 - 11904: 0xE7F5, + 36390 - 11904: 0xE7FD, + 36391 - 11904: 0xE7FE, + 36392 - 11904: 0x9FF6, + 36393 - 11904: 0xBDF2, + 36394 - 11904: 0x95C8, + 36395 - 11904: 0xBDED, + 36397 - 11904: 0x9E5A, + 36398 - 11904: 0xE7F7, + 36400 - 11904: 0xEBC6, + 36401 - 11904: 0xBFE2, + 36403 - 11904: 0xEBBD, + 36404 - 11904: 0xBFE3, + 36405 - 11904: 0xBFE6, + 36406 - 11904: 0xEBC2, + 36408 - 11904: 0xEBBF, + 36409 - 11904: 0xBFE5, + 36410 - 11904: 0x99E3, + 36412 - 11904: 0xEBC3, + 36413 - 11904: 0xEBC4, + 36414 - 11904: 0xEBBE, + 36415 - 11904: 0xEBC7, + 36416 - 11904: 0xEBC0, + 36417 - 11904: 0xEBC5, + 36418 - 11904: 0xBFE4, + 36420 - 11904: 0xBFE1, + 36421 - 11904: 0xEBC1, + 36422 - 11904: 0x8A4A, + 36423 - 11904: 0xEEBF, + 36424 - 11904: 0xC1D0, + 36425 - 11904: 0xC1CE, + 36426 - 11904: 0xC1D1, + 36427 - 11904: 0xC1CF, + 36428 - 11904: 0xEEBE, + 36429 - 11904: 0xEEBB, + 36430 - 11904: 0xEEBA, + 36431 - 11904: 0x9FF1, + 36432 - 11904: 0xEEBD, + 36435 - 11904: 0xEEBC, + 36436 - 11904: 0xF145, + 36437 - 11904: 0xC2DE, + 36438 - 11904: 0xF0FB, + 36439 - 11904: 0xF0FA, + 36441 - 11904: 0xC2D9, + 36442 - 11904: 0xF141, + 36443 - 11904: 0xF140, + 36444 - 11904: 0xF0F7, + 36445 - 11904: 0xF143, + 36446 - 11904: 0xF0FC, + 36447 - 11904: 0xC2DD, + 36448 - 11904: 0xF0F9, + 36449 - 11904: 0xF142, + 36450 - 11904: 0xF0F8, + 36451 - 11904: 0xC2DA, + 36452 - 11904: 0xC2DC, + 36453 - 11904: 0xF0FD, + 36454 - 11904: 0xC2DB, + 36455 - 11904: 0xF0FE, + 36456 - 11904: 0x8AA7, + 36457 - 11904: 0xF144, + 36458 - 11904: 0xF352, + 36460 - 11904: 0xC3DE, + 36461 - 11904: 0xF34F, + 36463 - 11904: 0xF353, + 36465 - 11904: 0x99E6, + 36466 - 11904: 0xC3DB, + 36467 - 11904: 0xF351, + 36468 - 11904: 0xC3E0, + 36469 - 11904: 0x9FF7, + 36470 - 11904: 0xC3DD, + 36471 - 11904: 0x9FED, + 36472 - 11904: 0xF350, + 36474 - 11904: 0xC3DF, + 36475 - 11904: 0xF354, + 36476 - 11904: 0xC3DA, + 36478 - 11904: 0x8A5C, + 36480 - 11904: 0x9DAE, + 36481 - 11904: 0xC4BC, + 36482 - 11904: 0xC4BE, + 36484 - 11904: 0xF4D9, + 36485 - 11904: 0xC4BD, + 36486 - 11904: 0xF4D7, + 36487 - 11904: 0xC3DC, + 36488 - 11904: 0xF4D8, + 36489 - 11904: 0xC4BB, + 36490 - 11904: 0xC543, + 36491 - 11904: 0xC545, + 36492 - 11904: 0xF656, + 36493 - 11904: 0xC544, + 36494 - 11904: 0xF655, + 36496 - 11904: 0xF761, + 36497 - 11904: 0xC5AD, + 36498 - 11904: 0xF760, + 36499 - 11904: 0xC5AE, + 36500 - 11904: 0xF75E, + 36501 - 11904: 0xF75D, + 36502 - 11904: 0xF762, + 36503 - 11904: 0xF763, + 36504 - 11904: 0xF846, + 36506 - 11904: 0xF75F, + 36509 - 11904: 0xF8C6, + 36510 - 11904: 0xF8C3, + 36511 - 11904: 0xF8C4, + 36512 - 11904: 0xF8C5, + 36513 - 11904: 0xC65C, + 36515 - 11904: 0xF951, + 36516 - 11904: 0xF950, + 36517 - 11904: 0xF94F, + 36518 - 11904: 0xF970, + 36519 - 11904: 0x95C9, + 36520 - 11904: 0xF9BE, + 36521 - 11904: 0xF9AB, + 36522 - 11904: 0xC66E, + 36523 - 11904: 0xA8AD, + 36524 - 11904: 0xB060, + 36525 - 11904: 0x9048, + 36528 - 11904: 0x99E8, + 36530 - 11904: 0xB8FA, + 36534 - 11904: 0x9049, + 36537 - 11904: 0x8CBA, + 36538 - 11904: 0xBDF6, + 36540 - 11904: 0x90B1, + 36541 - 11904: 0xEBC8, + 36544 - 11904: 0xC2DF, + 36546 - 11904: 0xF355, + 36547 - 11904: 0x904A, + 36553 - 11904: 0xF9AC, + 36554 - 11904: 0xA8AE, + 36555 - 11904: 0xAAEE, + 36556 - 11904: 0xAD79, + 36557 - 11904: 0xAD78, + 36558 - 11904: 0x99EA, + 36559 - 11904: 0xB063, + 36561 - 11904: 0xD3E8, + 36562 - 11904: 0xB061, + 36563 - 11904: 0xD3E9, + 36564 - 11904: 0xB062, + 36567 - 11904: 0xD7DF, + 36568 - 11904: 0xD7DB, + 36570 - 11904: 0x9BD1, + 36571 - 11904: 0xB36D, + 36572 - 11904: 0xD7DE, + 36573 - 11904: 0xD7DD, + 36574 - 11904: 0xD7DC, + 36575 - 11904: 0xB36E, + 36576 - 11904: 0xD7E0, + 36577 - 11904: 0xD7E1, + 36578 - 11904: 0x99EB, + 36580 - 11904: 0x99EC, + 36581 - 11904: 0xDC43, + 36582 - 11904: 0xDC41, + 36583 - 11904: 0xDC45, + 36584 - 11904: 0xDC46, + 36585 - 11904: 0xDC4C, + 36587 - 11904: 0xDC48, + 36588 - 11904: 0xDC4A, + 36589 - 11904: 0x99ED, + 36590 - 11904: 0xDC42, + 36591 - 11904: 0xDBFC, + 36593 - 11904: 0xDC49, + 36594 - 11904: 0x99EE, + 36596 - 11904: 0xDC4B, + 36597 - 11904: 0xDC44, + 36598 - 11904: 0xDC47, + 36599 - 11904: 0xDBFD, + 36600 - 11904: 0xB662, + 36601 - 11904: 0xDC40, + 36602 - 11904: 0xDBFE, + 36603 - 11904: 0xB661, + 36604 - 11904: 0xB663, + 36606 - 11904: 0xB8FD, + 36607 - 11904: 0xE075, + 36608 - 11904: 0xE077, + 36609 - 11904: 0xE076, + 36610 - 11904: 0xE07B, + 36611 - 11904: 0xB8FB, + 36613 - 11904: 0xE078, + 36614 - 11904: 0xE074, + 36615 - 11904: 0xE079, + 36616 - 11904: 0xE07A, + 36617 - 11904: 0xB8FC, + 36618 - 11904: 0xB8FE, + 36619 - 11904: 0xE07C, + 36621 - 11904: 0xE467, + 36622 - 11904: 0xE466, + 36624 - 11904: 0xE464, + 36625 - 11904: 0xE465, + 36626 - 11904: 0xBBB3, + 36627 - 11904: 0xBBB5, + 36628 - 11904: 0xBBB2, + 36629 - 11904: 0xBBB4, + 36630 - 11904: 0xE84D, + 36631 - 11904: 0xE84E, + 36632 - 11904: 0xE849, + 36633 - 11904: 0x904C, + 36634 - 11904: 0xE84A, + 36635 - 11904: 0xBDF8, + 36636 - 11904: 0xBDFD, + 36637 - 11904: 0xBDF7, + 36638 - 11904: 0xBDFE, + 36639 - 11904: 0xBDF9, + 36640 - 11904: 0xE84B, + 36643 - 11904: 0xE84C, + 36644 - 11904: 0xE848, + 36645 - 11904: 0xBE40, + 36646 - 11904: 0xBDFB, + 36649 - 11904: 0xBDFA, + 36650 - 11904: 0xBDFC, + 36652 - 11904: 0xE847, + 36653 - 11904: 0x904D, + 36654 - 11904: 0xEBCA, + 36655 - 11904: 0xBFE8, + 36656 - 11904: 0x95CB, + 36658 - 11904: 0xEBCC, + 36659 - 11904: 0xBFEA, + 36660 - 11904: 0xEBCF, + 36661 - 11904: 0xEBCB, + 36662 - 11904: 0xEBC9, + 36663 - 11904: 0xEBCE, + 36664 - 11904: 0xBFE9, + 36665 - 11904: 0xEBCD, + 36667 - 11904: 0xBFE7, + 36670 - 11904: 0xC1D3, + 36671 - 11904: 0xC1D6, + 36672 - 11904: 0xEEC1, + 36673 - 11904: 0x97E2, + 36674 - 11904: 0xC1D4, + 36675 - 11904: 0xEEC0, + 36676 - 11904: 0xC1D2, + 36677 - 11904: 0xC1D5, + 36678 - 11904: 0xF146, + 36679 - 11904: 0xF147, + 36680 - 11904: 0xF148, + 36681 - 11904: 0xC2E0, + 36682 - 11904: 0x95CC, + 36683 - 11904: 0xF149, + 36685 - 11904: 0xC2E1, + 36686 - 11904: 0xC3E2, + 36687 - 11904: 0xF358, + 36688 - 11904: 0xF359, + 36689 - 11904: 0xF357, + 36690 - 11904: 0xF356, + 36691 - 11904: 0xF35A, + 36692 - 11904: 0xC3E1, + 36693 - 11904: 0xF4DD, + 36694 - 11904: 0xF4DB, + 36695 - 11904: 0xF4DC, + 36696 - 11904: 0xF4DE, + 36697 - 11904: 0xF4DA, + 36698 - 11904: 0xF4DF, + 36699 - 11904: 0xF658, + 36700 - 11904: 0x9F78, + 36701 - 11904: 0xF659, + 36702 - 11904: 0xF657, + 36703 - 11904: 0xC546, + 36704 - 11904: 0xF764, + 36705 - 11904: 0xC5AF, + 36706 - 11904: 0xF765, + 36707 - 11904: 0xF848, + 36708 - 11904: 0xF847, + 36710 - 11904: 0x897C, + 36711 - 11904: 0x897D, + 36718 - 11904: 0x897E, + 36755 - 11904: 0x995D, + 36763 - 11904: 0xA8AF, + 36764 - 11904: 0xB664, + 36767 - 11904: 0xB940, + 36768 - 11904: 0x9B5A, + 36771 - 11904: 0xBBB6, + 36773 - 11904: 0x9050, + 36774 - 11904: 0xBFEC, + 36775 - 11904: 0x8C4F, + 36776 - 11904: 0xBFEB, + 36781 - 11904: 0xC3E3, + 36782 - 11904: 0xC47C, + 36783 - 11904: 0xC547, + 36784 - 11904: 0xA8B0, + 36785 - 11904: 0xB064, + 36786 - 11904: 0xB941, + 36787 - 11904: 0x9054, + 36788 - 11904: 0xF35B, + 36789 - 11904: 0xC6D6, + 36790 - 11904: 0x9AA8, + 36791 - 11904: 0x99EF, + 36792 - 11904: 0xFEEB, + 36793 - 11904: 0x9DA3, + 36794 - 11904: 0x9DA1, + 36795 - 11904: 0x9943, + 36796 - 11904: 0x9945, + 36798 - 11904: 0x9D7D, + 36799 - 11904: 0xCBA6, + 36801 - 11904: 0x99F0, + 36802 - 11904: 0xA8B1, + 36804 - 11904: 0xA8B4, + 36805 - 11904: 0xA8B3, + 36806 - 11904: 0xA8B2, + 36809 - 11904: 0xCBA5, + 36810 - 11904: 0x99F1, + 36811 - 11904: 0xCDCD, + 36812 - 11904: 0x99F2, + 36813 - 11904: 0xCDCF, + 36814 - 11904: 0xAAEF, + 36815 - 11904: 0x8CBC, + 36816 - 11904: 0x9D60, + 36817 - 11904: 0xAAF1, + 36818 - 11904: 0xCDCC, + 36819 - 11904: 0xCDCE, + 36820 - 11904: 0xAAF0, + 36821 - 11904: 0xCDD1, + 36822 - 11904: 0xCDD0, + 36823 - 11904: 0xCDD2, + 36826 - 11904: 0xA0A3, + 36832 - 11904: 0xD0B6, + 36833 - 11904: 0xD0B4, + 36834 - 11904: 0xAD7C, + 36835 - 11904: 0xD0B3, + 36836 - 11904: 0xADA3, + 36837 - 11904: 0xAD7E, + 36838 - 11904: 0xAD7B, + 36840 - 11904: 0xADA4, + 36842 - 11904: 0xAD7D, + 36843 - 11904: 0xADA2, + 36845 - 11904: 0xADA1, + 36846 - 11904: 0xD0B5, + 36848 - 11904: 0xAD7A, + 36852 - 11904: 0xB06A, + 36853 - 11904: 0xD3EB, + 36854 - 11904: 0xD3F1, + 36855 - 11904: 0xB067, + 36856 - 11904: 0xB06E, + 36857 - 11904: 0x905B, + 36858 - 11904: 0xB069, + 36859 - 11904: 0xD3EE, + 36860 - 11904: 0xD3F0, + 36861 - 11904: 0xB06C, + 36862 - 11904: 0xD3EA, + 36863 - 11904: 0xD3ED, + 36864 - 11904: 0xB068, + 36865 - 11904: 0xB065, + 36866 - 11904: 0xD3EC, + 36867 - 11904: 0xB06B, + 36868 - 11904: 0xD3EF, + 36869 - 11904: 0xB06D, + 36870 - 11904: 0xB066, + 36872 - 11904: 0x9EDB, + 36875 - 11904: 0xD7E3, + 36876 - 11904: 0xD7E6, + 36877 - 11904: 0xB370, + 36879 - 11904: 0xB37A, + 36880 - 11904: 0xB376, + 36881 - 11904: 0xD7E4, + 36882 - 11904: 0x9D79, + 36884 - 11904: 0xB37E, + 36885 - 11904: 0xB377, + 36886 - 11904: 0xB37C, + 36887 - 11904: 0xB372, + 36889 - 11904: 0xB36F, + 36890 - 11904: 0xB371, + 36891 - 11904: 0xB37D, + 36892 - 11904: 0xD7E5, + 36893 - 11904: 0xB375, + 36894 - 11904: 0xB378, + 36895 - 11904: 0xB374, + 36896 - 11904: 0xB379, + 36897 - 11904: 0xD7E7, + 36898 - 11904: 0xB37B, + 36899 - 11904: 0xB373, + 36900 - 11904: 0xD7E2, + 36909 - 11904: 0xDC4D, + 36910 - 11904: 0xB665, + 36911 - 11904: 0xDC4F, + 36913 - 11904: 0xB667, + 36914 - 11904: 0xB669, + 36915 - 11904: 0x99F3, + 36916 - 11904: 0xDC4E, + 36917 - 11904: 0xB666, + 36918 - 11904: 0xB66A, + 36919 - 11904: 0x9062, + 36920 - 11904: 0xB668, + 36924 - 11904: 0xB947, + 36925 - 11904: 0xE0A3, + 36926 - 11904: 0xB94F, + 36927 - 11904: 0xE07E, + 36929 - 11904: 0xB950, + 36930 - 11904: 0xB945, + 36932 - 11904: 0xE0A1, + 36934 - 11904: 0x87BD, + 36935 - 11904: 0xB94A, + 36937 - 11904: 0xE0A2, + 36938 - 11904: 0xB943, + 36939 - 11904: 0xB942, + 36940 - 11904: 0x9F55, + 36941 - 11904: 0xB94D, + 36942 - 11904: 0xB94C, + 36943 - 11904: 0xB94B, + 36944 - 11904: 0xB949, + 36945 - 11904: 0xB94E, + 36946 - 11904: 0xE07D, + 36947 - 11904: 0xB944, + 36948 - 11904: 0xB946, + 36949 - 11904: 0xB948, + 36950 - 11904: 0x9BF9, + 36952 - 11904: 0xBBB8, + 36953 - 11904: 0xBBBB, + 36955 - 11904: 0xBBBF, + 36956 - 11904: 0xBBB9, + 36957 - 11904: 0xBBBE, + 36958 - 11904: 0xBBBC, + 36960 - 11904: 0xBBB7, + 36961 - 11904: 0x9065, + 36962 - 11904: 0xBBBD, + 36963 - 11904: 0xBBBA, + 36964 - 11904: 0x96E0, + 36967 - 11904: 0xE852, + 36968 - 11904: 0xBE43, + 36969 - 11904: 0xBE41, + 36971 - 11904: 0xE853, + 36972 - 11904: 0x98BE, + 36973 - 11904: 0xBE44, + 36974 - 11904: 0xBE42, + 36975 - 11904: 0xE851, + 36976 - 11904: 0xE850, + 36978 - 11904: 0xBFF0, + 36979 - 11904: 0xE84F, + 36980 - 11904: 0xBFEE, + 36981 - 11904: 0xBFED, + 36982 - 11904: 0xEBD0, + 36983 - 11904: 0xBE45, + 36984 - 11904: 0xBFEF, + 36985 - 11904: 0xEBD1, + 36986 - 11904: 0xBFF2, + 36987 - 11904: 0xEBD2, + 36988 - 11904: 0xBFF1, + 36989 - 11904: 0xC1D8, + 36990 - 11904: 0xEEC3, + 36991 - 11904: 0xC1D7, + 36992 - 11904: 0xC1DC, + 36993 - 11904: 0xC1DA, + 36994 - 11904: 0xC1DB, + 36995 - 11904: 0xC2E3, + 36996 - 11904: 0xC1D9, + 36997 - 11904: 0xEEC2, + 36998 - 11904: 0xEBD3, + 36999 - 11904: 0xC2E2, + 37000 - 11904: 0xC2E4, + 37002 - 11904: 0xC3E4, + 37003 - 11904: 0xC3E5, + 37005 - 11904: 0xF4E0, + 37007 - 11904: 0xC5DE, + 37008 - 11904: 0xC5DD, + 37009 - 11904: 0xA8B6, + 37012 - 11904: 0xCA55, + 37013 - 11904: 0xB06F, + 37015 - 11904: 0xCA52, + 37016 - 11904: 0xCA53, + 37017 - 11904: 0xCA51, + 37019 - 11904: 0xCA54, + 37022 - 11904: 0xCBAA, + 37023 - 11904: 0xCBA7, + 37024 - 11904: 0xCBAC, + 37025 - 11904: 0xCBA8, + 37026 - 11904: 0xA8B7, + 37027 - 11904: 0xA8BA, + 37029 - 11904: 0xCBA9, + 37030 - 11904: 0xA8B9, + 37031 - 11904: 0xCBAB, + 37032 - 11904: 0x9068, + 37034 - 11904: 0xA8B8, + 37038 - 11904: 0x906C, + 37039 - 11904: 0xCDD5, + 37040 - 11904: 0xCDD7, + 37041 - 11904: 0xAAF4, + 37042 - 11904: 0xCDD3, + 37043 - 11904: 0xCDD6, + 37044 - 11904: 0xCDD4, + 37045 - 11904: 0xAAF2, + 37046 - 11904: 0xAAF5, + 37048 - 11904: 0xAAF3, + 37051 - 11904: 0x95D8, + 37053 - 11904: 0xD0B8, + 37054 - 11904: 0xD0BC, + 37055 - 11904: 0xD0B9, + 37057 - 11904: 0xADA7, + 37059 - 11904: 0xADA8, + 37060 - 11904: 0x906A, + 37061 - 11904: 0xD0BB, + 37063 - 11904: 0xD0BD, + 37064 - 11904: 0xD0BF, + 37066 - 11904: 0xADA5, + 37067 - 11904: 0xD0BE, + 37070 - 11904: 0xADA6, + 37076 - 11904: 0xD7EE, + 37077 - 11904: 0xD0BA, + 37078 - 11904: 0xD3F2, + 37079 - 11904: 0xD3FB, + 37080 - 11904: 0xD3F9, + 37081 - 11904: 0xD3F4, + 37082 - 11904: 0xD3F5, + 37083 - 11904: 0xD3FA, + 37084 - 11904: 0xD3FC, + 37085 - 11904: 0xB071, + 37087 - 11904: 0xD3F7, + 37088 - 11904: 0xD3F3, + 37089 - 11904: 0xB070, + 37090 - 11904: 0xB072, + 37091 - 11904: 0xD3F6, + 37092 - 11904: 0xD3FD, + 37093 - 11904: 0xD3F8, + 37096 - 11904: 0xB3A1, + 37097 - 11904: 0xD7F1, + 37098 - 11904: 0xD7E9, + 37099 - 11904: 0xD7EF, + 37100 - 11904: 0xD7F0, + 37101 - 11904: 0xB3A2, + 37103 - 11904: 0xD7E8, + 37104 - 11904: 0xD7EA, + 37105 - 11904: 0xD0B7, + 37106 - 11904: 0xD7EC, + 37107 - 11904: 0xD7ED, + 37108 - 11904: 0xD7EB, + 37109 - 11904: 0xB66C, + 37113 - 11904: 0xDC56, + 37114 - 11904: 0xEBD4, + 37115 - 11904: 0xDC57, + 37116 - 11904: 0xDC54, + 37117 - 11904: 0xB3A3, + 37118 - 11904: 0xB66E, + 37119 - 11904: 0xDC53, + 37120 - 11904: 0xDC59, + 37121 - 11904: 0xDC58, + 37122 - 11904: 0xB66B, + 37123 - 11904: 0xDC5C, + 37124 - 11904: 0xDC52, + 37125 - 11904: 0xDC5B, + 37126 - 11904: 0xDC50, + 37127 - 11904: 0xDC5A, + 37128 - 11904: 0xDC55, + 37129 - 11904: 0xB66D, + 37131 - 11904: 0xE0AA, + 37133 - 11904: 0xE0A5, + 37134 - 11904: 0xE0AB, + 37135 - 11904: 0xE0A6, + 37136 - 11904: 0xE0A4, + 37137 - 11904: 0xE0A7, + 37138 - 11904: 0xB951, + 37140 - 11904: 0xE0A9, + 37142 - 11904: 0xE0A8, + 37143 - 11904: 0xB952, + 37144 - 11904: 0xBBC1, + 37145 - 11904: 0xBBC0, + 37146 - 11904: 0xE46E, + 37147 - 11904: 0xE471, + 37148 - 11904: 0xE469, + 37149 - 11904: 0xE46D, + 37150 - 11904: 0xBBC2, + 37151 - 11904: 0xE46C, + 37152 - 11904: 0xE46A, + 37153 - 11904: 0xE470, + 37154 - 11904: 0xE46B, + 37155 - 11904: 0xE468, + 37156 - 11904: 0xE46F, + 37158 - 11904: 0xE859, + 37159 - 11904: 0xBE48, + 37160 - 11904: 0xF14A, + 37161 - 11904: 0xE856, + 37162 - 11904: 0xE857, + 37163 - 11904: 0xE855, + 37164 - 11904: 0xDC51, + 37165 - 11904: 0xBE47, + 37166 - 11904: 0xE85A, + 37167 - 11904: 0xE854, + 37168 - 11904: 0xBE46, + 37169 - 11904: 0xBE49, + 37170 - 11904: 0xE858, + 37171 - 11904: 0xEBD5, + 37172 - 11904: 0xBFF3, + 37173 - 11904: 0xEBD6, + 37174 - 11904: 0xEBD7, + 37176 - 11904: 0xEEC4, + 37177 - 11904: 0xC1DD, + 37178 - 11904: 0xF14B, + 37179 - 11904: 0xF14C, + 37182 - 11904: 0xF14D, + 37183 - 11904: 0xF35D, + 37184 - 11904: 0xF35C, + 37185 - 11904: 0xF4E2, + 37187 - 11904: 0xF4E1, + 37188 - 11904: 0xF65B, + 37189 - 11904: 0xF65C, + 37190 - 11904: 0xF65A, + 37191 - 11904: 0xF766, + 37192 - 11904: 0xC5B0, + 37193 - 11904: 0xA8BB, + 37194 - 11904: 0xADAA, + 37195 - 11904: 0xADA9, + 37196 - 11904: 0xB075, + 37197 - 11904: 0xB074, + 37198 - 11904: 0xD440, + 37199 - 11904: 0xD441, + 37200 - 11904: 0xD3FE, + 37201 - 11904: 0x9FB2, + 37202 - 11904: 0xB073, + 37203 - 11904: 0xD7F5, + 37205 - 11904: 0xD7F6, + 37206 - 11904: 0xD7F2, + 37207 - 11904: 0xB3A4, + 37208 - 11904: 0xD7F3, + 37209 - 11904: 0x9FAE, + 37210 - 11904: 0xD7F4, + 37212 - 11904: 0x9FB0, + 37214 - 11904: 0x89AD, + 37215 - 11904: 0xDC5F, + 37216 - 11904: 0xDC61, + 37217 - 11904: 0xDC5D, + 37218 - 11904: 0xDC60, + 37219 - 11904: 0xB66F, + 37220 - 11904: 0xDC5E, + 37221 - 11904: 0xB670, + 37223 - 11904: 0x906E, + 37224 - 11904: 0xDD73, + 37225 - 11904: 0xB955, + 37226 - 11904: 0xB954, + 37228 - 11904: 0xB953, + 37230 - 11904: 0xE0AC, + 37231 - 11904: 0xE0AD, + 37232 - 11904: 0x9E71, + 37234 - 11904: 0xE473, + 37235 - 11904: 0xE475, + 37236 - 11904: 0xBBC6, + 37237 - 11904: 0xBBC3, + 37238 - 11904: 0x9E4A, + 37239 - 11904: 0xBBC5, + 37240 - 11904: 0xBBC4, + 37241 - 11904: 0xE474, + 37242 - 11904: 0xE472, + 37244 - 11904: 0x9FDC, + 37248 - 11904: 0xE861, + 37249 - 11904: 0xE85E, + 37250 - 11904: 0xE85F, + 37251 - 11904: 0xBE4D, + 37252 - 11904: 0xE860, + 37253 - 11904: 0xE85B, + 37254 - 11904: 0xE85C, + 37255 - 11904: 0xBE4A, + 37257 - 11904: 0xBE4B, + 37258 - 11904: 0xE85D, + 37259 - 11904: 0xBE4C, + 37260 - 11904: 0x89AB, + 37261 - 11904: 0xEBDB, + 37262 - 11904: 0x9FB8, + 37263 - 11904: 0xEBDC, + 37264 - 11904: 0xEBD9, + 37265 - 11904: 0xEBDA, + 37266 - 11904: 0xBFF4, + 37267 - 11904: 0xEBD8, + 37273 - 11904: 0xEEC8, + 37274 - 11904: 0xEEC5, + 37275 - 11904: 0xEEC7, + 37276 - 11904: 0xC1E0, + 37277 - 11904: 0xEECB, + 37278 - 11904: 0xC1DF, + 37279 - 11904: 0xEEC9, + 37280 - 11904: 0xEECC, + 37281 - 11904: 0xEECA, + 37282 - 11904: 0xEEC6, + 37283 - 11904: 0xC1DE, + 37285 - 11904: 0xF14F, + 37287 - 11904: 0xF150, + 37288 - 11904: 0xF14E, + 37289 - 11904: 0x9070, + 37290 - 11904: 0xF152, + 37291 - 11904: 0xC2E5, + 37292 - 11904: 0xC2E6, + 37293 - 11904: 0xF35F, + 37294 - 11904: 0xC3E7, + 37295 - 11904: 0xF151, + 37296 - 11904: 0xF35E, + 37297 - 11904: 0xC3E6, + 37298 - 11904: 0xF4E5, + 37299 - 11904: 0xF4E6, + 37300 - 11904: 0xC4BF, + 37301 - 11904: 0xF4E4, + 37302 - 11904: 0x8B63, + 37303 - 11904: 0xF4E3, + 37305 - 11904: 0xF65D, + 37306 - 11904: 0xC548, + 37307 - 11904: 0x95DC, + 37308 - 11904: 0xF849, + 37309 - 11904: 0xF8C8, + 37310 - 11904: 0xF8C7, + 37312 - 11904: 0xC643, + 37313 - 11904: 0xC65D, + 37314 - 11904: 0xF8C9, + 37315 - 11904: 0xF971, + 37316 - 11904: 0x9071, + 37317 - 11904: 0xC66F, + 37318 - 11904: 0xA8BC, + 37319 - 11904: 0xAAF6, + 37321 - 11904: 0xB956, + 37323 - 11904: 0xC4C0, + 37324 - 11904: 0xA8BD, + 37325 - 11904: 0xADAB, + 37326 - 11904: 0xB3A5, + 37327 - 11904: 0xB671, + 37328 - 11904: 0xC2E7, + 37329 - 11904: 0xAAF7, + 37331 - 11904: 0xD0C1, + 37332 - 11904: 0xD0C0, + 37333 - 11904: 0xD442, + 37334 - 11904: 0xFC5E, + 37335 - 11904: 0xB078, + 37336 - 11904: 0xB076, + 37337 - 11904: 0xB07A, + 37338 - 11904: 0xD444, + 37340 - 11904: 0xB079, + 37341 - 11904: 0xB077, + 37343 - 11904: 0x8949, + 37346 - 11904: 0xD443, + 37347 - 11904: 0xB3A8, + 37348 - 11904: 0xD7FC, + 37349 - 11904: 0x965B, + 37350 - 11904: 0xB3A7, + 37351 - 11904: 0xB3A9, + 37352 - 11904: 0xD842, + 37353 - 11904: 0xB3AB, + 37354 - 11904: 0xD7FE, + 37355 - 11904: 0xD840, + 37356 - 11904: 0xD7F7, + 37357 - 11904: 0xB3AA, + 37358 - 11904: 0xD843, + 37361 - 11904: 0xD7F9, + 37363 - 11904: 0xD7FA, + 37364 - 11904: 0xD7F8, + 37365 - 11904: 0xB3A6, + 37366 - 11904: 0x8C50, + 37367 - 11904: 0xD841, + 37368 - 11904: 0xD7FB, + 37369 - 11904: 0xD7FD, + 37370 - 11904: 0x94A6, + 37373 - 11904: 0xDC6D, + 37374 - 11904: 0x8FD5, + 37375 - 11904: 0xDC6C, + 37376 - 11904: 0xDC6A, + 37377 - 11904: 0xDC62, + 37378 - 11904: 0xDC71, + 37379 - 11904: 0xDC65, + 37380 - 11904: 0xDC6F, + 37381 - 11904: 0xDC76, + 37382 - 11904: 0xDC6E, + 37383 - 11904: 0xB679, + 37384 - 11904: 0x9E73, + 37385 - 11904: 0xB675, + 37386 - 11904: 0xDC63, + 37388 - 11904: 0xDC69, + 37389 - 11904: 0xB677, + 37390 - 11904: 0x9075, + 37391 - 11904: 0xDC68, + 37392 - 11904: 0xB678, + 37393 - 11904: 0xB67A, + 37394 - 11904: 0xDC6B, + 37395 - 11904: 0x99F7, + 37396 - 11904: 0xB672, + 37397 - 11904: 0xB673, + 37398 - 11904: 0xDC77, + 37399 - 11904: 0xDC75, + 37400 - 11904: 0x87B2, + 37401 - 11904: 0xDC74, + 37402 - 11904: 0xDC66, + 37404 - 11904: 0xDC72, + 37406 - 11904: 0xB676, + 37409 - 11904: 0x8CBF, + 37411 - 11904: 0xB674, + 37412 - 11904: 0xDC73, + 37413 - 11904: 0xDC64, + 37414 - 11904: 0xDC67, + 37415 - 11904: 0xDC70, + 37416 - 11904: 0x99F9, + 37418 - 11904: 0x9663, + 37419 - 11904: 0x95B9, + 37421 - 11904: 0xE4BA, + 37422 - 11904: 0xE0B7, + 37424 - 11904: 0xE0B0, + 37425 - 11904: 0xE0C3, + 37426 - 11904: 0xE0CC, + 37427 - 11904: 0xE0B3, + 37428 - 11904: 0xB961, + 37429 - 11904: 0x94D4, + 37430 - 11904: 0xE0C0, + 37431 - 11904: 0xB957, + 37432 - 11904: 0xB959, + 37433 - 11904: 0xB965, + 37434 - 11904: 0xE0B1, + 37436 - 11904: 0xFCFA, + 37437 - 11904: 0xB95A, + 37438 - 11904: 0xB95C, + 37439 - 11904: 0xB966, + 37440 - 11904: 0xB95B, + 37441 - 11904: 0x9077, + 37444 - 11904: 0x90AB, + 37445 - 11904: 0xB964, + 37446 - 11904: 0xE0B9, + 37448 - 11904: 0xE0AE, + 37449 - 11904: 0xB962, + 37450 - 11904: 0xE0B8, + 37451 - 11904: 0xB95E, + 37452 - 11904: 0xE0CA, + 37453 - 11904: 0xB963, + 37454 - 11904: 0xE0C8, + 37455 - 11904: 0xE0BC, + 37456 - 11904: 0xE0C6, + 37457 - 11904: 0xB960, + 37458 - 11904: 0xE0AF, + 37459 - 11904: 0xE0C9, + 37460 - 11904: 0xE0C4, + 37461 - 11904: 0x9D4D, + 37462 - 11904: 0xE0CB, + 37463 - 11904: 0xB958, + 37464 - 11904: 0x99FA, + 37466 - 11904: 0xB967, + 37467 - 11904: 0xB95D, + 37469 - 11904: 0x92E3, + 37470 - 11904: 0xE0B5, + 37471 - 11904: 0x97BB, + 37472 - 11904: 0xE0BD, + 37473 - 11904: 0xE0C1, + 37474 - 11904: 0x9078, + 37475 - 11904: 0xE0C5, + 37476 - 11904: 0xB95F, + 37477 - 11904: 0xE0B4, + 37478 - 11904: 0xE0B2, + 37479 - 11904: 0xE0BE, + 37483 - 11904: 0x99FB, + 37484 - 11904: 0xE0BB, + 37485 - 11904: 0xE0BA, + 37486 - 11904: 0x97E0, + 37487 - 11904: 0xE0BF, + 37488 - 11904: 0xE0C2, + 37490 - 11904: 0xE0C7, + 37494 - 11904: 0xE478, + 37495 - 11904: 0x96DC, + 37496 - 11904: 0xBBC7, + 37497 - 11904: 0xE4A4, + 37498 - 11904: 0xE47A, + 37499 - 11904: 0xBBCC, + 37500 - 11904: 0xBBD0, + 37501 - 11904: 0xE4AD, + 37502 - 11904: 0xE4B5, + 37503 - 11904: 0xE4A6, + 37504 - 11904: 0xBBC8, + 37505 - 11904: 0x9CA8, + 37506 - 11904: 0xE4AA, + 37507 - 11904: 0xE0B6, + 37508 - 11904: 0x9772, + 37509 - 11904: 0xBBC9, + 37510 - 11904: 0xE4B1, + 37511 - 11904: 0xE4B6, + 37512 - 11904: 0xE4AE, + 37513 - 11904: 0x9440, + 37514 - 11904: 0xE4B0, + 37515 - 11904: 0xE4B9, + 37516 - 11904: 0xE4B2, + 37517 - 11904: 0xE47E, + 37518 - 11904: 0xE4A9, + 37519 - 11904: 0x92F2, + 37521 - 11904: 0xBBD1, + 37523 - 11904: 0xBBCD, + 37524 - 11904: 0xE47C, + 37525 - 11904: 0xE4AB, + 37526 - 11904: 0xBBCB, + 37527 - 11904: 0xE4A5, + 37528 - 11904: 0xBBCA, + 37529 - 11904: 0xE4B3, + 37530 - 11904: 0xE4A2, + 37531 - 11904: 0xE479, + 37532 - 11904: 0xBBCE, + 37533 - 11904: 0xE4B8, + 37536 - 11904: 0xE47B, + 37537 - 11904: 0xE4AF, + 37538 - 11904: 0xE4AC, + 37539 - 11904: 0xE4A7, + 37540 - 11904: 0xE477, + 37541 - 11904: 0xE476, + 37542 - 11904: 0xE4A1, + 37543 - 11904: 0xE4B4, + 37544 - 11904: 0xBBCF, + 37545 - 11904: 0xE4B7, + 37546 - 11904: 0xE47D, + 37547 - 11904: 0xE4A3, + 37548 - 11904: 0xBE52, + 37550 - 11904: 0x99FD, + 37553 - 11904: 0x99FC, + 37554 - 11904: 0xBE5A, + 37555 - 11904: 0xBE55, + 37556 - 11904: 0xE8A4, + 37557 - 11904: 0xE8A1, + 37558 - 11904: 0xE867, + 37559 - 11904: 0xBE50, + 37561 - 11904: 0xF9D7, + 37562 - 11904: 0x964A, + 37563 - 11904: 0xBE4F, + 37564 - 11904: 0xBE56, + 37566 - 11904: 0x96D8, + 37567 - 11904: 0x99FE, + 37568 - 11904: 0xE865, + 37569 - 11904: 0xBE54, + 37570 - 11904: 0xE871, + 37571 - 11904: 0xE863, + 37572 - 11904: 0xE864, + 37573 - 11904: 0xBE4E, + 37574 - 11904: 0xE8A3, + 37575 - 11904: 0xBE58, + 37576 - 11904: 0xE874, + 37577 - 11904: 0xE879, + 37578 - 11904: 0xE873, + 37579 - 11904: 0xEBEE, + 37580 - 11904: 0xE86F, + 37581 - 11904: 0xE877, + 37582 - 11904: 0xE875, + 37583 - 11904: 0xE868, + 37584 - 11904: 0xE862, + 37585 - 11904: 0xE87D, + 37586 - 11904: 0xBE57, + 37587 - 11904: 0xE87E, + 37588 - 11904: 0x904B, + 37589 - 11904: 0xE878, + 37591 - 11904: 0xE86D, + 37592 - 11904: 0xE86B, + 37593 - 11904: 0xE866, + 37595 - 11904: 0xFA41, + 37597 - 11904: 0xE86E, + 37598 - 11904: 0xE87B, + 37599 - 11904: 0xE86A, + 37600 - 11904: 0xE87A, + 37601 - 11904: 0xE8A2, + 37603 - 11904: 0x9A40, + 37604 - 11904: 0xBE53, + 37605 - 11904: 0x975B, + 37606 - 11904: 0xE876, + 37607 - 11904: 0xE87C, + 37608 - 11904: 0xE872, + 37609 - 11904: 0xE86C, + 37610 - 11904: 0xBE51, + 37611 - 11904: 0x9A41, + 37612 - 11904: 0x91DD, + 37614 - 11904: 0xE4A8, + 37615 - 11904: 0xE870, + 37616 - 11904: 0xBE59, + 37617 - 11904: 0xE869, + 37618 - 11904: 0x93FC, + 37619 - 11904: 0x9A42, + 37620 - 11904: 0x9A43, + 37622 - 11904: 0x9659, + 37623 - 11904: 0xEBF4, + 37624 - 11904: 0xBFF7, + 37625 - 11904: 0xEBF3, + 37626 - 11904: 0xEBF0, + 37627 - 11904: 0xEC44, + 37628 - 11904: 0xBFFB, + 37629 - 11904: 0x9A44, + 37630 - 11904: 0xEC41, + 37631 - 11904: 0xEBF8, + 37632 - 11904: 0xEC43, + 37633 - 11904: 0xEBE9, + 37634 - 11904: 0xEBF6, + 37635 - 11904: 0x9051, + 37636 - 11904: 0xBFFD, + 37638 - 11904: 0xEBE1, + 37639 - 11904: 0x94BF, + 37640 - 11904: 0xEBDF, + 37641 - 11904: 0xEC42, + 37643 - 11904: 0xEC40, + 37644 - 11904: 0xEBFE, + 37645 - 11904: 0xEBED, + 37646 - 11904: 0xEBEC, + 37647 - 11904: 0xEBE2, + 37648 - 11904: 0xC040, + 37650 - 11904: 0xEBE8, + 37651 - 11904: 0xEBF2, + 37652 - 11904: 0xEBFD, + 37653 - 11904: 0xC043, + 37654 - 11904: 0xEC45, + 37656 - 11904: 0xC1E8, + 37657 - 11904: 0xC045, + 37658 - 11904: 0xBFFE, + 37659 - 11904: 0xEBE6, + 37661 - 11904: 0xEBEF, + 37662 - 11904: 0xEBDE, + 37663 - 11904: 0xEBE0, + 37664 - 11904: 0xBFF5, + 37665 - 11904: 0xC042, + 37666 - 11904: 0xBFFA, + 37667 - 11904: 0xEBE7, + 37668 - 11904: 0xEBF7, + 37669 - 11904: 0xEBF1, + 37670 - 11904: 0xC041, + 37671 - 11904: 0xEBDD, + 37672 - 11904: 0xC1E3, + 37673 - 11904: 0xEBF9, + 37674 - 11904: 0xEBFC, + 37675 - 11904: 0xBFFC, + 37676 - 11904: 0x90A2, + 37677 - 11904: 0xEBEB, + 37678 - 11904: 0xC044, + 37679 - 11904: 0xBFF9, + 37680 - 11904: 0x9CAB, + 37681 - 11904: 0x9776, + 37683 - 11904: 0xBFF8, + 37684 - 11904: 0xEBF5, + 37685 - 11904: 0xEBFB, + 37686 - 11904: 0xBFF6, + 37688 - 11904: 0xEBE4, + 37689 - 11904: 0xEBFA, + 37692 - 11904: 0xEBE5, + 37696 - 11904: 0xFC55, + 37697 - 11904: 0xFE45, + 37698 - 11904: 0x94A8, + 37699 - 11904: 0x9A45, + 37700 - 11904: 0xFA4B, + 37701 - 11904: 0x9DE1, + 37702 - 11904: 0xEBEA, + 37703 - 11904: 0xEED2, + 37704 - 11904: 0x96D9, + 37705 - 11904: 0xEED7, + 37706 - 11904: 0xC1E5, + 37707 - 11904: 0xC1E7, + 37708 - 11904: 0xEEDD, + 37709 - 11904: 0xC1E1, + 37710 - 11904: 0xEEEC, + 37711 - 11904: 0xEEE3, + 37712 - 11904: 0xEED8, + 37713 - 11904: 0xEED9, + 37714 - 11904: 0xEEE2, + 37716 - 11904: 0xC1EE, + 37717 - 11904: 0xEEE1, + 37718 - 11904: 0xEED1, + 37719 - 11904: 0xEEE0, + 37720 - 11904: 0xEED4, + 37721 - 11904: 0xEEED, + 37722 - 11904: 0xC1ED, + 37723 - 11904: 0xC1EB, + 37724 - 11904: 0xEED5, + 37726 - 11904: 0xEEE8, + 37727 - 11904: 0x9774, + 37728 - 11904: 0xEEDA, + 37729 - 11904: 0xEEE7, + 37730 - 11904: 0xFDF5, + 37731 - 11904: 0xEEE9, + 37732 - 11904: 0xEED0, + 37733 - 11904: 0xC1E6, + 37734 - 11904: 0x92E5, + 37735 - 11904: 0xEEEA, + 37736 - 11904: 0x9645, + 37737 - 11904: 0x91DA, + 37738 - 11904: 0xEEDE, + 37739 - 11904: 0x90A3, + 37740 - 11904: 0xC1EA, + 37741 - 11904: 0xEEDB, + 37742 - 11904: 0xA05F, + 37744 - 11904: 0xC1EC, + 37745 - 11904: 0xEEE4, + 37747 - 11904: 0x90AF, + 37748 - 11904: 0x97BF, + 37749 - 11904: 0xC1E4, + 37750 - 11904: 0xEED6, + 37751 - 11904: 0xEEE5, + 37752 - 11904: 0x914C, + 37753 - 11904: 0xEEDF, + 37754 - 11904: 0xEBE3, + 37755 - 11904: 0xEEE6, + 37756 - 11904: 0xEED3, + 37757 - 11904: 0x967A, + 37758 - 11904: 0xC1E9, + 37760 - 11904: 0xEEEB, + 37761 - 11904: 0x91DE, + 37762 - 11904: 0xC1E2, + 37763 - 11904: 0xEECE, + 37764 - 11904: 0x9A46, + 37765 - 11904: 0xFEB0, + 37766 - 11904: 0x9779, + 37767 - 11904: 0x946C, + 37768 - 11904: 0xF160, + 37769 - 11904: 0xF159, + 37770 - 11904: 0xC2E9, + 37772 - 11904: 0xF154, + 37773 - 11904: 0xF163, + 37774 - 11904: 0xF15B, + 37775 - 11904: 0xEEDC, + 37776 - 11904: 0x9858, + 37777 - 11904: 0xF165, + 37778 - 11904: 0xF155, + 37780 - 11904: 0xC2E8, + 37781 - 11904: 0xF15F, + 37782 - 11904: 0xC2EA, + 37783 - 11904: 0xC2F2, + 37784 - 11904: 0xC2F0, + 37785 - 11904: 0xF161, + 37786 - 11904: 0xC2F1, + 37787 - 11904: 0xF157, + 37788 - 11904: 0x9266, + 37789 - 11904: 0xF158, + 37790 - 11904: 0xF15D, + 37791 - 11904: 0xF162, + 37792 - 11904: 0x93FB, + 37793 - 11904: 0xEECD, + 37794 - 11904: 0xC2EB, + 37795 - 11904: 0xF16A, + 37796 - 11904: 0xF167, + 37797 - 11904: 0xF16B, + 37798 - 11904: 0xF15E, + 37799 - 11904: 0xF15A, + 37800 - 11904: 0xF168, + 37801 - 11904: 0xF36A, + 37802 - 11904: 0xF15C, + 37804 - 11904: 0xC2EE, + 37805 - 11904: 0x9A47, + 37806 - 11904: 0xC2ED, + 37807 - 11904: 0xEECF, + 37808 - 11904: 0xC2EF, + 37809 - 11904: 0xF164, + 37810 - 11904: 0xF166, + 37811 - 11904: 0xC2EC, + 37812 - 11904: 0xF169, + 37813 - 11904: 0xF153, + 37815 - 11904: 0xF156, + 37816 - 11904: 0x9749, + 37819 - 11904: 0x9748, + 37821 - 11904: 0x934A, + 37823 - 11904: 0x9CE2, + 37824 - 11904: 0xF373, + 37826 - 11904: 0xF363, + 37827 - 11904: 0xC3EB, + 37828 - 11904: 0xF371, + 37830 - 11904: 0x9264, + 37831 - 11904: 0xF361, + 37832 - 11904: 0xC3EC, + 37834 - 11904: 0xF36C, + 37835 - 11904: 0x91DF, + 37836 - 11904: 0xF368, + 37837 - 11904: 0xC3F1, + 37838 - 11904: 0xF372, + 37839 - 11904: 0xF362, + 37840 - 11904: 0xF365, + 37841 - 11904: 0xC3E9, + 37842 - 11904: 0xF374, + 37843 - 11904: 0xFB79, + 37844 - 11904: 0xF36D, + 37845 - 11904: 0xF370, + 37846 - 11904: 0xC3EF, + 37847 - 11904: 0xC3F4, + 37848 - 11904: 0xC3F2, + 37849 - 11904: 0xF369, + 37850 - 11904: 0xF364, + 37851 - 11904: 0x96D7, + 37852 - 11904: 0xC3ED, + 37853 - 11904: 0xC3EE, + 37854 - 11904: 0xF360, + 37855 - 11904: 0xC3EA, + 37856 - 11904: 0x9343, + 37857 - 11904: 0xC3E8, + 37858 - 11904: 0xC3F0, + 37859 - 11904: 0xF36F, + 37860 - 11904: 0xC3F3, + 37862 - 11904: 0xF36B, + 37863 - 11904: 0xF375, + 37864 - 11904: 0xC3F5, + 37868 - 11904: 0xF367, + 37870 - 11904: 0xF36E, + 37872 - 11904: 0xFDCB, + 37873 - 11904: 0xFE7A, + 37875 - 11904: 0x91DB, + 37876 - 11904: 0x8C6A, + 37877 - 11904: 0xF4F3, + 37878 - 11904: 0xF542, + 37879 - 11904: 0xF4F5, + 37880 - 11904: 0xF4FC, + 37881 - 11904: 0xF366, + 37882 - 11904: 0xF4FA, + 37883 - 11904: 0xF4E9, + 37884 - 11904: 0xF540, + 37885 - 11904: 0xC4C3, + 37886 - 11904: 0xF4ED, + 37887 - 11904: 0xF4FE, + 37888 - 11904: 0xF4F4, + 37889 - 11904: 0x97AF, + 37891 - 11904: 0xC4C2, + 37892 - 11904: 0x95DD, + 37894 - 11904: 0xF544, + 37895 - 11904: 0xF4F6, + 37896 - 11904: 0x9348, + 37897 - 11904: 0xF4FB, + 37898 - 11904: 0xF4FD, + 37899 - 11904: 0xF4E7, + 37900 - 11904: 0xF541, + 37901 - 11904: 0xF4F2, + 37902 - 11904: 0xF4F7, + 37903 - 11904: 0xF4EB, + 37904 - 11904: 0xF4EF, + 37905 - 11904: 0xF543, + 37906 - 11904: 0xF4F9, + 37907 - 11904: 0xF4E8, + 37908 - 11904: 0xF4EC, + 37909 - 11904: 0xF4EE, + 37910 - 11904: 0xF4F8, + 37911 - 11904: 0x9A4B, + 37912 - 11904: 0xC4C1, + 37913 - 11904: 0xF4F1, + 37915 - 11904: 0xFC45, + 37917 - 11904: 0x9A4D, + 37920 - 11904: 0xF4EA, + 37924 - 11904: 0x91BC, + 37925 - 11904: 0x90E2, + 37926 - 11904: 0x90B4, + 37927 - 11904: 0x95E1, + 37928 - 11904: 0xF4F0, + 37929 - 11904: 0xF661, + 37930 - 11904: 0xF666, + 37931 - 11904: 0xC54F, + 37932 - 11904: 0xF668, + 37933 - 11904: 0x9A4E, + 37934 - 11904: 0xC549, + 37935 - 11904: 0x87AD, + 37936 - 11904: 0xF664, + 37937 - 11904: 0xF66A, + 37938 - 11904: 0xC54E, + 37939 - 11904: 0xC54A, + 37941 - 11904: 0xC54B, + 37942 - 11904: 0xF660, + 37943 - 11904: 0xF667, + 37944 - 11904: 0xC54D, + 37945 - 11904: 0xF665, + 37946 - 11904: 0xC54C, + 37947 - 11904: 0xF65F, + 37948 - 11904: 0xF663, + 37949 - 11904: 0xF662, + 37950 - 11904: 0x9A4F, + 37951 - 11904: 0xF65E, + 37952 - 11904: 0xF669, + 37954 - 11904: 0xFE40, + 37955 - 11904: 0xFE43, + 37956 - 11904: 0xC5B1, + 37957 - 11904: 0xF76D, + 37958 - 11904: 0xF770, + 37959 - 11904: 0xF76C, + 37960 - 11904: 0xF76E, + 37961 - 11904: 0xF76F, + 37962 - 11904: 0xF769, + 37963 - 11904: 0xF76A, + 37964 - 11904: 0xF767, + 37965 - 11904: 0x96DD, + 37967 - 11904: 0xF76B, + 37968 - 11904: 0xF768, + 37969 - 11904: 0xC5B2, + 37970 - 11904: 0xC5B3, + 37972 - 11904: 0x9A51, + 37973 - 11904: 0xF84B, + 37975 - 11904: 0xF84D, + 37976 - 11904: 0x96A7, + 37979 - 11904: 0x90B0, + 37981 - 11904: 0xF84C, + 37982 - 11904: 0xF84E, + 37984 - 11904: 0xC5E0, + 37986 - 11904: 0xF84A, + 37987 - 11904: 0xC5DF, + 37988 - 11904: 0xC5E1, + 37989 - 11904: 0x9C4E, + 37991 - 11904: 0x9443, + 37992 - 11904: 0xF8CB, + 37993 - 11904: 0xF8CC, + 37994 - 11904: 0xC644, + 37995 - 11904: 0xF8CA, + 37996 - 11904: 0x8EBA, + 37997 - 11904: 0xF953, + 37998 - 11904: 0xF952, + 37999 - 11904: 0xF954, + 38000 - 11904: 0xC65F, + 38001 - 11904: 0xF955, + 38002 - 11904: 0xC65E, + 38003 - 11904: 0xF956, + 38004 - 11904: 0xF972, + 38005 - 11904: 0xF975, + 38006 - 11904: 0xF974, + 38007 - 11904: 0xC668, + 38008 - 11904: 0xF973, + 38009 - 11904: 0x9A52, + 38011 - 11904: 0xFCC1, + 38012 - 11904: 0xC672, + 38013 - 11904: 0xC670, + 38014 - 11904: 0xC671, + 38015 - 11904: 0xC677, + 38016 - 11904: 0xF9C0, + 38017 - 11904: 0xF9C1, + 38018 - 11904: 0xF9BF, + 38019 - 11904: 0xF9C9, + 38021 - 11904: 0x8BE9, + 38047 - 11904: 0x9CAF, + 38050 - 11904: 0x8BFD, + 38081 - 11904: 0x9ABC, + 38083 - 11904: 0x9AB8, + 38108 - 11904: 0x9AAE, + 38134 - 11904: 0x9AA7, + 38189 - 11904: 0x9A53, + 38215 - 11904: 0x9D74, + 38263 - 11904: 0xAAF8, + 38264 - 11904: 0x8BEA, + 38266 - 11904: 0xD844, + 38267 - 11904: 0xDC78, + 38268 - 11904: 0xE8A5, + 38269 - 11904: 0xF376, + 38271 - 11904: 0x8BEB, + 38272 - 11904: 0xAAF9, + 38274 - 11904: 0xADAC, + 38275 - 11904: 0xB07B, + 38277 - 11904: 0x90B2, + 38278 - 11904: 0xD845, + 38280 - 11904: 0xD846, + 38281 - 11904: 0xB3AC, + 38283 - 11904: 0xB67D, + 38284 - 11904: 0xDC7A, + 38285 - 11904: 0xDC79, + 38286 - 11904: 0xB6A3, + 38287 - 11904: 0xB67C, + 38288 - 11904: 0xDC7B, + 38289 - 11904: 0xB67E, + 38290 - 11904: 0xB6A2, + 38291 - 11904: 0xB6A1, + 38292 - 11904: 0xB67B, + 38294 - 11904: 0x95E9, + 38295 - 11904: 0x95E8, + 38296 - 11904: 0xB968, + 38297 - 11904: 0x95E6, + 38299 - 11904: 0xE0D0, + 38300 - 11904: 0xE0CE, + 38302 - 11904: 0xE0CF, + 38303 - 11904: 0xE0CD, + 38304 - 11904: 0x90B5, + 38305 - 11904: 0xBBD2, + 38306 - 11904: 0x9A54, + 38307 - 11904: 0xBBD5, + 38308 - 11904: 0xBBD7, + 38309 - 11904: 0xBBD6, + 38310 - 11904: 0x90B3, + 38311 - 11904: 0x95E7, + 38312 - 11904: 0xBBD3, + 38313 - 11904: 0xBBD4, + 38314 - 11904: 0x8B50, + 38315 - 11904: 0xE8A7, + 38316 - 11904: 0xE8A6, + 38317 - 11904: 0xBE5B, + 38318 - 11904: 0xE8A8, + 38320 - 11904: 0xE8A9, + 38321 - 11904: 0xBE5C, + 38325 - 11904: 0xEC4D, + 38326 - 11904: 0xEC4B, + 38327 - 11904: 0xEEF3, + 38329 - 11904: 0xEC49, + 38330 - 11904: 0xEC4A, + 38331 - 11904: 0xC046, + 38332 - 11904: 0xEC46, + 38333 - 11904: 0xEC4E, + 38334 - 11904: 0xEC48, + 38335 - 11904: 0xEC4C, + 38336 - 11904: 0xEEEF, + 38339 - 11904: 0xEEF1, + 38341 - 11904: 0xEEF2, + 38342 - 11904: 0xC1F3, + 38343 - 11904: 0xEEEE, + 38344 - 11904: 0xC1F2, + 38345 - 11904: 0xEEF0, + 38346 - 11904: 0xC1EF, + 38347 - 11904: 0xC1F0, + 38348 - 11904: 0xC1F1, + 38349 - 11904: 0xEC47, + 38352 - 11904: 0xC2F5, + 38353 - 11904: 0xF16E, + 38354 - 11904: 0xF16C, + 38355 - 11904: 0xF16D, + 38356 - 11904: 0xC2F3, + 38357 - 11904: 0xC2F6, + 38358 - 11904: 0xC2F4, + 38362 - 11904: 0xF377, + 38363 - 11904: 0xF378, + 38364 - 11904: 0xC3F6, + 38366 - 11904: 0xF545, + 38367 - 11904: 0xF547, + 38368 - 11904: 0xF546, + 38369 - 11904: 0xC4C4, + 38370 - 11904: 0xC550, + 38371 - 11904: 0xF66D, + 38372 - 11904: 0xF66C, + 38373 - 11904: 0xF66B, + 38376 - 11904: 0x8BEC, + 38388 - 11904: 0x9A56, + 38428 - 11904: 0xAAFA, + 38429 - 11904: 0x8BFB, + 38430 - 11904: 0xC9AA, + 38432 - 11904: 0xCA58, + 38433 - 11904: 0xA6E9, + 38434 - 11904: 0xCA56, + 38435 - 11904: 0xCA59, + 38436 - 11904: 0xCA57, + 38440 - 11904: 0xCBAE, + 38442 - 11904: 0xA8C1, + 38444 - 11904: 0xA8C2, + 38445 - 11904: 0xCBB0, + 38446 - 11904: 0xA8BF, + 38447 - 11904: 0xCBAF, + 38448 - 11904: 0xCBAD, + 38449 - 11904: 0xA8C0, + 38450 - 11904: 0xA8BE, + 38451 - 11904: 0x9A57, + 38456 - 11904: 0xA0AA, + 38457 - 11904: 0xCDD8, + 38458 - 11904: 0xCDDB, + 38459 - 11904: 0xAAFD, + 38460 - 11904: 0xCDDA, + 38461 - 11904: 0xCDD9, + 38463 - 11904: 0xAAFC, + 38464 - 11904: 0xAAFB, + 38465 - 11904: 0x9FA6, + 38466 - 11904: 0xAB40, + 38467 - 11904: 0xCDDC, + 38468 - 11904: 0xAAFE, + 38469 - 11904: 0x99CC, + 38474 - 11904: 0xD0C6, + 38475 - 11904: 0xADAE, + 38476 - 11904: 0xADAF, + 38477 - 11904: 0xADB0, + 38478 - 11904: 0xD0C7, + 38479 - 11904: 0xD0C3, + 38480 - 11904: 0xADAD, + 38481 - 11904: 0xD0C4, + 38483 - 11904: 0xD0C5, + 38484 - 11904: 0xD0C2, + 38486 - 11904: 0x9C59, + 38488 - 11904: 0xB0A4, + 38491 - 11904: 0xB0A1, + 38492 - 11904: 0xD445, + 38493 - 11904: 0xB0A2, + 38494 - 11904: 0xB0A5, + 38495 - 11904: 0xD446, + 38497 - 11904: 0xB07E, + 38498 - 11904: 0xB07C, + 38499 - 11904: 0xB07D, + 38500 - 11904: 0xB0A3, + 38505 - 11904: 0x99B5, + 38506 - 11904: 0xB3AD, + 38507 - 11904: 0xD849, + 38508 - 11904: 0xB3B5, + 38509 - 11904: 0xD848, + 38511 - 11904: 0xD84B, + 38512 - 11904: 0xB3B1, + 38513 - 11904: 0xD84A, + 38514 - 11904: 0xB6AB, + 38515 - 11904: 0xB3AF, + 38516 - 11904: 0xB3B2, + 38517 - 11904: 0xB3AE, + 38518 - 11904: 0xB3B3, + 38519 - 11904: 0xB3B4, + 38520 - 11904: 0xB3B0, + 38523 - 11904: 0x90BE, + 38524 - 11904: 0xD847, + 38525 - 11904: 0xB6A7, + 38526 - 11904: 0xDC7D, + 38528 - 11904: 0xDCA3, + 38529 - 11904: 0x9FAF, + 38531 - 11904: 0xDCA2, + 38532 - 11904: 0xB6AC, + 38533 - 11904: 0xB6A8, + 38534 - 11904: 0xB6A9, + 38535 - 11904: 0xDC7C, + 38536 - 11904: 0xDC7E, + 38537 - 11904: 0xDCA1, + 38538 - 11904: 0xB6A4, + 38539 - 11904: 0xB6A6, + 38541 - 11904: 0xB6AA, + 38542 - 11904: 0xB6A5, + 38543 - 11904: 0x95F2, + 38545 - 11904: 0xE0D3, + 38546 - 11904: 0xE0D1, + 38547 - 11904: 0xE0D2, + 38548 - 11904: 0xB96A, + 38549 - 11904: 0xB96B, + 38550 - 11904: 0x90BF, + 38551 - 11904: 0xE0D4, + 38552 - 11904: 0xB969, + 38553 - 11904: 0xBBD8, + 38555 - 11904: 0xBBDA, + 38556 - 11904: 0xBBD9, + 38558 - 11904: 0xE4BB, + 38561 - 11904: 0xE4BC, + 38562 - 11904: 0xE8AB, + 38563 - 11904: 0x90C1, + 38564 - 11904: 0xE8AA, + 38565 - 11904: 0xFEE4, + 38567 - 11904: 0xC047, + 38568 - 11904: 0xC048, + 38569 - 11904: 0xEC4F, + 38570 - 11904: 0xC049, + 38572 - 11904: 0xEEF6, + 38574 - 11904: 0xEEF4, + 38576 - 11904: 0xEEF5, + 38577 - 11904: 0xC1F4, + 38579 - 11904: 0xF16F, + 38580 - 11904: 0xC3F7, + 38582 - 11904: 0xC6D7, + 38584 - 11904: 0xC1F5, + 38585 - 11904: 0xAB41, + 38587 - 11904: 0xB0A6, + 38588 - 11904: 0xD447, + 38589 - 11904: 0x90C7, + 38591 - 11904: 0xD84C, + 38592 - 11904: 0xB3B6, + 38593 - 11904: 0xB6AD, + 38594 - 11904: 0xDCA4, + 38595 - 11904: 0xDCA6, + 38596 - 11904: 0xB6AF, + 38597 - 11904: 0xB6AE, + 38598 - 11904: 0xB6B0, + 38599 - 11904: 0xB6B1, + 38600 - 11904: 0xDCA5, + 38601 - 11904: 0xB96E, + 38602 - 11904: 0xB96F, + 38603 - 11904: 0xB96D, + 38604 - 11904: 0xBBDB, + 38605 - 11904: 0xB96C, + 38606 - 11904: 0xE0D5, + 38610 - 11904: 0xBBDC, + 38611 - 11904: 0xE8AC, + 38612 - 11904: 0xEC50, + 38613 - 11904: 0xC04A, + 38614 - 11904: 0xC1F6, + 38615 - 11904: 0xF170, + 38616 - 11904: 0xF174, + 38617 - 11904: 0xC2F9, + 38618 - 11904: 0xF171, + 38619 - 11904: 0xC2FA, + 38620 - 11904: 0xC2F8, + 38621 - 11904: 0xF175, + 38622 - 11904: 0xC2FB, + 38623 - 11904: 0xF173, + 38625 - 11904: 0xF379, + 38626 - 11904: 0xC2F7, + 38627 - 11904: 0xC3F8, + 38629 - 11904: 0xF8CD, + 38632 - 11904: 0xAB42, + 38633 - 11904: 0xB3B8, + 38634 - 11904: 0xB3B7, + 38639 - 11904: 0xB6B2, + 38640 - 11904: 0xDCA8, + 38641 - 11904: 0xDCA7, + 38642 - 11904: 0xB6B3, + 38644 - 11904: 0x92E4, + 38645 - 11904: 0xE0D9, + 38646 - 11904: 0xB973, + 38647 - 11904: 0xB970, + 38648 - 11904: 0xE0D8, + 38649 - 11904: 0xB972, + 38650 - 11904: 0xE0D6, + 38651 - 11904: 0xB971, + 38653 - 11904: 0xE0D7, + 38655 - 11904: 0xE4BD, + 38656 - 11904: 0xBBDD, + 38658 - 11904: 0xE8AF, + 38659 - 11904: 0x9F52, + 38660 - 11904: 0xBE5D, + 38661 - 11904: 0xE8AD, + 38662 - 11904: 0xBE5E, + 38663 - 11904: 0xBE5F, + 38664 - 11904: 0xE8AE, + 38665 - 11904: 0xBE60, + 38667 - 11904: 0xEC51, + 38669 - 11904: 0xC04E, + 38670 - 11904: 0xC04B, + 38671 - 11904: 0xC050, + 38672 - 11904: 0xEC53, + 38673 - 11904: 0xC04C, + 38674 - 11904: 0xEC52, + 38675 - 11904: 0xC04F, + 38678 - 11904: 0xC04D, + 38680 - 11904: 0xEEF9, + 38681 - 11904: 0xEEFB, + 38683 - 11904: 0x90DB, + 38684 - 11904: 0xC1F7, + 38685 - 11904: 0xEEFA, + 38686 - 11904: 0xC1F8, + 38687 - 11904: 0xEEF8, + 38688 - 11904: 0xEEF7, + 38689 - 11904: 0xA066, + 38690 - 11904: 0xF177, + 38691 - 11904: 0xF176, + 38692 - 11904: 0xC2FC, + 38693 - 11904: 0xF178, + 38694 - 11904: 0xF37E, + 38695 - 11904: 0xC3FA, + 38696 - 11904: 0xF37D, + 38697 - 11904: 0xF37A, + 38698 - 11904: 0xC3F9, + 38699 - 11904: 0xF37B, + 38700 - 11904: 0xF37C, + 38702 - 11904: 0xF548, + 38703 - 11904: 0xF549, + 38704 - 11904: 0xC4C5, + 38705 - 11904: 0x90D2, + 38706 - 11904: 0xC553, + 38708 - 11904: 0x876B, + 38709 - 11904: 0xF66E, + 38710 - 11904: 0x90D4, + 38712 - 11904: 0xC551, + 38713 - 11904: 0xC552, + 38714 - 11904: 0xF66F, + 38717 - 11904: 0xC5B4, + 38718 - 11904: 0xC5B5, + 38719 - 11904: 0xF771, + 38720 - 11904: 0x9A5B, + 38721 - 11904: 0x95FD, + 38722 - 11904: 0xC645, + 38723 - 11904: 0xF8CF, + 38724 - 11904: 0xC647, + 38726 - 11904: 0xF8CE, + 38727 - 11904: 0xF8D0, + 38728 - 11904: 0xC646, + 38729 - 11904: 0xF957, + 38730 - 11904: 0x87B1, + 38731 - 11904: 0xF9AD, + 38737 - 11904: 0x8BC4, + 38738 - 11904: 0xAB43, + 38741 - 11904: 0x8C66, + 38742 - 11904: 0xB974, + 38743 - 11904: 0x90DE, + 38744 - 11904: 0xE4BE, + 38746 - 11904: 0xE8B0, + 38747 - 11904: 0xC051, + 38748 - 11904: 0xC052, + 38749 - 11904: 0x9CE4, + 38750 - 11904: 0xAB44, + 38751 - 11904: 0x90E1, + 38752 - 11904: 0xBE61, + 38753 - 11904: 0xC3FB, + 38754 - 11904: 0xADB1, + 38758 - 11904: 0xC053, + 38760 - 11904: 0xC5E2, + 38761 - 11904: 0xADB2, + 38762 - 11904: 0xD84D, + 38764 - 11904: 0xDCA9, + 38765 - 11904: 0x9E46, + 38766 - 11904: 0xDCAB, + 38768 - 11904: 0xDCAA, + 38769 - 11904: 0x9651, + 38770 - 11904: 0xE0DD, + 38771 - 11904: 0xE0DA, + 38772 - 11904: 0xB975, + 38774 - 11904: 0xB976, + 38775 - 11904: 0xE0DB, + 38776 - 11904: 0xE0DC, + 38778 - 11904: 0xE4C0, + 38779 - 11904: 0xE4C5, + 38780 - 11904: 0xBBDE, + 38781 - 11904: 0xE4BF, + 38782 - 11904: 0xE4C1, + 38783 - 11904: 0xE4C8, + 38784 - 11904: 0xE4C3, + 38785 - 11904: 0xE4C7, + 38786 - 11904: 0xE4C4, + 38787 - 11904: 0xE4C2, + 38788 - 11904: 0xE4C6, + 38789 - 11904: 0xBBDF, + 38791 - 11904: 0xFB58, + 38792 - 11904: 0xE8B3, + 38793 - 11904: 0x90E6, + 38794 - 11904: 0xE8B1, + 38795 - 11904: 0xBE63, + 38797 - 11904: 0xBE62, + 38798 - 11904: 0xE8B2, + 38799 - 11904: 0xBE64, + 38804 - 11904: 0xEC56, + 38807 - 11904: 0xEC55, + 38808 - 11904: 0xC054, + 38809 - 11904: 0xEC54, + 38810 - 11904: 0xEEFC, + 38811 - 11904: 0x9650, + 38812 - 11904: 0xEEFE, + 38813 - 11904: 0xEF41, + 38814 - 11904: 0xEF40, + 38815 - 11904: 0x90E7, + 38816 - 11904: 0xC1F9, + 38817 - 11904: 0xEEFD, + 38818 - 11904: 0xF1A1, + 38819 - 11904: 0xC2FD, + 38820 - 11904: 0xF17D, + 38821 - 11904: 0xF1A2, + 38822 - 11904: 0xC2FE, + 38824 - 11904: 0xF17B, + 38826 - 11904: 0xF17E, + 38827 - 11904: 0xF17C, + 38828 - 11904: 0xF179, + 38829 - 11904: 0xC340, + 38830 - 11904: 0xF17A, + 38833 - 11904: 0x90E8, + 38834 - 11904: 0x9A5D, + 38835 - 11904: 0xF3A1, + 38836 - 11904: 0x9F7A, + 38838 - 11904: 0xF3A3, + 38839 - 11904: 0xF3A2, + 38840 - 11904: 0x9B5C, + 38841 - 11904: 0xF54A, + 38842 - 11904: 0x9F7C, + 38843 - 11904: 0xF54B, + 38845 - 11904: 0xFC52, + 38846 - 11904: 0x90E9, + 38847 - 11904: 0xF670, + 38848 - 11904: 0x90EA, + 38849 - 11904: 0xC5B7, + 38850 - 11904: 0x9A5E, + 38851 - 11904: 0xC5B6, + 38852 - 11904: 0xF84F, + 38853 - 11904: 0xF850, + 38854 - 11904: 0xC648, + 38855 - 11904: 0xF8D1, + 38856 - 11904: 0x9F76, + 38857 - 11904: 0xC669, + 38859 - 11904: 0xADB3, + 38860 - 11904: 0xB6B4, + 38861 - 11904: 0xE4CA, + 38862 - 11904: 0xE4C9, + 38863 - 11904: 0xE8B5, + 38864 - 11904: 0xE8B4, + 38866 - 11904: 0x90EB, + 38867 - 11904: 0xC1FA, + 38868 - 11904: 0xEF43, + 38869 - 11904: 0xEF42, + 38870 - 11904: 0xF1A5, + 38871 - 11904: 0xF1A3, + 38872 - 11904: 0xF1A6, + 38873 - 11904: 0xF1A4, + 38876 - 11904: 0xC3FC, + 38877 - 11904: 0xF3A4, + 38878 - 11904: 0xF3A5, + 38879 - 11904: 0xF3A6, + 38880 - 11904: 0x90EC, + 38881 - 11904: 0xF671, + 38883 - 11904: 0xF772, + 38885 - 11904: 0xF8D2, + 38886 - 11904: 0x8BEE, + 38893 - 11904: 0xADB4, + 38894 - 11904: 0x90EE, + 38896 - 11904: 0xEC57, + 38897 - 11904: 0xEF44, + 38898 - 11904: 0x91C6, + 38899 - 11904: 0xADB5, + 38901 - 11904: 0x90F2, + 38902 - 11904: 0xBBE0, + 38904 - 11904: 0xEC58, + 38905 - 11904: 0xC341, + 38906 - 11904: 0xF1A7, + 38907 - 11904: 0xC3FD, + 38909 - 11904: 0xF54C, + 38910 - 11904: 0xF54D, + 38911 - 11904: 0xC554, + 38912 - 11904: 0xF851, + 38913 - 11904: 0xADB6, + 38914 - 11904: 0xB3BB, + 38915 - 11904: 0xB3BC, + 38916 - 11904: 0xD84E, + 38917 - 11904: 0xB6B5, + 38918 - 11904: 0xB6B6, + 38919 - 11904: 0xDCAC, + 38920 - 11904: 0xB6B7, + 38922 - 11904: 0xB97A, + 38924 - 11904: 0xB97C, + 38925 - 11904: 0xE0DF, + 38926 - 11904: 0xE0E0, + 38927 - 11904: 0xE0DE, + 38928 - 11904: 0xB977, + 38929 - 11904: 0xB978, + 38930 - 11904: 0xB97B, + 38931 - 11904: 0xB979, + 38932 - 11904: 0xFCBC, + 38933 - 11904: 0x8A74, + 38934 - 11904: 0xE4CB, + 38935 - 11904: 0xBBE1, + 38936 - 11904: 0xBBE2, + 38939 - 11904: 0xE8BC, + 38940 - 11904: 0xBE67, + 38941 - 11904: 0xE8B7, + 38942 - 11904: 0xE8B6, + 38943 - 11904: 0x9657, + 38944 - 11904: 0xE8BB, + 38945 - 11904: 0xBE65, + 38947 - 11904: 0x9CEF, + 38948 - 11904: 0xC05B, + 38950 - 11904: 0xE8B8, + 38951 - 11904: 0xE8BD, + 38952 - 11904: 0xE8BA, + 38953 - 11904: 0xE8B9, + 38955 - 11904: 0xBE66, + 38957 - 11904: 0xC059, + 38958 - 11904: 0x9FDF, + 38959 - 11904: 0xEC5A, + 38960 - 11904: 0xC055, + 38962 - 11904: 0xEC5B, + 38963 - 11904: 0x90F7, + 38964 - 11904: 0x90F6, + 38965 - 11904: 0xEC59, + 38967 - 11904: 0xC058, + 38968 - 11904: 0xC056, + 38969 - 11904: 0xC05A, + 38971 - 11904: 0xC057, + 38977 - 11904: 0xEF45, + 38979 - 11904: 0xEF4A, + 38980 - 11904: 0xEF46, + 38981 - 11904: 0xEF49, + 38982 - 11904: 0xC1FB, + 38983 - 11904: 0x9B5E, + 38984 - 11904: 0xEDD4, + 38985 - 11904: 0xEF48, + 38986 - 11904: 0xEF47, + 38987 - 11904: 0x90F8, + 38988 - 11904: 0xC344, + 38989 - 11904: 0xC342, + 38990 - 11904: 0xC345, + 38991 - 11904: 0xC343, + 38992 - 11904: 0xF1A8, + 38993 - 11904: 0xF1A9, + 38994 - 11904: 0xF1AA, + 38995 - 11904: 0xC346, + 38998 - 11904: 0x8CFC, + 38999 - 11904: 0xF3AA, + 39000 - 11904: 0xC440, + 39001 - 11904: 0xF3A8, + 39003 - 11904: 0xC441, + 39004 - 11904: 0xF3A7, + 39005 - 11904: 0xF3A9, + 39006 - 11904: 0xC3FE, + 39007 - 11904: 0xF551, + 39008 - 11904: 0xF54E, + 39010 - 11904: 0xF54F, + 39011 - 11904: 0xF550, + 39012 - 11904: 0xF672, + 39013 - 11904: 0xC556, + 39014 - 11904: 0x90F9, + 39015 - 11904: 0xC555, + 39016 - 11904: 0x8CC9, + 39017 - 11904: 0xF774, + 39018 - 11904: 0xF773, + 39019 - 11904: 0xC5B8, + 39020 - 11904: 0xFA6A, + 39023 - 11904: 0xC5E3, + 39024 - 11904: 0xC649, + 39025 - 11904: 0xC660, + 39026 - 11904: 0xF958, + 39027 - 11904: 0xF9AE, + 39028 - 11904: 0xF9AF, + 39029 - 11904: 0x8BEF, + 39080 - 11904: 0xADB7, + 39081 - 11904: 0xDCAD, + 39084 - 11904: 0xE0E1, + 39085 - 11904: 0xE4CC, + 39086 - 11904: 0xE4CD, + 39087 - 11904: 0xBBE3, + 39089 - 11904: 0xBBE4, + 39090 - 11904: 0xE8BE, + 39091 - 11904: 0xBE68, + 39092 - 11904: 0x9FE0, + 39094 - 11904: 0xC1FC, + 39095 - 11904: 0x9142, + 39096 - 11904: 0xF1AB, + 39097 - 11904: 0x9A62, + 39098 - 11904: 0xC347, + 39099 - 11904: 0xF3AD, + 39100 - 11904: 0xC442, + 39101 - 11904: 0xF3AC, + 39102 - 11904: 0xF3AE, + 39103 - 11904: 0xF3AB, + 39104 - 11904: 0xF675, + 39105 - 11904: 0xF552, + 39106 - 11904: 0xF553, + 39107 - 11904: 0x9569, + 39108 - 11904: 0xC4C6, + 39110 - 11904: 0xF674, + 39111 - 11904: 0x9144, + 39112 - 11904: 0x9143, + 39113 - 11904: 0xF673, + 39114 - 11904: 0x9141, + 39115 - 11904: 0xF775, + 39116 - 11904: 0xF9B0, + 39118 - 11904: 0x8BF0, + 39131 - 11904: 0xADB8, + 39132 - 11904: 0x9660, + 39134 - 11904: 0x8BF1, + 39135 - 11904: 0xADB9, + 39136 - 11904: 0x99F6, + 39137 - 11904: 0x9149, + 39138 - 11904: 0xB0A7, + 39139 - 11904: 0xD448, + 39141 - 11904: 0xD84F, + 39142 - 11904: 0x914A, + 39143 - 11904: 0xB6B8, + 39145 - 11904: 0xB6BB, + 39146 - 11904: 0xB6B9, + 39147 - 11904: 0xDCAE, + 39148 - 11904: 0x914B, + 39149 - 11904: 0xB6BD, + 39151 - 11904: 0xB6BA, + 39153 - 11904: 0x9A64, + 39154 - 11904: 0xB6BC, + 39156 - 11904: 0xB97E, + 39157 - 11904: 0x8ABF, + 39158 - 11904: 0xE0E2, + 39161 - 11904: 0xE0E3, + 39162 - 11904: 0xE8C0, + 39164 - 11904: 0xB97D, + 39165 - 11904: 0xB9A1, + 39166 - 11904: 0xB9A2, + 39168 - 11904: 0xE4CF, + 39170 - 11904: 0xE4CE, + 39171 - 11904: 0xBBE5, + 39173 - 11904: 0xBBE6, + 39175 - 11904: 0xE4D0, + 39176 - 11904: 0xE8BF, + 39177 - 11904: 0xBBE8, + 39178 - 11904: 0xBE69, + 39180 - 11904: 0xBBE7, + 39182 - 11904: 0x9A66, + 39184 - 11904: 0xC05C, + 39185 - 11904: 0xE8C1, + 39186 - 11904: 0xBE6B, + 39187 - 11904: 0xBE6A, + 39188 - 11904: 0xE8C2, + 39189 - 11904: 0xE8C5, + 39190 - 11904: 0xE8C3, + 39191 - 11904: 0xE8C4, + 39192 - 11904: 0xBE6C, + 39193 - 11904: 0x9A67, + 39194 - 11904: 0xC061, + 39195 - 11904: 0xC05F, + 39196 - 11904: 0x9A69, + 39198 - 11904: 0xC05E, + 39199 - 11904: 0xEC5D, + 39201 - 11904: 0xC060, + 39204 - 11904: 0xEC5C, + 39205 - 11904: 0xEF4B, + 39207 - 11904: 0xEC5E, + 39208 - 11904: 0xC05D, + 39209 - 11904: 0xEC5F, + 39210 - 11904: 0xEF4E, + 39211 - 11904: 0xEF4C, + 39212 - 11904: 0xEF4D, + 39213 - 11904: 0xEF52, + 39214 - 11904: 0xC34B, + 39215 - 11904: 0xEF51, + 39216 - 11904: 0xEF54, + 39217 - 11904: 0xEF53, + 39218 - 11904: 0xEF50, + 39219 - 11904: 0xEF4F, + 39221 - 11904: 0xC1FD, + 39223 - 11904: 0x9A6A, + 39224 - 11904: 0x9652, + 39225 - 11904: 0x914D, + 39226 - 11904: 0xF1AE, + 39227 - 11904: 0x9666, + 39228 - 11904: 0xF1AD, + 39229 - 11904: 0xC34A, + 39230 - 11904: 0xC348, + 39231 - 11904: 0xC349, + 39232 - 11904: 0x9F7B, + 39233 - 11904: 0xF1AC, + 39234 - 11904: 0x9A6B, + 39235 - 11904: 0xF3B1, + 39237 - 11904: 0xC443, + 39239 - 11904: 0xF3B0, + 39240 - 11904: 0xF3AF, + 39241 - 11904: 0xC444, + 39242 - 11904: 0xA06C, + 39243 - 11904: 0xF558, + 39244 - 11904: 0xF557, + 39245 - 11904: 0x9667, + 39246 - 11904: 0xF555, + 39248 - 11904: 0xF554, + 39249 - 11904: 0xC4C8, + 39250 - 11904: 0xC4C7, + 39251 - 11904: 0xF559, + 39252 - 11904: 0xF776, + 39253 - 11904: 0xC5B9, + 39254 - 11904: 0xF677, + 39255 - 11904: 0xC557, + 39256 - 11904: 0xF676, + 39257 - 11904: 0xF556, + 39259 - 11904: 0xF777, + 39260 - 11904: 0xC5E4, + 39261 - 11904: 0x9A6C, + 39262 - 11904: 0xC661, + 39263 - 11904: 0xF959, + 39265 - 11904: 0xF9B1, + 39266 - 11904: 0x9A6D, + 39267 - 11904: 0x8BF2, + 39318 - 11904: 0xADBA, + 39319 - 11904: 0xD850, + 39320 - 11904: 0xEF55, + 39321 - 11904: 0xADBB, + 39323 - 11904: 0x966A, + 39324 - 11904: 0xE4D2, + 39325 - 11904: 0xE4D1, + 39326 - 11904: 0xEC60, + 39329 - 11904: 0xEF57, + 39331 - 11904: 0xEF56, + 39332 - 11904: 0xFCEA, + 39333 - 11904: 0xC34C, + 39334 - 11904: 0xF3B2, + 39335 - 11904: 0xF3B3, + 39336 - 11904: 0xC4C9, + 39338 - 11904: 0x966C, + 39339 - 11904: 0xF9B2, + 39340 - 11904: 0xB0A8, + 39341 - 11904: 0xB6BF, + 39342 - 11904: 0xB6BE, + 39343 - 11904: 0xE0E4, + 39344 - 11904: 0xE0E6, + 39345 - 11904: 0xB9A4, + 39346 - 11904: 0xE0E5, + 39347 - 11904: 0xB9A3, + 39348 - 11904: 0xB9A5, + 39349 - 11904: 0xE0E7, + 39352 - 11904: 0x91C4, + 39353 - 11904: 0xE4D4, + 39354 - 11904: 0xE4D6, + 39355 - 11904: 0xE4D5, + 39356 - 11904: 0x9677, + 39357 - 11904: 0xE4D8, + 39361 - 11904: 0xBBE9, + 39362 - 11904: 0xE4D7, + 39363 - 11904: 0xE4D3, + 39364 - 11904: 0x99F4, + 39365 - 11904: 0x9A6F, + 39367 - 11904: 0xE4D9, + 39369 - 11904: 0xE8CC, + 39371 - 11904: 0xE8CF, + 39372 - 11904: 0xE8D1, + 39373 - 11904: 0xE8C7, + 39374 - 11904: 0xE8CB, + 39375 - 11904: 0xE8C8, + 39376 - 11904: 0xBE6E, + 39377 - 11904: 0xBE71, + 39378 - 11904: 0xBE73, + 39379 - 11904: 0xE8C9, + 39380 - 11904: 0xE8CA, + 39381 - 11904: 0xBE72, + 39382 - 11904: 0xE8CD, + 39383 - 11904: 0xE8D0, + 39384 - 11904: 0xE8CE, + 39385 - 11904: 0xBE74, + 39386 - 11904: 0x9FAB, + 39387 - 11904: 0xBE70, + 39388 - 11904: 0xE8C6, + 39389 - 11904: 0xBE6D, + 39391 - 11904: 0xBE6F, + 39392 - 11904: 0x8CBE, + 39393 - 11904: 0x8EC1, + 39394 - 11904: 0xC063, + 39395 - 11904: 0xEC66, + 39396 - 11904: 0xEC64, + 39397 - 11904: 0xEC63, + 39398 - 11904: 0x9555, + 39399 - 11904: 0xEC69, + 39401 - 11904: 0xEC68, + 39402 - 11904: 0xEC67, + 39404 - 11904: 0xEC62, + 39405 - 11904: 0xC062, + 39406 - 11904: 0xEC61, + 39408 - 11904: 0xEC65, + 39409 - 11904: 0xC064, + 39412 - 11904: 0xEF5A, + 39413 - 11904: 0x9152, + 39414 - 11904: 0xEF5E, + 39415 - 11904: 0xEF5B, + 39416 - 11904: 0xEF5D, + 39417 - 11904: 0xEF5C, + 39418 - 11904: 0xEF59, + 39419 - 11904: 0xEF5F, + 39420 - 11904: 0xEF62, + 39421 - 11904: 0xEF60, + 39422 - 11904: 0xEF61, + 39423 - 11904: 0xC240, + 39425 - 11904: 0xC1FE, + 39426 - 11904: 0xEF58, + 39427 - 11904: 0xEF63, + 39428 - 11904: 0xF1B3, + 39429 - 11904: 0xF1B6, + 39430 - 11904: 0xF1B8, + 39431 - 11904: 0xF1B7, + 39433 - 11904: 0xF1B1, + 39434 - 11904: 0xF1B5, + 39435 - 11904: 0xF1B0, + 39436 - 11904: 0x9153, + 39437 - 11904: 0xF1B2, + 39438 - 11904: 0xC34D, + 39439 - 11904: 0xF1AF, + 39440 - 11904: 0x9155, + 39441 - 11904: 0xF1B4, + 39444 - 11904: 0xF3C0, + 39445 - 11904: 0xF3B5, + 39446 - 11904: 0xC445, + 39449 - 11904: 0xC446, + 39450 - 11904: 0xF3B4, + 39451 - 11904: 0xF3B9, + 39452 - 11904: 0xF3BF, + 39453 - 11904: 0xF3B7, + 39454 - 11904: 0xF3BE, + 39455 - 11904: 0x955D, + 39456 - 11904: 0xF3BB, + 39457 - 11904: 0x9671, + 39458 - 11904: 0xF3BA, + 39459 - 11904: 0xF3BD, + 39460 - 11904: 0xF3B8, + 39461 - 11904: 0xF3B6, + 39462 - 11904: 0x9C6D, + 39463 - 11904: 0xF3BC, + 39465 - 11904: 0xF560, + 39466 - 11904: 0xF55E, + 39467 - 11904: 0xC4CA, + 39468 - 11904: 0xF55D, + 39469 - 11904: 0xF563, + 39470 - 11904: 0xF561, + 39471 - 11904: 0x9673, + 39472 - 11904: 0xC4CB, + 39473 - 11904: 0xF55C, + 39474 - 11904: 0xF55A, + 39476 - 11904: 0xF55B, + 39477 - 11904: 0xC4CD, + 39478 - 11904: 0xF55F, + 39479 - 11904: 0xC4CC, + 39480 - 11904: 0xF562, + 39481 - 11904: 0xF678, + 39482 - 11904: 0xF67E, + 39483 - 11904: 0x9154, + 39484 - 11904: 0x9A71, + 39485 - 11904: 0xF679, + 39486 - 11904: 0xC55B, + 39487 - 11904: 0xF6A1, + 39488 - 11904: 0xC55A, + 39489 - 11904: 0xF67D, + 39490 - 11904: 0xF67C, + 39491 - 11904: 0xC559, + 39492 - 11904: 0xF67B, + 39493 - 11904: 0xC558, + 39494 - 11904: 0xF67A, + 39496 - 11904: 0xF77D, + 39497 - 11904: 0xF7A1, + 39498 - 11904: 0xF77E, + 39500 - 11904: 0xF77B, + 39501 - 11904: 0xC5BB, + 39502 - 11904: 0xF778, + 39503 - 11904: 0xF77C, + 39504 - 11904: 0xF7A3, + 39506 - 11904: 0xF7A2, + 39507 - 11904: 0xF779, + 39508 - 11904: 0xF77A, + 39509 - 11904: 0xC5BA, + 39510 - 11904: 0xF852, + 39511 - 11904: 0xC5E7, + 39512 - 11904: 0x9156, + 39513 - 11904: 0xF853, + 39514 - 11904: 0xC5E5, + 39515 - 11904: 0xC5E6, + 39516 - 11904: 0x966D, + 39518 - 11904: 0xF8D3, + 39519 - 11904: 0xC64A, + 39520 - 11904: 0xF976, + 39522 - 11904: 0xC66A, + 39523 - 11904: 0x9557, + 39524 - 11904: 0xF9B3, + 39525 - 11904: 0xC66B, + 39526 - 11904: 0xF9B4, + 39527 - 11904: 0xF9B5, + 39528 - 11904: 0xF9C3, + 39529 - 11904: 0xF9C2, + 39530 - 11904: 0xC67A, + 39531 - 11904: 0xF9CD, + 39532 - 11904: 0x89C6, + 39567 - 11904: 0x89C7, + 39592 - 11904: 0xB0A9, + 39595 - 11904: 0xE0E9, + 39597 - 11904: 0xE0E8, + 39599 - 11904: 0xBBEA, + 39600 - 11904: 0xBBEB, + 39601 - 11904: 0xE4DA, + 39602 - 11904: 0x8A6A, + 39603 - 11904: 0xE8D2, + 39604 - 11904: 0xEC6C, + 39606 - 11904: 0x8B57, + 39607 - 11904: 0xBE75, + 39608 - 11904: 0xC065, + 39609 - 11904: 0xEC6A, + 39610 - 11904: 0x9FE1, + 39611 - 11904: 0xEC6D, + 39612 - 11904: 0xC066, + 39613 - 11904: 0x9B5F, + 39614 - 11904: 0xEF64, + 39615 - 11904: 0xEC6B, + 39616 - 11904: 0xF1B9, + 39617 - 11904: 0xC34E, + 39618 - 11904: 0xF3C1, + 39622 - 11904: 0xF566, + 39623 - 11904: 0xF564, + 39626 - 11904: 0xF565, + 39629 - 11904: 0xF6A2, + 39631 - 11904: 0xC55C, + 39632 - 11904: 0xF7A4, + 39633 - 11904: 0xC5EA, + 39634 - 11904: 0xC5BC, + 39635 - 11904: 0xC5E8, + 39636 - 11904: 0xC5E9, + 39637 - 11904: 0xF8D4, + 39638 - 11904: 0xC662, + 39639 - 11904: 0xA05D, + 39640 - 11904: 0xB0AA, + 39644 - 11904: 0xF1BA, + 39647 - 11904: 0xD449, + 39648 - 11904: 0x915B, + 39649 - 11904: 0xB9A6, + 39650 - 11904: 0x915C, + 39651 - 11904: 0xE4DB, + 39654 - 11904: 0xBBEC, + 39655 - 11904: 0xE4DC, + 39659 - 11904: 0xE8D4, + 39660 - 11904: 0xE8D3, + 39661 - 11904: 0xC068, + 39662 - 11904: 0xBE76, + 39663 - 11904: 0xBE77, + 39665 - 11904: 0xE8D7, + 39666 - 11904: 0xE8D6, + 39667 - 11904: 0xE8D5, + 39668 - 11904: 0x915E, + 39670 - 11904: 0xEC6E, + 39671 - 11904: 0xEC71, + 39673 - 11904: 0xEC70, + 39674 - 11904: 0xEC6F, + 39675 - 11904: 0xC067, + 39676 - 11904: 0xEF68, + 39677 - 11904: 0xEF66, + 39678 - 11904: 0xEF65, + 39679 - 11904: 0x9F5C, + 39681 - 11904: 0xEF67, + 39682 - 11904: 0x9F57, + 39683 - 11904: 0xC34F, + 39684 - 11904: 0xF1BC, + 39685 - 11904: 0xF1BD, + 39686 - 11904: 0xC350, + 39688 - 11904: 0xF1BB, + 39689 - 11904: 0x9F65, + 39690 - 11904: 0xF3C3, + 39691 - 11904: 0xF3C2, + 39692 - 11904: 0xF3C5, + 39693 - 11904: 0xC447, + 39694 - 11904: 0xF3C4, + 39695 - 11904: 0x9A72, + 39696 - 11904: 0xF567, + 39697 - 11904: 0xF569, + 39698 - 11904: 0xF568, + 39700 - 11904: 0x9160, + 39701 - 11904: 0xF6A3, + 39702 - 11904: 0xF6A6, + 39703 - 11904: 0xF6A4, + 39704 - 11904: 0xF6A5, + 39705 - 11904: 0xF7A5, + 39706 - 11904: 0xC5BD, + 39710 - 11904: 0xF854, + 39711 - 11904: 0xF855, + 39712 - 11904: 0xF856, + 39714 - 11904: 0xC64B, + 39715 - 11904: 0xC663, + 39716 - 11904: 0xF9B6, + 39717 - 11904: 0xB0AB, + 39719 - 11904: 0xBE78, + 39720 - 11904: 0xC069, + 39721 - 11904: 0xF1BE, + 39722 - 11904: 0x9F5E, + 39723 - 11904: 0xF7A6, + 39725 - 11904: 0x9161, + 39726 - 11904: 0xF9C4, + 39727 - 11904: 0xD44A, + 39729 - 11904: 0xC67B, + 39730 - 11904: 0xB0AC, + 39731 - 11904: 0xEC72, + 39732 - 11904: 0x9164, + 39733 - 11904: 0xF1BF, + 39735 - 11904: 0xF3C6, + 39737 - 11904: 0x9F41, + 39738 - 11904: 0xF6A7, + 39739 - 11904: 0xF7A7, + 39740 - 11904: 0xB0AD, + 39742 - 11904: 0xE4DD, + 39743 - 11904: 0xE4DE, + 39744 - 11904: 0x9169, + 39745 - 11904: 0xBBED, + 39746 - 11904: 0xBBEE, + 39747 - 11904: 0xE8D9, + 39748 - 11904: 0xBE7A, + 39749 - 11904: 0xBE79, + 39750 - 11904: 0xE8D8, + 39752 - 11904: 0xEF69, + 39754 - 11904: 0xF1C0, + 39755 - 11904: 0xF1C2, + 39756 - 11904: 0xF1C1, + 39757 - 11904: 0xC353, + 39758 - 11904: 0xC352, + 39759 - 11904: 0xC351, + 39760 - 11904: 0x9168, + 39761 - 11904: 0xC55E, + 39762 - 11904: 0xF6A8, + 39764 - 11904: 0xC55D, + 39765 - 11904: 0xF7A9, + 39766 - 11904: 0xF7A8, + 39768 - 11904: 0xC64C, + 39769 - 11904: 0xF8D5, + 39770 - 11904: 0xB3BD, + 39771 - 11904: 0xE0EA, + 39775 - 11904: 0xE4E1, + 39776 - 11904: 0xE4DF, + 39777 - 11904: 0xE4E0, + 39780 - 11904: 0xE8E2, + 39782 - 11904: 0xE8DD, + 39783 - 11904: 0xE8DA, + 39784 - 11904: 0xE8E1, + 39785 - 11904: 0x9A74, + 39788 - 11904: 0xE8E3, + 39791 - 11904: 0xBE7C, + 39792 - 11904: 0xE8E0, + 39793 - 11904: 0xE8DC, + 39796 - 11904: 0xE8DB, + 39797 - 11904: 0xE8DF, + 39798 - 11904: 0xE8DE, + 39799 - 11904: 0xBE7B, + 39802 - 11904: 0xEC7D, + 39803 - 11904: 0xEC78, + 39804 - 11904: 0xEC76, + 39805 - 11904: 0xECA1, + 39806 - 11904: 0xEC77, + 39807 - 11904: 0x96B2, + 39808 - 11904: 0xEC73, + 39809 - 11904: 0x9A75, + 39810 - 11904: 0xEC79, + 39811 - 11904: 0xFDA5, + 39813 - 11904: 0xEC74, + 39814 - 11904: 0xEF72, + 39815 - 11904: 0xEC75, + 39816 - 11904: 0xECA2, + 39819 - 11904: 0x9EE9, + 39821 - 11904: 0x8BBA, + 39822 - 11904: 0x916D, + 39823 - 11904: 0xA060, + 39824 - 11904: 0xEC7C, + 39825 - 11904: 0xC06A, + 39826 - 11904: 0xEC7B, + 39827 - 11904: 0xEC7A, + 39829 - 11904: 0xEC7E, + 39831 - 11904: 0x9FDE, + 39834 - 11904: 0xEF6A, + 39835 - 11904: 0xEF6D, + 39837 - 11904: 0x9FC3, + 39838 - 11904: 0xEF6C, + 39839 - 11904: 0x96B5, + 39840 - 11904: 0xEF74, + 39841 - 11904: 0xEF6F, + 39842 - 11904: 0xEF73, + 39844 - 11904: 0xEF71, + 39845 - 11904: 0xEF70, + 39846 - 11904: 0xEF6E, + 39848 - 11904: 0xEF6B, + 39850 - 11904: 0xC243, + 39851 - 11904: 0xC242, + 39853 - 11904: 0xC244, + 39854 - 11904: 0xC241, + 39855 - 11904: 0xEF75, + 39856 - 11904: 0xA067, + 39861 - 11904: 0xF1C8, + 39862 - 11904: 0xF1CB, + 39864 - 11904: 0xF1C9, + 39865 - 11904: 0xF1CD, + 39869 - 11904: 0xF1CE, + 39871 - 11904: 0xF1C6, + 39872 - 11904: 0xC358, + 39873 - 11904: 0xF1C7, + 39875 - 11904: 0xF1C5, + 39876 - 11904: 0xF1CC, + 39878 - 11904: 0xF1C4, + 39879 - 11904: 0xF1C3, + 39880 - 11904: 0xC357, + 39881 - 11904: 0xC355, + 39882 - 11904: 0xC354, + 39887 - 11904: 0x96B3, + 39891 - 11904: 0xF1CA, + 39892 - 11904: 0xF3CF, + 39893 - 11904: 0xF3D5, + 39894 - 11904: 0xC44A, + 39895 - 11904: 0xF3D0, + 39897 - 11904: 0xF3D3, + 39898 - 11904: 0xF3D7, + 39899 - 11904: 0xC44B, + 39900 - 11904: 0xF3D2, + 39901 - 11904: 0x9A76, + 39902 - 11904: 0xF3CA, + 39904 - 11904: 0xF3C9, + 39905 - 11904: 0xF3D6, + 39906 - 11904: 0xF3CD, + 39908 - 11904: 0xF3CB, + 39909 - 11904: 0xF3D4, + 39910 - 11904: 0xF3CC, + 39911 - 11904: 0xC449, + 39912 - 11904: 0xC448, + 39913 - 11904: 0x95D5, + 39914 - 11904: 0xF3C7, + 39915 - 11904: 0xF3C8, + 39916 - 11904: 0xF3D1, + 39917 - 11904: 0x9ECA, + 39920 - 11904: 0xF3CE, + 39921 - 11904: 0x9A77, + 39924 - 11904: 0x9A78, + 39927 - 11904: 0xF56C, + 39928 - 11904: 0xF56F, + 39933 - 11904: 0xC356, + 39935 - 11904: 0x9170, + 39938 - 11904: 0x916F, + 39941 - 11904: 0xF56D, + 39942 - 11904: 0xF573, + 39943 - 11904: 0xF571, + 39944 - 11904: 0xF56B, + 39945 - 11904: 0xF576, + 39946 - 11904: 0x9FA3, + 39947 - 11904: 0xF56A, + 39948 - 11904: 0x9171, + 39949 - 11904: 0xC4CF, + 39950 - 11904: 0xF572, + 39952 - 11904: 0x96B1, + 39954 - 11904: 0xF56E, + 39955 - 11904: 0xC4CE, + 39956 - 11904: 0xF575, + 39957 - 11904: 0x9F63, + 39959 - 11904: 0xF574, + 39963 - 11904: 0x9F67, + 39964 - 11904: 0xF6AB, + 39965 - 11904: 0xF6AA, + 39967 - 11904: 0x8BB9, + 39968 - 11904: 0x9A7A, + 39969 - 11904: 0xF6B1, + 39971 - 11904: 0xF6AD, + 39972 - 11904: 0xF6B0, + 39973 - 11904: 0xC560, + 39974 - 11904: 0x8B56, + 39976 - 11904: 0xF6AE, + 39977 - 11904: 0xF6AF, + 39979 - 11904: 0xF6A9, + 39980 - 11904: 0xF6AC, + 39981 - 11904: 0xC55F, + 39983 - 11904: 0x9ADA, + 39985 - 11904: 0xC5BF, + 39986 - 11904: 0xF7B4, + 39987 - 11904: 0xF7AF, + 39988 - 11904: 0xF7B3, + 39989 - 11904: 0x96B0, + 39990 - 11904: 0xF7B6, + 39991 - 11904: 0xF7B2, + 39993 - 11904: 0xF7AE, + 39994 - 11904: 0x9A7E, + 39995 - 11904: 0xC5C1, + 39996 - 11904: 0xF7B1, + 39997 - 11904: 0xF7B5, + 39998 - 11904: 0xC5C0, + 39999 - 11904: 0xF7AC, + 40000 - 11904: 0xF570, + 40001 - 11904: 0xF7B0, + 40004 - 11904: 0xF7AD, + 40005 - 11904: 0x9DDE, + 40006 - 11904: 0xF7AA, + 40008 - 11904: 0xF7AB, + 40009 - 11904: 0xC5BE, + 40010 - 11904: 0xF85A, + 40011 - 11904: 0xF85C, + 40012 - 11904: 0xF85F, + 40013 - 11904: 0xF85B, + 40014 - 11904: 0xF860, + 40015 - 11904: 0x96AD, + 40016 - 11904: 0xF859, + 40018 - 11904: 0xF857, + 40019 - 11904: 0x96AE, + 40020 - 11904: 0xC5EB, + 40021 - 11904: 0xF85D, + 40022 - 11904: 0xC5ED, + 40023 - 11904: 0xC5EC, + 40024 - 11904: 0xF858, + 40025 - 11904: 0xF85E, + 40029 - 11904: 0x9EA1, + 40030 - 11904: 0xF8DA, + 40031 - 11904: 0xC64D, + 40032 - 11904: 0xF8DB, + 40034 - 11904: 0xF8D9, + 40035 - 11904: 0xF8D6, + 40038 - 11904: 0xF8D8, + 40039 - 11904: 0xF8D7, + 40040 - 11904: 0xF95A, + 40045 - 11904: 0xF95C, + 40046 - 11904: 0xF95B, + 40049 - 11904: 0xF979, + 40050 - 11904: 0x9E50, + 40051 - 11904: 0xF978, + 40052 - 11904: 0xF977, + 40053 - 11904: 0xF97A, + 40055 - 11904: 0xC673, + 40056 - 11904: 0xC674, + 40057 - 11904: 0xF9CA, + 40058 - 11904: 0xF9CE, + 40059 - 11904: 0x96AF, + 40060 - 11904: 0x8BF4, + 40165 - 11904: 0xB3BE, + 40166 - 11904: 0xDCAF, + 40167 - 11904: 0xE0ED, + 40169 - 11904: 0xB9A7, + 40170 - 11904: 0xE0EB, + 40173 - 11904: 0xE0EC, + 40177 - 11904: 0xE4E2, + 40178 - 11904: 0xE4E3, + 40179 - 11904: 0xBBF1, + 40180 - 11904: 0xBBEF, + 40181 - 11904: 0xE4E4, + 40182 - 11904: 0xBBF0, + 40183 - 11904: 0xE8E8, + 40185 - 11904: 0xE8EB, + 40186 - 11904: 0xE8E5, + 40187 - 11904: 0xE8EC, + 40188 - 11904: 0xE8E4, + 40189 - 11904: 0xE8E6, + 40191 - 11904: 0xE8E7, + 40192 - 11904: 0xE8EA, + 40194 - 11904: 0x9FA4, + 40195 - 11904: 0xBEA1, + 40196 - 11904: 0xE8EF, + 40197 - 11904: 0xE8EE, + 40198 - 11904: 0xBE7D, + 40199 - 11904: 0xE8E9, + 40200 - 11904: 0xE8ED, + 40201 - 11904: 0xBE7E, + 40204 - 11904: 0x96BD, + 40208 - 11904: 0xECAC, + 40210 - 11904: 0xC06F, + 40212 - 11904: 0xECA7, + 40213 - 11904: 0xC06B, + 40214 - 11904: 0x96F4, + 40215 - 11904: 0xECA4, + 40216 - 11904: 0xECAA, + 40217 - 11904: 0xECAD, + 40219 - 11904: 0xC070, + 40221 - 11904: 0xECA9, + 40222 - 11904: 0xECA6, + 40223 - 11904: 0xECAE, + 40224 - 11904: 0xECA5, + 40225 - 11904: 0x96B8, + 40226 - 11904: 0xECAB, + 40227 - 11904: 0xC06C, + 40229 - 11904: 0xECA3, + 40230 - 11904: 0xC06D, + 40232 - 11904: 0xC06E, + 40233 - 11904: 0xECA8, + 40237 - 11904: 0xEFA9, + 40238 - 11904: 0xEF7A, + 40239 - 11904: 0xEF7B, + 40240 - 11904: 0xEF7E, + 40241 - 11904: 0xEF7C, + 40243 - 11904: 0xEF76, + 40244 - 11904: 0xFAA1, + 40246 - 11904: 0xEF79, + 40247 - 11904: 0xEFA5, + 40248 - 11904: 0xEF7D, + 40249 - 11904: 0x91A7, + 40251 - 11904: 0xC245, + 40253 - 11904: 0xEFA7, + 40254 - 11904: 0xEFA4, + 40255 - 11904: 0xC246, + 40256 - 11904: 0xEFA6, + 40257 - 11904: 0xEF77, + 40258 - 11904: 0xEFA2, + 40259 - 11904: 0xEFA3, + 40260 - 11904: 0xA05E, + 40261 - 11904: 0xEFA1, + 40265 - 11904: 0x9A7D, + 40266 - 11904: 0xF1D2, + 40267 - 11904: 0xF1D4, + 40268 - 11904: 0xF1D7, + 40270 - 11904: 0x8948, + 40271 - 11904: 0xF1D1, + 40272 - 11904: 0x9EB1, + 40273 - 11904: 0xC359, + 40274 - 11904: 0xF1D9, + 40275 - 11904: 0xF1D0, + 40276 - 11904: 0xF1DA, + 40278 - 11904: 0xF1D6, + 40279 - 11904: 0xF1D8, + 40280 - 11904: 0xF1DC, + 40281 - 11904: 0xF1D5, + 40282 - 11904: 0xF1DD, + 40283 - 11904: 0xF1D3, + 40284 - 11904: 0xF1CF, + 40285 - 11904: 0xC35A, + 40286 - 11904: 0x9DDB, + 40287 - 11904: 0xF1DB, + 40288 - 11904: 0xC35B, + 40289 - 11904: 0xC44D, + 40295 - 11904: 0xEF78, + 40296 - 11904: 0xF3F1, + 40297 - 11904: 0xF3E8, + 40298 - 11904: 0xC44F, + 40299 - 11904: 0xF3E4, + 40300 - 11904: 0xC450, + 40301 - 11904: 0x95BF, + 40302 - 11904: 0x8A73, + 40303 - 11904: 0xF3ED, + 40304 - 11904: 0xF3E7, + 40305 - 11904: 0xF3DD, + 40306 - 11904: 0xC44E, + 40307 - 11904: 0xF3EA, + 40308 - 11904: 0xF3E5, + 40309 - 11904: 0xF3E6, + 40311 - 11904: 0xF3D8, + 40312 - 11904: 0xF3DF, + 40313 - 11904: 0xF3EE, + 40315 - 11904: 0xF3EB, + 40316 - 11904: 0x9EFE, + 40317 - 11904: 0xF3E3, + 40318 - 11904: 0x917A, + 40319 - 11904: 0xF3EF, + 40320 - 11904: 0xF3DE, + 40321 - 11904: 0xF3D9, + 40322 - 11904: 0xF3EC, + 40323 - 11904: 0x917B, + 40324 - 11904: 0xF3DB, + 40325 - 11904: 0xF3E9, + 40326 - 11904: 0xF3E0, + 40327 - 11904: 0xF3F0, + 40328 - 11904: 0xF3DC, + 40329 - 11904: 0xC44C, + 40330 - 11904: 0xF3DA, + 40331 - 11904: 0xF3E1, + 40332 - 11904: 0xF3E2, + 40336 - 11904: 0xF57D, + 40338 - 11904: 0xF57B, + 40339 - 11904: 0x9AA3, + 40340 - 11904: 0xF5A2, + 40342 - 11904: 0xF5AE, + 40343 - 11904: 0xF5A5, + 40344 - 11904: 0xF57C, + 40345 - 11904: 0xF578, + 40346 - 11904: 0xF5A7, + 40347 - 11904: 0xF57E, + 40348 - 11904: 0xF5A3, + 40349 - 11904: 0xF57A, + 40350 - 11904: 0xF5AA, + 40351 - 11904: 0xF577, + 40352 - 11904: 0xF5A1, + 40353 - 11904: 0xF5A6, + 40354 - 11904: 0xF5A8, + 40355 - 11904: 0xF5AB, + 40356 - 11904: 0xF579, + 40357 - 11904: 0x96C2, + 40358 - 11904: 0xF5AF, + 40359 - 11904: 0xF5B0, + 40360 - 11904: 0xF5A9, + 40361 - 11904: 0xF5AD, + 40362 - 11904: 0xF5A4, + 40363 - 11904: 0x9F77, + 40364 - 11904: 0xF6C1, + 40365 - 11904: 0xF6C4, + 40367 - 11904: 0xC561, + 40369 - 11904: 0xF6C3, + 40370 - 11904: 0xF6C8, + 40371 - 11904: 0xF6C6, + 40372 - 11904: 0xC562, + 40373 - 11904: 0xF6BD, + 40374 - 11904: 0xF6B3, + 40375 - 11904: 0xF6B2, + 40376 - 11904: 0xC564, + 40377 - 11904: 0xF6BF, + 40378 - 11904: 0xF6C0, + 40379 - 11904: 0xF6BC, + 40380 - 11904: 0xF6B4, + 40381 - 11904: 0x9AA4, + 40382 - 11904: 0xF6B9, + 40383 - 11904: 0xF5AC, + 40384 - 11904: 0x9AA5, + 40385 - 11904: 0xF6B5, + 40386 - 11904: 0xC563, + 40387 - 11904: 0xF6BB, + 40388 - 11904: 0x91A1, + 40389 - 11904: 0xF6BA, + 40391 - 11904: 0xF6B6, + 40392 - 11904: 0xF6C2, + 40393 - 11904: 0x89B8, + 40394 - 11904: 0xF6B7, + 40395 - 11904: 0xF7BB, + 40396 - 11904: 0xF6C5, + 40397 - 11904: 0xF6C7, + 40398 - 11904: 0xF6BE, + 40399 - 11904: 0xF6B8, + 40400 - 11904: 0xF7BC, + 40401 - 11904: 0xF7BE, + 40402 - 11904: 0xF7B8, + 40403 - 11904: 0xC5C2, + 40404 - 11904: 0x9173, + 40405 - 11904: 0xF7C5, + 40406 - 11904: 0xF7C3, + 40407 - 11904: 0xC5C3, + 40408 - 11904: 0xF7C2, + 40409 - 11904: 0xF7C1, + 40410 - 11904: 0xF7BA, + 40411 - 11904: 0xF7B7, + 40412 - 11904: 0xF7BD, + 40413 - 11904: 0xF7C6, + 40414 - 11904: 0xF7B9, + 40415 - 11904: 0xF7BF, + 40417 - 11904: 0xF869, + 40418 - 11904: 0xF86E, + 40419 - 11904: 0xF864, + 40420 - 11904: 0xF867, + 40421 - 11904: 0xC5EE, + 40422 - 11904: 0xF86B, + 40424 - 11904: 0xF872, + 40425 - 11904: 0xF7C0, + 40427 - 11904: 0xF865, + 40428 - 11904: 0xF86F, + 40429 - 11904: 0xF873, + 40430 - 11904: 0xF86A, + 40431 - 11904: 0xF863, + 40432 - 11904: 0xF86D, + 40434 - 11904: 0xF86C, + 40435 - 11904: 0xF871, + 40436 - 11904: 0xF870, + 40437 - 11904: 0xF7C4, + 40438 - 11904: 0xF868, + 40439 - 11904: 0xF862, + 40440 - 11904: 0xF866, + 40441 - 11904: 0xC64E, + 40442 - 11904: 0xC64F, + 40443 - 11904: 0xF861, + 40444 - 11904: 0x9AA6, + 40445 - 11904: 0xF8E6, + 40446 - 11904: 0xF8DD, + 40447 - 11904: 0xF8E5, + 40448 - 11904: 0xF8E2, + 40449 - 11904: 0xF8E3, + 40450 - 11904: 0xF8DC, + 40451 - 11904: 0xF8DF, + 40452 - 11904: 0xF8E7, + 40453 - 11904: 0xF8E1, + 40454 - 11904: 0xF8E0, + 40455 - 11904: 0xF8DE, + 40457 - 11904: 0xF8E4, + 40458 - 11904: 0x89BD, + 40459 - 11904: 0xF95D, + 40460 - 11904: 0x89B9, + 40461 - 11904: 0xF95E, + 40462 - 11904: 0x917D, + 40463 - 11904: 0xF960, + 40464 - 11904: 0xF95F, + 40465 - 11904: 0xF962, + 40466 - 11904: 0xF961, + 40467 - 11904: 0xF97C, + 40468 - 11904: 0xF97B, + 40469 - 11904: 0xF9B7, + 40471 - 11904: 0xF9B8, + 40472 - 11904: 0x96BB, + 40473 - 11904: 0xF9C5, + 40474 - 11904: 0xC678, + 40475 - 11904: 0xC67C, + 40476 - 11904: 0x9FF2, + 40477 - 11904: 0xF9CF, + 40478 - 11904: 0xC67D, + 40479 - 11904: 0x8BF5, + 40565 - 11904: 0xB3BF, + 40569 - 11904: 0xC4D0, + 40570 - 11904: 0xF6C9, + 40571 - 11904: 0x9AA9, + 40572 - 11904: 0xC650, + 40573 - 11904: 0xC651, + 40575 - 11904: 0xB3C0, + 40576 - 11904: 0xE0EE, + 40577 - 11904: 0x9F54, + 40578 - 11904: 0xB9A8, + 40579 - 11904: 0xE8F0, + 40580 - 11904: 0x9FE3, + 40581 - 11904: 0x9EED, + 40582 - 11904: 0xECB0, + 40583 - 11904: 0xECB1, + 40584 - 11904: 0xECAF, + 40585 - 11904: 0xEFAB, + 40586 - 11904: 0xEFAA, + 40587 - 11904: 0xC247, + 40588 - 11904: 0xF1DF, + 40589 - 11904: 0xEFAC, + 40590 - 11904: 0xF1DE, + 40592 - 11904: 0x91AA, + 40593 - 11904: 0xF3F3, + 40594 - 11904: 0xC451, + 40595 - 11904: 0xC453, + 40596 - 11904: 0xF3F2, + 40597 - 11904: 0x91AB, + 40598 - 11904: 0xA070, + 40599 - 11904: 0xC452, + 40600 - 11904: 0x9F6D, + 40601 - 11904: 0xF5B1, + 40602 - 11904: 0xF5B3, + 40603 - 11904: 0xF5B2, + 40604 - 11904: 0xF6CA, + 40605 - 11904: 0xC565, + 40606 - 11904: 0x91AC, + 40607 - 11904: 0xC5EF, + 40608 - 11904: 0xF8E8, + 40609 - 11904: 0xF963, + 40610 - 11904: 0x91AD, + 40612 - 11904: 0xF9D2, + 40613 - 11904: 0xB3C1, + 40614 - 11904: 0xA0FD, + 40615 - 11904: 0xE4E5, + 40616 - 11904: 0x9FE2, + 40617 - 11904: 0xBEA2, + 40618 - 11904: 0x91AF, + 40619 - 11904: 0x9E41, + 40620 - 11904: 0x9AAA, + 40621 - 11904: 0xECB3, + 40622 - 11904: 0xECB2, + 40623 - 11904: 0x91B0, + 40624 - 11904: 0xEFAD, + 40625 - 11904: 0x9AAB, + 40628 - 11904: 0xC454, + 40629 - 11904: 0xC4D1, + 40630 - 11904: 0xF7C7, + 40631 - 11904: 0xF9CB, + 40635 - 11904: 0xB3C2, + 40636 - 11904: 0xBBF2, + 40637 - 11904: 0x9AAC, + 40638 - 11904: 0xBEA3, + 40639 - 11904: 0x9A4A, + 40640 - 11904: 0xF3F4, + 40641 - 11904: 0x91B2, + 40642 - 11904: 0xF874, + 40643 - 11904: 0xB6C0, + 40644 - 11904: 0x8BF6, + 40646 - 11904: 0x9AAD, + 40647 - 11904: 0x89B6, + 40648 - 11904: 0xEFAE, + 40652 - 11904: 0xC664, + 40653 - 11904: 0xB6C1, + 40654 - 11904: 0xBEA4, + 40655 - 11904: 0xC248, + 40656 - 11904: 0xF875, + 40657 - 11904: 0xB6C2, + 40659 - 11904: 0xE8F1, + 40660 - 11904: 0xC072, + 40661 - 11904: 0xECB4, + 40662 - 11904: 0xECB5, + 40664 - 11904: 0xC071, + 40666 - 11904: 0xEFAF, + 40667 - 11904: 0xC24C, + 40668 - 11904: 0xC24A, + 40669 - 11904: 0xC24B, + 40670 - 11904: 0xC249, + 40671 - 11904: 0xF1E0, + 40672 - 11904: 0xC35C, + 40674 - 11904: 0x9AAF, + 40676 - 11904: 0xF5B5, + 40677 - 11904: 0xF5B4, + 40678 - 11904: 0xF5B7, + 40679 - 11904: 0xF5B6, + 40680 - 11904: 0xC4D2, + 40683 - 11904: 0xF6CB, + 40685 - 11904: 0xF6CD, + 40686 - 11904: 0xF6CC, + 40687 - 11904: 0xC566, + 40688 - 11904: 0xF7C8, + 40689 - 11904: 0x9AB0, + 40690 - 11904: 0xF876, + 40691 - 11904: 0xF877, + 40692 - 11904: 0xC5F0, + 40693 - 11904: 0xF964, + 40694 - 11904: 0xF97D, + 40695 - 11904: 0xC675, + 40696 - 11904: 0x9AB1, + 40697 - 11904: 0xDCB0, + 40698 - 11904: 0xECB6, + 40699 - 11904: 0xEFB0, + 40700 - 11904: 0xF3F5, + 40701 - 11904: 0xE0EF, + 40702 - 11904: 0x9AA1, + 40703 - 11904: 0xEFB1, + 40704 - 11904: 0xF1E2, + 40705 - 11904: 0xF1E1, + 40706 - 11904: 0x91B9, + 40710 - 11904: 0xF878, + 40711 - 11904: 0xC652, + 40712 - 11904: 0x91BA, + 40713 - 11904: 0xF965, + 40714 - 11904: 0xF97E, + 40718 - 11904: 0xB9A9, + 40719 - 11904: 0xE8F2, + 40720 - 11904: 0xE8F3, + 40722 - 11904: 0xECB7, + 40723 - 11904: 0xB9AA, + 40725 - 11904: 0xC35D, + 40726 - 11904: 0xF1E3, + 40727 - 11904: 0x9F66, + 40728 - 11904: 0xF6CF, + 40729 - 11904: 0xC567, + 40730 - 11904: 0xF6D0, + 40731 - 11904: 0xF6CE, + 40732 - 11904: 0xF879, + 40734 - 11904: 0xF8E9, + 40736 - 11904: 0xB9AB, + 40738 - 11904: 0xEFB4, + 40739 - 11904: 0xEFB3, + 40740 - 11904: 0xEFB2, + 40741 - 11904: 0xF1E4, + 40742 - 11904: 0xA041, + 40743 - 11904: 0x8BB7, + 40744 - 11904: 0xF1E8, + 40745 - 11904: 0xF1E7, + 40746 - 11904: 0xF1E6, + 40747 - 11904: 0xF1E5, + 40748 - 11904: 0xC35E, + 40749 - 11904: 0xF3F6, + 40750 - 11904: 0xF5B9, + 40751 - 11904: 0xC4D3, + 40752 - 11904: 0xF5B8, + 40753 - 11904: 0xF6D1, + 40754 - 11904: 0xF7CB, + 40755 - 11904: 0xF7CA, + 40756 - 11904: 0xC5C4, + 40757 - 11904: 0xF7C9, + 40758 - 11904: 0xF87C, + 40759 - 11904: 0xF87B, + 40760 - 11904: 0xF87A, + 40761 - 11904: 0x91C0, + 40763 - 11904: 0xBBF3, + 40765 - 11904: 0xECB8, + 40766 - 11904: 0xC24D, + 40768 - 11904: 0xF3F7, + 40769 - 11904: 0xF3F8, + 40770 - 11904: 0xF7CC, + 40771 - 11904: 0xF87D, + 40772 - 11904: 0x9AB3, + 40773 - 11904: 0x91C3, + 40774 - 11904: 0xF8EA, + 40775 - 11904: 0xF966, + 40776 - 11904: 0xF9B9, + 40777 - 11904: 0xF9D4, + 40778 - 11904: 0xBBF4, + 40779 - 11904: 0xC24E, + 40780 - 11904: 0xF1E9, + 40781 - 11904: 0xF3F9, + 40782 - 11904: 0xF6D2, + 40783 - 11904: 0xF87E, + 40784 - 11904: 0xA0FC, + 40786 - 11904: 0xBEA6, + 40787 - 11904: 0x9FEE, + 40788 - 11904: 0xEFB5, + 40789 - 11904: 0xF1EA, + 40790 - 11904: 0xF3FA, + 40791 - 11904: 0xF3FB, + 40792 - 11904: 0xF3FC, + 40793 - 11904: 0xF5BE, + 40794 - 11904: 0x9F69, + 40795 - 11904: 0xF5BA, + 40796 - 11904: 0xC568, + 40797 - 11904: 0xF5BD, + 40798 - 11904: 0xF5BC, + 40799 - 11904: 0xC4D4, + 40800 - 11904: 0xF5BB, + 40801 - 11904: 0xC4D6, + 40802 - 11904: 0x91C8, + 40803 - 11904: 0xC4D5, + 40804 - 11904: 0xF6D4, + 40805 - 11904: 0xF6D3, + 40806 - 11904: 0xC569, + 40807 - 11904: 0xC56A, + 40809 - 11904: 0x91C9, + 40810 - 11904: 0xC5C6, + 40811 - 11904: 0xF7CD, + 40812 - 11904: 0xC5C5, + 40814 - 11904: 0xF8A3, + 40815 - 11904: 0xF8A4, + 40816 - 11904: 0xF8A2, + 40817 - 11904: 0xF8A1, + 40818 - 11904: 0xC654, + 40820 - 11904: 0xF8EB, + 40821 - 11904: 0xF8EC, + 40822 - 11904: 0xF8ED, + 40823 - 11904: 0xC653, + 40824 - 11904: 0xF967, + 40825 - 11904: 0xF96A, + 40826 - 11904: 0xF969, + 40827 - 11904: 0xF968, + 40830 - 11904: 0xF9D3, + 40831 - 11904: 0x8DE6, + 40845 - 11904: 0xC073, + 40846 - 11904: 0x91CB, + 40848 - 11904: 0xC365, + 40849 - 11904: 0xF5BF, + 40850 - 11904: 0xF6D5, + 40852 - 11904: 0xC5C7, + 40853 - 11904: 0xF7CE, + 40854 - 11904: 0x87AC, + 40855 - 11904: 0x87A4, + 40856 - 11904: 0xF9D5, + 40857 - 11904: 0x89C8, + 40860 - 11904: 0xC074, + 40863 - 11904: 0x8DAA, + 40864 - 11904: 0xEFB6, + 40866 - 11904: 0xF7CF, + 40868 - 11904: 0xF9A1, + 40869 - 11904: 0x9FDD, + 40870 - 11904: 0x8C43, + 40871 - 11904: 0x8C6D, + 40872 - 11904: 0x8C74, + 40873 - 11904: 0x8CB7, + 40874 - 11904: 0x8CB9, + 40875 - 11904: 0x8CBB, + 40876 - 11904: 0x8CC0, + 40877 - 11904: 0x8CD7, + 40878 - 11904: 0x8CD8, + 40879 - 11904: 0x8CDA, + 40880 - 11904: 0xC8A1, + 40881 - 11904: 0xC8A3, + 40882 - 11904: 0x8CED, + 40883 - 11904: 0x8D48, + 40903 - 11904: 0x87C2, + 40904 - 11904: 0x87D2, + 40905 - 11904: 0x87D6, + 40906 - 11904: 0x87DA, + 40907 - 11904: 0x87DF, +} + +const encode2Low, encode2High = 7870, 10046 + +var encode2 = [...]uint16{ + 7870 - 7870: 0x8863, + 7871 - 7870: 0x88A4, + 7872 - 7870: 0x8865, + 7873 - 7870: 0x88A6, + 8211 - 7870: 0xA156, + 8212 - 7870: 0xA158, + 8216 - 7870: 0xA1A5, + 8217 - 7870: 0xA1A6, + 8220 - 7870: 0xA1A7, + 8221 - 7870: 0xA1A8, + 8229 - 7870: 0xA14C, + 8230 - 7870: 0xA14B, + 8231 - 7870: 0xA145, + 8242 - 7870: 0xA1AC, + 8245 - 7870: 0xA1AB, + 8251 - 7870: 0xA1B0, + 8364 - 7870: 0xA3E1, + 8451 - 7870: 0xA24A, + 8453 - 7870: 0xA1C1, + 8457 - 7870: 0xA24B, + 8470 - 7870: 0xC8D2, + 8481 - 7870: 0xC8D3, + 8544 - 7870: 0xA2B9, + 8545 - 7870: 0xA2BA, + 8546 - 7870: 0xA2BB, + 8547 - 7870: 0xA2BC, + 8548 - 7870: 0xA2BD, + 8549 - 7870: 0xA2BE, + 8550 - 7870: 0xA2BF, + 8551 - 7870: 0xA2C0, + 8552 - 7870: 0xA2C1, + 8553 - 7870: 0xA2C2, + 8560 - 7870: 0xC6B5, + 8561 - 7870: 0xC6B6, + 8562 - 7870: 0xC6B7, + 8563 - 7870: 0xC6B8, + 8564 - 7870: 0xC6B9, + 8565 - 7870: 0xC6BA, + 8566 - 7870: 0xC6BB, + 8567 - 7870: 0xC6BC, + 8568 - 7870: 0xC6BD, + 8569 - 7870: 0xC6BE, + 8592 - 7870: 0xA1F6, + 8593 - 7870: 0xA1F4, + 8594 - 7870: 0xA1F7, + 8595 - 7870: 0xA1F5, + 8598 - 7870: 0xA1F8, + 8599 - 7870: 0xA1F9, + 8600 - 7870: 0xA1FB, + 8601 - 7870: 0xA1FA, + 8632 - 7870: 0xC877, + 8633 - 7870: 0xC878, + 8679 - 7870: 0xC876, + 8725 - 7870: 0xA241, + 8730 - 7870: 0xA1D4, + 8734 - 7870: 0xA1DB, + 8735 - 7870: 0xA1E8, + 8736 - 7870: 0xA1E7, + 8739 - 7870: 0xA1FD, + 8741 - 7870: 0xA1FC, + 8745 - 7870: 0xA1E4, + 8746 - 7870: 0xA1E5, + 8747 - 7870: 0xA1EC, + 8750 - 7870: 0xA1ED, + 8756 - 7870: 0xA1EF, + 8757 - 7870: 0xA1EE, + 8786 - 7870: 0xA1DC, + 8800 - 7870: 0xA1DA, + 8801 - 7870: 0xA1DD, + 8806 - 7870: 0xA1D8, + 8807 - 7870: 0xA1D9, + 8853 - 7870: 0xA1F2, + 8857 - 7870: 0xA1F3, + 8869 - 7870: 0xA1E6, + 8895 - 7870: 0xA1E9, + 9178 - 7870: 0x88A9, + 9179 - 7870: 0x88AA, + 9216 - 7870: 0xA3C0, + 9217 - 7870: 0xA3C1, + 9218 - 7870: 0xA3C2, + 9219 - 7870: 0xA3C3, + 9220 - 7870: 0xA3C4, + 9221 - 7870: 0xA3C5, + 9222 - 7870: 0xA3C6, + 9223 - 7870: 0xA3C7, + 9224 - 7870: 0xA3C8, + 9225 - 7870: 0xA3C9, + 9226 - 7870: 0xA3CA, + 9227 - 7870: 0xA3CB, + 9228 - 7870: 0xA3CC, + 9229 - 7870: 0xA3CD, + 9230 - 7870: 0xA3CE, + 9231 - 7870: 0xA3CF, + 9232 - 7870: 0xA3D0, + 9233 - 7870: 0xA3D1, + 9234 - 7870: 0xA3D2, + 9235 - 7870: 0xA3D3, + 9236 - 7870: 0xA3D4, + 9237 - 7870: 0xA3D5, + 9238 - 7870: 0xA3D6, + 9239 - 7870: 0xA3D7, + 9240 - 7870: 0xA3D8, + 9241 - 7870: 0xA3D9, + 9242 - 7870: 0xA3DA, + 9243 - 7870: 0xA3DB, + 9244 - 7870: 0xA3DC, + 9245 - 7870: 0xA3DD, + 9246 - 7870: 0xA3DE, + 9247 - 7870: 0xA3DF, + 9249 - 7870: 0xA3E0, + 9312 - 7870: 0xC6A1, + 9313 - 7870: 0xC6A2, + 9314 - 7870: 0xC6A3, + 9315 - 7870: 0xC6A4, + 9316 - 7870: 0xC6A5, + 9317 - 7870: 0xC6A6, + 9318 - 7870: 0xC6A7, + 9319 - 7870: 0xC6A8, + 9320 - 7870: 0xC6A9, + 9321 - 7870: 0xC6AA, + 9332 - 7870: 0xC6AB, + 9333 - 7870: 0xC6AC, + 9334 - 7870: 0xC6AD, + 9335 - 7870: 0xC6AE, + 9336 - 7870: 0xC6AF, + 9337 - 7870: 0xC6B0, + 9338 - 7870: 0xC6B1, + 9339 - 7870: 0xC6B2, + 9340 - 7870: 0xC6B3, + 9341 - 7870: 0xC6B4, + 9472 - 7870: 0xA277, + 9474 - 7870: 0xA278, + 9484 - 7870: 0xA27A, + 9488 - 7870: 0xA27B, + 9492 - 7870: 0xA27C, + 9496 - 7870: 0xA27D, + 9500 - 7870: 0xA275, + 9508 - 7870: 0xA274, + 9516 - 7870: 0xA273, + 9524 - 7870: 0xA272, + 9532 - 7870: 0xA271, + 9552 - 7870: 0xF9F9, + 9553 - 7870: 0xF9F8, + 9554 - 7870: 0xF9E6, + 9555 - 7870: 0xF9EF, + 9556 - 7870: 0xF9DD, + 9557 - 7870: 0xF9E8, + 9558 - 7870: 0xF9F1, + 9559 - 7870: 0xF9DF, + 9560 - 7870: 0xF9EC, + 9561 - 7870: 0xF9F5, + 9562 - 7870: 0xF9E3, + 9563 - 7870: 0xF9EE, + 9564 - 7870: 0xF9F7, + 9565 - 7870: 0xF9E5, + 9566 - 7870: 0xF9E9, + 9567 - 7870: 0xF9F2, + 9568 - 7870: 0xF9E0, + 9569 - 7870: 0xF9EB, + 9570 - 7870: 0xF9F4, + 9571 - 7870: 0xF9E2, + 9572 - 7870: 0xF9E7, + 9573 - 7870: 0xF9F0, + 9574 - 7870: 0xF9DE, + 9575 - 7870: 0xF9ED, + 9576 - 7870: 0xF9F6, + 9577 - 7870: 0xF9E4, + 9578 - 7870: 0xF9EA, + 9579 - 7870: 0xF9F3, + 9580 - 7870: 0xF9E1, + 9581 - 7870: 0xF9FA, + 9582 - 7870: 0xF9FB, + 9583 - 7870: 0xF9FD, + 9584 - 7870: 0xF9FC, + 9585 - 7870: 0xA2AC, + 9586 - 7870: 0xA2AD, + 9587 - 7870: 0xA2AE, + 9588 - 7870: 0xA15A, + 9601 - 7870: 0xA262, + 9602 - 7870: 0xA263, + 9603 - 7870: 0xA264, + 9604 - 7870: 0xA265, + 9605 - 7870: 0xA266, + 9606 - 7870: 0xA267, + 9607 - 7870: 0xA268, + 9608 - 7870: 0xA269, + 9609 - 7870: 0xA270, + 9610 - 7870: 0xA26F, + 9611 - 7870: 0xA26E, + 9612 - 7870: 0xA26D, + 9613 - 7870: 0xA26C, + 9614 - 7870: 0xA26B, + 9615 - 7870: 0xA26A, + 9620 - 7870: 0xA276, + 9621 - 7870: 0xA279, + 9632 - 7870: 0xA1BD, + 9633 - 7870: 0xA1BC, + 9650 - 7870: 0xA1B6, + 9651 - 7870: 0xA1B5, + 9660 - 7870: 0xA1BF, + 9661 - 7870: 0xA1BE, + 9670 - 7870: 0xA1BB, + 9671 - 7870: 0xA1BA, + 9675 - 7870: 0xA1B3, + 9678 - 7870: 0xA1B7, + 9679 - 7870: 0xA1B4, + 9698 - 7870: 0xA2A8, + 9699 - 7870: 0xA2A9, + 9700 - 7870: 0xA2AB, + 9701 - 7870: 0xA2AA, + 9733 - 7870: 0xA1B9, + 9734 - 7870: 0xA1B8, + 9792 - 7870: 0xA1F0, + 9794 - 7870: 0xA1F1, + 10045 - 7870: 0xC6E6, +} + +const encode3Low, encode3High = 167, 1106 + +var encode3 = [...]uint16{ + 167 - 167: 0xA1B1, + 168 - 167: 0xC6D8, + 175 - 167: 0xA1C2, + 176 - 167: 0xA258, + 177 - 167: 0xA1D3, + 183 - 167: 0xA150, + 192 - 167: 0x8859, + 193 - 167: 0x8857, + 200 - 167: 0x885D, + 201 - 167: 0x885B, + 202 - 167: 0x8866, + 210 - 167: 0x8861, + 211 - 167: 0x885F, + 215 - 167: 0xA1D1, + 224 - 167: 0x886A, + 225 - 167: 0x8868, + 232 - 167: 0x886F, + 233 - 167: 0x886D, + 234 - 167: 0x88A7, + 236 - 167: 0x8873, + 237 - 167: 0x8871, + 242 - 167: 0x8877, + 243 - 167: 0x8875, + 247 - 167: 0xA1D2, + 248 - 167: 0xC8FB, + 249 - 167: 0x887B, + 250 - 167: 0x8879, + 252 - 167: 0x88A2, + 256 - 167: 0x8856, + 257 - 167: 0x8867, + 274 - 167: 0x885A, + 275 - 167: 0x886C, + 282 - 167: 0x885C, + 283 - 167: 0x886E, + 299 - 167: 0x8870, + 331 - 167: 0xC8FC, + 332 - 167: 0x885E, + 333 - 167: 0x8874, + 339 - 167: 0xC8FA, + 363 - 167: 0x8878, + 461 - 167: 0x8858, + 462 - 167: 0x8869, + 464 - 167: 0x8872, + 465 - 167: 0x8860, + 466 - 167: 0x8876, + 468 - 167: 0x887A, + 470 - 167: 0x887C, + 472 - 167: 0x887D, + 474 - 167: 0x887E, + 476 - 167: 0x88A1, + 592 - 167: 0xC8F6, + 593 - 167: 0x886B, + 596 - 167: 0xC8F8, + 603 - 167: 0xC8F7, + 609 - 167: 0x88A8, + 618 - 167: 0xC8FE, + 629 - 167: 0xC8F9, + 643 - 167: 0xC8F5, + 650 - 167: 0xC8FD, + 710 - 167: 0xC6D9, + 711 - 167: 0xA3BE, + 713 - 167: 0xA3BC, + 714 - 167: 0xA3BD, + 715 - 167: 0xA3BF, + 717 - 167: 0xA1C5, + 729 - 167: 0xA3BB, + 913 - 167: 0xA344, + 914 - 167: 0xA345, + 915 - 167: 0xA346, + 916 - 167: 0xA347, + 917 - 167: 0xA348, + 918 - 167: 0xA349, + 919 - 167: 0xA34A, + 920 - 167: 0xA34B, + 921 - 167: 0xA34C, + 922 - 167: 0xA34D, + 923 - 167: 0xA34E, + 924 - 167: 0xA34F, + 925 - 167: 0xA350, + 926 - 167: 0xA351, + 927 - 167: 0xA352, + 928 - 167: 0xA353, + 929 - 167: 0xA354, + 931 - 167: 0xA355, + 932 - 167: 0xA356, + 933 - 167: 0xA357, + 934 - 167: 0xA358, + 935 - 167: 0xA359, + 936 - 167: 0xA35A, + 937 - 167: 0xA35B, + 945 - 167: 0xA35C, + 946 - 167: 0xA35D, + 947 - 167: 0xA35E, + 948 - 167: 0xA35F, + 949 - 167: 0xA360, + 950 - 167: 0xA361, + 951 - 167: 0xA362, + 952 - 167: 0xA363, + 953 - 167: 0xA364, + 954 - 167: 0xA365, + 955 - 167: 0xA366, + 956 - 167: 0xA367, + 957 - 167: 0xA368, + 958 - 167: 0xA369, + 959 - 167: 0xA36A, + 960 - 167: 0xA36B, + 961 - 167: 0xA36C, + 963 - 167: 0xA36D, + 964 - 167: 0xA36E, + 965 - 167: 0xA36F, + 966 - 167: 0xA370, + 967 - 167: 0xA371, + 968 - 167: 0xA372, + 969 - 167: 0xA373, + 1025 - 167: 0xC7F9, + 1040 - 167: 0xC7F3, + 1041 - 167: 0xC7F4, + 1042 - 167: 0xC7F5, + 1043 - 167: 0xC7F6, + 1044 - 167: 0xC7F7, + 1045 - 167: 0xC7F8, + 1046 - 167: 0xC7FA, + 1047 - 167: 0xC7FB, + 1048 - 167: 0xC7FC, + 1049 - 167: 0xC7FD, + 1050 - 167: 0xC7FE, + 1051 - 167: 0xC840, + 1052 - 167: 0xC841, + 1053 - 167: 0xC842, + 1054 - 167: 0xC843, + 1055 - 167: 0xC844, + 1056 - 167: 0xC845, + 1057 - 167: 0xC846, + 1058 - 167: 0xC847, + 1059 - 167: 0xC848, + 1060 - 167: 0xC849, + 1061 - 167: 0xC84A, + 1062 - 167: 0xC84B, + 1063 - 167: 0xC84C, + 1064 - 167: 0xC84D, + 1065 - 167: 0xC84E, + 1066 - 167: 0xC84F, + 1067 - 167: 0xC850, + 1068 - 167: 0xC851, + 1069 - 167: 0xC852, + 1070 - 167: 0xC853, + 1071 - 167: 0xC854, + 1072 - 167: 0xC855, + 1073 - 167: 0xC856, + 1074 - 167: 0xC857, + 1075 - 167: 0xC858, + 1076 - 167: 0xC859, + 1077 - 167: 0xC85A, + 1078 - 167: 0xC85C, + 1079 - 167: 0xC85D, + 1080 - 167: 0xC85E, + 1081 - 167: 0xC85F, + 1082 - 167: 0xC860, + 1083 - 167: 0xC861, + 1084 - 167: 0xC862, + 1085 - 167: 0xC863, + 1086 - 167: 0xC864, + 1087 - 167: 0xC865, + 1088 - 167: 0xC866, + 1089 - 167: 0xC867, + 1090 - 167: 0xC868, + 1091 - 167: 0xC869, + 1092 - 167: 0xC86A, + 1093 - 167: 0xC86B, + 1094 - 167: 0xC86C, + 1095 - 167: 0xC86D, + 1096 - 167: 0xC86E, + 1097 - 167: 0xC86F, + 1098 - 167: 0xC870, + 1099 - 167: 0xC871, + 1100 - 167: 0xC872, + 1101 - 167: 0xC873, + 1102 - 167: 0xC874, + 1103 - 167: 0xC875, + 1105 - 167: 0xC85B, +} + +const encode4Low, encode4High = 65072, 65518 + +var encode4 = [...]uint16{ + 65072 - 65072: 0xA14A, + 65073 - 65072: 0xA157, + 65075 - 65072: 0xA159, + 65076 - 65072: 0xA15B, + 65077 - 65072: 0xA15F, + 65078 - 65072: 0xA160, + 65079 - 65072: 0xA163, + 65080 - 65072: 0xA164, + 65081 - 65072: 0xA167, + 65082 - 65072: 0xA168, + 65083 - 65072: 0xA16B, + 65084 - 65072: 0xA16C, + 65085 - 65072: 0xA16F, + 65086 - 65072: 0xA170, + 65087 - 65072: 0xA173, + 65088 - 65072: 0xA174, + 65089 - 65072: 0xA177, + 65090 - 65072: 0xA178, + 65091 - 65072: 0xA17B, + 65092 - 65072: 0xA17C, + 65097 - 65072: 0xA1C6, + 65098 - 65072: 0xA1C7, + 65099 - 65072: 0xA1CA, + 65100 - 65072: 0xA1CB, + 65101 - 65072: 0xA1C8, + 65102 - 65072: 0xA1C9, + 65103 - 65072: 0xA15C, + 65104 - 65072: 0xA14D, + 65105 - 65072: 0xA14E, + 65106 - 65072: 0xA14F, + 65108 - 65072: 0xA151, + 65109 - 65072: 0xA152, + 65110 - 65072: 0xA153, + 65111 - 65072: 0xA154, + 65113 - 65072: 0xA17D, + 65114 - 65072: 0xA17E, + 65115 - 65072: 0xA1A1, + 65116 - 65072: 0xA1A2, + 65117 - 65072: 0xA1A3, + 65118 - 65072: 0xA1A4, + 65119 - 65072: 0xA1CC, + 65120 - 65072: 0xA1CD, + 65121 - 65072: 0xA1CE, + 65122 - 65072: 0xA1DE, + 65123 - 65072: 0xA1DF, + 65124 - 65072: 0xA1E0, + 65125 - 65072: 0xA1E1, + 65126 - 65072: 0xA1E2, + 65128 - 65072: 0xA242, + 65129 - 65072: 0xA24C, + 65130 - 65072: 0xA24D, + 65131 - 65072: 0xA24E, + 65281 - 65072: 0xA149, + 65282 - 65072: 0xC8D0, + 65283 - 65072: 0xA1AD, + 65284 - 65072: 0xA243, + 65285 - 65072: 0xA248, + 65286 - 65072: 0xA1AE, + 65287 - 65072: 0xC8CF, + 65288 - 65072: 0xA15D, + 65289 - 65072: 0xA15E, + 65290 - 65072: 0xA1AF, + 65291 - 65072: 0xA1CF, + 65292 - 65072: 0xA141, + 65293 - 65072: 0xA1D0, + 65294 - 65072: 0xA144, + 65295 - 65072: 0xA1FE, + 65296 - 65072: 0xA2AF, + 65297 - 65072: 0xA2B0, + 65298 - 65072: 0xA2B1, + 65299 - 65072: 0xA2B2, + 65300 - 65072: 0xA2B3, + 65301 - 65072: 0xA2B4, + 65302 - 65072: 0xA2B5, + 65303 - 65072: 0xA2B6, + 65304 - 65072: 0xA2B7, + 65305 - 65072: 0xA2B8, + 65306 - 65072: 0xA147, + 65307 - 65072: 0xA146, + 65308 - 65072: 0xA1D5, + 65309 - 65072: 0xA1D7, + 65310 - 65072: 0xA1D6, + 65311 - 65072: 0xA148, + 65312 - 65072: 0xA249, + 65313 - 65072: 0xA2CF, + 65314 - 65072: 0xA2D0, + 65315 - 65072: 0xA2D1, + 65316 - 65072: 0xA2D2, + 65317 - 65072: 0xA2D3, + 65318 - 65072: 0xA2D4, + 65319 - 65072: 0xA2D5, + 65320 - 65072: 0xA2D6, + 65321 - 65072: 0xA2D7, + 65322 - 65072: 0xA2D8, + 65323 - 65072: 0xA2D9, + 65324 - 65072: 0xA2DA, + 65325 - 65072: 0xA2DB, + 65326 - 65072: 0xA2DC, + 65327 - 65072: 0xA2DD, + 65328 - 65072: 0xA2DE, + 65329 - 65072: 0xA2DF, + 65330 - 65072: 0xA2E0, + 65331 - 65072: 0xA2E1, + 65332 - 65072: 0xA2E2, + 65333 - 65072: 0xA2E3, + 65334 - 65072: 0xA2E4, + 65335 - 65072: 0xA2E5, + 65336 - 65072: 0xA2E6, + 65337 - 65072: 0xA2E7, + 65338 - 65072: 0xA2E8, + 65339 - 65072: 0xC6E4, + 65340 - 65072: 0xA240, + 65341 - 65072: 0xC6E5, + 65343 - 65072: 0xA1C4, + 65345 - 65072: 0xA2E9, + 65346 - 65072: 0xA2EA, + 65347 - 65072: 0xA2EB, + 65348 - 65072: 0xA2EC, + 65349 - 65072: 0xA2ED, + 65350 - 65072: 0xA2EE, + 65351 - 65072: 0xA2EF, + 65352 - 65072: 0xA2F0, + 65353 - 65072: 0xA2F1, + 65354 - 65072: 0xA2F2, + 65355 - 65072: 0xA2F3, + 65356 - 65072: 0xA2F4, + 65357 - 65072: 0xA2F5, + 65358 - 65072: 0xA2F6, + 65359 - 65072: 0xA2F7, + 65360 - 65072: 0xA2F8, + 65361 - 65072: 0xA2F9, + 65362 - 65072: 0xA2FA, + 65363 - 65072: 0xA2FB, + 65364 - 65072: 0xA2FC, + 65365 - 65072: 0xA2FD, + 65366 - 65072: 0xA2FE, + 65367 - 65072: 0xA340, + 65368 - 65072: 0xA341, + 65369 - 65072: 0xA342, + 65370 - 65072: 0xA343, + 65371 - 65072: 0xA161, + 65372 - 65072: 0xA155, + 65373 - 65072: 0xA162, + 65374 - 65072: 0xA1E3, + 65504 - 65072: 0xA246, + 65505 - 65072: 0xA247, + 65506 - 65072: 0xC8CD, + 65507 - 65072: 0xA1C3, + 65508 - 65072: 0xC8CE, + 65509 - 65072: 0xA244, + 65517 - 65072: 0xF9FE, +} + +const encode5Low, encode5High = 194597, 195029 + +var encode5 = [...]uint16{ + 194597 - 194597: 0x9874, + 194619 - 194597: 0x9AC8, + 194624 - 194597: 0xA047, + 194680 - 194597: 0x8BC3, + 194708 - 194597: 0xFC48, + 194726 - 194597: 0xFC77, + 194765 - 194597: 0x9C52, + 194964 - 194597: 0x8EFD, + 194994 - 194597: 0x8FA8, + 195004 - 194597: 0x957A, + 195028 - 194597: 0x8FF0, +} + +const encode6Low, encode6High = 63751, 64014 + +var encode6 = [...]uint16{ + 63751 - 63751: 0x8BF8, + 64012 - 63751: 0xC94A, + 64013 - 63751: 0xDDFC, +} + +const encode7Low, encode7High = 175615, 175616 + +var encode7 = [...]uint16{ + 175615 - 175615: 0x87DC, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go new file mode 100644 index 000000000000..9fa5aa192c29 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -0,0 +1,636 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +// This file defines utilities for working with source positions. + +import ( + "fmt" + "go/ast" + "go/token" + "sort" + + "golang.org/x/tools/internal/typeparams" +) + +// PathEnclosingInterval returns the node that encloses the source +// interval [start, end), and all its ancestors up to the AST root. +// +// The definition of "enclosing" used by this function considers +// additional whitespace abutting a node to be enclosed by it. +// In this example: +// +// z := x + y // add them +// <-A-> +// <----B-----> +// +// the ast.BinaryExpr(+) node is considered to enclose interval B +// even though its [Pos()..End()) is actually only interval A. +// This behaviour makes user interfaces more tolerant of imperfect +// input. +// +// This function treats tokens as nodes, though they are not included +// in the result. e.g. PathEnclosingInterval("+") returns the +// enclosing ast.BinaryExpr("x + y"). +// +// If start==end, the 1-char interval following start is used instead. +// +// The 'exact' result is true if the interval contains only path[0] +// and perhaps some adjacent whitespace. It is false if the interval +// overlaps multiple children of path[0], or if it contains only +// interior whitespace of path[0]. +// In this example: +// +// z := x + y // add them +// <--C--> <---E--> +// ^ +// D +// +// intervals C, D and E are inexact. C is contained by the +// z-assignment statement, because it spans three of its children (:=, +// x, +). So too is the 1-char interval D, because it contains only +// interior whitespace of the assignment. E is considered interior +// whitespace of the BlockStmt containing the assignment. +// +// The resulting path is never empty; it always contains at least the +// 'root' *ast.File. Ideally PathEnclosingInterval would reject +// intervals that lie wholly or partially outside the range of the +// file, but unfortunately ast.File records only the token.Pos of +// the 'package' keyword, but not of the start of the file itself. +func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) { + // fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging + + // Precondition: node.[Pos..End) and adjoining whitespace contain [start, end). + var visit func(node ast.Node) bool + visit = func(node ast.Node) bool { + path = append(path, node) + + nodePos := node.Pos() + nodeEnd := node.End() + + // fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging + + // Intersect [start, end) with interval of node. + if start < nodePos { + start = nodePos + } + if end > nodeEnd { + end = nodeEnd + } + + // Find sole child that contains [start, end). + children := childrenOf(node) + l := len(children) + for i, child := range children { + // [childPos, childEnd) is unaugmented interval of child. + childPos := child.Pos() + childEnd := child.End() + + // [augPos, augEnd) is whitespace-augmented interval of child. + augPos := childPos + augEnd := childEnd + if i > 0 { + augPos = children[i-1].End() // start of preceding whitespace + } + if i < l-1 { + nextChildPos := children[i+1].Pos() + // Does [start, end) lie between child and next child? + if start >= augEnd && end <= nextChildPos { + return false // inexact match + } + augEnd = nextChildPos // end of following whitespace + } + + // fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n", + // i, augPos, augEnd, start, end) // debugging + + // Does augmented child strictly contain [start, end)? + if augPos <= start && end <= augEnd { + _, isToken := child.(tokenNode) + return isToken || visit(child) + } + + // Does [start, end) overlap multiple children? + // i.e. left-augmented child contains start + // but LR-augmented child does not contain end. + if start < childEnd && end > augEnd { + break + } + } + + // No single child contained [start, end), + // so node is the result. Is it exact? + + // (It's tempting to put this condition before the + // child loop, but it gives the wrong result in the + // case where a node (e.g. ExprStmt) and its sole + // child have equal intervals.) + if start == nodePos && end == nodeEnd { + return true // exact match + } + + return false // inexact: overlaps multiple children + } + + // Ensure [start,end) is nondecreasing. + if start > end { + start, end = end, start + } + + if start < root.End() && end > root.Pos() { + if start == end { + end = start + 1 // empty interval => interval of size 1 + } + exact = visit(root) + + // Reverse the path: + for i, l := 0, len(path); i < l/2; i++ { + path[i], path[l-1-i] = path[l-1-i], path[i] + } + } else { + // Selection lies within whitespace preceding the + // first (or following the last) declaration in the file. + // The result nonetheless always includes the ast.File. + path = append(path, root) + } + + return +} + +// tokenNode is a dummy implementation of ast.Node for a single token. +// They are used transiently by PathEnclosingInterval but never escape +// this package. +type tokenNode struct { + pos token.Pos + end token.Pos +} + +func (n tokenNode) Pos() token.Pos { + return n.pos +} + +func (n tokenNode) End() token.Pos { + return n.end +} + +func tok(pos token.Pos, len int) ast.Node { + return tokenNode{pos, pos + token.Pos(len)} +} + +// childrenOf returns the direct non-nil children of ast.Node n. +// It may include fake ast.Node implementations for bare tokens. +// it is not safe to call (e.g.) ast.Walk on such nodes. +func childrenOf(n ast.Node) []ast.Node { + var children []ast.Node + + // First add nodes for all true subtrees. + ast.Inspect(n, func(node ast.Node) bool { + if node == n { // push n + return true // recur + } + if node != nil { // push child + children = append(children, node) + } + return false // no recursion + }) + + // Then add fake Nodes for bare tokens. + switch n := n.(type) { + case *ast.ArrayType: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Elt.End(), len("]"))) + + case *ast.AssignStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.BasicLit: + children = append(children, + tok(n.ValuePos, len(n.Value))) + + case *ast.BinaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.BlockStmt: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("}"))) + + case *ast.BranchStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.CallExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + if n.Ellipsis != 0 { + children = append(children, tok(n.Ellipsis, len("..."))) + } + + case *ast.CaseClause: + if n.List == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.ChanType: + switch n.Dir { + case ast.RECV: + children = append(children, tok(n.Begin, len("<-chan"))) + case ast.SEND: + children = append(children, tok(n.Begin, len("chan<-"))) + case ast.RECV | ast.SEND: + children = append(children, tok(n.Begin, len("chan"))) + } + + case *ast.CommClause: + if n.Comm == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.Comment: + // nop + + case *ast.CommentGroup: + // nop + + case *ast.CompositeLit: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("{"))) + + case *ast.DeclStmt: + // nop + + case *ast.DeferStmt: + children = append(children, + tok(n.Defer, len("defer"))) + + case *ast.Ellipsis: + children = append(children, + tok(n.Ellipsis, len("..."))) + + case *ast.EmptyStmt: + // nop + + case *ast.ExprStmt: + // nop + + case *ast.Field: + // TODO(adonovan): Field.{Doc,Comment,Tag}? + + case *ast.FieldList: + children = append(children, + tok(n.Opening, len("(")), // or len("[") + tok(n.Closing, len(")"))) // or len("]") + + case *ast.File: + // TODO test: Doc + children = append(children, + tok(n.Package, len("package"))) + + case *ast.ForStmt: + children = append(children, + tok(n.For, len("for"))) + + case *ast.FuncDecl: + // TODO(adonovan): FuncDecl.Comment? + + // Uniquely, FuncDecl breaks the invariant that + // preorder traversal yields tokens in lexical order: + // in fact, FuncDecl.Recv precedes FuncDecl.Type.Func. + // + // As a workaround, we inline the case for FuncType + // here and order things correctly. + // + children = nil // discard ast.Walk(FuncDecl) info subtrees + children = append(children, tok(n.Type.Func, len("func"))) + if n.Recv != nil { + children = append(children, n.Recv) + } + children = append(children, n.Name) + if tparams := typeparams.ForFuncType(n.Type); tparams != nil { + children = append(children, tparams) + } + if n.Type.Params != nil { + children = append(children, n.Type.Params) + } + if n.Type.Results != nil { + children = append(children, n.Type.Results) + } + if n.Body != nil { + children = append(children, n.Body) + } + + case *ast.FuncLit: + // nop + + case *ast.FuncType: + if n.Func != 0 { + children = append(children, + tok(n.Func, len("func"))) + } + + case *ast.GenDecl: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + if n.Lparen != 0 { + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + } + + case *ast.GoStmt: + children = append(children, + tok(n.Go, len("go"))) + + case *ast.Ident: + children = append(children, + tok(n.NamePos, len(n.Name))) + + case *ast.IfStmt: + children = append(children, + tok(n.If, len("if"))) + + case *ast.ImportSpec: + // TODO(adonovan): ImportSpec.{Doc,EndPos}? + + case *ast.IncDecStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.IndexExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *typeparams.IndexListExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.InterfaceType: + children = append(children, + tok(n.Interface, len("interface"))) + + case *ast.KeyValueExpr: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.LabeledStmt: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.MapType: + children = append(children, + tok(n.Map, len("map"))) + + case *ast.ParenExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.RangeStmt: + children = append(children, + tok(n.For, len("for")), + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.ReturnStmt: + children = append(children, + tok(n.Return, len("return"))) + + case *ast.SelectStmt: + children = append(children, + tok(n.Select, len("select"))) + + case *ast.SelectorExpr: + // nop + + case *ast.SendStmt: + children = append(children, + tok(n.Arrow, len("<-"))) + + case *ast.SliceExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.StarExpr: + children = append(children, tok(n.Star, len("*"))) + + case *ast.StructType: + children = append(children, tok(n.Struct, len("struct"))) + + case *ast.SwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.TypeAssertExpr: + children = append(children, + tok(n.Lparen-1, len(".")), + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.TypeSpec: + // TODO(adonovan): TypeSpec.{Doc,Comment}? + + case *ast.TypeSwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.UnaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.ValueSpec: + // TODO(adonovan): ValueSpec.{Doc,Comment}? + + case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt: + // nop + } + + // TODO(adonovan): opt: merge the logic of ast.Inspect() into + // the switch above so we can make interleaved callbacks for + // both Nodes and Tokens in the right order and avoid the need + // to sort. + sort.Sort(byPos(children)) + + return children +} + +type byPos []ast.Node + +func (sl byPos) Len() int { + return len(sl) +} +func (sl byPos) Less(i, j int) bool { + return sl[i].Pos() < sl[j].Pos() +} +func (sl byPos) Swap(i, j int) { + sl[i], sl[j] = sl[j], sl[i] +} + +// NodeDescription returns a description of the concrete type of n suitable +// for a user interface. +// +// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident, +// StarExpr) we could be much more specific given the path to the AST +// root. Perhaps we should do that. +func NodeDescription(n ast.Node) string { + switch n := n.(type) { + case *ast.ArrayType: + return "array type" + case *ast.AssignStmt: + return "assignment" + case *ast.BadDecl: + return "bad declaration" + case *ast.BadExpr: + return "bad expression" + case *ast.BadStmt: + return "bad statement" + case *ast.BasicLit: + return "basic literal" + case *ast.BinaryExpr: + return fmt.Sprintf("binary %s operation", n.Op) + case *ast.BlockStmt: + return "block" + case *ast.BranchStmt: + switch n.Tok { + case token.BREAK: + return "break statement" + case token.CONTINUE: + return "continue statement" + case token.GOTO: + return "goto statement" + case token.FALLTHROUGH: + return "fall-through statement" + } + case *ast.CallExpr: + if len(n.Args) == 1 && !n.Ellipsis.IsValid() { + return "function call (or conversion)" + } + return "function call" + case *ast.CaseClause: + return "case clause" + case *ast.ChanType: + return "channel type" + case *ast.CommClause: + return "communication clause" + case *ast.Comment: + return "comment" + case *ast.CommentGroup: + return "comment group" + case *ast.CompositeLit: + return "composite literal" + case *ast.DeclStmt: + return NodeDescription(n.Decl) + " statement" + case *ast.DeferStmt: + return "defer statement" + case *ast.Ellipsis: + return "ellipsis" + case *ast.EmptyStmt: + return "empty statement" + case *ast.ExprStmt: + return "expression statement" + case *ast.Field: + // Can be any of these: + // struct {x, y int} -- struct field(s) + // struct {T} -- anon struct field + // interface {I} -- interface embedding + // interface {f()} -- interface method + // func (A) func(B) C -- receiver, param(s), result(s) + return "field/method/parameter" + case *ast.FieldList: + return "field/method/parameter list" + case *ast.File: + return "source file" + case *ast.ForStmt: + return "for loop" + case *ast.FuncDecl: + return "function declaration" + case *ast.FuncLit: + return "function literal" + case *ast.FuncType: + return "function type" + case *ast.GenDecl: + switch n.Tok { + case token.IMPORT: + return "import declaration" + case token.CONST: + return "constant declaration" + case token.TYPE: + return "type declaration" + case token.VAR: + return "variable declaration" + } + case *ast.GoStmt: + return "go statement" + case *ast.Ident: + return "identifier" + case *ast.IfStmt: + return "if statement" + case *ast.ImportSpec: + return "import specification" + case *ast.IncDecStmt: + if n.Tok == token.INC { + return "increment statement" + } + return "decrement statement" + case *ast.IndexExpr: + return "index expression" + case *typeparams.IndexListExpr: + return "index list expression" + case *ast.InterfaceType: + return "interface type" + case *ast.KeyValueExpr: + return "key/value association" + case *ast.LabeledStmt: + return "statement label" + case *ast.MapType: + return "map type" + case *ast.Package: + return "package" + case *ast.ParenExpr: + return "parenthesized " + NodeDescription(n.X) + case *ast.RangeStmt: + return "range loop" + case *ast.ReturnStmt: + return "return statement" + case *ast.SelectStmt: + return "select statement" + case *ast.SelectorExpr: + return "selector" + case *ast.SendStmt: + return "channel send" + case *ast.SliceExpr: + return "slice expression" + case *ast.StarExpr: + return "*-operation" // load/store expr or pointer type + case *ast.StructType: + return "struct type" + case *ast.SwitchStmt: + return "switch statement" + case *ast.TypeAssertExpr: + return "type assertion" + case *ast.TypeSpec: + return "type specification" + case *ast.TypeSwitchStmt: + return "type switch" + case *ast.UnaryExpr: + return fmt.Sprintf("unary %s operation", n.Op) + case *ast.ValueSpec: + return "value specification" + + } + panic(fmt.Sprintf("unexpected node type: %T", n)) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/imports.go new file mode 100644 index 000000000000..18d1adb05ddc --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -0,0 +1,485 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package astutil contains common utilities for working with the Go AST. +package astutil // import "golang.org/x/tools/go/ast/astutil" + +import ( + "fmt" + "go/ast" + "go/token" + "strconv" + "strings" +) + +// AddImport adds the import path to the file f, if absent. +func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) { + return AddNamedImport(fset, f, "", path) +} + +// AddNamedImport adds the import with the given name and path to the file f, if absent. +// If name is not empty, it is used to rename the import. +// +// For example, calling +// +// AddNamedImport(fset, f, "pathpkg", "path") +// +// adds +// +// import pathpkg "path" +func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) { + if imports(f, name, path) { + return false + } + + newImport := &ast.ImportSpec{ + Path: &ast.BasicLit{ + Kind: token.STRING, + Value: strconv.Quote(path), + }, + } + if name != "" { + newImport.Name = &ast.Ident{Name: name} + } + + // Find an import decl to add to. + // The goal is to find an existing import + // whose import path has the longest shared + // prefix with path. + var ( + bestMatch = -1 // length of longest shared prefix + lastImport = -1 // index in f.Decls of the file's final import decl + impDecl *ast.GenDecl // import decl containing the best match + impIndex = -1 // spec index in impDecl containing the best match + + isThirdPartyPath = isThirdParty(path) + ) + for i, decl := range f.Decls { + gen, ok := decl.(*ast.GenDecl) + if ok && gen.Tok == token.IMPORT { + lastImport = i + // Do not add to import "C", to avoid disrupting the + // association with its doc comment, breaking cgo. + if declImports(gen, "C") { + continue + } + + // Match an empty import decl if that's all that is available. + if len(gen.Specs) == 0 && bestMatch == -1 { + impDecl = gen + } + + // Compute longest shared prefix with imports in this group and find best + // matched import spec. + // 1. Always prefer import spec with longest shared prefix. + // 2. While match length is 0, + // - for stdlib package: prefer first import spec. + // - for third party package: prefer first third party import spec. + // We cannot use last import spec as best match for third party package + // because grouped imports are usually placed last by goimports -local + // flag. + // See issue #19190. + seenAnyThirdParty := false + for j, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + p := importPath(impspec) + n := matchLen(p, path) + if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) { + bestMatch = n + impDecl = gen + impIndex = j + } + seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p) + } + } + } + + // If no import decl found, add one after the last import. + if impDecl == nil { + impDecl = &ast.GenDecl{ + Tok: token.IMPORT, + } + if lastImport >= 0 { + impDecl.TokPos = f.Decls[lastImport].End() + } else { + // There are no existing imports. + // Our new import, preceded by a blank line, goes after the package declaration + // and after the comment, if any, that starts on the same line as the + // package declaration. + impDecl.TokPos = f.Package + + file := fset.File(f.Package) + pkgLine := file.Line(f.Package) + for _, c := range f.Comments { + if file.Line(c.Pos()) > pkgLine { + break + } + // +2 for a blank line + impDecl.TokPos = c.End() + 2 + } + } + f.Decls = append(f.Decls, nil) + copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:]) + f.Decls[lastImport+1] = impDecl + } + + // Insert new import at insertAt. + insertAt := 0 + if impIndex >= 0 { + // insert after the found import + insertAt = impIndex + 1 + } + impDecl.Specs = append(impDecl.Specs, nil) + copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:]) + impDecl.Specs[insertAt] = newImport + pos := impDecl.Pos() + if insertAt > 0 { + // If there is a comment after an existing import, preserve the comment + // position by adding the new import after the comment. + if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil { + pos = spec.Comment.End() + } else { + // Assign same position as the previous import, + // so that the sorter sees it as being in the same block. + pos = impDecl.Specs[insertAt-1].Pos() + } + } + if newImport.Name != nil { + newImport.Name.NamePos = pos + } + newImport.Path.ValuePos = pos + newImport.EndPos = pos + + // Clean up parens. impDecl contains at least one spec. + if len(impDecl.Specs) == 1 { + // Remove unneeded parens. + impDecl.Lparen = token.NoPos + } else if !impDecl.Lparen.IsValid() { + // impDecl needs parens added. + impDecl.Lparen = impDecl.Specs[0].Pos() + } + + f.Imports = append(f.Imports, newImport) + + if len(f.Decls) <= 1 { + return true + } + + // Merge all the import declarations into the first one. + var first *ast.GenDecl + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { + continue + } + if first == nil { + first = gen + continue // Don't touch the first one. + } + // We now know there is more than one package in this import + // declaration. Ensure that it ends up parenthesized. + first.Lparen = first.Pos() + // Move the imports of the other import declaration to the first one. + for _, spec := range gen.Specs { + spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() + first.Specs = append(first.Specs, spec) + } + f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + i-- + } + + return true +} + +func isThirdParty(importPath string) bool { + // Third party package import path usually contains "." (".com", ".org", ...) + // This logic is taken from golang.org/x/tools/imports package. + return strings.Contains(importPath, ".") +} + +// DeleteImport deletes the import path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) { + return DeleteNamedImport(fset, f, "", path) +} + +// DeleteNamedImport deletes the import with the given name and path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) { + var delspecs []*ast.ImportSpec + var delcomments []*ast.CommentGroup + + // Find the import nodes that import path, if any. + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT { + continue + } + for j := 0; j < len(gen.Specs); j++ { + spec := gen.Specs[j] + impspec := spec.(*ast.ImportSpec) + if importName(impspec) != name || importPath(impspec) != path { + continue + } + + // We found an import spec that imports path. + // Delete it. + delspecs = append(delspecs, impspec) + deleted = true + copy(gen.Specs[j:], gen.Specs[j+1:]) + gen.Specs = gen.Specs[:len(gen.Specs)-1] + + // If this was the last import spec in this decl, + // delete the decl, too. + if len(gen.Specs) == 0 { + copy(f.Decls[i:], f.Decls[i+1:]) + f.Decls = f.Decls[:len(f.Decls)-1] + i-- + break + } else if len(gen.Specs) == 1 { + if impspec.Doc != nil { + delcomments = append(delcomments, impspec.Doc) + } + if impspec.Comment != nil { + delcomments = append(delcomments, impspec.Comment) + } + for _, cg := range f.Comments { + // Found comment on the same line as the import spec. + if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line { + delcomments = append(delcomments, cg) + break + } + } + + spec := gen.Specs[0].(*ast.ImportSpec) + + // Move the documentation right after the import decl. + if spec.Doc != nil { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + } + for _, cg := range f.Comments { + if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + break + } + } + } + if j > 0 { + lastImpspec := gen.Specs[j-1].(*ast.ImportSpec) + lastLine := fset.PositionFor(lastImpspec.Path.ValuePos, false).Line + line := fset.PositionFor(impspec.Path.ValuePos, false).Line + + // We deleted an entry but now there may be + // a blank line-sized hole where the import was. + if line-lastLine > 1 || !gen.Rparen.IsValid() { + // There was a blank line immediately preceding the deleted import, + // so there's no need to close the hole. The right parenthesis is + // invalid after AddImport to an import statement without parenthesis. + // Do nothing. + } else if line != fset.File(gen.Rparen).LineCount() { + // There was no blank line. Close the hole. + fset.File(gen.Rparen).MergeLine(line) + } + } + j-- + } + } + + // Delete imports from f.Imports. + for i := 0; i < len(f.Imports); i++ { + imp := f.Imports[i] + for j, del := range delspecs { + if imp == del { + copy(f.Imports[i:], f.Imports[i+1:]) + f.Imports = f.Imports[:len(f.Imports)-1] + copy(delspecs[j:], delspecs[j+1:]) + delspecs = delspecs[:len(delspecs)-1] + i-- + break + } + } + } + + // Delete comments from f.Comments. + for i := 0; i < len(f.Comments); i++ { + cg := f.Comments[i] + for j, del := range delcomments { + if cg == del { + copy(f.Comments[i:], f.Comments[i+1:]) + f.Comments = f.Comments[:len(f.Comments)-1] + copy(delcomments[j:], delcomments[j+1:]) + delcomments = delcomments[:len(delcomments)-1] + i-- + break + } + } + } + + if len(delspecs) > 0 { + panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs)) + } + + return +} + +// RewriteImport rewrites any import of path oldPath to path newPath. +func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) { + for _, imp := range f.Imports { + if importPath(imp) == oldPath { + rewrote = true + // record old End, because the default is to compute + // it using the length of imp.Path.Value. + imp.EndPos = imp.End() + imp.Path.Value = strconv.Quote(newPath) + } + } + return +} + +// UsesImport reports whether a given import is used. +func UsesImport(f *ast.File, path string) (used bool) { + spec := importSpec(f, path) + if spec == nil { + return + } + + name := spec.Name.String() + switch name { + case "": + // If the package name is not explicitly specified, + // make an educated guess. This is not guaranteed to be correct. + lastSlash := strings.LastIndex(path, "/") + if lastSlash == -1 { + name = path + } else { + name = path[lastSlash+1:] + } + case "_", ".": + // Not sure if this import is used - err on the side of caution. + return true + } + + ast.Walk(visitFn(func(n ast.Node) { + sel, ok := n.(*ast.SelectorExpr) + if ok && isTopName(sel.X, name) { + used = true + } + }), f) + + return +} + +type visitFn func(node ast.Node) + +func (fn visitFn) Visit(node ast.Node) ast.Visitor { + fn(node) + return fn +} + +// imports reports whether f has an import with the specified name and path. +func imports(f *ast.File, name, path string) bool { + for _, s := range f.Imports { + if importName(s) == name && importPath(s) == path { + return true + } + } + return false +} + +// importSpec returns the import spec if f imports path, +// or nil otherwise. +func importSpec(f *ast.File, path string) *ast.ImportSpec { + for _, s := range f.Imports { + if importPath(s) == path { + return s + } + } + return nil +} + +// importName returns the name of s, +// or "" if the import is not named. +func importName(s *ast.ImportSpec) string { + if s.Name == nil { + return "" + } + return s.Name.Name +} + +// importPath returns the unquoted import path of s, +// or "" if the path is not properly quoted. +func importPath(s *ast.ImportSpec) string { + t, err := strconv.Unquote(s.Path.Value) + if err != nil { + return "" + } + return t +} + +// declImports reports whether gen contains an import of path. +func declImports(gen *ast.GenDecl, path string) bool { + if gen.Tok != token.IMPORT { + return false + } + for _, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + if importPath(impspec) == path { + return true + } + } + return false +} + +// matchLen returns the length of the longest path segment prefix shared by x and y. +func matchLen(x, y string) int { + n := 0 + for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ { + if x[i] == '/' { + n++ + } + } + return n +} + +// isTopName returns true if n is a top-level unresolved identifier with the given name. +func isTopName(n ast.Expr, name string) bool { + id, ok := n.(*ast.Ident) + return ok && id.Name == name && id.Obj == nil +} + +// Imports returns the file imports grouped by paragraph. +func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec { + var groups [][]*ast.ImportSpec + + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok || genDecl.Tok != token.IMPORT { + break + } + + group := []*ast.ImportSpec{} + + var lastLine int + for _, spec := range genDecl.Specs { + importSpec := spec.(*ast.ImportSpec) + pos := importSpec.Path.ValuePos + line := fset.Position(pos).Line + if lastLine > 0 && pos > 0 && line-lastLine > 1 { + groups = append(groups, group) + group = []*ast.ImportSpec{} + } + group = append(group, importSpec) + lastLine = line + } + groups = append(groups, group) + } + + return groups +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go new file mode 100644 index 000000000000..f430b21b9b9a --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -0,0 +1,488 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import ( + "fmt" + "go/ast" + "reflect" + "sort" + + "golang.org/x/tools/internal/typeparams" +) + +// An ApplyFunc is invoked by Apply for each node n, even if n is nil, +// before and/or after the node's children, using a Cursor describing +// the current node and providing operations on it. +// +// The return value of ApplyFunc controls the syntax tree traversal. +// See Apply for details. +type ApplyFunc func(*Cursor) bool + +// Apply traverses a syntax tree recursively, starting with root, +// and calling pre and post for each node as described below. +// Apply returns the syntax tree, possibly modified. +// +// If pre is not nil, it is called for each node before the node's +// children are traversed (pre-order). If pre returns false, no +// children are traversed, and post is not called for that node. +// +// If post is not nil, and a prior call of pre didn't return false, +// post is called for each node after its children are traversed +// (post-order). If post returns false, traversal is terminated and +// Apply returns immediately. +// +// Only fields that refer to AST nodes are considered children; +// i.e., token.Pos, Scopes, Objects, and fields of basic types +// (strings, etc.) are ignored. +// +// Children are traversed in the order in which they appear in the +// respective node's struct definition. A package's files are +// traversed in the filenames' alphabetical order. +func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) { + parent := &struct{ ast.Node }{root} + defer func() { + if r := recover(); r != nil && r != abort { + panic(r) + } + result = parent.Node + }() + a := &application{pre: pre, post: post} + a.apply(parent, "Node", nil, root) + return +} + +var abort = new(int) // singleton, to signal termination of Apply + +// A Cursor describes a node encountered during Apply. +// Information about the node and its parent is available +// from the Node, Parent, Name, and Index methods. +// +// If p is a variable of type and value of the current parent node +// c.Parent(), and f is the field identifier with name c.Name(), +// the following invariants hold: +// +// p.f == c.Node() if c.Index() < 0 +// p.f[c.Index()] == c.Node() if c.Index() >= 0 +// +// The methods Replace, Delete, InsertBefore, and InsertAfter +// can be used to change the AST without disrupting Apply. +type Cursor struct { + parent ast.Node + name string + iter *iterator // valid if non-nil + node ast.Node +} + +// Node returns the current Node. +func (c *Cursor) Node() ast.Node { return c.node } + +// Parent returns the parent of the current Node. +func (c *Cursor) Parent() ast.Node { return c.parent } + +// Name returns the name of the parent Node field that contains the current Node. +// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns +// the filename for the current Node. +func (c *Cursor) Name() string { return c.name } + +// Index reports the index >= 0 of the current Node in the slice of Nodes that +// contains it, or a value < 0 if the current Node is not part of a slice. +// The index of the current node changes if InsertBefore is called while +// processing the current node. +func (c *Cursor) Index() int { + if c.iter != nil { + return c.iter.index + } + return -1 +} + +// field returns the current node's parent field value. +func (c *Cursor) field() reflect.Value { + return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name) +} + +// Replace replaces the current Node with n. +// The replacement node is not walked by Apply. +func (c *Cursor) Replace(n ast.Node) { + if _, ok := c.node.(*ast.File); ok { + file, ok := n.(*ast.File) + if !ok { + panic("attempt to replace *ast.File with non-*ast.File") + } + c.parent.(*ast.Package).Files[c.name] = file + return + } + + v := c.field() + if i := c.Index(); i >= 0 { + v = v.Index(i) + } + v.Set(reflect.ValueOf(n)) +} + +// Delete deletes the current Node from its containing slice. +// If the current Node is not part of a slice, Delete panics. +// As a special case, if the current node is a package file, +// Delete removes it from the package's Files map. +func (c *Cursor) Delete() { + if _, ok := c.node.(*ast.File); ok { + delete(c.parent.(*ast.Package).Files, c.name) + return + } + + i := c.Index() + if i < 0 { + panic("Delete node not contained in slice") + } + v := c.field() + l := v.Len() + reflect.Copy(v.Slice(i, l), v.Slice(i+1, l)) + v.Index(l - 1).Set(reflect.Zero(v.Type().Elem())) + v.SetLen(l - 1) + c.iter.step-- +} + +// InsertAfter inserts n after the current Node in its containing slice. +// If the current Node is not part of a slice, InsertAfter panics. +// Apply does not walk n. +func (c *Cursor) InsertAfter(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertAfter node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l)) + v.Index(i + 1).Set(reflect.ValueOf(n)) + c.iter.step++ +} + +// InsertBefore inserts n before the current Node in its containing slice. +// If the current Node is not part of a slice, InsertBefore panics. +// Apply will not walk n. +func (c *Cursor) InsertBefore(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertBefore node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+1, l), v.Slice(i, l)) + v.Index(i).Set(reflect.ValueOf(n)) + c.iter.index++ +} + +// application carries all the shared data so we can pass it around cheaply. +type application struct { + pre, post ApplyFunc + cursor Cursor + iter iterator +} + +func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) { + // convert typed nil into untyped nil + if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() { + n = nil + } + + // avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead + saved := a.cursor + a.cursor.parent = parent + a.cursor.name = name + a.cursor.iter = iter + a.cursor.node = n + + if a.pre != nil && !a.pre(&a.cursor) { + a.cursor = saved + return + } + + // walk children + // (the order of the cases matches the order of the corresponding node types in go/ast) + switch n := n.(type) { + case nil: + // nothing to do + + // Comments and fields + case *ast.Comment: + // nothing to do + + case *ast.CommentGroup: + if n != nil { + a.applyList(n, "List") + } + + case *ast.Field: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.FieldList: + a.applyList(n, "List") + + // Expressions + case *ast.BadExpr, *ast.Ident, *ast.BasicLit: + // nothing to do + + case *ast.Ellipsis: + a.apply(n, "Elt", nil, n.Elt) + + case *ast.FuncLit: + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + case *ast.CompositeLit: + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Elts") + + case *ast.ParenExpr: + a.apply(n, "X", nil, n.X) + + case *ast.SelectorExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Sel", nil, n.Sel) + + case *ast.IndexExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Index", nil, n.Index) + + case *typeparams.IndexListExpr: + a.apply(n, "X", nil, n.X) + a.applyList(n, "Indices") + + case *ast.SliceExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Low", nil, n.Low) + a.apply(n, "High", nil, n.High) + a.apply(n, "Max", nil, n.Max) + + case *ast.TypeAssertExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Type", nil, n.Type) + + case *ast.CallExpr: + a.apply(n, "Fun", nil, n.Fun) + a.applyList(n, "Args") + + case *ast.StarExpr: + a.apply(n, "X", nil, n.X) + + case *ast.UnaryExpr: + a.apply(n, "X", nil, n.X) + + case *ast.BinaryExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Y", nil, n.Y) + + case *ast.KeyValueExpr: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + // Types + case *ast.ArrayType: + a.apply(n, "Len", nil, n.Len) + a.apply(n, "Elt", nil, n.Elt) + + case *ast.StructType: + a.apply(n, "Fields", nil, n.Fields) + + case *ast.FuncType: + if tparams := typeparams.ForFuncType(n); tparams != nil { + a.apply(n, "TypeParams", nil, tparams) + } + a.apply(n, "Params", nil, n.Params) + a.apply(n, "Results", nil, n.Results) + + case *ast.InterfaceType: + a.apply(n, "Methods", nil, n.Methods) + + case *ast.MapType: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + case *ast.ChanType: + a.apply(n, "Value", nil, n.Value) + + // Statements + case *ast.BadStmt: + // nothing to do + + case *ast.DeclStmt: + a.apply(n, "Decl", nil, n.Decl) + + case *ast.EmptyStmt: + // nothing to do + + case *ast.LabeledStmt: + a.apply(n, "Label", nil, n.Label) + a.apply(n, "Stmt", nil, n.Stmt) + + case *ast.ExprStmt: + a.apply(n, "X", nil, n.X) + + case *ast.SendStmt: + a.apply(n, "Chan", nil, n.Chan) + a.apply(n, "Value", nil, n.Value) + + case *ast.IncDecStmt: + a.apply(n, "X", nil, n.X) + + case *ast.AssignStmt: + a.applyList(n, "Lhs") + a.applyList(n, "Rhs") + + case *ast.GoStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.DeferStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.ReturnStmt: + a.applyList(n, "Results") + + case *ast.BranchStmt: + a.apply(n, "Label", nil, n.Label) + + case *ast.BlockStmt: + a.applyList(n, "List") + + case *ast.IfStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Body", nil, n.Body) + a.apply(n, "Else", nil, n.Else) + + case *ast.CaseClause: + a.applyList(n, "List") + a.applyList(n, "Body") + + case *ast.SwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Body", nil, n.Body) + + case *ast.TypeSwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Assign", nil, n.Assign) + a.apply(n, "Body", nil, n.Body) + + case *ast.CommClause: + a.apply(n, "Comm", nil, n.Comm) + a.applyList(n, "Body") + + case *ast.SelectStmt: + a.apply(n, "Body", nil, n.Body) + + case *ast.ForStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Post", nil, n.Post) + a.apply(n, "Body", nil, n.Body) + + case *ast.RangeStmt: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + a.apply(n, "X", nil, n.X) + a.apply(n, "Body", nil, n.Body) + + // Declarations + case *ast.ImportSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Path", nil, n.Path) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.ValueSpec: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Values") + a.apply(n, "Comment", nil, n.Comment) + + case *ast.TypeSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + if tparams := typeparams.ForTypeSpec(n); tparams != nil { + a.apply(n, "TypeParams", nil, tparams) + } + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.BadDecl: + // nothing to do + + case *ast.GenDecl: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Specs") + + case *ast.FuncDecl: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Recv", nil, n.Recv) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + // Files and packages + case *ast.File: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.applyList(n, "Decls") + // Don't walk n.Comments; they have either been walked already if + // they are Doc comments, or they can be easily walked explicitly. + + case *ast.Package: + // collect and sort names for reproducible behavior + var names []string + for name := range n.Files { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + a.apply(n, name, nil, n.Files[name]) + } + + default: + panic(fmt.Sprintf("Apply: unexpected node type %T", n)) + } + + if a.post != nil && !a.post(&a.cursor) { + panic(abort) + } + + a.cursor = saved +} + +// An iterator controls iteration over a slice of nodes. +type iterator struct { + index, step int +} + +func (a *application) applyList(parent ast.Node, name string) { + // avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead + saved := a.iter + a.iter.index = 0 + for { + // must reload parent.name each time, since cursor modifications might change it + v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name) + if a.iter.index >= v.Len() { + break + } + + // element x may be nil in a bad AST - be cautious + var x ast.Node + if e := v.Index(a.iter.index); e.IsValid() { + x = e.Interface().(ast.Node) + } + + a.iter.step = 1 + a.apply(parent, name, &a.iter, x) + a.iter.index += a.iter.step + } + a.iter = saved +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/util.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/util.go new file mode 100644 index 000000000000..919d5305ab42 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/astutil/util.go @@ -0,0 +1,18 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package astutil + +import "go/ast" + +// Unparen returns e with any enclosing parentheses stripped. +func Unparen(e ast.Expr) ast.Expr { + for { + p, ok := e.(*ast.ParenExpr) + if !ok { + return e + } + e = p.X + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/inspector.go new file mode 100644 index 000000000000..3fbfebf36937 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/inspector.go @@ -0,0 +1,218 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package inspector provides helper functions for traversal over the +// syntax trees of a package, including node filtering by type, and +// materialization of the traversal stack. +// +// During construction, the inspector does a complete traversal and +// builds a list of push/pop events and their node type. Subsequent +// method calls that request a traversal scan this list, rather than walk +// the AST, and perform type filtering using efficient bit sets. +// +// Experiments suggest the inspector's traversals are about 2.5x faster +// than ast.Inspect, but it may take around 5 traversals for this +// benefit to amortize the inspector's construction cost. +// If efficiency is the primary concern, do not use Inspector for +// one-off traversals. +package inspector + +// There are four orthogonal features in a traversal: +// 1 type filtering +// 2 pruning +// 3 postorder calls to f +// 4 stack +// Rather than offer all of them in the API, +// only a few combinations are exposed: +// - Preorder is the fastest and has fewest features, +// but is the most commonly needed traversal. +// - Nodes and WithStack both provide pruning and postorder calls, +// even though few clients need it, because supporting two versions +// is not justified. +// More combinations could be supported by expressing them as +// wrappers around a more generic traversal, but this was measured +// and found to degrade performance significantly (30%). + +import ( + "go/ast" +) + +// An Inspector provides methods for inspecting +// (traversing) the syntax trees of a package. +type Inspector struct { + events []event +} + +// New returns an Inspector for the specified syntax trees. +func New(files []*ast.File) *Inspector { + return &Inspector{traverse(files)} +} + +// An event represents a push or a pop +// of an ast.Node during a traversal. +type event struct { + node ast.Node + typ uint64 // typeOf(node) on push event, or union of typ strictly between push and pop events on pop events + index int // index of corresponding push or pop event +} + +// TODO: Experiment with storing only the second word of event.node (unsafe.Pointer). +// Type can be recovered from the sole bit in typ. + +// Preorder visits all the nodes of the files supplied to New in +// depth-first order. It calls f(n) for each node n before it visits +// n's children. +// +// The types argument, if non-empty, enables type-based filtering of +// events. The function f if is called only for nodes whose type +// matches an element of the types slice. +func (in *Inspector) Preorder(types []ast.Node, f func(ast.Node)) { + // Because it avoids postorder calls to f, and the pruning + // check, Preorder is almost twice as fast as Nodes. The two + // features seem to contribute similar slowdowns (~1.4x each). + + mask := maskOf(types) + for i := 0; i < len(in.events); { + ev := in.events[i] + if ev.index > i { + // push + if ev.typ&mask != 0 { + f(ev.node) + } + pop := ev.index + if in.events[pop].typ&mask == 0 { + // Subtrees do not contain types: skip them and pop. + i = pop + 1 + continue + } + } + i++ + } +} + +// Nodes visits the nodes of the files supplied to New in depth-first +// order. It calls f(n, true) for each node n before it visits n's +// children. If f returns true, Nodes invokes f recursively for each +// of the non-nil children of the node, followed by a call of +// f(n, false). +// +// The types argument, if non-empty, enables type-based filtering of +// events. The function f if is called only for nodes whose type +// matches an element of the types slice. +func (in *Inspector) Nodes(types []ast.Node, f func(n ast.Node, push bool) (proceed bool)) { + mask := maskOf(types) + for i := 0; i < len(in.events); { + ev := in.events[i] + if ev.index > i { + // push + pop := ev.index + if ev.typ&mask != 0 { + if !f(ev.node, true) { + i = pop + 1 // jump to corresponding pop + 1 + continue + } + } + if in.events[pop].typ&mask == 0 { + // Subtrees do not contain types: skip them. + i = pop + continue + } + } else { + // pop + push := ev.index + if in.events[push].typ&mask != 0 { + f(ev.node, false) + } + } + i++ + } +} + +// WithStack visits nodes in a similar manner to Nodes, but it +// supplies each call to f an additional argument, the current +// traversal stack. The stack's first element is the outermost node, +// an *ast.File; its last is the innermost, n. +func (in *Inspector) WithStack(types []ast.Node, f func(n ast.Node, push bool, stack []ast.Node) (proceed bool)) { + mask := maskOf(types) + var stack []ast.Node + for i := 0; i < len(in.events); { + ev := in.events[i] + if ev.index > i { + // push + pop := ev.index + stack = append(stack, ev.node) + if ev.typ&mask != 0 { + if !f(ev.node, true, stack) { + i = pop + 1 + stack = stack[:len(stack)-1] + continue + } + } + if in.events[pop].typ&mask == 0 { + // Subtrees does not contain types: skip them. + i = pop + continue + } + } else { + // pop + push := ev.index + if in.events[push].typ&mask != 0 { + f(ev.node, false, stack) + } + stack = stack[:len(stack)-1] + } + i++ + } +} + +// traverse builds the table of events representing a traversal. +func traverse(files []*ast.File) []event { + // Preallocate approximate number of events + // based on source file extent. + // This makes traverse faster by 4x (!). + var extent int + for _, f := range files { + extent += int(f.End() - f.Pos()) + } + // This estimate is based on the net/http package. + capacity := extent * 33 / 100 + if capacity > 1e6 { + capacity = 1e6 // impose some reasonable maximum + } + events := make([]event, 0, capacity) + + var stack []event + stack = append(stack, event{}) // include an extra event so file nodes have a parent + for _, f := range files { + ast.Inspect(f, func(n ast.Node) bool { + if n != nil { + // push + ev := event{ + node: n, + typ: 0, // temporarily used to accumulate type bits of subtree + index: len(events), // push event temporarily holds own index + } + stack = append(stack, ev) + events = append(events, ev) + } else { + // pop + top := len(stack) - 1 + ev := stack[top] + typ := typeOf(ev.node) + push := ev.index + parent := top - 1 + + events[push].typ = typ // set type of push + stack[parent].typ |= typ | ev.typ // parent's typ contains push and pop's typs. + events[push].index = len(events) // make push refer to pop + + stack = stack[:top] + events = append(events, ev) + } + return true + }) + } + + return events +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/typeof.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/typeof.go new file mode 100644 index 000000000000..703c81395448 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/ast/inspector/typeof.go @@ -0,0 +1,229 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package inspector + +// This file defines func typeOf(ast.Node) uint64. +// +// The initial map-based implementation was too slow; +// see https://go-review.googlesource.com/c/tools/+/135655/1/go/ast/inspector/inspector.go#196 + +import ( + "go/ast" + "math" + + "golang.org/x/tools/internal/typeparams" +) + +const ( + nArrayType = iota + nAssignStmt + nBadDecl + nBadExpr + nBadStmt + nBasicLit + nBinaryExpr + nBlockStmt + nBranchStmt + nCallExpr + nCaseClause + nChanType + nCommClause + nComment + nCommentGroup + nCompositeLit + nDeclStmt + nDeferStmt + nEllipsis + nEmptyStmt + nExprStmt + nField + nFieldList + nFile + nForStmt + nFuncDecl + nFuncLit + nFuncType + nGenDecl + nGoStmt + nIdent + nIfStmt + nImportSpec + nIncDecStmt + nIndexExpr + nIndexListExpr + nInterfaceType + nKeyValueExpr + nLabeledStmt + nMapType + nPackage + nParenExpr + nRangeStmt + nReturnStmt + nSelectStmt + nSelectorExpr + nSendStmt + nSliceExpr + nStarExpr + nStructType + nSwitchStmt + nTypeAssertExpr + nTypeSpec + nTypeSwitchStmt + nUnaryExpr + nValueSpec +) + +// typeOf returns a distinct single-bit value that represents the type of n. +// +// Various implementations were benchmarked with BenchmarkNewInspector: +// +// GOGC=off +// - type switch 4.9-5.5ms 2.1ms +// - binary search over a sorted list of types 5.5-5.9ms 2.5ms +// - linear scan, frequency-ordered list 5.9-6.1ms 2.7ms +// - linear scan, unordered list 6.4ms 2.7ms +// - hash table 6.5ms 3.1ms +// +// A perfect hash seemed like overkill. +// +// The compiler's switch statement is the clear winner +// as it produces a binary tree in code, +// with constant conditions and good branch prediction. +// (Sadly it is the most verbose in source code.) +// Binary search suffered from poor branch prediction. +func typeOf(n ast.Node) uint64 { + // Fast path: nearly half of all nodes are identifiers. + if _, ok := n.(*ast.Ident); ok { + return 1 << nIdent + } + + // These cases include all nodes encountered by ast.Inspect. + switch n.(type) { + case *ast.ArrayType: + return 1 << nArrayType + case *ast.AssignStmt: + return 1 << nAssignStmt + case *ast.BadDecl: + return 1 << nBadDecl + case *ast.BadExpr: + return 1 << nBadExpr + case *ast.BadStmt: + return 1 << nBadStmt + case *ast.BasicLit: + return 1 << nBasicLit + case *ast.BinaryExpr: + return 1 << nBinaryExpr + case *ast.BlockStmt: + return 1 << nBlockStmt + case *ast.BranchStmt: + return 1 << nBranchStmt + case *ast.CallExpr: + return 1 << nCallExpr + case *ast.CaseClause: + return 1 << nCaseClause + case *ast.ChanType: + return 1 << nChanType + case *ast.CommClause: + return 1 << nCommClause + case *ast.Comment: + return 1 << nComment + case *ast.CommentGroup: + return 1 << nCommentGroup + case *ast.CompositeLit: + return 1 << nCompositeLit + case *ast.DeclStmt: + return 1 << nDeclStmt + case *ast.DeferStmt: + return 1 << nDeferStmt + case *ast.Ellipsis: + return 1 << nEllipsis + case *ast.EmptyStmt: + return 1 << nEmptyStmt + case *ast.ExprStmt: + return 1 << nExprStmt + case *ast.Field: + return 1 << nField + case *ast.FieldList: + return 1 << nFieldList + case *ast.File: + return 1 << nFile + case *ast.ForStmt: + return 1 << nForStmt + case *ast.FuncDecl: + return 1 << nFuncDecl + case *ast.FuncLit: + return 1 << nFuncLit + case *ast.FuncType: + return 1 << nFuncType + case *ast.GenDecl: + return 1 << nGenDecl + case *ast.GoStmt: + return 1 << nGoStmt + case *ast.Ident: + return 1 << nIdent + case *ast.IfStmt: + return 1 << nIfStmt + case *ast.ImportSpec: + return 1 << nImportSpec + case *ast.IncDecStmt: + return 1 << nIncDecStmt + case *ast.IndexExpr: + return 1 << nIndexExpr + case *typeparams.IndexListExpr: + return 1 << nIndexListExpr + case *ast.InterfaceType: + return 1 << nInterfaceType + case *ast.KeyValueExpr: + return 1 << nKeyValueExpr + case *ast.LabeledStmt: + return 1 << nLabeledStmt + case *ast.MapType: + return 1 << nMapType + case *ast.Package: + return 1 << nPackage + case *ast.ParenExpr: + return 1 << nParenExpr + case *ast.RangeStmt: + return 1 << nRangeStmt + case *ast.ReturnStmt: + return 1 << nReturnStmt + case *ast.SelectStmt: + return 1 << nSelectStmt + case *ast.SelectorExpr: + return 1 << nSelectorExpr + case *ast.SendStmt: + return 1 << nSendStmt + case *ast.SliceExpr: + return 1 << nSliceExpr + case *ast.StarExpr: + return 1 << nStarExpr + case *ast.StructType: + return 1 << nStructType + case *ast.SwitchStmt: + return 1 << nSwitchStmt + case *ast.TypeAssertExpr: + return 1 << nTypeAssertExpr + case *ast.TypeSpec: + return 1 << nTypeSpec + case *ast.TypeSwitchStmt: + return 1 << nTypeSwitchStmt + case *ast.UnaryExpr: + return 1 << nUnaryExpr + case *ast.ValueSpec: + return 1 << nValueSpec + } + return 0 +} + +func maskOf(nodes []ast.Node) uint64 { + if nodes == nil { + return math.MaxUint64 // match all node types + } + var mask uint64 + for _, n := range nodes { + mask |= typeOf(n) + } + return mask +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/imports/forward.go b/cluster-autoscaler/vendor/golang.org/x/tools/imports/forward.go new file mode 100644 index 000000000000..d2547c743382 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/imports/forward.go @@ -0,0 +1,77 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package imports implements a Go pretty-printer (like package "go/format") +// that also adds or removes import statements as necessary. +package imports // import "golang.org/x/tools/imports" + +import ( + "io/ioutil" + "log" + + "golang.org/x/tools/internal/gocommand" + intimp "golang.org/x/tools/internal/imports" +) + +// Options specifies options for processing files. +type Options struct { + Fragment bool // Accept fragment of a source file (no package statement) + AllErrors bool // Report all errors (not just the first 10 on different lines) + + Comments bool // Print comments (true if nil *Options provided) + TabIndent bool // Use tabs for indent (true if nil *Options provided) + TabWidth int // Tab width (8 if nil *Options provided) + + FormatOnly bool // Disable the insertion and deletion of imports +} + +// Debug controls verbose logging. +var Debug = false + +// LocalPrefix is a comma-separated string of import path prefixes, which, if +// set, instructs Process to sort the import paths with the given prefixes +// into another group after 3rd-party packages. +var LocalPrefix string + +// Process formats and adjusts imports for the provided file. +// If opt is nil the defaults are used, and if src is nil the source +// is read from the filesystem. +// +// Note that filename's directory influences which imports can be chosen, +// so it is important that filename be accurate. +// To process data “as if” it were in filename, pass the data as a non-nil src. +func Process(filename string, src []byte, opt *Options) ([]byte, error) { + var err error + if src == nil { + src, err = ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + } + if opt == nil { + opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} + } + intopt := &intimp.Options{ + Env: &intimp.ProcessEnv{ + GocmdRunner: &gocommand.Runner{}, + }, + LocalPrefix: LocalPrefix, + AllErrors: opt.AllErrors, + Comments: opt.Comments, + FormatOnly: opt.FormatOnly, + Fragment: opt.Fragment, + TabIndent: opt.TabIndent, + TabWidth: opt.TabWidth, + } + if Debug { + intopt.Env.Logf = log.Printf + } + return intimp.Process(filename, src, intopt) +} + +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +func VendorlessPath(ipath string) string { + return intimp.VendorlessPath(ipath) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go new file mode 100644 index 000000000000..798fe599be4c --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go @@ -0,0 +1,196 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fastwalk provides a faster version of filepath.Walk for file system +// scanning tools. +package fastwalk + +import ( + "errors" + "os" + "path/filepath" + "runtime" + "sync" +) + +// ErrTraverseLink is used as a return value from WalkFuncs to indicate that the +// symlink named in the call may be traversed. +var ErrTraverseLink = errors.New("fastwalk: traverse symlink, assuming target is a directory") + +// ErrSkipFiles is a used as a return value from WalkFuncs to indicate that the +// callback should not be called for any other files in the current directory. +// Child directories will still be traversed. +var ErrSkipFiles = errors.New("fastwalk: skip remaining files in directory") + +// Walk is a faster implementation of filepath.Walk. +// +// filepath.Walk's design necessarily calls os.Lstat on each file, +// even if the caller needs less info. +// Many tools need only the type of each file. +// On some platforms, this information is provided directly by the readdir +// system call, avoiding the need to stat each file individually. +// fastwalk_unix.go contains a fork of the syscall routines. +// +// See golang.org/issue/16399 +// +// Walk walks the file tree rooted at root, calling walkFn for +// each file or directory in the tree, including root. +// +// If fastWalk returns filepath.SkipDir, the directory is skipped. +// +// Unlike filepath.Walk: +// - file stat calls must be done by the user. +// The only provided metadata is the file type, which does not include +// any permission bits. +// - multiple goroutines stat the filesystem concurrently. The provided +// walkFn must be safe for concurrent use. +// - fastWalk can follow symlinks if walkFn returns the TraverseLink +// sentinel error. It is the walkFn's responsibility to prevent +// fastWalk from going into symlink cycles. +func Walk(root string, walkFn func(path string, typ os.FileMode) error) error { + // TODO(bradfitz): make numWorkers configurable? We used a + // minimum of 4 to give the kernel more info about multiple + // things we want, in hopes its I/O scheduling can take + // advantage of that. Hopefully most are in cache. Maybe 4 is + // even too low of a minimum. Profile more. + numWorkers := 4 + if n := runtime.NumCPU(); n > numWorkers { + numWorkers = n + } + + // Make sure to wait for all workers to finish, otherwise + // walkFn could still be called after returning. This Wait call + // runs after close(e.donec) below. + var wg sync.WaitGroup + defer wg.Wait() + + w := &walker{ + fn: walkFn, + enqueuec: make(chan walkItem, numWorkers), // buffered for performance + workc: make(chan walkItem, numWorkers), // buffered for performance + donec: make(chan struct{}), + + // buffered for correctness & not leaking goroutines: + resc: make(chan error, numWorkers), + } + defer close(w.donec) + + for i := 0; i < numWorkers; i++ { + wg.Add(1) + go w.doWork(&wg) + } + todo := []walkItem{{dir: root}} + out := 0 + for { + workc := w.workc + var workItem walkItem + if len(todo) == 0 { + workc = nil + } else { + workItem = todo[len(todo)-1] + } + select { + case workc <- workItem: + todo = todo[:len(todo)-1] + out++ + case it := <-w.enqueuec: + todo = append(todo, it) + case err := <-w.resc: + out-- + if err != nil { + return err + } + if out == 0 && len(todo) == 0 { + // It's safe to quit here, as long as the buffered + // enqueue channel isn't also readable, which might + // happen if the worker sends both another unit of + // work and its result before the other select was + // scheduled and both w.resc and w.enqueuec were + // readable. + select { + case it := <-w.enqueuec: + todo = append(todo, it) + default: + return nil + } + } + } + } +} + +// doWork reads directories as instructed (via workc) and runs the +// user's callback function. +func (w *walker) doWork(wg *sync.WaitGroup) { + defer wg.Done() + for { + select { + case <-w.donec: + return + case it := <-w.workc: + select { + case <-w.donec: + return + case w.resc <- w.walk(it.dir, !it.callbackDone): + } + } + } +} + +type walker struct { + fn func(path string, typ os.FileMode) error + + donec chan struct{} // closed on fastWalk's return + workc chan walkItem // to workers + enqueuec chan walkItem // from workers + resc chan error // from workers +} + +type walkItem struct { + dir string + callbackDone bool // callback already called; don't do it again +} + +func (w *walker) enqueue(it walkItem) { + select { + case w.enqueuec <- it: + case <-w.donec: + } +} + +func (w *walker) onDirEnt(dirName, baseName string, typ os.FileMode) error { + joined := dirName + string(os.PathSeparator) + baseName + if typ == os.ModeDir { + w.enqueue(walkItem{dir: joined}) + return nil + } + + err := w.fn(joined, typ) + if typ == os.ModeSymlink { + if err == ErrTraverseLink { + // Set callbackDone so we don't call it twice for both the + // symlink-as-symlink and the symlink-as-directory later: + w.enqueue(walkItem{dir: joined, callbackDone: true}) + return nil + } + if err == filepath.SkipDir { + // Permit SkipDir on symlinks too. + return nil + } + } + return err +} + +func (w *walker) walk(root string, runUserCallback bool) error { + if runUserCallback { + err := w.fn(root, os.ModeDir) + if err == filepath.SkipDir { + return nil + } + if err != nil { + return err + } + } + + return readDir(root, w.onDirEnt) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_darwin.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_darwin.go new file mode 100644 index 000000000000..0ca55e0d56f2 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_darwin.go @@ -0,0 +1,119 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && cgo +// +build darwin,cgo + +package fastwalk + +/* +#include + +// fastwalk_readdir_r wraps readdir_r so that we don't have to pass a dirent** +// result pointer which triggers CGO's "Go pointer to Go pointer" check unless +// we allocat the result dirent* with malloc. +// +// fastwalk_readdir_r returns 0 on success, -1 upon reaching the end of the +// directory, or a positive error number to indicate failure. +static int fastwalk_readdir_r(DIR *fd, struct dirent *entry) { + struct dirent *result; + int ret = readdir_r(fd, entry, &result); + if (ret == 0 && result == NULL) { + ret = -1; // EOF + } + return ret; +} +*/ +import "C" + +import ( + "os" + "syscall" + "unsafe" +) + +func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { + fd, err := openDir(dirName) + if err != nil { + return &os.PathError{Op: "opendir", Path: dirName, Err: err} + } + defer C.closedir(fd) + + skipFiles := false + var dirent syscall.Dirent + for { + ret := int(C.fastwalk_readdir_r(fd, (*C.struct_dirent)(unsafe.Pointer(&dirent)))) + if ret != 0 { + if ret == -1 { + break // EOF + } + if ret == int(syscall.EINTR) { + continue + } + return &os.PathError{Op: "readdir", Path: dirName, Err: syscall.Errno(ret)} + } + if dirent.Ino == 0 { + continue + } + typ := dtToType(dirent.Type) + if skipFiles && typ.IsRegular() { + continue + } + name := (*[len(syscall.Dirent{}.Name)]byte)(unsafe.Pointer(&dirent.Name))[:] + name = name[:dirent.Namlen] + for i, c := range name { + if c == 0 { + name = name[:i] + break + } + } + // Check for useless names before allocating a string. + if string(name) == "." || string(name) == ".." { + continue + } + if err := fn(dirName, string(name), typ); err != nil { + if err != ErrSkipFiles { + return err + } + skipFiles = true + } + } + + return nil +} + +func dtToType(typ uint8) os.FileMode { + switch typ { + case syscall.DT_BLK: + return os.ModeDevice + case syscall.DT_CHR: + return os.ModeDevice | os.ModeCharDevice + case syscall.DT_DIR: + return os.ModeDir + case syscall.DT_FIFO: + return os.ModeNamedPipe + case syscall.DT_LNK: + return os.ModeSymlink + case syscall.DT_REG: + return 0 + case syscall.DT_SOCK: + return os.ModeSocket + } + return ^os.FileMode(0) +} + +// openDir wraps opendir(3) and handles any EINTR errors. The returned *DIR +// needs to be closed with closedir(3). +func openDir(path string) (*C.DIR, error) { + name, err := syscall.BytePtrFromString(path) + if err != nil { + return nil, err + } + for { + fd, err := C.opendir((*C.char)(unsafe.Pointer(name))) + if err != syscall.EINTR { + return fd, err + } + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go new file mode 100644 index 000000000000..d58595dbd3f6 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go @@ -0,0 +1,14 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build freebsd || openbsd || netbsd +// +build freebsd openbsd netbsd + +package fastwalk + +import "syscall" + +func direntInode(dirent *syscall.Dirent) uint64 { + return uint64(dirent.Fileno) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go new file mode 100644 index 000000000000..d3922890b0b1 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (linux || (darwin && !cgo)) && !appengine +// +build linux darwin,!cgo +// +build !appengine + +package fastwalk + +import "syscall" + +func direntInode(dirent *syscall.Dirent) uint64 { + return dirent.Ino +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go new file mode 100644 index 000000000000..38a4db6af3ae --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go @@ -0,0 +1,14 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (darwin && !cgo) || freebsd || openbsd || netbsd +// +build darwin,!cgo freebsd openbsd netbsd + +package fastwalk + +import "syscall" + +func direntNamlen(dirent *syscall.Dirent) uint64 { + return uint64(dirent.Namlen) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go new file mode 100644 index 000000000000..c82e57df85ef --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && !appengine +// +build linux,!appengine + +package fastwalk + +import ( + "bytes" + "syscall" + "unsafe" +) + +func direntNamlen(dirent *syscall.Dirent) uint64 { + const fixedHdr = uint16(unsafe.Offsetof(syscall.Dirent{}.Name)) + nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0])) + const nameBufLen = uint16(len(nameBuf)) + limit := dirent.Reclen - fixedHdr + if limit > nameBufLen { + limit = nameBufLen + } + nameLen := bytes.IndexByte(nameBuf[:limit], 0) + if nameLen < 0 { + panic("failed to find terminating 0 byte in dirent") + } + return uint64(nameLen) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go new file mode 100644 index 000000000000..085d311600be --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go @@ -0,0 +1,38 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build appengine || (!linux && !darwin && !freebsd && !openbsd && !netbsd) +// +build appengine !linux,!darwin,!freebsd,!openbsd,!netbsd + +package fastwalk + +import ( + "io/ioutil" + "os" +) + +// readDir calls fn for each directory entry in dirName. +// It does not descend into directories or follow symlinks. +// If fn returns a non-nil error, readDir returns with that error +// immediately. +func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { + fis, err := ioutil.ReadDir(dirName) + if err != nil { + return err + } + skipFiles := false + for _, fi := range fis { + if fi.Mode().IsRegular() && skipFiles { + continue + } + if err := fn(dirName, fi.Name(), fi.Mode()&os.ModeType); err != nil { + if err == ErrSkipFiles { + skipFiles = true + continue + } + return err + } + } + return nil +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go new file mode 100644 index 000000000000..f12f1a734cc9 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go @@ -0,0 +1,153 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (linux || freebsd || openbsd || netbsd || (darwin && !cgo)) && !appengine +// +build linux freebsd openbsd netbsd darwin,!cgo +// +build !appengine + +package fastwalk + +import ( + "fmt" + "os" + "syscall" + "unsafe" +) + +const blockSize = 8 << 10 + +// unknownFileMode is a sentinel (and bogus) os.FileMode +// value used to represent a syscall.DT_UNKNOWN Dirent.Type. +const unknownFileMode os.FileMode = os.ModeNamedPipe | os.ModeSocket | os.ModeDevice + +func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { + fd, err := open(dirName, 0, 0) + if err != nil { + return &os.PathError{Op: "open", Path: dirName, Err: err} + } + defer syscall.Close(fd) + + // The buffer must be at least a block long. + buf := make([]byte, blockSize) // stack-allocated; doesn't escape + bufp := 0 // starting read position in buf + nbuf := 0 // end valid data in buf + skipFiles := false + for { + if bufp >= nbuf { + bufp = 0 + nbuf, err = readDirent(fd, buf) + if err != nil { + return os.NewSyscallError("readdirent", err) + } + if nbuf <= 0 { + return nil + } + } + consumed, name, typ := parseDirEnt(buf[bufp:nbuf]) + bufp += consumed + if name == "" || name == "." || name == ".." { + continue + } + // Fallback for filesystems (like old XFS) that don't + // support Dirent.Type and have DT_UNKNOWN (0) there + // instead. + if typ == unknownFileMode { + fi, err := os.Lstat(dirName + "/" + name) + if err != nil { + // It got deleted in the meantime. + if os.IsNotExist(err) { + continue + } + return err + } + typ = fi.Mode() & os.ModeType + } + if skipFiles && typ.IsRegular() { + continue + } + if err := fn(dirName, name, typ); err != nil { + if err == ErrSkipFiles { + skipFiles = true + continue + } + return err + } + } +} + +func parseDirEnt(buf []byte) (consumed int, name string, typ os.FileMode) { + // golang.org/issue/37269 + dirent := &syscall.Dirent{} + copy((*[unsafe.Sizeof(syscall.Dirent{})]byte)(unsafe.Pointer(dirent))[:], buf) + if v := unsafe.Offsetof(dirent.Reclen) + unsafe.Sizeof(dirent.Reclen); uintptr(len(buf)) < v { + panic(fmt.Sprintf("buf size of %d smaller than dirent header size %d", len(buf), v)) + } + if len(buf) < int(dirent.Reclen) { + panic(fmt.Sprintf("buf size %d < record length %d", len(buf), dirent.Reclen)) + } + consumed = int(dirent.Reclen) + if direntInode(dirent) == 0 { // File absent in directory. + return + } + switch dirent.Type { + case syscall.DT_REG: + typ = 0 + case syscall.DT_DIR: + typ = os.ModeDir + case syscall.DT_LNK: + typ = os.ModeSymlink + case syscall.DT_BLK: + typ = os.ModeDevice + case syscall.DT_FIFO: + typ = os.ModeNamedPipe + case syscall.DT_SOCK: + typ = os.ModeSocket + case syscall.DT_UNKNOWN: + typ = unknownFileMode + default: + // Skip weird things. + // It's probably a DT_WHT (http://lwn.net/Articles/325369/) + // or something. Revisit if/when this package is moved outside + // of goimports. goimports only cares about regular files, + // symlinks, and directories. + return + } + + nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0])) + nameLen := direntNamlen(dirent) + + // Special cases for common things: + if nameLen == 1 && nameBuf[0] == '.' { + name = "." + } else if nameLen == 2 && nameBuf[0] == '.' && nameBuf[1] == '.' { + name = ".." + } else { + name = string(nameBuf[:nameLen]) + } + return +} + +// According to https://golang.org/doc/go1.14#runtime +// A consequence of the implementation of preemption is that on Unix systems, including Linux and macOS +// systems, programs built with Go 1.14 will receive more signals than programs built with earlier releases. +// +// This causes syscall.Open and syscall.ReadDirent sometimes fail with EINTR errors. +// We need to retry in this case. +func open(path string, mode int, perm uint32) (fd int, err error) { + for { + fd, err := syscall.Open(path, mode, perm) + if err != syscall.EINTR { + return fd, err + } + } +} + +func readDirent(fd int, buf []byte) (n int, err error) { + for { + nbuf, err := syscall.ReadDirent(fd, buf) + if err != syscall.EINTR { + return nbuf, err + } + } +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gopathwalk/walk.go new file mode 100644 index 000000000000..168405322683 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -0,0 +1,254 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gopathwalk is like filepath.Walk but specialized for finding Go +// packages, particularly in $GOPATH and $GOROOT. +package gopathwalk + +import ( + "bufio" + "bytes" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + "time" + + "golang.org/x/tools/internal/fastwalk" +) + +// Options controls the behavior of a Walk call. +type Options struct { + // If Logf is non-nil, debug logging is enabled through this function. + Logf func(format string, args ...interface{}) + // Search module caches. Also disables legacy goimports ignore rules. + ModulesEnabled bool +} + +// RootType indicates the type of a Root. +type RootType int + +const ( + RootUnknown RootType = iota + RootGOROOT + RootGOPATH + RootCurrentModule + RootModuleCache + RootOther +) + +// A Root is a starting point for a Walk. +type Root struct { + Path string + Type RootType +} + +// Walk walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// For each package found, add will be called (concurrently) with the absolute +// paths of the containing source directory and the package directory. +// add will be called concurrently. +func Walk(roots []Root, add func(root Root, dir string), opts Options) { + WalkSkip(roots, add, func(Root, string) bool { return false }, opts) +} + +// WalkSkip walks Go source directories ($GOROOT, $GOPATH, etc) to find packages. +// For each package found, add will be called (concurrently) with the absolute +// paths of the containing source directory and the package directory. +// For each directory that will be scanned, skip will be called (concurrently) +// with the absolute paths of the containing source directory and the directory. +// If skip returns false on a directory it will be processed. +// add will be called concurrently. +// skip will be called concurrently. +func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root, dir string) bool, opts Options) { + for _, root := range roots { + walkDir(root, add, skip, opts) + } +} + +// walkDir creates a walker and starts fastwalk with this walker. +func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) bool, opts Options) { + if _, err := os.Stat(root.Path); os.IsNotExist(err) { + if opts.Logf != nil { + opts.Logf("skipping nonexistent directory: %v", root.Path) + } + return + } + start := time.Now() + if opts.Logf != nil { + opts.Logf("gopathwalk: scanning %s", root.Path) + } + w := &walker{ + root: root, + add: add, + skip: skip, + opts: opts, + } + w.init() + if err := fastwalk.Walk(root.Path, w.walk); err != nil { + log.Printf("gopathwalk: scanning directory %v: %v", root.Path, err) + } + + if opts.Logf != nil { + opts.Logf("gopathwalk: scanned %s in %v", root.Path, time.Since(start)) + } +} + +// walker is the callback for fastwalk.Walk. +type walker struct { + root Root // The source directory to scan. + add func(Root, string) // The callback that will be invoked for every possible Go package dir. + skip func(Root, string) bool // The callback that will be invoked for every dir. dir is skipped if it returns true. + opts Options // Options passed to Walk by the user. + + ignoredDirs []os.FileInfo // The ignored directories, loaded from .goimportsignore files. +} + +// init initializes the walker based on its Options +func (w *walker) init() { + var ignoredPaths []string + if w.root.Type == RootModuleCache { + ignoredPaths = []string{"cache"} + } + if !w.opts.ModulesEnabled && w.root.Type == RootGOPATH { + ignoredPaths = w.getIgnoredDirs(w.root.Path) + ignoredPaths = append(ignoredPaths, "v", "mod") + } + + for _, p := range ignoredPaths { + full := filepath.Join(w.root.Path, p) + if fi, err := os.Stat(full); err == nil { + w.ignoredDirs = append(w.ignoredDirs, fi) + if w.opts.Logf != nil { + w.opts.Logf("Directory added to ignore list: %s", full) + } + } else if w.opts.Logf != nil { + w.opts.Logf("Error statting ignored directory: %v", err) + } + } +} + +// getIgnoredDirs reads an optional config file at /.goimportsignore +// of relative directories to ignore when scanning for go files. +// The provided path is one of the $GOPATH entries with "src" appended. +func (w *walker) getIgnoredDirs(path string) []string { + file := filepath.Join(path, ".goimportsignore") + slurp, err := ioutil.ReadFile(file) + if w.opts.Logf != nil { + if err != nil { + w.opts.Logf("%v", err) + } else { + w.opts.Logf("Read %s", file) + } + } + if err != nil { + return nil + } + + var ignoredDirs []string + bs := bufio.NewScanner(bytes.NewReader(slurp)) + for bs.Scan() { + line := strings.TrimSpace(bs.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + ignoredDirs = append(ignoredDirs, line) + } + return ignoredDirs +} + +// shouldSkipDir reports whether the file should be skipped or not. +func (w *walker) shouldSkipDir(fi os.FileInfo, dir string) bool { + for _, ignoredDir := range w.ignoredDirs { + if os.SameFile(fi, ignoredDir) { + return true + } + } + if w.skip != nil { + // Check with the user specified callback. + return w.skip(w.root, dir) + } + return false +} + +// walk walks through the given path. +func (w *walker) walk(path string, typ os.FileMode) error { + if typ.IsRegular() { + dir := filepath.Dir(path) + if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) { + // Doesn't make sense to have regular files + // directly in your $GOPATH/src or $GOROOT/src. + return fastwalk.ErrSkipFiles + } + if !strings.HasSuffix(path, ".go") { + return nil + } + + w.add(w.root, dir) + return fastwalk.ErrSkipFiles + } + if typ == os.ModeDir { + base := filepath.Base(path) + if base == "" || base[0] == '.' || base[0] == '_' || + base == "testdata" || + (w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") || + (!w.opts.ModulesEnabled && base == "node_modules") { + return filepath.SkipDir + } + fi, err := os.Lstat(path) + if err == nil && w.shouldSkipDir(fi, path) { + return filepath.SkipDir + } + return nil + } + if typ == os.ModeSymlink { + base := filepath.Base(path) + if strings.HasPrefix(base, ".#") { + // Emacs noise. + return nil + } + if w.shouldTraverse(path) { + return fastwalk.ErrTraverseLink + } + } + return nil +} + +// shouldTraverse reports whether the symlink fi, found in dir, +// should be followed. It makes sure symlinks were never visited +// before to avoid symlink loops. +func (w *walker) shouldTraverse(path string) bool { + ts, err := os.Stat(path) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return false + } + if !ts.IsDir() { + return false + } + if w.shouldSkipDir(ts, filepath.Dir(path)) { + return false + } + // Check for symlink loops by statting each directory component + // and seeing if any are the same file as ts. + for { + parent := filepath.Dir(path) + if parent == path { + // Made it to the root without seeing a cycle. + // Use this symlink. + return true + } + parentInfo, err := os.Stat(parent) + if err != nil { + return false + } + if os.SameFile(ts, parentInfo) { + // Cycle. Don't traverse. + return false + } + path = parent + } + +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go new file mode 100644 index 000000000000..642a5ac2d757 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go @@ -0,0 +1,1738 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "io/ioutil" + "os" + "path" + "path/filepath" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "unicode" + "unicode/utf8" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/gopathwalk" +) + +// importToGroup is a list of functions which map from an import path to +// a group number. +var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){ + func(localPrefix, importPath string) (num int, ok bool) { + if localPrefix == "" { + return + } + for _, p := range strings.Split(localPrefix, ",") { + if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath { + return 3, true + } + } + return + }, + func(_, importPath string) (num int, ok bool) { + if strings.HasPrefix(importPath, "appengine") { + return 2, true + } + return + }, + func(_, importPath string) (num int, ok bool) { + firstComponent := strings.Split(importPath, "/")[0] + if strings.Contains(firstComponent, ".") { + return 1, true + } + return + }, +} + +func importGroup(localPrefix, importPath string) int { + for _, fn := range importToGroup { + if n, ok := fn(localPrefix, importPath); ok { + return n + } + } + return 0 +} + +type ImportFixType int + +const ( + AddImport ImportFixType = iota + DeleteImport + SetImportName +) + +type ImportFix struct { + // StmtInfo represents the import statement this fix will add, remove, or change. + StmtInfo ImportInfo + // IdentName is the identifier that this fix will add or remove. + IdentName string + // FixType is the type of fix this is (AddImport, DeleteImport, SetImportName). + FixType ImportFixType + Relevance float64 // see pkg +} + +// An ImportInfo represents a single import statement. +type ImportInfo struct { + ImportPath string // import path, e.g. "crypto/rand". + Name string // import name, e.g. "crand", or "" if none. +} + +// A packageInfo represents what's known about a package. +type packageInfo struct { + name string // real package name, if known. + exports map[string]bool // known exports. +} + +// parseOtherFiles parses all the Go files in srcDir except filename, including +// test files if filename looks like a test. +func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { + // This could use go/packages but it doesn't buy much, and it fails + // with https://golang.org/issue/26296 in LoadFiles mode in some cases. + considerTests := strings.HasSuffix(filename, "_test.go") + + fileBase := filepath.Base(filename) + packageFileInfos, err := ioutil.ReadDir(srcDir) + if err != nil { + return nil + } + + var files []*ast.File + for _, fi := range packageFileInfos { + if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") { + continue + } + if !considerTests && strings.HasSuffix(fi.Name(), "_test.go") { + continue + } + + f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, 0) + if err != nil { + continue + } + + files = append(files, f) + } + + return files +} + +// addGlobals puts the names of package vars into the provided map. +func addGlobals(f *ast.File, globals map[string]bool) { + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + + for _, spec := range genDecl.Specs { + valueSpec, ok := spec.(*ast.ValueSpec) + if !ok { + continue + } + globals[valueSpec.Names[0].Name] = true + } + } +} + +// collectReferences builds a map of selector expressions, from +// left hand side (X) to a set of right hand sides (Sel). +func collectReferences(f *ast.File) references { + refs := references{} + + var visitor visitFn + visitor = func(node ast.Node) ast.Visitor { + if node == nil { + return visitor + } + switch v := node.(type) { + case *ast.SelectorExpr: + xident, ok := v.X.(*ast.Ident) + if !ok { + break + } + if xident.Obj != nil { + // If the parser can resolve it, it's not a package ref. + break + } + if !ast.IsExported(v.Sel.Name) { + // Whatever this is, it's not exported from a package. + break + } + pkgName := xident.Name + r := refs[pkgName] + if r == nil { + r = make(map[string]bool) + refs[pkgName] = r + } + r[v.Sel.Name] = true + } + return visitor + } + ast.Walk(visitor, f) + return refs +} + +// collectImports returns all the imports in f. +// Unnamed imports (., _) and "C" are ignored. +func collectImports(f *ast.File) []*ImportInfo { + var imports []*ImportInfo + for _, imp := range f.Imports { + var name string + if imp.Name != nil { + name = imp.Name.Name + } + if imp.Path.Value == `"C"` || name == "_" || name == "." { + continue + } + path := strings.Trim(imp.Path.Value, `"`) + imports = append(imports, &ImportInfo{ + Name: name, + ImportPath: path, + }) + } + return imports +} + +// findMissingImport searches pass's candidates for an import that provides +// pkg, containing all of syms. +func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo { + for _, candidate := range p.candidates { + pkgInfo, ok := p.knownPackages[candidate.ImportPath] + if !ok { + continue + } + if p.importIdentifier(candidate) != pkg { + continue + } + + allFound := true + for right := range syms { + if !pkgInfo.exports[right] { + allFound = false + break + } + } + + if allFound { + return candidate + } + } + return nil +} + +// references is set of references found in a Go file. The first map key is the +// left hand side of a selector expression, the second key is the right hand +// side, and the value should always be true. +type references map[string]map[string]bool + +// A pass contains all the inputs and state necessary to fix a file's imports. +// It can be modified in some ways during use; see comments below. +type pass struct { + // Inputs. These must be set before a call to load, and not modified after. + fset *token.FileSet // fset used to parse f and its siblings. + f *ast.File // the file being fixed. + srcDir string // the directory containing f. + env *ProcessEnv // the environment to use for go commands, etc. + loadRealPackageNames bool // if true, load package names from disk rather than guessing them. + otherFiles []*ast.File // sibling files. + + // Intermediate state, generated by load. + existingImports map[string]*ImportInfo + allRefs references + missingRefs references + + // Inputs to fix. These can be augmented between successive fix calls. + lastTry bool // indicates that this is the last call and fix should clean up as best it can. + candidates []*ImportInfo // candidate imports in priority order. + knownPackages map[string]*packageInfo // information about all known packages. +} + +// loadPackageNames saves the package names for everything referenced by imports. +func (p *pass) loadPackageNames(imports []*ImportInfo) error { + if p.env.Logf != nil { + p.env.Logf("loading package names for %v packages", len(imports)) + defer func() { + p.env.Logf("done loading package names for %v packages", len(imports)) + }() + } + var unknown []string + for _, imp := range imports { + if _, ok := p.knownPackages[imp.ImportPath]; ok { + continue + } + unknown = append(unknown, imp.ImportPath) + } + + resolver, err := p.env.GetResolver() + if err != nil { + return err + } + + names, err := resolver.loadPackageNames(unknown, p.srcDir) + if err != nil { + return err + } + + for path, name := range names { + p.knownPackages[path] = &packageInfo{ + name: name, + exports: map[string]bool{}, + } + } + return nil +} + +// importIdentifier returns the identifier that imp will introduce. It will +// guess if the package name has not been loaded, e.g. because the source +// is not available. +func (p *pass) importIdentifier(imp *ImportInfo) string { + if imp.Name != "" { + return imp.Name + } + known := p.knownPackages[imp.ImportPath] + if known != nil && known.name != "" { + return known.name + } + return ImportPathToAssumedName(imp.ImportPath) +} + +// load reads in everything necessary to run a pass, and reports whether the +// file already has all the imports it needs. It fills in p.missingRefs with the +// file's missing symbols, if any, or removes unused imports if not. +func (p *pass) load() ([]*ImportFix, bool) { + p.knownPackages = map[string]*packageInfo{} + p.missingRefs = references{} + p.existingImports = map[string]*ImportInfo{} + + // Load basic information about the file in question. + p.allRefs = collectReferences(p.f) + + // Load stuff from other files in the same package: + // global variables so we know they don't need resolving, and imports + // that we might want to mimic. + globals := map[string]bool{} + for _, otherFile := range p.otherFiles { + // Don't load globals from files that are in the same directory + // but a different package. Using them to suggest imports is OK. + if p.f.Name.Name == otherFile.Name.Name { + addGlobals(otherFile, globals) + } + p.candidates = append(p.candidates, collectImports(otherFile)...) + } + + // Resolve all the import paths we've seen to package names, and store + // f's imports by the identifier they introduce. + imports := collectImports(p.f) + if p.loadRealPackageNames { + err := p.loadPackageNames(append(imports, p.candidates...)) + if err != nil { + if p.env.Logf != nil { + p.env.Logf("loading package names: %v", err) + } + return nil, false + } + } + for _, imp := range imports { + p.existingImports[p.importIdentifier(imp)] = imp + } + + // Find missing references. + for left, rights := range p.allRefs { + if globals[left] { + continue + } + _, ok := p.existingImports[left] + if !ok { + p.missingRefs[left] = rights + continue + } + } + if len(p.missingRefs) != 0 { + return nil, false + } + + return p.fix() +} + +// fix attempts to satisfy missing imports using p.candidates. If it finds +// everything, or if p.lastTry is true, it updates fixes to add the imports it found, +// delete anything unused, and update import names, and returns true. +func (p *pass) fix() ([]*ImportFix, bool) { + // Find missing imports. + var selected []*ImportInfo + for left, rights := range p.missingRefs { + if imp := p.findMissingImport(left, rights); imp != nil { + selected = append(selected, imp) + } + } + + if !p.lastTry && len(selected) != len(p.missingRefs) { + return nil, false + } + + // Found everything, or giving up. Add the new imports and remove any unused. + var fixes []*ImportFix + for _, imp := range p.existingImports { + // We deliberately ignore globals here, because we can't be sure + // they're in the same package. People do things like put multiple + // main packages in the same directory, and we don't want to + // remove imports if they happen to have the same name as a var in + // a different package. + if _, ok := p.allRefs[p.importIdentifier(imp)]; !ok { + fixes = append(fixes, &ImportFix{ + StmtInfo: *imp, + IdentName: p.importIdentifier(imp), + FixType: DeleteImport, + }) + continue + } + + // An existing import may need to update its import name to be correct. + if name := p.importSpecName(imp); name != imp.Name { + fixes = append(fixes, &ImportFix{ + StmtInfo: ImportInfo{ + Name: name, + ImportPath: imp.ImportPath, + }, + IdentName: p.importIdentifier(imp), + FixType: SetImportName, + }) + } + } + + for _, imp := range selected { + fixes = append(fixes, &ImportFix{ + StmtInfo: ImportInfo{ + Name: p.importSpecName(imp), + ImportPath: imp.ImportPath, + }, + IdentName: p.importIdentifier(imp), + FixType: AddImport, + }) + } + + return fixes, true +} + +// importSpecName gets the import name of imp in the import spec. +// +// When the import identifier matches the assumed import name, the import name does +// not appear in the import spec. +func (p *pass) importSpecName(imp *ImportInfo) string { + // If we did not load the real package names, or the name is already set, + // we just return the existing name. + if !p.loadRealPackageNames || imp.Name != "" { + return imp.Name + } + + ident := p.importIdentifier(imp) + if ident == ImportPathToAssumedName(imp.ImportPath) { + return "" // ident not needed since the assumed and real names are the same. + } + return ident +} + +// apply will perform the fixes on f in order. +func apply(fset *token.FileSet, f *ast.File, fixes []*ImportFix) { + for _, fix := range fixes { + switch fix.FixType { + case DeleteImport: + astutil.DeleteNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath) + case AddImport: + astutil.AddNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath) + case SetImportName: + // Find the matching import path and change the name. + for _, spec := range f.Imports { + path := strings.Trim(spec.Path.Value, `"`) + if path == fix.StmtInfo.ImportPath { + spec.Name = &ast.Ident{ + Name: fix.StmtInfo.Name, + NamePos: spec.Pos(), + } + } + } + } + } +} + +// assumeSiblingImportsValid assumes that siblings' use of packages is valid, +// adding the exports they use. +func (p *pass) assumeSiblingImportsValid() { + for _, f := range p.otherFiles { + refs := collectReferences(f) + imports := collectImports(f) + importsByName := map[string]*ImportInfo{} + for _, imp := range imports { + importsByName[p.importIdentifier(imp)] = imp + } + for left, rights := range refs { + if imp, ok := importsByName[left]; ok { + if m, ok := stdlib[imp.ImportPath]; ok { + // We have the stdlib in memory; no need to guess. + rights = copyExports(m) + } + p.addCandidate(imp, &packageInfo{ + // no name; we already know it. + exports: rights, + }) + } + } + } +} + +// addCandidate adds a candidate import to p, and merges in the information +// in pkg. +func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) { + p.candidates = append(p.candidates, imp) + if existing, ok := p.knownPackages[imp.ImportPath]; ok { + if existing.name == "" { + existing.name = pkg.name + } + for export := range pkg.exports { + existing.exports[export] = true + } + } else { + p.knownPackages[imp.ImportPath] = pkg + } +} + +// fixImports adds and removes imports from f so that all its references are +// satisfied and there are no unused imports. +// +// This is declared as a variable rather than a function so goimports can +// easily be extended by adding a file with an init function. +var fixImports = fixImportsDefault + +func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { + fixes, err := getFixes(fset, f, filename, env) + if err != nil { + return err + } + apply(fset, f, fixes) + return err +} + +// getFixes gets the import fixes that need to be made to f in order to fix the imports. +// It does not modify the ast. +func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { + abs, err := filepath.Abs(filename) + if err != nil { + return nil, err + } + srcDir := filepath.Dir(abs) + if env.Logf != nil { + env.Logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) + } + + // First pass: looking only at f, and using the naive algorithm to + // derive package names from import paths, see if the file is already + // complete. We can't add any imports yet, because we don't know + // if missing references are actually package vars. + p := &pass{fset: fset, f: f, srcDir: srcDir, env: env} + if fixes, done := p.load(); done { + return fixes, nil + } + + otherFiles := parseOtherFiles(fset, srcDir, filename) + + // Second pass: add information from other files in the same package, + // like their package vars and imports. + p.otherFiles = otherFiles + if fixes, done := p.load(); done { + return fixes, nil + } + + // Now we can try adding imports from the stdlib. + p.assumeSiblingImportsValid() + addStdlibCandidates(p, p.missingRefs) + if fixes, done := p.fix(); done { + return fixes, nil + } + + // Third pass: get real package names where we had previously used + // the naive algorithm. + p = &pass{fset: fset, f: f, srcDir: srcDir, env: env} + p.loadRealPackageNames = true + p.otherFiles = otherFiles + if fixes, done := p.load(); done { + return fixes, nil + } + + if err := addStdlibCandidates(p, p.missingRefs); err != nil { + return nil, err + } + p.assumeSiblingImportsValid() + if fixes, done := p.fix(); done { + return fixes, nil + } + + // Go look for candidates in $GOPATH, etc. We don't necessarily load + // the real exports of sibling imports, so keep assuming their contents. + if err := addExternalCandidates(p, p.missingRefs, filename); err != nil { + return nil, err + } + + p.lastTry = true + fixes, _ := p.fix() + return fixes, nil +} + +// MaxRelevance is the highest relevance, used for the standard library. +// Chosen arbitrarily to match pre-existing gopls code. +const MaxRelevance = 7.0 + +// getCandidatePkgs works with the passed callback to find all acceptable packages. +// It deduplicates by import path, and uses a cached stdlib rather than reading +// from disk. +func getCandidatePkgs(ctx context.Context, wrappedCallback *scanCallback, filename, filePkg string, env *ProcessEnv) error { + notSelf := func(p *pkg) bool { + return p.packageName != filePkg || p.dir != filepath.Dir(filename) + } + goenv, err := env.goEnv() + if err != nil { + return err + } + + var mu sync.Mutex // to guard asynchronous access to dupCheck + dupCheck := map[string]struct{}{} + + // Start off with the standard library. + for importPath, exports := range stdlib { + p := &pkg{ + dir: filepath.Join(goenv["GOROOT"], "src", importPath), + importPathShort: importPath, + packageName: path.Base(importPath), + relevance: MaxRelevance, + } + dupCheck[importPath] = struct{}{} + if notSelf(p) && wrappedCallback.dirFound(p) && wrappedCallback.packageNameLoaded(p) { + wrappedCallback.exportsLoaded(p, exports) + } + } + + scanFilter := &scanCallback{ + rootFound: func(root gopathwalk.Root) bool { + // Exclude goroot results -- getting them is relatively expensive, not cached, + // and generally redundant with the in-memory version. + return root.Type != gopathwalk.RootGOROOT && wrappedCallback.rootFound(root) + }, + dirFound: wrappedCallback.dirFound, + packageNameLoaded: func(pkg *pkg) bool { + mu.Lock() + defer mu.Unlock() + if _, ok := dupCheck[pkg.importPathShort]; ok { + return false + } + dupCheck[pkg.importPathShort] = struct{}{} + return notSelf(pkg) && wrappedCallback.packageNameLoaded(pkg) + }, + exportsLoaded: func(pkg *pkg, exports []string) { + // If we're an x_test, load the package under test's test variant. + if strings.HasSuffix(filePkg, "_test") && pkg.dir == filepath.Dir(filename) { + var err error + _, exports, err = loadExportsFromFiles(ctx, env, pkg.dir, true) + if err != nil { + return + } + } + wrappedCallback.exportsLoaded(pkg, exports) + }, + } + resolver, err := env.GetResolver() + if err != nil { + return err + } + return resolver.scan(ctx, scanFilter) +} + +func ScoreImportPaths(ctx context.Context, env *ProcessEnv, paths []string) (map[string]float64, error) { + result := make(map[string]float64) + resolver, err := env.GetResolver() + if err != nil { + return nil, err + } + for _, path := range paths { + result[path] = resolver.scoreImportPath(ctx, path) + } + return result, nil +} + +func PrimeCache(ctx context.Context, env *ProcessEnv) error { + // Fully scan the disk for directories, but don't actually read any Go files. + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + return false + }, + packageNameLoaded: func(pkg *pkg) bool { + return false + }, + } + return getCandidatePkgs(ctx, callback, "", "", env) +} + +func candidateImportName(pkg *pkg) string { + if ImportPathToAssumedName(pkg.importPathShort) != pkg.packageName { + return pkg.packageName + } + return "" +} + +// GetAllCandidates calls wrapped for each package whose name starts with +// searchPrefix, and can be imported from filename with the package name filePkg. +// +// Beware that the wrapped function may be called multiple times concurrently. +// TODO(adonovan): encapsulate the concurrency. +func GetAllCandidates(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + if !canUse(filename, pkg.dir) { + return false + } + // Try the assumed package name first, then a simpler path match + // in case of packages named vN, which are not uncommon. + return strings.HasPrefix(ImportPathToAssumedName(pkg.importPathShort), searchPrefix) || + strings.HasPrefix(path.Base(pkg.importPathShort), searchPrefix) + }, + packageNameLoaded: func(pkg *pkg) bool { + if !strings.HasPrefix(pkg.packageName, searchPrefix) { + return false + } + wrapped(ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }) + return false + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +// GetImportPaths calls wrapped for each package whose import path starts with +// searchPrefix, and can be imported from filename with the package name filePkg. +func GetImportPaths(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + if !canUse(filename, pkg.dir) { + return false + } + return strings.HasPrefix(pkg.importPathShort, searchPrefix) + }, + packageNameLoaded: func(pkg *pkg) bool { + wrapped(ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }) + return false + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +// A PackageExport is a package and its exports. +type PackageExport struct { + Fix *ImportFix + Exports []string +} + +// GetPackageExports returns all known packages with name pkg and their exports. +func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchPkg, filename, filePkg string, env *ProcessEnv) error { + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true + }, + dirFound: func(pkg *pkg) bool { + return pkgIsCandidate(filename, references{searchPkg: nil}, pkg) + }, + packageNameLoaded: func(pkg *pkg) bool { + return pkg.packageName == searchPkg + }, + exportsLoaded: func(pkg *pkg, exports []string) { + sort.Strings(exports) + wrapped(PackageExport{ + Fix: &ImportFix{ + StmtInfo: ImportInfo{ + ImportPath: pkg.importPathShort, + Name: candidateImportName(pkg), + }, + IdentName: pkg.packageName, + FixType: AddImport, + Relevance: pkg.relevance, + }, + Exports: exports, + }) + }, + } + return getCandidatePkgs(ctx, callback, filename, filePkg, env) +} + +var requiredGoEnvVars = []string{"GO111MODULE", "GOFLAGS", "GOINSECURE", "GOMOD", "GOMODCACHE", "GONOPROXY", "GONOSUMDB", "GOPATH", "GOPROXY", "GOROOT", "GOSUMDB", "GOWORK"} + +// ProcessEnv contains environment variables and settings that affect the use of +// the go command, the go/build package, etc. +type ProcessEnv struct { + GocmdRunner *gocommand.Runner + + BuildFlags []string + ModFlag string + ModFile string + + // SkipPathInScan returns true if the path should be skipped from scans of + // the RootCurrentModule root type. The function argument is a clean, + // absolute path. + SkipPathInScan func(string) bool + + // Env overrides the OS environment, and can be used to specify + // GOPROXY, GO111MODULE, etc. PATH cannot be set here, because + // exec.Command will not honor it. + // Specifying all of RequiredGoEnvVars avoids a call to `go env`. + Env map[string]string + + WorkingDir string + + // If Logf is non-nil, debug logging is enabled through this function. + Logf func(format string, args ...interface{}) + + initialized bool + + resolver Resolver +} + +func (e *ProcessEnv) goEnv() (map[string]string, error) { + if err := e.init(); err != nil { + return nil, err + } + return e.Env, nil +} + +func (e *ProcessEnv) matchFile(dir, name string) (bool, error) { + bctx, err := e.buildContext() + if err != nil { + return false, err + } + return bctx.MatchFile(dir, name) +} + +// CopyConfig copies the env's configuration into a new env. +func (e *ProcessEnv) CopyConfig() *ProcessEnv { + copy := &ProcessEnv{ + GocmdRunner: e.GocmdRunner, + initialized: e.initialized, + BuildFlags: e.BuildFlags, + Logf: e.Logf, + WorkingDir: e.WorkingDir, + resolver: nil, + Env: map[string]string{}, + } + for k, v := range e.Env { + copy.Env[k] = v + } + return copy +} + +func (e *ProcessEnv) init() error { + if e.initialized { + return nil + } + + foundAllRequired := true + for _, k := range requiredGoEnvVars { + if _, ok := e.Env[k]; !ok { + foundAllRequired = false + break + } + } + if foundAllRequired { + e.initialized = true + return nil + } + + if e.Env == nil { + e.Env = map[string]string{} + } + + goEnv := map[string]string{} + stdout, err := e.invokeGo(context.TODO(), "env", append([]string{"-json"}, requiredGoEnvVars...)...) + if err != nil { + return err + } + if err := json.Unmarshal(stdout.Bytes(), &goEnv); err != nil { + return err + } + for k, v := range goEnv { + e.Env[k] = v + } + e.initialized = true + return nil +} + +func (e *ProcessEnv) env() []string { + var env []string // the gocommand package will prepend os.Environ. + for k, v := range e.Env { + env = append(env, k+"="+v) + } + return env +} + +func (e *ProcessEnv) GetResolver() (Resolver, error) { + if e.resolver != nil { + return e.resolver, nil + } + if err := e.init(); err != nil { + return nil, err + } + if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 { + e.resolver = newGopathResolver(e) + return e.resolver, nil + } + e.resolver = newModuleResolver(e) + return e.resolver, nil +} + +func (e *ProcessEnv) buildContext() (*build.Context, error) { + ctx := build.Default + goenv, err := e.goEnv() + if err != nil { + return nil, err + } + ctx.GOROOT = goenv["GOROOT"] + ctx.GOPATH = goenv["GOPATH"] + + // As of Go 1.14, build.Context has a Dir field + // (see golang.org/issue/34860). + // Populate it only if present. + rc := reflect.ValueOf(&ctx).Elem() + dir := rc.FieldByName("Dir") + if dir.IsValid() && dir.Kind() == reflect.String { + dir.SetString(e.WorkingDir) + } + + // Since Go 1.11, go/build.Context.Import may invoke 'go list' depending on + // the value in GO111MODULE in the process's environment. We always want to + // run in GOPATH mode when calling Import, so we need to prevent this from + // happening. In Go 1.16, GO111MODULE defaults to "on", so this problem comes + // up more frequently. + // + // HACK: setting any of the Context I/O hooks prevents Import from invoking + // 'go list', regardless of GO111MODULE. This is undocumented, but it's + // unlikely to change before GOPATH support is removed. + ctx.ReadDir = ioutil.ReadDir + + return &ctx, nil +} + +func (e *ProcessEnv) invokeGo(ctx context.Context, verb string, args ...string) (*bytes.Buffer, error) { + inv := gocommand.Invocation{ + Verb: verb, + Args: args, + BuildFlags: e.BuildFlags, + Env: e.env(), + Logf: e.Logf, + WorkingDir: e.WorkingDir, + } + return e.GocmdRunner.Run(ctx, inv) +} + +func addStdlibCandidates(pass *pass, refs references) error { + goenv, err := pass.env.goEnv() + if err != nil { + return err + } + add := func(pkg string) { + // Prevent self-imports. + if path.Base(pkg) == pass.f.Name.Name && filepath.Join(goenv["GOROOT"], "src", pkg) == pass.srcDir { + return + } + exports := copyExports(stdlib[pkg]) + pass.addCandidate( + &ImportInfo{ImportPath: pkg}, + &packageInfo{name: path.Base(pkg), exports: exports}) + } + for left := range refs { + if left == "rand" { + // Make sure we try crypto/rand before math/rand. + add("crypto/rand") + add("math/rand") + continue + } + for importPath := range stdlib { + if path.Base(importPath) == left { + add(importPath) + } + } + } + return nil +} + +// A Resolver does the build-system-specific parts of goimports. +type Resolver interface { + // loadPackageNames loads the package names in importPaths. + loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) + // scan works with callback to search for packages. See scanCallback for details. + scan(ctx context.Context, callback *scanCallback) error + // loadExports returns the set of exported symbols in the package at dir. + // loadExports may be called concurrently. + loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) + // scoreImportPath returns the relevance for an import path. + scoreImportPath(ctx context.Context, path string) float64 + + ClearForNewScan() +} + +// A scanCallback controls a call to scan and receives its results. +// In general, minor errors will be silently discarded; a user should not +// expect to receive a full series of calls for everything. +type scanCallback struct { + // rootFound is called before scanning a new root dir. If it returns true, + // the root will be scanned. Returning false will not necessarily prevent + // directories from that root making it to dirFound. + rootFound func(gopathwalk.Root) bool + // dirFound is called when a directory is found that is possibly a Go package. + // pkg will be populated with everything except packageName. + // If it returns true, the package's name will be loaded. + dirFound func(pkg *pkg) bool + // packageNameLoaded is called when a package is found and its name is loaded. + // If it returns true, the package's exports will be loaded. + packageNameLoaded func(pkg *pkg) bool + // exportsLoaded is called when a package's exports have been loaded. + exportsLoaded func(pkg *pkg, exports []string) +} + +func addExternalCandidates(pass *pass, refs references, filename string) error { + var mu sync.Mutex + found := make(map[string][]pkgDistance) + callback := &scanCallback{ + rootFound: func(gopathwalk.Root) bool { + return true // We want everything. + }, + dirFound: func(pkg *pkg) bool { + return pkgIsCandidate(filename, refs, pkg) + }, + packageNameLoaded: func(pkg *pkg) bool { + if _, want := refs[pkg.packageName]; !want { + return false + } + if pkg.dir == pass.srcDir && pass.f.Name.Name == pkg.packageName { + // The candidate is in the same directory and has the + // same package name. Don't try to import ourselves. + return false + } + if !canUse(filename, pkg.dir) { + return false + } + mu.Lock() + defer mu.Unlock() + found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(pass.srcDir, pkg.dir)}) + return false // We'll do our own loading after we sort. + }, + } + resolver, err := pass.env.GetResolver() + if err != nil { + return err + } + if err = resolver.scan(context.Background(), callback); err != nil { + return err + } + + // Search for imports matching potential package references. + type result struct { + imp *ImportInfo + pkg *packageInfo + } + results := make(chan result, len(refs)) + + ctx, cancel := context.WithCancel(context.TODO()) + var wg sync.WaitGroup + defer func() { + cancel() + wg.Wait() + }() + var ( + firstErr error + firstErrOnce sync.Once + ) + for pkgName, symbols := range refs { + wg.Add(1) + go func(pkgName string, symbols map[string]bool) { + defer wg.Done() + + found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols, filename) + + if err != nil { + firstErrOnce.Do(func() { + firstErr = err + cancel() + }) + return + } + + if found == nil { + return // No matching package. + } + + imp := &ImportInfo{ + ImportPath: found.importPathShort, + } + + pkg := &packageInfo{ + name: pkgName, + exports: symbols, + } + results <- result{imp, pkg} + }(pkgName, symbols) + } + go func() { + wg.Wait() + close(results) + }() + + for result := range results { + pass.addCandidate(result.imp, result.pkg) + } + return firstErr +} + +// notIdentifier reports whether ch is an invalid identifier character. +func notIdentifier(ch rune) bool { + return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || + '0' <= ch && ch <= '9' || + ch == '_' || + ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch))) +} + +// ImportPathToAssumedName returns the assumed package name of an import path. +// It does this using only string parsing of the import path. +// It picks the last element of the path that does not look like a major +// version, and then picks the valid identifier off the start of that element. +// It is used to determine if a local rename should be added to an import for +// clarity. +// This function could be moved to a standard package and exported if we want +// for use in other tools. +func ImportPathToAssumedName(importPath string) string { + base := path.Base(importPath) + if strings.HasPrefix(base, "v") { + if _, err := strconv.Atoi(base[1:]); err == nil { + dir := path.Dir(importPath) + if dir != "." { + base = path.Base(dir) + } + } + } + base = strings.TrimPrefix(base, "go-") + if i := strings.IndexFunc(base, notIdentifier); i >= 0 { + base = base[:i] + } + return base +} + +// gopathResolver implements resolver for GOPATH workspaces. +type gopathResolver struct { + env *ProcessEnv + walked bool + cache *dirInfoCache + scanSema chan struct{} // scanSema prevents concurrent scans. +} + +func newGopathResolver(env *ProcessEnv) *gopathResolver { + r := &gopathResolver{ + env: env, + cache: &dirInfoCache{ + dirs: map[string]*directoryPackageInfo{}, + listeners: map[*int]cacheListener{}, + }, + scanSema: make(chan struct{}, 1), + } + r.scanSema <- struct{}{} + return r +} + +func (r *gopathResolver) ClearForNewScan() { + <-r.scanSema + r.cache = &dirInfoCache{ + dirs: map[string]*directoryPackageInfo{}, + listeners: map[*int]cacheListener{}, + } + r.walked = false + r.scanSema <- struct{}{} +} + +func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + names := map[string]string{} + bctx, err := r.env.buildContext() + if err != nil { + return nil, err + } + for _, path := range importPaths { + names[path] = importPathToName(bctx, path, srcDir) + } + return names, nil +} + +// importPathToName finds out the actual package name, as declared in its .go files. +func importPathToName(bctx *build.Context, importPath, srcDir string) string { + // Fast path for standard library without going to disk. + if _, ok := stdlib[importPath]; ok { + return path.Base(importPath) // stdlib packages always match their paths. + } + + buildPkg, err := bctx.Import(importPath, srcDir, build.FindOnly) + if err != nil { + return "" + } + pkgName, err := packageDirToName(buildPkg.Dir) + if err != nil { + return "" + } + return pkgName +} + +// packageDirToName is a faster version of build.Import if +// the only thing desired is the package name. Given a directory, +// packageDirToName then only parses one file in the package, +// trusting that the files in the directory are consistent. +func packageDirToName(dir string) (packageName string, err error) { + d, err := os.Open(dir) + if err != nil { + return "", err + } + names, err := d.Readdirnames(-1) + d.Close() + if err != nil { + return "", err + } + sort.Strings(names) // to have predictable behavior + var lastErr error + var nfile int + for _, name := range names { + if !strings.HasSuffix(name, ".go") { + continue + } + if strings.HasSuffix(name, "_test.go") { + continue + } + nfile++ + fullFile := filepath.Join(dir, name) + + fset := token.NewFileSet() + f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly) + if err != nil { + lastErr = err + continue + } + pkgName := f.Name.Name + if pkgName == "documentation" { + // Special case from go/build.ImportDir, not + // handled by ctx.MatchFile. + continue + } + if pkgName == "main" { + // Also skip package main, assuming it's a +build ignore generator or example. + // Since you can't import a package main anyway, there's no harm here. + continue + } + return pkgName, nil + } + if lastErr != nil { + return "", lastErr + } + return "", fmt.Errorf("no importable package found in %d Go files", nfile) +} + +type pkg struct { + dir string // absolute file path to pkg directory ("/usr/lib/go/src/net/http") + importPathShort string // vendorless import path ("net/http", "a/b") + packageName string // package name loaded from source if requested + relevance float64 // a weakly-defined score of how relevant a package is. 0 is most relevant. +} + +type pkgDistance struct { + pkg *pkg + distance int // relative distance to target +} + +// byDistanceOrImportPathShortLength sorts by relative distance breaking ties +// on the short import path length and then the import string itself. +type byDistanceOrImportPathShortLength []pkgDistance + +func (s byDistanceOrImportPathShortLength) Len() int { return len(s) } +func (s byDistanceOrImportPathShortLength) Less(i, j int) bool { + di, dj := s[i].distance, s[j].distance + if di == -1 { + return false + } + if dj == -1 { + return true + } + if di != dj { + return di < dj + } + + vi, vj := s[i].pkg.importPathShort, s[j].pkg.importPathShort + if len(vi) != len(vj) { + return len(vi) < len(vj) + } + return vi < vj +} +func (s byDistanceOrImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func distance(basepath, targetpath string) int { + p, err := filepath.Rel(basepath, targetpath) + if err != nil { + return -1 + } + if p == "." { + return 0 + } + return strings.Count(p, string(filepath.Separator)) + 1 +} + +func (r *gopathResolver) scan(ctx context.Context, callback *scanCallback) error { + add := func(root gopathwalk.Root, dir string) { + // We assume cached directories have not changed. We can skip them and their + // children. + if _, ok := r.cache.Load(dir); ok { + return + } + + importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):]) + info := directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: VendorlessPath(importpath), + } + r.cache.Store(dir, info) + } + processDir := func(info directoryPackageInfo) { + // Skip this directory if we were not able to get the package information successfully. + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return + } + + p := &pkg{ + importPathShort: info.nonCanonicalImportPath, + dir: info.dir, + relevance: MaxRelevance - 1, + } + if info.rootType == gopathwalk.RootGOROOT { + p.relevance = MaxRelevance + } + + if !callback.dirFound(p) { + return + } + var err error + p.packageName, err = r.cache.CachePackageName(info) + if err != nil { + return + } + + if !callback.packageNameLoaded(p) { + return + } + if _, exports, err := r.loadExports(ctx, p, false); err == nil { + callback.exportsLoaded(p, exports) + } + } + stop := r.cache.ScanAndListen(ctx, processDir) + defer stop() + + goenv, err := r.env.goEnv() + if err != nil { + return err + } + var roots []gopathwalk.Root + roots = append(roots, gopathwalk.Root{Path: filepath.Join(goenv["GOROOT"], "src"), Type: gopathwalk.RootGOROOT}) + for _, p := range filepath.SplitList(goenv["GOPATH"]) { + roots = append(roots, gopathwalk.Root{Path: filepath.Join(p, "src"), Type: gopathwalk.RootGOPATH}) + } + // The callback is not necessarily safe to use in the goroutine below. Process roots eagerly. + roots = filterRoots(roots, callback.rootFound) + // We can't cancel walks, because we need them to finish to have a usable + // cache. Instead, run them in a separate goroutine and detach. + scanDone := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + return + case <-r.scanSema: + } + defer func() { r.scanSema <- struct{}{} }() + gopathwalk.Walk(roots, add, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: false}) + close(scanDone) + }() + select { + case <-ctx.Done(): + case <-scanDone: + } + return nil +} + +func (r *gopathResolver) scoreImportPath(ctx context.Context, path string) float64 { + if _, ok := stdlib[path]; ok { + return MaxRelevance + } + return MaxRelevance - 1 +} + +func filterRoots(roots []gopathwalk.Root, include func(gopathwalk.Root) bool) []gopathwalk.Root { + var result []gopathwalk.Root + for _, root := range roots { + if !include(root) { + continue + } + result = append(result, root) + } + return result +} + +func (r *gopathResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) { + if info, ok := r.cache.Load(pkg.dir); ok && !includeTest { + return r.cache.CacheExports(ctx, r.env, info) + } + return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest) +} + +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". +func VendorlessPath(ipath string) string { + // Devendorize for use in import statement. + if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { + return ipath[i+len("/vendor/"):] + } + if strings.HasPrefix(ipath, "vendor/") { + return ipath[len("vendor/"):] + } + return ipath +} + +func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, includeTest bool) (string, []string, error) { + // Look for non-test, buildable .go files which could provide exports. + all, err := ioutil.ReadDir(dir) + if err != nil { + return "", nil, err + } + var files []os.FileInfo + for _, fi := range all { + name := fi.Name() + if !strings.HasSuffix(name, ".go") || (!includeTest && strings.HasSuffix(name, "_test.go")) { + continue + } + match, err := env.matchFile(dir, fi.Name()) + if err != nil || !match { + continue + } + files = append(files, fi) + } + + if len(files) == 0 { + return "", nil, fmt.Errorf("dir %v contains no buildable, non-test .go files", dir) + } + + var pkgName string + var exports []string + fset := token.NewFileSet() + for _, fi := range files { + select { + case <-ctx.Done(): + return "", nil, ctx.Err() + default: + } + + fullFile := filepath.Join(dir, fi.Name()) + f, err := parser.ParseFile(fset, fullFile, nil, 0) + if err != nil { + if env.Logf != nil { + env.Logf("error parsing %v: %v", fullFile, err) + } + continue + } + if f.Name.Name == "documentation" { + // Special case from go/build.ImportDir, not + // handled by MatchFile above. + continue + } + if includeTest && strings.HasSuffix(f.Name.Name, "_test") { + // x_test package. We want internal test files only. + continue + } + pkgName = f.Name.Name + for name := range f.Scope.Objects { + if ast.IsExported(name) { + exports = append(exports, name) + } + } + } + + if env.Logf != nil { + sortedExports := append([]string(nil), exports...) + sort.Strings(sortedExports) + env.Logf("loaded exports in dir %v (package %v): %v", dir, pkgName, strings.Join(sortedExports, ", ")) + } + return pkgName, exports, nil +} + +// findImport searches for a package with the given symbols. +// If no package is found, findImport returns ("", false, nil) +func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool, filename string) (*pkg, error) { + // Sort the candidates by their import package length, + // assuming that shorter package names are better than long + // ones. Note that this sorts by the de-vendored name, so + // there's no "penalty" for vendoring. + sort.Sort(byDistanceOrImportPathShortLength(candidates)) + if pass.env.Logf != nil { + for i, c := range candidates { + pass.env.Logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) + } + } + resolver, err := pass.env.GetResolver() + if err != nil { + return nil, err + } + + // Collect exports for packages with matching names. + rescv := make([]chan *pkg, len(candidates)) + for i := range candidates { + rescv[i] = make(chan *pkg, 1) + } + const maxConcurrentPackageImport = 4 + loadExportsSem := make(chan struct{}, maxConcurrentPackageImport) + + ctx, cancel := context.WithCancel(ctx) + var wg sync.WaitGroup + defer func() { + cancel() + wg.Wait() + }() + + wg.Add(1) + go func() { + defer wg.Done() + for i, c := range candidates { + select { + case loadExportsSem <- struct{}{}: + case <-ctx.Done(): + return + } + + wg.Add(1) + go func(c pkgDistance, resc chan<- *pkg) { + defer func() { + <-loadExportsSem + wg.Done() + }() + + if pass.env.Logf != nil { + pass.env.Logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName) + } + // If we're an x_test, load the package under test's test variant. + includeTest := strings.HasSuffix(pass.f.Name.Name, "_test") && c.pkg.dir == pass.srcDir + _, exports, err := resolver.loadExports(ctx, c.pkg, includeTest) + if err != nil { + if pass.env.Logf != nil { + pass.env.Logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) + } + resc <- nil + return + } + + exportsMap := make(map[string]bool, len(exports)) + for _, sym := range exports { + exportsMap[sym] = true + } + + // If it doesn't have the right + // symbols, send nil to mean no match. + for symbol := range symbols { + if !exportsMap[symbol] { + resc <- nil + return + } + } + resc <- c.pkg + }(c, rescv[i]) + } + }() + + for _, resc := range rescv { + pkg := <-resc + if pkg == nil { + continue + } + return pkg, nil + } + return nil, nil +} + +// pkgIsCandidate reports whether pkg is a candidate for satisfying the +// finding which package pkgIdent in the file named by filename is trying +// to refer to. +// +// This check is purely lexical and is meant to be as fast as possible +// because it's run over all $GOPATH directories to filter out poor +// candidates in order to limit the CPU and I/O later parsing the +// exports in candidate packages. +// +// filename is the file being formatted. +// pkgIdent is the package being searched for, like "client" (if +// searching for "client.New") +func pkgIsCandidate(filename string, refs references, pkg *pkg) bool { + // Check "internal" and "vendor" visibility: + if !canUse(filename, pkg.dir) { + return false + } + + // Speed optimization to minimize disk I/O: + // the last two components on disk must contain the + // package name somewhere. + // + // This permits mismatch naming like directory + // "go-foo" being package "foo", or "pkg.v3" being "pkg", + // or directory "google.golang.org/api/cloudbilling/v1" + // being package "cloudbilling", but doesn't + // permit a directory "foo" to be package + // "bar", which is strongly discouraged + // anyway. There's no reason goimports needs + // to be slow just to accommodate that. + for pkgIdent := range refs { + lastTwo := lastTwoComponents(pkg.importPathShort) + if strings.Contains(lastTwo, pkgIdent) { + return true + } + if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) { + lastTwo = lowerASCIIAndRemoveHyphen(lastTwo) + if strings.Contains(lastTwo, pkgIdent) { + return true + } + } + } + return false +} + +func hasHyphenOrUpperASCII(s string) bool { + for i := 0; i < len(s); i++ { + b := s[i] + if b == '-' || ('A' <= b && b <= 'Z') { + return true + } + } + return false +} + +func lowerASCIIAndRemoveHyphen(s string) (ret string) { + buf := make([]byte, 0, len(s)) + for i := 0; i < len(s); i++ { + b := s[i] + switch { + case b == '-': + continue + case 'A' <= b && b <= 'Z': + buf = append(buf, b+('a'-'A')) + default: + buf = append(buf, b) + } + } + return string(buf) +} + +// canUse reports whether the package in dir is usable from filename, +// respecting the Go "internal" and "vendor" visibility rules. +func canUse(filename, dir string) bool { + // Fast path check, before any allocations. If it doesn't contain vendor + // or internal, it's not tricky: + // Note that this can false-negative on directories like "notinternal", + // but we check it correctly below. This is just a fast path. + if !strings.Contains(dir, "vendor") && !strings.Contains(dir, "internal") { + return true + } + + dirSlash := filepath.ToSlash(dir) + if !strings.Contains(dirSlash, "/vendor/") && !strings.Contains(dirSlash, "/internal/") && !strings.HasSuffix(dirSlash, "/internal") { + return true + } + // Vendor or internal directory only visible from children of parent. + // That means the path from the current directory to the target directory + // can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal + // or bar/vendor or bar/internal. + // After stripping all the leading ../, the only okay place to see vendor or internal + // is at the very beginning of the path. + absfile, err := filepath.Abs(filename) + if err != nil { + return false + } + absdir, err := filepath.Abs(dir) + if err != nil { + return false + } + rel, err := filepath.Rel(absfile, absdir) + if err != nil { + return false + } + relSlash := filepath.ToSlash(rel) + if i := strings.LastIndex(relSlash, "../"); i >= 0 { + relSlash = relSlash[i+len("../"):] + } + return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal") +} + +// lastTwoComponents returns at most the last two path components +// of v, using either / or \ as the path separator. +func lastTwoComponents(v string) string { + nslash := 0 + for i := len(v) - 1; i >= 0; i-- { + if v[i] == '/' || v[i] == '\\' { + nslash++ + if nslash == 2 { + return v[i:] + } + } + } + return v +} + +type visitFn func(node ast.Node) ast.Visitor + +func (fn visitFn) Visit(node ast.Node) ast.Visitor { + return fn(node) +} + +func copyExports(pkg []string) map[string]bool { + m := make(map[string]bool, len(pkg)) + for _, v := range pkg { + m[v] = true + } + return m +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go new file mode 100644 index 000000000000..95a88383a792 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go @@ -0,0 +1,351 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run mkstdlib.go + +// Package imports implements a Go pretty-printer (like package "go/format") +// that also adds or removes import statements as necessary. +package imports + +import ( + "bufio" + "bytes" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/printer" + "go/token" + "io" + "regexp" + "strconv" + "strings" + + "golang.org/x/tools/go/ast/astutil" +) + +// Options is golang.org/x/tools/imports.Options with extra internal-only options. +type Options struct { + Env *ProcessEnv // The environment to use. Note: this contains the cached module and filesystem state. + + // LocalPrefix is a comma-separated string of import path prefixes, which, if + // set, instructs Process to sort the import paths with the given prefixes + // into another group after 3rd-party packages. + LocalPrefix string + + Fragment bool // Accept fragment of a source file (no package statement) + AllErrors bool // Report all errors (not just the first 10 on different lines) + + Comments bool // Print comments (true if nil *Options provided) + TabIndent bool // Use tabs for indent (true if nil *Options provided) + TabWidth int // Tab width (8 if nil *Options provided) + + FormatOnly bool // Disable the insertion and deletion of imports +} + +// Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env. +func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) { + fileSet := token.NewFileSet() + file, adjust, err := parse(fileSet, filename, src, opt) + if err != nil { + return nil, err + } + + if !opt.FormatOnly { + if err := fixImports(fileSet, file, filename, opt.Env); err != nil { + return nil, err + } + } + return formatFile(fileSet, file, src, adjust, opt) +} + +// FixImports returns a list of fixes to the imports that, when applied, +// will leave the imports in the same state as Process. src and opt must +// be specified. +// +// Note that filename's directory influences which imports can be chosen, +// so it is important that filename be accurate. +func FixImports(filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { + fileSet := token.NewFileSet() + file, _, err := parse(fileSet, filename, src, opt) + if err != nil { + return nil, err + } + + return getFixes(fileSet, file, filename, opt.Env) +} + +// ApplyFixes applies all of the fixes to the file and formats it. extraMode +// is added in when parsing the file. src and opts must be specified, but no +// env is needed. +func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) { + // Don't use parse() -- we don't care about fragments or statement lists + // here, and we need to work with unparseable files. + fileSet := token.NewFileSet() + parserMode := parser.Mode(0) + if opt.Comments { + parserMode |= parser.ParseComments + } + if opt.AllErrors { + parserMode |= parser.AllErrors + } + parserMode |= extraMode + + file, err := parser.ParseFile(fileSet, filename, src, parserMode) + if file == nil { + return nil, err + } + + // Apply the fixes to the file. + apply(fileSet, file, fixes) + + return formatFile(fileSet, file, src, nil, opt) +} + +// formatFile formats the file syntax tree. +// It may mutate the token.FileSet. +// +// If an adjust function is provided, it is called after formatting +// with the original source (formatFile's src parameter) and the +// formatted file, and returns the postpocessed result. +func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) { + mergeImports(file) + sortImports(opt.LocalPrefix, fset.File(file.Pos()), file) + var spacesBefore []string // import paths we need spaces before + for _, impSection := range astutil.Imports(fset, file) { + // Within each block of contiguous imports, see if any + // import lines are in different group numbers. If so, + // we'll need to put a space between them so it's + // compatible with gofmt. + lastGroup := -1 + for _, importSpec := range impSection { + importPath, _ := strconv.Unquote(importSpec.Path.Value) + groupNum := importGroup(opt.LocalPrefix, importPath) + if groupNum != lastGroup && lastGroup != -1 { + spacesBefore = append(spacesBefore, importPath) + } + lastGroup = groupNum + } + + } + + printerMode := printer.UseSpaces + if opt.TabIndent { + printerMode |= printer.TabIndent + } + printConfig := &printer.Config{Mode: printerMode, Tabwidth: opt.TabWidth} + + var buf bytes.Buffer + err := printConfig.Fprint(&buf, fset, file) + if err != nil { + return nil, err + } + out := buf.Bytes() + if adjust != nil { + out = adjust(src, out) + } + if len(spacesBefore) > 0 { + out, err = addImportSpaces(bytes.NewReader(out), spacesBefore) + if err != nil { + return nil, err + } + } + + out, err = format.Source(out) + if err != nil { + return nil, err + } + return out, nil +} + +// parse parses src, which was read from filename, +// as a Go source file or statement list. +func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast.File, func(orig, src []byte) []byte, error) { + parserMode := parser.Mode(0) + if opt.Comments { + parserMode |= parser.ParseComments + } + if opt.AllErrors { + parserMode |= parser.AllErrors + } + + // Try as whole source file. + file, err := parser.ParseFile(fset, filename, src, parserMode) + if err == nil { + return file, nil, nil + } + // If the error is that the source file didn't begin with a + // package line and we accept fragmented input, fall through to + // try as a source fragment. Stop and return on any other error. + if !opt.Fragment || !strings.Contains(err.Error(), "expected 'package'") { + return nil, nil, err + } + + // If this is a declaration list, make it a source file + // by inserting a package clause. + // Insert using a ;, not a newline, so that parse errors are on + // the correct line. + const prefix = "package main;" + psrc := append([]byte(prefix), src...) + file, err = parser.ParseFile(fset, filename, psrc, parserMode) + if err == nil { + // Gofmt will turn the ; into a \n. + // Do that ourselves now and update the file contents, + // so that positions and line numbers are correct going forward. + psrc[len(prefix)-1] = '\n' + fset.File(file.Package).SetLinesForContent(psrc) + + // If a main function exists, we will assume this is a main + // package and leave the file. + if containsMainFunc(file) { + return file, nil, nil + } + + adjust := func(orig, src []byte) []byte { + // Remove the package clause. + src = src[len(prefix):] + return matchSpace(orig, src) + } + return file, adjust, nil + } + // If the error is that the source file didn't begin with a + // declaration, fall through to try as a statement list. + // Stop and return on any other error. + if !strings.Contains(err.Error(), "expected declaration") { + return nil, nil, err + } + + // If this is a statement list, make it a source file + // by inserting a package clause and turning the list + // into a function body. This handles expressions too. + // Insert using a ;, not a newline, so that the line numbers + // in fsrc match the ones in src. + fsrc := append(append([]byte("package p; func _() {"), src...), '}') + file, err = parser.ParseFile(fset, filename, fsrc, parserMode) + if err == nil { + adjust := func(orig, src []byte) []byte { + // Remove the wrapping. + // Gofmt has turned the ; into a \n\n. + src = src[len("package p\n\nfunc _() {"):] + src = src[:len(src)-len("}\n")] + // Gofmt has also indented the function body one level. + // Remove that indent. + src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1) + return matchSpace(orig, src) + } + return file, adjust, nil + } + + // Failed, and out of options. + return nil, nil, err +} + +// containsMainFunc checks if a file contains a function declaration with the +// function signature 'func main()' +func containsMainFunc(file *ast.File) bool { + for _, decl := range file.Decls { + if f, ok := decl.(*ast.FuncDecl); ok { + if f.Name.Name != "main" { + continue + } + + if len(f.Type.Params.List) != 0 { + continue + } + + if f.Type.Results != nil && len(f.Type.Results.List) != 0 { + continue + } + + return true + } + } + + return false +} + +func cutSpace(b []byte) (before, middle, after []byte) { + i := 0 + for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') { + i++ + } + j := len(b) + for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') { + j-- + } + if i <= j { + return b[:i], b[i:j], b[j:] + } + return nil, nil, b[j:] +} + +// matchSpace reformats src to use the same space context as orig. +// 1. If orig begins with blank lines, matchSpace inserts them at the beginning of src. +// 2. matchSpace copies the indentation of the first non-blank line in orig +// to every non-blank line in src. +// 3. matchSpace copies the trailing space from orig and uses it in place +// of src's trailing space. +func matchSpace(orig []byte, src []byte) []byte { + before, _, after := cutSpace(orig) + i := bytes.LastIndex(before, []byte{'\n'}) + before, indent := before[:i+1], before[i+1:] + + _, src, _ = cutSpace(src) + + var b bytes.Buffer + b.Write(before) + for len(src) > 0 { + line := src + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, src = line[:i+1], line[i+1:] + } else { + src = nil + } + if len(line) > 0 && line[0] != '\n' { // not blank + b.Write(indent) + } + b.Write(line) + } + b.Write(after) + return b.Bytes() +} + +var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`) + +func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { + var out bytes.Buffer + in := bufio.NewReader(r) + inImports := false + done := false + for { + s, err := in.ReadString('\n') + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + if !inImports && !done && strings.HasPrefix(s, "import") { + inImports = true + } + if inImports && (strings.HasPrefix(s, "var") || + strings.HasPrefix(s, "func") || + strings.HasPrefix(s, "const") || + strings.HasPrefix(s, "type")) { + done = true + inImports = false + } + if inImports && len(breaks) > 0 { + if m := impLine.FindStringSubmatch(s); m != nil { + if m[1] == breaks[0] { + out.WriteByte('\n') + breaks = breaks[1:] + } + } + } + + fmt.Fprint(&out, s) + } + return out.Bytes(), nil +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go new file mode 100644 index 000000000000..7d99d04ca8ad --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go @@ -0,0 +1,716 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "regexp" + "sort" + "strconv" + "strings" + + "golang.org/x/mod/module" + "golang.org/x/tools/internal/gocommand" + "golang.org/x/tools/internal/gopathwalk" +) + +// ModuleResolver implements resolver for modules using the go command as little +// as feasible. +type ModuleResolver struct { + env *ProcessEnv + moduleCacheDir string + dummyVendorMod *gocommand.ModuleJSON // If vendoring is enabled, the pseudo-module that represents the /vendor directory. + roots []gopathwalk.Root + scanSema chan struct{} // scanSema prevents concurrent scans and guards scannedRoots. + scannedRoots map[gopathwalk.Root]bool + + initialized bool + mains []*gocommand.ModuleJSON + mainByDir map[string]*gocommand.ModuleJSON + modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path... + modsByDir []*gocommand.ModuleJSON // ...or Dir. + + // moduleCacheCache stores information about the module cache. + moduleCacheCache *dirInfoCache + otherCache *dirInfoCache +} + +func newModuleResolver(e *ProcessEnv) *ModuleResolver { + r := &ModuleResolver{ + env: e, + scanSema: make(chan struct{}, 1), + } + r.scanSema <- struct{}{} + return r +} + +func (r *ModuleResolver) init() error { + if r.initialized { + return nil + } + + goenv, err := r.env.goEnv() + if err != nil { + return err + } + inv := gocommand.Invocation{ + BuildFlags: r.env.BuildFlags, + ModFlag: r.env.ModFlag, + ModFile: r.env.ModFile, + Env: r.env.env(), + Logf: r.env.Logf, + WorkingDir: r.env.WorkingDir, + } + + vendorEnabled := false + var mainModVendor *gocommand.ModuleJSON + + // Module vendor directories are ignored in workspace mode: + // https://go.googlesource.com/proposal/+/master/design/45713-workspace.md + if len(r.env.Env["GOWORK"]) == 0 { + vendorEnabled, mainModVendor, err = gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) + if err != nil { + return err + } + } + + if mainModVendor != nil && vendorEnabled { + // Vendor mode is on, so all the non-Main modules are irrelevant, + // and we need to search /vendor for everything. + r.mains = []*gocommand.ModuleJSON{mainModVendor} + r.dummyVendorMod = &gocommand.ModuleJSON{ + Path: "", + Dir: filepath.Join(mainModVendor.Dir, "vendor"), + } + r.modsByModPath = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + r.modsByDir = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + } else { + // Vendor mode is off, so run go list -m ... to find everything. + err := r.initAllMods() + // We expect an error when running outside of a module with + // GO111MODULE=on. Other errors are fatal. + if err != nil { + if errMsg := err.Error(); !strings.Contains(errMsg, "working directory is not part of a module") && !strings.Contains(errMsg, "go.mod file not found") { + return err + } + } + } + + if gmc := r.env.Env["GOMODCACHE"]; gmc != "" { + r.moduleCacheDir = gmc + } else { + gopaths := filepath.SplitList(goenv["GOPATH"]) + if len(gopaths) == 0 { + return fmt.Errorf("empty GOPATH") + } + r.moduleCacheDir = filepath.Join(gopaths[0], "/pkg/mod") + } + + sort.Slice(r.modsByModPath, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByModPath[x].Path, "/") + } + return count(j) < count(i) // descending order + }) + sort.Slice(r.modsByDir, func(i, j int) bool { + count := func(x int) int { + return strings.Count(r.modsByDir[x].Dir, "/") + } + return count(j) < count(i) // descending order + }) + + r.roots = []gopathwalk.Root{ + {Path: filepath.Join(goenv["GOROOT"], "/src"), Type: gopathwalk.RootGOROOT}, + } + r.mainByDir = make(map[string]*gocommand.ModuleJSON) + for _, main := range r.mains { + r.roots = append(r.roots, gopathwalk.Root{Path: main.Dir, Type: gopathwalk.RootCurrentModule}) + r.mainByDir[main.Dir] = main + } + if vendorEnabled { + r.roots = append(r.roots, gopathwalk.Root{Path: r.dummyVendorMod.Dir, Type: gopathwalk.RootOther}) + } else { + addDep := func(mod *gocommand.ModuleJSON) { + if mod.Replace == nil { + // This is redundant with the cache, but we'll skip it cheaply enough. + r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootModuleCache}) + } else { + r.roots = append(r.roots, gopathwalk.Root{Path: mod.Dir, Type: gopathwalk.RootOther}) + } + } + // Walk dependent modules before scanning the full mod cache, direct deps first. + for _, mod := range r.modsByModPath { + if !mod.Indirect && !mod.Main { + addDep(mod) + } + } + for _, mod := range r.modsByModPath { + if mod.Indirect && !mod.Main { + addDep(mod) + } + } + r.roots = append(r.roots, gopathwalk.Root{Path: r.moduleCacheDir, Type: gopathwalk.RootModuleCache}) + } + + r.scannedRoots = map[gopathwalk.Root]bool{} + if r.moduleCacheCache == nil { + r.moduleCacheCache = &dirInfoCache{ + dirs: map[string]*directoryPackageInfo{}, + listeners: map[*int]cacheListener{}, + } + } + if r.otherCache == nil { + r.otherCache = &dirInfoCache{ + dirs: map[string]*directoryPackageInfo{}, + listeners: map[*int]cacheListener{}, + } + } + r.initialized = true + return nil +} + +func (r *ModuleResolver) initAllMods() error { + stdout, err := r.env.invokeGo(context.TODO(), "list", "-m", "-e", "-json", "...") + if err != nil { + return err + } + for dec := json.NewDecoder(stdout); dec.More(); { + mod := &gocommand.ModuleJSON{} + if err := dec.Decode(mod); err != nil { + return err + } + if mod.Dir == "" { + if r.env.Logf != nil { + r.env.Logf("module %v has not been downloaded and will be ignored", mod.Path) + } + // Can't do anything with a module that's not downloaded. + continue + } + // golang/go#36193: the go command doesn't always clean paths. + mod.Dir = filepath.Clean(mod.Dir) + r.modsByModPath = append(r.modsByModPath, mod) + r.modsByDir = append(r.modsByDir, mod) + if mod.Main { + r.mains = append(r.mains, mod) + } + } + return nil +} + +func (r *ModuleResolver) ClearForNewScan() { + <-r.scanSema + r.scannedRoots = map[gopathwalk.Root]bool{} + r.otherCache = &dirInfoCache{ + dirs: map[string]*directoryPackageInfo{}, + listeners: map[*int]cacheListener{}, + } + r.scanSema <- struct{}{} +} + +func (r *ModuleResolver) ClearForNewMod() { + <-r.scanSema + *r = ModuleResolver{ + env: r.env, + moduleCacheCache: r.moduleCacheCache, + otherCache: r.otherCache, + scanSema: r.scanSema, + } + r.init() + r.scanSema <- struct{}{} +} + +// findPackage returns the module and directory that contains the package at +// the given import path, or returns nil, "" if no module is in scope. +func (r *ModuleResolver) findPackage(importPath string) (*gocommand.ModuleJSON, string) { + // This can't find packages in the stdlib, but that's harmless for all + // the existing code paths. + for _, m := range r.modsByModPath { + if !strings.HasPrefix(importPath, m.Path) { + continue + } + pathInModule := importPath[len(m.Path):] + pkgDir := filepath.Join(m.Dir, pathInModule) + if r.dirIsNestedModule(pkgDir, m) { + continue + } + + if info, ok := r.cacheLoad(pkgDir); ok { + if loaded, err := info.reachedStatus(nameLoaded); loaded { + if err != nil { + continue // No package in this dir. + } + return m, pkgDir + } + if scanned, err := info.reachedStatus(directoryScanned); scanned && err != nil { + continue // Dir is unreadable, etc. + } + // This is slightly wrong: a directory doesn't have to have an + // importable package to count as a package for package-to-module + // resolution. package main or _test files should count but + // don't. + // TODO(heschi): fix this. + if _, err := r.cachePackageName(info); err == nil { + return m, pkgDir + } + } + + // Not cached. Read the filesystem. + pkgFiles, err := ioutil.ReadDir(pkgDir) + if err != nil { + continue + } + // A module only contains a package if it has buildable go + // files in that directory. If not, it could be provided by an + // outer module. See #29736. + for _, fi := range pkgFiles { + if ok, _ := r.env.matchFile(pkgDir, fi.Name()); ok { + return m, pkgDir + } + } + } + return nil, "" +} + +func (r *ModuleResolver) cacheLoad(dir string) (directoryPackageInfo, bool) { + if info, ok := r.moduleCacheCache.Load(dir); ok { + return info, ok + } + return r.otherCache.Load(dir) +} + +func (r *ModuleResolver) cacheStore(info directoryPackageInfo) { + if info.rootType == gopathwalk.RootModuleCache { + r.moduleCacheCache.Store(info.dir, info) + } else { + r.otherCache.Store(info.dir, info) + } +} + +func (r *ModuleResolver) cacheKeys() []string { + return append(r.moduleCacheCache.Keys(), r.otherCache.Keys()...) +} + +// cachePackageName caches the package name for a dir already in the cache. +func (r *ModuleResolver) cachePackageName(info directoryPackageInfo) (string, error) { + if info.rootType == gopathwalk.RootModuleCache { + return r.moduleCacheCache.CachePackageName(info) + } + return r.otherCache.CachePackageName(info) +} + +func (r *ModuleResolver) cacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) { + if info.rootType == gopathwalk.RootModuleCache { + return r.moduleCacheCache.CacheExports(ctx, env, info) + } + return r.otherCache.CacheExports(ctx, env, info) +} + +// findModuleByDir returns the module that contains dir, or nil if no such +// module is in scope. +func (r *ModuleResolver) findModuleByDir(dir string) *gocommand.ModuleJSON { + // This is quite tricky and may not be correct. dir could be: + // - a package in the main module. + // - a replace target underneath the main module's directory. + // - a nested module in the above. + // - a replace target somewhere totally random. + // - a nested module in the above. + // - in the mod cache. + // - in /vendor/ in -mod=vendor mode. + // - nested module? Dunno. + // Rumor has it that replace targets cannot contain other replace targets. + for _, m := range r.modsByDir { + if !strings.HasPrefix(dir, m.Dir) { + continue + } + + if r.dirIsNestedModule(dir, m) { + continue + } + + return m + } + return nil +} + +// dirIsNestedModule reports if dir is contained in a nested module underneath +// mod, not actually in mod. +func (r *ModuleResolver) dirIsNestedModule(dir string, mod *gocommand.ModuleJSON) bool { + if !strings.HasPrefix(dir, mod.Dir) { + return false + } + if r.dirInModuleCache(dir) { + // Nested modules in the module cache are pruned, + // so it cannot be a nested module. + return false + } + if mod != nil && mod == r.dummyVendorMod { + // The /vendor pseudomodule is flattened and doesn't actually count. + return false + } + modDir, _ := r.modInfo(dir) + if modDir == "" { + return false + } + return modDir != mod.Dir +} + +func (r *ModuleResolver) modInfo(dir string) (modDir string, modName string) { + readModName := func(modFile string) string { + modBytes, err := ioutil.ReadFile(modFile) + if err != nil { + return "" + } + return modulePath(modBytes) + } + + if r.dirInModuleCache(dir) { + if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 { + index := strings.Index(dir, matches[1]+"@"+matches[2]) + modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2]) + return modDir, readModName(filepath.Join(modDir, "go.mod")) + } + } + for { + if info, ok := r.cacheLoad(dir); ok { + return info.moduleDir, info.moduleName + } + f := filepath.Join(dir, "go.mod") + info, err := os.Stat(f) + if err == nil && !info.IsDir() { + return dir, readModName(f) + } + + d := filepath.Dir(dir) + if len(d) >= len(dir) { + return "", "" // reached top of file system, no go.mod + } + dir = d + } +} + +func (r *ModuleResolver) dirInModuleCache(dir string) bool { + if r.moduleCacheDir == "" { + return false + } + return strings.HasPrefix(dir, r.moduleCacheDir) +} + +func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { + if err := r.init(); err != nil { + return nil, err + } + names := map[string]string{} + for _, path := range importPaths { + _, packageDir := r.findPackage(path) + if packageDir == "" { + continue + } + name, err := packageDirToName(packageDir) + if err != nil { + continue + } + names[path] = name + } + return names, nil +} + +func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error { + if err := r.init(); err != nil { + return err + } + + processDir := func(info directoryPackageInfo) { + // Skip this directory if we were not able to get the package information successfully. + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return + } + pkg, err := r.canonicalize(info) + if err != nil { + return + } + + if !callback.dirFound(pkg) { + return + } + pkg.packageName, err = r.cachePackageName(info) + if err != nil { + return + } + + if !callback.packageNameLoaded(pkg) { + return + } + _, exports, err := r.loadExports(ctx, pkg, false) + if err != nil { + return + } + callback.exportsLoaded(pkg, exports) + } + + // Start processing everything in the cache, and listen for the new stuff + // we discover in the walk below. + stop1 := r.moduleCacheCache.ScanAndListen(ctx, processDir) + defer stop1() + stop2 := r.otherCache.ScanAndListen(ctx, processDir) + defer stop2() + + // We assume cached directories are fully cached, including all their + // children, and have not changed. We can skip them. + skip := func(root gopathwalk.Root, dir string) bool { + if r.env.SkipPathInScan != nil && root.Type == gopathwalk.RootCurrentModule { + if root.Path == dir { + return false + } + + if r.env.SkipPathInScan(filepath.Clean(dir)) { + return true + } + } + + info, ok := r.cacheLoad(dir) + if !ok { + return false + } + // This directory can be skipped as long as we have already scanned it. + // Packages with errors will continue to have errors, so there is no need + // to rescan them. + packageScanned, _ := info.reachedStatus(directoryScanned) + return packageScanned + } + + // Add anything new to the cache, and process it if we're still listening. + add := func(root gopathwalk.Root, dir string) { + r.cacheStore(r.scanDirForPackage(root, dir)) + } + + // r.roots and the callback are not necessarily safe to use in the + // goroutine below. Process them eagerly. + roots := filterRoots(r.roots, callback.rootFound) + // We can't cancel walks, because we need them to finish to have a usable + // cache. Instead, run them in a separate goroutine and detach. + scanDone := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + return + case <-r.scanSema: + } + defer func() { r.scanSema <- struct{}{} }() + // We have the lock on r.scannedRoots, and no other scans can run. + for _, root := range roots { + if ctx.Err() != nil { + return + } + + if r.scannedRoots[root] { + continue + } + gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: true}) + r.scannedRoots[root] = true + } + close(scanDone) + }() + select { + case <-ctx.Done(): + case <-scanDone: + } + return nil +} + +func (r *ModuleResolver) scoreImportPath(ctx context.Context, path string) float64 { + if _, ok := stdlib[path]; ok { + return MaxRelevance + } + mod, _ := r.findPackage(path) + return modRelevance(mod) +} + +func modRelevance(mod *gocommand.ModuleJSON) float64 { + var relevance float64 + switch { + case mod == nil: // out of scope + return MaxRelevance - 4 + case mod.Indirect: + relevance = MaxRelevance - 3 + case !mod.Main: + relevance = MaxRelevance - 2 + default: + relevance = MaxRelevance - 1 // main module ties with stdlib + } + + _, versionString, ok := module.SplitPathVersion(mod.Path) + if ok { + index := strings.Index(versionString, "v") + if index == -1 { + return relevance + } + if versionNumber, err := strconv.ParseFloat(versionString[index+1:], 64); err == nil { + relevance += versionNumber / 1000 + } + } + + return relevance +} + +// canonicalize gets the result of canonicalizing the packages using the results +// of initializing the resolver from 'go list -m'. +func (r *ModuleResolver) canonicalize(info directoryPackageInfo) (*pkg, error) { + // Packages in GOROOT are already canonical, regardless of the std/cmd modules. + if info.rootType == gopathwalk.RootGOROOT { + return &pkg{ + importPathShort: info.nonCanonicalImportPath, + dir: info.dir, + packageName: path.Base(info.nonCanonicalImportPath), + relevance: MaxRelevance, + }, nil + } + + importPath := info.nonCanonicalImportPath + mod := r.findModuleByDir(info.dir) + // Check if the directory is underneath a module that's in scope. + if mod != nil { + // It is. If dir is the target of a replace directive, + // our guessed import path is wrong. Use the real one. + if mod.Dir == info.dir { + importPath = mod.Path + } else { + dirInMod := info.dir[len(mod.Dir)+len("/"):] + importPath = path.Join(mod.Path, filepath.ToSlash(dirInMod)) + } + } else if !strings.HasPrefix(importPath, info.moduleName) { + // The module's name doesn't match the package's import path. It + // probably needs a replace directive we don't have. + return nil, fmt.Errorf("package in %q is not valid without a replace statement", info.dir) + } + + res := &pkg{ + importPathShort: importPath, + dir: info.dir, + relevance: modRelevance(mod), + } + // We may have discovered a package that has a different version + // in scope already. Canonicalize to that one if possible. + if _, canonicalDir := r.findPackage(importPath); canonicalDir != "" { + res.dir = canonicalDir + } + return res, nil +} + +func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) { + if err := r.init(); err != nil { + return "", nil, err + } + if info, ok := r.cacheLoad(pkg.dir); ok && !includeTest { + return r.cacheExports(ctx, r.env, info) + } + return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest) +} + +func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) directoryPackageInfo { + subdir := "" + if dir != root.Path { + subdir = dir[len(root.Path)+len("/"):] + } + importPath := filepath.ToSlash(subdir) + if strings.HasPrefix(importPath, "vendor/") { + // Only enter vendor directories if they're explicitly requested as a root. + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("unwanted vendor directory"), + } + } + switch root.Type { + case gopathwalk.RootCurrentModule: + importPath = path.Join(r.mainByDir[root.Path].Path, filepath.ToSlash(subdir)) + case gopathwalk.RootModuleCache: + matches := modCacheRegexp.FindStringSubmatch(subdir) + if len(matches) == 0 { + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("invalid module cache path: %v", subdir), + } + } + modPath, err := module.UnescapePath(filepath.ToSlash(matches[1])) + if err != nil { + if r.env.Logf != nil { + r.env.Logf("decoding module cache path %q: %v", subdir, err) + } + return directoryPackageInfo{ + status: directoryScanned, + err: fmt.Errorf("decoding module cache path %q: %v", subdir, err), + } + } + importPath = path.Join(modPath, filepath.ToSlash(matches[3])) + } + + modDir, modName := r.modInfo(dir) + result := directoryPackageInfo{ + status: directoryScanned, + dir: dir, + rootType: root.Type, + nonCanonicalImportPath: importPath, + moduleDir: modDir, + moduleName: modName, + } + if root.Type == gopathwalk.RootGOROOT { + // stdlib packages are always in scope, despite the confusing go.mod + return result + } + return result +} + +// modCacheRegexp splits a path in a module cache into module, module version, and package. +var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`) + +var ( + slashSlash = []byte("//") + moduleStr = []byte("module") +) + +// modulePath returns the module path from the gomod file text. +// If it cannot find a module path, it returns an empty string. +// It is tolerant of unrelated problems in the go.mod file. +// +// Copied from cmd/go/internal/modfile. +func modulePath(mod []byte) string { + for len(mod) > 0 { + line := mod + mod = nil + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, mod = line[:i], line[i+1:] + } + if i := bytes.Index(line, slashSlash); i >= 0 { + line = line[:i] + } + line = bytes.TrimSpace(line) + if !bytes.HasPrefix(line, moduleStr) { + continue + } + line = line[len(moduleStr):] + n := len(line) + line = bytes.TrimSpace(line) + if len(line) == n || len(line) == 0 { + continue + } + + if line[0] == '"' || line[0] == '`' { + p, err := strconv.Unquote(string(line)) + if err != nil { + return "" // malformed quoted string or multiline module path + } + return p + } + + return string(line) + } + return "" // missing module path +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod_cache.go new file mode 100644 index 000000000000..18dada495ca8 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod_cache.go @@ -0,0 +1,236 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import ( + "context" + "fmt" + "sync" + + "golang.org/x/tools/internal/gopathwalk" +) + +// To find packages to import, the resolver needs to know about all of the +// the packages that could be imported. This includes packages that are +// already in modules that are in (1) the current module, (2) replace targets, +// and (3) packages in the module cache. Packages in (1) and (2) may change over +// time, as the client may edit the current module and locally replaced modules. +// The module cache (which includes all of the packages in (3)) can only +// ever be added to. +// +// The resolver can thus save state about packages in the module cache +// and guarantee that this will not change over time. To obtain information +// about new modules added to the module cache, the module cache should be +// rescanned. +// +// It is OK to serve information about modules that have been deleted, +// as they do still exist. +// TODO(suzmue): can we share information with the caller about +// what module needs to be downloaded to import this package? + +type directoryPackageStatus int + +const ( + _ directoryPackageStatus = iota + directoryScanned + nameLoaded + exportsLoaded +) + +type directoryPackageInfo struct { + // status indicates the extent to which this struct has been filled in. + status directoryPackageStatus + // err is non-nil when there was an error trying to reach status. + err error + + // Set when status >= directoryScanned. + + // dir is the absolute directory of this package. + dir string + rootType gopathwalk.RootType + // nonCanonicalImportPath is the package's expected import path. It may + // not actually be importable at that path. + nonCanonicalImportPath string + + // Module-related information. + moduleDir string // The directory that is the module root of this dir. + moduleName string // The module name that contains this dir. + + // Set when status >= nameLoaded. + + packageName string // the package name, as declared in the source. + + // Set when status >= exportsLoaded. + + exports []string +} + +// reachedStatus returns true when info has a status at least target and any error associated with +// an attempt to reach target. +func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) (bool, error) { + if info.err == nil { + return info.status >= target, nil + } + if info.status == target { + return true, info.err + } + return true, nil +} + +// dirInfoCache is a concurrency safe map for storing information about +// directories that may contain packages. +// +// The information in this cache is built incrementally. Entries are initialized in scan. +// No new keys should be added in any other functions, as all directories containing +// packages are identified in scan. +// +// Other functions, including loadExports and findPackage, may update entries in this cache +// as they discover new things about the directory. +// +// The information in the cache is not expected to change for the cache's +// lifetime, so there is no protection against competing writes. Users should +// take care not to hold the cache across changes to the underlying files. +// +// TODO(suzmue): consider other concurrency strategies and data structures (RWLocks, sync.Map, etc) +type dirInfoCache struct { + mu sync.Mutex + // dirs stores information about packages in directories, keyed by absolute path. + dirs map[string]*directoryPackageInfo + listeners map[*int]cacheListener +} + +type cacheListener func(directoryPackageInfo) + +// ScanAndListen calls listener on all the items in the cache, and on anything +// newly added. The returned stop function waits for all in-flight callbacks to +// finish and blocks new ones. +func (d *dirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() { + ctx, cancel := context.WithCancel(ctx) + + // Flushing out all the callbacks is tricky without knowing how many there + // are going to be. Setting an arbitrary limit makes it much easier. + const maxInFlight = 10 + sema := make(chan struct{}, maxInFlight) + for i := 0; i < maxInFlight; i++ { + sema <- struct{}{} + } + + cookie := new(int) // A unique ID we can use for the listener. + + // We can't hold mu while calling the listener. + d.mu.Lock() + var keys []string + for key := range d.dirs { + keys = append(keys, key) + } + d.listeners[cookie] = func(info directoryPackageInfo) { + select { + case <-ctx.Done(): + return + case <-sema: + } + listener(info) + sema <- struct{}{} + } + d.mu.Unlock() + + stop := func() { + cancel() + d.mu.Lock() + delete(d.listeners, cookie) + d.mu.Unlock() + for i := 0; i < maxInFlight; i++ { + <-sema + } + } + + // Process the pre-existing keys. + for _, k := range keys { + select { + case <-ctx.Done(): + return stop + default: + } + if v, ok := d.Load(k); ok { + listener(v) + } + } + + return stop +} + +// Store stores the package info for dir. +func (d *dirInfoCache) Store(dir string, info directoryPackageInfo) { + d.mu.Lock() + _, old := d.dirs[dir] + d.dirs[dir] = &info + var listeners []cacheListener + for _, l := range d.listeners { + listeners = append(listeners, l) + } + d.mu.Unlock() + + if !old { + for _, l := range listeners { + l(info) + } + } +} + +// Load returns a copy of the directoryPackageInfo for absolute directory dir. +func (d *dirInfoCache) Load(dir string) (directoryPackageInfo, bool) { + d.mu.Lock() + defer d.mu.Unlock() + info, ok := d.dirs[dir] + if !ok { + return directoryPackageInfo{}, false + } + return *info, true +} + +// Keys returns the keys currently present in d. +func (d *dirInfoCache) Keys() (keys []string) { + d.mu.Lock() + defer d.mu.Unlock() + for key := range d.dirs { + keys = append(keys, key) + } + return keys +} + +func (d *dirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) { + if loaded, err := info.reachedStatus(nameLoaded); loaded { + return info.packageName, err + } + if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil { + return "", fmt.Errorf("cannot read package name, scan error: %v", err) + } + info.packageName, info.err = packageDirToName(info.dir) + info.status = nameLoaded + d.Store(info.dir, info) + return info.packageName, info.err +} + +func (d *dirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) { + if reached, _ := info.reachedStatus(exportsLoaded); reached { + return info.packageName, info.exports, info.err + } + if reached, err := info.reachedStatus(nameLoaded); reached && err != nil { + return "", nil, err + } + info.packageName, info.exports, info.err = loadExportsFromFiles(ctx, env, info.dir, false) + if info.err == context.Canceled || info.err == context.DeadlineExceeded { + return info.packageName, info.exports, info.err + } + // The cache structure wants things to proceed linearly. We can skip a + // step here, but only if we succeed. + if info.status == nameLoaded || info.err == nil { + info.status = exportsLoaded + } else { + info.status = nameLoaded + } + d.Store(info.dir, info) + return info.packageName, info.exports, info.err +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/sortimports.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/sortimports.go new file mode 100644 index 000000000000..1a0a7ebd9e4d --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/sortimports.go @@ -0,0 +1,297 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Hacked up copy of go/ast/import.go +// Modified to use a single token.File in preference to a FileSet. + +package imports + +import ( + "go/ast" + "go/token" + "log" + "sort" + "strconv" +) + +// sortImports sorts runs of consecutive import lines in import blocks in f. +// It also removes duplicate imports when it is possible to do so without data loss. +// +// It may mutate the token.File. +func sortImports(localPrefix string, tokFile *token.File, f *ast.File) { + for i, d := range f.Decls { + d, ok := d.(*ast.GenDecl) + if !ok || d.Tok != token.IMPORT { + // Not an import declaration, so we're done. + // Imports are always first. + break + } + + if len(d.Specs) == 0 { + // Empty import block, remove it. + f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + } + + if !d.Lparen.IsValid() { + // Not a block: sorted by default. + continue + } + + // Identify and sort runs of specs on successive lines. + i := 0 + specs := d.Specs[:0] + for j, s := range d.Specs { + if j > i && tokFile.Line(s.Pos()) > 1+tokFile.Line(d.Specs[j-1].End()) { + // j begins a new run. End this one. + specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:j])...) + i = j + } + } + specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:])...) + d.Specs = specs + + // Deduping can leave a blank line before the rparen; clean that up. + // Ignore line directives. + if len(d.Specs) > 0 { + lastSpec := d.Specs[len(d.Specs)-1] + lastLine := tokFile.PositionFor(lastSpec.Pos(), false).Line + if rParenLine := tokFile.PositionFor(d.Rparen, false).Line; rParenLine > lastLine+1 { + tokFile.MergeLine(rParenLine - 1) // has side effects! + } + } + } +} + +// mergeImports merges all the import declarations into the first one. +// Taken from golang.org/x/tools/ast/astutil. +// This does not adjust line numbers properly +func mergeImports(f *ast.File) { + if len(f.Decls) <= 1 { + return + } + + // Merge all the import declarations into the first one. + var first *ast.GenDecl + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { + continue + } + if first == nil { + first = gen + continue // Don't touch the first one. + } + // We now know there is more than one package in this import + // declaration. Ensure that it ends up parenthesized. + first.Lparen = first.Pos() + // Move the imports of the other import declaration to the first one. + for _, spec := range gen.Specs { + spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() + first.Specs = append(first.Specs, spec) + } + f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + i-- + } +} + +// declImports reports whether gen contains an import of path. +// Taken from golang.org/x/tools/ast/astutil. +func declImports(gen *ast.GenDecl, path string) bool { + if gen.Tok != token.IMPORT { + return false + } + for _, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + if importPath(impspec) == path { + return true + } + } + return false +} + +func importPath(s ast.Spec) string { + t, err := strconv.Unquote(s.(*ast.ImportSpec).Path.Value) + if err == nil { + return t + } + return "" +} + +func importName(s ast.Spec) string { + n := s.(*ast.ImportSpec).Name + if n == nil { + return "" + } + return n.Name +} + +func importComment(s ast.Spec) string { + c := s.(*ast.ImportSpec).Comment + if c == nil { + return "" + } + return c.Text() +} + +// collapse indicates whether prev may be removed, leaving only next. +func collapse(prev, next ast.Spec) bool { + if importPath(next) != importPath(prev) || importName(next) != importName(prev) { + return false + } + return prev.(*ast.ImportSpec).Comment == nil +} + +type posSpan struct { + Start token.Pos + End token.Pos +} + +// sortSpecs sorts the import specs within each import decl. +// It may mutate the token.File. +func sortSpecs(localPrefix string, tokFile *token.File, f *ast.File, specs []ast.Spec) []ast.Spec { + // Can't short-circuit here even if specs are already sorted, + // since they might yet need deduplication. + // A lone import, however, may be safely ignored. + if len(specs) <= 1 { + return specs + } + + // Record positions for specs. + pos := make([]posSpan, len(specs)) + for i, s := range specs { + pos[i] = posSpan{s.Pos(), s.End()} + } + + // Identify comments in this range. + // Any comment from pos[0].Start to the final line counts. + lastLine := tokFile.Line(pos[len(pos)-1].End) + cstart := len(f.Comments) + cend := len(f.Comments) + for i, g := range f.Comments { + if g.Pos() < pos[0].Start { + continue + } + if i < cstart { + cstart = i + } + if tokFile.Line(g.End()) > lastLine { + cend = i + break + } + } + comments := f.Comments[cstart:cend] + + // Assign each comment to the import spec preceding it. + importComment := map[*ast.ImportSpec][]*ast.CommentGroup{} + specIndex := 0 + for _, g := range comments { + for specIndex+1 < len(specs) && pos[specIndex+1].Start <= g.Pos() { + specIndex++ + } + s := specs[specIndex].(*ast.ImportSpec) + importComment[s] = append(importComment[s], g) + } + + // Sort the import specs by import path. + // Remove duplicates, when possible without data loss. + // Reassign the import paths to have the same position sequence. + // Reassign each comment to abut the end of its spec. + // Sort the comments by new position. + sort.Sort(byImportSpec{localPrefix, specs}) + + // Dedup. Thanks to our sorting, we can just consider + // adjacent pairs of imports. + deduped := specs[:0] + for i, s := range specs { + if i == len(specs)-1 || !collapse(s, specs[i+1]) { + deduped = append(deduped, s) + } else { + p := s.Pos() + tokFile.MergeLine(tokFile.Line(p)) // has side effects! + } + } + specs = deduped + + // Fix up comment positions + for i, s := range specs { + s := s.(*ast.ImportSpec) + if s.Name != nil { + s.Name.NamePos = pos[i].Start + } + s.Path.ValuePos = pos[i].Start + s.EndPos = pos[i].End + nextSpecPos := pos[i].End + + for _, g := range importComment[s] { + for _, c := range g.List { + c.Slash = pos[i].End + nextSpecPos = c.End() + } + } + if i < len(specs)-1 { + pos[i+1].Start = nextSpecPos + pos[i+1].End = nextSpecPos + } + } + + sort.Sort(byCommentPos(comments)) + + // Fixup comments can insert blank lines, because import specs are on different lines. + // We remove those blank lines here by merging import spec to the first import spec line. + firstSpecLine := tokFile.Line(specs[0].Pos()) + for _, s := range specs[1:] { + p := s.Pos() + line := tokFile.Line(p) + for previousLine := line - 1; previousLine >= firstSpecLine; { + // MergeLine can panic. Avoid the panic at the cost of not removing the blank line + // golang/go#50329 + if previousLine > 0 && previousLine < tokFile.LineCount() { + tokFile.MergeLine(previousLine) // has side effects! + previousLine-- + } else { + // try to gather some data to diagnose how this could happen + req := "Please report what the imports section of your go file looked like." + log.Printf("panic avoided: first:%d line:%d previous:%d max:%d. %s", + firstSpecLine, line, previousLine, tokFile.LineCount(), req) + } + } + } + return specs +} + +type byImportSpec struct { + localPrefix string + specs []ast.Spec // slice of *ast.ImportSpec +} + +func (x byImportSpec) Len() int { return len(x.specs) } +func (x byImportSpec) Swap(i, j int) { x.specs[i], x.specs[j] = x.specs[j], x.specs[i] } +func (x byImportSpec) Less(i, j int) bool { + ipath := importPath(x.specs[i]) + jpath := importPath(x.specs[j]) + + igroup := importGroup(x.localPrefix, ipath) + jgroup := importGroup(x.localPrefix, jpath) + if igroup != jgroup { + return igroup < jgroup + } + + if ipath != jpath { + return ipath < jpath + } + iname := importName(x.specs[i]) + jname := importName(x.specs[j]) + + if iname != jname { + return iname < jname + } + return importComment(x.specs[i]) < importComment(x.specs[j]) +} + +type byCommentPos []*ast.CommentGroup + +func (x byCommentPos) Len() int { return len(x) } +func (x byCommentPos) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byCommentPos) Less(i, j int) bool { return x[i].Pos() < x[j].Pos() } diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/zstdlib.go new file mode 100644 index 000000000000..31a75949cdc5 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/zstdlib.go @@ -0,0 +1,11115 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by mkstdlib.go. DO NOT EDIT. + +package imports + +var stdlib = map[string][]string{ + "archive/tar": { + "ErrFieldTooLong", + "ErrHeader", + "ErrInsecurePath", + "ErrWriteAfterClose", + "ErrWriteTooLong", + "FileInfoHeader", + "Format", + "FormatGNU", + "FormatPAX", + "FormatUSTAR", + "FormatUnknown", + "Header", + "NewReader", + "NewWriter", + "Reader", + "TypeBlock", + "TypeChar", + "TypeCont", + "TypeDir", + "TypeFifo", + "TypeGNULongLink", + "TypeGNULongName", + "TypeGNUSparse", + "TypeLink", + "TypeReg", + "TypeRegA", + "TypeSymlink", + "TypeXGlobalHeader", + "TypeXHeader", + "Writer", + }, + "archive/zip": { + "Compressor", + "Decompressor", + "Deflate", + "ErrAlgorithm", + "ErrChecksum", + "ErrFormat", + "ErrInsecurePath", + "File", + "FileHeader", + "FileInfoHeader", + "NewReader", + "NewWriter", + "OpenReader", + "ReadCloser", + "Reader", + "RegisterCompressor", + "RegisterDecompressor", + "Store", + "Writer", + }, + "bufio": { + "ErrAdvanceTooFar", + "ErrBadReadCount", + "ErrBufferFull", + "ErrFinalToken", + "ErrInvalidUnreadByte", + "ErrInvalidUnreadRune", + "ErrNegativeAdvance", + "ErrNegativeCount", + "ErrTooLong", + "MaxScanTokenSize", + "NewReadWriter", + "NewReader", + "NewReaderSize", + "NewScanner", + "NewWriter", + "NewWriterSize", + "ReadWriter", + "Reader", + "ScanBytes", + "ScanLines", + "ScanRunes", + "ScanWords", + "Scanner", + "SplitFunc", + "Writer", + }, + "bytes": { + "Buffer", + "Clone", + "Compare", + "Contains", + "ContainsAny", + "ContainsRune", + "Count", + "Cut", + "CutPrefix", + "CutSuffix", + "Equal", + "EqualFold", + "ErrTooLarge", + "Fields", + "FieldsFunc", + "HasPrefix", + "HasSuffix", + "Index", + "IndexAny", + "IndexByte", + "IndexFunc", + "IndexRune", + "Join", + "LastIndex", + "LastIndexAny", + "LastIndexByte", + "LastIndexFunc", + "Map", + "MinRead", + "NewBuffer", + "NewBufferString", + "NewReader", + "Reader", + "Repeat", + "Replace", + "ReplaceAll", + "Runes", + "Split", + "SplitAfter", + "SplitAfterN", + "SplitN", + "Title", + "ToLower", + "ToLowerSpecial", + "ToTitle", + "ToTitleSpecial", + "ToUpper", + "ToUpperSpecial", + "ToValidUTF8", + "Trim", + "TrimFunc", + "TrimLeft", + "TrimLeftFunc", + "TrimPrefix", + "TrimRight", + "TrimRightFunc", + "TrimSpace", + "TrimSuffix", + }, + "compress/bzip2": { + "NewReader", + "StructuralError", + }, + "compress/flate": { + "BestCompression", + "BestSpeed", + "CorruptInputError", + "DefaultCompression", + "HuffmanOnly", + "InternalError", + "NewReader", + "NewReaderDict", + "NewWriter", + "NewWriterDict", + "NoCompression", + "ReadError", + "Reader", + "Resetter", + "WriteError", + "Writer", + }, + "compress/gzip": { + "BestCompression", + "BestSpeed", + "DefaultCompression", + "ErrChecksum", + "ErrHeader", + "Header", + "HuffmanOnly", + "NewReader", + "NewWriter", + "NewWriterLevel", + "NoCompression", + "Reader", + "Writer", + }, + "compress/lzw": { + "LSB", + "MSB", + "NewReader", + "NewWriter", + "Order", + "Reader", + "Writer", + }, + "compress/zlib": { + "BestCompression", + "BestSpeed", + "DefaultCompression", + "ErrChecksum", + "ErrDictionary", + "ErrHeader", + "HuffmanOnly", + "NewReader", + "NewReaderDict", + "NewWriter", + "NewWriterLevel", + "NewWriterLevelDict", + "NoCompression", + "Resetter", + "Writer", + }, + "container/heap": { + "Fix", + "Init", + "Interface", + "Pop", + "Push", + "Remove", + }, + "container/list": { + "Element", + "List", + "New", + }, + "container/ring": { + "New", + "Ring", + }, + "context": { + "Background", + "CancelCauseFunc", + "CancelFunc", + "Canceled", + "Cause", + "Context", + "DeadlineExceeded", + "TODO", + "WithCancel", + "WithCancelCause", + "WithDeadline", + "WithTimeout", + "WithValue", + }, + "crypto": { + "BLAKE2b_256", + "BLAKE2b_384", + "BLAKE2b_512", + "BLAKE2s_256", + "Decrypter", + "DecrypterOpts", + "Hash", + "MD4", + "MD5", + "MD5SHA1", + "PrivateKey", + "PublicKey", + "RIPEMD160", + "RegisterHash", + "SHA1", + "SHA224", + "SHA256", + "SHA384", + "SHA3_224", + "SHA3_256", + "SHA3_384", + "SHA3_512", + "SHA512", + "SHA512_224", + "SHA512_256", + "Signer", + "SignerOpts", + }, + "crypto/aes": { + "BlockSize", + "KeySizeError", + "NewCipher", + }, + "crypto/cipher": { + "AEAD", + "Block", + "BlockMode", + "NewCBCDecrypter", + "NewCBCEncrypter", + "NewCFBDecrypter", + "NewCFBEncrypter", + "NewCTR", + "NewGCM", + "NewGCMWithNonceSize", + "NewGCMWithTagSize", + "NewOFB", + "Stream", + "StreamReader", + "StreamWriter", + }, + "crypto/des": { + "BlockSize", + "KeySizeError", + "NewCipher", + "NewTripleDESCipher", + }, + "crypto/dsa": { + "ErrInvalidPublicKey", + "GenerateKey", + "GenerateParameters", + "L1024N160", + "L2048N224", + "L2048N256", + "L3072N256", + "ParameterSizes", + "Parameters", + "PrivateKey", + "PublicKey", + "Sign", + "Verify", + }, + "crypto/ecdh": { + "Curve", + "P256", + "P384", + "P521", + "PrivateKey", + "PublicKey", + "X25519", + }, + "crypto/ecdsa": { + "GenerateKey", + "PrivateKey", + "PublicKey", + "Sign", + "SignASN1", + "Verify", + "VerifyASN1", + }, + "crypto/ed25519": { + "GenerateKey", + "NewKeyFromSeed", + "Options", + "PrivateKey", + "PrivateKeySize", + "PublicKey", + "PublicKeySize", + "SeedSize", + "Sign", + "SignatureSize", + "Verify", + "VerifyWithOptions", + }, + "crypto/elliptic": { + "Curve", + "CurveParams", + "GenerateKey", + "Marshal", + "MarshalCompressed", + "P224", + "P256", + "P384", + "P521", + "Unmarshal", + "UnmarshalCompressed", + }, + "crypto/hmac": { + "Equal", + "New", + }, + "crypto/md5": { + "BlockSize", + "New", + "Size", + "Sum", + }, + "crypto/rand": { + "Int", + "Prime", + "Read", + "Reader", + }, + "crypto/rc4": { + "Cipher", + "KeySizeError", + "NewCipher", + }, + "crypto/rsa": { + "CRTValue", + "DecryptOAEP", + "DecryptPKCS1v15", + "DecryptPKCS1v15SessionKey", + "EncryptOAEP", + "EncryptPKCS1v15", + "ErrDecryption", + "ErrMessageTooLong", + "ErrVerification", + "GenerateKey", + "GenerateMultiPrimeKey", + "OAEPOptions", + "PKCS1v15DecryptOptions", + "PSSOptions", + "PSSSaltLengthAuto", + "PSSSaltLengthEqualsHash", + "PrecomputedValues", + "PrivateKey", + "PublicKey", + "SignPKCS1v15", + "SignPSS", + "VerifyPKCS1v15", + "VerifyPSS", + }, + "crypto/sha1": { + "BlockSize", + "New", + "Size", + "Sum", + }, + "crypto/sha256": { + "BlockSize", + "New", + "New224", + "Size", + "Size224", + "Sum224", + "Sum256", + }, + "crypto/sha512": { + "BlockSize", + "New", + "New384", + "New512_224", + "New512_256", + "Size", + "Size224", + "Size256", + "Size384", + "Sum384", + "Sum512", + "Sum512_224", + "Sum512_256", + }, + "crypto/subtle": { + "ConstantTimeByteEq", + "ConstantTimeCompare", + "ConstantTimeCopy", + "ConstantTimeEq", + "ConstantTimeLessOrEq", + "ConstantTimeSelect", + "XORBytes", + }, + "crypto/tls": { + "Certificate", + "CertificateRequestInfo", + "CertificateVerificationError", + "CipherSuite", + "CipherSuiteName", + "CipherSuites", + "Client", + "ClientAuthType", + "ClientHelloInfo", + "ClientSessionCache", + "ClientSessionState", + "Config", + "Conn", + "ConnectionState", + "CurveID", + "CurveP256", + "CurveP384", + "CurveP521", + "Dial", + "DialWithDialer", + "Dialer", + "ECDSAWithP256AndSHA256", + "ECDSAWithP384AndSHA384", + "ECDSAWithP521AndSHA512", + "ECDSAWithSHA1", + "Ed25519", + "InsecureCipherSuites", + "Listen", + "LoadX509KeyPair", + "NewLRUClientSessionCache", + "NewListener", + "NoClientCert", + "PKCS1WithSHA1", + "PKCS1WithSHA256", + "PKCS1WithSHA384", + "PKCS1WithSHA512", + "PSSWithSHA256", + "PSSWithSHA384", + "PSSWithSHA512", + "RecordHeaderError", + "RenegotiateFreelyAsClient", + "RenegotiateNever", + "RenegotiateOnceAsClient", + "RenegotiationSupport", + "RequestClientCert", + "RequireAndVerifyClientCert", + "RequireAnyClientCert", + "Server", + "SignatureScheme", + "TLS_AES_128_GCM_SHA256", + "TLS_AES_256_GCM_SHA384", + "TLS_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + "TLS_FALLBACK_SCSV", + "TLS_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_GCM_SHA256", + "TLS_RSA_WITH_AES_256_CBC_SHA", + "TLS_RSA_WITH_AES_256_GCM_SHA384", + "TLS_RSA_WITH_RC4_128_SHA", + "VerifyClientCertIfGiven", + "VersionSSL30", + "VersionTLS10", + "VersionTLS11", + "VersionTLS12", + "VersionTLS13", + "X25519", + "X509KeyPair", + }, + "crypto/x509": { + "CANotAuthorizedForExtKeyUsage", + "CANotAuthorizedForThisName", + "CertPool", + "Certificate", + "CertificateInvalidError", + "CertificateRequest", + "ConstraintViolationError", + "CreateCertificate", + "CreateCertificateRequest", + "CreateRevocationList", + "DSA", + "DSAWithSHA1", + "DSAWithSHA256", + "DecryptPEMBlock", + "ECDSA", + "ECDSAWithSHA1", + "ECDSAWithSHA256", + "ECDSAWithSHA384", + "ECDSAWithSHA512", + "Ed25519", + "EncryptPEMBlock", + "ErrUnsupportedAlgorithm", + "Expired", + "ExtKeyUsage", + "ExtKeyUsageAny", + "ExtKeyUsageClientAuth", + "ExtKeyUsageCodeSigning", + "ExtKeyUsageEmailProtection", + "ExtKeyUsageIPSECEndSystem", + "ExtKeyUsageIPSECTunnel", + "ExtKeyUsageIPSECUser", + "ExtKeyUsageMicrosoftCommercialCodeSigning", + "ExtKeyUsageMicrosoftKernelCodeSigning", + "ExtKeyUsageMicrosoftServerGatedCrypto", + "ExtKeyUsageNetscapeServerGatedCrypto", + "ExtKeyUsageOCSPSigning", + "ExtKeyUsageServerAuth", + "ExtKeyUsageTimeStamping", + "HostnameError", + "IncompatibleUsage", + "IncorrectPasswordError", + "InsecureAlgorithmError", + "InvalidReason", + "IsEncryptedPEMBlock", + "KeyUsage", + "KeyUsageCRLSign", + "KeyUsageCertSign", + "KeyUsageContentCommitment", + "KeyUsageDataEncipherment", + "KeyUsageDecipherOnly", + "KeyUsageDigitalSignature", + "KeyUsageEncipherOnly", + "KeyUsageKeyAgreement", + "KeyUsageKeyEncipherment", + "MD2WithRSA", + "MD5WithRSA", + "MarshalECPrivateKey", + "MarshalPKCS1PrivateKey", + "MarshalPKCS1PublicKey", + "MarshalPKCS8PrivateKey", + "MarshalPKIXPublicKey", + "NameConstraintsWithoutSANs", + "NameMismatch", + "NewCertPool", + "NotAuthorizedToSign", + "PEMCipher", + "PEMCipher3DES", + "PEMCipherAES128", + "PEMCipherAES192", + "PEMCipherAES256", + "PEMCipherDES", + "ParseCRL", + "ParseCertificate", + "ParseCertificateRequest", + "ParseCertificates", + "ParseDERCRL", + "ParseECPrivateKey", + "ParsePKCS1PrivateKey", + "ParsePKCS1PublicKey", + "ParsePKCS8PrivateKey", + "ParsePKIXPublicKey", + "ParseRevocationList", + "PublicKeyAlgorithm", + "PureEd25519", + "RSA", + "RevocationList", + "SHA1WithRSA", + "SHA256WithRSA", + "SHA256WithRSAPSS", + "SHA384WithRSA", + "SHA384WithRSAPSS", + "SHA512WithRSA", + "SHA512WithRSAPSS", + "SetFallbackRoots", + "SignatureAlgorithm", + "SystemCertPool", + "SystemRootsError", + "TooManyConstraints", + "TooManyIntermediates", + "UnconstrainedName", + "UnhandledCriticalExtension", + "UnknownAuthorityError", + "UnknownPublicKeyAlgorithm", + "UnknownSignatureAlgorithm", + "VerifyOptions", + }, + "crypto/x509/pkix": { + "AlgorithmIdentifier", + "AttributeTypeAndValue", + "AttributeTypeAndValueSET", + "CertificateList", + "Extension", + "Name", + "RDNSequence", + "RelativeDistinguishedNameSET", + "RevokedCertificate", + "TBSCertificateList", + }, + "database/sql": { + "ColumnType", + "Conn", + "DB", + "DBStats", + "Drivers", + "ErrConnDone", + "ErrNoRows", + "ErrTxDone", + "IsolationLevel", + "LevelDefault", + "LevelLinearizable", + "LevelReadCommitted", + "LevelReadUncommitted", + "LevelRepeatableRead", + "LevelSerializable", + "LevelSnapshot", + "LevelWriteCommitted", + "Named", + "NamedArg", + "NullBool", + "NullByte", + "NullFloat64", + "NullInt16", + "NullInt32", + "NullInt64", + "NullString", + "NullTime", + "Open", + "OpenDB", + "Out", + "RawBytes", + "Register", + "Result", + "Row", + "Rows", + "Scanner", + "Stmt", + "Tx", + "TxOptions", + }, + "database/sql/driver": { + "Bool", + "ColumnConverter", + "Conn", + "ConnBeginTx", + "ConnPrepareContext", + "Connector", + "DefaultParameterConverter", + "Driver", + "DriverContext", + "ErrBadConn", + "ErrRemoveArgument", + "ErrSkip", + "Execer", + "ExecerContext", + "Int32", + "IsScanValue", + "IsValue", + "IsolationLevel", + "NamedValue", + "NamedValueChecker", + "NotNull", + "Null", + "Pinger", + "Queryer", + "QueryerContext", + "Result", + "ResultNoRows", + "Rows", + "RowsAffected", + "RowsColumnTypeDatabaseTypeName", + "RowsColumnTypeLength", + "RowsColumnTypeNullable", + "RowsColumnTypePrecisionScale", + "RowsColumnTypeScanType", + "RowsNextResultSet", + "SessionResetter", + "Stmt", + "StmtExecContext", + "StmtQueryContext", + "String", + "Tx", + "TxOptions", + "Validator", + "Value", + "ValueConverter", + "Valuer", + }, + "debug/buildinfo": { + "BuildInfo", + "Read", + "ReadFile", + }, + "debug/dwarf": { + "AddrType", + "ArrayType", + "Attr", + "AttrAbstractOrigin", + "AttrAccessibility", + "AttrAddrBase", + "AttrAddrClass", + "AttrAlignment", + "AttrAllocated", + "AttrArtificial", + "AttrAssociated", + "AttrBaseTypes", + "AttrBinaryScale", + "AttrBitOffset", + "AttrBitSize", + "AttrByteSize", + "AttrCallAllCalls", + "AttrCallAllSourceCalls", + "AttrCallAllTailCalls", + "AttrCallColumn", + "AttrCallDataLocation", + "AttrCallDataValue", + "AttrCallFile", + "AttrCallLine", + "AttrCallOrigin", + "AttrCallPC", + "AttrCallParameter", + "AttrCallReturnPC", + "AttrCallTailCall", + "AttrCallTarget", + "AttrCallTargetClobbered", + "AttrCallValue", + "AttrCalling", + "AttrCommonRef", + "AttrCompDir", + "AttrConstExpr", + "AttrConstValue", + "AttrContainingType", + "AttrCount", + "AttrDataBitOffset", + "AttrDataLocation", + "AttrDataMemberLoc", + "AttrDecimalScale", + "AttrDecimalSign", + "AttrDeclColumn", + "AttrDeclFile", + "AttrDeclLine", + "AttrDeclaration", + "AttrDefaultValue", + "AttrDefaulted", + "AttrDeleted", + "AttrDescription", + "AttrDigitCount", + "AttrDiscr", + "AttrDiscrList", + "AttrDiscrValue", + "AttrDwoName", + "AttrElemental", + "AttrEncoding", + "AttrEndianity", + "AttrEntrypc", + "AttrEnumClass", + "AttrExplicit", + "AttrExportSymbols", + "AttrExtension", + "AttrExternal", + "AttrFrameBase", + "AttrFriend", + "AttrHighpc", + "AttrIdentifierCase", + "AttrImport", + "AttrInline", + "AttrIsOptional", + "AttrLanguage", + "AttrLinkageName", + "AttrLocation", + "AttrLoclistsBase", + "AttrLowerBound", + "AttrLowpc", + "AttrMacroInfo", + "AttrMacros", + "AttrMainSubprogram", + "AttrMutable", + "AttrName", + "AttrNamelistItem", + "AttrNoreturn", + "AttrObjectPointer", + "AttrOrdering", + "AttrPictureString", + "AttrPriority", + "AttrProducer", + "AttrPrototyped", + "AttrPure", + "AttrRanges", + "AttrRank", + "AttrRecursive", + "AttrReference", + "AttrReturnAddr", + "AttrRnglistsBase", + "AttrRvalueReference", + "AttrSegment", + "AttrSibling", + "AttrSignature", + "AttrSmall", + "AttrSpecification", + "AttrStartScope", + "AttrStaticLink", + "AttrStmtList", + "AttrStrOffsetsBase", + "AttrStride", + "AttrStrideSize", + "AttrStringLength", + "AttrStringLengthBitSize", + "AttrStringLengthByteSize", + "AttrThreadsScaled", + "AttrTrampoline", + "AttrType", + "AttrUpperBound", + "AttrUseLocation", + "AttrUseUTF8", + "AttrVarParam", + "AttrVirtuality", + "AttrVisibility", + "AttrVtableElemLoc", + "BasicType", + "BoolType", + "CharType", + "Class", + "ClassAddrPtr", + "ClassAddress", + "ClassBlock", + "ClassConstant", + "ClassExprLoc", + "ClassFlag", + "ClassLinePtr", + "ClassLocList", + "ClassLocListPtr", + "ClassMacPtr", + "ClassRangeListPtr", + "ClassReference", + "ClassReferenceAlt", + "ClassReferenceSig", + "ClassRngList", + "ClassRngListsPtr", + "ClassStrOffsetsPtr", + "ClassString", + "ClassStringAlt", + "ClassUnknown", + "CommonType", + "ComplexType", + "Data", + "DecodeError", + "DotDotDotType", + "Entry", + "EnumType", + "EnumValue", + "ErrUnknownPC", + "Field", + "FloatType", + "FuncType", + "IntType", + "LineEntry", + "LineFile", + "LineReader", + "LineReaderPos", + "New", + "Offset", + "PtrType", + "QualType", + "Reader", + "StructField", + "StructType", + "Tag", + "TagAccessDeclaration", + "TagArrayType", + "TagAtomicType", + "TagBaseType", + "TagCallSite", + "TagCallSiteParameter", + "TagCatchDwarfBlock", + "TagClassType", + "TagCoarrayType", + "TagCommonDwarfBlock", + "TagCommonInclusion", + "TagCompileUnit", + "TagCondition", + "TagConstType", + "TagConstant", + "TagDwarfProcedure", + "TagDynamicType", + "TagEntryPoint", + "TagEnumerationType", + "TagEnumerator", + "TagFileType", + "TagFormalParameter", + "TagFriend", + "TagGenericSubrange", + "TagImmutableType", + "TagImportedDeclaration", + "TagImportedModule", + "TagImportedUnit", + "TagInheritance", + "TagInlinedSubroutine", + "TagInterfaceType", + "TagLabel", + "TagLexDwarfBlock", + "TagMember", + "TagModule", + "TagMutableType", + "TagNamelist", + "TagNamelistItem", + "TagNamespace", + "TagPackedType", + "TagPartialUnit", + "TagPointerType", + "TagPtrToMemberType", + "TagReferenceType", + "TagRestrictType", + "TagRvalueReferenceType", + "TagSetType", + "TagSharedType", + "TagSkeletonUnit", + "TagStringType", + "TagStructType", + "TagSubprogram", + "TagSubrangeType", + "TagSubroutineType", + "TagTemplateAlias", + "TagTemplateTypeParameter", + "TagTemplateValueParameter", + "TagThrownType", + "TagTryDwarfBlock", + "TagTypeUnit", + "TagTypedef", + "TagUnionType", + "TagUnspecifiedParameters", + "TagUnspecifiedType", + "TagVariable", + "TagVariant", + "TagVariantPart", + "TagVolatileType", + "TagWithStmt", + "Type", + "TypedefType", + "UcharType", + "UintType", + "UnspecifiedType", + "UnsupportedType", + "VoidType", + }, + "debug/elf": { + "ARM_MAGIC_TRAMP_NUMBER", + "COMPRESS_HIOS", + "COMPRESS_HIPROC", + "COMPRESS_LOOS", + "COMPRESS_LOPROC", + "COMPRESS_ZLIB", + "Chdr32", + "Chdr64", + "Class", + "CompressionType", + "DF_BIND_NOW", + "DF_ORIGIN", + "DF_STATIC_TLS", + "DF_SYMBOLIC", + "DF_TEXTREL", + "DT_ADDRRNGHI", + "DT_ADDRRNGLO", + "DT_AUDIT", + "DT_AUXILIARY", + "DT_BIND_NOW", + "DT_CHECKSUM", + "DT_CONFIG", + "DT_DEBUG", + "DT_DEPAUDIT", + "DT_ENCODING", + "DT_FEATURE", + "DT_FILTER", + "DT_FINI", + "DT_FINI_ARRAY", + "DT_FINI_ARRAYSZ", + "DT_FLAGS", + "DT_FLAGS_1", + "DT_GNU_CONFLICT", + "DT_GNU_CONFLICTSZ", + "DT_GNU_HASH", + "DT_GNU_LIBLIST", + "DT_GNU_LIBLISTSZ", + "DT_GNU_PRELINKED", + "DT_HASH", + "DT_HIOS", + "DT_HIPROC", + "DT_INIT", + "DT_INIT_ARRAY", + "DT_INIT_ARRAYSZ", + "DT_JMPREL", + "DT_LOOS", + "DT_LOPROC", + "DT_MIPS_AUX_DYNAMIC", + "DT_MIPS_BASE_ADDRESS", + "DT_MIPS_COMPACT_SIZE", + "DT_MIPS_CONFLICT", + "DT_MIPS_CONFLICTNO", + "DT_MIPS_CXX_FLAGS", + "DT_MIPS_DELTA_CLASS", + "DT_MIPS_DELTA_CLASSSYM", + "DT_MIPS_DELTA_CLASSSYM_NO", + "DT_MIPS_DELTA_CLASS_NO", + "DT_MIPS_DELTA_INSTANCE", + "DT_MIPS_DELTA_INSTANCE_NO", + "DT_MIPS_DELTA_RELOC", + "DT_MIPS_DELTA_RELOC_NO", + "DT_MIPS_DELTA_SYM", + "DT_MIPS_DELTA_SYM_NO", + "DT_MIPS_DYNSTR_ALIGN", + "DT_MIPS_FLAGS", + "DT_MIPS_GOTSYM", + "DT_MIPS_GP_VALUE", + "DT_MIPS_HIDDEN_GOTIDX", + "DT_MIPS_HIPAGENO", + "DT_MIPS_ICHECKSUM", + "DT_MIPS_INTERFACE", + "DT_MIPS_INTERFACE_SIZE", + "DT_MIPS_IVERSION", + "DT_MIPS_LIBLIST", + "DT_MIPS_LIBLISTNO", + "DT_MIPS_LOCALPAGE_GOTIDX", + "DT_MIPS_LOCAL_GOTIDX", + "DT_MIPS_LOCAL_GOTNO", + "DT_MIPS_MSYM", + "DT_MIPS_OPTIONS", + "DT_MIPS_PERF_SUFFIX", + "DT_MIPS_PIXIE_INIT", + "DT_MIPS_PLTGOT", + "DT_MIPS_PROTECTED_GOTIDX", + "DT_MIPS_RLD_MAP", + "DT_MIPS_RLD_MAP_REL", + "DT_MIPS_RLD_TEXT_RESOLVE_ADDR", + "DT_MIPS_RLD_VERSION", + "DT_MIPS_RWPLT", + "DT_MIPS_SYMBOL_LIB", + "DT_MIPS_SYMTABNO", + "DT_MIPS_TIME_STAMP", + "DT_MIPS_UNREFEXTNO", + "DT_MOVEENT", + "DT_MOVESZ", + "DT_MOVETAB", + "DT_NEEDED", + "DT_NULL", + "DT_PLTGOT", + "DT_PLTPAD", + "DT_PLTPADSZ", + "DT_PLTREL", + "DT_PLTRELSZ", + "DT_POSFLAG_1", + "DT_PPC64_GLINK", + "DT_PPC64_OPD", + "DT_PPC64_OPDSZ", + "DT_PPC64_OPT", + "DT_PPC_GOT", + "DT_PPC_OPT", + "DT_PREINIT_ARRAY", + "DT_PREINIT_ARRAYSZ", + "DT_REL", + "DT_RELA", + "DT_RELACOUNT", + "DT_RELAENT", + "DT_RELASZ", + "DT_RELCOUNT", + "DT_RELENT", + "DT_RELSZ", + "DT_RPATH", + "DT_RUNPATH", + "DT_SONAME", + "DT_SPARC_REGISTER", + "DT_STRSZ", + "DT_STRTAB", + "DT_SYMBOLIC", + "DT_SYMENT", + "DT_SYMINENT", + "DT_SYMINFO", + "DT_SYMINSZ", + "DT_SYMTAB", + "DT_SYMTAB_SHNDX", + "DT_TEXTREL", + "DT_TLSDESC_GOT", + "DT_TLSDESC_PLT", + "DT_USED", + "DT_VALRNGHI", + "DT_VALRNGLO", + "DT_VERDEF", + "DT_VERDEFNUM", + "DT_VERNEED", + "DT_VERNEEDNUM", + "DT_VERSYM", + "Data", + "Dyn32", + "Dyn64", + "DynFlag", + "DynTag", + "EI_ABIVERSION", + "EI_CLASS", + "EI_DATA", + "EI_NIDENT", + "EI_OSABI", + "EI_PAD", + "EI_VERSION", + "ELFCLASS32", + "ELFCLASS64", + "ELFCLASSNONE", + "ELFDATA2LSB", + "ELFDATA2MSB", + "ELFDATANONE", + "ELFMAG", + "ELFOSABI_86OPEN", + "ELFOSABI_AIX", + "ELFOSABI_ARM", + "ELFOSABI_AROS", + "ELFOSABI_CLOUDABI", + "ELFOSABI_FENIXOS", + "ELFOSABI_FREEBSD", + "ELFOSABI_HPUX", + "ELFOSABI_HURD", + "ELFOSABI_IRIX", + "ELFOSABI_LINUX", + "ELFOSABI_MODESTO", + "ELFOSABI_NETBSD", + "ELFOSABI_NONE", + "ELFOSABI_NSK", + "ELFOSABI_OPENBSD", + "ELFOSABI_OPENVMS", + "ELFOSABI_SOLARIS", + "ELFOSABI_STANDALONE", + "ELFOSABI_TRU64", + "EM_386", + "EM_486", + "EM_56800EX", + "EM_68HC05", + "EM_68HC08", + "EM_68HC11", + "EM_68HC12", + "EM_68HC16", + "EM_68K", + "EM_78KOR", + "EM_8051", + "EM_860", + "EM_88K", + "EM_960", + "EM_AARCH64", + "EM_ALPHA", + "EM_ALPHA_STD", + "EM_ALTERA_NIOS2", + "EM_AMDGPU", + "EM_ARC", + "EM_ARCA", + "EM_ARC_COMPACT", + "EM_ARC_COMPACT2", + "EM_ARM", + "EM_AVR", + "EM_AVR32", + "EM_BA1", + "EM_BA2", + "EM_BLACKFIN", + "EM_BPF", + "EM_C166", + "EM_CDP", + "EM_CE", + "EM_CLOUDSHIELD", + "EM_COGE", + "EM_COLDFIRE", + "EM_COOL", + "EM_COREA_1ST", + "EM_COREA_2ND", + "EM_CR", + "EM_CR16", + "EM_CRAYNV2", + "EM_CRIS", + "EM_CRX", + "EM_CSR_KALIMBA", + "EM_CUDA", + "EM_CYPRESS_M8C", + "EM_D10V", + "EM_D30V", + "EM_DSP24", + "EM_DSPIC30F", + "EM_DXP", + "EM_ECOG1", + "EM_ECOG16", + "EM_ECOG1X", + "EM_ECOG2", + "EM_ETPU", + "EM_EXCESS", + "EM_F2MC16", + "EM_FIREPATH", + "EM_FR20", + "EM_FR30", + "EM_FT32", + "EM_FX66", + "EM_H8S", + "EM_H8_300", + "EM_H8_300H", + "EM_H8_500", + "EM_HUANY", + "EM_IA_64", + "EM_INTEL205", + "EM_INTEL206", + "EM_INTEL207", + "EM_INTEL208", + "EM_INTEL209", + "EM_IP2K", + "EM_JAVELIN", + "EM_K10M", + "EM_KM32", + "EM_KMX16", + "EM_KMX32", + "EM_KMX8", + "EM_KVARC", + "EM_L10M", + "EM_LANAI", + "EM_LATTICEMICO32", + "EM_LOONGARCH", + "EM_M16C", + "EM_M32", + "EM_M32C", + "EM_M32R", + "EM_MANIK", + "EM_MAX", + "EM_MAXQ30", + "EM_MCHP_PIC", + "EM_MCST_ELBRUS", + "EM_ME16", + "EM_METAG", + "EM_MICROBLAZE", + "EM_MIPS", + "EM_MIPS_RS3_LE", + "EM_MIPS_RS4_BE", + "EM_MIPS_X", + "EM_MMA", + "EM_MMDSP_PLUS", + "EM_MMIX", + "EM_MN10200", + "EM_MN10300", + "EM_MOXIE", + "EM_MSP430", + "EM_NCPU", + "EM_NDR1", + "EM_NDS32", + "EM_NONE", + "EM_NORC", + "EM_NS32K", + "EM_OPEN8", + "EM_OPENRISC", + "EM_PARISC", + "EM_PCP", + "EM_PDP10", + "EM_PDP11", + "EM_PDSP", + "EM_PJ", + "EM_PPC", + "EM_PPC64", + "EM_PRISM", + "EM_QDSP6", + "EM_R32C", + "EM_RCE", + "EM_RH32", + "EM_RISCV", + "EM_RL78", + "EM_RS08", + "EM_RX", + "EM_S370", + "EM_S390", + "EM_SCORE7", + "EM_SEP", + "EM_SE_C17", + "EM_SE_C33", + "EM_SH", + "EM_SHARC", + "EM_SLE9X", + "EM_SNP1K", + "EM_SPARC", + "EM_SPARC32PLUS", + "EM_SPARCV9", + "EM_ST100", + "EM_ST19", + "EM_ST200", + "EM_ST7", + "EM_ST9PLUS", + "EM_STARCORE", + "EM_STM8", + "EM_STXP7X", + "EM_SVX", + "EM_TILE64", + "EM_TILEGX", + "EM_TILEPRO", + "EM_TINYJ", + "EM_TI_ARP32", + "EM_TI_C2000", + "EM_TI_C5500", + "EM_TI_C6000", + "EM_TI_PRU", + "EM_TMM_GPP", + "EM_TPC", + "EM_TRICORE", + "EM_TRIMEDIA", + "EM_TSK3000", + "EM_UNICORE", + "EM_V800", + "EM_V850", + "EM_VAX", + "EM_VIDEOCORE", + "EM_VIDEOCORE3", + "EM_VIDEOCORE5", + "EM_VISIUM", + "EM_VPP500", + "EM_X86_64", + "EM_XCORE", + "EM_XGATE", + "EM_XIMO16", + "EM_XTENSA", + "EM_Z80", + "EM_ZSP", + "ET_CORE", + "ET_DYN", + "ET_EXEC", + "ET_HIOS", + "ET_HIPROC", + "ET_LOOS", + "ET_LOPROC", + "ET_NONE", + "ET_REL", + "EV_CURRENT", + "EV_NONE", + "ErrNoSymbols", + "File", + "FileHeader", + "FormatError", + "Header32", + "Header64", + "ImportedSymbol", + "Machine", + "NT_FPREGSET", + "NT_PRPSINFO", + "NT_PRSTATUS", + "NType", + "NewFile", + "OSABI", + "Open", + "PF_MASKOS", + "PF_MASKPROC", + "PF_R", + "PF_W", + "PF_X", + "PT_AARCH64_ARCHEXT", + "PT_AARCH64_UNWIND", + "PT_ARM_ARCHEXT", + "PT_ARM_EXIDX", + "PT_DYNAMIC", + "PT_GNU_EH_FRAME", + "PT_GNU_MBIND_HI", + "PT_GNU_MBIND_LO", + "PT_GNU_PROPERTY", + "PT_GNU_RELRO", + "PT_GNU_STACK", + "PT_HIOS", + "PT_HIPROC", + "PT_INTERP", + "PT_LOAD", + "PT_LOOS", + "PT_LOPROC", + "PT_MIPS_ABIFLAGS", + "PT_MIPS_OPTIONS", + "PT_MIPS_REGINFO", + "PT_MIPS_RTPROC", + "PT_NOTE", + "PT_NULL", + "PT_OPENBSD_BOOTDATA", + "PT_OPENBSD_RANDOMIZE", + "PT_OPENBSD_WXNEEDED", + "PT_PAX_FLAGS", + "PT_PHDR", + "PT_S390_PGSTE", + "PT_SHLIB", + "PT_SUNWSTACK", + "PT_SUNW_EH_FRAME", + "PT_TLS", + "Prog", + "Prog32", + "Prog64", + "ProgFlag", + "ProgHeader", + "ProgType", + "R_386", + "R_386_16", + "R_386_32", + "R_386_32PLT", + "R_386_8", + "R_386_COPY", + "R_386_GLOB_DAT", + "R_386_GOT32", + "R_386_GOT32X", + "R_386_GOTOFF", + "R_386_GOTPC", + "R_386_IRELATIVE", + "R_386_JMP_SLOT", + "R_386_NONE", + "R_386_PC16", + "R_386_PC32", + "R_386_PC8", + "R_386_PLT32", + "R_386_RELATIVE", + "R_386_SIZE32", + "R_386_TLS_DESC", + "R_386_TLS_DESC_CALL", + "R_386_TLS_DTPMOD32", + "R_386_TLS_DTPOFF32", + "R_386_TLS_GD", + "R_386_TLS_GD_32", + "R_386_TLS_GD_CALL", + "R_386_TLS_GD_POP", + "R_386_TLS_GD_PUSH", + "R_386_TLS_GOTDESC", + "R_386_TLS_GOTIE", + "R_386_TLS_IE", + "R_386_TLS_IE_32", + "R_386_TLS_LDM", + "R_386_TLS_LDM_32", + "R_386_TLS_LDM_CALL", + "R_386_TLS_LDM_POP", + "R_386_TLS_LDM_PUSH", + "R_386_TLS_LDO_32", + "R_386_TLS_LE", + "R_386_TLS_LE_32", + "R_386_TLS_TPOFF", + "R_386_TLS_TPOFF32", + "R_390", + "R_390_12", + "R_390_16", + "R_390_20", + "R_390_32", + "R_390_64", + "R_390_8", + "R_390_COPY", + "R_390_GLOB_DAT", + "R_390_GOT12", + "R_390_GOT16", + "R_390_GOT20", + "R_390_GOT32", + "R_390_GOT64", + "R_390_GOTENT", + "R_390_GOTOFF", + "R_390_GOTOFF16", + "R_390_GOTOFF64", + "R_390_GOTPC", + "R_390_GOTPCDBL", + "R_390_GOTPLT12", + "R_390_GOTPLT16", + "R_390_GOTPLT20", + "R_390_GOTPLT32", + "R_390_GOTPLT64", + "R_390_GOTPLTENT", + "R_390_GOTPLTOFF16", + "R_390_GOTPLTOFF32", + "R_390_GOTPLTOFF64", + "R_390_JMP_SLOT", + "R_390_NONE", + "R_390_PC16", + "R_390_PC16DBL", + "R_390_PC32", + "R_390_PC32DBL", + "R_390_PC64", + "R_390_PLT16DBL", + "R_390_PLT32", + "R_390_PLT32DBL", + "R_390_PLT64", + "R_390_RELATIVE", + "R_390_TLS_DTPMOD", + "R_390_TLS_DTPOFF", + "R_390_TLS_GD32", + "R_390_TLS_GD64", + "R_390_TLS_GDCALL", + "R_390_TLS_GOTIE12", + "R_390_TLS_GOTIE20", + "R_390_TLS_GOTIE32", + "R_390_TLS_GOTIE64", + "R_390_TLS_IE32", + "R_390_TLS_IE64", + "R_390_TLS_IEENT", + "R_390_TLS_LDCALL", + "R_390_TLS_LDM32", + "R_390_TLS_LDM64", + "R_390_TLS_LDO32", + "R_390_TLS_LDO64", + "R_390_TLS_LE32", + "R_390_TLS_LE64", + "R_390_TLS_LOAD", + "R_390_TLS_TPOFF", + "R_AARCH64", + "R_AARCH64_ABS16", + "R_AARCH64_ABS32", + "R_AARCH64_ABS64", + "R_AARCH64_ADD_ABS_LO12_NC", + "R_AARCH64_ADR_GOT_PAGE", + "R_AARCH64_ADR_PREL_LO21", + "R_AARCH64_ADR_PREL_PG_HI21", + "R_AARCH64_ADR_PREL_PG_HI21_NC", + "R_AARCH64_CALL26", + "R_AARCH64_CONDBR19", + "R_AARCH64_COPY", + "R_AARCH64_GLOB_DAT", + "R_AARCH64_GOT_LD_PREL19", + "R_AARCH64_IRELATIVE", + "R_AARCH64_JUMP26", + "R_AARCH64_JUMP_SLOT", + "R_AARCH64_LD64_GOTOFF_LO15", + "R_AARCH64_LD64_GOTPAGE_LO15", + "R_AARCH64_LD64_GOT_LO12_NC", + "R_AARCH64_LDST128_ABS_LO12_NC", + "R_AARCH64_LDST16_ABS_LO12_NC", + "R_AARCH64_LDST32_ABS_LO12_NC", + "R_AARCH64_LDST64_ABS_LO12_NC", + "R_AARCH64_LDST8_ABS_LO12_NC", + "R_AARCH64_LD_PREL_LO19", + "R_AARCH64_MOVW_SABS_G0", + "R_AARCH64_MOVW_SABS_G1", + "R_AARCH64_MOVW_SABS_G2", + "R_AARCH64_MOVW_UABS_G0", + "R_AARCH64_MOVW_UABS_G0_NC", + "R_AARCH64_MOVW_UABS_G1", + "R_AARCH64_MOVW_UABS_G1_NC", + "R_AARCH64_MOVW_UABS_G2", + "R_AARCH64_MOVW_UABS_G2_NC", + "R_AARCH64_MOVW_UABS_G3", + "R_AARCH64_NONE", + "R_AARCH64_NULL", + "R_AARCH64_P32_ABS16", + "R_AARCH64_P32_ABS32", + "R_AARCH64_P32_ADD_ABS_LO12_NC", + "R_AARCH64_P32_ADR_GOT_PAGE", + "R_AARCH64_P32_ADR_PREL_LO21", + "R_AARCH64_P32_ADR_PREL_PG_HI21", + "R_AARCH64_P32_CALL26", + "R_AARCH64_P32_CONDBR19", + "R_AARCH64_P32_COPY", + "R_AARCH64_P32_GLOB_DAT", + "R_AARCH64_P32_GOT_LD_PREL19", + "R_AARCH64_P32_IRELATIVE", + "R_AARCH64_P32_JUMP26", + "R_AARCH64_P32_JUMP_SLOT", + "R_AARCH64_P32_LD32_GOT_LO12_NC", + "R_AARCH64_P32_LDST128_ABS_LO12_NC", + "R_AARCH64_P32_LDST16_ABS_LO12_NC", + "R_AARCH64_P32_LDST32_ABS_LO12_NC", + "R_AARCH64_P32_LDST64_ABS_LO12_NC", + "R_AARCH64_P32_LDST8_ABS_LO12_NC", + "R_AARCH64_P32_LD_PREL_LO19", + "R_AARCH64_P32_MOVW_SABS_G0", + "R_AARCH64_P32_MOVW_UABS_G0", + "R_AARCH64_P32_MOVW_UABS_G0_NC", + "R_AARCH64_P32_MOVW_UABS_G1", + "R_AARCH64_P32_PREL16", + "R_AARCH64_P32_PREL32", + "R_AARCH64_P32_RELATIVE", + "R_AARCH64_P32_TLSDESC", + "R_AARCH64_P32_TLSDESC_ADD_LO12_NC", + "R_AARCH64_P32_TLSDESC_ADR_PAGE21", + "R_AARCH64_P32_TLSDESC_ADR_PREL21", + "R_AARCH64_P32_TLSDESC_CALL", + "R_AARCH64_P32_TLSDESC_LD32_LO12_NC", + "R_AARCH64_P32_TLSDESC_LD_PREL19", + "R_AARCH64_P32_TLSGD_ADD_LO12_NC", + "R_AARCH64_P32_TLSGD_ADR_PAGE21", + "R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21", + "R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC", + "R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19", + "R_AARCH64_P32_TLSLE_ADD_TPREL_HI12", + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12", + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC", + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0", + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC", + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G1", + "R_AARCH64_P32_TLS_DTPMOD", + "R_AARCH64_P32_TLS_DTPREL", + "R_AARCH64_P32_TLS_TPREL", + "R_AARCH64_P32_TSTBR14", + "R_AARCH64_PREL16", + "R_AARCH64_PREL32", + "R_AARCH64_PREL64", + "R_AARCH64_RELATIVE", + "R_AARCH64_TLSDESC", + "R_AARCH64_TLSDESC_ADD", + "R_AARCH64_TLSDESC_ADD_LO12_NC", + "R_AARCH64_TLSDESC_ADR_PAGE21", + "R_AARCH64_TLSDESC_ADR_PREL21", + "R_AARCH64_TLSDESC_CALL", + "R_AARCH64_TLSDESC_LD64_LO12_NC", + "R_AARCH64_TLSDESC_LDR", + "R_AARCH64_TLSDESC_LD_PREL19", + "R_AARCH64_TLSDESC_OFF_G0_NC", + "R_AARCH64_TLSDESC_OFF_G1", + "R_AARCH64_TLSGD_ADD_LO12_NC", + "R_AARCH64_TLSGD_ADR_PAGE21", + "R_AARCH64_TLSGD_ADR_PREL21", + "R_AARCH64_TLSGD_MOVW_G0_NC", + "R_AARCH64_TLSGD_MOVW_G1", + "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", + "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", + "R_AARCH64_TLSIE_LD_GOTTPREL_PREL19", + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G1", + "R_AARCH64_TLSLD_ADR_PAGE21", + "R_AARCH64_TLSLD_ADR_PREL21", + "R_AARCH64_TLSLD_LDST128_DTPREL_LO12", + "R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC", + "R_AARCH64_TLSLE_ADD_TPREL_HI12", + "R_AARCH64_TLSLE_ADD_TPREL_LO12", + "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC", + "R_AARCH64_TLSLE_LDST128_TPREL_LO12", + "R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC", + "R_AARCH64_TLSLE_MOVW_TPREL_G0", + "R_AARCH64_TLSLE_MOVW_TPREL_G0_NC", + "R_AARCH64_TLSLE_MOVW_TPREL_G1", + "R_AARCH64_TLSLE_MOVW_TPREL_G1_NC", + "R_AARCH64_TLSLE_MOVW_TPREL_G2", + "R_AARCH64_TLS_DTPMOD64", + "R_AARCH64_TLS_DTPREL64", + "R_AARCH64_TLS_TPREL64", + "R_AARCH64_TSTBR14", + "R_ALPHA", + "R_ALPHA_BRADDR", + "R_ALPHA_COPY", + "R_ALPHA_GLOB_DAT", + "R_ALPHA_GPDISP", + "R_ALPHA_GPREL32", + "R_ALPHA_GPRELHIGH", + "R_ALPHA_GPRELLOW", + "R_ALPHA_GPVALUE", + "R_ALPHA_HINT", + "R_ALPHA_IMMED_BR_HI32", + "R_ALPHA_IMMED_GP_16", + "R_ALPHA_IMMED_GP_HI32", + "R_ALPHA_IMMED_LO32", + "R_ALPHA_IMMED_SCN_HI32", + "R_ALPHA_JMP_SLOT", + "R_ALPHA_LITERAL", + "R_ALPHA_LITUSE", + "R_ALPHA_NONE", + "R_ALPHA_OP_PRSHIFT", + "R_ALPHA_OP_PSUB", + "R_ALPHA_OP_PUSH", + "R_ALPHA_OP_STORE", + "R_ALPHA_REFLONG", + "R_ALPHA_REFQUAD", + "R_ALPHA_RELATIVE", + "R_ALPHA_SREL16", + "R_ALPHA_SREL32", + "R_ALPHA_SREL64", + "R_ARM", + "R_ARM_ABS12", + "R_ARM_ABS16", + "R_ARM_ABS32", + "R_ARM_ABS32_NOI", + "R_ARM_ABS8", + "R_ARM_ALU_PCREL_15_8", + "R_ARM_ALU_PCREL_23_15", + "R_ARM_ALU_PCREL_7_0", + "R_ARM_ALU_PC_G0", + "R_ARM_ALU_PC_G0_NC", + "R_ARM_ALU_PC_G1", + "R_ARM_ALU_PC_G1_NC", + "R_ARM_ALU_PC_G2", + "R_ARM_ALU_SBREL_19_12_NC", + "R_ARM_ALU_SBREL_27_20_CK", + "R_ARM_ALU_SB_G0", + "R_ARM_ALU_SB_G0_NC", + "R_ARM_ALU_SB_G1", + "R_ARM_ALU_SB_G1_NC", + "R_ARM_ALU_SB_G2", + "R_ARM_AMP_VCALL9", + "R_ARM_BASE_ABS", + "R_ARM_CALL", + "R_ARM_COPY", + "R_ARM_GLOB_DAT", + "R_ARM_GNU_VTENTRY", + "R_ARM_GNU_VTINHERIT", + "R_ARM_GOT32", + "R_ARM_GOTOFF", + "R_ARM_GOTOFF12", + "R_ARM_GOTPC", + "R_ARM_GOTRELAX", + "R_ARM_GOT_ABS", + "R_ARM_GOT_BREL12", + "R_ARM_GOT_PREL", + "R_ARM_IRELATIVE", + "R_ARM_JUMP24", + "R_ARM_JUMP_SLOT", + "R_ARM_LDC_PC_G0", + "R_ARM_LDC_PC_G1", + "R_ARM_LDC_PC_G2", + "R_ARM_LDC_SB_G0", + "R_ARM_LDC_SB_G1", + "R_ARM_LDC_SB_G2", + "R_ARM_LDRS_PC_G0", + "R_ARM_LDRS_PC_G1", + "R_ARM_LDRS_PC_G2", + "R_ARM_LDRS_SB_G0", + "R_ARM_LDRS_SB_G1", + "R_ARM_LDRS_SB_G2", + "R_ARM_LDR_PC_G1", + "R_ARM_LDR_PC_G2", + "R_ARM_LDR_SBREL_11_10_NC", + "R_ARM_LDR_SB_G0", + "R_ARM_LDR_SB_G1", + "R_ARM_LDR_SB_G2", + "R_ARM_ME_TOO", + "R_ARM_MOVT_ABS", + "R_ARM_MOVT_BREL", + "R_ARM_MOVT_PREL", + "R_ARM_MOVW_ABS_NC", + "R_ARM_MOVW_BREL", + "R_ARM_MOVW_BREL_NC", + "R_ARM_MOVW_PREL_NC", + "R_ARM_NONE", + "R_ARM_PC13", + "R_ARM_PC24", + "R_ARM_PLT32", + "R_ARM_PLT32_ABS", + "R_ARM_PREL31", + "R_ARM_PRIVATE_0", + "R_ARM_PRIVATE_1", + "R_ARM_PRIVATE_10", + "R_ARM_PRIVATE_11", + "R_ARM_PRIVATE_12", + "R_ARM_PRIVATE_13", + "R_ARM_PRIVATE_14", + "R_ARM_PRIVATE_15", + "R_ARM_PRIVATE_2", + "R_ARM_PRIVATE_3", + "R_ARM_PRIVATE_4", + "R_ARM_PRIVATE_5", + "R_ARM_PRIVATE_6", + "R_ARM_PRIVATE_7", + "R_ARM_PRIVATE_8", + "R_ARM_PRIVATE_9", + "R_ARM_RABS32", + "R_ARM_RBASE", + "R_ARM_REL32", + "R_ARM_REL32_NOI", + "R_ARM_RELATIVE", + "R_ARM_RPC24", + "R_ARM_RREL32", + "R_ARM_RSBREL32", + "R_ARM_RXPC25", + "R_ARM_SBREL31", + "R_ARM_SBREL32", + "R_ARM_SWI24", + "R_ARM_TARGET1", + "R_ARM_TARGET2", + "R_ARM_THM_ABS5", + "R_ARM_THM_ALU_ABS_G0_NC", + "R_ARM_THM_ALU_ABS_G1_NC", + "R_ARM_THM_ALU_ABS_G2_NC", + "R_ARM_THM_ALU_ABS_G3", + "R_ARM_THM_ALU_PREL_11_0", + "R_ARM_THM_GOT_BREL12", + "R_ARM_THM_JUMP11", + "R_ARM_THM_JUMP19", + "R_ARM_THM_JUMP24", + "R_ARM_THM_JUMP6", + "R_ARM_THM_JUMP8", + "R_ARM_THM_MOVT_ABS", + "R_ARM_THM_MOVT_BREL", + "R_ARM_THM_MOVT_PREL", + "R_ARM_THM_MOVW_ABS_NC", + "R_ARM_THM_MOVW_BREL", + "R_ARM_THM_MOVW_BREL_NC", + "R_ARM_THM_MOVW_PREL_NC", + "R_ARM_THM_PC12", + "R_ARM_THM_PC22", + "R_ARM_THM_PC8", + "R_ARM_THM_RPC22", + "R_ARM_THM_SWI8", + "R_ARM_THM_TLS_CALL", + "R_ARM_THM_TLS_DESCSEQ16", + "R_ARM_THM_TLS_DESCSEQ32", + "R_ARM_THM_XPC22", + "R_ARM_TLS_CALL", + "R_ARM_TLS_DESCSEQ", + "R_ARM_TLS_DTPMOD32", + "R_ARM_TLS_DTPOFF32", + "R_ARM_TLS_GD32", + "R_ARM_TLS_GOTDESC", + "R_ARM_TLS_IE12GP", + "R_ARM_TLS_IE32", + "R_ARM_TLS_LDM32", + "R_ARM_TLS_LDO12", + "R_ARM_TLS_LDO32", + "R_ARM_TLS_LE12", + "R_ARM_TLS_LE32", + "R_ARM_TLS_TPOFF32", + "R_ARM_V4BX", + "R_ARM_XPC25", + "R_INFO", + "R_INFO32", + "R_LARCH", + "R_LARCH_32", + "R_LARCH_32_PCREL", + "R_LARCH_64", + "R_LARCH_ABS64_HI12", + "R_LARCH_ABS64_LO20", + "R_LARCH_ABS_HI20", + "R_LARCH_ABS_LO12", + "R_LARCH_ADD16", + "R_LARCH_ADD24", + "R_LARCH_ADD32", + "R_LARCH_ADD64", + "R_LARCH_ADD8", + "R_LARCH_B16", + "R_LARCH_B21", + "R_LARCH_B26", + "R_LARCH_COPY", + "R_LARCH_GNU_VTENTRY", + "R_LARCH_GNU_VTINHERIT", + "R_LARCH_GOT64_HI12", + "R_LARCH_GOT64_LO20", + "R_LARCH_GOT64_PC_HI12", + "R_LARCH_GOT64_PC_LO20", + "R_LARCH_GOT_HI20", + "R_LARCH_GOT_LO12", + "R_LARCH_GOT_PC_HI20", + "R_LARCH_GOT_PC_LO12", + "R_LARCH_IRELATIVE", + "R_LARCH_JUMP_SLOT", + "R_LARCH_MARK_LA", + "R_LARCH_MARK_PCREL", + "R_LARCH_NONE", + "R_LARCH_PCALA64_HI12", + "R_LARCH_PCALA64_LO20", + "R_LARCH_PCALA_HI20", + "R_LARCH_PCALA_LO12", + "R_LARCH_RELATIVE", + "R_LARCH_RELAX", + "R_LARCH_SOP_ADD", + "R_LARCH_SOP_AND", + "R_LARCH_SOP_ASSERT", + "R_LARCH_SOP_IF_ELSE", + "R_LARCH_SOP_NOT", + "R_LARCH_SOP_POP_32_S_0_10_10_16_S2", + "R_LARCH_SOP_POP_32_S_0_5_10_16_S2", + "R_LARCH_SOP_POP_32_S_10_12", + "R_LARCH_SOP_POP_32_S_10_16", + "R_LARCH_SOP_POP_32_S_10_16_S2", + "R_LARCH_SOP_POP_32_S_10_5", + "R_LARCH_SOP_POP_32_S_5_20", + "R_LARCH_SOP_POP_32_U", + "R_LARCH_SOP_POP_32_U_10_12", + "R_LARCH_SOP_PUSH_ABSOLUTE", + "R_LARCH_SOP_PUSH_DUP", + "R_LARCH_SOP_PUSH_GPREL", + "R_LARCH_SOP_PUSH_PCREL", + "R_LARCH_SOP_PUSH_PLT_PCREL", + "R_LARCH_SOP_PUSH_TLS_GD", + "R_LARCH_SOP_PUSH_TLS_GOT", + "R_LARCH_SOP_PUSH_TLS_TPREL", + "R_LARCH_SOP_SL", + "R_LARCH_SOP_SR", + "R_LARCH_SOP_SUB", + "R_LARCH_SUB16", + "R_LARCH_SUB24", + "R_LARCH_SUB32", + "R_LARCH_SUB64", + "R_LARCH_SUB8", + "R_LARCH_TLS_DTPMOD32", + "R_LARCH_TLS_DTPMOD64", + "R_LARCH_TLS_DTPREL32", + "R_LARCH_TLS_DTPREL64", + "R_LARCH_TLS_GD_HI20", + "R_LARCH_TLS_GD_PC_HI20", + "R_LARCH_TLS_IE64_HI12", + "R_LARCH_TLS_IE64_LO20", + "R_LARCH_TLS_IE64_PC_HI12", + "R_LARCH_TLS_IE64_PC_LO20", + "R_LARCH_TLS_IE_HI20", + "R_LARCH_TLS_IE_LO12", + "R_LARCH_TLS_IE_PC_HI20", + "R_LARCH_TLS_IE_PC_LO12", + "R_LARCH_TLS_LD_HI20", + "R_LARCH_TLS_LD_PC_HI20", + "R_LARCH_TLS_LE64_HI12", + "R_LARCH_TLS_LE64_LO20", + "R_LARCH_TLS_LE_HI20", + "R_LARCH_TLS_LE_LO12", + "R_LARCH_TLS_TPREL32", + "R_LARCH_TLS_TPREL64", + "R_MIPS", + "R_MIPS_16", + "R_MIPS_26", + "R_MIPS_32", + "R_MIPS_64", + "R_MIPS_ADD_IMMEDIATE", + "R_MIPS_CALL16", + "R_MIPS_CALL_HI16", + "R_MIPS_CALL_LO16", + "R_MIPS_DELETE", + "R_MIPS_GOT16", + "R_MIPS_GOT_DISP", + "R_MIPS_GOT_HI16", + "R_MIPS_GOT_LO16", + "R_MIPS_GOT_OFST", + "R_MIPS_GOT_PAGE", + "R_MIPS_GPREL16", + "R_MIPS_GPREL32", + "R_MIPS_HI16", + "R_MIPS_HIGHER", + "R_MIPS_HIGHEST", + "R_MIPS_INSERT_A", + "R_MIPS_INSERT_B", + "R_MIPS_JALR", + "R_MIPS_LITERAL", + "R_MIPS_LO16", + "R_MIPS_NONE", + "R_MIPS_PC16", + "R_MIPS_PJUMP", + "R_MIPS_REL16", + "R_MIPS_REL32", + "R_MIPS_RELGOT", + "R_MIPS_SCN_DISP", + "R_MIPS_SHIFT5", + "R_MIPS_SHIFT6", + "R_MIPS_SUB", + "R_MIPS_TLS_DTPMOD32", + "R_MIPS_TLS_DTPMOD64", + "R_MIPS_TLS_DTPREL32", + "R_MIPS_TLS_DTPREL64", + "R_MIPS_TLS_DTPREL_HI16", + "R_MIPS_TLS_DTPREL_LO16", + "R_MIPS_TLS_GD", + "R_MIPS_TLS_GOTTPREL", + "R_MIPS_TLS_LDM", + "R_MIPS_TLS_TPREL32", + "R_MIPS_TLS_TPREL64", + "R_MIPS_TLS_TPREL_HI16", + "R_MIPS_TLS_TPREL_LO16", + "R_PPC", + "R_PPC64", + "R_PPC64_ADDR14", + "R_PPC64_ADDR14_BRNTAKEN", + "R_PPC64_ADDR14_BRTAKEN", + "R_PPC64_ADDR16", + "R_PPC64_ADDR16_DS", + "R_PPC64_ADDR16_HA", + "R_PPC64_ADDR16_HI", + "R_PPC64_ADDR16_HIGH", + "R_PPC64_ADDR16_HIGHA", + "R_PPC64_ADDR16_HIGHER", + "R_PPC64_ADDR16_HIGHER34", + "R_PPC64_ADDR16_HIGHERA", + "R_PPC64_ADDR16_HIGHERA34", + "R_PPC64_ADDR16_HIGHEST", + "R_PPC64_ADDR16_HIGHEST34", + "R_PPC64_ADDR16_HIGHESTA", + "R_PPC64_ADDR16_HIGHESTA34", + "R_PPC64_ADDR16_LO", + "R_PPC64_ADDR16_LO_DS", + "R_PPC64_ADDR24", + "R_PPC64_ADDR32", + "R_PPC64_ADDR64", + "R_PPC64_ADDR64_LOCAL", + "R_PPC64_COPY", + "R_PPC64_D28", + "R_PPC64_D34", + "R_PPC64_D34_HA30", + "R_PPC64_D34_HI30", + "R_PPC64_D34_LO", + "R_PPC64_DTPMOD64", + "R_PPC64_DTPREL16", + "R_PPC64_DTPREL16_DS", + "R_PPC64_DTPREL16_HA", + "R_PPC64_DTPREL16_HI", + "R_PPC64_DTPREL16_HIGH", + "R_PPC64_DTPREL16_HIGHA", + "R_PPC64_DTPREL16_HIGHER", + "R_PPC64_DTPREL16_HIGHERA", + "R_PPC64_DTPREL16_HIGHEST", + "R_PPC64_DTPREL16_HIGHESTA", + "R_PPC64_DTPREL16_LO", + "R_PPC64_DTPREL16_LO_DS", + "R_PPC64_DTPREL34", + "R_PPC64_DTPREL64", + "R_PPC64_ENTRY", + "R_PPC64_GLOB_DAT", + "R_PPC64_GNU_VTENTRY", + "R_PPC64_GNU_VTINHERIT", + "R_PPC64_GOT16", + "R_PPC64_GOT16_DS", + "R_PPC64_GOT16_HA", + "R_PPC64_GOT16_HI", + "R_PPC64_GOT16_LO", + "R_PPC64_GOT16_LO_DS", + "R_PPC64_GOT_DTPREL16_DS", + "R_PPC64_GOT_DTPREL16_HA", + "R_PPC64_GOT_DTPREL16_HI", + "R_PPC64_GOT_DTPREL16_LO_DS", + "R_PPC64_GOT_DTPREL_PCREL34", + "R_PPC64_GOT_PCREL34", + "R_PPC64_GOT_TLSGD16", + "R_PPC64_GOT_TLSGD16_HA", + "R_PPC64_GOT_TLSGD16_HI", + "R_PPC64_GOT_TLSGD16_LO", + "R_PPC64_GOT_TLSGD_PCREL34", + "R_PPC64_GOT_TLSLD16", + "R_PPC64_GOT_TLSLD16_HA", + "R_PPC64_GOT_TLSLD16_HI", + "R_PPC64_GOT_TLSLD16_LO", + "R_PPC64_GOT_TLSLD_PCREL34", + "R_PPC64_GOT_TPREL16_DS", + "R_PPC64_GOT_TPREL16_HA", + "R_PPC64_GOT_TPREL16_HI", + "R_PPC64_GOT_TPREL16_LO_DS", + "R_PPC64_GOT_TPREL_PCREL34", + "R_PPC64_IRELATIVE", + "R_PPC64_JMP_IREL", + "R_PPC64_JMP_SLOT", + "R_PPC64_NONE", + "R_PPC64_PCREL28", + "R_PPC64_PCREL34", + "R_PPC64_PCREL_OPT", + "R_PPC64_PLT16_HA", + "R_PPC64_PLT16_HI", + "R_PPC64_PLT16_LO", + "R_PPC64_PLT16_LO_DS", + "R_PPC64_PLT32", + "R_PPC64_PLT64", + "R_PPC64_PLTCALL", + "R_PPC64_PLTCALL_NOTOC", + "R_PPC64_PLTGOT16", + "R_PPC64_PLTGOT16_DS", + "R_PPC64_PLTGOT16_HA", + "R_PPC64_PLTGOT16_HI", + "R_PPC64_PLTGOT16_LO", + "R_PPC64_PLTGOT_LO_DS", + "R_PPC64_PLTREL32", + "R_PPC64_PLTREL64", + "R_PPC64_PLTSEQ", + "R_PPC64_PLTSEQ_NOTOC", + "R_PPC64_PLT_PCREL34", + "R_PPC64_PLT_PCREL34_NOTOC", + "R_PPC64_REL14", + "R_PPC64_REL14_BRNTAKEN", + "R_PPC64_REL14_BRTAKEN", + "R_PPC64_REL16", + "R_PPC64_REL16DX_HA", + "R_PPC64_REL16_HA", + "R_PPC64_REL16_HI", + "R_PPC64_REL16_HIGH", + "R_PPC64_REL16_HIGHA", + "R_PPC64_REL16_HIGHER", + "R_PPC64_REL16_HIGHER34", + "R_PPC64_REL16_HIGHERA", + "R_PPC64_REL16_HIGHERA34", + "R_PPC64_REL16_HIGHEST", + "R_PPC64_REL16_HIGHEST34", + "R_PPC64_REL16_HIGHESTA", + "R_PPC64_REL16_HIGHESTA34", + "R_PPC64_REL16_LO", + "R_PPC64_REL24", + "R_PPC64_REL24_NOTOC", + "R_PPC64_REL30", + "R_PPC64_REL32", + "R_PPC64_REL64", + "R_PPC64_RELATIVE", + "R_PPC64_SECTOFF", + "R_PPC64_SECTOFF_DS", + "R_PPC64_SECTOFF_HA", + "R_PPC64_SECTOFF_HI", + "R_PPC64_SECTOFF_LO", + "R_PPC64_SECTOFF_LO_DS", + "R_PPC64_TLS", + "R_PPC64_TLSGD", + "R_PPC64_TLSLD", + "R_PPC64_TOC", + "R_PPC64_TOC16", + "R_PPC64_TOC16_DS", + "R_PPC64_TOC16_HA", + "R_PPC64_TOC16_HI", + "R_PPC64_TOC16_LO", + "R_PPC64_TOC16_LO_DS", + "R_PPC64_TOCSAVE", + "R_PPC64_TPREL16", + "R_PPC64_TPREL16_DS", + "R_PPC64_TPREL16_HA", + "R_PPC64_TPREL16_HI", + "R_PPC64_TPREL16_HIGH", + "R_PPC64_TPREL16_HIGHA", + "R_PPC64_TPREL16_HIGHER", + "R_PPC64_TPREL16_HIGHERA", + "R_PPC64_TPREL16_HIGHEST", + "R_PPC64_TPREL16_HIGHESTA", + "R_PPC64_TPREL16_LO", + "R_PPC64_TPREL16_LO_DS", + "R_PPC64_TPREL34", + "R_PPC64_TPREL64", + "R_PPC64_UADDR16", + "R_PPC64_UADDR32", + "R_PPC64_UADDR64", + "R_PPC_ADDR14", + "R_PPC_ADDR14_BRNTAKEN", + "R_PPC_ADDR14_BRTAKEN", + "R_PPC_ADDR16", + "R_PPC_ADDR16_HA", + "R_PPC_ADDR16_HI", + "R_PPC_ADDR16_LO", + "R_PPC_ADDR24", + "R_PPC_ADDR32", + "R_PPC_COPY", + "R_PPC_DTPMOD32", + "R_PPC_DTPREL16", + "R_PPC_DTPREL16_HA", + "R_PPC_DTPREL16_HI", + "R_PPC_DTPREL16_LO", + "R_PPC_DTPREL32", + "R_PPC_EMB_BIT_FLD", + "R_PPC_EMB_MRKREF", + "R_PPC_EMB_NADDR16", + "R_PPC_EMB_NADDR16_HA", + "R_PPC_EMB_NADDR16_HI", + "R_PPC_EMB_NADDR16_LO", + "R_PPC_EMB_NADDR32", + "R_PPC_EMB_RELSDA", + "R_PPC_EMB_RELSEC16", + "R_PPC_EMB_RELST_HA", + "R_PPC_EMB_RELST_HI", + "R_PPC_EMB_RELST_LO", + "R_PPC_EMB_SDA21", + "R_PPC_EMB_SDA2I16", + "R_PPC_EMB_SDA2REL", + "R_PPC_EMB_SDAI16", + "R_PPC_GLOB_DAT", + "R_PPC_GOT16", + "R_PPC_GOT16_HA", + "R_PPC_GOT16_HI", + "R_PPC_GOT16_LO", + "R_PPC_GOT_TLSGD16", + "R_PPC_GOT_TLSGD16_HA", + "R_PPC_GOT_TLSGD16_HI", + "R_PPC_GOT_TLSGD16_LO", + "R_PPC_GOT_TLSLD16", + "R_PPC_GOT_TLSLD16_HA", + "R_PPC_GOT_TLSLD16_HI", + "R_PPC_GOT_TLSLD16_LO", + "R_PPC_GOT_TPREL16", + "R_PPC_GOT_TPREL16_HA", + "R_PPC_GOT_TPREL16_HI", + "R_PPC_GOT_TPREL16_LO", + "R_PPC_JMP_SLOT", + "R_PPC_LOCAL24PC", + "R_PPC_NONE", + "R_PPC_PLT16_HA", + "R_PPC_PLT16_HI", + "R_PPC_PLT16_LO", + "R_PPC_PLT32", + "R_PPC_PLTREL24", + "R_PPC_PLTREL32", + "R_PPC_REL14", + "R_PPC_REL14_BRNTAKEN", + "R_PPC_REL14_BRTAKEN", + "R_PPC_REL24", + "R_PPC_REL32", + "R_PPC_RELATIVE", + "R_PPC_SDAREL16", + "R_PPC_SECTOFF", + "R_PPC_SECTOFF_HA", + "R_PPC_SECTOFF_HI", + "R_PPC_SECTOFF_LO", + "R_PPC_TLS", + "R_PPC_TPREL16", + "R_PPC_TPREL16_HA", + "R_PPC_TPREL16_HI", + "R_PPC_TPREL16_LO", + "R_PPC_TPREL32", + "R_PPC_UADDR16", + "R_PPC_UADDR32", + "R_RISCV", + "R_RISCV_32", + "R_RISCV_32_PCREL", + "R_RISCV_64", + "R_RISCV_ADD16", + "R_RISCV_ADD32", + "R_RISCV_ADD64", + "R_RISCV_ADD8", + "R_RISCV_ALIGN", + "R_RISCV_BRANCH", + "R_RISCV_CALL", + "R_RISCV_CALL_PLT", + "R_RISCV_COPY", + "R_RISCV_GNU_VTENTRY", + "R_RISCV_GNU_VTINHERIT", + "R_RISCV_GOT_HI20", + "R_RISCV_GPREL_I", + "R_RISCV_GPREL_S", + "R_RISCV_HI20", + "R_RISCV_JAL", + "R_RISCV_JUMP_SLOT", + "R_RISCV_LO12_I", + "R_RISCV_LO12_S", + "R_RISCV_NONE", + "R_RISCV_PCREL_HI20", + "R_RISCV_PCREL_LO12_I", + "R_RISCV_PCREL_LO12_S", + "R_RISCV_RELATIVE", + "R_RISCV_RELAX", + "R_RISCV_RVC_BRANCH", + "R_RISCV_RVC_JUMP", + "R_RISCV_RVC_LUI", + "R_RISCV_SET16", + "R_RISCV_SET32", + "R_RISCV_SET6", + "R_RISCV_SET8", + "R_RISCV_SUB16", + "R_RISCV_SUB32", + "R_RISCV_SUB6", + "R_RISCV_SUB64", + "R_RISCV_SUB8", + "R_RISCV_TLS_DTPMOD32", + "R_RISCV_TLS_DTPMOD64", + "R_RISCV_TLS_DTPREL32", + "R_RISCV_TLS_DTPREL64", + "R_RISCV_TLS_GD_HI20", + "R_RISCV_TLS_GOT_HI20", + "R_RISCV_TLS_TPREL32", + "R_RISCV_TLS_TPREL64", + "R_RISCV_TPREL_ADD", + "R_RISCV_TPREL_HI20", + "R_RISCV_TPREL_I", + "R_RISCV_TPREL_LO12_I", + "R_RISCV_TPREL_LO12_S", + "R_RISCV_TPREL_S", + "R_SPARC", + "R_SPARC_10", + "R_SPARC_11", + "R_SPARC_13", + "R_SPARC_16", + "R_SPARC_22", + "R_SPARC_32", + "R_SPARC_5", + "R_SPARC_6", + "R_SPARC_64", + "R_SPARC_7", + "R_SPARC_8", + "R_SPARC_COPY", + "R_SPARC_DISP16", + "R_SPARC_DISP32", + "R_SPARC_DISP64", + "R_SPARC_DISP8", + "R_SPARC_GLOB_DAT", + "R_SPARC_GLOB_JMP", + "R_SPARC_GOT10", + "R_SPARC_GOT13", + "R_SPARC_GOT22", + "R_SPARC_H44", + "R_SPARC_HH22", + "R_SPARC_HI22", + "R_SPARC_HIPLT22", + "R_SPARC_HIX22", + "R_SPARC_HM10", + "R_SPARC_JMP_SLOT", + "R_SPARC_L44", + "R_SPARC_LM22", + "R_SPARC_LO10", + "R_SPARC_LOPLT10", + "R_SPARC_LOX10", + "R_SPARC_M44", + "R_SPARC_NONE", + "R_SPARC_OLO10", + "R_SPARC_PC10", + "R_SPARC_PC22", + "R_SPARC_PCPLT10", + "R_SPARC_PCPLT22", + "R_SPARC_PCPLT32", + "R_SPARC_PC_HH22", + "R_SPARC_PC_HM10", + "R_SPARC_PC_LM22", + "R_SPARC_PLT32", + "R_SPARC_PLT64", + "R_SPARC_REGISTER", + "R_SPARC_RELATIVE", + "R_SPARC_UA16", + "R_SPARC_UA32", + "R_SPARC_UA64", + "R_SPARC_WDISP16", + "R_SPARC_WDISP19", + "R_SPARC_WDISP22", + "R_SPARC_WDISP30", + "R_SPARC_WPLT30", + "R_SYM32", + "R_SYM64", + "R_TYPE32", + "R_TYPE64", + "R_X86_64", + "R_X86_64_16", + "R_X86_64_32", + "R_X86_64_32S", + "R_X86_64_64", + "R_X86_64_8", + "R_X86_64_COPY", + "R_X86_64_DTPMOD64", + "R_X86_64_DTPOFF32", + "R_X86_64_DTPOFF64", + "R_X86_64_GLOB_DAT", + "R_X86_64_GOT32", + "R_X86_64_GOT64", + "R_X86_64_GOTOFF64", + "R_X86_64_GOTPC32", + "R_X86_64_GOTPC32_TLSDESC", + "R_X86_64_GOTPC64", + "R_X86_64_GOTPCREL", + "R_X86_64_GOTPCREL64", + "R_X86_64_GOTPCRELX", + "R_X86_64_GOTPLT64", + "R_X86_64_GOTTPOFF", + "R_X86_64_IRELATIVE", + "R_X86_64_JMP_SLOT", + "R_X86_64_NONE", + "R_X86_64_PC16", + "R_X86_64_PC32", + "R_X86_64_PC32_BND", + "R_X86_64_PC64", + "R_X86_64_PC8", + "R_X86_64_PLT32", + "R_X86_64_PLT32_BND", + "R_X86_64_PLTOFF64", + "R_X86_64_RELATIVE", + "R_X86_64_RELATIVE64", + "R_X86_64_REX_GOTPCRELX", + "R_X86_64_SIZE32", + "R_X86_64_SIZE64", + "R_X86_64_TLSDESC", + "R_X86_64_TLSDESC_CALL", + "R_X86_64_TLSGD", + "R_X86_64_TLSLD", + "R_X86_64_TPOFF32", + "R_X86_64_TPOFF64", + "Rel32", + "Rel64", + "Rela32", + "Rela64", + "SHF_ALLOC", + "SHF_COMPRESSED", + "SHF_EXECINSTR", + "SHF_GROUP", + "SHF_INFO_LINK", + "SHF_LINK_ORDER", + "SHF_MASKOS", + "SHF_MASKPROC", + "SHF_MERGE", + "SHF_OS_NONCONFORMING", + "SHF_STRINGS", + "SHF_TLS", + "SHF_WRITE", + "SHN_ABS", + "SHN_COMMON", + "SHN_HIOS", + "SHN_HIPROC", + "SHN_HIRESERVE", + "SHN_LOOS", + "SHN_LOPROC", + "SHN_LORESERVE", + "SHN_UNDEF", + "SHN_XINDEX", + "SHT_DYNAMIC", + "SHT_DYNSYM", + "SHT_FINI_ARRAY", + "SHT_GNU_ATTRIBUTES", + "SHT_GNU_HASH", + "SHT_GNU_LIBLIST", + "SHT_GNU_VERDEF", + "SHT_GNU_VERNEED", + "SHT_GNU_VERSYM", + "SHT_GROUP", + "SHT_HASH", + "SHT_HIOS", + "SHT_HIPROC", + "SHT_HIUSER", + "SHT_INIT_ARRAY", + "SHT_LOOS", + "SHT_LOPROC", + "SHT_LOUSER", + "SHT_MIPS_ABIFLAGS", + "SHT_NOBITS", + "SHT_NOTE", + "SHT_NULL", + "SHT_PREINIT_ARRAY", + "SHT_PROGBITS", + "SHT_REL", + "SHT_RELA", + "SHT_SHLIB", + "SHT_STRTAB", + "SHT_SYMTAB", + "SHT_SYMTAB_SHNDX", + "STB_GLOBAL", + "STB_HIOS", + "STB_HIPROC", + "STB_LOCAL", + "STB_LOOS", + "STB_LOPROC", + "STB_WEAK", + "STT_COMMON", + "STT_FILE", + "STT_FUNC", + "STT_HIOS", + "STT_HIPROC", + "STT_LOOS", + "STT_LOPROC", + "STT_NOTYPE", + "STT_OBJECT", + "STT_SECTION", + "STT_TLS", + "STV_DEFAULT", + "STV_HIDDEN", + "STV_INTERNAL", + "STV_PROTECTED", + "ST_BIND", + "ST_INFO", + "ST_TYPE", + "ST_VISIBILITY", + "Section", + "Section32", + "Section64", + "SectionFlag", + "SectionHeader", + "SectionIndex", + "SectionType", + "Sym32", + "Sym32Size", + "Sym64", + "Sym64Size", + "SymBind", + "SymType", + "SymVis", + "Symbol", + "Type", + "Version", + }, + "debug/gosym": { + "DecodingError", + "Func", + "LineTable", + "NewLineTable", + "NewTable", + "Obj", + "Sym", + "Table", + "UnknownFileError", + "UnknownLineError", + }, + "debug/macho": { + "ARM64_RELOC_ADDEND", + "ARM64_RELOC_BRANCH26", + "ARM64_RELOC_GOT_LOAD_PAGE21", + "ARM64_RELOC_GOT_LOAD_PAGEOFF12", + "ARM64_RELOC_PAGE21", + "ARM64_RELOC_PAGEOFF12", + "ARM64_RELOC_POINTER_TO_GOT", + "ARM64_RELOC_SUBTRACTOR", + "ARM64_RELOC_TLVP_LOAD_PAGE21", + "ARM64_RELOC_TLVP_LOAD_PAGEOFF12", + "ARM64_RELOC_UNSIGNED", + "ARM_RELOC_BR24", + "ARM_RELOC_HALF", + "ARM_RELOC_HALF_SECTDIFF", + "ARM_RELOC_LOCAL_SECTDIFF", + "ARM_RELOC_PAIR", + "ARM_RELOC_PB_LA_PTR", + "ARM_RELOC_SECTDIFF", + "ARM_RELOC_VANILLA", + "ARM_THUMB_32BIT_BRANCH", + "ARM_THUMB_RELOC_BR22", + "Cpu", + "Cpu386", + "CpuAmd64", + "CpuArm", + "CpuArm64", + "CpuPpc", + "CpuPpc64", + "Dylib", + "DylibCmd", + "Dysymtab", + "DysymtabCmd", + "ErrNotFat", + "FatArch", + "FatArchHeader", + "FatFile", + "File", + "FileHeader", + "FlagAllModsBound", + "FlagAllowStackExecution", + "FlagAppExtensionSafe", + "FlagBindAtLoad", + "FlagBindsToWeak", + "FlagCanonical", + "FlagDeadStrippableDylib", + "FlagDyldLink", + "FlagForceFlat", + "FlagHasTLVDescriptors", + "FlagIncrLink", + "FlagLazyInit", + "FlagNoFixPrebinding", + "FlagNoHeapExecution", + "FlagNoMultiDefs", + "FlagNoReexportedDylibs", + "FlagNoUndefs", + "FlagPIE", + "FlagPrebindable", + "FlagPrebound", + "FlagRootSafe", + "FlagSetuidSafe", + "FlagSplitSegs", + "FlagSubsectionsViaSymbols", + "FlagTwoLevel", + "FlagWeakDefines", + "FormatError", + "GENERIC_RELOC_LOCAL_SECTDIFF", + "GENERIC_RELOC_PAIR", + "GENERIC_RELOC_PB_LA_PTR", + "GENERIC_RELOC_SECTDIFF", + "GENERIC_RELOC_TLV", + "GENERIC_RELOC_VANILLA", + "Load", + "LoadBytes", + "LoadCmd", + "LoadCmdDylib", + "LoadCmdDylinker", + "LoadCmdDysymtab", + "LoadCmdRpath", + "LoadCmdSegment", + "LoadCmdSegment64", + "LoadCmdSymtab", + "LoadCmdThread", + "LoadCmdUnixThread", + "Magic32", + "Magic64", + "MagicFat", + "NewFatFile", + "NewFile", + "Nlist32", + "Nlist64", + "Open", + "OpenFat", + "Regs386", + "RegsAMD64", + "Reloc", + "RelocTypeARM", + "RelocTypeARM64", + "RelocTypeGeneric", + "RelocTypeX86_64", + "Rpath", + "RpathCmd", + "Section", + "Section32", + "Section64", + "SectionHeader", + "Segment", + "Segment32", + "Segment64", + "SegmentHeader", + "Symbol", + "Symtab", + "SymtabCmd", + "Thread", + "Type", + "TypeBundle", + "TypeDylib", + "TypeExec", + "TypeObj", + "X86_64_RELOC_BRANCH", + "X86_64_RELOC_GOT", + "X86_64_RELOC_GOT_LOAD", + "X86_64_RELOC_SIGNED", + "X86_64_RELOC_SIGNED_1", + "X86_64_RELOC_SIGNED_2", + "X86_64_RELOC_SIGNED_4", + "X86_64_RELOC_SUBTRACTOR", + "X86_64_RELOC_TLV", + "X86_64_RELOC_UNSIGNED", + }, + "debug/pe": { + "COFFSymbol", + "COFFSymbolAuxFormat5", + "COFFSymbolSize", + "DataDirectory", + "File", + "FileHeader", + "FormatError", + "IMAGE_COMDAT_SELECT_ANY", + "IMAGE_COMDAT_SELECT_ASSOCIATIVE", + "IMAGE_COMDAT_SELECT_EXACT_MATCH", + "IMAGE_COMDAT_SELECT_LARGEST", + "IMAGE_COMDAT_SELECT_NODUPLICATES", + "IMAGE_COMDAT_SELECT_SAME_SIZE", + "IMAGE_DIRECTORY_ENTRY_ARCHITECTURE", + "IMAGE_DIRECTORY_ENTRY_BASERELOC", + "IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT", + "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR", + "IMAGE_DIRECTORY_ENTRY_DEBUG", + "IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT", + "IMAGE_DIRECTORY_ENTRY_EXCEPTION", + "IMAGE_DIRECTORY_ENTRY_EXPORT", + "IMAGE_DIRECTORY_ENTRY_GLOBALPTR", + "IMAGE_DIRECTORY_ENTRY_IAT", + "IMAGE_DIRECTORY_ENTRY_IMPORT", + "IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG", + "IMAGE_DIRECTORY_ENTRY_RESOURCE", + "IMAGE_DIRECTORY_ENTRY_SECURITY", + "IMAGE_DIRECTORY_ENTRY_TLS", + "IMAGE_DLLCHARACTERISTICS_APPCONTAINER", + "IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE", + "IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY", + "IMAGE_DLLCHARACTERISTICS_GUARD_CF", + "IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA", + "IMAGE_DLLCHARACTERISTICS_NO_BIND", + "IMAGE_DLLCHARACTERISTICS_NO_ISOLATION", + "IMAGE_DLLCHARACTERISTICS_NO_SEH", + "IMAGE_DLLCHARACTERISTICS_NX_COMPAT", + "IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE", + "IMAGE_DLLCHARACTERISTICS_WDM_DRIVER", + "IMAGE_FILE_32BIT_MACHINE", + "IMAGE_FILE_AGGRESIVE_WS_TRIM", + "IMAGE_FILE_BYTES_REVERSED_HI", + "IMAGE_FILE_BYTES_REVERSED_LO", + "IMAGE_FILE_DEBUG_STRIPPED", + "IMAGE_FILE_DLL", + "IMAGE_FILE_EXECUTABLE_IMAGE", + "IMAGE_FILE_LARGE_ADDRESS_AWARE", + "IMAGE_FILE_LINE_NUMS_STRIPPED", + "IMAGE_FILE_LOCAL_SYMS_STRIPPED", + "IMAGE_FILE_MACHINE_AM33", + "IMAGE_FILE_MACHINE_AMD64", + "IMAGE_FILE_MACHINE_ARM", + "IMAGE_FILE_MACHINE_ARM64", + "IMAGE_FILE_MACHINE_ARMNT", + "IMAGE_FILE_MACHINE_EBC", + "IMAGE_FILE_MACHINE_I386", + "IMAGE_FILE_MACHINE_IA64", + "IMAGE_FILE_MACHINE_LOONGARCH32", + "IMAGE_FILE_MACHINE_LOONGARCH64", + "IMAGE_FILE_MACHINE_M32R", + "IMAGE_FILE_MACHINE_MIPS16", + "IMAGE_FILE_MACHINE_MIPSFPU", + "IMAGE_FILE_MACHINE_MIPSFPU16", + "IMAGE_FILE_MACHINE_POWERPC", + "IMAGE_FILE_MACHINE_POWERPCFP", + "IMAGE_FILE_MACHINE_R4000", + "IMAGE_FILE_MACHINE_RISCV128", + "IMAGE_FILE_MACHINE_RISCV32", + "IMAGE_FILE_MACHINE_RISCV64", + "IMAGE_FILE_MACHINE_SH3", + "IMAGE_FILE_MACHINE_SH3DSP", + "IMAGE_FILE_MACHINE_SH4", + "IMAGE_FILE_MACHINE_SH5", + "IMAGE_FILE_MACHINE_THUMB", + "IMAGE_FILE_MACHINE_UNKNOWN", + "IMAGE_FILE_MACHINE_WCEMIPSV2", + "IMAGE_FILE_NET_RUN_FROM_SWAP", + "IMAGE_FILE_RELOCS_STRIPPED", + "IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP", + "IMAGE_FILE_SYSTEM", + "IMAGE_FILE_UP_SYSTEM_ONLY", + "IMAGE_SCN_CNT_CODE", + "IMAGE_SCN_CNT_INITIALIZED_DATA", + "IMAGE_SCN_CNT_UNINITIALIZED_DATA", + "IMAGE_SCN_LNK_COMDAT", + "IMAGE_SCN_MEM_DISCARDABLE", + "IMAGE_SCN_MEM_EXECUTE", + "IMAGE_SCN_MEM_READ", + "IMAGE_SCN_MEM_WRITE", + "IMAGE_SUBSYSTEM_EFI_APPLICATION", + "IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER", + "IMAGE_SUBSYSTEM_EFI_ROM", + "IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER", + "IMAGE_SUBSYSTEM_NATIVE", + "IMAGE_SUBSYSTEM_NATIVE_WINDOWS", + "IMAGE_SUBSYSTEM_OS2_CUI", + "IMAGE_SUBSYSTEM_POSIX_CUI", + "IMAGE_SUBSYSTEM_UNKNOWN", + "IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION", + "IMAGE_SUBSYSTEM_WINDOWS_CE_GUI", + "IMAGE_SUBSYSTEM_WINDOWS_CUI", + "IMAGE_SUBSYSTEM_WINDOWS_GUI", + "IMAGE_SUBSYSTEM_XBOX", + "ImportDirectory", + "NewFile", + "Open", + "OptionalHeader32", + "OptionalHeader64", + "Reloc", + "Section", + "SectionHeader", + "SectionHeader32", + "StringTable", + "Symbol", + }, + "debug/plan9obj": { + "ErrNoSymbols", + "File", + "FileHeader", + "Magic386", + "Magic64", + "MagicAMD64", + "MagicARM", + "NewFile", + "Open", + "Section", + "SectionHeader", + "Sym", + }, + "embed": { + "FS", + }, + "encoding": { + "BinaryMarshaler", + "BinaryUnmarshaler", + "TextMarshaler", + "TextUnmarshaler", + }, + "encoding/ascii85": { + "CorruptInputError", + "Decode", + "Encode", + "MaxEncodedLen", + "NewDecoder", + "NewEncoder", + }, + "encoding/asn1": { + "BitString", + "ClassApplication", + "ClassContextSpecific", + "ClassPrivate", + "ClassUniversal", + "Enumerated", + "Flag", + "Marshal", + "MarshalWithParams", + "NullBytes", + "NullRawValue", + "ObjectIdentifier", + "RawContent", + "RawValue", + "StructuralError", + "SyntaxError", + "TagBMPString", + "TagBitString", + "TagBoolean", + "TagEnum", + "TagGeneralString", + "TagGeneralizedTime", + "TagIA5String", + "TagInteger", + "TagNull", + "TagNumericString", + "TagOID", + "TagOctetString", + "TagPrintableString", + "TagSequence", + "TagSet", + "TagT61String", + "TagUTCTime", + "TagUTF8String", + "Unmarshal", + "UnmarshalWithParams", + }, + "encoding/base32": { + "CorruptInputError", + "Encoding", + "HexEncoding", + "NewDecoder", + "NewEncoder", + "NewEncoding", + "NoPadding", + "StdEncoding", + "StdPadding", + }, + "encoding/base64": { + "CorruptInputError", + "Encoding", + "NewDecoder", + "NewEncoder", + "NewEncoding", + "NoPadding", + "RawStdEncoding", + "RawURLEncoding", + "StdEncoding", + "StdPadding", + "URLEncoding", + }, + "encoding/binary": { + "AppendByteOrder", + "AppendUvarint", + "AppendVarint", + "BigEndian", + "ByteOrder", + "LittleEndian", + "MaxVarintLen16", + "MaxVarintLen32", + "MaxVarintLen64", + "PutUvarint", + "PutVarint", + "Read", + "ReadUvarint", + "ReadVarint", + "Size", + "Uvarint", + "Varint", + "Write", + }, + "encoding/csv": { + "ErrBareQuote", + "ErrFieldCount", + "ErrQuote", + "ErrTrailingComma", + "NewReader", + "NewWriter", + "ParseError", + "Reader", + "Writer", + }, + "encoding/gob": { + "CommonType", + "Decoder", + "Encoder", + "GobDecoder", + "GobEncoder", + "NewDecoder", + "NewEncoder", + "Register", + "RegisterName", + }, + "encoding/hex": { + "Decode", + "DecodeString", + "DecodedLen", + "Dump", + "Dumper", + "Encode", + "EncodeToString", + "EncodedLen", + "ErrLength", + "InvalidByteError", + "NewDecoder", + "NewEncoder", + }, + "encoding/json": { + "Compact", + "Decoder", + "Delim", + "Encoder", + "HTMLEscape", + "Indent", + "InvalidUTF8Error", + "InvalidUnmarshalError", + "Marshal", + "MarshalIndent", + "Marshaler", + "MarshalerError", + "NewDecoder", + "NewEncoder", + "Number", + "RawMessage", + "SyntaxError", + "Token", + "Unmarshal", + "UnmarshalFieldError", + "UnmarshalTypeError", + "Unmarshaler", + "UnsupportedTypeError", + "UnsupportedValueError", + "Valid", + }, + "encoding/pem": { + "Block", + "Decode", + "Encode", + "EncodeToMemory", + }, + "encoding/xml": { + "Attr", + "CharData", + "Comment", + "CopyToken", + "Decoder", + "Directive", + "Encoder", + "EndElement", + "Escape", + "EscapeText", + "HTMLAutoClose", + "HTMLEntity", + "Header", + "Marshal", + "MarshalIndent", + "Marshaler", + "MarshalerAttr", + "Name", + "NewDecoder", + "NewEncoder", + "NewTokenDecoder", + "ProcInst", + "StartElement", + "SyntaxError", + "TagPathError", + "Token", + "TokenReader", + "Unmarshal", + "UnmarshalError", + "Unmarshaler", + "UnmarshalerAttr", + "UnsupportedTypeError", + }, + "errors": { + "As", + "Is", + "Join", + "New", + "Unwrap", + }, + "expvar": { + "Do", + "Float", + "Func", + "Get", + "Handler", + "Int", + "KeyValue", + "Map", + "NewFloat", + "NewInt", + "NewMap", + "NewString", + "Publish", + "String", + "Var", + }, + "flag": { + "Arg", + "Args", + "Bool", + "BoolVar", + "CommandLine", + "ContinueOnError", + "Duration", + "DurationVar", + "ErrHelp", + "ErrorHandling", + "ExitOnError", + "Flag", + "FlagSet", + "Float64", + "Float64Var", + "Func", + "Getter", + "Int", + "Int64", + "Int64Var", + "IntVar", + "Lookup", + "NArg", + "NFlag", + "NewFlagSet", + "PanicOnError", + "Parse", + "Parsed", + "PrintDefaults", + "Set", + "String", + "StringVar", + "TextVar", + "Uint", + "Uint64", + "Uint64Var", + "UintVar", + "UnquoteUsage", + "Usage", + "Value", + "Var", + "Visit", + "VisitAll", + }, + "fmt": { + "Append", + "Appendf", + "Appendln", + "Errorf", + "FormatString", + "Formatter", + "Fprint", + "Fprintf", + "Fprintln", + "Fscan", + "Fscanf", + "Fscanln", + "GoStringer", + "Print", + "Printf", + "Println", + "Scan", + "ScanState", + "Scanf", + "Scanln", + "Scanner", + "Sprint", + "Sprintf", + "Sprintln", + "Sscan", + "Sscanf", + "Sscanln", + "State", + "Stringer", + }, + "go/ast": { + "ArrayType", + "AssignStmt", + "Bad", + "BadDecl", + "BadExpr", + "BadStmt", + "BasicLit", + "BinaryExpr", + "BlockStmt", + "BranchStmt", + "CallExpr", + "CaseClause", + "ChanDir", + "ChanType", + "CommClause", + "Comment", + "CommentGroup", + "CommentMap", + "CompositeLit", + "Con", + "Decl", + "DeclStmt", + "DeferStmt", + "Ellipsis", + "EmptyStmt", + "Expr", + "ExprStmt", + "Field", + "FieldFilter", + "FieldList", + "File", + "FileExports", + "Filter", + "FilterDecl", + "FilterFile", + "FilterFuncDuplicates", + "FilterImportDuplicates", + "FilterPackage", + "FilterUnassociatedComments", + "ForStmt", + "Fprint", + "Fun", + "FuncDecl", + "FuncLit", + "FuncType", + "GenDecl", + "GoStmt", + "Ident", + "IfStmt", + "ImportSpec", + "Importer", + "IncDecStmt", + "IndexExpr", + "IndexListExpr", + "Inspect", + "InterfaceType", + "IsExported", + "KeyValueExpr", + "LabeledStmt", + "Lbl", + "MapType", + "MergeMode", + "MergePackageFiles", + "NewCommentMap", + "NewIdent", + "NewObj", + "NewPackage", + "NewScope", + "Node", + "NotNilFilter", + "ObjKind", + "Object", + "Package", + "PackageExports", + "ParenExpr", + "Pkg", + "Print", + "RECV", + "RangeStmt", + "ReturnStmt", + "SEND", + "Scope", + "SelectStmt", + "SelectorExpr", + "SendStmt", + "SliceExpr", + "SortImports", + "Spec", + "StarExpr", + "Stmt", + "StructType", + "SwitchStmt", + "Typ", + "TypeAssertExpr", + "TypeSpec", + "TypeSwitchStmt", + "UnaryExpr", + "ValueSpec", + "Var", + "Visitor", + "Walk", + }, + "go/build": { + "AllowBinary", + "ArchChar", + "Context", + "Default", + "FindOnly", + "IgnoreVendor", + "Import", + "ImportComment", + "ImportDir", + "ImportMode", + "IsLocalImport", + "MultiplePackageError", + "NoGoError", + "Package", + "ToolDir", + }, + "go/build/constraint": { + "AndExpr", + "Expr", + "IsGoBuild", + "IsPlusBuild", + "NotExpr", + "OrExpr", + "Parse", + "PlusBuildLines", + "SyntaxError", + "TagExpr", + }, + "go/constant": { + "BinaryOp", + "BitLen", + "Bool", + "BoolVal", + "Bytes", + "Compare", + "Complex", + "Denom", + "Float", + "Float32Val", + "Float64Val", + "Imag", + "Int", + "Int64Val", + "Kind", + "Make", + "MakeBool", + "MakeFloat64", + "MakeFromBytes", + "MakeFromLiteral", + "MakeImag", + "MakeInt64", + "MakeString", + "MakeUint64", + "MakeUnknown", + "Num", + "Real", + "Shift", + "Sign", + "String", + "StringVal", + "ToComplex", + "ToFloat", + "ToInt", + "Uint64Val", + "UnaryOp", + "Unknown", + "Val", + "Value", + }, + "go/doc": { + "AllDecls", + "AllMethods", + "Example", + "Examples", + "Filter", + "Func", + "IllegalPrefixes", + "IsPredeclared", + "Mode", + "New", + "NewFromFiles", + "Note", + "Package", + "PreserveAST", + "Synopsis", + "ToHTML", + "ToText", + "Type", + "Value", + }, + "go/doc/comment": { + "Block", + "Code", + "DefaultLookupPackage", + "Doc", + "DocLink", + "Heading", + "Italic", + "Link", + "LinkDef", + "List", + "ListItem", + "Paragraph", + "Parser", + "Plain", + "Printer", + "Text", + }, + "go/format": { + "Node", + "Source", + }, + "go/importer": { + "Default", + "For", + "ForCompiler", + "Lookup", + }, + "go/parser": { + "AllErrors", + "DeclarationErrors", + "ImportsOnly", + "Mode", + "PackageClauseOnly", + "ParseComments", + "ParseDir", + "ParseExpr", + "ParseExprFrom", + "ParseFile", + "SkipObjectResolution", + "SpuriousErrors", + "Trace", + }, + "go/printer": { + "CommentedNode", + "Config", + "Fprint", + "Mode", + "RawFormat", + "SourcePos", + "TabIndent", + "UseSpaces", + }, + "go/scanner": { + "Error", + "ErrorHandler", + "ErrorList", + "Mode", + "PrintError", + "ScanComments", + "Scanner", + }, + "go/token": { + "ADD", + "ADD_ASSIGN", + "AND", + "AND_ASSIGN", + "AND_NOT", + "AND_NOT_ASSIGN", + "ARROW", + "ASSIGN", + "BREAK", + "CASE", + "CHAN", + "CHAR", + "COLON", + "COMMA", + "COMMENT", + "CONST", + "CONTINUE", + "DEC", + "DEFAULT", + "DEFER", + "DEFINE", + "ELLIPSIS", + "ELSE", + "EOF", + "EQL", + "FALLTHROUGH", + "FLOAT", + "FOR", + "FUNC", + "File", + "FileSet", + "GEQ", + "GO", + "GOTO", + "GTR", + "HighestPrec", + "IDENT", + "IF", + "ILLEGAL", + "IMAG", + "IMPORT", + "INC", + "INT", + "INTERFACE", + "IsExported", + "IsIdentifier", + "IsKeyword", + "LAND", + "LBRACE", + "LBRACK", + "LEQ", + "LOR", + "LPAREN", + "LSS", + "Lookup", + "LowestPrec", + "MAP", + "MUL", + "MUL_ASSIGN", + "NEQ", + "NOT", + "NewFileSet", + "NoPos", + "OR", + "OR_ASSIGN", + "PACKAGE", + "PERIOD", + "Pos", + "Position", + "QUO", + "QUO_ASSIGN", + "RANGE", + "RBRACE", + "RBRACK", + "REM", + "REM_ASSIGN", + "RETURN", + "RPAREN", + "SELECT", + "SEMICOLON", + "SHL", + "SHL_ASSIGN", + "SHR", + "SHR_ASSIGN", + "STRING", + "STRUCT", + "SUB", + "SUB_ASSIGN", + "SWITCH", + "TILDE", + "TYPE", + "Token", + "UnaryPrec", + "VAR", + "XOR", + "XOR_ASSIGN", + }, + "go/types": { + "ArgumentError", + "Array", + "AssertableTo", + "AssignableTo", + "Basic", + "BasicInfo", + "BasicKind", + "Bool", + "Builtin", + "Byte", + "Chan", + "ChanDir", + "CheckExpr", + "Checker", + "Comparable", + "Complex128", + "Complex64", + "Config", + "Const", + "Context", + "ConvertibleTo", + "DefPredeclaredTestFuncs", + "Default", + "Error", + "Eval", + "ExprString", + "FieldVal", + "Float32", + "Float64", + "Func", + "Id", + "Identical", + "IdenticalIgnoreTags", + "Implements", + "ImportMode", + "Importer", + "ImporterFrom", + "Info", + "Initializer", + "Instance", + "Instantiate", + "Int", + "Int16", + "Int32", + "Int64", + "Int8", + "Interface", + "Invalid", + "IsBoolean", + "IsComplex", + "IsConstType", + "IsFloat", + "IsInteger", + "IsInterface", + "IsNumeric", + "IsOrdered", + "IsString", + "IsUnsigned", + "IsUntyped", + "Label", + "LookupFieldOrMethod", + "Map", + "MethodExpr", + "MethodSet", + "MethodVal", + "MissingMethod", + "Named", + "NewArray", + "NewChan", + "NewChecker", + "NewConst", + "NewContext", + "NewField", + "NewFunc", + "NewInterface", + "NewInterfaceType", + "NewLabel", + "NewMap", + "NewMethodSet", + "NewNamed", + "NewPackage", + "NewParam", + "NewPkgName", + "NewPointer", + "NewScope", + "NewSignature", + "NewSignatureType", + "NewSlice", + "NewStruct", + "NewTerm", + "NewTuple", + "NewTypeName", + "NewTypeParam", + "NewUnion", + "NewVar", + "Nil", + "Object", + "ObjectString", + "Package", + "PkgName", + "Pointer", + "Qualifier", + "RecvOnly", + "RelativeTo", + "Rune", + "Satisfies", + "Scope", + "Selection", + "SelectionKind", + "SelectionString", + "SendOnly", + "SendRecv", + "Signature", + "Sizes", + "SizesFor", + "Slice", + "StdSizes", + "String", + "Struct", + "Term", + "Tuple", + "Typ", + "Type", + "TypeAndValue", + "TypeList", + "TypeName", + "TypeParam", + "TypeParamList", + "TypeString", + "Uint", + "Uint16", + "Uint32", + "Uint64", + "Uint8", + "Uintptr", + "Union", + "Universe", + "Unsafe", + "UnsafePointer", + "UntypedBool", + "UntypedComplex", + "UntypedFloat", + "UntypedInt", + "UntypedNil", + "UntypedRune", + "UntypedString", + "Var", + "WriteExpr", + "WriteSignature", + "WriteType", + }, + "hash": { + "Hash", + "Hash32", + "Hash64", + }, + "hash/adler32": { + "Checksum", + "New", + "Size", + }, + "hash/crc32": { + "Castagnoli", + "Checksum", + "ChecksumIEEE", + "IEEE", + "IEEETable", + "Koopman", + "MakeTable", + "New", + "NewIEEE", + "Size", + "Table", + "Update", + }, + "hash/crc64": { + "Checksum", + "ECMA", + "ISO", + "MakeTable", + "New", + "Size", + "Table", + "Update", + }, + "hash/fnv": { + "New128", + "New128a", + "New32", + "New32a", + "New64", + "New64a", + }, + "hash/maphash": { + "Bytes", + "Hash", + "MakeSeed", + "Seed", + "String", + }, + "html": { + "EscapeString", + "UnescapeString", + }, + "html/template": { + "CSS", + "ErrAmbigContext", + "ErrBadHTML", + "ErrBranchEnd", + "ErrEndContext", + "ErrNoSuchTemplate", + "ErrOutputContext", + "ErrPartialCharset", + "ErrPartialEscape", + "ErrPredefinedEscaper", + "ErrRangeLoopReentry", + "ErrSlashAmbig", + "Error", + "ErrorCode", + "FuncMap", + "HTML", + "HTMLAttr", + "HTMLEscape", + "HTMLEscapeString", + "HTMLEscaper", + "IsTrue", + "JS", + "JSEscape", + "JSEscapeString", + "JSEscaper", + "JSStr", + "Must", + "New", + "OK", + "ParseFS", + "ParseFiles", + "ParseGlob", + "Srcset", + "Template", + "URL", + "URLQueryEscaper", + }, + "image": { + "Alpha", + "Alpha16", + "Black", + "CMYK", + "Config", + "Decode", + "DecodeConfig", + "ErrFormat", + "Gray", + "Gray16", + "Image", + "NRGBA", + "NRGBA64", + "NYCbCrA", + "NewAlpha", + "NewAlpha16", + "NewCMYK", + "NewGray", + "NewGray16", + "NewNRGBA", + "NewNRGBA64", + "NewNYCbCrA", + "NewPaletted", + "NewRGBA", + "NewRGBA64", + "NewUniform", + "NewYCbCr", + "Opaque", + "Paletted", + "PalettedImage", + "Point", + "Pt", + "RGBA", + "RGBA64", + "RGBA64Image", + "Rect", + "Rectangle", + "RegisterFormat", + "Transparent", + "Uniform", + "White", + "YCbCr", + "YCbCrSubsampleRatio", + "YCbCrSubsampleRatio410", + "YCbCrSubsampleRatio411", + "YCbCrSubsampleRatio420", + "YCbCrSubsampleRatio422", + "YCbCrSubsampleRatio440", + "YCbCrSubsampleRatio444", + "ZP", + "ZR", + }, + "image/color": { + "Alpha", + "Alpha16", + "Alpha16Model", + "AlphaModel", + "Black", + "CMYK", + "CMYKModel", + "CMYKToRGB", + "Color", + "Gray", + "Gray16", + "Gray16Model", + "GrayModel", + "Model", + "ModelFunc", + "NRGBA", + "NRGBA64", + "NRGBA64Model", + "NRGBAModel", + "NYCbCrA", + "NYCbCrAModel", + "Opaque", + "Palette", + "RGBA", + "RGBA64", + "RGBA64Model", + "RGBAModel", + "RGBToCMYK", + "RGBToYCbCr", + "Transparent", + "White", + "YCbCr", + "YCbCrModel", + "YCbCrToRGB", + }, + "image/color/palette": { + "Plan9", + "WebSafe", + }, + "image/draw": { + "Draw", + "DrawMask", + "Drawer", + "FloydSteinberg", + "Image", + "Op", + "Over", + "Quantizer", + "RGBA64Image", + "Src", + }, + "image/gif": { + "Decode", + "DecodeAll", + "DecodeConfig", + "DisposalBackground", + "DisposalNone", + "DisposalPrevious", + "Encode", + "EncodeAll", + "GIF", + "Options", + }, + "image/jpeg": { + "Decode", + "DecodeConfig", + "DefaultQuality", + "Encode", + "FormatError", + "Options", + "Reader", + "UnsupportedError", + }, + "image/png": { + "BestCompression", + "BestSpeed", + "CompressionLevel", + "Decode", + "DecodeConfig", + "DefaultCompression", + "Encode", + "Encoder", + "EncoderBuffer", + "EncoderBufferPool", + "FormatError", + "NoCompression", + "UnsupportedError", + }, + "index/suffixarray": { + "Index", + "New", + }, + "io": { + "ByteReader", + "ByteScanner", + "ByteWriter", + "Closer", + "Copy", + "CopyBuffer", + "CopyN", + "Discard", + "EOF", + "ErrClosedPipe", + "ErrNoProgress", + "ErrShortBuffer", + "ErrShortWrite", + "ErrUnexpectedEOF", + "LimitReader", + "LimitedReader", + "MultiReader", + "MultiWriter", + "NewOffsetWriter", + "NewSectionReader", + "NopCloser", + "OffsetWriter", + "Pipe", + "PipeReader", + "PipeWriter", + "ReadAll", + "ReadAtLeast", + "ReadCloser", + "ReadFull", + "ReadSeekCloser", + "ReadSeeker", + "ReadWriteCloser", + "ReadWriteSeeker", + "ReadWriter", + "Reader", + "ReaderAt", + "ReaderFrom", + "RuneReader", + "RuneScanner", + "SectionReader", + "SeekCurrent", + "SeekEnd", + "SeekStart", + "Seeker", + "StringWriter", + "TeeReader", + "WriteCloser", + "WriteSeeker", + "WriteString", + "Writer", + "WriterAt", + "WriterTo", + }, + "io/fs": { + "DirEntry", + "ErrClosed", + "ErrExist", + "ErrInvalid", + "ErrNotExist", + "ErrPermission", + "FS", + "File", + "FileInfo", + "FileInfoToDirEntry", + "FileMode", + "Glob", + "GlobFS", + "ModeAppend", + "ModeCharDevice", + "ModeDevice", + "ModeDir", + "ModeExclusive", + "ModeIrregular", + "ModeNamedPipe", + "ModePerm", + "ModeSetgid", + "ModeSetuid", + "ModeSocket", + "ModeSticky", + "ModeSymlink", + "ModeTemporary", + "ModeType", + "PathError", + "ReadDir", + "ReadDirFS", + "ReadDirFile", + "ReadFile", + "ReadFileFS", + "SkipAll", + "SkipDir", + "Stat", + "StatFS", + "Sub", + "SubFS", + "ValidPath", + "WalkDir", + "WalkDirFunc", + }, + "io/ioutil": { + "Discard", + "NopCloser", + "ReadAll", + "ReadDir", + "ReadFile", + "TempDir", + "TempFile", + "WriteFile", + }, + "log": { + "Default", + "Fatal", + "Fatalf", + "Fatalln", + "Flags", + "LUTC", + "Ldate", + "Llongfile", + "Lmicroseconds", + "Lmsgprefix", + "Logger", + "Lshortfile", + "LstdFlags", + "Ltime", + "New", + "Output", + "Panic", + "Panicf", + "Panicln", + "Prefix", + "Print", + "Printf", + "Println", + "SetFlags", + "SetOutput", + "SetPrefix", + "Writer", + }, + "log/syslog": { + "Dial", + "LOG_ALERT", + "LOG_AUTH", + "LOG_AUTHPRIV", + "LOG_CRIT", + "LOG_CRON", + "LOG_DAEMON", + "LOG_DEBUG", + "LOG_EMERG", + "LOG_ERR", + "LOG_FTP", + "LOG_INFO", + "LOG_KERN", + "LOG_LOCAL0", + "LOG_LOCAL1", + "LOG_LOCAL2", + "LOG_LOCAL3", + "LOG_LOCAL4", + "LOG_LOCAL5", + "LOG_LOCAL6", + "LOG_LOCAL7", + "LOG_LPR", + "LOG_MAIL", + "LOG_NEWS", + "LOG_NOTICE", + "LOG_SYSLOG", + "LOG_USER", + "LOG_UUCP", + "LOG_WARNING", + "New", + "NewLogger", + "Priority", + "Writer", + }, + "math": { + "Abs", + "Acos", + "Acosh", + "Asin", + "Asinh", + "Atan", + "Atan2", + "Atanh", + "Cbrt", + "Ceil", + "Copysign", + "Cos", + "Cosh", + "Dim", + "E", + "Erf", + "Erfc", + "Erfcinv", + "Erfinv", + "Exp", + "Exp2", + "Expm1", + "FMA", + "Float32bits", + "Float32frombits", + "Float64bits", + "Float64frombits", + "Floor", + "Frexp", + "Gamma", + "Hypot", + "Ilogb", + "Inf", + "IsInf", + "IsNaN", + "J0", + "J1", + "Jn", + "Ldexp", + "Lgamma", + "Ln10", + "Ln2", + "Log", + "Log10", + "Log10E", + "Log1p", + "Log2", + "Log2E", + "Logb", + "Max", + "MaxFloat32", + "MaxFloat64", + "MaxInt", + "MaxInt16", + "MaxInt32", + "MaxInt64", + "MaxInt8", + "MaxUint", + "MaxUint16", + "MaxUint32", + "MaxUint64", + "MaxUint8", + "Min", + "MinInt", + "MinInt16", + "MinInt32", + "MinInt64", + "MinInt8", + "Mod", + "Modf", + "NaN", + "Nextafter", + "Nextafter32", + "Phi", + "Pi", + "Pow", + "Pow10", + "Remainder", + "Round", + "RoundToEven", + "Signbit", + "Sin", + "Sincos", + "Sinh", + "SmallestNonzeroFloat32", + "SmallestNonzeroFloat64", + "Sqrt", + "Sqrt2", + "SqrtE", + "SqrtPhi", + "SqrtPi", + "Tan", + "Tanh", + "Trunc", + "Y0", + "Y1", + "Yn", + }, + "math/big": { + "Above", + "Accuracy", + "AwayFromZero", + "Below", + "ErrNaN", + "Exact", + "Float", + "Int", + "Jacobi", + "MaxBase", + "MaxExp", + "MaxPrec", + "MinExp", + "NewFloat", + "NewInt", + "NewRat", + "ParseFloat", + "Rat", + "RoundingMode", + "ToNearestAway", + "ToNearestEven", + "ToNegativeInf", + "ToPositiveInf", + "ToZero", + "Word", + }, + "math/bits": { + "Add", + "Add32", + "Add64", + "Div", + "Div32", + "Div64", + "LeadingZeros", + "LeadingZeros16", + "LeadingZeros32", + "LeadingZeros64", + "LeadingZeros8", + "Len", + "Len16", + "Len32", + "Len64", + "Len8", + "Mul", + "Mul32", + "Mul64", + "OnesCount", + "OnesCount16", + "OnesCount32", + "OnesCount64", + "OnesCount8", + "Rem", + "Rem32", + "Rem64", + "Reverse", + "Reverse16", + "Reverse32", + "Reverse64", + "Reverse8", + "ReverseBytes", + "ReverseBytes16", + "ReverseBytes32", + "ReverseBytes64", + "RotateLeft", + "RotateLeft16", + "RotateLeft32", + "RotateLeft64", + "RotateLeft8", + "Sub", + "Sub32", + "Sub64", + "TrailingZeros", + "TrailingZeros16", + "TrailingZeros32", + "TrailingZeros64", + "TrailingZeros8", + "UintSize", + }, + "math/cmplx": { + "Abs", + "Acos", + "Acosh", + "Asin", + "Asinh", + "Atan", + "Atanh", + "Conj", + "Cos", + "Cosh", + "Cot", + "Exp", + "Inf", + "IsInf", + "IsNaN", + "Log", + "Log10", + "NaN", + "Phase", + "Polar", + "Pow", + "Rect", + "Sin", + "Sinh", + "Sqrt", + "Tan", + "Tanh", + }, + "math/rand": { + "ExpFloat64", + "Float32", + "Float64", + "Int", + "Int31", + "Int31n", + "Int63", + "Int63n", + "Intn", + "New", + "NewSource", + "NewZipf", + "NormFloat64", + "Perm", + "Rand", + "Read", + "Seed", + "Shuffle", + "Source", + "Source64", + "Uint32", + "Uint64", + "Zipf", + }, + "mime": { + "AddExtensionType", + "BEncoding", + "ErrInvalidMediaParameter", + "ExtensionsByType", + "FormatMediaType", + "ParseMediaType", + "QEncoding", + "TypeByExtension", + "WordDecoder", + "WordEncoder", + }, + "mime/multipart": { + "ErrMessageTooLarge", + "File", + "FileHeader", + "Form", + "NewReader", + "NewWriter", + "Part", + "Reader", + "Writer", + }, + "mime/quotedprintable": { + "NewReader", + "NewWriter", + "Reader", + "Writer", + }, + "net": { + "Addr", + "AddrError", + "Buffers", + "CIDRMask", + "Conn", + "DNSConfigError", + "DNSError", + "DefaultResolver", + "Dial", + "DialIP", + "DialTCP", + "DialTimeout", + "DialUDP", + "DialUnix", + "Dialer", + "ErrClosed", + "ErrWriteToConnected", + "Error", + "FileConn", + "FileListener", + "FilePacketConn", + "FlagBroadcast", + "FlagLoopback", + "FlagMulticast", + "FlagPointToPoint", + "FlagRunning", + "FlagUp", + "Flags", + "HardwareAddr", + "IP", + "IPAddr", + "IPConn", + "IPMask", + "IPNet", + "IPv4", + "IPv4Mask", + "IPv4allrouter", + "IPv4allsys", + "IPv4bcast", + "IPv4len", + "IPv4zero", + "IPv6interfacelocalallnodes", + "IPv6len", + "IPv6linklocalallnodes", + "IPv6linklocalallrouters", + "IPv6loopback", + "IPv6unspecified", + "IPv6zero", + "Interface", + "InterfaceAddrs", + "InterfaceByIndex", + "InterfaceByName", + "Interfaces", + "InvalidAddrError", + "JoinHostPort", + "Listen", + "ListenConfig", + "ListenIP", + "ListenMulticastUDP", + "ListenPacket", + "ListenTCP", + "ListenUDP", + "ListenUnix", + "ListenUnixgram", + "Listener", + "LookupAddr", + "LookupCNAME", + "LookupHost", + "LookupIP", + "LookupMX", + "LookupNS", + "LookupPort", + "LookupSRV", + "LookupTXT", + "MX", + "NS", + "OpError", + "PacketConn", + "ParseCIDR", + "ParseError", + "ParseIP", + "ParseMAC", + "Pipe", + "ResolveIPAddr", + "ResolveTCPAddr", + "ResolveUDPAddr", + "ResolveUnixAddr", + "Resolver", + "SRV", + "SplitHostPort", + "TCPAddr", + "TCPAddrFromAddrPort", + "TCPConn", + "TCPListener", + "UDPAddr", + "UDPAddrFromAddrPort", + "UDPConn", + "UnixAddr", + "UnixConn", + "UnixListener", + "UnknownNetworkError", + }, + "net/http": { + "AllowQuerySemicolons", + "CanonicalHeaderKey", + "Client", + "CloseNotifier", + "ConnState", + "Cookie", + "CookieJar", + "DefaultClient", + "DefaultMaxHeaderBytes", + "DefaultMaxIdleConnsPerHost", + "DefaultServeMux", + "DefaultTransport", + "DetectContentType", + "Dir", + "ErrAbortHandler", + "ErrBodyNotAllowed", + "ErrBodyReadAfterClose", + "ErrContentLength", + "ErrHandlerTimeout", + "ErrHeaderTooLong", + "ErrHijacked", + "ErrLineTooLong", + "ErrMissingBoundary", + "ErrMissingContentLength", + "ErrMissingFile", + "ErrNoCookie", + "ErrNoLocation", + "ErrNotMultipart", + "ErrNotSupported", + "ErrServerClosed", + "ErrShortBody", + "ErrSkipAltProtocol", + "ErrUnexpectedTrailer", + "ErrUseLastResponse", + "ErrWriteAfterFlush", + "Error", + "FS", + "File", + "FileServer", + "FileSystem", + "Flusher", + "Get", + "Handle", + "HandleFunc", + "Handler", + "HandlerFunc", + "Head", + "Header", + "Hijacker", + "ListenAndServe", + "ListenAndServeTLS", + "LocalAddrContextKey", + "MaxBytesError", + "MaxBytesHandler", + "MaxBytesReader", + "MethodConnect", + "MethodDelete", + "MethodGet", + "MethodHead", + "MethodOptions", + "MethodPatch", + "MethodPost", + "MethodPut", + "MethodTrace", + "NewFileTransport", + "NewRequest", + "NewRequestWithContext", + "NewResponseController", + "NewServeMux", + "NoBody", + "NotFound", + "NotFoundHandler", + "ParseHTTPVersion", + "ParseTime", + "Post", + "PostForm", + "ProtocolError", + "ProxyFromEnvironment", + "ProxyURL", + "PushOptions", + "Pusher", + "ReadRequest", + "ReadResponse", + "Redirect", + "RedirectHandler", + "Request", + "Response", + "ResponseController", + "ResponseWriter", + "RoundTripper", + "SameSite", + "SameSiteDefaultMode", + "SameSiteLaxMode", + "SameSiteNoneMode", + "SameSiteStrictMode", + "Serve", + "ServeContent", + "ServeFile", + "ServeMux", + "ServeTLS", + "Server", + "ServerContextKey", + "SetCookie", + "StateActive", + "StateClosed", + "StateHijacked", + "StateIdle", + "StateNew", + "StatusAccepted", + "StatusAlreadyReported", + "StatusBadGateway", + "StatusBadRequest", + "StatusConflict", + "StatusContinue", + "StatusCreated", + "StatusEarlyHints", + "StatusExpectationFailed", + "StatusFailedDependency", + "StatusForbidden", + "StatusFound", + "StatusGatewayTimeout", + "StatusGone", + "StatusHTTPVersionNotSupported", + "StatusIMUsed", + "StatusInsufficientStorage", + "StatusInternalServerError", + "StatusLengthRequired", + "StatusLocked", + "StatusLoopDetected", + "StatusMethodNotAllowed", + "StatusMisdirectedRequest", + "StatusMovedPermanently", + "StatusMultiStatus", + "StatusMultipleChoices", + "StatusNetworkAuthenticationRequired", + "StatusNoContent", + "StatusNonAuthoritativeInfo", + "StatusNotAcceptable", + "StatusNotExtended", + "StatusNotFound", + "StatusNotImplemented", + "StatusNotModified", + "StatusOK", + "StatusPartialContent", + "StatusPaymentRequired", + "StatusPermanentRedirect", + "StatusPreconditionFailed", + "StatusPreconditionRequired", + "StatusProcessing", + "StatusProxyAuthRequired", + "StatusRequestEntityTooLarge", + "StatusRequestHeaderFieldsTooLarge", + "StatusRequestTimeout", + "StatusRequestURITooLong", + "StatusRequestedRangeNotSatisfiable", + "StatusResetContent", + "StatusSeeOther", + "StatusServiceUnavailable", + "StatusSwitchingProtocols", + "StatusTeapot", + "StatusTemporaryRedirect", + "StatusText", + "StatusTooEarly", + "StatusTooManyRequests", + "StatusUnauthorized", + "StatusUnavailableForLegalReasons", + "StatusUnprocessableEntity", + "StatusUnsupportedMediaType", + "StatusUpgradeRequired", + "StatusUseProxy", + "StatusVariantAlsoNegotiates", + "StripPrefix", + "TimeFormat", + "TimeoutHandler", + "TrailerPrefix", + "Transport", + }, + "net/http/cgi": { + "Handler", + "Request", + "RequestFromMap", + "Serve", + }, + "net/http/cookiejar": { + "Jar", + "New", + "Options", + "PublicSuffixList", + }, + "net/http/fcgi": { + "ErrConnClosed", + "ErrRequestAborted", + "ProcessEnv", + "Serve", + }, + "net/http/httptest": { + "DefaultRemoteAddr", + "NewRecorder", + "NewRequest", + "NewServer", + "NewTLSServer", + "NewUnstartedServer", + "ResponseRecorder", + "Server", + }, + "net/http/httptrace": { + "ClientTrace", + "ContextClientTrace", + "DNSDoneInfo", + "DNSStartInfo", + "GotConnInfo", + "WithClientTrace", + "WroteRequestInfo", + }, + "net/http/httputil": { + "BufferPool", + "ClientConn", + "DumpRequest", + "DumpRequestOut", + "DumpResponse", + "ErrClosed", + "ErrLineTooLong", + "ErrPersistEOF", + "ErrPipeline", + "NewChunkedReader", + "NewChunkedWriter", + "NewClientConn", + "NewProxyClientConn", + "NewServerConn", + "NewSingleHostReverseProxy", + "ProxyRequest", + "ReverseProxy", + "ServerConn", + }, + "net/http/pprof": { + "Cmdline", + "Handler", + "Index", + "Profile", + "Symbol", + "Trace", + }, + "net/mail": { + "Address", + "AddressParser", + "ErrHeaderNotPresent", + "Header", + "Message", + "ParseAddress", + "ParseAddressList", + "ParseDate", + "ReadMessage", + }, + "net/netip": { + "Addr", + "AddrFrom16", + "AddrFrom4", + "AddrFromSlice", + "AddrPort", + "AddrPortFrom", + "IPv4Unspecified", + "IPv6LinkLocalAllNodes", + "IPv6LinkLocalAllRouters", + "IPv6Loopback", + "IPv6Unspecified", + "MustParseAddr", + "MustParseAddrPort", + "MustParsePrefix", + "ParseAddr", + "ParseAddrPort", + "ParsePrefix", + "Prefix", + "PrefixFrom", + }, + "net/rpc": { + "Accept", + "Call", + "Client", + "ClientCodec", + "DefaultDebugPath", + "DefaultRPCPath", + "DefaultServer", + "Dial", + "DialHTTP", + "DialHTTPPath", + "ErrShutdown", + "HandleHTTP", + "NewClient", + "NewClientWithCodec", + "NewServer", + "Register", + "RegisterName", + "Request", + "Response", + "ServeCodec", + "ServeConn", + "ServeRequest", + "Server", + "ServerCodec", + "ServerError", + }, + "net/rpc/jsonrpc": { + "Dial", + "NewClient", + "NewClientCodec", + "NewServerCodec", + "ServeConn", + }, + "net/smtp": { + "Auth", + "CRAMMD5Auth", + "Client", + "Dial", + "NewClient", + "PlainAuth", + "SendMail", + "ServerInfo", + }, + "net/textproto": { + "CanonicalMIMEHeaderKey", + "Conn", + "Dial", + "Error", + "MIMEHeader", + "NewConn", + "NewReader", + "NewWriter", + "Pipeline", + "ProtocolError", + "Reader", + "TrimBytes", + "TrimString", + "Writer", + }, + "net/url": { + "Error", + "EscapeError", + "InvalidHostError", + "JoinPath", + "Parse", + "ParseQuery", + "ParseRequestURI", + "PathEscape", + "PathUnescape", + "QueryEscape", + "QueryUnescape", + "URL", + "User", + "UserPassword", + "Userinfo", + "Values", + }, + "os": { + "Args", + "Chdir", + "Chmod", + "Chown", + "Chtimes", + "Clearenv", + "Create", + "CreateTemp", + "DevNull", + "DirEntry", + "DirFS", + "Environ", + "ErrClosed", + "ErrDeadlineExceeded", + "ErrExist", + "ErrInvalid", + "ErrNoDeadline", + "ErrNotExist", + "ErrPermission", + "ErrProcessDone", + "Executable", + "Exit", + "Expand", + "ExpandEnv", + "File", + "FileInfo", + "FileMode", + "FindProcess", + "Getegid", + "Getenv", + "Geteuid", + "Getgid", + "Getgroups", + "Getpagesize", + "Getpid", + "Getppid", + "Getuid", + "Getwd", + "Hostname", + "Interrupt", + "IsExist", + "IsNotExist", + "IsPathSeparator", + "IsPermission", + "IsTimeout", + "Kill", + "Lchown", + "Link", + "LinkError", + "LookupEnv", + "Lstat", + "Mkdir", + "MkdirAll", + "MkdirTemp", + "ModeAppend", + "ModeCharDevice", + "ModeDevice", + "ModeDir", + "ModeExclusive", + "ModeIrregular", + "ModeNamedPipe", + "ModePerm", + "ModeSetgid", + "ModeSetuid", + "ModeSocket", + "ModeSticky", + "ModeSymlink", + "ModeTemporary", + "ModeType", + "NewFile", + "NewSyscallError", + "O_APPEND", + "O_CREATE", + "O_EXCL", + "O_RDONLY", + "O_RDWR", + "O_SYNC", + "O_TRUNC", + "O_WRONLY", + "Open", + "OpenFile", + "PathError", + "PathListSeparator", + "PathSeparator", + "Pipe", + "ProcAttr", + "Process", + "ProcessState", + "ReadDir", + "ReadFile", + "Readlink", + "Remove", + "RemoveAll", + "Rename", + "SEEK_CUR", + "SEEK_END", + "SEEK_SET", + "SameFile", + "Setenv", + "Signal", + "StartProcess", + "Stat", + "Stderr", + "Stdin", + "Stdout", + "Symlink", + "SyscallError", + "TempDir", + "Truncate", + "Unsetenv", + "UserCacheDir", + "UserConfigDir", + "UserHomeDir", + "WriteFile", + }, + "os/exec": { + "Cmd", + "Command", + "CommandContext", + "ErrDot", + "ErrNotFound", + "ErrWaitDelay", + "Error", + "ExitError", + "LookPath", + }, + "os/signal": { + "Ignore", + "Ignored", + "Notify", + "NotifyContext", + "Reset", + "Stop", + }, + "os/user": { + "Current", + "Group", + "Lookup", + "LookupGroup", + "LookupGroupId", + "LookupId", + "UnknownGroupError", + "UnknownGroupIdError", + "UnknownUserError", + "UnknownUserIdError", + "User", + }, + "path": { + "Base", + "Clean", + "Dir", + "ErrBadPattern", + "Ext", + "IsAbs", + "Join", + "Match", + "Split", + }, + "path/filepath": { + "Abs", + "Base", + "Clean", + "Dir", + "ErrBadPattern", + "EvalSymlinks", + "Ext", + "FromSlash", + "Glob", + "HasPrefix", + "IsAbs", + "IsLocal", + "Join", + "ListSeparator", + "Match", + "Rel", + "Separator", + "SkipAll", + "SkipDir", + "Split", + "SplitList", + "ToSlash", + "VolumeName", + "Walk", + "WalkDir", + "WalkFunc", + }, + "plugin": { + "Open", + "Plugin", + "Symbol", + }, + "reflect": { + "Append", + "AppendSlice", + "Array", + "ArrayOf", + "Bool", + "BothDir", + "Chan", + "ChanDir", + "ChanOf", + "Complex128", + "Complex64", + "Copy", + "DeepEqual", + "Float32", + "Float64", + "Func", + "FuncOf", + "Indirect", + "Int", + "Int16", + "Int32", + "Int64", + "Int8", + "Interface", + "Invalid", + "Kind", + "MakeChan", + "MakeFunc", + "MakeMap", + "MakeMapWithSize", + "MakeSlice", + "Map", + "MapIter", + "MapOf", + "Method", + "New", + "NewAt", + "Pointer", + "PointerTo", + "Ptr", + "PtrTo", + "RecvDir", + "Select", + "SelectCase", + "SelectDefault", + "SelectDir", + "SelectRecv", + "SelectSend", + "SendDir", + "Slice", + "SliceHeader", + "SliceOf", + "String", + "StringHeader", + "Struct", + "StructField", + "StructOf", + "StructTag", + "Swapper", + "Type", + "TypeOf", + "Uint", + "Uint16", + "Uint32", + "Uint64", + "Uint8", + "Uintptr", + "UnsafePointer", + "Value", + "ValueError", + "ValueOf", + "VisibleFields", + "Zero", + }, + "regexp": { + "Compile", + "CompilePOSIX", + "Match", + "MatchReader", + "MatchString", + "MustCompile", + "MustCompilePOSIX", + "QuoteMeta", + "Regexp", + }, + "regexp/syntax": { + "ClassNL", + "Compile", + "DotNL", + "EmptyBeginLine", + "EmptyBeginText", + "EmptyEndLine", + "EmptyEndText", + "EmptyNoWordBoundary", + "EmptyOp", + "EmptyOpContext", + "EmptyWordBoundary", + "ErrInternalError", + "ErrInvalidCharClass", + "ErrInvalidCharRange", + "ErrInvalidEscape", + "ErrInvalidNamedCapture", + "ErrInvalidPerlOp", + "ErrInvalidRepeatOp", + "ErrInvalidRepeatSize", + "ErrInvalidUTF8", + "ErrLarge", + "ErrMissingBracket", + "ErrMissingParen", + "ErrMissingRepeatArgument", + "ErrNestingDepth", + "ErrTrailingBackslash", + "ErrUnexpectedParen", + "Error", + "ErrorCode", + "Flags", + "FoldCase", + "Inst", + "InstAlt", + "InstAltMatch", + "InstCapture", + "InstEmptyWidth", + "InstFail", + "InstMatch", + "InstNop", + "InstOp", + "InstRune", + "InstRune1", + "InstRuneAny", + "InstRuneAnyNotNL", + "IsWordChar", + "Literal", + "MatchNL", + "NonGreedy", + "OneLine", + "Op", + "OpAlternate", + "OpAnyChar", + "OpAnyCharNotNL", + "OpBeginLine", + "OpBeginText", + "OpCapture", + "OpCharClass", + "OpConcat", + "OpEmptyMatch", + "OpEndLine", + "OpEndText", + "OpLiteral", + "OpNoMatch", + "OpNoWordBoundary", + "OpPlus", + "OpQuest", + "OpRepeat", + "OpStar", + "OpWordBoundary", + "POSIX", + "Parse", + "Perl", + "PerlX", + "Prog", + "Regexp", + "Simple", + "UnicodeGroups", + "WasDollar", + }, + "runtime": { + "BlockProfile", + "BlockProfileRecord", + "Breakpoint", + "CPUProfile", + "Caller", + "Callers", + "CallersFrames", + "Compiler", + "Error", + "Frame", + "Frames", + "Func", + "FuncForPC", + "GC", + "GOARCH", + "GOMAXPROCS", + "GOOS", + "GOROOT", + "Goexit", + "GoroutineProfile", + "Gosched", + "KeepAlive", + "LockOSThread", + "MemProfile", + "MemProfileRate", + "MemProfileRecord", + "MemStats", + "MutexProfile", + "NumCPU", + "NumCgoCall", + "NumGoroutine", + "ReadMemStats", + "ReadTrace", + "SetBlockProfileRate", + "SetCPUProfileRate", + "SetCgoTraceback", + "SetFinalizer", + "SetMutexProfileFraction", + "Stack", + "StackRecord", + "StartTrace", + "StopTrace", + "ThreadCreateProfile", + "TypeAssertionError", + "UnlockOSThread", + "Version", + }, + "runtime/cgo": { + "Handle", + "Incomplete", + "NewHandle", + }, + "runtime/coverage": { + "ClearCounters", + "WriteCounters", + "WriteCountersDir", + "WriteMeta", + "WriteMetaDir", + }, + "runtime/debug": { + "BuildInfo", + "BuildSetting", + "FreeOSMemory", + "GCStats", + "Module", + "ParseBuildInfo", + "PrintStack", + "ReadBuildInfo", + "ReadGCStats", + "SetGCPercent", + "SetMaxStack", + "SetMaxThreads", + "SetMemoryLimit", + "SetPanicOnFault", + "SetTraceback", + "Stack", + "WriteHeapDump", + }, + "runtime/metrics": { + "All", + "Description", + "Float64Histogram", + "KindBad", + "KindFloat64", + "KindFloat64Histogram", + "KindUint64", + "Read", + "Sample", + "Value", + "ValueKind", + }, + "runtime/pprof": { + "Do", + "ForLabels", + "Label", + "LabelSet", + "Labels", + "Lookup", + "NewProfile", + "Profile", + "Profiles", + "SetGoroutineLabels", + "StartCPUProfile", + "StopCPUProfile", + "WithLabels", + "WriteHeapProfile", + }, + "runtime/trace": { + "IsEnabled", + "Log", + "Logf", + "NewTask", + "Region", + "Start", + "StartRegion", + "Stop", + "Task", + "WithRegion", + }, + "sort": { + "Find", + "Float64Slice", + "Float64s", + "Float64sAreSorted", + "IntSlice", + "Interface", + "Ints", + "IntsAreSorted", + "IsSorted", + "Reverse", + "Search", + "SearchFloat64s", + "SearchInts", + "SearchStrings", + "Slice", + "SliceIsSorted", + "SliceStable", + "Sort", + "Stable", + "StringSlice", + "Strings", + "StringsAreSorted", + }, + "strconv": { + "AppendBool", + "AppendFloat", + "AppendInt", + "AppendQuote", + "AppendQuoteRune", + "AppendQuoteRuneToASCII", + "AppendQuoteRuneToGraphic", + "AppendQuoteToASCII", + "AppendQuoteToGraphic", + "AppendUint", + "Atoi", + "CanBackquote", + "ErrRange", + "ErrSyntax", + "FormatBool", + "FormatComplex", + "FormatFloat", + "FormatInt", + "FormatUint", + "IntSize", + "IsGraphic", + "IsPrint", + "Itoa", + "NumError", + "ParseBool", + "ParseComplex", + "ParseFloat", + "ParseInt", + "ParseUint", + "Quote", + "QuoteRune", + "QuoteRuneToASCII", + "QuoteRuneToGraphic", + "QuoteToASCII", + "QuoteToGraphic", + "QuotedPrefix", + "Unquote", + "UnquoteChar", + }, + "strings": { + "Builder", + "Clone", + "Compare", + "Contains", + "ContainsAny", + "ContainsRune", + "Count", + "Cut", + "CutPrefix", + "CutSuffix", + "EqualFold", + "Fields", + "FieldsFunc", + "HasPrefix", + "HasSuffix", + "Index", + "IndexAny", + "IndexByte", + "IndexFunc", + "IndexRune", + "Join", + "LastIndex", + "LastIndexAny", + "LastIndexByte", + "LastIndexFunc", + "Map", + "NewReader", + "NewReplacer", + "Reader", + "Repeat", + "Replace", + "ReplaceAll", + "Replacer", + "Split", + "SplitAfter", + "SplitAfterN", + "SplitN", + "Title", + "ToLower", + "ToLowerSpecial", + "ToTitle", + "ToTitleSpecial", + "ToUpper", + "ToUpperSpecial", + "ToValidUTF8", + "Trim", + "TrimFunc", + "TrimLeft", + "TrimLeftFunc", + "TrimPrefix", + "TrimRight", + "TrimRightFunc", + "TrimSpace", + "TrimSuffix", + }, + "sync": { + "Cond", + "Locker", + "Map", + "Mutex", + "NewCond", + "Once", + "Pool", + "RWMutex", + "WaitGroup", + }, + "sync/atomic": { + "AddInt32", + "AddInt64", + "AddUint32", + "AddUint64", + "AddUintptr", + "Bool", + "CompareAndSwapInt32", + "CompareAndSwapInt64", + "CompareAndSwapPointer", + "CompareAndSwapUint32", + "CompareAndSwapUint64", + "CompareAndSwapUintptr", + "Int32", + "Int64", + "LoadInt32", + "LoadInt64", + "LoadPointer", + "LoadUint32", + "LoadUint64", + "LoadUintptr", + "Pointer", + "StoreInt32", + "StoreInt64", + "StorePointer", + "StoreUint32", + "StoreUint64", + "StoreUintptr", + "SwapInt32", + "SwapInt64", + "SwapPointer", + "SwapUint32", + "SwapUint64", + "SwapUintptr", + "Uint32", + "Uint64", + "Uintptr", + "Value", + }, + "syscall": { + "AF_ALG", + "AF_APPLETALK", + "AF_ARP", + "AF_ASH", + "AF_ATM", + "AF_ATMPVC", + "AF_ATMSVC", + "AF_AX25", + "AF_BLUETOOTH", + "AF_BRIDGE", + "AF_CAIF", + "AF_CAN", + "AF_CCITT", + "AF_CHAOS", + "AF_CNT", + "AF_COIP", + "AF_DATAKIT", + "AF_DECnet", + "AF_DLI", + "AF_E164", + "AF_ECMA", + "AF_ECONET", + "AF_ENCAP", + "AF_FILE", + "AF_HYLINK", + "AF_IEEE80211", + "AF_IEEE802154", + "AF_IMPLINK", + "AF_INET", + "AF_INET6", + "AF_INET6_SDP", + "AF_INET_SDP", + "AF_IPX", + "AF_IRDA", + "AF_ISDN", + "AF_ISO", + "AF_IUCV", + "AF_KEY", + "AF_LAT", + "AF_LINK", + "AF_LLC", + "AF_LOCAL", + "AF_MAX", + "AF_MPLS", + "AF_NATM", + "AF_NDRV", + "AF_NETBEUI", + "AF_NETBIOS", + "AF_NETGRAPH", + "AF_NETLINK", + "AF_NETROM", + "AF_NS", + "AF_OROUTE", + "AF_OSI", + "AF_PACKET", + "AF_PHONET", + "AF_PPP", + "AF_PPPOX", + "AF_PUP", + "AF_RDS", + "AF_RESERVED_36", + "AF_ROSE", + "AF_ROUTE", + "AF_RXRPC", + "AF_SCLUSTER", + "AF_SECURITY", + "AF_SIP", + "AF_SLOW", + "AF_SNA", + "AF_SYSTEM", + "AF_TIPC", + "AF_UNIX", + "AF_UNSPEC", + "AF_UTUN", + "AF_VENDOR00", + "AF_VENDOR01", + "AF_VENDOR02", + "AF_VENDOR03", + "AF_VENDOR04", + "AF_VENDOR05", + "AF_VENDOR06", + "AF_VENDOR07", + "AF_VENDOR08", + "AF_VENDOR09", + "AF_VENDOR10", + "AF_VENDOR11", + "AF_VENDOR12", + "AF_VENDOR13", + "AF_VENDOR14", + "AF_VENDOR15", + "AF_VENDOR16", + "AF_VENDOR17", + "AF_VENDOR18", + "AF_VENDOR19", + "AF_VENDOR20", + "AF_VENDOR21", + "AF_VENDOR22", + "AF_VENDOR23", + "AF_VENDOR24", + "AF_VENDOR25", + "AF_VENDOR26", + "AF_VENDOR27", + "AF_VENDOR28", + "AF_VENDOR29", + "AF_VENDOR30", + "AF_VENDOR31", + "AF_VENDOR32", + "AF_VENDOR33", + "AF_VENDOR34", + "AF_VENDOR35", + "AF_VENDOR36", + "AF_VENDOR37", + "AF_VENDOR38", + "AF_VENDOR39", + "AF_VENDOR40", + "AF_VENDOR41", + "AF_VENDOR42", + "AF_VENDOR43", + "AF_VENDOR44", + "AF_VENDOR45", + "AF_VENDOR46", + "AF_VENDOR47", + "AF_WANPIPE", + "AF_X25", + "AI_CANONNAME", + "AI_NUMERICHOST", + "AI_PASSIVE", + "APPLICATION_ERROR", + "ARPHRD_ADAPT", + "ARPHRD_APPLETLK", + "ARPHRD_ARCNET", + "ARPHRD_ASH", + "ARPHRD_ATM", + "ARPHRD_AX25", + "ARPHRD_BIF", + "ARPHRD_CHAOS", + "ARPHRD_CISCO", + "ARPHRD_CSLIP", + "ARPHRD_CSLIP6", + "ARPHRD_DDCMP", + "ARPHRD_DLCI", + "ARPHRD_ECONET", + "ARPHRD_EETHER", + "ARPHRD_ETHER", + "ARPHRD_EUI64", + "ARPHRD_FCAL", + "ARPHRD_FCFABRIC", + "ARPHRD_FCPL", + "ARPHRD_FCPP", + "ARPHRD_FDDI", + "ARPHRD_FRAD", + "ARPHRD_FRELAY", + "ARPHRD_HDLC", + "ARPHRD_HIPPI", + "ARPHRD_HWX25", + "ARPHRD_IEEE1394", + "ARPHRD_IEEE802", + "ARPHRD_IEEE80211", + "ARPHRD_IEEE80211_PRISM", + "ARPHRD_IEEE80211_RADIOTAP", + "ARPHRD_IEEE802154", + "ARPHRD_IEEE802154_PHY", + "ARPHRD_IEEE802_TR", + "ARPHRD_INFINIBAND", + "ARPHRD_IPDDP", + "ARPHRD_IPGRE", + "ARPHRD_IRDA", + "ARPHRD_LAPB", + "ARPHRD_LOCALTLK", + "ARPHRD_LOOPBACK", + "ARPHRD_METRICOM", + "ARPHRD_NETROM", + "ARPHRD_NONE", + "ARPHRD_PIMREG", + "ARPHRD_PPP", + "ARPHRD_PRONET", + "ARPHRD_RAWHDLC", + "ARPHRD_ROSE", + "ARPHRD_RSRVD", + "ARPHRD_SIT", + "ARPHRD_SKIP", + "ARPHRD_SLIP", + "ARPHRD_SLIP6", + "ARPHRD_STRIP", + "ARPHRD_TUNNEL", + "ARPHRD_TUNNEL6", + "ARPHRD_VOID", + "ARPHRD_X25", + "AUTHTYPE_CLIENT", + "AUTHTYPE_SERVER", + "Accept", + "Accept4", + "AcceptEx", + "Access", + "Acct", + "AddrinfoW", + "Adjtime", + "Adjtimex", + "AllThreadsSyscall", + "AllThreadsSyscall6", + "AttachLsf", + "B0", + "B1000000", + "B110", + "B115200", + "B1152000", + "B1200", + "B134", + "B14400", + "B150", + "B1500000", + "B1800", + "B19200", + "B200", + "B2000000", + "B230400", + "B2400", + "B2500000", + "B28800", + "B300", + "B3000000", + "B3500000", + "B38400", + "B4000000", + "B460800", + "B4800", + "B50", + "B500000", + "B57600", + "B576000", + "B600", + "B7200", + "B75", + "B76800", + "B921600", + "B9600", + "BASE_PROTOCOL", + "BIOCFEEDBACK", + "BIOCFLUSH", + "BIOCGBLEN", + "BIOCGDIRECTION", + "BIOCGDIRFILT", + "BIOCGDLT", + "BIOCGDLTLIST", + "BIOCGETBUFMODE", + "BIOCGETIF", + "BIOCGETZMAX", + "BIOCGFEEDBACK", + "BIOCGFILDROP", + "BIOCGHDRCMPLT", + "BIOCGRSIG", + "BIOCGRTIMEOUT", + "BIOCGSEESENT", + "BIOCGSTATS", + "BIOCGSTATSOLD", + "BIOCGTSTAMP", + "BIOCIMMEDIATE", + "BIOCLOCK", + "BIOCPROMISC", + "BIOCROTZBUF", + "BIOCSBLEN", + "BIOCSDIRECTION", + "BIOCSDIRFILT", + "BIOCSDLT", + "BIOCSETBUFMODE", + "BIOCSETF", + "BIOCSETFNR", + "BIOCSETIF", + "BIOCSETWF", + "BIOCSETZBUF", + "BIOCSFEEDBACK", + "BIOCSFILDROP", + "BIOCSHDRCMPLT", + "BIOCSRSIG", + "BIOCSRTIMEOUT", + "BIOCSSEESENT", + "BIOCSTCPF", + "BIOCSTSTAMP", + "BIOCSUDPF", + "BIOCVERSION", + "BPF_A", + "BPF_ABS", + "BPF_ADD", + "BPF_ALIGNMENT", + "BPF_ALIGNMENT32", + "BPF_ALU", + "BPF_AND", + "BPF_B", + "BPF_BUFMODE_BUFFER", + "BPF_BUFMODE_ZBUF", + "BPF_DFLTBUFSIZE", + "BPF_DIRECTION_IN", + "BPF_DIRECTION_OUT", + "BPF_DIV", + "BPF_H", + "BPF_IMM", + "BPF_IND", + "BPF_JA", + "BPF_JEQ", + "BPF_JGE", + "BPF_JGT", + "BPF_JMP", + "BPF_JSET", + "BPF_K", + "BPF_LD", + "BPF_LDX", + "BPF_LEN", + "BPF_LSH", + "BPF_MAJOR_VERSION", + "BPF_MAXBUFSIZE", + "BPF_MAXINSNS", + "BPF_MEM", + "BPF_MEMWORDS", + "BPF_MINBUFSIZE", + "BPF_MINOR_VERSION", + "BPF_MISC", + "BPF_MSH", + "BPF_MUL", + "BPF_NEG", + "BPF_OR", + "BPF_RELEASE", + "BPF_RET", + "BPF_RSH", + "BPF_ST", + "BPF_STX", + "BPF_SUB", + "BPF_TAX", + "BPF_TXA", + "BPF_T_BINTIME", + "BPF_T_BINTIME_FAST", + "BPF_T_BINTIME_MONOTONIC", + "BPF_T_BINTIME_MONOTONIC_FAST", + "BPF_T_FAST", + "BPF_T_FLAG_MASK", + "BPF_T_FORMAT_MASK", + "BPF_T_MICROTIME", + "BPF_T_MICROTIME_FAST", + "BPF_T_MICROTIME_MONOTONIC", + "BPF_T_MICROTIME_MONOTONIC_FAST", + "BPF_T_MONOTONIC", + "BPF_T_MONOTONIC_FAST", + "BPF_T_NANOTIME", + "BPF_T_NANOTIME_FAST", + "BPF_T_NANOTIME_MONOTONIC", + "BPF_T_NANOTIME_MONOTONIC_FAST", + "BPF_T_NONE", + "BPF_T_NORMAL", + "BPF_W", + "BPF_X", + "BRKINT", + "Bind", + "BindToDevice", + "BpfBuflen", + "BpfDatalink", + "BpfHdr", + "BpfHeadercmpl", + "BpfInsn", + "BpfInterface", + "BpfJump", + "BpfProgram", + "BpfStat", + "BpfStats", + "BpfStmt", + "BpfTimeout", + "BpfTimeval", + "BpfVersion", + "BpfZbuf", + "BpfZbufHeader", + "ByHandleFileInformation", + "BytePtrFromString", + "ByteSliceFromString", + "CCR0_FLUSH", + "CERT_CHAIN_POLICY_AUTHENTICODE", + "CERT_CHAIN_POLICY_AUTHENTICODE_TS", + "CERT_CHAIN_POLICY_BASE", + "CERT_CHAIN_POLICY_BASIC_CONSTRAINTS", + "CERT_CHAIN_POLICY_EV", + "CERT_CHAIN_POLICY_MICROSOFT_ROOT", + "CERT_CHAIN_POLICY_NT_AUTH", + "CERT_CHAIN_POLICY_SSL", + "CERT_E_CN_NO_MATCH", + "CERT_E_EXPIRED", + "CERT_E_PURPOSE", + "CERT_E_ROLE", + "CERT_E_UNTRUSTEDROOT", + "CERT_STORE_ADD_ALWAYS", + "CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", + "CERT_STORE_PROV_MEMORY", + "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT", + "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT", + "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT", + "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT", + "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT", + "CERT_TRUST_INVALID_BASIC_CONSTRAINTS", + "CERT_TRUST_INVALID_EXTENSION", + "CERT_TRUST_INVALID_NAME_CONSTRAINTS", + "CERT_TRUST_INVALID_POLICY_CONSTRAINTS", + "CERT_TRUST_IS_CYCLIC", + "CERT_TRUST_IS_EXPLICIT_DISTRUST", + "CERT_TRUST_IS_NOT_SIGNATURE_VALID", + "CERT_TRUST_IS_NOT_TIME_VALID", + "CERT_TRUST_IS_NOT_VALID_FOR_USAGE", + "CERT_TRUST_IS_OFFLINE_REVOCATION", + "CERT_TRUST_IS_REVOKED", + "CERT_TRUST_IS_UNTRUSTED_ROOT", + "CERT_TRUST_NO_ERROR", + "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY", + "CERT_TRUST_REVOCATION_STATUS_UNKNOWN", + "CFLUSH", + "CLOCAL", + "CLONE_CHILD_CLEARTID", + "CLONE_CHILD_SETTID", + "CLONE_CLEAR_SIGHAND", + "CLONE_CSIGNAL", + "CLONE_DETACHED", + "CLONE_FILES", + "CLONE_FS", + "CLONE_INTO_CGROUP", + "CLONE_IO", + "CLONE_NEWCGROUP", + "CLONE_NEWIPC", + "CLONE_NEWNET", + "CLONE_NEWNS", + "CLONE_NEWPID", + "CLONE_NEWTIME", + "CLONE_NEWUSER", + "CLONE_NEWUTS", + "CLONE_PARENT", + "CLONE_PARENT_SETTID", + "CLONE_PID", + "CLONE_PIDFD", + "CLONE_PTRACE", + "CLONE_SETTLS", + "CLONE_SIGHAND", + "CLONE_SYSVSEM", + "CLONE_THREAD", + "CLONE_UNTRACED", + "CLONE_VFORK", + "CLONE_VM", + "CPUID_CFLUSH", + "CREAD", + "CREATE_ALWAYS", + "CREATE_NEW", + "CREATE_NEW_PROCESS_GROUP", + "CREATE_UNICODE_ENVIRONMENT", + "CRYPT_DEFAULT_CONTAINER_OPTIONAL", + "CRYPT_DELETEKEYSET", + "CRYPT_MACHINE_KEYSET", + "CRYPT_NEWKEYSET", + "CRYPT_SILENT", + "CRYPT_VERIFYCONTEXT", + "CS5", + "CS6", + "CS7", + "CS8", + "CSIZE", + "CSTART", + "CSTATUS", + "CSTOP", + "CSTOPB", + "CSUSP", + "CTL_MAXNAME", + "CTL_NET", + "CTL_QUERY", + "CTRL_BREAK_EVENT", + "CTRL_CLOSE_EVENT", + "CTRL_C_EVENT", + "CTRL_LOGOFF_EVENT", + "CTRL_SHUTDOWN_EVENT", + "CancelIo", + "CancelIoEx", + "CertAddCertificateContextToStore", + "CertChainContext", + "CertChainElement", + "CertChainPara", + "CertChainPolicyPara", + "CertChainPolicyStatus", + "CertCloseStore", + "CertContext", + "CertCreateCertificateContext", + "CertEnhKeyUsage", + "CertEnumCertificatesInStore", + "CertFreeCertificateChain", + "CertFreeCertificateContext", + "CertGetCertificateChain", + "CertInfo", + "CertOpenStore", + "CertOpenSystemStore", + "CertRevocationCrlInfo", + "CertRevocationInfo", + "CertSimpleChain", + "CertTrustListInfo", + "CertTrustStatus", + "CertUsageMatch", + "CertVerifyCertificateChainPolicy", + "Chdir", + "CheckBpfVersion", + "Chflags", + "Chmod", + "Chown", + "Chroot", + "Clearenv", + "Close", + "CloseHandle", + "CloseOnExec", + "Closesocket", + "CmsgLen", + "CmsgSpace", + "Cmsghdr", + "CommandLineToArgv", + "ComputerName", + "Conn", + "Connect", + "ConnectEx", + "ConvertSidToStringSid", + "ConvertStringSidToSid", + "CopySid", + "Creat", + "CreateDirectory", + "CreateFile", + "CreateFileMapping", + "CreateHardLink", + "CreateIoCompletionPort", + "CreatePipe", + "CreateProcess", + "CreateProcessAsUser", + "CreateSymbolicLink", + "CreateToolhelp32Snapshot", + "Credential", + "CryptAcquireContext", + "CryptGenRandom", + "CryptReleaseContext", + "DIOCBSFLUSH", + "DIOCOSFPFLUSH", + "DLL", + "DLLError", + "DLT_A429", + "DLT_A653_ICM", + "DLT_AIRONET_HEADER", + "DLT_AOS", + "DLT_APPLE_IP_OVER_IEEE1394", + "DLT_ARCNET", + "DLT_ARCNET_LINUX", + "DLT_ATM_CLIP", + "DLT_ATM_RFC1483", + "DLT_AURORA", + "DLT_AX25", + "DLT_AX25_KISS", + "DLT_BACNET_MS_TP", + "DLT_BLUETOOTH_HCI_H4", + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR", + "DLT_CAN20B", + "DLT_CAN_SOCKETCAN", + "DLT_CHAOS", + "DLT_CHDLC", + "DLT_CISCO_IOS", + "DLT_C_HDLC", + "DLT_C_HDLC_WITH_DIR", + "DLT_DBUS", + "DLT_DECT", + "DLT_DOCSIS", + "DLT_DVB_CI", + "DLT_ECONET", + "DLT_EN10MB", + "DLT_EN3MB", + "DLT_ENC", + "DLT_ERF", + "DLT_ERF_ETH", + "DLT_ERF_POS", + "DLT_FC_2", + "DLT_FC_2_WITH_FRAME_DELIMS", + "DLT_FDDI", + "DLT_FLEXRAY", + "DLT_FRELAY", + "DLT_FRELAY_WITH_DIR", + "DLT_GCOM_SERIAL", + "DLT_GCOM_T1E1", + "DLT_GPF_F", + "DLT_GPF_T", + "DLT_GPRS_LLC", + "DLT_GSMTAP_ABIS", + "DLT_GSMTAP_UM", + "DLT_HDLC", + "DLT_HHDLC", + "DLT_HIPPI", + "DLT_IBM_SN", + "DLT_IBM_SP", + "DLT_IEEE802", + "DLT_IEEE802_11", + "DLT_IEEE802_11_RADIO", + "DLT_IEEE802_11_RADIO_AVS", + "DLT_IEEE802_15_4", + "DLT_IEEE802_15_4_LINUX", + "DLT_IEEE802_15_4_NOFCS", + "DLT_IEEE802_15_4_NONASK_PHY", + "DLT_IEEE802_16_MAC_CPS", + "DLT_IEEE802_16_MAC_CPS_RADIO", + "DLT_IPFILTER", + "DLT_IPMB", + "DLT_IPMB_LINUX", + "DLT_IPNET", + "DLT_IPOIB", + "DLT_IPV4", + "DLT_IPV6", + "DLT_IP_OVER_FC", + "DLT_JUNIPER_ATM1", + "DLT_JUNIPER_ATM2", + "DLT_JUNIPER_ATM_CEMIC", + "DLT_JUNIPER_CHDLC", + "DLT_JUNIPER_ES", + "DLT_JUNIPER_ETHER", + "DLT_JUNIPER_FIBRECHANNEL", + "DLT_JUNIPER_FRELAY", + "DLT_JUNIPER_GGSN", + "DLT_JUNIPER_ISM", + "DLT_JUNIPER_MFR", + "DLT_JUNIPER_MLFR", + "DLT_JUNIPER_MLPPP", + "DLT_JUNIPER_MONITOR", + "DLT_JUNIPER_PIC_PEER", + "DLT_JUNIPER_PPP", + "DLT_JUNIPER_PPPOE", + "DLT_JUNIPER_PPPOE_ATM", + "DLT_JUNIPER_SERVICES", + "DLT_JUNIPER_SRX_E2E", + "DLT_JUNIPER_ST", + "DLT_JUNIPER_VP", + "DLT_JUNIPER_VS", + "DLT_LAPB_WITH_DIR", + "DLT_LAPD", + "DLT_LIN", + "DLT_LINUX_EVDEV", + "DLT_LINUX_IRDA", + "DLT_LINUX_LAPD", + "DLT_LINUX_PPP_WITHDIRECTION", + "DLT_LINUX_SLL", + "DLT_LOOP", + "DLT_LTALK", + "DLT_MATCHING_MAX", + "DLT_MATCHING_MIN", + "DLT_MFR", + "DLT_MOST", + "DLT_MPEG_2_TS", + "DLT_MPLS", + "DLT_MTP2", + "DLT_MTP2_WITH_PHDR", + "DLT_MTP3", + "DLT_MUX27010", + "DLT_NETANALYZER", + "DLT_NETANALYZER_TRANSPARENT", + "DLT_NFC_LLCP", + "DLT_NFLOG", + "DLT_NG40", + "DLT_NULL", + "DLT_PCI_EXP", + "DLT_PFLOG", + "DLT_PFSYNC", + "DLT_PPI", + "DLT_PPP", + "DLT_PPP_BSDOS", + "DLT_PPP_ETHER", + "DLT_PPP_PPPD", + "DLT_PPP_SERIAL", + "DLT_PPP_WITH_DIR", + "DLT_PPP_WITH_DIRECTION", + "DLT_PRISM_HEADER", + "DLT_PRONET", + "DLT_RAIF1", + "DLT_RAW", + "DLT_RAWAF_MASK", + "DLT_RIO", + "DLT_SCCP", + "DLT_SITA", + "DLT_SLIP", + "DLT_SLIP_BSDOS", + "DLT_STANAG_5066_D_PDU", + "DLT_SUNATM", + "DLT_SYMANTEC_FIREWALL", + "DLT_TZSP", + "DLT_USB", + "DLT_USB_LINUX", + "DLT_USB_LINUX_MMAPPED", + "DLT_USER0", + "DLT_USER1", + "DLT_USER10", + "DLT_USER11", + "DLT_USER12", + "DLT_USER13", + "DLT_USER14", + "DLT_USER15", + "DLT_USER2", + "DLT_USER3", + "DLT_USER4", + "DLT_USER5", + "DLT_USER6", + "DLT_USER7", + "DLT_USER8", + "DLT_USER9", + "DLT_WIHART", + "DLT_X2E_SERIAL", + "DLT_X2E_XORAYA", + "DNSMXData", + "DNSPTRData", + "DNSRecord", + "DNSSRVData", + "DNSTXTData", + "DNS_INFO_NO_RECORDS", + "DNS_TYPE_A", + "DNS_TYPE_A6", + "DNS_TYPE_AAAA", + "DNS_TYPE_ADDRS", + "DNS_TYPE_AFSDB", + "DNS_TYPE_ALL", + "DNS_TYPE_ANY", + "DNS_TYPE_ATMA", + "DNS_TYPE_AXFR", + "DNS_TYPE_CERT", + "DNS_TYPE_CNAME", + "DNS_TYPE_DHCID", + "DNS_TYPE_DNAME", + "DNS_TYPE_DNSKEY", + "DNS_TYPE_DS", + "DNS_TYPE_EID", + "DNS_TYPE_GID", + "DNS_TYPE_GPOS", + "DNS_TYPE_HINFO", + "DNS_TYPE_ISDN", + "DNS_TYPE_IXFR", + "DNS_TYPE_KEY", + "DNS_TYPE_KX", + "DNS_TYPE_LOC", + "DNS_TYPE_MAILA", + "DNS_TYPE_MAILB", + "DNS_TYPE_MB", + "DNS_TYPE_MD", + "DNS_TYPE_MF", + "DNS_TYPE_MG", + "DNS_TYPE_MINFO", + "DNS_TYPE_MR", + "DNS_TYPE_MX", + "DNS_TYPE_NAPTR", + "DNS_TYPE_NBSTAT", + "DNS_TYPE_NIMLOC", + "DNS_TYPE_NS", + "DNS_TYPE_NSAP", + "DNS_TYPE_NSAPPTR", + "DNS_TYPE_NSEC", + "DNS_TYPE_NULL", + "DNS_TYPE_NXT", + "DNS_TYPE_OPT", + "DNS_TYPE_PTR", + "DNS_TYPE_PX", + "DNS_TYPE_RP", + "DNS_TYPE_RRSIG", + "DNS_TYPE_RT", + "DNS_TYPE_SIG", + "DNS_TYPE_SINK", + "DNS_TYPE_SOA", + "DNS_TYPE_SRV", + "DNS_TYPE_TEXT", + "DNS_TYPE_TKEY", + "DNS_TYPE_TSIG", + "DNS_TYPE_UID", + "DNS_TYPE_UINFO", + "DNS_TYPE_UNSPEC", + "DNS_TYPE_WINS", + "DNS_TYPE_WINSR", + "DNS_TYPE_WKS", + "DNS_TYPE_X25", + "DT_BLK", + "DT_CHR", + "DT_DIR", + "DT_FIFO", + "DT_LNK", + "DT_REG", + "DT_SOCK", + "DT_UNKNOWN", + "DT_WHT", + "DUPLICATE_CLOSE_SOURCE", + "DUPLICATE_SAME_ACCESS", + "DeleteFile", + "DetachLsf", + "DeviceIoControl", + "Dirent", + "DnsNameCompare", + "DnsQuery", + "DnsRecordListFree", + "DnsSectionAdditional", + "DnsSectionAnswer", + "DnsSectionAuthority", + "DnsSectionQuestion", + "Dup", + "Dup2", + "Dup3", + "DuplicateHandle", + "E2BIG", + "EACCES", + "EADDRINUSE", + "EADDRNOTAVAIL", + "EADV", + "EAFNOSUPPORT", + "EAGAIN", + "EALREADY", + "EAUTH", + "EBADARCH", + "EBADE", + "EBADEXEC", + "EBADF", + "EBADFD", + "EBADMACHO", + "EBADMSG", + "EBADR", + "EBADRPC", + "EBADRQC", + "EBADSLT", + "EBFONT", + "EBUSY", + "ECANCELED", + "ECAPMODE", + "ECHILD", + "ECHO", + "ECHOCTL", + "ECHOE", + "ECHOK", + "ECHOKE", + "ECHONL", + "ECHOPRT", + "ECHRNG", + "ECOMM", + "ECONNABORTED", + "ECONNREFUSED", + "ECONNRESET", + "EDEADLK", + "EDEADLOCK", + "EDESTADDRREQ", + "EDEVERR", + "EDOM", + "EDOOFUS", + "EDOTDOT", + "EDQUOT", + "EEXIST", + "EFAULT", + "EFBIG", + "EFER_LMA", + "EFER_LME", + "EFER_NXE", + "EFER_SCE", + "EFTYPE", + "EHOSTDOWN", + "EHOSTUNREACH", + "EHWPOISON", + "EIDRM", + "EILSEQ", + "EINPROGRESS", + "EINTR", + "EINVAL", + "EIO", + "EIPSEC", + "EISCONN", + "EISDIR", + "EISNAM", + "EKEYEXPIRED", + "EKEYREJECTED", + "EKEYREVOKED", + "EL2HLT", + "EL2NSYNC", + "EL3HLT", + "EL3RST", + "ELAST", + "ELF_NGREG", + "ELF_PRARGSZ", + "ELIBACC", + "ELIBBAD", + "ELIBEXEC", + "ELIBMAX", + "ELIBSCN", + "ELNRNG", + "ELOOP", + "EMEDIUMTYPE", + "EMFILE", + "EMLINK", + "EMSGSIZE", + "EMT_TAGOVF", + "EMULTIHOP", + "EMUL_ENABLED", + "EMUL_LINUX", + "EMUL_LINUX32", + "EMUL_MAXID", + "EMUL_NATIVE", + "ENAMETOOLONG", + "ENAVAIL", + "ENDRUNDISC", + "ENEEDAUTH", + "ENETDOWN", + "ENETRESET", + "ENETUNREACH", + "ENFILE", + "ENOANO", + "ENOATTR", + "ENOBUFS", + "ENOCSI", + "ENODATA", + "ENODEV", + "ENOENT", + "ENOEXEC", + "ENOKEY", + "ENOLCK", + "ENOLINK", + "ENOMEDIUM", + "ENOMEM", + "ENOMSG", + "ENONET", + "ENOPKG", + "ENOPOLICY", + "ENOPROTOOPT", + "ENOSPC", + "ENOSR", + "ENOSTR", + "ENOSYS", + "ENOTBLK", + "ENOTCAPABLE", + "ENOTCONN", + "ENOTDIR", + "ENOTEMPTY", + "ENOTNAM", + "ENOTRECOVERABLE", + "ENOTSOCK", + "ENOTSUP", + "ENOTTY", + "ENOTUNIQ", + "ENXIO", + "EN_SW_CTL_INF", + "EN_SW_CTL_PREC", + "EN_SW_CTL_ROUND", + "EN_SW_DATACHAIN", + "EN_SW_DENORM", + "EN_SW_INVOP", + "EN_SW_OVERFLOW", + "EN_SW_PRECLOSS", + "EN_SW_UNDERFLOW", + "EN_SW_ZERODIV", + "EOPNOTSUPP", + "EOVERFLOW", + "EOWNERDEAD", + "EPERM", + "EPFNOSUPPORT", + "EPIPE", + "EPOLLERR", + "EPOLLET", + "EPOLLHUP", + "EPOLLIN", + "EPOLLMSG", + "EPOLLONESHOT", + "EPOLLOUT", + "EPOLLPRI", + "EPOLLRDBAND", + "EPOLLRDHUP", + "EPOLLRDNORM", + "EPOLLWRBAND", + "EPOLLWRNORM", + "EPOLL_CLOEXEC", + "EPOLL_CTL_ADD", + "EPOLL_CTL_DEL", + "EPOLL_CTL_MOD", + "EPOLL_NONBLOCK", + "EPROCLIM", + "EPROCUNAVAIL", + "EPROGMISMATCH", + "EPROGUNAVAIL", + "EPROTO", + "EPROTONOSUPPORT", + "EPROTOTYPE", + "EPWROFF", + "EQFULL", + "ERANGE", + "EREMCHG", + "EREMOTE", + "EREMOTEIO", + "ERESTART", + "ERFKILL", + "EROFS", + "ERPCMISMATCH", + "ERROR_ACCESS_DENIED", + "ERROR_ALREADY_EXISTS", + "ERROR_BROKEN_PIPE", + "ERROR_BUFFER_OVERFLOW", + "ERROR_DIR_NOT_EMPTY", + "ERROR_ENVVAR_NOT_FOUND", + "ERROR_FILE_EXISTS", + "ERROR_FILE_NOT_FOUND", + "ERROR_HANDLE_EOF", + "ERROR_INSUFFICIENT_BUFFER", + "ERROR_IO_PENDING", + "ERROR_MOD_NOT_FOUND", + "ERROR_MORE_DATA", + "ERROR_NETNAME_DELETED", + "ERROR_NOT_FOUND", + "ERROR_NO_MORE_FILES", + "ERROR_OPERATION_ABORTED", + "ERROR_PATH_NOT_FOUND", + "ERROR_PRIVILEGE_NOT_HELD", + "ERROR_PROC_NOT_FOUND", + "ESHLIBVERS", + "ESHUTDOWN", + "ESOCKTNOSUPPORT", + "ESPIPE", + "ESRCH", + "ESRMNT", + "ESTALE", + "ESTRPIPE", + "ETHERCAP_JUMBO_MTU", + "ETHERCAP_VLAN_HWTAGGING", + "ETHERCAP_VLAN_MTU", + "ETHERMIN", + "ETHERMTU", + "ETHERMTU_JUMBO", + "ETHERTYPE_8023", + "ETHERTYPE_AARP", + "ETHERTYPE_ACCTON", + "ETHERTYPE_AEONIC", + "ETHERTYPE_ALPHA", + "ETHERTYPE_AMBER", + "ETHERTYPE_AMOEBA", + "ETHERTYPE_AOE", + "ETHERTYPE_APOLLO", + "ETHERTYPE_APOLLODOMAIN", + "ETHERTYPE_APPLETALK", + "ETHERTYPE_APPLITEK", + "ETHERTYPE_ARGONAUT", + "ETHERTYPE_ARP", + "ETHERTYPE_AT", + "ETHERTYPE_ATALK", + "ETHERTYPE_ATOMIC", + "ETHERTYPE_ATT", + "ETHERTYPE_ATTSTANFORD", + "ETHERTYPE_AUTOPHON", + "ETHERTYPE_AXIS", + "ETHERTYPE_BCLOOP", + "ETHERTYPE_BOFL", + "ETHERTYPE_CABLETRON", + "ETHERTYPE_CHAOS", + "ETHERTYPE_COMDESIGN", + "ETHERTYPE_COMPUGRAPHIC", + "ETHERTYPE_COUNTERPOINT", + "ETHERTYPE_CRONUS", + "ETHERTYPE_CRONUSVLN", + "ETHERTYPE_DCA", + "ETHERTYPE_DDE", + "ETHERTYPE_DEBNI", + "ETHERTYPE_DECAM", + "ETHERTYPE_DECCUST", + "ETHERTYPE_DECDIAG", + "ETHERTYPE_DECDNS", + "ETHERTYPE_DECDTS", + "ETHERTYPE_DECEXPER", + "ETHERTYPE_DECLAST", + "ETHERTYPE_DECLTM", + "ETHERTYPE_DECMUMPS", + "ETHERTYPE_DECNETBIOS", + "ETHERTYPE_DELTACON", + "ETHERTYPE_DIDDLE", + "ETHERTYPE_DLOG1", + "ETHERTYPE_DLOG2", + "ETHERTYPE_DN", + "ETHERTYPE_DOGFIGHT", + "ETHERTYPE_DSMD", + "ETHERTYPE_ECMA", + "ETHERTYPE_ENCRYPT", + "ETHERTYPE_ES", + "ETHERTYPE_EXCELAN", + "ETHERTYPE_EXPERDATA", + "ETHERTYPE_FLIP", + "ETHERTYPE_FLOWCONTROL", + "ETHERTYPE_FRARP", + "ETHERTYPE_GENDYN", + "ETHERTYPE_HAYES", + "ETHERTYPE_HIPPI_FP", + "ETHERTYPE_HITACHI", + "ETHERTYPE_HP", + "ETHERTYPE_IEEEPUP", + "ETHERTYPE_IEEEPUPAT", + "ETHERTYPE_IMLBL", + "ETHERTYPE_IMLBLDIAG", + "ETHERTYPE_IP", + "ETHERTYPE_IPAS", + "ETHERTYPE_IPV6", + "ETHERTYPE_IPX", + "ETHERTYPE_IPXNEW", + "ETHERTYPE_KALPANA", + "ETHERTYPE_LANBRIDGE", + "ETHERTYPE_LANPROBE", + "ETHERTYPE_LAT", + "ETHERTYPE_LBACK", + "ETHERTYPE_LITTLE", + "ETHERTYPE_LLDP", + "ETHERTYPE_LOGICRAFT", + "ETHERTYPE_LOOPBACK", + "ETHERTYPE_MATRA", + "ETHERTYPE_MAX", + "ETHERTYPE_MERIT", + "ETHERTYPE_MICP", + "ETHERTYPE_MOPDL", + "ETHERTYPE_MOPRC", + "ETHERTYPE_MOTOROLA", + "ETHERTYPE_MPLS", + "ETHERTYPE_MPLS_MCAST", + "ETHERTYPE_MUMPS", + "ETHERTYPE_NBPCC", + "ETHERTYPE_NBPCLAIM", + "ETHERTYPE_NBPCLREQ", + "ETHERTYPE_NBPCLRSP", + "ETHERTYPE_NBPCREQ", + "ETHERTYPE_NBPCRSP", + "ETHERTYPE_NBPDG", + "ETHERTYPE_NBPDGB", + "ETHERTYPE_NBPDLTE", + "ETHERTYPE_NBPRAR", + "ETHERTYPE_NBPRAS", + "ETHERTYPE_NBPRST", + "ETHERTYPE_NBPSCD", + "ETHERTYPE_NBPVCD", + "ETHERTYPE_NBS", + "ETHERTYPE_NCD", + "ETHERTYPE_NESTAR", + "ETHERTYPE_NETBEUI", + "ETHERTYPE_NOVELL", + "ETHERTYPE_NS", + "ETHERTYPE_NSAT", + "ETHERTYPE_NSCOMPAT", + "ETHERTYPE_NTRAILER", + "ETHERTYPE_OS9", + "ETHERTYPE_OS9NET", + "ETHERTYPE_PACER", + "ETHERTYPE_PAE", + "ETHERTYPE_PCS", + "ETHERTYPE_PLANNING", + "ETHERTYPE_PPP", + "ETHERTYPE_PPPOE", + "ETHERTYPE_PPPOEDISC", + "ETHERTYPE_PRIMENTS", + "ETHERTYPE_PUP", + "ETHERTYPE_PUPAT", + "ETHERTYPE_QINQ", + "ETHERTYPE_RACAL", + "ETHERTYPE_RATIONAL", + "ETHERTYPE_RAWFR", + "ETHERTYPE_RCL", + "ETHERTYPE_RDP", + "ETHERTYPE_RETIX", + "ETHERTYPE_REVARP", + "ETHERTYPE_SCA", + "ETHERTYPE_SECTRA", + "ETHERTYPE_SECUREDATA", + "ETHERTYPE_SGITW", + "ETHERTYPE_SG_BOUNCE", + "ETHERTYPE_SG_DIAG", + "ETHERTYPE_SG_NETGAMES", + "ETHERTYPE_SG_RESV", + "ETHERTYPE_SIMNET", + "ETHERTYPE_SLOW", + "ETHERTYPE_SLOWPROTOCOLS", + "ETHERTYPE_SNA", + "ETHERTYPE_SNMP", + "ETHERTYPE_SONIX", + "ETHERTYPE_SPIDER", + "ETHERTYPE_SPRITE", + "ETHERTYPE_STP", + "ETHERTYPE_TALARIS", + "ETHERTYPE_TALARISMC", + "ETHERTYPE_TCPCOMP", + "ETHERTYPE_TCPSM", + "ETHERTYPE_TEC", + "ETHERTYPE_TIGAN", + "ETHERTYPE_TRAIL", + "ETHERTYPE_TRANSETHER", + "ETHERTYPE_TYMSHARE", + "ETHERTYPE_UBBST", + "ETHERTYPE_UBDEBUG", + "ETHERTYPE_UBDIAGLOOP", + "ETHERTYPE_UBDL", + "ETHERTYPE_UBNIU", + "ETHERTYPE_UBNMC", + "ETHERTYPE_VALID", + "ETHERTYPE_VARIAN", + "ETHERTYPE_VAXELN", + "ETHERTYPE_VEECO", + "ETHERTYPE_VEXP", + "ETHERTYPE_VGLAB", + "ETHERTYPE_VINES", + "ETHERTYPE_VINESECHO", + "ETHERTYPE_VINESLOOP", + "ETHERTYPE_VITAL", + "ETHERTYPE_VLAN", + "ETHERTYPE_VLTLMAN", + "ETHERTYPE_VPROD", + "ETHERTYPE_VURESERVED", + "ETHERTYPE_WATERLOO", + "ETHERTYPE_WELLFLEET", + "ETHERTYPE_X25", + "ETHERTYPE_X75", + "ETHERTYPE_XNSSM", + "ETHERTYPE_XTP", + "ETHER_ADDR_LEN", + "ETHER_ALIGN", + "ETHER_CRC_LEN", + "ETHER_CRC_POLY_BE", + "ETHER_CRC_POLY_LE", + "ETHER_HDR_LEN", + "ETHER_MAX_DIX_LEN", + "ETHER_MAX_LEN", + "ETHER_MAX_LEN_JUMBO", + "ETHER_MIN_LEN", + "ETHER_PPPOE_ENCAP_LEN", + "ETHER_TYPE_LEN", + "ETHER_VLAN_ENCAP_LEN", + "ETH_P_1588", + "ETH_P_8021Q", + "ETH_P_802_2", + "ETH_P_802_3", + "ETH_P_AARP", + "ETH_P_ALL", + "ETH_P_AOE", + "ETH_P_ARCNET", + "ETH_P_ARP", + "ETH_P_ATALK", + "ETH_P_ATMFATE", + "ETH_P_ATMMPOA", + "ETH_P_AX25", + "ETH_P_BPQ", + "ETH_P_CAIF", + "ETH_P_CAN", + "ETH_P_CONTROL", + "ETH_P_CUST", + "ETH_P_DDCMP", + "ETH_P_DEC", + "ETH_P_DIAG", + "ETH_P_DNA_DL", + "ETH_P_DNA_RC", + "ETH_P_DNA_RT", + "ETH_P_DSA", + "ETH_P_ECONET", + "ETH_P_EDSA", + "ETH_P_FCOE", + "ETH_P_FIP", + "ETH_P_HDLC", + "ETH_P_IEEE802154", + "ETH_P_IEEEPUP", + "ETH_P_IEEEPUPAT", + "ETH_P_IP", + "ETH_P_IPV6", + "ETH_P_IPX", + "ETH_P_IRDA", + "ETH_P_LAT", + "ETH_P_LINK_CTL", + "ETH_P_LOCALTALK", + "ETH_P_LOOP", + "ETH_P_MOBITEX", + "ETH_P_MPLS_MC", + "ETH_P_MPLS_UC", + "ETH_P_PAE", + "ETH_P_PAUSE", + "ETH_P_PHONET", + "ETH_P_PPPTALK", + "ETH_P_PPP_DISC", + "ETH_P_PPP_MP", + "ETH_P_PPP_SES", + "ETH_P_PUP", + "ETH_P_PUPAT", + "ETH_P_RARP", + "ETH_P_SCA", + "ETH_P_SLOW", + "ETH_P_SNAP", + "ETH_P_TEB", + "ETH_P_TIPC", + "ETH_P_TRAILER", + "ETH_P_TR_802_2", + "ETH_P_WAN_PPP", + "ETH_P_WCCP", + "ETH_P_X25", + "ETIME", + "ETIMEDOUT", + "ETOOMANYREFS", + "ETXTBSY", + "EUCLEAN", + "EUNATCH", + "EUSERS", + "EVFILT_AIO", + "EVFILT_FS", + "EVFILT_LIO", + "EVFILT_MACHPORT", + "EVFILT_PROC", + "EVFILT_READ", + "EVFILT_SIGNAL", + "EVFILT_SYSCOUNT", + "EVFILT_THREADMARKER", + "EVFILT_TIMER", + "EVFILT_USER", + "EVFILT_VM", + "EVFILT_VNODE", + "EVFILT_WRITE", + "EV_ADD", + "EV_CLEAR", + "EV_DELETE", + "EV_DISABLE", + "EV_DISPATCH", + "EV_DROP", + "EV_ENABLE", + "EV_EOF", + "EV_ERROR", + "EV_FLAG0", + "EV_FLAG1", + "EV_ONESHOT", + "EV_OOBAND", + "EV_POLL", + "EV_RECEIPT", + "EV_SYSFLAGS", + "EWINDOWS", + "EWOULDBLOCK", + "EXDEV", + "EXFULL", + "EXTA", + "EXTB", + "EXTPROC", + "Environ", + "EpollCreate", + "EpollCreate1", + "EpollCtl", + "EpollEvent", + "EpollWait", + "Errno", + "EscapeArg", + "Exchangedata", + "Exec", + "Exit", + "ExitProcess", + "FD_CLOEXEC", + "FD_SETSIZE", + "FILE_ACTION_ADDED", + "FILE_ACTION_MODIFIED", + "FILE_ACTION_REMOVED", + "FILE_ACTION_RENAMED_NEW_NAME", + "FILE_ACTION_RENAMED_OLD_NAME", + "FILE_APPEND_DATA", + "FILE_ATTRIBUTE_ARCHIVE", + "FILE_ATTRIBUTE_DIRECTORY", + "FILE_ATTRIBUTE_HIDDEN", + "FILE_ATTRIBUTE_NORMAL", + "FILE_ATTRIBUTE_READONLY", + "FILE_ATTRIBUTE_REPARSE_POINT", + "FILE_ATTRIBUTE_SYSTEM", + "FILE_BEGIN", + "FILE_CURRENT", + "FILE_END", + "FILE_FLAG_BACKUP_SEMANTICS", + "FILE_FLAG_OPEN_REPARSE_POINT", + "FILE_FLAG_OVERLAPPED", + "FILE_LIST_DIRECTORY", + "FILE_MAP_COPY", + "FILE_MAP_EXECUTE", + "FILE_MAP_READ", + "FILE_MAP_WRITE", + "FILE_NOTIFY_CHANGE_ATTRIBUTES", + "FILE_NOTIFY_CHANGE_CREATION", + "FILE_NOTIFY_CHANGE_DIR_NAME", + "FILE_NOTIFY_CHANGE_FILE_NAME", + "FILE_NOTIFY_CHANGE_LAST_ACCESS", + "FILE_NOTIFY_CHANGE_LAST_WRITE", + "FILE_NOTIFY_CHANGE_SIZE", + "FILE_SHARE_DELETE", + "FILE_SHARE_READ", + "FILE_SHARE_WRITE", + "FILE_SKIP_COMPLETION_PORT_ON_SUCCESS", + "FILE_SKIP_SET_EVENT_ON_HANDLE", + "FILE_TYPE_CHAR", + "FILE_TYPE_DISK", + "FILE_TYPE_PIPE", + "FILE_TYPE_REMOTE", + "FILE_TYPE_UNKNOWN", + "FILE_WRITE_ATTRIBUTES", + "FLUSHO", + "FORMAT_MESSAGE_ALLOCATE_BUFFER", + "FORMAT_MESSAGE_ARGUMENT_ARRAY", + "FORMAT_MESSAGE_FROM_HMODULE", + "FORMAT_MESSAGE_FROM_STRING", + "FORMAT_MESSAGE_FROM_SYSTEM", + "FORMAT_MESSAGE_IGNORE_INSERTS", + "FORMAT_MESSAGE_MAX_WIDTH_MASK", + "FSCTL_GET_REPARSE_POINT", + "F_ADDFILESIGS", + "F_ADDSIGS", + "F_ALLOCATEALL", + "F_ALLOCATECONTIG", + "F_CANCEL", + "F_CHKCLEAN", + "F_CLOSEM", + "F_DUP2FD", + "F_DUP2FD_CLOEXEC", + "F_DUPFD", + "F_DUPFD_CLOEXEC", + "F_EXLCK", + "F_FINDSIGS", + "F_FLUSH_DATA", + "F_FREEZE_FS", + "F_FSCTL", + "F_FSDIRMASK", + "F_FSIN", + "F_FSINOUT", + "F_FSOUT", + "F_FSPRIV", + "F_FSVOID", + "F_FULLFSYNC", + "F_GETCODEDIR", + "F_GETFD", + "F_GETFL", + "F_GETLEASE", + "F_GETLK", + "F_GETLK64", + "F_GETLKPID", + "F_GETNOSIGPIPE", + "F_GETOWN", + "F_GETOWN_EX", + "F_GETPATH", + "F_GETPATH_MTMINFO", + "F_GETPIPE_SZ", + "F_GETPROTECTIONCLASS", + "F_GETPROTECTIONLEVEL", + "F_GETSIG", + "F_GLOBAL_NOCACHE", + "F_LOCK", + "F_LOG2PHYS", + "F_LOG2PHYS_EXT", + "F_MARKDEPENDENCY", + "F_MAXFD", + "F_NOCACHE", + "F_NODIRECT", + "F_NOTIFY", + "F_OGETLK", + "F_OK", + "F_OSETLK", + "F_OSETLKW", + "F_PARAM_MASK", + "F_PARAM_MAX", + "F_PATHPKG_CHECK", + "F_PEOFPOSMODE", + "F_PREALLOCATE", + "F_RDADVISE", + "F_RDAHEAD", + "F_RDLCK", + "F_READAHEAD", + "F_READBOOTSTRAP", + "F_SETBACKINGSTORE", + "F_SETFD", + "F_SETFL", + "F_SETLEASE", + "F_SETLK", + "F_SETLK64", + "F_SETLKW", + "F_SETLKW64", + "F_SETLKWTIMEOUT", + "F_SETLK_REMOTE", + "F_SETNOSIGPIPE", + "F_SETOWN", + "F_SETOWN_EX", + "F_SETPIPE_SZ", + "F_SETPROTECTIONCLASS", + "F_SETSIG", + "F_SETSIZE", + "F_SHLCK", + "F_SINGLE_WRITER", + "F_TEST", + "F_THAW_FS", + "F_TLOCK", + "F_TRANSCODEKEY", + "F_ULOCK", + "F_UNLCK", + "F_UNLCKSYS", + "F_VOLPOSMODE", + "F_WRITEBOOTSTRAP", + "F_WRLCK", + "Faccessat", + "Fallocate", + "Fbootstraptransfer_t", + "Fchdir", + "Fchflags", + "Fchmod", + "Fchmodat", + "Fchown", + "Fchownat", + "FcntlFlock", + "FdSet", + "Fdatasync", + "FileNotifyInformation", + "Filetime", + "FindClose", + "FindFirstFile", + "FindNextFile", + "Flock", + "Flock_t", + "FlushBpf", + "FlushFileBuffers", + "FlushViewOfFile", + "ForkExec", + "ForkLock", + "FormatMessage", + "Fpathconf", + "FreeAddrInfoW", + "FreeEnvironmentStrings", + "FreeLibrary", + "Fsid", + "Fstat", + "Fstatat", + "Fstatfs", + "Fstore_t", + "Fsync", + "Ftruncate", + "FullPath", + "Futimes", + "Futimesat", + "GENERIC_ALL", + "GENERIC_EXECUTE", + "GENERIC_READ", + "GENERIC_WRITE", + "GUID", + "GetAcceptExSockaddrs", + "GetAdaptersInfo", + "GetAddrInfoW", + "GetCommandLine", + "GetComputerName", + "GetConsoleMode", + "GetCurrentDirectory", + "GetCurrentProcess", + "GetEnvironmentStrings", + "GetEnvironmentVariable", + "GetExitCodeProcess", + "GetFileAttributes", + "GetFileAttributesEx", + "GetFileExInfoStandard", + "GetFileExMaxInfoLevel", + "GetFileInformationByHandle", + "GetFileType", + "GetFullPathName", + "GetHostByName", + "GetIfEntry", + "GetLastError", + "GetLengthSid", + "GetLongPathName", + "GetProcAddress", + "GetProcessTimes", + "GetProtoByName", + "GetQueuedCompletionStatus", + "GetServByName", + "GetShortPathName", + "GetStartupInfo", + "GetStdHandle", + "GetSystemTimeAsFileTime", + "GetTempPath", + "GetTimeZoneInformation", + "GetTokenInformation", + "GetUserNameEx", + "GetUserProfileDirectory", + "GetVersion", + "Getcwd", + "Getdents", + "Getdirentries", + "Getdtablesize", + "Getegid", + "Getenv", + "Geteuid", + "Getfsstat", + "Getgid", + "Getgroups", + "Getpagesize", + "Getpeername", + "Getpgid", + "Getpgrp", + "Getpid", + "Getppid", + "Getpriority", + "Getrlimit", + "Getrusage", + "Getsid", + "Getsockname", + "Getsockopt", + "GetsockoptByte", + "GetsockoptICMPv6Filter", + "GetsockoptIPMreq", + "GetsockoptIPMreqn", + "GetsockoptIPv6MTUInfo", + "GetsockoptIPv6Mreq", + "GetsockoptInet4Addr", + "GetsockoptInt", + "GetsockoptUcred", + "Gettid", + "Gettimeofday", + "Getuid", + "Getwd", + "Getxattr", + "HANDLE_FLAG_INHERIT", + "HKEY_CLASSES_ROOT", + "HKEY_CURRENT_CONFIG", + "HKEY_CURRENT_USER", + "HKEY_DYN_DATA", + "HKEY_LOCAL_MACHINE", + "HKEY_PERFORMANCE_DATA", + "HKEY_USERS", + "HUPCL", + "Handle", + "Hostent", + "ICANON", + "ICMP6_FILTER", + "ICMPV6_FILTER", + "ICMPv6Filter", + "ICRNL", + "IEXTEN", + "IFAN_ARRIVAL", + "IFAN_DEPARTURE", + "IFA_ADDRESS", + "IFA_ANYCAST", + "IFA_BROADCAST", + "IFA_CACHEINFO", + "IFA_F_DADFAILED", + "IFA_F_DEPRECATED", + "IFA_F_HOMEADDRESS", + "IFA_F_NODAD", + "IFA_F_OPTIMISTIC", + "IFA_F_PERMANENT", + "IFA_F_SECONDARY", + "IFA_F_TEMPORARY", + "IFA_F_TENTATIVE", + "IFA_LABEL", + "IFA_LOCAL", + "IFA_MAX", + "IFA_MULTICAST", + "IFA_ROUTE", + "IFA_UNSPEC", + "IFF_ALLMULTI", + "IFF_ALTPHYS", + "IFF_AUTOMEDIA", + "IFF_BROADCAST", + "IFF_CANTCHANGE", + "IFF_CANTCONFIG", + "IFF_DEBUG", + "IFF_DRV_OACTIVE", + "IFF_DRV_RUNNING", + "IFF_DYING", + "IFF_DYNAMIC", + "IFF_LINK0", + "IFF_LINK1", + "IFF_LINK2", + "IFF_LOOPBACK", + "IFF_MASTER", + "IFF_MONITOR", + "IFF_MULTICAST", + "IFF_NOARP", + "IFF_NOTRAILERS", + "IFF_NO_PI", + "IFF_OACTIVE", + "IFF_ONE_QUEUE", + "IFF_POINTOPOINT", + "IFF_POINTTOPOINT", + "IFF_PORTSEL", + "IFF_PPROMISC", + "IFF_PROMISC", + "IFF_RENAMING", + "IFF_RUNNING", + "IFF_SIMPLEX", + "IFF_SLAVE", + "IFF_SMART", + "IFF_STATICARP", + "IFF_TAP", + "IFF_TUN", + "IFF_TUN_EXCL", + "IFF_UP", + "IFF_VNET_HDR", + "IFLA_ADDRESS", + "IFLA_BROADCAST", + "IFLA_COST", + "IFLA_IFALIAS", + "IFLA_IFNAME", + "IFLA_LINK", + "IFLA_LINKINFO", + "IFLA_LINKMODE", + "IFLA_MAP", + "IFLA_MASTER", + "IFLA_MAX", + "IFLA_MTU", + "IFLA_NET_NS_PID", + "IFLA_OPERSTATE", + "IFLA_PRIORITY", + "IFLA_PROTINFO", + "IFLA_QDISC", + "IFLA_STATS", + "IFLA_TXQLEN", + "IFLA_UNSPEC", + "IFLA_WEIGHT", + "IFLA_WIRELESS", + "IFNAMSIZ", + "IFT_1822", + "IFT_A12MPPSWITCH", + "IFT_AAL2", + "IFT_AAL5", + "IFT_ADSL", + "IFT_AFLANE8023", + "IFT_AFLANE8025", + "IFT_ARAP", + "IFT_ARCNET", + "IFT_ARCNETPLUS", + "IFT_ASYNC", + "IFT_ATM", + "IFT_ATMDXI", + "IFT_ATMFUNI", + "IFT_ATMIMA", + "IFT_ATMLOGICAL", + "IFT_ATMRADIO", + "IFT_ATMSUBINTERFACE", + "IFT_ATMVCIENDPT", + "IFT_ATMVIRTUAL", + "IFT_BGPPOLICYACCOUNTING", + "IFT_BLUETOOTH", + "IFT_BRIDGE", + "IFT_BSC", + "IFT_CARP", + "IFT_CCTEMUL", + "IFT_CELLULAR", + "IFT_CEPT", + "IFT_CES", + "IFT_CHANNEL", + "IFT_CNR", + "IFT_COFFEE", + "IFT_COMPOSITELINK", + "IFT_DCN", + "IFT_DIGITALPOWERLINE", + "IFT_DIGITALWRAPPEROVERHEADCHANNEL", + "IFT_DLSW", + "IFT_DOCSCABLEDOWNSTREAM", + "IFT_DOCSCABLEMACLAYER", + "IFT_DOCSCABLEUPSTREAM", + "IFT_DOCSCABLEUPSTREAMCHANNEL", + "IFT_DS0", + "IFT_DS0BUNDLE", + "IFT_DS1FDL", + "IFT_DS3", + "IFT_DTM", + "IFT_DUMMY", + "IFT_DVBASILN", + "IFT_DVBASIOUT", + "IFT_DVBRCCDOWNSTREAM", + "IFT_DVBRCCMACLAYER", + "IFT_DVBRCCUPSTREAM", + "IFT_ECONET", + "IFT_ENC", + "IFT_EON", + "IFT_EPLRS", + "IFT_ESCON", + "IFT_ETHER", + "IFT_FAITH", + "IFT_FAST", + "IFT_FASTETHER", + "IFT_FASTETHERFX", + "IFT_FDDI", + "IFT_FIBRECHANNEL", + "IFT_FRAMERELAYINTERCONNECT", + "IFT_FRAMERELAYMPI", + "IFT_FRDLCIENDPT", + "IFT_FRELAY", + "IFT_FRELAYDCE", + "IFT_FRF16MFRBUNDLE", + "IFT_FRFORWARD", + "IFT_G703AT2MB", + "IFT_G703AT64K", + "IFT_GIF", + "IFT_GIGABITETHERNET", + "IFT_GR303IDT", + "IFT_GR303RDT", + "IFT_H323GATEKEEPER", + "IFT_H323PROXY", + "IFT_HDH1822", + "IFT_HDLC", + "IFT_HDSL2", + "IFT_HIPERLAN2", + "IFT_HIPPI", + "IFT_HIPPIINTERFACE", + "IFT_HOSTPAD", + "IFT_HSSI", + "IFT_HY", + "IFT_IBM370PARCHAN", + "IFT_IDSL", + "IFT_IEEE1394", + "IFT_IEEE80211", + "IFT_IEEE80212", + "IFT_IEEE8023ADLAG", + "IFT_IFGSN", + "IFT_IMT", + "IFT_INFINIBAND", + "IFT_INTERLEAVE", + "IFT_IP", + "IFT_IPFORWARD", + "IFT_IPOVERATM", + "IFT_IPOVERCDLC", + "IFT_IPOVERCLAW", + "IFT_IPSWITCH", + "IFT_IPXIP", + "IFT_ISDN", + "IFT_ISDNBASIC", + "IFT_ISDNPRIMARY", + "IFT_ISDNS", + "IFT_ISDNU", + "IFT_ISO88022LLC", + "IFT_ISO88023", + "IFT_ISO88024", + "IFT_ISO88025", + "IFT_ISO88025CRFPINT", + "IFT_ISO88025DTR", + "IFT_ISO88025FIBER", + "IFT_ISO88026", + "IFT_ISUP", + "IFT_L2VLAN", + "IFT_L3IPVLAN", + "IFT_L3IPXVLAN", + "IFT_LAPB", + "IFT_LAPD", + "IFT_LAPF", + "IFT_LINEGROUP", + "IFT_LOCALTALK", + "IFT_LOOP", + "IFT_MEDIAMAILOVERIP", + "IFT_MFSIGLINK", + "IFT_MIOX25", + "IFT_MODEM", + "IFT_MPC", + "IFT_MPLS", + "IFT_MPLSTUNNEL", + "IFT_MSDSL", + "IFT_MVL", + "IFT_MYRINET", + "IFT_NFAS", + "IFT_NSIP", + "IFT_OPTICALCHANNEL", + "IFT_OPTICALTRANSPORT", + "IFT_OTHER", + "IFT_P10", + "IFT_P80", + "IFT_PARA", + "IFT_PDP", + "IFT_PFLOG", + "IFT_PFLOW", + "IFT_PFSYNC", + "IFT_PLC", + "IFT_PON155", + "IFT_PON622", + "IFT_POS", + "IFT_PPP", + "IFT_PPPMULTILINKBUNDLE", + "IFT_PROPATM", + "IFT_PROPBWAP2MP", + "IFT_PROPCNLS", + "IFT_PROPDOCSWIRELESSDOWNSTREAM", + "IFT_PROPDOCSWIRELESSMACLAYER", + "IFT_PROPDOCSWIRELESSUPSTREAM", + "IFT_PROPMUX", + "IFT_PROPVIRTUAL", + "IFT_PROPWIRELESSP2P", + "IFT_PTPSERIAL", + "IFT_PVC", + "IFT_Q2931", + "IFT_QLLC", + "IFT_RADIOMAC", + "IFT_RADSL", + "IFT_REACHDSL", + "IFT_RFC1483", + "IFT_RS232", + "IFT_RSRB", + "IFT_SDLC", + "IFT_SDSL", + "IFT_SHDSL", + "IFT_SIP", + "IFT_SIPSIG", + "IFT_SIPTG", + "IFT_SLIP", + "IFT_SMDSDXI", + "IFT_SMDSICIP", + "IFT_SONET", + "IFT_SONETOVERHEADCHANNEL", + "IFT_SONETPATH", + "IFT_SONETVT", + "IFT_SRP", + "IFT_SS7SIGLINK", + "IFT_STACKTOSTACK", + "IFT_STARLAN", + "IFT_STF", + "IFT_T1", + "IFT_TDLC", + "IFT_TELINK", + "IFT_TERMPAD", + "IFT_TR008", + "IFT_TRANSPHDLC", + "IFT_TUNNEL", + "IFT_ULTRA", + "IFT_USB", + "IFT_V11", + "IFT_V35", + "IFT_V36", + "IFT_V37", + "IFT_VDSL", + "IFT_VIRTUALIPADDRESS", + "IFT_VIRTUALTG", + "IFT_VOICEDID", + "IFT_VOICEEM", + "IFT_VOICEEMFGD", + "IFT_VOICEENCAP", + "IFT_VOICEFGDEANA", + "IFT_VOICEFXO", + "IFT_VOICEFXS", + "IFT_VOICEOVERATM", + "IFT_VOICEOVERCABLE", + "IFT_VOICEOVERFRAMERELAY", + "IFT_VOICEOVERIP", + "IFT_X213", + "IFT_X25", + "IFT_X25DDN", + "IFT_X25HUNTGROUP", + "IFT_X25MLP", + "IFT_X25PLE", + "IFT_XETHER", + "IGNBRK", + "IGNCR", + "IGNORE", + "IGNPAR", + "IMAXBEL", + "INFINITE", + "INLCR", + "INPCK", + "INVALID_FILE_ATTRIBUTES", + "IN_ACCESS", + "IN_ALL_EVENTS", + "IN_ATTRIB", + "IN_CLASSA_HOST", + "IN_CLASSA_MAX", + "IN_CLASSA_NET", + "IN_CLASSA_NSHIFT", + "IN_CLASSB_HOST", + "IN_CLASSB_MAX", + "IN_CLASSB_NET", + "IN_CLASSB_NSHIFT", + "IN_CLASSC_HOST", + "IN_CLASSC_NET", + "IN_CLASSC_NSHIFT", + "IN_CLASSD_HOST", + "IN_CLASSD_NET", + "IN_CLASSD_NSHIFT", + "IN_CLOEXEC", + "IN_CLOSE", + "IN_CLOSE_NOWRITE", + "IN_CLOSE_WRITE", + "IN_CREATE", + "IN_DELETE", + "IN_DELETE_SELF", + "IN_DONT_FOLLOW", + "IN_EXCL_UNLINK", + "IN_IGNORED", + "IN_ISDIR", + "IN_LINKLOCALNETNUM", + "IN_LOOPBACKNET", + "IN_MASK_ADD", + "IN_MODIFY", + "IN_MOVE", + "IN_MOVED_FROM", + "IN_MOVED_TO", + "IN_MOVE_SELF", + "IN_NONBLOCK", + "IN_ONESHOT", + "IN_ONLYDIR", + "IN_OPEN", + "IN_Q_OVERFLOW", + "IN_RFC3021_HOST", + "IN_RFC3021_MASK", + "IN_RFC3021_NET", + "IN_RFC3021_NSHIFT", + "IN_UNMOUNT", + "IOC_IN", + "IOC_INOUT", + "IOC_OUT", + "IOC_VENDOR", + "IOC_WS2", + "IO_REPARSE_TAG_SYMLINK", + "IPMreq", + "IPMreqn", + "IPPROTO_3PC", + "IPPROTO_ADFS", + "IPPROTO_AH", + "IPPROTO_AHIP", + "IPPROTO_APES", + "IPPROTO_ARGUS", + "IPPROTO_AX25", + "IPPROTO_BHA", + "IPPROTO_BLT", + "IPPROTO_BRSATMON", + "IPPROTO_CARP", + "IPPROTO_CFTP", + "IPPROTO_CHAOS", + "IPPROTO_CMTP", + "IPPROTO_COMP", + "IPPROTO_CPHB", + "IPPROTO_CPNX", + "IPPROTO_DCCP", + "IPPROTO_DDP", + "IPPROTO_DGP", + "IPPROTO_DIVERT", + "IPPROTO_DIVERT_INIT", + "IPPROTO_DIVERT_RESP", + "IPPROTO_DONE", + "IPPROTO_DSTOPTS", + "IPPROTO_EGP", + "IPPROTO_EMCON", + "IPPROTO_ENCAP", + "IPPROTO_EON", + "IPPROTO_ESP", + "IPPROTO_ETHERIP", + "IPPROTO_FRAGMENT", + "IPPROTO_GGP", + "IPPROTO_GMTP", + "IPPROTO_GRE", + "IPPROTO_HELLO", + "IPPROTO_HMP", + "IPPROTO_HOPOPTS", + "IPPROTO_ICMP", + "IPPROTO_ICMPV6", + "IPPROTO_IDP", + "IPPROTO_IDPR", + "IPPROTO_IDRP", + "IPPROTO_IGMP", + "IPPROTO_IGP", + "IPPROTO_IGRP", + "IPPROTO_IL", + "IPPROTO_INLSP", + "IPPROTO_INP", + "IPPROTO_IP", + "IPPROTO_IPCOMP", + "IPPROTO_IPCV", + "IPPROTO_IPEIP", + "IPPROTO_IPIP", + "IPPROTO_IPPC", + "IPPROTO_IPV4", + "IPPROTO_IPV6", + "IPPROTO_IPV6_ICMP", + "IPPROTO_IRTP", + "IPPROTO_KRYPTOLAN", + "IPPROTO_LARP", + "IPPROTO_LEAF1", + "IPPROTO_LEAF2", + "IPPROTO_MAX", + "IPPROTO_MAXID", + "IPPROTO_MEAS", + "IPPROTO_MH", + "IPPROTO_MHRP", + "IPPROTO_MICP", + "IPPROTO_MOBILE", + "IPPROTO_MPLS", + "IPPROTO_MTP", + "IPPROTO_MUX", + "IPPROTO_ND", + "IPPROTO_NHRP", + "IPPROTO_NONE", + "IPPROTO_NSP", + "IPPROTO_NVPII", + "IPPROTO_OLD_DIVERT", + "IPPROTO_OSPFIGP", + "IPPROTO_PFSYNC", + "IPPROTO_PGM", + "IPPROTO_PIGP", + "IPPROTO_PIM", + "IPPROTO_PRM", + "IPPROTO_PUP", + "IPPROTO_PVP", + "IPPROTO_RAW", + "IPPROTO_RCCMON", + "IPPROTO_RDP", + "IPPROTO_ROUTING", + "IPPROTO_RSVP", + "IPPROTO_RVD", + "IPPROTO_SATEXPAK", + "IPPROTO_SATMON", + "IPPROTO_SCCSP", + "IPPROTO_SCTP", + "IPPROTO_SDRP", + "IPPROTO_SEND", + "IPPROTO_SEP", + "IPPROTO_SKIP", + "IPPROTO_SPACER", + "IPPROTO_SRPC", + "IPPROTO_ST", + "IPPROTO_SVMTP", + "IPPROTO_SWIPE", + "IPPROTO_TCF", + "IPPROTO_TCP", + "IPPROTO_TLSP", + "IPPROTO_TP", + "IPPROTO_TPXX", + "IPPROTO_TRUNK1", + "IPPROTO_TRUNK2", + "IPPROTO_TTP", + "IPPROTO_UDP", + "IPPROTO_UDPLITE", + "IPPROTO_VINES", + "IPPROTO_VISA", + "IPPROTO_VMTP", + "IPPROTO_VRRP", + "IPPROTO_WBEXPAK", + "IPPROTO_WBMON", + "IPPROTO_WSN", + "IPPROTO_XNET", + "IPPROTO_XTP", + "IPV6_2292DSTOPTS", + "IPV6_2292HOPLIMIT", + "IPV6_2292HOPOPTS", + "IPV6_2292NEXTHOP", + "IPV6_2292PKTINFO", + "IPV6_2292PKTOPTIONS", + "IPV6_2292RTHDR", + "IPV6_ADDRFORM", + "IPV6_ADD_MEMBERSHIP", + "IPV6_AUTHHDR", + "IPV6_AUTH_LEVEL", + "IPV6_AUTOFLOWLABEL", + "IPV6_BINDANY", + "IPV6_BINDV6ONLY", + "IPV6_BOUND_IF", + "IPV6_CHECKSUM", + "IPV6_DEFAULT_MULTICAST_HOPS", + "IPV6_DEFAULT_MULTICAST_LOOP", + "IPV6_DEFHLIM", + "IPV6_DONTFRAG", + "IPV6_DROP_MEMBERSHIP", + "IPV6_DSTOPTS", + "IPV6_ESP_NETWORK_LEVEL", + "IPV6_ESP_TRANS_LEVEL", + "IPV6_FAITH", + "IPV6_FLOWINFO_MASK", + "IPV6_FLOWLABEL_MASK", + "IPV6_FRAGTTL", + "IPV6_FW_ADD", + "IPV6_FW_DEL", + "IPV6_FW_FLUSH", + "IPV6_FW_GET", + "IPV6_FW_ZERO", + "IPV6_HLIMDEC", + "IPV6_HOPLIMIT", + "IPV6_HOPOPTS", + "IPV6_IPCOMP_LEVEL", + "IPV6_IPSEC_POLICY", + "IPV6_JOIN_ANYCAST", + "IPV6_JOIN_GROUP", + "IPV6_LEAVE_ANYCAST", + "IPV6_LEAVE_GROUP", + "IPV6_MAXHLIM", + "IPV6_MAXOPTHDR", + "IPV6_MAXPACKET", + "IPV6_MAX_GROUP_SRC_FILTER", + "IPV6_MAX_MEMBERSHIPS", + "IPV6_MAX_SOCK_SRC_FILTER", + "IPV6_MIN_MEMBERSHIPS", + "IPV6_MMTU", + "IPV6_MSFILTER", + "IPV6_MTU", + "IPV6_MTU_DISCOVER", + "IPV6_MULTICAST_HOPS", + "IPV6_MULTICAST_IF", + "IPV6_MULTICAST_LOOP", + "IPV6_NEXTHOP", + "IPV6_OPTIONS", + "IPV6_PATHMTU", + "IPV6_PIPEX", + "IPV6_PKTINFO", + "IPV6_PMTUDISC_DO", + "IPV6_PMTUDISC_DONT", + "IPV6_PMTUDISC_PROBE", + "IPV6_PMTUDISC_WANT", + "IPV6_PORTRANGE", + "IPV6_PORTRANGE_DEFAULT", + "IPV6_PORTRANGE_HIGH", + "IPV6_PORTRANGE_LOW", + "IPV6_PREFER_TEMPADDR", + "IPV6_RECVDSTOPTS", + "IPV6_RECVDSTPORT", + "IPV6_RECVERR", + "IPV6_RECVHOPLIMIT", + "IPV6_RECVHOPOPTS", + "IPV6_RECVPATHMTU", + "IPV6_RECVPKTINFO", + "IPV6_RECVRTHDR", + "IPV6_RECVTCLASS", + "IPV6_ROUTER_ALERT", + "IPV6_RTABLE", + "IPV6_RTHDR", + "IPV6_RTHDRDSTOPTS", + "IPV6_RTHDR_LOOSE", + "IPV6_RTHDR_STRICT", + "IPV6_RTHDR_TYPE_0", + "IPV6_RXDSTOPTS", + "IPV6_RXHOPOPTS", + "IPV6_SOCKOPT_RESERVED1", + "IPV6_TCLASS", + "IPV6_UNICAST_HOPS", + "IPV6_USE_MIN_MTU", + "IPV6_V6ONLY", + "IPV6_VERSION", + "IPV6_VERSION_MASK", + "IPV6_XFRM_POLICY", + "IP_ADD_MEMBERSHIP", + "IP_ADD_SOURCE_MEMBERSHIP", + "IP_AUTH_LEVEL", + "IP_BINDANY", + "IP_BLOCK_SOURCE", + "IP_BOUND_IF", + "IP_DEFAULT_MULTICAST_LOOP", + "IP_DEFAULT_MULTICAST_TTL", + "IP_DF", + "IP_DIVERTFL", + "IP_DONTFRAG", + "IP_DROP_MEMBERSHIP", + "IP_DROP_SOURCE_MEMBERSHIP", + "IP_DUMMYNET3", + "IP_DUMMYNET_CONFIGURE", + "IP_DUMMYNET_DEL", + "IP_DUMMYNET_FLUSH", + "IP_DUMMYNET_GET", + "IP_EF", + "IP_ERRORMTU", + "IP_ESP_NETWORK_LEVEL", + "IP_ESP_TRANS_LEVEL", + "IP_FAITH", + "IP_FREEBIND", + "IP_FW3", + "IP_FW_ADD", + "IP_FW_DEL", + "IP_FW_FLUSH", + "IP_FW_GET", + "IP_FW_NAT_CFG", + "IP_FW_NAT_DEL", + "IP_FW_NAT_GET_CONFIG", + "IP_FW_NAT_GET_LOG", + "IP_FW_RESETLOG", + "IP_FW_TABLE_ADD", + "IP_FW_TABLE_DEL", + "IP_FW_TABLE_FLUSH", + "IP_FW_TABLE_GETSIZE", + "IP_FW_TABLE_LIST", + "IP_FW_ZERO", + "IP_HDRINCL", + "IP_IPCOMP_LEVEL", + "IP_IPSECFLOWINFO", + "IP_IPSEC_LOCAL_AUTH", + "IP_IPSEC_LOCAL_CRED", + "IP_IPSEC_LOCAL_ID", + "IP_IPSEC_POLICY", + "IP_IPSEC_REMOTE_AUTH", + "IP_IPSEC_REMOTE_CRED", + "IP_IPSEC_REMOTE_ID", + "IP_MAXPACKET", + "IP_MAX_GROUP_SRC_FILTER", + "IP_MAX_MEMBERSHIPS", + "IP_MAX_SOCK_MUTE_FILTER", + "IP_MAX_SOCK_SRC_FILTER", + "IP_MAX_SOURCE_FILTER", + "IP_MF", + "IP_MINFRAGSIZE", + "IP_MINTTL", + "IP_MIN_MEMBERSHIPS", + "IP_MSFILTER", + "IP_MSS", + "IP_MTU", + "IP_MTU_DISCOVER", + "IP_MULTICAST_IF", + "IP_MULTICAST_IFINDEX", + "IP_MULTICAST_LOOP", + "IP_MULTICAST_TTL", + "IP_MULTICAST_VIF", + "IP_NAT__XXX", + "IP_OFFMASK", + "IP_OLD_FW_ADD", + "IP_OLD_FW_DEL", + "IP_OLD_FW_FLUSH", + "IP_OLD_FW_GET", + "IP_OLD_FW_RESETLOG", + "IP_OLD_FW_ZERO", + "IP_ONESBCAST", + "IP_OPTIONS", + "IP_ORIGDSTADDR", + "IP_PASSSEC", + "IP_PIPEX", + "IP_PKTINFO", + "IP_PKTOPTIONS", + "IP_PMTUDISC", + "IP_PMTUDISC_DO", + "IP_PMTUDISC_DONT", + "IP_PMTUDISC_PROBE", + "IP_PMTUDISC_WANT", + "IP_PORTRANGE", + "IP_PORTRANGE_DEFAULT", + "IP_PORTRANGE_HIGH", + "IP_PORTRANGE_LOW", + "IP_RECVDSTADDR", + "IP_RECVDSTPORT", + "IP_RECVERR", + "IP_RECVIF", + "IP_RECVOPTS", + "IP_RECVORIGDSTADDR", + "IP_RECVPKTINFO", + "IP_RECVRETOPTS", + "IP_RECVRTABLE", + "IP_RECVTOS", + "IP_RECVTTL", + "IP_RETOPTS", + "IP_RF", + "IP_ROUTER_ALERT", + "IP_RSVP_OFF", + "IP_RSVP_ON", + "IP_RSVP_VIF_OFF", + "IP_RSVP_VIF_ON", + "IP_RTABLE", + "IP_SENDSRCADDR", + "IP_STRIPHDR", + "IP_TOS", + "IP_TRAFFIC_MGT_BACKGROUND", + "IP_TRANSPARENT", + "IP_TTL", + "IP_UNBLOCK_SOURCE", + "IP_XFRM_POLICY", + "IPv6MTUInfo", + "IPv6Mreq", + "ISIG", + "ISTRIP", + "IUCLC", + "IUTF8", + "IXANY", + "IXOFF", + "IXON", + "IfAddrmsg", + "IfAnnounceMsghdr", + "IfData", + "IfInfomsg", + "IfMsghdr", + "IfaMsghdr", + "IfmaMsghdr", + "IfmaMsghdr2", + "ImplementsGetwd", + "Inet4Pktinfo", + "Inet6Pktinfo", + "InotifyAddWatch", + "InotifyEvent", + "InotifyInit", + "InotifyInit1", + "InotifyRmWatch", + "InterfaceAddrMessage", + "InterfaceAnnounceMessage", + "InterfaceInfo", + "InterfaceMessage", + "InterfaceMulticastAddrMessage", + "InvalidHandle", + "Ioperm", + "Iopl", + "Iovec", + "IpAdapterInfo", + "IpAddrString", + "IpAddressString", + "IpMaskString", + "Issetugid", + "KEY_ALL_ACCESS", + "KEY_CREATE_LINK", + "KEY_CREATE_SUB_KEY", + "KEY_ENUMERATE_SUB_KEYS", + "KEY_EXECUTE", + "KEY_NOTIFY", + "KEY_QUERY_VALUE", + "KEY_READ", + "KEY_SET_VALUE", + "KEY_WOW64_32KEY", + "KEY_WOW64_64KEY", + "KEY_WRITE", + "Kevent", + "Kevent_t", + "Kill", + "Klogctl", + "Kqueue", + "LANG_ENGLISH", + "LAYERED_PROTOCOL", + "LCNT_OVERLOAD_FLUSH", + "LINUX_REBOOT_CMD_CAD_OFF", + "LINUX_REBOOT_CMD_CAD_ON", + "LINUX_REBOOT_CMD_HALT", + "LINUX_REBOOT_CMD_KEXEC", + "LINUX_REBOOT_CMD_POWER_OFF", + "LINUX_REBOOT_CMD_RESTART", + "LINUX_REBOOT_CMD_RESTART2", + "LINUX_REBOOT_CMD_SW_SUSPEND", + "LINUX_REBOOT_MAGIC1", + "LINUX_REBOOT_MAGIC2", + "LOCK_EX", + "LOCK_NB", + "LOCK_SH", + "LOCK_UN", + "LazyDLL", + "LazyProc", + "Lchown", + "Linger", + "Link", + "Listen", + "Listxattr", + "LoadCancelIoEx", + "LoadConnectEx", + "LoadCreateSymbolicLink", + "LoadDLL", + "LoadGetAddrInfo", + "LoadLibrary", + "LoadSetFileCompletionNotificationModes", + "LocalFree", + "Log2phys_t", + "LookupAccountName", + "LookupAccountSid", + "LookupSID", + "LsfJump", + "LsfSocket", + "LsfStmt", + "Lstat", + "MADV_AUTOSYNC", + "MADV_CAN_REUSE", + "MADV_CORE", + "MADV_DOFORK", + "MADV_DONTFORK", + "MADV_DONTNEED", + "MADV_FREE", + "MADV_FREE_REUSABLE", + "MADV_FREE_REUSE", + "MADV_HUGEPAGE", + "MADV_HWPOISON", + "MADV_MERGEABLE", + "MADV_NOCORE", + "MADV_NOHUGEPAGE", + "MADV_NORMAL", + "MADV_NOSYNC", + "MADV_PROTECT", + "MADV_RANDOM", + "MADV_REMOVE", + "MADV_SEQUENTIAL", + "MADV_SPACEAVAIL", + "MADV_UNMERGEABLE", + "MADV_WILLNEED", + "MADV_ZERO_WIRED_PAGES", + "MAP_32BIT", + "MAP_ALIGNED_SUPER", + "MAP_ALIGNMENT_16MB", + "MAP_ALIGNMENT_1TB", + "MAP_ALIGNMENT_256TB", + "MAP_ALIGNMENT_4GB", + "MAP_ALIGNMENT_64KB", + "MAP_ALIGNMENT_64PB", + "MAP_ALIGNMENT_MASK", + "MAP_ALIGNMENT_SHIFT", + "MAP_ANON", + "MAP_ANONYMOUS", + "MAP_COPY", + "MAP_DENYWRITE", + "MAP_EXECUTABLE", + "MAP_FILE", + "MAP_FIXED", + "MAP_FLAGMASK", + "MAP_GROWSDOWN", + "MAP_HASSEMAPHORE", + "MAP_HUGETLB", + "MAP_INHERIT", + "MAP_INHERIT_COPY", + "MAP_INHERIT_DEFAULT", + "MAP_INHERIT_DONATE_COPY", + "MAP_INHERIT_NONE", + "MAP_INHERIT_SHARE", + "MAP_JIT", + "MAP_LOCKED", + "MAP_NOCACHE", + "MAP_NOCORE", + "MAP_NOEXTEND", + "MAP_NONBLOCK", + "MAP_NORESERVE", + "MAP_NOSYNC", + "MAP_POPULATE", + "MAP_PREFAULT_READ", + "MAP_PRIVATE", + "MAP_RENAME", + "MAP_RESERVED0080", + "MAP_RESERVED0100", + "MAP_SHARED", + "MAP_STACK", + "MAP_TRYFIXED", + "MAP_TYPE", + "MAP_WIRED", + "MAXIMUM_REPARSE_DATA_BUFFER_SIZE", + "MAXLEN_IFDESCR", + "MAXLEN_PHYSADDR", + "MAX_ADAPTER_ADDRESS_LENGTH", + "MAX_ADAPTER_DESCRIPTION_LENGTH", + "MAX_ADAPTER_NAME_LENGTH", + "MAX_COMPUTERNAME_LENGTH", + "MAX_INTERFACE_NAME_LEN", + "MAX_LONG_PATH", + "MAX_PATH", + "MAX_PROTOCOL_CHAIN", + "MCL_CURRENT", + "MCL_FUTURE", + "MNT_DETACH", + "MNT_EXPIRE", + "MNT_FORCE", + "MSG_BCAST", + "MSG_CMSG_CLOEXEC", + "MSG_COMPAT", + "MSG_CONFIRM", + "MSG_CONTROLMBUF", + "MSG_CTRUNC", + "MSG_DONTROUTE", + "MSG_DONTWAIT", + "MSG_EOF", + "MSG_EOR", + "MSG_ERRQUEUE", + "MSG_FASTOPEN", + "MSG_FIN", + "MSG_FLUSH", + "MSG_HAVEMORE", + "MSG_HOLD", + "MSG_IOVUSRSPACE", + "MSG_LENUSRSPACE", + "MSG_MCAST", + "MSG_MORE", + "MSG_NAMEMBUF", + "MSG_NBIO", + "MSG_NEEDSA", + "MSG_NOSIGNAL", + "MSG_NOTIFICATION", + "MSG_OOB", + "MSG_PEEK", + "MSG_PROXY", + "MSG_RCVMORE", + "MSG_RST", + "MSG_SEND", + "MSG_SYN", + "MSG_TRUNC", + "MSG_TRYHARD", + "MSG_USERFLAGS", + "MSG_WAITALL", + "MSG_WAITFORONE", + "MSG_WAITSTREAM", + "MS_ACTIVE", + "MS_ASYNC", + "MS_BIND", + "MS_DEACTIVATE", + "MS_DIRSYNC", + "MS_INVALIDATE", + "MS_I_VERSION", + "MS_KERNMOUNT", + "MS_KILLPAGES", + "MS_MANDLOCK", + "MS_MGC_MSK", + "MS_MGC_VAL", + "MS_MOVE", + "MS_NOATIME", + "MS_NODEV", + "MS_NODIRATIME", + "MS_NOEXEC", + "MS_NOSUID", + "MS_NOUSER", + "MS_POSIXACL", + "MS_PRIVATE", + "MS_RDONLY", + "MS_REC", + "MS_RELATIME", + "MS_REMOUNT", + "MS_RMT_MASK", + "MS_SHARED", + "MS_SILENT", + "MS_SLAVE", + "MS_STRICTATIME", + "MS_SYNC", + "MS_SYNCHRONOUS", + "MS_UNBINDABLE", + "Madvise", + "MapViewOfFile", + "MaxTokenInfoClass", + "Mclpool", + "MibIfRow", + "Mkdir", + "Mkdirat", + "Mkfifo", + "Mknod", + "Mknodat", + "Mlock", + "Mlockall", + "Mmap", + "Mount", + "MoveFile", + "Mprotect", + "Msghdr", + "Munlock", + "Munlockall", + "Munmap", + "MustLoadDLL", + "NAME_MAX", + "NETLINK_ADD_MEMBERSHIP", + "NETLINK_AUDIT", + "NETLINK_BROADCAST_ERROR", + "NETLINK_CONNECTOR", + "NETLINK_DNRTMSG", + "NETLINK_DROP_MEMBERSHIP", + "NETLINK_ECRYPTFS", + "NETLINK_FIB_LOOKUP", + "NETLINK_FIREWALL", + "NETLINK_GENERIC", + "NETLINK_INET_DIAG", + "NETLINK_IP6_FW", + "NETLINK_ISCSI", + "NETLINK_KOBJECT_UEVENT", + "NETLINK_NETFILTER", + "NETLINK_NFLOG", + "NETLINK_NO_ENOBUFS", + "NETLINK_PKTINFO", + "NETLINK_RDMA", + "NETLINK_ROUTE", + "NETLINK_SCSITRANSPORT", + "NETLINK_SELINUX", + "NETLINK_UNUSED", + "NETLINK_USERSOCK", + "NETLINK_XFRM", + "NET_RT_DUMP", + "NET_RT_DUMP2", + "NET_RT_FLAGS", + "NET_RT_IFLIST", + "NET_RT_IFLIST2", + "NET_RT_IFLISTL", + "NET_RT_IFMALIST", + "NET_RT_MAXID", + "NET_RT_OIFLIST", + "NET_RT_OOIFLIST", + "NET_RT_STAT", + "NET_RT_STATS", + "NET_RT_TABLE", + "NET_RT_TRASH", + "NLA_ALIGNTO", + "NLA_F_NESTED", + "NLA_F_NET_BYTEORDER", + "NLA_HDRLEN", + "NLMSG_ALIGNTO", + "NLMSG_DONE", + "NLMSG_ERROR", + "NLMSG_HDRLEN", + "NLMSG_MIN_TYPE", + "NLMSG_NOOP", + "NLMSG_OVERRUN", + "NLM_F_ACK", + "NLM_F_APPEND", + "NLM_F_ATOMIC", + "NLM_F_CREATE", + "NLM_F_DUMP", + "NLM_F_ECHO", + "NLM_F_EXCL", + "NLM_F_MATCH", + "NLM_F_MULTI", + "NLM_F_REPLACE", + "NLM_F_REQUEST", + "NLM_F_ROOT", + "NOFLSH", + "NOTE_ABSOLUTE", + "NOTE_ATTRIB", + "NOTE_BACKGROUND", + "NOTE_CHILD", + "NOTE_CRITICAL", + "NOTE_DELETE", + "NOTE_EOF", + "NOTE_EXEC", + "NOTE_EXIT", + "NOTE_EXITSTATUS", + "NOTE_EXIT_CSERROR", + "NOTE_EXIT_DECRYPTFAIL", + "NOTE_EXIT_DETAIL", + "NOTE_EXIT_DETAIL_MASK", + "NOTE_EXIT_MEMORY", + "NOTE_EXIT_REPARENTED", + "NOTE_EXTEND", + "NOTE_FFAND", + "NOTE_FFCOPY", + "NOTE_FFCTRLMASK", + "NOTE_FFLAGSMASK", + "NOTE_FFNOP", + "NOTE_FFOR", + "NOTE_FORK", + "NOTE_LEEWAY", + "NOTE_LINK", + "NOTE_LOWAT", + "NOTE_NONE", + "NOTE_NSECONDS", + "NOTE_PCTRLMASK", + "NOTE_PDATAMASK", + "NOTE_REAP", + "NOTE_RENAME", + "NOTE_RESOURCEEND", + "NOTE_REVOKE", + "NOTE_SECONDS", + "NOTE_SIGNAL", + "NOTE_TRACK", + "NOTE_TRACKERR", + "NOTE_TRIGGER", + "NOTE_TRUNCATE", + "NOTE_USECONDS", + "NOTE_VM_ERROR", + "NOTE_VM_PRESSURE", + "NOTE_VM_PRESSURE_SUDDEN_TERMINATE", + "NOTE_VM_PRESSURE_TERMINATE", + "NOTE_WRITE", + "NameCanonical", + "NameCanonicalEx", + "NameDisplay", + "NameDnsDomain", + "NameFullyQualifiedDN", + "NameSamCompatible", + "NameServicePrincipal", + "NameUniqueId", + "NameUnknown", + "NameUserPrincipal", + "Nanosleep", + "NetApiBufferFree", + "NetGetJoinInformation", + "NetSetupDomainName", + "NetSetupUnjoined", + "NetSetupUnknownStatus", + "NetSetupWorkgroupName", + "NetUserGetInfo", + "NetlinkMessage", + "NetlinkRIB", + "NetlinkRouteAttr", + "NetlinkRouteRequest", + "NewCallback", + "NewCallbackCDecl", + "NewLazyDLL", + "NlAttr", + "NlMsgerr", + "NlMsghdr", + "NsecToFiletime", + "NsecToTimespec", + "NsecToTimeval", + "Ntohs", + "OCRNL", + "OFDEL", + "OFILL", + "OFIOGETBMAP", + "OID_PKIX_KP_SERVER_AUTH", + "OID_SERVER_GATED_CRYPTO", + "OID_SGC_NETSCAPE", + "OLCUC", + "ONLCR", + "ONLRET", + "ONOCR", + "ONOEOT", + "OPEN_ALWAYS", + "OPEN_EXISTING", + "OPOST", + "O_ACCMODE", + "O_ALERT", + "O_ALT_IO", + "O_APPEND", + "O_ASYNC", + "O_CLOEXEC", + "O_CREAT", + "O_DIRECT", + "O_DIRECTORY", + "O_DP_GETRAWENCRYPTED", + "O_DSYNC", + "O_EVTONLY", + "O_EXCL", + "O_EXEC", + "O_EXLOCK", + "O_FSYNC", + "O_LARGEFILE", + "O_NDELAY", + "O_NOATIME", + "O_NOCTTY", + "O_NOFOLLOW", + "O_NONBLOCK", + "O_NOSIGPIPE", + "O_POPUP", + "O_RDONLY", + "O_RDWR", + "O_RSYNC", + "O_SHLOCK", + "O_SYMLINK", + "O_SYNC", + "O_TRUNC", + "O_TTY_INIT", + "O_WRONLY", + "Open", + "OpenCurrentProcessToken", + "OpenProcess", + "OpenProcessToken", + "Openat", + "Overlapped", + "PACKET_ADD_MEMBERSHIP", + "PACKET_BROADCAST", + "PACKET_DROP_MEMBERSHIP", + "PACKET_FASTROUTE", + "PACKET_HOST", + "PACKET_LOOPBACK", + "PACKET_MR_ALLMULTI", + "PACKET_MR_MULTICAST", + "PACKET_MR_PROMISC", + "PACKET_MULTICAST", + "PACKET_OTHERHOST", + "PACKET_OUTGOING", + "PACKET_RECV_OUTPUT", + "PACKET_RX_RING", + "PACKET_STATISTICS", + "PAGE_EXECUTE_READ", + "PAGE_EXECUTE_READWRITE", + "PAGE_EXECUTE_WRITECOPY", + "PAGE_READONLY", + "PAGE_READWRITE", + "PAGE_WRITECOPY", + "PARENB", + "PARMRK", + "PARODD", + "PENDIN", + "PFL_HIDDEN", + "PFL_MATCHES_PROTOCOL_ZERO", + "PFL_MULTIPLE_PROTO_ENTRIES", + "PFL_NETWORKDIRECT_PROVIDER", + "PFL_RECOMMENDED_PROTO_ENTRY", + "PF_FLUSH", + "PKCS_7_ASN_ENCODING", + "PMC5_PIPELINE_FLUSH", + "PRIO_PGRP", + "PRIO_PROCESS", + "PRIO_USER", + "PRI_IOFLUSH", + "PROCESS_QUERY_INFORMATION", + "PROCESS_TERMINATE", + "PROT_EXEC", + "PROT_GROWSDOWN", + "PROT_GROWSUP", + "PROT_NONE", + "PROT_READ", + "PROT_WRITE", + "PROV_DH_SCHANNEL", + "PROV_DSS", + "PROV_DSS_DH", + "PROV_EC_ECDSA_FULL", + "PROV_EC_ECDSA_SIG", + "PROV_EC_ECNRA_FULL", + "PROV_EC_ECNRA_SIG", + "PROV_FORTEZZA", + "PROV_INTEL_SEC", + "PROV_MS_EXCHANGE", + "PROV_REPLACE_OWF", + "PROV_RNG", + "PROV_RSA_AES", + "PROV_RSA_FULL", + "PROV_RSA_SCHANNEL", + "PROV_RSA_SIG", + "PROV_SPYRUS_LYNKS", + "PROV_SSL", + "PR_CAPBSET_DROP", + "PR_CAPBSET_READ", + "PR_CLEAR_SECCOMP_FILTER", + "PR_ENDIAN_BIG", + "PR_ENDIAN_LITTLE", + "PR_ENDIAN_PPC_LITTLE", + "PR_FPEMU_NOPRINT", + "PR_FPEMU_SIGFPE", + "PR_FP_EXC_ASYNC", + "PR_FP_EXC_DISABLED", + "PR_FP_EXC_DIV", + "PR_FP_EXC_INV", + "PR_FP_EXC_NONRECOV", + "PR_FP_EXC_OVF", + "PR_FP_EXC_PRECISE", + "PR_FP_EXC_RES", + "PR_FP_EXC_SW_ENABLE", + "PR_FP_EXC_UND", + "PR_GET_DUMPABLE", + "PR_GET_ENDIAN", + "PR_GET_FPEMU", + "PR_GET_FPEXC", + "PR_GET_KEEPCAPS", + "PR_GET_NAME", + "PR_GET_PDEATHSIG", + "PR_GET_SECCOMP", + "PR_GET_SECCOMP_FILTER", + "PR_GET_SECUREBITS", + "PR_GET_TIMERSLACK", + "PR_GET_TIMING", + "PR_GET_TSC", + "PR_GET_UNALIGN", + "PR_MCE_KILL", + "PR_MCE_KILL_CLEAR", + "PR_MCE_KILL_DEFAULT", + "PR_MCE_KILL_EARLY", + "PR_MCE_KILL_GET", + "PR_MCE_KILL_LATE", + "PR_MCE_KILL_SET", + "PR_SECCOMP_FILTER_EVENT", + "PR_SECCOMP_FILTER_SYSCALL", + "PR_SET_DUMPABLE", + "PR_SET_ENDIAN", + "PR_SET_FPEMU", + "PR_SET_FPEXC", + "PR_SET_KEEPCAPS", + "PR_SET_NAME", + "PR_SET_PDEATHSIG", + "PR_SET_PTRACER", + "PR_SET_SECCOMP", + "PR_SET_SECCOMP_FILTER", + "PR_SET_SECUREBITS", + "PR_SET_TIMERSLACK", + "PR_SET_TIMING", + "PR_SET_TSC", + "PR_SET_UNALIGN", + "PR_TASK_PERF_EVENTS_DISABLE", + "PR_TASK_PERF_EVENTS_ENABLE", + "PR_TIMING_STATISTICAL", + "PR_TIMING_TIMESTAMP", + "PR_TSC_ENABLE", + "PR_TSC_SIGSEGV", + "PR_UNALIGN_NOPRINT", + "PR_UNALIGN_SIGBUS", + "PTRACE_ARCH_PRCTL", + "PTRACE_ATTACH", + "PTRACE_CONT", + "PTRACE_DETACH", + "PTRACE_EVENT_CLONE", + "PTRACE_EVENT_EXEC", + "PTRACE_EVENT_EXIT", + "PTRACE_EVENT_FORK", + "PTRACE_EVENT_VFORK", + "PTRACE_EVENT_VFORK_DONE", + "PTRACE_GETCRUNCHREGS", + "PTRACE_GETEVENTMSG", + "PTRACE_GETFPREGS", + "PTRACE_GETFPXREGS", + "PTRACE_GETHBPREGS", + "PTRACE_GETREGS", + "PTRACE_GETREGSET", + "PTRACE_GETSIGINFO", + "PTRACE_GETVFPREGS", + "PTRACE_GETWMMXREGS", + "PTRACE_GET_THREAD_AREA", + "PTRACE_KILL", + "PTRACE_OLDSETOPTIONS", + "PTRACE_O_MASK", + "PTRACE_O_TRACECLONE", + "PTRACE_O_TRACEEXEC", + "PTRACE_O_TRACEEXIT", + "PTRACE_O_TRACEFORK", + "PTRACE_O_TRACESYSGOOD", + "PTRACE_O_TRACEVFORK", + "PTRACE_O_TRACEVFORKDONE", + "PTRACE_PEEKDATA", + "PTRACE_PEEKTEXT", + "PTRACE_PEEKUSR", + "PTRACE_POKEDATA", + "PTRACE_POKETEXT", + "PTRACE_POKEUSR", + "PTRACE_SETCRUNCHREGS", + "PTRACE_SETFPREGS", + "PTRACE_SETFPXREGS", + "PTRACE_SETHBPREGS", + "PTRACE_SETOPTIONS", + "PTRACE_SETREGS", + "PTRACE_SETREGSET", + "PTRACE_SETSIGINFO", + "PTRACE_SETVFPREGS", + "PTRACE_SETWMMXREGS", + "PTRACE_SET_SYSCALL", + "PTRACE_SET_THREAD_AREA", + "PTRACE_SINGLEBLOCK", + "PTRACE_SINGLESTEP", + "PTRACE_SYSCALL", + "PTRACE_SYSEMU", + "PTRACE_SYSEMU_SINGLESTEP", + "PTRACE_TRACEME", + "PT_ATTACH", + "PT_ATTACHEXC", + "PT_CONTINUE", + "PT_DATA_ADDR", + "PT_DENY_ATTACH", + "PT_DETACH", + "PT_FIRSTMACH", + "PT_FORCEQUOTA", + "PT_KILL", + "PT_MASK", + "PT_READ_D", + "PT_READ_I", + "PT_READ_U", + "PT_SIGEXC", + "PT_STEP", + "PT_TEXT_ADDR", + "PT_TEXT_END_ADDR", + "PT_THUPDATE", + "PT_TRACE_ME", + "PT_WRITE_D", + "PT_WRITE_I", + "PT_WRITE_U", + "ParseDirent", + "ParseNetlinkMessage", + "ParseNetlinkRouteAttr", + "ParseRoutingMessage", + "ParseRoutingSockaddr", + "ParseSocketControlMessage", + "ParseUnixCredentials", + "ParseUnixRights", + "PathMax", + "Pathconf", + "Pause", + "Pipe", + "Pipe2", + "PivotRoot", + "Pointer", + "PostQueuedCompletionStatus", + "Pread", + "Proc", + "ProcAttr", + "Process32First", + "Process32Next", + "ProcessEntry32", + "ProcessInformation", + "Protoent", + "PtraceAttach", + "PtraceCont", + "PtraceDetach", + "PtraceGetEventMsg", + "PtraceGetRegs", + "PtracePeekData", + "PtracePeekText", + "PtracePokeData", + "PtracePokeText", + "PtraceRegs", + "PtraceSetOptions", + "PtraceSetRegs", + "PtraceSingleStep", + "PtraceSyscall", + "Pwrite", + "REG_BINARY", + "REG_DWORD", + "REG_DWORD_BIG_ENDIAN", + "REG_DWORD_LITTLE_ENDIAN", + "REG_EXPAND_SZ", + "REG_FULL_RESOURCE_DESCRIPTOR", + "REG_LINK", + "REG_MULTI_SZ", + "REG_NONE", + "REG_QWORD", + "REG_QWORD_LITTLE_ENDIAN", + "REG_RESOURCE_LIST", + "REG_RESOURCE_REQUIREMENTS_LIST", + "REG_SZ", + "RLIMIT_AS", + "RLIMIT_CORE", + "RLIMIT_CPU", + "RLIMIT_CPU_USAGE_MONITOR", + "RLIMIT_DATA", + "RLIMIT_FSIZE", + "RLIMIT_NOFILE", + "RLIMIT_STACK", + "RLIM_INFINITY", + "RTAX_ADVMSS", + "RTAX_AUTHOR", + "RTAX_BRD", + "RTAX_CWND", + "RTAX_DST", + "RTAX_FEATURES", + "RTAX_FEATURE_ALLFRAG", + "RTAX_FEATURE_ECN", + "RTAX_FEATURE_SACK", + "RTAX_FEATURE_TIMESTAMP", + "RTAX_GATEWAY", + "RTAX_GENMASK", + "RTAX_HOPLIMIT", + "RTAX_IFA", + "RTAX_IFP", + "RTAX_INITCWND", + "RTAX_INITRWND", + "RTAX_LABEL", + "RTAX_LOCK", + "RTAX_MAX", + "RTAX_MTU", + "RTAX_NETMASK", + "RTAX_REORDERING", + "RTAX_RTO_MIN", + "RTAX_RTT", + "RTAX_RTTVAR", + "RTAX_SRC", + "RTAX_SRCMASK", + "RTAX_SSTHRESH", + "RTAX_TAG", + "RTAX_UNSPEC", + "RTAX_WINDOW", + "RTA_ALIGNTO", + "RTA_AUTHOR", + "RTA_BRD", + "RTA_CACHEINFO", + "RTA_DST", + "RTA_FLOW", + "RTA_GATEWAY", + "RTA_GENMASK", + "RTA_IFA", + "RTA_IFP", + "RTA_IIF", + "RTA_LABEL", + "RTA_MAX", + "RTA_METRICS", + "RTA_MULTIPATH", + "RTA_NETMASK", + "RTA_OIF", + "RTA_PREFSRC", + "RTA_PRIORITY", + "RTA_SRC", + "RTA_SRCMASK", + "RTA_TABLE", + "RTA_TAG", + "RTA_UNSPEC", + "RTCF_DIRECTSRC", + "RTCF_DOREDIRECT", + "RTCF_LOG", + "RTCF_MASQ", + "RTCF_NAT", + "RTCF_VALVE", + "RTF_ADDRCLASSMASK", + "RTF_ADDRCONF", + "RTF_ALLONLINK", + "RTF_ANNOUNCE", + "RTF_BLACKHOLE", + "RTF_BROADCAST", + "RTF_CACHE", + "RTF_CLONED", + "RTF_CLONING", + "RTF_CONDEMNED", + "RTF_DEFAULT", + "RTF_DELCLONE", + "RTF_DONE", + "RTF_DYNAMIC", + "RTF_FLOW", + "RTF_FMASK", + "RTF_GATEWAY", + "RTF_GWFLAG_COMPAT", + "RTF_HOST", + "RTF_IFREF", + "RTF_IFSCOPE", + "RTF_INTERFACE", + "RTF_IRTT", + "RTF_LINKRT", + "RTF_LLDATA", + "RTF_LLINFO", + "RTF_LOCAL", + "RTF_MASK", + "RTF_MODIFIED", + "RTF_MPATH", + "RTF_MPLS", + "RTF_MSS", + "RTF_MTU", + "RTF_MULTICAST", + "RTF_NAT", + "RTF_NOFORWARD", + "RTF_NONEXTHOP", + "RTF_NOPMTUDISC", + "RTF_PERMANENT_ARP", + "RTF_PINNED", + "RTF_POLICY", + "RTF_PRCLONING", + "RTF_PROTO1", + "RTF_PROTO2", + "RTF_PROTO3", + "RTF_PROXY", + "RTF_REINSTATE", + "RTF_REJECT", + "RTF_RNH_LOCKED", + "RTF_ROUTER", + "RTF_SOURCE", + "RTF_SRC", + "RTF_STATIC", + "RTF_STICKY", + "RTF_THROW", + "RTF_TUNNEL", + "RTF_UP", + "RTF_USETRAILERS", + "RTF_WASCLONED", + "RTF_WINDOW", + "RTF_XRESOLVE", + "RTM_ADD", + "RTM_BASE", + "RTM_CHANGE", + "RTM_CHGADDR", + "RTM_DELACTION", + "RTM_DELADDR", + "RTM_DELADDRLABEL", + "RTM_DELETE", + "RTM_DELLINK", + "RTM_DELMADDR", + "RTM_DELNEIGH", + "RTM_DELQDISC", + "RTM_DELROUTE", + "RTM_DELRULE", + "RTM_DELTCLASS", + "RTM_DELTFILTER", + "RTM_DESYNC", + "RTM_F_CLONED", + "RTM_F_EQUALIZE", + "RTM_F_NOTIFY", + "RTM_F_PREFIX", + "RTM_GET", + "RTM_GET2", + "RTM_GETACTION", + "RTM_GETADDR", + "RTM_GETADDRLABEL", + "RTM_GETANYCAST", + "RTM_GETDCB", + "RTM_GETLINK", + "RTM_GETMULTICAST", + "RTM_GETNEIGH", + "RTM_GETNEIGHTBL", + "RTM_GETQDISC", + "RTM_GETROUTE", + "RTM_GETRULE", + "RTM_GETTCLASS", + "RTM_GETTFILTER", + "RTM_IEEE80211", + "RTM_IFANNOUNCE", + "RTM_IFINFO", + "RTM_IFINFO2", + "RTM_LLINFO_UPD", + "RTM_LOCK", + "RTM_LOSING", + "RTM_MAX", + "RTM_MAXSIZE", + "RTM_MISS", + "RTM_NEWACTION", + "RTM_NEWADDR", + "RTM_NEWADDRLABEL", + "RTM_NEWLINK", + "RTM_NEWMADDR", + "RTM_NEWMADDR2", + "RTM_NEWNDUSEROPT", + "RTM_NEWNEIGH", + "RTM_NEWNEIGHTBL", + "RTM_NEWPREFIX", + "RTM_NEWQDISC", + "RTM_NEWROUTE", + "RTM_NEWRULE", + "RTM_NEWTCLASS", + "RTM_NEWTFILTER", + "RTM_NR_FAMILIES", + "RTM_NR_MSGTYPES", + "RTM_OIFINFO", + "RTM_OLDADD", + "RTM_OLDDEL", + "RTM_OOIFINFO", + "RTM_REDIRECT", + "RTM_RESOLVE", + "RTM_RTTUNIT", + "RTM_SETDCB", + "RTM_SETGATE", + "RTM_SETLINK", + "RTM_SETNEIGHTBL", + "RTM_VERSION", + "RTNH_ALIGNTO", + "RTNH_F_DEAD", + "RTNH_F_ONLINK", + "RTNH_F_PERVASIVE", + "RTNLGRP_IPV4_IFADDR", + "RTNLGRP_IPV4_MROUTE", + "RTNLGRP_IPV4_ROUTE", + "RTNLGRP_IPV4_RULE", + "RTNLGRP_IPV6_IFADDR", + "RTNLGRP_IPV6_IFINFO", + "RTNLGRP_IPV6_MROUTE", + "RTNLGRP_IPV6_PREFIX", + "RTNLGRP_IPV6_ROUTE", + "RTNLGRP_IPV6_RULE", + "RTNLGRP_LINK", + "RTNLGRP_ND_USEROPT", + "RTNLGRP_NEIGH", + "RTNLGRP_NONE", + "RTNLGRP_NOTIFY", + "RTNLGRP_TC", + "RTN_ANYCAST", + "RTN_BLACKHOLE", + "RTN_BROADCAST", + "RTN_LOCAL", + "RTN_MAX", + "RTN_MULTICAST", + "RTN_NAT", + "RTN_PROHIBIT", + "RTN_THROW", + "RTN_UNICAST", + "RTN_UNREACHABLE", + "RTN_UNSPEC", + "RTN_XRESOLVE", + "RTPROT_BIRD", + "RTPROT_BOOT", + "RTPROT_DHCP", + "RTPROT_DNROUTED", + "RTPROT_GATED", + "RTPROT_KERNEL", + "RTPROT_MRT", + "RTPROT_NTK", + "RTPROT_RA", + "RTPROT_REDIRECT", + "RTPROT_STATIC", + "RTPROT_UNSPEC", + "RTPROT_XORP", + "RTPROT_ZEBRA", + "RTV_EXPIRE", + "RTV_HOPCOUNT", + "RTV_MTU", + "RTV_RPIPE", + "RTV_RTT", + "RTV_RTTVAR", + "RTV_SPIPE", + "RTV_SSTHRESH", + "RTV_WEIGHT", + "RT_CACHING_CONTEXT", + "RT_CLASS_DEFAULT", + "RT_CLASS_LOCAL", + "RT_CLASS_MAIN", + "RT_CLASS_MAX", + "RT_CLASS_UNSPEC", + "RT_DEFAULT_FIB", + "RT_NORTREF", + "RT_SCOPE_HOST", + "RT_SCOPE_LINK", + "RT_SCOPE_NOWHERE", + "RT_SCOPE_SITE", + "RT_SCOPE_UNIVERSE", + "RT_TABLEID_MAX", + "RT_TABLE_COMPAT", + "RT_TABLE_DEFAULT", + "RT_TABLE_LOCAL", + "RT_TABLE_MAIN", + "RT_TABLE_MAX", + "RT_TABLE_UNSPEC", + "RUSAGE_CHILDREN", + "RUSAGE_SELF", + "RUSAGE_THREAD", + "Radvisory_t", + "RawConn", + "RawSockaddr", + "RawSockaddrAny", + "RawSockaddrDatalink", + "RawSockaddrInet4", + "RawSockaddrInet6", + "RawSockaddrLinklayer", + "RawSockaddrNetlink", + "RawSockaddrUnix", + "RawSyscall", + "RawSyscall6", + "Read", + "ReadConsole", + "ReadDirectoryChanges", + "ReadDirent", + "ReadFile", + "Readlink", + "Reboot", + "Recvfrom", + "Recvmsg", + "RegCloseKey", + "RegEnumKeyEx", + "RegOpenKeyEx", + "RegQueryInfoKey", + "RegQueryValueEx", + "RemoveDirectory", + "Removexattr", + "Rename", + "Renameat", + "Revoke", + "Rlimit", + "Rmdir", + "RouteMessage", + "RouteRIB", + "RoutingMessage", + "RtAttr", + "RtGenmsg", + "RtMetrics", + "RtMsg", + "RtMsghdr", + "RtNexthop", + "Rusage", + "SCM_BINTIME", + "SCM_CREDENTIALS", + "SCM_CREDS", + "SCM_RIGHTS", + "SCM_TIMESTAMP", + "SCM_TIMESTAMPING", + "SCM_TIMESTAMPNS", + "SCM_TIMESTAMP_MONOTONIC", + "SHUT_RD", + "SHUT_RDWR", + "SHUT_WR", + "SID", + "SIDAndAttributes", + "SIGABRT", + "SIGALRM", + "SIGBUS", + "SIGCHLD", + "SIGCLD", + "SIGCONT", + "SIGEMT", + "SIGFPE", + "SIGHUP", + "SIGILL", + "SIGINFO", + "SIGINT", + "SIGIO", + "SIGIOT", + "SIGKILL", + "SIGLIBRT", + "SIGLWP", + "SIGPIPE", + "SIGPOLL", + "SIGPROF", + "SIGPWR", + "SIGQUIT", + "SIGSEGV", + "SIGSTKFLT", + "SIGSTOP", + "SIGSYS", + "SIGTERM", + "SIGTHR", + "SIGTRAP", + "SIGTSTP", + "SIGTTIN", + "SIGTTOU", + "SIGUNUSED", + "SIGURG", + "SIGUSR1", + "SIGUSR2", + "SIGVTALRM", + "SIGWINCH", + "SIGXCPU", + "SIGXFSZ", + "SIOCADDDLCI", + "SIOCADDMULTI", + "SIOCADDRT", + "SIOCAIFADDR", + "SIOCAIFGROUP", + "SIOCALIFADDR", + "SIOCARPIPLL", + "SIOCATMARK", + "SIOCAUTOADDR", + "SIOCAUTONETMASK", + "SIOCBRDGADD", + "SIOCBRDGADDS", + "SIOCBRDGARL", + "SIOCBRDGDADDR", + "SIOCBRDGDEL", + "SIOCBRDGDELS", + "SIOCBRDGFLUSH", + "SIOCBRDGFRL", + "SIOCBRDGGCACHE", + "SIOCBRDGGFD", + "SIOCBRDGGHT", + "SIOCBRDGGIFFLGS", + "SIOCBRDGGMA", + "SIOCBRDGGPARAM", + "SIOCBRDGGPRI", + "SIOCBRDGGRL", + "SIOCBRDGGSIFS", + "SIOCBRDGGTO", + "SIOCBRDGIFS", + "SIOCBRDGRTS", + "SIOCBRDGSADDR", + "SIOCBRDGSCACHE", + "SIOCBRDGSFD", + "SIOCBRDGSHT", + "SIOCBRDGSIFCOST", + "SIOCBRDGSIFFLGS", + "SIOCBRDGSIFPRIO", + "SIOCBRDGSMA", + "SIOCBRDGSPRI", + "SIOCBRDGSPROTO", + "SIOCBRDGSTO", + "SIOCBRDGSTXHC", + "SIOCDARP", + "SIOCDELDLCI", + "SIOCDELMULTI", + "SIOCDELRT", + "SIOCDEVPRIVATE", + "SIOCDIFADDR", + "SIOCDIFGROUP", + "SIOCDIFPHYADDR", + "SIOCDLIFADDR", + "SIOCDRARP", + "SIOCGARP", + "SIOCGDRVSPEC", + "SIOCGETKALIVE", + "SIOCGETLABEL", + "SIOCGETPFLOW", + "SIOCGETPFSYNC", + "SIOCGETSGCNT", + "SIOCGETVIFCNT", + "SIOCGETVLAN", + "SIOCGHIWAT", + "SIOCGIFADDR", + "SIOCGIFADDRPREF", + "SIOCGIFALIAS", + "SIOCGIFALTMTU", + "SIOCGIFASYNCMAP", + "SIOCGIFBOND", + "SIOCGIFBR", + "SIOCGIFBRDADDR", + "SIOCGIFCAP", + "SIOCGIFCONF", + "SIOCGIFCOUNT", + "SIOCGIFDATA", + "SIOCGIFDESCR", + "SIOCGIFDEVMTU", + "SIOCGIFDLT", + "SIOCGIFDSTADDR", + "SIOCGIFENCAP", + "SIOCGIFFIB", + "SIOCGIFFLAGS", + "SIOCGIFGATTR", + "SIOCGIFGENERIC", + "SIOCGIFGMEMB", + "SIOCGIFGROUP", + "SIOCGIFHARDMTU", + "SIOCGIFHWADDR", + "SIOCGIFINDEX", + "SIOCGIFKPI", + "SIOCGIFMAC", + "SIOCGIFMAP", + "SIOCGIFMEDIA", + "SIOCGIFMEM", + "SIOCGIFMETRIC", + "SIOCGIFMTU", + "SIOCGIFNAME", + "SIOCGIFNETMASK", + "SIOCGIFPDSTADDR", + "SIOCGIFPFLAGS", + "SIOCGIFPHYS", + "SIOCGIFPRIORITY", + "SIOCGIFPSRCADDR", + "SIOCGIFRDOMAIN", + "SIOCGIFRTLABEL", + "SIOCGIFSLAVE", + "SIOCGIFSTATUS", + "SIOCGIFTIMESLOT", + "SIOCGIFTXQLEN", + "SIOCGIFVLAN", + "SIOCGIFWAKEFLAGS", + "SIOCGIFXFLAGS", + "SIOCGLIFADDR", + "SIOCGLIFPHYADDR", + "SIOCGLIFPHYRTABLE", + "SIOCGLIFPHYTTL", + "SIOCGLINKSTR", + "SIOCGLOWAT", + "SIOCGPGRP", + "SIOCGPRIVATE_0", + "SIOCGPRIVATE_1", + "SIOCGRARP", + "SIOCGSPPPPARAMS", + "SIOCGSTAMP", + "SIOCGSTAMPNS", + "SIOCGVH", + "SIOCGVNETID", + "SIOCIFCREATE", + "SIOCIFCREATE2", + "SIOCIFDESTROY", + "SIOCIFGCLONERS", + "SIOCINITIFADDR", + "SIOCPROTOPRIVATE", + "SIOCRSLVMULTI", + "SIOCRTMSG", + "SIOCSARP", + "SIOCSDRVSPEC", + "SIOCSETKALIVE", + "SIOCSETLABEL", + "SIOCSETPFLOW", + "SIOCSETPFSYNC", + "SIOCSETVLAN", + "SIOCSHIWAT", + "SIOCSIFADDR", + "SIOCSIFADDRPREF", + "SIOCSIFALTMTU", + "SIOCSIFASYNCMAP", + "SIOCSIFBOND", + "SIOCSIFBR", + "SIOCSIFBRDADDR", + "SIOCSIFCAP", + "SIOCSIFDESCR", + "SIOCSIFDSTADDR", + "SIOCSIFENCAP", + "SIOCSIFFIB", + "SIOCSIFFLAGS", + "SIOCSIFGATTR", + "SIOCSIFGENERIC", + "SIOCSIFHWADDR", + "SIOCSIFHWBROADCAST", + "SIOCSIFKPI", + "SIOCSIFLINK", + "SIOCSIFLLADDR", + "SIOCSIFMAC", + "SIOCSIFMAP", + "SIOCSIFMEDIA", + "SIOCSIFMEM", + "SIOCSIFMETRIC", + "SIOCSIFMTU", + "SIOCSIFNAME", + "SIOCSIFNETMASK", + "SIOCSIFPFLAGS", + "SIOCSIFPHYADDR", + "SIOCSIFPHYS", + "SIOCSIFPRIORITY", + "SIOCSIFRDOMAIN", + "SIOCSIFRTLABEL", + "SIOCSIFRVNET", + "SIOCSIFSLAVE", + "SIOCSIFTIMESLOT", + "SIOCSIFTXQLEN", + "SIOCSIFVLAN", + "SIOCSIFVNET", + "SIOCSIFXFLAGS", + "SIOCSLIFPHYADDR", + "SIOCSLIFPHYRTABLE", + "SIOCSLIFPHYTTL", + "SIOCSLINKSTR", + "SIOCSLOWAT", + "SIOCSPGRP", + "SIOCSRARP", + "SIOCSSPPPPARAMS", + "SIOCSVH", + "SIOCSVNETID", + "SIOCZIFDATA", + "SIO_GET_EXTENSION_FUNCTION_POINTER", + "SIO_GET_INTERFACE_LIST", + "SIO_KEEPALIVE_VALS", + "SIO_UDP_CONNRESET", + "SOCK_CLOEXEC", + "SOCK_DCCP", + "SOCK_DGRAM", + "SOCK_FLAGS_MASK", + "SOCK_MAXADDRLEN", + "SOCK_NONBLOCK", + "SOCK_NOSIGPIPE", + "SOCK_PACKET", + "SOCK_RAW", + "SOCK_RDM", + "SOCK_SEQPACKET", + "SOCK_STREAM", + "SOL_AAL", + "SOL_ATM", + "SOL_DECNET", + "SOL_ICMPV6", + "SOL_IP", + "SOL_IPV6", + "SOL_IRDA", + "SOL_PACKET", + "SOL_RAW", + "SOL_SOCKET", + "SOL_TCP", + "SOL_X25", + "SOMAXCONN", + "SO_ACCEPTCONN", + "SO_ACCEPTFILTER", + "SO_ATTACH_FILTER", + "SO_BINDANY", + "SO_BINDTODEVICE", + "SO_BINTIME", + "SO_BROADCAST", + "SO_BSDCOMPAT", + "SO_DEBUG", + "SO_DETACH_FILTER", + "SO_DOMAIN", + "SO_DONTROUTE", + "SO_DONTTRUNC", + "SO_ERROR", + "SO_KEEPALIVE", + "SO_LABEL", + "SO_LINGER", + "SO_LINGER_SEC", + "SO_LISTENINCQLEN", + "SO_LISTENQLEN", + "SO_LISTENQLIMIT", + "SO_MARK", + "SO_NETPROC", + "SO_NKE", + "SO_NOADDRERR", + "SO_NOHEADER", + "SO_NOSIGPIPE", + "SO_NOTIFYCONFLICT", + "SO_NO_CHECK", + "SO_NO_DDP", + "SO_NO_OFFLOAD", + "SO_NP_EXTENSIONS", + "SO_NREAD", + "SO_NUMRCVPKT", + "SO_NWRITE", + "SO_OOBINLINE", + "SO_OVERFLOWED", + "SO_PASSCRED", + "SO_PASSSEC", + "SO_PEERCRED", + "SO_PEERLABEL", + "SO_PEERNAME", + "SO_PEERSEC", + "SO_PRIORITY", + "SO_PROTOCOL", + "SO_PROTOTYPE", + "SO_RANDOMPORT", + "SO_RCVBUF", + "SO_RCVBUFFORCE", + "SO_RCVLOWAT", + "SO_RCVTIMEO", + "SO_RESTRICTIONS", + "SO_RESTRICT_DENYIN", + "SO_RESTRICT_DENYOUT", + "SO_RESTRICT_DENYSET", + "SO_REUSEADDR", + "SO_REUSEPORT", + "SO_REUSESHAREUID", + "SO_RTABLE", + "SO_RXQ_OVFL", + "SO_SECURITY_AUTHENTICATION", + "SO_SECURITY_ENCRYPTION_NETWORK", + "SO_SECURITY_ENCRYPTION_TRANSPORT", + "SO_SETFIB", + "SO_SNDBUF", + "SO_SNDBUFFORCE", + "SO_SNDLOWAT", + "SO_SNDTIMEO", + "SO_SPLICE", + "SO_TIMESTAMP", + "SO_TIMESTAMPING", + "SO_TIMESTAMPNS", + "SO_TIMESTAMP_MONOTONIC", + "SO_TYPE", + "SO_UPCALLCLOSEWAIT", + "SO_UPDATE_ACCEPT_CONTEXT", + "SO_UPDATE_CONNECT_CONTEXT", + "SO_USELOOPBACK", + "SO_USER_COOKIE", + "SO_VENDOR", + "SO_WANTMORE", + "SO_WANTOOBFLAG", + "SSLExtraCertChainPolicyPara", + "STANDARD_RIGHTS_ALL", + "STANDARD_RIGHTS_EXECUTE", + "STANDARD_RIGHTS_READ", + "STANDARD_RIGHTS_REQUIRED", + "STANDARD_RIGHTS_WRITE", + "STARTF_USESHOWWINDOW", + "STARTF_USESTDHANDLES", + "STD_ERROR_HANDLE", + "STD_INPUT_HANDLE", + "STD_OUTPUT_HANDLE", + "SUBLANG_ENGLISH_US", + "SW_FORCEMINIMIZE", + "SW_HIDE", + "SW_MAXIMIZE", + "SW_MINIMIZE", + "SW_NORMAL", + "SW_RESTORE", + "SW_SHOW", + "SW_SHOWDEFAULT", + "SW_SHOWMAXIMIZED", + "SW_SHOWMINIMIZED", + "SW_SHOWMINNOACTIVE", + "SW_SHOWNA", + "SW_SHOWNOACTIVATE", + "SW_SHOWNORMAL", + "SYMBOLIC_LINK_FLAG_DIRECTORY", + "SYNCHRONIZE", + "SYSCTL_VERSION", + "SYSCTL_VERS_0", + "SYSCTL_VERS_1", + "SYSCTL_VERS_MASK", + "SYS_ABORT2", + "SYS_ACCEPT", + "SYS_ACCEPT4", + "SYS_ACCEPT_NOCANCEL", + "SYS_ACCESS", + "SYS_ACCESS_EXTENDED", + "SYS_ACCT", + "SYS_ADD_KEY", + "SYS_ADD_PROFIL", + "SYS_ADJFREQ", + "SYS_ADJTIME", + "SYS_ADJTIMEX", + "SYS_AFS_SYSCALL", + "SYS_AIO_CANCEL", + "SYS_AIO_ERROR", + "SYS_AIO_FSYNC", + "SYS_AIO_READ", + "SYS_AIO_RETURN", + "SYS_AIO_SUSPEND", + "SYS_AIO_SUSPEND_NOCANCEL", + "SYS_AIO_WRITE", + "SYS_ALARM", + "SYS_ARCH_PRCTL", + "SYS_ARM_FADVISE64_64", + "SYS_ARM_SYNC_FILE_RANGE", + "SYS_ATGETMSG", + "SYS_ATPGETREQ", + "SYS_ATPGETRSP", + "SYS_ATPSNDREQ", + "SYS_ATPSNDRSP", + "SYS_ATPUTMSG", + "SYS_ATSOCKET", + "SYS_AUDIT", + "SYS_AUDITCTL", + "SYS_AUDITON", + "SYS_AUDIT_SESSION_JOIN", + "SYS_AUDIT_SESSION_PORT", + "SYS_AUDIT_SESSION_SELF", + "SYS_BDFLUSH", + "SYS_BIND", + "SYS_BINDAT", + "SYS_BREAK", + "SYS_BRK", + "SYS_BSDTHREAD_CREATE", + "SYS_BSDTHREAD_REGISTER", + "SYS_BSDTHREAD_TERMINATE", + "SYS_CAPGET", + "SYS_CAPSET", + "SYS_CAP_ENTER", + "SYS_CAP_FCNTLS_GET", + "SYS_CAP_FCNTLS_LIMIT", + "SYS_CAP_GETMODE", + "SYS_CAP_GETRIGHTS", + "SYS_CAP_IOCTLS_GET", + "SYS_CAP_IOCTLS_LIMIT", + "SYS_CAP_NEW", + "SYS_CAP_RIGHTS_GET", + "SYS_CAP_RIGHTS_LIMIT", + "SYS_CHDIR", + "SYS_CHFLAGS", + "SYS_CHFLAGSAT", + "SYS_CHMOD", + "SYS_CHMOD_EXTENDED", + "SYS_CHOWN", + "SYS_CHOWN32", + "SYS_CHROOT", + "SYS_CHUD", + "SYS_CLOCK_ADJTIME", + "SYS_CLOCK_GETCPUCLOCKID2", + "SYS_CLOCK_GETRES", + "SYS_CLOCK_GETTIME", + "SYS_CLOCK_NANOSLEEP", + "SYS_CLOCK_SETTIME", + "SYS_CLONE", + "SYS_CLOSE", + "SYS_CLOSEFROM", + "SYS_CLOSE_NOCANCEL", + "SYS_CONNECT", + "SYS_CONNECTAT", + "SYS_CONNECT_NOCANCEL", + "SYS_COPYFILE", + "SYS_CPUSET", + "SYS_CPUSET_GETAFFINITY", + "SYS_CPUSET_GETID", + "SYS_CPUSET_SETAFFINITY", + "SYS_CPUSET_SETID", + "SYS_CREAT", + "SYS_CREATE_MODULE", + "SYS_CSOPS", + "SYS_CSOPS_AUDITTOKEN", + "SYS_DELETE", + "SYS_DELETE_MODULE", + "SYS_DUP", + "SYS_DUP2", + "SYS_DUP3", + "SYS_EACCESS", + "SYS_EPOLL_CREATE", + "SYS_EPOLL_CREATE1", + "SYS_EPOLL_CTL", + "SYS_EPOLL_CTL_OLD", + "SYS_EPOLL_PWAIT", + "SYS_EPOLL_WAIT", + "SYS_EPOLL_WAIT_OLD", + "SYS_EVENTFD", + "SYS_EVENTFD2", + "SYS_EXCHANGEDATA", + "SYS_EXECVE", + "SYS_EXIT", + "SYS_EXIT_GROUP", + "SYS_EXTATTRCTL", + "SYS_EXTATTR_DELETE_FD", + "SYS_EXTATTR_DELETE_FILE", + "SYS_EXTATTR_DELETE_LINK", + "SYS_EXTATTR_GET_FD", + "SYS_EXTATTR_GET_FILE", + "SYS_EXTATTR_GET_LINK", + "SYS_EXTATTR_LIST_FD", + "SYS_EXTATTR_LIST_FILE", + "SYS_EXTATTR_LIST_LINK", + "SYS_EXTATTR_SET_FD", + "SYS_EXTATTR_SET_FILE", + "SYS_EXTATTR_SET_LINK", + "SYS_FACCESSAT", + "SYS_FADVISE64", + "SYS_FADVISE64_64", + "SYS_FALLOCATE", + "SYS_FANOTIFY_INIT", + "SYS_FANOTIFY_MARK", + "SYS_FCHDIR", + "SYS_FCHFLAGS", + "SYS_FCHMOD", + "SYS_FCHMODAT", + "SYS_FCHMOD_EXTENDED", + "SYS_FCHOWN", + "SYS_FCHOWN32", + "SYS_FCHOWNAT", + "SYS_FCHROOT", + "SYS_FCNTL", + "SYS_FCNTL64", + "SYS_FCNTL_NOCANCEL", + "SYS_FDATASYNC", + "SYS_FEXECVE", + "SYS_FFCLOCK_GETCOUNTER", + "SYS_FFCLOCK_GETESTIMATE", + "SYS_FFCLOCK_SETESTIMATE", + "SYS_FFSCTL", + "SYS_FGETATTRLIST", + "SYS_FGETXATTR", + "SYS_FHOPEN", + "SYS_FHSTAT", + "SYS_FHSTATFS", + "SYS_FILEPORT_MAKEFD", + "SYS_FILEPORT_MAKEPORT", + "SYS_FKTRACE", + "SYS_FLISTXATTR", + "SYS_FLOCK", + "SYS_FORK", + "SYS_FPATHCONF", + "SYS_FREEBSD6_FTRUNCATE", + "SYS_FREEBSD6_LSEEK", + "SYS_FREEBSD6_MMAP", + "SYS_FREEBSD6_PREAD", + "SYS_FREEBSD6_PWRITE", + "SYS_FREEBSD6_TRUNCATE", + "SYS_FREMOVEXATTR", + "SYS_FSCTL", + "SYS_FSETATTRLIST", + "SYS_FSETXATTR", + "SYS_FSGETPATH", + "SYS_FSTAT", + "SYS_FSTAT64", + "SYS_FSTAT64_EXTENDED", + "SYS_FSTATAT", + "SYS_FSTATAT64", + "SYS_FSTATFS", + "SYS_FSTATFS64", + "SYS_FSTATV", + "SYS_FSTATVFS1", + "SYS_FSTAT_EXTENDED", + "SYS_FSYNC", + "SYS_FSYNC_NOCANCEL", + "SYS_FSYNC_RANGE", + "SYS_FTIME", + "SYS_FTRUNCATE", + "SYS_FTRUNCATE64", + "SYS_FUTEX", + "SYS_FUTIMENS", + "SYS_FUTIMES", + "SYS_FUTIMESAT", + "SYS_GETATTRLIST", + "SYS_GETAUDIT", + "SYS_GETAUDIT_ADDR", + "SYS_GETAUID", + "SYS_GETCONTEXT", + "SYS_GETCPU", + "SYS_GETCWD", + "SYS_GETDENTS", + "SYS_GETDENTS64", + "SYS_GETDIRENTRIES", + "SYS_GETDIRENTRIES64", + "SYS_GETDIRENTRIESATTR", + "SYS_GETDTABLECOUNT", + "SYS_GETDTABLESIZE", + "SYS_GETEGID", + "SYS_GETEGID32", + "SYS_GETEUID", + "SYS_GETEUID32", + "SYS_GETFH", + "SYS_GETFSSTAT", + "SYS_GETFSSTAT64", + "SYS_GETGID", + "SYS_GETGID32", + "SYS_GETGROUPS", + "SYS_GETGROUPS32", + "SYS_GETHOSTUUID", + "SYS_GETITIMER", + "SYS_GETLCID", + "SYS_GETLOGIN", + "SYS_GETLOGINCLASS", + "SYS_GETPEERNAME", + "SYS_GETPGID", + "SYS_GETPGRP", + "SYS_GETPID", + "SYS_GETPMSG", + "SYS_GETPPID", + "SYS_GETPRIORITY", + "SYS_GETRESGID", + "SYS_GETRESGID32", + "SYS_GETRESUID", + "SYS_GETRESUID32", + "SYS_GETRLIMIT", + "SYS_GETRTABLE", + "SYS_GETRUSAGE", + "SYS_GETSGROUPS", + "SYS_GETSID", + "SYS_GETSOCKNAME", + "SYS_GETSOCKOPT", + "SYS_GETTHRID", + "SYS_GETTID", + "SYS_GETTIMEOFDAY", + "SYS_GETUID", + "SYS_GETUID32", + "SYS_GETVFSSTAT", + "SYS_GETWGROUPS", + "SYS_GETXATTR", + "SYS_GET_KERNEL_SYMS", + "SYS_GET_MEMPOLICY", + "SYS_GET_ROBUST_LIST", + "SYS_GET_THREAD_AREA", + "SYS_GTTY", + "SYS_IDENTITYSVC", + "SYS_IDLE", + "SYS_INITGROUPS", + "SYS_INIT_MODULE", + "SYS_INOTIFY_ADD_WATCH", + "SYS_INOTIFY_INIT", + "SYS_INOTIFY_INIT1", + "SYS_INOTIFY_RM_WATCH", + "SYS_IOCTL", + "SYS_IOPERM", + "SYS_IOPL", + "SYS_IOPOLICYSYS", + "SYS_IOPRIO_GET", + "SYS_IOPRIO_SET", + "SYS_IO_CANCEL", + "SYS_IO_DESTROY", + "SYS_IO_GETEVENTS", + "SYS_IO_SETUP", + "SYS_IO_SUBMIT", + "SYS_IPC", + "SYS_ISSETUGID", + "SYS_JAIL", + "SYS_JAIL_ATTACH", + "SYS_JAIL_GET", + "SYS_JAIL_REMOVE", + "SYS_JAIL_SET", + "SYS_KAS_INFO", + "SYS_KDEBUG_TRACE", + "SYS_KENV", + "SYS_KEVENT", + "SYS_KEVENT64", + "SYS_KEXEC_LOAD", + "SYS_KEYCTL", + "SYS_KILL", + "SYS_KLDFIND", + "SYS_KLDFIRSTMOD", + "SYS_KLDLOAD", + "SYS_KLDNEXT", + "SYS_KLDSTAT", + "SYS_KLDSYM", + "SYS_KLDUNLOAD", + "SYS_KLDUNLOADF", + "SYS_KQUEUE", + "SYS_KQUEUE1", + "SYS_KTIMER_CREATE", + "SYS_KTIMER_DELETE", + "SYS_KTIMER_GETOVERRUN", + "SYS_KTIMER_GETTIME", + "SYS_KTIMER_SETTIME", + "SYS_KTRACE", + "SYS_LCHFLAGS", + "SYS_LCHMOD", + "SYS_LCHOWN", + "SYS_LCHOWN32", + "SYS_LEDGER", + "SYS_LGETFH", + "SYS_LGETXATTR", + "SYS_LINK", + "SYS_LINKAT", + "SYS_LIO_LISTIO", + "SYS_LISTEN", + "SYS_LISTXATTR", + "SYS_LLISTXATTR", + "SYS_LOCK", + "SYS_LOOKUP_DCOOKIE", + "SYS_LPATHCONF", + "SYS_LREMOVEXATTR", + "SYS_LSEEK", + "SYS_LSETXATTR", + "SYS_LSTAT", + "SYS_LSTAT64", + "SYS_LSTAT64_EXTENDED", + "SYS_LSTATV", + "SYS_LSTAT_EXTENDED", + "SYS_LUTIMES", + "SYS_MAC_SYSCALL", + "SYS_MADVISE", + "SYS_MADVISE1", + "SYS_MAXSYSCALL", + "SYS_MBIND", + "SYS_MIGRATE_PAGES", + "SYS_MINCORE", + "SYS_MINHERIT", + "SYS_MKCOMPLEX", + "SYS_MKDIR", + "SYS_MKDIRAT", + "SYS_MKDIR_EXTENDED", + "SYS_MKFIFO", + "SYS_MKFIFOAT", + "SYS_MKFIFO_EXTENDED", + "SYS_MKNOD", + "SYS_MKNODAT", + "SYS_MLOCK", + "SYS_MLOCKALL", + "SYS_MMAP", + "SYS_MMAP2", + "SYS_MODCTL", + "SYS_MODFIND", + "SYS_MODFNEXT", + "SYS_MODIFY_LDT", + "SYS_MODNEXT", + "SYS_MODSTAT", + "SYS_MODWATCH", + "SYS_MOUNT", + "SYS_MOVE_PAGES", + "SYS_MPROTECT", + "SYS_MPX", + "SYS_MQUERY", + "SYS_MQ_GETSETATTR", + "SYS_MQ_NOTIFY", + "SYS_MQ_OPEN", + "SYS_MQ_TIMEDRECEIVE", + "SYS_MQ_TIMEDSEND", + "SYS_MQ_UNLINK", + "SYS_MREMAP", + "SYS_MSGCTL", + "SYS_MSGGET", + "SYS_MSGRCV", + "SYS_MSGRCV_NOCANCEL", + "SYS_MSGSND", + "SYS_MSGSND_NOCANCEL", + "SYS_MSGSYS", + "SYS_MSYNC", + "SYS_MSYNC_NOCANCEL", + "SYS_MUNLOCK", + "SYS_MUNLOCKALL", + "SYS_MUNMAP", + "SYS_NAME_TO_HANDLE_AT", + "SYS_NANOSLEEP", + "SYS_NEWFSTATAT", + "SYS_NFSCLNT", + "SYS_NFSSERVCTL", + "SYS_NFSSVC", + "SYS_NFSTAT", + "SYS_NICE", + "SYS_NLSTAT", + "SYS_NMOUNT", + "SYS_NSTAT", + "SYS_NTP_ADJTIME", + "SYS_NTP_GETTIME", + "SYS_OABI_SYSCALL_BASE", + "SYS_OBREAK", + "SYS_OLDFSTAT", + "SYS_OLDLSTAT", + "SYS_OLDOLDUNAME", + "SYS_OLDSTAT", + "SYS_OLDUNAME", + "SYS_OPEN", + "SYS_OPENAT", + "SYS_OPENBSD_POLL", + "SYS_OPEN_BY_HANDLE_AT", + "SYS_OPEN_DPROTECTED_NP", + "SYS_OPEN_EXTENDED", + "SYS_OPEN_NOCANCEL", + "SYS_OVADVISE", + "SYS_PACCEPT", + "SYS_PATHCONF", + "SYS_PAUSE", + "SYS_PCICONFIG_IOBASE", + "SYS_PCICONFIG_READ", + "SYS_PCICONFIG_WRITE", + "SYS_PDFORK", + "SYS_PDGETPID", + "SYS_PDKILL", + "SYS_PERF_EVENT_OPEN", + "SYS_PERSONALITY", + "SYS_PID_HIBERNATE", + "SYS_PID_RESUME", + "SYS_PID_SHUTDOWN_SOCKETS", + "SYS_PID_SUSPEND", + "SYS_PIPE", + "SYS_PIPE2", + "SYS_PIVOT_ROOT", + "SYS_PMC_CONTROL", + "SYS_PMC_GET_INFO", + "SYS_POLL", + "SYS_POLLTS", + "SYS_POLL_NOCANCEL", + "SYS_POSIX_FADVISE", + "SYS_POSIX_FALLOCATE", + "SYS_POSIX_OPENPT", + "SYS_POSIX_SPAWN", + "SYS_PPOLL", + "SYS_PRCTL", + "SYS_PREAD", + "SYS_PREAD64", + "SYS_PREADV", + "SYS_PREAD_NOCANCEL", + "SYS_PRLIMIT64", + "SYS_PROCCTL", + "SYS_PROCESS_POLICY", + "SYS_PROCESS_VM_READV", + "SYS_PROCESS_VM_WRITEV", + "SYS_PROC_INFO", + "SYS_PROF", + "SYS_PROFIL", + "SYS_PSELECT", + "SYS_PSELECT6", + "SYS_PSET_ASSIGN", + "SYS_PSET_CREATE", + "SYS_PSET_DESTROY", + "SYS_PSYNCH_CVBROAD", + "SYS_PSYNCH_CVCLRPREPOST", + "SYS_PSYNCH_CVSIGNAL", + "SYS_PSYNCH_CVWAIT", + "SYS_PSYNCH_MUTEXDROP", + "SYS_PSYNCH_MUTEXWAIT", + "SYS_PSYNCH_RW_DOWNGRADE", + "SYS_PSYNCH_RW_LONGRDLOCK", + "SYS_PSYNCH_RW_RDLOCK", + "SYS_PSYNCH_RW_UNLOCK", + "SYS_PSYNCH_RW_UNLOCK2", + "SYS_PSYNCH_RW_UPGRADE", + "SYS_PSYNCH_RW_WRLOCK", + "SYS_PSYNCH_RW_YIELDWRLOCK", + "SYS_PTRACE", + "SYS_PUTPMSG", + "SYS_PWRITE", + "SYS_PWRITE64", + "SYS_PWRITEV", + "SYS_PWRITE_NOCANCEL", + "SYS_QUERY_MODULE", + "SYS_QUOTACTL", + "SYS_RASCTL", + "SYS_RCTL_ADD_RULE", + "SYS_RCTL_GET_LIMITS", + "SYS_RCTL_GET_RACCT", + "SYS_RCTL_GET_RULES", + "SYS_RCTL_REMOVE_RULE", + "SYS_READ", + "SYS_READAHEAD", + "SYS_READDIR", + "SYS_READLINK", + "SYS_READLINKAT", + "SYS_READV", + "SYS_READV_NOCANCEL", + "SYS_READ_NOCANCEL", + "SYS_REBOOT", + "SYS_RECV", + "SYS_RECVFROM", + "SYS_RECVFROM_NOCANCEL", + "SYS_RECVMMSG", + "SYS_RECVMSG", + "SYS_RECVMSG_NOCANCEL", + "SYS_REMAP_FILE_PAGES", + "SYS_REMOVEXATTR", + "SYS_RENAME", + "SYS_RENAMEAT", + "SYS_REQUEST_KEY", + "SYS_RESTART_SYSCALL", + "SYS_REVOKE", + "SYS_RFORK", + "SYS_RMDIR", + "SYS_RTPRIO", + "SYS_RTPRIO_THREAD", + "SYS_RT_SIGACTION", + "SYS_RT_SIGPENDING", + "SYS_RT_SIGPROCMASK", + "SYS_RT_SIGQUEUEINFO", + "SYS_RT_SIGRETURN", + "SYS_RT_SIGSUSPEND", + "SYS_RT_SIGTIMEDWAIT", + "SYS_RT_TGSIGQUEUEINFO", + "SYS_SBRK", + "SYS_SCHED_GETAFFINITY", + "SYS_SCHED_GETPARAM", + "SYS_SCHED_GETSCHEDULER", + "SYS_SCHED_GET_PRIORITY_MAX", + "SYS_SCHED_GET_PRIORITY_MIN", + "SYS_SCHED_RR_GET_INTERVAL", + "SYS_SCHED_SETAFFINITY", + "SYS_SCHED_SETPARAM", + "SYS_SCHED_SETSCHEDULER", + "SYS_SCHED_YIELD", + "SYS_SCTP_GENERIC_RECVMSG", + "SYS_SCTP_GENERIC_SENDMSG", + "SYS_SCTP_GENERIC_SENDMSG_IOV", + "SYS_SCTP_PEELOFF", + "SYS_SEARCHFS", + "SYS_SECURITY", + "SYS_SELECT", + "SYS_SELECT_NOCANCEL", + "SYS_SEMCONFIG", + "SYS_SEMCTL", + "SYS_SEMGET", + "SYS_SEMOP", + "SYS_SEMSYS", + "SYS_SEMTIMEDOP", + "SYS_SEM_CLOSE", + "SYS_SEM_DESTROY", + "SYS_SEM_GETVALUE", + "SYS_SEM_INIT", + "SYS_SEM_OPEN", + "SYS_SEM_POST", + "SYS_SEM_TRYWAIT", + "SYS_SEM_UNLINK", + "SYS_SEM_WAIT", + "SYS_SEM_WAIT_NOCANCEL", + "SYS_SEND", + "SYS_SENDFILE", + "SYS_SENDFILE64", + "SYS_SENDMMSG", + "SYS_SENDMSG", + "SYS_SENDMSG_NOCANCEL", + "SYS_SENDTO", + "SYS_SENDTO_NOCANCEL", + "SYS_SETATTRLIST", + "SYS_SETAUDIT", + "SYS_SETAUDIT_ADDR", + "SYS_SETAUID", + "SYS_SETCONTEXT", + "SYS_SETDOMAINNAME", + "SYS_SETEGID", + "SYS_SETEUID", + "SYS_SETFIB", + "SYS_SETFSGID", + "SYS_SETFSGID32", + "SYS_SETFSUID", + "SYS_SETFSUID32", + "SYS_SETGID", + "SYS_SETGID32", + "SYS_SETGROUPS", + "SYS_SETGROUPS32", + "SYS_SETHOSTNAME", + "SYS_SETITIMER", + "SYS_SETLCID", + "SYS_SETLOGIN", + "SYS_SETLOGINCLASS", + "SYS_SETNS", + "SYS_SETPGID", + "SYS_SETPRIORITY", + "SYS_SETPRIVEXEC", + "SYS_SETREGID", + "SYS_SETREGID32", + "SYS_SETRESGID", + "SYS_SETRESGID32", + "SYS_SETRESUID", + "SYS_SETRESUID32", + "SYS_SETREUID", + "SYS_SETREUID32", + "SYS_SETRLIMIT", + "SYS_SETRTABLE", + "SYS_SETSGROUPS", + "SYS_SETSID", + "SYS_SETSOCKOPT", + "SYS_SETTID", + "SYS_SETTID_WITH_PID", + "SYS_SETTIMEOFDAY", + "SYS_SETUID", + "SYS_SETUID32", + "SYS_SETWGROUPS", + "SYS_SETXATTR", + "SYS_SET_MEMPOLICY", + "SYS_SET_ROBUST_LIST", + "SYS_SET_THREAD_AREA", + "SYS_SET_TID_ADDRESS", + "SYS_SGETMASK", + "SYS_SHARED_REGION_CHECK_NP", + "SYS_SHARED_REGION_MAP_AND_SLIDE_NP", + "SYS_SHMAT", + "SYS_SHMCTL", + "SYS_SHMDT", + "SYS_SHMGET", + "SYS_SHMSYS", + "SYS_SHM_OPEN", + "SYS_SHM_UNLINK", + "SYS_SHUTDOWN", + "SYS_SIGACTION", + "SYS_SIGALTSTACK", + "SYS_SIGNAL", + "SYS_SIGNALFD", + "SYS_SIGNALFD4", + "SYS_SIGPENDING", + "SYS_SIGPROCMASK", + "SYS_SIGQUEUE", + "SYS_SIGQUEUEINFO", + "SYS_SIGRETURN", + "SYS_SIGSUSPEND", + "SYS_SIGSUSPEND_NOCANCEL", + "SYS_SIGTIMEDWAIT", + "SYS_SIGWAIT", + "SYS_SIGWAITINFO", + "SYS_SOCKET", + "SYS_SOCKETCALL", + "SYS_SOCKETPAIR", + "SYS_SPLICE", + "SYS_SSETMASK", + "SYS_SSTK", + "SYS_STACK_SNAPSHOT", + "SYS_STAT", + "SYS_STAT64", + "SYS_STAT64_EXTENDED", + "SYS_STATFS", + "SYS_STATFS64", + "SYS_STATV", + "SYS_STATVFS1", + "SYS_STAT_EXTENDED", + "SYS_STIME", + "SYS_STTY", + "SYS_SWAPCONTEXT", + "SYS_SWAPCTL", + "SYS_SWAPOFF", + "SYS_SWAPON", + "SYS_SYMLINK", + "SYS_SYMLINKAT", + "SYS_SYNC", + "SYS_SYNCFS", + "SYS_SYNC_FILE_RANGE", + "SYS_SYSARCH", + "SYS_SYSCALL", + "SYS_SYSCALL_BASE", + "SYS_SYSFS", + "SYS_SYSINFO", + "SYS_SYSLOG", + "SYS_TEE", + "SYS_TGKILL", + "SYS_THREAD_SELFID", + "SYS_THR_CREATE", + "SYS_THR_EXIT", + "SYS_THR_KILL", + "SYS_THR_KILL2", + "SYS_THR_NEW", + "SYS_THR_SELF", + "SYS_THR_SET_NAME", + "SYS_THR_SUSPEND", + "SYS_THR_WAKE", + "SYS_TIME", + "SYS_TIMERFD_CREATE", + "SYS_TIMERFD_GETTIME", + "SYS_TIMERFD_SETTIME", + "SYS_TIMER_CREATE", + "SYS_TIMER_DELETE", + "SYS_TIMER_GETOVERRUN", + "SYS_TIMER_GETTIME", + "SYS_TIMER_SETTIME", + "SYS_TIMES", + "SYS_TKILL", + "SYS_TRUNCATE", + "SYS_TRUNCATE64", + "SYS_TUXCALL", + "SYS_UGETRLIMIT", + "SYS_ULIMIT", + "SYS_UMASK", + "SYS_UMASK_EXTENDED", + "SYS_UMOUNT", + "SYS_UMOUNT2", + "SYS_UNAME", + "SYS_UNDELETE", + "SYS_UNLINK", + "SYS_UNLINKAT", + "SYS_UNMOUNT", + "SYS_UNSHARE", + "SYS_USELIB", + "SYS_USTAT", + "SYS_UTIME", + "SYS_UTIMENSAT", + "SYS_UTIMES", + "SYS_UTRACE", + "SYS_UUIDGEN", + "SYS_VADVISE", + "SYS_VFORK", + "SYS_VHANGUP", + "SYS_VM86", + "SYS_VM86OLD", + "SYS_VMSPLICE", + "SYS_VM_PRESSURE_MONITOR", + "SYS_VSERVER", + "SYS_WAIT4", + "SYS_WAIT4_NOCANCEL", + "SYS_WAIT6", + "SYS_WAITEVENT", + "SYS_WAITID", + "SYS_WAITID_NOCANCEL", + "SYS_WAITPID", + "SYS_WATCHEVENT", + "SYS_WORKQ_KERNRETURN", + "SYS_WORKQ_OPEN", + "SYS_WRITE", + "SYS_WRITEV", + "SYS_WRITEV_NOCANCEL", + "SYS_WRITE_NOCANCEL", + "SYS_YIELD", + "SYS__LLSEEK", + "SYS__LWP_CONTINUE", + "SYS__LWP_CREATE", + "SYS__LWP_CTL", + "SYS__LWP_DETACH", + "SYS__LWP_EXIT", + "SYS__LWP_GETNAME", + "SYS__LWP_GETPRIVATE", + "SYS__LWP_KILL", + "SYS__LWP_PARK", + "SYS__LWP_SELF", + "SYS__LWP_SETNAME", + "SYS__LWP_SETPRIVATE", + "SYS__LWP_SUSPEND", + "SYS__LWP_UNPARK", + "SYS__LWP_UNPARK_ALL", + "SYS__LWP_WAIT", + "SYS__LWP_WAKEUP", + "SYS__NEWSELECT", + "SYS__PSET_BIND", + "SYS__SCHED_GETAFFINITY", + "SYS__SCHED_GETPARAM", + "SYS__SCHED_SETAFFINITY", + "SYS__SCHED_SETPARAM", + "SYS__SYSCTL", + "SYS__UMTX_LOCK", + "SYS__UMTX_OP", + "SYS__UMTX_UNLOCK", + "SYS___ACL_ACLCHECK_FD", + "SYS___ACL_ACLCHECK_FILE", + "SYS___ACL_ACLCHECK_LINK", + "SYS___ACL_DELETE_FD", + "SYS___ACL_DELETE_FILE", + "SYS___ACL_DELETE_LINK", + "SYS___ACL_GET_FD", + "SYS___ACL_GET_FILE", + "SYS___ACL_GET_LINK", + "SYS___ACL_SET_FD", + "SYS___ACL_SET_FILE", + "SYS___ACL_SET_LINK", + "SYS___CLONE", + "SYS___DISABLE_THREADSIGNAL", + "SYS___GETCWD", + "SYS___GETLOGIN", + "SYS___GET_TCB", + "SYS___MAC_EXECVE", + "SYS___MAC_GETFSSTAT", + "SYS___MAC_GET_FD", + "SYS___MAC_GET_FILE", + "SYS___MAC_GET_LCID", + "SYS___MAC_GET_LCTX", + "SYS___MAC_GET_LINK", + "SYS___MAC_GET_MOUNT", + "SYS___MAC_GET_PID", + "SYS___MAC_GET_PROC", + "SYS___MAC_MOUNT", + "SYS___MAC_SET_FD", + "SYS___MAC_SET_FILE", + "SYS___MAC_SET_LCTX", + "SYS___MAC_SET_LINK", + "SYS___MAC_SET_PROC", + "SYS___MAC_SYSCALL", + "SYS___OLD_SEMWAIT_SIGNAL", + "SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL", + "SYS___POSIX_CHOWN", + "SYS___POSIX_FCHOWN", + "SYS___POSIX_LCHOWN", + "SYS___POSIX_RENAME", + "SYS___PTHREAD_CANCELED", + "SYS___PTHREAD_CHDIR", + "SYS___PTHREAD_FCHDIR", + "SYS___PTHREAD_KILL", + "SYS___PTHREAD_MARKCANCEL", + "SYS___PTHREAD_SIGMASK", + "SYS___QUOTACTL", + "SYS___SEMCTL", + "SYS___SEMWAIT_SIGNAL", + "SYS___SEMWAIT_SIGNAL_NOCANCEL", + "SYS___SETLOGIN", + "SYS___SETUGID", + "SYS___SET_TCB", + "SYS___SIGACTION_SIGTRAMP", + "SYS___SIGTIMEDWAIT", + "SYS___SIGWAIT", + "SYS___SIGWAIT_NOCANCEL", + "SYS___SYSCTL", + "SYS___TFORK", + "SYS___THREXIT", + "SYS___THRSIGDIVERT", + "SYS___THRSLEEP", + "SYS___THRWAKEUP", + "S_ARCH1", + "S_ARCH2", + "S_BLKSIZE", + "S_IEXEC", + "S_IFBLK", + "S_IFCHR", + "S_IFDIR", + "S_IFIFO", + "S_IFLNK", + "S_IFMT", + "S_IFREG", + "S_IFSOCK", + "S_IFWHT", + "S_IREAD", + "S_IRGRP", + "S_IROTH", + "S_IRUSR", + "S_IRWXG", + "S_IRWXO", + "S_IRWXU", + "S_ISGID", + "S_ISTXT", + "S_ISUID", + "S_ISVTX", + "S_IWGRP", + "S_IWOTH", + "S_IWRITE", + "S_IWUSR", + "S_IXGRP", + "S_IXOTH", + "S_IXUSR", + "S_LOGIN_SET", + "SecurityAttributes", + "Seek", + "Select", + "Sendfile", + "Sendmsg", + "SendmsgN", + "Sendto", + "Servent", + "SetBpf", + "SetBpfBuflen", + "SetBpfDatalink", + "SetBpfHeadercmpl", + "SetBpfImmediate", + "SetBpfInterface", + "SetBpfPromisc", + "SetBpfTimeout", + "SetCurrentDirectory", + "SetEndOfFile", + "SetEnvironmentVariable", + "SetFileAttributes", + "SetFileCompletionNotificationModes", + "SetFilePointer", + "SetFileTime", + "SetHandleInformation", + "SetKevent", + "SetLsfPromisc", + "SetNonblock", + "Setdomainname", + "Setegid", + "Setenv", + "Seteuid", + "Setfsgid", + "Setfsuid", + "Setgid", + "Setgroups", + "Sethostname", + "Setlogin", + "Setpgid", + "Setpriority", + "Setprivexec", + "Setregid", + "Setresgid", + "Setresuid", + "Setreuid", + "Setrlimit", + "Setsid", + "Setsockopt", + "SetsockoptByte", + "SetsockoptICMPv6Filter", + "SetsockoptIPMreq", + "SetsockoptIPMreqn", + "SetsockoptIPv6Mreq", + "SetsockoptInet4Addr", + "SetsockoptInt", + "SetsockoptLinger", + "SetsockoptString", + "SetsockoptTimeval", + "Settimeofday", + "Setuid", + "Setxattr", + "Shutdown", + "SidTypeAlias", + "SidTypeComputer", + "SidTypeDeletedAccount", + "SidTypeDomain", + "SidTypeGroup", + "SidTypeInvalid", + "SidTypeLabel", + "SidTypeUnknown", + "SidTypeUser", + "SidTypeWellKnownGroup", + "Signal", + "SizeofBpfHdr", + "SizeofBpfInsn", + "SizeofBpfProgram", + "SizeofBpfStat", + "SizeofBpfVersion", + "SizeofBpfZbuf", + "SizeofBpfZbufHeader", + "SizeofCmsghdr", + "SizeofICMPv6Filter", + "SizeofIPMreq", + "SizeofIPMreqn", + "SizeofIPv6MTUInfo", + "SizeofIPv6Mreq", + "SizeofIfAddrmsg", + "SizeofIfAnnounceMsghdr", + "SizeofIfData", + "SizeofIfInfomsg", + "SizeofIfMsghdr", + "SizeofIfaMsghdr", + "SizeofIfmaMsghdr", + "SizeofIfmaMsghdr2", + "SizeofInet4Pktinfo", + "SizeofInet6Pktinfo", + "SizeofInotifyEvent", + "SizeofLinger", + "SizeofMsghdr", + "SizeofNlAttr", + "SizeofNlMsgerr", + "SizeofNlMsghdr", + "SizeofRtAttr", + "SizeofRtGenmsg", + "SizeofRtMetrics", + "SizeofRtMsg", + "SizeofRtMsghdr", + "SizeofRtNexthop", + "SizeofSockFilter", + "SizeofSockFprog", + "SizeofSockaddrAny", + "SizeofSockaddrDatalink", + "SizeofSockaddrInet4", + "SizeofSockaddrInet6", + "SizeofSockaddrLinklayer", + "SizeofSockaddrNetlink", + "SizeofSockaddrUnix", + "SizeofTCPInfo", + "SizeofUcred", + "SlicePtrFromStrings", + "SockFilter", + "SockFprog", + "Sockaddr", + "SockaddrDatalink", + "SockaddrGen", + "SockaddrInet4", + "SockaddrInet6", + "SockaddrLinklayer", + "SockaddrNetlink", + "SockaddrUnix", + "Socket", + "SocketControlMessage", + "SocketDisableIPv6", + "Socketpair", + "Splice", + "StartProcess", + "StartupInfo", + "Stat", + "Stat_t", + "Statfs", + "Statfs_t", + "Stderr", + "Stdin", + "Stdout", + "StringBytePtr", + "StringByteSlice", + "StringSlicePtr", + "StringToSid", + "StringToUTF16", + "StringToUTF16Ptr", + "Symlink", + "Sync", + "SyncFileRange", + "SysProcAttr", + "SysProcIDMap", + "Syscall", + "Syscall12", + "Syscall15", + "Syscall18", + "Syscall6", + "Syscall9", + "SyscallN", + "Sysctl", + "SysctlUint32", + "Sysctlnode", + "Sysinfo", + "Sysinfo_t", + "Systemtime", + "TCGETS", + "TCIFLUSH", + "TCIOFLUSH", + "TCOFLUSH", + "TCPInfo", + "TCPKeepalive", + "TCP_CA_NAME_MAX", + "TCP_CONGCTL", + "TCP_CONGESTION", + "TCP_CONNECTIONTIMEOUT", + "TCP_CORK", + "TCP_DEFER_ACCEPT", + "TCP_ENABLE_ECN", + "TCP_INFO", + "TCP_KEEPALIVE", + "TCP_KEEPCNT", + "TCP_KEEPIDLE", + "TCP_KEEPINIT", + "TCP_KEEPINTVL", + "TCP_LINGER2", + "TCP_MAXBURST", + "TCP_MAXHLEN", + "TCP_MAXOLEN", + "TCP_MAXSEG", + "TCP_MAXWIN", + "TCP_MAX_SACK", + "TCP_MAX_WINSHIFT", + "TCP_MD5SIG", + "TCP_MD5SIG_MAXKEYLEN", + "TCP_MINMSS", + "TCP_MINMSSOVERLOAD", + "TCP_MSS", + "TCP_NODELAY", + "TCP_NOOPT", + "TCP_NOPUSH", + "TCP_NOTSENT_LOWAT", + "TCP_NSTATES", + "TCP_QUICKACK", + "TCP_RXT_CONNDROPTIME", + "TCP_RXT_FINDROP", + "TCP_SACK_ENABLE", + "TCP_SENDMOREACKS", + "TCP_SYNCNT", + "TCP_VENDOR", + "TCP_WINDOW_CLAMP", + "TCSAFLUSH", + "TCSETS", + "TF_DISCONNECT", + "TF_REUSE_SOCKET", + "TF_USE_DEFAULT_WORKER", + "TF_USE_KERNEL_APC", + "TF_USE_SYSTEM_THREAD", + "TF_WRITE_BEHIND", + "TH32CS_INHERIT", + "TH32CS_SNAPALL", + "TH32CS_SNAPHEAPLIST", + "TH32CS_SNAPMODULE", + "TH32CS_SNAPMODULE32", + "TH32CS_SNAPPROCESS", + "TH32CS_SNAPTHREAD", + "TIME_ZONE_ID_DAYLIGHT", + "TIME_ZONE_ID_STANDARD", + "TIME_ZONE_ID_UNKNOWN", + "TIOCCBRK", + "TIOCCDTR", + "TIOCCONS", + "TIOCDCDTIMESTAMP", + "TIOCDRAIN", + "TIOCDSIMICROCODE", + "TIOCEXCL", + "TIOCEXT", + "TIOCFLAG_CDTRCTS", + "TIOCFLAG_CLOCAL", + "TIOCFLAG_CRTSCTS", + "TIOCFLAG_MDMBUF", + "TIOCFLAG_PPS", + "TIOCFLAG_SOFTCAR", + "TIOCFLUSH", + "TIOCGDEV", + "TIOCGDRAINWAIT", + "TIOCGETA", + "TIOCGETD", + "TIOCGFLAGS", + "TIOCGICOUNT", + "TIOCGLCKTRMIOS", + "TIOCGLINED", + "TIOCGPGRP", + "TIOCGPTN", + "TIOCGQSIZE", + "TIOCGRANTPT", + "TIOCGRS485", + "TIOCGSERIAL", + "TIOCGSID", + "TIOCGSIZE", + "TIOCGSOFTCAR", + "TIOCGTSTAMP", + "TIOCGWINSZ", + "TIOCINQ", + "TIOCIXOFF", + "TIOCIXON", + "TIOCLINUX", + "TIOCMBIC", + "TIOCMBIS", + "TIOCMGDTRWAIT", + "TIOCMGET", + "TIOCMIWAIT", + "TIOCMODG", + "TIOCMODS", + "TIOCMSDTRWAIT", + "TIOCMSET", + "TIOCM_CAR", + "TIOCM_CD", + "TIOCM_CTS", + "TIOCM_DCD", + "TIOCM_DSR", + "TIOCM_DTR", + "TIOCM_LE", + "TIOCM_RI", + "TIOCM_RNG", + "TIOCM_RTS", + "TIOCM_SR", + "TIOCM_ST", + "TIOCNOTTY", + "TIOCNXCL", + "TIOCOUTQ", + "TIOCPKT", + "TIOCPKT_DATA", + "TIOCPKT_DOSTOP", + "TIOCPKT_FLUSHREAD", + "TIOCPKT_FLUSHWRITE", + "TIOCPKT_IOCTL", + "TIOCPKT_NOSTOP", + "TIOCPKT_START", + "TIOCPKT_STOP", + "TIOCPTMASTER", + "TIOCPTMGET", + "TIOCPTSNAME", + "TIOCPTYGNAME", + "TIOCPTYGRANT", + "TIOCPTYUNLK", + "TIOCRCVFRAME", + "TIOCREMOTE", + "TIOCSBRK", + "TIOCSCONS", + "TIOCSCTTY", + "TIOCSDRAINWAIT", + "TIOCSDTR", + "TIOCSERCONFIG", + "TIOCSERGETLSR", + "TIOCSERGETMULTI", + "TIOCSERGSTRUCT", + "TIOCSERGWILD", + "TIOCSERSETMULTI", + "TIOCSERSWILD", + "TIOCSER_TEMT", + "TIOCSETA", + "TIOCSETAF", + "TIOCSETAW", + "TIOCSETD", + "TIOCSFLAGS", + "TIOCSIG", + "TIOCSLCKTRMIOS", + "TIOCSLINED", + "TIOCSPGRP", + "TIOCSPTLCK", + "TIOCSQSIZE", + "TIOCSRS485", + "TIOCSSERIAL", + "TIOCSSIZE", + "TIOCSSOFTCAR", + "TIOCSTART", + "TIOCSTAT", + "TIOCSTI", + "TIOCSTOP", + "TIOCSTSTAMP", + "TIOCSWINSZ", + "TIOCTIMESTAMP", + "TIOCUCNTL", + "TIOCVHANGUP", + "TIOCXMTFRAME", + "TOKEN_ADJUST_DEFAULT", + "TOKEN_ADJUST_GROUPS", + "TOKEN_ADJUST_PRIVILEGES", + "TOKEN_ADJUST_SESSIONID", + "TOKEN_ALL_ACCESS", + "TOKEN_ASSIGN_PRIMARY", + "TOKEN_DUPLICATE", + "TOKEN_EXECUTE", + "TOKEN_IMPERSONATE", + "TOKEN_QUERY", + "TOKEN_QUERY_SOURCE", + "TOKEN_READ", + "TOKEN_WRITE", + "TOSTOP", + "TRUNCATE_EXISTING", + "TUNATTACHFILTER", + "TUNDETACHFILTER", + "TUNGETFEATURES", + "TUNGETIFF", + "TUNGETSNDBUF", + "TUNGETVNETHDRSZ", + "TUNSETDEBUG", + "TUNSETGROUP", + "TUNSETIFF", + "TUNSETLINK", + "TUNSETNOCSUM", + "TUNSETOFFLOAD", + "TUNSETOWNER", + "TUNSETPERSIST", + "TUNSETSNDBUF", + "TUNSETTXFILTER", + "TUNSETVNETHDRSZ", + "Tee", + "TerminateProcess", + "Termios", + "Tgkill", + "Time", + "Time_t", + "Times", + "Timespec", + "TimespecToNsec", + "Timeval", + "Timeval32", + "TimevalToNsec", + "Timex", + "Timezoneinformation", + "Tms", + "Token", + "TokenAccessInformation", + "TokenAuditPolicy", + "TokenDefaultDacl", + "TokenElevation", + "TokenElevationType", + "TokenGroups", + "TokenGroupsAndPrivileges", + "TokenHasRestrictions", + "TokenImpersonationLevel", + "TokenIntegrityLevel", + "TokenLinkedToken", + "TokenLogonSid", + "TokenMandatoryPolicy", + "TokenOrigin", + "TokenOwner", + "TokenPrimaryGroup", + "TokenPrivileges", + "TokenRestrictedSids", + "TokenSandBoxInert", + "TokenSessionId", + "TokenSessionReference", + "TokenSource", + "TokenStatistics", + "TokenType", + "TokenUIAccess", + "TokenUser", + "TokenVirtualizationAllowed", + "TokenVirtualizationEnabled", + "Tokenprimarygroup", + "Tokenuser", + "TranslateAccountName", + "TranslateName", + "TransmitFile", + "TransmitFileBuffers", + "Truncate", + "UNIX_PATH_MAX", + "USAGE_MATCH_TYPE_AND", + "USAGE_MATCH_TYPE_OR", + "UTF16FromString", + "UTF16PtrFromString", + "UTF16ToString", + "Ucred", + "Umask", + "Uname", + "Undelete", + "UnixCredentials", + "UnixRights", + "Unlink", + "Unlinkat", + "UnmapViewOfFile", + "Unmount", + "Unsetenv", + "Unshare", + "UserInfo10", + "Ustat", + "Ustat_t", + "Utimbuf", + "Utime", + "Utimes", + "UtimesNano", + "Utsname", + "VDISCARD", + "VDSUSP", + "VEOF", + "VEOL", + "VEOL2", + "VERASE", + "VERASE2", + "VINTR", + "VKILL", + "VLNEXT", + "VMIN", + "VQUIT", + "VREPRINT", + "VSTART", + "VSTATUS", + "VSTOP", + "VSUSP", + "VSWTC", + "VT0", + "VT1", + "VTDLY", + "VTIME", + "VWERASE", + "VirtualLock", + "VirtualUnlock", + "WAIT_ABANDONED", + "WAIT_FAILED", + "WAIT_OBJECT_0", + "WAIT_TIMEOUT", + "WALL", + "WALLSIG", + "WALTSIG", + "WCLONE", + "WCONTINUED", + "WCOREFLAG", + "WEXITED", + "WLINUXCLONE", + "WNOHANG", + "WNOTHREAD", + "WNOWAIT", + "WNOZOMBIE", + "WOPTSCHECKED", + "WORDSIZE", + "WSABuf", + "WSACleanup", + "WSADESCRIPTION_LEN", + "WSAData", + "WSAEACCES", + "WSAECONNABORTED", + "WSAECONNRESET", + "WSAEnumProtocols", + "WSAID_CONNECTEX", + "WSAIoctl", + "WSAPROTOCOL_LEN", + "WSAProtocolChain", + "WSAProtocolInfo", + "WSARecv", + "WSARecvFrom", + "WSASYS_STATUS_LEN", + "WSASend", + "WSASendTo", + "WSASendto", + "WSAStartup", + "WSTOPPED", + "WTRAPPED", + "WUNTRACED", + "Wait4", + "WaitForSingleObject", + "WaitStatus", + "Win32FileAttributeData", + "Win32finddata", + "Write", + "WriteConsole", + "WriteFile", + "X509_ASN_ENCODING", + "XCASE", + "XP1_CONNECTIONLESS", + "XP1_CONNECT_DATA", + "XP1_DISCONNECT_DATA", + "XP1_EXPEDITED_DATA", + "XP1_GRACEFUL_CLOSE", + "XP1_GUARANTEED_DELIVERY", + "XP1_GUARANTEED_ORDER", + "XP1_IFS_HANDLES", + "XP1_MESSAGE_ORIENTED", + "XP1_MULTIPOINT_CONTROL_PLANE", + "XP1_MULTIPOINT_DATA_PLANE", + "XP1_PARTIAL_MESSAGE", + "XP1_PSEUDO_STREAM", + "XP1_QOS_SUPPORTED", + "XP1_SAN_SUPPORT_SDP", + "XP1_SUPPORT_BROADCAST", + "XP1_SUPPORT_MULTIPOINT", + "XP1_UNI_RECV", + "XP1_UNI_SEND", + }, + "syscall/js": { + "CopyBytesToGo", + "CopyBytesToJS", + "Error", + "Func", + "FuncOf", + "Global", + "Null", + "Type", + "TypeBoolean", + "TypeFunction", + "TypeNull", + "TypeNumber", + "TypeObject", + "TypeString", + "TypeSymbol", + "TypeUndefined", + "Undefined", + "Value", + "ValueError", + "ValueOf", + }, + "testing": { + "AllocsPerRun", + "B", + "Benchmark", + "BenchmarkResult", + "Cover", + "CoverBlock", + "CoverMode", + "Coverage", + "F", + "Init", + "InternalBenchmark", + "InternalExample", + "InternalFuzzTarget", + "InternalTest", + "M", + "Main", + "MainStart", + "PB", + "RegisterCover", + "RunBenchmarks", + "RunExamples", + "RunTests", + "Short", + "T", + "TB", + "Verbose", + }, + "testing/fstest": { + "MapFS", + "MapFile", + "TestFS", + }, + "testing/iotest": { + "DataErrReader", + "ErrReader", + "ErrTimeout", + "HalfReader", + "NewReadLogger", + "NewWriteLogger", + "OneByteReader", + "TestReader", + "TimeoutReader", + "TruncateWriter", + }, + "testing/quick": { + "Check", + "CheckEqual", + "CheckEqualError", + "CheckError", + "Config", + "Generator", + "SetupError", + "Value", + }, + "text/scanner": { + "Char", + "Comment", + "EOF", + "Float", + "GoTokens", + "GoWhitespace", + "Ident", + "Int", + "Position", + "RawString", + "ScanChars", + "ScanComments", + "ScanFloats", + "ScanIdents", + "ScanInts", + "ScanRawStrings", + "ScanStrings", + "Scanner", + "SkipComments", + "String", + "TokenString", + }, + "text/tabwriter": { + "AlignRight", + "Debug", + "DiscardEmptyColumns", + "Escape", + "FilterHTML", + "NewWriter", + "StripEscape", + "TabIndent", + "Writer", + }, + "text/template": { + "ExecError", + "FuncMap", + "HTMLEscape", + "HTMLEscapeString", + "HTMLEscaper", + "IsTrue", + "JSEscape", + "JSEscapeString", + "JSEscaper", + "Must", + "New", + "ParseFS", + "ParseFiles", + "ParseGlob", + "Template", + "URLQueryEscaper", + }, + "text/template/parse": { + "ActionNode", + "BoolNode", + "BranchNode", + "BreakNode", + "ChainNode", + "CommandNode", + "CommentNode", + "ContinueNode", + "DotNode", + "FieldNode", + "IdentifierNode", + "IfNode", + "IsEmptyTree", + "ListNode", + "Mode", + "New", + "NewIdentifier", + "NilNode", + "Node", + "NodeAction", + "NodeBool", + "NodeBreak", + "NodeChain", + "NodeCommand", + "NodeComment", + "NodeContinue", + "NodeDot", + "NodeField", + "NodeIdentifier", + "NodeIf", + "NodeList", + "NodeNil", + "NodeNumber", + "NodePipe", + "NodeRange", + "NodeString", + "NodeTemplate", + "NodeText", + "NodeType", + "NodeVariable", + "NodeWith", + "NumberNode", + "Parse", + "ParseComments", + "PipeNode", + "Pos", + "RangeNode", + "SkipFuncCheck", + "StringNode", + "TemplateNode", + "TextNode", + "Tree", + "VariableNode", + "WithNode", + }, + "time": { + "ANSIC", + "After", + "AfterFunc", + "April", + "August", + "Date", + "DateOnly", + "DateTime", + "December", + "Duration", + "February", + "FixedZone", + "Friday", + "Hour", + "January", + "July", + "June", + "Kitchen", + "Layout", + "LoadLocation", + "LoadLocationFromTZData", + "Local", + "Location", + "March", + "May", + "Microsecond", + "Millisecond", + "Minute", + "Monday", + "Month", + "Nanosecond", + "NewTicker", + "NewTimer", + "November", + "Now", + "October", + "Parse", + "ParseDuration", + "ParseError", + "ParseInLocation", + "RFC1123", + "RFC1123Z", + "RFC3339", + "RFC3339Nano", + "RFC822", + "RFC822Z", + "RFC850", + "RubyDate", + "Saturday", + "Second", + "September", + "Since", + "Sleep", + "Stamp", + "StampMicro", + "StampMilli", + "StampNano", + "Sunday", + "Thursday", + "Tick", + "Ticker", + "Time", + "TimeOnly", + "Timer", + "Tuesday", + "UTC", + "Unix", + "UnixDate", + "UnixMicro", + "UnixMilli", + "Until", + "Wednesday", + "Weekday", + }, + "unicode": { + "ASCII_Hex_Digit", + "Adlam", + "Ahom", + "Anatolian_Hieroglyphs", + "Arabic", + "Armenian", + "Avestan", + "AzeriCase", + "Balinese", + "Bamum", + "Bassa_Vah", + "Batak", + "Bengali", + "Bhaiksuki", + "Bidi_Control", + "Bopomofo", + "Brahmi", + "Braille", + "Buginese", + "Buhid", + "C", + "Canadian_Aboriginal", + "Carian", + "CaseRange", + "CaseRanges", + "Categories", + "Caucasian_Albanian", + "Cc", + "Cf", + "Chakma", + "Cham", + "Cherokee", + "Chorasmian", + "Co", + "Common", + "Coptic", + "Cs", + "Cuneiform", + "Cypriot", + "Cyrillic", + "Dash", + "Deprecated", + "Deseret", + "Devanagari", + "Diacritic", + "Digit", + "Dives_Akuru", + "Dogra", + "Duployan", + "Egyptian_Hieroglyphs", + "Elbasan", + "Elymaic", + "Ethiopic", + "Extender", + "FoldCategory", + "FoldScript", + "Georgian", + "Glagolitic", + "Gothic", + "Grantha", + "GraphicRanges", + "Greek", + "Gujarati", + "Gunjala_Gondi", + "Gurmukhi", + "Han", + "Hangul", + "Hanifi_Rohingya", + "Hanunoo", + "Hatran", + "Hebrew", + "Hex_Digit", + "Hiragana", + "Hyphen", + "IDS_Binary_Operator", + "IDS_Trinary_Operator", + "Ideographic", + "Imperial_Aramaic", + "In", + "Inherited", + "Inscriptional_Pahlavi", + "Inscriptional_Parthian", + "Is", + "IsControl", + "IsDigit", + "IsGraphic", + "IsLetter", + "IsLower", + "IsMark", + "IsNumber", + "IsOneOf", + "IsPrint", + "IsPunct", + "IsSpace", + "IsSymbol", + "IsTitle", + "IsUpper", + "Javanese", + "Join_Control", + "Kaithi", + "Kannada", + "Katakana", + "Kayah_Li", + "Kharoshthi", + "Khitan_Small_Script", + "Khmer", + "Khojki", + "Khudawadi", + "L", + "Lao", + "Latin", + "Lepcha", + "Letter", + "Limbu", + "Linear_A", + "Linear_B", + "Lisu", + "Ll", + "Lm", + "Lo", + "Logical_Order_Exception", + "Lower", + "LowerCase", + "Lt", + "Lu", + "Lycian", + "Lydian", + "M", + "Mahajani", + "Makasar", + "Malayalam", + "Mandaic", + "Manichaean", + "Marchen", + "Mark", + "Masaram_Gondi", + "MaxASCII", + "MaxCase", + "MaxLatin1", + "MaxRune", + "Mc", + "Me", + "Medefaidrin", + "Meetei_Mayek", + "Mende_Kikakui", + "Meroitic_Cursive", + "Meroitic_Hieroglyphs", + "Miao", + "Mn", + "Modi", + "Mongolian", + "Mro", + "Multani", + "Myanmar", + "N", + "Nabataean", + "Nandinagari", + "Nd", + "New_Tai_Lue", + "Newa", + "Nko", + "Nl", + "No", + "Noncharacter_Code_Point", + "Number", + "Nushu", + "Nyiakeng_Puachue_Hmong", + "Ogham", + "Ol_Chiki", + "Old_Hungarian", + "Old_Italic", + "Old_North_Arabian", + "Old_Permic", + "Old_Persian", + "Old_Sogdian", + "Old_South_Arabian", + "Old_Turkic", + "Oriya", + "Osage", + "Osmanya", + "Other", + "Other_Alphabetic", + "Other_Default_Ignorable_Code_Point", + "Other_Grapheme_Extend", + "Other_ID_Continue", + "Other_ID_Start", + "Other_Lowercase", + "Other_Math", + "Other_Uppercase", + "P", + "Pahawh_Hmong", + "Palmyrene", + "Pattern_Syntax", + "Pattern_White_Space", + "Pau_Cin_Hau", + "Pc", + "Pd", + "Pe", + "Pf", + "Phags_Pa", + "Phoenician", + "Pi", + "Po", + "Prepended_Concatenation_Mark", + "PrintRanges", + "Properties", + "Ps", + "Psalter_Pahlavi", + "Punct", + "Quotation_Mark", + "Radical", + "Range16", + "Range32", + "RangeTable", + "Regional_Indicator", + "Rejang", + "ReplacementChar", + "Runic", + "S", + "STerm", + "Samaritan", + "Saurashtra", + "Sc", + "Scripts", + "Sentence_Terminal", + "Sharada", + "Shavian", + "Siddham", + "SignWriting", + "SimpleFold", + "Sinhala", + "Sk", + "Sm", + "So", + "Soft_Dotted", + "Sogdian", + "Sora_Sompeng", + "Soyombo", + "Space", + "SpecialCase", + "Sundanese", + "Syloti_Nagri", + "Symbol", + "Syriac", + "Tagalog", + "Tagbanwa", + "Tai_Le", + "Tai_Tham", + "Tai_Viet", + "Takri", + "Tamil", + "Tangut", + "Telugu", + "Terminal_Punctuation", + "Thaana", + "Thai", + "Tibetan", + "Tifinagh", + "Tirhuta", + "Title", + "TitleCase", + "To", + "ToLower", + "ToTitle", + "ToUpper", + "TurkishCase", + "Ugaritic", + "Unified_Ideograph", + "Upper", + "UpperCase", + "UpperLower", + "Vai", + "Variation_Selector", + "Version", + "Wancho", + "Warang_Citi", + "White_Space", + "Yezidi", + "Yi", + "Z", + "Zanabazar_Square", + "Zl", + "Zp", + "Zs", + }, + "unicode/utf16": { + "AppendRune", + "Decode", + "DecodeRune", + "Encode", + "EncodeRune", + "IsSurrogate", + }, + "unicode/utf8": { + "AppendRune", + "DecodeLastRune", + "DecodeLastRuneInString", + "DecodeRune", + "DecodeRuneInString", + "EncodeRune", + "FullRune", + "FullRuneInString", + "MaxRune", + "RuneCount", + "RuneCountInString", + "RuneError", + "RuneLen", + "RuneSelf", + "RuneStart", + "UTFMax", + "Valid", + "ValidRune", + "ValidString", + }, + "unsafe": { + "Add", + "Alignof", + "Offsetof", + "Pointer", + "Sizeof", + "Slice", + "SliceData", + "String", + "StringData", + }, +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/CONTRIBUTING.md b/cluster-autoscaler/vendor/k8s.io/code-generator/CONTRIBUTING.md new file mode 100644 index 000000000000..76625b7bc9e1 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing guidelines + +Do not open pull requests directly against this repository, they will be ignored. Instead, please open pull requests against [kubernetes/kubernetes](https://git.k8s.io/kubernetes/). Please follow the same [contributing guide](https://git.k8s.io/kubernetes/CONTRIBUTING.md) you would follow for any other pull request made to kubernetes/kubernetes. + +This repository is published from [kubernetes/kubernetes/staging/src/k8s.io/code-generator](https://git.k8s.io/kubernetes/staging/src/k8s.io/code-generator) by the [kubernetes publishing-bot](https://git.k8s.io/publishing-bot). + +Please see [Staging Directory and Publishing](https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md) for more information diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/LICENSE b/cluster-autoscaler/vendor/k8s.io/code-generator/LICENSE new file mode 100644 index 000000000000..d64569567334 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/OWNERS b/cluster-autoscaler/vendor/k8s.io/code-generator/OWNERS new file mode 100644 index 000000000000..3b87391c29e5 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/OWNERS @@ -0,0 +1,15 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: + - deads2k + - wojtek-t + - sttts +reviewers: + - deads2k + - wojtek-t + - sttts +labels: + - sig/api-machinery + - area/code-generation +emeritus_approvers: + - lavalamp diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/README.md b/cluster-autoscaler/vendor/k8s.io/code-generator/README.md new file mode 100644 index 000000000000..122868a5c63e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/README.md @@ -0,0 +1,25 @@ +# code-generator + +Golang code-generators used to implement [Kubernetes-style API types](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md). + +## Purpose + +These code-generators can be used +- in the context of [CustomResourceDefinition](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/) to build native, versioned clients, + informers and other helpers +- in the context of [User-provider API Servers](https://github.com/kubernetes/apiserver) to build conversions between internal and versioned types, defaulters, protobuf codecs, + internal and versioned clients and informers. + +## Resources +- The example [sample controller](https://github.com/kubernetes/sample-controller) shows a code example of a controller that uses the clients, listers and informers generated by this library. +- The article [Kubernetes Deep Dive: Code Generation for CustomResources](https://cloud.redhat.com/blog/kubernetes-deep-dive-code-generation-customresources/) gives a step by step instruction on how to use this library. + +## Compatibility + +HEAD of this repo will match HEAD of k8s.io/apiserver, k8s.io/apimachinery, and k8s.io/client-go. + +## Where does it come from? + +`code-generator` is synced from https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/code-generator. +Code changes are made in that location, merged into `k8s.io/kubernetes` and later synced here. + diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/SECURITY_CONTACTS b/cluster-autoscaler/vendor/k8s.io/code-generator/SECURITY_CONTACTS new file mode 100644 index 000000000000..f6003980fccc --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/SECURITY_CONTACTS @@ -0,0 +1,16 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Committee to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +cheftako +deads2k +lavalamp +sttts diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/args.go new file mode 100644 index 000000000000..78f364841f22 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/args.go @@ -0,0 +1,81 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + "path" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" + "k8s.io/gengo/types" + + codegenutil "k8s.io/code-generator/pkg/util" +) + +// CustomArgs is a wrapper for arguments to applyconfiguration-gen. +type CustomArgs struct { + // ExternalApplyConfigurations provides the locations of externally generated + // apply configuration types for types referenced by the go structs provided as input. + // Locations are provided as a comma separated list of .: + // entries. + // + // E.g. if a type references appsv1.Deployment, the location of its apply configuration should + // be provided: + // k8s.io/api/apps/v1.Deployment:k8s.io/client-go/applyconfigurations/apps/v1 + // + // meta/v1 types (TypeMeta and ObjectMeta) are always included and do not need to be passed in. + ExternalApplyConfigurations map[types.Name]string + + OpenAPISchemaFilePath string +} + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{ + ExternalApplyConfigurations: map[types.Name]string{ + // Always include TypeMeta and ObjectMeta. They are sufficient for the vast majority of use cases. + {Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "TypeMeta"}: "k8s.io/client-go/applyconfigurations/meta/v1", + {Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ObjectMeta"}: "k8s.io/client-go/applyconfigurations/meta/v1", + {Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "OwnerReference"}: "k8s.io/client-go/applyconfigurations/meta/v1", + }, + } + genericArgs.CustomArgs = customArgs + + if pkg := codegenutil.CurrentPackage(); len(pkg) != 0 { + genericArgs.OutputPackagePath = path.Join(pkg, "pkg/client/applyconfigurations") + } + + return genericArgs, customArgs +} + +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) { + pflag.Var(NewExternalApplyConfigurationValue(&ca.ExternalApplyConfigurations, nil), "external-applyconfigurations", + "list of comma separated external apply configurations locations in .: form."+ + "For example: k8s.io/api/apps/v1.Deployment:k8s.io/client-go/applyconfigurations/apps/v1") + pflag.StringVar(&ca.OpenAPISchemaFilePath, "openapi-schema", "", + "path to the openapi schema containing all the types that apply configurations will be generated for") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + if len(genericArgs.OutputPackagePath) == 0 { + return fmt.Errorf("output package cannot be empty") + } + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/externaltypes.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/externaltypes.go new file mode 100644 index 000000000000..0785fbea0e37 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/args/externaltypes.go @@ -0,0 +1,122 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "bytes" + "encoding/csv" + "flag" + "fmt" + "strings" + + "k8s.io/gengo/types" +) + +type externalApplyConfigurationValue struct { + externals *map[types.Name]string +} + +func NewExternalApplyConfigurationValue(externals *map[types.Name]string, def []string) *externalApplyConfigurationValue { + val := new(externalApplyConfigurationValue) + val.externals = externals + if def != nil { + if err := val.set(def); err != nil { + panic(err) + } + } + return val +} + +var _ flag.Value = &externalApplyConfigurationValue{} + +func (s *externalApplyConfigurationValue) set(vs []string) error { + for _, input := range vs { + typ, pkg, err := parseExternalMapping(input) + if err != nil { + return err + } + if _, ok := (*s.externals)[typ]; ok { + return fmt.Errorf("duplicate type found in --external-applyconfigurations: %v", typ) + } + (*s.externals)[typ] = pkg + } + + return nil +} + +func (s *externalApplyConfigurationValue) Set(val string) error { + vs, err := readAsCSV(val) + if err != nil { + return err + } + if err := s.set(vs); err != nil { + return err + } + + return nil +} + +func (s *externalApplyConfigurationValue) Type() string { + return "string" +} + +func (s *externalApplyConfigurationValue) String() string { + var strs []string + for k, v := range *s.externals { + strs = append(strs, fmt.Sprintf("%s.%s:%s", k.Package, k.Name, v)) + } + str, _ := writeAsCSV(strs) + return "[" + str + "]" +} + +func readAsCSV(val string) ([]string, error) { + if val == "" { + return []string{}, nil + } + stringReader := strings.NewReader(val) + csvReader := csv.NewReader(stringReader) + return csvReader.Read() +} + +func writeAsCSV(vals []string) (string, error) { + b := &bytes.Buffer{} + w := csv.NewWriter(b) + err := w.Write(vals) + if err != nil { + return "", err + } + w.Flush() + return strings.TrimSuffix(b.String(), "\n"), nil +} + +func parseExternalMapping(mapping string) (typ types.Name, pkg string, err error) { + parts := strings.Split(mapping, ":") + if len(parts) != 2 { + return types.Name{}, "", fmt.Errorf("expected string of the form .: but got %s", mapping) + } + packageTypeStr := parts[0] + pkg = parts[1] + // need to split on the *last* dot, since k8s.io (and other valid packages) have a dot in it + lastDot := strings.LastIndex(packageTypeStr, ".") + if lastDot == -1 || lastDot == len(packageTypeStr)-1 { + return types.Name{}, "", fmt.Errorf("expected package and type of the form . but got %s", packageTypeStr) + } + structPkg := packageTypeStr[:lastDot] + structType := packageTypeStr[lastDot+1:] + + return types.Name{Package: structPkg, Name: structType}, pkg, nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/applyconfiguration.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/applyconfiguration.go new file mode 100644 index 000000000000..8e02bb233bc4 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/applyconfiguration.go @@ -0,0 +1,423 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + "k8s.io/klog/v2" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" +) + +// applyConfigurationGenerator produces apply configurations for a given GroupVersion and type. +type applyConfigurationGenerator struct { + generator.DefaultGen + outputPackage string + localPackage types.Name + groupVersion clientgentypes.GroupVersion + applyConfig applyConfig + imports namer.ImportTracker + refGraph refGraph + openAPIType *string // if absent, extraction function cannot be generated +} + +var _ generator.Generator = &applyConfigurationGenerator{} + +func (g *applyConfigurationGenerator) Filter(_ *generator.Context, t *types.Type) bool { + return t == g.applyConfig.Type +} + +func (g *applyConfigurationGenerator) Namers(*generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.localPackage.Package, g.imports), + "singularKind": namer.NewPublicNamer(0), + } +} + +func (g *applyConfigurationGenerator) Imports(*generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +// TypeParams provides a struct that an apply configuration +// is generated for as well as the apply configuration details +// and types referenced by the struct. +type TypeParams struct { + Struct *types.Type + ApplyConfig applyConfig + Tags util.Tags + APIVersion string + ExtractInto *types.Type + ParserFunc *types.Type + OpenAPIType *string +} + +type memberParams struct { + TypeParams + Member types.Member + MemberType *types.Type + JSONTags JSONTags + ArgType *types.Type // only set for maps and slices + EmbeddedIn *memberParams // parent embedded member, if any +} + +func (g *applyConfigurationGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + klog.V(5).Infof("processing type %v", t) + typeParams := TypeParams{ + Struct: t, + ApplyConfig: g.applyConfig, + Tags: genclientTags(t), + APIVersion: g.groupVersion.ToAPIVersion(), + ExtractInto: extractInto, + ParserFunc: types.Ref(g.outputPackage+"/internal", "Parser"), + OpenAPIType: g.openAPIType, + } + + g.generateStruct(sw, typeParams) + + if typeParams.Tags.GenerateClient { + if typeParams.Tags.NonNamespaced { + sw.Do(clientgenTypeConstructorNonNamespaced, typeParams) + } else { + sw.Do(clientgenTypeConstructorNamespaced, typeParams) + } + if typeParams.OpenAPIType != nil { + g.generateClientgenExtract(sw, typeParams, !typeParams.Tags.NoStatus) + } + } else { + if hasTypeMetaField(t) { + sw.Do(constructorWithTypeMeta, typeParams) + } else { + sw.Do(constructor, typeParams) + } + } + g.generateWithFuncs(t, typeParams, sw, nil) + return sw.Error() +} + +func hasTypeMetaField(t *types.Type) bool { + for _, member := range t.Members { + if typeMeta.Name == member.Type.Name && member.Embedded { + return true + } + } + return false +} + +func blocklisted(t *types.Type, member types.Member) bool { + if objectMeta.Name == t.Name && member.Name == "ManagedFields" { + return true + } + if objectMeta.Name == t.Name && member.Name == "SelfLink" { + return true + } + // Hide any fields which are en route to deletion. + if strings.HasPrefix(member.Name, "ZZZ_") { + return true + } + return false +} + +func (g *applyConfigurationGenerator) generateWithFuncs(t *types.Type, typeParams TypeParams, sw *generator.SnippetWriter, embed *memberParams) { + for _, member := range t.Members { + if blocklisted(t, member) { + continue + } + memberType := g.refGraph.applyConfigForType(member.Type) + if g.refGraph.isApplyConfig(member.Type) { + memberType = &types.Type{Kind: types.Pointer, Elem: memberType} + } + if jsonTags, ok := lookupJSONTags(member); ok { + memberParams := memberParams{ + TypeParams: typeParams, + Member: member, + MemberType: memberType, + JSONTags: jsonTags, + EmbeddedIn: embed, + } + if memberParams.Member.Embedded { + g.generateWithFuncs(member.Type, typeParams, sw, &memberParams) + if !jsonTags.inline { + // non-inlined embeds are nillable and need a "ensure exists" utility function + sw.Do(ensureEmbedExists, memberParams) + } + continue + } + + // For slices where the items are generated apply configuration types, accept varargs of + // pointers of the type as "with" function arguments so the "with" function can be used like so: + // WithFoos(Foo().WithName("x"), Foo().WithName("y")) + if t := deref(member.Type); t.Kind == types.Slice && g.refGraph.isApplyConfig(t.Elem) { + memberParams.ArgType = &types.Type{Kind: types.Pointer, Elem: memberType.Elem} + g.generateMemberWithForSlice(sw, member, memberParams) + continue + } + // Note: There are no maps where the values are generated apply configurations (because + // associative lists are used instead). So if a type like this is ever introduced, the + // default "with" function generator will produce a working (but not entirely convenient "with" function) + // that would be used like so: + // WithMap(map[string]FooApplyConfiguration{*Foo().WithName("x")}) + + switch memberParams.Member.Type.Kind { + case types.Slice: + memberParams.ArgType = memberType.Elem + g.generateMemberWithForSlice(sw, member, memberParams) + case types.Map: + g.generateMemberWithForMap(sw, memberParams) + default: + g.generateMemberWith(sw, memberParams) + } + } + } +} + +func (g *applyConfigurationGenerator) generateStruct(sw *generator.SnippetWriter, typeParams TypeParams) { + sw.Do("// $.ApplyConfig.ApplyConfiguration|public$ represents an declarative configuration of the $.ApplyConfig.Type|public$ type for use\n", typeParams) + sw.Do("// with apply.\n", typeParams) + sw.Do("type $.ApplyConfig.ApplyConfiguration|public$ struct {\n", typeParams) + for _, structMember := range typeParams.Struct.Members { + if blocklisted(typeParams.Struct, structMember) { + continue + } + if structMemberTags, ok := lookupJSONTags(structMember); ok { + if !structMemberTags.inline { + structMemberTags.omitempty = true + } + params := memberParams{ + TypeParams: typeParams, + Member: structMember, + MemberType: g.refGraph.applyConfigForType(structMember.Type), + JSONTags: structMemberTags, + } + if structMember.Embedded { + if structMemberTags.inline { + sw.Do("$.MemberType|raw$ `json:\"$.JSONTags$\"`\n", params) + } else { + sw.Do("*$.MemberType|raw$ `json:\"$.JSONTags$\"`\n", params) + } + } else if isNillable(structMember.Type) { + sw.Do("$.Member.Name$ $.MemberType|raw$ `json:\"$.JSONTags$\"`\n", params) + } else { + sw.Do("$.Member.Name$ *$.MemberType|raw$ `json:\"$.JSONTags$\"`\n", params) + } + } + } + sw.Do("}\n", typeParams) +} + +func deref(t *types.Type) *types.Type { + for t.Kind == types.Pointer { + t = t.Elem + } + return t +} + +func isNillable(t *types.Type) bool { + return t.Kind == types.Slice || t.Kind == types.Map +} + +func (g *applyConfigurationGenerator) generateMemberWith(sw *generator.SnippetWriter, memberParams memberParams) { + sw.Do("// With$.Member.Name$ sets the $.Member.Name$ field in the declarative configuration to the given value\n", memberParams) + sw.Do("// and returns the receiver, so that objects can be built by chaining \"With\" function invocations.\n", memberParams) + sw.Do("// If called multiple times, the $.Member.Name$ field is set to the value of the last call.\n", memberParams) + sw.Do("func (b *$.ApplyConfig.ApplyConfiguration|public$) With$.Member.Name$(value $.MemberType|raw$) *$.ApplyConfig.ApplyConfiguration|public$ {\n", memberParams) + g.ensureEnbedExistsIfApplicable(sw, memberParams) + if g.refGraph.isApplyConfig(memberParams.Member.Type) || isNillable(memberParams.Member.Type) { + sw.Do("b.$.Member.Name$ = value\n", memberParams) + } else { + sw.Do("b.$.Member.Name$ = &value\n", memberParams) + } + sw.Do(" return b\n", memberParams) + sw.Do("}\n", memberParams) +} + +func (g *applyConfigurationGenerator) generateMemberWithForSlice(sw *generator.SnippetWriter, member types.Member, memberParams memberParams) { + memberIsPointerToSlice := member.Type.Kind == types.Pointer + if memberIsPointerToSlice { + sw.Do(ensureNonEmbedSliceExists, memberParams) + } + + sw.Do("// With$.Member.Name$ adds the given value to the $.Member.Name$ field in the declarative configuration\n", memberParams) + sw.Do("// and returns the receiver, so that objects can be build by chaining \"With\" function invocations.\n", memberParams) + sw.Do("// If called multiple times, values provided by each call will be appended to the $.Member.Name$ field.\n", memberParams) + sw.Do("func (b *$.ApplyConfig.ApplyConfiguration|public$) With$.Member.Name$(values ...$.ArgType|raw$) *$.ApplyConfig.ApplyConfiguration|public$ {\n", memberParams) + g.ensureEnbedExistsIfApplicable(sw, memberParams) + + if memberIsPointerToSlice { + sw.Do("b.ensure$.MemberType.Elem|public$Exists()\n", memberParams) + } + + sw.Do(" for i := range values {\n", memberParams) + if memberParams.ArgType.Kind == types.Pointer { + sw.Do("if values[i] == nil {\n", memberParams) + sw.Do(" panic(\"nil value passed to With$.Member.Name$\")\n", memberParams) + sw.Do("}\n", memberParams) + + if memberIsPointerToSlice { + sw.Do("*b.$.Member.Name$ = append(*b.$.Member.Name$, *values[i])\n", memberParams) + } else { + sw.Do("b.$.Member.Name$ = append(b.$.Member.Name$, *values[i])\n", memberParams) + } + } else { + if memberIsPointerToSlice { + sw.Do("*b.$.Member.Name$ = append(*b.$.Member.Name$, values[i])\n", memberParams) + } else { + sw.Do("b.$.Member.Name$ = append(b.$.Member.Name$, values[i])\n", memberParams) + } + } + sw.Do(" }\n", memberParams) + sw.Do(" return b\n", memberParams) + sw.Do("}\n", memberParams) +} + +func (g *applyConfigurationGenerator) generateMemberWithForMap(sw *generator.SnippetWriter, memberParams memberParams) { + sw.Do("// With$.Member.Name$ puts the entries into the $.Member.Name$ field in the declarative configuration\n", memberParams) + sw.Do("// and returns the receiver, so that objects can be build by chaining \"With\" function invocations.\n", memberParams) + sw.Do("// If called multiple times, the entries provided by each call will be put on the $.Member.Name$ field,\n", memberParams) + sw.Do("// overwriting an existing map entries in $.Member.Name$ field with the same key.\n", memberParams) + sw.Do("func (b *$.ApplyConfig.ApplyConfiguration|public$) With$.Member.Name$(entries $.MemberType|raw$) *$.ApplyConfig.ApplyConfiguration|public$ {\n", memberParams) + g.ensureEnbedExistsIfApplicable(sw, memberParams) + sw.Do(" if b.$.Member.Name$ == nil && len(entries) > 0 {\n", memberParams) + sw.Do(" b.$.Member.Name$ = make($.MemberType|raw$, len(entries))\n", memberParams) + sw.Do(" }\n", memberParams) + sw.Do(" for k, v := range entries {\n", memberParams) + sw.Do(" b.$.Member.Name$[k] = v\n", memberParams) + sw.Do(" }\n", memberParams) + sw.Do(" return b\n", memberParams) + sw.Do("}\n", memberParams) +} + +func (g *applyConfigurationGenerator) ensureEnbedExistsIfApplicable(sw *generator.SnippetWriter, memberParams memberParams) { + // Embedded types that are not inlined must be nillable so they are not included in the apply configuration + // when all their fields are omitted. + if memberParams.EmbeddedIn != nil && !memberParams.EmbeddedIn.JSONTags.inline { + sw.Do("b.ensure$.MemberType.Elem|public$Exists()\n", memberParams.EmbeddedIn) + } +} + +var ensureEmbedExists = ` +func (b *$.ApplyConfig.ApplyConfiguration|public$) ensure$.MemberType.Elem|public$Exists() { + if b.$.MemberType.Elem|public$ == nil { + b.$.MemberType.Elem|public$ = &$.MemberType.Elem|raw${} + } +} +` + +var ensureNonEmbedSliceExists = ` +func (b *$.ApplyConfig.ApplyConfiguration|public$) ensure$.MemberType.Elem|public$Exists() { + if b.$.Member.Name$ == nil { + b.$.Member.Name$ = &[]$.MemberType.Elem|raw${} + } +} +` + +var clientgenTypeConstructorNamespaced = ` +// $.ApplyConfig.Type|public$ constructs an declarative configuration of the $.ApplyConfig.Type|public$ type for use with +// apply. +func $.ApplyConfig.Type|public$(name, namespace string) *$.ApplyConfig.ApplyConfiguration|public$ { + b := &$.ApplyConfig.ApplyConfiguration|public${} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("$.ApplyConfig.Type|singularKind$") + b.WithAPIVersion("$.APIVersion$") + return b +} +` + +var clientgenTypeConstructorNonNamespaced = ` +// $.ApplyConfig.Type|public$ constructs an declarative configuration of the $.ApplyConfig.Type|public$ type for use with +// apply. +func $.ApplyConfig.Type|public$(name string) *$.ApplyConfig.ApplyConfiguration|public$ { + b := &$.ApplyConfig.ApplyConfiguration|public${} + b.WithName(name) + b.WithKind("$.ApplyConfig.Type|singularKind$") + b.WithAPIVersion("$.APIVersion$") + return b +} +` + +var constructorWithTypeMeta = ` +// $.ApplyConfig.ApplyConfiguration|public$ constructs an declarative configuration of the $.ApplyConfig.Type|public$ type for use with +// apply. +func $.ApplyConfig.Type|public$() *$.ApplyConfig.ApplyConfiguration|public$ { + b := &$.ApplyConfig.ApplyConfiguration|public${} + b.WithKind("$.ApplyConfig.Type|singularKind$") + b.WithAPIVersion("$.APIVersion$") + return b +} +` + +var constructor = ` +// $.ApplyConfig.ApplyConfiguration|public$ constructs an declarative configuration of the $.ApplyConfig.Type|public$ type for use with +// apply. +func $.ApplyConfig.Type|public$() *$.ApplyConfig.ApplyConfiguration|public$ { + return &$.ApplyConfig.ApplyConfiguration|public${} +} +` + +func (g *applyConfigurationGenerator) generateClientgenExtract(sw *generator.SnippetWriter, typeParams TypeParams, includeStatus bool) { + sw.Do(` +// Extract$.ApplyConfig.Type|public$ extracts the applied configuration owned by fieldManager from +// $.Struct|private$. If no managedFields are found in $.Struct|private$ for fieldManager, a +// $.ApplyConfig.ApplyConfiguration|public$ is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// $.Struct|private$ must be a unmodified $.Struct|public$ API object that was retrieved from the Kubernetes API. +// Extract$.ApplyConfig.Type|public$ provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func Extract$.ApplyConfig.Type|public$($.Struct|private$ *$.Struct|raw$, fieldManager string) (*$.ApplyConfig.ApplyConfiguration|public$, error) { + return extract$.ApplyConfig.Type|public$($.Struct|private$, fieldManager, "") +}`, typeParams) + if includeStatus { + sw.Do(` +// Extract$.ApplyConfig.Type|public$Status is the same as Extract$.ApplyConfig.Type|public$ except +// that it extracts the status subresource applied configuration. +// Experimental! +func Extract$.ApplyConfig.Type|public$Status($.Struct|private$ *$.Struct|raw$, fieldManager string) (*$.ApplyConfig.ApplyConfiguration|public$, error) { + return extract$.ApplyConfig.Type|public$($.Struct|private$, fieldManager, "status") +} +`, typeParams) + } + sw.Do(` +func extract$.ApplyConfig.Type|public$($.Struct|private$ *$.Struct|raw$, fieldManager string, subresource string) (*$.ApplyConfig.ApplyConfiguration|public$, error) { + b := &$.ApplyConfig.ApplyConfiguration|public${} + err := $.ExtractInto|raw$($.Struct|private$, $.ParserFunc|raw$().Type("$.OpenAPIType$"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName($.Struct|private$.Name) +`, typeParams) + if !typeParams.Tags.NonNamespaced { + sw.Do("b.WithNamespace($.Struct|private$.Namespace)\n", typeParams) + } + sw.Do(` + b.WithKind("$.ApplyConfig.Type|singularKind$") + b.WithAPIVersion("$.APIVersion$") + return b, nil +} +`, typeParams) +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/internal.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/internal.go new file mode 100644 index 000000000000..2871b9d7f5ef --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/internal.go @@ -0,0 +1,99 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + + "gopkg.in/yaml.v2" + + "k8s.io/kube-openapi/pkg/schemaconv" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// utilGenerator generates the ForKind() utility function. +type internalGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + typeModels *typeModels + filtered bool +} + +var _ generator.Generator = &internalGenerator{} + +func (g *internalGenerator) Filter(*generator.Context, *types.Type) bool { + // generate file exactly once + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *internalGenerator) Namers(*generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + "singularKind": namer.NewPublicNamer(0), + } +} + +func (g *internalGenerator) Imports(*generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +func (g *internalGenerator) GenerateType(c *generator.Context, _ *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "{{", "}}") + + schema, err := schemaconv.ToSchema(g.typeModels.models) + if err != nil { + return err + } + schemaYAML, err := yaml.Marshal(schema) + if err != nil { + return err + } + sw.Do(schemaBlock, map[string]interface{}{ + "schemaYAML": string(schemaYAML), + "smdParser": smdParser, + "smdNewParser": smdNewParser, + "yamlObject": yamlObject, + "yamlUnmarshal": yamlUnmarshal, + }) + + return sw.Error() +} + +var schemaBlock = ` +func Parser() *{{.smdParser|raw}} { + parserOnce.Do(func() { + var err error + parser, err = {{.smdNewParser|raw}}(schemaYAML) + if err != nil { + panic(fmt.Sprintf("Failed to parse schema: %v", err)) + } + }) + return parser +} + +var parserOnce sync.Once +var parser *{{.smdParser|raw}} +var schemaYAML = {{.yamlObject|raw}}(` + "`{{.schemaYAML}}`" + `) +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/jsontagutil.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/jsontagutil.go new file mode 100644 index 000000000000..2a643290bb9a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/jsontagutil.go @@ -0,0 +1,99 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "reflect" + "strings" + + "k8s.io/gengo/types" +) + +// TODO: This implements the same functionality as https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/runtime/converter.go#L236 +// but is based on the highly efficient approach from https://golang.org/src/encoding/json/encode.go + +// JSONTags represents a go json field tag. +type JSONTags struct { + name string + omit bool + inline bool + omitempty bool +} + +func (t JSONTags) String() string { + var tag string + if !t.inline { + tag += t.name + } + if t.omitempty { + tag += ",omitempty" + } + if t.inline { + tag += ",inline" + } + return tag +} + +func lookupJSONTags(m types.Member) (JSONTags, bool) { + tag := reflect.StructTag(m.Tags).Get("json") + if tag == "" || tag == "-" { + return JSONTags{}, false + } + name, opts := parseTag(tag) + if name == "" { + name = m.Name + } + return JSONTags{ + name: name, + omit: false, + inline: opts.Contains("inline"), + omitempty: opts.Contains("omitempty"), + }, true +} + +type tagOptions string + +// parseTag splits a struct field's json tag into its name and +// comma-separated options. +func parseTag(tag string) (string, tagOptions) { + if idx := strings.Index(tag, ","); idx != -1 { + return tag[:idx], tagOptions(tag[idx+1:]) + } + return tag, "" +} + +// Contains reports whether a comma-separated listAlias of options +// contains a particular substr flag. substr must be surrounded by a +// string boundary or commas. +func (o tagOptions) Contains(optionName string) bool { + if len(o) == 0 { + return false + } + s := string(o) + for s != "" { + var next string + i := strings.Index(s, ",") + if i >= 0 { + s, next = s[:i], s[i+1:] + } + if s == optionName { + return true + } + s = next + } + return false +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/openapi.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/openapi.go new file mode 100644 index 000000000000..00d119dd65c1 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/openapi.go @@ -0,0 +1,198 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "encoding/json" + "fmt" + "os" + "strings" + + openapiv2 "github.com/google/gnostic-models/openapiv2" + "k8s.io/gengo/types" + utilproto "k8s.io/kube-openapi/pkg/util/proto" + "k8s.io/kube-openapi/pkg/validation/spec" +) + +type typeModels struct { + models utilproto.Models + gvkToOpenAPIType map[gvk]string +} + +type gvk struct { + group, version, kind string +} + +func newTypeModels(openAPISchemaFilePath string, pkgTypes map[string]*types.Package) (*typeModels, error) { + if len(openAPISchemaFilePath) == 0 { + return emptyModels, nil // No Extract() functions will be generated. + } + + rawOpenAPISchema, err := os.ReadFile(openAPISchemaFilePath) + if err != nil { + return nil, fmt.Errorf("failed to read openapi-schema file: %w", err) + } + + // Read in the provided openAPI schema. + openAPISchema := &spec.Swagger{} + err = json.Unmarshal(rawOpenAPISchema, openAPISchema) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal typeModels JSON: %w", err) + } + + // Build a mapping from openAPI type name to GVK. + // Find the root types needed by by client-go for apply. + gvkToOpenAPIType := map[gvk]string{} + rootDefs := map[string]spec.Schema{} + for _, p := range pkgTypes { + gv := groupVersion(p) + for _, t := range p.Types { + tags := genclientTags(t) + hasApply := tags.HasVerb("apply") || tags.HasVerb("applyStatus") + if tags.GenerateClient && hasApply { + openAPIType := friendlyName(typeName(t)) + gvk := gvk{ + group: gv.Group.String(), + version: gv.Version.String(), + kind: t.Name.Name, + } + rootDefs[openAPIType] = openAPISchema.Definitions[openAPIType] + gvkToOpenAPIType[gvk] = openAPIType + } + } + } + + // Trim the schema down to just the types needed by client-go for apply. + requiredDefs := make(map[string]spec.Schema) + for name, def := range rootDefs { + requiredDefs[name] = def + findReferenced(&def, openAPISchema.Definitions, requiredDefs) + } + openAPISchema.Definitions = requiredDefs + + // Convert the openAPI schema to the models format and validate it. + models, err := toValidatedModels(openAPISchema) + if err != nil { + return nil, err + } + return &typeModels{models: models, gvkToOpenAPIType: gvkToOpenAPIType}, nil +} + +var emptyModels = &typeModels{ + models: &utilproto.Definitions{}, + gvkToOpenAPIType: map[gvk]string{}, +} + +func toValidatedModels(openAPISchema *spec.Swagger) (utilproto.Models, error) { + // openapi_v2.ParseDocument only accepts a []byte of the JSON or YAML file to be parsed. + // so we do an inefficient marshal back to json and then read it back in as yaml + // but get the benefit of running the models through utilproto.NewOpenAPIData to + // validate all the references between types + rawMinimalOpenAPISchema, err := json.Marshal(openAPISchema) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal openAPI as JSON: %w", err) + } + + document, err := openapiv2.ParseDocument(rawMinimalOpenAPISchema) + if err != nil { + return nil, fmt.Errorf("failed to parse OpenAPI document for file: %w", err) + } + // Construct the models and validate all references are valid. + models, err := utilproto.NewOpenAPIData(document) + if err != nil { + return nil, fmt.Errorf("failed to create OpenAPI models for file: %w", err) + } + return models, nil +} + +// findReferenced recursively finds all schemas referenced from the given def. +// toValidatedModels makes sure no references get missed. +func findReferenced(def *spec.Schema, allSchemas, referencedOut map[string]spec.Schema) { + // follow $ref, if any + refPtr := def.Ref.GetPointer() + if refPtr != nil && !refPtr.IsEmpty() { + name := refPtr.String() + if !strings.HasPrefix(name, "/definitions/") { + return + } + name = strings.TrimPrefix(name, "/definitions/") + schema, ok := allSchemas[name] + if !ok { + panic(fmt.Sprintf("allSchemas schema is missing referenced type: %s", name)) + } + if _, ok := referencedOut[name]; !ok { + referencedOut[name] = schema + findReferenced(&schema, allSchemas, referencedOut) + } + } + + // follow any nested schemas + if def.Items != nil { + if def.Items.Schema != nil { + findReferenced(def.Items.Schema, allSchemas, referencedOut) + } + for _, item := range def.Items.Schemas { + findReferenced(&item, allSchemas, referencedOut) + } + } + if def.AllOf != nil { + for _, s := range def.AllOf { + findReferenced(&s, allSchemas, referencedOut) + } + } + if def.AnyOf != nil { + for _, s := range def.AnyOf { + findReferenced(&s, allSchemas, referencedOut) + } + } + if def.OneOf != nil { + for _, s := range def.OneOf { + findReferenced(&s, allSchemas, referencedOut) + } + } + if def.Not != nil { + findReferenced(def.Not, allSchemas, referencedOut) + } + if def.Properties != nil { + for _, prop := range def.Properties { + findReferenced(&prop, allSchemas, referencedOut) + } + } + if def.AdditionalProperties != nil && def.AdditionalProperties.Schema != nil { + findReferenced(def.AdditionalProperties.Schema, allSchemas, referencedOut) + } + if def.PatternProperties != nil { + for _, s := range def.PatternProperties { + findReferenced(&s, allSchemas, referencedOut) + } + } + if def.Dependencies != nil { + for _, d := range def.Dependencies { + if d.Schema != nil { + findReferenced(d.Schema, allSchemas, referencedOut) + } + } + } + if def.AdditionalItems != nil && def.AdditionalItems.Schema != nil { + findReferenced(def.AdditionalItems.Schema, allSchemas, referencedOut) + } + if def.Definitions != nil { + for _, s := range def.Definitions { + findReferenced(&s, allSchemas, referencedOut) + } + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/packages.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/packages.go new file mode 100644 index 000000000000..bfeffda593d8 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/packages.go @@ -0,0 +1,297 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "path" + "path/filepath" + "sort" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + "k8s.io/klog/v2" + + applygenargs "k8s.io/code-generator/cmd/applyconfiguration-gen/args" + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" +) + +const ( + // ApplyConfigurationTypeSuffix is the suffix of generated apply configuration types. + ApplyConfigurationTypeSuffix = "ApplyConfiguration" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "public": namer.NewPublicNamer(0), + "private": namer.NewPrivateNamer(0), + "raw": namer.NewRawNamer("", nil), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// Packages makes the client package definition. +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + pkgTypes := packageTypesForInputDirs(context, arguments.InputDirs, arguments.OutputPackagePath) + customArgs := arguments.CustomArgs.(*applygenargs.CustomArgs) + initialTypes := customArgs.ExternalApplyConfigurations + refs := refGraphForReachableTypes(context.Universe, pkgTypes, initialTypes) + typeModels, err := newTypeModels(customArgs.OpenAPISchemaFilePath, pkgTypes) + if err != nil { + klog.Fatalf("Failed build type models from typeModels %s: %v", customArgs.OpenAPISchemaFilePath, err) + } + + groupVersions := make(map[string]clientgentypes.GroupVersions) + groupGoNames := make(map[string]string) + applyConfigsForGroupVersion := make(map[clientgentypes.GroupVersion][]applyConfig) + + var packageList generator.Packages + for pkg, p := range pkgTypes { + gv := groupVersion(p) + + pkgType := types.Name{Name: gv.Group.PackageName(), Package: pkg} + + var toGenerate []applyConfig + for _, t := range p.Types { + // If we don't have an ObjectMeta field, we lack the information required to make the Apply or ApplyStatus call + // to the kube-apiserver, so we don't need to generate the type at all + clientTags := genclientTags(t) + if clientTags.GenerateClient && !hasObjectMetaField(t) { + klog.V(5).Infof("skipping type %v because does not have ObjectMeta", t) + continue + } + if typePkg, ok := refs[t.Name]; ok { + toGenerate = append(toGenerate, applyConfig{ + Type: t, + ApplyConfiguration: types.Ref(typePkg, t.Name.Name+ApplyConfigurationTypeSuffix), + }) + } + } + if len(toGenerate) == 0 { + continue // Don't generate empty packages + } + sort.Sort(applyConfigSort(toGenerate)) + + // generate the apply configurations + packageList = append(packageList, generatorForApplyConfigurationsPackage(arguments.OutputPackagePath, boilerplate, pkgType, gv, toGenerate, refs, typeModels)) + + // group all the generated apply configurations by gv so ForKind() can be generated + groupPackageName := gv.Group.NonEmpty() + groupVersionsEntry, ok := groupVersions[groupPackageName] + if !ok { + groupVersionsEntry = clientgentypes.GroupVersions{ + PackageName: groupPackageName, + Group: gv.Group, + } + } + groupVersionsEntry.Versions = append(groupVersionsEntry.Versions, clientgentypes.PackageVersion{ + Version: gv.Version, + Package: path.Clean(p.Path), + }) + + groupGoNames[groupPackageName] = goName(gv, p) + applyConfigsForGroupVersion[gv] = toGenerate + groupVersions[groupPackageName] = groupVersionsEntry + } + + // generate ForKind() utility function + packageList = append(packageList, generatorForUtils(arguments.OutputPackagePath, boilerplate, groupVersions, applyConfigsForGroupVersion, groupGoNames)) + // generate internal embedded schema, required for generated Extract functions + packageList = append(packageList, generatorForInternal(filepath.Join(arguments.OutputPackagePath, "internal"), boilerplate, typeModels)) + + return packageList +} + +func friendlyName(name string) string { + nameParts := strings.Split(name, "/") + // Reverse first part. e.g., io.k8s... instead of k8s.io... + if len(nameParts) > 0 && strings.Contains(nameParts[0], ".") { + parts := strings.Split(nameParts[0], ".") + for i, j := 0, len(parts)-1; i < j; i, j = i+1, j-1 { + parts[i], parts[j] = parts[j], parts[i] + } + nameParts[0] = strings.Join(parts, ".") + } + return strings.Join(nameParts, ".") +} + +func typeName(t *types.Type) string { + typePackage := t.Name.Package + if strings.Contains(typePackage, "/vendor/") { + typePackage = typePackage[strings.Index(typePackage, "/vendor/")+len("/vendor/"):] + } + return fmt.Sprintf("%s.%s", typePackage, t.Name.Name) +} + +func generatorForApplyConfigurationsPackage(outputPackagePath string, boilerplate []byte, packageName types.Name, gv clientgentypes.GroupVersion, typesToGenerate []applyConfig, refs refGraph, models *typeModels) *generator.DefaultPackage { + return &generator.DefaultPackage{ + PackageName: gv.Version.PackageName(), + PackagePath: packageName.Package, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + for _, toGenerate := range typesToGenerate { + var openAPIType *string + gvk := gvk{ + group: gv.Group.String(), + version: gv.Version.String(), + kind: toGenerate.Type.Name.Name, + } + if v, ok := models.gvkToOpenAPIType[gvk]; ok { + openAPIType = &v + } + + generators = append(generators, &applyConfigurationGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: strings.ToLower(toGenerate.Type.Name.Name), + }, + outputPackage: outputPackagePath, + localPackage: packageName, + groupVersion: gv, + applyConfig: toGenerate, + imports: generator.NewImportTracker(), + refGraph: refs, + openAPIType: openAPIType, + }) + } + return generators + }, + } +} + +func generatorForUtils(outPackagePath string, boilerplate []byte, groupVersions map[string]clientgentypes.GroupVersions, applyConfigsForGroupVersion map[clientgentypes.GroupVersion][]applyConfig, groupGoNames map[string]string) *generator.DefaultPackage { + return &generator.DefaultPackage{ + PackageName: filepath.Base(outPackagePath), + PackagePath: outPackagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &utilGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "utils", + }, + outputPackage: outPackagePath, + imports: generator.NewImportTracker(), + groupVersions: groupVersions, + typesForGroupVersion: applyConfigsForGroupVersion, + groupGoNames: groupGoNames, + }) + return generators + }, + } +} + +func generatorForInternal(outPackagePath string, boilerplate []byte, models *typeModels) *generator.DefaultPackage { + return &generator.DefaultPackage{ + PackageName: filepath.Base(outPackagePath), + PackagePath: outPackagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &internalGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "internal", + }, + outputPackage: outPackagePath, + imports: generator.NewImportTracker(), + typeModels: models, + }) + return generators + }, + } +} + +func goName(gv clientgentypes.GroupVersion, p *types.Package) string { + goName := namer.IC(strings.Split(gv.Group.NonEmpty(), ".")[0]) + if override := types.ExtractCommentTags("+", p.Comments)["groupGoName"]; override != nil { + goName = namer.IC(override[0]) + } + return goName +} + +func packageTypesForInputDirs(context *generator.Context, inputDirs []string, outputPath string) map[string]*types.Package { + pkgTypes := map[string]*types.Package{} + for _, inputDir := range inputDirs { + p := context.Universe.Package(inputDir) + internal := isInternalPackage(p) + if internal { + klog.Warningf("Skipping internal package: %s", p.Path) + continue + } + // This is how the client generator finds the package we are creating. It uses the API package name, not the group name. + // This matches the approach of the client-gen, so the two generator can work together. + // For example, if openshift/api/cloudnetwork/v1 contains an apigroup cloud.network.openshift.io, the client-gen + // builds a package called cloudnetwork/v1 to contain it. This change makes the applyconfiguration-gen use the same. + _, gvPackageString := util.ParsePathGroupVersion(p.Path) + pkg := filepath.Join(outputPath, strings.ToLower(gvPackageString)) + pkgTypes[pkg] = p + } + return pkgTypes +} + +func groupVersion(p *types.Package) (gv clientgentypes.GroupVersion) { + parts := strings.Split(p.Path, "/") + gv.Group = clientgentypes.Group(parts[len(parts)-2]) + gv.Version = clientgentypes.Version(parts[len(parts)-1]) + + // If there's a comment of the form "// +groupName=somegroup" or + // "// +groupName=somegroup.foo.bar.io", use the first field (somegroup) as the name of the + // group when generating. + if override := types.ExtractCommentTags("+", p.Comments)["groupName"]; override != nil { + gv.Group = clientgentypes.Group(override[0]) + } + return gv +} + +// isInternalPackage returns true if the package is an internal package +func isInternalPackage(p *types.Package) bool { + for _, t := range p.Types { + for _, member := range t.Members { + if member.Name == "ObjectMeta" { + return isInternal(member) + } + } + } + return false +} + +// isInternal returns true if the tags for a member do not contain a json tag +func isInternal(m types.Member) bool { + _, ok := lookupJSONTags(m) + return !ok +} + +func hasObjectMetaField(t *types.Type) bool { + for _, member := range t.Members { + if objectMeta.Name == member.Type.Name && member.Embedded { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/refgraph.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/refgraph.go new file mode 100644 index 000000000000..d1f95112796f --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/refgraph.go @@ -0,0 +1,179 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// refGraph maps existing types to the package the corresponding applyConfig types will be generated in +// so that references between apply configurations can be correctly generated. +type refGraph map[types.Name]string + +// refGraphForReachableTypes returns a refGraph that contains all reachable types from +// the root clientgen types of the provided packages. +func refGraphForReachableTypes(universe types.Universe, pkgTypes map[string]*types.Package, initialTypes map[types.Name]string) refGraph { + var refs refGraph = initialTypes + + // Include only types that are reachable from the root clientgen types. + // We don't want to generate apply configurations for types that are not reachable from a root + // clientgen type. + reachableTypes := map[types.Name]*types.Type{} + for _, p := range pkgTypes { + for _, t := range p.Types { + tags := genclientTags(t) + hasApply := tags.HasVerb("apply") || tags.HasVerb("applyStatus") + if tags.GenerateClient && hasApply { + findReachableTypes(t, reachableTypes) + } + // If any apply extensions have custom inputs, add them. + for _, extension := range tags.Extensions { + if extension.HasVerb("apply") { + if len(extension.InputTypeOverride) > 0 { + inputType := *t + if name, pkg := extension.Input(); len(pkg) > 0 { + inputType = *(universe.Type(types.Name{Package: pkg, Name: name})) + } else { + inputType.Name.Name = extension.InputTypeOverride + } + findReachableTypes(&inputType, reachableTypes) + } + } + } + } + } + for pkg, p := range pkgTypes { + for _, t := range p.Types { + if _, ok := reachableTypes[t.Name]; !ok { + continue + } + if requiresApplyConfiguration(t) { + refs[t.Name] = pkg + } + } + } + + return refs +} + +// applyConfigForType find the type used in the generate apply configurations for a field. +// This may either be an existing type or one of the other generated applyConfig types. +func (t refGraph) applyConfigForType(field *types.Type) *types.Type { + switch field.Kind { + case types.Struct: + if pkg, ok := t[field.Name]; ok { // TODO(jpbetz): Refs to types defined in a separate system (e.g. TypeMeta if generating a 3rd party controller) end up referencing the go struct, not the apply configuration type + return types.Ref(pkg, field.Name.Name+ApplyConfigurationTypeSuffix) + } + return field + case types.Map: + if _, ok := t[field.Elem.Name]; ok { + return &types.Type{ + Kind: types.Map, + Elem: t.applyConfigForType(field.Elem), + Key: t.applyConfigForType(field.Key), + } + } + return field + case types.Slice: + if _, ok := t[field.Elem.Name]; ok { + return &types.Type{ + Kind: types.Slice, + Elem: t.applyConfigForType(field.Elem), + } + } + return field + case types.Pointer: + return t.applyConfigForType(field.Elem) + default: + return field + } +} + +func (t refGraph) isApplyConfig(field *types.Type) bool { + switch field.Kind { + case types.Struct: + _, ok := t[field.Name] + return ok + case types.Pointer: + return t.isApplyConfig(field.Elem) + } + return false +} + +// genclientTags returns the genclient Tags for the given type. +func genclientTags(t *types.Type) util.Tags { + return util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) +} + +// findReachableTypes finds all types transitively reachable from a given root type, including +// the root type itself. +func findReachableTypes(t *types.Type, referencedTypes map[types.Name]*types.Type) { + if _, ok := referencedTypes[t.Name]; ok { + return + } + referencedTypes[t.Name] = t + + if t.Elem != nil { + findReachableTypes(t.Elem, referencedTypes) + } + if t.Underlying != nil { + findReachableTypes(t.Underlying, referencedTypes) + } + if t.Key != nil { + findReachableTypes(t.Key, referencedTypes) + } + for _, m := range t.Members { + findReachableTypes(m.Type, referencedTypes) + } +} + +// excludeTypes contains well known types that we do not generate apply configurations for. +// Hard coding because we only have two, very specific types that serve a special purpose +// in the type system here. +var excludeTypes = map[types.Name]struct{}{ + rawExtension.Name: {}, + unknown.Name: {}, + // DO NOT ADD TO THIS LIST. If we need to exclude other types, we should consider allowing the + // go type declarations to be annotated as excluded from this generator. +} + +// requiresApplyConfiguration returns true if a type applyConfig should be generated for the given type. +// types applyConfig are only generated for struct types that contain fields with json tags. +func requiresApplyConfiguration(t *types.Type) bool { + for t.Kind == types.Alias { + t = t.Underlying + } + if t.Kind != types.Struct { + return false + } + if _, ok := excludeTypes[t.Name]; ok { + return false + } + var hasJSONTaggedMembers bool + for _, member := range t.Members { + if _, ok := lookupJSONTags(member); ok { + hasJSONTaggedMembers = true + } + } + if !hasJSONTaggedMembers { + return false + } + + return true +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/types.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/types.go new file mode 100644 index 000000000000..66578ae0489b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/types.go @@ -0,0 +1,33 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import "k8s.io/gengo/types" + +var ( + applyConfiguration = types.Ref("k8s.io/apimachinery/pkg/runtime", "ApplyConfiguration") + groupVersionKind = types.Ref("k8s.io/apimachinery/pkg/runtime/schema", "GroupVersionKind") + typeMeta = types.Ref("k8s.io/apimachinery/pkg/apis/meta/v1", "TypeMeta") + objectMeta = types.Ref("k8s.io/apimachinery/pkg/apis/meta/v1", "ObjectMeta") + rawExtension = types.Ref("k8s.io/apimachinery/pkg/runtime", "RawExtension") + unknown = types.Ref("k8s.io/apimachinery/pkg/runtime", "Unknown") + extractInto = types.Ref("k8s.io/apimachinery/pkg/util/managedfields", "ExtractInto") + smdNewParser = types.Ref("sigs.k8s.io/structured-merge-diff/v4/typed", "NewParser") + smdParser = types.Ref("sigs.k8s.io/structured-merge-diff/v4/typed", "Parser") + yamlObject = types.Ref("sigs.k8s.io/structured-merge-diff/v4/typed", "YAMLObject") + yamlUnmarshal = types.Ref("gopkg.in/yaml.v2", "Unmarshal") +) diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/util.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/util.go new file mode 100644 index 000000000000..258293afea54 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/generators/util.go @@ -0,0 +1,163 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "sort" + "strings" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// utilGenerator generates the ForKind() utility function. +type utilGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + groupVersions map[string]clientgentypes.GroupVersions + groupGoNames map[string]string + typesForGroupVersion map[clientgentypes.GroupVersion][]applyConfig + filtered bool +} + +var _ generator.Generator = &utilGenerator{} + +func (g *utilGenerator) Filter(*generator.Context, *types.Type) bool { + // generate file exactly once + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *utilGenerator) Namers(*generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + "singularKind": namer.NewPublicNamer(0), + } +} + +func (g *utilGenerator) Imports(*generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +type group struct { + GroupGoName string + Name string + Versions []*version +} + +type groupSort []group + +func (g groupSort) Len() int { return len(g) } +func (g groupSort) Less(i, j int) bool { + return strings.ToLower(g[i].Name) < strings.ToLower(g[j].Name) +} +func (g groupSort) Swap(i, j int) { g[i], g[j] = g[j], g[i] } + +type version struct { + Name string + GoName string + Resources []applyConfig +} + +type versionSort []*version + +func (v versionSort) Len() int { return len(v) } +func (v versionSort) Less(i, j int) bool { + return strings.ToLower(v[i].Name) < strings.ToLower(v[j].Name) +} +func (v versionSort) Swap(i, j int) { v[i], v[j] = v[j], v[i] } + +type applyConfig struct { + Type *types.Type + ApplyConfiguration *types.Type +} + +type applyConfigSort []applyConfig + +func (v applyConfigSort) Len() int { return len(v) } +func (v applyConfigSort) Less(i, j int) bool { + return strings.ToLower(v[i].Type.Name.Name) < strings.ToLower(v[j].Type.Name.Name) +} +func (v applyConfigSort) Swap(i, j int) { v[i], v[j] = v[j], v[i] } + +func (g *utilGenerator) GenerateType(c *generator.Context, _ *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "{{", "}}") + + var groups []group + schemeGVs := make(map[*version]*types.Type) + + for groupPackageName, groupVersions := range g.groupVersions { + group := group{ + GroupGoName: g.groupGoNames[groupPackageName], + Name: groupVersions.Group.NonEmpty(), + Versions: []*version{}, + } + for _, v := range groupVersions.Versions { + gv := clientgentypes.GroupVersion{Group: groupVersions.Group, Version: v.Version} + version := &version{ + Name: v.Version.NonEmpty(), + GoName: namer.IC(v.Version.NonEmpty()), + Resources: g.typesForGroupVersion[gv], + } + schemeGVs[version] = c.Universe.Variable(types.Name{ + Package: g.typesForGroupVersion[gv][0].Type.Name.Package, + Name: "SchemeGroupVersion", + }) + group.Versions = append(group.Versions, version) + } + sort.Sort(versionSort(group.Versions)) + groups = append(groups, group) + } + sort.Sort(groupSort(groups)) + + m := map[string]interface{}{ + "groups": groups, + "schemeGVs": schemeGVs, + "schemaGroupVersionKind": groupVersionKind, + "applyConfiguration": applyConfiguration, + } + sw.Do(forKindFunc, m) + + return sw.Error() +} + +var forKindFunc = ` +// ForKind returns an apply configuration type for the given GroupVersionKind, or nil if no +// apply configuration type exists for the given GroupVersionKind. +func ForKind(kind {{.schemaGroupVersionKind|raw}}) interface{} { + switch kind { + {{range $group := .groups -}}{{$GroupGoName := .GroupGoName -}} + {{range $version := .Versions -}} + // Group={{$group.Name}}, Version={{.Name}} + {{range .Resources -}} + case {{index $.schemeGVs $version|raw}}.WithKind("{{.Type|singularKind}}"): + return &{{.ApplyConfiguration|raw}}{} + {{end}} + {{end}} + {{end -}} + } + return nil +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/main.go new file mode 100644 index 000000000000..b4e264042aa7 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/applyconfiguration-gen/main.go @@ -0,0 +1,54 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// typebuilder-gen is a tool for auto-generating apply builder functions. +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/applyconfiguration-gen/args" + "k8s.io/code-generator/cmd/applyconfiguration-gen/generators" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine, "k8s.io/kubernetes/pkg/apis") // TODO: move this input path out of applyconfiguration-gen + if err := flag.Set("logtostderr", "true"); err != nil { + klog.Fatalf("Error: %v", err) + } + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/OWNERS b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/OWNERS new file mode 100644 index 000000000000..967eb2a7bbc3 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/OWNERS @@ -0,0 +1,11 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: + - wojtek-t + - caesarxuchao +reviewers: + - wojtek-t + - caesarxuchao + - jpbetz +emeritus_approvers: + - lavalamp diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/README.md b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/README.md new file mode 100644 index 000000000000..b8206127ff56 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/README.md @@ -0,0 +1,2 @@ +See [generating-clientset.md](https://git.k8s.io/community/contributors/devel/sig-api-machinery/generating-clientset.md) + diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/args.go new file mode 100644 index 000000000000..4460ad26a254 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/args.go @@ -0,0 +1,133 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + "path" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" + + "k8s.io/code-generator/cmd/client-gen/types" + codegenutil "k8s.io/code-generator/pkg/util" +) + +var DefaultInputDirs = []string{} + +// CustomArgs is a wrapper for arguments to client-gen. +type CustomArgs struct { + // A sorted list of group versions to generate. For each of them the package path is found + // in GroupVersionToInputPath. + Groups []types.GroupVersions + + // Overrides for which types should be included in the client. + IncludedTypesOverrides map[types.GroupVersion][]string + + // ClientsetName is the name of the clientset to be generated. It's + // populated from command-line arguments. + ClientsetName string + // ClientsetAPIPath is the default API HTTP path for generated clients. + ClientsetAPIPath string + // ClientsetOnly determines if we should generate the clients for groups and + // types along with the clientset. It's populated from command-line + // arguments. + ClientsetOnly bool + // FakeClient determines if client-gen generates the fake clients. + FakeClient bool + // PluralExceptions specify list of exceptions used when pluralizing certain types. + // For example 'Endpoints:Endpoints', otherwise the pluralizer will generate 'Endpointes'. + PluralExceptions []string + + // ApplyConfigurationPackage is the package of apply builders generated by typebuilder-gen. + // If non-empty, Apply functions are generated for each type and reference the apply builders. + // If empty (""), Apply functions are not generated. + ApplyConfigurationPackage string +} + +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{ + ClientsetName: "internalclientset", + ClientsetAPIPath: "/apis", + ClientsetOnly: false, + FakeClient: true, + PluralExceptions: []string{"Endpoints:Endpoints"}, + ApplyConfigurationPackage: "", + } + genericArgs.CustomArgs = customArgs + genericArgs.InputDirs = DefaultInputDirs + + if pkg := codegenutil.CurrentPackage(); len(pkg) != 0 { + genericArgs.OutputPackagePath = path.Join(pkg, "pkg/client/clientset") + } + + return genericArgs, customArgs +} + +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) { + gvsBuilder := NewGroupVersionsBuilder(&ca.Groups) + pflag.Var(NewGVPackagesValue(gvsBuilder, nil), "input", "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\".") + pflag.Var(NewGVTypesValue(&ca.IncludedTypesOverrides, []string{}), "included-types-overrides", "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient will be used for other group versions.") + pflag.Var(NewInputBasePathValue(gvsBuilder, inputBase), "input-base", "base path to look for the api group.") + pflag.StringVarP(&ca.ClientsetName, "clientset-name", "n", ca.ClientsetName, "the name of the generated clientset package.") + pflag.StringVarP(&ca.ClientsetAPIPath, "clientset-api-path", "", ca.ClientsetAPIPath, "the value of default API HTTP path, starting with / and without trailing /.") + pflag.BoolVar(&ca.ClientsetOnly, "clientset-only", ca.ClientsetOnly, "when set, client-gen only generates the clientset shell, without generating the individual typed clients") + pflag.BoolVar(&ca.FakeClient, "fake-clientset", ca.FakeClient, "when set, client-gen will generate the fake clientset that can be used in tests") + + fs.StringSliceVar(&ca.PluralExceptions, "plural-exceptions", ca.PluralExceptions, "list of comma separated plural exception definitions in Type:PluralizedType form") + fs.StringVar(&ca.ApplyConfigurationPackage, "apply-configuration-package", ca.ApplyConfigurationPackage, "optional package of apply configurations, generated by applyconfiguration-gen, that are required to generate Apply functions for each type in the clientset. By default Apply functions are not generated.") + + // support old flags + fs.SetNormalizeFunc(mapFlagName("clientset-path", "output-package", fs.GetNormalizeFunc())) +} + +func Validate(genericArgs *args.GeneratorArgs) error { + customArgs := genericArgs.CustomArgs.(*CustomArgs) + + if len(genericArgs.OutputPackagePath) == 0 { + return fmt.Errorf("output package cannot be empty") + } + if len(customArgs.ClientsetName) == 0 { + return fmt.Errorf("clientset name cannot be empty") + } + if len(customArgs.ClientsetAPIPath) == 0 { + return fmt.Errorf("clientset API path cannot be empty") + } + + return nil +} + +// GroupVersionPackages returns a map from GroupVersion to the package with the types.go. +func (ca *CustomArgs) GroupVersionPackages() map[types.GroupVersion]string { + res := map[types.GroupVersion]string{} + for _, pkg := range ca.Groups { + for _, v := range pkg.Versions { + res[types.GroupVersion{Group: pkg.Group, Version: v.Version}] = v.Package + } + } + return res +} + +func mapFlagName(from, to string, old func(fs *pflag.FlagSet, name string) pflag.NormalizedName) func(fs *pflag.FlagSet, name string) pflag.NormalizedName { + return func(fs *pflag.FlagSet, name string) pflag.NormalizedName { + if name == from { + name = to + } + return old(fs, name) + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvpackages.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvpackages.go new file mode 100644 index 000000000000..50d29a95be1e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvpackages.go @@ -0,0 +1,173 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "bytes" + "encoding/csv" + "flag" + "path" + "sort" + "strings" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + "k8s.io/code-generator/cmd/client-gen/types" +) + +type inputBasePathValue struct { + builder *groupVersionsBuilder +} + +var _ flag.Value = &inputBasePathValue{} + +func NewInputBasePathValue(builder *groupVersionsBuilder, def string) *inputBasePathValue { + v := &inputBasePathValue{ + builder: builder, + } + v.Set(def) + return v +} + +func (s *inputBasePathValue) Set(val string) error { + s.builder.importBasePath = val + return s.builder.update() +} + +func (s *inputBasePathValue) Type() string { + return "string" +} + +func (s *inputBasePathValue) String() string { + return s.builder.importBasePath +} + +type gvPackagesValue struct { + builder *groupVersionsBuilder + groups []string + changed bool +} + +func NewGVPackagesValue(builder *groupVersionsBuilder, def []string) *gvPackagesValue { + gvp := new(gvPackagesValue) + gvp.builder = builder + if def != nil { + if err := gvp.set(def); err != nil { + panic(err) + } + } + return gvp +} + +var _ flag.Value = &gvPackagesValue{} + +func (s *gvPackagesValue) set(vs []string) error { + if s.changed { + s.groups = append(s.groups, vs...) + } else { + s.groups = append([]string(nil), vs...) + } + + s.builder.groups = s.groups + return s.builder.update() +} + +func (s *gvPackagesValue) Set(val string) error { + vs, err := readAsCSV(val) + if err != nil { + return err + } + if err := s.set(vs); err != nil { + return err + } + s.changed = true + return nil +} + +func (s *gvPackagesValue) Type() string { + return "stringSlice" +} + +func (s *gvPackagesValue) String() string { + str, _ := writeAsCSV(s.groups) + return "[" + str + "]" +} + +type groupVersionsBuilder struct { + value *[]types.GroupVersions + groups []string + importBasePath string +} + +func NewGroupVersionsBuilder(groups *[]types.GroupVersions) *groupVersionsBuilder { + return &groupVersionsBuilder{ + value: groups, + } +} + +func (p *groupVersionsBuilder) update() error { + var seenGroups = make(map[types.Group]*types.GroupVersions) + for _, v := range p.groups { + pth, gvString := util.ParsePathGroupVersion(v) + gv, err := types.ToGroupVersion(gvString) + if err != nil { + return err + } + + versionPkg := types.PackageVersion{Package: path.Join(p.importBasePath, pth, gv.Group.NonEmpty(), gv.Version.String()), Version: gv.Version} + if group, ok := seenGroups[gv.Group]; ok { + seenGroups[gv.Group].Versions = append(group.Versions, versionPkg) + } else { + seenGroups[gv.Group] = &types.GroupVersions{ + PackageName: gv.Group.NonEmpty(), + Group: gv.Group, + Versions: []types.PackageVersion{versionPkg}, + } + } + } + + var groupNames []string + for groupName := range seenGroups { + groupNames = append(groupNames, groupName.String()) + } + sort.Strings(groupNames) + *p.value = []types.GroupVersions{} + for _, groupName := range groupNames { + *p.value = append(*p.value, *seenGroups[types.Group(groupName)]) + } + + return nil +} + +func readAsCSV(val string) ([]string, error) { + if val == "" { + return []string{}, nil + } + stringReader := strings.NewReader(val) + csvReader := csv.NewReader(stringReader) + return csvReader.Read() +} + +func writeAsCSV(vals []string) (string, error) { + b := &bytes.Buffer{} + w := csv.NewWriter(b) + err := w.Write(vals) + if err != nil { + return "", err + } + w.Flush() + return strings.TrimSuffix(b.String(), "\n"), nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvtype.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvtype.go new file mode 100644 index 000000000000..e4e3ccb5366c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/args/gvtype.go @@ -0,0 +1,110 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "flag" + "fmt" + "strings" + + "k8s.io/code-generator/cmd/client-gen/types" +) + +type gvTypeValue struct { + gvToTypes *map[types.GroupVersion][]string + changed bool +} + +func NewGVTypesValue(gvToTypes *map[types.GroupVersion][]string, def []string) *gvTypeValue { + gvt := new(gvTypeValue) + gvt.gvToTypes = gvToTypes + if def != nil { + if err := gvt.set(def); err != nil { + panic(err) + } + } + return gvt +} + +var _ flag.Value = &gvTypeValue{} + +func (s *gvTypeValue) set(vs []string) error { + if !s.changed { + *s.gvToTypes = map[types.GroupVersion][]string{} + } + + for _, input := range vs { + gvString, typeStr, err := parseGroupVersionType(input) + if err != nil { + return err + } + gv, err := types.ToGroupVersion(gvString) + if err != nil { + return err + } + types, ok := (*s.gvToTypes)[gv] + if !ok { + types = []string{} + } + types = append(types, typeStr) + (*s.gvToTypes)[gv] = types + } + + return nil +} + +func (s *gvTypeValue) Set(val string) error { + vs, err := readAsCSV(val) + if err != nil { + return err + } + if err := s.set(vs); err != nil { + return err + } + s.changed = true + return nil +} + +func (s *gvTypeValue) Type() string { + return "stringSlice" +} + +func (s *gvTypeValue) String() string { + strs := make([]string, 0, len(*s.gvToTypes)) + for gv, ts := range *s.gvToTypes { + for _, t := range ts { + strs = append(strs, gv.Group.String()+"/"+gv.Version.String()+"/"+t) + } + } + str, _ := writeAsCSV(strs) + return "[" + str + "]" +} + +func parseGroupVersionType(gvtString string) (gvString string, typeStr string, err error) { + invalidFormatErr := fmt.Errorf("invalid value: %s, should be of the form group/version/type", gvtString) + subs := strings.Split(gvtString, "/") + length := len(subs) + switch length { + case 2: + // gvtString of the form group/type, e.g. api/Service,extensions/ReplicaSet + return subs[0] + "/", subs[1], nil + case 3: + return strings.Join(subs[:length-1], "/"), subs[length-1], nil + default: + return "", "", invalidFormatErr + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go new file mode 100644 index 000000000000..ef4466d80059 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go @@ -0,0 +1,393 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package generators has the generators for the client-gen utility. +package generators + +import ( + "path/filepath" + "strings" + + clientgenargs "k8s.io/code-generator/cmd/client-gen/args" + "k8s.io/code-generator/cmd/client-gen/generators/fake" + "k8s.io/code-generator/cmd/client-gen/generators/scheme" + "k8s.io/code-generator/cmd/client-gen/generators/util" + "k8s.io/code-generator/cmd/client-gen/path" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + codegennamer "k8s.io/code-generator/pkg/namer" + genutil "k8s.io/code-generator/pkg/util" + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems(pluralExceptions map[string]string) namer.NameSystems { + lowercaseNamer := namer.NewAllLowercasePluralNamer(pluralExceptions) + + publicNamer := &ExceptionNamer{ + Exceptions: map[string]string{ + // these exceptions are used to deconflict the generated code + // you can put your fully qualified package like + // to generate a name that doesn't conflict with your group. + // "k8s.io/apis/events/v1beta1.Event": "EventResource" + }, + KeyFunc: func(t *types.Type) string { + return t.Name.Package + "." + t.Name.Name + }, + Delegate: namer.NewPublicNamer(0), + } + privateNamer := &ExceptionNamer{ + Exceptions: map[string]string{ + // these exceptions are used to deconflict the generated code + // you can put your fully qualified package like + // to generate a name that doesn't conflict with your group. + // "k8s.io/apis/events/v1beta1.Event": "eventResource" + }, + KeyFunc: func(t *types.Type) string { + return t.Name.Package + "." + t.Name.Name + }, + Delegate: namer.NewPrivateNamer(0), + } + publicPluralNamer := &ExceptionNamer{ + Exceptions: map[string]string{ + // these exceptions are used to deconflict the generated code + // you can put your fully qualified package like + // to generate a name that doesn't conflict with your group. + // "k8s.io/apis/events/v1beta1.Event": "EventResource" + }, + KeyFunc: func(t *types.Type) string { + return t.Name.Package + "." + t.Name.Name + }, + Delegate: namer.NewPublicPluralNamer(pluralExceptions), + } + privatePluralNamer := &ExceptionNamer{ + Exceptions: map[string]string{ + // you can put your fully qualified package like + // to generate a name that doesn't conflict with your group. + // "k8s.io/apis/events/v1beta1.Event": "eventResource" + // these exceptions are used to deconflict the generated code + "k8s.io/apis/events/v1beta1.Event": "eventResources", + "k8s.io/kubernetes/pkg/apis/events.Event": "eventResources", + }, + KeyFunc: func(t *types.Type) string { + return t.Name.Package + "." + t.Name.Name + }, + Delegate: namer.NewPrivatePluralNamer(pluralExceptions), + } + + return namer.NameSystems{ + "singularKind": namer.NewPublicNamer(0), + "public": publicNamer, + "private": privateNamer, + "raw": namer.NewRawNamer("", nil), + "publicPlural": publicPluralNamer, + "privatePlural": privatePluralNamer, + "allLowercasePlural": lowercaseNamer, + "resource": codegennamer.NewTagOverrideNamer("resourceName", lowercaseNamer), + } +} + +// ExceptionNamer allows you specify exceptional cases with exact names. This allows you to have control +// for handling various conflicts, like group and resource names for instance. +type ExceptionNamer struct { + Exceptions map[string]string + KeyFunc func(*types.Type) string + + Delegate namer.Namer +} + +// Name provides the requested name for a type. +func (n *ExceptionNamer) Name(t *types.Type) string { + key := n.KeyFunc(t) + if exception, ok := n.Exceptions[key]; ok { + return exception + } + return n.Delegate.Name(t) +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, apiPath string, srcTreePath string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package { + groupVersionClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty())) + return &generator.DefaultPackage{ + PackageName: strings.ToLower(gv.Version.NonEmpty()), + PackagePath: groupVersionClientPackage, + HeaderText: boilerplate, + PackageDocumentation: []byte("// This package has the automatically generated typed clients.\n"), + // GeneratorFunc returns a list of generators. Each generator makes a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + // Always generate a "doc.go" file. + generator.DefaultGen{OptionalName: "doc"}, + } + // Since we want a file per type that we generate a client for, we + // have to provide a function for this. + for _, t := range typeList { + generators = append(generators, &genClientForType{ + DefaultGen: generator.DefaultGen{ + OptionalName: strings.ToLower(c.Namers["private"].Name(t)), + }, + outputPackage: groupVersionClientPackage, + inputPackage: inputPackage, + clientsetPackage: clientsetPackage, + applyConfigurationPackage: applyBuilderPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + typeToMatch: t, + imports: generator.NewImportTracker(), + }) + } + + generators = append(generators, &genGroup{ + DefaultGen: generator.DefaultGen{ + OptionalName: groupPackageName + "_client", + }, + outputPackage: groupVersionClientPackage, + inputPackage: inputPackage, + clientsetPackage: clientsetPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + apiPath: apiPath, + types: typeList, + imports: generator.NewImportTracker(), + }) + + expansionFileName := "generated_expansion" + generators = append(generators, &genExpansion{ + groupPackagePath: filepath.Join(srcTreePath, groupVersionClientPackage), + DefaultGen: generator.DefaultGen{ + OptionalName: expansionFileName, + }, + types: typeList, + }) + + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)).GenerateClient + }, + } +} + +func packageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package { + return &generator.DefaultPackage{ + PackageName: customArgs.ClientsetName, + PackagePath: clientsetPackage, + HeaderText: boilerplate, + // GeneratorFunc returns a list of generators. Each generator generates a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + &genClientset{ + DefaultGen: generator.DefaultGen{ + OptionalName: "clientset", + }, + groups: customArgs.Groups, + groupGoNames: groupGoNames, + clientsetPackage: clientsetPackage, + outputPackage: customArgs.ClientsetName, + imports: generator.NewImportTracker(), + }, + } + return generators + }, + } +} + +func packageForScheme(customArgs *clientgenargs.CustomArgs, clientsetPackage string, srcTreePath string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package { + schemePackage := filepath.Join(clientsetPackage, "scheme") + + // create runtime.Registry for internal client because it has to know about group versions + internalClient := false +NextGroup: + for _, group := range customArgs.Groups { + for _, v := range group.Versions { + if v.String() == "" { + internalClient = true + break NextGroup + } + } + } + + return &generator.DefaultPackage{ + PackageName: "scheme", + PackagePath: schemePackage, + HeaderText: boilerplate, + PackageDocumentation: []byte("// This package contains the scheme of the automatically generated clientset.\n"), + // GeneratorFunc returns a list of generators. Each generator generates a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + // Always generate a "doc.go" file. + generator.DefaultGen{OptionalName: "doc"}, + + &scheme.GenScheme{ + DefaultGen: generator.DefaultGen{ + OptionalName: "register", + }, + InputPackages: customArgs.GroupVersionPackages(), + OutputPackage: schemePackage, + OutputPath: filepath.Join(srcTreePath, schemePackage), + Groups: customArgs.Groups, + GroupGoNames: groupGoNames, + ImportTracker: generator.NewImportTracker(), + CreateRegistry: internalClient, + }, + } + return generators + }, + } +} + +// applyGroupOverrides applies group name overrides to each package, if applicable. If there is a +// comment of the form "// +groupName=somegroup" or "// +groupName=somegroup.foo.bar.io", use the +// first field (somegroup) as the name of the group in Go code, e.g. as the func name in a clientset. +// +// If the first field of the groupName is not unique within the clientset, use "// +groupName=unique +func applyGroupOverrides(universe types.Universe, customArgs *clientgenargs.CustomArgs) { + // Create a map from "old GV" to "new GV" so we know what changes we need to make. + changes := make(map[clientgentypes.GroupVersion]clientgentypes.GroupVersion) + for gv, inputDir := range customArgs.GroupVersionPackages() { + p := universe.Package(genutil.Vendorless(inputDir)) + if override := types.ExtractCommentTags("+", p.Comments)["groupName"]; override != nil { + newGV := clientgentypes.GroupVersion{ + Group: clientgentypes.Group(override[0]), + Version: gv.Version, + } + changes[gv] = newGV + } + } + + // Modify customArgs.Groups based on the groupName overrides. + newGroups := make([]clientgentypes.GroupVersions, 0, len(customArgs.Groups)) + for _, gvs := range customArgs.Groups { + gv := clientgentypes.GroupVersion{ + Group: gvs.Group, + Version: gvs.Versions[0].Version, // we only need a version, and the first will do + } + if newGV, ok := changes[gv]; ok { + // There's an override, so use it. + newGVS := clientgentypes.GroupVersions{ + PackageName: gvs.PackageName, + Group: newGV.Group, + Versions: gvs.Versions, + } + newGroups = append(newGroups, newGVS) + } else { + // No override. + newGroups = append(newGroups, gvs) + } + } + customArgs.Groups = newGroups +} + +// Packages makes the client package definition. +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + customArgs, ok := arguments.CustomArgs.(*clientgenargs.CustomArgs) + if !ok { + klog.Fatalf("cannot convert arguments.CustomArgs to clientgenargs.CustomArgs") + } + includedTypesOverrides := customArgs.IncludedTypesOverrides + + applyGroupOverrides(context.Universe, customArgs) + + gvToTypes := map[clientgentypes.GroupVersion][]*types.Type{} + groupGoNames := make(map[clientgentypes.GroupVersion]string) + for gv, inputDir := range customArgs.GroupVersionPackages() { + p := context.Universe.Package(path.Vendorless(inputDir)) + + // If there's a comment of the form "// +groupGoName=SomeUniqueShortName", use that as + // the Go group identifier in CamelCase. It defaults + groupGoNames[gv] = namer.IC(strings.Split(gv.Group.NonEmpty(), ".")[0]) + if override := types.ExtractCommentTags("+", p.Comments)["groupGoName"]; override != nil { + groupGoNames[gv] = namer.IC(override[0]) + } + + // Package are indexed with the vendor prefix stripped + for n, t := range p.Types { + // filter out types which are not included in user specified overrides. + typesOverride, ok := includedTypesOverrides[gv] + if ok { + found := false + for _, typeStr := range typesOverride { + if typeStr == n { + found = true + break + } + } + if !found { + continue + } + } else { + // User has not specified any override for this group version. + // filter out types which don't have genclient. + if tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)); !tags.GenerateClient { + continue + } + } + if _, found := gvToTypes[gv]; !found { + gvToTypes[gv] = []*types.Type{} + } + gvToTypes[gv] = append(gvToTypes[gv], t) + } + } + + var packageList []generator.Package + clientsetPackage := filepath.Join(arguments.OutputPackagePath, customArgs.ClientsetName) + + packageList = append(packageList, packageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate)) + packageList = append(packageList, packageForScheme(customArgs, clientsetPackage, arguments.OutputBase, groupGoNames, boilerplate)) + if customArgs.FakeClient { + packageList = append(packageList, fake.PackageForClientset(customArgs, clientsetPackage, groupGoNames, boilerplate)) + } + + // If --clientset-only=true, we don't regenerate the individual typed clients. + if customArgs.ClientsetOnly { + return generator.Packages(packageList) + } + + orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} + gvPackages := customArgs.GroupVersionPackages() + for _, group := range customArgs.Groups { + for _, version := range group.Versions { + gv := clientgentypes.GroupVersion{Group: group.Group, Version: version.Version} + types := gvToTypes[gv] + inputPath := gvPackages[gv] + packageList = append(packageList, packageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], customArgs.ClientsetAPIPath, arguments.OutputBase, inputPath, customArgs.ApplyConfigurationPackage, boilerplate)) + if customArgs.FakeClient { + packageList = append(packageList, fake.PackageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], inputPath, customArgs.ApplyConfigurationPackage, boilerplate)) + } + } + } + + return generator.Packages(packageList) +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go new file mode 100644 index 000000000000..1794909148f1 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go @@ -0,0 +1,131 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fake + +import ( + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" + + clientgenargs "k8s.io/code-generator/cmd/client-gen/args" + scheme "k8s.io/code-generator/cmd/client-gen/generators/scheme" + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" +) + +func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package { + outputPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty()), "fake") + // TODO: should make this a function, called by here and in client-generator.go + realClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty())) + return &generator.DefaultPackage{ + PackageName: "fake", + PackagePath: outputPackage, + HeaderText: boilerplate, + PackageDocumentation: []byte( + `// Package fake has the automatically generated clients. +`), + // GeneratorFunc returns a list of generators. Each generator makes a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + // Always generate a "doc.go" file. + generator.DefaultGen{OptionalName: "doc"}, + } + // Since we want a file per type that we generate a client for, we + // have to provide a function for this. + for _, t := range typeList { + generators = append(generators, &genFakeForType{ + DefaultGen: generator.DefaultGen{ + OptionalName: "fake_" + strings.ToLower(c.Namers["private"].Name(t)), + }, + outputPackage: outputPackage, + inputPackage: inputPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + typeToMatch: t, + imports: generator.NewImportTracker(), + applyConfigurationPackage: applyBuilderPackage, + }) + } + + generators = append(generators, &genFakeForGroup{ + DefaultGen: generator.DefaultGen{ + OptionalName: "fake_" + groupPackageName + "_client", + }, + outputPackage: outputPackage, + realClientPackage: realClientPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + types: typeList, + imports: generator.NewImportTracker(), + }) + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)).GenerateClient + }, + } +} + +func PackageForClientset(customArgs *clientgenargs.CustomArgs, clientsetPackage string, groupGoNames map[clientgentypes.GroupVersion]string, boilerplate []byte) generator.Package { + return &generator.DefaultPackage{ + // TODO: we'll generate fake clientset for different release in the future. + // Package name and path are hard coded for now. + PackageName: "fake", + PackagePath: filepath.Join(clientsetPackage, "fake"), + HeaderText: boilerplate, + PackageDocumentation: []byte( + `// This package has the automatically generated fake clientset. +`), + // GeneratorFunc returns a list of generators. Each generator generates a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + // Always generate a "doc.go" file. + generator.DefaultGen{OptionalName: "doc"}, + + &genClientset{ + DefaultGen: generator.DefaultGen{ + OptionalName: "clientset_generated", + }, + groups: customArgs.Groups, + groupGoNames: groupGoNames, + fakeClientsetPackage: clientsetPackage, + outputPackage: "fake", + imports: generator.NewImportTracker(), + realClientsetPackage: clientsetPackage, + }, + &scheme.GenScheme{ + DefaultGen: generator.DefaultGen{ + OptionalName: "register", + }, + InputPackages: customArgs.GroupVersionPackages(), + OutputPackage: clientsetPackage, + Groups: customArgs.Groups, + GroupGoNames: groupGoNames, + ImportTracker: generator.NewImportTracker(), + PrivateScheme: true, + }, + } + return generators + }, + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go new file mode 100644 index 000000000000..cd731cb9d666 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go @@ -0,0 +1,170 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fake + +import ( + "fmt" + "io" + "path/filepath" + "strings" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// genClientset generates a package for a clientset. +type genClientset struct { + generator.DefaultGen + groups []clientgentypes.GroupVersions + groupGoNames map[clientgentypes.GroupVersion]string + fakeClientsetPackage string + outputPackage string + imports namer.ImportTracker + clientsetGenerated bool + // the import path of the generated real clientset. + realClientsetPackage string +} + +var _ generator.Generator = &genClientset{} + +func (g *genClientset) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +// We only want to call GenerateType() once. +func (g *genClientset) Filter(c *generator.Context, t *types.Type) bool { + ret := !g.clientsetGenerated + g.clientsetGenerated = true + return ret +} + +func (g *genClientset) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + for _, group := range g.groups { + for _, version := range group.Versions { + groupClientPackage := filepath.Join(g.fakeClientsetPackage, "typed", strings.ToLower(group.PackageName), strings.ToLower(version.NonEmpty())) + fakeGroupClientPackage := filepath.Join(groupClientPackage, "fake") + + groupAlias := strings.ToLower(g.groupGoNames[clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}]) + imports = append(imports, fmt.Sprintf("%s%s \"%s\"", groupAlias, strings.ToLower(version.NonEmpty()), groupClientPackage)) + imports = append(imports, fmt.Sprintf("fake%s%s \"%s\"", groupAlias, strings.ToLower(version.NonEmpty()), fakeGroupClientPackage)) + } + } + // the package that has the clientset Interface + imports = append(imports, fmt.Sprintf("clientset \"%s\"", g.realClientsetPackage)) + // imports for the code in commonTemplate + imports = append(imports, + "k8s.io/client-go/testing", + "k8s.io/client-go/discovery", + "fakediscovery \"k8s.io/client-go/discovery/fake\"", + "k8s.io/apimachinery/pkg/runtime", + "k8s.io/apimachinery/pkg/watch", + ) + + return +} + +func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + // TODO: We actually don't need any type information to generate the clientset, + // perhaps we can adapt the go2ild framework to this kind of usage. + sw := generator.NewSnippetWriter(w, c, "$", "$") + + allGroups := clientgentypes.ToGroupVersionInfo(g.groups, g.groupGoNames) + + sw.Do(common, nil) + sw.Do(checkImpl, nil) + + for _, group := range allGroups { + m := map[string]interface{}{ + "group": group.Group, + "version": group.Version, + "PackageAlias": group.PackageAlias, + "GroupGoName": group.GroupGoName, + "Version": namer.IC(group.Version.String()), + } + + sw.Do(clientsetInterfaceImplTemplate, m) + } + + return sw.Error() +} + +// This part of code is version-independent, unchanging. +var common = ` +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} +` + +var checkImpl = ` +var ( + _ clientset.Interface = &Clientset{} + _ testing.FakeClient = &Clientset{} +) +` + +var clientsetInterfaceImplTemplate = ` +// $.GroupGoName$$.Version$ retrieves the $.GroupGoName$$.Version$Client +func (c *Clientset) $.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface { + return &fake$.PackageAlias$.Fake$.GroupGoName$$.Version${Fake: &c.Fake} +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_group.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_group.go new file mode 100644 index 000000000000..8f4d5785ef94 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_group.go @@ -0,0 +1,130 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fake + +import ( + "fmt" + "io" + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// genFakeForGroup produces a file for a group client, e.g. ExtensionsClient for the extension group. +type genFakeForGroup struct { + generator.DefaultGen + outputPackage string + realClientPackage string + group string + version string + groupGoName string + // types in this group + types []*types.Type + imports namer.ImportTracker + // If the genGroup has been called. This generator should only execute once. + called bool +} + +var _ generator.Generator = &genFakeForGroup{} + +// We only want to call GenerateType() once per group. +func (g *genFakeForGroup) Filter(c *generator.Context, t *types.Type) bool { + if !g.called { + g.called = true + return true + } + return false +} + +func (g *genFakeForGroup) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genFakeForGroup) Imports(c *generator.Context) (imports []string) { + imports = g.imports.ImportLines() + if len(g.types) != 0 { + imports = append(imports, fmt.Sprintf("%s \"%s\"", strings.ToLower(filepath.Base(g.realClientPackage)), g.realClientPackage)) + } + return imports +} + +func (g *genFakeForGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + m := map[string]interface{}{ + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "Fake": c.Universe.Type(types.Name{Package: "k8s.io/client-go/testing", Name: "Fake"}), + "RESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), + "RESTClient": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClient"}), + } + + sw.Do(groupClientTemplate, m) + for _, t := range g.types { + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + wrapper := map[string]interface{}{ + "type": t, + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "realClientPackage": strings.ToLower(filepath.Base(g.realClientPackage)), + } + if tags.NonNamespaced { + sw.Do(getterImplNonNamespaced, wrapper) + continue + } + sw.Do(getterImplNamespaced, wrapper) + } + sw.Do(getRESTClient, m) + return sw.Error() +} + +var groupClientTemplate = ` +type Fake$.GroupGoName$$.Version$ struct { + *$.Fake|raw$ +} +` + +var getterImplNamespaced = ` +func (c *Fake$.GroupGoName$$.Version$) $.type|publicPlural$(namespace string) $.realClientPackage$.$.type|public$Interface { + return &Fake$.type|publicPlural${c, namespace} +} +` + +var getterImplNonNamespaced = ` +func (c *Fake$.GroupGoName$$.Version$) $.type|publicPlural$() $.realClientPackage$.$.type|public$Interface { + return &Fake$.type|publicPlural${c} +} +` + +var getRESTClient = ` +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *Fake$.GroupGoName$$.Version$) RESTClient() $.RESTClientInterface|raw$ { + var ret *$.RESTClient|raw$ + return ret +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go new file mode 100644 index 000000000000..dce920ad1999 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go @@ -0,0 +1,570 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fake + +import ( + "io" + gopath "path" + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// genFakeForType produces a file for each top-level type. +type genFakeForType struct { + generator.DefaultGen + outputPackage string + group string + version string + groupGoName string + inputPackage string + typeToMatch *types.Type + imports namer.ImportTracker + applyConfigurationPackage string +} + +var _ generator.Generator = &genFakeForType{} + +// Filter ignores all but one type because we're making a single file per type. +func (g *genFakeForType) Filter(c *generator.Context, t *types.Type) bool { return t == g.typeToMatch } + +func (g *genFakeForType) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genFakeForType) Imports(c *generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +// Ideally, we'd like genStatus to return true if there is a subresource path +// registered for "status" in the API server, but we do not have that +// information, so genStatus returns true if the type has a status field. +func genStatus(t *types.Type) bool { + // Default to true if we have a Status member + hasStatus := false + for _, m := range t.Members { + if m.Name == "Status" { + hasStatus = true + break + } + } + + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + return hasStatus && !tags.NoStatus +} + +// hasObjectMeta returns true if the type has a ObjectMeta field. +func hasObjectMeta(t *types.Type) bool { + for _, m := range t.Members { + if m.Embedded == true && m.Name == "ObjectMeta" { + return true + } + } + return false +} + +// GenerateType makes the body of a file implementing the individual typed client for type t. +func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + pkg := filepath.Base(t.Name.Package) + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + + const pkgClientGoTesting = "k8s.io/client-go/testing" + m := map[string]interface{}{ + "type": t, + "inputType": t, + "resultType": t, + "subresourcePath": "", + "package": pkg, + "Package": namer.IC(pkg), + "namespaced": !tags.NonNamespaced, + "Group": namer.IC(g.group), + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "version": g.version, + "SchemeGroupVersion": c.Universe.Type(types.Name{Package: t.Name.Package, Name: "SchemeGroupVersion"}), + "CreateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "CreateOptions"}), + "DeleteOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "DeleteOptions"}), + "GetOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}), + "ListOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"}), + "PatchOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "PatchOptions"}), + "ApplyOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ApplyOptions"}), + "UpdateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "UpdateOptions"}), + "Everything": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/labels", Name: "Everything"}), + "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), + "ApplyPatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "ApplyPatchType"}), + "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), + "jsonMarshal": c.Universe.Type(types.Name{Package: "encoding/json", Name: "Marshal"}), + + "NewRootListAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootListAction"}), + "NewListAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewListAction"}), + "NewRootGetAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootGetAction"}), + "NewGetAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewGetAction"}), + "NewRootDeleteAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootDeleteAction"}), + "NewRootDeleteActionWithOptions": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootDeleteActionWithOptions"}), + "NewDeleteAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewDeleteAction"}), + "NewDeleteActionWithOptions": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewDeleteActionWithOptions"}), + "NewRootDeleteCollectionAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootDeleteCollectionAction"}), + "NewDeleteCollectionAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewDeleteCollectionAction"}), + "NewRootUpdateAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootUpdateAction"}), + "NewUpdateAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewUpdateAction"}), + "NewRootCreateAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootCreateAction"}), + "NewCreateAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewCreateAction"}), + "NewRootWatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootWatchAction"}), + "NewWatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewWatchAction"}), + "NewCreateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewCreateSubresourceAction"}), + "NewRootCreateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootCreateSubresourceAction"}), + "NewUpdateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewUpdateSubresourceAction"}), + "NewGetSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewGetSubresourceAction"}), + "NewRootGetSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootGetSubresourceAction"}), + "NewRootUpdateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootUpdateSubresourceAction"}), + "NewRootPatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootPatchAction"}), + "NewPatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewPatchAction"}), + "NewRootPatchSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootPatchSubresourceAction"}), + "NewPatchSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewPatchSubresourceAction"}), + "ExtractFromListOptions": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "ExtractFromListOptions"}), + } + + generateApply := len(g.applyConfigurationPackage) > 0 + if generateApply { + // Generated apply builder type references required for generated Apply function + _, gvString := util.ParsePathGroupVersion(g.inputPackage) + m["inputApplyConfig"] = types.Ref(gopath.Join(g.applyConfigurationPackage, gvString), t.Name.Name+"ApplyConfiguration") + } + + if tags.NonNamespaced { + sw.Do(structNonNamespaced, m) + } else { + sw.Do(structNamespaced, m) + } + + if tags.NoVerbs { + return sw.Error() + } + sw.Do(resource, m) + sw.Do(kind, m) + + if tags.HasVerb("get") { + sw.Do(getTemplate, m) + } + if tags.HasVerb("list") { + if hasObjectMeta(t) { + sw.Do(listUsingOptionsTemplate, m) + } else { + sw.Do(listTemplate, m) + } + } + if tags.HasVerb("watch") { + sw.Do(watchTemplate, m) + } + + if tags.HasVerb("create") { + sw.Do(createTemplate, m) + } + if tags.HasVerb("update") { + sw.Do(updateTemplate, m) + } + if tags.HasVerb("updateStatus") && genStatus(t) { + sw.Do(updateStatusTemplate, m) + } + if tags.HasVerb("delete") { + sw.Do(deleteTemplate, m) + } + if tags.HasVerb("deleteCollection") { + sw.Do(deleteCollectionTemplate, m) + } + if tags.HasVerb("patch") { + sw.Do(patchTemplate, m) + } + if tags.HasVerb("apply") && generateApply { + sw.Do(applyTemplate, m) + } + if tags.HasVerb("applyStatus") && generateApply && genStatus(t) { + sw.Do(applyStatusTemplate, m) + } + _, typeGVString := util.ParsePathGroupVersion(g.inputPackage) + + // generate extended client methods + for _, e := range tags.Extensions { + if e.HasVerb("apply") && !generateApply { + continue + } + inputType := *t + resultType := *t + inputGVString := typeGVString + if len(e.InputTypeOverride) > 0 { + if name, pkg := e.Input(); len(pkg) > 0 { + _, inputGVString = util.ParsePathGroupVersion(pkg) + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + inputType = *newType + } else { + inputType.Name.Name = e.InputTypeOverride + } + } + if len(e.ResultTypeOverride) > 0 { + if name, pkg := e.Result(); len(pkg) > 0 { + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + resultType = *newType + } else { + resultType.Name.Name = e.ResultTypeOverride + } + } + m["inputType"] = &inputType + m["resultType"] = &resultType + m["subresourcePath"] = e.SubResourcePath + if e.HasVerb("apply") { + m["inputApplyConfig"] = types.Ref(gopath.Join(g.applyConfigurationPackage, inputGVString), inputType.Name.Name+"ApplyConfiguration") + } + + if e.HasVerb("get") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, getSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, getTemplate), m) + } + } + + if e.HasVerb("list") { + + sw.Do(adjustTemplate(e.VerbName, e.VerbType, listTemplate), m) + } + + // TODO: Figure out schemantic for watching a sub-resource. + if e.HasVerb("watch") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, watchTemplate), m) + } + + if e.HasVerb("create") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, createSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, createTemplate), m) + } + } + + if e.HasVerb("update") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, updateSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, updateTemplate), m) + } + } + + // TODO: Figure out schemantic for deleting a sub-resource (what arguments + // are passed, does it need two names? etc. + if e.HasVerb("delete") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, deleteTemplate), m) + } + + if e.HasVerb("patch") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, patchTemplate), m) + } + + if e.HasVerb("apply") && generateApply { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applySubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applyTemplate), m) + } + } + } + + return sw.Error() +} + +// adjustTemplate adjust the origin verb template using the expansion name. +// TODO: Make the verbs in templates parametrized so the strings.Replace() is +// not needed. +func adjustTemplate(name, verbType, template string) string { + return strings.Replace(template, " "+strings.Title(verbType), " "+name, -1) +} + +// template for the struct that implements the type's interface +var structNamespaced = ` +// Fake$.type|publicPlural$ implements $.type|public$Interface +type Fake$.type|publicPlural$ struct { + Fake *Fake$.GroupGoName$$.Version$ + ns string +} +` + +// template for the struct that implements the type's interface +var structNonNamespaced = ` +// Fake$.type|publicPlural$ implements $.type|public$Interface +type Fake$.type|publicPlural$ struct { + Fake *Fake$.GroupGoName$$.Version$ +} +` + +var resource = ` +var $.type|allLowercasePlural$Resource = $.SchemeGroupVersion|raw$.WithResource("$.type|resource$") +` + +var kind = ` +var $.type|allLowercasePlural$Kind = $.SchemeGroupVersion|raw$.WithKind("$.type|singularKind$") +` + +var listTemplate = ` +// List takes label and field selectors, and returns the list of $.type|publicPlural$ that match those selectors. +func (c *Fake$.type|publicPlural$) List(ctx context.Context, opts $.ListOptions|raw$) (result *$.type|raw$List, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, c.ns, opts), &$.type|raw$List{}) + $else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, opts), &$.type|raw$List{})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.type|raw$List), err +} +` + +var listUsingOptionsTemplate = ` +// List takes label and field selectors, and returns the list of $.type|publicPlural$ that match those selectors. +func (c *Fake$.type|publicPlural$) List(ctx context.Context, opts $.ListOptions|raw$) (result *$.type|raw$List, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, c.ns, opts), &$.type|raw$List{}) + $else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, opts), &$.type|raw$List{})$end$ + if obj == nil { + return nil, err + } + + label, _, _ := $.ExtractFromListOptions|raw$(opts) + if label == nil { + label = $.Everything|raw$() + } + list := &$.type|raw$List{ListMeta: obj.(*$.type|raw$List).ListMeta} + for _, item := range obj.(*$.type|raw$List).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} +` + +var getTemplate = ` +// Get takes name of the $.type|private$, and returns the corresponding $.resultType|private$ object, and an error if there is any. +func (c *Fake$.type|publicPlural$) Get(ctx context.Context, name string, options $.GetOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewGetAction|raw$($.type|allLowercasePlural$Resource, c.ns, name), &$.resultType|raw${}) + $else$Invokes($.NewRootGetAction|raw$($.type|allLowercasePlural$Resource, name), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var getSubresourceTemplate = ` +// Get takes name of the $.type|private$, and returns the corresponding $.resultType|private$ object, and an error if there is any. +func (c *Fake$.type|publicPlural$) Get(ctx context.Context, $.type|private$Name string, options $.GetOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewGetSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, "$.subresourcePath$", $.type|private$Name), &$.resultType|raw${}) + $else$Invokes($.NewRootGetSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", $.type|private$Name), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var deleteTemplate = ` +// Delete takes name of the $.type|private$ and deletes it. Returns an error if one occurs. +func (c *Fake$.type|publicPlural$) Delete(ctx context.Context, name string, opts $.DeleteOptions|raw$) error { + _, err := c.Fake. + $if .namespaced$Invokes($.NewDeleteActionWithOptions|raw$($.type|allLowercasePlural$Resource, c.ns, name, opts), &$.type|raw${}) + $else$Invokes($.NewRootDeleteActionWithOptions|raw$($.type|allLowercasePlural$Resource, name, opts), &$.type|raw${})$end$ + return err +} +` + +var deleteCollectionTemplate = ` +// DeleteCollection deletes a collection of objects. +func (c *Fake$.type|publicPlural$) DeleteCollection(ctx context.Context, opts $.DeleteOptions|raw$, listOpts $.ListOptions|raw$) error { + $if .namespaced$action := $.NewDeleteCollectionAction|raw$($.type|allLowercasePlural$Resource, c.ns, listOpts) + $else$action := $.NewRootDeleteCollectionAction|raw$($.type|allLowercasePlural$Resource, listOpts) + $end$ + _, err := c.Fake.Invokes(action, &$.type|raw$List{}) + return err +} +` +var createTemplate = ` +// Create takes the representation of a $.inputType|private$ and creates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *Fake$.type|publicPlural$) Create(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewCreateAction|raw$($.inputType|allLowercasePlural$Resource, c.ns, $.inputType|private$), &$.resultType|raw${}) + $else$Invokes($.NewRootCreateAction|raw$($.inputType|allLowercasePlural$Resource, $.inputType|private$), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var createSubresourceTemplate = ` +// Create takes the representation of a $.inputType|private$ and creates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *Fake$.type|publicPlural$) Create(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewCreateSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name, "$.subresourcePath$", c.ns, $.inputType|private$), &$.resultType|raw${}) + $else$Invokes($.NewRootCreateSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name, "$.subresourcePath$", $.inputType|private$), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var updateTemplate = ` +// Update takes the representation of a $.inputType|private$ and updates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *Fake$.type|publicPlural$) Update(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewUpdateAction|raw$($.inputType|allLowercasePlural$Resource, c.ns, $.inputType|private$), &$.resultType|raw${}) + $else$Invokes($.NewRootUpdateAction|raw$($.inputType|allLowercasePlural$Resource, $.inputType|private$), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var updateSubresourceTemplate = ` +// Update takes the representation of a $.inputType|private$ and updates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *Fake$.type|publicPlural$) Update(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", c.ns, $.inputType|private$), &$.inputType|raw${}) + $else$Invokes($.NewRootUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", $.inputType|private$), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var updateStatusTemplate = ` +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *Fake$.type|publicPlural$) UpdateStatus(ctx context.Context, $.type|private$ *$.type|raw$, opts $.UpdateOptions|raw$) (*$.type|raw$, error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "status", c.ns, $.type|private$), &$.type|raw${}) + $else$Invokes($.NewRootUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "status", $.type|private$), &$.type|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.type|raw$), err +} +` + +var watchTemplate = ` +// Watch returns a $.watchInterface|raw$ that watches the requested $.type|privatePlural$. +func (c *Fake$.type|publicPlural$) Watch(ctx context.Context, opts $.ListOptions|raw$) ($.watchInterface|raw$, error) { + return c.Fake. + $if .namespaced$InvokesWatch($.NewWatchAction|raw$($.type|allLowercasePlural$Resource, c.ns, opts)) + $else$InvokesWatch($.NewRootWatchAction|raw$($.type|allLowercasePlural$Resource, opts))$end$ +} +` + +var patchTemplate = ` +// Patch applies the patch and returns the patched $.resultType|private$. +func (c *Fake$.type|publicPlural$) Patch(ctx context.Context, name string, pt $.PatchType|raw$, data []byte, opts $.PatchOptions|raw$, subresources ...string) (result *$.resultType|raw$, err error) { + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, name, pt, data, subresources... ), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, name, pt, data, subresources...), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var applyTemplate = ` +// Apply takes the given apply declarative configuration, applies it and returns the applied $.resultType|private$. +func (c *Fake$.type|publicPlural$) Apply(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, *name, $.ApplyPatchType|raw$, data), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, *name, $.ApplyPatchType|raw$, data), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var applyStatusTemplate = ` +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *Fake$.type|publicPlural$) ApplyStatus(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, *name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, *name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var applySubresourceTemplate = ` +// Apply takes top resource name and the apply declarative configuration for $.subresourcePath$, +// applies it and returns the applied $.resultType|private$, and an error, if there is any. +func (c *Fake$.type|publicPlural$) Apply(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, $.type|private$Name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go new file mode 100644 index 000000000000..6bf1ca37f887 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go @@ -0,0 +1,209 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "io" + "path/filepath" + "strings" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// genClientset generates a package for a clientset. +type genClientset struct { + generator.DefaultGen + groups []clientgentypes.GroupVersions + groupGoNames map[clientgentypes.GroupVersion]string + clientsetPackage string + outputPackage string + imports namer.ImportTracker + clientsetGenerated bool +} + +var _ generator.Generator = &genClientset{} + +func (g *genClientset) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +// We only want to call GenerateType() once. +func (g *genClientset) Filter(c *generator.Context, t *types.Type) bool { + ret := !g.clientsetGenerated + g.clientsetGenerated = true + return ret +} + +func (g *genClientset) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + for _, group := range g.groups { + for _, version := range group.Versions { + typedClientPath := filepath.Join(g.clientsetPackage, "typed", strings.ToLower(group.PackageName), strings.ToLower(version.NonEmpty())) + groupAlias := strings.ToLower(g.groupGoNames[clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}]) + imports = append(imports, fmt.Sprintf("%s%s \"%s\"", groupAlias, strings.ToLower(version.NonEmpty()), typedClientPath)) + } + } + return +} + +func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + // TODO: We actually don't need any type information to generate the clientset, + // perhaps we can adapt the go2ild framework to this kind of usage. + sw := generator.NewSnippetWriter(w, c, "$", "$") + + allGroups := clientgentypes.ToGroupVersionInfo(g.groups, g.groupGoNames) + m := map[string]interface{}{ + "allGroups": allGroups, + "Config": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Config"}), + "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}), + "RESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), + "RESTHTTPClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "HTTPClientFor"}), + "DiscoveryInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/discovery", Name: "DiscoveryInterface"}), + "DiscoveryClient": c.Universe.Type(types.Name{Package: "k8s.io/client-go/discovery", Name: "DiscoveryClient"}), + "NewDiscoveryClientForConfigAndClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/discovery", Name: "NewDiscoveryClientForConfigAndClient"}), + "NewDiscoveryClientForConfigOrDie": c.Universe.Function(types.Name{Package: "k8s.io/client-go/discovery", Name: "NewDiscoveryClientForConfigOrDie"}), + "NewDiscoveryClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/discovery", Name: "NewDiscoveryClient"}), + "flowcontrolNewTokenBucketRateLimiter": c.Universe.Function(types.Name{Package: "k8s.io/client-go/util/flowcontrol", Name: "NewTokenBucketRateLimiter"}), + } + sw.Do(clientsetInterface, m) + sw.Do(clientsetTemplate, m) + for _, g := range allGroups { + sw.Do(clientsetInterfaceImplTemplate, g) + } + sw.Do(getDiscoveryTemplate, m) + sw.Do(newClientsetForConfigTemplate, m) + sw.Do(newClientsetForConfigAndClientTemplate, m) + sw.Do(newClientsetForConfigOrDieTemplate, m) + sw.Do(newClientsetForRESTClientTemplate, m) + + return sw.Error() +} + +var clientsetInterface = ` +type Interface interface { + Discovery() $.DiscoveryInterface|raw$ + $range .allGroups$$.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface + $end$ +} +` + +var clientsetTemplate = ` +// Clientset contains the clients for groups. +type Clientset struct { + *$.DiscoveryClient|raw$ + $range .allGroups$$.LowerCaseGroupGoName$$.Version$ *$.PackageAlias$.$.GroupGoName$$.Version$Client + $end$ +} +` + +var clientsetInterfaceImplTemplate = ` +// $.GroupGoName$$.Version$ retrieves the $.GroupGoName$$.Version$Client +func (c *Clientset) $.GroupGoName$$.Version$() $.PackageAlias$.$.GroupGoName$$.Version$Interface { + return c.$.LowerCaseGroupGoName$$.Version$ +} +` + +var getDiscoveryTemplate = ` +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() $.DiscoveryInterface|raw$ { + if c == nil { + return nil + } + return c.DiscoveryClient +} +` + +var newClientsetForConfigTemplate = ` +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *$.Config|raw$) (*Clientset, error) { + configShallowCopy := *c + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = $.DefaultKubernetesUserAgent|raw$() + } + + // share the transport between all clients + httpClient, err := $.RESTHTTPClientFor|raw$(&configShallowCopy) + if err != nil { + return nil, err + } + + return NewForConfigAndClient(&configShallowCopy, httpClient) +} +` + +var newClientsetForConfigAndClientTemplate = ` +// NewForConfigAndClient creates a new Clientset for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfigAndClient will generate a rate-limiter in configShallowCopy. +func NewForConfigAndClient(c *$.Config|raw$, httpClient *http.Client) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = $.flowcontrolNewTokenBucketRateLimiter|raw$(configShallowCopy.QPS, configShallowCopy.Burst) + } + + var cs Clientset + var err error +$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$, err =$.PackageAlias$.NewForConfigAndClient(&configShallowCopy, httpClient) + if err!=nil { + return nil, err + } +$end$ + cs.DiscoveryClient, err = $.NewDiscoveryClientForConfigAndClient|raw$(&configShallowCopy, httpClient) + if err!=nil { + return nil, err + } + return &cs, nil +} +` + +var newClientsetForConfigOrDieTemplate = ` +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *$.Config|raw$) *Clientset { + cs, err := NewForConfig(c) + if err!=nil { + panic(err) + } + return cs +} +` + +var newClientsetForRESTClientTemplate = ` +// New creates a new Clientset for the given RESTClient. +func New(c $.RESTClientInterface|raw$) *Clientset { + var cs Clientset +$range .allGroups$ cs.$.LowerCaseGroupGoName$$.Version$ =$.PackageAlias$.New(c) +$end$ + cs.DiscoveryClient = $.NewDiscoveryClient|raw$(c) + return &cs +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_expansion.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_expansion.go new file mode 100644 index 000000000000..f47c079e02fa --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_expansion.go @@ -0,0 +1,54 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "os" + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" +) + +// genExpansion produces a file for a group client, e.g. ExtensionsClient for the extension group. +type genExpansion struct { + generator.DefaultGen + groupPackagePath string + // types in a group + types []*types.Type +} + +// We only want to call GenerateType() once per group. +func (g *genExpansion) Filter(c *generator.Context, t *types.Type) bool { + return len(g.types) == 0 || t == g.types[0] +} + +func (g *genExpansion) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + for _, t := range g.types { + if _, err := os.Stat(filepath.Join(g.groupPackagePath, strings.ToLower(t.Name.Name+"_expansion.go"))); os.IsNotExist(err) { + sw.Do(expansionInterfaceTemplate, t) + } + } + return sw.Error() +} + +var expansionInterfaceTemplate = ` +type $.|public$Expansion interface {} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go new file mode 100644 index 000000000000..30284990037a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go @@ -0,0 +1,267 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "path/filepath" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + "k8s.io/code-generator/cmd/client-gen/path" +) + +// genGroup produces a file for a group client, e.g. ExtensionsClient for the extension group. +type genGroup struct { + generator.DefaultGen + outputPackage string + group string + version string + groupGoName string + apiPath string + // types in this group + types []*types.Type + imports namer.ImportTracker + inputPackage string + clientsetPackage string + // If the genGroup has been called. This generator should only execute once. + called bool +} + +var _ generator.Generator = &genGroup{} + +// We only want to call GenerateType() once per group. +func (g *genGroup) Filter(c *generator.Context, t *types.Type) bool { + if !g.called { + g.called = true + return true + } + return false +} + +func (g *genGroup) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genGroup) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + imports = append(imports, filepath.Join(g.clientsetPackage, "scheme")) + return +} + +func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + apiPath := func(group string) string { + if group == "core" { + return `"/api"` + } + return `"` + g.apiPath + `"` + } + + groupName := g.group + if g.group == "core" { + groupName = "" + } + // allow user to define a group name that's different from the one parsed from the directory. + p := c.Universe.Package(path.Vendorless(g.inputPackage)) + if override := types.ExtractCommentTags("+", p.Comments)["groupName"]; override != nil { + groupName = override[0] + } + + m := map[string]interface{}{ + "group": g.group, + "version": g.version, + "groupName": groupName, + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "types": g.types, + "apiPath": apiPath(g.group), + "schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}), + "runtimeAPIVersionInternal": c.Universe.Variable(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "APIVersionInternal"}), + "restConfig": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Config"}), + "restDefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}), + "restRESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), + "RESTHTTPClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "HTTPClientFor"}), + "restRESTClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientFor"}), + "restRESTClientForConfigAndClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientForConfigAndClient"}), + "SchemeGroupVersion": c.Universe.Variable(types.Name{Package: path.Vendorless(g.inputPackage), Name: "SchemeGroupVersion"}), + } + sw.Do(groupInterfaceTemplate, m) + sw.Do(groupClientTemplate, m) + for _, t := range g.types { + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + wrapper := map[string]interface{}{ + "type": t, + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + } + if tags.NonNamespaced { + sw.Do(getterImplNonNamespaced, wrapper) + } else { + sw.Do(getterImplNamespaced, wrapper) + } + } + sw.Do(newClientForConfigTemplate, m) + sw.Do(newClientForConfigAndClientTemplate, m) + sw.Do(newClientForConfigOrDieTemplate, m) + sw.Do(newClientForRESTClientTemplate, m) + if g.version == "" { + sw.Do(setInternalVersionClientDefaultsTemplate, m) + } else { + sw.Do(setClientDefaultsTemplate, m) + } + sw.Do(getRESTClient, m) + + return sw.Error() +} + +var groupInterfaceTemplate = ` +type $.GroupGoName$$.Version$Interface interface { + RESTClient() $.restRESTClientInterface|raw$ + $range .types$ $.|publicPlural$Getter + $end$ +} +` + +var groupClientTemplate = ` +// $.GroupGoName$$.Version$Client is used to interact with features provided by the $.groupName$ group. +type $.GroupGoName$$.Version$Client struct { + restClient $.restRESTClientInterface|raw$ +} +` + +var getterImplNamespaced = ` +func (c *$.GroupGoName$$.Version$Client) $.type|publicPlural$(namespace string) $.type|public$Interface { + return new$.type|publicPlural$(c, namespace) +} +` + +var getterImplNonNamespaced = ` +func (c *$.GroupGoName$$.Version$Client) $.type|publicPlural$() $.type|public$Interface { + return new$.type|publicPlural$(c) +} +` + +var newClientForConfigTemplate = ` +// NewForConfig creates a new $.GroupGoName$$.Version$Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *$.restConfig|raw$) (*$.GroupGoName$$.Version$Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := $.RESTHTTPClientFor|raw$(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} +` + +var newClientForConfigAndClientTemplate = ` +// NewForConfigAndClient creates a new $.GroupGoName$$.Version$Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *$.restConfig|raw$, h *http.Client) (*$.GroupGoName$$.Version$Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := $.restRESTClientForConfigAndClient|raw$(&config, h) + if err != nil { + return nil, err + } + return &$.GroupGoName$$.Version$Client{client}, nil +} +` + +var newClientForConfigOrDieTemplate = ` +// NewForConfigOrDie creates a new $.GroupGoName$$.Version$Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *$.restConfig|raw$) *$.GroupGoName$$.Version$Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} +` + +var getRESTClient = ` +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *$.GroupGoName$$.Version$Client) RESTClient() $.restRESTClientInterface|raw$ { + if c == nil { + return nil + } + return c.restClient +} +` + +var newClientForRESTClientTemplate = ` +// New creates a new $.GroupGoName$$.Version$Client for the given RESTClient. +func New(c $.restRESTClientInterface|raw$) *$.GroupGoName$$.Version$Client { + return &$.GroupGoName$$.Version$Client{c} +} +` + +var setInternalVersionClientDefaultsTemplate = ` +func setConfigDefaults(config *$.restConfig|raw$) error { + config.APIPath = $.apiPath$ + if config.UserAgent == "" { + config.UserAgent = $.restDefaultKubernetesUserAgent|raw$() + } + if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("$.groupName$")[0].Group { + gv := scheme.Scheme.PrioritizedVersionsForGroup("$.groupName$")[0] + config.GroupVersion = &gv + } + config.NegotiatedSerializer = scheme.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + + return nil +} +` + +var setClientDefaultsTemplate = ` +func setConfigDefaults(config *$.restConfig|raw$) error { + gv := $.SchemeGroupVersion|raw$ + config.GroupVersion = &gv + config.APIPath = $.apiPath$ + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = $.restDefaultKubernetesUserAgent|raw$() + } + + return nil +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go new file mode 100644 index 000000000000..fe63dd198956 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go @@ -0,0 +1,760 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "path" + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// genClientForType produces a file for each top-level type. +type genClientForType struct { + generator.DefaultGen + outputPackage string + inputPackage string + clientsetPackage string + applyConfigurationPackage string + group string + version string + groupGoName string + typeToMatch *types.Type + imports namer.ImportTracker +} + +var _ generator.Generator = &genClientForType{} + +// Filter ignores all but one type because we're making a single file per type. +func (g *genClientForType) Filter(c *generator.Context, t *types.Type) bool { + return t == g.typeToMatch +} + +func (g *genClientForType) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genClientForType) Imports(c *generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +// Ideally, we'd like genStatus to return true if there is a subresource path +// registered for "status" in the API server, but we do not have that +// information, so genStatus returns true if the type has a status field. +func genStatus(t *types.Type) bool { + // Default to true if we have a Status member + hasStatus := false + for _, m := range t.Members { + if m.Name == "Status" { + hasStatus = true + break + } + } + return hasStatus && !util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)).NoStatus +} + +// GenerateType makes the body of a file implementing the individual typed client for type t. +func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + generateApply := len(g.applyConfigurationPackage) > 0 + defaultVerbTemplates := buildDefaultVerbTemplates(generateApply) + subresourceDefaultVerbTemplates := buildSubresourceDefaultVerbTemplates(generateApply) + sw := generator.NewSnippetWriter(w, c, "$", "$") + pkg := filepath.Base(t.Name.Package) + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + type extendedInterfaceMethod struct { + template string + args map[string]interface{} + } + _, typeGVString := util.ParsePathGroupVersion(g.inputPackage) + extendedMethods := []extendedInterfaceMethod{} + for _, e := range tags.Extensions { + if e.HasVerb("apply") && !generateApply { + continue + } + inputType := *t + resultType := *t + inputGVString := typeGVString + // TODO: Extract this to some helper method as this code is copied into + // 2 other places. + if len(e.InputTypeOverride) > 0 { + if name, pkg := e.Input(); len(pkg) > 0 { + _, inputGVString = util.ParsePathGroupVersion(pkg) + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + inputType = *newType + } else { + inputType.Name.Name = e.InputTypeOverride + } + } + if len(e.ResultTypeOverride) > 0 { + if name, pkg := e.Result(); len(pkg) > 0 { + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + resultType = *newType + } else { + resultType.Name.Name = e.ResultTypeOverride + } + } + var updatedVerbtemplate string + if _, exists := subresourceDefaultVerbTemplates[e.VerbType]; e.IsSubresource() && exists { + updatedVerbtemplate = e.VerbName + "(" + strings.TrimPrefix(subresourceDefaultVerbTemplates[e.VerbType], strings.Title(e.VerbType)+"(") + } else { + updatedVerbtemplate = e.VerbName + "(" + strings.TrimPrefix(defaultVerbTemplates[e.VerbType], strings.Title(e.VerbType)+"(") + } + extendedMethod := extendedInterfaceMethod{ + template: updatedVerbtemplate, + args: map[string]interface{}{ + "type": t, + "inputType": &inputType, + "resultType": &resultType, + "CreateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "CreateOptions"}), + "GetOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}), + "ListOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"}), + "UpdateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "UpdateOptions"}), + "ApplyOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ApplyOptions"}), + "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), + "jsonMarshal": c.Universe.Type(types.Name{Package: "encoding/json", Name: "Marshal"}), + }, + } + if e.HasVerb("apply") { + extendedMethod.args["inputApplyConfig"] = types.Ref(path.Join(g.applyConfigurationPackage, inputGVString), inputType.Name.Name+"ApplyConfiguration") + } + extendedMethods = append(extendedMethods, extendedMethod) + } + m := map[string]interface{}{ + "type": t, + "inputType": t, + "resultType": t, + "package": pkg, + "Package": namer.IC(pkg), + "namespaced": !tags.NonNamespaced, + "Group": namer.IC(g.group), + "subresource": false, + "subresourcePath": "", + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "CreateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "CreateOptions"}), + "DeleteOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "DeleteOptions"}), + "GetOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}), + "ListOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"}), + "PatchOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "PatchOptions"}), + "ApplyOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ApplyOptions"}), + "UpdateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "UpdateOptions"}), + "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), + "ApplyPatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "ApplyPatchType"}), + "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), + "RESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), + "schemeParameterCodec": c.Universe.Variable(types.Name{Package: filepath.Join(g.clientsetPackage, "scheme"), Name: "ParameterCodec"}), + "jsonMarshal": c.Universe.Type(types.Name{Package: "encoding/json", Name: "Marshal"}), + } + + if generateApply { + // Generated apply configuration type references required for generated Apply function + _, gvString := util.ParsePathGroupVersion(g.inputPackage) + m["inputApplyConfig"] = types.Ref(path.Join(g.applyConfigurationPackage, gvString), t.Name.Name+"ApplyConfiguration") + } + + sw.Do(getterComment, m) + if tags.NonNamespaced { + sw.Do(getterNonNamespaced, m) + } else { + sw.Do(getterNamespaced, m) + } + + sw.Do(interfaceTemplate1, m) + if !tags.NoVerbs { + if !genStatus(t) { + tags.SkipVerbs = append(tags.SkipVerbs, "updateStatus") + tags.SkipVerbs = append(tags.SkipVerbs, "applyStatus") + } + interfaceSuffix := "" + if len(extendedMethods) > 0 { + interfaceSuffix = "\n" + } + sw.Do("\n"+generateInterface(defaultVerbTemplates, tags)+interfaceSuffix, m) + // add extended verbs into interface + for _, v := range extendedMethods { + sw.Do(v.template+interfaceSuffix, v.args) + } + + } + sw.Do(interfaceTemplate4, m) + + if tags.NonNamespaced { + sw.Do(structNonNamespaced, m) + sw.Do(newStructNonNamespaced, m) + } else { + sw.Do(structNamespaced, m) + sw.Do(newStructNamespaced, m) + } + + if tags.NoVerbs { + return sw.Error() + } + + if tags.HasVerb("get") { + sw.Do(getTemplate, m) + } + if tags.HasVerb("list") { + sw.Do(listTemplate, m) + } + if tags.HasVerb("watch") { + sw.Do(watchTemplate, m) + } + + if tags.HasVerb("create") { + sw.Do(createTemplate, m) + } + if tags.HasVerb("update") { + sw.Do(updateTemplate, m) + } + if tags.HasVerb("updateStatus") { + sw.Do(updateStatusTemplate, m) + } + if tags.HasVerb("delete") { + sw.Do(deleteTemplate, m) + } + if tags.HasVerb("deleteCollection") { + sw.Do(deleteCollectionTemplate, m) + } + if tags.HasVerb("patch") { + sw.Do(patchTemplate, m) + } + if tags.HasVerb("apply") && generateApply { + sw.Do(applyTemplate, m) + } + if tags.HasVerb("applyStatus") && generateApply { + sw.Do(applyStatusTemplate, m) + } + + // generate expansion methods + for _, e := range tags.Extensions { + if e.HasVerb("apply") && !generateApply { + continue + } + inputType := *t + resultType := *t + inputGVString := typeGVString + if len(e.InputTypeOverride) > 0 { + if name, pkg := e.Input(); len(pkg) > 0 { + _, inputGVString = util.ParsePathGroupVersion(pkg) + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + inputType = *newType + } else { + inputType.Name.Name = e.InputTypeOverride + } + } + if len(e.ResultTypeOverride) > 0 { + if name, pkg := e.Result(); len(pkg) > 0 { + newType := c.Universe.Type(types.Name{Package: pkg, Name: name}) + resultType = *newType + } else { + resultType.Name.Name = e.ResultTypeOverride + } + } + m["inputType"] = &inputType + m["resultType"] = &resultType + m["subresourcePath"] = e.SubResourcePath + if e.HasVerb("apply") { + m["inputApplyConfig"] = types.Ref(path.Join(g.applyConfigurationPackage, inputGVString), inputType.Name.Name+"ApplyConfiguration") + } + + if e.HasVerb("get") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, getSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, getTemplate), m) + } + } + + if e.HasVerb("list") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, listSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, listTemplate), m) + } + } + + // TODO: Figure out schemantic for watching a sub-resource. + if e.HasVerb("watch") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, watchTemplate), m) + } + + if e.HasVerb("create") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, createSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, createTemplate), m) + } + } + + if e.HasVerb("update") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, updateSubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, updateTemplate), m) + } + } + + // TODO: Figure out schemantic for deleting a sub-resource (what arguments + // are passed, does it need two names? etc. + if e.HasVerb("delete") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, deleteTemplate), m) + } + + if e.HasVerb("patch") { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, patchTemplate), m) + } + + if e.HasVerb("apply") { + if e.IsSubresource() { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applySubresourceTemplate), m) + } else { + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applyTemplate), m) + } + } + } + + return sw.Error() +} + +// adjustTemplate adjust the origin verb template using the expansion name. +// TODO: Make the verbs in templates parametrized so the strings.Replace() is +// not needed. +func adjustTemplate(name, verbType, template string) string { + return strings.Replace(template, " "+strings.Title(verbType), " "+name, -1) +} + +func generateInterface(defaultVerbTemplates map[string]string, tags util.Tags) string { + // need an ordered list here to guarantee order of generated methods. + out := []string{} + for _, m := range util.SupportedVerbs { + if tags.HasVerb(m) && len(defaultVerbTemplates[m]) > 0 { + out = append(out, defaultVerbTemplates[m]) + } + } + return strings.Join(out, "\n") +} + +func buildSubresourceDefaultVerbTemplates(generateApply bool) map[string]string { + m := map[string]string{ + "create": `Create(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, + "list": `List(ctx context.Context, $.type|private$Name string, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, + "update": `Update(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, + "get": `Get(ctx context.Context, $.type|private$Name string, options $.GetOptions|raw$) (*$.resultType|raw$, error)`, + } + if generateApply { + m["apply"] = `Apply(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (*$.resultType|raw$, error)` + } + return m +} + +func buildDefaultVerbTemplates(generateApply bool) map[string]string { + m := map[string]string{ + "create": `Create(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, + "update": `Update(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, + "updateStatus": `UpdateStatus(ctx context.Context, $.inputType|private$ *$.type|raw$, opts $.UpdateOptions|raw$) (*$.type|raw$, error)`, + "delete": `Delete(ctx context.Context, name string, opts $.DeleteOptions|raw$) error`, + "deleteCollection": `DeleteCollection(ctx context.Context, opts $.DeleteOptions|raw$, listOpts $.ListOptions|raw$) error`, + "get": `Get(ctx context.Context, name string, opts $.GetOptions|raw$) (*$.resultType|raw$, error)`, + "list": `List(ctx context.Context, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, + "watch": `Watch(ctx context.Context, opts $.ListOptions|raw$) ($.watchInterface|raw$, error)`, + "patch": `Patch(ctx context.Context, name string, pt $.PatchType|raw$, data []byte, opts $.PatchOptions|raw$, subresources ...string) (result *$.resultType|raw$, err error)`, + } + if generateApply { + m["apply"] = `Apply(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error)` + m["applyStatus"] = `ApplyStatus(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error)` + } + return m +} + +// group client will implement this interface. +var getterComment = ` +// $.type|publicPlural$Getter has a method to return a $.type|public$Interface. +// A group's client should implement this interface.` + +var getterNamespaced = ` +type $.type|publicPlural$Getter interface { + $.type|publicPlural$(namespace string) $.type|public$Interface +} +` + +var getterNonNamespaced = ` +type $.type|publicPlural$Getter interface { + $.type|publicPlural$() $.type|public$Interface +} +` + +// this type's interface, typed client will implement this interface. +var interfaceTemplate1 = ` +// $.type|public$Interface has methods to work with $.type|public$ resources. +type $.type|public$Interface interface {` + +var interfaceTemplate4 = ` + $.type|public$Expansion +} +` + +// template for the struct that implements the type's interface +var structNamespaced = ` +// $.type|privatePlural$ implements $.type|public$Interface +type $.type|privatePlural$ struct { + client $.RESTClientInterface|raw$ + ns string +} +` + +// template for the struct that implements the type's interface +var structNonNamespaced = ` +// $.type|privatePlural$ implements $.type|public$Interface +type $.type|privatePlural$ struct { + client $.RESTClientInterface|raw$ +} +` + +var newStructNamespaced = ` +// new$.type|publicPlural$ returns a $.type|publicPlural$ +func new$.type|publicPlural$(c *$.GroupGoName$$.Version$Client, namespace string) *$.type|privatePlural$ { + return &$.type|privatePlural${ + client: c.RESTClient(), + ns: namespace, + } +} +` + +var newStructNonNamespaced = ` +// new$.type|publicPlural$ returns a $.type|publicPlural$ +func new$.type|publicPlural$(c *$.GroupGoName$$.Version$Client) *$.type|privatePlural$ { + return &$.type|privatePlural${ + client: c.RESTClient(), + } +} +` +var listTemplate = ` +// List takes label and field selectors, and returns the list of $.resultType|publicPlural$ that match those selectors. +func (c *$.type|privatePlural$) List(ctx context.Context, opts $.ListOptions|raw$) (result *$.resultType|raw$List, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil{ + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &$.resultType|raw$List{} + err = c.client.Get(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Timeout(timeout). + Do(ctx). + Into(result) + return +} +` + +var listSubresourceTemplate = ` +// List takes $.type|raw$ name, label and field selectors, and returns the list of $.resultType|publicPlural$ that match those selectors. +func (c *$.type|privatePlural$) List(ctx context.Context, $.type|private$Name string, opts $.ListOptions|raw$) (result *$.resultType|raw$List, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil{ + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &$.resultType|raw$List{} + err = c.client.Get(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$Name). + SubResource("$.subresourcePath$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Timeout(timeout). + Do(ctx). + Into(result) + return +} +` + +var getTemplate = ` +// Get takes name of the $.type|private$, and returns the corresponding $.resultType|private$ object, and an error if there is any. +func (c *$.type|privatePlural$) Get(ctx context.Context, name string, options $.GetOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Get(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(name). + VersionedParams(&options, $.schemeParameterCodec|raw$). + Do(ctx). + Into(result) + return +} +` + +var getSubresourceTemplate = ` +// Get takes name of the $.type|private$, and returns the corresponding $.resultType|raw$ object, and an error if there is any. +func (c *$.type|privatePlural$) Get(ctx context.Context, $.type|private$Name string, options $.GetOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Get(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$Name). + SubResource("$.subresourcePath$"). + VersionedParams(&options, $.schemeParameterCodec|raw$). + Do(ctx). + Into(result) + return +} +` + +var deleteTemplate = ` +// Delete takes name of the $.type|private$ and deletes it. Returns an error if one occurs. +func (c *$.type|privatePlural$) Delete(ctx context.Context, name string, opts $.DeleteOptions|raw$) error { + return c.client.Delete(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} +` + +var deleteCollectionTemplate = ` +// DeleteCollection deletes a collection of objects. +func (c *$.type|privatePlural$) DeleteCollection(ctx context.Context, opts $.DeleteOptions|raw$, listOpts $.ListOptions|raw$) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil{ + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + VersionedParams(&listOpts, $.schemeParameterCodec|raw$). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} +` + +var createSubresourceTemplate = ` +// Create takes the representation of a $.inputType|private$ and creates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *$.type|privatePlural$) Create(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Post(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$Name). + SubResource("$.subresourcePath$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body($.inputType|private$). + Do(ctx). + Into(result) + return +} +` + +var createTemplate = ` +// Create takes the representation of a $.inputType|private$ and creates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *$.type|privatePlural$) Create(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Post(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body($.inputType|private$). + Do(ctx). + Into(result) + return +} +` + +var updateSubresourceTemplate = ` +// Update takes the top resource name and the representation of a $.inputType|private$ and updates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *$.type|privatePlural$) Update(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Put(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$Name). + SubResource("$.subresourcePath$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body($.inputType|private$). + Do(ctx). + Into(result) + return +} +` + +var updateTemplate = ` +// Update takes the representation of a $.inputType|private$ and updates it. Returns the server's representation of the $.resultType|private$, and an error, if there is any. +func (c *$.type|privatePlural$) Update(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Put(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.inputType|private$.Name). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body($.inputType|private$). + Do(ctx). + Into(result) + return +} +` + +var updateStatusTemplate = ` +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *$.type|privatePlural$) UpdateStatus(ctx context.Context, $.type|private$ *$.type|raw$, opts $.UpdateOptions|raw$) (result *$.type|raw$, err error) { + result = &$.type|raw${} + err = c.client.Put(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$.Name). + SubResource("status"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body($.type|private$). + Do(ctx). + Into(result) + return +} +` + +var watchTemplate = ` +// Watch returns a $.watchInterface|raw$ that watches the requested $.type|privatePlural$. +func (c *$.type|privatePlural$) Watch(ctx context.Context, opts $.ListOptions|raw$) ($.watchInterface|raw$, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil{ + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Timeout(timeout). + Watch(ctx) +} +` + +var patchTemplate = ` +// Patch applies the patch and returns the patched $.resultType|private$. +func (c *$.type|privatePlural$) Patch(ctx context.Context, name string, pt $.PatchType|raw$, data []byte, opts $.PatchOptions|raw$, subresources ...string) (result *$.resultType|raw$, err error) { + result = &$.resultType|raw${} + err = c.client.Patch(pt). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` + +var applyTemplate = ` +// Apply takes the given apply declarative configuration, applies it and returns the applied $.resultType|private$. +func (c *$.type|privatePlural$) Apply(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + result = &$.resultType|raw${} + err = c.client.Patch($.ApplyPatchType|raw$). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(*name). + VersionedParams(&patchOpts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` + +var applyStatusTemplate = ` +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *$.type|privatePlural$) ApplyStatus(ctx context.Context, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + + result = &$.resultType|raw${} + err = c.client.Patch($.ApplyPatchType|raw$). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` + +var applySubresourceTemplate = ` +// Apply takes top resource name and the apply declarative configuration for $.subresourcePath$, +// applies it and returns the applied $.resultType|private$, and an error, if there is any. +func (c *$.type|privatePlural$) Apply(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputApplyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + + result = &$.resultType|raw${} + err = c.client.Patch($.ApplyPatchType|raw$). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name($.type|private$Name). + SubResource("$.subresourcePath$"). + VersionedParams(&patchOpts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/scheme/generator_for_scheme.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/scheme/generator_for_scheme.go new file mode 100644 index 000000000000..a87d7571eb65 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/scheme/generator_for_scheme.go @@ -0,0 +1,187 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package scheme + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" + + "k8s.io/code-generator/cmd/client-gen/path" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// GenScheme produces a package for a clientset with the scheme, codecs and parameter codecs. +type GenScheme struct { + generator.DefaultGen + OutputPackage string + Groups []clientgentypes.GroupVersions + GroupGoNames map[clientgentypes.GroupVersion]string + InputPackages map[clientgentypes.GroupVersion]string + OutputPath string + ImportTracker namer.ImportTracker + PrivateScheme bool + CreateRegistry bool + schemeGenerated bool +} + +func (g *GenScheme) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.OutputPackage, g.ImportTracker), + } +} + +// We only want to call GenerateType() once. +func (g *GenScheme) Filter(c *generator.Context, t *types.Type) bool { + ret := !g.schemeGenerated + g.schemeGenerated = true + return ret +} + +func (g *GenScheme) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.ImportTracker.ImportLines()...) + for _, group := range g.Groups { + for _, version := range group.Versions { + packagePath := g.InputPackages[clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}] + groupAlias := strings.ToLower(g.GroupGoNames[clientgentypes.GroupVersion{Group: group.Group, Version: version.Version}]) + if g.CreateRegistry { + // import the install package for internal clientsets instead of the type package with register.go + if version.Version != "" { + packagePath = filepath.Dir(packagePath) + } + packagePath = filepath.Join(packagePath, "install") + + imports = append(imports, fmt.Sprintf("%s \"%s\"", groupAlias, path.Vendorless(packagePath))) + break + } else { + imports = append(imports, fmt.Sprintf("%s%s \"%s\"", groupAlias, strings.ToLower(version.Version.NonEmpty()), path.Vendorless(packagePath))) + } + } + } + return +} + +func (g *GenScheme) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + allGroupVersions := clientgentypes.ToGroupVersionInfo(g.Groups, g.GroupGoNames) + allInstallGroups := clientgentypes.ToGroupInstallPackages(g.Groups, g.GroupGoNames) + + m := map[string]interface{}{ + "publicScheme": !g.PrivateScheme, + "allGroupVersions": allGroupVersions, + "allInstallGroups": allInstallGroups, + "customRegister": false, + "runtimeNewParameterCodec": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewParameterCodec"}), + "runtimeNewScheme": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewScheme"}), + "serializerNewCodecFactory": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/serializer", Name: "NewCodecFactory"}), + "runtimeScheme": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "Scheme"}), + "runtimeSchemeBuilder": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "SchemeBuilder"}), + "runtimeUtilMust": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/util/runtime", Name: "Must"}), + "schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}), + "metav1AddToGroupVersion": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "AddToGroupVersion"}), + } + globals := map[string]string{ + "Scheme": "Scheme", + "Codecs": "Codecs", + "ParameterCodec": "ParameterCodec", + "Registry": "Registry", + } + for k, v := range globals { + if g.PrivateScheme { + m[k] = strings.ToLower(v[0:1]) + v[1:] + } else { + m[k] = v + } + } + + sw.Do(globalsTemplate, m) + + if g.OutputPath != "" { + if _, err := os.Stat(filepath.Join(g.OutputPath, strings.ToLower("register_custom.go"))); err == nil { + m["customRegister"] = true + } + } + + if g.CreateRegistry { + sw.Do(registryRegistration, m) + } else { + sw.Do(simpleRegistration, m) + } + + return sw.Error() +} + +var globalsTemplate = ` +var $.Scheme$ = $.runtimeNewScheme|raw$() +var $.Codecs$ = $.serializerNewCodecFactory|raw$($.Scheme$) +$if .publicScheme$var $.ParameterCodec$ = $.runtimeNewParameterCodec|raw$($.Scheme$)$end -$` + +var registryRegistration = ` + +func init() { + $.metav1AddToGroupVersion|raw$($.Scheme$, $.schemaGroupVersion|raw${Version: "v1"}) + Install($.Scheme$) +} + +// Install registers the API group and adds types to a scheme +func Install(scheme *$.runtimeScheme|raw$) { + $- range .allInstallGroups$ + $.InstallPackageAlias$.Install(scheme) + $- end$ + $if .customRegister$ + ExtraInstall(scheme) + $end -$ +} +` + +var simpleRegistration = ` +var localSchemeBuilder = $.runtimeSchemeBuilder|raw${ + $- range .allGroupVersions$ + $.PackageAlias$.AddToScheme, + $- end$ + $if .customRegister$ + ExtraAddToScheme, + $end -$ +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + $.metav1AddToGroupVersion|raw$($.Scheme$, $.schemaGroupVersion|raw${Version: "v1"}) + $.runtimeUtilMust|raw$(AddToScheme($.Scheme$)) +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/gvpackages.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/gvpackages.go new file mode 100644 index 000000000000..fcc1950909b4 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/gvpackages.go @@ -0,0 +1,30 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import "strings" + +func ParsePathGroupVersion(pgvString string) (gvPath string, gvString string) { + subs := strings.Split(pgvString, "/") + length := len(subs) + switch length { + case 0, 1, 2: + return "", pgvString + default: + return strings.Join(subs[:length-2], "/"), strings.Join(subs[length-2:], "/") + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/tags.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/tags.go new file mode 100644 index 000000000000..e74de0776297 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/generators/util/tags.go @@ -0,0 +1,344 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "errors" + "fmt" + "strings" + + "k8s.io/gengo/types" +) + +var supportedTags = []string{ + "genclient", + "genclient:nonNamespaced", + "genclient:noVerbs", + "genclient:onlyVerbs", + "genclient:skipVerbs", + "genclient:noStatus", + "genclient:readonly", + "genclient:method", +} + +// SupportedVerbs is a list of supported verbs for +onlyVerbs and +skipVerbs. +var SupportedVerbs = []string{ + "create", + "update", + "updateStatus", + "delete", + "deleteCollection", + "get", + "list", + "watch", + "patch", + "apply", + "applyStatus", +} + +// ReadonlyVerbs represents a list of read-only verbs. +var ReadonlyVerbs = []string{ + "get", + "list", + "watch", +} + +// genClientPrefix is the default prefix for all genclient tags. +const genClientPrefix = "genclient:" + +// unsupportedExtensionVerbs is a list of verbs we don't support generating +// extension client functions for. +var unsupportedExtensionVerbs = []string{ + "updateStatus", + "deleteCollection", + "watch", + "delete", +} + +// inputTypeSupportedVerbs is a list of verb types that supports overriding the +// input argument type. +var inputTypeSupportedVerbs = []string{ + "create", + "update", + "apply", +} + +// resultTypeSupportedVerbs is a list of verb types that supports overriding the +// resulting type. +var resultTypeSupportedVerbs = []string{ + "create", + "update", + "get", + "list", + "patch", + "apply", +} + +// Extensions allows to extend the default set of client verbs +// (CRUD+watch+patch+list+deleteCollection) for a given type with custom defined +// verbs. Custom verbs can have custom input and result types and also allow to +// use a sub-resource in a request instead of top-level resource type. +// +// Example: +// +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=Scale,result=Scale +// +// type ReplicaSet struct { ... } +// +// The 'method=UpdateScale' is the name of the client function. +// The 'verb=update' here means the client function will use 'PUT' action. +// The 'subresource=scale' means we will use SubResource template to generate this client function. +// The 'input' is the input type used for creation (function argument). +// The 'result' (not needed in this case) is the result type returned from the +// client function. +type extension struct { + // VerbName is the name of the custom verb (Scale, Instantiate, etc..) + VerbName string + // VerbType is the type of the verb (only verbs from SupportedVerbs are + // supported) + VerbType string + // SubResourcePath defines a path to a sub-resource to use in the request. + // (optional) + SubResourcePath string + // InputTypeOverride overrides the input parameter type for the verb. By + // default the original type is used. Overriding the input type only works for + // "create" and "update" verb types. The given type must exists in the same + // package as the original type. + // (optional) + InputTypeOverride string + // ResultTypeOverride overrides the resulting object type for the verb. By + // default the original type is used. Overriding the result type works. + // (optional) + ResultTypeOverride string +} + +// IsSubresource indicates if this extension should generate the sub-resource. +func (e *extension) IsSubresource() bool { + return len(e.SubResourcePath) > 0 +} + +// HasVerb checks if the extension matches the given verb. +func (e *extension) HasVerb(verb string) bool { + return e.VerbType == verb +} + +// Input returns the input override package path and the type. +func (e *extension) Input() (string, string) { + parts := strings.Split(e.InputTypeOverride, ".") + return parts[len(parts)-1], strings.Join(parts[0:len(parts)-1], ".") +} + +// Result returns the result override package path and the type. +func (e *extension) Result() (string, string) { + parts := strings.Split(e.ResultTypeOverride, ".") + return parts[len(parts)-1], strings.Join(parts[0:len(parts)-1], ".") +} + +// Tags represents a genclient configuration for a single type. +type Tags struct { + // +genclient + GenerateClient bool + // +genclient:nonNamespaced + NonNamespaced bool + // +genclient:noStatus + NoStatus bool + // +genclient:noVerbs + NoVerbs bool + // +genclient:skipVerbs=get,update + // +genclient:onlyVerbs=create,delete + SkipVerbs []string + // +genclient:method=UpdateScale,verb=update,subresource=scale,input=Scale,result=Scale + Extensions []extension +} + +// HasVerb returns true if we should include the given verb in final client interface and +// generate the function for it. +func (t Tags) HasVerb(verb string) bool { + if len(t.SkipVerbs) == 0 { + return true + } + for _, s := range t.SkipVerbs { + if verb == s { + return false + } + } + return true +} + +// MustParseClientGenTags calls ParseClientGenTags but instead of returning error it panics. +func MustParseClientGenTags(lines []string) Tags { + tags, err := ParseClientGenTags(lines) + if err != nil { + panic(err.Error()) + } + return tags +} + +// ParseClientGenTags parse the provided genclient tags and validates that no unknown +// tags are provided. +func ParseClientGenTags(lines []string) (Tags, error) { + ret := Tags{} + values := types.ExtractCommentTags("+", lines) + var value []string + value, ret.GenerateClient = values["genclient"] + // Check the old format and error when used to avoid generating client when //+genclient=false + if len(value) > 0 && len(value[0]) > 0 { + return ret, fmt.Errorf("+genclient=%s is invalid, use //+genclient if you want to generate client or omit it when you want to disable generation", value) + } + _, ret.NonNamespaced = values[genClientPrefix+"nonNamespaced"] + // Check the old format and error when used + if value := values["nonNamespaced"]; len(value) > 0 && len(value[0]) > 0 { + return ret, fmt.Errorf("+nonNamespaced=%s is invalid, use //+genclient:nonNamespaced instead", value[0]) + } + _, ret.NoVerbs = values[genClientPrefix+"noVerbs"] + _, ret.NoStatus = values[genClientPrefix+"noStatus"] + onlyVerbs := []string{} + if _, isReadonly := values[genClientPrefix+"readonly"]; isReadonly { + onlyVerbs = ReadonlyVerbs + } + // Check the old format and error when used + if value := values["readonly"]; len(value) > 0 && len(value[0]) > 0 { + return ret, fmt.Errorf("+readonly=%s is invalid, use //+genclient:readonly instead", value[0]) + } + if v, exists := values[genClientPrefix+"skipVerbs"]; exists { + ret.SkipVerbs = strings.Split(v[0], ",") + } + if v, exists := values[genClientPrefix+"onlyVerbs"]; exists || len(onlyVerbs) > 0 { + if len(v) > 0 { + onlyVerbs = append(onlyVerbs, strings.Split(v[0], ",")...) + } + skipVerbs := []string{} + for _, m := range SupportedVerbs { + skip := true + for _, o := range onlyVerbs { + if o == m { + skip = false + break + } + } + // Check for conflicts + for _, v := range skipVerbs { + if v == m { + return ret, fmt.Errorf("verb %q used both in genclient:skipVerbs and genclient:onlyVerbs", v) + } + } + if skip { + skipVerbs = append(skipVerbs, m) + } + } + ret.SkipVerbs = skipVerbs + } + var err error + if ret.Extensions, err = parseClientExtensions(values); err != nil { + return ret, err + } + return ret, validateClientGenTags(values) +} + +func parseClientExtensions(tags map[string][]string) ([]extension, error) { + var ret []extension + for name, values := range tags { + if !strings.HasPrefix(name, genClientPrefix+"method") { + continue + } + for _, value := range values { + // the value comes in this form: "Foo,verb=create" + ext := extension{} + parts := strings.Split(value, ",") + if len(parts) == 0 { + return nil, fmt.Errorf("invalid of empty extension verb name: %q", value) + } + // The first part represents the name of the extension + ext.VerbName = parts[0] + if len(ext.VerbName) == 0 { + return nil, fmt.Errorf("must specify a verb name (// +genclient:method=Foo,verb=create)") + } + // Parse rest of the arguments + params := parts[1:] + for _, p := range params { + parts := strings.Split(p, "=") + if len(parts) != 2 { + return nil, fmt.Errorf("invalid extension tag specification %q", p) + } + key, val := strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]) + if len(val) == 0 { + return nil, fmt.Errorf("empty value of %q for %q extension", key, ext.VerbName) + } + switch key { + case "verb": + ext.VerbType = val + case "subresource": + ext.SubResourcePath = val + case "input": + ext.InputTypeOverride = val + case "result": + ext.ResultTypeOverride = val + default: + return nil, fmt.Errorf("unknown extension configuration key %q", key) + } + } + // Validate resulting extension configuration + if len(ext.VerbType) == 0 { + return nil, fmt.Errorf("verb type must be specified (use '// +genclient:method=%s,verb=create')", ext.VerbName) + } + if len(ext.ResultTypeOverride) > 0 { + supported := false + for _, v := range resultTypeSupportedVerbs { + if ext.VerbType == v { + supported = true + break + } + } + if !supported { + return nil, fmt.Errorf("%s: result type is not supported for %q verbs (supported verbs: %#v)", ext.VerbName, ext.VerbType, resultTypeSupportedVerbs) + } + } + if len(ext.InputTypeOverride) > 0 { + supported := false + for _, v := range inputTypeSupportedVerbs { + if ext.VerbType == v { + supported = true + break + } + } + if !supported { + return nil, fmt.Errorf("%s: input type is not supported for %q verbs (supported verbs: %#v)", ext.VerbName, ext.VerbType, inputTypeSupportedVerbs) + } + } + for _, t := range unsupportedExtensionVerbs { + if ext.VerbType == t { + return nil, fmt.Errorf("verb %q is not supported by extension generator", ext.VerbType) + } + } + ret = append(ret, ext) + } + } + return ret, nil +} + +// validateTags validates that only supported genclient tags were provided. +func validateClientGenTags(values map[string][]string) error { + for _, k := range supportedTags { + delete(values, k) + } + for key := range values { + if strings.HasPrefix(key, strings.TrimSuffix(genClientPrefix, ":")) { + return errors.New("unknown tag detected: " + key) + } + } + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/main.go new file mode 100644 index 000000000000..64a1274dfc0c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/main.go @@ -0,0 +1,63 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// client-gen makes the individual typed clients using gengo. +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/client-gen/args" + "k8s.io/code-generator/cmd/client-gen/generators" + "k8s.io/code-generator/pkg/util" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + // Override defaults. + // TODO: move this out of client-gen + genericArgs.OutputPackagePath = "k8s.io/kubernetes/pkg/client/clientset_generated/" + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine, "k8s.io/kubernetes/pkg/apis") // TODO: move this input path out of client-gen + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + // add group version package as input dirs for gengo + for _, pkg := range customArgs.Groups { + for _, v := range pkg.Versions { + genericArgs.InputDirs = append(genericArgs.InputDirs, v.Package) + } + } + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + if err := genericArgs.Execute( + generators.NameSystems(util.PluralExceptionListToMapOrDie(customArgs.PluralExceptions)), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/path/path.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/path/path.go new file mode 100644 index 000000000000..19b269bdf28a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/path/path.go @@ -0,0 +1,31 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package path + +import "strings" + +// Vendorless removes the longest match of "*/vendor/" from the front of p. +// It is useful if a package locates in vendor/, e.g., +// k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1, because gengo +// indexes the package with its import path, e.g., +// k8s.io/apimachinery/pkg/apis/meta/v1, +func Vendorless(p string) string { + if pos := strings.LastIndex(p, "/vendor/"); pos != -1 { + return p[pos+len("/vendor/"):] + } + return p +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/helpers.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/helpers.go new file mode 100644 index 000000000000..59f2fd4449bd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/helpers.go @@ -0,0 +1,121 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "fmt" + "regexp" + "sort" + "strings" + + "k8s.io/gengo/namer" +) + +// ToGroupVersion turns "group/version" string into a GroupVersion struct. It reports error +// if it cannot parse the string. +func ToGroupVersion(gv string) (GroupVersion, error) { + // this can be the internal version for the legacy kube types + // TODO once we've cleared the last uses as strings, this special case should be removed. + if (len(gv) == 0) || (gv == "/") { + return GroupVersion{}, nil + } + + switch strings.Count(gv, "/") { + case 0: + return GroupVersion{Group(gv), ""}, nil + case 1: + i := strings.Index(gv, "/") + return GroupVersion{Group(gv[:i]), Version(gv[i+1:])}, nil + default: + return GroupVersion{}, fmt.Errorf("unexpected GroupVersion string: %v", gv) + } +} + +type sortableSliceOfVersions []string + +func (a sortableSliceOfVersions) Len() int { return len(a) } +func (a sortableSliceOfVersions) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a sortableSliceOfVersions) Less(i, j int) bool { + vi, vj := strings.TrimLeft(a[i], "v"), strings.TrimLeft(a[j], "v") + major := regexp.MustCompile("^[0-9]+") + viMajor, vjMajor := major.FindString(vi), major.FindString(vj) + viRemaining, vjRemaining := strings.TrimLeft(vi, viMajor), strings.TrimLeft(vj, vjMajor) + switch { + case len(viRemaining) == 0 && len(vjRemaining) == 0: + return viMajor < vjMajor + case len(viRemaining) == 0 && len(vjRemaining) != 0: + // stable version is greater than unstable version + return false + case len(viRemaining) != 0 && len(vjRemaining) == 0: + // stable version is greater than unstable version + return true + } + // neither are stable versions + if viMajor != vjMajor { + return viMajor < vjMajor + } + // assuming at most we have one alpha or one beta version, so if vi contains "alpha", it's the lesser one. + return strings.Contains(viRemaining, "alpha") +} + +// Determine the default version among versions. If a user calls a group client +// without specifying the version (e.g., c.CoreV1(), instead of c.CoreV1()), the +// default version will be returned. +func defaultVersion(versions []PackageVersion) Version { + var versionStrings []string + for _, version := range versions { + versionStrings = append(versionStrings, version.Version.String()) + } + sort.Sort(sortableSliceOfVersions(versionStrings)) + return Version(versionStrings[len(versionStrings)-1]) +} + +// ToGroupVersionInfo is a helper function used by generators for groups. +func ToGroupVersionInfo(groups []GroupVersions, groupGoNames map[GroupVersion]string) []GroupVersionInfo { + var groupVersionPackages []GroupVersionInfo + for _, group := range groups { + for _, version := range group.Versions { + groupGoName := groupGoNames[GroupVersion{Group: group.Group, Version: version.Version}] + groupVersionPackages = append(groupVersionPackages, GroupVersionInfo{ + Group: Group(namer.IC(group.Group.NonEmpty())), + Version: Version(namer.IC(version.Version.String())), + PackageAlias: strings.ToLower(groupGoName + version.Version.NonEmpty()), + GroupGoName: groupGoName, + LowerCaseGroupGoName: namer.IL(groupGoName), + }) + } + } + return groupVersionPackages +} + +func ToGroupInstallPackages(groups []GroupVersions, groupGoNames map[GroupVersion]string) []GroupInstallPackage { + var groupInstallPackages []GroupInstallPackage + for _, group := range groups { + defaultVersion := defaultVersion(group.Versions) + groupGoName := groupGoNames[GroupVersion{Group: group.Group, Version: defaultVersion}] + groupInstallPackages = append(groupInstallPackages, GroupInstallPackage{ + Group: Group(namer.IC(group.Group.NonEmpty())), + InstallPackageAlias: strings.ToLower(groupGoName), + }) + } + return groupInstallPackages +} + +// NormalizeGroupVersion calls normalizes the GroupVersion. +//func NormalizeGroupVersion(gv GroupVersion) GroupVersion { +// return GroupVersion{Group: gv.Group.NonEmpty(), Version: gv.Version, NonEmptyVersion: normalization.Version(gv.Version)} +//} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/types.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/types.go new file mode 100644 index 000000000000..a5cc37cf7fc8 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/client-gen/types/types.go @@ -0,0 +1,97 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import "strings" + +type Version string + +func (v Version) String() string { + return string(v) +} + +func (v Version) NonEmpty() string { + if v == "" { + return "internalVersion" + } + return v.String() +} + +func (v Version) PackageName() string { + return strings.ToLower(v.NonEmpty()) +} + +type Group string + +func (g Group) String() string { + return string(g) +} + +func (g Group) NonEmpty() string { + if g == "api" { + return "core" + } + return string(g) +} + +func (g Group) PackageName() string { + parts := strings.Split(g.NonEmpty(), ".") + if parts[0] == "internal" && len(parts) > 1 { + return strings.ToLower(parts[1] + parts[0]) + } + return strings.ToLower(parts[0]) +} + +type PackageVersion struct { + Version + // The fully qualified package, e.g. k8s.io/kubernetes/pkg/apis/apps, where the types.go is found. + Package string +} + +type GroupVersion struct { + Group Group + Version Version +} + +func (gv GroupVersion) ToAPIVersion() string { + if len(gv.Group) > 0 && gv.Group.NonEmpty() != "core" { + return gv.Group.String() + "/" + gv.Version.String() + } else { + return gv.Version.String() + } +} + +type GroupVersions struct { + // The name of the package for this group, e.g. apps. + PackageName string + Group Group + Versions []PackageVersion +} + +// GroupVersionInfo contains all the info around a group version. +type GroupVersionInfo struct { + Group Group + Version Version + PackageAlias string + GroupGoName string + LowerCaseGroupGoName string +} + +type GroupInstallPackage struct { + Group Group + InstallPackageAlias string +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/args/args.go new file mode 100644 index 000000000000..c69280b10632 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/args/args.go @@ -0,0 +1,90 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" +) + +// DefaultBasePeerDirs are the peer-dirs nearly everybody will use, i.e. those coming from +// apimachinery. +var DefaultBasePeerDirs = []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1", + "k8s.io/apimachinery/pkg/conversion", + "k8s.io/apimachinery/pkg/runtime", +} + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs struct { + // Base peer dirs which nearly everybody will use, i.e. outside of Kubernetes core. Peer dirs + // are declared to make the generator pick up manually written conversion funcs from external + // packages. + BasePeerDirs []string + + // Custom peer dirs which are application specific. Peer dirs are declared to make the + // generator pick up manually written conversion funcs from external packages. + ExtraPeerDirs []string + + // Additional dirs to parse and load, but not consider for peers. This is + // useful when packages depend on other packages and want to call + // conversions across them. + ExtraDirs []string + + // SkipUnsafe indicates whether to generate unsafe conversions to improve the efficiency + // of these operations. The unsafe operation is a direct pointer assignment via unsafe + // (within the allowed uses of unsafe) and is equivalent to a proposed Golang change to + // allow structs that are identical to be assigned to each other. + SkipUnsafe bool +} + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{ + BasePeerDirs: DefaultBasePeerDirs, + SkipUnsafe: false, + } + genericArgs.CustomArgs = customArgs + genericArgs.OutputFileBaseName = "conversion_generated" + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + pflag.CommandLine.StringSliceVar(&ca.BasePeerDirs, "base-peer-dirs", ca.BasePeerDirs, + "Comma-separated list of apimachinery import paths which are considered, after tag-specified peers, for conversions. Only change these if you have very good reasons.") + pflag.CommandLine.StringSliceVar(&ca.ExtraPeerDirs, "extra-peer-dirs", ca.ExtraPeerDirs, + "Application specific comma-separated list of import paths which are considered, after tag-specified peers and base-peer-dirs, for conversions.") + pflag.CommandLine.StringSliceVar(&ca.ExtraDirs, "extra-dirs", ca.ExtraDirs, + "Application specific comma-separated list of import paths which are loaded and considered for callable conversions, but are not considered peers for conversion.") + pflag.CommandLine.BoolVar(&ca.SkipUnsafe, "skip-unsafe", ca.SkipUnsafe, + "If true, will not generate code using unsafe pointer conversions; resulting code may be slower.") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + _ = genericArgs.CustomArgs.(*CustomArgs) + + if len(genericArgs.OutputFileBaseName) == 0 { + return fmt.Errorf("output file base name cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go new file mode 100644 index 000000000000..5b7347971f16 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go @@ -0,0 +1,1222 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "bytes" + "fmt" + "io" + "path/filepath" + "reflect" + "sort" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" + + conversionargs "k8s.io/code-generator/cmd/conversion-gen/args" + genutil "k8s.io/code-generator/pkg/util" +) + +// These are the comment tags that carry parameters for conversion generation. +const ( + // e.g., "+k8s:conversion-gen=" in doc.go, where is the + // import path of the package the peer types are defined in. + // e.g., "+k8s:conversion-gen=false" in a type's comment will let + // conversion-gen skip that type. + tagName = "k8s:conversion-gen" + // e.g. "+k8s:conversion-gen:explicit-from=net/url.Values" in the type comment + // will result in generating conversion from net/url.Values. + explicitFromTagName = "k8s:conversion-gen:explicit-from" + // e.g., "+k8s:conversion-gen-external-types=" in doc.go, where + // is the relative path to the package the types are defined in. + externalTypesTagName = "k8s:conversion-gen-external-types" +) + +func extractTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[tagName] +} + +func extractExplicitFromTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[explicitFromTagName] +} + +func extractExternalTypesTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[externalTypesTagName] +} + +func isCopyOnly(comments []string) bool { + values := types.ExtractCommentTags("+", comments)["k8s:conversion-fn"] + return len(values) == 1 && values[0] == "copy-only" +} + +func isDrop(comments []string) bool { + values := types.ExtractCommentTags("+", comments)["k8s:conversion-fn"] + return len(values) == 1 && values[0] == "drop" +} + +// TODO: This is created only to reduce number of changes in a single PR. +// Remove it and use PublicNamer instead. +func conversionNamer() *namer.NameStrategy { + return &namer.NameStrategy{ + Join: func(pre string, in []string, post string) string { + return strings.Join(in, "_") + }, + PrependPackageNames: 1, + } +} + +func defaultFnNamer() *namer.NameStrategy { + return &namer.NameStrategy{ + Prefix: "SetDefaults_", + Join: func(pre string, in []string, post string) string { + return pre + strings.Join(in, "_") + post + }, + } +} + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "public": conversionNamer(), + "raw": namer.NewRawNamer("", nil), + "defaultfn": defaultFnNamer(), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +func getPeerTypeFor(context *generator.Context, t *types.Type, potenialPeerPkgs []string) *types.Type { + for _, ppp := range potenialPeerPkgs { + p := context.Universe.Package(ppp) + if p == nil { + continue + } + if p.Has(t.Name.Name) { + return p.Type(t.Name.Name) + } + } + return nil +} + +type conversionPair struct { + inType *types.Type + outType *types.Type +} + +// All of the types in conversions map are of type "DeclarationOf" with +// the underlying type being "Func". +type conversionFuncMap map[conversionPair]*types.Type + +// Returns all manually-defined conversion functions in the package. +func getManualConversionFunctions(context *generator.Context, pkg *types.Package, manualMap conversionFuncMap) { + if pkg == nil { + klog.Warning("Skipping nil package passed to getManualConversionFunctions") + return + } + klog.V(5).Infof("Scanning for conversion functions in %v", pkg.Name) + + scopeName := types.Ref(conversionPackagePath, "Scope").Name + errorName := types.Ref("", "error").Name + buffer := &bytes.Buffer{} + sw := generator.NewSnippetWriter(buffer, context, "$", "$") + + for _, f := range pkg.Functions { + if f.Underlying == nil || f.Underlying.Kind != types.Func { + klog.Errorf("Malformed function: %#v", f) + continue + } + if f.Underlying.Signature == nil { + klog.Errorf("Function without signature: %#v", f) + continue + } + klog.V(8).Infof("Considering function %s", f.Name) + signature := f.Underlying.Signature + // Check whether the function is conversion function. + // Note that all of them have signature: + // func Convert_inType_To_outType(inType, outType, conversion.Scope) error + if signature.Receiver != nil { + klog.V(8).Infof("%s has a receiver", f.Name) + continue + } + if len(signature.Parameters) != 3 || signature.Parameters[2].Name != scopeName { + klog.V(8).Infof("%s has wrong parameters", f.Name) + continue + } + if len(signature.Results) != 1 || signature.Results[0].Name != errorName { + klog.V(8).Infof("%s has wrong results", f.Name) + continue + } + inType := signature.Parameters[0] + outType := signature.Parameters[1] + if inType.Kind != types.Pointer || outType.Kind != types.Pointer { + klog.V(8).Infof("%s has wrong parameter types", f.Name) + continue + } + // Now check if the name satisfies the convention. + // TODO: This should call the Namer directly. + args := argsFromType(inType.Elem, outType.Elem) + sw.Do("Convert_$.inType|public$_To_$.outType|public$", args) + if f.Name.Name == buffer.String() { + klog.V(4).Infof("Found conversion function %s", f.Name) + key := conversionPair{inType.Elem, outType.Elem} + // We might scan the same package twice, and that's OK. + if v, ok := manualMap[key]; ok && v != nil && v.Name.Package != pkg.Path { + panic(fmt.Sprintf("duplicate static conversion defined: %s -> %s from:\n%s.%s\n%s.%s", key.inType, key.outType, v.Name.Package, v.Name.Name, f.Name.Package, f.Name.Name)) + } + manualMap[key] = f + } else { + // prevent user error when they don't get the correct conversion signature + if strings.HasPrefix(f.Name.Name, "Convert_") { + klog.Errorf("Rename function %s %s -> %s to match expected conversion signature", f.Name.Package, f.Name.Name, buffer.String()) + } + klog.V(8).Infof("%s has wrong name", f.Name) + } + buffer.Reset() + } +} + +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + packages := generator.Packages{} + header := append([]byte(fmt.Sprintf("// +build !%s\n\n", arguments.GeneratedBuildTag)), boilerplate...) + + // Accumulate pre-existing conversion functions. + // TODO: This is too ad-hoc. We need a better way. + manualConversions := conversionFuncMap{} + + // Record types that are memory equivalent. A type is memory equivalent + // if it has the same memory layout and no nested manual conversion is + // defined. + // TODO: in the future, relax the nested manual conversion requirement + // if we can show that a large enough types are memory identical but + // have non-trivial conversion + memoryEquivalentTypes := equalMemoryTypes{} + + // We are generating conversions only for packages that are explicitly + // passed as InputDir. + processed := map[string]bool{} + for _, i := range context.Inputs { + // skip duplicates + if processed[i] { + continue + } + processed[i] = true + + klog.V(5).Infof("considering pkg %q", i) + pkg := context.Universe[i] + // typesPkg is where the versioned types are defined. Sometimes it is + // different from pkg. For example, kubernetes core/v1 types are defined + // in vendor/k8s.io/api/core/v1, while pkg is at pkg/api/v1. + typesPkg := pkg + if pkg == nil { + // If the input had no Go files, for example. + continue + } + + // Add conversion and defaulting functions. + getManualConversionFunctions(context, pkg, manualConversions) + + // Only generate conversions for packages which explicitly request it + // by specifying one or more "+k8s:conversion-gen=" + // in their doc.go file. + peerPkgs := extractTag(pkg.Comments) + if peerPkgs != nil { + klog.V(5).Infof(" tags: %q", peerPkgs) + if len(peerPkgs) == 1 && peerPkgs[0] == "false" { + // If a single +k8s:conversion-gen=false tag is defined, we still want + // the generator to fire for this package for explicit conversions, but + // we are clearing the peerPkgs to not generate any standard conversions. + peerPkgs = nil + } + } else { + klog.V(5).Infof(" no tag") + continue + } + skipUnsafe := false + extraDirs := []string{} + if customArgs, ok := arguments.CustomArgs.(*conversionargs.CustomArgs); ok { + if len(peerPkgs) > 0 { + peerPkgs = append(peerPkgs, customArgs.BasePeerDirs...) + peerPkgs = append(peerPkgs, customArgs.ExtraPeerDirs...) + } + extraDirs = customArgs.ExtraDirs + skipUnsafe = customArgs.SkipUnsafe + } + + // if the external types are not in the same package where the conversion functions to be generated + externalTypesValues := extractExternalTypesTag(pkg.Comments) + if externalTypesValues != nil { + if len(externalTypesValues) != 1 { + klog.Fatalf(" expect only one value for %q tag, got: %q", externalTypesTagName, externalTypesValues) + } + externalTypes := externalTypesValues[0] + klog.V(5).Infof(" external types tags: %q", externalTypes) + var err error + typesPkg, err = context.AddDirectory(externalTypes) + if err != nil { + klog.Fatalf("cannot import package %s", externalTypes) + } + // update context.Order to the latest context.Universe + orderer := namer.Orderer{Namer: namer.NewPublicNamer(1)} + context.Order = orderer.OrderUniverse(context.Universe) + } + + // if the source path is within a /vendor/ directory (for example, + // k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1), allow + // generation to output to the proper relative path (under vendor). + // Otherwise, the generator will create the file in the wrong location + // in the output directory. + // TODO: build a more fundamental concept in gengo for dealing with modifications + // to vendored packages. + for i := range peerPkgs { + peerPkgs[i] = genutil.Vendorless(peerPkgs[i]) + } + for i := range extraDirs { + extraDirs[i] = genutil.Vendorless(extraDirs[i]) + } + + // Make sure our peer-packages are added and fully parsed. + for _, pp := range append(peerPkgs, extraDirs...) { + context.AddDir(pp) + p := context.Universe[pp] + if nil == p { + klog.Fatalf("failed to find pkg: %s", pp) + } + getManualConversionFunctions(context, p, manualConversions) + } + + unsafeEquality := TypesEqual(memoryEquivalentTypes) + if skipUnsafe { + unsafeEquality = noEquality{} + } + + path := pkg.Path + // if the source path is within a /vendor/ directory (for example, + // k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1), allow + // generation to output to the proper relative path (under vendor). + // Otherwise, the generator will create the file in the wrong location + // in the output directory. + // TODO: build a more fundamental concept in gengo for dealing with modifications + // to vendored packages. + if strings.HasPrefix(pkg.SourcePath, arguments.OutputBase) { + expandedPath := strings.TrimPrefix(pkg.SourcePath, arguments.OutputBase) + if strings.Contains(expandedPath, "/vendor/") { + path = expandedPath + } + } + packages = append(packages, + &generator.DefaultPackage{ + PackageName: filepath.Base(pkg.Path), + PackagePath: path, + HeaderText: header, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{ + NewGenConversion(arguments.OutputFileBaseName, typesPkg.Path, pkg.Path, manualConversions, peerPkgs, unsafeEquality), + } + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return t.Name.Package == typesPkg.Path + }, + }) + } + + // If there is a manual conversion defined between two types, exclude it + // from being a candidate for unsafe conversion + for k, v := range manualConversions { + if isCopyOnly(v.CommentLines) { + klog.V(5).Infof("Conversion function %s will not block memory copy because it is copy-only", v.Name) + continue + } + // this type should be excluded from all equivalence, because the converter must be called. + memoryEquivalentTypes.Skip(k.inType, k.outType) + } + + return packages +} + +type equalMemoryTypes map[conversionPair]bool + +func (e equalMemoryTypes) Skip(a, b *types.Type) { + e[conversionPair{a, b}] = false + e[conversionPair{b, a}] = false +} + +func (e equalMemoryTypes) Equal(a, b *types.Type) bool { + // alreadyVisitedTypes holds all the types that have already been checked in the structural type recursion. + alreadyVisitedTypes := make(map[*types.Type]bool) + return e.cachingEqual(a, b, alreadyVisitedTypes) +} + +func (e equalMemoryTypes) cachingEqual(a, b *types.Type, alreadyVisitedTypes map[*types.Type]bool) bool { + if a == b { + return true + } + if equal, ok := e[conversionPair{a, b}]; ok { + return equal + } + if equal, ok := e[conversionPair{b, a}]; ok { + return equal + } + result := e.equal(a, b, alreadyVisitedTypes) + e[conversionPair{a, b}] = result + e[conversionPair{b, a}] = result + return result +} + +func (e equalMemoryTypes) equal(a, b *types.Type, alreadyVisitedTypes map[*types.Type]bool) bool { + in, out := unwrapAlias(a), unwrapAlias(b) + switch { + case in == out: + return true + case in.Kind == out.Kind: + // if the type exists already, return early to avoid recursion + if alreadyVisitedTypes[in] { + return true + } + alreadyVisitedTypes[in] = true + + switch in.Kind { + case types.Struct: + if len(in.Members) != len(out.Members) { + return false + } + for i, inMember := range in.Members { + outMember := out.Members[i] + if !e.cachingEqual(inMember.Type, outMember.Type, alreadyVisitedTypes) { + return false + } + } + return true + case types.Pointer: + return e.cachingEqual(in.Elem, out.Elem, alreadyVisitedTypes) + case types.Map: + return e.cachingEqual(in.Key, out.Key, alreadyVisitedTypes) && e.cachingEqual(in.Elem, out.Elem, alreadyVisitedTypes) + case types.Slice: + return e.cachingEqual(in.Elem, out.Elem, alreadyVisitedTypes) + case types.Interface: + // TODO: determine whether the interfaces are actually equivalent - for now, they must have the + // same type. + return false + case types.Builtin: + return in.Name.Name == out.Name.Name + } + } + return false +} + +func findMember(t *types.Type, name string) (types.Member, bool) { + if t.Kind != types.Struct { + return types.Member{}, false + } + for _, member := range t.Members { + if member.Name == name { + return member, true + } + } + return types.Member{}, false +} + +// unwrapAlias recurses down aliased types to find the bedrock type. +func unwrapAlias(in *types.Type) *types.Type { + for in.Kind == types.Alias { + in = in.Underlying + } + return in +} + +const ( + runtimePackagePath = "k8s.io/apimachinery/pkg/runtime" + conversionPackagePath = "k8s.io/apimachinery/pkg/conversion" +) + +type noEquality struct{} + +func (noEquality) Equal(_, _ *types.Type) bool { return false } + +type TypesEqual interface { + Equal(a, b *types.Type) bool +} + +// genConversion produces a file with a autogenerated conversions. +type genConversion struct { + generator.DefaultGen + // the package that contains the types that conversion func are going to be + // generated for + typesPackage string + // the package that the conversion funcs are going to be output to + outputPackage string + // packages that contain the peer of types in typesPacakge + peerPackages []string + manualConversions conversionFuncMap + imports namer.ImportTracker + types []*types.Type + explicitConversions []conversionPair + skippedFields map[*types.Type][]string + useUnsafe TypesEqual +} + +func NewGenConversion(sanitizedName, typesPackage, outputPackage string, manualConversions conversionFuncMap, peerPkgs []string, useUnsafe TypesEqual) generator.Generator { + return &genConversion{ + DefaultGen: generator.DefaultGen{ + OptionalName: sanitizedName, + }, + typesPackage: typesPackage, + outputPackage: outputPackage, + peerPackages: peerPkgs, + manualConversions: manualConversions, + imports: generator.NewImportTracker(), + types: []*types.Type{}, + explicitConversions: []conversionPair{}, + skippedFields: map[*types.Type][]string{}, + useUnsafe: useUnsafe, + } +} + +func (g *genConversion) Namers(c *generator.Context) namer.NameSystems { + // Have the raw namer for this file track what it imports. + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + "publicIT": &namerPlusImportTracking{ + delegate: conversionNamer(), + tracker: g.imports, + }, + } +} + +type namerPlusImportTracking struct { + delegate namer.Namer + tracker namer.ImportTracker +} + +func (n *namerPlusImportTracking) Name(t *types.Type) string { + n.tracker.AddType(t) + return n.delegate.Name(t) +} + +func (g *genConversion) convertibleOnlyWithinPackage(inType, outType *types.Type) bool { + var t *types.Type + var other *types.Type + if inType.Name.Package == g.typesPackage { + t, other = inType, outType + } else { + t, other = outType, inType + } + + if t.Name.Package != g.typesPackage { + return false + } + // If the type has opted out, skip it. + tagvals := extractTag(t.CommentLines) + if tagvals != nil { + if tagvals[0] != "false" { + klog.Fatalf("Type %v: unsupported %s value: %q", t, tagName, tagvals[0]) + } + klog.V(5).Infof("type %v requests no conversion generation, skipping", t) + return false + } + // TODO: Consider generating functions for other kinds too. + if t.Kind != types.Struct { + return false + } + // Also, filter out private types. + if namer.IsPrivateGoName(other.Name.Name) { + return false + } + return true +} + +func getExplicitFromTypes(t *types.Type) []types.Name { + comments := append(t.SecondClosestCommentLines, t.CommentLines...) + paths := extractExplicitFromTag(comments) + result := []types.Name{} + for _, path := range paths { + items := strings.Split(path, ".") + if len(items) != 2 { + klog.Errorf("Unexpected k8s:conversion-gen:explicit-from tag: %s", path) + continue + } + switch { + case items[0] == "net/url" && items[1] == "Values": + default: + klog.Fatalf("Not supported k8s:conversion-gen:explicit-from tag: %s", path) + } + result = append(result, types.Name{Package: items[0], Name: items[1]}) + } + return result +} + +func (g *genConversion) Filter(c *generator.Context, t *types.Type) bool { + convertibleWithPeer := func() bool { + peerType := getPeerTypeFor(c, t, g.peerPackages) + if peerType == nil { + return false + } + if !g.convertibleOnlyWithinPackage(t, peerType) { + return false + } + g.types = append(g.types, t) + return true + }() + + explicitlyConvertible := func() bool { + inTypes := getExplicitFromTypes(t) + if len(inTypes) == 0 { + return false + } + for i := range inTypes { + pair := conversionPair{ + inType: &types.Type{Name: inTypes[i]}, + outType: t, + } + g.explicitConversions = append(g.explicitConversions, pair) + } + return true + }() + + return convertibleWithPeer || explicitlyConvertible +} + +func (g *genConversion) isOtherPackage(pkg string) bool { + if pkg == g.outputPackage { + return false + } + if strings.HasSuffix(pkg, `"`+g.outputPackage+`"`) { + return false + } + return true +} + +func (g *genConversion) Imports(c *generator.Context) (imports []string) { + var importLines []string + for _, singleImport := range g.imports.ImportLines() { + if g.isOtherPackage(singleImport) { + importLines = append(importLines, singleImport) + } + } + return importLines +} + +func argsFromType(inType, outType *types.Type) generator.Args { + return generator.Args{ + "inType": inType, + "outType": outType, + } +} + +const nameTmpl = "Convert_$.inType|publicIT$_To_$.outType|publicIT$" + +func (g *genConversion) preexists(inType, outType *types.Type) (*types.Type, bool) { + function, ok := g.manualConversions[conversionPair{inType, outType}] + return function, ok +} + +func (g *genConversion) Init(c *generator.Context, w io.Writer) error { + klogV := klog.V(5) + if klogV.Enabled() { + if m, ok := g.useUnsafe.(equalMemoryTypes); ok { + var result []string + klogV.Info("All objects without identical memory layout:") + for k, v := range m { + if v { + continue + } + result = append(result, fmt.Sprintf(" %s -> %s = %t", k.inType, k.outType, v)) + } + sort.Strings(result) + for _, s := range result { + klogV.Info(s) + } + } + } + sw := generator.NewSnippetWriter(w, c, "$", "$") + sw.Do("func init() {\n", nil) + sw.Do("localSchemeBuilder.Register(RegisterConversions)\n", nil) + sw.Do("}\n", nil) + + scheme := c.Universe.Type(types.Name{Package: runtimePackagePath, Name: "Scheme"}) + schemePtr := &types.Type{ + Kind: types.Pointer, + Elem: scheme, + } + sw.Do("// RegisterConversions adds conversion functions to the given scheme.\n", nil) + sw.Do("// Public to allow building arbitrary schemes.\n", nil) + sw.Do("func RegisterConversions(s $.|raw$) error {\n", schemePtr) + for _, t := range g.types { + peerType := getPeerTypeFor(c, t, g.peerPackages) + if _, found := g.preexists(t, peerType); !found { + args := argsFromType(t, peerType).With("Scope", types.Ref(conversionPackagePath, "Scope")) + sw.Do("if err := s.AddGeneratedConversionFunc((*$.inType|raw$)(nil), (*$.outType|raw$)(nil), func(a, b interface{}, scope $.Scope|raw$) error { return "+nameTmpl+"(a.(*$.inType|raw$), b.(*$.outType|raw$), scope) }); err != nil { return err }\n", args) + } + if _, found := g.preexists(peerType, t); !found { + args := argsFromType(peerType, t).With("Scope", types.Ref(conversionPackagePath, "Scope")) + sw.Do("if err := s.AddGeneratedConversionFunc((*$.inType|raw$)(nil), (*$.outType|raw$)(nil), func(a, b interface{}, scope $.Scope|raw$) error { return "+nameTmpl+"(a.(*$.inType|raw$), b.(*$.outType|raw$), scope) }); err != nil { return err }\n", args) + } + } + + for i := range g.explicitConversions { + args := argsFromType(g.explicitConversions[i].inType, g.explicitConversions[i].outType).With("Scope", types.Ref(conversionPackagePath, "Scope")) + sw.Do("if err := s.AddGeneratedConversionFunc((*$.inType|raw$)(nil), (*$.outType|raw$)(nil), func(a, b interface{}, scope $.Scope|raw$) error { return "+nameTmpl+"(a.(*$.inType|raw$), b.(*$.outType|raw$), scope) }); err != nil { return err }\n", args) + } + + var pairs []conversionPair + for pair, t := range g.manualConversions { + if t.Name.Package != g.outputPackage { + continue + } + pairs = append(pairs, pair) + } + // sort by name of the conversion function + sort.Slice(pairs, func(i, j int) bool { + if g.manualConversions[pairs[i]].Name.Name < g.manualConversions[pairs[j]].Name.Name { + return true + } + return false + }) + for _, pair := range pairs { + args := argsFromType(pair.inType, pair.outType).With("Scope", types.Ref(conversionPackagePath, "Scope")).With("fn", g.manualConversions[pair]) + sw.Do("if err := s.AddConversionFunc((*$.inType|raw$)(nil), (*$.outType|raw$)(nil), func(a, b interface{}, scope $.Scope|raw$) error { return $.fn|raw$(a.(*$.inType|raw$), b.(*$.outType|raw$), scope) }); err != nil { return err }\n", args) + } + + sw.Do("return nil\n", nil) + sw.Do("}\n\n", nil) + return sw.Error() +} + +func (g *genConversion) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + klog.V(5).Infof("generating for type %v", t) + sw := generator.NewSnippetWriter(w, c, "$", "$") + + if peerType := getPeerTypeFor(c, t, g.peerPackages); peerType != nil { + g.generateConversion(t, peerType, sw) + g.generateConversion(peerType, t, sw) + } + + for _, inTypeName := range getExplicitFromTypes(t) { + inPkg, ok := c.Universe[inTypeName.Package] + if !ok { + klog.Errorf("Unrecognized package: %s", inTypeName.Package) + continue + } + inType, ok := inPkg.Types[inTypeName.Name] + if !ok { + klog.Errorf("Unrecognized type in package %s: %s", inTypeName.Package, inTypeName.Name) + continue + } + switch { + case inType.Name.Package == "net/url" && inType.Name.Name == "Values": + g.generateFromUrlValues(inType, t, sw) + default: + klog.Errorf("Not supported input type: %#v", inType.Name) + } + } + + return sw.Error() +} + +func (g *genConversion) generateConversion(inType, outType *types.Type, sw *generator.SnippetWriter) { + args := argsFromType(inType, outType). + With("Scope", types.Ref(conversionPackagePath, "Scope")) + + sw.Do("func auto"+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args) + g.generateFor(inType, outType, sw) + sw.Do("return nil\n", nil) + sw.Do("}\n\n", nil) + + if _, found := g.preexists(inType, outType); found { + // There is a public manual Conversion method: use it. + } else if skipped := g.skippedFields[inType]; len(skipped) != 0 { + // The inType had some fields we could not generate. + klog.Errorf("Warning: could not find nor generate a final Conversion function for %v -> %v", inType, outType) + klog.Errorf(" the following fields need manual conversion:") + for _, f := range skipped { + klog.Errorf(" - %v", f) + } + } else { + // Emit a public conversion function. + sw.Do("// "+nameTmpl+" is an autogenerated conversion function.\n", args) + sw.Do("func "+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args) + sw.Do("return auto"+nameTmpl+"(in, out, s)\n", args) + sw.Do("}\n\n", nil) + } +} + +// we use the system of shadowing 'in' and 'out' so that the same code is valid +// at any nesting level. This makes the autogenerator easy to understand, and +// the compiler shouldn't care. +func (g *genConversion) generateFor(inType, outType *types.Type, sw *generator.SnippetWriter) { + klog.V(5).Infof("generating %v -> %v", inType, outType) + var f func(*types.Type, *types.Type, *generator.SnippetWriter) + + switch inType.Kind { + case types.Builtin: + f = g.doBuiltin + case types.Map: + f = g.doMap + case types.Slice: + f = g.doSlice + case types.Struct: + f = g.doStruct + case types.Pointer: + f = g.doPointer + case types.Alias: + f = g.doAlias + default: + f = g.doUnknown + } + + f(inType, outType, sw) +} + +func (g *genConversion) doBuiltin(inType, outType *types.Type, sw *generator.SnippetWriter) { + if inType == outType { + sw.Do("*out = *in\n", nil) + } else { + sw.Do("*out = $.|raw$(*in)\n", outType) + } +} + +func (g *genConversion) doMap(inType, outType *types.Type, sw *generator.SnippetWriter) { + sw.Do("*out = make($.|raw$, len(*in))\n", outType) + if isDirectlyAssignable(inType.Key, outType.Key) { + sw.Do("for key, val := range *in {\n", nil) + if isDirectlyAssignable(inType.Elem, outType.Elem) { + if inType.Key == outType.Key { + sw.Do("(*out)[key] = ", nil) + } else { + sw.Do("(*out)[$.|raw$(key)] = ", outType.Key) + } + if inType.Elem == outType.Elem { + sw.Do("val\n", nil) + } else { + sw.Do("$.|raw$(val)\n", outType.Elem) + } + } else { + conversionExists := true + if function, ok := g.preexists(inType.Elem, outType.Elem); ok { + sw.Do("newVal := new($.|raw$)\n", outType.Elem) + sw.Do("if err := $.|raw$(&val, newVal, s); err != nil {\n", function) + } else if g.convertibleOnlyWithinPackage(inType.Elem, outType.Elem) { + sw.Do("newVal := new($.|raw$)\n", outType.Elem) + sw.Do("if err := "+nameTmpl+"(&val, newVal, s); err != nil {\n", argsFromType(inType.Elem, outType.Elem)) + } else { + args := argsFromType(inType.Elem, outType.Elem) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + if inType.Key == outType.Key { + sw.Do("(*out)[key] = *newVal\n", nil) + } else { + sw.Do("(*out)[$.|raw$(key)] = *newVal\n", outType.Key) + } + } + } + } else { + // TODO: Implement it when necessary. + sw.Do("for range *in {\n", nil) + sw.Do("// FIXME: Converting unassignable keys unsupported $.|raw$\n", inType.Key) + } + sw.Do("}\n", nil) +} + +func (g *genConversion) doSlice(inType, outType *types.Type, sw *generator.SnippetWriter) { + sw.Do("*out = make($.|raw$, len(*in))\n", outType) + if inType.Elem == outType.Elem && inType.Elem.Kind == types.Builtin { + sw.Do("copy(*out, *in)\n", nil) + } else { + sw.Do("for i := range *in {\n", nil) + if isDirectlyAssignable(inType.Elem, outType.Elem) { + if inType.Elem == outType.Elem { + sw.Do("(*out)[i] = (*in)[i]\n", nil) + } else { + sw.Do("(*out)[i] = $.|raw$((*in)[i])\n", outType.Elem) + } + } else { + conversionExists := true + if function, ok := g.preexists(inType.Elem, outType.Elem); ok { + sw.Do("if err := $.|raw$(&(*in)[i], &(*out)[i], s); err != nil {\n", function) + } else if g.convertibleOnlyWithinPackage(inType.Elem, outType.Elem) { + sw.Do("if err := "+nameTmpl+"(&(*in)[i], &(*out)[i], s); err != nil {\n", argsFromType(inType.Elem, outType.Elem)) + } else { + args := argsFromType(inType.Elem, outType.Elem) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + } + } + sw.Do("}\n", nil) + } +} + +func (g *genConversion) doStruct(inType, outType *types.Type, sw *generator.SnippetWriter) { + for _, inMember := range inType.Members { + if tagvals := extractTag(inMember.CommentLines); tagvals != nil && tagvals[0] == "false" { + // This field is excluded from conversion. + sw.Do("// INFO: in."+inMember.Name+" opted out of conversion generation\n", nil) + continue + } + outMember, found := findMember(outType, inMember.Name) + if !found { + // This field doesn't exist in the peer. + sw.Do("// WARNING: in."+inMember.Name+" requires manual conversion: does not exist in peer-type\n", nil) + g.skippedFields[inType] = append(g.skippedFields[inType], inMember.Name) + continue + } + + inMemberType, outMemberType := inMember.Type, outMember.Type + // create a copy of both underlying types but give them the top level alias name (since aliases + // are assignable) + if underlying := unwrapAlias(inMemberType); underlying != inMemberType { + copied := *underlying + copied.Name = inMemberType.Name + inMemberType = &copied + } + if underlying := unwrapAlias(outMemberType); underlying != outMemberType { + copied := *underlying + copied.Name = outMemberType.Name + outMemberType = &copied + } + + args := argsFromType(inMemberType, outMemberType).With("name", inMember.Name) + + // try a direct memory copy for any type that has exactly equivalent values + if g.useUnsafe.Equal(inMemberType, outMemberType) { + args = args. + With("Pointer", types.Ref("unsafe", "Pointer")). + With("SliceHeader", types.Ref("reflect", "SliceHeader")) + switch inMemberType.Kind { + case types.Pointer: + sw.Do("out.$.name$ = ($.outType|raw$)($.Pointer|raw$(in.$.name$))\n", args) + continue + case types.Map: + sw.Do("out.$.name$ = *(*$.outType|raw$)($.Pointer|raw$(&in.$.name$))\n", args) + continue + case types.Slice: + sw.Do("out.$.name$ = *(*$.outType|raw$)($.Pointer|raw$(&in.$.name$))\n", args) + continue + } + } + + // check based on the top level name, not the underlying names + if function, ok := g.preexists(inMember.Type, outMember.Type); ok { + if isDrop(function.CommentLines) { + continue + } + // copy-only functions that are directly assignable can be inlined instead of invoked. + // As an example, conversion functions exist that allow types with private fields to be + // correctly copied between types. These functions are equivalent to a memory assignment, + // and are necessary for the reflection path, but should not block memory conversion. + // Convert_unversioned_Time_to_unversioned_Time is an example of this logic. + if !isCopyOnly(function.CommentLines) || !g.isFastConversion(inMemberType, outMemberType) { + args["function"] = function + sw.Do("if err := $.function|raw$(&in.$.name$, &out.$.name$, s); err != nil {\n", args) + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + continue + } + klog.V(5).Infof("Skipped function %s because it is copy-only and we can use direct assignment", function.Name) + } + + // If we can't auto-convert, punt before we emit any code. + if inMemberType.Kind != outMemberType.Kind { + sw.Do("// WARNING: in."+inMember.Name+" requires manual conversion: inconvertible types ("+ + inMemberType.String()+" vs "+outMemberType.String()+")\n", nil) + g.skippedFields[inType] = append(g.skippedFields[inType], inMember.Name) + continue + } + + switch inMemberType.Kind { + case types.Builtin: + if inMemberType == outMemberType { + sw.Do("out.$.name$ = in.$.name$\n", args) + } else { + sw.Do("out.$.name$ = $.outType|raw$(in.$.name$)\n", args) + } + case types.Map, types.Slice, types.Pointer: + if g.isDirectlyAssignable(inMemberType, outMemberType) { + sw.Do("out.$.name$ = in.$.name$\n", args) + continue + } + + sw.Do("if in.$.name$ != nil {\n", args) + sw.Do("in, out := &in.$.name$, &out.$.name$\n", args) + g.generateFor(inMemberType, outMemberType, sw) + sw.Do("} else {\n", nil) + sw.Do("out.$.name$ = nil\n", args) + sw.Do("}\n", nil) + case types.Struct: + if g.isDirectlyAssignable(inMemberType, outMemberType) { + sw.Do("out.$.name$ = in.$.name$\n", args) + continue + } + conversionExists := true + if g.convertibleOnlyWithinPackage(inMemberType, outMemberType) { + sw.Do("if err := "+nameTmpl+"(&in.$.name$, &out.$.name$, s); err != nil {\n", args) + } else { + args := argsFromType(inMemberType, outMemberType) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + } + case types.Alias: + if isDirectlyAssignable(inMemberType, outMemberType) { + if inMemberType == outMemberType { + sw.Do("out.$.name$ = in.$.name$\n", args) + } else { + sw.Do("out.$.name$ = $.outType|raw$(in.$.name$)\n", args) + } + } else { + conversionExists := true + if g.convertibleOnlyWithinPackage(inMemberType, outMemberType) { + sw.Do("if err := "+nameTmpl+"(&in.$.name$, &out.$.name$, s); err != nil {\n", args) + } else { + args := argsFromType(inMemberType, outMemberType) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + } + } + default: + conversionExists := true + if g.convertibleOnlyWithinPackage(inMemberType, outMemberType) { + sw.Do("if err := "+nameTmpl+"(&in.$.name$, &out.$.name$, s); err != nil {\n", args) + } else { + args := argsFromType(inMemberType, outMemberType) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + } + } + } +} + +func (g *genConversion) isFastConversion(inType, outType *types.Type) bool { + switch inType.Kind { + case types.Builtin: + return true + case types.Map, types.Slice, types.Pointer, types.Struct, types.Alias: + return g.isDirectlyAssignable(inType, outType) + default: + return false + } +} + +func (g *genConversion) isDirectlyAssignable(inType, outType *types.Type) bool { + return unwrapAlias(inType) == unwrapAlias(outType) +} + +func (g *genConversion) doPointer(inType, outType *types.Type, sw *generator.SnippetWriter) { + sw.Do("*out = new($.Elem|raw$)\n", outType) + if isDirectlyAssignable(inType.Elem, outType.Elem) { + if inType.Elem == outType.Elem { + sw.Do("**out = **in\n", nil) + } else { + sw.Do("**out = $.|raw$(**in)\n", outType.Elem) + } + } else { + conversionExists := true + if function, ok := g.preexists(inType.Elem, outType.Elem); ok { + sw.Do("if err := $.|raw$(*in, *out, s); err != nil {\n", function) + } else if g.convertibleOnlyWithinPackage(inType.Elem, outType.Elem) { + sw.Do("if err := "+nameTmpl+"(*in, *out, s); err != nil {\n", argsFromType(inType.Elem, outType.Elem)) + } else { + args := argsFromType(inType.Elem, outType.Elem) + sw.Do("// FIXME: Provide conversion function to convert $.inType|raw$ to $.outType|raw$\n", args) + sw.Do("compileErrorOnMissingConversion()\n", nil) + conversionExists = false + } + if conversionExists { + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + } + } +} + +func (g *genConversion) doAlias(inType, outType *types.Type, sw *generator.SnippetWriter) { + // TODO: Add support for aliases. + g.doUnknown(inType, outType, sw) +} + +func (g *genConversion) doUnknown(inType, outType *types.Type, sw *generator.SnippetWriter) { + sw.Do("// FIXME: Type $.|raw$ is unsupported.\n", inType) +} + +func (g *genConversion) generateFromUrlValues(inType, outType *types.Type, sw *generator.SnippetWriter) { + args := generator.Args{ + "inType": inType, + "outType": outType, + "Scope": types.Ref(conversionPackagePath, "Scope"), + } + sw.Do("func auto"+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args) + for _, outMember := range outType.Members { + if tagvals := extractTag(outMember.CommentLines); tagvals != nil && tagvals[0] == "false" { + // This field is excluded from conversion. + sw.Do("// INFO: in."+outMember.Name+" opted out of conversion generation\n", nil) + continue + } + jsonTag := reflect.StructTag(outMember.Tags).Get("json") + index := strings.Index(jsonTag, ",") + if index == -1 { + index = len(jsonTag) + } + if index == 0 { + memberArgs := generator.Args{ + "name": outMember.Name, + } + sw.Do("// WARNING: Field $.name$ does not have json tag, skipping.\n\n", memberArgs) + continue + } + memberArgs := generator.Args{ + "name": outMember.Name, + "tag": jsonTag[:index], + } + sw.Do("if values, ok := map[string][]string(*in)[\"$.tag$\"]; ok && len(values) > 0 {\n", memberArgs) + g.fromValuesEntry(inType.Underlying.Elem, outMember, sw) + sw.Do("} else {\n", nil) + g.setZeroValue(outMember, sw) + sw.Do("}\n", nil) + } + sw.Do("return nil\n", nil) + sw.Do("}\n\n", nil) + + if _, found := g.preexists(inType, outType); found { + // There is a public manual Conversion method: use it. + } else { + // Emit a public conversion function. + sw.Do("// "+nameTmpl+" is an autogenerated conversion function.\n", args) + sw.Do("func "+nameTmpl+"(in *$.inType|raw$, out *$.outType|raw$, s $.Scope|raw$) error {\n", args) + sw.Do("return auto"+nameTmpl+"(in, out, s)\n", args) + sw.Do("}\n\n", nil) + } +} + +func (g *genConversion) fromValuesEntry(inType *types.Type, outMember types.Member, sw *generator.SnippetWriter) { + memberArgs := generator.Args{ + "name": outMember.Name, + "type": outMember.Type, + } + if function, ok := g.preexists(inType, outMember.Type); ok { + args := memberArgs.With("function", function) + sw.Do("if err := $.function|raw$(&values, &out.$.name$, s); err != nil {\n", args) + sw.Do("return err\n", nil) + sw.Do("}\n", nil) + return + } + switch { + case outMember.Type == types.String: + sw.Do("out.$.name$ = values[0]\n", memberArgs) + case g.useUnsafe.Equal(inType, outMember.Type): + args := memberArgs.With("Pointer", types.Ref("unsafe", "Pointer")) + switch inType.Kind { + case types.Pointer: + sw.Do("out.$.name$ = ($.type|raw$)($.Pointer|raw$(&values))\n", args) + case types.Map, types.Slice: + sw.Do("out.$.name$ = *(*$.type|raw$)($.Pointer|raw$(&values))\n", args) + default: + // TODO: Support other types to allow more auto-conversions. + sw.Do("// FIXME: out.$.name$ is of not yet supported type and requires manual conversion\n", memberArgs) + } + default: + // TODO: Support other types to allow more auto-conversions. + sw.Do("// FIXME: out.$.name$ is of not yet supported type and requires manual conversion\n", memberArgs) + } +} + +func (g *genConversion) setZeroValue(outMember types.Member, sw *generator.SnippetWriter) { + outMemberType := unwrapAlias(outMember.Type) + memberArgs := generator.Args{ + "name": outMember.Name, + "alias": outMember.Type, + "type": outMemberType, + } + + switch outMemberType.Kind { + case types.Builtin: + switch outMemberType { + case types.String: + sw.Do("out.$.name$ = \"\"\n", memberArgs) + case types.Int64, types.Int32, types.Int16, types.Int, types.Uint64, types.Uint32, types.Uint16, types.Uint: + sw.Do("out.$.name$ = 0\n", memberArgs) + case types.Uintptr, types.Byte: + sw.Do("out.$.name$ = 0\n", memberArgs) + case types.Float64, types.Float32, types.Float: + sw.Do("out.$.name$ = 0\n", memberArgs) + case types.Bool: + sw.Do("out.$.name$ = false\n", memberArgs) + default: + sw.Do("// FIXME: out.$.name$ is of unsupported type and requires manual conversion\n", memberArgs) + } + case types.Struct: + if outMemberType == outMember.Type { + sw.Do("out.$.name$ = $.type|raw${}\n", memberArgs) + } else { + sw.Do("out.$.name$ = $.alias|raw$($.type|raw${})\n", memberArgs) + } + case types.Map, types.Slice, types.Pointer: + sw.Do("out.$.name$ = nil\n", memberArgs) + case types.Alias: + // outMemberType was already unwrapped from aliases - so that should never happen. + sw.Do("// FIXME: unexpected error for out.$.name$\n", memberArgs) + case types.Interface, types.Array: + sw.Do("out.$.name$ = nil\n", memberArgs) + default: + sw.Do("// FIXME: out.$.name$ is of unsupported type and requires manual conversion\n", memberArgs) + } +} + +func isDirectlyAssignable(inType, outType *types.Type) bool { + // TODO: This should maybe check for actual assignability between the two + // types, rather than superficial traits that happen to indicate it is + // assignable in the ways we currently use this code. + return inType.IsAssignable() && (inType.IsPrimitive() || isSamePackage(inType, outType)) +} + +func isSamePackage(inType, outType *types.Type) bool { + return inType.Name.Package == outType.Name.Package +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/main.go new file mode 100644 index 000000000000..5a461d270903 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/conversion-gen/main.go @@ -0,0 +1,139 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// conversion-gen is a tool for auto-generating functions that convert +// between internal and external types. A general conversion code +// generation task involves three sets of packages: (1) a set of +// packages containing internal types, (2) a single package containing +// the external types, and (3) a single destination package (i.e., +// where the generated conversion functions go, and where the +// developer-authored conversion functions are). The packages +// containing the internal types play the role known as "peer +// packages" in the general code-generation framework of Kubernetes. +// +// For each conversion task, `conversion-gen` will generate functions +// that efficiently convert between same-name types in the two +// (internal, external) packages. The generated functions include +// ones named +// +// autoConvert___To__ +// +// for each such pair of types --- both with (pkg1,pkg2) = +// (internal,external) and (pkg1,pkg2) = (external,internal). The +// generated conversion functions recurse on the structure of the data +// types. For structs, source and destination fields are matched up +// according to name; if a source field has no corresponding +// destination or there is a fundamental mismatch in the type of the +// field then the generated autoConvert_... function has just a +// warning comment about that field. The generated conversion +// functions use standard value assignment wherever possible. For +// compound types, the generated conversion functions call the +// `Convert...` functions for the subsidiary types. +// +// For each pair of types `conversion-gen` will also generate a +// function named +// +// Convert___To__ +// +// if both of two conditions are met: (1) the destination package does +// not contain a function of that name in a non-generated file and (2) +// the generation of the corresponding autoConvert_... function did +// not run into trouble with a missing or fundamentally differently +// typed field. A generated Convert_... function simply calls the +// corresponding `autoConvert...` function. `conversion_gen` also +// generates a function that updates a given `runtime.Scheme` by +// registering all the Convert_... functions found and generated. +// Thus developers can override the generated behavior for selected +// type pairs by putting the desired Convert_... functions in +// non-generated files. Further, developers are practically required +// to override the generated behavior when there are missing or +// fundamentally differently typed fields. +// +// `conversion-gen` will scan its `--input-dirs`, looking at the +// package defined in each of those directories for comment tags that +// define a conversion code generation task. A package requests +// conversion code generation by including one or more comment in the +// package's `doc.go` file (currently anywhere in that file is +// acceptable, but the recommended location is above the `package` +// statement), of the form: +// +// // +k8s:conversion-gen= +// +// This introduces a conversion task, for which the destination +// package is the one containing the file with the tag and the tag +// identifies a package containing internal types. If there is also a +// tag of the form +// +// // +k8s:conversion-gen-external-types= +// +// then it identifies the package containing the external types; +// otherwise they are in the destination package. +// +// For each conversion code generation task, the full set of internal +// packages (AKA peer packages) consists of the ones specified in the +// `k8s:conversion-gen` tags PLUS any specified in the +// `--base-peer-dirs` and `--extra-peer-dirs` flags on the command +// line. +// +// When generating for a package, individual types or fields of structs may opt +// out of Conversion generation by specifying a comment on the of the form: +// +// // +k8s:conversion-gen=false +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/conversion-gen/args" + "k8s.io/code-generator/cmd/conversion-gen/generators" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + // k8s.io/apimachinery/pkg/runtime contains a number of manual conversions, + // that we need to generate conversions. + // Packages being dependencies of explicitly requested packages are only + // partially scanned - only types explicitly used are being traversed. + // Not used functions or types are omitted. + // Adding this explicitly to InputDirs ensures that the package is fully + // scanned and all functions are parsed and processed. + genericArgs.InputDirs = append(genericArgs.InputDirs, "k8s.io/apimachinery/pkg/runtime") + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go new file mode 100644 index 000000000000..789713012adc --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/args/args.go @@ -0,0 +1,54 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" + "k8s.io/gengo/examples/deepcopy-gen/generators" +) + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs generators.CustomArgs + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{} + genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there + genericArgs.OutputFileBaseName = "deepcopy_generated" + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + pflag.CommandLine.StringSliceVar(&ca.BoundingDirs, "bounding-dirs", ca.BoundingDirs, + "Comma-separated list of import paths which bound the types for which deep-copies will be generated.") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + _ = genericArgs.CustomArgs.(*generators.CustomArgs) + + if len(genericArgs.OutputFileBaseName) == 0 { + return fmt.Errorf("output file base name cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go new file mode 100644 index 000000000000..5622c1a1bebd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go @@ -0,0 +1,81 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// deepcopy-gen is a tool for auto-generating DeepCopy functions. +// +// Given a list of input directories, it will generate functions that +// efficiently perform a full deep-copy of each type. For any type that +// offers a `.DeepCopy()` method, it will simply call that. Otherwise it will +// use standard value assignment whenever possible. If that is not possible it +// will try to call its own generated copy function for the type, if the type is +// within the allowed root packages. Failing that, it will fall back on +// `conversion.Cloner.DeepCopy(val)` to make the copy. The resulting file will +// be stored in the same directory as the processed source package. +// +// Generation is governed by comment tags in the source. Any package may +// request DeepCopy generation by including a comment in the file-comments of +// one file, of the form: +// +// // +k8s:deepcopy-gen=package +// +// DeepCopy functions can be generated for individual types, rather than the +// entire package by specifying a comment on the type definion of the form: +// +// // +k8s:deepcopy-gen=true +// +// When generating for a whole package, individual types may opt out of +// DeepCopy generation by specifying a comment on the of the form: +// +// // +k8s:deepcopy-gen=false +// +// Note that registration is a whole-package option, and is not available for +// individual types. +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/gengo/examples/deepcopy-gen/generators" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/deepcopy-gen/args" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/args/args.go new file mode 100644 index 000000000000..3c5a042c7ca3 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/args/args.go @@ -0,0 +1,54 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" + "k8s.io/gengo/examples/defaulter-gen/generators" +) + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs generators.CustomArgs + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{} + genericArgs.CustomArgs = (*generators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there + genericArgs.OutputFileBaseName = "zz_generated.defaults" + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + pflag.CommandLine.StringSliceVar(&ca.ExtraPeerDirs, "extra-peer-dirs", ca.ExtraPeerDirs, + "Comma-separated list of import paths which are considered, after tag-specified peers, for conversions.") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + _ = genericArgs.CustomArgs.(*generators.CustomArgs) + + if len(genericArgs.OutputFileBaseName) == 0 { + return fmt.Errorf("output file base name cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/main.go new file mode 100644 index 000000000000..23d5d3271bb0 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/defaulter-gen/main.go @@ -0,0 +1,77 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// defaulter-gen is a tool for auto-generating Defaulter functions. +// +// Given a list of input directories, it will scan for top level types +// and generate efficient defaulters for an entire object from the sum +// of the SetDefault_* methods contained in the object tree. +// +// Generation is governed by comment tags in the source. Any package may +// request defaulter generation by including one or more comment tags at +// the package comment level: +// +// // +k8s:defaulter-gen= +// +// which will create defaulters for any type that contains the provided +// field name (if the type has defaulters). Any type may request explicit +// defaulting by providing the comment tag: +// +// // +k8s:defaulter-gen=true|false +// +// An existing defaulter method (`SetDefaults_TYPE`) can provide the +// comment tag: +// +// // +k8s:defaulter-gen=covers +// +// to indicate that the defaulter does not or should not call any nested +// defaulters. +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/gengo/examples/defaulter-gen/generators" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/defaulter-gen/args" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/.gitignore b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/.gitignore new file mode 100644 index 000000000000..0e9aa466bba2 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/.gitignore @@ -0,0 +1 @@ +go-to-protobuf diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/OWNERS b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/OWNERS new file mode 100644 index 000000000000..af7e2ec4c7d3 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/OWNERS @@ -0,0 +1,6 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: + - smarterclayton +reviewers: + - smarterclayton diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/main.go new file mode 100644 index 000000000000..009973389b44 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/main.go @@ -0,0 +1,41 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// go-to-protobuf generates a Protobuf IDL from a Go struct, respecting any +// existing IDL tags on the Go struct. +package main + +import ( + goflag "flag" + + flag "github.com/spf13/pflag" + "k8s.io/code-generator/cmd/go-to-protobuf/protobuf" + "k8s.io/klog/v2" +) + +var g = protobuf.New() + +func init() { + klog.InitFlags(nil) + g.BindFlags(flag.CommandLine) + goflag.Set("logtostderr", "true") + flag.CommandLine.AddGoFlagSet(goflag.CommandLine) +} + +func main() { + flag.Parse() + protobuf.Run(g) +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/cmd.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/cmd.go new file mode 100644 index 000000000000..ff267e2610ea --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/cmd.go @@ -0,0 +1,480 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// go-to-protobuf generates a Protobuf IDL from a Go struct, respecting any +// existing IDL tags on the Go struct. +package protobuf + +import ( + "bytes" + "fmt" + "log" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" + + flag "github.com/spf13/pflag" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/parser" + "k8s.io/gengo/types" +) + +type Generator struct { + Common args.GeneratorArgs + APIMachineryPackages string + Packages string + OutputBase string + VendorOutputBase string + ProtoImport []string + Conditional string + Clean bool + OnlyIDL bool + KeepGogoproto bool + SkipGeneratedRewrite bool + DropEmbeddedFields string + TrimPathPrefix string +} + +func New() *Generator { + sourceTree := args.DefaultSourceTree() + common := args.GeneratorArgs{ + OutputBase: sourceTree, + } + defaultProtoImport := filepath.Join(sourceTree, "k8s.io", "kubernetes", "vendor", "github.com", "gogo", "protobuf", "protobuf") + cwd, err := os.Getwd() + if err != nil { + log.Fatalf("Cannot get current directory.") + } + return &Generator{ + Common: common, + OutputBase: sourceTree, + VendorOutputBase: filepath.Join(cwd, "vendor"), + ProtoImport: []string{defaultProtoImport}, + APIMachineryPackages: strings.Join([]string{ + `+k8s.io/apimachinery/pkg/util/intstr`, + `+k8s.io/apimachinery/pkg/api/resource`, + `+k8s.io/apimachinery/pkg/runtime/schema`, + `+k8s.io/apimachinery/pkg/runtime`, + `k8s.io/apimachinery/pkg/apis/meta/v1`, + `k8s.io/apimachinery/pkg/apis/meta/v1beta1`, + `k8s.io/apimachinery/pkg/apis/testapigroup/v1`, + }, ","), + Packages: "", + DropEmbeddedFields: "k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta", + } +} + +func (g *Generator) BindFlags(flag *flag.FlagSet) { + flag.StringVarP(&g.Common.GoHeaderFilePath, "go-header-file", "h", g.Common.GoHeaderFilePath, "File containing boilerplate header text. The string YEAR will be replaced with the current 4-digit year.") + flag.BoolVar(&g.Common.VerifyOnly, "verify-only", g.Common.VerifyOnly, "If true, only verify existing output, do not write anything.") + flag.StringVarP(&g.Packages, "packages", "p", g.Packages, "comma-separated list of directories to get input types from. Directories prefixed with '-' are not generated, directories prefixed with '+' only create types with explicit IDL instructions.") + flag.StringVar(&g.APIMachineryPackages, "apimachinery-packages", g.APIMachineryPackages, "comma-separated list of directories to get apimachinery input types from which are needed by any API. Directories prefixed with '-' are not generated, directories prefixed with '+' only create types with explicit IDL instructions.") + flag.StringVarP(&g.OutputBase, "output-base", "o", g.OutputBase, "Output base; defaults to $GOPATH/src/") + flag.StringVar(&g.VendorOutputBase, "vendor-output-base", g.VendorOutputBase, "The vendor/ directory to look for packages in; defaults to $PWD/vendor/.") + flag.StringSliceVar(&g.ProtoImport, "proto-import", g.ProtoImport, "The search path for the core protobuf .protos, required; defaults $GOPATH/src/k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protobuf.") + flag.StringVar(&g.Conditional, "conditional", g.Conditional, "An optional Golang build tag condition to add to the generated Go code") + flag.BoolVar(&g.Clean, "clean", g.Clean, "If true, remove all generated files for the specified Packages.") + flag.BoolVar(&g.OnlyIDL, "only-idl", g.OnlyIDL, "If true, only generate the IDL for each package.") + flag.BoolVar(&g.KeepGogoproto, "keep-gogoproto", g.KeepGogoproto, "If true, the generated IDL will contain gogoprotobuf extensions which are normally removed") + flag.BoolVar(&g.SkipGeneratedRewrite, "skip-generated-rewrite", g.SkipGeneratedRewrite, "If true, skip fixing up the generated.pb.go file (debugging only).") + flag.StringVar(&g.DropEmbeddedFields, "drop-embedded-fields", g.DropEmbeddedFields, "Comma-delimited list of embedded Go types to omit from generated protobufs") + flag.StringVar(&g.TrimPathPrefix, "trim-path-prefix", g.TrimPathPrefix, "If set, trim the specified prefix from --output-package when generating files.") +} + +func Run(g *Generator) { + if g.Common.VerifyOnly { + g.OnlyIDL = true + g.Clean = false + } + + b := parser.New() + b.AddBuildTags("proto") + + omitTypes := map[types.Name]struct{}{} + for _, t := range strings.Split(g.DropEmbeddedFields, ",") { + name := types.Name{} + if i := strings.LastIndex(t, "."); i != -1 { + name.Package, name.Name = t[:i], t[i+1:] + } else { + name.Name = t + } + if len(name.Name) == 0 { + log.Fatalf("--drop-embedded-types requires names in the form of [GOPACKAGE.]TYPENAME: %v", t) + } + omitTypes[name] = struct{}{} + } + + boilerplate, err := g.Common.LoadGoBoilerplate() + if err != nil { + log.Fatalf("Failed loading boilerplate (consider using the go-header-file flag): %v", err) + } + + protobufNames := NewProtobufNamer() + outputPackages := generator.Packages{} + nonOutputPackages := map[string]struct{}{} + + var packages []string + if len(g.APIMachineryPackages) != 0 { + packages = append(packages, strings.Split(g.APIMachineryPackages, ",")...) + } + if len(g.Packages) != 0 { + packages = append(packages, strings.Split(g.Packages, ",")...) + } + if len(packages) == 0 { + log.Fatalf("Both apimachinery-packages and packages are empty. At least one package must be specified.") + } + + for _, d := range packages { + generateAllTypes, outputPackage := true, true + switch { + case strings.HasPrefix(d, "+"): + d = d[1:] + generateAllTypes = false + case strings.HasPrefix(d, "-"): + d = d[1:] + outputPackage = false + } + name := protoSafePackage(d) + parts := strings.SplitN(d, "=", 2) + if len(parts) > 1 { + d = parts[0] + name = parts[1] + } + p := newProtobufPackage(d, name, generateAllTypes, omitTypes) + header := append([]byte{}, boilerplate...) + header = append(header, p.HeaderText...) + p.HeaderText = header + protobufNames.Add(p) + if outputPackage { + outputPackages = append(outputPackages, p) + } else { + nonOutputPackages[name] = struct{}{} + } + } + + if !g.Common.VerifyOnly { + for _, p := range outputPackages { + if err := p.(*protobufPackage).Clean(g.OutputBase); err != nil { + log.Fatalf("Unable to clean package %s: %v", p.Name(), err) + } + } + } + + if g.Clean { + return + } + + for _, p := range protobufNames.List() { + if err := b.AddDir(p.Path()); err != nil { + log.Fatalf("Unable to add directory %q: %v", p.Path(), err) + } + } + + c, err := generator.NewContext( + b, + namer.NameSystems{ + "public": namer.NewPublicNamer(3), + "proto": protobufNames, + }, + "public", + ) + if err != nil { + log.Fatalf("Failed making a context: %v", err) + } + + c.Verify = g.Common.VerifyOnly + c.FileTypes["protoidl"] = NewProtoFile() + c.TrimPathPrefix = g.TrimPathPrefix + + // order package by imports, importees first + deps := deps(c, protobufNames.packages) + order, err := importOrder(deps) + if err != nil { + log.Fatalf("Failed to order packages by imports: %v", err) + } + topologicalPos := map[string]int{} + for i, p := range order { + topologicalPos[p] = i + } + sort.Sort(positionOrder{topologicalPos, protobufNames.packages}) + + var vendoredOutputPackages, localOutputPackages generator.Packages + for _, p := range protobufNames.packages { + if _, ok := nonOutputPackages[p.Name()]; ok { + // if we're not outputting the package, don't include it in either package list + continue + } + p.Vendored = strings.Contains(c.Universe[p.PackagePath].SourcePath, "/vendor/") + if p.Vendored { + vendoredOutputPackages = append(vendoredOutputPackages, p) + } else { + localOutputPackages = append(localOutputPackages, p) + } + } + + if err := protobufNames.AssignTypesToPackages(c); err != nil { + log.Fatalf("Failed to identify Common types: %v", err) + } + + if err := c.ExecutePackages(g.VendorOutputBase, vendoredOutputPackages); err != nil { + log.Fatalf("Failed executing vendor generator: %v", err) + } + if err := c.ExecutePackages(g.OutputBase, localOutputPackages); err != nil { + log.Fatalf("Failed executing local generator: %v", err) + } + + if g.OnlyIDL { + return + } + + if _, err := exec.LookPath("protoc"); err != nil { + log.Fatalf("Unable to find 'protoc': %v", err) + } + + searchArgs := []string{"-I", ".", "-I", g.OutputBase} + if len(g.ProtoImport) != 0 { + for _, s := range g.ProtoImport { + searchArgs = append(searchArgs, "-I", s) + } + } + args := append(searchArgs, fmt.Sprintf("--gogo_out=%s", g.OutputBase)) + + buf := &bytes.Buffer{} + if len(g.Conditional) > 0 { + fmt.Fprintf(buf, "// +build %s\n\n", g.Conditional) + } + buf.Write(boilerplate) + + for _, outputPackage := range outputPackages { + p := outputPackage.(*protobufPackage) + + path := filepath.Join(g.OutputBase, p.ImportPath()) + outputPath := filepath.Join(g.OutputBase, p.OutputPath()) + if p.Vendored { + path = filepath.Join(g.VendorOutputBase, p.ImportPath()) + outputPath = filepath.Join(g.VendorOutputBase, p.OutputPath()) + } + + // When working outside of GOPATH, we typically won't want to generate the + // full path for a package. For example, if our current project's root/base + // package is github.com/foo/bar, outDir=., p.Path()=github.com/foo/bar/generated, + // then we really want to be writing files to ./generated, not ./github.com/foo/bar/generated. + // The following will trim a path prefix (github.com/foo/bar) from p.Path() to arrive at + // a relative path that works with projects not in GOPATH. + if g.TrimPathPrefix != "" { + separator := string(filepath.Separator) + if !strings.HasSuffix(g.TrimPathPrefix, separator) { + g.TrimPathPrefix += separator + } + + path = strings.TrimPrefix(path, g.TrimPathPrefix) + outputPath = strings.TrimPrefix(outputPath, g.TrimPathPrefix) + } + + // generate the gogoprotobuf protoc + cmd := exec.Command("protoc", append(args, path)...) + out, err := cmd.CombinedOutput() + if err != nil { + log.Println(strings.Join(cmd.Args, " ")) + log.Println(string(out)) + log.Fatalf("Unable to generate protoc on %s: %v", p.PackageName, err) + } + + if g.SkipGeneratedRewrite { + continue + } + + // alter the generated protobuf file to remove the generated types (but leave the serializers) and rewrite the + // package statement to match the desired package name + if err := RewriteGeneratedGogoProtobufFile(outputPath, p.ExtractGeneratedType, p.OptionalTypeName, buf.Bytes()); err != nil { + log.Fatalf("Unable to rewrite generated %s: %v", outputPath, err) + } + + // sort imports + cmd = exec.Command("goimports", "-w", outputPath) + out, err = cmd.CombinedOutput() + if len(out) > 0 { + log.Print(string(out)) + } + if err != nil { + log.Println(strings.Join(cmd.Args, " ")) + log.Fatalf("Unable to rewrite imports for %s: %v", p.PackageName, err) + } + + // format and simplify the generated file + cmd = exec.Command("gofmt", "-s", "-w", outputPath) + out, err = cmd.CombinedOutput() + if len(out) > 0 { + log.Print(string(out)) + } + if err != nil { + log.Println(strings.Join(cmd.Args, " ")) + log.Fatalf("Unable to apply gofmt for %s: %v", p.PackageName, err) + } + } + + if g.SkipGeneratedRewrite { + return + } + + if !g.KeepGogoproto { + // generate, but do so without gogoprotobuf extensions + for _, outputPackage := range outputPackages { + p := outputPackage.(*protobufPackage) + p.OmitGogo = true + } + if err := c.ExecutePackages(g.VendorOutputBase, vendoredOutputPackages); err != nil { + log.Fatalf("Failed executing vendor generator: %v", err) + } + if err := c.ExecutePackages(g.OutputBase, localOutputPackages); err != nil { + log.Fatalf("Failed executing local generator: %v", err) + } + } + + for _, outputPackage := range outputPackages { + p := outputPackage.(*protobufPackage) + + if len(p.StructTags) == 0 { + continue + } + + pattern := filepath.Join(g.OutputBase, p.PackagePath, "*.go") + if p.Vendored { + pattern = filepath.Join(g.VendorOutputBase, p.PackagePath, "*.go") + } + files, err := filepath.Glob(pattern) + if err != nil { + log.Fatalf("Can't glob pattern %q: %v", pattern, err) + } + + for _, s := range files { + if strings.HasSuffix(s, "_test.go") { + continue + } + if err := RewriteTypesWithProtobufStructTags(s, p.StructTags); err != nil { + log.Fatalf("Unable to rewrite with struct tags %s: %v", s, err) + } + } + } +} + +func deps(c *generator.Context, pkgs []*protobufPackage) map[string][]string { + ret := map[string][]string{} + for _, p := range pkgs { + pkg, ok := c.Universe[p.PackagePath] + if !ok { + log.Fatalf("Unrecognized package: %s", p.PackagePath) + } + + for _, d := range pkg.Imports { + ret[p.PackagePath] = append(ret[p.PackagePath], d.Path) + } + } + return ret +} + +// given a set of pkg->[]deps, return the order that ensures all deps are processed before the things that depend on them +func importOrder(deps map[string][]string) ([]string, error) { + // add all nodes and edges + var remainingNodes = map[string]struct{}{} + var graph = map[edge]struct{}{} + for to, froms := range deps { + remainingNodes[to] = struct{}{} + for _, from := range froms { + remainingNodes[from] = struct{}{} + graph[edge{from: from, to: to}] = struct{}{} + } + } + + // find initial nodes without any dependencies + sorted := findAndRemoveNodesWithoutDependencies(remainingNodes, graph) + for i := 0; i < len(sorted); i++ { + node := sorted[i] + removeEdgesFrom(node, graph) + sorted = append(sorted, findAndRemoveNodesWithoutDependencies(remainingNodes, graph)...) + } + if len(remainingNodes) > 0 { + return nil, fmt.Errorf("cycle: remaining nodes: %#v, remaining edges: %#v", remainingNodes, graph) + } + //for _, n := range sorted { + // fmt.Println("topological order", n) + //} + return sorted, nil +} + +// edge describes a from->to relationship in a graph +type edge struct { + from string + to string +} + +// findAndRemoveNodesWithoutDependencies finds nodes in the given set which are not pointed to by any edges in the graph, +// removes them from the set of nodes, and returns them in sorted order +func findAndRemoveNodesWithoutDependencies(nodes map[string]struct{}, graph map[edge]struct{}) []string { + roots := []string{} + // iterate over all nodes as potential "to" nodes + for node := range nodes { + incoming := false + // iterate over all remaining edges + for edge := range graph { + // if there's any edge to the node we care about, it's not a root + if edge.to == node { + incoming = true + break + } + } + // if there are no incoming edges, remove from the set of remaining nodes and add to our results + if !incoming { + delete(nodes, node) + roots = append(roots, node) + } + } + sort.Strings(roots) + return roots +} + +// removeEdgesFrom removes any edges from the graph where edge.from == node +func removeEdgesFrom(node string, graph map[edge]struct{}) { + for edge := range graph { + if edge.from == node { + delete(graph, edge) + } + } +} + +type positionOrder struct { + pos map[string]int + elements []*protobufPackage +} + +func (o positionOrder) Len() int { + return len(o.elements) +} + +func (o positionOrder) Less(i, j int) bool { + return o.pos[o.elements[i].PackagePath] < o.pos[o.elements[j].PackagePath] +} + +func (o positionOrder) Swap(i, j int) { + x := o.elements[i] + o.elements[i] = o.elements[j] + o.elements[j] = x +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/generator.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/generator.go new file mode 100644 index 000000000000..c480a8a62eab --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/generator.go @@ -0,0 +1,773 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "fmt" + "io" + "log" + "reflect" + "sort" + "strconv" + "strings" + + "k8s.io/klog/v2" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// genProtoIDL produces a .proto IDL. +type genProtoIDL struct { + generator.DefaultGen + localPackage types.Name + localGoPackage types.Name + imports namer.ImportTracker + + generateAll bool + omitGogo bool + omitFieldTypes map[types.Name]struct{} +} + +func (g *genProtoIDL) PackageVars(c *generator.Context) []string { + if g.omitGogo { + return []string{ + fmt.Sprintf("option go_package = %q;", g.localGoPackage.Package), + } + } + return []string{ + "option (gogoproto.marshaler_all) = true;", + "option (gogoproto.stable_marshaler_all) = true;", + "option (gogoproto.sizer_all) = true;", + "option (gogoproto.goproto_stringer_all) = false;", + "option (gogoproto.stringer_all) = true;", + "option (gogoproto.unmarshaler_all) = true;", + "option (gogoproto.goproto_unrecognized_all) = false;", + "option (gogoproto.goproto_enum_prefix_all) = false;", + "option (gogoproto.goproto_getters_all) = false;", + fmt.Sprintf("option go_package = %q;", g.localGoPackage.Package), + } +} +func (g *genProtoIDL) Filename() string { return g.OptionalName + ".proto" } +func (g *genProtoIDL) FileType() string { return "protoidl" } +func (g *genProtoIDL) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + // The local namer returns the correct protobuf name for a proto type + // in the context of a package + "local": localNamer{g.localPackage}, + } +} + +// Filter ignores types that are identified as not exportable. +func (g *genProtoIDL) Filter(c *generator.Context, t *types.Type) bool { + tagVals := types.ExtractCommentTags("+", t.CommentLines)["protobuf"] + if tagVals != nil { + if tagVals[0] == "false" { + // Type specified "false". + return false + } + if tagVals[0] == "true" { + // Type specified "true". + return true + } + klog.Fatalf(`Comment tag "protobuf" must be true or false, found: %q`, tagVals[0]) + } + if !g.generateAll { + // We're not generating everything. + return false + } + seen := map[*types.Type]bool{} + ok := isProtoable(seen, t) + return ok +} + +func isProtoable(seen map[*types.Type]bool, t *types.Type) bool { + if seen[t] { + // be optimistic in the case of type cycles. + return true + } + seen[t] = true + switch t.Kind { + case types.Builtin: + return true + case types.Alias: + return isProtoable(seen, t.Underlying) + case types.Slice, types.Pointer: + return isProtoable(seen, t.Elem) + case types.Map: + return isProtoable(seen, t.Key) && isProtoable(seen, t.Elem) + case types.Struct: + if len(t.Members) == 0 { + return true + } + for _, m := range t.Members { + if isProtoable(seen, m.Type) { + return true + } + } + return false + case types.Func, types.Chan: + return false + case types.DeclarationOf, types.Unknown, types.Unsupported: + return false + case types.Interface: + return false + default: + log.Printf("WARNING: type %q is not portable: %s", t.Kind, t.Name) + return false + } +} + +// isOptionalAlias should return true if the specified type has an underlying type +// (is an alias) of a map or slice and has the comment tag protobuf.nullable=true, +// indicating that the type should be nullable in protobuf. +func isOptionalAlias(t *types.Type) bool { + if t.Underlying == nil || (t.Underlying.Kind != types.Map && t.Underlying.Kind != types.Slice) { + return false + } + if extractBoolTagOrDie("protobuf.nullable", t.CommentLines) == false { + return false + } + return true +} + +func (g *genProtoIDL) Imports(c *generator.Context) (imports []string) { + lines := []string{} + // TODO: this could be expressed more cleanly + for _, line := range g.imports.ImportLines() { + if g.omitGogo && line == "github.com/gogo/protobuf/gogoproto/gogo.proto" { + continue + } + lines = append(lines, line) + } + return lines +} + +// GenerateType makes the body of a file implementing a set for type t. +func (g *genProtoIDL) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + b := bodyGen{ + locator: &protobufLocator{ + namer: c.Namers["proto"].(ProtobufFromGoNamer), + tracker: g.imports, + universe: c.Universe, + + localGoPackage: g.localGoPackage.Package, + }, + localPackage: g.localPackage, + + omitGogo: g.omitGogo, + omitFieldTypes: g.omitFieldTypes, + + t: t, + } + switch t.Kind { + case types.Alias: + return b.doAlias(sw) + case types.Struct: + return b.doStruct(sw) + default: + return b.unknown(sw) + } +} + +// ProtobufFromGoNamer finds the protobuf name of a type (and its package, and +// the package path) from its Go name. +type ProtobufFromGoNamer interface { + GoNameToProtoName(name types.Name) types.Name +} + +type ProtobufLocator interface { + ProtoTypeFor(t *types.Type) (*types.Type, error) + GoTypeForName(name types.Name) *types.Type + CastTypeName(name types.Name) string +} + +type protobufLocator struct { + namer ProtobufFromGoNamer + tracker namer.ImportTracker + universe types.Universe + + localGoPackage string +} + +// CastTypeName returns the cast type name of a Go type +// TODO: delegate to a new localgo namer? +func (p protobufLocator) CastTypeName(name types.Name) string { + if name.Package == p.localGoPackage { + return name.Name + } + return name.String() +} + +func (p protobufLocator) GoTypeForName(name types.Name) *types.Type { + if len(name.Package) == 0 { + name.Package = p.localGoPackage + } + return p.universe.Type(name) +} + +// ProtoTypeFor locates a Protobuf type for the provided Go type (if possible). +func (p protobufLocator) ProtoTypeFor(t *types.Type) (*types.Type, error) { + switch { + // we've already converted the type, or it's a map + case t.Kind == types.Protobuf || t.Kind == types.Map: + p.tracker.AddType(t) + return t, nil + } + // it's a fundamental type + if t, ok := isFundamentalProtoType(t); ok { + p.tracker.AddType(t) + return t, nil + } + // it's a message + if t.Kind == types.Struct || isOptionalAlias(t) { + t := &types.Type{ + Name: p.namer.GoNameToProtoName(t.Name), + Kind: types.Protobuf, + + CommentLines: t.CommentLines, + } + p.tracker.AddType(t) + return t, nil + } + return nil, errUnrecognizedType +} + +type bodyGen struct { + locator ProtobufLocator + localPackage types.Name + omitGogo bool + omitFieldTypes map[types.Name]struct{} + + t *types.Type +} + +func (b bodyGen) unknown(sw *generator.SnippetWriter) error { + return fmt.Errorf("not sure how to generate: %#v", b.t) +} + +func (b bodyGen) doAlias(sw *generator.SnippetWriter) error { + if !isOptionalAlias(b.t) { + return nil + } + + var kind string + switch b.t.Underlying.Kind { + case types.Map: + kind = "map" + default: + kind = "slice" + } + optional := &types.Type{ + Name: b.t.Name, + Kind: types.Struct, + + CommentLines: b.t.CommentLines, + SecondClosestCommentLines: b.t.SecondClosestCommentLines, + Members: []types.Member{ + { + Name: "Items", + CommentLines: []string{fmt.Sprintf("items, if empty, will result in an empty %s\n", kind)}, + Type: b.t.Underlying, + }, + }, + } + nested := b + nested.t = optional + return nested.doStruct(sw) +} + +func (b bodyGen) doStruct(sw *generator.SnippetWriter) error { + if len(b.t.Name.Name) == 0 { + return nil + } + if namer.IsPrivateGoName(b.t.Name.Name) { + return nil + } + + var alias *types.Type + var fields []protoField + options := []string{} + allOptions := types.ExtractCommentTags("+", b.t.CommentLines) + for k, v := range allOptions { + switch { + case strings.HasPrefix(k, "protobuf.options."): + key := strings.TrimPrefix(k, "protobuf.options.") + switch key { + case "marshal": + if v[0] == "false" { + if !b.omitGogo { + options = append(options, + "(gogoproto.marshaler) = false", + "(gogoproto.unmarshaler) = false", + "(gogoproto.sizer) = false", + ) + } + } + default: + if !b.omitGogo || !strings.HasPrefix(key, "(gogoproto.") { + if key == "(gogoproto.goproto_stringer)" && v[0] == "false" { + options = append(options, "(gogoproto.stringer) = false") + } + options = append(options, fmt.Sprintf("%s = %s", key, v[0])) + } + } + // protobuf.as allows a type to have the same message contents as another Go type + case k == "protobuf.as": + fields = nil + if alias = b.locator.GoTypeForName(types.Name{Name: v[0]}); alias == nil { + return fmt.Errorf("type %v references alias %q which does not exist", b.t, v[0]) + } + // protobuf.embed instructs the generator to use the named type in this package + // as an embedded message. + case k == "protobuf.embed": + fields = []protoField{ + { + Tag: 1, + Name: v[0], + Type: &types.Type{ + Name: types.Name{ + Name: v[0], + Package: b.localPackage.Package, + Path: b.localPackage.Path, + }, + }, + }, + } + } + } + if alias == nil { + alias = b.t + } + + // If we don't explicitly embed anything, generate fields by traversing fields. + if fields == nil { + memberFields, err := membersToFields(b.locator, alias, b.localPackage, b.omitFieldTypes) + if err != nil { + return fmt.Errorf("type %v cannot be converted to protobuf: %v", b.t, err) + } + fields = memberFields + } + + out := sw.Out() + genComment(out, b.t.CommentLines, "") + sw.Do(`message $.Name.Name$ { +`, b.t) + + if len(options) > 0 { + sort.Strings(options) + for _, s := range options { + fmt.Fprintf(out, " option %s;\n", s) + } + fmt.Fprintln(out) + } + + for i, field := range fields { + genComment(out, field.CommentLines, " ") + fmt.Fprintf(out, " ") + switch { + case field.Map: + case field.Repeated: + fmt.Fprintf(out, "repeated ") + case field.Required: + fmt.Fprintf(out, "required ") + default: + fmt.Fprintf(out, "optional ") + } + sw.Do(`$.Type|local$ $.Name$ = $.Tag$`, field) + if len(field.Extras) > 0 { + extras := []string{} + for k, v := range field.Extras { + if b.omitGogo && strings.HasPrefix(k, "(gogoproto.") { + continue + } + extras = append(extras, fmt.Sprintf("%s = %s", k, v)) + } + sort.Strings(extras) + if len(extras) > 0 { + fmt.Fprintf(out, " [") + fmt.Fprint(out, strings.Join(extras, ", ")) + fmt.Fprintf(out, "]") + } + } + fmt.Fprintf(out, ";\n") + if i != len(fields)-1 { + fmt.Fprintf(out, "\n") + } + } + fmt.Fprintf(out, "}\n\n") + return nil +} + +type protoField struct { + LocalPackage types.Name + + Tag int + Name string + Type *types.Type + Map bool + Repeated bool + Optional bool + Required bool + Nullable bool + Extras map[string]string + + CommentLines []string +} + +var ( + errUnrecognizedType = fmt.Errorf("did not recognize the provided type") +) + +func isFundamentalProtoType(t *types.Type) (*types.Type, bool) { + // TODO: when we enable proto3, also include other fundamental types in the google.protobuf package + // switch { + // case t.Kind == types.Struct && t.Name == types.Name{Package: "time", Name: "Time"}: + // return &types.Type{ + // Kind: types.Protobuf, + // Name: types.Name{Path: "google/protobuf/timestamp.proto", Package: "google.protobuf", Name: "Timestamp"}, + // }, true + // } + switch t.Kind { + case types.Slice: + if t.Elem.Name.Name == "byte" && len(t.Elem.Name.Package) == 0 { + return &types.Type{Name: types.Name{Name: "bytes"}, Kind: types.Protobuf}, true + } + case types.Builtin: + switch t.Name.Name { + case "string", "uint32", "int32", "uint64", "int64", "bool": + return &types.Type{Name: types.Name{Name: t.Name.Name}, Kind: types.Protobuf}, true + case "int": + return &types.Type{Name: types.Name{Name: "int64"}, Kind: types.Protobuf}, true + case "uint": + return &types.Type{Name: types.Name{Name: "uint64"}, Kind: types.Protobuf}, true + case "float64", "float": + return &types.Type{Name: types.Name{Name: "double"}, Kind: types.Protobuf}, true + case "float32": + return &types.Type{Name: types.Name{Name: "float"}, Kind: types.Protobuf}, true + case "uintptr": + return &types.Type{Name: types.Name{Name: "uint64"}, Kind: types.Protobuf}, true + } + // TODO: complex? + } + return t, false +} + +func memberTypeToProtobufField(locator ProtobufLocator, field *protoField, t *types.Type) error { + var err error + switch t.Kind { + case types.Protobuf: + field.Type, err = locator.ProtoTypeFor(t) + case types.Builtin: + field.Type, err = locator.ProtoTypeFor(t) + case types.Map: + valueField := &protoField{} + if err := memberTypeToProtobufField(locator, valueField, t.Elem); err != nil { + return err + } + keyField := &protoField{} + if err := memberTypeToProtobufField(locator, keyField, t.Key); err != nil { + return err + } + // All other protobuf types have kind types.Protobuf, so setting types.Map + // here would be very misleading. + field.Type = &types.Type{ + Kind: types.Protobuf, + Key: keyField.Type, + Elem: valueField.Type, + } + if !strings.HasPrefix(t.Name.Name, "map[") { + field.Extras["(gogoproto.casttype)"] = strconv.Quote(locator.CastTypeName(t.Name)) + } + if k, ok := keyField.Extras["(gogoproto.casttype)"]; ok { + field.Extras["(gogoproto.castkey)"] = k + } + if v, ok := valueField.Extras["(gogoproto.casttype)"]; ok { + field.Extras["(gogoproto.castvalue)"] = v + } + field.Map = true + case types.Pointer: + if err := memberTypeToProtobufField(locator, field, t.Elem); err != nil { + return err + } + field.Nullable = true + case types.Alias: + if isOptionalAlias(t) { + field.Type, err = locator.ProtoTypeFor(t) + field.Nullable = true + } else { + if err := memberTypeToProtobufField(locator, field, t.Underlying); err != nil { + log.Printf("failed to alias: %s %s: err %v", t.Name, t.Underlying.Name, err) + return err + } + // If this is not an alias to a slice, cast to the alias + if !field.Repeated { + if field.Extras == nil { + field.Extras = make(map[string]string) + } + field.Extras["(gogoproto.casttype)"] = strconv.Quote(locator.CastTypeName(t.Name)) + } + } + case types.Slice: + if t.Elem.Name.Name == "byte" && len(t.Elem.Name.Package) == 0 { + field.Type = &types.Type{Name: types.Name{Name: "bytes"}, Kind: types.Protobuf} + return nil + } + if err := memberTypeToProtobufField(locator, field, t.Elem); err != nil { + return err + } + field.Repeated = true + case types.Struct: + if len(t.Name.Name) == 0 { + return errUnrecognizedType + } + field.Type, err = locator.ProtoTypeFor(t) + field.Nullable = false + default: + return errUnrecognizedType + } + return err +} + +// protobufTagToField extracts information from an existing protobuf tag +func protobufTagToField(tag string, field *protoField, m types.Member, t *types.Type, localPackage types.Name) error { + if len(tag) == 0 || tag == "-" { + return nil + } + + // protobuf:"bytes,3,opt,name=Id,customtype=github.com/gogo/protobuf/test.Uuid" + parts := strings.Split(tag, ",") + if len(parts) < 3 { + return fmt.Errorf("member %q of %q malformed 'protobuf' tag, not enough segments\n", m.Name, t.Name) + } + protoTag, err := strconv.Atoi(parts[1]) + if err != nil { + return fmt.Errorf("member %q of %q malformed 'protobuf' tag, field ID is %q which is not an integer: %v\n", m.Name, t.Name, parts[1], err) + } + field.Tag = protoTag + + // In general there is doesn't make sense to parse the protobuf tags to get the type, + // as all auto-generated once will have wire type "bytes", "varint" or "fixed64". + // However, sometimes we explicitly set them to have a custom serialization, e.g.: + // type Time struct { + // time.Time `protobuf:"Timestamp,1,req,name=time"` + // } + // to force the generator to use a given type (that we manually wrote serialization & + // deserialization methods for). + switch parts[0] { + case "varint", "fixed32", "fixed64", "bytes", "group": + default: + var name types.Name + if last := strings.LastIndex(parts[0], "."); last != -1 { + prefix := parts[0][:last] + name = types.Name{ + Name: parts[0][last+1:], + Package: prefix, + Path: strings.Replace(prefix, ".", "/", -1), + } + } else { + name = types.Name{ + Name: parts[0], + Package: localPackage.Package, + Path: localPackage.Path, + } + } + field.Type = &types.Type{ + Name: name, + Kind: types.Protobuf, + } + } + + protoExtra := make(map[string]string) + for i, extra := range parts[3:] { + parts := strings.SplitN(extra, "=", 2) + if len(parts) != 2 { + return fmt.Errorf("member %q of %q malformed 'protobuf' tag, tag %d should be key=value, got %q\n", m.Name, t.Name, i+4, extra) + } + switch parts[0] { + case "name": + protoExtra[parts[0]] = parts[1] + case "casttype", "castkey", "castvalue": + parts[0] = fmt.Sprintf("(gogoproto.%s)", parts[0]) + protoExtra[parts[0]] = strconv.Quote(parts[1]) + } + } + + field.Extras = protoExtra + if name, ok := protoExtra["name"]; ok { + field.Name = name + delete(protoExtra, "name") + } + + return nil +} + +func membersToFields(locator ProtobufLocator, t *types.Type, localPackage types.Name, omitFieldTypes map[types.Name]struct{}) ([]protoField, error) { + fields := []protoField{} + + for _, m := range t.Members { + if namer.IsPrivateGoName(m.Name) { + // skip private fields + continue + } + if _, ok := omitFieldTypes[types.Name{Name: m.Type.Name.Name, Package: m.Type.Name.Package}]; ok { + continue + } + tags := reflect.StructTag(m.Tags) + field := protoField{ + LocalPackage: localPackage, + + Tag: -1, + Extras: make(map[string]string), + } + + protobufTag := tags.Get("protobuf") + if protobufTag == "-" { + continue + } + + if err := protobufTagToField(protobufTag, &field, m, t, localPackage); err != nil { + return nil, err + } + + // extract information from JSON field tag + if tag := tags.Get("json"); len(tag) > 0 { + parts := strings.Split(tag, ",") + if len(field.Name) == 0 && len(parts[0]) != 0 { + field.Name = parts[0] + } + if field.Tag == -1 && field.Name == "-" { + continue + } + } + + if field.Type == nil { + if err := memberTypeToProtobufField(locator, &field, m.Type); err != nil { + return nil, fmt.Errorf("unable to embed type %q as field %q in %q: %v", m.Type, field.Name, t.Name, err) + } + } + if len(field.Name) == 0 { + field.Name = namer.IL(m.Name) + } + + if field.Map && field.Repeated { + // maps cannot be repeated + field.Repeated = false + field.Nullable = true + } + + if !field.Nullable { + field.Extras["(gogoproto.nullable)"] = "false" + } + if (field.Type.Name.Name == "bytes" && field.Type.Name.Package == "") || (field.Repeated && field.Type.Name.Package == "" && namer.IsPrivateGoName(field.Type.Name.Name)) { + delete(field.Extras, "(gogoproto.nullable)") + } + if field.Name != m.Name { + field.Extras["(gogoproto.customname)"] = strconv.Quote(m.Name) + } + field.CommentLines = m.CommentLines + fields = append(fields, field) + } + + // assign tags + highest := 0 + byTag := make(map[int]*protoField) + // fields are in Go struct order, which we preserve + for i := range fields { + field := &fields[i] + tag := field.Tag + if tag != -1 { + if existing, ok := byTag[tag]; ok { + return nil, fmt.Errorf("field %q and %q both have tag %d", field.Name, existing.Name, tag) + } + byTag[tag] = field + } + if tag > highest { + highest = tag + } + } + // starting from the highest observed tag, assign new field tags + for i := range fields { + field := &fields[i] + if field.Tag != -1 { + continue + } + highest++ + field.Tag = highest + byTag[field.Tag] = field + } + return fields, nil +} + +func genComment(out io.Writer, lines []string, indent string) { + for { + l := len(lines) + if l == 0 || len(lines[l-1]) != 0 { + break + } + lines = lines[:l-1] + } + for _, c := range lines { + if len(c) == 0 { + fmt.Fprintf(out, "%s//\n", indent) // avoid trailing whitespace + continue + } + fmt.Fprintf(out, "%s// %s\n", indent, c) + } +} + +func formatProtoFile(source []byte) ([]byte, error) { + // TODO; Is there any protobuf formatter? + return source, nil +} + +func assembleProtoFile(w io.Writer, f *generator.File) { + w.Write(f.Header) + + fmt.Fprint(w, "syntax = \"proto2\";\n\n") + + if len(f.PackageName) > 0 { + fmt.Fprintf(w, "package %s;\n\n", f.PackageName) + } + + if len(f.Imports) > 0 { + imports := []string{} + for i := range f.Imports { + imports = append(imports, i) + } + sort.Strings(imports) + for _, s := range imports { + fmt.Fprintf(w, "import %q;\n", s) + } + fmt.Fprint(w, "\n") + } + + if f.Vars.Len() > 0 { + fmt.Fprintf(w, "%s\n", f.Vars.String()) + } + + w.Write(f.Body.Bytes()) +} + +func NewProtoFile() *generator.DefaultFileType { + return &generator.DefaultFileType{ + Format: formatProtoFile, + Assemble: assembleProtoFile, + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/import_tracker.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/import_tracker.go new file mode 100644 index 000000000000..08a991b15544 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/import_tracker.go @@ -0,0 +1,50 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +type ImportTracker struct { + namer.DefaultImportTracker +} + +func NewImportTracker(local types.Name, typesToAdd ...*types.Type) *ImportTracker { + tracker := namer.NewDefaultImportTracker(local) + tracker.IsInvalidType = func(t *types.Type) bool { return t.Kind != types.Protobuf } + tracker.LocalName = func(name types.Name) string { return name.Package } + tracker.PrintImport = func(path, name string) string { return path } + + tracker.AddTypes(typesToAdd...) + return &ImportTracker{ + DefaultImportTracker: tracker, + } +} + +// AddNullable ensures that support for the nullable Gogo-protobuf extension is added. +func (tracker *ImportTracker) AddNullable() { + tracker.AddType(&types.Type{ + Kind: types.Protobuf, + Name: types.Name{ + Name: "nullable", + Package: "gogoproto", + Path: "github.com/gogo/protobuf/gogoproto/gogo.proto", + }, + }) +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/namer.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/namer.go new file mode 100644 index 000000000000..e3b21c6703f6 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/namer.go @@ -0,0 +1,208 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "fmt" + "reflect" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +type localNamer struct { + localPackage types.Name +} + +func (n localNamer) Name(t *types.Type) string { + if t.Key != nil && t.Elem != nil { + return fmt.Sprintf("map<%s, %s>", n.Name(t.Key), n.Name(t.Elem)) + } + if len(n.localPackage.Package) != 0 && n.localPackage.Package == t.Name.Package { + return t.Name.Name + } + return t.Name.String() +} + +type protobufNamer struct { + packages []*protobufPackage + packagesByPath map[string]*protobufPackage +} + +func NewProtobufNamer() *protobufNamer { + return &protobufNamer{ + packagesByPath: make(map[string]*protobufPackage), + } +} + +func (n *protobufNamer) Name(t *types.Type) string { + if t.Kind == types.Map { + return fmt.Sprintf("map<%s, %s>", n.Name(t.Key), n.Name(t.Elem)) + } + return t.Name.String() +} + +func (n *protobufNamer) List() []generator.Package { + packages := make([]generator.Package, 0, len(n.packages)) + for i := range n.packages { + packages = append(packages, n.packages[i]) + } + return packages +} + +func (n *protobufNamer) Add(p *protobufPackage) { + if _, ok := n.packagesByPath[p.PackagePath]; !ok { + n.packagesByPath[p.PackagePath] = p + n.packages = append(n.packages, p) + } +} + +func (n *protobufNamer) GoNameToProtoName(name types.Name) types.Name { + if p, ok := n.packagesByPath[name.Package]; ok { + return types.Name{ + Name: name.Name, + Package: p.PackageName, + Path: p.ImportPath(), + } + } + for _, p := range n.packages { + if _, ok := p.FilterTypes[name]; ok { + return types.Name{ + Name: name.Name, + Package: p.PackageName, + Path: p.ImportPath(), + } + } + } + return types.Name{Name: name.Name} +} + +func protoSafePackage(name string) string { + pkg := strings.Replace(name, "/", ".", -1) + return strings.Replace(pkg, "-", "_", -1) +} + +type typeNameSet map[types.Name]*protobufPackage + +// assignGoTypeToProtoPackage looks for Go and Protobuf types that are referenced by a type in +// a package. It will not recurse into protobuf types. +func assignGoTypeToProtoPackage(p *protobufPackage, t *types.Type, local, global typeNameSet, optional map[types.Name]struct{}) { + newT, isProto := isFundamentalProtoType(t) + if isProto { + t = newT + } + if otherP, ok := global[t.Name]; ok { + if _, ok := local[t.Name]; !ok { + p.Imports.AddType(&types.Type{ + Kind: types.Protobuf, + Name: otherP.ProtoTypeName(), + }) + } + return + } + if t.Name.Package == p.PackagePath { + // Associate types only to their own package + global[t.Name] = p + } + if _, ok := local[t.Name]; ok { + return + } + // don't recurse into existing proto types + if isProto { + p.Imports.AddType(t) + return + } + + local[t.Name] = p + for _, m := range t.Members { + if namer.IsPrivateGoName(m.Name) { + continue + } + field := &protoField{} + tag := reflect.StructTag(m.Tags).Get("protobuf") + if tag == "-" { + continue + } + if err := protobufTagToField(tag, field, m, t, p.ProtoTypeName()); err == nil && field.Type != nil { + assignGoTypeToProtoPackage(p, field.Type, local, global, optional) + continue + } + assignGoTypeToProtoPackage(p, m.Type, local, global, optional) + } + // TODO: should methods be walked? + if t.Elem != nil { + assignGoTypeToProtoPackage(p, t.Elem, local, global, optional) + } + if t.Key != nil { + assignGoTypeToProtoPackage(p, t.Key, local, global, optional) + } + if t.Underlying != nil { + if t.Kind == types.Alias && isOptionalAlias(t) { + optional[t.Name] = struct{}{} + } + assignGoTypeToProtoPackage(p, t.Underlying, local, global, optional) + } +} + +// isTypeApplicableToProtobuf checks to see if a type is relevant for protobuf processing. +// Currently, it filters out functions and private types. +func isTypeApplicableToProtobuf(t *types.Type) bool { + // skip functions -- we don't care about them for protobuf + if t.Kind == types.Func || (t.Kind == types.DeclarationOf && t.Underlying.Kind == types.Func) { + return false + } + // skip private types + if namer.IsPrivateGoName(t.Name.Name) { + return false + } + + return true +} + +func (n *protobufNamer) AssignTypesToPackages(c *generator.Context) error { + global := make(typeNameSet) + for _, p := range n.packages { + local := make(typeNameSet) + optional := make(map[types.Name]struct{}) + p.Imports = NewImportTracker(p.ProtoTypeName()) + for _, t := range c.Order { + if t.Name.Package != p.PackagePath { + continue + } + if !isTypeApplicableToProtobuf(t) { + // skip types that we don't care about, like functions + continue + } + assignGoTypeToProtoPackage(p, t, local, global, optional) + } + p.FilterTypes = make(map[types.Name]struct{}) + p.LocalNames = make(map[string]struct{}) + p.OptionalTypeNames = make(map[string]struct{}) + for k, v := range local { + if v == p { + p.FilterTypes[k] = struct{}{} + p.LocalNames[k.Name] = struct{}{} + if _, ok := optional[k]; ok { + p.OptionalTypeNames[k.Name] = struct{}{} + } + } + } + } + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/package.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/package.go new file mode 100644 index 000000000000..bed4c3e30617 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/package.go @@ -0,0 +1,215 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "fmt" + "go/ast" + "log" + "os" + "path/filepath" + "reflect" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" +) + +func newProtobufPackage(packagePath, packageName string, generateAll bool, omitFieldTypes map[types.Name]struct{}) *protobufPackage { + pkg := &protobufPackage{ + DefaultPackage: generator.DefaultPackage{ + // The protobuf package name (foo.bar.baz) + PackageName: packageName, + // A path segment relative to the GOPATH root (foo/bar/baz) + PackagePath: packagePath, + HeaderText: []byte( + ` +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +`), + PackageDocumentation: []byte(fmt.Sprintf( + `// Package %s is an autogenerated protobuf IDL. +`, packageName)), + }, + GenerateAll: generateAll, + OmitFieldTypes: omitFieldTypes, + } + pkg.FilterFunc = pkg.filterFunc + pkg.GeneratorFunc = pkg.generatorFunc + return pkg +} + +// protobufPackage contains the protobuf implementation of Package. +type protobufPackage struct { + generator.DefaultPackage + + // If true, this package has been vendored into our source tree and thus can + // only be generated by changing the vendor tree. + Vendored bool + + // If true, generate protobuf serializations for all public types. + // If false, only generate protobuf serializations for structs that + // request serialization. + GenerateAll bool + + // A list of types to filter to; if not specified all types will be included. + FilterTypes map[types.Name]struct{} + + // If true, omit any gogoprotobuf extensions not defined as types. + OmitGogo bool + + // A list of field types that will be excluded from the output struct + OmitFieldTypes map[types.Name]struct{} + + // A list of names that this package exports + LocalNames map[string]struct{} + + // A list of type names in this package that will need marshaller rewriting + // to remove synthetic protobuf fields. + OptionalTypeNames map[string]struct{} + + // A list of struct tags to generate onto named struct fields + StructTags map[string]map[string]string + + // An import tracker for this package + Imports *ImportTracker +} + +func (p *protobufPackage) Clean(outputBase string) error { + for _, s := range []string{p.ImportPath(), p.OutputPath()} { + if err := os.Remove(filepath.Join(outputBase, s)); err != nil && !os.IsNotExist(err) { + return err + } + } + return nil +} + +func (p *protobufPackage) ProtoTypeName() types.Name { + return types.Name{ + Name: p.Path(), // the go path "foo/bar/baz" + Package: p.Name(), // the protobuf package "foo.bar.baz" + Path: p.ImportPath(), // the path of the import to get the proto + } +} + +func (p *protobufPackage) filterFunc(c *generator.Context, t *types.Type) bool { + switch t.Kind { + case types.Func, types.Chan: + return false + case types.Struct: + if t.Name.Name == "struct{}" { + return false + } + case types.Builtin: + return false + case types.Alias: + if !isOptionalAlias(t) { + return false + } + case types.Slice, types.Array, types.Map: + return false + case types.Pointer: + return false + } + if _, ok := isFundamentalProtoType(t); ok { + return false + } + _, ok := p.FilterTypes[t.Name] + return ok +} + +func (p *protobufPackage) HasGoType(name string) bool { + _, ok := p.LocalNames[name] + return ok +} + +func (p *protobufPackage) OptionalTypeName(name string) bool { + _, ok := p.OptionalTypeNames[name] + return ok +} + +func (p *protobufPackage) ExtractGeneratedType(t *ast.TypeSpec) bool { + if !p.HasGoType(t.Name.Name) { + return false + } + + switch s := t.Type.(type) { + case *ast.StructType: + for i, f := range s.Fields.List { + if len(f.Tag.Value) == 0 { + continue + } + tag := strings.Trim(f.Tag.Value, "`") + protobufTag := reflect.StructTag(tag).Get("protobuf") + if len(protobufTag) == 0 { + continue + } + if len(f.Names) > 1 { + log.Printf("WARNING: struct %s field %d %s: defined multiple names but single protobuf tag", t.Name.Name, i, f.Names[0].Name) + // TODO hard error? + } + if p.StructTags == nil { + p.StructTags = make(map[string]map[string]string) + } + m := p.StructTags[t.Name.Name] + if m == nil { + m = make(map[string]string) + p.StructTags[t.Name.Name] = m + } + m[f.Names[0].Name] = tag + } + default: + log.Printf("WARNING: unexpected Go AST type definition: %#v", t) + } + + return true +} + +func (p *protobufPackage) generatorFunc(c *generator.Context) []generator.Generator { + generators := []generator.Generator{} + + p.Imports.AddNullable() + + generators = append(generators, &genProtoIDL{ + DefaultGen: generator.DefaultGen{ + OptionalName: "generated", + }, + localPackage: types.Name{Package: p.PackageName, Path: p.PackagePath}, + localGoPackage: types.Name{Package: p.PackagePath, Name: p.GoPackageName()}, + imports: p.Imports, + generateAll: p.GenerateAll, + omitGogo: p.OmitGogo, + omitFieldTypes: p.OmitFieldTypes, + }) + return generators +} + +func (p *protobufPackage) GoPackageName() string { + return filepath.Base(p.PackagePath) +} + +func (p *protobufPackage) ImportPath() string { + return filepath.Join(p.PackagePath, "generated.proto") +} + +func (p *protobufPackage) OutputPath() string { + return filepath.Join(p.PackagePath, "generated.pb.go") +} + +var ( + _ = generator.Package(&protobufPackage{}) +) diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/parser.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/parser.go new file mode 100644 index 000000000000..c4cf66e74475 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/parser.go @@ -0,0 +1,463 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "bytes" + "errors" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/printer" + "go/token" + "os" + "reflect" + "strings" + + customreflect "k8s.io/code-generator/third_party/forked/golang/reflect" +) + +func rewriteFile(name string, header []byte, rewriteFn func(*token.FileSet, *ast.File) error) error { + fset := token.NewFileSet() + src, err := os.ReadFile(name) + if err != nil { + return err + } + file, err := parser.ParseFile(fset, name, src, parser.DeclarationErrors|parser.ParseComments) + if err != nil { + return err + } + + if err := rewriteFn(fset, file); err != nil { + return err + } + + b := &bytes.Buffer{} + b.Write(header) + if err := printer.Fprint(b, fset, file); err != nil { + return err + } + + body, err := format.Source(b.Bytes()) + if err != nil { + return err + } + + f, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC, 0644) + if err != nil { + return err + } + defer f.Close() + if _, err := f.Write(body); err != nil { + return err + } + return f.Close() +} + +// ExtractFunc extracts information from the provided TypeSpec and returns true if the type should be +// removed from the destination file. +type ExtractFunc func(*ast.TypeSpec) bool + +// OptionalFunc returns true if the provided local name is a type that has protobuf.nullable=true +// and should have its marshal functions adjusted to remove the 'Items' accessor. +type OptionalFunc func(name string) bool + +func RewriteGeneratedGogoProtobufFile(name string, extractFn ExtractFunc, optionalFn OptionalFunc, header []byte) error { + return rewriteFile(name, header, func(fset *token.FileSet, file *ast.File) error { + cmap := ast.NewCommentMap(fset, file, file.Comments) + + // transform methods that point to optional maps or slices + for _, d := range file.Decls { + rewriteOptionalMethods(d, optionalFn) + } + + // remove types that are already declared + decls := []ast.Decl{} + for _, d := range file.Decls { + if dropExistingTypeDeclarations(d, extractFn) { + continue + } + if dropEmptyImportDeclarations(d) { + continue + } + decls = append(decls, d) + } + file.Decls = decls + + // remove unmapped comments + file.Comments = cmap.Filter(file).Comments() + return nil + }) +} + +// rewriteOptionalMethods makes specific mutations to marshaller methods that belong to types identified +// as being "optional" (they may be nil on the wire). This allows protobuf to serialize a map or slice and +// properly discriminate between empty and nil (which is not possible in protobuf). +// TODO: move into upstream gogo-protobuf once https://github.com/gogo/protobuf/issues/181 +// has agreement +func rewriteOptionalMethods(decl ast.Decl, isOptional OptionalFunc) { + switch t := decl.(type) { + case *ast.FuncDecl: + ident, ptr, ok := receiver(t) + if !ok { + return + } + + // correct initialization of the form `m.Field = &OptionalType{}` to + // `m.Field = OptionalType{}` + if t.Name.Name == "Unmarshal" { + ast.Walk(optionalAssignmentVisitor{fn: isOptional}, t.Body) + } + + if !isOptional(ident.Name) { + return + } + + switch t.Name.Name { + case "Unmarshal": + ast.Walk(&optionalItemsVisitor{}, t.Body) + case "MarshalTo", "Size", "String", "MarshalToSizedBuffer": + ast.Walk(&optionalItemsVisitor{}, t.Body) + fallthrough + case "Marshal": + // if the method has a pointer receiver, set it back to a normal receiver + if ptr { + t.Recv.List[0].Type = ident + } + } + } +} + +type optionalAssignmentVisitor struct { + fn OptionalFunc +} + +// Visit walks the provided node, transforming field initializations of the form +// m.Field = &OptionalType{} -> m.Field = OptionalType{} +func (v optionalAssignmentVisitor) Visit(n ast.Node) ast.Visitor { + switch t := n.(type) { + case *ast.AssignStmt: + if len(t.Lhs) == 1 && len(t.Rhs) == 1 { + if !isFieldSelector(t.Lhs[0], "m", "") { + return nil + } + unary, ok := t.Rhs[0].(*ast.UnaryExpr) + if !ok || unary.Op != token.AND { + return nil + } + composite, ok := unary.X.(*ast.CompositeLit) + if !ok || composite.Type == nil || len(composite.Elts) != 0 { + return nil + } + if ident, ok := composite.Type.(*ast.Ident); ok && v.fn(ident.Name) { + t.Rhs[0] = composite + } + } + return nil + } + return v +} + +type optionalItemsVisitor struct{} + +// Visit walks the provided node, looking for specific patterns to transform that match +// the effective outcome of turning struct{ map[x]y || []x } into map[x]y or []x. +func (v *optionalItemsVisitor) Visit(n ast.Node) ast.Visitor { + switch t := n.(type) { + case *ast.RangeStmt: + if isFieldSelector(t.X, "m", "Items") { + t.X = &ast.Ident{Name: "m"} + } + case *ast.AssignStmt: + if len(t.Lhs) == 1 && len(t.Rhs) == 1 { + switch lhs := t.Lhs[0].(type) { + case *ast.IndexExpr: + if isFieldSelector(lhs.X, "m", "Items") { + lhs.X = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + default: + if isFieldSelector(t.Lhs[0], "m", "Items") { + t.Lhs[0] = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + } + switch rhs := t.Rhs[0].(type) { + case *ast.CallExpr: + if ident, ok := rhs.Fun.(*ast.Ident); ok && ident.Name == "append" { + ast.Walk(v, rhs) + if len(rhs.Args) > 0 { + switch arg := rhs.Args[0].(type) { + case *ast.Ident: + if arg.Name == "m" { + rhs.Args[0] = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + } + } + return nil + } + } + } + case *ast.IfStmt: + switch cond := t.Cond.(type) { + case *ast.BinaryExpr: + if cond.Op == token.EQL { + if isFieldSelector(cond.X, "m", "Items") && isIdent(cond.Y, "nil") { + cond.X = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + } + } + if t.Init != nil { + // Find form: + // if err := m[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + // return err + // } + switch s := t.Init.(type) { + case *ast.AssignStmt: + if call, ok := s.Rhs[0].(*ast.CallExpr); ok { + if sel, ok := call.Fun.(*ast.SelectorExpr); ok { + if x, ok := sel.X.(*ast.IndexExpr); ok { + // m[] -> (*m)[] + if sel2, ok := x.X.(*ast.SelectorExpr); ok { + if ident, ok := sel2.X.(*ast.Ident); ok && ident.Name == "m" { + x.X = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + } + // len(m.Items) -> len(*m) + if bin, ok := x.Index.(*ast.BinaryExpr); ok { + if call2, ok := bin.X.(*ast.CallExpr); ok && len(call2.Args) == 1 { + if isFieldSelector(call2.Args[0], "m", "Items") { + call2.Args[0] = &ast.StarExpr{X: &ast.Ident{Name: "m"}} + } + } + } + } + } + } + } + } + case *ast.IndexExpr: + if isFieldSelector(t.X, "m", "Items") { + t.X = &ast.Ident{Name: "m"} + return nil + } + case *ast.CallExpr: + changed := false + for i := range t.Args { + if isFieldSelector(t.Args[i], "m", "Items") { + t.Args[i] = &ast.Ident{Name: "m"} + changed = true + } + } + if changed { + return nil + } + } + return v +} + +func isFieldSelector(n ast.Expr, name, field string) bool { + s, ok := n.(*ast.SelectorExpr) + if !ok || s.Sel == nil || (field != "" && s.Sel.Name != field) { + return false + } + return isIdent(s.X, name) +} + +func isIdent(n ast.Expr, value string) bool { + ident, ok := n.(*ast.Ident) + return ok && ident.Name == value +} + +func receiver(f *ast.FuncDecl) (ident *ast.Ident, pointer bool, ok bool) { + if f.Recv == nil || len(f.Recv.List) != 1 { + return nil, false, false + } + switch t := f.Recv.List[0].Type.(type) { + case *ast.StarExpr: + identity, ok := t.X.(*ast.Ident) + if !ok { + return nil, false, false + } + return identity, true, true + case *ast.Ident: + return t, false, true + } + return nil, false, false +} + +// dropExistingTypeDeclarations removes any type declaration for which extractFn returns true. The function +// returns true if the entire declaration should be dropped. +func dropExistingTypeDeclarations(decl ast.Decl, extractFn ExtractFunc) bool { + switch t := decl.(type) { + case *ast.GenDecl: + if t.Tok != token.TYPE { + return false + } + specs := []ast.Spec{} + for _, s := range t.Specs { + switch spec := s.(type) { + case *ast.TypeSpec: + if extractFn(spec) { + continue + } + specs = append(specs, spec) + } + } + if len(specs) == 0 { + return true + } + t.Specs = specs + } + return false +} + +// dropEmptyImportDeclarations strips any generated but no-op imports from the generated code +// to prevent generation from being able to define side-effects. The function returns true +// if the entire declaration should be dropped. +func dropEmptyImportDeclarations(decl ast.Decl) bool { + switch t := decl.(type) { + case *ast.GenDecl: + if t.Tok != token.IMPORT { + return false + } + specs := []ast.Spec{} + for _, s := range t.Specs { + switch spec := s.(type) { + case *ast.ImportSpec: + if spec.Name != nil && spec.Name.Name == "_" { + continue + } + specs = append(specs, spec) + } + } + if len(specs) == 0 { + return true + } + t.Specs = specs + } + return false +} + +func RewriteTypesWithProtobufStructTags(name string, structTags map[string]map[string]string) error { + return rewriteFile(name, []byte{}, func(fset *token.FileSet, file *ast.File) error { + allErrs := []error{} + + // set any new struct tags + for _, d := range file.Decls { + if errs := updateStructTags(d, structTags, []string{"protobuf"}); len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + } + + if len(allErrs) > 0 { + var s string + for _, err := range allErrs { + s += err.Error() + "\n" + } + return errors.New(s) + } + return nil + }) +} + +func getFieldName(expr ast.Expr, structname string) (name string, err error) { + for { + switch t := expr.(type) { + case *ast.Ident: + return t.Name, nil + case *ast.SelectorExpr: + return t.Sel.Name, nil + case *ast.StarExpr: + expr = t.X + default: + return "", fmt.Errorf("unable to get name for tag from struct %q, field %#v", structname, t) + } + } +} + +func updateStructTags(decl ast.Decl, structTags map[string]map[string]string, toCopy []string) []error { + var errs []error + t, ok := decl.(*ast.GenDecl) + if !ok { + return nil + } + if t.Tok != token.TYPE { + return nil + } + + for _, s := range t.Specs { + spec, ok := s.(*ast.TypeSpec) + if !ok { + continue + } + typeName := spec.Name.Name + fieldTags, ok := structTags[typeName] + if !ok { + continue + } + st, ok := spec.Type.(*ast.StructType) + if !ok { + continue + } + + for i := range st.Fields.List { + f := st.Fields.List[i] + var name string + var err error + if len(f.Names) == 0 { + name, err = getFieldName(f.Type, spec.Name.Name) + if err != nil { + errs = append(errs, err) + continue + } + } else { + name = f.Names[0].Name + } + value, ok := fieldTags[name] + if !ok { + continue + } + var tags customreflect.StructTags + if f.Tag != nil { + oldTags, err := customreflect.ParseStructTags(strings.Trim(f.Tag.Value, "`")) + if err != nil { + errs = append(errs, fmt.Errorf("unable to read struct tag from struct %q, field %q: %v", spec.Name.Name, name, err)) + continue + } + tags = oldTags + } + for _, name := range toCopy { + // don't overwrite existing tags + if tags.Has(name) { + continue + } + // append new tags + if v := reflect.StructTag(value).Get(name); len(v) > 0 { + tags = append(tags, customreflect.StructTag{Name: name, Value: v}) + } + } + if len(tags) == 0 { + continue + } + if f.Tag == nil { + f.Tag = &ast.BasicLit{} + } + f.Tag.Value = tags.String() + } + } + return errs +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/tags.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/tags.go new file mode 100644 index 000000000000..6cfa37886b44 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protobuf/tags.go @@ -0,0 +1,33 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "k8s.io/gengo/types" + "k8s.io/klog/v2" +) + +// extractBoolTagOrDie gets the comment-tags for the key and asserts that, if +// it exists, the value is boolean. If the tag did not exist, it returns +// false. +func extractBoolTagOrDie(key string, lines []string) bool { + val, err := types.ExtractSingleBoolCommentTag("+", key, false, lines) + if err != nil { + klog.Fatal(err) + } + return val +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/.gitignore b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/.gitignore new file mode 100644 index 000000000000..a5c47b66f833 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/.gitignore @@ -0,0 +1 @@ +import-boss diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/README.md b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/README.md new file mode 100644 index 000000000000..88dc010ef687 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/README.md @@ -0,0 +1,97 @@ +## Purpose + +- `import-boss` enforces import restrictions against all pull requests submitted to the [k/k](https://github.com/kubernetes/kubernetes) repository. There are a number of `.import-restrictions` files that in the [k/k](https://github.com/kubernetes/kubernetes) repository, all of which are defined in `YAML` (or `JSON`) format. + +## How does it work? + +- When a directory is verified, `import-boss` looks for a file called `.import-restrictions`. If this file is not found, `import-boss` will go up to the parent directory until it finds this `.import-restrictions` file. + +- Adding `.import-restrictions` files does not add them to CI runs. They need to be explicitly added to `hack/verify-import-boss.sh`. Once an `.import-restrictions` file is added, all of the sub-packages of this file's directory are added as well. + +### What are Rules? + +- If an `.import-restrictions` file is found, then all imports of the package are checked against each `rule` in the file. A `rule` consists of three parts: + - A `SelectorRegexp`, to select the import paths that the rule applies to. + - A list of `AllowedPrefixes` + - A list of `ForbiddenPrefixes` + +- An import is allowed if it matches at least one allowed prefix and does not match any forbidden prefixes. An example `.import-restrictions` file looks like this: + +```json +{ + "Rules": [ + { + "SelectorRegexp": "k8s[.]io", + "AllowedPrefixes": [ + "k8s.io/gengo/examples", + "k8s.io/kubernetes/third_party" + ], + "ForbiddenPrefixes": [ + "k8s.io/kubernetes/pkg/third_party/deprecated" + ] + }, + { + "SelectorRegexp": "^unsafe$", + "AllowedPrefixes": [ + ], + "ForbiddenPrefixes": [ + "" + ] + } + ] +} +``` +- Take note of `"SelectorRegexp": "k8s[.]io"` in the first block. This specifies that we are applying these rules to the `"k8s.io"` import path. +- The second block explicitly matches the "unsafe" package, and forbids it ("" is a prefix of everything). + +### What are Inverse Rules? + +- In contrast to non-inverse rules, which are defined in importing packages, inverse rules are defined in imported packages. + +- Inverse rules allow for fine-grained import restrictions for "private packages" where we don't want to spread use inside of [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes). + +- If an `.import-restrictions` file is found, then all imports of the package are checked against each `inverse rule` in the file. This check will continue, climbing up the directory tree, until a match is found and accepted. + +- Inverse rules also have a boolean `transitive` option. When this option is true, the import rule is also applied to `transitive` imports. + - `transitive` imports are dependencies not directly depended on by the code, but are needed to run the application. Use this option if you want to apply restrictions to those indirect dependencies. + +```yaml +rules: + - selectorRegexp: k8s[.]io + allowedPrefixes: + - k8s.io/gengo/examples + - k8s.io/kubernetes/third_party + forbiddenPrefixes: + - k8s.io/kubernetes/pkg/third_party/deprecated + - selectorRegexp: ^unsafe$ + forbiddenPrefixes: + - "" +inverseRules: + - selectorRegexp: k8s[.]io + allowedPrefixes: + - k8s.io/same-repo + - k8s.io/kubernetes/pkg/legacy + forbiddenPrefixes: + - k8s.io/kubernetes/pkg/legacy/subpkg + - selectorRegexp: k8s[.]io + transitive: true + forbiddenPrefixes: + - k8s.io/kubernetes/cmd/kubelet + - k8s.io/kubernetes/cmd/kubectl +``` + +## How do I run import-boss within the k/k repo? + +- In order to include _test.go files, make sure to pass in the `include-test-files` flag: + ```sh + hack/verify-import-boss.sh --include-test-files=true + ``` + +- To include other directories, pass in a directory or directories using the `input-dirs` flag: + ```sh + hack/verify-import-boss.sh --input-dirs="k8s.io/kubernetes/test/e2e/framework/..." + ``` + +## Reference + +- [import-boss](https://github.com/kubernetes/gengo/tree/master/examples/import-boss) \ No newline at end of file diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/main.go new file mode 100644 index 000000000000..34373c541174 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/import-boss/main.go @@ -0,0 +1,45 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// import-boss enforces import restrictions in a given repository. +package main + +import ( + "os" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" + "k8s.io/gengo/examples/import-boss/generators" + + "k8s.io/klog/v2" +) + +func main() { + klog.InitFlags(nil) + arguments := args.Default() + + pflag.CommandLine.BoolVar(&arguments.IncludeTestFiles, "include-test-files", false, "If true, include *_test.go files.") + + if err := arguments.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Errorf("Error: %v", err) + os.Exit(1) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/args/args.go new file mode 100644 index 000000000000..ffd073a86b41 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/args/args.go @@ -0,0 +1,83 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + "path" + + "github.com/spf13/pflag" + codegenutil "k8s.io/code-generator/pkg/util" + "k8s.io/gengo/args" +) + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs struct { + VersionedClientSetPackage string + InternalClientSetPackage string + ListersPackage string + SingleDirectory bool + + // PluralExceptions define a list of pluralizer exceptions in Type:PluralType format. + // The default list is "Endpoints:Endpoints" + PluralExceptions []string +} + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{ + SingleDirectory: false, + PluralExceptions: []string{"Endpoints:Endpoints"}, + } + genericArgs.CustomArgs = customArgs + + if pkg := codegenutil.CurrentPackage(); len(pkg) != 0 { + genericArgs.OutputPackagePath = path.Join(pkg, "pkg/client/informers") + customArgs.VersionedClientSetPackage = path.Join(pkg, "pkg/client/clientset/versioned") + customArgs.InternalClientSetPackage = path.Join(pkg, "pkg/client/clientset/internalversion") + customArgs.ListersPackage = path.Join(pkg, "pkg/client/listers") + } + + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&ca.InternalClientSetPackage, "internal-clientset-package", ca.InternalClientSetPackage, "the full package name for the internal clientset to use") + fs.StringVar(&ca.VersionedClientSetPackage, "versioned-clientset-package", ca.VersionedClientSetPackage, "the full package name for the versioned clientset to use") + fs.StringVar(&ca.ListersPackage, "listers-package", ca.ListersPackage, "the full package name for the listers to use") + fs.BoolVar(&ca.SingleDirectory, "single-directory", ca.SingleDirectory, "if true, omit the intermediate \"internalversion\" and \"externalversions\" subdirectories") + fs.StringSliceVar(&ca.PluralExceptions, "plural-exceptions", ca.PluralExceptions, "list of comma separated plural exception definitions in Type:PluralizedType format") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + customArgs := genericArgs.CustomArgs.(*CustomArgs) + + if len(genericArgs.OutputPackagePath) == 0 { + return fmt.Errorf("output package cannot be empty") + } + if len(customArgs.VersionedClientSetPackage) == 0 { + return fmt.Errorf("versioned clientset package cannot be empty") + } + if len(customArgs.ListersPackage) == 0 { + return fmt.Errorf("listers package cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go new file mode 100644 index 000000000000..f8ee7d070907 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go @@ -0,0 +1,330 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "path" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// factoryGenerator produces a file of listers for a given GroupVersion and +// type. +type factoryGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + groupVersions map[string]clientgentypes.GroupVersions + gvGoNames map[string]string + clientSetPackage string + internalInterfacesPackage string + filtered bool +} + +var _ generator.Generator = &factoryGenerator{} + +func (g *factoryGenerator) Filter(c *generator.Context, t *types.Type) bool { + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *factoryGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *factoryGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + return +} + +func (g *factoryGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "{{", "}}") + + klog.V(5).Infof("processing type %v", t) + + gvInterfaces := make(map[string]*types.Type) + gvNewFuncs := make(map[string]*types.Type) + for groupPkgName := range g.groupVersions { + gvInterfaces[groupPkgName] = c.Universe.Type(types.Name{Package: path.Join(g.outputPackage, groupPkgName), Name: "Interface"}) + gvNewFuncs[groupPkgName] = c.Universe.Function(types.Name{Package: path.Join(g.outputPackage, groupPkgName), Name: "New"}) + } + m := map[string]interface{}{ + "cacheSharedIndexInformer": c.Universe.Type(cacheSharedIndexInformer), + "groupVersions": g.groupVersions, + "gvInterfaces": gvInterfaces, + "gvNewFuncs": gvNewFuncs, + "gvGoNames": g.gvGoNames, + "interfacesNewInformerFunc": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "NewInformerFunc"}), + "interfacesTweakListOptionsFunc": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "TweakListOptionsFunc"}), + "informerFactoryInterface": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "SharedInformerFactory"}), + "clientSetInterface": c.Universe.Type(types.Name{Package: g.clientSetPackage, Name: "Interface"}), + "reflectType": c.Universe.Type(reflectType), + "runtimeObject": c.Universe.Type(runtimeObject), + "schemaGroupVersionResource": c.Universe.Type(schemaGroupVersionResource), + "syncMutex": c.Universe.Type(syncMutex), + "timeDuration": c.Universe.Type(timeDuration), + "namespaceAll": c.Universe.Type(metav1NamespaceAll), + "object": c.Universe.Type(metav1Object), + } + + sw.Do(sharedInformerFactoryStruct, m) + sw.Do(sharedInformerFactoryInterface, m) + + return sw.Error() +} + +var sharedInformerFactoryStruct = ` +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client {{.clientSetInterface|raw}} + namespace string + tweakListOptions {{.interfacesTweakListOptionsFunc|raw}} + lock {{.syncMutex|raw}} + defaultResync {{.timeDuration|raw}} + customResync map[{{.reflectType|raw}}]{{.timeDuration|raw}} + + informers map[{{.reflectType|raw}}]{{.cacheSharedIndexInformer|raw}} + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[{{.reflectType|raw}}]bool + // wg tracks how many goroutines were started. + wg sync.WaitGroup + // shuttingDown is true when Shutdown has been called. It may still be running + // because it needs to wait for goroutines. + shuttingDown bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[{{.object|raw}}]{{.timeDuration|raw}}) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client {{.clientSetInterface|raw}}, defaultResync {{.timeDuration|raw}}) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client {{.clientSetInterface|raw}}, defaultResync {{.timeDuration|raw}}, namespace string, tweakListOptions {{.interfacesTweakListOptionsFunc|raw}}) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client {{.clientSetInterface|raw}}, defaultResync {{.timeDuration|raw}}, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[{{.reflectType|raw}}]{{.cacheSharedIndexInformer|raw}}), + startedInformers: make(map[{{.reflectType|raw}}]bool), + customResync: make(map[{{.reflectType|raw}}]{{.timeDuration|raw}}), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.shuttingDown { + return + } + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + f.wg.Add(1) + // We need a new variable in each loop iteration, + // otherwise the goroutine would use the loop variable + // and that keeps changing. + informer := informer + go func() { + defer f.wg.Done() + informer.Run(stopCh) + }() + f.startedInformers[informerType] = true + } + } +} + +func (f *sharedInformerFactory) Shutdown() { + f.lock.Lock() + f.shuttingDown = true + f.lock.Unlock() + + + // Will return immediately if there is nothing to wait for. + f.wg.Wait() +} + +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func()map[reflect.Type]cache.SharedIndexInformer{ + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj {{.runtimeObject|raw}}, newFunc {{.interfacesNewInformerFunc|raw}}) {{.cacheSharedIndexInformer|raw}} { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +` + +var sharedInformerFactoryInterface = ` +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +// +// It is typically used like this: +// +// ctx, cancel := context.Background() +// defer cancel() +// factory := NewSharedInformerFactory(client, resyncPeriod) +// defer factory.WaitForStop() // Returns immediately if nothing was started. +// genericInformer := factory.ForResource(resource) +// typedInformer := factory.SomeAPIGroup().V1().SomeType() +// factory.Start(ctx.Done()) // Start processing these informers. +// synced := factory.WaitForCacheSync(ctx.Done()) +// for v, ok := range synced { +// if !ok { +// fmt.Fprintf(os.Stderr, "caches failed to sync: %v", v) +// return +// } +// } +// +// // Creating informers can also be created after Start, but then +// // Start must be called again: +// anotherGenericInformer := factory.ForResource(resource) +// factory.Start(ctx.Done()) +type SharedInformerFactory interface { + {{.informerFactoryInterface|raw}} + + // Start initializes all requested informers. They are handled in goroutines + // which run until the stop channel gets closed. + Start(stopCh <-chan struct{}) + + // Shutdown marks a factory as shutting down. At that point no new + // informers can be started anymore and Start will return without + // doing anything. + // + // In addition, Shutdown blocks until all goroutines have terminated. For that + // to happen, the close channel(s) that they were started with must be closed, + // either before Shutdown gets called or while it is waiting. + // + // Shutdown may be called multiple times, even concurrently. All such calls will + // block until all goroutines have terminated. + Shutdown() + + // WaitForCacheSync blocks until all started informers' caches were synced + // or the stop channel gets closed. + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + // ForResource gives generic access to a shared informer of the matching type. + ForResource(resource {{.schemaGroupVersionResource|raw}}) (GenericInformer, error) + + // InformerFor returns the SharedIndexInformer for obj using an internal + // client. + InformerFor(obj {{.runtimeObject|raw}}, newFunc {{.interfacesNewInformerFunc|raw}}) {{.cacheSharedIndexInformer|raw}} + + {{$gvInterfaces := .gvInterfaces}} + {{$gvGoNames := .gvGoNames}} + {{range $groupName, $group := .groupVersions}}{{index $gvGoNames $groupName}}() {{index $gvInterfaces $groupName|raw}} + {{end}} +} + +{{$gvNewFuncs := .gvNewFuncs}} +{{$gvGoNames := .gvGoNames}} +{{range $groupPkgName, $group := .groupVersions}} +func (f *sharedInformerFactory) {{index $gvGoNames $groupPkgName}}() {{index $gvInterfaces $groupPkgName|raw}} { + return {{index $gvNewFuncs $groupPkgName|raw}}(f, f.namespace, f.tweakListOptions) +} +{{end}} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factoryinterface.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factoryinterface.go new file mode 100644 index 000000000000..70826ebaad50 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factoryinterface.go @@ -0,0 +1,90 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// factoryInterfaceGenerator produces a file of interfaces used to break a dependency cycle for +// informer registration +type factoryInterfaceGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + clientSetPackage string + filtered bool +} + +var _ generator.Generator = &factoryInterfaceGenerator{} + +func (g *factoryInterfaceGenerator) Filter(c *generator.Context, t *types.Type) bool { + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *factoryInterfaceGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *factoryInterfaceGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + return +} + +func (g *factoryInterfaceGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "{{", "}}") + + klog.V(5).Infof("processing type %v", t) + + m := map[string]interface{}{ + "cacheSharedIndexInformer": c.Universe.Type(cacheSharedIndexInformer), + "clientSetPackage": c.Universe.Type(types.Name{Package: g.clientSetPackage, Name: "Interface"}), + "runtimeObject": c.Universe.Type(runtimeObject), + "timeDuration": c.Universe.Type(timeDuration), + "v1ListOptions": c.Universe.Type(v1ListOptions), + } + + sw.Do(externalSharedInformerFactoryInterface, m) + + return sw.Error() +} + +var externalSharedInformerFactoryInterface = ` +// NewInformerFunc takes {{.clientSetPackage|raw}} and {{.timeDuration|raw}} to return a SharedIndexInformer. +type NewInformerFunc func({{.clientSetPackage|raw}}, {{.timeDuration|raw}}) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj {{.runtimeObject|raw}}, newFunc NewInformerFunc) {{.cacheSharedIndexInformer|raw}} +} + +// TweakListOptionsFunc is a function that transforms a {{.v1ListOptions|raw}}. +type TweakListOptionsFunc func(*{{.v1ListOptions|raw}}) +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go new file mode 100644 index 000000000000..a5a42953d225 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go @@ -0,0 +1,184 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "sort" + "strings" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + codegennamer "k8s.io/code-generator/pkg/namer" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// genericGenerator generates the generic informer. +type genericGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + groupVersions map[string]clientgentypes.GroupVersions + groupGoNames map[string]string + pluralExceptions map[string]string + typesForGroupVersion map[clientgentypes.GroupVersion][]*types.Type + filtered bool +} + +var _ generator.Generator = &genericGenerator{} + +func (g *genericGenerator) Filter(c *generator.Context, t *types.Type) bool { + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *genericGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + "allLowercasePlural": namer.NewAllLowercasePluralNamer(g.pluralExceptions), + "publicPlural": namer.NewPublicPluralNamer(g.pluralExceptions), + "resource": codegennamer.NewTagOverrideNamer("resourceName", namer.NewAllLowercasePluralNamer(g.pluralExceptions)), + } +} + +func (g *genericGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + imports = append(imports, "fmt") + return +} + +type group struct { + GroupGoName string + Name string + Versions []*version +} + +type groupSort []group + +func (g groupSort) Len() int { return len(g) } +func (g groupSort) Less(i, j int) bool { + return strings.ToLower(g[i].Name) < strings.ToLower(g[j].Name) +} +func (g groupSort) Swap(i, j int) { g[i], g[j] = g[j], g[i] } + +type version struct { + Name string + GoName string + Resources []*types.Type +} + +type versionSort []*version + +func (v versionSort) Len() int { return len(v) } +func (v versionSort) Less(i, j int) bool { + return strings.ToLower(v[i].Name) < strings.ToLower(v[j].Name) +} +func (v versionSort) Swap(i, j int) { v[i], v[j] = v[j], v[i] } + +func (g *genericGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "{{", "}}") + + groups := []group{} + schemeGVs := make(map[*version]*types.Type) + + orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} + for groupPackageName, groupVersions := range g.groupVersions { + group := group{ + GroupGoName: g.groupGoNames[groupPackageName], + Name: groupVersions.Group.NonEmpty(), + Versions: []*version{}, + } + for _, v := range groupVersions.Versions { + gv := clientgentypes.GroupVersion{Group: groupVersions.Group, Version: v.Version} + version := &version{ + Name: v.Version.NonEmpty(), + GoName: namer.IC(v.Version.NonEmpty()), + Resources: orderer.OrderTypes(g.typesForGroupVersion[gv]), + } + func() { + schemeGVs[version] = c.Universe.Variable(types.Name{Package: g.typesForGroupVersion[gv][0].Name.Package, Name: "SchemeGroupVersion"}) + }() + group.Versions = append(group.Versions, version) + } + sort.Sort(versionSort(group.Versions)) + groups = append(groups, group) + } + sort.Sort(groupSort(groups)) + + m := map[string]interface{}{ + "cacheGenericLister": c.Universe.Type(cacheGenericLister), + "cacheNewGenericLister": c.Universe.Function(cacheNewGenericLister), + "cacheSharedIndexInformer": c.Universe.Type(cacheSharedIndexInformer), + "groups": groups, + "schemeGVs": schemeGVs, + "schemaGroupResource": c.Universe.Type(schemaGroupResource), + "schemaGroupVersionResource": c.Universe.Type(schemaGroupVersionResource), + } + + sw.Do(genericInformer, m) + sw.Do(forResource, m) + + return sw.Error() +} + +var genericInformer = ` +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() {{.cacheSharedIndexInformer|raw}} + Lister() {{.cacheGenericLister|raw}} +} + +type genericInformer struct { + informer {{.cacheSharedIndexInformer|raw}} + resource {{.schemaGroupResource|raw}} +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() {{.cacheSharedIndexInformer|raw}} { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() {{.cacheGenericLister|raw}} { + return {{.cacheNewGenericLister|raw}}(f.Informer().GetIndexer(), f.resource) +} +` + +var forResource = ` +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource {{.schemaGroupVersionResource|raw}}) (GenericInformer, error) { + switch resource { + {{range $group := .groups -}}{{$GroupGoName := .GroupGoName -}} + {{range $version := .Versions -}} + // Group={{$group.Name}}, Version={{.Name}} + {{range .Resources -}} + case {{index $.schemeGVs $version|raw}}.WithResource("{{.|resource}}"): + return &genericInformer{resource: resource.GroupResource(), informer: f.{{$GroupGoName}}().{{$version.GoName}}().{{.|publicPlural}}().Informer()}, nil + {{end}} + {{end}} + {{end -}} + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/groupinterface.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/groupinterface.go new file mode 100644 index 000000000000..0bba93c4b2ec --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/groupinterface.go @@ -0,0 +1,118 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "path/filepath" + "strings" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// groupInterfaceGenerator generates the per-group interface file. +type groupInterfaceGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + groupVersions clientgentypes.GroupVersions + filtered bool + internalInterfacesPackage string +} + +var _ generator.Generator = &groupInterfaceGenerator{} + +func (g *groupInterfaceGenerator) Filter(c *generator.Context, t *types.Type) bool { + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *groupInterfaceGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *groupInterfaceGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + return +} + +type versionData struct { + Name string + Interface *types.Type + New *types.Type +} + +func (g *groupInterfaceGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + versions := make([]versionData, 0, len(g.groupVersions.Versions)) + for _, version := range g.groupVersions.Versions { + gv := clientgentypes.GroupVersion{Group: g.groupVersions.Group, Version: version.Version} + versionPackage := filepath.Join(g.outputPackage, strings.ToLower(gv.Version.NonEmpty())) + iface := c.Universe.Type(types.Name{Package: versionPackage, Name: "Interface"}) + versions = append(versions, versionData{ + Name: namer.IC(version.Version.NonEmpty()), + Interface: iface, + New: c.Universe.Function(types.Name{Package: versionPackage, Name: "New"}), + }) + } + m := map[string]interface{}{ + "interfacesTweakListOptionsFunc": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "TweakListOptionsFunc"}), + "interfacesSharedInformerFactory": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "SharedInformerFactory"}), + "versions": versions, + } + + sw.Do(groupTemplate, m) + + return sw.Error() +} + +var groupTemplate = ` +// Interface provides access to each of this group's versions. +type Interface interface { + $range .versions -$ + // $.Name$ provides access to shared informers for resources in $.Name$. + $.Name$() $.Interface|raw$ + $end$ +} + +type group struct { + factory $.interfacesSharedInformerFactory|raw$ + namespace string + tweakListOptions $.interfacesTweakListOptionsFunc|raw$ +} + +// New returns a new Interface. +func New(f $.interfacesSharedInformerFactory|raw$, namespace string, tweakListOptions $.interfacesTweakListOptionsFunc|raw$) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +$range .versions$ +// $.Name$ returns a new $.Interface|raw$. +func (g *group) $.Name$() $.Interface|raw$ { + return $.New|raw$(g.factory, g.namespace, g.tweakListOptions) +} +$end$ +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/informer.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/informer.go new file mode 100644 index 000000000000..da00e6e61fe5 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/informer.go @@ -0,0 +1,186 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "io" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + + "k8s.io/klog/v2" +) + +// informerGenerator produces a file of listers for a given GroupVersion and +// type. +type informerGenerator struct { + generator.DefaultGen + outputPackage string + groupPkgName string + groupVersion clientgentypes.GroupVersion + groupGoName string + typeToGenerate *types.Type + imports namer.ImportTracker + clientSetPackage string + listersPackage string + internalInterfacesPackage string +} + +var _ generator.Generator = &informerGenerator{} + +func (g *informerGenerator) Filter(c *generator.Context, t *types.Type) bool { + return t == g.typeToGenerate +} + +func (g *informerGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *informerGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + return +} + +func (g *informerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + klog.V(5).Infof("processing type %v", t) + + listerPackage := fmt.Sprintf("%s/%s/%s", g.listersPackage, g.groupPkgName, strings.ToLower(g.groupVersion.Version.NonEmpty())) + clientSetInterface := c.Universe.Type(types.Name{Package: g.clientSetPackage, Name: "Interface"}) + informerFor := "InformerFor" + + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + + m := map[string]interface{}{ + "apiScheme": c.Universe.Type(apiScheme), + "cacheIndexers": c.Universe.Type(cacheIndexers), + "cacheListWatch": c.Universe.Type(cacheListWatch), + "cacheMetaNamespaceIndexFunc": c.Universe.Function(cacheMetaNamespaceIndexFunc), + "cacheNamespaceIndex": c.Universe.Variable(cacheNamespaceIndex), + "cacheNewSharedIndexInformer": c.Universe.Function(cacheNewSharedIndexInformer), + "cacheSharedIndexInformer": c.Universe.Type(cacheSharedIndexInformer), + "clientSetInterface": clientSetInterface, + "group": namer.IC(g.groupGoName), + "informerFor": informerFor, + "interfacesTweakListOptionsFunc": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "TweakListOptionsFunc"}), + "interfacesSharedInformerFactory": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "SharedInformerFactory"}), + "listOptions": c.Universe.Type(listOptions), + "lister": c.Universe.Type(types.Name{Package: listerPackage, Name: t.Name.Name + "Lister"}), + "namespaceAll": c.Universe.Type(metav1NamespaceAll), + "namespaced": !tags.NonNamespaced, + "newLister": c.Universe.Function(types.Name{Package: listerPackage, Name: "New" + t.Name.Name + "Lister"}), + "runtimeObject": c.Universe.Type(runtimeObject), + "timeDuration": c.Universe.Type(timeDuration), + "type": t, + "v1ListOptions": c.Universe.Type(v1ListOptions), + "version": namer.IC(g.groupVersion.Version.String()), + "watchInterface": c.Universe.Type(watchInterface), + } + + sw.Do(typeInformerInterface, m) + sw.Do(typeInformerStruct, m) + sw.Do(typeInformerPublicConstructor, m) + sw.Do(typeFilteredInformerPublicConstructor, m) + sw.Do(typeInformerConstructor, m) + sw.Do(typeInformerInformer, m) + sw.Do(typeInformerLister, m) + + return sw.Error() +} + +var typeInformerInterface = ` +// $.type|public$Informer provides access to a shared informer and lister for +// $.type|publicPlural$. +type $.type|public$Informer interface { + Informer() $.cacheSharedIndexInformer|raw$ + Lister() $.lister|raw$ +} +` + +var typeInformerStruct = ` +type $.type|private$Informer struct { + factory $.interfacesSharedInformerFactory|raw$ + tweakListOptions $.interfacesTweakListOptionsFunc|raw$ + $if .namespaced$namespace string$end$ +} +` + +var typeInformerPublicConstructor = ` +// New$.type|public$Informer constructs a new informer for $.type|public$ type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func New$.type|public$Informer(client $.clientSetInterface|raw$$if .namespaced$, namespace string$end$, resyncPeriod $.timeDuration|raw$, indexers $.cacheIndexers|raw$) $.cacheSharedIndexInformer|raw$ { + return NewFiltered$.type|public$Informer(client$if .namespaced$, namespace$end$, resyncPeriod, indexers, nil) +} +` + +var typeFilteredInformerPublicConstructor = ` +// NewFiltered$.type|public$Informer constructs a new informer for $.type|public$ type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFiltered$.type|public$Informer(client $.clientSetInterface|raw$$if .namespaced$, namespace string$end$, resyncPeriod $.timeDuration|raw$, indexers $.cacheIndexers|raw$, tweakListOptions $.interfacesTweakListOptionsFunc|raw$) $.cacheSharedIndexInformer|raw$ { + return $.cacheNewSharedIndexInformer|raw$( + &$.cacheListWatch|raw${ + ListFunc: func(options $.v1ListOptions|raw$) ($.runtimeObject|raw$, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.$.group$$.version$().$.type|publicPlural$($if .namespaced$namespace$end$).List(context.TODO(), options) + }, + WatchFunc: func(options $.v1ListOptions|raw$) ($.watchInterface|raw$, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.$.group$$.version$().$.type|publicPlural$($if .namespaced$namespace$end$).Watch(context.TODO(), options) + }, + }, + &$.type|raw${}, + resyncPeriod, + indexers, + ) +} +` + +var typeInformerConstructor = ` +func (f *$.type|private$Informer) defaultInformer(client $.clientSetInterface|raw$, resyncPeriod $.timeDuration|raw$) $.cacheSharedIndexInformer|raw$ { + return NewFiltered$.type|public$Informer(client$if .namespaced$, f.namespace$end$, resyncPeriod, $.cacheIndexers|raw${$.cacheNamespaceIndex|raw$: $.cacheMetaNamespaceIndexFunc|raw$}, f.tweakListOptions) +} +` + +var typeInformerInformer = ` +func (f *$.type|private$Informer) Informer() $.cacheSharedIndexInformer|raw$ { + return f.factory.$.informerFor$(&$.type|raw${}, f.defaultInformer) +} +` + +var typeInformerLister = ` +func (f *$.type|private$Informer) Lister() $.lister|raw$ { + return $.newLister|raw$(f.Informer().GetIndexer()) +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go new file mode 100644 index 000000000000..dd2c9cceb93d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go @@ -0,0 +1,347 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "path" + "path/filepath" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + "k8s.io/klog/v2" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + informergenargs "k8s.io/code-generator/cmd/informer-gen/args" + genutil "k8s.io/code-generator/pkg/util" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems(pluralExceptions map[string]string) namer.NameSystems { + return namer.NameSystems{ + "public": namer.NewPublicNamer(0), + "private": namer.NewPrivateNamer(0), + "raw": namer.NewRawNamer("", nil), + "publicPlural": namer.NewPublicPluralNamer(pluralExceptions), + "allLowercasePlural": namer.NewAllLowercasePluralNamer(pluralExceptions), + "lowercaseSingular": &lowercaseSingularNamer{}, + } +} + +// lowercaseSingularNamer implements Namer +type lowercaseSingularNamer struct{} + +// Name returns t's name in all lowercase. +func (n *lowercaseSingularNamer) Name(t *types.Type) string { + return strings.ToLower(t.Name.Name) +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// objectMetaForPackage returns the type of ObjectMeta used by package p. +func objectMetaForPackage(p *types.Package) (*types.Type, bool, error) { + generatingForPackage := false + for _, t := range p.Types { + if !util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)).GenerateClient { + continue + } + generatingForPackage = true + for _, member := range t.Members { + if member.Name == "ObjectMeta" { + return member.Type, isInternal(member), nil + } + } + } + if generatingForPackage { + return nil, false, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) + } + return nil, false, nil +} + +// isInternal returns true if the tags for a member do not contain a json tag +func isInternal(m types.Member) bool { + return !strings.Contains(m.Tags, "json") +} + +func packageForInternalInterfaces(base string) string { + return filepath.Join(base, "internalinterfaces") +} + +// Packages makes the client package definition. +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + customArgs, ok := arguments.CustomArgs.(*informergenargs.CustomArgs) + if !ok { + klog.Fatalf("Wrong CustomArgs type: %T", arguments.CustomArgs) + } + + internalVersionPackagePath := filepath.Join(arguments.OutputPackagePath) + externalVersionPackagePath := filepath.Join(arguments.OutputPackagePath) + if !customArgs.SingleDirectory { + internalVersionPackagePath = filepath.Join(arguments.OutputPackagePath, "internalversion") + externalVersionPackagePath = filepath.Join(arguments.OutputPackagePath, "externalversions") + } + + var packageList generator.Packages + typesForGroupVersion := make(map[clientgentypes.GroupVersion][]*types.Type) + + externalGroupVersions := make(map[string]clientgentypes.GroupVersions) + internalGroupVersions := make(map[string]clientgentypes.GroupVersions) + groupGoNames := make(map[string]string) + for _, inputDir := range arguments.InputDirs { + p := context.Universe.Package(genutil.Vendorless(inputDir)) + + objectMeta, internal, err := objectMetaForPackage(p) + if err != nil { + klog.Fatal(err) + } + if objectMeta == nil { + // no types in this package had genclient + continue + } + + var gv clientgentypes.GroupVersion + var targetGroupVersions map[string]clientgentypes.GroupVersions + + if internal { + lastSlash := strings.LastIndex(p.Path, "/") + if lastSlash == -1 { + klog.Fatalf("error constructing internal group version for package %q", p.Path) + } + gv.Group = clientgentypes.Group(p.Path[lastSlash+1:]) + targetGroupVersions = internalGroupVersions + } else { + parts := strings.Split(p.Path, "/") + gv.Group = clientgentypes.Group(parts[len(parts)-2]) + gv.Version = clientgentypes.Version(parts[len(parts)-1]) + targetGroupVersions = externalGroupVersions + } + groupPackageName := gv.Group.NonEmpty() + gvPackage := path.Clean(p.Path) + + // If there's a comment of the form "// +groupName=somegroup" or + // "// +groupName=somegroup.foo.bar.io", use the first field (somegroup) as the name of the + // group when generating. + if override := types.ExtractCommentTags("+", p.Comments)["groupName"]; override != nil { + gv.Group = clientgentypes.Group(override[0]) + } + + // If there's a comment of the form "// +groupGoName=SomeUniqueShortName", use that as + // the Go group identifier in CamelCase. It defaults + groupGoNames[groupPackageName] = namer.IC(strings.Split(gv.Group.NonEmpty(), ".")[0]) + if override := types.ExtractCommentTags("+", p.Comments)["groupGoName"]; override != nil { + groupGoNames[groupPackageName] = namer.IC(override[0]) + } + + var typesToGenerate []*types.Type + for _, t := range p.Types { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if !tags.GenerateClient || tags.NoVerbs || !tags.HasVerb("list") || !tags.HasVerb("watch") { + continue + } + + typesToGenerate = append(typesToGenerate, t) + + if _, ok := typesForGroupVersion[gv]; !ok { + typesForGroupVersion[gv] = []*types.Type{} + } + typesForGroupVersion[gv] = append(typesForGroupVersion[gv], t) + } + if len(typesToGenerate) == 0 { + continue + } + + groupVersionsEntry, ok := targetGroupVersions[groupPackageName] + if !ok { + groupVersionsEntry = clientgentypes.GroupVersions{ + PackageName: groupPackageName, + Group: gv.Group, + } + } + groupVersionsEntry.Versions = append(groupVersionsEntry.Versions, clientgentypes.PackageVersion{Version: gv.Version, Package: gvPackage}) + targetGroupVersions[groupPackageName] = groupVersionsEntry + + orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} + typesToGenerate = orderer.OrderTypes(typesToGenerate) + + if internal { + packageList = append(packageList, versionPackage(internalVersionPackagePath, groupPackageName, gv, groupGoNames[groupPackageName], boilerplate, typesToGenerate, customArgs.InternalClientSetPackage, customArgs.ListersPackage)) + } else { + packageList = append(packageList, versionPackage(externalVersionPackagePath, groupPackageName, gv, groupGoNames[groupPackageName], boilerplate, typesToGenerate, customArgs.VersionedClientSetPackage, customArgs.ListersPackage)) + } + } + + if len(externalGroupVersions) != 0 { + packageList = append(packageList, factoryInterfacePackage(externalVersionPackagePath, boilerplate, customArgs.VersionedClientSetPackage)) + packageList = append(packageList, factoryPackage(externalVersionPackagePath, boilerplate, groupGoNames, genutil.PluralExceptionListToMapOrDie(customArgs.PluralExceptions), externalGroupVersions, + customArgs.VersionedClientSetPackage, + typesForGroupVersion)) + for _, gvs := range externalGroupVersions { + packageList = append(packageList, groupPackage(externalVersionPackagePath, gvs, boilerplate)) + } + } + + if len(internalGroupVersions) != 0 { + packageList = append(packageList, factoryInterfacePackage(internalVersionPackagePath, boilerplate, customArgs.InternalClientSetPackage)) + packageList = append(packageList, factoryPackage(internalVersionPackagePath, boilerplate, groupGoNames, genutil.PluralExceptionListToMapOrDie(customArgs.PluralExceptions), internalGroupVersions, customArgs.InternalClientSetPackage, typesForGroupVersion)) + for _, gvs := range internalGroupVersions { + packageList = append(packageList, groupPackage(internalVersionPackagePath, gvs, boilerplate)) + } + } + + return packageList +} + +func factoryPackage(basePackage string, boilerplate []byte, groupGoNames, pluralExceptions map[string]string, groupVersions map[string]clientgentypes.GroupVersions, clientSetPackage string, + typesForGroupVersion map[clientgentypes.GroupVersion][]*types.Type) generator.Package { + return &generator.DefaultPackage{ + PackageName: filepath.Base(basePackage), + PackagePath: basePackage, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &factoryGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "factory", + }, + outputPackage: basePackage, + imports: generator.NewImportTracker(), + groupVersions: groupVersions, + clientSetPackage: clientSetPackage, + internalInterfacesPackage: packageForInternalInterfaces(basePackage), + gvGoNames: groupGoNames, + }) + + generators = append(generators, &genericGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "generic", + }, + outputPackage: basePackage, + imports: generator.NewImportTracker(), + groupVersions: groupVersions, + pluralExceptions: pluralExceptions, + typesForGroupVersion: typesForGroupVersion, + groupGoNames: groupGoNames, + }) + + return generators + }, + } +} + +func factoryInterfacePackage(basePackage string, boilerplate []byte, clientSetPackage string) generator.Package { + packagePath := packageForInternalInterfaces(basePackage) + + return &generator.DefaultPackage{ + PackageName: filepath.Base(packagePath), + PackagePath: packagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &factoryInterfaceGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "factory_interfaces", + }, + outputPackage: packagePath, + imports: generator.NewImportTracker(), + clientSetPackage: clientSetPackage, + }) + + return generators + }, + } +} + +func groupPackage(basePackage string, groupVersions clientgentypes.GroupVersions, boilerplate []byte) generator.Package { + packagePath := filepath.Join(basePackage, groupVersions.PackageName) + groupPkgName := strings.Split(string(groupVersions.PackageName), ".")[0] + + return &generator.DefaultPackage{ + PackageName: groupPkgName, + PackagePath: packagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &groupInterfaceGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "interface", + }, + outputPackage: packagePath, + groupVersions: groupVersions, + imports: generator.NewImportTracker(), + internalInterfacesPackage: packageForInternalInterfaces(basePackage), + }) + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + return tags.GenerateClient && tags.HasVerb("list") && tags.HasVerb("watch") + }, + } +} + +func versionPackage(basePackage string, groupPkgName string, gv clientgentypes.GroupVersion, groupGoName string, boilerplate []byte, typesToGenerate []*types.Type, clientSetPackage, listersPackage string) generator.Package { + packagePath := filepath.Join(basePackage, groupPkgName, strings.ToLower(gv.Version.NonEmpty())) + + return &generator.DefaultPackage{ + PackageName: strings.ToLower(gv.Version.NonEmpty()), + PackagePath: packagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &versionInterfaceGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "interface", + }, + outputPackage: packagePath, + imports: generator.NewImportTracker(), + types: typesToGenerate, + internalInterfacesPackage: packageForInternalInterfaces(basePackage), + }) + + for _, t := range typesToGenerate { + generators = append(generators, &informerGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: strings.ToLower(t.Name.Name), + }, + outputPackage: packagePath, + groupPkgName: groupPkgName, + groupVersion: gv, + groupGoName: groupGoName, + typeToGenerate: t, + imports: generator.NewImportTracker(), + clientSetPackage: clientSetPackage, + listersPackage: listersPackage, + internalInterfacesPackage: packageForInternalInterfaces(basePackage), + }) + } + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + return tags.GenerateClient && tags.HasVerb("list") && tags.HasVerb("watch") + }, + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go new file mode 100644 index 000000000000..27d4bd51ab12 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go @@ -0,0 +1,42 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import "k8s.io/gengo/types" + +var ( + apiScheme = types.Name{Package: "k8s.io/kubernetes/pkg/api/legacyscheme", Name: "Scheme"} + cacheGenericLister = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "GenericLister"} + cacheIndexers = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "Indexers"} + cacheListWatch = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "ListWatch"} + cacheMetaNamespaceIndexFunc = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "MetaNamespaceIndexFunc"} + cacheNamespaceIndex = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "NamespaceIndex"} + cacheNewGenericLister = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "NewGenericLister"} + cacheNewSharedIndexInformer = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "NewSharedIndexInformer"} + cacheSharedIndexInformer = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "SharedIndexInformer"} + listOptions = types.Name{Package: "k8s.io/kubernetes/pkg/apis/core", Name: "ListOptions"} + reflectType = types.Name{Package: "reflect", Name: "Type"} + runtimeObject = types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "Object"} + schemaGroupResource = types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupResource"} + schemaGroupVersionResource = types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionResource"} + syncMutex = types.Name{Package: "sync", Name: "Mutex"} + timeDuration = types.Name{Package: "time", Name: "Duration"} + v1ListOptions = types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"} + metav1NamespaceAll = types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "NamespaceAll"} + metav1Object = types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "Object"} + watchInterface = types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"} +) diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/versioninterface.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/versioninterface.go new file mode 100644 index 000000000000..3b51f8dc826d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/versioninterface.go @@ -0,0 +1,109 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// versionInterfaceGenerator generates the per-version interface file. +type versionInterfaceGenerator struct { + generator.DefaultGen + outputPackage string + imports namer.ImportTracker + types []*types.Type + filtered bool + internalInterfacesPackage string +} + +var _ generator.Generator = &versionInterfaceGenerator{} + +func (g *versionInterfaceGenerator) Filter(c *generator.Context, t *types.Type) bool { + if !g.filtered { + g.filtered = true + return true + } + return false +} + +func (g *versionInterfaceGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *versionInterfaceGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + return +} + +func (g *versionInterfaceGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + m := map[string]interface{}{ + "interfacesTweakListOptionsFunc": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "TweakListOptionsFunc"}), + "interfacesSharedInformerFactory": c.Universe.Type(types.Name{Package: g.internalInterfacesPackage, Name: "SharedInformerFactory"}), + "types": g.types, + } + + sw.Do(versionTemplate, m) + for _, typeDef := range g.types { + tags, err := util.ParseClientGenTags(append(typeDef.SecondClosestCommentLines, typeDef.CommentLines...)) + if err != nil { + return err + } + m["namespaced"] = !tags.NonNamespaced + m["type"] = typeDef + sw.Do(versionFuncTemplate, m) + } + + return sw.Error() +} + +var versionTemplate = ` +// Interface provides access to all the informers in this group version. +type Interface interface { + $range .types -$ + // $.|publicPlural$ returns a $.|public$Informer. + $.|publicPlural$() $.|public$Informer + $end$ +} + +type version struct { + factory $.interfacesSharedInformerFactory|raw$ + namespace string + tweakListOptions $.interfacesTweakListOptionsFunc|raw$ +} + +// New returns a new Interface. +func New(f $.interfacesSharedInformerFactory|raw$, namespace string, tweakListOptions $.interfacesTweakListOptionsFunc|raw$) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} +` + +var versionFuncTemplate = ` +// $.type|publicPlural$ returns a $.type|public$Informer. +func (v *version) $.type|publicPlural$() $.type|public$Informer { + return &$.type|private$Informer{factory: v.factory$if .namespaced$, namespace: v.namespace$end$, tweakListOptions: v.tweakListOptions} +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/main.go new file mode 100644 index 000000000000..1247c35b37aa --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/main.go @@ -0,0 +1,60 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/code-generator/cmd/informer-gen/generators" + "k8s.io/code-generator/pkg/util" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/informer-gen/args" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + // Override defaults. + // TODO: move out of informer-gen + genericArgs.OutputPackagePath = "k8s.io/kubernetes/pkg/client/informers/informers_generated" + customArgs.VersionedClientSetPackage = "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + customArgs.InternalClientSetPackage = "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + customArgs.ListersPackage = "k8s.io/kubernetes/pkg/client/listers" + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(util.PluralExceptionListToMapOrDie(customArgs.PluralExceptions)), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/args/args.go new file mode 100644 index 000000000000..170334505abc --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/args/args.go @@ -0,0 +1,64 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + "path" + + "github.com/spf13/pflag" + codegenutil "k8s.io/code-generator/pkg/util" + "k8s.io/gengo/args" +) + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs struct { + // PluralExceptions specify list of exceptions used when pluralizing certain types. + // For example 'Endpoints:Endpoints', otherwise the pluralizer will generate 'Endpointes'. + PluralExceptions []string +} + +// NewDefaults returns default arguments for the generator. +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + genericArgs := args.Default().WithoutDefaultFlagParsing() + customArgs := &CustomArgs{ + PluralExceptions: []string{"Endpoints:Endpoints"}, + } + genericArgs.CustomArgs = customArgs + + if pkg := codegenutil.CurrentPackage(); len(pkg) != 0 { + genericArgs.OutputPackagePath = path.Join(pkg, "pkg/client/listers") + } + + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringSliceVar(&ca.PluralExceptions, "plural-exceptions", ca.PluralExceptions, "list of comma separated plural exception definitions in Type:PluralizedType format") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + _ = genericArgs.CustomArgs.(*CustomArgs) + + if len(genericArgs.OutputPackagePath) == 0 { + return fmt.Errorf("output package cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/expansion.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/expansion.go new file mode 100644 index 000000000000..dd45d7749c7d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/expansion.go @@ -0,0 +1,67 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "os" + "path/filepath" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" +) + +// expansionGenerator produces a file for a expansion interfaces. +type expansionGenerator struct { + generator.DefaultGen + packagePath string + types []*types.Type +} + +// We only want to call GenerateType() once per group. +func (g *expansionGenerator) Filter(c *generator.Context, t *types.Type) bool { + return t == g.types[0] +} + +func (g *expansionGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + for _, t := range g.types { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if _, err := os.Stat(filepath.Join(g.packagePath, strings.ToLower(t.Name.Name+"_expansion.go"))); os.IsNotExist(err) { + sw.Do(expansionInterfaceTemplate, t) + if !tags.NonNamespaced { + sw.Do(namespacedExpansionInterfaceTemplate, t) + } + } + } + return sw.Error() +} + +var expansionInterfaceTemplate = ` +// $.|public$ListerExpansion allows custom methods to be added to +// $.|public$Lister. +type $.|public$ListerExpansion interface {} +` + +var namespacedExpansionInterfaceTemplate = ` +// $.|public$NamespaceListerExpansion allows custom methods to be added to +// $.|public$NamespaceLister. +type $.|public$NamespaceListerExpansion interface {} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go new file mode 100644 index 000000000000..8ada49469031 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go @@ -0,0 +1,376 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "io" + "path/filepath" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/code-generator/cmd/client-gen/generators/util" + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + + "k8s.io/klog/v2" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems(pluralExceptions map[string]string) namer.NameSystems { + return namer.NameSystems{ + "public": namer.NewPublicNamer(0), + "private": namer.NewPrivateNamer(0), + "raw": namer.NewRawNamer("", nil), + "publicPlural": namer.NewPublicPluralNamer(pluralExceptions), + "allLowercasePlural": namer.NewAllLowercasePluralNamer(pluralExceptions), + "lowercaseSingular": &lowercaseSingularNamer{}, + } +} + +// lowercaseSingularNamer implements Namer +type lowercaseSingularNamer struct{} + +// Name returns t's name in all lowercase. +func (n *lowercaseSingularNamer) Name(t *types.Type) string { + return strings.ToLower(t.Name.Name) +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// Packages makes the client package definition. +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + var packageList generator.Packages + for _, inputDir := range arguments.InputDirs { + p := context.Universe.Package(inputDir) + + objectMeta, internal, err := objectMetaForPackage(p) + if err != nil { + klog.Fatal(err) + } + if objectMeta == nil { + // no types in this package had genclient + continue + } + + var gv clientgentypes.GroupVersion + var internalGVPkg string + + if internal { + lastSlash := strings.LastIndex(p.Path, "/") + if lastSlash == -1 { + klog.Fatalf("error constructing internal group version for package %q", p.Path) + } + gv.Group = clientgentypes.Group(p.Path[lastSlash+1:]) + internalGVPkg = p.Path + } else { + parts := strings.Split(p.Path, "/") + gv.Group = clientgentypes.Group(parts[len(parts)-2]) + gv.Version = clientgentypes.Version(parts[len(parts)-1]) + + internalGVPkg = strings.Join(parts[0:len(parts)-1], "/") + } + groupPackageName := strings.ToLower(gv.Group.NonEmpty()) + + // If there's a comment of the form "// +groupName=somegroup" or + // "// +groupName=somegroup.foo.bar.io", use the first field (somegroup) as the name of the + // group when generating. + if override := types.ExtractCommentTags("+", p.Comments)["groupName"]; override != nil { + gv.Group = clientgentypes.Group(strings.SplitN(override[0], ".", 2)[0]) + } + + var typesToGenerate []*types.Type + for _, t := range p.Types { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if !tags.GenerateClient || !tags.HasVerb("list") || !tags.HasVerb("get") { + continue + } + typesToGenerate = append(typesToGenerate, t) + } + if len(typesToGenerate) == 0 { + continue + } + orderer := namer.Orderer{Namer: namer.NewPrivateNamer(0)} + typesToGenerate = orderer.OrderTypes(typesToGenerate) + + packagePath := filepath.Join(arguments.OutputPackagePath, groupPackageName, strings.ToLower(gv.Version.NonEmpty())) + packageList = append(packageList, &generator.DefaultPackage{ + PackageName: strings.ToLower(gv.Version.NonEmpty()), + PackagePath: packagePath, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = append(generators, &expansionGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: "expansion_generated", + }, + packagePath: filepath.Join(arguments.OutputBase, packagePath), + types: typesToGenerate, + }) + + for _, t := range typesToGenerate { + generators = append(generators, &listerGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: strings.ToLower(t.Name.Name), + }, + outputPackage: arguments.OutputPackagePath, + groupVersion: gv, + internalGVPkg: internalGVPkg, + typeToGenerate: t, + imports: generator.NewImportTracker(), + objectMeta: objectMeta, + }) + } + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + tags := util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + return tags.GenerateClient && tags.HasVerb("list") && tags.HasVerb("get") + }, + }) + } + + return packageList +} + +// objectMetaForPackage returns the type of ObjectMeta used by package p. +func objectMetaForPackage(p *types.Package) (*types.Type, bool, error) { + generatingForPackage := false + for _, t := range p.Types { + // filter out types which don't have genclient. + if !util.MustParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)).GenerateClient { + continue + } + generatingForPackage = true + for _, member := range t.Members { + if member.Name == "ObjectMeta" { + return member.Type, isInternal(member), nil + } + } + } + if generatingForPackage { + return nil, false, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) + } + return nil, false, nil +} + +// isInternal returns true if the tags for a member do not contain a json tag +func isInternal(m types.Member) bool { + return !strings.Contains(m.Tags, "json") +} + +// listerGenerator produces a file of listers for a given GroupVersion and +// type. +type listerGenerator struct { + generator.DefaultGen + outputPackage string + groupVersion clientgentypes.GroupVersion + internalGVPkg string + typeToGenerate *types.Type + imports namer.ImportTracker + objectMeta *types.Type +} + +var _ generator.Generator = &listerGenerator{} + +func (g *listerGenerator) Filter(c *generator.Context, t *types.Type) bool { + return t == g.typeToGenerate +} + +func (g *listerGenerator) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *listerGenerator) Imports(c *generator.Context) (imports []string) { + imports = append(imports, g.imports.ImportLines()...) + imports = append(imports, "k8s.io/apimachinery/pkg/api/errors") + imports = append(imports, "k8s.io/apimachinery/pkg/labels") + // for Indexer + imports = append(imports, "k8s.io/client-go/tools/cache") + return +} + +func (g *listerGenerator) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + klog.V(5).Infof("processing type %v", t) + m := map[string]interface{}{ + "Resource": c.Universe.Function(types.Name{Package: t.Name.Package, Name: "Resource"}), + "type": t, + "objectMeta": g.objectMeta, + } + + tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) + if err != nil { + return err + } + + if tags.NonNamespaced { + sw.Do(typeListerInterface_NonNamespaced, m) + } else { + sw.Do(typeListerInterface, m) + } + + sw.Do(typeListerStruct, m) + sw.Do(typeListerConstructor, m) + sw.Do(typeLister_List, m) + + if tags.NonNamespaced { + sw.Do(typeLister_NonNamespacedGet, m) + return sw.Error() + } + + sw.Do(typeLister_NamespaceLister, m) + sw.Do(namespaceListerInterface, m) + sw.Do(namespaceListerStruct, m) + sw.Do(namespaceLister_List, m) + sw.Do(namespaceLister_Get, m) + + return sw.Error() +} + +var typeListerInterface = ` +// $.type|public$Lister helps list $.type|publicPlural$. +// All objects returned here must be treated as read-only. +type $.type|public$Lister interface { + // List lists all $.type|publicPlural$ in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*$.type|raw$, err error) + // $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$. + $.type|publicPlural$(namespace string) $.type|public$NamespaceLister + $.type|public$ListerExpansion +} +` + +var typeListerInterface_NonNamespaced = ` +// $.type|public$Lister helps list $.type|publicPlural$. +// All objects returned here must be treated as read-only. +type $.type|public$Lister interface { + // List lists all $.type|publicPlural$ in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*$.type|raw$, err error) + // Get retrieves the $.type|public$ from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*$.type|raw$, error) + $.type|public$ListerExpansion +} +` + +var typeListerStruct = ` +// $.type|private$Lister implements the $.type|public$Lister interface. +type $.type|private$Lister struct { + indexer cache.Indexer +} +` + +var typeListerConstructor = ` +// New$.type|public$Lister returns a new $.type|public$Lister. +func New$.type|public$Lister(indexer cache.Indexer) $.type|public$Lister { + return &$.type|private$Lister{indexer: indexer} +} +` + +var typeLister_List = ` +// List lists all $.type|publicPlural$ in the indexer. +func (s *$.type|private$Lister) List(selector labels.Selector) (ret []*$.type|raw$, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*$.type|raw$)) + }) + return ret, err +} +` + +var typeLister_NamespaceLister = ` +// $.type|publicPlural$ returns an object that can list and get $.type|publicPlural$. +func (s *$.type|private$Lister) $.type|publicPlural$(namespace string) $.type|public$NamespaceLister { + return $.type|private$NamespaceLister{indexer: s.indexer, namespace: namespace} +} +` + +var typeLister_NonNamespacedGet = ` +// Get retrieves the $.type|public$ from the index for a given name. +func (s *$.type|private$Lister) Get(name string) (*$.type|raw$, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound($.Resource|raw$("$.type|lowercaseSingular$"), name) + } + return obj.(*$.type|raw$), nil +} +` + +var namespaceListerInterface = ` +// $.type|public$NamespaceLister helps list and get $.type|publicPlural$. +// All objects returned here must be treated as read-only. +type $.type|public$NamespaceLister interface { + // List lists all $.type|publicPlural$ in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*$.type|raw$, err error) + // Get retrieves the $.type|public$ from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*$.type|raw$, error) + $.type|public$NamespaceListerExpansion +} +` + +var namespaceListerStruct = ` +// $.type|private$NamespaceLister implements the $.type|public$NamespaceLister +// interface. +type $.type|private$NamespaceLister struct { + indexer cache.Indexer + namespace string +} +` + +var namespaceLister_List = ` +// List lists all $.type|publicPlural$ in the indexer for a given namespace. +func (s $.type|private$NamespaceLister) List(selector labels.Selector) (ret []*$.type|raw$, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*$.type|raw$)) + }) + return ret, err +} +` + +var namespaceLister_Get = ` +// Get retrieves the $.type|public$ from the indexer for a given namespace and name. +func (s $.type|private$NamespaceLister) Get(name string) (*$.type|raw$, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound($.Resource|raw$("$.type|lowercaseSingular$"), name) + } + return obj.(*$.type|raw$), nil +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/main.go new file mode 100644 index 000000000000..a7d7b610878f --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/lister-gen/main.go @@ -0,0 +1,57 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/code-generator/cmd/lister-gen/generators" + "k8s.io/code-generator/pkg/util" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/lister-gen/args" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + // Override defaults. + // TODO: move this out of lister-gen + genericArgs.OutputPackagePath = "k8s.io/kubernetes/pkg/client/listers" + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + // Run it. + if err := genericArgs.Execute( + generators.NameSystems(util.PluralExceptionListToMapOrDie(customArgs.PluralExceptions)), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/openapi-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/openapi-gen/main.go new file mode 100644 index 000000000000..c446e80b8a02 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/openapi-gen/main.go @@ -0,0 +1,57 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package generates openAPI definition file to be used in open API spec generation on API servers. To generate +// definition for a specific type or package add "+k8s:openapi-gen=true" tag to the type/package comment lines. To +// exclude a type from a tagged package, add "+k8s:openapi-gen=false" tag to the type comment lines. + +package main + +import ( + "flag" + "log" + + generatorargs "k8s.io/kube-openapi/cmd/openapi-gen/args" + "k8s.io/kube-openapi/pkg/generators" + + "github.com/spf13/pflag" + + "k8s.io/klog/v2" +) + +func main() { + klog.InitFlags(nil) + genericArgs, customArgs := generatorargs.NewDefaults() + + genericArgs.AddFlags(pflag.CommandLine) + customArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + pflag.Parse() + + if err := generatorargs.Validate(genericArgs); err != nil { + log.Fatalf("Arguments validation error: %v", err) + } + + // Generates the code for the OpenAPIDefinitions. + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + log.Fatalf("OpenAPI code generation error: %v", err) + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/args/args.go new file mode 100644 index 000000000000..2e3ab084e201 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/args/args.go @@ -0,0 +1,39 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + + "k8s.io/gengo/args" +) + +// NewDefaults returns default arguments for the generator. +func NewDefaults() *args.GeneratorArgs { + genericArgs := args.Default().WithoutDefaultFlagParsing() + genericArgs.OutputFileBaseName = "zz_generated.register" + return genericArgs +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + if len(genericArgs.OutputFileBaseName) == 0 { + return fmt.Errorf("output file base name cannot be empty") + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/packages.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/packages.go new file mode 100644 index 000000000000..242eb3aa10af --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/packages.go @@ -0,0 +1,137 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "os" + "path" + "strings" + + "k8s.io/klog/v2" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{} +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// Packages makes packages to generate. +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + packages := generator.Packages{} + for _, inputDir := range arguments.InputDirs { + pkg := context.Universe.Package(inputDir) + internal, err := isInternal(pkg) + if err != nil { + klog.V(5).Infof("skipping the generation of %s file, due to err %v", arguments.OutputFileBaseName, err) + continue + } + if internal { + klog.V(5).Infof("skipping the generation of %s file because %s package contains internal types, note that internal types don't have \"json\" tags", arguments.OutputFileBaseName, pkg.Name) + continue + } + registerFileName := "register.go" + searchPath := path.Join(args.DefaultSourceTree(), inputDir, registerFileName) + if _, err := os.Stat(path.Join(searchPath)); err == nil { + klog.V(5).Infof("skipping the generation of %s file because %s already exists in the path %s", arguments.OutputFileBaseName, registerFileName, searchPath) + continue + } else if err != nil && !os.IsNotExist(err) { + klog.Fatalf("an error %v has occurred while checking if %s exists", err, registerFileName) + } + + gv := clientgentypes.GroupVersion{} + { + pathParts := strings.Split(pkg.Path, "/") + if len(pathParts) < 2 { + klog.Errorf("the path of the package must contain the group name and the version, path = %s", pkg.Path) + continue + } + gv.Group = clientgentypes.Group(pathParts[len(pathParts)-2]) + gv.Version = clientgentypes.Version(pathParts[len(pathParts)-1]) + + // if there is a comment of the form "// +groupName=somegroup" or "// +groupName=somegroup.foo.bar.io", + // extract the fully qualified API group name from it and overwrite the group inferred from the package path + if override := types.ExtractCommentTags("+", pkg.Comments)["groupName"]; override != nil { + groupName := override[0] + klog.V(5).Infof("overriding the group name with = %s", groupName) + gv.Group = clientgentypes.Group(groupName) + } + } + + typesToRegister := []*types.Type{} + for _, t := range pkg.Types { + klog.V(5).Infof("considering type = %s", t.Name.String()) + for _, typeMember := range t.Members { + if typeMember.Name == "TypeMeta" && typeMember.Embedded == true { + typesToRegister = append(typesToRegister, t) + } + } + } + + packages = append(packages, + &generator.DefaultPackage{ + PackageName: pkg.Name, + PackagePath: pkg.Path, + HeaderText: boilerplate, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{ + ®isterExternalGenerator{ + DefaultGen: generator.DefaultGen{ + OptionalName: arguments.OutputFileBaseName, + }, + gv: gv, + typesToGenerate: typesToRegister, + outputPackage: pkg.Path, + imports: generator.NewImportTracker(), + }, + } + }, + }) + } + + return packages +} + +// isInternal determines whether the given package +// contains the internal types or not +func isInternal(p *types.Package) (bool, error) { + for _, t := range p.Types { + for _, member := range t.Members { + if member.Name == "TypeMeta" { + return !strings.Contains(member.Tags, "json"), nil + } + } + } + return false, fmt.Errorf("unable to find TypeMeta for any types in package %s", p.Path) +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/register_external.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/register_external.go new file mode 100644 index 000000000000..c831c575d6d6 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/generators/register_external.go @@ -0,0 +1,117 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "io" + "sort" + + clientgentypes "k8s.io/code-generator/cmd/client-gen/types" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +type registerExternalGenerator struct { + generator.DefaultGen + outputPackage string + gv clientgentypes.GroupVersion + typesToGenerate []*types.Type + imports namer.ImportTracker +} + +var _ generator.Generator = ®isterExternalGenerator{} + +func (g *registerExternalGenerator) Filter(_ *generator.Context, _ *types.Type) bool { + return false +} + +func (g *registerExternalGenerator) Imports(c *generator.Context) (imports []string) { + return g.imports.ImportLines() +} + +func (g *registerExternalGenerator) Namers(_ *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *registerExternalGenerator) Finalize(context *generator.Context, w io.Writer) error { + typesToGenerateOnlyNames := make([]string, len(g.typesToGenerate)) + for index, typeToGenerate := range g.typesToGenerate { + typesToGenerateOnlyNames[index] = typeToGenerate.Name.Name + } + + // sort the list of types to register, so that the generator produces stable output + sort.Strings(typesToGenerateOnlyNames) + + sw := generator.NewSnippetWriter(w, context, "$", "$") + m := map[string]interface{}{ + "groupName": g.gv.Group, + "version": g.gv.Version, + "types": typesToGenerateOnlyNames, + "addToGroupVersion": context.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "AddToGroupVersion"}), + "groupVersion": context.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GroupVersion"}), + } + sw.Do(registerExternalTypesTemplate, m) + return sw.Error() +} + +var registerExternalTypesTemplate = ` +// GroupName specifies the group name used to register the objects. +const GroupName = "$.groupName$" + +// GroupVersion specifies the group and the version used to register the objects. +var GroupVersion = $.groupVersion|raw${Group: GroupName, Version: "$.version$"} + +// SchemeGroupVersion is group version used to register these objects +// Deprecated: use GroupVersion instead. +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "$.version$"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder runtime.SchemeBuilder + localSchemeBuilder = &SchemeBuilder + // Depreciated: use Install instead + AddToScheme = localSchemeBuilder.AddToScheme + Install = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addKnownTypes) +} + +// Adds the list of known types to Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + $range .types -$ + &$.${}, + $end$ + ) + // AddToGroupVersion allows the serialization of client types like ListOptions. + $.addToGroupVersion|raw$(scheme, SchemeGroupVersion) + return nil +} +` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/main.go new file mode 100644 index 000000000000..dc29144481bd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/register-gen/main.go @@ -0,0 +1,49 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + + "github.com/spf13/pflag" + "k8s.io/klog/v2" + + generatorargs "k8s.io/code-generator/cmd/register-gen/args" + "k8s.io/code-generator/cmd/register-gen/generators" +) + +func main() { + klog.InitFlags(nil) + genericArgs := generatorargs.NewDefaults() + genericArgs.AddFlags(pflag.CommandLine) + flag.Set("logtostderr", "true") + pflag.CommandLine.AddGoFlagSet(flag.CommandLine) + + pflag.Parse() + if err := generatorargs.Validate(genericArgs); err != nil { + klog.Fatalf("Error: %v", err) + } + + if err := genericArgs.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Fatalf("Error: %v", err) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/.gitignore b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/.gitignore new file mode 100644 index 000000000000..ffe6458c963c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/.gitignore @@ -0,0 +1 @@ +set-gen diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/main.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/main.go new file mode 100644 index 000000000000..0968ce762b91 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/set-gen/main.go @@ -0,0 +1,53 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// set-gen is an example usage of gengo. +// +// Structs in the input directories with the below line in their comments will +// have sets generated for them. +// // +genset +// +// Any builtin type referenced anywhere in the input directories will have a +// set generated for it. +package main + +import ( + "os" + + "k8s.io/gengo/args" + "k8s.io/gengo/examples/set-gen/generators" + + "k8s.io/klog/v2" +) + +func main() { + klog.InitFlags(nil) + arguments := args.Default() + + // Override defaults. + arguments.InputDirs = []string{"k8s.io/kubernetes/pkg/util/sets/types"} + arguments.OutputPackagePath = "k8s.io/apimachinery/pkg/util/sets" + + if err := arguments.Execute( + generators.NameSystems(), + generators.DefaultNameSystem(), + generators.Packages, + ); err != nil { + klog.Errorf("Error: %v", err) + os.Exit(1) + } + klog.V(2).Info("Completed successfully.") +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/code-of-conduct.md b/cluster-autoscaler/vendor/k8s.io/code-generator/code-of-conduct.md new file mode 100644 index 000000000000..0d15c00cf325 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/doc.go b/cluster-autoscaler/vendor/k8s.io/code-generator/doc.go new file mode 100644 index 000000000000..fd867306974e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package codegenerator // import "k8s.io/code-generator" diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/generate-groups.sh b/cluster-autoscaler/vendor/k8s.io/code-generator/generate-groups.sh new file mode 100644 index 000000000000..a21d2184f0b6 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/generate-groups.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +# generate-groups generates everything for a project with external types only, e.g. a project based +# on CustomResourceDefinitions. + +if [ "$#" -lt 4 ] || [ "${1}" == "--help" ]; then + cat < ... + + the generators comma separated to run (deepcopy,defaulter,applyconfiguration,client,lister,informer). + the output package name (e.g. github.com/example/project/pkg/generated). + the external types dir (e.g. github.com/example/api or github.com/example/project/pkg/apis). + the groups and their versions in the format "groupA:v1,v2 groupB:v1 groupC:v2", relative + to . + ... arbitrary flags passed to all generator binaries. + + +Example: + $(basename "$0") \ + deepcopy,client \ + github.com/example/project/pkg/client \ + github.com/example/project/pkg/apis \ + "foo:v1 bar:v1alpha1,v1beta1" +EOF + exit 0 +fi + +GENS="$1" +OUTPUT_PKG="$2" +APIS_PKG="$3" +GROUPS_WITH_VERSIONS="$4" +shift 4 + +echo "WARNING: $(basename "$0") is deprecated." +echo "WARNING: Please use k8s.io/code-generator/kube_codegen.sh instead." +echo + +if [ "${GENS}" = "all" ] || grep -qw "all" <<<"${GENS}"; then + ALL="applyconfiguration,client,deepcopy,informer,lister" + echo "WARNING: Specifying \"all\" as a generator is deprecated." + echo "WARNING: Please list the specific generators needed." + echo "WARNING: \"all\" is now an alias for \"${ALL}\"; new code generators WILL NOT be added to this set" + echo + GENS="${ALL}" +fi + +INT_APIS_PKG="" +exec "$(dirname "${BASH_SOURCE[0]}")/generate-internal-groups.sh" "${GENS}" "${OUTPUT_PKG}" "${INT_APIS_PKG}" "${APIS_PKG}" "${GROUPS_WITH_VERSIONS}" "$@" diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/generate-internal-groups.sh b/cluster-autoscaler/vendor/k8s.io/code-generator/generate-internal-groups.sh new file mode 100644 index 000000000000..db1f93f43ff3 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/generate-internal-groups.sh @@ -0,0 +1,272 @@ +#!/usr/bin/env bash + +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +# generate-internal-groups generates everything for a project with internal types, e.g. an +# user-provided API server based on k8s.io/apiserver. + +if [ "$#" -lt 5 ] || [ "${1}" == "--help" ]; then + cat < ... + + the generators comma separated to run (applyconfiguration,client,conversion,deepcopy,defaulter,informer,lister,openapi). + the output package name (e.g. github.com/example/project/pkg/generated). + the internal types dir (e.g. github.com/example/project/pkg/apis) or "" if none. + the external types dir (e.g. github.com/example/project/pkg/apis or githubcom/example/apis). + the groups and their versions in the format "groupA:v1,v2 groupB:v1 groupC:v2", relative + to . + ... arbitrary flags passed to all generator binaries. + +Example: + $(basename "$0") \ + deepcopy,defaulter,conversion \ + github.com/example/project/pkg/client \ + github.com/example/project/pkg/apis \ + github.com/example/project/apis \ + "foo:v1 bar:v1alpha1,v1beta1" +EOF + exit 0 +fi + +GENS="$1" +OUTPUT_PKG="$2" +INT_APIS_PKG="$3" +EXT_APIS_PKG="$4" +GROUPS_WITH_VERSIONS="$5" +shift 5 + +echo "WARNING: $(basename "$0") is deprecated." +echo "WARNING: Please use k8s.io/code-generator/kube_codegen.sh instead." +echo + +if [ "${GENS}" = "all" ] || grep -qw "all" <<<"${GENS}"; then + ALL="client,conversion,deepcopy,defaulter,informer,lister,openapi" + echo "WARNING: Specifying \"all\" as a generator is deprecated." + echo "WARNING: Please list the specific generators needed." + echo "WARNING: \"all\" is now an alias for \"${ALL}\"; new code generators WILL NOT be added to this set" + echo + GENS="${ALL}" +fi + +( + # To support running this script from anywhere, first cd into this directory, + # and then install with forced module mode on and fully qualified name. + cd "$(dirname "${0}")" + BINS=( + applyconfiguration-gen + client-gen + conversion-gen + deepcopy-gen + defaulter-gen + informer-gen + lister-gen + openapi-gen + ) + # Compile all the tools at once - it's slightly faster but also just simpler. + # shellcheck disable=2046 # printf word-splitting is intentional + GO111MODULE=on go install $(printf "k8s.io/code-generator/cmd/%s " "${BINS[@]}") +) + +# Go installs the above commands to get installed in $GOBIN if defined, and $GOPATH/bin otherwise: +GOBIN="$(go env GOBIN)" +gobin="${GOBIN:-$(go env GOPATH)/bin}" + +function git_find() { + # Similar to find but faster and easier to understand. We want to include + # modified and untracked files because this might be running against code + # which is not tracked by git yet. + git ls-files -cmo --exclude-standard "$@" +} + +function git_grep() { + # We want to include modified and untracked files because this might be + # running against code which is not tracked by git yet. + git grep --untracked "$@" +} +function codegen::join() { local IFS="$1"; shift; echo "$*"; } + +# enumerate group versions +ALL_FQ_APIS=() # e.g. k8s.io/kubernetes/pkg/apis/apps k8s.io/api/apps/v1 +EXT_FQ_APIS=() # e.g. k8s.io/api/apps/v1 +GROUP_VERSIONS=() # e.g. apps/v1 +for GVs in ${GROUPS_WITH_VERSIONS}; do + IFS=: read -r G Vs <<<"${GVs}" + + if [ -n "${INT_APIS_PKG}" ]; then + ALL_FQ_APIS+=("${INT_APIS_PKG}/${G}") + fi + + # enumerate versions + for V in ${Vs//,/ }; do + ALL_FQ_APIS+=("${EXT_APIS_PKG}/${G}/${V}") + EXT_FQ_APIS+=("${EXT_APIS_PKG}/${G}/${V}") + GROUP_VERSIONS+=("${G}/${V}") + done +done + +if grep -qw "deepcopy" <<<"${GENS}"; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.deepcopy.go | xargs -0 rm -f + popd >/dev/null + done + + echo "Generating deepcopy funcs" + "${gobin}/deepcopy-gen" \ + --input-dirs "$(codegen::join , "${ALL_FQ_APIS[@]}")" \ + -O zz_generated.deepcopy \ + "$@" +fi + +if grep -qw "defaulter" <<<"${GENS}"; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.defaults.go | xargs -0 rm -f + popd >/dev/null + done + + echo "Generating defaulters" + "${gobin}/defaulter-gen" \ + --input-dirs "$(codegen::join , "${EXT_FQ_APIS[@]}")" \ + -O zz_generated.defaults \ + "$@" +fi + +if grep -qw "conversion" <<<"${GENS}"; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${ALL_FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.conversion.go | xargs -0 rm -f + popd >/dev/null + done + + echo "Generating conversions" + "${gobin}/conversion-gen" \ + --input-dirs "$(codegen::join , "${ALL_FQ_APIS[@]}")" \ + -O zz_generated.conversion \ + "$@" +fi + +if grep -qw "applyconfiguration" <<<"${GENS}"; then + APPLY_CONFIGURATION_PACKAGE="${OUTPUT_PKG}/${APPLYCONFIGURATION_PKG_NAME:-applyconfiguration}" + + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${APPLY_CONFIGURATION_PACKAGE}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by applyconfiguration-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi + + echo "Generating apply configuration for ${GROUPS_WITH_VERSIONS} at ${APPLY_CONFIGURATION_PACKAGE}" + "${gobin}/applyconfiguration-gen" \ + --input-dirs "$(codegen::join , "${EXT_FQ_APIS[@]}")" \ + --output-package "${APPLY_CONFIGURATION_PACKAGE}" \ + "$@" +fi + +if grep -qw "client" <<<"${GENS}"; then + CLIENTSET_PKG="${CLIENTSET_PKG_NAME:-clientset}" + CLIENTSET_NAME="${CLIENTSET_NAME_VERSIONED:-versioned}" + + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/${CLIENTSET_PKG}/${CLIENTSET_NAME}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by client-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi + + echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG}" + "${gobin}/client-gen" \ + --clientset-name "${CLIENTSET_NAME}" \ + --input-base "" \ + --input "$(codegen::join , "${EXT_FQ_APIS[@]}")" \ + --output-package "${OUTPUT_PKG}/${CLIENTSET_PKG}" \ + --apply-configuration-package "${APPLY_CONFIGURATION_PACKAGE:-}" \ + "$@" +fi + +if grep -qw "lister" <<<"${GENS}"; then + # Nuke existing files + for gv in "${GROUP_VERSIONS[@]}"; do + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/listers/${gv}" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by lister-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi + done + + echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers" + "${gobin}/lister-gen" \ + --input-dirs "$(codegen::join , "${EXT_FQ_APIS[@]}")" \ + --output-package "${OUTPUT_PKG}/listers" \ + "$@" +fi + +if grep -qw "informer" <<<"${GENS}"; then + # Nuke existing files + root="$(GO111MODULE=on go list -f '{{.Dir}}' "${OUTPUT_PKG}/informers/externalversions" 2>/dev/null || true)" + if [ -n "${root}" ]; then + pushd "${root}" >/dev/null + git_grep -l --null \ + -e '^// Code generated by informer-gen. DO NOT EDIT.$' \ + ':(glob)**/*.go' \ + | xargs -0 rm -f + popd >/dev/null + fi + + echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers" + "${gobin}/informer-gen" \ + --input-dirs "$(codegen::join , "${EXT_FQ_APIS[@]}")" \ + --versioned-clientset-package "${OUTPUT_PKG}/${CLIENTSET_PKG}/${CLIENTSET_NAME}" \ + --listers-package "${OUTPUT_PKG}/listers" \ + --output-package "${OUTPUT_PKG}/informers" \ + "$@" +fi + +if grep -qw "openapi" <<<"${GENS}"; then + # Nuke existing files + for dir in $(GO111MODULE=on go list -f '{{.Dir}}' "${FQ_APIS[@]}"); do + pushd "${dir}" >/dev/null + git_find -z ':(glob)**'/zz_generated.openapi.go | xargs -0 rm -f + popd >/dev/null + done + + echo "Generating OpenAPI definitions for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/openapi" + declare -a OPENAPI_EXTRA_PACKAGES + "${gobin}/openapi-gen" \ + --input-dirs "$(codegen::join , "${EXT_FQ_APIS[@]}" "${OPENAPI_EXTRA_PACKAGES[@]+"${OPENAPI_EXTRA_PACKAGES[@]}"}")" \ + --input-dirs "k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/runtime,k8s.io/apimachinery/pkg/version" \ + --output-package "${OUTPUT_PKG}/openapi" \ + -O zz_generated.openapi \ + "$@" +fi diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/kube_codegen.sh b/cluster-autoscaler/vendor/k8s.io/code-generator/kube_codegen.sh new file mode 100644 index 000000000000..3342b9dcaebf --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/kube_codegen.sh @@ -0,0 +1,637 @@ +#!/usr/bin/env bash + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This presents several functions for packages which want to use kubernetes +# code-generation tools. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_CODEGEN_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" + +function kube::codegen::internal::git_find() { + # Similar to find but faster and easier to understand. We want to include + # modified and untracked files because this might be running against code + # which is not tracked by git yet. + git ls-files -cmo --exclude-standard "$@" +} + +function kube::codegen::internal::git_grep() { + # We want to include modified and untracked files because this might be + # running against code which is not tracked by git yet. + git grep --untracked "$@" +} + +# Generate tagged helper code: conversions, deepcopy, and defaults +# +# Args: +# --input-pkg-root +# The root package under which to search for files which request code to be +# generated. This must be Go package syntax, e.g. "k8s.io/foo/bar". +# +# --output-base +# The root directory under which to emit code. The concatenation of +# + must be valid. +# +# --boilerplate +# An optional override for the header file to insert into generated files. +# +function kube::codegen::gen_helpers() { + local in_pkg_root="" + local out_base="" # gengo needs the output dir must be $out_base/$out_pkg_root + local boilerplate="${KUBE_CODEGEN_ROOT}/hack/boilerplate.go.txt" + local v="${KUBE_VERBOSE:-0}" + + while [ "$#" -gt 0 ]; do + case "$1" in + "--input-pkg-root") + in_pkg_root="$2" + shift 2 + ;; + "--output-base") + out_base="$2" + shift 2 + ;; + "--boilerplate") + boilerplate="$2" + shift 2 + ;; + *) + echo "unknown argument: $1" >&2 + return 1 + ;; + esac + done + + if [ -z "${in_pkg_root}" ]; then + echo "--input-pkg-root is required" >&2 + return 1 + fi + if [ -z "${out_base}" ]; then + echo "--output-base is required" >&2 + return 1 + fi + + ( + # To support running this from anywhere, first cd into this directory, + # and then install with forced module mode on and fully qualified name. + cd "${KUBE_CODEGEN_ROOT}" + BINS=( + conversion-gen + deepcopy-gen + defaulter-gen + ) + # shellcheck disable=2046 # printf word-splitting is intentional + GO111MODULE=on go install $(printf "k8s.io/code-generator/cmd/%s " "${BINS[@]}") + ) + # Go installs in $GOBIN if defined, and $GOPATH/bin otherwise + gobin="${GOBIN:-$(go env GOPATH)/bin}" + + # These tools all assume out-dir == in-dir. + root="${out_base}/${in_pkg_root}" + mkdir -p "${root}" + root="$(cd "${root}" && pwd -P)" + + # Deepcopy + # + local input_pkgs=() + while read -r file; do + dir="$(dirname "${file}")" + pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)" + input_pkgs+=("${pkg}") + done < <( + ( kube::codegen::internal::git_grep -l \ + -e '+k8s:deepcopy-gen=' \ + ":(glob)${root}"/'**/*.go' \ + || true \ + ) | LC_ALL=C sort -u + ) + + if [ "${#input_pkgs[@]}" != 0 ]; then + echo "Generating deepcopy code for ${#input_pkgs[@]} targets" + + kube::codegen::internal::git_find -z \ + ":(glob)${root}"/'**/zz_generated.deepcopy.go' \ + | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/deepcopy-gen" \ + -v "${v}" \ + -O zz_generated.deepcopy \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + "${inputs[@]}" + fi + + # Defaults + # + local input_pkgs=() + while read -r file; do + dir="$(dirname "${file}")" + pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)" + input_pkgs+=("${pkg}") + done < <( + ( kube::codegen::internal::git_grep -l \ + -e '+k8s:defaulter-gen=' \ + ":(glob)${root}"/'**/*.go' \ + || true \ + ) | LC_ALL=C sort -u + ) + + if [ "${#input_pkgs[@]}" != 0 ]; then + echo "Generating defaulter code for ${#input_pkgs[@]} targets" + + kube::codegen::internal::git_find -z \ + ":(glob)${root}"/'**/zz_generated.defaults.go' \ + | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/defaulter-gen" \ + -v "${v}" \ + -O zz_generated.defaults \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + "${inputs[@]}" + fi + + # Conversions + # + local input_pkgs=() + while read -r file; do + dir="$(dirname "${file}")" + pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)" + input_pkgs+=("${pkg}") + done < <( + ( kube::codegen::internal::git_grep -l \ + -e '+k8s:conversion-gen=' \ + ":(glob)${root}"/'**/*.go' \ + || true \ + ) | LC_ALL=C sort -u + ) + + if [ "${#input_pkgs[@]}" != 0 ]; then + echo "Generating conversion code for ${#input_pkgs[@]} targets" + + kube::codegen::internal::git_find -z \ + ":(glob)${root}"/'**/zz_generated.conversion.go' \ + | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/conversion-gen" \ + -v "${v}" \ + -O zz_generated.conversion \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + "${inputs[@]}" + fi +} + +# Generate openapi code +# +# Args: +# --input-pkg-root +# The root package under which to search for files which request openapi to +# be generated. This must be Go package syntax, e.g. "k8s.io/foo/bar". +# +# --output-pkg-root +# The root package under which generated directories and files +# will be placed. This must be go package syntax, e.g. "k8s.io/foo/bar". +# +# --output-base +# The root directory under which to emit code. The concatenation of +# + must be valid. +# +# --openapi-name +# An optional override for the leaf name of the generated directory. +# +# --extra-pkgs +# An optional list of additional packages to be imported during openapi +# generation. The argument must be Go package syntax, e.g. +# "k8s.io/foo/bar". It may be a single value or a comma-delimited list. +# This flag may be repeated. +# +# --report-filename +# An optional path at which to write an API violations report. "-" means +# stdout. +# +# --update-report +# If specified, update the report file in place, rather than diffing it. +# +# --boilerplate +# An optional override for the header file to insert into generated files. +# +function kube::codegen::gen_openapi() { + local in_pkg_root="" + local out_pkg_root="" + local out_base="" # gengo needs the output dir must be $out_base/$out_pkg_root + local openapi_subdir="openapi" + local extra_pkgs=() + local report="/dev/null" + local update_report="" + local boilerplate="${KUBE_CODEGEN_ROOT}/hack/boilerplate.go.txt" + local v="${KUBE_VERBOSE:-0}" + + while [ "$#" -gt 0 ]; do + case "$1" in + "--input-pkg-root") + in_pkg_root="$2" + shift 2 + ;; + "--output-pkg-root") + out_pkg_root="$2" + shift 2 + ;; + "--output-base") + out_base="$2" + shift 2 + ;; + "--openapi-name") + openapi_subdir="$2" + shift 2 + ;; + "--extra-pkgs") + extra_pkgs+=("$2") + shift 2 + ;; + "--report-filename") + report="$2" + shift 2 + ;; + "--update-report") + update_report="true" + shift + ;; + "--boilerplate") + boilerplate="$2" + shift 2 + ;; + *) + echo "unknown argument: $1" >&2 + return 1 + ;; + esac + done + + if [ -z "${in_pkg_root}" ]; then + echo "--input-pkg-root is required" >&2 + return 1 + fi + if [ -z "${out_pkg_root}" ]; then + echo "--output-pkg-root is required" >&2 + return 1 + fi + if [ -z "${out_base}" ]; then + echo "--output-base is required" >&2 + return 1 + fi + + local new_report + new_report="$(mktemp -t "$(basename "$0").api_violations.XXXXXX")" + if [ -n "${update_report}" ]; then + new_report="${report}" + fi + + ( + # To support running this from anywhere, first cd into this directory, + # and then install with forced module mode on and fully qualified name. + cd "${KUBE_CODEGEN_ROOT}" + BINS=( + openapi-gen + ) + # shellcheck disable=2046 # printf word-splitting is intentional + GO111MODULE=on go install $(printf "k8s.io/code-generator/cmd/%s " "${BINS[@]}") + ) + # Go installs in $GOBIN if defined, and $GOPATH/bin otherwise + gobin="${GOBIN:-$(go env GOPATH)/bin}" + + # These tools all assume out-dir == in-dir. + root="${out_base}/${in_pkg_root}" + mkdir -p "${root}" + root="$(cd "${root}" && pwd -P)" + + local input_pkgs=( "${extra_pkgs[@]:+"${extra_pkgs[@]}"}") + while read -r file; do + dir="$(dirname "${file}")" + pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)" + input_pkgs+=("${pkg}") + done < <( + ( kube::codegen::internal::git_grep -l \ + -e '+k8s:openapi-gen=' \ + ":(glob)${root}"/'**/*.go' \ + || true \ + ) | LC_ALL=C sort -u + ) + + if [ "${#input_pkgs[@]}" != 0 ]; then + echo "Generating openapi code for ${#input_pkgs[@]} targets" + + kube::codegen::internal::git_find -z \ + ":(glob)${root}"/'**/zz_generated.openapi.go' \ + | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/openapi-gen" \ + -v "${v}" \ + -O zz_generated.openapi \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + --output-package "${out_pkg_root}/${openapi_subdir}" \ + --report-filename "${new_report}" \ + --input-dirs "k8s.io/apimachinery/pkg/apis/meta/v1" \ + --input-dirs "k8s.io/apimachinery/pkg/runtime" \ + --input-dirs "k8s.io/apimachinery/pkg/version" \ + "${inputs[@]}" + fi + + touch "${report}" # in case it doesn't exist yet + if ! diff -u "${report}" "${new_report}"; then + echo -e "ERROR:" + echo -e "\tAPI rule check failed for ${report}: new reported violations" + echo -e "\tPlease read api/api-rules/README.md" + return 1 + fi +} + +# Generate client code +# +# Args: +# --input-pkg-root +# The root package under which to search for types.go files which request +# clients to be generated. This must be Go package syntax, e.g. +# "k8s.io/foo/bar". +# +# --output-pkg-root +# The root package into which generated directories and files will be +# placed. This must be Go package syntax, e.g. "k8s.io/foo/bar". +# +# --output-base +# The root directory under which to emit code. The concatenation of +# + must be valid. +# +# --boilerplate +# An optional override for the header file to insert into generated files. +# +# --clientset-name +# An optional override for the leaf name of the generated "clientset" directory. +# +# --versioned-name +# An optional override for the leaf name of the generated +# "/versioned" directory. +# +# --with-applyconfig +# Enables generation of applyconfiguration files. +# +# --applyconfig-name +# An optional override for the leaf name of the generated "applyconfiguration" directory. +# +# --with-watch +# Enables generation of listers and informers for APIs which support WATCH. +# +# --listers-name +# An optional override for the leaf name of the generated "listers" directory. +# +# --informers-name +# An optional override for the leaf name of the generated "informers" directory. +# +function kube::codegen::gen_client() { + local in_pkg_root="" + local out_pkg_root="" + local out_base="" # gengo needs the output dir must be $out_base/$out_pkg_root + local clientset_subdir="clientset" + local clientset_versioned_name="versioned" + local applyconfig="false" + local applyconfig_subdir="applyconfiguration" + local watchable="false" + local listers_subdir="listers" + local informers_subdir="informers" + local boilerplate="${KUBE_CODEGEN_ROOT}/hack/boilerplate.go.txt" + local v="${KUBE_VERBOSE:-0}" + + while [ "$#" -gt 0 ]; do + case "$1" in + "--input-pkg-root") + in_pkg_root="$2" + shift 2 + ;; + "--output-pkg-root") + out_pkg_root="$2" + shift 2 + ;; + "--output-base") + out_base="$2" + shift 2 + ;; + "--boilerplate") + boilerplate="$2" + shift 2 + ;; + "--clientset-name") + clientset_subdir="$2" + shift 2 + ;; + "--versioned-name") + clientset_versioned_name="$2" + shift 2 + ;; + "--with-applyconfig") + applyconfig="true" + shift + ;; + "--applyconfig-name") + applyconfig_subdir="$2" + shift 2 + ;; + "--with-watch") + watchable="true" + shift + ;; + "--listers-name") + listers_subdir="$2" + shift 2 + ;; + "--informers-name") + informers_subdir="$2" + shift 2 + ;; + *) + echo "unknown argument: $1" >&2 + return 1 + ;; + esac + done + + if [ -z "${in_pkg_root}" ]; then + echo "--input-pkg-root is required" >&2 + return 1 + fi + if [ -z "${out_pkg_root}" ]; then + echo "--output-pkg-root is required" >&2 + return 1 + fi + if [ -z "${out_base}" ]; then + echo "--output-base is required" >&2 + return 1 + fi + + ( + # To support running this from anywhere, first cd into this directory, + # and then install with forced module mode on and fully qualified name. + cd "${KUBE_CODEGEN_ROOT}" + BINS=( + applyconfiguration-gen + client-gen + informer-gen + lister-gen + ) + # shellcheck disable=2046 # printf word-splitting is intentional + GO111MODULE=on go install $(printf "k8s.io/code-generator/cmd/%s " "${BINS[@]}") + ) + # Go installs in $GOBIN if defined, and $GOPATH/bin otherwise + gobin="${GOBIN:-$(go env GOPATH)/bin}" + + in_root="${out_base}/${in_pkg_root}" + mkdir -p "${in_root}" + in_root="$(cd "${in_root}" && pwd -P)" + out_root="${out_base}/${out_pkg_root}" + mkdir -p "${out_root}" + out_root="$(cd "${out_root}" && pwd -P)" + + local group_versions=() + local input_pkgs=() + while read -r file; do + dir="$(dirname "${file}")" + pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)" + leaf="$(basename "${dir}")" + if grep -E -q '^v[0-9]+((alpha|beta)[0-9]+)?$' <<< "${leaf}"; then + input_pkgs+=("${pkg}") + + dir2="$(dirname "${dir}")" + leaf2="$(basename "${dir2}")" + group_versions+=("${leaf2}/${leaf}") + fi + done < <( + ( kube::codegen::internal::git_grep -l \ + -e '+genclient' \ + ":(glob)${in_root}"/'**/types.go' \ + || true \ + ) | LC_ALL=C sort -u + ) + + if [ "${#group_versions[@]}" == 0 ]; then + return 0 + fi + + applyconfig_pkg="" # set this for later use, iff enabled + if [ "${applyconfig}" == "true" ]; then + applyconfig_pkg="${out_pkg_root}/${applyconfig_subdir}" + + echo "Generating applyconfig code for ${#input_pkgs[@]} targets" + + ( kube::codegen::internal::git_grep -l --null \ + -e '^// Code generated by applyconfiguration-gen. DO NOT EDIT.$' \ + ":(glob)${out_root}/${applyconfig_subdir}"/'**/*.go' \ + || true \ + ) | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/applyconfiguration-gen" \ + -v "${v}" \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + --output-package "${out_pkg_root}/${applyconfig_subdir}" \ + "${inputs[@]}" + fi + + echo "Generating client code for ${#group_versions[@]} targets" + + ( kube::codegen::internal::git_grep -l --null \ + -e '^// Code generated by client-gen. DO NOT EDIT.$' \ + ":(glob)${out_root}/${clientset_subdir}"/'**/*.go' \ + || true \ + ) | xargs -0 rm -f + + local inputs=() + for arg in "${group_versions[@]}"; do + inputs+=("--input" "$arg") + done + "${gobin}/client-gen" \ + -v "${v}" \ + --go-header-file "${boilerplate}" \ + --clientset-name "${clientset_versioned_name}" \ + --input-base "${in_pkg_root}" \ + --output-base "${out_base}" \ + --output-package "${out_pkg_root}/${clientset_subdir}" \ + --apply-configuration-package "${applyconfig_pkg}" \ + "${inputs[@]}" + + if [ "${watchable}" == "true" ]; then + echo "Generating lister code for ${#input_pkgs[@]} targets" + + ( kube::codegen::internal::git_grep -l --null \ + -e '^// Code generated by lister-gen. DO NOT EDIT.$' \ + ":(glob)${out_root}/${listers_subdir}"/'**/*.go' \ + || true \ + ) | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/lister-gen" \ + -v "${v}" \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + --output-package "${out_pkg_root}/${listers_subdir}" \ + "${inputs[@]}" + + echo "Generating informer code for ${#input_pkgs[@]} targets" + + ( kube::codegen::internal::git_grep -l --null \ + -e '^// Code generated by informer-gen. DO NOT EDIT.$' \ + ":(glob)${out_root}/${informers_subdir}"/'**/*.go' \ + || true \ + ) | xargs -0 rm -f + + local inputs=() + for arg in "${input_pkgs[@]}"; do + inputs+=("--input-dirs" "$arg") + done + "${gobin}/informer-gen" \ + -v "${v}" \ + --go-header-file "${boilerplate}" \ + --output-base "${out_base}" \ + --output-package "${out_pkg_root}/${informers_subdir}" \ + --versioned-clientset-package "${out_pkg_root}/${clientset_subdir}/${clientset_versioned_name}" \ + --listers-package "${out_pkg_root}/${listers_subdir}" \ + "${inputs[@]}" + fi +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/namer/tag-override.go b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/namer/tag-override.go new file mode 100644 index 000000000000..fd8c3a8553ce --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/namer/tag-override.go @@ -0,0 +1,58 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +// TagOverrideNamer is a namer which pulls names from a given tag, if specified, +// and otherwise falls back to a different namer. +type TagOverrideNamer struct { + tagName string + fallback namer.Namer +} + +// Name returns the tag value if it exists. It no tag was found the fallback namer will be used +func (n *TagOverrideNamer) Name(t *types.Type) string { + if nameOverride := extractTag(n.tagName, append(t.SecondClosestCommentLines, t.CommentLines...)); nameOverride != "" { + return nameOverride + } + + return n.fallback.Name(t) +} + +// NewTagOverrideNamer creates a namer.Namer which uses the contents of the given tag as +// the name, or falls back to another Namer if the tag is not present. +func NewTagOverrideNamer(tagName string, fallback namer.Namer) namer.Namer { + return &TagOverrideNamer{ + tagName: tagName, + fallback: fallback, + } +} + +// extractTag gets the comment-tags for the key. If the tag did not exist, it +// returns the empty string. +func extractTag(key string, lines []string) string { + val, present := types.ExtractCommentTags("+", lines)[key] + if !present || len(val) < 1 { + return "" + } + + return val[0] +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/build.go b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/build.go new file mode 100644 index 000000000000..53f93afe3493 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/build.go @@ -0,0 +1,60 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + gobuild "go/build" + "path/filepath" + "strings" +) + +// CurrentPackage returns the go package of the current directory, or "" if it cannot +// be derived from the GOPATH. +func CurrentPackage() string { + for _, root := range gobuild.Default.SrcDirs() { + if pkg, ok := hasSubdir(root, "."); ok { + return pkg + } + } + return "" +} + +func hasSubdir(root, dir string) (rel string, ok bool) { + // ensure a tailing separator to properly compare on word-boundaries + const sep = string(filepath.Separator) + root = filepath.Clean(root) + if !strings.HasSuffix(root, sep) { + root += sep + } + + // check whether root dir starts with root + dir = filepath.Clean(dir) + if !strings.HasPrefix(dir, root) { + return "", false + } + + // cut off root + return filepath.ToSlash(dir[len(root):]), true +} + +// Vendorless trims vendor prefix from a package path to make it canonical +func Vendorless(p string) string { + if pos := strings.LastIndex(p, "/vendor/"); pos != -1 { + return p[pos+len("/vendor/"):] + } + return p +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/plural_exceptions.go b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/plural_exceptions.go new file mode 100644 index 000000000000..73c648d5b595 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/pkg/util/plural_exceptions.go @@ -0,0 +1,37 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "fmt" + "strings" +) + +// PluralExceptionListToMapOrDie converts the list in "Type:PluralType" to map[string]string. +// This is used for pluralizer. +// If the format is wrong, this function will panic. +func PluralExceptionListToMapOrDie(pluralExceptions []string) map[string]string { + pluralExceptionMap := make(map[string]string, len(pluralExceptions)) + for i := range pluralExceptions { + parts := strings.Split(pluralExceptions[i], ":") + if len(parts) != 2 { + panic(fmt.Sprintf("invalid plural exception definition: %s", pluralExceptions[i])) + } + pluralExceptionMap[parts[0]] = parts[1] + } + return pluralExceptionMap +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/LICENSE b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/LICENSE new file mode 100644 index 000000000000..6a66aea5eafe --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/PATENTS b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/PATENTS new file mode 100644 index 000000000000..733099041f84 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/reflect/type.go b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/reflect/type.go new file mode 100644 index 000000000000..67957ee33e9c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/third_party/forked/golang/reflect/type.go @@ -0,0 +1,91 @@ +//This package is copied from Go library reflect/type.go. +//The struct tag library provides no way to extract the list of struct tags, only +//a specific tag +package reflect + +import ( + "fmt" + + "strconv" + "strings" +) + +type StructTag struct { + Name string + Value string +} + +func (t StructTag) String() string { + return fmt.Sprintf("%s:%q", t.Name, t.Value) +} + +type StructTags []StructTag + +func (tags StructTags) String() string { + s := make([]string, 0, len(tags)) + for _, tag := range tags { + s = append(s, tag.String()) + } + return "`" + strings.Join(s, " ") + "`" +} + +func (tags StructTags) Has(name string) bool { + for i := range tags { + if tags[i].Name == name { + return true + } + } + return false +} + +// ParseStructTags returns the full set of fields in a struct tag in the order they appear in +// the struct tag. +func ParseStructTags(tag string) (StructTags, error) { + tags := StructTags{} + for tag != "" { + // Skip leading space. + i := 0 + for i < len(tag) && tag[i] == ' ' { + i++ + } + tag = tag[i:] + if tag == "" { + break + } + + // Scan to colon. A space, a quote or a control character is a syntax error. + // Strictly speaking, control chars include the range [0x7f, 0x9f], not just + // [0x00, 0x1f], but in practice, we ignore the multi-byte control characters + // as it is simpler to inspect the tag's bytes than the tag's runes. + i = 0 + for i < len(tag) && tag[i] > ' ' && tag[i] != ':' && tag[i] != '"' && tag[i] != 0x7f { + i++ + } + if i == 0 || i+1 >= len(tag) || tag[i] != ':' || tag[i+1] != '"' { + break + } + name := string(tag[:i]) + tag = tag[i+1:] + + // Scan quoted string to find value. + i = 1 + for i < len(tag) && tag[i] != '"' { + if tag[i] == '\\' { + i++ + } + i++ + } + if i >= len(tag) { + break + } + qvalue := string(tag[:i+1]) + tag = tag[i+1:] + + value, err := strconv.Unquote(qvalue) + if err != nil { + return nil, err + } + tags = append(tags, StructTag{Name: name, Value: value}) + } + return tags, nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/tools.go b/cluster-autoscaler/vendor/k8s.io/code-generator/tools.go new file mode 100644 index 000000000000..90b942b07036 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/tools.go @@ -0,0 +1,37 @@ +//go:build tools +// +build tools + +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package contains code generation utilities +// This package imports things required by build scripts, to force `go mod` to see them as dependencies +package codegenerator + +import ( + _ "k8s.io/code-generator/cmd/applyconfiguration-gen" + _ "k8s.io/code-generator/cmd/client-gen" + _ "k8s.io/code-generator/cmd/conversion-gen" + _ "k8s.io/code-generator/cmd/deepcopy-gen" + _ "k8s.io/code-generator/cmd/defaulter-gen" + _ "k8s.io/code-generator/cmd/go-to-protobuf" + _ "k8s.io/code-generator/cmd/import-boss" + _ "k8s.io/code-generator/cmd/informer-gen" + _ "k8s.io/code-generator/cmd/lister-gen" + _ "k8s.io/code-generator/cmd/openapi-gen" + _ "k8s.io/code-generator/cmd/register-gen" + _ "k8s.io/code-generator/cmd/set-gen" +) diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/LICENSE b/cluster-autoscaler/vendor/k8s.io/gengo/LICENSE new file mode 100644 index 000000000000..00b2401109fd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2014 The Kubernetes Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go b/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go new file mode 100644 index 000000000000..93d863f0e20d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go @@ -0,0 +1,218 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package args has common command-line flags for generation programs. +package args + +import ( + "bytes" + goflag "flag" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "strconv" + "strings" + "time" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/parser" + "k8s.io/gengo/types" + + "github.com/spf13/pflag" +) + +// Default returns a defaulted GeneratorArgs. You may change the defaults +// before calling AddFlags. +func Default() *GeneratorArgs { + return &GeneratorArgs{ + OutputBase: DefaultSourceTree(), + GoHeaderFilePath: filepath.Join(DefaultSourceTree(), "k8s.io/gengo/boilerplate/boilerplate.go.txt"), + GeneratedBuildTag: "ignore_autogenerated", + GeneratedByCommentTemplate: "// Code generated by GENERATOR_NAME. DO NOT EDIT.", + defaultCommandLineFlags: true, + } +} + +// GeneratorArgs has arguments that are passed to generators. +type GeneratorArgs struct { + // Which directories to parse. + InputDirs []string + + // Source tree to write results to. + OutputBase string + + // Package path within the source tree. + OutputPackagePath string + + // Output file name. + OutputFileBaseName string + + // Where to get copyright header text. + GoHeaderFilePath string + + // If GeneratedByCommentTemplate is set, generate a "Code generated by" comment + // below the bloilerplate, of the format defined by this string. + // Any instances of "GENERATOR_NAME" will be replaced with the name of the code generator. + GeneratedByCommentTemplate string + + // If true, only verify, don't write anything. + VerifyOnly bool + + // If true, include *_test.go files + IncludeTestFiles bool + + // GeneratedBuildTag is the tag used to identify code generated by execution + // of this type. Each generator should use a different tag, and different + // groups of generators (external API that depends on Kube generations) should + // keep tags distinct as well. + GeneratedBuildTag string + + // Any custom arguments go here + CustomArgs interface{} + + // If specified, trim the prefix from OutputPackagePath before writing files. + TrimPathPrefix string + + // Whether to use default command line flags + defaultCommandLineFlags bool +} + +// WithoutDefaultFlagParsing disables implicit addition of command line flags and parsing. +func (g *GeneratorArgs) WithoutDefaultFlagParsing() *GeneratorArgs { + g.defaultCommandLineFlags = false + return g +} + +func (g *GeneratorArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringSliceVarP(&g.InputDirs, "input-dirs", "i", g.InputDirs, "Comma-separated list of import paths to get input types from.") + fs.StringVarP(&g.OutputBase, "output-base", "o", g.OutputBase, "Output base; defaults to $GOPATH/src/ or ./ if $GOPATH is not set.") + fs.StringVarP(&g.OutputPackagePath, "output-package", "p", g.OutputPackagePath, "Base package path.") + fs.StringVarP(&g.OutputFileBaseName, "output-file-base", "O", g.OutputFileBaseName, "Base name (without .go suffix) for output files.") + fs.StringVarP(&g.GoHeaderFilePath, "go-header-file", "h", g.GoHeaderFilePath, "File containing boilerplate header text. The string YEAR will be replaced with the current 4-digit year.") + fs.BoolVar(&g.VerifyOnly, "verify-only", g.VerifyOnly, "If true, only verify existing output, do not write anything.") + fs.StringVar(&g.GeneratedBuildTag, "build-tag", g.GeneratedBuildTag, "A Go build tag to use to identify files generated by this command. Should be unique.") + fs.StringVar(&g.TrimPathPrefix, "trim-path-prefix", g.TrimPathPrefix, "If set, trim the specified prefix from --output-package when generating files.") +} + +// LoadGoBoilerplate loads the boilerplate file passed to --go-header-file. +func (g *GeneratorArgs) LoadGoBoilerplate() ([]byte, error) { + b, err := ioutil.ReadFile(g.GoHeaderFilePath) + if err != nil { + return nil, err + } + b = bytes.Replace(b, []byte("YEAR"), []byte(strconv.Itoa(time.Now().UTC().Year())), -1) + + if g.GeneratedByCommentTemplate != "" { + if len(b) != 0 { + b = append(b, byte('\n')) + } + generatorName := path.Base(os.Args[0]) + generatedByComment := strings.Replace(g.GeneratedByCommentTemplate, "GENERATOR_NAME", generatorName, -1) + s := fmt.Sprintf("%s\n\n", generatedByComment) + b = append(b, []byte(s)...) + } + return b, nil +} + +// NewBuilder makes a new parser.Builder and populates it with the input +// directories. +func (g *GeneratorArgs) NewBuilder() (*parser.Builder, error) { + b := parser.New() + + // flag for including *_test.go + b.IncludeTestFiles = g.IncludeTestFiles + + // Ignore all auto-generated files. + b.AddBuildTags(g.GeneratedBuildTag) + + for _, d := range g.InputDirs { + var err error + if strings.HasSuffix(d, "/...") { + err = b.AddDirRecursive(strings.TrimSuffix(d, "/...")) + } else { + err = b.AddDir(d) + } + if err != nil { + return nil, fmt.Errorf("unable to add directory %q: %v", d, err) + } + } + return b, nil +} + +// InputIncludes returns true if the given package is a (sub) package of one of +// the InputDirs. +func (g *GeneratorArgs) InputIncludes(p *types.Package) bool { + for _, dir := range g.InputDirs { + d := dir + if strings.HasSuffix(d, "...") { + d = strings.TrimSuffix(d, "...") + } + if strings.HasPrefix(d, "./vendor/") { + d = strings.TrimPrefix(d, "./vendor/") + } + if strings.HasPrefix(p.Path, d) { + return true + } + } + return false +} + +// DefaultSourceTree returns the /src directory of the first entry in $GOPATH. +// If $GOPATH is empty, it returns "./". Useful as a default output location. +func DefaultSourceTree() string { + paths := strings.Split(os.Getenv("GOPATH"), string(filepath.ListSeparator)) + if len(paths) > 0 && len(paths[0]) > 0 { + return filepath.Join(paths[0], "src") + } + return "./" +} + +// Execute implements main(). +// If you don't need any non-default behavior, use as: +// args.Default().Execute(...) +func (g *GeneratorArgs) Execute(nameSystems namer.NameSystems, defaultSystem string, pkgs func(*generator.Context, *GeneratorArgs) generator.Packages) error { + if g.defaultCommandLineFlags { + g.AddFlags(pflag.CommandLine) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + pflag.Parse() + } + + b, err := g.NewBuilder() + if err != nil { + return fmt.Errorf("Failed making a parser: %v", err) + } + + // pass through the flag on whether to include *_test.go files + b.IncludeTestFiles = g.IncludeTestFiles + + c, err := generator.NewContext(b, nameSystems, defaultSystem) + if err != nil { + return fmt.Errorf("Failed making a context: %v", err) + } + + c.TrimPathPrefix = g.TrimPathPrefix + + c.Verify = g.VerifyOnly + packages := pkgs(c, g) + if err := c.ExecutePackages(g.OutputBase, packages); err != nil { + return fmt.Errorf("Failed executing generator: %v", err) + } + + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go new file mode 100644 index 000000000000..03f9109c73a1 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go @@ -0,0 +1,929 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "io" + "path/filepath" + "sort" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/examples/set-gen/sets" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// CustomArgs is used tby the go2idl framework to pass args specific to this +// generator. +type CustomArgs struct { + BoundingDirs []string // Only deal with types rooted under these dirs. +} + +// This is the comment tag that carries parameters for deep-copy generation. +const ( + tagEnabledName = "k8s:deepcopy-gen" + interfacesTagName = tagEnabledName + ":interfaces" + interfacesNonPointerTagName = tagEnabledName + ":nonpointer-interfaces" // attach the DeepCopy methods to the +) + +// Known values for the comment tag. +const tagValuePackage = "package" + +// enabledTagValue holds parameters from a tagName tag. +type enabledTagValue struct { + value string + register bool +} + +func extractEnabledTypeTag(t *types.Type) *enabledTagValue { + comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) + return extractEnabledTag(comments) +} + +func extractEnabledTag(comments []string) *enabledTagValue { + tagVals := types.ExtractCommentTags("+", comments)[tagEnabledName] + if tagVals == nil { + // No match for the tag. + return nil + } + // If there are multiple values, abort. + if len(tagVals) > 1 { + klog.Fatalf("Found %d %s tags: %q", len(tagVals), tagEnabledName, tagVals) + } + + // If we got here we are returning something. + tag := &enabledTagValue{} + + // Get the primary value. + parts := strings.Split(tagVals[0], ",") + if len(parts) >= 1 { + tag.value = parts[0] + } + + // Parse extra arguments. + parts = parts[1:] + for i := range parts { + kv := strings.SplitN(parts[i], "=", 2) + k := kv[0] + v := "" + if len(kv) == 2 { + v = kv[1] + } + switch k { + case "register": + if v != "false" { + tag.register = true + } + default: + klog.Fatalf("Unsupported %s param: %q", tagEnabledName, parts[i]) + } + } + return tag +} + +// TODO: This is created only to reduce number of changes in a single PR. +// Remove it and use PublicNamer instead. +func deepCopyNamer() *namer.NameStrategy { + return &namer.NameStrategy{ + Join: func(pre string, in []string, post string) string { + return strings.Join(in, "_") + }, + PrependPackageNames: 1, + } +} + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "public": deepCopyNamer(), + "raw": namer.NewRawNamer("", nil), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + inputs := sets.NewString(context.Inputs...) + packages := generator.Packages{} + header := append([]byte(fmt.Sprintf("//go:build !%s\n// +build !%s\n\n", arguments.GeneratedBuildTag, arguments.GeneratedBuildTag)), boilerplate...) + + boundingDirs := []string{} + if customArgs, ok := arguments.CustomArgs.(*CustomArgs); ok { + if customArgs.BoundingDirs == nil { + customArgs.BoundingDirs = context.Inputs + } + for i := range customArgs.BoundingDirs { + // Strip any trailing slashes - they are not exactly "correct" but + // this is friendlier. + boundingDirs = append(boundingDirs, strings.TrimRight(customArgs.BoundingDirs[i], "/")) + } + } + + for i := range inputs { + klog.V(5).Infof("Considering pkg %q", i) + pkg := context.Universe[i] + if pkg == nil { + // If the input had no Go files, for example. + continue + } + + ptag := extractEnabledTag(pkg.Comments) + ptagValue := "" + ptagRegister := false + if ptag != nil { + ptagValue = ptag.value + if ptagValue != tagValuePackage { + klog.Fatalf("Package %v: unsupported %s value: %q", i, tagEnabledName, ptagValue) + } + ptagRegister = ptag.register + klog.V(5).Infof(" tag.value: %q, tag.register: %t", ptagValue, ptagRegister) + } else { + klog.V(5).Infof(" no tag") + } + + // If the pkg-scoped tag says to generate, we can skip scanning types. + pkgNeedsGeneration := (ptagValue == tagValuePackage) + if !pkgNeedsGeneration { + // If the pkg-scoped tag did not exist, scan all types for one that + // explicitly wants generation. + for _, t := range pkg.Types { + klog.V(5).Infof(" considering type %q", t.Name.String()) + ttag := extractEnabledTypeTag(t) + if ttag != nil && ttag.value == "true" { + klog.V(5).Infof(" tag=true") + if !copyableType(t) { + klog.Fatalf("Type %v requests deepcopy generation but is not copyable", t) + } + pkgNeedsGeneration = true + break + } + } + } + + if pkgNeedsGeneration { + klog.V(3).Infof("Package %q needs generation", i) + path := pkg.Path + // if the source path is within a /vendor/ directory (for example, + // k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1), allow + // generation to output to the proper relative path (under vendor). + // Otherwise, the generator will create the file in the wrong location + // in the output directory. + // TODO: build a more fundamental concept in gengo for dealing with modifications + // to vendored packages. + if strings.HasPrefix(pkg.SourcePath, arguments.OutputBase) { + expandedPath := strings.TrimPrefix(pkg.SourcePath, arguments.OutputBase) + if strings.Contains(expandedPath, "/vendor/") { + path = expandedPath + } + } + packages = append(packages, + &generator.DefaultPackage{ + PackageName: strings.Split(filepath.Base(pkg.Path), ".")[0], + PackagePath: path, + HeaderText: header, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{ + NewGenDeepCopy(arguments.OutputFileBaseName, pkg.Path, boundingDirs, (ptagValue == tagValuePackage), ptagRegister), + } + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return t.Name.Package == pkg.Path + }, + }) + } + } + return packages +} + +// genDeepCopy produces a file with autogenerated deep-copy functions. +type genDeepCopy struct { + generator.DefaultGen + targetPackage string + boundingDirs []string + allTypes bool + registerTypes bool + imports namer.ImportTracker + typesForInit []*types.Type +} + +func NewGenDeepCopy(sanitizedName, targetPackage string, boundingDirs []string, allTypes, registerTypes bool) generator.Generator { + return &genDeepCopy{ + DefaultGen: generator.DefaultGen{ + OptionalName: sanitizedName, + }, + targetPackage: targetPackage, + boundingDirs: boundingDirs, + allTypes: allTypes, + registerTypes: registerTypes, + imports: generator.NewImportTracker(), + typesForInit: make([]*types.Type, 0), + } +} + +func (g *genDeepCopy) Namers(c *generator.Context) namer.NameSystems { + // Have the raw namer for this file track what it imports. + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.targetPackage, g.imports), + } +} + +func (g *genDeepCopy) Filter(c *generator.Context, t *types.Type) bool { + // Filter out types not being processed or not copyable within the package. + enabled := g.allTypes + if !enabled { + ttag := extractEnabledTypeTag(t) + if ttag != nil && ttag.value == "true" { + enabled = true + } + } + if !enabled { + return false + } + if !copyableType(t) { + klog.V(2).Infof("Type %v is not copyable", t) + return false + } + klog.V(4).Infof("Type %v is copyable", t) + g.typesForInit = append(g.typesForInit, t) + return true +} + +func (g *genDeepCopy) copyableAndInBounds(t *types.Type) bool { + if !copyableType(t) { + return false + } + // Only packages within the restricted range can be processed. + if !isRootedUnder(t.Name.Package, g.boundingDirs) { + return false + } + return true +} + +// deepCopyMethod returns the signature of a DeepCopy() method, nil or an error +// if the type does not match. This allows more efficient deep copy +// implementations to be defined by the type's author. The correct signature +// for a type T is: +// func (t T) DeepCopy() T +// or: +// func (t *T) DeepCopy() *T +func deepCopyMethod(t *types.Type) (*types.Signature, error) { + f, found := t.Methods["DeepCopy"] + if !found { + return nil, nil + } + if len(f.Signature.Parameters) != 0 { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected no parameters", t) + } + if len(f.Signature.Results) != 1 { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected exactly one result", t) + } + + ptrResult := f.Signature.Results[0].Kind == types.Pointer && f.Signature.Results[0].Elem.Name == t.Name + nonPtrResult := f.Signature.Results[0].Name == t.Name + + if !ptrResult && !nonPtrResult { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected to return %s or *%s", t, t.Name.Name, t.Name.Name) + } + + ptrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Kind == types.Pointer && f.Signature.Receiver.Elem.Name == t.Name + nonPtrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Name == t.Name + + if ptrRcvr && !ptrResult { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a *%s result for a *%s receiver", t, t.Name.Name, t.Name.Name) + } + if nonPtrRcvr && !nonPtrResult { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a %s result for a %s receiver", t, t.Name.Name, t.Name.Name) + } + + return f.Signature, nil +} + +// deepCopyMethodOrDie returns the signatrue of a DeepCopy method, nil or calls klog.Fatalf +// if the type does not match. +func deepCopyMethodOrDie(t *types.Type) *types.Signature { + ret, err := deepCopyMethod(t) + if err != nil { + klog.Fatal(err) + } + return ret +} + +// deepCopyIntoMethod returns the signature of a DeepCopyInto() method, nil or an error +// if the type is wrong. DeepCopyInto allows more efficient deep copy +// implementations to be defined by the type's author. The correct signature +// for a type T is: +// func (t T) DeepCopyInto(t *T) +// or: +// func (t *T) DeepCopyInto(t *T) +func deepCopyIntoMethod(t *types.Type) (*types.Signature, error) { + f, found := t.Methods["DeepCopyInto"] + if !found { + return nil, nil + } + if len(f.Signature.Parameters) != 1 { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected exactly one parameter", t) + } + if len(f.Signature.Results) != 0 { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected no result type", t) + } + + ptrParam := f.Signature.Parameters[0].Kind == types.Pointer && f.Signature.Parameters[0].Elem.Name == t.Name + + if !ptrParam { + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected parameter of type *%s", t, t.Name.Name) + } + + ptrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Kind == types.Pointer && f.Signature.Receiver.Elem.Name == t.Name + nonPtrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Name == t.Name + + if !ptrRcvr && !nonPtrRcvr { + // this should never happen + return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a receiver of type %s or *%s", t, t.Name.Name, t.Name.Name) + } + + return f.Signature, nil +} + +// deepCopyIntoMethodOrDie returns the signature of a DeepCopyInto() method, nil or calls klog.Fatalf +// if the type is wrong. +func deepCopyIntoMethodOrDie(t *types.Type) *types.Signature { + ret, err := deepCopyIntoMethod(t) + if err != nil { + klog.Fatal(err) + } + return ret +} + +func isRootedUnder(pkg string, roots []string) bool { + // Add trailing / to avoid false matches, e.g. foo/bar vs foo/barn. This + // assumes that bounding dirs do not have trailing slashes. + pkg = pkg + "/" + for _, root := range roots { + if strings.HasPrefix(pkg, root+"/") { + return true + } + } + return false +} + +func copyableType(t *types.Type) bool { + // If the type opts out of copy-generation, stop. + ttag := extractEnabledTypeTag(t) + if ttag != nil && ttag.value == "false" { + return false + } + + // Filter out private types. + if namer.IsPrivateGoName(t.Name.Name) { + return false + } + + if t.Kind == types.Alias { + // if the underlying built-in is not deepcopy-able, deepcopy is opt-in through definition of custom methods. + // Note that aliases of builtins, maps, slices can have deepcopy methods. + if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { + return true + } else { + return t.Underlying.Kind != types.Builtin || copyableType(t.Underlying) + } + } + + if t.Kind != types.Struct { + return false + } + + return true +} + +func underlyingType(t *types.Type) *types.Type { + for t.Kind == types.Alias { + t = t.Underlying + } + return t +} + +func (g *genDeepCopy) isOtherPackage(pkg string) bool { + if pkg == g.targetPackage { + return false + } + if strings.HasSuffix(pkg, "\""+g.targetPackage+"\"") { + return false + } + return true +} + +func (g *genDeepCopy) Imports(c *generator.Context) (imports []string) { + importLines := []string{} + for _, singleImport := range g.imports.ImportLines() { + if g.isOtherPackage(singleImport) { + importLines = append(importLines, singleImport) + } + } + return importLines +} + +func argsFromType(ts ...*types.Type) generator.Args { + a := generator.Args{ + "type": ts[0], + } + for i, t := range ts { + a[fmt.Sprintf("type%d", i+1)] = t + } + return a +} + +func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error { + return nil +} + +func (g *genDeepCopy) needsGeneration(t *types.Type) bool { + tag := extractEnabledTypeTag(t) + tv := "" + if tag != nil { + tv = tag.value + if tv != "true" && tv != "false" { + klog.Fatalf("Type %v: unsupported %s value: %q", t, tagEnabledName, tag.value) + } + } + if g.allTypes && tv == "false" { + // The whole package is being generated, but this type has opted out. + klog.V(5).Infof("Not generating for type %v because type opted out", t) + return false + } + if !g.allTypes && tv != "true" { + // The whole package is NOT being generated, and this type has NOT opted in. + klog.V(5).Infof("Not generating for type %v because type did not opt in", t) + return false + } + return true +} + +func extractInterfacesTag(t *types.Type) []string { + var result []string + comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) + values := types.ExtractCommentTags("+", comments)[interfacesTagName] + for _, v := range values { + if len(v) == 0 { + continue + } + intfs := strings.Split(v, ",") + for _, intf := range intfs { + if intf == "" { + continue + } + result = append(result, intf) + } + } + return result +} + +func extractNonPointerInterfaces(t *types.Type) (bool, error) { + comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) + values := types.ExtractCommentTags("+", comments)[interfacesNonPointerTagName] + if len(values) == 0 { + return false, nil + } + result := values[0] == "true" + for _, v := range values { + if v == "true" != result { + return false, fmt.Errorf("contradicting %v value %q found to previous value %v", interfacesNonPointerTagName, v, result) + } + } + return result, nil +} + +func (g *genDeepCopy) deepCopyableInterfacesInner(c *generator.Context, t *types.Type) ([]*types.Type, error) { + if t.Kind != types.Struct { + return nil, nil + } + + intfs := extractInterfacesTag(t) + + var ts []*types.Type + for _, intf := range intfs { + t := types.ParseFullyQualifiedName(intf) + err := c.AddDir(t.Package) + if err != nil { + return nil, err + } + intfT := c.Universe.Type(t) + if intfT == nil { + return nil, fmt.Errorf("unknown type %q in %s tag of type %s", intf, interfacesTagName, intfT) + } + if intfT.Kind != types.Interface { + return nil, fmt.Errorf("type %q in %s tag of type %s is not an interface, but: %q", intf, interfacesTagName, t, intfT.Kind) + } + g.imports.AddType(intfT) + ts = append(ts, intfT) + } + + return ts, nil +} + +// deepCopyableInterfaces returns the interface types to implement and whether they apply to a non-pointer receiver. +func (g *genDeepCopy) deepCopyableInterfaces(c *generator.Context, t *types.Type) ([]*types.Type, bool, error) { + ts, err := g.deepCopyableInterfacesInner(c, t) + if err != nil { + return nil, false, err + } + + set := map[string]*types.Type{} + for _, t := range ts { + set[t.String()] = t + } + + result := []*types.Type{} + for _, t := range set { + result = append(result, t) + } + + TypeSlice(result).Sort() // we need a stable sorting because it determines the order in generation + + nonPointerReceiver, err := extractNonPointerInterfaces(t) + if err != nil { + return nil, false, err + } + + return result, nonPointerReceiver, nil +} + +type TypeSlice []*types.Type + +func (s TypeSlice) Len() int { return len(s) } +func (s TypeSlice) Less(i, j int) bool { return s[i].String() < s[j].String() } +func (s TypeSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s TypeSlice) Sort() { sort.Sort(s) } + +func (g *genDeepCopy) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + if !g.needsGeneration(t) { + return nil + } + klog.V(5).Infof("Generating deepcopy function for type %v", t) + + sw := generator.NewSnippetWriter(w, c, "$", "$") + args := argsFromType(t) + + if deepCopyIntoMethodOrDie(t) == nil { + sw.Do("// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\n", args) + if isReference(t) { + sw.Do("func (in $.type|raw$) DeepCopyInto(out *$.type|raw$) {\n", args) + sw.Do("{in:=&in\n", nil) + } else { + sw.Do("func (in *$.type|raw$) DeepCopyInto(out *$.type|raw$) {\n", args) + } + if deepCopyMethodOrDie(t) != nil { + if t.Methods["DeepCopy"].Signature.Receiver.Kind == types.Pointer { + sw.Do("clone := in.DeepCopy()\n", nil) + sw.Do("*out = *clone\n", nil) + } else { + sw.Do("*out = in.DeepCopy()\n", nil) + } + sw.Do("return\n", nil) + } else { + g.generateFor(t, sw) + sw.Do("return\n", nil) + } + if isReference(t) { + sw.Do("}\n", nil) + } + sw.Do("}\n\n", nil) + } + + if deepCopyMethodOrDie(t) == nil { + sw.Do("// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new $.type|raw$.\n", args) + if isReference(t) { + sw.Do("func (in $.type|raw$) DeepCopy() $.type|raw$ {\n", args) + } else { + sw.Do("func (in *$.type|raw$) DeepCopy() *$.type|raw$ {\n", args) + } + sw.Do("if in == nil { return nil }\n", nil) + sw.Do("out := new($.type|raw$)\n", args) + sw.Do("in.DeepCopyInto(out)\n", nil) + if isReference(t) { + sw.Do("return *out\n", nil) + } else { + sw.Do("return out\n", nil) + } + sw.Do("}\n\n", nil) + } + + intfs, nonPointerReceiver, err := g.deepCopyableInterfaces(c, t) + if err != nil { + return err + } + for _, intf := range intfs { + sw.Do(fmt.Sprintf("// DeepCopy%s is an autogenerated deepcopy function, copying the receiver, creating a new $.type2|raw$.\n", intf.Name.Name), argsFromType(t, intf)) + if nonPointerReceiver { + sw.Do(fmt.Sprintf("func (in $.type|raw$) DeepCopy%s() $.type2|raw$ {\n", intf.Name.Name), argsFromType(t, intf)) + sw.Do("return *in.DeepCopy()", nil) + sw.Do("}\n\n", nil) + } else { + sw.Do(fmt.Sprintf("func (in *$.type|raw$) DeepCopy%s() $.type2|raw$ {\n", intf.Name.Name), argsFromType(t, intf)) + sw.Do("if c := in.DeepCopy(); c != nil {\n", nil) + sw.Do("return c\n", nil) + sw.Do("}\n", nil) + sw.Do("return nil\n", nil) + sw.Do("}\n\n", nil) + } + } + + return sw.Error() +} + +// isReference return true for pointer, maps, slices and aliases of those. +func isReference(t *types.Type) bool { + if t.Kind == types.Pointer || t.Kind == types.Map || t.Kind == types.Slice { + return true + } + return t.Kind == types.Alias && isReference(underlyingType(t)) +} + +// we use the system of shadowing 'in' and 'out' so that the same code is valid +// at any nesting level. This makes the autogenerator easy to understand, and +// the compiler shouldn't care. +func (g *genDeepCopy) generateFor(t *types.Type, sw *generator.SnippetWriter) { + // derive inner types if t is an alias. We call the do* methods below with the alias type. + // basic rule: generate according to inner type, but construct objects with the alias type. + ut := underlyingType(t) + + var f func(*types.Type, *generator.SnippetWriter) + switch ut.Kind { + case types.Builtin: + f = g.doBuiltin + case types.Map: + f = g.doMap + case types.Slice: + f = g.doSlice + case types.Struct: + f = g.doStruct + case types.Pointer: + f = g.doPointer + case types.Interface: + // interfaces are handled in-line in the other cases + klog.Fatalf("Hit an interface type %v. This should never happen.", t) + case types.Alias: + // can never happen because we branch on the underlying type which is never an alias + klog.Fatalf("Hit an alias type %v. This should never happen.", t) + default: + klog.Fatalf("Hit an unsupported type %v.", t) + } + f(t, sw) +} + +// doBuiltin generates code for a builtin or an alias to a builtin. The generated code is +// is the same for both cases, i.e. it's the code for the underlying type. +func (g *genDeepCopy) doBuiltin(t *types.Type, sw *generator.SnippetWriter) { + if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { + sw.Do("*out = in.DeepCopy()\n", nil) + return + } + + sw.Do("*out = *in\n", nil) +} + +// doMap generates code for a map or an alias to a map. The generated code is +// is the same for both cases, i.e. it's the code for the underlying type. +func (g *genDeepCopy) doMap(t *types.Type, sw *generator.SnippetWriter) { + ut := underlyingType(t) + uet := underlyingType(ut.Elem) + + if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { + sw.Do("*out = in.DeepCopy()\n", nil) + return + } + + if !ut.Key.IsAssignable() { + klog.Fatalf("Hit an unsupported type %v for: %v", uet, t) + } + + sw.Do("*out = make($.|raw$, len(*in))\n", t) + sw.Do("for key, val := range *in {\n", nil) + dc, dci := deepCopyMethodOrDie(ut.Elem), deepCopyIntoMethodOrDie(ut.Elem) + switch { + case dc != nil || dci != nil: + // Note: a DeepCopy exists because it is added if DeepCopyInto is manually defined + leftPointer := ut.Elem.Kind == types.Pointer + rightPointer := !isReference(ut.Elem) + if dc != nil { + rightPointer = dc.Results[0].Kind == types.Pointer + } + if leftPointer == rightPointer { + sw.Do("(*out)[key] = val.DeepCopy()\n", nil) + } else if leftPointer { + sw.Do("x := val.DeepCopy()\n", nil) + sw.Do("(*out)[key] = &x\n", nil) + } else { + sw.Do("(*out)[key] = *val.DeepCopy()\n", nil) + } + case ut.Elem.IsAnonymousStruct(): // not uet here because it needs type cast + sw.Do("(*out)[key] = val\n", nil) + case uet.IsAssignable(): + sw.Do("(*out)[key] = val\n", nil) + case uet.Kind == types.Interface: + // Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function + if uet.Name.Name == "interface{}" { + klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy as one of the methods.", uet.Name.Name) + } + sw.Do("if val == nil {(*out)[key]=nil} else {\n", nil) + // Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it + // as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang + // parser does not give us the underlying interface name. So we cannot do any better. + sw.Do(fmt.Sprintf("(*out)[key] = val.DeepCopy%s()\n", uet.Name.Name), nil) + sw.Do("}\n", nil) + case uet.Kind == types.Slice || uet.Kind == types.Map || uet.Kind == types.Pointer: + sw.Do("var outVal $.|raw$\n", uet) + sw.Do("if val == nil { (*out)[key] = nil } else {\n", nil) + sw.Do("in, out := &val, &outVal\n", uet) + g.generateFor(ut.Elem, sw) + sw.Do("}\n", nil) + sw.Do("(*out)[key] = outVal\n", nil) + case uet.Kind == types.Struct: + sw.Do("(*out)[key] = *val.DeepCopy()\n", uet) + default: + klog.Fatalf("Hit an unsupported type %v for %v", uet, t) + } + sw.Do("}\n", nil) +} + +// doSlice generates code for a slice or an alias to a slice. The generated code is +// is the same for both cases, i.e. it's the code for the underlying type. +func (g *genDeepCopy) doSlice(t *types.Type, sw *generator.SnippetWriter) { + ut := underlyingType(t) + uet := underlyingType(ut.Elem) + + if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { + sw.Do("*out = in.DeepCopy()\n", nil) + return + } + + sw.Do("*out = make($.|raw$, len(*in))\n", t) + if deepCopyMethodOrDie(ut.Elem) != nil || deepCopyIntoMethodOrDie(ut.Elem) != nil { + sw.Do("for i := range *in {\n", nil) + // Note: a DeepCopyInto exists because it is added if DeepCopy is manually defined + sw.Do("(*in)[i].DeepCopyInto(&(*out)[i])\n", nil) + sw.Do("}\n", nil) + } else if uet.Kind == types.Builtin || uet.IsAssignable() { + sw.Do("copy(*out, *in)\n", nil) + } else { + sw.Do("for i := range *in {\n", nil) + if uet.Kind == types.Slice || uet.Kind == types.Map || uet.Kind == types.Pointer || deepCopyMethodOrDie(ut.Elem) != nil || deepCopyIntoMethodOrDie(ut.Elem) != nil { + sw.Do("if (*in)[i] != nil {\n", nil) + sw.Do("in, out := &(*in)[i], &(*out)[i]\n", nil) + g.generateFor(ut.Elem, sw) + sw.Do("}\n", nil) + } else if uet.Kind == types.Interface { + // Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function + if uet.Name.Name == "interface{}" { + klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy as one of the methods.", uet.Name.Name) + } + sw.Do("if (*in)[i] != nil {\n", nil) + // Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it + // as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang + // parser does not give us the underlying interface name. So we cannot do any better. + sw.Do(fmt.Sprintf("(*out)[i] = (*in)[i].DeepCopy%s()\n", uet.Name.Name), nil) + sw.Do("}\n", nil) + } else if uet.Kind == types.Struct { + sw.Do("(*in)[i].DeepCopyInto(&(*out)[i])\n", nil) + } else { + klog.Fatalf("Hit an unsupported type %v for %v", uet, t) + } + sw.Do("}\n", nil) + } +} + +// doStruct generates code for a struct or an alias to a struct. The generated code is +// is the same for both cases, i.e. it's the code for the underlying type. +func (g *genDeepCopy) doStruct(t *types.Type, sw *generator.SnippetWriter) { + ut := underlyingType(t) + + if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { + sw.Do("*out = in.DeepCopy()\n", nil) + return + } + + // Simple copy covers a lot of cases. + sw.Do("*out = *in\n", nil) + + // Now fix-up fields as needed. + for _, m := range ut.Members { + ft := m.Type + uft := underlyingType(ft) + + args := generator.Args{ + "type": ft, + "kind": ft.Kind, + "name": m.Name, + } + dc, dci := deepCopyMethodOrDie(ft), deepCopyIntoMethodOrDie(ft) + switch { + case dc != nil || dci != nil: + // Note: a DeepCopyInto exists because it is added if DeepCopy is manually defined + leftPointer := ft.Kind == types.Pointer + rightPointer := !isReference(ft) + if dc != nil { + rightPointer = dc.Results[0].Kind == types.Pointer + } + if leftPointer == rightPointer { + sw.Do("out.$.name$ = in.$.name$.DeepCopy()\n", args) + } else if leftPointer { + sw.Do("x := in.$.name$.DeepCopy()\n", args) + sw.Do("out.$.name$ = = &x\n", args) + } else { + sw.Do("in.$.name$.DeepCopyInto(&out.$.name$)\n", args) + } + case uft.Kind == types.Builtin: + // the initial *out = *in was enough + case uft.Kind == types.Map, uft.Kind == types.Slice, uft.Kind == types.Pointer: + // Fixup non-nil reference-semantic types. + sw.Do("if in.$.name$ != nil {\n", args) + sw.Do("in, out := &in.$.name$, &out.$.name$\n", args) + g.generateFor(ft, sw) + sw.Do("}\n", nil) + case uft.Kind == types.Array: + sw.Do("out.$.name$ = in.$.name$\n", args) + case uft.Kind == types.Struct: + if ft.IsAssignable() { + sw.Do("out.$.name$ = in.$.name$\n", args) + } else { + sw.Do("in.$.name$.DeepCopyInto(&out.$.name$)\n", args) + } + case uft.Kind == types.Interface: + // Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function + if uft.Name.Name == "interface{}" { + klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy as one of the methods.", uft.Name.Name) + } + sw.Do("if in.$.name$ != nil {\n", args) + // Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it + // as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang + // parser does not give us the underlying interface name. So we cannot do any better. + sw.Do(fmt.Sprintf("out.$.name$ = in.$.name$.DeepCopy%s()\n", uft.Name.Name), args) + sw.Do("}\n", nil) + default: + klog.Fatalf("Hit an unsupported type %v for %v, from %v", uft, ft, t) + } + } +} + +// doPointer generates code for a pointer or an alias to a pointer. The generated code is +// is the same for both cases, i.e. it's the code for the underlying type. +func (g *genDeepCopy) doPointer(t *types.Type, sw *generator.SnippetWriter) { + ut := underlyingType(t) + uet := underlyingType(ut.Elem) + + dc, dci := deepCopyMethodOrDie(ut.Elem), deepCopyIntoMethodOrDie(ut.Elem) + switch { + case dc != nil || dci != nil: + rightPointer := !isReference(ut.Elem) + if dc != nil { + rightPointer = dc.Results[0].Kind == types.Pointer + } + if rightPointer { + sw.Do("*out = (*in).DeepCopy()\n", nil) + } else { + sw.Do("x := (*in).DeepCopy()\n", nil) + sw.Do("*out = &x\n", nil) + } + case uet.IsAssignable(): + sw.Do("*out = new($.Elem|raw$)\n", ut) + sw.Do("**out = **in", nil) + case uet.Kind == types.Map, uet.Kind == types.Slice, uet.Kind == types.Pointer: + sw.Do("*out = new($.Elem|raw$)\n", ut) + sw.Do("if **in != nil {\n", nil) + sw.Do("in, out := *in, *out\n", nil) + g.generateFor(uet, sw) + sw.Do("}\n", nil) + case uet.Kind == types.Struct: + sw.Do("*out = new($.Elem|raw$)\n", ut) + sw.Do("(*in).DeepCopyInto(*out)\n", nil) + default: + klog.Fatalf("Hit an unsupported type %v for %v", uet, t) + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go new file mode 100644 index 000000000000..220ec7e0d8ad --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go @@ -0,0 +1,1117 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "path/filepath" + "reflect" + "strconv" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// CustomArgs is used tby the go2idl framework to pass args specific to this +// generator. +type CustomArgs struct { + ExtraPeerDirs []string // Always consider these as last-ditch possibilities for conversions. +} + +var typeZeroValue = map[string]interface{}{ + "uint": 0., + "uint8": 0., + "uint16": 0., + "uint32": 0., + "uint64": 0., + "int": 0., + "int8": 0., + "int16": 0., + "int32": 0., + "int64": 0., + "byte": 0., + "float64": 0., + "float32": 0., + "bool": false, + "time.Time": "", + "string": "", + "integer": 0., + "number": 0., + "boolean": false, + "[]byte": "", // base64 encoded characters + "interface{}": interface{}(nil), +} + +// These are the comment tags that carry parameters for defaulter generation. +const tagName = "k8s:defaulter-gen" +const inputTagName = "k8s:defaulter-gen-input" +const defaultTagName = "default" + +func extractDefaultTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[defaultTagName] +} + +func extractTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[tagName] +} + +func extractInputTag(comments []string) []string { + return types.ExtractCommentTags("+", comments)[inputTagName] +} + +func checkTag(comments []string, require ...string) bool { + values := types.ExtractCommentTags("+", comments)[tagName] + if len(require) == 0 { + return len(values) == 1 && values[0] == "" + } + return reflect.DeepEqual(values, require) +} + +func defaultFnNamer() *namer.NameStrategy { + return &namer.NameStrategy{ + Prefix: "SetDefaults_", + Join: func(pre string, in []string, post string) string { + return pre + strings.Join(in, "_") + post + }, + } +} + +func objectDefaultFnNamer() *namer.NameStrategy { + return &namer.NameStrategy{ + Prefix: "SetObjectDefaults_", + Join: func(pre string, in []string, post string) string { + return pre + strings.Join(in, "_") + post + }, + } +} + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "public": namer.NewPublicNamer(1), + "raw": namer.NewRawNamer("", nil), + "defaultfn": defaultFnNamer(), + "objectdefaultfn": objectDefaultFnNamer(), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// defaults holds the declared defaulting functions for a given type (all defaulting functions +// are expected to be func(1)) +type defaults struct { + // object is the defaulter function for a top level type (typically one with TypeMeta) that + // invokes all child defaulters. May be nil if the object defaulter has not yet been generated. + object *types.Type + // base is a defaulter function defined for a type SetDefaults_Pod which does not invoke all + // child defaults - the base defaulter alone is insufficient to default a type + base *types.Type + // additional is zero or more defaulter functions of the form SetDefaults_Pod_XXXX that can be + // included in the Object defaulter. + additional []*types.Type +} + +// All of the types in conversions map are of type "DeclarationOf" with +// the underlying type being "Func". +type defaulterFuncMap map[*types.Type]defaults + +// Returns all manually-defined defaulting functions in the package. +func getManualDefaultingFunctions(context *generator.Context, pkg *types.Package, manualMap defaulterFuncMap) { + buffer := &bytes.Buffer{} + sw := generator.NewSnippetWriter(buffer, context, "$", "$") + + for _, f := range pkg.Functions { + if f.Underlying == nil || f.Underlying.Kind != types.Func { + klog.Errorf("Malformed function: %#v", f) + continue + } + if f.Underlying.Signature == nil { + klog.Errorf("Function without signature: %#v", f) + continue + } + signature := f.Underlying.Signature + // Check whether the function is defaulting function. + // Note that all of them have signature: + // object: func SetObjectDefaults_inType(*inType) + // base: func SetDefaults_inType(*inType) + // additional: func SetDefaults_inType_Qualifier(*inType) + if signature.Receiver != nil { + continue + } + if len(signature.Parameters) != 1 { + continue + } + if len(signature.Results) != 0 { + continue + } + inType := signature.Parameters[0] + if inType.Kind != types.Pointer { + continue + } + // Check if this is the primary defaulter. + args := defaultingArgsFromType(inType.Elem) + sw.Do("$.inType|defaultfn$", args) + switch { + case f.Name.Name == buffer.String(): + key := inType.Elem + // We might scan the same package twice, and that's OK. + v, ok := manualMap[key] + if ok && v.base != nil && v.base.Name.Package != pkg.Path { + panic(fmt.Sprintf("duplicate static defaulter defined: %#v", key)) + } + v.base = f + manualMap[key] = v + klog.V(6).Infof("found base defaulter function for %s from %s", key.Name, f.Name) + // Is one of the additional defaulters - a top level defaulter on a type that is + // also invoked. + case strings.HasPrefix(f.Name.Name, buffer.String()+"_"): + key := inType.Elem + v, ok := manualMap[key] + if ok { + exists := false + for _, existing := range v.additional { + if existing.Name == f.Name { + exists = true + break + } + } + if exists { + continue + } + } + v.additional = append(v.additional, f) + manualMap[key] = v + klog.V(6).Infof("found additional defaulter function for %s from %s", key.Name, f.Name) + } + buffer.Reset() + sw.Do("$.inType|objectdefaultfn$", args) + if f.Name.Name == buffer.String() { + key := inType.Elem + // We might scan the same package twice, and that's OK. + v, ok := manualMap[key] + if ok && v.base != nil && v.base.Name.Package != pkg.Path { + panic(fmt.Sprintf("duplicate static defaulter defined: %#v", key)) + } + v.object = f + manualMap[key] = v + klog.V(6).Infof("found object defaulter function for %s from %s", key.Name, f.Name) + } + buffer.Reset() + } +} + +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + packages := generator.Packages{} + header := append([]byte(fmt.Sprintf("// +build !%s\n\n", arguments.GeneratedBuildTag)), boilerplate...) + + // Accumulate pre-existing default functions. + // TODO: This is too ad-hoc. We need a better way. + existingDefaulters := defaulterFuncMap{} + + buffer := &bytes.Buffer{} + sw := generator.NewSnippetWriter(buffer, context, "$", "$") + + // We are generating defaults only for packages that are explicitly + // passed as InputDir. + for _, i := range context.Inputs { + klog.V(5).Infof("considering pkg %q", i) + pkg := context.Universe[i] + if pkg == nil { + // If the input had no Go files, for example. + continue + } + // typesPkg is where the types that needs defaulter are defined. + // Sometimes it is different from pkg. For example, kubernetes core/v1 + // types are defined in vendor/k8s.io/api/core/v1, while pkg is at + // pkg/api/v1. + typesPkg := pkg + + // Add defaulting functions. + getManualDefaultingFunctions(context, pkg, existingDefaulters) + + var peerPkgs []string + if customArgs, ok := arguments.CustomArgs.(*CustomArgs); ok { + for _, pkg := range customArgs.ExtraPeerDirs { + if i := strings.Index(pkg, "/vendor/"); i != -1 { + pkg = pkg[i+len("/vendor/"):] + } + peerPkgs = append(peerPkgs, pkg) + } + } + // Make sure our peer-packages are added and fully parsed. + for _, pp := range peerPkgs { + context.AddDir(pp) + getManualDefaultingFunctions(context, context.Universe[pp], existingDefaulters) + } + + typesWith := extractTag(pkg.Comments) + shouldCreateObjectDefaulterFn := func(t *types.Type) bool { + if defaults, ok := existingDefaulters[t]; ok && defaults.object != nil { + // A default generator is defined + baseTypeName := "" + if defaults.base != nil { + baseTypeName = defaults.base.Name.String() + } + klog.V(5).Infof(" an object defaulter already exists as %s", baseTypeName) + return false + } + // opt-out + if checkTag(t.SecondClosestCommentLines, "false") { + return false + } + // opt-in + if checkTag(t.SecondClosestCommentLines, "true") { + return true + } + // For every k8s:defaulter-gen tag at the package level, interpret the value as a + // field name (like TypeMeta, ListMeta, ObjectMeta) and trigger defaulter generation + // for any type with any of the matching field names. Provides a more useful package + // level defaulting than global (because we only need defaulters on a subset of objects - + // usually those with TypeMeta). + if t.Kind == types.Struct && len(typesWith) > 0 { + for _, field := range t.Members { + for _, s := range typesWith { + if field.Name == s { + return true + } + } + } + } + return false + } + + // if the types are not in the same package where the defaulter functions to be generated + inputTags := extractInputTag(pkg.Comments) + if len(inputTags) > 1 { + panic(fmt.Sprintf("there could only be one input tag, got %#v", inputTags)) + } + if len(inputTags) == 1 { + var err error + + inputPath := inputTags[0] + if strings.HasPrefix(inputPath, "./") || strings.HasPrefix(inputPath, "../") { + // this is a relative dir, which will not work under gomodules. + // join with the local package path, but warn + klog.Warningf("relative path %s=%s will not work under gomodule mode; use full package path (as used by 'import') instead", inputTagName, inputPath) + inputPath = filepath.Join(pkg.Path, inputTags[0]) + } + + typesPkg, err = context.AddDirectory(inputPath) + if err != nil { + klog.Fatalf("cannot import package %s", inputPath) + } + // update context.Order to the latest context.Universe + orderer := namer.Orderer{Namer: namer.NewPublicNamer(1)} + context.Order = orderer.OrderUniverse(context.Universe) + } + + newDefaulters := defaulterFuncMap{} + for _, t := range typesPkg.Types { + if !shouldCreateObjectDefaulterFn(t) { + continue + } + if namer.IsPrivateGoName(t.Name.Name) { + // We won't be able to convert to a private type. + klog.V(5).Infof(" found a type %v, but it is a private name", t) + continue + } + + // create a synthetic type we can use during generation + newDefaulters[t] = defaults{} + } + + // only generate defaulters for objects that actually have defined defaulters + // prevents empty defaulters from being registered + for { + promoted := 0 + for t, d := range newDefaulters { + if d.object != nil { + continue + } + if newCallTreeForType(existingDefaulters, newDefaulters).build(t, true) != nil { + args := defaultingArgsFromType(t) + sw.Do("$.inType|objectdefaultfn$", args) + newDefaulters[t] = defaults{ + object: &types.Type{ + Name: types.Name{ + Package: pkg.Path, + Name: buffer.String(), + }, + Kind: types.Func, + }, + } + buffer.Reset() + promoted++ + } + } + if promoted != 0 { + continue + } + + // prune any types that were not used + for t, d := range newDefaulters { + if d.object == nil { + klog.V(6).Infof("did not generate defaulter for %s because no child defaulters were registered", t.Name) + delete(newDefaulters, t) + } + } + break + } + + if len(newDefaulters) == 0 { + klog.V(5).Infof("no defaulters in package %s", pkg.Name) + } + + path := pkg.Path + // if the source path is within a /vendor/ directory (for example, + // k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1), allow + // generation to output to the proper relative path (under vendor). + // Otherwise, the generator will create the file in the wrong location + // in the output directory. + // TODO: build a more fundamental concept in gengo for dealing with modifications + // to vendored packages. + if strings.HasPrefix(pkg.SourcePath, arguments.OutputBase) { + expandedPath := strings.TrimPrefix(pkg.SourcePath, arguments.OutputBase) + if strings.Contains(expandedPath, "/vendor/") { + path = expandedPath + } + } + + packages = append(packages, + &generator.DefaultPackage{ + PackageName: filepath.Base(pkg.Path), + PackagePath: path, + HeaderText: header, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{ + NewGenDefaulter(arguments.OutputFileBaseName, typesPkg.Path, pkg.Path, existingDefaulters, newDefaulters, peerPkgs), + } + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return t.Name.Package == typesPkg.Path + }, + }) + } + return packages +} + +// callTreeForType contains fields necessary to build a tree for types. +type callTreeForType struct { + existingDefaulters defaulterFuncMap + newDefaulters defaulterFuncMap + currentlyBuildingTypes map[*types.Type]bool +} + +func newCallTreeForType(existingDefaulters, newDefaulters defaulterFuncMap) *callTreeForType { + return &callTreeForType{ + existingDefaulters: existingDefaulters, + newDefaulters: newDefaulters, + currentlyBuildingTypes: make(map[*types.Type]bool), + } +} + +func resolveTypeAndDepth(t *types.Type) (*types.Type, int) { + var prev *types.Type + depth := 0 + for prev != t { + prev = t + if t.Kind == types.Alias { + t = t.Underlying + } else if t.Kind == types.Pointer { + t = t.Elem + depth += 1 + } + } + return t, depth +} + +// getNestedDefault returns the first default value when resolving alias types +func getNestedDefault(t *types.Type) string { + var prev *types.Type + for prev != t { + prev = t + defaultMap := extractDefaultTag(t.CommentLines) + if len(defaultMap) == 1 && defaultMap[0] != "" { + return defaultMap[0] + } + if t.Kind == types.Alias { + t = t.Underlying + } else if t.Kind == types.Pointer { + t = t.Elem + } + } + return "" +} + +func mustEnforceDefault(t *types.Type, depth int, omitEmpty bool) (interface{}, error) { + if depth > 0 { + return nil, nil + } + switch t.Kind { + case types.Pointer, types.Map, types.Slice, types.Array, types.Interface: + return nil, nil + case types.Struct: + return map[string]interface{}{}, nil + case types.Builtin: + if !omitEmpty { + if zero, ok := typeZeroValue[t.String()]; ok { + return zero, nil + } else { + return nil, fmt.Errorf("please add type %v to typeZeroValue struct", t) + } + } + return nil, nil + default: + return nil, fmt.Errorf("not sure how to enforce default for %v", t.Kind) + } +} + +func populateDefaultValue(node *callNode, t *types.Type, tags string, commentLines []string) *callNode { + defaultMap := extractDefaultTag(commentLines) + var defaultString string + if len(defaultMap) == 1 { + defaultString = defaultMap[0] + } + + t, depth := resolveTypeAndDepth(t) + if depth > 0 && defaultString == "" { + defaultString = getNestedDefault(t) + } + if len(defaultMap) > 1 { + klog.Fatalf("Found more than one default tag for %v", t.Kind) + } else if len(defaultMap) == 0 { + return node + } + var defaultValue interface{} + if err := json.Unmarshal([]byte(defaultString), &defaultValue); err != nil { + klog.Fatalf("Failed to unmarshal default: %v", err) + } + + omitEmpty := strings.Contains(reflect.StructTag(tags).Get("json"), "omitempty") + if enforced, err := mustEnforceDefault(t, depth, omitEmpty); err != nil { + klog.Fatal(err) + } else if enforced != nil { + if defaultValue != nil { + if reflect.DeepEqual(defaultValue, enforced) { + // If the default value annotation matches the default value for the type, + // do not generate any defaulting function + return node + } else { + enforcedJSON, _ := json.Marshal(enforced) + klog.Fatalf("Invalid default value (%#v) for non-pointer/non-omitempty. If specified, must be: %v", defaultValue, string(enforcedJSON)) + } + } + } + + // callNodes are not automatically generated for primitive types. Generate one if the callNode does not exist + if node == nil { + node = &callNode{} + node.markerOnly = true + } + + node.defaultIsPrimitive = t.IsPrimitive() + node.defaultType = t.String() + node.defaultValue = defaultString + node.defaultDepth = depth + return node +} + +// build creates a tree of paths to fields (based on how they would be accessed in Go - pointer, elem, +// slice, or key) and the functions that should be invoked on each field. An in-order traversal of the resulting tree +// can be used to generate a Go function that invokes each nested function on the appropriate type. The return +// value may be nil if there are no functions to call on type or the type is a primitive (Defaulters can only be +// invoked on structs today). When root is true this function will not use a newDefaulter. existingDefaulters should +// contain all defaulting functions by type defined in code - newDefaulters should contain all object defaulters +// that could be or will be generated. If newDefaulters has an entry for a type, but the 'object' field is nil, +// this function skips adding that defaulter - this allows us to avoid generating object defaulter functions for +// list types that call empty defaulters. +func (c *callTreeForType) build(t *types.Type, root bool) *callNode { + parent := &callNode{} + + if root { + // the root node is always a pointer + parent.elem = true + } + + defaults, _ := c.existingDefaulters[t] + newDefaults, generated := c.newDefaulters[t] + switch { + case !root && generated && newDefaults.object != nil: + parent.call = append(parent.call, newDefaults.object) + // if we will be generating the defaulter, it by definition is a covering + // defaulter, so we halt recursion + klog.V(6).Infof("the defaulter %s will be generated as an object defaulter", t.Name) + return parent + + case defaults.object != nil: + // object defaulters are always covering + parent.call = append(parent.call, defaults.object) + return parent + + case defaults.base != nil: + parent.call = append(parent.call, defaults.base) + // if the base function indicates it "covers" (it already includes defaulters) + // we can halt recursion + if checkTag(defaults.base.CommentLines, "covers") { + klog.V(6).Infof("the defaulter %s indicates it covers all sub generators", t.Name) + return parent + } + } + + // base has been added already, now add any additional defaulters defined for this object + parent.call = append(parent.call, defaults.additional...) + + // if the type already exists, don't build the tree for it and don't generate anything. + // This is used to avoid recursion for nested recursive types. + if c.currentlyBuildingTypes[t] { + return nil + } + // if type doesn't exist, mark it as existing + c.currentlyBuildingTypes[t] = true + + defer func() { + // The type will now acts as a parent, not a nested recursive type. + // We can now build the tree for it safely. + c.currentlyBuildingTypes[t] = false + }() + + switch t.Kind { + case types.Pointer: + if child := c.build(t.Elem, false); child != nil { + child.elem = true + parent.children = append(parent.children, *child) + } + case types.Slice, types.Array: + if child := c.build(t.Elem, false); child != nil { + child.index = true + if t.Elem.Kind == types.Pointer { + child.elem = true + } + parent.children = append(parent.children, *child) + } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines); member != nil { + member.index = true + parent.children = append(parent.children, *member) + } + case types.Map: + if child := c.build(t.Elem, false); child != nil { + child.key = true + parent.children = append(parent.children, *child) + } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines); member != nil { + member.key = true + parent.children = append(parent.children, *member) + } + + case types.Struct: + for _, field := range t.Members { + name := field.Name + if len(name) == 0 { + if field.Type.Kind == types.Pointer { + name = field.Type.Elem.Name.Name + } else { + name = field.Type.Name.Name + } + } + if child := c.build(field.Type, false); child != nil { + child.field = name + populateDefaultValue(child, field.Type, field.Tags, field.CommentLines) + parent.children = append(parent.children, *child) + } else if member := populateDefaultValue(nil, field.Type, field.Tags, field.CommentLines); member != nil { + member.field = name + parent.children = append(parent.children, *member) + } + } + case types.Alias: + if child := c.build(t.Underlying, false); child != nil { + parent.children = append(parent.children, *child) + } + } + if len(parent.children) == 0 && len(parent.call) == 0 { + //klog.V(6).Infof("decided type %s needs no generation", t.Name) + return nil + } + return parent +} + +const ( + runtimePackagePath = "k8s.io/apimachinery/pkg/runtime" + conversionPackagePath = "k8s.io/apimachinery/pkg/conversion" +) + +// genDefaulter produces a file with a autogenerated conversions. +type genDefaulter struct { + generator.DefaultGen + typesPackage string + outputPackage string + peerPackages []string + newDefaulters defaulterFuncMap + existingDefaulters defaulterFuncMap + imports namer.ImportTracker + typesForInit []*types.Type +} + +func NewGenDefaulter(sanitizedName, typesPackage, outputPackage string, existingDefaulters, newDefaulters defaulterFuncMap, peerPkgs []string) generator.Generator { + return &genDefaulter{ + DefaultGen: generator.DefaultGen{ + OptionalName: sanitizedName, + }, + typesPackage: typesPackage, + outputPackage: outputPackage, + peerPackages: peerPkgs, + newDefaulters: newDefaulters, + existingDefaulters: existingDefaulters, + imports: generator.NewImportTracker(), + typesForInit: make([]*types.Type, 0), + } +} + +func (g *genDefaulter) Namers(c *generator.Context) namer.NameSystems { + // Have the raw namer for this file track what it imports. + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genDefaulter) isOtherPackage(pkg string) bool { + if pkg == g.outputPackage { + return false + } + if strings.HasSuffix(pkg, `"`+g.outputPackage+`"`) { + return false + } + return true +} + +func (g *genDefaulter) Filter(c *generator.Context, t *types.Type) bool { + defaults, ok := g.newDefaulters[t] + if !ok || defaults.object == nil { + return false + } + g.typesForInit = append(g.typesForInit, t) + return true +} + +func (g *genDefaulter) Imports(c *generator.Context) (imports []string) { + var importLines []string + for _, singleImport := range g.imports.ImportLines() { + if g.isOtherPackage(singleImport) { + importLines = append(importLines, singleImport) + } + } + return importLines +} + +func (g *genDefaulter) Init(c *generator.Context, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + + scheme := c.Universe.Type(types.Name{Package: runtimePackagePath, Name: "Scheme"}) + schemePtr := &types.Type{ + Kind: types.Pointer, + Elem: scheme, + } + sw.Do("// RegisterDefaults adds defaulters functions to the given scheme.\n", nil) + sw.Do("// Public to allow building arbitrary schemes.\n", nil) + sw.Do("// All generated defaulters are covering - they call all nested defaulters.\n", nil) + sw.Do("func RegisterDefaults(scheme $.|raw$) error {\n", schemePtr) + for _, t := range g.typesForInit { + args := defaultingArgsFromType(t) + sw.Do("scheme.AddTypeDefaultingFunc(&$.inType|raw${}, func(obj interface{}) { $.inType|objectdefaultfn$(obj.(*$.inType|raw$)) })\n", args) + } + sw.Do("return nil\n", nil) + sw.Do("}\n\n", nil) + return sw.Error() +} + +func (g *genDefaulter) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + if _, ok := g.newDefaulters[t]; !ok { + return nil + } + + klog.V(5).Infof("generating for type %v", t) + + callTree := newCallTreeForType(g.existingDefaulters, g.newDefaulters).build(t, true) + if callTree == nil { + klog.V(5).Infof(" no defaulters defined") + return nil + } + i := 0 + callTree.VisitInOrder(func(ancestors []*callNode, current *callNode) { + if len(current.call) == 0 { + return + } + path := callPath(append(ancestors, current)) + klog.V(5).Infof(" %d: %s", i, path) + i++ + }) + + sw := generator.NewSnippetWriter(w, c, "$", "$") + g.generateDefaulter(t, callTree, sw) + return sw.Error() +} + +func defaultingArgsFromType(inType *types.Type) generator.Args { + return generator.Args{ + "inType": inType, + } +} + +func (g *genDefaulter) generateDefaulter(inType *types.Type, callTree *callNode, sw *generator.SnippetWriter) { + sw.Do("func $.inType|objectdefaultfn$(in *$.inType|raw$) {\n", defaultingArgsFromType(inType)) + callTree.WriteMethod("in", 0, nil, sw) + sw.Do("}\n\n", nil) +} + +// callNode represents an entry in a tree of Go type accessors - the path from the root to a leaf represents +// how in Go code an access would be performed. For example, if a defaulting function exists on a container +// lifecycle hook, to invoke that defaulter correctly would require this Go code: +// +// for i := range pod.Spec.Containers { +// o := &pod.Spec.Containers[i] +// if o.LifecycleHook != nil { +// SetDefaults_LifecycleHook(o.LifecycleHook) +// } +// } +// +// That would be represented by a call tree like: +// +// callNode +// field: "Spec" +// children: +// - field: "Containers" +// children: +// - index: true +// children: +// - field: "LifecycleHook" +// elem: true +// call: +// - SetDefaults_LifecycleHook +// +// which we can traverse to build that Go struct (you must call the field Spec, then Containers, then range over +// that field, then check whether the LifecycleHook field is nil, before calling SetDefaults_LifecycleHook on +// the pointer to that field). +type callNode struct { + // field is the name of the Go member to access + field string + // key is true if this is a map and we must range over the key and values + key bool + // index is true if this is a slice and we must range over the slice values + index bool + // elem is true if the previous elements refer to a pointer (typically just field) + elem bool + + // call is all of the functions that must be invoked on this particular node, in order + call []*types.Type + // children is the child call nodes that must also be traversed + children []callNode + + // defaultValue is the defaultValue of a callNode struct + // Only primitive types and pointer types are eligible to have a default value + defaultValue string + + // defaultIsPrimitive is used to determine how to assign the default value. + // Primitive types will be directly assigned while complex types will use JSON unmarshalling + defaultIsPrimitive bool + + // markerOnly is true if the callNode exists solely to fill in a default value + markerOnly bool + + // defaultDepth is used to determine pointer level of the default value + // For example 1 corresponds to setting a default value and taking its pointer while + // 2 corresponds to setting a default value and taking its pointer's pointer + // 0 implies that no pointers are used + // This is used in situations where a field is a pointer to a primitive value rather than a primitive value itself. + // + // type A { + // +default="foo" + // Field *string + // } + defaultDepth int + + // defaultType is the type of the default value. + // Only populated if defaultIsPrimitive is true + defaultType string +} + +// CallNodeVisitorFunc is a function for visiting a call tree. ancestors is the list of all parents +// of this node to the root of the tree - will be empty at the root. +type CallNodeVisitorFunc func(ancestors []*callNode, node *callNode) + +func (n *callNode) VisitInOrder(fn CallNodeVisitorFunc) { + n.visitInOrder(nil, fn) +} + +func (n *callNode) visitInOrder(ancestors []*callNode, fn CallNodeVisitorFunc) { + fn(ancestors, n) + ancestors = append(ancestors, n) + for i := range n.children { + n.children[i].visitInOrder(ancestors, fn) + } +} + +var ( + indexVariables = "ijklmnop" + localVariables = "abcdefgh" +) + +// varsForDepth creates temporary variables guaranteed to be unique within lexical Go scopes +// of this depth in a function. It uses canonical Go loop variables for the first 7 levels +// and then resorts to uglier prefixes. +func varsForDepth(depth int) (index, local string) { + if depth > len(indexVariables) { + index = fmt.Sprintf("i%d", depth) + } else { + index = indexVariables[depth : depth+1] + } + if depth > len(localVariables) { + local = fmt.Sprintf("local%d", depth) + } else { + local = localVariables[depth : depth+1] + } + return +} + +// writeCalls generates a list of function calls based on the calls field for the provided variable +// name and pointer. +func (n *callNode) writeCalls(varName string, isVarPointer bool, sw *generator.SnippetWriter) { + accessor := varName + if !isVarPointer { + accessor = "&" + accessor + } + for _, fn := range n.call { + sw.Do("$.fn|raw$($.var$)\n", generator.Args{ + "fn": fn, + "var": accessor, + }) + } +} + +func getTypeZeroValue(t string) (interface{}, error) { + defaultZero, ok := typeZeroValue[t] + if !ok { + return nil, fmt.Errorf("Cannot find zero value for type %v in typeZeroValue", t) + } + + // To generate the code for empty string, they must be quoted + if defaultZero == "" { + defaultZero = strconv.Quote(defaultZero.(string)) + } + return defaultZero, nil +} + +func (n *callNode) writeDefaulter(varName string, index string, isVarPointer bool, sw *generator.SnippetWriter) { + if n.defaultValue == "" { + return + } + args := generator.Args{ + "defaultValue": n.defaultValue, + "varName": varName, + "index": index, + "varDepth": n.defaultDepth, + "varType": n.defaultType, + } + + variablePlaceholder := "" + + if n.index { + // Defaulting for array + variablePlaceholder = "$.varName$[$.index$]" + } else if n.key { + // Defaulting for map + variablePlaceholder = "$.varName$[$.index$]" + mapDefaultVar := args["index"].(string) + "_default" + args["mapDefaultVar"] = mapDefaultVar + } else { + // Defaulting for primitive type + variablePlaceholder = "$.varName$" + } + + // defaultIsPrimitive is true if the type or underlying type (in an array/map) is primitive + // or is a pointer to a primitive type + // (Eg: int, map[string]*string, []int) + if n.defaultIsPrimitive { + // If the default value is a primitive when the assigned type is a pointer + // keep using the address-of operator on the primitive value until the types match + if n.defaultDepth > 0 { + sw.Do(fmt.Sprintf("if %s == nil {\n", variablePlaceholder), args) + sw.Do("var ptrVar$.varDepth$ $.varType$ = $.defaultValue$\n", args) + // We iterate until a depth of 1 instead of 0 because the following line + // `if $.varName$ == &ptrVar1` accounts for 1 level already + for i := n.defaultDepth; i > 1; i-- { + sw.Do("ptrVar$.ptri$ := &ptrVar$.i$\n", generator.Args{"i": fmt.Sprintf("%d", i), "ptri": fmt.Sprintf("%d", (i - 1))}) + } + sw.Do(fmt.Sprintf("%s = &ptrVar1", variablePlaceholder), args) + } else { + // For primitive types, nil checks cannot be used and the zero value must be determined + defaultZero, err := getTypeZeroValue(n.defaultType) + if err != nil { + klog.Error(err) + } + args["defaultZero"] = defaultZero + + sw.Do(fmt.Sprintf("if %s == $.defaultZero$ {\n", variablePlaceholder), args) + sw.Do(fmt.Sprintf("%s = $.defaultValue$", variablePlaceholder), args) + } + } else { + sw.Do(fmt.Sprintf("if %s == nil {\n", variablePlaceholder), args) + // Map values are not directly addressable and we need a temporary variable to do json unmarshalling + // This applies to maps with non-primitive values (eg: map[string]SubStruct) + if n.key { + sw.Do("$.mapDefaultVar$ := $.varName$[$.index$]\n", args) + sw.Do("if err := json.Unmarshal([]byte(`$.defaultValue$`), &$.mapDefaultVar$); err != nil {\n", args) + } else { + variablePointer := variablePlaceholder + if !isVarPointer { + variablePointer = "&" + variablePointer + } + sw.Do(fmt.Sprintf("if err := json.Unmarshal([]byte(`$.defaultValue$`), %s); err != nil {\n", variablePointer), args) + } + sw.Do("panic(err)\n", nil) + sw.Do("}\n", nil) + if n.key { + sw.Do("$.varName$[$.index$] = $.mapDefaultVar$\n", args) + } + } + sw.Do("}\n", nil) +} + +// WriteMethod performs an in-order traversal of the calltree, generating loops and if blocks as necessary +// to correctly turn the call tree into a method body that invokes all calls on all child nodes of the call tree. +// Depth is used to generate local variables at the proper depth. +func (n *callNode) WriteMethod(varName string, depth int, ancestors []*callNode, sw *generator.SnippetWriter) { + // if len(n.call) > 0 { + // sw.Do(fmt.Sprintf("// %s\n", callPath(append(ancestors, n)).String()), nil) + // } + + if len(n.field) > 0 { + varName = varName + "." + n.field + } + + index, local := varsForDepth(depth) + vars := generator.Args{ + "index": index, + "local": local, + "var": varName, + } + + isPointer := n.elem && !n.index + if isPointer && len(ancestors) > 0 { + sw.Do("if $.var$ != nil {\n", vars) + } + + switch { + case n.index: + sw.Do("for $.index$ := range $.var$ {\n", vars) + if !n.markerOnly { + if n.elem { + sw.Do("$.local$ := $.var$[$.index$]\n", vars) + } else { + sw.Do("$.local$ := &$.var$[$.index$]\n", vars) + } + } + + n.writeDefaulter(varName, index, isPointer, sw) + n.writeCalls(local, true, sw) + for i := range n.children { + n.children[i].WriteMethod(local, depth+1, append(ancestors, n), sw) + } + sw.Do("}\n", nil) + case n.key: + if n.defaultValue != "" { + // Map keys are typed and cannot share the same index variable as arrays and other maps + index = index + "_" + ancestors[len(ancestors)-1].field + vars["index"] = index + sw.Do("for $.index$ := range $.var$ {\n", vars) + n.writeDefaulter(varName, index, isPointer, sw) + sw.Do("}\n", nil) + } + default: + n.writeDefaulter(varName, index, isPointer, sw) + n.writeCalls(varName, isPointer, sw) + for i := range n.children { + n.children[i].WriteMethod(varName, depth, append(ancestors, n), sw) + } + } + + if isPointer && len(ancestors) > 0 { + sw.Do("}\n", nil) + } +} + +type callPath []*callNode + +// String prints a representation of a callPath that roughly approximates what a Go accessor +// would look like. Used for debugging only. +func (path callPath) String() string { + if len(path) == 0 { + return "" + } + var parts []string + for _, p := range path { + last := len(parts) - 1 + switch { + case p.elem: + if len(parts) > 0 { + parts[last] = "*" + parts[last] + } else { + parts = append(parts, "*") + } + case p.index: + if len(parts) > 0 { + parts[last] = parts[last] + "[i]" + } else { + parts = append(parts, "[i]") + } + case p.key: + if len(parts) > 0 { + parts[last] = parts[last] + "[key]" + } else { + parts = append(parts, "[key]") + } + default: + if len(p.field) > 0 { + parts = append(parts, p.field) + } else { + parts = append(parts, "") + } + } + } + var calls []string + for _, fn := range path[len(path)-1].call { + calls = append(calls, fn.Name.String()) + } + if len(calls) == 0 { + calls = append(calls, "") + } + + return strings.Join(parts, ".") + " calls " + strings.Join(calls, ", ") +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go new file mode 100644 index 000000000000..7232f5e6bf3c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go @@ -0,0 +1,419 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package generators has the generators for the import-boss utility. +package generators + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "regexp" + "sort" + "strings" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + "sigs.k8s.io/yaml" + + "k8s.io/klog/v2" +) + +const ( + goModFile = "go.mod" + importBossFileType = "import-boss" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer("", nil), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "raw" +} + +// Packages makes the import-boss package definition. +func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + pkgs := generator.Packages{} + c.FileTypes = map[string]generator.FileType{ + importBossFileType: importRuleFile{c}, + } + + for _, p := range c.Universe { + if !arguments.InputIncludes(p) { + // Don't run on e.g. third party dependencies. + continue + } + savedPackage := p + pkgs = append(pkgs, &generator.DefaultPackage{ + PackageName: p.Name, + PackagePath: p.Path, + Source: p.SourcePath, + // GeneratorFunc returns a list of generators. Each generator makes a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{&importRules{ + myPackage: savedPackage, + }} + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + return false + }, + }) + } + + return pkgs +} + +// A single import restriction rule. +type Rule struct { + // All import paths that match this regexp... + SelectorRegexp string + // ... must have one of these prefixes ... + AllowedPrefixes []string + // ... and must not have one of these prefixes. + ForbiddenPrefixes []string +} + +type InverseRule struct { + Rule + // True if the rule is to be applied to transitive imports. + Transitive bool +} + +type fileFormat struct { + CurrentImports []string + + Rules []Rule + InverseRules []InverseRule + + path string +} + +func readFile(path string) (*fileFormat, error) { + currentBytes, err := ioutil.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("couldn't read %v: %v", path, err) + } + + var current fileFormat + err = yaml.Unmarshal(currentBytes, ¤t) + if err != nil { + return nil, fmt.Errorf("couldn't unmarshal %v: %v", path, err) + } + current.path = path + return ¤t, nil +} + +func writeFile(path string, ff *fileFormat) error { + raw, err := json.MarshalIndent(ff, "", "\t") + if err != nil { + return fmt.Errorf("couldn't format data for file %v.\n%#v", path, ff) + } + f, err := os.Create(path) + if err != nil { + return fmt.Errorf("couldn't open %v for writing: %v", path, err) + } + defer f.Close() + _, err = f.Write(raw) + return err +} + +// This does the actual checking, since it knows the literal destination file. +type importRuleFile struct { + context *generator.Context +} + +func (irf importRuleFile) AssembleFile(f *generator.File, path string) error { + return irf.VerifyFile(f, path) +} + +// TODO: make a flag to enable this, or expose this information in some other way. +func (importRuleFile) listEntireImportTree(f *generator.File, path string) error { + // If the file exists, populate its current imports. This is mostly to help + // humans figure out what they need to fix. + if _, err := os.Stat(path); err != nil { + // Ignore packages which haven't opted in by adding an .import-restrictions file. + return nil + } + + current, err := readFile(path) + if err != nil { + return err + } + + current.CurrentImports = []string{} + for v := range f.Imports { + current.CurrentImports = append(current.CurrentImports, v) + } + sort.Strings(current.CurrentImports) + + return writeFile(path, current) +} + +// removeLastDir removes the last directory, but leaves the file name +// unchanged. It returns the new path and the removed directory. So: +// "a/b/c/file" -> ("a/b/file", "c") +func removeLastDir(path string) (newPath, removedDir string) { + dir, file := filepath.Split(path) + dir = strings.TrimSuffix(dir, string(filepath.Separator)) + return filepath.Join(filepath.Dir(dir), file), filepath.Base(dir) +} + +// isGoModRoot checks if a directory is the root directory for a package +// by checking for the existence of a 'go.mod' file in that directory. +func isGoModRoot(path string) bool { + _, err := os.Stat(filepath.Join(filepath.Dir(path), goModFile)) + return err == nil +} + +// recursiveRead collects all '.import-restriction' files, between the current directory, +// and the package root when Go modules are enabled, or $GOPATH/src when they are not. +func recursiveRead(path string) ([]*fileFormat, error) { + restrictionFiles := make([]*fileFormat, 0) + + for { + if _, err := os.Stat(path); err == nil { + rules, err := readFile(path) + if err != nil { + return nil, err + } + + restrictionFiles = append(restrictionFiles, rules) + } + + nextPath, removedDir := removeLastDir(path) + if nextPath == path || isGoModRoot(path) || removedDir == "src" { + break + } + + path = nextPath + } + + return restrictionFiles, nil +} + +func (irf importRuleFile) VerifyFile(f *generator.File, path string) error { + restrictionFiles, err := recursiveRead(filepath.Join(f.PackageSourcePath, f.Name)) + if err != nil { + return fmt.Errorf("error finding rules file: %v", err) + } + + if err := irf.verifyRules(restrictionFiles, f); err != nil { + return err + } + + return irf.verifyInverseRules(restrictionFiles, f) +} + +func (irf importRuleFile) verifyRules(restrictionFiles []*fileFormat, f *generator.File) error { + selectors := make([][]*regexp.Regexp, len(restrictionFiles)) + for i, restrictionFile := range restrictionFiles { + for _, r := range restrictionFile.Rules { + re, err := regexp.Compile(r.SelectorRegexp) + if err != nil { + return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) + } + + selectors[i] = append(selectors[i], re) + } + } + + forbiddenImports := map[string]string{} + allowedMismatchedImports := []string{} + + for v := range f.Imports { + explicitlyAllowed := false + + NextRestrictionFiles: + for i, rules := range restrictionFiles { + for j, r := range rules.Rules { + matching := selectors[i][j].MatchString(v) + klog.V(5).Infof("Checking %v matches %v: %v\n", r.SelectorRegexp, v, matching) + if !matching { + continue + } + for _, forbidden := range r.ForbiddenPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, forbidden) + if strings.HasPrefix(v, forbidden) { + forbiddenImports[v] = forbidden + } + } + for _, allowed := range r.AllowedPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, allowed) + if strings.HasPrefix(v, allowed) { + explicitlyAllowed = true + break + } + } + + if !explicitlyAllowed { + allowedMismatchedImports = append(allowedMismatchedImports, v) + } else { + klog.V(2).Infof("%v importing %v allowed by %v\n", f.PackagePath, v, restrictionFiles[i].path) + break NextRestrictionFiles + } + } + } + } + + if len(forbiddenImports) > 0 || len(allowedMismatchedImports) > 0 { + var errorBuilder strings.Builder + for i, f := range forbiddenImports { + fmt.Fprintf(&errorBuilder, "import %v has forbidden prefix %v\n", i, f) + } + if len(allowedMismatchedImports) > 0 { + sort.Sort(sort.StringSlice(allowedMismatchedImports)) + fmt.Fprintf(&errorBuilder, "the following imports did not match any allowed prefix:\n") + for _, i := range allowedMismatchedImports { + fmt.Fprintf(&errorBuilder, " %v\n", i) + } + } + return errors.New(errorBuilder.String()) + } + + return nil +} + +// verifyInverseRules checks that all packages that import a package are allowed to import it. +func (irf importRuleFile) verifyInverseRules(restrictionFiles []*fileFormat, f *generator.File) error { + // compile all Selector regex in all restriction files + selectors := make([][]*regexp.Regexp, len(restrictionFiles)) + for i, restrictionFile := range restrictionFiles { + for _, r := range restrictionFile.InverseRules { + re, err := regexp.Compile(r.SelectorRegexp) + if err != nil { + return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) + } + + selectors[i] = append(selectors[i], re) + } + } + + directImport := map[string]bool{} + for _, imp := range irf.context.IncomingImports()[f.PackagePath] { + directImport[imp] = true + } + + forbiddenImports := map[string]string{} + allowedMismatchedImports := []string{} + + for _, v := range irf.context.TransitiveIncomingImports()[f.PackagePath] { + explicitlyAllowed := false + + NextRestrictionFiles: + for i, rules := range restrictionFiles { + for j, r := range rules.InverseRules { + if !r.Transitive && !directImport[v] { + continue + } + + re := selectors[i][j] + matching := re.MatchString(v) + klog.V(4).Infof("Checking %v matches %v (importing %v: %v\n", r.SelectorRegexp, v, f.PackagePath, matching) + if !matching { + continue + } + for _, forbidden := range r.ForbiddenPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, forbidden) + if strings.HasPrefix(v, forbidden) { + forbiddenImports[v] = forbidden + } + } + for _, allowed := range r.AllowedPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, allowed) + if strings.HasPrefix(v, allowed) { + explicitlyAllowed = true + break + } + } + if !explicitlyAllowed { + allowedMismatchedImports = append(allowedMismatchedImports, v) + } else { + klog.V(2).Infof("%v importing %v allowed by %v\n", v, f.PackagePath, restrictionFiles[i].path) + break NextRestrictionFiles + } + } + } + } + + if len(forbiddenImports) > 0 || len(allowedMismatchedImports) > 0 { + var errorBuilder strings.Builder + for i, f := range forbiddenImports { + fmt.Fprintf(&errorBuilder, "(inverse): import %v has forbidden prefix %v\n", i, f) + } + if len(allowedMismatchedImports) > 0 { + sort.Sort(sort.StringSlice(allowedMismatchedImports)) + fmt.Fprintf(&errorBuilder, "(inverse): the following imports did not match any allowed prefix:\n") + for _, i := range allowedMismatchedImports { + fmt.Fprintf(&errorBuilder, " %v\n", i) + } + } + return errors.New(errorBuilder.String()) + } + + return nil +} + +// importRules produces a file with a set for a single type. +type importRules struct { + myPackage *types.Package + imports namer.ImportTracker +} + +var ( + _ = generator.Generator(&importRules{}) + _ = generator.FileType(importRuleFile{}) +) + +func (r *importRules) Name() string { return "import rules" } +func (r *importRules) Filter(*generator.Context, *types.Type) bool { return false } +func (r *importRules) Namers(*generator.Context) namer.NameSystems { return nil } +func (r *importRules) PackageVars(*generator.Context) []string { return []string{} } +func (r *importRules) PackageConsts(*generator.Context) []string { return []string{} } +func (r *importRules) GenerateType(*generator.Context, *types.Type, io.Writer) error { return nil } +func (r *importRules) Filename() string { return ".import-restrictions" } +func (r *importRules) FileType() string { return importBossFileType } +func (r *importRules) Init(c *generator.Context, w io.Writer) error { return nil } +func (r *importRules) Finalize(*generator.Context, io.Writer) error { return nil } + +func dfsImports(dest *[]string, seen map[string]bool, p *types.Package) { + for _, p2 := range p.Imports { + if seen[p2.Path] { + continue + } + seen[p2.Path] = true + dfsImports(dest, seen, p2) + *dest = append(*dest, p2.Path) + } +} + +func (r *importRules) Imports(*generator.Context) []string { + all := []string{} + dfsImports(&all, map[string]bool{}, r.myPackage) + return all +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/sets.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/sets.go new file mode 100644 index 000000000000..e89f5ad76162 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/sets.go @@ -0,0 +1,378 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package generators has the generators for the set-gen utility. +package generators + +import ( + "io" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "public": namer.NewPublicNamer(0), + "private": namer.NewPrivateNamer(0), + "raw": namer.NewRawNamer("", nil), + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "public" +} + +// Packages makes the sets package definition. +func Packages(_ *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + + return generator.Packages{&generator.DefaultPackage{ + PackageName: "sets", + PackagePath: arguments.OutputPackagePath, + HeaderText: boilerplate, + PackageDocumentation: []byte( + `// Package sets has auto-generated set types. +`), + // GeneratorFunc returns a list of generators. Each generator makes a + // single file. + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + generators = []generator.Generator{ + // Always generate a "doc.go" file. + generator.DefaultGen{OptionalName: "doc"}, + // Make a separate file for the Empty type, since it's shared by every type. + generator.DefaultGen{ + OptionalName: "empty", + OptionalBody: []byte(emptyTypeDecl), + }, + } + // Since we want a file per type that we generate a set for, we + // have to provide a function for this. + for _, t := range c.Order { + generators = append(generators, &genSet{ + DefaultGen: generator.DefaultGen{ + // Use the privatized version of the + // type name as the file name. + // + // TODO: make a namer that converts + // camelCase to '-' separation for file + // names? + OptionalName: c.Namers["private"].Name(t), + }, + outputPackage: arguments.OutputPackagePath, + typeToMatch: t, + imports: generator.NewImportTracker(), + }) + } + return generators + }, + FilterFunc: func(c *generator.Context, t *types.Type) bool { + // It would be reasonable to filter by the type's package here. + // It might be necessary if your input directory has a big + // import graph. + switch t.Kind { + case types.Map, types.Slice, types.Pointer: + // These types can't be keys in a map. + return false + case types.Builtin: + return true + case types.Struct: + // Only some structs can be keys in a map. This is triggered by the line + // // +genset + // or + // // +genset=true + return extractBoolTagOrDie("genset", t.CommentLines) == true + } + return false + }, + }} +} + +// genSet produces a file with a set for a single type. +type genSet struct { + generator.DefaultGen + outputPackage string + typeToMatch *types.Type + imports namer.ImportTracker +} + +// Filter ignores all but one type because we're making a single file per type. +func (g *genSet) Filter(c *generator.Context, t *types.Type) bool { return t == g.typeToMatch } + +func (g *genSet) Namers(c *generator.Context) namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.outputPackage, g.imports), + } +} + +func (g *genSet) Imports(c *generator.Context) (imports []string) { + return append(g.imports.ImportLines(), "reflect", "sort") +} + +// args constructs arguments for templates. Usage: +// g.args(t, "key1", value1, "key2", value2, ...) +// +// 't' is loaded with the key 'type'. +// +// We could use t directly as the argument, but doing it this way makes it easy +// to mix in additional parameters. This feature is not used in this set +// generator, but is present as an example. +func (g *genSet) args(t *types.Type, kv ...interface{}) interface{} { + m := map[interface{}]interface{}{"type": t} + for i := 0; i < len(kv)/2; i++ { + m[kv[i*2]] = kv[i*2+1] + } + return m +} + +// GenerateType makes the body of a file implementing a set for type t. +func (g *genSet) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + sw.Do(setCode, g.args(t)) + sw.Do("func less$.type|public$(lhs, rhs $.type|raw$) bool {\n", g.args(t)) + g.lessBody(sw, t) + sw.Do("}\n", g.args(t)) + return sw.Error() +} + +func (g *genSet) lessBody(sw *generator.SnippetWriter, t *types.Type) { + // TODO: make this recursive, handle pointers and multiple nested structs... + switch t.Kind { + case types.Struct: + for _, m := range types.FlattenMembers(t.Members) { + sw.Do("if lhs.$.Name$ < rhs.$.Name$ { return true }\n", m) + sw.Do("if lhs.$.Name$ > rhs.$.Name$ { return false }\n", m) + } + sw.Do("return false\n", nil) + default: + sw.Do("return lhs < rhs\n", nil) + } +} + +// written to the "empty.go" file. +var emptyTypeDecl = ` +// Empty is public since it is used by some internal API objects for conversions between external +// string arrays and internal sets, and conversion logic requires public types today. +type Empty struct{} +` + +// Written for every type. If you've never used text/template before: +// $.type$ refers to the source type; |public means to +// call the function giving the public name, |raw the raw type name. +var setCode = `// sets.$.type|public$ is a set of $.type|raw$s, implemented via map[$.type|raw$]struct{} for minimal memory consumption. +type $.type|public$ map[$.type|raw$]Empty + +// New$.type|public$ creates a $.type|public$ from a list of values. +func New$.type|public$(items ...$.type|raw$) $.type|public$ { + ss := make($.type|public$, len(items)) + ss.Insert(items...) + return ss +} + +// $.type|public$KeySet creates a $.type|public$ from a keys of a map[$.type|raw$](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func $.type|public$KeySet(theMap interface{}) $.type|public$ { + v := reflect.ValueOf(theMap) + ret := $.type|public${} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().($.type|raw$)) + } + return ret +} + +// Insert adds items to the set. +func (s $.type|public$) Insert(items ...$.type|raw$) $.type|public$ { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s $.type|public$) Delete(items ...$.type|raw$) $.type|public$ { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s $.type|public$) Has(item $.type|raw$) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s $.type|public$) HasAll(items ...$.type|raw$) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s $.type|public$) HasAny(items ...$.type|raw$) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Clone returns a new set which is a copy of the current set. +func (s $.type|public$) Clone() $.type|public$ { + result := make($.type|public$, len(s)) + for key := range s { + result.Insert(key) + } + return result +} + +// Difference returns a set of objects that are not in s2. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s1 $.type|public$) Difference(s2 $.type|public$) $.type|public$ { + result := New$.type|public$() + for key := range s1 { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.SymmetricDifference(s2) = {a3, a4, a5} +// s2.SymmetricDifference(s1) = {a3, a4, a5} +func (s1 $.type|public$) SymmetricDifference(s2 $.type|public$) $.type|public$ { + return s1.Difference(s2).Union(s2.Difference(s1)) +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 $.type|public$) Union(s2 $.type|public$) $.type|public$ { + result := s1.Clone() + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 $.type|public$) Intersection(s2 $.type|public$) $.type|public$ { + var walk, other $.type|public$ + result := New$.type|public$() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 $.type|public$) IsSuperset(s2 $.type|public$) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 $.type|public$) Equal(s2 $.type|public$) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOf$.type|public$ []$.type|raw$ + +func (s sortableSliceOf$.type|public$) Len() int { return len(s) } +func (s sortableSliceOf$.type|public$) Less(i, j int) bool { return less$.type|public$(s[i], s[j]) } +func (s sortableSliceOf$.type|public$) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted $.type|raw$ slice. +func (s $.type|public$) List() []$.type|raw$ { + res := make(sortableSliceOf$.type|public$, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []$.type|raw$(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s $.type|public$) UnsortedList() []$.type|raw$ { + res :=make([]$.type|raw$, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s $.type|public$) PopAny() ($.type|raw$, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue $.type|raw$ + return zeroValue, false +} + +// Len returns the size of the set. +func (s $.type|public$) Len() int { + return len(s) +} + +` diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/tags.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/tags.go new file mode 100644 index 000000000000..52e87677183f --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/generators/tags.go @@ -0,0 +1,33 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "k8s.io/gengo/types" + "k8s.io/klog/v2" +) + +// extractBoolTagOrDie gets the comment-tags for the key and asserts that, if +// it exists, the value is boolean. If the tag did not exist, it returns +// false. +func extractBoolTagOrDie(key string, lines []string) bool { + val, err := types.ExtractSingleBoolCommentTag("+", key, false, lines) + if err != nil { + klog.Fatalf(err.Error()) + } + return val +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/byte.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/byte.go new file mode 100644 index 000000000000..e9660c2f3a94 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/byte.go @@ -0,0 +1,221 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Byte is a set of bytes, implemented via map[byte]struct{} for minimal memory consumption. +type Byte map[byte]Empty + +// NewByte creates a Byte from a list of values. +func NewByte(items ...byte) Byte { + ss := make(Byte, len(items)) + ss.Insert(items...) + return ss +} + +// ByteKeySet creates a Byte from a keys of a map[byte](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func ByteKeySet(theMap interface{}) Byte { + v := reflect.ValueOf(theMap) + ret := Byte{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(byte)) + } + return ret +} + +// Insert adds items to the set. +func (s Byte) Insert(items ...byte) Byte { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s Byte) Delete(items ...byte) Byte { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s Byte) Has(item byte) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Byte) HasAll(items ...byte) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Byte) HasAny(items ...byte) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Clone returns a new set which is a copy of the current set. +func (s Byte) Clone() Byte { + result := make(Byte, len(s)) + for key := range s { + result.Insert(key) + } + return result +} + +// Difference returns a set of objects that are not in s2. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s1 Byte) Difference(s2 Byte) Byte { + result := NewByte() + for key := range s1 { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.SymmetricDifference(s2) = {a3, a4, a5} +// s2.SymmetricDifference(s1) = {a3, a4, a5} +func (s1 Byte) SymmetricDifference(s2 Byte) Byte { + return s1.Difference(s2).Union(s2.Difference(s1)) +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Byte) Union(s2 Byte) Byte { + result := s1.Clone() + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Byte) Intersection(s2 Byte) Byte { + var walk, other Byte + result := NewByte() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Byte) IsSuperset(s2 Byte) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Byte) Equal(s2 Byte) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfByte []byte + +func (s sortableSliceOfByte) Len() int { return len(s) } +func (s sortableSliceOfByte) Less(i, j int) bool { return lessByte(s[i], s[j]) } +func (s sortableSliceOfByte) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted byte slice. +func (s Byte) List() []byte { + res := make(sortableSliceOfByte, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []byte(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Byte) UnsortedList() []byte { + res := make([]byte, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Byte) PopAny() (byte, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue byte + return zeroValue, false +} + +// Len returns the size of the set. +func (s Byte) Len() int { + return len(s) +} + +func lessByte(lhs, rhs byte) bool { + return lhs < rhs +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/doc.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/doc.go new file mode 100644 index 000000000000..b152a0bf00f2 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +// Package sets has auto-generated set types. +package sets diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/empty.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/empty.go new file mode 100644 index 000000000000..e11e622c5ba0 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/empty.go @@ -0,0 +1,23 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +// Empty is public since it is used by some internal API objects for conversions between external +// string arrays and internal sets, and conversion logic requires public types today. +type Empty struct{} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int.go new file mode 100644 index 000000000000..f614f06e1f97 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int.go @@ -0,0 +1,221 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Int is a set of ints, implemented via map[int]struct{} for minimal memory consumption. +type Int map[int]Empty + +// NewInt creates a Int from a list of values. +func NewInt(items ...int) Int { + ss := make(Int, len(items)) + ss.Insert(items...) + return ss +} + +// IntKeySet creates a Int from a keys of a map[int](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func IntKeySet(theMap interface{}) Int { + v := reflect.ValueOf(theMap) + ret := Int{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(int)) + } + return ret +} + +// Insert adds items to the set. +func (s Int) Insert(items ...int) Int { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s Int) Delete(items ...int) Int { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s Int) Has(item int) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Int) HasAll(items ...int) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Int) HasAny(items ...int) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Clone returns a new set which is a copy of the current set. +func (s Int) Clone() Int { + result := make(Int, len(s)) + for key := range s { + result.Insert(key) + } + return result +} + +// Difference returns a set of objects that are not in s2. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s1 Int) Difference(s2 Int) Int { + result := NewInt() + for key := range s1 { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.SymmetricDifference(s2) = {a3, a4, a5} +// s2.SymmetricDifference(s1) = {a3, a4, a5} +func (s1 Int) SymmetricDifference(s2 Int) Int { + return s1.Difference(s2).Union(s2.Difference(s1)) +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Int) Union(s2 Int) Int { + result := s1.Clone() + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Int) Intersection(s2 Int) Int { + var walk, other Int + result := NewInt() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Int) IsSuperset(s2 Int) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Int) Equal(s2 Int) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfInt []int + +func (s sortableSliceOfInt) Len() int { return len(s) } +func (s sortableSliceOfInt) Less(i, j int) bool { return lessInt(s[i], s[j]) } +func (s sortableSliceOfInt) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted int slice. +func (s Int) List() []int { + res := make(sortableSliceOfInt, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []int(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Int) UnsortedList() []int { + res := make([]int, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Int) PopAny() (int, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue int + return zeroValue, false +} + +// Len returns the size of the set. +func (s Int) Len() int { + return len(s) +} + +func lessInt(lhs, rhs int) bool { + return lhs < rhs +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int64.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int64.go new file mode 100644 index 000000000000..995d99bd90db --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/int64.go @@ -0,0 +1,221 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Int64 is a set of int64s, implemented via map[int64]struct{} for minimal memory consumption. +type Int64 map[int64]Empty + +// NewInt64 creates a Int64 from a list of values. +func NewInt64(items ...int64) Int64 { + ss := make(Int64, len(items)) + ss.Insert(items...) + return ss +} + +// Int64KeySet creates a Int64 from a keys of a map[int64](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func Int64KeySet(theMap interface{}) Int64 { + v := reflect.ValueOf(theMap) + ret := Int64{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(int64)) + } + return ret +} + +// Insert adds items to the set. +func (s Int64) Insert(items ...int64) Int64 { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s Int64) Delete(items ...int64) Int64 { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s Int64) Has(item int64) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Int64) HasAll(items ...int64) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Int64) HasAny(items ...int64) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Clone returns a new set which is a copy of the current set. +func (s Int64) Clone() Int64 { + result := make(Int64, len(s)) + for key := range s { + result.Insert(key) + } + return result +} + +// Difference returns a set of objects that are not in s2. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s1 Int64) Difference(s2 Int64) Int64 { + result := NewInt64() + for key := range s1 { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.SymmetricDifference(s2) = {a3, a4, a5} +// s2.SymmetricDifference(s1) = {a3, a4, a5} +func (s1 Int64) SymmetricDifference(s2 Int64) Int64 { + return s1.Difference(s2).Union(s2.Difference(s1)) +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Int64) Union(s2 Int64) Int64 { + result := s1.Clone() + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Int64) Intersection(s2 Int64) Int64 { + var walk, other Int64 + result := NewInt64() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Int64) IsSuperset(s2 Int64) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Int64) Equal(s2 Int64) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfInt64 []int64 + +func (s sortableSliceOfInt64) Len() int { return len(s) } +func (s sortableSliceOfInt64) Less(i, j int) bool { return lessInt64(s[i], s[j]) } +func (s sortableSliceOfInt64) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted int64 slice. +func (s Int64) List() []int64 { + res := make(sortableSliceOfInt64, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []int64(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Int64) UnsortedList() []int64 { + res := make([]int64, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Int64) PopAny() (int64, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue int64 + return zeroValue, false +} + +// Len returns the size of the set. +func (s Int64) Len() int { + return len(s) +} + +func lessInt64(lhs, rhs int64) bool { + return lhs < rhs +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/string.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/string.go new file mode 100644 index 000000000000..4a4a92fd21fd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/set-gen/sets/string.go @@ -0,0 +1,221 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.String is a set of strings, implemented via map[string]struct{} for minimal memory consumption. +type String map[string]Empty + +// NewString creates a String from a list of values. +func NewString(items ...string) String { + ss := make(String, len(items)) + ss.Insert(items...) + return ss +} + +// StringKeySet creates a String from a keys of a map[string](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func StringKeySet(theMap interface{}) String { + v := reflect.ValueOf(theMap) + ret := String{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(string)) + } + return ret +} + +// Insert adds items to the set. +func (s String) Insert(items ...string) String { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s String) Delete(items ...string) String { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s String) Has(item string) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s String) HasAll(items ...string) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s String) HasAny(items ...string) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Clone returns a new set which is a copy of the current set. +func (s String) Clone() String { + result := make(String, len(s)) + for key := range s { + result.Insert(key) + } + return result +} + +// Difference returns a set of objects that are not in s2. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s1 String) Difference(s2 String) String { + result := NewString() + for key := range s1 { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.SymmetricDifference(s2) = {a3, a4, a5} +// s2.SymmetricDifference(s1) = {a3, a4, a5} +func (s1 String) SymmetricDifference(s2 String) String { + return s1.Difference(s2).Union(s2.Difference(s1)) +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 String) Union(s2 String) String { + result := s1.Clone() + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 String) Intersection(s2 String) String { + var walk, other String + result := NewString() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 String) IsSuperset(s2 String) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 String) Equal(s2 String) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfString []string + +func (s sortableSliceOfString) Len() int { return len(s) } +func (s sortableSliceOfString) Less(i, j int) bool { return lessString(s[i], s[j]) } +func (s sortableSliceOfString) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted string slice. +func (s String) List() []string { + res := make(sortableSliceOfString, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []string(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s String) UnsortedList() []string { + res := make([]string, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s String) PopAny() (string, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue string + return zeroValue, false +} + +// Len returns the size of the set. +func (s String) Len() int { + return len(s) +} + +func lessString(lhs, rhs string) bool { + return lhs < rhs +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_generator.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_generator.go new file mode 100644 index 000000000000..f9476682148d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_generator.go @@ -0,0 +1,62 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "io" + + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +const ( + GolangFileType = "golang" +) + +// DefaultGen implements a do-nothing Generator. +// +// It can be used to implement static content files. +type DefaultGen struct { + // OptionalName, if present, will be used for the generator's name, and + // the filename (with ".go" appended). + OptionalName string + + // OptionalBody, if present, will be used as the return from the "Init" + // method. This causes it to be static content for the entire file if + // no other generator touches the file. + OptionalBody []byte +} + +func (d DefaultGen) Name() string { return d.OptionalName } +func (d DefaultGen) Filter(*Context, *types.Type) bool { return true } +func (d DefaultGen) Namers(*Context) namer.NameSystems { return nil } +func (d DefaultGen) Imports(*Context) []string { return []string{} } +func (d DefaultGen) PackageVars(*Context) []string { return []string{} } +func (d DefaultGen) PackageConsts(*Context) []string { return []string{} } +func (d DefaultGen) GenerateType(*Context, *types.Type, io.Writer) error { return nil } +func (d DefaultGen) Filename() string { return d.OptionalName + ".go" } +func (d DefaultGen) FileType() string { return GolangFileType } +func (d DefaultGen) Finalize(*Context, io.Writer) error { return nil } + +func (d DefaultGen) Init(c *Context, w io.Writer) error { + _, err := w.Write(d.OptionalBody) + return err +} + +var ( + _ = Generator(DefaultGen{}) +) diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_package.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_package.go new file mode 100644 index 000000000000..dcf0883235dd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/default_package.go @@ -0,0 +1,75 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "k8s.io/gengo/types" +) + +// DefaultPackage contains a default implementation of Package. +type DefaultPackage struct { + // Short name of package, used in the "package xxxx" line. + PackageName string + // Import path of the package, and the location on disk of the package. + PackagePath string + // The location of the package on disk. + Source string + + // Emitted at the top of every file. + HeaderText []byte + + // Emitted only for a "doc.go" file; appended to the HeaderText for + // that file. + PackageDocumentation []byte + + // If non-nil, will be called on "Generators"; otherwise, the static + // list will be used. So you should set only one of these two fields. + GeneratorFunc func(*Context) []Generator + GeneratorList []Generator + + // Optional; filters the types exposed to the generators. + FilterFunc func(*Context, *types.Type) bool +} + +func (d *DefaultPackage) Name() string { return d.PackageName } +func (d *DefaultPackage) Path() string { return d.PackagePath } +func (d *DefaultPackage) SourcePath() string { return d.Source } + +func (d *DefaultPackage) Filter(c *Context, t *types.Type) bool { + if d.FilterFunc != nil { + return d.FilterFunc(c, t) + } + return true +} + +func (d *DefaultPackage) Generators(c *Context) []Generator { + if d.GeneratorFunc != nil { + return d.GeneratorFunc(c) + } + return d.GeneratorList +} + +func (d *DefaultPackage) Header(filename string) []byte { + if filename == "doc.go" { + return append(d.HeaderText, d.PackageDocumentation...) + } + return d.HeaderText +} + +var ( + _ = Package(&DefaultPackage{}) +) diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/doc.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/doc.go new file mode 100644 index 000000000000..d8e12534a44e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/doc.go @@ -0,0 +1,31 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package generator defines an interface for code generators to implement. +// +// To use this package, you'll implement the "Package" and "Generator" +// interfaces; you'll call NewContext to load up the types you want to work +// with, and then you'll call one or more of the Execute methods. See the +// interface definitions for explanations. All output will have gofmt called on +// it automatically, so you do not need to worry about generating correct +// indentation. +// +// This package also exposes SnippetWriter. SnippetWriter reduces to a minimum +// the boilerplate involved in setting up a template from go's text/template +// package. Additionally, all naming systems in the Context will be added as +// functions to the parsed template, so that they can be called directly from +// your templates! +package generator // import "k8s.io/gengo/generator" diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/error_tracker.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/error_tracker.go new file mode 100644 index 000000000000..964dae37ba55 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/error_tracker.go @@ -0,0 +1,50 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "io" +) + +// ErrorTracker tracks errors to the underlying writer, so that you can ignore +// them until you're ready to return. +type ErrorTracker struct { + io.Writer + err error +} + +// NewErrorTracker makes a new error tracker; note that it implements io.Writer. +func NewErrorTracker(w io.Writer) *ErrorTracker { + return &ErrorTracker{Writer: w} +} + +// Write intercepts calls to Write. +func (et *ErrorTracker) Write(p []byte) (n int, err error) { + if et.err != nil { + return 0, et.err + } + n, err = et.Writer.Write(p) + if err != nil { + et.err = err + } + return n, err +} + +// Error returns nil if no error has occurred, otherwise it returns the error. +func (et *ErrorTracker) Error() error { + return et.err +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/execute.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/execute.go new file mode 100644 index 000000000000..f096741bc868 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/execute.go @@ -0,0 +1,329 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "golang.org/x/tools/imports" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + + "k8s.io/klog/v2" +) + +func errs2strings(errors []error) []string { + strs := make([]string, len(errors)) + for i := range errors { + strs[i] = errors[i].Error() + } + return strs +} + +// ExecutePackages runs the generators for every package in 'packages'. 'outDir' +// is the base directory in which to place all the generated packages; it +// should be a physical path on disk, not an import path. e.g.: +// /path/to/home/path/to/gopath/src/ +// Each package has its import path already, this will be appended to 'outDir'. +func (c *Context) ExecutePackages(outDir string, packages Packages) error { + var errors []error + for _, p := range packages { + if err := c.ExecutePackage(outDir, p); err != nil { + errors = append(errors, err) + } + } + if len(errors) > 0 { + return fmt.Errorf("some packages had errors:\n%v\n", strings.Join(errs2strings(errors), "\n")) + } + return nil +} + +type DefaultFileType struct { + Format func([]byte) ([]byte, error) + Assemble func(io.Writer, *File) +} + +func (ft DefaultFileType) AssembleFile(f *File, pathname string) error { + klog.V(5).Infof("Assembling file %q", pathname) + destFile, err := os.Create(pathname) + if err != nil { + return err + } + defer destFile.Close() + + b := &bytes.Buffer{} + et := NewErrorTracker(b) + ft.Assemble(et, f) + if et.Error() != nil { + return et.Error() + } + if formatted, err := ft.Format(b.Bytes()); err != nil { + err = fmt.Errorf("unable to format file %q (%v).", pathname, err) + // Write the file anyway, so they can see what's going wrong and fix the generator. + if _, err2 := destFile.Write(b.Bytes()); err2 != nil { + return err2 + } + return err + } else { + _, err = destFile.Write(formatted) + return err + } +} + +func (ft DefaultFileType) VerifyFile(f *File, pathname string) error { + klog.V(5).Infof("Verifying file %q", pathname) + friendlyName := filepath.Join(f.PackageName, f.Name) + b := &bytes.Buffer{} + et := NewErrorTracker(b) + ft.Assemble(et, f) + if et.Error() != nil { + return et.Error() + } + formatted, err := ft.Format(b.Bytes()) + if err != nil { + return fmt.Errorf("unable to format the output for %q: %v", friendlyName, err) + } + existing, err := ioutil.ReadFile(pathname) + if err != nil { + return fmt.Errorf("unable to read file %q for comparison: %v", friendlyName, err) + } + if bytes.Compare(formatted, existing) == 0 { + return nil + } + // Be nice and find the first place where they differ + i := 0 + for i < len(formatted) && i < len(existing) && formatted[i] == existing[i] { + i++ + } + eDiff, fDiff := existing[i:], formatted[i:] + if len(eDiff) > 100 { + eDiff = eDiff[:100] + } + if len(fDiff) > 100 { + fDiff = fDiff[:100] + } + return fmt.Errorf("output for %q differs; first existing/expected diff: \n %q\n %q", friendlyName, string(eDiff), string(fDiff)) +} + +func assembleGolangFile(w io.Writer, f *File) { + w.Write(f.Header) + fmt.Fprintf(w, "package %v\n\n", f.PackageName) + + if len(f.Imports) > 0 { + fmt.Fprint(w, "import (\n") + for i := range f.Imports { + if strings.Contains(i, "\"") { + // they included quotes, or are using the + // `name "path/to/pkg"` format. + fmt.Fprintf(w, "\t%s\n", i) + } else { + fmt.Fprintf(w, "\t%q\n", i) + } + } + fmt.Fprint(w, ")\n\n") + } + + if f.Vars.Len() > 0 { + fmt.Fprint(w, "var (\n") + w.Write(f.Vars.Bytes()) + fmt.Fprint(w, ")\n\n") + } + + if f.Consts.Len() > 0 { + fmt.Fprint(w, "const (\n") + w.Write(f.Consts.Bytes()) + fmt.Fprint(w, ")\n\n") + } + + w.Write(f.Body.Bytes()) +} + +func importsWrapper(src []byte) ([]byte, error) { + return imports.Process("", src, nil) +} + +func NewGolangFile() *DefaultFileType { + return &DefaultFileType{ + Format: importsWrapper, + Assemble: assembleGolangFile, + } +} + +// format should be one line only, and not end with \n. +func addIndentHeaderComment(b *bytes.Buffer, format string, args ...interface{}) { + if b.Len() > 0 { + fmt.Fprintf(b, "\n// "+format+"\n", args...) + } else { + fmt.Fprintf(b, "// "+format+"\n", args...) + } +} + +func (c *Context) filteredBy(f func(*Context, *types.Type) bool) *Context { + c2 := *c + c2.Order = []*types.Type{} + for _, t := range c.Order { + if f(c, t) { + c2.Order = append(c2.Order, t) + } + } + return &c2 +} + +// make a new context; inheret c.Namers, but add on 'namers'. In case of a name +// collision, the namer in 'namers' wins. +func (c *Context) addNameSystems(namers namer.NameSystems) *Context { + if namers == nil { + return c + } + c2 := *c + // Copy the existing name systems so we don't corrupt a parent context + c2.Namers = namer.NameSystems{} + for k, v := range c.Namers { + c2.Namers[k] = v + } + + for name, namer := range namers { + c2.Namers[name] = namer + } + return &c2 +} + +// ExecutePackage executes a single package. 'outDir' is the base directory in +// which to place the package; it should be a physical path on disk, not an +// import path. e.g.: '/path/to/home/path/to/gopath/src/' The package knows its +// import path already, this will be appended to 'outDir'. +func (c *Context) ExecutePackage(outDir string, p Package) error { + path := filepath.Join(outDir, p.Path()) + + // When working outside of GOPATH, we typically won't want to generate the + // full path for a package. For example, if our current project's root/base + // package is github.com/foo/bar, outDir=., p.Path()=github.com/foo/bar/generated, + // then we really want to be writing files to ./generated, not ./github.com/foo/bar/generated. + // The following will trim a path prefix (github.com/foo/bar) from p.Path() to arrive at + // a relative path that works with projects not in GOPATH. + if c.TrimPathPrefix != "" { + separator := string(filepath.Separator) + if !strings.HasSuffix(c.TrimPathPrefix, separator) { + c.TrimPathPrefix += separator + } + + path = strings.TrimPrefix(path, c.TrimPathPrefix) + } + klog.V(5).Infof("Processing package %q, disk location %q", p.Name(), path) + // Filter out any types the *package* doesn't care about. + packageContext := c.filteredBy(p.Filter) + os.MkdirAll(path, 0755) + files := map[string]*File{} + for _, g := range p.Generators(packageContext) { + // Filter out types the *generator* doesn't care about. + genContext := packageContext.filteredBy(g.Filter) + // Now add any extra name systems defined by this generator + genContext = genContext.addNameSystems(g.Namers(genContext)) + + fileType := g.FileType() + if len(fileType) == 0 { + return fmt.Errorf("generator %q must specify a file type", g.Name()) + } + f := files[g.Filename()] + if f == nil { + // This is the first generator to reference this file, so start it. + f = &File{ + Name: g.Filename(), + FileType: fileType, + PackageName: p.Name(), + PackagePath: p.Path(), + PackageSourcePath: p.SourcePath(), + Header: p.Header(g.Filename()), + Imports: map[string]struct{}{}, + } + files[f.Name] = f + } else { + if f.FileType != g.FileType() { + return fmt.Errorf("file %q already has type %q, but generator %q wants to use type %q", f.Name, f.FileType, g.Name(), g.FileType()) + } + } + + if vars := g.PackageVars(genContext); len(vars) > 0 { + addIndentHeaderComment(&f.Vars, "Package-wide variables from generator %q.", g.Name()) + for _, v := range vars { + if _, err := fmt.Fprintf(&f.Vars, "%s\n", v); err != nil { + return err + } + } + } + if consts := g.PackageConsts(genContext); len(consts) > 0 { + addIndentHeaderComment(&f.Consts, "Package-wide consts from generator %q.", g.Name()) + for _, v := range consts { + if _, err := fmt.Fprintf(&f.Consts, "%s\n", v); err != nil { + return err + } + } + } + if err := genContext.executeBody(&f.Body, g); err != nil { + return err + } + if imports := g.Imports(genContext); len(imports) > 0 { + for _, i := range imports { + f.Imports[i] = struct{}{} + } + } + } + + var errors []error + for _, f := range files { + finalPath := filepath.Join(path, f.Name) + assembler, ok := c.FileTypes[f.FileType] + if !ok { + return fmt.Errorf("the file type %q registered for file %q does not exist in the context", f.FileType, f.Name) + } + var err error + if c.Verify { + err = assembler.VerifyFile(f, finalPath) + } else { + err = assembler.AssembleFile(f, finalPath) + } + if err != nil { + errors = append(errors, err) + } + } + if len(errors) > 0 { + return fmt.Errorf("errors in package %q:\n%v\n", p.Path(), strings.Join(errs2strings(errors), "\n")) + } + return nil +} + +func (c *Context) executeBody(w io.Writer, generator Generator) error { + et := NewErrorTracker(w) + if err := generator.Init(c, et); err != nil { + return err + } + for _, t := range c.Order { + if err := generator.GenerateType(c, t, et); err != nil { + return err + } + } + if err := generator.Finalize(c, et); err != nil { + return err + } + return et.Error() +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/generator.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/generator.go new file mode 100644 index 000000000000..5614ae3b322c --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/generator.go @@ -0,0 +1,259 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "bytes" + "io" + + "k8s.io/gengo/namer" + "k8s.io/gengo/parser" + "k8s.io/gengo/types" +) + +// Package contains the contract for generating a package. +type Package interface { + // Name returns the package short name. + Name() string + // Path returns the package import path. + Path() string + // SourcePath returns the location of the package on disk. + SourcePath() string + + // Filter should return true if this package cares about this type. + // Otherwise, this type will be omitted from the type ordering for + // this package. + Filter(*Context, *types.Type) bool + + // Header should return a header for the file, including comment markers. + // Useful for copyright notices and doc strings. Include an + // autogeneration notice! Do not include the "package x" line. + Header(filename string) []byte + + // Generators returns the list of generators for this package. It is + // allowed for more than one generator to write to the same file. + // A Context is passed in case the list of generators depends on the + // input types. + Generators(*Context) []Generator +} + +type File struct { + Name string + FileType string + PackageName string + Header []byte + PackagePath string + PackageSourcePath string + Imports map[string]struct{} + Vars bytes.Buffer + Consts bytes.Buffer + Body bytes.Buffer +} + +type FileType interface { + AssembleFile(f *File, path string) error + VerifyFile(f *File, path string) error +} + +// Packages is a list of packages to generate. +type Packages []Package + +// Generator is the contract for anything that wants to do auto-generation. +// It's expected that the io.Writers passed to the below functions will be +// ErrorTrackers; this allows implementations to not check for io errors, +// making more readable code. +// +// The call order for the functions that take a Context is: +// 1. Filter() // Subsequent calls see only types that pass this. +// 2. Namers() // Subsequent calls see the namers provided by this. +// 3. PackageVars() +// 4. PackageConsts() +// 5. Init() +// 6. GenerateType() // Called N times, once per type in the context's Order. +// 7. Imports() +// +// You may have multiple generators for the same file. +type Generator interface { + // The name of this generator. Will be included in generated comments. + Name() string + + // Filter should return true if this generator cares about this type. + // (otherwise, GenerateType will not be called.) + // + // Filter is called before any of the generator's other functions; + // subsequent calls will get a context with only the types that passed + // this filter. + Filter(*Context, *types.Type) bool + + // If this generator needs special namers, return them here. These will + // override the original namers in the context if there is a collision. + // You may return nil if you don't need special names. These names will + // be available in the context passed to the rest of the generator's + // functions. + // + // A use case for this is to return a namer that tracks imports. + Namers(*Context) namer.NameSystems + + // Init should write an init function, and any other content that's not + // generated per-type. (It's not intended for generator specific + // initialization! Do that when your Package constructs the + // Generators.) + Init(*Context, io.Writer) error + + // Finalize should write finish up functions, and any other content that's not + // generated per-type. + Finalize(*Context, io.Writer) error + + // PackageVars should emit an array of variable lines. They will be + // placed in a var ( ... ) block. There's no need to include a leading + // \t or trailing \n. + PackageVars(*Context) []string + + // PackageConsts should emit an array of constant lines. They will be + // placed in a const ( ... ) block. There's no need to include a leading + // \t or trailing \n. + PackageConsts(*Context) []string + + // GenerateType should emit the code for a particular type. + GenerateType(*Context, *types.Type, io.Writer) error + + // Imports should return a list of necessary imports. They will be + // formatted correctly. You do not need to include quotation marks, + // return only the package name; alternatively, you can also return + // imports in the format `name "path/to/pkg"`. Imports will be called + // after Init, PackageVars, PackageConsts, and GenerateType, to allow + // you to keep track of what imports you actually need. + Imports(*Context) []string + + // Preferred file name of this generator, not including a path. It is + // allowed for multiple generators to use the same filename, but it's + // up to you to make sure they don't have colliding import names. + // TODO: provide per-file import tracking, removing the requirement + // that generators coordinate.. + Filename() string + + // A registered file type in the context to generate this file with. If + // the FileType is not found in the context, execution will stop. + FileType() string +} + +// Context is global context for individual generators to consume. +type Context struct { + // A map from the naming system to the names for that system. E.g., you + // might have public names and several private naming systems. + Namers namer.NameSystems + + // All the types, in case you want to look up something. + Universe types.Universe + + // Incoming imports, i.e. packages importing the given package. + incomingImports map[string][]string + + // Incoming transitive imports, i.e. the transitive closure of IncomingImports + incomingTransitiveImports map[string][]string + + // All the user-specified packages. This is after recursive expansion. + Inputs []string + + // The canonical ordering of the types (will be filtered by both the + // Package's and Generator's Filter methods). + Order []*types.Type + + // A set of types this context can process. If this is empty or nil, + // the default "golang" filetype will be provided. + FileTypes map[string]FileType + + // If true, Execute* calls will just verify that the existing output is + // correct. (You may set this after calling NewContext.) + Verify bool + + // Allows generators to add packages at runtime. + builder *parser.Builder + + // If specified, trim the prefix from a package's path before writing files. + TrimPathPrefix string +} + +// NewContext generates a context from the given builder, naming systems, and +// the naming system you wish to construct the canonical ordering from. +func NewContext(b *parser.Builder, nameSystems namer.NameSystems, canonicalOrderName string) (*Context, error) { + universe, err := b.FindTypes() + if err != nil { + return nil, err + } + + c := &Context{ + Namers: namer.NameSystems{}, + Universe: universe, + Inputs: b.FindPackages(), + FileTypes: map[string]FileType{ + GolangFileType: NewGolangFile(), + }, + builder: b, + } + + for name, systemNamer := range nameSystems { + c.Namers[name] = systemNamer + if name == canonicalOrderName { + orderer := namer.Orderer{Namer: systemNamer} + c.Order = orderer.OrderUniverse(universe) + } + } + return c, nil +} + +// IncomingImports returns the incoming imports for each package. The map is lazily computed. +func (ctxt *Context) IncomingImports() map[string][]string { + if ctxt.incomingImports == nil { + incoming := map[string][]string{} + for _, pkg := range ctxt.Universe { + for imp := range pkg.Imports { + incoming[imp] = append(incoming[imp], pkg.Path) + } + } + ctxt.incomingImports = incoming + } + return ctxt.incomingImports +} + +// TransitiveIncomingImports returns the transitive closure of the incoming imports for each package. +// The map is lazily computed. +func (ctxt *Context) TransitiveIncomingImports() map[string][]string { + if ctxt.incomingTransitiveImports == nil { + ctxt.incomingTransitiveImports = transitiveClosure(ctxt.IncomingImports()) + } + return ctxt.incomingTransitiveImports +} + +// AddDir adds a Go package to the context. The specified path must be a single +// go package import path. GOPATH, GOROOT, and the location of your go binary +// (`which go`) will all be searched, in the normal Go fashion. +// Deprecated. Please use AddDirectory. +func (ctxt *Context) AddDir(path string) error { + ctxt.incomingImports = nil + ctxt.incomingTransitiveImports = nil + return ctxt.builder.AddDirTo(path, &ctxt.Universe) +} + +// AddDirectory adds a Go package to the context. The specified path must be a +// single go package import path. GOPATH, GOROOT, and the location of your go +// binary (`which go`) will all be searched, in the normal Go fashion. +func (ctxt *Context) AddDirectory(path string) (*types.Package, error) { + ctxt.incomingImports = nil + ctxt.incomingTransitiveImports = nil + return ctxt.builder.AddDirectoryTo(path, &ctxt.Universe) +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go new file mode 100644 index 000000000000..60c899ac4649 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go @@ -0,0 +1,70 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "go/token" + "strings" + + "k8s.io/klog/v2" + + "k8s.io/gengo/namer" + "k8s.io/gengo/types" +) + +func NewImportTracker(typesToAdd ...*types.Type) namer.ImportTracker { + tracker := namer.NewDefaultImportTracker(types.Name{}) + tracker.IsInvalidType = func(*types.Type) bool { return false } + tracker.LocalName = func(name types.Name) string { return golangTrackerLocalName(&tracker, name) } + tracker.PrintImport = func(path, name string) string { return name + " \"" + path + "\"" } + + tracker.AddTypes(typesToAdd...) + return &tracker + +} + +func golangTrackerLocalName(tracker namer.ImportTracker, t types.Name) string { + path := t.Package + + // Using backslashes in package names causes gengo to produce Go code which + // will not compile with the gc compiler. See the comment on GoSeperator. + if strings.ContainsRune(path, '\\') { + klog.Warningf("Warning: backslash used in import path '%v', this is unsupported.\n", path) + } + + dirs := strings.Split(path, namer.GoSeperator) + for n := len(dirs) - 1; n >= 0; n-- { + // follow kube convention of not having anything between directory names + name := strings.Join(dirs[n:], "") + name = strings.Replace(name, "_", "", -1) + // These characters commonly appear in import paths for go + // packages, but aren't legal go names. So we'll sanitize. + name = strings.Replace(name, ".", "", -1) + name = strings.Replace(name, "-", "", -1) + if _, found := tracker.PathOf(name); found { + // This name collides with some other package + continue + } + + // If the import name is a Go keyword, prefix with an underscore. + if token.Lookup(name).IsKeyword() { + name = "_" + name + } + return name + } + panic("can't find import for " + path) +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/snippet_writer.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/snippet_writer.go new file mode 100644 index 000000000000..590775ff228b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/snippet_writer.go @@ -0,0 +1,154 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import ( + "fmt" + "io" + "runtime" + "text/template" +) + +// SnippetWriter is an attempt to make the template library usable. +// Methods are chainable, and you don't have to check Error() until you're all +// done. +type SnippetWriter struct { + w io.Writer + context *Context + // Left & right delimiters. text/template defaults to "{{" and "}}" + // which is totally unusable for go code based templates. + left, right string + funcMap template.FuncMap + err error +} + +// w is the destination; left and right are the delimiters; @ and $ are both +// reasonable choices. +// +// c is used to make a function for every naming system, to which you can pass +// a type and get the corresponding name. +func NewSnippetWriter(w io.Writer, c *Context, left, right string) *SnippetWriter { + sw := &SnippetWriter{ + w: w, + context: c, + left: left, + right: right, + funcMap: template.FuncMap{}, + } + for name, namer := range c.Namers { + sw.funcMap[name] = namer.Name + } + return sw +} + +// Do parses format and runs args through it. You can have arbitrary logic in +// the format (see the text/template documentation), but consider running many +// short templates with ordinary go logic in between--this may be more +// readable. Do is chainable. Any error causes every other call to do to be +// ignored, and the error will be returned by Error(). So you can check it just +// once, at the end of your function. +// +// 'args' can be quite literally anything; read the text/template documentation +// for details. Maps and structs work particularly nicely. Conveniently, the +// types package is designed to have structs that are easily referencable from +// the template language. +// +// Example: +// +// sw := generator.NewSnippetWriter(outBuffer, context, "$", "$") +// sw.Do(`The public type name is: $.type|public$`, map[string]interface{}{"type": t}) +// return sw.Error() +// +// Where: +// * "$" starts a template directive +// * "." references the entire thing passed as args +// * "type" therefore sees a map and looks up the key "type" +// * "|" means "pass the thing on the left to the thing on the right" +// * "public" is the name of a naming system, so the SnippetWriter has given +// the template a function called "public" that takes a *types.Type and +// returns the naming system's name. E.g., if the type is "string" this might +// return "String". +// * the second "$" ends the template directive. +// +// The map is actually not necessary. The below does the same thing: +// +// sw.Do(`The public type name is: $.|public$`, t) +// +// You may or may not find it more readable to use the map with a descriptive +// key, but if you want to pass more than one arg, the map or a custom struct +// becomes a requirement. You can do arbitrary logic inside these templates, +// but you should consider doing the logic in go and stitching them together +// for the sake of your readers. +// +// TODO: Change Do() to optionally take a list of pairs of parameters (key, value) +// and have it construct a combined map with that and args. +func (s *SnippetWriter) Do(format string, args interface{}) *SnippetWriter { + if s.err != nil { + return s + } + // Name the template by source file:line so it can be found when + // there's an error. + _, file, line, _ := runtime.Caller(1) + tmpl, err := template. + New(fmt.Sprintf("%s:%d", file, line)). + Delims(s.left, s.right). + Funcs(s.funcMap). + Parse(format) + if err != nil { + s.err = err + return s + } + err = tmpl.Execute(s.w, args) + if err != nil { + s.err = err + } + return s +} + +// Args exists to make it convenient to construct arguments for +// SnippetWriter.Do. +type Args map[interface{}]interface{} + +// With makes a copy of a and adds the given key, value pair. +func (a Args) With(key, value interface{}) Args { + a2 := Args{key: value} + for k, v := range a { + a2[k] = v + } + return a2 +} + +// WithArgs makes a copy of a and adds the given arguments. +func (a Args) WithArgs(rhs Args) Args { + a2 := Args{} + for k, v := range rhs { + a2[k] = v + } + for k, v := range a { + a2[k] = v + } + return a2 +} + +func (s *SnippetWriter) Out() io.Writer { + return s.w +} + +// Error returns any encountered error. +func (s *SnippetWriter) Error() error { + return s.err +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/transitive_closure.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/transitive_closure.go new file mode 100644 index 000000000000..385a49fce312 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/transitive_closure.go @@ -0,0 +1,65 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import "sort" + +type edge struct { + from string + to string +} + +func transitiveClosure(in map[string][]string) map[string][]string { + adj := make(map[edge]bool) + imports := make(map[string]struct{}) + for from, tos := range in { + for _, to := range tos { + adj[edge{from, to}] = true + imports[to] = struct{}{} + } + } + + // Warshal's algorithm + for k := range in { + for i := range in { + if !adj[edge{i, k}] { + continue + } + for j := range imports { + if adj[edge{i, j}] { + continue + } + if adj[edge{k, j}] { + adj[edge{i, j}] = true + } + } + } + } + + out := make(map[string][]string, len(in)) + for i := range in { + for j := range imports { + if adj[edge{i, j}] { + out[i] = append(out[i], j) + } + } + + sort.Strings(out[i]) + } + + return out +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/doc.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/doc.go new file mode 100644 index 000000000000..8a44ea995973 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/doc.go @@ -0,0 +1,31 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package namer has support for making different type naming systems. +// +// This is because sometimes you want to refer to the literal type, sometimes +// you want to make a name for the thing you're generating, and you want to +// make the name based on the type. For example, if you have `type foo string`, +// you want to be able to generate something like `func FooPrinter(f *foo) { +// Print(string(*f)) }`; that is, you want to refer to a public name, a literal +// name, and the underlying literal name. +// +// This package supports the idea of a "Namer" and a set of "NameSystems" to +// support these use cases. +// +// Additionally, a "RawNamer" can optionally keep track of what needs to be +// imported. +package namer // import "k8s.io/gengo/namer" diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go new file mode 100644 index 000000000000..37094b2deb5a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go @@ -0,0 +1,112 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "sort" + + "k8s.io/gengo/types" +) + +// ImportTracker may be passed to a namer.RawNamer, to track the imports needed +// for the types it names. +// +// TODO: pay attention to the package name (instead of renaming every package). +type DefaultImportTracker struct { + pathToName map[string]string + // forbidden names are in here. (e.g. "go" is a directory in which + // there is code, but "go" is not a legal name for a package, so we put + // it here to prevent us from naming any package "go") + nameToPath map[string]string + local types.Name + + // Returns true if a given types is an invalid type and should be ignored. + IsInvalidType func(*types.Type) bool + // Returns the final local name for the given name + LocalName func(types.Name) string + // Returns the "import" line for a given (path, name). + PrintImport func(string, string) string +} + +func NewDefaultImportTracker(local types.Name) DefaultImportTracker { + return DefaultImportTracker{ + pathToName: map[string]string{}, + nameToPath: map[string]string{}, + local: local, + } +} + +func (tracker *DefaultImportTracker) AddTypes(types ...*types.Type) { + for _, t := range types { + tracker.AddType(t) + } +} +func (tracker *DefaultImportTracker) AddType(t *types.Type) { + if tracker.local.Package == t.Name.Package { + return + } + + if tracker.IsInvalidType(t) { + if t.Kind == types.Builtin { + return + } + if _, ok := tracker.nameToPath[t.Name.Package]; !ok { + tracker.nameToPath[t.Name.Package] = "" + } + return + } + + if len(t.Name.Package) == 0 { + return + } + path := t.Name.Path + if len(path) == 0 { + path = t.Name.Package + } + if _, ok := tracker.pathToName[path]; ok { + return + } + name := tracker.LocalName(t.Name) + tracker.nameToPath[name] = path + tracker.pathToName[path] = name +} + +func (tracker *DefaultImportTracker) ImportLines() []string { + importPaths := []string{} + for path := range tracker.pathToName { + importPaths = append(importPaths, path) + } + sort.Sort(sort.StringSlice(importPaths)) + out := []string{} + for _, path := range importPaths { + out = append(out, tracker.PrintImport(path, tracker.pathToName[path])) + } + return out +} + +// LocalNameOf returns the name you would use to refer to the package at the +// specified path within the body of a file. +func (tracker *DefaultImportTracker) LocalNameOf(path string) string { + return tracker.pathToName[path] +} + +// PathOf returns the path that a given localName is referring to within the +// body of a file. +func (tracker *DefaultImportTracker) PathOf(localName string) (string, bool) { + name, ok := tracker.nameToPath[localName] + return name, ok +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go new file mode 100644 index 000000000000..6feb2d0c464b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go @@ -0,0 +1,394 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "fmt" + "path/filepath" + "strconv" + "strings" + + "k8s.io/gengo/types" +) + +const ( + // GoSeperator is used to split go import paths. + // Forward slash is used instead of filepath.Seperator because it is the + // only universally-accepted path delimiter and the only delimiter not + // potentially forbidden by Go compilers. (In particular gc does not allow + // the use of backslashes in import paths.) + // See https://golang.org/ref/spec#Import_declarations. + // See also https://github.com/kubernetes/gengo/issues/83#issuecomment-367040772. + GoSeperator = "/" +) + +// Returns whether a name is a private Go name. +func IsPrivateGoName(name string) bool { + return len(name) == 0 || strings.ToLower(name[:1]) == name[:1] +} + +// NewPublicNamer is a helper function that returns a namer that makes +// CamelCase names. See the NameStrategy struct for an explanation of the +// arguments to this constructor. +func NewPublicNamer(prependPackageNames int, ignoreWords ...string) *NameStrategy { + n := &NameStrategy{ + Join: Joiner(IC, IC), + IgnoreWords: map[string]bool{}, + PrependPackageNames: prependPackageNames, + } + for _, w := range ignoreWords { + n.IgnoreWords[w] = true + } + return n +} + +// NewPrivateNamer is a helper function that returns a namer that makes +// camelCase names. See the NameStrategy struct for an explanation of the +// arguments to this constructor. +func NewPrivateNamer(prependPackageNames int, ignoreWords ...string) *NameStrategy { + n := &NameStrategy{ + Join: Joiner(IL, IC), + IgnoreWords: map[string]bool{}, + PrependPackageNames: prependPackageNames, + } + for _, w := range ignoreWords { + n.IgnoreWords[w] = true + } + return n +} + +// NewRawNamer will return a Namer that makes a name by which you would +// directly refer to a type, optionally keeping track of the import paths +// necessary to reference the names it provides. Tracker may be nil. +// The 'pkg' is the full package name, in which the Namer is used - all +// types from that package will be referenced by just type name without +// referencing the package. +// +// For example, if the type is map[string]int, a raw namer will literally +// return "map[string]int". +// +// Or if the type, in package foo, is "type Bar struct { ... }", then the raw +// namer will return "foo.Bar" as the name of the type, and if 'tracker' was +// not nil, will record that package foo needs to be imported. +func NewRawNamer(pkg string, tracker ImportTracker) *rawNamer { + return &rawNamer{pkg: pkg, tracker: tracker} +} + +// Names is a map from Type to name, as defined by some Namer. +type Names map[*types.Type]string + +// Namer takes a type, and assigns a name. +// +// The purpose of this complexity is so that you can assign coherent +// side-by-side systems of names for the types. For example, you might want a +// public interface, a private implementation struct, and also to reference +// literally the type name. +// +// Note that it is safe to call your own Name() function recursively to find +// the names of keys, elements, etc. This is because anonymous types can't have +// cycles in their names, and named types don't require the sort of recursion +// that would be problematic. +type Namer interface { + Name(*types.Type) string +} + +// NameSystems is a map of a system name to a namer for that system. +type NameSystems map[string]Namer + +// NameStrategy is a general Namer. The easiest way to use it is to copy the +// Public/PrivateNamer variables, and modify the members you wish to change. +// +// The Name method produces a name for the given type, of the forms: +// Anonymous types: +// Named types: +// +// In all cases, every part of the name is run through the capitalization +// functions. +// +// The IgnoreWords map can be set if you have directory names that are +// semantically meaningless for naming purposes, e.g. "proto". +// +// Prefix and Suffix can be used to disambiguate parallel systems of type +// names. For example, if you want to generate an interface and an +// implementation, you might want to suffix one with "Interface" and the other +// with "Implementation". Another common use-- if you want to generate private +// types, and one of your source types could be "string", you can't use the +// default lowercase private namer. You'll have to add a suffix or prefix. +type NameStrategy struct { + Prefix, Suffix string + Join func(pre string, parts []string, post string) string + + // Add non-meaningful package directory names here (e.g. "proto") and + // they will be ignored. + IgnoreWords map[string]bool + + // If > 0, prepend exactly that many package directory names (or as + // many as there are). Package names listed in "IgnoreWords" will be + // ignored. + // + // For example, if Ignore words lists "proto" and type Foo is in + // pkg/server/frobbing/proto, then a value of 1 will give a type name + // of FrobbingFoo, 2 gives ServerFrobbingFoo, etc. + PrependPackageNames int + + // A cache of names thus far assigned by this namer. + Names +} + +// IC ensures the first character is uppercase. +func IC(in string) string { + if in == "" { + return in + } + return strings.ToUpper(in[:1]) + in[1:] +} + +// IL ensures the first character is lowercase. +func IL(in string) string { + if in == "" { + return in + } + return strings.ToLower(in[:1]) + in[1:] +} + +// Joiner lets you specify functions that preprocess the various components of +// a name before joining them. You can construct e.g. camelCase or CamelCase or +// any other way of joining words. (See the IC and IL convenience functions.) +func Joiner(first, others func(string) string) func(pre string, in []string, post string) string { + return func(pre string, in []string, post string) string { + tmp := []string{others(pre)} + for i := range in { + tmp = append(tmp, others(in[i])) + } + tmp = append(tmp, others(post)) + return first(strings.Join(tmp, "")) + } +} + +func (ns *NameStrategy) removePrefixAndSuffix(s string) string { + // The join function may have changed capitalization. + lowerIn := strings.ToLower(s) + lowerP := strings.ToLower(ns.Prefix) + lowerS := strings.ToLower(ns.Suffix) + b, e := 0, len(s) + if strings.HasPrefix(lowerIn, lowerP) { + b = len(ns.Prefix) + } + if strings.HasSuffix(lowerIn, lowerS) { + e -= len(ns.Suffix) + } + return s[b:e] +} + +var ( + importPathNameSanitizer = strings.NewReplacer("-", "_", ".", "") +) + +// filters out unwanted directory names and sanitizes remaining names. +func (ns *NameStrategy) filterDirs(path string) []string { + allDirs := strings.Split(path, GoSeperator) + dirs := make([]string, 0, len(allDirs)) + for _, p := range allDirs { + if ns.IgnoreWords == nil || !ns.IgnoreWords[p] { + dirs = append(dirs, importPathNameSanitizer.Replace(p)) + } + } + return dirs +} + +// See the comment on NameStrategy. +func (ns *NameStrategy) Name(t *types.Type) string { + if ns.Names == nil { + ns.Names = Names{} + } + if s, ok := ns.Names[t]; ok { + return s + } + + if t.Name.Package != "" { + dirs := append(ns.filterDirs(t.Name.Package), t.Name.Name) + i := ns.PrependPackageNames + 1 + dn := len(dirs) + if i > dn { + i = dn + } + name := ns.Join(ns.Prefix, dirs[dn-i:], ns.Suffix) + ns.Names[t] = name + return name + } + + // Only anonymous types remain. + var name string + switch t.Kind { + case types.Builtin: + name = ns.Join(ns.Prefix, []string{t.Name.Name}, ns.Suffix) + case types.Map: + name = ns.Join(ns.Prefix, []string{ + "Map", + ns.removePrefixAndSuffix(ns.Name(t.Key)), + "To", + ns.removePrefixAndSuffix(ns.Name(t.Elem)), + }, ns.Suffix) + case types.Slice: + name = ns.Join(ns.Prefix, []string{ + "Slice", + ns.removePrefixAndSuffix(ns.Name(t.Elem)), + }, ns.Suffix) + case types.Array: + name = ns.Join(ns.Prefix, []string{ + "Array", + ns.removePrefixAndSuffix(fmt.Sprintf("%d", t.Len)), + ns.removePrefixAndSuffix(ns.Name(t.Elem)), + }, ns.Suffix) + case types.Pointer: + name = ns.Join(ns.Prefix, []string{ + "Pointer", + ns.removePrefixAndSuffix(ns.Name(t.Elem)), + }, ns.Suffix) + case types.Struct: + names := []string{"Struct"} + for _, m := range t.Members { + names = append(names, ns.removePrefixAndSuffix(ns.Name(m.Type))) + } + name = ns.Join(ns.Prefix, names, ns.Suffix) + case types.Chan: + name = ns.Join(ns.Prefix, []string{ + "Chan", + ns.removePrefixAndSuffix(ns.Name(t.Elem)), + }, ns.Suffix) + case types.Interface: + // TODO: add to name test + names := []string{"Interface"} + for _, m := range t.Methods { + // TODO: include function signature + names = append(names, m.Name.Name) + } + name = ns.Join(ns.Prefix, names, ns.Suffix) + case types.Func: + // TODO: add to name test + parts := []string{"Func"} + for _, pt := range t.Signature.Parameters { + parts = append(parts, ns.removePrefixAndSuffix(ns.Name(pt))) + } + parts = append(parts, "Returns") + for _, rt := range t.Signature.Results { + parts = append(parts, ns.removePrefixAndSuffix(ns.Name(rt))) + } + name = ns.Join(ns.Prefix, parts, ns.Suffix) + default: + name = "unnameable_" + string(t.Kind) + } + ns.Names[t] = name + return name +} + +// ImportTracker allows a raw namer to keep track of the packages needed for +// import. You can implement yourself or use the one in the generation package. +type ImportTracker interface { + AddType(*types.Type) + LocalNameOf(packagePath string) string + PathOf(localName string) (string, bool) + ImportLines() []string +} + +type rawNamer struct { + pkg string + tracker ImportTracker + Names +} + +// Name makes a name the way you'd write it to literally refer to type t, +// making ordinary assumptions about how you've imported t's package (or using +// r.tracker to specifically track the package imports). +func (r *rawNamer) Name(t *types.Type) string { + if r.Names == nil { + r.Names = Names{} + } + if name, ok := r.Names[t]; ok { + return name + } + if t.Name.Package != "" { + var name string + if r.tracker != nil { + r.tracker.AddType(t) + if t.Name.Package == r.pkg { + name = t.Name.Name + } else { + name = r.tracker.LocalNameOf(t.Name.Package) + "." + t.Name.Name + } + } else { + if t.Name.Package == r.pkg { + name = t.Name.Name + } else { + name = filepath.Base(t.Name.Package) + "." + t.Name.Name + } + } + r.Names[t] = name + return name + } + var name string + switch t.Kind { + case types.Builtin: + name = t.Name.Name + case types.Map: + name = "map[" + r.Name(t.Key) + "]" + r.Name(t.Elem) + case types.Slice: + name = "[]" + r.Name(t.Elem) + case types.Array: + l := strconv.Itoa(int(t.Len)) + name = "[" + l + "]" + r.Name(t.Elem) + case types.Pointer: + name = "*" + r.Name(t.Elem) + case types.Struct: + elems := []string{} + for _, m := range t.Members { + elems = append(elems, m.Name+" "+r.Name(m.Type)) + } + name = "struct{" + strings.Join(elems, "; ") + "}" + case types.Chan: + // TODO: include directionality + name = "chan " + r.Name(t.Elem) + case types.Interface: + // TODO: add to name test + elems := []string{} + for _, m := range t.Methods { + // TODO: include function signature + elems = append(elems, m.Name.Name) + } + name = "interface{" + strings.Join(elems, "; ") + "}" + case types.Func: + // TODO: add to name test + params := []string{} + for _, pt := range t.Signature.Parameters { + params = append(params, r.Name(pt)) + } + results := []string{} + for _, rt := range t.Signature.Results { + results = append(results, r.Name(rt)) + } + name = "func(" + strings.Join(params, ",") + ")" + if len(results) == 1 { + name += " " + results[0] + } else if len(results) > 1 { + name += " (" + strings.Join(results, ",") + ")" + } + default: + name = "unnameable_" + string(t.Kind) + } + r.Names[t] = name + return name +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/order.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/order.go new file mode 100644 index 000000000000..fd89be9b0837 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/order.go @@ -0,0 +1,72 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "sort" + + "k8s.io/gengo/types" +) + +// Orderer produces an ordering of types given a Namer. +type Orderer struct { + Namer +} + +// OrderUniverse assigns a name to every type in the Universe, including Types, +// Functions and Variables, and returns a list sorted by those names. +func (o *Orderer) OrderUniverse(u types.Universe) []*types.Type { + list := tList{ + namer: o.Namer, + } + for _, p := range u { + for _, t := range p.Types { + list.types = append(list.types, t) + } + for _, f := range p.Functions { + list.types = append(list.types, f) + } + for _, v := range p.Variables { + list.types = append(list.types, v) + } + for _, v := range p.Constants { + list.types = append(list.types, v) + } + } + sort.Sort(list) + return list.types +} + +// OrderTypes assigns a name to every type, and returns a list sorted by those +// names. +func (o *Orderer) OrderTypes(typeList []*types.Type) []*types.Type { + list := tList{ + namer: o.Namer, + types: typeList, + } + sort.Sort(list) + return list.types +} + +type tList struct { + namer Namer + types []*types.Type +} + +func (t tList) Len() int { return len(t.types) } +func (t tList) Less(i, j int) bool { return t.namer.Name(t.types[i]) < t.namer.Name(t.types[j]) } +func (t tList) Swap(i, j int) { t.types[i], t.types[j] = t.types[j], t.types[i] } diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/plural_namer.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/plural_namer.go new file mode 100644 index 000000000000..0e3ebbf262a7 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/plural_namer.go @@ -0,0 +1,120 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package namer + +import ( + "strings" + + "k8s.io/gengo/types" +) + +var consonants = "bcdfghjklmnpqrstvwxyz" + +type pluralNamer struct { + // key is the case-sensitive type name, value is the case-insensitive + // intended output. + exceptions map[string]string + finalize func(string) string +} + +// NewPublicPluralNamer returns a namer that returns the plural form of the input +// type's name, starting with a uppercase letter. +func NewPublicPluralNamer(exceptions map[string]string) *pluralNamer { + return &pluralNamer{exceptions, IC} +} + +// NewPrivatePluralNamer returns a namer that returns the plural form of the input +// type's name, starting with a lowercase letter. +func NewPrivatePluralNamer(exceptions map[string]string) *pluralNamer { + return &pluralNamer{exceptions, IL} +} + +// NewAllLowercasePluralNamer returns a namer that returns the plural form of the input +// type's name, with all letters in lowercase. +func NewAllLowercasePluralNamer(exceptions map[string]string) *pluralNamer { + return &pluralNamer{exceptions, strings.ToLower} +} + +// Name returns the plural form of the type's name. If the type's name is found +// in the exceptions map, the map value is returned. +func (r *pluralNamer) Name(t *types.Type) string { + singular := t.Name.Name + var plural string + var ok bool + if plural, ok = r.exceptions[singular]; ok { + return r.finalize(plural) + } + if len(singular) < 2 { + return r.finalize(singular) + } + + switch rune(singular[len(singular)-1]) { + case 's', 'x', 'z': + plural = esPlural(singular) + case 'y': + sl := rune(singular[len(singular)-2]) + if isConsonant(sl) { + plural = iesPlural(singular) + } else { + plural = sPlural(singular) + } + case 'h': + sl := rune(singular[len(singular)-2]) + if sl == 'c' || sl == 's' { + plural = esPlural(singular) + } else { + plural = sPlural(singular) + } + case 'e': + sl := rune(singular[len(singular)-2]) + if sl == 'f' { + plural = vesPlural(singular[:len(singular)-1]) + } else { + plural = sPlural(singular) + } + case 'f': + plural = vesPlural(singular) + default: + plural = sPlural(singular) + } + return r.finalize(plural) +} + +func iesPlural(singular string) string { + return singular[:len(singular)-1] + "ies" +} + +func vesPlural(singular string) string { + return singular[:len(singular)-1] + "ves" +} + +func esPlural(singular string) string { + return singular + "es" +} + +func sPlural(singular string) string { + return singular + "s" +} + +func isConsonant(char rune) bool { + for _, c := range consonants { + if char == c { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/parser/doc.go b/cluster-autoscaler/vendor/k8s.io/gengo/parser/doc.go new file mode 100644 index 000000000000..8231b6d43203 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/parser/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package parser provides code to parse go files, type-check them, extract the +// types. +package parser // import "k8s.io/gengo/parser" diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/parser/parse.go b/cluster-autoscaler/vendor/k8s.io/gengo/parser/parse.go new file mode 100644 index 000000000000..bbd719295e6e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/parser/parse.go @@ -0,0 +1,925 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package parser + +import ( + "fmt" + "go/ast" + "go/build" + "go/constant" + "go/parser" + "go/token" + tc "go/types" + "io/ioutil" + "os" + "os/exec" + "path" + "path/filepath" + "regexp" + "sort" + "strings" + + "k8s.io/gengo/types" + "k8s.io/klog/v2" +) + +// This clarifies when a pkg path has been canonicalized. +type importPathString string + +// Builder lets you add all the go files in all the packages that you care +// about, then constructs the type source data. +type Builder struct { + context *build.Context + + // If true, include *_test.go + IncludeTestFiles bool + + // Map of package names to more canonical information about the package. + // This might hold the same value for multiple names, e.g. if someone + // referenced ./pkg/name or in the case of vendoring, which canonicalizes + // differently that what humans would type. + // + // This must only be accessed via getLoadedBuildPackage and setLoadedBuildPackage + buildPackages map[importPathString]*build.Package + + fset *token.FileSet + // map of package path to list of parsed files + parsed map[importPathString][]parsedFile + // map of package path to absolute path (to prevent overlap) + absPaths map[importPathString]string + + // Set by typeCheckPackage(), used by importPackage() and friends. + typeCheckedPackages map[importPathString]*tc.Package + + // Map of package path to whether the user requested it or it was from + // an import. + userRequested map[importPathString]bool + + // All comments from everywhere in every parsed file. + endLineToCommentGroup map[fileLine]*ast.CommentGroup + + // map of package to list of packages it imports. + importGraph map[importPathString]map[string]struct{} +} + +// parsedFile is for tracking files with name +type parsedFile struct { + name string + file *ast.File +} + +// key type for finding comments. +type fileLine struct { + file string + line int +} + +// New constructs a new builder. +func New() *Builder { + c := build.Default + if c.GOROOT == "" { + if p, err := exec.Command("which", "go").CombinedOutput(); err == nil { + // The returned string will have some/path/bin/go, so remove the last two elements. + c.GOROOT = filepath.Dir(filepath.Dir(strings.Trim(string(p), "\n"))) + } else { + klog.Warningf("Warning: $GOROOT not set, and unable to run `which go` to find it: %v\n", err) + } + } + // Force this to off, since we don't properly parse CGo. All symbols must + // have non-CGo equivalents. + c.CgoEnabled = false + return &Builder{ + context: &c, + buildPackages: map[importPathString]*build.Package{}, + typeCheckedPackages: map[importPathString]*tc.Package{}, + fset: token.NewFileSet(), + parsed: map[importPathString][]parsedFile{}, + absPaths: map[importPathString]string{}, + userRequested: map[importPathString]bool{}, + endLineToCommentGroup: map[fileLine]*ast.CommentGroup{}, + importGraph: map[importPathString]map[string]struct{}{}, + } +} + +// AddBuildTags adds the specified build tags to the parse context. +func (b *Builder) AddBuildTags(tags ...string) { + b.context.BuildTags = append(b.context.BuildTags, tags...) +} + +func (b *Builder) getLoadedBuildPackage(importPath string) (*build.Package, bool) { + canonicalized := canonicalizeImportPath(importPath) + if string(canonicalized) != importPath { + klog.V(5).Infof("getLoadedBuildPackage: %s normalized to %s", importPath, canonicalized) + } + buildPkg, ok := b.buildPackages[canonicalized] + return buildPkg, ok +} +func (b *Builder) setLoadedBuildPackage(importPath string, buildPkg *build.Package) { + canonicalizedImportPath := canonicalizeImportPath(importPath) + if string(canonicalizedImportPath) != importPath { + klog.V(5).Infof("setLoadedBuildPackage: importPath %s normalized to %s", importPath, canonicalizedImportPath) + } + + canonicalizedBuildPkgImportPath := canonicalizeImportPath(buildPkg.ImportPath) + if string(canonicalizedBuildPkgImportPath) != buildPkg.ImportPath { + klog.V(5).Infof("setLoadedBuildPackage: buildPkg.ImportPath %s normalized to %s", buildPkg.ImportPath, canonicalizedBuildPkgImportPath) + } + + if canonicalizedImportPath != canonicalizedBuildPkgImportPath { + klog.V(5).Infof("setLoadedBuildPackage: normalized importPath (%s) differs from buildPkg.ImportPath (%s)", canonicalizedImportPath, canonicalizedBuildPkgImportPath) + } + b.buildPackages[canonicalizedImportPath] = buildPkg + b.buildPackages[canonicalizedBuildPkgImportPath] = buildPkg +} + +// Get package information from the go/build package. Automatically excludes +// e.g. test files and files for other platforms-- there is quite a bit of +// logic of that nature in the build package. +func (b *Builder) importBuildPackage(dir string) (*build.Package, error) { + if buildPkg, ok := b.getLoadedBuildPackage(dir); ok { + return buildPkg, nil + } + // This validates the `package foo // github.com/bar/foo` comments. + buildPkg, err := b.importWithMode(dir, build.ImportComment) + if err != nil { + if _, ok := err.(*build.NoGoError); !ok { + return nil, fmt.Errorf("unable to import %q: %v", dir, err) + } + } + if buildPkg == nil { + // Might be an empty directory. Try to just find the dir. + buildPkg, err = b.importWithMode(dir, build.FindOnly) + if err != nil { + return nil, err + } + } + + // Remember it under the user-provided name. + klog.V(5).Infof("saving buildPackage %s", dir) + b.setLoadedBuildPackage(dir, buildPkg) + + return buildPkg, nil +} + +// AddFileForTest adds a file to the set, without verifying that the provided +// pkg actually exists on disk. The pkg must be of the form "canonical/pkg/path" +// and the path must be the absolute path to the file. Because this bypasses +// the normal recursive finding of package dependencies (on disk), test should +// sort their test files topologically first, so all deps are resolved by the +// time we need them. +func (b *Builder) AddFileForTest(pkg string, path string, src []byte) error { + if err := b.addFile(importPathString(pkg), path, src, true); err != nil { + return err + } + if _, err := b.typeCheckPackage(importPathString(pkg), true); err != nil { + return err + } + return nil +} + +// addFile adds a file to the set. The pkgPath must be of the form +// "canonical/pkg/path" and the path must be the absolute path to the file. A +// flag indicates whether this file was user-requested or just from following +// the import graph. +func (b *Builder) addFile(pkgPath importPathString, path string, src []byte, userRequested bool) error { + for _, p := range b.parsed[pkgPath] { + if path == p.name { + klog.V(5).Infof("addFile %s %s already parsed, skipping", pkgPath, path) + return nil + } + } + klog.V(6).Infof("addFile %s %s", pkgPath, path) + p, err := parser.ParseFile(b.fset, path, src, parser.DeclarationErrors|parser.ParseComments) + if err != nil { + return err + } + + // This is redundant with addDir, but some tests call AddFileForTest, which + // call into here without calling addDir. + b.userRequested[pkgPath] = userRequested || b.userRequested[pkgPath] + + b.parsed[pkgPath] = append(b.parsed[pkgPath], parsedFile{path, p}) + for _, c := range p.Comments { + position := b.fset.Position(c.End()) + b.endLineToCommentGroup[fileLine{position.Filename, position.Line}] = c + } + + // We have to get the packages from this specific file, in case the + // user added individual files instead of entire directories. + if b.importGraph[pkgPath] == nil { + b.importGraph[pkgPath] = map[string]struct{}{} + } + for _, im := range p.Imports { + importedPath := strings.Trim(im.Path.Value, `"`) + b.importGraph[pkgPath][importedPath] = struct{}{} + } + return nil +} + +// AddDir adds an entire directory, scanning it for go files. 'dir' should have +// a single go package in it. GOPATH, GOROOT, and the location of your go +// binary (`which go`) will all be searched if dir doesn't literally resolve. +func (b *Builder) AddDir(dir string) error { + _, err := b.importPackage(dir, true) + return err +} + +// AddDirRecursive is just like AddDir, but it also recursively adds +// subdirectories; it returns an error only if the path couldn't be resolved; +// any directories recursed into without go source are ignored. +func (b *Builder) AddDirRecursive(dir string) error { + // Add the root. + if _, err := b.importPackage(dir, true); err != nil { + klog.Warningf("Ignoring directory %v: %v", dir, err) + } + + // filepath.Walk does not follow symlinks. We therefore evaluate symlinks and use that with + // filepath.Walk. + buildPkg, ok := b.getLoadedBuildPackage(dir) + if !ok { + return fmt.Errorf("no loaded build package for %s", dir) + } + realPath, err := filepath.EvalSymlinks(buildPkg.Dir) + if err != nil { + return err + } + + fn := func(filePath string, info os.FileInfo, err error) error { + if info != nil && info.IsDir() { + rel := filepath.ToSlash(strings.TrimPrefix(filePath, realPath)) + if rel != "" { + // Make a pkg path. + buildPkg, ok := b.getLoadedBuildPackage(dir) + if !ok { + return fmt.Errorf("no loaded build package for %s", dir) + } + pkg := path.Join(string(canonicalizeImportPath(buildPkg.ImportPath)), rel) + + // Add it. + if _, err := b.importPackage(pkg, true); err != nil { + klog.Warningf("Ignoring child directory %v: %v", pkg, err) + } + } + } + return nil + } + if err := filepath.Walk(realPath, fn); err != nil { + return err + } + return nil +} + +// AddDirTo adds an entire directory to a given Universe. Unlike AddDir, this +// processes the package immediately, which makes it safe to use from within a +// generator (rather than just at init time. 'dir' must be a single go package. +// GOPATH, GOROOT, and the location of your go binary (`which go`) will all be +// searched if dir doesn't literally resolve. +// Deprecated. Please use AddDirectoryTo. +func (b *Builder) AddDirTo(dir string, u *types.Universe) error { + // We want all types from this package, as if they were directly added + // by the user. They WERE added by the user, in effect. + if _, err := b.importPackage(dir, true); err != nil { + return err + } + pkg, ok := b.getLoadedBuildPackage(dir) + if !ok { + return fmt.Errorf("no such package: %q", dir) + } + return b.findTypesIn(canonicalizeImportPath(pkg.ImportPath), u) +} + +// AddDirectoryTo adds an entire directory to a given Universe. Unlike AddDir, +// this processes the package immediately, which makes it safe to use from +// within a generator (rather than just at init time. 'dir' must be a single go +// package. GOPATH, GOROOT, and the location of your go binary (`which go`) +// will all be searched if dir doesn't literally resolve. +func (b *Builder) AddDirectoryTo(dir string, u *types.Universe) (*types.Package, error) { + // We want all types from this package, as if they were directly added + // by the user. They WERE added by the user, in effect. + if _, err := b.importPackage(dir, true); err != nil { + return nil, err + } + pkg, ok := b.getLoadedBuildPackage(dir) + if !ok || pkg == nil { + return nil, fmt.Errorf("no such package: %q", dir) + } + path := canonicalizeImportPath(pkg.ImportPath) + if err := b.findTypesIn(path, u); err != nil { + return nil, err + } + return u.Package(string(path)), nil +} + +// The implementation of AddDir. A flag indicates whether this directory was +// user-requested or just from following the import graph. +func (b *Builder) addDir(dir string, userRequested bool) error { + klog.V(5).Infof("addDir %s", dir) + buildPkg, err := b.importBuildPackage(dir) + if err != nil { + return err + } + canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) + pkgPath := canonicalPackage + if dir != string(canonicalPackage) { + klog.V(5).Infof("addDir %s, canonical path is %s", dir, pkgPath) + } + + // Sanity check the pkg dir has not changed. + if prev, found := b.absPaths[pkgPath]; found { + if buildPkg.Dir != prev { + return fmt.Errorf("package %q (%s) previously resolved to %s", pkgPath, buildPkg.Dir, prev) + } + } else { + b.absPaths[pkgPath] = buildPkg.Dir + } + + files := []string{} + files = append(files, buildPkg.GoFiles...) + if b.IncludeTestFiles { + files = append(files, buildPkg.TestGoFiles...) + } + + for _, file := range files { + if !strings.HasSuffix(file, ".go") { + continue + } + absPath := filepath.Join(buildPkg.Dir, file) + data, err := ioutil.ReadFile(absPath) + if err != nil { + return fmt.Errorf("while loading %q: %v", absPath, err) + } + err = b.addFile(pkgPath, absPath, data, userRequested) + if err != nil { + return fmt.Errorf("while parsing %q: %v", absPath, err) + } + } + return nil +} + +// regexErrPackageNotFound helps test the expected error for not finding a package. +var regexErrPackageNotFound = regexp.MustCompile(`^unable to import ".*?":.*`) + +func isErrPackageNotFound(err error) bool { + return regexErrPackageNotFound.MatchString(err.Error()) +} + +// importPackage is a function that will be called by the type check package when it +// needs to import a go package. 'path' is the import path. +func (b *Builder) importPackage(dir string, userRequested bool) (*tc.Package, error) { + klog.V(5).Infof("importPackage %s", dir) + + var pkgPath = importPathString(dir) + + // Get the canonical path if we can. + if buildPkg, _ := b.getLoadedBuildPackage(dir); buildPkg != nil { + canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) + klog.V(5).Infof("importPackage %s, canonical path is %s", dir, canonicalPackage) + pkgPath = canonicalPackage + } + + // If we have not seen this before, process it now. + ignoreError := false + if _, found := b.parsed[pkgPath]; !found { + // Ignore errors in paths that we're importing solely because + // they're referenced by other packages. + ignoreError = true + + // Add it. + if err := b.addDir(dir, userRequested); err != nil { + if isErrPackageNotFound(err) { + klog.V(6).Info(err) + return nil, nil + } + + return nil, err + } + + // Get the canonical path now that it has been added. + if buildPkg, _ := b.getLoadedBuildPackage(dir); buildPkg != nil { + canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) + klog.V(5).Infof("importPackage %s, canonical path is %s", dir, canonicalPackage) + pkgPath = canonicalPackage + } + } + + // If it was previously known, just check that the user-requestedness hasn't + // changed. + b.userRequested[pkgPath] = userRequested || b.userRequested[pkgPath] + + // Run the type checker. We may end up doing this to pkgs that are already + // done, or are in the queue to be done later, but it will short-circuit, + // and we can't miss pkgs that are only depended on. + pkg, err := b.typeCheckPackage(pkgPath, !ignoreError) + if err != nil { + switch { + case ignoreError && pkg != nil: + klog.V(4).Infof("type checking encountered some issues in %q, but ignoring.\n", pkgPath) + case !ignoreError && pkg != nil: + klog.V(3).Infof("type checking encountered some errors in %q\n", pkgPath) + return nil, err + default: + return nil, err + } + } + + return pkg, nil +} + +type importAdapter struct { + b *Builder +} + +func (a importAdapter) Import(path string) (*tc.Package, error) { + return a.b.importPackage(path, false) +} + +// typeCheckPackage will attempt to return the package even if there are some +// errors, so you may check whether the package is nil or not even if you get +// an error. +func (b *Builder) typeCheckPackage(pkgPath importPathString, logErr bool) (*tc.Package, error) { + klog.V(5).Infof("typeCheckPackage %s", pkgPath) + if pkg, ok := b.typeCheckedPackages[pkgPath]; ok { + if pkg != nil { + klog.V(6).Infof("typeCheckPackage %s already done", pkgPath) + return pkg, nil + } + // We store a nil right before starting work on a package. So + // if we get here and it's present and nil, that means there's + // another invocation of this function on the call stack + // already processing this package. + return nil, fmt.Errorf("circular dependency for %q", pkgPath) + } + parsedFiles, ok := b.parsed[pkgPath] + if !ok { + return nil, fmt.Errorf("No files for pkg %q", pkgPath) + } + files := make([]*ast.File, len(parsedFiles)) + for i := range parsedFiles { + files[i] = parsedFiles[i].file + } + b.typeCheckedPackages[pkgPath] = nil + c := tc.Config{ + IgnoreFuncBodies: true, + // Note that importAdapter can call b.importPackage which calls this + // method. So there can't be cycles in the import graph. + Importer: importAdapter{b}, + Error: func(err error) { + if logErr { + klog.V(2).Infof("type checker: %v\n", err) + } else { + klog.V(3).Infof("type checker: %v\n", err) + } + }, + } + pkg, err := c.Check(string(pkgPath), b.fset, files, nil) + b.typeCheckedPackages[pkgPath] = pkg // record the result whether or not there was an error + return pkg, err +} + +// FindPackages fetches a list of the user-imported packages. +// Note that you need to call b.FindTypes() first. +func (b *Builder) FindPackages() []string { + // Iterate packages in a predictable order. + pkgPaths := []string{} + for k := range b.typeCheckedPackages { + pkgPaths = append(pkgPaths, string(k)) + } + sort.Strings(pkgPaths) + + result := []string{} + for _, pkgPath := range pkgPaths { + if b.userRequested[importPathString(pkgPath)] { + // Since walkType is recursive, all types that are in packages that + // were directly mentioned will be included. We don't need to + // include all types in all transitive packages, though. + result = append(result, pkgPath) + } + } + return result +} + +// FindTypes finalizes the package imports, and searches through all the +// packages for types. +func (b *Builder) FindTypes() (types.Universe, error) { + // Take a snapshot of pkgs to iterate, since this will recursively mutate + // b.parsed. Iterate in a predictable order. + pkgPaths := []string{} + for pkgPath := range b.parsed { + pkgPaths = append(pkgPaths, string(pkgPath)) + } + sort.Strings(pkgPaths) + + u := types.Universe{} + for _, pkgPath := range pkgPaths { + if err := b.findTypesIn(importPathString(pkgPath), &u); err != nil { + return nil, err + } + } + return u, nil +} + +// addCommentsToType takes any accumulated comment lines prior to obj and +// attaches them to the type t. +func (b *Builder) addCommentsToType(obj tc.Object, t *types.Type) { + c1 := b.priorCommentLines(obj.Pos(), 1) + // c1.Text() is safe if c1 is nil + t.CommentLines = splitLines(c1.Text()) + if c1 == nil { + t.SecondClosestCommentLines = splitLines(b.priorCommentLines(obj.Pos(), 2).Text()) + } else { + t.SecondClosestCommentLines = splitLines(b.priorCommentLines(c1.List[0].Slash, 2).Text()) + } +} + +// findTypesIn finalizes the package import and searches through the package +// for types. +func (b *Builder) findTypesIn(pkgPath importPathString, u *types.Universe) error { + klog.V(5).Infof("findTypesIn %s", pkgPath) + pkg := b.typeCheckedPackages[pkgPath] + if pkg == nil { + return fmt.Errorf("findTypesIn(%s): package is not known", pkgPath) + } + if !b.userRequested[pkgPath] { + // Since walkType is recursive, all types that the + // packages they asked for depend on will be included. + // But we don't need to include all types in all + // *packages* they depend on. + klog.V(5).Infof("findTypesIn %s: package is not user requested", pkgPath) + return nil + } + + // We're keeping this package. This call will create the record. + u.Package(string(pkgPath)).Name = pkg.Name() + u.Package(string(pkgPath)).Path = pkg.Path() + u.Package(string(pkgPath)).SourcePath = b.absPaths[pkgPath] + + for _, f := range b.parsed[pkgPath] { + if _, fileName := filepath.Split(f.name); fileName == "doc.go" { + tp := u.Package(string(pkgPath)) + // findTypesIn might be called multiple times. Clean up tp.Comments + // to avoid repeatedly fill same comments to it. + tp.Comments = []string{} + for i := range f.file.Comments { + tp.Comments = append(tp.Comments, splitLines(f.file.Comments[i].Text())...) + } + if f.file.Doc != nil { + tp.DocComments = splitLines(f.file.Doc.Text()) + } + } + } + + s := pkg.Scope() + for _, n := range s.Names() { + obj := s.Lookup(n) + tn, ok := obj.(*tc.TypeName) + if ok { + t := b.walkType(*u, nil, tn.Type()) + b.addCommentsToType(obj, t) + } + tf, ok := obj.(*tc.Func) + // We only care about functions, not concrete/abstract methods. + if ok && tf.Type() != nil && tf.Type().(*tc.Signature).Recv() == nil { + t := b.addFunction(*u, nil, tf) + b.addCommentsToType(obj, t) + } + tv, ok := obj.(*tc.Var) + if ok && !tv.IsField() { + t := b.addVariable(*u, nil, tv) + b.addCommentsToType(obj, t) + } + tconst, ok := obj.(*tc.Const) + if ok { + t := b.addConstant(*u, nil, tconst) + b.addCommentsToType(obj, t) + } + } + + importedPkgs := []string{} + for k := range b.importGraph[pkgPath] { + importedPkgs = append(importedPkgs, string(k)) + } + sort.Strings(importedPkgs) + for _, p := range importedPkgs { + u.AddImports(string(pkgPath), p) + } + return nil +} + +func (b *Builder) importWithMode(dir string, mode build.ImportMode) (*build.Package, error) { + // This is a bit of a hack. The srcDir argument to Import() should + // properly be the dir of the file which depends on the package to be + // imported, so that vendoring can work properly and local paths can + // resolve. We assume that there is only one level of vendoring, and that + // the CWD is inside the GOPATH, so this should be safe. Nobody should be + // using local (relative) paths except on the CLI, so CWD is also + // sufficient. + cwd, err := os.Getwd() + if err != nil { + return nil, fmt.Errorf("unable to get current directory: %v", err) + } + + // normalize to drop /vendor/ if present + dir = string(canonicalizeImportPath(dir)) + + buildPkg, err := b.context.Import(filepath.ToSlash(dir), cwd, mode) + if err != nil { + return nil, err + } + return buildPkg, nil +} + +// if there's a comment on the line `lines` before pos, return its text, otherwise "". +func (b *Builder) priorCommentLines(pos token.Pos, lines int) *ast.CommentGroup { + position := b.fset.Position(pos) + key := fileLine{position.Filename, position.Line - lines} + return b.endLineToCommentGroup[key] +} + +func splitLines(str string) []string { + return strings.Split(strings.TrimRight(str, "\n"), "\n") +} + +func tcFuncNameToName(in string) types.Name { + name := strings.TrimPrefix(in, "func ") + nameParts := strings.Split(name, "(") + return tcNameToName(nameParts[0]) +} + +func tcVarNameToName(in string) types.Name { + nameParts := strings.Split(in, " ") + // nameParts[0] is "var". + // nameParts[2:] is the type of the variable, we ignore it for now. + return tcNameToName(nameParts[1]) +} + +func tcNameToName(in string) types.Name { + // Detect anonymous type names. (These may have '.' characters because + // embedded types may have packages, so we detect them specially.) + if strings.HasPrefix(in, "struct{") || + strings.HasPrefix(in, "<-chan") || + strings.HasPrefix(in, "chan<-") || + strings.HasPrefix(in, "chan ") || + strings.HasPrefix(in, "func(") || + strings.HasPrefix(in, "func (") || + strings.HasPrefix(in, "*") || + strings.HasPrefix(in, "map[") || + strings.HasPrefix(in, "[") { + return types.Name{Name: in} + } + + // Otherwise, if there are '.' characters present, the name has a + // package path in front. + nameParts := strings.Split(in, ".") + name := types.Name{Name: in} + if n := len(nameParts); n >= 2 { + // The final "." is the name of the type--previous ones must + // have been in the package path. + name.Package, name.Name = strings.Join(nameParts[:n-1], "."), nameParts[n-1] + } + return name +} + +func (b *Builder) convertSignature(u types.Universe, t *tc.Signature) *types.Signature { + signature := &types.Signature{} + for i := 0; i < t.Params().Len(); i++ { + signature.Parameters = append(signature.Parameters, b.walkType(u, nil, t.Params().At(i).Type())) + signature.ParameterNames = append(signature.ParameterNames, t.Params().At(i).Name()) + } + for i := 0; i < t.Results().Len(); i++ { + signature.Results = append(signature.Results, b.walkType(u, nil, t.Results().At(i).Type())) + signature.ResultNames = append(signature.ResultNames, t.Results().At(i).Name()) + } + if r := t.Recv(); r != nil { + signature.Receiver = b.walkType(u, nil, r.Type()) + } + signature.Variadic = t.Variadic() + return signature +} + +// walkType adds the type, and any necessary child types. +func (b *Builder) walkType(u types.Universe, useName *types.Name, in tc.Type) *types.Type { + // Most of the cases are underlying types of the named type. + name := tcNameToName(in.String()) + if useName != nil { + name = *useName + } + + switch t := in.(type) { + case *tc.Struct: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Struct + for i := 0; i < t.NumFields(); i++ { + f := t.Field(i) + m := types.Member{ + Name: f.Name(), + Embedded: f.Anonymous(), + Tags: t.Tag(i), + Type: b.walkType(u, nil, f.Type()), + CommentLines: splitLines(b.priorCommentLines(f.Pos(), 1).Text()), + } + out.Members = append(out.Members, m) + } + return out + case *tc.Map: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Map + out.Elem = b.walkType(u, nil, t.Elem()) + out.Key = b.walkType(u, nil, t.Key()) + return out + case *tc.Pointer: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Pointer + out.Elem = b.walkType(u, nil, t.Elem()) + return out + case *tc.Slice: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Slice + out.Elem = b.walkType(u, nil, t.Elem()) + return out + case *tc.Array: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Array + out.Elem = b.walkType(u, nil, t.Elem()) + out.Len = in.(*tc.Array).Len() + return out + case *tc.Chan: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Chan + out.Elem = b.walkType(u, nil, t.Elem()) + // TODO: need to store direction, otherwise raw type name + // cannot be properly written. + return out + case *tc.Basic: + out := u.Type(types.Name{ + Package: "", + Name: t.Name(), + }) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Unsupported + return out + case *tc.Signature: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Func + out.Signature = b.convertSignature(u, t) + return out + case *tc.Interface: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Interface + t.Complete() + for i := 0; i < t.NumMethods(); i++ { + if out.Methods == nil { + out.Methods = map[string]*types.Type{} + } + method := t.Method(i) + name := tcNameToName(method.String()) + mt := b.walkType(u, &name, method.Type()) + mt.CommentLines = splitLines(b.priorCommentLines(method.Pos(), 1).Text()) + out.Methods[method.Name()] = mt + } + return out + case *tc.Named: + var out *types.Type + switch t.Underlying().(type) { + case *tc.Named, *tc.Basic, *tc.Map, *tc.Slice: + name := tcNameToName(t.String()) + out = u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Alias + out.Underlying = b.walkType(u, nil, t.Underlying()) + default: + // tc package makes everything "named" with an + // underlying anonymous type--we remove that annoying + // "feature" for users. This flattens those types + // together. + name := tcNameToName(t.String()) + if out := u.Type(name); out.Kind != types.Unknown { + return out // short circuit if we've already made this. + } + out = b.walkType(u, &name, t.Underlying()) + } + // If the underlying type didn't already add methods, add them. + // (Interface types will have already added methods.) + if len(out.Methods) == 0 { + for i := 0; i < t.NumMethods(); i++ { + if out.Methods == nil { + out.Methods = map[string]*types.Type{} + } + method := t.Method(i) + name := tcNameToName(method.String()) + mt := b.walkType(u, &name, method.Type()) + mt.CommentLines = splitLines(b.priorCommentLines(method.Pos(), 1).Text()) + out.Methods[method.Name()] = mt + } + } + return out + default: + out := u.Type(name) + if out.Kind != types.Unknown { + return out + } + out.Kind = types.Unsupported + klog.Warningf("Making unsupported type entry %q for: %#v\n", out, t) + return out + } +} + +func (b *Builder) addFunction(u types.Universe, useName *types.Name, in *tc.Func) *types.Type { + name := tcFuncNameToName(in.String()) + if useName != nil { + name = *useName + } + out := u.Function(name) + out.Kind = types.DeclarationOf + out.Underlying = b.walkType(u, nil, in.Type()) + return out +} + +func (b *Builder) addVariable(u types.Universe, useName *types.Name, in *tc.Var) *types.Type { + name := tcVarNameToName(in.String()) + if useName != nil { + name = *useName + } + out := u.Variable(name) + out.Kind = types.DeclarationOf + out.Underlying = b.walkType(u, nil, in.Type()) + return out +} + +func (b *Builder) addConstant(u types.Universe, useName *types.Name, in *tc.Const) *types.Type { + name := tcVarNameToName(in.String()) + if useName != nil { + name = *useName + } + out := u.Constant(name) + out.Kind = types.DeclarationOf + out.Underlying = b.walkType(u, nil, in.Type()) + + var constval string + + // For strings, we use `StringVal()` to get the un-truncated, + // un-quoted string. For other values, `.String()` is preferable to + // get something relatively human readable (especially since for + // floating point types, `ExactString()` will generate numeric + // expressions using `big.(*Float).Text()`. + switch in.Val().Kind() { + case constant.String: + constval = constant.StringVal(in.Val()) + default: + constval = in.Val().String() + } + + out.ConstValue = &constval + return out +} + +// canonicalizeImportPath takes an import path and returns the actual package. +// It doesn't support nested vendoring. +func canonicalizeImportPath(importPath string) importPathString { + if !strings.Contains(importPath, "/vendor/") { + return importPathString(importPath) + } + + return importPathString(importPath[strings.Index(importPath, "/vendor/")+len("/vendor/"):]) +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/types/comments.go b/cluster-autoscaler/vendor/k8s.io/gengo/types/comments.go new file mode 100644 index 000000000000..8150c383875d --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/types/comments.go @@ -0,0 +1,82 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package types contains go type information, packaged in a way that makes +// auto-generation convenient, whether by template or straight go functions. +package types + +import ( + "fmt" + "strings" +) + +// ExtractCommentTags parses comments for lines of the form: +// +// 'marker' + "key=value". +// +// Values are optional; "" is the default. A tag can be specified more than +// one time and all values are returned. If the resulting map has an entry for +// a key, the value (a slice) is guaranteed to have at least 1 element. +// +// Example: if you pass "+" for 'marker', and the following lines are in +// the comments: +// +foo=value1 +// +bar +// +foo=value2 +// +baz="qux" +// Then this function will return: +// map[string][]string{"foo":{"value1, "value2"}, "bar": {""}, "baz": {"qux"}} +func ExtractCommentTags(marker string, lines []string) map[string][]string { + out := map[string][]string{} + for _, line := range lines { + line = strings.Trim(line, " ") + if len(line) == 0 { + continue + } + if !strings.HasPrefix(line, marker) { + continue + } + // TODO: we could support multiple values per key if we split on spaces + kv := strings.SplitN(line[len(marker):], "=", 2) + if len(kv) == 2 { + out[kv[0]] = append(out[kv[0]], kv[1]) + } else if len(kv) == 1 { + out[kv[0]] = append(out[kv[0]], "") + } + } + return out +} + +// ExtractSingleBoolCommentTag parses comments for lines of the form: +// +// 'marker' + "key=value1" +// +// If the tag is not found, the default value is returned. Values are asserted +// to be boolean ("true" or "false"), and any other value will cause an error +// to be returned. If the key has multiple values, the first one will be used. +func ExtractSingleBoolCommentTag(marker string, key string, defaultVal bool, lines []string) (bool, error) { + values := ExtractCommentTags(marker, lines)[key] + if values == nil { + return defaultVal, nil + } + if values[0] == "true" { + return true, nil + } + if values[0] == "false" { + return false, nil + } + return false, fmt.Errorf("tag value for %q is not boolean: %q", key, values[0]) +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/types/doc.go b/cluster-autoscaler/vendor/k8s.io/gengo/types/doc.go new file mode 100644 index 000000000000..74a969a763a1 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/types/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package types contains go type information, packaged in a way that makes +// auto-generation convenient, whether by template or straight go functions. +package types // import "k8s.io/gengo/types" diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/types/flatten.go b/cluster-autoscaler/vendor/k8s.io/gengo/types/flatten.go new file mode 100644 index 000000000000..585014e8ba00 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/types/flatten.go @@ -0,0 +1,57 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +// FlattenMembers recursively takes any embedded members and puts them in the +// top level, correctly hiding them if the top level hides them. There must not +// be a cycle-- that implies infinite members. +// +// This is useful for e.g. computing all the valid keys in a json struct, +// properly considering any configuration of embedded structs. +func FlattenMembers(m []Member) []Member { + embedded := []Member{} + normal := []Member{} + type nameInfo struct { + top bool + i int + } + names := map[string]nameInfo{} + for i := range m { + if m[i].Embedded && m[i].Type.Kind == Struct { + embedded = append(embedded, m[i]) + } else { + normal = append(normal, m[i]) + names[m[i].Name] = nameInfo{true, len(normal) - 1} + } + } + for i := range embedded { + for _, e := range FlattenMembers(embedded[i].Type.Members) { + if info, found := names[e.Name]; found { + if info.top { + continue + } + if n := normal[info.i]; n.Name == e.Name && n.Type == e.Type { + continue + } + panic("conflicting members") + } + normal = append(normal, e) + names[e.Name] = nameInfo{false, len(normal) - 1} + } + } + return normal +} diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/types/types.go b/cluster-autoscaler/vendor/k8s.io/gengo/types/types.go new file mode 100644 index 000000000000..77650255acdd --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/gengo/types/types.go @@ -0,0 +1,537 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import "strings" + +// Ref makes a reference to the given type. It can only be used for e.g. +// passing to namers. +func Ref(packageName, typeName string) *Type { + return &Type{Name: Name{ + Name: typeName, + Package: packageName, + }} +} + +// A type name may have a package qualifier. +type Name struct { + // Empty if embedded or builtin. This is the package path unless Path is specified. + Package string + // The type name. + Name string + // An optional location of the type definition for languages that can have disjoint + // packages and paths. + Path string +} + +// String returns the name formatted as a string. +func (n Name) String() string { + if n.Package == "" { + return n.Name + } + return n.Package + "." + n.Name +} + +// ParseFullyQualifiedName parses a name like k8s.io/kubernetes/pkg/api.Pod into a Name. +func ParseFullyQualifiedName(fqn string) Name { + cs := strings.Split(fqn, ".") + pkg := "" + if len(cs) > 1 { + pkg = strings.Join(cs[0:len(cs)-1], ".") + } + return Name{ + Name: cs[len(cs)-1], + Package: pkg, + } +} + +// The possible classes of types. +type Kind string + +const ( + // Builtin is a primitive, like bool, string, int. + Builtin Kind = "Builtin" + Struct Kind = "Struct" + Map Kind = "Map" + Slice Kind = "Slice" + Pointer Kind = "Pointer" + + // Alias is an alias of another type, e.g. in: + // type Foo string + // type Bar Foo + // Bar is an alias of Foo. + // + // In the real go type system, Foo is a "Named" string; but to simplify + // generation, this type system will just say that Foo *is* a builtin. + // We then need "Alias" as a way for us to say that Bar *is* a Foo. + Alias Kind = "Alias" + + // Interface is any type that could have differing types at run time. + Interface Kind = "Interface" + + // Array is just like slice, but has a fixed length. + Array Kind = "Array" + + // The remaining types are included for completeness, but are not well + // supported. + Chan Kind = "Chan" + Func Kind = "Func" + + // DeclarationOf is different from other Kinds; it indicates that instead of + // representing an actual Type, the type is a declaration of an instance of + // a type. E.g., a top-level function, variable, or constant. See the + // comment for Type.Name for more detail. + DeclarationOf Kind = "DeclarationOf" + Unknown Kind = "" + Unsupported Kind = "Unsupported" + + // Protobuf is protobuf type. + Protobuf Kind = "Protobuf" +) + +// Package holds package-level information. +// Fields are public, as everything in this package, to enable consumption by +// templates (for example). But it is strongly encouraged for code to build by +// using the provided functions. +type Package struct { + // Canonical name of this package-- its path. + Path string + + // The location this package was loaded from + SourcePath string + + // Short name of this package; the name that appears in the + // 'package x' line. + Name string + + // The comment right above the package declaration in doc.go, if any. + DocComments []string + + // All comments from doc.go, if any. + // TODO: remove Comments and use DocComments everywhere. + Comments []string + + // Types within this package, indexed by their name (*not* including + // package name). + Types map[string]*Type + + // Functions within this package, indexed by their name (*not* including + // package name). + Functions map[string]*Type + + // Global variables within this package, indexed by their name (*not* including + // package name). + Variables map[string]*Type + + // Global constants within this package, indexed by their name (*not* including + // package name). + Constants map[string]*Type + + // Packages imported by this package, indexed by (canonicalized) + // package path. + Imports map[string]*Package +} + +// Has returns true if the given name references a type known to this package. +func (p *Package) Has(name string) bool { + _, has := p.Types[name] + return has +} + +// Type gets the given Type in this Package. If the Type is not already +// defined, this will add it and return the new Type value. The caller is +// expected to finish initialization. +func (p *Package) Type(typeName string) *Type { + if t, ok := p.Types[typeName]; ok { + return t + } + if p.Path == "" { + // Import the standard builtin types! + if t, ok := builtins.Types[typeName]; ok { + p.Types[typeName] = t + return t + } + } + t := &Type{Name: Name{Package: p.Path, Name: typeName}} + p.Types[typeName] = t + return t +} + +// Function gets the given function Type in this Package. If the function is +// not already defined, this will add it. If a function is added, it's the +// caller's responsibility to finish construction of the function by setting +// Underlying to the correct type. +func (p *Package) Function(funcName string) *Type { + if t, ok := p.Functions[funcName]; ok { + return t + } + t := &Type{Name: Name{Package: p.Path, Name: funcName}} + t.Kind = DeclarationOf + p.Functions[funcName] = t + return t +} + +// Variable gets the given variable Type in this Package. If the variable is +// not already defined, this will add it. If a variable is added, it's the caller's +// responsibility to finish construction of the variable by setting Underlying +// to the correct type. +func (p *Package) Variable(varName string) *Type { + if t, ok := p.Variables[varName]; ok { + return t + } + t := &Type{Name: Name{Package: p.Path, Name: varName}} + t.Kind = DeclarationOf + p.Variables[varName] = t + return t +} + +// Constant gets the given constant Type in this Package. If the constant is +// not already defined, this will add it. If a constant is added, it's the caller's +// responsibility to finish construction of the constant by setting Underlying +// to the correct type. +func (p *Package) Constant(constName string) *Type { + if t, ok := p.Constants[constName]; ok { + return t + } + t := &Type{Name: Name{Package: p.Path, Name: constName}} + t.Kind = DeclarationOf + p.Constants[constName] = t + return t +} + +// HasImport returns true if p imports packageName. Package names include the +// package directory. +func (p *Package) HasImport(packageName string) bool { + _, has := p.Imports[packageName] + return has +} + +// Universe is a map of all packages. The key is the package name, but you +// should use Package(), Type(), Function(), or Variable() instead of direct +// access. +type Universe map[string]*Package + +// Type returns the canonical type for the given fully-qualified name. Builtin +// types will always be found, even if they haven't been explicitly added to +// the map. If a non-existing type is requested, this will create (a marker for) +// it. +func (u Universe) Type(n Name) *Type { + return u.Package(n.Package).Type(n.Name) +} + +// Function returns the canonical function for the given fully-qualified name. +// If a non-existing function is requested, this will create (a marker for) it. +// If a marker is created, it's the caller's responsibility to finish +// construction of the function by setting Underlying to the correct type. +func (u Universe) Function(n Name) *Type { + return u.Package(n.Package).Function(n.Name) +} + +// Variable returns the canonical variable for the given fully-qualified name. +// If a non-existing variable is requested, this will create (a marker for) it. +// If a marker is created, it's the caller's responsibility to finish +// construction of the variable by setting Underlying to the correct type. +func (u Universe) Variable(n Name) *Type { + return u.Package(n.Package).Variable(n.Name) +} + +// Constant returns the canonical constant for the given fully-qualified name. +// If a non-existing constant is requested, this will create (a marker for) it. +// If a marker is created, it's the caller's responsibility to finish +// construction of the constant by setting Underlying to the correct type. +func (u Universe) Constant(n Name) *Type { + return u.Package(n.Package).Constant(n.Name) +} + +// AddImports registers import lines for packageName. May be called multiple times. +// You are responsible for canonicalizing all package paths. +func (u Universe) AddImports(packagePath string, importPaths ...string) { + p := u.Package(packagePath) + for _, i := range importPaths { + p.Imports[i] = u.Package(i) + } +} + +// Package returns the Package for the given path. +// If a non-existing package is requested, this will create (a marker for) it. +// If a marker is created, it's the caller's responsibility to finish +// construction of the package. +func (u Universe) Package(packagePath string) *Package { + if p, ok := u[packagePath]; ok { + return p + } + p := &Package{ + Path: packagePath, + Types: map[string]*Type{}, + Functions: map[string]*Type{}, + Variables: map[string]*Type{}, + Constants: map[string]*Type{}, + Imports: map[string]*Package{}, + } + u[packagePath] = p + return p +} + +// Type represents a subset of possible go types. +type Type struct { + // There are two general categories of types, those explicitly named + // and those anonymous. Named ones will have a non-empty package in the + // name field. + // + // An exception: If Kind == DeclarationOf, then this name is the name of a + // top-level function, variable, or const, and the type can be found in Underlying. + // We do this to allow the naming system to work against these objects, even + // though they aren't strictly speaking types. + Name Name + + // The general kind of this type. + Kind Kind + + // If there are comment lines immediately before the type definition, + // they will be recorded here. + CommentLines []string + + // If there are comment lines preceding the `CommentLines`, they will be + // recorded here. There are two cases: + // --- + // SecondClosestCommentLines + // a blank line + // CommentLines + // type definition + // --- + // + // or + // --- + // SecondClosestCommentLines + // a blank line + // type definition + // --- + SecondClosestCommentLines []string + + // If Kind == Struct + Members []Member + + // If Kind == Map, Slice, Pointer, or Chan + Elem *Type + + // If Kind == Map, this is the map's key type. + Key *Type + + // If Kind == Alias, this is the underlying type. + // If Kind == DeclarationOf, this is the type of the declaration. + Underlying *Type + + // If Kind == Interface, this is the set of all required functions. + // Otherwise, if this is a named type, this is the list of methods that + // type has. (All elements will have Kind=="Func") + Methods map[string]*Type + + // If Kind == func, this is the signature of the function. + Signature *Signature + + // ConstValue contains a stringified constant value if + // Kind == DeclarationOf and this is a constant value + // declaration. For string constants, this field contains + // the entire, un-quoted value. For other types, it contains + // a human-readable literal. + ConstValue *string + + // TODO: Add: + // * channel direction + + // If Kind == Array + Len int64 +} + +// String returns the name of the type. +func (t *Type) String() string { + return t.Name.String() +} + +// IsPrimitive returns whether the type is a built-in type or is an alias to a +// built-in type. For example: strings and aliases of strings are primitives, +// structs are not. +func (t *Type) IsPrimitive() bool { + if t.Kind == Builtin || (t.Kind == Alias && t.Underlying.Kind == Builtin) { + return true + } + return false +} + +// IsAssignable returns whether the type is deep-assignable. For example, +// slices and maps and pointers are shallow copies, but ints and strings are +// complete. +func (t *Type) IsAssignable() bool { + if t.IsPrimitive() { + return true + } + if t.Kind == Struct { + for _, m := range t.Members { + if !m.Type.IsAssignable() { + return false + } + } + return true + } + return false +} + +// IsAnonymousStruct returns true if the type is an anonymous struct or an alias +// to an anonymous struct. +func (t *Type) IsAnonymousStruct() bool { + return (t.Kind == Struct && t.Name.Name == "struct{}") || (t.Kind == Alias && t.Underlying.IsAnonymousStruct()) +} + +// A single struct member +type Member struct { + // The name of the member. + Name string + + // If the member is embedded (anonymous) this will be true, and the + // Name will be the type name. + Embedded bool + + // If there are comment lines immediately before the member in the type + // definition, they will be recorded here. + CommentLines []string + + // If there are tags along with this member, they will be saved here. + Tags string + + // The type of this member. + Type *Type +} + +// String returns the name and type of the member. +func (m Member) String() string { + return m.Name + " " + m.Type.String() +} + +// Signature is a function's signature. +type Signature struct { + // If a method of some type, this is the type it's a member of. + Receiver *Type + Parameters []*Type + ParameterNames []string + Results []*Type + ResultNames []string + + // True if the last in parameter is of the form ...T. + Variadic bool + + // If there are comment lines immediately before this + // signature/method/function declaration, they will be recorded here. + CommentLines []string +} + +// Built in types. +var ( + String = &Type{ + Name: Name{Name: "string"}, + Kind: Builtin, + } + Int64 = &Type{ + Name: Name{Name: "int64"}, + Kind: Builtin, + } + Int32 = &Type{ + Name: Name{Name: "int32"}, + Kind: Builtin, + } + Int16 = &Type{ + Name: Name{Name: "int16"}, + Kind: Builtin, + } + Int = &Type{ + Name: Name{Name: "int"}, + Kind: Builtin, + } + Uint64 = &Type{ + Name: Name{Name: "uint64"}, + Kind: Builtin, + } + Uint32 = &Type{ + Name: Name{Name: "uint32"}, + Kind: Builtin, + } + Uint16 = &Type{ + Name: Name{Name: "uint16"}, + Kind: Builtin, + } + Uint = &Type{ + Name: Name{Name: "uint"}, + Kind: Builtin, + } + Uintptr = &Type{ + Name: Name{Name: "uintptr"}, + Kind: Builtin, + } + Float64 = &Type{ + Name: Name{Name: "float64"}, + Kind: Builtin, + } + Float32 = &Type{ + Name: Name{Name: "float32"}, + Kind: Builtin, + } + Float = &Type{ + Name: Name{Name: "float"}, + Kind: Builtin, + } + Bool = &Type{ + Name: Name{Name: "bool"}, + Kind: Builtin, + } + Byte = &Type{ + Name: Name{Name: "byte"}, + Kind: Builtin, + } + + builtins = &Package{ + Types: map[string]*Type{ + "bool": Bool, + "string": String, + "int": Int, + "int64": Int64, + "int32": Int32, + "int16": Int16, + "int8": Byte, + "uint": Uint, + "uint64": Uint64, + "uint32": Uint32, + "uint16": Uint16, + "uint8": Byte, + "uintptr": Uintptr, + "byte": Byte, + "float": Float, + "float64": Float64, + "float32": Float32, + }, + Imports: map[string]*Package{}, + Path: "", + Name: "", + } +) + +func IsInteger(t *Type) bool { + switch t { + case Int, Int64, Int32, Int16, Uint, Uint64, Uint32, Uint16, Byte: + return true + default: + return false + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/args.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/args.go new file mode 100644 index 000000000000..19783370e993 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/args.go @@ -0,0 +1,76 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package args + +import ( + "fmt" + "path/filepath" + + "github.com/spf13/pflag" + "k8s.io/gengo/args" +) + +// CustomArgs is used by the gengo framework to pass args specific to this generator. +type CustomArgs struct { + // ReportFilename is added to CustomArgs for specifying name of report file used + // by API linter. If specified, API rule violations will be printed to report file. + // Otherwise default value "-" will be used which indicates stdout. + ReportFilename string +} + +// NewDefaults returns default arguments for the generator. Returning the arguments instead +// of using default flag parsing allows registering custom arguments afterwards +func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { + // Default() sets a couple of flag default values for example the boilerplate. + // WithoutDefaultFlagParsing() disables implicit addition of command line flags and parsing, + // which allows registering custom arguments afterwards + genericArgs := args.Default().WithoutDefaultFlagParsing() + genericArgs.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), "k8s.io/kube-openapi/boilerplate/boilerplate.go.txt") + + customArgs := &CustomArgs{} + genericArgs.CustomArgs = customArgs + + // Default value for report filename is "-", which stands for stdout + customArgs.ReportFilename = "-" + // Default value for output file base name + genericArgs.OutputFileBaseName = "openapi_generated" + + return genericArgs, customArgs +} + +// AddFlags add the generator flags to the flag set. +func (c *CustomArgs) AddFlags(fs *pflag.FlagSet) { + fs.StringVarP(&c.ReportFilename, "report-filename", "r", c.ReportFilename, "Name of report file used by API linter to print API violations. Default \"-\" stands for standard output. NOTE that if valid filename other than \"-\" is specified, API linter won't return error on detected API violations. This allows further check of existing API violations without stopping the OpenAPI generation toolchain.") +} + +// Validate checks the given arguments. +func Validate(genericArgs *args.GeneratorArgs) error { + c, ok := genericArgs.CustomArgs.(*CustomArgs) + if !ok { + return fmt.Errorf("input arguments don't contain valid custom arguments") + } + if len(c.ReportFilename) == 0 { + return fmt.Errorf("report filename cannot be empty. specify a valid filename or use \"-\" for stdout") + } + if len(genericArgs.OutputFileBaseName) == 0 { + return fmt.Errorf("output file base name cannot be empty") + } + if len(genericArgs.OutputPackagePath) == 0 { + return fmt.Errorf("output package cannot be empty") + } + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/README.md b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/README.md new file mode 100644 index 000000000000..72b4e5fb4396 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/README.md @@ -0,0 +1,49 @@ +# Generate OpenAPI definitions + +- To generate definition for a specific type or package add "+k8s:openapi-gen=true" tag to the type/package comment lines. +- To exclude a type or a member from a tagged package/type, add "+k8s:openapi-gen=false" tag to the comment lines. + +# OpenAPI Extensions + +OpenAPI spec can have extensions on types. To define one or more extensions on a type or its member +add `+k8s:openapi-gen=x-kubernetes-$NAME:$VALUE` to the comment lines before type/member. A type/member can +have multiple extensions. The rest of the line in the comment will be used as $VALUE so there is no need to +escape or quote the value string. Extensions can be used to pass more information to client generators or +documentation generators. For example a type might have a friendly name to be displayed in documentation or +being used in a client's fluent interface. + +# Custom OpenAPI type definitions + +Custom types which otherwise don't map directly to OpenAPI can override their +OpenAPI definition by implementing a function named "OpenAPIDefinition" with +the following signature: + +```go + import openapi "k8s.io/kube-openapi/pkg/common" + + // ... + + type Time struct { + time.Time + } + + func (_ Time) OpenAPIDefinition() openapi.OpenAPIDefinition { + return openapi.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "date-time", + }, + }, + } + } +``` + +Alternatively, the type can avoid the "openapi" import by defining the following +methods. The following example produces the same OpenAPI definition as the +example above: + +```go + func (_ Time) OpenAPISchemaType() []string { return []string{"string"} } + func (_ Time) OpenAPISchemaFormat() string { return "date-time" } +``` diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/api_linter.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/api_linter.go new file mode 100644 index 000000000000..2763cf8847b8 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/api_linter.go @@ -0,0 +1,219 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "bytes" + "fmt" + "io" + "os" + "sort" + + "k8s.io/kube-openapi/pkg/generators/rules" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" + "k8s.io/klog/v2" +) + +const apiViolationFileType = "api-violation" + +type apiViolationFile struct { + // Since our file actually is unrelated to the package structure, use a + // path that hasn't been mangled by the framework. + unmangledPath string +} + +func (a apiViolationFile) AssembleFile(f *generator.File, path string) error { + path = a.unmangledPath + klog.V(2).Infof("Assembling file %q", path) + if path == "-" { + _, err := io.Copy(os.Stdout, &f.Body) + return err + } + + output, err := os.Create(path) + if err != nil { + return err + } + defer output.Close() + _, err = io.Copy(output, &f.Body) + return err +} + +func (a apiViolationFile) VerifyFile(f *generator.File, path string) error { + if path == "-" { + // Nothing to verify against. + return nil + } + path = a.unmangledPath + + formatted := f.Body.Bytes() + existing, err := os.ReadFile(path) + if err != nil { + return fmt.Errorf("unable to read file %q for comparison: %v", path, err) + } + if bytes.Compare(formatted, existing) == 0 { + return nil + } + + // Be nice and find the first place where they differ + // (Copied from gengo's default file type) + i := 0 + for i < len(formatted) && i < len(existing) && formatted[i] == existing[i] { + i++ + } + eDiff, fDiff := existing[i:], formatted[i:] + if len(eDiff) > 100 { + eDiff = eDiff[:100] + } + if len(fDiff) > 100 { + fDiff = fDiff[:100] + } + return fmt.Errorf("output for %q differs; first existing/expected diff: \n %q\n %q", path, string(eDiff), string(fDiff)) +} + +func newAPIViolationGen() *apiViolationGen { + return &apiViolationGen{ + linter: newAPILinter(), + } +} + +type apiViolationGen struct { + generator.DefaultGen + + linter *apiLinter +} + +func (v *apiViolationGen) FileType() string { return apiViolationFileType } +func (v *apiViolationGen) Filename() string { + return "this file is ignored by the file assembler" +} + +func (v *apiViolationGen) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + klog.V(5).Infof("validating API rules for type %v", t) + if err := v.linter.validate(t); err != nil { + return err + } + return nil +} + +// Finalize prints the API rule violations to report file (if specified from +// arguments) or stdout (default) +func (v *apiViolationGen) Finalize(c *generator.Context, w io.Writer) error { + // NOTE: we don't return error here because we assume that the report file will + // get evaluated afterwards to determine if error should be raised. For example, + // you can have make rules that compare the report file with existing known + // violations (whitelist) and determine no error if no change is detected. + v.linter.report(w) + return nil +} + +// apiLinter is the framework hosting multiple API rules and recording API rule +// violations +type apiLinter struct { + // API rules that implement APIRule interface and output API rule violations + rules []APIRule + violations []apiViolation +} + +// newAPILinter creates an apiLinter object with API rules in package rules. Please +// add APIRule here when new API rule is implemented. +func newAPILinter() *apiLinter { + return &apiLinter{ + rules: []APIRule{ + &rules.NamesMatch{}, + &rules.OmitEmptyMatchCase{}, + &rules.ListTypeMissing{}, + }, + } +} + +// apiViolation uniquely identifies single API rule violation +type apiViolation struct { + // Name of rule from APIRule.Name() + rule string + + packageName string + typeName string + + // Optional: name of field that violates API rule. Empty fieldName implies that + // the entire type violates the rule. + field string +} + +// apiViolations implements sort.Interface for []apiViolation based on the fields: rule, +// packageName, typeName and field. +type apiViolations []apiViolation + +func (a apiViolations) Len() int { return len(a) } +func (a apiViolations) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a apiViolations) Less(i, j int) bool { + if a[i].rule != a[j].rule { + return a[i].rule < a[j].rule + } + if a[i].packageName != a[j].packageName { + return a[i].packageName < a[j].packageName + } + if a[i].typeName != a[j].typeName { + return a[i].typeName < a[j].typeName + } + return a[i].field < a[j].field +} + +// APIRule is the interface for validating API rule on Go types +type APIRule interface { + // Validate evaluates API rule on type t and returns a list of field names in + // the type that violate the rule. Empty field name [""] implies the entire + // type violates the rule. + Validate(t *types.Type) ([]string, error) + + // Name returns the name of APIRule + Name() string +} + +// validate runs all API rules on type t and records any API rule violation +func (l *apiLinter) validate(t *types.Type) error { + for _, r := range l.rules { + klog.V(5).Infof("validating API rule %v for type %v", r.Name(), t) + fields, err := r.Validate(t) + if err != nil { + return err + } + for _, field := range fields { + l.violations = append(l.violations, apiViolation{ + rule: r.Name(), + packageName: t.Name.Package, + typeName: t.Name.Name, + field: field, + }) + } + } + return nil +} + +// report prints any API rule violation to writer w and returns error if violation exists +func (l *apiLinter) report(w io.Writer) error { + sort.Sort(apiViolations(l.violations)) + for _, v := range l.violations { + fmt.Fprintf(w, "API rule violation: %s,%s,%s,%s\n", v.rule, v.packageName, v.typeName, v.field) + } + if len(l.violations) > 0 { + return fmt.Errorf("API rule violations exist") + } + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/config.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/config.go new file mode 100644 index 000000000000..d728f2a32ac3 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/config.go @@ -0,0 +1,91 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "path/filepath" + + "k8s.io/gengo/args" + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + "k8s.io/klog/v2" + + generatorargs "k8s.io/kube-openapi/cmd/openapi-gen/args" +) + +type identityNamer struct{} + +func (_ identityNamer) Name(t *types.Type) string { + return t.Name.String() +} + +var _ namer.Namer = identityNamer{} + +// NameSystems returns the name system used by the generators in this package. +func NameSystems() namer.NameSystems { + return namer.NameSystems{ + "raw": namer.NewRawNamer("", nil), + "sorting_namer": identityNamer{}, + } +} + +// DefaultNameSystem returns the default name system for ordering the types to be +// processed by the generators in this package. +func DefaultNameSystem() string { + return "sorting_namer" +} + +func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { + boilerplate, err := arguments.LoadGoBoilerplate() + if err != nil { + klog.Fatalf("Failed loading boilerplate: %v", err) + } + header := append([]byte(fmt.Sprintf("// +build !%s\n\n", arguments.GeneratedBuildTag)), boilerplate...) + header = append(header, []byte( + ` +// This file was autogenerated by openapi-gen. Do not edit it manually! + +`)...) + + reportPath := "-" + if customArgs, ok := arguments.CustomArgs.(*generatorargs.CustomArgs); ok { + reportPath = customArgs.ReportFilename + } + context.FileTypes[apiViolationFileType] = apiViolationFile{ + unmangledPath: reportPath, + } + + return generator.Packages{ + &generator.DefaultPackage{ + PackageName: filepath.Base(arguments.OutputPackagePath), + PackagePath: arguments.OutputPackagePath, + HeaderText: header, + GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { + return []generator.Generator{ + newOpenAPIGen( + arguments.OutputFileBaseName, + arguments.OutputPackagePath, + ), + newAPIViolationGen(), + } + }, + FilterFunc: apiTypeFilterFunc, + }, + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/enum.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/enum.go new file mode 100644 index 000000000000..292a3c762ae2 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/enum.go @@ -0,0 +1,162 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "regexp" + "sort" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/types" +) + +const tagEnumType = "enum" +const enumTypeDescriptionHeader = "Possible enum values:" + +type enumValue struct { + Name string + Value string + Comment string +} + +type enumType struct { + Name types.Name + Values []*enumValue +} + +// enumMap is a map from the name to the matching enum type. +type enumMap map[types.Name]*enumType + +type enumContext struct { + enumTypes enumMap +} + +func newEnumContext(c *generator.Context) *enumContext { + return &enumContext{enumTypes: parseEnums(c)} +} + +// EnumType checks and finds the enumType for a given type. +// If the given type is a known enum type, returns the enumType, true +// Otherwise, returns nil, false +func (ec *enumContext) EnumType(t *types.Type) (enum *enumType, isEnum bool) { + // if t is a pointer, use its underlying type instead + if t.Kind == types.Pointer { + t = t.Elem + } + enum, ok := ec.enumTypes[t.Name] + return enum, ok +} + +// ValueStrings returns all possible values of the enum type as strings +// the results are sorted and quoted as Go literals. +func (et *enumType) ValueStrings() []string { + var values []string + for _, value := range et.Values { + // use "%q" format to generate a Go literal of the string const value + values = append(values, fmt.Sprintf("%q", value.Value)) + } + sort.Strings(values) + return values +} + +// DescriptionLines returns a description of the enum in this format: +// +// Possible enum values: +// - `"value1"` description 1 +// - `"value2"` description 2 +func (et *enumType) DescriptionLines() []string { + if len(et.Values) == 0 { + return nil + } + var lines []string + for _, value := range et.Values { + lines = append(lines, value.Description()) + } + sort.Strings(lines) + // Prepend an empty string to initiate a new paragraph. + return append([]string{"", enumTypeDescriptionHeader}, lines...) +} + +func parseEnums(c *generator.Context) enumMap { + // First, find the builtin "string" type + stringType := c.Universe.Type(types.Name{Name: "string"}) + + // find all enum types. + enumTypes := make(enumMap) + for _, p := range c.Universe { + for _, t := range p.Types { + if isEnumType(stringType, t) { + if _, ok := enumTypes[t.Name]; !ok { + enumTypes[t.Name] = &enumType{ + Name: t.Name, + } + } + } + } + } + + // find all enum values from constants, and try to match each with its type. + for _, p := range c.Universe { + for _, c := range p.Constants { + enumType := c.Underlying + if _, ok := enumTypes[enumType.Name]; ok { + value := &enumValue{ + Name: c.Name.Name, + Value: *c.ConstValue, + Comment: strings.Join(c.CommentLines, " "), + } + enumTypes[enumType.Name].appendValue(value) + } + } + } + + return enumTypes +} + +func (et *enumType) appendValue(value *enumValue) { + et.Values = append(et.Values, value) +} + +// Description returns the description line for the enumValue +// with the format: +// - `"FooValue"` is the Foo value +func (ev *enumValue) Description() string { + comment := strings.TrimSpace(ev.Comment) + // The comment should starts with the type name, trim it first. + comment = strings.TrimPrefix(comment, ev.Name) + // Trim the possible space after previous step. + comment = strings.TrimSpace(comment) + // The comment may be multiline, cascade all consecutive whitespaces. + comment = whitespaceRegex.ReplaceAllString(comment, " ") + return fmt.Sprintf(" - `%q` %s", ev.Value, comment) +} + +// isEnumType checks if a given type is an enum by the definition +// An enum type should be an alias of string and has tag '+enum' in its comment. +// Additionally, pass the type of builtin 'string' to check against. +func isEnumType(stringType *types.Type, t *types.Type) bool { + return t.Kind == types.Alias && t.Underlying == stringType && hasEnumTag(t) +} + +func hasEnumTag(t *types.Type) bool { + return types.ExtractCommentTags("+", t.CommentLines)[tagEnumType] != nil +} + +// whitespaceRegex is the regex for consecutive whitespaces. +var whitespaceRegex = regexp.MustCompile(`\s+`) diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/extension.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/extension.go new file mode 100644 index 000000000000..e37d93ef733b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/extension.go @@ -0,0 +1,202 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "sort" + "strings" + + "k8s.io/gengo/examples/set-gen/sets" + "k8s.io/gengo/types" +) + +const extensionPrefix = "x-kubernetes-" + +// extensionAttributes encapsulates common traits for particular extensions. +type extensionAttributes struct { + xName string + kind types.Kind + allowedValues sets.String + enforceArray bool +} + +// Extension tag to openapi extension attributes +var tagToExtension = map[string]extensionAttributes{ + "patchMergeKey": { + xName: "x-kubernetes-patch-merge-key", + kind: types.Slice, + }, + "patchStrategy": { + xName: "x-kubernetes-patch-strategy", + kind: types.Slice, + allowedValues: sets.NewString("merge", "retainKeys"), + }, + "listMapKey": { + xName: "x-kubernetes-list-map-keys", + kind: types.Slice, + enforceArray: true, + }, + "listType": { + xName: "x-kubernetes-list-type", + kind: types.Slice, + allowedValues: sets.NewString("atomic", "set", "map"), + }, + "mapType": { + xName: "x-kubernetes-map-type", + kind: types.Map, + allowedValues: sets.NewString("atomic", "granular"), + }, + "structType": { + xName: "x-kubernetes-map-type", + kind: types.Struct, + allowedValues: sets.NewString("atomic", "granular"), + }, + "validations": { + xName: "x-kubernetes-validations", + kind: types.Slice, + }, +} + +// Extension encapsulates information necessary to generate an OpenAPI extension. +type extension struct { + idlTag string // Example: listType + xName string // Example: x-kubernetes-list-type + values []string // Example: [atomic] +} + +func (e extension) hasAllowedValues() bool { + return tagToExtension[e.idlTag].allowedValues.Len() > 0 +} + +func (e extension) allowedValues() sets.String { + return tagToExtension[e.idlTag].allowedValues +} + +func (e extension) hasKind() bool { + return len(tagToExtension[e.idlTag].kind) > 0 +} + +func (e extension) kind() types.Kind { + return tagToExtension[e.idlTag].kind +} + +func (e extension) validateAllowedValues() error { + // allowedValues not set means no restrictions on values. + if !e.hasAllowedValues() { + return nil + } + // Check for missing value. + if len(e.values) == 0 { + return fmt.Errorf("%s needs a value, none given.", e.idlTag) + } + // For each extension value, validate that it is allowed. + allowedValues := e.allowedValues() + if !allowedValues.HasAll(e.values...) { + return fmt.Errorf("%v not allowed for %s. Allowed values: %v", + e.values, e.idlTag, allowedValues.List()) + } + return nil +} + +func (e extension) validateType(kind types.Kind) error { + // If this extension class has no kind, then don't validate the type. + if !e.hasKind() { + return nil + } + if kind != e.kind() { + return fmt.Errorf("tag %s on type %v; only allowed on type %v", + e.idlTag, kind, e.kind()) + } + return nil +} + +func (e extension) hasMultipleValues() bool { + return len(e.values) > 1 +} + +func (e extension) isAlwaysArrayFormat() bool { + return tagToExtension[e.idlTag].enforceArray +} + +// Returns sorted list of map keys. Needed for deterministic testing. +func sortedMapKeys(m map[string][]string) []string { + keys := make([]string, len(m)) + i := 0 + for k := range m { + keys[i] = k + i++ + } + sort.Strings(keys) + return keys +} + +// Parses comments to return openapi extensions. Returns a list of +// extensions which parsed correctly, as well as a list of the +// parse errors. Validating extensions is performed separately. +// NOTE: Non-empty errors does not mean extensions is empty. +func parseExtensions(comments []string) ([]extension, []error) { + extensions := []extension{} + errors := []error{} + // First, generate extensions from "+k8s:openapi-gen=x-kubernetes-*" annotations. + values := getOpenAPITagValue(comments) + for _, val := range values { + // Example: x-kubernetes-member-tag:member_test + if strings.HasPrefix(val, extensionPrefix) { + parts := strings.SplitN(val, ":", 2) + if len(parts) != 2 { + errors = append(errors, fmt.Errorf("invalid extension value: %v", val)) + continue + } + e := extension{ + idlTag: tagName, // Example: k8s:openapi-gen + xName: parts[0], // Example: x-kubernetes-member-tag + values: []string{parts[1]}, // Example: member_test + } + extensions = append(extensions, e) + } + } + // Next, generate extensions from "idlTags" (e.g. +listType) + tagValues := types.ExtractCommentTags("+", comments) + for _, idlTag := range sortedMapKeys(tagValues) { + xAttrs, exists := tagToExtension[idlTag] + if !exists { + continue + } + values := tagValues[idlTag] + e := extension{ + idlTag: idlTag, // listType + xName: xAttrs.xName, // x-kubernetes-list-type + values: values, // [atomic] + } + extensions = append(extensions, e) + } + return extensions, errors +} + +func validateMemberExtensions(extensions []extension, m *types.Member) []error { + errors := []error{} + for _, e := range extensions { + if err := e.validateAllowedValues(); err != nil { + errors = append(errors, err) + } + if err := e.validateType(m.Type.Kind); err != nil { + errors = append(errors, err) + } + } + return errors +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go new file mode 100644 index 000000000000..4654bbe9c7ce --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go @@ -0,0 +1,825 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "path/filepath" + "reflect" + "sort" + "strings" + + "k8s.io/gengo/generator" + "k8s.io/gengo/namer" + "k8s.io/gengo/types" + openapi "k8s.io/kube-openapi/pkg/common" + + "k8s.io/klog/v2" +) + +// This is the comment tag that carries parameters for open API generation. +const tagName = "k8s:openapi-gen" +const tagOptional = "optional" +const tagDefault = "default" + +// Known values for the tag. +const ( + tagValueTrue = "true" + tagValueFalse = "false" +) + +// Used for temporary validation of patch struct tags. +// TODO: Remove patch struct tag validation because they we are now consuming OpenAPI on server. +var tempPatchTags = [...]string{ + "patchMergeKey", + "patchStrategy", +} + +func getOpenAPITagValue(comments []string) []string { + return types.ExtractCommentTags("+", comments)[tagName] +} + +func getSingleTagsValue(comments []string, tag string) (string, error) { + tags, ok := types.ExtractCommentTags("+", comments)[tag] + if !ok || len(tags) == 0 { + return "", nil + } + if len(tags) > 1 { + return "", fmt.Errorf("multiple values are not allowed for tag %s", tag) + } + return tags[0], nil +} + +func hasOpenAPITagValue(comments []string, value string) bool { + tagValues := getOpenAPITagValue(comments) + for _, val := range tagValues { + if val == value { + return true + } + } + return false +} + +// hasOptionalTag returns true if the member has +optional in its comments or +// omitempty in its json tags. +func hasOptionalTag(m *types.Member) bool { + hasOptionalCommentTag := types.ExtractCommentTags( + "+", m.CommentLines)[tagOptional] != nil + hasOptionalJsonTag := strings.Contains( + reflect.StructTag(m.Tags).Get("json"), "omitempty") + return hasOptionalCommentTag || hasOptionalJsonTag +} + +func apiTypeFilterFunc(c *generator.Context, t *types.Type) bool { + // There is a conflict between this codegen and codecgen, we should avoid types generated for codecgen + if strings.HasPrefix(t.Name.Name, "codecSelfer") { + return false + } + pkg := c.Universe.Package(t.Name.Package) + if hasOpenAPITagValue(pkg.Comments, tagValueTrue) { + return !hasOpenAPITagValue(t.CommentLines, tagValueFalse) + } + if hasOpenAPITagValue(t.CommentLines, tagValueTrue) { + return true + } + return false +} + +const ( + specPackagePath = "k8s.io/kube-openapi/pkg/validation/spec" + openAPICommonPackagePath = "k8s.io/kube-openapi/pkg/common" +) + +// openApiGen produces a file with auto-generated OpenAPI functions. +type openAPIGen struct { + generator.DefaultGen + // TargetPackage is the package that will get GetOpenAPIDefinitions function returns all open API definitions. + targetPackage string + imports namer.ImportTracker +} + +func newOpenAPIGen(sanitizedName string, targetPackage string) generator.Generator { + return &openAPIGen{ + DefaultGen: generator.DefaultGen{ + OptionalName: sanitizedName, + }, + imports: generator.NewImportTracker(), + targetPackage: targetPackage, + } +} + +const nameTmpl = "schema_$.type|private$" + +func (g *openAPIGen) Namers(c *generator.Context) namer.NameSystems { + // Have the raw namer for this file track what it imports. + return namer.NameSystems{ + "raw": namer.NewRawNamer(g.targetPackage, g.imports), + "private": &namer.NameStrategy{ + Join: func(pre string, in []string, post string) string { + return strings.Join(in, "_") + }, + PrependPackageNames: 4, // enough to fully qualify from k8s.io/api/... + }, + } +} + +func (g *openAPIGen) isOtherPackage(pkg string) bool { + if pkg == g.targetPackage { + return false + } + if strings.HasSuffix(pkg, "\""+g.targetPackage+"\"") { + return false + } + return true +} + +func (g *openAPIGen) Imports(c *generator.Context) []string { + importLines := []string{} + for _, singleImport := range g.imports.ImportLines() { + importLines = append(importLines, singleImport) + } + return importLines +} + +func argsFromType(t *types.Type) generator.Args { + return generator.Args{ + "type": t, + "ReferenceCallback": types.Ref(openAPICommonPackagePath, "ReferenceCallback"), + "OpenAPIDefinition": types.Ref(openAPICommonPackagePath, "OpenAPIDefinition"), + "SpecSchemaType": types.Ref(specPackagePath, "Schema"), + } +} + +func (g *openAPIGen) Init(c *generator.Context, w io.Writer) error { + sw := generator.NewSnippetWriter(w, c, "$", "$") + sw.Do("func GetOpenAPIDefinitions(ref $.ReferenceCallback|raw$) map[string]$.OpenAPIDefinition|raw$ {\n", argsFromType(nil)) + sw.Do("return map[string]$.OpenAPIDefinition|raw${\n", argsFromType(nil)) + + for _, t := range c.Order { + err := newOpenAPITypeWriter(sw, c).generateCall(t) + if err != nil { + return err + } + } + + sw.Do("}\n", nil) + sw.Do("}\n\n", nil) + + return sw.Error() +} + +func (g *openAPIGen) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + klog.V(5).Infof("generating for type %v", t) + sw := generator.NewSnippetWriter(w, c, "$", "$") + err := newOpenAPITypeWriter(sw, c).generate(t) + if err != nil { + return err + } + return sw.Error() +} + +func getJsonTags(m *types.Member) []string { + jsonTag := reflect.StructTag(m.Tags).Get("json") + if jsonTag == "" { + return []string{} + } + return strings.Split(jsonTag, ",") +} + +func getReferableName(m *types.Member) string { + jsonTags := getJsonTags(m) + if len(jsonTags) > 0 { + if jsonTags[0] == "-" { + return "" + } else { + return jsonTags[0] + } + } else { + return m.Name + } +} + +func shouldInlineMembers(m *types.Member) bool { + jsonTags := getJsonTags(m) + return len(jsonTags) > 1 && jsonTags[1] == "inline" +} + +type openAPITypeWriter struct { + *generator.SnippetWriter + context *generator.Context + refTypes map[string]*types.Type + enumContext *enumContext + GetDefinitionInterface *types.Type +} + +func newOpenAPITypeWriter(sw *generator.SnippetWriter, c *generator.Context) openAPITypeWriter { + return openAPITypeWriter{ + SnippetWriter: sw, + context: c, + refTypes: map[string]*types.Type{}, + enumContext: newEnumContext(c), + } +} + +func methodReturnsValue(mt *types.Type, pkg, name string) bool { + if len(mt.Signature.Parameters) != 0 || len(mt.Signature.Results) != 1 { + return false + } + r := mt.Signature.Results[0] + return r.Name.Name == name && r.Name.Package == pkg +} + +func hasOpenAPIV3DefinitionMethod(t *types.Type) bool { + for mn, mt := range t.Methods { + if mn != "OpenAPIV3Definition" { + continue + } + return methodReturnsValue(mt, openAPICommonPackagePath, "OpenAPIDefinition") + } + return false +} + +func hasOpenAPIDefinitionMethod(t *types.Type) bool { + for mn, mt := range t.Methods { + if mn != "OpenAPIDefinition" { + continue + } + return methodReturnsValue(mt, openAPICommonPackagePath, "OpenAPIDefinition") + } + return false +} + +func hasOpenAPIDefinitionMethods(t *types.Type) bool { + var hasSchemaTypeMethod, hasOpenAPISchemaFormat bool + for mn, mt := range t.Methods { + switch mn { + case "OpenAPISchemaType": + hasSchemaTypeMethod = methodReturnsValue(mt, "", "[]string") + case "OpenAPISchemaFormat": + hasOpenAPISchemaFormat = methodReturnsValue(mt, "", "string") + } + } + return hasSchemaTypeMethod && hasOpenAPISchemaFormat +} + +func hasOpenAPIV3OneOfMethod(t *types.Type) bool { + for mn, mt := range t.Methods { + if mn != "OpenAPIV3OneOfTypes" { + continue + } + return methodReturnsValue(mt, "", "[]string") + } + return false +} + +// typeShortName returns short package name (e.g. the name x appears in package x definition) dot type name. +func typeShortName(t *types.Type) string { + return filepath.Base(t.Name.Package) + "." + t.Name.Name +} + +func (g openAPITypeWriter) generateMembers(t *types.Type, required []string) ([]string, error) { + var err error + for t.Kind == types.Pointer { // fast-forward to effective type containing members + t = t.Elem + } + for _, m := range t.Members { + if hasOpenAPITagValue(m.CommentLines, tagValueFalse) { + continue + } + if shouldInlineMembers(&m) { + required, err = g.generateMembers(m.Type, required) + if err != nil { + return required, err + } + continue + } + name := getReferableName(&m) + if name == "" { + continue + } + if !hasOptionalTag(&m) { + required = append(required, name) + } + if err = g.generateProperty(&m, t); err != nil { + klog.Errorf("Error when generating: %v, %v\n", name, m) + return required, err + } + } + return required, nil +} + +func (g openAPITypeWriter) generateCall(t *types.Type) error { + // Only generate for struct type and ignore the rest + switch t.Kind { + case types.Struct: + args := argsFromType(t) + g.Do("\"$.$\": ", t.Name) + + hasV2Definition := hasOpenAPIDefinitionMethod(t) + hasV2DefinitionTypeAndFormat := hasOpenAPIDefinitionMethods(t) + hasV3Definition := hasOpenAPIV3DefinitionMethod(t) + + switch { + case hasV2DefinitionTypeAndFormat: + g.Do(nameTmpl+"(ref),\n", args) + case hasV2Definition && hasV3Definition: + g.Do("common.EmbedOpenAPIDefinitionIntoV2Extension($.type|raw${}.OpenAPIV3Definition(), $.type|raw${}.OpenAPIDefinition()),\n", args) + case hasV2Definition: + g.Do("$.type|raw${}.OpenAPIDefinition(),\n", args) + case hasV3Definition: + g.Do("$.type|raw${}.OpenAPIV3Definition(),\n", args) + default: + g.Do(nameTmpl+"(ref),\n", args) + } + } + return g.Error() +} + +func (g openAPITypeWriter) generate(t *types.Type) error { + // Only generate for struct type and ignore the rest + switch t.Kind { + case types.Struct: + hasV2Definition := hasOpenAPIDefinitionMethod(t) + hasV2DefinitionTypeAndFormat := hasOpenAPIDefinitionMethods(t) + hasV3OneOfTypes := hasOpenAPIV3OneOfMethod(t) + hasV3Definition := hasOpenAPIV3DefinitionMethod(t) + + if hasV2Definition || (hasV3Definition && !hasV2DefinitionTypeAndFormat) { + // already invoked directly + return nil + } + + args := argsFromType(t) + g.Do("func "+nameTmpl+"(ref $.ReferenceCallback|raw$) $.OpenAPIDefinition|raw$ {\n", args) + switch { + case hasV2DefinitionTypeAndFormat && hasV3Definition: + g.Do("return common.EmbedOpenAPIDefinitionIntoV2Extension($.type|raw${}.OpenAPIV3Definition(), $.OpenAPIDefinition|raw${\n"+ + "Schema: spec.Schema{\n"+ + "SchemaProps: spec.SchemaProps{\n", args) + g.generateDescription(t.CommentLines) + g.Do("Type:$.type|raw${}.OpenAPISchemaType(),\n"+ + "Format:$.type|raw${}.OpenAPISchemaFormat(),\n"+ + "},\n"+ + "},\n"+ + "})\n}\n\n", args) + return nil + case hasV2DefinitionTypeAndFormat && hasV3OneOfTypes: + // generate v3 def. + g.Do("return common.EmbedOpenAPIDefinitionIntoV2Extension($.OpenAPIDefinition|raw${\n"+ + "Schema: spec.Schema{\n"+ + "SchemaProps: spec.SchemaProps{\n", args) + g.generateDescription(t.CommentLines) + g.Do("OneOf:common.GenerateOpenAPIV3OneOfSchema($.type|raw${}.OpenAPIV3OneOfTypes()),\n"+ + "Format:$.type|raw${}.OpenAPISchemaFormat(),\n"+ + "},\n"+ + "},\n"+ + "},", args) + // generate v2 def. + g.Do("$.OpenAPIDefinition|raw${\n"+ + "Schema: spec.Schema{\n"+ + "SchemaProps: spec.SchemaProps{\n", args) + g.generateDescription(t.CommentLines) + g.Do("Type:$.type|raw${}.OpenAPISchemaType(),\n"+ + "Format:$.type|raw${}.OpenAPISchemaFormat(),\n"+ + "},\n"+ + "},\n"+ + "})\n}\n\n", args) + return nil + case hasV2DefinitionTypeAndFormat: + g.Do("return $.OpenAPIDefinition|raw${\n"+ + "Schema: spec.Schema{\n"+ + "SchemaProps: spec.SchemaProps{\n", args) + g.generateDescription(t.CommentLines) + g.Do("Type:$.type|raw${}.OpenAPISchemaType(),\n"+ + "Format:$.type|raw${}.OpenAPISchemaFormat(),\n"+ + "},\n"+ + "},\n"+ + "}\n}\n\n", args) + return nil + case hasV3OneOfTypes: + // having v3 oneOf types without custom v2 type or format does not make sense. + return fmt.Errorf("type %q has v3 one of types but not v2 type or format", t.Name) + } + g.Do("return $.OpenAPIDefinition|raw${\nSchema: spec.Schema{\nSchemaProps: spec.SchemaProps{\n", args) + g.generateDescription(t.CommentLines) + g.Do("Type: []string{\"object\"},\n", nil) + + // write members into a temporary buffer, in order to postpone writing out the Properties field. We only do + // that if it is not empty. + propertiesBuf := bytes.Buffer{} + bsw := g + bsw.SnippetWriter = generator.NewSnippetWriter(&propertiesBuf, g.context, "$", "$") + required, err := bsw.generateMembers(t, []string{}) + if err != nil { + return err + } + if propertiesBuf.Len() > 0 { + g.Do("Properties: map[string]$.SpecSchemaType|raw${\n", args) + g.Do(strings.Replace(propertiesBuf.String(), "$", "$\"$\"$", -1), nil) // escape $ (used as delimiter of the templates) + g.Do("},\n", nil) + } + + if len(required) > 0 { + g.Do("Required: []string{\"$.$\"},\n", strings.Join(required, "\",\"")) + } + g.Do("},\n", nil) + if err := g.generateStructExtensions(t); err != nil { + return err + } + g.Do("},\n", nil) + + // Map order is undefined, sort them or we may get a different file generated each time. + keys := []string{} + for k := range g.refTypes { + keys = append(keys, k) + } + sort.Strings(keys) + deps := []string{} + for _, k := range keys { + v := g.refTypes[k] + if t, _ := openapi.OpenAPITypeFormat(v.String()); t != "" { + // This is a known type, we do not need a reference to it + // Will eliminate special case of time.Time + continue + } + deps = append(deps, k) + } + if len(deps) > 0 { + g.Do("Dependencies: []string{\n", args) + for _, k := range deps { + g.Do("\"$.$\",", k) + } + g.Do("},\n", nil) + } + g.Do("}\n}\n\n", nil) + } + return nil +} + +func (g openAPITypeWriter) generateStructExtensions(t *types.Type) error { + extensions, errors := parseExtensions(t.CommentLines) + // Initially, we will only log struct extension errors. + if len(errors) > 0 { + for _, e := range errors { + klog.Errorf("[%s]: %s\n", t.String(), e) + } + } + unions, errors := parseUnions(t) + if len(errors) > 0 { + for _, e := range errors { + klog.Errorf("[%s]: %s\n", t.String(), e) + } + } + + // TODO(seans3): Validate struct extensions here. + g.emitExtensions(extensions, unions) + return nil +} + +func (g openAPITypeWriter) generateMemberExtensions(m *types.Member, parent *types.Type) error { + extensions, parseErrors := parseExtensions(m.CommentLines) + validationErrors := validateMemberExtensions(extensions, m) + errors := append(parseErrors, validationErrors...) + // Initially, we will only log member extension errors. + if len(errors) > 0 { + errorPrefix := fmt.Sprintf("[%s] %s:", parent.String(), m.String()) + for _, e := range errors { + klog.V(2).Infof("%s %s\n", errorPrefix, e) + } + } + g.emitExtensions(extensions, nil) + return nil +} + +func (g openAPITypeWriter) emitExtensions(extensions []extension, unions []union) { + // If any extensions exist, then emit code to create them. + if len(extensions) == 0 && len(unions) == 0 { + return + } + g.Do("VendorExtensible: spec.VendorExtensible{\nExtensions: spec.Extensions{\n", nil) + for _, extension := range extensions { + g.Do("\"$.$\": ", extension.xName) + if extension.hasMultipleValues() || extension.isAlwaysArrayFormat() { + g.Do("[]interface{}{\n", nil) + } + for _, value := range extension.values { + g.Do("\"$.$\",\n", value) + } + if extension.hasMultipleValues() || extension.isAlwaysArrayFormat() { + g.Do("},\n", nil) + } + } + if len(unions) > 0 { + g.Do("\"x-kubernetes-unions\": []interface{}{\n", nil) + for _, u := range unions { + u.emit(g) + } + g.Do("},\n", nil) + } + g.Do("},\n},\n", nil) +} + +// TODO(#44005): Move this validation outside of this generator (probably to policy verifier) +func (g openAPITypeWriter) validatePatchTags(m *types.Member, parent *types.Type) error { + // TODO: Remove patch struct tag validation because they we are now consuming OpenAPI on server. + for _, tagKey := range tempPatchTags { + structTagValue := reflect.StructTag(m.Tags).Get(tagKey) + commentTagValue, err := getSingleTagsValue(m.CommentLines, tagKey) + if err != nil { + return err + } + if structTagValue != commentTagValue { + return fmt.Errorf("Tags in comment and struct should match for member (%s) of (%s)", + m.Name, parent.Name.String()) + } + } + return nil +} + +func defaultFromComments(comments []string) (interface{}, error) { + tag, err := getSingleTagsValue(comments, tagDefault) + if tag == "" { + return nil, err + } + var i interface{} + if err := json.Unmarshal([]byte(tag), &i); err != nil { + return nil, fmt.Errorf("failed to unmarshal default: %v", err) + } + return i, nil +} + +func mustEnforceDefault(t *types.Type, omitEmpty bool) (interface{}, error) { + switch t.Kind { + case types.Pointer, types.Map, types.Slice, types.Array, types.Interface: + return nil, nil + case types.Struct: + return map[string]interface{}{}, nil + case types.Builtin: + if !omitEmpty { + if zero, ok := openapi.OpenAPIZeroValue(t.String()); ok { + return zero, nil + } else { + return nil, fmt.Errorf("please add type %v to getOpenAPITypeFormat function", t) + } + } + return nil, nil + default: + return nil, fmt.Errorf("not sure how to enforce default for %v", t.Kind) + } +} + +func (g openAPITypeWriter) generateDefault(comments []string, t *types.Type, omitEmpty bool) error { + t = resolveAliasAndEmbeddedType(t) + def, err := defaultFromComments(comments) + if err != nil { + return err + } + if enforced, err := mustEnforceDefault(t, omitEmpty); err != nil { + return err + } else if enforced != nil { + if def == nil { + def = enforced + } else if !reflect.DeepEqual(def, enforced) { + enforcedJson, _ := json.Marshal(enforced) + return fmt.Errorf("invalid default value (%#v) for non-pointer/non-omitempty. If specified, must be: %v", def, string(enforcedJson)) + } + } + if def != nil { + g.Do("Default: $.$,\n", fmt.Sprintf("%#v", def)) + } + return nil +} + +func (g openAPITypeWriter) generateDescription(CommentLines []string) { + var buffer bytes.Buffer + delPrevChar := func() { + if buffer.Len() > 0 { + buffer.Truncate(buffer.Len() - 1) // Delete the last " " or "\n" + } + } + + for _, line := range CommentLines { + // Ignore all lines after --- + if line == "---" { + break + } + line = strings.TrimRight(line, " ") + leading := strings.TrimLeft(line, " ") + switch { + case len(line) == 0: // Keep paragraphs + delPrevChar() + buffer.WriteString("\n\n") + case strings.HasPrefix(leading, "TODO"): // Ignore one line TODOs + case strings.HasPrefix(leading, "+"): // Ignore instructions to go2idl + default: + if strings.HasPrefix(line, " ") || strings.HasPrefix(line, "\t") { + delPrevChar() + line = "\n" + line + "\n" // Replace it with newline. This is useful when we have a line with: "Example:\n\tJSON-something..." + } else { + line += " " + } + buffer.WriteString(line) + } + } + + postDoc := strings.TrimLeft(buffer.String(), "\n") + postDoc = strings.TrimRight(postDoc, "\n") + postDoc = strings.Replace(postDoc, "\\\"", "\"", -1) // replace user's \" to " + postDoc = strings.Replace(postDoc, "\"", "\\\"", -1) // Escape " + postDoc = strings.Replace(postDoc, "\n", "\\n", -1) + postDoc = strings.Replace(postDoc, "\t", "\\t", -1) + postDoc = strings.Trim(postDoc, " ") + if postDoc != "" { + g.Do("Description: \"$.$\",\n", postDoc) + } +} + +func (g openAPITypeWriter) generateProperty(m *types.Member, parent *types.Type) error { + name := getReferableName(m) + if name == "" { + return nil + } + if err := g.validatePatchTags(m, parent); err != nil { + return err + } + g.Do("\"$.$\": {\n", name) + if err := g.generateMemberExtensions(m, parent); err != nil { + return err + } + g.Do("SchemaProps: spec.SchemaProps{\n", nil) + var extraComments []string + if enumType, isEnum := g.enumContext.EnumType(m.Type); isEnum { + extraComments = enumType.DescriptionLines() + } + g.generateDescription(append(m.CommentLines, extraComments...)) + jsonTags := getJsonTags(m) + if len(jsonTags) > 1 && jsonTags[1] == "string" { + g.generateSimpleProperty("string", "") + g.Do("},\n},\n", nil) + return nil + } + omitEmpty := strings.Contains(reflect.StructTag(m.Tags).Get("json"), "omitempty") + if err := g.generateDefault(m.CommentLines, m.Type, omitEmpty); err != nil { + return fmt.Errorf("failed to generate default in %v: %v: %v", parent, m.Name, err) + } + t := resolveAliasAndPtrType(m.Type) + // If we can get a openAPI type and format for this type, we consider it to be simple property + typeString, format := openapi.OpenAPITypeFormat(t.String()) + if typeString != "" { + g.generateSimpleProperty(typeString, format) + if enumType, isEnum := g.enumContext.EnumType(m.Type); isEnum { + // original type is an enum, add "Enum: " and the values + g.Do("Enum: []interface{}{$.$},\n", strings.Join(enumType.ValueStrings(), ", ")) + } + g.Do("},\n},\n", nil) + return nil + } + switch t.Kind { + case types.Builtin: + return fmt.Errorf("please add type %v to getOpenAPITypeFormat function", t) + case types.Map: + if err := g.generateMapProperty(t); err != nil { + return fmt.Errorf("failed to generate map property in %v: %v: %v", parent, m.Name, err) + } + case types.Slice, types.Array: + if err := g.generateSliceProperty(t); err != nil { + return fmt.Errorf("failed to generate slice property in %v: %v: %v", parent, m.Name, err) + } + case types.Struct, types.Interface: + g.generateReferenceProperty(t) + default: + return fmt.Errorf("cannot generate spec for type %v", t) + } + g.Do("},\n},\n", nil) + return g.Error() +} + +func (g openAPITypeWriter) generateSimpleProperty(typeString, format string) { + g.Do("Type: []string{\"$.$\"},\n", typeString) + g.Do("Format: \"$.$\",\n", format) +} + +func (g openAPITypeWriter) generateReferenceProperty(t *types.Type) { + g.refTypes[t.Name.String()] = t + g.Do("Ref: ref(\"$.$\"),\n", t.Name.String()) +} + +func resolveAliasAndEmbeddedType(t *types.Type) *types.Type { + var prev *types.Type + for prev != t { + prev = t + if t.Kind == types.Alias { + t = t.Underlying + } + if t.Kind == types.Struct { + if len(t.Members) == 1 && t.Members[0].Embedded { + t = t.Members[0].Type + } + } + } + return t +} + +func resolveAliasAndPtrType(t *types.Type) *types.Type { + var prev *types.Type + for prev != t { + prev = t + if t.Kind == types.Alias { + t = t.Underlying + } + if t.Kind == types.Pointer { + t = t.Elem + } + } + return t +} + +func (g openAPITypeWriter) generateMapProperty(t *types.Type) error { + keyType := resolveAliasAndPtrType(t.Key) + elemType := resolveAliasAndPtrType(t.Elem) + + // According to OpenAPI examples, only map from string is supported + if keyType.Name.Name != "string" { + return fmt.Errorf("map with non-string keys are not supported by OpenAPI in %v", t) + } + + g.Do("Type: []string{\"object\"},\n", nil) + g.Do("AdditionalProperties: &spec.SchemaOrBool{\nAllows: true,\nSchema: &spec.Schema{\nSchemaProps: spec.SchemaProps{\n", nil) + if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false); err != nil { + return err + } + typeString, format := openapi.OpenAPITypeFormat(elemType.String()) + if typeString != "" { + g.generateSimpleProperty(typeString, format) + g.Do("},\n},\n},\n", nil) + return nil + } + switch elemType.Kind { + case types.Builtin: + return fmt.Errorf("please add type %v to getOpenAPITypeFormat function", elemType) + case types.Struct: + g.generateReferenceProperty(elemType) + case types.Slice, types.Array: + if err := g.generateSliceProperty(elemType); err != nil { + return err + } + case types.Map: + if err := g.generateMapProperty(elemType); err != nil { + return err + } + default: + return fmt.Errorf("map Element kind %v is not supported in %v", elemType.Kind, t.Name) + } + g.Do("},\n},\n},\n", nil) + return nil +} + +func (g openAPITypeWriter) generateSliceProperty(t *types.Type) error { + elemType := resolveAliasAndPtrType(t.Elem) + g.Do("Type: []string{\"array\"},\n", nil) + g.Do("Items: &spec.SchemaOrArray{\nSchema: &spec.Schema{\nSchemaProps: spec.SchemaProps{\n", nil) + if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false); err != nil { + return err + } + typeString, format := openapi.OpenAPITypeFormat(elemType.String()) + if typeString != "" { + g.generateSimpleProperty(typeString, format) + g.Do("},\n},\n},\n", nil) + return nil + } + switch elemType.Kind { + case types.Builtin: + return fmt.Errorf("please add type %v to getOpenAPITypeFormat function", elemType) + case types.Struct: + g.generateReferenceProperty(elemType) + case types.Slice, types.Array: + if err := g.generateSliceProperty(elemType); err != nil { + return err + } + case types.Map: + if err := g.generateMapProperty(elemType); err != nil { + return err + } + default: + return fmt.Errorf("slice Element kind %v is not supported in %v", elemType.Kind, t) + } + g.Do("},\n},\n},\n", nil) + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/OWNERS b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/OWNERS new file mode 100644 index 000000000000..235bc545b88b --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/OWNERS @@ -0,0 +1,4 @@ +reviewers: +- roycaihw +approvers: +- roycaihw diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/doc.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/doc.go new file mode 100644 index 000000000000..384a44dca07e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/doc.go @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package rules contains API rules that are enforced in OpenAPI spec generation +// as part of the machinery. Files under this package implement APIRule interface +// which evaluates Go type and produces list of API rule violations. +// +// Implementations of APIRule should be added to API linter under openAPIGen code- +// generator to get integrated in the generation process. +package rules diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/idl_tag.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/idl_tag.go new file mode 100644 index 000000000000..474d79e89dce --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/idl_tag.go @@ -0,0 +1,53 @@ +package rules + +import ( + "k8s.io/gengo/types" +) + +const ListTypeIDLTag = "listType" + +// ListTypeMissing implements APIRule interface. +// A list type is required for inlined list. +type ListTypeMissing struct{} + +// Name returns the name of APIRule +func (l *ListTypeMissing) Name() string { + return "list_type_missing" +} + +// Validate evaluates API rule on type t and returns a list of field names in +// the type that violate the rule. Empty field name [""] implies the entire +// type violates the rule. +func (l *ListTypeMissing) Validate(t *types.Type) ([]string, error) { + fields := make([]string, 0) + + switch t.Kind { + case types.Struct: + for _, m := range t.Members { + hasListType := types.ExtractCommentTags("+", m.CommentLines)[ListTypeIDLTag] != nil + + if m.Name == "Items" && m.Type.Kind == types.Slice && hasNamedMember(t, "ListMeta") { + if hasListType { + fields = append(fields, m.Name) + } + continue + } + + if m.Type.Kind == types.Slice && !hasListType { + fields = append(fields, m.Name) + continue + } + } + } + + return fields, nil +} + +func hasNamedMember(t *types.Type, name string) bool { + for _, m := range t.Members { + if m.Name == name { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/names_match.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/names_match.go new file mode 100644 index 000000000000..581722257f06 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/names_match.go @@ -0,0 +1,178 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rules + +import ( + "reflect" + "strings" + + "k8s.io/kube-openapi/pkg/util/sets" + + "k8s.io/gengo/types" +) + +var ( + // Blacklist of JSON tags that should skip match evaluation + jsonTagBlacklist = sets.NewString( + // Omitted field is ignored by the package + "-", + ) + + // Blacklist of JSON names that should skip match evaluation + jsonNameBlacklist = sets.NewString( + // Empty name is used for inline struct field (e.g. metav1.TypeMeta) + "", + // Special case for object and list meta + "metadata", + ) + + // List of substrings that aren't allowed in Go name and JSON name + disallowedNameSubstrings = sets.NewString( + // Underscore is not allowed in either name + "_", + // Dash is not allowed in either name. Note that since dash is a valid JSON tag, this should be checked + // after JSON tag blacklist check. + "-", + ) +) + +/* +NamesMatch implements APIRule interface. +Go field names must be CamelCase. JSON field names must be camelCase. Other than capitalization of the +initial letter, the two should almost always match. No underscores nor dashes in either. +This rule verifies the convention "Other than capitalization of the initial letter, the two should almost always match." +Examples (also in unit test): + + Go name | JSON name | match + podSpec false + PodSpec podSpec true + PodSpec PodSpec false + podSpec podSpec false + PodSpec spec false + Spec podSpec false + JSONSpec jsonSpec true + JSONSpec jsonspec false + HTTPJSONSpec httpJSONSpec true + +NOTE: this validator cannot tell two sequential all-capital words from one word, therefore the case below +is also considered matched. + + HTTPJSONSpec httpjsonSpec true + +NOTE: JSON names in jsonNameBlacklist should skip evaluation + + true + podSpec true + podSpec - true + podSpec metadata true +*/ +type NamesMatch struct{} + +// Name returns the name of APIRule +func (n *NamesMatch) Name() string { + return "names_match" +} + +// Validate evaluates API rule on type t and returns a list of field names in +// the type that violate the rule. Empty field name [""] implies the entire +// type violates the rule. +func (n *NamesMatch) Validate(t *types.Type) ([]string, error) { + fields := make([]string, 0) + + // Only validate struct type and ignore the rest + switch t.Kind { + case types.Struct: + for _, m := range t.Members { + goName := m.Name + jsonTag, ok := reflect.StructTag(m.Tags).Lookup("json") + // Distinguish empty JSON tag and missing JSON tag. Empty JSON tag / name is + // allowed (in JSON name blacklist) but missing JSON tag is invalid. + if !ok { + fields = append(fields, goName) + continue + } + if jsonTagBlacklist.Has(jsonTag) { + continue + } + jsonName := strings.Split(jsonTag, ",")[0] + if !namesMatch(goName, jsonName) { + fields = append(fields, goName) + } + } + } + return fields, nil +} + +// namesMatch evaluates if goName and jsonName match the API rule +// TODO: Use an off-the-shelf CamelCase solution instead of implementing this logic. The following existing +// +// packages have been tried out: +// github.com/markbates/inflect +// github.com/segmentio/go-camelcase +// github.com/iancoleman/strcase +// github.com/fatih/camelcase +// Please see https://github.com/kubernetes/kube-openapi/pull/83#issuecomment-400842314 for more details +// about why they don't satisfy our need. What we need can be a function that detects an acronym at the +// beginning of a string. +func namesMatch(goName, jsonName string) bool { + if jsonNameBlacklist.Has(jsonName) { + return true + } + if !isAllowedName(goName) || !isAllowedName(jsonName) { + return false + } + if strings.ToLower(goName) != strings.ToLower(jsonName) { + return false + } + // Go field names must be CamelCase. JSON field names must be camelCase. + if !isCapital(goName[0]) || isCapital(jsonName[0]) { + return false + } + for i := 0; i < len(goName); i++ { + if goName[i] == jsonName[i] { + // goName[0:i-1] is uppercase and jsonName[0:i-1] is lowercase, goName[i:] + // and jsonName[i:] should match; + // goName[i] should be lowercase if i is equal to 1, e.g.: + // goName | jsonName + // PodSpec podSpec + // or uppercase if i is greater than 1, e.g.: + // goname | jsonName + // JSONSpec jsonSpec + // This is to rule out cases like: + // goname | jsonName + // JSONSpec jsonspec + return goName[i:] == jsonName[i:] && (i == 1 || isCapital(goName[i])) + } + } + return true +} + +// isCapital returns true if one character is capital +func isCapital(b byte) bool { + return b >= 'A' && b <= 'Z' +} + +// isAllowedName checks the list of disallowedNameSubstrings and returns true if name doesn't contain +// any disallowed substring. +func isAllowedName(name string) bool { + for _, substr := range disallowedNameSubstrings.UnsortedList() { + if strings.Contains(name, substr) { + return false + } + } + return true +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/omitempty_match_case.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/omitempty_match_case.go new file mode 100644 index 000000000000..dd37ad8a578a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/rules/omitempty_match_case.go @@ -0,0 +1,64 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rules + +import ( + "reflect" + "strings" + + "k8s.io/gengo/types" +) + +// OmitEmptyMatchCase implements APIRule interface. +// "omitempty" must appear verbatim (no case variants). +type OmitEmptyMatchCase struct{} + +func (n *OmitEmptyMatchCase) Name() string { + return "omitempty_match_case" +} + +func (n *OmitEmptyMatchCase) Validate(t *types.Type) ([]string, error) { + fields := make([]string, 0) + + // Only validate struct type and ignore the rest + switch t.Kind { + case types.Struct: + for _, m := range t.Members { + goName := m.Name + jsonTag, ok := reflect.StructTag(m.Tags).Lookup("json") + if !ok { + continue + } + + parts := strings.Split(jsonTag, ",") + if len(parts) < 2 { + // no tags other than name + continue + } + if parts[0] == "-" { + // not serialized + continue + } + for _, part := range parts[1:] { + if strings.EqualFold(part, "omitempty") && part != "omitempty" { + fields = append(fields, goName) + } + } + } + } + return fields, nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/union.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/union.go new file mode 100644 index 000000000000..a0281fe4706f --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/union.go @@ -0,0 +1,207 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generators + +import ( + "fmt" + "sort" + + "k8s.io/gengo/types" +) + +const tagUnionMember = "union" +const tagUnionDeprecated = "unionDeprecated" +const tagUnionDiscriminator = "unionDiscriminator" + +type union struct { + discriminator string + fieldsToDiscriminated map[string]string +} + +// emit prints the union, can be called on a nil union (emits nothing) +func (u *union) emit(g openAPITypeWriter) { + if u == nil { + return + } + g.Do("map[string]interface{}{\n", nil) + if u.discriminator != "" { + g.Do("\"discriminator\": \"$.$\",\n", u.discriminator) + } + g.Do("\"fields-to-discriminateBy\": map[string]interface{}{\n", nil) + keys := []string{} + for field := range u.fieldsToDiscriminated { + keys = append(keys, field) + } + sort.Strings(keys) + for _, field := range keys { + g.Do("\"$.$\": ", field) + g.Do("\"$.$\",\n", u.fieldsToDiscriminated[field]) + } + g.Do("},\n", nil) + g.Do("},\n", nil) +} + +// Sets the discriminator if it's not set yet, otherwise return an error +func (u *union) setDiscriminator(value string) []error { + errors := []error{} + if u.discriminator != "" { + errors = append(errors, fmt.Errorf("at least two discriminators found: %v and %v", value, u.discriminator)) + } + u.discriminator = value + return errors +} + +// Add a new member to the union +func (u *union) addMember(jsonName, variableName string) { + if _, ok := u.fieldsToDiscriminated[jsonName]; ok { + panic(fmt.Errorf("same field (%v) found multiple times", jsonName)) + } + u.fieldsToDiscriminated[jsonName] = variableName +} + +// Makes sure that the union is valid, specifically looking for re-used discriminated +func (u *union) isValid() []error { + errors := []error{} + // Case 1: discriminator but no fields + if u.discriminator != "" && len(u.fieldsToDiscriminated) == 0 { + errors = append(errors, fmt.Errorf("discriminator set with no fields in union")) + } + // Case 2: two fields have the same discriminated value + discriminated := map[string]struct{}{} + for _, d := range u.fieldsToDiscriminated { + if _, ok := discriminated[d]; ok { + errors = append(errors, fmt.Errorf("discriminated value is used twice: %v", d)) + } + discriminated[d] = struct{}{} + } + // Case 3: a field is both discriminator AND part of the union + if u.discriminator != "" { + if _, ok := u.fieldsToDiscriminated[u.discriminator]; ok { + errors = append(errors, fmt.Errorf("%v can't be both discriminator and part of the union", u.discriminator)) + } + } + return errors +} + +// Find unions either directly on the members (or inlined members, not +// going across types) or on the type itself, or on embedded types. +func parseUnions(t *types.Type) ([]union, []error) { + errors := []error{} + unions := []union{} + su, err := parseUnionStruct(t) + if su != nil { + unions = append(unions, *su) + } + errors = append(errors, err...) + eu, err := parseEmbeddedUnion(t) + unions = append(unions, eu...) + errors = append(errors, err...) + mu, err := parseUnionMembers(t) + if mu != nil { + unions = append(unions, *mu) + } + errors = append(errors, err...) + return unions, errors +} + +// Find unions in embedded types, unions shouldn't go across types. +func parseEmbeddedUnion(t *types.Type) ([]union, []error) { + errors := []error{} + unions := []union{} + for _, m := range t.Members { + if hasOpenAPITagValue(m.CommentLines, tagValueFalse) { + continue + } + if !shouldInlineMembers(&m) { + continue + } + u, err := parseUnions(m.Type) + unions = append(unions, u...) + errors = append(errors, err...) + } + return unions, errors +} + +// Look for union tag on a struct, and then include all the fields +// (except the discriminator if there is one). The struct shouldn't have +// embedded types. +func parseUnionStruct(t *types.Type) (*union, []error) { + errors := []error{} + if types.ExtractCommentTags("+", t.CommentLines)[tagUnionMember] == nil { + return nil, nil + } + + u := &union{fieldsToDiscriminated: map[string]string{}} + + for _, m := range t.Members { + jsonName := getReferableName(&m) + if jsonName == "" { + continue + } + if shouldInlineMembers(&m) { + errors = append(errors, fmt.Errorf("union structures can't have embedded fields: %v.%v", t.Name, m.Name)) + continue + } + if types.ExtractCommentTags("+", m.CommentLines)[tagUnionDeprecated] != nil { + errors = append(errors, fmt.Errorf("union struct can't have unionDeprecated members: %v.%v", t.Name, m.Name)) + continue + } + if types.ExtractCommentTags("+", m.CommentLines)[tagUnionDiscriminator] != nil { + errors = append(errors, u.setDiscriminator(jsonName)...) + } else { + if !hasOptionalTag(&m) { + errors = append(errors, fmt.Errorf("union members must be optional: %v.%v", t.Name, m.Name)) + } + u.addMember(jsonName, m.Name) + } + } + + return u, errors +} + +// Find unions specifically on members. +func parseUnionMembers(t *types.Type) (*union, []error) { + errors := []error{} + u := &union{fieldsToDiscriminated: map[string]string{}} + + for _, m := range t.Members { + jsonName := getReferableName(&m) + if jsonName == "" { + continue + } + if shouldInlineMembers(&m) { + continue + } + if types.ExtractCommentTags("+", m.CommentLines)[tagUnionDiscriminator] != nil { + errors = append(errors, u.setDiscriminator(jsonName)...) + } + if types.ExtractCommentTags("+", m.CommentLines)[tagUnionMember] != nil { + errors = append(errors, fmt.Errorf("union tag is not accepted on struct members: %v.%v", t.Name, m.Name)) + continue + } + if types.ExtractCommentTags("+", m.CommentLines)[tagUnionDeprecated] != nil { + if !hasOptionalTag(&m) { + errors = append(errors, fmt.Errorf("union members must be optional: %v.%v", t.Name, m.Name)) + } + u.addMember(jsonName, m.Name) + } + } + if len(u.fieldsToDiscriminated) == 0 { + return nil, nil + } + return u, append(errors, u.isValid()...) +} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/empty.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/empty.go new file mode 100644 index 000000000000..13303ea8900e --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/empty.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +// NOTE: This file is copied from k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/sets/empty.go +// because in Kubernetes we don't allowed vendor code to import staging code. See +// https://github.com/kubernetes/kube-openapi/pull/90 for more details. + +package sets + +// Empty is public since it is used by some internal API objects for conversions between external +// string arrays and internal sets, and conversion logic requires public types today. +type Empty struct{} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/string.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/string.go new file mode 100644 index 000000000000..53f2bc12aae6 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/util/sets/string.go @@ -0,0 +1,207 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +// NOTE: This file is copied from k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/sets/string.go +// because in Kubernetes we don't allowed vendor code to import staging code. See +// https://github.com/kubernetes/kube-openapi/pull/90 for more details. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.String is a set of strings, implemented via map[string]struct{} for minimal memory consumption. +type String map[string]Empty + +// NewString creates a String from a list of values. +func NewString(items ...string) String { + ss := String{} + ss.Insert(items...) + return ss +} + +// StringKeySet creates a String from a keys of a map[string](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func StringKeySet(theMap interface{}) String { + v := reflect.ValueOf(theMap) + ret := String{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(string)) + } + return ret +} + +// Insert adds items to the set. +func (s String) Insert(items ...string) { + for _, item := range items { + s[item] = Empty{} + } +} + +// Delete removes all items from the set. +func (s String) Delete(items ...string) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true if and only if item is contained in the set. +func (s String) Has(item string) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s String) HasAll(items ...string) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s String) HasAny(items ...string) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s String) Difference(s2 String) String { + result := NewString() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 String) Union(s2 String) String { + result := NewString() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 String) Intersection(s2 String) String { + var walk, other String + result := NewString() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 String) IsSuperset(s2 String) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 String) Equal(s2 String) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfString []string + +func (s sortableSliceOfString) Len() int { return len(s) } +func (s sortableSliceOfString) Less(i, j int) bool { return lessString(s[i], s[j]) } +func (s sortableSliceOfString) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted string slice. +func (s String) List() []string { + res := make(sortableSliceOfString, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []string(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s String) UnsortedList() []string { + res := make([]string, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s String) PopAny() (string, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue string + return zeroValue, false +} + +// Len returns the size of the set. +func (s String) Len() int { + return len(s) +} + +func lessString(lhs, rhs string) bool { + return lhs < rhs +} diff --git a/cluster-autoscaler/vendor/modules.txt b/cluster-autoscaler/vendor/modules.txt index 5187e471a171..01efcd42a709 100644 --- a/cluster-autoscaler/vendor/modules.txt +++ b/cluster-autoscaler/vendor/modules.txt @@ -258,6 +258,9 @@ github.com/go-openapi/jsonreference/internal # github.com/go-openapi/swag v0.22.3 ## explicit; go 1.18 github.com/go-openapi/swag +# github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 +## explicit; go 1.13 +github.com/go-task/slim-sprig # github.com/godbus/dbus/v5 v5.0.6 ## explicit; go 1.12 github.com/godbus/dbus/v5 @@ -382,6 +385,9 @@ github.com/google/go-querystring/query ## explicit; go 1.12 github.com/google/gofuzz github.com/google/gofuzz/bytesource +# github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 +## explicit; go 1.14 +github.com/google/pprof/profile # github.com/google/uuid v1.3.0 ## explicit github.com/google/uuid @@ -475,6 +481,40 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate +# github.com/onsi/ginkgo/v2 v2.9.4 +## explicit; go 1.18 +github.com/onsi/ginkgo/v2 +github.com/onsi/ginkgo/v2/config +github.com/onsi/ginkgo/v2/formatter +github.com/onsi/ginkgo/v2/ginkgo +github.com/onsi/ginkgo/v2/ginkgo/build +github.com/onsi/ginkgo/v2/ginkgo/command +github.com/onsi/ginkgo/v2/ginkgo/generators +github.com/onsi/ginkgo/v2/ginkgo/internal +github.com/onsi/ginkgo/v2/ginkgo/labels +github.com/onsi/ginkgo/v2/ginkgo/outline +github.com/onsi/ginkgo/v2/ginkgo/run +github.com/onsi/ginkgo/v2/ginkgo/unfocus +github.com/onsi/ginkgo/v2/ginkgo/watch +github.com/onsi/ginkgo/v2/internal +github.com/onsi/ginkgo/v2/internal/global +github.com/onsi/ginkgo/v2/internal/interrupt_handler +github.com/onsi/ginkgo/v2/internal/parallel_support +github.com/onsi/ginkgo/v2/internal/testingtproxy +github.com/onsi/ginkgo/v2/reporters +github.com/onsi/ginkgo/v2/types +# github.com/onsi/gomega v1.27.6 +## explicit; go 1.18 +github.com/onsi/gomega +github.com/onsi/gomega/format +github.com/onsi/gomega/internal +github.com/onsi/gomega/internal/gutil +github.com/onsi/gomega/matchers +github.com/onsi/gomega/matchers/support/goraph/bipartitegraph +github.com/onsi/gomega/matchers/support/goraph/edge +github.com/onsi/gomega/matchers/support/goraph/node +github.com/onsi/gomega/matchers/support/goraph/util +github.com/onsi/gomega/types # github.com/opencontainers/go-digest v1.0.0 ## explicit; go 1.13 github.com/opencontainers/go-digest @@ -748,6 +788,8 @@ golang.org/x/exp/constraints golang.org/x/exp/slices # golang.org/x/mod v0.10.0 ## explicit; go 1.17 +golang.org/x/mod/internal/lazyregexp +golang.org/x/mod/module golang.org/x/mod/semver # golang.org/x/net v0.13.0 ## explicit; go 1.17 @@ -755,6 +797,7 @@ golang.org/x/net/bpf golang.org/x/net/context golang.org/x/net/html golang.org/x/net/html/atom +golang.org/x/net/html/charset golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack @@ -793,8 +836,14 @@ golang.org/x/term # golang.org/x/text v0.11.0 ## explicit; go 1.17 golang.org/x/text/encoding +golang.org/x/text/encoding/charmap +golang.org/x/text/encoding/htmlindex golang.org/x/text/encoding/internal golang.org/x/text/encoding/internal/identifier +golang.org/x/text/encoding/japanese +golang.org/x/text/encoding/korean +golang.org/x/text/encoding/simplifiedchinese +golang.org/x/text/encoding/traditionalchinese golang.org/x/text/encoding/unicode golang.org/x/text/feature/plural golang.org/x/text/internal @@ -821,16 +870,22 @@ golang.org/x/time/rate # golang.org/x/tools v0.8.0 ## explicit; go 1.18 golang.org/x/tools/cmd/stringer +golang.org/x/tools/go/ast/astutil +golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver golang.org/x/tools/go/packages golang.org/x/tools/go/types/objectpath +golang.org/x/tools/imports golang.org/x/tools/internal/event golang.org/x/tools/internal/event/core golang.org/x/tools/internal/event/keys golang.org/x/tools/internal/event/label +golang.org/x/tools/internal/fastwalk golang.org/x/tools/internal/gcimporter golang.org/x/tools/internal/gocommand +golang.org/x/tools/internal/gopathwalk +golang.org/x/tools/internal/imports golang.org/x/tools/internal/packagesinternal golang.org/x/tools/internal/pkgbits golang.org/x/tools/internal/tokeninternal @@ -1610,6 +1665,44 @@ k8s.io/cloud-provider/volume/helpers # k8s.io/cloud-provider-aws v1.27.0 ## explicit; go 1.20 k8s.io/cloud-provider-aws/pkg/providers/v1 +# k8s.io/code-generator v0.28.0 => k8s.io/code-generator v0.28.0 +## explicit; go 1.20 +k8s.io/code-generator +k8s.io/code-generator/cmd/applyconfiguration-gen +k8s.io/code-generator/cmd/applyconfiguration-gen/args +k8s.io/code-generator/cmd/applyconfiguration-gen/generators +k8s.io/code-generator/cmd/client-gen +k8s.io/code-generator/cmd/client-gen/args +k8s.io/code-generator/cmd/client-gen/generators +k8s.io/code-generator/cmd/client-gen/generators/fake +k8s.io/code-generator/cmd/client-gen/generators/scheme +k8s.io/code-generator/cmd/client-gen/generators/util +k8s.io/code-generator/cmd/client-gen/path +k8s.io/code-generator/cmd/client-gen/types +k8s.io/code-generator/cmd/conversion-gen +k8s.io/code-generator/cmd/conversion-gen/args +k8s.io/code-generator/cmd/conversion-gen/generators +k8s.io/code-generator/cmd/deepcopy-gen +k8s.io/code-generator/cmd/deepcopy-gen/args +k8s.io/code-generator/cmd/defaulter-gen +k8s.io/code-generator/cmd/defaulter-gen/args +k8s.io/code-generator/cmd/go-to-protobuf +k8s.io/code-generator/cmd/go-to-protobuf/protobuf +k8s.io/code-generator/cmd/import-boss +k8s.io/code-generator/cmd/informer-gen +k8s.io/code-generator/cmd/informer-gen/args +k8s.io/code-generator/cmd/informer-gen/generators +k8s.io/code-generator/cmd/lister-gen +k8s.io/code-generator/cmd/lister-gen/args +k8s.io/code-generator/cmd/lister-gen/generators +k8s.io/code-generator/cmd/openapi-gen +k8s.io/code-generator/cmd/register-gen +k8s.io/code-generator/cmd/register-gen/args +k8s.io/code-generator/cmd/register-gen/generators +k8s.io/code-generator/cmd/set-gen +k8s.io/code-generator/pkg/namer +k8s.io/code-generator/pkg/util +k8s.io/code-generator/third_party/forked/golang/reflect # k8s.io/component-base v0.28.0 => k8s.io/component-base v0.28.0 ## explicit; go 1.20 k8s.io/component-base/cli/flag @@ -1674,6 +1767,18 @@ k8s.io/csi-translation-lib/plugins # k8s.io/dynamic-resource-allocation v0.0.0 => k8s.io/dynamic-resource-allocation v0.28.0 ## explicit; go 1.20 k8s.io/dynamic-resource-allocation/resourceclaim +# k8s.io/gengo v0.0.0-20220902162205-c0856e24416d +## explicit; go 1.13 +k8s.io/gengo/args +k8s.io/gengo/examples/deepcopy-gen/generators +k8s.io/gengo/examples/defaulter-gen/generators +k8s.io/gengo/examples/import-boss/generators +k8s.io/gengo/examples/set-gen/generators +k8s.io/gengo/examples/set-gen/sets +k8s.io/gengo/generator +k8s.io/gengo/namer +k8s.io/gengo/parser +k8s.io/gengo/types # k8s.io/klog/v2 v2.100.1 ## explicit; go 1.13 k8s.io/klog/v2 @@ -1690,12 +1795,15 @@ k8s.io/kms/pkg/service k8s.io/kms/pkg/util # k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 ## explicit; go 1.19 +k8s.io/kube-openapi/cmd/openapi-gen/args k8s.io/kube-openapi/pkg/builder k8s.io/kube-openapi/pkg/builder3 k8s.io/kube-openapi/pkg/builder3/util k8s.io/kube-openapi/pkg/cached k8s.io/kube-openapi/pkg/common k8s.io/kube-openapi/pkg/common/restfuladapter +k8s.io/kube-openapi/pkg/generators +k8s.io/kube-openapi/pkg/generators/rules k8s.io/kube-openapi/pkg/handler k8s.io/kube-openapi/pkg/handler3 k8s.io/kube-openapi/pkg/internal @@ -1706,6 +1814,7 @@ k8s.io/kube-openapi/pkg/schemamutation k8s.io/kube-openapi/pkg/spec3 k8s.io/kube-openapi/pkg/util k8s.io/kube-openapi/pkg/util/proto +k8s.io/kube-openapi/pkg/util/sets k8s.io/kube-openapi/pkg/validation/errors k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt From fd13a4c36db69a224ae951a1ee21bebdf4381bf6 Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Wed, 13 Sep 2023 00:54:03 -0700 Subject: [PATCH 044/125] Add auto-generated client and CRD manifest. Manifest generated via: $ make manifest Client generated via: $ ./hack/update-codegen.sh --- ...visioning.k8s.io_provisioningrequests.yaml | 203 ++++++++++++++ .../v1beta1/zz_generated.deepcopy.go | 179 ++++++++++++ .../applyconfiguration/internal/internal.go | 62 +++++ .../provisioning.k8s.io/v1beta1/podset.go | 48 ++++ .../v1beta1/provisioningrequest.go | 219 +++++++++++++++ .../v1beta1/provisioningrequestspec.go | 68 +++++ .../v1beta1/provisioningrequeststatus.go | 60 ++++ .../provisioning.k8s.io/v1beta1/reference.go | 39 +++ .../client/applyconfiguration/utils.go | 45 +++ .../client/clientset/versioned/clientset.go | 120 ++++++++ .../versioned/fake/clientset_generated.go | 85 ++++++ .../client/clientset/versioned/fake/doc.go | 20 ++ .../clientset/versioned/fake/register.go | 56 ++++ .../client/clientset/versioned/scheme/doc.go | 20 ++ .../clientset/versioned/scheme/register.go | 56 ++++ .../typed/provisioning.k8s.io/v1beta1/doc.go | 20 ++ .../provisioning.k8s.io/v1beta1/fake/doc.go | 20 ++ .../fake/fake_provisioning.k8s.io_client.go | 40 +++ .../v1beta1/fake/fake_provisioningrequest.go | 189 +++++++++++++ .../v1beta1/generated_expansion.go | 21 ++ .../v1beta1/provisioning.k8s.io_client.go | 107 ++++++++ .../v1beta1/provisioningrequest.go | 256 ++++++++++++++++++ .../informers/externalversions/factory.go | 251 +++++++++++++++++ .../informers/externalversions/generic.go | 62 +++++ .../internalinterfaces/factory_interfaces.go | 40 +++ .../provisioning.k8s.io/interface.go | 46 ++++ .../provisioning.k8s.io/v1beta1/interface.go | 45 +++ .../v1beta1/provisioningrequest.go | 90 ++++++ .../v1beta1/expansion_generated.go | 27 ++ .../v1beta1/provisioningrequest.go | 99 +++++++ 30 files changed, 2593 insertions(+) create mode 100644 cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml create mode 100644 cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go create mode 100644 cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go create mode 100644 cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go create mode 100644 cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go create mode 100644 cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go create mode 100644 cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go diff --git a/cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml b/cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml new file mode 100644 index 000000000000..30c1d699ad6e --- /dev/null +++ b/cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml @@ -0,0 +1,203 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: https://github.com/kubernetes/autoscaler/pull/5848 + controller-gen.kubebuilder.io/version: v0.13.0 + name: provisioningrequests.provisioning.k8s.io +spec: + group: provisioning.k8s.io + names: + kind: ProvisioningRequest + listKind: ProvisioningRequestList + plural: provisioningrequests + shortNames: + - provreq + - provreqs + singular: provisioningrequest + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: ProvisioningRequest is a way to express additional capacity that + we would like to provision in the cluster. Cluster Autoscaler can use this + information in its calculations and signal if the capacity is available + in the cluster or actively add capacity if needed. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec contains specification of the ProvisioningRequest object. + More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.' + properties: + additionalParameters: + additionalProperties: + type: string + description: AdditionalParameters contains all other parameters custom + classes may require. + type: object + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + podSets: + description: PodSets lists groups of pods for which we would like + to provision resources. + items: + description: PodSet represents one group of pods for Provisioning + Request to provision capacity. + properties: + count: + description: Count contains the number of pods that will be + created with a given template. + format: int32 + maximum: 16384 + minimum: 1 + type: integer + podTemplateRef: + description: PodTemplateRef is a reference to a PodTemplate + object that is representing pods that will consume this reservation + (must be within the same namespace). Users need to make sure + that the fields relevant to scheduler (e.g. node selector + tolerations) are consistent between this template and actual + pods consuming the Provisioning Request. + properties: + name: + description: 'Name of the referenced object. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names' + type: string + type: object + required: + - count + - podTemplateRef + type: object + maxItems: 32 + minItems: 1 + type: array + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + provisioningClass: + description: 'ProvisioningClass describes the different modes of provisioning + the resources. Supported values: * check-capacity.kubernetes.io + - check if current cluster state can fullfil this request, do not + reserve the capacity. * atomic-scale-up.kubernetes.io - provision + the resources in an atomic manner * ... - potential other classes + that are specific to the cloud providers' + type: string + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + required: + - podSets + - provisioningClass + type: object + status: + description: Status of the ProvisioningRequest. CA constantly reconciles + this field. + properties: + additionalStatus: + additionalProperties: + type: string + description: AdditionalStatus contains all other status values custom + provisioning classes may require. + minProperties: 64 + type: object + conditions: + description: Conditions represent the observations of a Provisioning + Request's current state. Those will contain information whether + the capacity was found/created or if there were any issues. The + condition types may differ between different provisioning classes. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + \n type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge + // +listType=map // +listMapKey=type Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 000000000000..1c68a8ce2171 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,179 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSet) DeepCopyInto(out *PodSet) { + *out = *in + out.PodTemplateRef = in.PodTemplateRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSet. +func (in *PodSet) DeepCopy() *PodSet { + if in == nil { + return nil + } + out := new(PodSet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProvisioningRequest) DeepCopyInto(out *ProvisioningRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProvisioningRequest. +func (in *ProvisioningRequest) DeepCopy() *ProvisioningRequest { + if in == nil { + return nil + } + out := new(ProvisioningRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProvisioningRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProvisioningRequestList) DeepCopyInto(out *ProvisioningRequestList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ProvisioningRequest, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProvisioningRequestList. +func (in *ProvisioningRequestList) DeepCopy() *ProvisioningRequestList { + if in == nil { + return nil + } + out := new(ProvisioningRequestList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProvisioningRequestList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProvisioningRequestSpec) DeepCopyInto(out *ProvisioningRequestSpec) { + *out = *in + if in.PodSets != nil { + in, out := &in.PodSets, &out.PodSets + *out = make([]PodSet, len(*in)) + copy(*out, *in) + } + if in.AdditionalParameters != nil { + in, out := &in.AdditionalParameters, &out.AdditionalParameters + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProvisioningRequestSpec. +func (in *ProvisioningRequestSpec) DeepCopy() *ProvisioningRequestSpec { + if in == nil { + return nil + } + out := new(ProvisioningRequestSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProvisioningRequestStatus) DeepCopyInto(out *ProvisioningRequestStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AdditionalStatus != nil { + in, out := &in.AdditionalStatus, &out.AdditionalStatus + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProvisioningRequestStatus. +func (in *ProvisioningRequestStatus) DeepCopy() *ProvisioningRequestStatus { + if in == nil { + return nil + } + out := new(ProvisioningRequestStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Reference) DeepCopyInto(out *Reference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Reference. +func (in *Reference) DeepCopy() *Reference { + if in == nil { + return nil + } + out := new(Reference) + in.DeepCopyInto(out) + return out +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go new file mode 100644 index 000000000000..4d7ef1313fbd --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go @@ -0,0 +1,62 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package internal + +import ( + "fmt" + "sync" + + typed "sigs.k8s.io/structured-merge-diff/v4/typed" +) + +func Parser() *typed.Parser { + parserOnce.Do(func() { + var err error + parser, err = typed.NewParser(schemaYAML) + if err != nil { + panic(fmt.Sprintf("Failed to parse schema: %v", err)) + } + }) + return parser +} + +var parserOnce sync.Once +var parser *typed.Parser +var schemaYAML = typed.YAMLObject(`types: +- name: __untyped_atomic_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic +- name: __untyped_deduced_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +`) diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go new file mode 100644 index 000000000000..b65221d8021b --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// PodSetApplyConfiguration represents an declarative configuration of the PodSet type for use +// with apply. +type PodSetApplyConfiguration struct { + PodTemplateRef *ReferenceApplyConfiguration `json:"podTemplateRef,omitempty"` + Count *int32 `json:"count,omitempty"` +} + +// PodSetApplyConfiguration constructs an declarative configuration of the PodSet type for use with +// apply. +func PodSet() *PodSetApplyConfiguration { + return &PodSetApplyConfiguration{} +} + +// WithPodTemplateRef sets the PodTemplateRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PodTemplateRef field is set to the value of the last call. +func (b *PodSetApplyConfiguration) WithPodTemplateRef(value *ReferenceApplyConfiguration) *PodSetApplyConfiguration { + b.PodTemplateRef = value + return b +} + +// WithCount sets the Count field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Count field is set to the value of the last call. +func (b *PodSetApplyConfiguration) WithCount(value int32) *PodSetApplyConfiguration { + b.Count = &value + return b +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go new file mode 100644 index 000000000000..a8697c499bce --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go @@ -0,0 +1,219 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ProvisioningRequestApplyConfiguration represents an declarative configuration of the ProvisioningRequest type for use +// with apply. +type ProvisioningRequestApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ProvisioningRequestSpecApplyConfiguration `json:"spec,omitempty"` + Status *ProvisioningRequestStatusApplyConfiguration `json:"status,omitempty"` +} + +// ProvisioningRequest constructs an declarative configuration of the ProvisioningRequest type for use with +// apply. +func ProvisioningRequest(name, namespace string) *ProvisioningRequestApplyConfiguration { + b := &ProvisioningRequestApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("ProvisioningRequest") + b.WithAPIVersion("provisioning.k8s.io/v1beta1") + return b +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithKind(value string) *ProvisioningRequestApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithAPIVersion(value string) *ProvisioningRequestApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithName(value string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithGenerateName(value string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithNamespace(value string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithUID(value types.UID) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithResourceVersion(value string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithGeneration(value int64) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ProvisioningRequestApplyConfiguration) WithLabels(entries map[string]string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ProvisioningRequestApplyConfiguration) WithAnnotations(entries map[string]string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ProvisioningRequestApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ProvisioningRequestApplyConfiguration) WithFinalizers(values ...string) *ProvisioningRequestApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *ProvisioningRequestApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithSpec(value *ProvisioningRequestSpecApplyConfiguration) *ProvisioningRequestApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ProvisioningRequestApplyConfiguration) WithStatus(value *ProvisioningRequestStatusApplyConfiguration) *ProvisioningRequestApplyConfiguration { + b.Status = value + return b +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go new file mode 100644 index 000000000000..7a2ae7bc9521 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go @@ -0,0 +1,68 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// ProvisioningRequestSpecApplyConfiguration represents an declarative configuration of the ProvisioningRequestSpec type for use +// with apply. +type ProvisioningRequestSpecApplyConfiguration struct { + PodSets []PodSetApplyConfiguration `json:"podSets,omitempty"` + ProvisioningClass *string `json:"provisioningClass,omitempty"` + AdditionalParameters map[string]string `json:"additionalParameters,omitempty"` +} + +// ProvisioningRequestSpecApplyConfiguration constructs an declarative configuration of the ProvisioningRequestSpec type for use with +// apply. +func ProvisioningRequestSpec() *ProvisioningRequestSpecApplyConfiguration { + return &ProvisioningRequestSpecApplyConfiguration{} +} + +// WithPodSets adds the given value to the PodSets field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the PodSets field. +func (b *ProvisioningRequestSpecApplyConfiguration) WithPodSets(values ...*PodSetApplyConfiguration) *ProvisioningRequestSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithPodSets") + } + b.PodSets = append(b.PodSets, *values[i]) + } + return b +} + +// WithProvisioningClass sets the ProvisioningClass field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ProvisioningClass field is set to the value of the last call. +func (b *ProvisioningRequestSpecApplyConfiguration) WithProvisioningClass(value string) *ProvisioningRequestSpecApplyConfiguration { + b.ProvisioningClass = &value + return b +} + +// WithAdditionalParameters puts the entries into the AdditionalParameters field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the AdditionalParameters field, +// overwriting an existing map entries in AdditionalParameters field with the same key. +func (b *ProvisioningRequestSpecApplyConfiguration) WithAdditionalParameters(entries map[string]string) *ProvisioningRequestSpecApplyConfiguration { + if b.AdditionalParameters == nil && len(entries) > 0 { + b.AdditionalParameters = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.AdditionalParameters[k] = v + } + return b +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go new file mode 100644 index 000000000000..e9c4d79bb1d1 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go @@ -0,0 +1,60 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ProvisioningRequestStatusApplyConfiguration represents an declarative configuration of the ProvisioningRequestStatus type for use +// with apply. +type ProvisioningRequestStatusApplyConfiguration struct { + Conditions []v1.Condition `json:"conditions,omitempty"` + AdditionalStatus map[string]string `json:"additionalStatus,omitempty"` +} + +// ProvisioningRequestStatusApplyConfiguration constructs an declarative configuration of the ProvisioningRequestStatus type for use with +// apply. +func ProvisioningRequestStatus() *ProvisioningRequestStatusApplyConfiguration { + return &ProvisioningRequestStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *ProvisioningRequestStatusApplyConfiguration) WithConditions(values ...v1.Condition) *ProvisioningRequestStatusApplyConfiguration { + for i := range values { + b.Conditions = append(b.Conditions, values[i]) + } + return b +} + +// WithAdditionalStatus puts the entries into the AdditionalStatus field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the AdditionalStatus field, +// overwriting an existing map entries in AdditionalStatus field with the same key. +func (b *ProvisioningRequestStatusApplyConfiguration) WithAdditionalStatus(entries map[string]string) *ProvisioningRequestStatusApplyConfiguration { + if b.AdditionalStatus == nil && len(entries) > 0 { + b.AdditionalStatus = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.AdditionalStatus[k] = v + } + return b +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go new file mode 100644 index 000000000000..e395468feef4 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go @@ -0,0 +1,39 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +// ReferenceApplyConfiguration represents an declarative configuration of the Reference type for use +// with apply. +type ReferenceApplyConfiguration struct { + Name *string `json:"name,omitempty"` +} + +// ReferenceApplyConfiguration constructs an declarative configuration of the Reference type for use with +// apply. +func Reference() *ReferenceApplyConfiguration { + return &ReferenceApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ReferenceApplyConfiguration) WithName(value string) *ReferenceApplyConfiguration { + b.Name = &value + return b +} diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go new file mode 100644 index 000000000000..06538b9c896a --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package applyconfiguration + +import ( + schema "k8s.io/apimachinery/pkg/runtime/schema" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" +) + +// ForKind returns an apply configuration type for the given GroupVersionKind, or nil if no +// apply configuration type exists for the given GroupVersionKind. +func ForKind(kind schema.GroupVersionKind) interface{} { + switch kind { + // Group=provisioning.k8s.io, Version=v1beta1 + case v1beta1.SchemeGroupVersion.WithKind("PodSet"): + return &provisioningk8siov1beta1.PodSetApplyConfiguration{} + case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequest"): + return &provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration{} + case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequestSpec"): + return &provisioningk8siov1beta1.ProvisioningRequestSpecApplyConfiguration{} + case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequestStatus"): + return &provisioningk8siov1beta1.ProvisioningRequestStatusApplyConfiguration{} + case v1beta1.SchemeGroupVersion.WithKind("Reference"): + return &provisioningk8siov1beta1.ReferenceApplyConfiguration{} + + } + return nil +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go new file mode 100644 index 000000000000..e0a812e75e5d --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go @@ -0,0 +1,120 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + "net/http" + + provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface +} + +// Clientset contains the clients for groups. +type Clientset struct { + *discovery.DiscoveryClient + provisioningV1beta1 *provisioningv1beta1.ProvisioningV1beta1Client +} + +// ProvisioningV1beta1 retrieves the ProvisioningV1beta1Client +func (c *Clientset) ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface { + return c.provisioningV1beta1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + + // share the transport between all clients + httpClient, err := rest.HTTPClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + return NewForConfigAndClient(&configShallowCopy, httpClient) +} + +// NewForConfigAndClient creates a new Clientset for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfigAndClient will generate a rate-limiter in configShallowCopy. +func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + + var cs Clientset + var err error + cs.provisioningV1beta1, err = provisioningv1beta1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + cs, err := NewForConfig(c) + if err != nil { + panic(err) + } + return cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.provisioningV1beta1 = provisioningv1beta1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go new file mode 100644 index 000000000000..074edbbe223c --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go @@ -0,0 +1,85 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + clientset "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" + fakeprovisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake" + "k8s.io/client-go/discovery" + fakediscovery "k8s.io/client-go/discovery/fake" + "k8s.io/client-go/testing" +) + +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + +var ( + _ clientset.Interface = &Clientset{} + _ testing.FakeClient = &Clientset{} +) + +// ProvisioningV1beta1 retrieves the ProvisioningV1beta1Client +func (c *Clientset) ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface { + return &fakeprovisioningv1beta1.FakeProvisioningV1beta1{Fake: &c.Fake} +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go new file mode 100644 index 000000000000..9b99e7167091 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated fake clientset. +package fake diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go new file mode 100644 index 000000000000..08d60ff803d3 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go @@ -0,0 +1,56 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +var localSchemeBuilder = runtime.SchemeBuilder{ + provisioningv1beta1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(scheme)) +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go new file mode 100644 index 000000000000..7dc3756168fa --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go new file mode 100644 index 000000000000..6b67cea5ea62 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go @@ -0,0 +1,56 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + provisioningv1beta1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go new file mode 100644 index 000000000000..771101956f36 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go new file mode 100644 index 000000000000..16f44399065e --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go new file mode 100644 index 000000000000..70c512620738 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go @@ -0,0 +1,40 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeProvisioningV1beta1 struct { + *testing.Fake +} + +func (c *FakeProvisioningV1beta1) ProvisioningRequests(namespace string) v1beta1.ProvisioningRequestInterface { + return &FakeProvisioningRequests{c, namespace} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeProvisioningV1beta1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go new file mode 100644 index 000000000000..d04de1cd016d --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go @@ -0,0 +1,189 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + json "encoding/json" + "fmt" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" + testing "k8s.io/client-go/testing" +) + +// FakeProvisioningRequests implements ProvisioningRequestInterface +type FakeProvisioningRequests struct { + Fake *FakeProvisioningV1beta1 + ns string +} + +var provisioningrequestsResource = v1beta1.SchemeGroupVersion.WithResource("provisioningrequests") + +var provisioningrequestsKind = v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequest") + +// Get takes name of the provisioningRequest, and returns the corresponding provisioningRequest object, and an error if there is any. +func (c *FakeProvisioningRequests) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ProvisioningRequest, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(provisioningrequestsResource, c.ns, name), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// List takes label and field selectors, and returns the list of ProvisioningRequests that match those selectors. +func (c *FakeProvisioningRequests) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ProvisioningRequestList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(provisioningrequestsResource, provisioningrequestsKind, c.ns, opts), &v1beta1.ProvisioningRequestList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.ProvisioningRequestList{ListMeta: obj.(*v1beta1.ProvisioningRequestList).ListMeta} + for _, item := range obj.(*v1beta1.ProvisioningRequestList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested provisioningRequests. +func (c *FakeProvisioningRequests) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(provisioningrequestsResource, c.ns, opts)) + +} + +// Create takes the representation of a provisioningRequest and creates it. Returns the server's representation of the provisioningRequest, and an error, if there is any. +func (c *FakeProvisioningRequests) Create(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.CreateOptions) (result *v1beta1.ProvisioningRequest, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(provisioningrequestsResource, c.ns, provisioningRequest), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// Update takes the representation of a provisioningRequest and updates it. Returns the server's representation of the provisioningRequest, and an error, if there is any. +func (c *FakeProvisioningRequests) Update(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (result *v1beta1.ProvisioningRequest, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(provisioningrequestsResource, c.ns, provisioningRequest), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeProvisioningRequests) UpdateStatus(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (*v1beta1.ProvisioningRequest, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(provisioningrequestsResource, "status", c.ns, provisioningRequest), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// Delete takes name of the provisioningRequest and deletes it. Returns an error if one occurs. +func (c *FakeProvisioningRequests) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteActionWithOptions(provisioningrequestsResource, c.ns, name, opts), &v1beta1.ProvisioningRequest{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeProvisioningRequests) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(provisioningrequestsResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &v1beta1.ProvisioningRequestList{}) + return err +} + +// Patch applies the patch and returns the patched provisioningRequest. +func (c *FakeProvisioningRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ProvisioningRequest, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(provisioningrequestsResource, c.ns, name, pt, data, subresources...), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied provisioningRequest. +func (c *FakeProvisioningRequests) Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { + if provisioningRequest == nil { + return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") + } + data, err := json.Marshal(provisioningRequest) + if err != nil { + return nil, err + } + name := provisioningRequest.Name + if name == nil { + return nil, fmt.Errorf("provisioningRequest.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(provisioningrequestsResource, c.ns, *name, types.ApplyPatchType, data), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *FakeProvisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { + if provisioningRequest == nil { + return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") + } + data, err := json.Marshal(provisioningRequest) + if err != nil { + return nil, err + } + name := provisioningRequest.Name + if name == nil { + return nil, fmt.Errorf("provisioningRequest.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(provisioningrequestsResource, c.ns, *name, types.ApplyPatchType, data, "status"), &v1beta1.ProvisioningRequest{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.ProvisioningRequest), err +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go new file mode 100644 index 000000000000..66b471322a5d --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type ProvisioningRequestExpansion interface{} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go new file mode 100644 index 000000000000..34b53bc62256 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go @@ -0,0 +1,107 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "net/http" + + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type ProvisioningV1beta1Interface interface { + RESTClient() rest.Interface + ProvisioningRequestsGetter +} + +// ProvisioningV1beta1Client is used to interact with features provided by the provisioning.k8s.io group. +type ProvisioningV1beta1Client struct { + restClient rest.Interface +} + +func (c *ProvisioningV1beta1Client) ProvisioningRequests(namespace string) ProvisioningRequestInterface { + return newProvisioningRequests(c, namespace) +} + +// NewForConfig creates a new ProvisioningV1beta1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*ProvisioningV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new ProvisioningV1beta1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ProvisioningV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) + if err != nil { + return nil, err + } + return &ProvisioningV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new ProvisioningV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *ProvisioningV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new ProvisioningV1beta1Client for the given RESTClient. +func New(c rest.Interface) *ProvisioningV1beta1Client { + return &ProvisioningV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *ProvisioningV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go new file mode 100644 index 000000000000..1f76d6b4a7c9 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go @@ -0,0 +1,256 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" + scheme "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +// ProvisioningRequestsGetter has a method to return a ProvisioningRequestInterface. +// A group's client should implement this interface. +type ProvisioningRequestsGetter interface { + ProvisioningRequests(namespace string) ProvisioningRequestInterface +} + +// ProvisioningRequestInterface has methods to work with ProvisioningRequest resources. +type ProvisioningRequestInterface interface { + Create(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.CreateOptions) (*v1beta1.ProvisioningRequest, error) + Update(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (*v1beta1.ProvisioningRequest, error) + UpdateStatus(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (*v1beta1.ProvisioningRequest, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.ProvisioningRequest, error) + List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ProvisioningRequestList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ProvisioningRequest, err error) + Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) + ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) + ProvisioningRequestExpansion +} + +// provisioningRequests implements ProvisioningRequestInterface +type provisioningRequests struct { + client rest.Interface + ns string +} + +// newProvisioningRequests returns a ProvisioningRequests +func newProvisioningRequests(c *ProvisioningV1beta1Client, namespace string) *provisioningRequests { + return &provisioningRequests{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the provisioningRequest, and returns the corresponding provisioningRequest object, and an error if there is any. +func (c *provisioningRequests) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ProvisioningRequest, err error) { + result = &v1beta1.ProvisioningRequest{} + err = c.client.Get(). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ProvisioningRequests that match those selectors. +func (c *provisioningRequests) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ProvisioningRequestList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.ProvisioningRequestList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("provisioningrequests"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested provisioningRequests. +func (c *provisioningRequests) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("provisioningrequests"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a provisioningRequest and creates it. Returns the server's representation of the provisioningRequest, and an error, if there is any. +func (c *provisioningRequests) Create(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.CreateOptions) (result *v1beta1.ProvisioningRequest, err error) { + result = &v1beta1.ProvisioningRequest{} + err = c.client.Post(). + Namespace(c.ns). + Resource("provisioningrequests"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(provisioningRequest). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a provisioningRequest and updates it. Returns the server's representation of the provisioningRequest, and an error, if there is any. +func (c *provisioningRequests) Update(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (result *v1beta1.ProvisioningRequest, err error) { + result = &v1beta1.ProvisioningRequest{} + err = c.client.Put(). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(provisioningRequest.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(provisioningRequest). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *provisioningRequests) UpdateStatus(ctx context.Context, provisioningRequest *v1beta1.ProvisioningRequest, opts v1.UpdateOptions) (result *v1beta1.ProvisioningRequest, err error) { + result = &v1beta1.ProvisioningRequest{} + err = c.client.Put(). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(provisioningRequest.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(provisioningRequest). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the provisioningRequest and deletes it. Returns an error if one occurs. +func (c *provisioningRequests) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *provisioningRequests) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("provisioningrequests"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched provisioningRequest. +func (c *provisioningRequests) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ProvisioningRequest, err error) { + result = &v1beta1.ProvisioningRequest{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied provisioningRequest. +func (c *provisioningRequests) Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { + if provisioningRequest == nil { + return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(provisioningRequest) + if err != nil { + return nil, err + } + name := provisioningRequest.Name + if name == nil { + return nil, fmt.Errorf("provisioningRequest.Name must be provided to Apply") + } + result = &v1beta1.ProvisioningRequest{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *provisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { + if provisioningRequest == nil { + return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(provisioningRequest) + if err != nil { + return nil, err + } + + name := provisioningRequest.Name + if name == nil { + return nil, fmt.Errorf("provisioningRequest.Name must be provided to Apply") + } + + result = &v1beta1.ProvisioningRequest{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("provisioningrequests"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go new file mode 100644 index 000000000000..ba94a3127d1b --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go @@ -0,0 +1,251 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + provisioningk8sio "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool + // wg tracks how many goroutines were started. + wg sync.WaitGroup + // shuttingDown is true when Shutdown has been called. It may still be running + // because it needs to wait for goroutines. + shuttingDown bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.shuttingDown { + return + } + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + f.wg.Add(1) + // We need a new variable in each loop iteration, + // otherwise the goroutine would use the loop variable + // and that keeps changing. + informer := informer + go func() { + defer f.wg.Done() + informer.Run(stopCh) + }() + f.startedInformers[informerType] = true + } + } +} + +func (f *sharedInformerFactory) Shutdown() { + f.lock.Lock() + f.shuttingDown = true + f.lock.Unlock() + + // Will return immediately if there is nothing to wait for. + f.wg.Wait() +} + +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +// +// It is typically used like this: +// +// ctx, cancel := context.Background() +// defer cancel() +// factory := NewSharedInformerFactory(client, resyncPeriod) +// defer factory.WaitForStop() // Returns immediately if nothing was started. +// genericInformer := factory.ForResource(resource) +// typedInformer := factory.SomeAPIGroup().V1().SomeType() +// factory.Start(ctx.Done()) // Start processing these informers. +// synced := factory.WaitForCacheSync(ctx.Done()) +// for v, ok := range synced { +// if !ok { +// fmt.Fprintf(os.Stderr, "caches failed to sync: %v", v) +// return +// } +// } +// +// // Creating informers can also be created after Start, but then +// // Start must be called again: +// anotherGenericInformer := factory.ForResource(resource) +// factory.Start(ctx.Done()) +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + + // Start initializes all requested informers. They are handled in goroutines + // which run until the stop channel gets closed. + Start(stopCh <-chan struct{}) + + // Shutdown marks a factory as shutting down. At that point no new + // informers can be started anymore and Start will return without + // doing anything. + // + // In addition, Shutdown blocks until all goroutines have terminated. For that + // to happen, the close channel(s) that they were started with must be closed, + // either before Shutdown gets called or while it is waiting. + // + // Shutdown may be called multiple times, even concurrently. All such calls will + // block until all goroutines have terminated. + Shutdown() + + // WaitForCacheSync blocks until all started informers' caches were synced + // or the stop channel gets closed. + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + // ForResource gives generic access to a shared informer of the matching type. + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + + // InformerFor returns the SharedIndexInformer for obj using an internal + // client. + InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer + + Provisioning() provisioningk8sio.Interface +} + +func (f *sharedInformerFactory) Provisioning() provisioningk8sio.Interface { + return provisioningk8sio.New(f, f.namespace, f.tweakListOptions) +} diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go new file mode 100644 index 000000000000..829be90bff11 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go @@ -0,0 +1,62 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + schema "k8s.io/apimachinery/pkg/runtime/schema" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=provisioning.k8s.io, Version=v1beta1 + case v1beta1.SchemeGroupVersion.WithResource("provisioningrequests"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Provisioning().V1beta1().ProvisioningRequests().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 000000000000..df4d9f19e91f --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,40 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go new file mode 100644 index 000000000000..b74bdb489aad --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go @@ -0,0 +1,46 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package provisioning + +import ( + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1beta1 provides access to shared informers for resources in V1beta1. + V1beta1() v1beta1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1beta1 returns a new v1beta1.Interface. +func (g *group) V1beta1() v1beta1.Interface { + return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go new file mode 100644 index 000000000000..139a610cd738 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go @@ -0,0 +1,45 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // ProvisioningRequests returns a ProvisioningRequestInformer. + ProvisioningRequests() ProvisioningRequestInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// ProvisioningRequests returns a ProvisioningRequestInformer. +func (v *version) ProvisioningRequests() ProvisioningRequestInformer { + return &provisioningRequestInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go new file mode 100644 index 000000000000..c17251fdd3cc --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go @@ -0,0 +1,90 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + time "time" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1" + cache "k8s.io/client-go/tools/cache" +) + +// ProvisioningRequestInformer provides access to a shared informer and lister for +// ProvisioningRequests. +type ProvisioningRequestInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1beta1.ProvisioningRequestLister +} + +type provisioningRequestInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewProvisioningRequestInformer constructs a new informer for ProvisioningRequest type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewProvisioningRequestInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredProvisioningRequestInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredProvisioningRequestInformer constructs a new informer for ProvisioningRequest type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredProvisioningRequestInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ProvisioningV1beta1().ProvisioningRequests(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ProvisioningV1beta1().ProvisioningRequests(namespace).Watch(context.TODO(), options) + }, + }, + &provisioningk8siov1beta1.ProvisioningRequest{}, + resyncPeriod, + indexers, + ) +} + +func (f *provisioningRequestInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredProvisioningRequestInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *provisioningRequestInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&provisioningk8siov1beta1.ProvisioningRequest{}, f.defaultInformer) +} + +func (f *provisioningRequestInformer) Lister() v1beta1.ProvisioningRequestLister { + return v1beta1.NewProvisioningRequestLister(f.Informer().GetIndexer()) +} diff --git a/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go b/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go new file mode 100644 index 000000000000..4821165487a1 --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go @@ -0,0 +1,27 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +// ProvisioningRequestListerExpansion allows custom methods to be added to +// ProvisioningRequestLister. +type ProvisioningRequestListerExpansion interface{} + +// ProvisioningRequestNamespaceListerExpansion allows custom methods to be added to +// ProvisioningRequestNamespaceLister. +type ProvisioningRequestNamespaceListerExpansion interface{} diff --git a/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go new file mode 100644 index 000000000000..a1a067e0930c --- /dev/null +++ b/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go @@ -0,0 +1,99 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + "k8s.io/client-go/tools/cache" +) + +// ProvisioningRequestLister helps list ProvisioningRequests. +// All objects returned here must be treated as read-only. +type ProvisioningRequestLister interface { + // List lists all ProvisioningRequests in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ProvisioningRequest, err error) + // ProvisioningRequests returns an object that can list and get ProvisioningRequests. + ProvisioningRequests(namespace string) ProvisioningRequestNamespaceLister + ProvisioningRequestListerExpansion +} + +// provisioningRequestLister implements the ProvisioningRequestLister interface. +type provisioningRequestLister struct { + indexer cache.Indexer +} + +// NewProvisioningRequestLister returns a new ProvisioningRequestLister. +func NewProvisioningRequestLister(indexer cache.Indexer) ProvisioningRequestLister { + return &provisioningRequestLister{indexer: indexer} +} + +// List lists all ProvisioningRequests in the indexer. +func (s *provisioningRequestLister) List(selector labels.Selector) (ret []*v1beta1.ProvisioningRequest, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ProvisioningRequest)) + }) + return ret, err +} + +// ProvisioningRequests returns an object that can list and get ProvisioningRequests. +func (s *provisioningRequestLister) ProvisioningRequests(namespace string) ProvisioningRequestNamespaceLister { + return provisioningRequestNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// ProvisioningRequestNamespaceLister helps list and get ProvisioningRequests. +// All objects returned here must be treated as read-only. +type ProvisioningRequestNamespaceLister interface { + // List lists all ProvisioningRequests in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ProvisioningRequest, err error) + // Get retrieves the ProvisioningRequest from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.ProvisioningRequest, error) + ProvisioningRequestNamespaceListerExpansion +} + +// provisioningRequestNamespaceLister implements the ProvisioningRequestNamespaceLister +// interface. +type provisioningRequestNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all ProvisioningRequests in the indexer for a given namespace. +func (s provisioningRequestNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ProvisioningRequest, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ProvisioningRequest)) + }) + return ret, err +} + +// Get retrieves the ProvisioningRequest from the indexer for a given namespace and name. +func (s provisioningRequestNamespaceLister) Get(name string) (*v1beta1.ProvisioningRequest, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("provisioningrequest"), name) + } + return obj.(*v1beta1.ProvisioningRequest), nil +} From 11e03a814a2d672000988b1c28e05329814c64c3 Mon Sep 17 00:00:00 2001 From: Karol Wychowaniec Date: Wed, 13 Sep 2023 14:26:31 +0000 Subject: [PATCH 045/125] Fix processors order in tests and add a comment explaining this order --- cluster-autoscaler/core/test/common.go | 2 +- .../processors/nodes/scale_down_set_processor.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/core/test/common.go b/cluster-autoscaler/core/test/common.go index 004619249f99..78247b927927 100644 --- a/cluster-autoscaler/core/test/common.go +++ b/cluster-autoscaler/core/test/common.go @@ -179,8 +179,8 @@ func NewTestProcessors(context *context.AutoscalingContext) *processors.Autoscal BinpackingLimiter: binpacking.NewDefaultBinpackingLimiter(), NodeGroupSetProcessor: nodegroupset.NewDefaultNodeGroupSetProcessor([]string{}, config.NodeGroupDifferenceRatios{}), ScaleDownSetProcessor: nodes.NewCompositeScaleDownSetProcessor([]nodes.ScaleDownSetProcessor{ - nodes.NewAtomicResizeFilteringProcessor(), nodes.NewMaxNodesProcessor(), + nodes.NewAtomicResizeFilteringProcessor(), }), // TODO(bskiba): change scale up test so that this can be a NoOpProcessor ScaleUpStatusProcessor: &status.EventingScaleUpStatusProcessor{}, diff --git a/cluster-autoscaler/processors/nodes/scale_down_set_processor.go b/cluster-autoscaler/processors/nodes/scale_down_set_processor.go index 579837c48d5c..b503e42a8ae1 100644 --- a/cluster-autoscaler/processors/nodes/scale_down_set_processor.go +++ b/cluster-autoscaler/processors/nodes/scale_down_set_processor.go @@ -75,6 +75,9 @@ func NewMaxNodesProcessor() *MaxNodesProcessor { // AtomicResizeFilteringProcessor removes node groups which should be scaled down as one unit // if only part of these nodes were scheduled for scale down. +// NOTE! When chaining with other processors, AtomicResizeFilteringProcessors should be always used last. +// Otherwise, it's possible that another processor will break the property that this processor aims to restore: +// no partial scale-downs for node groups that should be resized atomically. type AtomicResizeFilteringProcessor struct { } From 42db99cdf0f241b245222d56f59328a5d213977b Mon Sep 17 00:00:00 2001 From: Chris Privitere <23177737+cprivitere@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:38:36 -0500 Subject: [PATCH 046/125] feat: use current plan types and api endpoints - use https://api.equinix.com/metal/v1/ instead of packet endpoint - remove old plans - add new plans - update plan pricing - update test to use current plan names, models, and results Signed-off-by: Chris Privitere <23177737+cprivitere@users.noreply.github.com> --- .../packet/packet_manager_rest.go | 121 ++++++------------ .../packet/packet_manager_rest_test.go | 10 +- .../packet/packet_price_model.go | 31 ++--- .../packet/packet_price_model_test.go | 12 +- 4 files changed, 64 insertions(+), 110 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index f7b0f7e7f2fa..e77f54880dc9 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -48,8 +48,7 @@ import ( const ( userAgent = "kubernetes/cluster-autoscaler/" + version.ClusterAutoscalerVersion expectedAPIContentTypePrefix = "application/json" - packetPrefix = "packet://" - equinixMetalPrefix = "equinixmetal://" + prefix = "equinixmetal://" ) type instanceType struct { @@ -61,28 +60,10 @@ type instanceType struct { // InstanceTypes is a map of packet resources var InstanceTypes = map[string]*instanceType{ - "c1.large.arm": { - InstanceName: "c1.large.arm", - CPU: 96, - MemoryMb: 131072, - GPU: 0, - }, - "c1.small.x86": { - InstanceName: "c1.small.x86", - CPU: 4, - MemoryMb: 32768, - GPU: 0, - }, - "c1.xlarge.x86": { - InstanceName: "c1.xlarge.x86", - CPU: 16, - MemoryMb: 131072, - GPU: 0, - }, - "c2.large.arm": { - InstanceName: "c2.large.arm", - CPU: 32, - MemoryMb: 131072, + "a3.large.x86": { + InstanceName: "a3.large.x86", + CPU: 64, + MemoryMb: 1048576, GPU: 0, }, "c2.medium.x86": { @@ -91,6 +72,12 @@ var InstanceTypes = map[string]*instanceType{ MemoryMb: 65536, GPU: 0, }, + "c3.large.arm64": { + InstanceName: "c3.large.arm64", + CPU: 80, + MemoryMb: 262144, + GPU: 0, + }, "c3.medium.x86": { InstanceName: "c3.medium.x86", CPU: 24, @@ -101,19 +88,13 @@ var InstanceTypes = map[string]*instanceType{ InstanceName: "c3.small.x86", CPU: 8, MemoryMb: 32768, - GPU: 1, + GPU: 0, }, "g2.large.x86": { InstanceName: "g2.large.x86", CPU: 24, MemoryMb: 196608, - GPU: 0, - }, - "m1.xlarge.x86": { - InstanceName: "m1.xlarge.x86", - CPU: 24, - MemoryMb: 262144, - GPU: 0, + GPU: 1, }, "m2.xlarge.x86": { InstanceName: "m2.xlarge.x86", @@ -121,16 +102,28 @@ var InstanceTypes = map[string]*instanceType{ MemoryMb: 393216, GPU: 0, }, + "m3.large.x86": { + InstanceName: "m3.large.x86", + CPU: 32, + MemoryMb: 262144, + GPU: 0, + }, + "m3.small.x86": { + InstanceName: "m3.small.x86", + CPU: 8, + MemoryMb: 65536, + GPU: 0, + }, "n2.xlarge.x86": { InstanceName: "n2.xlarge.x86", CPU: 28, MemoryMb: 393216, GPU: 0, }, - "s1.large.x86": { - InstanceName: "s1.large.x86", - CPU: 8, - MemoryMb: 65536, + "n3.xlarge.x86": { + InstanceName: "n3.xlarge.x86", + CPU: 32, + MemoryMb: 524288, GPU: 0, }, "s3.xlarge.x86": { @@ -139,24 +132,12 @@ var InstanceTypes = map[string]*instanceType{ MemoryMb: 196608, GPU: 0, }, - "t1.small.x86": { - InstanceName: "t1.small.x86", - CPU: 4, - MemoryMb: 8192, - GPU: 0, - }, "t3.small.x86": { InstanceName: "t3.small.x86", CPU: 4, MemoryMb: 16384, GPU: 0, }, - "x1.small.x86": { - InstanceName: "x1.small.x86", - CPU: 4, - MemoryMb: 32768, - GPU: 0, - }, "x2.xlarge.x86": { InstanceName: "x2.xlarge.x86", CPU: 28, @@ -170,14 +151,13 @@ type packetManagerNodePool struct { clusterName string projectID string apiServerEndpoint string - facility string + metro string plan string os string billing string cloudinit string reservation string hostnamePattern string - waitTimeStep time.Duration } type packetManagerRest struct { @@ -190,7 +170,7 @@ type ConfigNodepool struct { ClusterName string `gcfg:"cluster-name"` ProjectID string `gcfg:"project-id"` APIServerEndpoint string `gcfg:"api-server-endpoint"` - Facility string `gcfg:"facility"` + Metro string `gcfg:"metro"` Plan string `gcfg:"plan"` OS string `gcfg:"os"` Billing string `gcfg:"billing"` @@ -230,7 +210,7 @@ type IPAddressCreateRequest struct { type DeviceCreateRequest struct { Hostname string `json:"hostname"` Plan string `json:"plan"` - Facility []string `json:"facility"` + Metro []string `json:"metro"` OS string `json:"operating_system"` BillingCycle string `json:"billing_cycle"` ProjectID string `json:"project_id"` @@ -333,11 +313,11 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. } manager.packetManagerNodePools[nodepool] = &packetManagerNodePool{ - baseURL: "https://api.packet.net", + baseURL: "https://api.equinix.com/metal/v1/", clusterName: cfg.Nodegroupdef[nodepool].ClusterName, projectID: cfg.Nodegroupdef["default"].ProjectID, apiServerEndpoint: cfg.Nodegroupdef["default"].APIServerEndpoint, - facility: cfg.Nodegroupdef[nodepool].Facility, + metro: cfg.Nodegroupdef[nodepool].Metro, plan: cfg.Nodegroupdef[nodepool].Plan, os: cfg.Nodegroupdef[nodepool].OS, billing: cfg.Nodegroupdef[nodepool].Billing, @@ -439,19 +419,18 @@ func (mgr *packetManagerRest) NodeGroupForNode(labels map[string]string, nodeId return nodegroup, nil } - trimmedNodeId := strings.TrimPrefix(nodeId, packetPrefix) - trimmedNodeId = strings.TrimPrefix(trimmedNodeId, equinixMetalPrefix) + trimmedNodeId := strings.TrimPrefix(nodeId, prefix) device, err := mgr.getPacketDevice(context.TODO(), trimmedNodeId) if err != nil { - return "", fmt.Errorf("Could not find group for node: %s %s", nodeId, err) + return "", fmt.Errorf("could not find group for node: %s %s", nodeId, err) } for _, t := range device.Tags { if strings.HasPrefix(t, "k8s-nodepool-") { return strings.TrimPrefix(t, "k8s-nodepool-"), nil } } - return "", fmt.Errorf("Could not find group for node: %s", nodeId) + return "", fmt.Errorf("could not find group for node: %s", nodeId) } // nodeGroupSize gets the current size of the nodegroup as reported by packet tags. @@ -542,7 +521,7 @@ func (mgr *packetManagerRest) createDevice(ctx context.Context, hostname, userDa cr := &DeviceCreateRequest{ Hostname: hostname, - Facility: []string{mgr.getNodePoolDefinition(nodegroup).facility}, + Metro: []string{mgr.getNodePoolDefinition(nodegroup).metro}, Plan: mgr.getNodePoolDefinition(nodegroup).plan, OS: mgr.getNodePoolDefinition(nodegroup).os, ProjectID: mgr.getNodePoolDefinition(nodegroup).projectID, @@ -601,27 +580,6 @@ func (mgr *packetManagerRest) getNodes(nodegroup string) ([]string, error) { nodes := []string{} - // This bit of code along with the switch statement, checks if the CCM installed on the cluster is - // `packet-ccm` or `cloud-provider-equinix-metal`. The reason its important to check because depending - // on the CCM installed, the prefix in providerID of K8s Node spec differs from either `packet://` or - // `equinixmetal://`. This is now needed as `packet-ccm` is now deprecated and renamed in favor of - // `cloud-provider-equinix-metal`. - // This code checks if the INSTALLED_CCM env var is set or not. If set to `cloud-provider-equinix-metal`, - // the prefix is set to `equinixmetal://` and any other case the prefix is `packet://`. - // At a later point in time, there would be a need to make `equinixmetal://` prefix as the default or do away - // with `packet://` prefix entirely. This should happen presumably when the packet code in autoscaler is - // renamed from packet to equinixmetal. - prefix := packetPrefix - - switch installedCCM := os.Getenv("INSTALLED_CCM"); installedCCM { - case "packet-ccm": - prefix = packetPrefix - case "cloud-provider-equinix-metal": - prefix = equinixMetalPrefix - default: - klog.V(3).Info("Unrecognized value: expected INSTALLED_CCM to be either `packet-ccm` or `cloud-provider-equinix-metal`, using default: `packet-ccm`") - } - for _, d := range devices.Devices { if Contains(d.Tags, "k8s-cluster-"+mgr.getNodePoolDefinition(nodegroup).clusterName) && Contains(d.Tags, "k8s-nodepool-"+nodegroup) { nodes = append(nodes, fmt.Sprintf("%s%s", prefix, d.ID)) @@ -693,8 +651,7 @@ func (mgr *packetManagerRest) deleteNodes(nodegroup string, nodes []NodeRef, upd if Contains(d.Tags, "k8s-cluster-"+mgr.getNodePoolDefinition(nodegroup).clusterName) && Contains(d.Tags, "k8s-nodepool-"+nodegroup) { klog.Infof("nodegroup match %s %s", d.Hostname, n.Name) - trimmedName := strings.TrimPrefix(n.Name, packetPrefix) - trimmedName = strings.TrimPrefix(trimmedName, equinixMetalPrefix) + trimmedName := strings.TrimPrefix(n.Name, prefix) switch { case d.Hostname == n.Name: diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go index 6f06ac1f9275..4ca55eeb4367 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go @@ -50,8 +50,8 @@ func newTestPacketManagerRest(t *testing.T, url string) *packetManagerRest { clusterName: "cluster2", projectID: "3d27fd13-0466-4878-be22-9a4b5595a3df", apiServerEndpoint: "147.75.102.15:6443", - facility: "ams1", - plan: "t1.small.x86", + metro: "ams", + plan: "c3.small.x86", os: "ubuntu_18_04", billing: "hourly", cloudinit: cloudinitDefault, @@ -63,8 +63,8 @@ func newTestPacketManagerRest(t *testing.T, url string) *packetManagerRest { clusterName: "cluster2", projectID: "3d27fd13-0466-4878-be22-9a4b5595a3df", apiServerEndpoint: "147.75.102.15:6443", - facility: "ams1", - plan: "c1.small.x86", + metro: "ams", + plan: "c3.small.x86", os: "ubuntu_18_04", billing: "hourly", cloudinit: cloudinitDefault, @@ -81,7 +81,7 @@ func TestListPacketDevices(t *testing.T) { defer server.Close() if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestPacketManagerRest(t, "https://api.packet.net") + m = newTestPacketManagerRest(t, "https://api.equinix.com/metal/v1/") } else { // Set up a mock Packet API m = newTestPacketManagerRest(t, server.URL) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go index 753b0b26f26c..a1617eff768d 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go @@ -34,23 +34,20 @@ const ( ) var instancePrices = map[string]float64{ - "c1.large.arm": 0.5000, - "c1.small.x86": 0.4000, - "c1.xlarge.x86": 1.7500, - "c2.large.arm": 1.0000, - "c2.medium.x86": 1.0000, - "c3.medium.x86": 1.1000, - "c3.small.x86": 0.5000, - "g2.large.x86": 5.0000, - "m1.xlarge.x86": 1.7000, - "m2.xlarge.x86": 2.0000, - "n2.xlarge.x86": 2.2500, - "s1.large.x86": 1.5000, - "s3.xlarge.x86": 1.8500, - "t1.small.x86": 0.0700, - "t3.small.x86": 0.3500, - "x1.small.x86": 0.4000, - "x2.xlarge.x86": 2.5000, + "a3.large.x86": 7.5000, + "c2.medium.x86": 1.0000, + "c3.large.arm64": 2.5000, + "c3.medium.x86": 1.3500, + "c3.small.x86": 0.7500, + "g2.large.x86": 5.0000, + "m2.xlarge.x86": 2.9000, + "m3.large.x86": 3.1000, + "m3.small.x86": 1.0500, + "n2.xlarge.x86": 3.2500, + "n3.xlarge.x86": 4.5000, + "s3.xlarge.x86": 2.9500, + "t3.small.x86": 0.3500, + "x2.xlarge.x86": 2.5000, } // NodePrice returns a price of running the given node for a given period of time. diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go index 50dd8fa80cb0..f35c1a7e1568 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go @@ -28,11 +28,11 @@ import ( ) func TestGetNodePrice(t *testing.T) { - labelsPool1 := BuildGenericLabels("pool1", "t1.small.x86") - plan1 := InstanceTypes["t1.small.x86"] + labelsPool1 := BuildGenericLabels("pool1", "m3.small.x86") + plan1 := InstanceTypes["m3.small.x86"] - labelsPool2 := BuildGenericLabels("pool2", "c1.xlarge.x86") - plan2 := InstanceTypes["c1.xlarge.x86"] + labelsPool2 := BuildGenericLabels("pool2", "c3.medium.x86") + plan2 := InstanceTypes["c3.medium.x86"] model := &PacketPriceModel{} now := time.Now() @@ -47,8 +47,8 @@ func TestGetNodePrice(t *testing.T) { price2, err := model.NodePrice(node2, now, now.Add(time.Hour)) assert.NoError(t, err) - assert.True(t, price1 == 0.07) - assert.True(t, price2 == 1.75) + assert.True(t, price1 == 1.05) + assert.True(t, price2 == 1.35) } func TestGetPodPrice(t *testing.T) { From cb537617ebd847d4105f37c35dba98ebf762cb0e Mon Sep 17 00:00:00 2001 From: Chris Privitere <23177737+cprivitere@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:39:16 -0500 Subject: [PATCH 047/125] feat: template for cloud-init used in example Signed-off-by: Chris Privitere <23177737+cprivitere@users.noreply.github.com> --- .../packet/examples/cloud-init-template.sh | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 cluster-autoscaler/cloudprovider/packet/examples/cloud-init-template.sh diff --git a/cluster-autoscaler/cloudprovider/packet/examples/cloud-init-template.sh b/cluster-autoscaler/cloudprovider/packet/examples/cloud-init-template.sh new file mode 100644 index 000000000000..1f50c988ddf7 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/packet/examples/cloud-init-template.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#This is a template of cloud-init script for cluster-autoscaler/cloudprovider/packet +#This gets base64'd and put into the example cluster-autoscaler-secret.yaml file +sleep 10 +sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab +swapoff -a +mount -a +cat < /dev/null +apt-get update +apt-get install -y containerd.io kubelet=1.28.1-00 kubeadm=1.28.1-00 kubectl=1.28.1-00 +apt-mark hold kubelet kubeadm kubectl +containerd config default > /etc/containerd/config.toml +sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml +sed -i "s,sandbox_image.*$,sandbox_image = \"$(kubeadm config images list | grep pause | sort -r | head -n1)\"," /etc/containerd/config.toml +systemctl restart containerd +systemctl enable kubelet.service +echo "source <(kubectl completion bash)" >> /root/.bashrc +echo "alias k=kubectl" >> /root/.bashrc +echo "complete -o default -F __start_kubectl k" >> /root/.bashrc +cat < Date: Wed, 30 Aug 2023 15:41:39 -0500 Subject: [PATCH 048/125] feat: update deployment example - update rbac to current requirements - add resource request for container - use a tagged version instead of latest - use control-plane instead of master for taint toleration Signed-off-by: Chris Privitere <23177737+cprivitere@users.noreply.github.com> --- .../cluster-autoscaler-deployment.yaml | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml index a2ca17731a98..94d066690fc3 100644 --- a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml +++ b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml @@ -34,6 +34,7 @@ rules: verbs: ["watch", "list", "get", "update"] - apiGroups: [""] resources: + - "namespaces" - "pods" - "services" - "replicationcontrollers" @@ -50,15 +51,19 @@ rules: resources: ["statefulsets", "replicasets", "daemonsets"] verbs: ["watch", "list", "get"] - apiGroups: ["storage.k8s.io"] - resources: ["storageclasses", "csinodes"] + resources: + ["storageclasses", "csinodes", "csidrivers", "csistoragecapacities"] verbs: ["watch", "list", "get"] - apiGroups: ["batch", "extensions"] resources: ["jobs"] verbs: ["get", "list", "watch", "patch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] - verbs: ["*"] - + verbs: ["create"] + - apiGroups: ["coordination.k8s.io"] + resourceNames: ["cluster-autoscaler"] + resources: ["leases"] + verbs: ["get", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role @@ -71,10 +76,11 @@ metadata: rules: - apiGroups: [""] resources: ["configmaps"] - verbs: ["create","list","watch"] + verbs: ["create", "list", "watch"] - apiGroups: [""] resources: ["configmaps"] - resourceNames: ["cluster-autoscaler-status", "cluster-autoscaler-priority-expander"] + resourceNames: + ["cluster-autoscaler-status", "cluster-autoscaler-priority-expander"] verbs: ["delete", "get", "update", "watch"] --- @@ -113,8 +119,8 @@ subjects: namespace: kube-system --- -kind: Deployment apiVersion: apps/v1 +kind: Deployment metadata: name: cluster-autoscaler namespace: kube-system @@ -127,13 +133,15 @@ spec: app: cluster-autoscaler template: metadata: - namespace: kube-system labels: app: cluster-autoscaler + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "8085" spec: tolerations: - effect: NoSchedule - key: node-role.kubernetes.io/master + key: node-role.kubernetes.io/control-plane # Node affinity is used to force cluster-autoscaler to stick # to the master node. This allows the cluster to reliably downscale # to zero worker nodes when needed. @@ -141,13 +149,20 @@ spec: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - - matchExpressions: - - key: node-role.kubernetes.io/master - operator: Exists + - matchExpressions: + - key: node-role.kubernetes.io/control-plane + operator: Exists serviceAccountName: cluster-autoscaler containers: - - name: cluster-autoscaler - image: registry.k8s.io/autoscaling/cluster-autoscaler:latest + - image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.27.3 + name: cluster-autoscaler + resources: + limits: + cpu: 100m + memory: 300Mi + requests: + cpu: 100m + memory: 300Mi imagePullPolicy: Always env: - name: BOOTSTRAP_TOKEN_ID From b4e416f476b213d1f577349f80691be9294472b5 Mon Sep 17 00:00:00 2001 From: Chris Privitere <23177737+cprivitere@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:43:20 -0500 Subject: [PATCH 049/125] feat: update secret example - Update embedded cloud init so it works - Bump installed k8s to 1.28.1 Signed-off-by: Chris Privitere <23177737+cprivitere@users.noreply.github.com> --- .../examples/cluster-autoscaler-secret.yaml | 16 +++++++++------- .../cloudprovider/packet/packet_manager_rest.go | 6 +++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-secret.yaml b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-secret.yaml index cbf01305bbbb..5943edf7a316 100644 --- a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-secret.yaml +++ b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-secret.yaml @@ -1,6 +1,7 @@ --- apiVersion: v1 data: + #base64 encode the API key and use it for the value of authtoken authtoken: YOUR_EQUINIX_METAL_API_TOKEN kind: Secret metadata: @@ -15,7 +16,7 @@ metadata: namespace: kube-system type: Opaque stringData: - # kubeadm, kubelet, kubectl are pinned to version 1.17.4 + # kubeadm, kubelet, kubectl are pinned to version 1.28.1 # The version can be altered by decoding the cloudinit and updating it to # the desired version # In the cloud-config you must always have a valid default nodegroup @@ -23,22 +24,22 @@ stringData: [nodegroupdef "default"] project-id=YOUR_EQUINIX_METAL_PROJECT_ID api-server-endpoint=YOUR_KUBERNETES_API_IP_ADDRESS:YOUR_KUBERNETES_API_PORT - facility=sv15 - os=ubuntu_18_04 + metro=sv + os=ubuntu_22_04 plan=c3.small.x86 billing=hourly - cloudinit=IyEvYmluL2Jhc2gKZXhwb3J0IERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZQphcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbgpjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgYXB0LWtleSBhZGQgLQpjdXJsIC1zIGh0dHBzOi8vcGFja2FnZXMuY2xvdWQuZ29vZ2xlLmNvbS9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgYXB0LWtleSBhZGQgLQpjYXQgPDxFT0YgPi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2t1YmVybmV0ZXMubGlzdApkZWIgaHR0cHM6Ly9hcHQua3ViZXJuZXRlcy5pby8ga3ViZXJuZXRlcy14ZW5pYWwgbWFpbgpFT0YKYWRkLWFwdC1yZXBvc2l0b3J5ICAgImRlYiBbYXJjaD1hbWQ2NF0gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAgICQobHNiX3JlbGVhc2UgLWNzKSAgIHN0YWJsZSIKYXB0LWdldCB1cGRhdGUKYXB0LWdldCB1cGdyYWRlIC15CmFwdC1nZXQgaW5zdGFsbCAteSBrdWJlbGV0PTEuMTcuNC0wMCBrdWJlYWRtPTEuMTcuNC0wMCBrdWJlY3RsPTEuMTcuNC0wMAphcHQtbWFyayBob2xkIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsCmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBhcHQta2V5IGFkZCAtCmFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIFthcmNoPWFtZDY0XSBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1IGJpb25pYyBzdGFibGUiCmFwdCB1cGRhdGUKYXB0IGluc3RhbGwgLXkgZG9ja2VyLWNlPTE4LjA2LjJ+Y2V+My0wfnVidW50dQpjYXQgPiAvZXRjL2RvY2tlci9kYWVtb24uanNvbiA8PEVPRgp7CiAgImV4ZWMtb3B0cyI6IFsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sCiAgImxvZy1kcml2ZXIiOiAianNvbi1maWxlIiwKICAibG9nLW9wdHMiOiB7CiAgICAibWF4LXNpemUiOiAiMTAwbSIKICB9LAogICJzdG9yYWdlLWRyaXZlciI6ICJvdmVybGF5MiIKfQpFT0YKbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb2NrZXIuc2VydmljZS5kCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCnN5c3RlbWN0bCByZXN0YXJ0IGRvY2tlcgpzd2Fwb2ZmIC1hCm12IC9ldGMvZnN0YWIgL2V0Yy9mc3RhYi5vbGQgJiYgZ3JlcCAtdiBzd2FwIC9ldGMvZnN0YWIub2xkID4gL2V0Yy9mc3RhYgpjYXQgPDxFT0YgfCB0ZWUgL2V0Yy9kZWZhdWx0L2t1YmVsZXQKS1VCRUxFVF9FWFRSQV9BUkdTPS0tY2xvdWQtcHJvdmlkZXI9ZXh0ZXJuYWwKRU9GCmt1YmVhZG0gam9pbiAtLWRpc2NvdmVyeS10b2tlbi11bnNhZmUtc2tpcC1jYS12ZXJpZmljYXRpb24gLS10b2tlbiB7ey5Cb290c3RyYXBUb2tlbklEfX0ue3suQm9vdHN0cmFwVG9rZW5TZWNyZXR9fSB7ey5BUElTZXJ2ZXJFbmRwb2ludH19Cg== + cloudinit=IyEvYmluL2Jhc2gKc2xlZXAgMTAKc2VkIC1yaSAnL1xzc3dhcFxzL3MvXiM/LyMvJyAvZXRjL2ZzdGFiCnN3YXBvZmYgLWEKbW91bnQgLWEKbW9kcHJvYmUgb3ZlcmxheQptb2Rwcm9iZSBicl9uZXRmaWx0ZXIKc3lzY3RsIC0tc3lzdGVtCmV4cG9ydCBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUKYXB0LWdldCB1cGRhdGUKYXB0LWdldCByZW1vdmUgZG9ja2VyIGRvY2tlci1lbmdpbmUgY29udGFpbmVyZCBydW5jIC15CmFwdC1nZXQgaW5zdGFsbCBhcHQtdHJhbnNwb3J0LWh0dHBzIGNhLWNlcnRpZmljYXRlcyBjdXJsIGdudXBnIGxzYi1yZWxlYXNlIGpxIGt1YmV0YWlsIC15Cm1rZGlyIC1tIDA3NTUgLXAgL2V0Yy9hcHQva2V5cmluZ3MKY3VybCAtZnNTTCBodHRwczovL2RsLms4cy5pby9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgc3VkbyBncGcgLS1kZWFybW9yIC1vIC9ldGMvYXB0L2tleXJpbmdzL2t1YmVybmV0ZXMtYXJjaGl2ZS1rZXlyaW5nLmdwZwplY2hvICJkZWIgW3NpZ25lZC1ieT0vZXRjL2FwdC9rZXlyaW5ncy9rdWJlcm5ldGVzLWFyY2hpdmUta2V5cmluZy5ncGddIGh0dHBzOi8vYXB0Lmt1YmVybmV0ZXMuaW8vIGt1YmVybmV0ZXMteGVuaWFsIG1haW4iIHwgc3VkbyB0ZWUgL2V0Yy9hcHQvc291cmNlcy5saXN0LmQva3ViZXJuZXRlcy5saXN0CmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBzdWRvIGdwZyAtLWRlYXJtb3IgLW8gL2V0Yy9hcHQva2V5cmluZ3MvZG9ja2VyLmdwZwplY2hvICJkZWIgW2FyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSBzaWduZWQtYnk9L2V0Yy9hcHQva2V5cmluZ3MvZG9ja2VyLmdwZ10gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAkKGxzYl9yZWxlYXNlIC1jcykgc3RhYmxlIiB8IHN1ZG8gdGVlIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2RvY2tlci5saXN0ID4gL2Rldi9udWxsCmFwdC1nZXQgdXBkYXRlCmFwdC1nZXQgaW5zdGFsbCAteSBjb250YWluZXJkLmlvIGt1YmVsZXQ9MS4yNy41LTAwIGt1YmVhZG09MS4yNy41LTAwIGt1YmVjdGw9MS4yNy41LTAwCmFwdC1tYXJrIGhvbGQga3ViZWxldCBrdWJlYWRtIGt1YmVjdGwKY29udGFpbmVyZCBjb25maWcgZGVmYXVsdCA+IC9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbApzZWQgLWkgJ3MvU3lzdGVtZENncm91cCA9IGZhbHNlL1N5c3RlbWRDZ3JvdXAgPSB0cnVlLycgL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sCnNlZCAtaSAicyxzYW5kYm94X2ltYWdlLiokLHNhbmRib3hfaW1hZ2UgPSBcIiQoa3ViZWFkbSBjb25maWcgaW1hZ2VzIGxpc3QgfCBncmVwIHBhdXNlIHwgc29ydCAtciB8IGhlYWQgLW4xKVwiLCIgL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sCnN5c3RlbWN0bCByZXN0YXJ0IGNvbnRhaW5lcmQKc3lzdGVtY3RsIGVuYWJsZSBrdWJlbGV0LnNlcnZpY2UKa3ViZWFkbSBpbml0IC0tY29uZmlnPS9yb290L2t1YmVhZG0uaW5pdC55YW1sIC0tdXBsb2FkLWNlcnRzCm1rZGlyIC1wIC9yb290Ly5rdWJlICYmIGNwIC1mIC9ldGMva3ViZXJuZXRlcy9hZG1pbi5jb25mIC9yb290Ly5rdWJlL2NvbmZpZwpjcCAvZXRjL2t1YmVybmV0ZXMvYWRtaW4uY29uZiAvcm9vdC8ua3ViZS9jb25maWcKZWNobyAic291cmNlIDwoa3ViZWN0bCBjb21wbGV0aW9uIGJhc2gpIiA+PiAvcm9vdC8uYmFzaHJjCmVjaG8gImFsaWFzIGs9a3ViZWN0bCIgPj4gL3Jvb3QvLmJhc2hyYwplY2hvICJjb21wbGV0ZSAtbyBkZWZhdWx0IC1GIF9fc3RhcnRfa3ViZWN0bCBrIiA+PiAvcm9vdC8uYmFzaHJjCmNhdCA8PEVPRiB8IHRlZSAvZXRjL2RlZmF1bHQva3ViZWxldApLVUJFTEVUX0VYVFJBX0FSR1M9LS1jbG91ZC1wcm92aWRlcj1leHRlcm5hbApFT0YKa3ViZWFkbSBqb2luIC0tZGlzY292ZXJ5LXRva2VuLXVuc2FmZS1za2lwLWNhLXZlcmlmaWNhdGlvbiAtLXRva2VuIHt7LkJvb3RzdHJhcFRva2VuSUR9fS57ey5Cb290c3RyYXBUb2tlblNlY3JldH19IHt7LkFQSVNlcnZlckVuZHBvaW50fX0K reservation=prefer hostname-pattern=k8s-{{.ClusterName}}-{{.NodeGroup}}-{{.RandString8}} [nodegroupdef "pool2"] project-id=YOUR_EQUINIX_METAL_PROJECT_ID api-server-endpoint=YOUR_KUBERNETES_API_IP_ADDRESS:YOUR_KUBERNETES_API_PORT - facility=sv15 - os=ubuntu_18_04 + metro=sv + os=ubuntu_22_04 plan=c3.small.x86 billing=hourly - cloudinit=IyEvYmluL2Jhc2gKZXhwb3J0IERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZQphcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbgpjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgYXB0LWtleSBhZGQgLQpjdXJsIC1zIGh0dHBzOi8vcGFja2FnZXMuY2xvdWQuZ29vZ2xlLmNvbS9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgYXB0LWtleSBhZGQgLQpjYXQgPDxFT0YgPi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2t1YmVybmV0ZXMubGlzdApkZWIgaHR0cHM6Ly9hcHQua3ViZXJuZXRlcy5pby8ga3ViZXJuZXRlcy14ZW5pYWwgbWFpbgpFT0YKYWRkLWFwdC1yZXBvc2l0b3J5ICAgImRlYiBbYXJjaD1hbWQ2NF0gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAgICQobHNiX3JlbGVhc2UgLWNzKSAgIHN0YWJsZSIKYXB0LWdldCB1cGRhdGUKYXB0LWdldCB1cGdyYWRlIC15CmFwdC1nZXQgaW5zdGFsbCAteSBrdWJlbGV0PTEuMTcuNC0wMCBrdWJlYWRtPTEuMTcuNC0wMCBrdWJlY3RsPTEuMTcuNC0wMAphcHQtbWFyayBob2xkIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsCmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBhcHQta2V5IGFkZCAtCmFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIFthcmNoPWFtZDY0XSBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1IGJpb25pYyBzdGFibGUiCmFwdCB1cGRhdGUKYXB0IGluc3RhbGwgLXkgZG9ja2VyLWNlPTE4LjA2LjJ+Y2V+My0wfnVidW50dQpjYXQgPiAvZXRjL2RvY2tlci9kYWVtb24uanNvbiA8PEVPRgp7CiAgImV4ZWMtb3B0cyI6IFsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sCiAgImxvZy1kcml2ZXIiOiAianNvbi1maWxlIiwKICAibG9nLW9wdHMiOiB7CiAgICAibWF4LXNpemUiOiAiMTAwbSIKICB9LAogICJzdG9yYWdlLWRyaXZlciI6ICJvdmVybGF5MiIKfQpFT0YKbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb2NrZXIuc2VydmljZS5kCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCnN5c3RlbWN0bCByZXN0YXJ0IGRvY2tlcgpzd2Fwb2ZmIC1hCm12IC9ldGMvZnN0YWIgL2V0Yy9mc3RhYi5vbGQgJiYgZ3JlcCAtdiBzd2FwIC9ldGMvZnN0YWIub2xkID4gL2V0Yy9mc3RhYgpjYXQgPDxFT0YgfCB0ZWUgL2V0Yy9kZWZhdWx0L2t1YmVsZXQKS1VCRUxFVF9FWFRSQV9BUkdTPS0tY2xvdWQtcHJvdmlkZXI9ZXh0ZXJuYWwKRU9GCmt1YmVhZG0gam9pbiAtLWRpc2NvdmVyeS10b2tlbi11bnNhZmUtc2tpcC1jYS12ZXJpZmljYXRpb24gLS10b2tlbiB7ey5Cb290c3RyYXBUb2tlbklEfX0ue3suQm9vdHN0cmFwVG9rZW5TZWNyZXR9fSB7ey5BUElTZXJ2ZXJFbmRwb2ludH19Cg== + cloudinit=IyEvYmluL2Jhc2gKc2xlZXAgMTAKc2VkIC1yaSAnL1xzc3dhcFxzL3MvXiM/LyMvJyAvZXRjL2ZzdGFiCnN3YXBvZmYgLWEKbW91bnQgLWEKbW9kcHJvYmUgb3ZlcmxheQptb2Rwcm9iZSBicl9uZXRmaWx0ZXIKc3lzY3RsIC0tc3lzdGVtCmV4cG9ydCBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUKYXB0LWdldCB1cGRhdGUKYXB0LWdldCByZW1vdmUgZG9ja2VyIGRvY2tlci1lbmdpbmUgY29udGFpbmVyZCBydW5jIC15CmFwdC1nZXQgaW5zdGFsbCBhcHQtdHJhbnNwb3J0LWh0dHBzIGNhLWNlcnRpZmljYXRlcyBjdXJsIGdudXBnIGxzYi1yZWxlYXNlIGpxIGt1YmV0YWlsIC15Cm1rZGlyIC1tIDA3NTUgLXAgL2V0Yy9hcHQva2V5cmluZ3MKY3VybCAtZnNTTCBodHRwczovL2RsLms4cy5pby9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgc3VkbyBncGcgLS1kZWFybW9yIC1vIC9ldGMvYXB0L2tleXJpbmdzL2t1YmVybmV0ZXMtYXJjaGl2ZS1rZXlyaW5nLmdwZwplY2hvICJkZWIgW3NpZ25lZC1ieT0vZXRjL2FwdC9rZXlyaW5ncy9rdWJlcm5ldGVzLWFyY2hpdmUta2V5cmluZy5ncGddIGh0dHBzOi8vYXB0Lmt1YmVybmV0ZXMuaW8vIGt1YmVybmV0ZXMteGVuaWFsIG1haW4iIHwgc3VkbyB0ZWUgL2V0Yy9hcHQvc291cmNlcy5saXN0LmQva3ViZXJuZXRlcy5saXN0CmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBzdWRvIGdwZyAtLWRlYXJtb3IgLW8gL2V0Yy9hcHQva2V5cmluZ3MvZG9ja2VyLmdwZwplY2hvICJkZWIgW2FyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSBzaWduZWQtYnk9L2V0Yy9hcHQva2V5cmluZ3MvZG9ja2VyLmdwZ10gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAkKGxzYl9yZWxlYXNlIC1jcykgc3RhYmxlIiB8IHN1ZG8gdGVlIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2RvY2tlci5saXN0ID4gL2Rldi9udWxsCmFwdC1nZXQgdXBkYXRlCmFwdC1nZXQgaW5zdGFsbCAteSBjb250YWluZXJkLmlvIGt1YmVsZXQ9MS4yNy41LTAwIGt1YmVhZG09MS4yNy41LTAwIGt1YmVjdGw9MS4yNy41LTAwCmFwdC1tYXJrIGhvbGQga3ViZWxldCBrdWJlYWRtIGt1YmVjdGwKY29udGFpbmVyZCBjb25maWcgZGVmYXVsdCA+IC9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbApzZWQgLWkgJ3MvU3lzdGVtZENncm91cCA9IGZhbHNlL1N5c3RlbWRDZ3JvdXAgPSB0cnVlLycgL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sCnNlZCAtaSAicyxzYW5kYm94X2ltYWdlLiokLHNhbmRib3hfaW1hZ2UgPSBcIiQoa3ViZWFkbSBjb25maWcgaW1hZ2VzIGxpc3QgfCBncmVwIHBhdXNlIHwgc29ydCAtciB8IGhlYWQgLW4xKVwiLCIgL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sCnN5c3RlbWN0bCByZXN0YXJ0IGNvbnRhaW5lcmQKc3lzdGVtY3RsIGVuYWJsZSBrdWJlbGV0LnNlcnZpY2UKa3ViZWFkbSBpbml0IC0tY29uZmlnPS9yb290L2t1YmVhZG0uaW5pdC55YW1sIC0tdXBsb2FkLWNlcnRzCm1rZGlyIC1wIC9yb290Ly5rdWJlICYmIGNwIC1mIC9ldGMva3ViZXJuZXRlcy9hZG1pbi5jb25mIC9yb290Ly5rdWJlL2NvbmZpZwpjcCAvZXRjL2t1YmVybmV0ZXMvYWRtaW4uY29uZiAvcm9vdC8ua3ViZS9jb25maWcKZWNobyAic291cmNlIDwoa3ViZWN0bCBjb21wbGV0aW9uIGJhc2gpIiA+PiAvcm9vdC8uYmFzaHJjCmVjaG8gImFsaWFzIGs9a3ViZWN0bCIgPj4gL3Jvb3QvLmJhc2hyYwplY2hvICJjb21wbGV0ZSAtbyBkZWZhdWx0IC1GIF9fc3RhcnRfa3ViZWN0bCBrIiA+PiAvcm9vdC8uYmFzaHJjCmNhdCA8PEVPRiB8IHRlZSAvZXRjL2RlZmF1bHQva3ViZWxldApLVUJFTEVUX0VYVFJBX0FSR1M9LS1jbG91ZC1wcm92aWRlcj1leHRlcm5hbApFT0YKa3ViZWFkbSBqb2luIC0tZGlzY292ZXJ5LXRva2VuLXVuc2FmZS1za2lwLWNhLXZlcmlmaWNhdGlvbiAtLXRva2VuIHt7LkJvb3RzdHJhcFRva2VuSUR9fS57ey5Cb290c3RyYXBUb2tlblNlY3JldH19IHt7LkFQSVNlcnZlckVuZHBvaW50fX0K reservation=prefer hostname-pattern=k8s-{{.ClusterName}}-{{.NodeGroup}}-{{.RandString8}} --- @@ -56,6 +57,7 @@ stringData: description: "The default bootstrap token used by cluster-autoscaler on Equinix Metal." # Token ID and secret. Required if using bootstrap tokens in cloudinit (e.g. with kubeadm). + # More info on using kubeadm to create a token: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-token/ # token-id must match the regular expression [a-z0-9]{6} token-id: YOUR_TOKEN_ID # token-secret must match the regular expression [a-z0-9]{16} diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index e77f54880dc9..138410a2685f 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -210,7 +210,7 @@ type IPAddressCreateRequest struct { type DeviceCreateRequest struct { Hostname string `json:"hostname"` Plan string `json:"plan"` - Metro []string `json:"metro"` + Metro string `json:"metro"` OS string `json:"operating_system"` BillingCycle string `json:"billing_cycle"` ProjectID string `json:"project_id"` @@ -313,7 +313,7 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. } manager.packetManagerNodePools[nodepool] = &packetManagerNodePool{ - baseURL: "https://api.equinix.com/metal/v1/", + baseURL: "https://api.equinix.com/metal/v1", clusterName: cfg.Nodegroupdef[nodepool].ClusterName, projectID: cfg.Nodegroupdef["default"].ProjectID, apiServerEndpoint: cfg.Nodegroupdef["default"].APIServerEndpoint, @@ -521,7 +521,7 @@ func (mgr *packetManagerRest) createDevice(ctx context.Context, hostname, userDa cr := &DeviceCreateRequest{ Hostname: hostname, - Metro: []string{mgr.getNodePoolDefinition(nodegroup).metro}, + Metro: mgr.getNodePoolDefinition(nodegroup).metro, Plan: mgr.getNodePoolDefinition(nodegroup).plan, OS: mgr.getNodePoolDefinition(nodegroup).os, ProjectID: mgr.getNodePoolDefinition(nodegroup).projectID, From 678caa5fffa2364e38e47023dfe4a8965ac0f416 Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Thu, 14 Sep 2023 07:17:42 -0700 Subject: [PATCH 050/125] Fix the api path to autoscaling.x-k8s.io --- ...caling.x-k8s.io_provisioningrequests.yaml} | 5 ++- cluster-autoscaler/hack/update-codegen.sh | 2 +- .../v1beta1/doc.go | 2 +- .../v1beta1/register.go | 2 +- .../v1beta1/types.go | 1 - .../v1beta1/zz_generated.deepcopy.go | 0 .../v1beta1/podset.go | 0 .../v1beta1/provisioningrequest.go | 2 +- .../v1beta1/provisioningrequestspec.go | 0 .../v1beta1/provisioningrequeststatus.go | 0 .../v1beta1/reference.go | 0 .../client/applyconfiguration/utils.go | 16 +++++----- .../client/clientset/versioned/clientset.go | 16 +++++----- .../versioned/fake/clientset_generated.go | 10 +++--- .../clientset/versioned/fake/register.go | 4 +-- .../clientset/versioned/scheme/register.go | 4 +-- .../v1beta1/autoscaling.x-k8s.io_client.go} | 32 +++++++++---------- .../v1beta1/doc.go | 0 .../v1beta1/fake/doc.go | 0 .../fake/fake_autoscaling.x-k8s.io_client.go} | 8 ++--- .../v1beta1/fake/fake_provisioningrequest.go | 10 +++--- .../v1beta1/generated_expansion.go | 0 .../v1beta1/provisioningrequest.go | 14 ++++---- .../interface.go | 4 +-- .../v1beta1/interface.go | 0 .../v1beta1/provisioningrequest.go | 12 +++---- .../informers/externalversions/factory.go | 8 ++--- .../informers/externalversions/generic.go | 6 ++-- .../v1beta1/expansion_generated.go | 0 .../v1beta1/provisioningrequest.go | 2 +- 30 files changed, 79 insertions(+), 81 deletions(-) rename cluster-autoscaler/config/crd/{provisioning.k8s.io_provisioningrequests.yaml => autoscaling.x-k8s.io_provisioningrequests.yaml} (98%) rename cluster-autoscaler/provisioningrequests/apis/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/doc.go (95%) rename cluster-autoscaler/provisioningrequests/apis/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/register.go (98%) rename cluster-autoscaler/provisioningrequests/apis/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/types.go (98%) rename cluster-autoscaler/provisioningrequests/apis/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/zz_generated.deepcopy.go (100%) rename cluster-autoscaler/provisioningrequests/client/applyconfiguration/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/podset.go (100%) rename cluster-autoscaler/provisioningrequests/client/applyconfiguration/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequest.go (99%) rename cluster-autoscaler/provisioningrequests/client/applyconfiguration/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequestspec.go (100%) rename cluster-autoscaler/provisioningrequests/client/applyconfiguration/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequeststatus.go (100%) rename cluster-autoscaler/provisioningrequests/client/applyconfiguration/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/reference.go (100%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go => autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go} (66%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/doc.go (100%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/fake/doc.go (100%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go => autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go} (77%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/fake/fake_provisioningrequest.go (95%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/generated_expansion.go (100%) rename cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequest.go (94%) rename cluster-autoscaler/provisioningrequests/client/informers/externalversions/{provisioning.k8s.io => autoscaling.x-k8s.io}/interface.go (94%) rename cluster-autoscaler/provisioningrequests/client/informers/externalversions/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/interface.go (100%) rename cluster-autoscaler/provisioningrequests/client/informers/externalversions/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequest.go (87%) rename cluster-autoscaler/provisioningrequests/client/listers/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/expansion_generated.go (100%) rename cluster-autoscaler/provisioningrequests/client/listers/{provisioning.k8s.io => autoscaling.x-k8s.io}/v1beta1/provisioningrequest.go (99%) diff --git a/cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml b/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml similarity index 98% rename from cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml rename to cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml index 30c1d699ad6e..443c346cbed1 100644 --- a/cluster-autoscaler/config/crd/provisioning.k8s.io_provisioningrequests.yaml +++ b/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml @@ -3,11 +3,10 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - api-approved.kubernetes.io: https://github.com/kubernetes/autoscaler/pull/5848 controller-gen.kubebuilder.io/version: v0.13.0 - name: provisioningrequests.provisioning.k8s.io + name: provisioningrequests.autoscaling.x-k8s.io spec: - group: provisioning.k8s.io + group: autoscaling.x-k8s.io names: kind: ProvisioningRequest listKind: ProvisioningRequestList diff --git a/cluster-autoscaler/hack/update-codegen.sh b/cluster-autoscaler/hack/update-codegen.sh index 33b329e13cd2..5d19ea638cd2 100755 --- a/cluster-autoscaler/hack/update-codegen.sh +++ b/cluster-autoscaler/hack/update-codegen.sh @@ -32,7 +32,7 @@ chmod +x "${CODEGEN_PKG}"/generate-internal-groups.sh bash "${CODEGEN_PKG}"/generate-groups.sh "applyconfiguration,client,deepcopy,informer,lister" \ k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client \ k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis \ - provisioning.k8s.io:v1beta1 \ + autoscaling.x-k8s.io:v1beta1 \ --go-header-file "${SCRIPT_ROOT}"/../hack/boilerplate/boilerplate.generatego.txt chmod -x "${CODEGEN_PKG}"/generate-groups.sh diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/doc.go similarity index 95% rename from cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go rename to cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/doc.go index aa1e46ba67bf..ff0f1d9bdcc5 100644 --- a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/doc.go +++ b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/doc.go @@ -17,5 +17,5 @@ limitations under the License. // Package v1beta1 contains definitions of Provisioning Request related objects. // +k8s:deepcopy-gen=package // +k8s:defaulter-gen=TypeMeta -// +groupName=provisioning.k8s.io +// +groupName=autoscaling.x-k8s.io package v1beta1 diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/register.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go rename to cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/register.go index 11595d07db2c..3f3a361b0485 100644 --- a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/register.go +++ b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/register.go @@ -25,7 +25,7 @@ import ( const ( // GroupName represents the group name for ProvisioningRequest resources. - GroupName = "provisioning.k8s.io" + GroupName = "autoscaling.x-k8s.io" // GroupVersion represents the group name for ProvisioningRequest resources. GroupVersion = "v1beta1" ) diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go rename to cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go index 1aa1ccebe124..68b771907559 100644 --- a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/types.go +++ b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go @@ -37,7 +37,6 @@ import ( // // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:metadata:annotations="api-approved.kubernetes.io=https://github.com/kubernetes/autoscaler/pull/5848" // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type ProvisioningRequest struct { metav1.TypeMeta `json:",inline"` diff --git a/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go b/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1/zz_generated.deepcopy.go rename to cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/podset.go rename to cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 99% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index a8697c499bce..7a420da3c42a 100644 --- a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -40,7 +40,7 @@ func ProvisioningRequest(name, namespace string) *ProvisioningRequestApplyConfig b.WithName(name) b.WithNamespace(namespace) b.WithKind("ProvisioningRequest") - b.WithAPIVersion("provisioning.k8s.io/v1beta1") + b.WithAPIVersion("autoscaling.x-k8s.io/v1beta1") return b } diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequestspec.go rename to cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/provisioningrequeststatus.go rename to cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1/reference.go rename to cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go index 06538b9c896a..bf93c42af3dd 100644 --- a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go +++ b/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go @@ -20,25 +20,25 @@ package applyconfiguration import ( schema "k8s.io/apimachinery/pkg/runtime/schema" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" - provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" ) // ForKind returns an apply configuration type for the given GroupVersionKind, or nil if no // apply configuration type exists for the given GroupVersionKind. func ForKind(kind schema.GroupVersionKind) interface{} { switch kind { - // Group=provisioning.k8s.io, Version=v1beta1 + // Group=autoscaling.x-k8s.io, Version=v1beta1 case v1beta1.SchemeGroupVersion.WithKind("PodSet"): - return &provisioningk8siov1beta1.PodSetApplyConfiguration{} + return &autoscalingxk8siov1beta1.PodSetApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequest"): - return &provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration{} + return &autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequestSpec"): - return &provisioningk8siov1beta1.ProvisioningRequestSpecApplyConfiguration{} + return &autoscalingxk8siov1beta1.ProvisioningRequestSpecApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("ProvisioningRequestStatus"): - return &provisioningk8siov1beta1.ProvisioningRequestStatusApplyConfiguration{} + return &autoscalingxk8siov1beta1.ProvisioningRequestStatusApplyConfiguration{} case v1beta1.SchemeGroupVersion.WithKind("Reference"): - return &provisioningk8siov1beta1.ReferenceApplyConfiguration{} + return &autoscalingxk8siov1beta1.ReferenceApplyConfiguration{} } return nil diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go index e0a812e75e5d..c259ca99590b 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go @@ -22,7 +22,7 @@ import ( "fmt" "net/http" - provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" discovery "k8s.io/client-go/discovery" rest "k8s.io/client-go/rest" flowcontrol "k8s.io/client-go/util/flowcontrol" @@ -30,18 +30,18 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface - ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface + AutoscalingV1beta1() autoscalingv1beta1.AutoscalingV1beta1Interface } // Clientset contains the clients for groups. type Clientset struct { *discovery.DiscoveryClient - provisioningV1beta1 *provisioningv1beta1.ProvisioningV1beta1Client + autoscalingV1beta1 *autoscalingv1beta1.AutoscalingV1beta1Client } -// ProvisioningV1beta1 retrieves the ProvisioningV1beta1Client -func (c *Clientset) ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface { - return c.provisioningV1beta1 +// AutoscalingV1beta1 retrieves the AutoscalingV1beta1Client +func (c *Clientset) AutoscalingV1beta1() autoscalingv1beta1.AutoscalingV1beta1Interface { + return c.autoscalingV1beta1 } // Discovery retrieves the DiscoveryClient @@ -88,7 +88,7 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, var cs Clientset var err error - cs.provisioningV1beta1, err = provisioningv1beta1.NewForConfigAndClient(&configShallowCopy, httpClient) + cs.autoscalingV1beta1, err = autoscalingv1beta1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err } @@ -113,7 +113,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { // New creates a new Clientset for the given RESTClient. func New(c rest.Interface) *Clientset { var cs Clientset - cs.provisioningV1beta1 = provisioningv1beta1.New(c) + cs.autoscalingV1beta1 = autoscalingv1beta1.New(c) cs.DiscoveryClient = discovery.NewDiscoveryClient(c) return &cs diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go index 074edbbe223c..4545dfe2f890 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go @@ -22,8 +22,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" clientset "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" - provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" - fakeprovisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" + fakeautoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake" "k8s.io/client-go/discovery" fakediscovery "k8s.io/client-go/discovery/fake" "k8s.io/client-go/testing" @@ -79,7 +79,7 @@ var ( _ testing.FakeClient = &Clientset{} ) -// ProvisioningV1beta1 retrieves the ProvisioningV1beta1Client -func (c *Clientset) ProvisioningV1beta1() provisioningv1beta1.ProvisioningV1beta1Interface { - return &fakeprovisioningv1beta1.FakeProvisioningV1beta1{Fake: &c.Fake} +// AutoscalingV1beta1 retrieves the AutoscalingV1beta1Client +func (c *Clientset) AutoscalingV1beta1() autoscalingv1beta1.AutoscalingV1beta1Interface { + return &fakeautoscalingv1beta1.FakeAutoscalingV1beta1{Fake: &c.Fake} } diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go index 08d60ff803d3..e189af6733b3 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go @@ -24,14 +24,14 @@ import ( schema "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" ) var scheme = runtime.NewScheme() var codecs = serializer.NewCodecFactory(scheme) var localSchemeBuilder = runtime.SchemeBuilder{ - provisioningv1beta1.AddToScheme, + autoscalingv1beta1.AddToScheme, } // AddToScheme adds all types of this clientset into the given scheme. This allows composition diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go index 6b67cea5ea62..85d4b7cd320f 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go @@ -24,14 +24,14 @@ import ( schema "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - provisioningv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" ) var Scheme = runtime.NewScheme() var Codecs = serializer.NewCodecFactory(Scheme) var ParameterCodec = runtime.NewParameterCodec(Scheme) var localSchemeBuilder = runtime.SchemeBuilder{ - provisioningv1beta1.AddToScheme, + autoscalingv1beta1.AddToScheme, } // AddToScheme adds all types of this clientset into the given scheme. This allows composition diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go similarity index 66% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go index 34b53bc62256..a2ad84f3a260 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioning.k8s.io_client.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go @@ -21,29 +21,29 @@ package v1beta1 import ( "net/http" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" rest "k8s.io/client-go/rest" ) -type ProvisioningV1beta1Interface interface { +type AutoscalingV1beta1Interface interface { RESTClient() rest.Interface ProvisioningRequestsGetter } -// ProvisioningV1beta1Client is used to interact with features provided by the provisioning.k8s.io group. -type ProvisioningV1beta1Client struct { +// AutoscalingV1beta1Client is used to interact with features provided by the autoscaling.x-k8s.io group. +type AutoscalingV1beta1Client struct { restClient rest.Interface } -func (c *ProvisioningV1beta1Client) ProvisioningRequests(namespace string) ProvisioningRequestInterface { +func (c *AutoscalingV1beta1Client) ProvisioningRequests(namespace string) ProvisioningRequestInterface { return newProvisioningRequests(c, namespace) } -// NewForConfig creates a new ProvisioningV1beta1Client for the given config. +// NewForConfig creates a new AutoscalingV1beta1Client for the given config. // NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), // where httpClient was generated with rest.HTTPClientFor(c). -func NewForConfig(c *rest.Config) (*ProvisioningV1beta1Client, error) { +func NewForConfig(c *rest.Config) (*AutoscalingV1beta1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err @@ -55,9 +55,9 @@ func NewForConfig(c *rest.Config) (*ProvisioningV1beta1Client, error) { return NewForConfigAndClient(&config, httpClient) } -// NewForConfigAndClient creates a new ProvisioningV1beta1Client for the given config and http client. +// NewForConfigAndClient creates a new AutoscalingV1beta1Client for the given config and http client. // Note the http client provided takes precedence over the configured transport values. -func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ProvisioningV1beta1Client, error) { +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*AutoscalingV1beta1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err @@ -66,12 +66,12 @@ func NewForConfigAndClient(c *rest.Config, h *http.Client) (*ProvisioningV1beta1 if err != nil { return nil, err } - return &ProvisioningV1beta1Client{client}, nil + return &AutoscalingV1beta1Client{client}, nil } -// NewForConfigOrDie creates a new ProvisioningV1beta1Client for the given config and +// NewForConfigOrDie creates a new AutoscalingV1beta1Client for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *ProvisioningV1beta1Client { +func NewForConfigOrDie(c *rest.Config) *AutoscalingV1beta1Client { client, err := NewForConfig(c) if err != nil { panic(err) @@ -79,9 +79,9 @@ func NewForConfigOrDie(c *rest.Config) *ProvisioningV1beta1Client { return client } -// New creates a new ProvisioningV1beta1Client for the given RESTClient. -func New(c rest.Interface) *ProvisioningV1beta1Client { - return &ProvisioningV1beta1Client{c} +// New creates a new AutoscalingV1beta1Client for the given RESTClient. +func New(c rest.Interface) *AutoscalingV1beta1Client { + return &AutoscalingV1beta1Client{c} } func setConfigDefaults(config *rest.Config) error { @@ -99,7 +99,7 @@ func setConfigDefaults(config *rest.Config) error { // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *ProvisioningV1beta1Client) RESTClient() rest.Interface { +func (c *AutoscalingV1beta1Client) RESTClient() rest.Interface { if c == nil { return nil } diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/doc.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/doc.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go similarity index 77% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go index 70c512620738..7edb82b655fb 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioning.k8s.io_client.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go @@ -19,22 +19,22 @@ limitations under the License. package fake import ( - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" rest "k8s.io/client-go/rest" testing "k8s.io/client-go/testing" ) -type FakeProvisioningV1beta1 struct { +type FakeAutoscalingV1beta1 struct { *testing.Fake } -func (c *FakeProvisioningV1beta1) ProvisioningRequests(namespace string) v1beta1.ProvisioningRequestInterface { +func (c *FakeAutoscalingV1beta1) ProvisioningRequests(namespace string) v1beta1.ProvisioningRequestInterface { return &FakeProvisioningRequests{c, namespace} } // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *FakeProvisioningV1beta1) RESTClient() rest.Interface { +func (c *FakeAutoscalingV1beta1) RESTClient() rest.Interface { var ret *rest.RESTClient return ret } diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go similarity index 95% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go index d04de1cd016d..d9d2f0b8d573 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/fake/fake_provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go @@ -27,14 +27,14 @@ import ( labels "k8s.io/apimachinery/pkg/labels" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" - provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" testing "k8s.io/client-go/testing" ) // FakeProvisioningRequests implements ProvisioningRequestInterface type FakeProvisioningRequests struct { - Fake *FakeProvisioningV1beta1 + Fake *FakeAutoscalingV1beta1 ns string } @@ -144,7 +144,7 @@ func (c *FakeProvisioningRequests) Patch(ctx context.Context, name string, pt ty } // Apply takes the given apply declarative configuration, applies it and returns the applied provisioningRequest. -func (c *FakeProvisioningRequests) Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { +func (c *FakeProvisioningRequests) Apply(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { if provisioningRequest == nil { return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") } @@ -167,7 +167,7 @@ func (c *FakeProvisioningRequests) Apply(ctx context.Context, provisioningReques // ApplyStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *FakeProvisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { +func (c *FakeProvisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { if provisioningRequest == nil { return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") } diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/generated_expansion.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index 1f76d6b4a7c9..75d49f3501e0 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/provisioning.k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -27,8 +27,8 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" - provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" scheme "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" rest "k8s.io/client-go/rest" ) @@ -50,8 +50,8 @@ type ProvisioningRequestInterface interface { List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ProvisioningRequestList, error) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ProvisioningRequest, err error) - Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) - ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) + Apply(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) + ApplyStatus(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) ProvisioningRequestExpansion } @@ -62,7 +62,7 @@ type provisioningRequests struct { } // newProvisioningRequests returns a ProvisioningRequests -func newProvisioningRequests(c *ProvisioningV1beta1Client, namespace string) *provisioningRequests { +func newProvisioningRequests(c *AutoscalingV1beta1Client, namespace string) *provisioningRequests { return &provisioningRequests{ client: c.RESTClient(), ns: namespace, @@ -200,7 +200,7 @@ func (c *provisioningRequests) Patch(ctx context.Context, name string, pt types. } // Apply takes the given apply declarative configuration, applies it and returns the applied provisioningRequest. -func (c *provisioningRequests) Apply(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { +func (c *provisioningRequests) Apply(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { if provisioningRequest == nil { return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") } @@ -227,7 +227,7 @@ func (c *provisioningRequests) Apply(ctx context.Context, provisioningRequest *p // ApplyStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *provisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *provisioningk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { +func (c *provisioningRequests) ApplyStatus(ctx context.Context, provisioningRequest *autoscalingxk8siov1beta1.ProvisioningRequestApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.ProvisioningRequest, err error) { if provisioningRequest == nil { return nil, fmt.Errorf("provisioningRequest provided to Apply must not be nil") } diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go rename to cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go index b74bdb489aad..3aa0dc88f35c 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/interface.go +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go @@ -16,11 +16,11 @@ limitations under the License. // Code generated by informer-gen. DO NOT EDIT. -package provisioning +package autoscaling import ( + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1" internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1" ) // Interface provides access to each of this group's versions. diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/interface.go rename to cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 87% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index c17251fdd3cc..68d0bc47e877 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -25,10 +25,10 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" watch "k8s.io/apimachinery/pkg/watch" - provisioningk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1" cache "k8s.io/client-go/tools/cache" ) @@ -62,16 +62,16 @@ func NewFilteredProvisioningRequestInformer(client versioned.Interface, namespac if tweakListOptions != nil { tweakListOptions(&options) } - return client.ProvisioningV1beta1().ProvisioningRequests(namespace).List(context.TODO(), options) + return client.AutoscalingV1beta1().ProvisioningRequests(namespace).List(context.TODO(), options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.ProvisioningV1beta1().ProvisioningRequests(namespace).Watch(context.TODO(), options) + return client.AutoscalingV1beta1().ProvisioningRequests(namespace).Watch(context.TODO(), options) }, }, - &provisioningk8siov1beta1.ProvisioningRequest{}, + &autoscalingxk8siov1beta1.ProvisioningRequest{}, resyncPeriod, indexers, ) @@ -82,7 +82,7 @@ func (f *provisioningRequestInformer) defaultInformer(client versioned.Interface } func (f *provisioningRequestInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&provisioningk8siov1beta1.ProvisioningRequest{}, f.defaultInformer) + return f.factory.InformerFor(&autoscalingxk8siov1beta1.ProvisioningRequest{}, f.defaultInformer) } func (f *provisioningRequestInformer) Lister() v1beta1.ProvisioningRequestLister { diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go index ba94a3127d1b..655f84990f4d 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go @@ -27,8 +27,8 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + autoscalingxk8sio "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io" internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" - provisioningk8sio "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/provisioning.k8s.io" cache "k8s.io/client-go/tools/cache" ) @@ -243,9 +243,9 @@ type SharedInformerFactory interface { // client. InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer - Provisioning() provisioningk8sio.Interface + Autoscaling() autoscalingxk8sio.Interface } -func (f *sharedInformerFactory) Provisioning() provisioningk8sio.Interface { - return provisioningk8sio.New(f, f.namespace, f.tweakListOptions) +func (f *sharedInformerFactory) Autoscaling() autoscalingxk8sio.Interface { + return autoscalingxk8sio.New(f, f.namespace, f.tweakListOptions) } diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go index 829be90bff11..3e74dfcfdf75 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go +++ b/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go @@ -22,7 +22,7 @@ import ( "fmt" schema "k8s.io/apimachinery/pkg/runtime/schema" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" cache "k8s.io/client-go/tools/cache" ) @@ -52,9 +52,9 @@ func (f *genericInformer) Lister() cache.GenericLister { // TODO extend this to unknown resources with a client pool func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { switch resource { - // Group=provisioning.k8s.io, Version=v1beta1 + // Group=autoscaling.x-k8s.io, Version=v1beta1 case v1beta1.SchemeGroupVersion.WithResource("provisioningrequests"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Provisioning().V1beta1().ProvisioningRequests().Informer()}, nil + return &genericInformer{resource: resource.GroupResource(), informer: f.Autoscaling().V1beta1().ProvisioningRequests().Informer()}, nil } diff --git a/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go b/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/expansion_generated.go rename to cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go diff --git a/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 99% rename from cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index a1a067e0930c..2ef882d33d0d 100644 --- a/cluster-autoscaler/provisioningrequests/client/listers/provisioning.k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -21,7 +21,7 @@ package v1beta1 import ( "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/provisioning.k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" "k8s.io/client-go/tools/cache" ) From 0f02235e9826e91800067523930f00107460cad2 Mon Sep 17 00:00:00 2001 From: Eric Lin Date: Thu, 14 Sep 2023 18:00:41 +0000 Subject: [PATCH 051/125] Use informer factory to reuse listers Signed-off-by: Eric Lin --- .../context/autoscaling_context.go | 6 +- cluster-autoscaler/core/autoscaler.go | 4 +- cluster-autoscaler/main.go | 9 +- .../predicatechecker/schedulerbased.go | 9 +- .../simulator/predicatechecker/testchecker.go | 5 +- .../utils/kubernetes/listers.go | 119 ++++++------------ 6 files changed, 52 insertions(+), 100 deletions(-) diff --git a/cluster-autoscaler/context/autoscaling_context.go b/cluster-autoscaler/context/autoscaling_context.go index 040d0db8261e..3e7a0e119632 100644 --- a/cluster-autoscaler/context/autoscaling_context.go +++ b/cluster-autoscaler/context/autoscaling_context.go @@ -30,6 +30,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" + "k8s.io/client-go/informers" kube_client "k8s.io/client-go/kubernetes" kube_record "k8s.io/client-go/tools/record" klog "k8s.io/klog/v2" @@ -127,9 +128,8 @@ func NewAutoscalingContext( } // NewAutoscalingKubeClients builds AutoscalingKubeClients out of basic client. -func NewAutoscalingKubeClients(opts config.AutoscalingOptions, kubeClient, eventsKubeClient kube_client.Interface) *AutoscalingKubeClients { - listerRegistryStopChannel := make(chan struct{}) - listerRegistry := kube_util.NewListerRegistryWithDefaultListers(kubeClient, listerRegistryStopChannel) +func NewAutoscalingKubeClients(opts config.AutoscalingOptions, kubeClient, eventsKubeClient kube_client.Interface, informerFactory informers.SharedInformerFactory) *AutoscalingKubeClients { + listerRegistry := kube_util.NewListerRegistryWithDefaultListers(informerFactory) kubeEventRecorder := kube_util.CreateEventRecorder(eventsKubeClient, opts.RecordDuplicatedEvents) logRecorder, err := utils.NewStatusMapRecorder(kubeClient, opts.ConfigNamespace, kubeEventRecorder, opts.WriteStatusConfigMap, opts.StatusConfigMapName) if err != nil { diff --git a/cluster-autoscaler/core/autoscaler.go b/cluster-autoscaler/core/autoscaler.go index c8f7075ac448..4fd81f3e7436 100644 --- a/cluster-autoscaler/core/autoscaler.go +++ b/cluster-autoscaler/core/autoscaler.go @@ -36,6 +36,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/utils/backoff" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" + "k8s.io/client-go/informers" kube_client "k8s.io/client-go/kubernetes" ) @@ -44,6 +45,7 @@ type AutoscalerOptions struct { config.AutoscalingOptions KubeClient kube_client.Interface EventsKubeClient kube_client.Interface + InformerFactory informers.SharedInformerFactory AutoscalingKubeClients *context.AutoscalingKubeClients CloudProvider cloudprovider.CloudProvider PredicateChecker predicatechecker.PredicateChecker @@ -97,7 +99,7 @@ func initializeDefaultOptions(opts *AutoscalerOptions) error { opts.Processors = ca_processors.DefaultProcessors(opts.AutoscalingOptions) } if opts.AutoscalingKubeClients == nil { - opts.AutoscalingKubeClients = context.NewAutoscalingKubeClients(opts.AutoscalingOptions, opts.KubeClient, opts.EventsKubeClient) + opts.AutoscalingKubeClients = context.NewAutoscalingKubeClients(opts.AutoscalingOptions, opts.KubeClient, opts.EventsKubeClient, opts.InformerFactory) } if opts.ClusterSnapshot == nil { opts.ClusterSnapshot = clustersnapshot.NewBasicClusterSnapshot() diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 7bcece19690b..975094311b44 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -59,6 +59,7 @@ import ( scheduler_util "k8s.io/autoscaler/cluster-autoscaler/utils/scheduler" "k8s.io/autoscaler/cluster-autoscaler/utils/units" "k8s.io/autoscaler/cluster-autoscaler/version" + "k8s.io/client-go/informers" kube_client "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -437,11 +438,11 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter kubeClientConfig.Burst = autoscalingOptions.KubeClientBurst kubeClientConfig.QPS = float32(autoscalingOptions.KubeClientQPS) kubeClient := createKubeClient(kubeClientConfig) + informerFactory := informers.NewSharedInformerFactory(kubeClient, 0) eventsKubeClient := createKubeClient(getKubeConfig()) - predicateChecker, err := predicatechecker.NewSchedulerBasedPredicateChecker(kubeClient, - autoscalingOptions.SchedulerConfig, make(chan struct{})) + predicateChecker, err := predicatechecker.NewSchedulerBasedPredicateChecker(informerFactory, autoscalingOptions.SchedulerConfig) if err != nil { return nil, err } @@ -451,6 +452,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter AutoscalingOptions: autoscalingOptions, ClusterSnapshot: clustersnapshot.NewDeltaClusterSnapshot(), KubeClient: kubeClient, + InformerFactory: informerFactory, EventsKubeClient: eventsKubeClient, DebuggingSnapshotter: debuggingSnapshotter, PredicateChecker: predicateChecker, @@ -493,6 +495,9 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter Comparator: nodeInfoComparator, } + stop := make(chan struct{}) + informerFactory.Start(stop) + // These metrics should be published only once. metrics.UpdateNapEnabled(autoscalingOptions.NodeAutoprovisioningEnabled) metrics.UpdateCPULimitsCores(autoscalingOptions.MinCoresTotal, autoscalingOptions.MaxCoresTotal) diff --git a/cluster-autoscaler/simulator/predicatechecker/schedulerbased.go b/cluster-autoscaler/simulator/predicatechecker/schedulerbased.go index 9b7075323c14..7a0552e0a2ad 100644 --- a/cluster-autoscaler/simulator/predicatechecker/schedulerbased.go +++ b/cluster-autoscaler/simulator/predicatechecker/schedulerbased.go @@ -24,7 +24,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/client-go/informers" - kube_client "k8s.io/client-go/kubernetes" v1listers "k8s.io/client-go/listers/core/v1" klog "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/scheduler/apis/config" @@ -45,9 +44,7 @@ type SchedulerBasedPredicateChecker struct { } // NewSchedulerBasedPredicateChecker builds scheduler based PredicateChecker. -func NewSchedulerBasedPredicateChecker(kubeClient kube_client.Interface, schedConfig *config.KubeSchedulerConfiguration, stop <-chan struct{}) (*SchedulerBasedPredicateChecker, error) { - informerFactory := informers.NewSharedInformerFactory(kubeClient, 0) - +func NewSchedulerBasedPredicateChecker(informerFactory informers.SharedInformerFactory, schedConfig *config.KubeSchedulerConfiguration) (*SchedulerBasedPredicateChecker, error) { if schedConfig == nil { var err error schedConfig, err = scheduler_config.Default() @@ -78,10 +75,6 @@ func NewSchedulerBasedPredicateChecker(kubeClient kube_client.Interface, schedCo delegatingSharedLister: sharedLister, } - // this MUST be called after all the informers/listers are acquired via the - // informerFactory....Lister()/informerFactory....Informer() methods - informerFactory.Start(stop) - return checker, nil } diff --git a/cluster-autoscaler/simulator/predicatechecker/testchecker.go b/cluster-autoscaler/simulator/predicatechecker/testchecker.go index 81c3459c88ba..dd9e1745acac 100644 --- a/cluster-autoscaler/simulator/predicatechecker/testchecker.go +++ b/cluster-autoscaler/simulator/predicatechecker/testchecker.go @@ -17,6 +17,7 @@ limitations under the License. package predicatechecker import ( + "k8s.io/client-go/informers" clientsetfake "k8s.io/client-go/kubernetes/fake" "k8s.io/kubernetes/pkg/scheduler/apis/config" scheduler_config_latest "k8s.io/kubernetes/pkg/scheduler/apis/config/latest" @@ -30,14 +31,14 @@ func NewTestPredicateChecker() (PredicateChecker, error) { } // just call out to NewSchedulerBasedPredicateChecker but use fake kubeClient - return NewSchedulerBasedPredicateChecker(clientsetfake.NewSimpleClientset(), schedConfig, make(chan struct{})) + return NewSchedulerBasedPredicateChecker(informers.NewSharedInformerFactory(clientsetfake.NewSimpleClientset(), 0), schedConfig) } // NewTestPredicateCheckerWithCustomConfig builds test version of PredicateChecker with custom scheduler config. func NewTestPredicateCheckerWithCustomConfig(schedConfig *config.KubeSchedulerConfiguration) (PredicateChecker, error) { if schedConfig != nil { // just call out to NewSchedulerBasedPredicateChecker but use fake kubeClient - return NewSchedulerBasedPredicateChecker(clientsetfake.NewSimpleClientset(), schedConfig, make(chan struct{})) + return NewSchedulerBasedPredicateChecker(informers.NewSharedInformerFactory(clientsetfake.NewSimpleClientset(), 0), schedConfig) } return NewTestPredicateChecker() diff --git a/cluster-autoscaler/utils/kubernetes/listers.go b/cluster-autoscaler/utils/kubernetes/listers.go index 5311fd2fc89a..cbba21180682 100644 --- a/cluster-autoscaler/utils/kubernetes/listers.go +++ b/cluster-autoscaler/utils/kubernetes/listers.go @@ -19,12 +19,11 @@ package kubernetes import ( "time" - appsv1 "k8s.io/api/apps/v1" - batchv1 "k8s.io/api/batch/v1" apiv1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/informers" client "k8s.io/client-go/kubernetes" v1appslister "k8s.io/client-go/listers/apps/v1" v1batchlister "k8s.io/client-go/listers/batch/v1" @@ -78,16 +77,17 @@ func NewListerRegistry(allNode NodeLister, readyNode NodeLister, allPodLister Po } // NewListerRegistryWithDefaultListers returns a registry filled with listers of the default implementations -func NewListerRegistryWithDefaultListers(kubeClient client.Interface, stopChannel <-chan struct{}) ListerRegistry { - allPodLister := NewAllPodLister(kubeClient, stopChannel) - readyNodeLister := NewReadyNodeLister(kubeClient, stopChannel) - allNodeLister := NewAllNodeLister(kubeClient, stopChannel) - podDisruptionBudgetLister := NewPodDisruptionBudgetLister(kubeClient, stopChannel) - daemonSetLister := NewDaemonSetLister(kubeClient, stopChannel) - replicationControllerLister := NewReplicationControllerLister(kubeClient, stopChannel) - jobLister := NewJobLister(kubeClient, stopChannel) - replicaSetLister := NewReplicaSetLister(kubeClient, stopChannel) - statefulSetLister := NewStatefulSetLister(kubeClient, stopChannel) +func NewListerRegistryWithDefaultListers(informerFactory informers.SharedInformerFactory) ListerRegistry { + allPodLister := NewAllPodLister(informerFactory.Core().V1().Pods().Lister()) + readyNodeLister := NewReadyNodeLister(informerFactory.Core().V1().Nodes().Lister()) + allNodeLister := NewAllNodeLister(informerFactory.Core().V1().Nodes().Lister()) + + podDisruptionBudgetLister := NewPodDisruptionBudgetLister(informerFactory.Policy().V1().PodDisruptionBudgets().Lister()) + daemonSetLister := informerFactory.Apps().V1().DaemonSets().Lister() + replicationControllerLister := informerFactory.Core().V1().ReplicationControllers().Lister() + jobLister := informerFactory.Batch().V1().Jobs().Lister() + replicaSetLister := informerFactory.Apps().V1().ReplicaSets().Lister() + statefulSetLister := informerFactory.Apps().V1().StatefulSets().Lister() return NewListerRegistry(allNodeLister, readyNodeLister, allPodLister, podDisruptionBudgetLister, daemonSetLister, replicationControllerLister, jobLister, replicaSetLister, statefulSetLister) @@ -179,20 +179,24 @@ type AllPodLister struct { // List returns all scheduled pods. func (lister *AllPodLister) List() ([]*apiv1.Pod, error) { - return lister.podLister.List(labels.Everything()) + var pods []*apiv1.Pod + + allPods, err := lister.podLister.List(labels.Everything()) + if err != nil { + return pods, err + } + for _, p := range allPods { + if p.Status.Phase != apiv1.PodSucceeded && p.Status.Phase != apiv1.PodFailed { + pods = append(pods, p) + } + } + return pods, nil } // NewAllPodLister builds AllPodLister -func NewAllPodLister(kubeClient client.Interface, stopchannel <-chan struct{}) PodLister { - selector := fields.ParseSelectorOrDie("status.phase!=" + - string(apiv1.PodSucceeded) + ",status.phase!=" + string(apiv1.PodFailed)) - podListWatch := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "pods", apiv1.NamespaceAll, selector) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(podListWatch, &apiv1.Pod{}, time.Hour) - podLister := v1lister.NewPodLister(store) - go reflector.Run(stopchannel) - +func NewAllPodLister(pl v1lister.PodLister) PodLister { return &AllPodLister{ - podLister: podLister, + podLister: pl, } } @@ -208,24 +212,20 @@ type nodeListerImpl struct { filter func(*apiv1.Node) bool } -// NewReadyNodeLister builds a node lister that returns only ready nodes. -func NewReadyNodeLister(kubeClient client.Interface, stopChannel <-chan struct{}) NodeLister { - return NewNodeLister(kubeClient, IsNodeReadyAndSchedulable, stopChannel) +// NewAllNodeLister builds a node lister that returns all nodes (ready and unready). +func NewAllNodeLister(nl v1lister.NodeLister) NodeLister { + return NewNodeLister(nl, nil) } -// NewAllNodeLister builds a node lister that returns all nodes (ready and unready). -func NewAllNodeLister(kubeClient client.Interface, stopChannel <-chan struct{}) NodeLister { - return NewNodeLister(kubeClient, nil, stopChannel) +// NewReadyNodeLister builds a node lister that returns only ready nodes. +func NewReadyNodeLister(nl v1lister.NodeLister) NodeLister { + return NewNodeLister(nl, IsNodeReadyAndSchedulable) } // NewNodeLister builds a node lister. -func NewNodeLister(kubeClient client.Interface, filter func(*apiv1.Node) bool, stopChannel <-chan struct{}) NodeLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "nodes", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &apiv1.Node{}, time.Hour) - nodeLister := v1lister.NewNodeLister(store) - go reflector.Run(stopChannel) +func NewNodeLister(nl v1lister.NodeLister, filter func(*apiv1.Node) bool) NodeLister { return &nodeListerImpl{ - nodeLister: nodeLister, + nodeLister: nl, filter: filter, } } @@ -282,61 +282,12 @@ func (lister *PodDisruptionBudgetListerImpl) List() ([]*policyv1.PodDisruptionBu } // NewPodDisruptionBudgetLister builds a pod disruption budget lister. -func NewPodDisruptionBudgetLister(kubeClient client.Interface, stopchannel <-chan struct{}) PodDisruptionBudgetLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.PolicyV1().RESTClient(), "poddisruptionbudgets", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &policyv1.PodDisruptionBudget{}, time.Hour) - pdbLister := v1policylister.NewPodDisruptionBudgetLister(store) - go reflector.Run(stopchannel) +func NewPodDisruptionBudgetLister(pdbLister v1policylister.PodDisruptionBudgetLister) PodDisruptionBudgetLister { return &PodDisruptionBudgetListerImpl{ pdbLister: pdbLister, } } -// NewDaemonSetLister builds a daemonset lister. -func NewDaemonSetLister(kubeClient client.Interface, stopchannel <-chan struct{}) v1appslister.DaemonSetLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.AppsV1().RESTClient(), "daemonsets", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &appsv1.DaemonSet{}, time.Hour) - lister := v1appslister.NewDaemonSetLister(store) - go reflector.Run(stopchannel) - return lister -} - -// NewReplicationControllerLister builds a replicationcontroller lister. -func NewReplicationControllerLister(kubeClient client.Interface, stopchannel <-chan struct{}) v1lister.ReplicationControllerLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "replicationcontrollers", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &apiv1.ReplicationController{}, time.Hour) - lister := v1lister.NewReplicationControllerLister(store) - go reflector.Run(stopchannel) - return lister -} - -// NewJobLister builds a job lister. -func NewJobLister(kubeClient client.Interface, stopchannel <-chan struct{}) v1batchlister.JobLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.BatchV1().RESTClient(), "jobs", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &batchv1.Job{}, time.Hour) - lister := v1batchlister.NewJobLister(store) - go reflector.Run(stopchannel) - return lister -} - -// NewReplicaSetLister builds a replicaset lister. -func NewReplicaSetLister(kubeClient client.Interface, stopchannel <-chan struct{}) v1appslister.ReplicaSetLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.AppsV1().RESTClient(), "replicasets", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &appsv1.ReplicaSet{}, time.Hour) - lister := v1appslister.NewReplicaSetLister(store) - go reflector.Run(stopchannel) - return lister -} - -// NewStatefulSetLister builds a statefulset lister. -func NewStatefulSetLister(kubeClient client.Interface, stopchannel <-chan struct{}) v1appslister.StatefulSetLister { - listWatcher := cache.NewListWatchFromClient(kubeClient.AppsV1().RESTClient(), "statefulsets", apiv1.NamespaceAll, fields.Everything()) - store, reflector := cache.NewNamespaceKeyedIndexerAndReflector(listWatcher, &appsv1.StatefulSet{}, time.Hour) - lister := v1appslister.NewStatefulSetLister(store) - go reflector.Run(stopchannel) - return lister -} - // NewConfigMapListerForNamespace builds a configmap lister for the passed namespace (including all). func NewConfigMapListerForNamespace(kubeClient client.Interface, stopchannel <-chan struct{}, namespace string) v1lister.ConfigMapLister { From 781b3ac0e382643cc745d844c7976a493507daef Mon Sep 17 00:00:00 2001 From: Ray Wainman Date: Fri, 15 Sep 2023 16:23:15 +0000 Subject: [PATCH 052/125] bump VPA version to 1.0.0 in preparation for release --- vertical-pod-autoscaler/common/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/common/version.go b/vertical-pod-autoscaler/common/version.go index a42564707430..656f835d30dd 100644 --- a/vertical-pod-autoscaler/common/version.go +++ b/vertical-pod-autoscaler/common/version.go @@ -17,4 +17,4 @@ limitations under the License. package common // VerticalPodAutoscalerVersion is the version of VPA. -const VerticalPodAutoscalerVersion = "0.14.0" +const VerticalPodAutoscalerVersion = "1.0.0" From 6cf41290b6b025e089301ce353826fb5b73d588a Mon Sep 17 00:00:00 2001 From: Youn Jae Kim Date: Fri, 15 Sep 2023 14:35:56 -0700 Subject: [PATCH 053/125] add elect-leader flag to the pflag --- cluster-autoscaler/main.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 975094311b44..c7eac74de112 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -550,6 +550,11 @@ func run(healthCheck *metrics.HealthCheck, debuggingSnapshotter debuggingsnapsho func main() { klog.InitFlags(nil) + + leaderElection := defaultLeaderElectionConfiguration() + leaderElection.LeaderElect = true + options.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine) + featureGate := utilfeature.DefaultMutableFeatureGate loggingConfig := logsapi.NewLoggingConfiguration() @@ -567,10 +572,6 @@ func main() { logs.InitLogs() - leaderElection := defaultLeaderElectionConfiguration() - leaderElection.LeaderElect = true - options.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine) - healthCheck := metrics.NewHealthCheck(*maxInactivityTimeFlag, *maxFailingTimeFlag) klog.V(1).Infof("Cluster Autoscaler %s", version.ClusterAutoscalerVersion) From 61d784a662fd5d4a288706d41b0c1ce0aeaceb0b Mon Sep 17 00:00:00 2001 From: Eric Lin Date: Fri, 15 Sep 2023 17:51:21 +0000 Subject: [PATCH 054/125] Allow setting content-type in command Signed-off-by: Eric Lin --- cluster-autoscaler/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 975094311b44..93a23dd8a291 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -101,6 +101,7 @@ var ( address = flag.String("address", ":8085", "The address to expose prometheus metrics.") kubernetes = flag.String("kubernetes", "", "Kubernetes master location. Leave blank for default") kubeConfigFile = flag.String("kubeconfig", "", "Path to kubeconfig file with authorization and master location information.") + kubeAPIContentType = flag.String("kube-api-content-type", "application/vnd.kubernetes.protobuf", "Content type of requests sent to apiserver.") kubeClientBurst = flag.Int("kube-client-burst", rest.DefaultBurst, "Burst value for kubernetes client.") kubeClientQPS = flag.Float64("kube-client-qps", float64(rest.DefaultQPS), "QPS value for kubernetes client.") cloudConfig = flag.String("cloud-config", "", "The path to the cloud provider configuration file. Empty string for no configuration file.") @@ -408,6 +409,8 @@ func getKubeConfig() *rest.Config { klog.Fatalf("Failed to build Kubernetes client configuration: %v", err) } + kubeConfig.ContentType = *kubeAPIContentType + return kubeConfig } From ade5e0814e7313a18058dbaedf37e311d6587b49 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 20 Sep 2023 11:20:35 +0200 Subject: [PATCH 055/125] fix incomplete startup of informers Previously, SharedInformerFactory.Start was called before core.NewAutoscaler. That had the effect that any new informer created as part of core.NewAutoscaler, in particular in kubernetes.NewListerRegistryWithDefaultListers, never got started. One of them was the DaemonSet informer. This had the effect that the DaemonSet lister had an empty cache and scale down failed with: I0920 11:06:36.046889 31805 cluster.go:164] node gke-cluster-pohly-default-pool-c9f60a43-5rvz cannot be removed: daemonset for kube-system/pdcsi-node-7hnmc is not present, err: daemonset.apps "pdcsi-node" not found This was on a GKE cluster with cluster-autoscaler running outside of the cluster on a development machine. --- cluster-autoscaler/main.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 61caae6f5f52..ab21e8f0fae6 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -498,16 +498,23 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter Comparator: nodeInfoComparator, } - stop := make(chan struct{}) - informerFactory.Start(stop) - // These metrics should be published only once. metrics.UpdateNapEnabled(autoscalingOptions.NodeAutoprovisioningEnabled) metrics.UpdateCPULimitsCores(autoscalingOptions.MinCoresTotal, autoscalingOptions.MaxCoresTotal) metrics.UpdateMemoryLimitsBytes(autoscalingOptions.MinMemoryTotal, autoscalingOptions.MaxMemoryTotal) // Create autoscaler. - return core.NewAutoscaler(opts) + autoscaler, err := core.NewAutoscaler(opts) + if err != nil { + return nil, err + } + + // Start informers. This must come after fully constructing the autoscaler because + // additional informers might have been registered in the factory during NewAutoscaler. + stop := make(chan struct{}) + informerFactory.Start(stop) + + return autoscaler, nil } func run(healthCheck *metrics.HealthCheck, debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter) { From 5155725a28189cd1b65f001fcdf90699f5cde909 Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Tue, 19 Sep 2023 08:45:31 -0700 Subject: [PATCH 056/125] Address comments from #6104 --- ...scaling.x-k8s.io_provisioningrequests.yaml | 61 +++++++++++++------ cluster-autoscaler/hack/update-codegen.sh | 4 +- .../proposals/provisioning-request.md | 14 ++--- .../apis/autoscaling.x-k8s.io/v1beta1/doc.go | 0 .../autoscaling.x-k8s.io/v1beta1/register.go | 0 .../autoscaling.x-k8s.io/v1beta1/types.go | 48 +++++++++++---- .../v1beta1/zz_generated.deepcopy.go | 12 ++-- .../autoscaling.x-k8s.io/v1beta1/podset.go | 0 .../v1beta1/provisioningrequest.go | 0 .../v1beta1/provisioningrequestspec.go | 32 +++++----- .../v1beta1/provisioningrequeststatus.go | 19 +++--- .../autoscaling.x-k8s.io/v1beta1/reference.go | 0 .../applyconfiguration/internal/internal.go | 0 .../client/applyconfiguration/utils.go | 4 +- .../client/clientset/versioned/clientset.go | 2 +- .../versioned/fake/clientset_generated.go | 6 +- .../client/clientset/versioned/fake/doc.go | 0 .../clientset/versioned/fake/register.go | 2 +- .../client/clientset/versioned/scheme/doc.go | 0 .../clientset/versioned/scheme/register.go | 2 +- .../v1beta1/autoscaling.x-k8s.io_client.go | 4 +- .../typed/autoscaling.x-k8s.io/v1beta1/doc.go | 0 .../autoscaling.x-k8s.io/v1beta1/fake/doc.go | 0 .../fake/fake_autoscaling.x-k8s.io_client.go | 2 +- .../v1beta1/fake/fake_provisioningrequest.go | 4 +- .../v1beta1/generated_expansion.go | 0 .../v1beta1/provisioningrequest.go | 6 +- .../autoscaling.x-k8s.io/interface.go | 4 +- .../autoscaling.x-k8s.io/v1beta1/interface.go | 2 +- .../v1beta1/provisioningrequest.go | 8 +-- .../informers/externalversions/factory.go | 6 +- .../informers/externalversions/generic.go | 2 +- .../internalinterfaces/factory_interfaces.go | 2 +- .../v1beta1/expansion_generated.go | 0 .../v1beta1/provisioningrequest.go | 2 +- 35 files changed, 151 insertions(+), 97 deletions(-) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/apis/autoscaling.x-k8s.io/v1beta1/doc.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/apis/autoscaling.x-k8s.io/v1beta1/register.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/apis/autoscaling.x-k8s.io/v1beta1/types.go (73%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go (94%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go (62%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go (68%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/internal/internal.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/applyconfiguration/utils.go (94%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/clientset.go (98%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/fake/clientset_generated.go (93%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/fake/doc.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/fake/register.go (97%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/scheme/doc.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/scheme/register.go (97%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go (95%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go (94%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go (98%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go (98%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/autoscaling.x-k8s.io/interface.go (91%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go (95%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go (94%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/factory.go (98%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/generic.go (98%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/informers/externalversions/internalinterfaces/factory_interfaces.go (97%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go (100%) rename cluster-autoscaler/{provisioningrequests => provisioningrequest}/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go (99%) diff --git a/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml b/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml index 443c346cbed1..0f4bbfc20292 100644 --- a/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml +++ b/cluster-autoscaler/config/crd/autoscaling.x-k8s.io_provisioningrequests.yaml @@ -43,13 +43,20 @@ spec: type: object spec: description: 'Spec contains specification of the ProvisioningRequest object. - More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.' + More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + The spec is immutable, to make changes to the request users are expected + to delete an existing and create a new object with the corrected fields.' properties: - additionalParameters: + parameters: additionalProperties: + description: Parameter is limited to 255 characters. + maxLength: 255 type: string - description: AdditionalParameters contains all other parameters custom - classes may require. + description: Parameters contains all other parameters classes may + require. 'atomic-scale-up.kubernetes.io' supports 'ValidUntilSeconds' + parameter, which should contain a string denoting duration for which + we should retry (measured since creation fo the CR). + maxProperties: 100 type: object x-kubernetes-validations: - message: Value is immutable @@ -65,7 +72,6 @@ spec: description: Count contains the number of pods that will be created with a given template. format: int32 - maximum: 16384 minimum: 1 type: integer podTemplateRef: @@ -79,6 +85,8 @@ spec: name: description: 'Name of the referenced object. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names' + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string type: object required: @@ -91,32 +99,38 @@ spec: x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf - provisioningClass: - description: 'ProvisioningClass describes the different modes of provisioning - the resources. Supported values: * check-capacity.kubernetes.io + provisioningClassName: + description: 'ProvisioningClassName describes the different modes + of provisioning the resources. Currently there is no support for + ''ProvisioningClass'' objects. Supported values: * check-capacity.kubernetes.io - check if current cluster state can fullfil this request, do not - reserve the capacity. * atomic-scale-up.kubernetes.io - provision - the resources in an atomic manner * ... - potential other classes - that are specific to the cloud providers' + reserve the capacity. Users should provide a reference to a valid + PodTemplate object. CA will check if there is enough capacity in + cluster to fulfill the request and put the answer in ''CapacityAvailable'' + condition. * atomic-scale-up.kubernetes.io - provision the resources + in an atomic manner. Users should provide a reference to a valid + PodTemplate object. CA will try to create the VMs in an atomic manner, + clean any partially provisioned VMs and re-try the operation in + a exponential back-off manner. Users can configure the timeout duration + after which the request will fail by ''ValidUntilSeconds'' key in + ''Parameters''. CA will set ''Failed=true'' or ''Provisioned=true'' + condition according to the outcome. * ... - potential other classes + that are specific to the cloud providers. ''kubernetes.io'' suffix + is reserved for the modes defined in Kubernetes projects.' + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string x-kubernetes-validations: - message: Value is immutable rule: self == oldSelf required: - podSets - - provisioningClass + - provisioningClassName type: object status: description: Status of the ProvisioningRequest. CA constantly reconciles this field. properties: - additionalStatus: - additionalProperties: - type: string - description: AdditionalStatus contains all other status values custom - provisioning classes may require. - minProperties: 64 - type: object conditions: description: Conditions represent the observations of a Provisioning Request's current state. Those will contain information whether @@ -192,6 +206,15 @@ spec: x-kubernetes-list-map-keys: - type x-kubernetes-list-type: map + provisioningClassDetails: + additionalProperties: + description: Detail is limited to 32768 characters. + maxLength: 32768 + type: string + description: ProvisioningClassDetails contains all other values custom + provisioning classes may want to pass to end users. + maxProperties: 64 + type: object type: object required: - spec diff --git a/cluster-autoscaler/hack/update-codegen.sh b/cluster-autoscaler/hack/update-codegen.sh index 5d19ea638cd2..a716c5b1579b 100755 --- a/cluster-autoscaler/hack/update-codegen.sh +++ b/cluster-autoscaler/hack/update-codegen.sh @@ -30,8 +30,8 @@ chmod +x "${CODEGEN_PKG}"/generate-groups.sh chmod +x "${CODEGEN_PKG}"/generate-internal-groups.sh bash "${CODEGEN_PKG}"/generate-groups.sh "applyconfiguration,client,deepcopy,informer,lister" \ - k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client \ - k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis \ + k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client \ + k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis \ autoscaling.x-k8s.io:v1beta1 \ --go-header-file "${SCRIPT_ROOT}"/../hack/boilerplate/boilerplate.generatego.txt diff --git a/cluster-autoscaler/proposals/provisioning-request.md b/cluster-autoscaler/proposals/provisioning-request.md index c51283cb5fb1..90750c2a2bb0 100644 --- a/cluster-autoscaler/proposals/provisioning-request.md +++ b/cluster-autoscaler/proposals/provisioning-request.md @@ -97,11 +97,11 @@ type ProvisioningRequestSpec struct { // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" ProvisioningClass string `json:"provisioningClass"` - // AdditionalParameters contains all other parameters custom classes may require. + // Parameters contains all other parameters custom classes may require. // // +optional // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" - AdditionalParameters map[string]string `json:"additionalParameters"` + Parameters map[string]string `json:"Parameters"` } type PodSet struct { @@ -142,11 +142,11 @@ type ProvisioningRequestStatus struct { // +optional Conditions []metav1.Condition `json:"conditions"` - // AdditionalStatus contains all other status values custom provisioning classes may require. + // Statuses contains all other status values custom provisioning classes may require. // // +optional // +kubebuilder:validation:MaxItems=64 - AdditionalStatus map[string]string `json:"additionalStatus"` + Statuses map[string]string `json:"statuses"` } ``` @@ -168,7 +168,7 @@ specified pods in an atomic way. The proposed logic is to: 1. Try to provision required VMs in one loop. 2. If it failed, remove the partially provisioned VMs and back-off. 3. Stop the back-off after a given duration (optional), which would be passed - via `AdditionalParameters` field, using `ValidUntilSeconds` key and would contain string + via `Parameters` field, using `ValidUntilSeconds` key and would contain string denoting duration for which we should retry (measured since creation fo the CR). Note: that the VMs created in this mode are subject to the scale-down logic. @@ -318,9 +318,9 @@ type ProvisioningClass struct { // +kubebuilder:validation:Required Name string `json:"name"` - // AdditionalParameters contains all other parameters custom classes may require. + // Parameters contains all other parameters custom classes may require. // // +optional - AdditionalParameters map[string]string `json:"additionalParameters"` + Parameters map[string]string `json:"Parameters"` } ``` diff --git a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/doc.go rename to cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/doc.go diff --git a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/register.go b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/register.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/register.go rename to cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/register.go diff --git a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/types.go similarity index 73% rename from cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go rename to cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/types.go index 68b771907559..4309091c6d6a 100644 --- a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/types.go +++ b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/types.go @@ -46,6 +46,8 @@ type ProvisioningRequest struct { metav1.ObjectMeta `json:"metadata,omitempty"` // Spec contains specification of the ProvisioningRequest object. // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // The spec is immutable, to make changes to the request users are expected to delete an existing + // and create a new object with the corrected fields. // // +kubebuilder:validation:Required Spec ProvisioningRequestSpec `json:"spec"` @@ -81,24 +83,42 @@ type ProvisioningRequestSpec struct { // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" PodSets []PodSet `json:"podSets"` - // ProvisioningClass describes the different modes of provisioning the resources. + // ProvisioningClassName describes the different modes of provisioning the resources. + // Currently there is no support for 'ProvisioningClass' objects. // Supported values: // * check-capacity.kubernetes.io - check if current cluster state can fullfil this request, - // do not reserve the capacity. - // * atomic-scale-up.kubernetes.io - provision the resources in an atomic manner - // * ... - potential other classes that are specific to the cloud providers + // do not reserve the capacity. Users should provide a reference to a valid PodTemplate object. + // CA will check if there is enough capacity in cluster to fulfill the request and put + // the answer in 'CapacityAvailable' condition. + // * atomic-scale-up.kubernetes.io - provision the resources in an atomic manner. + // Users should provide a reference to a valid PodTemplate object. + // CA will try to create the VMs in an atomic manner, clean any partially provisioned VMs + // and re-try the operation in a exponential back-off manner. Users can configure the timeout + // duration after which the request will fail by 'ValidUntilSeconds' key in 'Parameters'. + // CA will set 'Failed=true' or 'Provisioned=true' condition according to the outcome. + // * ... - potential other classes that are specific to the cloud providers. + // 'kubernetes.io' suffix is reserved for the modes defined in Kubernetes projects. // // +kubebuilder:validation:Required // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" - ProvisioningClass string `json:"provisioningClass"` + // +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` + // +kubebuilder:validation:MaxLength=253 + ProvisioningClassName string `json:"provisioningClassName"` - // AdditionalParameters contains all other parameters custom classes may require. + // Parameters contains all other parameters classes may require. + // 'atomic-scale-up.kubernetes.io' supports 'ValidUntilSeconds' parameter, which should contain + // a string denoting duration for which we should retry (measured since creation fo the CR). // // +optional // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" - AdditionalParameters map[string]string `json:"additionalParameters"` + // +kubebuilder:validation:MaxProperties=100 + Parameters map[string]Parameter `json:"parameters"` } +// Parameter is limited to 255 characters. +// +kubebuilder:validation:MaxLength=255 +type Parameter string + // PodSet represents one group of pods for Provisioning Request to provision capacity. type PodSet struct { // PodTemplateRef is a reference to a PodTemplate object that is representing pods @@ -112,7 +132,6 @@ type PodSet struct { // template. // // +kubebuilder:validation:Minimum=1 - // +kubebuilder:validation:Maximum=16384 Count int32 `json:"count"` } @@ -122,6 +141,8 @@ type Reference struct { // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names // // +kubebuilder:validation:Required + // +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$` + // +kubebuilder:validation:MaxLength=253 Name string `json:"name,omitempty"` } @@ -139,13 +160,18 @@ type ProvisioningRequestStatus struct { // +optional Conditions []metav1.Condition `json:"conditions"` - // AdditionalStatus contains all other status values custom provisioning classes may require. + // ProvisioningClassDetails contains all other values custom provisioning classes may + // want to pass to end users. // // +optional - // +kubebuilder:validation:MinProperties=64 - AdditionalStatus map[string]string `json:"additionalStatus"` + // +kubebuilder:validation:MaxProperties=64 + ProvisioningClassDetails map[string]Detail `json:"provisioningClassDetails"` } +// Detail is limited to 32768 characters. +// +kubebuilder:validation:MaxLength=32768 +type Detail string + // The following constants list all currently available Conditions Type values. // See: https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Condition const ( diff --git a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go rename to cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go index 1c68a8ce2171..d34851a169c9 100644 --- a/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1/zz_generated.deepcopy.go @@ -112,9 +112,9 @@ func (in *ProvisioningRequestSpec) DeepCopyInto(out *ProvisioningRequestSpec) { *out = make([]PodSet, len(*in)) copy(*out, *in) } - if in.AdditionalParameters != nil { - in, out := &in.AdditionalParameters, &out.AdditionalParameters - *out = make(map[string]string, len(*in)) + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make(map[string]Parameter, len(*in)) for key, val := range *in { (*out)[key] = val } @@ -142,9 +142,9 @@ func (in *ProvisioningRequestStatus) DeepCopyInto(out *ProvisioningRequestStatus (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.AdditionalStatus != nil { - in, out := &in.AdditionalStatus, &out.AdditionalStatus - *out = make(map[string]string, len(*in)) + if in.ProvisioningClassDetails != nil { + in, out := &in.ProvisioningClassDetails, &out.ProvisioningClassDetails + *out = make(map[string]Detail, len(*in)) for key, val := range *in { (*out)[key] = val } diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/podset.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go similarity index 62% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go index 7a2ae7bc9521..bc4b9566d30a 100644 --- a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go +++ b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequestspec.go @@ -18,12 +18,16 @@ limitations under the License. package v1beta1 +import ( + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" +) + // ProvisioningRequestSpecApplyConfiguration represents an declarative configuration of the ProvisioningRequestSpec type for use // with apply. type ProvisioningRequestSpecApplyConfiguration struct { - PodSets []PodSetApplyConfiguration `json:"podSets,omitempty"` - ProvisioningClass *string `json:"provisioningClass,omitempty"` - AdditionalParameters map[string]string `json:"additionalParameters,omitempty"` + PodSets []PodSetApplyConfiguration `json:"podSets,omitempty"` + ProvisioningClassName *string `json:"provisioningClassName,omitempty"` + Parameters map[string]autoscalingxk8siov1beta1.Parameter `json:"parameters,omitempty"` } // ProvisioningRequestSpecApplyConfiguration constructs an declarative configuration of the ProvisioningRequestSpec type for use with @@ -45,24 +49,24 @@ func (b *ProvisioningRequestSpecApplyConfiguration) WithPodSets(values ...*PodSe return b } -// WithProvisioningClass sets the ProvisioningClass field in the declarative configuration to the given value +// WithProvisioningClassName sets the ProvisioningClassName field in the declarative configuration to the given value // and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ProvisioningClass field is set to the value of the last call. -func (b *ProvisioningRequestSpecApplyConfiguration) WithProvisioningClass(value string) *ProvisioningRequestSpecApplyConfiguration { - b.ProvisioningClass = &value +// If called multiple times, the ProvisioningClassName field is set to the value of the last call. +func (b *ProvisioningRequestSpecApplyConfiguration) WithProvisioningClassName(value string) *ProvisioningRequestSpecApplyConfiguration { + b.ProvisioningClassName = &value return b } -// WithAdditionalParameters puts the entries into the AdditionalParameters field in the declarative configuration +// WithParameters puts the entries into the Parameters field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the AdditionalParameters field, -// overwriting an existing map entries in AdditionalParameters field with the same key. -func (b *ProvisioningRequestSpecApplyConfiguration) WithAdditionalParameters(entries map[string]string) *ProvisioningRequestSpecApplyConfiguration { - if b.AdditionalParameters == nil && len(entries) > 0 { - b.AdditionalParameters = make(map[string]string, len(entries)) +// If called multiple times, the entries provided by each call will be put on the Parameters field, +// overwriting an existing map entries in Parameters field with the same key. +func (b *ProvisioningRequestSpecApplyConfiguration) WithParameters(entries map[string]autoscalingxk8siov1beta1.Parameter) *ProvisioningRequestSpecApplyConfiguration { + if b.Parameters == nil && len(entries) > 0 { + b.Parameters = make(map[string]autoscalingxk8siov1beta1.Parameter, len(entries)) } for k, v := range entries { - b.AdditionalParameters[k] = v + b.Parameters[k] = v } return b } diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go similarity index 68% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go index e9c4d79bb1d1..e8746ecc2f7b 100644 --- a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go +++ b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/provisioningrequeststatus.go @@ -20,13 +20,14 @@ package v1beta1 import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" ) // ProvisioningRequestStatusApplyConfiguration represents an declarative configuration of the ProvisioningRequestStatus type for use // with apply. type ProvisioningRequestStatusApplyConfiguration struct { - Conditions []v1.Condition `json:"conditions,omitempty"` - AdditionalStatus map[string]string `json:"additionalStatus,omitempty"` + Conditions []v1.Condition `json:"conditions,omitempty"` + ProvisioningClassDetails map[string]v1beta1.Detail `json:"provisioningClassDetails,omitempty"` } // ProvisioningRequestStatusApplyConfiguration constructs an declarative configuration of the ProvisioningRequestStatus type for use with @@ -45,16 +46,16 @@ func (b *ProvisioningRequestStatusApplyConfiguration) WithConditions(values ...v return b } -// WithAdditionalStatus puts the entries into the AdditionalStatus field in the declarative configuration +// WithProvisioningClassDetails puts the entries into the ProvisioningClassDetails field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the AdditionalStatus field, -// overwriting an existing map entries in AdditionalStatus field with the same key. -func (b *ProvisioningRequestStatusApplyConfiguration) WithAdditionalStatus(entries map[string]string) *ProvisioningRequestStatusApplyConfiguration { - if b.AdditionalStatus == nil && len(entries) > 0 { - b.AdditionalStatus = make(map[string]string, len(entries)) +// If called multiple times, the entries provided by each call will be put on the ProvisioningClassDetails field, +// overwriting an existing map entries in ProvisioningClassDetails field with the same key. +func (b *ProvisioningRequestStatusApplyConfiguration) WithProvisioningClassDetails(entries map[string]v1beta1.Detail) *ProvisioningRequestStatusApplyConfiguration { + if b.ProvisioningClassDetails == nil && len(entries) > 0 { + b.ProvisioningClassDetails = make(map[string]v1beta1.Detail, len(entries)) } for k, v := range entries { - b.AdditionalStatus[k] = v + b.ProvisioningClassDetails[k] = v } return b } diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1/reference.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/internal/internal.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/internal/internal.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/internal/internal.go diff --git a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/utils.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go rename to cluster-autoscaler/provisioningrequest/client/applyconfiguration/utils.go index bf93c42af3dd..cc1c299a7051 100644 --- a/cluster-autoscaler/provisioningrequests/client/applyconfiguration/utils.go +++ b/cluster-autoscaler/provisioningrequest/client/applyconfiguration/utils.go @@ -20,8 +20,8 @@ package applyconfiguration import ( schema "k8s.io/apimachinery/pkg/runtime/schema" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" - autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" ) // ForKind returns an apply configuration type for the given GroupVersionKind, or nil if no diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/clientset.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/clientset.go index c259ca99590b..c081e28ef99e 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/clientset.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/clientset.go @@ -22,7 +22,7 @@ import ( "fmt" "net/http" - autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" discovery "k8s.io/client-go/discovery" rest "k8s.io/client-go/rest" flowcontrol "k8s.io/client-go/util/flowcontrol" diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/clientset_generated.go similarity index 93% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/clientset_generated.go index 4545dfe2f890..2b733ffca62b 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/clientset_generated.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/clientset_generated.go @@ -21,9 +21,9 @@ package fake import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" - clientset "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" - autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" - fakeautoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake" + clientset "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" + fakeautoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake" "k8s.io/client-go/discovery" fakediscovery "k8s.io/client-go/discovery/fake" "k8s.io/client-go/testing" diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/doc.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/register.go similarity index 97% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/register.go index e189af6733b3..e21a07104c0a 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/fake/register.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/fake/register.go @@ -24,7 +24,7 @@ import ( schema "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" ) var scheme = runtime.NewScheme() diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/doc.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme/register.go similarity index 97% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme/register.go index 85d4b7cd320f..3defe5bb3368 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme/register.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme/register.go @@ -24,7 +24,7 @@ import ( schema "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingv1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" ) var Scheme = runtime.NewScheme() diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go similarity index 95% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go index a2ad84f3a260..95af8c0ea0eb 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/autoscaling.x-k8s.io_client.go @@ -21,8 +21,8 @@ package v1beta1 import ( "net/http" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" - "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" + "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme" rest "k8s.io/client-go/rest" ) diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/doc.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go index 7edb82b655fb..89365e84c337 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_autoscaling.x-k8s.io_client.go @@ -19,7 +19,7 @@ limitations under the License. package fake import ( - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1" rest "k8s.io/client-go/rest" testing "k8s.io/client-go/testing" ) diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go index d9d2f0b8d573..e1dc7262f2fa 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/fake/fake_provisioningrequest.go @@ -27,8 +27,8 @@ import ( labels "k8s.io/apimachinery/pkg/labels" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" - autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" testing "k8s.io/client-go/testing" ) diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/generated_expansion.go diff --git a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index 75d49f3501e0..b14e8c7f820b 100644 --- a/cluster-autoscaler/provisioningrequests/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequest/client/clientset/versioned/typed/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -27,9 +27,9 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" - autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" - scheme "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned/scheme" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/applyconfiguration/autoscaling.x-k8s.io/v1beta1" + scheme "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned/scheme" rest "k8s.io/client-go/rest" ) diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/interface.go similarity index 91% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/interface.go index 3aa0dc88f35c..5e943f6a06bb 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/interface.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/interface.go @@ -19,8 +19,8 @@ limitations under the License. package autoscaling import ( - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1" - internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces" ) // Interface provides access to each of this group's versions. diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go similarity index 95% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go index 139a610cd738..cefcfe5baa22 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/interface.go @@ -19,7 +19,7 @@ limitations under the License. package v1beta1 import ( - internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces" ) // Interface provides access to all the informers in this group version. diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 94% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index 68d0bc47e877..382cb5d03051 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -25,10 +25,10 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" watch "k8s.io/apimachinery/pkg/watch" - autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" - versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" - internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1" + autoscalingxk8siov1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1" cache "k8s.io/client-go/tools/cache" ) diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/factory.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/factory.go index 655f84990f4d..fcd0d06ce139 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/factory.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/factory.go @@ -26,9 +26,9 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" - versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" - autoscalingxk8sio "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/autoscaling.x-k8s.io" - internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned" + autoscalingxk8sio "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/autoscaling.x-k8s.io" + internalinterfaces "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces" cache "k8s.io/client-go/tools/cache" ) diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/generic.go similarity index 98% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/generic.go index 3e74dfcfdf75..bc3f61b718aa 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/generic.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/generic.go @@ -22,7 +22,7 @@ import ( "fmt" schema "k8s.io/apimachinery/pkg/runtime/schema" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" cache "k8s.io/client-go/tools/cache" ) diff --git a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces/factory_interfaces.go similarity index 97% rename from cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go rename to cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces/factory_interfaces.go index df4d9f19e91f..e77b74203cc9 100644 --- a/cluster-autoscaler/provisioningrequests/client/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/cluster-autoscaler/provisioningrequest/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -23,7 +23,7 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" - versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/client/clientset/versioned" + versioned "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/client/clientset/versioned" cache "k8s.io/client-go/tools/cache" ) diff --git a/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go b/cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go similarity index 100% rename from cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go rename to cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1/expansion_generated.go diff --git a/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go b/cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go similarity index 99% rename from cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go rename to cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go index 2ef882d33d0d..7737e1a5ccfa 100644 --- a/cluster-autoscaler/provisioningrequests/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go +++ b/cluster-autoscaler/provisioningrequest/client/listers/autoscaling.x-k8s.io/v1beta1/provisioningrequest.go @@ -21,7 +21,7 @@ package v1beta1 import ( "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" - v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequests/apis/autoscaling.x-k8s.io/v1beta1" + v1beta1 "k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/apis/autoscaling.x-k8s.io/v1beta1" "k8s.io/client-go/tools/cache" ) From f8103a4c9c22f97834d58ce863ee9adf7f45aee1 Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Thu, 21 Sep 2023 15:11:29 -0700 Subject: [PATCH 057/125] cluster-autoscaler Azure: update cloud-provider-azure to v1.28.0 Signed-off-by: Jack Francis --- .../cloudprovider/azure/azure_agent_pool.go | 2 +- .../azure/azure_agent_pool_test.go | 2 +- .../cloudprovider/azure/azure_cache.go | 2 +- .../azure/azure_cloud_provider_test.go | 2 +- .../cloudprovider/azure/azure_fakes.go | 2 +- .../cloudprovider/azure/azure_instance.go | 2 +- .../azure_kubernetes_service_pool_test.go | 2 +- .../cloudprovider/azure/azure_manager_test.go | 4 +- .../cloudprovider/azure/azure_scale_set.go | 17 +- .../azure/azure_scale_set_test.go | 14 +- .../cloudprovider/azure/azure_template.go | 2 +- .../cloudprovider/azure/azure_util.go | 2 +- .../cloudprovider/azure/azure_util_test.go | 2 +- cluster-autoscaler/go.mod | 22 +- cluster-autoscaler/go.sum | 39 +- .../mgmt/2022-08-01/compute}/CHANGELOG.md | 0 .../mgmt/2022-08-01/compute/_meta.json | 11 + .../2022-08-01/compute/availabilitysets.go | 652 + .../compute/capacityreservationgroups.go | 596 + .../compute/capacityreservations.go | 493 + .../compute/mgmt/2022-08-01/compute/client.go | 43 + .../compute/cloudserviceoperatingsystems.go | 422 + .../compute/cloudserviceroleinstances.go | 715 + .../2022-08-01/compute/cloudserviceroles.go | 229 + .../mgmt/2022-08-01/compute/cloudservices.go | 1198 + .../compute/cloudservicesupdatedomain.go | 319 + .../2022-08-01/compute/communitygalleries.go | 108 + .../compute/communitygalleryimages.go | 228 + .../compute/communitygalleryimageversions.go | 234 + .../2022-08-01/compute/dedicatedhostgroups.go | 589 + .../mgmt/2022-08-01/compute/dedicatedhosts.go | 575 + .../mgmt/2022-08-01/compute/diskaccesses.go | 1045 + .../2022-08-01/compute/diskencryptionsets.go | 719 + .../2022-08-01/compute/diskrestorepoint.go | 407 + .../compute/mgmt/2022-08-01/compute/disks.go | 774 + .../compute/mgmt/2022-08-01/compute/enums.go | 2248 ++ .../mgmt/2022-08-01/compute/galleries.go | 588 + .../2022-08-01/compute/galleryapplications.go | 485 + .../compute/galleryapplicationversions.go | 516 + .../mgmt/2022-08-01/compute/galleryimages.go | 492 + .../compute/galleryimageversions.go | 503 + .../compute/gallerysharingprofile.go | 114 + .../compute/mgmt/2022-08-01/compute/images.go | 583 + .../mgmt/2022-08-01/compute/loganalytics.go | 206 + .../compute/mgmt/2022-08-01/compute/models.go | 24333 ++++++++++++++++ .../mgmt/2022-08-01/compute/operations.go | 98 + .../compute/proximityplacementgroups.go | 575 + .../mgmt/2022-08-01/compute/resourceskus.go | 153 + .../compute/restorepointcollections.go | 582 + .../mgmt/2022-08-01/compute/restorepoints.go | 302 + .../2022-08-01/compute/sharedgalleries.go | 227 + .../2022-08-01/compute/sharedgalleryimages.go | 233 + .../compute/sharedgalleryimageversions.go | 240 + .../mgmt/2022-08-01/compute/snapshots.go | 777 + .../mgmt/2022-08-01/compute/sshpublickeys.go | 649 + .../compute/mgmt/2022-08-01/compute/usage.go | 155 + .../mgmt/2022-08-01/compute/version.go | 19 + .../compute/virtualmachineextensionimages.go | 270 + .../compute/virtualmachineextensions.go | 454 + .../compute/virtualmachineimages.go | 508 + .../compute/virtualmachineimagesedgezone.go | 445 + .../compute/virtualmachineruncommands.go | 689 + .../2022-08-01/compute/virtualmachines.go | 2205 ++ .../virtualmachinescalesetextensions.go | 495 + .../virtualmachinescalesetrollingupgrades.go | 346 + .../compute/virtualmachinescalesets.go | 2170 ++ .../virtualmachinescalesetvmextensions.go | 469 + .../virtualmachinescalesetvmruncommands.go | 495 + .../compute/virtualmachinescalesetvms.go | 1430 + .../2022-08-01/compute/virtualmachinesizes.go | 113 + .../mgmt/2022-07-01/network/CHANGELOG.md | 2 + .../network/_meta.json | 8 +- .../network/adminrulecollections.go | 431 + .../mgmt/2022-07-01/network/adminrules.go | 430 + ...cationgatewayprivateendpointconnections.go | 8 +- .../applicationgatewayprivatelinkresources.go | 2 +- .../network/applicationgateways.go | 34 +- .../applicationgatewaywafdynamicmanifests.go | 149 + ...cationgatewaywafdynamicmanifestsdefault.go | 107 + .../network/applicationsecuritygroups.go | 12 +- .../network/availabledelegations.go | 2 +- .../network/availableendpointservices.go | 2 +- .../network/availableprivateendpointtypes.go | 4 +- .../availableresourcegroupdelegations.go | 2 +- .../network/availableservicealiases.go | 4 +- .../network/azurefirewallfqdntags.go | 2 +- .../network/azurefirewalls.go | 91 +- .../network/bastionhosts.go | 12 +- .../network/bgpservicecommunities.go | 2 +- .../network/client.go | 466 +- .../network/configurationpolicygroups.go | 8 +- .../network/connectionmonitors.go | 16 +- .../network/connectivityconfigurations.go | 426 + .../network/customipprefixes.go | 12 +- .../network/ddoscustompolicies.go | 8 +- .../network/ddosprotectionplans.go | 12 +- .../network/defaultsecurityrules.go | 4 +- .../network/dscpconfiguration.go | 10 +- .../network/enums.go | 1660 +- .../expressroutecircuitauthorizations.go | 8 +- .../network/expressroutecircuitconnections.go | 8 +- .../network/expressroutecircuitpeerings.go | 8 +- .../network/expressroutecircuits.go | 22 +- .../network/expressrouteconnections.go | 8 +- .../expressroutecrossconnectionpeerings.go | 8 +- .../network/expressroutecrossconnections.go | 16 +- .../network/expressroutegateways.go | 12 +- .../network/expressroutelinks.go | 4 +- .../network/expressrouteportauthorizations.go | 8 +- .../network/expressrouteports.go | 14 +- .../network/expressrouteportslocations.go | 4 +- .../expressrouteproviderportslocation.go | 109 + .../network/expressrouteserviceproviders.go | 2 +- .../network/firewallpolicies.go | 32 +- .../network/firewallpolicyidpssignatures.go | 2 +- ...irewallpolicyidpssignaturesfiltervalues.go | 2 +- .../firewallpolicyidpssignaturesoverrides.go | 8 +- .../firewallpolicyrulecollectiongroups.go | 8 +- .../network/flowlogs.go | 10 +- .../network/mgmt/2022-07-01/network/groups.go | 421 + .../network/hubroutetables.go | 8 +- .../network/hubvirtualnetworkconnections.go | 8 +- .../network/inboundnatrules.go | 8 +- .../network/inboundsecurityrule.go | 2 +- .../network/interfaceipconfigurations.go | 4 +- .../network/interfaceloadbalancers.go | 2 +- .../network/interfacesgroup.go | 32 +- .../network/interfacetapconfigurations.go | 8 +- .../network/ipallocations.go | 12 +- .../network/ipgroups.go | 12 +- .../loadbalancerbackendaddresspools.go | 8 +- .../loadbalancerfrontendipconfigurations.go | 4 +- .../network/loadbalancerloadbalancingrules.go | 4 +- .../network/loadbalancernetworkinterfaces.go | 2 +- .../network/loadbalanceroutboundrules.go | 4 +- .../network/loadbalancerprobes.go | 4 +- .../network/loadbalancers.go | 16 +- .../network/localnetworkgateways.go | 10 +- ...anagementgroupnetworkmanagerconnections.go | 397 + .../mgmt/2022-07-01/network/managercommits.go | 121 + .../network/managerdeploymentstatus.go | 126 + .../mgmt/2022-07-01/network/managers.go | 630 + .../network/models.go | 10330 +++++-- .../network/natgateways.go | 12 +- .../network/natrules.go | 8 +- .../network/operations.go | 2 +- .../network/p2svpngateways.go | 22 +- .../network/packetcaptures.go | 12 +- .../peerexpressroutecircuitconnections.go | 4 +- .../network/privatednszonegroups.go | 8 +- .../network/privateendpoints.go | 10 +- .../network/privatelinkservices.go | 26 +- .../network/profiles.go | 12 +- .../network/publicipaddresses.go | 103 +- .../network/publicipprefixes.go | 12 +- .../network/resourcenavigationlinks.go | 2 +- .../network/routefilterrules.go | 8 +- .../network/routefilters.go | 12 +- .../mgmt/2022-07-01/network/routemaps.go | 394 + .../network/routes.go | 8 +- .../network/routetables.go | 12 +- .../network/routingintent.go | 8 +- .../2022-07-01/network/scopeconnections.go | 408 + .../network/securityadminconfigurations.go | 416 + .../network/securitygroups.go | 12 +- .../network/securitypartnerproviders.go | 12 +- .../network/securityrules.go | 8 +- .../network/serviceassociationlinks.go | 2 +- .../network/serviceendpointpolicies.go | 12 +- .../serviceendpointpolicydefinitions.go | 8 +- .../network/servicetaginformation.go | 2 +- .../network/servicetags.go | 2 +- .../mgmt/2022-07-01/network/staticmembers.go | 415 + .../network/subnets.go | 12 +- .../subscriptionnetworkmanagerconnections.go | 393 + .../network/usages.go | 2 +- .../network/version.go | 2 +- .../mgmt/2022-07-01/network/vipswap.go | 272 + .../network/virtualappliances.go | 12 +- .../network/virtualappliancesites.go | 8 +- .../network/virtualapplianceskus.go | 4 +- .../network/virtualhubbgpconnection.go | 6 +- .../network/virtualhubbgpconnections.go | 6 +- .../network/virtualhubipconfiguration.go | 8 +- .../network/virtualhubroutetablev2s.go | 8 +- .../network/virtualhubs.go | 180 +- .../virtualnetworkgatewayconnections.go | 24 +- .../network/virtualnetworkgatewaynatrules.go | 8 +- .../network/virtualnetworkgateways.go | 44 +- .../network/virtualnetworkpeerings.go | 8 +- .../network/virtualnetworks.go | 144 +- .../network/virtualnetworktaps.go | 12 +- .../network/virtualrouterpeerings.go | 8 +- .../network/virtualrouters.go | 10 +- .../network/virtualwans.go | 12 +- .../network/vpnconnections.go | 12 +- .../network/vpngateways.go | 18 +- .../network/vpnlinkconnections.go | 6 +- .../network/vpnserverconfigurations.go | 12 +- ...rconfigurationsassociatedwithvirtualwan.go | 2 +- .../network/vpnsitelinkconnections.go | 2 +- .../network/vpnsitelinks.go | 4 +- .../network/vpnsites.go | 12 +- .../network/vpnsitesconfiguration.go | 2 +- .../network/watchers.go | 36 +- .../network/webapplicationfirewallpolicies.go | 16 +- .../network/webcategories.go | 4 +- .../github.com/onsi/ginkgo/v2/CHANGELOG.md | 54 + .../v2/ginkgo/generators/generate_command.go | 5 + .../ginkgo/generators/generate_templates.go | 6 +- .../v2/ginkgo/generators/generators_common.go | 12 + .../onsi/ginkgo/v2/internal/focus.go | 71 +- .../onsi/ginkgo/v2/internal/node.go | 9 + .../onsi/ginkgo/v2/internal/ordering.go | 51 +- .../onsi/ginkgo/v2/internal/suite.go | 2 + .../onsi/ginkgo/v2/reporters/json_report.go | 13 +- .../onsi/ginkgo/v2/reporters/junit_report.go | 7 + .../ginkgo/v2/reporters/teamcity_report.go | 4 + .../onsi/ginkgo/v2/types/version.go | 2 +- .../vendor/github.com/onsi/gomega/.gitignore | 2 +- .../github.com/onsi/gomega/CHANGELOG.md | 43 + .../github.com/onsi/gomega/format/format.go | 4 +- .../github.com/onsi/gomega/gomega_dsl.go | 2 +- .../vendor/github.com/onsi/gomega/matchers.go | 6 +- .../onsi/gomega/matchers/be_a_directory.go | 2 +- .../onsi/gomega/matchers/be_a_regular_file.go | 2 +- .../gomega/matchers/be_an_existing_file.go | 4 +- .../gomega/matchers/have_exact_elements.go | 7 +- .../testify/assert/assertion_compare.go | 36 +- .../testify/assert/assertion_format.go | 216 +- .../testify/assert/assertion_forward.go | 432 +- .../testify/assert/assertion_order.go | 24 +- .../stretchr/testify/assert/assertions.go | 306 +- .../github.com/stretchr/testify/assert/doc.go | 43 +- .../testify/assert/http_assertions.go | 12 +- .../github.com/stretchr/testify/mock/doc.go | 30 +- .../github.com/stretchr/testify/mock/mock.go | 160 +- .../stretchr/testify/require/doc.go | 23 +- .../stretchr/testify/require/require.go | 444 +- .../testify/require/require_forward.go | 432 +- .../github.com/stretchr/testify/suite/doc.go | 59 +- .../vendor/golang.org/x/sys/unix/mkerrors.sh | 2 +- .../golang.org/x/sys/unix/mmap_nomremap.go | 14 + .../vendor/golang.org/x/sys/unix/mremap.go | 21 +- .../golang.org/x/sys/unix/syscall_aix.go | 15 - .../golang.org/x/sys/unix/syscall_bsd.go | 14 - .../golang.org/x/sys/unix/syscall_darwin.go | 50 +- .../golang.org/x/sys/unix/syscall_linux.go | 63 +- .../x/sys/unix/syscall_linux_amd64.go | 2 +- .../x/sys/unix/syscall_linux_arm64.go | 2 +- .../x/sys/unix/syscall_linux_loong64.go | 2 +- .../x/sys/unix/syscall_linux_mips64x.go | 2 +- .../x/sys/unix/syscall_linux_riscv64.go | 13 +- .../golang.org/x/sys/unix/syscall_netbsd.go | 13 +- .../golang.org/x/sys/unix/syscall_solaris.go | 14 - .../golang.org/x/sys/unix/syscall_unix.go | 8 + .../x/sys/unix/syscall_zos_s390x.go | 14 - .../x/sys/unix/zerrors_linux_386.go | 9 + .../x/sys/unix/zerrors_linux_amd64.go | 9 + .../x/sys/unix/zerrors_linux_arm.go | 9 + .../x/sys/unix/zerrors_linux_arm64.go | 9 + .../x/sys/unix/zerrors_linux_loong64.go | 9 + .../x/sys/unix/zerrors_linux_mips.go | 9 + .../x/sys/unix/zerrors_linux_mips64.go | 9 + .../x/sys/unix/zerrors_linux_mips64le.go | 9 + .../x/sys/unix/zerrors_linux_mipsle.go | 9 + .../x/sys/unix/zerrors_linux_ppc.go | 9 + .../x/sys/unix/zerrors_linux_ppc64.go | 9 + .../x/sys/unix/zerrors_linux_ppc64le.go | 9 + .../x/sys/unix/zerrors_linux_riscv64.go | 9 + .../x/sys/unix/zerrors_linux_s390x.go | 9 + .../x/sys/unix/zerrors_linux_sparc64.go | 9 + .../golang.org/x/sys/unix/zsyscall_linux.go | 2 +- .../x/sys/unix/zsyscall_linux_riscv64.go | 16 + .../x/sys/unix/zsyscall_netbsd_386.go | 11 + .../x/sys/unix/zsyscall_netbsd_amd64.go | 11 + .../x/sys/unix/zsyscall_netbsd_arm.go | 11 + .../x/sys/unix/zsyscall_netbsd_arm64.go | 11 + .../x/sys/unix/zsysnum_linux_riscv64.go | 2 + .../golang.org/x/sys/unix/ztypes_linux.go | 5 + .../x/sys/unix/ztypes_linux_riscv64.go | 23 + .../x/sys/windows/syscall_windows.go | 4 +- .../golang.org/x/text/language/match.go | 2 +- .../x/tools/go/gcexportdata/gcexportdata.go | 11 +- .../golang.org/x/tools/go/packages/golist.go | 23 +- .../x/tools/go/packages/packages.go | 3 + .../x/tools/go/types/objectpath/objectpath.go | 762 - .../x/tools/internal/event/tag/tag.go | 59 + .../x/tools/internal/gcimporter/bexport.go | 852 - .../x/tools/internal/gcimporter/bimport.go | 907 +- .../x/tools/internal/gcimporter/gcimporter.go | 15 +- .../x/tools/internal/gcimporter/iexport.go | 19 + .../x/tools/internal/gcimporter/iimport.go | 9 +- .../tools/internal/gcimporter/ureader_yes.go | 9 + .../x/tools/internal/gocommand/invoke.go | 146 +- .../x/tools/internal/gocommand/version.go | 18 +- .../x/tools/internal/imports/fix.go | 40 +- .../x/tools/internal/imports/imports.go | 9 +- .../x/tools/internal/imports/mod.go | 4 + .../x/tools/internal/typesinternal/types.go | 9 - cluster-autoscaler/vendor/modules.txt | 32 +- .../azureclients/armclient/azure_armclient.go | 64 +- .../pkg/azureclients/armclient/util.go | 10 +- .../blobclient/azure_blobclient.go | 45 +- .../pkg/azureclients/blobclient/interface.go | 2 + .../azure_containerserviceclient.go | 8 +- .../azure_deploymentclient.go | 8 +- .../diskclient/azure_diskclient.go | 10 +- .../pkg/azureclients/diskclient/interface.go | 4 +- .../diskclient/mockdiskclient/interface.go | 2 +- .../fileclient/azure_fileclient.go | 4 +- .../interfaceclient/azure_interfaceclient.go | 8 +- .../azureclients/interfaceclient/interface.go | 4 +- .../mockinterfaceclient/interface.go | 2 +- .../azure_loadbalancerclient.go | 134 +- .../loadbalancerclient/interface.go | 10 +- .../mockloadbalancerclient/interface.go | 31 +- .../azure_privatednszonegroupclient.go | 2 +- .../privatednszonegroupclient/interface.go | 4 +- .../azure_privateendpointclient.go | 2 +- .../privateendpointclient/interface.go | 4 +- .../azure_privatelinkserviceclient.go | 10 +- .../privatelinkserviceclient/interface.go | 4 +- .../mockprivatelinkserviceclient/interface.go | 2 +- .../publicipclient/azure_publicipclient.go | 12 +- .../azureclients/publicipclient/interface.go | 4 +- .../mockpublicipclient/interface.go | 2 +- .../routeclient/azure_routeclient.go | 2 +- .../pkg/azureclients/routeclient/interface.go | 4 +- .../routeclient/mockrouteclient/interface.go | 2 +- .../azure_routetableclient.go | 2 +- .../routetableclient/interface.go | 4 +- .../mockroutetableclient/interface.go | 2 +- .../azure_securitygroupclient.go | 10 +- .../securitygroupclient/interface.go | 4 +- .../mocksecuritygroupclient/interface.go | 2 +- .../snapshotclient/azure_snapshotclient.go | 10 +- .../azureclients/snapshotclient/interface.go | 2 +- .../mocksnapshotclient/interface.go | 2 +- .../azure_storageaccountclient.go | 8 +- .../subnetclient/azure_subnetclient.go | 10 +- .../azureclients/subnetclient/interface.go | 4 +- .../mocksubnetclient/interface.go | 2 +- .../vmasclient/azure_vmasclient.go | 10 +- .../pkg/azureclients/vmasclient/interface.go | 2 +- .../azureclients/vmclient/azure_vmclient.go | 55 +- .../pkg/azureclients/vmclient/interface.go | 6 +- .../vmclient/mockvmclient/interface.go | 16 +- .../vmsizeclient/azure_vmsizeclient.go | 2 +- .../azureclients/vmsizeclient/interface.go | 2 +- .../vmssclient/azure_vmssclient.go | 10 +- .../pkg/azureclients/vmssclient/interface.go | 2 +- .../vmssclient/mockvmssclient/interface.go | 2 +- .../vmssvmclient/azure_vmssvmclient.go | 10 +- .../azureclients/vmssvmclient/interface.go | 2 +- .../mockvmssvmclient/interface.go | 2 +- .../pkg/cache/azure_cache.go | 105 +- .../cloud-provider-azure/pkg/consts/consts.go | 63 +- .../pkg/consts/helpers.go | 33 +- .../pkg/nodemanager/nodemanager.go | 753 - .../pkg/provider/azure.go | 349 +- .../pkg/provider/azure_backoff.go | 624 - .../pkg/provider/azure_controller_common.go | 190 +- .../pkg/provider/azure_controller_standard.go | 82 +- .../pkg/provider/azure_controller_vmss.go | 117 +- .../pkg/provider/azure_controller_vmssflex.go | 104 +- .../pkg/provider/azure_fakes.go | 13 +- .../pkg/provider/azure_instance_metadata.go | 55 +- .../pkg/provider/azure_instances.go | 34 +- .../pkg/provider/azure_interface_repo.go | 39 + .../pkg/provider/azure_loadbalancer.go | 2608 +- .../azure_loadbalancer_backendpool.go | 646 +- .../azure_loadbalancer_healthprobe.go | 271 + .../pkg/provider/azure_loadbalancer_repo.go | 389 + .../pkg/provider/azure_local_services.go | 546 + .../provider/azure_managedDiskController.go | 48 +- .../azure_mock_loadbalancer_backendpool.go | 68 +- .../pkg/provider/azure_mock_vmsets.go | 40 +- .../pkg/provider/azure_privatelinkservice.go | 109 +- .../provider/azure_privatelinkservice_repo.go | 142 + .../pkg/provider/azure_publicip_repo.go | 227 + .../pkg/provider/azure_routes.go | 141 +- .../pkg/provider/azure_routetable_repo.go | 84 + .../pkg/provider/azure_securitygroup_repo.go | 105 + .../pkg/provider/azure_standard.go | 410 +- .../pkg/provider/azure_storage.go | 4 +- .../pkg/provider/azure_storageaccount.go | 460 +- .../pkg/provider/azure_subnet_repo.go | 68 + .../pkg/provider/azure_utils.go | 362 +- .../pkg/provider/azure_vmsets.go | 11 +- .../pkg/provider/azure_vmsets_repo.go | 193 + .../pkg/provider/azure_vmss.go | 499 +- .../pkg/provider/azure_vmss_cache.go | 212 +- .../pkg/provider/azure_vmss_repo.go | 55 + .../pkg/provider/azure_vmssflex.go | 232 +- .../pkg/provider/azure_vmssflex_cache.go | 56 +- .../pkg/provider/azure_wrap.go | 344 - .../pkg/provider/azure_zones.go | 13 +- .../pkg/provider/config/azure_auth.go | 26 + .../provider/virtualmachine/virtualmachine.go | 53 +- .../pkg/retry/azure_error.go | 26 +- 401 files changed, 79676 insertions(+), 11163 deletions(-) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/{network/mgmt/2021-08-01/network => compute/mgmt/2022-08-01/compute}/CHANGELOG.md (100%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/_meta.json create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/availabilitysets.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservationgroups.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservations.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/client.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceoperatingsystems.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroleinstances.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroles.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservices.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservicesupdatedomain.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleries.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimages.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimageversions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhostgroups.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhosts.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskaccesses.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskencryptionsets.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskrestorepoint.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/disks.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/enums.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleries.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplications.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplicationversions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimages.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimageversions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/gallerysharingprofile.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/images.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/loganalytics.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/models.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/operations.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/proximityplacementgroups.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/resourceskus.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepointcollections.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepoints.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleries.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimages.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimageversions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/snapshots.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sshpublickeys.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/usage.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/version.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensionimages.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimages.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimagesedgezone.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineruncommands.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachines.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetextensions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetrollingupgrades.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesets.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmextensions.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmruncommands.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvms.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinesizes.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/CHANGELOG.md rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/_meta.json (56%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrulecollections.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrules.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/applicationgatewayprivateendpointconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/applicationgatewayprivatelinkresources.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/applicationgateways.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifests.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifestsdefault.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/applicationsecuritygroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/availabledelegations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/availableendpointservices.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/availableprivateendpointtypes.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/availableresourcegroupdelegations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/availableservicealiases.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/azurefirewallfqdntags.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/azurefirewalls.go (86%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/bastionhosts.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/bgpservicecommunities.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/client.go (63%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/configurationpolicygroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/connectionmonitors.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectivityconfigurations.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/customipprefixes.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/ddoscustompolicies.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/ddosprotectionplans.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/defaultsecurityrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/dscpconfiguration.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/enums.go (69%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecircuitauthorizations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecircuitconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecircuitpeerings.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecircuits.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressrouteconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecrossconnectionpeerings.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutecrossconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutegateways.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressroutelinks.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressrouteportauthorizations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressrouteports.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressrouteportslocations.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteproviderportslocation.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/expressrouteserviceproviders.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/firewallpolicies.go (95%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/firewallpolicyidpssignatures.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/firewallpolicyidpssignaturesfiltervalues.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/firewallpolicyidpssignaturesoverrides.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/firewallpolicyrulecollectiongroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/flowlogs.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/groups.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/hubroutetables.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/hubvirtualnetworkconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/inboundnatrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/inboundsecurityrule.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/interfaceipconfigurations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/interfaceloadbalancers.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/interfacesgroup.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/interfacetapconfigurations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/ipallocations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/ipgroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancerbackendaddresspools.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancerfrontendipconfigurations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancerloadbalancingrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancernetworkinterfaces.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalanceroutboundrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancerprobes.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/loadbalancers.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/localnetworkgateways.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managementgroupnetworkmanagerconnections.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managercommits.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managerdeploymentstatus.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managers.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/models.go (89%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/natgateways.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/natrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/operations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/p2svpngateways.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/packetcaptures.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/peerexpressroutecircuitconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/privatednszonegroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/privateendpoints.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/privatelinkservices.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/profiles.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/publicipaddresses.go (93%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/publicipprefixes.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/resourcenavigationlinks.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/routefilterrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/routefilters.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routemaps.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/routes.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/routetables.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/routingintent.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/scopeconnections.go create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityadminconfigurations.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/securitygroups.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/securitypartnerproviders.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/securityrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/serviceassociationlinks.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/serviceendpointpolicies.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/serviceendpointpolicydefinitions.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/servicetaginformation.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/servicetags.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/staticmembers.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/subnets.go (99%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subscriptionnetworkmanagerconnections.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/usages.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/version.go (90%) create mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vipswap.go rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualappliances.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualappliancesites.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualapplianceskus.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualhubbgpconnection.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualhubbgpconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualhubipconfiguration.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualhubroutetablev2s.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualhubs.go (77%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworkgatewayconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworkgatewaynatrules.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworkgateways.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworkpeerings.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworks.go (83%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualnetworktaps.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualrouterpeerings.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualrouters.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/virtualwans.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpngateways.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnlinkconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnserverconfigurations.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnserverconfigurationsassociatedwithvirtualwan.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnsitelinkconnections.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnsitelinks.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnsites.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/vpnsitesconfiguration.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/watchers.go (99%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/webapplicationfirewallpolicies.go (95%) rename cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/{2021-08-01 => 2022-07-01}/network/webcategories.go (99%) create mode 100644 cluster-autoscaler/vendor/golang.org/x/sys/unix/mmap_nomremap.go delete mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go create mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/event/tag/tag.go delete mode 100644 cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bexport.go delete mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/nodemanager/nodemanager.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_interface_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_healthprobe.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_local_services.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_publicip_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routetable_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_securitygroup_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_subnet_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets_repo.go create mode 100644 cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_repo.go diff --git a/cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go b/cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go index 1b7f1e08291e..f8d60aa99968 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go @@ -24,7 +24,7 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" azStorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/Azure/go-autorest/autorest/to" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_agent_pool_test.go b/cluster-autoscaler/cloudprovider/azure/azure_agent_pool_test.go index 5a553ec9c2ec..7890cdde72ef 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_agent_pool_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_agent_pool_test.go @@ -30,7 +30,7 @@ import ( "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient" "sigs.k8s.io/cloud-provider-azure/pkg/retry" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage" "github.com/Azure/go-autorest/autorest/date" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_cache.go b/cluster-autoscaler/cloudprovider/azure/azure_cache.go index b8277238a5db..5c70f52d2ba6 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_cache.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_cache.go @@ -24,7 +24,7 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/to" "github.com/Azure/skewer" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider_test.go index 6c3a26d7bb94..ff9d02749058 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_cloud_provider_test.go @@ -19,7 +19,7 @@ package azure import ( "testing" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" "github.com/Azure/go-autorest/autorest/to" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_fakes.go b/cluster-autoscaler/cloudprovider/azure/azure_fakes.go index c7aec2ad7ffb..481fcaacf837 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_fakes.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_fakes.go @@ -22,7 +22,7 @@ import ( "net/http" "sync" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" "github.com/stretchr/testify/mock" ) diff --git a/cluster-autoscaler/cloudprovider/azure/azure_instance.go b/cluster-autoscaler/cloudprovider/azure/azure_instance.go index 620fe3025594..9a04c441b51f 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_instance.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_instance.go @@ -22,7 +22,7 @@ import ( "regexp" "strings" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "k8s.io/klog/v2" ) diff --git a/cluster-autoscaler/cloudprovider/azure/azure_kubernetes_service_pool_test.go b/cluster-autoscaler/cloudprovider/azure/azure_kubernetes_service_pool_test.go index 355fd995deb8..419cae024b87 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_kubernetes_service_pool_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_kubernetes_service_pool_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2021-10-01/containerservice" "github.com/Azure/go-autorest/autorest/to" "github.com/golang/mock/gomock" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go b/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go index 130d79bae08b..be92d31d2427 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go @@ -25,7 +25,7 @@ import ( "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" "github.com/Azure/go-autorest/autorest/date" "github.com/Azure/go-autorest/autorest/to" @@ -450,6 +450,8 @@ func TestCreateAzureManagerWithNilConfig(t *testing.T) { t.Run("environment variables correctly set", func(t *testing.T) { manager, err := createAzureManagerInternal(nil, cloudprovider.NodeGroupDiscoveryOptions{}, mockAzClient) assert.NoError(t, err) + manager.config.TenantID = "tenantId" + manager.config.AADClientID = "aadClientId" assert.Equal(t, true, reflect.DeepEqual(*expectedConfig, *manager.config), "unexpected azure manager configuration") }) diff --git a/cluster-autoscaler/cloudprovider/azure/azure_scale_set.go b/cluster-autoscaler/cloudprovider/azure/azure_scale_set.go index 3b7978c5868b..f0b2e83f07e8 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_scale_set.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_scale_set.go @@ -31,7 +31,7 @@ import ( schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" "sigs.k8s.io/cloud-provider-azure/pkg/retry" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" ) @@ -41,6 +41,15 @@ var ( vmssSizeMutex sync.Mutex ) +const ( + provisioningStateCreating string = "Creating" + provisioningStateDeleting string = "Deleting" + provisioningStateFailed string = "Failed" + provisioningStateMigrating string = "Migrating" + provisioningStateSucceeded string = "Succeeded" + provisioningStateUpdating string = "Updating" +) + // ScaleSet implements NodeGroup interface. type ScaleSet struct { azureRef @@ -683,11 +692,11 @@ func instanceStatusFromProvisioningStateAndPowerState(resourceId string, provisi status := &cloudprovider.InstanceStatus{} switch *provisioningState { - case string(compute.ProvisioningStateDeleting): + case provisioningStateDeleting: status.State = cloudprovider.InstanceDeleting - case string(compute.ProvisioningStateCreating): + case provisioningStateCreating: status.State = cloudprovider.InstanceCreating - case string(compute.ProvisioningStateFailed): + case provisioningStateFailed: // Provisioning can fail both during instance creation or after the instance is running. // Per https://learn.microsoft.com/en-us/azure/virtual-machines/states-billing#provisioning-states, // ProvisioningState represents the most recent provisioning state, therefore only report diff --git a/cluster-autoscaler/cloudprovider/azure/azure_scale_set_test.go b/cluster-autoscaler/cloudprovider/azure/azure_scale_set_test.go index 0f14a75a5b93..cd7c7d56b772 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_scale_set_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_scale_set_test.go @@ -21,7 +21,7 @@ import ( "net/http" "testing" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/to" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -257,7 +257,7 @@ func TestIncreaseSizeOnVMProvisioningFailed(t *testing.T) { expectedScaleSets := newTestVMSSList(3, "vmss-failed-upscale", "eastus", compute.Uniform) expectedVMSSVMs := newTestVMSSVMList(3) - expectedVMSSVMs[2].ProvisioningState = to.StringPtr(string(compute.ProvisioningStateFailed)) + expectedVMSSVMs[2].ProvisioningState = to.StringPtr(provisioningStateFailed) if !testCase.isMissingInstanceView { expectedVMSSVMs[2].InstanceView = &compute.VirtualMachineScaleSetVMInstanceView{Statuses: &testCase.statuses} } @@ -314,7 +314,7 @@ func TestIncreaseSizeOnVMSSUpdating(t *testing.T) { Capacity: &vmssCapacity, }, VirtualMachineScaleSetProperties: &compute.VirtualMachineScaleSetProperties{ - ProvisioningState: to.StringPtr(string(compute.ProvisioningStateUpdating)), + ProvisioningState: to.StringPtr(provisioningStateUpdating), OrchestrationMode: compute.Uniform, }, }, @@ -472,12 +472,12 @@ func TestDeleteNodes(t *testing.T) { mockVMSSClient.EXPECT().List(gomock.Any(), manager.config.ResourceGroup).Return(expectedScaleSets, nil).AnyTimes() if orchMode == compute.Uniform { - expectedVMSSVMs[0].ProvisioningState = to.StringPtr(string(compute.ProvisioningStateDeleting)) - expectedVMSSVMs[2].ProvisioningState = to.StringPtr(string(compute.ProvisioningStateDeleting)) + expectedVMSSVMs[0].ProvisioningState = to.StringPtr(provisioningStateDeleting) + expectedVMSSVMs[2].ProvisioningState = to.StringPtr(provisioningStateDeleting) mockVMSSVMClient.EXPECT().List(gomock.Any(), manager.config.ResourceGroup, "test-asg", gomock.Any()).Return(expectedVMSSVMs, nil).AnyTimes() } else { - expectedVMs[0].ProvisioningState = to.StringPtr(string(compute.ProvisioningStateDeleting)) - expectedVMs[2].ProvisioningState = to.StringPtr(string(compute.ProvisioningStateDeleting)) + expectedVMs[0].ProvisioningState = to.StringPtr(provisioningStateDeleting) + expectedVMs[2].ProvisioningState = to.StringPtr(provisioningStateDeleting) mockVMClient.EXPECT().ListVmssFlexVMsWithoutInstanceView(gomock.Any(), "test-asg").Return(expectedVMs, nil).AnyTimes() } diff --git a/cluster-autoscaler/cloudprovider/azure/azure_template.go b/cluster-autoscaler/cloudprovider/azure/azure_template.go index 3e49df3a0c29..719762078fed 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_template.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_template.go @@ -24,7 +24,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_util.go b/cluster-autoscaler/cloudprovider/azure/azure_util.go index 5a389b738c63..86eb8ba87bef 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_util.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_util.go @@ -31,7 +31,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" azStorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/to" diff --git a/cluster-autoscaler/cloudprovider/azure/azure_util_test.go b/cluster-autoscaler/cloudprovider/azure/azure_util_test.go index 2a5be51d851d..d4c030394e80 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_util_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_util_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/stretchr/testify/assert" "sigs.k8s.io/cloud-provider-azure/pkg/retry" diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index ebce7228babf..2059823dd270 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -23,17 +23,17 @@ require ( github.com/google/uuid v1.3.0 github.com/jmespath/go-jmespath v0.4.0 github.com/json-iterator/go v1.1.12 - github.com/onsi/ginkgo/v2 v2.9.4 - github.com/onsi/gomega v1.27.6 + github.com/onsi/ginkgo/v2 v2.11.0 + github.com/onsi/gomega v1.27.10 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 github.com/satori/go.uuid v1.2.0 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.2 - golang.org/x/crypto v0.11.0 + github.com/stretchr/testify v1.8.4 + golang.org/x/crypto v0.12.0 golang.org/x/net v0.13.0 golang.org/x/oauth2 v0.8.0 - golang.org/x/sys v0.10.0 + golang.org/x/sys v0.11.0 google.golang.org/api v0.114.0 google.golang.org/grpc v1.54.0 google.golang.org/protobuf v1.30.0 @@ -53,7 +53,8 @@ require ( k8s.io/kubernetes v1.28.0 k8s.io/legacy-cloud-providers v0.0.0 k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 - sigs.k8s.io/cloud-provider-azure v1.26.2 + sigs.k8s.io/cloud-provider-azure v1.28.0 + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 sigs.k8s.io/yaml v1.3.0 ) @@ -170,11 +171,11 @@ require ( go.uber.org/zap v1.24.0 // indirect golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.8.0 // indirect + golang.org/x/tools v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 // indirect @@ -196,7 +197,6 @@ require ( k8s.io/mount-utils v0.26.0-alpha.0 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) replace github.com/aws/aws-sdk-go/service/eks => github.com/aws/aws-sdk-go/service/eks v1.38.49 diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 5b230755bd16..0a84af857efe 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -487,10 +487,10 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= -github.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM= -github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= -github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= @@ -599,8 +599,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -695,8 +696,8 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -821,8 +822,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -896,15 +897,15 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -917,8 +918,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -982,8 +983,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1240,8 +1241,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 h1:trsWhjU5jZrx6UvFu4WzQDrN7Pga4a7Qg+zcfcj64PA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= -sigs.k8s.io/cloud-provider-azure v1.26.2 h1://Yr95O53fcY/sakPvXdekCW4o2QKhfs1kNtipR7LpE= -sigs.k8s.io/cloud-provider-azure v1.26.2/go.mod h1:9m8BqB9ubr94uWWgbIY8TyUmHhsE2UEKdAZZG8O/ymc= +sigs.k8s.io/cloud-provider-azure v1.28.0 h1:LkvvDQ2u0rCr1lhFBoyjvKhYazhpYnAohOqQKN060H8= +sigs.k8s.io/cloud-provider-azure v1.28.0/go.mod h1:ubvg4F58jePO4Z7C4XfgJkFFGpqhVeogpzOdc1X4dyk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/CHANGELOG.md similarity index 100% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/CHANGELOG.md rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/CHANGELOG.md diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/_meta.json b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/_meta.json new file mode 100644 index 000000000000..2af6e17d27a5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/_meta.json @@ -0,0 +1,11 @@ +{ + "commit": "dad644cc6d0c88991f291eda37e18f27c16739b2", + "readme": "/_/azure-rest-api-specs/specification/compute/resource-manager/readme.md", + "tag": "package-2022-08-01", + "use": "@microsoft.azure/autorest.go@2.1.188", + "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", + "autorest_command": "autorest --use=@microsoft.azure/autorest.go@2.1.188 --tag=package-2022-08-01 --go-sdk-folder=/_/azure-sdk-for-go --go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --debug /_/azure-rest-api-specs/specification/compute/resource-manager/readme.md", + "additional_properties": { + "additional_options": "--go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --debug" + } +} \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/availabilitysets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/availabilitysets.go new file mode 100644 index 000000000000..90fce14e0039 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/availabilitysets.go @@ -0,0 +1,652 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// AvailabilitySetsClient is the compute Client +type AvailabilitySetsClient struct { + BaseClient +} + +// NewAvailabilitySetsClient creates an instance of the AvailabilitySetsClient client. +func NewAvailabilitySetsClient(subscriptionID string) AvailabilitySetsClient { + return NewAvailabilitySetsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewAvailabilitySetsClientWithBaseURI creates an instance of the AvailabilitySetsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewAvailabilitySetsClientWithBaseURI(baseURI string, subscriptionID string) AvailabilitySetsClient { + return AvailabilitySetsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update an availability set. +// Parameters: +// resourceGroupName - the name of the resource group. +// availabilitySetName - the name of the availability set. +// parameters - parameters supplied to the Create Availability Set operation. +func (client AvailabilitySetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySet) (result AvailabilitySet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, availabilitySetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client AvailabilitySetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySet) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "availabilitySetName": autorest.Encode("path", availabilitySetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) CreateOrUpdateResponder(resp *http.Response) (result AvailabilitySet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete an availability set. +// Parameters: +// resourceGroupName - the name of the resource group. +// availabilitySetName - the name of the availability set. +func (client AvailabilitySetsClient) Delete(ctx context.Context, resourceGroupName string, availabilitySetName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, availabilitySetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client AvailabilitySetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "availabilitySetName": autorest.Encode("path", availabilitySetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about an availability set. +// Parameters: +// resourceGroupName - the name of the resource group. +// availabilitySetName - the name of the availability set. +func (client AvailabilitySetsClient) Get(ctx context.Context, resourceGroupName string, availabilitySetName string) (result AvailabilitySet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, availabilitySetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client AvailabilitySetsClient) GetPreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "availabilitySetName": autorest.Encode("path", availabilitySetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) GetResponder(resp *http.Response) (result AvailabilitySet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all availability sets in a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client AvailabilitySetsClient) List(ctx context.Context, resourceGroupName string) (result AvailabilitySetListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.List") + defer func() { + sc := -1 + if result.aslr.Response.Response != nil { + sc = result.aslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.aslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", resp, "Failure sending request") + return + } + + result.aslr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", resp, "Failure responding to request") + return + } + if result.aslr.hasNextLink() && result.aslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client AvailabilitySetsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) ListResponder(resp *http.Response) (result AvailabilitySetListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client AvailabilitySetsClient) listNextResults(ctx context.Context, lastResults AvailabilitySetListResult) (result AvailabilitySetListResult, err error) { + req, err := lastResults.availabilitySetListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client AvailabilitySetsClient) ListComplete(ctx context.Context, resourceGroupName string) (result AvailabilitySetListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName) + return +} + +// ListAvailableSizes lists all available virtual machine sizes that can be used to create a new virtual machine in an +// existing availability set. +// Parameters: +// resourceGroupName - the name of the resource group. +// availabilitySetName - the name of the availability set. +func (client AvailabilitySetsClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, availabilitySetName string) (result VirtualMachineSizeListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListAvailableSizes") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListAvailableSizesPreparer(ctx, resourceGroupName, availabilitySetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", nil, "Failure preparing request") + return + } + + resp, err := client.ListAvailableSizesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", resp, "Failure sending request") + return + } + + result, err = client.ListAvailableSizesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", resp, "Failure responding to request") + return + } + + return +} + +// ListAvailableSizesPreparer prepares the ListAvailableSizes request. +func (client AvailabilitySetsClient) ListAvailableSizesPreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "availabilitySetName": autorest.Encode("path", availabilitySetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAvailableSizesSender sends the ListAvailableSizes request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) ListAvailableSizesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAvailableSizesResponder handles the response to the ListAvailableSizes request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) ListAvailableSizesResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListBySubscription lists all availability sets in a subscription. +// Parameters: +// expand - the expand expression to apply to the operation. Allowed values are 'instanceView'. +func (client AvailabilitySetsClient) ListBySubscription(ctx context.Context, expand string) (result AvailabilitySetListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListBySubscription") + defer func() { + sc := -1 + if result.aslr.Response.Response != nil { + sc = result.aslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.aslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.aslr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.aslr.hasNextLink() && result.aslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client AvailabilitySetsClient) ListBySubscriptionPreparer(ctx context.Context, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/availabilitySets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) ListBySubscriptionResponder(resp *http.Response) (result AvailabilitySetListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client AvailabilitySetsClient) listBySubscriptionNextResults(ctx context.Context, lastResults AvailabilitySetListResult) (result AvailabilitySetListResult, err error) { + req, err := lastResults.availabilitySetListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client AvailabilitySetsClient) ListBySubscriptionComplete(ctx context.Context, expand string) (result AvailabilitySetListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx, expand) + return +} + +// Update update an availability set. +// Parameters: +// resourceGroupName - the name of the resource group. +// availabilitySetName - the name of the availability set. +// parameters - parameters supplied to the Update Availability Set operation. +func (client AvailabilitySetsClient) Update(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySetUpdate) (result AvailabilitySet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, availabilitySetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client AvailabilitySetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySetUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "availabilitySetName": autorest.Encode("path", availabilitySetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client AvailabilitySetsClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client AvailabilitySetsClient) UpdateResponder(resp *http.Response) (result AvailabilitySet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservationgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservationgroups.go new file mode 100644 index 000000000000..b8d398016584 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservationgroups.go @@ -0,0 +1,596 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CapacityReservationGroupsClient is the compute Client +type CapacityReservationGroupsClient struct { + BaseClient +} + +// NewCapacityReservationGroupsClient creates an instance of the CapacityReservationGroupsClient client. +func NewCapacityReservationGroupsClient(subscriptionID string) CapacityReservationGroupsClient { + return NewCapacityReservationGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCapacityReservationGroupsClientWithBaseURI creates an instance of the CapacityReservationGroupsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewCapacityReservationGroupsClientWithBaseURI(baseURI string, subscriptionID string) CapacityReservationGroupsClient { + return CapacityReservationGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update a capacity reservation group. When updating a capacity reservation +// group, only tags may be modified. Please refer to https://aka.ms/CapacityReservation for more details. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// parameters - parameters supplied to the Create capacity reservation Group. +func (client CapacityReservationGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroup) (result CapacityReservationGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client CapacityReservationGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroup) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result CapacityReservationGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete a capacity reservation group. This operation is allowed only if all the associated +// resources are disassociated from the reservation group and all capacity reservations under the reservation group +// have also been deleted. Please refer to https://aka.ms/CapacityReservation for more details. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +func (client CapacityReservationGroupsClient) Delete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, capacityReservationGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client CapacityReservationGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation that retrieves information about a capacity reservation group. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance +// views of the capacity reservations under the capacity reservation group which is a snapshot of the runtime +// properties of a capacity reservation that is managed by the platform and can change outside of control plane +// operations. +func (client CapacityReservationGroupsClient) Get(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, expand CapacityReservationGroupInstanceViewTypes) (result CapacityReservationGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, capacityReservationGroupName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CapacityReservationGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, expand CapacityReservationGroupInstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) GetResponder(resp *http.Response) (result CapacityReservationGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByResourceGroup lists all of the capacity reservation groups in the specified resource group. Use the nextLink +// property in the response to get the next page of capacity reservation groups. +// Parameters: +// resourceGroupName - the name of the resource group. +// expand - the expand expression to apply on the operation. Based on the expand param(s) specified we return +// Virtual Machine or ScaleSet VM Instance or both resource Ids which are associated to capacity reservation +// group in the response. +func (client CapacityReservationGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.crglr.Response.Response != nil { + sc = result.crglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.crglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.crglr, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.crglr.hasNextLink() && result.crglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client CapacityReservationGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result CapacityReservationGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client CapacityReservationGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults CapacityReservationGroupListResult) (result CapacityReservationGroupListResult, err error) { + req, err := lastResults.capacityReservationGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client CapacityReservationGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName, expand) + return +} + +// ListBySubscription lists all of the capacity reservation groups in the subscription. Use the nextLink property in +// the response to get the next page of capacity reservation groups. +// Parameters: +// expand - the expand expression to apply on the operation. Based on the expand param(s) specified we return +// Virtual Machine or ScaleSet VM Instance or both resource Ids which are associated to capacity reservation +// group in the response. +func (client CapacityReservationGroupsClient) ListBySubscription(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.crglr.Response.Response != nil { + sc = result.crglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.crglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.crglr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.crglr.hasNextLink() && result.crglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client CapacityReservationGroupsClient) ListBySubscriptionPreparer(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/capacityReservationGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result CapacityReservationGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client CapacityReservationGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults CapacityReservationGroupListResult) (result CapacityReservationGroupListResult, err error) { + req, err := lastResults.capacityReservationGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client CapacityReservationGroupsClient) ListBySubscriptionComplete(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx, expand) + return +} + +// Update the operation to update a capacity reservation group. When updating a capacity reservation group, only tags +// may be modified. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// parameters - parameters supplied to the Update capacity reservation Group operation. +func (client CapacityReservationGroupsClient) Update(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroupUpdate) (result CapacityReservationGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client CapacityReservationGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroupUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client CapacityReservationGroupsClient) UpdateResponder(resp *http.Response) (result CapacityReservationGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservations.go new file mode 100644 index 000000000000..d8f7e2ca2d2a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/capacityreservations.go @@ -0,0 +1,493 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CapacityReservationsClient is the compute Client +type CapacityReservationsClient struct { + BaseClient +} + +// NewCapacityReservationsClient creates an instance of the CapacityReservationsClient client. +func NewCapacityReservationsClient(subscriptionID string) CapacityReservationsClient { + return NewCapacityReservationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCapacityReservationsClientWithBaseURI creates an instance of the CapacityReservationsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewCapacityReservationsClientWithBaseURI(baseURI string, subscriptionID string) CapacityReservationsClient { + return CapacityReservationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update a capacity reservation. Please note some properties can be set only +// during capacity reservation creation. Please refer to https://aka.ms/CapacityReservation for more details. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// capacityReservationName - the name of the capacity reservation. +// parameters - parameters supplied to the Create capacity reservation. +func (client CapacityReservationsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservation) (result CapacityReservationsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.Sku", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.CapacityReservationsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client CapacityReservationsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservation) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "capacityReservationName": autorest.Encode("path", capacityReservationName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationsClient) CreateOrUpdateSender(req *http.Request) (future CapacityReservationsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client CapacityReservationsClient) CreateOrUpdateResponder(resp *http.Response) (result CapacityReservation, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete a capacity reservation. This operation is allowed only when all the associated +// resources are disassociated from the capacity reservation. Please refer to https://aka.ms/CapacityReservation for +// more details. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// capacityReservationName - the name of the capacity reservation. +func (client CapacityReservationsClient) Delete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string) (result CapacityReservationsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client CapacityReservationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "capacityReservationName": autorest.Encode("path", capacityReservationName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationsClient) DeleteSender(req *http.Request) (future CapacityReservationsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client CapacityReservationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation that retrieves information about the capacity reservation. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// capacityReservationName - the name of the capacity reservation. +// expand - the expand expression to apply on the operation. 'InstanceView' retrieves a snapshot of the runtime +// properties of the capacity reservation that is managed by the platform and can change outside of control +// plane operations. +func (client CapacityReservationsClient) Get(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, expand CapacityReservationInstanceViewTypes) (result CapacityReservation, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CapacityReservationsClient) GetPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, expand CapacityReservationInstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "capacityReservationName": autorest.Encode("path", capacityReservationName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CapacityReservationsClient) GetResponder(resp *http.Response) (result CapacityReservation, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByCapacityReservationGroup lists all of the capacity reservations in the specified capacity reservation group. +// Use the nextLink property in the response to get the next page of capacity reservations. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +func (client CapacityReservationsClient) ListByCapacityReservationGroup(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result CapacityReservationListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.ListByCapacityReservationGroup") + defer func() { + sc := -1 + if result.crlr.Response.Response != nil { + sc = result.crlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByCapacityReservationGroupNextResults + req, err := client.ListByCapacityReservationGroupPreparer(ctx, resourceGroupName, capacityReservationGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByCapacityReservationGroupSender(req) + if err != nil { + result.crlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", resp, "Failure sending request") + return + } + + result.crlr, err = client.ListByCapacityReservationGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", resp, "Failure responding to request") + return + } + if result.crlr.hasNextLink() && result.crlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByCapacityReservationGroupPreparer prepares the ListByCapacityReservationGroup request. +func (client CapacityReservationsClient) ListByCapacityReservationGroupPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByCapacityReservationGroupSender sends the ListByCapacityReservationGroup request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationsClient) ListByCapacityReservationGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByCapacityReservationGroupResponder handles the response to the ListByCapacityReservationGroup request. The method always +// closes the http.Response Body. +func (client CapacityReservationsClient) ListByCapacityReservationGroupResponder(resp *http.Response) (result CapacityReservationListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByCapacityReservationGroupNextResults retrieves the next set of results, if any. +func (client CapacityReservationsClient) listByCapacityReservationGroupNextResults(ctx context.Context, lastResults CapacityReservationListResult) (result CapacityReservationListResult, err error) { + req, err := lastResults.capacityReservationListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByCapacityReservationGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByCapacityReservationGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByCapacityReservationGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client CapacityReservationsClient) ListByCapacityReservationGroupComplete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result CapacityReservationListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.ListByCapacityReservationGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByCapacityReservationGroup(ctx, resourceGroupName, capacityReservationGroupName) + return +} + +// Update the operation to update a capacity reservation. +// Parameters: +// resourceGroupName - the name of the resource group. +// capacityReservationGroupName - the name of the capacity reservation group. +// capacityReservationName - the name of the capacity reservation. +// parameters - parameters supplied to the Update capacity reservation operation. +func (client CapacityReservationsClient) Update(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservationUpdate) (result CapacityReservationsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client CapacityReservationsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservationUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), + "capacityReservationName": autorest.Encode("path", capacityReservationName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client CapacityReservationsClient) UpdateSender(req *http.Request) (future CapacityReservationsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client CapacityReservationsClient) UpdateResponder(resp *http.Response) (result CapacityReservation, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/client.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/client.go new file mode 100644 index 000000000000..c7c4543154d5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/client.go @@ -0,0 +1,43 @@ +// Deprecated: Please note, this package has been deprecated. A replacement package is available [github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute). We strongly encourage you to upgrade to continue receiving updates. See [Migration Guide](https://aka.ms/azsdk/golang/t2/migration) for guidance on upgrading. Refer to our [deprecation policy](https://azure.github.io/azure-sdk/policies_support.html) for more details. +// +// Package compute implements the Azure ARM Compute service API version . +// +// Compute Client +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "github.com/Azure/go-autorest/autorest" +) + +const ( + // DefaultBaseURI is the default URI used for the service Compute + DefaultBaseURI = "https://management.azure.com" +) + +// BaseClient is the base client for Compute. +type BaseClient struct { + autorest.Client + BaseURI string + SubscriptionID string +} + +// New creates an instance of the BaseClient client. +func New(subscriptionID string) BaseClient { + return NewWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewWithBaseURI creates an instance of the BaseClient client using a custom endpoint. Use this when interacting with +// an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewWithBaseURI(baseURI string, subscriptionID string) BaseClient { + return BaseClient{ + Client: autorest.NewClientWithUserAgent(UserAgent()), + BaseURI: baseURI, + SubscriptionID: subscriptionID, + } +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceoperatingsystems.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceoperatingsystems.go new file mode 100644 index 000000000000..31ee54e5f533 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceoperatingsystems.go @@ -0,0 +1,422 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CloudServiceOperatingSystemsClient is the compute Client +type CloudServiceOperatingSystemsClient struct { + BaseClient +} + +// NewCloudServiceOperatingSystemsClient creates an instance of the CloudServiceOperatingSystemsClient client. +func NewCloudServiceOperatingSystemsClient(subscriptionID string) CloudServiceOperatingSystemsClient { + return NewCloudServiceOperatingSystemsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCloudServiceOperatingSystemsClientWithBaseURI creates an instance of the CloudServiceOperatingSystemsClient +// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI +// (sovereign clouds, Azure stack). +func NewCloudServiceOperatingSystemsClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceOperatingSystemsClient { + return CloudServiceOperatingSystemsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// GetOSFamily gets properties of a guest operating system family that can be specified in the XML service +// configuration (.cscfg) for a cloud service. +// Parameters: +// location - name of the location that the OS family pertains to. +// osFamilyName - name of the OS family. +func (client CloudServiceOperatingSystemsClient) GetOSFamily(ctx context.Context, location string, osFamilyName string) (result OSFamily, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.GetOSFamily") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetOSFamilyPreparer(ctx, location, osFamilyName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", nil, "Failure preparing request") + return + } + + resp, err := client.GetOSFamilySender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", resp, "Failure sending request") + return + } + + result, err = client.GetOSFamilyResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", resp, "Failure responding to request") + return + } + + return +} + +// GetOSFamilyPreparer prepares the GetOSFamily request. +func (client CloudServiceOperatingSystemsClient) GetOSFamilyPreparer(ctx context.Context, location string, osFamilyName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "osFamilyName": autorest.Encode("path", osFamilyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies/{osFamilyName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetOSFamilySender sends the GetOSFamily request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceOperatingSystemsClient) GetOSFamilySender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetOSFamilyResponder handles the response to the GetOSFamily request. The method always +// closes the http.Response Body. +func (client CloudServiceOperatingSystemsClient) GetOSFamilyResponder(resp *http.Response) (result OSFamily, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetOSVersion gets properties of a guest operating system version that can be specified in the XML service +// configuration (.cscfg) for a cloud service. +// Parameters: +// location - name of the location that the OS version pertains to. +// osVersionName - name of the OS version. +func (client CloudServiceOperatingSystemsClient) GetOSVersion(ctx context.Context, location string, osVersionName string) (result OSVersion, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.GetOSVersion") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetOSVersionPreparer(ctx, location, osVersionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", nil, "Failure preparing request") + return + } + + resp, err := client.GetOSVersionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", resp, "Failure sending request") + return + } + + result, err = client.GetOSVersionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", resp, "Failure responding to request") + return + } + + return +} + +// GetOSVersionPreparer prepares the GetOSVersion request. +func (client CloudServiceOperatingSystemsClient) GetOSVersionPreparer(ctx context.Context, location string, osVersionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "osVersionName": autorest.Encode("path", osVersionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions/{osVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetOSVersionSender sends the GetOSVersion request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceOperatingSystemsClient) GetOSVersionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetOSVersionResponder handles the response to the GetOSVersion request. The method always +// closes the http.Response Body. +func (client CloudServiceOperatingSystemsClient) GetOSVersionResponder(resp *http.Response) (result OSVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListOSFamilies gets a list of all guest operating system families available to be specified in the XML service +// configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next page of OS +// Families. Do this till nextLink is null to fetch all the OS Families. +// Parameters: +// location - name of the location that the OS families pertain to. +func (client CloudServiceOperatingSystemsClient) ListOSFamilies(ctx context.Context, location string) (result OSFamilyListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSFamilies") + defer func() { + sc := -1 + if result.oflr.Response.Response != nil { + sc = result.oflr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listOSFamiliesNextResults + req, err := client.ListOSFamiliesPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", nil, "Failure preparing request") + return + } + + resp, err := client.ListOSFamiliesSender(req) + if err != nil { + result.oflr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", resp, "Failure sending request") + return + } + + result.oflr, err = client.ListOSFamiliesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", resp, "Failure responding to request") + return + } + if result.oflr.hasNextLink() && result.oflr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListOSFamiliesPreparer prepares the ListOSFamilies request. +func (client CloudServiceOperatingSystemsClient) ListOSFamiliesPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListOSFamiliesSender sends the ListOSFamilies request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceOperatingSystemsClient) ListOSFamiliesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListOSFamiliesResponder handles the response to the ListOSFamilies request. The method always +// closes the http.Response Body. +func (client CloudServiceOperatingSystemsClient) ListOSFamiliesResponder(resp *http.Response) (result OSFamilyListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listOSFamiliesNextResults retrieves the next set of results, if any. +func (client CloudServiceOperatingSystemsClient) listOSFamiliesNextResults(ctx context.Context, lastResults OSFamilyListResult) (result OSFamilyListResult, err error) { + req, err := lastResults.oSFamilyListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListOSFamiliesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", resp, "Failure sending next results request") + } + result, err = client.ListOSFamiliesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListOSFamiliesComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServiceOperatingSystemsClient) ListOSFamiliesComplete(ctx context.Context, location string) (result OSFamilyListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSFamilies") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListOSFamilies(ctx, location) + return +} + +// ListOSVersions gets a list of all guest operating system versions available to be specified in the XML service +// configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next page of OS +// versions. Do this till nextLink is null to fetch all the OS versions. +// Parameters: +// location - name of the location that the OS versions pertain to. +func (client CloudServiceOperatingSystemsClient) ListOSVersions(ctx context.Context, location string) (result OSVersionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSVersions") + defer func() { + sc := -1 + if result.ovlr.Response.Response != nil { + sc = result.ovlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listOSVersionsNextResults + req, err := client.ListOSVersionsPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", nil, "Failure preparing request") + return + } + + resp, err := client.ListOSVersionsSender(req) + if err != nil { + result.ovlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", resp, "Failure sending request") + return + } + + result.ovlr, err = client.ListOSVersionsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", resp, "Failure responding to request") + return + } + if result.ovlr.hasNextLink() && result.ovlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListOSVersionsPreparer prepares the ListOSVersions request. +func (client CloudServiceOperatingSystemsClient) ListOSVersionsPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListOSVersionsSender sends the ListOSVersions request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceOperatingSystemsClient) ListOSVersionsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListOSVersionsResponder handles the response to the ListOSVersions request. The method always +// closes the http.Response Body. +func (client CloudServiceOperatingSystemsClient) ListOSVersionsResponder(resp *http.Response) (result OSVersionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listOSVersionsNextResults retrieves the next set of results, if any. +func (client CloudServiceOperatingSystemsClient) listOSVersionsNextResults(ctx context.Context, lastResults OSVersionListResult) (result OSVersionListResult, err error) { + req, err := lastResults.oSVersionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListOSVersionsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", resp, "Failure sending next results request") + } + result, err = client.ListOSVersionsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListOSVersionsComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServiceOperatingSystemsClient) ListOSVersionsComplete(ctx context.Context, location string) (result OSVersionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSVersions") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListOSVersions(ctx, location) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroleinstances.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroleinstances.go new file mode 100644 index 000000000000..f29213d9f510 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroleinstances.go @@ -0,0 +1,715 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CloudServiceRoleInstancesClient is the compute Client +type CloudServiceRoleInstancesClient struct { + BaseClient +} + +// NewCloudServiceRoleInstancesClient creates an instance of the CloudServiceRoleInstancesClient client. +func NewCloudServiceRoleInstancesClient(subscriptionID string) CloudServiceRoleInstancesClient { + return NewCloudServiceRoleInstancesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCloudServiceRoleInstancesClientWithBaseURI creates an instance of the CloudServiceRoleInstancesClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewCloudServiceRoleInstancesClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceRoleInstancesClient { + return CloudServiceRoleInstancesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Delete deletes a role instance from a cloud service. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) Delete(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client CloudServiceRoleInstancesClient) DeletePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) DeleteSender(req *http.Request) (future CloudServiceRoleInstancesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets a role instance from a cloud service. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// expand - the expand expression to apply to the operation. 'UserData' is not supported for cloud services. +func (client CloudServiceRoleInstancesClient) Get(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstance, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CloudServiceRoleInstancesClient) GetPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) GetResponder(resp *http.Response) (result RoleInstance, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetInstanceView retrieves information about the run-time state of a role instance in a cloud service. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) GetInstanceView(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result RoleInstanceInstanceView, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.GetInstanceView") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetInstanceViewPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", nil, "Failure preparing request") + return + } + + resp, err := client.GetInstanceViewSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", resp, "Failure sending request") + return + } + + result, err = client.GetInstanceViewResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", resp, "Failure responding to request") + return + } + + return +} + +// GetInstanceViewPreparer prepares the GetInstanceView request. +func (client CloudServiceRoleInstancesClient) GetInstanceViewPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/instanceView", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetInstanceViewSender sends the GetInstanceView request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) GetInstanceViewResponder(resp *http.Response) (result RoleInstanceInstanceView, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetRemoteDesktopFile gets a remote desktop file for a role instance in a cloud service. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFile(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result ReadCloser, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.GetRemoteDesktopFile") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetRemoteDesktopFilePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", nil, "Failure preparing request") + return + } + + resp, err := client.GetRemoteDesktopFileSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", resp, "Failure sending request") + return + } + + result, err = client.GetRemoteDesktopFileResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", resp, "Failure responding to request") + return + } + + return +} + +// GetRemoteDesktopFilePreparer prepares the GetRemoteDesktopFile request. +func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFilePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/remoteDesktopFile", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetRemoteDesktopFileSender sends the GetRemoteDesktopFile request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFileSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetRemoteDesktopFileResponder handles the response to the GetRemoteDesktopFile request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFileResponder(resp *http.Response) (result ReadCloser, err error) { + result.Value = &resp.Body + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK)) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets the list of all role instances in a cloud service. Use nextLink property in the response to get the next +// page of role instances. Do this till nextLink is null to fetch all the role instances. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// expand - the expand expression to apply to the operation. 'UserData' is not supported for cloud services. +func (client CloudServiceRoleInstancesClient) List(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstanceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.List") + defer func() { + sc := -1 + if result.rilr.Response.Response != nil { + sc = result.rilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, cloudServiceName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.rilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", resp, "Failure sending request") + return + } + + result.rilr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", resp, "Failure responding to request") + return + } + if result.rilr.hasNextLink() && result.rilr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client CloudServiceRoleInstancesClient) ListPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) ListResponder(resp *http.Response) (result RoleInstanceListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client CloudServiceRoleInstancesClient) listNextResults(ctx context.Context, lastResults RoleInstanceListResult) (result RoleInstanceListResult, err error) { + req, err := lastResults.roleInstanceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServiceRoleInstancesClient) ListComplete(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstanceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, cloudServiceName, expand) + return +} + +// Rebuild the Rebuild Role Instance asynchronous operation reinstalls the operating system on instances of web roles +// or worker roles and initializes the storage resources that are used by them. If you do not want to initialize +// storage resources, you can use Reimage Role Instance. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) Rebuild(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesRebuildFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Rebuild") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RebuildPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Rebuild", nil, "Failure preparing request") + return + } + + result, err = client.RebuildSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Rebuild", result.Response(), "Failure sending request") + return + } + + return +} + +// RebuildPreparer prepares the Rebuild request. +func (client CloudServiceRoleInstancesClient) RebuildPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/rebuild", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RebuildSender sends the Rebuild request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) RebuildSender(req *http.Request) (future CloudServiceRoleInstancesRebuildFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RebuildResponder handles the response to the Rebuild request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) RebuildResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reimage the Reimage Role Instance asynchronous operation reinstalls the operating system on instances of web roles +// or worker roles. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) Reimage(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesReimageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Reimage") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimagePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Reimage", nil, "Failure preparing request") + return + } + + result, err = client.ReimageSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Reimage", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimagePreparer prepares the Reimage request. +func (client CloudServiceRoleInstancesClient) ReimagePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/reimage", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageSender sends the Reimage request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) ReimageSender(req *http.Request) (future CloudServiceRoleInstancesReimageFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageResponder handles the response to the Reimage request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Restart the Reboot Role Instance asynchronous operation requests a reboot of a role instance in the cloud service. +// Parameters: +// roleInstanceName - name of the role instance. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRoleInstancesClient) Restart(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RestartPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client CloudServiceRoleInstancesClient) RestartPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleInstanceName": autorest.Encode("path", roleInstanceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRoleInstancesClient) RestartSender(req *http.Request) (future CloudServiceRoleInstancesRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client CloudServiceRoleInstancesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroles.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroles.go new file mode 100644 index 000000000000..a67f6351181e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudserviceroles.go @@ -0,0 +1,229 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CloudServiceRolesClient is the compute Client +type CloudServiceRolesClient struct { + BaseClient +} + +// NewCloudServiceRolesClient creates an instance of the CloudServiceRolesClient client. +func NewCloudServiceRolesClient(subscriptionID string) CloudServiceRolesClient { + return NewCloudServiceRolesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCloudServiceRolesClientWithBaseURI creates an instance of the CloudServiceRolesClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewCloudServiceRolesClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceRolesClient { + return CloudServiceRolesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets a role from a cloud service. +// Parameters: +// roleName - name of the role. +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRolesClient) Get(ctx context.Context, roleName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRole, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, roleName, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CloudServiceRolesClient) GetPreparer(ctx context.Context, roleName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "roleName": autorest.Encode("path", roleName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles/{roleName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRolesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CloudServiceRolesClient) GetResponder(resp *http.Response) (result CloudServiceRole, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all roles in a cloud service. Use nextLink property in the response to get the next page of +// roles. Do this till nextLink is null to fetch all the roles. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServiceRolesClient) List(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.List") + defer func() { + sc := -1 + if result.csrlr.Response.Response != nil { + sc = result.csrlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.csrlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", resp, "Failure sending request") + return + } + + result.csrlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", resp, "Failure responding to request") + return + } + if result.csrlr.hasNextLink() && result.csrlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client CloudServiceRolesClient) ListPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServiceRolesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client CloudServiceRolesClient) ListResponder(resp *http.Response) (result CloudServiceRoleListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client CloudServiceRolesClient) listNextResults(ctx context.Context, lastResults CloudServiceRoleListResult) (result CloudServiceRoleListResult, err error) { + req, err := lastResults.cloudServiceRoleListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServiceRolesClient) ListComplete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, cloudServiceName) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservices.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservices.go new file mode 100644 index 000000000000..e467efb8f666 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservices.go @@ -0,0 +1,1198 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CloudServicesClient is the compute Client +type CloudServicesClient struct { + BaseClient +} + +// NewCloudServicesClient creates an instance of the CloudServicesClient client. +func NewCloudServicesClient(subscriptionID string) CloudServicesClient { + return NewCloudServicesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCloudServicesClientWithBaseURI creates an instance of the CloudServicesClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewCloudServicesClientWithBaseURI(baseURI string, subscriptionID string) CloudServicesClient { + return CloudServicesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a cloud service. Please note some properties can be set only during cloud service +// creation. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - the cloud service object. +func (client CloudServicesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudService) (result CloudServicesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.Location", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.CloudServicesClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client CloudServicesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudService) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.ID = nil + parameters.Name = nil + parameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) CreateOrUpdateSender(req *http.Request) (future CloudServicesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) CreateOrUpdateResponder(resp *http.Response) (result CloudService, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesClient) Delete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client CloudServicesClient) DeletePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) DeleteSender(req *http.Request) (future CloudServicesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// DeleteInstances deletes role instances in a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - list of cloud service role instance names. +func (client CloudServicesClient) DeleteInstances(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesDeleteInstancesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.DeleteInstances") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.CloudServicesClient", "DeleteInstances", err.Error()) + } + + req, err := client.DeleteInstancesPreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "DeleteInstances", nil, "Failure preparing request") + return + } + + result, err = client.DeleteInstancesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "DeleteInstances", result.Response(), "Failure sending request") + return + } + + return +} + +// DeleteInstancesPreparer prepares the DeleteInstances request. +func (client CloudServicesClient) DeleteInstancesPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/delete", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteInstancesSender sends the DeleteInstances request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) DeleteInstancesSender(req *http.Request) (future CloudServicesDeleteInstancesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteInstancesResponder handles the response to the DeleteInstances request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) DeleteInstancesResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get display information about a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesClient) Get(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudService, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CloudServicesClient) GetPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) GetResponder(resp *http.Response) (result CloudService, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetInstanceView gets the status of a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesClient) GetInstanceView(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceInstanceView, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.GetInstanceView") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", nil, "Failure preparing request") + return + } + + resp, err := client.GetInstanceViewSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", resp, "Failure sending request") + return + } + + result, err = client.GetInstanceViewResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", resp, "Failure responding to request") + return + } + + return +} + +// GetInstanceViewPreparer prepares the GetInstanceView request. +func (client CloudServicesClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/instanceView", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetInstanceViewSender sends the GetInstanceView request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) GetInstanceViewResponder(resp *http.Response) (result CloudServiceInstanceView, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all cloud services under a resource group. Use nextLink property in the response to get the next +// page of Cloud Services. Do this till nextLink is null to fetch all the Cloud Services. +// Parameters: +// resourceGroupName - name of the resource group. +func (client CloudServicesClient) List(ctx context.Context, resourceGroupName string) (result CloudServiceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.List") + defer func() { + sc := -1 + if result.cslr.Response.Response != nil { + sc = result.cslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.cslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", resp, "Failure sending request") + return + } + + result.cslr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", resp, "Failure responding to request") + return + } + if result.cslr.hasNextLink() && result.cslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client CloudServicesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) ListResponder(resp *http.Response) (result CloudServiceListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client CloudServicesClient) listNextResults(ctx context.Context, lastResults CloudServiceListResult) (result CloudServiceListResult, err error) { + req, err := lastResults.cloudServiceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServicesClient) ListComplete(ctx context.Context, resourceGroupName string) (result CloudServiceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName) + return +} + +// ListAll gets a list of all cloud services in the subscription, regardless of the associated resource group. Use +// nextLink property in the response to get the next page of Cloud Services. Do this till nextLink is null to fetch all +// the Cloud Services. +func (client CloudServicesClient) ListAll(ctx context.Context) (result CloudServiceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.ListAll") + defer func() { + sc := -1 + if result.cslr.Response.Response != nil { + sc = result.cslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAllNextResults + req, err := client.ListAllPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", nil, "Failure preparing request") + return + } + + resp, err := client.ListAllSender(req) + if err != nil { + result.cslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", resp, "Failure sending request") + return + } + + result.cslr, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", resp, "Failure responding to request") + return + } + if result.cslr.hasNextLink() && result.cslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListAllPreparer prepares the ListAll request. +func (client CloudServicesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/cloudServices", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAllSender sends the ListAll request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) ListAllSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAllResponder handles the response to the ListAll request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) ListAllResponder(resp *http.Response) (result CloudServiceListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAllNextResults retrieves the next set of results, if any. +func (client CloudServicesClient) listAllNextResults(ctx context.Context, lastResults CloudServiceListResult) (result CloudServiceListResult, err error) { + req, err := lastResults.cloudServiceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAllSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAllComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServicesClient) ListAllComplete(ctx context.Context) (result CloudServiceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAll(ctx) + return +} + +// PowerOff power off the cloud service. Note that resources are still attached and you are getting charged for the +// resources. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesClient) PowerOff(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesPowerOffFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.PowerOff") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PowerOffPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "PowerOff", nil, "Failure preparing request") + return + } + + result, err = client.PowerOffSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "PowerOff", result.Response(), "Failure sending request") + return + } + + return +} + +// PowerOffPreparer prepares the PowerOff request. +func (client CloudServicesClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/poweroff", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PowerOffSender sends the PowerOff request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) PowerOffSender(req *http.Request) (future CloudServicesPowerOffFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PowerOffResponder handles the response to the PowerOff request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Rebuild rebuild Role Instances reinstalls the operating system on instances of web roles or worker roles and +// initializes the storage resources that are used by them. If you do not want to initialize storage resources, you can +// use Reimage Role Instances. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - list of cloud service role instance names. +func (client CloudServicesClient) Rebuild(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesRebuildFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Rebuild") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.CloudServicesClient", "Rebuild", err.Error()) + } + + req, err := client.RebuildPreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Rebuild", nil, "Failure preparing request") + return + } + + result, err = client.RebuildSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Rebuild", result.Response(), "Failure sending request") + return + } + + return +} + +// RebuildPreparer prepares the Rebuild request. +func (client CloudServicesClient) RebuildPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/rebuild", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RebuildSender sends the Rebuild request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) RebuildSender(req *http.Request) (future CloudServicesRebuildFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RebuildResponder handles the response to the Rebuild request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) RebuildResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reimage reimage asynchronous operation reinstalls the operating system on instances of web roles or worker roles. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - list of cloud service role instance names. +func (client CloudServicesClient) Reimage(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesReimageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Reimage") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.CloudServicesClient", "Reimage", err.Error()) + } + + req, err := client.ReimagePreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Reimage", nil, "Failure preparing request") + return + } + + result, err = client.ReimageSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Reimage", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimagePreparer prepares the Reimage request. +func (client CloudServicesClient) ReimagePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/reimage", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageSender sends the Reimage request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) ReimageSender(req *http.Request) (future CloudServicesReimageFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageResponder handles the response to the Reimage request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Restart restarts one or more role instances in a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - list of cloud service role instance names. +func (client CloudServicesClient) Restart(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.CloudServicesClient", "Restart", err.Error()) + } + + req, err := client.RestartPreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client CloudServicesClient) RestartPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) RestartSender(req *http.Request) (future CloudServicesRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Start starts the cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesClient) Start(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesStartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Start") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Start", nil, "Failure preparing request") + return + } + + result, err = client.StartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Start", result.Response(), "Failure sending request") + return + } + + return +} + +// StartPreparer prepares the Start request. +func (client CloudServicesClient) StartPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/start", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartSender sends the Start request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) StartSender(req *http.Request) (future CloudServicesStartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartResponder handles the response to the Start request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update update a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// parameters - the cloud service object. +func (client CloudServicesClient) Update(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudServiceUpdate) (result CloudServicesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, cloudServiceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client CloudServicesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudServiceUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesClient) UpdateSender(req *http.Request) (future CloudServicesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client CloudServicesClient) UpdateResponder(resp *http.Response) (result CloudService, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservicesupdatedomain.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservicesupdatedomain.go new file mode 100644 index 000000000000..74f7d76a39e6 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/cloudservicesupdatedomain.go @@ -0,0 +1,319 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CloudServicesUpdateDomainClient is the compute Client +type CloudServicesUpdateDomainClient struct { + BaseClient +} + +// NewCloudServicesUpdateDomainClient creates an instance of the CloudServicesUpdateDomainClient client. +func NewCloudServicesUpdateDomainClient(subscriptionID string) CloudServicesUpdateDomainClient { + return NewCloudServicesUpdateDomainClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCloudServicesUpdateDomainClientWithBaseURI creates an instance of the CloudServicesUpdateDomainClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewCloudServicesUpdateDomainClientWithBaseURI(baseURI string, subscriptionID string) CloudServicesUpdateDomainClient { + return CloudServicesUpdateDomainClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// GetUpdateDomain gets the specified update domain of a cloud service. Use nextLink property in the response to get +// the next page of update domains. Do this till nextLink is null to fetch all the update domains. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// updateDomain - specifies an integer value that identifies the update domain. Update domains are identified +// with a zero-based index: the first update domain has an ID of 0, the second has an ID of 1, and so on. +func (client CloudServicesUpdateDomainClient) GetUpdateDomain(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32) (result UpdateDomain, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.GetUpdateDomain") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetUpdateDomainPreparer(ctx, resourceGroupName, cloudServiceName, updateDomain) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", nil, "Failure preparing request") + return + } + + resp, err := client.GetUpdateDomainSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", resp, "Failure sending request") + return + } + + result, err = client.GetUpdateDomainResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", resp, "Failure responding to request") + return + } + + return +} + +// GetUpdateDomainPreparer prepares the GetUpdateDomain request. +func (client CloudServicesUpdateDomainClient) GetUpdateDomainPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "updateDomain": autorest.Encode("path", updateDomain), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetUpdateDomainSender sends the GetUpdateDomain request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesUpdateDomainClient) GetUpdateDomainSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetUpdateDomainResponder handles the response to the GetUpdateDomain request. The method always +// closes the http.Response Body. +func (client CloudServicesUpdateDomainClient) GetUpdateDomainResponder(resp *http.Response) (result UpdateDomain, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListUpdateDomains gets a list of all update domains in a cloud service. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +func (client CloudServicesUpdateDomainClient) ListUpdateDomains(ctx context.Context, resourceGroupName string, cloudServiceName string) (result UpdateDomainListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.ListUpdateDomains") + defer func() { + sc := -1 + if result.udlr.Response.Response != nil { + sc = result.udlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listUpdateDomainsNextResults + req, err := client.ListUpdateDomainsPreparer(ctx, resourceGroupName, cloudServiceName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", nil, "Failure preparing request") + return + } + + resp, err := client.ListUpdateDomainsSender(req) + if err != nil { + result.udlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", resp, "Failure sending request") + return + } + + result.udlr, err = client.ListUpdateDomainsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", resp, "Failure responding to request") + return + } + if result.udlr.hasNextLink() && result.udlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListUpdateDomainsPreparer prepares the ListUpdateDomains request. +func (client CloudServicesUpdateDomainClient) ListUpdateDomainsPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListUpdateDomainsSender sends the ListUpdateDomains request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesUpdateDomainClient) ListUpdateDomainsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListUpdateDomainsResponder handles the response to the ListUpdateDomains request. The method always +// closes the http.Response Body. +func (client CloudServicesUpdateDomainClient) ListUpdateDomainsResponder(resp *http.Response) (result UpdateDomainListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listUpdateDomainsNextResults retrieves the next set of results, if any. +func (client CloudServicesUpdateDomainClient) listUpdateDomainsNextResults(ctx context.Context, lastResults UpdateDomainListResult) (result UpdateDomainListResult, err error) { + req, err := lastResults.updateDomainListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListUpdateDomainsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", resp, "Failure sending next results request") + } + result, err = client.ListUpdateDomainsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListUpdateDomainsComplete enumerates all values, automatically crossing page boundaries as required. +func (client CloudServicesUpdateDomainClient) ListUpdateDomainsComplete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result UpdateDomainListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.ListUpdateDomains") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListUpdateDomains(ctx, resourceGroupName, cloudServiceName) + return +} + +// WalkUpdateDomain updates the role instances in the specified update domain. +// Parameters: +// resourceGroupName - name of the resource group. +// cloudServiceName - name of the cloud service. +// updateDomain - specifies an integer value that identifies the update domain. Update domains are identified +// with a zero-based index: the first update domain has an ID of 0, the second has an ID of 1, and so on. +// parameters - the update domain object. +func (client CloudServicesUpdateDomainClient) WalkUpdateDomain(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32, parameters *UpdateDomain) (result CloudServicesUpdateDomainWalkUpdateDomainFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.WalkUpdateDomain") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.WalkUpdateDomainPreparer(ctx, resourceGroupName, cloudServiceName, updateDomain, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "WalkUpdateDomain", nil, "Failure preparing request") + return + } + + result, err = client.WalkUpdateDomainSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "WalkUpdateDomain", result.Response(), "Failure sending request") + return + } + + return +} + +// WalkUpdateDomainPreparer prepares the WalkUpdateDomain request. +func (client CloudServicesUpdateDomainClient) WalkUpdateDomainPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32, parameters *UpdateDomain) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "cloudServiceName": autorest.Encode("path", cloudServiceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "updateDomain": autorest.Encode("path", updateDomain), + } + + const APIVersion = "2022-04-04" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.ID = nil + parameters.Name = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// WalkUpdateDomainSender sends the WalkUpdateDomain request. The method will close the +// http.Response Body if it receives an error. +func (client CloudServicesUpdateDomainClient) WalkUpdateDomainSender(req *http.Request) (future CloudServicesUpdateDomainWalkUpdateDomainFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// WalkUpdateDomainResponder handles the response to the WalkUpdateDomain request. The method always +// closes the http.Response Body. +func (client CloudServicesUpdateDomainClient) WalkUpdateDomainResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleries.go new file mode 100644 index 000000000000..6a6335a1e5ed --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleries.go @@ -0,0 +1,108 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CommunityGalleriesClient is the compute Client +type CommunityGalleriesClient struct { + BaseClient +} + +// NewCommunityGalleriesClient creates an instance of the CommunityGalleriesClient client. +func NewCommunityGalleriesClient(subscriptionID string) CommunityGalleriesClient { + return NewCommunityGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCommunityGalleriesClientWithBaseURI creates an instance of the CommunityGalleriesClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewCommunityGalleriesClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleriesClient { + return CommunityGalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a community gallery by gallery public name. +// Parameters: +// location - resource location. +// publicGalleryName - the public name of the community gallery. +func (client CommunityGalleriesClient) Get(ctx context.Context, location string, publicGalleryName string) (result CommunityGallery, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleriesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, publicGalleryName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CommunityGalleriesClient) GetPreparer(ctx context.Context, location string, publicGalleryName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publicGalleryName": autorest.Encode("path", publicGalleryName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CommunityGalleriesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CommunityGalleriesClient) GetResponder(resp *http.Response) (result CommunityGallery, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimages.go new file mode 100644 index 000000000000..b77c378c6c12 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimages.go @@ -0,0 +1,228 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CommunityGalleryImagesClient is the compute Client +type CommunityGalleryImagesClient struct { + BaseClient +} + +// NewCommunityGalleryImagesClient creates an instance of the CommunityGalleryImagesClient client. +func NewCommunityGalleryImagesClient(subscriptionID string) CommunityGalleryImagesClient { + return NewCommunityGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCommunityGalleryImagesClientWithBaseURI creates an instance of the CommunityGalleryImagesClient client using a +// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, +// Azure stack). +func NewCommunityGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleryImagesClient { + return CommunityGalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a community gallery image. +// Parameters: +// location - resource location. +// publicGalleryName - the public name of the community gallery. +// galleryImageName - the name of the community gallery image definition. +func (client CommunityGalleryImagesClient) Get(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (result CommunityGalleryImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, publicGalleryName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CommunityGalleryImagesClient) GetPreparer(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "location": autorest.Encode("path", location), + "publicGalleryName": autorest.Encode("path", publicGalleryName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CommunityGalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CommunityGalleryImagesClient) GetResponder(resp *http.Response) (result CommunityGalleryImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list community gallery images inside a gallery. +// Parameters: +// location - resource location. +// publicGalleryName - the public name of the community gallery. +func (client CommunityGalleryImagesClient) List(ctx context.Context, location string, publicGalleryName string) (result CommunityGalleryImageListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImagesClient.List") + defer func() { + sc := -1 + if result.cgil.Response.Response != nil { + sc = result.cgil.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location, publicGalleryName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.cgil.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "List", resp, "Failure sending request") + return + } + + result.cgil, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "List", resp, "Failure responding to request") + return + } + if result.cgil.hasNextLink() && result.cgil.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client CommunityGalleryImagesClient) ListPreparer(ctx context.Context, location string, publicGalleryName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publicGalleryName": autorest.Encode("path", publicGalleryName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client CommunityGalleryImagesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client CommunityGalleryImagesClient) ListResponder(resp *http.Response) (result CommunityGalleryImageList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client CommunityGalleryImagesClient) listNextResults(ctx context.Context, lastResults CommunityGalleryImageList) (result CommunityGalleryImageList, err error) { + req, err := lastResults.communityGalleryImageListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client CommunityGalleryImagesClient) ListComplete(ctx context.Context, location string, publicGalleryName string) (result CommunityGalleryImageListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImagesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location, publicGalleryName) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimageversions.go new file mode 100644 index 000000000000..dfa0ea75d4e1 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/communitygalleryimageversions.go @@ -0,0 +1,234 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// CommunityGalleryImageVersionsClient is the compute Client +type CommunityGalleryImageVersionsClient struct { + BaseClient +} + +// NewCommunityGalleryImageVersionsClient creates an instance of the CommunityGalleryImageVersionsClient client. +func NewCommunityGalleryImageVersionsClient(subscriptionID string) CommunityGalleryImageVersionsClient { + return NewCommunityGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewCommunityGalleryImageVersionsClientWithBaseURI creates an instance of the CommunityGalleryImageVersionsClient +// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI +// (sovereign clouds, Azure stack). +func NewCommunityGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleryImageVersionsClient { + return CommunityGalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a community gallery image version. +// Parameters: +// location - resource location. +// publicGalleryName - the public name of the community gallery. +// galleryImageName - the name of the community gallery image definition. +// galleryImageVersionName - the name of the community gallery image version. Needs to follow semantic version +// name pattern: The allowed characters are digit and period. Digits must be within the range of a 32-bit +// integer. Format: .. +func (client CommunityGalleryImageVersionsClient) Get(ctx context.Context, location string, publicGalleryName string, galleryImageName string, galleryImageVersionName string) (result CommunityGalleryImageVersion, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, publicGalleryName, galleryImageName, galleryImageVersionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client CommunityGalleryImageVersionsClient) GetPreparer(ctx context.Context, location string, publicGalleryName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "location": autorest.Encode("path", location), + "publicGalleryName": autorest.Encode("path", publicGalleryName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client CommunityGalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client CommunityGalleryImageVersionsClient) GetResponder(resp *http.Response) (result CommunityGalleryImageVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list community gallery image versions inside an image. +// Parameters: +// location - resource location. +// publicGalleryName - the public name of the community gallery. +// galleryImageName - the name of the community gallery image definition. +func (client CommunityGalleryImageVersionsClient) List(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (result CommunityGalleryImageVersionListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionsClient.List") + defer func() { + sc := -1 + if result.cgivl.Response.Response != nil { + sc = result.cgivl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location, publicGalleryName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.cgivl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "List", resp, "Failure sending request") + return + } + + result.cgivl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "List", resp, "Failure responding to request") + return + } + if result.cgivl.hasNextLink() && result.cgivl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client CommunityGalleryImageVersionsClient) ListPreparer(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "location": autorest.Encode("path", location), + "publicGalleryName": autorest.Encode("path", publicGalleryName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client CommunityGalleryImageVersionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client CommunityGalleryImageVersionsClient) ListResponder(resp *http.Response) (result CommunityGalleryImageVersionList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client CommunityGalleryImageVersionsClient) listNextResults(ctx context.Context, lastResults CommunityGalleryImageVersionList) (result CommunityGalleryImageVersionList, err error) { + req, err := lastResults.communityGalleryImageVersionListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client CommunityGalleryImageVersionsClient) ListComplete(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (result CommunityGalleryImageVersionListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location, publicGalleryName, galleryImageName) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhostgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhostgroups.go new file mode 100644 index 000000000000..0165ab393148 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhostgroups.go @@ -0,0 +1,589 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DedicatedHostGroupsClient is the compute Client +type DedicatedHostGroupsClient struct { + BaseClient +} + +// NewDedicatedHostGroupsClient creates an instance of the DedicatedHostGroupsClient client. +func NewDedicatedHostGroupsClient(subscriptionID string) DedicatedHostGroupsClient { + return NewDedicatedHostGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDedicatedHostGroupsClientWithBaseURI creates an instance of the DedicatedHostGroupsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewDedicatedHostGroupsClientWithBaseURI(baseURI string, subscriptionID string) DedicatedHostGroupsClient { + return DedicatedHostGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a dedicated host group. For details of Dedicated Host and Dedicated Host Groups +// please see [Dedicated Host Documentation] (https://go.microsoft.com/fwlink/?linkid=2082596) +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// parameters - parameters supplied to the Create Dedicated Host Group. +func (client DedicatedHostGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroup) (result DedicatedHostGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties.PlatformFaultDomainCount", Name: validation.Null, Rule: true, + Chain: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties.PlatformFaultDomainCount", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}, + }}}}}); err != nil { + return result, validation.NewError("compute.DedicatedHostGroupsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, hostGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client DedicatedHostGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroup) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result DedicatedHostGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a dedicated host group. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +func (client DedicatedHostGroupsClient) Delete(ctx context.Context, resourceGroupName string, hostGroupName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, hostGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client DedicatedHostGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, hostGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a dedicated host group. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance +// views of the dedicated hosts under the dedicated host group. 'UserData' is not supported for dedicated host +// group. +func (client DedicatedHostGroupsClient) Get(ctx context.Context, resourceGroupName string, hostGroupName string, expand InstanceViewTypes) (result DedicatedHostGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, hostGroupName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DedicatedHostGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) GetResponder(resp *http.Response) (result DedicatedHostGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByResourceGroup lists all of the dedicated host groups in the specified resource group. Use the nextLink +// property in the response to get the next page of dedicated host groups. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client DedicatedHostGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DedicatedHostGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.dhglr.Response.Response != nil { + sc = result.dhglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.dhglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.dhglr, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.dhglr.hasNextLink() && result.dhglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client DedicatedHostGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result DedicatedHostGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client DedicatedHostGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults DedicatedHostGroupListResult) (result DedicatedHostGroupListResult, err error) { + req, err := lastResults.dedicatedHostGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client DedicatedHostGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DedicatedHostGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// ListBySubscription lists all of the dedicated host groups in the subscription. Use the nextLink property in the +// response to get the next page of dedicated host groups. +func (client DedicatedHostGroupsClient) ListBySubscription(ctx context.Context) (result DedicatedHostGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.dhglr.Response.Response != nil { + sc = result.dhglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.dhglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.dhglr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.dhglr.hasNextLink() && result.dhglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client DedicatedHostGroupsClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/hostGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result DedicatedHostGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client DedicatedHostGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults DedicatedHostGroupListResult) (result DedicatedHostGroupListResult, err error) { + req, err := lastResults.dedicatedHostGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client DedicatedHostGroupsClient) ListBySubscriptionComplete(ctx context.Context) (result DedicatedHostGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx) + return +} + +// Update update an dedicated host group. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// parameters - parameters supplied to the Update Dedicated Host Group operation. +func (client DedicatedHostGroupsClient) Update(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroupUpdate) (result DedicatedHostGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, hostGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client DedicatedHostGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroupUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client DedicatedHostGroupsClient) UpdateResponder(resp *http.Response) (result DedicatedHostGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhosts.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhosts.go new file mode 100644 index 000000000000..2e52a6e1de0c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/dedicatedhosts.go @@ -0,0 +1,575 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DedicatedHostsClient is the compute Client +type DedicatedHostsClient struct { + BaseClient +} + +// NewDedicatedHostsClient creates an instance of the DedicatedHostsClient client. +func NewDedicatedHostsClient(subscriptionID string) DedicatedHostsClient { + return NewDedicatedHostsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDedicatedHostsClientWithBaseURI creates an instance of the DedicatedHostsClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewDedicatedHostsClientWithBaseURI(baseURI string, subscriptionID string) DedicatedHostsClient { + return DedicatedHostsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a dedicated host . +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// hostName - the name of the dedicated host . +// parameters - parameters supplied to the Create Dedicated Host. +func (client DedicatedHostsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHost) (result DedicatedHostsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.DedicatedHostProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.DedicatedHostProperties.PlatformFaultDomain", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.DedicatedHostProperties.PlatformFaultDomain", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, + }}, + {Target: "parameters.Sku", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.DedicatedHostsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, hostGroupName, hostName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client DedicatedHostsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHost) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "hostName": autorest.Encode("path", hostName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) CreateOrUpdateSender(req *http.Request) (future DedicatedHostsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) CreateOrUpdateResponder(resp *http.Response) (result DedicatedHost, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a dedicated host. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// hostName - the name of the dedicated host. +func (client DedicatedHostsClient) Delete(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (result DedicatedHostsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, hostGroupName, hostName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client DedicatedHostsClient) DeletePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "hostName": autorest.Encode("path", hostName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) DeleteSender(req *http.Request) (future DedicatedHostsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a dedicated host. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// hostName - the name of the dedicated host. +// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance +// views of the dedicated host. 'UserData' is not supported for dedicated host. +func (client DedicatedHostsClient) Get(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, expand InstanceViewTypes) (result DedicatedHost, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, hostGroupName, hostName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DedicatedHostsClient) GetPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "hostName": autorest.Encode("path", hostName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) GetResponder(resp *http.Response) (result DedicatedHost, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByHostGroup lists all of the dedicated hosts in the specified dedicated host group. Use the nextLink property in +// the response to get the next page of dedicated hosts. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +func (client DedicatedHostsClient) ListByHostGroup(ctx context.Context, resourceGroupName string, hostGroupName string) (result DedicatedHostListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.ListByHostGroup") + defer func() { + sc := -1 + if result.dhlr.Response.Response != nil { + sc = result.dhlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByHostGroupNextResults + req, err := client.ListByHostGroupPreparer(ctx, resourceGroupName, hostGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByHostGroupSender(req) + if err != nil { + result.dhlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", resp, "Failure sending request") + return + } + + result.dhlr, err = client.ListByHostGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", resp, "Failure responding to request") + return + } + if result.dhlr.hasNextLink() && result.dhlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByHostGroupPreparer prepares the ListByHostGroup request. +func (client DedicatedHostsClient) ListByHostGroupPreparer(ctx context.Context, resourceGroupName string, hostGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByHostGroupSender sends the ListByHostGroup request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) ListByHostGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByHostGroupResponder handles the response to the ListByHostGroup request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) ListByHostGroupResponder(resp *http.Response) (result DedicatedHostListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByHostGroupNextResults retrieves the next set of results, if any. +func (client DedicatedHostsClient) listByHostGroupNextResults(ctx context.Context, lastResults DedicatedHostListResult) (result DedicatedHostListResult, err error) { + req, err := lastResults.dedicatedHostListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByHostGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByHostGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByHostGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client DedicatedHostsClient) ListByHostGroupComplete(ctx context.Context, resourceGroupName string, hostGroupName string) (result DedicatedHostListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.ListByHostGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByHostGroup(ctx, resourceGroupName, hostGroupName) + return +} + +// Restart restart the dedicated host. The operation will complete successfully once the dedicated host has restarted +// and is running. To determine the health of VMs deployed on the dedicated host after the restart check the Resource +// Health Center in the Azure Portal. Please refer to +// https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// hostName - the name of the dedicated host. +func (client DedicatedHostsClient) Restart(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (result DedicatedHostsRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RestartPreparer(ctx, resourceGroupName, hostGroupName, hostName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client DedicatedHostsClient) RestartPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "hostName": autorest.Encode("path", hostName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) RestartSender(req *http.Request) (future DedicatedHostsRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update update an dedicated host . +// Parameters: +// resourceGroupName - the name of the resource group. +// hostGroupName - the name of the dedicated host group. +// hostName - the name of the dedicated host . +// parameters - parameters supplied to the Update Dedicated Host operation. +func (client DedicatedHostsClient) Update(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHostUpdate) (result DedicatedHostsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, hostGroupName, hostName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client DedicatedHostsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHostUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "hostGroupName": autorest.Encode("path", hostGroupName), + "hostName": autorest.Encode("path", hostName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client DedicatedHostsClient) UpdateSender(req *http.Request) (future DedicatedHostsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client DedicatedHostsClient) UpdateResponder(resp *http.Response) (result DedicatedHost, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskaccesses.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskaccesses.go new file mode 100644 index 000000000000..f7e51959c441 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskaccesses.go @@ -0,0 +1,1045 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DiskAccessesClient is the compute Client +type DiskAccessesClient struct { + BaseClient +} + +// NewDiskAccessesClient creates an instance of the DiskAccessesClient client. +func NewDiskAccessesClient(subscriptionID string) DiskAccessesClient { + return NewDiskAccessesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDiskAccessesClientWithBaseURI creates an instance of the DiskAccessesClient client using a custom endpoint. Use +// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewDiskAccessesClientWithBaseURI(baseURI string, subscriptionID string) DiskAccessesClient { + return DiskAccessesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a disk access resource +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// diskAccess - disk access object supplied in the body of the Put disk access operation. +func (client DiskAccessesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccess) (result DiskAccessesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskAccessName, diskAccess) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client DiskAccessesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccess) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), + autorest.WithJSON(diskAccess), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) CreateOrUpdateSender(req *http.Request) (future DiskAccessesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) CreateOrUpdateResponder(resp *http.Response) (result DiskAccess, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a disk access resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskAccessesClient) Delete(ctx context.Context, resourceGroupName string, diskAccessName string) (result DiskAccessesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, diskAccessName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client DiskAccessesClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) DeleteSender(req *http.Request) (future DiskAccessesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// DeleteAPrivateEndpointConnection deletes a private endpoint connection under a disk access resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// privateEndpointConnectionName - the name of the private endpoint connection. +func (client DiskAccessesClient) DeleteAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (result DiskAccessesDeleteAPrivateEndpointConnectionFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.DeleteAPrivateEndpointConnection") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeleteAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "DeleteAPrivateEndpointConnection", nil, "Failure preparing request") + return + } + + result, err = client.DeleteAPrivateEndpointConnectionSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "DeleteAPrivateEndpointConnection", result.Response(), "Failure sending request") + return + } + + return +} + +// DeleteAPrivateEndpointConnectionPreparer prepares the DeleteAPrivateEndpointConnection request. +func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteAPrivateEndpointConnectionSender sends the DeleteAPrivateEndpointConnection request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionSender(req *http.Request) (future DiskAccessesDeleteAPrivateEndpointConnectionFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteAPrivateEndpointConnectionResponder handles the response to the DeleteAPrivateEndpointConnection request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets information about a disk access resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskAccessesClient) Get(ctx context.Context, resourceGroupName string, diskAccessName string) (result DiskAccess, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, diskAccessName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DiskAccessesClient) GetPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) GetResponder(resp *http.Response) (result DiskAccess, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetAPrivateEndpointConnection gets information about a private endpoint connection under a disk access resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// privateEndpointConnectionName - the name of the private endpoint connection. +func (client DiskAccessesClient) GetAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (result PrivateEndpointConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.GetAPrivateEndpointConnection") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", nil, "Failure preparing request") + return + } + + resp, err := client.GetAPrivateEndpointConnectionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", resp, "Failure sending request") + return + } + + result, err = client.GetAPrivateEndpointConnectionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", resp, "Failure responding to request") + return + } + + return +} + +// GetAPrivateEndpointConnectionPreparer prepares the GetAPrivateEndpointConnection request. +func (client DiskAccessesClient) GetAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetAPrivateEndpointConnectionSender sends the GetAPrivateEndpointConnection request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) GetAPrivateEndpointConnectionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetAPrivateEndpointConnectionResponder handles the response to the GetAPrivateEndpointConnection request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) GetAPrivateEndpointConnectionResponder(resp *http.Response) (result PrivateEndpointConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetPrivateLinkResources gets the private link resources possible under disk access resource +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskAccessesClient) GetPrivateLinkResources(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateLinkResourceListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.GetPrivateLinkResources") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPrivateLinkResourcesPreparer(ctx, resourceGroupName, diskAccessName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", nil, "Failure preparing request") + return + } + + resp, err := client.GetPrivateLinkResourcesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", resp, "Failure sending request") + return + } + + result, err = client.GetPrivateLinkResourcesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", resp, "Failure responding to request") + return + } + + return +} + +// GetPrivateLinkResourcesPreparer prepares the GetPrivateLinkResources request. +func (client DiskAccessesClient) GetPrivateLinkResourcesPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetPrivateLinkResourcesSender sends the GetPrivateLinkResources request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) GetPrivateLinkResourcesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetPrivateLinkResourcesResponder handles the response to the GetPrivateLinkResources request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) GetPrivateLinkResourcesResponder(resp *http.Response) (result PrivateLinkResourceListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the disk access resources under a subscription. +func (client DiskAccessesClient) List(ctx context.Context) (result DiskAccessListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.List") + defer func() { + sc := -1 + if result.dal.Response.Response != nil { + sc = result.dal.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.dal.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", resp, "Failure sending request") + return + } + + result.dal, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", resp, "Failure responding to request") + return + } + if result.dal.hasNextLink() && result.dal.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client DiskAccessesClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskAccesses", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) ListResponder(resp *http.Response) (result DiskAccessList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client DiskAccessesClient) listNextResults(ctx context.Context, lastResults DiskAccessList) (result DiskAccessList, err error) { + req, err := lastResults.diskAccessListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskAccessesClient) ListComplete(ctx context.Context) (result DiskAccessListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListByResourceGroup lists all the disk access resources under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client DiskAccessesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskAccessListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.dal.Response.Response != nil { + sc = result.dal.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.dal.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.dal, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.dal.hasNextLink() && result.dal.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client DiskAccessesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) ListByResourceGroupResponder(resp *http.Response) (result DiskAccessList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client DiskAccessesClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskAccessList) (result DiskAccessList, err error) { + req, err := lastResults.diskAccessListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskAccessesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskAccessListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// ListPrivateEndpointConnections list information about private endpoint connections under a disk access resource +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskAccessesClient) ListPrivateEndpointConnections(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateEndpointConnectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListPrivateEndpointConnections") + defer func() { + sc := -1 + if result.peclr.Response.Response != nil { + sc = result.peclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listPrivateEndpointConnectionsNextResults + req, err := client.ListPrivateEndpointConnectionsPreparer(ctx, resourceGroupName, diskAccessName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", nil, "Failure preparing request") + return + } + + resp, err := client.ListPrivateEndpointConnectionsSender(req) + if err != nil { + result.peclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", resp, "Failure sending request") + return + } + + result.peclr, err = client.ListPrivateEndpointConnectionsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", resp, "Failure responding to request") + return + } + if result.peclr.hasNextLink() && result.peclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPrivateEndpointConnectionsPreparer prepares the ListPrivateEndpointConnections request. +func (client DiskAccessesClient) ListPrivateEndpointConnectionsPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListPrivateEndpointConnectionsSender sends the ListPrivateEndpointConnections request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) ListPrivateEndpointConnectionsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListPrivateEndpointConnectionsResponder handles the response to the ListPrivateEndpointConnections request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) ListPrivateEndpointConnectionsResponder(resp *http.Response) (result PrivateEndpointConnectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listPrivateEndpointConnectionsNextResults retrieves the next set of results, if any. +func (client DiskAccessesClient) listPrivateEndpointConnectionsNextResults(ctx context.Context, lastResults PrivateEndpointConnectionListResult) (result PrivateEndpointConnectionListResult, err error) { + req, err := lastResults.privateEndpointConnectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListPrivateEndpointConnectionsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", resp, "Failure sending next results request") + } + result, err = client.ListPrivateEndpointConnectionsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListPrivateEndpointConnectionsComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskAccessesClient) ListPrivateEndpointConnectionsComplete(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateEndpointConnectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListPrivateEndpointConnections") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListPrivateEndpointConnections(ctx, resourceGroupName, diskAccessName) + return +} + +// Update updates (patches) a disk access resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// diskAccess - disk access object supplied in the body of the Patch disk access operation. +func (client DiskAccessesClient) Update(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccessUpdate) (result DiskAccessesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, diskAccessName, diskAccess) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client DiskAccessesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccessUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), + autorest.WithJSON(diskAccess), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) UpdateSender(req *http.Request) (future DiskAccessesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) UpdateResponder(resp *http.Response) (result DiskAccess, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// UpdateAPrivateEndpointConnection approve or reject a private endpoint connection under disk access resource, this +// can't be used to create a new private endpoint connection. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after +// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// privateEndpointConnectionName - the name of the private endpoint connection. +// privateEndpointConnection - private endpoint connection object supplied in the body of the Put private +// endpoint connection operation. +func (client DiskAccessesClient) UpdateAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string, privateEndpointConnection PrivateEndpointConnection) (result DiskAccessesUpdateAPrivateEndpointConnectionFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.UpdateAPrivateEndpointConnection") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: privateEndpointConnection, + Constraints: []validation.Constraint{{Target: "privateEndpointConnection.PrivateEndpointConnectionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "privateEndpointConnection.PrivateEndpointConnectionProperties.PrivateLinkServiceConnectionState", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", err.Error()) + } + + req, err := client.UpdateAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName, privateEndpointConnection) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", nil, "Failure preparing request") + return + } + + result, err = client.UpdateAPrivateEndpointConnectionSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdateAPrivateEndpointConnectionPreparer prepares the UpdateAPrivateEndpointConnection request. +func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string, privateEndpointConnection PrivateEndpointConnection) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskAccessName": autorest.Encode("path", diskAccessName), + "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + privateEndpointConnection.ID = nil + privateEndpointConnection.Name = nil + privateEndpointConnection.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), + autorest.WithJSON(privateEndpointConnection), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateAPrivateEndpointConnectionSender sends the UpdateAPrivateEndpointConnection request. The method will close the +// http.Response Body if it receives an error. +func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionSender(req *http.Request) (future DiskAccessesUpdateAPrivateEndpointConnectionFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateAPrivateEndpointConnectionResponder handles the response to the UpdateAPrivateEndpointConnection request. The method always +// closes the http.Response Body. +func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionResponder(resp *http.Response) (result PrivateEndpointConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskencryptionsets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskencryptionsets.go new file mode 100644 index 000000000000..ed5632a30550 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskencryptionsets.go @@ -0,0 +1,719 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DiskEncryptionSetsClient is the compute Client +type DiskEncryptionSetsClient struct { + BaseClient +} + +// NewDiskEncryptionSetsClient creates an instance of the DiskEncryptionSetsClient client. +func NewDiskEncryptionSetsClient(subscriptionID string) DiskEncryptionSetsClient { + return NewDiskEncryptionSetsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDiskEncryptionSetsClientWithBaseURI creates an instance of the DiskEncryptionSetsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewDiskEncryptionSetsClientWithBaseURI(baseURI string, subscriptionID string) DiskEncryptionSetsClient { + return DiskEncryptionSetsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a disk encryption set +// Parameters: +// resourceGroupName - the name of the resource group. +// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed +// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// diskEncryptionSet - disk encryption set object supplied in the body of the Put disk encryption set +// operation. +func (client DiskEncryptionSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSet) (result DiskEncryptionSetsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: diskEncryptionSet, + Constraints: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties.ActiveKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties.ActiveKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}}}, + }}}}}); err != nil { + return result, validation.NewError("compute.DiskEncryptionSetsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskEncryptionSetName, diskEncryptionSet) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client DiskEncryptionSetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSet) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), + autorest.WithJSON(diskEncryptionSet), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) CreateOrUpdateSender(req *http.Request) (future DiskEncryptionSetsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) CreateOrUpdateResponder(resp *http.Response) (result DiskEncryptionSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a disk encryption set. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed +// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskEncryptionSetsClient) Delete(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result DiskEncryptionSetsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, diskEncryptionSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client DiskEncryptionSetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) DeleteSender(req *http.Request) (future DiskEncryptionSetsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets information about a disk encryption set. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed +// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskEncryptionSetsClient) Get(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result DiskEncryptionSet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, diskEncryptionSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DiskEncryptionSetsClient) GetPreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) GetResponder(resp *http.Response) (result DiskEncryptionSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the disk encryption sets under a subscription. +func (client DiskEncryptionSetsClient) List(ctx context.Context) (result DiskEncryptionSetListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.List") + defer func() { + sc := -1 + if result.desl.Response.Response != nil { + sc = result.desl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.desl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", resp, "Failure sending request") + return + } + + result.desl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", resp, "Failure responding to request") + return + } + if result.desl.hasNextLink() && result.desl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client DiskEncryptionSetsClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskEncryptionSets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) ListResponder(resp *http.Response) (result DiskEncryptionSetList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client DiskEncryptionSetsClient) listNextResults(ctx context.Context, lastResults DiskEncryptionSetList) (result DiskEncryptionSetList, err error) { + req, err := lastResults.diskEncryptionSetListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskEncryptionSetsClient) ListComplete(ctx context.Context) (result DiskEncryptionSetListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListAssociatedResources lists all resources that are encrypted with this disk encryption set. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed +// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +func (client DiskEncryptionSetsClient) ListAssociatedResources(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result ResourceURIListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListAssociatedResources") + defer func() { + sc := -1 + if result.rul.Response.Response != nil { + sc = result.rul.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAssociatedResourcesNextResults + req, err := client.ListAssociatedResourcesPreparer(ctx, resourceGroupName, diskEncryptionSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", nil, "Failure preparing request") + return + } + + resp, err := client.ListAssociatedResourcesSender(req) + if err != nil { + result.rul.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", resp, "Failure sending request") + return + } + + result.rul, err = client.ListAssociatedResourcesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", resp, "Failure responding to request") + return + } + if result.rul.hasNextLink() && result.rul.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListAssociatedResourcesPreparer prepares the ListAssociatedResources request. +func (client DiskEncryptionSetsClient) ListAssociatedResourcesPreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAssociatedResourcesSender sends the ListAssociatedResources request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) ListAssociatedResourcesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAssociatedResourcesResponder handles the response to the ListAssociatedResources request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) ListAssociatedResourcesResponder(resp *http.Response) (result ResourceURIList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAssociatedResourcesNextResults retrieves the next set of results, if any. +func (client DiskEncryptionSetsClient) listAssociatedResourcesNextResults(ctx context.Context, lastResults ResourceURIList) (result ResourceURIList, err error) { + req, err := lastResults.resourceURIListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAssociatedResourcesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAssociatedResourcesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAssociatedResourcesComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskEncryptionSetsClient) ListAssociatedResourcesComplete(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result ResourceURIListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListAssociatedResources") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAssociatedResources(ctx, resourceGroupName, diskEncryptionSetName) + return +} + +// ListByResourceGroup lists all the disk encryption sets under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client DiskEncryptionSetsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskEncryptionSetListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.desl.Response.Response != nil { + sc = result.desl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.desl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.desl, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.desl.hasNextLink() && result.desl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client DiskEncryptionSetsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) ListByResourceGroupResponder(resp *http.Response) (result DiskEncryptionSetList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client DiskEncryptionSetsClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskEncryptionSetList) (result DiskEncryptionSetList, err error) { + req, err := lastResults.diskEncryptionSetListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskEncryptionSetsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskEncryptionSetListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// Update updates (patches) a disk encryption set. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed +// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The +// maximum name length is 80 characters. +// diskEncryptionSet - disk encryption set object supplied in the body of the Patch disk encryption set +// operation. +func (client DiskEncryptionSetsClient) Update(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSetUpdate) (result DiskEncryptionSetsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, diskEncryptionSetName, diskEncryptionSet) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client DiskEncryptionSetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSetUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), + autorest.WithJSON(diskEncryptionSet), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client DiskEncryptionSetsClient) UpdateSender(req *http.Request) (future DiskEncryptionSetsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client DiskEncryptionSetsClient) UpdateResponder(resp *http.Response) (result DiskEncryptionSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskrestorepoint.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskrestorepoint.go new file mode 100644 index 000000000000..2f38511cc6e0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/diskrestorepoint.go @@ -0,0 +1,407 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DiskRestorePointClient is the compute Client +type DiskRestorePointClient struct { + BaseClient +} + +// NewDiskRestorePointClient creates an instance of the DiskRestorePointClient client. +func NewDiskRestorePointClient(subscriptionID string) DiskRestorePointClient { + return NewDiskRestorePointClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDiskRestorePointClientWithBaseURI creates an instance of the DiskRestorePointClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewDiskRestorePointClientWithBaseURI(baseURI string, subscriptionID string) DiskRestorePointClient { + return DiskRestorePointClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get disk restorePoint resource +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. +// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. +// diskRestorePointName - the name of the disk restore point created. +func (client DiskRestorePointClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (result DiskRestorePoint, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DiskRestorePointClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskRestorePointName": autorest.Encode("path", diskRestorePointName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmRestorePointName": autorest.Encode("path", VMRestorePointName), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DiskRestorePointClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DiskRestorePointClient) GetResponder(resp *http.Response) (result DiskRestorePoint, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GrantAccess grants access to a diskRestorePoint. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. +// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. +// diskRestorePointName - the name of the disk restore point created. +// grantAccessData - access data object supplied in the body of the get disk access operation. +func (client DiskRestorePointClient) GrantAccess(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string, grantAccessData GrantAccessData) (result DiskRestorePointGrantAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.GrantAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: grantAccessData, + Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.DiskRestorePointClient", "GrantAccess", err.Error()) + } + + req, err := client.GrantAccessPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName, grantAccessData) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "GrantAccess", nil, "Failure preparing request") + return + } + + result, err = client.GrantAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "GrantAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// GrantAccessPreparer prepares the GrantAccess request. +func (client DiskRestorePointClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string, grantAccessData GrantAccessData) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskRestorePointName": autorest.Encode("path", diskRestorePointName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmRestorePointName": autorest.Encode("path", VMRestorePointName), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", pathParameters), + autorest.WithJSON(grantAccessData), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GrantAccessSender sends the GrantAccess request. The method will close the +// http.Response Body if it receives an error. +func (client DiskRestorePointClient) GrantAccessSender(req *http.Request) (future DiskRestorePointGrantAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// GrantAccessResponder handles the response to the GrantAccess request. The method always +// closes the http.Response Body. +func (client DiskRestorePointClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByRestorePoint lists diskRestorePoints under a vmRestorePoint. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. +// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. +func (client DiskRestorePointClient) ListByRestorePoint(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (result DiskRestorePointListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.ListByRestorePoint") + defer func() { + sc := -1 + if result.drpl.Response.Response != nil { + sc = result.drpl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByRestorePointNextResults + req, err := client.ListByRestorePointPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", nil, "Failure preparing request") + return + } + + resp, err := client.ListByRestorePointSender(req) + if err != nil { + result.drpl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", resp, "Failure sending request") + return + } + + result.drpl, err = client.ListByRestorePointResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", resp, "Failure responding to request") + return + } + if result.drpl.hasNextLink() && result.drpl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByRestorePointPreparer prepares the ListByRestorePoint request. +func (client DiskRestorePointClient) ListByRestorePointPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmRestorePointName": autorest.Encode("path", VMRestorePointName), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByRestorePointSender sends the ListByRestorePoint request. The method will close the +// http.Response Body if it receives an error. +func (client DiskRestorePointClient) ListByRestorePointSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByRestorePointResponder handles the response to the ListByRestorePoint request. The method always +// closes the http.Response Body. +func (client DiskRestorePointClient) ListByRestorePointResponder(resp *http.Response) (result DiskRestorePointList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByRestorePointNextResults retrieves the next set of results, if any. +func (client DiskRestorePointClient) listByRestorePointNextResults(ctx context.Context, lastResults DiskRestorePointList) (result DiskRestorePointList, err error) { + req, err := lastResults.diskRestorePointListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByRestorePointSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByRestorePointResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByRestorePointComplete enumerates all values, automatically crossing page boundaries as required. +func (client DiskRestorePointClient) ListByRestorePointComplete(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (result DiskRestorePointListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.ListByRestorePoint") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByRestorePoint(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName) + return +} + +// RevokeAccess revokes access to a diskRestorePoint. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. +// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. +// diskRestorePointName - the name of the disk restore point created. +func (client DiskRestorePointClient) RevokeAccess(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (result DiskRestorePointRevokeAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.RevokeAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "RevokeAccess", nil, "Failure preparing request") + return + } + + result, err = client.RevokeAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "RevokeAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// RevokeAccessPreparer prepares the RevokeAccess request. +func (client DiskRestorePointClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskRestorePointName": autorest.Encode("path", diskRestorePointName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmRestorePointName": autorest.Encode("path", VMRestorePointName), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RevokeAccessSender sends the RevokeAccess request. The method will close the +// http.Response Body if it receives an error. +func (client DiskRestorePointClient) RevokeAccessSender(req *http.Request) (future DiskRestorePointRevokeAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RevokeAccessResponder handles the response to the RevokeAccess request. The method always +// closes the http.Response Body. +func (client DiskRestorePointClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/disks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/disks.go new file mode 100644 index 000000000000..a8a4f41132a0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/disks.go @@ -0,0 +1,774 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// DisksClient is the compute Client +type DisksClient struct { + BaseClient +} + +// NewDisksClient creates an instance of the DisksClient client. +func NewDisksClient(subscriptionID string) DisksClient { + return NewDisksClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewDisksClientWithBaseURI creates an instance of the DisksClient client using a custom endpoint. Use this when +// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewDisksClientWithBaseURI(baseURI string, subscriptionID string) DisksClient { + return DisksClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +// disk - disk object supplied in the body of the Put disk operation. +func (client DisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (result DisksCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: disk, + Constraints: []validation.Constraint{{Target: "disk.DiskProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "disk.DiskProperties.PurchasePlan", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "disk.DiskProperties.PurchasePlan.Publisher", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "disk.DiskProperties.PurchasePlan.Name", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "disk.DiskProperties.PurchasePlan.Product", Name: validation.Null, Rule: true, Chain: nil}, + }}, + {Target: "disk.DiskProperties.CreationData", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "disk.DiskProperties.EncryptionSettingsCollection", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "disk.DiskProperties.EncryptionSettingsCollection.Enabled", Name: validation.Null, Rule: true, Chain: nil}}}, + }}}}}); err != nil { + return result, validation.NewError("compute.DisksClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskName, disk) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client DisksClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + disk.ManagedBy = nil + disk.ManagedByExtended = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), + autorest.WithJSON(disk), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) CreateOrUpdateSender(req *http.Request) (future DisksCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client DisksClient) CreateOrUpdateResponder(resp *http.Response) (result Disk, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +func (client DisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (result DisksDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, diskName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client DisksClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) DeleteSender(req *http.Request) (future DisksDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client DisksClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets information about a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +func (client DisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result Disk, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, diskName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client DisksClient) GetPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client DisksClient) GetResponder(resp *http.Response) (result Disk, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GrantAccess grants access to a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +// grantAccessData - access data object supplied in the body of the get disk access operation. +func (client DisksClient) GrantAccess(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (result DisksGrantAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.GrantAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: grantAccessData, + Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.DisksClient", "GrantAccess", err.Error()) + } + + req, err := client.GrantAccessPreparer(ctx, resourceGroupName, diskName, grantAccessData) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", nil, "Failure preparing request") + return + } + + result, err = client.GrantAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// GrantAccessPreparer prepares the GrantAccess request. +func (client DisksClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", pathParameters), + autorest.WithJSON(grantAccessData), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GrantAccessSender sends the GrantAccess request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) GrantAccessSender(req *http.Request) (future DisksGrantAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// GrantAccessResponder handles the response to the GrantAccess request. The method always +// closes the http.Response Body. +func (client DisksClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the disks under a subscription. +func (client DisksClient) List(ctx context.Context) (result DiskListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List") + defer func() { + sc := -1 + if result.dl.Response.Response != nil { + sc = result.dl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.dl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure sending request") + return + } + + result.dl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure responding to request") + return + } + if result.dl.hasNextLink() && result.dl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client DisksClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client DisksClient) ListResponder(resp *http.Response) (result DiskList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client DisksClient) listNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) { + req, err := lastResults.diskListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client DisksClient) ListComplete(ctx context.Context) (result DiskListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListByResourceGroup lists all the disks under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client DisksClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.dl.Response.Response != nil { + sc = result.dl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.dl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.dl, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.dl.hasNextLink() && result.dl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client DisksClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client DisksClient) ListByResourceGroupResponder(resp *http.Response) (result DiskList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client DisksClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) { + req, err := lastResults.diskListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client DisksClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// RevokeAccess revokes access to a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +func (client DisksClient) RevokeAccess(ctx context.Context, resourceGroupName string, diskName string) (result DisksRevokeAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.RevokeAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, diskName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", nil, "Failure preparing request") + return + } + + result, err = client.RevokeAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// RevokeAccessPreparer prepares the RevokeAccess request. +func (client DisksClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RevokeAccessSender sends the RevokeAccess request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) RevokeAccessSender(req *http.Request) (future DisksRevokeAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RevokeAccessResponder handles the response to the RevokeAccess request. The method always +// closes the http.Response Body. +func (client DisksClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update updates (patches) a disk. +// Parameters: +// resourceGroupName - the name of the resource group. +// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is +// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 +// characters. +// disk - disk object supplied in the body of the Patch disk operation. +func (client DisksClient) Update(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (result DisksUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, diskName, disk) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client DisksClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "diskName": autorest.Encode("path", diskName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), + autorest.WithJSON(disk), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client DisksClient) UpdateSender(req *http.Request) (future DisksUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client DisksClient) UpdateResponder(resp *http.Response) (result Disk, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/enums.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/enums.go new file mode 100644 index 000000000000..cf404eb9a131 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/enums.go @@ -0,0 +1,2248 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +// AccessLevel enumerates the values for access level. +type AccessLevel string + +const ( + // None ... + None AccessLevel = "None" + // Read ... + Read AccessLevel = "Read" + // Write ... + Write AccessLevel = "Write" +) + +// PossibleAccessLevelValues returns an array of possible values for the AccessLevel const type. +func PossibleAccessLevelValues() []AccessLevel { + return []AccessLevel{None, Read, Write} +} + +// AggregatedReplicationState enumerates the values for aggregated replication state. +type AggregatedReplicationState string + +const ( + // Completed ... + Completed AggregatedReplicationState = "Completed" + // Failed ... + Failed AggregatedReplicationState = "Failed" + // InProgress ... + InProgress AggregatedReplicationState = "InProgress" + // Unknown ... + Unknown AggregatedReplicationState = "Unknown" +) + +// PossibleAggregatedReplicationStateValues returns an array of possible values for the AggregatedReplicationState const type. +func PossibleAggregatedReplicationStateValues() []AggregatedReplicationState { + return []AggregatedReplicationState{Completed, Failed, InProgress, Unknown} +} + +// Architecture enumerates the values for architecture. +type Architecture string + +const ( + // Arm64 ... + Arm64 Architecture = "Arm64" + // X64 ... + X64 Architecture = "x64" +) + +// PossibleArchitectureValues returns an array of possible values for the Architecture const type. +func PossibleArchitectureValues() []Architecture { + return []Architecture{Arm64, X64} +} + +// ArchitectureTypes enumerates the values for architecture types. +type ArchitectureTypes string + +const ( + // ArchitectureTypesArm64 ... + ArchitectureTypesArm64 ArchitectureTypes = "Arm64" + // ArchitectureTypesX64 ... + ArchitectureTypesX64 ArchitectureTypes = "x64" +) + +// PossibleArchitectureTypesValues returns an array of possible values for the ArchitectureTypes const type. +func PossibleArchitectureTypesValues() []ArchitectureTypes { + return []ArchitectureTypes{ArchitectureTypesArm64, ArchitectureTypesX64} +} + +// AvailabilitySetSkuTypes enumerates the values for availability set sku types. +type AvailabilitySetSkuTypes string + +const ( + // Aligned ... + Aligned AvailabilitySetSkuTypes = "Aligned" + // Classic ... + Classic AvailabilitySetSkuTypes = "Classic" +) + +// PossibleAvailabilitySetSkuTypesValues returns an array of possible values for the AvailabilitySetSkuTypes const type. +func PossibleAvailabilitySetSkuTypesValues() []AvailabilitySetSkuTypes { + return []AvailabilitySetSkuTypes{Aligned, Classic} +} + +// CachingTypes enumerates the values for caching types. +type CachingTypes string + +const ( + // CachingTypesNone ... + CachingTypesNone CachingTypes = "None" + // CachingTypesReadOnly ... + CachingTypesReadOnly CachingTypes = "ReadOnly" + // CachingTypesReadWrite ... + CachingTypesReadWrite CachingTypes = "ReadWrite" +) + +// PossibleCachingTypesValues returns an array of possible values for the CachingTypes const type. +func PossibleCachingTypesValues() []CachingTypes { + return []CachingTypes{CachingTypesNone, CachingTypesReadOnly, CachingTypesReadWrite} +} + +// CapacityReservationGroupInstanceViewTypes enumerates the values for capacity reservation group instance view +// types. +type CapacityReservationGroupInstanceViewTypes string + +const ( + // InstanceView ... + InstanceView CapacityReservationGroupInstanceViewTypes = "instanceView" +) + +// PossibleCapacityReservationGroupInstanceViewTypesValues returns an array of possible values for the CapacityReservationGroupInstanceViewTypes const type. +func PossibleCapacityReservationGroupInstanceViewTypesValues() []CapacityReservationGroupInstanceViewTypes { + return []CapacityReservationGroupInstanceViewTypes{InstanceView} +} + +// CapacityReservationInstanceViewTypes enumerates the values for capacity reservation instance view types. +type CapacityReservationInstanceViewTypes string + +const ( + // CapacityReservationInstanceViewTypesInstanceView ... + CapacityReservationInstanceViewTypesInstanceView CapacityReservationInstanceViewTypes = "instanceView" +) + +// PossibleCapacityReservationInstanceViewTypesValues returns an array of possible values for the CapacityReservationInstanceViewTypes const type. +func PossibleCapacityReservationInstanceViewTypesValues() []CapacityReservationInstanceViewTypes { + return []CapacityReservationInstanceViewTypes{CapacityReservationInstanceViewTypesInstanceView} +} + +// CloudServiceSlotType enumerates the values for cloud service slot type. +type CloudServiceSlotType string + +const ( + // Production ... + Production CloudServiceSlotType = "Production" + // Staging ... + Staging CloudServiceSlotType = "Staging" +) + +// PossibleCloudServiceSlotTypeValues returns an array of possible values for the CloudServiceSlotType const type. +func PossibleCloudServiceSlotTypeValues() []CloudServiceSlotType { + return []CloudServiceSlotType{Production, Staging} +} + +// CloudServiceUpgradeMode enumerates the values for cloud service upgrade mode. +type CloudServiceUpgradeMode string + +const ( + // Auto ... + Auto CloudServiceUpgradeMode = "Auto" + // Manual ... + Manual CloudServiceUpgradeMode = "Manual" + // Simultaneous ... + Simultaneous CloudServiceUpgradeMode = "Simultaneous" +) + +// PossibleCloudServiceUpgradeModeValues returns an array of possible values for the CloudServiceUpgradeMode const type. +func PossibleCloudServiceUpgradeModeValues() []CloudServiceUpgradeMode { + return []CloudServiceUpgradeMode{Auto, Manual, Simultaneous} +} + +// ComponentNames enumerates the values for component names. +type ComponentNames string + +const ( + // MicrosoftWindowsShellSetup ... + MicrosoftWindowsShellSetup ComponentNames = "Microsoft-Windows-Shell-Setup" +) + +// PossibleComponentNamesValues returns an array of possible values for the ComponentNames const type. +func PossibleComponentNamesValues() []ComponentNames { + return []ComponentNames{MicrosoftWindowsShellSetup} +} + +// ConfidentialVMEncryptionType enumerates the values for confidential vm encryption type. +type ConfidentialVMEncryptionType string + +const ( + // EncryptedVMGuestStateOnlyWithPmk ... + EncryptedVMGuestStateOnlyWithPmk ConfidentialVMEncryptionType = "EncryptedVMGuestStateOnlyWithPmk" + // EncryptedWithCmk ... + EncryptedWithCmk ConfidentialVMEncryptionType = "EncryptedWithCmk" + // EncryptedWithPmk ... + EncryptedWithPmk ConfidentialVMEncryptionType = "EncryptedWithPmk" +) + +// PossibleConfidentialVMEncryptionTypeValues returns an array of possible values for the ConfidentialVMEncryptionType const type. +func PossibleConfidentialVMEncryptionTypeValues() []ConfidentialVMEncryptionType { + return []ConfidentialVMEncryptionType{EncryptedVMGuestStateOnlyWithPmk, EncryptedWithCmk, EncryptedWithPmk} +} + +// ConsistencyModeTypes enumerates the values for consistency mode types. +type ConsistencyModeTypes string + +const ( + // ApplicationConsistent ... + ApplicationConsistent ConsistencyModeTypes = "ApplicationConsistent" + // CrashConsistent ... + CrashConsistent ConsistencyModeTypes = "CrashConsistent" + // FileSystemConsistent ... + FileSystemConsistent ConsistencyModeTypes = "FileSystemConsistent" +) + +// PossibleConsistencyModeTypesValues returns an array of possible values for the ConsistencyModeTypes const type. +func PossibleConsistencyModeTypesValues() []ConsistencyModeTypes { + return []ConsistencyModeTypes{ApplicationConsistent, CrashConsistent, FileSystemConsistent} +} + +// DataAccessAuthMode enumerates the values for data access auth mode. +type DataAccessAuthMode string + +const ( + // DataAccessAuthModeAzureActiveDirectory When export/upload URL is used, the system checks if the user has + // an identity in Azure Active Directory and has necessary permissions to export/upload the data. Please + // refer to aka.ms/DisksAzureADAuth. + DataAccessAuthModeAzureActiveDirectory DataAccessAuthMode = "AzureActiveDirectory" + // DataAccessAuthModeNone No additional authentication would be performed when accessing export/upload URL. + DataAccessAuthModeNone DataAccessAuthMode = "None" +) + +// PossibleDataAccessAuthModeValues returns an array of possible values for the DataAccessAuthMode const type. +func PossibleDataAccessAuthModeValues() []DataAccessAuthMode { + return []DataAccessAuthMode{DataAccessAuthModeAzureActiveDirectory, DataAccessAuthModeNone} +} + +// DedicatedHostLicenseTypes enumerates the values for dedicated host license types. +type DedicatedHostLicenseTypes string + +const ( + // DedicatedHostLicenseTypesNone ... + DedicatedHostLicenseTypesNone DedicatedHostLicenseTypes = "None" + // DedicatedHostLicenseTypesWindowsServerHybrid ... + DedicatedHostLicenseTypesWindowsServerHybrid DedicatedHostLicenseTypes = "Windows_Server_Hybrid" + // DedicatedHostLicenseTypesWindowsServerPerpetual ... + DedicatedHostLicenseTypesWindowsServerPerpetual DedicatedHostLicenseTypes = "Windows_Server_Perpetual" +) + +// PossibleDedicatedHostLicenseTypesValues returns an array of possible values for the DedicatedHostLicenseTypes const type. +func PossibleDedicatedHostLicenseTypesValues() []DedicatedHostLicenseTypes { + return []DedicatedHostLicenseTypes{DedicatedHostLicenseTypesNone, DedicatedHostLicenseTypesWindowsServerHybrid, DedicatedHostLicenseTypesWindowsServerPerpetual} +} + +// DeleteOptions enumerates the values for delete options. +type DeleteOptions string + +const ( + // Delete ... + Delete DeleteOptions = "Delete" + // Detach ... + Detach DeleteOptions = "Detach" +) + +// PossibleDeleteOptionsValues returns an array of possible values for the DeleteOptions const type. +func PossibleDeleteOptionsValues() []DeleteOptions { + return []DeleteOptions{Delete, Detach} +} + +// DiffDiskOptions enumerates the values for diff disk options. +type DiffDiskOptions string + +const ( + // Local ... + Local DiffDiskOptions = "Local" +) + +// PossibleDiffDiskOptionsValues returns an array of possible values for the DiffDiskOptions const type. +func PossibleDiffDiskOptionsValues() []DiffDiskOptions { + return []DiffDiskOptions{Local} +} + +// DiffDiskPlacement enumerates the values for diff disk placement. +type DiffDiskPlacement string + +const ( + // CacheDisk ... + CacheDisk DiffDiskPlacement = "CacheDisk" + // ResourceDisk ... + ResourceDisk DiffDiskPlacement = "ResourceDisk" +) + +// PossibleDiffDiskPlacementValues returns an array of possible values for the DiffDiskPlacement const type. +func PossibleDiffDiskPlacementValues() []DiffDiskPlacement { + return []DiffDiskPlacement{CacheDisk, ResourceDisk} +} + +// DiskControllerTypes enumerates the values for disk controller types. +type DiskControllerTypes string + +const ( + // NVMe ... + NVMe DiskControllerTypes = "NVMe" + // SCSI ... + SCSI DiskControllerTypes = "SCSI" +) + +// PossibleDiskControllerTypesValues returns an array of possible values for the DiskControllerTypes const type. +func PossibleDiskControllerTypesValues() []DiskControllerTypes { + return []DiskControllerTypes{NVMe, SCSI} +} + +// DiskCreateOption enumerates the values for disk create option. +type DiskCreateOption string + +const ( + // Attach Disk will be attached to a VM. + Attach DiskCreateOption = "Attach" + // Copy Create a new disk or snapshot by copying from a disk or snapshot specified by the given + // sourceResourceId. + Copy DiskCreateOption = "Copy" + // CopyStart Create a new disk by using a deep copy process, where the resource creation is considered + // complete only after all data has been copied from the source. + CopyStart DiskCreateOption = "CopyStart" + // Empty Create an empty data disk of a size given by diskSizeGB. + Empty DiskCreateOption = "Empty" + // FromImage Create a new disk from a platform image specified by the given imageReference or + // galleryImageReference. + FromImage DiskCreateOption = "FromImage" + // Import Create a disk by importing from a blob specified by a sourceUri in a storage account specified by + // storageAccountId. + Import DiskCreateOption = "Import" + // ImportSecure Similar to Import create option. Create a new Trusted Launch VM or Confidential VM + // supported disk by importing additional blob for VM guest state specified by securityDataUri in storage + // account specified by storageAccountId + ImportSecure DiskCreateOption = "ImportSecure" + // Restore Create a new disk by copying from a backup recovery point. + Restore DiskCreateOption = "Restore" + // Upload Create a new disk by obtaining a write token and using it to directly upload the contents of the + // disk. + Upload DiskCreateOption = "Upload" + // UploadPreparedSecure Similar to Upload create option. Create a new Trusted Launch VM or Confidential VM + // supported disk and upload using write token in both disk and VM guest state + UploadPreparedSecure DiskCreateOption = "UploadPreparedSecure" +) + +// PossibleDiskCreateOptionValues returns an array of possible values for the DiskCreateOption const type. +func PossibleDiskCreateOptionValues() []DiskCreateOption { + return []DiskCreateOption{Attach, Copy, CopyStart, Empty, FromImage, Import, ImportSecure, Restore, Upload, UploadPreparedSecure} +} + +// DiskCreateOptionTypes enumerates the values for disk create option types. +type DiskCreateOptionTypes string + +const ( + // DiskCreateOptionTypesAttach ... + DiskCreateOptionTypesAttach DiskCreateOptionTypes = "Attach" + // DiskCreateOptionTypesEmpty ... + DiskCreateOptionTypesEmpty DiskCreateOptionTypes = "Empty" + // DiskCreateOptionTypesFromImage ... + DiskCreateOptionTypesFromImage DiskCreateOptionTypes = "FromImage" +) + +// PossibleDiskCreateOptionTypesValues returns an array of possible values for the DiskCreateOptionTypes const type. +func PossibleDiskCreateOptionTypesValues() []DiskCreateOptionTypes { + return []DiskCreateOptionTypes{DiskCreateOptionTypesAttach, DiskCreateOptionTypesEmpty, DiskCreateOptionTypesFromImage} +} + +// DiskDeleteOptionTypes enumerates the values for disk delete option types. +type DiskDeleteOptionTypes string + +const ( + // DiskDeleteOptionTypesDelete ... + DiskDeleteOptionTypesDelete DiskDeleteOptionTypes = "Delete" + // DiskDeleteOptionTypesDetach ... + DiskDeleteOptionTypesDetach DiskDeleteOptionTypes = "Detach" +) + +// PossibleDiskDeleteOptionTypesValues returns an array of possible values for the DiskDeleteOptionTypes const type. +func PossibleDiskDeleteOptionTypesValues() []DiskDeleteOptionTypes { + return []DiskDeleteOptionTypes{DiskDeleteOptionTypesDelete, DiskDeleteOptionTypesDetach} +} + +// DiskDetachOptionTypes enumerates the values for disk detach option types. +type DiskDetachOptionTypes string + +const ( + // ForceDetach ... + ForceDetach DiskDetachOptionTypes = "ForceDetach" +) + +// PossibleDiskDetachOptionTypesValues returns an array of possible values for the DiskDetachOptionTypes const type. +func PossibleDiskDetachOptionTypesValues() []DiskDetachOptionTypes { + return []DiskDetachOptionTypes{ForceDetach} +} + +// DiskEncryptionSetIdentityType enumerates the values for disk encryption set identity type. +type DiskEncryptionSetIdentityType string + +const ( + // DiskEncryptionSetIdentityTypeNone ... + DiskEncryptionSetIdentityTypeNone DiskEncryptionSetIdentityType = "None" + // DiskEncryptionSetIdentityTypeSystemAssigned ... + DiskEncryptionSetIdentityTypeSystemAssigned DiskEncryptionSetIdentityType = "SystemAssigned" + // DiskEncryptionSetIdentityTypeSystemAssignedUserAssigned ... + DiskEncryptionSetIdentityTypeSystemAssignedUserAssigned DiskEncryptionSetIdentityType = "SystemAssigned, UserAssigned" + // DiskEncryptionSetIdentityTypeUserAssigned ... + DiskEncryptionSetIdentityTypeUserAssigned DiskEncryptionSetIdentityType = "UserAssigned" +) + +// PossibleDiskEncryptionSetIdentityTypeValues returns an array of possible values for the DiskEncryptionSetIdentityType const type. +func PossibleDiskEncryptionSetIdentityTypeValues() []DiskEncryptionSetIdentityType { + return []DiskEncryptionSetIdentityType{DiskEncryptionSetIdentityTypeNone, DiskEncryptionSetIdentityTypeSystemAssigned, DiskEncryptionSetIdentityTypeSystemAssignedUserAssigned, DiskEncryptionSetIdentityTypeUserAssigned} +} + +// DiskEncryptionSetType enumerates the values for disk encryption set type. +type DiskEncryptionSetType string + +const ( + // ConfidentialVMEncryptedWithCustomerKey Confidential VM supported disk and VM guest state would be + // encrypted with customer managed key. + ConfidentialVMEncryptedWithCustomerKey DiskEncryptionSetType = "ConfidentialVmEncryptedWithCustomerKey" + // EncryptionAtRestWithCustomerKey Resource using diskEncryptionSet would be encrypted at rest with + // Customer managed key that can be changed and revoked by a customer. + EncryptionAtRestWithCustomerKey DiskEncryptionSetType = "EncryptionAtRestWithCustomerKey" + // EncryptionAtRestWithPlatformAndCustomerKeys Resource using diskEncryptionSet would be encrypted at rest + // with two layers of encryption. One of the keys is Customer managed and the other key is Platform + // managed. + EncryptionAtRestWithPlatformAndCustomerKeys DiskEncryptionSetType = "EncryptionAtRestWithPlatformAndCustomerKeys" +) + +// PossibleDiskEncryptionSetTypeValues returns an array of possible values for the DiskEncryptionSetType const type. +func PossibleDiskEncryptionSetTypeValues() []DiskEncryptionSetType { + return []DiskEncryptionSetType{ConfidentialVMEncryptedWithCustomerKey, EncryptionAtRestWithCustomerKey, EncryptionAtRestWithPlatformAndCustomerKeys} +} + +// DiskSecurityTypes enumerates the values for disk security types. +type DiskSecurityTypes string + +const ( + // ConfidentialVMDiskEncryptedWithCustomerKey Indicates Confidential VM disk with both OS disk and VM guest + // state encrypted with a customer managed key + ConfidentialVMDiskEncryptedWithCustomerKey DiskSecurityTypes = "ConfidentialVM_DiskEncryptedWithCustomerKey" + // ConfidentialVMDiskEncryptedWithPlatformKey Indicates Confidential VM disk with both OS disk and VM guest + // state encrypted with a platform managed key + ConfidentialVMDiskEncryptedWithPlatformKey DiskSecurityTypes = "ConfidentialVM_DiskEncryptedWithPlatformKey" + // ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey Indicates Confidential VM disk with only VM guest + // state encrypted + ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey DiskSecurityTypes = "ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey" + // TrustedLaunch Trusted Launch provides security features such as secure boot and virtual Trusted Platform + // Module (vTPM) + TrustedLaunch DiskSecurityTypes = "TrustedLaunch" +) + +// PossibleDiskSecurityTypesValues returns an array of possible values for the DiskSecurityTypes const type. +func PossibleDiskSecurityTypesValues() []DiskSecurityTypes { + return []DiskSecurityTypes{ConfidentialVMDiskEncryptedWithCustomerKey, ConfidentialVMDiskEncryptedWithPlatformKey, ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey, TrustedLaunch} +} + +// DiskState enumerates the values for disk state. +type DiskState string + +const ( + // ActiveSAS The disk currently has an Active SAS Uri associated with it. + ActiveSAS DiskState = "ActiveSAS" + // ActiveSASFrozen The disk is attached to a VM in hibernated state and has an active SAS URI associated + // with it. + ActiveSASFrozen DiskState = "ActiveSASFrozen" + // ActiveUpload A disk is created for upload and a write token has been issued for uploading to it. + ActiveUpload DiskState = "ActiveUpload" + // Attached The disk is currently attached to a running VM. + Attached DiskState = "Attached" + // Frozen The disk is attached to a VM which is in hibernated state. + Frozen DiskState = "Frozen" + // ReadyToUpload A disk is ready to be created by upload by requesting a write token. + ReadyToUpload DiskState = "ReadyToUpload" + // Reserved The disk is attached to a stopped-deallocated VM. + Reserved DiskState = "Reserved" + // Unattached The disk is not being used and can be attached to a VM. + Unattached DiskState = "Unattached" +) + +// PossibleDiskStateValues returns an array of possible values for the DiskState const type. +func PossibleDiskStateValues() []DiskState { + return []DiskState{ActiveSAS, ActiveSASFrozen, ActiveUpload, Attached, Frozen, ReadyToUpload, Reserved, Unattached} +} + +// DiskStorageAccountTypes enumerates the values for disk storage account types. +type DiskStorageAccountTypes string + +const ( + // PremiumLRS Premium SSD locally redundant storage. Best for production and performance sensitive + // workloads. + PremiumLRS DiskStorageAccountTypes = "Premium_LRS" + // PremiumV2LRS Premium SSD v2 locally redundant storage. Best for production and performance-sensitive + // workloads that consistently require low latency and high IOPS and throughput. + PremiumV2LRS DiskStorageAccountTypes = "PremiumV2_LRS" + // PremiumZRS Premium SSD zone redundant storage. Best for the production workloads that need storage + // resiliency against zone failures. + PremiumZRS DiskStorageAccountTypes = "Premium_ZRS" + // StandardLRS Standard HDD locally redundant storage. Best for backup, non-critical, and infrequent + // access. + StandardLRS DiskStorageAccountTypes = "Standard_LRS" + // StandardSSDLRS Standard SSD locally redundant storage. Best for web servers, lightly used enterprise + // applications and dev/test. + StandardSSDLRS DiskStorageAccountTypes = "StandardSSD_LRS" + // StandardSSDZRS Standard SSD zone redundant storage. Best for web servers, lightly used enterprise + // applications and dev/test that need storage resiliency against zone failures. + StandardSSDZRS DiskStorageAccountTypes = "StandardSSD_ZRS" + // UltraSSDLRS Ultra SSD locally redundant storage. Best for IO-intensive workloads such as SAP HANA, top + // tier databases (for example, SQL, Oracle), and other transaction-heavy workloads. + UltraSSDLRS DiskStorageAccountTypes = "UltraSSD_LRS" +) + +// PossibleDiskStorageAccountTypesValues returns an array of possible values for the DiskStorageAccountTypes const type. +func PossibleDiskStorageAccountTypesValues() []DiskStorageAccountTypes { + return []DiskStorageAccountTypes{PremiumLRS, PremiumV2LRS, PremiumZRS, StandardLRS, StandardSSDLRS, StandardSSDZRS, UltraSSDLRS} +} + +// EncryptionType enumerates the values for encryption type. +type EncryptionType string + +const ( + // EncryptionTypeEncryptionAtRestWithCustomerKey Disk is encrypted at rest with Customer managed key that + // can be changed and revoked by a customer. + EncryptionTypeEncryptionAtRestWithCustomerKey EncryptionType = "EncryptionAtRestWithCustomerKey" + // EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys Disk is encrypted at rest with 2 layers of + // encryption. One of the keys is Customer managed and the other key is Platform managed. + EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys EncryptionType = "EncryptionAtRestWithPlatformAndCustomerKeys" + // EncryptionTypeEncryptionAtRestWithPlatformKey Disk is encrypted at rest with Platform managed key. It is + // the default encryption type. This is not a valid encryption type for disk encryption sets. + EncryptionTypeEncryptionAtRestWithPlatformKey EncryptionType = "EncryptionAtRestWithPlatformKey" +) + +// PossibleEncryptionTypeValues returns an array of possible values for the EncryptionType const type. +func PossibleEncryptionTypeValues() []EncryptionType { + return []EncryptionType{EncryptionTypeEncryptionAtRestWithCustomerKey, EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys, EncryptionTypeEncryptionAtRestWithPlatformKey} +} + +// ExecutionState enumerates the values for execution state. +type ExecutionState string + +const ( + // ExecutionStateCanceled ... + ExecutionStateCanceled ExecutionState = "Canceled" + // ExecutionStateFailed ... + ExecutionStateFailed ExecutionState = "Failed" + // ExecutionStatePending ... + ExecutionStatePending ExecutionState = "Pending" + // ExecutionStateRunning ... + ExecutionStateRunning ExecutionState = "Running" + // ExecutionStateSucceeded ... + ExecutionStateSucceeded ExecutionState = "Succeeded" + // ExecutionStateTimedOut ... + ExecutionStateTimedOut ExecutionState = "TimedOut" + // ExecutionStateUnknown ... + ExecutionStateUnknown ExecutionState = "Unknown" +) + +// PossibleExecutionStateValues returns an array of possible values for the ExecutionState const type. +func PossibleExecutionStateValues() []ExecutionState { + return []ExecutionState{ExecutionStateCanceled, ExecutionStateFailed, ExecutionStatePending, ExecutionStateRunning, ExecutionStateSucceeded, ExecutionStateTimedOut, ExecutionStateUnknown} +} + +// ExpandTypesForGetCapacityReservationGroups enumerates the values for expand types for get capacity +// reservation groups. +type ExpandTypesForGetCapacityReservationGroups string + +const ( + // VirtualMachineScaleSetVMsref ... + VirtualMachineScaleSetVMsref ExpandTypesForGetCapacityReservationGroups = "virtualMachineScaleSetVMs/$ref" + // VirtualMachinesref ... + VirtualMachinesref ExpandTypesForGetCapacityReservationGroups = "virtualMachines/$ref" +) + +// PossibleExpandTypesForGetCapacityReservationGroupsValues returns an array of possible values for the ExpandTypesForGetCapacityReservationGroups const type. +func PossibleExpandTypesForGetCapacityReservationGroupsValues() []ExpandTypesForGetCapacityReservationGroups { + return []ExpandTypesForGetCapacityReservationGroups{VirtualMachineScaleSetVMsref, VirtualMachinesref} +} + +// ExpandTypesForGetVMScaleSets enumerates the values for expand types for get vm scale sets. +type ExpandTypesForGetVMScaleSets string + +const ( + // UserData ... + UserData ExpandTypesForGetVMScaleSets = "userData" +) + +// PossibleExpandTypesForGetVMScaleSetsValues returns an array of possible values for the ExpandTypesForGetVMScaleSets const type. +func PossibleExpandTypesForGetVMScaleSetsValues() []ExpandTypesForGetVMScaleSets { + return []ExpandTypesForGetVMScaleSets{UserData} +} + +// ExtendedLocationType enumerates the values for extended location type. +type ExtendedLocationType string + +const ( + // EdgeZone ... + EdgeZone ExtendedLocationType = "EdgeZone" +) + +// PossibleExtendedLocationTypeValues returns an array of possible values for the ExtendedLocationType const type. +func PossibleExtendedLocationTypeValues() []ExtendedLocationType { + return []ExtendedLocationType{EdgeZone} +} + +// ExtendedLocationTypes enumerates the values for extended location types. +type ExtendedLocationTypes string + +const ( + // ExtendedLocationTypesEdgeZone ... + ExtendedLocationTypesEdgeZone ExtendedLocationTypes = "EdgeZone" +) + +// PossibleExtendedLocationTypesValues returns an array of possible values for the ExtendedLocationTypes const type. +func PossibleExtendedLocationTypesValues() []ExtendedLocationTypes { + return []ExtendedLocationTypes{ExtendedLocationTypesEdgeZone} +} + +// GalleryExpandParams enumerates the values for gallery expand params. +type GalleryExpandParams string + +const ( + // SharingProfileGroups ... + SharingProfileGroups GalleryExpandParams = "SharingProfile/Groups" +) + +// PossibleGalleryExpandParamsValues returns an array of possible values for the GalleryExpandParams const type. +func PossibleGalleryExpandParamsValues() []GalleryExpandParams { + return []GalleryExpandParams{SharingProfileGroups} +} + +// GalleryExtendedLocationType enumerates the values for gallery extended location type. +type GalleryExtendedLocationType string + +const ( + // GalleryExtendedLocationTypeEdgeZone ... + GalleryExtendedLocationTypeEdgeZone GalleryExtendedLocationType = "EdgeZone" + // GalleryExtendedLocationTypeUnknown ... + GalleryExtendedLocationTypeUnknown GalleryExtendedLocationType = "Unknown" +) + +// PossibleGalleryExtendedLocationTypeValues returns an array of possible values for the GalleryExtendedLocationType const type. +func PossibleGalleryExtendedLocationTypeValues() []GalleryExtendedLocationType { + return []GalleryExtendedLocationType{GalleryExtendedLocationTypeEdgeZone, GalleryExtendedLocationTypeUnknown} +} + +// GalleryProvisioningState enumerates the values for gallery provisioning state. +type GalleryProvisioningState string + +const ( + // GalleryProvisioningStateCreating ... + GalleryProvisioningStateCreating GalleryProvisioningState = "Creating" + // GalleryProvisioningStateDeleting ... + GalleryProvisioningStateDeleting GalleryProvisioningState = "Deleting" + // GalleryProvisioningStateFailed ... + GalleryProvisioningStateFailed GalleryProvisioningState = "Failed" + // GalleryProvisioningStateMigrating ... + GalleryProvisioningStateMigrating GalleryProvisioningState = "Migrating" + // GalleryProvisioningStateSucceeded ... + GalleryProvisioningStateSucceeded GalleryProvisioningState = "Succeeded" + // GalleryProvisioningStateUpdating ... + GalleryProvisioningStateUpdating GalleryProvisioningState = "Updating" +) + +// PossibleGalleryProvisioningStateValues returns an array of possible values for the GalleryProvisioningState const type. +func PossibleGalleryProvisioningStateValues() []GalleryProvisioningState { + return []GalleryProvisioningState{GalleryProvisioningStateCreating, GalleryProvisioningStateDeleting, GalleryProvisioningStateFailed, GalleryProvisioningStateMigrating, GalleryProvisioningStateSucceeded, GalleryProvisioningStateUpdating} +} + +// GallerySharingPermissionTypes enumerates the values for gallery sharing permission types. +type GallerySharingPermissionTypes string + +const ( + // Community ... + Community GallerySharingPermissionTypes = "Community" + // Groups ... + Groups GallerySharingPermissionTypes = "Groups" + // Private ... + Private GallerySharingPermissionTypes = "Private" +) + +// PossibleGallerySharingPermissionTypesValues returns an array of possible values for the GallerySharingPermissionTypes const type. +func PossibleGallerySharingPermissionTypesValues() []GallerySharingPermissionTypes { + return []GallerySharingPermissionTypes{Community, Groups, Private} +} + +// HostCaching enumerates the values for host caching. +type HostCaching string + +const ( + // HostCachingNone ... + HostCachingNone HostCaching = "None" + // HostCachingReadOnly ... + HostCachingReadOnly HostCaching = "ReadOnly" + // HostCachingReadWrite ... + HostCachingReadWrite HostCaching = "ReadWrite" +) + +// PossibleHostCachingValues returns an array of possible values for the HostCaching const type. +func PossibleHostCachingValues() []HostCaching { + return []HostCaching{HostCachingNone, HostCachingReadOnly, HostCachingReadWrite} +} + +// HyperVGeneration enumerates the values for hyper v generation. +type HyperVGeneration string + +const ( + // V1 ... + V1 HyperVGeneration = "V1" + // V2 ... + V2 HyperVGeneration = "V2" +) + +// PossibleHyperVGenerationValues returns an array of possible values for the HyperVGeneration const type. +func PossibleHyperVGenerationValues() []HyperVGeneration { + return []HyperVGeneration{V1, V2} +} + +// HyperVGenerationType enumerates the values for hyper v generation type. +type HyperVGenerationType string + +const ( + // HyperVGenerationTypeV1 ... + HyperVGenerationTypeV1 HyperVGenerationType = "V1" + // HyperVGenerationTypeV2 ... + HyperVGenerationTypeV2 HyperVGenerationType = "V2" +) + +// PossibleHyperVGenerationTypeValues returns an array of possible values for the HyperVGenerationType const type. +func PossibleHyperVGenerationTypeValues() []HyperVGenerationType { + return []HyperVGenerationType{HyperVGenerationTypeV1, HyperVGenerationTypeV2} +} + +// HyperVGenerationTypes enumerates the values for hyper v generation types. +type HyperVGenerationTypes string + +const ( + // HyperVGenerationTypesV1 ... + HyperVGenerationTypesV1 HyperVGenerationTypes = "V1" + // HyperVGenerationTypesV2 ... + HyperVGenerationTypesV2 HyperVGenerationTypes = "V2" +) + +// PossibleHyperVGenerationTypesValues returns an array of possible values for the HyperVGenerationTypes const type. +func PossibleHyperVGenerationTypesValues() []HyperVGenerationTypes { + return []HyperVGenerationTypes{HyperVGenerationTypesV1, HyperVGenerationTypesV2} +} + +// InstanceViewTypes enumerates the values for instance view types. +type InstanceViewTypes string + +const ( + // InstanceViewTypesInstanceView ... + InstanceViewTypesInstanceView InstanceViewTypes = "instanceView" + // InstanceViewTypesUserData ... + InstanceViewTypesUserData InstanceViewTypes = "userData" +) + +// PossibleInstanceViewTypesValues returns an array of possible values for the InstanceViewTypes const type. +func PossibleInstanceViewTypesValues() []InstanceViewTypes { + return []InstanceViewTypes{InstanceViewTypesInstanceView, InstanceViewTypesUserData} +} + +// IntervalInMins enumerates the values for interval in mins. +type IntervalInMins string + +const ( + // FiveMins ... + FiveMins IntervalInMins = "FiveMins" + // SixtyMins ... + SixtyMins IntervalInMins = "SixtyMins" + // ThirtyMins ... + ThirtyMins IntervalInMins = "ThirtyMins" + // ThreeMins ... + ThreeMins IntervalInMins = "ThreeMins" +) + +// PossibleIntervalInMinsValues returns an array of possible values for the IntervalInMins const type. +func PossibleIntervalInMinsValues() []IntervalInMins { + return []IntervalInMins{FiveMins, SixtyMins, ThirtyMins, ThreeMins} +} + +// IPVersion enumerates the values for ip version. +type IPVersion string + +const ( + // IPv4 ... + IPv4 IPVersion = "IPv4" + // IPv6 ... + IPv6 IPVersion = "IPv6" +) + +// PossibleIPVersionValues returns an array of possible values for the IPVersion const type. +func PossibleIPVersionValues() []IPVersion { + return []IPVersion{IPv4, IPv6} +} + +// IPVersions enumerates the values for ip versions. +type IPVersions string + +const ( + // IPVersionsIPv4 ... + IPVersionsIPv4 IPVersions = "IPv4" + // IPVersionsIPv6 ... + IPVersionsIPv6 IPVersions = "IPv6" +) + +// PossibleIPVersionsValues returns an array of possible values for the IPVersions const type. +func PossibleIPVersionsValues() []IPVersions { + return []IPVersions{IPVersionsIPv4, IPVersionsIPv6} +} + +// LinuxPatchAssessmentMode enumerates the values for linux patch assessment mode. +type LinuxPatchAssessmentMode string + +const ( + // AutomaticByPlatform ... + AutomaticByPlatform LinuxPatchAssessmentMode = "AutomaticByPlatform" + // ImageDefault ... + ImageDefault LinuxPatchAssessmentMode = "ImageDefault" +) + +// PossibleLinuxPatchAssessmentModeValues returns an array of possible values for the LinuxPatchAssessmentMode const type. +func PossibleLinuxPatchAssessmentModeValues() []LinuxPatchAssessmentMode { + return []LinuxPatchAssessmentMode{AutomaticByPlatform, ImageDefault} +} + +// LinuxVMGuestPatchAutomaticByPlatformRebootSetting enumerates the values for linux vm guest patch automatic +// by platform reboot setting. +type LinuxVMGuestPatchAutomaticByPlatformRebootSetting string + +const ( + // LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways ... + LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Always" + // LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired ... + LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "IfRequired" + // LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever ... + LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Never" + // LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown ... + LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Unknown" +) + +// PossibleLinuxVMGuestPatchAutomaticByPlatformRebootSettingValues returns an array of possible values for the LinuxVMGuestPatchAutomaticByPlatformRebootSetting const type. +func PossibleLinuxVMGuestPatchAutomaticByPlatformRebootSettingValues() []LinuxVMGuestPatchAutomaticByPlatformRebootSetting { + return []LinuxVMGuestPatchAutomaticByPlatformRebootSetting{LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways, LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired, LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever, LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown} +} + +// LinuxVMGuestPatchMode enumerates the values for linux vm guest patch mode. +type LinuxVMGuestPatchMode string + +const ( + // LinuxVMGuestPatchModeAutomaticByPlatform ... + LinuxVMGuestPatchModeAutomaticByPlatform LinuxVMGuestPatchMode = "AutomaticByPlatform" + // LinuxVMGuestPatchModeImageDefault ... + LinuxVMGuestPatchModeImageDefault LinuxVMGuestPatchMode = "ImageDefault" +) + +// PossibleLinuxVMGuestPatchModeValues returns an array of possible values for the LinuxVMGuestPatchMode const type. +func PossibleLinuxVMGuestPatchModeValues() []LinuxVMGuestPatchMode { + return []LinuxVMGuestPatchMode{LinuxVMGuestPatchModeAutomaticByPlatform, LinuxVMGuestPatchModeImageDefault} +} + +// MaintenanceOperationResultCodeTypes enumerates the values for maintenance operation result code types. +type MaintenanceOperationResultCodeTypes string + +const ( + // MaintenanceOperationResultCodeTypesMaintenanceAborted ... + MaintenanceOperationResultCodeTypesMaintenanceAborted MaintenanceOperationResultCodeTypes = "MaintenanceAborted" + // MaintenanceOperationResultCodeTypesMaintenanceCompleted ... + MaintenanceOperationResultCodeTypesMaintenanceCompleted MaintenanceOperationResultCodeTypes = "MaintenanceCompleted" + // MaintenanceOperationResultCodeTypesNone ... + MaintenanceOperationResultCodeTypesNone MaintenanceOperationResultCodeTypes = "None" + // MaintenanceOperationResultCodeTypesRetryLater ... + MaintenanceOperationResultCodeTypesRetryLater MaintenanceOperationResultCodeTypes = "RetryLater" +) + +// PossibleMaintenanceOperationResultCodeTypesValues returns an array of possible values for the MaintenanceOperationResultCodeTypes const type. +func PossibleMaintenanceOperationResultCodeTypesValues() []MaintenanceOperationResultCodeTypes { + return []MaintenanceOperationResultCodeTypes{MaintenanceOperationResultCodeTypesMaintenanceAborted, MaintenanceOperationResultCodeTypesMaintenanceCompleted, MaintenanceOperationResultCodeTypesNone, MaintenanceOperationResultCodeTypesRetryLater} +} + +// NetworkAccessPolicy enumerates the values for network access policy. +type NetworkAccessPolicy string + +const ( + // AllowAll The disk can be exported or uploaded to from any network. + AllowAll NetworkAccessPolicy = "AllowAll" + // AllowPrivate The disk can be exported or uploaded to using a DiskAccess resource's private endpoints. + AllowPrivate NetworkAccessPolicy = "AllowPrivate" + // DenyAll The disk cannot be exported. + DenyAll NetworkAccessPolicy = "DenyAll" +) + +// PossibleNetworkAccessPolicyValues returns an array of possible values for the NetworkAccessPolicy const type. +func PossibleNetworkAccessPolicyValues() []NetworkAccessPolicy { + return []NetworkAccessPolicy{AllowAll, AllowPrivate, DenyAll} +} + +// NetworkAPIVersion enumerates the values for network api version. +type NetworkAPIVersion string + +const ( + // TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne ... + TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne NetworkAPIVersion = "2020-11-01" +) + +// PossibleNetworkAPIVersionValues returns an array of possible values for the NetworkAPIVersion const type. +func PossibleNetworkAPIVersionValues() []NetworkAPIVersion { + return []NetworkAPIVersion{TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne} +} + +// OperatingSystemStateTypes enumerates the values for operating system state types. +type OperatingSystemStateTypes string + +const ( + // Generalized Generalized image. Needs to be provisioned during deployment time. + Generalized OperatingSystemStateTypes = "Generalized" + // Specialized Specialized image. Contains already provisioned OS Disk. + Specialized OperatingSystemStateTypes = "Specialized" +) + +// PossibleOperatingSystemStateTypesValues returns an array of possible values for the OperatingSystemStateTypes const type. +func PossibleOperatingSystemStateTypesValues() []OperatingSystemStateTypes { + return []OperatingSystemStateTypes{Generalized, Specialized} +} + +// OperatingSystemType enumerates the values for operating system type. +type OperatingSystemType string + +const ( + // Linux ... + Linux OperatingSystemType = "Linux" + // Windows ... + Windows OperatingSystemType = "Windows" +) + +// PossibleOperatingSystemTypeValues returns an array of possible values for the OperatingSystemType const type. +func PossibleOperatingSystemTypeValues() []OperatingSystemType { + return []OperatingSystemType{Linux, Windows} +} + +// OperatingSystemTypes enumerates the values for operating system types. +type OperatingSystemTypes string + +const ( + // OperatingSystemTypesLinux ... + OperatingSystemTypesLinux OperatingSystemTypes = "Linux" + // OperatingSystemTypesWindows ... + OperatingSystemTypesWindows OperatingSystemTypes = "Windows" +) + +// PossibleOperatingSystemTypesValues returns an array of possible values for the OperatingSystemTypes const type. +func PossibleOperatingSystemTypesValues() []OperatingSystemTypes { + return []OperatingSystemTypes{OperatingSystemTypesLinux, OperatingSystemTypesWindows} +} + +// OrchestrationMode enumerates the values for orchestration mode. +type OrchestrationMode string + +const ( + // Flexible ... + Flexible OrchestrationMode = "Flexible" + // Uniform ... + Uniform OrchestrationMode = "Uniform" +) + +// PossibleOrchestrationModeValues returns an array of possible values for the OrchestrationMode const type. +func PossibleOrchestrationModeValues() []OrchestrationMode { + return []OrchestrationMode{Flexible, Uniform} +} + +// OrchestrationServiceNames enumerates the values for orchestration service names. +type OrchestrationServiceNames string + +const ( + // AutomaticRepairs ... + AutomaticRepairs OrchestrationServiceNames = "AutomaticRepairs" +) + +// PossibleOrchestrationServiceNamesValues returns an array of possible values for the OrchestrationServiceNames const type. +func PossibleOrchestrationServiceNamesValues() []OrchestrationServiceNames { + return []OrchestrationServiceNames{AutomaticRepairs} +} + +// OrchestrationServiceState enumerates the values for orchestration service state. +type OrchestrationServiceState string + +const ( + // NotRunning ... + NotRunning OrchestrationServiceState = "NotRunning" + // Running ... + Running OrchestrationServiceState = "Running" + // Suspended ... + Suspended OrchestrationServiceState = "Suspended" +) + +// PossibleOrchestrationServiceStateValues returns an array of possible values for the OrchestrationServiceState const type. +func PossibleOrchestrationServiceStateValues() []OrchestrationServiceState { + return []OrchestrationServiceState{NotRunning, Running, Suspended} +} + +// OrchestrationServiceStateAction enumerates the values for orchestration service state action. +type OrchestrationServiceStateAction string + +const ( + // Resume ... + Resume OrchestrationServiceStateAction = "Resume" + // Suspend ... + Suspend OrchestrationServiceStateAction = "Suspend" +) + +// PossibleOrchestrationServiceStateActionValues returns an array of possible values for the OrchestrationServiceStateAction const type. +func PossibleOrchestrationServiceStateActionValues() []OrchestrationServiceStateAction { + return []OrchestrationServiceStateAction{Resume, Suspend} +} + +// PassNames enumerates the values for pass names. +type PassNames string + +const ( + // OobeSystem ... + OobeSystem PassNames = "OobeSystem" +) + +// PossiblePassNamesValues returns an array of possible values for the PassNames const type. +func PossiblePassNamesValues() []PassNames { + return []PassNames{OobeSystem} +} + +// PatchAssessmentState enumerates the values for patch assessment state. +type PatchAssessmentState string + +const ( + // PatchAssessmentStateAvailable ... + PatchAssessmentStateAvailable PatchAssessmentState = "Available" + // PatchAssessmentStateUnknown ... + PatchAssessmentStateUnknown PatchAssessmentState = "Unknown" +) + +// PossiblePatchAssessmentStateValues returns an array of possible values for the PatchAssessmentState const type. +func PossiblePatchAssessmentStateValues() []PatchAssessmentState { + return []PatchAssessmentState{PatchAssessmentStateAvailable, PatchAssessmentStateUnknown} +} + +// PatchInstallationState enumerates the values for patch installation state. +type PatchInstallationState string + +const ( + // PatchInstallationStateExcluded ... + PatchInstallationStateExcluded PatchInstallationState = "Excluded" + // PatchInstallationStateFailed ... + PatchInstallationStateFailed PatchInstallationState = "Failed" + // PatchInstallationStateInstalled ... + PatchInstallationStateInstalled PatchInstallationState = "Installed" + // PatchInstallationStateNotSelected ... + PatchInstallationStateNotSelected PatchInstallationState = "NotSelected" + // PatchInstallationStatePending ... + PatchInstallationStatePending PatchInstallationState = "Pending" + // PatchInstallationStateUnknown ... + PatchInstallationStateUnknown PatchInstallationState = "Unknown" +) + +// PossiblePatchInstallationStateValues returns an array of possible values for the PatchInstallationState const type. +func PossiblePatchInstallationStateValues() []PatchInstallationState { + return []PatchInstallationState{PatchInstallationStateExcluded, PatchInstallationStateFailed, PatchInstallationStateInstalled, PatchInstallationStateNotSelected, PatchInstallationStatePending, PatchInstallationStateUnknown} +} + +// PatchOperationStatus enumerates the values for patch operation status. +type PatchOperationStatus string + +const ( + // PatchOperationStatusCompletedWithWarnings ... + PatchOperationStatusCompletedWithWarnings PatchOperationStatus = "CompletedWithWarnings" + // PatchOperationStatusFailed ... + PatchOperationStatusFailed PatchOperationStatus = "Failed" + // PatchOperationStatusInProgress ... + PatchOperationStatusInProgress PatchOperationStatus = "InProgress" + // PatchOperationStatusSucceeded ... + PatchOperationStatusSucceeded PatchOperationStatus = "Succeeded" + // PatchOperationStatusUnknown ... + PatchOperationStatusUnknown PatchOperationStatus = "Unknown" +) + +// PossiblePatchOperationStatusValues returns an array of possible values for the PatchOperationStatus const type. +func PossiblePatchOperationStatusValues() []PatchOperationStatus { + return []PatchOperationStatus{PatchOperationStatusCompletedWithWarnings, PatchOperationStatusFailed, PatchOperationStatusInProgress, PatchOperationStatusSucceeded, PatchOperationStatusUnknown} +} + +// PrivateEndpointConnectionProvisioningState enumerates the values for private endpoint connection +// provisioning state. +type PrivateEndpointConnectionProvisioningState string + +const ( + // PrivateEndpointConnectionProvisioningStateCreating ... + PrivateEndpointConnectionProvisioningStateCreating PrivateEndpointConnectionProvisioningState = "Creating" + // PrivateEndpointConnectionProvisioningStateDeleting ... + PrivateEndpointConnectionProvisioningStateDeleting PrivateEndpointConnectionProvisioningState = "Deleting" + // PrivateEndpointConnectionProvisioningStateFailed ... + PrivateEndpointConnectionProvisioningStateFailed PrivateEndpointConnectionProvisioningState = "Failed" + // PrivateEndpointConnectionProvisioningStateSucceeded ... + PrivateEndpointConnectionProvisioningStateSucceeded PrivateEndpointConnectionProvisioningState = "Succeeded" +) + +// PossiblePrivateEndpointConnectionProvisioningStateValues returns an array of possible values for the PrivateEndpointConnectionProvisioningState const type. +func PossiblePrivateEndpointConnectionProvisioningStateValues() []PrivateEndpointConnectionProvisioningState { + return []PrivateEndpointConnectionProvisioningState{PrivateEndpointConnectionProvisioningStateCreating, PrivateEndpointConnectionProvisioningStateDeleting, PrivateEndpointConnectionProvisioningStateFailed, PrivateEndpointConnectionProvisioningStateSucceeded} +} + +// PrivateEndpointServiceConnectionStatus enumerates the values for private endpoint service connection status. +type PrivateEndpointServiceConnectionStatus string + +const ( + // Approved ... + Approved PrivateEndpointServiceConnectionStatus = "Approved" + // Pending ... + Pending PrivateEndpointServiceConnectionStatus = "Pending" + // Rejected ... + Rejected PrivateEndpointServiceConnectionStatus = "Rejected" +) + +// PossiblePrivateEndpointServiceConnectionStatusValues returns an array of possible values for the PrivateEndpointServiceConnectionStatus const type. +func PossiblePrivateEndpointServiceConnectionStatusValues() []PrivateEndpointServiceConnectionStatus { + return []PrivateEndpointServiceConnectionStatus{Approved, Pending, Rejected} +} + +// ProtocolTypes enumerates the values for protocol types. +type ProtocolTypes string + +const ( + // HTTP ... + HTTP ProtocolTypes = "Http" + // HTTPS ... + HTTPS ProtocolTypes = "Https" +) + +// PossibleProtocolTypesValues returns an array of possible values for the ProtocolTypes const type. +func PossibleProtocolTypesValues() []ProtocolTypes { + return []ProtocolTypes{HTTP, HTTPS} +} + +// ProximityPlacementGroupType enumerates the values for proximity placement group type. +type ProximityPlacementGroupType string + +const ( + // Standard ... + Standard ProximityPlacementGroupType = "Standard" + // Ultra ... + Ultra ProximityPlacementGroupType = "Ultra" +) + +// PossibleProximityPlacementGroupTypeValues returns an array of possible values for the ProximityPlacementGroupType const type. +func PossibleProximityPlacementGroupTypeValues() []ProximityPlacementGroupType { + return []ProximityPlacementGroupType{Standard, Ultra} +} + +// PublicIPAddressSkuName enumerates the values for public ip address sku name. +type PublicIPAddressSkuName string + +const ( + // PublicIPAddressSkuNameBasic ... + PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic" + // PublicIPAddressSkuNameStandard ... + PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard" +) + +// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type. +func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName { + return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard} +} + +// PublicIPAddressSkuTier enumerates the values for public ip address sku tier. +type PublicIPAddressSkuTier string + +const ( + // Global ... + Global PublicIPAddressSkuTier = "Global" + // Regional ... + Regional PublicIPAddressSkuTier = "Regional" +) + +// PossiblePublicIPAddressSkuTierValues returns an array of possible values for the PublicIPAddressSkuTier const type. +func PossiblePublicIPAddressSkuTierValues() []PublicIPAddressSkuTier { + return []PublicIPAddressSkuTier{Global, Regional} +} + +// PublicIPAllocationMethod enumerates the values for public ip allocation method. +type PublicIPAllocationMethod string + +const ( + // Dynamic ... + Dynamic PublicIPAllocationMethod = "Dynamic" + // Static ... + Static PublicIPAllocationMethod = "Static" +) + +// PossiblePublicIPAllocationMethodValues returns an array of possible values for the PublicIPAllocationMethod const type. +func PossiblePublicIPAllocationMethodValues() []PublicIPAllocationMethod { + return []PublicIPAllocationMethod{Dynamic, Static} +} + +// PublicNetworkAccess enumerates the values for public network access. +type PublicNetworkAccess string + +const ( + // Disabled You cannot access the underlying data of the disk publicly on the internet even when + // NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your trusted + // Azure VNET when NetworkAccessPolicy is set to AllowPrivate. + Disabled PublicNetworkAccess = "Disabled" + // Enabled You can generate a SAS URI to access the underlying data of the disk publicly on the internet + // when NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your + // trusted Azure VNET when NetworkAccessPolicy is set to AllowPrivate. + Enabled PublicNetworkAccess = "Enabled" +) + +// PossiblePublicNetworkAccessValues returns an array of possible values for the PublicNetworkAccess const type. +func PossiblePublicNetworkAccessValues() []PublicNetworkAccess { + return []PublicNetworkAccess{Disabled, Enabled} +} + +// RepairAction enumerates the values for repair action. +type RepairAction string + +const ( + // Reimage ... + Reimage RepairAction = "Reimage" + // Replace ... + Replace RepairAction = "Replace" + // Restart ... + Restart RepairAction = "Restart" +) + +// PossibleRepairActionValues returns an array of possible values for the RepairAction const type. +func PossibleRepairActionValues() []RepairAction { + return []RepairAction{Reimage, Replace, Restart} +} + +// ReplicationMode enumerates the values for replication mode. +type ReplicationMode string + +const ( + // Full ... + Full ReplicationMode = "Full" + // Shallow ... + Shallow ReplicationMode = "Shallow" +) + +// PossibleReplicationModeValues returns an array of possible values for the ReplicationMode const type. +func PossibleReplicationModeValues() []ReplicationMode { + return []ReplicationMode{Full, Shallow} +} + +// ReplicationState enumerates the values for replication state. +type ReplicationState string + +const ( + // ReplicationStateCompleted ... + ReplicationStateCompleted ReplicationState = "Completed" + // ReplicationStateFailed ... + ReplicationStateFailed ReplicationState = "Failed" + // ReplicationStateReplicating ... + ReplicationStateReplicating ReplicationState = "Replicating" + // ReplicationStateUnknown ... + ReplicationStateUnknown ReplicationState = "Unknown" +) + +// PossibleReplicationStateValues returns an array of possible values for the ReplicationState const type. +func PossibleReplicationStateValues() []ReplicationState { + return []ReplicationState{ReplicationStateCompleted, ReplicationStateFailed, ReplicationStateReplicating, ReplicationStateUnknown} +} + +// ReplicationStatusTypes enumerates the values for replication status types. +type ReplicationStatusTypes string + +const ( + // ReplicationStatusTypesReplicationStatus ... + ReplicationStatusTypesReplicationStatus ReplicationStatusTypes = "ReplicationStatus" +) + +// PossibleReplicationStatusTypesValues returns an array of possible values for the ReplicationStatusTypes const type. +func PossibleReplicationStatusTypesValues() []ReplicationStatusTypes { + return []ReplicationStatusTypes{ReplicationStatusTypesReplicationStatus} +} + +// ResourceIdentityType enumerates the values for resource identity type. +type ResourceIdentityType string + +const ( + // ResourceIdentityTypeNone ... + ResourceIdentityTypeNone ResourceIdentityType = "None" + // ResourceIdentityTypeSystemAssigned ... + ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned" + // ResourceIdentityTypeSystemAssignedUserAssigned ... + ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned" + // ResourceIdentityTypeUserAssigned ... + ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned" +) + +// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type. +func PossibleResourceIdentityTypeValues() []ResourceIdentityType { + return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned} +} + +// ResourceSkuCapacityScaleType enumerates the values for resource sku capacity scale type. +type ResourceSkuCapacityScaleType string + +const ( + // ResourceSkuCapacityScaleTypeAutomatic ... + ResourceSkuCapacityScaleTypeAutomatic ResourceSkuCapacityScaleType = "Automatic" + // ResourceSkuCapacityScaleTypeManual ... + ResourceSkuCapacityScaleTypeManual ResourceSkuCapacityScaleType = "Manual" + // ResourceSkuCapacityScaleTypeNone ... + ResourceSkuCapacityScaleTypeNone ResourceSkuCapacityScaleType = "None" +) + +// PossibleResourceSkuCapacityScaleTypeValues returns an array of possible values for the ResourceSkuCapacityScaleType const type. +func PossibleResourceSkuCapacityScaleTypeValues() []ResourceSkuCapacityScaleType { + return []ResourceSkuCapacityScaleType{ResourceSkuCapacityScaleTypeAutomatic, ResourceSkuCapacityScaleTypeManual, ResourceSkuCapacityScaleTypeNone} +} + +// ResourceSkuRestrictionsReasonCode enumerates the values for resource sku restrictions reason code. +type ResourceSkuRestrictionsReasonCode string + +const ( + // NotAvailableForSubscription ... + NotAvailableForSubscription ResourceSkuRestrictionsReasonCode = "NotAvailableForSubscription" + // QuotaID ... + QuotaID ResourceSkuRestrictionsReasonCode = "QuotaId" +) + +// PossibleResourceSkuRestrictionsReasonCodeValues returns an array of possible values for the ResourceSkuRestrictionsReasonCode const type. +func PossibleResourceSkuRestrictionsReasonCodeValues() []ResourceSkuRestrictionsReasonCode { + return []ResourceSkuRestrictionsReasonCode{NotAvailableForSubscription, QuotaID} +} + +// ResourceSkuRestrictionsType enumerates the values for resource sku restrictions type. +type ResourceSkuRestrictionsType string + +const ( + // Location ... + Location ResourceSkuRestrictionsType = "Location" + // Zone ... + Zone ResourceSkuRestrictionsType = "Zone" +) + +// PossibleResourceSkuRestrictionsTypeValues returns an array of possible values for the ResourceSkuRestrictionsType const type. +func PossibleResourceSkuRestrictionsTypeValues() []ResourceSkuRestrictionsType { + return []ResourceSkuRestrictionsType{Location, Zone} +} + +// RestorePointCollectionExpandOptions enumerates the values for restore point collection expand options. +type RestorePointCollectionExpandOptions string + +const ( + // RestorePoints ... + RestorePoints RestorePointCollectionExpandOptions = "restorePoints" +) + +// PossibleRestorePointCollectionExpandOptionsValues returns an array of possible values for the RestorePointCollectionExpandOptions const type. +func PossibleRestorePointCollectionExpandOptionsValues() []RestorePointCollectionExpandOptions { + return []RestorePointCollectionExpandOptions{RestorePoints} +} + +// RestorePointExpandOptions enumerates the values for restore point expand options. +type RestorePointExpandOptions string + +const ( + // RestorePointExpandOptionsInstanceView ... + RestorePointExpandOptionsInstanceView RestorePointExpandOptions = "instanceView" +) + +// PossibleRestorePointExpandOptionsValues returns an array of possible values for the RestorePointExpandOptions const type. +func PossibleRestorePointExpandOptionsValues() []RestorePointExpandOptions { + return []RestorePointExpandOptions{RestorePointExpandOptionsInstanceView} +} + +// RollingUpgradeActionType enumerates the values for rolling upgrade action type. +type RollingUpgradeActionType string + +const ( + // Cancel ... + Cancel RollingUpgradeActionType = "Cancel" + // Start ... + Start RollingUpgradeActionType = "Start" +) + +// PossibleRollingUpgradeActionTypeValues returns an array of possible values for the RollingUpgradeActionType const type. +func PossibleRollingUpgradeActionTypeValues() []RollingUpgradeActionType { + return []RollingUpgradeActionType{Cancel, Start} +} + +// RollingUpgradeStatusCode enumerates the values for rolling upgrade status code. +type RollingUpgradeStatusCode string + +const ( + // RollingUpgradeStatusCodeCancelled ... + RollingUpgradeStatusCodeCancelled RollingUpgradeStatusCode = "Cancelled" + // RollingUpgradeStatusCodeCompleted ... + RollingUpgradeStatusCodeCompleted RollingUpgradeStatusCode = "Completed" + // RollingUpgradeStatusCodeFaulted ... + RollingUpgradeStatusCodeFaulted RollingUpgradeStatusCode = "Faulted" + // RollingUpgradeStatusCodeRollingForward ... + RollingUpgradeStatusCodeRollingForward RollingUpgradeStatusCode = "RollingForward" +) + +// PossibleRollingUpgradeStatusCodeValues returns an array of possible values for the RollingUpgradeStatusCode const type. +func PossibleRollingUpgradeStatusCodeValues() []RollingUpgradeStatusCode { + return []RollingUpgradeStatusCode{RollingUpgradeStatusCodeCancelled, RollingUpgradeStatusCodeCompleted, RollingUpgradeStatusCodeFaulted, RollingUpgradeStatusCodeRollingForward} +} + +// SecurityEncryptionTypes enumerates the values for security encryption types. +type SecurityEncryptionTypes string + +const ( + // DiskWithVMGuestState ... + DiskWithVMGuestState SecurityEncryptionTypes = "DiskWithVMGuestState" + // VMGuestStateOnly ... + VMGuestStateOnly SecurityEncryptionTypes = "VMGuestStateOnly" +) + +// PossibleSecurityEncryptionTypesValues returns an array of possible values for the SecurityEncryptionTypes const type. +func PossibleSecurityEncryptionTypesValues() []SecurityEncryptionTypes { + return []SecurityEncryptionTypes{DiskWithVMGuestState, VMGuestStateOnly} +} + +// SecurityTypes enumerates the values for security types. +type SecurityTypes string + +const ( + // SecurityTypesConfidentialVM ... + SecurityTypesConfidentialVM SecurityTypes = "ConfidentialVM" + // SecurityTypesTrustedLaunch ... + SecurityTypesTrustedLaunch SecurityTypes = "TrustedLaunch" +) + +// PossibleSecurityTypesValues returns an array of possible values for the SecurityTypes const type. +func PossibleSecurityTypesValues() []SecurityTypes { + return []SecurityTypes{SecurityTypesConfidentialVM, SecurityTypesTrustedLaunch} +} + +// SelectPermissions enumerates the values for select permissions. +type SelectPermissions string + +const ( + // Permissions ... + Permissions SelectPermissions = "Permissions" +) + +// PossibleSelectPermissionsValues returns an array of possible values for the SelectPermissions const type. +func PossibleSelectPermissionsValues() []SelectPermissions { + return []SelectPermissions{Permissions} +} + +// SettingNames enumerates the values for setting names. +type SettingNames string + +const ( + // AutoLogon ... + AutoLogon SettingNames = "AutoLogon" + // FirstLogonCommands ... + FirstLogonCommands SettingNames = "FirstLogonCommands" +) + +// PossibleSettingNamesValues returns an array of possible values for the SettingNames const type. +func PossibleSettingNamesValues() []SettingNames { + return []SettingNames{AutoLogon, FirstLogonCommands} +} + +// SharedGalleryHostCaching enumerates the values for shared gallery host caching. +type SharedGalleryHostCaching string + +const ( + // SharedGalleryHostCachingNone ... + SharedGalleryHostCachingNone SharedGalleryHostCaching = "None" + // SharedGalleryHostCachingReadOnly ... + SharedGalleryHostCachingReadOnly SharedGalleryHostCaching = "ReadOnly" + // SharedGalleryHostCachingReadWrite ... + SharedGalleryHostCachingReadWrite SharedGalleryHostCaching = "ReadWrite" +) + +// PossibleSharedGalleryHostCachingValues returns an array of possible values for the SharedGalleryHostCaching const type. +func PossibleSharedGalleryHostCachingValues() []SharedGalleryHostCaching { + return []SharedGalleryHostCaching{SharedGalleryHostCachingNone, SharedGalleryHostCachingReadOnly, SharedGalleryHostCachingReadWrite} +} + +// SharedToValues enumerates the values for shared to values. +type SharedToValues string + +const ( + // Tenant ... + Tenant SharedToValues = "tenant" +) + +// PossibleSharedToValuesValues returns an array of possible values for the SharedToValues const type. +func PossibleSharedToValuesValues() []SharedToValues { + return []SharedToValues{Tenant} +} + +// SharingProfileGroupTypes enumerates the values for sharing profile group types. +type SharingProfileGroupTypes string + +const ( + // AADTenants ... + AADTenants SharingProfileGroupTypes = "AADTenants" + // Subscriptions ... + Subscriptions SharingProfileGroupTypes = "Subscriptions" +) + +// PossibleSharingProfileGroupTypesValues returns an array of possible values for the SharingProfileGroupTypes const type. +func PossibleSharingProfileGroupTypesValues() []SharingProfileGroupTypes { + return []SharingProfileGroupTypes{AADTenants, Subscriptions} +} + +// SharingState enumerates the values for sharing state. +type SharingState string + +const ( + // SharingStateFailed ... + SharingStateFailed SharingState = "Failed" + // SharingStateInProgress ... + SharingStateInProgress SharingState = "InProgress" + // SharingStateSucceeded ... + SharingStateSucceeded SharingState = "Succeeded" + // SharingStateUnknown ... + SharingStateUnknown SharingState = "Unknown" +) + +// PossibleSharingStateValues returns an array of possible values for the SharingState const type. +func PossibleSharingStateValues() []SharingState { + return []SharingState{SharingStateFailed, SharingStateInProgress, SharingStateSucceeded, SharingStateUnknown} +} + +// SharingUpdateOperationTypes enumerates the values for sharing update operation types. +type SharingUpdateOperationTypes string + +const ( + // Add ... + Add SharingUpdateOperationTypes = "Add" + // EnableCommunity ... + EnableCommunity SharingUpdateOperationTypes = "EnableCommunity" + // Remove ... + Remove SharingUpdateOperationTypes = "Remove" + // Reset ... + Reset SharingUpdateOperationTypes = "Reset" +) + +// PossibleSharingUpdateOperationTypesValues returns an array of possible values for the SharingUpdateOperationTypes const type. +func PossibleSharingUpdateOperationTypesValues() []SharingUpdateOperationTypes { + return []SharingUpdateOperationTypes{Add, EnableCommunity, Remove, Reset} +} + +// SnapshotStorageAccountTypes enumerates the values for snapshot storage account types. +type SnapshotStorageAccountTypes string + +const ( + // SnapshotStorageAccountTypesPremiumLRS Premium SSD locally redundant storage + SnapshotStorageAccountTypesPremiumLRS SnapshotStorageAccountTypes = "Premium_LRS" + // SnapshotStorageAccountTypesStandardLRS Standard HDD locally redundant storage + SnapshotStorageAccountTypesStandardLRS SnapshotStorageAccountTypes = "Standard_LRS" + // SnapshotStorageAccountTypesStandardZRS Standard zone redundant storage + SnapshotStorageAccountTypesStandardZRS SnapshotStorageAccountTypes = "Standard_ZRS" +) + +// PossibleSnapshotStorageAccountTypesValues returns an array of possible values for the SnapshotStorageAccountTypes const type. +func PossibleSnapshotStorageAccountTypesValues() []SnapshotStorageAccountTypes { + return []SnapshotStorageAccountTypes{SnapshotStorageAccountTypesPremiumLRS, SnapshotStorageAccountTypesStandardLRS, SnapshotStorageAccountTypesStandardZRS} +} + +// StatusLevelTypes enumerates the values for status level types. +type StatusLevelTypes string + +const ( + // Error ... + Error StatusLevelTypes = "Error" + // Info ... + Info StatusLevelTypes = "Info" + // Warning ... + Warning StatusLevelTypes = "Warning" +) + +// PossibleStatusLevelTypesValues returns an array of possible values for the StatusLevelTypes const type. +func PossibleStatusLevelTypesValues() []StatusLevelTypes { + return []StatusLevelTypes{Error, Info, Warning} +} + +// StorageAccountType enumerates the values for storage account type. +type StorageAccountType string + +const ( + // StorageAccountTypePremiumLRS ... + StorageAccountTypePremiumLRS StorageAccountType = "Premium_LRS" + // StorageAccountTypeStandardLRS ... + StorageAccountTypeStandardLRS StorageAccountType = "Standard_LRS" + // StorageAccountTypeStandardZRS ... + StorageAccountTypeStandardZRS StorageAccountType = "Standard_ZRS" +) + +// PossibleStorageAccountTypeValues returns an array of possible values for the StorageAccountType const type. +func PossibleStorageAccountTypeValues() []StorageAccountType { + return []StorageAccountType{StorageAccountTypePremiumLRS, StorageAccountTypeStandardLRS, StorageAccountTypeStandardZRS} +} + +// StorageAccountTypes enumerates the values for storage account types. +type StorageAccountTypes string + +const ( + // StorageAccountTypesPremiumLRS ... + StorageAccountTypesPremiumLRS StorageAccountTypes = "Premium_LRS" + // StorageAccountTypesPremiumV2LRS ... + StorageAccountTypesPremiumV2LRS StorageAccountTypes = "PremiumV2_LRS" + // StorageAccountTypesPremiumZRS ... + StorageAccountTypesPremiumZRS StorageAccountTypes = "Premium_ZRS" + // StorageAccountTypesStandardLRS ... + StorageAccountTypesStandardLRS StorageAccountTypes = "Standard_LRS" + // StorageAccountTypesStandardSSDLRS ... + StorageAccountTypesStandardSSDLRS StorageAccountTypes = "StandardSSD_LRS" + // StorageAccountTypesStandardSSDZRS ... + StorageAccountTypesStandardSSDZRS StorageAccountTypes = "StandardSSD_ZRS" + // StorageAccountTypesUltraSSDLRS ... + StorageAccountTypesUltraSSDLRS StorageAccountTypes = "UltraSSD_LRS" +) + +// PossibleStorageAccountTypesValues returns an array of possible values for the StorageAccountTypes const type. +func PossibleStorageAccountTypesValues() []StorageAccountTypes { + return []StorageAccountTypes{StorageAccountTypesPremiumLRS, StorageAccountTypesPremiumV2LRS, StorageAccountTypesPremiumZRS, StorageAccountTypesStandardLRS, StorageAccountTypesStandardSSDLRS, StorageAccountTypesStandardSSDZRS, StorageAccountTypesUltraSSDLRS} +} + +// UpgradeMode enumerates the values for upgrade mode. +type UpgradeMode string + +const ( + // UpgradeModeAutomatic ... + UpgradeModeAutomatic UpgradeMode = "Automatic" + // UpgradeModeManual ... + UpgradeModeManual UpgradeMode = "Manual" + // UpgradeModeRolling ... + UpgradeModeRolling UpgradeMode = "Rolling" +) + +// PossibleUpgradeModeValues returns an array of possible values for the UpgradeMode const type. +func PossibleUpgradeModeValues() []UpgradeMode { + return []UpgradeMode{UpgradeModeAutomatic, UpgradeModeManual, UpgradeModeRolling} +} + +// UpgradeOperationInvoker enumerates the values for upgrade operation invoker. +type UpgradeOperationInvoker string + +const ( + // UpgradeOperationInvokerPlatform ... + UpgradeOperationInvokerPlatform UpgradeOperationInvoker = "Platform" + // UpgradeOperationInvokerUnknown ... + UpgradeOperationInvokerUnknown UpgradeOperationInvoker = "Unknown" + // UpgradeOperationInvokerUser ... + UpgradeOperationInvokerUser UpgradeOperationInvoker = "User" +) + +// PossibleUpgradeOperationInvokerValues returns an array of possible values for the UpgradeOperationInvoker const type. +func PossibleUpgradeOperationInvokerValues() []UpgradeOperationInvoker { + return []UpgradeOperationInvoker{UpgradeOperationInvokerPlatform, UpgradeOperationInvokerUnknown, UpgradeOperationInvokerUser} +} + +// UpgradeState enumerates the values for upgrade state. +type UpgradeState string + +const ( + // UpgradeStateCancelled ... + UpgradeStateCancelled UpgradeState = "Cancelled" + // UpgradeStateCompleted ... + UpgradeStateCompleted UpgradeState = "Completed" + // UpgradeStateFaulted ... + UpgradeStateFaulted UpgradeState = "Faulted" + // UpgradeStateRollingForward ... + UpgradeStateRollingForward UpgradeState = "RollingForward" +) + +// PossibleUpgradeStateValues returns an array of possible values for the UpgradeState const type. +func PossibleUpgradeStateValues() []UpgradeState { + return []UpgradeState{UpgradeStateCancelled, UpgradeStateCompleted, UpgradeStateFaulted, UpgradeStateRollingForward} +} + +// VirtualMachineEvictionPolicyTypes enumerates the values for virtual machine eviction policy types. +type VirtualMachineEvictionPolicyTypes string + +const ( + // VirtualMachineEvictionPolicyTypesDeallocate ... + VirtualMachineEvictionPolicyTypesDeallocate VirtualMachineEvictionPolicyTypes = "Deallocate" + // VirtualMachineEvictionPolicyTypesDelete ... + VirtualMachineEvictionPolicyTypesDelete VirtualMachineEvictionPolicyTypes = "Delete" +) + +// PossibleVirtualMachineEvictionPolicyTypesValues returns an array of possible values for the VirtualMachineEvictionPolicyTypes const type. +func PossibleVirtualMachineEvictionPolicyTypesValues() []VirtualMachineEvictionPolicyTypes { + return []VirtualMachineEvictionPolicyTypes{VirtualMachineEvictionPolicyTypesDeallocate, VirtualMachineEvictionPolicyTypesDelete} +} + +// VirtualMachinePriorityTypes enumerates the values for virtual machine priority types. +type VirtualMachinePriorityTypes string + +const ( + // Low ... + Low VirtualMachinePriorityTypes = "Low" + // Regular ... + Regular VirtualMachinePriorityTypes = "Regular" + // Spot ... + Spot VirtualMachinePriorityTypes = "Spot" +) + +// PossibleVirtualMachinePriorityTypesValues returns an array of possible values for the VirtualMachinePriorityTypes const type. +func PossibleVirtualMachinePriorityTypesValues() []VirtualMachinePriorityTypes { + return []VirtualMachinePriorityTypes{Low, Regular, Spot} +} + +// VirtualMachineScaleSetScaleInRules enumerates the values for virtual machine scale set scale in rules. +type VirtualMachineScaleSetScaleInRules string + +const ( + // Default ... + Default VirtualMachineScaleSetScaleInRules = "Default" + // NewestVM ... + NewestVM VirtualMachineScaleSetScaleInRules = "NewestVM" + // OldestVM ... + OldestVM VirtualMachineScaleSetScaleInRules = "OldestVM" +) + +// PossibleVirtualMachineScaleSetScaleInRulesValues returns an array of possible values for the VirtualMachineScaleSetScaleInRules const type. +func PossibleVirtualMachineScaleSetScaleInRulesValues() []VirtualMachineScaleSetScaleInRules { + return []VirtualMachineScaleSetScaleInRules{Default, NewestVM, OldestVM} +} + +// VirtualMachineScaleSetSkuScaleType enumerates the values for virtual machine scale set sku scale type. +type VirtualMachineScaleSetSkuScaleType string + +const ( + // VirtualMachineScaleSetSkuScaleTypeAutomatic ... + VirtualMachineScaleSetSkuScaleTypeAutomatic VirtualMachineScaleSetSkuScaleType = "Automatic" + // VirtualMachineScaleSetSkuScaleTypeNone ... + VirtualMachineScaleSetSkuScaleTypeNone VirtualMachineScaleSetSkuScaleType = "None" +) + +// PossibleVirtualMachineScaleSetSkuScaleTypeValues returns an array of possible values for the VirtualMachineScaleSetSkuScaleType const type. +func PossibleVirtualMachineScaleSetSkuScaleTypeValues() []VirtualMachineScaleSetSkuScaleType { + return []VirtualMachineScaleSetSkuScaleType{VirtualMachineScaleSetSkuScaleTypeAutomatic, VirtualMachineScaleSetSkuScaleTypeNone} +} + +// VirtualMachineSizeTypes enumerates the values for virtual machine size types. +type VirtualMachineSizeTypes string + +const ( + // BasicA0 ... + BasicA0 VirtualMachineSizeTypes = "Basic_A0" + // BasicA1 ... + BasicA1 VirtualMachineSizeTypes = "Basic_A1" + // BasicA2 ... + BasicA2 VirtualMachineSizeTypes = "Basic_A2" + // BasicA3 ... + BasicA3 VirtualMachineSizeTypes = "Basic_A3" + // BasicA4 ... + BasicA4 VirtualMachineSizeTypes = "Basic_A4" + // StandardA0 ... + StandardA0 VirtualMachineSizeTypes = "Standard_A0" + // StandardA1 ... + StandardA1 VirtualMachineSizeTypes = "Standard_A1" + // StandardA10 ... + StandardA10 VirtualMachineSizeTypes = "Standard_A10" + // StandardA11 ... + StandardA11 VirtualMachineSizeTypes = "Standard_A11" + // StandardA1V2 ... + StandardA1V2 VirtualMachineSizeTypes = "Standard_A1_v2" + // StandardA2 ... + StandardA2 VirtualMachineSizeTypes = "Standard_A2" + // StandardA2mV2 ... + StandardA2mV2 VirtualMachineSizeTypes = "Standard_A2m_v2" + // StandardA2V2 ... + StandardA2V2 VirtualMachineSizeTypes = "Standard_A2_v2" + // StandardA3 ... + StandardA3 VirtualMachineSizeTypes = "Standard_A3" + // StandardA4 ... + StandardA4 VirtualMachineSizeTypes = "Standard_A4" + // StandardA4mV2 ... + StandardA4mV2 VirtualMachineSizeTypes = "Standard_A4m_v2" + // StandardA4V2 ... + StandardA4V2 VirtualMachineSizeTypes = "Standard_A4_v2" + // StandardA5 ... + StandardA5 VirtualMachineSizeTypes = "Standard_A5" + // StandardA6 ... + StandardA6 VirtualMachineSizeTypes = "Standard_A6" + // StandardA7 ... + StandardA7 VirtualMachineSizeTypes = "Standard_A7" + // StandardA8 ... + StandardA8 VirtualMachineSizeTypes = "Standard_A8" + // StandardA8mV2 ... + StandardA8mV2 VirtualMachineSizeTypes = "Standard_A8m_v2" + // StandardA8V2 ... + StandardA8V2 VirtualMachineSizeTypes = "Standard_A8_v2" + // StandardA9 ... + StandardA9 VirtualMachineSizeTypes = "Standard_A9" + // StandardB1ms ... + StandardB1ms VirtualMachineSizeTypes = "Standard_B1ms" + // StandardB1s ... + StandardB1s VirtualMachineSizeTypes = "Standard_B1s" + // StandardB2ms ... + StandardB2ms VirtualMachineSizeTypes = "Standard_B2ms" + // StandardB2s ... + StandardB2s VirtualMachineSizeTypes = "Standard_B2s" + // StandardB4ms ... + StandardB4ms VirtualMachineSizeTypes = "Standard_B4ms" + // StandardB8ms ... + StandardB8ms VirtualMachineSizeTypes = "Standard_B8ms" + // StandardD1 ... + StandardD1 VirtualMachineSizeTypes = "Standard_D1" + // StandardD11 ... + StandardD11 VirtualMachineSizeTypes = "Standard_D11" + // StandardD11V2 ... + StandardD11V2 VirtualMachineSizeTypes = "Standard_D11_v2" + // StandardD12 ... + StandardD12 VirtualMachineSizeTypes = "Standard_D12" + // StandardD12V2 ... + StandardD12V2 VirtualMachineSizeTypes = "Standard_D12_v2" + // StandardD13 ... + StandardD13 VirtualMachineSizeTypes = "Standard_D13" + // StandardD13V2 ... + StandardD13V2 VirtualMachineSizeTypes = "Standard_D13_v2" + // StandardD14 ... + StandardD14 VirtualMachineSizeTypes = "Standard_D14" + // StandardD14V2 ... + StandardD14V2 VirtualMachineSizeTypes = "Standard_D14_v2" + // StandardD15V2 ... + StandardD15V2 VirtualMachineSizeTypes = "Standard_D15_v2" + // StandardD16sV3 ... + StandardD16sV3 VirtualMachineSizeTypes = "Standard_D16s_v3" + // StandardD16V3 ... + StandardD16V3 VirtualMachineSizeTypes = "Standard_D16_v3" + // StandardD1V2 ... + StandardD1V2 VirtualMachineSizeTypes = "Standard_D1_v2" + // StandardD2 ... + StandardD2 VirtualMachineSizeTypes = "Standard_D2" + // StandardD2sV3 ... + StandardD2sV3 VirtualMachineSizeTypes = "Standard_D2s_v3" + // StandardD2V2 ... + StandardD2V2 VirtualMachineSizeTypes = "Standard_D2_v2" + // StandardD2V3 ... + StandardD2V3 VirtualMachineSizeTypes = "Standard_D2_v3" + // StandardD3 ... + StandardD3 VirtualMachineSizeTypes = "Standard_D3" + // StandardD32sV3 ... + StandardD32sV3 VirtualMachineSizeTypes = "Standard_D32s_v3" + // StandardD32V3 ... + StandardD32V3 VirtualMachineSizeTypes = "Standard_D32_v3" + // StandardD3V2 ... + StandardD3V2 VirtualMachineSizeTypes = "Standard_D3_v2" + // StandardD4 ... + StandardD4 VirtualMachineSizeTypes = "Standard_D4" + // StandardD4sV3 ... + StandardD4sV3 VirtualMachineSizeTypes = "Standard_D4s_v3" + // StandardD4V2 ... + StandardD4V2 VirtualMachineSizeTypes = "Standard_D4_v2" + // StandardD4V3 ... + StandardD4V3 VirtualMachineSizeTypes = "Standard_D4_v3" + // StandardD5V2 ... + StandardD5V2 VirtualMachineSizeTypes = "Standard_D5_v2" + // StandardD64sV3 ... + StandardD64sV3 VirtualMachineSizeTypes = "Standard_D64s_v3" + // StandardD64V3 ... + StandardD64V3 VirtualMachineSizeTypes = "Standard_D64_v3" + // StandardD8sV3 ... + StandardD8sV3 VirtualMachineSizeTypes = "Standard_D8s_v3" + // StandardD8V3 ... + StandardD8V3 VirtualMachineSizeTypes = "Standard_D8_v3" + // StandardDS1 ... + StandardDS1 VirtualMachineSizeTypes = "Standard_DS1" + // StandardDS11 ... + StandardDS11 VirtualMachineSizeTypes = "Standard_DS11" + // StandardDS11V2 ... + StandardDS11V2 VirtualMachineSizeTypes = "Standard_DS11_v2" + // StandardDS12 ... + StandardDS12 VirtualMachineSizeTypes = "Standard_DS12" + // StandardDS12V2 ... + StandardDS12V2 VirtualMachineSizeTypes = "Standard_DS12_v2" + // StandardDS13 ... + StandardDS13 VirtualMachineSizeTypes = "Standard_DS13" + // StandardDS132V2 ... + StandardDS132V2 VirtualMachineSizeTypes = "Standard_DS13-2_v2" + // StandardDS134V2 ... + StandardDS134V2 VirtualMachineSizeTypes = "Standard_DS13-4_v2" + // StandardDS13V2 ... + StandardDS13V2 VirtualMachineSizeTypes = "Standard_DS13_v2" + // StandardDS14 ... + StandardDS14 VirtualMachineSizeTypes = "Standard_DS14" + // StandardDS144V2 ... + StandardDS144V2 VirtualMachineSizeTypes = "Standard_DS14-4_v2" + // StandardDS148V2 ... + StandardDS148V2 VirtualMachineSizeTypes = "Standard_DS14-8_v2" + // StandardDS14V2 ... + StandardDS14V2 VirtualMachineSizeTypes = "Standard_DS14_v2" + // StandardDS15V2 ... + StandardDS15V2 VirtualMachineSizeTypes = "Standard_DS15_v2" + // StandardDS1V2 ... + StandardDS1V2 VirtualMachineSizeTypes = "Standard_DS1_v2" + // StandardDS2 ... + StandardDS2 VirtualMachineSizeTypes = "Standard_DS2" + // StandardDS2V2 ... + StandardDS2V2 VirtualMachineSizeTypes = "Standard_DS2_v2" + // StandardDS3 ... + StandardDS3 VirtualMachineSizeTypes = "Standard_DS3" + // StandardDS3V2 ... + StandardDS3V2 VirtualMachineSizeTypes = "Standard_DS3_v2" + // StandardDS4 ... + StandardDS4 VirtualMachineSizeTypes = "Standard_DS4" + // StandardDS4V2 ... + StandardDS4V2 VirtualMachineSizeTypes = "Standard_DS4_v2" + // StandardDS5V2 ... + StandardDS5V2 VirtualMachineSizeTypes = "Standard_DS5_v2" + // StandardE16sV3 ... + StandardE16sV3 VirtualMachineSizeTypes = "Standard_E16s_v3" + // StandardE16V3 ... + StandardE16V3 VirtualMachineSizeTypes = "Standard_E16_v3" + // StandardE2sV3 ... + StandardE2sV3 VirtualMachineSizeTypes = "Standard_E2s_v3" + // StandardE2V3 ... + StandardE2V3 VirtualMachineSizeTypes = "Standard_E2_v3" + // StandardE3216V3 ... + StandardE3216V3 VirtualMachineSizeTypes = "Standard_E32-16_v3" + // StandardE328sV3 ... + StandardE328sV3 VirtualMachineSizeTypes = "Standard_E32-8s_v3" + // StandardE32sV3 ... + StandardE32sV3 VirtualMachineSizeTypes = "Standard_E32s_v3" + // StandardE32V3 ... + StandardE32V3 VirtualMachineSizeTypes = "Standard_E32_v3" + // StandardE4sV3 ... + StandardE4sV3 VirtualMachineSizeTypes = "Standard_E4s_v3" + // StandardE4V3 ... + StandardE4V3 VirtualMachineSizeTypes = "Standard_E4_v3" + // StandardE6416sV3 ... + StandardE6416sV3 VirtualMachineSizeTypes = "Standard_E64-16s_v3" + // StandardE6432sV3 ... + StandardE6432sV3 VirtualMachineSizeTypes = "Standard_E64-32s_v3" + // StandardE64sV3 ... + StandardE64sV3 VirtualMachineSizeTypes = "Standard_E64s_v3" + // StandardE64V3 ... + StandardE64V3 VirtualMachineSizeTypes = "Standard_E64_v3" + // StandardE8sV3 ... + StandardE8sV3 VirtualMachineSizeTypes = "Standard_E8s_v3" + // StandardE8V3 ... + StandardE8V3 VirtualMachineSizeTypes = "Standard_E8_v3" + // StandardF1 ... + StandardF1 VirtualMachineSizeTypes = "Standard_F1" + // StandardF16 ... + StandardF16 VirtualMachineSizeTypes = "Standard_F16" + // StandardF16s ... + StandardF16s VirtualMachineSizeTypes = "Standard_F16s" + // StandardF16sV2 ... + StandardF16sV2 VirtualMachineSizeTypes = "Standard_F16s_v2" + // StandardF1s ... + StandardF1s VirtualMachineSizeTypes = "Standard_F1s" + // StandardF2 ... + StandardF2 VirtualMachineSizeTypes = "Standard_F2" + // StandardF2s ... + StandardF2s VirtualMachineSizeTypes = "Standard_F2s" + // StandardF2sV2 ... + StandardF2sV2 VirtualMachineSizeTypes = "Standard_F2s_v2" + // StandardF32sV2 ... + StandardF32sV2 VirtualMachineSizeTypes = "Standard_F32s_v2" + // StandardF4 ... + StandardF4 VirtualMachineSizeTypes = "Standard_F4" + // StandardF4s ... + StandardF4s VirtualMachineSizeTypes = "Standard_F4s" + // StandardF4sV2 ... + StandardF4sV2 VirtualMachineSizeTypes = "Standard_F4s_v2" + // StandardF64sV2 ... + StandardF64sV2 VirtualMachineSizeTypes = "Standard_F64s_v2" + // StandardF72sV2 ... + StandardF72sV2 VirtualMachineSizeTypes = "Standard_F72s_v2" + // StandardF8 ... + StandardF8 VirtualMachineSizeTypes = "Standard_F8" + // StandardF8s ... + StandardF8s VirtualMachineSizeTypes = "Standard_F8s" + // StandardF8sV2 ... + StandardF8sV2 VirtualMachineSizeTypes = "Standard_F8s_v2" + // StandardG1 ... + StandardG1 VirtualMachineSizeTypes = "Standard_G1" + // StandardG2 ... + StandardG2 VirtualMachineSizeTypes = "Standard_G2" + // StandardG3 ... + StandardG3 VirtualMachineSizeTypes = "Standard_G3" + // StandardG4 ... + StandardG4 VirtualMachineSizeTypes = "Standard_G4" + // StandardG5 ... + StandardG5 VirtualMachineSizeTypes = "Standard_G5" + // StandardGS1 ... + StandardGS1 VirtualMachineSizeTypes = "Standard_GS1" + // StandardGS2 ... + StandardGS2 VirtualMachineSizeTypes = "Standard_GS2" + // StandardGS3 ... + StandardGS3 VirtualMachineSizeTypes = "Standard_GS3" + // StandardGS4 ... + StandardGS4 VirtualMachineSizeTypes = "Standard_GS4" + // StandardGS44 ... + StandardGS44 VirtualMachineSizeTypes = "Standard_GS4-4" + // StandardGS48 ... + StandardGS48 VirtualMachineSizeTypes = "Standard_GS4-8" + // StandardGS5 ... + StandardGS5 VirtualMachineSizeTypes = "Standard_GS5" + // StandardGS516 ... + StandardGS516 VirtualMachineSizeTypes = "Standard_GS5-16" + // StandardGS58 ... + StandardGS58 VirtualMachineSizeTypes = "Standard_GS5-8" + // StandardH16 ... + StandardH16 VirtualMachineSizeTypes = "Standard_H16" + // StandardH16m ... + StandardH16m VirtualMachineSizeTypes = "Standard_H16m" + // StandardH16mr ... + StandardH16mr VirtualMachineSizeTypes = "Standard_H16mr" + // StandardH16r ... + StandardH16r VirtualMachineSizeTypes = "Standard_H16r" + // StandardH8 ... + StandardH8 VirtualMachineSizeTypes = "Standard_H8" + // StandardH8m ... + StandardH8m VirtualMachineSizeTypes = "Standard_H8m" + // StandardL16s ... + StandardL16s VirtualMachineSizeTypes = "Standard_L16s" + // StandardL32s ... + StandardL32s VirtualMachineSizeTypes = "Standard_L32s" + // StandardL4s ... + StandardL4s VirtualMachineSizeTypes = "Standard_L4s" + // StandardL8s ... + StandardL8s VirtualMachineSizeTypes = "Standard_L8s" + // StandardM12832ms ... + StandardM12832ms VirtualMachineSizeTypes = "Standard_M128-32ms" + // StandardM12864ms ... + StandardM12864ms VirtualMachineSizeTypes = "Standard_M128-64ms" + // StandardM128ms ... + StandardM128ms VirtualMachineSizeTypes = "Standard_M128ms" + // StandardM128s ... + StandardM128s VirtualMachineSizeTypes = "Standard_M128s" + // StandardM6416ms ... + StandardM6416ms VirtualMachineSizeTypes = "Standard_M64-16ms" + // StandardM6432ms ... + StandardM6432ms VirtualMachineSizeTypes = "Standard_M64-32ms" + // StandardM64ms ... + StandardM64ms VirtualMachineSizeTypes = "Standard_M64ms" + // StandardM64s ... + StandardM64s VirtualMachineSizeTypes = "Standard_M64s" + // StandardNC12 ... + StandardNC12 VirtualMachineSizeTypes = "Standard_NC12" + // StandardNC12sV2 ... + StandardNC12sV2 VirtualMachineSizeTypes = "Standard_NC12s_v2" + // StandardNC12sV3 ... + StandardNC12sV3 VirtualMachineSizeTypes = "Standard_NC12s_v3" + // StandardNC24 ... + StandardNC24 VirtualMachineSizeTypes = "Standard_NC24" + // StandardNC24r ... + StandardNC24r VirtualMachineSizeTypes = "Standard_NC24r" + // StandardNC24rsV2 ... + StandardNC24rsV2 VirtualMachineSizeTypes = "Standard_NC24rs_v2" + // StandardNC24rsV3 ... + StandardNC24rsV3 VirtualMachineSizeTypes = "Standard_NC24rs_v3" + // StandardNC24sV2 ... + StandardNC24sV2 VirtualMachineSizeTypes = "Standard_NC24s_v2" + // StandardNC24sV3 ... + StandardNC24sV3 VirtualMachineSizeTypes = "Standard_NC24s_v3" + // StandardNC6 ... + StandardNC6 VirtualMachineSizeTypes = "Standard_NC6" + // StandardNC6sV2 ... + StandardNC6sV2 VirtualMachineSizeTypes = "Standard_NC6s_v2" + // StandardNC6sV3 ... + StandardNC6sV3 VirtualMachineSizeTypes = "Standard_NC6s_v3" + // StandardND12s ... + StandardND12s VirtualMachineSizeTypes = "Standard_ND12s" + // StandardND24rs ... + StandardND24rs VirtualMachineSizeTypes = "Standard_ND24rs" + // StandardND24s ... + StandardND24s VirtualMachineSizeTypes = "Standard_ND24s" + // StandardND6s ... + StandardND6s VirtualMachineSizeTypes = "Standard_ND6s" + // StandardNV12 ... + StandardNV12 VirtualMachineSizeTypes = "Standard_NV12" + // StandardNV24 ... + StandardNV24 VirtualMachineSizeTypes = "Standard_NV24" + // StandardNV6 ... + StandardNV6 VirtualMachineSizeTypes = "Standard_NV6" +) + +// PossibleVirtualMachineSizeTypesValues returns an array of possible values for the VirtualMachineSizeTypes const type. +func PossibleVirtualMachineSizeTypesValues() []VirtualMachineSizeTypes { + return []VirtualMachineSizeTypes{BasicA0, BasicA1, BasicA2, BasicA3, BasicA4, StandardA0, StandardA1, StandardA10, StandardA11, StandardA1V2, StandardA2, StandardA2mV2, StandardA2V2, StandardA3, StandardA4, StandardA4mV2, StandardA4V2, StandardA5, StandardA6, StandardA7, StandardA8, StandardA8mV2, StandardA8V2, StandardA9, StandardB1ms, StandardB1s, StandardB2ms, StandardB2s, StandardB4ms, StandardB8ms, StandardD1, StandardD11, StandardD11V2, StandardD12, StandardD12V2, StandardD13, StandardD13V2, StandardD14, StandardD14V2, StandardD15V2, StandardD16sV3, StandardD16V3, StandardD1V2, StandardD2, StandardD2sV3, StandardD2V2, StandardD2V3, StandardD3, StandardD32sV3, StandardD32V3, StandardD3V2, StandardD4, StandardD4sV3, StandardD4V2, StandardD4V3, StandardD5V2, StandardD64sV3, StandardD64V3, StandardD8sV3, StandardD8V3, StandardDS1, StandardDS11, StandardDS11V2, StandardDS12, StandardDS12V2, StandardDS13, StandardDS132V2, StandardDS134V2, StandardDS13V2, StandardDS14, StandardDS144V2, StandardDS148V2, StandardDS14V2, StandardDS15V2, StandardDS1V2, StandardDS2, StandardDS2V2, StandardDS3, StandardDS3V2, StandardDS4, StandardDS4V2, StandardDS5V2, StandardE16sV3, StandardE16V3, StandardE2sV3, StandardE2V3, StandardE3216V3, StandardE328sV3, StandardE32sV3, StandardE32V3, StandardE4sV3, StandardE4V3, StandardE6416sV3, StandardE6432sV3, StandardE64sV3, StandardE64V3, StandardE8sV3, StandardE8V3, StandardF1, StandardF16, StandardF16s, StandardF16sV2, StandardF1s, StandardF2, StandardF2s, StandardF2sV2, StandardF32sV2, StandardF4, StandardF4s, StandardF4sV2, StandardF64sV2, StandardF72sV2, StandardF8, StandardF8s, StandardF8sV2, StandardG1, StandardG2, StandardG3, StandardG4, StandardG5, StandardGS1, StandardGS2, StandardGS3, StandardGS4, StandardGS44, StandardGS48, StandardGS5, StandardGS516, StandardGS58, StandardH16, StandardH16m, StandardH16mr, StandardH16r, StandardH8, StandardH8m, StandardL16s, StandardL32s, StandardL4s, StandardL8s, StandardM12832ms, StandardM12864ms, StandardM128ms, StandardM128s, StandardM6416ms, StandardM6432ms, StandardM64ms, StandardM64s, StandardNC12, StandardNC12sV2, StandardNC12sV3, StandardNC24, StandardNC24r, StandardNC24rsV2, StandardNC24rsV3, StandardNC24sV2, StandardNC24sV3, StandardNC6, StandardNC6sV2, StandardNC6sV3, StandardND12s, StandardND24rs, StandardND24s, StandardND6s, StandardNV12, StandardNV24, StandardNV6} +} + +// VMDiskTypes enumerates the values for vm disk types. +type VMDiskTypes string + +const ( + // VMDiskTypesNone ... + VMDiskTypesNone VMDiskTypes = "None" + // VMDiskTypesUnmanaged ... + VMDiskTypesUnmanaged VMDiskTypes = "Unmanaged" +) + +// PossibleVMDiskTypesValues returns an array of possible values for the VMDiskTypes const type. +func PossibleVMDiskTypesValues() []VMDiskTypes { + return []VMDiskTypes{VMDiskTypesNone, VMDiskTypesUnmanaged} +} + +// VMGuestPatchClassificationLinux enumerates the values for vm guest patch classification linux. +type VMGuestPatchClassificationLinux string + +const ( + // Critical ... + Critical VMGuestPatchClassificationLinux = "Critical" + // Other ... + Other VMGuestPatchClassificationLinux = "Other" + // Security ... + Security VMGuestPatchClassificationLinux = "Security" +) + +// PossibleVMGuestPatchClassificationLinuxValues returns an array of possible values for the VMGuestPatchClassificationLinux const type. +func PossibleVMGuestPatchClassificationLinuxValues() []VMGuestPatchClassificationLinux { + return []VMGuestPatchClassificationLinux{Critical, Other, Security} +} + +// VMGuestPatchClassificationWindows enumerates the values for vm guest patch classification windows. +type VMGuestPatchClassificationWindows string + +const ( + // VMGuestPatchClassificationWindowsCritical ... + VMGuestPatchClassificationWindowsCritical VMGuestPatchClassificationWindows = "Critical" + // VMGuestPatchClassificationWindowsDefinition ... + VMGuestPatchClassificationWindowsDefinition VMGuestPatchClassificationWindows = "Definition" + // VMGuestPatchClassificationWindowsFeaturePack ... + VMGuestPatchClassificationWindowsFeaturePack VMGuestPatchClassificationWindows = "FeaturePack" + // VMGuestPatchClassificationWindowsSecurity ... + VMGuestPatchClassificationWindowsSecurity VMGuestPatchClassificationWindows = "Security" + // VMGuestPatchClassificationWindowsServicePack ... + VMGuestPatchClassificationWindowsServicePack VMGuestPatchClassificationWindows = "ServicePack" + // VMGuestPatchClassificationWindowsTools ... + VMGuestPatchClassificationWindowsTools VMGuestPatchClassificationWindows = "Tools" + // VMGuestPatchClassificationWindowsUpdateRollUp ... + VMGuestPatchClassificationWindowsUpdateRollUp VMGuestPatchClassificationWindows = "UpdateRollUp" + // VMGuestPatchClassificationWindowsUpdates ... + VMGuestPatchClassificationWindowsUpdates VMGuestPatchClassificationWindows = "Updates" +) + +// PossibleVMGuestPatchClassificationWindowsValues returns an array of possible values for the VMGuestPatchClassificationWindows const type. +func PossibleVMGuestPatchClassificationWindowsValues() []VMGuestPatchClassificationWindows { + return []VMGuestPatchClassificationWindows{VMGuestPatchClassificationWindowsCritical, VMGuestPatchClassificationWindowsDefinition, VMGuestPatchClassificationWindowsFeaturePack, VMGuestPatchClassificationWindowsSecurity, VMGuestPatchClassificationWindowsServicePack, VMGuestPatchClassificationWindowsTools, VMGuestPatchClassificationWindowsUpdateRollUp, VMGuestPatchClassificationWindowsUpdates} +} + +// VMGuestPatchRebootBehavior enumerates the values for vm guest patch reboot behavior. +type VMGuestPatchRebootBehavior string + +const ( + // VMGuestPatchRebootBehaviorAlwaysRequiresReboot ... + VMGuestPatchRebootBehaviorAlwaysRequiresReboot VMGuestPatchRebootBehavior = "AlwaysRequiresReboot" + // VMGuestPatchRebootBehaviorCanRequestReboot ... + VMGuestPatchRebootBehaviorCanRequestReboot VMGuestPatchRebootBehavior = "CanRequestReboot" + // VMGuestPatchRebootBehaviorNeverReboots ... + VMGuestPatchRebootBehaviorNeverReboots VMGuestPatchRebootBehavior = "NeverReboots" + // VMGuestPatchRebootBehaviorUnknown ... + VMGuestPatchRebootBehaviorUnknown VMGuestPatchRebootBehavior = "Unknown" +) + +// PossibleVMGuestPatchRebootBehaviorValues returns an array of possible values for the VMGuestPatchRebootBehavior const type. +func PossibleVMGuestPatchRebootBehaviorValues() []VMGuestPatchRebootBehavior { + return []VMGuestPatchRebootBehavior{VMGuestPatchRebootBehaviorAlwaysRequiresReboot, VMGuestPatchRebootBehaviorCanRequestReboot, VMGuestPatchRebootBehaviorNeverReboots, VMGuestPatchRebootBehaviorUnknown} +} + +// VMGuestPatchRebootSetting enumerates the values for vm guest patch reboot setting. +type VMGuestPatchRebootSetting string + +const ( + // Always ... + Always VMGuestPatchRebootSetting = "Always" + // IfRequired ... + IfRequired VMGuestPatchRebootSetting = "IfRequired" + // Never ... + Never VMGuestPatchRebootSetting = "Never" +) + +// PossibleVMGuestPatchRebootSettingValues returns an array of possible values for the VMGuestPatchRebootSetting const type. +func PossibleVMGuestPatchRebootSettingValues() []VMGuestPatchRebootSetting { + return []VMGuestPatchRebootSetting{Always, IfRequired, Never} +} + +// VMGuestPatchRebootStatus enumerates the values for vm guest patch reboot status. +type VMGuestPatchRebootStatus string + +const ( + // VMGuestPatchRebootStatusCompleted ... + VMGuestPatchRebootStatusCompleted VMGuestPatchRebootStatus = "Completed" + // VMGuestPatchRebootStatusFailed ... + VMGuestPatchRebootStatusFailed VMGuestPatchRebootStatus = "Failed" + // VMGuestPatchRebootStatusNotNeeded ... + VMGuestPatchRebootStatusNotNeeded VMGuestPatchRebootStatus = "NotNeeded" + // VMGuestPatchRebootStatusRequired ... + VMGuestPatchRebootStatusRequired VMGuestPatchRebootStatus = "Required" + // VMGuestPatchRebootStatusStarted ... + VMGuestPatchRebootStatusStarted VMGuestPatchRebootStatus = "Started" + // VMGuestPatchRebootStatusUnknown ... + VMGuestPatchRebootStatusUnknown VMGuestPatchRebootStatus = "Unknown" +) + +// PossibleVMGuestPatchRebootStatusValues returns an array of possible values for the VMGuestPatchRebootStatus const type. +func PossibleVMGuestPatchRebootStatusValues() []VMGuestPatchRebootStatus { + return []VMGuestPatchRebootStatus{VMGuestPatchRebootStatusCompleted, VMGuestPatchRebootStatusFailed, VMGuestPatchRebootStatusNotNeeded, VMGuestPatchRebootStatusRequired, VMGuestPatchRebootStatusStarted, VMGuestPatchRebootStatusUnknown} +} + +// WindowsPatchAssessmentMode enumerates the values for windows patch assessment mode. +type WindowsPatchAssessmentMode string + +const ( + // WindowsPatchAssessmentModeAutomaticByPlatform ... + WindowsPatchAssessmentModeAutomaticByPlatform WindowsPatchAssessmentMode = "AutomaticByPlatform" + // WindowsPatchAssessmentModeImageDefault ... + WindowsPatchAssessmentModeImageDefault WindowsPatchAssessmentMode = "ImageDefault" +) + +// PossibleWindowsPatchAssessmentModeValues returns an array of possible values for the WindowsPatchAssessmentMode const type. +func PossibleWindowsPatchAssessmentModeValues() []WindowsPatchAssessmentMode { + return []WindowsPatchAssessmentMode{WindowsPatchAssessmentModeAutomaticByPlatform, WindowsPatchAssessmentModeImageDefault} +} + +// WindowsVMGuestPatchAutomaticByPlatformRebootSetting enumerates the values for windows vm guest patch +// automatic by platform reboot setting. +type WindowsVMGuestPatchAutomaticByPlatformRebootSetting string + +const ( + // WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways ... + WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Always" + // WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired ... + WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "IfRequired" + // WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever ... + WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Never" + // WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown ... + WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Unknown" +) + +// PossibleWindowsVMGuestPatchAutomaticByPlatformRebootSettingValues returns an array of possible values for the WindowsVMGuestPatchAutomaticByPlatformRebootSetting const type. +func PossibleWindowsVMGuestPatchAutomaticByPlatformRebootSettingValues() []WindowsVMGuestPatchAutomaticByPlatformRebootSetting { + return []WindowsVMGuestPatchAutomaticByPlatformRebootSetting{WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways, WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired, WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever, WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown} +} + +// WindowsVMGuestPatchMode enumerates the values for windows vm guest patch mode. +type WindowsVMGuestPatchMode string + +const ( + // WindowsVMGuestPatchModeAutomaticByOS ... + WindowsVMGuestPatchModeAutomaticByOS WindowsVMGuestPatchMode = "AutomaticByOS" + // WindowsVMGuestPatchModeAutomaticByPlatform ... + WindowsVMGuestPatchModeAutomaticByPlatform WindowsVMGuestPatchMode = "AutomaticByPlatform" + // WindowsVMGuestPatchModeManual ... + WindowsVMGuestPatchModeManual WindowsVMGuestPatchMode = "Manual" +) + +// PossibleWindowsVMGuestPatchModeValues returns an array of possible values for the WindowsVMGuestPatchMode const type. +func PossibleWindowsVMGuestPatchModeValues() []WindowsVMGuestPatchMode { + return []WindowsVMGuestPatchMode{WindowsVMGuestPatchModeAutomaticByOS, WindowsVMGuestPatchModeAutomaticByPlatform, WindowsVMGuestPatchModeManual} +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleries.go new file mode 100644 index 000000000000..334db1f6cfb9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleries.go @@ -0,0 +1,588 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GalleriesClient is the compute Client +type GalleriesClient struct { + BaseClient +} + +// NewGalleriesClient creates an instance of the GalleriesClient client. +func NewGalleriesClient(subscriptionID string) GalleriesClient { + return NewGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGalleriesClientWithBaseURI creates an instance of the GalleriesClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewGalleriesClientWithBaseURI(baseURI string, subscriptionID string) GalleriesClient { + return GalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a Shared Image Gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery. The allowed characters are alphabets and numbers with +// dots and periods allowed in the middle. The maximum length is 80 characters. +// gallery - parameters supplied to the create or update Shared Image Gallery operation. +func (client GalleriesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, gallery Gallery) (result GalleriesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, gallery) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GalleriesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, gallery Gallery) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), + autorest.WithJSON(gallery), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) CreateOrUpdateSender(req *http.Request) (future GalleriesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GalleriesClient) CreateOrUpdateResponder(resp *http.Response) (result Gallery, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a Shared Image Gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery to be deleted. +func (client GalleriesClient) Delete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleriesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GalleriesClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) DeleteSender(req *http.Request) (future GalleriesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GalleriesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a Shared Image Gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery. +// selectParameter - the select expression to apply on the operation. +// expand - the expand query option to apply on the operation. +func (client GalleriesClient) Get(ctx context.Context, resourceGroupName string, galleryName string, selectParameter SelectPermissions, expand GalleryExpandParams) (result Gallery, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, selectParameter, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GalleriesClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, selectParameter SelectPermissions, expand GalleryExpandParams) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(selectParameter)) > 0 { + queryParameters["$select"] = autorest.Encode("query", selectParameter) + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GalleriesClient) GetResponder(resp *http.Response) (result Gallery, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list galleries under a subscription. +func (client GalleriesClient) List(ctx context.Context) (result GalleryListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.List") + defer func() { + sc := -1 + if result.gl.Response.Response != nil { + sc = result.gl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.gl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", resp, "Failure sending request") + return + } + + result.gl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", resp, "Failure responding to request") + return + } + if result.gl.hasNextLink() && result.gl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client GalleriesClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/galleries", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client GalleriesClient) ListResponder(resp *http.Response) (result GalleryList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client GalleriesClient) listNextResults(ctx context.Context, lastResults GalleryList) (result GalleryList, err error) { + req, err := lastResults.galleryListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleriesClient) ListComplete(ctx context.Context) (result GalleryListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListByResourceGroup list galleries under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client GalleriesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result GalleryListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.gl.Response.Response != nil { + sc = result.gl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.gl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.gl, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.gl.hasNextLink() && result.gl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client GalleriesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client GalleriesClient) ListByResourceGroupResponder(resp *http.Response) (result GalleryList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client GalleriesClient) listByResourceGroupNextResults(ctx context.Context, lastResults GalleryList) (result GalleryList, err error) { + req, err := lastResults.galleryListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleriesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result GalleryListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// Update update a Shared Image Gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery. The allowed characters are alphabets and numbers with +// dots and periods allowed in the middle. The maximum length is 80 characters. +// gallery - parameters supplied to the update Shared Image Gallery operation. +func (client GalleriesClient) Update(ctx context.Context, resourceGroupName string, galleryName string, gallery GalleryUpdate) (result GalleriesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, gallery) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GalleriesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, gallery GalleryUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), + autorest.WithJSON(gallery), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GalleriesClient) UpdateSender(req *http.Request) (future GalleriesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GalleriesClient) UpdateResponder(resp *http.Response) (result Gallery, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplications.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplications.go new file mode 100644 index 000000000000..d1599af68494 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplications.go @@ -0,0 +1,485 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GalleryApplicationsClient is the compute Client +type GalleryApplicationsClient struct { + BaseClient +} + +// NewGalleryApplicationsClient creates an instance of the GalleryApplicationsClient client. +func NewGalleryApplicationsClient(subscriptionID string) GalleryApplicationsClient { + return NewGalleryApplicationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGalleryApplicationsClientWithBaseURI creates an instance of the GalleryApplicationsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewGalleryApplicationsClientWithBaseURI(baseURI string, subscriptionID string) GalleryApplicationsClient { + return GalleryApplicationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a gallery Application Definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be +// created. +// galleryApplicationName - the name of the gallery Application Definition to be created or updated. The +// allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The +// maximum length is 80 characters. +// galleryApplication - parameters supplied to the create or update gallery Application operation. +func (client GalleryApplicationsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplication) (result GalleryApplicationsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplication) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GalleryApplicationsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplication) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), + autorest.WithJSON(galleryApplication), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationsClient) CreateOrUpdateSender(req *http.Request) (future GalleryApplicationsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GalleryApplicationsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryApplication, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a gallery Application. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be +// deleted. +// galleryApplicationName - the name of the gallery Application Definition to be deleted. +func (client GalleryApplicationsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GalleryApplicationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationsClient) DeleteSender(req *http.Request) (future GalleryApplicationsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GalleryApplicationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a gallery Application Definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery from which the Application Definitions are to be +// retrieved. +// galleryApplicationName - the name of the gallery Application Definition to be retrieved. +func (client GalleryApplicationsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplication, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GalleryApplicationsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GalleryApplicationsClient) GetResponder(resp *http.Response) (result GalleryApplication, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByGallery list gallery Application Definitions in a gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery from which Application Definitions are to be +// listed. +func (client GalleryApplicationsClient) ListByGallery(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryApplicationListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.ListByGallery") + defer func() { + sc := -1 + if result.gal.Response.Response != nil { + sc = result.gal.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByGalleryNextResults + req, err := client.ListByGalleryPreparer(ctx, resourceGroupName, galleryName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", nil, "Failure preparing request") + return + } + + resp, err := client.ListByGallerySender(req) + if err != nil { + result.gal.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", resp, "Failure sending request") + return + } + + result.gal, err = client.ListByGalleryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", resp, "Failure responding to request") + return + } + if result.gal.hasNextLink() && result.gal.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByGalleryPreparer prepares the ListByGallery request. +func (client GalleryApplicationsClient) ListByGalleryPreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByGallerySender sends the ListByGallery request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationsClient) ListByGallerySender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByGalleryResponder handles the response to the ListByGallery request. The method always +// closes the http.Response Body. +func (client GalleryApplicationsClient) ListByGalleryResponder(resp *http.Response) (result GalleryApplicationList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByGalleryNextResults retrieves the next set of results, if any. +func (client GalleryApplicationsClient) listByGalleryNextResults(ctx context.Context, lastResults GalleryApplicationList) (result GalleryApplicationList, err error) { + req, err := lastResults.galleryApplicationListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByGallerySender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByGalleryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByGalleryComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleryApplicationsClient) ListByGalleryComplete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryApplicationListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.ListByGallery") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByGallery(ctx, resourceGroupName, galleryName) + return +} + +// Update update a gallery Application Definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be +// updated. +// galleryApplicationName - the name of the gallery Application Definition to be updated. The allowed +// characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum +// length is 80 characters. +// galleryApplication - parameters supplied to the update gallery Application operation. +func (client GalleryApplicationsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplicationUpdate) (result GalleryApplicationsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplication) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GalleryApplicationsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplicationUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), + autorest.WithJSON(galleryApplication), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationsClient) UpdateSender(req *http.Request) (future GalleryApplicationsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GalleryApplicationsClient) UpdateResponder(resp *http.Response) (result GalleryApplication, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplicationversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplicationversions.go new file mode 100644 index 000000000000..364a3c02d825 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryapplicationversions.go @@ -0,0 +1,516 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GalleryApplicationVersionsClient is the compute Client +type GalleryApplicationVersionsClient struct { + BaseClient +} + +// NewGalleryApplicationVersionsClient creates an instance of the GalleryApplicationVersionsClient client. +func NewGalleryApplicationVersionsClient(subscriptionID string) GalleryApplicationVersionsClient { + return NewGalleryApplicationVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGalleryApplicationVersionsClientWithBaseURI creates an instance of the GalleryApplicationVersionsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewGalleryApplicationVersionsClientWithBaseURI(baseURI string, subscriptionID string) GalleryApplicationVersionsClient { + return GalleryApplicationVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a gallery Application Version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. +// galleryApplicationName - the name of the gallery Application Definition in which the Application Version is +// to be created. +// galleryApplicationVersionName - the name of the gallery Application Version to be created. Needs to follow +// semantic version name pattern: The allowed characters are digit and period. Digits must be within the range +// of a 32-bit integer. Format: .. +// galleryApplicationVersion - parameters supplied to the create or update gallery Application Version +// operation. +func (client GalleryApplicationVersionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersion) (result GalleryApplicationVersionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: galleryApplicationVersion, + Constraints: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile", Name: validation.Null, Rule: true, + Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.Source", Name: validation.Null, Rule: true, + Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.Source.MediaLink", Name: validation.Null, Rule: true, Chain: nil}}}, + {Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions.Install", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions.Remove", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.GalleryApplicationVersionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GalleryApplicationVersionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersion) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), + autorest.WithJSON(galleryApplicationVersion), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationVersionsClient) CreateOrUpdateSender(req *http.Request) (future GalleryApplicationVersionsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GalleryApplicationVersionsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a gallery Application Version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. +// galleryApplicationName - the name of the gallery Application Definition in which the Application Version +// resides. +// galleryApplicationVersionName - the name of the gallery Application Version to be deleted. +func (client GalleryApplicationVersionsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string) (result GalleryApplicationVersionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GalleryApplicationVersionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationVersionsClient) DeleteSender(req *http.Request) (future GalleryApplicationVersionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GalleryApplicationVersionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a gallery Application Version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. +// galleryApplicationName - the name of the gallery Application Definition in which the Application Version +// resides. +// galleryApplicationVersionName - the name of the gallery Application Version to be retrieved. +// expand - the expand expression to apply on the operation. +func (client GalleryApplicationVersionsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, expand ReplicationStatusTypes) (result GalleryApplicationVersion, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GalleryApplicationVersionsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, expand ReplicationStatusTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationVersionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GalleryApplicationVersionsClient) GetResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByGalleryApplication list gallery Application Versions in a gallery Application Definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. +// galleryApplicationName - the name of the Shared Application Gallery Application Definition from which the +// Application Versions are to be listed. +func (client GalleryApplicationVersionsClient) ListByGalleryApplication(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationVersionListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.ListByGalleryApplication") + defer func() { + sc := -1 + if result.gavl.Response.Response != nil { + sc = result.gavl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByGalleryApplicationNextResults + req, err := client.ListByGalleryApplicationPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", nil, "Failure preparing request") + return + } + + resp, err := client.ListByGalleryApplicationSender(req) + if err != nil { + result.gavl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", resp, "Failure sending request") + return + } + + result.gavl, err = client.ListByGalleryApplicationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", resp, "Failure responding to request") + return + } + if result.gavl.hasNextLink() && result.gavl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByGalleryApplicationPreparer prepares the ListByGalleryApplication request. +func (client GalleryApplicationVersionsClient) ListByGalleryApplicationPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByGalleryApplicationSender sends the ListByGalleryApplication request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationVersionsClient) ListByGalleryApplicationSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByGalleryApplicationResponder handles the response to the ListByGalleryApplication request. The method always +// closes the http.Response Body. +func (client GalleryApplicationVersionsClient) ListByGalleryApplicationResponder(resp *http.Response) (result GalleryApplicationVersionList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByGalleryApplicationNextResults retrieves the next set of results, if any. +func (client GalleryApplicationVersionsClient) listByGalleryApplicationNextResults(ctx context.Context, lastResults GalleryApplicationVersionList) (result GalleryApplicationVersionList, err error) { + req, err := lastResults.galleryApplicationVersionListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByGalleryApplicationSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByGalleryApplicationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByGalleryApplicationComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleryApplicationVersionsClient) ListByGalleryApplicationComplete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationVersionListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.ListByGalleryApplication") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByGalleryApplication(ctx, resourceGroupName, galleryName, galleryApplicationName) + return +} + +// Update update a gallery Application Version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. +// galleryApplicationName - the name of the gallery Application Definition in which the Application Version is +// to be updated. +// galleryApplicationVersionName - the name of the gallery Application Version to be updated. Needs to follow +// semantic version name pattern: The allowed characters are digit and period. Digits must be within the range +// of a 32-bit integer. Format: .. +// galleryApplicationVersion - parameters supplied to the update gallery Application Version operation. +func (client GalleryApplicationVersionsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersionUpdate) (result GalleryApplicationVersionsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GalleryApplicationVersionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryApplicationName": autorest.Encode("path", galleryApplicationName), + "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), + autorest.WithJSON(galleryApplicationVersion), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryApplicationVersionsClient) UpdateSender(req *http.Request) (future GalleryApplicationVersionsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GalleryApplicationVersionsClient) UpdateResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimages.go new file mode 100644 index 000000000000..61283069ba75 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimages.go @@ -0,0 +1,492 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GalleryImagesClient is the compute Client +type GalleryImagesClient struct { + BaseClient +} + +// NewGalleryImagesClient creates an instance of the GalleryImagesClient client. +func NewGalleryImagesClient(subscriptionID string) GalleryImagesClient { + return NewGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGalleryImagesClientWithBaseURI creates an instance of the GalleryImagesClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) GalleryImagesClient { + return GalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a gallery image definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be created. +// galleryImageName - the name of the gallery image definition to be created or updated. The allowed characters +// are alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum length is 80 +// characters. +// galleryImage - parameters supplied to the create or update gallery image operation. +func (client GalleryImagesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImage) (result GalleryImagesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: galleryImage, + Constraints: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties.Identifier", Name: validation.Null, Rule: true, + Chain: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties.Identifier.Publisher", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "galleryImage.GalleryImageProperties.Identifier.Offer", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "galleryImage.GalleryImageProperties.Identifier.Sku", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.GalleryImagesClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImage) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GalleryImagesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImage) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), + autorest.WithJSON(galleryImage), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImagesClient) CreateOrUpdateSender(req *http.Request) (future GalleryImagesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GalleryImagesClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a gallery image. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be deleted. +// galleryImageName - the name of the gallery image definition to be deleted. +func (client GalleryImagesClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImagesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GalleryImagesClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImagesClient) DeleteSender(req *http.Request) (future GalleryImagesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GalleryImagesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a gallery image definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery from which the Image Definitions are to be retrieved. +// galleryImageName - the name of the gallery image definition to be retrieved. +func (client GalleryImagesClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GalleryImagesClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GalleryImagesClient) GetResponder(resp *http.Response) (result GalleryImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByGallery list gallery image definitions in a gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery from which Image Definitions are to be listed. +func (client GalleryImagesClient) ListByGallery(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryImageListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.ListByGallery") + defer func() { + sc := -1 + if result.gil.Response.Response != nil { + sc = result.gil.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByGalleryNextResults + req, err := client.ListByGalleryPreparer(ctx, resourceGroupName, galleryName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", nil, "Failure preparing request") + return + } + + resp, err := client.ListByGallerySender(req) + if err != nil { + result.gil.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", resp, "Failure sending request") + return + } + + result.gil, err = client.ListByGalleryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", resp, "Failure responding to request") + return + } + if result.gil.hasNextLink() && result.gil.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByGalleryPreparer prepares the ListByGallery request. +func (client GalleryImagesClient) ListByGalleryPreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByGallerySender sends the ListByGallery request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImagesClient) ListByGallerySender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByGalleryResponder handles the response to the ListByGallery request. The method always +// closes the http.Response Body. +func (client GalleryImagesClient) ListByGalleryResponder(resp *http.Response) (result GalleryImageList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByGalleryNextResults retrieves the next set of results, if any. +func (client GalleryImagesClient) listByGalleryNextResults(ctx context.Context, lastResults GalleryImageList) (result GalleryImageList, err error) { + req, err := lastResults.galleryImageListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByGallerySender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByGalleryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByGalleryComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleryImagesClient) ListByGalleryComplete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryImageListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.ListByGallery") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByGallery(ctx, resourceGroupName, galleryName) + return +} + +// Update update a gallery image definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be updated. +// galleryImageName - the name of the gallery image definition to be updated. The allowed characters are +// alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum length is 80 +// characters. +// galleryImage - parameters supplied to the update gallery image operation. +func (client GalleryImagesClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImageUpdate) (result GalleryImagesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImage) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GalleryImagesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImageUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), + autorest.WithJSON(galleryImage), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImagesClient) UpdateSender(req *http.Request) (future GalleryImagesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GalleryImagesClient) UpdateResponder(resp *http.Response) (result GalleryImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimageversions.go new file mode 100644 index 000000000000..e06108847b0c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/galleryimageversions.go @@ -0,0 +1,503 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GalleryImageVersionsClient is the compute Client +type GalleryImageVersionsClient struct { + BaseClient +} + +// NewGalleryImageVersionsClient creates an instance of the GalleryImageVersionsClient client. +func NewGalleryImageVersionsClient(subscriptionID string) GalleryImageVersionsClient { + return NewGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGalleryImageVersionsClientWithBaseURI creates an instance of the GalleryImageVersionsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) GalleryImageVersionsClient { + return GalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a gallery image version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. +// galleryImageName - the name of the gallery image definition in which the Image Version is to be created. +// galleryImageVersionName - the name of the gallery image version to be created. Needs to follow semantic +// version name pattern: The allowed characters are digit and period. Digits must be within the range of a +// 32-bit integer. Format: .. +// galleryImageVersion - parameters supplied to the create or update gallery image version operation. +func (client GalleryImageVersionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersion) (result GalleryImageVersionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: galleryImageVersion, + Constraints: []validation.Constraint{{Target: "galleryImageVersion.GalleryImageVersionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "galleryImageVersion.GalleryImageVersionProperties.StorageProfile", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("compute.GalleryImageVersionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GalleryImageVersionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersion) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithJSON(galleryImageVersion), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImageVersionsClient) CreateOrUpdateSender(req *http.Request) (future GalleryImageVersionsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GalleryImageVersionsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryImageVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a gallery image version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. +// galleryImageName - the name of the gallery image definition in which the Image Version resides. +// galleryImageVersionName - the name of the gallery image version to be deleted. +func (client GalleryImageVersionsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string) (result GalleryImageVersionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GalleryImageVersionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImageVersionsClient) DeleteSender(req *http.Request) (future GalleryImageVersionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GalleryImageVersionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a gallery image version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. +// galleryImageName - the name of the gallery image definition in which the Image Version resides. +// galleryImageVersionName - the name of the gallery image version to be retrieved. +// expand - the expand expression to apply on the operation. +func (client GalleryImageVersionsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, expand ReplicationStatusTypes) (result GalleryImageVersion, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GalleryImageVersionsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, expand ReplicationStatusTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GalleryImageVersionsClient) GetResponder(resp *http.Response) (result GalleryImageVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByGalleryImage list gallery image versions in a gallery image definition. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. +// galleryImageName - the name of the Shared Image Gallery Image Definition from which the Image Versions are +// to be listed. +func (client GalleryImageVersionsClient) ListByGalleryImage(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImageVersionListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.ListByGalleryImage") + defer func() { + sc := -1 + if result.givl.Response.Response != nil { + sc = result.givl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByGalleryImageNextResults + req, err := client.ListByGalleryImagePreparer(ctx, resourceGroupName, galleryName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", nil, "Failure preparing request") + return + } + + resp, err := client.ListByGalleryImageSender(req) + if err != nil { + result.givl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", resp, "Failure sending request") + return + } + + result.givl, err = client.ListByGalleryImageResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", resp, "Failure responding to request") + return + } + if result.givl.hasNextLink() && result.givl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByGalleryImagePreparer prepares the ListByGalleryImage request. +func (client GalleryImageVersionsClient) ListByGalleryImagePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByGalleryImageSender sends the ListByGalleryImage request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImageVersionsClient) ListByGalleryImageSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByGalleryImageResponder handles the response to the ListByGalleryImage request. The method always +// closes the http.Response Body. +func (client GalleryImageVersionsClient) ListByGalleryImageResponder(resp *http.Response) (result GalleryImageVersionList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByGalleryImageNextResults retrieves the next set of results, if any. +func (client GalleryImageVersionsClient) listByGalleryImageNextResults(ctx context.Context, lastResults GalleryImageVersionList) (result GalleryImageVersionList, err error) { + req, err := lastResults.galleryImageVersionListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByGalleryImageSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByGalleryImageResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByGalleryImageComplete enumerates all values, automatically crossing page boundaries as required. +func (client GalleryImageVersionsClient) ListByGalleryImageComplete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImageVersionListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.ListByGalleryImage") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByGalleryImage(ctx, resourceGroupName, galleryName, galleryImageName) + return +} + +// Update update a gallery image version. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. +// galleryImageName - the name of the gallery image definition in which the Image Version is to be updated. +// galleryImageVersionName - the name of the gallery image version to be updated. Needs to follow semantic +// version name pattern: The allowed characters are digit and period. Digits must be within the range of a +// 32-bit integer. Format: .. +// galleryImageVersion - parameters supplied to the update gallery image version operation. +func (client GalleryImageVersionsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersionUpdate) (result GalleryImageVersionsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GalleryImageVersionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithJSON(galleryImageVersion), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GalleryImageVersionsClient) UpdateSender(req *http.Request) (future GalleryImageVersionsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GalleryImageVersionsClient) UpdateResponder(resp *http.Response) (result GalleryImageVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/gallerysharingprofile.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/gallerysharingprofile.go new file mode 100644 index 000000000000..311d7e7c8b2f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/gallerysharingprofile.go @@ -0,0 +1,114 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GallerySharingProfileClient is the compute Client +type GallerySharingProfileClient struct { + BaseClient +} + +// NewGallerySharingProfileClient creates an instance of the GallerySharingProfileClient client. +func NewGallerySharingProfileClient(subscriptionID string) GallerySharingProfileClient { + return NewGallerySharingProfileClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGallerySharingProfileClientWithBaseURI creates an instance of the GallerySharingProfileClient client using a +// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, +// Azure stack). +func NewGallerySharingProfileClientWithBaseURI(baseURI string, subscriptionID string) GallerySharingProfileClient { + return GallerySharingProfileClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Update update sharing profile of a gallery. +// Parameters: +// resourceGroupName - the name of the resource group. +// galleryName - the name of the Shared Image Gallery. +// sharingUpdate - parameters supplied to the update gallery sharing profile. +func (client GallerySharingProfileClient) Update(ctx context.Context, resourceGroupName string, galleryName string, sharingUpdate SharingUpdate) (result GallerySharingProfileUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GallerySharingProfileClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, sharingUpdate) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client GallerySharingProfileClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, sharingUpdate SharingUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryName": autorest.Encode("path", galleryName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", pathParameters), + autorest.WithJSON(sharingUpdate), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client GallerySharingProfileClient) UpdateSender(req *http.Request) (future GallerySharingProfileUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client GallerySharingProfileClient) UpdateResponder(resp *http.Response) (result SharingUpdate, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/images.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/images.go new file mode 100644 index 000000000000..6c41cf7cea27 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/images.go @@ -0,0 +1,583 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ImagesClient is the compute Client +type ImagesClient struct { + BaseClient +} + +// NewImagesClient creates an instance of the ImagesClient client. +func NewImagesClient(subscriptionID string) ImagesClient { + return NewImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewImagesClientWithBaseURI creates an instance of the ImagesClient client using a custom endpoint. Use this when +// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewImagesClientWithBaseURI(baseURI string, subscriptionID string) ImagesClient { + return ImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update an image. +// Parameters: +// resourceGroupName - the name of the resource group. +// imageName - the name of the image. +// parameters - parameters supplied to the Create Image operation. +func (client ImagesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, imageName string, parameters Image) (result ImagesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, imageName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ImagesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, imageName string, parameters Image) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "imageName": autorest.Encode("path", imageName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) CreateOrUpdateSender(req *http.Request) (future ImagesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ImagesClient) CreateOrUpdateResponder(resp *http.Response) (result Image, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes an Image. +// Parameters: +// resourceGroupName - the name of the resource group. +// imageName - the name of the image. +func (client ImagesClient) Delete(ctx context.Context, resourceGroupName string, imageName string) (result ImagesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, imageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ImagesClient) DeletePreparer(ctx context.Context, resourceGroupName string, imageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "imageName": autorest.Encode("path", imageName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) DeleteSender(req *http.Request) (future ImagesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ImagesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets an image. +// Parameters: +// resourceGroupName - the name of the resource group. +// imageName - the name of the image. +// expand - the expand expression to apply on the operation. +func (client ImagesClient) Get(ctx context.Context, resourceGroupName string, imageName string, expand string) (result Image, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, imageName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ImagesClient) GetPreparer(ctx context.Context, resourceGroupName string, imageName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "imageName": autorest.Encode("path", imageName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ImagesClient) GetResponder(resp *http.Response) (result Image, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets the list of Images in the subscription. Use nextLink property in the response to get the next page of +// Images. Do this till nextLink is null to fetch all the Images. +func (client ImagesClient) List(ctx context.Context) (result ImageListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.List") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure responding to request") + return + } + if result.ilr.hasNextLink() && result.ilr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ImagesClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ImagesClient) ListResponder(resp *http.Response) (result ImageListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ImagesClient) listNextResults(ctx context.Context, lastResults ImageListResult) (result ImageListResult, err error) { + req, err := lastResults.imageListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ImagesClient) ListComplete(ctx context.Context) (result ImageListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListByResourceGroup gets the list of images under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client ImagesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ImageListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.ilr.hasNextLink() && result.ilr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client ImagesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client ImagesClient) ListByResourceGroupResponder(resp *http.Response) (result ImageListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client ImagesClient) listByResourceGroupNextResults(ctx context.Context, lastResults ImageListResult) (result ImageListResult, err error) { + req, err := lastResults.imageListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client ImagesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ImageListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// Update update an image. +// Parameters: +// resourceGroupName - the name of the resource group. +// imageName - the name of the image. +// parameters - parameters supplied to the Update Image operation. +func (client ImagesClient) Update(ctx context.Context, resourceGroupName string, imageName string, parameters ImageUpdate) (result ImagesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, imageName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client ImagesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, imageName string, parameters ImageUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "imageName": autorest.Encode("path", imageName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client ImagesClient) UpdateSender(req *http.Request) (future ImagesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client ImagesClient) UpdateResponder(resp *http.Response) (result Image, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/loganalytics.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/loganalytics.go new file mode 100644 index 000000000000..9182f969d8ef --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/loganalytics.go @@ -0,0 +1,206 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// LogAnalyticsClient is the compute Client +type LogAnalyticsClient struct { + BaseClient +} + +// NewLogAnalyticsClient creates an instance of the LogAnalyticsClient client. +func NewLogAnalyticsClient(subscriptionID string) LogAnalyticsClient { + return NewLogAnalyticsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewLogAnalyticsClientWithBaseURI creates an instance of the LogAnalyticsClient client using a custom endpoint. Use +// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewLogAnalyticsClientWithBaseURI(baseURI string, subscriptionID string) LogAnalyticsClient { + return LogAnalyticsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// ExportRequestRateByInterval export logs that show Api requests made by this subscription in the given time window to +// show throttling activities. +// Parameters: +// parameters - parameters supplied to the LogAnalytics getRequestRateByInterval Api. +// location - the location upon which virtual-machine-sizes is queried. +func (client LogAnalyticsClient) ExportRequestRateByInterval(ctx context.Context, parameters RequestRateByIntervalInput, location string) (result LogAnalyticsExportRequestRateByIntervalFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LogAnalyticsClient.ExportRequestRateByInterval") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.LogAnalyticsClient", "ExportRequestRateByInterval", err.Error()) + } + + req, err := client.ExportRequestRateByIntervalPreparer(ctx, parameters, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportRequestRateByInterval", nil, "Failure preparing request") + return + } + + result, err = client.ExportRequestRateByIntervalSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportRequestRateByInterval", result.Response(), "Failure sending request") + return + } + + return +} + +// ExportRequestRateByIntervalPreparer prepares the ExportRequestRateByInterval request. +func (client LogAnalyticsClient) ExportRequestRateByIntervalPreparer(ctx context.Context, parameters RequestRateByIntervalInput, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ExportRequestRateByIntervalSender sends the ExportRequestRateByInterval request. The method will close the +// http.Response Body if it receives an error. +func (client LogAnalyticsClient) ExportRequestRateByIntervalSender(req *http.Request) (future LogAnalyticsExportRequestRateByIntervalFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ExportRequestRateByIntervalResponder handles the response to the ExportRequestRateByInterval request. The method always +// closes the http.Response Body. +func (client LogAnalyticsClient) ExportRequestRateByIntervalResponder(resp *http.Response) (result LogAnalyticsOperationResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ExportThrottledRequests export logs that show total throttled Api requests for this subscription in the given time +// window. +// Parameters: +// parameters - parameters supplied to the LogAnalytics getThrottledRequests Api. +// location - the location upon which virtual-machine-sizes is queried. +func (client LogAnalyticsClient) ExportThrottledRequests(ctx context.Context, parameters ThrottledRequestsInput, location string) (result LogAnalyticsExportThrottledRequestsFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LogAnalyticsClient.ExportThrottledRequests") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.LogAnalyticsClient", "ExportThrottledRequests", err.Error()) + } + + req, err := client.ExportThrottledRequestsPreparer(ctx, parameters, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportThrottledRequests", nil, "Failure preparing request") + return + } + + result, err = client.ExportThrottledRequestsSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportThrottledRequests", result.Response(), "Failure sending request") + return + } + + return +} + +// ExportThrottledRequestsPreparer prepares the ExportThrottledRequests request. +func (client LogAnalyticsClient) ExportThrottledRequestsPreparer(ctx context.Context, parameters ThrottledRequestsInput, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ExportThrottledRequestsSender sends the ExportThrottledRequests request. The method will close the +// http.Response Body if it receives an error. +func (client LogAnalyticsClient) ExportThrottledRequestsSender(req *http.Request) (future LogAnalyticsExportThrottledRequestsFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ExportThrottledRequestsResponder handles the response to the ExportThrottledRequests request. The method always +// closes the http.Response Body. +func (client LogAnalyticsClient) ExportThrottledRequestsResponder(resp *http.Response) (result LogAnalyticsOperationResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/models.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/models.go new file mode 100644 index 000000000000..5580543b4cbe --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/models.go @@ -0,0 +1,24333 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "encoding/json" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/date" + "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/go-autorest/tracing" + "io" + "net/http" +) + +// The package's fully qualified name. +const fqdn = "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + +// AccessURI a disk access SAS uri. +type AccessURI struct { + autorest.Response `json:"-"` + // AccessSAS - READ-ONLY; A SAS uri for accessing a disk. + AccessSAS *string `json:"accessSAS,omitempty"` + // SecurityDataAccessSAS - READ-ONLY; A SAS uri for accessing a VM guest state. + SecurityDataAccessSAS *string `json:"securityDataAccessSAS,omitempty"` +} + +// MarshalJSON is the custom marshaler for AccessURI. +func (au AccessURI) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// AdditionalCapabilities enables or disables a capability on the virtual machine or virtual machine scale +// set. +type AdditionalCapabilities struct { + // UltraSSDEnabled - The flag that enables or disables a capability to have one or more managed data disks with UltraSSD_LRS storage account type on the VM or VMSS. Managed disks with storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale set only if this property is enabled. + UltraSSDEnabled *bool `json:"ultraSSDEnabled,omitempty"` + // HibernationEnabled - The flag that enables or disables hibernation capability on the VM. + HibernationEnabled *bool `json:"hibernationEnabled,omitempty"` +} + +// AdditionalUnattendContent specifies additional XML formatted information that can be included in the +// Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, +// and the pass in which the content is applied. +type AdditionalUnattendContent struct { + // PassName - The pass name. Currently, the only allowable value is OobeSystem. Possible values include: 'OobeSystem' + PassName PassNames `json:"passName,omitempty"` + // ComponentName - The component name. Currently, the only allowable value is Microsoft-Windows-Shell-Setup. Possible values include: 'MicrosoftWindowsShellSetup' + ComponentName ComponentNames `json:"componentName,omitempty"` + // SettingName - Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon. Possible values include: 'AutoLogon', 'FirstLogonCommands' + SettingName SettingNames `json:"settingName,omitempty"` + // Content - Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted. + Content *string `json:"content,omitempty"` +} + +// APIEntityReference the API entity reference. +type APIEntityReference struct { + // ID - The ARM resource id in the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/... + ID *string `json:"id,omitempty"` +} + +// APIError api error. +type APIError struct { + // Details - The Api error details + Details *[]APIErrorBase `json:"details,omitempty"` + // Innererror - The Api inner error + Innererror *InnerError `json:"innererror,omitempty"` + // Code - The error code. + Code *string `json:"code,omitempty"` + // Target - The target of the particular error. + Target *string `json:"target,omitempty"` + // Message - The error message. + Message *string `json:"message,omitempty"` +} + +// APIErrorBase api error base. +type APIErrorBase struct { + // Code - The error code. + Code *string `json:"code,omitempty"` + // Target - The target of the particular error. + Target *string `json:"target,omitempty"` + // Message - The error message. + Message *string `json:"message,omitempty"` +} + +// ApplicationProfile contains the list of gallery applications that should be made available to the +// VM/VMSS +type ApplicationProfile struct { + // GalleryApplications - Specifies the gallery applications that should be made available to the VM/VMSS + GalleryApplications *[]VMGalleryApplication `json:"galleryApplications,omitempty"` +} + +// AutomaticOSUpgradePolicy the configuration parameters used for performing automatic OS upgrade. +type AutomaticOSUpgradePolicy struct { + // EnableAutomaticOSUpgrade - Indicates whether OS upgrades should automatically be applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false.

If this is set to true for Windows based scale sets, [enableAutomaticUpdates](https://docs.microsoft.com/dotnet/api/microsoft.azure.management.compute.models.windowsconfiguration.enableautomaticupdates?view=azure-dotnet) is automatically set to false and cannot be set to true. + EnableAutomaticOSUpgrade *bool `json:"enableAutomaticOSUpgrade,omitempty"` + // DisableAutomaticRollback - Whether OS image rollback feature should be disabled. Default value is false. + DisableAutomaticRollback *bool `json:"disableAutomaticRollback,omitempty"` + // UseRollingUpgradePolicy - Indicates whether rolling upgrade policy should be used during Auto OS Upgrade. Default value is false. Auto OS Upgrade will fallback to the default policy if no policy is defined on the VMSS. + UseRollingUpgradePolicy *bool `json:"useRollingUpgradePolicy,omitempty"` +} + +// AutomaticOSUpgradeProperties describes automatic OS upgrade properties on the image. +type AutomaticOSUpgradeProperties struct { + // AutomaticOSUpgradeSupported - Specifies whether automatic OS upgrade is supported on the image. + AutomaticOSUpgradeSupported *bool `json:"automaticOSUpgradeSupported,omitempty"` +} + +// AutomaticRepairsPolicy specifies the configuration parameters for automatic repairs on the virtual +// machine scale set. +type AutomaticRepairsPolicy struct { + // Enabled - Specifies whether automatic repairs should be enabled on the virtual machine scale set. The default value is false. + Enabled *bool `json:"enabled,omitempty"` + // GracePeriod - The amount of time for which automatic repairs are suspended due to a state change on VM. The grace time starts after the state change has completed. This helps avoid premature or accidental repairs. The time duration should be specified in ISO 8601 format. The minimum allowed grace period is 10 minutes (PT10M), which is also the default value. The maximum allowed grace period is 90 minutes (PT90M). + GracePeriod *string `json:"gracePeriod,omitempty"` + // RepairAction - Type of repair action (replace, restart, reimage) that will be used for repairing unhealthy virtual machines in the scale set. Default value is replace. Possible values include: 'Replace', 'Restart', 'Reimage' + RepairAction RepairAction `json:"repairAction,omitempty"` +} + +// AvailabilitySet specifies information about the availability set that the virtual machine should be +// assigned to. Virtual machines specified in the same availability set are allocated to different nodes to +// maximize availability. For more information about availability sets, see [Availability sets +// overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

For +// more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in +// Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

Currently, a +// VM can only be added to availability set at creation time. An existing VM cannot be added to an +// availability set. +type AvailabilitySet struct { + autorest.Response `json:"-"` + *AvailabilitySetProperties `json:"properties,omitempty"` + // Sku - Sku of the availability set, only name is required to be set. See AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is 'Classic'. + Sku *Sku `json:"sku,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for AvailabilitySet. +func (as AvailabilitySet) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if as.AvailabilitySetProperties != nil { + objectMap["properties"] = as.AvailabilitySetProperties + } + if as.Sku != nil { + objectMap["sku"] = as.Sku + } + if as.Location != nil { + objectMap["location"] = as.Location + } + if as.Tags != nil { + objectMap["tags"] = as.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for AvailabilitySet struct. +func (as *AvailabilitySet) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var availabilitySetProperties AvailabilitySetProperties + err = json.Unmarshal(*v, &availabilitySetProperties) + if err != nil { + return err + } + as.AvailabilitySetProperties = &availabilitySetProperties + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + as.Sku = &sku + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + as.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + as.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + as.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + as.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + as.Tags = tags + } + } + } + + return nil +} + +// AvailabilitySetListResult the List Availability Set operation response. +type AvailabilitySetListResult struct { + autorest.Response `json:"-"` + // Value - The list of availability sets + Value *[]AvailabilitySet `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets. + NextLink *string `json:"nextLink,omitempty"` +} + +// AvailabilitySetListResultIterator provides access to a complete listing of AvailabilitySet values. +type AvailabilitySetListResultIterator struct { + i int + page AvailabilitySetListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *AvailabilitySetListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *AvailabilitySetListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter AvailabilitySetListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter AvailabilitySetListResultIterator) Response() AvailabilitySetListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter AvailabilitySetListResultIterator) Value() AvailabilitySet { + if !iter.page.NotDone() { + return AvailabilitySet{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the AvailabilitySetListResultIterator type. +func NewAvailabilitySetListResultIterator(page AvailabilitySetListResultPage) AvailabilitySetListResultIterator { + return AvailabilitySetListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (aslr AvailabilitySetListResult) IsEmpty() bool { + return aslr.Value == nil || len(*aslr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (aslr AvailabilitySetListResult) hasNextLink() bool { + return aslr.NextLink != nil && len(*aslr.NextLink) != 0 +} + +// availabilitySetListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (aslr AvailabilitySetListResult) availabilitySetListResultPreparer(ctx context.Context) (*http.Request, error) { + if !aslr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(aslr.NextLink))) +} + +// AvailabilitySetListResultPage contains a page of AvailabilitySet values. +type AvailabilitySetListResultPage struct { + fn func(context.Context, AvailabilitySetListResult) (AvailabilitySetListResult, error) + aslr AvailabilitySetListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *AvailabilitySetListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.aslr) + if err != nil { + return err + } + page.aslr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *AvailabilitySetListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page AvailabilitySetListResultPage) NotDone() bool { + return !page.aslr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page AvailabilitySetListResultPage) Response() AvailabilitySetListResult { + return page.aslr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page AvailabilitySetListResultPage) Values() []AvailabilitySet { + if page.aslr.IsEmpty() { + return nil + } + return *page.aslr.Value +} + +// Creates a new instance of the AvailabilitySetListResultPage type. +func NewAvailabilitySetListResultPage(cur AvailabilitySetListResult, getNextPage func(context.Context, AvailabilitySetListResult) (AvailabilitySetListResult, error)) AvailabilitySetListResultPage { + return AvailabilitySetListResultPage{ + fn: getNextPage, + aslr: cur, + } +} + +// AvailabilitySetProperties the instance view of a resource. +type AvailabilitySetProperties struct { + // PlatformUpdateDomainCount - Update Domain count. + PlatformUpdateDomainCount *int32 `json:"platformUpdateDomainCount,omitempty"` + // PlatformFaultDomainCount - Fault Domain count. + PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` + // VirtualMachines - A list of references to all virtual machines in the availability set. + VirtualMachines *[]SubResource `json:"virtualMachines,omitempty"` + // ProximityPlacementGroup - Specifies information about the proximity placement group that the availability set should be assigned to.

Minimum api-version: 2018-04-01. + ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` + // Statuses - READ-ONLY; The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for AvailabilitySetProperties. +func (asp AvailabilitySetProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if asp.PlatformUpdateDomainCount != nil { + objectMap["platformUpdateDomainCount"] = asp.PlatformUpdateDomainCount + } + if asp.PlatformFaultDomainCount != nil { + objectMap["platformFaultDomainCount"] = asp.PlatformFaultDomainCount + } + if asp.VirtualMachines != nil { + objectMap["virtualMachines"] = asp.VirtualMachines + } + if asp.ProximityPlacementGroup != nil { + objectMap["proximityPlacementGroup"] = asp.ProximityPlacementGroup + } + return json.Marshal(objectMap) +} + +// AvailabilitySetUpdate specifies information about the availability set that the virtual machine should +// be assigned to. Only tags may be updated. +type AvailabilitySetUpdate struct { + *AvailabilitySetProperties `json:"properties,omitempty"` + // Sku - Sku of the availability set + Sku *Sku `json:"sku,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for AvailabilitySetUpdate. +func (asu AvailabilitySetUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if asu.AvailabilitySetProperties != nil { + objectMap["properties"] = asu.AvailabilitySetProperties + } + if asu.Sku != nil { + objectMap["sku"] = asu.Sku + } + if asu.Tags != nil { + objectMap["tags"] = asu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for AvailabilitySetUpdate struct. +func (asu *AvailabilitySetUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var availabilitySetProperties AvailabilitySetProperties + err = json.Unmarshal(*v, &availabilitySetProperties) + if err != nil { + return err + } + asu.AvailabilitySetProperties = &availabilitySetProperties + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + asu.Sku = &sku + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + asu.Tags = tags + } + } + } + + return nil +} + +// AvailablePatchSummary describes the properties of an virtual machine instance view for available patch +// summary. +type AvailablePatchSummary struct { + // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' + Status PatchOperationStatus `json:"status,omitempty"` + // AssessmentActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. + AssessmentActivityID *string `json:"assessmentActivityId,omitempty"` + // RebootPending - READ-ONLY; The overall reboot status of the VM. It will be true when partially installed patches require a reboot to complete installation but the reboot has not yet occurred. + RebootPending *bool `json:"rebootPending,omitempty"` + // CriticalAndSecurityPatchCount - READ-ONLY; The number of critical or security patches that have been detected as available and not yet installed. + CriticalAndSecurityPatchCount *int32 `json:"criticalAndSecurityPatchCount,omitempty"` + // OtherPatchCount - READ-ONLY; The number of all available patches excluding critical and security. + OtherPatchCount *int32 `json:"otherPatchCount,omitempty"` + // StartTime - READ-ONLY; The UTC timestamp when the operation began. + StartTime *date.Time `json:"startTime,omitempty"` + // LastModifiedTime - READ-ONLY; The UTC timestamp when the operation began. + LastModifiedTime *date.Time `json:"lastModifiedTime,omitempty"` + // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. + Error *APIError `json:"error,omitempty"` +} + +// MarshalJSON is the custom marshaler for AvailablePatchSummary. +func (aps AvailablePatchSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// BillingProfile specifies the billing related details of a Azure Spot VM or VMSS.

Minimum +// api-version: 2019-03-01. +type BillingProfile struct { + // MaxPrice - Specifies the maximum price you are willing to pay for a Azure Spot VM/VMSS. This price is in US Dollars.

This price will be compared with the current Azure Spot price for the VM size. Also, the prices are compared at the time of create/update of Azure Spot VM/VMSS and the operation will only succeed if the maxPrice is greater than the current Azure Spot price.

The maxPrice will also be used for evicting a Azure Spot VM/VMSS if the current Azure Spot price goes beyond the maxPrice after creation of VM/VMSS.

Possible values are:

- Any decimal value greater than zero. Example: 0.01538

-1 – indicates default price to be up-to on-demand.

You can set the maxPrice to -1 to indicate that the Azure Spot VM/VMSS should not be evicted for price reasons. Also, the default max price is -1 if it is not provided by you.

Minimum api-version: 2019-03-01. + MaxPrice *float64 `json:"maxPrice,omitempty"` +} + +// BootDiagnostics boot Diagnostics is a debugging feature which allows you to view Console Output and +// Screenshot to diagnose VM status.

You can easily view the output of your console log.

+// Azure also enables you to see a screenshot of the VM from the hypervisor. +type BootDiagnostics struct { + // Enabled - Whether boot diagnostics should be enabled on the Virtual Machine. + Enabled *bool `json:"enabled,omitempty"` + // StorageURI - Uri of the storage account to use for placing the console output and screenshot.

If storageUri is not specified while enabling boot diagnostics, managed storage will be used. + StorageURI *string `json:"storageUri,omitempty"` +} + +// BootDiagnosticsInstanceView the instance view of a virtual machine boot diagnostics. +type BootDiagnosticsInstanceView struct { + // ConsoleScreenshotBlobURI - READ-ONLY; The console screenshot blob URI.

NOTE: This will **not** be set if boot diagnostics is currently enabled with managed storage. + ConsoleScreenshotBlobURI *string `json:"consoleScreenshotBlobUri,omitempty"` + // SerialConsoleLogBlobURI - READ-ONLY; The serial console log blob Uri.

NOTE: This will **not** be set if boot diagnostics is currently enabled with managed storage. + SerialConsoleLogBlobURI *string `json:"serialConsoleLogBlobUri,omitempty"` + // Status - READ-ONLY; The boot diagnostics status information for the VM.

NOTE: It will be set only if there are errors encountered in enabling boot diagnostics. + Status *InstanceViewStatus `json:"status,omitempty"` +} + +// MarshalJSON is the custom marshaler for BootDiagnosticsInstanceView. +func (bdiv BootDiagnosticsInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CapacityReservation specifies information about the capacity reservation. +type CapacityReservation struct { + autorest.Response `json:"-"` + *CapacityReservationProperties `json:"properties,omitempty"` + // Sku - SKU of the resource for which capacity needs be reserved. The SKU name and capacity is required to be set. Currently VM Skus with the capability called 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. + Sku *Sku `json:"sku,omitempty"` + // Zones - Availability Zone to use for this capacity reservation. The zone has to be single value and also should be part for the list of zones specified during the capacity reservation group creation. The zone can be assigned only during creation. If not provided, the reservation supports only non-zonal deployments. If provided, enforces VM/VMSS using this capacity reservation to be in same zone. + Zones *[]string `json:"zones,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for CapacityReservation. +func (cr CapacityReservation) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cr.CapacityReservationProperties != nil { + objectMap["properties"] = cr.CapacityReservationProperties + } + if cr.Sku != nil { + objectMap["sku"] = cr.Sku + } + if cr.Zones != nil { + objectMap["zones"] = cr.Zones + } + if cr.Location != nil { + objectMap["location"] = cr.Location + } + if cr.Tags != nil { + objectMap["tags"] = cr.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CapacityReservation struct. +func (cr *CapacityReservation) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var capacityReservationProperties CapacityReservationProperties + err = json.Unmarshal(*v, &capacityReservationProperties) + if err != nil { + return err + } + cr.CapacityReservationProperties = &capacityReservationProperties + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + cr.Sku = &sku + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + cr.Zones = &zones + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + cr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cr.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + cr.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + cr.Tags = tags + } + } + } + + return nil +} + +// CapacityReservationGroup specifies information about the capacity reservation group that the capacity +// reservations should be assigned to.

Currently, a capacity reservation can only be added to a +// capacity reservation group at creation time. An existing capacity reservation cannot be added or moved +// to another capacity reservation group. +type CapacityReservationGroup struct { + autorest.Response `json:"-"` + *CapacityReservationGroupProperties `json:"properties,omitempty"` + // Zones - Availability Zones to use for this capacity reservation group. The zones can be assigned only during creation. If not provided, the group supports only regional resources in the region. If provided, enforces each capacity reservation in the group to be in one of the zones. + Zones *[]string `json:"zones,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationGroup. +func (crg CapacityReservationGroup) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if crg.CapacityReservationGroupProperties != nil { + objectMap["properties"] = crg.CapacityReservationGroupProperties + } + if crg.Zones != nil { + objectMap["zones"] = crg.Zones + } + if crg.Location != nil { + objectMap["location"] = crg.Location + } + if crg.Tags != nil { + objectMap["tags"] = crg.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CapacityReservationGroup struct. +func (crg *CapacityReservationGroup) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var capacityReservationGroupProperties CapacityReservationGroupProperties + err = json.Unmarshal(*v, &capacityReservationGroupProperties) + if err != nil { + return err + } + crg.CapacityReservationGroupProperties = &capacityReservationGroupProperties + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + crg.Zones = &zones + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + crg.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + crg.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + crg.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + crg.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + crg.Tags = tags + } + } + } + + return nil +} + +// CapacityReservationGroupInstanceView ... +type CapacityReservationGroupInstanceView struct { + // CapacityReservations - READ-ONLY; List of instance view of the capacity reservations under the capacity reservation group. + CapacityReservations *[]CapacityReservationInstanceViewWithName `json:"capacityReservations,omitempty"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationGroupInstanceView. +func (crgiv CapacityReservationGroupInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CapacityReservationGroupListResult the List capacity reservation group with resource group response. +type CapacityReservationGroupListResult struct { + autorest.Response `json:"-"` + // Value - The list of capacity reservation groups + Value *[]CapacityReservationGroup `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of capacity reservation groups. Call ListNext() with this URI to fetch the next page of capacity reservation groups. + NextLink *string `json:"nextLink,omitempty"` +} + +// CapacityReservationGroupListResultIterator provides access to a complete listing of +// CapacityReservationGroup values. +type CapacityReservationGroupListResultIterator struct { + i int + page CapacityReservationGroupListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CapacityReservationGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CapacityReservationGroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CapacityReservationGroupListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CapacityReservationGroupListResultIterator) Response() CapacityReservationGroupListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CapacityReservationGroupListResultIterator) Value() CapacityReservationGroup { + if !iter.page.NotDone() { + return CapacityReservationGroup{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CapacityReservationGroupListResultIterator type. +func NewCapacityReservationGroupListResultIterator(page CapacityReservationGroupListResultPage) CapacityReservationGroupListResultIterator { + return CapacityReservationGroupListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (crglr CapacityReservationGroupListResult) IsEmpty() bool { + return crglr.Value == nil || len(*crglr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (crglr CapacityReservationGroupListResult) hasNextLink() bool { + return crglr.NextLink != nil && len(*crglr.NextLink) != 0 +} + +// capacityReservationGroupListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (crglr CapacityReservationGroupListResult) capacityReservationGroupListResultPreparer(ctx context.Context) (*http.Request, error) { + if !crglr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(crglr.NextLink))) +} + +// CapacityReservationGroupListResultPage contains a page of CapacityReservationGroup values. +type CapacityReservationGroupListResultPage struct { + fn func(context.Context, CapacityReservationGroupListResult) (CapacityReservationGroupListResult, error) + crglr CapacityReservationGroupListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CapacityReservationGroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.crglr) + if err != nil { + return err + } + page.crglr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CapacityReservationGroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CapacityReservationGroupListResultPage) NotDone() bool { + return !page.crglr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CapacityReservationGroupListResultPage) Response() CapacityReservationGroupListResult { + return page.crglr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CapacityReservationGroupListResultPage) Values() []CapacityReservationGroup { + if page.crglr.IsEmpty() { + return nil + } + return *page.crglr.Value +} + +// Creates a new instance of the CapacityReservationGroupListResultPage type. +func NewCapacityReservationGroupListResultPage(cur CapacityReservationGroupListResult, getNextPage func(context.Context, CapacityReservationGroupListResult) (CapacityReservationGroupListResult, error)) CapacityReservationGroupListResultPage { + return CapacityReservationGroupListResultPage{ + fn: getNextPage, + crglr: cur, + } +} + +// CapacityReservationGroupProperties capacity reservation group Properties. +type CapacityReservationGroupProperties struct { + // CapacityReservations - READ-ONLY; A list of all capacity reservation resource ids that belong to capacity reservation group. + CapacityReservations *[]SubResourceReadOnly `json:"capacityReservations,omitempty"` + // VirtualMachinesAssociated - READ-ONLY; A list of references to all virtual machines associated to the capacity reservation group. + VirtualMachinesAssociated *[]SubResourceReadOnly `json:"virtualMachinesAssociated,omitempty"` + // InstanceView - READ-ONLY; The capacity reservation group instance view which has the list of instance views for all the capacity reservations that belong to the capacity reservation group. + InstanceView *CapacityReservationGroupInstanceView `json:"instanceView,omitempty"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationGroupProperties. +func (crgp CapacityReservationGroupProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CapacityReservationGroupUpdate specifies information about the capacity reservation group. Only tags can +// be updated. +type CapacityReservationGroupUpdate struct { + *CapacityReservationGroupProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationGroupUpdate. +func (crgu CapacityReservationGroupUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if crgu.CapacityReservationGroupProperties != nil { + objectMap["properties"] = crgu.CapacityReservationGroupProperties + } + if crgu.Tags != nil { + objectMap["tags"] = crgu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CapacityReservationGroupUpdate struct. +func (crgu *CapacityReservationGroupUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var capacityReservationGroupProperties CapacityReservationGroupProperties + err = json.Unmarshal(*v, &capacityReservationGroupProperties) + if err != nil { + return err + } + crgu.CapacityReservationGroupProperties = &capacityReservationGroupProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + crgu.Tags = tags + } + } + } + + return nil +} + +// CapacityReservationInstanceView the instance view of a capacity reservation that provides as snapshot of +// the runtime properties of the capacity reservation that is managed by the platform and can change +// outside of control plane operations. +type CapacityReservationInstanceView struct { + // UtilizationInfo - Unutilized capacity of the capacity reservation. + UtilizationInfo *CapacityReservationUtilization `json:"utilizationInfo,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// CapacityReservationInstanceViewWithName the instance view of a capacity reservation that includes the +// name of the capacity reservation. It is used for the response to the instance view of a capacity +// reservation group. +type CapacityReservationInstanceViewWithName struct { + // Name - READ-ONLY; The name of the capacity reservation. + Name *string `json:"name,omitempty"` + // UtilizationInfo - Unutilized capacity of the capacity reservation. + UtilizationInfo *CapacityReservationUtilization `json:"utilizationInfo,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationInstanceViewWithName. +func (crivwn CapacityReservationInstanceViewWithName) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if crivwn.UtilizationInfo != nil { + objectMap["utilizationInfo"] = crivwn.UtilizationInfo + } + if crivwn.Statuses != nil { + objectMap["statuses"] = crivwn.Statuses + } + return json.Marshal(objectMap) +} + +// CapacityReservationListResult the list capacity reservation operation response. +type CapacityReservationListResult struct { + autorest.Response `json:"-"` + // Value - The list of capacity reservations + Value *[]CapacityReservation `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of capacity reservations. Call ListNext() with this URI to fetch the next page of capacity reservations. + NextLink *string `json:"nextLink,omitempty"` +} + +// CapacityReservationListResultIterator provides access to a complete listing of CapacityReservation +// values. +type CapacityReservationListResultIterator struct { + i int + page CapacityReservationListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CapacityReservationListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CapacityReservationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CapacityReservationListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CapacityReservationListResultIterator) Response() CapacityReservationListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CapacityReservationListResultIterator) Value() CapacityReservation { + if !iter.page.NotDone() { + return CapacityReservation{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CapacityReservationListResultIterator type. +func NewCapacityReservationListResultIterator(page CapacityReservationListResultPage) CapacityReservationListResultIterator { + return CapacityReservationListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (crlr CapacityReservationListResult) IsEmpty() bool { + return crlr.Value == nil || len(*crlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (crlr CapacityReservationListResult) hasNextLink() bool { + return crlr.NextLink != nil && len(*crlr.NextLink) != 0 +} + +// capacityReservationListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (crlr CapacityReservationListResult) capacityReservationListResultPreparer(ctx context.Context) (*http.Request, error) { + if !crlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(crlr.NextLink))) +} + +// CapacityReservationListResultPage contains a page of CapacityReservation values. +type CapacityReservationListResultPage struct { + fn func(context.Context, CapacityReservationListResult) (CapacityReservationListResult, error) + crlr CapacityReservationListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CapacityReservationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.crlr) + if err != nil { + return err + } + page.crlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CapacityReservationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CapacityReservationListResultPage) NotDone() bool { + return !page.crlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CapacityReservationListResultPage) Response() CapacityReservationListResult { + return page.crlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CapacityReservationListResultPage) Values() []CapacityReservation { + if page.crlr.IsEmpty() { + return nil + } + return *page.crlr.Value +} + +// Creates a new instance of the CapacityReservationListResultPage type. +func NewCapacityReservationListResultPage(cur CapacityReservationListResult, getNextPage func(context.Context, CapacityReservationListResult) (CapacityReservationListResult, error)) CapacityReservationListResultPage { + return CapacityReservationListResultPage{ + fn: getNextPage, + crlr: cur, + } +} + +// CapacityReservationProfile the parameters of a capacity reservation Profile. +type CapacityReservationProfile struct { + // CapacityReservationGroup - Specifies the capacity reservation group resource id that should be used for allocating the virtual machine or scaleset vm instances provided enough capacity has been reserved. Please refer to https://aka.ms/CapacityReservation for more details. + CapacityReservationGroup *SubResource `json:"capacityReservationGroup,omitempty"` +} + +// CapacityReservationProperties properties of the Capacity reservation. +type CapacityReservationProperties struct { + // ReservationID - READ-ONLY; A unique id generated and assigned to the capacity reservation by the platform which does not change throughout the lifetime of the resource. + ReservationID *string `json:"reservationId,omitempty"` + // PlatformFaultDomainCount - READ-ONLY; Specifies the value of fault domain count that Capacity Reservation supports for requested VM size.
NOTE: The fault domain count specified for a resource (like virtual machines scale set) must be less than or equal to this value if it deploys using capacity reservation.

Minimum api-version: 2022-08-01. + PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` + // VirtualMachinesAssociated - READ-ONLY; A list of all virtual machine resource ids that are associated with the capacity reservation. + VirtualMachinesAssociated *[]SubResourceReadOnly `json:"virtualMachinesAssociated,omitempty"` + // ProvisioningTime - READ-ONLY; The date time when the capacity reservation was last updated. + ProvisioningTime *date.Time `json:"provisioningTime,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // InstanceView - READ-ONLY; The Capacity reservation instance view. + InstanceView *CapacityReservationInstanceView `json:"instanceView,omitempty"` + // TimeCreated - READ-ONLY; Specifies the time at which the Capacity Reservation resource was created.

Minimum api-version: 2021-11-01. + TimeCreated *date.Time `json:"timeCreated,omitempty"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationProperties. +func (crp CapacityReservationProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CapacityReservationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CapacityReservationsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CapacityReservationsClient) (CapacityReservation, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CapacityReservationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CapacityReservationsCreateOrUpdateFuture.Result. +func (future *CapacityReservationsCreateOrUpdateFuture) result(client CapacityReservationsClient) (cr CapacityReservation, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + cr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if cr.Response.Response, err = future.GetResult(sender); err == nil && cr.Response.Response.StatusCode != http.StatusNoContent { + cr, err = client.CreateOrUpdateResponder(cr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsCreateOrUpdateFuture", "Result", cr.Response.Response, "Failure responding to request") + } + } + return +} + +// CapacityReservationsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CapacityReservationsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CapacityReservationsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CapacityReservationsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CapacityReservationsDeleteFuture.Result. +func (future *CapacityReservationsDeleteFuture) result(client CapacityReservationsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// CapacityReservationsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CapacityReservationsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CapacityReservationsClient) (CapacityReservation, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CapacityReservationsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CapacityReservationsUpdateFuture.Result. +func (future *CapacityReservationsUpdateFuture) result(client CapacityReservationsClient) (cr CapacityReservation, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + cr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if cr.Response.Response, err = future.GetResult(sender); err == nil && cr.Response.Response.StatusCode != http.StatusNoContent { + cr, err = client.UpdateResponder(cr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CapacityReservationsUpdateFuture", "Result", cr.Response.Response, "Failure responding to request") + } + } + return +} + +// CapacityReservationUpdate specifies information about the capacity reservation. Only tags and +// sku.capacity can be updated. +type CapacityReservationUpdate struct { + *CapacityReservationProperties `json:"properties,omitempty"` + // Sku - SKU of the resource for which capacity needs be reserved. The SKU name and capacity is required to be set. Currently VM Skus with the capability called 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. + Sku *Sku `json:"sku,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationUpdate. +func (cru CapacityReservationUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cru.CapacityReservationProperties != nil { + objectMap["properties"] = cru.CapacityReservationProperties + } + if cru.Sku != nil { + objectMap["sku"] = cru.Sku + } + if cru.Tags != nil { + objectMap["tags"] = cru.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CapacityReservationUpdate struct. +func (cru *CapacityReservationUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var capacityReservationProperties CapacityReservationProperties + err = json.Unmarshal(*v, &capacityReservationProperties) + if err != nil { + return err + } + cru.CapacityReservationProperties = &capacityReservationProperties + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + cru.Sku = &sku + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + cru.Tags = tags + } + } + } + + return nil +} + +// CapacityReservationUtilization represents the capacity reservation utilization in terms of resources +// allocated. +type CapacityReservationUtilization struct { + // CurrentCapacity - READ-ONLY; The value provides the current capacity of the VM size which was reserved successfully and for which the customer is getting billed.

Minimum api-version: 2022-08-01. + CurrentCapacity *int32 `json:"currentCapacity,omitempty"` + // VirtualMachinesAllocated - READ-ONLY; A list of all virtual machines resource ids allocated against the capacity reservation. + VirtualMachinesAllocated *[]SubResourceReadOnly `json:"virtualMachinesAllocated,omitempty"` +} + +// MarshalJSON is the custom marshaler for CapacityReservationUtilization. +func (cru CapacityReservationUtilization) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CloudError an error response from the Compute service. +type CloudError struct { + Error *APIError `json:"error,omitempty"` +} + +// CloudService describes the cloud service. +type CloudService struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` + Properties *CloudServiceProperties `json:"properties,omitempty"` + SystemData *SystemData `json:"systemData,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudService. +func (cs CloudService) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cs.Location != nil { + objectMap["location"] = cs.Location + } + if cs.Tags != nil { + objectMap["tags"] = cs.Tags + } + if cs.Properties != nil { + objectMap["properties"] = cs.Properties + } + if cs.SystemData != nil { + objectMap["systemData"] = cs.SystemData + } + return json.Marshal(objectMap) +} + +// CloudServiceExtensionProfile describes a cloud service extension profile. +type CloudServiceExtensionProfile struct { + // Extensions - List of extensions for the cloud service. + Extensions *[]Extension `json:"extensions,omitempty"` +} + +// CloudServiceExtensionProperties extension Properties. +type CloudServiceExtensionProperties struct { + // Publisher - The name of the extension handler publisher. + Publisher *string `json:"publisher,omitempty"` + // Type - Specifies the type of the extension. + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the extension. Specifies the version of the extension. If this element is not specified or an asterisk (*) is used as the value, the latest version of the extension is used. If the value is specified with a major version number and an asterisk as the minor version number (X.), the latest minor version of the specified major version is selected. If a major version number and a minor version number are specified (X.Y), the specific extension version is selected. If a version is specified, an auto-upgrade is performed on the role instance. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // AutoUpgradeMinorVersion - Explicitly specify whether platform can automatically upgrade typeHandlerVersion to higher minor versions when they become available. + AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` + // Settings - Public settings for the extension. For JSON extensions, this is the JSON settings for the extension. For XML Extension (like RDP), this is the XML setting for the extension. + Settings interface{} `json:"settings,omitempty"` + // ProtectedSettings - Protected settings for the extension which are encrypted before sent to the role instance. + ProtectedSettings interface{} `json:"protectedSettings,omitempty"` + ProtectedSettingsFromKeyVault *CloudServiceVaultAndSecretReference `json:"protectedSettingsFromKeyVault,omitempty"` + // ForceUpdateTag - Tag to force apply the provided public and protected settings. + // Changing the tag value allows for re-running the extension without changing any of the public or protected settings. + // If forceUpdateTag is not changed, updates to public or protected settings would still be applied by the handler. + // If neither forceUpdateTag nor any of public or protected settings change, extension would flow to the role instance with the same sequence-number, and + // it is up to handler implementation whether to re-run it or not + ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // RolesAppliedTo - Optional list of roles to apply this extension. If property is not specified or '*' is specified, extension is applied to all roles in the cloud service. + RolesAppliedTo *[]string `json:"rolesAppliedTo,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudServiceExtensionProperties. +func (csep CloudServiceExtensionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if csep.Publisher != nil { + objectMap["publisher"] = csep.Publisher + } + if csep.Type != nil { + objectMap["type"] = csep.Type + } + if csep.TypeHandlerVersion != nil { + objectMap["typeHandlerVersion"] = csep.TypeHandlerVersion + } + if csep.AutoUpgradeMinorVersion != nil { + objectMap["autoUpgradeMinorVersion"] = csep.AutoUpgradeMinorVersion + } + if csep.Settings != nil { + objectMap["settings"] = csep.Settings + } + if csep.ProtectedSettings != nil { + objectMap["protectedSettings"] = csep.ProtectedSettings + } + if csep.ProtectedSettingsFromKeyVault != nil { + objectMap["protectedSettingsFromKeyVault"] = csep.ProtectedSettingsFromKeyVault + } + if csep.ForceUpdateTag != nil { + objectMap["forceUpdateTag"] = csep.ForceUpdateTag + } + if csep.RolesAppliedTo != nil { + objectMap["rolesAppliedTo"] = csep.RolesAppliedTo + } + return json.Marshal(objectMap) +} + +// CloudServiceInstanceView instanceView of CloudService as a whole +type CloudServiceInstanceView struct { + autorest.Response `json:"-"` + RoleInstance *InstanceViewStatusesSummary `json:"roleInstance,omitempty"` + // SdkVersion - READ-ONLY; The version of the SDK that was used to generate the package for the cloud service. + SdkVersion *string `json:"sdkVersion,omitempty"` + // PrivateIds - READ-ONLY; Specifies a list of unique identifiers generated internally for the cloud service.

NOTE: If you are using Azure Diagnostics extension, this property can be used as 'DeploymentId' for querying details. + PrivateIds *[]string `json:"privateIds,omitempty"` + // Statuses - READ-ONLY + Statuses *[]ResourceInstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudServiceInstanceView. +func (csiv CloudServiceInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if csiv.RoleInstance != nil { + objectMap["roleInstance"] = csiv.RoleInstance + } + return json.Marshal(objectMap) +} + +// CloudServiceListResult the list operation result. +type CloudServiceListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]CloudService `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// CloudServiceListResultIterator provides access to a complete listing of CloudService values. +type CloudServiceListResultIterator struct { + i int + page CloudServiceListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CloudServiceListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CloudServiceListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CloudServiceListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CloudServiceListResultIterator) Response() CloudServiceListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CloudServiceListResultIterator) Value() CloudService { + if !iter.page.NotDone() { + return CloudService{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CloudServiceListResultIterator type. +func NewCloudServiceListResultIterator(page CloudServiceListResultPage) CloudServiceListResultIterator { + return CloudServiceListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (cslr CloudServiceListResult) IsEmpty() bool { + return cslr.Value == nil || len(*cslr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (cslr CloudServiceListResult) hasNextLink() bool { + return cslr.NextLink != nil && len(*cslr.NextLink) != 0 +} + +// cloudServiceListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (cslr CloudServiceListResult) cloudServiceListResultPreparer(ctx context.Context) (*http.Request, error) { + if !cslr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(cslr.NextLink))) +} + +// CloudServiceListResultPage contains a page of CloudService values. +type CloudServiceListResultPage struct { + fn func(context.Context, CloudServiceListResult) (CloudServiceListResult, error) + cslr CloudServiceListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CloudServiceListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.cslr) + if err != nil { + return err + } + page.cslr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CloudServiceListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CloudServiceListResultPage) NotDone() bool { + return !page.cslr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CloudServiceListResultPage) Response() CloudServiceListResult { + return page.cslr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CloudServiceListResultPage) Values() []CloudService { + if page.cslr.IsEmpty() { + return nil + } + return *page.cslr.Value +} + +// Creates a new instance of the CloudServiceListResultPage type. +func NewCloudServiceListResultPage(cur CloudServiceListResult, getNextPage func(context.Context, CloudServiceListResult) (CloudServiceListResult, error)) CloudServiceListResultPage { + return CloudServiceListResultPage{ + fn: getNextPage, + cslr: cur, + } +} + +// CloudServiceNetworkProfile network Profile for the cloud service. +type CloudServiceNetworkProfile struct { + // LoadBalancerConfigurations - List of Load balancer configurations. Cloud service can have up to two load balancer configurations, corresponding to a Public Load Balancer and an Internal Load Balancer. + LoadBalancerConfigurations *[]LoadBalancerConfiguration `json:"loadBalancerConfigurations,omitempty"` + // SlotType - Possible values include: 'Production', 'Staging' + SlotType CloudServiceSlotType `json:"slotType,omitempty"` + // SwappableCloudService - The id reference of the cloud service containing the target IP with which the subject cloud service can perform a swap. This property cannot be updated once it is set. The swappable cloud service referred by this id must be present otherwise an error will be thrown. + SwappableCloudService *SubResource `json:"swappableCloudService,omitempty"` +} + +// CloudServiceOsProfile describes the OS profile for the cloud service. +type CloudServiceOsProfile struct { + // Secrets - Specifies set of certificates that should be installed onto the role instances. + Secrets *[]CloudServiceVaultSecretGroup `json:"secrets,omitempty"` +} + +// CloudServiceProperties cloud service properties +type CloudServiceProperties struct { + // PackageURL - Specifies a URL that refers to the location of the service package in the Blob service. The service package URL can be Shared Access Signature (SAS) URI from any storage account. + // This is a write-only property and is not returned in GET calls. + PackageURL *string `json:"packageUrl,omitempty"` + // Configuration - Specifies the XML service configuration (.cscfg) for the cloud service. + Configuration *string `json:"configuration,omitempty"` + // ConfigurationURL - Specifies a URL that refers to the location of the service configuration in the Blob service. The service package URL can be Shared Access Signature (SAS) URI from any storage account. + // This is a write-only property and is not returned in GET calls. + ConfigurationURL *string `json:"configurationUrl,omitempty"` + // StartCloudService - (Optional) Indicates whether to start the cloud service immediately after it is created. The default value is `true`. + // If false, the service model is still deployed, but the code is not run immediately. Instead, the service is PoweredOff until you call Start, at which time the service will be started. A deployed service still incurs charges, even if it is poweredoff. + StartCloudService *bool `json:"startCloudService,omitempty"` + // AllowModelOverride - (Optional) Indicates whether the role sku properties (roleProfile.roles.sku) specified in the model/template should override the role instance count and vm size specified in the .cscfg and .csdef respectively. + // The default value is `false`. + AllowModelOverride *bool `json:"allowModelOverride,omitempty"` + // UpgradeMode - Possible values include: 'Auto', 'Manual', 'Simultaneous' + UpgradeMode CloudServiceUpgradeMode `json:"upgradeMode,omitempty"` + RoleProfile *CloudServiceRoleProfile `json:"roleProfile,omitempty"` + OsProfile *CloudServiceOsProfile `json:"osProfile,omitempty"` + NetworkProfile *CloudServiceNetworkProfile `json:"networkProfile,omitempty"` + ExtensionProfile *CloudServiceExtensionProfile `json:"extensionProfile,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // UniqueID - READ-ONLY; The unique identifier for the cloud service. + UniqueID *string `json:"uniqueId,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudServiceProperties. +func (csp CloudServiceProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if csp.PackageURL != nil { + objectMap["packageUrl"] = csp.PackageURL + } + if csp.Configuration != nil { + objectMap["configuration"] = csp.Configuration + } + if csp.ConfigurationURL != nil { + objectMap["configurationUrl"] = csp.ConfigurationURL + } + if csp.StartCloudService != nil { + objectMap["startCloudService"] = csp.StartCloudService + } + if csp.AllowModelOverride != nil { + objectMap["allowModelOverride"] = csp.AllowModelOverride + } + if csp.UpgradeMode != "" { + objectMap["upgradeMode"] = csp.UpgradeMode + } + if csp.RoleProfile != nil { + objectMap["roleProfile"] = csp.RoleProfile + } + if csp.OsProfile != nil { + objectMap["osProfile"] = csp.OsProfile + } + if csp.NetworkProfile != nil { + objectMap["networkProfile"] = csp.NetworkProfile + } + if csp.ExtensionProfile != nil { + objectMap["extensionProfile"] = csp.ExtensionProfile + } + return json.Marshal(objectMap) +} + +// CloudServiceRole describes a role of the cloud service. +type CloudServiceRole struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` + Sku *CloudServiceRoleSku `json:"sku,omitempty"` + Properties *CloudServiceRoleProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudServiceRole. +func (csr CloudServiceRole) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if csr.Sku != nil { + objectMap["sku"] = csr.Sku + } + if csr.Properties != nil { + objectMap["properties"] = csr.Properties + } + return json.Marshal(objectMap) +} + +// CloudServiceRoleInstancesDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServiceRoleInstancesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServiceRoleInstancesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServiceRoleInstancesDeleteFuture.Result. +func (future *CloudServiceRoleInstancesDeleteFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServiceRoleInstancesRebuildFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServiceRoleInstancesRebuildFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServiceRoleInstancesRebuildFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServiceRoleInstancesRebuildFuture.Result. +func (future *CloudServiceRoleInstancesRebuildFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesRebuildFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesRebuildFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServiceRoleInstancesReimageFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServiceRoleInstancesReimageFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServiceRoleInstancesReimageFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServiceRoleInstancesReimageFuture.Result. +func (future *CloudServiceRoleInstancesReimageFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesReimageFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesReimageFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServiceRoleInstancesRestartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServiceRoleInstancesRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServiceRoleInstancesRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServiceRoleInstancesRestartFuture.Result. +func (future *CloudServiceRoleInstancesRestartFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServiceRoleListResult the list operation result. +type CloudServiceRoleListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]CloudServiceRole `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// CloudServiceRoleListResultIterator provides access to a complete listing of CloudServiceRole values. +type CloudServiceRoleListResultIterator struct { + i int + page CloudServiceRoleListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CloudServiceRoleListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CloudServiceRoleListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CloudServiceRoleListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CloudServiceRoleListResultIterator) Response() CloudServiceRoleListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CloudServiceRoleListResultIterator) Value() CloudServiceRole { + if !iter.page.NotDone() { + return CloudServiceRole{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CloudServiceRoleListResultIterator type. +func NewCloudServiceRoleListResultIterator(page CloudServiceRoleListResultPage) CloudServiceRoleListResultIterator { + return CloudServiceRoleListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (csrlr CloudServiceRoleListResult) IsEmpty() bool { + return csrlr.Value == nil || len(*csrlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (csrlr CloudServiceRoleListResult) hasNextLink() bool { + return csrlr.NextLink != nil && len(*csrlr.NextLink) != 0 +} + +// cloudServiceRoleListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (csrlr CloudServiceRoleListResult) cloudServiceRoleListResultPreparer(ctx context.Context) (*http.Request, error) { + if !csrlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(csrlr.NextLink))) +} + +// CloudServiceRoleListResultPage contains a page of CloudServiceRole values. +type CloudServiceRoleListResultPage struct { + fn func(context.Context, CloudServiceRoleListResult) (CloudServiceRoleListResult, error) + csrlr CloudServiceRoleListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CloudServiceRoleListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.csrlr) + if err != nil { + return err + } + page.csrlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CloudServiceRoleListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CloudServiceRoleListResultPage) NotDone() bool { + return !page.csrlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CloudServiceRoleListResultPage) Response() CloudServiceRoleListResult { + return page.csrlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CloudServiceRoleListResultPage) Values() []CloudServiceRole { + if page.csrlr.IsEmpty() { + return nil + } + return *page.csrlr.Value +} + +// Creates a new instance of the CloudServiceRoleListResultPage type. +func NewCloudServiceRoleListResultPage(cur CloudServiceRoleListResult, getNextPage func(context.Context, CloudServiceRoleListResult) (CloudServiceRoleListResult, error)) CloudServiceRoleListResultPage { + return CloudServiceRoleListResultPage{ + fn: getNextPage, + csrlr: cur, + } +} + +// CloudServiceRoleProfile describes the role profile for the cloud service. +type CloudServiceRoleProfile struct { + // Roles - List of roles for the cloud service. + Roles *[]CloudServiceRoleProfileProperties `json:"roles,omitempty"` +} + +// CloudServiceRoleProfileProperties describes the role properties. +type CloudServiceRoleProfileProperties struct { + // Name - Resource name. + Name *string `json:"name,omitempty"` + Sku *CloudServiceRoleSku `json:"sku,omitempty"` +} + +// CloudServiceRoleProperties the cloud service role properties. +type CloudServiceRoleProperties struct { + // UniqueID - READ-ONLY; Specifies the ID which uniquely identifies a cloud service role. + UniqueID *string `json:"uniqueId,omitempty"` +} + +// MarshalJSON is the custom marshaler for CloudServiceRoleProperties. +func (csrp CloudServiceRoleProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// CloudServiceRoleSku describes the cloud service role sku. +type CloudServiceRoleSku struct { + // Name - The sku name. NOTE: If the new SKU is not supported on the hardware the cloud service is currently on, you need to delete and recreate the cloud service or move back to the old sku. + Name *string `json:"name,omitempty"` + // Tier - Specifies the tier of the cloud service. Possible Values are

**Standard**

**Basic** + Tier *string `json:"tier,omitempty"` + // Capacity - Specifies the number of role instances in the cloud service. + Capacity *int64 `json:"capacity,omitempty"` +} + +// CloudServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServicesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (CloudService, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesCreateOrUpdateFuture.Result. +func (future *CloudServicesCreateOrUpdateFuture) result(client CloudServicesClient) (cs CloudService, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + cs.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if cs.Response.Response, err = future.GetResult(sender); err == nil && cs.Response.Response.StatusCode != http.StatusNoContent { + cs, err = client.CreateOrUpdateResponder(cs.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesCreateOrUpdateFuture", "Result", cs.Response.Response, "Failure responding to request") + } + } + return +} + +// CloudServicesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesDeleteFuture.Result. +func (future *CloudServicesDeleteFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesDeleteInstancesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type CloudServicesDeleteInstancesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesDeleteInstancesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesDeleteInstancesFuture.Result. +func (future *CloudServicesDeleteInstancesFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesDeleteInstancesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesDeleteInstancesFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesPowerOffFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesPowerOffFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesPowerOffFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesPowerOffFuture.Result. +func (future *CloudServicesPowerOffFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesPowerOffFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesPowerOffFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesRebuildFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesRebuildFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesRebuildFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesRebuildFuture.Result. +func (future *CloudServicesRebuildFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesRebuildFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesRebuildFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesReimageFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesReimageFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesReimageFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesReimageFuture.Result. +func (future *CloudServicesReimageFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesReimageFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesReimageFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesRestartFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesRestartFuture.Result. +func (future *CloudServicesRestartFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesStartFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesStartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesStartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesStartFuture.Result. +func (future *CloudServicesStartFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesStartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesStartFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesUpdateDomainWalkUpdateDomainFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type CloudServicesUpdateDomainWalkUpdateDomainFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesUpdateDomainClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesUpdateDomainWalkUpdateDomainFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesUpdateDomainWalkUpdateDomainFuture.Result. +func (future *CloudServicesUpdateDomainWalkUpdateDomainFuture) result(client CloudServicesUpdateDomainClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainWalkUpdateDomainFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesUpdateDomainWalkUpdateDomainFuture") + return + } + ar.Response = future.Response() + return +} + +// CloudServicesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type CloudServicesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(CloudServicesClient) (CloudService, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *CloudServicesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for CloudServicesUpdateFuture.Result. +func (future *CloudServicesUpdateFuture) result(client CloudServicesClient) (cs CloudService, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + cs.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.CloudServicesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if cs.Response.Response, err = future.GetResult(sender); err == nil && cs.Response.Response.StatusCode != http.StatusNoContent { + cs, err = client.UpdateResponder(cs.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateFuture", "Result", cs.Response.Response, "Failure responding to request") + } + } + return +} + +// CloudServiceUpdate ... +type CloudServiceUpdate struct { + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for CloudServiceUpdate. +func (csu CloudServiceUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if csu.Tags != nil { + objectMap["tags"] = csu.Tags + } + return json.Marshal(objectMap) +} + +// CloudServiceVaultAndSecretReference protected settings for the extension, referenced using KeyVault +// which are encrypted before sent to the role instance. +type CloudServiceVaultAndSecretReference struct { + // SourceVault - The ARM Resource ID of the Key Vault + SourceVault *SubResource `json:"sourceVault,omitempty"` + // SecretURL - Secret URL which contains the protected settings of the extension + SecretURL *string `json:"secretUrl,omitempty"` +} + +// CloudServiceVaultCertificate describes a single certificate reference in a Key Vault, and where the +// certificate should reside on the role instance. +type CloudServiceVaultCertificate struct { + // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. + CertificateURL *string `json:"certificateUrl,omitempty"` +} + +// CloudServiceVaultSecretGroup describes a set of certificates which are all in the same Key Vault. +type CloudServiceVaultSecretGroup struct { + // SourceVault - The relative URL of the Key Vault containing all of the certificates in VaultCertificates. + SourceVault *SubResource `json:"sourceVault,omitempty"` + // VaultCertificates - The list of key vault references in SourceVault which contain certificates. + VaultCertificates *[]CloudServiceVaultCertificate `json:"vaultCertificates,omitempty"` +} + +// CommunityGallery specifies information about the Community Gallery that you want to create or update. +type CommunityGallery struct { + autorest.Response `json:"-"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *CommunityGalleryIdentifier `json:"identifier,omitempty"` +} + +// MarshalJSON is the custom marshaler for CommunityGallery. +func (cg CommunityGallery) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cg.CommunityGalleryIdentifier != nil { + objectMap["identifier"] = cg.CommunityGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CommunityGallery struct. +func (cg *CommunityGallery) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cg.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + cg.Location = &location + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cg.Type = &typeVar + } + case "identifier": + if v != nil { + var communityGalleryIdentifier CommunityGalleryIdentifier + err = json.Unmarshal(*v, &communityGalleryIdentifier) + if err != nil { + return err + } + cg.CommunityGalleryIdentifier = &communityGalleryIdentifier + } + } + } + + return nil +} + +// CommunityGalleryIdentifier the identifier information of community gallery. +type CommunityGalleryIdentifier struct { + // UniqueID - The unique id of this community gallery. + UniqueID *string `json:"uniqueId,omitempty"` +} + +// CommunityGalleryImage specifies information about the gallery image definition that you want to create +// or update. +type CommunityGalleryImage struct { + autorest.Response `json:"-"` + *CommunityGalleryImageProperties `json:"properties,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *CommunityGalleryIdentifier `json:"identifier,omitempty"` +} + +// MarshalJSON is the custom marshaler for CommunityGalleryImage. +func (cgiVar CommunityGalleryImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cgiVar.CommunityGalleryImageProperties != nil { + objectMap["properties"] = cgiVar.CommunityGalleryImageProperties + } + if cgiVar.CommunityGalleryIdentifier != nil { + objectMap["identifier"] = cgiVar.CommunityGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CommunityGalleryImage struct. +func (cgiVar *CommunityGalleryImage) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var communityGalleryImageProperties CommunityGalleryImageProperties + err = json.Unmarshal(*v, &communityGalleryImageProperties) + if err != nil { + return err + } + cgiVar.CommunityGalleryImageProperties = &communityGalleryImageProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cgiVar.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + cgiVar.Location = &location + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cgiVar.Type = &typeVar + } + case "identifier": + if v != nil { + var communityGalleryIdentifier CommunityGalleryIdentifier + err = json.Unmarshal(*v, &communityGalleryIdentifier) + if err != nil { + return err + } + cgiVar.CommunityGalleryIdentifier = &communityGalleryIdentifier + } + } + } + + return nil +} + +// CommunityGalleryImageList the List Community Gallery Images operation response. +type CommunityGalleryImageList struct { + autorest.Response `json:"-"` + // Value - A list of community gallery images. + Value *[]CommunityGalleryImage `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of community gallery images. Call ListNext() with this to fetch the next page of community gallery images. + NextLink *string `json:"nextLink,omitempty"` +} + +// CommunityGalleryImageListIterator provides access to a complete listing of CommunityGalleryImage values. +type CommunityGalleryImageListIterator struct { + i int + page CommunityGalleryImageListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CommunityGalleryImageListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CommunityGalleryImageListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CommunityGalleryImageListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CommunityGalleryImageListIterator) Response() CommunityGalleryImageList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CommunityGalleryImageListIterator) Value() CommunityGalleryImage { + if !iter.page.NotDone() { + return CommunityGalleryImage{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CommunityGalleryImageListIterator type. +func NewCommunityGalleryImageListIterator(page CommunityGalleryImageListPage) CommunityGalleryImageListIterator { + return CommunityGalleryImageListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (cgil CommunityGalleryImageList) IsEmpty() bool { + return cgil.Value == nil || len(*cgil.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (cgil CommunityGalleryImageList) hasNextLink() bool { + return cgil.NextLink != nil && len(*cgil.NextLink) != 0 +} + +// communityGalleryImageListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (cgil CommunityGalleryImageList) communityGalleryImageListPreparer(ctx context.Context) (*http.Request, error) { + if !cgil.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(cgil.NextLink))) +} + +// CommunityGalleryImageListPage contains a page of CommunityGalleryImage values. +type CommunityGalleryImageListPage struct { + fn func(context.Context, CommunityGalleryImageList) (CommunityGalleryImageList, error) + cgil CommunityGalleryImageList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CommunityGalleryImageListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.cgil) + if err != nil { + return err + } + page.cgil = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CommunityGalleryImageListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CommunityGalleryImageListPage) NotDone() bool { + return !page.cgil.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CommunityGalleryImageListPage) Response() CommunityGalleryImageList { + return page.cgil +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CommunityGalleryImageListPage) Values() []CommunityGalleryImage { + if page.cgil.IsEmpty() { + return nil + } + return *page.cgil.Value +} + +// Creates a new instance of the CommunityGalleryImageListPage type. +func NewCommunityGalleryImageListPage(cur CommunityGalleryImageList, getNextPage func(context.Context, CommunityGalleryImageList) (CommunityGalleryImageList, error)) CommunityGalleryImageListPage { + return CommunityGalleryImageListPage{ + fn: getNextPage, + cgil: cur, + } +} + +// CommunityGalleryImageProperties describes the properties of a gallery image definition. +type CommunityGalleryImageProperties struct { + // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' + OsState OperatingSystemStateTypes `json:"osState,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` + Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` + Disallowed *Disallowed `json:"disallowed,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // Features - A list of gallery image features. + Features *[]GalleryImageFeature `json:"features,omitempty"` + PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` + // Architecture - Possible values include: 'X64', 'Arm64' + Architecture Architecture `json:"architecture,omitempty"` + // PrivacyStatementURI - Privacy statement uri for the current community gallery image. + PrivacyStatementURI *string `json:"privacyStatementUri,omitempty"` + // Eula - End-user license agreement for the current community gallery image. + Eula *string `json:"eula,omitempty"` +} + +// CommunityGalleryImageVersion specifies information about the gallery image version that you want to +// create or update. +type CommunityGalleryImageVersion struct { + autorest.Response `json:"-"` + *CommunityGalleryImageVersionProperties `json:"properties,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *CommunityGalleryIdentifier `json:"identifier,omitempty"` +} + +// MarshalJSON is the custom marshaler for CommunityGalleryImageVersion. +func (cgiv CommunityGalleryImageVersion) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cgiv.CommunityGalleryImageVersionProperties != nil { + objectMap["properties"] = cgiv.CommunityGalleryImageVersionProperties + } + if cgiv.CommunityGalleryIdentifier != nil { + objectMap["identifier"] = cgiv.CommunityGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for CommunityGalleryImageVersion struct. +func (cgiv *CommunityGalleryImageVersion) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var communityGalleryImageVersionProperties CommunityGalleryImageVersionProperties + err = json.Unmarshal(*v, &communityGalleryImageVersionProperties) + if err != nil { + return err + } + cgiv.CommunityGalleryImageVersionProperties = &communityGalleryImageVersionProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cgiv.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + cgiv.Location = &location + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cgiv.Type = &typeVar + } + case "identifier": + if v != nil { + var communityGalleryIdentifier CommunityGalleryIdentifier + err = json.Unmarshal(*v, &communityGalleryIdentifier) + if err != nil { + return err + } + cgiv.CommunityGalleryIdentifier = &communityGalleryIdentifier + } + } + } + + return nil +} + +// CommunityGalleryImageVersionList the List Community Gallery Image versions operation response. +type CommunityGalleryImageVersionList struct { + autorest.Response `json:"-"` + // Value - A list of community gallery image versions. + Value *[]CommunityGalleryImageVersion `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of community gallery image versions. Call ListNext() with this to fetch the next page of community gallery image versions. + NextLink *string `json:"nextLink,omitempty"` +} + +// CommunityGalleryImageVersionListIterator provides access to a complete listing of +// CommunityGalleryImageVersion values. +type CommunityGalleryImageVersionListIterator struct { + i int + page CommunityGalleryImageVersionListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *CommunityGalleryImageVersionListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *CommunityGalleryImageVersionListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter CommunityGalleryImageVersionListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter CommunityGalleryImageVersionListIterator) Response() CommunityGalleryImageVersionList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter CommunityGalleryImageVersionListIterator) Value() CommunityGalleryImageVersion { + if !iter.page.NotDone() { + return CommunityGalleryImageVersion{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the CommunityGalleryImageVersionListIterator type. +func NewCommunityGalleryImageVersionListIterator(page CommunityGalleryImageVersionListPage) CommunityGalleryImageVersionListIterator { + return CommunityGalleryImageVersionListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (cgivl CommunityGalleryImageVersionList) IsEmpty() bool { + return cgivl.Value == nil || len(*cgivl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (cgivl CommunityGalleryImageVersionList) hasNextLink() bool { + return cgivl.NextLink != nil && len(*cgivl.NextLink) != 0 +} + +// communityGalleryImageVersionListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (cgivl CommunityGalleryImageVersionList) communityGalleryImageVersionListPreparer(ctx context.Context) (*http.Request, error) { + if !cgivl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(cgivl.NextLink))) +} + +// CommunityGalleryImageVersionListPage contains a page of CommunityGalleryImageVersion values. +type CommunityGalleryImageVersionListPage struct { + fn func(context.Context, CommunityGalleryImageVersionList) (CommunityGalleryImageVersionList, error) + cgivl CommunityGalleryImageVersionList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *CommunityGalleryImageVersionListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.cgivl) + if err != nil { + return err + } + page.cgivl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *CommunityGalleryImageVersionListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page CommunityGalleryImageVersionListPage) NotDone() bool { + return !page.cgivl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page CommunityGalleryImageVersionListPage) Response() CommunityGalleryImageVersionList { + return page.cgivl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page CommunityGalleryImageVersionListPage) Values() []CommunityGalleryImageVersion { + if page.cgivl.IsEmpty() { + return nil + } + return *page.cgivl.Value +} + +// Creates a new instance of the CommunityGalleryImageVersionListPage type. +func NewCommunityGalleryImageVersionListPage(cur CommunityGalleryImageVersionList, getNextPage func(context.Context, CommunityGalleryImageVersionList) (CommunityGalleryImageVersionList, error)) CommunityGalleryImageVersionListPage { + return CommunityGalleryImageVersionListPage{ + fn: getNextPage, + cgivl: cur, + } +} + +// CommunityGalleryImageVersionProperties describes the properties of a gallery image version. +type CommunityGalleryImageVersionProperties struct { + // PublishedDate - The published date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. + ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` + // StorageProfile - Describes the storage profile of the image version. + StorageProfile *SharedGalleryImageVersionStorageProfile `json:"storageProfile,omitempty"` +} + +// CommunityGalleryInfo information of community gallery if current gallery is shared to community +type CommunityGalleryInfo struct { + // PublisherURI - The link to the publisher website. Visible to all users. + PublisherURI *string `json:"publisherUri,omitempty"` + // PublisherContact - Community gallery publisher support email. The email address of the publisher. Visible to all users. + PublisherContact *string `json:"publisherContact,omitempty"` + // Eula - End-user license agreement for community gallery image. + Eula *string `json:"eula,omitempty"` + // PublicNamePrefix - The prefix of the gallery name that will be displayed publicly. Visible to all users. + PublicNamePrefix *string `json:"publicNamePrefix,omitempty"` + // CommunityGalleryEnabled - READ-ONLY; Contains info about whether community gallery sharing is enabled. + CommunityGalleryEnabled *bool `json:"communityGalleryEnabled,omitempty"` + // PublicNames - READ-ONLY; Community gallery public name list. + PublicNames *[]string `json:"publicNames,omitempty"` +} + +// MarshalJSON is the custom marshaler for CommunityGalleryInfo. +func (cgiVar CommunityGalleryInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cgiVar.PublisherURI != nil { + objectMap["publisherUri"] = cgiVar.PublisherURI + } + if cgiVar.PublisherContact != nil { + objectMap["publisherContact"] = cgiVar.PublisherContact + } + if cgiVar.Eula != nil { + objectMap["eula"] = cgiVar.Eula + } + if cgiVar.PublicNamePrefix != nil { + objectMap["publicNamePrefix"] = cgiVar.PublicNamePrefix + } + return json.Marshal(objectMap) +} + +// CopyCompletionError indicates the error details if the background copy of a resource created via the +// CopyStart operation fails. +type CopyCompletionError struct { + // ErrorCode - Indicates the error code if the background copy of a resource created via the CopyStart operation fails. + ErrorCode *string `json:"errorCode,omitempty"` + // ErrorMessage - Indicates the error message if the background copy of a resource created via the CopyStart operation fails. + ErrorMessage *string `json:"errorMessage,omitempty"` +} + +// CreationData data used when creating a disk. +type CreationData struct { + // CreateOption - This enumerates the possible sources of a disk's creation. Possible values include: 'Empty', 'Attach', 'FromImage', 'Import', 'Copy', 'Restore', 'Upload', 'CopyStart', 'ImportSecure', 'UploadPreparedSecure' + CreateOption DiskCreateOption `json:"createOption,omitempty"` + // StorageAccountID - Required if createOption is Import. The Azure Resource Manager identifier of the storage account containing the blob to import as a disk. + StorageAccountID *string `json:"storageAccountId,omitempty"` + // ImageReference - Disk source information for PIR or user images. + ImageReference *ImageDiskReference `json:"imageReference,omitempty"` + // GalleryImageReference - Required if creating from a Gallery Image. The id/sharedGalleryImageId/communityGalleryImageId of the ImageDiskReference will be the ARM id of the shared galley image version from which to create a disk. + GalleryImageReference *ImageDiskReference `json:"galleryImageReference,omitempty"` + // SourceURI - If createOption is Import, this is the URI of a blob to be imported into a managed disk. + SourceURI *string `json:"sourceUri,omitempty"` + // SourceResourceID - If createOption is Copy, this is the ARM id of the source snapshot or disk. + SourceResourceID *string `json:"sourceResourceId,omitempty"` + // SourceUniqueID - READ-ONLY; If this field is set, this is the unique id identifying the source of this resource. + SourceUniqueID *string `json:"sourceUniqueId,omitempty"` + // UploadSizeBytes - If createOption is Upload, this is the size of the contents of the upload including the VHD footer. This value should be between 20972032 (20 MiB + 512 bytes for the VHD footer) and 35183298347520 bytes (32 TiB + 512 bytes for the VHD footer). + UploadSizeBytes *int64 `json:"uploadSizeBytes,omitempty"` + // LogicalSectorSize - Logical sector size in bytes for Ultra disks. Supported values are 512 ad 4096. 4096 is the default. + LogicalSectorSize *int32 `json:"logicalSectorSize,omitempty"` + // SecurityDataURI - If createOption is ImportSecure, this is the URI of a blob to be imported into VM guest state. + SecurityDataURI *string `json:"securityDataUri,omitempty"` + // PerformancePlus - Set this flag to true to get a boost on the performance target of the disk deployed, see here on the respective performance target. This flag can only be set on disk creation time and cannot be disabled after enabled. + PerformancePlus *bool `json:"performancePlus,omitempty"` +} + +// MarshalJSON is the custom marshaler for CreationData. +func (cd CreationData) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cd.CreateOption != "" { + objectMap["createOption"] = cd.CreateOption + } + if cd.StorageAccountID != nil { + objectMap["storageAccountId"] = cd.StorageAccountID + } + if cd.ImageReference != nil { + objectMap["imageReference"] = cd.ImageReference + } + if cd.GalleryImageReference != nil { + objectMap["galleryImageReference"] = cd.GalleryImageReference + } + if cd.SourceURI != nil { + objectMap["sourceUri"] = cd.SourceURI + } + if cd.SourceResourceID != nil { + objectMap["sourceResourceId"] = cd.SourceResourceID + } + if cd.UploadSizeBytes != nil { + objectMap["uploadSizeBytes"] = cd.UploadSizeBytes + } + if cd.LogicalSectorSize != nil { + objectMap["logicalSectorSize"] = cd.LogicalSectorSize + } + if cd.SecurityDataURI != nil { + objectMap["securityDataUri"] = cd.SecurityDataURI + } + if cd.PerformancePlus != nil { + objectMap["performancePlus"] = cd.PerformancePlus + } + return json.Marshal(objectMap) +} + +// DataDisk describes a data disk. +type DataDisk struct { + // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. + Lun *int32 `json:"lun,omitempty"` + // Name - The disk name. + Name *string `json:"name,omitempty"` + // Vhd - The virtual hard disk. + Vhd *VirtualHardDisk `json:"vhd,omitempty"` + // Image - The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. + Image *VirtualHardDisk `json:"image,omitempty"` + // Caching - Specifies the caching requirements.

Possible values are:

**None**

**ReadOnly**

**ReadWrite**

Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. + WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` + // CreateOption - Specifies how the virtual machine should be created.

Possible values are:

**Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.

**FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' + CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` + // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023 + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // ManagedDisk - The managed disk parameters. + ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` + // ToBeDetached - Specifies whether the data disk is in process of detachment from the VirtualMachine/VirtualMachineScaleset + ToBeDetached *bool `json:"toBeDetached,omitempty"` + // DiskIOPSReadWrite - READ-ONLY; Specifies the Read-Write IOPS for the managed disk when StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be updated only via updates to the VirtualMachine Scale Set. + DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` + // DiskMBpsReadWrite - READ-ONLY; Specifies the bandwidth in MB per second for the managed disk when StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be updated only via updates to the VirtualMachine Scale Set. + DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` + // DetachOption - Specifies the detach behavior to be used while detaching a disk or which is already in the process of detachment from the virtual machine. Supported values: **ForceDetach**.

detachOption: **ForceDetach** is applicable only for managed data disks. If a previous detachment attempt of the data disk did not complete due to an unexpected failure from the virtual machine and the disk is still not released then use force-detach as a last resort option to detach the disk forcibly from the VM. All writes might not have been flushed when using this detach behavior.

This feature is still in preview mode and is not supported for VirtualMachineScaleSet. To force-detach a data disk update toBeDetached to 'true' along with setting detachOption: 'ForceDetach'. Possible values include: 'ForceDetach' + DetachOption DiskDetachOptionTypes `json:"detachOption,omitempty"` + // DeleteOption - Specifies whether data disk should be deleted or detached upon VM deletion.

Possible values:

**Delete** If this value is used, the data disk is deleted when VM is deleted.

**Detach** If this value is used, the data disk is retained after VM is deleted.

The default value is set to **detach**. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' + DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` +} + +// MarshalJSON is the custom marshaler for DataDisk. +func (dd DataDisk) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dd.Lun != nil { + objectMap["lun"] = dd.Lun + } + if dd.Name != nil { + objectMap["name"] = dd.Name + } + if dd.Vhd != nil { + objectMap["vhd"] = dd.Vhd + } + if dd.Image != nil { + objectMap["image"] = dd.Image + } + if dd.Caching != "" { + objectMap["caching"] = dd.Caching + } + if dd.WriteAcceleratorEnabled != nil { + objectMap["writeAcceleratorEnabled"] = dd.WriteAcceleratorEnabled + } + if dd.CreateOption != "" { + objectMap["createOption"] = dd.CreateOption + } + if dd.DiskSizeGB != nil { + objectMap["diskSizeGB"] = dd.DiskSizeGB + } + if dd.ManagedDisk != nil { + objectMap["managedDisk"] = dd.ManagedDisk + } + if dd.ToBeDetached != nil { + objectMap["toBeDetached"] = dd.ToBeDetached + } + if dd.DetachOption != "" { + objectMap["detachOption"] = dd.DetachOption + } + if dd.DeleteOption != "" { + objectMap["deleteOption"] = dd.DeleteOption + } + return json.Marshal(objectMap) +} + +// DataDiskImage contains the data disk images information. +type DataDiskImage struct { + // Lun - READ-ONLY; Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. + Lun *int32 `json:"lun,omitempty"` +} + +// MarshalJSON is the custom marshaler for DataDiskImage. +func (ddi DataDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// DataDiskImageEncryption contains encryption settings for a data disk image. +type DataDiskImageEncryption struct { + // Lun - This property specifies the logical unit number of the data disk. This value is used to identify data disks within the Virtual Machine and therefore must be unique for each data disk attached to the Virtual Machine. + Lun *int32 `json:"lun,omitempty"` + // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. + DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` +} + +// DedicatedHost specifies information about the Dedicated host. +type DedicatedHost struct { + autorest.Response `json:"-"` + *DedicatedHostProperties `json:"properties,omitempty"` + // Sku - SKU of the dedicated host for Hardware Generation and VM family. Only name is required to be set. List Microsoft.Compute SKUs for a list of possible values. + Sku *Sku `json:"sku,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DedicatedHost. +func (dh DedicatedHost) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dh.DedicatedHostProperties != nil { + objectMap["properties"] = dh.DedicatedHostProperties + } + if dh.Sku != nil { + objectMap["sku"] = dh.Sku + } + if dh.Location != nil { + objectMap["location"] = dh.Location + } + if dh.Tags != nil { + objectMap["tags"] = dh.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DedicatedHost struct. +func (dh *DedicatedHost) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var dedicatedHostProperties DedicatedHostProperties + err = json.Unmarshal(*v, &dedicatedHostProperties) + if err != nil { + return err + } + dh.DedicatedHostProperties = &dedicatedHostProperties + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + dh.Sku = &sku + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + dh.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dh.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + dh.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + dh.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + dh.Tags = tags + } + } + } + + return nil +} + +// DedicatedHostAllocatableVM represents the dedicated host unutilized capacity in terms of a specific VM +// size. +type DedicatedHostAllocatableVM struct { + // VMSize - VM size in terms of which the unutilized capacity is represented. + VMSize *string `json:"vmSize,omitempty"` + // Count - Maximum number of VMs of size vmSize that can fit in the dedicated host's remaining capacity. + Count *float64 `json:"count,omitempty"` +} + +// DedicatedHostAvailableCapacity dedicated host unutilized capacity. +type DedicatedHostAvailableCapacity struct { + // AllocatableVMs - The unutilized capacity of the dedicated host represented in terms of each VM size that is allowed to be deployed to the dedicated host. + AllocatableVMs *[]DedicatedHostAllocatableVM `json:"allocatableVMs,omitempty"` +} + +// DedicatedHostGroup specifies information about the dedicated host group that the dedicated hosts should +// be assigned to.

Currently, a dedicated host can only be added to a dedicated host group at +// creation time. An existing dedicated host cannot be added to another dedicated host group. +type DedicatedHostGroup struct { + autorest.Response `json:"-"` + *DedicatedHostGroupProperties `json:"properties,omitempty"` + // Zones - Availability Zone to use for this host group. Only single zone is supported. The zone can be assigned only during creation. If not provided, the group supports all zones in the region. If provided, enforces each host in the group to be in the same zone. + Zones *[]string `json:"zones,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostGroup. +func (dhg DedicatedHostGroup) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhg.DedicatedHostGroupProperties != nil { + objectMap["properties"] = dhg.DedicatedHostGroupProperties + } + if dhg.Zones != nil { + objectMap["zones"] = dhg.Zones + } + if dhg.Location != nil { + objectMap["location"] = dhg.Location + } + if dhg.Tags != nil { + objectMap["tags"] = dhg.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DedicatedHostGroup struct. +func (dhg *DedicatedHostGroup) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var dedicatedHostGroupProperties DedicatedHostGroupProperties + err = json.Unmarshal(*v, &dedicatedHostGroupProperties) + if err != nil { + return err + } + dhg.DedicatedHostGroupProperties = &dedicatedHostGroupProperties + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + dhg.Zones = &zones + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + dhg.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dhg.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + dhg.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + dhg.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + dhg.Tags = tags + } + } + } + + return nil +} + +// DedicatedHostGroupInstanceView ... +type DedicatedHostGroupInstanceView struct { + // Hosts - List of instance view of the dedicated hosts under the dedicated host group. + Hosts *[]DedicatedHostInstanceViewWithName `json:"hosts,omitempty"` +} + +// DedicatedHostGroupListResult the List Dedicated Host Group with resource group response. +type DedicatedHostGroupListResult struct { + autorest.Response `json:"-"` + // Value - The list of dedicated host groups + Value *[]DedicatedHostGroup `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with this URI to fetch the next page of Dedicated Host Groups. + NextLink *string `json:"nextLink,omitempty"` +} + +// DedicatedHostGroupListResultIterator provides access to a complete listing of DedicatedHostGroup values. +type DedicatedHostGroupListResultIterator struct { + i int + page DedicatedHostGroupListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DedicatedHostGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DedicatedHostGroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DedicatedHostGroupListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DedicatedHostGroupListResultIterator) Response() DedicatedHostGroupListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DedicatedHostGroupListResultIterator) Value() DedicatedHostGroup { + if !iter.page.NotDone() { + return DedicatedHostGroup{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DedicatedHostGroupListResultIterator type. +func NewDedicatedHostGroupListResultIterator(page DedicatedHostGroupListResultPage) DedicatedHostGroupListResultIterator { + return DedicatedHostGroupListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (dhglr DedicatedHostGroupListResult) IsEmpty() bool { + return dhglr.Value == nil || len(*dhglr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (dhglr DedicatedHostGroupListResult) hasNextLink() bool { + return dhglr.NextLink != nil && len(*dhglr.NextLink) != 0 +} + +// dedicatedHostGroupListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (dhglr DedicatedHostGroupListResult) dedicatedHostGroupListResultPreparer(ctx context.Context) (*http.Request, error) { + if !dhglr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(dhglr.NextLink))) +} + +// DedicatedHostGroupListResultPage contains a page of DedicatedHostGroup values. +type DedicatedHostGroupListResultPage struct { + fn func(context.Context, DedicatedHostGroupListResult) (DedicatedHostGroupListResult, error) + dhglr DedicatedHostGroupListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DedicatedHostGroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.dhglr) + if err != nil { + return err + } + page.dhglr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DedicatedHostGroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DedicatedHostGroupListResultPage) NotDone() bool { + return !page.dhglr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DedicatedHostGroupListResultPage) Response() DedicatedHostGroupListResult { + return page.dhglr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DedicatedHostGroupListResultPage) Values() []DedicatedHostGroup { + if page.dhglr.IsEmpty() { + return nil + } + return *page.dhglr.Value +} + +// Creates a new instance of the DedicatedHostGroupListResultPage type. +func NewDedicatedHostGroupListResultPage(cur DedicatedHostGroupListResult, getNextPage func(context.Context, DedicatedHostGroupListResult) (DedicatedHostGroupListResult, error)) DedicatedHostGroupListResultPage { + return DedicatedHostGroupListResultPage{ + fn: getNextPage, + dhglr: cur, + } +} + +// DedicatedHostGroupProperties dedicated Host Group Properties. +type DedicatedHostGroupProperties struct { + // PlatformFaultDomainCount - Number of fault domains that the host group can span. + PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` + // Hosts - READ-ONLY; A list of references to all dedicated hosts in the dedicated host group. + Hosts *[]SubResourceReadOnly `json:"hosts,omitempty"` + // InstanceView - READ-ONLY; The dedicated host group instance view, which has the list of instance view of the dedicated hosts under the dedicated host group. + InstanceView *DedicatedHostGroupInstanceView `json:"instanceView,omitempty"` + // SupportAutomaticPlacement - Specifies whether virtual machines or virtual machine scale sets can be placed automatically on the dedicated host group. Automatic placement means resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host group. The value is defaulted to 'false' when not provided.

Minimum api-version: 2020-06-01. + SupportAutomaticPlacement *bool `json:"supportAutomaticPlacement,omitempty"` + // AdditionalCapabilities - Enables or disables a capability on the dedicated host group.

Minimum api-version: 2022-03-01. + AdditionalCapabilities *DedicatedHostGroupPropertiesAdditionalCapabilities `json:"additionalCapabilities,omitempty"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostGroupProperties. +func (dhgp DedicatedHostGroupProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhgp.PlatformFaultDomainCount != nil { + objectMap["platformFaultDomainCount"] = dhgp.PlatformFaultDomainCount + } + if dhgp.SupportAutomaticPlacement != nil { + objectMap["supportAutomaticPlacement"] = dhgp.SupportAutomaticPlacement + } + if dhgp.AdditionalCapabilities != nil { + objectMap["additionalCapabilities"] = dhgp.AdditionalCapabilities + } + return json.Marshal(objectMap) +} + +// DedicatedHostGroupPropertiesAdditionalCapabilities enables or disables a capability on the dedicated +// host group.

Minimum api-version: 2022-03-01. +type DedicatedHostGroupPropertiesAdditionalCapabilities struct { + // UltraSSDEnabled - The flag that enables or disables a capability to have UltraSSD Enabled Virtual Machines on Dedicated Hosts of the Dedicated Host Group. For the Virtual Machines to be UltraSSD Enabled, UltraSSDEnabled flag for the resource needs to be set true as well. The value is defaulted to 'false' when not provided. Please refer to https://docs.microsoft.com/en-us/azure/virtual-machines/disks-enable-ultra-ssd for more details on Ultra SSD feature.

NOTE: The ultraSSDEnabled setting can only be enabled for Host Groups that are created as zonal.

Minimum api-version: 2022-03-01. + UltraSSDEnabled *bool `json:"ultraSSDEnabled,omitempty"` +} + +// DedicatedHostGroupUpdate specifies information about the dedicated host group that the dedicated host +// should be assigned to. Only tags may be updated. +type DedicatedHostGroupUpdate struct { + *DedicatedHostGroupProperties `json:"properties,omitempty"` + // Zones - Availability Zone to use for this host group. Only single zone is supported. The zone can be assigned only during creation. If not provided, the group supports all zones in the region. If provided, enforces each host in the group to be in the same zone. + Zones *[]string `json:"zones,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostGroupUpdate. +func (dhgu DedicatedHostGroupUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhgu.DedicatedHostGroupProperties != nil { + objectMap["properties"] = dhgu.DedicatedHostGroupProperties + } + if dhgu.Zones != nil { + objectMap["zones"] = dhgu.Zones + } + if dhgu.Tags != nil { + objectMap["tags"] = dhgu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DedicatedHostGroupUpdate struct. +func (dhgu *DedicatedHostGroupUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var dedicatedHostGroupProperties DedicatedHostGroupProperties + err = json.Unmarshal(*v, &dedicatedHostGroupProperties) + if err != nil { + return err + } + dhgu.DedicatedHostGroupProperties = &dedicatedHostGroupProperties + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + dhgu.Zones = &zones + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + dhgu.Tags = tags + } + } + } + + return nil +} + +// DedicatedHostInstanceView the instance view of a dedicated host. +type DedicatedHostInstanceView struct { + // AssetID - READ-ONLY; Specifies the unique id of the dedicated physical machine on which the dedicated host resides. + AssetID *string `json:"assetId,omitempty"` + // AvailableCapacity - Unutilized capacity of the dedicated host. + AvailableCapacity *DedicatedHostAvailableCapacity `json:"availableCapacity,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostInstanceView. +func (dhiv DedicatedHostInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhiv.AvailableCapacity != nil { + objectMap["availableCapacity"] = dhiv.AvailableCapacity + } + if dhiv.Statuses != nil { + objectMap["statuses"] = dhiv.Statuses + } + return json.Marshal(objectMap) +} + +// DedicatedHostInstanceViewWithName the instance view of a dedicated host that includes the name of the +// dedicated host. It is used for the response to the instance view of a dedicated host group. +type DedicatedHostInstanceViewWithName struct { + // Name - READ-ONLY; The name of the dedicated host. + Name *string `json:"name,omitempty"` + // AssetID - READ-ONLY; Specifies the unique id of the dedicated physical machine on which the dedicated host resides. + AssetID *string `json:"assetId,omitempty"` + // AvailableCapacity - Unutilized capacity of the dedicated host. + AvailableCapacity *DedicatedHostAvailableCapacity `json:"availableCapacity,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostInstanceViewWithName. +func (dhivwn DedicatedHostInstanceViewWithName) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhivwn.AvailableCapacity != nil { + objectMap["availableCapacity"] = dhivwn.AvailableCapacity + } + if dhivwn.Statuses != nil { + objectMap["statuses"] = dhivwn.Statuses + } + return json.Marshal(objectMap) +} + +// DedicatedHostListResult the list dedicated host operation response. +type DedicatedHostListResult struct { + autorest.Response `json:"-"` + // Value - The list of dedicated hosts + Value *[]DedicatedHost `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of dedicated hosts. Call ListNext() with this URI to fetch the next page of dedicated hosts. + NextLink *string `json:"nextLink,omitempty"` +} + +// DedicatedHostListResultIterator provides access to a complete listing of DedicatedHost values. +type DedicatedHostListResultIterator struct { + i int + page DedicatedHostListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DedicatedHostListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DedicatedHostListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DedicatedHostListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DedicatedHostListResultIterator) Response() DedicatedHostListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DedicatedHostListResultIterator) Value() DedicatedHost { + if !iter.page.NotDone() { + return DedicatedHost{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DedicatedHostListResultIterator type. +func NewDedicatedHostListResultIterator(page DedicatedHostListResultPage) DedicatedHostListResultIterator { + return DedicatedHostListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (dhlr DedicatedHostListResult) IsEmpty() bool { + return dhlr.Value == nil || len(*dhlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (dhlr DedicatedHostListResult) hasNextLink() bool { + return dhlr.NextLink != nil && len(*dhlr.NextLink) != 0 +} + +// dedicatedHostListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (dhlr DedicatedHostListResult) dedicatedHostListResultPreparer(ctx context.Context) (*http.Request, error) { + if !dhlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(dhlr.NextLink))) +} + +// DedicatedHostListResultPage contains a page of DedicatedHost values. +type DedicatedHostListResultPage struct { + fn func(context.Context, DedicatedHostListResult) (DedicatedHostListResult, error) + dhlr DedicatedHostListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DedicatedHostListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.dhlr) + if err != nil { + return err + } + page.dhlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DedicatedHostListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DedicatedHostListResultPage) NotDone() bool { + return !page.dhlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DedicatedHostListResultPage) Response() DedicatedHostListResult { + return page.dhlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DedicatedHostListResultPage) Values() []DedicatedHost { + if page.dhlr.IsEmpty() { + return nil + } + return *page.dhlr.Value +} + +// Creates a new instance of the DedicatedHostListResultPage type. +func NewDedicatedHostListResultPage(cur DedicatedHostListResult, getNextPage func(context.Context, DedicatedHostListResult) (DedicatedHostListResult, error)) DedicatedHostListResultPage { + return DedicatedHostListResultPage{ + fn: getNextPage, + dhlr: cur, + } +} + +// DedicatedHostProperties properties of the dedicated host. +type DedicatedHostProperties struct { + // PlatformFaultDomain - Fault domain of the dedicated host within a dedicated host group. + PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` + // AutoReplaceOnFailure - Specifies whether the dedicated host should be replaced automatically in case of a failure. The value is defaulted to 'true' when not provided. + AutoReplaceOnFailure *bool `json:"autoReplaceOnFailure,omitempty"` + // HostID - READ-ONLY; A unique id generated and assigned to the dedicated host by the platform.

Does not change throughout the lifetime of the host. + HostID *string `json:"hostId,omitempty"` + // VirtualMachines - READ-ONLY; A list of references to all virtual machines in the Dedicated Host. + VirtualMachines *[]SubResourceReadOnly `json:"virtualMachines,omitempty"` + // LicenseType - Specifies the software license type that will be applied to the VMs deployed on the dedicated host.

Possible values are:

**None**

**Windows_Server_Hybrid**

**Windows_Server_Perpetual**

Default: **None**. Possible values include: 'DedicatedHostLicenseTypesNone', 'DedicatedHostLicenseTypesWindowsServerHybrid', 'DedicatedHostLicenseTypesWindowsServerPerpetual' + LicenseType DedicatedHostLicenseTypes `json:"licenseType,omitempty"` + // ProvisioningTime - READ-ONLY; The date when the host was first provisioned. + ProvisioningTime *date.Time `json:"provisioningTime,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // InstanceView - READ-ONLY; The dedicated host instance view. + InstanceView *DedicatedHostInstanceView `json:"instanceView,omitempty"` + // TimeCreated - READ-ONLY; Specifies the time at which the Dedicated Host resource was created.

Minimum api-version: 2021-11-01. + TimeCreated *date.Time `json:"timeCreated,omitempty"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostProperties. +func (dhp DedicatedHostProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhp.PlatformFaultDomain != nil { + objectMap["platformFaultDomain"] = dhp.PlatformFaultDomain + } + if dhp.AutoReplaceOnFailure != nil { + objectMap["autoReplaceOnFailure"] = dhp.AutoReplaceOnFailure + } + if dhp.LicenseType != "" { + objectMap["licenseType"] = dhp.LicenseType + } + return json.Marshal(objectMap) +} + +// DedicatedHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DedicatedHostsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DedicatedHostsClient) (DedicatedHost, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DedicatedHostsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DedicatedHostsCreateOrUpdateFuture.Result. +func (future *DedicatedHostsCreateOrUpdateFuture) result(client DedicatedHostsClient) (dh DedicatedHost, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + dh.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if dh.Response.Response, err = future.GetResult(sender); err == nil && dh.Response.Response.StatusCode != http.StatusNoContent { + dh, err = client.CreateOrUpdateResponder(dh.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsCreateOrUpdateFuture", "Result", dh.Response.Response, "Failure responding to request") + } + } + return +} + +// DedicatedHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DedicatedHostsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DedicatedHostsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DedicatedHostsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DedicatedHostsDeleteFuture.Result. +func (future *DedicatedHostsDeleteFuture) result(client DedicatedHostsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// DedicatedHostsRestartFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DedicatedHostsRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DedicatedHostsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DedicatedHostsRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DedicatedHostsRestartFuture.Result. +func (future *DedicatedHostsRestartFuture) result(client DedicatedHostsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// DedicatedHostsUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DedicatedHostsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DedicatedHostsClient) (DedicatedHost, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DedicatedHostsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DedicatedHostsUpdateFuture.Result. +func (future *DedicatedHostsUpdateFuture) result(client DedicatedHostsClient) (dh DedicatedHost, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + dh.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if dh.Response.Response, err = future.GetResult(sender); err == nil && dh.Response.Response.StatusCode != http.StatusNoContent { + dh, err = client.UpdateResponder(dh.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DedicatedHostsUpdateFuture", "Result", dh.Response.Response, "Failure responding to request") + } + } + return +} + +// DedicatedHostUpdate specifies information about the dedicated host. Only tags, autoReplaceOnFailure and +// licenseType may be updated. +type DedicatedHostUpdate struct { + *DedicatedHostProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DedicatedHostUpdate. +func (dhu DedicatedHostUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dhu.DedicatedHostProperties != nil { + objectMap["properties"] = dhu.DedicatedHostProperties + } + if dhu.Tags != nil { + objectMap["tags"] = dhu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DedicatedHostUpdate struct. +func (dhu *DedicatedHostUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var dedicatedHostProperties DedicatedHostProperties + err = json.Unmarshal(*v, &dedicatedHostProperties) + if err != nil { + return err + } + dhu.DedicatedHostProperties = &dedicatedHostProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + dhu.Tags = tags + } + } + } + + return nil +} + +// DiagnosticsProfile specifies the boot diagnostic settings state.

Minimum api-version: +// 2015-06-15. +type DiagnosticsProfile struct { + // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.
**NOTE**: If storageUri is being specified then ensure that the storage account is in the same region and subscription as the VM.

You can easily view the output of your console log.

Azure also enables you to see a screenshot of the VM from the hypervisor. + BootDiagnostics *BootDiagnostics `json:"bootDiagnostics,omitempty"` +} + +// DiffDiskSettings describes the parameters of ephemeral disk settings that can be specified for operating +// system disk.

NOTE: The ephemeral disk settings can only be specified for managed disk. +type DiffDiskSettings struct { + // Option - Specifies the ephemeral disk settings for operating system disk. Possible values include: 'Local' + Option DiffDiskOptions `json:"option,omitempty"` + // Placement - Specifies the ephemeral disk placement for operating system disk.

Possible values are:

**CacheDisk**

**ResourceDisk**

Default: **CacheDisk** if one is configured for the VM size otherwise **ResourceDisk** is used.

Refer to VM size documentation for Windows VM at https://docs.microsoft.com/azure/virtual-machines/windows/sizes and Linux VM at https://docs.microsoft.com/azure/virtual-machines/linux/sizes to check which VM sizes exposes a cache disk. Possible values include: 'CacheDisk', 'ResourceDisk' + Placement DiffDiskPlacement `json:"placement,omitempty"` +} + +// Disallowed describes the disallowed disk types. +type Disallowed struct { + // DiskTypes - A list of disk types. + DiskTypes *[]string `json:"diskTypes,omitempty"` +} + +// DisallowedConfiguration specifies the disallowed configuration for a virtual machine image. +type DisallowedConfiguration struct { + // VMDiskType - VM disk types which are disallowed. Possible values include: 'VMDiskTypesNone', 'VMDiskTypesUnmanaged' + VMDiskType VMDiskTypes `json:"vmDiskType,omitempty"` +} + +// Disk disk resource. +type Disk struct { + autorest.Response `json:"-"` + // ManagedBy - READ-ONLY; A relative URI containing the ID of the VM that has the disk attached. + ManagedBy *string `json:"managedBy,omitempty"` + // ManagedByExtended - READ-ONLY; List of relative URIs containing the IDs of the VMs that have the disk attached. maxShares should be set to a value greater than one for disks to allow attaching them to multiple VMs. + ManagedByExtended *[]string `json:"managedByExtended,omitempty"` + Sku *DiskSku `json:"sku,omitempty"` + // Zones - The Logical zone list for Disk. + Zones *[]string `json:"zones,omitempty"` + // ExtendedLocation - The extended location where the disk will be created. Extended location cannot be changed. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + *DiskProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Disk. +func (d Disk) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if d.Sku != nil { + objectMap["sku"] = d.Sku + } + if d.Zones != nil { + objectMap["zones"] = d.Zones + } + if d.ExtendedLocation != nil { + objectMap["extendedLocation"] = d.ExtendedLocation + } + if d.DiskProperties != nil { + objectMap["properties"] = d.DiskProperties + } + if d.Location != nil { + objectMap["location"] = d.Location + } + if d.Tags != nil { + objectMap["tags"] = d.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Disk struct. +func (d *Disk) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "managedBy": + if v != nil { + var managedBy string + err = json.Unmarshal(*v, &managedBy) + if err != nil { + return err + } + d.ManagedBy = &managedBy + } + case "managedByExtended": + if v != nil { + var managedByExtended []string + err = json.Unmarshal(*v, &managedByExtended) + if err != nil { + return err + } + d.ManagedByExtended = &managedByExtended + } + case "sku": + if v != nil { + var sku DiskSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + d.Sku = &sku + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + d.Zones = &zones + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + d.ExtendedLocation = &extendedLocation + } + case "properties": + if v != nil { + var diskProperties DiskProperties + err = json.Unmarshal(*v, &diskProperties) + if err != nil { + return err + } + d.DiskProperties = &diskProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + d.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + d.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + d.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + d.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + d.Tags = tags + } + } + } + + return nil +} + +// DiskAccess disk access resource. +type DiskAccess struct { + autorest.Response `json:"-"` + *DiskAccessProperties `json:"properties,omitempty"` + // ExtendedLocation - The extended location where the disk access will be created. Extended location cannot be changed. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DiskAccess. +func (da DiskAccess) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if da.DiskAccessProperties != nil { + objectMap["properties"] = da.DiskAccessProperties + } + if da.ExtendedLocation != nil { + objectMap["extendedLocation"] = da.ExtendedLocation + } + if da.Location != nil { + objectMap["location"] = da.Location + } + if da.Tags != nil { + objectMap["tags"] = da.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DiskAccess struct. +func (da *DiskAccess) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var diskAccessProperties DiskAccessProperties + err = json.Unmarshal(*v, &diskAccessProperties) + if err != nil { + return err + } + da.DiskAccessProperties = &diskAccessProperties + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + da.ExtendedLocation = &extendedLocation + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + da.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + da.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + da.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + da.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + da.Tags = tags + } + } + } + + return nil +} + +// DiskAccessesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskAccessesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskAccessesClient) (DiskAccess, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskAccessesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskAccessesCreateOrUpdateFuture.Result. +func (future *DiskAccessesCreateOrUpdateFuture) result(client DiskAccessesClient) (da DiskAccess, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + da.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if da.Response.Response, err = future.GetResult(sender); err == nil && da.Response.Response.StatusCode != http.StatusNoContent { + da, err = client.CreateOrUpdateResponder(da.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesCreateOrUpdateFuture", "Result", da.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskAccessesDeleteAPrivateEndpointConnectionFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type DiskAccessesDeleteAPrivateEndpointConnectionFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskAccessesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskAccessesDeleteAPrivateEndpointConnectionFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskAccessesDeleteAPrivateEndpointConnectionFuture.Result. +func (future *DiskAccessesDeleteAPrivateEndpointConnectionFuture) result(client DiskAccessesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesDeleteAPrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesDeleteAPrivateEndpointConnectionFuture") + return + } + ar.Response = future.Response() + return +} + +// DiskAccessesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DiskAccessesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskAccessesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskAccessesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskAccessesDeleteFuture.Result. +func (future *DiskAccessesDeleteFuture) result(client DiskAccessesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// DiskAccessesUpdateAPrivateEndpointConnectionFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type DiskAccessesUpdateAPrivateEndpointConnectionFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskAccessesClient) (PrivateEndpointConnection, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskAccessesUpdateAPrivateEndpointConnectionFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskAccessesUpdateAPrivateEndpointConnectionFuture.Result. +func (future *DiskAccessesUpdateAPrivateEndpointConnectionFuture) result(client DiskAccessesClient) (pec PrivateEndpointConnection, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + pec.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if pec.Response.Response, err = future.GetResult(sender); err == nil && pec.Response.Response.StatusCode != http.StatusNoContent { + pec, err = client.UpdateAPrivateEndpointConnectionResponder(pec.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture", "Result", pec.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskAccessesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DiskAccessesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskAccessesClient) (DiskAccess, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskAccessesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskAccessesUpdateFuture.Result. +func (future *DiskAccessesUpdateFuture) result(client DiskAccessesClient) (da DiskAccess, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + da.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if da.Response.Response, err = future.GetResult(sender); err == nil && da.Response.Response.StatusCode != http.StatusNoContent { + da, err = client.UpdateResponder(da.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateFuture", "Result", da.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskAccessList the List disk access operation response. +type DiskAccessList struct { + autorest.Response `json:"-"` + // Value - A list of disk access resources. + Value *[]DiskAccess `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of disk access resources. Call ListNext() with this to fetch the next page of disk access resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// DiskAccessListIterator provides access to a complete listing of DiskAccess values. +type DiskAccessListIterator struct { + i int + page DiskAccessListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DiskAccessListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DiskAccessListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DiskAccessListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DiskAccessListIterator) Response() DiskAccessList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DiskAccessListIterator) Value() DiskAccess { + if !iter.page.NotDone() { + return DiskAccess{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DiskAccessListIterator type. +func NewDiskAccessListIterator(page DiskAccessListPage) DiskAccessListIterator { + return DiskAccessListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (dal DiskAccessList) IsEmpty() bool { + return dal.Value == nil || len(*dal.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (dal DiskAccessList) hasNextLink() bool { + return dal.NextLink != nil && len(*dal.NextLink) != 0 +} + +// diskAccessListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (dal DiskAccessList) diskAccessListPreparer(ctx context.Context) (*http.Request, error) { + if !dal.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(dal.NextLink))) +} + +// DiskAccessListPage contains a page of DiskAccess values. +type DiskAccessListPage struct { + fn func(context.Context, DiskAccessList) (DiskAccessList, error) + dal DiskAccessList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DiskAccessListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.dal) + if err != nil { + return err + } + page.dal = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DiskAccessListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DiskAccessListPage) NotDone() bool { + return !page.dal.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DiskAccessListPage) Response() DiskAccessList { + return page.dal +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DiskAccessListPage) Values() []DiskAccess { + if page.dal.IsEmpty() { + return nil + } + return *page.dal.Value +} + +// Creates a new instance of the DiskAccessListPage type. +func NewDiskAccessListPage(cur DiskAccessList, getNextPage func(context.Context, DiskAccessList) (DiskAccessList, error)) DiskAccessListPage { + return DiskAccessListPage{ + fn: getNextPage, + dal: cur, + } +} + +// DiskAccessProperties ... +type DiskAccessProperties struct { + // PrivateEndpointConnections - READ-ONLY; A readonly collection of private endpoint connections created on the disk. Currently only one endpoint connection is supported. + PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"` + // ProvisioningState - READ-ONLY; The disk access resource provisioning state. + ProvisioningState *string `json:"provisioningState,omitempty"` + // TimeCreated - READ-ONLY; The time when the disk access was created. + TimeCreated *date.Time `json:"timeCreated,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskAccessProperties. +func (dap DiskAccessProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// DiskAccessUpdate used for updating a disk access resource. +type DiskAccessUpdate struct { + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DiskAccessUpdate. +func (dau DiskAccessUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dau.Tags != nil { + objectMap["tags"] = dau.Tags + } + return json.Marshal(objectMap) +} + +// DiskEncryptionSet disk encryption set resource. +type DiskEncryptionSet struct { + autorest.Response `json:"-"` + Identity *EncryptionSetIdentity `json:"identity,omitempty"` + *EncryptionSetProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for DiskEncryptionSet. +func (desVar DiskEncryptionSet) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if desVar.Identity != nil { + objectMap["identity"] = desVar.Identity + } + if desVar.EncryptionSetProperties != nil { + objectMap["properties"] = desVar.EncryptionSetProperties + } + if desVar.Location != nil { + objectMap["location"] = desVar.Location + } + if desVar.Tags != nil { + objectMap["tags"] = desVar.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DiskEncryptionSet struct. +func (desVar *DiskEncryptionSet) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "identity": + if v != nil { + var identity EncryptionSetIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + desVar.Identity = &identity + } + case "properties": + if v != nil { + var encryptionSetProperties EncryptionSetProperties + err = json.Unmarshal(*v, &encryptionSetProperties) + if err != nil { + return err + } + desVar.EncryptionSetProperties = &encryptionSetProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + desVar.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + desVar.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + desVar.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + desVar.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + desVar.Tags = tags + } + } + } + + return nil +} + +// DiskEncryptionSetList the List disk encryption set operation response. +type DiskEncryptionSetList struct { + autorest.Response `json:"-"` + // Value - A list of disk encryption sets. + Value *[]DiskEncryptionSet `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of disk encryption sets. Call ListNext() with this to fetch the next page of disk encryption sets. + NextLink *string `json:"nextLink,omitempty"` +} + +// DiskEncryptionSetListIterator provides access to a complete listing of DiskEncryptionSet values. +type DiskEncryptionSetListIterator struct { + i int + page DiskEncryptionSetListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DiskEncryptionSetListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DiskEncryptionSetListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DiskEncryptionSetListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DiskEncryptionSetListIterator) Response() DiskEncryptionSetList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DiskEncryptionSetListIterator) Value() DiskEncryptionSet { + if !iter.page.NotDone() { + return DiskEncryptionSet{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DiskEncryptionSetListIterator type. +func NewDiskEncryptionSetListIterator(page DiskEncryptionSetListPage) DiskEncryptionSetListIterator { + return DiskEncryptionSetListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (desl DiskEncryptionSetList) IsEmpty() bool { + return desl.Value == nil || len(*desl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (desl DiskEncryptionSetList) hasNextLink() bool { + return desl.NextLink != nil && len(*desl.NextLink) != 0 +} + +// diskEncryptionSetListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (desl DiskEncryptionSetList) diskEncryptionSetListPreparer(ctx context.Context) (*http.Request, error) { + if !desl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(desl.NextLink))) +} + +// DiskEncryptionSetListPage contains a page of DiskEncryptionSet values. +type DiskEncryptionSetListPage struct { + fn func(context.Context, DiskEncryptionSetList) (DiskEncryptionSetList, error) + desl DiskEncryptionSetList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DiskEncryptionSetListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.desl) + if err != nil { + return err + } + page.desl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DiskEncryptionSetListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DiskEncryptionSetListPage) NotDone() bool { + return !page.desl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DiskEncryptionSetListPage) Response() DiskEncryptionSetList { + return page.desl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DiskEncryptionSetListPage) Values() []DiskEncryptionSet { + if page.desl.IsEmpty() { + return nil + } + return *page.desl.Value +} + +// Creates a new instance of the DiskEncryptionSetListPage type. +func NewDiskEncryptionSetListPage(cur DiskEncryptionSetList, getNextPage func(context.Context, DiskEncryptionSetList) (DiskEncryptionSetList, error)) DiskEncryptionSetListPage { + return DiskEncryptionSetListPage{ + fn: getNextPage, + desl: cur, + } +} + +// DiskEncryptionSetParameters describes the parameter of customer managed disk encryption set resource id +// that can be specified for disk.

NOTE: The disk encryption set resource id can only be specified +// for managed disk. Please refer https://aka.ms/mdssewithcmkoverview for more details. +type DiskEncryptionSetParameters struct { + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// DiskEncryptionSetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskEncryptionSetsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskEncryptionSetsClient) (DiskEncryptionSet, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskEncryptionSetsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskEncryptionSetsCreateOrUpdateFuture.Result. +func (future *DiskEncryptionSetsCreateOrUpdateFuture) result(client DiskEncryptionSetsClient) (desVar DiskEncryptionSet, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + desVar.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if desVar.Response.Response, err = future.GetResult(sender); err == nil && desVar.Response.Response.StatusCode != http.StatusNoContent { + desVar, err = client.CreateOrUpdateResponder(desVar.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsCreateOrUpdateFuture", "Result", desVar.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskEncryptionSetsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskEncryptionSetsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskEncryptionSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskEncryptionSetsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskEncryptionSetsDeleteFuture.Result. +func (future *DiskEncryptionSetsDeleteFuture) result(client DiskEncryptionSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// DiskEncryptionSetsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskEncryptionSetsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskEncryptionSetsClient) (DiskEncryptionSet, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskEncryptionSetsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskEncryptionSetsUpdateFuture.Result. +func (future *DiskEncryptionSetsUpdateFuture) result(client DiskEncryptionSetsClient) (desVar DiskEncryptionSet, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + desVar.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if desVar.Response.Response, err = future.GetResult(sender); err == nil && desVar.Response.Response.StatusCode != http.StatusNoContent { + desVar, err = client.UpdateResponder(desVar.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsUpdateFuture", "Result", desVar.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskEncryptionSettings describes a Encryption Settings for a Disk +type DiskEncryptionSettings struct { + // DiskEncryptionKey - Specifies the location of the disk encryption key, which is a Key Vault Secret. + DiskEncryptionKey *KeyVaultSecretReference `json:"diskEncryptionKey,omitempty"` + // KeyEncryptionKey - Specifies the location of the key encryption key in Key Vault. + KeyEncryptionKey *KeyVaultKeyReference `json:"keyEncryptionKey,omitempty"` + // Enabled - Specifies whether disk encryption should be enabled on the virtual machine. + Enabled *bool `json:"enabled,omitempty"` +} + +// DiskEncryptionSetUpdate disk encryption set update resource. +type DiskEncryptionSetUpdate struct { + *DiskEncryptionSetUpdateProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` + Identity *EncryptionSetIdentity `json:"identity,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskEncryptionSetUpdate. +func (desu DiskEncryptionSetUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if desu.DiskEncryptionSetUpdateProperties != nil { + objectMap["properties"] = desu.DiskEncryptionSetUpdateProperties + } + if desu.Tags != nil { + objectMap["tags"] = desu.Tags + } + if desu.Identity != nil { + objectMap["identity"] = desu.Identity + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DiskEncryptionSetUpdate struct. +func (desu *DiskEncryptionSetUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var diskEncryptionSetUpdateProperties DiskEncryptionSetUpdateProperties + err = json.Unmarshal(*v, &diskEncryptionSetUpdateProperties) + if err != nil { + return err + } + desu.DiskEncryptionSetUpdateProperties = &diskEncryptionSetUpdateProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + desu.Tags = tags + } + case "identity": + if v != nil { + var identity EncryptionSetIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + desu.Identity = &identity + } + } + } + + return nil +} + +// DiskEncryptionSetUpdateProperties disk encryption set resource update properties. +type DiskEncryptionSetUpdateProperties struct { + // EncryptionType - Possible values include: 'EncryptionAtRestWithCustomerKey', 'EncryptionAtRestWithPlatformAndCustomerKeys', 'ConfidentialVMEncryptedWithCustomerKey' + EncryptionType DiskEncryptionSetType `json:"encryptionType,omitempty"` + ActiveKey *KeyForDiskEncryptionSet `json:"activeKey,omitempty"` + // RotationToLatestKeyVersionEnabled - Set this flag to true to enable auto-updating of this disk encryption set to the latest key version. + RotationToLatestKeyVersionEnabled *bool `json:"rotationToLatestKeyVersionEnabled,omitempty"` + // FederatedClientID - Multi-tenant application client id to access key vault in a different tenant. Setting the value to 'None' will clear the property. + FederatedClientID *string `json:"federatedClientId,omitempty"` +} + +// DiskImageEncryption this is the disk image encryption base class. +type DiskImageEncryption struct { + // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. + DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` +} + +// DiskInstanceView the instance view of the disk. +type DiskInstanceView struct { + // Name - The disk name. + Name *string `json:"name,omitempty"` + // EncryptionSettings - Specifies the encryption settings for the OS Disk.

Minimum api-version: 2015-06-15 + EncryptionSettings *[]DiskEncryptionSettings `json:"encryptionSettings,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// DiskList the List Disks operation response. +type DiskList struct { + autorest.Response `json:"-"` + // Value - A list of disks. + Value *[]Disk `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of disks. Call ListNext() with this to fetch the next page of disks. + NextLink *string `json:"nextLink,omitempty"` +} + +// DiskListIterator provides access to a complete listing of Disk values. +type DiskListIterator struct { + i int + page DiskListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DiskListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DiskListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DiskListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DiskListIterator) Response() DiskList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DiskListIterator) Value() Disk { + if !iter.page.NotDone() { + return Disk{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DiskListIterator type. +func NewDiskListIterator(page DiskListPage) DiskListIterator { + return DiskListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (dl DiskList) IsEmpty() bool { + return dl.Value == nil || len(*dl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (dl DiskList) hasNextLink() bool { + return dl.NextLink != nil && len(*dl.NextLink) != 0 +} + +// diskListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (dl DiskList) diskListPreparer(ctx context.Context) (*http.Request, error) { + if !dl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(dl.NextLink))) +} + +// DiskListPage contains a page of Disk values. +type DiskListPage struct { + fn func(context.Context, DiskList) (DiskList, error) + dl DiskList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DiskListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.dl) + if err != nil { + return err + } + page.dl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DiskListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DiskListPage) NotDone() bool { + return !page.dl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DiskListPage) Response() DiskList { + return page.dl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DiskListPage) Values() []Disk { + if page.dl.IsEmpty() { + return nil + } + return *page.dl.Value +} + +// Creates a new instance of the DiskListPage type. +func NewDiskListPage(cur DiskList, getNextPage func(context.Context, DiskList) (DiskList, error)) DiskListPage { + return DiskListPage{ + fn: getNextPage, + dl: cur, + } +} + +// DiskProperties disk resource properties. +type DiskProperties struct { + // TimeCreated - READ-ONLY; The time when the disk was created. + TimeCreated *date.Time `json:"timeCreated,omitempty"` + // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // PurchasePlan - Purchase plan information for the the image from which the OS disk was created. E.g. - {name: 2019-Datacenter, publisher: MicrosoftWindowsServer, product: WindowsServer} + PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` + // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. + SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` + // CreationData - Disk source information. CreationData information cannot be changed after the disk has been created. + CreationData *CreationData `json:"creationData,omitempty"` + // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // DiskSizeBytes - READ-ONLY; The size of the disk in bytes. This field is read only. + DiskSizeBytes *int64 `json:"diskSizeBytes,omitempty"` + // UniqueID - READ-ONLY; Unique Guid identifying the resource. + UniqueID *string `json:"uniqueId,omitempty"` + // EncryptionSettingsCollection - Encryption settings collection used for Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. + EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` + // ProvisioningState - READ-ONLY; The disk provisioning state. + ProvisioningState *string `json:"provisioningState,omitempty"` + // DiskIOPSReadWrite - The number of IOPS allowed for this disk; only settable for UltraSSD disks. One operation can transfer between 4k and 256k bytes. + DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` + // DiskMBpsReadWrite - The bandwidth allowed for this disk; only settable for UltraSSD disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. + DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` + // DiskIOPSReadOnly - The total number of IOPS that will be allowed across all VMs mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes. + DiskIOPSReadOnly *int64 `json:"diskIOPSReadOnly,omitempty"` + // DiskMBpsReadOnly - The total throughput (MBps) that will be allowed across all VMs mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. + DiskMBpsReadOnly *int64 `json:"diskMBpsReadOnly,omitempty"` + // DiskState - The state of the disk. Possible values include: 'Unattached', 'Attached', 'Reserved', 'Frozen', 'ActiveSAS', 'ActiveSASFrozen', 'ReadyToUpload', 'ActiveUpload' + DiskState DiskState `json:"diskState,omitempty"` + // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. + Encryption *Encryption `json:"encryption,omitempty"` + // MaxShares - The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a disk that can be mounted on multiple VMs at the same time. + MaxShares *int32 `json:"maxShares,omitempty"` + // ShareInfo - READ-ONLY; Details of the list of all VMs that have the disk attached. maxShares should be set to a value greater than one for disks to allow attaching them to multiple VMs. + ShareInfo *[]ShareInfoElement `json:"shareInfo,omitempty"` + // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' + NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. + DiskAccessID *string `json:"diskAccessId,omitempty"` + // BurstingEnabledTime - READ-ONLY; Latest time when bursting was last enabled on a disk. + BurstingEnabledTime *date.Time `json:"burstingEnabledTime,omitempty"` + // Tier - Performance tier of the disk (e.g, P4, S10) as described here: https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra disks. + Tier *string `json:"tier,omitempty"` + // BurstingEnabled - Set to true to enable bursting beyond the provisioned performance target of the disk. Bursting is disabled by default. Does not apply to Ultra disks. + BurstingEnabled *bool `json:"burstingEnabled,omitempty"` + // PropertyUpdatesInProgress - READ-ONLY; Properties of the disk for which update is pending. + PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` + // SupportsHibernation - Indicates the OS on a disk supports hibernation. + SupportsHibernation *bool `json:"supportsHibernation,omitempty"` + // SecurityProfile - Contains the security related information for the resource. + SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"` + // CompletionPercent - Percentage complete for the background copy when a resource is created via the CopyStart operation. + CompletionPercent *float64 `json:"completionPercent,omitempty"` + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` + // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' + DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` + // OptimizedForFrequentAttach - Setting this property to true improves reliability and performance of data disks that are frequently (more than 5 times a day) by detached from one virtual machine and attached to another. This property should not be set for disks that are not detached and attached frequently as it causes the disks to not align with the fault domain of the virtual machine. + OptimizedForFrequentAttach *bool `json:"optimizedForFrequentAttach,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskProperties. +func (dp DiskProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dp.OsType != "" { + objectMap["osType"] = dp.OsType + } + if dp.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = dp.HyperVGeneration + } + if dp.PurchasePlan != nil { + objectMap["purchasePlan"] = dp.PurchasePlan + } + if dp.SupportedCapabilities != nil { + objectMap["supportedCapabilities"] = dp.SupportedCapabilities + } + if dp.CreationData != nil { + objectMap["creationData"] = dp.CreationData + } + if dp.DiskSizeGB != nil { + objectMap["diskSizeGB"] = dp.DiskSizeGB + } + if dp.EncryptionSettingsCollection != nil { + objectMap["encryptionSettingsCollection"] = dp.EncryptionSettingsCollection + } + if dp.DiskIOPSReadWrite != nil { + objectMap["diskIOPSReadWrite"] = dp.DiskIOPSReadWrite + } + if dp.DiskMBpsReadWrite != nil { + objectMap["diskMBpsReadWrite"] = dp.DiskMBpsReadWrite + } + if dp.DiskIOPSReadOnly != nil { + objectMap["diskIOPSReadOnly"] = dp.DiskIOPSReadOnly + } + if dp.DiskMBpsReadOnly != nil { + objectMap["diskMBpsReadOnly"] = dp.DiskMBpsReadOnly + } + if dp.DiskState != "" { + objectMap["diskState"] = dp.DiskState + } + if dp.Encryption != nil { + objectMap["encryption"] = dp.Encryption + } + if dp.MaxShares != nil { + objectMap["maxShares"] = dp.MaxShares + } + if dp.NetworkAccessPolicy != "" { + objectMap["networkAccessPolicy"] = dp.NetworkAccessPolicy + } + if dp.DiskAccessID != nil { + objectMap["diskAccessId"] = dp.DiskAccessID + } + if dp.Tier != nil { + objectMap["tier"] = dp.Tier + } + if dp.BurstingEnabled != nil { + objectMap["burstingEnabled"] = dp.BurstingEnabled + } + if dp.SupportsHibernation != nil { + objectMap["supportsHibernation"] = dp.SupportsHibernation + } + if dp.SecurityProfile != nil { + objectMap["securityProfile"] = dp.SecurityProfile + } + if dp.CompletionPercent != nil { + objectMap["completionPercent"] = dp.CompletionPercent + } + if dp.PublicNetworkAccess != "" { + objectMap["publicNetworkAccess"] = dp.PublicNetworkAccess + } + if dp.DataAccessAuthMode != "" { + objectMap["dataAccessAuthMode"] = dp.DataAccessAuthMode + } + if dp.OptimizedForFrequentAttach != nil { + objectMap["optimizedForFrequentAttach"] = dp.OptimizedForFrequentAttach + } + return json.Marshal(objectMap) +} + +// DiskRestorePoint properties of disk restore point +type DiskRestorePoint struct { + autorest.Response `json:"-"` + *DiskRestorePointProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskRestorePoint. +func (drp DiskRestorePoint) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if drp.DiskRestorePointProperties != nil { + objectMap["properties"] = drp.DiskRestorePointProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DiskRestorePoint struct. +func (drp *DiskRestorePoint) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var diskRestorePointProperties DiskRestorePointProperties + err = json.Unmarshal(*v, &diskRestorePointProperties) + if err != nil { + return err + } + drp.DiskRestorePointProperties = &diskRestorePointProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + drp.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + drp.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + drp.Type = &typeVar + } + } + } + + return nil +} + +// DiskRestorePointGrantAccessFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskRestorePointGrantAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskRestorePointClient) (AccessURI, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskRestorePointGrantAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskRestorePointGrantAccessFuture.Result. +func (future *DiskRestorePointGrantAccessFuture) result(client DiskRestorePointClient) (au AccessURI, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointGrantAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + au.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskRestorePointGrantAccessFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { + au, err = client.GrantAccessResponder(au.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskRestorePointInstanceView the instance view of a disk restore point. +type DiskRestorePointInstanceView struct { + // ID - Disk restore point Id. + ID *string `json:"id,omitempty"` + // ReplicationStatus - The disk restore point replication status information. + ReplicationStatus *DiskRestorePointReplicationStatus `json:"replicationStatus,omitempty"` +} + +// DiskRestorePointList the List Disk Restore Points operation response. +type DiskRestorePointList struct { + autorest.Response `json:"-"` + // Value - A list of disk restore points. + Value *[]DiskRestorePoint `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of disk restore points. Call ListNext() with this to fetch the next page of disk restore points. + NextLink *string `json:"nextLink,omitempty"` +} + +// DiskRestorePointListIterator provides access to a complete listing of DiskRestorePoint values. +type DiskRestorePointListIterator struct { + i int + page DiskRestorePointListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *DiskRestorePointListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *DiskRestorePointListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter DiskRestorePointListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter DiskRestorePointListIterator) Response() DiskRestorePointList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter DiskRestorePointListIterator) Value() DiskRestorePoint { + if !iter.page.NotDone() { + return DiskRestorePoint{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the DiskRestorePointListIterator type. +func NewDiskRestorePointListIterator(page DiskRestorePointListPage) DiskRestorePointListIterator { + return DiskRestorePointListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (drpl DiskRestorePointList) IsEmpty() bool { + return drpl.Value == nil || len(*drpl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (drpl DiskRestorePointList) hasNextLink() bool { + return drpl.NextLink != nil && len(*drpl.NextLink) != 0 +} + +// diskRestorePointListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (drpl DiskRestorePointList) diskRestorePointListPreparer(ctx context.Context) (*http.Request, error) { + if !drpl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(drpl.NextLink))) +} + +// DiskRestorePointListPage contains a page of DiskRestorePoint values. +type DiskRestorePointListPage struct { + fn func(context.Context, DiskRestorePointList) (DiskRestorePointList, error) + drpl DiskRestorePointList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *DiskRestorePointListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.drpl) + if err != nil { + return err + } + page.drpl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *DiskRestorePointListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page DiskRestorePointListPage) NotDone() bool { + return !page.drpl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page DiskRestorePointListPage) Response() DiskRestorePointList { + return page.drpl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page DiskRestorePointListPage) Values() []DiskRestorePoint { + if page.drpl.IsEmpty() { + return nil + } + return *page.drpl.Value +} + +// Creates a new instance of the DiskRestorePointListPage type. +func NewDiskRestorePointListPage(cur DiskRestorePointList, getNextPage func(context.Context, DiskRestorePointList) (DiskRestorePointList, error)) DiskRestorePointListPage { + return DiskRestorePointListPage{ + fn: getNextPage, + drpl: cur, + } +} + +// DiskRestorePointProperties properties of an incremental disk restore point +type DiskRestorePointProperties struct { + // TimeCreated - READ-ONLY; The timestamp of restorePoint creation + TimeCreated *date.Time `json:"timeCreated,omitempty"` + // SourceResourceID - READ-ONLY; arm id of source disk or source disk restore point. + SourceResourceID *string `json:"sourceResourceId,omitempty"` + // OsType - READ-ONLY; The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // PurchasePlan - Purchase plan information for the the image from which the OS disk was created. + PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` + // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. + SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` + // FamilyID - READ-ONLY; id of the backing snapshot's MIS family + FamilyID *string `json:"familyId,omitempty"` + // SourceUniqueID - READ-ONLY; unique incarnation id of the source disk + SourceUniqueID *string `json:"sourceUniqueId,omitempty"` + // Encryption - READ-ONLY; Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. + Encryption *Encryption `json:"encryption,omitempty"` + // SupportsHibernation - Indicates the OS on a disk supports hibernation. + SupportsHibernation *bool `json:"supportsHibernation,omitempty"` + // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' + NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` + // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. + DiskAccessID *string `json:"diskAccessId,omitempty"` + // CompletionPercent - Percentage complete for the background copy of disk restore point when source resource is from a different region. + CompletionPercent *float64 `json:"completionPercent,omitempty"` + // ReplicationState - READ-ONLY; Replication state of disk restore point when source resource is from a different region. + ReplicationState *string `json:"replicationState,omitempty"` + // SourceResourceLocation - READ-ONLY; Location of source disk or source disk restore point when source resource is from a different region. + SourceResourceLocation *string `json:"sourceResourceLocation,omitempty"` + // SecurityProfile - Contains the security related information for the resource. + SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskRestorePointProperties. +func (drpp DiskRestorePointProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if drpp.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = drpp.HyperVGeneration + } + if drpp.PurchasePlan != nil { + objectMap["purchasePlan"] = drpp.PurchasePlan + } + if drpp.SupportedCapabilities != nil { + objectMap["supportedCapabilities"] = drpp.SupportedCapabilities + } + if drpp.SupportsHibernation != nil { + objectMap["supportsHibernation"] = drpp.SupportsHibernation + } + if drpp.NetworkAccessPolicy != "" { + objectMap["networkAccessPolicy"] = drpp.NetworkAccessPolicy + } + if drpp.PublicNetworkAccess != "" { + objectMap["publicNetworkAccess"] = drpp.PublicNetworkAccess + } + if drpp.DiskAccessID != nil { + objectMap["diskAccessId"] = drpp.DiskAccessID + } + if drpp.CompletionPercent != nil { + objectMap["completionPercent"] = drpp.CompletionPercent + } + if drpp.SecurityProfile != nil { + objectMap["securityProfile"] = drpp.SecurityProfile + } + return json.Marshal(objectMap) +} + +// DiskRestorePointReplicationStatus the instance view of a disk restore point. +type DiskRestorePointReplicationStatus struct { + // Status - The resource status information. + Status *InstanceViewStatus `json:"status,omitempty"` + // CompletionPercent - Replication completion percentage. + CompletionPercent *int32 `json:"completionPercent,omitempty"` +} + +// DiskRestorePointRevokeAccessFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type DiskRestorePointRevokeAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DiskRestorePointClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DiskRestorePointRevokeAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DiskRestorePointRevokeAccessFuture.Result. +func (future *DiskRestorePointRevokeAccessFuture) result(client DiskRestorePointClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DiskRestorePointRevokeAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DiskRestorePointRevokeAccessFuture") + return + } + ar.Response = future.Response() + return +} + +// DisksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DisksCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DisksClient) (Disk, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DisksCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DisksCreateOrUpdateFuture.Result. +func (future *DisksCreateOrUpdateFuture) result(client DisksClient) (d Disk, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + d.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DisksCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if d.Response.Response, err = future.GetResult(sender); err == nil && d.Response.Response.StatusCode != http.StatusNoContent { + d, err = client.CreateOrUpdateResponder(d.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksCreateOrUpdateFuture", "Result", d.Response.Response, "Failure responding to request") + } + } + return +} + +// DisksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +type DisksDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DisksClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DisksDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DisksDeleteFuture.Result. +func (future *DisksDeleteFuture) result(client DisksClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DisksDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// DiskSecurityProfile contains the security related information for the resource. +type DiskSecurityProfile struct { + // SecurityType - Possible values include: 'TrustedLaunch', 'ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey', 'ConfidentialVMDiskEncryptedWithPlatformKey', 'ConfidentialVMDiskEncryptedWithCustomerKey' + SecurityType DiskSecurityTypes `json:"securityType,omitempty"` + // SecureVMDiskEncryptionSetID - ResourceId of the disk encryption set associated to Confidential VM supported disk encrypted with customer managed key + SecureVMDiskEncryptionSetID *string `json:"secureVMDiskEncryptionSetId,omitempty"` +} + +// DisksGrantAccessFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DisksGrantAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DisksClient) (AccessURI, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DisksGrantAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DisksGrantAccessFuture.Result. +func (future *DisksGrantAccessFuture) result(client DisksClient) (au AccessURI, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksGrantAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + au.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DisksGrantAccessFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { + au, err = client.GrantAccessResponder(au.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskSku the disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, +// Premium_ZRS, StandardSSD_ZRS, or PremiumV2_LRS. +type DiskSku struct { + // Name - The sku name. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS', 'UltraSSDLRS', 'PremiumZRS', 'StandardSSDZRS', 'PremiumV2LRS' + Name DiskStorageAccountTypes `json:"name,omitempty"` + // Tier - READ-ONLY; The sku tier. + Tier *string `json:"tier,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskSku. +func (ds DiskSku) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ds.Name != "" { + objectMap["name"] = ds.Name + } + return json.Marshal(objectMap) +} + +// DisksRevokeAccessFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type DisksRevokeAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DisksClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DisksRevokeAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DisksRevokeAccessFuture.Result. +func (future *DisksRevokeAccessFuture) result(client DisksClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksRevokeAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DisksRevokeAccessFuture") + return + } + ar.Response = future.Response() + return +} + +// DisksUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation. +type DisksUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(DisksClient) (Disk, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *DisksUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for DisksUpdateFuture.Result. +func (future *DisksUpdateFuture) result(client DisksClient) (d Disk, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + d.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.DisksUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if d.Response.Response, err = future.GetResult(sender); err == nil && d.Response.Response.StatusCode != http.StatusNoContent { + d, err = client.UpdateResponder(d.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.DisksUpdateFuture", "Result", d.Response.Response, "Failure responding to request") + } + } + return +} + +// DiskUpdate disk update resource. +type DiskUpdate struct { + *DiskUpdateProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` + Sku *DiskSku `json:"sku,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskUpdate. +func (du DiskUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if du.DiskUpdateProperties != nil { + objectMap["properties"] = du.DiskUpdateProperties + } + if du.Tags != nil { + objectMap["tags"] = du.Tags + } + if du.Sku != nil { + objectMap["sku"] = du.Sku + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for DiskUpdate struct. +func (du *DiskUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var diskUpdateProperties DiskUpdateProperties + err = json.Unmarshal(*v, &diskUpdateProperties) + if err != nil { + return err + } + du.DiskUpdateProperties = &diskUpdateProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + du.Tags = tags + } + case "sku": + if v != nil { + var sku DiskSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + du.Sku = &sku + } + } + } + + return nil +} + +// DiskUpdateProperties disk resource update properties. +type DiskUpdateProperties struct { + // OsType - the Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. + EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` + // DiskIOPSReadWrite - The number of IOPS allowed for this disk; only settable for UltraSSD disks. One operation can transfer between 4k and 256k bytes. + DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` + // DiskMBpsReadWrite - The bandwidth allowed for this disk; only settable for UltraSSD disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. + DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` + // DiskIOPSReadOnly - The total number of IOPS that will be allowed across all VMs mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes. + DiskIOPSReadOnly *int64 `json:"diskIOPSReadOnly,omitempty"` + // DiskMBpsReadOnly - The total throughput (MBps) that will be allowed across all VMs mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. + DiskMBpsReadOnly *int64 `json:"diskMBpsReadOnly,omitempty"` + // MaxShares - The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a disk that can be mounted on multiple VMs at the same time. + MaxShares *int32 `json:"maxShares,omitempty"` + // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. + Encryption *Encryption `json:"encryption,omitempty"` + // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' + NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. + DiskAccessID *string `json:"diskAccessId,omitempty"` + // Tier - Performance tier of the disk (e.g, P4, S10) as described here: https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra disks. + Tier *string `json:"tier,omitempty"` + // BurstingEnabled - Set to true to enable bursting beyond the provisioned performance target of the disk. Bursting is disabled by default. Does not apply to Ultra disks. + BurstingEnabled *bool `json:"burstingEnabled,omitempty"` + // PurchasePlan - Purchase plan information to be added on the OS disk + PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` + // SupportedCapabilities - List of supported capabilities to be added on the OS disk. + SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` + // PropertyUpdatesInProgress - READ-ONLY; Properties of the disk for which update is pending. + PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` + // SupportsHibernation - Indicates the OS on a disk supports hibernation. + SupportsHibernation *bool `json:"supportsHibernation,omitempty"` + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` + // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' + DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` + // OptimizedForFrequentAttach - Setting this property to true improves reliability and performance of data disks that are frequently (more than 5 times a day) by detached from one virtual machine and attached to another. This property should not be set for disks that are not detached and attached frequently as it causes the disks to not align with the fault domain of the virtual machine. + OptimizedForFrequentAttach *bool `json:"optimizedForFrequentAttach,omitempty"` +} + +// MarshalJSON is the custom marshaler for DiskUpdateProperties. +func (dup DiskUpdateProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dup.OsType != "" { + objectMap["osType"] = dup.OsType + } + if dup.DiskSizeGB != nil { + objectMap["diskSizeGB"] = dup.DiskSizeGB + } + if dup.EncryptionSettingsCollection != nil { + objectMap["encryptionSettingsCollection"] = dup.EncryptionSettingsCollection + } + if dup.DiskIOPSReadWrite != nil { + objectMap["diskIOPSReadWrite"] = dup.DiskIOPSReadWrite + } + if dup.DiskMBpsReadWrite != nil { + objectMap["diskMBpsReadWrite"] = dup.DiskMBpsReadWrite + } + if dup.DiskIOPSReadOnly != nil { + objectMap["diskIOPSReadOnly"] = dup.DiskIOPSReadOnly + } + if dup.DiskMBpsReadOnly != nil { + objectMap["diskMBpsReadOnly"] = dup.DiskMBpsReadOnly + } + if dup.MaxShares != nil { + objectMap["maxShares"] = dup.MaxShares + } + if dup.Encryption != nil { + objectMap["encryption"] = dup.Encryption + } + if dup.NetworkAccessPolicy != "" { + objectMap["networkAccessPolicy"] = dup.NetworkAccessPolicy + } + if dup.DiskAccessID != nil { + objectMap["diskAccessId"] = dup.DiskAccessID + } + if dup.Tier != nil { + objectMap["tier"] = dup.Tier + } + if dup.BurstingEnabled != nil { + objectMap["burstingEnabled"] = dup.BurstingEnabled + } + if dup.PurchasePlan != nil { + objectMap["purchasePlan"] = dup.PurchasePlan + } + if dup.SupportedCapabilities != nil { + objectMap["supportedCapabilities"] = dup.SupportedCapabilities + } + if dup.SupportsHibernation != nil { + objectMap["supportsHibernation"] = dup.SupportsHibernation + } + if dup.PublicNetworkAccess != "" { + objectMap["publicNetworkAccess"] = dup.PublicNetworkAccess + } + if dup.DataAccessAuthMode != "" { + objectMap["dataAccessAuthMode"] = dup.DataAccessAuthMode + } + if dup.OptimizedForFrequentAttach != nil { + objectMap["optimizedForFrequentAttach"] = dup.OptimizedForFrequentAttach + } + return json.Marshal(objectMap) +} + +// Encryption encryption at rest settings for disk or snapshot +type Encryption struct { + // DiskEncryptionSetID - ResourceId of the disk encryption set to use for enabling encryption at rest. + DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` + // Type - Possible values include: 'EncryptionTypeEncryptionAtRestWithPlatformKey', 'EncryptionTypeEncryptionAtRestWithCustomerKey', 'EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys' + Type EncryptionType `json:"type,omitempty"` +} + +// EncryptionImages optional. Allows users to provide customer managed keys for encrypting the OS and data +// disks in the gallery artifact. +type EncryptionImages struct { + OsDiskImage *OSDiskImageEncryption `json:"osDiskImage,omitempty"` + // DataDiskImages - A list of encryption specifications for data disk images. + DataDiskImages *[]DataDiskImageEncryption `json:"dataDiskImages,omitempty"` +} + +// EncryptionSetIdentity the managed identity for the disk encryption set. It should be given permission on +// the key vault before it can be used to encrypt disks. +type EncryptionSetIdentity struct { + // Type - The type of Managed Identity used by the DiskEncryptionSet. Only SystemAssigned is supported for new creations. Disk Encryption Sets can be updated with Identity type None during migration of subscription to a new Azure Active Directory tenant; it will cause the encrypted resources to lose access to the keys. Possible values include: 'DiskEncryptionSetIdentityTypeSystemAssigned', 'DiskEncryptionSetIdentityTypeUserAssigned', 'DiskEncryptionSetIdentityTypeSystemAssignedUserAssigned', 'DiskEncryptionSetIdentityTypeNone' + Type DiskEncryptionSetIdentityType `json:"type,omitempty"` + // PrincipalID - READ-ONLY; The object id of the Managed Identity Resource. This will be sent to the RP from ARM via the x-ms-identity-principal-id header in the PUT request if the resource has a systemAssigned(implicit) identity + PrincipalID *string `json:"principalId,omitempty"` + // TenantID - READ-ONLY; The tenant id of the Managed Identity Resource. This will be sent to the RP from ARM via the x-ms-client-tenant-id header in the PUT request if the resource has a systemAssigned(implicit) identity + TenantID *string `json:"tenantId,omitempty"` + // UserAssignedIdentities - The list of user identities associated with the disk encryption set. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + UserAssignedIdentities map[string]*UserAssignedIdentitiesValue `json:"userAssignedIdentities"` +} + +// MarshalJSON is the custom marshaler for EncryptionSetIdentity. +func (esi EncryptionSetIdentity) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if esi.Type != "" { + objectMap["type"] = esi.Type + } + if esi.UserAssignedIdentities != nil { + objectMap["userAssignedIdentities"] = esi.UserAssignedIdentities + } + return json.Marshal(objectMap) +} + +// EncryptionSetProperties ... +type EncryptionSetProperties struct { + // EncryptionType - Possible values include: 'EncryptionAtRestWithCustomerKey', 'EncryptionAtRestWithPlatformAndCustomerKeys', 'ConfidentialVMEncryptedWithCustomerKey' + EncryptionType DiskEncryptionSetType `json:"encryptionType,omitempty"` + // ActiveKey - The key vault key which is currently used by this disk encryption set. + ActiveKey *KeyForDiskEncryptionSet `json:"activeKey,omitempty"` + // PreviousKeys - READ-ONLY; A readonly collection of key vault keys previously used by this disk encryption set while a key rotation is in progress. It will be empty if there is no ongoing key rotation. + PreviousKeys *[]KeyForDiskEncryptionSet `json:"previousKeys,omitempty"` + // ProvisioningState - READ-ONLY; The disk encryption set provisioning state. + ProvisioningState *string `json:"provisioningState,omitempty"` + // RotationToLatestKeyVersionEnabled - Set this flag to true to enable auto-updating of this disk encryption set to the latest key version. + RotationToLatestKeyVersionEnabled *bool `json:"rotationToLatestKeyVersionEnabled,omitempty"` + // LastKeyRotationTimestamp - READ-ONLY; The time when the active key of this disk encryption set was updated. + LastKeyRotationTimestamp *date.Time `json:"lastKeyRotationTimestamp,omitempty"` + // AutoKeyRotationError - READ-ONLY; The error that was encountered during auto-key rotation. If an error is present, then auto-key rotation will not be attempted until the error on this disk encryption set is fixed. + AutoKeyRotationError *APIError `json:"autoKeyRotationError,omitempty"` + // FederatedClientID - Multi-tenant application client id to access key vault in a different tenant. Setting the value to 'None' will clear the property. + FederatedClientID *string `json:"federatedClientId,omitempty"` +} + +// MarshalJSON is the custom marshaler for EncryptionSetProperties. +func (esp EncryptionSetProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if esp.EncryptionType != "" { + objectMap["encryptionType"] = esp.EncryptionType + } + if esp.ActiveKey != nil { + objectMap["activeKey"] = esp.ActiveKey + } + if esp.RotationToLatestKeyVersionEnabled != nil { + objectMap["rotationToLatestKeyVersionEnabled"] = esp.RotationToLatestKeyVersionEnabled + } + if esp.FederatedClientID != nil { + objectMap["federatedClientId"] = esp.FederatedClientID + } + return json.Marshal(objectMap) +} + +// EncryptionSettingsCollection encryption settings for disk or snapshot +type EncryptionSettingsCollection struct { + // Enabled - Set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object, the existing settings remain unchanged. + Enabled *bool `json:"enabled,omitempty"` + // EncryptionSettings - A collection of encryption settings, one for each disk volume. + EncryptionSettings *[]EncryptionSettingsElement `json:"encryptionSettings,omitempty"` + // EncryptionSettingsVersion - Describes what type of encryption is used for the disks. Once this field is set, it cannot be overwritten. '1.0' corresponds to Azure Disk Encryption with AAD app.'1.1' corresponds to Azure Disk Encryption. + EncryptionSettingsVersion *string `json:"encryptionSettingsVersion,omitempty"` +} + +// EncryptionSettingsElement encryption settings for one disk volume. +type EncryptionSettingsElement struct { + // DiskEncryptionKey - Key Vault Secret Url and vault id of the disk encryption key + DiskEncryptionKey *KeyVaultAndSecretReference `json:"diskEncryptionKey,omitempty"` + // KeyEncryptionKey - Key Vault Key Url and vault id of the key encryption key. KeyEncryptionKey is optional and when provided is used to unwrap the disk encryption key. + KeyEncryptionKey *KeyVaultAndKeyReference `json:"keyEncryptionKey,omitempty"` +} + +// ExtendedLocation the complex type of the extended location. +type ExtendedLocation struct { + // Name - The name of the extended location. + Name *string `json:"name,omitempty"` + // Type - The type of the extended location. Possible values include: 'ExtendedLocationTypesEdgeZone' + Type ExtendedLocationTypes `json:"type,omitempty"` +} + +// Extension describes a cloud service Extension. +type Extension struct { + // Name - The name of the extension. + Name *string `json:"name,omitempty"` + Properties *CloudServiceExtensionProperties `json:"properties,omitempty"` +} + +// GalleriesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type GalleriesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleriesClient) (Gallery, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleriesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleriesCreateOrUpdateFuture.Result. +func (future *GalleriesCreateOrUpdateFuture) result(client GalleriesClient) (g Gallery, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + g.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleriesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if g.Response.Response, err = future.GetResult(sender); err == nil && g.Response.Response.StatusCode != http.StatusNoContent { + g, err = client.CreateOrUpdateResponder(g.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesCreateOrUpdateFuture", "Result", g.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleriesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type GalleriesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleriesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleriesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleriesDeleteFuture.Result. +func (future *GalleriesDeleteFuture) result(client GalleriesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleriesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// GalleriesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type GalleriesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleriesClient) (Gallery, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleriesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleriesUpdateFuture.Result. +func (future *GalleriesUpdateFuture) result(client GalleriesClient) (g Gallery, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + g.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleriesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if g.Response.Response, err = future.GetResult(sender); err == nil && g.Response.Response.StatusCode != http.StatusNoContent { + g, err = client.UpdateResponder(g.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleriesUpdateFuture", "Result", g.Response.Response, "Failure responding to request") + } + } + return +} + +// Gallery specifies information about the Shared Image Gallery that you want to create or update. +type Gallery struct { + autorest.Response `json:"-"` + *GalleryProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Gallery. +func (g Gallery) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if g.GalleryProperties != nil { + objectMap["properties"] = g.GalleryProperties + } + if g.Location != nil { + objectMap["location"] = g.Location + } + if g.Tags != nil { + objectMap["tags"] = g.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Gallery struct. +func (g *Gallery) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryProperties GalleryProperties + err = json.Unmarshal(*v, &galleryProperties) + if err != nil { + return err + } + g.GalleryProperties = &galleryProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + g.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + g.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + g.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + g.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + g.Tags = tags + } + } + } + + return nil +} + +// GalleryApplication specifies information about the gallery Application Definition that you want to +// create or update. +type GalleryApplication struct { + autorest.Response `json:"-"` + *GalleryApplicationProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryApplication. +func (ga GalleryApplication) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ga.GalleryApplicationProperties != nil { + objectMap["properties"] = ga.GalleryApplicationProperties + } + if ga.Location != nil { + objectMap["location"] = ga.Location + } + if ga.Tags != nil { + objectMap["tags"] = ga.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryApplication struct. +func (ga *GalleryApplication) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryApplicationProperties GalleryApplicationProperties + err = json.Unmarshal(*v, &galleryApplicationProperties) + if err != nil { + return err + } + ga.GalleryApplicationProperties = &galleryApplicationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + ga.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + ga.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + ga.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + ga.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + ga.Tags = tags + } + } + } + + return nil +} + +// GalleryApplicationList the List Gallery Applications operation response. +type GalleryApplicationList struct { + autorest.Response `json:"-"` + // Value - A list of Gallery Applications. + Value *[]GalleryApplication `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Application Definitions in the Application Gallery. Call ListNext() with this to fetch the next page of gallery Application Definitions. + NextLink *string `json:"nextLink,omitempty"` +} + +// GalleryApplicationListIterator provides access to a complete listing of GalleryApplication values. +type GalleryApplicationListIterator struct { + i int + page GalleryApplicationListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GalleryApplicationListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GalleryApplicationListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GalleryApplicationListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GalleryApplicationListIterator) Response() GalleryApplicationList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GalleryApplicationListIterator) Value() GalleryApplication { + if !iter.page.NotDone() { + return GalleryApplication{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GalleryApplicationListIterator type. +func NewGalleryApplicationListIterator(page GalleryApplicationListPage) GalleryApplicationListIterator { + return GalleryApplicationListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (gal GalleryApplicationList) IsEmpty() bool { + return gal.Value == nil || len(*gal.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (gal GalleryApplicationList) hasNextLink() bool { + return gal.NextLink != nil && len(*gal.NextLink) != 0 +} + +// galleryApplicationListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (gal GalleryApplicationList) galleryApplicationListPreparer(ctx context.Context) (*http.Request, error) { + if !gal.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(gal.NextLink))) +} + +// GalleryApplicationListPage contains a page of GalleryApplication values. +type GalleryApplicationListPage struct { + fn func(context.Context, GalleryApplicationList) (GalleryApplicationList, error) + gal GalleryApplicationList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GalleryApplicationListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.gal) + if err != nil { + return err + } + page.gal = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GalleryApplicationListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GalleryApplicationListPage) NotDone() bool { + return !page.gal.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GalleryApplicationListPage) Response() GalleryApplicationList { + return page.gal +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GalleryApplicationListPage) Values() []GalleryApplication { + if page.gal.IsEmpty() { + return nil + } + return *page.gal.Value +} + +// Creates a new instance of the GalleryApplicationListPage type. +func NewGalleryApplicationListPage(cur GalleryApplicationList, getNextPage func(context.Context, GalleryApplicationList) (GalleryApplicationList, error)) GalleryApplicationListPage { + return GalleryApplicationListPage{ + fn: getNextPage, + gal: cur, + } +} + +// GalleryApplicationProperties describes the properties of a gallery Application Definition. +type GalleryApplicationProperties struct { + // Description - The description of this gallery Application Definition resource. This property is updatable. + Description *string `json:"description,omitempty"` + // Eula - The Eula agreement for the gallery Application Definition. + Eula *string `json:"eula,omitempty"` + // PrivacyStatementURI - The privacy statement uri. + PrivacyStatementURI *string `json:"privacyStatementUri,omitempty"` + // ReleaseNoteURI - The release note uri. + ReleaseNoteURI *string `json:"releaseNoteUri,omitempty"` + // EndOfLifeDate - The end of life date of the gallery Application Definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // SupportedOSType - This property allows you to specify the supported type of the OS that application is built for.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + SupportedOSType OperatingSystemTypes `json:"supportedOSType,omitempty"` +} + +// GalleryApplicationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryApplicationsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationsClient) (GalleryApplication, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationsCreateOrUpdateFuture.Result. +func (future *GalleryApplicationsCreateOrUpdateFuture) result(client GalleryApplicationsClient) (ga GalleryApplication, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ga.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if ga.Response.Response, err = future.GetResult(sender); err == nil && ga.Response.Response.StatusCode != http.StatusNoContent { + ga, err = client.CreateOrUpdateResponder(ga.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsCreateOrUpdateFuture", "Result", ga.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryApplicationsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryApplicationsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationsDeleteFuture.Result. +func (future *GalleryApplicationsDeleteFuture) result(client GalleryApplicationsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// GalleryApplicationsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryApplicationsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationsClient) (GalleryApplication, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationsUpdateFuture.Result. +func (future *GalleryApplicationsUpdateFuture) result(client GalleryApplicationsClient) (ga GalleryApplication, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ga.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if ga.Response.Response, err = future.GetResult(sender); err == nil && ga.Response.Response.StatusCode != http.StatusNoContent { + ga, err = client.UpdateResponder(ga.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsUpdateFuture", "Result", ga.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryApplicationUpdate specifies information about the gallery Application Definition that you want to +// update. +type GalleryApplicationUpdate struct { + *GalleryApplicationProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryApplicationUpdate. +func (gau GalleryApplicationUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gau.GalleryApplicationProperties != nil { + objectMap["properties"] = gau.GalleryApplicationProperties + } + if gau.Tags != nil { + objectMap["tags"] = gau.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryApplicationUpdate struct. +func (gau *GalleryApplicationUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryApplicationProperties GalleryApplicationProperties + err = json.Unmarshal(*v, &galleryApplicationProperties) + if err != nil { + return err + } + gau.GalleryApplicationProperties = &galleryApplicationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + gau.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + gau.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + gau.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + gau.Tags = tags + } + } + } + + return nil +} + +// GalleryApplicationVersion specifies information about the gallery Application Version that you want to +// create or update. +type GalleryApplicationVersion struct { + autorest.Response `json:"-"` + *GalleryApplicationVersionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryApplicationVersion. +func (gav GalleryApplicationVersion) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gav.GalleryApplicationVersionProperties != nil { + objectMap["properties"] = gav.GalleryApplicationVersionProperties + } + if gav.Location != nil { + objectMap["location"] = gav.Location + } + if gav.Tags != nil { + objectMap["tags"] = gav.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryApplicationVersion struct. +func (gav *GalleryApplicationVersion) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryApplicationVersionProperties GalleryApplicationVersionProperties + err = json.Unmarshal(*v, &galleryApplicationVersionProperties) + if err != nil { + return err + } + gav.GalleryApplicationVersionProperties = &galleryApplicationVersionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + gav.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + gav.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + gav.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + gav.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + gav.Tags = tags + } + } + } + + return nil +} + +// GalleryApplicationVersionList the List Gallery Application version operation response. +type GalleryApplicationVersionList struct { + autorest.Response `json:"-"` + // Value - A list of gallery Application Versions. + Value *[]GalleryApplicationVersion `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of gallery Application Versions. Call ListNext() with this to fetch the next page of gallery Application Versions. + NextLink *string `json:"nextLink,omitempty"` +} + +// GalleryApplicationVersionListIterator provides access to a complete listing of GalleryApplicationVersion +// values. +type GalleryApplicationVersionListIterator struct { + i int + page GalleryApplicationVersionListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GalleryApplicationVersionListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GalleryApplicationVersionListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GalleryApplicationVersionListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GalleryApplicationVersionListIterator) Response() GalleryApplicationVersionList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GalleryApplicationVersionListIterator) Value() GalleryApplicationVersion { + if !iter.page.NotDone() { + return GalleryApplicationVersion{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GalleryApplicationVersionListIterator type. +func NewGalleryApplicationVersionListIterator(page GalleryApplicationVersionListPage) GalleryApplicationVersionListIterator { + return GalleryApplicationVersionListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (gavl GalleryApplicationVersionList) IsEmpty() bool { + return gavl.Value == nil || len(*gavl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (gavl GalleryApplicationVersionList) hasNextLink() bool { + return gavl.NextLink != nil && len(*gavl.NextLink) != 0 +} + +// galleryApplicationVersionListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (gavl GalleryApplicationVersionList) galleryApplicationVersionListPreparer(ctx context.Context) (*http.Request, error) { + if !gavl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(gavl.NextLink))) +} + +// GalleryApplicationVersionListPage contains a page of GalleryApplicationVersion values. +type GalleryApplicationVersionListPage struct { + fn func(context.Context, GalleryApplicationVersionList) (GalleryApplicationVersionList, error) + gavl GalleryApplicationVersionList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GalleryApplicationVersionListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.gavl) + if err != nil { + return err + } + page.gavl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GalleryApplicationVersionListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GalleryApplicationVersionListPage) NotDone() bool { + return !page.gavl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GalleryApplicationVersionListPage) Response() GalleryApplicationVersionList { + return page.gavl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GalleryApplicationVersionListPage) Values() []GalleryApplicationVersion { + if page.gavl.IsEmpty() { + return nil + } + return *page.gavl.Value +} + +// Creates a new instance of the GalleryApplicationVersionListPage type. +func NewGalleryApplicationVersionListPage(cur GalleryApplicationVersionList, getNextPage func(context.Context, GalleryApplicationVersionList) (GalleryApplicationVersionList, error)) GalleryApplicationVersionListPage { + return GalleryApplicationVersionListPage{ + fn: getNextPage, + gavl: cur, + } +} + +// GalleryApplicationVersionProperties describes the properties of a gallery image version. +type GalleryApplicationVersionProperties struct { + PublishingProfile *GalleryApplicationVersionPublishingProfile `json:"publishingProfile,omitempty"` + // ProvisioningState - READ-ONLY; Possible values include: 'GalleryProvisioningStateCreating', 'GalleryProvisioningStateUpdating', 'GalleryProvisioningStateFailed', 'GalleryProvisioningStateSucceeded', 'GalleryProvisioningStateDeleting', 'GalleryProvisioningStateMigrating' + ProvisioningState GalleryProvisioningState `json:"provisioningState,omitempty"` + // ReplicationStatus - READ-ONLY + ReplicationStatus *ReplicationStatus `json:"replicationStatus,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryApplicationVersionProperties. +func (gavp GalleryApplicationVersionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gavp.PublishingProfile != nil { + objectMap["publishingProfile"] = gavp.PublishingProfile + } + return json.Marshal(objectMap) +} + +// GalleryApplicationVersionPublishingProfile the publishing profile of a gallery image version. +type GalleryApplicationVersionPublishingProfile struct { + Source *UserArtifactSource `json:"source,omitempty"` + ManageActions *UserArtifactManage `json:"manageActions,omitempty"` + Settings *UserArtifactSettings `json:"settings,omitempty"` + // AdvancedSettings - Optional. Additional settings to pass to the vm-application-manager extension. For advanced use only. + AdvancedSettings map[string]*string `json:"advancedSettings"` + // EnableHealthCheck - Optional. Whether or not this application reports health. + EnableHealthCheck *bool `json:"enableHealthCheck,omitempty"` + // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. + TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` + // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. + ReplicaCount *int32 `json:"replicaCount,omitempty"` + // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. + ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` + // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' + StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` + // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' + ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` + // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. + TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryApplicationVersionPublishingProfile. +func (gavpp GalleryApplicationVersionPublishingProfile) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gavpp.Source != nil { + objectMap["source"] = gavpp.Source + } + if gavpp.ManageActions != nil { + objectMap["manageActions"] = gavpp.ManageActions + } + if gavpp.Settings != nil { + objectMap["settings"] = gavpp.Settings + } + if gavpp.AdvancedSettings != nil { + objectMap["advancedSettings"] = gavpp.AdvancedSettings + } + if gavpp.EnableHealthCheck != nil { + objectMap["enableHealthCheck"] = gavpp.EnableHealthCheck + } + if gavpp.TargetRegions != nil { + objectMap["targetRegions"] = gavpp.TargetRegions + } + if gavpp.ReplicaCount != nil { + objectMap["replicaCount"] = gavpp.ReplicaCount + } + if gavpp.ExcludeFromLatest != nil { + objectMap["excludeFromLatest"] = gavpp.ExcludeFromLatest + } + if gavpp.EndOfLifeDate != nil { + objectMap["endOfLifeDate"] = gavpp.EndOfLifeDate + } + if gavpp.StorageAccountType != "" { + objectMap["storageAccountType"] = gavpp.StorageAccountType + } + if gavpp.ReplicationMode != "" { + objectMap["replicationMode"] = gavpp.ReplicationMode + } + if gavpp.TargetExtendedLocations != nil { + objectMap["targetExtendedLocations"] = gavpp.TargetExtendedLocations + } + return json.Marshal(objectMap) +} + +// GalleryApplicationVersionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type GalleryApplicationVersionsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationVersionsClient) (GalleryApplicationVersion, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationVersionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationVersionsCreateOrUpdateFuture.Result. +func (future *GalleryApplicationVersionsCreateOrUpdateFuture) result(client GalleryApplicationVersionsClient) (gav GalleryApplicationVersion, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + gav.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if gav.Response.Response, err = future.GetResult(sender); err == nil && gav.Response.Response.StatusCode != http.StatusNoContent { + gav, err = client.CreateOrUpdateResponder(gav.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsCreateOrUpdateFuture", "Result", gav.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryApplicationVersionsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryApplicationVersionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationVersionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationVersionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationVersionsDeleteFuture.Result. +func (future *GalleryApplicationVersionsDeleteFuture) result(client GalleryApplicationVersionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// GalleryApplicationVersionsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryApplicationVersionsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryApplicationVersionsClient) (GalleryApplicationVersion, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryApplicationVersionsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryApplicationVersionsUpdateFuture.Result. +func (future *GalleryApplicationVersionsUpdateFuture) result(client GalleryApplicationVersionsClient) (gav GalleryApplicationVersion, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + gav.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if gav.Response.Response, err = future.GetResult(sender); err == nil && gav.Response.Response.StatusCode != http.StatusNoContent { + gav, err = client.UpdateResponder(gav.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsUpdateFuture", "Result", gav.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryApplicationVersionUpdate specifies information about the gallery Application Version that you +// want to update. +type GalleryApplicationVersionUpdate struct { + *GalleryApplicationVersionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryApplicationVersionUpdate. +func (gavu GalleryApplicationVersionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gavu.GalleryApplicationVersionProperties != nil { + objectMap["properties"] = gavu.GalleryApplicationVersionProperties + } + if gavu.Tags != nil { + objectMap["tags"] = gavu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryApplicationVersionUpdate struct. +func (gavu *GalleryApplicationVersionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryApplicationVersionProperties GalleryApplicationVersionProperties + err = json.Unmarshal(*v, &galleryApplicationVersionProperties) + if err != nil { + return err + } + gavu.GalleryApplicationVersionProperties = &galleryApplicationVersionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + gavu.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + gavu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + gavu.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + gavu.Tags = tags + } + } + } + + return nil +} + +// GalleryArtifactPublishingProfileBase describes the basic gallery artifact publishing profile. +type GalleryArtifactPublishingProfileBase struct { + // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. + TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` + // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. + ReplicaCount *int32 `json:"replicaCount,omitempty"` + // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. + ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` + // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' + StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` + // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' + ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` + // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. + TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryArtifactPublishingProfileBase. +func (gappb GalleryArtifactPublishingProfileBase) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gappb.TargetRegions != nil { + objectMap["targetRegions"] = gappb.TargetRegions + } + if gappb.ReplicaCount != nil { + objectMap["replicaCount"] = gappb.ReplicaCount + } + if gappb.ExcludeFromLatest != nil { + objectMap["excludeFromLatest"] = gappb.ExcludeFromLatest + } + if gappb.EndOfLifeDate != nil { + objectMap["endOfLifeDate"] = gappb.EndOfLifeDate + } + if gappb.StorageAccountType != "" { + objectMap["storageAccountType"] = gappb.StorageAccountType + } + if gappb.ReplicationMode != "" { + objectMap["replicationMode"] = gappb.ReplicationMode + } + if gappb.TargetExtendedLocations != nil { + objectMap["targetExtendedLocations"] = gappb.TargetExtendedLocations + } + return json.Marshal(objectMap) +} + +// GalleryArtifactSource the source image from which the Image Version is going to be created. +type GalleryArtifactSource struct { + ManagedImage *ManagedArtifact `json:"managedImage,omitempty"` +} + +// GalleryArtifactVersionSource the gallery artifact version source. +type GalleryArtifactVersionSource struct { + // ID - The id of the gallery artifact version source. Can specify a disk uri, snapshot uri, user image or storage account resource. + ID *string `json:"id,omitempty"` + // URI - The uri of the gallery artifact version source. Currently used to specify vhd/blob source. + URI *string `json:"uri,omitempty"` +} + +// GalleryDataDiskImage this is the data disk image. +type GalleryDataDiskImage struct { + // Lun - This property specifies the logical unit number of the data disk. This value is used to identify data disks within the Virtual Machine and therefore must be unique for each data disk attached to the Virtual Machine. + Lun *int32 `json:"lun,omitempty"` + // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. + SizeInGB *int32 `json:"sizeInGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' + HostCaching HostCaching `json:"hostCaching,omitempty"` + Source *GalleryArtifactVersionSource `json:"source,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryDataDiskImage. +func (gddi GalleryDataDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gddi.Lun != nil { + objectMap["lun"] = gddi.Lun + } + if gddi.HostCaching != "" { + objectMap["hostCaching"] = gddi.HostCaching + } + if gddi.Source != nil { + objectMap["source"] = gddi.Source + } + return json.Marshal(objectMap) +} + +// GalleryDiskImage this is the disk image base class. +type GalleryDiskImage struct { + // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. + SizeInGB *int32 `json:"sizeInGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' + HostCaching HostCaching `json:"hostCaching,omitempty"` + Source *GalleryArtifactVersionSource `json:"source,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryDiskImage. +func (gdi GalleryDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gdi.HostCaching != "" { + objectMap["hostCaching"] = gdi.HostCaching + } + if gdi.Source != nil { + objectMap["source"] = gdi.Source + } + return json.Marshal(objectMap) +} + +// GalleryExtendedLocation the name of the extended location. +type GalleryExtendedLocation struct { + Name *string `json:"name,omitempty"` + // Type - Possible values include: 'GalleryExtendedLocationTypeEdgeZone', 'GalleryExtendedLocationTypeUnknown' + Type GalleryExtendedLocationType `json:"type,omitempty"` +} + +// GalleryIdentifier describes the gallery unique name. +type GalleryIdentifier struct { + // UniqueName - READ-ONLY; The unique name of the Shared Image Gallery. This name is generated automatically by Azure. + UniqueName *string `json:"uniqueName,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryIdentifier. +func (gi GalleryIdentifier) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// GalleryImage specifies information about the gallery image definition that you want to create or update. +type GalleryImage struct { + autorest.Response `json:"-"` + *GalleryImageProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryImage. +func (gi GalleryImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gi.GalleryImageProperties != nil { + objectMap["properties"] = gi.GalleryImageProperties + } + if gi.Location != nil { + objectMap["location"] = gi.Location + } + if gi.Tags != nil { + objectMap["tags"] = gi.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryImage struct. +func (gi *GalleryImage) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryImageProperties GalleryImageProperties + err = json.Unmarshal(*v, &galleryImageProperties) + if err != nil { + return err + } + gi.GalleryImageProperties = &galleryImageProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + gi.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + gi.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + gi.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + gi.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + gi.Tags = tags + } + } + } + + return nil +} + +// GalleryImageFeature a feature for gallery image. +type GalleryImageFeature struct { + // Name - The name of the gallery image feature. + Name *string `json:"name,omitempty"` + // Value - The value of the gallery image feature. + Value *string `json:"value,omitempty"` +} + +// GalleryImageIdentifier this is the gallery image definition identifier. +type GalleryImageIdentifier struct { + // Publisher - The name of the gallery image definition publisher. + Publisher *string `json:"publisher,omitempty"` + // Offer - The name of the gallery image definition offer. + Offer *string `json:"offer,omitempty"` + // Sku - The name of the gallery image definition SKU. + Sku *string `json:"sku,omitempty"` +} + +// GalleryImageList the List Gallery Images operation response. +type GalleryImageList struct { + autorest.Response `json:"-"` + // Value - A list of Shared Image Gallery images. + Value *[]GalleryImage `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Image Definitions in the Shared Image Gallery. Call ListNext() with this to fetch the next page of gallery image definitions. + NextLink *string `json:"nextLink,omitempty"` +} + +// GalleryImageListIterator provides access to a complete listing of GalleryImage values. +type GalleryImageListIterator struct { + i int + page GalleryImageListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GalleryImageListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GalleryImageListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GalleryImageListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GalleryImageListIterator) Response() GalleryImageList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GalleryImageListIterator) Value() GalleryImage { + if !iter.page.NotDone() { + return GalleryImage{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GalleryImageListIterator type. +func NewGalleryImageListIterator(page GalleryImageListPage) GalleryImageListIterator { + return GalleryImageListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (gil GalleryImageList) IsEmpty() bool { + return gil.Value == nil || len(*gil.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (gil GalleryImageList) hasNextLink() bool { + return gil.NextLink != nil && len(*gil.NextLink) != 0 +} + +// galleryImageListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (gil GalleryImageList) galleryImageListPreparer(ctx context.Context) (*http.Request, error) { + if !gil.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(gil.NextLink))) +} + +// GalleryImageListPage contains a page of GalleryImage values. +type GalleryImageListPage struct { + fn func(context.Context, GalleryImageList) (GalleryImageList, error) + gil GalleryImageList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GalleryImageListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.gil) + if err != nil { + return err + } + page.gil = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GalleryImageListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GalleryImageListPage) NotDone() bool { + return !page.gil.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GalleryImageListPage) Response() GalleryImageList { + return page.gil +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GalleryImageListPage) Values() []GalleryImage { + if page.gil.IsEmpty() { + return nil + } + return *page.gil.Value +} + +// Creates a new instance of the GalleryImageListPage type. +func NewGalleryImageListPage(cur GalleryImageList, getNextPage func(context.Context, GalleryImageList) (GalleryImageList, error)) GalleryImageListPage { + return GalleryImageListPage{ + fn: getNextPage, + gil: cur, + } +} + +// GalleryImageProperties describes the properties of a gallery image definition. +type GalleryImageProperties struct { + // Description - The description of this gallery image definition resource. This property is updatable. + Description *string `json:"description,omitempty"` + // Eula - The Eula agreement for the gallery image definition. + Eula *string `json:"eula,omitempty"` + // PrivacyStatementURI - The privacy statement uri. + PrivacyStatementURI *string `json:"privacyStatementUri,omitempty"` + // ReleaseNoteURI - The release note uri. + ReleaseNoteURI *string `json:"releaseNoteUri,omitempty"` + // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' + OsState OperatingSystemStateTypes `json:"osState,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` + Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` + Disallowed *Disallowed `json:"disallowed,omitempty"` + PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` + // ProvisioningState - READ-ONLY; Possible values include: 'GalleryProvisioningStateCreating', 'GalleryProvisioningStateUpdating', 'GalleryProvisioningStateFailed', 'GalleryProvisioningStateSucceeded', 'GalleryProvisioningStateDeleting', 'GalleryProvisioningStateMigrating' + ProvisioningState GalleryProvisioningState `json:"provisioningState,omitempty"` + // Features - A list of gallery image features. + Features *[]GalleryImageFeature `json:"features,omitempty"` + // Architecture - Possible values include: 'X64', 'Arm64' + Architecture Architecture `json:"architecture,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryImageProperties. +func (gip GalleryImageProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gip.Description != nil { + objectMap["description"] = gip.Description + } + if gip.Eula != nil { + objectMap["eula"] = gip.Eula + } + if gip.PrivacyStatementURI != nil { + objectMap["privacyStatementUri"] = gip.PrivacyStatementURI + } + if gip.ReleaseNoteURI != nil { + objectMap["releaseNoteUri"] = gip.ReleaseNoteURI + } + if gip.OsType != "" { + objectMap["osType"] = gip.OsType + } + if gip.OsState != "" { + objectMap["osState"] = gip.OsState + } + if gip.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = gip.HyperVGeneration + } + if gip.EndOfLifeDate != nil { + objectMap["endOfLifeDate"] = gip.EndOfLifeDate + } + if gip.Identifier != nil { + objectMap["identifier"] = gip.Identifier + } + if gip.Recommended != nil { + objectMap["recommended"] = gip.Recommended + } + if gip.Disallowed != nil { + objectMap["disallowed"] = gip.Disallowed + } + if gip.PurchasePlan != nil { + objectMap["purchasePlan"] = gip.PurchasePlan + } + if gip.Features != nil { + objectMap["features"] = gip.Features + } + if gip.Architecture != "" { + objectMap["architecture"] = gip.Architecture + } + return json.Marshal(objectMap) +} + +// GalleryImagesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryImagesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImagesClient) (GalleryImage, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImagesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImagesCreateOrUpdateFuture.Result. +func (future *GalleryImagesCreateOrUpdateFuture) result(client GalleryImagesClient) (gi GalleryImage, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + gi.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if gi.Response.Response, err = future.GetResult(sender); err == nil && gi.Response.Response.StatusCode != http.StatusNoContent { + gi, err = client.CreateOrUpdateResponder(gi.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesCreateOrUpdateFuture", "Result", gi.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryImagesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type GalleryImagesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImagesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImagesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImagesDeleteFuture.Result. +func (future *GalleryImagesDeleteFuture) result(client GalleryImagesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// GalleryImagesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type GalleryImagesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImagesClient) (GalleryImage, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImagesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImagesUpdateFuture.Result. +func (future *GalleryImagesUpdateFuture) result(client GalleryImagesClient) (gi GalleryImage, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + gi.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if gi.Response.Response, err = future.GetResult(sender); err == nil && gi.Response.Response.StatusCode != http.StatusNoContent { + gi, err = client.UpdateResponder(gi.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImagesUpdateFuture", "Result", gi.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryImageUpdate specifies information about the gallery image definition that you want to update. +type GalleryImageUpdate struct { + *GalleryImageProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryImageUpdate. +func (giu GalleryImageUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if giu.GalleryImageProperties != nil { + objectMap["properties"] = giu.GalleryImageProperties + } + if giu.Tags != nil { + objectMap["tags"] = giu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryImageUpdate struct. +func (giu *GalleryImageUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryImageProperties GalleryImageProperties + err = json.Unmarshal(*v, &galleryImageProperties) + if err != nil { + return err + } + giu.GalleryImageProperties = &galleryImageProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + giu.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + giu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + giu.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + giu.Tags = tags + } + } + } + + return nil +} + +// GalleryImageVersion specifies information about the gallery image version that you want to create or +// update. +type GalleryImageVersion struct { + autorest.Response `json:"-"` + *GalleryImageVersionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryImageVersion. +func (giv GalleryImageVersion) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if giv.GalleryImageVersionProperties != nil { + objectMap["properties"] = giv.GalleryImageVersionProperties + } + if giv.Location != nil { + objectMap["location"] = giv.Location + } + if giv.Tags != nil { + objectMap["tags"] = giv.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryImageVersion struct. +func (giv *GalleryImageVersion) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryImageVersionProperties GalleryImageVersionProperties + err = json.Unmarshal(*v, &galleryImageVersionProperties) + if err != nil { + return err + } + giv.GalleryImageVersionProperties = &galleryImageVersionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + giv.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + giv.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + giv.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + giv.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + giv.Tags = tags + } + } + } + + return nil +} + +// GalleryImageVersionList the List Gallery Image version operation response. +type GalleryImageVersionList struct { + autorest.Response `json:"-"` + // Value - A list of gallery image versions. + Value *[]GalleryImageVersion `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of gallery image versions. Call ListNext() with this to fetch the next page of gallery image versions. + NextLink *string `json:"nextLink,omitempty"` +} + +// GalleryImageVersionListIterator provides access to a complete listing of GalleryImageVersion values. +type GalleryImageVersionListIterator struct { + i int + page GalleryImageVersionListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GalleryImageVersionListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GalleryImageVersionListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GalleryImageVersionListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GalleryImageVersionListIterator) Response() GalleryImageVersionList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GalleryImageVersionListIterator) Value() GalleryImageVersion { + if !iter.page.NotDone() { + return GalleryImageVersion{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GalleryImageVersionListIterator type. +func NewGalleryImageVersionListIterator(page GalleryImageVersionListPage) GalleryImageVersionListIterator { + return GalleryImageVersionListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (givl GalleryImageVersionList) IsEmpty() bool { + return givl.Value == nil || len(*givl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (givl GalleryImageVersionList) hasNextLink() bool { + return givl.NextLink != nil && len(*givl.NextLink) != 0 +} + +// galleryImageVersionListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (givl GalleryImageVersionList) galleryImageVersionListPreparer(ctx context.Context) (*http.Request, error) { + if !givl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(givl.NextLink))) +} + +// GalleryImageVersionListPage contains a page of GalleryImageVersion values. +type GalleryImageVersionListPage struct { + fn func(context.Context, GalleryImageVersionList) (GalleryImageVersionList, error) + givl GalleryImageVersionList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GalleryImageVersionListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.givl) + if err != nil { + return err + } + page.givl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GalleryImageVersionListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GalleryImageVersionListPage) NotDone() bool { + return !page.givl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GalleryImageVersionListPage) Response() GalleryImageVersionList { + return page.givl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GalleryImageVersionListPage) Values() []GalleryImageVersion { + if page.givl.IsEmpty() { + return nil + } + return *page.givl.Value +} + +// Creates a new instance of the GalleryImageVersionListPage type. +func NewGalleryImageVersionListPage(cur GalleryImageVersionList, getNextPage func(context.Context, GalleryImageVersionList) (GalleryImageVersionList, error)) GalleryImageVersionListPage { + return GalleryImageVersionListPage{ + fn: getNextPage, + givl: cur, + } +} + +// GalleryImageVersionProperties describes the properties of a gallery image version. +type GalleryImageVersionProperties struct { + PublishingProfile *GalleryImageVersionPublishingProfile `json:"publishingProfile,omitempty"` + // ProvisioningState - READ-ONLY; Possible values include: 'GalleryProvisioningStateCreating', 'GalleryProvisioningStateUpdating', 'GalleryProvisioningStateFailed', 'GalleryProvisioningStateSucceeded', 'GalleryProvisioningStateDeleting', 'GalleryProvisioningStateMigrating' + ProvisioningState GalleryProvisioningState `json:"provisioningState,omitempty"` + StorageProfile *GalleryImageVersionStorageProfile `json:"storageProfile,omitempty"` + // ReplicationStatus - READ-ONLY + ReplicationStatus *ReplicationStatus `json:"replicationStatus,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryImageVersionProperties. +func (givp GalleryImageVersionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if givp.PublishingProfile != nil { + objectMap["publishingProfile"] = givp.PublishingProfile + } + if givp.StorageProfile != nil { + objectMap["storageProfile"] = givp.StorageProfile + } + return json.Marshal(objectMap) +} + +// GalleryImageVersionPublishingProfile the publishing profile of a gallery image Version. +type GalleryImageVersionPublishingProfile struct { + // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. + TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` + // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. + ReplicaCount *int32 `json:"replicaCount,omitempty"` + // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. + ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` + // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' + StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` + // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' + ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` + // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. + TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryImageVersionPublishingProfile. +func (givpp GalleryImageVersionPublishingProfile) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if givpp.TargetRegions != nil { + objectMap["targetRegions"] = givpp.TargetRegions + } + if givpp.ReplicaCount != nil { + objectMap["replicaCount"] = givpp.ReplicaCount + } + if givpp.ExcludeFromLatest != nil { + objectMap["excludeFromLatest"] = givpp.ExcludeFromLatest + } + if givpp.EndOfLifeDate != nil { + objectMap["endOfLifeDate"] = givpp.EndOfLifeDate + } + if givpp.StorageAccountType != "" { + objectMap["storageAccountType"] = givpp.StorageAccountType + } + if givpp.ReplicationMode != "" { + objectMap["replicationMode"] = givpp.ReplicationMode + } + if givpp.TargetExtendedLocations != nil { + objectMap["targetExtendedLocations"] = givpp.TargetExtendedLocations + } + return json.Marshal(objectMap) +} + +// GalleryImageVersionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryImageVersionsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImageVersionsClient) (GalleryImageVersion, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImageVersionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImageVersionsCreateOrUpdateFuture.Result. +func (future *GalleryImageVersionsCreateOrUpdateFuture) result(client GalleryImageVersionsClient) (giv GalleryImageVersion, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + giv.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if giv.Response.Response, err = future.GetResult(sender); err == nil && giv.Response.Response.StatusCode != http.StatusNoContent { + giv, err = client.CreateOrUpdateResponder(giv.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsCreateOrUpdateFuture", "Result", giv.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryImageVersionsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryImageVersionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImageVersionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImageVersionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImageVersionsDeleteFuture.Result. +func (future *GalleryImageVersionsDeleteFuture) result(client GalleryImageVersionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// GalleryImageVersionStorageProfile this is the storage profile of a Gallery Image Version. +type GalleryImageVersionStorageProfile struct { + Source *GalleryArtifactVersionSource `json:"source,omitempty"` + OsDiskImage *GalleryOSDiskImage `json:"osDiskImage,omitempty"` + // DataDiskImages - A list of data disk images. + DataDiskImages *[]GalleryDataDiskImage `json:"dataDiskImages,omitempty"` +} + +// GalleryImageVersionsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GalleryImageVersionsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GalleryImageVersionsClient) (GalleryImageVersion, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GalleryImageVersionsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GalleryImageVersionsUpdateFuture.Result. +func (future *GalleryImageVersionsUpdateFuture) result(client GalleryImageVersionsClient) (giv GalleryImageVersion, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + giv.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if giv.Response.Response, err = future.GetResult(sender); err == nil && giv.Response.Response.StatusCode != http.StatusNoContent { + giv, err = client.UpdateResponder(giv.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsUpdateFuture", "Result", giv.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryImageVersionUpdate specifies information about the gallery image version that you want to update. +type GalleryImageVersionUpdate struct { + *GalleryImageVersionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryImageVersionUpdate. +func (givu GalleryImageVersionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if givu.GalleryImageVersionProperties != nil { + objectMap["properties"] = givu.GalleryImageVersionProperties + } + if givu.Tags != nil { + objectMap["tags"] = givu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryImageVersionUpdate struct. +func (givu *GalleryImageVersionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryImageVersionProperties GalleryImageVersionProperties + err = json.Unmarshal(*v, &galleryImageVersionProperties) + if err != nil { + return err + } + givu.GalleryImageVersionProperties = &galleryImageVersionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + givu.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + givu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + givu.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + givu.Tags = tags + } + } + } + + return nil +} + +// GalleryList the List Galleries operation response. +type GalleryList struct { + autorest.Response `json:"-"` + // Value - A list of galleries. + Value *[]Gallery `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of galleries. Call ListNext() with this to fetch the next page of galleries. + NextLink *string `json:"nextLink,omitempty"` +} + +// GalleryListIterator provides access to a complete listing of Gallery values. +type GalleryListIterator struct { + i int + page GalleryListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GalleryListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GalleryListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GalleryListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GalleryListIterator) Response() GalleryList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GalleryListIterator) Value() Gallery { + if !iter.page.NotDone() { + return Gallery{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GalleryListIterator type. +func NewGalleryListIterator(page GalleryListPage) GalleryListIterator { + return GalleryListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (gl GalleryList) IsEmpty() bool { + return gl.Value == nil || len(*gl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (gl GalleryList) hasNextLink() bool { + return gl.NextLink != nil && len(*gl.NextLink) != 0 +} + +// galleryListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (gl GalleryList) galleryListPreparer(ctx context.Context) (*http.Request, error) { + if !gl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(gl.NextLink))) +} + +// GalleryListPage contains a page of Gallery values. +type GalleryListPage struct { + fn func(context.Context, GalleryList) (GalleryList, error) + gl GalleryList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GalleryListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GalleryListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.gl) + if err != nil { + return err + } + page.gl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GalleryListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GalleryListPage) NotDone() bool { + return !page.gl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GalleryListPage) Response() GalleryList { + return page.gl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GalleryListPage) Values() []Gallery { + if page.gl.IsEmpty() { + return nil + } + return *page.gl.Value +} + +// Creates a new instance of the GalleryListPage type. +func NewGalleryListPage(cur GalleryList, getNextPage func(context.Context, GalleryList) (GalleryList, error)) GalleryListPage { + return GalleryListPage{ + fn: getNextPage, + gl: cur, + } +} + +// GalleryOSDiskImage this is the OS disk image. +type GalleryOSDiskImage struct { + // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. + SizeInGB *int32 `json:"sizeInGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' + HostCaching HostCaching `json:"hostCaching,omitempty"` + Source *GalleryArtifactVersionSource `json:"source,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryOSDiskImage. +func (godi GalleryOSDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if godi.HostCaching != "" { + objectMap["hostCaching"] = godi.HostCaching + } + if godi.Source != nil { + objectMap["source"] = godi.Source + } + return json.Marshal(objectMap) +} + +// GalleryProperties describes the properties of a Shared Image Gallery. +type GalleryProperties struct { + // Description - The description of this Shared Image Gallery resource. This property is updatable. + Description *string `json:"description,omitempty"` + Identifier *GalleryIdentifier `json:"identifier,omitempty"` + // ProvisioningState - READ-ONLY; Possible values include: 'GalleryProvisioningStateCreating', 'GalleryProvisioningStateUpdating', 'GalleryProvisioningStateFailed', 'GalleryProvisioningStateSucceeded', 'GalleryProvisioningStateDeleting', 'GalleryProvisioningStateMigrating' + ProvisioningState GalleryProvisioningState `json:"provisioningState,omitempty"` + SharingProfile *SharingProfile `json:"sharingProfile,omitempty"` + SoftDeletePolicy *SoftDeletePolicy `json:"softDeletePolicy,omitempty"` + // SharingStatus - READ-ONLY + SharingStatus *SharingStatus `json:"sharingStatus,omitempty"` +} + +// MarshalJSON is the custom marshaler for GalleryProperties. +func (gp GalleryProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gp.Description != nil { + objectMap["description"] = gp.Description + } + if gp.Identifier != nil { + objectMap["identifier"] = gp.Identifier + } + if gp.SharingProfile != nil { + objectMap["sharingProfile"] = gp.SharingProfile + } + if gp.SoftDeletePolicy != nil { + objectMap["softDeletePolicy"] = gp.SoftDeletePolicy + } + return json.Marshal(objectMap) +} + +// GallerySharingProfileUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type GallerySharingProfileUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GallerySharingProfileClient) (SharingUpdate, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GallerySharingProfileUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GallerySharingProfileUpdateFuture.Result. +func (future *GallerySharingProfileUpdateFuture) result(client GallerySharingProfileClient) (su SharingUpdate, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + su.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.GallerySharingProfileUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if su.Response.Response, err = future.GetResult(sender); err == nil && su.Response.Response.StatusCode != http.StatusNoContent { + su, err = client.UpdateResponder(su.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileUpdateFuture", "Result", su.Response.Response, "Failure responding to request") + } + } + return +} + +// GalleryTargetExtendedLocation ... +type GalleryTargetExtendedLocation struct { + // Name - The name of the region. + Name *string `json:"name,omitempty"` + ExtendedLocation *GalleryExtendedLocation `json:"extendedLocation,omitempty"` + // ExtendedLocationReplicaCount - The number of replicas of the Image Version to be created per extended location. This property is updatable. + ExtendedLocationReplicaCount *int32 `json:"extendedLocationReplicaCount,omitempty"` + // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' + StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` + Encryption *EncryptionImages `json:"encryption,omitempty"` +} + +// GalleryUpdate specifies information about the Shared Image Gallery that you want to update. +type GalleryUpdate struct { + *GalleryProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for GalleryUpdate. +func (gu GalleryUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gu.GalleryProperties != nil { + objectMap["properties"] = gu.GalleryProperties + } + if gu.Tags != nil { + objectMap["tags"] = gu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for GalleryUpdate struct. +func (gu *GalleryUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var galleryProperties GalleryProperties + err = json.Unmarshal(*v, &galleryProperties) + if err != nil { + return err + } + gu.GalleryProperties = &galleryProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + gu.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + gu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + gu.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + gu.Tags = tags + } + } + } + + return nil +} + +// GrantAccessData data used for requesting a SAS. +type GrantAccessData struct { + // Access - Possible values include: 'None', 'Read', 'Write' + Access AccessLevel `json:"access,omitempty"` + // DurationInSeconds - Time duration in seconds until the SAS access expires. + DurationInSeconds *int32 `json:"durationInSeconds,omitempty"` + // GetSecureVMGuestStateSAS - Set this flag to true to get additional SAS for VM guest state + GetSecureVMGuestStateSAS *bool `json:"getSecureVMGuestStateSAS,omitempty"` +} + +// HardwareProfile specifies the hardware settings for the virtual machine. +type HardwareProfile struct { + // VMSize - Specifies the size of the virtual machine.

The enum data type is currently deprecated and will be removed by December 23rd 2023.

Recommended way to get the list of available sizes is using these APIs:

[List all available virtual machine sizes in an availability set](https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes)

[List all available virtual machine sizes in a region]( https://docs.microsoft.com/rest/api/compute/resourceskus/list)

[List all available virtual machine sizes for resizing](https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes). For more information about virtual machine sizes, see [Sizes for virtual machines](https://docs.microsoft.com/azure/virtual-machines/sizes).

The available VM sizes depend on region and availability set. Possible values include: 'BasicA0', 'BasicA1', 'BasicA2', 'BasicA3', 'BasicA4', 'StandardA0', 'StandardA1', 'StandardA2', 'StandardA3', 'StandardA4', 'StandardA5', 'StandardA6', 'StandardA7', 'StandardA8', 'StandardA9', 'StandardA10', 'StandardA11', 'StandardA1V2', 'StandardA2V2', 'StandardA4V2', 'StandardA8V2', 'StandardA2mV2', 'StandardA4mV2', 'StandardA8mV2', 'StandardB1s', 'StandardB1ms', 'StandardB2s', 'StandardB2ms', 'StandardB4ms', 'StandardB8ms', 'StandardD1', 'StandardD2', 'StandardD3', 'StandardD4', 'StandardD11', 'StandardD12', 'StandardD13', 'StandardD14', 'StandardD1V2', 'StandardD2V2', 'StandardD3V2', 'StandardD4V2', 'StandardD5V2', 'StandardD2V3', 'StandardD4V3', 'StandardD8V3', 'StandardD16V3', 'StandardD32V3', 'StandardD64V3', 'StandardD2sV3', 'StandardD4sV3', 'StandardD8sV3', 'StandardD16sV3', 'StandardD32sV3', 'StandardD64sV3', 'StandardD11V2', 'StandardD12V2', 'StandardD13V2', 'StandardD14V2', 'StandardD15V2', 'StandardDS1', 'StandardDS2', 'StandardDS3', 'StandardDS4', 'StandardDS11', 'StandardDS12', 'StandardDS13', 'StandardDS14', 'StandardDS1V2', 'StandardDS2V2', 'StandardDS3V2', 'StandardDS4V2', 'StandardDS5V2', 'StandardDS11V2', 'StandardDS12V2', 'StandardDS13V2', 'StandardDS14V2', 'StandardDS15V2', 'StandardDS134V2', 'StandardDS132V2', 'StandardDS148V2', 'StandardDS144V2', 'StandardE2V3', 'StandardE4V3', 'StandardE8V3', 'StandardE16V3', 'StandardE32V3', 'StandardE64V3', 'StandardE2sV3', 'StandardE4sV3', 'StandardE8sV3', 'StandardE16sV3', 'StandardE32sV3', 'StandardE64sV3', 'StandardE3216V3', 'StandardE328sV3', 'StandardE6432sV3', 'StandardE6416sV3', 'StandardF1', 'StandardF2', 'StandardF4', 'StandardF8', 'StandardF16', 'StandardF1s', 'StandardF2s', 'StandardF4s', 'StandardF8s', 'StandardF16s', 'StandardF2sV2', 'StandardF4sV2', 'StandardF8sV2', 'StandardF16sV2', 'StandardF32sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardG1', 'StandardG2', 'StandardG3', 'StandardG4', 'StandardG5', 'StandardGS1', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS5', 'StandardGS48', 'StandardGS44', 'StandardGS516', 'StandardGS58', 'StandardH8', 'StandardH16', 'StandardH8m', 'StandardH16m', 'StandardH16r', 'StandardH16mr', 'StandardL4s', 'StandardL8s', 'StandardL16s', 'StandardL32s', 'StandardM64s', 'StandardM64ms', 'StandardM128s', 'StandardM128ms', 'StandardM6432ms', 'StandardM6416ms', 'StandardM12864ms', 'StandardM12832ms', 'StandardNC6', 'StandardNC12', 'StandardNC24', 'StandardNC24r', 'StandardNC6sV2', 'StandardNC12sV2', 'StandardNC24sV2', 'StandardNC24rsV2', 'StandardNC6sV3', 'StandardNC12sV3', 'StandardNC24sV3', 'StandardNC24rsV3', 'StandardND6s', 'StandardND12s', 'StandardND24s', 'StandardND24rs', 'StandardNV6', 'StandardNV12', 'StandardNV24' + VMSize VirtualMachineSizeTypes `json:"vmSize,omitempty"` + // VMSizeProperties - Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-07-01.

This feature is still in preview mode and is not supported for VirtualMachineScaleSet.

Please follow the instructions in [VM Customization](https://aka.ms/vmcustomization) for more details. + VMSizeProperties *VMSizeProperties `json:"vmSizeProperties,omitempty"` +} + +// Image the source user image virtual hard disk. The virtual hard disk will be copied before being +// attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not +// exist. +type Image struct { + autorest.Response `json:"-"` + *ImageProperties `json:"properties,omitempty"` + // ExtendedLocation - The extended location of the Image. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Image. +func (i Image) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if i.ImageProperties != nil { + objectMap["properties"] = i.ImageProperties + } + if i.ExtendedLocation != nil { + objectMap["extendedLocation"] = i.ExtendedLocation + } + if i.Location != nil { + objectMap["location"] = i.Location + } + if i.Tags != nil { + objectMap["tags"] = i.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Image struct. +func (i *Image) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var imageProperties ImageProperties + err = json.Unmarshal(*v, &imageProperties) + if err != nil { + return err + } + i.ImageProperties = &imageProperties + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + i.ExtendedLocation = &extendedLocation + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + i.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + i.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + i.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + i.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + i.Tags = tags + } + } + } + + return nil +} + +// ImageDataDisk describes a data disk. +type ImageDataDisk struct { + // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. + Lun *int32 `json:"lun,omitempty"` + // Snapshot - The snapshot. + Snapshot *SubResource `json:"snapshot,omitempty"` + // ManagedDisk - The managedDisk. + ManagedDisk *SubResource `json:"managedDisk,omitempty"` + // BlobURI - The Virtual Hard Disk. + BlobURI *string `json:"blobUri,omitempty"` + // Caching - Specifies the caching requirements.

Possible values are:

**None**

**ReadOnly**

**ReadWrite**

Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

This value cannot be larger than 1023 GB + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' + StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` +} + +// ImageDisk describes a image disk. +type ImageDisk struct { + // Snapshot - The snapshot. + Snapshot *SubResource `json:"snapshot,omitempty"` + // ManagedDisk - The managedDisk. + ManagedDisk *SubResource `json:"managedDisk,omitempty"` + // BlobURI - The Virtual Hard Disk. + BlobURI *string `json:"blobUri,omitempty"` + // Caching - Specifies the caching requirements.

Possible values are:

**None**

**ReadOnly**

**ReadWrite**

Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

This value cannot be larger than 1023 GB + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' + StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` +} + +// ImageDiskReference the source image used for creating the disk. +type ImageDiskReference struct { + // ID - A relative uri containing either a Platform Image Repository, user image, or Azure Compute Gallery image reference. + ID *string `json:"id,omitempty"` + // SharedGalleryImageID - A relative uri containing a direct shared Azure Compute Gallery image reference. + SharedGalleryImageID *string `json:"sharedGalleryImageId,omitempty"` + // CommunityGalleryImageID - A relative uri containing a community Azure Compute Gallery image reference. + CommunityGalleryImageID *string `json:"communityGalleryImageId,omitempty"` + // Lun - If the disk is created from an image's data disk, this is an index that indicates which of the data disks in the image to use. For OS disks, this field is null. + Lun *int32 `json:"lun,omitempty"` +} + +// ImageListResult the List Image operation response. +type ImageListResult struct { + autorest.Response `json:"-"` + // Value - The list of Images. + Value *[]Image `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images. + NextLink *string `json:"nextLink,omitempty"` +} + +// ImageListResultIterator provides access to a complete listing of Image values. +type ImageListResultIterator struct { + i int + page ImageListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ImageListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImageListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ImageListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ImageListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ImageListResultIterator) Response() ImageListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ImageListResultIterator) Value() Image { + if !iter.page.NotDone() { + return Image{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ImageListResultIterator type. +func NewImageListResultIterator(page ImageListResultPage) ImageListResultIterator { + return ImageListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (ilr ImageListResult) IsEmpty() bool { + return ilr.Value == nil || len(*ilr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (ilr ImageListResult) hasNextLink() bool { + return ilr.NextLink != nil && len(*ilr.NextLink) != 0 +} + +// imageListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (ilr ImageListResult) imageListResultPreparer(ctx context.Context) (*http.Request, error) { + if !ilr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(ilr.NextLink))) +} + +// ImageListResultPage contains a page of Image values. +type ImageListResultPage struct { + fn func(context.Context, ImageListResult) (ImageListResult, error) + ilr ImageListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ImageListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ImageListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.ilr) + if err != nil { + return err + } + page.ilr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ImageListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ImageListResultPage) NotDone() bool { + return !page.ilr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ImageListResultPage) Response() ImageListResult { + return page.ilr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ImageListResultPage) Values() []Image { + if page.ilr.IsEmpty() { + return nil + } + return *page.ilr.Value +} + +// Creates a new instance of the ImageListResultPage type. +func NewImageListResultPage(cur ImageListResult, getNextPage func(context.Context, ImageListResult) (ImageListResult, error)) ImageListResultPage { + return ImageListResultPage{ + fn: getNextPage, + ilr: cur, + } +} + +// ImageOSDisk describes an Operating System disk. +type ImageOSDisk struct { + // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // OsState - The OS State. For managed images, use Generalized. Possible values include: 'Generalized', 'Specialized' + OsState OperatingSystemStateTypes `json:"osState,omitempty"` + // Snapshot - The snapshot. + Snapshot *SubResource `json:"snapshot,omitempty"` + // ManagedDisk - The managedDisk. + ManagedDisk *SubResource `json:"managedDisk,omitempty"` + // BlobURI - The Virtual Hard Disk. + BlobURI *string `json:"blobUri,omitempty"` + // Caching - Specifies the caching requirements.

Possible values are:

**None**

**ReadOnly**

**ReadWrite**

Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

This value cannot be larger than 1023 GB + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' + StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` +} + +// ImageProperties describes the properties of an Image. +type ImageProperties struct { + // SourceVirtualMachine - The source virtual machine from which Image is created. + SourceVirtualMachine *SubResource `json:"sourceVirtualMachine,omitempty"` + // StorageProfile - Specifies the storage settings for the virtual machine disks. + StorageProfile *ImageStorageProfile `json:"storageProfile,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state. + ProvisioningState *string `json:"provisioningState,omitempty"` + // HyperVGeneration - Specifies the HyperVGenerationType of the VirtualMachine created from the image. From API Version 2019-03-01 if the image source is a blob, then we need the user to specify the value, if the source is managed resource like disk or snapshot, we may require the user to specify the property if we cannot deduce it from the source managed resource. Possible values include: 'HyperVGenerationTypesV1', 'HyperVGenerationTypesV2' + HyperVGeneration HyperVGenerationTypes `json:"hyperVGeneration,omitempty"` +} + +// MarshalJSON is the custom marshaler for ImageProperties. +func (IP ImageProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if IP.SourceVirtualMachine != nil { + objectMap["sourceVirtualMachine"] = IP.SourceVirtualMachine + } + if IP.StorageProfile != nil { + objectMap["storageProfile"] = IP.StorageProfile + } + if IP.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = IP.HyperVGeneration + } + return json.Marshal(objectMap) +} + +// ImagePurchasePlan describes the gallery image definition purchase plan. This is used by marketplace +// images. +type ImagePurchasePlan struct { + // Name - The plan ID. + Name *string `json:"name,omitempty"` + // Publisher - The publisher ID. + Publisher *string `json:"publisher,omitempty"` + // Product - The product ID. + Product *string `json:"product,omitempty"` +} + +// ImageReference specifies information about the image to use. You can specify information about platform +// images, marketplace images, or virtual machine images. This element is required when you want to use a +// platform image, marketplace image, or virtual machine image, but is not used in other creation +// operations. NOTE: Image reference publisher and offer can only be set when you create the scale set. +type ImageReference struct { + // Publisher - The image publisher. + Publisher *string `json:"publisher,omitempty"` + // Offer - Specifies the offer of the platform image or marketplace image used to create the virtual machine. + Offer *string `json:"offer,omitempty"` + // Sku - The image SKU. + Sku *string `json:"sku,omitempty"` + // Version - Specifies the version of the platform image or marketplace image used to create the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to use the latest version of an image available at deploy time. Even if you use 'latest', the VM image will not automatically update after deploy time even if a new version becomes available. Please do not use field 'version' for gallery image deployment, gallery image should always use 'id' field for deployment, to use 'latest' version of gallery image, just set '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' in the 'id' field without version input. + Version *string `json:"version,omitempty"` + // ExactVersion - READ-ONLY; Specifies in decimal numbers, the version of platform image or marketplace image used to create the virtual machine. This readonly field differs from 'version', only if the value specified in 'version' field is 'latest'. + ExactVersion *string `json:"exactVersion,omitempty"` + // SharedGalleryImageID - Specified the shared gallery image unique id for vm deployment. This can be fetched from shared gallery image GET call. + SharedGalleryImageID *string `json:"sharedGalleryImageId,omitempty"` + // CommunityGalleryImageID - Specified the community gallery image unique id for vm deployment. This can be fetched from community gallery image GET call. + CommunityGalleryImageID *string `json:"communityGalleryImageId,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for ImageReference. +func (ir ImageReference) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ir.Publisher != nil { + objectMap["publisher"] = ir.Publisher + } + if ir.Offer != nil { + objectMap["offer"] = ir.Offer + } + if ir.Sku != nil { + objectMap["sku"] = ir.Sku + } + if ir.Version != nil { + objectMap["version"] = ir.Version + } + if ir.SharedGalleryImageID != nil { + objectMap["sharedGalleryImageId"] = ir.SharedGalleryImageID + } + if ir.CommunityGalleryImageID != nil { + objectMap["communityGalleryImageId"] = ir.CommunityGalleryImageID + } + if ir.ID != nil { + objectMap["id"] = ir.ID + } + return json.Marshal(objectMap) +} + +// ImagesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type ImagesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(ImagesClient) (Image, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *ImagesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for ImagesCreateOrUpdateFuture.Result. +func (future *ImagesCreateOrUpdateFuture) result(client ImagesClient) (i Image, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + i.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.ImagesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent { + i, err = client.CreateOrUpdateResponder(i.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request") + } + } + return +} + +// ImagesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +type ImagesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(ImagesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *ImagesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for ImagesDeleteFuture.Result. +func (future *ImagesDeleteFuture) result(client ImagesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.ImagesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// ImageStorageProfile describes a storage profile. +type ImageStorageProfile struct { + // OsDisk - Specifies information about the operating system disk used by the virtual machine.

For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + OsDisk *ImageOSDisk `json:"osDisk,omitempty"` + // DataDisks - Specifies the parameters that are used to add a data disk to a virtual machine.

For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + DataDisks *[]ImageDataDisk `json:"dataDisks,omitempty"` + // ZoneResilient - Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). + ZoneResilient *bool `json:"zoneResilient,omitempty"` +} + +// ImagesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation. +type ImagesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(ImagesClient) (Image, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *ImagesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for ImagesUpdateFuture.Result. +func (future *ImagesUpdateFuture) result(client ImagesClient) (i Image, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + i.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.ImagesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent { + i, err = client.UpdateResponder(i.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ImagesUpdateFuture", "Result", i.Response.Response, "Failure responding to request") + } + } + return +} + +// ImageUpdate the source user image virtual hard disk. Only tags may be updated. +type ImageUpdate struct { + *ImageProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ImageUpdate. +func (iu ImageUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if iu.ImageProperties != nil { + objectMap["properties"] = iu.ImageProperties + } + if iu.Tags != nil { + objectMap["tags"] = iu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ImageUpdate struct. +func (iu *ImageUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var imageProperties ImageProperties + err = json.Unmarshal(*v, &imageProperties) + if err != nil { + return err + } + iu.ImageProperties = &imageProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + iu.Tags = tags + } + } + } + + return nil +} + +// InnerError inner error details. +type InnerError struct { + // Exceptiontype - The exception type. + Exceptiontype *string `json:"exceptiontype,omitempty"` + // Errordetail - The internal error message or exception dump. + Errordetail *string `json:"errordetail,omitempty"` +} + +// InstanceSku the role instance SKU. +type InstanceSku struct { + // Name - READ-ONLY; The sku name. + Name *string `json:"name,omitempty"` + // Tier - READ-ONLY; The tier of the cloud service role instance. + Tier *string `json:"tier,omitempty"` +} + +// MarshalJSON is the custom marshaler for InstanceSku. +func (is InstanceSku) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// InstanceViewStatus instance view status. +type InstanceViewStatus struct { + // Code - The status code. + Code *string `json:"code,omitempty"` + // Level - The level code. Possible values include: 'Info', 'Warning', 'Error' + Level StatusLevelTypes `json:"level,omitempty"` + // DisplayStatus - The short localizable label for the status. + DisplayStatus *string `json:"displayStatus,omitempty"` + // Message - The detailed status message, including for alerts and error messages. + Message *string `json:"message,omitempty"` + // Time - The time of the status. + Time *date.Time `json:"time,omitempty"` +} + +// InstanceViewStatusesSummary instance view statuses. +type InstanceViewStatusesSummary struct { + // StatusesSummary - READ-ONLY; The summary. + StatusesSummary *[]StatusCodeCount `json:"statusesSummary,omitempty"` +} + +// MarshalJSON is the custom marshaler for InstanceViewStatusesSummary. +func (ivss InstanceViewStatusesSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// KeyForDiskEncryptionSet key Vault Key Url to be used for server side encryption of Managed Disks and +// Snapshots +type KeyForDiskEncryptionSet struct { + // SourceVault - Resource id of the KeyVault containing the key or secret. This property is optional and cannot be used if the KeyVault subscription is not the same as the Disk Encryption Set subscription. + SourceVault *SourceVault `json:"sourceVault,omitempty"` + // KeyURL - Fully versioned Key Url pointing to a key in KeyVault. Version segment of the Url is required regardless of rotationToLatestKeyVersionEnabled value. + KeyURL *string `json:"keyUrl,omitempty"` +} + +// KeyVaultAndKeyReference key Vault Key Url and vault id of KeK, KeK is optional and when provided is used +// to unwrap the encryptionKey +type KeyVaultAndKeyReference struct { + // SourceVault - Resource id of the KeyVault containing the key or secret + SourceVault *SourceVault `json:"sourceVault,omitempty"` + // KeyURL - Url pointing to a key or secret in KeyVault + KeyURL *string `json:"keyUrl,omitempty"` +} + +// KeyVaultAndSecretReference key Vault Secret Url and vault id of the encryption key +type KeyVaultAndSecretReference struct { + // SourceVault - Resource id of the KeyVault containing the key or secret + SourceVault *SourceVault `json:"sourceVault,omitempty"` + // SecretURL - Url pointing to a key or secret in KeyVault + SecretURL *string `json:"secretUrl,omitempty"` +} + +// KeyVaultKeyReference describes a reference to Key Vault Key +type KeyVaultKeyReference struct { + // KeyURL - The URL referencing a key encryption key in Key Vault. + KeyURL *string `json:"keyUrl,omitempty"` + // SourceVault - The relative URL of the Key Vault containing the key. + SourceVault *SubResource `json:"sourceVault,omitempty"` +} + +// KeyVaultSecretReference describes a reference to Key Vault Secret +type KeyVaultSecretReference struct { + // SecretURL - The URL referencing a secret in a Key Vault. + SecretURL *string `json:"secretUrl,omitempty"` + // SourceVault - The relative URL of the Key Vault containing the secret. + SourceVault *SubResource `json:"sourceVault,omitempty"` +} + +// LastPatchInstallationSummary describes the properties of the last installed patch summary. +type LastPatchInstallationSummary struct { + // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' + Status PatchOperationStatus `json:"status,omitempty"` + // InstallationActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. + InstallationActivityID *string `json:"installationActivityId,omitempty"` + // MaintenanceWindowExceeded - READ-ONLY; Describes whether the operation ran out of time before it completed all its intended actions + MaintenanceWindowExceeded *bool `json:"maintenanceWindowExceeded,omitempty"` + // NotSelectedPatchCount - READ-ONLY; The number of all available patches but not going to be installed because it didn't match a classification or inclusion list entry. + NotSelectedPatchCount *int32 `json:"notSelectedPatchCount,omitempty"` + // ExcludedPatchCount - READ-ONLY; The number of all available patches but excluded explicitly by a customer-specified exclusion list match. + ExcludedPatchCount *int32 `json:"excludedPatchCount,omitempty"` + // PendingPatchCount - READ-ONLY; The number of all available patches expected to be installed over the course of the patch installation operation. + PendingPatchCount *int32 `json:"pendingPatchCount,omitempty"` + // InstalledPatchCount - READ-ONLY; The count of patches that successfully installed. + InstalledPatchCount *int32 `json:"installedPatchCount,omitempty"` + // FailedPatchCount - READ-ONLY; The count of patches that failed installation. + FailedPatchCount *int32 `json:"failedPatchCount,omitempty"` + // StartTime - READ-ONLY; The UTC timestamp when the operation began. + StartTime *date.Time `json:"startTime,omitempty"` + // LastModifiedTime - READ-ONLY; The UTC timestamp when the operation began. + LastModifiedTime *date.Time `json:"lastModifiedTime,omitempty"` + // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. + Error *APIError `json:"error,omitempty"` +} + +// MarshalJSON is the custom marshaler for LastPatchInstallationSummary. +func (lpis LastPatchInstallationSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// LinuxConfiguration specifies the Linux operating system settings on the virtual machine.

For a +// list of supported Linux distributions, see [Linux on Azure-Endorsed +// Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). +type LinuxConfiguration struct { + // DisablePasswordAuthentication - Specifies whether password authentication should be disabled. + DisablePasswordAuthentication *bool `json:"disablePasswordAuthentication,omitempty"` + // SSH - Specifies the ssh key configuration for a Linux OS. + SSH *SSHConfiguration `json:"ssh,omitempty"` + // ProvisionVMAgent - Indicates whether virtual machine agent should be provisioned on the virtual machine.

When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later. + ProvisionVMAgent *bool `json:"provisionVMAgent,omitempty"` + // PatchSettings - [Preview Feature] Specifies settings related to VM Guest Patching on Linux. + PatchSettings *LinuxPatchSettings `json:"patchSettings,omitempty"` + // EnableVMAgentPlatformUpdates - Indicates whether VMAgent Platform Updates is enabled for the Linux virtual machine. Default value is false. + EnableVMAgentPlatformUpdates *bool `json:"enableVMAgentPlatformUpdates,omitempty"` +} + +// LinuxParameters input for InstallPatches on a Linux VM, as directly received by the API +type LinuxParameters struct { + // ClassificationsToInclude - The update classifications to select when installing patches for Linux. + ClassificationsToInclude *[]VMGuestPatchClassificationLinux `json:"classificationsToInclude,omitempty"` + // PackageNameMasksToInclude - packages to include in the patch operation. Format: packageName_packageVersion + PackageNameMasksToInclude *[]string `json:"packageNameMasksToInclude,omitempty"` + // PackageNameMasksToExclude - packages to exclude in the patch operation. Format: packageName_packageVersion + PackageNameMasksToExclude *[]string `json:"packageNameMasksToExclude,omitempty"` + // MaintenanceRunID - This is used as a maintenance run identifier for Auto VM Guest Patching in Linux. + MaintenanceRunID *string `json:"maintenanceRunId,omitempty"` +} + +// LinuxPatchSettings specifies settings related to VM Guest Patching on Linux. +type LinuxPatchSettings struct { + // PatchMode - Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual machines associated to virtual machine scale set with OrchestrationMode as Flexible.

Possible values are:

**ImageDefault** - The virtual machine's default patching configuration is used.

**AutomaticByPlatform** - The virtual machine will be automatically updated by the platform. The property provisionVMAgent must be true. Possible values include: 'LinuxVMGuestPatchModeImageDefault', 'LinuxVMGuestPatchModeAutomaticByPlatform' + PatchMode LinuxVMGuestPatchMode `json:"patchMode,omitempty"` + // AssessmentMode - Specifies the mode of VM Guest Patch Assessment for the IaaS virtual machine.

Possible values are:

**ImageDefault** - You control the timing of patch assessments on a virtual machine.

**AutomaticByPlatform** - The platform will trigger periodic patch assessments. The property provisionVMAgent must be true. Possible values include: 'ImageDefault', 'AutomaticByPlatform' + AssessmentMode LinuxPatchAssessmentMode `json:"assessmentMode,omitempty"` + // AutomaticByPlatformSettings - Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Linux. + AutomaticByPlatformSettings *LinuxVMGuestPatchAutomaticByPlatformSettings `json:"automaticByPlatformSettings,omitempty"` +} + +// LinuxVMGuestPatchAutomaticByPlatformSettings specifies additional settings to be applied when patch mode +// AutomaticByPlatform is selected in Linux patch settings. +type LinuxVMGuestPatchAutomaticByPlatformSettings struct { + // RebootSetting - Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Possible values include: 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways' + RebootSetting LinuxVMGuestPatchAutomaticByPlatformRebootSetting `json:"rebootSetting,omitempty"` +} + +// ListUsagesResult the List Usages operation response. +type ListUsagesResult struct { + autorest.Response `json:"-"` + // Value - The list of compute resource usages. + Value *[]Usage `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information. + NextLink *string `json:"nextLink,omitempty"` +} + +// ListUsagesResultIterator provides access to a complete listing of Usage values. +type ListUsagesResultIterator struct { + i int + page ListUsagesResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ListUsagesResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ListUsagesResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ListUsagesResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ListUsagesResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ListUsagesResultIterator) Response() ListUsagesResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ListUsagesResultIterator) Value() Usage { + if !iter.page.NotDone() { + return Usage{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ListUsagesResultIterator type. +func NewListUsagesResultIterator(page ListUsagesResultPage) ListUsagesResultIterator { + return ListUsagesResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (lur ListUsagesResult) IsEmpty() bool { + return lur.Value == nil || len(*lur.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (lur ListUsagesResult) hasNextLink() bool { + return lur.NextLink != nil && len(*lur.NextLink) != 0 +} + +// listUsagesResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (lur ListUsagesResult) listUsagesResultPreparer(ctx context.Context) (*http.Request, error) { + if !lur.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(lur.NextLink))) +} + +// ListUsagesResultPage contains a page of Usage values. +type ListUsagesResultPage struct { + fn func(context.Context, ListUsagesResult) (ListUsagesResult, error) + lur ListUsagesResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ListUsagesResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ListUsagesResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.lur) + if err != nil { + return err + } + page.lur = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ListUsagesResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ListUsagesResultPage) NotDone() bool { + return !page.lur.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ListUsagesResultPage) Response() ListUsagesResult { + return page.lur +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ListUsagesResultPage) Values() []Usage { + if page.lur.IsEmpty() { + return nil + } + return *page.lur.Value +} + +// Creates a new instance of the ListUsagesResultPage type. +func NewListUsagesResultPage(cur ListUsagesResult, getNextPage func(context.Context, ListUsagesResult) (ListUsagesResult, error)) ListUsagesResultPage { + return ListUsagesResultPage{ + fn: getNextPage, + lur: cur, + } +} + +// ListVirtualMachineExtensionImage ... +type ListVirtualMachineExtensionImage struct { + autorest.Response `json:"-"` + Value *[]VirtualMachineExtensionImage `json:"value,omitempty"` +} + +// ListVirtualMachineImageResource ... +type ListVirtualMachineImageResource struct { + autorest.Response `json:"-"` + Value *[]VirtualMachineImageResource `json:"value,omitempty"` +} + +// LoadBalancerConfiguration describes the load balancer configuration. +type LoadBalancerConfiguration struct { + // ID - Resource Id + ID *string `json:"id,omitempty"` + // Name - The name of the Load balancer + Name *string `json:"name,omitempty"` + // Properties - Properties of the load balancer configuration. + Properties *LoadBalancerConfigurationProperties `json:"properties,omitempty"` +} + +// LoadBalancerConfigurationProperties describes the properties of the load balancer configuration. +type LoadBalancerConfigurationProperties struct { + // FrontendIPConfigurations - Specifies the frontend IP to be used for the load balancer. Only IPv4 frontend IP address is supported. Each load balancer configuration must have exactly one frontend IP configuration. + FrontendIPConfigurations *[]LoadBalancerFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` +} + +// LoadBalancerFrontendIPConfiguration specifies the frontend IP to be used for the load balancer. Only +// IPv4 frontend IP address is supported. Each load balancer configuration must have exactly one frontend +// IP configuration. +type LoadBalancerFrontendIPConfiguration struct { + // Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource. + Name *string `json:"name,omitempty"` + // Properties - Properties of load balancer frontend ip configuration. + Properties *LoadBalancerFrontendIPConfigurationProperties `json:"properties,omitempty"` +} + +// LoadBalancerFrontendIPConfigurationProperties describes a cloud service IP Configuration +type LoadBalancerFrontendIPConfigurationProperties struct { + // PublicIPAddress - The reference to the public ip address resource. + PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` + // Subnet - The reference to the virtual network subnet resource. + Subnet *SubResource `json:"subnet,omitempty"` + // PrivateIPAddress - The virtual network private IP address of the IP configuration. + PrivateIPAddress *string `json:"privateIPAddress,omitempty"` +} + +// LogAnalyticsExportRequestRateByIntervalFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type LogAnalyticsExportRequestRateByIntervalFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LogAnalyticsClient) (LogAnalyticsOperationResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LogAnalyticsExportRequestRateByIntervalFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LogAnalyticsExportRequestRateByIntervalFuture.Result. +func (future *LogAnalyticsExportRequestRateByIntervalFuture) result(client LogAnalyticsClient) (laor LogAnalyticsOperationResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportRequestRateByIntervalFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + laor.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.LogAnalyticsExportRequestRateByIntervalFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if laor.Response.Response, err = future.GetResult(sender); err == nil && laor.Response.Response.StatusCode != http.StatusNoContent { + laor, err = client.ExportRequestRateByIntervalResponder(laor.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportRequestRateByIntervalFuture", "Result", laor.Response.Response, "Failure responding to request") + } + } + return +} + +// LogAnalyticsExportThrottledRequestsFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type LogAnalyticsExportThrottledRequestsFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LogAnalyticsClient) (LogAnalyticsOperationResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LogAnalyticsExportThrottledRequestsFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LogAnalyticsExportThrottledRequestsFuture.Result. +func (future *LogAnalyticsExportThrottledRequestsFuture) result(client LogAnalyticsClient) (laor LogAnalyticsOperationResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportThrottledRequestsFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + laor.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.LogAnalyticsExportThrottledRequestsFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if laor.Response.Response, err = future.GetResult(sender); err == nil && laor.Response.Response.StatusCode != http.StatusNoContent { + laor, err = client.ExportThrottledRequestsResponder(laor.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportThrottledRequestsFuture", "Result", laor.Response.Response, "Failure responding to request") + } + } + return +} + +// LogAnalyticsInputBase api input base class for LogAnalytics Api. +type LogAnalyticsInputBase struct { + // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. + BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` + // FromTime - From time of the query + FromTime *date.Time `json:"fromTime,omitempty"` + // ToTime - To time of the query + ToTime *date.Time `json:"toTime,omitempty"` + // GroupByThrottlePolicy - Group query result by Throttle Policy applied. + GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` + // GroupByOperationName - Group query result by Operation Name. + GroupByOperationName *bool `json:"groupByOperationName,omitempty"` + // GroupByResourceName - Group query result by Resource Name. + GroupByResourceName *bool `json:"groupByResourceName,omitempty"` + // GroupByClientApplicationID - Group query result by Client Application ID. + GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` + // GroupByUserAgent - Group query result by User Agent. + GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` +} + +// LogAnalyticsOperationResult logAnalytics operation status response +type LogAnalyticsOperationResult struct { + autorest.Response `json:"-"` + // Properties - READ-ONLY; LogAnalyticsOutput + Properties *LogAnalyticsOutput `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for LogAnalyticsOperationResult. +func (laor LogAnalyticsOperationResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// LogAnalyticsOutput logAnalytics output properties +type LogAnalyticsOutput struct { + // Output - READ-ONLY; Output file Uri path to blob container. + Output *string `json:"output,omitempty"` +} + +// MarshalJSON is the custom marshaler for LogAnalyticsOutput. +func (lao LogAnalyticsOutput) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// MaintenanceRedeployStatus maintenance Operation Status. +type MaintenanceRedeployStatus struct { + // IsCustomerInitiatedMaintenanceAllowed - True, if customer is allowed to perform Maintenance. + IsCustomerInitiatedMaintenanceAllowed *bool `json:"isCustomerInitiatedMaintenanceAllowed,omitempty"` + // PreMaintenanceWindowStartTime - Start Time for the Pre Maintenance Window. + PreMaintenanceWindowStartTime *date.Time `json:"preMaintenanceWindowStartTime,omitempty"` + // PreMaintenanceWindowEndTime - End Time for the Pre Maintenance Window. + PreMaintenanceWindowEndTime *date.Time `json:"preMaintenanceWindowEndTime,omitempty"` + // MaintenanceWindowStartTime - Start Time for the Maintenance Window. + MaintenanceWindowStartTime *date.Time `json:"maintenanceWindowStartTime,omitempty"` + // MaintenanceWindowEndTime - End Time for the Maintenance Window. + MaintenanceWindowEndTime *date.Time `json:"maintenanceWindowEndTime,omitempty"` + // LastOperationResultCode - The Last Maintenance Operation Result Code. Possible values include: 'MaintenanceOperationResultCodeTypesNone', 'MaintenanceOperationResultCodeTypesRetryLater', 'MaintenanceOperationResultCodeTypesMaintenanceAborted', 'MaintenanceOperationResultCodeTypesMaintenanceCompleted' + LastOperationResultCode MaintenanceOperationResultCodeTypes `json:"lastOperationResultCode,omitempty"` + // LastOperationMessage - Message returned for the last Maintenance Operation. + LastOperationMessage *string `json:"lastOperationMessage,omitempty"` +} + +// ManagedArtifact the managed artifact. +type ManagedArtifact struct { + // ID - The managed artifact id. + ID *string `json:"id,omitempty"` +} + +// ManagedDiskParameters the parameters of a managed disk. +type ManagedDiskParameters struct { + // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' + StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` + // SecurityProfile - Specifies the security profile for the managed disk. + SecurityProfile *VMDiskSecurityProfile `json:"securityProfile,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// NetworkInterfaceReference describes a network interface reference. +type NetworkInterfaceReference struct { + *NetworkInterfaceReferenceProperties `json:"properties,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for NetworkInterfaceReference. +func (nir NetworkInterfaceReference) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if nir.NetworkInterfaceReferenceProperties != nil { + objectMap["properties"] = nir.NetworkInterfaceReferenceProperties + } + if nir.ID != nil { + objectMap["id"] = nir.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for NetworkInterfaceReference struct. +func (nir *NetworkInterfaceReference) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var networkInterfaceReferenceProperties NetworkInterfaceReferenceProperties + err = json.Unmarshal(*v, &networkInterfaceReferenceProperties) + if err != nil { + return err + } + nir.NetworkInterfaceReferenceProperties = &networkInterfaceReferenceProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + nir.ID = &ID + } + } + } + + return nil +} + +// NetworkInterfaceReferenceProperties describes a network interface reference properties. +type NetworkInterfaceReferenceProperties struct { + // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. + Primary *bool `json:"primary,omitempty"` + // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` +} + +// NetworkProfile specifies the network interfaces or the networking configuration of the virtual machine. +type NetworkProfile struct { + // NetworkInterfaces - Specifies the list of resource Ids for the network interfaces associated with the virtual machine. + NetworkInterfaces *[]NetworkInterfaceReference `json:"networkInterfaces,omitempty"` + // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' + NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` + // NetworkInterfaceConfigurations - Specifies the networking configurations that will be used to create the virtual machine networking resources. + NetworkInterfaceConfigurations *[]VirtualMachineNetworkInterfaceConfiguration `json:"networkInterfaceConfigurations,omitempty"` +} + +// OperationListResult the List Compute Operation operation response. +type OperationListResult struct { + autorest.Response `json:"-"` + // Value - READ-ONLY; The list of compute operations + Value *[]OperationValue `json:"value,omitempty"` +} + +// MarshalJSON is the custom marshaler for OperationListResult. +func (olr OperationListResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// OperationValue describes the properties of a Compute Operation value. +type OperationValue struct { + // Origin - READ-ONLY; The origin of the compute operation. + Origin *string `json:"origin,omitempty"` + // Name - READ-ONLY; The name of the compute operation. + Name *string `json:"name,omitempty"` + *OperationValueDisplay `json:"display,omitempty"` +} + +// MarshalJSON is the custom marshaler for OperationValue. +func (ov OperationValue) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ov.OperationValueDisplay != nil { + objectMap["display"] = ov.OperationValueDisplay + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for OperationValue struct. +func (ov *OperationValue) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "origin": + if v != nil { + var origin string + err = json.Unmarshal(*v, &origin) + if err != nil { + return err + } + ov.Origin = &origin + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + ov.Name = &name + } + case "display": + if v != nil { + var operationValueDisplay OperationValueDisplay + err = json.Unmarshal(*v, &operationValueDisplay) + if err != nil { + return err + } + ov.OperationValueDisplay = &operationValueDisplay + } + } + } + + return nil +} + +// OperationValueDisplay describes the properties of a Compute Operation Value Display. +type OperationValueDisplay struct { + // Operation - READ-ONLY; The display name of the compute operation. + Operation *string `json:"operation,omitempty"` + // Resource - READ-ONLY; The display name of the resource the operation applies to. + Resource *string `json:"resource,omitempty"` + // Description - READ-ONLY; The description of the operation. + Description *string `json:"description,omitempty"` + // Provider - READ-ONLY; The resource provider for the operation. + Provider *string `json:"provider,omitempty"` +} + +// MarshalJSON is the custom marshaler for OperationValueDisplay. +func (ovd OperationValueDisplay) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// OrchestrationServiceStateInput the input for OrchestrationServiceState +type OrchestrationServiceStateInput struct { + // ServiceName - The name of the service. Possible values include: 'AutomaticRepairs' + ServiceName OrchestrationServiceNames `json:"serviceName,omitempty"` + // Action - The action to be performed. Possible values include: 'Resume', 'Suspend' + Action OrchestrationServiceStateAction `json:"action,omitempty"` +} + +// OrchestrationServiceSummary summary for an orchestration service of a virtual machine scale set. +type OrchestrationServiceSummary struct { + // ServiceName - READ-ONLY; The name of the service. Possible values include: 'AutomaticRepairs', 'DummyOrchestrationServiceName' + ServiceName OrchestrationServiceNames `json:"serviceName,omitempty"` + // ServiceState - READ-ONLY; The current state of the service. Possible values include: 'NotRunning', 'Running', 'Suspended' + ServiceState OrchestrationServiceState `json:"serviceState,omitempty"` +} + +// MarshalJSON is the custom marshaler for OrchestrationServiceSummary. +func (oss OrchestrationServiceSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// OSDisk specifies information about the operating system disk used by the virtual machine.

For +// more information about disks, see [About disks and VHDs for Azure virtual +// machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). +type OSDisk struct { + // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // EncryptionSettings - Specifies the encryption settings for the OS Disk.

Minimum api-version: 2015-06-15 + EncryptionSettings *DiskEncryptionSettings `json:"encryptionSettings,omitempty"` + // Name - The disk name. + Name *string `json:"name,omitempty"` + // Vhd - The virtual hard disk. + Vhd *VirtualHardDisk `json:"vhd,omitempty"` + // Image - The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. + Image *VirtualHardDisk `json:"image,omitempty"` + // Caching - Specifies the caching requirements.

Possible values are:

**None**

**ReadOnly**

**ReadWrite**

Default: **None** for Standard storage. **ReadOnly** for Premium storage. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. + WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` + // DiffDiskSettings - Specifies the ephemeral Disk Settings for the operating system disk used by the virtual machine. + DiffDiskSettings *DiffDiskSettings `json:"diffDiskSettings,omitempty"` + // CreateOption - Specifies how the virtual machine should be created.

Possible values are:

**Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.

**FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' + CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` + // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023 + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // ManagedDisk - The managed disk parameters. + ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` + // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VM deletion.

Possible values:

**Delete** If this value is used, the OS disk is deleted when VM is deleted.

**Detach** If this value is used, the os disk is retained after VM is deleted.

The default value is set to **detach**. For an ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' + DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` +} + +// OSDiskImage contains the os disk image information. +type OSDiskImage struct { + // OperatingSystem - The operating system of the osDiskImage. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OperatingSystem OperatingSystemTypes `json:"operatingSystem,omitempty"` +} + +// OSDiskImageEncryption contains encryption settings for an OS disk image. +type OSDiskImageEncryption struct { + // SecurityProfile - This property specifies the security profile of an OS disk image. + SecurityProfile *OSDiskImageSecurityProfile `json:"securityProfile,omitempty"` + // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. + DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` +} + +// OSDiskImageSecurityProfile contains security profile for an OS disk image. +type OSDiskImageSecurityProfile struct { + // ConfidentialVMEncryptionType - confidential VM encryption types. Possible values include: 'EncryptedVMGuestStateOnlyWithPmk', 'EncryptedWithPmk', 'EncryptedWithCmk' + ConfidentialVMEncryptionType ConfidentialVMEncryptionType `json:"confidentialVMEncryptionType,omitempty"` + // SecureVMDiskEncryptionSetID - secure VM disk encryption set id + SecureVMDiskEncryptionSetID *string `json:"secureVMDiskEncryptionSetId,omitempty"` +} + +// OSFamily describes a cloud service OS family. +type OSFamily struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - READ-ONLY; Resource location. + Location *string `json:"location,omitempty"` + Properties *OSFamilyProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for OSFamily. +func (of OSFamily) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if of.Properties != nil { + objectMap["properties"] = of.Properties + } + return json.Marshal(objectMap) +} + +// OSFamilyListResult the list operation result. +type OSFamilyListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]OSFamily `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// OSFamilyListResultIterator provides access to a complete listing of OSFamily values. +type OSFamilyListResultIterator struct { + i int + page OSFamilyListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *OSFamilyListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OSFamilyListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *OSFamilyListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter OSFamilyListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter OSFamilyListResultIterator) Response() OSFamilyListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter OSFamilyListResultIterator) Value() OSFamily { + if !iter.page.NotDone() { + return OSFamily{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the OSFamilyListResultIterator type. +func NewOSFamilyListResultIterator(page OSFamilyListResultPage) OSFamilyListResultIterator { + return OSFamilyListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (oflr OSFamilyListResult) IsEmpty() bool { + return oflr.Value == nil || len(*oflr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (oflr OSFamilyListResult) hasNextLink() bool { + return oflr.NextLink != nil && len(*oflr.NextLink) != 0 +} + +// oSFamilyListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (oflr OSFamilyListResult) oSFamilyListResultPreparer(ctx context.Context) (*http.Request, error) { + if !oflr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(oflr.NextLink))) +} + +// OSFamilyListResultPage contains a page of OSFamily values. +type OSFamilyListResultPage struct { + fn func(context.Context, OSFamilyListResult) (OSFamilyListResult, error) + oflr OSFamilyListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *OSFamilyListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OSFamilyListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.oflr) + if err != nil { + return err + } + page.oflr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *OSFamilyListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page OSFamilyListResultPage) NotDone() bool { + return !page.oflr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page OSFamilyListResultPage) Response() OSFamilyListResult { + return page.oflr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page OSFamilyListResultPage) Values() []OSFamily { + if page.oflr.IsEmpty() { + return nil + } + return *page.oflr.Value +} + +// Creates a new instance of the OSFamilyListResultPage type. +func NewOSFamilyListResultPage(cur OSFamilyListResult, getNextPage func(context.Context, OSFamilyListResult) (OSFamilyListResult, error)) OSFamilyListResultPage { + return OSFamilyListResultPage{ + fn: getNextPage, + oflr: cur, + } +} + +// OSFamilyProperties OS family properties. +type OSFamilyProperties struct { + // Name - READ-ONLY; The OS family name. + Name *string `json:"name,omitempty"` + // Label - READ-ONLY; The OS family label. + Label *string `json:"label,omitempty"` + // Versions - READ-ONLY; List of OS versions belonging to this family. + Versions *[]OSVersionPropertiesBase `json:"versions,omitempty"` +} + +// MarshalJSON is the custom marshaler for OSFamilyProperties. +func (ofp OSFamilyProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// OSProfile specifies the operating system settings for the virtual machine. Some of the settings cannot +// be changed once VM is provisioned. +type OSProfile struct { + // ComputerName - Specifies the host OS name of the virtual machine.

This name cannot be updated after the VM is created.

**Max-length (Windows):** 15 characters

**Max-length (Linux):** 64 characters.

For naming conventions and restrictions see [Azure infrastructure services implementation guidelines](https://docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules). + ComputerName *string `json:"computerName,omitempty"` + // AdminUsername - Specifies the name of the administrator account.

This property cannot be updated after the VM is created.

**Windows-only restriction:** Cannot end in "."

**Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".

**Minimum-length (Linux):** 1 character

**Max-length (Linux):** 64 characters

**Max-length (Windows):** 20 characters. + AdminUsername *string `json:"adminUsername,omitempty"` + // AdminPassword - Specifies the password of the administrator account.

**Minimum-length (Windows):** 8 characters

**Minimum-length (Linux):** 6 characters

**Max-length (Windows):** 123 characters

**Max-length (Linux):** 72 characters

**Complexity requirements:** 3 out of 4 conditions below need to be fulfilled
Has lower characters
Has upper characters
Has a digit
Has a special character (Regex match [\W_])

**Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!"

For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/reset-rdp)

For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/troubleshoot-ssh-connection) + AdminPassword *string `json:"adminPassword,omitempty"` + // CustomData - Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes.

**Note: Do not pass any secrets or passwords in customData property**

This property cannot be updated after the VM is created.

customData is passed to the VM to be saved as a file, for more information see [Custom Data on Azure VMs](https://azure.microsoft.com/blog/custom-data-and-cloud-init-on-windows-azure/)

For using cloud-init for your Linux VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/linux/using-cloud-init) + CustomData *string `json:"customData,omitempty"` + // WindowsConfiguration - Specifies Windows operating system settings on the virtual machine. + WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` + // LinuxConfiguration - Specifies the Linux operating system settings on the virtual machine.

For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). + LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` + // Secrets - Specifies set of certificates that should be installed onto the virtual machine. To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). + Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` + // AllowExtensionOperations - Specifies whether extension operations should be allowed on the virtual machine.

This may only be set to False when no extensions are present on the virtual machine. + AllowExtensionOperations *bool `json:"allowExtensionOperations,omitempty"` + // RequireGuestProvisionSignal - Optional property which must either be set to True or omitted. + RequireGuestProvisionSignal *bool `json:"requireGuestProvisionSignal,omitempty"` +} + +// OSVersion describes a cloud service OS version. +type OSVersion struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - READ-ONLY; Resource location. + Location *string `json:"location,omitempty"` + Properties *OSVersionProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for OSVersion. +func (ov OSVersion) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ov.Properties != nil { + objectMap["properties"] = ov.Properties + } + return json.Marshal(objectMap) +} + +// OSVersionListResult the list operation result. +type OSVersionListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]OSVersion `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// OSVersionListResultIterator provides access to a complete listing of OSVersion values. +type OSVersionListResultIterator struct { + i int + page OSVersionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *OSVersionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OSVersionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *OSVersionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter OSVersionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter OSVersionListResultIterator) Response() OSVersionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter OSVersionListResultIterator) Value() OSVersion { + if !iter.page.NotDone() { + return OSVersion{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the OSVersionListResultIterator type. +func NewOSVersionListResultIterator(page OSVersionListResultPage) OSVersionListResultIterator { + return OSVersionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (ovlr OSVersionListResult) IsEmpty() bool { + return ovlr.Value == nil || len(*ovlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (ovlr OSVersionListResult) hasNextLink() bool { + return ovlr.NextLink != nil && len(*ovlr.NextLink) != 0 +} + +// oSVersionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (ovlr OSVersionListResult) oSVersionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !ovlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(ovlr.NextLink))) +} + +// OSVersionListResultPage contains a page of OSVersion values. +type OSVersionListResultPage struct { + fn func(context.Context, OSVersionListResult) (OSVersionListResult, error) + ovlr OSVersionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *OSVersionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OSVersionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.ovlr) + if err != nil { + return err + } + page.ovlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *OSVersionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page OSVersionListResultPage) NotDone() bool { + return !page.ovlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page OSVersionListResultPage) Response() OSVersionListResult { + return page.ovlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page OSVersionListResultPage) Values() []OSVersion { + if page.ovlr.IsEmpty() { + return nil + } + return *page.ovlr.Value +} + +// Creates a new instance of the OSVersionListResultPage type. +func NewOSVersionListResultPage(cur OSVersionListResult, getNextPage func(context.Context, OSVersionListResult) (OSVersionListResult, error)) OSVersionListResultPage { + return OSVersionListResultPage{ + fn: getNextPage, + ovlr: cur, + } +} + +// OSVersionProperties OS version properties. +type OSVersionProperties struct { + // Family - READ-ONLY; The family of this OS version. + Family *string `json:"family,omitempty"` + // FamilyLabel - READ-ONLY; The family label of this OS version. + FamilyLabel *string `json:"familyLabel,omitempty"` + // Version - READ-ONLY; The OS version. + Version *string `json:"version,omitempty"` + // Label - READ-ONLY; The OS version label. + Label *string `json:"label,omitempty"` + // IsDefault - READ-ONLY; Specifies whether this is the default OS version for its family. + IsDefault *bool `json:"isDefault,omitempty"` + // IsActive - READ-ONLY; Specifies whether this OS version is active. + IsActive *bool `json:"isActive,omitempty"` +} + +// MarshalJSON is the custom marshaler for OSVersionProperties. +func (ovp OSVersionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// OSVersionPropertiesBase configuration view of an OS version. +type OSVersionPropertiesBase struct { + // Version - READ-ONLY; The OS version. + Version *string `json:"version,omitempty"` + // Label - READ-ONLY; The OS version label. + Label *string `json:"label,omitempty"` + // IsDefault - READ-ONLY; Specifies whether this is the default OS version for its family. + IsDefault *bool `json:"isDefault,omitempty"` + // IsActive - READ-ONLY; Specifies whether this OS version is active. + IsActive *bool `json:"isActive,omitempty"` +} + +// MarshalJSON is the custom marshaler for OSVersionPropertiesBase. +func (ovpb OSVersionPropertiesBase) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PatchInstallationDetail information about a specific patch that was encountered during an installation +// action. +type PatchInstallationDetail struct { + // PatchID - READ-ONLY; A unique identifier for the patch. + PatchID *string `json:"patchId,omitempty"` + // Name - READ-ONLY; The friendly name of the patch. + Name *string `json:"name,omitempty"` + // Version - READ-ONLY; The version string of the package. It may conform to Semantic Versioning. Only applies to Linux. + Version *string `json:"version,omitempty"` + // KbID - READ-ONLY; The KBID of the patch. Only applies to Windows patches. + KbID *string `json:"kbId,omitempty"` + // Classifications - READ-ONLY; The classification(s) of the patch as provided by the patch publisher. + Classifications *[]string `json:"classifications,omitempty"` + // InstallationState - READ-ONLY; The state of the patch after the installation operation completed. Possible values include: 'PatchInstallationStateUnknown', 'PatchInstallationStateInstalled', 'PatchInstallationStateFailed', 'PatchInstallationStateExcluded', 'PatchInstallationStateNotSelected', 'PatchInstallationStatePending' + InstallationState PatchInstallationState `json:"installationState,omitempty"` +} + +// MarshalJSON is the custom marshaler for PatchInstallationDetail. +func (pid PatchInstallationDetail) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PatchSettings specifies settings related to VM Guest Patching on Windows. +type PatchSettings struct { + // PatchMode - Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual machines associated to virtual machine scale set with OrchestrationMode as Flexible.

Possible values are:

**Manual** - You control the application of patches to a virtual machine. You do this by applying patches manually inside the VM. In this mode, automatic updates are disabled; the property WindowsConfiguration.enableAutomaticUpdates must be false

**AutomaticByOS** - The virtual machine will automatically be updated by the OS. The property WindowsConfiguration.enableAutomaticUpdates must be true.

**AutomaticByPlatform** - the virtual machine will automatically updated by the platform. The properties provisionVMAgent and WindowsConfiguration.enableAutomaticUpdates must be true. Possible values include: 'WindowsVMGuestPatchModeManual', 'WindowsVMGuestPatchModeAutomaticByOS', 'WindowsVMGuestPatchModeAutomaticByPlatform' + PatchMode WindowsVMGuestPatchMode `json:"patchMode,omitempty"` + // EnableHotpatching - Enables customers to patch their Azure VMs without requiring a reboot. For enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode' must be set to 'AutomaticByPlatform'. + EnableHotpatching *bool `json:"enableHotpatching,omitempty"` + // AssessmentMode - Specifies the mode of VM Guest patch assessment for the IaaS virtual machine.

Possible values are:

**ImageDefault** - You control the timing of patch assessments on a virtual machine.

**AutomaticByPlatform** - The platform will trigger periodic patch assessments. The property provisionVMAgent must be true. Possible values include: 'WindowsPatchAssessmentModeImageDefault', 'WindowsPatchAssessmentModeAutomaticByPlatform' + AssessmentMode WindowsPatchAssessmentMode `json:"assessmentMode,omitempty"` + // AutomaticByPlatformSettings - Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Windows. + AutomaticByPlatformSettings *WindowsVMGuestPatchAutomaticByPlatformSettings `json:"automaticByPlatformSettings,omitempty"` +} + +// PirCommunityGalleryResource base information about the community gallery resource in pir. +type PirCommunityGalleryResource struct { + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *CommunityGalleryIdentifier `json:"identifier,omitempty"` +} + +// MarshalJSON is the custom marshaler for PirCommunityGalleryResource. +func (pcgr PirCommunityGalleryResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if pcgr.CommunityGalleryIdentifier != nil { + objectMap["identifier"] = pcgr.CommunityGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for PirCommunityGalleryResource struct. +func (pcgr *PirCommunityGalleryResource) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + pcgr.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + pcgr.Location = &location + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + pcgr.Type = &typeVar + } + case "identifier": + if v != nil { + var communityGalleryIdentifier CommunityGalleryIdentifier + err = json.Unmarshal(*v, &communityGalleryIdentifier) + if err != nil { + return err + } + pcgr.CommunityGalleryIdentifier = &communityGalleryIdentifier + } + } + } + + return nil +} + +// PirResource the Resource model definition. +type PirResource struct { + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for PirResource. +func (pr PirResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PirSharedGalleryResource base information about the shared gallery resource in pir. +type PirSharedGalleryResource struct { + *SharedGalleryIdentifier `json:"identifier,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for PirSharedGalleryResource. +func (psgr PirSharedGalleryResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if psgr.SharedGalleryIdentifier != nil { + objectMap["identifier"] = psgr.SharedGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for PirSharedGalleryResource struct. +func (psgr *PirSharedGalleryResource) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "identifier": + if v != nil { + var sharedGalleryIdentifier SharedGalleryIdentifier + err = json.Unmarshal(*v, &sharedGalleryIdentifier) + if err != nil { + return err + } + psgr.SharedGalleryIdentifier = &sharedGalleryIdentifier + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + psgr.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + psgr.Location = &location + } + } + } + + return nil +} + +// Plan specifies information about the marketplace image used to create the virtual machine. This element +// is only used for marketplace images. Before you can use a marketplace image from an API, you must enable +// the image for programmatic use. In the Azure portal, find the marketplace image that you want to use +// and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and +// then click **Save**. +type Plan struct { + // Name - The plan ID. + Name *string `json:"name,omitempty"` + // Publisher - The publisher ID. + Publisher *string `json:"publisher,omitempty"` + // Product - Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element. + Product *string `json:"product,omitempty"` + // PromotionCode - The promotion code. + PromotionCode *string `json:"promotionCode,omitempty"` +} + +// PriorityMixPolicy specifies the target splits for Spot and Regular priority VMs within a scale set with +// flexible orchestration mode.

With this property the customer is able to specify the base number +// of regular priority VMs created as the VMSS flex instance scales out and the split between Spot and +// Regular priority VMs after this base target has been reached. +type PriorityMixPolicy struct { + // BaseRegularPriorityCount - The base number of regular priority VMs that will be created in this scale set as it scales out. + BaseRegularPriorityCount *int32 `json:"baseRegularPriorityCount,omitempty"` + // RegularPriorityPercentageAboveBase - The percentage of VM instances, after the base regular priority count has been reached, that are expected to use regular priority. + RegularPriorityPercentageAboveBase *int32 `json:"regularPriorityPercentageAboveBase,omitempty"` +} + +// PrivateEndpoint the Private Endpoint resource. +type PrivateEndpoint struct { + // ID - READ-ONLY; The ARM identifier for Private Endpoint + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for PrivateEndpoint. +func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PrivateEndpointConnection the Private Endpoint Connection resource. +type PrivateEndpointConnection struct { + autorest.Response `json:"-"` + // PrivateEndpointConnectionProperties - Resource properties. + *PrivateEndpointConnectionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; private endpoint connection Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; private endpoint connection name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; private endpoint connection type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for PrivateEndpointConnection. +func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if pec.PrivateEndpointConnectionProperties != nil { + objectMap["properties"] = pec.PrivateEndpointConnectionProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct. +func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var privateEndpointConnectionProperties PrivateEndpointConnectionProperties + err = json.Unmarshal(*v, &privateEndpointConnectionProperties) + if err != nil { + return err + } + pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + pec.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + pec.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + pec.Type = &typeVar + } + } + } + + return nil +} + +// PrivateEndpointConnectionListResult a list of private link resources +type PrivateEndpointConnectionListResult struct { + autorest.Response `json:"-"` + // Value - Array of private endpoint connections + Value *[]PrivateEndpointConnection `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of snapshots. Call ListNext() with this to fetch the next page of snapshots. + NextLink *string `json:"nextLink,omitempty"` +} + +// PrivateEndpointConnectionListResultIterator provides access to a complete listing of +// PrivateEndpointConnection values. +type PrivateEndpointConnectionListResultIterator struct { + i int + page PrivateEndpointConnectionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *PrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *PrivateEndpointConnectionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter PrivateEndpointConnectionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter PrivateEndpointConnectionListResultIterator) Response() PrivateEndpointConnectionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter PrivateEndpointConnectionListResultIterator) Value() PrivateEndpointConnection { + if !iter.page.NotDone() { + return PrivateEndpointConnection{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the PrivateEndpointConnectionListResultIterator type. +func NewPrivateEndpointConnectionListResultIterator(page PrivateEndpointConnectionListResultPage) PrivateEndpointConnectionListResultIterator { + return PrivateEndpointConnectionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (peclr PrivateEndpointConnectionListResult) IsEmpty() bool { + return peclr.Value == nil || len(*peclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (peclr PrivateEndpointConnectionListResult) hasNextLink() bool { + return peclr.NextLink != nil && len(*peclr.NextLink) != 0 +} + +// privateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (peclr PrivateEndpointConnectionListResult) privateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !peclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(peclr.NextLink))) +} + +// PrivateEndpointConnectionListResultPage contains a page of PrivateEndpointConnection values. +type PrivateEndpointConnectionListResultPage struct { + fn func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error) + peclr PrivateEndpointConnectionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *PrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.peclr) + if err != nil { + return err + } + page.peclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *PrivateEndpointConnectionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page PrivateEndpointConnectionListResultPage) NotDone() bool { + return !page.peclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page PrivateEndpointConnectionListResultPage) Response() PrivateEndpointConnectionListResult { + return page.peclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page PrivateEndpointConnectionListResultPage) Values() []PrivateEndpointConnection { + if page.peclr.IsEmpty() { + return nil + } + return *page.peclr.Value +} + +// Creates a new instance of the PrivateEndpointConnectionListResultPage type. +func NewPrivateEndpointConnectionListResultPage(cur PrivateEndpointConnectionListResult, getNextPage func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)) PrivateEndpointConnectionListResultPage { + return PrivateEndpointConnectionListResultPage{ + fn: getNextPage, + peclr: cur, + } +} + +// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties. +type PrivateEndpointConnectionProperties struct { + // PrivateEndpoint - READ-ONLY; The resource of private end point. + PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"` + // PrivateLinkServiceConnectionState - A collection of information about the state of the connection between DiskAccess and Virtual Network. + PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"` + // ProvisioningState - The provisioning state of the private endpoint connection resource. Possible values include: 'PrivateEndpointConnectionProvisioningStateSucceeded', 'PrivateEndpointConnectionProvisioningStateCreating', 'PrivateEndpointConnectionProvisioningStateDeleting', 'PrivateEndpointConnectionProvisioningStateFailed' + ProvisioningState PrivateEndpointConnectionProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for PrivateEndpointConnectionProperties. +func (pecp PrivateEndpointConnectionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if pecp.PrivateLinkServiceConnectionState != nil { + objectMap["privateLinkServiceConnectionState"] = pecp.PrivateLinkServiceConnectionState + } + if pecp.ProvisioningState != "" { + objectMap["provisioningState"] = pecp.ProvisioningState + } + return json.Marshal(objectMap) +} + +// PrivateLinkResource a private link resource +type PrivateLinkResource struct { + // PrivateLinkResourceProperties - Resource properties. + *PrivateLinkResourceProperties `json:"properties,omitempty"` + // ID - READ-ONLY; private link resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; private link resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; private link resource type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for PrivateLinkResource. +func (plr PrivateLinkResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if plr.PrivateLinkResourceProperties != nil { + objectMap["properties"] = plr.PrivateLinkResourceProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for PrivateLinkResource struct. +func (plr *PrivateLinkResource) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var privateLinkResourceProperties PrivateLinkResourceProperties + err = json.Unmarshal(*v, &privateLinkResourceProperties) + if err != nil { + return err + } + plr.PrivateLinkResourceProperties = &privateLinkResourceProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + plr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + plr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + plr.Type = &typeVar + } + } + } + + return nil +} + +// PrivateLinkResourceListResult a list of private link resources +type PrivateLinkResourceListResult struct { + autorest.Response `json:"-"` + // Value - Array of private link resources + Value *[]PrivateLinkResource `json:"value,omitempty"` +} + +// PrivateLinkResourceProperties properties of a private link resource. +type PrivateLinkResourceProperties struct { + // GroupID - READ-ONLY; The private link resource group id. + GroupID *string `json:"groupId,omitempty"` + // RequiredMembers - READ-ONLY; The private link resource required member names. + RequiredMembers *[]string `json:"requiredMembers,omitempty"` + // RequiredZoneNames - The private link resource DNS zone name. + RequiredZoneNames *[]string `json:"requiredZoneNames,omitempty"` +} + +// MarshalJSON is the custom marshaler for PrivateLinkResourceProperties. +func (plrp PrivateLinkResourceProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if plrp.RequiredZoneNames != nil { + objectMap["requiredZoneNames"] = plrp.RequiredZoneNames + } + return json.Marshal(objectMap) +} + +// PrivateLinkServiceConnectionState a collection of information about the state of the connection between +// service consumer and provider. +type PrivateLinkServiceConnectionState struct { + // Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service. Possible values include: 'Pending', 'Approved', 'Rejected' + Status PrivateEndpointServiceConnectionStatus `json:"status,omitempty"` + // Description - The reason for approval/rejection of the connection. + Description *string `json:"description,omitempty"` + // ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer. + ActionsRequired *string `json:"actionsRequired,omitempty"` +} + +// PropertyUpdatesInProgress properties of the disk for which update is pending. +type PropertyUpdatesInProgress struct { + // TargetTier - The target performance tier of the disk if a tier change operation is in progress. + TargetTier *string `json:"targetTier,omitempty"` +} + +// ProximityPlacementGroup specifies information about the proximity placement group. +type ProximityPlacementGroup struct { + autorest.Response `json:"-"` + // ProximityPlacementGroupProperties - Describes the properties of a Proximity Placement Group. + *ProximityPlacementGroupProperties `json:"properties,omitempty"` + // Zones - Specifies the Availability Zone where virtual machine, virtual machine scale set or availability set associated with the proximity placement group can be created. + Zones *[]string `json:"zones,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ProximityPlacementGroup. +func (ppg ProximityPlacementGroup) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ppg.ProximityPlacementGroupProperties != nil { + objectMap["properties"] = ppg.ProximityPlacementGroupProperties + } + if ppg.Zones != nil { + objectMap["zones"] = ppg.Zones + } + if ppg.Location != nil { + objectMap["location"] = ppg.Location + } + if ppg.Tags != nil { + objectMap["tags"] = ppg.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ProximityPlacementGroup struct. +func (ppg *ProximityPlacementGroup) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var proximityPlacementGroupProperties ProximityPlacementGroupProperties + err = json.Unmarshal(*v, &proximityPlacementGroupProperties) + if err != nil { + return err + } + ppg.ProximityPlacementGroupProperties = &proximityPlacementGroupProperties + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + ppg.Zones = &zones + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + ppg.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + ppg.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + ppg.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + ppg.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + ppg.Tags = tags + } + } + } + + return nil +} + +// ProximityPlacementGroupListResult the List Proximity Placement Group operation response. +type ProximityPlacementGroupListResult struct { + autorest.Response `json:"-"` + // Value - The list of proximity placement groups + Value *[]ProximityPlacementGroup `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of proximity placement groups. + NextLink *string `json:"nextLink,omitempty"` +} + +// ProximityPlacementGroupListResultIterator provides access to a complete listing of +// ProximityPlacementGroup values. +type ProximityPlacementGroupListResultIterator struct { + i int + page ProximityPlacementGroupListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ProximityPlacementGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ProximityPlacementGroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ProximityPlacementGroupListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ProximityPlacementGroupListResultIterator) Response() ProximityPlacementGroupListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ProximityPlacementGroupListResultIterator) Value() ProximityPlacementGroup { + if !iter.page.NotDone() { + return ProximityPlacementGroup{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ProximityPlacementGroupListResultIterator type. +func NewProximityPlacementGroupListResultIterator(page ProximityPlacementGroupListResultPage) ProximityPlacementGroupListResultIterator { + return ProximityPlacementGroupListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (ppglr ProximityPlacementGroupListResult) IsEmpty() bool { + return ppglr.Value == nil || len(*ppglr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (ppglr ProximityPlacementGroupListResult) hasNextLink() bool { + return ppglr.NextLink != nil && len(*ppglr.NextLink) != 0 +} + +// proximityPlacementGroupListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (ppglr ProximityPlacementGroupListResult) proximityPlacementGroupListResultPreparer(ctx context.Context) (*http.Request, error) { + if !ppglr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(ppglr.NextLink))) +} + +// ProximityPlacementGroupListResultPage contains a page of ProximityPlacementGroup values. +type ProximityPlacementGroupListResultPage struct { + fn func(context.Context, ProximityPlacementGroupListResult) (ProximityPlacementGroupListResult, error) + ppglr ProximityPlacementGroupListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ProximityPlacementGroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.ppglr) + if err != nil { + return err + } + page.ppglr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ProximityPlacementGroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ProximityPlacementGroupListResultPage) NotDone() bool { + return !page.ppglr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ProximityPlacementGroupListResultPage) Response() ProximityPlacementGroupListResult { + return page.ppglr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ProximityPlacementGroupListResultPage) Values() []ProximityPlacementGroup { + if page.ppglr.IsEmpty() { + return nil + } + return *page.ppglr.Value +} + +// Creates a new instance of the ProximityPlacementGroupListResultPage type. +func NewProximityPlacementGroupListResultPage(cur ProximityPlacementGroupListResult, getNextPage func(context.Context, ProximityPlacementGroupListResult) (ProximityPlacementGroupListResult, error)) ProximityPlacementGroupListResultPage { + return ProximityPlacementGroupListResultPage{ + fn: getNextPage, + ppglr: cur, + } +} + +// ProximityPlacementGroupProperties describes the properties of a Proximity Placement Group. +type ProximityPlacementGroupProperties struct { + // ProximityPlacementGroupType - Specifies the type of the proximity placement group.

Possible values are:

**Standard** : Co-locate resources within an Azure region or Availability Zone.

**Ultra** : For future use. Possible values include: 'Standard', 'Ultra' + ProximityPlacementGroupType ProximityPlacementGroupType `json:"proximityPlacementGroupType,omitempty"` + // VirtualMachines - READ-ONLY; A list of references to all virtual machines in the proximity placement group. + VirtualMachines *[]SubResourceWithColocationStatus `json:"virtualMachines,omitempty"` + // VirtualMachineScaleSets - READ-ONLY; A list of references to all virtual machine scale sets in the proximity placement group. + VirtualMachineScaleSets *[]SubResourceWithColocationStatus `json:"virtualMachineScaleSets,omitempty"` + // AvailabilitySets - READ-ONLY; A list of references to all availability sets in the proximity placement group. + AvailabilitySets *[]SubResourceWithColocationStatus `json:"availabilitySets,omitempty"` + // ColocationStatus - Describes colocation status of the Proximity Placement Group. + ColocationStatus *InstanceViewStatus `json:"colocationStatus,omitempty"` + // Intent - Specifies the user intent of the proximity placement group. + Intent *ProximityPlacementGroupPropertiesIntent `json:"intent,omitempty"` +} + +// MarshalJSON is the custom marshaler for ProximityPlacementGroupProperties. +func (ppgp ProximityPlacementGroupProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ppgp.ProximityPlacementGroupType != "" { + objectMap["proximityPlacementGroupType"] = ppgp.ProximityPlacementGroupType + } + if ppgp.ColocationStatus != nil { + objectMap["colocationStatus"] = ppgp.ColocationStatus + } + if ppgp.Intent != nil { + objectMap["intent"] = ppgp.Intent + } + return json.Marshal(objectMap) +} + +// ProximityPlacementGroupPropertiesIntent specifies the user intent of the proximity placement group. +type ProximityPlacementGroupPropertiesIntent struct { + // VMSizes - Specifies possible sizes of virtual machines that can be created in the proximity placement group. + VMSizes *[]string `json:"vmSizes,omitempty"` +} + +// ProximityPlacementGroupUpdate specifies information about the proximity placement group. +type ProximityPlacementGroupUpdate struct { + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ProximityPlacementGroupUpdate. +func (ppgu ProximityPlacementGroupUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ppgu.Tags != nil { + objectMap["tags"] = ppgu.Tags + } + return json.Marshal(objectMap) +} + +// ProxyOnlyResource the ProxyOnly Resource model definition. +type ProxyOnlyResource struct { + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for ProxyOnlyResource. +func (por ProxyOnlyResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ProxyResource the resource model definition for an Azure Resource Manager proxy resource. It will not +// have tags and a location +type ProxyResource struct { + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for ProxyResource. +func (pr ProxyResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PublicIPAddressSku describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. +type PublicIPAddressSku struct { + // Name - Specify public IP sku name. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard' + Name PublicIPAddressSkuName `json:"name,omitempty"` + // Tier - Specify public IP sku tier. Possible values include: 'Regional', 'Global' + Tier PublicIPAddressSkuTier `json:"tier,omitempty"` +} + +// PurchasePlan used for establishing the purchase context of any 3rd Party artifact through MarketPlace. +type PurchasePlan struct { + // Publisher - The publisher ID. + Publisher *string `json:"publisher,omitempty"` + // Name - The plan ID. + Name *string `json:"name,omitempty"` + // Product - Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element. + Product *string `json:"product,omitempty"` + // PromotionCode - The Offer Promotion Code. + PromotionCode *string `json:"promotionCode,omitempty"` +} + +// ReadCloser ... +type ReadCloser struct { + autorest.Response `json:"-"` + Value *io.ReadCloser `json:"value,omitempty"` +} + +// RecommendedMachineConfiguration the properties describe the recommended machine configuration for this +// Image Definition. These properties are updatable. +type RecommendedMachineConfiguration struct { + VCPUs *ResourceRange `json:"vCPUs,omitempty"` + Memory *ResourceRange `json:"memory,omitempty"` +} + +// RecoveryWalkResponse response after calling a manual recovery walk +type RecoveryWalkResponse struct { + autorest.Response `json:"-"` + // WalkPerformed - READ-ONLY; Whether the recovery walk was performed + WalkPerformed *bool `json:"walkPerformed,omitempty"` + // NextPlatformUpdateDomain - READ-ONLY; The next update domain that needs to be walked. Null means walk spanning all update domains has been completed + NextPlatformUpdateDomain *int32 `json:"nextPlatformUpdateDomain,omitempty"` +} + +// MarshalJSON is the custom marshaler for RecoveryWalkResponse. +func (rwr RecoveryWalkResponse) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RegionalReplicationStatus this is the regional replication status. +type RegionalReplicationStatus struct { + // Region - READ-ONLY; The region to which the gallery image version is being replicated to. + Region *string `json:"region,omitempty"` + // State - READ-ONLY; This is the regional replication state. Possible values include: 'ReplicationStateUnknown', 'ReplicationStateReplicating', 'ReplicationStateCompleted', 'ReplicationStateFailed' + State ReplicationState `json:"state,omitempty"` + // Details - READ-ONLY; The details of the replication status. + Details *string `json:"details,omitempty"` + // Progress - READ-ONLY; It indicates progress of the replication job. + Progress *int32 `json:"progress,omitempty"` +} + +// MarshalJSON is the custom marshaler for RegionalReplicationStatus. +func (rrs RegionalReplicationStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RegionalSharingStatus gallery regional sharing status +type RegionalSharingStatus struct { + // Region - Region name + Region *string `json:"region,omitempty"` + // State - Gallery sharing state in current region. Possible values include: 'SharingStateSucceeded', 'SharingStateInProgress', 'SharingStateFailed', 'SharingStateUnknown' + State SharingState `json:"state,omitempty"` + // Details - Details of gallery regional sharing failure. + Details *string `json:"details,omitempty"` +} + +// ReplicationStatus this is the replication status of the gallery image version. +type ReplicationStatus struct { + // AggregatedState - READ-ONLY; This is the aggregated replication status based on all the regional replication status flags. Possible values include: 'Unknown', 'InProgress', 'Completed', 'Failed' + AggregatedState AggregatedReplicationState `json:"aggregatedState,omitempty"` + // Summary - READ-ONLY; This is a summary of replication status for each region. + Summary *[]RegionalReplicationStatus `json:"summary,omitempty"` +} + +// MarshalJSON is the custom marshaler for ReplicationStatus. +func (rs ReplicationStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RequestRateByIntervalInput api request input for LogAnalytics getRequestRateByInterval Api. +type RequestRateByIntervalInput struct { + // IntervalLength - Interval value in minutes used to create LogAnalytics call rate logs. Possible values include: 'ThreeMins', 'FiveMins', 'ThirtyMins', 'SixtyMins' + IntervalLength IntervalInMins `json:"intervalLength,omitempty"` + // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. + BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` + // FromTime - From time of the query + FromTime *date.Time `json:"fromTime,omitempty"` + // ToTime - To time of the query + ToTime *date.Time `json:"toTime,omitempty"` + // GroupByThrottlePolicy - Group query result by Throttle Policy applied. + GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` + // GroupByOperationName - Group query result by Operation Name. + GroupByOperationName *bool `json:"groupByOperationName,omitempty"` + // GroupByResourceName - Group query result by Resource Name. + GroupByResourceName *bool `json:"groupByResourceName,omitempty"` + // GroupByClientApplicationID - Group query result by Client Application ID. + GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` + // GroupByUserAgent - Group query result by User Agent. + GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` +} + +// Resource the Resource model definition. +type Resource struct { + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Resource. +func (r Resource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if r.Location != nil { + objectMap["location"] = r.Location + } + if r.Tags != nil { + objectMap["tags"] = r.Tags + } + return json.Marshal(objectMap) +} + +// ResourceInstanceViewStatus instance view status. +type ResourceInstanceViewStatus struct { + // Code - READ-ONLY; The status code. + Code *string `json:"code,omitempty"` + // DisplayStatus - READ-ONLY; The short localizable label for the status. + DisplayStatus *string `json:"displayStatus,omitempty"` + // Message - READ-ONLY; The detailed status message, including for alerts and error messages. + Message *string `json:"message,omitempty"` + // Time - READ-ONLY; The time of the status. + Time *date.Time `json:"time,omitempty"` + // Level - The level code. Possible values include: 'Info', 'Warning', 'Error' + Level StatusLevelTypes `json:"level,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceInstanceViewStatus. +func (rivs ResourceInstanceViewStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rivs.Level != "" { + objectMap["level"] = rivs.Level + } + return json.Marshal(objectMap) +} + +// ResourceRange describes the resource range. +type ResourceRange struct { + // Min - The minimum number of the resource. + Min *int32 `json:"min,omitempty"` + // Max - The maximum number of the resource. + Max *int32 `json:"max,omitempty"` +} + +// ResourceSku describes an available Compute SKU. +type ResourceSku struct { + // ResourceType - READ-ONLY; The type of resource the SKU applies to. + ResourceType *string `json:"resourceType,omitempty"` + // Name - READ-ONLY; The name of SKU. + Name *string `json:"name,omitempty"` + // Tier - READ-ONLY; Specifies the tier of virtual machines in a scale set.

Possible Values:

**Standard**

**Basic** + Tier *string `json:"tier,omitempty"` + // Size - READ-ONLY; The Size of the SKU. + Size *string `json:"size,omitempty"` + // Family - READ-ONLY; The Family of this particular SKU. + Family *string `json:"family,omitempty"` + // Kind - READ-ONLY; The Kind of resources that are supported in this SKU. + Kind *string `json:"kind,omitempty"` + // Capacity - READ-ONLY; Specifies the number of virtual machines in the scale set. + Capacity *ResourceSkuCapacity `json:"capacity,omitempty"` + // Locations - READ-ONLY; The set of locations that the SKU is available. + Locations *[]string `json:"locations,omitempty"` + // LocationInfo - READ-ONLY; A list of locations and availability zones in those locations where the SKU is available. + LocationInfo *[]ResourceSkuLocationInfo `json:"locationInfo,omitempty"` + // APIVersions - READ-ONLY; The api versions that support this SKU. + APIVersions *[]string `json:"apiVersions,omitempty"` + // Costs - READ-ONLY; Metadata for retrieving price info. + Costs *[]ResourceSkuCosts `json:"costs,omitempty"` + // Capabilities - READ-ONLY; A name value pair to describe the capability. + Capabilities *[]ResourceSkuCapabilities `json:"capabilities,omitempty"` + // Restrictions - READ-ONLY; The restrictions because of which SKU cannot be used. This is empty if there are no restrictions. + Restrictions *[]ResourceSkuRestrictions `json:"restrictions,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSku. +func (rs ResourceSku) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuCapabilities describes The SKU capabilities object. +type ResourceSkuCapabilities struct { + // Name - READ-ONLY; An invariant to describe the feature. + Name *string `json:"name,omitempty"` + // Value - READ-ONLY; An invariant if the feature is measured by quantity. + Value *string `json:"value,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuCapabilities. +func (rsc ResourceSkuCapabilities) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuCapacity describes scaling information of a SKU. +type ResourceSkuCapacity struct { + // Minimum - READ-ONLY; The minimum capacity. + Minimum *int64 `json:"minimum,omitempty"` + // Maximum - READ-ONLY; The maximum capacity that can be set. + Maximum *int64 `json:"maximum,omitempty"` + // Default - READ-ONLY; The default capacity. + Default *int64 `json:"default,omitempty"` + // ScaleType - READ-ONLY; The scale type applicable to the sku. Possible values include: 'ResourceSkuCapacityScaleTypeAutomatic', 'ResourceSkuCapacityScaleTypeManual', 'ResourceSkuCapacityScaleTypeNone' + ScaleType ResourceSkuCapacityScaleType `json:"scaleType,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuCapacity. +func (rsc ResourceSkuCapacity) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuCosts describes metadata for retrieving price info. +type ResourceSkuCosts struct { + // MeterID - READ-ONLY; Used for querying price from commerce. + MeterID *string `json:"meterID,omitempty"` + // Quantity - READ-ONLY; The multiplier is needed to extend the base metered cost. + Quantity *int64 `json:"quantity,omitempty"` + // ExtendedUnit - READ-ONLY; An invariant to show the extended unit. + ExtendedUnit *string `json:"extendedUnit,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuCosts. +func (rsc ResourceSkuCosts) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuLocationInfo describes an available Compute SKU Location Information. +type ResourceSkuLocationInfo struct { + // Location - READ-ONLY; Location of the SKU + Location *string `json:"location,omitempty"` + // Zones - READ-ONLY; List of availability zones where the SKU is supported. + Zones *[]string `json:"zones,omitempty"` + // ZoneDetails - READ-ONLY; Details of capabilities available to a SKU in specific zones. + ZoneDetails *[]ResourceSkuZoneDetails `json:"zoneDetails,omitempty"` + // ExtendedLocations - READ-ONLY; The names of extended locations. + ExtendedLocations *[]string `json:"extendedLocations,omitempty"` + // Type - READ-ONLY; The type of the extended location. Possible values include: 'EdgeZone' + Type ExtendedLocationType `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuLocationInfo. +func (rsli ResourceSkuLocationInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuRestrictionInfo describes an available Compute SKU Restriction Information. +type ResourceSkuRestrictionInfo struct { + // Locations - READ-ONLY; Locations where the SKU is restricted + Locations *[]string `json:"locations,omitempty"` + // Zones - READ-ONLY; List of availability zones where the SKU is restricted. + Zones *[]string `json:"zones,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuRestrictionInfo. +func (rsri ResourceSkuRestrictionInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkuRestrictions describes scaling information of a SKU. +type ResourceSkuRestrictions struct { + // Type - READ-ONLY; The type of restrictions. Possible values include: 'Location', 'Zone' + Type ResourceSkuRestrictionsType `json:"type,omitempty"` + // Values - READ-ONLY; The value of restrictions. If the restriction type is set to location. This would be different locations where the SKU is restricted. + Values *[]string `json:"values,omitempty"` + // RestrictionInfo - READ-ONLY; The information about the restriction where the SKU cannot be used. + RestrictionInfo *ResourceSkuRestrictionInfo `json:"restrictionInfo,omitempty"` + // ReasonCode - READ-ONLY; The reason for restriction. Possible values include: 'QuotaID', 'NotAvailableForSubscription' + ReasonCode ResourceSkuRestrictionsReasonCode `json:"reasonCode,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuRestrictions. +func (rsr ResourceSkuRestrictions) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceSkusResult the List Resource Skus operation response. +type ResourceSkusResult struct { + autorest.Response `json:"-"` + // Value - The list of skus available for the subscription. + Value *[]ResourceSku `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of Resource Skus. Call ListNext() with this URI to fetch the next page of Resource Skus + NextLink *string `json:"nextLink,omitempty"` +} + +// ResourceSkusResultIterator provides access to a complete listing of ResourceSku values. +type ResourceSkusResultIterator struct { + i int + page ResourceSkusResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ResourceSkusResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ResourceSkusResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ResourceSkusResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ResourceSkusResultIterator) Response() ResourceSkusResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ResourceSkusResultIterator) Value() ResourceSku { + if !iter.page.NotDone() { + return ResourceSku{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ResourceSkusResultIterator type. +func NewResourceSkusResultIterator(page ResourceSkusResultPage) ResourceSkusResultIterator { + return ResourceSkusResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rsr ResourceSkusResult) IsEmpty() bool { + return rsr.Value == nil || len(*rsr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (rsr ResourceSkusResult) hasNextLink() bool { + return rsr.NextLink != nil && len(*rsr.NextLink) != 0 +} + +// resourceSkusResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rsr ResourceSkusResult) resourceSkusResultPreparer(ctx context.Context) (*http.Request, error) { + if !rsr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rsr.NextLink))) +} + +// ResourceSkusResultPage contains a page of ResourceSku values. +type ResourceSkusResultPage struct { + fn func(context.Context, ResourceSkusResult) (ResourceSkusResult, error) + rsr ResourceSkusResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ResourceSkusResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.rsr) + if err != nil { + return err + } + page.rsr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ResourceSkusResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ResourceSkusResultPage) NotDone() bool { + return !page.rsr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ResourceSkusResultPage) Response() ResourceSkusResult { + return page.rsr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ResourceSkusResultPage) Values() []ResourceSku { + if page.rsr.IsEmpty() { + return nil + } + return *page.rsr.Value +} + +// Creates a new instance of the ResourceSkusResultPage type. +func NewResourceSkusResultPage(cur ResourceSkusResult, getNextPage func(context.Context, ResourceSkusResult) (ResourceSkusResult, error)) ResourceSkusResultPage { + return ResourceSkusResultPage{ + fn: getNextPage, + rsr: cur, + } +} + +// ResourceSkuZoneDetails describes The zonal capabilities of a SKU. +type ResourceSkuZoneDetails struct { + // Name - READ-ONLY; The set of zones that the SKU is available in with the specified capabilities. + Name *[]string `json:"name,omitempty"` + // Capabilities - READ-ONLY; A list of capabilities that are available for the SKU in the specified list of zones. + Capabilities *[]ResourceSkuCapabilities `json:"capabilities,omitempty"` +} + +// MarshalJSON is the custom marshaler for ResourceSkuZoneDetails. +func (rszd ResourceSkuZoneDetails) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ResourceURIList the List resources which are encrypted with the disk encryption set. +type ResourceURIList struct { + autorest.Response `json:"-"` + // Value - A list of IDs or Owner IDs of resources which are encrypted with the disk encryption set. + Value *[]string `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of encrypted resources. Call ListNext() with this to fetch the next page of encrypted resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// ResourceURIListIterator provides access to a complete listing of string values. +type ResourceURIListIterator struct { + i int + page ResourceURIListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ResourceURIListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceURIListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ResourceURIListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ResourceURIListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ResourceURIListIterator) Response() ResourceURIList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ResourceURIListIterator) Value() string { + if !iter.page.NotDone() { + return "" + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ResourceURIListIterator type. +func NewResourceURIListIterator(page ResourceURIListPage) ResourceURIListIterator { + return ResourceURIListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rul ResourceURIList) IsEmpty() bool { + return rul.Value == nil || len(*rul.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (rul ResourceURIList) hasNextLink() bool { + return rul.NextLink != nil && len(*rul.NextLink) != 0 +} + +// resourceURIListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rul ResourceURIList) resourceURIListPreparer(ctx context.Context) (*http.Request, error) { + if !rul.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rul.NextLink))) +} + +// ResourceURIListPage contains a page of string values. +type ResourceURIListPage struct { + fn func(context.Context, ResourceURIList) (ResourceURIList, error) + rul ResourceURIList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ResourceURIListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceURIListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.rul) + if err != nil { + return err + } + page.rul = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ResourceURIListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ResourceURIListPage) NotDone() bool { + return !page.rul.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ResourceURIListPage) Response() ResourceURIList { + return page.rul +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ResourceURIListPage) Values() []string { + if page.rul.IsEmpty() { + return nil + } + return *page.rul.Value +} + +// Creates a new instance of the ResourceURIListPage type. +func NewResourceURIListPage(cur ResourceURIList, getNextPage func(context.Context, ResourceURIList) (ResourceURIList, error)) ResourceURIListPage { + return ResourceURIListPage{ + fn: getNextPage, + rul: cur, + } +} + +// ResourceWithOptionalLocation the Resource model definition with location property as optional. +type ResourceWithOptionalLocation struct { + // Location - Resource location + Location *string `json:"location,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ResourceWithOptionalLocation. +func (rwol ResourceWithOptionalLocation) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rwol.Location != nil { + objectMap["location"] = rwol.Location + } + if rwol.Tags != nil { + objectMap["tags"] = rwol.Tags + } + return json.Marshal(objectMap) +} + +// RestorePoint restore Point details. +type RestorePoint struct { + autorest.Response `json:"-"` + *RestorePointProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` +} + +// MarshalJSON is the custom marshaler for RestorePoint. +func (rp RestorePoint) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rp.RestorePointProperties != nil { + objectMap["properties"] = rp.RestorePointProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for RestorePoint struct. +func (rp *RestorePoint) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var restorePointProperties RestorePointProperties + err = json.Unmarshal(*v, &restorePointProperties) + if err != nil { + return err + } + rp.RestorePointProperties = &restorePointProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rp.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rp.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rp.Type = &typeVar + } + } + } + + return nil +} + +// RestorePointCollection create or update Restore Point collection parameters. +type RestorePointCollection struct { + autorest.Response `json:"-"` + *RestorePointCollectionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for RestorePointCollection. +func (RPCVar RestorePointCollection) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if RPCVar.RestorePointCollectionProperties != nil { + objectMap["properties"] = RPCVar.RestorePointCollectionProperties + } + if RPCVar.Location != nil { + objectMap["location"] = RPCVar.Location + } + if RPCVar.Tags != nil { + objectMap["tags"] = RPCVar.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for RestorePointCollection struct. +func (RPCVar *RestorePointCollection) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var restorePointCollectionProperties RestorePointCollectionProperties + err = json.Unmarshal(*v, &restorePointCollectionProperties) + if err != nil { + return err + } + RPCVar.RestorePointCollectionProperties = &restorePointCollectionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + RPCVar.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + RPCVar.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + RPCVar.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + RPCVar.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + RPCVar.Tags = tags + } + } + } + + return nil +} + +// RestorePointCollectionListResult the List restore point collection operation response. +type RestorePointCollectionListResult struct { + autorest.Response `json:"-"` + // Value - Gets the list of restore point collections. + Value *[]RestorePointCollection `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of RestorePointCollections. Call ListNext() with this to fetch the next page of RestorePointCollections + NextLink *string `json:"nextLink,omitempty"` +} + +// RestorePointCollectionListResultIterator provides access to a complete listing of RestorePointCollection +// values. +type RestorePointCollectionListResultIterator struct { + i int + page RestorePointCollectionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *RestorePointCollectionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *RestorePointCollectionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter RestorePointCollectionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter RestorePointCollectionListResultIterator) Response() RestorePointCollectionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter RestorePointCollectionListResultIterator) Value() RestorePointCollection { + if !iter.page.NotDone() { + return RestorePointCollection{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the RestorePointCollectionListResultIterator type. +func NewRestorePointCollectionListResultIterator(page RestorePointCollectionListResultPage) RestorePointCollectionListResultIterator { + return RestorePointCollectionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rpclr RestorePointCollectionListResult) IsEmpty() bool { + return rpclr.Value == nil || len(*rpclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (rpclr RestorePointCollectionListResult) hasNextLink() bool { + return rpclr.NextLink != nil && len(*rpclr.NextLink) != 0 +} + +// restorePointCollectionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rpclr RestorePointCollectionListResult) restorePointCollectionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !rpclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rpclr.NextLink))) +} + +// RestorePointCollectionListResultPage contains a page of RestorePointCollection values. +type RestorePointCollectionListResultPage struct { + fn func(context.Context, RestorePointCollectionListResult) (RestorePointCollectionListResult, error) + rpclr RestorePointCollectionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *RestorePointCollectionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.rpclr) + if err != nil { + return err + } + page.rpclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *RestorePointCollectionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page RestorePointCollectionListResultPage) NotDone() bool { + return !page.rpclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page RestorePointCollectionListResultPage) Response() RestorePointCollectionListResult { + return page.rpclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page RestorePointCollectionListResultPage) Values() []RestorePointCollection { + if page.rpclr.IsEmpty() { + return nil + } + return *page.rpclr.Value +} + +// Creates a new instance of the RestorePointCollectionListResultPage type. +func NewRestorePointCollectionListResultPage(cur RestorePointCollectionListResult, getNextPage func(context.Context, RestorePointCollectionListResult) (RestorePointCollectionListResult, error)) RestorePointCollectionListResultPage { + return RestorePointCollectionListResultPage{ + fn: getNextPage, + rpclr: cur, + } +} + +// RestorePointCollectionProperties the restore point collection properties. +type RestorePointCollectionProperties struct { + Source *RestorePointCollectionSourceProperties `json:"source,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the restore point collection. + ProvisioningState *string `json:"provisioningState,omitempty"` + // RestorePointCollectionID - READ-ONLY; The unique id of the restore point collection. + RestorePointCollectionID *string `json:"restorePointCollectionId,omitempty"` + // RestorePoints - READ-ONLY; A list containing all restore points created under this restore point collection. + RestorePoints *[]RestorePoint `json:"restorePoints,omitempty"` +} + +// MarshalJSON is the custom marshaler for RestorePointCollectionProperties. +func (rpcp RestorePointCollectionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rpcp.Source != nil { + objectMap["source"] = rpcp.Source + } + return json.Marshal(objectMap) +} + +// RestorePointCollectionsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type RestorePointCollectionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(RestorePointCollectionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *RestorePointCollectionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for RestorePointCollectionsDeleteFuture.Result. +func (future *RestorePointCollectionsDeleteFuture) result(client RestorePointCollectionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.RestorePointCollectionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// RestorePointCollectionSourceProperties the properties of the source resource that this restore point +// collection is created from. +type RestorePointCollectionSourceProperties struct { + // Location - READ-ONLY; Location of the source resource used to create this restore point collection. + Location *string `json:"location,omitempty"` + // ID - Resource Id of the source resource used to create this restore point collection + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for RestorePointCollectionSourceProperties. +func (rpcsp RestorePointCollectionSourceProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rpcsp.ID != nil { + objectMap["id"] = rpcsp.ID + } + return json.Marshal(objectMap) +} + +// RestorePointCollectionUpdate update Restore Point collection parameters. +type RestorePointCollectionUpdate struct { + *RestorePointCollectionProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for RestorePointCollectionUpdate. +func (rpcu RestorePointCollectionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rpcu.RestorePointCollectionProperties != nil { + objectMap["properties"] = rpcu.RestorePointCollectionProperties + } + if rpcu.Tags != nil { + objectMap["tags"] = rpcu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for RestorePointCollectionUpdate struct. +func (rpcu *RestorePointCollectionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var restorePointCollectionProperties RestorePointCollectionProperties + err = json.Unmarshal(*v, &restorePointCollectionProperties) + if err != nil { + return err + } + rpcu.RestorePointCollectionProperties = &restorePointCollectionProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + rpcu.Tags = tags + } + } + } + + return nil +} + +// RestorePointInstanceView the instance view of a restore point. +type RestorePointInstanceView struct { + // DiskRestorePoints - The disk restore points information. + DiskRestorePoints *[]DiskRestorePointInstanceView `json:"diskRestorePoints,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// RestorePointProperties the restore point properties. +type RestorePointProperties struct { + // ExcludeDisks - List of disk resource ids that the customer wishes to exclude from the restore point. If no disks are specified, all disks will be included. + ExcludeDisks *[]APIEntityReference `json:"excludeDisks,omitempty"` + // SourceMetadata - READ-ONLY; Gets the details of the VM captured at the time of the restore point creation. + SourceMetadata *RestorePointSourceMetadata `json:"sourceMetadata,omitempty"` + // ProvisioningState - READ-ONLY; Gets the provisioning state of the restore point. + ProvisioningState *string `json:"provisioningState,omitempty"` + // ConsistencyMode - ConsistencyMode of the RestorePoint. Can be specified in the input while creating a restore point. For now, only CrashConsistent is accepted as a valid input. Please refer to https://aka.ms/RestorePoints for more details. Possible values include: 'CrashConsistent', 'FileSystemConsistent', 'ApplicationConsistent' + ConsistencyMode ConsistencyModeTypes `json:"consistencyMode,omitempty"` + // TimeCreated - Gets the creation time of the restore point. + TimeCreated *date.Time `json:"timeCreated,omitempty"` + // SourceRestorePoint - Resource Id of the source restore point from which a copy needs to be created. + SourceRestorePoint *APIEntityReference `json:"sourceRestorePoint,omitempty"` + // InstanceView - READ-ONLY; The restore point instance view. + InstanceView *RestorePointInstanceView `json:"instanceView,omitempty"` +} + +// MarshalJSON is the custom marshaler for RestorePointProperties. +func (rpp RestorePointProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rpp.ExcludeDisks != nil { + objectMap["excludeDisks"] = rpp.ExcludeDisks + } + if rpp.ConsistencyMode != "" { + objectMap["consistencyMode"] = rpp.ConsistencyMode + } + if rpp.TimeCreated != nil { + objectMap["timeCreated"] = rpp.TimeCreated + } + if rpp.SourceRestorePoint != nil { + objectMap["sourceRestorePoint"] = rpp.SourceRestorePoint + } + return json.Marshal(objectMap) +} + +// RestorePointsCreateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type RestorePointsCreateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(RestorePointsClient) (RestorePoint, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *RestorePointsCreateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for RestorePointsCreateFuture.Result. +func (future *RestorePointsCreateFuture) result(client RestorePointsClient) (rp RestorePoint, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsCreateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + rp.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.RestorePointsCreateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent { + rp, err = client.CreateResponder(rp.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsCreateFuture", "Result", rp.Response.Response, "Failure responding to request") + } + } + return +} + +// RestorePointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type RestorePointsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(RestorePointsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *RestorePointsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for RestorePointsDeleteFuture.Result. +func (future *RestorePointsDeleteFuture) result(client RestorePointsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.RestorePointsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// RestorePointSourceMetadata describes the properties of the Virtual Machine for which the restore point +// was created. The properties provided are a subset and the snapshot of the overall Virtual Machine +// properties captured at the time of the restore point creation. +type RestorePointSourceMetadata struct { + // HardwareProfile - Gets the hardware profile. + HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` + // StorageProfile - Gets the storage profile. + StorageProfile *RestorePointSourceVMStorageProfile `json:"storageProfile,omitempty"` + // OsProfile - Gets the OS profile. + OsProfile *OSProfile `json:"osProfile,omitempty"` + // DiagnosticsProfile - Gets the diagnostics profile. + DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` + // LicenseType - Gets the license type, which is for bring your own license scenario. + LicenseType *string `json:"licenseType,omitempty"` + // VMID - Gets the virtual machine unique id. + VMID *string `json:"vmId,omitempty"` + // SecurityProfile - Gets the security profile. + SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` + // Location - Location of the VM from which the restore point was created. + Location *string `json:"location,omitempty"` +} + +// RestorePointSourceVMDataDisk describes a data disk. +type RestorePointSourceVMDataDisk struct { + // Lun - Gets the logical unit number. + Lun *int32 `json:"lun,omitempty"` + // Name - Gets the disk name. + Name *string `json:"name,omitempty"` + // Caching - Gets the caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // DiskSizeGB - Gets the initial disk size in GB for blank data disks, and the new desired size for existing OS and Data disks. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // ManagedDisk - Gets the managed disk details + ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` + // DiskRestorePoint - Gets the disk restore point Id. + DiskRestorePoint *APIEntityReference `json:"diskRestorePoint,omitempty"` +} + +// RestorePointSourceVMOSDisk describes an Operating System disk. +type RestorePointSourceVMOSDisk struct { + // OsType - Gets the Operating System type. Possible values include: 'Windows', 'Linux' + OsType OperatingSystemType `json:"osType,omitempty"` + // EncryptionSettings - Gets the disk encryption settings. + EncryptionSettings *DiskEncryptionSettings `json:"encryptionSettings,omitempty"` + // Name - Gets the disk name. + Name *string `json:"name,omitempty"` + // Caching - Gets the caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // DiskSizeGB - Gets the disk size in GB. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // ManagedDisk - Gets the managed disk details + ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` + // DiskRestorePoint - Gets the disk restore point Id. + DiskRestorePoint *APIEntityReference `json:"diskRestorePoint,omitempty"` +} + +// RestorePointSourceVMStorageProfile describes the storage profile. +type RestorePointSourceVMStorageProfile struct { + // OsDisk - Gets the OS disk of the VM captured at the time of the restore point creation. + OsDisk *RestorePointSourceVMOSDisk `json:"osDisk,omitempty"` + // DataDisks - Gets the data disks of the VM captured at the time of the restore point creation. + DataDisks *[]RestorePointSourceVMDataDisk `json:"dataDisks,omitempty"` +} + +// RetrieveBootDiagnosticsDataResult the SAS URIs of the console screenshot and serial log blobs. +type RetrieveBootDiagnosticsDataResult struct { + autorest.Response `json:"-"` + // ConsoleScreenshotBlobURI - READ-ONLY; The console screenshot blob URI + ConsoleScreenshotBlobURI *string `json:"consoleScreenshotBlobUri,omitempty"` + // SerialConsoleLogBlobURI - READ-ONLY; The serial console log blob URI. + SerialConsoleLogBlobURI *string `json:"serialConsoleLogBlobUri,omitempty"` +} + +// MarshalJSON is the custom marshaler for RetrieveBootDiagnosticsDataResult. +func (rbddr RetrieveBootDiagnosticsDataResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RoleInstance describes the cloud service role instance. +type RoleInstance struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource Name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource Type. + Type *string `json:"type,omitempty"` + // Location - READ-ONLY; Resource Location. + Location *string `json:"location,omitempty"` + // Tags - READ-ONLY; Resource tags. + Tags map[string]*string `json:"tags"` + Sku *InstanceSku `json:"sku,omitempty"` + Properties *RoleInstanceProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for RoleInstance. +func (ri RoleInstance) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ri.Sku != nil { + objectMap["sku"] = ri.Sku + } + if ri.Properties != nil { + objectMap["properties"] = ri.Properties + } + return json.Marshal(objectMap) +} + +// RoleInstanceInstanceView the instance view of the role instance. +type RoleInstanceInstanceView struct { + autorest.Response `json:"-"` + // PlatformUpdateDomain - READ-ONLY; The Update Domain. + PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` + // PlatformFaultDomain - READ-ONLY; The Fault Domain. + PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` + // PrivateID - READ-ONLY; Specifies a unique identifier generated internally for the cloud service associated with this role instance.

NOTE: If you are using Azure Diagnostics extension, this property can be used as 'DeploymentId' for querying details. + PrivateID *string `json:"privateId,omitempty"` + // Statuses - READ-ONLY + Statuses *[]ResourceInstanceViewStatus `json:"statuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for RoleInstanceInstanceView. +func (riiv RoleInstanceInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RoleInstanceListResult the list operation result. +type RoleInstanceListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]RoleInstance `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// RoleInstanceListResultIterator provides access to a complete listing of RoleInstance values. +type RoleInstanceListResultIterator struct { + i int + page RoleInstanceListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *RoleInstanceListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoleInstanceListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *RoleInstanceListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter RoleInstanceListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter RoleInstanceListResultIterator) Response() RoleInstanceListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter RoleInstanceListResultIterator) Value() RoleInstance { + if !iter.page.NotDone() { + return RoleInstance{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the RoleInstanceListResultIterator type. +func NewRoleInstanceListResultIterator(page RoleInstanceListResultPage) RoleInstanceListResultIterator { + return RoleInstanceListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rilr RoleInstanceListResult) IsEmpty() bool { + return rilr.Value == nil || len(*rilr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (rilr RoleInstanceListResult) hasNextLink() bool { + return rilr.NextLink != nil && len(*rilr.NextLink) != 0 +} + +// roleInstanceListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rilr RoleInstanceListResult) roleInstanceListResultPreparer(ctx context.Context) (*http.Request, error) { + if !rilr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rilr.NextLink))) +} + +// RoleInstanceListResultPage contains a page of RoleInstance values. +type RoleInstanceListResultPage struct { + fn func(context.Context, RoleInstanceListResult) (RoleInstanceListResult, error) + rilr RoleInstanceListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *RoleInstanceListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoleInstanceListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.rilr) + if err != nil { + return err + } + page.rilr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *RoleInstanceListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page RoleInstanceListResultPage) NotDone() bool { + return !page.rilr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page RoleInstanceListResultPage) Response() RoleInstanceListResult { + return page.rilr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page RoleInstanceListResultPage) Values() []RoleInstance { + if page.rilr.IsEmpty() { + return nil + } + return *page.rilr.Value +} + +// Creates a new instance of the RoleInstanceListResultPage type. +func NewRoleInstanceListResultPage(cur RoleInstanceListResult, getNextPage func(context.Context, RoleInstanceListResult) (RoleInstanceListResult, error)) RoleInstanceListResultPage { + return RoleInstanceListResultPage{ + fn: getNextPage, + rilr: cur, + } +} + +// RoleInstanceNetworkProfile describes the network profile for the role instance. +type RoleInstanceNetworkProfile struct { + // NetworkInterfaces - READ-ONLY; Specifies the list of resource Ids for the network interfaces associated with the role instance. + NetworkInterfaces *[]SubResource `json:"networkInterfaces,omitempty"` +} + +// MarshalJSON is the custom marshaler for RoleInstanceNetworkProfile. +func (rinp RoleInstanceNetworkProfile) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RoleInstanceProperties role instance properties. +type RoleInstanceProperties struct { + NetworkProfile *RoleInstanceNetworkProfile `json:"networkProfile,omitempty"` + InstanceView *RoleInstanceInstanceView `json:"instanceView,omitempty"` +} + +// RoleInstances specifies a list of role instances from the cloud service. +type RoleInstances struct { + // RoleInstances - List of cloud service role instance names. Value of '*' will signify all role instances of the cloud service. + RoleInstances *[]string `json:"roleInstances,omitempty"` +} + +// RollbackStatusInfo information about rollback on failed VM instances after a OS Upgrade operation. +type RollbackStatusInfo struct { + // SuccessfullyRolledbackInstanceCount - READ-ONLY; The number of instances which have been successfully rolled back. + SuccessfullyRolledbackInstanceCount *int32 `json:"successfullyRolledbackInstanceCount,omitempty"` + // FailedRolledbackInstanceCount - READ-ONLY; The number of instances which failed to rollback. + FailedRolledbackInstanceCount *int32 `json:"failedRolledbackInstanceCount,omitempty"` + // RollbackError - READ-ONLY; Error details if OS rollback failed. + RollbackError *APIError `json:"rollbackError,omitempty"` +} + +// MarshalJSON is the custom marshaler for RollbackStatusInfo. +func (rsi RollbackStatusInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RollingUpgradePolicy the configuration parameters used while performing a rolling upgrade. +type RollingUpgradePolicy struct { + // MaxBatchInstancePercent - The maximum percent of total virtual machine instances that will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum, unhealthy instances in previous or future batches can cause the percentage of instances in a batch to decrease to ensure higher reliability. The default value for this parameter is 20%. + MaxBatchInstancePercent *int32 `json:"maxBatchInstancePercent,omitempty"` + // MaxUnhealthyInstancePercent - The maximum percentage of the total virtual machine instances in the scale set that can be simultaneously unhealthy, either as a result of being upgraded, or by being found in an unhealthy state by the virtual machine health checks before the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The default value for this parameter is 20%. + MaxUnhealthyInstancePercent *int32 `json:"maxUnhealthyInstancePercent,omitempty"` + // MaxUnhealthyUpgradedInstancePercent - The maximum percentage of upgraded virtual machine instances that can be found to be in an unhealthy state. This check will happen after each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The default value for this parameter is 20%. + MaxUnhealthyUpgradedInstancePercent *int32 `json:"maxUnhealthyUpgradedInstancePercent,omitempty"` + // PauseTimeBetweenBatches - The wait time between completing the update for all virtual machines in one batch and starting the next batch. The time duration should be specified in ISO 8601 format. The default value is 0 seconds (PT0S). + PauseTimeBetweenBatches *string `json:"pauseTimeBetweenBatches,omitempty"` + // EnableCrossZoneUpgrade - Allow VMSS to ignore AZ boundaries when constructing upgrade batches. Take into consideration the Update Domain and maxBatchInstancePercent to determine the batch size. + EnableCrossZoneUpgrade *bool `json:"enableCrossZoneUpgrade,omitempty"` + // PrioritizeUnhealthyInstances - Upgrade all unhealthy instances in a scale set before any healthy instances. + PrioritizeUnhealthyInstances *bool `json:"prioritizeUnhealthyInstances,omitempty"` +} + +// RollingUpgradeProgressInfo information about the number of virtual machine instances in each upgrade +// state. +type RollingUpgradeProgressInfo struct { + // SuccessfulInstanceCount - READ-ONLY; The number of instances that have been successfully upgraded. + SuccessfulInstanceCount *int32 `json:"successfulInstanceCount,omitempty"` + // FailedInstanceCount - READ-ONLY; The number of instances that have failed to be upgraded successfully. + FailedInstanceCount *int32 `json:"failedInstanceCount,omitempty"` + // InProgressInstanceCount - READ-ONLY; The number of instances that are currently being upgraded. + InProgressInstanceCount *int32 `json:"inProgressInstanceCount,omitempty"` + // PendingInstanceCount - READ-ONLY; The number of instances that have not yet begun to be upgraded. + PendingInstanceCount *int32 `json:"pendingInstanceCount,omitempty"` +} + +// MarshalJSON is the custom marshaler for RollingUpgradeProgressInfo. +func (rupi RollingUpgradeProgressInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RollingUpgradeRunningStatus information about the current running state of the overall upgrade. +type RollingUpgradeRunningStatus struct { + // Code - READ-ONLY; Code indicating the current status of the upgrade. Possible values include: 'RollingUpgradeStatusCodeRollingForward', 'RollingUpgradeStatusCodeCancelled', 'RollingUpgradeStatusCodeCompleted', 'RollingUpgradeStatusCodeFaulted' + Code RollingUpgradeStatusCode `json:"code,omitempty"` + // StartTime - READ-ONLY; Start time of the upgrade. + StartTime *date.Time `json:"startTime,omitempty"` + // LastAction - READ-ONLY; The last action performed on the rolling upgrade. Possible values include: 'Start', 'Cancel' + LastAction RollingUpgradeActionType `json:"lastAction,omitempty"` + // LastActionTime - READ-ONLY; Last action time of the upgrade. + LastActionTime *date.Time `json:"lastActionTime,omitempty"` +} + +// MarshalJSON is the custom marshaler for RollingUpgradeRunningStatus. +func (rurs RollingUpgradeRunningStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RollingUpgradeStatusInfo the status of the latest virtual machine scale set rolling upgrade. +type RollingUpgradeStatusInfo struct { + autorest.Response `json:"-"` + *RollingUpgradeStatusInfoProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for RollingUpgradeStatusInfo. +func (rusi RollingUpgradeStatusInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rusi.RollingUpgradeStatusInfoProperties != nil { + objectMap["properties"] = rusi.RollingUpgradeStatusInfoProperties + } + if rusi.Location != nil { + objectMap["location"] = rusi.Location + } + if rusi.Tags != nil { + objectMap["tags"] = rusi.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for RollingUpgradeStatusInfo struct. +func (rusi *RollingUpgradeStatusInfo) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var rollingUpgradeStatusInfoProperties RollingUpgradeStatusInfoProperties + err = json.Unmarshal(*v, &rollingUpgradeStatusInfoProperties) + if err != nil { + return err + } + rusi.RollingUpgradeStatusInfoProperties = &rollingUpgradeStatusInfoProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rusi.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rusi.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rusi.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + rusi.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + rusi.Tags = tags + } + } + } + + return nil +} + +// RollingUpgradeStatusInfoProperties the status of the latest virtual machine scale set rolling upgrade. +type RollingUpgradeStatusInfoProperties struct { + // Policy - READ-ONLY; The rolling upgrade policies applied for this upgrade. + Policy *RollingUpgradePolicy `json:"policy,omitempty"` + // RunningStatus - READ-ONLY; Information about the current running state of the overall upgrade. + RunningStatus *RollingUpgradeRunningStatus `json:"runningStatus,omitempty"` + // Progress - READ-ONLY; Information about the number of virtual machine instances in each upgrade state. + Progress *RollingUpgradeProgressInfo `json:"progress,omitempty"` + // Error - READ-ONLY; Error details for this upgrade, if there are any. + Error *APIError `json:"error,omitempty"` +} + +// MarshalJSON is the custom marshaler for RollingUpgradeStatusInfoProperties. +func (rusip RollingUpgradeStatusInfoProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// RunCommandDocument describes the properties of a Run Command. +type RunCommandDocument struct { + autorest.Response `json:"-"` + // Script - The script to be executed. + Script *[]string `json:"script,omitempty"` + // Parameters - The parameters used by the script. + Parameters *[]RunCommandParameterDefinition `json:"parameters,omitempty"` + // Schema - The VM run command schema. + Schema *string `json:"$schema,omitempty"` + // ID - The VM run command id. + ID *string `json:"id,omitempty"` + // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // Label - The VM run command label. + Label *string `json:"label,omitempty"` + // Description - The VM run command description. + Description *string `json:"description,omitempty"` +} + +// RunCommandDocumentBase describes the properties of a Run Command metadata. +type RunCommandDocumentBase struct { + // Schema - The VM run command schema. + Schema *string `json:"$schema,omitempty"` + // ID - The VM run command id. + ID *string `json:"id,omitempty"` + // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // Label - The VM run command label. + Label *string `json:"label,omitempty"` + // Description - The VM run command description. + Description *string `json:"description,omitempty"` +} + +// RunCommandInput capture Virtual Machine parameters. +type RunCommandInput struct { + // CommandID - The run command id. + CommandID *string `json:"commandId,omitempty"` + // Script - Optional. The script to be executed. When this value is given, the given script will override the default script of the command. + Script *[]string `json:"script,omitempty"` + // Parameters - The run command parameters. + Parameters *[]RunCommandInputParameter `json:"parameters,omitempty"` +} + +// RunCommandInputParameter describes the properties of a run command parameter. +type RunCommandInputParameter struct { + // Name - The run command parameter name. + Name *string `json:"name,omitempty"` + // Value - The run command parameter value. + Value *string `json:"value,omitempty"` +} + +// RunCommandListResult the List Virtual Machine operation response. +type RunCommandListResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machine run commands. + Value *[]RunCommandDocumentBase `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands. + NextLink *string `json:"nextLink,omitempty"` +} + +// RunCommandListResultIterator provides access to a complete listing of RunCommandDocumentBase values. +type RunCommandListResultIterator struct { + i int + page RunCommandListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *RunCommandListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RunCommandListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *RunCommandListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter RunCommandListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter RunCommandListResultIterator) Response() RunCommandListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter RunCommandListResultIterator) Value() RunCommandDocumentBase { + if !iter.page.NotDone() { + return RunCommandDocumentBase{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the RunCommandListResultIterator type. +func NewRunCommandListResultIterator(page RunCommandListResultPage) RunCommandListResultIterator { + return RunCommandListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rclr RunCommandListResult) IsEmpty() bool { + return rclr.Value == nil || len(*rclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (rclr RunCommandListResult) hasNextLink() bool { + return rclr.NextLink != nil && len(*rclr.NextLink) != 0 +} + +// runCommandListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rclr RunCommandListResult) runCommandListResultPreparer(ctx context.Context) (*http.Request, error) { + if !rclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rclr.NextLink))) +} + +// RunCommandListResultPage contains a page of RunCommandDocumentBase values. +type RunCommandListResultPage struct { + fn func(context.Context, RunCommandListResult) (RunCommandListResult, error) + rclr RunCommandListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *RunCommandListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RunCommandListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.rclr) + if err != nil { + return err + } + page.rclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *RunCommandListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page RunCommandListResultPage) NotDone() bool { + return !page.rclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page RunCommandListResultPage) Response() RunCommandListResult { + return page.rclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page RunCommandListResultPage) Values() []RunCommandDocumentBase { + if page.rclr.IsEmpty() { + return nil + } + return *page.rclr.Value +} + +// Creates a new instance of the RunCommandListResultPage type. +func NewRunCommandListResultPage(cur RunCommandListResult, getNextPage func(context.Context, RunCommandListResult) (RunCommandListResult, error)) RunCommandListResultPage { + return RunCommandListResultPage{ + fn: getNextPage, + rclr: cur, + } +} + +// RunCommandParameterDefinition describes the properties of a run command parameter. +type RunCommandParameterDefinition struct { + // Name - The run command parameter name. + Name *string `json:"name,omitempty"` + // Type - The run command parameter type. + Type *string `json:"type,omitempty"` + // DefaultValue - The run command parameter default value. + DefaultValue *string `json:"defaultValue,omitempty"` + // Required - The run command parameter required. + Required *bool `json:"required,omitempty"` +} + +// RunCommandResult ... +type RunCommandResult struct { + autorest.Response `json:"-"` + // Value - Run command operation response. + Value *[]InstanceViewStatus `json:"value,omitempty"` +} + +// ScaleInPolicy describes a scale-in policy for a virtual machine scale set. +type ScaleInPolicy struct { + // Rules - The rules to be followed when scaling-in a virtual machine scale set.

Possible values are:

**Default** When a virtual machine scale set is scaled in, the scale set will first be balanced across zones if it is a zonal scale set. Then, it will be balanced across Fault Domains as far as possible. Within each Fault Domain, the virtual machines chosen for removal will be the newest ones that are not protected from scale-in.

**OldestVM** When a virtual machine scale set is being scaled-in, the oldest virtual machines that are not protected from scale-in will be chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced across zones. Within each zone, the oldest virtual machines that are not protected will be chosen for removal.

**NewestVM** When a virtual machine scale set is being scaled-in, the newest virtual machines that are not protected from scale-in will be chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced across zones. Within each zone, the newest virtual machines that are not protected will be chosen for removal.

+ Rules *[]VirtualMachineScaleSetScaleInRules `json:"rules,omitempty"` + // ForceDeletion - This property allows you to specify if virtual machines chosen for removal have to be force deleted when a virtual machine scale set is being scaled-in.(Feature in Preview) + ForceDeletion *bool `json:"forceDeletion,omitempty"` +} + +// ScheduledEventsProfile ... +type ScheduledEventsProfile struct { + // TerminateNotificationProfile - Specifies Terminate Scheduled Event related configurations. + TerminateNotificationProfile *TerminateNotificationProfile `json:"terminateNotificationProfile,omitempty"` +} + +// SecurityProfile specifies the Security profile settings for the virtual machine or virtual machine scale +// set. +type SecurityProfile struct { + // UefiSettings - Specifies the security settings like secure boot and vTPM used while creating the virtual machine.

Minimum api-version: 2020-12-01 + UefiSettings *UefiSettings `json:"uefiSettings,omitempty"` + // EncryptionAtHost - This property can be used by user in the request to enable or disable the Host Encryption for the virtual machine or virtual machine scale set. This will enable the encryption for all the disks including Resource/Temp disk at host itself.

Default: The Encryption at host will be disabled unless this property is set to true for the resource. + EncryptionAtHost *bool `json:"encryptionAtHost,omitempty"` + // SecurityType - Specifies the SecurityType of the virtual machine. It has to be set to any specified value to enable UefiSettings.

Default: UefiSettings will not be enabled unless this property is set. Possible values include: 'SecurityTypesTrustedLaunch', 'SecurityTypesConfidentialVM' + SecurityType SecurityTypes `json:"securityType,omitempty"` +} + +// SharedGallery specifies information about the Shared Gallery that you want to create or update. +type SharedGallery struct { + autorest.Response `json:"-"` + *SharedGalleryIdentifier `json:"identifier,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGallery. +func (sg SharedGallery) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sg.SharedGalleryIdentifier != nil { + objectMap["identifier"] = sg.SharedGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SharedGallery struct. +func (sg *SharedGallery) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "identifier": + if v != nil { + var sharedGalleryIdentifier SharedGalleryIdentifier + err = json.Unmarshal(*v, &sharedGalleryIdentifier) + if err != nil { + return err + } + sg.SharedGalleryIdentifier = &sharedGalleryIdentifier + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sg.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + sg.Location = &location + } + } + } + + return nil +} + +// SharedGalleryDataDiskImage this is the data disk image. +type SharedGalleryDataDiskImage struct { + // Lun - This property specifies the logical unit number of the data disk. This value is used to identify data disks within the Virtual Machine and therefore must be unique for each data disk attached to the Virtual Machine. + Lun *int32 `json:"lun,omitempty"` + // DiskSizeGB - READ-ONLY; This property indicates the size of the VHD to be created. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'SharedGalleryHostCachingNone', 'SharedGalleryHostCachingReadOnly', 'SharedGalleryHostCachingReadWrite' + HostCaching SharedGalleryHostCaching `json:"hostCaching,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGalleryDataDiskImage. +func (sgddi SharedGalleryDataDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sgddi.Lun != nil { + objectMap["lun"] = sgddi.Lun + } + if sgddi.HostCaching != "" { + objectMap["hostCaching"] = sgddi.HostCaching + } + return json.Marshal(objectMap) +} + +// SharedGalleryDiskImage this is the disk image base class. +type SharedGalleryDiskImage struct { + // DiskSizeGB - READ-ONLY; This property indicates the size of the VHD to be created. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'SharedGalleryHostCachingNone', 'SharedGalleryHostCachingReadOnly', 'SharedGalleryHostCachingReadWrite' + HostCaching SharedGalleryHostCaching `json:"hostCaching,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGalleryDiskImage. +func (sgdi SharedGalleryDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sgdi.HostCaching != "" { + objectMap["hostCaching"] = sgdi.HostCaching + } + return json.Marshal(objectMap) +} + +// SharedGalleryIdentifier the identifier information of shared gallery. +type SharedGalleryIdentifier struct { + // UniqueID - The unique id of this shared gallery. + UniqueID *string `json:"uniqueId,omitempty"` +} + +// SharedGalleryImage specifies information about the gallery image definition that you want to create or +// update. +type SharedGalleryImage struct { + autorest.Response `json:"-"` + *SharedGalleryImageProperties `json:"properties,omitempty"` + *SharedGalleryIdentifier `json:"identifier,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGalleryImage. +func (sgi SharedGalleryImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sgi.SharedGalleryImageProperties != nil { + objectMap["properties"] = sgi.SharedGalleryImageProperties + } + if sgi.SharedGalleryIdentifier != nil { + objectMap["identifier"] = sgi.SharedGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SharedGalleryImage struct. +func (sgi *SharedGalleryImage) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var sharedGalleryImageProperties SharedGalleryImageProperties + err = json.Unmarshal(*v, &sharedGalleryImageProperties) + if err != nil { + return err + } + sgi.SharedGalleryImageProperties = &sharedGalleryImageProperties + } + case "identifier": + if v != nil { + var sharedGalleryIdentifier SharedGalleryIdentifier + err = json.Unmarshal(*v, &sharedGalleryIdentifier) + if err != nil { + return err + } + sgi.SharedGalleryIdentifier = &sharedGalleryIdentifier + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sgi.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + sgi.Location = &location + } + } + } + + return nil +} + +// SharedGalleryImageList the List Shared Gallery Images operation response. +type SharedGalleryImageList struct { + autorest.Response `json:"-"` + // Value - A list of shared gallery images. + Value *[]SharedGalleryImage `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of shared gallery images. Call ListNext() with this to fetch the next page of shared gallery images. + NextLink *string `json:"nextLink,omitempty"` +} + +// SharedGalleryImageListIterator provides access to a complete listing of SharedGalleryImage values. +type SharedGalleryImageListIterator struct { + i int + page SharedGalleryImageListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SharedGalleryImageListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SharedGalleryImageListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SharedGalleryImageListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SharedGalleryImageListIterator) Response() SharedGalleryImageList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SharedGalleryImageListIterator) Value() SharedGalleryImage { + if !iter.page.NotDone() { + return SharedGalleryImage{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SharedGalleryImageListIterator type. +func NewSharedGalleryImageListIterator(page SharedGalleryImageListPage) SharedGalleryImageListIterator { + return SharedGalleryImageListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (sgil SharedGalleryImageList) IsEmpty() bool { + return sgil.Value == nil || len(*sgil.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (sgil SharedGalleryImageList) hasNextLink() bool { + return sgil.NextLink != nil && len(*sgil.NextLink) != 0 +} + +// sharedGalleryImageListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (sgil SharedGalleryImageList) sharedGalleryImageListPreparer(ctx context.Context) (*http.Request, error) { + if !sgil.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(sgil.NextLink))) +} + +// SharedGalleryImageListPage contains a page of SharedGalleryImage values. +type SharedGalleryImageListPage struct { + fn func(context.Context, SharedGalleryImageList) (SharedGalleryImageList, error) + sgil SharedGalleryImageList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SharedGalleryImageListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.sgil) + if err != nil { + return err + } + page.sgil = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SharedGalleryImageListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SharedGalleryImageListPage) NotDone() bool { + return !page.sgil.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SharedGalleryImageListPage) Response() SharedGalleryImageList { + return page.sgil +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SharedGalleryImageListPage) Values() []SharedGalleryImage { + if page.sgil.IsEmpty() { + return nil + } + return *page.sgil.Value +} + +// Creates a new instance of the SharedGalleryImageListPage type. +func NewSharedGalleryImageListPage(cur SharedGalleryImageList, getNextPage func(context.Context, SharedGalleryImageList) (SharedGalleryImageList, error)) SharedGalleryImageListPage { + return SharedGalleryImageListPage{ + fn: getNextPage, + sgil: cur, + } +} + +// SharedGalleryImageProperties describes the properties of a gallery image definition. +type SharedGalleryImageProperties struct { + // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

Possible values are:

**Windows**

**Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' + OsState OperatingSystemStateTypes `json:"osState,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` + Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` + Disallowed *Disallowed `json:"disallowed,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // Features - A list of gallery image features. + Features *[]GalleryImageFeature `json:"features,omitempty"` + PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` + // Architecture - Possible values include: 'X64', 'Arm64' + Architecture Architecture `json:"architecture,omitempty"` +} + +// SharedGalleryImageVersion specifies information about the gallery image version that you want to create +// or update. +type SharedGalleryImageVersion struct { + autorest.Response `json:"-"` + *SharedGalleryImageVersionProperties `json:"properties,omitempty"` + *SharedGalleryIdentifier `json:"identifier,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGalleryImageVersion. +func (sgiv SharedGalleryImageVersion) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sgiv.SharedGalleryImageVersionProperties != nil { + objectMap["properties"] = sgiv.SharedGalleryImageVersionProperties + } + if sgiv.SharedGalleryIdentifier != nil { + objectMap["identifier"] = sgiv.SharedGalleryIdentifier + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SharedGalleryImageVersion struct. +func (sgiv *SharedGalleryImageVersion) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var sharedGalleryImageVersionProperties SharedGalleryImageVersionProperties + err = json.Unmarshal(*v, &sharedGalleryImageVersionProperties) + if err != nil { + return err + } + sgiv.SharedGalleryImageVersionProperties = &sharedGalleryImageVersionProperties + } + case "identifier": + if v != nil { + var sharedGalleryIdentifier SharedGalleryIdentifier + err = json.Unmarshal(*v, &sharedGalleryIdentifier) + if err != nil { + return err + } + sgiv.SharedGalleryIdentifier = &sharedGalleryIdentifier + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sgiv.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + sgiv.Location = &location + } + } + } + + return nil +} + +// SharedGalleryImageVersionList the List Shared Gallery Image versions operation response. +type SharedGalleryImageVersionList struct { + autorest.Response `json:"-"` + // Value - A list of shared gallery images versions. + Value *[]SharedGalleryImageVersion `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of shared gallery image versions. Call ListNext() with this to fetch the next page of shared gallery image versions. + NextLink *string `json:"nextLink,omitempty"` +} + +// SharedGalleryImageVersionListIterator provides access to a complete listing of SharedGalleryImageVersion +// values. +type SharedGalleryImageVersionListIterator struct { + i int + page SharedGalleryImageVersionListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SharedGalleryImageVersionListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SharedGalleryImageVersionListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SharedGalleryImageVersionListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SharedGalleryImageVersionListIterator) Response() SharedGalleryImageVersionList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SharedGalleryImageVersionListIterator) Value() SharedGalleryImageVersion { + if !iter.page.NotDone() { + return SharedGalleryImageVersion{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SharedGalleryImageVersionListIterator type. +func NewSharedGalleryImageVersionListIterator(page SharedGalleryImageVersionListPage) SharedGalleryImageVersionListIterator { + return SharedGalleryImageVersionListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (sgivl SharedGalleryImageVersionList) IsEmpty() bool { + return sgivl.Value == nil || len(*sgivl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (sgivl SharedGalleryImageVersionList) hasNextLink() bool { + return sgivl.NextLink != nil && len(*sgivl.NextLink) != 0 +} + +// sharedGalleryImageVersionListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (sgivl SharedGalleryImageVersionList) sharedGalleryImageVersionListPreparer(ctx context.Context) (*http.Request, error) { + if !sgivl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(sgivl.NextLink))) +} + +// SharedGalleryImageVersionListPage contains a page of SharedGalleryImageVersion values. +type SharedGalleryImageVersionListPage struct { + fn func(context.Context, SharedGalleryImageVersionList) (SharedGalleryImageVersionList, error) + sgivl SharedGalleryImageVersionList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SharedGalleryImageVersionListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.sgivl) + if err != nil { + return err + } + page.sgivl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SharedGalleryImageVersionListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SharedGalleryImageVersionListPage) NotDone() bool { + return !page.sgivl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SharedGalleryImageVersionListPage) Response() SharedGalleryImageVersionList { + return page.sgivl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SharedGalleryImageVersionListPage) Values() []SharedGalleryImageVersion { + if page.sgivl.IsEmpty() { + return nil + } + return *page.sgivl.Value +} + +// Creates a new instance of the SharedGalleryImageVersionListPage type. +func NewSharedGalleryImageVersionListPage(cur SharedGalleryImageVersionList, getNextPage func(context.Context, SharedGalleryImageVersionList) (SharedGalleryImageVersionList, error)) SharedGalleryImageVersionListPage { + return SharedGalleryImageVersionListPage{ + fn: getNextPage, + sgivl: cur, + } +} + +// SharedGalleryImageVersionProperties describes the properties of a gallery image version. +type SharedGalleryImageVersionProperties struct { + // PublishedDate - The published date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // EndOfLifeDate - The end of life date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. + EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` + // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. + ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` + // StorageProfile - Describes the storage profile of the image version. + StorageProfile *SharedGalleryImageVersionStorageProfile `json:"storageProfile,omitempty"` +} + +// SharedGalleryImageVersionStorageProfile this is the storage profile of a Gallery Image Version. +type SharedGalleryImageVersionStorageProfile struct { + OsDiskImage *SharedGalleryOSDiskImage `json:"osDiskImage,omitempty"` + // DataDiskImages - A list of data disk images. + DataDiskImages *[]SharedGalleryDataDiskImage `json:"dataDiskImages,omitempty"` +} + +// SharedGalleryList the List Shared Galleries operation response. +type SharedGalleryList struct { + autorest.Response `json:"-"` + // Value - A list of shared galleries. + Value *[]SharedGallery `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of shared galleries. Call ListNext() with this to fetch the next page of shared galleries. + NextLink *string `json:"nextLink,omitempty"` +} + +// SharedGalleryListIterator provides access to a complete listing of SharedGallery values. +type SharedGalleryListIterator struct { + i int + page SharedGalleryListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SharedGalleryListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SharedGalleryListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SharedGalleryListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SharedGalleryListIterator) Response() SharedGalleryList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SharedGalleryListIterator) Value() SharedGallery { + if !iter.page.NotDone() { + return SharedGallery{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SharedGalleryListIterator type. +func NewSharedGalleryListIterator(page SharedGalleryListPage) SharedGalleryListIterator { + return SharedGalleryListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (sgl SharedGalleryList) IsEmpty() bool { + return sgl.Value == nil || len(*sgl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (sgl SharedGalleryList) hasNextLink() bool { + return sgl.NextLink != nil && len(*sgl.NextLink) != 0 +} + +// sharedGalleryListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (sgl SharedGalleryList) sharedGalleryListPreparer(ctx context.Context) (*http.Request, error) { + if !sgl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(sgl.NextLink))) +} + +// SharedGalleryListPage contains a page of SharedGallery values. +type SharedGalleryListPage struct { + fn func(context.Context, SharedGalleryList) (SharedGalleryList, error) + sgl SharedGalleryList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SharedGalleryListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.sgl) + if err != nil { + return err + } + page.sgl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SharedGalleryListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SharedGalleryListPage) NotDone() bool { + return !page.sgl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SharedGalleryListPage) Response() SharedGalleryList { + return page.sgl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SharedGalleryListPage) Values() []SharedGallery { + if page.sgl.IsEmpty() { + return nil + } + return *page.sgl.Value +} + +// Creates a new instance of the SharedGalleryListPage type. +func NewSharedGalleryListPage(cur SharedGalleryList, getNextPage func(context.Context, SharedGalleryList) (SharedGalleryList, error)) SharedGalleryListPage { + return SharedGalleryListPage{ + fn: getNextPage, + sgl: cur, + } +} + +// SharedGalleryOSDiskImage this is the OS disk image. +type SharedGalleryOSDiskImage struct { + // DiskSizeGB - READ-ONLY; This property indicates the size of the VHD to be created. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'SharedGalleryHostCachingNone', 'SharedGalleryHostCachingReadOnly', 'SharedGalleryHostCachingReadWrite' + HostCaching SharedGalleryHostCaching `json:"hostCaching,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharedGalleryOSDiskImage. +func (sgodi SharedGalleryOSDiskImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sgodi.HostCaching != "" { + objectMap["hostCaching"] = sgodi.HostCaching + } + return json.Marshal(objectMap) +} + +// ShareInfoElement ... +type ShareInfoElement struct { + // VMURI - READ-ONLY; A relative URI containing the ID of the VM that has the disk attached. + VMURI *string `json:"vmUri,omitempty"` +} + +// MarshalJSON is the custom marshaler for ShareInfoElement. +func (sie ShareInfoElement) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// SharingProfile profile for gallery sharing to subscription or tenant +type SharingProfile struct { + // Permissions - This property allows you to specify the permission of sharing gallery.

Possible values are:

**Private**

**Groups**

**Community**. Possible values include: 'Private', 'Groups', 'Community' + Permissions GallerySharingPermissionTypes `json:"permissions,omitempty"` + // Groups - READ-ONLY; A list of sharing profile groups. + Groups *[]SharingProfileGroup `json:"groups,omitempty"` + // CommunityGalleryInfo - Information of community gallery if current gallery is shared to community. + CommunityGalleryInfo *CommunityGalleryInfo `json:"communityGalleryInfo,omitempty"` +} + +// MarshalJSON is the custom marshaler for SharingProfile. +func (sp SharingProfile) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sp.Permissions != "" { + objectMap["permissions"] = sp.Permissions + } + if sp.CommunityGalleryInfo != nil { + objectMap["communityGalleryInfo"] = sp.CommunityGalleryInfo + } + return json.Marshal(objectMap) +} + +// SharingProfileGroup group of the gallery sharing profile +type SharingProfileGroup struct { + // Type - This property allows you to specify the type of sharing group.

Possible values are:

**Subscriptions**

**AADTenants**. Possible values include: 'Subscriptions', 'AADTenants' + Type SharingProfileGroupTypes `json:"type,omitempty"` + // Ids - A list of subscription/tenant ids the gallery is aimed to be shared to. + Ids *[]string `json:"ids,omitempty"` +} + +// SharingStatus sharing status of current gallery. +type SharingStatus struct { + // AggregatedState - Aggregated sharing state of current gallery. Possible values include: 'SharingStateSucceeded', 'SharingStateInProgress', 'SharingStateFailed', 'SharingStateUnknown' + AggregatedState SharingState `json:"aggregatedState,omitempty"` + // Summary - Summary of all regional sharing status. + Summary *[]RegionalSharingStatus `json:"summary,omitempty"` +} + +// SharingUpdate specifies information about the gallery sharing profile update. +type SharingUpdate struct { + autorest.Response `json:"-"` + // OperationType - This property allows you to specify the operation type of gallery sharing update.

Possible values are:

**Add**

**Remove**

**Reset**. Possible values include: 'Add', 'Remove', 'Reset', 'EnableCommunity' + OperationType SharingUpdateOperationTypes `json:"operationType,omitempty"` + // Groups - A list of sharing profile groups. + Groups *[]SharingProfileGroup `json:"groups,omitempty"` +} + +// Sku describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware +// the scale set is currently on, you need to deallocate the VMs in the scale set before you modify the SKU +// name. +type Sku struct { + // Name - The sku name. + Name *string `json:"name,omitempty"` + // Tier - Specifies the tier of virtual machines in a scale set.

Possible Values:

**Standard**

**Basic** + Tier *string `json:"tier,omitempty"` + // Capacity - Specifies the number of virtual machines in the scale set. + Capacity *int64 `json:"capacity,omitempty"` +} + +// Snapshot snapshot resource. +type Snapshot struct { + autorest.Response `json:"-"` + // ManagedBy - READ-ONLY; Unused. Always Null. + ManagedBy *string `json:"managedBy,omitempty"` + Sku *SnapshotSku `json:"sku,omitempty"` + // ExtendedLocation - The extended location where the snapshot will be created. Extended location cannot be changed. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + *SnapshotProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Snapshot. +func (s Snapshot) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if s.Sku != nil { + objectMap["sku"] = s.Sku + } + if s.ExtendedLocation != nil { + objectMap["extendedLocation"] = s.ExtendedLocation + } + if s.SnapshotProperties != nil { + objectMap["properties"] = s.SnapshotProperties + } + if s.Location != nil { + objectMap["location"] = s.Location + } + if s.Tags != nil { + objectMap["tags"] = s.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Snapshot struct. +func (s *Snapshot) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "managedBy": + if v != nil { + var managedBy string + err = json.Unmarshal(*v, &managedBy) + if err != nil { + return err + } + s.ManagedBy = &managedBy + } + case "sku": + if v != nil { + var sku SnapshotSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + s.Sku = &sku + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + s.ExtendedLocation = &extendedLocation + } + case "properties": + if v != nil { + var snapshotProperties SnapshotProperties + err = json.Unmarshal(*v, &snapshotProperties) + if err != nil { + return err + } + s.SnapshotProperties = &snapshotProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + s.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + s.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + s.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + s.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + s.Tags = tags + } + } + } + + return nil +} + +// SnapshotList the List Snapshots operation response. +type SnapshotList struct { + autorest.Response `json:"-"` + // Value - A list of snapshots. + Value *[]Snapshot `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of snapshots. Call ListNext() with this to fetch the next page of snapshots. + NextLink *string `json:"nextLink,omitempty"` +} + +// SnapshotListIterator provides access to a complete listing of Snapshot values. +type SnapshotListIterator struct { + i int + page SnapshotListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SnapshotListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SnapshotListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SnapshotListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SnapshotListIterator) Response() SnapshotList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SnapshotListIterator) Value() Snapshot { + if !iter.page.NotDone() { + return Snapshot{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SnapshotListIterator type. +func NewSnapshotListIterator(page SnapshotListPage) SnapshotListIterator { + return SnapshotListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (sl SnapshotList) IsEmpty() bool { + return sl.Value == nil || len(*sl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (sl SnapshotList) hasNextLink() bool { + return sl.NextLink != nil && len(*sl.NextLink) != 0 +} + +// snapshotListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (sl SnapshotList) snapshotListPreparer(ctx context.Context) (*http.Request, error) { + if !sl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(sl.NextLink))) +} + +// SnapshotListPage contains a page of Snapshot values. +type SnapshotListPage struct { + fn func(context.Context, SnapshotList) (SnapshotList, error) + sl SnapshotList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SnapshotListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.sl) + if err != nil { + return err + } + page.sl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SnapshotListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SnapshotListPage) NotDone() bool { + return !page.sl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SnapshotListPage) Response() SnapshotList { + return page.sl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SnapshotListPage) Values() []Snapshot { + if page.sl.IsEmpty() { + return nil + } + return *page.sl.Value +} + +// Creates a new instance of the SnapshotListPage type. +func NewSnapshotListPage(cur SnapshotList, getNextPage func(context.Context, SnapshotList) (SnapshotList, error)) SnapshotListPage { + return SnapshotListPage{ + fn: getNextPage, + sl: cur, + } +} + +// SnapshotProperties snapshot resource properties. +type SnapshotProperties struct { + // TimeCreated - READ-ONLY; The time when the snapshot was created. + TimeCreated *date.Time `json:"timeCreated,omitempty"` + // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' + HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` + // PurchasePlan - Purchase plan information for the image from which the source disk for the snapshot was originally created. + PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` + // SupportedCapabilities - List of supported capabilities for the image from which the source disk from the snapshot was originally created. + SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` + // CreationData - Disk source information. CreationData information cannot be changed after the disk has been created. + CreationData *CreationData `json:"creationData,omitempty"` + // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // DiskSizeBytes - READ-ONLY; The size of the disk in bytes. This field is read only. + DiskSizeBytes *int64 `json:"diskSizeBytes,omitempty"` + // DiskState - The state of the snapshot. Possible values include: 'Unattached', 'Attached', 'Reserved', 'Frozen', 'ActiveSAS', 'ActiveSASFrozen', 'ReadyToUpload', 'ActiveUpload' + DiskState DiskState `json:"diskState,omitempty"` + // UniqueID - READ-ONLY; Unique Guid identifying the resource. + UniqueID *string `json:"uniqueId,omitempty"` + // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. + EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` + // ProvisioningState - READ-ONLY; The disk provisioning state. + ProvisioningState *string `json:"provisioningState,omitempty"` + // Incremental - Whether a snapshot is incremental. Incremental snapshots on the same disk occupy less space than full snapshots and can be diffed. + Incremental *bool `json:"incremental,omitempty"` + // IncrementalSnapshotFamilyID - READ-ONLY; Incremental snapshots for a disk share an incremental snapshot family id. The Get Page Range Diff API can only be called on incremental snapshots with the same family id. + IncrementalSnapshotFamilyID *string `json:"incrementalSnapshotFamilyId,omitempty"` + // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. + Encryption *Encryption `json:"encryption,omitempty"` + // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' + NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. + DiskAccessID *string `json:"diskAccessId,omitempty"` + // SecurityProfile - Contains the security related information for the resource. + SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"` + // SupportsHibernation - Indicates the OS on a snapshot supports hibernation. + SupportsHibernation *bool `json:"supportsHibernation,omitempty"` + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` + // CompletionPercent - Percentage complete for the background copy when a resource is created via the CopyStart operation. + CompletionPercent *float64 `json:"completionPercent,omitempty"` + // CopyCompletionError - Indicates the error details if the background copy of a resource created via the CopyStart operation fails. + CopyCompletionError *CopyCompletionError `json:"copyCompletionError,omitempty"` + // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' + DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` +} + +// MarshalJSON is the custom marshaler for SnapshotProperties. +func (sp SnapshotProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sp.OsType != "" { + objectMap["osType"] = sp.OsType + } + if sp.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = sp.HyperVGeneration + } + if sp.PurchasePlan != nil { + objectMap["purchasePlan"] = sp.PurchasePlan + } + if sp.SupportedCapabilities != nil { + objectMap["supportedCapabilities"] = sp.SupportedCapabilities + } + if sp.CreationData != nil { + objectMap["creationData"] = sp.CreationData + } + if sp.DiskSizeGB != nil { + objectMap["diskSizeGB"] = sp.DiskSizeGB + } + if sp.DiskState != "" { + objectMap["diskState"] = sp.DiskState + } + if sp.EncryptionSettingsCollection != nil { + objectMap["encryptionSettingsCollection"] = sp.EncryptionSettingsCollection + } + if sp.Incremental != nil { + objectMap["incremental"] = sp.Incremental + } + if sp.Encryption != nil { + objectMap["encryption"] = sp.Encryption + } + if sp.NetworkAccessPolicy != "" { + objectMap["networkAccessPolicy"] = sp.NetworkAccessPolicy + } + if sp.DiskAccessID != nil { + objectMap["diskAccessId"] = sp.DiskAccessID + } + if sp.SecurityProfile != nil { + objectMap["securityProfile"] = sp.SecurityProfile + } + if sp.SupportsHibernation != nil { + objectMap["supportsHibernation"] = sp.SupportsHibernation + } + if sp.PublicNetworkAccess != "" { + objectMap["publicNetworkAccess"] = sp.PublicNetworkAccess + } + if sp.CompletionPercent != nil { + objectMap["completionPercent"] = sp.CompletionPercent + } + if sp.CopyCompletionError != nil { + objectMap["copyCompletionError"] = sp.CopyCompletionError + } + if sp.DataAccessAuthMode != "" { + objectMap["dataAccessAuthMode"] = sp.DataAccessAuthMode + } + return json.Marshal(objectMap) +} + +// SnapshotsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type SnapshotsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SnapshotsClient) (Snapshot, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SnapshotsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SnapshotsCreateOrUpdateFuture.Result. +func (future *SnapshotsCreateOrUpdateFuture) result(client SnapshotsClient) (s Snapshot, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + s.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.SnapshotsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { + s, err = client.CreateOrUpdateResponder(s.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request") + } + } + return +} + +// SnapshotsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type SnapshotsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SnapshotsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SnapshotsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SnapshotsDeleteFuture.Result. +func (future *SnapshotsDeleteFuture) result(client SnapshotsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.SnapshotsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// SnapshotsGrantAccessFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type SnapshotsGrantAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SnapshotsClient) (AccessURI, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SnapshotsGrantAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SnapshotsGrantAccessFuture.Result. +func (future *SnapshotsGrantAccessFuture) result(client SnapshotsClient) (au AccessURI, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsGrantAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + au.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.SnapshotsGrantAccessFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { + au, err = client.GrantAccessResponder(au.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") + } + } + return +} + +// SnapshotSku the snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS. This is an +// optional parameter for incremental snapshot and the default behavior is the SKU will be set to the same +// sku as the previous snapshot +type SnapshotSku struct { + // Name - The sku name. Possible values include: 'SnapshotStorageAccountTypesStandardLRS', 'SnapshotStorageAccountTypesPremiumLRS', 'SnapshotStorageAccountTypesStandardZRS' + Name SnapshotStorageAccountTypes `json:"name,omitempty"` + // Tier - READ-ONLY; The sku tier. + Tier *string `json:"tier,omitempty"` +} + +// MarshalJSON is the custom marshaler for SnapshotSku. +func (ss SnapshotSku) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ss.Name != "" { + objectMap["name"] = ss.Name + } + return json.Marshal(objectMap) +} + +// SnapshotsRevokeAccessFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type SnapshotsRevokeAccessFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SnapshotsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SnapshotsRevokeAccessFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SnapshotsRevokeAccessFuture.Result. +func (future *SnapshotsRevokeAccessFuture) result(client SnapshotsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsRevokeAccessFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.SnapshotsRevokeAccessFuture") + return + } + ar.Response = future.Response() + return +} + +// SnapshotsUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type SnapshotsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SnapshotsClient) (Snapshot, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SnapshotsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SnapshotsUpdateFuture.Result. +func (future *SnapshotsUpdateFuture) result(client SnapshotsClient) (s Snapshot, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + s.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.SnapshotsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { + s, err = client.UpdateResponder(s.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsUpdateFuture", "Result", s.Response.Response, "Failure responding to request") + } + } + return +} + +// SnapshotUpdate snapshot update resource. +type SnapshotUpdate struct { + *SnapshotUpdateProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` + Sku *SnapshotSku `json:"sku,omitempty"` +} + +// MarshalJSON is the custom marshaler for SnapshotUpdate. +func (su SnapshotUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if su.SnapshotUpdateProperties != nil { + objectMap["properties"] = su.SnapshotUpdateProperties + } + if su.Tags != nil { + objectMap["tags"] = su.Tags + } + if su.Sku != nil { + objectMap["sku"] = su.Sku + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SnapshotUpdate struct. +func (su *SnapshotUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var snapshotUpdateProperties SnapshotUpdateProperties + err = json.Unmarshal(*v, &snapshotUpdateProperties) + if err != nil { + return err + } + su.SnapshotUpdateProperties = &snapshotUpdateProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + su.Tags = tags + } + case "sku": + if v != nil { + var sku SnapshotSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + su.Sku = &sku + } + } + } + + return nil +} + +// SnapshotUpdateProperties snapshot resource update properties. +type SnapshotUpdateProperties struct { + // OsType - the Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. + EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` + // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. + Encryption *Encryption `json:"encryption,omitempty"` + // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' + NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. + DiskAccessID *string `json:"diskAccessId,omitempty"` + // SupportsHibernation - Indicates the OS on a snapshot supports hibernation. + SupportsHibernation *bool `json:"supportsHibernation,omitempty"` + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` + // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' + DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` + // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. + SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` +} + +// SoftDeletePolicy contains information about the soft deletion policy of the gallery. +type SoftDeletePolicy struct { + // IsSoftDeleteEnabled - Enables soft-deletion for resources in this gallery, allowing them to be recovered within retention time. + IsSoftDeleteEnabled *bool `json:"isSoftDeleteEnabled,omitempty"` +} + +// SourceVault the vault id is an Azure Resource Manager Resource id in the form +// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName} +type SourceVault struct { + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// SpotRestorePolicy specifies the Spot-Try-Restore properties for the virtual machine scale set.

+// With this property customer can enable or disable automatic restore of the evicted Spot VMSS VM +// instances opportunistically based on capacity availability and pricing constraint. +type SpotRestorePolicy struct { + // Enabled - Enables the Spot-Try-Restore feature where evicted VMSS SPOT instances will be tried to be restored opportunistically based on capacity availability and pricing constraints + Enabled *bool `json:"enabled,omitempty"` + // RestoreTimeout - Timeout value expressed as an ISO 8601 time duration after which the platform will not try to restore the VMSS SPOT instances + RestoreTimeout *string `json:"restoreTimeout,omitempty"` +} + +// SSHConfiguration SSH configuration for Linux based VMs running on Azure +type SSHConfiguration struct { + // PublicKeys - The list of SSH public keys used to authenticate with linux based VMs. + PublicKeys *[]SSHPublicKey `json:"publicKeys,omitempty"` +} + +// SSHPublicKey contains information about SSH certificate public key and the path on the Linux VM where +// the public key is placed. +type SSHPublicKey struct { + // Path - Specifies the full path on the created VM where ssh public key is stored. If the file already exists, the specified key is appended to the file. Example: /home/user/.ssh/authorized_keys + Path *string `json:"path,omitempty"` + // KeyData - SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format.

For creating ssh keys, see [Create SSH keys on Linux and Mac for Linux VMs in Azure]https://docs.microsoft.com/azure/virtual-machines/linux/create-ssh-keys-detailed). + KeyData *string `json:"keyData,omitempty"` +} + +// SSHPublicKeyGenerateKeyPairResult response from generation of an SSH key pair. +type SSHPublicKeyGenerateKeyPairResult struct { + autorest.Response `json:"-"` + // PrivateKey - Private key portion of the key pair used to authenticate to a virtual machine through ssh. The private key is returned in RFC3447 format and should be treated as a secret. + PrivateKey *string `json:"privateKey,omitempty"` + // PublicKey - Public key portion of the key pair used to authenticate to a virtual machine through ssh. The public key is in ssh-rsa format. + PublicKey *string `json:"publicKey,omitempty"` + // ID - The ARM resource id in the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName} + ID *string `json:"id,omitempty"` +} + +// SSHPublicKeyResource specifies information about the SSH public key. +type SSHPublicKeyResource struct { + autorest.Response `json:"-"` + // SSHPublicKeyResourceProperties - Properties of the SSH public key. + *SSHPublicKeyResourceProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for SSHPublicKeyResource. +func (spkr SSHPublicKeyResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if spkr.SSHPublicKeyResourceProperties != nil { + objectMap["properties"] = spkr.SSHPublicKeyResourceProperties + } + if spkr.Location != nil { + objectMap["location"] = spkr.Location + } + if spkr.Tags != nil { + objectMap["tags"] = spkr.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SSHPublicKeyResource struct. +func (spkr *SSHPublicKeyResource) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var SSHPublicKeyResourceProperties SSHPublicKeyResourceProperties + err = json.Unmarshal(*v, &SSHPublicKeyResourceProperties) + if err != nil { + return err + } + spkr.SSHPublicKeyResourceProperties = &SSHPublicKeyResourceProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + spkr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + spkr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + spkr.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + spkr.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + spkr.Tags = tags + } + } + } + + return nil +} + +// SSHPublicKeyResourceProperties properties of the SSH public key. +type SSHPublicKeyResourceProperties struct { + // PublicKey - SSH public key used to authenticate to a virtual machine through ssh. If this property is not initially provided when the resource is created, the publicKey property will be populated when generateKeyPair is called. If the public key is provided upon resource creation, the provided public key needs to be at least 2048-bit and in ssh-rsa format. + PublicKey *string `json:"publicKey,omitempty"` +} + +// SSHPublicKeysGroupListResult the list SSH public keys operation response. +type SSHPublicKeysGroupListResult struct { + autorest.Response `json:"-"` + // Value - The list of SSH public keys + Value *[]SSHPublicKeyResource `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of SSH public keys. Call ListNext() with this URI to fetch the next page of SSH public keys. + NextLink *string `json:"nextLink,omitempty"` +} + +// SSHPublicKeysGroupListResultIterator provides access to a complete listing of SSHPublicKeyResource +// values. +type SSHPublicKeysGroupListResultIterator struct { + i int + page SSHPublicKeysGroupListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SSHPublicKeysGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysGroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SSHPublicKeysGroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SSHPublicKeysGroupListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SSHPublicKeysGroupListResultIterator) Response() SSHPublicKeysGroupListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SSHPublicKeysGroupListResultIterator) Value() SSHPublicKeyResource { + if !iter.page.NotDone() { + return SSHPublicKeyResource{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SSHPublicKeysGroupListResultIterator type. +func NewSSHPublicKeysGroupListResultIterator(page SSHPublicKeysGroupListResultPage) SSHPublicKeysGroupListResultIterator { + return SSHPublicKeysGroupListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (spkglr SSHPublicKeysGroupListResult) IsEmpty() bool { + return spkglr.Value == nil || len(*spkglr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (spkglr SSHPublicKeysGroupListResult) hasNextLink() bool { + return spkglr.NextLink != nil && len(*spkglr.NextLink) != 0 +} + +// sSHPublicKeysGroupListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (spkglr SSHPublicKeysGroupListResult) sSHPublicKeysGroupListResultPreparer(ctx context.Context) (*http.Request, error) { + if !spkglr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(spkglr.NextLink))) +} + +// SSHPublicKeysGroupListResultPage contains a page of SSHPublicKeyResource values. +type SSHPublicKeysGroupListResultPage struct { + fn func(context.Context, SSHPublicKeysGroupListResult) (SSHPublicKeysGroupListResult, error) + spkglr SSHPublicKeysGroupListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SSHPublicKeysGroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysGroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.spkglr) + if err != nil { + return err + } + page.spkglr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SSHPublicKeysGroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SSHPublicKeysGroupListResultPage) NotDone() bool { + return !page.spkglr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SSHPublicKeysGroupListResultPage) Response() SSHPublicKeysGroupListResult { + return page.spkglr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SSHPublicKeysGroupListResultPage) Values() []SSHPublicKeyResource { + if page.spkglr.IsEmpty() { + return nil + } + return *page.spkglr.Value +} + +// Creates a new instance of the SSHPublicKeysGroupListResultPage type. +func NewSSHPublicKeysGroupListResultPage(cur SSHPublicKeysGroupListResult, getNextPage func(context.Context, SSHPublicKeysGroupListResult) (SSHPublicKeysGroupListResult, error)) SSHPublicKeysGroupListResultPage { + return SSHPublicKeysGroupListResultPage{ + fn: getNextPage, + spkglr: cur, + } +} + +// SSHPublicKeyUpdateResource specifies information about the SSH public key. +type SSHPublicKeyUpdateResource struct { + // SSHPublicKeyResourceProperties - Properties of the SSH public key. + *SSHPublicKeyResourceProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for SSHPublicKeyUpdateResource. +func (spkur SSHPublicKeyUpdateResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if spkur.SSHPublicKeyResourceProperties != nil { + objectMap["properties"] = spkur.SSHPublicKeyResourceProperties + } + if spkur.Tags != nil { + objectMap["tags"] = spkur.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SSHPublicKeyUpdateResource struct. +func (spkur *SSHPublicKeyUpdateResource) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var SSHPublicKeyResourceProperties SSHPublicKeyResourceProperties + err = json.Unmarshal(*v, &SSHPublicKeyResourceProperties) + if err != nil { + return err + } + spkur.SSHPublicKeyResourceProperties = &SSHPublicKeyResourceProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + spkur.Tags = tags + } + } + } + + return nil +} + +// StatusCodeCount the status code and count of the cloud service instance view statuses +type StatusCodeCount struct { + // Code - READ-ONLY; The instance view status code + Code *string `json:"code,omitempty"` + // Count - READ-ONLY; Number of instances having this status code + Count *int32 `json:"count,omitempty"` +} + +// MarshalJSON is the custom marshaler for StatusCodeCount. +func (scc StatusCodeCount) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// StorageProfile specifies the storage settings for the virtual machine disks. +type StorageProfile struct { + // ImageReference - Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. + ImageReference *ImageReference `json:"imageReference,omitempty"` + // OsDisk - Specifies information about the operating system disk used by the virtual machine.

For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + OsDisk *OSDisk `json:"osDisk,omitempty"` + // DataDisks - Specifies the parameters that are used to add a data disk to a virtual machine.

For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + DataDisks *[]DataDisk `json:"dataDisks,omitempty"` + // DiskControllerType - Specifies the disk controller type configured for the VM.

NOTE: This property will be set to the default disk controller type if not specified provided virtual machine is being created as a hyperVGeneration: V2 based on the capabilities of the operating system disk and VM size from the the specified minimum api version.
You need to deallocate the VM before updating its disk controller type unless you are updating the VM size in the VM configuration which implicitly deallocates and reallocates the VM.

Minimum api-version: 2022-08-01. Possible values include: 'SCSI', 'NVMe' + DiskControllerType DiskControllerTypes `json:"diskControllerType,omitempty"` +} + +// SubResource ... +type SubResource struct { + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// SubResourceReadOnly ... +type SubResourceReadOnly struct { + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for SubResourceReadOnly. +func (srro SubResourceReadOnly) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// SubResourceWithColocationStatus ... +type SubResourceWithColocationStatus struct { + // ColocationStatus - Describes colocation status of a resource in the Proximity Placement Group. + ColocationStatus *InstanceViewStatus `json:"colocationStatus,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// SupportedCapabilities list of supported capabilities persisted on the disk resource for VM use. +type SupportedCapabilities struct { + // DiskControllerTypes - The disk controllers that an OS disk supports. If set it can be SCSI or SCSI, NVME or NVME, SCSI. + DiskControllerTypes *string `json:"diskControllerTypes,omitempty"` + // AcceleratedNetwork - True if the image from which the OS disk is created supports accelerated networking. + AcceleratedNetwork *bool `json:"acceleratedNetwork,omitempty"` + // Architecture - CPU architecture supported by an OS disk. Possible values include: 'X64', 'Arm64' + Architecture Architecture `json:"architecture,omitempty"` +} + +// SystemData the system meta data relating to this resource. +type SystemData struct { + // CreatedAt - READ-ONLY; Specifies the time in UTC at which the Cloud Service (extended support) resource was created.
Minimum api-version: 2022-04-04. + CreatedAt *date.Time `json:"createdAt,omitempty"` + // LastModifiedAt - READ-ONLY; Specifies the time in UTC at which the Cloud Service (extended support) resource was last modified.
Minimum api-version: 2022-04-04. + LastModifiedAt *date.Time `json:"lastModifiedAt,omitempty"` +} + +// MarshalJSON is the custom marshaler for SystemData. +func (sd SystemData) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// TargetRegion describes the target region information. +type TargetRegion struct { + // Name - The name of the region. + Name *string `json:"name,omitempty"` + // RegionalReplicaCount - The number of replicas of the Image Version to be created per region. This property is updatable. + RegionalReplicaCount *int32 `json:"regionalReplicaCount,omitempty"` + // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' + StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` + Encryption *EncryptionImages `json:"encryption,omitempty"` +} + +// TerminateNotificationProfile ... +type TerminateNotificationProfile struct { + // NotBeforeTimeout - Configurable length of time a Virtual Machine being deleted will have to potentially approve the Terminate Scheduled Event before the event is auto approved (timed out). The configuration must be specified in ISO 8601 format, the default value is 5 minutes (PT5M) + NotBeforeTimeout *string `json:"notBeforeTimeout,omitempty"` + // Enable - Specifies whether the Terminate Scheduled event is enabled or disabled. + Enable *bool `json:"enable,omitempty"` +} + +// ThrottledRequestsInput api request input for LogAnalytics getThrottledRequests Api. +type ThrottledRequestsInput struct { + // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. + BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` + // FromTime - From time of the query + FromTime *date.Time `json:"fromTime,omitempty"` + // ToTime - To time of the query + ToTime *date.Time `json:"toTime,omitempty"` + // GroupByThrottlePolicy - Group query result by Throttle Policy applied. + GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` + // GroupByOperationName - Group query result by Operation Name. + GroupByOperationName *bool `json:"groupByOperationName,omitempty"` + // GroupByResourceName - Group query result by Resource Name. + GroupByResourceName *bool `json:"groupByResourceName,omitempty"` + // GroupByClientApplicationID - Group query result by Client Application ID. + GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` + // GroupByUserAgent - Group query result by User Agent. + GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` +} + +// UefiSettings specifies the security settings like secure boot and vTPM used while creating the virtual +// machine.

Minimum api-version: 2020-12-01 +type UefiSettings struct { + // SecureBootEnabled - Specifies whether secure boot should be enabled on the virtual machine.

Minimum api-version: 2020-12-01 + SecureBootEnabled *bool `json:"secureBootEnabled,omitempty"` + // VTpmEnabled - Specifies whether vTPM should be enabled on the virtual machine.

Minimum api-version: 2020-12-01 + VTpmEnabled *bool `json:"vTpmEnabled,omitempty"` +} + +// UpdateDomain defines an update domain for the cloud service. +type UpdateDomain struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource Name + Name *string `json:"name,omitempty"` +} + +// MarshalJSON is the custom marshaler for UpdateDomain. +func (ud UpdateDomain) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// UpdateDomainListResult the list operation result. +type UpdateDomainListResult struct { + autorest.Response `json:"-"` + // Value - The list of resources. + Value *[]UpdateDomain `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of resources. Use this to get the next page of resources. Do this till nextLink is null to fetch all the resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// UpdateDomainListResultIterator provides access to a complete listing of UpdateDomain values. +type UpdateDomainListResultIterator struct { + i int + page UpdateDomainListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *UpdateDomainListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UpdateDomainListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *UpdateDomainListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter UpdateDomainListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter UpdateDomainListResultIterator) Response() UpdateDomainListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter UpdateDomainListResultIterator) Value() UpdateDomain { + if !iter.page.NotDone() { + return UpdateDomain{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the UpdateDomainListResultIterator type. +func NewUpdateDomainListResultIterator(page UpdateDomainListResultPage) UpdateDomainListResultIterator { + return UpdateDomainListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (udlr UpdateDomainListResult) IsEmpty() bool { + return udlr.Value == nil || len(*udlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (udlr UpdateDomainListResult) hasNextLink() bool { + return udlr.NextLink != nil && len(*udlr.NextLink) != 0 +} + +// updateDomainListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (udlr UpdateDomainListResult) updateDomainListResultPreparer(ctx context.Context) (*http.Request, error) { + if !udlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(udlr.NextLink))) +} + +// UpdateDomainListResultPage contains a page of UpdateDomain values. +type UpdateDomainListResultPage struct { + fn func(context.Context, UpdateDomainListResult) (UpdateDomainListResult, error) + udlr UpdateDomainListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *UpdateDomainListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UpdateDomainListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.udlr) + if err != nil { + return err + } + page.udlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *UpdateDomainListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page UpdateDomainListResultPage) NotDone() bool { + return !page.udlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page UpdateDomainListResultPage) Response() UpdateDomainListResult { + return page.udlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page UpdateDomainListResultPage) Values() []UpdateDomain { + if page.udlr.IsEmpty() { + return nil + } + return *page.udlr.Value +} + +// Creates a new instance of the UpdateDomainListResultPage type. +func NewUpdateDomainListResultPage(cur UpdateDomainListResult, getNextPage func(context.Context, UpdateDomainListResult) (UpdateDomainListResult, error)) UpdateDomainListResultPage { + return UpdateDomainListResultPage{ + fn: getNextPage, + udlr: cur, + } +} + +// UpdateResource the Update Resource model definition. +type UpdateResource struct { + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for UpdateResource. +func (ur UpdateResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ur.Tags != nil { + objectMap["tags"] = ur.Tags + } + return json.Marshal(objectMap) +} + +// UpdateResourceDefinition the Update Resource model definition. +type UpdateResourceDefinition struct { + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for UpdateResourceDefinition. +func (urd UpdateResourceDefinition) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if urd.Tags != nil { + objectMap["tags"] = urd.Tags + } + return json.Marshal(objectMap) +} + +// UpgradeOperationHistoricalStatusInfo virtual Machine Scale Set OS Upgrade History operation response. +type UpgradeOperationHistoricalStatusInfo struct { + // Properties - READ-ONLY; Information about the properties of the upgrade operation. + Properties *UpgradeOperationHistoricalStatusInfoProperties `json:"properties,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - READ-ONLY; Resource location + Location *string `json:"location,omitempty"` +} + +// MarshalJSON is the custom marshaler for UpgradeOperationHistoricalStatusInfo. +func (uohsi UpgradeOperationHistoricalStatusInfo) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// UpgradeOperationHistoricalStatusInfoProperties describes each OS upgrade on the Virtual Machine Scale +// Set. +type UpgradeOperationHistoricalStatusInfoProperties struct { + // RunningStatus - READ-ONLY; Information about the overall status of the upgrade operation. + RunningStatus *UpgradeOperationHistoryStatus `json:"runningStatus,omitempty"` + // Progress - READ-ONLY; Counts of the VMs in each state. + Progress *RollingUpgradeProgressInfo `json:"progress,omitempty"` + // Error - READ-ONLY; Error Details for this upgrade if there are any. + Error *APIError `json:"error,omitempty"` + // StartedBy - READ-ONLY; Invoker of the Upgrade Operation. Possible values include: 'UpgradeOperationInvokerUnknown', 'UpgradeOperationInvokerUser', 'UpgradeOperationInvokerPlatform' + StartedBy UpgradeOperationInvoker `json:"startedBy,omitempty"` + // TargetImageReference - READ-ONLY; Image Reference details + TargetImageReference *ImageReference `json:"targetImageReference,omitempty"` + // RollbackInfo - READ-ONLY; Information about OS rollback if performed + RollbackInfo *RollbackStatusInfo `json:"rollbackInfo,omitempty"` +} + +// MarshalJSON is the custom marshaler for UpgradeOperationHistoricalStatusInfoProperties. +func (uohsip UpgradeOperationHistoricalStatusInfoProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// UpgradeOperationHistoryStatus information about the current running state of the overall upgrade. +type UpgradeOperationHistoryStatus struct { + // Code - READ-ONLY; Code indicating the current status of the upgrade. Possible values include: 'UpgradeStateRollingForward', 'UpgradeStateCancelled', 'UpgradeStateCompleted', 'UpgradeStateFaulted' + Code UpgradeState `json:"code,omitempty"` + // StartTime - READ-ONLY; Start time of the upgrade. + StartTime *date.Time `json:"startTime,omitempty"` + // EndTime - READ-ONLY; End time of the upgrade. + EndTime *date.Time `json:"endTime,omitempty"` +} + +// MarshalJSON is the custom marshaler for UpgradeOperationHistoryStatus. +func (uohs UpgradeOperationHistoryStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// UpgradePolicy describes an upgrade policy - automatic, manual, or rolling. +type UpgradePolicy struct { + // Mode - Specifies the mode of an upgrade to virtual machines in the scale set.

Possible values are:

**Manual** - You control the application of updates to virtual machines in the scale set. You do this by using the manualUpgrade action.

**Automatic** - All virtual machines in the scale set are automatically updated at the same time. Possible values include: 'UpgradeModeAutomatic', 'UpgradeModeManual', 'UpgradeModeRolling' + Mode UpgradeMode `json:"mode,omitempty"` + // RollingUpgradePolicy - The configuration parameters used while performing a rolling upgrade. + RollingUpgradePolicy *RollingUpgradePolicy `json:"rollingUpgradePolicy,omitempty"` + // AutomaticOSUpgradePolicy - Configuration parameters used for performing automatic OS Upgrade. + AutomaticOSUpgradePolicy *AutomaticOSUpgradePolicy `json:"automaticOSUpgradePolicy,omitempty"` +} + +// Usage describes Compute Resource Usage. +type Usage struct { + // Unit - An enum describing the unit of usage measurement. + Unit *string `json:"unit,omitempty"` + // CurrentValue - The current usage of the resource. + CurrentValue *int32 `json:"currentValue,omitempty"` + // Limit - The maximum permitted usage of the resource. + Limit *int64 `json:"limit,omitempty"` + // Name - The name of the type of usage. + Name *UsageName `json:"name,omitempty"` +} + +// UsageName the Usage Names. +type UsageName struct { + // Value - The name of the resource. + Value *string `json:"value,omitempty"` + // LocalizedValue - The localized name of the resource. + LocalizedValue *string `json:"localizedValue,omitempty"` +} + +// UserArtifactManage ... +type UserArtifactManage struct { + // Install - Required. The path and arguments to install the gallery application. This is limited to 4096 characters. + Install *string `json:"install,omitempty"` + // Remove - Required. The path and arguments to remove the gallery application. This is limited to 4096 characters. + Remove *string `json:"remove,omitempty"` + // Update - Optional. The path and arguments to update the gallery application. If not present, then update operation will invoke remove command on the previous version and install command on the current version of the gallery application. This is limited to 4096 characters. + Update *string `json:"update,omitempty"` +} + +// UserArtifactSettings additional settings for the VM app that contains the target package and config file +// name when it is deployed to target VM or VM scale set. +type UserArtifactSettings struct { + // PackageFileName - Optional. The name to assign the downloaded package file on the VM. This is limited to 4096 characters. If not specified, the package file will be named the same as the Gallery Application name. + PackageFileName *string `json:"packageFileName,omitempty"` + // ConfigFileName - Optional. The name to assign the downloaded config file on the VM. This is limited to 4096 characters. If not specified, the config file will be named the Gallery Application name appended with "_config". + ConfigFileName *string `json:"configFileName,omitempty"` +} + +// UserArtifactSource the source image from which the Image Version is going to be created. +type UserArtifactSource struct { + // MediaLink - Required. The mediaLink of the artifact, must be a readable storage page blob. + MediaLink *string `json:"mediaLink,omitempty"` + // DefaultConfigurationLink - Optional. The defaultConfigurationLink of the artifact, must be a readable storage page blob. + DefaultConfigurationLink *string `json:"defaultConfigurationLink,omitempty"` +} + +// UserAssignedIdentitiesValue ... +type UserAssignedIdentitiesValue struct { + // PrincipalID - READ-ONLY; The principal id of user assigned identity. + PrincipalID *string `json:"principalId,omitempty"` + // ClientID - READ-ONLY; The client id of user assigned identity. + ClientID *string `json:"clientId,omitempty"` +} + +// MarshalJSON is the custom marshaler for UserAssignedIdentitiesValue. +func (uaiv UserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VaultCertificate describes a single certificate reference in a Key Vault, and where the certificate +// should reside on the VM. +type VaultCertificate struct { + // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8:

{
"data":"",
"dataType":"pfx",
"password":""
}
To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). + CertificateURL *string `json:"certificateUrl,omitempty"` + // CertificateStore - For Windows VMs, specifies the certificate store on the Virtual Machine to which the certificate should be added. The specified certificate store is implicitly in the LocalMachine account.

For Linux VMs, the certificate file is placed under the /var/lib/waagent directory, with the file name <UppercaseThumbprint>.crt for the X509 certificate file and <UppercaseThumbprint>.prv for private key. Both of these files are .pem formatted. + CertificateStore *string `json:"certificateStore,omitempty"` +} + +// VaultSecretGroup describes a set of certificates which are all in the same Key Vault. +type VaultSecretGroup struct { + // SourceVault - The relative URL of the Key Vault containing all of the certificates in VaultCertificates. + SourceVault *SubResource `json:"sourceVault,omitempty"` + // VaultCertificates - The list of key vault references in SourceVault which contain certificates. + VaultCertificates *[]VaultCertificate `json:"vaultCertificates,omitempty"` +} + +// VirtualHardDisk describes the uri of a disk. +type VirtualHardDisk struct { + // URI - Specifies the virtual hard disk's uri. + URI *string `json:"uri,omitempty"` +} + +// VirtualMachine describes a Virtual Machine. +type VirtualMachine struct { + autorest.Response `json:"-"` + // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. + Plan *Plan `json:"plan,omitempty"` + *VirtualMachineProperties `json:"properties,omitempty"` + // Resources - READ-ONLY; The virtual machine child extension resources. + Resources *[]VirtualMachineExtension `json:"resources,omitempty"` + // Identity - The identity of the virtual machine, if configured. + Identity *VirtualMachineIdentity `json:"identity,omitempty"` + // Zones - The virtual machine zones. + Zones *[]string `json:"zones,omitempty"` + // ExtendedLocation - The extended location of the Virtual Machine. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachine. +func (VM VirtualMachine) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if VM.Plan != nil { + objectMap["plan"] = VM.Plan + } + if VM.VirtualMachineProperties != nil { + objectMap["properties"] = VM.VirtualMachineProperties + } + if VM.Identity != nil { + objectMap["identity"] = VM.Identity + } + if VM.Zones != nil { + objectMap["zones"] = VM.Zones + } + if VM.ExtendedLocation != nil { + objectMap["extendedLocation"] = VM.ExtendedLocation + } + if VM.Location != nil { + objectMap["location"] = VM.Location + } + if VM.Tags != nil { + objectMap["tags"] = VM.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachine struct. +func (VM *VirtualMachine) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "plan": + if v != nil { + var plan Plan + err = json.Unmarshal(*v, &plan) + if err != nil { + return err + } + VM.Plan = &plan + } + case "properties": + if v != nil { + var virtualMachineProperties VirtualMachineProperties + err = json.Unmarshal(*v, &virtualMachineProperties) + if err != nil { + return err + } + VM.VirtualMachineProperties = &virtualMachineProperties + } + case "resources": + if v != nil { + var resources []VirtualMachineExtension + err = json.Unmarshal(*v, &resources) + if err != nil { + return err + } + VM.Resources = &resources + } + case "identity": + if v != nil { + var identity VirtualMachineIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + VM.Identity = &identity + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + VM.Zones = &zones + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + VM.ExtendedLocation = &extendedLocation + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + VM.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + VM.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + VM.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + VM.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + VM.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineAgentInstanceView the instance view of the VM Agent running on the virtual machine. +type VirtualMachineAgentInstanceView struct { + // VMAgentVersion - The VM Agent full version. + VMAgentVersion *string `json:"vmAgentVersion,omitempty"` + // ExtensionHandlers - The virtual machine extension handler instance view. + ExtensionHandlers *[]VirtualMachineExtensionHandlerInstanceView `json:"extensionHandlers,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// VirtualMachineAssessPatchesResult describes the properties of an AssessPatches result. +type VirtualMachineAssessPatchesResult struct { + autorest.Response `json:"-"` + // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' + Status PatchOperationStatus `json:"status,omitempty"` + // AssessmentActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. + AssessmentActivityID *string `json:"assessmentActivityId,omitempty"` + // RebootPending - READ-ONLY; The overall reboot status of the VM. It will be true when partially installed patches require a reboot to complete installation but the reboot has not yet occurred. + RebootPending *bool `json:"rebootPending,omitempty"` + // CriticalAndSecurityPatchCount - READ-ONLY; The number of critical or security patches that have been detected as available and not yet installed. + CriticalAndSecurityPatchCount *int32 `json:"criticalAndSecurityPatchCount,omitempty"` + // OtherPatchCount - READ-ONLY; The number of all available patches excluding critical and security. + OtherPatchCount *int32 `json:"otherPatchCount,omitempty"` + // StartDateTime - READ-ONLY; The UTC timestamp when the operation began. + StartDateTime *date.Time `json:"startDateTime,omitempty"` + // AvailablePatches - READ-ONLY; The list of patches that have been detected as available for installation. + AvailablePatches *[]VirtualMachineSoftwarePatchProperties `json:"availablePatches,omitempty"` + // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. + Error *APIError `json:"error,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineAssessPatchesResult. +func (vmapr VirtualMachineAssessPatchesResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineCaptureParameters capture Virtual Machine parameters. +type VirtualMachineCaptureParameters struct { + // VhdPrefix - The captured virtual hard disk's name prefix. + VhdPrefix *string `json:"vhdPrefix,omitempty"` + // DestinationContainerName - The destination container name. + DestinationContainerName *string `json:"destinationContainerName,omitempty"` + // OverwriteVhds - Specifies whether to overwrite the destination virtual hard disk, in case of conflict. + OverwriteVhds *bool `json:"overwriteVhds,omitempty"` +} + +// VirtualMachineCaptureResult output of virtual machine capture operation. +type VirtualMachineCaptureResult struct { + autorest.Response `json:"-"` + // Schema - READ-ONLY; the schema of the captured virtual machine + Schema *string `json:"$schema,omitempty"` + // ContentVersion - READ-ONLY; the version of the content + ContentVersion *string `json:"contentVersion,omitempty"` + // Parameters - READ-ONLY; parameters of the captured virtual machine + Parameters interface{} `json:"parameters,omitempty"` + // Resources - READ-ONLY; a list of resource items of the captured virtual machine + Resources *[]interface{} `json:"resources,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineCaptureResult. +func (vmcr VirtualMachineCaptureResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmcr.ID != nil { + objectMap["id"] = vmcr.ID + } + return json.Marshal(objectMap) +} + +// VirtualMachineExtension describes a Virtual Machine Extension. +type VirtualMachineExtension struct { + autorest.Response `json:"-"` + *VirtualMachineExtensionProperties `json:"properties,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineExtension. +func (vme VirtualMachineExtension) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vme.VirtualMachineExtensionProperties != nil { + objectMap["properties"] = vme.VirtualMachineExtensionProperties + } + if vme.Location != nil { + objectMap["location"] = vme.Location + } + if vme.Tags != nil { + objectMap["tags"] = vme.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtension struct. +func (vme *VirtualMachineExtension) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineExtensionProperties VirtualMachineExtensionProperties + err = json.Unmarshal(*v, &virtualMachineExtensionProperties) + if err != nil { + return err + } + vme.VirtualMachineExtensionProperties = &virtualMachineExtensionProperties + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vme.Location = &location + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vme.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vme.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vme.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vme.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineExtensionHandlerInstanceView the instance view of a virtual machine extension handler. +type VirtualMachineExtensionHandlerInstanceView struct { + // Type - Specifies the type of the extension; an example is "CustomScriptExtension". + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the script handler. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // Status - The extension handler status. + Status *InstanceViewStatus `json:"status,omitempty"` +} + +// VirtualMachineExtensionImage describes a Virtual Machine Extension Image. +type VirtualMachineExtensionImage struct { + autorest.Response `json:"-"` + *VirtualMachineExtensionImageProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineExtensionImage. +func (vmei VirtualMachineExtensionImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmei.VirtualMachineExtensionImageProperties != nil { + objectMap["properties"] = vmei.VirtualMachineExtensionImageProperties + } + if vmei.Location != nil { + objectMap["location"] = vmei.Location + } + if vmei.Tags != nil { + objectMap["tags"] = vmei.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtensionImage struct. +func (vmei *VirtualMachineExtensionImage) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineExtensionImageProperties VirtualMachineExtensionImageProperties + err = json.Unmarshal(*v, &virtualMachineExtensionImageProperties) + if err != nil { + return err + } + vmei.VirtualMachineExtensionImageProperties = &virtualMachineExtensionImageProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmei.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmei.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmei.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vmei.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmei.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineExtensionImageProperties describes the properties of a Virtual Machine Extension Image. +type VirtualMachineExtensionImageProperties struct { + // OperatingSystem - The operating system this extension supports. + OperatingSystem *string `json:"operatingSystem,omitempty"` + // ComputeRole - The type of role (IaaS or PaaS) this extension supports. + ComputeRole *string `json:"computeRole,omitempty"` + // HandlerSchema - The schema defined by publisher, where extension consumers should provide settings in a matching schema. + HandlerSchema *string `json:"handlerSchema,omitempty"` + // VMScaleSetEnabled - Whether the extension can be used on xRP VMScaleSets. By default existing extensions are usable on scalesets, but there might be cases where a publisher wants to explicitly indicate the extension is only enabled for CRP VMs but not VMSS. + VMScaleSetEnabled *bool `json:"vmScaleSetEnabled,omitempty"` + // SupportsMultipleExtensions - Whether the handler can support multiple extensions. + SupportsMultipleExtensions *bool `json:"supportsMultipleExtensions,omitempty"` +} + +// VirtualMachineExtensionInstanceView the instance view of a virtual machine extension. +type VirtualMachineExtensionInstanceView struct { + // Name - The virtual machine extension name. + Name *string `json:"name,omitempty"` + // Type - Specifies the type of the extension; an example is "CustomScriptExtension". + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the script handler. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // Substatuses - The resource status information. + Substatuses *[]InstanceViewStatus `json:"substatuses,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// VirtualMachineExtensionProperties describes the properties of a Virtual Machine Extension. +type VirtualMachineExtensionProperties struct { + // ForceUpdateTag - How the extension handler should be forced to update even if the extension configuration has not changed. + ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` + // Publisher - The name of the extension handler publisher. + Publisher *string `json:"publisher,omitempty"` + // Type - Specifies the type of the extension; an example is "CustomScriptExtension". + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the script handler. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. + AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` + // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. + EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` + // Settings - Json formatted public settings for the extension. + Settings interface{} `json:"settings,omitempty"` + // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. + ProtectedSettings interface{} `json:"protectedSettings,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // InstanceView - The virtual machine extension instance view. + InstanceView *VirtualMachineExtensionInstanceView `json:"instanceView,omitempty"` + // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. + SuppressFailures *bool `json:"suppressFailures,omitempty"` + // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault + ProtectedSettingsFromKeyVault *KeyVaultSecretReference `json:"protectedSettingsFromKeyVault,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineExtensionProperties. +func (vmep VirtualMachineExtensionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmep.ForceUpdateTag != nil { + objectMap["forceUpdateTag"] = vmep.ForceUpdateTag + } + if vmep.Publisher != nil { + objectMap["publisher"] = vmep.Publisher + } + if vmep.Type != nil { + objectMap["type"] = vmep.Type + } + if vmep.TypeHandlerVersion != nil { + objectMap["typeHandlerVersion"] = vmep.TypeHandlerVersion + } + if vmep.AutoUpgradeMinorVersion != nil { + objectMap["autoUpgradeMinorVersion"] = vmep.AutoUpgradeMinorVersion + } + if vmep.EnableAutomaticUpgrade != nil { + objectMap["enableAutomaticUpgrade"] = vmep.EnableAutomaticUpgrade + } + if vmep.Settings != nil { + objectMap["settings"] = vmep.Settings + } + if vmep.ProtectedSettings != nil { + objectMap["protectedSettings"] = vmep.ProtectedSettings + } + if vmep.InstanceView != nil { + objectMap["instanceView"] = vmep.InstanceView + } + if vmep.SuppressFailures != nil { + objectMap["suppressFailures"] = vmep.SuppressFailures + } + if vmep.ProtectedSettingsFromKeyVault != nil { + objectMap["protectedSettingsFromKeyVault"] = vmep.ProtectedSettingsFromKeyVault + } + return json.Marshal(objectMap) +} + +// VirtualMachineExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineExtensionsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineExtensionsClient) (VirtualMachineExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineExtensionsCreateOrUpdateFuture.Result. +func (future *VirtualMachineExtensionsCreateOrUpdateFuture) result(client VirtualMachineExtensionsClient) (vme VirtualMachineExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vme.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vme.Response.Response, err = future.GetResult(sender); err == nil && vme.Response.Response.StatusCode != http.StatusNoContent { + vme, err = client.CreateOrUpdateResponder(vme.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsCreateOrUpdateFuture", "Result", vme.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineExtensionsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineExtensionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineExtensionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineExtensionsDeleteFuture.Result. +func (future *VirtualMachineExtensionsDeleteFuture) result(client VirtualMachineExtensionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineExtensionsListResult the List Extension operation response +type VirtualMachineExtensionsListResult struct { + autorest.Response `json:"-"` + // Value - The list of extensions + Value *[]VirtualMachineExtension `json:"value,omitempty"` +} + +// VirtualMachineExtensionsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineExtensionsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineExtensionsClient) (VirtualMachineExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineExtensionsUpdateFuture.Result. +func (future *VirtualMachineExtensionsUpdateFuture) result(client VirtualMachineExtensionsClient) (vme VirtualMachineExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vme.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vme.Response.Response, err = future.GetResult(sender); err == nil && vme.Response.Response.StatusCode != http.StatusNoContent { + vme, err = client.UpdateResponder(vme.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsUpdateFuture", "Result", vme.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineExtensionUpdate describes a Virtual Machine Extension. +type VirtualMachineExtensionUpdate struct { + *VirtualMachineExtensionUpdateProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineExtensionUpdate. +func (vmeu VirtualMachineExtensionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmeu.VirtualMachineExtensionUpdateProperties != nil { + objectMap["properties"] = vmeu.VirtualMachineExtensionUpdateProperties + } + if vmeu.Tags != nil { + objectMap["tags"] = vmeu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtensionUpdate struct. +func (vmeu *VirtualMachineExtensionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineExtensionUpdateProperties VirtualMachineExtensionUpdateProperties + err = json.Unmarshal(*v, &virtualMachineExtensionUpdateProperties) + if err != nil { + return err + } + vmeu.VirtualMachineExtensionUpdateProperties = &virtualMachineExtensionUpdateProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmeu.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineExtensionUpdateProperties describes the properties of a Virtual Machine Extension. +type VirtualMachineExtensionUpdateProperties struct { + // ForceUpdateTag - How the extension handler should be forced to update even if the extension configuration has not changed. + ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` + // Publisher - The name of the extension handler publisher. + Publisher *string `json:"publisher,omitempty"` + // Type - Specifies the type of the extension; an example is "CustomScriptExtension". + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the script handler. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. + AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` + // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. + EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` + // Settings - Json formatted public settings for the extension. + Settings interface{} `json:"settings,omitempty"` + // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. + ProtectedSettings interface{} `json:"protectedSettings,omitempty"` + // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. + SuppressFailures *bool `json:"suppressFailures,omitempty"` + // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault + ProtectedSettingsFromKeyVault *KeyVaultSecretReference `json:"protectedSettingsFromKeyVault,omitempty"` +} + +// VirtualMachineHealthStatus the health status of the VM. +type VirtualMachineHealthStatus struct { + // Status - READ-ONLY; The health status information for the VM. + Status *InstanceViewStatus `json:"status,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineHealthStatus. +func (vmhs VirtualMachineHealthStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineIdentity identity for the virtual machine. +type VirtualMachineIdentity struct { + // PrincipalID - READ-ONLY; The principal id of virtual machine identity. This property will only be provided for a system assigned identity. + PrincipalID *string `json:"principalId,omitempty"` + // TenantID - READ-ONLY; The tenant id associated with the virtual machine. This property will only be provided for a system assigned identity. + TenantID *string `json:"tenantId,omitempty"` + // Type - The type of identity used for the virtual machine. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' + Type ResourceIdentityType `json:"type,omitempty"` + // UserAssignedIdentities - The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + UserAssignedIdentities map[string]*UserAssignedIdentitiesValue `json:"userAssignedIdentities"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineIdentity. +func (vmi VirtualMachineIdentity) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmi.Type != "" { + objectMap["type"] = vmi.Type + } + if vmi.UserAssignedIdentities != nil { + objectMap["userAssignedIdentities"] = vmi.UserAssignedIdentities + } + return json.Marshal(objectMap) +} + +// VirtualMachineImage describes a Virtual Machine Image. +type VirtualMachineImage struct { + autorest.Response `json:"-"` + *VirtualMachineImageProperties `json:"properties,omitempty"` + // Name - The name of the resource. + Name *string `json:"name,omitempty"` + // Location - The supported Azure location of the resource. + Location *string `json:"location,omitempty"` + // Tags - Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md). + Tags map[string]*string `json:"tags"` + // ExtendedLocation - The extended location of the Virtual Machine. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineImage. +func (vmi VirtualMachineImage) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmi.VirtualMachineImageProperties != nil { + objectMap["properties"] = vmi.VirtualMachineImageProperties + } + if vmi.Name != nil { + objectMap["name"] = vmi.Name + } + if vmi.Location != nil { + objectMap["location"] = vmi.Location + } + if vmi.Tags != nil { + objectMap["tags"] = vmi.Tags + } + if vmi.ExtendedLocation != nil { + objectMap["extendedLocation"] = vmi.ExtendedLocation + } + if vmi.ID != nil { + objectMap["id"] = vmi.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineImage struct. +func (vmi *VirtualMachineImage) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineImageProperties VirtualMachineImageProperties + err = json.Unmarshal(*v, &virtualMachineImageProperties) + if err != nil { + return err + } + vmi.VirtualMachineImageProperties = &virtualMachineImageProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmi.Name = &name + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vmi.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmi.Tags = tags + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + vmi.ExtendedLocation = &extendedLocation + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmi.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineImageFeature specifies additional capabilities supported by the image +type VirtualMachineImageFeature struct { + // Name - The name of the feature. + Name *string `json:"name,omitempty"` + // Value - The corresponding value for the feature. + Value *string `json:"value,omitempty"` +} + +// VirtualMachineImageProperties describes the properties of a Virtual Machine Image. +type VirtualMachineImageProperties struct { + Plan *PurchasePlan `json:"plan,omitempty"` + OsDiskImage *OSDiskImage `json:"osDiskImage,omitempty"` + DataDiskImages *[]DataDiskImage `json:"dataDiskImages,omitempty"` + AutomaticOSUpgradeProperties *AutomaticOSUpgradeProperties `json:"automaticOSUpgradeProperties,omitempty"` + // HyperVGeneration - Possible values include: 'HyperVGenerationTypesV1', 'HyperVGenerationTypesV2' + HyperVGeneration HyperVGenerationTypes `json:"hyperVGeneration,omitempty"` + // Disallowed - Specifies disallowed configuration for the VirtualMachine created from the image + Disallowed *DisallowedConfiguration `json:"disallowed,omitempty"` + Features *[]VirtualMachineImageFeature `json:"features,omitempty"` + // Architecture - Possible values include: 'ArchitectureTypesX64', 'ArchitectureTypesArm64' + Architecture ArchitectureTypes `json:"architecture,omitempty"` +} + +// VirtualMachineImageResource virtual machine image resource information. +type VirtualMachineImageResource struct { + // Name - The name of the resource. + Name *string `json:"name,omitempty"` + // Location - The supported Azure location of the resource. + Location *string `json:"location,omitempty"` + // Tags - Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md). + Tags map[string]*string `json:"tags"` + // ExtendedLocation - The extended location of the Virtual Machine. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineImageResource. +func (vmir VirtualMachineImageResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmir.Name != nil { + objectMap["name"] = vmir.Name + } + if vmir.Location != nil { + objectMap["location"] = vmir.Location + } + if vmir.Tags != nil { + objectMap["tags"] = vmir.Tags + } + if vmir.ExtendedLocation != nil { + objectMap["extendedLocation"] = vmir.ExtendedLocation + } + if vmir.ID != nil { + objectMap["id"] = vmir.ID + } + return json.Marshal(objectMap) +} + +// VirtualMachineInstallPatchesParameters input for InstallPatches as directly received by the API +type VirtualMachineInstallPatchesParameters struct { + // MaximumDuration - Specifies the maximum amount of time that the operation will run. It must be an ISO 8601-compliant duration string such as PT4H (4 hours) + MaximumDuration *string `json:"maximumDuration,omitempty"` + // RebootSetting - Defines when it is acceptable to reboot a VM during a software update operation. Possible values include: 'IfRequired', 'Never', 'Always' + RebootSetting VMGuestPatchRebootSetting `json:"rebootSetting,omitempty"` + // WindowsParameters - Input for InstallPatches on a Windows VM, as directly received by the API + WindowsParameters *WindowsParameters `json:"windowsParameters,omitempty"` + // LinuxParameters - Input for InstallPatches on a Linux VM, as directly received by the API + LinuxParameters *LinuxParameters `json:"linuxParameters,omitempty"` +} + +// VirtualMachineInstallPatchesResult the result summary of an installation operation. +type VirtualMachineInstallPatchesResult struct { + autorest.Response `json:"-"` + // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Failed", "Succeeded", "Unknown" or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' + Status PatchOperationStatus `json:"status,omitempty"` + // InstallationActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. + InstallationActivityID *string `json:"installationActivityId,omitempty"` + // RebootStatus - READ-ONLY; The reboot state of the VM following completion of the operation. Possible values include: 'VMGuestPatchRebootStatusUnknown', 'VMGuestPatchRebootStatusNotNeeded', 'VMGuestPatchRebootStatusRequired', 'VMGuestPatchRebootStatusStarted', 'VMGuestPatchRebootStatusFailed', 'VMGuestPatchRebootStatusCompleted' + RebootStatus VMGuestPatchRebootStatus `json:"rebootStatus,omitempty"` + // MaintenanceWindowExceeded - READ-ONLY; Whether the operation ran out of time before it completed all its intended actions. + MaintenanceWindowExceeded *bool `json:"maintenanceWindowExceeded,omitempty"` + // ExcludedPatchCount - READ-ONLY; The number of patches that were not installed due to the user blocking their installation. + ExcludedPatchCount *int32 `json:"excludedPatchCount,omitempty"` + // NotSelectedPatchCount - READ-ONLY; The number of patches that were detected as available for install, but did not meet the operation's criteria. + NotSelectedPatchCount *int32 `json:"notSelectedPatchCount,omitempty"` + // PendingPatchCount - READ-ONLY; The number of patches that were identified as meeting the installation criteria, but were not able to be installed. Typically this happens when maintenanceWindowExceeded == true. + PendingPatchCount *int32 `json:"pendingPatchCount,omitempty"` + // InstalledPatchCount - READ-ONLY; The number of patches successfully installed. + InstalledPatchCount *int32 `json:"installedPatchCount,omitempty"` + // FailedPatchCount - READ-ONLY; The number of patches that could not be installed due to some issue. See errors for details. + FailedPatchCount *int32 `json:"failedPatchCount,omitempty"` + // Patches - READ-ONLY; The patches that were installed during the operation. + Patches *[]PatchInstallationDetail `json:"patches,omitempty"` + // StartDateTime - READ-ONLY; The UTC timestamp when the operation began. + StartDateTime *date.Time `json:"startDateTime,omitempty"` + // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. + Error *APIError `json:"error,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineInstallPatchesResult. +func (vmipr VirtualMachineInstallPatchesResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineInstanceView the instance view of a virtual machine. +type VirtualMachineInstanceView struct { + autorest.Response `json:"-"` + // PlatformUpdateDomain - Specifies the update domain of the virtual machine. + PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` + // PlatformFaultDomain - Specifies the fault domain of the virtual machine. + PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` + // ComputerName - The computer name assigned to the virtual machine. + ComputerName *string `json:"computerName,omitempty"` + // OsName - The Operating System running on the virtual machine. + OsName *string `json:"osName,omitempty"` + // OsVersion - The version of Operating System running on the virtual machine. + OsVersion *string `json:"osVersion,omitempty"` + // HyperVGeneration - Specifies the HyperVGeneration Type associated with a resource. Possible values include: 'HyperVGenerationTypeV1', 'HyperVGenerationTypeV2' + HyperVGeneration HyperVGenerationType `json:"hyperVGeneration,omitempty"` + // RdpThumbPrint - The Remote desktop certificate thumbprint. + RdpThumbPrint *string `json:"rdpThumbPrint,omitempty"` + // VMAgent - The VM Agent running on the virtual machine. + VMAgent *VirtualMachineAgentInstanceView `json:"vmAgent,omitempty"` + // MaintenanceRedeployStatus - The Maintenance Operation status on the virtual machine. + MaintenanceRedeployStatus *MaintenanceRedeployStatus `json:"maintenanceRedeployStatus,omitempty"` + // Disks - The virtual machine disk information. + Disks *[]DiskInstanceView `json:"disks,omitempty"` + // Extensions - The extensions information. + Extensions *[]VirtualMachineExtensionInstanceView `json:"extensions,omitempty"` + // VMHealth - READ-ONLY; The health status for the VM. + VMHealth *VirtualMachineHealthStatus `json:"vmHealth,omitempty"` + // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.

You can easily view the output of your console log.

Azure also enables you to see a screenshot of the VM from the hypervisor. + BootDiagnostics *BootDiagnosticsInstanceView `json:"bootDiagnostics,omitempty"` + // AssignedHost - READ-ONLY; Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled.

Minimum api-version: 2020-06-01. + AssignedHost *string `json:"assignedHost,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` + // PatchStatus - [Preview Feature] The status of virtual machine patch operations. + PatchStatus *VirtualMachinePatchStatus `json:"patchStatus,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineInstanceView. +func (vmiv VirtualMachineInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmiv.PlatformUpdateDomain != nil { + objectMap["platformUpdateDomain"] = vmiv.PlatformUpdateDomain + } + if vmiv.PlatformFaultDomain != nil { + objectMap["platformFaultDomain"] = vmiv.PlatformFaultDomain + } + if vmiv.ComputerName != nil { + objectMap["computerName"] = vmiv.ComputerName + } + if vmiv.OsName != nil { + objectMap["osName"] = vmiv.OsName + } + if vmiv.OsVersion != nil { + objectMap["osVersion"] = vmiv.OsVersion + } + if vmiv.HyperVGeneration != "" { + objectMap["hyperVGeneration"] = vmiv.HyperVGeneration + } + if vmiv.RdpThumbPrint != nil { + objectMap["rdpThumbPrint"] = vmiv.RdpThumbPrint + } + if vmiv.VMAgent != nil { + objectMap["vmAgent"] = vmiv.VMAgent + } + if vmiv.MaintenanceRedeployStatus != nil { + objectMap["maintenanceRedeployStatus"] = vmiv.MaintenanceRedeployStatus + } + if vmiv.Disks != nil { + objectMap["disks"] = vmiv.Disks + } + if vmiv.Extensions != nil { + objectMap["extensions"] = vmiv.Extensions + } + if vmiv.BootDiagnostics != nil { + objectMap["bootDiagnostics"] = vmiv.BootDiagnostics + } + if vmiv.Statuses != nil { + objectMap["statuses"] = vmiv.Statuses + } + if vmiv.PatchStatus != nil { + objectMap["patchStatus"] = vmiv.PatchStatus + } + return json.Marshal(objectMap) +} + +// VirtualMachineIPTag contains the IP tag associated with the public IP address. +type VirtualMachineIPTag struct { + // IPTagType - IP tag type. Example: FirstPartyUsage. + IPTagType *string `json:"ipTagType,omitempty"` + // Tag - IP tag associated with the public IP. Example: SQL, Storage etc. + Tag *string `json:"tag,omitempty"` +} + +// VirtualMachineListResult the List Virtual Machine operation response. +type VirtualMachineListResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machines. + Value *[]VirtualMachine `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineListResultIterator provides access to a complete listing of VirtualMachine values. +type VirtualMachineListResultIterator struct { + i int + page VirtualMachineListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineListResultIterator) Response() VirtualMachineListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineListResultIterator) Value() VirtualMachine { + if !iter.page.NotDone() { + return VirtualMachine{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineListResultIterator type. +func NewVirtualMachineListResultIterator(page VirtualMachineListResultPage) VirtualMachineListResultIterator { + return VirtualMachineListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmlr VirtualMachineListResult) IsEmpty() bool { + return vmlr.Value == nil || len(*vmlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmlr VirtualMachineListResult) hasNextLink() bool { + return vmlr.NextLink != nil && len(*vmlr.NextLink) != 0 +} + +// virtualMachineListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmlr VirtualMachineListResult) virtualMachineListResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmlr.NextLink))) +} + +// VirtualMachineListResultPage contains a page of VirtualMachine values. +type VirtualMachineListResultPage struct { + fn func(context.Context, VirtualMachineListResult) (VirtualMachineListResult, error) + vmlr VirtualMachineListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmlr) + if err != nil { + return err + } + page.vmlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineListResultPage) NotDone() bool { + return !page.vmlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineListResultPage) Response() VirtualMachineListResult { + return page.vmlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineListResultPage) Values() []VirtualMachine { + if page.vmlr.IsEmpty() { + return nil + } + return *page.vmlr.Value +} + +// Creates a new instance of the VirtualMachineListResultPage type. +func NewVirtualMachineListResultPage(cur VirtualMachineListResult, getNextPage func(context.Context, VirtualMachineListResult) (VirtualMachineListResult, error)) VirtualMachineListResultPage { + return VirtualMachineListResultPage{ + fn: getNextPage, + vmlr: cur, + } +} + +// VirtualMachineNetworkInterfaceConfiguration describes a virtual machine network interface +// configurations. +type VirtualMachineNetworkInterfaceConfiguration struct { + // Name - The network interface configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineNetworkInterfaceConfigurationProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineNetworkInterfaceConfiguration. +func (vmnic VirtualMachineNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmnic.Name != nil { + objectMap["name"] = vmnic.Name + } + if vmnic.VirtualMachineNetworkInterfaceConfigurationProperties != nil { + objectMap["properties"] = vmnic.VirtualMachineNetworkInterfaceConfigurationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineNetworkInterfaceConfiguration struct. +func (vmnic *VirtualMachineNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmnic.Name = &name + } + case "properties": + if v != nil { + var virtualMachineNetworkInterfaceConfigurationProperties VirtualMachineNetworkInterfaceConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineNetworkInterfaceConfigurationProperties) + if err != nil { + return err + } + vmnic.VirtualMachineNetworkInterfaceConfigurationProperties = &virtualMachineNetworkInterfaceConfigurationProperties + } + } + } + + return nil +} + +// VirtualMachineNetworkInterfaceConfigurationProperties describes a virtual machine network profile's IP +// configuration. +type VirtualMachineNetworkInterfaceConfigurationProperties struct { + // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. + Primary *bool `json:"primary,omitempty"` + // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` + // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. + EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` + // DisableTCPStateTracking - Specifies whether the network interface is disabled for tcp state tracking. + DisableTCPStateTracking *bool `json:"disableTcpStateTracking,omitempty"` + // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. + EnableFpga *bool `json:"enableFpga,omitempty"` + // EnableIPForwarding - Whether IP forwarding enabled on this NIC. + EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` + // NetworkSecurityGroup - The network security group. + NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` + // DNSSettings - The dns settings to be applied on the network interfaces. + DNSSettings *VirtualMachineNetworkInterfaceDNSSettingsConfiguration `json:"dnsSettings,omitempty"` + // IPConfigurations - Specifies the IP configurations of the network interface. + IPConfigurations *[]VirtualMachineNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"` + DscpConfiguration *SubResource `json:"dscpConfiguration,omitempty"` +} + +// VirtualMachineNetworkInterfaceDNSSettingsConfiguration describes a virtual machines network +// configuration's DNS settings. +type VirtualMachineNetworkInterfaceDNSSettingsConfiguration struct { + // DNSServers - List of DNS servers IP addresses + DNSServers *[]string `json:"dnsServers,omitempty"` +} + +// VirtualMachineNetworkInterfaceIPConfiguration describes a virtual machine network profile's IP +// configuration. +type VirtualMachineNetworkInterfaceIPConfiguration struct { + // Name - The IP configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineNetworkInterfaceIPConfigurationProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineNetworkInterfaceIPConfiguration. +func (vmniic VirtualMachineNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmniic.Name != nil { + objectMap["name"] = vmniic.Name + } + if vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties != nil { + objectMap["properties"] = vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineNetworkInterfaceIPConfiguration struct. +func (vmniic *VirtualMachineNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmniic.Name = &name + } + case "properties": + if v != nil { + var virtualMachineNetworkInterfaceIPConfigurationProperties VirtualMachineNetworkInterfaceIPConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineNetworkInterfaceIPConfigurationProperties) + if err != nil { + return err + } + vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties = &virtualMachineNetworkInterfaceIPConfigurationProperties + } + } + } + + return nil +} + +// VirtualMachineNetworkInterfaceIPConfigurationProperties describes a virtual machine network interface IP +// configuration properties. +type VirtualMachineNetworkInterfaceIPConfigurationProperties struct { + // Subnet - Specifies the identifier of the subnet. + Subnet *SubResource `json:"subnet,omitempty"` + // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. + Primary *bool `json:"primary,omitempty"` + // PublicIPAddressConfiguration - The publicIPAddressConfiguration. + PublicIPAddressConfiguration *VirtualMachinePublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` + // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPVersionsIPv4', 'IPVersionsIPv6' + PrivateIPAddressVersion IPVersions `json:"privateIPAddressVersion,omitempty"` + // ApplicationSecurityGroups - Specifies an array of references to application security group. + ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` + // ApplicationGatewayBackendAddressPools - Specifies an array of references to backend address pools of application gateways. A virtual machine can reference backend address pools of multiple application gateways. Multiple virtual machines cannot use the same application gateway. + ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` + // LoadBalancerBackendAddressPools - Specifies an array of references to backend address pools of load balancers. A virtual machine can reference backend address pools of one public and one internal load balancer. [Multiple virtual machines cannot use the same basic sku load balancer]. + LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` +} + +// VirtualMachinePatchStatus the status of virtual machine patch operations. +type VirtualMachinePatchStatus struct { + // AvailablePatchSummary - The available patch summary of the latest assessment operation for the virtual machine. + AvailablePatchSummary *AvailablePatchSummary `json:"availablePatchSummary,omitempty"` + // LastPatchInstallationSummary - The installation summary of the latest installation operation for the virtual machine. + LastPatchInstallationSummary *LastPatchInstallationSummary `json:"lastPatchInstallationSummary,omitempty"` + // ConfigurationStatuses - READ-ONLY; The enablement status of the specified patchMode + ConfigurationStatuses *[]InstanceViewStatus `json:"configurationStatuses,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachinePatchStatus. +func (vmps VirtualMachinePatchStatus) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmps.AvailablePatchSummary != nil { + objectMap["availablePatchSummary"] = vmps.AvailablePatchSummary + } + if vmps.LastPatchInstallationSummary != nil { + objectMap["lastPatchInstallationSummary"] = vmps.LastPatchInstallationSummary + } + return json.Marshal(objectMap) +} + +// VirtualMachineProperties describes the properties of a Virtual Machine. +type VirtualMachineProperties struct { + // HardwareProfile - Specifies the hardware settings for the virtual machine. + HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` + // StorageProfile - Specifies the storage settings for the virtual machine disks. + StorageProfile *StorageProfile `json:"storageProfile,omitempty"` + // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the virtual machine. + AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` + // OsProfile - Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. + OsProfile *OSProfile `json:"osProfile,omitempty"` + // NetworkProfile - Specifies the network interfaces of the virtual machine. + NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"` + // SecurityProfile - Specifies the Security related profile settings for the virtual machine. + SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` + // DiagnosticsProfile - Specifies the boot diagnostic settings state.

Minimum api-version: 2015-06-15. + DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` + // AvailabilitySet - Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Availability sets overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

For more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set.

This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. + AvailabilitySet *SubResource `json:"availabilitySet,omitempty"` + // VirtualMachineScaleSet - Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set.

This property cannot exist along with a non-null properties.availabilitySet reference.

Minimum api‐version: 2019‐03‐01 + VirtualMachineScaleSet *SubResource `json:"virtualMachineScaleSet,omitempty"` + // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine should be assigned to.

Minimum api-version: 2018-04-01. + ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` + // Priority - Specifies the priority for the virtual machine.

Minimum api-version: 2019-03-01. Possible values include: 'Regular', 'Low', 'Spot' + Priority VirtualMachinePriorityTypes `json:"priority,omitempty"` + // EvictionPolicy - Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set.

For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.

For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Possible values include: 'VirtualMachineEvictionPolicyTypesDeallocate', 'VirtualMachineEvictionPolicyTypesDelete' + EvictionPolicy VirtualMachineEvictionPolicyTypes `json:"evictionPolicy,omitempty"` + // BillingProfile - Specifies the billing related details of a Azure Spot virtual machine.

Minimum api-version: 2019-03-01. + BillingProfile *BillingProfile `json:"billingProfile,omitempty"` + // Host - Specifies information about the dedicated host that the virtual machine resides in.

Minimum api-version: 2018-10-01. + Host *SubResource `json:"host,omitempty"` + // HostGroup - Specifies information about the dedicated host group that the virtual machine resides in.

Minimum api-version: 2020-06-01.

NOTE: User cannot specify both host and hostGroup properties. + HostGroup *SubResource `json:"hostGroup,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // InstanceView - READ-ONLY; The virtual machine instance view. + InstanceView *VirtualMachineInstanceView `json:"instanceView,omitempty"` + // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

Possible values for Windows Server operating system are:

Windows_Client

Windows_Server

Possible values for Linux Server operating system are:

RHEL_BYOS (for RHEL)

SLES_BYOS (for SUSE)

For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

[Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

Minimum api-version: 2015-06-15 + LicenseType *string `json:"licenseType,omitempty"` + // VMID - READ-ONLY; Specifies the VM unique ID which is a 128-bits identifier that is encoded and stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands. + VMID *string `json:"vmId,omitempty"` + // ExtensionsTimeBudget - Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M).

Minimum api-version: 2020-06-01 + ExtensionsTimeBudget *string `json:"extensionsTimeBudget,omitempty"` + // PlatformFaultDomain - Specifies the scale set logical fault domain into which the Virtual Machine will be created. By default, the Virtual Machine will by automatically assigned to a fault domain that best maintains balance across available fault domains.
  • This is applicable only if the 'virtualMachineScaleSet' property of this Virtual Machine is set.
  • The Virtual Machine Scale Set that is referenced, must have 'platformFaultDomainCount' > 1.
  • This property cannot be updated once the Virtual Machine is created.
  • Fault domain assignment can be viewed in the Virtual Machine Instance View.

    Minimum api‐version: 2020‐12‐01 + PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` + // ScheduledEventsProfile - Specifies Scheduled Event related configurations. + ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` + // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 + UserData *string `json:"userData,omitempty"` + // CapacityReservation - Specifies information about the capacity reservation that is used to allocate virtual machine.

    Minimum api-version: 2021-04-01. + CapacityReservation *CapacityReservationProfile `json:"capacityReservation,omitempty"` + // ApplicationProfile - Specifies the gallery applications that should be made available to the VM/VMSS + ApplicationProfile *ApplicationProfile `json:"applicationProfile,omitempty"` + // TimeCreated - READ-ONLY; Specifies the time at which the Virtual Machine resource was created.

    Minimum api-version: 2021-11-01. + TimeCreated *date.Time `json:"timeCreated,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineProperties. +func (vmp VirtualMachineProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmp.HardwareProfile != nil { + objectMap["hardwareProfile"] = vmp.HardwareProfile + } + if vmp.StorageProfile != nil { + objectMap["storageProfile"] = vmp.StorageProfile + } + if vmp.AdditionalCapabilities != nil { + objectMap["additionalCapabilities"] = vmp.AdditionalCapabilities + } + if vmp.OsProfile != nil { + objectMap["osProfile"] = vmp.OsProfile + } + if vmp.NetworkProfile != nil { + objectMap["networkProfile"] = vmp.NetworkProfile + } + if vmp.SecurityProfile != nil { + objectMap["securityProfile"] = vmp.SecurityProfile + } + if vmp.DiagnosticsProfile != nil { + objectMap["diagnosticsProfile"] = vmp.DiagnosticsProfile + } + if vmp.AvailabilitySet != nil { + objectMap["availabilitySet"] = vmp.AvailabilitySet + } + if vmp.VirtualMachineScaleSet != nil { + objectMap["virtualMachineScaleSet"] = vmp.VirtualMachineScaleSet + } + if vmp.ProximityPlacementGroup != nil { + objectMap["proximityPlacementGroup"] = vmp.ProximityPlacementGroup + } + if vmp.Priority != "" { + objectMap["priority"] = vmp.Priority + } + if vmp.EvictionPolicy != "" { + objectMap["evictionPolicy"] = vmp.EvictionPolicy + } + if vmp.BillingProfile != nil { + objectMap["billingProfile"] = vmp.BillingProfile + } + if vmp.Host != nil { + objectMap["host"] = vmp.Host + } + if vmp.HostGroup != nil { + objectMap["hostGroup"] = vmp.HostGroup + } + if vmp.LicenseType != nil { + objectMap["licenseType"] = vmp.LicenseType + } + if vmp.ExtensionsTimeBudget != nil { + objectMap["extensionsTimeBudget"] = vmp.ExtensionsTimeBudget + } + if vmp.PlatformFaultDomain != nil { + objectMap["platformFaultDomain"] = vmp.PlatformFaultDomain + } + if vmp.ScheduledEventsProfile != nil { + objectMap["scheduledEventsProfile"] = vmp.ScheduledEventsProfile + } + if vmp.UserData != nil { + objectMap["userData"] = vmp.UserData + } + if vmp.CapacityReservation != nil { + objectMap["capacityReservation"] = vmp.CapacityReservation + } + if vmp.ApplicationProfile != nil { + objectMap["applicationProfile"] = vmp.ApplicationProfile + } + return json.Marshal(objectMap) +} + +// VirtualMachinePublicIPAddressConfiguration describes a virtual machines IP Configuration's +// PublicIPAddress configuration +type VirtualMachinePublicIPAddressConfiguration struct { + // Name - The publicIP address configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachinePublicIPAddressConfigurationProperties `json:"properties,omitempty"` + Sku *PublicIPAddressSku `json:"sku,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachinePublicIPAddressConfiguration. +func (vmpiac VirtualMachinePublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmpiac.Name != nil { + objectMap["name"] = vmpiac.Name + } + if vmpiac.VirtualMachinePublicIPAddressConfigurationProperties != nil { + objectMap["properties"] = vmpiac.VirtualMachinePublicIPAddressConfigurationProperties + } + if vmpiac.Sku != nil { + objectMap["sku"] = vmpiac.Sku + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachinePublicIPAddressConfiguration struct. +func (vmpiac *VirtualMachinePublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmpiac.Name = &name + } + case "properties": + if v != nil { + var virtualMachinePublicIPAddressConfigurationProperties VirtualMachinePublicIPAddressConfigurationProperties + err = json.Unmarshal(*v, &virtualMachinePublicIPAddressConfigurationProperties) + if err != nil { + return err + } + vmpiac.VirtualMachinePublicIPAddressConfigurationProperties = &virtualMachinePublicIPAddressConfigurationProperties + } + case "sku": + if v != nil { + var sku PublicIPAddressSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + vmpiac.Sku = &sku + } + } + } + + return nil +} + +// VirtualMachinePublicIPAddressConfigurationProperties describes a virtual machines IP Configuration's +// PublicIPAddress configuration +type VirtualMachinePublicIPAddressConfigurationProperties struct { + // IdleTimeoutInMinutes - The idle timeout of the public IP address. + IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` + // DeleteOption - Specify what happens to the public IP address when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` + // DNSSettings - The dns settings to be applied on the publicIP addresses . + DNSSettings *VirtualMachinePublicIPAddressDNSSettingsConfiguration `json:"dnsSettings,omitempty"` + // IPTags - The list of IP tags associated with the public IP address. + IPTags *[]VirtualMachineIPTag `json:"ipTags,omitempty"` + // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. + PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` + // PublicIPAddressVersion - Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPVersionsIPv4', 'IPVersionsIPv6' + PublicIPAddressVersion IPVersions `json:"publicIPAddressVersion,omitempty"` + // PublicIPAllocationMethod - Specify the public IP allocation type. Possible values include: 'Dynamic', 'Static' + PublicIPAllocationMethod PublicIPAllocationMethod `json:"publicIPAllocationMethod,omitempty"` +} + +// VirtualMachinePublicIPAddressDNSSettingsConfiguration describes a virtual machines network +// configuration's DNS settings. +type VirtualMachinePublicIPAddressDNSSettingsConfiguration struct { + // DomainNameLabel - The Domain name label prefix of the PublicIPAddress resources that will be created. The generated name label is the concatenation of the domain name label and vm network profile unique ID. + DomainNameLabel *string `json:"domainNameLabel,omitempty"` +} + +// VirtualMachineReimageParameters parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk +// will always be reimaged +type VirtualMachineReimageParameters struct { + // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. + TempDisk *bool `json:"tempDisk,omitempty"` +} + +// VirtualMachineRunCommand describes a Virtual Machine run command. +type VirtualMachineRunCommand struct { + autorest.Response `json:"-"` + *VirtualMachineRunCommandProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineRunCommand. +func (vmrc VirtualMachineRunCommand) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmrc.VirtualMachineRunCommandProperties != nil { + objectMap["properties"] = vmrc.VirtualMachineRunCommandProperties + } + if vmrc.Location != nil { + objectMap["location"] = vmrc.Location + } + if vmrc.Tags != nil { + objectMap["tags"] = vmrc.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineRunCommand struct. +func (vmrc *VirtualMachineRunCommand) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineRunCommandProperties VirtualMachineRunCommandProperties + err = json.Unmarshal(*v, &virtualMachineRunCommandProperties) + if err != nil { + return err + } + vmrc.VirtualMachineRunCommandProperties = &virtualMachineRunCommandProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmrc.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmrc.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmrc.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vmrc.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmrc.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineRunCommandInstanceView the instance view of a virtual machine run command. +type VirtualMachineRunCommandInstanceView struct { + // ExecutionState - Script execution status. Possible values include: 'ExecutionStateUnknown', 'ExecutionStatePending', 'ExecutionStateRunning', 'ExecutionStateFailed', 'ExecutionStateSucceeded', 'ExecutionStateTimedOut', 'ExecutionStateCanceled' + ExecutionState ExecutionState `json:"executionState,omitempty"` + // ExecutionMessage - Communicate script configuration errors or execution messages. + ExecutionMessage *string `json:"executionMessage,omitempty"` + // ExitCode - Exit code returned from script execution. + ExitCode *int32 `json:"exitCode,omitempty"` + // Output - Script output stream. + Output *string `json:"output,omitempty"` + // Error - Script error stream. + Error *string `json:"error,omitempty"` + // StartTime - Script start time. + StartTime *date.Time `json:"startTime,omitempty"` + // EndTime - Script end time. + EndTime *date.Time `json:"endTime,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` +} + +// VirtualMachineRunCommandProperties describes the properties of a Virtual Machine run command. +type VirtualMachineRunCommandProperties struct { + // Source - The source of the run command script. + Source *VirtualMachineRunCommandScriptSource `json:"source,omitempty"` + // Parameters - The parameters used by the script. + Parameters *[]RunCommandInputParameter `json:"parameters,omitempty"` + // ProtectedParameters - The parameters used by the script. + ProtectedParameters *[]RunCommandInputParameter `json:"protectedParameters,omitempty"` + // AsyncExecution - Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. + AsyncExecution *bool `json:"asyncExecution,omitempty"` + // RunAsUser - Specifies the user account on the VM when executing the run command. + RunAsUser *string `json:"runAsUser,omitempty"` + // RunAsPassword - Specifies the user account password on the VM when executing the run command. + RunAsPassword *string `json:"runAsPassword,omitempty"` + // TimeoutInSeconds - The timeout in seconds to execute the run command. + TimeoutInSeconds *int32 `json:"timeoutInSeconds,omitempty"` + // OutputBlobURI - Specifies the Azure storage blob where script output stream will be uploaded. + OutputBlobURI *string `json:"outputBlobUri,omitempty"` + // ErrorBlobURI - Specifies the Azure storage blob where script error stream will be uploaded. + ErrorBlobURI *string `json:"errorBlobUri,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // InstanceView - READ-ONLY; The virtual machine run command instance view. + InstanceView *VirtualMachineRunCommandInstanceView `json:"instanceView,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineRunCommandProperties. +func (vmrcp VirtualMachineRunCommandProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmrcp.Source != nil { + objectMap["source"] = vmrcp.Source + } + if vmrcp.Parameters != nil { + objectMap["parameters"] = vmrcp.Parameters + } + if vmrcp.ProtectedParameters != nil { + objectMap["protectedParameters"] = vmrcp.ProtectedParameters + } + if vmrcp.AsyncExecution != nil { + objectMap["asyncExecution"] = vmrcp.AsyncExecution + } + if vmrcp.RunAsUser != nil { + objectMap["runAsUser"] = vmrcp.RunAsUser + } + if vmrcp.RunAsPassword != nil { + objectMap["runAsPassword"] = vmrcp.RunAsPassword + } + if vmrcp.TimeoutInSeconds != nil { + objectMap["timeoutInSeconds"] = vmrcp.TimeoutInSeconds + } + if vmrcp.OutputBlobURI != nil { + objectMap["outputBlobUri"] = vmrcp.OutputBlobURI + } + if vmrcp.ErrorBlobURI != nil { + objectMap["errorBlobUri"] = vmrcp.ErrorBlobURI + } + return json.Marshal(objectMap) +} + +// VirtualMachineRunCommandsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineRunCommandsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineRunCommandsClient) (VirtualMachineRunCommand, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineRunCommandsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineRunCommandsCreateOrUpdateFuture.Result. +func (future *VirtualMachineRunCommandsCreateOrUpdateFuture) result(client VirtualMachineRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmrc.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { + vmrc, err = client.CreateOrUpdateResponder(vmrc.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsCreateOrUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineRunCommandScriptSource describes the script sources for run command. +type VirtualMachineRunCommandScriptSource struct { + // Script - Specifies the script content to be executed on the VM. + Script *string `json:"script,omitempty"` + // ScriptURI - Specifies the script download location. + ScriptURI *string `json:"scriptUri,omitempty"` + // CommandID - Specifies a commandId of predefined built-in script. + CommandID *string `json:"commandId,omitempty"` +} + +// VirtualMachineRunCommandsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineRunCommandsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineRunCommandsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineRunCommandsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineRunCommandsDeleteFuture.Result. +func (future *VirtualMachineRunCommandsDeleteFuture) result(client VirtualMachineRunCommandsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineRunCommandsListResult the List run command operation response +type VirtualMachineRunCommandsListResult struct { + autorest.Response `json:"-"` + // Value - The list of run commands + Value *[]VirtualMachineRunCommand `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of run commands. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineRunCommandsListResultIterator provides access to a complete listing of +// VirtualMachineRunCommand values. +type VirtualMachineRunCommandsListResultIterator struct { + i int + page VirtualMachineRunCommandsListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineRunCommandsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineRunCommandsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineRunCommandsListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineRunCommandsListResultIterator) Response() VirtualMachineRunCommandsListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineRunCommandsListResultIterator) Value() VirtualMachineRunCommand { + if !iter.page.NotDone() { + return VirtualMachineRunCommand{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineRunCommandsListResultIterator type. +func NewVirtualMachineRunCommandsListResultIterator(page VirtualMachineRunCommandsListResultPage) VirtualMachineRunCommandsListResultIterator { + return VirtualMachineRunCommandsListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmrclr VirtualMachineRunCommandsListResult) IsEmpty() bool { + return vmrclr.Value == nil || len(*vmrclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmrclr VirtualMachineRunCommandsListResult) hasNextLink() bool { + return vmrclr.NextLink != nil && len(*vmrclr.NextLink) != 0 +} + +// virtualMachineRunCommandsListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmrclr VirtualMachineRunCommandsListResult) virtualMachineRunCommandsListResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmrclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmrclr.NextLink))) +} + +// VirtualMachineRunCommandsListResultPage contains a page of VirtualMachineRunCommand values. +type VirtualMachineRunCommandsListResultPage struct { + fn func(context.Context, VirtualMachineRunCommandsListResult) (VirtualMachineRunCommandsListResult, error) + vmrclr VirtualMachineRunCommandsListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineRunCommandsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmrclr) + if err != nil { + return err + } + page.vmrclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineRunCommandsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineRunCommandsListResultPage) NotDone() bool { + return !page.vmrclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineRunCommandsListResultPage) Response() VirtualMachineRunCommandsListResult { + return page.vmrclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineRunCommandsListResultPage) Values() []VirtualMachineRunCommand { + if page.vmrclr.IsEmpty() { + return nil + } + return *page.vmrclr.Value +} + +// Creates a new instance of the VirtualMachineRunCommandsListResultPage type. +func NewVirtualMachineRunCommandsListResultPage(cur VirtualMachineRunCommandsListResult, getNextPage func(context.Context, VirtualMachineRunCommandsListResult) (VirtualMachineRunCommandsListResult, error)) VirtualMachineRunCommandsListResultPage { + return VirtualMachineRunCommandsListResultPage{ + fn: getNextPage, + vmrclr: cur, + } +} + +// VirtualMachineRunCommandsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineRunCommandsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineRunCommandsClient) (VirtualMachineRunCommand, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineRunCommandsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineRunCommandsUpdateFuture.Result. +func (future *VirtualMachineRunCommandsUpdateFuture) result(client VirtualMachineRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmrc.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { + vmrc, err = client.UpdateResponder(vmrc.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineRunCommandUpdate describes a Virtual Machine run command. +type VirtualMachineRunCommandUpdate struct { + *VirtualMachineRunCommandProperties `json:"properties,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineRunCommandUpdate. +func (vmrcu VirtualMachineRunCommandUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmrcu.VirtualMachineRunCommandProperties != nil { + objectMap["properties"] = vmrcu.VirtualMachineRunCommandProperties + } + if vmrcu.Tags != nil { + objectMap["tags"] = vmrcu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineRunCommandUpdate struct. +func (vmrcu *VirtualMachineRunCommandUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualMachineRunCommandProperties VirtualMachineRunCommandProperties + err = json.Unmarshal(*v, &virtualMachineRunCommandProperties) + if err != nil { + return err + } + vmrcu.VirtualMachineRunCommandProperties = &virtualMachineRunCommandProperties + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmrcu.Tags = tags + } + } + } + + return nil +} + +// VirtualMachinesAssessPatchesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesAssessPatchesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (VirtualMachineAssessPatchesResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesAssessPatchesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesAssessPatchesFuture.Result. +func (future *VirtualMachinesAssessPatchesFuture) result(client VirtualMachinesClient) (vmapr VirtualMachineAssessPatchesResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesAssessPatchesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmapr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesAssessPatchesFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmapr.Response.Response, err = future.GetResult(sender); err == nil && vmapr.Response.Response.StatusCode != http.StatusNoContent { + vmapr, err = client.AssessPatchesResponder(vmapr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesAssessPatchesFuture", "Result", vmapr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSet describes a Virtual Machine Scale Set. +type VirtualMachineScaleSet struct { + autorest.Response `json:"-"` + // Sku - The virtual machine scale set sku. + Sku *Sku `json:"sku,omitempty"` + // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. + Plan *Plan `json:"plan,omitempty"` + *VirtualMachineScaleSetProperties `json:"properties,omitempty"` + // Identity - The identity of the virtual machine scale set, if configured. + Identity *VirtualMachineScaleSetIdentity `json:"identity,omitempty"` + // Zones - The virtual machine scale set zones. NOTE: Availability zones can only be set when you create the scale set + Zones *[]string `json:"zones,omitempty"` + // ExtendedLocation - The extended location of the Virtual Machine Scale Set. + ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSet. +func (vmss VirtualMachineScaleSet) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmss.Sku != nil { + objectMap["sku"] = vmss.Sku + } + if vmss.Plan != nil { + objectMap["plan"] = vmss.Plan + } + if vmss.VirtualMachineScaleSetProperties != nil { + objectMap["properties"] = vmss.VirtualMachineScaleSetProperties + } + if vmss.Identity != nil { + objectMap["identity"] = vmss.Identity + } + if vmss.Zones != nil { + objectMap["zones"] = vmss.Zones + } + if vmss.ExtendedLocation != nil { + objectMap["extendedLocation"] = vmss.ExtendedLocation + } + if vmss.Location != nil { + objectMap["location"] = vmss.Location + } + if vmss.Tags != nil { + objectMap["tags"] = vmss.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSet struct. +func (vmss *VirtualMachineScaleSet) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + vmss.Sku = &sku + } + case "plan": + if v != nil { + var plan Plan + err = json.Unmarshal(*v, &plan) + if err != nil { + return err + } + vmss.Plan = &plan + } + case "properties": + if v != nil { + var virtualMachineScaleSetProperties VirtualMachineScaleSetProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetProperties) + if err != nil { + return err + } + vmss.VirtualMachineScaleSetProperties = &virtualMachineScaleSetProperties + } + case "identity": + if v != nil { + var identity VirtualMachineScaleSetIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + vmss.Identity = &identity + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + vmss.Zones = &zones + } + case "extendedLocation": + if v != nil { + var extendedLocation ExtendedLocation + err = json.Unmarshal(*v, &extendedLocation) + if err != nil { + return err + } + vmss.ExtendedLocation = &extendedLocation + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmss.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmss.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmss.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vmss.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmss.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineScaleSetDataDisk describes a virtual machine scale set data disk. +type VirtualMachineScaleSetDataDisk struct { + // Name - The disk name. + Name *string `json:"name,omitempty"` + // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. + Lun *int32 `json:"lun,omitempty"` + // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. + WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` + // CreateOption - The create option. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' + CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` + // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023 + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // ManagedDisk - The managed disk parameters. + ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` + // DiskIOPSReadWrite - Specifies the Read-Write IOPS for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. + DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` + // DiskMBpsReadWrite - Specifies the bandwidth in MB per second for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. + DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` + // DeleteOption - Specifies whether data disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the data disk is deleted when the VMSS Flex VM is deleted.

    **Detach** If this value is used, the data disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' + DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetExtension describes a Virtual Machine Scale Set Extension. +type VirtualMachineScaleSetExtension struct { + autorest.Response `json:"-"` + // Name - The name of the extension. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *VirtualMachineScaleSetExtensionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtension. +func (vmsse VirtualMachineScaleSetExtension) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmsse.Name != nil { + objectMap["name"] = vmsse.Name + } + if vmsse.VirtualMachineScaleSetExtensionProperties != nil { + objectMap["properties"] = vmsse.VirtualMachineScaleSetExtensionProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetExtension struct. +func (vmsse *VirtualMachineScaleSetExtension) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmsse.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmsse.Type = &typeVar + } + case "properties": + if v != nil { + var virtualMachineScaleSetExtensionProperties VirtualMachineScaleSetExtensionProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetExtensionProperties) + if err != nil { + return err + } + vmsse.VirtualMachineScaleSetExtensionProperties = &virtualMachineScaleSetExtensionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmsse.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetExtensionListResult the List VM scale set extension operation response. +type VirtualMachineScaleSetExtensionListResult struct { + autorest.Response `json:"-"` + // Value - The list of VM scale set extensions. + Value *[]VirtualMachineScaleSetExtension `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetExtensionListResultIterator provides access to a complete listing of +// VirtualMachineScaleSetExtension values. +type VirtualMachineScaleSetExtensionListResultIterator struct { + i int + page VirtualMachineScaleSetExtensionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetExtensionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetExtensionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetExtensionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetExtensionListResultIterator) Response() VirtualMachineScaleSetExtensionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetExtensionListResultIterator) Value() VirtualMachineScaleSetExtension { + if !iter.page.NotDone() { + return VirtualMachineScaleSetExtension{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetExtensionListResultIterator type. +func NewVirtualMachineScaleSetExtensionListResultIterator(page VirtualMachineScaleSetExtensionListResultPage) VirtualMachineScaleSetExtensionListResultIterator { + return VirtualMachineScaleSetExtensionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmsselr VirtualMachineScaleSetExtensionListResult) IsEmpty() bool { + return vmsselr.Value == nil || len(*vmsselr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmsselr VirtualMachineScaleSetExtensionListResult) hasNextLink() bool { + return vmsselr.NextLink != nil && len(*vmsselr.NextLink) != 0 +} + +// virtualMachineScaleSetExtensionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmsselr VirtualMachineScaleSetExtensionListResult) virtualMachineScaleSetExtensionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmsselr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmsselr.NextLink))) +} + +// VirtualMachineScaleSetExtensionListResultPage contains a page of VirtualMachineScaleSetExtension values. +type VirtualMachineScaleSetExtensionListResultPage struct { + fn func(context.Context, VirtualMachineScaleSetExtensionListResult) (VirtualMachineScaleSetExtensionListResult, error) + vmsselr VirtualMachineScaleSetExtensionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetExtensionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmsselr) + if err != nil { + return err + } + page.vmsselr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetExtensionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetExtensionListResultPage) NotDone() bool { + return !page.vmsselr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetExtensionListResultPage) Response() VirtualMachineScaleSetExtensionListResult { + return page.vmsselr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetExtensionListResultPage) Values() []VirtualMachineScaleSetExtension { + if page.vmsselr.IsEmpty() { + return nil + } + return *page.vmsselr.Value +} + +// Creates a new instance of the VirtualMachineScaleSetExtensionListResultPage type. +func NewVirtualMachineScaleSetExtensionListResultPage(cur VirtualMachineScaleSetExtensionListResult, getNextPage func(context.Context, VirtualMachineScaleSetExtensionListResult) (VirtualMachineScaleSetExtensionListResult, error)) VirtualMachineScaleSetExtensionListResultPage { + return VirtualMachineScaleSetExtensionListResultPage{ + fn: getNextPage, + vmsselr: cur, + } +} + +// VirtualMachineScaleSetExtensionProfile describes a virtual machine scale set extension profile. +type VirtualMachineScaleSetExtensionProfile struct { + // Extensions - The virtual machine scale set child extension resources. + Extensions *[]VirtualMachineScaleSetExtension `json:"extensions,omitempty"` + // ExtensionsTimeBudget - Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M).

    Minimum api-version: 2020-06-01 + ExtensionsTimeBudget *string `json:"extensionsTimeBudget,omitempty"` +} + +// VirtualMachineScaleSetExtensionProperties describes the properties of a Virtual Machine Scale Set +// Extension. +type VirtualMachineScaleSetExtensionProperties struct { + // ForceUpdateTag - If a value is provided and is different from the previous value, the extension handler will be forced to update even if the extension configuration has not changed. + ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` + // Publisher - The name of the extension handler publisher. + Publisher *string `json:"publisher,omitempty"` + // Type - Specifies the type of the extension; an example is "CustomScriptExtension". + Type *string `json:"type,omitempty"` + // TypeHandlerVersion - Specifies the version of the script handler. + TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` + // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. + AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` + // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. + EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` + // Settings - Json formatted public settings for the extension. + Settings interface{} `json:"settings,omitempty"` + // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. + ProtectedSettings interface{} `json:"protectedSettings,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // ProvisionAfterExtensions - Collection of extension names after which this extension needs to be provisioned. + ProvisionAfterExtensions *[]string `json:"provisionAfterExtensions,omitempty"` + // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. + SuppressFailures *bool `json:"suppressFailures,omitempty"` + // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault + ProtectedSettingsFromKeyVault *KeyVaultSecretReference `json:"protectedSettingsFromKeyVault,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtensionProperties. +func (vmssep VirtualMachineScaleSetExtensionProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssep.ForceUpdateTag != nil { + objectMap["forceUpdateTag"] = vmssep.ForceUpdateTag + } + if vmssep.Publisher != nil { + objectMap["publisher"] = vmssep.Publisher + } + if vmssep.Type != nil { + objectMap["type"] = vmssep.Type + } + if vmssep.TypeHandlerVersion != nil { + objectMap["typeHandlerVersion"] = vmssep.TypeHandlerVersion + } + if vmssep.AutoUpgradeMinorVersion != nil { + objectMap["autoUpgradeMinorVersion"] = vmssep.AutoUpgradeMinorVersion + } + if vmssep.EnableAutomaticUpgrade != nil { + objectMap["enableAutomaticUpgrade"] = vmssep.EnableAutomaticUpgrade + } + if vmssep.Settings != nil { + objectMap["settings"] = vmssep.Settings + } + if vmssep.ProtectedSettings != nil { + objectMap["protectedSettings"] = vmssep.ProtectedSettings + } + if vmssep.ProvisionAfterExtensions != nil { + objectMap["provisionAfterExtensions"] = vmssep.ProvisionAfterExtensions + } + if vmssep.SuppressFailures != nil { + objectMap["suppressFailures"] = vmssep.SuppressFailures + } + if vmssep.ProtectedSettingsFromKeyVault != nil { + objectMap["protectedSettingsFromKeyVault"] = vmssep.ProtectedSettingsFromKeyVault + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualMachineScaleSetExtensionsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetExtensionsClient) (VirtualMachineScaleSetExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetExtensionsCreateOrUpdateFuture.Result. +func (future *VirtualMachineScaleSetExtensionsCreateOrUpdateFuture) result(client VirtualMachineScaleSetExtensionsClient) (vmsse VirtualMachineScaleSetExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmsse.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmsse.Response.Response, err = future.GetResult(sender); err == nil && vmsse.Response.Response.StatusCode != http.StatusNoContent { + vmsse, err = client.CreateOrUpdateResponder(vmsse.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture", "Result", vmsse.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetExtensionsDeleteFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineScaleSetExtensionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetExtensionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetExtensionsDeleteFuture.Result. +func (future *VirtualMachineScaleSetExtensionsDeleteFuture) result(client VirtualMachineScaleSetExtensionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetExtensionsUpdateFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineScaleSetExtensionsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetExtensionsClient) (VirtualMachineScaleSetExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetExtensionsUpdateFuture.Result. +func (future *VirtualMachineScaleSetExtensionsUpdateFuture) result(client VirtualMachineScaleSetExtensionsClient) (vmsse VirtualMachineScaleSetExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmsse.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmsse.Response.Response, err = future.GetResult(sender); err == nil && vmsse.Response.Response.StatusCode != http.StatusNoContent { + vmsse, err = client.UpdateResponder(vmsse.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsUpdateFuture", "Result", vmsse.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetExtensionUpdate describes a Virtual Machine Scale Set Extension. +type VirtualMachineScaleSetExtensionUpdate struct { + // Name - READ-ONLY; The name of the extension. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *VirtualMachineScaleSetExtensionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtensionUpdate. +func (vmsseu VirtualMachineScaleSetExtensionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmsseu.VirtualMachineScaleSetExtensionProperties != nil { + objectMap["properties"] = vmsseu.VirtualMachineScaleSetExtensionProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetExtensionUpdate struct. +func (vmsseu *VirtualMachineScaleSetExtensionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmsseu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmsseu.Type = &typeVar + } + case "properties": + if v != nil { + var virtualMachineScaleSetExtensionProperties VirtualMachineScaleSetExtensionProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetExtensionProperties) + if err != nil { + return err + } + vmsseu.VirtualMachineScaleSetExtensionProperties = &virtualMachineScaleSetExtensionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmsseu.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetHardwareProfile specifies the hardware settings for the virtual machine scale set. +type VirtualMachineScaleSetHardwareProfile struct { + // VMSizeProperties - Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-11-01.

    Please follow the instructions in [VM Customization](https://aka.ms/vmcustomization) for more details. + VMSizeProperties *VMSizeProperties `json:"vmSizeProperties,omitempty"` +} + +// VirtualMachineScaleSetIdentity identity for the virtual machine scale set. +type VirtualMachineScaleSetIdentity struct { + // PrincipalID - READ-ONLY; The principal id of virtual machine scale set identity. This property will only be provided for a system assigned identity. + PrincipalID *string `json:"principalId,omitempty"` + // TenantID - READ-ONLY; The tenant id associated with the virtual machine scale set. This property will only be provided for a system assigned identity. + TenantID *string `json:"tenantId,omitempty"` + // Type - The type of identity used for the virtual machine scale set. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine scale set. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' + Type ResourceIdentityType `json:"type,omitempty"` + // UserAssignedIdentities - The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + UserAssignedIdentities map[string]*UserAssignedIdentitiesValue `json:"userAssignedIdentities"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetIdentity. +func (vmssi VirtualMachineScaleSetIdentity) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssi.Type != "" { + objectMap["type"] = vmssi.Type + } + if vmssi.UserAssignedIdentities != nil { + objectMap["userAssignedIdentities"] = vmssi.UserAssignedIdentities + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetInstanceView the instance view of a virtual machine scale set. +type VirtualMachineScaleSetInstanceView struct { + autorest.Response `json:"-"` + // VirtualMachine - READ-ONLY; The instance view status summary for the virtual machine scale set. + VirtualMachine *VirtualMachineScaleSetInstanceViewStatusesSummary `json:"virtualMachine,omitempty"` + // Extensions - READ-ONLY; The extensions information. + Extensions *[]VirtualMachineScaleSetVMExtensionsSummary `json:"extensions,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` + // OrchestrationServices - READ-ONLY; The orchestration services information. + OrchestrationServices *[]OrchestrationServiceSummary `json:"orchestrationServices,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetInstanceView. +func (vmssiv VirtualMachineScaleSetInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssiv.Statuses != nil { + objectMap["statuses"] = vmssiv.Statuses + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetInstanceViewStatusesSummary instance view statuses summary for virtual machines of +// a virtual machine scale set. +type VirtualMachineScaleSetInstanceViewStatusesSummary struct { + // StatusesSummary - READ-ONLY; The extensions information. + StatusesSummary *[]VirtualMachineStatusCodeCount `json:"statusesSummary,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetInstanceViewStatusesSummary. +func (vmssivss VirtualMachineScaleSetInstanceViewStatusesSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetIPConfiguration describes a virtual machine scale set network profile's IP +// configuration. +type VirtualMachineScaleSetIPConfiguration struct { + // Name - The IP configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetIPConfigurationProperties `json:"properties,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetIPConfiguration. +func (vmssic VirtualMachineScaleSetIPConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssic.Name != nil { + objectMap["name"] = vmssic.Name + } + if vmssic.VirtualMachineScaleSetIPConfigurationProperties != nil { + objectMap["properties"] = vmssic.VirtualMachineScaleSetIPConfigurationProperties + } + if vmssic.ID != nil { + objectMap["id"] = vmssic.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetIPConfiguration struct. +func (vmssic *VirtualMachineScaleSetIPConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssic.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetIPConfigurationProperties VirtualMachineScaleSetIPConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetIPConfigurationProperties) + if err != nil { + return err + } + vmssic.VirtualMachineScaleSetIPConfigurationProperties = &virtualMachineScaleSetIPConfigurationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssic.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetIPConfigurationProperties describes a virtual machine scale set network profile's +// IP configuration properties. +type VirtualMachineScaleSetIPConfigurationProperties struct { + // Subnet - Specifies the identifier of the subnet. + Subnet *APIEntityReference `json:"subnet,omitempty"` + // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. + Primary *bool `json:"primary,omitempty"` + // PublicIPAddressConfiguration - The publicIPAddressConfiguration. + PublicIPAddressConfiguration *VirtualMachineScaleSetPublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` + // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' + PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` + // ApplicationGatewayBackendAddressPools - Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway. + ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` + // ApplicationSecurityGroups - Specifies an array of references to application security group. + ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` + // LoadBalancerBackendAddressPools - Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. + LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` + // LoadBalancerInboundNatPools - Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. + LoadBalancerInboundNatPools *[]SubResource `json:"loadBalancerInboundNatPools,omitempty"` +} + +// VirtualMachineScaleSetIPTag contains the IP tag associated with the public IP address. +type VirtualMachineScaleSetIPTag struct { + // IPTagType - IP tag type. Example: FirstPartyUsage. + IPTagType *string `json:"ipTagType,omitempty"` + // Tag - IP tag associated with the public IP. Example: SQL, Storage etc. + Tag *string `json:"tag,omitempty"` +} + +// VirtualMachineScaleSetListOSUpgradeHistory list of Virtual Machine Scale Set OS Upgrade History +// operation response. +type VirtualMachineScaleSetListOSUpgradeHistory struct { + autorest.Response `json:"-"` + // Value - The list of OS upgrades performed on the virtual machine scale set. + Value *[]UpgradeOperationHistoricalStatusInfo `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetListOSUpgradeHistoryIterator provides access to a complete listing of +// UpgradeOperationHistoricalStatusInfo values. +type VirtualMachineScaleSetListOSUpgradeHistoryIterator struct { + i int + page VirtualMachineScaleSetListOSUpgradeHistoryPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetListOSUpgradeHistoryIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListOSUpgradeHistoryIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetListOSUpgradeHistoryIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) Response() VirtualMachineScaleSetListOSUpgradeHistory { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) Value() UpgradeOperationHistoricalStatusInfo { + if !iter.page.NotDone() { + return UpgradeOperationHistoricalStatusInfo{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetListOSUpgradeHistoryIterator type. +func NewVirtualMachineScaleSetListOSUpgradeHistoryIterator(page VirtualMachineScaleSetListOSUpgradeHistoryPage) VirtualMachineScaleSetListOSUpgradeHistoryIterator { + return VirtualMachineScaleSetListOSUpgradeHistoryIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) IsEmpty() bool { + return vmsslouh.Value == nil || len(*vmsslouh.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) hasNextLink() bool { + return vmsslouh.NextLink != nil && len(*vmsslouh.NextLink) != 0 +} + +// virtualMachineScaleSetListOSUpgradeHistoryPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) virtualMachineScaleSetListOSUpgradeHistoryPreparer(ctx context.Context) (*http.Request, error) { + if !vmsslouh.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmsslouh.NextLink))) +} + +// VirtualMachineScaleSetListOSUpgradeHistoryPage contains a page of UpgradeOperationHistoricalStatusInfo +// values. +type VirtualMachineScaleSetListOSUpgradeHistoryPage struct { + fn func(context.Context, VirtualMachineScaleSetListOSUpgradeHistory) (VirtualMachineScaleSetListOSUpgradeHistory, error) + vmsslouh VirtualMachineScaleSetListOSUpgradeHistory +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetListOSUpgradeHistoryPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListOSUpgradeHistoryPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmsslouh) + if err != nil { + return err + } + page.vmsslouh = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetListOSUpgradeHistoryPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) NotDone() bool { + return !page.vmsslouh.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) Response() VirtualMachineScaleSetListOSUpgradeHistory { + return page.vmsslouh +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) Values() []UpgradeOperationHistoricalStatusInfo { + if page.vmsslouh.IsEmpty() { + return nil + } + return *page.vmsslouh.Value +} + +// Creates a new instance of the VirtualMachineScaleSetListOSUpgradeHistoryPage type. +func NewVirtualMachineScaleSetListOSUpgradeHistoryPage(cur VirtualMachineScaleSetListOSUpgradeHistory, getNextPage func(context.Context, VirtualMachineScaleSetListOSUpgradeHistory) (VirtualMachineScaleSetListOSUpgradeHistory, error)) VirtualMachineScaleSetListOSUpgradeHistoryPage { + return VirtualMachineScaleSetListOSUpgradeHistoryPage{ + fn: getNextPage, + vmsslouh: cur, + } +} + +// VirtualMachineScaleSetListResult the List Virtual Machine operation response. +type VirtualMachineScaleSetListResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machine scale sets. + Value *[]VirtualMachineScaleSet `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetListResultIterator provides access to a complete listing of VirtualMachineScaleSet +// values. +type VirtualMachineScaleSetListResultIterator struct { + i int + page VirtualMachineScaleSetListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetListResultIterator) Response() VirtualMachineScaleSetListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetListResultIterator) Value() VirtualMachineScaleSet { + if !iter.page.NotDone() { + return VirtualMachineScaleSet{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetListResultIterator type. +func NewVirtualMachineScaleSetListResultIterator(page VirtualMachineScaleSetListResultPage) VirtualMachineScaleSetListResultIterator { + return VirtualMachineScaleSetListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmsslr VirtualMachineScaleSetListResult) IsEmpty() bool { + return vmsslr.Value == nil || len(*vmsslr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmsslr VirtualMachineScaleSetListResult) hasNextLink() bool { + return vmsslr.NextLink != nil && len(*vmsslr.NextLink) != 0 +} + +// virtualMachineScaleSetListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmsslr VirtualMachineScaleSetListResult) virtualMachineScaleSetListResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmsslr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmsslr.NextLink))) +} + +// VirtualMachineScaleSetListResultPage contains a page of VirtualMachineScaleSet values. +type VirtualMachineScaleSetListResultPage struct { + fn func(context.Context, VirtualMachineScaleSetListResult) (VirtualMachineScaleSetListResult, error) + vmsslr VirtualMachineScaleSetListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmsslr) + if err != nil { + return err + } + page.vmsslr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetListResultPage) NotDone() bool { + return !page.vmsslr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetListResultPage) Response() VirtualMachineScaleSetListResult { + return page.vmsslr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetListResultPage) Values() []VirtualMachineScaleSet { + if page.vmsslr.IsEmpty() { + return nil + } + return *page.vmsslr.Value +} + +// Creates a new instance of the VirtualMachineScaleSetListResultPage type. +func NewVirtualMachineScaleSetListResultPage(cur VirtualMachineScaleSetListResult, getNextPage func(context.Context, VirtualMachineScaleSetListResult) (VirtualMachineScaleSetListResult, error)) VirtualMachineScaleSetListResultPage { + return VirtualMachineScaleSetListResultPage{ + fn: getNextPage, + vmsslr: cur, + } +} + +// VirtualMachineScaleSetListSkusResult the Virtual Machine Scale Set List Skus operation response. +type VirtualMachineScaleSetListSkusResult struct { + autorest.Response `json:"-"` + // Value - The list of skus available for the virtual machine scale set. + Value *[]VirtualMachineScaleSetSku `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetListSkusResultIterator provides access to a complete listing of +// VirtualMachineScaleSetSku values. +type VirtualMachineScaleSetListSkusResultIterator struct { + i int + page VirtualMachineScaleSetListSkusResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetListSkusResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListSkusResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetListSkusResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetListSkusResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetListSkusResultIterator) Response() VirtualMachineScaleSetListSkusResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetListSkusResultIterator) Value() VirtualMachineScaleSetSku { + if !iter.page.NotDone() { + return VirtualMachineScaleSetSku{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetListSkusResultIterator type. +func NewVirtualMachineScaleSetListSkusResultIterator(page VirtualMachineScaleSetListSkusResultPage) VirtualMachineScaleSetListSkusResultIterator { + return VirtualMachineScaleSetListSkusResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmsslsr VirtualMachineScaleSetListSkusResult) IsEmpty() bool { + return vmsslsr.Value == nil || len(*vmsslsr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmsslsr VirtualMachineScaleSetListSkusResult) hasNextLink() bool { + return vmsslsr.NextLink != nil && len(*vmsslsr.NextLink) != 0 +} + +// virtualMachineScaleSetListSkusResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmsslsr VirtualMachineScaleSetListSkusResult) virtualMachineScaleSetListSkusResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmsslsr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmsslsr.NextLink))) +} + +// VirtualMachineScaleSetListSkusResultPage contains a page of VirtualMachineScaleSetSku values. +type VirtualMachineScaleSetListSkusResultPage struct { + fn func(context.Context, VirtualMachineScaleSetListSkusResult) (VirtualMachineScaleSetListSkusResult, error) + vmsslsr VirtualMachineScaleSetListSkusResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetListSkusResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListSkusResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmsslsr) + if err != nil { + return err + } + page.vmsslsr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetListSkusResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetListSkusResultPage) NotDone() bool { + return !page.vmsslsr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetListSkusResultPage) Response() VirtualMachineScaleSetListSkusResult { + return page.vmsslsr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetListSkusResultPage) Values() []VirtualMachineScaleSetSku { + if page.vmsslsr.IsEmpty() { + return nil + } + return *page.vmsslsr.Value +} + +// Creates a new instance of the VirtualMachineScaleSetListSkusResultPage type. +func NewVirtualMachineScaleSetListSkusResultPage(cur VirtualMachineScaleSetListSkusResult, getNextPage func(context.Context, VirtualMachineScaleSetListSkusResult) (VirtualMachineScaleSetListSkusResult, error)) VirtualMachineScaleSetListSkusResultPage { + return VirtualMachineScaleSetListSkusResultPage{ + fn: getNextPage, + vmsslsr: cur, + } +} + +// VirtualMachineScaleSetListWithLinkResult the List Virtual Machine operation response. +type VirtualMachineScaleSetListWithLinkResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machine scale sets. + Value *[]VirtualMachineScaleSet `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetListWithLinkResultIterator provides access to a complete listing of +// VirtualMachineScaleSet values. +type VirtualMachineScaleSetListWithLinkResultIterator struct { + i int + page VirtualMachineScaleSetListWithLinkResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetListWithLinkResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListWithLinkResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetListWithLinkResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetListWithLinkResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetListWithLinkResultIterator) Response() VirtualMachineScaleSetListWithLinkResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetListWithLinkResultIterator) Value() VirtualMachineScaleSet { + if !iter.page.NotDone() { + return VirtualMachineScaleSet{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetListWithLinkResultIterator type. +func NewVirtualMachineScaleSetListWithLinkResultIterator(page VirtualMachineScaleSetListWithLinkResultPage) VirtualMachineScaleSetListWithLinkResultIterator { + return VirtualMachineScaleSetListWithLinkResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) IsEmpty() bool { + return vmsslwlr.Value == nil || len(*vmsslwlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) hasNextLink() bool { + return vmsslwlr.NextLink != nil && len(*vmsslwlr.NextLink) != 0 +} + +// virtualMachineScaleSetListWithLinkResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) virtualMachineScaleSetListWithLinkResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmsslwlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmsslwlr.NextLink))) +} + +// VirtualMachineScaleSetListWithLinkResultPage contains a page of VirtualMachineScaleSet values. +type VirtualMachineScaleSetListWithLinkResultPage struct { + fn func(context.Context, VirtualMachineScaleSetListWithLinkResult) (VirtualMachineScaleSetListWithLinkResult, error) + vmsslwlr VirtualMachineScaleSetListWithLinkResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetListWithLinkResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListWithLinkResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmsslwlr) + if err != nil { + return err + } + page.vmsslwlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetListWithLinkResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetListWithLinkResultPage) NotDone() bool { + return !page.vmsslwlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetListWithLinkResultPage) Response() VirtualMachineScaleSetListWithLinkResult { + return page.vmsslwlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetListWithLinkResultPage) Values() []VirtualMachineScaleSet { + if page.vmsslwlr.IsEmpty() { + return nil + } + return *page.vmsslwlr.Value +} + +// Creates a new instance of the VirtualMachineScaleSetListWithLinkResultPage type. +func NewVirtualMachineScaleSetListWithLinkResultPage(cur VirtualMachineScaleSetListWithLinkResult, getNextPage func(context.Context, VirtualMachineScaleSetListWithLinkResult) (VirtualMachineScaleSetListWithLinkResult, error)) VirtualMachineScaleSetListWithLinkResultPage { + return VirtualMachineScaleSetListWithLinkResultPage{ + fn: getNextPage, + vmsslwlr: cur, + } +} + +// VirtualMachineScaleSetManagedDiskParameters describes the parameters of a ScaleSet managed disk. +type VirtualMachineScaleSetManagedDiskParameters struct { + // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' + StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` + // SecurityProfile - Specifies the security profile for the managed disk. + SecurityProfile *VMDiskSecurityProfile `json:"securityProfile,omitempty"` +} + +// VirtualMachineScaleSetNetworkConfiguration describes a virtual machine scale set network profile's +// network configurations. +type VirtualMachineScaleSetNetworkConfiguration struct { + // Name - The network configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetNetworkConfigurationProperties `json:"properties,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetNetworkConfiguration. +func (vmssnc VirtualMachineScaleSetNetworkConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssnc.Name != nil { + objectMap["name"] = vmssnc.Name + } + if vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties != nil { + objectMap["properties"] = vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties + } + if vmssnc.ID != nil { + objectMap["id"] = vmssnc.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetNetworkConfiguration struct. +func (vmssnc *VirtualMachineScaleSetNetworkConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssnc.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetNetworkConfigurationProperties VirtualMachineScaleSetNetworkConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetNetworkConfigurationProperties) + if err != nil { + return err + } + vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties = &virtualMachineScaleSetNetworkConfigurationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssnc.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetNetworkConfigurationDNSSettings describes a virtual machines scale sets network +// configuration's DNS settings. +type VirtualMachineScaleSetNetworkConfigurationDNSSettings struct { + // DNSServers - List of DNS servers IP addresses + DNSServers *[]string `json:"dnsServers,omitempty"` +} + +// VirtualMachineScaleSetNetworkConfigurationProperties describes a virtual machine scale set network +// profile's IP configuration. +type VirtualMachineScaleSetNetworkConfigurationProperties struct { + // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. + Primary *bool `json:"primary,omitempty"` + // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. + EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` + // DisableTCPStateTracking - Specifies whether the network interface is disabled for tcp state tracking. + DisableTCPStateTracking *bool `json:"disableTcpStateTracking,omitempty"` + // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. + EnableFpga *bool `json:"enableFpga,omitempty"` + // NetworkSecurityGroup - The network security group. + NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` + // DNSSettings - The dns settings to be applied on the network interfaces. + DNSSettings *VirtualMachineScaleSetNetworkConfigurationDNSSettings `json:"dnsSettings,omitempty"` + // IPConfigurations - Specifies the IP configurations of the network interface. + IPConfigurations *[]VirtualMachineScaleSetIPConfiguration `json:"ipConfigurations,omitempty"` + // EnableIPForwarding - Whether IP forwarding enabled on this NIC. + EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` + // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetNetworkProfile describes a virtual machine scale set network profile. +type VirtualMachineScaleSetNetworkProfile struct { + // HealthProbe - A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + HealthProbe *APIEntityReference `json:"healthProbe,omitempty"` + // NetworkInterfaceConfigurations - The list of network configurations. + NetworkInterfaceConfigurations *[]VirtualMachineScaleSetNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` + // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with orchestration mode 'Flexible'. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' + NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` +} + +// VirtualMachineScaleSetOSDisk describes a virtual machine scale set operating system disk. +type VirtualMachineScaleSetOSDisk struct { + // Name - The disk name. + Name *string `json:"name,omitempty"` + // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. + WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` + // CreateOption - Specifies how the virtual machines in the scale set should be created.

    The only allowed value is: **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' + CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` + // DiffDiskSettings - Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. + DiffDiskSettings *DiffDiskSettings `json:"diffDiskSettings,omitempty"` + // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023 + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' + OsType OperatingSystemTypes `json:"osType,omitempty"` + // Image - Specifies information about the unmanaged user image to base the scale set on. + Image *VirtualHardDisk `json:"image,omitempty"` + // VhdContainers - Specifies the container urls that are used to store operating system disks for the scale set. + VhdContainers *[]string `json:"vhdContainers,omitempty"` + // ManagedDisk - The managed disk parameters. + ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` + // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the OS disk is deleted when VMSS Flex VM is deleted.

    **Detach** If this value is used, the OS disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' + DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetOSProfile describes a virtual machine scale set OS profile. +type VirtualMachineScaleSetOSProfile struct { + // ComputerNamePrefix - Specifies the computer name prefix for all of the virtual machines in the scale set. Computer name prefixes must be 1 to 15 characters long. + ComputerNamePrefix *string `json:"computerNamePrefix,omitempty"` + // AdminUsername - Specifies the name of the administrator account.

    **Windows-only restriction:** Cannot end in "."

    **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".

    **Minimum-length (Linux):** 1 character

    **Max-length (Linux):** 64 characters

    **Max-length (Windows):** 20 characters + AdminUsername *string `json:"adminUsername,omitempty"` + // AdminPassword - Specifies the password of the administrator account.

    **Minimum-length (Windows):** 8 characters

    **Minimum-length (Linux):** 6 characters

    **Max-length (Windows):** 123 characters

    **Max-length (Linux):** 72 characters

    **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled
    Has lower characters
    Has upper characters
    Has a digit
    Has a special character (Regex match [\W_])

    **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!"

    For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/reset-rdp)

    For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/troubleshoot-ssh-connection) + AdminPassword *string `json:"adminPassword,omitempty"` + // CustomData - Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes.

    For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/linux/using-cloud-init) + CustomData *string `json:"customData,omitempty"` + // WindowsConfiguration - Specifies Windows operating system settings on the virtual machine. + WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` + // LinuxConfiguration - Specifies the Linux operating system settings on the virtual machine.

    For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). + LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` + // Secrets - Specifies set of certificates that should be installed onto the virtual machines in the scale set. To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). + Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` + // AllowExtensionOperations - Specifies whether extension operations should be allowed on the virtual machine scale set.

    This may only be set to False when no extensions are present on the virtual machine scale set. + AllowExtensionOperations *bool `json:"allowExtensionOperations,omitempty"` +} + +// VirtualMachineScaleSetProperties describes the properties of a Virtual Machine Scale Set. +type VirtualMachineScaleSetProperties struct { + // UpgradePolicy - The upgrade policy. + UpgradePolicy *UpgradePolicy `json:"upgradePolicy,omitempty"` + // AutomaticRepairsPolicy - Policy for automatic repairs. + AutomaticRepairsPolicy *AutomaticRepairsPolicy `json:"automaticRepairsPolicy,omitempty"` + // VirtualMachineProfile - The virtual machine profile. + VirtualMachineProfile *VirtualMachineScaleSetVMProfile `json:"virtualMachineProfile,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // Overprovision - Specifies whether the Virtual Machine Scale Set should be overprovisioned. + Overprovision *bool `json:"overprovision,omitempty"` + // DoNotRunExtensionsOnOverprovisionedVMs - When Overprovision is enabled, extensions are launched only on the requested number of VMs which are finally kept. This property will hence ensure that the extensions do not run on the extra overprovisioned VMs. + DoNotRunExtensionsOnOverprovisionedVMs *bool `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"` + // UniqueID - READ-ONLY; Specifies the ID which uniquely identifies a Virtual Machine Scale Set. + UniqueID *string `json:"uniqueId,omitempty"` + // SinglePlacementGroup - When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true. + SinglePlacementGroup *bool `json:"singlePlacementGroup,omitempty"` + // ZoneBalance - Whether to force strictly even Virtual Machine distribution cross x-zones in case there is zone outage. zoneBalance property can only be set if the zones property of the scale set contains more than one zone. If there are no zones or only one zone specified, then zoneBalance property should not be set. + ZoneBalance *bool `json:"zoneBalance,omitempty"` + // PlatformFaultDomainCount - Fault Domain count for each placement group. + PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` + // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine scale set should be assigned to.

    Minimum api-version: 2018-04-01. + ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` + // HostGroup - Specifies information about the dedicated host group that the virtual machine scale set resides in.

    Minimum api-version: 2020-06-01. + HostGroup *SubResource `json:"hostGroup,omitempty"` + // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. + AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` + // ScaleInPolicy - Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. + ScaleInPolicy *ScaleInPolicy `json:"scaleInPolicy,omitempty"` + // OrchestrationMode - Specifies the orchestration mode for the virtual machine scale set. Possible values include: 'Uniform', 'Flexible' + OrchestrationMode OrchestrationMode `json:"orchestrationMode,omitempty"` + // SpotRestorePolicy - Specifies the Spot Restore properties for the virtual machine scale set. + SpotRestorePolicy *SpotRestorePolicy `json:"spotRestorePolicy,omitempty"` + // PriorityMixPolicy - Specifies the desired targets for mixing Spot and Regular priority VMs within the same VMSS Flex instance. + PriorityMixPolicy *PriorityMixPolicy `json:"priorityMixPolicy,omitempty"` + // TimeCreated - READ-ONLY; Specifies the time at which the Virtual Machine Scale Set resource was created.

    Minimum api-version: 2021-11-01. + TimeCreated *date.Time `json:"timeCreated,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetProperties. +func (vmssp VirtualMachineScaleSetProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssp.UpgradePolicy != nil { + objectMap["upgradePolicy"] = vmssp.UpgradePolicy + } + if vmssp.AutomaticRepairsPolicy != nil { + objectMap["automaticRepairsPolicy"] = vmssp.AutomaticRepairsPolicy + } + if vmssp.VirtualMachineProfile != nil { + objectMap["virtualMachineProfile"] = vmssp.VirtualMachineProfile + } + if vmssp.Overprovision != nil { + objectMap["overprovision"] = vmssp.Overprovision + } + if vmssp.DoNotRunExtensionsOnOverprovisionedVMs != nil { + objectMap["doNotRunExtensionsOnOverprovisionedVMs"] = vmssp.DoNotRunExtensionsOnOverprovisionedVMs + } + if vmssp.SinglePlacementGroup != nil { + objectMap["singlePlacementGroup"] = vmssp.SinglePlacementGroup + } + if vmssp.ZoneBalance != nil { + objectMap["zoneBalance"] = vmssp.ZoneBalance + } + if vmssp.PlatformFaultDomainCount != nil { + objectMap["platformFaultDomainCount"] = vmssp.PlatformFaultDomainCount + } + if vmssp.ProximityPlacementGroup != nil { + objectMap["proximityPlacementGroup"] = vmssp.ProximityPlacementGroup + } + if vmssp.HostGroup != nil { + objectMap["hostGroup"] = vmssp.HostGroup + } + if vmssp.AdditionalCapabilities != nil { + objectMap["additionalCapabilities"] = vmssp.AdditionalCapabilities + } + if vmssp.ScaleInPolicy != nil { + objectMap["scaleInPolicy"] = vmssp.ScaleInPolicy + } + if vmssp.OrchestrationMode != "" { + objectMap["orchestrationMode"] = vmssp.OrchestrationMode + } + if vmssp.SpotRestorePolicy != nil { + objectMap["spotRestorePolicy"] = vmssp.SpotRestorePolicy + } + if vmssp.PriorityMixPolicy != nil { + objectMap["priorityMixPolicy"] = vmssp.PriorityMixPolicy + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetPublicIPAddressConfiguration describes a virtual machines scale set IP +// Configuration's PublicIPAddress configuration +type VirtualMachineScaleSetPublicIPAddressConfiguration struct { + // Name - The publicIP address configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetPublicIPAddressConfigurationProperties `json:"properties,omitempty"` + Sku *PublicIPAddressSku `json:"sku,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetPublicIPAddressConfiguration. +func (vmsspiac VirtualMachineScaleSetPublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmsspiac.Name != nil { + objectMap["name"] = vmsspiac.Name + } + if vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties != nil { + objectMap["properties"] = vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties + } + if vmsspiac.Sku != nil { + objectMap["sku"] = vmsspiac.Sku + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetPublicIPAddressConfiguration struct. +func (vmsspiac *VirtualMachineScaleSetPublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmsspiac.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetPublicIPAddressConfigurationProperties VirtualMachineScaleSetPublicIPAddressConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetPublicIPAddressConfigurationProperties) + if err != nil { + return err + } + vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties = &virtualMachineScaleSetPublicIPAddressConfigurationProperties + } + case "sku": + if v != nil { + var sku PublicIPAddressSku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + vmsspiac.Sku = &sku + } + } + } + + return nil +} + +// VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings describes a virtual machines scale sets +// network configuration's DNS settings. +type VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings struct { + // DomainNameLabel - The Domain name label.The concatenation of the domain name label and vm index will be the domain name labels of the PublicIPAddress resources that will be created + DomainNameLabel *string `json:"domainNameLabel,omitempty"` +} + +// VirtualMachineScaleSetPublicIPAddressConfigurationProperties describes a virtual machines scale set IP +// Configuration's PublicIPAddress configuration +type VirtualMachineScaleSetPublicIPAddressConfigurationProperties struct { + // IdleTimeoutInMinutes - The idle timeout of the public IP address. + IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` + // DNSSettings - The dns settings to be applied on the publicIP addresses . + DNSSettings *VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings `json:"dnsSettings,omitempty"` + // IPTags - The list of IP tags associated with the public IP address. + IPTags *[]VirtualMachineScaleSetIPTag `json:"ipTags,omitempty"` + // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. + PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` + // PublicIPAddressVersion - Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' + PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"` + // DeleteOption - Specify what happens to the public IP when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetReimageParameters describes a Virtual Machine Scale Set VM Reimage Parameters. +type VirtualMachineScaleSetReimageParameters struct { + // InstanceIds - The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set. + InstanceIds *[]string `json:"instanceIds,omitempty"` + // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. + TempDisk *bool `json:"tempDisk,omitempty"` +} + +// VirtualMachineScaleSetRollingUpgradesCancelFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualMachineScaleSetRollingUpgradesCancelFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetRollingUpgradesCancelFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetRollingUpgradesCancelFuture.Result. +func (future *VirtualMachineScaleSetRollingUpgradesCancelFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesCancelFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesCancelFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture an abstraction for monitoring and +// retrieving the results of a long-running operation. +type VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture.Result. +func (future *VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture an abstraction for monitoring and retrieving +// the results of a long-running operation. +type VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture.Result. +func (future *VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineScaleSetsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (VirtualMachineScaleSet, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsCreateOrUpdateFuture.Result. +func (future *VirtualMachineScaleSetsCreateOrUpdateFuture) result(client VirtualMachineScaleSetsClient) (vmss VirtualMachineScaleSet, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmss.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmss.Response.Response, err = future.GetResult(sender); err == nil && vmss.Response.Response.StatusCode != http.StatusNoContent { + vmss, err = client.CreateOrUpdateResponder(vmss.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsCreateOrUpdateFuture", "Result", vmss.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetsDeallocateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsDeallocateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsDeallocateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsDeallocateFuture.Result. +func (future *VirtualMachineScaleSetsDeallocateFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeallocateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeallocateFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsDeleteFuture.Result. +func (future *VirtualMachineScaleSetsDeleteFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsDeleteInstancesFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineScaleSetsDeleteInstancesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsDeleteInstancesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsDeleteInstancesFuture.Result. +func (future *VirtualMachineScaleSetsDeleteInstancesFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeleteInstancesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeleteInstancesFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetSku describes an available virtual machine scale set sku. +type VirtualMachineScaleSetSku struct { + // ResourceType - READ-ONLY; The type of resource the sku applies to. + ResourceType *string `json:"resourceType,omitempty"` + // Sku - READ-ONLY; The Sku. + Sku *Sku `json:"sku,omitempty"` + // Capacity - READ-ONLY; Specifies the number of virtual machines in the scale set. + Capacity *VirtualMachineScaleSetSkuCapacity `json:"capacity,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetSku. +func (vmsss VirtualMachineScaleSetSku) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetSkuCapacity describes scaling information of a sku. +type VirtualMachineScaleSetSkuCapacity struct { + // Minimum - READ-ONLY; The minimum capacity. + Minimum *int64 `json:"minimum,omitempty"` + // Maximum - READ-ONLY; The maximum capacity that can be set. + Maximum *int64 `json:"maximum,omitempty"` + // DefaultCapacity - READ-ONLY; The default capacity. + DefaultCapacity *int64 `json:"defaultCapacity,omitempty"` + // ScaleType - READ-ONLY; The scale type applicable to the sku. Possible values include: 'VirtualMachineScaleSetSkuScaleTypeAutomatic', 'VirtualMachineScaleSetSkuScaleTypeNone' + ScaleType VirtualMachineScaleSetSkuScaleType `json:"scaleType,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetSkuCapacity. +func (vmsssc VirtualMachineScaleSetSkuCapacity) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetsPerformMaintenanceFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineScaleSetsPerformMaintenanceFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsPerformMaintenanceFuture.Result. +func (future *VirtualMachineScaleSetsPerformMaintenanceFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsPerformMaintenanceFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsPowerOffFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsPowerOffFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsPowerOffFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsPowerOffFuture.Result. +func (future *VirtualMachineScaleSetsPowerOffFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsPowerOffFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsPowerOffFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsRedeployFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsRedeployFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsRedeployFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsRedeployFuture.Result. +func (future *VirtualMachineScaleSetsRedeployFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsRedeployFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsRedeployFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsReimageAllFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsReimageAllFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsReimageAllFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsReimageAllFuture.Result. +func (future *VirtualMachineScaleSetsReimageAllFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsReimageAllFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsReimageAllFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsReimageFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsReimageFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsReimageFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsReimageFuture.Result. +func (future *VirtualMachineScaleSetsReimageFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsReimageFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsReimageFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsRestartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsRestartFuture.Result. +func (future *VirtualMachineScaleSetsRestartFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsSetOrchestrationServiceStateFuture an abstraction for monitoring and retrieving +// the results of a long-running operation. +type VirtualMachineScaleSetsSetOrchestrationServiceStateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsSetOrchestrationServiceStateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsSetOrchestrationServiceStateFuture.Result. +func (future *VirtualMachineScaleSetsSetOrchestrationServiceStateFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsSetOrchestrationServiceStateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsSetOrchestrationServiceStateFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetsStartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsStartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsStartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsStartFuture.Result. +func (future *VirtualMachineScaleSetsStartFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsStartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsStartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetStorageProfile describes a virtual machine scale set storage profile. +type VirtualMachineScaleSetStorageProfile struct { + // ImageReference - Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. + ImageReference *ImageReference `json:"imageReference,omitempty"` + // OsDisk - Specifies information about the operating system disk used by the virtual machines in the scale set.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + OsDisk *VirtualMachineScaleSetOSDisk `json:"osDisk,omitempty"` + // DataDisks - Specifies the parameters that are used to add data disks to the virtual machines in the scale set.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). + DataDisks *[]VirtualMachineScaleSetDataDisk `json:"dataDisks,omitempty"` + DiskControllerType *string `json:"diskControllerType,omitempty"` +} + +// VirtualMachineScaleSetsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (VirtualMachineScaleSet, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsUpdateFuture.Result. +func (future *VirtualMachineScaleSetsUpdateFuture) result(client VirtualMachineScaleSetsClient) (vmss VirtualMachineScaleSet, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmss.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmss.Response.Response, err = future.GetResult(sender); err == nil && vmss.Response.Response.StatusCode != http.StatusNoContent { + vmss, err = client.UpdateResponder(vmss.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateFuture", "Result", vmss.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetsUpdateInstancesFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type VirtualMachineScaleSetsUpdateInstancesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetsUpdateInstancesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetsUpdateInstancesFuture.Result. +func (future *VirtualMachineScaleSetsUpdateInstancesFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateInstancesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsUpdateInstancesFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetUpdate describes a Virtual Machine Scale Set. +type VirtualMachineScaleSetUpdate struct { + // Sku - The virtual machine scale set sku. + Sku *Sku `json:"sku,omitempty"` + // Plan - The purchase plan when deploying a virtual machine scale set from VM Marketplace images. + Plan *Plan `json:"plan,omitempty"` + *VirtualMachineScaleSetUpdateProperties `json:"properties,omitempty"` + // Identity - The identity of the virtual machine scale set, if configured. + Identity *VirtualMachineScaleSetIdentity `json:"identity,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdate. +func (vmssu VirtualMachineScaleSetUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssu.Sku != nil { + objectMap["sku"] = vmssu.Sku + } + if vmssu.Plan != nil { + objectMap["plan"] = vmssu.Plan + } + if vmssu.VirtualMachineScaleSetUpdateProperties != nil { + objectMap["properties"] = vmssu.VirtualMachineScaleSetUpdateProperties + } + if vmssu.Identity != nil { + objectMap["identity"] = vmssu.Identity + } + if vmssu.Tags != nil { + objectMap["tags"] = vmssu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdate struct. +func (vmssu *VirtualMachineScaleSetUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + vmssu.Sku = &sku + } + case "plan": + if v != nil { + var plan Plan + err = json.Unmarshal(*v, &plan) + if err != nil { + return err + } + vmssu.Plan = &plan + } + case "properties": + if v != nil { + var virtualMachineScaleSetUpdateProperties VirtualMachineScaleSetUpdateProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateProperties) + if err != nil { + return err + } + vmssu.VirtualMachineScaleSetUpdateProperties = &virtualMachineScaleSetUpdateProperties + } + case "identity": + if v != nil { + var identity VirtualMachineScaleSetIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + vmssu.Identity = &identity + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmssu.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineScaleSetUpdateIPConfiguration describes a virtual machine scale set network profile's IP +// configuration. NOTE: The subnet of a scale set may be modified as long as the original subnet and the +// new subnet are in the same virtual network +type VirtualMachineScaleSetUpdateIPConfiguration struct { + // Name - The IP configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetUpdateIPConfigurationProperties `json:"properties,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdateIPConfiguration. +func (vmssuic VirtualMachineScaleSetUpdateIPConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssuic.Name != nil { + objectMap["name"] = vmssuic.Name + } + if vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties != nil { + objectMap["properties"] = vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties + } + if vmssuic.ID != nil { + objectMap["id"] = vmssuic.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdateIPConfiguration struct. +func (vmssuic *VirtualMachineScaleSetUpdateIPConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssuic.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetUpdateIPConfigurationProperties VirtualMachineScaleSetUpdateIPConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateIPConfigurationProperties) + if err != nil { + return err + } + vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties = &virtualMachineScaleSetUpdateIPConfigurationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssuic.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetUpdateIPConfigurationProperties describes a virtual machine scale set network +// profile's IP configuration properties. +type VirtualMachineScaleSetUpdateIPConfigurationProperties struct { + // Subnet - The subnet. + Subnet *APIEntityReference `json:"subnet,omitempty"` + // Primary - Specifies the primary IP Configuration in case the network interface has more than one IP Configuration. + Primary *bool `json:"primary,omitempty"` + // PublicIPAddressConfiguration - The publicIPAddressConfiguration. + PublicIPAddressConfiguration *VirtualMachineScaleSetUpdatePublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` + // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' + PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` + // ApplicationGatewayBackendAddressPools - The application gateway backend address pools. + ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` + // ApplicationSecurityGroups - Specifies an array of references to application security group. + ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` + // LoadBalancerBackendAddressPools - The load balancer backend address pools. + LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` + // LoadBalancerInboundNatPools - The load balancer inbound nat pools. + LoadBalancerInboundNatPools *[]SubResource `json:"loadBalancerInboundNatPools,omitempty"` +} + +// VirtualMachineScaleSetUpdateNetworkConfiguration describes a virtual machine scale set network profile's +// network configurations. +type VirtualMachineScaleSetUpdateNetworkConfiguration struct { + // Name - The network configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetUpdateNetworkConfigurationProperties `json:"properties,omitempty"` + // ID - Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdateNetworkConfiguration. +func (vmssunc VirtualMachineScaleSetUpdateNetworkConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssunc.Name != nil { + objectMap["name"] = vmssunc.Name + } + if vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties != nil { + objectMap["properties"] = vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties + } + if vmssunc.ID != nil { + objectMap["id"] = vmssunc.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdateNetworkConfiguration struct. +func (vmssunc *VirtualMachineScaleSetUpdateNetworkConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssunc.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetUpdateNetworkConfigurationProperties VirtualMachineScaleSetUpdateNetworkConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateNetworkConfigurationProperties) + if err != nil { + return err + } + vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties = &virtualMachineScaleSetUpdateNetworkConfigurationProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssunc.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetUpdateNetworkConfigurationProperties describes a virtual machine scale set +// updatable network profile's IP configuration.Use this object for updating network profile's IP +// Configuration. +type VirtualMachineScaleSetUpdateNetworkConfigurationProperties struct { + // Primary - Whether this is a primary NIC on a virtual machine. + Primary *bool `json:"primary,omitempty"` + // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. + EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` + // DisableTCPStateTracking - Specifies whether the network interface is disabled for tcp state tracking. + DisableTCPStateTracking *bool `json:"disableTcpStateTracking,omitempty"` + // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. + EnableFpga *bool `json:"enableFpga,omitempty"` + // NetworkSecurityGroup - The network security group. + NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` + // DNSSettings - The dns settings to be applied on the network interfaces. + DNSSettings *VirtualMachineScaleSetNetworkConfigurationDNSSettings `json:"dnsSettings,omitempty"` + // IPConfigurations - The virtual machine scale set IP Configuration. + IPConfigurations *[]VirtualMachineScaleSetUpdateIPConfiguration `json:"ipConfigurations,omitempty"` + // EnableIPForwarding - Whether IP forwarding enabled on this NIC. + EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` + // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetUpdateNetworkProfile describes a virtual machine scale set network profile. +type VirtualMachineScaleSetUpdateNetworkProfile struct { + // HealthProbe - A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. + HealthProbe *APIEntityReference `json:"healthProbe,omitempty"` + // NetworkInterfaceConfigurations - The list of network configurations. + NetworkInterfaceConfigurations *[]VirtualMachineScaleSetUpdateNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` + // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with orchestration mode 'Flexible'. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' + NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` +} + +// VirtualMachineScaleSetUpdateOSDisk describes virtual machine scale set operating system disk Update +// Object. This should be used for Updating VMSS OS Disk. +type VirtualMachineScaleSetUpdateOSDisk struct { + // Caching - The caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' + Caching CachingTypes `json:"caching,omitempty"` + // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. + WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` + // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be larger than 1023 + DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` + // Image - The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist. + Image *VirtualHardDisk `json:"image,omitempty"` + // VhdContainers - The list of virtual hard disk container uris. + VhdContainers *[]string `json:"vhdContainers,omitempty"` + // ManagedDisk - The managed disk parameters. + ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` + // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the OS disk is deleted when VMSS Flex VM is deleted.

    **Detach** If this value is used, the OS disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' + DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetUpdateOSProfile describes a virtual machine scale set OS profile. +type VirtualMachineScaleSetUpdateOSProfile struct { + // CustomData - A base-64 encoded string of custom data. + CustomData *string `json:"customData,omitempty"` + // WindowsConfiguration - The Windows Configuration of the OS profile. + WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` + // LinuxConfiguration - The Linux Configuration of the OS profile. + LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` + // Secrets - The List of certificates for addition to the VM. + Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` +} + +// VirtualMachineScaleSetUpdateProperties describes the properties of a Virtual Machine Scale Set. +type VirtualMachineScaleSetUpdateProperties struct { + // UpgradePolicy - The upgrade policy. + UpgradePolicy *UpgradePolicy `json:"upgradePolicy,omitempty"` + // AutomaticRepairsPolicy - Policy for automatic repairs. + AutomaticRepairsPolicy *AutomaticRepairsPolicy `json:"automaticRepairsPolicy,omitempty"` + // VirtualMachineProfile - The virtual machine profile. + VirtualMachineProfile *VirtualMachineScaleSetUpdateVMProfile `json:"virtualMachineProfile,omitempty"` + // Overprovision - Specifies whether the Virtual Machine Scale Set should be overprovisioned. + Overprovision *bool `json:"overprovision,omitempty"` + // DoNotRunExtensionsOnOverprovisionedVMs - When Overprovision is enabled, extensions are launched only on the requested number of VMs which are finally kept. This property will hence ensure that the extensions do not run on the extra overprovisioned VMs. + DoNotRunExtensionsOnOverprovisionedVMs *bool `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"` + // SinglePlacementGroup - When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true. + SinglePlacementGroup *bool `json:"singlePlacementGroup,omitempty"` + // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. + AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` + // ScaleInPolicy - Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. + ScaleInPolicy *ScaleInPolicy `json:"scaleInPolicy,omitempty"` + // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine scale set should be assigned to.

    Minimum api-version: 2018-04-01. + ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` +} + +// VirtualMachineScaleSetUpdatePublicIPAddressConfiguration describes a virtual machines scale set IP +// Configuration's PublicIPAddress configuration +type VirtualMachineScaleSetUpdatePublicIPAddressConfiguration struct { + // Name - The publicIP address configuration name. + Name *string `json:"name,omitempty"` + *VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdatePublicIPAddressConfiguration. +func (vmssupiac VirtualMachineScaleSetUpdatePublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssupiac.Name != nil { + objectMap["name"] = vmssupiac.Name + } + if vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties != nil { + objectMap["properties"] = vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdatePublicIPAddressConfiguration struct. +func (vmssupiac *VirtualMachineScaleSetUpdatePublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssupiac.Name = &name + } + case "properties": + if v != nil { + var virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties) + if err != nil { + return err + } + vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties = &virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties + } + } + } + + return nil +} + +// VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties describes a virtual machines scale +// set IP Configuration's PublicIPAddress configuration +type VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties struct { + // IdleTimeoutInMinutes - The idle timeout of the public IP address. + IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` + // DNSSettings - The dns settings to be applied on the publicIP addresses . + DNSSettings *VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings `json:"dnsSettings,omitempty"` + // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. + PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` + // DeleteOption - Specify what happens to the public IP when the VM is deleted. Possible values include: 'Delete', 'Detach' + DeleteOption DeleteOptions `json:"deleteOption,omitempty"` +} + +// VirtualMachineScaleSetUpdateStorageProfile describes a virtual machine scale set storage profile. +type VirtualMachineScaleSetUpdateStorageProfile struct { + // ImageReference - The image reference. + ImageReference *ImageReference `json:"imageReference,omitempty"` + // OsDisk - The OS disk. + OsDisk *VirtualMachineScaleSetUpdateOSDisk `json:"osDisk,omitempty"` + // DataDisks - The data disks. + DataDisks *[]VirtualMachineScaleSetDataDisk `json:"dataDisks,omitempty"` + DiskControllerType *string `json:"diskControllerType,omitempty"` +} + +// VirtualMachineScaleSetUpdateVMProfile describes a virtual machine scale set virtual machine profile. +type VirtualMachineScaleSetUpdateVMProfile struct { + // OsProfile - The virtual machine scale set OS profile. + OsProfile *VirtualMachineScaleSetUpdateOSProfile `json:"osProfile,omitempty"` + // StorageProfile - The virtual machine scale set storage profile. + StorageProfile *VirtualMachineScaleSetUpdateStorageProfile `json:"storageProfile,omitempty"` + // NetworkProfile - The virtual machine scale set network profile. + NetworkProfile *VirtualMachineScaleSetUpdateNetworkProfile `json:"networkProfile,omitempty"` + // SecurityProfile - The virtual machine scale set Security profile + SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` + // DiagnosticsProfile - The virtual machine scale set diagnostics profile. + DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` + // ExtensionProfile - The virtual machine scale set extension profile. + ExtensionProfile *VirtualMachineScaleSetExtensionProfile `json:"extensionProfile,omitempty"` + // LicenseType - The license type, which is for bring your own license scenario. + LicenseType *string `json:"licenseType,omitempty"` + // BillingProfile - Specifies the billing related details of a Azure Spot VMSS.

    Minimum api-version: 2019-03-01. + BillingProfile *BillingProfile `json:"billingProfile,omitempty"` + // ScheduledEventsProfile - Specifies Scheduled Event related configurations. + ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` + // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 + UserData *string `json:"userData,omitempty"` + // HardwareProfile - Specifies the hardware profile related details of a scale set.

    Minimum api-version: 2021-11-01. + HardwareProfile *VirtualMachineScaleSetHardwareProfile `json:"hardwareProfile,omitempty"` +} + +// VirtualMachineScaleSetVM describes a virtual machine scale set virtual machine. +type VirtualMachineScaleSetVM struct { + autorest.Response `json:"-"` + // InstanceID - READ-ONLY; The virtual machine instance ID. + InstanceID *string `json:"instanceId,omitempty"` + // Sku - READ-ONLY; The virtual machine SKU. + Sku *Sku `json:"sku,omitempty"` + *VirtualMachineScaleSetVMProperties `json:"properties,omitempty"` + // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. + Plan *Plan `json:"plan,omitempty"` + // Resources - READ-ONLY; The virtual machine child extension resources. + Resources *[]VirtualMachineExtension `json:"resources,omitempty"` + // Zones - READ-ONLY; The virtual machine zones. + Zones *[]string `json:"zones,omitempty"` + // Identity - The identity of the virtual machine, if configured. + Identity *VirtualMachineIdentity `json:"identity,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVM. +func (vmssv VirtualMachineScaleSetVM) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssv.VirtualMachineScaleSetVMProperties != nil { + objectMap["properties"] = vmssv.VirtualMachineScaleSetVMProperties + } + if vmssv.Plan != nil { + objectMap["plan"] = vmssv.Plan + } + if vmssv.Identity != nil { + objectMap["identity"] = vmssv.Identity + } + if vmssv.Location != nil { + objectMap["location"] = vmssv.Location + } + if vmssv.Tags != nil { + objectMap["tags"] = vmssv.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVM struct. +func (vmssv *VirtualMachineScaleSetVM) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "instanceId": + if v != nil { + var instanceID string + err = json.Unmarshal(*v, &instanceID) + if err != nil { + return err + } + vmssv.InstanceID = &instanceID + } + case "sku": + if v != nil { + var sku Sku + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + vmssv.Sku = &sku + } + case "properties": + if v != nil { + var virtualMachineScaleSetVMProperties VirtualMachineScaleSetVMProperties + err = json.Unmarshal(*v, &virtualMachineScaleSetVMProperties) + if err != nil { + return err + } + vmssv.VirtualMachineScaleSetVMProperties = &virtualMachineScaleSetVMProperties + } + case "plan": + if v != nil { + var plan Plan + err = json.Unmarshal(*v, &plan) + if err != nil { + return err + } + vmssv.Plan = &plan + } + case "resources": + if v != nil { + var resources []VirtualMachineExtension + err = json.Unmarshal(*v, &resources) + if err != nil { + return err + } + vmssv.Resources = &resources + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + vmssv.Zones = &zones + } + case "identity": + if v != nil { + var identity VirtualMachineIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + vmssv.Identity = &identity + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssv.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssv.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmssv.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + vmssv.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmssv.Tags = tags + } + } + } + + return nil +} + +// VirtualMachineScaleSetVMExtension describes a VMSS VM Extension. +type VirtualMachineScaleSetVMExtension struct { + autorest.Response `json:"-"` + // Name - READ-ONLY; The name of the extension. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *VirtualMachineExtensionProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtension. +func (vmssve VirtualMachineScaleSetVMExtension) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssve.VirtualMachineExtensionProperties != nil { + objectMap["properties"] = vmssve.VirtualMachineExtensionProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVMExtension struct. +func (vmssve *VirtualMachineScaleSetVMExtension) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssve.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmssve.Type = &typeVar + } + case "properties": + if v != nil { + var virtualMachineExtensionProperties VirtualMachineExtensionProperties + err = json.Unmarshal(*v, &virtualMachineExtensionProperties) + if err != nil { + return err + } + vmssve.VirtualMachineExtensionProperties = &virtualMachineExtensionProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssve.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMExtensionsClient) (VirtualMachineScaleSetVMExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture.Result. +func (future *VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (vmssve VirtualMachineScaleSetVMExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmssve.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmssve.Response.Response, err = future.GetResult(sender); err == nil && vmssve.Response.Response.StatusCode != http.StatusNoContent { + vmssve, err = client.CreateOrUpdateResponder(vmssve.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture", "Result", vmssve.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetVMExtensionsDeleteFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineScaleSetVMExtensionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMExtensionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMExtensionsDeleteFuture.Result. +func (future *VirtualMachineScaleSetVMExtensionsDeleteFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMExtensionsListResult the List VMSS VM Extension operation response +type VirtualMachineScaleSetVMExtensionsListResult struct { + autorest.Response `json:"-"` + // Value - The list of VMSS VM extensions + Value *[]VirtualMachineScaleSetVMExtension `json:"value,omitempty"` +} + +// VirtualMachineScaleSetVMExtensionsSummary extensions summary for virtual machines of a virtual machine +// scale set. +type VirtualMachineScaleSetVMExtensionsSummary struct { + // Name - READ-ONLY; The extension name. + Name *string `json:"name,omitempty"` + // StatusesSummary - READ-ONLY; The extensions information. + StatusesSummary *[]VirtualMachineStatusCodeCount `json:"statusesSummary,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtensionsSummary. +func (vmssves VirtualMachineScaleSetVMExtensionsSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetVMExtensionsUpdateFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineScaleSetVMExtensionsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMExtensionsClient) (VirtualMachineScaleSetVMExtension, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMExtensionsUpdateFuture.Result. +func (future *VirtualMachineScaleSetVMExtensionsUpdateFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (vmssve VirtualMachineScaleSetVMExtension, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmssve.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmssve.Response.Response, err = future.GetResult(sender); err == nil && vmssve.Response.Response.StatusCode != http.StatusNoContent { + vmssve, err = client.UpdateResponder(vmssve.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsUpdateFuture", "Result", vmssve.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetVMExtensionUpdate describes a VMSS VM Extension. +type VirtualMachineScaleSetVMExtensionUpdate struct { + // Name - READ-ONLY; The name of the extension. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type + Type *string `json:"type,omitempty"` + *VirtualMachineExtensionUpdateProperties `json:"properties,omitempty"` + // ID - READ-ONLY; Resource Id + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtensionUpdate. +func (vmssveu VirtualMachineScaleSetVMExtensionUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssveu.VirtualMachineExtensionUpdateProperties != nil { + objectMap["properties"] = vmssveu.VirtualMachineExtensionUpdateProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVMExtensionUpdate struct. +func (vmssveu *VirtualMachineScaleSetVMExtensionUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vmssveu.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + vmssveu.Type = &typeVar + } + case "properties": + if v != nil { + var virtualMachineExtensionUpdateProperties VirtualMachineExtensionUpdateProperties + err = json.Unmarshal(*v, &virtualMachineExtensionUpdateProperties) + if err != nil { + return err + } + vmssveu.VirtualMachineExtensionUpdateProperties = &virtualMachineExtensionUpdateProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vmssveu.ID = &ID + } + } + } + + return nil +} + +// VirtualMachineScaleSetVMInstanceIDs specifies a list of virtual machine instance IDs from the VM scale +// set. +type VirtualMachineScaleSetVMInstanceIDs struct { + // InstanceIds - The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set. + InstanceIds *[]string `json:"instanceIds,omitempty"` +} + +// VirtualMachineScaleSetVMInstanceRequiredIDs specifies a list of virtual machine instance IDs from the VM +// scale set. +type VirtualMachineScaleSetVMInstanceRequiredIDs struct { + // InstanceIds - The virtual machine scale set instance ids. + InstanceIds *[]string `json:"instanceIds,omitempty"` +} + +// VirtualMachineScaleSetVMInstanceView the instance view of a virtual machine scale set VM. +type VirtualMachineScaleSetVMInstanceView struct { + autorest.Response `json:"-"` + // PlatformUpdateDomain - The Update Domain count. + PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` + // PlatformFaultDomain - The Fault Domain count. + PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` + // RdpThumbPrint - The Remote desktop certificate thumbprint. + RdpThumbPrint *string `json:"rdpThumbPrint,omitempty"` + // VMAgent - The VM Agent running on the virtual machine. + VMAgent *VirtualMachineAgentInstanceView `json:"vmAgent,omitempty"` + // MaintenanceRedeployStatus - The Maintenance Operation status on the virtual machine. + MaintenanceRedeployStatus *MaintenanceRedeployStatus `json:"maintenanceRedeployStatus,omitempty"` + // Disks - The disks information. + Disks *[]DiskInstanceView `json:"disks,omitempty"` + // Extensions - The extensions information. + Extensions *[]VirtualMachineExtensionInstanceView `json:"extensions,omitempty"` + // VMHealth - READ-ONLY; The health status for the VM. + VMHealth *VirtualMachineHealthStatus `json:"vmHealth,omitempty"` + // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.

    You can easily view the output of your console log.

    Azure also enables you to see a screenshot of the VM from the hypervisor. + BootDiagnostics *BootDiagnosticsInstanceView `json:"bootDiagnostics,omitempty"` + // Statuses - The resource status information. + Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` + // AssignedHost - READ-ONLY; Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled.

    Minimum api-version: 2020-06-01. + AssignedHost *string `json:"assignedHost,omitempty"` + // PlacementGroupID - The placement group in which the VM is running. If the VM is deallocated it will not have a placementGroupId. + PlacementGroupID *string `json:"placementGroupId,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMInstanceView. +func (vmssviv VirtualMachineScaleSetVMInstanceView) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssviv.PlatformUpdateDomain != nil { + objectMap["platformUpdateDomain"] = vmssviv.PlatformUpdateDomain + } + if vmssviv.PlatformFaultDomain != nil { + objectMap["platformFaultDomain"] = vmssviv.PlatformFaultDomain + } + if vmssviv.RdpThumbPrint != nil { + objectMap["rdpThumbPrint"] = vmssviv.RdpThumbPrint + } + if vmssviv.VMAgent != nil { + objectMap["vmAgent"] = vmssviv.VMAgent + } + if vmssviv.MaintenanceRedeployStatus != nil { + objectMap["maintenanceRedeployStatus"] = vmssviv.MaintenanceRedeployStatus + } + if vmssviv.Disks != nil { + objectMap["disks"] = vmssviv.Disks + } + if vmssviv.Extensions != nil { + objectMap["extensions"] = vmssviv.Extensions + } + if vmssviv.BootDiagnostics != nil { + objectMap["bootDiagnostics"] = vmssviv.BootDiagnostics + } + if vmssviv.Statuses != nil { + objectMap["statuses"] = vmssviv.Statuses + } + if vmssviv.PlacementGroupID != nil { + objectMap["placementGroupId"] = vmssviv.PlacementGroupID + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetVMListResult the List Virtual Machine Scale Set VMs operation response. +type VirtualMachineScaleSetVMListResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machine scale sets VMs. + Value *[]VirtualMachineScaleSetVM `json:"value,omitempty"` + // NextLink - The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualMachineScaleSetVMListResultIterator provides access to a complete listing of +// VirtualMachineScaleSetVM values. +type VirtualMachineScaleSetVMListResultIterator struct { + i int + page VirtualMachineScaleSetVMListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualMachineScaleSetVMListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualMachineScaleSetVMListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualMachineScaleSetVMListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualMachineScaleSetVMListResultIterator) Response() VirtualMachineScaleSetVMListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualMachineScaleSetVMListResultIterator) Value() VirtualMachineScaleSetVM { + if !iter.page.NotDone() { + return VirtualMachineScaleSetVM{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualMachineScaleSetVMListResultIterator type. +func NewVirtualMachineScaleSetVMListResultIterator(page VirtualMachineScaleSetVMListResultPage) VirtualMachineScaleSetVMListResultIterator { + return VirtualMachineScaleSetVMListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vmssvlr VirtualMachineScaleSetVMListResult) IsEmpty() bool { + return vmssvlr.Value == nil || len(*vmssvlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vmssvlr VirtualMachineScaleSetVMListResult) hasNextLink() bool { + return vmssvlr.NextLink != nil && len(*vmssvlr.NextLink) != 0 +} + +// virtualMachineScaleSetVMListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vmssvlr VirtualMachineScaleSetVMListResult) virtualMachineScaleSetVMListResultPreparer(ctx context.Context) (*http.Request, error) { + if !vmssvlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vmssvlr.NextLink))) +} + +// VirtualMachineScaleSetVMListResultPage contains a page of VirtualMachineScaleSetVM values. +type VirtualMachineScaleSetVMListResultPage struct { + fn func(context.Context, VirtualMachineScaleSetVMListResult) (VirtualMachineScaleSetVMListResult, error) + vmssvlr VirtualMachineScaleSetVMListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualMachineScaleSetVMListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vmssvlr) + if err != nil { + return err + } + page.vmssvlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualMachineScaleSetVMListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualMachineScaleSetVMListResultPage) NotDone() bool { + return !page.vmssvlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualMachineScaleSetVMListResultPage) Response() VirtualMachineScaleSetVMListResult { + return page.vmssvlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualMachineScaleSetVMListResultPage) Values() []VirtualMachineScaleSetVM { + if page.vmssvlr.IsEmpty() { + return nil + } + return *page.vmssvlr.Value +} + +// Creates a new instance of the VirtualMachineScaleSetVMListResultPage type. +func NewVirtualMachineScaleSetVMListResultPage(cur VirtualMachineScaleSetVMListResult, getNextPage func(context.Context, VirtualMachineScaleSetVMListResult) (VirtualMachineScaleSetVMListResult, error)) VirtualMachineScaleSetVMListResultPage { + return VirtualMachineScaleSetVMListResultPage{ + fn: getNextPage, + vmssvlr: cur, + } +} + +// VirtualMachineScaleSetVMNetworkProfileConfiguration describes a virtual machine scale set VM network +// profile. +type VirtualMachineScaleSetVMNetworkProfileConfiguration struct { + // NetworkInterfaceConfigurations - The list of network configurations. + NetworkInterfaceConfigurations *[]VirtualMachineScaleSetNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` +} + +// VirtualMachineScaleSetVMProfile describes a virtual machine scale set virtual machine profile. +type VirtualMachineScaleSetVMProfile struct { + // OsProfile - Specifies the operating system settings for the virtual machines in the scale set. + OsProfile *VirtualMachineScaleSetOSProfile `json:"osProfile,omitempty"` + // StorageProfile - Specifies the storage settings for the virtual machine disks. + StorageProfile *VirtualMachineScaleSetStorageProfile `json:"storageProfile,omitempty"` + // NetworkProfile - Specifies properties of the network interfaces of the virtual machines in the scale set. + NetworkProfile *VirtualMachineScaleSetNetworkProfile `json:"networkProfile,omitempty"` + // SecurityProfile - Specifies the Security related profile settings for the virtual machines in the scale set. + SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` + // DiagnosticsProfile - Specifies the boot diagnostic settings state.

    Minimum api-version: 2015-06-15. + DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` + // ExtensionProfile - Specifies a collection of settings for extensions installed on virtual machines in the scale set. + ExtensionProfile *VirtualMachineScaleSetExtensionProfile `json:"extensionProfile,omitempty"` + // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

    Possible values for Windows Server operating system are:

    Windows_Client

    Windows_Server

    Possible values for Linux Server operating system are:

    RHEL_BYOS (for RHEL)

    SLES_BYOS (for SUSE)

    For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

    [Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

    Minimum api-version: 2015-06-15 + LicenseType *string `json:"licenseType,omitempty"` + // Priority - Specifies the priority for the virtual machines in the scale set.

    Minimum api-version: 2017-10-30-preview. Possible values include: 'Regular', 'Low', 'Spot' + Priority VirtualMachinePriorityTypes `json:"priority,omitempty"` + // EvictionPolicy - Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set.

    For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.

    For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Possible values include: 'VirtualMachineEvictionPolicyTypesDeallocate', 'VirtualMachineEvictionPolicyTypesDelete' + EvictionPolicy VirtualMachineEvictionPolicyTypes `json:"evictionPolicy,omitempty"` + // BillingProfile - Specifies the billing related details of a Azure Spot VMSS.

    Minimum api-version: 2019-03-01. + BillingProfile *BillingProfile `json:"billingProfile,omitempty"` + // ScheduledEventsProfile - Specifies Scheduled Event related configurations. + ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` + // UserData - UserData for the virtual machines in the scale set, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 + UserData *string `json:"userData,omitempty"` + // CapacityReservation - Specifies the capacity reservation related details of a scale set.

    Minimum api-version: 2021-04-01. + CapacityReservation *CapacityReservationProfile `json:"capacityReservation,omitempty"` + // ApplicationProfile - Specifies the gallery applications that should be made available to the VM/VMSS + ApplicationProfile *ApplicationProfile `json:"applicationProfile,omitempty"` + // HardwareProfile - Specifies the hardware profile related details of a scale set.

    Minimum api-version: 2021-11-01. + HardwareProfile *VirtualMachineScaleSetHardwareProfile `json:"hardwareProfile,omitempty"` +} + +// VirtualMachineScaleSetVMProperties describes the properties of a virtual machine scale set virtual +// machine. +type VirtualMachineScaleSetVMProperties struct { + // LatestModelApplied - READ-ONLY; Specifies whether the latest model has been applied to the virtual machine. + LatestModelApplied *bool `json:"latestModelApplied,omitempty"` + // VMID - READ-ONLY; Azure VM unique ID. + VMID *string `json:"vmId,omitempty"` + // InstanceView - READ-ONLY; The virtual machine instance view. + InstanceView *VirtualMachineScaleSetVMInstanceView `json:"instanceView,omitempty"` + // HardwareProfile - Specifies the hardware settings for the virtual machine. + HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` + // StorageProfile - Specifies the storage settings for the virtual machine disks. + StorageProfile *StorageProfile `json:"storageProfile,omitempty"` + // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the virtual machine in the scale set. For instance: whether the virtual machine has the capability to support attaching managed data disks with UltraSSD_LRS storage account type. + AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` + // OsProfile - Specifies the operating system settings for the virtual machine. + OsProfile *OSProfile `json:"osProfile,omitempty"` + // SecurityProfile - Specifies the Security related profile settings for the virtual machine. + SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` + // NetworkProfile - Specifies the network interfaces of the virtual machine. + NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"` + // NetworkProfileConfiguration - Specifies the network profile configuration of the virtual machine. + NetworkProfileConfiguration *VirtualMachineScaleSetVMNetworkProfileConfiguration `json:"networkProfileConfiguration,omitempty"` + // DiagnosticsProfile - Specifies the boot diagnostic settings state.

    Minimum api-version: 2015-06-15. + DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` + // AvailabilitySet - Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Availability sets overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

    For more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

    Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. + AvailabilitySet *SubResource `json:"availabilitySet,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. + ProvisioningState *string `json:"provisioningState,omitempty"` + // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

    Possible values for Windows Server operating system are:

    Windows_Client

    Windows_Server

    Possible values for Linux Server operating system are:

    RHEL_BYOS (for RHEL)

    SLES_BYOS (for SUSE)

    For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

    [Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

    Minimum api-version: 2015-06-15 + LicenseType *string `json:"licenseType,omitempty"` + // ModelDefinitionApplied - READ-ONLY; Specifies whether the model applied to the virtual machine is the model of the virtual machine scale set or the customized model for the virtual machine. + ModelDefinitionApplied *string `json:"modelDefinitionApplied,omitempty"` + // ProtectionPolicy - Specifies the protection policy of the virtual machine. + ProtectionPolicy *VirtualMachineScaleSetVMProtectionPolicy `json:"protectionPolicy,omitempty"` + // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 + UserData *string `json:"userData,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMProperties. +func (vmssvp VirtualMachineScaleSetVMProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmssvp.HardwareProfile != nil { + objectMap["hardwareProfile"] = vmssvp.HardwareProfile + } + if vmssvp.StorageProfile != nil { + objectMap["storageProfile"] = vmssvp.StorageProfile + } + if vmssvp.AdditionalCapabilities != nil { + objectMap["additionalCapabilities"] = vmssvp.AdditionalCapabilities + } + if vmssvp.OsProfile != nil { + objectMap["osProfile"] = vmssvp.OsProfile + } + if vmssvp.SecurityProfile != nil { + objectMap["securityProfile"] = vmssvp.SecurityProfile + } + if vmssvp.NetworkProfile != nil { + objectMap["networkProfile"] = vmssvp.NetworkProfile + } + if vmssvp.NetworkProfileConfiguration != nil { + objectMap["networkProfileConfiguration"] = vmssvp.NetworkProfileConfiguration + } + if vmssvp.DiagnosticsProfile != nil { + objectMap["diagnosticsProfile"] = vmssvp.DiagnosticsProfile + } + if vmssvp.AvailabilitySet != nil { + objectMap["availabilitySet"] = vmssvp.AvailabilitySet + } + if vmssvp.LicenseType != nil { + objectMap["licenseType"] = vmssvp.LicenseType + } + if vmssvp.ProtectionPolicy != nil { + objectMap["protectionPolicy"] = vmssvp.ProtectionPolicy + } + if vmssvp.UserData != nil { + objectMap["userData"] = vmssvp.UserData + } + return json.Marshal(objectMap) +} + +// VirtualMachineScaleSetVMProtectionPolicy the protection policy of a virtual machine scale set VM. +type VirtualMachineScaleSetVMProtectionPolicy struct { + // ProtectFromScaleIn - Indicates that the virtual machine scale set VM shouldn't be considered for deletion during a scale-in operation. + ProtectFromScaleIn *bool `json:"protectFromScaleIn,omitempty"` + // ProtectFromScaleSetActions - Indicates that model updates or actions (including scale-in) initiated on the virtual machine scale set should not be applied to the virtual machine scale set VM. + ProtectFromScaleSetActions *bool `json:"protectFromScaleSetActions,omitempty"` +} + +// VirtualMachineScaleSetVMReimageParameters describes a Virtual Machine Scale Set VM Reimage Parameters. +type VirtualMachineScaleSetVMReimageParameters struct { + // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. + TempDisk *bool `json:"tempDisk,omitempty"` +} + +// VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMRunCommandsClient) (VirtualMachineRunCommand, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture.Result. +func (future *VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmrc.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { + vmrc, err = client.CreateOrUpdateResponder(vmrc.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetVMRunCommandsDeleteFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineScaleSetVMRunCommandsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMRunCommandsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMRunCommandsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMRunCommandsDeleteFuture.Result. +func (future *VirtualMachineScaleSetVMRunCommandsDeleteFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMRunCommandsUpdateFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualMachineScaleSetVMRunCommandsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMRunCommandsClient) (VirtualMachineRunCommand, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMRunCommandsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMRunCommandsUpdateFuture.Result. +func (future *VirtualMachineScaleSetVMRunCommandsUpdateFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmrc.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { + vmrc, err = client.UpdateResponder(vmrc.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetVMsDeallocateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsDeallocateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsDeallocateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsDeallocateFuture.Result. +func (future *VirtualMachineScaleSetVMsDeallocateFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsDeallocateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsDeallocateFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsDeleteFuture.Result. +func (future *VirtualMachineScaleSetVMsDeleteFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsPerformMaintenanceFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualMachineScaleSetVMsPerformMaintenanceFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsPerformMaintenanceFuture.Result. +func (future *VirtualMachineScaleSetVMsPerformMaintenanceFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsPerformMaintenanceFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsPowerOffFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsPowerOffFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsPowerOffFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsPowerOffFuture.Result. +func (future *VirtualMachineScaleSetVMsPowerOffFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsPowerOffFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsPowerOffFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsRedeployFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsRedeployFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsRedeployFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsRedeployFuture.Result. +func (future *VirtualMachineScaleSetVMsRedeployFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRedeployFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRedeployFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsReimageAllFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsReimageAllFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsReimageAllFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsReimageAllFuture.Result. +func (future *VirtualMachineScaleSetVMsReimageAllFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsReimageAllFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsReimageAllFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsReimageFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsReimageFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsReimageFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsReimageFuture.Result. +func (future *VirtualMachineScaleSetVMsReimageFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsReimageFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsReimageFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsRestartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsRestartFuture.Result. +func (future *VirtualMachineScaleSetVMsRestartFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsRunCommandFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsRunCommandFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (RunCommandResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsRunCommandFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsRunCommandFuture.Result. +func (future *VirtualMachineScaleSetVMsRunCommandFuture) result(client VirtualMachineScaleSetVMsClient) (rcr RunCommandResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRunCommandFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + rcr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRunCommandFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if rcr.Response.Response, err = future.GetResult(sender); err == nil && rcr.Response.Response.StatusCode != http.StatusNoContent { + rcr, err = client.RunCommandResponder(rcr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRunCommandFuture", "Result", rcr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineScaleSetVMsStartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsStartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsStartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsStartFuture.Result. +func (future *VirtualMachineScaleSetVMsStartFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsStartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsStartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineScaleSetVMsUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachineScaleSetVMsUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachineScaleSetVMsClient) (VirtualMachineScaleSetVM, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachineScaleSetVMsUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachineScaleSetVMsUpdateFuture.Result. +func (future *VirtualMachineScaleSetVMsUpdateFuture) result(client VirtualMachineScaleSetVMsClient) (vmssv VirtualMachineScaleSetVM, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmssv.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmssv.Response.Response, err = future.GetResult(sender); err == nil && vmssv.Response.Response.StatusCode != http.StatusNoContent { + vmssv, err = client.UpdateResponder(vmssv.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsUpdateFuture", "Result", vmssv.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachinesCaptureFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesCaptureFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (VirtualMachineCaptureResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesCaptureFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesCaptureFuture.Result. +func (future *VirtualMachinesCaptureFuture) result(client VirtualMachinesClient) (vmcr VirtualMachineCaptureResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCaptureFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmcr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesCaptureFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmcr.Response.Response, err = future.GetResult(sender); err == nil && vmcr.Response.Response.StatusCode != http.StatusNoContent { + vmcr, err = client.CaptureResponder(vmcr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCaptureFuture", "Result", vmcr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachinesConvertToManagedDisksFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesConvertToManagedDisksFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesConvertToManagedDisksFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesConvertToManagedDisksFuture.Result. +func (future *VirtualMachinesConvertToManagedDisksFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesConvertToManagedDisksFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesConvertToManagedDisksFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (VirtualMachine, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesCreateOrUpdateFuture.Result. +func (future *VirtualMachinesCreateOrUpdateFuture) result(client VirtualMachinesClient) (VM VirtualMachine, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + VM.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if VM.Response.Response, err = future.GetResult(sender); err == nil && VM.Response.Response.StatusCode != http.StatusNoContent { + VM, err = client.CreateOrUpdateResponder(VM.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCreateOrUpdateFuture", "Result", VM.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachinesDeallocateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesDeallocateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesDeallocateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesDeallocateFuture.Result. +func (future *VirtualMachinesDeallocateFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesDeallocateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesDeallocateFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesDeleteFuture.Result. +func (future *VirtualMachinesDeleteFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesInstallPatchesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesInstallPatchesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (VirtualMachineInstallPatchesResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesInstallPatchesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesInstallPatchesFuture.Result. +func (future *VirtualMachinesInstallPatchesFuture) result(client VirtualMachinesClient) (vmipr VirtualMachineInstallPatchesResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesInstallPatchesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vmipr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesInstallPatchesFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vmipr.Response.Response, err = future.GetResult(sender); err == nil && vmipr.Response.Response.StatusCode != http.StatusNoContent { + vmipr, err = client.InstallPatchesResponder(vmipr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesInstallPatchesFuture", "Result", vmipr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineSize describes the properties of a VM size. +type VirtualMachineSize struct { + // Name - The name of the virtual machine size. + Name *string `json:"name,omitempty"` + // NumberOfCores - The number of cores supported by the virtual machine size. For Constrained vCPU capable VM sizes, this number represents the total vCPUs of quota that the VM uses. For accurate vCPU count, please refer to https://docs.microsoft.com/azure/virtual-machines/constrained-vcpu or https://docs.microsoft.com/rest/api/compute/resourceskus/list + NumberOfCores *int32 `json:"numberOfCores,omitempty"` + // OsDiskSizeInMB - The OS disk size, in MB, allowed by the virtual machine size. + OsDiskSizeInMB *int32 `json:"osDiskSizeInMB,omitempty"` + // ResourceDiskSizeInMB - The resource disk size, in MB, allowed by the virtual machine size. + ResourceDiskSizeInMB *int32 `json:"resourceDiskSizeInMB,omitempty"` + // MemoryInMB - The amount of memory, in MB, supported by the virtual machine size. + MemoryInMB *int32 `json:"memoryInMB,omitempty"` + // MaxDataDiskCount - The maximum number of data disks that can be attached to the virtual machine size. + MaxDataDiskCount *int32 `json:"maxDataDiskCount,omitempty"` +} + +// VirtualMachineSizeListResult the List Virtual Machine operation response. +type VirtualMachineSizeListResult struct { + autorest.Response `json:"-"` + // Value - The list of virtual machine sizes. + Value *[]VirtualMachineSize `json:"value,omitempty"` +} + +// VirtualMachineSoftwarePatchProperties describes the properties of a Virtual Machine software patch. +type VirtualMachineSoftwarePatchProperties struct { + // PatchID - READ-ONLY; A unique identifier for the patch. + PatchID *string `json:"patchId,omitempty"` + // Name - READ-ONLY; The friendly name of the patch. + Name *string `json:"name,omitempty"` + // Version - READ-ONLY; The version number of the patch. This property applies only to Linux patches. + Version *string `json:"version,omitempty"` + // KbID - READ-ONLY; The KBID of the patch. Only applies to Windows patches. + KbID *string `json:"kbId,omitempty"` + // Classifications - READ-ONLY; The classification(s) of the patch as provided by the patch publisher. + Classifications *[]string `json:"classifications,omitempty"` + // RebootBehavior - READ-ONLY; Describes the reboot requirements of the patch. Possible values include: 'VMGuestPatchRebootBehaviorUnknown', 'VMGuestPatchRebootBehaviorNeverReboots', 'VMGuestPatchRebootBehaviorAlwaysRequiresReboot', 'VMGuestPatchRebootBehaviorCanRequestReboot' + RebootBehavior VMGuestPatchRebootBehavior `json:"rebootBehavior,omitempty"` + // ActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. + ActivityID *string `json:"activityId,omitempty"` + // PublishedDate - READ-ONLY; The UTC timestamp when the repository published this patch. + PublishedDate *date.Time `json:"publishedDate,omitempty"` + // LastModifiedDateTime - READ-ONLY; The UTC timestamp of the last update to this patch record. + LastModifiedDateTime *date.Time `json:"lastModifiedDateTime,omitempty"` + // AssessmentState - READ-ONLY; Describes the availability of a given patch. Possible values include: 'PatchAssessmentStateUnknown', 'PatchAssessmentStateAvailable' + AssessmentState PatchAssessmentState `json:"assessmentState,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineSoftwarePatchProperties. +func (vmspp VirtualMachineSoftwarePatchProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachinesPerformMaintenanceFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesPerformMaintenanceFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesPerformMaintenanceFuture.Result. +func (future *VirtualMachinesPerformMaintenanceFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesPerformMaintenanceFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesPowerOffFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesPowerOffFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesPowerOffFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesPowerOffFuture.Result. +func (future *VirtualMachinesPowerOffFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesPowerOffFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesPowerOffFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesReapplyFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesReapplyFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesReapplyFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesReapplyFuture.Result. +func (future *VirtualMachinesReapplyFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesReapplyFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesReapplyFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesRedeployFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesRedeployFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesRedeployFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesRedeployFuture.Result. +func (future *VirtualMachinesRedeployFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRedeployFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRedeployFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesReimageFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesReimageFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesReimageFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesReimageFuture.Result. +func (future *VirtualMachinesReimageFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesReimageFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesReimageFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesRestartFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesRestartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesRestartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesRestartFuture.Result. +func (future *VirtualMachinesRestartFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRestartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRestartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachinesRunCommandFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualMachinesRunCommandFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (RunCommandResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesRunCommandFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesRunCommandFuture.Result. +func (future *VirtualMachinesRunCommandFuture) result(client VirtualMachinesClient) (rcr RunCommandResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRunCommandFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + rcr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRunCommandFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if rcr.Response.Response, err = future.GetResult(sender); err == nil && rcr.Response.Response.StatusCode != http.StatusNoContent { + rcr, err = client.RunCommandResponder(rcr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRunCommandFuture", "Result", rcr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachinesStartFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesStartFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesStartFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesStartFuture.Result. +func (future *VirtualMachinesStartFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesStartFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesStartFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualMachineStatusCodeCount the status code and count of the virtual machine scale set instance view +// status summary. +type VirtualMachineStatusCodeCount struct { + // Code - READ-ONLY; The instance view status code. + Code *string `json:"code,omitempty"` + // Count - READ-ONLY; The number of instances having a particular status code. + Count *int32 `json:"count,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineStatusCodeCount. +func (vmscc VirtualMachineStatusCodeCount) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// VirtualMachinesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VirtualMachinesUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualMachinesClient) (VirtualMachine, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualMachinesUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualMachinesUpdateFuture.Result. +func (future *VirtualMachinesUpdateFuture) result(client VirtualMachinesClient) (VM VirtualMachine, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + VM.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if VM.Response.Response, err = future.GetResult(sender); err == nil && VM.Response.Response.StatusCode != http.StatusNoContent { + VM, err = client.UpdateResponder(VM.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesUpdateFuture", "Result", VM.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualMachineUpdate describes a Virtual Machine Update. +type VirtualMachineUpdate struct { + // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. + Plan *Plan `json:"plan,omitempty"` + *VirtualMachineProperties `json:"properties,omitempty"` + // Identity - The identity of the virtual machine, if configured. + Identity *VirtualMachineIdentity `json:"identity,omitempty"` + // Zones - The virtual machine zones. + Zones *[]string `json:"zones,omitempty"` + // Tags - Resource tags + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for VirtualMachineUpdate. +func (vmu VirtualMachineUpdate) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vmu.Plan != nil { + objectMap["plan"] = vmu.Plan + } + if vmu.VirtualMachineProperties != nil { + objectMap["properties"] = vmu.VirtualMachineProperties + } + if vmu.Identity != nil { + objectMap["identity"] = vmu.Identity + } + if vmu.Zones != nil { + objectMap["zones"] = vmu.Zones + } + if vmu.Tags != nil { + objectMap["tags"] = vmu.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualMachineUpdate struct. +func (vmu *VirtualMachineUpdate) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "plan": + if v != nil { + var plan Plan + err = json.Unmarshal(*v, &plan) + if err != nil { + return err + } + vmu.Plan = &plan + } + case "properties": + if v != nil { + var virtualMachineProperties VirtualMachineProperties + err = json.Unmarshal(*v, &virtualMachineProperties) + if err != nil { + return err + } + vmu.VirtualMachineProperties = &virtualMachineProperties + } + case "identity": + if v != nil { + var identity VirtualMachineIdentity + err = json.Unmarshal(*v, &identity) + if err != nil { + return err + } + vmu.Identity = &identity + } + case "zones": + if v != nil { + var zones []string + err = json.Unmarshal(*v, &zones) + if err != nil { + return err + } + vmu.Zones = &zones + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + vmu.Tags = tags + } + } + } + + return nil +} + +// VMDiskSecurityProfile specifies the security profile settings for the managed disk.

    NOTE: It +// can only be set for Confidential VMs +type VMDiskSecurityProfile struct { + // SecurityEncryptionType - Specifies the EncryptionType of the managed disk.
    It is set to DiskWithVMGuestState for encryption of the managed disk along with VMGuestState blob, and VMGuestStateOnly for encryption of just the VMGuestState blob.

    NOTE: It can be set for only Confidential VMs. Possible values include: 'VMGuestStateOnly', 'DiskWithVMGuestState' + SecurityEncryptionType SecurityEncryptionTypes `json:"securityEncryptionType,omitempty"` + // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk that is used for Customer Managed Key encrypted ConfidentialVM OS Disk and VMGuest blob. + DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` +} + +// VMGalleryApplication specifies the required information to reference a compute gallery application +// version +type VMGalleryApplication struct { + // Tags - Optional, Specifies a passthrough value for more generic context. + Tags *string `json:"tags,omitempty"` + // Order - Optional, Specifies the order in which the packages have to be installed + Order *int32 `json:"order,omitempty"` + // PackageReferenceID - Specifies the GalleryApplicationVersion resource id on the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version} + PackageReferenceID *string `json:"packageReferenceId,omitempty"` + // ConfigurationReference - Optional, Specifies the uri to an azure blob that will replace the default configuration for the package if provided + ConfigurationReference *string `json:"configurationReference,omitempty"` + // TreatFailureAsDeploymentFailure - Optional, If true, any failure for any operation in the VmApplication will fail the deployment + TreatFailureAsDeploymentFailure *bool `json:"treatFailureAsDeploymentFailure,omitempty"` + // EnableAutomaticUpgrade - If set to true, when a new Gallery Application version is available in PIR/SIG, it will be automatically updated for the VM/VMSS + EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` +} + +// VMImagesInEdgeZoneListResult the List VmImages in EdgeZone operation response. +type VMImagesInEdgeZoneListResult struct { + autorest.Response `json:"-"` + // Value - The list of VMImages in EdgeZone + Value *[]VirtualMachineImageResource `json:"value,omitempty"` + // NextLink - The URI to fetch the next page of VMImages in EdgeZone. Call ListNext() with this URI to fetch the next page of VmImages. + NextLink *string `json:"nextLink,omitempty"` +} + +// VMScaleSetConvertToSinglePlacementGroupInput ... +type VMScaleSetConvertToSinglePlacementGroupInput struct { + // ActivePlacementGroupID - Id of the placement group in which you want future virtual machine instances to be placed. To query placement group Id, please use Virtual Machine Scale Set VMs - Get API. If not provided, the platform will choose one with maximum number of virtual machine instances. + ActivePlacementGroupID *string `json:"activePlacementGroupId,omitempty"` +} + +// VMSizeProperties specifies VM Size Property settings on the virtual machine. +type VMSizeProperties struct { + // VCPUsAvailable - Specifies the number of vCPUs available for the VM.

    When this property is not specified in the request body the default behavior is to set it to the value of vCPUs available for that VM size exposed in api response of [List all available virtual machine sizes in a region](https://docs.microsoft.com/en-us/rest/api/compute/resource-skus/list) . + VCPUsAvailable *int32 `json:"vCPUsAvailable,omitempty"` + // VCPUsPerCore - Specifies the vCPU to physical core ratio.

    When this property is not specified in the request body the default behavior is set to the value of vCPUsPerCore for the VM Size exposed in api response of [List all available virtual machine sizes in a region](https://docs.microsoft.com/en-us/rest/api/compute/resource-skus/list)

    Setting this property to 1 also means that hyper-threading is disabled. + VCPUsPerCore *int32 `json:"vCPUsPerCore,omitempty"` +} + +// WindowsConfiguration specifies Windows operating system settings on the virtual machine. +type WindowsConfiguration struct { + // ProvisionVMAgent - Indicates whether virtual machine agent should be provisioned on the virtual machine.

    When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later. + ProvisionVMAgent *bool `json:"provisionVMAgent,omitempty"` + // EnableAutomaticUpdates - Indicates whether Automatic Updates is enabled for the Windows virtual machine. Default value is true.

    For virtual machine scale sets, this property can be updated and updates will take effect on OS reprovisioning. + EnableAutomaticUpdates *bool `json:"enableAutomaticUpdates,omitempty"` + // TimeZone - Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".

    Possible values can be [TimeZoneInfo.Id](https://docs.microsoft.com/dotnet/api/system.timezoneinfo.id?#System_TimeZoneInfo_Id) value from time zones returned by [TimeZoneInfo.GetSystemTimeZones](https://docs.microsoft.com/dotnet/api/system.timezoneinfo.getsystemtimezones). + TimeZone *string `json:"timeZone,omitempty"` + // AdditionalUnattendContent - Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. + AdditionalUnattendContent *[]AdditionalUnattendContent `json:"additionalUnattendContent,omitempty"` + // PatchSettings - [Preview Feature] Specifies settings related to VM Guest Patching on Windows. + PatchSettings *PatchSettings `json:"patchSettings,omitempty"` + // WinRM - Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell. + WinRM *WinRMConfiguration `json:"winRM,omitempty"` + // EnableVMAgentPlatformUpdates - Indicates whether VMAgent Platform Updates is enabled for the Windows virtual machine. Default value is false. + EnableVMAgentPlatformUpdates *bool `json:"enableVMAgentPlatformUpdates,omitempty"` +} + +// WindowsParameters input for InstallPatches on a Windows VM, as directly received by the API +type WindowsParameters struct { + // ClassificationsToInclude - The update classifications to select when installing patches for Windows. + ClassificationsToInclude *[]VMGuestPatchClassificationWindows `json:"classificationsToInclude,omitempty"` + // KbNumbersToInclude - Kbs to include in the patch operation + KbNumbersToInclude *[]string `json:"kbNumbersToInclude,omitempty"` + // KbNumbersToExclude - Kbs to exclude in the patch operation + KbNumbersToExclude *[]string `json:"kbNumbersToExclude,omitempty"` + // ExcludeKbsRequiringReboot - Filters out Kbs that don't have an InstallationRebootBehavior of 'NeverReboots' when this is set to true. + ExcludeKbsRequiringReboot *bool `json:"excludeKbsRequiringReboot,omitempty"` + // MaxPatchPublishDate - This is used to install patches that were published on or before this given max published date. + MaxPatchPublishDate *date.Time `json:"maxPatchPublishDate,omitempty"` +} + +// WindowsVMGuestPatchAutomaticByPlatformSettings specifies additional settings to be applied when patch +// mode AutomaticByPlatform is selected in Windows patch settings. +type WindowsVMGuestPatchAutomaticByPlatformSettings struct { + // RebootSetting - Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Possible values include: 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways' + RebootSetting WindowsVMGuestPatchAutomaticByPlatformRebootSetting `json:"rebootSetting,omitempty"` +} + +// WinRMConfiguration describes Windows Remote Management configuration of the VM +type WinRMConfiguration struct { + // Listeners - The list of Windows Remote Management listeners + Listeners *[]WinRMListener `json:"listeners,omitempty"` +} + +// WinRMListener describes Protocol and thumbprint of Windows Remote Management listener +type WinRMListener struct { + // Protocol - Specifies the protocol of WinRM listener.

    Possible values are:
    **http**

    **https**. Possible values include: 'HTTP', 'HTTPS' + Protocol ProtocolTypes `json:"protocol,omitempty"` + // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8:

    {
    "data":"",
    "dataType":"pfx",
    "password":""
    }
    To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). + CertificateURL *string `json:"certificateUrl,omitempty"` +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/operations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/operations.go new file mode 100644 index 000000000000..3f4a51a3f27c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/operations.go @@ -0,0 +1,98 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// OperationsClient is the compute Client +type OperationsClient struct { + BaseClient +} + +// NewOperationsClient creates an instance of the OperationsClient client. +func NewOperationsClient(subscriptionID string) OperationsClient { + return NewOperationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewOperationsClientWithBaseURI creates an instance of the OperationsClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewOperationsClientWithBaseURI(baseURI string, subscriptionID string) OperationsClient { + return OperationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List gets a list of compute operations. +func (client OperationsClient) List(ctx context.Context) (result OperationListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) { + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPath("/providers/Microsoft.Compute/operations"), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client OperationsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client OperationsClient) ListResponder(resp *http.Response) (result OperationListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/proximityplacementgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/proximityplacementgroups.go new file mode 100644 index 000000000000..cc7766f7c677 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/proximityplacementgroups.go @@ -0,0 +1,575 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ProximityPlacementGroupsClient is the compute Client +type ProximityPlacementGroupsClient struct { + BaseClient +} + +// NewProximityPlacementGroupsClient creates an instance of the ProximityPlacementGroupsClient client. +func NewProximityPlacementGroupsClient(subscriptionID string) ProximityPlacementGroupsClient { + return NewProximityPlacementGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewProximityPlacementGroupsClientWithBaseURI creates an instance of the ProximityPlacementGroupsClient client using +// a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewProximityPlacementGroupsClientWithBaseURI(baseURI string, subscriptionID string) ProximityPlacementGroupsClient { + return ProximityPlacementGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create or update a proximity placement group. +// Parameters: +// resourceGroupName - the name of the resource group. +// proximityPlacementGroupName - the name of the proximity placement group. +// parameters - parameters supplied to the Create Proximity Placement Group operation. +func (client ProximityPlacementGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroup) (result ProximityPlacementGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, proximityPlacementGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ProximityPlacementGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroup) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete a proximity placement group. +// Parameters: +// resourceGroupName - the name of the resource group. +// proximityPlacementGroupName - the name of the proximity placement group. +func (client ProximityPlacementGroupsClient) Delete(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, proximityPlacementGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ProximityPlacementGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about a proximity placement group . +// Parameters: +// resourceGroupName - the name of the resource group. +// proximityPlacementGroupName - the name of the proximity placement group. +// includeColocationStatus - includeColocationStatus=true enables fetching the colocation status of all the +// resources in the proximity placement group. +func (client ProximityPlacementGroupsClient) Get(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, includeColocationStatus string) (result ProximityPlacementGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, proximityPlacementGroupName, includeColocationStatus) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ProximityPlacementGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, includeColocationStatus string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(includeColocationStatus) > 0 { + queryParameters["includeColocationStatus"] = autorest.Encode("query", includeColocationStatus) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) GetResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByResourceGroup lists all proximity placement groups in a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client ProximityPlacementGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ProximityPlacementGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.ppglr.Response.Response != nil { + sc = result.ppglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.ppglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.ppglr, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.ppglr.hasNextLink() && result.ppglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client ProximityPlacementGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result ProximityPlacementGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client ProximityPlacementGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults ProximityPlacementGroupListResult) (result ProximityPlacementGroupListResult, err error) { + req, err := lastResults.proximityPlacementGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client ProximityPlacementGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ProximityPlacementGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// ListBySubscription lists all proximity placement groups in a subscription. +func (client ProximityPlacementGroupsClient) ListBySubscription(ctx context.Context) (result ProximityPlacementGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.ppglr.Response.Response != nil { + sc = result.ppglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.ppglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.ppglr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.ppglr.hasNextLink() && result.ppglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client ProximityPlacementGroupsClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/proximityPlacementGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result ProximityPlacementGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client ProximityPlacementGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults ProximityPlacementGroupListResult) (result ProximityPlacementGroupListResult, err error) { + req, err := lastResults.proximityPlacementGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client ProximityPlacementGroupsClient) ListBySubscriptionComplete(ctx context.Context) (result ProximityPlacementGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx) + return +} + +// Update update a proximity placement group. +// Parameters: +// resourceGroupName - the name of the resource group. +// proximityPlacementGroupName - the name of the proximity placement group. +// parameters - parameters supplied to the Update Proximity Placement Group operation. +func (client ProximityPlacementGroupsClient) Update(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroupUpdate) (result ProximityPlacementGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, proximityPlacementGroupName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client ProximityPlacementGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroupUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client ProximityPlacementGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client ProximityPlacementGroupsClient) UpdateResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/resourceskus.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/resourceskus.go new file mode 100644 index 000000000000..35266973811b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/resourceskus.go @@ -0,0 +1,153 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ResourceSkusClient is the compute Client +type ResourceSkusClient struct { + BaseClient +} + +// NewResourceSkusClient creates an instance of the ResourceSkusClient client. +func NewResourceSkusClient(subscriptionID string) ResourceSkusClient { + return NewResourceSkusClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewResourceSkusClientWithBaseURI creates an instance of the ResourceSkusClient client using a custom endpoint. Use +// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewResourceSkusClientWithBaseURI(baseURI string, subscriptionID string) ResourceSkusClient { + return ResourceSkusClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List gets the list of Microsoft.Compute SKUs available for your Subscription. +// Parameters: +// filter - the filter to apply on the operation. Only **location** filter is supported currently. +// includeExtendedLocations - to Include Extended Locations information or not in the response. +func (client ResourceSkusClient) List(ctx context.Context, filter string, includeExtendedLocations string) (result ResourceSkusResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusClient.List") + defer func() { + sc := -1 + if result.rsr.Response.Response != nil { + sc = result.rsr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, filter, includeExtendedLocations) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.rsr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", resp, "Failure sending request") + return + } + + result.rsr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", resp, "Failure responding to request") + return + } + if result.rsr.hasNextLink() && result.rsr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ResourceSkusClient) ListPreparer(ctx context.Context, filter string, includeExtendedLocations string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2021-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + if len(includeExtendedLocations) > 0 { + queryParameters["includeExtendedLocations"] = autorest.Encode("query", includeExtendedLocations) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/skus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ResourceSkusClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ResourceSkusClient) ListResponder(resp *http.Response) (result ResourceSkusResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ResourceSkusClient) listNextResults(ctx context.Context, lastResults ResourceSkusResult) (result ResourceSkusResult, err error) { + req, err := lastResults.resourceSkusResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ResourceSkusClient) ListComplete(ctx context.Context, filter string, includeExtendedLocations string) (result ResourceSkusResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, filter, includeExtendedLocations) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepointcollections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepointcollections.go new file mode 100644 index 000000000000..469f8e2b3149 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepointcollections.go @@ -0,0 +1,582 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// RestorePointCollectionsClient is the compute Client +type RestorePointCollectionsClient struct { + BaseClient +} + +// NewRestorePointCollectionsClient creates an instance of the RestorePointCollectionsClient client. +func NewRestorePointCollectionsClient(subscriptionID string) RestorePointCollectionsClient { + return NewRestorePointCollectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewRestorePointCollectionsClientWithBaseURI creates an instance of the RestorePointCollectionsClient client using a +// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, +// Azure stack). +func NewRestorePointCollectionsClientWithBaseURI(baseURI string, subscriptionID string) RestorePointCollectionsClient { + return RestorePointCollectionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update the restore point collection. Please refer to +// https://aka.ms/RestorePoints for more details. When updating a restore point collection, only tags may be modified. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection. +// parameters - parameters supplied to the Create or Update restore point collection operation. +func (client RestorePointCollectionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollection) (result RestorePointCollection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, restorePointCollectionName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client RestorePointCollectionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollection) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) CreateOrUpdateResponder(resp *http.Response) (result RestorePointCollection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the restore point collection. This operation will also delete all the contained +// restore points. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the Restore Point Collection. +func (client RestorePointCollectionsClient) Delete(ctx context.Context, resourceGroupName string, restorePointCollectionName string) (result RestorePointCollectionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, restorePointCollectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client RestorePointCollectionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) DeleteSender(req *http.Request) (future RestorePointCollectionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the restore point collection. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection. +// expand - the expand expression to apply on the operation. If expand=restorePoints, server will return all +// contained restore points in the restorePointCollection. +func (client RestorePointCollectionsClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, expand RestorePointCollectionExpandOptions) (result RestorePointCollection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client RestorePointCollectionsClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, expand RestorePointCollectionExpandOptions) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) GetResponder(resp *http.Response) (result RestorePointCollection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets the list of restore point collections in a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client RestorePointCollectionsClient) List(ctx context.Context, resourceGroupName string) (result RestorePointCollectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.List") + defer func() { + sc := -1 + if result.rpclr.Response.Response != nil { + sc = result.rpclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.rpclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", resp, "Failure sending request") + return + } + + result.rpclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", resp, "Failure responding to request") + return + } + if result.rpclr.hasNextLink() && result.rpclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client RestorePointCollectionsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) ListResponder(resp *http.Response) (result RestorePointCollectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client RestorePointCollectionsClient) listNextResults(ctx context.Context, lastResults RestorePointCollectionListResult) (result RestorePointCollectionListResult, err error) { + req, err := lastResults.restorePointCollectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client RestorePointCollectionsClient) ListComplete(ctx context.Context, resourceGroupName string) (result RestorePointCollectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName) + return +} + +// ListAll gets the list of restore point collections in the subscription. Use nextLink property in the response to get +// the next page of restore point collections. Do this till nextLink is not null to fetch all the restore point +// collections. +func (client RestorePointCollectionsClient) ListAll(ctx context.Context) (result RestorePointCollectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.ListAll") + defer func() { + sc := -1 + if result.rpclr.Response.Response != nil { + sc = result.rpclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAllNextResults + req, err := client.ListAllPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", nil, "Failure preparing request") + return + } + + resp, err := client.ListAllSender(req) + if err != nil { + result.rpclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", resp, "Failure sending request") + return + } + + result.rpclr, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", resp, "Failure responding to request") + return + } + if result.rpclr.hasNextLink() && result.rpclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListAllPreparer prepares the ListAll request. +func (client RestorePointCollectionsClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/restorePointCollections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAllSender sends the ListAll request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) ListAllSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAllResponder handles the response to the ListAll request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) ListAllResponder(resp *http.Response) (result RestorePointCollectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAllNextResults retrieves the next set of results, if any. +func (client RestorePointCollectionsClient) listAllNextResults(ctx context.Context, lastResults RestorePointCollectionListResult) (result RestorePointCollectionListResult, err error) { + req, err := lastResults.restorePointCollectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAllSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAllComplete enumerates all values, automatically crossing page boundaries as required. +func (client RestorePointCollectionsClient) ListAllComplete(ctx context.Context) (result RestorePointCollectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAll(ctx) + return +} + +// Update the operation to update the restore point collection. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection. +// parameters - parameters supplied to the Update restore point collection operation. +func (client RestorePointCollectionsClient) Update(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollectionUpdate) (result RestorePointCollection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, restorePointCollectionName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client RestorePointCollectionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollectionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointCollectionsClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client RestorePointCollectionsClient) UpdateResponder(resp *http.Response) (result RestorePointCollection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepoints.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepoints.go new file mode 100644 index 000000000000..5e00d6ffedb2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/restorepoints.go @@ -0,0 +1,302 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// RestorePointsClient is the compute Client +type RestorePointsClient struct { + BaseClient +} + +// NewRestorePointsClient creates an instance of the RestorePointsClient client. +func NewRestorePointsClient(subscriptionID string) RestorePointsClient { + return NewRestorePointsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewRestorePointsClientWithBaseURI creates an instance of the RestorePointsClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewRestorePointsClientWithBaseURI(baseURI string, subscriptionID string) RestorePointsClient { + return RestorePointsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Create the operation to create the restore point. Updating properties of an existing restore point is not allowed +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection. +// restorePointName - the name of the restore point. +// parameters - parameters supplied to the Create restore point operation. +func (client RestorePointsClient) Create(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, parameters RestorePoint) (result RestorePointsCreateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Create") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.RestorePointProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}, + }}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.RestorePointsClient", "Create", err.Error()) + } + + req, err := client.CreatePreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Create", nil, "Failure preparing request") + return + } + + result, err = client.CreateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Create", result.Response(), "Failure sending request") + return + } + + return +} + +// CreatePreparer prepares the Create request. +func (client RestorePointsClient) CreatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, parameters RestorePoint) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "restorePointName": autorest.Encode("path", restorePointName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateSender sends the Create request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointsClient) CreateSender(req *http.Request) (future RestorePointsCreateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateResponder handles the response to the Create request. The method always +// closes the http.Response Body. +func (client RestorePointsClient) CreateResponder(resp *http.Response) (result RestorePoint, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the restore point. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the Restore Point Collection. +// restorePointName - the name of the restore point. +func (client RestorePointsClient) Delete(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string) (result RestorePointsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client RestorePointsClient) DeletePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "restorePointName": autorest.Encode("path", restorePointName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointsClient) DeleteSender(req *http.Request) (future RestorePointsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client RestorePointsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the restore point. +// Parameters: +// resourceGroupName - the name of the resource group. +// restorePointCollectionName - the name of the restore point collection. +// restorePointName - the name of the restore point. +// expand - the expand expression to apply on the operation. 'InstanceView' retrieves information about the +// run-time state of a restore point. +func (client RestorePointsClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, expand RestorePointExpandOptions) (result RestorePoint, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client RestorePointsClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, expand RestorePointExpandOptions) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), + "restorePointName": autorest.Encode("path", restorePointName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client RestorePointsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client RestorePointsClient) GetResponder(resp *http.Response) (result RestorePoint, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleries.go new file mode 100644 index 000000000000..e15a36d7b7ec --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleries.go @@ -0,0 +1,227 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SharedGalleriesClient is the compute Client +type SharedGalleriesClient struct { + BaseClient +} + +// NewSharedGalleriesClient creates an instance of the SharedGalleriesClient client. +func NewSharedGalleriesClient(subscriptionID string) SharedGalleriesClient { + return NewSharedGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSharedGalleriesClientWithBaseURI creates an instance of the SharedGalleriesClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewSharedGalleriesClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleriesClient { + return SharedGalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a shared gallery by subscription id or tenant id. +// Parameters: +// location - resource location. +// galleryUniqueName - the unique name of the Shared Gallery. +func (client SharedGalleriesClient) Get(ctx context.Context, location string, galleryUniqueName string) (result SharedGallery, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, galleryUniqueName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SharedGalleriesClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryUniqueName": autorest.Encode("path", galleryUniqueName), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleriesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SharedGalleriesClient) GetResponder(resp *http.Response) (result SharedGallery, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list shared galleries by subscription id or tenant id. +// Parameters: +// location - resource location. +// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. +func (client SharedGalleriesClient) List(ctx context.Context, location string, sharedTo SharedToValues) (result SharedGalleryListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.List") + defer func() { + sc := -1 + if result.sgl.Response.Response != nil { + sc = result.sgl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location, sharedTo) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.sgl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", resp, "Failure sending request") + return + } + + result.sgl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", resp, "Failure responding to request") + return + } + if result.sgl.hasNextLink() && result.sgl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SharedGalleriesClient) ListPreparer(ctx context.Context, location string, sharedTo SharedToValues) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(sharedTo)) > 0 { + queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleriesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SharedGalleriesClient) ListResponder(resp *http.Response) (result SharedGalleryList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SharedGalleriesClient) listNextResults(ctx context.Context, lastResults SharedGalleryList) (result SharedGalleryList, err error) { + req, err := lastResults.sharedGalleryListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SharedGalleriesClient) ListComplete(ctx context.Context, location string, sharedTo SharedToValues) (result SharedGalleryListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location, sharedTo) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimages.go new file mode 100644 index 000000000000..70c7cde609ab --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimages.go @@ -0,0 +1,233 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SharedGalleryImagesClient is the compute Client +type SharedGalleryImagesClient struct { + BaseClient +} + +// NewSharedGalleryImagesClient creates an instance of the SharedGalleryImagesClient client. +func NewSharedGalleryImagesClient(subscriptionID string) SharedGalleryImagesClient { + return NewSharedGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSharedGalleryImagesClientWithBaseURI creates an instance of the SharedGalleryImagesClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewSharedGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleryImagesClient { + return SharedGalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a shared gallery image by subscription id or tenant id. +// Parameters: +// location - resource location. +// galleryUniqueName - the unique name of the Shared Gallery. +// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be +// listed. +func (client SharedGalleryImagesClient) Get(ctx context.Context, location string, galleryUniqueName string, galleryImageName string) (result SharedGalleryImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, galleryUniqueName, galleryImageName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SharedGalleryImagesClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryUniqueName": autorest.Encode("path", galleryUniqueName), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SharedGalleryImagesClient) GetResponder(resp *http.Response) (result SharedGalleryImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list shared gallery images by subscription id or tenant id. +// Parameters: +// location - resource location. +// galleryUniqueName - the unique name of the Shared Gallery. +// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. +func (client SharedGalleryImagesClient) List(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (result SharedGalleryImageListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.List") + defer func() { + sc := -1 + if result.sgil.Response.Response != nil { + sc = result.sgil.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location, galleryUniqueName, sharedTo) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.sgil.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", resp, "Failure sending request") + return + } + + result.sgil, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", resp, "Failure responding to request") + return + } + if result.sgil.hasNextLink() && result.sgil.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SharedGalleryImagesClient) ListPreparer(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryUniqueName": autorest.Encode("path", galleryUniqueName), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(sharedTo)) > 0 { + queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleryImagesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SharedGalleryImagesClient) ListResponder(resp *http.Response) (result SharedGalleryImageList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SharedGalleryImagesClient) listNextResults(ctx context.Context, lastResults SharedGalleryImageList) (result SharedGalleryImageList, err error) { + req, err := lastResults.sharedGalleryImageListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SharedGalleryImagesClient) ListComplete(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (result SharedGalleryImageListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location, galleryUniqueName, sharedTo) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimageversions.go new file mode 100644 index 000000000000..ea3a76bb149a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sharedgalleryimageversions.go @@ -0,0 +1,240 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SharedGalleryImageVersionsClient is the compute Client +type SharedGalleryImageVersionsClient struct { + BaseClient +} + +// NewSharedGalleryImageVersionsClient creates an instance of the SharedGalleryImageVersionsClient client. +func NewSharedGalleryImageVersionsClient(subscriptionID string) SharedGalleryImageVersionsClient { + return NewSharedGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSharedGalleryImageVersionsClientWithBaseURI creates an instance of the SharedGalleryImageVersionsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewSharedGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleryImageVersionsClient { + return SharedGalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get a shared gallery image version by subscription id or tenant id. +// Parameters: +// location - resource location. +// galleryUniqueName - the unique name of the Shared Gallery. +// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be +// listed. +// galleryImageVersionName - the name of the gallery image version to be created. Needs to follow semantic +// version name pattern: The allowed characters are digit and period. Digits must be within the range of a +// 32-bit integer. Format: .. +func (client SharedGalleryImageVersionsClient) Get(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, galleryImageVersionName string) (result SharedGalleryImageVersion, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, galleryUniqueName, galleryImageName, galleryImageVersionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SharedGalleryImageVersionsClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), + "galleryUniqueName": autorest.Encode("path", galleryUniqueName), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SharedGalleryImageVersionsClient) GetResponder(resp *http.Response) (result SharedGalleryImageVersion, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list shared gallery image versions by subscription id or tenant id. +// Parameters: +// location - resource location. +// galleryUniqueName - the unique name of the Shared Gallery. +// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be +// listed. +// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. +func (client SharedGalleryImageVersionsClient) List(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (result SharedGalleryImageVersionListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.List") + defer func() { + sc := -1 + if result.sgivl.Response.Response != nil { + sc = result.sgivl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location, galleryUniqueName, galleryImageName, sharedTo) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.sgivl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", resp, "Failure sending request") + return + } + + result.sgivl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", resp, "Failure responding to request") + return + } + if result.sgivl.hasNextLink() && result.sgivl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SharedGalleryImageVersionsClient) ListPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "galleryImageName": autorest.Encode("path", galleryImageName), + "galleryUniqueName": autorest.Encode("path", galleryUniqueName), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-01-03" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(sharedTo)) > 0 { + queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SharedGalleryImageVersionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SharedGalleryImageVersionsClient) ListResponder(resp *http.Response) (result SharedGalleryImageVersionList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SharedGalleryImageVersionsClient) listNextResults(ctx context.Context, lastResults SharedGalleryImageVersionList) (result SharedGalleryImageVersionList, err error) { + req, err := lastResults.sharedGalleryImageVersionListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SharedGalleryImageVersionsClient) ListComplete(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (result SharedGalleryImageVersionListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location, galleryUniqueName, galleryImageName, sharedTo) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/snapshots.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/snapshots.go new file mode 100644 index 000000000000..54eb26c52d47 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/snapshots.go @@ -0,0 +1,777 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SnapshotsClient is the compute Client +type SnapshotsClient struct { + BaseClient +} + +// NewSnapshotsClient creates an instance of the SnapshotsClient client. +func NewSnapshotsClient(subscriptionID string) SnapshotsClient { + return NewSnapshotsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSnapshotsClientWithBaseURI creates an instance of the SnapshotsClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewSnapshotsClientWithBaseURI(baseURI string, subscriptionID string) SnapshotsClient { + return SnapshotsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +// snapshot - snapshot object supplied in the body of the Put disk operation. +func (client SnapshotsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, snapshotName string, snapshot Snapshot) (result SnapshotsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: snapshot, + Constraints: []validation.Constraint{{Target: "snapshot.SnapshotProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.PurchasePlan", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.PurchasePlan.Publisher", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "snapshot.SnapshotProperties.PurchasePlan.Name", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "snapshot.SnapshotProperties.PurchasePlan.Product", Name: validation.Null, Rule: true, Chain: nil}, + }}, + {Target: "snapshot.SnapshotProperties.CreationData", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "snapshot.SnapshotProperties.EncryptionSettingsCollection", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.EncryptionSettingsCollection.Enabled", Name: validation.Null, Rule: true, Chain: nil}}}, + {Target: "snapshot.SnapshotProperties.CopyCompletionError", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.CopyCompletionError.ErrorCode", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "snapshot.SnapshotProperties.CopyCompletionError.ErrorMessage", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.SnapshotsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, snapshotName, snapshot) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client SnapshotsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, snapshotName string, snapshot Snapshot) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + snapshot.ManagedBy = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), + autorest.WithJSON(snapshot), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) CreateOrUpdateSender(req *http.Request) (future SnapshotsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) CreateOrUpdateResponder(resp *http.Response) (result Snapshot, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +func (client SnapshotsClient) Delete(ctx context.Context, resourceGroupName string, snapshotName string) (result SnapshotsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, snapshotName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client SnapshotsClient) DeletePreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) DeleteSender(req *http.Request) (future SnapshotsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets information about a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +func (client SnapshotsClient) Get(ctx context.Context, resourceGroupName string, snapshotName string) (result Snapshot, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, snapshotName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SnapshotsClient) GetPreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) GetResponder(resp *http.Response) (result Snapshot, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GrantAccess grants access to a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +// grantAccessData - access data object supplied in the body of the get snapshot access operation. +func (client SnapshotsClient) GrantAccess(ctx context.Context, resourceGroupName string, snapshotName string, grantAccessData GrantAccessData) (result SnapshotsGrantAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.GrantAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: grantAccessData, + Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.SnapshotsClient", "GrantAccess", err.Error()) + } + + req, err := client.GrantAccessPreparer(ctx, resourceGroupName, snapshotName, grantAccessData) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "GrantAccess", nil, "Failure preparing request") + return + } + + result, err = client.GrantAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "GrantAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// GrantAccessPreparer prepares the GrantAccess request. +func (client SnapshotsClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, snapshotName string, grantAccessData GrantAccessData) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", pathParameters), + autorest.WithJSON(grantAccessData), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GrantAccessSender sends the GrantAccess request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) GrantAccessSender(req *http.Request) (future SnapshotsGrantAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// GrantAccessResponder handles the response to the GrantAccess request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists snapshots under a subscription. +func (client SnapshotsClient) List(ctx context.Context) (result SnapshotListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.List") + defer func() { + sc := -1 + if result.sl.Response.Response != nil { + sc = result.sl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.sl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", resp, "Failure sending request") + return + } + + result.sl, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", resp, "Failure responding to request") + return + } + if result.sl.hasNextLink() && result.sl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SnapshotsClient) ListPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/snapshots", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) ListResponder(resp *http.Response) (result SnapshotList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SnapshotsClient) listNextResults(ctx context.Context, lastResults SnapshotList) (result SnapshotList, err error) { + req, err := lastResults.snapshotListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SnapshotsClient) ListComplete(ctx context.Context) (result SnapshotListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} + +// ListByResourceGroup lists snapshots under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client SnapshotsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result SnapshotListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.sl.Response.Response != nil { + sc = result.sl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.sl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.sl, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.sl.hasNextLink() && result.sl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client SnapshotsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) ListByResourceGroupResponder(resp *http.Response) (result SnapshotList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client SnapshotsClient) listByResourceGroupNextResults(ctx context.Context, lastResults SnapshotList) (result SnapshotList, err error) { + req, err := lastResults.snapshotListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client SnapshotsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result SnapshotListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// RevokeAccess revokes access to a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +func (client SnapshotsClient) RevokeAccess(ctx context.Context, resourceGroupName string, snapshotName string) (result SnapshotsRevokeAccessFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.RevokeAccess") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, snapshotName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "RevokeAccess", nil, "Failure preparing request") + return + } + + result, err = client.RevokeAccessSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "RevokeAccess", result.Response(), "Failure sending request") + return + } + + return +} + +// RevokeAccessPreparer prepares the RevokeAccess request. +func (client SnapshotsClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RevokeAccessSender sends the RevokeAccess request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) RevokeAccessSender(req *http.Request) (future SnapshotsRevokeAccessFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RevokeAccessResponder handles the response to the RevokeAccess request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update updates (patches) a snapshot. +// Parameters: +// resourceGroupName - the name of the resource group. +// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot +// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 +// characters. +// snapshot - snapshot object supplied in the body of the Patch snapshot operation. +func (client SnapshotsClient) Update(ctx context.Context, resourceGroupName string, snapshotName string, snapshot SnapshotUpdate) (result SnapshotsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, snapshotName, snapshot) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client SnapshotsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, snapshotName string, snapshot SnapshotUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "snapshotName": autorest.Encode("path", snapshotName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-02" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), + autorest.WithJSON(snapshot), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client SnapshotsClient) UpdateSender(req *http.Request) (future SnapshotsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client SnapshotsClient) UpdateResponder(resp *http.Response) (result Snapshot, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sshpublickeys.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sshpublickeys.go new file mode 100644 index 000000000000..f293af111faa --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/sshpublickeys.go @@ -0,0 +1,649 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SSHPublicKeysClient is the compute Client +type SSHPublicKeysClient struct { + BaseClient +} + +// NewSSHPublicKeysClient creates an instance of the SSHPublicKeysClient client. +func NewSSHPublicKeysClient(subscriptionID string) SSHPublicKeysClient { + return NewSSHPublicKeysClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSSHPublicKeysClientWithBaseURI creates an instance of the SSHPublicKeysClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewSSHPublicKeysClientWithBaseURI(baseURI string, subscriptionID string) SSHPublicKeysClient { + return SSHPublicKeysClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Create creates a new SSH public key resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// SSHPublicKeyName - the name of the SSH public key. +// parameters - parameters supplied to create the SSH public key. +func (client SSHPublicKeysClient) Create(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyResource) (result SSHPublicKeyResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Create") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreatePreparer(ctx, resourceGroupName, SSHPublicKeyName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", nil, "Failure preparing request") + return + } + + resp, err := client.CreateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", resp, "Failure sending request") + return + } + + result, err = client.CreateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", resp, "Failure responding to request") + return + } + + return +} + +// CreatePreparer prepares the Create request. +func (client SSHPublicKeysClient) CreatePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyResource) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateSender sends the Create request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) CreateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateResponder handles the response to the Create request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) CreateResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete an SSH public key. +// Parameters: +// resourceGroupName - the name of the resource group. +// SSHPublicKeyName - the name of the SSH public key. +func (client SSHPublicKeysClient) Delete(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, SSHPublicKeyName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client SSHPublicKeysClient) DeletePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// GenerateKeyPair generates and returns a public/private key pair and populates the SSH public key resource with the +// public key. The length of the key will be 3072 bits. This operation can only be performed once per SSH public key +// resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// SSHPublicKeyName - the name of the SSH public key. +func (client SSHPublicKeysClient) GenerateKeyPair(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result SSHPublicKeyGenerateKeyPairResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.GenerateKeyPair") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GenerateKeyPairPreparer(ctx, resourceGroupName, SSHPublicKeyName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", nil, "Failure preparing request") + return + } + + resp, err := client.GenerateKeyPairSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", resp, "Failure sending request") + return + } + + result, err = client.GenerateKeyPairResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", resp, "Failure responding to request") + return + } + + return +} + +// GenerateKeyPairPreparer prepares the GenerateKeyPair request. +func (client SSHPublicKeysClient) GenerateKeyPairPreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GenerateKeyPairSender sends the GenerateKeyPair request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) GenerateKeyPairSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GenerateKeyPairResponder handles the response to the GenerateKeyPair request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) GenerateKeyPairResponder(resp *http.Response) (result SSHPublicKeyGenerateKeyPairResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Get retrieves information about an SSH public key. +// Parameters: +// resourceGroupName - the name of the resource group. +// SSHPublicKeyName - the name of the SSH public key. +func (client SSHPublicKeysClient) Get(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result SSHPublicKeyResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, SSHPublicKeyName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SSHPublicKeysClient) GetPreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) GetResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByResourceGroup lists all of the SSH public keys in the specified resource group. Use the nextLink property in +// the response to get the next page of SSH public keys. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client SSHPublicKeysClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result SSHPublicKeysGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.spkglr.Response.Response != nil { + sc = result.spkglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByResourceGroupNextResults + req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.spkglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", resp, "Failure sending request") + return + } + + result.spkglr, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", resp, "Failure responding to request") + return + } + if result.spkglr.hasNextLink() && result.spkglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByResourceGroupPreparer prepares the ListByResourceGroup request. +func (client SSHPublicKeysClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) ListByResourceGroupResponder(resp *http.Response) (result SSHPublicKeysGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByResourceGroupNextResults retrieves the next set of results, if any. +func (client SSHPublicKeysClient) listByResourceGroupNextResults(ctx context.Context, lastResults SSHPublicKeysGroupListResult) (result SSHPublicKeysGroupListResult, err error) { + req, err := lastResults.sSHPublicKeysGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByResourceGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByResourceGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. +func (client SSHPublicKeysClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result SSHPublicKeysGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListByResourceGroup") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) + return +} + +// ListBySubscription lists all of the SSH public keys in the subscription. Use the nextLink property in the response +// to get the next page of SSH public keys. +func (client SSHPublicKeysClient) ListBySubscription(ctx context.Context) (result SSHPublicKeysGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListBySubscription") + defer func() { + sc := -1 + if result.spkglr.Response.Response != nil { + sc = result.spkglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.spkglr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.spkglr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.spkglr.hasNextLink() && result.spkglr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client SSHPublicKeysClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/sshPublicKeys", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) ListBySubscriptionResponder(resp *http.Response) (result SSHPublicKeysGroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client SSHPublicKeysClient) listBySubscriptionNextResults(ctx context.Context, lastResults SSHPublicKeysGroupListResult) (result SSHPublicKeysGroupListResult, err error) { + req, err := lastResults.sSHPublicKeysGroupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client SSHPublicKeysClient) ListBySubscriptionComplete(ctx context.Context) (result SSHPublicKeysGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx) + return +} + +// Update updates a new SSH public key resource. +// Parameters: +// resourceGroupName - the name of the resource group. +// SSHPublicKeyName - the name of the SSH public key. +// parameters - parameters supplied to update the SSH public key. +func (client SSHPublicKeysClient) Update(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyUpdateResource) (result SSHPublicKeyResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Update") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, SSHPublicKeyName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", nil, "Failure preparing request") + return + } + + resp, err := client.UpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", resp, "Failure sending request") + return + } + + result, err = client.UpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", resp, "Failure responding to request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client SSHPublicKeysClient) UpdatePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyUpdateResource) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client SSHPublicKeysClient) UpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client SSHPublicKeysClient) UpdateResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/usage.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/usage.go new file mode 100644 index 000000000000..8af0c7de4251 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/usage.go @@ -0,0 +1,155 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// UsageClient is the compute Client +type UsageClient struct { + BaseClient +} + +// NewUsageClient creates an instance of the UsageClient client. +func NewUsageClient(subscriptionID string) UsageClient { + return NewUsageClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewUsageClientWithBaseURI creates an instance of the UsageClient client using a custom endpoint. Use this when +// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewUsageClientWithBaseURI(baseURI string, subscriptionID string) UsageClient { + return UsageClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List gets, for the specified location, the current compute resource usage information as well as the limits for +// compute resources under the subscription. +// Parameters: +// location - the location for which resource usage is queried. +func (client UsageClient) List(ctx context.Context, location string) (result ListUsagesResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageClient.List") + defer func() { + sc := -1 + if result.lur.Response.Response != nil { + sc = result.lur.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.UsageClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.lur.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure sending request") + return + } + + result.lur, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure responding to request") + return + } + if result.lur.hasNextLink() && result.lur.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client UsageClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client UsageClient) ListResponder(resp *http.Response) (result ListUsagesResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client UsageClient) listNextResults(ctx context.Context, lastResults ListUsagesResult) (result ListUsagesResult, err error) { + req, err := lastResults.listUsagesResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client UsageClient) ListComplete(ctx context.Context, location string) (result ListUsagesResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/version.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/version.go new file mode 100644 index 000000000000..d7dcad9c4c74 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/version.go @@ -0,0 +1,19 @@ +package compute + +import "github.com/Azure/azure-sdk-for-go/version" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +// UserAgent returns the UserAgent string to use when sending http.Requests. +func UserAgent() string { + return "Azure-SDK-For-Go/" + Version() + " compute/2022-08-01" +} + +// Version returns the semantic version (see http://semver.org) of the client. +func Version() string { + return version.Number +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensionimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensionimages.go new file mode 100644 index 000000000000..5ebc7b481f68 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensionimages.go @@ -0,0 +1,270 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineExtensionImagesClient is the compute Client +type VirtualMachineExtensionImagesClient struct { + BaseClient +} + +// NewVirtualMachineExtensionImagesClient creates an instance of the VirtualMachineExtensionImagesClient client. +func NewVirtualMachineExtensionImagesClient(subscriptionID string) VirtualMachineExtensionImagesClient { + return NewVirtualMachineExtensionImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineExtensionImagesClientWithBaseURI creates an instance of the VirtualMachineExtensionImagesClient +// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI +// (sovereign clouds, Azure stack). +func NewVirtualMachineExtensionImagesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineExtensionImagesClient { + return VirtualMachineExtensionImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets a virtual machine extension image. +// Parameters: +// location - the name of a supported Azure region. +func (client VirtualMachineExtensionImagesClient) Get(ctx context.Context, location string, publisherName string, typeParameter string, version string) (result VirtualMachineExtensionImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, publisherName, typeParameter, version) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineExtensionImagesClient) GetPreparer(ctx context.Context, location string, publisherName string, typeParameter string, version string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "type": autorest.Encode("path", typeParameter), + "version": autorest.Encode("path", version), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionImagesClient) GetResponder(resp *http.Response) (result VirtualMachineExtensionImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListTypes gets a list of virtual machine extension image types. +// Parameters: +// location - the name of a supported Azure region. +func (client VirtualMachineExtensionImagesClient) ListTypes(ctx context.Context, location string, publisherName string) (result ListVirtualMachineExtensionImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.ListTypes") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListTypesPreparer(ctx, location, publisherName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", nil, "Failure preparing request") + return + } + + resp, err := client.ListTypesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", resp, "Failure sending request") + return + } + + result, err = client.ListTypesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", resp, "Failure responding to request") + return + } + + return +} + +// ListTypesPreparer prepares the ListTypes request. +func (client VirtualMachineExtensionImagesClient) ListTypesPreparer(ctx context.Context, location string, publisherName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListTypesSender sends the ListTypes request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionImagesClient) ListTypesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListTypesResponder handles the response to the ListTypes request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionImagesClient) ListTypesResponder(resp *http.Response) (result ListVirtualMachineExtensionImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListVersions gets a list of virtual machine extension image versions. +// Parameters: +// location - the name of a supported Azure region. +// filter - the filter to apply on the operation. +func (client VirtualMachineExtensionImagesClient) ListVersions(ctx context.Context, location string, publisherName string, typeParameter string, filter string, top *int32, orderby string) (result ListVirtualMachineExtensionImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.ListVersions") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListVersionsPreparer(ctx, location, publisherName, typeParameter, filter, top, orderby) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", nil, "Failure preparing request") + return + } + + resp, err := client.ListVersionsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", resp, "Failure sending request") + return + } + + result, err = client.ListVersionsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", resp, "Failure responding to request") + return + } + + return +} + +// ListVersionsPreparer prepares the ListVersions request. +func (client VirtualMachineExtensionImagesClient) ListVersionsPreparer(ctx context.Context, location string, publisherName string, typeParameter string, filter string, top *int32, orderby string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "type": autorest.Encode("path", typeParameter), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(orderby) > 0 { + queryParameters["$orderby"] = autorest.Encode("query", orderby) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListVersionsSender sends the ListVersions request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionImagesClient) ListVersionsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListVersionsResponder handles the response to the ListVersions request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionImagesClient) ListVersionsResponder(resp *http.Response) (result ListVirtualMachineExtensionImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensions.go new file mode 100644 index 000000000000..4835d9d641c3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineextensions.go @@ -0,0 +1,454 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineExtensionsClient is the compute Client +type VirtualMachineExtensionsClient struct { + BaseClient +} + +// NewVirtualMachineExtensionsClient creates an instance of the VirtualMachineExtensionsClient client. +func NewVirtualMachineExtensionsClient(subscriptionID string) VirtualMachineExtensionsClient { + return NewVirtualMachineExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineExtensionsClientWithBaseURI creates an instance of the VirtualMachineExtensionsClient client using +// a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewVirtualMachineExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineExtensionsClient { + return VirtualMachineExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the extension should be created or updated. +// VMExtensionName - the name of the virtual machine extension. +// extensionParameters - parameters supplied to the Create Virtual Machine Extension operation. +func (client VirtualMachineExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtension) (result VirtualMachineExtensionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: extensionParameters, + Constraints: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineExtensionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, VMExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtension) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineExtensionsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the extension should be deleted. +// VMExtensionName - the name of the virtual machine extension. +func (client VirtualMachineExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string) (result VirtualMachineExtensionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, VMExtensionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineExtensionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine containing the extension. +// VMExtensionName - the name of the virtual machine extension. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, expand string) (result VirtualMachineExtension, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMName, VMExtensionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List the operation to get all extensions of a Virtual Machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine containing the extension. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineExtensionsClient) List(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineExtensionsListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, resourceGroupName, VMName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineExtensionsListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Update the operation to update the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the extension should be updated. +// VMExtensionName - the name of the virtual machine extension. +// extensionParameters - parameters supplied to the Update Virtual Machine Extension operation. +func (client VirtualMachineExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtensionUpdate) (result VirtualMachineExtensionsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, VMExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtensionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineExtensionsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimages.go new file mode 100644 index 000000000000..65b20c304615 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimages.go @@ -0,0 +1,508 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineImagesClient is the compute Client +type VirtualMachineImagesClient struct { + BaseClient +} + +// NewVirtualMachineImagesClient creates an instance of the VirtualMachineImagesClient client. +func NewVirtualMachineImagesClient(subscriptionID string) VirtualMachineImagesClient { + return NewVirtualMachineImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineImagesClientWithBaseURI creates an instance of the VirtualMachineImagesClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewVirtualMachineImagesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineImagesClient { + return VirtualMachineImagesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets a virtual machine image. +// Parameters: +// location - the name of a supported Azure region. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +// skus - a valid image SKU. +// version - a valid image SKU version. +func (client VirtualMachineImagesClient) Get(ctx context.Context, location string, publisherName string, offer string, skus string, version string) (result VirtualMachineImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, publisherName, offer, skus, version) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineImagesClient) GetPreparer(ctx context.Context, location string, publisherName string, offer string, skus string, version string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "skus": autorest.Encode("path", skus), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "version": autorest.Encode("path", version), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) GetResponder(resp *http.Response) (result VirtualMachineImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all virtual machine image versions for the specified location, publisher, offer, and SKU. +// Parameters: +// location - the name of a supported Azure region. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +// skus - a valid image SKU. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineImagesClient) List(ctx context.Context, location string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, location, publisherName, offer, skus, expand, top, orderby) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineImagesClient) ListPreparer(ctx context.Context, location string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "skus": autorest.Encode("path", skus), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(orderby) > 0 { + queryParameters["$orderby"] = autorest.Encode("query", orderby) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) ListResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByEdgeZone gets a list of all virtual machine image versions for the specified edge zone +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +func (client VirtualMachineImagesClient) ListByEdgeZone(ctx context.Context, location string, edgeZone string) (result VMImagesInEdgeZoneListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListByEdgeZone") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListByEdgeZonePreparer(ctx, location, edgeZone) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", nil, "Failure preparing request") + return + } + + resp, err := client.ListByEdgeZoneSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", resp, "Failure sending request") + return + } + + result, err = client.ListByEdgeZoneResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", resp, "Failure responding to request") + return + } + + return +} + +// ListByEdgeZonePreparer prepares the ListByEdgeZone request. +func (client VirtualMachineImagesClient) ListByEdgeZonePreparer(ctx context.Context, location string, edgeZone string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/vmimages", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByEdgeZoneSender sends the ListByEdgeZone request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) ListByEdgeZoneSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByEdgeZoneResponder handles the response to the ListByEdgeZone request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) ListByEdgeZoneResponder(resp *http.Response) (result VMImagesInEdgeZoneListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListOffers gets a list of virtual machine image offers for the specified location and publisher. +// Parameters: +// location - the name of a supported Azure region. +// publisherName - a valid image publisher. +func (client VirtualMachineImagesClient) ListOffers(ctx context.Context, location string, publisherName string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListOffers") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListOffersPreparer(ctx, location, publisherName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", nil, "Failure preparing request") + return + } + + resp, err := client.ListOffersSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", resp, "Failure sending request") + return + } + + result, err = client.ListOffersResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", resp, "Failure responding to request") + return + } + + return +} + +// ListOffersPreparer prepares the ListOffers request. +func (client VirtualMachineImagesClient) ListOffersPreparer(ctx context.Context, location string, publisherName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListOffersSender sends the ListOffers request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) ListOffersSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListOffersResponder handles the response to the ListOffers request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) ListOffersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListPublishers gets a list of virtual machine image publishers for the specified Azure location. +// Parameters: +// location - the name of a supported Azure region. +func (client VirtualMachineImagesClient) ListPublishers(ctx context.Context, location string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListPublishers") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPublishersPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", nil, "Failure preparing request") + return + } + + resp, err := client.ListPublishersSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", resp, "Failure sending request") + return + } + + result, err = client.ListPublishersResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", resp, "Failure responding to request") + return + } + + return +} + +// ListPublishersPreparer prepares the ListPublishers request. +func (client VirtualMachineImagesClient) ListPublishersPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListPublishersSender sends the ListPublishers request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) ListPublishersSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListPublishersResponder handles the response to the ListPublishers request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) ListPublishersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListSkus gets a list of virtual machine image SKUs for the specified location, publisher, and offer. +// Parameters: +// location - the name of a supported Azure region. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +func (client VirtualMachineImagesClient) ListSkus(ctx context.Context, location string, publisherName string, offer string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListSkus") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListSkusPreparer(ctx, location, publisherName, offer) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", nil, "Failure preparing request") + return + } + + resp, err := client.ListSkusSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", resp, "Failure sending request") + return + } + + result, err = client.ListSkusResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", resp, "Failure responding to request") + return + } + + return +} + +// ListSkusPreparer prepares the ListSkus request. +func (client VirtualMachineImagesClient) ListSkusPreparer(ctx context.Context, location string, publisherName string, offer string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSkusSender sends the ListSkus request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesClient) ListSkusSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListSkusResponder handles the response to the ListSkus request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesClient) ListSkusResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimagesedgezone.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimagesedgezone.go new file mode 100644 index 000000000000..33ca2cbe8ed9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineimagesedgezone.go @@ -0,0 +1,445 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineImagesEdgeZoneClient is the compute Client +type VirtualMachineImagesEdgeZoneClient struct { + BaseClient +} + +// NewVirtualMachineImagesEdgeZoneClient creates an instance of the VirtualMachineImagesEdgeZoneClient client. +func NewVirtualMachineImagesEdgeZoneClient(subscriptionID string) VirtualMachineImagesEdgeZoneClient { + return NewVirtualMachineImagesEdgeZoneClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineImagesEdgeZoneClientWithBaseURI creates an instance of the VirtualMachineImagesEdgeZoneClient +// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI +// (sovereign clouds, Azure stack). +func NewVirtualMachineImagesEdgeZoneClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineImagesEdgeZoneClient { + return VirtualMachineImagesEdgeZoneClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets a virtual machine image in an edge zone. +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +// skus - a valid image SKU. +// version - a valid image SKU version. +func (client VirtualMachineImagesEdgeZoneClient) Get(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string) (result VirtualMachineImage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location, edgeZone, publisherName, offer, skus, version) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineImagesEdgeZoneClient) GetPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "skus": autorest.Encode("path", skus), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "version": autorest.Encode("path", version), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesEdgeZoneClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesEdgeZoneClient) GetResponder(resp *http.Response) (result VirtualMachineImage, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all virtual machine image versions for the specified location, edge zone, publisher, offer, and +// SKU. +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +// skus - a valid image SKU. +// expand - the expand expression to apply on the operation. +// top - an integer value specifying the number of images to return that matches supplied values. +// orderby - specifies the order of the results returned. Formatted as an OData query. +func (client VirtualMachineImagesEdgeZoneClient) List(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, location, edgeZone, publisherName, offer, skus, expand, top, orderby) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineImagesEdgeZoneClient) ListPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "skus": autorest.Encode("path", skus), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(orderby) > 0 { + queryParameters["$orderby"] = autorest.Encode("query", orderby) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesEdgeZoneClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesEdgeZoneClient) ListResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListOffers gets a list of virtual machine image offers for the specified location, edge zone and publisher. +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +// publisherName - a valid image publisher. +func (client VirtualMachineImagesEdgeZoneClient) ListOffers(ctx context.Context, location string, edgeZone string, publisherName string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListOffers") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListOffersPreparer(ctx, location, edgeZone, publisherName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", nil, "Failure preparing request") + return + } + + resp, err := client.ListOffersSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", resp, "Failure sending request") + return + } + + result, err = client.ListOffersResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", resp, "Failure responding to request") + return + } + + return +} + +// ListOffersPreparer prepares the ListOffers request. +func (client VirtualMachineImagesEdgeZoneClient) ListOffersPreparer(ctx context.Context, location string, edgeZone string, publisherName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListOffersSender sends the ListOffers request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesEdgeZoneClient) ListOffersSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListOffersResponder handles the response to the ListOffers request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesEdgeZoneClient) ListOffersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListPublishers gets a list of virtual machine image publishers for the specified Azure location and edge zone. +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +func (client VirtualMachineImagesEdgeZoneClient) ListPublishers(ctx context.Context, location string, edgeZone string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListPublishers") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPublishersPreparer(ctx, location, edgeZone) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", nil, "Failure preparing request") + return + } + + resp, err := client.ListPublishersSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", resp, "Failure sending request") + return + } + + result, err = client.ListPublishersResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", resp, "Failure responding to request") + return + } + + return +} + +// ListPublishersPreparer prepares the ListPublishers request. +func (client VirtualMachineImagesEdgeZoneClient) ListPublishersPreparer(ctx context.Context, location string, edgeZone string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListPublishersSender sends the ListPublishers request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesEdgeZoneClient) ListPublishersSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListPublishersResponder handles the response to the ListPublishers request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesEdgeZoneClient) ListPublishersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListSkus gets a list of virtual machine image SKUs for the specified location, edge zone, publisher, and offer. +// Parameters: +// location - the name of a supported Azure region. +// edgeZone - the name of the edge zone. +// publisherName - a valid image publisher. +// offer - a valid image publisher offer. +func (client VirtualMachineImagesEdgeZoneClient) ListSkus(ctx context.Context, location string, edgeZone string, publisherName string, offer string) (result ListVirtualMachineImageResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListSkus") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListSkusPreparer(ctx, location, edgeZone, publisherName, offer) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", nil, "Failure preparing request") + return + } + + resp, err := client.ListSkusSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", resp, "Failure sending request") + return + } + + result, err = client.ListSkusResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", resp, "Failure responding to request") + return + } + + return +} + +// ListSkusPreparer prepares the ListSkus request. +func (client VirtualMachineImagesEdgeZoneClient) ListSkusPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "edgeZone": autorest.Encode("path", edgeZone), + "location": autorest.Encode("path", location), + "offer": autorest.Encode("path", offer), + "publisherName": autorest.Encode("path", publisherName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSkusSender sends the ListSkus request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineImagesEdgeZoneClient) ListSkusSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListSkusResponder handles the response to the ListSkus request. The method always +// closes the http.Response Body. +func (client VirtualMachineImagesEdgeZoneClient) ListSkusResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineruncommands.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineruncommands.go new file mode 100644 index 000000000000..be46b192eaf3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachineruncommands.go @@ -0,0 +1,689 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineRunCommandsClient is the compute Client +type VirtualMachineRunCommandsClient struct { + BaseClient +} + +// NewVirtualMachineRunCommandsClient creates an instance of the VirtualMachineRunCommandsClient client. +func NewVirtualMachineRunCommandsClient(subscriptionID string) VirtualMachineRunCommandsClient { + return NewVirtualMachineRunCommandsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineRunCommandsClientWithBaseURI creates an instance of the VirtualMachineRunCommandsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewVirtualMachineRunCommandsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineRunCommandsClient { + return VirtualMachineRunCommandsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update the run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the run command should be created or updated. +// runCommandName - the name of the virtual machine run command. +// runCommand - parameters supplied to the Create Virtual Machine RunCommand operation. +func (client VirtualMachineRunCommandsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommand) (result VirtualMachineRunCommandsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, runCommandName, runCommand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineRunCommandsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommand) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), + autorest.WithJSON(runCommand), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineRunCommandsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the run command should be deleted. +// runCommandName - the name of the virtual machine run command. +func (client VirtualMachineRunCommandsClient) Delete(ctx context.Context, resourceGroupName string, VMName string, runCommandName string) (result VirtualMachineRunCommandsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, runCommandName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineRunCommandsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) DeleteSender(req *http.Request) (future VirtualMachineRunCommandsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets specific run command for a subscription in a location. +// Parameters: +// location - the location upon which run commands is queried. +// commandID - the command id. +func (client VirtualMachineRunCommandsClient) Get(ctx context.Context, location string, commandID string) (result RunCommandDocument, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineRunCommandsClient", "Get", err.Error()) + } + + req, err := client.GetPreparer(ctx, location, commandID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineRunCommandsClient) GetPreparer(ctx context.Context, location string, commandID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "commandId": autorest.Encode("path", commandID), + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) GetResponder(resp *http.Response) (result RunCommandDocument, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetByVirtualMachine the operation to get the run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine containing the run command. +// runCommandName - the name of the virtual machine run command. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineRunCommandsClient) GetByVirtualMachine(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, expand string) (result VirtualMachineRunCommand, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.GetByVirtualMachine") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetByVirtualMachinePreparer(ctx, resourceGroupName, VMName, runCommandName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", nil, "Failure preparing request") + return + } + + resp, err := client.GetByVirtualMachineSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", resp, "Failure sending request") + return + } + + result, err = client.GetByVirtualMachineResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", resp, "Failure responding to request") + return + } + + return +} + +// GetByVirtualMachinePreparer prepares the GetByVirtualMachine request. +func (client VirtualMachineRunCommandsClient) GetByVirtualMachinePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetByVirtualMachineSender sends the GetByVirtualMachine request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) GetByVirtualMachineSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetByVirtualMachineResponder handles the response to the GetByVirtualMachine request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) GetByVirtualMachineResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all available run commands for a subscription in a location. +// Parameters: +// location - the location upon which run commands is queried. +func (client VirtualMachineRunCommandsClient) List(ctx context.Context, location string) (result RunCommandListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.List") + defer func() { + sc := -1 + if result.rclr.Response.Response != nil { + sc = result.rclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineRunCommandsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.rclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", resp, "Failure sending request") + return + } + + result.rclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", resp, "Failure responding to request") + return + } + if result.rclr.hasNextLink() && result.rclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineRunCommandsClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) ListResponder(resp *http.Response) (result RunCommandListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachineRunCommandsClient) listNextResults(ctx context.Context, lastResults RunCommandListResult) (result RunCommandListResult, err error) { + req, err := lastResults.runCommandListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineRunCommandsClient) ListComplete(ctx context.Context, location string) (result RunCommandListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, location) + return +} + +// ListByVirtualMachine the operation to get all run commands of a Virtual Machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine containing the run command. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineRunCommandsClient) ListByVirtualMachine(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineRunCommandsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.ListByVirtualMachine") + defer func() { + sc := -1 + if result.vmrclr.Response.Response != nil { + sc = result.vmrclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByVirtualMachineNextResults + req, err := client.ListByVirtualMachinePreparer(ctx, resourceGroupName, VMName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", nil, "Failure preparing request") + return + } + + resp, err := client.ListByVirtualMachineSender(req) + if err != nil { + result.vmrclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", resp, "Failure sending request") + return + } + + result.vmrclr, err = client.ListByVirtualMachineResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", resp, "Failure responding to request") + return + } + if result.vmrclr.hasNextLink() && result.vmrclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByVirtualMachinePreparer prepares the ListByVirtualMachine request. +func (client VirtualMachineRunCommandsClient) ListByVirtualMachinePreparer(ctx context.Context, resourceGroupName string, VMName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByVirtualMachineSender sends the ListByVirtualMachine request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) ListByVirtualMachineSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByVirtualMachineResponder handles the response to the ListByVirtualMachine request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) ListByVirtualMachineResponder(resp *http.Response) (result VirtualMachineRunCommandsListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByVirtualMachineNextResults retrieves the next set of results, if any. +func (client VirtualMachineRunCommandsClient) listByVirtualMachineNextResults(ctx context.Context, lastResults VirtualMachineRunCommandsListResult) (result VirtualMachineRunCommandsListResult, err error) { + req, err := lastResults.virtualMachineRunCommandsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByVirtualMachineSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByVirtualMachineResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByVirtualMachineComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineRunCommandsClient) ListByVirtualMachineComplete(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineRunCommandsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.ListByVirtualMachine") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByVirtualMachine(ctx, resourceGroupName, VMName, expand) + return +} + +// Update the operation to update the run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine where the run command should be updated. +// runCommandName - the name of the virtual machine run command. +// runCommand - parameters supplied to the Update Virtual Machine RunCommand operation. +func (client VirtualMachineRunCommandsClient) Update(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (result VirtualMachineRunCommandsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, runCommandName, runCommand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineRunCommandsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), + autorest.WithJSON(runCommand), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineRunCommandsClient) UpdateSender(req *http.Request) (future VirtualMachineRunCommandsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineRunCommandsClient) UpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachines.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachines.go new file mode 100644 index 000000000000..d9c7043e7b37 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachines.go @@ -0,0 +1,2205 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachinesClient is the compute Client +type VirtualMachinesClient struct { + BaseClient +} + +// NewVirtualMachinesClient creates an instance of the VirtualMachinesClient client. +func NewVirtualMachinesClient(subscriptionID string) VirtualMachinesClient { + return NewVirtualMachinesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachinesClientWithBaseURI creates an instance of the VirtualMachinesClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVirtualMachinesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachinesClient { + return VirtualMachinesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// AssessPatches assess patches on the VM. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) AssessPatches(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesAssessPatchesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.AssessPatches") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.AssessPatchesPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "AssessPatches", nil, "Failure preparing request") + return + } + + result, err = client.AssessPatchesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "AssessPatches", result.Response(), "Failure sending request") + return + } + + return +} + +// AssessPatchesPreparer prepares the AssessPatches request. +func (client VirtualMachinesClient) AssessPatchesPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// AssessPatchesSender sends the AssessPatches request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) AssessPatchesSender(req *http.Request) (future VirtualMachinesAssessPatchesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// AssessPatchesResponder handles the response to the AssessPatches request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) AssessPatchesResponder(resp *http.Response) (result VirtualMachineAssessPatchesResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Capture captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create +// similar VMs. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// parameters - parameters supplied to the Capture Virtual Machine operation. +func (client VirtualMachinesClient) Capture(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineCaptureParameters) (result VirtualMachinesCaptureFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Capture") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.VhdPrefix", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.DestinationContainerName", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.OverwriteVhds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachinesClient", "Capture", err.Error()) + } + + req, err := client.CapturePreparer(ctx, resourceGroupName, VMName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Capture", nil, "Failure preparing request") + return + } + + result, err = client.CaptureSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Capture", result.Response(), "Failure sending request") + return + } + + return +} + +// CapturePreparer prepares the Capture request. +func (client VirtualMachinesClient) CapturePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineCaptureParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CaptureSender sends the Capture request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) CaptureSender(req *http.Request) (future VirtualMachinesCaptureFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CaptureResponder handles the response to the Capture request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) CaptureResponder(resp *http.Response) (result VirtualMachineCaptureResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ConvertToManagedDisks converts virtual machine disks from blob-based to managed disks. Virtual machine must be +// stop-deallocated before invoking this operation. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) ConvertToManagedDisks(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesConvertToManagedDisksFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ConvertToManagedDisks") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ConvertToManagedDisksPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ConvertToManagedDisks", nil, "Failure preparing request") + return + } + + result, err = client.ConvertToManagedDisksSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ConvertToManagedDisks", result.Response(), "Failure sending request") + return + } + + return +} + +// ConvertToManagedDisksPreparer prepares the ConvertToManagedDisks request. +func (client VirtualMachinesClient) ConvertToManagedDisksPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ConvertToManagedDisksSender sends the ConvertToManagedDisks request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ConvertToManagedDisksSender(req *http.Request) (future VirtualMachinesConvertToManagedDisksFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ConvertToManagedDisksResponder handles the response to the ConvertToManagedDisks request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ConvertToManagedDisksResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// CreateOrUpdate the operation to create or update a virtual machine. Please note some properties can be set only +// during virtual machine creation. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// parameters - parameters supplied to the Create Virtual Machine operation. +func (client VirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachine) (result VirtualMachinesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachinesClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachinesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachine) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.Resources = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachinesCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachine, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Deallocate shuts down the virtual machine and releases the compute resources. You are not billed for the compute +// resources that this virtual machine uses. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// hibernate - optional parameter to hibernate a virtual machine. (Feature in Preview) +func (client VirtualMachinesClient) Deallocate(ctx context.Context, resourceGroupName string, VMName string, hibernate *bool) (result VirtualMachinesDeallocateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Deallocate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMName, hibernate) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Deallocate", nil, "Failure preparing request") + return + } + + result, err = client.DeallocateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Deallocate", result.Response(), "Failure sending request") + return + } + + return +} + +// DeallocatePreparer prepares the Deallocate request. +func (client VirtualMachinesClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMName string, hibernate *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if hibernate != nil { + queryParameters["hibernate"] = autorest.Encode("query", *hibernate) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeallocateSender sends the Deallocate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) DeallocateSender(req *http.Request) (future VirtualMachinesDeallocateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeallocateResponder handles the response to the Deallocate request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Delete the operation to delete a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// forceDeletion - optional parameter to force delete virtual machines. +func (client VirtualMachinesClient) Delete(ctx context.Context, resourceGroupName string, VMName string, forceDeletion *bool) (result VirtualMachinesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, forceDeletion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachinesClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, forceDeletion *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if forceDeletion != nil { + queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) DeleteSender(req *http.Request) (future VirtualMachinesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Generalize sets the OS state of the virtual machine to generalized. It is recommended to sysprep the virtual machine +// before performing this operation.
    For Windows, please refer to [Create a managed image of a generalized VM in +// Azure](https://docs.microsoft.com/azure/virtual-machines/windows/capture-image-resource).
    For Linux, please refer +// to [How to create an image of a virtual machine or +// VHD](https://docs.microsoft.com/azure/virtual-machines/linux/capture-image). +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) Generalize(ctx context.Context, resourceGroupName string, VMName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Generalize") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GeneralizePreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", nil, "Failure preparing request") + return + } + + resp, err := client.GeneralizeSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", resp, "Failure sending request") + return + } + + result, err = client.GeneralizeResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", resp, "Failure responding to request") + return + } + + return +} + +// GeneralizePreparer prepares the Generalize request. +func (client VirtualMachinesClient) GeneralizePreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GeneralizeSender sends the Generalize request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) GeneralizeSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GeneralizeResponder handles the response to the Generalize request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) GeneralizeResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves information about the model view or the instance view of a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// expand - the expand expression to apply on the operation. 'InstanceView' retrieves a snapshot of the runtime +// properties of the virtual machine that is managed by the platform and can change outside of control plane +// operations. 'UserData' retrieves the UserData property as part of the VM model view that was provided by the +// user during the VM Create/Update operation. +func (client VirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, VMName string, expand InstanceViewTypes) (result VirtualMachine, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachinesClient) GetPreparer(ctx context.Context, resourceGroupName string, VMName string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) GetResponder(resp *http.Response) (result VirtualMachine, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// InstallPatches installs patches on the VM. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// installPatchesInput - input for InstallPatches as directly received by the API +func (client VirtualMachinesClient) InstallPatches(ctx context.Context, resourceGroupName string, VMName string, installPatchesInput VirtualMachineInstallPatchesParameters) (result VirtualMachinesInstallPatchesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.InstallPatches") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.InstallPatchesPreparer(ctx, resourceGroupName, VMName, installPatchesInput) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstallPatches", nil, "Failure preparing request") + return + } + + result, err = client.InstallPatchesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstallPatches", result.Response(), "Failure sending request") + return + } + + return +} + +// InstallPatchesPreparer prepares the InstallPatches request. +func (client VirtualMachinesClient) InstallPatchesPreparer(ctx context.Context, resourceGroupName string, VMName string, installPatchesInput VirtualMachineInstallPatchesParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches", pathParameters), + autorest.WithJSON(installPatchesInput), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// InstallPatchesSender sends the InstallPatches request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) InstallPatchesSender(req *http.Request) (future VirtualMachinesInstallPatchesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// InstallPatchesResponder handles the response to the InstallPatches request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) InstallPatchesResponder(resp *http.Response) (result VirtualMachineInstallPatchesResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// InstanceView retrieves information about the run-time state of a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) InstanceView(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachineInstanceView, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.InstanceView") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.InstanceViewPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", nil, "Failure preparing request") + return + } + + resp, err := client.InstanceViewSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", resp, "Failure sending request") + return + } + + result, err = client.InstanceViewResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", resp, "Failure responding to request") + return + } + + return +} + +// InstanceViewPreparer prepares the InstanceView request. +func (client VirtualMachinesClient) InstanceViewPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// InstanceViewSender sends the InstanceView request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) InstanceViewSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// InstanceViewResponder handles the response to the InstanceView request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) InstanceViewResponder(resp *http.Response) (result VirtualMachineInstanceView, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to +// get the next page of virtual machines. +// Parameters: +// resourceGroupName - the name of the resource group. +// filter - the system query option to filter VMs returned in the response. Allowed value is +// 'virtualMachineScaleSet/id' eq +// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}' +func (client VirtualMachinesClient) List(ctx context.Context, resourceGroupName string, filter string) (result VirtualMachineListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.List") + defer func() { + sc := -1 + if result.vmlr.Response.Response != nil { + sc = result.vmlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.vmlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", resp, "Failure sending request") + return + } + + result.vmlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", resp, "Failure responding to request") + return + } + if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachinesClient) ListPreparer(ctx context.Context, resourceGroupName string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ListResponder(resp *http.Response) (result VirtualMachineListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachinesClient) listNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { + req, err := lastResults.virtualMachineListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachinesClient) ListComplete(ctx context.Context, resourceGroupName string, filter string) (result VirtualMachineListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, filter) + return +} + +// ListAll lists all of the virtual machines in the specified subscription. Use the nextLink property in the response +// to get the next page of virtual machines. +// Parameters: +// statusOnly - statusOnly=true enables fetching run time status of all Virtual Machines in the subscription. +// filter - the system query option to filter VMs returned in the response. Allowed value is +// 'virtualMachineScaleSet/id' eq +// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}' +func (client VirtualMachinesClient) ListAll(ctx context.Context, statusOnly string, filter string) (result VirtualMachineListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAll") + defer func() { + sc := -1 + if result.vmlr.Response.Response != nil { + sc = result.vmlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAllNextResults + req, err := client.ListAllPreparer(ctx, statusOnly, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", nil, "Failure preparing request") + return + } + + resp, err := client.ListAllSender(req) + if err != nil { + result.vmlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", resp, "Failure sending request") + return + } + + result.vmlr, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", resp, "Failure responding to request") + return + } + if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListAllPreparer prepares the ListAll request. +func (client VirtualMachinesClient) ListAllPreparer(ctx context.Context, statusOnly string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(statusOnly) > 0 { + queryParameters["statusOnly"] = autorest.Encode("query", statusOnly) + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAllSender sends the ListAll request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ListAllSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAllResponder handles the response to the ListAll request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ListAllResponder(resp *http.Response) (result VirtualMachineListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAllNextResults retrieves the next set of results, if any. +func (client VirtualMachinesClient) listAllNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { + req, err := lastResults.virtualMachineListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAllSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAllComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachinesClient) ListAllComplete(ctx context.Context, statusOnly string, filter string) (result VirtualMachineListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAll(ctx, statusOnly, filter) + return +} + +// ListAvailableSizes lists all available virtual machine sizes to which the specified virtual machine can be resized. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachineSizeListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAvailableSizes") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListAvailableSizesPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", nil, "Failure preparing request") + return + } + + resp, err := client.ListAvailableSizesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", resp, "Failure sending request") + return + } + + result, err = client.ListAvailableSizesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", resp, "Failure responding to request") + return + } + + return +} + +// ListAvailableSizesPreparer prepares the ListAvailableSizes request. +func (client VirtualMachinesClient) ListAvailableSizesPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAvailableSizesSender sends the ListAvailableSizes request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ListAvailableSizesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAvailableSizesResponder handles the response to the ListAvailableSizes request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ListAvailableSizesResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListByLocation gets all the virtual machines under the specified subscription for the specified location. +// Parameters: +// location - the location for which virtual machines under the subscription are queried. +func (client VirtualMachinesClient) ListByLocation(ctx context.Context, location string) (result VirtualMachineListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListByLocation") + defer func() { + sc := -1 + if result.vmlr.Response.Response != nil { + sc = result.vmlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachinesClient", "ListByLocation", err.Error()) + } + + result.fn = client.listByLocationNextResults + req, err := client.ListByLocationPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", nil, "Failure preparing request") + return + } + + resp, err := client.ListByLocationSender(req) + if err != nil { + result.vmlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", resp, "Failure sending request") + return + } + + result.vmlr, err = client.ListByLocationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", resp, "Failure responding to request") + return + } + if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByLocationPreparer prepares the ListByLocation request. +func (client VirtualMachinesClient) ListByLocationPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByLocationSender sends the ListByLocation request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ListByLocationSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByLocationResponder handles the response to the ListByLocation request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ListByLocationResponder(resp *http.Response) (result VirtualMachineListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByLocationNextResults retrieves the next set of results, if any. +func (client VirtualMachinesClient) listByLocationNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { + req, err := lastResults.virtualMachineListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByLocationSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByLocationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByLocationComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachinesClient) ListByLocationComplete(ctx context.Context, location string) (result VirtualMachineListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListByLocation") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByLocation(ctx, location) + return +} + +// PerformMaintenance the operation to perform maintenance on a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesPerformMaintenanceFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.PerformMaintenance") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PerformMaintenance", nil, "Failure preparing request") + return + } + + result, err = client.PerformMaintenanceSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PerformMaintenance", result.Response(), "Failure sending request") + return + } + + return +} + +// PerformMaintenancePreparer prepares the PerformMaintenance request. +func (client VirtualMachinesClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachinesPerformMaintenanceFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// PowerOff the operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same +// provisioned resources. You are still charged for this virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates +// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not +// specified +func (client VirtualMachinesClient) PowerOff(ctx context.Context, resourceGroupName string, VMName string, skipShutdown *bool) (result VirtualMachinesPowerOffFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.PowerOff") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMName, skipShutdown) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PowerOff", nil, "Failure preparing request") + return + } + + result, err = client.PowerOffSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PowerOff", result.Response(), "Failure sending request") + return + } + + return +} + +// PowerOffPreparer prepares the PowerOff request. +func (client VirtualMachinesClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMName string, skipShutdown *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if skipShutdown != nil { + queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) + } else { + queryParameters["skipShutdown"] = autorest.Encode("query", false) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PowerOffSender sends the PowerOff request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) PowerOffSender(req *http.Request) (future VirtualMachinesPowerOffFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PowerOffResponder handles the response to the PowerOff request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reapply the operation to reapply a virtual machine's state. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) Reapply(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesReapplyFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Reapply") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReapplyPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reapply", nil, "Failure preparing request") + return + } + + result, err = client.ReapplySender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reapply", result.Response(), "Failure sending request") + return + } + + return +} + +// ReapplyPreparer prepares the Reapply request. +func (client VirtualMachinesClient) ReapplyPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReapplySender sends the Reapply request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ReapplySender(req *http.Request) (future VirtualMachinesReapplyFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReapplyResponder handles the response to the Reapply request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ReapplyResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Redeploy shuts down the virtual machine, moves it to a new node, and powers it back on. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) Redeploy(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesRedeployFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Redeploy") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RedeployPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Redeploy", nil, "Failure preparing request") + return + } + + result, err = client.RedeploySender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Redeploy", result.Response(), "Failure sending request") + return + } + + return +} + +// RedeployPreparer prepares the Redeploy request. +func (client VirtualMachinesClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RedeploySender sends the Redeploy request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) RedeploySender(req *http.Request) (future VirtualMachinesRedeployFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RedeployResponder handles the response to the Redeploy request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reimage reimages the virtual machine which has an ephemeral OS disk back to its initial state. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// parameters - parameters supplied to the Reimage Virtual Machine operation. +func (client VirtualMachinesClient) Reimage(ctx context.Context, resourceGroupName string, VMName string, parameters *VirtualMachineReimageParameters) (result VirtualMachinesReimageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Reimage") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimagePreparer(ctx, resourceGroupName, VMName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reimage", nil, "Failure preparing request") + return + } + + result, err = client.ReimageSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reimage", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimagePreparer prepares the Reimage request. +func (client VirtualMachinesClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters *VirtualMachineReimageParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if parameters != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(parameters)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageSender sends the Reimage request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) ReimageSender(req *http.Request) (future VirtualMachinesReimageFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageResponder handles the response to the Reimage request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Restart the operation to restart a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) Restart(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RestartPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client VirtualMachinesClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) RestartSender(req *http.Request) (future VirtualMachinesRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// RetrieveBootDiagnosticsData the operation to retrieve SAS URIs for a virtual machine's boot diagnostic logs. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// sasURIExpirationTimeInMinutes - expiration duration in minutes for the SAS URIs with a value between 1 to +// 1440 minutes.

    NOTE: If not specified, SAS URIs will be generated with a default expiration duration +// of 120 minutes. +func (client VirtualMachinesClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, VMName string, sasURIExpirationTimeInMinutes *int32) (result RetrieveBootDiagnosticsDataResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.RetrieveBootDiagnosticsData") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RetrieveBootDiagnosticsDataPreparer(ctx, resourceGroupName, VMName, sasURIExpirationTimeInMinutes) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", nil, "Failure preparing request") + return + } + + resp, err := client.RetrieveBootDiagnosticsDataSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", resp, "Failure sending request") + return + } + + result, err = client.RetrieveBootDiagnosticsDataResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", resp, "Failure responding to request") + return + } + + return +} + +// RetrieveBootDiagnosticsDataPreparer prepares the RetrieveBootDiagnosticsData request. +func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataPreparer(ctx context.Context, resourceGroupName string, VMName string, sasURIExpirationTimeInMinutes *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if sasURIExpirationTimeInMinutes != nil { + queryParameters["sasUriExpirationTimeInMinutes"] = autorest.Encode("query", *sasURIExpirationTimeInMinutes) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RetrieveBootDiagnosticsDataSender sends the RetrieveBootDiagnosticsData request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// RetrieveBootDiagnosticsDataResponder handles the response to the RetrieveBootDiagnosticsData request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataResponder(resp *http.Response) (result RetrieveBootDiagnosticsDataResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// RunCommand run command on the VM. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// parameters - parameters supplied to the Run command operation. +func (client VirtualMachinesClient) RunCommand(ctx context.Context, resourceGroupName string, VMName string, parameters RunCommandInput) (result VirtualMachinesRunCommandFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.RunCommand") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.CommandID", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachinesClient", "RunCommand", err.Error()) + } + + req, err := client.RunCommandPreparer(ctx, resourceGroupName, VMName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RunCommand", nil, "Failure preparing request") + return + } + + result, err = client.RunCommandSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RunCommand", result.Response(), "Failure sending request") + return + } + + return +} + +// RunCommandPreparer prepares the RunCommand request. +func (client VirtualMachinesClient) RunCommandPreparer(ctx context.Context, resourceGroupName string, VMName string, parameters RunCommandInput) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RunCommandSender sends the RunCommand request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) RunCommandSender(req *http.Request) (future VirtualMachinesRunCommandFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RunCommandResponder handles the response to the RunCommand request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) RunCommandResponder(resp *http.Response) (result RunCommandResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// SimulateEviction the operation to simulate the eviction of spot virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) SimulateEviction(ctx context.Context, resourceGroupName string, VMName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.SimulateEviction") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.SimulateEvictionPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", nil, "Failure preparing request") + return + } + + resp, err := client.SimulateEvictionSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", resp, "Failure sending request") + return + } + + result, err = client.SimulateEvictionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", resp, "Failure responding to request") + return + } + + return +} + +// SimulateEvictionPreparer prepares the SimulateEviction request. +func (client VirtualMachinesClient) SimulateEvictionPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// SimulateEvictionSender sends the SimulateEviction request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) SimulateEvictionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// SimulateEvictionResponder handles the response to the SimulateEviction request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) SimulateEvictionResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Start the operation to start a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +func (client VirtualMachinesClient) Start(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesStartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Start") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartPreparer(ctx, resourceGroupName, VMName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Start", nil, "Failure preparing request") + return + } + + result, err = client.StartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Start", result.Response(), "Failure sending request") + return + } + + return +} + +// StartPreparer prepares the Start request. +func (client VirtualMachinesClient) StartPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartSender sends the Start request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) StartSender(req *http.Request) (future VirtualMachinesStartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartResponder handles the response to the Start request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update the operation to update a virtual machine. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMName - the name of the virtual machine. +// parameters - parameters supplied to the Update Virtual Machine operation. +func (client VirtualMachinesClient) Update(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineUpdate) (result VirtualMachinesUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachinesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmName": autorest.Encode("path", VMName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachinesClient) UpdateSender(req *http.Request) (future VirtualMachinesUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachinesClient) UpdateResponder(resp *http.Response) (result VirtualMachine, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetextensions.go new file mode 100644 index 000000000000..d790ab51784f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetextensions.go @@ -0,0 +1,495 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetExtensionsClient is the compute Client +type VirtualMachineScaleSetExtensionsClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetExtensionsClient creates an instance of the VirtualMachineScaleSetExtensionsClient client. +func NewVirtualMachineScaleSetExtensionsClient(subscriptionID string) VirtualMachineScaleSetExtensionsClient { + return NewVirtualMachineScaleSetExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetExtensionsClientWithBaseURI creates an instance of the +// VirtualMachineScaleSetExtensionsClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVirtualMachineScaleSetExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetExtensionsClient { + return VirtualMachineScaleSetExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update an extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set where the extension should be create or updated. +// vmssExtensionName - the name of the VM scale set extension. +// extensionParameters - parameters supplied to the Create VM scale set Extension operation. +func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (result VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: extensionParameters, + Constraints: []validation.Constraint{{Target: "extensionParameters.VirtualMachineScaleSetExtensionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineScaleSetExtensionProperties.ProtectedSettingsFromKeyVault", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineScaleSetExtensionProperties.ProtectedSettingsFromKeyVault.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "extensionParameters.VirtualMachineScaleSetExtensionProperties.ProtectedSettingsFromKeyVault.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + "vmssExtensionName": autorest.Encode("path", vmssExtensionName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + extensionParameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set where the extension should be deleted. +// vmssExtensionName - the name of the VM scale set extension. +func (client VirtualMachineScaleSetExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (result VirtualMachineScaleSetExtensionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineScaleSetExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + "vmssExtensionName": autorest.Encode("path", vmssExtensionName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetExtensionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set containing the extension. +// vmssExtensionName - the name of the VM scale set extension. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineScaleSetExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (result VirtualMachineScaleSetExtension, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineScaleSetExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + "vmssExtensionName": autorest.Encode("path", vmssExtensionName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all extensions in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set containing the extension. +func (client VirtualMachineScaleSetExtensionsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List") + defer func() { + sc := -1 + if result.vmsselr.Response.Response != nil { + sc = result.vmsselr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.vmsselr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure sending request") + return + } + + result.vmsselr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure responding to request") + return + } + if result.vmsselr.hasNextLink() && result.vmsselr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineScaleSetExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetExtensionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetExtensionsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetExtensionListResult) (result VirtualMachineScaleSetExtensionListResult, err error) { + req, err := lastResults.virtualMachineScaleSetExtensionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetExtensionsClient) ListComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, VMScaleSetName) + return +} + +// Update the operation to update an extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set where the extension should be updated. +// vmssExtensionName - the name of the VM scale set extension. +// extensionParameters - parameters supplied to the Update VM scale set Extension operation. +func (client VirtualMachineScaleSetExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (result VirtualMachineScaleSetExtensionsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineScaleSetExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + "vmssExtensionName": autorest.Encode("path", vmssExtensionName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + extensionParameters.Name = nil + extensionParameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetrollingupgrades.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetrollingupgrades.go new file mode 100644 index 000000000000..f1fe61962208 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetrollingupgrades.go @@ -0,0 +1,346 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetRollingUpgradesClient is the compute Client +type VirtualMachineScaleSetRollingUpgradesClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetRollingUpgradesClient creates an instance of the +// VirtualMachineScaleSetRollingUpgradesClient client. +func NewVirtualMachineScaleSetRollingUpgradesClient(subscriptionID string) VirtualMachineScaleSetRollingUpgradesClient { + return NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI creates an instance of the +// VirtualMachineScaleSetRollingUpgradesClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetRollingUpgradesClient { + return VirtualMachineScaleSetRollingUpgradesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Cancel cancels the current virtual machine scale set rolling upgrade. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetRollingUpgradesClient) Cancel(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesCancelFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.Cancel") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CancelPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "Cancel", nil, "Failure preparing request") + return + } + + result, err = client.CancelSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "Cancel", result.Response(), "Failure sending request") + return + } + + return +} + +// CancelPreparer prepares the Cancel request. +func (client VirtualMachineScaleSetRollingUpgradesClient) CancelPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CancelSender sends the Cancel request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetRollingUpgradesClient) CancelSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesCancelFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CancelResponder handles the response to the Cancel request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetRollingUpgradesClient) CancelResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// GetLatest gets the status of the latest virtual machine scale set rolling upgrade. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatest(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result RollingUpgradeStatusInfo, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.GetLatest") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetLatestPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", nil, "Failure preparing request") + return + } + + resp, err := client.GetLatestSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", resp, "Failure sending request") + return + } + + result, err = client.GetLatestResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", resp, "Failure responding to request") + return + } + + return +} + +// GetLatestPreparer prepares the GetLatest request. +func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetLatestSender sends the GetLatest request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetLatestResponder handles the response to the GetLatest request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestResponder(resp *http.Response) (result RollingUpgradeStatusInfo, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// StartExtensionUpgrade starts a rolling upgrade to move all extensions for all virtual machine scale set instances to +// the latest available extension version. Instances which are already running the latest extension versions are not +// affected. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgrade(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.StartExtensionUpgrade") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartExtensionUpgradePreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartExtensionUpgrade", nil, "Failure preparing request") + return + } + + result, err = client.StartExtensionUpgradeSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartExtensionUpgrade", result.Response(), "Failure sending request") + return + } + + return +} + +// StartExtensionUpgradePreparer prepares the StartExtensionUpgrade request. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartExtensionUpgradeSender sends the StartExtensionUpgrade request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradeSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartExtensionUpgradeResponder handles the response to the StartExtensionUpgrade request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradeResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// StartOSUpgrade starts a rolling upgrade to move all virtual machine scale set instances to the latest available +// Platform Image OS version. Instances which are already running the latest available OS version are not affected. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgrade(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.StartOSUpgrade") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartOSUpgradePreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartOSUpgrade", nil, "Failure preparing request") + return + } + + result, err = client.StartOSUpgradeSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartOSUpgrade", result.Response(), "Failure sending request") + return + } + + return +} + +// StartOSUpgradePreparer prepares the StartOSUpgrade request. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartOSUpgradeSender sends the StartOSUpgrade request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradeSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartOSUpgradeResponder handles the response to the StartOSUpgrade request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradeResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesets.go new file mode 100644 index 000000000000..6d0f4c523e11 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesets.go @@ -0,0 +1,2170 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetsClient is the compute Client +type VirtualMachineScaleSetsClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetsClient creates an instance of the VirtualMachineScaleSetsClient client. +func NewVirtualMachineScaleSetsClient(subscriptionID string) VirtualMachineScaleSetsClient { + return NewVirtualMachineScaleSetsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetsClientWithBaseURI creates an instance of the VirtualMachineScaleSetsClient client using a +// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, +// Azure stack). +func NewVirtualMachineScaleSetsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetsClient { + return VirtualMachineScaleSetsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// ConvertToSinglePlacementGroup converts SinglePlacementGroup property to false for a existing virtual machine scale +// set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the virtual machine scale set to create or update. +// parameters - the input object for ConvertToSinglePlacementGroup API. +func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroup(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VMScaleSetConvertToSinglePlacementGroupInput) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ConvertToSinglePlacementGroup") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ConvertToSinglePlacementGroupPreparer(ctx, resourceGroupName, VMScaleSetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", nil, "Failure preparing request") + return + } + + resp, err := client.ConvertToSinglePlacementGroupSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", resp, "Failure sending request") + return + } + + result, err = client.ConvertToSinglePlacementGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", resp, "Failure responding to request") + return + } + + return +} + +// ConvertToSinglePlacementGroupPreparer prepares the ConvertToSinglePlacementGroup request. +func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VMScaleSetConvertToSinglePlacementGroupInput) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ConvertToSinglePlacementGroupSender sends the ConvertToSinglePlacementGroup request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ConvertToSinglePlacementGroupResponder handles the response to the ConvertToSinglePlacementGroup request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.Response = resp + return +} + +// CreateOrUpdate create or update a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set to create or update. +// parameters - the scale set object. +func (client VirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSet) (result VirtualMachineScaleSetsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(5), Chain: nil}, + }}, + {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(5), Chain: nil}, + }}, + {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, + }}, + }}, + }}, + {Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy.BaseRegularPriorityCount", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy.BaseRegularPriorityCount", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, + {Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy.RegularPriorityPercentageAboveBase", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy.RegularPriorityPercentageAboveBase", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetProperties.PriorityMixPolicy.RegularPriorityPercentageAboveBase", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineScaleSetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSet) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Deallocate deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and releases the +// compute resources. You are not billed for the compute resources that this virtual machine scale set deallocates. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) Deallocate(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsDeallocateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Deallocate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Deallocate", nil, "Failure preparing request") + return + } + + result, err = client.DeallocateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Deallocate", result.Response(), "Failure sending request") + return + } + + return +} + +// DeallocatePreparer prepares the Deallocate request. +func (client VirtualMachineScaleSetsClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeallocateSender sends the Deallocate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) DeallocateSender(req *http.Request) (future VirtualMachineScaleSetsDeallocateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeallocateResponder handles the response to the Deallocate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Delete deletes a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// forceDeletion - optional parameter to force delete a VM scale set. (Feature in Preview) +func (client VirtualMachineScaleSetsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, forceDeletion *bool) (result VirtualMachineScaleSetsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, forceDeletion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineScaleSetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, forceDeletion *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if forceDeletion != nil { + queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// DeleteInstances deletes virtual machines in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +// forceDeletion - optional parameter to force delete virtual machines from the VM scale set. (Feature in +// Preview) +func (client VirtualMachineScaleSetsClient) DeleteInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs, forceDeletion *bool) (result VirtualMachineScaleSetsDeleteInstancesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.DeleteInstances") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: VMInstanceIDs, + Constraints: []validation.Constraint{{Target: "VMInstanceIDs.InstanceIds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "DeleteInstances", err.Error()) + } + + req, err := client.DeleteInstancesPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs, forceDeletion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "DeleteInstances", nil, "Failure preparing request") + return + } + + result, err = client.DeleteInstancesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "DeleteInstances", result.Response(), "Failure sending request") + return + } + + return +} + +// DeleteInstancesPreparer prepares the DeleteInstances request. +func (client VirtualMachineScaleSetsClient) DeleteInstancesPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs, forceDeletion *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if forceDeletion != nil { + queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", pathParameters), + autorest.WithJSON(VMInstanceIDs), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteInstancesSender sends the DeleteInstances request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) DeleteInstancesSender(req *http.Request) (future VirtualMachineScaleSetsDeleteInstancesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteInstancesResponder handles the response to the DeleteInstances request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) DeleteInstancesResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// ForceRecoveryServiceFabricPlatformUpdateDomainWalk manual platform update domain walk to update virtual machines in +// a service fabric virtual machine scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// platformUpdateDomain - the platform update domain for which a manual recovery walk is requested +// zone - the zone in which the manual recovery walk is requested for cross zone virtual machine scale set +// placementGroupID - the placement group id for which the manual recovery walk is requested. +func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalk(ctx context.Context, resourceGroupName string, VMScaleSetName string, platformUpdateDomain int32, zone string, placementGroupID string) (result RecoveryWalkResponse, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ForceRecoveryServiceFabricPlatformUpdateDomainWalk") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer(ctx, resourceGroupName, VMScaleSetName, platformUpdateDomain, zone, placementGroupID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", nil, "Failure preparing request") + return + } + + resp, err := client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", resp, "Failure sending request") + return + } + + result, err = client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", resp, "Failure responding to request") + return + } + + return +} + +// ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer prepares the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. +func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, platformUpdateDomain int32, zone string, placementGroupID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + "platformUpdateDomain": autorest.Encode("query", platformUpdateDomain), + } + if len(zone) > 0 { + queryParameters["zone"] = autorest.Encode("query", zone) + } + if len(placementGroupID) > 0 { + queryParameters["placementGroupId"] = autorest.Encode("query", placementGroupID) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender sends the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder handles the response to the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder(resp *http.Response) (result RecoveryWalkResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Get display information about a virtual machine scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// expand - the expand expression to apply on the operation. 'UserData' retrieves the UserData property of the +// VM scale set that was provided by the user during the VM scale set Create/Update operation +func (client VirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, expand ExpandTypesForGetVMScaleSets) (result VirtualMachineScaleSet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineScaleSetsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, expand ExpandTypesForGetVMScaleSets) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetInstanceView gets the status of a VM scale set instance. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetInstanceView, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetInstanceView") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", nil, "Failure preparing request") + return + } + + resp, err := client.GetInstanceViewSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", resp, "Failure sending request") + return + } + + result, err = client.GetInstanceViewResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", resp, "Failure responding to request") + return + } + + return +} + +// GetInstanceViewPreparer prepares the GetInstanceView request. +func (client VirtualMachineScaleSetsClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetInstanceViewSender sends the GetInstanceView request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) GetInstanceViewResponder(resp *http.Response) (result VirtualMachineScaleSetInstanceView, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetOSUpgradeHistory gets list of OS upgrades on a VM scale set instance. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistory(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListOSUpgradeHistoryPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetOSUpgradeHistory") + defer func() { + sc := -1 + if result.vmsslouh.Response.Response != nil { + sc = result.vmsslouh.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.getOSUpgradeHistoryNextResults + req, err := client.GetOSUpgradeHistoryPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", nil, "Failure preparing request") + return + } + + resp, err := client.GetOSUpgradeHistorySender(req) + if err != nil { + result.vmsslouh.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", resp, "Failure sending request") + return + } + + result.vmsslouh, err = client.GetOSUpgradeHistoryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", resp, "Failure responding to request") + return + } + if result.vmsslouh.hasNextLink() && result.vmsslouh.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// GetOSUpgradeHistoryPreparer prepares the GetOSUpgradeHistory request. +func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetOSUpgradeHistorySender sends the GetOSUpgradeHistory request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistorySender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetOSUpgradeHistoryResponder handles the response to the GetOSUpgradeHistory request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryResponder(resp *http.Response) (result VirtualMachineScaleSetListOSUpgradeHistory, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// getOSUpgradeHistoryNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetsClient) getOSUpgradeHistoryNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListOSUpgradeHistory) (result VirtualMachineScaleSetListOSUpgradeHistory, err error) { + req, err := lastResults.virtualMachineScaleSetListOSUpgradeHistoryPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.GetOSUpgradeHistorySender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", resp, "Failure sending next results request") + } + result, err = client.GetOSUpgradeHistoryResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", resp, "Failure responding to next results request") + } + return +} + +// GetOSUpgradeHistoryComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListOSUpgradeHistoryIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetOSUpgradeHistory") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.GetOSUpgradeHistory(ctx, resourceGroupName, VMScaleSetName) + return +} + +// List gets a list of all VM scale sets under a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client VirtualMachineScaleSetsClient) List(ctx context.Context, resourceGroupName string) (result VirtualMachineScaleSetListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.List") + defer func() { + sc := -1 + if result.vmsslr.Response.Response != nil { + sc = result.vmsslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.vmsslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", resp, "Failure sending request") + return + } + + result.vmsslr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", resp, "Failure responding to request") + return + } + if result.vmsslr.hasNextLink() && result.vmsslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineScaleSetsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListResult) (result VirtualMachineScaleSetListResult, err error) { + req, err := lastResults.virtualMachineScaleSetListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetsClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualMachineScaleSetListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName) + return +} + +// ListAll gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. Use +// nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink is null to fetch all +// the VM Scale Sets. +func (client VirtualMachineScaleSetsClient) ListAll(ctx context.Context) (result VirtualMachineScaleSetListWithLinkResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListAll") + defer func() { + sc := -1 + if result.vmsslwlr.Response.Response != nil { + sc = result.vmsslwlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAllNextResults + req, err := client.ListAllPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", nil, "Failure preparing request") + return + } + + resp, err := client.ListAllSender(req) + if err != nil { + result.vmsslwlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", resp, "Failure sending request") + return + } + + result.vmsslwlr, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", resp, "Failure responding to request") + return + } + if result.vmsslwlr.hasNextLink() && result.vmsslwlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListAllPreparer prepares the ListAll request. +func (client VirtualMachineScaleSetsClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAllSender sends the ListAll request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ListAllSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListAllResponder handles the response to the ListAll request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ListAllResponder(resp *http.Response) (result VirtualMachineScaleSetListWithLinkResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAllNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetsClient) listAllNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListWithLinkResult) (result VirtualMachineScaleSetListWithLinkResult, err error) { + req, err := lastResults.virtualMachineScaleSetListWithLinkResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAllSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAllComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetsClient) ListAllComplete(ctx context.Context) (result VirtualMachineScaleSetListWithLinkResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAll(ctx) + return +} + +// ListByLocation gets all the VM scale sets under the specified subscription for the specified location. +// Parameters: +// location - the location for which VM scale sets under the subscription are queried. +func (client VirtualMachineScaleSetsClient) ListByLocation(ctx context.Context, location string) (result VirtualMachineScaleSetListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListByLocation") + defer func() { + sc := -1 + if result.vmsslr.Response.Response != nil { + sc = result.vmsslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "ListByLocation", err.Error()) + } + + result.fn = client.listByLocationNextResults + req, err := client.ListByLocationPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", nil, "Failure preparing request") + return + } + + resp, err := client.ListByLocationSender(req) + if err != nil { + result.vmsslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", resp, "Failure sending request") + return + } + + result.vmsslr, err = client.ListByLocationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", resp, "Failure responding to request") + return + } + if result.vmsslr.hasNextLink() && result.vmsslr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListByLocationPreparer prepares the ListByLocation request. +func (client VirtualMachineScaleSetsClient) ListByLocationPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachineScaleSets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByLocationSender sends the ListByLocation request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ListByLocationSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListByLocationResponder handles the response to the ListByLocation request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ListByLocationResponder(resp *http.Response) (result VirtualMachineScaleSetListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByLocationNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetsClient) listByLocationNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListResult) (result VirtualMachineScaleSetListResult, err error) { + req, err := lastResults.virtualMachineScaleSetListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByLocationSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByLocationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByLocationComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetsClient) ListByLocationComplete(ctx context.Context, location string) (result VirtualMachineScaleSetListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListByLocation") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByLocation(ctx, location) + return +} + +// ListSkus gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances allowed +// for each SKU. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +func (client VirtualMachineScaleSetsClient) ListSkus(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListSkusResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListSkus") + defer func() { + sc := -1 + if result.vmsslsr.Response.Response != nil { + sc = result.vmsslsr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listSkusNextResults + req, err := client.ListSkusPreparer(ctx, resourceGroupName, VMScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", nil, "Failure preparing request") + return + } + + resp, err := client.ListSkusSender(req) + if err != nil { + result.vmsslsr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", resp, "Failure sending request") + return + } + + result.vmsslsr, err = client.ListSkusResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", resp, "Failure responding to request") + return + } + if result.vmsslsr.hasNextLink() && result.vmsslsr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListSkusPreparer prepares the ListSkus request. +func (client VirtualMachineScaleSetsClient) ListSkusPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSkusSender sends the ListSkus request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ListSkusSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListSkusResponder handles the response to the ListSkus request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ListSkusResponder(resp *http.Response) (result VirtualMachineScaleSetListSkusResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listSkusNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetsClient) listSkusNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListSkusResult) (result VirtualMachineScaleSetListSkusResult, err error) { + req, err := lastResults.virtualMachineScaleSetListSkusResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSkusSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", resp, "Failure sending next results request") + } + result, err = client.ListSkusResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListSkusComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetsClient) ListSkusComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListSkusResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListSkus") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListSkus(ctx, resourceGroupName, VMScaleSetName) + return +} + +// PerformMaintenance perform maintenance on one or more virtual machines in a VM scale set. Operation on instances +// which are not eligible for perform maintenance will be failed. Please refer to best practices for more details: +// https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsPerformMaintenanceFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.PerformMaintenance") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PerformMaintenance", nil, "Failure preparing request") + return + } + + result, err = client.PerformMaintenanceSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PerformMaintenance", result.Response(), "Failure sending request") + return + } + + return +} + +// PerformMaintenancePreparer prepares the PerformMaintenance request. +func (client VirtualMachineScaleSetsClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachineScaleSetsPerformMaintenanceFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// PowerOff power off (stop) one or more virtual machines in a VM scale set. Note that resources are still attached and +// you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates +// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not +// specified +func (client VirtualMachineScaleSetsClient) PowerOff(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs, skipShutdown *bool) (result VirtualMachineScaleSetsPowerOffFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.PowerOff") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs, skipShutdown) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PowerOff", nil, "Failure preparing request") + return + } + + result, err = client.PowerOffSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PowerOff", result.Response(), "Failure sending request") + return + } + + return +} + +// PowerOffPreparer prepares the PowerOff request. +func (client VirtualMachineScaleSetsClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs, skipShutdown *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if skipShutdown != nil { + queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) + } else { + queryParameters["skipShutdown"] = autorest.Encode("query", false) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PowerOffSender sends the PowerOff request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) PowerOffSender(req *http.Request) (future VirtualMachineScaleSetsPowerOffFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PowerOffResponder handles the response to the PowerOff request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Redeploy shuts down all the virtual machines in the virtual machine scale set, moves them to a new node, and powers +// them back on. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) Redeploy(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsRedeployFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Redeploy") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RedeployPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Redeploy", nil, "Failure preparing request") + return + } + + result, err = client.RedeploySender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Redeploy", result.Response(), "Failure sending request") + return + } + + return +} + +// RedeployPreparer prepares the Redeploy request. +func (client VirtualMachineScaleSetsClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RedeploySender sends the Redeploy request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) RedeploySender(req *http.Request) (future VirtualMachineScaleSetsRedeployFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RedeployResponder handles the response to the Redeploy request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reimage reimages (upgrade the operating system) one or more virtual machines in a VM scale set which don't have a +// ephemeral OS disk, for virtual machines who have a ephemeral OS disk the virtual machine is reset to initial state. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMScaleSetReimageInput - parameters for Reimaging VM ScaleSet. +func (client VirtualMachineScaleSetsClient) Reimage(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMScaleSetReimageInput *VirtualMachineScaleSetReimageParameters) (result VirtualMachineScaleSetsReimageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Reimage") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimagePreparer(ctx, resourceGroupName, VMScaleSetName, VMScaleSetReimageInput) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Reimage", nil, "Failure preparing request") + return + } + + result, err = client.ReimageSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Reimage", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimagePreparer prepares the Reimage request. +func (client VirtualMachineScaleSetsClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMScaleSetReimageInput *VirtualMachineScaleSetReimageParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMScaleSetReimageInput != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMScaleSetReimageInput)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageSender sends the Reimage request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ReimageSender(req *http.Request) (future VirtualMachineScaleSetsReimageFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageResponder handles the response to the Reimage request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// ReimageAll reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This operation +// is only supported for managed disks. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) ReimageAll(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsReimageAllFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ReimageAll") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimageAllPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ReimageAll", nil, "Failure preparing request") + return + } + + result, err = client.ReimageAllSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ReimageAll", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimageAllPreparer prepares the ReimageAll request. +func (client VirtualMachineScaleSetsClient) ReimageAllPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageAllSender sends the ReimageAll request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) ReimageAllSender(req *http.Request) (future VirtualMachineScaleSetsReimageAllFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageAllResponder handles the response to the ReimageAll request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) ReimageAllResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Restart restarts one or more virtual machines in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) Restart(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RestartPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client VirtualMachineScaleSetsClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) RestartSender(req *http.Request) (future VirtualMachineScaleSetsRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// SetOrchestrationServiceState changes ServiceState property for a given service +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the virtual machine scale set to create or update. +// parameters - the input object for SetOrchestrationServiceState API. +func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceState(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters OrchestrationServiceStateInput) (result VirtualMachineScaleSetsSetOrchestrationServiceStateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.SetOrchestrationServiceState") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.SetOrchestrationServiceStatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "SetOrchestrationServiceState", nil, "Failure preparing request") + return + } + + result, err = client.SetOrchestrationServiceStateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "SetOrchestrationServiceState", result.Response(), "Failure sending request") + return + } + + return +} + +// SetOrchestrationServiceStatePreparer prepares the SetOrchestrationServiceState request. +func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters OrchestrationServiceStateInput) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// SetOrchestrationServiceStateSender sends the SetOrchestrationServiceState request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStateSender(req *http.Request) (future VirtualMachineScaleSetsSetOrchestrationServiceStateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// SetOrchestrationServiceStateResponder handles the response to the SetOrchestrationServiceState request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStateResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Start starts one or more virtual machines in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) Start(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsStartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Start") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Start", nil, "Failure preparing request") + return + } + + result, err = client.StartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Start", result.Response(), "Failure sending request") + return + } + + return +} + +// StartPreparer prepares the Start request. +func (client VirtualMachineScaleSetsClient) StartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMInstanceIDs != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMInstanceIDs)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartSender sends the Start request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) StartSender(req *http.Request) (future VirtualMachineScaleSetsStartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartResponder handles the response to the Start request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update update a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set to create or update. +// parameters - the scale set object. +func (client VirtualMachineScaleSetsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSetUpdate) (result VirtualMachineScaleSetsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineScaleSetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSetUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// UpdateInstances upgrades one or more virtual machines to the latest SKU set in the VM scale set model. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. +func (client VirtualMachineScaleSetsClient) UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs) (result VirtualMachineScaleSetsUpdateInstancesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.UpdateInstances") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: VMInstanceIDs, + Constraints: []validation.Constraint{{Target: "VMInstanceIDs.InstanceIds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "UpdateInstances", err.Error()) + } + + req, err := client.UpdateInstancesPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "UpdateInstances", nil, "Failure preparing request") + return + } + + result, err = client.UpdateInstancesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "UpdateInstances", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdateInstancesPreparer prepares the UpdateInstances request. +func (client VirtualMachineScaleSetsClient) UpdateInstancesPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", pathParameters), + autorest.WithJSON(VMInstanceIDs), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateInstancesSender sends the UpdateInstances request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetsClient) UpdateInstancesSender(req *http.Request) (future VirtualMachineScaleSetsUpdateInstancesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateInstancesResponder handles the response to the UpdateInstances request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetsClient) UpdateInstancesResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmextensions.go new file mode 100644 index 000000000000..72992a5458cf --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmextensions.go @@ -0,0 +1,469 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetVMExtensionsClient is the compute Client +type VirtualMachineScaleSetVMExtensionsClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetVMExtensionsClient creates an instance of the VirtualMachineScaleSetVMExtensionsClient +// client. +func NewVirtualMachineScaleSetVMExtensionsClient(subscriptionID string) VirtualMachineScaleSetVMExtensionsClient { + return NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI creates an instance of the +// VirtualMachineScaleSetVMExtensionsClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMExtensionsClient { + return VirtualMachineScaleSetVMExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update the VMSS VM extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// VMExtensionName - the name of the virtual machine extension. +// extensionParameters - parameters supplied to the Create Virtual Machine Extension operation. +func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtension) (result VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: extensionParameters, + Constraints: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "extensionParameters.VirtualMachineExtensionProperties.ProtectedSettingsFromKeyVault.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetVMExtensionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtension) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + extensionParameters.Name = nil + extensionParameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the VMSS VM extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// VMExtensionName - the name of the virtual machine extension. +func (client VirtualMachineScaleSetVMExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string) (result VirtualMachineScaleSetVMExtensionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineScaleSetVMExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the VMSS VM extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// VMExtensionName - the name of the virtual machine extension. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineScaleSetVMExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, expand string) (result VirtualMachineScaleSetVMExtension, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineScaleSetVMExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List the operation to get all extensions of an instance in Virtual Machine Scaleset. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineScaleSetVMExtensionsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineScaleSetVMExtensionsListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineScaleSetVMExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtensionsListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Update the operation to update the VMSS VM extension. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// VMExtensionName - the name of the virtual machine extension. +// extensionParameters - parameters supplied to the Update Virtual Machine Extension operation. +func (client VirtualMachineScaleSetVMExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtensionUpdate) (result VirtualMachineScaleSetVMExtensionsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, extensionParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineScaleSetVMExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtensionUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmExtensionName": autorest.Encode("path", VMExtensionName), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + extensionParameters.Name = nil + extensionParameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), + autorest.WithJSON(extensionParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmruncommands.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmruncommands.go new file mode 100644 index 000000000000..fb95c143fb8d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvmruncommands.go @@ -0,0 +1,495 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetVMRunCommandsClient is the compute Client +type VirtualMachineScaleSetVMRunCommandsClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetVMRunCommandsClient creates an instance of the VirtualMachineScaleSetVMRunCommandsClient +// client. +func NewVirtualMachineScaleSetVMRunCommandsClient(subscriptionID string) VirtualMachineScaleSetVMRunCommandsClient { + return NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI creates an instance of the +// VirtualMachineScaleSetVMRunCommandsClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMRunCommandsClient { + return VirtualMachineScaleSetVMRunCommandsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update the VMSS VM run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// runCommandName - the name of the virtual machine run command. +// runCommand - parameters supplied to the Create Virtual Machine RunCommand operation. +func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand) (result VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, runCommand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), + autorest.WithJSON(runCommand), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete the VMSS VM run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// runCommandName - the name of the virtual machine run command. +func (client VirtualMachineScaleSetVMRunCommandsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string) (result VirtualMachineScaleSetVMRunCommandsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineScaleSetVMRunCommandsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMRunCommandsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMRunCommandsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get the operation to get the VMSS VM run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// runCommandName - the name of the virtual machine run command. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineScaleSetVMRunCommandsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, expand string) (result VirtualMachineRunCommand, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineScaleSetVMRunCommandsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMRunCommandsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMRunCommandsClient) GetResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List the operation to get all run commands of an instance in Virtual Machine Scaleset. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// expand - the expand expression to apply on the operation. +func (client VirtualMachineScaleSetVMRunCommandsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineRunCommandsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.List") + defer func() { + sc := -1 + if result.vmrclr.Response.Response != nil { + sc = result.vmrclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.vmrclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", resp, "Failure sending request") + return + } + + result.vmrclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", resp, "Failure responding to request") + return + } + if result.vmrclr.hasNextLink() && result.vmrclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineScaleSetVMRunCommandsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMRunCommandsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMRunCommandsClient) ListResponder(resp *http.Response) (result VirtualMachineRunCommandsListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetVMRunCommandsClient) listNextResults(ctx context.Context, lastResults VirtualMachineRunCommandsListResult) (result VirtualMachineRunCommandsListResult, err error) { + req, err := lastResults.virtualMachineRunCommandsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetVMRunCommandsClient) ListComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineRunCommandsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) + return +} + +// Update the operation to update the VMSS VM run command. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// runCommandName - the name of the virtual machine run command. +// runCommand - parameters supplied to the Update Virtual Machine RunCommand operation. +func (client VirtualMachineScaleSetVMRunCommandsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (result VirtualMachineScaleSetVMRunCommandsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, runCommand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineScaleSetVMRunCommandsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "runCommandName": autorest.Encode("path", runCommandName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), + autorest.WithJSON(runCommand), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMRunCommandsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMRunCommandsClient) UpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvms.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvms.go new file mode 100644 index 000000000000..6514dd7c4a57 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinescalesetvms.go @@ -0,0 +1,1430 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineScaleSetVMsClient is the compute Client +type VirtualMachineScaleSetVMsClient struct { + BaseClient +} + +// NewVirtualMachineScaleSetVMsClient creates an instance of the VirtualMachineScaleSetVMsClient client. +func NewVirtualMachineScaleSetVMsClient(subscriptionID string) VirtualMachineScaleSetVMsClient { + return NewVirtualMachineScaleSetVMsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineScaleSetVMsClientWithBaseURI creates an instance of the VirtualMachineScaleSetVMsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewVirtualMachineScaleSetVMsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMsClient { + return VirtualMachineScaleSetVMsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Deallocate deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the +// compute resources it uses. You are not billed for the compute resources of this virtual machine once it is +// deallocated. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) Deallocate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsDeallocateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Deallocate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", nil, "Failure preparing request") + return + } + + result, err = client.DeallocateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", result.Response(), "Failure sending request") + return + } + + return +} + +// DeallocatePreparer prepares the Deallocate request. +func (client VirtualMachineScaleSetVMsClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/deallocate", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeallocateSender sends the Deallocate request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) DeallocateSender(req *http.Request) (future VirtualMachineScaleSetVMsDeallocateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeallocateResponder handles the response to the Deallocate request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Delete deletes a virtual machine from a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// forceDeletion - optional parameter to force delete a virtual machine from a VM scale set. (Feature in +// Preview) +func (client VirtualMachineScaleSetVMsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, forceDeletion *bool) (result VirtualMachineScaleSetVMsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, forceDeletion) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client VirtualMachineScaleSetVMsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, forceDeletion *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if forceDeletion != nil { + queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets a virtual machine from a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the instance view of +// the virtual machine. 'UserData' will retrieve the UserData of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand InstanceViewTypes) (result VirtualMachineScaleSetVM, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VirtualMachineScaleSetVMsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand InstanceViewTypes) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(string(expand)) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetVM, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetInstanceView gets the status of a virtual machine from a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMInstanceView, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.GetInstanceView") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", nil, "Failure preparing request") + return + } + + resp, err := client.GetInstanceViewSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure sending request") + return + } + + result, err = client.GetInstanceViewResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure responding to request") + return + } + + return +} + +// GetInstanceViewPreparer prepares the GetInstanceView request. +func (client VirtualMachineScaleSetVMsClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/instanceView", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetInstanceViewSender sends the GetInstanceView request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) GetInstanceViewResponder(resp *http.Response) (result VirtualMachineScaleSetVMInstanceView, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets a list of all virtual machines in a VM scale sets. +// Parameters: +// resourceGroupName - the name of the resource group. +// virtualMachineScaleSetName - the name of the VM scale set. +// filter - the filter to apply to the operation. Allowed values are 'startswith(instanceView/statuses/code, +// 'PowerState') eq true', 'properties/latestModelApplied eq true', 'properties/latestModelApplied eq false'. +// selectParameter - the list parameters. Allowed values are 'instanceView', 'instanceView/statuses'. +// expand - the expand expression to apply to the operation. Allowed values are 'instanceView'. +func (client VirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List") + defer func() { + sc := -1 + if result.vmssvlr.Response.Response != nil { + sc = result.vmssvlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.vmssvlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure sending request") + return + } + + result.vmssvlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure responding to request") + return + } + if result.vmssvlr.hasNextLink() && result.vmssvlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineScaleSetVMsClient) ListPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + if len(selectParameter) > 0 { + queryParameters["$select"] = autorest.Encode("query", selectParameter) + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetVMListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client VirtualMachineScaleSetVMsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetVMListResult) (result VirtualMachineScaleSetVMListResult, err error) { + req, err := lastResults.virtualMachineScaleSetVMListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualMachineScaleSetVMsClient) ListComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand) + return +} + +// PerformMaintenance performs maintenance on a virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsPerformMaintenanceFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.PerformMaintenance") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PerformMaintenance", nil, "Failure preparing request") + return + } + + result, err = client.PerformMaintenanceSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PerformMaintenance", result.Response(), "Failure sending request") + return + } + + return +} + +// PerformMaintenancePreparer prepares the PerformMaintenance request. +func (client VirtualMachineScaleSetVMsClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachineScaleSetVMsPerformMaintenanceFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// PowerOff power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are +// getting charged for the resources. Instead, use deallocate to release resources and avoid charges. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates +// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not +// specified +func (client VirtualMachineScaleSetVMsClient) PowerOff(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, skipShutdown *bool) (result VirtualMachineScaleSetVMsPowerOffFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.PowerOff") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, skipShutdown) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", nil, "Failure preparing request") + return + } + + result, err = client.PowerOffSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", result.Response(), "Failure sending request") + return + } + + return +} + +// PowerOffPreparer prepares the PowerOff request. +func (client VirtualMachineScaleSetVMsClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, skipShutdown *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if skipShutdown != nil { + queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) + } else { + queryParameters["skipShutdown"] = autorest.Encode("query", false) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PowerOffSender sends the PowerOff request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) PowerOffSender(req *http.Request) (future VirtualMachineScaleSetVMsPowerOffFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PowerOffResponder handles the response to the PowerOff request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Redeploy shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back +// on. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) Redeploy(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsRedeployFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Redeploy") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RedeployPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Redeploy", nil, "Failure preparing request") + return + } + + result, err = client.RedeploySender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Redeploy", result.Response(), "Failure sending request") + return + } + + return +} + +// RedeployPreparer prepares the Redeploy request. +func (client VirtualMachineScaleSetVMsClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RedeploySender sends the Redeploy request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) RedeploySender(req *http.Request) (future VirtualMachineScaleSetVMsRedeployFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RedeployResponder handles the response to the Redeploy request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Reimage reimages (upgrade the operating system) a specific virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// VMScaleSetVMReimageInput - parameters for the Reimaging Virtual machine in ScaleSet. +func (client VirtualMachineScaleSetVMsClient) Reimage(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMScaleSetVMReimageInput *VirtualMachineScaleSetVMReimageParameters) (result VirtualMachineScaleSetVMsReimageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Reimage") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimagePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMScaleSetVMReimageInput) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", nil, "Failure preparing request") + return + } + + result, err = client.ReimageSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimagePreparer prepares the Reimage request. +func (client VirtualMachineScaleSetVMsClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMScaleSetVMReimageInput *VirtualMachineScaleSetVMReimageParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimage", pathParameters), + autorest.WithQueryParameters(queryParameters)) + if VMScaleSetVMReimageInput != nil { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithJSON(VMScaleSetVMReimageInput)) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageSender sends the Reimage request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) ReimageSender(req *http.Request) (future VirtualMachineScaleSetVMsReimageFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageResponder handles the response to the Reimage request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// ReimageAll allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This +// operation is only supported for managed disks. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) ReimageAll(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsReimageAllFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.ReimageAll") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ReimageAllPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "ReimageAll", nil, "Failure preparing request") + return + } + + result, err = client.ReimageAllSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "ReimageAll", result.Response(), "Failure sending request") + return + } + + return +} + +// ReimageAllPreparer prepares the ReimageAll request. +func (client VirtualMachineScaleSetVMsClient) ReimageAllPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimageall", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ReimageAllSender sends the ReimageAll request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) ReimageAllSender(req *http.Request) (future VirtualMachineScaleSetVMsReimageAllFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ReimageAllResponder handles the response to the ReimageAll request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) ReimageAllResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Restart restarts a virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) Restart(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsRestartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Restart") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RestartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", nil, "Failure preparing request") + return + } + + result, err = client.RestartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", result.Response(), "Failure sending request") + return + } + + return +} + +// RestartPreparer prepares the Restart request. +func (client VirtualMachineScaleSetVMsClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RestartSender sends the Restart request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) RestartSender(req *http.Request) (future VirtualMachineScaleSetVMsRestartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RestartResponder handles the response to the Restart request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// RetrieveBootDiagnosticsData the operation to retrieve SAS URIs of boot diagnostic logs for a virtual machine in a VM +// scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// sasURIExpirationTimeInMinutes - expiration duration in minutes for the SAS URIs with a value between 1 to +// 1440 minutes.

    NOTE: If not specified, SAS URIs will be generated with a default expiration duration +// of 120 minutes. +func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, sasURIExpirationTimeInMinutes *int32) (result RetrieveBootDiagnosticsDataResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.RetrieveBootDiagnosticsData") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.RetrieveBootDiagnosticsDataPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, sasURIExpirationTimeInMinutes) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", nil, "Failure preparing request") + return + } + + resp, err := client.RetrieveBootDiagnosticsDataSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", resp, "Failure sending request") + return + } + + result, err = client.RetrieveBootDiagnosticsDataResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", resp, "Failure responding to request") + return + } + + return +} + +// RetrieveBootDiagnosticsDataPreparer prepares the RetrieveBootDiagnosticsData request. +func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, sasURIExpirationTimeInMinutes *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if sasURIExpirationTimeInMinutes != nil { + queryParameters["sasUriExpirationTimeInMinutes"] = autorest.Encode("query", *sasURIExpirationTimeInMinutes) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RetrieveBootDiagnosticsDataSender sends the RetrieveBootDiagnosticsData request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// RetrieveBootDiagnosticsDataResponder handles the response to the RetrieveBootDiagnosticsData request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataResponder(resp *http.Response) (result RetrieveBootDiagnosticsDataResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// RunCommand run command on a virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +// parameters - parameters supplied to the Run command operation. +func (client VirtualMachineScaleSetVMsClient) RunCommand(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters RunCommandInput) (result VirtualMachineScaleSetVMsRunCommandFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.RunCommand") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.CommandID", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetVMsClient", "RunCommand", err.Error()) + } + + req, err := client.RunCommandPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RunCommand", nil, "Failure preparing request") + return + } + + result, err = client.RunCommandSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RunCommand", result.Response(), "Failure sending request") + return + } + + return +} + +// RunCommandPreparer prepares the RunCommand request. +func (client VirtualMachineScaleSetVMsClient) RunCommandPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters RunCommandInput) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// RunCommandSender sends the RunCommand request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) RunCommandSender(req *http.Request) (future VirtualMachineScaleSetVMsRunCommandFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// RunCommandResponder handles the response to the RunCommand request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) RunCommandResponder(resp *http.Response) (result RunCommandResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// SimulateEviction the operation to simulate the eviction of spot virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) SimulateEviction(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.SimulateEviction") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.SimulateEvictionPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", nil, "Failure preparing request") + return + } + + resp, err := client.SimulateEvictionSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", resp, "Failure sending request") + return + } + + result, err = client.SimulateEvictionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", resp, "Failure responding to request") + return + } + + return +} + +// SimulateEvictionPreparer prepares the SimulateEviction request. +func (client VirtualMachineScaleSetVMsClient) SimulateEvictionPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// SimulateEvictionSender sends the SimulateEviction request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) SimulateEvictionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// SimulateEvictionResponder handles the response to the SimulateEviction request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) SimulateEvictionResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Start starts a virtual machine in a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set. +// instanceID - the instance ID of the virtual machine. +func (client VirtualMachineScaleSetVMsClient) Start(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsStartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Start") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.StartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", nil, "Failure preparing request") + return + } + + result, err = client.StartSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", result.Response(), "Failure sending request") + return + } + + return +} + +// StartPreparer prepares the Start request. +func (client VirtualMachineScaleSetVMsClient) StartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// StartSender sends the Start request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) StartSender(req *http.Request) (future VirtualMachineScaleSetVMsStartFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// StartResponder handles the response to the Start request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Update updates a virtual machine of a VM scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// VMScaleSetName - the name of the VM scale set where the extension should be create or updated. +// instanceID - the instance ID of the virtual machine. +// parameters - parameters supplied to the Update Virtual Machine Scale Sets VM operation. +func (client VirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM) (result VirtualMachineScaleSetVMsUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Update") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, + }}, + }}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineScaleSetVMsClient", "Update", err.Error()) + } + + req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Update", nil, "Failure preparing request") + return + } + + result, err = client.UpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Update", result.Response(), "Failure sending request") + return + } + + return +} + +// UpdatePreparer prepares the Update request. +func (client VirtualMachineScaleSetVMsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "instanceId": autorest.Encode("path", instanceID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "vmScaleSetName": autorest.Encode("path", VMScaleSetName), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.InstanceID = nil + parameters.Sku = nil + parameters.Resources = nil + parameters.Zones = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// UpdateSender sends the Update request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineScaleSetVMsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMsUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// UpdateResponder handles the response to the Update request. The method always +// closes the http.Response Body. +func (client VirtualMachineScaleSetVMsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVM, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinesizes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinesizes.go new file mode 100644 index 000000000000..cdbf6579260e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute/virtualmachinesizes.go @@ -0,0 +1,113 @@ +package compute + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VirtualMachineSizesClient is the compute Client +type VirtualMachineSizesClient struct { + BaseClient +} + +// NewVirtualMachineSizesClient creates an instance of the VirtualMachineSizesClient client. +func NewVirtualMachineSizesClient(subscriptionID string) VirtualMachineSizesClient { + return NewVirtualMachineSizesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVirtualMachineSizesClientWithBaseURI creates an instance of the VirtualMachineSizesClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewVirtualMachineSizesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineSizesClient { + return VirtualMachineSizesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List this API is deprecated. Use [Resources Skus](https://docs.microsoft.com/rest/api/compute/resourceskus/list) +// Parameters: +// location - the location upon which virtual-machine-sizes is queried. +func (client VirtualMachineSizesClient) List(ctx context.Context, location string) (result VirtualMachineSizeListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineSizesClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: location, + Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { + return result, validation.NewError("compute.VirtualMachineSizesClient", "List", err.Error()) + } + + req, err := client.ListPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VirtualMachineSizesClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-08-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualMachineSizesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VirtualMachineSizesClient) ListResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/CHANGELOG.md new file mode 100644 index 000000000000..52911e4cc5e4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/CHANGELOG.md @@ -0,0 +1,2 @@ +# Change History + diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/_meta.json b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/_meta.json similarity index 56% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/_meta.json rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/_meta.json index 04957b5c7609..1ccde570f9ae 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/_meta.json +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/_meta.json @@ -1,11 +1,11 @@ { - "commit": "1c8d7850afbec9ede6de6f2d14bcc30896a74ed6", + "commit": "c91eca4e2081703002581da6f58f9d9332e1afd1", "readme": "/_/azure-rest-api-specs/specification/network/resource-manager/readme.md", - "tag": "package-2021-08", + "tag": "package-2022-07", "use": "@microsoft.azure/autorest.go@2.1.188", "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", - "autorest_command": "autorest --use=@microsoft.azure/autorest.go@2.1.188 --tag=package-2021-08 --go-sdk-folder=/_/azure-sdk-for-go --go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --enum-prefix /_/azure-rest-api-specs/specification/network/resource-manager/readme.md", + "autorest_command": "autorest --use=@microsoft.azure/autorest.go@2.1.188 --tag=package-2022-07 --go-sdk-folder=/_/azure-sdk-for-go --go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION /_/azure-rest-api-specs/specification/network/resource-manager/readme.md", "additional_properties": { - "additional_options": "--go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --enum-prefix" + "additional_options": "--go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION" } } \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrulecollections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrulecollections.go new file mode 100644 index 000000000000..2292b61ce294 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrulecollections.go @@ -0,0 +1,431 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// AdminRuleCollectionsClient is the network Client +type AdminRuleCollectionsClient struct { + BaseClient +} + +// NewAdminRuleCollectionsClient creates an instance of the AdminRuleCollectionsClient client. +func NewAdminRuleCollectionsClient(subscriptionID string) AdminRuleCollectionsClient { + return NewAdminRuleCollectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewAdminRuleCollectionsClientWithBaseURI creates an instance of the AdminRuleCollectionsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewAdminRuleCollectionsClientWithBaseURI(baseURI string, subscriptionID string) AdminRuleCollectionsClient { + return AdminRuleCollectionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates an admin rule collection. +// Parameters: +// ruleCollection - the Rule Collection to create or update +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +func (client AdminRuleCollectionsClient) CreateOrUpdate(ctx context.Context, ruleCollection AdminRuleCollection, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string) (result AdminRuleCollection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: ruleCollection, + Constraints: []validation.Constraint{{Target: "ruleCollection.AdminRuleCollectionPropertiesFormat", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "ruleCollection.AdminRuleCollectionPropertiesFormat.AppliesToGroups", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("network.AdminRuleCollectionsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, ruleCollection, resourceGroupName, networkManagerName, configurationName, ruleCollectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client AdminRuleCollectionsClient) CreateOrUpdatePreparer(ctx context.Context, ruleCollection AdminRuleCollection, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + ruleCollection.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}", pathParameters), + autorest.WithJSON(ruleCollection), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRuleCollectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client AdminRuleCollectionsClient) CreateOrUpdateResponder(resp *http.Response) (result AdminRuleCollection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes an admin rule collection. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client AdminRuleCollectionsClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, force *bool) (result AdminRuleCollectionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client AdminRuleCollectionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRuleCollectionsClient) DeleteSender(req *http.Request) (future AdminRuleCollectionsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client AdminRuleCollectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets a network manager security admin configuration rule collection. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +func (client AdminRuleCollectionsClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string) (result AdminRuleCollection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client AdminRuleCollectionsClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRuleCollectionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client AdminRuleCollectionsClient) GetResponder(resp *http.Response) (result AdminRuleCollection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the rule collections in a security admin configuration, in a paginated format. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client AdminRuleCollectionsClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, top *int32, skipToken string) (result AdminRuleCollectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionsClient.List") + defer func() { + sc := -1 + if result.arclr.Response.Response != nil { + sc = result.arclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.AdminRuleCollectionsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, configurationName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.arclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "List", resp, "Failure sending request") + return + } + + result.arclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "List", resp, "Failure responding to request") + return + } + if result.arclr.hasNextLink() && result.arclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client AdminRuleCollectionsClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRuleCollectionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client AdminRuleCollectionsClient) ListResponder(resp *http.Response) (result AdminRuleCollectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client AdminRuleCollectionsClient) listNextResults(ctx context.Context, lastResults AdminRuleCollectionListResult) (result AdminRuleCollectionListResult, err error) { + req, err := lastResults.adminRuleCollectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client AdminRuleCollectionsClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, top *int32, skipToken string) (result AdminRuleCollectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, configurationName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrules.go new file mode 100644 index 000000000000..e38d6e174a6a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/adminrules.go @@ -0,0 +1,430 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// AdminRulesClient is the network Client +type AdminRulesClient struct { + BaseClient +} + +// NewAdminRulesClient creates an instance of the AdminRulesClient client. +func NewAdminRulesClient(subscriptionID string) AdminRulesClient { + return NewAdminRulesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewAdminRulesClientWithBaseURI creates an instance of the AdminRulesClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewAdminRulesClientWithBaseURI(baseURI string, subscriptionID string) AdminRulesClient { + return AdminRulesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates an admin rule. +// Parameters: +// adminRule - the admin rule to create or update +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +// ruleName - the name of the rule. +func (client AdminRulesClient) CreateOrUpdate(ctx context.Context, adminRule BasicBaseAdminRule, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string) (result BaseAdminRuleModel, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRulesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, adminRule, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, ruleName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client AdminRulesClient) CreateOrUpdatePreparer(ctx context.Context, adminRule BasicBaseAdminRule, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "ruleName": autorest.Encode("path", ruleName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}/rules/{ruleName}", pathParameters), + autorest.WithJSON(adminRule), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRulesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client AdminRulesClient) CreateOrUpdateResponder(resp *http.Response) (result BaseAdminRuleModel, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes an admin rule. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +// ruleName - the name of the rule. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client AdminRulesClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string, force *bool) (result AdminRulesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRulesClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, ruleName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client AdminRulesClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "ruleName": autorest.Encode("path", ruleName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}/rules/{ruleName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRulesClient) DeleteSender(req *http.Request) (future AdminRulesDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client AdminRulesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets a network manager security configuration admin rule. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +// ruleName - the name of the rule. +func (client AdminRulesClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string) (result BaseAdminRuleModel, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRulesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, ruleName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client AdminRulesClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, ruleName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "ruleName": autorest.Encode("path", ruleName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}/rules/{ruleName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRulesClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client AdminRulesClient) GetResponder(resp *http.Response) (result BaseAdminRuleModel, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list all network manager security configuration admin rules. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// ruleCollectionName - the name of the network manager security Configuration rule collection. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client AdminRulesClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, top *int32, skipToken string) (result AdminRuleListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRulesClient.List") + defer func() { + sc := -1 + if result.arlr.Response.Response != nil { + sc = result.arlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.AdminRulesClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.arlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "List", resp, "Failure sending request") + return + } + + result.arlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "List", resp, "Failure responding to request") + return + } + if result.arlr.hasNextLink() && result.arlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client AdminRulesClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "ruleCollectionName": autorest.Encode("path", ruleCollectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}/ruleCollections/{ruleCollectionName}/rules", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client AdminRulesClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client AdminRulesClient) ListResponder(resp *http.Response) (result AdminRuleListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client AdminRulesClient) listNextResults(ctx context.Context, lastResults AdminRuleListResult) (result AdminRuleListResult, err error) { + req, err := lastResults.adminRuleListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.AdminRulesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.AdminRulesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client AdminRulesClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, ruleCollectionName string, top *int32, skipToken string) (result AdminRuleListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRulesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, configurationName, ruleCollectionName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivateendpointconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivateendpointconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivateendpointconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivateendpointconnections.go index 2e1a4a6839b9..917f0b7b641b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivateendpointconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivateendpointconnections.go @@ -72,7 +72,7 @@ func (client ApplicationGatewayPrivateEndpointConnectionsClient) DeletePreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client ApplicationGatewayPrivateEndpointConnectionsClient) GetPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -240,7 +240,7 @@ func (client ApplicationGatewayPrivateEndpointConnectionsClient) ListPreparer(ct "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -349,7 +349,7 @@ func (client ApplicationGatewayPrivateEndpointConnectionsClient) UpdatePreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivatelinkresources.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivatelinkresources.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivatelinkresources.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivatelinkresources.go index b3c4a19361d6..e899d166e863 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgatewayprivatelinkresources.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewayprivatelinkresources.go @@ -82,7 +82,7 @@ func (client ApplicationGatewayPrivateLinkResourcesClient) ListPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgateways.go index 08eed6176d25..55a64bbc1ae7 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationgateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgateways.go @@ -71,7 +71,7 @@ func (client ApplicationGatewaysClient) BackendHealthPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client ApplicationGatewaysClient) BackendHealthOnDemandPreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -269,7 +269,7 @@ func (client ApplicationGatewaysClient) CreateOrUpdatePreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -351,7 +351,7 @@ func (client ApplicationGatewaysClient) DeletePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -436,7 +436,7 @@ func (client ApplicationGatewaysClient) GetPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -510,7 +510,7 @@ func (client ApplicationGatewaysClient) GetSslPredefinedPolicyPreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -589,7 +589,7 @@ func (client ApplicationGatewaysClient) ListPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -702,7 +702,7 @@ func (client ApplicationGatewaysClient) ListAllPreparer(ctx context.Context) (*h "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -810,7 +810,7 @@ func (client ApplicationGatewaysClient) ListAvailableRequestHeadersPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -881,7 +881,7 @@ func (client ApplicationGatewaysClient) ListAvailableResponseHeadersPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -952,7 +952,7 @@ func (client ApplicationGatewaysClient) ListAvailableServerVariablesPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1023,7 +1023,7 @@ func (client ApplicationGatewaysClient) ListAvailableSslOptionsPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1099,7 +1099,7 @@ func (client ApplicationGatewaysClient) ListAvailableSslPredefinedPoliciesPrepar "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1207,7 +1207,7 @@ func (client ApplicationGatewaysClient) ListAvailableWafRuleSetsPreparer(ctx con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1276,7 +1276,7 @@ func (client ApplicationGatewaysClient) StartPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1354,7 +1354,7 @@ func (client ApplicationGatewaysClient) StopPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1440,7 +1440,7 @@ func (client ApplicationGatewaysClient) UpdateTagsPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifests.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifests.go new file mode 100644 index 000000000000..b77a7e4da9eb --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifests.go @@ -0,0 +1,149 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ApplicationGatewayWafDynamicManifestsClient is the network Client +type ApplicationGatewayWafDynamicManifestsClient struct { + BaseClient +} + +// NewApplicationGatewayWafDynamicManifestsClient creates an instance of the +// ApplicationGatewayWafDynamicManifestsClient client. +func NewApplicationGatewayWafDynamicManifestsClient(subscriptionID string) ApplicationGatewayWafDynamicManifestsClient { + return NewApplicationGatewayWafDynamicManifestsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewApplicationGatewayWafDynamicManifestsClientWithBaseURI creates an instance of the +// ApplicationGatewayWafDynamicManifestsClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewApplicationGatewayWafDynamicManifestsClientWithBaseURI(baseURI string, subscriptionID string) ApplicationGatewayWafDynamicManifestsClient { + return ApplicationGatewayWafDynamicManifestsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets the regional application gateway waf manifest. +// Parameters: +// location - the region where the nrp are located at. +func (client ApplicationGatewayWafDynamicManifestsClient) Get(ctx context.Context, location string) (result ApplicationGatewayWafDynamicManifestResultListPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayWafDynamicManifestsClient.Get") + defer func() { + sc := -1 + if result.agwdmrl.Response.Response != nil { + sc = result.agwdmrl.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.getNextResults + req, err := client.GetPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.agwdmrl.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "Get", resp, "Failure sending request") + return + } + + result.agwdmrl, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "Get", resp, "Failure responding to request") + return + } + if result.agwdmrl.hasNextLink() && result.agwdmrl.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ApplicationGatewayWafDynamicManifestsClient) GetPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/locations/{location}/applicationGatewayWafDynamicManifests", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ApplicationGatewayWafDynamicManifestsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ApplicationGatewayWafDynamicManifestsClient) GetResponder(resp *http.Response) (result ApplicationGatewayWafDynamicManifestResultList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// getNextResults retrieves the next set of results, if any. +func (client ApplicationGatewayWafDynamicManifestsClient) getNextResults(ctx context.Context, lastResults ApplicationGatewayWafDynamicManifestResultList) (result ApplicationGatewayWafDynamicManifestResultList, err error) { + req, err := lastResults.applicationGatewayWafDynamicManifestResultListPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "getNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "getNextResults", resp, "Failure sending next results request") + } + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsClient", "getNextResults", resp, "Failure responding to next results request") + } + return +} + +// GetComplete enumerates all values, automatically crossing page boundaries as required. +func (client ApplicationGatewayWafDynamicManifestsClient) GetComplete(ctx context.Context, location string) (result ApplicationGatewayWafDynamicManifestResultListIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayWafDynamicManifestsClient.Get") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.Get(ctx, location) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifestsdefault.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifestsdefault.go new file mode 100644 index 000000000000..5068e59eef52 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationgatewaywafdynamicmanifestsdefault.go @@ -0,0 +1,107 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ApplicationGatewayWafDynamicManifestsDefaultClient is the network Client +type ApplicationGatewayWafDynamicManifestsDefaultClient struct { + BaseClient +} + +// NewApplicationGatewayWafDynamicManifestsDefaultClient creates an instance of the +// ApplicationGatewayWafDynamicManifestsDefaultClient client. +func NewApplicationGatewayWafDynamicManifestsDefaultClient(subscriptionID string) ApplicationGatewayWafDynamicManifestsDefaultClient { + return NewApplicationGatewayWafDynamicManifestsDefaultClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewApplicationGatewayWafDynamicManifestsDefaultClientWithBaseURI creates an instance of the +// ApplicationGatewayWafDynamicManifestsDefaultClient client using a custom endpoint. Use this when interacting with +// an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewApplicationGatewayWafDynamicManifestsDefaultClientWithBaseURI(baseURI string, subscriptionID string) ApplicationGatewayWafDynamicManifestsDefaultClient { + return ApplicationGatewayWafDynamicManifestsDefaultClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets the regional application gateway waf manifest. +// Parameters: +// location - the region where the nrp are located at. +func (client ApplicationGatewayWafDynamicManifestsDefaultClient) Get(ctx context.Context, location string) (result ApplicationGatewayWafDynamicManifestResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayWafDynamicManifestsDefaultClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, location) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsDefaultClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsDefaultClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ApplicationGatewayWafDynamicManifestsDefaultClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ApplicationGatewayWafDynamicManifestsDefaultClient) GetPreparer(ctx context.Context, location string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "location": autorest.Encode("path", location), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/locations/{location}/applicationGatewayWafDynamicManifests/dafault", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ApplicationGatewayWafDynamicManifestsDefaultClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ApplicationGatewayWafDynamicManifestsDefaultClient) GetResponder(resp *http.Response) (result ApplicationGatewayWafDynamicManifestResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationsecuritygroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationsecuritygroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationsecuritygroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationsecuritygroups.go index 062cd381e95b..7e0bf86d3a64 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/applicationsecuritygroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/applicationsecuritygroups.go @@ -70,7 +70,7 @@ func (client ApplicationSecurityGroupsClient) CreateOrUpdatePreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client ApplicationSecurityGroupsClient) DeletePreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client ApplicationSecurityGroupsClient) GetPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client ApplicationSecurityGroupsClient) ListPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -429,7 +429,7 @@ func (client ApplicationSecurityGroupsClient) ListAllPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -543,7 +543,7 @@ func (client ApplicationSecurityGroupsClient) UpdateTagsPreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availabledelegations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availabledelegations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availabledelegations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availabledelegations.go index 14c6080dde1d..f5262c88511f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availabledelegations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availabledelegations.go @@ -79,7 +79,7 @@ func (client AvailableDelegationsClient) ListPreparer(ctx context.Context, locat "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableendpointservices.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableendpointservices.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableendpointservices.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableendpointservices.go index 6da78683f7f8..c5ac9b3f4e76 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableendpointservices.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableendpointservices.go @@ -79,7 +79,7 @@ func (client AvailableEndpointServicesClient) ListPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableprivateendpointtypes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableprivateendpointtypes.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableprivateendpointtypes.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableprivateendpointtypes.go index 2a76e1d7f1f0..cfbe6e507560 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableprivateendpointtypes.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableprivateendpointtypes.go @@ -79,7 +79,7 @@ func (client AvailablePrivateEndpointTypesClient) ListPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -198,7 +198,7 @@ func (client AvailablePrivateEndpointTypesClient) ListByResourceGroupPreparer(ct "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableresourcegroupdelegations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableresourcegroupdelegations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableresourcegroupdelegations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableresourcegroupdelegations.go index 240254d7c7cc..81bce6207291 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableresourcegroupdelegations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableresourcegroupdelegations.go @@ -82,7 +82,7 @@ func (client AvailableResourceGroupDelegationsClient) ListPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableservicealiases.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableservicealiases.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableservicealiases.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableservicealiases.go index 439235398ba2..6b7a2b613dd2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/availableservicealiases.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/availableservicealiases.go @@ -79,7 +79,7 @@ func (client AvailableServiceAliasesClient) ListPreparer(ctx context.Context, lo "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -197,7 +197,7 @@ func (client AvailableServiceAliasesClient) ListByResourceGroupPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewallfqdntags.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewallfqdntags.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewallfqdntags.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewallfqdntags.go index d6bc156d54d6..d8d05de9f5b7 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewallfqdntags.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewallfqdntags.go @@ -76,7 +76,7 @@ func (client AzureFirewallFqdnTagsClient) ListAllPreparer(ctx context.Context) ( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewalls.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewalls.go similarity index 86% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewalls.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewalls.go index df0196dca0e0..3246b6636b66 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/azurefirewalls.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/azurefirewalls.go @@ -77,7 +77,7 @@ func (client AzureFirewallsClient) CreateOrUpdatePreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client AzureFirewallsClient) DeletePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client AzureFirewallsClient) GetPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -323,7 +323,7 @@ func (client AzureFirewallsClient) ListPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -436,7 +436,7 @@ func (client AzureFirewallsClient) ListAllPreparer(ctx context.Context) (*http.R "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -504,6 +504,85 @@ func (client AzureFirewallsClient) ListAllComplete(ctx context.Context) (result return } +// ListLearnedPrefixes retrieves a list of all IP prefixes that azure firewall has learned to not SNAT. +// Parameters: +// resourceGroupName - the name of the resource group. +// azureFirewallName - the name of the azure firewall. +func (client AzureFirewallsClient) ListLearnedPrefixes(ctx context.Context, resourceGroupName string, azureFirewallName string) (result AzureFirewallsListLearnedPrefixesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallsClient.ListLearnedPrefixes") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListLearnedPrefixesPreparer(ctx, resourceGroupName, azureFirewallName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AzureFirewallsClient", "ListLearnedPrefixes", nil, "Failure preparing request") + return + } + + result, err = client.ListLearnedPrefixesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AzureFirewallsClient", "ListLearnedPrefixes", result.Response(), "Failure sending request") + return + } + + return +} + +// ListLearnedPrefixesPreparer prepares the ListLearnedPrefixes request. +func (client AzureFirewallsClient) ListLearnedPrefixesPreparer(ctx context.Context, resourceGroupName string, azureFirewallName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "azureFirewallName": autorest.Encode("path", azureFirewallName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/azureFirewalls/{azureFirewallName}/learnedIPPrefixes", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListLearnedPrefixesSender sends the ListLearnedPrefixes request. The method will close the +// http.Response Body if it receives an error. +func (client AzureFirewallsClient) ListLearnedPrefixesSender(req *http.Request) (future AzureFirewallsListLearnedPrefixesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ListLearnedPrefixesResponder handles the response to the ListLearnedPrefixes request. The method always +// closes the http.Response Body. +func (client AzureFirewallsClient) ListLearnedPrefixesResponder(resp *http.Response) (result IPPrefixesList, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + // UpdateTags updates tags of an Azure Firewall resource. // Parameters: // resourceGroupName - the name of the resource group. @@ -543,7 +622,7 @@ func (client AzureFirewallsClient) UpdateTagsPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bastionhosts.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bastionhosts.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bastionhosts.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bastionhosts.go index 79580ade1c35..f7f7b35717ed 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bastionhosts.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bastionhosts.go @@ -81,7 +81,7 @@ func (client BastionHostsClient) CreateOrUpdatePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -163,7 +163,7 @@ func (client BastionHostsClient) DeletePreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -248,7 +248,7 @@ func (client BastionHostsClient) GetPreparer(ctx context.Context, resourceGroupN "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client BastionHostsClient) ListPreparer(ctx context.Context) (*http.Reques "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -440,7 +440,7 @@ func (client BastionHostsClient) ListByResourceGroupPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -547,7 +547,7 @@ func (client BastionHostsClient) UpdateTagsPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bgpservicecommunities.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bgpservicecommunities.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bgpservicecommunities.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bgpservicecommunities.go index b4898bf21d2d..661637839aec 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/bgpservicecommunities.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/bgpservicecommunities.go @@ -76,7 +76,7 @@ func (client BgpServiceCommunitiesClient) ListPreparer(ctx context.Context) (*ht "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/client.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/client.go similarity index 63% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/client.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/client.go index b8d584889611..33703c4c94df 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/client.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/client.go @@ -1,6 +1,6 @@ // Deprecated: Please note, this package has been deprecated. A replacement package is available [github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork). We strongly encourage you to upgrade to continue receiving updates. See [Migration Guide](https://aka.ms/azsdk/golang/t2/migration) for guidance on upgrading. Refer to our [deprecation policy](https://azure.github.io/azure-sdk/policies_support.html) for more details. // -// Package network implements the Azure ARM Network service API version 2021-08-01. +// Package network implements the Azure ARM Network service API version . // // Network Client package network @@ -15,6 +15,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -91,7 +92,7 @@ func (client BaseClient) CheckDNSNameAvailabilityPreparer(ctx context.Context, l "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, "domainNameLabel": autorest.Encode("query", domainNameLabel), @@ -162,7 +163,7 @@ func (client BaseClient) DeleteBastionShareableLinkPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -255,7 +256,7 @@ func (client BaseClient) DisconnectActiveSessionsPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,6 +326,80 @@ func (client BaseClient) DisconnectActiveSessionsComplete(ctx context.Context, r return } +// ExpressRouteProviderPortMethod retrieves detail of a provider port. +// Parameters: +// providerport - the name of the provider port. +func (client BaseClient) ExpressRouteProviderPortMethod(ctx context.Context, providerport string) (result ExpressRouteProviderPort, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.ExpressRouteProviderPortMethod") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ExpressRouteProviderPortMethodPreparer(ctx, providerport) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ExpressRouteProviderPortMethod", nil, "Failure preparing request") + return + } + + resp, err := client.ExpressRouteProviderPortMethodSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.BaseClient", "ExpressRouteProviderPortMethod", resp, "Failure sending request") + return + } + + result, err = client.ExpressRouteProviderPortMethodResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ExpressRouteProviderPortMethod", resp, "Failure responding to request") + return + } + + return +} + +// ExpressRouteProviderPortMethodPreparer prepares the ExpressRouteProviderPortMethod request. +func (client BaseClient) ExpressRouteProviderPortMethodPreparer(ctx context.Context, providerport string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "providerport": autorest.Encode("path", providerport), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/expressRouteProviderPorts/{providerport}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ExpressRouteProviderPortMethodSender sends the ExpressRouteProviderPortMethod request. The method will close the +// http.Response Body if it receives an error. +func (client BaseClient) ExpressRouteProviderPortMethodSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ExpressRouteProviderPortMethodResponder handles the response to the ExpressRouteProviderPortMethod request. The method always +// closes the http.Response Body. +func (client BaseClient) ExpressRouteProviderPortMethodResponder(resp *http.Response) (result ExpressRouteProviderPort, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + // Generatevirtualwanvpnserverconfigurationvpnprofile generates a unique VPN profile for P2S clients for VirtualWan and // associated VpnServerConfiguration combination in the specified resource group. // Parameters: @@ -365,7 +440,7 @@ func (client BaseClient) GeneratevirtualwanvpnserverconfigurationvpnprofilePrepa "virtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -446,7 +521,7 @@ func (client BaseClient) GetActiveSessionsPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -579,7 +654,7 @@ func (client BaseClient) GetBastionShareableLinkPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -649,6 +724,379 @@ func (client BaseClient) GetBastionShareableLinkComplete(ctx context.Context, re return } +// ListActiveConnectivityConfigurations lists active connectivity configurations in a network manager. +// Parameters: +// parameters - active Configuration Parameter. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +func (client BaseClient) ListActiveConnectivityConfigurations(ctx context.Context, parameters ActiveConfigurationParameter, resourceGroupName string, networkManagerName string, top *int32) (result ActiveConnectivityConfigurationsListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.ListActiveConnectivityConfigurations") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.BaseClient", "ListActiveConnectivityConfigurations", err.Error()) + } + + req, err := client.ListActiveConnectivityConfigurationsPreparer(ctx, parameters, resourceGroupName, networkManagerName, top) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveConnectivityConfigurations", nil, "Failure preparing request") + return + } + + resp, err := client.ListActiveConnectivityConfigurationsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveConnectivityConfigurations", resp, "Failure sending request") + return + } + + result, err = client.ListActiveConnectivityConfigurationsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveConnectivityConfigurations", resp, "Failure responding to request") + return + } + + return +} + +// ListActiveConnectivityConfigurationsPreparer prepares the ListActiveConnectivityConfigurations request. +func (client BaseClient) ListActiveConnectivityConfigurationsPreparer(ctx context.Context, parameters ActiveConfigurationParameter, resourceGroupName string, networkManagerName string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/listActiveConnectivityConfigurations", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListActiveConnectivityConfigurationsSender sends the ListActiveConnectivityConfigurations request. The method will close the +// http.Response Body if it receives an error. +func (client BaseClient) ListActiveConnectivityConfigurationsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListActiveConnectivityConfigurationsResponder handles the response to the ListActiveConnectivityConfigurations request. The method always +// closes the http.Response Body. +func (client BaseClient) ListActiveConnectivityConfigurationsResponder(resp *http.Response) (result ActiveConnectivityConfigurationsListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListActiveSecurityAdminRules lists active security admin rules in a network manager. +// Parameters: +// parameters - active Configuration Parameter. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +func (client BaseClient) ListActiveSecurityAdminRules(ctx context.Context, parameters ActiveConfigurationParameter, resourceGroupName string, networkManagerName string, top *int32) (result ActiveSecurityAdminRulesListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.ListActiveSecurityAdminRules") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.BaseClient", "ListActiveSecurityAdminRules", err.Error()) + } + + req, err := client.ListActiveSecurityAdminRulesPreparer(ctx, parameters, resourceGroupName, networkManagerName, top) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveSecurityAdminRules", nil, "Failure preparing request") + return + } + + resp, err := client.ListActiveSecurityAdminRulesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveSecurityAdminRules", resp, "Failure sending request") + return + } + + result, err = client.ListActiveSecurityAdminRulesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListActiveSecurityAdminRules", resp, "Failure responding to request") + return + } + + return +} + +// ListActiveSecurityAdminRulesPreparer prepares the ListActiveSecurityAdminRules request. +func (client BaseClient) ListActiveSecurityAdminRulesPreparer(ctx context.Context, parameters ActiveConfigurationParameter, resourceGroupName string, networkManagerName string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/listActiveSecurityAdminRules", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListActiveSecurityAdminRulesSender sends the ListActiveSecurityAdminRules request. The method will close the +// http.Response Body if it receives an error. +func (client BaseClient) ListActiveSecurityAdminRulesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListActiveSecurityAdminRulesResponder handles the response to the ListActiveSecurityAdminRules request. The method always +// closes the http.Response Body. +func (client BaseClient) ListActiveSecurityAdminRulesResponder(resp *http.Response) (result ActiveSecurityAdminRulesListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListNetworkManagerEffectiveConnectivityConfigurations list all effective connectivity configurations applied on a +// virtual network. +// Parameters: +// parameters - parameters supplied to list correct page. +// resourceGroupName - the name of the resource group. +// virtualNetworkName - the name of the virtual network. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +func (client BaseClient) ListNetworkManagerEffectiveConnectivityConfigurations(ctx context.Context, parameters QueryRequestOptions, resourceGroupName string, virtualNetworkName string, top *int32) (result ManagerEffectiveConnectivityConfigurationListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.ListNetworkManagerEffectiveConnectivityConfigurations") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.BaseClient", "ListNetworkManagerEffectiveConnectivityConfigurations", err.Error()) + } + + req, err := client.ListNetworkManagerEffectiveConnectivityConfigurationsPreparer(ctx, parameters, resourceGroupName, virtualNetworkName, top) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveConnectivityConfigurations", nil, "Failure preparing request") + return + } + + resp, err := client.ListNetworkManagerEffectiveConnectivityConfigurationsSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveConnectivityConfigurations", resp, "Failure sending request") + return + } + + result, err = client.ListNetworkManagerEffectiveConnectivityConfigurationsResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveConnectivityConfigurations", resp, "Failure responding to request") + return + } + + return +} + +// ListNetworkManagerEffectiveConnectivityConfigurationsPreparer prepares the ListNetworkManagerEffectiveConnectivityConfigurations request. +func (client BaseClient) ListNetworkManagerEffectiveConnectivityConfigurationsPreparer(ctx context.Context, parameters QueryRequestOptions, resourceGroupName string, virtualNetworkName string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualNetworkName": autorest.Encode("path", virtualNetworkName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/listNetworkManagerEffectiveConnectivityConfigurations", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListNetworkManagerEffectiveConnectivityConfigurationsSender sends the ListNetworkManagerEffectiveConnectivityConfigurations request. The method will close the +// http.Response Body if it receives an error. +func (client BaseClient) ListNetworkManagerEffectiveConnectivityConfigurationsSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListNetworkManagerEffectiveConnectivityConfigurationsResponder handles the response to the ListNetworkManagerEffectiveConnectivityConfigurations request. The method always +// closes the http.Response Body. +func (client BaseClient) ListNetworkManagerEffectiveConnectivityConfigurationsResponder(resp *http.Response) (result ManagerEffectiveConnectivityConfigurationListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// ListNetworkManagerEffectiveSecurityAdminRules list all effective security admin rules applied on a virtual network. +// Parameters: +// parameters - parameters supplied to list correct page. +// resourceGroupName - the name of the resource group. +// virtualNetworkName - the name of the virtual network. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +func (client BaseClient) ListNetworkManagerEffectiveSecurityAdminRules(ctx context.Context, parameters QueryRequestOptions, resourceGroupName string, virtualNetworkName string, top *int32) (result ManagerEffectiveSecurityAdminRulesListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.ListNetworkManagerEffectiveSecurityAdminRules") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.BaseClient", "ListNetworkManagerEffectiveSecurityAdminRules", err.Error()) + } + + req, err := client.ListNetworkManagerEffectiveSecurityAdminRulesPreparer(ctx, parameters, resourceGroupName, virtualNetworkName, top) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveSecurityAdminRules", nil, "Failure preparing request") + return + } + + resp, err := client.ListNetworkManagerEffectiveSecurityAdminRulesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveSecurityAdminRules", resp, "Failure sending request") + return + } + + result, err = client.ListNetworkManagerEffectiveSecurityAdminRulesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.BaseClient", "ListNetworkManagerEffectiveSecurityAdminRules", resp, "Failure responding to request") + return + } + + return +} + +// ListNetworkManagerEffectiveSecurityAdminRulesPreparer prepares the ListNetworkManagerEffectiveSecurityAdminRules request. +func (client BaseClient) ListNetworkManagerEffectiveSecurityAdminRulesPreparer(ctx context.Context, parameters QueryRequestOptions, resourceGroupName string, virtualNetworkName string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualNetworkName": autorest.Encode("path", virtualNetworkName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/listNetworkManagerEffectiveSecurityAdminRules", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListNetworkManagerEffectiveSecurityAdminRulesSender sends the ListNetworkManagerEffectiveSecurityAdminRules request. The method will close the +// http.Response Body if it receives an error. +func (client BaseClient) ListNetworkManagerEffectiveSecurityAdminRulesSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListNetworkManagerEffectiveSecurityAdminRulesResponder handles the response to the ListNetworkManagerEffectiveSecurityAdminRules request. The method always +// closes the http.Response Body. +func (client BaseClient) ListNetworkManagerEffectiveSecurityAdminRulesResponder(resp *http.Response) (result ManagerEffectiveSecurityAdminRulesListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + // PutBastionShareableLink creates a Bastion Shareable Links for all the VMs specified in the request. // Parameters: // resourceGroupName - the name of the resource group. @@ -688,7 +1136,7 @@ func (client BaseClient) PutBastionShareableLinkPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -817,7 +1265,7 @@ func (client BaseClient) SupportedSecurityProvidersPreparer(ctx context.Context, "virtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/configurationpolicygroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/configurationpolicygroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/configurationpolicygroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/configurationpolicygroups.go index ee4daf6dba50..79c24fee950a 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/configurationpolicygroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/configurationpolicygroups.go @@ -73,7 +73,7 @@ func (client ConfigurationPolicyGroupsClient) CreateOrUpdatePreparer(ctx context "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -158,7 +158,7 @@ func (client ConfigurationPolicyGroupsClient) DeletePreparer(ctx context.Context "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -245,7 +245,7 @@ func (client ConfigurationPolicyGroupsClient) GetPreparer(ctx context.Context, r "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -327,7 +327,7 @@ func (client ConfigurationPolicyGroupsClient) ListByVpnServerConfigurationPrepar "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/connectionmonitors.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectionmonitors.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/connectionmonitors.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectionmonitors.go index 9c7ea471a494..bdd5308976e5 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/connectionmonitors.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectionmonitors.go @@ -98,7 +98,7 @@ func (client ConnectionMonitorsClient) CreateOrUpdatePreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -184,7 +184,7 @@ func (client ConnectionMonitorsClient) DeletePreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -271,7 +271,7 @@ func (client ConnectionMonitorsClient) GetPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -347,7 +347,7 @@ func (client ConnectionMonitorsClient) ListPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -418,7 +418,7 @@ func (client ConnectionMonitorsClient) QueryPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -499,7 +499,7 @@ func (client ConnectionMonitorsClient) StartPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -579,7 +579,7 @@ func (client ConnectionMonitorsClient) StopPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -667,7 +667,7 @@ func (client ConnectionMonitorsClient) UpdateTagsPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectivityconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectivityconfigurations.go new file mode 100644 index 000000000000..c5243c646bf9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/connectivityconfigurations.go @@ -0,0 +1,426 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ConnectivityConfigurationsClient is the network Client +type ConnectivityConfigurationsClient struct { + BaseClient +} + +// NewConnectivityConfigurationsClient creates an instance of the ConnectivityConfigurationsClient client. +func NewConnectivityConfigurationsClient(subscriptionID string) ConnectivityConfigurationsClient { + return NewConnectivityConfigurationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewConnectivityConfigurationsClientWithBaseURI creates an instance of the ConnectivityConfigurationsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewConnectivityConfigurationsClientWithBaseURI(baseURI string, subscriptionID string) ConnectivityConfigurationsClient { + return ConnectivityConfigurationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates/Updates a new network manager connectivity configuration +// Parameters: +// connectivityConfiguration - parameters supplied to create/update a network manager connectivity +// configuration +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager connectivity configuration. +func (client ConnectivityConfigurationsClient) CreateOrUpdate(ctx context.Context, connectivityConfiguration ConnectivityConfiguration, resourceGroupName string, networkManagerName string, configurationName string) (result ConnectivityConfiguration, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: connectivityConfiguration, + Constraints: []validation.Constraint{{Target: "connectivityConfiguration.ConnectivityConfigurationProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "connectivityConfiguration.ConnectivityConfigurationProperties.AppliesToGroups", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { + return result, validation.NewError("network.ConnectivityConfigurationsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, connectivityConfiguration, resourceGroupName, networkManagerName, configurationName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ConnectivityConfigurationsClient) CreateOrUpdatePreparer(ctx context.Context, connectivityConfiguration ConnectivityConfiguration, resourceGroupName string, networkManagerName string, configurationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + connectivityConfiguration.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/connectivityConfigurations/{configurationName}", pathParameters), + autorest.WithJSON(connectivityConfiguration), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ConnectivityConfigurationsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ConnectivityConfigurationsClient) CreateOrUpdateResponder(resp *http.Response) (result ConnectivityConfiguration, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a network manager connectivity configuration, specified by the resource group, network manager name, +// and connectivity configuration name +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager connectivity configuration. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client ConnectivityConfigurationsClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, force *bool) (result ConnectivityConfigurationsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, configurationName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ConnectivityConfigurationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/connectivityConfigurations/{configurationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ConnectivityConfigurationsClient) DeleteSender(req *http.Request) (future ConnectivityConfigurationsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ConnectivityConfigurationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets a Network Connectivity Configuration, specified by the resource group, network manager name, and +// connectivity Configuration name +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager connectivity configuration. +func (client ConnectivityConfigurationsClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string) (result ConnectivityConfiguration, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, configurationName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ConnectivityConfigurationsClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/connectivityConfigurations/{configurationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ConnectivityConfigurationsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ConnectivityConfigurationsClient) GetResponder(resp *http.Response) (result ConnectivityConfiguration, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the network manager connectivity configuration in a specified network manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client ConnectivityConfigurationsClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result ConnectivityConfigurationListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationsClient.List") + defer func() { + sc := -1 + if result.cclr.Response.Response != nil { + sc = result.cclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ConnectivityConfigurationsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.cclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "List", resp, "Failure sending request") + return + } + + result.cclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "List", resp, "Failure responding to request") + return + } + if result.cclr.hasNextLink() && result.cclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ConnectivityConfigurationsClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/connectivityConfigurations", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ConnectivityConfigurationsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ConnectivityConfigurationsClient) ListResponder(resp *http.Response) (result ConnectivityConfigurationListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ConnectivityConfigurationsClient) listNextResults(ctx context.Context, lastResults ConnectivityConfigurationListResult) (result ConnectivityConfigurationListResult, err error) { + req, err := lastResults.connectivityConfigurationListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ConnectivityConfigurationsClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result ConnectivityConfigurationListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/customipprefixes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/customipprefixes.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/customipprefixes.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/customipprefixes.go index 4cccfbc1611b..9667eff63548 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/customipprefixes.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/customipprefixes.go @@ -70,7 +70,7 @@ func (client CustomIPPrefixesClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client CustomIPPrefixesClient) DeletePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -238,7 +238,7 @@ func (client CustomIPPrefixesClient) GetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -320,7 +320,7 @@ func (client CustomIPPrefixesClient) ListPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -433,7 +433,7 @@ func (client CustomIPPrefixesClient) ListAllPreparer(ctx context.Context) (*http "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -547,7 +547,7 @@ func (client CustomIPPrefixesClient) UpdateTagsPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddoscustompolicies.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddoscustompolicies.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddoscustompolicies.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddoscustompolicies.go index 57341307e42d..e253f8e979e9 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddoscustompolicies.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddoscustompolicies.go @@ -70,7 +70,7 @@ func (client DdosCustomPoliciesClient) CreateOrUpdatePreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client DdosCustomPoliciesClient) DeletePreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client DdosCustomPoliciesClient) GetPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -314,7 +314,7 @@ func (client DdosCustomPoliciesClient) UpdateTagsPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddosprotectionplans.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddosprotectionplans.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddosprotectionplans.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddosprotectionplans.go index 84dd6888cf26..a73299aebf3b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ddosprotectionplans.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ddosprotectionplans.go @@ -70,7 +70,7 @@ func (client DdosProtectionPlansClient) CreateOrUpdatePreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -155,7 +155,7 @@ func (client DdosProtectionPlansClient) DeletePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -240,7 +240,7 @@ func (client DdosProtectionPlansClient) GetPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client DdosProtectionPlansClient) ListPreparer(ctx context.Context) (*http "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client DdosProtectionPlansClient) ListByResourceGroupPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client DdosProtectionPlansClient) UpdateTagsPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/defaultsecurityrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/defaultsecurityrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/defaultsecurityrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/defaultsecurityrules.go index 43a559531ba5..fa15bacf8df1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/defaultsecurityrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/defaultsecurityrules.go @@ -78,7 +78,7 @@ func (client DefaultSecurityRulesClient) GetPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client DefaultSecurityRulesClient) ListPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/dscpconfiguration.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/dscpconfiguration.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/dscpconfiguration.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/dscpconfiguration.go index 1721a2d088f0..e0c2f52fe98d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/dscpconfiguration.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/dscpconfiguration.go @@ -70,7 +70,7 @@ func (client DscpConfigurationClient) CreateOrUpdatePreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client DscpConfigurationClient) DeletePreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client DscpConfigurationClient) GetPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client DscpConfigurationClient) ListPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -429,7 +429,7 @@ func (client DscpConfigurationClient) ListAllPreparer(ctx context.Context) (*htt "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/enums.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/enums.go similarity index 69% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/enums.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/enums.go index 5c9c1b81969e..f4ea93ba33ac 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/enums.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/enums.go @@ -10,15 +10,49 @@ package network type Access string const ( - // AccessAllow ... - AccessAllow Access = "Allow" - // AccessDeny ... - AccessDeny Access = "Deny" + // Allow ... + Allow Access = "Allow" + // Deny ... + Deny Access = "Deny" ) // PossibleAccessValues returns an array of possible values for the Access const type. func PossibleAccessValues() []Access { - return []Access{AccessAllow, AccessDeny} + return []Access{Allow, Deny} +} + +// ActionType enumerates the values for action type. +type ActionType string + +const ( + // ActionTypeAllow ... + ActionTypeAllow ActionType = "Allow" + // ActionTypeAnomalyScoring ... + ActionTypeAnomalyScoring ActionType = "AnomalyScoring" + // ActionTypeBlock ... + ActionTypeBlock ActionType = "Block" + // ActionTypeLog ... + ActionTypeLog ActionType = "Log" +) + +// PossibleActionTypeValues returns an array of possible values for the ActionType const type. +func PossibleActionTypeValues() []ActionType { + return []ActionType{ActionTypeAllow, ActionTypeAnomalyScoring, ActionTypeBlock, ActionTypeLog} +} + +// AddressPrefixType enumerates the values for address prefix type. +type AddressPrefixType string + +const ( + // IPPrefix ... + IPPrefix AddressPrefixType = "IPPrefix" + // ServiceTag ... + ServiceTag AddressPrefixType = "ServiceTag" +) + +// PossibleAddressPrefixTypeValues returns an array of possible values for the AddressPrefixType const type. +func PossibleAddressPrefixTypeValues() []AddressPrefixType { + return []AddressPrefixType{IPPrefix, ServiceTag} } // ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health @@ -26,36 +60,52 @@ func PossibleAccessValues() []Access { type ApplicationGatewayBackendHealthServerHealth string const ( - // ApplicationGatewayBackendHealthServerHealthDown ... - ApplicationGatewayBackendHealthServerHealthDown ApplicationGatewayBackendHealthServerHealth = "Down" - // ApplicationGatewayBackendHealthServerHealthDraining ... - ApplicationGatewayBackendHealthServerHealthDraining ApplicationGatewayBackendHealthServerHealth = "Draining" - // ApplicationGatewayBackendHealthServerHealthPartial ... - ApplicationGatewayBackendHealthServerHealthPartial ApplicationGatewayBackendHealthServerHealth = "Partial" - // ApplicationGatewayBackendHealthServerHealthUnknown ... - ApplicationGatewayBackendHealthServerHealthUnknown ApplicationGatewayBackendHealthServerHealth = "Unknown" - // ApplicationGatewayBackendHealthServerHealthUp ... - ApplicationGatewayBackendHealthServerHealthUp ApplicationGatewayBackendHealthServerHealth = "Up" + // Down ... + Down ApplicationGatewayBackendHealthServerHealth = "Down" + // Draining ... + Draining ApplicationGatewayBackendHealthServerHealth = "Draining" + // Partial ... + Partial ApplicationGatewayBackendHealthServerHealth = "Partial" + // Unknown ... + Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown" + // Up ... + Up ApplicationGatewayBackendHealthServerHealth = "Up" ) // PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type. func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth { - return []ApplicationGatewayBackendHealthServerHealth{ApplicationGatewayBackendHealthServerHealthDown, ApplicationGatewayBackendHealthServerHealthDraining, ApplicationGatewayBackendHealthServerHealthPartial, ApplicationGatewayBackendHealthServerHealthUnknown, ApplicationGatewayBackendHealthServerHealthUp} + return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up} +} + +// ApplicationGatewayClientRevocationOptions enumerates the values for application gateway client revocation +// options. +type ApplicationGatewayClientRevocationOptions string + +const ( + // None ... + None ApplicationGatewayClientRevocationOptions = "None" + // OCSP ... + OCSP ApplicationGatewayClientRevocationOptions = "OCSP" +) + +// PossibleApplicationGatewayClientRevocationOptionsValues returns an array of possible values for the ApplicationGatewayClientRevocationOptions const type. +func PossibleApplicationGatewayClientRevocationOptionsValues() []ApplicationGatewayClientRevocationOptions { + return []ApplicationGatewayClientRevocationOptions{None, OCSP} } // ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity. type ApplicationGatewayCookieBasedAffinity string const ( - // ApplicationGatewayCookieBasedAffinityDisabled ... - ApplicationGatewayCookieBasedAffinityDisabled ApplicationGatewayCookieBasedAffinity = "Disabled" - // ApplicationGatewayCookieBasedAffinityEnabled ... - ApplicationGatewayCookieBasedAffinityEnabled ApplicationGatewayCookieBasedAffinity = "Enabled" + // Disabled ... + Disabled ApplicationGatewayCookieBasedAffinity = "Disabled" + // Enabled ... + Enabled ApplicationGatewayCookieBasedAffinity = "Enabled" ) // PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type. func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity { - return []ApplicationGatewayCookieBasedAffinity{ApplicationGatewayCookieBasedAffinityDisabled, ApplicationGatewayCookieBasedAffinityEnabled} + return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled} } // ApplicationGatewayCustomErrorStatusCode enumerates the values for application gateway custom error status @@ -63,30 +113,30 @@ func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayC type ApplicationGatewayCustomErrorStatusCode string const ( - // ApplicationGatewayCustomErrorStatusCodeHTTPStatus403 ... - ApplicationGatewayCustomErrorStatusCodeHTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403" - // ApplicationGatewayCustomErrorStatusCodeHTTPStatus502 ... - ApplicationGatewayCustomErrorStatusCodeHTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502" + // HTTPStatus403 ... + HTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403" + // HTTPStatus502 ... + HTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502" ) // PossibleApplicationGatewayCustomErrorStatusCodeValues returns an array of possible values for the ApplicationGatewayCustomErrorStatusCode const type. func PossibleApplicationGatewayCustomErrorStatusCodeValues() []ApplicationGatewayCustomErrorStatusCode { - return []ApplicationGatewayCustomErrorStatusCode{ApplicationGatewayCustomErrorStatusCodeHTTPStatus403, ApplicationGatewayCustomErrorStatusCodeHTTPStatus502} + return []ApplicationGatewayCustomErrorStatusCode{HTTPStatus403, HTTPStatus502} } // ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode. type ApplicationGatewayFirewallMode string const ( - // ApplicationGatewayFirewallModeDetection ... - ApplicationGatewayFirewallModeDetection ApplicationGatewayFirewallMode = "Detection" - // ApplicationGatewayFirewallModePrevention ... - ApplicationGatewayFirewallModePrevention ApplicationGatewayFirewallMode = "Prevention" + // Detection ... + Detection ApplicationGatewayFirewallMode = "Detection" + // Prevention ... + Prevention ApplicationGatewayFirewallMode = "Prevention" ) // PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type. func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode { - return []ApplicationGatewayFirewallMode{ApplicationGatewayFirewallModeDetection, ApplicationGatewayFirewallModePrevention} + return []ApplicationGatewayFirewallMode{Detection, Prevention} } // ApplicationGatewayLoadDistributionAlgorithm enumerates the values for application gateway load distribution @@ -94,74 +144,74 @@ func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewall type ApplicationGatewayLoadDistributionAlgorithm string const ( - // ApplicationGatewayLoadDistributionAlgorithmIPHash ... - ApplicationGatewayLoadDistributionAlgorithmIPHash ApplicationGatewayLoadDistributionAlgorithm = "IpHash" - // ApplicationGatewayLoadDistributionAlgorithmLeastConnections ... - ApplicationGatewayLoadDistributionAlgorithmLeastConnections ApplicationGatewayLoadDistributionAlgorithm = "LeastConnections" - // ApplicationGatewayLoadDistributionAlgorithmRoundRobin ... - ApplicationGatewayLoadDistributionAlgorithmRoundRobin ApplicationGatewayLoadDistributionAlgorithm = "RoundRobin" + // IPHash ... + IPHash ApplicationGatewayLoadDistributionAlgorithm = "IpHash" + // LeastConnections ... + LeastConnections ApplicationGatewayLoadDistributionAlgorithm = "LeastConnections" + // RoundRobin ... + RoundRobin ApplicationGatewayLoadDistributionAlgorithm = "RoundRobin" ) // PossibleApplicationGatewayLoadDistributionAlgorithmValues returns an array of possible values for the ApplicationGatewayLoadDistributionAlgorithm const type. func PossibleApplicationGatewayLoadDistributionAlgorithmValues() []ApplicationGatewayLoadDistributionAlgorithm { - return []ApplicationGatewayLoadDistributionAlgorithm{ApplicationGatewayLoadDistributionAlgorithmIPHash, ApplicationGatewayLoadDistributionAlgorithmLeastConnections, ApplicationGatewayLoadDistributionAlgorithmRoundRobin} + return []ApplicationGatewayLoadDistributionAlgorithm{IPHash, LeastConnections, RoundRobin} } // ApplicationGatewayOperationalState enumerates the values for application gateway operational state. type ApplicationGatewayOperationalState string const ( - // ApplicationGatewayOperationalStateRunning ... - ApplicationGatewayOperationalStateRunning ApplicationGatewayOperationalState = "Running" - // ApplicationGatewayOperationalStateStarting ... - ApplicationGatewayOperationalStateStarting ApplicationGatewayOperationalState = "Starting" - // ApplicationGatewayOperationalStateStopped ... - ApplicationGatewayOperationalStateStopped ApplicationGatewayOperationalState = "Stopped" - // ApplicationGatewayOperationalStateStopping ... - ApplicationGatewayOperationalStateStopping ApplicationGatewayOperationalState = "Stopping" + // Running ... + Running ApplicationGatewayOperationalState = "Running" + // Starting ... + Starting ApplicationGatewayOperationalState = "Starting" + // Stopped ... + Stopped ApplicationGatewayOperationalState = "Stopped" + // Stopping ... + Stopping ApplicationGatewayOperationalState = "Stopping" ) // PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type. func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState { - return []ApplicationGatewayOperationalState{ApplicationGatewayOperationalStateRunning, ApplicationGatewayOperationalStateStarting, ApplicationGatewayOperationalStateStopped, ApplicationGatewayOperationalStateStopping} + return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping} } // ApplicationGatewayProtocol enumerates the values for application gateway protocol. type ApplicationGatewayProtocol string const ( - // ApplicationGatewayProtocolHTTP ... - ApplicationGatewayProtocolHTTP ApplicationGatewayProtocol = "Http" - // ApplicationGatewayProtocolHTTPS ... - ApplicationGatewayProtocolHTTPS ApplicationGatewayProtocol = "Https" - // ApplicationGatewayProtocolTCP ... - ApplicationGatewayProtocolTCP ApplicationGatewayProtocol = "Tcp" - // ApplicationGatewayProtocolTLS ... - ApplicationGatewayProtocolTLS ApplicationGatewayProtocol = "Tls" + // HTTP ... + HTTP ApplicationGatewayProtocol = "Http" + // HTTPS ... + HTTPS ApplicationGatewayProtocol = "Https" + // TCP ... + TCP ApplicationGatewayProtocol = "Tcp" + // TLS ... + TLS ApplicationGatewayProtocol = "Tls" ) // PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type. func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol { - return []ApplicationGatewayProtocol{ApplicationGatewayProtocolHTTP, ApplicationGatewayProtocolHTTPS, ApplicationGatewayProtocolTCP, ApplicationGatewayProtocolTLS} + return []ApplicationGatewayProtocol{HTTP, HTTPS, TCP, TLS} } // ApplicationGatewayRedirectType enumerates the values for application gateway redirect type. type ApplicationGatewayRedirectType string const ( - // ApplicationGatewayRedirectTypeFound ... - ApplicationGatewayRedirectTypeFound ApplicationGatewayRedirectType = "Found" - // ApplicationGatewayRedirectTypePermanent ... - ApplicationGatewayRedirectTypePermanent ApplicationGatewayRedirectType = "Permanent" - // ApplicationGatewayRedirectTypeSeeOther ... - ApplicationGatewayRedirectTypeSeeOther ApplicationGatewayRedirectType = "SeeOther" - // ApplicationGatewayRedirectTypeTemporary ... - ApplicationGatewayRedirectTypeTemporary ApplicationGatewayRedirectType = "Temporary" + // Found ... + Found ApplicationGatewayRedirectType = "Found" + // Permanent ... + Permanent ApplicationGatewayRedirectType = "Permanent" + // SeeOther ... + SeeOther ApplicationGatewayRedirectType = "SeeOther" + // Temporary ... + Temporary ApplicationGatewayRedirectType = "Temporary" ) // PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type. func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType { - return []ApplicationGatewayRedirectType{ApplicationGatewayRedirectTypeFound, ApplicationGatewayRedirectTypePermanent, ApplicationGatewayRedirectTypeSeeOther, ApplicationGatewayRedirectTypeTemporary} + return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary} } // ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule @@ -169,156 +219,186 @@ func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirect type ApplicationGatewayRequestRoutingRuleType string const ( - // ApplicationGatewayRequestRoutingRuleTypeBasic ... - ApplicationGatewayRequestRoutingRuleTypeBasic ApplicationGatewayRequestRoutingRuleType = "Basic" - // ApplicationGatewayRequestRoutingRuleTypePathBasedRouting ... - ApplicationGatewayRequestRoutingRuleTypePathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting" + // Basic ... + Basic ApplicationGatewayRequestRoutingRuleType = "Basic" + // PathBasedRouting ... + PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting" ) // PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type. func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType { - return []ApplicationGatewayRequestRoutingRuleType{ApplicationGatewayRequestRoutingRuleTypeBasic, ApplicationGatewayRequestRoutingRuleTypePathBasedRouting} + return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting} +} + +// ApplicationGatewayRuleSetStatusOptions enumerates the values for application gateway rule set status +// options. +type ApplicationGatewayRuleSetStatusOptions string + +const ( + // Deprecated ... + Deprecated ApplicationGatewayRuleSetStatusOptions = "Deprecated" + // GA ... + GA ApplicationGatewayRuleSetStatusOptions = "GA" + // Preview ... + Preview ApplicationGatewayRuleSetStatusOptions = "Preview" + // Supported ... + Supported ApplicationGatewayRuleSetStatusOptions = "Supported" +) + +// PossibleApplicationGatewayRuleSetStatusOptionsValues returns an array of possible values for the ApplicationGatewayRuleSetStatusOptions const type. +func PossibleApplicationGatewayRuleSetStatusOptionsValues() []ApplicationGatewayRuleSetStatusOptions { + return []ApplicationGatewayRuleSetStatusOptions{Deprecated, GA, Preview, Supported} } // ApplicationGatewaySkuName enumerates the values for application gateway sku name. type ApplicationGatewaySkuName string const ( - // ApplicationGatewaySkuNameStandardLarge ... - ApplicationGatewaySkuNameStandardLarge ApplicationGatewaySkuName = "Standard_Large" - // ApplicationGatewaySkuNameStandardMedium ... - ApplicationGatewaySkuNameStandardMedium ApplicationGatewaySkuName = "Standard_Medium" - // ApplicationGatewaySkuNameStandardSmall ... - ApplicationGatewaySkuNameStandardSmall ApplicationGatewaySkuName = "Standard_Small" - // ApplicationGatewaySkuNameStandardV2 ... - ApplicationGatewaySkuNameStandardV2 ApplicationGatewaySkuName = "Standard_v2" - // ApplicationGatewaySkuNameWAFLarge ... - ApplicationGatewaySkuNameWAFLarge ApplicationGatewaySkuName = "WAF_Large" - // ApplicationGatewaySkuNameWAFMedium ... - ApplicationGatewaySkuNameWAFMedium ApplicationGatewaySkuName = "WAF_Medium" - // ApplicationGatewaySkuNameWAFV2 ... - ApplicationGatewaySkuNameWAFV2 ApplicationGatewaySkuName = "WAF_v2" + // StandardBasic ... + StandardBasic ApplicationGatewaySkuName = "Standard_Basic" + // StandardLarge ... + StandardLarge ApplicationGatewaySkuName = "Standard_Large" + // StandardMedium ... + StandardMedium ApplicationGatewaySkuName = "Standard_Medium" + // StandardSmall ... + StandardSmall ApplicationGatewaySkuName = "Standard_Small" + // StandardV2 ... + StandardV2 ApplicationGatewaySkuName = "Standard_v2" + // WAFLarge ... + WAFLarge ApplicationGatewaySkuName = "WAF_Large" + // WAFMedium ... + WAFMedium ApplicationGatewaySkuName = "WAF_Medium" + // WAFV2 ... + WAFV2 ApplicationGatewaySkuName = "WAF_v2" ) // PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type. func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName { - return []ApplicationGatewaySkuName{ApplicationGatewaySkuNameStandardLarge, ApplicationGatewaySkuNameStandardMedium, ApplicationGatewaySkuNameStandardSmall, ApplicationGatewaySkuNameStandardV2, ApplicationGatewaySkuNameWAFLarge, ApplicationGatewaySkuNameWAFMedium, ApplicationGatewaySkuNameWAFV2} + return []ApplicationGatewaySkuName{StandardBasic, StandardLarge, StandardMedium, StandardSmall, StandardV2, WAFLarge, WAFMedium, WAFV2} } // ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite. type ApplicationGatewaySslCipherSuite string const ( - // ApplicationGatewaySslCipherSuiteTLSDHEDSSWITH3DESEDECBCSHA ... - ApplicationGatewaySslCipherSuiteTLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128GCMSHA256 ... - ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" - // ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256GCMSHA384 ... - ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128GCMSHA256 ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA384 ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" - // ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256GCMSHA384 ... - ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128GCMSHA256 ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA384 ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" - // ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256GCMSHA384 ... - ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" - // ApplicationGatewaySslCipherSuiteTLSRSAWITH3DESEDECBCSHA ... - ApplicationGatewaySslCipherSuiteTLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128GCMSHA256 ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA256 ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256" - // ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256GCMSHA384 ... - ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384" + // TLSDHEDSSWITH3DESEDECBCSHA ... + TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" + // TLSDHEDSSWITHAES128CBCSHA ... + TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" + // TLSDHEDSSWITHAES128CBCSHA256 ... + TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" + // TLSDHEDSSWITHAES256CBCSHA ... + TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" + // TLSDHEDSSWITHAES256CBCSHA256 ... + TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" + // TLSDHERSAWITHAES128CBCSHA ... + TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" + // TLSDHERSAWITHAES128GCMSHA256 ... + TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" + // TLSDHERSAWITHAES256CBCSHA ... + TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" + // TLSDHERSAWITHAES256GCMSHA384 ... + TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" + // TLSECDHEECDSAWITHAES128CBCSHA ... + TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" + // TLSECDHEECDSAWITHAES128CBCSHA256 ... + TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" + // TLSECDHEECDSAWITHAES128GCMSHA256 ... + TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + // TLSECDHEECDSAWITHAES256CBCSHA ... + TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" + // TLSECDHEECDSAWITHAES256CBCSHA384 ... + TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" + // TLSECDHEECDSAWITHAES256GCMSHA384 ... + TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + // TLSECDHERSAWITHAES128CBCSHA ... + TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" + // TLSECDHERSAWITHAES128CBCSHA256 ... + TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + // TLSECDHERSAWITHAES128GCMSHA256 ... + TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" + // TLSECDHERSAWITHAES256CBCSHA ... + TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" + // TLSECDHERSAWITHAES256CBCSHA384 ... + TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" + // TLSECDHERSAWITHAES256GCMSHA384 ... + TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" + // TLSRSAWITH3DESEDECBCSHA ... + TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA" + // TLSRSAWITHAES128CBCSHA ... + TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA" + // TLSRSAWITHAES128CBCSHA256 ... + TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256" + // TLSRSAWITHAES128GCMSHA256 ... + TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256" + // TLSRSAWITHAES256CBCSHA ... + TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA" + // TLSRSAWITHAES256CBCSHA256 ... + TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256" + // TLSRSAWITHAES256GCMSHA384 ... + TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384" ) // PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type. func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite { - return []ApplicationGatewaySslCipherSuite{ApplicationGatewaySslCipherSuiteTLSDHEDSSWITH3DESEDECBCSHA, ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA, ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES128CBCSHA256, ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA, ApplicationGatewaySslCipherSuiteTLSDHEDSSWITHAES256CBCSHA256, ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128CBCSHA, ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES128GCMSHA256, ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256CBCSHA, ApplicationGatewaySslCipherSuiteTLSDHERSAWITHAES256GCMSHA384, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128CBCSHA256, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES128GCMSHA256, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256CBCSHA384, ApplicationGatewaySslCipherSuiteTLSECDHEECDSAWITHAES256GCMSHA384, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128CBCSHA256, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES128GCMSHA256, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256CBCSHA384, ApplicationGatewaySslCipherSuiteTLSECDHERSAWITHAES256GCMSHA384, ApplicationGatewaySslCipherSuiteTLSRSAWITH3DESEDECBCSHA, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128CBCSHA256, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES128GCMSHA256, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256CBCSHA256, ApplicationGatewaySslCipherSuiteTLSRSAWITHAES256GCMSHA384} + return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITH3DESEDECBCSHA, TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES128GCMSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSECDHERSAWITHAES256GCMSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384} } // ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name. type ApplicationGatewaySslPolicyName string const ( - // ApplicationGatewaySslPolicyNameAppGwSslPolicy20150501 ... - ApplicationGatewaySslPolicyNameAppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501" - // ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401 ... - ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401" - // ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401S ... - ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S" + // AppGwSslPolicy20150501 ... + AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501" + // AppGwSslPolicy20170401 ... + AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401" + // AppGwSslPolicy20170401S ... + AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S" + // AppGwSslPolicy20220101 ... + AppGwSslPolicy20220101 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20220101" + // AppGwSslPolicy20220101S ... + AppGwSslPolicy20220101S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20220101S" ) // PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type. func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName { - return []ApplicationGatewaySslPolicyName{ApplicationGatewaySslPolicyNameAppGwSslPolicy20150501, ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401, ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401S} + return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S, AppGwSslPolicy20220101, AppGwSslPolicy20220101S} } // ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type. type ApplicationGatewaySslPolicyType string const ( - // ApplicationGatewaySslPolicyTypeCustom ... - ApplicationGatewaySslPolicyTypeCustom ApplicationGatewaySslPolicyType = "Custom" - // ApplicationGatewaySslPolicyTypePredefined ... - ApplicationGatewaySslPolicyTypePredefined ApplicationGatewaySslPolicyType = "Predefined" + // Custom ... + Custom ApplicationGatewaySslPolicyType = "Custom" + // CustomV2 ... + CustomV2 ApplicationGatewaySslPolicyType = "CustomV2" + // Predefined ... + Predefined ApplicationGatewaySslPolicyType = "Predefined" ) // PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type. func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType { - return []ApplicationGatewaySslPolicyType{ApplicationGatewaySslPolicyTypeCustom, ApplicationGatewaySslPolicyTypePredefined} + return []ApplicationGatewaySslPolicyType{Custom, CustomV2, Predefined} } // ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol. type ApplicationGatewaySslProtocol string const ( - // ApplicationGatewaySslProtocolTLSv10 ... - ApplicationGatewaySslProtocolTLSv10 ApplicationGatewaySslProtocol = "TLSv1_0" - // ApplicationGatewaySslProtocolTLSv11 ... - ApplicationGatewaySslProtocolTLSv11 ApplicationGatewaySslProtocol = "TLSv1_1" - // ApplicationGatewaySslProtocolTLSv12 ... - ApplicationGatewaySslProtocolTLSv12 ApplicationGatewaySslProtocol = "TLSv1_2" + // TLSv10 ... + TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0" + // TLSv11 ... + TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1" + // TLSv12 ... + TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2" + // TLSv13 ... + TLSv13 ApplicationGatewaySslProtocol = "TLSv1_3" ) // PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type. func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol { - return []ApplicationGatewaySslProtocol{ApplicationGatewaySslProtocolTLSv10, ApplicationGatewaySslProtocolTLSv11, ApplicationGatewaySslProtocolTLSv12} + return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12, TLSv13} } // ApplicationGatewayTier enumerates the values for application gateway tier. @@ -327,6 +407,8 @@ type ApplicationGatewayTier string const ( // ApplicationGatewayTierStandard ... ApplicationGatewayTierStandard ApplicationGatewayTier = "Standard" + // ApplicationGatewayTierStandardBasic ... + ApplicationGatewayTierStandardBasic ApplicationGatewayTier = "Standard_Basic" // ApplicationGatewayTierStandardV2 ... ApplicationGatewayTierStandardV2 ApplicationGatewayTier = "Standard_v2" // ApplicationGatewayTierWAF ... @@ -337,52 +419,122 @@ const ( // PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type. func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier { - return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2} + return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardBasic, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2} +} + +// ApplicationGatewayTierTypes enumerates the values for application gateway tier types. +type ApplicationGatewayTierTypes string + +const ( + // ApplicationGatewayTierTypesStandard ... + ApplicationGatewayTierTypesStandard ApplicationGatewayTierTypes = "Standard" + // ApplicationGatewayTierTypesStandardV2 ... + ApplicationGatewayTierTypesStandardV2 ApplicationGatewayTierTypes = "Standard_v2" + // ApplicationGatewayTierTypesWAF ... + ApplicationGatewayTierTypesWAF ApplicationGatewayTierTypes = "WAF" + // ApplicationGatewayTierTypesWAFV2 ... + ApplicationGatewayTierTypesWAFV2 ApplicationGatewayTierTypes = "WAF_v2" +) + +// PossibleApplicationGatewayTierTypesValues returns an array of possible values for the ApplicationGatewayTierTypes const type. +func PossibleApplicationGatewayTierTypesValues() []ApplicationGatewayTierTypes { + return []ApplicationGatewayTierTypes{ApplicationGatewayTierTypesStandard, ApplicationGatewayTierTypesStandardV2, ApplicationGatewayTierTypesWAF, ApplicationGatewayTierTypesWAFV2} +} + +// ApplicationGatewayWafRuleActionTypes enumerates the values for application gateway waf rule action types. +type ApplicationGatewayWafRuleActionTypes string + +const ( + // ApplicationGatewayWafRuleActionTypesAllow ... + ApplicationGatewayWafRuleActionTypesAllow ApplicationGatewayWafRuleActionTypes = "Allow" + // ApplicationGatewayWafRuleActionTypesAnomalyScoring ... + ApplicationGatewayWafRuleActionTypesAnomalyScoring ApplicationGatewayWafRuleActionTypes = "AnomalyScoring" + // ApplicationGatewayWafRuleActionTypesBlock ... + ApplicationGatewayWafRuleActionTypesBlock ApplicationGatewayWafRuleActionTypes = "Block" + // ApplicationGatewayWafRuleActionTypesLog ... + ApplicationGatewayWafRuleActionTypesLog ApplicationGatewayWafRuleActionTypes = "Log" + // ApplicationGatewayWafRuleActionTypesNone ... + ApplicationGatewayWafRuleActionTypesNone ApplicationGatewayWafRuleActionTypes = "None" +) + +// PossibleApplicationGatewayWafRuleActionTypesValues returns an array of possible values for the ApplicationGatewayWafRuleActionTypes const type. +func PossibleApplicationGatewayWafRuleActionTypesValues() []ApplicationGatewayWafRuleActionTypes { + return []ApplicationGatewayWafRuleActionTypes{ApplicationGatewayWafRuleActionTypesAllow, ApplicationGatewayWafRuleActionTypesAnomalyScoring, ApplicationGatewayWafRuleActionTypesBlock, ApplicationGatewayWafRuleActionTypesLog, ApplicationGatewayWafRuleActionTypesNone} +} + +// ApplicationGatewayWafRuleStateTypes enumerates the values for application gateway waf rule state types. +type ApplicationGatewayWafRuleStateTypes string + +const ( + // ApplicationGatewayWafRuleStateTypesDisabled ... + ApplicationGatewayWafRuleStateTypesDisabled ApplicationGatewayWafRuleStateTypes = "Disabled" + // ApplicationGatewayWafRuleStateTypesEnabled ... + ApplicationGatewayWafRuleStateTypesEnabled ApplicationGatewayWafRuleStateTypes = "Enabled" +) + +// PossibleApplicationGatewayWafRuleStateTypesValues returns an array of possible values for the ApplicationGatewayWafRuleStateTypes const type. +func PossibleApplicationGatewayWafRuleStateTypesValues() []ApplicationGatewayWafRuleStateTypes { + return []ApplicationGatewayWafRuleStateTypes{ApplicationGatewayWafRuleStateTypesDisabled, ApplicationGatewayWafRuleStateTypesEnabled} } // AssociationType enumerates the values for association type. type AssociationType string const ( - // AssociationTypeAssociated ... - AssociationTypeAssociated AssociationType = "Associated" - // AssociationTypeContains ... - AssociationTypeContains AssociationType = "Contains" + // Associated ... + Associated AssociationType = "Associated" + // Contains ... + Contains AssociationType = "Contains" ) // PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type. func PossibleAssociationTypeValues() []AssociationType { - return []AssociationType{AssociationTypeAssociated, AssociationTypeContains} + return []AssociationType{Associated, Contains} } // AuthenticationMethod enumerates the values for authentication method. type AuthenticationMethod string const ( - // AuthenticationMethodEAPMSCHAPv2 ... - AuthenticationMethodEAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2" - // AuthenticationMethodEAPTLS ... - AuthenticationMethodEAPTLS AuthenticationMethod = "EAPTLS" + // EAPMSCHAPv2 ... + EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2" + // EAPTLS ... + EAPTLS AuthenticationMethod = "EAPTLS" ) // PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type. func PossibleAuthenticationMethodValues() []AuthenticationMethod { - return []AuthenticationMethod{AuthenticationMethodEAPMSCHAPv2, AuthenticationMethodEAPTLS} + return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS} } // AuthorizationUseStatus enumerates the values for authorization use status. type AuthorizationUseStatus string const ( - // AuthorizationUseStatusAvailable ... - AuthorizationUseStatusAvailable AuthorizationUseStatus = "Available" - // AuthorizationUseStatusInUse ... - AuthorizationUseStatusInUse AuthorizationUseStatus = "InUse" + // Available ... + Available AuthorizationUseStatus = "Available" + // InUse ... + InUse AuthorizationUseStatus = "InUse" ) // PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type. func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus { - return []AuthorizationUseStatus{AuthorizationUseStatusAvailable, AuthorizationUseStatusInUse} + return []AuthorizationUseStatus{Available, InUse} +} + +// AutoLearnPrivateRangesMode enumerates the values for auto learn private ranges mode. +type AutoLearnPrivateRangesMode string + +const ( + // AutoLearnPrivateRangesModeDisabled ... + AutoLearnPrivateRangesModeDisabled AutoLearnPrivateRangesMode = "Disabled" + // AutoLearnPrivateRangesModeEnabled ... + AutoLearnPrivateRangesModeEnabled AutoLearnPrivateRangesMode = "Enabled" +) + +// PossibleAutoLearnPrivateRangesModeValues returns an array of possible values for the AutoLearnPrivateRangesMode const type. +func PossibleAutoLearnPrivateRangesModeValues() []AutoLearnPrivateRangesMode { + return []AutoLearnPrivateRangesMode{AutoLearnPrivateRangesModeDisabled, AutoLearnPrivateRangesModeEnabled} } // AzureFirewallApplicationRuleProtocolType enumerates the values for azure firewall application rule protocol @@ -407,15 +559,15 @@ func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApp type AzureFirewallNatRCActionType string const ( - // AzureFirewallNatRCActionTypeDnat ... - AzureFirewallNatRCActionTypeDnat AzureFirewallNatRCActionType = "Dnat" - // AzureFirewallNatRCActionTypeSnat ... - AzureFirewallNatRCActionTypeSnat AzureFirewallNatRCActionType = "Snat" + // Dnat ... + Dnat AzureFirewallNatRCActionType = "Dnat" + // Snat ... + Snat AzureFirewallNatRCActionType = "Snat" ) // PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type. func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType { - return []AzureFirewallNatRCActionType{AzureFirewallNatRCActionTypeDnat, AzureFirewallNatRCActionTypeSnat} + return []AzureFirewallNatRCActionType{Dnat, Snat} } // AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol. @@ -456,15 +608,15 @@ func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType { type AzureFirewallSkuName string const ( - // AzureFirewallSkuNameAZFWHub ... - AzureFirewallSkuNameAZFWHub AzureFirewallSkuName = "AZFW_Hub" - // AzureFirewallSkuNameAZFWVNet ... - AzureFirewallSkuNameAZFWVNet AzureFirewallSkuName = "AZFW_VNet" + // AZFWHub ... + AZFWHub AzureFirewallSkuName = "AZFW_Hub" + // AZFWVNet ... + AZFWVNet AzureFirewallSkuName = "AZFW_VNet" ) // PossibleAzureFirewallSkuNameValues returns an array of possible values for the AzureFirewallSkuName const type. func PossibleAzureFirewallSkuNameValues() []AzureFirewallSkuName { - return []AzureFirewallSkuName{AzureFirewallSkuNameAZFWHub, AzureFirewallSkuNameAZFWVNet} + return []AzureFirewallSkuName{AZFWHub, AZFWVNet} } // AzureFirewallSkuTier enumerates the values for azure firewall sku tier. @@ -505,15 +657,15 @@ func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode type BastionConnectProtocol string const ( - // BastionConnectProtocolRDP ... - BastionConnectProtocolRDP BastionConnectProtocol = "RDP" - // BastionConnectProtocolSSH ... - BastionConnectProtocolSSH BastionConnectProtocol = "SSH" + // RDP ... + RDP BastionConnectProtocol = "RDP" + // SSH ... + SSH BastionConnectProtocol = "SSH" ) // PossibleBastionConnectProtocolValues returns an array of possible values for the BastionConnectProtocol const type. func PossibleBastionConnectProtocolValues() []BastionConnectProtocol { - return []BastionConnectProtocol{BastionConnectProtocolRDP, BastionConnectProtocolSSH} + return []BastionConnectProtocol{RDP, SSH} } // BastionHostSkuName enumerates the values for bastion host sku name. @@ -556,40 +708,59 @@ func PossibleBgpPeerStateValues() []BgpPeerState { type CircuitConnectionStatus string const ( - // CircuitConnectionStatusConnected ... - CircuitConnectionStatusConnected CircuitConnectionStatus = "Connected" - // CircuitConnectionStatusConnecting ... - CircuitConnectionStatusConnecting CircuitConnectionStatus = "Connecting" - // CircuitConnectionStatusDisconnected ... - CircuitConnectionStatusDisconnected CircuitConnectionStatus = "Disconnected" + // Connected ... + Connected CircuitConnectionStatus = "Connected" + // Connecting ... + Connecting CircuitConnectionStatus = "Connecting" + // Disconnected ... + Disconnected CircuitConnectionStatus = "Disconnected" ) // PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type. func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus { - return []CircuitConnectionStatus{CircuitConnectionStatusConnected, CircuitConnectionStatusConnecting, CircuitConnectionStatusDisconnected} + return []CircuitConnectionStatus{Connected, Connecting, Disconnected} } // CommissionedState enumerates the values for commissioned state. type CommissionedState string const ( - // CommissionedStateCommissioned ... - CommissionedStateCommissioned CommissionedState = "Commissioned" - // CommissionedStateCommissioning ... - CommissionedStateCommissioning CommissionedState = "Commissioning" - // CommissionedStateDecommissioning ... - CommissionedStateDecommissioning CommissionedState = "Decommissioning" - // CommissionedStateDeprovisioning ... - CommissionedStateDeprovisioning CommissionedState = "Deprovisioning" - // CommissionedStateProvisioned ... - CommissionedStateProvisioned CommissionedState = "Provisioned" - // CommissionedStateProvisioning ... - CommissionedStateProvisioning CommissionedState = "Provisioning" + // Commissioned ... + Commissioned CommissionedState = "Commissioned" + // CommissionedNoInternetAdvertise ... + CommissionedNoInternetAdvertise CommissionedState = "CommissionedNoInternetAdvertise" + // Commissioning ... + Commissioning CommissionedState = "Commissioning" + // Decommissioning ... + Decommissioning CommissionedState = "Decommissioning" + // Deprovisioned ... + Deprovisioned CommissionedState = "Deprovisioned" + // Deprovisioning ... + Deprovisioning CommissionedState = "Deprovisioning" + // Provisioned ... + Provisioned CommissionedState = "Provisioned" + // Provisioning ... + Provisioning CommissionedState = "Provisioning" ) // PossibleCommissionedStateValues returns an array of possible values for the CommissionedState const type. func PossibleCommissionedStateValues() []CommissionedState { - return []CommissionedState{CommissionedStateCommissioned, CommissionedStateCommissioning, CommissionedStateDecommissioning, CommissionedStateDeprovisioning, CommissionedStateProvisioned, CommissionedStateProvisioning} + return []CommissionedState{Commissioned, CommissionedNoInternetAdvertise, Commissioning, Decommissioning, Deprovisioned, Deprovisioning, Provisioned, Provisioning} +} + +// ConfigurationType enumerates the values for configuration type. +type ConfigurationType string + +const ( + // Connectivity ... + Connectivity ConfigurationType = "Connectivity" + // SecurityAdmin ... + SecurityAdmin ConfigurationType = "SecurityAdmin" +) + +// PossibleConfigurationTypeValues returns an array of possible values for the ConfigurationType const type. +func PossibleConfigurationTypeValues() []ConfigurationType { + return []ConfigurationType{Connectivity, SecurityAdmin} } // ConnectionMonitorEndpointFilterItemType enumerates the values for connection monitor endpoint filter item @@ -597,26 +768,26 @@ func PossibleCommissionedStateValues() []CommissionedState { type ConnectionMonitorEndpointFilterItemType string const ( - // ConnectionMonitorEndpointFilterItemTypeAgentAddress ... - ConnectionMonitorEndpointFilterItemTypeAgentAddress ConnectionMonitorEndpointFilterItemType = "AgentAddress" + // AgentAddress ... + AgentAddress ConnectionMonitorEndpointFilterItemType = "AgentAddress" ) // PossibleConnectionMonitorEndpointFilterItemTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterItemType const type. func PossibleConnectionMonitorEndpointFilterItemTypeValues() []ConnectionMonitorEndpointFilterItemType { - return []ConnectionMonitorEndpointFilterItemType{ConnectionMonitorEndpointFilterItemTypeAgentAddress} + return []ConnectionMonitorEndpointFilterItemType{AgentAddress} } // ConnectionMonitorEndpointFilterType enumerates the values for connection monitor endpoint filter type. type ConnectionMonitorEndpointFilterType string const ( - // ConnectionMonitorEndpointFilterTypeInclude ... - ConnectionMonitorEndpointFilterTypeInclude ConnectionMonitorEndpointFilterType = "Include" + // Include ... + Include ConnectionMonitorEndpointFilterType = "Include" ) // PossibleConnectionMonitorEndpointFilterTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterType const type. func PossibleConnectionMonitorEndpointFilterTypeValues() []ConnectionMonitorEndpointFilterType { - return []ConnectionMonitorEndpointFilterType{ConnectionMonitorEndpointFilterTypeInclude} + return []ConnectionMonitorEndpointFilterType{Include} } // ConnectionMonitorSourceStatus enumerates the values for connection monitor source status. @@ -658,15 +829,15 @@ func PossibleConnectionMonitorTestConfigurationProtocolValues() []ConnectionMoni type ConnectionMonitorType string const ( - // ConnectionMonitorTypeMultiEndpoint ... - ConnectionMonitorTypeMultiEndpoint ConnectionMonitorType = "MultiEndpoint" - // ConnectionMonitorTypeSingleSourceDestination ... - ConnectionMonitorTypeSingleSourceDestination ConnectionMonitorType = "SingleSourceDestination" + // MultiEndpoint ... + MultiEndpoint ConnectionMonitorType = "MultiEndpoint" + // SingleSourceDestination ... + SingleSourceDestination ConnectionMonitorType = "SingleSourceDestination" ) // PossibleConnectionMonitorTypeValues returns an array of possible values for the ConnectionMonitorType const type. func PossibleConnectionMonitorTypeValues() []ConnectionMonitorType { - return []ConnectionMonitorType{ConnectionMonitorTypeMultiEndpoint, ConnectionMonitorTypeSingleSourceDestination} + return []ConnectionMonitorType{MultiEndpoint, SingleSourceDestination} } // ConnectionState enumerates the values for connection state. @@ -705,94 +876,144 @@ func PossibleConnectionStatusValues() []ConnectionStatus { return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown} } +// ConnectivityTopology enumerates the values for connectivity topology. +type ConnectivityTopology string + +const ( + // HubAndSpoke ... + HubAndSpoke ConnectivityTopology = "HubAndSpoke" + // Mesh ... + Mesh ConnectivityTopology = "Mesh" +) + +// PossibleConnectivityTopologyValues returns an array of possible values for the ConnectivityTopology const type. +func PossibleConnectivityTopologyValues() []ConnectivityTopology { + return []ConnectivityTopology{HubAndSpoke, Mesh} +} + // CoverageLevel enumerates the values for coverage level. type CoverageLevel string const ( - // CoverageLevelAboveAverage ... - CoverageLevelAboveAverage CoverageLevel = "AboveAverage" - // CoverageLevelAverage ... - CoverageLevelAverage CoverageLevel = "Average" - // CoverageLevelBelowAverage ... - CoverageLevelBelowAverage CoverageLevel = "BelowAverage" - // CoverageLevelDefault ... - CoverageLevelDefault CoverageLevel = "Default" - // CoverageLevelFull ... - CoverageLevelFull CoverageLevel = "Full" - // CoverageLevelLow ... - CoverageLevelLow CoverageLevel = "Low" + // AboveAverage ... + AboveAverage CoverageLevel = "AboveAverage" + // Average ... + Average CoverageLevel = "Average" + // BelowAverage ... + BelowAverage CoverageLevel = "BelowAverage" + // Default ... + Default CoverageLevel = "Default" + // Full ... + Full CoverageLevel = "Full" + // Low ... + Low CoverageLevel = "Low" ) // PossibleCoverageLevelValues returns an array of possible values for the CoverageLevel const type. func PossibleCoverageLevelValues() []CoverageLevel { - return []CoverageLevel{CoverageLevelAboveAverage, CoverageLevelAverage, CoverageLevelBelowAverage, CoverageLevelDefault, CoverageLevelFull, CoverageLevelLow} + return []CoverageLevel{AboveAverage, Average, BelowAverage, Default, Full, Low} } -// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol. -type DdosCustomPolicyProtocol string +// CreatedByType enumerates the values for created by type. +type CreatedByType string const ( - // DdosCustomPolicyProtocolSyn ... - DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn" - // DdosCustomPolicyProtocolTCP ... - DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp" - // DdosCustomPolicyProtocolUDP ... - DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp" + // Application ... + Application CreatedByType = "Application" + // Key ... + Key CreatedByType = "Key" + // ManagedIdentity ... + ManagedIdentity CreatedByType = "ManagedIdentity" + // User ... + User CreatedByType = "User" ) -// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type. -func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol { - return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP} +// PossibleCreatedByTypeValues returns an array of possible values for the CreatedByType const type. +func PossibleCreatedByTypeValues() []CreatedByType { + return []CreatedByType{Application, Key, ManagedIdentity, User} } -// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity -// override. -type DdosCustomPolicyTriggerSensitivityOverride string +// CustomIPPrefixType enumerates the values for custom ip prefix type. +type CustomIPPrefixType string const ( - // DdosCustomPolicyTriggerSensitivityOverrideDefault ... - DdosCustomPolicyTriggerSensitivityOverrideDefault DdosCustomPolicyTriggerSensitivityOverride = "Default" - // DdosCustomPolicyTriggerSensitivityOverrideHigh ... - DdosCustomPolicyTriggerSensitivityOverrideHigh DdosCustomPolicyTriggerSensitivityOverride = "High" - // DdosCustomPolicyTriggerSensitivityOverrideLow ... - DdosCustomPolicyTriggerSensitivityOverrideLow DdosCustomPolicyTriggerSensitivityOverride = "Low" - // DdosCustomPolicyTriggerSensitivityOverrideRelaxed ... - DdosCustomPolicyTriggerSensitivityOverrideRelaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed" + // Child ... + Child CustomIPPrefixType = "Child" + // Parent ... + Parent CustomIPPrefixType = "Parent" + // Singular ... + Singular CustomIPPrefixType = "Singular" ) -// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type. -func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride { - return []DdosCustomPolicyTriggerSensitivityOverride{DdosCustomPolicyTriggerSensitivityOverrideDefault, DdosCustomPolicyTriggerSensitivityOverrideHigh, DdosCustomPolicyTriggerSensitivityOverrideLow, DdosCustomPolicyTriggerSensitivityOverrideRelaxed} +// PossibleCustomIPPrefixTypeValues returns an array of possible values for the CustomIPPrefixType const type. +func PossibleCustomIPPrefixTypeValues() []CustomIPPrefixType { + return []CustomIPPrefixType{Child, Parent, Singular} } -// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage. -type DdosSettingsProtectionCoverage string +// DdosSettingsProtectionMode enumerates the values for ddos settings protection mode. +type DdosSettingsProtectionMode string const ( - // DdosSettingsProtectionCoverageBasic ... - DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic" - // DdosSettingsProtectionCoverageStandard ... - DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard" + // DdosSettingsProtectionModeDisabled ... + DdosSettingsProtectionModeDisabled DdosSettingsProtectionMode = "Disabled" + // DdosSettingsProtectionModeEnabled ... + DdosSettingsProtectionModeEnabled DdosSettingsProtectionMode = "Enabled" + // DdosSettingsProtectionModeVirtualNetworkInherited ... + DdosSettingsProtectionModeVirtualNetworkInherited DdosSettingsProtectionMode = "VirtualNetworkInherited" ) -// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type. -func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage { - return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard} +// PossibleDdosSettingsProtectionModeValues returns an array of possible values for the DdosSettingsProtectionMode const type. +func PossibleDdosSettingsProtectionModeValues() []DdosSettingsProtectionMode { + return []DdosSettingsProtectionMode{DdosSettingsProtectionModeDisabled, DdosSettingsProtectionModeEnabled, DdosSettingsProtectionModeVirtualNetworkInherited} +} + +// DeleteExistingPeering enumerates the values for delete existing peering. +type DeleteExistingPeering string + +const ( + // False ... + False DeleteExistingPeering = "False" + // True ... + True DeleteExistingPeering = "True" +) + +// PossibleDeleteExistingPeeringValues returns an array of possible values for the DeleteExistingPeering const type. +func PossibleDeleteExistingPeeringValues() []DeleteExistingPeering { + return []DeleteExistingPeering{False, True} } // DeleteOptions enumerates the values for delete options. type DeleteOptions string const ( - // DeleteOptionsDelete ... - DeleteOptionsDelete DeleteOptions = "Delete" - // DeleteOptionsDetach ... - DeleteOptionsDetach DeleteOptions = "Detach" + // Delete ... + Delete DeleteOptions = "Delete" + // Detach ... + Detach DeleteOptions = "Detach" ) // PossibleDeleteOptionsValues returns an array of possible values for the DeleteOptions const type. func PossibleDeleteOptionsValues() []DeleteOptions { - return []DeleteOptions{DeleteOptionsDelete, DeleteOptionsDetach} + return []DeleteOptions{Delete, Detach} +} + +// DeploymentStatus enumerates the values for deployment status. +type DeploymentStatus string + +const ( + // Deployed ... + Deployed DeploymentStatus = "Deployed" + // Deploying ... + Deploying DeploymentStatus = "Deploying" + // Failed ... + Failed DeploymentStatus = "Failed" + // NotStarted ... + NotStarted DeploymentStatus = "NotStarted" +) + +// PossibleDeploymentStatusValues returns an array of possible values for the DeploymentStatus const type. +func PossibleDeploymentStatusValues() []DeploymentStatus { + return []DeploymentStatus{Deployed, Deploying, Failed, NotStarted} } // DestinationPortBehavior enumerates the values for destination port behavior. @@ -841,15 +1062,15 @@ func PossibleDhGroupValues() []DhGroup { type Direction string const ( - // DirectionInbound ... - DirectionInbound Direction = "Inbound" - // DirectionOutbound ... - DirectionOutbound Direction = "Outbound" + // Inbound ... + Inbound Direction = "Inbound" + // Outbound ... + Outbound Direction = "Outbound" ) // PossibleDirectionValues returns an array of possible values for the Direction const type. func PossibleDirectionValues() []Direction { - return []Direction{DirectionInbound, DirectionOutbound} + return []Direction{Inbound, Outbound} } // EffectiveRouteSource enumerates the values for effective route source. @@ -875,15 +1096,15 @@ func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource { type EffectiveRouteState string const ( - // EffectiveRouteStateActive ... - EffectiveRouteStateActive EffectiveRouteState = "Active" - // EffectiveRouteStateInvalid ... - EffectiveRouteStateInvalid EffectiveRouteState = "Invalid" + // Active ... + Active EffectiveRouteState = "Active" + // Invalid ... + Invalid EffectiveRouteState = "Invalid" ) // PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type. func PossibleEffectiveRouteStateValues() []EffectiveRouteState { - return []EffectiveRouteState{EffectiveRouteStateActive, EffectiveRouteStateInvalid} + return []EffectiveRouteState{Active, Invalid} } // EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol. @@ -907,23 +1128,27 @@ func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtoc type EndpointType string const ( - // EndpointTypeAzureSubnet ... - EndpointTypeAzureSubnet EndpointType = "AzureSubnet" - // EndpointTypeAzureVM ... - EndpointTypeAzureVM EndpointType = "AzureVM" - // EndpointTypeAzureVNet ... - EndpointTypeAzureVNet EndpointType = "AzureVNet" - // EndpointTypeExternalAddress ... - EndpointTypeExternalAddress EndpointType = "ExternalAddress" - // EndpointTypeMMAWorkspaceMachine ... - EndpointTypeMMAWorkspaceMachine EndpointType = "MMAWorkspaceMachine" - // EndpointTypeMMAWorkspaceNetwork ... - EndpointTypeMMAWorkspaceNetwork EndpointType = "MMAWorkspaceNetwork" + // AzureArcVM ... + AzureArcVM EndpointType = "AzureArcVM" + // AzureSubnet ... + AzureSubnet EndpointType = "AzureSubnet" + // AzureVM ... + AzureVM EndpointType = "AzureVM" + // AzureVMSS ... + AzureVMSS EndpointType = "AzureVMSS" + // AzureVNet ... + AzureVNet EndpointType = "AzureVNet" + // ExternalAddress ... + ExternalAddress EndpointType = "ExternalAddress" + // MMAWorkspaceMachine ... + MMAWorkspaceMachine EndpointType = "MMAWorkspaceMachine" + // MMAWorkspaceNetwork ... + MMAWorkspaceNetwork EndpointType = "MMAWorkspaceNetwork" ) // PossibleEndpointTypeValues returns an array of possible values for the EndpointType const type. func PossibleEndpointTypeValues() []EndpointType { - return []EndpointType{EndpointTypeAzureSubnet, EndpointTypeAzureVM, EndpointTypeAzureVNet, EndpointTypeExternalAddress, EndpointTypeMMAWorkspaceMachine, EndpointTypeMMAWorkspaceNetwork} + return []EndpointType{AzureArcVM, AzureSubnet, AzureVM, AzureVMSS, AzureVNet, ExternalAddress, MMAWorkspaceMachine, MMAWorkspaceNetwork} } // EvaluationState enumerates the values for evaluation state. @@ -948,19 +1173,19 @@ func PossibleEvaluationStateValues() []EvaluationState { type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string const ( - // ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfigured ... - ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured" - // ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfiguring ... - ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfiguring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring" - // ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateNotConfigured ... - ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateNotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured" - // ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValidationNeeded ... - ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded" + // Configured ... + Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured" + // Configuring ... + Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring" + // NotConfigured ... + NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured" + // ValidationNeeded ... + ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded" ) // PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type. func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState { - return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfigured, ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfiguring, ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateNotConfigured, ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValidationNeeded} + return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded} } // ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state. @@ -982,15 +1207,15 @@ func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeerin type ExpressRouteCircuitSkuFamily string const ( - // ExpressRouteCircuitSkuFamilyMeteredData ... - ExpressRouteCircuitSkuFamilyMeteredData ExpressRouteCircuitSkuFamily = "MeteredData" - // ExpressRouteCircuitSkuFamilyUnlimitedData ... - ExpressRouteCircuitSkuFamilyUnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData" + // MeteredData ... + MeteredData ExpressRouteCircuitSkuFamily = "MeteredData" + // UnlimitedData ... + UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData" ) // PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type. func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily { - return []ExpressRouteCircuitSkuFamily{ExpressRouteCircuitSkuFamilyMeteredData, ExpressRouteCircuitSkuFamilyUnlimitedData} + return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData} } // ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier. @@ -1031,34 +1256,34 @@ func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState { type ExpressRouteLinkConnectorType string const ( - // ExpressRouteLinkConnectorTypeLC ... - ExpressRouteLinkConnectorTypeLC ExpressRouteLinkConnectorType = "LC" - // ExpressRouteLinkConnectorTypeSC ... - ExpressRouteLinkConnectorTypeSC ExpressRouteLinkConnectorType = "SC" + // LC ... + LC ExpressRouteLinkConnectorType = "LC" + // SC ... + SC ExpressRouteLinkConnectorType = "SC" ) // PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type. func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType { - return []ExpressRouteLinkConnectorType{ExpressRouteLinkConnectorTypeLC, ExpressRouteLinkConnectorTypeSC} + return []ExpressRouteLinkConnectorType{LC, SC} } // ExpressRouteLinkMacSecCipher enumerates the values for express route link mac sec cipher. type ExpressRouteLinkMacSecCipher string const ( - // ExpressRouteLinkMacSecCipherGcmAes128 ... - ExpressRouteLinkMacSecCipherGcmAes128 ExpressRouteLinkMacSecCipher = "GcmAes128" - // ExpressRouteLinkMacSecCipherGcmAes256 ... - ExpressRouteLinkMacSecCipherGcmAes256 ExpressRouteLinkMacSecCipher = "GcmAes256" - // ExpressRouteLinkMacSecCipherGcmAesXpn128 ... - ExpressRouteLinkMacSecCipherGcmAesXpn128 ExpressRouteLinkMacSecCipher = "GcmAesXpn128" - // ExpressRouteLinkMacSecCipherGcmAesXpn256 ... - ExpressRouteLinkMacSecCipherGcmAesXpn256 ExpressRouteLinkMacSecCipher = "GcmAesXpn256" + // GcmAes128 ... + GcmAes128 ExpressRouteLinkMacSecCipher = "GcmAes128" + // GcmAes256 ... + GcmAes256 ExpressRouteLinkMacSecCipher = "GcmAes256" + // GcmAesXpn128 ... + GcmAesXpn128 ExpressRouteLinkMacSecCipher = "GcmAesXpn128" + // GcmAesXpn256 ... + GcmAesXpn256 ExpressRouteLinkMacSecCipher = "GcmAesXpn256" ) // PossibleExpressRouteLinkMacSecCipherValues returns an array of possible values for the ExpressRouteLinkMacSecCipher const type. func PossibleExpressRouteLinkMacSecCipherValues() []ExpressRouteLinkMacSecCipher { - return []ExpressRouteLinkMacSecCipher{ExpressRouteLinkMacSecCipherGcmAes128, ExpressRouteLinkMacSecCipherGcmAes256, ExpressRouteLinkMacSecCipherGcmAesXpn128, ExpressRouteLinkMacSecCipherGcmAesXpn256} + return []ExpressRouteLinkMacSecCipher{GcmAes128, GcmAes256, GcmAesXpn128, GcmAesXpn256} } // ExpressRouteLinkMacSecSciState enumerates the values for express route link mac sec sci state. @@ -1095,17 +1320,17 @@ func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState { type ExpressRoutePeeringType string const ( - // ExpressRoutePeeringTypeAzurePrivatePeering ... - ExpressRoutePeeringTypeAzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering" - // ExpressRoutePeeringTypeAzurePublicPeering ... - ExpressRoutePeeringTypeAzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering" - // ExpressRoutePeeringTypeMicrosoftPeering ... - ExpressRoutePeeringTypeMicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering" + // AzurePrivatePeering ... + AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering" + // AzurePublicPeering ... + AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering" + // MicrosoftPeering ... + MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering" ) // PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type. func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType { - return []ExpressRoutePeeringType{ExpressRoutePeeringTypeAzurePrivatePeering, ExpressRoutePeeringTypeAzurePublicPeering, ExpressRoutePeeringTypeMicrosoftPeering} + return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering} } // ExpressRoutePortAuthorizationUseStatus enumerates the values for express route port authorization use @@ -1124,32 +1349,47 @@ func PossibleExpressRoutePortAuthorizationUseStatusValues() []ExpressRoutePortAu return []ExpressRoutePortAuthorizationUseStatus{ExpressRoutePortAuthorizationUseStatusAvailable, ExpressRoutePortAuthorizationUseStatusInUse} } +// ExpressRoutePortsBillingType enumerates the values for express route ports billing type. +type ExpressRoutePortsBillingType string + +const ( + // ExpressRoutePortsBillingTypeMeteredData ... + ExpressRoutePortsBillingTypeMeteredData ExpressRoutePortsBillingType = "MeteredData" + // ExpressRoutePortsBillingTypeUnlimitedData ... + ExpressRoutePortsBillingTypeUnlimitedData ExpressRoutePortsBillingType = "UnlimitedData" +) + +// PossibleExpressRoutePortsBillingTypeValues returns an array of possible values for the ExpressRoutePortsBillingType const type. +func PossibleExpressRoutePortsBillingTypeValues() []ExpressRoutePortsBillingType { + return []ExpressRoutePortsBillingType{ExpressRoutePortsBillingTypeMeteredData, ExpressRoutePortsBillingTypeUnlimitedData} +} + // ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation. type ExpressRoutePortsEncapsulation string const ( - // ExpressRoutePortsEncapsulationDot1Q ... - ExpressRoutePortsEncapsulationDot1Q ExpressRoutePortsEncapsulation = "Dot1Q" - // ExpressRoutePortsEncapsulationQinQ ... - ExpressRoutePortsEncapsulationQinQ ExpressRoutePortsEncapsulation = "QinQ" + // Dot1Q ... + Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q" + // QinQ ... + QinQ ExpressRoutePortsEncapsulation = "QinQ" ) // PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type. func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation { - return []ExpressRoutePortsEncapsulation{ExpressRoutePortsEncapsulationDot1Q, ExpressRoutePortsEncapsulationQinQ} + return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ} } // ExtendedLocationTypes enumerates the values for extended location types. type ExtendedLocationTypes string const ( - // ExtendedLocationTypesEdgeZone ... - ExtendedLocationTypesEdgeZone ExtendedLocationTypes = "EdgeZone" + // EdgeZone ... + EdgeZone ExtendedLocationTypes = "EdgeZone" ) // PossibleExtendedLocationTypesValues returns an array of possible values for the ExtendedLocationTypes const type. func PossibleExtendedLocationTypesValues() []ExtendedLocationTypes { - return []ExtendedLocationTypes{ExtendedLocationTypesEdgeZone} + return []ExtendedLocationTypes{EdgeZone} } // FirewallPolicyFilterRuleCollectionActionType enumerates the values for firewall policy filter rule @@ -1172,15 +1412,15 @@ func PossibleFirewallPolicyFilterRuleCollectionActionTypeValues() []FirewallPoli type FirewallPolicyIDPSQuerySortOrder string const ( - // FirewallPolicyIDPSQuerySortOrderAscending ... - FirewallPolicyIDPSQuerySortOrderAscending FirewallPolicyIDPSQuerySortOrder = "Ascending" - // FirewallPolicyIDPSQuerySortOrderDescending ... - FirewallPolicyIDPSQuerySortOrderDescending FirewallPolicyIDPSQuerySortOrder = "Descending" + // Ascending ... + Ascending FirewallPolicyIDPSQuerySortOrder = "Ascending" + // Descending ... + Descending FirewallPolicyIDPSQuerySortOrder = "Descending" ) // PossibleFirewallPolicyIDPSQuerySortOrderValues returns an array of possible values for the FirewallPolicyIDPSQuerySortOrder const type. func PossibleFirewallPolicyIDPSQuerySortOrderValues() []FirewallPolicyIDPSQuerySortOrder { - return []FirewallPolicyIDPSQuerySortOrder{FirewallPolicyIDPSQuerySortOrderAscending, FirewallPolicyIDPSQuerySortOrderDescending} + return []FirewallPolicyIDPSQuerySortOrder{Ascending, Descending} } // FirewallPolicyIntrusionDetectionProtocol enumerates the values for firewall policy intrusion detection @@ -1226,13 +1466,13 @@ func PossibleFirewallPolicyIntrusionDetectionStateTypeValues() []FirewallPolicyI type FirewallPolicyNatRuleCollectionActionType string const ( - // FirewallPolicyNatRuleCollectionActionTypeDNAT ... - FirewallPolicyNatRuleCollectionActionTypeDNAT FirewallPolicyNatRuleCollectionActionType = "DNAT" + // DNAT ... + DNAT FirewallPolicyNatRuleCollectionActionType = "DNAT" ) // PossibleFirewallPolicyNatRuleCollectionActionTypeValues returns an array of possible values for the FirewallPolicyNatRuleCollectionActionType const type. func PossibleFirewallPolicyNatRuleCollectionActionTypeValues() []FirewallPolicyNatRuleCollectionActionType { - return []FirewallPolicyNatRuleCollectionActionType{FirewallPolicyNatRuleCollectionActionTypeDNAT} + return []FirewallPolicyNatRuleCollectionActionType{DNAT} } // FirewallPolicyRuleApplicationProtocolType enumerates the values for firewall policy rule application @@ -1291,13 +1531,13 @@ func PossibleFirewallPolicySkuTierValues() []FirewallPolicySkuTier { type FlowLogFormatType string const ( - // FlowLogFormatTypeJSON ... - FlowLogFormatTypeJSON FlowLogFormatType = "JSON" + // JSON ... + JSON FlowLogFormatType = "JSON" ) // PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type. func PossibleFlowLogFormatTypeValues() []FlowLogFormatType { - return []FlowLogFormatType{FlowLogFormatTypeJSON} + return []FlowLogFormatType{JSON} } // GatewayLoadBalancerTunnelInterfaceType enumerates the values for gateway load balancer tunnel interface @@ -1335,19 +1575,63 @@ func PossibleGatewayLoadBalancerTunnelProtocolValues() []GatewayLoadBalancerTunn return []GatewayLoadBalancerTunnelProtocol{GatewayLoadBalancerTunnelProtocolNative, GatewayLoadBalancerTunnelProtocolNone, GatewayLoadBalancerTunnelProtocolVXLAN} } +// Geo enumerates the values for geo. +type Geo string + +const ( + // AFRI ... + AFRI Geo = "AFRI" + // APAC ... + APAC Geo = "APAC" + // AQ ... + AQ Geo = "AQ" + // EURO ... + EURO Geo = "EURO" + // GLOBAL ... + GLOBAL Geo = "GLOBAL" + // LATAM ... + LATAM Geo = "LATAM" + // ME ... + ME Geo = "ME" + // NAM ... + NAM Geo = "NAM" + // OCEANIA ... + OCEANIA Geo = "OCEANIA" +) + +// PossibleGeoValues returns an array of possible values for the Geo const type. +func PossibleGeoValues() []Geo { + return []Geo{AFRI, APAC, AQ, EURO, GLOBAL, LATAM, ME, NAM, OCEANIA} +} + +// GroupConnectivity enumerates the values for group connectivity. +type GroupConnectivity string + +const ( + // GroupConnectivityDirectlyConnected ... + GroupConnectivityDirectlyConnected GroupConnectivity = "DirectlyConnected" + // GroupConnectivityNone ... + GroupConnectivityNone GroupConnectivity = "None" +) + +// PossibleGroupConnectivityValues returns an array of possible values for the GroupConnectivity const type. +func PossibleGroupConnectivityValues() []GroupConnectivity { + return []GroupConnectivity{GroupConnectivityDirectlyConnected, GroupConnectivityNone} +} + // HTTPConfigurationMethod enumerates the values for http configuration method. type HTTPConfigurationMethod string const ( - // HTTPConfigurationMethodGet ... - HTTPConfigurationMethodGet HTTPConfigurationMethod = "Get" - // HTTPConfigurationMethodPost ... - HTTPConfigurationMethodPost HTTPConfigurationMethod = "Post" + // Get ... + Get HTTPConfigurationMethod = "Get" + // Post ... + Post HTTPConfigurationMethod = "Post" ) // PossibleHTTPConfigurationMethodValues returns an array of possible values for the HTTPConfigurationMethod const type. func PossibleHTTPConfigurationMethodValues() []HTTPConfigurationMethod { - return []HTTPConfigurationMethod{HTTPConfigurationMethodGet, HTTPConfigurationMethodPost} + return []HTTPConfigurationMethod{Get, Post} } // HTTPMethod enumerates the values for http method. @@ -1422,25 +1706,25 @@ func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnec type IkeEncryption string const ( - // IkeEncryptionAES128 ... - IkeEncryptionAES128 IkeEncryption = "AES128" - // IkeEncryptionAES192 ... - IkeEncryptionAES192 IkeEncryption = "AES192" - // IkeEncryptionAES256 ... - IkeEncryptionAES256 IkeEncryption = "AES256" - // IkeEncryptionDES ... - IkeEncryptionDES IkeEncryption = "DES" - // IkeEncryptionDES3 ... - IkeEncryptionDES3 IkeEncryption = "DES3" - // IkeEncryptionGCMAES128 ... - IkeEncryptionGCMAES128 IkeEncryption = "GCMAES128" - // IkeEncryptionGCMAES256 ... - IkeEncryptionGCMAES256 IkeEncryption = "GCMAES256" + // AES128 ... + AES128 IkeEncryption = "AES128" + // AES192 ... + AES192 IkeEncryption = "AES192" + // AES256 ... + AES256 IkeEncryption = "AES256" + // DES ... + DES IkeEncryption = "DES" + // DES3 ... + DES3 IkeEncryption = "DES3" + // GCMAES128 ... + GCMAES128 IkeEncryption = "GCMAES128" + // GCMAES256 ... + GCMAES256 IkeEncryption = "GCMAES256" ) // PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type. func PossibleIkeEncryptionValues() []IkeEncryption { - return []IkeEncryption{IkeEncryptionAES128, IkeEncryptionAES192, IkeEncryptionAES256, IkeEncryptionDES, IkeEncryptionDES3, IkeEncryptionGCMAES128, IkeEncryptionGCMAES256} + return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256} } // IkeIntegrity enumerates the values for ike integrity. @@ -1481,6 +1765,23 @@ func PossibleInboundSecurityRulesProtocolValues() []InboundSecurityRulesProtocol return []InboundSecurityRulesProtocol{InboundSecurityRulesProtocolTCP, InboundSecurityRulesProtocolUDP} } +// IntentPolicyBasedService enumerates the values for intent policy based service. +type IntentPolicyBasedService string + +const ( + // IntentPolicyBasedServiceAll ... + IntentPolicyBasedServiceAll IntentPolicyBasedService = "All" + // IntentPolicyBasedServiceAllowRulesOnly ... + IntentPolicyBasedServiceAllowRulesOnly IntentPolicyBasedService = "AllowRulesOnly" + // IntentPolicyBasedServiceNone ... + IntentPolicyBasedServiceNone IntentPolicyBasedService = "None" +) + +// PossibleIntentPolicyBasedServiceValues returns an array of possible values for the IntentPolicyBasedService const type. +func PossibleIntentPolicyBasedServiceValues() []IntentPolicyBasedService { + return []IntentPolicyBasedService{IntentPolicyBasedServiceAll, IntentPolicyBasedServiceAllowRulesOnly, IntentPolicyBasedServiceNone} +} + // InterfaceAuxiliaryMode enumerates the values for interface auxiliary mode. type InterfaceAuxiliaryMode string @@ -1523,45 +1824,45 @@ func PossibleInterfaceMigrationPhaseValues() []InterfaceMigrationPhase { type InterfaceNicType string const ( - // InterfaceNicTypeElastic ... - InterfaceNicTypeElastic InterfaceNicType = "Elastic" - // InterfaceNicTypeStandard ... - InterfaceNicTypeStandard InterfaceNicType = "Standard" + // Elastic ... + Elastic InterfaceNicType = "Elastic" + // Standard ... + Standard InterfaceNicType = "Standard" ) // PossibleInterfaceNicTypeValues returns an array of possible values for the InterfaceNicType const type. func PossibleInterfaceNicTypeValues() []InterfaceNicType { - return []InterfaceNicType{InterfaceNicTypeElastic, InterfaceNicTypeStandard} + return []InterfaceNicType{Elastic, Standard} } // IPAllocationMethod enumerates the values for ip allocation method. type IPAllocationMethod string const ( - // IPAllocationMethodDynamic ... - IPAllocationMethodDynamic IPAllocationMethod = "Dynamic" - // IPAllocationMethodStatic ... - IPAllocationMethodStatic IPAllocationMethod = "Static" + // Dynamic ... + Dynamic IPAllocationMethod = "Dynamic" + // Static ... + Static IPAllocationMethod = "Static" ) // PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type. func PossibleIPAllocationMethodValues() []IPAllocationMethod { - return []IPAllocationMethod{IPAllocationMethodDynamic, IPAllocationMethodStatic} + return []IPAllocationMethod{Dynamic, Static} } // IPAllocationType enumerates the values for ip allocation type. type IPAllocationType string const ( - // IPAllocationTypeHypernet ... - IPAllocationTypeHypernet IPAllocationType = "Hypernet" - // IPAllocationTypeUndefined ... - IPAllocationTypeUndefined IPAllocationType = "Undefined" + // Hypernet ... + Hypernet IPAllocationType = "Hypernet" + // Undefined ... + Undefined IPAllocationType = "Undefined" ) // PossibleIPAllocationTypeValues returns an array of possible values for the IPAllocationType const type. func PossibleIPAllocationTypeValues() []IPAllocationType { - return []IPAllocationType{IPAllocationTypeHypernet, IPAllocationTypeUndefined} + return []IPAllocationType{Hypernet, Undefined} } // IPFlowProtocol enumerates the values for ip flow protocol. @@ -1635,15 +1936,30 @@ func PossibleIpsecIntegrityValues() []IpsecIntegrity { type IPVersion string const ( - // IPVersionIPv4 ... - IPVersionIPv4 IPVersion = "IPv4" - // IPVersionIPv6 ... - IPVersionIPv6 IPVersion = "IPv6" + // IPv4 ... + IPv4 IPVersion = "IPv4" + // IPv6 ... + IPv6 IPVersion = "IPv6" ) // PossibleIPVersionValues returns an array of possible values for the IPVersion const type. func PossibleIPVersionValues() []IPVersion { - return []IPVersion{IPVersionIPv4, IPVersionIPv6} + return []IPVersion{IPv4, IPv6} +} + +// IsGlobal enumerates the values for is global. +type IsGlobal string + +const ( + // IsGlobalFalse ... + IsGlobalFalse IsGlobal = "False" + // IsGlobalTrue ... + IsGlobalTrue IsGlobal = "True" +) + +// PossibleIsGlobalValues returns an array of possible values for the IsGlobal const type. +func PossibleIsGlobalValues() []IsGlobal { + return []IsGlobal{IsGlobalFalse, IsGlobalTrue} } // IssueType enumerates the values for issue type. @@ -1675,6 +1991,73 @@ func PossibleIssueTypeValues() []IssueType { return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute} } +// IsWorkloadProtected enumerates the values for is workload protected. +type IsWorkloadProtected string + +const ( + // IsWorkloadProtectedFalse ... + IsWorkloadProtectedFalse IsWorkloadProtected = "False" + // IsWorkloadProtectedTrue ... + IsWorkloadProtectedTrue IsWorkloadProtected = "True" +) + +// PossibleIsWorkloadProtectedValues returns an array of possible values for the IsWorkloadProtected const type. +func PossibleIsWorkloadProtectedValues() []IsWorkloadProtected { + return []IsWorkloadProtected{IsWorkloadProtectedFalse, IsWorkloadProtectedTrue} +} + +// Kind enumerates the values for kind. +type Kind string + +const ( + // KindActiveBaseSecurityAdminRule ... + KindActiveBaseSecurityAdminRule Kind = "ActiveBaseSecurityAdminRule" + // KindCustom ... + KindCustom Kind = "Custom" + // KindDefault ... + KindDefault Kind = "Default" +) + +// PossibleKindValues returns an array of possible values for the Kind const type. +func PossibleKindValues() []Kind { + return []Kind{KindActiveBaseSecurityAdminRule, KindCustom, KindDefault} +} + +// KindBasicBaseAdminRule enumerates the values for kind basic base admin rule. +type KindBasicBaseAdminRule string + +const ( + // KindBasicBaseAdminRuleKindBaseAdminRule ... + KindBasicBaseAdminRuleKindBaseAdminRule KindBasicBaseAdminRule = "BaseAdminRule" + // KindBasicBaseAdminRuleKindCustom ... + KindBasicBaseAdminRuleKindCustom KindBasicBaseAdminRule = "Custom" + // KindBasicBaseAdminRuleKindDefault ... + KindBasicBaseAdminRuleKindDefault KindBasicBaseAdminRule = "Default" +) + +// PossibleKindBasicBaseAdminRuleValues returns an array of possible values for the KindBasicBaseAdminRule const type. +func PossibleKindBasicBaseAdminRuleValues() []KindBasicBaseAdminRule { + return []KindBasicBaseAdminRule{KindBasicBaseAdminRuleKindBaseAdminRule, KindBasicBaseAdminRuleKindCustom, KindBasicBaseAdminRuleKindDefault} +} + +// KindBasicEffectiveBaseSecurityAdminRule enumerates the values for kind basic effective base security admin +// rule. +type KindBasicEffectiveBaseSecurityAdminRule string + +const ( + // KindBasicEffectiveBaseSecurityAdminRuleKindCustom ... + KindBasicEffectiveBaseSecurityAdminRuleKindCustom KindBasicEffectiveBaseSecurityAdminRule = "Custom" + // KindBasicEffectiveBaseSecurityAdminRuleKindDefault ... + KindBasicEffectiveBaseSecurityAdminRuleKindDefault KindBasicEffectiveBaseSecurityAdminRule = "Default" + // KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule ... + KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule KindBasicEffectiveBaseSecurityAdminRule = "EffectiveBaseSecurityAdminRule" +) + +// PossibleKindBasicEffectiveBaseSecurityAdminRuleValues returns an array of possible values for the KindBasicEffectiveBaseSecurityAdminRule const type. +func PossibleKindBasicEffectiveBaseSecurityAdminRuleValues() []KindBasicEffectiveBaseSecurityAdminRule { + return []KindBasicEffectiveBaseSecurityAdminRule{KindBasicEffectiveBaseSecurityAdminRuleKindCustom, KindBasicEffectiveBaseSecurityAdminRuleKindDefault, KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule} +} + // LoadBalancerBackendAddressAdminState enumerates the values for load balancer backend address admin state. type LoadBalancerBackendAddressAdminState string @@ -1732,15 +2115,15 @@ func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName { type LoadBalancerSkuTier string const ( - // LoadBalancerSkuTierGlobal ... - LoadBalancerSkuTierGlobal LoadBalancerSkuTier = "Global" - // LoadBalancerSkuTierRegional ... - LoadBalancerSkuTierRegional LoadBalancerSkuTier = "Regional" + // Global ... + Global LoadBalancerSkuTier = "Global" + // Regional ... + Regional LoadBalancerSkuTier = "Regional" ) // PossibleLoadBalancerSkuTierValues returns an array of possible values for the LoadBalancerSkuTier const type. func PossibleLoadBalancerSkuTierValues() []LoadBalancerSkuTier { - return []LoadBalancerSkuTier{LoadBalancerSkuTierGlobal, LoadBalancerSkuTierRegional} + return []LoadBalancerSkuTier{Global, Regional} } // LoadDistribution enumerates the values for load distribution. @@ -1766,11 +2149,13 @@ type ManagedRuleEnabledState string const ( // ManagedRuleEnabledStateDisabled ... ManagedRuleEnabledStateDisabled ManagedRuleEnabledState = "Disabled" + // ManagedRuleEnabledStateEnabled ... + ManagedRuleEnabledStateEnabled ManagedRuleEnabledState = "Enabled" ) // PossibleManagedRuleEnabledStateValues returns an array of possible values for the ManagedRuleEnabledState const type. func PossibleManagedRuleEnabledStateValues() []ManagedRuleEnabledState { - return []ManagedRuleEnabledState{ManagedRuleEnabledStateDisabled} + return []ManagedRuleEnabledState{ManagedRuleEnabledStateDisabled, ManagedRuleEnabledStateEnabled} } // NatGatewaySkuName enumerates the values for nat gateway sku name. @@ -1809,6 +2194,23 @@ func PossibleNextHopTypeValues() []NextHopType { return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal} } +// NextStep enumerates the values for next step. +type NextStep string + +const ( + // NextStepContinue ... + NextStepContinue NextStep = "Continue" + // NextStepTerminate ... + NextStepTerminate NextStep = "Terminate" + // NextStepUnknown ... + NextStepUnknown NextStep = "Unknown" +) + +// PossibleNextStepValues returns an array of possible values for the NextStep const type. +func PossibleNextStepValues() []NextStep { + return []NextStep{NextStepContinue, NextStepTerminate, NextStepUnknown} +} + // OfficeTrafficCategory enumerates the values for office traffic category. type OfficeTrafficCategory string @@ -1866,42 +2268,42 @@ func PossibleOriginValues() []Origin { type OutputType string const ( - // OutputTypeWorkspace ... - OutputTypeWorkspace OutputType = "Workspace" + // Workspace ... + Workspace OutputType = "Workspace" ) // PossibleOutputTypeValues returns an array of possible values for the OutputType const type. func PossibleOutputTypeValues() []OutputType { - return []OutputType{OutputTypeWorkspace} + return []OutputType{Workspace} } // OwaspCrsExclusionEntryMatchVariable enumerates the values for owasp crs exclusion entry match variable. type OwaspCrsExclusionEntryMatchVariable string const ( - // OwaspCrsExclusionEntryMatchVariableRequestArgKeys ... - OwaspCrsExclusionEntryMatchVariableRequestArgKeys OwaspCrsExclusionEntryMatchVariable = "RequestArgKeys" - // OwaspCrsExclusionEntryMatchVariableRequestArgNames ... - OwaspCrsExclusionEntryMatchVariableRequestArgNames OwaspCrsExclusionEntryMatchVariable = "RequestArgNames" - // OwaspCrsExclusionEntryMatchVariableRequestArgValues ... - OwaspCrsExclusionEntryMatchVariableRequestArgValues OwaspCrsExclusionEntryMatchVariable = "RequestArgValues" - // OwaspCrsExclusionEntryMatchVariableRequestCookieKeys ... - OwaspCrsExclusionEntryMatchVariableRequestCookieKeys OwaspCrsExclusionEntryMatchVariable = "RequestCookieKeys" - // OwaspCrsExclusionEntryMatchVariableRequestCookieNames ... - OwaspCrsExclusionEntryMatchVariableRequestCookieNames OwaspCrsExclusionEntryMatchVariable = "RequestCookieNames" - // OwaspCrsExclusionEntryMatchVariableRequestCookieValues ... - OwaspCrsExclusionEntryMatchVariableRequestCookieValues OwaspCrsExclusionEntryMatchVariable = "RequestCookieValues" - // OwaspCrsExclusionEntryMatchVariableRequestHeaderKeys ... - OwaspCrsExclusionEntryMatchVariableRequestHeaderKeys OwaspCrsExclusionEntryMatchVariable = "RequestHeaderKeys" - // OwaspCrsExclusionEntryMatchVariableRequestHeaderNames ... - OwaspCrsExclusionEntryMatchVariableRequestHeaderNames OwaspCrsExclusionEntryMatchVariable = "RequestHeaderNames" - // OwaspCrsExclusionEntryMatchVariableRequestHeaderValues ... - OwaspCrsExclusionEntryMatchVariableRequestHeaderValues OwaspCrsExclusionEntryMatchVariable = "RequestHeaderValues" + // RequestArgKeys ... + RequestArgKeys OwaspCrsExclusionEntryMatchVariable = "RequestArgKeys" + // RequestArgNames ... + RequestArgNames OwaspCrsExclusionEntryMatchVariable = "RequestArgNames" + // RequestArgValues ... + RequestArgValues OwaspCrsExclusionEntryMatchVariable = "RequestArgValues" + // RequestCookieKeys ... + RequestCookieKeys OwaspCrsExclusionEntryMatchVariable = "RequestCookieKeys" + // RequestCookieNames ... + RequestCookieNames OwaspCrsExclusionEntryMatchVariable = "RequestCookieNames" + // RequestCookieValues ... + RequestCookieValues OwaspCrsExclusionEntryMatchVariable = "RequestCookieValues" + // RequestHeaderKeys ... + RequestHeaderKeys OwaspCrsExclusionEntryMatchVariable = "RequestHeaderKeys" + // RequestHeaderNames ... + RequestHeaderNames OwaspCrsExclusionEntryMatchVariable = "RequestHeaderNames" + // RequestHeaderValues ... + RequestHeaderValues OwaspCrsExclusionEntryMatchVariable = "RequestHeaderValues" ) // PossibleOwaspCrsExclusionEntryMatchVariableValues returns an array of possible values for the OwaspCrsExclusionEntryMatchVariable const type. func PossibleOwaspCrsExclusionEntryMatchVariableValues() []OwaspCrsExclusionEntryMatchVariable { - return []OwaspCrsExclusionEntryMatchVariable{OwaspCrsExclusionEntryMatchVariableRequestArgKeys, OwaspCrsExclusionEntryMatchVariableRequestArgNames, OwaspCrsExclusionEntryMatchVariableRequestArgValues, OwaspCrsExclusionEntryMatchVariableRequestCookieKeys, OwaspCrsExclusionEntryMatchVariableRequestCookieNames, OwaspCrsExclusionEntryMatchVariableRequestCookieValues, OwaspCrsExclusionEntryMatchVariableRequestHeaderKeys, OwaspCrsExclusionEntryMatchVariableRequestHeaderNames, OwaspCrsExclusionEntryMatchVariableRequestHeaderValues} + return []OwaspCrsExclusionEntryMatchVariable{RequestArgKeys, RequestArgNames, RequestArgValues, RequestCookieKeys, RequestCookieNames, RequestCookieValues, RequestHeaderKeys, RequestHeaderNames, RequestHeaderValues} } // OwaspCrsExclusionEntrySelectorMatchOperator enumerates the values for owasp crs exclusion entry selector @@ -1926,25 +2328,40 @@ func PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues() []OwaspCrsExclu return []OwaspCrsExclusionEntrySelectorMatchOperator{OwaspCrsExclusionEntrySelectorMatchOperatorContains, OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith, OwaspCrsExclusionEntrySelectorMatchOperatorEquals, OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny, OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith} } +// PacketCaptureTargetType enumerates the values for packet capture target type. +type PacketCaptureTargetType string + +const ( + // PacketCaptureTargetTypeAzureVM ... + PacketCaptureTargetTypeAzureVM PacketCaptureTargetType = "AzureVM" + // PacketCaptureTargetTypeAzureVMSS ... + PacketCaptureTargetTypeAzureVMSS PacketCaptureTargetType = "AzureVMSS" +) + +// PossiblePacketCaptureTargetTypeValues returns an array of possible values for the PacketCaptureTargetType const type. +func PossiblePacketCaptureTargetTypeValues() []PacketCaptureTargetType { + return []PacketCaptureTargetType{PacketCaptureTargetTypeAzureVM, PacketCaptureTargetTypeAzureVMSS} +} + // PcError enumerates the values for pc error. type PcError string const ( - // PcErrorAgentStopped ... - PcErrorAgentStopped PcError = "AgentStopped" - // PcErrorCaptureFailed ... - PcErrorCaptureFailed PcError = "CaptureFailed" - // PcErrorInternalError ... - PcErrorInternalError PcError = "InternalError" - // PcErrorLocalFileFailed ... - PcErrorLocalFileFailed PcError = "LocalFileFailed" - // PcErrorStorageFailed ... - PcErrorStorageFailed PcError = "StorageFailed" + // AgentStopped ... + AgentStopped PcError = "AgentStopped" + // CaptureFailed ... + CaptureFailed PcError = "CaptureFailed" + // InternalError ... + InternalError PcError = "InternalError" + // LocalFileFailed ... + LocalFileFailed PcError = "LocalFileFailed" + // StorageFailed ... + StorageFailed PcError = "StorageFailed" ) // PossiblePcErrorValues returns an array of possible values for the PcError const type. func PossiblePcErrorValues() []PcError { - return []PcError{PcErrorAgentStopped, PcErrorCaptureFailed, PcErrorInternalError, PcErrorLocalFileFailed, PcErrorStorageFailed} + return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed} } // PcProtocol enumerates the values for pc protocol. @@ -2067,15 +2484,15 @@ func PossibleProbeProtocolValues() []ProbeProtocol { type ProcessorArchitecture string const ( - // ProcessorArchitectureAmd64 ... - ProcessorArchitectureAmd64 ProcessorArchitecture = "Amd64" - // ProcessorArchitectureX86 ... - ProcessorArchitectureX86 ProcessorArchitecture = "X86" + // Amd64 ... + Amd64 ProcessorArchitecture = "Amd64" + // X86 ... + X86 ProcessorArchitecture = "X86" ) // PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type. func PossibleProcessorArchitectureValues() []ProcessorArchitecture { - return []ProcessorArchitecture{ProcessorArchitectureAmd64, ProcessorArchitectureX86} + return []ProcessorArchitecture{Amd64, X86} } // Protocol enumerates the values for protocol. @@ -2243,6 +2660,48 @@ func PossibleResourceIdentityTypeValues() []ResourceIdentityType { return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned} } +// RouteMapActionType enumerates the values for route map action type. +type RouteMapActionType string + +const ( + // RouteMapActionTypeAdd ... + RouteMapActionTypeAdd RouteMapActionType = "Add" + // RouteMapActionTypeDrop ... + RouteMapActionTypeDrop RouteMapActionType = "Drop" + // RouteMapActionTypeRemove ... + RouteMapActionTypeRemove RouteMapActionType = "Remove" + // RouteMapActionTypeReplace ... + RouteMapActionTypeReplace RouteMapActionType = "Replace" + // RouteMapActionTypeUnknown ... + RouteMapActionTypeUnknown RouteMapActionType = "Unknown" +) + +// PossibleRouteMapActionTypeValues returns an array of possible values for the RouteMapActionType const type. +func PossibleRouteMapActionTypeValues() []RouteMapActionType { + return []RouteMapActionType{RouteMapActionTypeAdd, RouteMapActionTypeDrop, RouteMapActionTypeRemove, RouteMapActionTypeReplace, RouteMapActionTypeUnknown} +} + +// RouteMapMatchCondition enumerates the values for route map match condition. +type RouteMapMatchCondition string + +const ( + // RouteMapMatchConditionContains ... + RouteMapMatchConditionContains RouteMapMatchCondition = "Contains" + // RouteMapMatchConditionEquals ... + RouteMapMatchConditionEquals RouteMapMatchCondition = "Equals" + // RouteMapMatchConditionNotContains ... + RouteMapMatchConditionNotContains RouteMapMatchCondition = "NotContains" + // RouteMapMatchConditionNotEquals ... + RouteMapMatchConditionNotEquals RouteMapMatchCondition = "NotEquals" + // RouteMapMatchConditionUnknown ... + RouteMapMatchConditionUnknown RouteMapMatchCondition = "Unknown" +) + +// PossibleRouteMapMatchConditionValues returns an array of possible values for the RouteMapMatchCondition const type. +func PossibleRouteMapMatchConditionValues() []RouteMapMatchCondition { + return []RouteMapMatchCondition{RouteMapMatchConditionContains, RouteMapMatchConditionEquals, RouteMapMatchConditionNotContains, RouteMapMatchConditionNotEquals, RouteMapMatchConditionUnknown} +} + // RouteNextHopType enumerates the values for route next hop type. type RouteNextHopType string @@ -2319,6 +2778,82 @@ func PossibleRuleTypeValues() []RuleType { return []RuleType{RuleTypeApplicationRule, RuleTypeFirewallPolicyRule, RuleTypeNatRule, RuleTypeNetworkRule} } +// ScopeConnectionState enumerates the values for scope connection state. +type ScopeConnectionState string + +const ( + // ScopeConnectionStateConflict ... + ScopeConnectionStateConflict ScopeConnectionState = "Conflict" + // ScopeConnectionStateConnected ... + ScopeConnectionStateConnected ScopeConnectionState = "Connected" + // ScopeConnectionStatePending ... + ScopeConnectionStatePending ScopeConnectionState = "Pending" + // ScopeConnectionStateRejected ... + ScopeConnectionStateRejected ScopeConnectionState = "Rejected" + // ScopeConnectionStateRevoked ... + ScopeConnectionStateRevoked ScopeConnectionState = "Revoked" +) + +// PossibleScopeConnectionStateValues returns an array of possible values for the ScopeConnectionState const type. +func PossibleScopeConnectionStateValues() []ScopeConnectionState { + return []ScopeConnectionState{ScopeConnectionStateConflict, ScopeConnectionStateConnected, ScopeConnectionStatePending, ScopeConnectionStateRejected, ScopeConnectionStateRevoked} +} + +// SecurityConfigurationRuleAccess enumerates the values for security configuration rule access. +type SecurityConfigurationRuleAccess string + +const ( + // SecurityConfigurationRuleAccessAllow ... + SecurityConfigurationRuleAccessAllow SecurityConfigurationRuleAccess = "Allow" + // SecurityConfigurationRuleAccessAlwaysAllow ... + SecurityConfigurationRuleAccessAlwaysAllow SecurityConfigurationRuleAccess = "AlwaysAllow" + // SecurityConfigurationRuleAccessDeny ... + SecurityConfigurationRuleAccessDeny SecurityConfigurationRuleAccess = "Deny" +) + +// PossibleSecurityConfigurationRuleAccessValues returns an array of possible values for the SecurityConfigurationRuleAccess const type. +func PossibleSecurityConfigurationRuleAccessValues() []SecurityConfigurationRuleAccess { + return []SecurityConfigurationRuleAccess{SecurityConfigurationRuleAccessAllow, SecurityConfigurationRuleAccessAlwaysAllow, SecurityConfigurationRuleAccessDeny} +} + +// SecurityConfigurationRuleDirection enumerates the values for security configuration rule direction. +type SecurityConfigurationRuleDirection string + +const ( + // SecurityConfigurationRuleDirectionInbound ... + SecurityConfigurationRuleDirectionInbound SecurityConfigurationRuleDirection = "Inbound" + // SecurityConfigurationRuleDirectionOutbound ... + SecurityConfigurationRuleDirectionOutbound SecurityConfigurationRuleDirection = "Outbound" +) + +// PossibleSecurityConfigurationRuleDirectionValues returns an array of possible values for the SecurityConfigurationRuleDirection const type. +func PossibleSecurityConfigurationRuleDirectionValues() []SecurityConfigurationRuleDirection { + return []SecurityConfigurationRuleDirection{SecurityConfigurationRuleDirectionInbound, SecurityConfigurationRuleDirectionOutbound} +} + +// SecurityConfigurationRuleProtocol enumerates the values for security configuration rule protocol. +type SecurityConfigurationRuleProtocol string + +const ( + // SecurityConfigurationRuleProtocolAh ... + SecurityConfigurationRuleProtocolAh SecurityConfigurationRuleProtocol = "Ah" + // SecurityConfigurationRuleProtocolAny ... + SecurityConfigurationRuleProtocolAny SecurityConfigurationRuleProtocol = "Any" + // SecurityConfigurationRuleProtocolEsp ... + SecurityConfigurationRuleProtocolEsp SecurityConfigurationRuleProtocol = "Esp" + // SecurityConfigurationRuleProtocolIcmp ... + SecurityConfigurationRuleProtocolIcmp SecurityConfigurationRuleProtocol = "Icmp" + // SecurityConfigurationRuleProtocolTCP ... + SecurityConfigurationRuleProtocolTCP SecurityConfigurationRuleProtocol = "Tcp" + // SecurityConfigurationRuleProtocolUDP ... + SecurityConfigurationRuleProtocolUDP SecurityConfigurationRuleProtocol = "Udp" +) + +// PossibleSecurityConfigurationRuleProtocolValues returns an array of possible values for the SecurityConfigurationRuleProtocol const type. +func PossibleSecurityConfigurationRuleProtocolValues() []SecurityConfigurationRuleProtocol { + return []SecurityConfigurationRuleProtocol{SecurityConfigurationRuleProtocolAh, SecurityConfigurationRuleProtocolAny, SecurityConfigurationRuleProtocolEsp, SecurityConfigurationRuleProtocolIcmp, SecurityConfigurationRuleProtocolTCP, SecurityConfigurationRuleProtocolUDP} +} + // SecurityPartnerProviderConnectionStatus enumerates the values for security partner provider connection // status. type SecurityPartnerProviderConnectionStatus string @@ -2343,17 +2878,17 @@ func PossibleSecurityPartnerProviderConnectionStatusValues() []SecurityPartnerPr type SecurityProviderName string const ( - // SecurityProviderNameCheckpoint ... - SecurityProviderNameCheckpoint SecurityProviderName = "Checkpoint" - // SecurityProviderNameIBoss ... - SecurityProviderNameIBoss SecurityProviderName = "IBoss" - // SecurityProviderNameZScaler ... - SecurityProviderNameZScaler SecurityProviderName = "ZScaler" + // Checkpoint ... + Checkpoint SecurityProviderName = "Checkpoint" + // IBoss ... + IBoss SecurityProviderName = "IBoss" + // ZScaler ... + ZScaler SecurityProviderName = "ZScaler" ) // PossibleSecurityProviderNameValues returns an array of possible values for the SecurityProviderName const type. func PossibleSecurityProviderNameValues() []SecurityProviderName { - return []SecurityProviderName{SecurityProviderNameCheckpoint, SecurityProviderNameIBoss, SecurityProviderNameZScaler} + return []SecurityProviderName{Checkpoint, IBoss, ZScaler} } // SecurityRuleAccess enumerates the values for security rule access. @@ -2443,6 +2978,21 @@ func PossibleSeverityValues() []Severity { return []Severity{SeverityError, SeverityWarning} } +// SlotType enumerates the values for slot type. +type SlotType string + +const ( + // Production ... + Production SlotType = "Production" + // Staging ... + Staging SlotType = "Staging" +) + +// PossibleSlotTypeValues returns an array of possible values for the SlotType const type. +func PossibleSlotTypeValues() []SlotType { + return []SlotType{Production, Staging} +} + // SyncRemoteAddressSpace enumerates the values for sync remote address space. type SyncRemoteAddressSpace string @@ -2492,6 +3042,21 @@ func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus { return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown} } +// UseHubGateway enumerates the values for use hub gateway. +type UseHubGateway string + +const ( + // UseHubGatewayFalse ... + UseHubGatewayFalse UseHubGateway = "False" + // UseHubGatewayTrue ... + UseHubGatewayTrue UseHubGateway = "True" +) + +// PossibleUseHubGatewayValues returns an array of possible values for the UseHubGateway const type. +func PossibleUseHubGatewayValues() []UseHubGateway { + return []UseHubGateway{UseHubGatewayFalse, UseHubGatewayTrue} +} + // VerbosityLevel enumerates the values for verbosity level. type VerbosityLevel string @@ -2513,15 +3078,15 @@ func PossibleVerbosityLevelValues() []VerbosityLevel { type VirtualNetworkEncryptionEnforcement string const ( - // VirtualNetworkEncryptionEnforcementAllowUnencrypted ... - VirtualNetworkEncryptionEnforcementAllowUnencrypted VirtualNetworkEncryptionEnforcement = "AllowUnencrypted" - // VirtualNetworkEncryptionEnforcementDropUnencrypted ... - VirtualNetworkEncryptionEnforcementDropUnencrypted VirtualNetworkEncryptionEnforcement = "DropUnencrypted" + // AllowUnencrypted ... + AllowUnencrypted VirtualNetworkEncryptionEnforcement = "AllowUnencrypted" + // DropUnencrypted ... + DropUnencrypted VirtualNetworkEncryptionEnforcement = "DropUnencrypted" ) // PossibleVirtualNetworkEncryptionEnforcementValues returns an array of possible values for the VirtualNetworkEncryptionEnforcement const type. func PossibleVirtualNetworkEncryptionEnforcementValues() []VirtualNetworkEncryptionEnforcement { - return []VirtualNetworkEncryptionEnforcement{VirtualNetworkEncryptionEnforcementAllowUnencrypted, VirtualNetworkEncryptionEnforcementDropUnencrypted} + return []VirtualNetworkEncryptionEnforcement{AllowUnencrypted, DropUnencrypted} } // VirtualNetworkGatewayConnectionMode enumerates the values for virtual network gateway connection mode. @@ -2546,15 +3111,15 @@ func PossibleVirtualNetworkGatewayConnectionModeValues() []VirtualNetworkGateway type VirtualNetworkGatewayConnectionProtocol string const ( - // VirtualNetworkGatewayConnectionProtocolIKEv1 ... - VirtualNetworkGatewayConnectionProtocolIKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1" - // VirtualNetworkGatewayConnectionProtocolIKEv2 ... - VirtualNetworkGatewayConnectionProtocolIKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2" + // IKEv1 ... + IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1" + // IKEv2 ... + IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2" ) // PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type. func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol { - return []VirtualNetworkGatewayConnectionProtocol{VirtualNetworkGatewayConnectionProtocolIKEv1, VirtualNetworkGatewayConnectionProtocolIKEv2} + return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2} } // VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status. @@ -2580,19 +3145,19 @@ func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatew type VirtualNetworkGatewayConnectionType string const ( - // VirtualNetworkGatewayConnectionTypeExpressRoute ... - VirtualNetworkGatewayConnectionTypeExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute" - // VirtualNetworkGatewayConnectionTypeIPsec ... - VirtualNetworkGatewayConnectionTypeIPsec VirtualNetworkGatewayConnectionType = "IPsec" - // VirtualNetworkGatewayConnectionTypeVnet2Vnet ... - VirtualNetworkGatewayConnectionTypeVnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet" - // VirtualNetworkGatewayConnectionTypeVPNClient ... - VirtualNetworkGatewayConnectionTypeVPNClient VirtualNetworkGatewayConnectionType = "VPNClient" + // ExpressRoute ... + ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute" + // IPsec ... + IPsec VirtualNetworkGatewayConnectionType = "IPsec" + // Vnet2Vnet ... + Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet" + // VPNClient ... + VPNClient VirtualNetworkGatewayConnectionType = "VPNClient" ) // PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type. func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType { - return []VirtualNetworkGatewayConnectionType{VirtualNetworkGatewayConnectionTypeExpressRoute, VirtualNetworkGatewayConnectionTypeIPsec, VirtualNetworkGatewayConnectionTypeVnet2Vnet, VirtualNetworkGatewayConnectionTypeVPNClient} + return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient} } // VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name. @@ -2706,19 +3271,19 @@ func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType { type VirtualNetworkPeeringLevel string const ( - // VirtualNetworkPeeringLevelFullyInSync ... - VirtualNetworkPeeringLevelFullyInSync VirtualNetworkPeeringLevel = "FullyInSync" - // VirtualNetworkPeeringLevelLocalAndRemoteNotInSync ... - VirtualNetworkPeeringLevelLocalAndRemoteNotInSync VirtualNetworkPeeringLevel = "LocalAndRemoteNotInSync" - // VirtualNetworkPeeringLevelLocalNotInSync ... - VirtualNetworkPeeringLevelLocalNotInSync VirtualNetworkPeeringLevel = "LocalNotInSync" - // VirtualNetworkPeeringLevelRemoteNotInSync ... - VirtualNetworkPeeringLevelRemoteNotInSync VirtualNetworkPeeringLevel = "RemoteNotInSync" + // FullyInSync ... + FullyInSync VirtualNetworkPeeringLevel = "FullyInSync" + // LocalAndRemoteNotInSync ... + LocalAndRemoteNotInSync VirtualNetworkPeeringLevel = "LocalAndRemoteNotInSync" + // LocalNotInSync ... + LocalNotInSync VirtualNetworkPeeringLevel = "LocalNotInSync" + // RemoteNotInSync ... + RemoteNotInSync VirtualNetworkPeeringLevel = "RemoteNotInSync" ) // PossibleVirtualNetworkPeeringLevelValues returns an array of possible values for the VirtualNetworkPeeringLevel const type. func PossibleVirtualNetworkPeeringLevelValues() []VirtualNetworkPeeringLevel { - return []VirtualNetworkPeeringLevel{VirtualNetworkPeeringLevelFullyInSync, VirtualNetworkPeeringLevelLocalAndRemoteNotInSync, VirtualNetworkPeeringLevelLocalNotInSync, VirtualNetworkPeeringLevelRemoteNotInSync} + return []VirtualNetworkPeeringLevel{FullyInSync, LocalAndRemoteNotInSync, LocalNotInSync, RemoteNotInSync} } // VirtualNetworkPeeringState enumerates the values for virtual network peering state. @@ -2774,49 +3339,64 @@ func PossibleVirtualNetworkPrivateLinkServiceNetworkPoliciesValues() []VirtualNe type VirtualWanSecurityProviderType string const ( - // VirtualWanSecurityProviderTypeExternal ... - VirtualWanSecurityProviderTypeExternal VirtualWanSecurityProviderType = "External" - // VirtualWanSecurityProviderTypeNative ... - VirtualWanSecurityProviderTypeNative VirtualWanSecurityProviderType = "Native" + // External ... + External VirtualWanSecurityProviderType = "External" + // Native ... + Native VirtualWanSecurityProviderType = "Native" ) // PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type. func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType { - return []VirtualWanSecurityProviderType{VirtualWanSecurityProviderTypeExternal, VirtualWanSecurityProviderTypeNative} + return []VirtualWanSecurityProviderType{External, Native} +} + +// VnetLocalRouteOverrideCriteria enumerates the values for vnet local route override criteria. +type VnetLocalRouteOverrideCriteria string + +const ( + // VnetLocalRouteOverrideCriteriaContains ... + VnetLocalRouteOverrideCriteriaContains VnetLocalRouteOverrideCriteria = "Contains" + // VnetLocalRouteOverrideCriteriaEqual ... + VnetLocalRouteOverrideCriteriaEqual VnetLocalRouteOverrideCriteria = "Equal" +) + +// PossibleVnetLocalRouteOverrideCriteriaValues returns an array of possible values for the VnetLocalRouteOverrideCriteria const type. +func PossibleVnetLocalRouteOverrideCriteriaValues() []VnetLocalRouteOverrideCriteria { + return []VnetLocalRouteOverrideCriteria{VnetLocalRouteOverrideCriteriaContains, VnetLocalRouteOverrideCriteriaEqual} } // VpnAuthenticationType enumerates the values for vpn authentication type. type VpnAuthenticationType string const ( - // VpnAuthenticationTypeAAD ... - VpnAuthenticationTypeAAD VpnAuthenticationType = "AAD" - // VpnAuthenticationTypeCertificate ... - VpnAuthenticationTypeCertificate VpnAuthenticationType = "Certificate" - // VpnAuthenticationTypeRadius ... - VpnAuthenticationTypeRadius VpnAuthenticationType = "Radius" + // AAD ... + AAD VpnAuthenticationType = "AAD" + // Certificate ... + Certificate VpnAuthenticationType = "Certificate" + // Radius ... + Radius VpnAuthenticationType = "Radius" ) // PossibleVpnAuthenticationTypeValues returns an array of possible values for the VpnAuthenticationType const type. func PossibleVpnAuthenticationTypeValues() []VpnAuthenticationType { - return []VpnAuthenticationType{VpnAuthenticationTypeAAD, VpnAuthenticationTypeCertificate, VpnAuthenticationTypeRadius} + return []VpnAuthenticationType{AAD, Certificate, Radius} } // VpnClientProtocol enumerates the values for vpn client protocol. type VpnClientProtocol string const ( - // VpnClientProtocolIkeV2 ... - VpnClientProtocolIkeV2 VpnClientProtocol = "IkeV2" - // VpnClientProtocolOpenVPN ... - VpnClientProtocolOpenVPN VpnClientProtocol = "OpenVPN" - // VpnClientProtocolSSTP ... - VpnClientProtocolSSTP VpnClientProtocol = "SSTP" + // IkeV2 ... + IkeV2 VpnClientProtocol = "IkeV2" + // OpenVPN ... + OpenVPN VpnClientProtocol = "OpenVPN" + // SSTP ... + SSTP VpnClientProtocol = "SSTP" ) // PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type. func PossibleVpnClientProtocolValues() []VpnClientProtocol { - return []VpnClientProtocol{VpnClientProtocolIkeV2, VpnClientProtocolOpenVPN, VpnClientProtocolSSTP} + return []VpnClientProtocol{IkeV2, OpenVPN, SSTP} } // VpnConnectionStatus enumerates the values for vpn connection status. @@ -2891,15 +3471,15 @@ func PossibleVpnLinkConnectionModeValues() []VpnLinkConnectionMode { type VpnNatRuleMode string const ( - // VpnNatRuleModeEgressSnat ... - VpnNatRuleModeEgressSnat VpnNatRuleMode = "EgressSnat" - // VpnNatRuleModeIngressSnat ... - VpnNatRuleModeIngressSnat VpnNatRuleMode = "IngressSnat" + // EgressSnat ... + EgressSnat VpnNatRuleMode = "EgressSnat" + // IngressSnat ... + IngressSnat VpnNatRuleMode = "IngressSnat" ) // PossibleVpnNatRuleModeValues returns an array of possible values for the VpnNatRuleMode const type. func PossibleVpnNatRuleModeValues() []VpnNatRuleMode { - return []VpnNatRuleMode{VpnNatRuleModeEgressSnat, VpnNatRuleModeIngressSnat} + return []VpnNatRuleMode{EgressSnat, IngressSnat} } // VpnNatRuleType enumerates the values for vpn nat rule type. @@ -2921,32 +3501,32 @@ func PossibleVpnNatRuleTypeValues() []VpnNatRuleType { type VpnPolicyMemberAttributeType string const ( - // VpnPolicyMemberAttributeTypeAADGroupID ... - VpnPolicyMemberAttributeTypeAADGroupID VpnPolicyMemberAttributeType = "AADGroupId" - // VpnPolicyMemberAttributeTypeCertificateGroupID ... - VpnPolicyMemberAttributeTypeCertificateGroupID VpnPolicyMemberAttributeType = "CertificateGroupId" - // VpnPolicyMemberAttributeTypeRadiusAzureGroupID ... - VpnPolicyMemberAttributeTypeRadiusAzureGroupID VpnPolicyMemberAttributeType = "RadiusAzureGroupId" + // AADGroupID ... + AADGroupID VpnPolicyMemberAttributeType = "AADGroupId" + // CertificateGroupID ... + CertificateGroupID VpnPolicyMemberAttributeType = "CertificateGroupId" + // RadiusAzureGroupID ... + RadiusAzureGroupID VpnPolicyMemberAttributeType = "RadiusAzureGroupId" ) // PossibleVpnPolicyMemberAttributeTypeValues returns an array of possible values for the VpnPolicyMemberAttributeType const type. func PossibleVpnPolicyMemberAttributeTypeValues() []VpnPolicyMemberAttributeType { - return []VpnPolicyMemberAttributeType{VpnPolicyMemberAttributeTypeAADGroupID, VpnPolicyMemberAttributeTypeCertificateGroupID, VpnPolicyMemberAttributeTypeRadiusAzureGroupID} + return []VpnPolicyMemberAttributeType{AADGroupID, CertificateGroupID, RadiusAzureGroupID} } // VpnType enumerates the values for vpn type. type VpnType string const ( - // VpnTypePolicyBased ... - VpnTypePolicyBased VpnType = "PolicyBased" - // VpnTypeRouteBased ... - VpnTypeRouteBased VpnType = "RouteBased" + // PolicyBased ... + PolicyBased VpnType = "PolicyBased" + // RouteBased ... + RouteBased VpnType = "RouteBased" ) // PossibleVpnTypeValues returns an array of possible values for the VpnType const type. func PossibleVpnTypeValues() []VpnType { - return []VpnType{VpnTypePolicyBased, VpnTypeRouteBased} + return []VpnType{PolicyBased, RouteBased} } // WebApplicationFirewallAction enumerates the values for web application firewall action. @@ -2985,27 +3565,27 @@ func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewall type WebApplicationFirewallMatchVariable string const ( - // WebApplicationFirewallMatchVariablePostArgs ... - WebApplicationFirewallMatchVariablePostArgs WebApplicationFirewallMatchVariable = "PostArgs" - // WebApplicationFirewallMatchVariableQueryString ... - WebApplicationFirewallMatchVariableQueryString WebApplicationFirewallMatchVariable = "QueryString" - // WebApplicationFirewallMatchVariableRemoteAddr ... - WebApplicationFirewallMatchVariableRemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr" - // WebApplicationFirewallMatchVariableRequestBody ... - WebApplicationFirewallMatchVariableRequestBody WebApplicationFirewallMatchVariable = "RequestBody" - // WebApplicationFirewallMatchVariableRequestCookies ... - WebApplicationFirewallMatchVariableRequestCookies WebApplicationFirewallMatchVariable = "RequestCookies" - // WebApplicationFirewallMatchVariableRequestHeaders ... - WebApplicationFirewallMatchVariableRequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders" - // WebApplicationFirewallMatchVariableRequestMethod ... - WebApplicationFirewallMatchVariableRequestMethod WebApplicationFirewallMatchVariable = "RequestMethod" - // WebApplicationFirewallMatchVariableRequestURI ... - WebApplicationFirewallMatchVariableRequestURI WebApplicationFirewallMatchVariable = "RequestUri" + // PostArgs ... + PostArgs WebApplicationFirewallMatchVariable = "PostArgs" + // QueryString ... + QueryString WebApplicationFirewallMatchVariable = "QueryString" + // RemoteAddr ... + RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr" + // RequestBody ... + RequestBody WebApplicationFirewallMatchVariable = "RequestBody" + // RequestCookies ... + RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies" + // RequestHeaders ... + RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders" + // RequestMethod ... + RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod" + // RequestURI ... + RequestURI WebApplicationFirewallMatchVariable = "RequestUri" ) // PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type. func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable { - return []WebApplicationFirewallMatchVariable{WebApplicationFirewallMatchVariablePostArgs, WebApplicationFirewallMatchVariableQueryString, WebApplicationFirewallMatchVariableRemoteAddr, WebApplicationFirewallMatchVariableRequestBody, WebApplicationFirewallMatchVariableRequestCookies, WebApplicationFirewallMatchVariableRequestHeaders, WebApplicationFirewallMatchVariableRequestMethod, WebApplicationFirewallMatchVariableRequestURI} + return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI} } // WebApplicationFirewallMode enumerates the values for web application firewall mode. @@ -3027,6 +3607,8 @@ func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode { type WebApplicationFirewallOperator string const ( + // WebApplicationFirewallOperatorAny ... + WebApplicationFirewallOperatorAny WebApplicationFirewallOperator = "Any" // WebApplicationFirewallOperatorBeginsWith ... WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith" // WebApplicationFirewallOperatorContains ... @@ -3053,7 +3635,7 @@ const ( // PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type. func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator { - return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGeoMatch, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex} + return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorAny, WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGeoMatch, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex} } // WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource @@ -3099,21 +3681,23 @@ func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRule type WebApplicationFirewallTransform string const ( - // WebApplicationFirewallTransformHTMLEntityDecode ... - WebApplicationFirewallTransformHTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode" - // WebApplicationFirewallTransformLowercase ... - WebApplicationFirewallTransformLowercase WebApplicationFirewallTransform = "Lowercase" - // WebApplicationFirewallTransformRemoveNulls ... - WebApplicationFirewallTransformRemoveNulls WebApplicationFirewallTransform = "RemoveNulls" - // WebApplicationFirewallTransformTrim ... - WebApplicationFirewallTransformTrim WebApplicationFirewallTransform = "Trim" - // WebApplicationFirewallTransformURLDecode ... - WebApplicationFirewallTransformURLDecode WebApplicationFirewallTransform = "UrlDecode" - // WebApplicationFirewallTransformURLEncode ... - WebApplicationFirewallTransformURLEncode WebApplicationFirewallTransform = "UrlEncode" + // HTMLEntityDecode ... + HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode" + // Lowercase ... + Lowercase WebApplicationFirewallTransform = "Lowercase" + // RemoveNulls ... + RemoveNulls WebApplicationFirewallTransform = "RemoveNulls" + // Trim ... + Trim WebApplicationFirewallTransform = "Trim" + // Uppercase ... + Uppercase WebApplicationFirewallTransform = "Uppercase" + // URLDecode ... + URLDecode WebApplicationFirewallTransform = "UrlDecode" + // URLEncode ... + URLEncode WebApplicationFirewallTransform = "UrlEncode" ) // PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type. func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform { - return []WebApplicationFirewallTransform{WebApplicationFirewallTransformHTMLEntityDecode, WebApplicationFirewallTransformLowercase, WebApplicationFirewallTransformRemoveNulls, WebApplicationFirewallTransformTrim, WebApplicationFirewallTransformURLDecode, WebApplicationFirewallTransformURLEncode} + return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, Uppercase, URLDecode, URLEncode} } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitauthorizations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitauthorizations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitauthorizations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitauthorizations.go index b266a6cf1a4d..41fdb499084d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitauthorizations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitauthorizations.go @@ -74,7 +74,7 @@ func (client ExpressRouteCircuitAuthorizationsClient) CreateOrUpdatePreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client ExpressRouteCircuitAuthorizationsClient) DeletePreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -246,7 +246,7 @@ func (client ExpressRouteCircuitAuthorizationsClient) GetPreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -327,7 +327,7 @@ func (client ExpressRouteCircuitAuthorizationsClient) ListPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitconnections.go index 83674223397e..e9f8625d96b1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitconnections.go @@ -75,7 +75,7 @@ func (client ExpressRouteCircuitConnectionsClient) CreateOrUpdatePreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -162,7 +162,7 @@ func (client ExpressRouteCircuitConnectionsClient) DeletePreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -251,7 +251,7 @@ func (client ExpressRouteCircuitConnectionsClient) GetPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -334,7 +334,7 @@ func (client ExpressRouteCircuitConnectionsClient) ListPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitpeerings.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitpeerings.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitpeerings.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitpeerings.go index f502d7a7ae49..8e3012a16698 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuitpeerings.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuitpeerings.go @@ -84,7 +84,7 @@ func (client ExpressRouteCircuitPeeringsClient) CreateOrUpdatePreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -169,7 +169,7 @@ func (client ExpressRouteCircuitPeeringsClient) DeletePreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -256,7 +256,7 @@ func (client ExpressRouteCircuitPeeringsClient) GetPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -337,7 +337,7 @@ func (client ExpressRouteCircuitPeeringsClient) ListPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuits.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuits.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuits.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuits.go index 6e6d664c9edd..6bf7737c2cd5 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecircuits.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecircuits.go @@ -70,7 +70,7 @@ func (client ExpressRouteCircuitsClient) CreateOrUpdatePreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client ExpressRouteCircuitsClient) DeletePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client ExpressRouteCircuitsClient) GetPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -315,7 +315,7 @@ func (client ExpressRouteCircuitsClient) GetPeeringStatsPreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -391,7 +391,7 @@ func (client ExpressRouteCircuitsClient) GetStatsPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -470,7 +470,7 @@ func (client ExpressRouteCircuitsClient) ListPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -583,7 +583,7 @@ func (client ExpressRouteCircuitsClient) ListAllPreparer(ctx context.Context) (* "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -693,7 +693,7 @@ func (client ExpressRouteCircuitsClient) ListArpTablePreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -777,7 +777,7 @@ func (client ExpressRouteCircuitsClient) ListRoutesTablePreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -861,7 +861,7 @@ func (client ExpressRouteCircuitsClient) ListRoutesTableSummaryPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -948,7 +948,7 @@ func (client ExpressRouteCircuitsClient) UpdateTagsPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteconnections.go index b58cfdf034cb..d033ecb9b85b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteconnections.go @@ -81,7 +81,7 @@ func (client ExpressRouteConnectionsClient) CreateOrUpdatePreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -164,7 +164,7 @@ func (client ExpressRouteConnectionsClient) DeletePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -251,7 +251,7 @@ func (client ExpressRouteConnectionsClient) GetPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -327,7 +327,7 @@ func (client ExpressRouteConnectionsClient) ListPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnectionpeerings.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnectionpeerings.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnectionpeerings.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnectionpeerings.go index a4fbcebcd450..ad4b71bd4e6b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnectionpeerings.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnectionpeerings.go @@ -86,7 +86,7 @@ func (client ExpressRouteCrossConnectionPeeringsClient) CreateOrUpdatePreparer(c "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -170,7 +170,7 @@ func (client ExpressRouteCrossConnectionPeeringsClient) DeletePreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -257,7 +257,7 @@ func (client ExpressRouteCrossConnectionPeeringsClient) GetPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -338,7 +338,7 @@ func (client ExpressRouteCrossConnectionPeeringsClient) ListPreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnections.go index 5f644efbaa72..2db798b88830 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutecrossconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutecrossconnections.go @@ -70,7 +70,7 @@ func (client ExpressRouteCrossConnectionsClient) CreateOrUpdatePreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client ExpressRouteCrossConnectionsClient) GetPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -235,7 +235,7 @@ func (client ExpressRouteCrossConnectionsClient) ListPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -346,7 +346,7 @@ func (client ExpressRouteCrossConnectionsClient) ListArpTablePreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -435,7 +435,7 @@ func (client ExpressRouteCrossConnectionsClient) ListByResourceGroupPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client ExpressRouteCrossConnectionsClient) ListRoutesTablePreparer(ctx con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -630,7 +630,7 @@ func (client ExpressRouteCrossConnectionsClient) ListRoutesTableSummaryPreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -717,7 +717,7 @@ func (client ExpressRouteCrossConnectionsClient) UpdateTagsPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutegateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutegateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutegateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutegateways.go index 7073ce13ba27..d321a2940098 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutegateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutegateways.go @@ -78,7 +78,7 @@ func (client ExpressRouteGatewaysClient) CreateOrUpdatePreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -161,7 +161,7 @@ func (client ExpressRouteGatewaysClient) DeletePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -246,7 +246,7 @@ func (client ExpressRouteGatewaysClient) GetPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -320,7 +320,7 @@ func (client ExpressRouteGatewaysClient) ListByResourceGroupPreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -391,7 +391,7 @@ func (client ExpressRouteGatewaysClient) ListBySubscriptionPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -461,7 +461,7 @@ func (client ExpressRouteGatewaysClient) UpdateTagsPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutelinks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutelinks.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutelinks.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutelinks.go index 3f973edf64bf..04657f3a8ea7 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressroutelinks.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressroutelinks.go @@ -78,7 +78,7 @@ func (client ExpressRouteLinksClient) GetPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client ExpressRouteLinksClient) ListPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportauthorizations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportauthorizations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportauthorizations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportauthorizations.go index 43ea09b6d404..401e7cba6922 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportauthorizations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportauthorizations.go @@ -73,7 +73,7 @@ func (client ExpressRoutePortAuthorizationsClient) CreateOrUpdatePreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -158,7 +158,7 @@ func (client ExpressRoutePortAuthorizationsClient) DeletePreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -245,7 +245,7 @@ func (client ExpressRoutePortAuthorizationsClient) GetPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -326,7 +326,7 @@ func (client ExpressRoutePortAuthorizationsClient) ListPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteports.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteports.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteports.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteports.go index bec868899b61..d722d3ad13aa 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteports.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteports.go @@ -71,7 +71,7 @@ func (client ExpressRoutePortsClient) CreateOrUpdatePreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -153,7 +153,7 @@ func (client ExpressRoutePortsClient) DeletePreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -245,7 +245,7 @@ func (client ExpressRoutePortsClient) GenerateLOAPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -323,7 +323,7 @@ func (client ExpressRoutePortsClient) GetPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -399,7 +399,7 @@ func (client ExpressRoutePortsClient) ListPreparer(ctx context.Context) (*http.R "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -515,7 +515,7 @@ func (client ExpressRoutePortsClient) ListByResourceGroupPreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -629,7 +629,7 @@ func (client ExpressRoutePortsClient) UpdateTagsPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportslocations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportslocations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportslocations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportslocations.go index feca9cf4eddc..0fd21f2208c2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteportslocations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteportslocations.go @@ -75,7 +75,7 @@ func (client ExpressRoutePortsLocationsClient) GetPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client ExpressRoutePortsLocationsClient) ListPreparer(ctx context.Context) "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteproviderportslocation.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteproviderportslocation.go new file mode 100644 index 000000000000..c4671c00ae2b --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteproviderportslocation.go @@ -0,0 +1,109 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ExpressRouteProviderPortsLocationClient is the network Client +type ExpressRouteProviderPortsLocationClient struct { + BaseClient +} + +// NewExpressRouteProviderPortsLocationClient creates an instance of the ExpressRouteProviderPortsLocationClient +// client. +func NewExpressRouteProviderPortsLocationClient(subscriptionID string) ExpressRouteProviderPortsLocationClient { + return NewExpressRouteProviderPortsLocationClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewExpressRouteProviderPortsLocationClientWithBaseURI creates an instance of the +// ExpressRouteProviderPortsLocationClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewExpressRouteProviderPortsLocationClientWithBaseURI(baseURI string, subscriptionID string) ExpressRouteProviderPortsLocationClient { + return ExpressRouteProviderPortsLocationClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List retrieves all the ExpressRouteProviderPorts in a subscription. +// Parameters: +// filter - the filter to apply on the operation. For example, you can use $filter=location eq '{state}'. +func (client ExpressRouteProviderPortsLocationClient) List(ctx context.Context, filter string) (result ExpressRouteProviderPortListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteProviderPortsLocationClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ExpressRouteProviderPortsLocationClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ExpressRouteProviderPortsLocationClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ExpressRouteProviderPortsLocationClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ExpressRouteProviderPortsLocationClient) ListPreparer(ctx context.Context, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/expressRouteProviderPorts", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ExpressRouteProviderPortsLocationClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ExpressRouteProviderPortsLocationClient) ListResponder(resp *http.Response) (result ExpressRouteProviderPortListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteserviceproviders.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteserviceproviders.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteserviceproviders.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteserviceproviders.go index c237501b4d03..b76714e641f8 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/expressrouteserviceproviders.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/expressrouteserviceproviders.go @@ -76,7 +76,7 @@ func (client ExpressRouteServiceProvidersClient) ListPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicies.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicies.go similarity index 95% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicies.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicies.go index dddc0c3b11f5..44ec477c20bb 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicies.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicies.go @@ -51,18 +51,18 @@ func (client FirewallPoliciesClient) CreateOrUpdate(ctx context.Context, resourc if err := validation.Validate([]validation.Validation{ {TargetValue: parameters, Constraints: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPPort", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPPort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, - {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPPort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, + Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPPort", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPPort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, + {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPPort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, }}, - {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPSPort", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPSPort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, - {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.HTTPSPort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, + {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPSPort", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPSPort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, + {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.HTTPSPort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, }}, - {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.PacFilePort", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.PacFilePort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, - {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxySettings.PacFilePort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, + {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.PacFilePort", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.PacFilePort", Name: validation.InclusiveMaximum, Rule: int64(64000), Chain: nil}, + {Target: "parameters.FirewallPolicyPropertiesFormat.ExplicitProxy.PacFilePort", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, }}, }}, }}}}}); err != nil { @@ -92,7 +92,7 @@ func (client FirewallPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -174,7 +174,7 @@ func (client FirewallPoliciesClient) DeletePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -260,7 +260,7 @@ func (client FirewallPoliciesClient) GetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -342,7 +342,7 @@ func (client FirewallPoliciesClient) ListPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -455,7 +455,7 @@ func (client FirewallPoliciesClient) ListAllPreparer(ctx context.Context) (*http "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -569,7 +569,7 @@ func (client FirewallPoliciesClient) UpdateTagsPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignatures.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignatures.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignatures.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignatures.go index c920b64009a5..851178b0d87c 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignatures.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignatures.go @@ -86,7 +86,7 @@ func (client FirewallPolicyIdpsSignaturesClient) ListPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesfiltervalues.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesfiltervalues.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesfiltervalues.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesfiltervalues.go index 576612c8ed27..00a994c89a5f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesfiltervalues.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesfiltervalues.go @@ -77,7 +77,7 @@ func (client FirewallPolicyIdpsSignaturesFilterValuesClient) ListPreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesoverrides.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesoverrides.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesoverrides.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesoverrides.go index 6ab55b16199b..b0bc6814f8ed 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyidpssignaturesoverrides.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyidpssignaturesoverrides.go @@ -77,7 +77,7 @@ func (client FirewallPolicyIdpsSignaturesOverridesClient) GetPreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -153,7 +153,7 @@ func (client FirewallPolicyIdpsSignaturesOverridesClient) ListPreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -230,7 +230,7 @@ func (client FirewallPolicyIdpsSignaturesOverridesClient) PatchPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -309,7 +309,7 @@ func (client FirewallPolicyIdpsSignaturesOverridesClient) PutPreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyrulecollectiongroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyrulecollectiongroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyrulecollectiongroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyrulecollectiongroups.go index 5e93d360c63b..bb71e0b964e2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/firewallpolicyrulecollectiongroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/firewallpolicyrulecollectiongroups.go @@ -85,7 +85,7 @@ func (client FirewallPolicyRuleCollectionGroupsClient) CreateOrUpdatePreparer(ct "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -170,7 +170,7 @@ func (client FirewallPolicyRuleCollectionGroupsClient) DeletePreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -257,7 +257,7 @@ func (client FirewallPolicyRuleCollectionGroupsClient) GetPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -338,7 +338,7 @@ func (client FirewallPolicyRuleCollectionGroupsClient) ListPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/flowlogs.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/flowlogs.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/flowlogs.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/flowlogs.go index 6437b94c0910..d1567ce5aa3d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/flowlogs.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/flowlogs.go @@ -81,7 +81,7 @@ func (client FlowLogsClient) CreateOrUpdatePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -165,7 +165,7 @@ func (client FlowLogsClient) DeletePreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -252,7 +252,7 @@ func (client FlowLogsClient) GetPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -333,7 +333,7 @@ func (client FlowLogsClient) ListPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -449,7 +449,7 @@ func (client FlowLogsClient) UpdateTagsPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/groups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/groups.go new file mode 100644 index 000000000000..4028e1173ef4 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/groups.go @@ -0,0 +1,421 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// GroupsClient is the network Client +type GroupsClient struct { + BaseClient +} + +// NewGroupsClient creates an instance of the GroupsClient client. +func NewGroupsClient(subscriptionID string) GroupsClient { + return NewGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewGroupsClientWithBaseURI creates an instance of the GroupsClient client using a custom endpoint. Use this when +// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewGroupsClientWithBaseURI(baseURI string, subscriptionID string) GroupsClient { + return GroupsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a network group. +// Parameters: +// parameters - parameters supplied to the specify which network group need to create +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// ifMatch - the ETag of the transformation. Omit this value to always overwrite the current resource. Specify +// the last-seen ETag value to prevent accidentally overwriting concurrent changes. +func (client GroupsClient) CreateOrUpdate(ctx context.Context, parameters Group, resourceGroupName string, networkManagerName string, networkGroupName string, ifMatch string) (result Group, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, parameters, resourceGroupName, networkManagerName, networkGroupName, ifMatch) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.GroupsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client GroupsClient) CreateOrUpdatePreparer(ctx context.Context, parameters Group, resourceGroupName string, networkManagerName string, networkGroupName string, ifMatch string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + if len(ifMatch) > 0 { + preparer = autorest.DecoratePreparer(preparer, + autorest.WithHeader("If-Match", autorest.String(ifMatch))) + } + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client GroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client GroupsClient) CreateOrUpdateResponder(resp *http.Response) (result Group, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a network group. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client GroupsClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, force *bool) (result GroupsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, networkGroupName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client GroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client GroupsClient) DeleteSender(req *http.Request) (future GroupsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client GroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets the specified network group. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +func (client GroupsClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string) (result Group, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, networkGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.GroupsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client GroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client GroupsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client GroupsClient) GetResponder(resp *http.Response) (result Group, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists the specified network group. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client GroupsClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result GroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupsClient.List") + defer func() { + sc := -1 + if result.glr.Response.Response != nil { + sc = result.glr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.GroupsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.glr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.GroupsClient", "List", resp, "Failure sending request") + return + } + + result.glr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "List", resp, "Failure responding to request") + return + } + if result.glr.hasNextLink() && result.glr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client GroupsClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client GroupsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client GroupsClient) ListResponder(resp *http.Response) (result GroupListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client GroupsClient) listNextResults(ctx context.Context, lastResults GroupListResult) (result GroupListResult, err error) { + req, err := lastResults.groupListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.GroupsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.GroupsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client GroupsClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result GroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubroutetables.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubroutetables.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubroutetables.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubroutetables.go index 579df8d7267c..e2b54ffada4a 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubroutetables.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubroutetables.go @@ -71,7 +71,7 @@ func (client HubRouteTablesClient) CreateOrUpdatePreparer(ctx context.Context, r "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client HubRouteTablesClient) DeletePreparer(ctx context.Context, resourceG "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client HubRouteTablesClient) GetPreparer(ctx context.Context, resourceGrou "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client HubRouteTablesClient) ListPreparer(ctx context.Context, resourceGro "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubvirtualnetworkconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubvirtualnetworkconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubvirtualnetworkconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubvirtualnetworkconnections.go index 2e68e70e460f..02031271f7a4 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/hubvirtualnetworkconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/hubvirtualnetworkconnections.go @@ -73,7 +73,7 @@ func (client HubVirtualNetworkConnectionsClient) CreateOrUpdatePreparer(ctx cont "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -157,7 +157,7 @@ func (client HubVirtualNetworkConnectionsClient) DeletePreparer(ctx context.Cont "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client HubVirtualNetworkConnectionsClient) GetPreparer(ctx context.Context "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,7 +325,7 @@ func (client HubVirtualNetworkConnectionsClient) ListPreparer(ctx context.Contex "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundnatrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundnatrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundnatrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundnatrules.go index f603374e192e..e0dfa3bd6568 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundnatrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundnatrules.go @@ -93,7 +93,7 @@ func (client InboundNatRulesClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -178,7 +178,7 @@ func (client InboundNatRulesClient) DeletePreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -266,7 +266,7 @@ func (client InboundNatRulesClient) GetPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -350,7 +350,7 @@ func (client InboundNatRulesClient) ListPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundsecurityrule.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundsecurityrule.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundsecurityrule.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundsecurityrule.go index d4279e18a391..eb1144376d02 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/inboundsecurityrule.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/inboundsecurityrule.go @@ -73,7 +73,7 @@ func (client InboundSecurityRuleClient) CreateOrUpdatePreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceipconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceipconfigurations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceipconfigurations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceipconfigurations.go index c2675352841f..38d87b3d5ab2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceipconfigurations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceipconfigurations.go @@ -78,7 +78,7 @@ func (client InterfaceIPConfigurationsClient) GetPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client InterfaceIPConfigurationsClient) ListPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceloadbalancers.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceloadbalancers.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceloadbalancers.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceloadbalancers.go index cc49e62e6ecc..a7b2666852f1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfaceloadbalancers.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfaceloadbalancers.go @@ -81,7 +81,7 @@ func (client InterfaceLoadBalancersClient) ListPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacesgroup.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacesgroup.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacesgroup.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacesgroup.go index 2ace149c5a5f..9e95b95955d3 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacesgroup.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacesgroup.go @@ -69,7 +69,7 @@ func (client InterfacesClient) CreateOrUpdatePreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client InterfacesClient) DeletePreparer(ctx context.Context, resourceGroup "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client InterfacesClient) GetPreparer(ctx context.Context, resourceGroupNam "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -321,7 +321,7 @@ func (client InterfacesClient) GetCloudServiceNetworkInterfacePreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -393,7 +393,7 @@ func (client InterfacesClient) GetEffectiveRouteTablePreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -487,7 +487,7 @@ func (client InterfacesClient) GetVirtualMachineScaleSetIPConfigurationPreparer( "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -571,7 +571,7 @@ func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfacePreparer "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -653,7 +653,7 @@ func (client InterfacesClient) ListPreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -766,7 +766,7 @@ func (client InterfacesClient) ListAllPreparer(ctx context.Context) (*http.Reque "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -884,7 +884,7 @@ func (client InterfacesClient) ListCloudServiceNetworkInterfacesPreparer(ctx con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1005,7 +1005,7 @@ func (client InterfacesClient) ListCloudServiceRoleInstanceNetworkInterfacesPrep "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1111,7 +1111,7 @@ func (client InterfacesClient) ListEffectiveNetworkSecurityGroupsPreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1208,7 +1208,7 @@ func (client InterfacesClient) ListVirtualMachineScaleSetIPConfigurationsPrepare "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1329,7 +1329,7 @@ func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesPrepar "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1450,7 +1450,7 @@ func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesPrep "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1564,7 +1564,7 @@ func (client InterfacesClient) UpdateTagsPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacetapconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacetapconfigurations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacetapconfigurations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacetapconfigurations.go index bf16177e294e..12b4a1102849 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/interfacetapconfigurations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/interfacetapconfigurations.go @@ -112,7 +112,7 @@ func (client InterfaceTapConfigurationsClient) CreateOrUpdatePreparer(ctx contex "tapConfigurationName": autorest.Encode("path", tapConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -197,7 +197,7 @@ func (client InterfaceTapConfigurationsClient) DeletePreparer(ctx context.Contex "tapConfigurationName": autorest.Encode("path", tapConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -284,7 +284,7 @@ func (client InterfaceTapConfigurationsClient) GetPreparer(ctx context.Context, "tapConfigurationName": autorest.Encode("path", tapConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -365,7 +365,7 @@ func (client InterfaceTapConfigurationsClient) ListPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipallocations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipallocations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipallocations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipallocations.go index 764e051e0052..5cfbec8391e1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipallocations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipallocations.go @@ -69,7 +69,7 @@ func (client IPAllocationsClient) CreateOrUpdatePreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client IPAllocationsClient) DeletePreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client IPAllocationsClient) GetPreparer(ctx context.Context, resourceGroup "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client IPAllocationsClient) ListPreparer(ctx context.Context) (*http.Reque "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client IPAllocationsClient) ListByResourceGroupPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client IPAllocationsClient) UpdateTagsPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipgroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipgroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipgroups.go index ec763e6966c1..16ff0075a00b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/ipgroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/ipgroups.go @@ -69,7 +69,7 @@ func (client IPGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client IPGroupsClient) DeletePreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -238,7 +238,7 @@ func (client IPGroupsClient) GetPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -317,7 +317,7 @@ func (client IPGroupsClient) ListPreparer(ctx context.Context) (*http.Request, e "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -433,7 +433,7 @@ func (client IPGroupsClient) ListByResourceGroupPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -547,7 +547,7 @@ func (client IPGroupsClient) UpdateGroupsPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerbackendaddresspools.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerbackendaddresspools.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerbackendaddresspools.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerbackendaddresspools.go index 8f5cf4c572b0..4ba059657da2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerbackendaddresspools.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerbackendaddresspools.go @@ -72,7 +72,7 @@ func (client LoadBalancerBackendAddressPoolsClient) CreateOrUpdatePreparer(ctx c "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -157,7 +157,7 @@ func (client LoadBalancerBackendAddressPoolsClient) DeletePreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client LoadBalancerBackendAddressPoolsClient) GetPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,7 +325,7 @@ func (client LoadBalancerBackendAddressPoolsClient) ListPreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerfrontendipconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerfrontendipconfigurations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerfrontendipconfigurations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerfrontendipconfigurations.go index 89fcfa437255..9d5495f9d35d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerfrontendipconfigurations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerfrontendipconfigurations.go @@ -79,7 +79,7 @@ func (client LoadBalancerFrontendIPConfigurationsClient) GetPreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -160,7 +160,7 @@ func (client LoadBalancerFrontendIPConfigurationsClient) ListPreparer(ctx contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerloadbalancingrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerloadbalancingrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerloadbalancingrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerloadbalancingrules.go index 61d0a0eb6ad6..c11489329311 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerloadbalancingrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerloadbalancingrules.go @@ -78,7 +78,7 @@ func (client LoadBalancerLoadBalancingRulesClient) GetPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client LoadBalancerLoadBalancingRulesClient) ListPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancernetworkinterfaces.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancernetworkinterfaces.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancernetworkinterfaces.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancernetworkinterfaces.go index 979d6bbc8d46..586ff96709bd 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancernetworkinterfaces.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancernetworkinterfaces.go @@ -81,7 +81,7 @@ func (client LoadBalancerNetworkInterfacesClient) ListPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalanceroutboundrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalanceroutboundrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalanceroutboundrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalanceroutboundrules.go index c0a7ee956cb1..6212cd6dedb8 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalanceroutboundrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalanceroutboundrules.go @@ -78,7 +78,7 @@ func (client LoadBalancerOutboundRulesClient) GetPreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client LoadBalancerOutboundRulesClient) ListPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerprobes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerprobes.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerprobes.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerprobes.go index e6f4119d9d0a..4ba2205c3610 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancerprobes.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancerprobes.go @@ -78,7 +78,7 @@ func (client LoadBalancerProbesClient) GetPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -159,7 +159,7 @@ func (client LoadBalancerProbesClient) ListPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancers.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancers.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancers.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancers.go index 47a59550a3ba..ed722a05f867 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/loadbalancers.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/loadbalancers.go @@ -69,7 +69,7 @@ func (client LoadBalancersClient) CreateOrUpdatePreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client LoadBalancersClient) DeletePreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client LoadBalancersClient) GetPreparer(ctx context.Context, resourceGroup "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -319,7 +319,7 @@ func (client LoadBalancersClient) ListPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client LoadBalancersClient) ListAllPreparer(ctx context.Context) (*http.Re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -541,7 +541,7 @@ func (client LoadBalancersClient) ListInboundNatRulePortMappingsPreparer(ctx con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -621,7 +621,7 @@ func (client LoadBalancersClient) SwapPublicIPAddressesPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -709,7 +709,7 @@ func (client LoadBalancersClient) UpdateTagsPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/localnetworkgateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/localnetworkgateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/localnetworkgateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/localnetworkgateways.go index c7cd62e8c913..c1e4015d0681 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/localnetworkgateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/localnetworkgateways.go @@ -86,7 +86,7 @@ func (client LocalNetworkGatewaysClient) CreateOrUpdatePreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -174,7 +174,7 @@ func (client LocalNetworkGatewaysClient) DeletePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -265,7 +265,7 @@ func (client LocalNetworkGatewaysClient) GetPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -344,7 +344,7 @@ func (client LocalNetworkGatewaysClient) ListPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -464,7 +464,7 @@ func (client LocalNetworkGatewaysClient) UpdateTagsPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managementgroupnetworkmanagerconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managementgroupnetworkmanagerconnections.go new file mode 100644 index 000000000000..177be9f9bd94 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managementgroupnetworkmanagerconnections.go @@ -0,0 +1,397 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ManagementGroupNetworkManagerConnectionsClient is the network Client +type ManagementGroupNetworkManagerConnectionsClient struct { + BaseClient +} + +// NewManagementGroupNetworkManagerConnectionsClient creates an instance of the +// ManagementGroupNetworkManagerConnectionsClient client. +func NewManagementGroupNetworkManagerConnectionsClient(subscriptionID string) ManagementGroupNetworkManagerConnectionsClient { + return NewManagementGroupNetworkManagerConnectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewManagementGroupNetworkManagerConnectionsClientWithBaseURI creates an instance of the +// ManagementGroupNetworkManagerConnectionsClient client using a custom endpoint. Use this when interacting with an +// Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewManagementGroupNetworkManagerConnectionsClientWithBaseURI(baseURI string, subscriptionID string) ManagementGroupNetworkManagerConnectionsClient { + return ManagementGroupNetworkManagerConnectionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create a network manager connection on this management group. +// Parameters: +// parameters - network manager connection to be created/updated. +// managementGroupID - the management group Id which uniquely identify the Microsoft Azure management group. +// networkManagerConnectionName - name for the network manager connection. +func (client ManagementGroupNetworkManagerConnectionsClient) CreateOrUpdate(ctx context.Context, parameters ManagerConnection, managementGroupID string, networkManagerConnectionName string) (result ManagerConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagementGroupNetworkManagerConnectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, parameters, managementGroupID, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ManagementGroupNetworkManagerConnectionsClient) CreateOrUpdatePreparer(ctx context.Context, parameters ManagerConnection, managementGroupID string, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "managementGroupId": autorest.Encode("path", managementGroupID), + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ManagementGroupNetworkManagerConnectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ManagementGroupNetworkManagerConnectionsClient) CreateOrUpdateResponder(resp *http.Response) (result ManagerConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete specified pending connection created by this management group. +// Parameters: +// managementGroupID - the management group Id which uniquely identify the Microsoft Azure management group. +// networkManagerConnectionName - name for the network manager connection. +func (client ManagementGroupNetworkManagerConnectionsClient) Delete(ctx context.Context, managementGroupID string, networkManagerConnectionName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagementGroupNetworkManagerConnectionsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, managementGroupID, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ManagementGroupNetworkManagerConnectionsClient) DeletePreparer(ctx context.Context, managementGroupID string, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "managementGroupId": autorest.Encode("path", managementGroupID), + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ManagementGroupNetworkManagerConnectionsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ManagementGroupNetworkManagerConnectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get get a specified connection created by this management group. +// Parameters: +// managementGroupID - the management group Id which uniquely identify the Microsoft Azure management group. +// networkManagerConnectionName - name for the network manager connection. +func (client ManagementGroupNetworkManagerConnectionsClient) Get(ctx context.Context, managementGroupID string, networkManagerConnectionName string) (result ManagerConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagementGroupNetworkManagerConnectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, managementGroupID, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ManagementGroupNetworkManagerConnectionsClient) GetPreparer(ctx context.Context, managementGroupID string, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "managementGroupId": autorest.Encode("path", managementGroupID), + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ManagementGroupNetworkManagerConnectionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ManagementGroupNetworkManagerConnectionsClient) GetResponder(resp *http.Response) (result ManagerConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list all network manager connections created by this management group. +// Parameters: +// managementGroupID - the management group Id which uniquely identify the Microsoft Azure management group. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client ManagementGroupNetworkManagerConnectionsClient) List(ctx context.Context, managementGroupID string, top *int32, skipToken string) (result ManagerConnectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagementGroupNetworkManagerConnectionsClient.List") + defer func() { + sc := -1 + if result.mclr.Response.Response != nil { + sc = result.mclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ManagementGroupNetworkManagerConnectionsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, managementGroupID, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.mclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "List", resp, "Failure sending request") + return + } + + result.mclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "List", resp, "Failure responding to request") + return + } + if result.mclr.hasNextLink() && result.mclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ManagementGroupNetworkManagerConnectionsClient) ListPreparer(ctx context.Context, managementGroupID string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "managementGroupId": autorest.Encode("path", managementGroupID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Network/networkManagerConnections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ManagementGroupNetworkManagerConnectionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ManagementGroupNetworkManagerConnectionsClient) ListResponder(resp *http.Response) (result ManagerConnectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ManagementGroupNetworkManagerConnectionsClient) listNextResults(ctx context.Context, lastResults ManagerConnectionListResult) (result ManagerConnectionListResult, err error) { + req, err := lastResults.managerConnectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagementGroupNetworkManagerConnectionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ManagementGroupNetworkManagerConnectionsClient) ListComplete(ctx context.Context, managementGroupID string, top *int32, skipToken string) (result ManagerConnectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagementGroupNetworkManagerConnectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, managementGroupID, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managercommits.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managercommits.go new file mode 100644 index 000000000000..8a88e396b262 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managercommits.go @@ -0,0 +1,121 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ManagerCommitsClient is the network Client +type ManagerCommitsClient struct { + BaseClient +} + +// NewManagerCommitsClient creates an instance of the ManagerCommitsClient client. +func NewManagerCommitsClient(subscriptionID string) ManagerCommitsClient { + return NewManagerCommitsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewManagerCommitsClientWithBaseURI creates an instance of the ManagerCommitsClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewManagerCommitsClientWithBaseURI(baseURI string, subscriptionID string) ManagerCommitsClient { + return ManagerCommitsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Post post a Network Manager Commit. +// Parameters: +// parameters - parameters supplied to specify which Managed Network commit is. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +func (client ManagerCommitsClient) Post(ctx context.Context, parameters ManagerCommit, resourceGroupName string, networkManagerName string) (result ManagerCommitsPostFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerCommitsClient.Post") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.TargetLocations", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { + return result, validation.NewError("network.ManagerCommitsClient", "Post", err.Error()) + } + + req, err := client.PostPreparer(ctx, parameters, resourceGroupName, networkManagerName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerCommitsClient", "Post", nil, "Failure preparing request") + return + } + + result, err = client.PostSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerCommitsClient", "Post", result.Response(), "Failure sending request") + return + } + + return +} + +// PostPreparer prepares the Post request. +func (client ManagerCommitsClient) PostPreparer(ctx context.Context, parameters ManagerCommit, resourceGroupName string, networkManagerName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.CommitID = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/commit", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PostSender sends the Post request. The method will close the +// http.Response Body if it receives an error. +func (client ManagerCommitsClient) PostSender(req *http.Request) (future ManagerCommitsPostFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// PostResponder handles the response to the Post request. The method always +// closes the http.Response Body. +func (client ManagerCommitsClient) PostResponder(resp *http.Response) (result ManagerCommit, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managerdeploymentstatus.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managerdeploymentstatus.go new file mode 100644 index 000000000000..eff571d69866 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managerdeploymentstatus.go @@ -0,0 +1,126 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ManagerDeploymentStatusClient is the network Client +type ManagerDeploymentStatusClient struct { + BaseClient +} + +// NewManagerDeploymentStatusClient creates an instance of the ManagerDeploymentStatusClient client. +func NewManagerDeploymentStatusClient(subscriptionID string) ManagerDeploymentStatusClient { + return NewManagerDeploymentStatusClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewManagerDeploymentStatusClientWithBaseURI creates an instance of the ManagerDeploymentStatusClient client using a +// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, +// Azure stack). +func NewManagerDeploymentStatusClientWithBaseURI(baseURI string, subscriptionID string) ManagerDeploymentStatusClient { + return ManagerDeploymentStatusClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List post to List of Network Manager Deployment Status. +// Parameters: +// parameters - parameters supplied to specify which Managed Network deployment status is. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +func (client ManagerDeploymentStatusClient) List(ctx context.Context, parameters ManagerDeploymentStatusParameter, resourceGroupName string, networkManagerName string, top *int32) (result ManagerDeploymentStatusListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerDeploymentStatusClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ManagerDeploymentStatusClient", "List", err.Error()) + } + + req, err := client.ListPreparer(ctx, parameters, resourceGroupName, networkManagerName, top) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerDeploymentStatusClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagerDeploymentStatusClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerDeploymentStatusClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ManagerDeploymentStatusClient) ListPreparer(ctx context.Context, parameters ManagerDeploymentStatusParameter, resourceGroupName string, networkManagerName string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/listDeploymentStatus", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ManagerDeploymentStatusClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ManagerDeploymentStatusClient) ListResponder(resp *http.Response) (result ManagerDeploymentStatusListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managers.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managers.go new file mode 100644 index 000000000000..f569db33cbc0 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/managers.go @@ -0,0 +1,630 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ManagersClient is the network Client +type ManagersClient struct { + BaseClient +} + +// NewManagersClient creates an instance of the ManagersClient client. +func NewManagersClient(subscriptionID string) ManagersClient { + return NewManagersClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewManagersClientWithBaseURI creates an instance of the ManagersClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewManagersClientWithBaseURI(baseURI string, subscriptionID string) ManagersClient { + return ManagersClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a Network Manager. +// Parameters: +// parameters - parameters supplied to specify which network manager is. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +func (client ManagersClient) CreateOrUpdate(ctx context.Context, parameters Manager, resourceGroupName string, networkManagerName string) (result Manager, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.ManagerProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.ManagerProperties.NetworkManagerScopes", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.ManagerProperties.NetworkManagerScopeAccesses", Name: validation.Null, Rule: true, Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ManagersClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, parameters, resourceGroupName, networkManagerName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagersClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ManagersClient) CreateOrUpdatePreparer(ctx context.Context, parameters Manager, resourceGroupName string, networkManagerName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.Etag = nil + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ManagersClient) CreateOrUpdateResponder(resp *http.Response) (result Manager, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a network manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client ManagersClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, force *bool) (result ManagersDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ManagersClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) DeleteSender(req *http.Request) (future ManagersDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ManagersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets the specified Network Manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +func (client ManagersClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string) (result Manager, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ManagersClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ManagersClient) GetResponder(resp *http.Response) (result Manager, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list network managers in a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client ManagersClient) List(ctx context.Context, resourceGroupName string, top *int32, skipToken string) (result ManagerListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.List") + defer func() { + sc := -1 + if result.mlr.Response.Response != nil { + sc = result.mlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ManagersClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.mlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagersClient", "List", resp, "Failure sending request") + return + } + + result.mlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "List", resp, "Failure responding to request") + return + } + if result.mlr.hasNextLink() && result.mlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ManagersClient) ListPreparer(ctx context.Context, resourceGroupName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ManagersClient) ListResponder(resp *http.Response) (result ManagerListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ManagersClient) listNextResults(ctx context.Context, lastResults ManagerListResult) (result ManagerListResult, err error) { + req, err := lastResults.managerListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ManagersClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ManagersClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ManagersClient) ListComplete(ctx context.Context, resourceGroupName string, top *int32, skipToken string) (result ManagerListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, top, skipToken) + return +} + +// ListBySubscription list all network managers in a subscription. +// Parameters: +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client ManagersClient) ListBySubscription(ctx context.Context, top *int32, skipToken string) (result ManagerListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.ListBySubscription") + defer func() { + sc := -1 + if result.mlr.Response.Response != nil { + sc = result.mlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ManagersClient", "ListBySubscription", err.Error()) + } + + result.fn = client.listBySubscriptionNextResults + req, err := client.ListBySubscriptionPreparer(ctx, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.mlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagersClient", "ListBySubscription", resp, "Failure sending request") + return + } + + result.mlr, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "ListBySubscription", resp, "Failure responding to request") + return + } + if result.mlr.hasNextLink() && result.mlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListBySubscriptionPreparer prepares the ListBySubscription request. +func (client ManagersClient) ListBySubscriptionPreparer(ctx context.Context, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkManagers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListBySubscriptionSender sends the ListBySubscription request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (client ManagersClient) ListBySubscriptionResponder(resp *http.Response) (result ManagerListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listBySubscriptionNextResults retrieves the next set of results, if any. +func (client ManagersClient) listBySubscriptionNextResults(ctx context.Context, lastResults ManagerListResult) (result ManagerListResult, err error) { + req, err := lastResults.managerListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ManagersClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListBySubscriptionSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ManagersClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") + } + result, err = client.ListBySubscriptionResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. +func (client ManagersClient) ListBySubscriptionComplete(ctx context.Context, top *int32, skipToken string) (result ManagerListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.ListBySubscription") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListBySubscription(ctx, top, skipToken) + return +} + +// Patch patch NetworkManager. +// Parameters: +// parameters - parameters supplied to specify which network manager is. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +func (client ManagersClient) Patch(ctx context.Context, parameters PatchObject, resourceGroupName string, networkManagerName string) (result Manager, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagersClient.Patch") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.PatchPreparer(ctx, parameters, resourceGroupName, networkManagerName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Patch", nil, "Failure preparing request") + return + } + + resp, err := client.PatchSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Patch", resp, "Failure sending request") + return + } + + result, err = client.PatchResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagersClient", "Patch", resp, "Failure responding to request") + return + } + + return +} + +// PatchPreparer prepares the Patch request. +func (client ManagersClient) PatchPreparer(ctx context.Context, parameters PatchObject, resourceGroupName string, networkManagerName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPatch(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// PatchSender sends the Patch request. The method will close the +// http.Response Body if it receives an error. +func (client ManagersClient) PatchSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// PatchResponder handles the response to the Patch request. The method always +// closes the http.Response Body. +func (client ManagersClient) PatchResponder(resp *http.Response) (result Manager, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/models.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/models.go similarity index 89% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/models.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/models.go index fc6475f7f815..9695388e700f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/models.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/models.go @@ -18,7 +18,7 @@ import ( ) // The package's fully qualified name. -const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" +const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" // AadAuthenticationParameters AAD Vpn authentication type related parameters. type AadAuthenticationParameters struct { @@ -30,62 +30,178 @@ type AadAuthenticationParameters struct { AadIssuer *string `json:"aadIssuer,omitempty"` } -// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the -// virtual network. -type AddressSpace struct { - // AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation. - AddressPrefixes *[]string `json:"addressPrefixes,omitempty"` +// Action action to be taken on a route matching a RouteMap criterion. +type Action struct { + // Type - Type of action to be taken. Supported types are 'Remove', 'Add', 'Replace', and 'Drop.'. Possible values include: 'RouteMapActionTypeUnknown', 'RouteMapActionTypeRemove', 'RouteMapActionTypeAdd', 'RouteMapActionTypeReplace', 'RouteMapActionTypeDrop' + Type RouteMapActionType `json:"type,omitempty"` + // Parameters - List of parameters relevant to the action.For instance if type is drop then parameters has list of prefixes to be dropped.If type is add, parameters would have list of ASN numbers to be added + Parameters *[]Parameter `json:"parameters,omitempty"` } -// ApplicationGateway application gateway resource. -type ApplicationGateway struct { - autorest.Response `json:"-"` - // ApplicationGatewayPropertiesFormat - Properties of the application gateway. - *ApplicationGatewayPropertiesFormat `json:"properties,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` - // Zones - A list of availability zones denoting where the resource needs to come from. - Zones *[]string `json:"zones,omitempty"` - // Identity - The identity of the application gateway, if configured. - Identity *ManagedServiceIdentity `json:"identity,omitempty"` +// BasicActiveBaseSecurityAdminRule network base admin rule. +type BasicActiveBaseSecurityAdminRule interface { + AsActiveSecurityAdminRule() (*ActiveSecurityAdminRule, bool) + AsActiveDefaultSecurityAdminRule() (*ActiveDefaultSecurityAdminRule, bool) + AsActiveBaseSecurityAdminRule() (*ActiveBaseSecurityAdminRule, bool) +} + +// ActiveBaseSecurityAdminRule network base admin rule. +type ActiveBaseSecurityAdminRule struct { // ID - Resource ID. ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Location - Resource location. - Location *string `json:"location,omitempty"` - // Tags - Resource tags. - Tags map[string]*string `json:"tags"` + // CommitTime - Deployment time string. + CommitTime *date.Time `json:"commitTime,omitempty"` + // Region - Deployment region. + Region *string `json:"region,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindActiveBaseSecurityAdminRule', 'KindCustom', 'KindDefault' + Kind Kind `json:"kind,omitempty"` +} + +func unmarshalBasicActiveBaseSecurityAdminRule(body []byte) (BasicActiveBaseSecurityAdminRule, error) { + var m map[string]interface{} + err := json.Unmarshal(body, &m) + if err != nil { + return nil, err + } + + switch m["kind"] { + case string(KindCustom): + var asar ActiveSecurityAdminRule + err := json.Unmarshal(body, &asar) + return asar, err + case string(KindDefault): + var adsar ActiveDefaultSecurityAdminRule + err := json.Unmarshal(body, &adsar) + return adsar, err + default: + var absar ActiveBaseSecurityAdminRule + err := json.Unmarshal(body, &absar) + return absar, err + } } +func unmarshalBasicActiveBaseSecurityAdminRuleArray(body []byte) ([]BasicActiveBaseSecurityAdminRule, error) { + var rawMessages []*json.RawMessage + err := json.Unmarshal(body, &rawMessages) + if err != nil { + return nil, err + } -// MarshalJSON is the custom marshaler for ApplicationGateway. -func (ag ApplicationGateway) MarshalJSON() ([]byte, error) { + absarArray := make([]BasicActiveBaseSecurityAdminRule, len(rawMessages)) + + for index, rawMessage := range rawMessages { + absar, err := unmarshalBasicActiveBaseSecurityAdminRule(*rawMessage) + if err != nil { + return nil, err + } + absarArray[index] = absar + } + return absarArray, nil +} + +// MarshalJSON is the custom marshaler for ActiveBaseSecurityAdminRule. +func (absar ActiveBaseSecurityAdminRule) MarshalJSON() ([]byte, error) { + absar.Kind = KindActiveBaseSecurityAdminRule objectMap := make(map[string]interface{}) - if ag.ApplicationGatewayPropertiesFormat != nil { - objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat + if absar.ID != nil { + objectMap["id"] = absar.ID } - if ag.Zones != nil { - objectMap["zones"] = ag.Zones + if absar.CommitTime != nil { + objectMap["commitTime"] = absar.CommitTime } - if ag.Identity != nil { - objectMap["identity"] = ag.Identity + if absar.Region != nil { + objectMap["region"] = absar.Region } - if ag.ID != nil { - objectMap["id"] = ag.ID + if absar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = absar.ConfigurationDescription } - if ag.Location != nil { - objectMap["location"] = ag.Location + if absar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = absar.RuleCollectionDescription } - if ag.Tags != nil { - objectMap["tags"] = ag.Tags + if absar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = absar.RuleCollectionAppliesToGroups + } + if absar.RuleGroups != nil { + objectMap["ruleGroups"] = absar.RuleGroups + } + if absar.Kind != "" { + objectMap["kind"] = absar.Kind } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct. -func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error { +// AsActiveSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveBaseSecurityAdminRule. +func (absar ActiveBaseSecurityAdminRule) AsActiveSecurityAdminRule() (*ActiveSecurityAdminRule, bool) { + return nil, false +} + +// AsActiveDefaultSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveBaseSecurityAdminRule. +func (absar ActiveBaseSecurityAdminRule) AsActiveDefaultSecurityAdminRule() (*ActiveDefaultSecurityAdminRule, bool) { + return nil, false +} + +// AsActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveBaseSecurityAdminRule. +func (absar ActiveBaseSecurityAdminRule) AsActiveBaseSecurityAdminRule() (*ActiveBaseSecurityAdminRule, bool) { + return &absar, true +} + +// AsBasicActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveBaseSecurityAdminRule. +func (absar ActiveBaseSecurityAdminRule) AsBasicActiveBaseSecurityAdminRule() (BasicActiveBaseSecurityAdminRule, bool) { + return &absar, true +} + +// ActiveConfigurationParameter effective Virtual Networks Parameter. +type ActiveConfigurationParameter struct { + // Regions - List of regions. + Regions *[]string `json:"regions,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// ActiveConnectivityConfiguration active connectivity configuration. +type ActiveConnectivityConfiguration struct { + // CommitTime - Deployment time string. + CommitTime *date.Time `json:"commitTime,omitempty"` + // Region - Deployment region. + Region *string `json:"region,omitempty"` + // ID - Connectivity configuration ID. + ID *string `json:"id,omitempty"` + // ConnectivityConfigurationProperties - Properties of a network manager connectivity configuration + *ConnectivityConfigurationProperties `json:"properties,omitempty"` + // ConfigurationGroups - Effective configuration groups. + ConfigurationGroups *[]ConfigurationGroup `json:"configurationGroups,omitempty"` +} + +// MarshalJSON is the custom marshaler for ActiveConnectivityConfiguration. +func (acc ActiveConnectivityConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if acc.CommitTime != nil { + objectMap["commitTime"] = acc.CommitTime + } + if acc.Region != nil { + objectMap["region"] = acc.Region + } + if acc.ID != nil { + objectMap["id"] = acc.ID + } + if acc.ConnectivityConfigurationProperties != nil { + objectMap["properties"] = acc.ConnectivityConfigurationProperties + } + if acc.ConfigurationGroups != nil { + objectMap["configurationGroups"] = acc.ConfigurationGroups + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ActiveConnectivityConfiguration struct. +func (acc *ActiveConnectivityConfiguration) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -93,41 +209,161 @@ func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error { } for k, v := range m { switch k { - case "properties": + case "commitTime": if v != nil { - var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat) + var commitTime date.Time + err = json.Unmarshal(*v, &commitTime) if err != nil { return err } - ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat + acc.CommitTime = &commitTime } - case "etag": + case "region": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var region string + err = json.Unmarshal(*v, ®ion) if err != nil { return err } - ag.Etag = &etag + acc.Region = ®ion } - case "zones": + case "id": if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) + var ID string + err = json.Unmarshal(*v, &ID) if err != nil { return err } - ag.Zones = &zones + acc.ID = &ID } - case "identity": + case "properties": if v != nil { - var identity ManagedServiceIdentity - err = json.Unmarshal(*v, &identity) + var connectivityConfigurationProperties ConnectivityConfigurationProperties + err = json.Unmarshal(*v, &connectivityConfigurationProperties) if err != nil { return err } - ag.Identity = &identity + acc.ConnectivityConfigurationProperties = &connectivityConfigurationProperties + } + case "configurationGroups": + if v != nil { + var configurationGroups []ConfigurationGroup + err = json.Unmarshal(*v, &configurationGroups) + if err != nil { + return err + } + acc.ConfigurationGroups = &configurationGroups + } + } + } + + return nil +} + +// ActiveConnectivityConfigurationsListResult result of the request to list active connectivity +// configurations. It contains a list of active connectivity configurations and a skiptoken to get the next +// set of results. +type ActiveConnectivityConfigurationsListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of active connectivity configurations. + Value *[]ActiveConnectivityConfiguration `json:"value,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// ActiveDefaultSecurityAdminRule network default admin rule. +type ActiveDefaultSecurityAdminRule struct { + // DefaultAdminPropertiesFormat - Indicates the properties of the default security admin rule + *DefaultAdminPropertiesFormat `json:"properties,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // CommitTime - Deployment time string. + CommitTime *date.Time `json:"commitTime,omitempty"` + // Region - Deployment region. + Region *string `json:"region,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindActiveBaseSecurityAdminRule', 'KindCustom', 'KindDefault' + Kind Kind `json:"kind,omitempty"` +} + +// MarshalJSON is the custom marshaler for ActiveDefaultSecurityAdminRule. +func (adsar ActiveDefaultSecurityAdminRule) MarshalJSON() ([]byte, error) { + adsar.Kind = KindDefault + objectMap := make(map[string]interface{}) + if adsar.DefaultAdminPropertiesFormat != nil { + objectMap["properties"] = adsar.DefaultAdminPropertiesFormat + } + if adsar.ID != nil { + objectMap["id"] = adsar.ID + } + if adsar.CommitTime != nil { + objectMap["commitTime"] = adsar.CommitTime + } + if adsar.Region != nil { + objectMap["region"] = adsar.Region + } + if adsar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = adsar.ConfigurationDescription + } + if adsar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = adsar.RuleCollectionDescription + } + if adsar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = adsar.RuleCollectionAppliesToGroups + } + if adsar.RuleGroups != nil { + objectMap["ruleGroups"] = adsar.RuleGroups + } + if adsar.Kind != "" { + objectMap["kind"] = adsar.Kind + } + return json.Marshal(objectMap) +} + +// AsActiveSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveDefaultSecurityAdminRule. +func (adsar ActiveDefaultSecurityAdminRule) AsActiveSecurityAdminRule() (*ActiveSecurityAdminRule, bool) { + return nil, false +} + +// AsActiveDefaultSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveDefaultSecurityAdminRule. +func (adsar ActiveDefaultSecurityAdminRule) AsActiveDefaultSecurityAdminRule() (*ActiveDefaultSecurityAdminRule, bool) { + return &adsar, true +} + +// AsActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveDefaultSecurityAdminRule. +func (adsar ActiveDefaultSecurityAdminRule) AsActiveBaseSecurityAdminRule() (*ActiveBaseSecurityAdminRule, bool) { + return nil, false +} + +// AsBasicActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveDefaultSecurityAdminRule. +func (adsar ActiveDefaultSecurityAdminRule) AsBasicActiveBaseSecurityAdminRule() (BasicActiveBaseSecurityAdminRule, bool) { + return &adsar, true +} + +// UnmarshalJSON is the custom unmarshaler for ActiveDefaultSecurityAdminRule struct. +func (adsar *ActiveDefaultSecurityAdminRule) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var defaultAdminPropertiesFormat DefaultAdminPropertiesFormat + err = json.Unmarshal(*v, &defaultAdminPropertiesFormat) + if err != nil { + return err + } + adsar.DefaultAdminPropertiesFormat = &defaultAdminPropertiesFormat } case "id": if v != nil { @@ -136,43 +372,70 @@ func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error { if err != nil { return err } - ag.ID = &ID + adsar.ID = &ID } - case "name": + case "commitTime": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var commitTime date.Time + err = json.Unmarshal(*v, &commitTime) if err != nil { return err } - ag.Name = &name + adsar.CommitTime = &commitTime } - case "type": + case "region": if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) + var region string + err = json.Unmarshal(*v, ®ion) if err != nil { return err } - ag.Type = &typeVar + adsar.Region = ®ion } - case "location": + case "configurationDescription": if v != nil { - var location string - err = json.Unmarshal(*v, &location) + var configurationDescription string + err = json.Unmarshal(*v, &configurationDescription) if err != nil { return err } - ag.Location = &location + adsar.ConfigurationDescription = &configurationDescription } - case "tags": + case "ruleCollectionDescription": if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) + var ruleCollectionDescription string + err = json.Unmarshal(*v, &ruleCollectionDescription) if err != nil { return err } - ag.Tags = tags + adsar.RuleCollectionDescription = &ruleCollectionDescription + } + case "ruleCollectionAppliesToGroups": + if v != nil { + var ruleCollectionAppliesToGroups []ManagerSecurityGroupItem + err = json.Unmarshal(*v, &ruleCollectionAppliesToGroups) + if err != nil { + return err + } + adsar.RuleCollectionAppliesToGroups = &ruleCollectionAppliesToGroups + } + case "ruleGroups": + if v != nil { + var ruleGroups []ConfigurationGroup + err = json.Unmarshal(*v, &ruleGroups) + if err != nil { + return err + } + adsar.RuleGroups = &ruleGroups + } + case "kind": + if v != nil { + var kind Kind + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + adsar.Kind = kind } } } @@ -180,37 +443,84 @@ func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error { return nil } -// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway. -type ApplicationGatewayAuthenticationCertificate struct { - // ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate. - *ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"` - // Name - Name of the authentication certificate that is unique within an Application Gateway. - Name *string `json:"name,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` - // Type - READ-ONLY; Type of the resource. - Type *string `json:"type,omitempty"` +// ActiveSecurityAdminRule network admin rule. +type ActiveSecurityAdminRule struct { + // AdminPropertiesFormat - Indicates the properties of the security admin rule + *AdminPropertiesFormat `json:"properties,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` + // CommitTime - Deployment time string. + CommitTime *date.Time `json:"commitTime,omitempty"` + // Region - Deployment region. + Region *string `json:"region,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindActiveBaseSecurityAdminRule', 'KindCustom', 'KindDefault' + Kind Kind `json:"kind,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate. -func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ActiveSecurityAdminRule. +func (asar ActiveSecurityAdminRule) MarshalJSON() ([]byte, error) { + asar.Kind = KindCustom objectMap := make(map[string]interface{}) - if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil { - objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat + if asar.AdminPropertiesFormat != nil { + objectMap["properties"] = asar.AdminPropertiesFormat } - if agac.Name != nil { - objectMap["name"] = agac.Name + if asar.ID != nil { + objectMap["id"] = asar.ID } - if agac.ID != nil { - objectMap["id"] = agac.ID + if asar.CommitTime != nil { + objectMap["commitTime"] = asar.CommitTime + } + if asar.Region != nil { + objectMap["region"] = asar.Region + } + if asar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = asar.ConfigurationDescription + } + if asar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = asar.RuleCollectionDescription + } + if asar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = asar.RuleCollectionAppliesToGroups + } + if asar.RuleGroups != nil { + objectMap["ruleGroups"] = asar.RuleGroups + } + if asar.Kind != "" { + objectMap["kind"] = asar.Kind } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct. -func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error { +// AsActiveSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveSecurityAdminRule. +func (asar ActiveSecurityAdminRule) AsActiveSecurityAdminRule() (*ActiveSecurityAdminRule, bool) { + return &asar, true +} + +// AsActiveDefaultSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveSecurityAdminRule. +func (asar ActiveSecurityAdminRule) AsActiveDefaultSecurityAdminRule() (*ActiveDefaultSecurityAdminRule, bool) { + return nil, false +} + +// AsActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveSecurityAdminRule. +func (asar ActiveSecurityAdminRule) AsActiveBaseSecurityAdminRule() (*ActiveBaseSecurityAdminRule, bool) { + return nil, false +} + +// AsBasicActiveBaseSecurityAdminRule is the BasicActiveBaseSecurityAdminRule implementation for ActiveSecurityAdminRule. +func (asar ActiveSecurityAdminRule) AsBasicActiveBaseSecurityAdminRule() (BasicActiveBaseSecurityAdminRule, bool) { + return &asar, true +} + +// UnmarshalJSON is the custom unmarshaler for ActiveSecurityAdminRule struct. +func (asar *ActiveSecurityAdminRule) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -220,48 +530,84 @@ func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []by switch k { case "properties": if v != nil { - var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat) + var adminPropertiesFormat AdminPropertiesFormat + err = json.Unmarshal(*v, &adminPropertiesFormat) if err != nil { return err } - agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat + asar.AdminPropertiesFormat = &adminPropertiesFormat } - case "name": + case "id": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var ID string + err = json.Unmarshal(*v, &ID) if err != nil { return err } - agac.Name = &name + asar.ID = &ID } - case "etag": + case "commitTime": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var commitTime date.Time + err = json.Unmarshal(*v, &commitTime) if err != nil { return err } - agac.Etag = &etag + asar.CommitTime = &commitTime } - case "type": + case "region": if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) + var region string + err = json.Unmarshal(*v, ®ion) if err != nil { return err } - agac.Type = &typeVar + asar.Region = ®ion } - case "id": + case "configurationDescription": if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) + var configurationDescription string + err = json.Unmarshal(*v, &configurationDescription) if err != nil { return err } - agac.ID = &ID + asar.ConfigurationDescription = &configurationDescription + } + case "ruleCollectionDescription": + if v != nil { + var ruleCollectionDescription string + err = json.Unmarshal(*v, &ruleCollectionDescription) + if err != nil { + return err + } + asar.RuleCollectionDescription = &ruleCollectionDescription + } + case "ruleCollectionAppliesToGroups": + if v != nil { + var ruleCollectionAppliesToGroups []ManagerSecurityGroupItem + err = json.Unmarshal(*v, &ruleCollectionAppliesToGroups) + if err != nil { + return err + } + asar.RuleCollectionAppliesToGroups = &ruleCollectionAppliesToGroups + } + case "ruleGroups": + if v != nil { + var ruleGroups []ConfigurationGroup + err = json.Unmarshal(*v, &ruleGroups) + if err != nil { + return err + } + asar.RuleGroups = &ruleGroups + } + case "kind": + if v != nil { + var kind Kind + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + asar.Kind = kind } } } @@ -269,70 +615,173 @@ func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []by return nil } -// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an -// application gateway. -type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct { - // Data - Certificate public data. - Data *string `json:"data,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the authentication certificate resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +// ActiveSecurityAdminRulesListResult result of the request to list active security admin rules. It +// contains a list of active security admin rules and a skiptoken to get the next set of results. +type ActiveSecurityAdminRulesListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of active security admin rules. + Value *[]BasicActiveBaseSecurityAdminRule `json:"value,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// UnmarshalJSON is the custom unmarshaler for ActiveSecurityAdminRulesListResult struct. +func (asarlr *ActiveSecurityAdminRulesListResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "value": + if v != nil { + value, err := unmarshalBasicActiveBaseSecurityAdminRuleArray(*v) + if err != nil { + return err + } + asarlr.Value = &value + } + case "skipToken": + if v != nil { + var skipToken string + err = json.Unmarshal(*v, &skipToken) + if err != nil { + return err + } + asarlr.SkipToken = &skipToken + } + } + } + + return nil +} + +// AddressPrefixItem address prefix item. +type AddressPrefixItem struct { + // AddressPrefix - Address prefix. + AddressPrefix *string `json:"addressPrefix,omitempty"` + // AddressPrefixType - Address prefix type. Possible values include: 'IPPrefix', 'ServiceTag' + AddressPrefixType AddressPrefixType `json:"addressPrefixType,omitempty"` +} + +// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the +// virtual network. +type AddressSpace struct { + // AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation. + AddressPrefixes *[]string `json:"addressPrefixes,omitempty"` +} + +// AdminPropertiesFormat security admin rule resource. +type AdminPropertiesFormat struct { + // Description - A description for this rule. Restricted to 140 chars. + Description *string `json:"description,omitempty"` + // Protocol - Network protocol this rule applies to. Possible values include: 'SecurityConfigurationRuleProtocolTCP', 'SecurityConfigurationRuleProtocolUDP', 'SecurityConfigurationRuleProtocolIcmp', 'SecurityConfigurationRuleProtocolEsp', 'SecurityConfigurationRuleProtocolAny', 'SecurityConfigurationRuleProtocolAh' + Protocol SecurityConfigurationRuleProtocol `json:"protocol,omitempty"` + // Sources - The CIDR or source IP ranges. + Sources *[]AddressPrefixItem `json:"sources,omitempty"` + // Destinations - The destination address prefixes. CIDR or destination IP ranges. + Destinations *[]AddressPrefixItem `json:"destinations,omitempty"` + // SourcePortRanges - The source port ranges. + SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"` + // DestinationPortRanges - The destination port ranges. + DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"` + // Access - Indicates the access allowed for this particular rule. Possible values include: 'SecurityConfigurationRuleAccessAllow', 'SecurityConfigurationRuleAccessDeny', 'SecurityConfigurationRuleAccessAlwaysAllow' + Access SecurityConfigurationRuleAccess `json:"access,omitempty"` + // Priority - The priority of the rule. The value can be between 1 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule. + Priority *int32 `json:"priority,omitempty"` + // Direction - Indicates if the traffic matched against the rule in inbound or outbound. Possible values include: 'SecurityConfigurationRuleDirectionInbound', 'SecurityConfigurationRuleDirectionOutbound' + Direction SecurityConfigurationRuleDirection `json:"direction,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificatePropertiesFormat. -func (agacpf ApplicationGatewayAuthenticationCertificatePropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for AdminPropertiesFormat. +func (apf AdminPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agacpf.Data != nil { - objectMap["data"] = agacpf.Data + if apf.Description != nil { + objectMap["description"] = apf.Description + } + if apf.Protocol != "" { + objectMap["protocol"] = apf.Protocol + } + if apf.Sources != nil { + objectMap["sources"] = apf.Sources + } + if apf.Destinations != nil { + objectMap["destinations"] = apf.Destinations + } + if apf.SourcePortRanges != nil { + objectMap["sourcePortRanges"] = apf.SourcePortRanges + } + if apf.DestinationPortRanges != nil { + objectMap["destinationPortRanges"] = apf.DestinationPortRanges + } + if apf.Access != "" { + objectMap["access"] = apf.Access + } + if apf.Priority != nil { + objectMap["priority"] = apf.Priority + } + if apf.Direction != "" { + objectMap["direction"] = apf.Direction } return json.Marshal(objectMap) } -// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration. -type ApplicationGatewayAutoscaleConfiguration struct { - // MinCapacity - Lower bound on number of Application Gateway capacity. - MinCapacity *int32 `json:"minCapacity,omitempty"` - // MaxCapacity - Upper bound on number of Application Gateway capacity. - MaxCapacity *int32 `json:"maxCapacity,omitempty"` -} - -// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service -// call. -type ApplicationGatewayAvailableSslOptions struct { - autorest.Response `json:"-"` - // ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options. - *ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"` - // ID - Resource ID. +// AdminRule network admin rule. +type AdminRule struct { + // AdminPropertiesFormat - Indicates the properties of the security admin rule + *AdminPropertiesFormat `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. ID *string `json:"id,omitempty"` // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` - // Location - Resource location. - Location *string `json:"location,omitempty"` - // Tags - Resource tags. - Tags map[string]*string `json:"tags"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Kind - Possible values include: 'KindBasicBaseAdminRuleKindBaseAdminRule', 'KindBasicBaseAdminRuleKindCustom', 'KindBasicBaseAdminRuleKindDefault' + Kind KindBasicBaseAdminRule `json:"kind,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions. -func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for AdminRule. +func (ar AdminRule) MarshalJSON() ([]byte, error) { + ar.Kind = KindBasicBaseAdminRuleKindCustom objectMap := make(map[string]interface{}) - if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil { - objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat - } - if agaso.ID != nil { - objectMap["id"] = agaso.ID + if ar.AdminPropertiesFormat != nil { + objectMap["properties"] = ar.AdminPropertiesFormat } - if agaso.Location != nil { - objectMap["location"] = agaso.Location - } - if agaso.Tags != nil { - objectMap["tags"] = agaso.Tags + if ar.Kind != "" { + objectMap["kind"] = ar.Kind } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct. -func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error { +// AsAdminRule is the BasicBaseAdminRule implementation for AdminRule. +func (ar AdminRule) AsAdminRule() (*AdminRule, bool) { + return &ar, true +} + +// AsDefaultAdminRule is the BasicBaseAdminRule implementation for AdminRule. +func (ar AdminRule) AsDefaultAdminRule() (*DefaultAdminRule, bool) { + return nil, false +} + +// AsBaseAdminRule is the BasicBaseAdminRule implementation for AdminRule. +func (ar AdminRule) AsBaseAdminRule() (*BaseAdminRule, bool) { + return nil, false +} + +// AsBasicBaseAdminRule is the BasicBaseAdminRule implementation for AdminRule. +func (ar AdminRule) AsBasicBaseAdminRule() (BasicBaseAdminRule, bool) { + return &ar, true +} + +// UnmarshalJSON is the custom unmarshaler for AdminRule struct. +func (ar *AdminRule) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -342,12 +791,30 @@ func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) e switch k { case "properties": if v != nil { - var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat) + var adminPropertiesFormat AdminPropertiesFormat + err = json.Unmarshal(*v, &adminPropertiesFormat) if err != nil { return err } - agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat + ar.AdminPropertiesFormat = &adminPropertiesFormat + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + ar.SystemData = &systemData + } + case "kind": + if v != nil { + var kind KindBasicBaseAdminRule + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + ar.Kind = kind } case "id": if v != nil { @@ -356,7 +823,7 @@ func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) e if err != nil { return err } - agaso.ID = &ID + ar.ID = &ID } case "name": if v != nil { @@ -365,7 +832,7 @@ func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) e if err != nil { return err } - agaso.Name = &name + ar.Name = &name } case "type": if v != nil { @@ -374,25 +841,111 @@ func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) e if err != nil { return err } - agaso.Type = &typeVar + ar.Type = &typeVar } - case "location": + case "etag": if v != nil { - var location string - err = json.Unmarshal(*v, &location) + var etag string + err = json.Unmarshal(*v, &etag) if err != nil { return err } - agaso.Location = &location + ar.Etag = &etag } - case "tags": + } + } + + return nil +} + +// AdminRuleCollection defines the admin rule collection. +type AdminRuleCollection struct { + autorest.Response `json:"-"` + // AdminRuleCollectionPropertiesFormat - Indicates the properties for the network manager admin rule collection. + *AdminRuleCollectionPropertiesFormat `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for AdminRuleCollection. +func (arc AdminRuleCollection) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if arc.AdminRuleCollectionPropertiesFormat != nil { + objectMap["properties"] = arc.AdminRuleCollectionPropertiesFormat + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for AdminRuleCollection struct. +func (arc *AdminRuleCollection) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) + var adminRuleCollectionPropertiesFormat AdminRuleCollectionPropertiesFormat + err = json.Unmarshal(*v, &adminRuleCollectionPropertiesFormat) if err != nil { return err } - agaso.Tags = tags + arc.AdminRuleCollectionPropertiesFormat = &adminRuleCollectionPropertiesFormat + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + arc.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + arc.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + arc.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + arc.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + arc.Etag = &etag } } } @@ -400,41 +953,27 @@ func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) e return nil } -// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of -// ApplicationGatewayAvailableSslOptions. -type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct { - // PredefinedPolicies - List of available Ssl predefined policy. - PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"` - // DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20150501', 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401', 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401S' - DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"` - // AvailableCipherSuites - List of available Ssl cipher suites. - AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"` - // AvailableProtocols - List of available Ssl protocols. - AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"` -} - -// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API -// service call. -type ApplicationGatewayAvailableSslPredefinedPolicies struct { +// AdminRuleCollectionListResult security admin configuration rule collection list result. +type AdminRuleCollectionListResult struct { autorest.Response `json:"-"` - // Value - List of available Ssl predefined policy. - Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"` - // NextLink - URL to get the next set of results. + // Value - A list of network manager security admin configuration rule collections + Value *[]AdminRuleCollection `json:"value,omitempty"` + // NextLink - Gets the URL to get the next set of results. NextLink *string `json:"nextLink,omitempty"` } -// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of -// ApplicationGatewaySslPredefinedPolicy values. -type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct { +// AdminRuleCollectionListResultIterator provides access to a complete listing of AdminRuleCollection +// values. +type AdminRuleCollectionListResultIterator struct { i int - page ApplicationGatewayAvailableSslPredefinedPoliciesPage + page AdminRuleCollectionListResultPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *AdminRuleCollectionListResultIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionListResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -459,68 +998,67 @@ func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithCo // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error { +func (iter *AdminRuleCollectionListResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool { +func (iter AdminRuleCollectionListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies { +func (iter AdminRuleCollectionListResultIterator) Response() AdminRuleCollectionListResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy { +func (iter AdminRuleCollectionListResultIterator) Value() AdminRuleCollection { if !iter.page.NotDone() { - return ApplicationGatewaySslPredefinedPolicy{} + return AdminRuleCollection{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type. -func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator { - return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page} +// Creates a new instance of the AdminRuleCollectionListResultIterator type. +func NewAdminRuleCollectionListResultIterator(page AdminRuleCollectionListResultPage) AdminRuleCollectionListResultIterator { + return AdminRuleCollectionListResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool { - return agaspp.Value == nil || len(*agaspp.Value) == 0 +func (arclr AdminRuleCollectionListResult) IsEmpty() bool { + return arclr.Value == nil || len(*arclr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) hasNextLink() bool { - return agaspp.NextLink != nil && len(*agaspp.NextLink) != 0 +func (arclr AdminRuleCollectionListResult) hasNextLink() bool { + return arclr.NextLink != nil && len(*arclr.NextLink) != 0 } -// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results. +// adminRuleCollectionListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) { - if !agaspp.hasNextLink() { +func (arclr AdminRuleCollectionListResult) adminRuleCollectionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !arclr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(agaspp.NextLink))) + autorest.WithBaseURL(to.String(arclr.NextLink))) } -// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of -// ApplicationGatewaySslPredefinedPolicy values. -type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct { - fn func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error) - agaspp ApplicationGatewayAvailableSslPredefinedPolicies +// AdminRuleCollectionListResultPage contains a page of AdminRuleCollection values. +type AdminRuleCollectionListResultPage struct { + fn func(context.Context, AdminRuleCollectionListResult) (AdminRuleCollectionListResult, error) + arclr AdminRuleCollectionListResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) { +func (page *AdminRuleCollectionListResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleCollectionListResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -530,11 +1068,11 @@ func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContex }() } for { - next, err := page.fn(ctx, page.agaspp) + next, err := page.fn(ctx, page.arclr) if err != nil { return err } - page.agaspp = next + page.arclr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -545,83 +1083,372 @@ func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContex // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error { +func (page *AdminRuleCollectionListResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool { - return !page.agaspp.IsEmpty() +func (page AdminRuleCollectionListResultPage) NotDone() bool { + return !page.arclr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies { - return page.agaspp +func (page AdminRuleCollectionListResultPage) Response() AdminRuleCollectionListResult { + return page.arclr } // Values returns the slice of values for the current page or nil if there are no values. -func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy { - if page.agaspp.IsEmpty() { +func (page AdminRuleCollectionListResultPage) Values() []AdminRuleCollection { + if page.arclr.IsEmpty() { return nil } - return *page.agaspp.Value + return *page.arclr.Value } -// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type. -func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(cur ApplicationGatewayAvailableSslPredefinedPolicies, getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage { - return ApplicationGatewayAvailableSslPredefinedPoliciesPage{ - fn: getNextPage, - agaspp: cur, +// Creates a new instance of the AdminRuleCollectionListResultPage type. +func NewAdminRuleCollectionListResultPage(cur AdminRuleCollectionListResult, getNextPage func(context.Context, AdminRuleCollectionListResult) (AdminRuleCollectionListResult, error)) AdminRuleCollectionListResultPage { + return AdminRuleCollectionListResultPage{ + fn: getNextPage, + arclr: cur, } } -// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API -// service call. -type ApplicationGatewayAvailableWafRuleSetsResult struct { +// AdminRuleCollectionPropertiesFormat defines the admin rule collection properties. +type AdminRuleCollectionPropertiesFormat struct { + // Description - A description of the admin rule collection. + Description *string `json:"description,omitempty"` + // AppliesToGroups - Groups for configuration + AppliesToGroups *[]ManagerSecurityGroupItem `json:"appliesToGroups,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for AdminRuleCollectionPropertiesFormat. +func (arcpf AdminRuleCollectionPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if arcpf.Description != nil { + objectMap["description"] = arcpf.Description + } + if arcpf.AppliesToGroups != nil { + objectMap["appliesToGroups"] = arcpf.AppliesToGroups + } + return json.Marshal(objectMap) +} + +// AdminRuleCollectionsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type AdminRuleCollectionsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(AdminRuleCollectionsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *AdminRuleCollectionsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for AdminRuleCollectionsDeleteFuture.Result. +func (future *AdminRuleCollectionsDeleteFuture) result(client AdminRuleCollectionsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRuleCollectionsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.AdminRuleCollectionsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// AdminRuleListResult security configuration admin rule list result. +type AdminRuleListResult struct { autorest.Response `json:"-"` - // Value - The list of application gateway rule sets. - Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"` + // Value - A list of admin rules + Value *[]BasicBaseAdminRule `json:"value,omitempty"` + // NextLink - The URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` } -// ApplicationGatewayBackendAddress backend address of an application gateway. -type ApplicationGatewayBackendAddress struct { - // Fqdn - Fully qualified domain name (FQDN). - Fqdn *string `json:"fqdn,omitempty"` - // IPAddress - IP address. - IPAddress *string `json:"ipAddress,omitempty"` +// UnmarshalJSON is the custom unmarshaler for AdminRuleListResult struct. +func (arlr *AdminRuleListResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "value": + if v != nil { + value, err := unmarshalBasicBaseAdminRuleArray(*v) + if err != nil { + return err + } + arlr.Value = &value + } + case "nextLink": + if v != nil { + var nextLink string + err = json.Unmarshal(*v, &nextLink) + if err != nil { + return err + } + arlr.NextLink = &nextLink + } + } + } + + return nil } -// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway. -type ApplicationGatewayBackendAddressPool struct { - // ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool. - *ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the backend address pool that is unique within an Application Gateway. - Name *string `json:"name,omitempty"` +// AdminRuleListResultIterator provides access to a complete listing of BaseAdminRule values. +type AdminRuleListResultIterator struct { + i int + page AdminRuleListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *AdminRuleListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *AdminRuleListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter AdminRuleListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter AdminRuleListResultIterator) Response() AdminRuleListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter AdminRuleListResultIterator) Value() BasicBaseAdminRule { + if !iter.page.NotDone() { + return BaseAdminRule{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the AdminRuleListResultIterator type. +func NewAdminRuleListResultIterator(page AdminRuleListResultPage) AdminRuleListResultIterator { + return AdminRuleListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (arlr AdminRuleListResult) IsEmpty() bool { + return arlr.Value == nil || len(*arlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (arlr AdminRuleListResult) hasNextLink() bool { + return arlr.NextLink != nil && len(*arlr.NextLink) != 0 +} + +// adminRuleListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (arlr AdminRuleListResult) adminRuleListResultPreparer(ctx context.Context) (*http.Request, error) { + if !arlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(arlr.NextLink))) +} + +// AdminRuleListResultPage contains a page of BasicBaseAdminRule values. +type AdminRuleListResultPage struct { + fn func(context.Context, AdminRuleListResult) (AdminRuleListResult, error) + arlr AdminRuleListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *AdminRuleListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AdminRuleListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.arlr) + if err != nil { + return err + } + page.arlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *AdminRuleListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page AdminRuleListResultPage) NotDone() bool { + return !page.arlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page AdminRuleListResultPage) Response() AdminRuleListResult { + return page.arlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page AdminRuleListResultPage) Values() []BasicBaseAdminRule { + if page.arlr.IsEmpty() { + return nil + } + return *page.arlr.Value +} + +// Creates a new instance of the AdminRuleListResultPage type. +func NewAdminRuleListResultPage(cur AdminRuleListResult, getNextPage func(context.Context, AdminRuleListResult) (AdminRuleListResult, error)) AdminRuleListResultPage { + return AdminRuleListResultPage{ + fn: getNextPage, + arlr: cur, + } +} + +// AdminRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type AdminRulesDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(AdminRulesClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *AdminRulesDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for AdminRulesDeleteFuture.Result. +func (future *AdminRulesDeleteFuture) result(client AdminRulesClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AdminRulesDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.AdminRulesDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// ApplicationGateway application gateway resource. +type ApplicationGateway struct { + autorest.Response `json:"-"` + // ApplicationGatewayPropertiesFormat - Properties of the application gateway. + *ApplicationGatewayPropertiesFormat `json:"properties,omitempty"` // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. Etag *string `json:"etag,omitempty"` - // Type - READ-ONLY; Type of the resource. - Type *string `json:"type,omitempty"` + // Zones - A list of availability zones denoting where the resource needs to come from. + Zones *[]string `json:"zones,omitempty"` + // Identity - The identity of the application gateway, if configured. + Identity *ManagedServiceIdentity `json:"identity,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool. -func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGateway. +func (ag ApplicationGateway) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil { - objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat + if ag.ApplicationGatewayPropertiesFormat != nil { + objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat } - if agbap.Name != nil { - objectMap["name"] = agbap.Name + if ag.Zones != nil { + objectMap["zones"] = ag.Zones } - if agbap.ID != nil { - objectMap["id"] = agbap.ID + if ag.Identity != nil { + objectMap["identity"] = ag.Identity + } + if ag.ID != nil { + objectMap["id"] = ag.ID + } + if ag.Location != nil { + objectMap["location"] = ag.Location + } + if ag.Tags != nil { + objectMap["tags"] = ag.Tags } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct. -func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct. +func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -631,39 +1458,39 @@ func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) er switch k { case "properties": if v != nil { - var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat) + var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat) if err != nil { return err } - agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat + ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat } - case "name": + case "etag": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var etag string + err = json.Unmarshal(*v, &etag) if err != nil { return err } - agbap.Name = &name + ag.Etag = &etag } - case "etag": + case "zones": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var zones []string + err = json.Unmarshal(*v, &zones) if err != nil { return err } - agbap.Etag = &etag + ag.Zones = &zones } - case "type": + case "identity": if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) + var identity ManagedServiceIdentity + err = json.Unmarshal(*v, &identity) if err != nil { return err } - agbap.Type = &typeVar + ag.Identity = &identity } case "id": if v != nil { @@ -672,7 +1499,43 @@ func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) er if err != nil { return err } - agbap.ID = &ID + ag.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + ag.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + ag.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + ag.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + ag.Tags = tags } } } @@ -680,75 +1543,11 @@ func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) er return nil } -// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an -// application gateway. -type ApplicationGatewayBackendAddressPoolPropertiesFormat struct { - // BackendIPConfigurations - READ-ONLY; Collection of references to IPs defined in network interfaces. - BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"` - // BackendAddresses - Backend addresses. - BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' - ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` -} - -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPoolPropertiesFormat. -func (agbappf ApplicationGatewayBackendAddressPoolPropertiesFormat) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if agbappf.BackendAddresses != nil { - objectMap["backendAddresses"] = agbappf.BackendAddresses - } - return json.Marshal(objectMap) -} - -// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call. -type ApplicationGatewayBackendHealth struct { - autorest.Response `json:"-"` - // BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources. - BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"` -} - -// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings. -type ApplicationGatewayBackendHealthHTTPSettings struct { - // BackendHTTPSettings - Reference to an ApplicationGatewayBackendHttpSettings resource. - BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"` - // Servers - List of ApplicationGatewayBackendHealthServer resources. - Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"` -} - -// ApplicationGatewayBackendHealthOnDemand result of on demand test probe. -type ApplicationGatewayBackendHealthOnDemand struct { - autorest.Response `json:"-"` - // BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource. - BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"` - // BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings. - BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"` -} - -// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool. -type ApplicationGatewayBackendHealthPool struct { - // BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource. - BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"` - // BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources. - BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"` -} - -// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings. -type ApplicationGatewayBackendHealthServer struct { - // Address - IP address or FQDN of backend server. - Address *string `json:"address,omitempty"` - // IPConfiguration - Reference to IP configuration of backend server. - IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"` - // Health - Health of backend server. Possible values include: 'ApplicationGatewayBackendHealthServerHealthUnknown', 'ApplicationGatewayBackendHealthServerHealthUp', 'ApplicationGatewayBackendHealthServerHealthDown', 'ApplicationGatewayBackendHealthServerHealthPartial', 'ApplicationGatewayBackendHealthServerHealthDraining' - Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"` - // HealthProbeLog - Health Probe Log. - HealthProbeLog *string `json:"healthProbeLog,omitempty"` -} - -// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway. -type ApplicationGatewayBackendHTTPSettings struct { - // ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings. - *ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the backend http settings that is unique within an Application Gateway. +// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway. +type ApplicationGatewayAuthenticationCertificate struct { + // ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate. + *ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"` + // Name - Name of the authentication certificate that is unique within an Application Gateway. Name *string `json:"name,omitempty"` // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. Etag *string `json:"etag,omitempty"` @@ -758,23 +1557,23 @@ type ApplicationGatewayBackendHTTPSettings struct { ID *string `json:"id,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings. -func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate. +func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil { - objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat + if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil { + objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat } - if agbhs.Name != nil { - objectMap["name"] = agbhs.Name + if agac.Name != nil { + objectMap["name"] = agac.Name } - if agbhs.ID != nil { - objectMap["id"] = agbhs.ID + if agac.ID != nil { + objectMap["id"] = agac.ID } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct. -func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct. +func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -784,12 +1583,12 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e switch k { case "properties": if v != nil { - var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat) + var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat) if err != nil { return err } - agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat + agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat } case "name": if v != nil { @@ -798,7 +1597,7 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e if err != nil { return err } - agbhs.Name = &name + agac.Name = &name } case "etag": if v != nil { @@ -807,7 +1606,7 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e if err != nil { return err } - agbhs.Etag = &etag + agac.Etag = &etag } case "type": if v != nil { @@ -816,7 +1615,7 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e if err != nil { return err } - agbhs.Type = &typeVar + agac.Type = &typeVar } case "id": if v != nil { @@ -825,7 +1624,7 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e if err != nil { return err } - agbhs.ID = &ID + agac.ID = &ID } } } @@ -833,115 +1632,70 @@ func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) e return nil } -// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an +// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an // application gateway. -type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct { - // Port - The destination port on the backend. - Port *int32 `json:"port,omitempty"` - // Protocol - The protocol used to communicate with the backend. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' - Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` - // CookieBasedAffinity - Cookie based affinity. Possible values include: 'ApplicationGatewayCookieBasedAffinityEnabled', 'ApplicationGatewayCookieBasedAffinityDisabled' - CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"` - // RequestTimeout - Request timeout in seconds. Application Gateway will fail the request if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400 seconds. - RequestTimeout *int32 `json:"requestTimeout,omitempty"` - // Probe - Probe resource of an application gateway. - Probe *SubResource `json:"probe,omitempty"` - // AuthenticationCertificates - Array of references to application gateway authentication certificates. - AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"` - // TrustedRootCertificates - Array of references to application gateway trusted root certificates. - TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"` - // ConnectionDraining - Connection draining of the backend http settings resource. - ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"` - // HostName - Host header to be sent to the backend servers. - HostName *string `json:"hostName,omitempty"` - // PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false. - PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"` - // AffinityCookieName - Cookie name to use for the affinity cookie. - AffinityCookieName *string `json:"affinityCookieName,omitempty"` - // ProbeEnabled - Whether the probe is enabled. Default value is false. - ProbeEnabled *bool `json:"probeEnabled,omitempty"` - // Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null. - Path *string `json:"path,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct { + // Data - Certificate public data. + Data *string `json:"data,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the authentication certificate resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettingsPropertiesFormat. -func (agbhspf ApplicationGatewayBackendHTTPSettingsPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificatePropertiesFormat. +func (agacpf ApplicationGatewayAuthenticationCertificatePropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agbhspf.Port != nil { - objectMap["port"] = agbhspf.Port - } - if agbhspf.Protocol != "" { - objectMap["protocol"] = agbhspf.Protocol - } - if agbhspf.CookieBasedAffinity != "" { - objectMap["cookieBasedAffinity"] = agbhspf.CookieBasedAffinity - } - if agbhspf.RequestTimeout != nil { - objectMap["requestTimeout"] = agbhspf.RequestTimeout - } - if agbhspf.Probe != nil { - objectMap["probe"] = agbhspf.Probe - } - if agbhspf.AuthenticationCertificates != nil { - objectMap["authenticationCertificates"] = agbhspf.AuthenticationCertificates - } - if agbhspf.TrustedRootCertificates != nil { - objectMap["trustedRootCertificates"] = agbhspf.TrustedRootCertificates - } - if agbhspf.ConnectionDraining != nil { - objectMap["connectionDraining"] = agbhspf.ConnectionDraining - } - if agbhspf.HostName != nil { - objectMap["hostName"] = agbhspf.HostName - } - if agbhspf.PickHostNameFromBackendAddress != nil { - objectMap["pickHostNameFromBackendAddress"] = agbhspf.PickHostNameFromBackendAddress - } - if agbhspf.AffinityCookieName != nil { - objectMap["affinityCookieName"] = agbhspf.AffinityCookieName - } - if agbhspf.ProbeEnabled != nil { - objectMap["probeEnabled"] = agbhspf.ProbeEnabled - } - if agbhspf.Path != nil { - objectMap["path"] = agbhspf.Path + if agacpf.Data != nil { + objectMap["data"] = agacpf.Data } return json.Marshal(objectMap) } -// ApplicationGatewayBackendSettings backend address pool settings of an application gateway. -type ApplicationGatewayBackendSettings struct { - // ApplicationGatewayBackendSettingsPropertiesFormat - Properties of the application gateway backend settings. - *ApplicationGatewayBackendSettingsPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the backend settings that is unique within an Application Gateway. - Name *string `json:"name,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` - // Type - READ-ONLY; Type of the resource. - Type *string `json:"type,omitempty"` +// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration. +type ApplicationGatewayAutoscaleConfiguration struct { + // MinCapacity - Lower bound on number of Application Gateway capacity. + MinCapacity *int32 `json:"minCapacity,omitempty"` + // MaxCapacity - Upper bound on number of Application Gateway capacity. + MaxCapacity *int32 `json:"maxCapacity,omitempty"` +} + +// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service +// call. +type ApplicationGatewayAvailableSslOptions struct { + autorest.Response `json:"-"` + // ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options. + *ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendSettings. -func (agbs ApplicationGatewayBackendSettings) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions. +func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agbs.ApplicationGatewayBackendSettingsPropertiesFormat != nil { - objectMap["properties"] = agbs.ApplicationGatewayBackendSettingsPropertiesFormat + if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil { + objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat } - if agbs.Name != nil { - objectMap["name"] = agbs.Name + if agaso.ID != nil { + objectMap["id"] = agaso.ID } - if agbs.ID != nil { - objectMap["id"] = agbs.ID + if agaso.Location != nil { + objectMap["location"] = agaso.Location + } + if agaso.Tags != nil { + objectMap["tags"] = agaso.Tags } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendSettings struct. -func (agbs *ApplicationGatewayBackendSettings) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct. +func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -951,30 +1705,30 @@ func (agbs *ApplicationGatewayBackendSettings) UnmarshalJSON(body []byte) error switch k { case "properties": if v != nil { - var applicationGatewayBackendSettingsPropertiesFormat ApplicationGatewayBackendSettingsPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayBackendSettingsPropertiesFormat) + var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat) if err != nil { return err } - agbs.ApplicationGatewayBackendSettingsPropertiesFormat = &applicationGatewayBackendSettingsPropertiesFormat + agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat } - case "name": + case "id": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var ID string + err = json.Unmarshal(*v, &ID) if err != nil { return err } - agbs.Name = &name + agaso.ID = &ID } - case "etag": + case "name": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var name string + err = json.Unmarshal(*v, &name) if err != nil { return err } - agbs.Etag = &etag + agaso.Name = &name } case "type": if v != nil { @@ -983,16 +1737,25 @@ func (agbs *ApplicationGatewayBackendSettings) UnmarshalJSON(body []byte) error if err != nil { return err } - agbs.Type = &typeVar + agaso.Type = &typeVar } - case "id": + case "location": if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) + var location string + err = json.Unmarshal(*v, &location) if err != nil { return err } - agbs.ID = &ID + agaso.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + agaso.Tags = tags } } } @@ -1000,151 +1763,228 @@ func (agbs *ApplicationGatewayBackendSettings) UnmarshalJSON(body []byte) error return nil } -// ApplicationGatewayBackendSettingsPropertiesFormat properties of Backend address pool settings of an -// application gateway. -type ApplicationGatewayBackendSettingsPropertiesFormat struct { - // Port - The destination port on the backend. - Port *int32 `json:"port,omitempty"` - // Protocol - The protocol used to communicate with the backend. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' - Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` - // Timeout - Connection timeout in seconds. Application Gateway will fail the request if response is not received within ConnectionTimeout. Acceptable values are from 1 second to 86400 seconds. - Timeout *int32 `json:"timeout,omitempty"` - // Probe - Probe resource of an application gateway. - Probe *SubResource `json:"probe,omitempty"` - // TrustedRootCertificates - Array of references to application gateway trusted root certificates. - TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"` - // HostName - Server name indication to be sent to the backend servers for Tls protocol. - HostName *string `json:"hostName,omitempty"` - // PickHostNameFromBackendAddress - Whether to pick server name indication from the host name of the backend server for Tls protocol. Default value is false. - PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' - ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of +// ApplicationGatewayAvailableSslOptions. +type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct { + // PredefinedPolicies - List of available Ssl predefined policy. + PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"` + // DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S', 'AppGwSslPolicy20220101', 'AppGwSslPolicy20220101S' + DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"` + // AvailableCipherSuites - List of available Ssl cipher suites. + AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"` + // AvailableProtocols - List of available Ssl protocols. + AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayBackendSettingsPropertiesFormat. -func (agbspf ApplicationGatewayBackendSettingsPropertiesFormat) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if agbspf.Port != nil { - objectMap["port"] = agbspf.Port +// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API +// service call. +type ApplicationGatewayAvailableSslPredefinedPolicies struct { + autorest.Response `json:"-"` + // Value - List of available Ssl predefined policy. + Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"` + // NextLink - URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of +// ApplicationGatewaySslPredefinedPolicy values. +type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct { + i int + page ApplicationGatewayAvailableSslPredefinedPoliciesPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() } - if agbspf.Protocol != "" { - objectMap["protocol"] = agbspf.Protocol + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil } - if agbspf.Timeout != nil { - objectMap["timeout"] = agbspf.Timeout + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err } - if agbspf.Probe != nil { - objectMap["probe"] = agbspf.Probe + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy { + if !iter.page.NotDone() { + return ApplicationGatewaySslPredefinedPolicy{} } - if agbspf.TrustedRootCertificates != nil { - objectMap["trustedRootCertificates"] = agbspf.TrustedRootCertificates + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type. +func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator { + return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool { + return agaspp.Value == nil || len(*agaspp.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) hasNextLink() bool { + return agaspp.NextLink != nil && len(*agaspp.NextLink) != 0 +} + +// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) { + if !agaspp.hasNextLink() { + return nil, nil } - if agbspf.HostName != nil { - objectMap["hostName"] = agbspf.HostName + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(agaspp.NextLink))) +} + +// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of +// ApplicationGatewaySslPredefinedPolicy values. +type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct { + fn func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error) + agaspp ApplicationGatewayAvailableSslPredefinedPolicies +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() } - if agbspf.PickHostNameFromBackendAddress != nil { - objectMap["pickHostNameFromBackendAddress"] = agbspf.PickHostNameFromBackendAddress + for { + next, err := page.fn(ctx, page.agaspp) + if err != nil { + return err + } + page.agaspp = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } } - return json.Marshal(objectMap) + return nil } -// ApplicationGatewayClientAuthConfiguration application gateway client authentication configuration. -type ApplicationGatewayClientAuthConfiguration struct { - // VerifyClientCertIssuerDN - Verify client certificate issuer name on the application gateway. - VerifyClientCertIssuerDN *bool `json:"verifyClientCertIssuerDN,omitempty"` +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error { + return page.NextWithContext(context.Background()) } -// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to -// be active for a specified time after the backend server got removed from the configuration. -type ApplicationGatewayConnectionDraining struct { - // Enabled - Whether connection draining is enabled or not. - Enabled *bool `json:"enabled,omitempty"` - // DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds. - DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"` +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool { + return !page.agaspp.IsEmpty() } -// ApplicationGatewayCustomError customer error of an application gateway. -type ApplicationGatewayCustomError struct { - // StatusCode - Status code of the application gateway customer error. Possible values include: 'ApplicationGatewayCustomErrorStatusCodeHTTPStatus403', 'ApplicationGatewayCustomErrorStatusCodeHTTPStatus502' - StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"` - // CustomErrorPageURL - Error page URL of the application gateway customer error. - CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"` +// Response returns the raw server response from the last page request. +func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies { + return page.agaspp } -// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire -// rule group. -type ApplicationGatewayFirewallDisabledRuleGroup struct { - // RuleGroupName - The name of the rule group that will be disabled. - RuleGroupName *string `json:"ruleGroupName,omitempty"` - // Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled. - Rules *[]int32 `json:"rules,omitempty"` +// Values returns the slice of values for the current page or nil if there are no values. +func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy { + if page.agaspp.IsEmpty() { + return nil + } + return *page.agaspp.Value } -// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF -// check. -type ApplicationGatewayFirewallExclusion struct { - // MatchVariable - The variable to be excluded. - MatchVariable *string `json:"matchVariable,omitempty"` - // SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. - SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"` - // Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to. - Selector *string `json:"selector,omitempty"` +// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type. +func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(cur ApplicationGatewayAvailableSslPredefinedPolicies, getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage { + return ApplicationGatewayAvailableSslPredefinedPoliciesPage{ + fn: getNextPage, + agaspp: cur, + } } -// ApplicationGatewayFirewallRule a web application firewall rule. -type ApplicationGatewayFirewallRule struct { - // RuleID - The identifier of the web application firewall rule. - RuleID *int32 `json:"ruleId,omitempty"` - // Description - The description of the web application firewall rule. - Description *string `json:"description,omitempty"` +// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API +// service call. +type ApplicationGatewayAvailableWafRuleSetsResult struct { + autorest.Response `json:"-"` + // Value - The list of application gateway rule sets. + Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"` } -// ApplicationGatewayFirewallRuleGroup a web application firewall rule group. -type ApplicationGatewayFirewallRuleGroup struct { - // RuleGroupName - The name of the web application firewall rule group. - RuleGroupName *string `json:"ruleGroupName,omitempty"` - // Description - The description of the web application firewall rule group. - Description *string `json:"description,omitempty"` - // Rules - The rules of the web application firewall rule group. - Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"` +// ApplicationGatewayBackendAddress backend address of an application gateway. +type ApplicationGatewayBackendAddress struct { + // Fqdn - Fully qualified domain name (FQDN). + Fqdn *string `json:"fqdn,omitempty"` + // IPAddress - IP address. + IPAddress *string `json:"ipAddress,omitempty"` } -// ApplicationGatewayFirewallRuleSet a web application firewall rule set. -type ApplicationGatewayFirewallRuleSet struct { - // ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set. - *ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"` - // ID - Resource ID. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. +// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway. +type ApplicationGatewayBackendAddressPool struct { + // ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool. + *ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the backend address pool that is unique within an Application Gateway. Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Type of the resource. Type *string `json:"type,omitempty"` - // Location - Resource location. - Location *string `json:"location,omitempty"` - // Tags - Resource tags. - Tags map[string]*string `json:"tags"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet. -func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool. +func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil { - objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat - } - if agfrs.ID != nil { - objectMap["id"] = agfrs.ID + if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil { + objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat } - if agfrs.Location != nil { - objectMap["location"] = agfrs.Location + if agbap.Name != nil { + objectMap["name"] = agbap.Name } - if agfrs.Tags != nil { - objectMap["tags"] = agfrs.Tags + if agbap.ID != nil { + objectMap["id"] = agbap.ID } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct. -func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct. +func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -1154,21 +1994,12 @@ func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error switch k { case "properties": if v != nil { - var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat) - if err != nil { - return err - } - agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) + var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat) if err != nil { return err } - agfrs.ID = &ID + agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat } case "name": if v != nil { @@ -1177,34 +2008,34 @@ func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error if err != nil { return err } - agfrs.Name = &name + agbap.Name = &name } - case "type": + case "etag": if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) + var etag string + err = json.Unmarshal(*v, &etag) if err != nil { return err } - agfrs.Type = &typeVar + agbap.Etag = &etag } - case "location": + case "type": if v != nil { - var location string - err = json.Unmarshal(*v, &location) + var typeVar string + err = json.Unmarshal(*v, &typeVar) if err != nil { return err } - agfrs.Location = &location + agbap.Type = &typeVar } - case "tags": + case "id": if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) + var ID string + err = json.Unmarshal(*v, &ID) if err != nil { return err } - agfrs.Tags = tags + agbap.ID = &ID } } } @@ -1212,64 +2043,101 @@ func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error return nil } -// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set. -type ApplicationGatewayFirewallRuleSetPropertiesFormat struct { - // ProvisioningState - READ-ONLY; The provisioning state of the web application firewall rule set. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an +// application gateway. +type ApplicationGatewayBackendAddressPoolPropertiesFormat struct { + // BackendIPConfigurations - READ-ONLY; Collection of references to IPs defined in network interfaces. + BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"` + // BackendAddresses - Backend addresses. + BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // RuleSetType - The type of the web application firewall rule set. - RuleSetType *string `json:"ruleSetType,omitempty"` - // RuleSetVersion - The version of the web application firewall rule set type. - RuleSetVersion *string `json:"ruleSetVersion,omitempty"` - // RuleGroups - The rule groups of the web application firewall rule set. - RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSetPropertiesFormat. -func (agfrspf ApplicationGatewayFirewallRuleSetPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPoolPropertiesFormat. +func (agbappf ApplicationGatewayBackendAddressPoolPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agfrspf.RuleSetType != nil { - objectMap["ruleSetType"] = agfrspf.RuleSetType - } - if agfrspf.RuleSetVersion != nil { - objectMap["ruleSetVersion"] = agfrspf.RuleSetVersion - } - if agfrspf.RuleGroups != nil { - objectMap["ruleGroups"] = agfrspf.RuleGroups + if agbappf.BackendAddresses != nil { + objectMap["backendAddresses"] = agbappf.BackendAddresses } return json.Marshal(objectMap) } -// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway. -type ApplicationGatewayFrontendIPConfiguration struct { - // ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration. - *ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the frontend IP configuration that is unique within an Application Gateway. - Name *string `json:"name,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` +// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call. +type ApplicationGatewayBackendHealth struct { + autorest.Response `json:"-"` + // BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources. + BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"` +} + +// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings. +type ApplicationGatewayBackendHealthHTTPSettings struct { + // BackendHTTPSettings - Reference to an ApplicationGatewayBackendHttpSettings resource. + BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"` + // Servers - List of ApplicationGatewayBackendHealthServer resources. + Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"` +} + +// ApplicationGatewayBackendHealthOnDemand result of on demand test probe. +type ApplicationGatewayBackendHealthOnDemand struct { + autorest.Response `json:"-"` + // BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource. + BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"` + // BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings. + BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"` +} + +// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool. +type ApplicationGatewayBackendHealthPool struct { + // BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource. + BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"` + // BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources. + BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"` +} + +// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings. +type ApplicationGatewayBackendHealthServer struct { + // Address - IP address or FQDN of backend server. + Address *string `json:"address,omitempty"` + // IPConfiguration - Reference to IP configuration of backend server. + IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"` + // Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining' + Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"` + // HealthProbeLog - Health Probe Log. + HealthProbeLog *string `json:"healthProbeLog,omitempty"` +} + +// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway. +type ApplicationGatewayBackendHTTPSettings struct { + // ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings. + *ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the backend http settings that is unique within an Application Gateway. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` // Type - READ-ONLY; Type of the resource. Type *string `json:"type,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration. -func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings. +func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil { - objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat + if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil { + objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat } - if agfic.Name != nil { - objectMap["name"] = agfic.Name + if agbhs.Name != nil { + objectMap["name"] = agbhs.Name } - if agfic.ID != nil { - objectMap["id"] = agfic.ID + if agbhs.ID != nil { + objectMap["id"] = agbhs.ID } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct. -func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct. +func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -1279,12 +2147,12 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt switch k { case "properties": if v != nil { - var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat) + var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat) if err != nil { return err } - agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat + agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat } case "name": if v != nil { @@ -1293,7 +2161,7 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt if err != nil { return err } - agfic.Name = &name + agbhs.Name = &name } case "etag": if v != nil { @@ -1302,7 +2170,7 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt if err != nil { return err } - agfic.Etag = &etag + agbhs.Etag = &etag } case "type": if v != nil { @@ -1311,7 +2179,7 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt if err != nil { return err } - agfic.Type = &typeVar + agbhs.Type = &typeVar } case "id": if v != nil { @@ -1320,7 +2188,7 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt if err != nil { return err } - agfic.ID = &ID + agbhs.ID = &ID } } } @@ -1328,49 +2196,89 @@ func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byt return nil } -// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an +// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an // application gateway. -type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct { - // PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration. - PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' - PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` - // Subnet - Reference to the subnet resource. - Subnet *SubResource `json:"subnet,omitempty"` - // PublicIPAddress - Reference to the PublicIP resource. - PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` - // PrivateLinkConfiguration - Reference to the application gateway private link configuration. - PrivateLinkConfiguration *SubResource `json:"privateLinkConfiguration,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct { + // Port - The destination port on the backend. + Port *int32 `json:"port,omitempty"` + // Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' + Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` + // CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled' + CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"` + // RequestTimeout - Request timeout in seconds. Application Gateway will fail the request if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400 seconds. + RequestTimeout *int32 `json:"requestTimeout,omitempty"` + // Probe - Probe resource of an application gateway. + Probe *SubResource `json:"probe,omitempty"` + // AuthenticationCertificates - Array of references to application gateway authentication certificates. + AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"` + // TrustedRootCertificates - Array of references to application gateway trusted root certificates. + TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"` + // ConnectionDraining - Connection draining of the backend http settings resource. + ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"` + // HostName - Host header to be sent to the backend servers. + HostName *string `json:"hostName,omitempty"` + // PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false. + PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"` + // AffinityCookieName - Cookie name to use for the affinity cookie. + AffinityCookieName *string `json:"affinityCookieName,omitempty"` + // ProbeEnabled - Whether the probe is enabled. Default value is false. + ProbeEnabled *bool `json:"probeEnabled,omitempty"` + // Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null. + Path *string `json:"path,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfigurationPropertiesFormat. -func (agficpf ApplicationGatewayFrontendIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettingsPropertiesFormat. +func (agbhspf ApplicationGatewayBackendHTTPSettingsPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agficpf.PrivateIPAddress != nil { - objectMap["privateIPAddress"] = agficpf.PrivateIPAddress + if agbhspf.Port != nil { + objectMap["port"] = agbhspf.Port } - if agficpf.PrivateIPAllocationMethod != "" { - objectMap["privateIPAllocationMethod"] = agficpf.PrivateIPAllocationMethod + if agbhspf.Protocol != "" { + objectMap["protocol"] = agbhspf.Protocol } - if agficpf.Subnet != nil { - objectMap["subnet"] = agficpf.Subnet + if agbhspf.CookieBasedAffinity != "" { + objectMap["cookieBasedAffinity"] = agbhspf.CookieBasedAffinity } - if agficpf.PublicIPAddress != nil { - objectMap["publicIPAddress"] = agficpf.PublicIPAddress + if agbhspf.RequestTimeout != nil { + objectMap["requestTimeout"] = agbhspf.RequestTimeout } - if agficpf.PrivateLinkConfiguration != nil { - objectMap["privateLinkConfiguration"] = agficpf.PrivateLinkConfiguration + if agbhspf.Probe != nil { + objectMap["probe"] = agbhspf.Probe + } + if agbhspf.AuthenticationCertificates != nil { + objectMap["authenticationCertificates"] = agbhspf.AuthenticationCertificates + } + if agbhspf.TrustedRootCertificates != nil { + objectMap["trustedRootCertificates"] = agbhspf.TrustedRootCertificates + } + if agbhspf.ConnectionDraining != nil { + objectMap["connectionDraining"] = agbhspf.ConnectionDraining + } + if agbhspf.HostName != nil { + objectMap["hostName"] = agbhspf.HostName + } + if agbhspf.PickHostNameFromBackendAddress != nil { + objectMap["pickHostNameFromBackendAddress"] = agbhspf.PickHostNameFromBackendAddress + } + if agbhspf.AffinityCookieName != nil { + objectMap["affinityCookieName"] = agbhspf.AffinityCookieName + } + if agbhspf.ProbeEnabled != nil { + objectMap["probeEnabled"] = agbhspf.ProbeEnabled + } + if agbhspf.Path != nil { + objectMap["path"] = agbhspf.Path } return json.Marshal(objectMap) } -// ApplicationGatewayFrontendPort frontend port of an application gateway. -type ApplicationGatewayFrontendPort struct { - // ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port. - *ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the frontend port that is unique within an Application Gateway. +// ApplicationGatewayBackendSettings backend address pool settings of an application gateway. +type ApplicationGatewayBackendSettings struct { + // ApplicationGatewayBackendSettingsPropertiesFormat - Properties of the application gateway backend settings. + *ApplicationGatewayBackendSettingsPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the backend settings that is unique within an Application Gateway. Name *string `json:"name,omitempty"` // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. Etag *string `json:"etag,omitempty"` @@ -1380,23 +2288,23 @@ type ApplicationGatewayFrontendPort struct { ID *string `json:"id,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort. -func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendSettings. +func (agbs ApplicationGatewayBackendSettings) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil { - objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat + if agbs.ApplicationGatewayBackendSettingsPropertiesFormat != nil { + objectMap["properties"] = agbs.ApplicationGatewayBackendSettingsPropertiesFormat } - if agfp.Name != nil { - objectMap["name"] = agfp.Name + if agbs.Name != nil { + objectMap["name"] = agbs.Name } - if agfp.ID != nil { - objectMap["id"] = agfp.ID + if agbs.ID != nil { + objectMap["id"] = agbs.ID } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct. -func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendSettings struct. +func (agbs *ApplicationGatewayBackendSettings) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -1406,12 +2314,12 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { switch k { case "properties": if v != nil { - var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat) + var applicationGatewayBackendSettingsPropertiesFormat ApplicationGatewayBackendSettingsPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayBackendSettingsPropertiesFormat) if err != nil { return err } - agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat + agbs.ApplicationGatewayBackendSettingsPropertiesFormat = &applicationGatewayBackendSettingsPropertiesFormat } case "name": if v != nil { @@ -1420,7 +2328,7 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { if err != nil { return err } - agfp.Name = &name + agbs.Name = &name } case "etag": if v != nil { @@ -1429,7 +2337,7 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { if err != nil { return err } - agfp.Etag = &etag + agbs.Etag = &etag } case "type": if v != nil { @@ -1438,7 +2346,7 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { if err != nil { return err } - agfp.Type = &typeVar + agbs.Type = &typeVar } case "id": if v != nil { @@ -1447,7 +2355,7 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { if err != nil { return err } - agfp.ID = &ID + agbs.ID = &ID } } } @@ -1455,70 +2363,173 @@ func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { return nil } -// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway. -type ApplicationGatewayFrontendPortPropertiesFormat struct { - // Port - Frontend port. +// ApplicationGatewayBackendSettingsPropertiesFormat properties of Backend address pool settings of an +// application gateway. +type ApplicationGatewayBackendSettingsPropertiesFormat struct { + // Port - The destination port on the backend. Port *int32 `json:"port,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the frontend port resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + // Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' + Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` + // Timeout - Connection timeout in seconds. Application Gateway will fail the request if response is not received within ConnectionTimeout. Acceptable values are from 1 second to 86400 seconds. + Timeout *int32 `json:"timeout,omitempty"` + // Probe - Probe resource of an application gateway. + Probe *SubResource `json:"probe,omitempty"` + // TrustedRootCertificates - Array of references to application gateway trusted root certificates. + TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"` + // HostName - Server name indication to be sent to the backend servers for Tls protocol. + HostName *string `json:"hostName,omitempty"` + // PickHostNameFromBackendAddress - Whether to pick server name indication from the host name of the backend server for Tls protocol. Default value is false. + PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPortPropertiesFormat. -func (agfppf ApplicationGatewayFrontendPortPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayBackendSettingsPropertiesFormat. +func (agbspf ApplicationGatewayBackendSettingsPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agfppf.Port != nil { - objectMap["port"] = agfppf.Port + if agbspf.Port != nil { + objectMap["port"] = agbspf.Port + } + if agbspf.Protocol != "" { + objectMap["protocol"] = agbspf.Protocol + } + if agbspf.Timeout != nil { + objectMap["timeout"] = agbspf.Timeout + } + if agbspf.Probe != nil { + objectMap["probe"] = agbspf.Probe + } + if agbspf.TrustedRootCertificates != nil { + objectMap["trustedRootCertificates"] = agbspf.TrustedRootCertificates + } + if agbspf.HostName != nil { + objectMap["hostName"] = agbspf.HostName + } + if agbspf.PickHostNameFromBackendAddress != nil { + objectMap["pickHostNameFromBackendAddress"] = agbspf.PickHostNameFromBackendAddress } return json.Marshal(objectMap) } -// ApplicationGatewayGlobalConfiguration application Gateway global configuration. -type ApplicationGatewayGlobalConfiguration struct { - // EnableRequestBuffering - Enable request buffering. - EnableRequestBuffering *bool `json:"enableRequestBuffering,omitempty"` - // EnableResponseBuffering - Enable response buffering. - EnableResponseBuffering *bool `json:"enableResponseBuffering,omitempty"` +// ApplicationGatewayClientAuthConfiguration application gateway client authentication configuration. +type ApplicationGatewayClientAuthConfiguration struct { + // VerifyClientCertIssuerDN - Verify client certificate issuer name on the application gateway. + VerifyClientCertIssuerDN *bool `json:"verifyClientCertIssuerDN,omitempty"` + // VerifyClientRevocation - Verify client certificate revocation status. Possible values include: 'None', 'OCSP' + VerifyClientRevocation ApplicationGatewayClientRevocationOptions `json:"verifyClientRevocation,omitempty"` } -// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway. -type ApplicationGatewayHeaderConfiguration struct { - // HeaderName - Header name of the header configuration. - HeaderName *string `json:"headerName,omitempty"` - // HeaderValue - Header value of the header configuration. - HeaderValue *string `json:"headerValue,omitempty"` +// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to +// be active for a specified time after the backend server got removed from the configuration. +type ApplicationGatewayConnectionDraining struct { + // Enabled - Whether connection draining is enabled or not. + Enabled *bool `json:"enabled,omitempty"` + // DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds. + DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"` } -// ApplicationGatewayHTTPListener http listener of an application gateway. -type ApplicationGatewayHTTPListener struct { - // ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener. - *ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the HTTP listener that is unique within an Application Gateway. - Name *string `json:"name,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` - // Type - READ-ONLY; Type of the resource. - Type *string `json:"type,omitempty"` +// ApplicationGatewayCustomError customer error of an application gateway. +type ApplicationGatewayCustomError struct { + // StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502' + StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"` + // CustomErrorPageURL - Error page URL of the application gateway customer error. + CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"` +} + +// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire +// rule group. +type ApplicationGatewayFirewallDisabledRuleGroup struct { + // RuleGroupName - The name of the rule group that will be disabled. + RuleGroupName *string `json:"ruleGroupName,omitempty"` + // Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled. + Rules *[]int32 `json:"rules,omitempty"` +} + +// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF +// check. +type ApplicationGatewayFirewallExclusion struct { + // MatchVariable - The variable to be excluded. + MatchVariable *string `json:"matchVariable,omitempty"` + // SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. + SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"` + // Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to. + Selector *string `json:"selector,omitempty"` +} + +// ApplicationGatewayFirewallManifestRuleSet properties of the web application firewall rule set. +type ApplicationGatewayFirewallManifestRuleSet struct { + // RuleSetType - The type of the web application firewall rule set. + RuleSetType *string `json:"ruleSetType,omitempty"` + // RuleSetVersion - The version of the web application firewall rule set type. + RuleSetVersion *string `json:"ruleSetVersion,omitempty"` + // Status - The rule set status. Possible values include: 'Preview', 'GA', 'Supported', 'Deprecated' + Status ApplicationGatewayRuleSetStatusOptions `json:"status,omitempty"` + // Tiers - Tier of an application gateway that support the rule set. + Tiers *[]ApplicationGatewayTierTypes `json:"tiers,omitempty"` + // RuleGroups - The rule groups of the web application firewall rule set. + RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"` +} + +// ApplicationGatewayFirewallRule a web application firewall rule. +type ApplicationGatewayFirewallRule struct { + // RuleID - The identifier of the web application firewall rule. + RuleID *int32 `json:"ruleId,omitempty"` + // RuleIDString - The string representation of the web application firewall rule identifier. + RuleIDString *string `json:"ruleIdString,omitempty"` + // State - The string representation of the web application firewall rule state. Possible values include: 'ApplicationGatewayWafRuleStateTypesEnabled', 'ApplicationGatewayWafRuleStateTypesDisabled' + State ApplicationGatewayWafRuleStateTypes `json:"state,omitempty"` + // Action - The string representation of the web application firewall rule action. Possible values include: 'ApplicationGatewayWafRuleActionTypesNone', 'ApplicationGatewayWafRuleActionTypesAnomalyScoring', 'ApplicationGatewayWafRuleActionTypesAllow', 'ApplicationGatewayWafRuleActionTypesBlock', 'ApplicationGatewayWafRuleActionTypesLog' + Action ApplicationGatewayWafRuleActionTypes `json:"action,omitempty"` + // Description - The description of the web application firewall rule. + Description *string `json:"description,omitempty"` +} + +// ApplicationGatewayFirewallRuleGroup a web application firewall rule group. +type ApplicationGatewayFirewallRuleGroup struct { + // RuleGroupName - The name of the web application firewall rule group. + RuleGroupName *string `json:"ruleGroupName,omitempty"` + // Description - The description of the web application firewall rule group. + Description *string `json:"description,omitempty"` + // Rules - The rules of the web application firewall rule group. + Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"` +} + +// ApplicationGatewayFirewallRuleSet a web application firewall rule set. +type ApplicationGatewayFirewallRuleSet struct { + // ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set. + *ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener. -func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet. +func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil { - objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat + if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil { + objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat } - if aghl.Name != nil { - objectMap["name"] = aghl.Name + if agfrs.ID != nil { + objectMap["id"] = agfrs.ID } - if aghl.ID != nil { - objectMap["id"] = aghl.ID + if agfrs.Location != nil { + objectMap["location"] = agfrs.Location + } + if agfrs.Tags != nil { + objectMap["tags"] = agfrs.Tags } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct. -func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct. +func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -1528,30 +2539,30 @@ func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error { switch k { case "properties": if v != nil { - var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat - err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat) + var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat) if err != nil { return err } - aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat + agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat } - case "name": + case "id": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var ID string + err = json.Unmarshal(*v, &ID) if err != nil { return err } - aghl.Name = &name + agfrs.ID = &ID } - case "etag": + case "name": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var name string + err = json.Unmarshal(*v, &name) if err != nil { return err } - aghl.Etag = &etag + agfrs.Name = &name } case "type": if v != nil { @@ -1560,16 +2571,25 @@ func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error { if err != nil { return err } - aghl.Type = &typeVar + agfrs.Type = &typeVar } - case "id": + case "location": if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) + var location string + err = json.Unmarshal(*v, &location) if err != nil { return err } - aghl.ID = &ID + agfrs.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + agfrs.Tags = tags } } } @@ -1577,74 +2597,43 @@ func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error { return nil } -// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway. -type ApplicationGatewayHTTPListenerPropertiesFormat struct { - // FrontendIPConfiguration - Frontend IP configuration resource of an application gateway. - FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"` - // FrontendPort - Frontend port resource of an application gateway. - FrontendPort *SubResource `json:"frontendPort,omitempty"` - // Protocol - Protocol of the HTTP listener. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' - Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` - // HostName - Host name of HTTP listener. - HostName *string `json:"hostName,omitempty"` - // SslCertificate - SSL certificate resource of an application gateway. - SslCertificate *SubResource `json:"sslCertificate,omitempty"` - // SslProfile - SSL profile resource of the application gateway. - SslProfile *SubResource `json:"sslProfile,omitempty"` - // RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting. - RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the HTTP listener resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set. +type ApplicationGatewayFirewallRuleSetPropertiesFormat struct { + // ProvisioningState - READ-ONLY; The provisioning state of the web application firewall rule set. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // CustomErrorConfigurations - Custom error configurations of the HTTP listener. - CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"` - // FirewallPolicy - Reference to the FirewallPolicy resource. - FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"` - // HostNames - List of Host names for HTTP Listener that allows special wildcard characters as well. - HostNames *[]string `json:"hostNames,omitempty"` + // RuleSetType - The type of the web application firewall rule set. + RuleSetType *string `json:"ruleSetType,omitempty"` + // RuleSetVersion - The version of the web application firewall rule set type. + RuleSetVersion *string `json:"ruleSetVersion,omitempty"` + // RuleGroups - The rule groups of the web application firewall rule set. + RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"` + // Tiers - Tier of an application gateway that support the rule set. + Tiers *[]ApplicationGatewayTierTypes `json:"tiers,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListenerPropertiesFormat. -func (aghlpf ApplicationGatewayHTTPListenerPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSetPropertiesFormat. +func (agfrspf ApplicationGatewayFirewallRuleSetPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if aghlpf.FrontendIPConfiguration != nil { - objectMap["frontendIPConfiguration"] = aghlpf.FrontendIPConfiguration - } - if aghlpf.FrontendPort != nil { - objectMap["frontendPort"] = aghlpf.FrontendPort - } - if aghlpf.Protocol != "" { - objectMap["protocol"] = aghlpf.Protocol - } - if aghlpf.HostName != nil { - objectMap["hostName"] = aghlpf.HostName - } - if aghlpf.SslCertificate != nil { - objectMap["sslCertificate"] = aghlpf.SslCertificate - } - if aghlpf.SslProfile != nil { - objectMap["sslProfile"] = aghlpf.SslProfile - } - if aghlpf.RequireServerNameIndication != nil { - objectMap["requireServerNameIndication"] = aghlpf.RequireServerNameIndication + if agfrspf.RuleSetType != nil { + objectMap["ruleSetType"] = agfrspf.RuleSetType } - if aghlpf.CustomErrorConfigurations != nil { - objectMap["customErrorConfigurations"] = aghlpf.CustomErrorConfigurations + if agfrspf.RuleSetVersion != nil { + objectMap["ruleSetVersion"] = agfrspf.RuleSetVersion } - if aghlpf.FirewallPolicy != nil { - objectMap["firewallPolicy"] = aghlpf.FirewallPolicy + if agfrspf.RuleGroups != nil { + objectMap["ruleGroups"] = agfrspf.RuleGroups } - if aghlpf.HostNames != nil { - objectMap["hostNames"] = aghlpf.HostNames + if agfrspf.Tiers != nil { + objectMap["tiers"] = agfrspf.Tiers } return json.Marshal(objectMap) } -// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1 -// private IP configuration is allowed. -type ApplicationGatewayIPConfiguration struct { - // ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration. - *ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"` - // Name - Name of the IP configuration that is unique within an Application Gateway. +// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway. +type ApplicationGatewayFrontendIPConfiguration struct { + // ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration. + *ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the frontend IP configuration that is unique within an Application Gateway. Name *string `json:"name,omitempty"` // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. Etag *string `json:"etag,omitempty"` @@ -1654,14 +2643,415 @@ type ApplicationGatewayIPConfiguration struct { ID *string `json:"id,omitempty"` } -// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration. -func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration. +func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil { - objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat + if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil { + objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat } - if agic.Name != nil { - objectMap["name"] = agic.Name + if agfic.Name != nil { + objectMap["name"] = agfic.Name + } + if agfic.ID != nil { + objectMap["id"] = agfic.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct. +func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat) + if err != nil { + return err + } + agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + agfic.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + agfic.Etag = &etag + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + agfic.Type = &typeVar + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + agfic.ID = &ID + } + } + } + + return nil +} + +// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an +// application gateway. +type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct { + // PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration. + PrivateIPAddress *string `json:"privateIPAddress,omitempty"` + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' + PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` + // Subnet - Reference to the subnet resource. + Subnet *SubResource `json:"subnet,omitempty"` + // PublicIPAddress - Reference to the PublicIP resource. + PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` + // PrivateLinkConfiguration - Reference to the application gateway private link configuration. + PrivateLinkConfiguration *SubResource `json:"privateLinkConfiguration,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfigurationPropertiesFormat. +func (agficpf ApplicationGatewayFrontendIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agficpf.PrivateIPAddress != nil { + objectMap["privateIPAddress"] = agficpf.PrivateIPAddress + } + if agficpf.PrivateIPAllocationMethod != "" { + objectMap["privateIPAllocationMethod"] = agficpf.PrivateIPAllocationMethod + } + if agficpf.Subnet != nil { + objectMap["subnet"] = agficpf.Subnet + } + if agficpf.PublicIPAddress != nil { + objectMap["publicIPAddress"] = agficpf.PublicIPAddress + } + if agficpf.PrivateLinkConfiguration != nil { + objectMap["privateLinkConfiguration"] = agficpf.PrivateLinkConfiguration + } + return json.Marshal(objectMap) +} + +// ApplicationGatewayFrontendPort frontend port of an application gateway. +type ApplicationGatewayFrontendPort struct { + // ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port. + *ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the frontend port that is unique within an Application Gateway. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Type of the resource. + Type *string `json:"type,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort. +func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil { + objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat + } + if agfp.Name != nil { + objectMap["name"] = agfp.Name + } + if agfp.ID != nil { + objectMap["id"] = agfp.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct. +func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat) + if err != nil { + return err + } + agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + agfp.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + agfp.Etag = &etag + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + agfp.Type = &typeVar + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + agfp.ID = &ID + } + } + } + + return nil +} + +// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway. +type ApplicationGatewayFrontendPortPropertiesFormat struct { + // Port - Frontend port. + Port *int32 `json:"port,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the frontend port resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPortPropertiesFormat. +func (agfppf ApplicationGatewayFrontendPortPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agfppf.Port != nil { + objectMap["port"] = agfppf.Port + } + return json.Marshal(objectMap) +} + +// ApplicationGatewayGlobalConfiguration application Gateway global configuration. +type ApplicationGatewayGlobalConfiguration struct { + // EnableRequestBuffering - Enable request buffering. + EnableRequestBuffering *bool `json:"enableRequestBuffering,omitempty"` + // EnableResponseBuffering - Enable response buffering. + EnableResponseBuffering *bool `json:"enableResponseBuffering,omitempty"` +} + +// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway. +type ApplicationGatewayHeaderConfiguration struct { + // HeaderName - Header name of the header configuration. + HeaderName *string `json:"headerName,omitempty"` + // HeaderValue - Header value of the header configuration. + HeaderValue *string `json:"headerValue,omitempty"` +} + +// ApplicationGatewayHTTPListener http listener of an application gateway. +type ApplicationGatewayHTTPListener struct { + // ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener. + *ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the HTTP listener that is unique within an Application Gateway. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Type of the resource. + Type *string `json:"type,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener. +func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil { + objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat + } + if aghl.Name != nil { + objectMap["name"] = aghl.Name + } + if aghl.ID != nil { + objectMap["id"] = aghl.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct. +func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat + err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat) + if err != nil { + return err + } + aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + aghl.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + aghl.Etag = &etag + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + aghl.Type = &typeVar + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + aghl.ID = &ID + } + } + } + + return nil +} + +// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway. +type ApplicationGatewayHTTPListenerPropertiesFormat struct { + // FrontendIPConfiguration - Frontend IP configuration resource of an application gateway. + FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"` + // FrontendPort - Frontend port resource of an application gateway. + FrontendPort *SubResource `json:"frontendPort,omitempty"` + // Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' + Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` + // HostName - Host name of HTTP listener. + HostName *string `json:"hostName,omitempty"` + // SslCertificate - SSL certificate resource of an application gateway. + SslCertificate *SubResource `json:"sslCertificate,omitempty"` + // SslProfile - SSL profile resource of the application gateway. + SslProfile *SubResource `json:"sslProfile,omitempty"` + // RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting. + RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the HTTP listener resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` + // CustomErrorConfigurations - Custom error configurations of the HTTP listener. + CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"` + // FirewallPolicy - Reference to the FirewallPolicy resource. + FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"` + // HostNames - List of Host names for HTTP Listener that allows special wildcard characters as well. + HostNames *[]string `json:"hostNames,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListenerPropertiesFormat. +func (aghlpf ApplicationGatewayHTTPListenerPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if aghlpf.FrontendIPConfiguration != nil { + objectMap["frontendIPConfiguration"] = aghlpf.FrontendIPConfiguration + } + if aghlpf.FrontendPort != nil { + objectMap["frontendPort"] = aghlpf.FrontendPort + } + if aghlpf.Protocol != "" { + objectMap["protocol"] = aghlpf.Protocol + } + if aghlpf.HostName != nil { + objectMap["hostName"] = aghlpf.HostName + } + if aghlpf.SslCertificate != nil { + objectMap["sslCertificate"] = aghlpf.SslCertificate + } + if aghlpf.SslProfile != nil { + objectMap["sslProfile"] = aghlpf.SslProfile + } + if aghlpf.RequireServerNameIndication != nil { + objectMap["requireServerNameIndication"] = aghlpf.RequireServerNameIndication + } + if aghlpf.CustomErrorConfigurations != nil { + objectMap["customErrorConfigurations"] = aghlpf.CustomErrorConfigurations + } + if aghlpf.FirewallPolicy != nil { + objectMap["firewallPolicy"] = aghlpf.FirewallPolicy + } + if aghlpf.HostNames != nil { + objectMap["hostNames"] = aghlpf.HostNames + } + return json.Marshal(objectMap) +} + +// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1 +// private IP configuration is allowed. +type ApplicationGatewayIPConfiguration struct { + // ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration. + *ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"` + // Name - Name of the IP configuration that is unique within an Application Gateway. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Type of the resource. + Type *string `json:"type,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration. +func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil { + objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat + } + if agic.Name != nil { + objectMap["name"] = agic.Name } if agic.ID != nil { objectMap["id"] = agic.ID @@ -1842,7 +3232,7 @@ type ApplicationGatewayListenerPropertiesFormat struct { FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"` // FrontendPort - Frontend port resource of an application gateway. FrontendPort *SubResource `json:"frontendPort,omitempty"` - // Protocol - Protocol of the listener. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' + // Protocol - Protocol of the listener. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` // SslCertificate - SSL certificate resource of an application gateway. SslCertificate *SubResource `json:"sslCertificate,omitempty"` @@ -2126,7 +3516,7 @@ func (agldp *ApplicationGatewayLoadDistributionPolicy) UnmarshalJSON(body []byte type ApplicationGatewayLoadDistributionPolicyPropertiesFormat struct { // LoadDistributionTargets - Load Distribution Targets resource of an application gateway. LoadDistributionTargets *[]ApplicationGatewayLoadDistributionTarget `json:"loadDistributionTargets,omitempty"` - // LoadDistributionAlgorithm - Load Distribution Targets resource of an application gateway. Possible values include: 'ApplicationGatewayLoadDistributionAlgorithmRoundRobin', 'ApplicationGatewayLoadDistributionAlgorithmLeastConnections', 'ApplicationGatewayLoadDistributionAlgorithmIPHash' + // LoadDistributionAlgorithm - Load Distribution Targets resource of an application gateway. Possible values include: 'RoundRobin', 'LeastConnections', 'IPHash' LoadDistributionAlgorithm ApplicationGatewayLoadDistributionAlgorithm `json:"loadDistributionAlgorithm,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the Load Distribution Policy resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` @@ -2243,7 +3633,7 @@ type ApplicationGatewayLoadDistributionTargetPropertiesFormat struct { // ApplicationGatewayOnDemandProbe details of on demand test probe request. type ApplicationGatewayOnDemandProbe struct { - // Protocol - The protocol used for the probe. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' + // Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` // Host - Host name to send the probe to. Host *string `json:"host,omitempty"` @@ -2953,7 +4343,7 @@ func (agplic *ApplicationGatewayPrivateLinkIPConfiguration) UnmarshalJSON(body [ type ApplicationGatewayPrivateLinkIPConfigurationProperties struct { // PrivateIPAddress - The private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` // Subnet - Reference to the subnet resource. Subnet *SubResource `json:"subnet,omitempty"` @@ -3350,7 +4740,7 @@ type ApplicationGatewayProbeHealthResponseMatch struct { // ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway. type ApplicationGatewayProbePropertiesFormat struct { - // Protocol - The protocol used for the probe. Possible values include: 'ApplicationGatewayProtocolHTTP', 'ApplicationGatewayProtocolHTTPS', 'ApplicationGatewayProtocolTCP', 'ApplicationGatewayProtocolTLS' + // Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS', 'TCP', 'TLS' Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"` // Host - Host name to send the probe to. Host *string `json:"host,omitempty"` @@ -3421,7 +4811,7 @@ type ApplicationGatewayPropertiesFormat struct { Sku *ApplicationGatewaySku `json:"sku,omitempty"` // SslPolicy - SSL policy of the application gateway resource. SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"` - // OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'ApplicationGatewayOperationalStateStopped', 'ApplicationGatewayOperationalStateStarting', 'ApplicationGatewayOperationalStateRunning', 'ApplicationGatewayOperationalStateStopping' + // OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping' OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"` // GatewayIPConfigurations - Subnets of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits). GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"` @@ -3680,7 +5070,7 @@ func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) // ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the // application gateway. type ApplicationGatewayRedirectConfigurationPropertiesFormat struct { - // RedirectType - HTTP redirection type. Possible values include: 'ApplicationGatewayRedirectTypePermanent', 'ApplicationGatewayRedirectTypeFound', 'ApplicationGatewayRedirectTypeSeeOther', 'ApplicationGatewayRedirectTypeTemporary' + // RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary' RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"` // TargetListener - Reference to a listener to redirect the request to. TargetListener *SubResource `json:"targetListener,omitempty"` @@ -3790,7 +5180,7 @@ func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) er // ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the // application gateway. type ApplicationGatewayRequestRoutingRulePropertiesFormat struct { - // RuleType - Rule type. Possible values include: 'ApplicationGatewayRequestRoutingRuleTypeBasic', 'ApplicationGatewayRequestRoutingRuleTypePathBasedRouting' + // RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting' RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"` // Priority - Priority of the request routing rule. Priority *int32 `json:"priority,omitempty"` @@ -4066,7 +5456,7 @@ func (agrr *ApplicationGatewayRoutingRule) UnmarshalJSON(body []byte) error { // ApplicationGatewayRoutingRulePropertiesFormat properties of routing rule of the application gateway. type ApplicationGatewayRoutingRulePropertiesFormat struct { - // RuleType - Rule type. Possible values include: 'ApplicationGatewayRequestRoutingRuleTypeBasic', 'ApplicationGatewayRequestRoutingRuleTypePathBasedRouting' + // RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting' RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"` // Priority - Priority of the routing rule. Priority *int32 `json:"priority,omitempty"` @@ -4269,9 +5659,9 @@ func (future *ApplicationGatewaysDeleteFuture) result(client ApplicationGateways // ApplicationGatewaySku SKU of an application gateway. type ApplicationGatewaySku struct { - // Name - Name of an application gateway SKU. Possible values include: 'ApplicationGatewaySkuNameStandardSmall', 'ApplicationGatewaySkuNameStandardMedium', 'ApplicationGatewaySkuNameStandardLarge', 'ApplicationGatewaySkuNameWAFMedium', 'ApplicationGatewaySkuNameWAFLarge', 'ApplicationGatewaySkuNameStandardV2', 'ApplicationGatewaySkuNameWAFV2' + // Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'StandardBasic', 'WAFV2' Name ApplicationGatewaySkuName `json:"name,omitempty"` - // Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2' + // Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2', 'ApplicationGatewayTierStandardBasic' Tier ApplicationGatewayTier `json:"tier,omitempty"` // Capacity - Capacity (instance count) of an application gateway. Capacity *int32 `json:"capacity,omitempty"` @@ -4400,13 +5790,13 @@ func (agscpf ApplicationGatewaySslCertificatePropertiesFormat) MarshalJSON() ([] type ApplicationGatewaySslPolicy struct { // DisabledSslProtocols - Ssl protocols to be disabled on application gateway. DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"` - // PolicyType - Type of Ssl Policy. Possible values include: 'ApplicationGatewaySslPolicyTypePredefined', 'ApplicationGatewaySslPolicyTypeCustom' + // PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom', 'CustomV2' PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"` - // PolicyName - Name of Ssl predefined policy. Possible values include: 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20150501', 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401', 'ApplicationGatewaySslPolicyNameAppGwSslPolicy20170401S' + // PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S', 'AppGwSslPolicy20220101', 'AppGwSslPolicy20220101S' PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"` // CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway. CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"` - // MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'ApplicationGatewaySslProtocolTLSv10', 'ApplicationGatewaySslProtocolTLSv11', 'ApplicationGatewaySslProtocolTLSv12' + // MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12', 'TLSv13' MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"` } @@ -4483,7 +5873,7 @@ func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) e type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct { // CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway. CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"` - // MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'ApplicationGatewaySslProtocolTLSv10', 'ApplicationGatewaySslProtocolTLSv11', 'ApplicationGatewaySslProtocolTLSv12' + // MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12', 'TLSv13' MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"` } @@ -5042,12 +6432,304 @@ func (agupmpf ApplicationGatewayURLPathMapPropertiesFormat) MarshalJSON() ([]byt return json.Marshal(objectMap) } +// ApplicationGatewayWafDynamicManifestPropertiesResult properties of ApplicationGatewayWafDynamicManifest. +type ApplicationGatewayWafDynamicManifestPropertiesResult struct { + // DefaultRuleSetPropertyFormat - The default ruleset. + *DefaultRuleSetPropertyFormat `json:"defaultRuleSet,omitempty"` + // AvailableRuleSets - The available rulesets. + AvailableRuleSets *[]ApplicationGatewayFirewallManifestRuleSet `json:"availableRuleSets,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayWafDynamicManifestPropertiesResult. +func (agwdmpr ApplicationGatewayWafDynamicManifestPropertiesResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agwdmpr.DefaultRuleSetPropertyFormat != nil { + objectMap["defaultRuleSet"] = agwdmpr.DefaultRuleSetPropertyFormat + } + if agwdmpr.AvailableRuleSets != nil { + objectMap["availableRuleSets"] = agwdmpr.AvailableRuleSets + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayWafDynamicManifestPropertiesResult struct. +func (agwdmpr *ApplicationGatewayWafDynamicManifestPropertiesResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "defaultRuleSet": + if v != nil { + var defaultRuleSetPropertyFormat DefaultRuleSetPropertyFormat + err = json.Unmarshal(*v, &defaultRuleSetPropertyFormat) + if err != nil { + return err + } + agwdmpr.DefaultRuleSetPropertyFormat = &defaultRuleSetPropertyFormat + } + case "availableRuleSets": + if v != nil { + var availableRuleSets []ApplicationGatewayFirewallManifestRuleSet + err = json.Unmarshal(*v, &availableRuleSets) + if err != nil { + return err + } + agwdmpr.AvailableRuleSets = &availableRuleSets + } + } + } + + return nil +} + +// ApplicationGatewayWafDynamicManifestResult response for ApplicationGatewayWafDynamicManifest API service +// call. +type ApplicationGatewayWafDynamicManifestResult struct { + autorest.Response `json:"-"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // ApplicationGatewayWafDynamicManifestPropertiesResult - Properties of the ApplicationGatewayWafDynamicManifest . + *ApplicationGatewayWafDynamicManifestPropertiesResult `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for ApplicationGatewayWafDynamicManifestResult. +func (agwdmr ApplicationGatewayWafDynamicManifestResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if agwdmr.ID != nil { + objectMap["id"] = agwdmr.ID + } + if agwdmr.ApplicationGatewayWafDynamicManifestPropertiesResult != nil { + objectMap["properties"] = agwdmr.ApplicationGatewayWafDynamicManifestPropertiesResult + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayWafDynamicManifestResult struct. +func (agwdmr *ApplicationGatewayWafDynamicManifestResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + agwdmr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + agwdmr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + agwdmr.Type = &typeVar + } + case "properties": + if v != nil { + var applicationGatewayWafDynamicManifestPropertiesResult ApplicationGatewayWafDynamicManifestPropertiesResult + err = json.Unmarshal(*v, &applicationGatewayWafDynamicManifestPropertiesResult) + if err != nil { + return err + } + agwdmr.ApplicationGatewayWafDynamicManifestPropertiesResult = &applicationGatewayWafDynamicManifestPropertiesResult + } + } + } + + return nil +} + +// ApplicationGatewayWafDynamicManifestResultList response for ApplicationGatewayWafDynamicManifests API +// service call. +type ApplicationGatewayWafDynamicManifestResultList struct { + autorest.Response `json:"-"` + // Value - The list of application gateway waf manifest. + Value *[]ApplicationGatewayWafDynamicManifestResult `json:"value,omitempty"` + // NextLink - URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ApplicationGatewayWafDynamicManifestResultListIterator provides access to a complete listing of +// ApplicationGatewayWafDynamicManifestResult values. +type ApplicationGatewayWafDynamicManifestResultListIterator struct { + i int + page ApplicationGatewayWafDynamicManifestResultListPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ApplicationGatewayWafDynamicManifestResultListIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayWafDynamicManifestResultListIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ApplicationGatewayWafDynamicManifestResultListIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ApplicationGatewayWafDynamicManifestResultListIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ApplicationGatewayWafDynamicManifestResultListIterator) Response() ApplicationGatewayWafDynamicManifestResultList { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ApplicationGatewayWafDynamicManifestResultListIterator) Value() ApplicationGatewayWafDynamicManifestResult { + if !iter.page.NotDone() { + return ApplicationGatewayWafDynamicManifestResult{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ApplicationGatewayWafDynamicManifestResultListIterator type. +func NewApplicationGatewayWafDynamicManifestResultListIterator(page ApplicationGatewayWafDynamicManifestResultListPage) ApplicationGatewayWafDynamicManifestResultListIterator { + return ApplicationGatewayWafDynamicManifestResultListIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (agwdmrl ApplicationGatewayWafDynamicManifestResultList) IsEmpty() bool { + return agwdmrl.Value == nil || len(*agwdmrl.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (agwdmrl ApplicationGatewayWafDynamicManifestResultList) hasNextLink() bool { + return agwdmrl.NextLink != nil && len(*agwdmrl.NextLink) != 0 +} + +// applicationGatewayWafDynamicManifestResultListPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (agwdmrl ApplicationGatewayWafDynamicManifestResultList) applicationGatewayWafDynamicManifestResultListPreparer(ctx context.Context) (*http.Request, error) { + if !agwdmrl.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(agwdmrl.NextLink))) +} + +// ApplicationGatewayWafDynamicManifestResultListPage contains a page of +// ApplicationGatewayWafDynamicManifestResult values. +type ApplicationGatewayWafDynamicManifestResultListPage struct { + fn func(context.Context, ApplicationGatewayWafDynamicManifestResultList) (ApplicationGatewayWafDynamicManifestResultList, error) + agwdmrl ApplicationGatewayWafDynamicManifestResultList +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ApplicationGatewayWafDynamicManifestResultListPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayWafDynamicManifestResultListPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.agwdmrl) + if err != nil { + return err + } + page.agwdmrl = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ApplicationGatewayWafDynamicManifestResultListPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ApplicationGatewayWafDynamicManifestResultListPage) NotDone() bool { + return !page.agwdmrl.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ApplicationGatewayWafDynamicManifestResultListPage) Response() ApplicationGatewayWafDynamicManifestResultList { + return page.agwdmrl +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ApplicationGatewayWafDynamicManifestResultListPage) Values() []ApplicationGatewayWafDynamicManifestResult { + if page.agwdmrl.IsEmpty() { + return nil + } + return *page.agwdmrl.Value +} + +// Creates a new instance of the ApplicationGatewayWafDynamicManifestResultListPage type. +func NewApplicationGatewayWafDynamicManifestResultListPage(cur ApplicationGatewayWafDynamicManifestResultList, getNextPage func(context.Context, ApplicationGatewayWafDynamicManifestResultList) (ApplicationGatewayWafDynamicManifestResultList, error)) ApplicationGatewayWafDynamicManifestResultListPage { + return ApplicationGatewayWafDynamicManifestResultListPage{ + fn: getNextPage, + agwdmrl: cur, + } +} + // ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall // configuration. type ApplicationGatewayWebApplicationFirewallConfiguration struct { // Enabled - Whether the web application firewall is enabled or not. Enabled *bool `json:"enabled,omitempty"` - // FirewallMode - Web application firewall mode. Possible values include: 'ApplicationGatewayFirewallModeDetection', 'ApplicationGatewayFirewallModePrevention' + // FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention' FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"` // RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'. RuleSetType *string `json:"ruleSetType,omitempty"` @@ -5706,7 +7388,7 @@ func NewAuthorizationListResultPage(cur AuthorizationListResult, getNextPage fun type AuthorizationPropertiesFormat struct { // AuthorizationKey - The authorization key. AuthorizationKey *string `json:"authorizationKey,omitempty"` - // AuthorizationUseStatus - The authorization use status. Possible values include: 'AuthorizationUseStatusAvailable', 'AuthorizationUseStatusInUse' + // AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse' AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the authorization resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` @@ -7354,7 +9036,7 @@ func NewAzureFirewallListResultPage(cur AzureFirewallListResult, getNextPage fun // AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action. type AzureFirewallNatRCAction struct { - // Type - The type of action. Possible values include: 'AzureFirewallNatRCActionTypeSnat', 'AzureFirewallNatRCActionTypeDnat' + // Type - The type of action. Possible values include: 'Snat', 'Dnat' Type AzureFirewallNatRCActionType `json:"type,omitempty"` } @@ -7777,12 +9459,55 @@ func (future *AzureFirewallsDeleteFuture) result(client AzureFirewallsClient) (a // AzureFirewallSku SKU of an Azure Firewall. type AzureFirewallSku struct { - // Name - Name of an Azure Firewall SKU. Possible values include: 'AzureFirewallSkuNameAZFWVNet', 'AzureFirewallSkuNameAZFWHub' + // Name - Name of an Azure Firewall SKU. Possible values include: 'AZFWVNet', 'AZFWHub' Name AzureFirewallSkuName `json:"name,omitempty"` // Tier - Tier of an Azure Firewall. Possible values include: 'AzureFirewallSkuTierStandard', 'AzureFirewallSkuTierPremium', 'AzureFirewallSkuTierBasic' Tier AzureFirewallSkuTier `json:"tier,omitempty"` } +// AzureFirewallsListLearnedPrefixesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type AzureFirewallsListLearnedPrefixesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(AzureFirewallsClient) (IPPrefixesList, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *AzureFirewallsListLearnedPrefixesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for AzureFirewallsListLearnedPrefixesFuture.Result. +func (future *AzureFirewallsListLearnedPrefixesFuture) result(client AzureFirewallsClient) (ipl IPPrefixesList, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AzureFirewallsListLearnedPrefixesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ipl.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsListLearnedPrefixesFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if ipl.Response.Response, err = future.GetResult(sender); err == nil && ipl.Response.Response.StatusCode != http.StatusNoContent { + ipl, err = client.ListLearnedPrefixesResponder(ipl.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.AzureFirewallsListLearnedPrefixesFuture", "Result", ipl.Response.Response, "Failure responding to request") + } + } + return +} + // AzureFirewallsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a // long-running operation. type AzureFirewallsUpdateTagsFuture struct { @@ -8256,6 +9981,8 @@ type BackendAddressPoolPropertiesFormat struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // DrainPeriodInSeconds - Amount of seconds Load Balancer waits for before sending RESET to client and backend address. DrainPeriodInSeconds *int32 `json:"drainPeriodInSeconds,omitempty"` + // VirtualNetwork - A reference to a virtual network. + VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"` } // MarshalJSON is the custom marshaler for BackendAddressPoolPropertiesFormat. @@ -8273,9 +10000,124 @@ func (bappf BackendAddressPoolPropertiesFormat) MarshalJSON() ([]byte, error) { if bappf.DrainPeriodInSeconds != nil { objectMap["drainPeriodInSeconds"] = bappf.DrainPeriodInSeconds } + if bappf.VirtualNetwork != nil { + objectMap["virtualNetwork"] = bappf.VirtualNetwork + } return json.Marshal(objectMap) } +// BasicBaseAdminRule network base admin rule. +type BasicBaseAdminRule interface { + AsAdminRule() (*AdminRule, bool) + AsDefaultAdminRule() (*DefaultAdminRule, bool) + AsBaseAdminRule() (*BaseAdminRule, bool) +} + +// BaseAdminRule network base admin rule. +type BaseAdminRule struct { + autorest.Response `json:"-"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // Kind - Possible values include: 'KindBasicBaseAdminRuleKindBaseAdminRule', 'KindBasicBaseAdminRuleKindCustom', 'KindBasicBaseAdminRuleKindDefault' + Kind KindBasicBaseAdminRule `json:"kind,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +func unmarshalBasicBaseAdminRule(body []byte) (BasicBaseAdminRule, error) { + var m map[string]interface{} + err := json.Unmarshal(body, &m) + if err != nil { + return nil, err + } + + switch m["kind"] { + case string(KindBasicBaseAdminRuleKindCustom): + var ar AdminRule + err := json.Unmarshal(body, &ar) + return ar, err + case string(KindBasicBaseAdminRuleKindDefault): + var dar DefaultAdminRule + err := json.Unmarshal(body, &dar) + return dar, err + default: + var bar BaseAdminRule + err := json.Unmarshal(body, &bar) + return bar, err + } +} +func unmarshalBasicBaseAdminRuleArray(body []byte) ([]BasicBaseAdminRule, error) { + var rawMessages []*json.RawMessage + err := json.Unmarshal(body, &rawMessages) + if err != nil { + return nil, err + } + + barArray := make([]BasicBaseAdminRule, len(rawMessages)) + + for index, rawMessage := range rawMessages { + bar, err := unmarshalBasicBaseAdminRule(*rawMessage) + if err != nil { + return nil, err + } + barArray[index] = bar + } + return barArray, nil +} + +// MarshalJSON is the custom marshaler for BaseAdminRule. +func (bar BaseAdminRule) MarshalJSON() ([]byte, error) { + bar.Kind = KindBasicBaseAdminRuleKindBaseAdminRule + objectMap := make(map[string]interface{}) + if bar.Kind != "" { + objectMap["kind"] = bar.Kind + } + return json.Marshal(objectMap) +} + +// AsAdminRule is the BasicBaseAdminRule implementation for BaseAdminRule. +func (bar BaseAdminRule) AsAdminRule() (*AdminRule, bool) { + return nil, false +} + +// AsDefaultAdminRule is the BasicBaseAdminRule implementation for BaseAdminRule. +func (bar BaseAdminRule) AsDefaultAdminRule() (*DefaultAdminRule, bool) { + return nil, false +} + +// AsBaseAdminRule is the BasicBaseAdminRule implementation for BaseAdminRule. +func (bar BaseAdminRule) AsBaseAdminRule() (*BaseAdminRule, bool) { + return &bar, true +} + +// AsBasicBaseAdminRule is the BasicBaseAdminRule implementation for BaseAdminRule. +func (bar BaseAdminRule) AsBasicBaseAdminRule() (BasicBaseAdminRule, bool) { + return &bar, true +} + +// BaseAdminRuleModel ... +type BaseAdminRuleModel struct { + autorest.Response `json:"-"` + Value BasicBaseAdminRule `json:"value,omitempty"` +} + +// UnmarshalJSON is the custom unmarshaler for BaseAdminRuleModel struct. +func (barm *BaseAdminRuleModel) UnmarshalJSON(body []byte) error { + bar, err := unmarshalBasicBaseAdminRule(body) + if err != nil { + return err + } + barm.Value = bar + + return nil +} + // BastionActiveSession the session detail for a target. type BastionActiveSession struct { // SessionID - READ-ONLY; A unique id for the session. @@ -8294,7 +10136,7 @@ type BastionActiveSession struct { UserName *string `json:"userName,omitempty"` // TargetIPAddress - READ-ONLY; The IP Address of the target. TargetIPAddress *string `json:"targetIpAddress,omitempty"` - // Protocol - READ-ONLY; The protocol used to connect to the target. Possible values include: 'BastionConnectProtocolSSH', 'BastionConnectProtocolRDP' + // Protocol - READ-ONLY; The protocol used to connect to the target. Possible values include: 'SSH', 'RDP' Protocol BastionConnectProtocol `json:"protocol,omitempty"` // TargetResourceID - READ-ONLY; The resource id of the target. TargetResourceID *string `json:"targetResourceId,omitempty"` @@ -8694,7 +10536,7 @@ type BastionHostIPConfigurationPropertiesFormat struct { PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the bastion host IP configuration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` } @@ -9877,6 +11719,24 @@ type CheckPrivateLinkServiceVisibilityRequest struct { PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"` } +// ChildResource proxy resource representation. +type ChildResource struct { + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for ChildResource. +func (cr ChildResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + // CloudError an error response from the service. type CloudError struct { // Error - Cloud error body. @@ -9907,7 +11767,7 @@ type ConfigurationDiagnosticParameters struct { // ConfigurationDiagnosticProfile parameters to compare with network configuration. type ConfigurationDiagnosticProfile struct { - // Direction - The direction of the traffic. Possible values include: 'DirectionInbound', 'DirectionOutbound' + // Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound' Direction Direction `json:"direction,omitempty"` // Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP. Protocol *string `json:"protocol,omitempty"` @@ -9941,6 +11801,59 @@ type ConfigurationDiagnosticResult struct { NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"` } +// ConfigurationGroup the network configuration group resource +type ConfigurationGroup struct { + // ID - Network group ID. + ID *string `json:"id,omitempty"` + // GroupProperties - The network configuration group properties + *GroupProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for ConfigurationGroup. +func (cg ConfigurationGroup) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cg.ID != nil { + objectMap["id"] = cg.ID + } + if cg.GroupProperties != nil { + objectMap["properties"] = cg.GroupProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ConfigurationGroup struct. +func (cg *ConfigurationGroup) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + cg.ID = &ID + } + case "properties": + if v != nil { + var groupProperties GroupProperties + err = json.Unmarshal(*v, &groupProperties) + if err != nil { + return err + } + cg.GroupProperties = &groupProperties + } + } + } + + return nil +} + // ConfigurationPolicyGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results // of a long-running operation. type ConfigurationPolicyGroupsCreateOrUpdateFuture struct { @@ -10102,7 +12015,7 @@ type ConnectionMonitorDestination struct { type ConnectionMonitorEndpoint struct { // Name - The name of the connection monitor endpoint. Name *string `json:"name,omitempty"` - // Type - The endpoint type. Possible values include: 'EndpointTypeAzureVM', 'EndpointTypeAzureVNet', 'EndpointTypeAzureSubnet', 'EndpointTypeExternalAddress', 'EndpointTypeMMAWorkspaceMachine', 'EndpointTypeMMAWorkspaceNetwork' + // Type - The endpoint type. Possible values include: 'AzureVM', 'AzureVNet', 'AzureSubnet', 'ExternalAddress', 'MMAWorkspaceMachine', 'MMAWorkspaceNetwork', 'AzureArcVM', 'AzureVMSS' Type EndpointType `json:"type,omitempty"` // ResourceID - Resource ID of the connection monitor endpoint. ResourceID *string `json:"resourceId,omitempty"` @@ -10112,13 +12025,13 @@ type ConnectionMonitorEndpoint struct { Filter *ConnectionMonitorEndpointFilter `json:"filter,omitempty"` // Scope - Endpoint scope. Scope *ConnectionMonitorEndpointScope `json:"scope,omitempty"` - // CoverageLevel - Test coverage for the endpoint. Possible values include: 'CoverageLevelDefault', 'CoverageLevelLow', 'CoverageLevelBelowAverage', 'CoverageLevelAverage', 'CoverageLevelAboveAverage', 'CoverageLevelFull' + // CoverageLevel - Test coverage for the endpoint. Possible values include: 'Default', 'Low', 'BelowAverage', 'Average', 'AboveAverage', 'Full' CoverageLevel CoverageLevel `json:"coverageLevel,omitempty"` } // ConnectionMonitorEndpointFilter describes the connection monitor endpoint filter. type ConnectionMonitorEndpointFilter struct { - // Type - The behavior of the endpoint filter. Currently only 'Include' is supported. Possible values include: 'ConnectionMonitorEndpointFilterTypeInclude' + // Type - The behavior of the endpoint filter. Currently only 'Include' is supported. Possible values include: 'Include' Type ConnectionMonitorEndpointFilterType `json:"type,omitempty"` // Items - List of items in the filter. Items *[]ConnectionMonitorEndpointFilterItem `json:"items,omitempty"` @@ -10126,7 +12039,7 @@ type ConnectionMonitorEndpointFilter struct { // ConnectionMonitorEndpointFilterItem describes the connection monitor endpoint filter item. type ConnectionMonitorEndpointFilterItem struct { - // Type - The type of item included in the filter. Currently only 'AgentAddress' is supported. Possible values include: 'ConnectionMonitorEndpointFilterItemTypeAgentAddress' + // Type - The type of item included in the filter. Currently only 'AgentAddress' is supported. Possible values include: 'AgentAddress' Type ConnectionMonitorEndpointFilterItemType `json:"type,omitempty"` // Address - The address of the filter item. Address *string `json:"address,omitempty"` @@ -10150,7 +12063,7 @@ type ConnectionMonitorEndpointScopeItem struct { type ConnectionMonitorHTTPConfiguration struct { // Port - The port to connect to. Port *int32 `json:"port,omitempty"` - // Method - The HTTP method to use. Possible values include: 'HTTPConfigurationMethodGet', 'HTTPConfigurationMethodPost' + // Method - The HTTP method to use. Possible values include: 'Get', 'Post' Method HTTPConfigurationMethod `json:"method,omitempty"` // Path - The path component of the URI. For instance, "/dir1/dir2". Path *string `json:"path,omitempty"` @@ -10177,7 +12090,7 @@ type ConnectionMonitorListResult struct { // ConnectionMonitorOutput describes a connection monitor output destination. type ConnectionMonitorOutput struct { - // Type - Connection monitor output destination type. Currently, only "Workspace" is supported. Possible values include: 'OutputTypeWorkspace' + // Type - Connection monitor output destination type. Currently, only "Workspace" is supported. Possible values include: 'Workspace' Type OutputType `json:"type,omitempty"` // WorkspaceSettings - Describes the settings for producing output into a log analytics workspace. WorkspaceSettings *ConnectionMonitorWorkspaceSettings `json:"workspaceSettings,omitempty"` @@ -10334,7 +12247,7 @@ type ConnectionMonitorResultProperties struct { StartTime *date.Time `json:"startTime,omitempty"` // MonitoringStatus - READ-ONLY; The monitoring status of the connection monitor. MonitoringStatus *string `json:"monitoringStatus,omitempty"` - // ConnectionMonitorType - READ-ONLY; Type of connection monitor. Possible values include: 'ConnectionMonitorTypeMultiEndpoint', 'ConnectionMonitorTypeSingleSourceDestination' + // ConnectionMonitorType - READ-ONLY; Type of connection monitor. Possible values include: 'MultiEndpoint', 'SingleSourceDestination' ConnectionMonitorType ConnectionMonitorType `json:"connectionMonitorType,omitempty"` // Source - Describes the source of connection monitor. Source *ConnectionMonitorSource `json:"source,omitempty"` @@ -10726,6 +12639,341 @@ func (CSS ConnectionStateSnapshot) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } +// ConnectivityConfiguration the network manager connectivity configuration resource +type ConnectivityConfiguration struct { + autorest.Response `json:"-"` + // ConnectivityConfigurationProperties - Properties of a network manager connectivity configuration + *ConnectivityConfigurationProperties `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for ConnectivityConfiguration. +func (cc ConnectivityConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cc.ConnectivityConfigurationProperties != nil { + objectMap["properties"] = cc.ConnectivityConfigurationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ConnectivityConfiguration struct. +func (cc *ConnectivityConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var connectivityConfigurationProperties ConnectivityConfigurationProperties + err = json.Unmarshal(*v, &connectivityConfigurationProperties) + if err != nil { + return err + } + cc.ConnectivityConfigurationProperties = &connectivityConfigurationProperties + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + cc.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + cc.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cc.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cc.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + cc.Etag = &etag + } + } + } + + return nil +} + +// ConnectivityConfigurationListResult result of the request to list network manager connectivity +// configurations. It contains a list of configurations and a link to get the next set of results. +type ConnectivityConfigurationListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of Connectivity Configurations + Value *[]ConnectivityConfiguration `json:"value,omitempty"` + // NextLink - Gets the URL to get the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ConnectivityConfigurationListResultIterator provides access to a complete listing of +// ConnectivityConfiguration values. +type ConnectivityConfigurationListResultIterator struct { + i int + page ConnectivityConfigurationListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ConnectivityConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ConnectivityConfigurationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ConnectivityConfigurationListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ConnectivityConfigurationListResultIterator) Response() ConnectivityConfigurationListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ConnectivityConfigurationListResultIterator) Value() ConnectivityConfiguration { + if !iter.page.NotDone() { + return ConnectivityConfiguration{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ConnectivityConfigurationListResultIterator type. +func NewConnectivityConfigurationListResultIterator(page ConnectivityConfigurationListResultPage) ConnectivityConfigurationListResultIterator { + return ConnectivityConfigurationListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (cclr ConnectivityConfigurationListResult) IsEmpty() bool { + return cclr.Value == nil || len(*cclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (cclr ConnectivityConfigurationListResult) hasNextLink() bool { + return cclr.NextLink != nil && len(*cclr.NextLink) != 0 +} + +// connectivityConfigurationListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (cclr ConnectivityConfigurationListResult) connectivityConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) { + if !cclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(cclr.NextLink))) +} + +// ConnectivityConfigurationListResultPage contains a page of ConnectivityConfiguration values. +type ConnectivityConfigurationListResultPage struct { + fn func(context.Context, ConnectivityConfigurationListResult) (ConnectivityConfigurationListResult, error) + cclr ConnectivityConfigurationListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ConnectivityConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ConnectivityConfigurationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.cclr) + if err != nil { + return err + } + page.cclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ConnectivityConfigurationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ConnectivityConfigurationListResultPage) NotDone() bool { + return !page.cclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ConnectivityConfigurationListResultPage) Response() ConnectivityConfigurationListResult { + return page.cclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ConnectivityConfigurationListResultPage) Values() []ConnectivityConfiguration { + if page.cclr.IsEmpty() { + return nil + } + return *page.cclr.Value +} + +// Creates a new instance of the ConnectivityConfigurationListResultPage type. +func NewConnectivityConfigurationListResultPage(cur ConnectivityConfigurationListResult, getNextPage func(context.Context, ConnectivityConfigurationListResult) (ConnectivityConfigurationListResult, error)) ConnectivityConfigurationListResultPage { + return ConnectivityConfigurationListResultPage{ + fn: getNextPage, + cclr: cur, + } +} + +// ConnectivityConfigurationProperties properties of network manager connectivity configuration +type ConnectivityConfigurationProperties struct { + // Description - A description of the connectivity configuration. + Description *string `json:"description,omitempty"` + // ConnectivityTopology - Connectivity topology type. Possible values include: 'HubAndSpoke', 'Mesh' + ConnectivityTopology ConnectivityTopology `json:"connectivityTopology,omitempty"` + // Hubs - List of hubItems + Hubs *[]Hub `json:"hubs,omitempty"` + // IsGlobal - Flag if global mesh is supported. Possible values include: 'IsGlobalFalse', 'IsGlobalTrue' + IsGlobal IsGlobal `json:"isGlobal,omitempty"` + // AppliesToGroups - Groups for configuration + AppliesToGroups *[]ConnectivityGroupItem `json:"appliesToGroups,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the connectivity configuration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` + // DeleteExistingPeering - Flag if need to remove current existing peerings. Possible values include: 'False', 'True' + DeleteExistingPeering DeleteExistingPeering `json:"deleteExistingPeering,omitempty"` +} + +// MarshalJSON is the custom marshaler for ConnectivityConfigurationProperties. +func (ccp ConnectivityConfigurationProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ccp.Description != nil { + objectMap["description"] = ccp.Description + } + if ccp.ConnectivityTopology != "" { + objectMap["connectivityTopology"] = ccp.ConnectivityTopology + } + if ccp.Hubs != nil { + objectMap["hubs"] = ccp.Hubs + } + if ccp.IsGlobal != "" { + objectMap["isGlobal"] = ccp.IsGlobal + } + if ccp.AppliesToGroups != nil { + objectMap["appliesToGroups"] = ccp.AppliesToGroups + } + if ccp.DeleteExistingPeering != "" { + objectMap["deleteExistingPeering"] = ccp.DeleteExistingPeering + } + return json.Marshal(objectMap) +} + +// ConnectivityConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type ConnectivityConfigurationsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(ConnectivityConfigurationsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *ConnectivityConfigurationsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for ConnectivityConfigurationsDeleteFuture.Result. +func (future *ConnectivityConfigurationsDeleteFuture) result(client ConnectivityConfigurationsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ConnectivityConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.ConnectivityConfigurationsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + // ConnectivityDestination parameters that define destination of connection. type ConnectivityDestination struct { // ResourceID - The ID of the resource to which a connection attempt will be made. @@ -10736,6 +12984,18 @@ type ConnectivityDestination struct { Port *int32 `json:"port,omitempty"` } +// ConnectivityGroupItem connectivity group item. +type ConnectivityGroupItem struct { + // NetworkGroupID - Network group Id. + NetworkGroupID *string `json:"networkGroupId,omitempty"` + // UseHubGateway - Flag if need to use hub gateway. Possible values include: 'UseHubGatewayFalse', 'UseHubGatewayTrue' + UseHubGateway UseHubGateway `json:"useHubGateway,omitempty"` + // IsGlobal - Flag if global is supported. Possible values include: 'IsGlobalFalse', 'IsGlobalTrue' + IsGlobal IsGlobal `json:"isGlobal,omitempty"` + // GroupConnectivity - Group connectivity type. Possible values include: 'GroupConnectivityNone', 'GroupConnectivityDirectlyConnected' + GroupConnectivity GroupConnectivity `json:"groupConnectivity,omitempty"` +} + // ConnectivityHop information about a hop between the source and the destination. type ConnectivityHop struct { // Type - READ-ONLY; The type of the hop. @@ -10817,7 +13077,7 @@ type ConnectivityParameters struct { Protocol Protocol `json:"protocol,omitempty"` // ProtocolConfiguration - Configuration of the protocol. ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"` - // PreferredIPVersion - Preferred IP version of the connection. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PreferredIPVersion - Preferred IP version of the connection. Possible values include: 'IPv4', 'IPv6' PreferredIPVersion IPVersion `json:"preferredIPVersion,omitempty"` } @@ -11145,6 +13405,34 @@ func (cnipf ContainerNetworkInterfacePropertiesFormat) MarshalJSON() ([]byte, er return json.Marshal(objectMap) } +// Criterion a matching criteria which matches routes based on route prefix, community, and AS path. +type Criterion struct { + // RoutePrefix - List of route prefixes which this criteria matches. + RoutePrefix *[]string `json:"routePrefix,omitempty"` + // Community - List of BGP communities which this criteria matches. + Community *[]string `json:"community,omitempty"` + // AsPath - List of AS paths which this criteria matches. + AsPath *[]string `json:"asPath,omitempty"` + // MatchCondition - Match condition to apply RouteMap rules. Possible values include: 'RouteMapMatchConditionUnknown', 'RouteMapMatchConditionContains', 'RouteMapMatchConditionEquals', 'RouteMapMatchConditionNotContains', 'RouteMapMatchConditionNotEquals' + MatchCondition RouteMapMatchCondition `json:"matchCondition,omitempty"` +} + +// CrossTenantScopes cross tenant scopes. +type CrossTenantScopes struct { + // TenantID - READ-ONLY; Tenant ID. + TenantID *string `json:"tenantId,omitempty"` + // ManagementGroups - READ-ONLY; List of management groups. + ManagementGroups *[]string `json:"managementGroups,omitempty"` + // Subscriptions - READ-ONLY; List of subscriptions. + Subscriptions *[]string `json:"subscriptions,omitempty"` +} + +// MarshalJSON is the custom marshaler for CrossTenantScopes. +func (cts CrossTenantScopes) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + // CustomDNSConfigPropertiesFormat contains custom Dns resolution configuration from customer. type CustomDNSConfigPropertiesFormat struct { // Fqdn - Fqdn that resolves to private endpoint ip address. @@ -11537,6 +13825,8 @@ func NewCustomIPPrefixListResultPage(cur CustomIPPrefixListResult, getNextPage f // CustomIPPrefixPropertiesFormat custom IP prefix properties. type CustomIPPrefixPropertiesFormat struct { + // Asn - The ASN for CIDR advertising. Should be an integer as string. + Asn *string `json:"asn,omitempty"` // Cidr - The prefix range in CIDR notation. Should include the start address and the prefix length. Cidr *string `json:"cidr,omitempty"` // SignedMessage - Signed message for WAN validation. @@ -11547,8 +13837,16 @@ type CustomIPPrefixPropertiesFormat struct { CustomIPPrefixParent *SubResource `json:"customIpPrefixParent,omitempty"` // ChildCustomIPPrefixes - READ-ONLY; The list of all Children for IPv6 /48 CustomIpPrefix. ChildCustomIPPrefixes *[]SubResource `json:"childCustomIpPrefixes,omitempty"` - // CommissionedState - The commissioned state of the Custom IP Prefix. Possible values include: 'CommissionedStateProvisioning', 'CommissionedStateProvisioned', 'CommissionedStateCommissioning', 'CommissionedStateCommissioned', 'CommissionedStateDecommissioning', 'CommissionedStateDeprovisioning' + // CommissionedState - The commissioned state of the Custom IP Prefix. Possible values include: 'Provisioning', 'Provisioned', 'Commissioning', 'CommissionedNoInternetAdvertise', 'Commissioned', 'Decommissioning', 'Deprovisioning', 'Deprovisioned' CommissionedState CommissionedState `json:"commissionedState,omitempty"` + // ExpressRouteAdvertise - Whether to do express route advertise. + ExpressRouteAdvertise *bool `json:"expressRouteAdvertise,omitempty"` + // Geo - The Geo for CIDR advertising. Should be an Geo code. Possible values include: 'GLOBAL', 'AFRI', 'APAC', 'EURO', 'LATAM', 'NAM', 'ME', 'OCEANIA', 'AQ' + Geo Geo `json:"geo,omitempty"` + // NoInternetAdvertise - Whether to Advertise the range to Internet. + NoInternetAdvertise *bool `json:"noInternetAdvertise,omitempty"` + // PrefixType - Type of custom IP prefix. Should be Singular, Parent, or Child. Possible values include: 'Singular', 'Parent', 'Child' + PrefixType CustomIPPrefixType `json:"prefixType,omitempty"` // PublicIPPrefixes - READ-ONLY; The list of all referenced PublicIpPrefixes. PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"` // ResourceGUID - READ-ONLY; The resource GUID property of the custom IP prefix resource. @@ -11562,6 +13860,9 @@ type CustomIPPrefixPropertiesFormat struct { // MarshalJSON is the custom marshaler for CustomIPPrefixPropertiesFormat. func (cippf CustomIPPrefixPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) + if cippf.Asn != nil { + objectMap["asn"] = cippf.Asn + } if cippf.Cidr != nil { objectMap["cidr"] = cippf.Cidr } @@ -11577,6 +13878,18 @@ func (cippf CustomIPPrefixPropertiesFormat) MarshalJSON() ([]byte, error) { if cippf.CommissionedState != "" { objectMap["commissionedState"] = cippf.CommissionedState } + if cippf.ExpressRouteAdvertise != nil { + objectMap["expressRouteAdvertise"] = cippf.ExpressRouteAdvertise + } + if cippf.Geo != "" { + objectMap["geo"] = cippf.Geo + } + if cippf.NoInternetAdvertise != nil { + objectMap["noInternetAdvertise"] = cippf.NoInternetAdvertise + } + if cippf.PrefixType != "" { + objectMap["prefixType"] = cippf.PrefixType + } return json.Marshal(objectMap) } @@ -11781,18 +14094,11 @@ type DdosCustomPolicyPropertiesFormat struct { ResourceGUID *string `json:"resourceGuid,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only. - PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"` - // ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters. - ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"` } // MarshalJSON is the custom marshaler for DdosCustomPolicyPropertiesFormat. func (dcppf DdosCustomPolicyPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if dcppf.ProtocolCustomSettings != nil { - objectMap["protocolCustomSettings"] = dcppf.ProtocolCustomSettings - } return json.Marshal(objectMap) } @@ -12082,6 +14388,8 @@ type DdosProtectionPlanPropertiesFormat struct { ResourceGUID *string `json:"resourceGuid,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` + // PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS protection plan resource. This list is read-only. + PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"` // VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only. VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"` } @@ -12174,12 +14482,182 @@ func (future *DdosProtectionPlansDeleteFuture) result(client DdosProtectionPlans // DdosSettings contains the DDoS protection settings of the public IP. type DdosSettings struct { - // DdosCustomPolicy - The DDoS custom policy associated with the public IP. - DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"` - // ProtectionCoverage - The DDoS protection policy customizability of the public IP. Only standard coverage will have the ability to be customized. Possible values include: 'DdosSettingsProtectionCoverageBasic', 'DdosSettingsProtectionCoverageStandard' - ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"` - // ProtectedIP - Enables DDoS protection on the public IP. - ProtectedIP *bool `json:"protectedIP,omitempty"` + // ProtectionMode - The DDoS protection mode of the public IP. Possible values include: 'DdosSettingsProtectionModeVirtualNetworkInherited', 'DdosSettingsProtectionModeEnabled', 'DdosSettingsProtectionModeDisabled' + ProtectionMode DdosSettingsProtectionMode `json:"protectionMode,omitempty"` + // DdosProtectionPlan - The DDoS protection plan associated with the public IP. Can only be set if ProtectionMode is Enabled + DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"` +} + +// DefaultAdminPropertiesFormat security default admin rule resource. +type DefaultAdminPropertiesFormat struct { + // Description - READ-ONLY; A description for this rule. Restricted to 140 chars. + Description *string `json:"description,omitempty"` + // Flag - Default rule flag. + Flag *string `json:"flag,omitempty"` + // Protocol - READ-ONLY; Network protocol this rule applies to. Possible values include: 'SecurityConfigurationRuleProtocolTCP', 'SecurityConfigurationRuleProtocolUDP', 'SecurityConfigurationRuleProtocolIcmp', 'SecurityConfigurationRuleProtocolEsp', 'SecurityConfigurationRuleProtocolAny', 'SecurityConfigurationRuleProtocolAh' + Protocol SecurityConfigurationRuleProtocol `json:"protocol,omitempty"` + // Sources - READ-ONLY; The CIDR or source IP ranges. + Sources *[]AddressPrefixItem `json:"sources,omitempty"` + // Destinations - READ-ONLY; The destination address prefixes. CIDR or destination IP ranges. + Destinations *[]AddressPrefixItem `json:"destinations,omitempty"` + // SourcePortRanges - READ-ONLY; The source port ranges. + SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"` + // DestinationPortRanges - READ-ONLY; The destination port ranges. + DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"` + // Access - READ-ONLY; Indicates the access allowed for this particular rule. Possible values include: 'SecurityConfigurationRuleAccessAllow', 'SecurityConfigurationRuleAccessDeny', 'SecurityConfigurationRuleAccessAlwaysAllow' + Access SecurityConfigurationRuleAccess `json:"access,omitempty"` + // Priority - READ-ONLY; The priority of the rule. The value can be between 1 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule. + Priority *int32 `json:"priority,omitempty"` + // Direction - READ-ONLY; Indicates if the traffic matched against the rule in inbound or outbound. Possible values include: 'SecurityConfigurationRuleDirectionInbound', 'SecurityConfigurationRuleDirectionOutbound' + Direction SecurityConfigurationRuleDirection `json:"direction,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for DefaultAdminPropertiesFormat. +func (dapf DefaultAdminPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dapf.Flag != nil { + objectMap["flag"] = dapf.Flag + } + return json.Marshal(objectMap) +} + +// DefaultAdminRule network default admin rule. +type DefaultAdminRule struct { + // DefaultAdminPropertiesFormat - Indicates the properties of the security admin rule + *DefaultAdminPropertiesFormat `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // Kind - Possible values include: 'KindBasicBaseAdminRuleKindBaseAdminRule', 'KindBasicBaseAdminRuleKindCustom', 'KindBasicBaseAdminRuleKindDefault' + Kind KindBasicBaseAdminRule `json:"kind,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for DefaultAdminRule. +func (dar DefaultAdminRule) MarshalJSON() ([]byte, error) { + dar.Kind = KindBasicBaseAdminRuleKindDefault + objectMap := make(map[string]interface{}) + if dar.DefaultAdminPropertiesFormat != nil { + objectMap["properties"] = dar.DefaultAdminPropertiesFormat + } + if dar.Kind != "" { + objectMap["kind"] = dar.Kind + } + return json.Marshal(objectMap) +} + +// AsAdminRule is the BasicBaseAdminRule implementation for DefaultAdminRule. +func (dar DefaultAdminRule) AsAdminRule() (*AdminRule, bool) { + return nil, false +} + +// AsDefaultAdminRule is the BasicBaseAdminRule implementation for DefaultAdminRule. +func (dar DefaultAdminRule) AsDefaultAdminRule() (*DefaultAdminRule, bool) { + return &dar, true +} + +// AsBaseAdminRule is the BasicBaseAdminRule implementation for DefaultAdminRule. +func (dar DefaultAdminRule) AsBaseAdminRule() (*BaseAdminRule, bool) { + return nil, false +} + +// AsBasicBaseAdminRule is the BasicBaseAdminRule implementation for DefaultAdminRule. +func (dar DefaultAdminRule) AsBasicBaseAdminRule() (BasicBaseAdminRule, bool) { + return &dar, true +} + +// UnmarshalJSON is the custom unmarshaler for DefaultAdminRule struct. +func (dar *DefaultAdminRule) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var defaultAdminPropertiesFormat DefaultAdminPropertiesFormat + err = json.Unmarshal(*v, &defaultAdminPropertiesFormat) + if err != nil { + return err + } + dar.DefaultAdminPropertiesFormat = &defaultAdminPropertiesFormat + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + dar.SystemData = &systemData + } + case "kind": + if v != nil { + var kind KindBasicBaseAdminRule + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + dar.Kind = kind + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + dar.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + dar.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + dar.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + dar.Etag = &etag + } + } + } + + return nil +} + +// DefaultRuleSetPropertyFormat the default web application firewall rule set. +type DefaultRuleSetPropertyFormat struct { + // RuleSetType - The type of the web application firewall rule set. + RuleSetType *string `json:"ruleSetType,omitempty"` + // RuleSetVersion - The version of the web application firewall rule set type. + RuleSetVersion *string `json:"ruleSetVersion,omitempty"` } // Delegation details the service to which the subnet is delegated. @@ -12274,6 +14752,23 @@ func (d *Delegation) UnmarshalJSON(body []byte) error { return nil } +// DelegationProperties properties of the delegation. +type DelegationProperties struct { + // ServiceName - The service name to which the NVA is delegated. + ServiceName *string `json:"serviceName,omitempty"` + // ProvisioningState - READ-ONLY; Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for DelegationProperties. +func (dp DelegationProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if dp.ServiceName != nil { + objectMap["serviceName"] = dp.ServiceName + } + return json.Marshal(objectMap) +} + // DeleteBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a // long-running operation. type DeleteBastionShareableLinkFuture struct { @@ -12771,6 +15266,326 @@ func (dcpf DscpConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } +// BasicEffectiveBaseSecurityAdminRule network base admin rule. +type BasicEffectiveBaseSecurityAdminRule interface { + AsEffectiveSecurityAdminRule() (*EffectiveSecurityAdminRule, bool) + AsEffectiveDefaultSecurityAdminRule() (*EffectiveDefaultSecurityAdminRule, bool) + AsEffectiveBaseSecurityAdminRule() (*EffectiveBaseSecurityAdminRule, bool) +} + +// EffectiveBaseSecurityAdminRule network base admin rule. +type EffectiveBaseSecurityAdminRule struct { + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule', 'KindBasicEffectiveBaseSecurityAdminRuleKindCustom', 'KindBasicEffectiveBaseSecurityAdminRuleKindDefault' + Kind KindBasicEffectiveBaseSecurityAdminRule `json:"kind,omitempty"` +} + +func unmarshalBasicEffectiveBaseSecurityAdminRule(body []byte) (BasicEffectiveBaseSecurityAdminRule, error) { + var m map[string]interface{} + err := json.Unmarshal(body, &m) + if err != nil { + return nil, err + } + + switch m["kind"] { + case string(KindBasicEffectiveBaseSecurityAdminRuleKindCustom): + var esar EffectiveSecurityAdminRule + err := json.Unmarshal(body, &esar) + return esar, err + case string(KindBasicEffectiveBaseSecurityAdminRuleKindDefault): + var edsar EffectiveDefaultSecurityAdminRule + err := json.Unmarshal(body, &edsar) + return edsar, err + default: + var ebsar EffectiveBaseSecurityAdminRule + err := json.Unmarshal(body, &ebsar) + return ebsar, err + } +} +func unmarshalBasicEffectiveBaseSecurityAdminRuleArray(body []byte) ([]BasicEffectiveBaseSecurityAdminRule, error) { + var rawMessages []*json.RawMessage + err := json.Unmarshal(body, &rawMessages) + if err != nil { + return nil, err + } + + ebsarArray := make([]BasicEffectiveBaseSecurityAdminRule, len(rawMessages)) + + for index, rawMessage := range rawMessages { + ebsar, err := unmarshalBasicEffectiveBaseSecurityAdminRule(*rawMessage) + if err != nil { + return nil, err + } + ebsarArray[index] = ebsar + } + return ebsarArray, nil +} + +// MarshalJSON is the custom marshaler for EffectiveBaseSecurityAdminRule. +func (ebsar EffectiveBaseSecurityAdminRule) MarshalJSON() ([]byte, error) { + ebsar.Kind = KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule + objectMap := make(map[string]interface{}) + if ebsar.ID != nil { + objectMap["id"] = ebsar.ID + } + if ebsar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = ebsar.ConfigurationDescription + } + if ebsar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = ebsar.RuleCollectionDescription + } + if ebsar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = ebsar.RuleCollectionAppliesToGroups + } + if ebsar.RuleGroups != nil { + objectMap["ruleGroups"] = ebsar.RuleGroups + } + if ebsar.Kind != "" { + objectMap["kind"] = ebsar.Kind + } + return json.Marshal(objectMap) +} + +// AsEffectiveSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveBaseSecurityAdminRule. +func (ebsar EffectiveBaseSecurityAdminRule) AsEffectiveSecurityAdminRule() (*EffectiveSecurityAdminRule, bool) { + return nil, false +} + +// AsEffectiveDefaultSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveBaseSecurityAdminRule. +func (ebsar EffectiveBaseSecurityAdminRule) AsEffectiveDefaultSecurityAdminRule() (*EffectiveDefaultSecurityAdminRule, bool) { + return nil, false +} + +// AsEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveBaseSecurityAdminRule. +func (ebsar EffectiveBaseSecurityAdminRule) AsEffectiveBaseSecurityAdminRule() (*EffectiveBaseSecurityAdminRule, bool) { + return &ebsar, true +} + +// AsBasicEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveBaseSecurityAdminRule. +func (ebsar EffectiveBaseSecurityAdminRule) AsBasicEffectiveBaseSecurityAdminRule() (BasicEffectiveBaseSecurityAdminRule, bool) { + return &ebsar, true +} + +// EffectiveConnectivityConfiguration the network manager effective connectivity configuration +type EffectiveConnectivityConfiguration struct { + // ID - Connectivity configuration ID. + ID *string `json:"id,omitempty"` + // ConnectivityConfigurationProperties - Properties of a network manager connectivity configuration + *ConnectivityConfigurationProperties `json:"properties,omitempty"` + // ConfigurationGroups - Effective configuration groups. + ConfigurationGroups *[]ConfigurationGroup `json:"configurationGroups,omitempty"` +} + +// MarshalJSON is the custom marshaler for EffectiveConnectivityConfiguration. +func (ecc EffectiveConnectivityConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ecc.ID != nil { + objectMap["id"] = ecc.ID + } + if ecc.ConnectivityConfigurationProperties != nil { + objectMap["properties"] = ecc.ConnectivityConfigurationProperties + } + if ecc.ConfigurationGroups != nil { + objectMap["configurationGroups"] = ecc.ConfigurationGroups + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for EffectiveConnectivityConfiguration struct. +func (ecc *EffectiveConnectivityConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + ecc.ID = &ID + } + case "properties": + if v != nil { + var connectivityConfigurationProperties ConnectivityConfigurationProperties + err = json.Unmarshal(*v, &connectivityConfigurationProperties) + if err != nil { + return err + } + ecc.ConnectivityConfigurationProperties = &connectivityConfigurationProperties + } + case "configurationGroups": + if v != nil { + var configurationGroups []ConfigurationGroup + err = json.Unmarshal(*v, &configurationGroups) + if err != nil { + return err + } + ecc.ConfigurationGroups = &configurationGroups + } + } + } + + return nil +} + +// EffectiveDefaultSecurityAdminRule network default admin rule. +type EffectiveDefaultSecurityAdminRule struct { + // DefaultAdminPropertiesFormat - Indicates the properties of the default security admin rule + *DefaultAdminPropertiesFormat `json:"properties,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule', 'KindBasicEffectiveBaseSecurityAdminRuleKindCustom', 'KindBasicEffectiveBaseSecurityAdminRuleKindDefault' + Kind KindBasicEffectiveBaseSecurityAdminRule `json:"kind,omitempty"` +} + +// MarshalJSON is the custom marshaler for EffectiveDefaultSecurityAdminRule. +func (edsar EffectiveDefaultSecurityAdminRule) MarshalJSON() ([]byte, error) { + edsar.Kind = KindBasicEffectiveBaseSecurityAdminRuleKindDefault + objectMap := make(map[string]interface{}) + if edsar.DefaultAdminPropertiesFormat != nil { + objectMap["properties"] = edsar.DefaultAdminPropertiesFormat + } + if edsar.ID != nil { + objectMap["id"] = edsar.ID + } + if edsar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = edsar.ConfigurationDescription + } + if edsar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = edsar.RuleCollectionDescription + } + if edsar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = edsar.RuleCollectionAppliesToGroups + } + if edsar.RuleGroups != nil { + objectMap["ruleGroups"] = edsar.RuleGroups + } + if edsar.Kind != "" { + objectMap["kind"] = edsar.Kind + } + return json.Marshal(objectMap) +} + +// AsEffectiveSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveDefaultSecurityAdminRule. +func (edsar EffectiveDefaultSecurityAdminRule) AsEffectiveSecurityAdminRule() (*EffectiveSecurityAdminRule, bool) { + return nil, false +} + +// AsEffectiveDefaultSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveDefaultSecurityAdminRule. +func (edsar EffectiveDefaultSecurityAdminRule) AsEffectiveDefaultSecurityAdminRule() (*EffectiveDefaultSecurityAdminRule, bool) { + return &edsar, true +} + +// AsEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveDefaultSecurityAdminRule. +func (edsar EffectiveDefaultSecurityAdminRule) AsEffectiveBaseSecurityAdminRule() (*EffectiveBaseSecurityAdminRule, bool) { + return nil, false +} + +// AsBasicEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveDefaultSecurityAdminRule. +func (edsar EffectiveDefaultSecurityAdminRule) AsBasicEffectiveBaseSecurityAdminRule() (BasicEffectiveBaseSecurityAdminRule, bool) { + return &edsar, true +} + +// UnmarshalJSON is the custom unmarshaler for EffectiveDefaultSecurityAdminRule struct. +func (edsar *EffectiveDefaultSecurityAdminRule) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var defaultAdminPropertiesFormat DefaultAdminPropertiesFormat + err = json.Unmarshal(*v, &defaultAdminPropertiesFormat) + if err != nil { + return err + } + edsar.DefaultAdminPropertiesFormat = &defaultAdminPropertiesFormat + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + edsar.ID = &ID + } + case "configurationDescription": + if v != nil { + var configurationDescription string + err = json.Unmarshal(*v, &configurationDescription) + if err != nil { + return err + } + edsar.ConfigurationDescription = &configurationDescription + } + case "ruleCollectionDescription": + if v != nil { + var ruleCollectionDescription string + err = json.Unmarshal(*v, &ruleCollectionDescription) + if err != nil { + return err + } + edsar.RuleCollectionDescription = &ruleCollectionDescription + } + case "ruleCollectionAppliesToGroups": + if v != nil { + var ruleCollectionAppliesToGroups []ManagerSecurityGroupItem + err = json.Unmarshal(*v, &ruleCollectionAppliesToGroups) + if err != nil { + return err + } + edsar.RuleCollectionAppliesToGroups = &ruleCollectionAppliesToGroups + } + case "ruleGroups": + if v != nil { + var ruleGroups []ConfigurationGroup + err = json.Unmarshal(*v, &ruleGroups) + if err != nil { + return err + } + edsar.RuleGroups = &ruleGroups + } + case "kind": + if v != nil { + var kind KindBasicEffectiveBaseSecurityAdminRule + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + edsar.Kind = kind + } + } + } + + return nil +} + // EffectiveNetworkSecurityGroup effective network security group. type EffectiveNetworkSecurityGroup struct { // NetworkSecurityGroup - The ID of network security group that is applied. @@ -12872,7 +15687,7 @@ type EffectiveRoute struct { DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"` // Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault' Source EffectiveRouteSource `json:"source,omitempty"` - // State - The value of effective route. Possible values include: 'EffectiveRouteStateActive', 'EffectiveRouteStateInvalid' + // State - The value of effective route. Possible values include: 'Active', 'Invalid' State EffectiveRouteState `json:"state,omitempty"` // AddressPrefix - The address prefixes of the effective routes in CIDR notation. AddressPrefix *[]string `json:"addressPrefix,omitempty"` @@ -12900,6 +15715,16 @@ func (erlr EffectiveRouteListResult) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } +// EffectiveRouteMapRoute the effective RouteMap route configured on the connection resource. +type EffectiveRouteMapRoute struct { + // Prefix - The address prefix of the route. + Prefix *[]string `json:"prefix,omitempty"` + // BgpCommunities - BGP communities of the route. + BgpCommunities *string `json:"bgpCommunities,omitempty"` + // AsPath - The ASPath of this route. + AsPath *string `json:"asPath,omitempty"` +} + // EffectiveRoutesParameters the parameters specifying the resource whose effective routes are being // requested. type EffectiveRoutesParameters struct { @@ -12909,6 +15734,150 @@ type EffectiveRoutesParameters struct { VirtualWanResourceType *string `json:"virtualWanResourceType,omitempty"` } +// EffectiveSecurityAdminRule network admin rule. +type EffectiveSecurityAdminRule struct { + // AdminPropertiesFormat - Indicates the properties of the security admin rule + *AdminPropertiesFormat `json:"properties,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // ConfigurationDescription - A description of the security admin configuration. + ConfigurationDescription *string `json:"configurationDescription,omitempty"` + // RuleCollectionDescription - A description of the rule collection. + RuleCollectionDescription *string `json:"ruleCollectionDescription,omitempty"` + // RuleCollectionAppliesToGroups - Groups for rule collection + RuleCollectionAppliesToGroups *[]ManagerSecurityGroupItem `json:"ruleCollectionAppliesToGroups,omitempty"` + // RuleGroups - Effective configuration groups. + RuleGroups *[]ConfigurationGroup `json:"ruleGroups,omitempty"` + // Kind - Possible values include: 'KindBasicEffectiveBaseSecurityAdminRuleKindEffectiveBaseSecurityAdminRule', 'KindBasicEffectiveBaseSecurityAdminRuleKindCustom', 'KindBasicEffectiveBaseSecurityAdminRuleKindDefault' + Kind KindBasicEffectiveBaseSecurityAdminRule `json:"kind,omitempty"` +} + +// MarshalJSON is the custom marshaler for EffectiveSecurityAdminRule. +func (esar EffectiveSecurityAdminRule) MarshalJSON() ([]byte, error) { + esar.Kind = KindBasicEffectiveBaseSecurityAdminRuleKindCustom + objectMap := make(map[string]interface{}) + if esar.AdminPropertiesFormat != nil { + objectMap["properties"] = esar.AdminPropertiesFormat + } + if esar.ID != nil { + objectMap["id"] = esar.ID + } + if esar.ConfigurationDescription != nil { + objectMap["configurationDescription"] = esar.ConfigurationDescription + } + if esar.RuleCollectionDescription != nil { + objectMap["ruleCollectionDescription"] = esar.RuleCollectionDescription + } + if esar.RuleCollectionAppliesToGroups != nil { + objectMap["ruleCollectionAppliesToGroups"] = esar.RuleCollectionAppliesToGroups + } + if esar.RuleGroups != nil { + objectMap["ruleGroups"] = esar.RuleGroups + } + if esar.Kind != "" { + objectMap["kind"] = esar.Kind + } + return json.Marshal(objectMap) +} + +// AsEffectiveSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveSecurityAdminRule. +func (esar EffectiveSecurityAdminRule) AsEffectiveSecurityAdminRule() (*EffectiveSecurityAdminRule, bool) { + return &esar, true +} + +// AsEffectiveDefaultSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveSecurityAdminRule. +func (esar EffectiveSecurityAdminRule) AsEffectiveDefaultSecurityAdminRule() (*EffectiveDefaultSecurityAdminRule, bool) { + return nil, false +} + +// AsEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveSecurityAdminRule. +func (esar EffectiveSecurityAdminRule) AsEffectiveBaseSecurityAdminRule() (*EffectiveBaseSecurityAdminRule, bool) { + return nil, false +} + +// AsBasicEffectiveBaseSecurityAdminRule is the BasicEffectiveBaseSecurityAdminRule implementation for EffectiveSecurityAdminRule. +func (esar EffectiveSecurityAdminRule) AsBasicEffectiveBaseSecurityAdminRule() (BasicEffectiveBaseSecurityAdminRule, bool) { + return &esar, true +} + +// UnmarshalJSON is the custom unmarshaler for EffectiveSecurityAdminRule struct. +func (esar *EffectiveSecurityAdminRule) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var adminPropertiesFormat AdminPropertiesFormat + err = json.Unmarshal(*v, &adminPropertiesFormat) + if err != nil { + return err + } + esar.AdminPropertiesFormat = &adminPropertiesFormat + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + esar.ID = &ID + } + case "configurationDescription": + if v != nil { + var configurationDescription string + err = json.Unmarshal(*v, &configurationDescription) + if err != nil { + return err + } + esar.ConfigurationDescription = &configurationDescription + } + case "ruleCollectionDescription": + if v != nil { + var ruleCollectionDescription string + err = json.Unmarshal(*v, &ruleCollectionDescription) + if err != nil { + return err + } + esar.RuleCollectionDescription = &ruleCollectionDescription + } + case "ruleCollectionAppliesToGroups": + if v != nil { + var ruleCollectionAppliesToGroups []ManagerSecurityGroupItem + err = json.Unmarshal(*v, &ruleCollectionAppliesToGroups) + if err != nil { + return err + } + esar.RuleCollectionAppliesToGroups = &ruleCollectionAppliesToGroups + } + case "ruleGroups": + if v != nil { + var ruleGroups []ConfigurationGroup + err = json.Unmarshal(*v, &ruleGroups) + if err != nil { + return err + } + esar.RuleGroups = &ruleGroups + } + case "kind": + if v != nil { + var kind KindBasicEffectiveBaseSecurityAdminRule + err = json.Unmarshal(*v, &kind) + if err != nil { + return err + } + esar.Kind = kind + } + } + } + + return nil +} + // EndpointServiceResult endpoint service. type EndpointServiceResult struct { // Name - READ-ONLY; Name of the endpoint service. @@ -13169,14 +16138,16 @@ type ExclusionManagedRuleSet struct { RuleGroups *[]ExclusionManagedRuleGroup `json:"ruleGroups,omitempty"` } -// ExplicitProxySettings explicit Proxy Settings in Firewall Policy. -type ExplicitProxySettings struct { +// ExplicitProxy explicit Proxy Settings in Firewall Policy. +type ExplicitProxy struct { // EnableExplicitProxy - When set to true, explicit proxy mode is enabled. EnableExplicitProxy *bool `json:"enableExplicitProxy,omitempty"` // HTTPPort - Port number for explicit proxy http protocol, cannot be greater than 64000. HTTPPort *int32 `json:"httpPort,omitempty"` // HTTPSPort - Port number for explicit proxy https protocol, cannot be greater than 64000. HTTPSPort *int32 `json:"httpsPort,omitempty"` + // EnablePacFile - When set to true, pac file port and url needs to be provided. + EnablePacFile *bool `json:"enablePacFile,omitempty"` // PacFilePort - Port number for firewall to serve PAC file. PacFilePort *int32 `json:"pacFilePort,omitempty"` // PacFile - SAS URL for PAC file. @@ -13758,7 +16729,7 @@ type ExpressRouteCircuitConnectionPropertiesFormat struct { AuthorizationKey *string `json:"authorizationKey,omitempty"` // Ipv6CircuitConnectionConfig - IPv6 Address PrefixProperties of the express route circuit connection. Ipv6CircuitConnectionConfig *Ipv6CircuitConnectionConfig `json:"ipv6CircuitConnectionConfig,omitempty"` - // CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'CircuitConnectionStatusConnected', 'CircuitConnectionStatusConnecting', 'CircuitConnectionStatusDisconnected' + // CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected' CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` @@ -14124,7 +17095,7 @@ type ExpressRouteCircuitPeeringConfig struct { AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"` // AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering. AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"` - // AdvertisedPublicPrefixesState - READ-ONLY; The advertised public prefix state of the Peering resource. Possible values include: 'ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateNotConfigured', 'ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfiguring', 'ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateConfigured', 'ExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValidationNeeded' + // AdvertisedPublicPrefixesState - READ-ONLY; The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded' AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"` // LegacyMode - The legacy mode of the peering. LegacyMode *int32 `json:"legacyMode,omitempty"` @@ -14324,7 +17295,7 @@ func NewExpressRouteCircuitPeeringListResultPage(cur ExpressRouteCircuitPeeringL // ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering. type ExpressRouteCircuitPeeringPropertiesFormat struct { - // PeeringType - The peering type. Possible values include: 'ExpressRoutePeeringTypeAzurePublicPeering', 'ExpressRoutePeeringTypeAzurePrivatePeering', 'ExpressRoutePeeringTypeMicrosoftPeering' + // PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering' PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"` // State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled' State ExpressRoutePeeringState `json:"state,omitempty"` @@ -14723,7 +17694,7 @@ type ExpressRouteCircuitSku struct { Name *string `json:"name,omitempty"` // Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal' Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"` - // Family - The family of the SKU. Possible values include: 'ExpressRouteCircuitSkuFamilyUnlimitedData', 'ExpressRouteCircuitSkuFamilyMeteredData' + // Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData' Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"` } @@ -14990,6 +17961,8 @@ type ExpressRouteConnectionProperties struct { EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"` // ExpressRouteGatewayBypass - Enable FastPath to vWan Firewall hub. ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"` + // EnablePrivateLinkFastPath - Bypass the ExpressRoute gateway when accessing private-links. ExpressRoute FastPath (expressRouteGatewayBypass) must be enabled. + EnablePrivateLinkFastPath *bool `json:"enablePrivateLinkFastPath,omitempty"` // RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection. RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"` } @@ -15012,6 +17985,9 @@ func (ercp ExpressRouteConnectionProperties) MarshalJSON() ([]byte, error) { if ercp.ExpressRouteGatewayBypass != nil { objectMap["expressRouteGatewayBypass"] = ercp.ExpressRouteGatewayBypass } + if ercp.EnablePrivateLinkFastPath != nil { + objectMap["enablePrivateLinkFastPath"] = ercp.EnablePrivateLinkFastPath + } if ercp.RoutingConfiguration != nil { objectMap["routingConfiguration"] = ercp.RoutingConfiguration } @@ -15633,7 +18609,7 @@ func NewExpressRouteCrossConnectionPeeringListPage(cur ExpressRouteCrossConnecti // ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering. type ExpressRouteCrossConnectionPeeringProperties struct { - // PeeringType - The peering type. Possible values include: 'ExpressRoutePeeringTypeAzurePublicPeering', 'ExpressRoutePeeringTypeAzurePrivatePeering', 'ExpressRoutePeeringTypeMicrosoftPeering' + // PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering' PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"` // State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled' State ExpressRoutePeeringState `json:"state,omitempty"` @@ -16158,6 +19134,8 @@ type ExpressRouteGatewayProperties struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed. VirtualHub *VirtualHubID `json:"virtualHub,omitempty"` + // AllowNonVirtualWanTraffic - Configures this gateway to accept traffic from non Virtual WAN networks. + AllowNonVirtualWanTraffic *bool `json:"allowNonVirtualWanTraffic,omitempty"` } // MarshalJSON is the custom marshaler for ExpressRouteGatewayProperties. @@ -16172,6 +19150,9 @@ func (ergp ExpressRouteGatewayProperties) MarshalJSON() ([]byte, error) { if ergp.VirtualHub != nil { objectMap["virtualHub"] = ergp.VirtualHub } + if ergp.AllowNonVirtualWanTraffic != nil { + objectMap["allowNonVirtualWanTraffic"] = ergp.AllowNonVirtualWanTraffic + } return json.Marshal(objectMap) } @@ -16557,7 +19538,7 @@ type ExpressRouteLinkMacSecConfig struct { CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"` // CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key. CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"` - // Cipher - Mac security cipher. Possible values include: 'ExpressRouteLinkMacSecCipherGcmAes256', 'ExpressRouteLinkMacSecCipherGcmAes128', 'ExpressRouteLinkMacSecCipherGcmAesXpn128', 'ExpressRouteLinkMacSecCipherGcmAesXpn256' + // Cipher - Mac security cipher. Possible values include: 'GcmAes256', 'GcmAes128', 'GcmAesXpn128', 'GcmAesXpn256' Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"` // SciState - Sci mode enabled/disabled. Possible values include: 'ExpressRouteLinkMacSecSciStateDisabled', 'ExpressRouteLinkMacSecSciStateEnabled' SciState ExpressRouteLinkMacSecSciState `json:"sciState,omitempty"` @@ -16573,7 +19554,9 @@ type ExpressRouteLinkPropertiesFormat struct { PatchPanelID *string `json:"patchPanelId,omitempty"` // RackID - READ-ONLY; Mapping of physical patch panel to rack. RackID *string `json:"rackId,omitempty"` - // ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'ExpressRouteLinkConnectorTypeLC', 'ExpressRouteLinkConnectorTypeSC' + // ColoLocation - READ-ONLY; Cololocation for ExpressRoute Hybrid Direct. + ColoLocation *string `json:"coloLocation,omitempty"` + // ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC' ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"` // AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled' AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"` @@ -17242,7 +20225,7 @@ type ExpressRoutePortPropertiesFormat struct { ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"` // Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s). Mtu *string `json:"mtu,omitempty"` - // Encapsulation - Encapsulation method on physical ports. Possible values include: 'ExpressRoutePortsEncapsulationDot1Q', 'ExpressRoutePortsEncapsulationQinQ' + // Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ' Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"` // EtherType - READ-ONLY; Ether type of the physical port. EtherType *string `json:"etherType,omitempty"` @@ -17256,6 +20239,8 @@ type ExpressRoutePortPropertiesFormat struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // ResourceGUID - READ-ONLY; The resource GUID property of the express route port resource. ResourceGUID *string `json:"resourceGuid,omitempty"` + // BillingType - The billing type of the ExpressRoutePort resource. Possible values include: 'ExpressRoutePortsBillingTypeMeteredData', 'ExpressRoutePortsBillingTypeUnlimitedData' + BillingType ExpressRoutePortsBillingType `json:"billingType,omitempty"` } // MarshalJSON is the custom marshaler for ExpressRoutePortPropertiesFormat. @@ -17273,6 +20258,9 @@ func (erppf ExpressRoutePortPropertiesFormat) MarshalJSON() ([]byte, error) { if erppf.Links != nil { objectMap["links"] = erppf.Links } + if erppf.BillingType != "" { + objectMap["billingType"] = erppf.BillingType + } return json.Marshal(objectMap) } @@ -17656,6 +20644,180 @@ func (erplpf ExpressRoutePortsLocationPropertiesFormat) MarshalJSON() ([]byte, e return json.Marshal(objectMap) } +// ExpressRouteProviderPort expressRouteProviderPort resource. +type ExpressRouteProviderPort struct { + autorest.Response `json:"-"` + // ExpressRouteProviderPortProperties - Properties of the express route Service Provider Port. + *ExpressRouteProviderPortProperties `json:"properties,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ExpressRouteProviderPort. +func (erpp ExpressRouteProviderPort) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if erpp.ExpressRouteProviderPortProperties != nil { + objectMap["properties"] = erpp.ExpressRouteProviderPortProperties + } + if erpp.ID != nil { + objectMap["id"] = erpp.ID + } + if erpp.Location != nil { + objectMap["location"] = erpp.Location + } + if erpp.Tags != nil { + objectMap["tags"] = erpp.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ExpressRouteProviderPort struct. +func (erpp *ExpressRouteProviderPort) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var expressRouteProviderPortProperties ExpressRouteProviderPortProperties + err = json.Unmarshal(*v, &expressRouteProviderPortProperties) + if err != nil { + return err + } + erpp.ExpressRouteProviderPortProperties = &expressRouteProviderPortProperties + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + erpp.Etag = &etag + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + erpp.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + erpp.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + erpp.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + erpp.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + erpp.Tags = tags + } + } + } + + return nil +} + +// ExpressRouteProviderPortListResult response for ListExpressRouteProviderPort API service call. +type ExpressRouteProviderPortListResult struct { + autorest.Response `json:"-"` + // Value - A list of ExpressRouteProviderPort resources. + Value *[]ExpressRouteProviderPort `json:"value,omitempty"` + // NextLink - READ-ONLY; The URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// MarshalJSON is the custom marshaler for ExpressRouteProviderPortListResult. +func (erpplr ExpressRouteProviderPortListResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if erpplr.Value != nil { + objectMap["value"] = erpplr.Value + } + return json.Marshal(objectMap) +} + +// ExpressRouteProviderPortProperties properties of ExpressRouteProviderPort. +type ExpressRouteProviderPortProperties struct { + // PortPairDescriptor - READ-ONLY; The name of the port pair. + PortPairDescriptor *string `json:"portPairDescriptor,omitempty"` + // PrimaryAzurePort - READ-ONLY; The name of the primary port. + PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"` + // SecondaryAzurePort - READ-ONLY; The name of the secondary port. + SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"` + // PeeringLocation - The peering location of the port pair. + PeeringLocation *string `json:"peeringLocation,omitempty"` + // OverprovisionFactor - Overprovisioning factor for the port pair. + OverprovisionFactor *int32 `json:"overprovisionFactor,omitempty"` + // PortBandwidthInMbps - Bandwidth of the port in Mbps + PortBandwidthInMbps *int32 `json:"portBandwidthInMbps,omitempty"` + // UsedBandwidthInMbps - Used Bandwidth of the port in Mbps + UsedBandwidthInMbps *int32 `json:"usedBandwidthInMbps,omitempty"` + // RemainingBandwidthInMbps - Remaining Bandwidth of the port in Mbps + RemainingBandwidthInMbps *int32 `json:"remainingBandwidthInMbps,omitempty"` +} + +// MarshalJSON is the custom marshaler for ExpressRouteProviderPortProperties. +func (erppp ExpressRouteProviderPortProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if erppp.PeeringLocation != nil { + objectMap["peeringLocation"] = erppp.PeeringLocation + } + if erppp.OverprovisionFactor != nil { + objectMap["overprovisionFactor"] = erppp.OverprovisionFactor + } + if erppp.PortBandwidthInMbps != nil { + objectMap["portBandwidthInMbps"] = erppp.PortBandwidthInMbps + } + if erppp.UsedBandwidthInMbps != nil { + objectMap["usedBandwidthInMbps"] = erppp.UsedBandwidthInMbps + } + if erppp.RemainingBandwidthInMbps != nil { + objectMap["remainingBandwidthInMbps"] = erppp.RemainingBandwidthInMbps + } + return json.Marshal(objectMap) +} + // ExpressRouteServiceProvider a ExpressRouteResourceProvider object. type ExpressRouteServiceProvider struct { // ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider. @@ -17954,7 +21116,7 @@ func (ersppf ExpressRouteServiceProviderPropertiesFormat) MarshalJSON() ([]byte, type ExtendedLocation struct { // Name - The name of the extended location. Name *string `json:"name,omitempty"` - // Type - The type of the extended location. Possible values include: 'ExtendedLocationTypesEdgeZone' + // Type - The type of the extended location. Possible values include: 'EdgeZone' Type ExtendedLocationTypes `json:"type,omitempty"` } @@ -18654,7 +21816,7 @@ func (fpnrc *FirewallPolicyNatRuleCollection) UnmarshalJSON(body []byte) error { // FirewallPolicyNatRuleCollectionAction properties of the FirewallPolicyNatRuleCollectionAction. type FirewallPolicyNatRuleCollectionAction struct { - // Type - The type of action. Possible values include: 'FirewallPolicyNatRuleCollectionActionTypeDNAT' + // Type - The type of action. Possible values include: 'DNAT' Type FirewallPolicyNatRuleCollectionActionType `json:"type,omitempty"` } @@ -18682,8 +21844,8 @@ type FirewallPolicyPropertiesFormat struct { SQL *FirewallPolicySQL `json:"sql,omitempty"` // DNSSettings - DNS Proxy Settings definition. DNSSettings *DNSSettings `json:"dnsSettings,omitempty"` - // ExplicitProxySettings - Explicit Proxy Settings definition. - ExplicitProxySettings *ExplicitProxySettings `json:"explicitProxySettings,omitempty"` + // ExplicitProxy - Explicit Proxy Settings definition. + ExplicitProxy *ExplicitProxy `json:"explicitProxy,omitempty"` // IntrusionDetection - The configuration for Intrusion detection. IntrusionDetection *FirewallPolicyIntrusionDetection `json:"intrusionDetection,omitempty"` // TransportSecurity - TLS Configuration definition. @@ -18716,8 +21878,8 @@ func (fppf FirewallPolicyPropertiesFormat) MarshalJSON() ([]byte, error) { if fppf.DNSSettings != nil { objectMap["dnsSettings"] = fppf.DNSSettings } - if fppf.ExplicitProxySettings != nil { - objectMap["explicitProxySettings"] = fppf.ExplicitProxySettings + if fppf.ExplicitProxy != nil { + objectMap["explicitProxy"] = fppf.ExplicitProxy } if fppf.IntrusionDetection != nil { objectMap["intrusionDetection"] = fppf.IntrusionDetection @@ -19342,6 +22504,8 @@ type FirewallPolicySku struct { type FirewallPolicySNAT struct { // PrivateRanges - List of private IP addresses/IP address ranges to not be SNAT. PrivateRanges *[]string `json:"privateRanges,omitempty"` + // AutoLearnPrivateRanges - The operation mode for automatically learning private ranges to not be SNAT. Possible values include: 'AutoLearnPrivateRangesModeEnabled', 'AutoLearnPrivateRangesModeDisabled' + AutoLearnPrivateRanges AutoLearnPrivateRangesMode `json:"autoLearnPrivateRanges,omitempty"` } // FirewallPolicySQL SQL Settings in Firewall Policy. @@ -19481,7 +22645,7 @@ func (fl *FlowLog) UnmarshalJSON(body []byte) error { // FlowLogFormatParameters parameters that define the flow log format. type FlowLogFormatParameters struct { - // Type - The file type of flow log. Possible values include: 'FlowLogFormatTypeJSON' + // Type - The file type of flow log. Possible values include: 'JSON' Type FlowLogFormatType `json:"type,omitempty"` // Version - The version (revision) of the flow log. Version *int32 `json:"version,omitempty"` @@ -19982,9 +23146,9 @@ type FrontendIPConfigurationPropertiesFormat struct { LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"` // PrivateIPAddress - The private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` - // PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6' PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` // Subnet - The reference to the subnet resource. Subnet *Subnet `json:"subnet,omitempty"` @@ -20220,6 +23384,24 @@ func (future *GetActiveSessionsFuture) result(client BaseClient) (baslrp Bastion return } +// GetInboundRoutesParameters the parameters specifying the connection resource whose inbound routes are +// being requested. +type GetInboundRoutesParameters struct { + // ResourceURI - The connection resource whose inbound routes are being requested. + ResourceURI *string `json:"resourceUri,omitempty"` + // ConnectionType - The type of the specified connection resource like ExpressRouteConnection, HubVirtualNetworkConnection, VpnConnection and P2SConnection. + ConnectionType *string `json:"connectionType,omitempty"` +} + +// GetOutboundRoutesParameters the parameters specifying the connection resource whose outbound routes are +// being requested. +type GetOutboundRoutesParameters struct { + // ResourceURI - The connection resource whose outbound routes are being requested. + ResourceURI *string `json:"resourceUri,omitempty"` + // ConnectionType - The type of the specified connection resource like ExpressRouteConnection, HubVirtualNetworkConnection, VpnConnection and P2SConnection. + ConnectionType *string `json:"connectionType,omitempty"` +} + // GetVpnSitesConfigurationRequest list of Vpn-Sites. type GetVpnSitesConfigurationRequest struct { // VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded. @@ -20228,6 +23410,314 @@ type GetVpnSitesConfigurationRequest struct { OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"` } +// Group the network group resource +type Group struct { + autorest.Response `json:"-"` + // GroupProperties - The Network Group properties + *GroupProperties `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for Group. +func (g Group) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if g.GroupProperties != nil { + objectMap["properties"] = g.GroupProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Group struct. +func (g *Group) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var groupProperties GroupProperties + err = json.Unmarshal(*v, &groupProperties) + if err != nil { + return err + } + g.GroupProperties = &groupProperties + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + g.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + g.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + g.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + g.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + g.Etag = &etag + } + } + } + + return nil +} + +// GroupListResult result of the request to list NetworkGroup. It contains a list of groups and a URL link +// to get the next set of results. +type GroupListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of NetworkGroup + Value *[]Group `json:"value,omitempty"` + // NextLink - Gets the URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// GroupListResultIterator provides access to a complete listing of Group values. +type GroupListResultIterator struct { + i int + page GroupListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *GroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *GroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter GroupListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter GroupListResultIterator) Response() GroupListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter GroupListResultIterator) Value() Group { + if !iter.page.NotDone() { + return Group{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the GroupListResultIterator type. +func NewGroupListResultIterator(page GroupListResultPage) GroupListResultIterator { + return GroupListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (glr GroupListResult) IsEmpty() bool { + return glr.Value == nil || len(*glr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (glr GroupListResult) hasNextLink() bool { + return glr.NextLink != nil && len(*glr.NextLink) != 0 +} + +// groupListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (glr GroupListResult) groupListResultPreparer(ctx context.Context) (*http.Request, error) { + if !glr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(glr.NextLink))) +} + +// GroupListResultPage contains a page of Group values. +type GroupListResultPage struct { + fn func(context.Context, GroupListResult) (GroupListResult, error) + glr GroupListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *GroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/GroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.glr) + if err != nil { + return err + } + page.glr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *GroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page GroupListResultPage) NotDone() bool { + return !page.glr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page GroupListResultPage) Response() GroupListResult { + return page.glr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page GroupListResultPage) Values() []Group { + if page.glr.IsEmpty() { + return nil + } + return *page.glr.Value +} + +// Creates a new instance of the GroupListResultPage type. +func NewGroupListResultPage(cur GroupListResult, getNextPage func(context.Context, GroupListResult) (GroupListResult, error)) GroupListResultPage { + return GroupListResultPage{ + fn: getNextPage, + glr: cur, + } +} + +// GroupProperties properties of network group +type GroupProperties struct { + // Description - A description of the network group. + Description *string `json:"description,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the scope assignment resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for GroupProperties. +func (gp GroupProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if gp.Description != nil { + objectMap["description"] = gp.Description + } + return json.Marshal(objectMap) +} + +// GroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +type GroupsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(GroupsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *GroupsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for GroupsDeleteFuture.Result. +func (future *GroupsDeleteFuture) result(client GroupsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.GroupsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.GroupsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + // HopLink hop link. type HopLink struct { // NextHopID - READ-ONLY; The ID of the next hop. @@ -20356,6 +23846,14 @@ type HTTPHeader struct { Value *string `json:"value,omitempty"` } +// Hub hub Item. +type Hub struct { + // ResourceID - Resource Id. + ResourceID *string `json:"resourceId,omitempty"` + // ResourceType - Resource Type. + ResourceType *string `json:"resourceType,omitempty"` +} + // HubIPAddresses IP addresses associated with azure firewall. type HubIPAddresses struct { // PublicIPs - Public IP addresses associated with azure firewall. @@ -20458,7 +23956,7 @@ func (hic *HubIPConfiguration) UnmarshalJSON(body []byte) error { type HubIPConfigurationPropertiesFormat struct { // PrivateIPAddress - The private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` // Subnet - The reference to the subnet resource. Subnet *Subnet `json:"subnet,omitempty"` @@ -22139,9 +25637,9 @@ type InterfaceIPConfigurationPropertiesFormat struct { LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"` // PrivateIPAddress - Private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` - // PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6' PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` // Subnet - Subnet bound to the IP configuration. Subnet *Subnet `json:"subnet,omitempty"` @@ -22555,8 +26053,10 @@ type InterfacePropertiesFormat struct { Primary *bool `json:"primary,omitempty"` // VnetEncryptionSupported - READ-ONLY; Whether the virtual machine this nic is attached to supports encryption. VnetEncryptionSupported *bool `json:"vnetEncryptionSupported,omitempty"` - // EnableAcceleratedNetworking - If the network interface is accelerated networking enabled. + // EnableAcceleratedNetworking - If the network interface is configured for accelerated networking. Not applicable to VM sizes which require accelerated networking. EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` + // DisableTCPStateTracking - Indicates whether to disable tcp state tracking. + DisableTCPStateTracking *bool `json:"disableTcpStateTracking,omitempty"` // EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface. EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` // HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources. @@ -22569,7 +26069,7 @@ type InterfacePropertiesFormat struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // WorkloadType - WorkloadType of the NetworkInterface for BareMetal resources WorkloadType *string `json:"workloadType,omitempty"` - // NicType - Type of Network Interface resource. Possible values include: 'InterfaceNicTypeStandard', 'InterfaceNicTypeElastic' + // NicType - Type of Network Interface resource. Possible values include: 'Standard', 'Elastic' NicType InterfaceNicType `json:"nicType,omitempty"` // PrivateLinkService - Privatelinkservice of the network interface resource. PrivateLinkService *PrivateLinkService `json:"privateLinkService,omitempty"` @@ -22594,6 +26094,9 @@ func (ipf InterfacePropertiesFormat) MarshalJSON() ([]byte, error) { if ipf.EnableAcceleratedNetworking != nil { objectMap["enableAcceleratedNetworking"] = ipf.EnableAcceleratedNetworking } + if ipf.DisableTCPStateTracking != nil { + objectMap["disableTcpStateTracking"] = ipf.DisableTCPStateTracking + } if ipf.EnableIPForwarding != nil { objectMap["enableIPForwarding"] = ipf.EnableIPForwarding } @@ -23428,13 +26931,13 @@ type IPAllocationPropertiesFormat struct { Subnet *SubResource `json:"subnet,omitempty"` // VirtualNetwork - READ-ONLY; The VirtualNetwork that using the prefix of this IpAllocation resource. VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"` - // Type - The type for the IpAllocation. Possible values include: 'IPAllocationTypeUndefined', 'IPAllocationTypeHypernet' + // Type - The type for the IpAllocation. Possible values include: 'Undefined', 'Hypernet' Type IPAllocationType `json:"type,omitempty"` // Prefix - The address prefix for the IpAllocation. Prefix *string `json:"prefix,omitempty"` // PrefixLength - The address prefix length for the IpAllocation. PrefixLength *int32 `json:"prefixLength,omitempty"` - // PrefixType - The address prefix Type for the IpAllocation. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PrefixType - The address prefix Type for the IpAllocation. Possible values include: 'IPv4', 'IPv6' PrefixType IPVersion `json:"prefixType,omitempty"` // IpamAllocationID - The IPAM allocation ID. IpamAllocationID *string `json:"ipamAllocationId,omitempty"` @@ -23758,7 +27261,7 @@ func (icppf IPConfigurationProfilePropertiesFormat) MarshalJSON() ([]byte, error type IPConfigurationPropertiesFormat struct { // PrivateIPAddress - The private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` // Subnet - The reference to the subnet resource. Subnet *Subnet `json:"subnet,omitempty"` @@ -24161,6 +27664,13 @@ func (future *IPGroupsDeleteFuture) result(client IPGroupsClient) (ar autorest.R return } +// IPPrefixesList list of SNAT IP Prefixes learnt by firewall to not SNAT +type IPPrefixesList struct { + autorest.Response `json:"-"` + // IPPrefixes - IP Prefix value. + IPPrefixes *[]string `json:"ipPrefixes,omitempty"` +} + // IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection. type IpsecPolicy struct { // SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel. @@ -24171,7 +27681,7 @@ type IpsecPolicy struct { IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"` // IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256' IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"` - // IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'IkeEncryptionDES', 'IkeEncryptionDES3', 'IkeEncryptionAES128', 'IkeEncryptionAES192', 'IkeEncryptionAES256', 'IkeEncryptionGCMAES256', 'IkeEncryptionGCMAES128' + // IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128' IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"` // IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128' IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"` @@ -24193,7 +27703,7 @@ type IPTag struct { type Ipv6CircuitConnectionConfig struct { // AddressPrefix - /125 IP address space to carve out customer addresses for global reach. AddressPrefix *string `json:"addressPrefix,omitempty"` - // CircuitConnectionStatus - READ-ONLY; Express Route Circuit connection state. Possible values include: 'CircuitConnectionStatusConnected', 'CircuitConnectionStatusConnecting', 'CircuitConnectionStatusDisconnected' + // CircuitConnectionStatus - READ-ONLY; Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected' CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"` } @@ -24700,27 +28210,26 @@ func NewListP2SVpnGatewaysResultPage(cur ListP2SVpnGatewaysResult, getNextPage f } } -// ListRoutingIntentResult list of the routing intent result and a URL nextLink to get the next set of -// results. -type ListRoutingIntentResult struct { +// ListRouteMapsResult list of RouteMaps and a URL nextLink to get the next set of results. +type ListRouteMapsResult struct { autorest.Response `json:"-"` - // Value - List of RoutingIntent resource. - Value *[]RoutingIntent `json:"value,omitempty"` + // Value - List of RouteMaps. + Value *[]RouteMap `json:"value,omitempty"` // NextLink - URL to get the next set of operation list results if there are any. NextLink *string `json:"nextLink,omitempty"` } -// ListRoutingIntentResultIterator provides access to a complete listing of RoutingIntent values. -type ListRoutingIntentResultIterator struct { +// ListRouteMapsResultIterator provides access to a complete listing of RouteMap values. +type ListRouteMapsResultIterator struct { i int - page ListRoutingIntentResultPage + page ListRouteMapsResultPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ListRoutingIntentResultIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *ListRouteMapsResultIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListRoutingIntentResultIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListRouteMapsResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -24745,67 +28254,67 @@ func (iter *ListRoutingIntentResultIterator) NextWithContext(ctx context.Context // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *ListRoutingIntentResultIterator) Next() error { +func (iter *ListRouteMapsResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ListRoutingIntentResultIterator) NotDone() bool { +func (iter ListRouteMapsResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter ListRoutingIntentResultIterator) Response() ListRoutingIntentResult { +func (iter ListRouteMapsResultIterator) Response() ListRouteMapsResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter ListRoutingIntentResultIterator) Value() RoutingIntent { +func (iter ListRouteMapsResultIterator) Value() RouteMap { if !iter.page.NotDone() { - return RoutingIntent{} + return RouteMap{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the ListRoutingIntentResultIterator type. -func NewListRoutingIntentResultIterator(page ListRoutingIntentResultPage) ListRoutingIntentResultIterator { - return ListRoutingIntentResultIterator{page: page} +// Creates a new instance of the ListRouteMapsResultIterator type. +func NewListRouteMapsResultIterator(page ListRouteMapsResultPage) ListRouteMapsResultIterator { + return ListRouteMapsResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (lrir ListRoutingIntentResult) IsEmpty() bool { - return lrir.Value == nil || len(*lrir.Value) == 0 +func (lrmr ListRouteMapsResult) IsEmpty() bool { + return lrmr.Value == nil || len(*lrmr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (lrir ListRoutingIntentResult) hasNextLink() bool { - return lrir.NextLink != nil && len(*lrir.NextLink) != 0 +func (lrmr ListRouteMapsResult) hasNextLink() bool { + return lrmr.NextLink != nil && len(*lrmr.NextLink) != 0 } -// listRoutingIntentResultPreparer prepares a request to retrieve the next set of results. +// listRouteMapsResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lrir ListRoutingIntentResult) listRoutingIntentResultPreparer(ctx context.Context) (*http.Request, error) { - if !lrir.hasNextLink() { +func (lrmr ListRouteMapsResult) listRouteMapsResultPreparer(ctx context.Context) (*http.Request, error) { + if !lrmr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lrir.NextLink))) + autorest.WithBaseURL(to.String(lrmr.NextLink))) } -// ListRoutingIntentResultPage contains a page of RoutingIntent values. -type ListRoutingIntentResultPage struct { - fn func(context.Context, ListRoutingIntentResult) (ListRoutingIntentResult, error) - lrir ListRoutingIntentResult +// ListRouteMapsResultPage contains a page of RouteMap values. +type ListRouteMapsResultPage struct { + fn func(context.Context, ListRouteMapsResult) (ListRouteMapsResult, error) + lrmr ListRouteMapsResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ListRoutingIntentResultPage) NextWithContext(ctx context.Context) (err error) { +func (page *ListRouteMapsResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListRoutingIntentResultPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListRouteMapsResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -24815,11 +28324,11 @@ func (page *ListRoutingIntentResultPage) NextWithContext(ctx context.Context) (e }() } for { - next, err := page.fn(ctx, page.lrir) + next, err := page.fn(ctx, page.lrmr) if err != nil { return err } - page.lrir = next + page.lrmr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -24830,63 +28339,57 @@ func (page *ListRoutingIntentResultPage) NextWithContext(ctx context.Context) (e // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *ListRoutingIntentResultPage) Next() error { +func (page *ListRouteMapsResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ListRoutingIntentResultPage) NotDone() bool { - return !page.lrir.IsEmpty() +func (page ListRouteMapsResultPage) NotDone() bool { + return !page.lrmr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page ListRoutingIntentResultPage) Response() ListRoutingIntentResult { - return page.lrir +func (page ListRouteMapsResultPage) Response() ListRouteMapsResult { + return page.lrmr } // Values returns the slice of values for the current page or nil if there are no values. -func (page ListRoutingIntentResultPage) Values() []RoutingIntent { - if page.lrir.IsEmpty() { +func (page ListRouteMapsResultPage) Values() []RouteMap { + if page.lrmr.IsEmpty() { return nil } - return *page.lrir.Value + return *page.lrmr.Value } -// Creates a new instance of the ListRoutingIntentResultPage type. -func NewListRoutingIntentResultPage(cur ListRoutingIntentResult, getNextPage func(context.Context, ListRoutingIntentResult) (ListRoutingIntentResult, error)) ListRoutingIntentResultPage { - return ListRoutingIntentResultPage{ +// Creates a new instance of the ListRouteMapsResultPage type. +func NewListRouteMapsResultPage(cur ListRouteMapsResult, getNextPage func(context.Context, ListRouteMapsResult) (ListRouteMapsResult, error)) ListRouteMapsResultPage { + return ListRouteMapsResultPage{ fn: getNextPage, - lrir: cur, + lrmr: cur, } } -// ListString ... -type ListString struct { - autorest.Response `json:"-"` - Value *[]string `json:"value,omitempty"` -} - -// ListVirtualHubBgpConnectionResults virtualHubBgpConnections list. -type ListVirtualHubBgpConnectionResults struct { +// ListRoutingIntentResult list of the routing intent result and a URL nextLink to get the next set of +// results. +type ListRoutingIntentResult struct { autorest.Response `json:"-"` - // Value - The list of VirtualHubBgpConnections. - Value *[]BgpConnection `json:"value,omitempty"` - // NextLink - URL to get the next set of results. + // Value - List of RoutingIntent resource. + Value *[]RoutingIntent `json:"value,omitempty"` + // NextLink - URL to get the next set of operation list results if there are any. NextLink *string `json:"nextLink,omitempty"` } -// ListVirtualHubBgpConnectionResultsIterator provides access to a complete listing of BgpConnection -// values. -type ListVirtualHubBgpConnectionResultsIterator struct { +// ListRoutingIntentResultIterator provides access to a complete listing of RoutingIntent values. +type ListRoutingIntentResultIterator struct { i int - page ListVirtualHubBgpConnectionResultsPage + page ListRoutingIntentResultPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ListVirtualHubBgpConnectionResultsIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *ListRoutingIntentResultIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListRoutingIntentResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -24911,67 +28414,67 @@ func (iter *ListVirtualHubBgpConnectionResultsIterator) NextWithContext(ctx cont // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *ListVirtualHubBgpConnectionResultsIterator) Next() error { +func (iter *ListRoutingIntentResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ListVirtualHubBgpConnectionResultsIterator) NotDone() bool { +func (iter ListRoutingIntentResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter ListVirtualHubBgpConnectionResultsIterator) Response() ListVirtualHubBgpConnectionResults { +func (iter ListRoutingIntentResultIterator) Response() ListRoutingIntentResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter ListVirtualHubBgpConnectionResultsIterator) Value() BgpConnection { +func (iter ListRoutingIntentResultIterator) Value() RoutingIntent { if !iter.page.NotDone() { - return BgpConnection{} + return RoutingIntent{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the ListVirtualHubBgpConnectionResultsIterator type. -func NewListVirtualHubBgpConnectionResultsIterator(page ListVirtualHubBgpConnectionResultsPage) ListVirtualHubBgpConnectionResultsIterator { - return ListVirtualHubBgpConnectionResultsIterator{page: page} +// Creates a new instance of the ListRoutingIntentResultIterator type. +func NewListRoutingIntentResultIterator(page ListRoutingIntentResultPage) ListRoutingIntentResultIterator { + return ListRoutingIntentResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (lvhbcr ListVirtualHubBgpConnectionResults) IsEmpty() bool { - return lvhbcr.Value == nil || len(*lvhbcr.Value) == 0 +func (lrir ListRoutingIntentResult) IsEmpty() bool { + return lrir.Value == nil || len(*lrir.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (lvhbcr ListVirtualHubBgpConnectionResults) hasNextLink() bool { - return lvhbcr.NextLink != nil && len(*lvhbcr.NextLink) != 0 +func (lrir ListRoutingIntentResult) hasNextLink() bool { + return lrir.NextLink != nil && len(*lrir.NextLink) != 0 } -// listVirtualHubBgpConnectionResultsPreparer prepares a request to retrieve the next set of results. +// listRoutingIntentResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lvhbcr ListVirtualHubBgpConnectionResults) listVirtualHubBgpConnectionResultsPreparer(ctx context.Context) (*http.Request, error) { - if !lvhbcr.hasNextLink() { +func (lrir ListRoutingIntentResult) listRoutingIntentResultPreparer(ctx context.Context) (*http.Request, error) { + if !lrir.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lvhbcr.NextLink))) + autorest.WithBaseURL(to.String(lrir.NextLink))) } -// ListVirtualHubBgpConnectionResultsPage contains a page of BgpConnection values. -type ListVirtualHubBgpConnectionResultsPage struct { - fn func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error) - lvhbcr ListVirtualHubBgpConnectionResults +// ListRoutingIntentResultPage contains a page of RoutingIntent values. +type ListRoutingIntentResultPage struct { + fn func(context.Context, ListRoutingIntentResult) (ListRoutingIntentResult, error) + lrir ListRoutingIntentResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ListVirtualHubBgpConnectionResultsPage) NextWithContext(ctx context.Context) (err error) { +func (page *ListRoutingIntentResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListRoutingIntentResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -24981,11 +28484,11 @@ func (page *ListVirtualHubBgpConnectionResultsPage) NextWithContext(ctx context. }() } for { - next, err := page.fn(ctx, page.lvhbcr) + next, err := page.fn(ctx, page.lrir) if err != nil { return err } - page.lvhbcr = next + page.lrir = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -24996,57 +28499,63 @@ func (page *ListVirtualHubBgpConnectionResultsPage) NextWithContext(ctx context. // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *ListVirtualHubBgpConnectionResultsPage) Next() error { +func (page *ListRoutingIntentResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ListVirtualHubBgpConnectionResultsPage) NotDone() bool { - return !page.lvhbcr.IsEmpty() +func (page ListRoutingIntentResultPage) NotDone() bool { + return !page.lrir.IsEmpty() } // Response returns the raw server response from the last page request. -func (page ListVirtualHubBgpConnectionResultsPage) Response() ListVirtualHubBgpConnectionResults { - return page.lvhbcr +func (page ListRoutingIntentResultPage) Response() ListRoutingIntentResult { + return page.lrir } // Values returns the slice of values for the current page or nil if there are no values. -func (page ListVirtualHubBgpConnectionResultsPage) Values() []BgpConnection { - if page.lvhbcr.IsEmpty() { +func (page ListRoutingIntentResultPage) Values() []RoutingIntent { + if page.lrir.IsEmpty() { return nil } - return *page.lvhbcr.Value + return *page.lrir.Value } -// Creates a new instance of the ListVirtualHubBgpConnectionResultsPage type. -func NewListVirtualHubBgpConnectionResultsPage(cur ListVirtualHubBgpConnectionResults, getNextPage func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error)) ListVirtualHubBgpConnectionResultsPage { - return ListVirtualHubBgpConnectionResultsPage{ - fn: getNextPage, - lvhbcr: cur, +// Creates a new instance of the ListRoutingIntentResultPage type. +func NewListRoutingIntentResultPage(cur ListRoutingIntentResult, getNextPage func(context.Context, ListRoutingIntentResult) (ListRoutingIntentResult, error)) ListRoutingIntentResultPage { + return ListRoutingIntentResultPage{ + fn: getNextPage, + lrir: cur, } } -// ListVirtualHubIPConfigurationResults virtualHubIpConfigurations list. -type ListVirtualHubIPConfigurationResults struct { +// ListString ... +type ListString struct { autorest.Response `json:"-"` - // Value - The list of VirtualHubIpConfigurations. - Value *[]HubIPConfiguration `json:"value,omitempty"` + Value *[]string `json:"value,omitempty"` +} + +// ListVirtualHubBgpConnectionResults virtualHubBgpConnections list. +type ListVirtualHubBgpConnectionResults struct { + autorest.Response `json:"-"` + // Value - The list of VirtualHubBgpConnections. + Value *[]BgpConnection `json:"value,omitempty"` // NextLink - URL to get the next set of results. NextLink *string `json:"nextLink,omitempty"` } -// ListVirtualHubIPConfigurationResultsIterator provides access to a complete listing of HubIPConfiguration +// ListVirtualHubBgpConnectionResultsIterator provides access to a complete listing of BgpConnection // values. -type ListVirtualHubIPConfigurationResultsIterator struct { +type ListVirtualHubBgpConnectionResultsIterator struct { i int - page ListVirtualHubIPConfigurationResultsPage + page ListVirtualHubBgpConnectionResultsPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ListVirtualHubIPConfigurationResultsIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *ListVirtualHubBgpConnectionResultsIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -25071,67 +28580,67 @@ func (iter *ListVirtualHubIPConfigurationResultsIterator) NextWithContext(ctx co // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *ListVirtualHubIPConfigurationResultsIterator) Next() error { +func (iter *ListVirtualHubBgpConnectionResultsIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ListVirtualHubIPConfigurationResultsIterator) NotDone() bool { +func (iter ListVirtualHubBgpConnectionResultsIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter ListVirtualHubIPConfigurationResultsIterator) Response() ListVirtualHubIPConfigurationResults { +func (iter ListVirtualHubBgpConnectionResultsIterator) Response() ListVirtualHubBgpConnectionResults { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter ListVirtualHubIPConfigurationResultsIterator) Value() HubIPConfiguration { +func (iter ListVirtualHubBgpConnectionResultsIterator) Value() BgpConnection { if !iter.page.NotDone() { - return HubIPConfiguration{} + return BgpConnection{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the ListVirtualHubIPConfigurationResultsIterator type. -func NewListVirtualHubIPConfigurationResultsIterator(page ListVirtualHubIPConfigurationResultsPage) ListVirtualHubIPConfigurationResultsIterator { - return ListVirtualHubIPConfigurationResultsIterator{page: page} +// Creates a new instance of the ListVirtualHubBgpConnectionResultsIterator type. +func NewListVirtualHubBgpConnectionResultsIterator(page ListVirtualHubBgpConnectionResultsPage) ListVirtualHubBgpConnectionResultsIterator { + return ListVirtualHubBgpConnectionResultsIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (lvhicr ListVirtualHubIPConfigurationResults) IsEmpty() bool { - return lvhicr.Value == nil || len(*lvhicr.Value) == 0 +func (lvhbcr ListVirtualHubBgpConnectionResults) IsEmpty() bool { + return lvhbcr.Value == nil || len(*lvhbcr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (lvhicr ListVirtualHubIPConfigurationResults) hasNextLink() bool { - return lvhicr.NextLink != nil && len(*lvhicr.NextLink) != 0 +func (lvhbcr ListVirtualHubBgpConnectionResults) hasNextLink() bool { + return lvhbcr.NextLink != nil && len(*lvhbcr.NextLink) != 0 } -// listVirtualHubIPConfigurationResultsPreparer prepares a request to retrieve the next set of results. +// listVirtualHubBgpConnectionResultsPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lvhicr ListVirtualHubIPConfigurationResults) listVirtualHubIPConfigurationResultsPreparer(ctx context.Context) (*http.Request, error) { - if !lvhicr.hasNextLink() { +func (lvhbcr ListVirtualHubBgpConnectionResults) listVirtualHubBgpConnectionResultsPreparer(ctx context.Context) (*http.Request, error) { + if !lvhbcr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lvhicr.NextLink))) + autorest.WithBaseURL(to.String(lvhbcr.NextLink))) } -// ListVirtualHubIPConfigurationResultsPage contains a page of HubIPConfiguration values. -type ListVirtualHubIPConfigurationResultsPage struct { - fn func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error) - lvhicr ListVirtualHubIPConfigurationResults +// ListVirtualHubBgpConnectionResultsPage contains a page of BgpConnection values. +type ListVirtualHubBgpConnectionResultsPage struct { + fn func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error) + lvhbcr ListVirtualHubBgpConnectionResults } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ListVirtualHubIPConfigurationResultsPage) NextWithContext(ctx context.Context) (err error) { +func (page *ListVirtualHubBgpConnectionResultsPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -25141,11 +28650,11 @@ func (page *ListVirtualHubIPConfigurationResultsPage) NextWithContext(ctx contex }() } for { - next, err := page.fn(ctx, page.lvhicr) + next, err := page.fn(ctx, page.lvhbcr) if err != nil { return err } - page.lvhicr = next + page.lvhbcr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -25156,58 +28665,218 @@ func (page *ListVirtualHubIPConfigurationResultsPage) NextWithContext(ctx contex // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *ListVirtualHubIPConfigurationResultsPage) Next() error { +func (page *ListVirtualHubBgpConnectionResultsPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ListVirtualHubIPConfigurationResultsPage) NotDone() bool { - return !page.lvhicr.IsEmpty() +func (page ListVirtualHubBgpConnectionResultsPage) NotDone() bool { + return !page.lvhbcr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page ListVirtualHubIPConfigurationResultsPage) Response() ListVirtualHubIPConfigurationResults { - return page.lvhicr +func (page ListVirtualHubBgpConnectionResultsPage) Response() ListVirtualHubBgpConnectionResults { + return page.lvhbcr } // Values returns the slice of values for the current page or nil if there are no values. -func (page ListVirtualHubIPConfigurationResultsPage) Values() []HubIPConfiguration { - if page.lvhicr.IsEmpty() { +func (page ListVirtualHubBgpConnectionResultsPage) Values() []BgpConnection { + if page.lvhbcr.IsEmpty() { return nil } - return *page.lvhicr.Value + return *page.lvhbcr.Value } -// Creates a new instance of the ListVirtualHubIPConfigurationResultsPage type. -func NewListVirtualHubIPConfigurationResultsPage(cur ListVirtualHubIPConfigurationResults, getNextPage func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error)) ListVirtualHubIPConfigurationResultsPage { - return ListVirtualHubIPConfigurationResultsPage{ +// Creates a new instance of the ListVirtualHubBgpConnectionResultsPage type. +func NewListVirtualHubBgpConnectionResultsPage(cur ListVirtualHubBgpConnectionResults, getNextPage func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error)) ListVirtualHubBgpConnectionResultsPage { + return ListVirtualHubBgpConnectionResultsPage{ fn: getNextPage, - lvhicr: cur, + lvhbcr: cur, } } -// ListVirtualHubRouteTableV2sResult list of VirtualHubRouteTableV2s and a URL nextLink to get the next set -// of results. -type ListVirtualHubRouteTableV2sResult struct { +// ListVirtualHubIPConfigurationResults virtualHubIpConfigurations list. +type ListVirtualHubIPConfigurationResults struct { autorest.Response `json:"-"` - // Value - List of VirtualHubRouteTableV2s. - Value *[]VirtualHubRouteTableV2 `json:"value,omitempty"` - // NextLink - URL to get the next set of operation list results if there are any. + // Value - The list of VirtualHubIpConfigurations. + Value *[]HubIPConfiguration `json:"value,omitempty"` + // NextLink - URL to get the next set of results. NextLink *string `json:"nextLink,omitempty"` } -// ListVirtualHubRouteTableV2sResultIterator provides access to a complete listing of -// VirtualHubRouteTableV2 values. -type ListVirtualHubRouteTableV2sResultIterator struct { +// ListVirtualHubIPConfigurationResultsIterator provides access to a complete listing of HubIPConfiguration +// values. +type ListVirtualHubIPConfigurationResultsIterator struct { i int - page ListVirtualHubRouteTableV2sResultPage + page ListVirtualHubIPConfigurationResultsPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ListVirtualHubRouteTableV2sResultIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *ListVirtualHubIPConfigurationResultsIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ListVirtualHubIPConfigurationResultsIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ListVirtualHubIPConfigurationResultsIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ListVirtualHubIPConfigurationResultsIterator) Response() ListVirtualHubIPConfigurationResults { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ListVirtualHubIPConfigurationResultsIterator) Value() HubIPConfiguration { + if !iter.page.NotDone() { + return HubIPConfiguration{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ListVirtualHubIPConfigurationResultsIterator type. +func NewListVirtualHubIPConfigurationResultsIterator(page ListVirtualHubIPConfigurationResultsPage) ListVirtualHubIPConfigurationResultsIterator { + return ListVirtualHubIPConfigurationResultsIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (lvhicr ListVirtualHubIPConfigurationResults) IsEmpty() bool { + return lvhicr.Value == nil || len(*lvhicr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (lvhicr ListVirtualHubIPConfigurationResults) hasNextLink() bool { + return lvhicr.NextLink != nil && len(*lvhicr.NextLink) != 0 +} + +// listVirtualHubIPConfigurationResultsPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (lvhicr ListVirtualHubIPConfigurationResults) listVirtualHubIPConfigurationResultsPreparer(ctx context.Context) (*http.Request, error) { + if !lvhicr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(lvhicr.NextLink))) +} + +// ListVirtualHubIPConfigurationResultsPage contains a page of HubIPConfiguration values. +type ListVirtualHubIPConfigurationResultsPage struct { + fn func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error) + lvhicr ListVirtualHubIPConfigurationResults +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ListVirtualHubIPConfigurationResultsPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.lvhicr) + if err != nil { + return err + } + page.lvhicr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ListVirtualHubIPConfigurationResultsPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ListVirtualHubIPConfigurationResultsPage) NotDone() bool { + return !page.lvhicr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ListVirtualHubIPConfigurationResultsPage) Response() ListVirtualHubIPConfigurationResults { + return page.lvhicr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ListVirtualHubIPConfigurationResultsPage) Values() []HubIPConfiguration { + if page.lvhicr.IsEmpty() { + return nil + } + return *page.lvhicr.Value +} + +// Creates a new instance of the ListVirtualHubIPConfigurationResultsPage type. +func NewListVirtualHubIPConfigurationResultsPage(cur ListVirtualHubIPConfigurationResults, getNextPage func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error)) ListVirtualHubIPConfigurationResultsPage { + return ListVirtualHubIPConfigurationResultsPage{ + fn: getNextPage, + lvhicr: cur, + } +} + +// ListVirtualHubRouteTableV2sResult list of VirtualHubRouteTableV2s and a URL nextLink to get the next set +// of results. +type ListVirtualHubRouteTableV2sResult struct { + autorest.Response `json:"-"` + // Value - List of VirtualHubRouteTableV2s. + Value *[]VirtualHubRouteTableV2 `json:"value,omitempty"` + // NextLink - URL to get the next set of operation list results if there are any. + NextLink *string `json:"nextLink,omitempty"` +} + +// ListVirtualHubRouteTableV2sResultIterator provides access to a complete listing of +// VirtualHubRouteTableV2 values. +type ListVirtualHubRouteTableV2sResultIterator struct { + i int + page ListVirtualHubRouteTableV2sResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ListVirtualHubRouteTableV2sResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -28121,185 +31790,914 @@ func (lborlr LoadBalancerOutboundRuleListResult) MarshalJSON() ([]byte, error) { return json.Marshal(objectMap) } -// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values. -type LoadBalancerOutboundRuleListResultIterator struct { - i int - page LoadBalancerOutboundRuleListResultPage +// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values. +type LoadBalancerOutboundRuleListResultIterator struct { + i int + page LoadBalancerOutboundRuleListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule { + if !iter.page.NotDone() { + return OutboundRule{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type. +func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator { + return LoadBalancerOutboundRuleListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool { + return lborlr.Value == nil || len(*lborlr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (lborlr LoadBalancerOutboundRuleListResult) hasNextLink() bool { + return lborlr.NextLink != nil && len(*lborlr.NextLink) != 0 +} + +// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) { + if !lborlr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(lborlr.NextLink))) +} + +// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values. +type LoadBalancerOutboundRuleListResultPage struct { + fn func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error) + lborlr LoadBalancerOutboundRuleListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.lborlr) + if err != nil { + return err + } + page.lborlr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *LoadBalancerOutboundRuleListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool { + return !page.lborlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult { + return page.lborlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule { + if page.lborlr.IsEmpty() { + return nil + } + return *page.lborlr.Value +} + +// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type. +func NewLoadBalancerOutboundRuleListResultPage(cur LoadBalancerOutboundRuleListResult, getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage { + return LoadBalancerOutboundRuleListResultPage{ + fn: getNextPage, + lborlr: cur, + } +} + +// LoadBalancerProbeListResult response for ListProbe API service call. +type LoadBalancerProbeListResult struct { + autorest.Response `json:"-"` + // Value - A list of probes in a load balancer. + Value *[]Probe `json:"value,omitempty"` + // NextLink - READ-ONLY; The URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// MarshalJSON is the custom marshaler for LoadBalancerProbeListResult. +func (lbplr LoadBalancerProbeListResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lbplr.Value != nil { + objectMap["value"] = lbplr.Value + } + return json.Marshal(objectMap) +} + +// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values. +type LoadBalancerProbeListResultIterator struct { + i int + page LoadBalancerProbeListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *LoadBalancerProbeListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter LoadBalancerProbeListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter LoadBalancerProbeListResultIterator) Value() Probe { + if !iter.page.NotDone() { + return Probe{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the LoadBalancerProbeListResultIterator type. +func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator { + return LoadBalancerProbeListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (lbplr LoadBalancerProbeListResult) IsEmpty() bool { + return lbplr.Value == nil || len(*lbplr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (lbplr LoadBalancerProbeListResult) hasNextLink() bool { + return lbplr.NextLink != nil && len(*lbplr.NextLink) != 0 +} + +// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) { + if !lbplr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(lbplr.NextLink))) +} + +// LoadBalancerProbeListResultPage contains a page of Probe values. +type LoadBalancerProbeListResultPage struct { + fn func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error) + lbplr LoadBalancerProbeListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.lbplr) + if err != nil { + return err + } + page.lbplr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *LoadBalancerProbeListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page LoadBalancerProbeListResultPage) NotDone() bool { + return !page.lbplr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult { + return page.lbplr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page LoadBalancerProbeListResultPage) Values() []Probe { + if page.lbplr.IsEmpty() { + return nil + } + return *page.lbplr.Value +} + +// Creates a new instance of the LoadBalancerProbeListResultPage type. +func NewLoadBalancerProbeListResultPage(cur LoadBalancerProbeListResult, getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage { + return LoadBalancerProbeListResultPage{ + fn: getNextPage, + lbplr: cur, + } +} + +// LoadBalancerPropertiesFormat properties of the load balancer. +type LoadBalancerPropertiesFormat struct { + // FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer. + FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` + // BackendAddressPools - Collection of backend address pools used by a load balancer. + BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"` + // LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning. + LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"` + // Probes - Collection of probe objects used in the load balancer. + Probes *[]Probe `json:"probes,omitempty"` + // InboundNatRules - Collection of inbound NAT Rules used by a load balancer. Defining inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an Inbound NAT pool. They have to reference individual inbound NAT rules. + InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"` + // InboundNatPools - Defines an external port range for inbound NAT to a single backend port on NICs associated with a load balancer. Inbound NAT rules are created automatically for each NIC associated with the Load Balancer using an external port from this range. Defining an Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound NAT rules. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an inbound NAT pool. They have to reference individual inbound NAT rules. + InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"` + // OutboundRules - The outbound rules. + OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"` + // ResourceGUID - READ-ONLY; The resource GUID property of the load balancer resource. + ResourceGUID *string `json:"resourceGuid,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the load balancer resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for LoadBalancerPropertiesFormat. +func (lbpf LoadBalancerPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lbpf.FrontendIPConfigurations != nil { + objectMap["frontendIPConfigurations"] = lbpf.FrontendIPConfigurations + } + if lbpf.BackendAddressPools != nil { + objectMap["backendAddressPools"] = lbpf.BackendAddressPools + } + if lbpf.LoadBalancingRules != nil { + objectMap["loadBalancingRules"] = lbpf.LoadBalancingRules + } + if lbpf.Probes != nil { + objectMap["probes"] = lbpf.Probes + } + if lbpf.InboundNatRules != nil { + objectMap["inboundNatRules"] = lbpf.InboundNatRules + } + if lbpf.InboundNatPools != nil { + objectMap["inboundNatPools"] = lbpf.InboundNatPools + } + if lbpf.OutboundRules != nil { + objectMap["outboundRules"] = lbpf.OutboundRules + } + return json.Marshal(objectMap) +} + +// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type LoadBalancersCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LoadBalancersClient) (LoadBalancer, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LoadBalancersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LoadBalancersCreateOrUpdateFuture.Result. +func (future *LoadBalancersCreateOrUpdateFuture) result(client LoadBalancersClient) (lb LoadBalancer, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + lb.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent { + lb, err = client.CreateOrUpdateResponder(lb.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request") + } + } + return +} + +// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type LoadBalancersDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LoadBalancersClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LoadBalancersDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LoadBalancersDeleteFuture.Result. +func (future *LoadBalancersDeleteFuture) result(client LoadBalancersClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture") + return + } + ar.Response = future.Response() + return +} + +// LoadBalancerSku SKU of a load balancer. +type LoadBalancerSku struct { + // Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard', 'LoadBalancerSkuNameGateway' + Name LoadBalancerSkuName `json:"name,omitempty"` + // Tier - Tier of a load balancer SKU. Possible values include: 'Regional', 'Global' + Tier LoadBalancerSkuTier `json:"tier,omitempty"` +} + +// LoadBalancersListInboundNatRulePortMappingsFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type LoadBalancersListInboundNatRulePortMappingsFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LoadBalancersClient) (BackendAddressInboundNatRulePortMappings, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LoadBalancersListInboundNatRulePortMappingsFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LoadBalancersListInboundNatRulePortMappingsFuture.Result. +func (future *LoadBalancersListInboundNatRulePortMappingsFuture) result(client LoadBalancersClient) (bainrpm BackendAddressInboundNatRulePortMappings, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersListInboundNatRulePortMappingsFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + bainrpm.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersListInboundNatRulePortMappingsFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if bainrpm.Response.Response, err = future.GetResult(sender); err == nil && bainrpm.Response.Response.StatusCode != http.StatusNoContent { + bainrpm, err = client.ListInboundNatRulePortMappingsResponder(bainrpm.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersListInboundNatRulePortMappingsFuture", "Result", bainrpm.Response.Response, "Failure responding to request") + } + } + return +} + +// LoadBalancersSwapPublicIPAddressesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type LoadBalancersSwapPublicIPAddressesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(LoadBalancersClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *LoadBalancersSwapPublicIPAddressesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for LoadBalancersSwapPublicIPAddressesFuture.Result. +func (future *LoadBalancersSwapPublicIPAddressesFuture) result(client LoadBalancersClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.LoadBalancersSwapPublicIPAddressesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersSwapPublicIPAddressesFuture") + return + } + ar.Response = future.Response() + return +} + +// LoadBalancerVipSwapRequest the request for a VIP swap. +type LoadBalancerVipSwapRequest struct { + // FrontendIPConfigurations - A list of frontend IP configuration resources that should swap VIPs. + FrontendIPConfigurations *[]LoadBalancerVipSwapRequestFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` +} + +// LoadBalancerVipSwapRequestFrontendIPConfiguration VIP swap request's frontend IP configuration object. +type LoadBalancerVipSwapRequestFrontendIPConfiguration struct { + // ID - The ID of frontend IP configuration resource. + ID *string `json:"id,omitempty"` + // LoadBalancerVipSwapRequestFrontendIPConfigurationProperties - The properties of VIP swap request's frontend IP configuration object. + *LoadBalancerVipSwapRequestFrontendIPConfigurationProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for LoadBalancerVipSwapRequestFrontendIPConfiguration. +func (lbvsrfic LoadBalancerVipSwapRequestFrontendIPConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lbvsrfic.ID != nil { + objectMap["id"] = lbvsrfic.ID + } + if lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties != nil { + objectMap["properties"] = lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for LoadBalancerVipSwapRequestFrontendIPConfiguration struct. +func (lbvsrfic *LoadBalancerVipSwapRequestFrontendIPConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + lbvsrfic.ID = &ID + } + case "properties": + if v != nil { + var loadBalancerVipSwapRequestFrontendIPConfigurationProperties LoadBalancerVipSwapRequestFrontendIPConfigurationProperties + err = json.Unmarshal(*v, &loadBalancerVipSwapRequestFrontendIPConfigurationProperties) + if err != nil { + return err + } + lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties = &loadBalancerVipSwapRequestFrontendIPConfigurationProperties + } + } + } + + return nil +} + +// LoadBalancerVipSwapRequestFrontendIPConfigurationProperties the properties of VIP swap request's +// frontend IP configuration object. +type LoadBalancerVipSwapRequestFrontendIPConfigurationProperties struct { + // PublicIPAddress - A reference to public IP address resource. + PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` +} + +// LoadBalancingRule a load balancing rule for a load balancer. +type LoadBalancingRule struct { + autorest.Response `json:"-"` + // LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule. + *LoadBalancingRulePropertiesFormat `json:"properties,omitempty"` + // Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Type of the resource. + Type *string `json:"type,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for LoadBalancingRule. +func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lbr.LoadBalancingRulePropertiesFormat != nil { + objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat + } + if lbr.Name != nil { + objectMap["name"] = lbr.Name + } + if lbr.ID != nil { + objectMap["id"] = lbr.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct. +func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat + err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat) + if err != nil { + return err + } + lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + lbr.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + lbr.Etag = &etag + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + lbr.Type = &typeVar + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + lbr.ID = &ID + } + } + } + + return nil +} + +// LoadBalancingRulePropertiesFormat properties of the load balancer. +type LoadBalancingRulePropertiesFormat struct { + // FrontendIPConfiguration - A reference to frontend IP addresses. + FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"` + // BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs. + BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"` + // BackendAddressPools - An array of references to pool of DIPs. + BackendAddressPools *[]SubResource `json:"backendAddressPools,omitempty"` + // Probe - The reference to the load balancer probe used by the load balancing rule. + Probe *SubResource `json:"probe,omitempty"` + // Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll' + Protocol TransportProtocol `json:"protocol,omitempty"` + // LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol' + LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"` + // FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values are between 0 and 65534. Note that value 0 enables "Any Port". + FrontendPort *int32 `json:"frontendPort,omitempty"` + // BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port". + BackendPort *int32 `json:"backendPort,omitempty"` + // IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP. + IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` + // EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint. + EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"` + // EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP. + EnableTCPReset *bool `json:"enableTcpReset,omitempty"` + // DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule. + DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the load balancing rule resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for LoadBalancingRulePropertiesFormat. +func (lbrpf LoadBalancingRulePropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lbrpf.FrontendIPConfiguration != nil { + objectMap["frontendIPConfiguration"] = lbrpf.FrontendIPConfiguration + } + if lbrpf.BackendAddressPool != nil { + objectMap["backendAddressPool"] = lbrpf.BackendAddressPool + } + if lbrpf.BackendAddressPools != nil { + objectMap["backendAddressPools"] = lbrpf.BackendAddressPools + } + if lbrpf.Probe != nil { + objectMap["probe"] = lbrpf.Probe + } + if lbrpf.Protocol != "" { + objectMap["protocol"] = lbrpf.Protocol + } + if lbrpf.LoadDistribution != "" { + objectMap["loadDistribution"] = lbrpf.LoadDistribution + } + if lbrpf.FrontendPort != nil { + objectMap["frontendPort"] = lbrpf.FrontendPort + } + if lbrpf.BackendPort != nil { + objectMap["backendPort"] = lbrpf.BackendPort + } + if lbrpf.IdleTimeoutInMinutes != nil { + objectMap["idleTimeoutInMinutes"] = lbrpf.IdleTimeoutInMinutes + } + if lbrpf.EnableFloatingIP != nil { + objectMap["enableFloatingIP"] = lbrpf.EnableFloatingIP + } + if lbrpf.EnableTCPReset != nil { + objectMap["enableTcpReset"] = lbrpf.EnableTCPReset + } + if lbrpf.DisableOutboundSnat != nil { + objectMap["disableOutboundSnat"] = lbrpf.DisableOutboundSnat + } + return json.Marshal(objectMap) +} + +// LocalNetworkGateway a common class for general resource information. +type LocalNetworkGateway struct { + autorest.Response `json:"-"` + // LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway. + *LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` } -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() +// MarshalJSON is the custom marshaler for LocalNetworkGateway. +func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if lng.LocalNetworkGatewayPropertiesFormat != nil { + objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil + if lng.ID != nil { + objectMap["id"] = lng.ID } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err + if lng.Location != nil { + objectMap["location"] = lng.Location } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule { - if !iter.page.NotDone() { - return OutboundRule{} + if lng.Tags != nil { + objectMap["tags"] = lng.Tags } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type. -func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator { - return LoadBalancerOutboundRuleListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool { - return lborlr.Value == nil || len(*lborlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (lborlr LoadBalancerOutboundRuleListResult) hasNextLink() bool { - return lborlr.NextLink != nil && len(*lborlr.NextLink) != 0 + return json.Marshal(objectMap) } -// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) { - if !lborlr.hasNextLink() { - return nil, nil +// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct. +func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(lborlr.NextLink))) -} - -// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values. -type LoadBalancerOutboundRuleListResultPage struct { - fn func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error) - lborlr LoadBalancerOutboundRuleListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode + for k, v := range m { + switch k { + case "properties": + if v != nil { + var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat + err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat) + if err != nil { + return err + } + lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + lng.Etag = &etag + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + lng.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + lng.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + lng.Type = &typeVar + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + lng.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + lng.Tags = tags } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.lborlr) - if err != nil { - return err - } - page.lborlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break } } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *LoadBalancerOutboundRuleListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool { - return !page.lborlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult { - return page.lborlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule { - if page.lborlr.IsEmpty() { - return nil - } - return *page.lborlr.Value -} -// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type. -func NewLoadBalancerOutboundRuleListResultPage(cur LoadBalancerOutboundRuleListResult, getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage { - return LoadBalancerOutboundRuleListResultPage{ - fn: getNextPage, - lborlr: cur, - } + return nil } -// LoadBalancerProbeListResult response for ListProbe API service call. -type LoadBalancerProbeListResult struct { +// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call. +type LocalNetworkGatewayListResult struct { autorest.Response `json:"-"` - // Value - A list of probes in a load balancer. - Value *[]Probe `json:"value,omitempty"` + // Value - A list of local network gateways that exists in a resource group. + Value *[]LocalNetworkGateway `json:"value,omitempty"` // NextLink - READ-ONLY; The URL to get the next set of results. NextLink *string `json:"nextLink,omitempty"` } -// MarshalJSON is the custom marshaler for LoadBalancerProbeListResult. -func (lbplr LoadBalancerProbeListResult) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for LocalNetworkGatewayListResult. +func (lnglr LocalNetworkGatewayListResult) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lbplr.Value != nil { - objectMap["value"] = lbplr.Value + if lnglr.Value != nil { + objectMap["value"] = lnglr.Value } return json.Marshal(objectMap) } -// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values. -type LoadBalancerProbeListResultIterator struct { +// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway +// values. +type LocalNetworkGatewayListResultIterator struct { i int - page LoadBalancerProbeListResultPage + page LocalNetworkGatewayListResultPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -28324,67 +32722,67 @@ func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Con // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *LoadBalancerProbeListResultIterator) Next() error { +func (iter *LocalNetworkGatewayListResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter LoadBalancerProbeListResultIterator) NotDone() bool { +func (iter LocalNetworkGatewayListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult { +func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter LoadBalancerProbeListResultIterator) Value() Probe { +func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway { if !iter.page.NotDone() { - return Probe{} + return LocalNetworkGateway{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the LoadBalancerProbeListResultIterator type. -func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator { - return LoadBalancerProbeListResultIterator{page: page} +// Creates a new instance of the LocalNetworkGatewayListResultIterator type. +func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator { + return LocalNetworkGatewayListResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (lbplr LoadBalancerProbeListResult) IsEmpty() bool { - return lbplr.Value == nil || len(*lbplr.Value) == 0 +func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool { + return lnglr.Value == nil || len(*lnglr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (lbplr LoadBalancerProbeListResult) hasNextLink() bool { - return lbplr.NextLink != nil && len(*lbplr.NextLink) != 0 +func (lnglr LocalNetworkGatewayListResult) hasNextLink() bool { + return lnglr.NextLink != nil && len(*lnglr.NextLink) != 0 } -// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results. +// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) { - if !lbplr.hasNextLink() { +func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) { + if !lnglr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lbplr.NextLink))) + autorest.WithBaseURL(to.String(lnglr.NextLink))) } -// LoadBalancerProbeListResultPage contains a page of Probe values. -type LoadBalancerProbeListResultPage struct { - fn func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error) - lbplr LoadBalancerProbeListResult +// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values. +type LocalNetworkGatewayListResultPage struct { + fn func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error) + lnglr LocalNetworkGatewayListResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) { +func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -28394,11 +32792,11 @@ func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context }() } for { - next, err := page.fn(ctx, page.lbplr) + next, err := page.fn(ctx, page.lnglr) if err != nil { return err } - page.lbplr = next + page.lnglr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -28409,184 +32807,81 @@ func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *LoadBalancerProbeListResultPage) Next() error { +func (page *LocalNetworkGatewayListResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page LoadBalancerProbeListResultPage) NotDone() bool { - return !page.lbplr.IsEmpty() +func (page LocalNetworkGatewayListResultPage) NotDone() bool { + return !page.lnglr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult { - return page.lbplr +func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult { + return page.lnglr } // Values returns the slice of values for the current page or nil if there are no values. -func (page LoadBalancerProbeListResultPage) Values() []Probe { - if page.lbplr.IsEmpty() { +func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway { + if page.lnglr.IsEmpty() { return nil } - return *page.lbplr.Value + return *page.lnglr.Value } -// Creates a new instance of the LoadBalancerProbeListResultPage type. -func NewLoadBalancerProbeListResultPage(cur LoadBalancerProbeListResult, getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage { - return LoadBalancerProbeListResultPage{ +// Creates a new instance of the LocalNetworkGatewayListResultPage type. +func NewLocalNetworkGatewayListResultPage(cur LocalNetworkGatewayListResult, getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage { + return LocalNetworkGatewayListResultPage{ fn: getNextPage, - lbplr: cur, + lnglr: cur, } } -// LoadBalancerPropertiesFormat properties of the load balancer. -type LoadBalancerPropertiesFormat struct { - // FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer. - FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` - // BackendAddressPools - Collection of backend address pools used by a load balancer. - BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"` - // LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning. - LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"` - // Probes - Collection of probe objects used in the load balancer. - Probes *[]Probe `json:"probes,omitempty"` - // InboundNatRules - Collection of inbound NAT Rules used by a load balancer. Defining inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an Inbound NAT pool. They have to reference individual inbound NAT rules. - InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"` - // InboundNatPools - Defines an external port range for inbound NAT to a single backend port on NICs associated with a load balancer. Inbound NAT rules are created automatically for each NIC associated with the Load Balancer using an external port from this range. Defining an Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound NAT rules. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an inbound NAT pool. They have to reference individual inbound NAT rules. - InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"` - // OutboundRules - The outbound rules. - OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"` - // ResourceGUID - READ-ONLY; The resource GUID property of the load balancer resource. +// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties. +type LocalNetworkGatewayPropertiesFormat struct { + // LocalNetworkAddressSpace - Local network site address space. + LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"` + // GatewayIPAddress - IP address of local network gateway. + GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"` + // Fqdn - FQDN of local network gateway. + Fqdn *string `json:"fqdn,omitempty"` + // BgpSettings - Local network gateway's BGP speaker settings. + BgpSettings *BgpSettings `json:"bgpSettings,omitempty"` + // ResourceGUID - READ-ONLY; The resource GUID property of the local network gateway resource. ResourceGUID *string `json:"resourceGuid,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the load balancer resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + // ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for LoadBalancerPropertiesFormat. -func (lbpf LoadBalancerPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for LocalNetworkGatewayPropertiesFormat. +func (lngpf LocalNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lbpf.FrontendIPConfigurations != nil { - objectMap["frontendIPConfigurations"] = lbpf.FrontendIPConfigurations - } - if lbpf.BackendAddressPools != nil { - objectMap["backendAddressPools"] = lbpf.BackendAddressPools - } - if lbpf.LoadBalancingRules != nil { - objectMap["loadBalancingRules"] = lbpf.LoadBalancingRules - } - if lbpf.Probes != nil { - objectMap["probes"] = lbpf.Probes + if lngpf.LocalNetworkAddressSpace != nil { + objectMap["localNetworkAddressSpace"] = lngpf.LocalNetworkAddressSpace } - if lbpf.InboundNatRules != nil { - objectMap["inboundNatRules"] = lbpf.InboundNatRules + if lngpf.GatewayIPAddress != nil { + objectMap["gatewayIpAddress"] = lngpf.GatewayIPAddress } - if lbpf.InboundNatPools != nil { - objectMap["inboundNatPools"] = lbpf.InboundNatPools + if lngpf.Fqdn != nil { + objectMap["fqdn"] = lngpf.Fqdn } - if lbpf.OutboundRules != nil { - objectMap["outboundRules"] = lbpf.OutboundRules + if lngpf.BgpSettings != nil { + objectMap["bgpSettings"] = lngpf.BgpSettings } return json.Marshal(objectMap) } -// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a // long-running operation. -type LoadBalancersCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(LoadBalancersClient) (LoadBalancer, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LoadBalancersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for LoadBalancersCreateOrUpdateFuture.Result. -func (future *LoadBalancersCreateOrUpdateFuture) result(client LoadBalancersClient) (lb LoadBalancer, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - lb.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent { - lb, err = client.CreateOrUpdateResponder(lb.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request") - } - } - return -} - -// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type LoadBalancersDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(LoadBalancersClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LoadBalancersDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for LoadBalancersDeleteFuture.Result. -func (future *LoadBalancersDeleteFuture) result(client LoadBalancersClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// LoadBalancerSku SKU of a load balancer. -type LoadBalancerSku struct { - // Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard', 'LoadBalancerSkuNameGateway' - Name LoadBalancerSkuName `json:"name,omitempty"` - // Tier - Tier of a load balancer SKU. Possible values include: 'LoadBalancerSkuTierRegional', 'LoadBalancerSkuTierGlobal' - Tier LoadBalancerSkuTier `json:"tier,omitempty"` -} - -// LoadBalancersListInboundNatRulePortMappingsFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type LoadBalancersListInboundNatRulePortMappingsFuture struct { +type LocalNetworkGatewaysCreateOrUpdateFuture struct { azure.FutureAPI // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. - Result func(LoadBalancersClient) (BackendAddressInboundNatRulePortMappings, error) + Result func(LocalNetworkGatewaysClient) (LocalNetworkGateway, error) } // UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LoadBalancersListInboundNatRulePortMappingsFuture) UnmarshalJSON(body []byte) error { +func (future *LocalNetworkGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { var azFuture azure.Future if err := json.Unmarshal(body, &azFuture); err != nil { return err @@ -28596,40 +32891,40 @@ func (future *LoadBalancersListInboundNatRulePortMappingsFuture) UnmarshalJSON(b return nil } -// result is the default implementation for LoadBalancersListInboundNatRulePortMappingsFuture.Result. -func (future *LoadBalancersListInboundNatRulePortMappingsFuture) result(client LoadBalancersClient) (bainrpm BackendAddressInboundNatRulePortMappings, err error) { +// result is the default implementation for LocalNetworkGatewaysCreateOrUpdateFuture.Result. +func (future *LocalNetworkGatewaysCreateOrUpdateFuture) result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) { var done bool done, err = future.DoneWithContext(context.Background(), client) if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersListInboundNatRulePortMappingsFuture", "Result", future.Response(), "Polling failure") + err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - bainrpm.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LoadBalancersListInboundNatRulePortMappingsFuture") + lng.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture") return } sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if bainrpm.Response.Response, err = future.GetResult(sender); err == nil && bainrpm.Response.Response.StatusCode != http.StatusNoContent { - bainrpm, err = client.ListInboundNatRulePortMappingsResponder(bainrpm.Response.Response) + if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent { + lng, err = client.CreateOrUpdateResponder(lng.Response.Response) if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersListInboundNatRulePortMappingsFuture", "Result", bainrpm.Response.Response, "Failure responding to request") + err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request") } } return } -// LoadBalancersSwapPublicIPAddressesFuture an abstraction for monitoring and retrieving the results of a +// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a // long-running operation. -type LoadBalancersSwapPublicIPAddressesFuture struct { +type LocalNetworkGatewaysDeleteFuture struct { azure.FutureAPI // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. - Result func(LoadBalancersClient) (autorest.Response, error) + Result func(LocalNetworkGatewaysClient) (autorest.Response, error) } // UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LoadBalancersSwapPublicIPAddressesFuture) UnmarshalJSON(body []byte) error { +func (future *LocalNetworkGatewaysDeleteFuture) UnmarshalJSON(body []byte) error { var azFuture azure.Future if err := json.Unmarshal(body, &azFuture); err != nil { return err @@ -28639,121 +32934,148 @@ func (future *LoadBalancersSwapPublicIPAddressesFuture) UnmarshalJSON(body []byt return nil } -// result is the default implementation for LoadBalancersSwapPublicIPAddressesFuture.Result. -func (future *LoadBalancersSwapPublicIPAddressesFuture) result(client LoadBalancersClient) (ar autorest.Response, err error) { +// result is the default implementation for LocalNetworkGatewaysDeleteFuture.Result. +func (future *LocalNetworkGatewaysDeleteFuture) result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) { var done bool done, err = future.DoneWithContext(context.Background(), client) if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersSwapPublicIPAddressesFuture", "Result", future.Response(), "Polling failure") + err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LoadBalancersSwapPublicIPAddressesFuture") + err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture") return } ar.Response = future.Response() return } -// LoadBalancerVipSwapRequest the request for a VIP swap. -type LoadBalancerVipSwapRequest struct { - // FrontendIPConfigurations - A list of frontend IP configuration resources that should swap VIPs. - FrontendIPConfigurations *[]LoadBalancerVipSwapRequestFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` +// LogSpecification description of logging specification. +type LogSpecification struct { + // Name - The name of the specification. + Name *string `json:"name,omitempty"` + // DisplayName - The display name of the specification. + DisplayName *string `json:"displayName,omitempty"` + // BlobDuration - Duration of the blob. + BlobDuration *string `json:"blobDuration,omitempty"` } -// LoadBalancerVipSwapRequestFrontendIPConfiguration VIP swap request's frontend IP configuration object. -type LoadBalancerVipSwapRequestFrontendIPConfiguration struct { - // ID - The ID of frontend IP configuration resource. - ID *string `json:"id,omitempty"` - // LoadBalancerVipSwapRequestFrontendIPConfigurationProperties - The properties of VIP swap request's frontend IP configuration object. - *LoadBalancerVipSwapRequestFrontendIPConfigurationProperties `json:"properties,omitempty"` +// ManagedRuleGroupOverride defines a managed rule group override setting. +type ManagedRuleGroupOverride struct { + // RuleGroupName - The managed rule group to override. + RuleGroupName *string `json:"ruleGroupName,omitempty"` + // Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled. + Rules *[]ManagedRuleOverride `json:"rules,omitempty"` } -// MarshalJSON is the custom marshaler for LoadBalancerVipSwapRequestFrontendIPConfiguration. -func (lbvsrfic LoadBalancerVipSwapRequestFrontendIPConfiguration) MarshalJSON() ([]byte, error) { +// ManagedRuleOverride defines a managed rule group override setting. +type ManagedRuleOverride struct { + // RuleID - Identifier for the managed rule. + RuleID *string `json:"ruleId,omitempty"` + // State - The state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled', 'ManagedRuleEnabledStateEnabled' + State ManagedRuleEnabledState `json:"state,omitempty"` + // Action - Describes the override action to be applied when rule matches. Possible values include: 'ActionTypeAnomalyScoring', 'ActionTypeAllow', 'ActionTypeBlock', 'ActionTypeLog' + Action ActionType `json:"action,omitempty"` +} + +// ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check. +type ManagedRulesDefinition struct { + // Exclusions - The Exclusions that are applied on the policy. + Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"` + // ManagedRuleSets - The managed rule sets that are associated with the policy. + ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"` +} + +// ManagedRuleSet defines a managed rule set. +type ManagedRuleSet struct { + // RuleSetType - Defines the rule set type to use. + RuleSetType *string `json:"ruleSetType,omitempty"` + // RuleSetVersion - Defines the version of the rule set to use. + RuleSetVersion *string `json:"ruleSetVersion,omitempty"` + // RuleGroupOverrides - Defines the rule group overrides to apply to the rule set. + RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"` +} + +// ManagedServiceIdentity identity for the resource. +type ManagedServiceIdentity struct { + // PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity. + PrincipalID *string `json:"principalId,omitempty"` + // TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity. + TenantID *string `json:"tenantId,omitempty"` + // Type - The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' + Type ResourceIdentityType `json:"type,omitempty"` + // UserAssignedIdentities - The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"` +} + +// MarshalJSON is the custom marshaler for ManagedServiceIdentity. +func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lbvsrfic.ID != nil { - objectMap["id"] = lbvsrfic.ID + if msi.Type != "" { + objectMap["type"] = msi.Type } - if lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties != nil { - objectMap["properties"] = lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties + if msi.UserAssignedIdentities != nil { + objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for LoadBalancerVipSwapRequestFrontendIPConfiguration struct. -func (lbvsrfic *LoadBalancerVipSwapRequestFrontendIPConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - lbvsrfic.ID = &ID - } - case "properties": - if v != nil { - var loadBalancerVipSwapRequestFrontendIPConfigurationProperties LoadBalancerVipSwapRequestFrontendIPConfigurationProperties - err = json.Unmarshal(*v, &loadBalancerVipSwapRequestFrontendIPConfigurationProperties) - if err != nil { - return err - } - lbvsrfic.LoadBalancerVipSwapRequestFrontendIPConfigurationProperties = &loadBalancerVipSwapRequestFrontendIPConfigurationProperties - } - } - } - - return nil +// ManagedServiceIdentityUserAssignedIdentitiesValue ... +type ManagedServiceIdentityUserAssignedIdentitiesValue struct { + // PrincipalID - READ-ONLY; The principal id of user assigned identity. + PrincipalID *string `json:"principalId,omitempty"` + // ClientID - READ-ONLY; The client id of user assigned identity. + ClientID *string `json:"clientId,omitempty"` } -// LoadBalancerVipSwapRequestFrontendIPConfigurationProperties the properties of VIP swap request's -// frontend IP configuration object. -type LoadBalancerVipSwapRequestFrontendIPConfigurationProperties struct { - // PublicIPAddress - A reference to public IP address resource. - PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` +// MarshalJSON is the custom marshaler for ManagedServiceIdentityUserAssignedIdentitiesValue. +func (msiAiv ManagedServiceIdentityUserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) } -// LoadBalancingRule a load balancing rule for a load balancer. -type LoadBalancingRule struct { +// Manager the Managed Network resource +type Manager struct { autorest.Response `json:"-"` - // LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule. - *LoadBalancingRulePropertiesFormat `json:"properties,omitempty"` - // Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource. - Name *string `json:"name,omitempty"` + // ManagerProperties - The network manager properties + *ManagerProperties `json:"properties,omitempty"` // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. Etag *string `json:"etag,omitempty"` - // Type - READ-ONLY; Type of the resource. - Type *string `json:"type,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` // ID - Resource ID. ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Location - Resource location. + Location *string `json:"location,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` } -// MarshalJSON is the custom marshaler for LoadBalancingRule. -func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for Manager. +func (mVar Manager) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lbr.LoadBalancingRulePropertiesFormat != nil { - objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat + if mVar.ManagerProperties != nil { + objectMap["properties"] = mVar.ManagerProperties } - if lbr.Name != nil { - objectMap["name"] = lbr.Name + if mVar.ID != nil { + objectMap["id"] = mVar.ID } - if lbr.ID != nil { - objectMap["id"] = lbr.ID + if mVar.Location != nil { + objectMap["location"] = mVar.Location + } + if mVar.Tags != nil { + objectMap["tags"] = mVar.Tags } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct. -func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for Manager struct. +func (mVar *Manager) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -28763,30 +33085,48 @@ func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error { switch k { case "properties": if v != nil { - var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat - err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat) + var managerProperties ManagerProperties + err = json.Unmarshal(*v, &managerProperties) if err != nil { return err } - lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat + mVar.ManagerProperties = &managerProperties } - case "name": + case "etag": if v != nil { - var name string - err = json.Unmarshal(*v, &name) + var etag string + err = json.Unmarshal(*v, &etag) if err != nil { return err } - lbr.Name = &name + mVar.Etag = &etag } - case "etag": + case "systemData": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var systemData SystemData + err = json.Unmarshal(*v, &systemData) if err != nil { return err } - lbr.Etag = &etag + mVar.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + mVar.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mVar.Name = &name } case "type": if v != nil { @@ -28795,16 +33135,25 @@ func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error { if err != nil { return err } - lbr.Type = &typeVar + mVar.Type = &typeVar } - case "id": + case "location": if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) + var location string + err = json.Unmarshal(*v, &location) if err != nil { return err } - lbr.ID = &ID + mVar.Location = &location + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + mVar.Tags = tags } } } @@ -28812,117 +33161,105 @@ func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error { return nil } -// LoadBalancingRulePropertiesFormat properties of the load balancer. -type LoadBalancingRulePropertiesFormat struct { - // FrontendIPConfiguration - A reference to frontend IP addresses. - FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"` - // BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs. - BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"` - // BackendAddressPools - An array of references to pool of DIPs. - BackendAddressPools *[]SubResource `json:"backendAddressPools,omitempty"` - // Probe - The reference to the load balancer probe used by the load balancing rule. - Probe *SubResource `json:"probe,omitempty"` - // Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll' - Protocol TransportProtocol `json:"protocol,omitempty"` - // LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol' - LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"` - // FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values are between 0 and 65534. Note that value 0 enables "Any Port". - FrontendPort *int32 `json:"frontendPort,omitempty"` - // BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port". - BackendPort *int32 `json:"backendPort,omitempty"` - // IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP. - IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` - // EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint. - EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"` - // EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP. - EnableTCPReset *bool `json:"enableTcpReset,omitempty"` - // DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule. - DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the load balancing rule resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' - ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +// ManagerCommit network Manager Commit. +type ManagerCommit struct { + autorest.Response `json:"-"` + // CommitID - READ-ONLY; Commit Id. + CommitID *string `json:"commitId,omitempty"` + // TargetLocations - List of target locations. + TargetLocations *[]string `json:"targetLocations,omitempty"` + // ConfigurationIds - List of configuration ids. + ConfigurationIds *[]string `json:"configurationIds,omitempty"` + // CommitType - Commit Type. Possible values include: 'SecurityAdmin', 'Connectivity' + CommitType ConfigurationType `json:"commitType,omitempty"` } -// MarshalJSON is the custom marshaler for LoadBalancingRulePropertiesFormat. -func (lbrpf LoadBalancingRulePropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ManagerCommit. +func (mc ManagerCommit) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lbrpf.FrontendIPConfiguration != nil { - objectMap["frontendIPConfiguration"] = lbrpf.FrontendIPConfiguration - } - if lbrpf.BackendAddressPool != nil { - objectMap["backendAddressPool"] = lbrpf.BackendAddressPool - } - if lbrpf.BackendAddressPools != nil { - objectMap["backendAddressPools"] = lbrpf.BackendAddressPools - } - if lbrpf.Probe != nil { - objectMap["probe"] = lbrpf.Probe - } - if lbrpf.Protocol != "" { - objectMap["protocol"] = lbrpf.Protocol - } - if lbrpf.LoadDistribution != "" { - objectMap["loadDistribution"] = lbrpf.LoadDistribution + if mc.TargetLocations != nil { + objectMap["targetLocations"] = mc.TargetLocations } - if lbrpf.FrontendPort != nil { - objectMap["frontendPort"] = lbrpf.FrontendPort + if mc.ConfigurationIds != nil { + objectMap["configurationIds"] = mc.ConfigurationIds } - if lbrpf.BackendPort != nil { - objectMap["backendPort"] = lbrpf.BackendPort + if mc.CommitType != "" { + objectMap["commitType"] = mc.CommitType } - if lbrpf.IdleTimeoutInMinutes != nil { - objectMap["idleTimeoutInMinutes"] = lbrpf.IdleTimeoutInMinutes + return json.Marshal(objectMap) +} + +// ManagerCommitsPostFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type ManagerCommitsPostFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(ManagerCommitsClient) (ManagerCommit, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *ManagerCommitsPostFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err } - if lbrpf.EnableFloatingIP != nil { - objectMap["enableFloatingIP"] = lbrpf.EnableFloatingIP + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for ManagerCommitsPostFuture.Result. +func (future *ManagerCommitsPostFuture) result(client ManagerCommitsClient) (mc ManagerCommit, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerCommitsPostFuture", "Result", future.Response(), "Polling failure") + return } - if lbrpf.EnableTCPReset != nil { - objectMap["enableTcpReset"] = lbrpf.EnableTCPReset + if !done { + mc.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.ManagerCommitsPostFuture") + return } - if lbrpf.DisableOutboundSnat != nil { - objectMap["disableOutboundSnat"] = lbrpf.DisableOutboundSnat + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if mc.Response.Response, err = future.GetResult(sender); err == nil && mc.Response.Response.StatusCode != http.StatusNoContent { + mc, err = client.PostResponder(mc.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ManagerCommitsPostFuture", "Result", mc.Response.Response, "Failure responding to request") + } } - return json.Marshal(objectMap) + return } -// LocalNetworkGateway a common class for general resource information. -type LocalNetworkGateway struct { +// ManagerConnection the Network Manager Connection resource +type ManagerConnection struct { autorest.Response `json:"-"` - // LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway. - *LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"` - // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. - Etag *string `json:"etag,omitempty"` - // ID - Resource ID. + // ManagerConnectionProperties - The scope connection properties + *ManagerConnectionProperties `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. ID *string `json:"id,omitempty"` // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` - // Location - Resource location. - Location *string `json:"location,omitempty"` - // Tags - Resource tags. - Tags map[string]*string `json:"tags"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` } -// MarshalJSON is the custom marshaler for LocalNetworkGateway. -func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ManagerConnection. +func (mc ManagerConnection) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lng.LocalNetworkGatewayPropertiesFormat != nil { - objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat - } - if lng.ID != nil { - objectMap["id"] = lng.ID - } - if lng.Location != nil { - objectMap["location"] = lng.Location - } - if lng.Tags != nil { - objectMap["tags"] = lng.Tags + if mc.ManagerConnectionProperties != nil { + objectMap["properties"] = mc.ManagerConnectionProperties } return json.Marshal(objectMap) } -// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct. -func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { +// UnmarshalJSON is the custom unmarshaler for ManagerConnection struct. +func (mc *ManagerConnection) UnmarshalJSON(body []byte) error { var m map[string]*json.RawMessage err := json.Unmarshal(body, &m) if err != nil { @@ -28932,21 +33269,21 @@ func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { switch k { case "properties": if v != nil { - var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat - err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat) + var managerConnectionProperties ManagerConnectionProperties + err = json.Unmarshal(*v, &managerConnectionProperties) if err != nil { return err } - lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat + mc.ManagerConnectionProperties = &managerConnectionProperties } - case "etag": + case "systemData": if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) + var systemData SystemData + err = json.Unmarshal(*v, &systemData) if err != nil { return err } - lng.Etag = &etag + mc.SystemData = &systemData } case "id": if v != nil { @@ -28955,7 +33292,7 @@ func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { if err != nil { return err } - lng.ID = &ID + mc.ID = &ID } case "name": if v != nil { @@ -28964,7 +33301,7 @@ func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { if err != nil { return err } - lng.Name = &name + mc.Name = &name } case "type": if v != nil { @@ -28973,25 +33310,274 @@ func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { if err != nil { return err } - lng.Type = &typeVar + mc.Type = &typeVar } - case "location": + case "etag": if v != nil { - var location string - err = json.Unmarshal(*v, &location) + var etag string + err = json.Unmarshal(*v, &etag) if err != nil { return err } - lng.Location = &location + mc.Etag = &etag } - case "tags": + } + } + + return nil +} + +// ManagerConnectionListResult list of network manager connections. +type ManagerConnectionListResult struct { + autorest.Response `json:"-"` + // Value - List of network manager connections. + Value *[]ManagerConnection `json:"value,omitempty"` + // NextLink - Gets the URL to get the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ManagerConnectionListResultIterator provides access to a complete listing of ManagerConnection values. +type ManagerConnectionListResultIterator struct { + i int + page ManagerConnectionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ManagerConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerConnectionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ManagerConnectionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ManagerConnectionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ManagerConnectionListResultIterator) Response() ManagerConnectionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ManagerConnectionListResultIterator) Value() ManagerConnection { + if !iter.page.NotDone() { + return ManagerConnection{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ManagerConnectionListResultIterator type. +func NewManagerConnectionListResultIterator(page ManagerConnectionListResultPage) ManagerConnectionListResultIterator { + return ManagerConnectionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (mclr ManagerConnectionListResult) IsEmpty() bool { + return mclr.Value == nil || len(*mclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (mclr ManagerConnectionListResult) hasNextLink() bool { + return mclr.NextLink != nil && len(*mclr.NextLink) != 0 +} + +// managerConnectionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (mclr ManagerConnectionListResult) managerConnectionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !mclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(mclr.NextLink))) +} + +// ManagerConnectionListResultPage contains a page of ManagerConnection values. +type ManagerConnectionListResultPage struct { + fn func(context.Context, ManagerConnectionListResult) (ManagerConnectionListResult, error) + mclr ManagerConnectionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ManagerConnectionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerConnectionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.mclr) + if err != nil { + return err + } + page.mclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ManagerConnectionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ManagerConnectionListResultPage) NotDone() bool { + return !page.mclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ManagerConnectionListResultPage) Response() ManagerConnectionListResult { + return page.mclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ManagerConnectionListResultPage) Values() []ManagerConnection { + if page.mclr.IsEmpty() { + return nil + } + return *page.mclr.Value +} + +// Creates a new instance of the ManagerConnectionListResultPage type. +func NewManagerConnectionListResultPage(cur ManagerConnectionListResult, getNextPage func(context.Context, ManagerConnectionListResult) (ManagerConnectionListResult, error)) ManagerConnectionListResultPage { + return ManagerConnectionListResultPage{ + fn: getNextPage, + mclr: cur, + } +} + +// ManagerConnectionProperties information about the network manager connection. +type ManagerConnectionProperties struct { + // NetworkManagerID - Network Manager Id. + NetworkManagerID *string `json:"networkManagerId,omitempty"` + // ConnectionState - Connection state. Possible values include: 'ScopeConnectionStateConnected', 'ScopeConnectionStatePending', 'ScopeConnectionStateConflict', 'ScopeConnectionStateRevoked', 'ScopeConnectionStateRejected' + ConnectionState ScopeConnectionState `json:"connectionState,omitempty"` + // Description - A description of the network manager connection. + Description *string `json:"description,omitempty"` +} + +// ManagerDeploymentStatus network Manager Deployment Status. +type ManagerDeploymentStatus struct { + // CommitTime - Commit Time. + CommitTime *date.Time `json:"commitTime,omitempty"` + // Region - Region Name. + Region *string `json:"region,omitempty"` + // DeploymentStatus - Deployment Status. Possible values include: 'NotStarted', 'Deploying', 'Deployed', 'Failed' + DeploymentStatus DeploymentStatus `json:"deploymentStatus,omitempty"` + // ConfigurationIds - List of configuration ids. + ConfigurationIds *[]string `json:"configurationIds,omitempty"` + // DeploymentType - Possible values include: 'SecurityAdmin', 'Connectivity' + DeploymentType ConfigurationType `json:"deploymentType,omitempty"` + // ErrorMessage - Error Message. + ErrorMessage *string `json:"errorMessage,omitempty"` +} + +// ManagerDeploymentStatusListResult a list of Network Manager Deployment Status +type ManagerDeploymentStatusListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of Network Manager Deployment Status + Value *[]ManagerDeploymentStatus `json:"value,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// ManagerDeploymentStatusParameter network Manager Deployment Status Parameter. +type ManagerDeploymentStatusParameter struct { + // Regions - List of locations. + Regions *[]string `json:"regions,omitempty"` + // DeploymentTypes - List of deployment types. + DeploymentTypes *[]ConfigurationType `json:"deploymentTypes,omitempty"` + // SkipToken - Continuation token for pagination, capturing the next page size and offset, as well as the context of the query. + SkipToken *string `json:"skipToken,omitempty"` +} + +// ManagerEffectiveConnectivityConfigurationListResult result of the request to list +// networkManagerEffectiveConnectivityConfiguration. It contains a list of groups and a skiptoken to get +// the next set of results. +type ManagerEffectiveConnectivityConfigurationListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of NetworkManagerEffectiveConnectivityConfiguration + Value *[]EffectiveConnectivityConfiguration `json:"value,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// ManagerEffectiveSecurityAdminRulesListResult result of the request to list +// networkManagerEffectiveSecurityAdminRules. It contains a list of groups and a skiptoken to get the next +// set of results. +type ManagerEffectiveSecurityAdminRulesListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of NetworkManagerEffectiveSecurityAdminRules + Value *[]BasicEffectiveBaseSecurityAdminRule `json:"value,omitempty"` + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + +// UnmarshalJSON is the custom unmarshaler for ManagerEffectiveSecurityAdminRulesListResult struct. +func (mesarlr *ManagerEffectiveSecurityAdminRulesListResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "value": if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) + value, err := unmarshalBasicEffectiveBaseSecurityAdminRuleArray(*v) if err != nil { return err } - lng.Tags = tags + mesarlr.Value = &value + } + case "skipToken": + if v != nil { + var skipToken string + err = json.Unmarshal(*v, &skipToken) + if err != nil { + return err + } + mesarlr.SkipToken = &skipToken } } } @@ -28999,36 +33585,27 @@ func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error { return nil } -// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call. -type LocalNetworkGatewayListResult struct { +// ManagerListResult result of the request to list NetworkManager. It contains a list of network managers +// and a URL link to get the next set of results. +type ManagerListResult struct { autorest.Response `json:"-"` - // Value - A list of local network gateways that exists in a resource group. - Value *[]LocalNetworkGateway `json:"value,omitempty"` - // NextLink - READ-ONLY; The URL to get the next set of results. + // Value - Gets a page of NetworkManager + Value *[]Manager `json:"value,omitempty"` + // NextLink - Gets the URL to get the next page of results. NextLink *string `json:"nextLink,omitempty"` } -// MarshalJSON is the custom marshaler for LocalNetworkGatewayListResult. -func (lnglr LocalNetworkGatewayListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if lnglr.Value != nil { - objectMap["value"] = lnglr.Value - } - return json.Marshal(objectMap) -} - -// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway -// values. -type LocalNetworkGatewayListResultIterator struct { +// ManagerListResultIterator provides access to a complete listing of Manager values. +type ManagerListResultIterator struct { i int - page LocalNetworkGatewayListResultPage + page ManagerListResultPage } // NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) { +func (iter *ManagerListResultIterator) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerListResultIterator.NextWithContext") defer func() { sc := -1 if iter.Response().Response.Response != nil { @@ -29053,67 +33630,67 @@ func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.C // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *LocalNetworkGatewayListResultIterator) Next() error { +func (iter *ManagerListResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter LocalNetworkGatewayListResultIterator) NotDone() bool { +func (iter ManagerListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult { +func (iter ManagerListResultIterator) Response() ManagerListResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway { +func (iter ManagerListResultIterator) Value() Manager { if !iter.page.NotDone() { - return LocalNetworkGateway{} + return Manager{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the LocalNetworkGatewayListResultIterator type. -func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator { - return LocalNetworkGatewayListResultIterator{page: page} +// Creates a new instance of the ManagerListResultIterator type. +func NewManagerListResultIterator(page ManagerListResultPage) ManagerListResultIterator { + return ManagerListResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool { - return lnglr.Value == nil || len(*lnglr.Value) == 0 +func (mlr ManagerListResult) IsEmpty() bool { + return mlr.Value == nil || len(*mlr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (lnglr LocalNetworkGatewayListResult) hasNextLink() bool { - return lnglr.NextLink != nil && len(*lnglr.NextLink) != 0 +func (mlr ManagerListResult) hasNextLink() bool { + return mlr.NextLink != nil && len(*mlr.NextLink) != 0 } -// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results. +// managerListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) { - if !lnglr.hasNextLink() { +func (mlr ManagerListResult) managerListResultPreparer(ctx context.Context) (*http.Request, error) { + if !mlr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lnglr.NextLink))) + autorest.WithBaseURL(to.String(mlr.NextLink))) } -// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values. -type LocalNetworkGatewayListResultPage struct { - fn func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error) - lnglr LocalNetworkGatewayListResult +// ManagerListResultPage contains a page of Manager values. +type ManagerListResultPage struct { + fn func(context.Context, ManagerListResult) (ManagerListResult, error) + mlr ManagerListResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) { +func (page *ManagerListResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/ManagerListResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -29123,11 +33700,11 @@ func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Conte }() } for { - next, err := page.fn(ctx, page.lnglr) + next, err := page.fn(ctx, page.mlr) if err != nil { return err } - page.lnglr = next + page.mlr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -29138,124 +33715,96 @@ func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Conte // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *LocalNetworkGatewayListResultPage) Next() error { +func (page *ManagerListResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page LocalNetworkGatewayListResultPage) NotDone() bool { - return !page.lnglr.IsEmpty() +func (page ManagerListResultPage) NotDone() bool { + return !page.mlr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult { - return page.lnglr +func (page ManagerListResultPage) Response() ManagerListResult { + return page.mlr } // Values returns the slice of values for the current page or nil if there are no values. -func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway { - if page.lnglr.IsEmpty() { +func (page ManagerListResultPage) Values() []Manager { + if page.mlr.IsEmpty() { return nil } - return *page.lnglr.Value + return *page.mlr.Value } -// Creates a new instance of the LocalNetworkGatewayListResultPage type. -func NewLocalNetworkGatewayListResultPage(cur LocalNetworkGatewayListResult, getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage { - return LocalNetworkGatewayListResultPage{ - fn: getNextPage, - lnglr: cur, +// Creates a new instance of the ManagerListResultPage type. +func NewManagerListResultPage(cur ManagerListResult, getNextPage func(context.Context, ManagerListResult) (ManagerListResult, error)) ManagerListResultPage { + return ManagerListResultPage{ + fn: getNextPage, + mlr: cur, } } -// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties. -type LocalNetworkGatewayPropertiesFormat struct { - // LocalNetworkAddressSpace - Local network site address space. - LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"` - // GatewayIPAddress - IP address of local network gateway. - GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"` - // Fqdn - FQDN of local network gateway. - Fqdn *string `json:"fqdn,omitempty"` - // BgpSettings - Local network gateway's BGP speaker settings. - BgpSettings *BgpSettings `json:"bgpSettings,omitempty"` - // ResourceGUID - READ-ONLY; The resource GUID property of the local network gateway resource. - ResourceGUID *string `json:"resourceGuid,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' +// ManagerProperties properties of Managed Network +type ManagerProperties struct { + // Description - A description of the network manager. + Description *string `json:"description,omitempty"` + // NetworkManagerScopes - Scope of Network Manager. + NetworkManagerScopes *ManagerPropertiesNetworkManagerScopes `json:"networkManagerScopes,omitempty"` + // NetworkManagerScopeAccesses - Scope Access. + NetworkManagerScopeAccesses *[]ConfigurationType `json:"networkManagerScopeAccesses,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the network manager resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for LocalNetworkGatewayPropertiesFormat. -func (lngpf LocalNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for ManagerProperties. +func (mp ManagerProperties) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if lngpf.LocalNetworkAddressSpace != nil { - objectMap["localNetworkAddressSpace"] = lngpf.LocalNetworkAddressSpace + if mp.Description != nil { + objectMap["description"] = mp.Description } - if lngpf.GatewayIPAddress != nil { - objectMap["gatewayIpAddress"] = lngpf.GatewayIPAddress - } - if lngpf.Fqdn != nil { - objectMap["fqdn"] = lngpf.Fqdn + if mp.NetworkManagerScopes != nil { + objectMap["networkManagerScopes"] = mp.NetworkManagerScopes } - if lngpf.BgpSettings != nil { - objectMap["bgpSettings"] = lngpf.BgpSettings + if mp.NetworkManagerScopeAccesses != nil { + objectMap["networkManagerScopeAccesses"] = mp.NetworkManagerScopeAccesses } return json.Marshal(objectMap) } -// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type LocalNetworkGatewaysCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(LocalNetworkGatewaysClient) (LocalNetworkGateway, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LocalNetworkGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil +// ManagerPropertiesNetworkManagerScopes scope of Network Manager. +type ManagerPropertiesNetworkManagerScopes struct { + // ManagementGroups - List of management groups. + ManagementGroups *[]string `json:"managementGroups,omitempty"` + // Subscriptions - List of subscriptions. + Subscriptions *[]string `json:"subscriptions,omitempty"` + // CrossTenantScopes - READ-ONLY; List of cross tenant scopes. + CrossTenantScopes *[]CrossTenantScopes `json:"crossTenantScopes,omitempty"` } -// result is the default implementation for LocalNetworkGatewaysCreateOrUpdateFuture.Result. -func (future *LocalNetworkGatewaysCreateOrUpdateFuture) result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - lng.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture") - return +// MarshalJSON is the custom marshaler for ManagerPropertiesNetworkManagerScopes. +func (mpMs ManagerPropertiesNetworkManagerScopes) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if mpMs.ManagementGroups != nil { + objectMap["managementGroups"] = mpMs.ManagementGroups } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent { - lng, err = client.CreateOrUpdateResponder(lng.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request") - } + if mpMs.Subscriptions != nil { + objectMap["subscriptions"] = mpMs.Subscriptions } - return + return json.Marshal(objectMap) } -// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type LocalNetworkGatewaysDeleteFuture struct { +// ManagersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type ManagersDeleteFuture struct { azure.FutureAPI // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. - Result func(LocalNetworkGatewaysClient) (autorest.Response, error) + Result func(ManagersClient) (autorest.Response, error) } // UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LocalNetworkGatewaysDeleteFuture) UnmarshalJSON(body []byte) error { +func (future *ManagersDeleteFuture) UnmarshalJSON(body []byte) error { var azFuture azure.Future if err := json.Unmarshal(body, &azFuture); err != nil { return err @@ -29265,110 +33814,34 @@ func (future *LocalNetworkGatewaysDeleteFuture) UnmarshalJSON(body []byte) error return nil } -// result is the default implementation for LocalNetworkGatewaysDeleteFuture.Result. -func (future *LocalNetworkGatewaysDeleteFuture) result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) { +// result is the default implementation for ManagersDeleteFuture.Result. +func (future *ManagersDeleteFuture) result(client ManagersClient) (ar autorest.Response, err error) { var done bool done, err = future.DoneWithContext(context.Background(), client) if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") + err = autorest.NewErrorWithError(err, "network.ManagersDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture") + err = azure.NewAsyncOpIncompleteError("network.ManagersDeleteFuture") return } ar.Response = future.Response() return } -// LogSpecification description of logging specification. -type LogSpecification struct { - // Name - The name of the specification. - Name *string `json:"name,omitempty"` - // DisplayName - The display name of the specification. - DisplayName *string `json:"displayName,omitempty"` - // BlobDuration - Duration of the blob. - BlobDuration *string `json:"blobDuration,omitempty"` -} - -// ManagedRuleGroupOverride defines a managed rule group override setting. -type ManagedRuleGroupOverride struct { - // RuleGroupName - The managed rule group to override. - RuleGroupName *string `json:"ruleGroupName,omitempty"` - // Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled. - Rules *[]ManagedRuleOverride `json:"rules,omitempty"` -} - -// ManagedRuleOverride defines a managed rule group override setting. -type ManagedRuleOverride struct { - // RuleID - Identifier for the managed rule. - RuleID *string `json:"ruleId,omitempty"` - // State - The state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled' - State ManagedRuleEnabledState `json:"state,omitempty"` -} - -// ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check. -type ManagedRulesDefinition struct { - // Exclusions - The Exclusions that are applied on the policy. - Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"` - // ManagedRuleSets - The managed rule sets that are associated with the policy. - ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"` -} - -// ManagedRuleSet defines a managed rule set. -type ManagedRuleSet struct { - // RuleSetType - Defines the rule set type to use. - RuleSetType *string `json:"ruleSetType,omitempty"` - // RuleSetVersion - Defines the version of the rule set to use. - RuleSetVersion *string `json:"ruleSetVersion,omitempty"` - // RuleGroupOverrides - Defines the rule group overrides to apply to the rule set. - RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"` -} - -// ManagedServiceIdentity identity for the resource. -type ManagedServiceIdentity struct { - // PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity. - PrincipalID *string `json:"principalId,omitempty"` - // TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity. - TenantID *string `json:"tenantId,omitempty"` - // Type - The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' - Type ResourceIdentityType `json:"type,omitempty"` - // UserAssignedIdentities - The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. - UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"` -} - -// MarshalJSON is the custom marshaler for ManagedServiceIdentity. -func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if msi.Type != "" { - objectMap["type"] = msi.Type - } - if msi.UserAssignedIdentities != nil { - objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities - } - return json.Marshal(objectMap) -} - -// ManagedServiceIdentityUserAssignedIdentitiesValue ... -type ManagedServiceIdentityUserAssignedIdentitiesValue struct { - // PrincipalID - READ-ONLY; The principal id of user assigned identity. - PrincipalID *string `json:"principalId,omitempty"` - // ClientID - READ-ONLY; The client id of user assigned identity. - ClientID *string `json:"clientId,omitempty"` -} - -// MarshalJSON is the custom marshaler for ManagedServiceIdentityUserAssignedIdentitiesValue. -func (msiAiv ManagedServiceIdentityUserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) +// ManagerSecurityGroupItem network manager security group item. +type ManagerSecurityGroupItem struct { + // NetworkGroupID - Network manager group Id. + NetworkGroupID *string `json:"networkGroupId,omitempty"` } // MatchCondition define match conditions. type MatchCondition struct { // MatchVariables - List of match variables. MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"` - // Operator - The operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex', 'WebApplicationFirewallOperatorGeoMatch' + // Operator - The operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex', 'WebApplicationFirewallOperatorGeoMatch', 'WebApplicationFirewallOperatorAny' Operator WebApplicationFirewallOperator `json:"operator,omitempty"` // NegationConditon - Whether this is negate condition or not. NegationConditon *bool `json:"negationConditon,omitempty"` @@ -29388,7 +33861,7 @@ type MatchedRule struct { // MatchVariable define match variables. type MatchVariable struct { - // VariableName - Match Variable. Possible values include: 'WebApplicationFirewallMatchVariableRemoteAddr', 'WebApplicationFirewallMatchVariableRequestMethod', 'WebApplicationFirewallMatchVariableQueryString', 'WebApplicationFirewallMatchVariablePostArgs', 'WebApplicationFirewallMatchVariableRequestURI', 'WebApplicationFirewallMatchVariableRequestHeaders', 'WebApplicationFirewallMatchVariableRequestBody', 'WebApplicationFirewallMatchVariableRequestCookies' + // VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies' VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"` // Selector - The selector of match variable. Selector *string `json:"selector,omitempty"` @@ -30342,7 +34815,7 @@ type OperationPropertiesFormatServiceSpecification struct { type OrderBy struct { // Field - Describes the actual column name to sort by Field *string `json:"field,omitempty"` - // Order - Describes if results should be in ascending/descending order. Possible values include: 'FirewallPolicyIDPSQuerySortOrderAscending', 'FirewallPolicyIDPSQuerySortOrderDescending' + // Order - Describes if results should be in ascending/descending order. Possible values include: 'Ascending', 'Descending' Order FirewallPolicyIDPSQuerySortOrder `json:"order,omitempty"` } @@ -30480,7 +34953,7 @@ func (orpf OutboundRulePropertiesFormat) MarshalJSON() ([]byte, error) { // OwaspCrsExclusionEntry allow to exclude some variable satisfy the condition for the WAF check. type OwaspCrsExclusionEntry struct { - // MatchVariable - The variable to be excluded. Possible values include: 'OwaspCrsExclusionEntryMatchVariableRequestHeaderNames', 'OwaspCrsExclusionEntryMatchVariableRequestCookieNames', 'OwaspCrsExclusionEntryMatchVariableRequestArgNames', 'OwaspCrsExclusionEntryMatchVariableRequestHeaderKeys', 'OwaspCrsExclusionEntryMatchVariableRequestHeaderValues', 'OwaspCrsExclusionEntryMatchVariableRequestCookieKeys', 'OwaspCrsExclusionEntryMatchVariableRequestCookieValues', 'OwaspCrsExclusionEntryMatchVariableRequestArgKeys', 'OwaspCrsExclusionEntryMatchVariableRequestArgValues' + // MatchVariable - The variable to be excluded. Possible values include: 'RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames', 'RequestHeaderKeys', 'RequestHeaderValues', 'RequestCookieKeys', 'RequestCookieValues', 'RequestArgKeys', 'RequestArgValues' MatchVariable OwaspCrsExclusionEntryMatchVariable `json:"matchVariable,omitempty"` // SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. Possible values include: 'OwaspCrsExclusionEntrySelectorMatchOperatorEquals', 'OwaspCrsExclusionEntrySelectorMatchOperatorContains', 'OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny' SelectorMatchOperator OwaspCrsExclusionEntrySelectorMatchOperator `json:"selectorMatchOperator,omitempty"` @@ -31113,7 +35586,7 @@ func (future *P2sVpnGatewaysUpdateTagsFuture) result(client P2sVpnGatewaysClient // P2SVpnProfileParameters vpn Client Parameters for package generation. type P2SVpnProfileParameters struct { - // AuthenticationMethod - VPN client authentication method. Possible values include: 'AuthenticationMethodEAPTLS', 'AuthenticationMethodEAPMSCHAPv2' + // AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2' AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"` } @@ -31177,10 +35650,24 @@ type PacketCaptureListResult struct { Value *[]PacketCaptureResult `json:"value,omitempty"` } +// PacketCaptureMachineScope a list of AzureVMSS instances which can be included or excluded to run packet +// capture. If both included and excluded are empty, then the packet capture will run on all instances of +// AzureVMSS. +type PacketCaptureMachineScope struct { + // Include - List of AzureVMSS instances to run packet capture on. + Include *[]string `json:"include,omitempty"` + // Exclude - List of AzureVMSS instances which has to be excluded from the AzureVMSS from running packet capture. + Exclude *[]string `json:"exclude,omitempty"` +} + // PacketCaptureParameters parameters that define the create packet capture operation. type PacketCaptureParameters struct { - // Target - The ID of the targeted resource, only VM is currently supported. + // Target - The ID of the targeted resource, only AzureVM and AzureVMSS as target type are currently supported. Target *string `json:"target,omitempty"` + // Scope - A list of AzureVMSS instances which can be included or excluded to run packet capture. If both included and excluded are empty, then the packet capture will run on all instances of AzureVMSS. + Scope *PacketCaptureMachineScope `json:"scope,omitempty"` + // TargetType - Target type of the resource provided. Possible values include: 'PacketCaptureTargetTypeAzureVM', 'PacketCaptureTargetTypeAzureVMSS' + TargetType PacketCaptureTargetType `json:"targetType,omitempty"` // BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated. BytesToCapturePerPacket *int64 `json:"bytesToCapturePerPacket,omitempty"` // TotalBytesPerSession - Maximum size of the capture output. @@ -31287,8 +35774,12 @@ func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error { type PacketCaptureResultProperties struct { // ProvisioningState - READ-ONLY; The provisioning state of the packet capture session. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // Target - The ID of the targeted resource, only VM is currently supported. + // Target - The ID of the targeted resource, only AzureVM and AzureVMSS as target type are currently supported. Target *string `json:"target,omitempty"` + // Scope - A list of AzureVMSS instances which can be included or excluded to run packet capture. If both included and excluded are empty, then the packet capture will run on all instances of AzureVMSS. + Scope *PacketCaptureMachineScope `json:"scope,omitempty"` + // TargetType - Target type of the resource provided. Possible values include: 'PacketCaptureTargetTypeAzureVM', 'PacketCaptureTargetTypeAzureVMSS' + TargetType PacketCaptureTargetType `json:"targetType,omitempty"` // BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated. BytesToCapturePerPacket *int64 `json:"bytesToCapturePerPacket,omitempty"` // TotalBytesPerSession - Maximum size of the capture output. @@ -31307,6 +35798,12 @@ func (pcrp PacketCaptureResultProperties) MarshalJSON() ([]byte, error) { if pcrp.Target != nil { objectMap["target"] = pcrp.Target } + if pcrp.Scope != nil { + objectMap["scope"] = pcrp.Scope + } + if pcrp.TargetType != "" { + objectMap["targetType"] = pcrp.TargetType + } if pcrp.BytesToCapturePerPacket != nil { objectMap["bytesToCapturePerPacket"] = pcrp.BytesToCapturePerPacket } @@ -31495,6 +35992,47 @@ type PacketCaptureStorageLocation struct { FilePath *string `json:"filePath,omitempty"` } +// Parameter parameters for an Action. +type Parameter struct { + // RoutePrefix - List of route prefixes. + RoutePrefix *[]string `json:"routePrefix,omitempty"` + // Community - List of BGP communities. + Community *[]string `json:"community,omitempty"` + // AsPath - List of AS paths. + AsPath *[]string `json:"asPath,omitempty"` +} + +// PartnerManagedResourceProperties properties of the partner managed resource. +type PartnerManagedResourceProperties struct { + // ID - READ-ONLY; The partner managed resource id. + ID *string `json:"id,omitempty"` + // InternalLoadBalancerID - READ-ONLY; The partner managed ILB resource id + InternalLoadBalancerID *string `json:"internalLoadBalancerId,omitempty"` + // StandardLoadBalancerID - READ-ONLY; The partner managed SLB resource id + StandardLoadBalancerID *string `json:"standardLoadBalancerId,omitempty"` +} + +// MarshalJSON is the custom marshaler for PartnerManagedResourceProperties. +func (pmrp PartnerManagedResourceProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// PatchObject object for patch operations. +type PatchObject struct { + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for PatchObject. +func (po PatchObject) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if po.Tags != nil { + objectMap["tags"] = po.Tags + } + return json.Marshal(objectMap) +} + // PatchRouteFilter route Filter Resource. type PatchRouteFilter struct { // RouteFilterPropertiesFormat - Properties of the route filter. @@ -31933,7 +36471,7 @@ type PeerExpressRouteCircuitConnectionPropertiesFormat struct { PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"` // AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels. AddressPrefix *string `json:"addressPrefix,omitempty"` - // CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'CircuitConnectionStatusConnected', 'CircuitConnectionStatusConnecting', 'CircuitConnectionStatusDisconnected' + // CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected' CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"` // ConnectionName - The name of the express route circuit connection resource. ConnectionName *string `json:"connectionName,omitempty"` @@ -32010,6 +36548,10 @@ type PolicySettings struct { MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"` // FileUploadLimitInMb - Maximum file upload size in Mb for WAF. FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"` + // CustomBlockResponseStatusCode - If the action type is block, customer can override the response status code. + CustomBlockResponseStatusCode *int32 `json:"customBlockResponseStatusCode,omitempty"` + // CustomBlockResponseBody - If the action type is block, customer can override the response body. The body must be specified in base64 encoding. + CustomBlockResponseBody *string `json:"customBlockResponseBody,omitempty"` } // PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet. @@ -33580,7 +38122,7 @@ func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error type PrivateLinkServiceIPConfigurationProperties struct { // PrivateIPAddress - The private IP address of the IP configuration. PrivateIPAddress *string `json:"privateIPAddress,omitempty"` - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` // Subnet - The reference to the subnet resource. Subnet *Subnet `json:"subnet,omitempty"` @@ -33588,7 +38130,7 @@ type PrivateLinkServiceIPConfigurationProperties struct { Primary *bool `json:"primary,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the private link service IP configuration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6' PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` } @@ -34153,6 +38695,8 @@ type ProbePropertiesFormat struct { IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"` // NumberOfProbes - The number of probes where if no response, will result in stopping further traffic from being delivered to the endpoint. This values allows endpoints to be taken out of rotation faster or slower than the typical times used in Azure. NumberOfProbes *int32 `json:"numberOfProbes,omitempty"` + // ProbeThreshold - The number of consecutive successful or failed probes in order to allow or deny traffic from being delivered to this endpoint. After failing the number of consecutive probes equal to this value, the endpoint will be taken out of rotation and require the same number of successful consecutive probes to be placed back in rotation. + ProbeThreshold *int32 `json:"probeThreshold,omitempty"` // RequestPath - The URI used for requesting health status from the VM. Path is required if a protocol is set to http. Otherwise, it is not allowed. There is no default value. RequestPath *string `json:"requestPath,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' @@ -34174,6 +38718,9 @@ func (ppf ProbePropertiesFormat) MarshalJSON() ([]byte, error) { if ppf.NumberOfProbes != nil { objectMap["numberOfProbes"] = ppf.NumberOfProbes } + if ppf.ProbeThreshold != nil { + objectMap["probeThreshold"] = ppf.ProbeThreshold + } if ppf.RequestPath != nil { objectMap["requestPath"] = ppf.RequestPath } @@ -34526,18 +39073,6 @@ type ProtocolConfiguration struct { HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"` } -// ProtocolCustomSettingsFormat dDoS custom policy properties. -type ProtocolCustomSettingsFormat struct { - // Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn' - Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"` - // TriggerRateOverride - The customized DDoS protection trigger rate. - TriggerRateOverride *string `json:"triggerRateOverride,omitempty"` - // SourceRateOverride - The customized DDoS protection source rate. - SourceRateOverride *string `json:"sourceRateOverride,omitempty"` - // TriggerSensitivityOverride - The customized DDoS protection trigger rate sensitivity degrees. High: Trigger rate set with most sensitivity w.r.t. normal traffic. Default: Trigger rate set with moderate sensitivity w.r.t. normal traffic. Low: Trigger rate set with less sensitivity w.r.t. normal traffic. Relaxed: Trigger rate set with least sensitivity w.r.t. normal traffic. Possible values include: 'DdosCustomPolicyTriggerSensitivityOverrideRelaxed', 'DdosCustomPolicyTriggerSensitivityOverrideLow', 'DdosCustomPolicyTriggerSensitivityOverrideDefault', 'DdosCustomPolicyTriggerSensitivityOverrideHigh' - TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"` -} - // PublicIPAddress public IP address resource. type PublicIPAddress struct { autorest.Response `json:"-"` @@ -34748,6 +39283,49 @@ func (future *PublicIPAddressesCreateOrUpdateFuture) result(client PublicIPAddre return } +// PublicIPAddressesDdosProtectionStatusFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. +type PublicIPAddressesDdosProtectionStatusFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(PublicIPAddressesClient) (PublicIPDdosProtectionStatusResult, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *PublicIPAddressesDdosProtectionStatusFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for PublicIPAddressesDdosProtectionStatusFuture.Result. +func (future *PublicIPAddressesDdosProtectionStatusFuture) result(client PublicIPAddressesClient) (pidpsr PublicIPDdosProtectionStatusResult, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDdosProtectionStatusFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + pidpsr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDdosProtectionStatusFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if pidpsr.Response.Response, err = future.GetResult(sender); err == nil && pidpsr.Response.Response.StatusCode != http.StatusNoContent { + pidpsr, err = client.DdosProtectionStatusResponder(pidpsr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDdosProtectionStatusFuture", "Result", pidpsr.Response.Response, "Failure responding to request") + } + } + return +} + // PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running // operation. type PublicIPAddressesDeleteFuture struct { @@ -34946,9 +39524,9 @@ func NewPublicIPAddressListResultPage(cur PublicIPAddressListResult, getNextPage // PublicIPAddressPropertiesFormat public IP address properties. type PublicIPAddressPropertiesFormat struct { - // PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic' PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"` - // PublicIPAddressVersion - The public IP address version. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6' PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"` // IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address. IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"` @@ -34976,7 +39554,7 @@ type PublicIPAddressPropertiesFormat struct { MigrationPhase PublicIPAddressMigrationPhase `json:"migrationPhase,omitempty"` // LinkedPublicIPAddress - The linked public IP address of the public IP address resource. LinkedPublicIPAddress *PublicIPAddress `json:"linkedPublicIPAddress,omitempty"` - // DeleteOption - Specify what happens to the public IP address when the VM using it is deleted. Possible values include: 'DeleteOptionsDelete', 'DeleteOptionsDetach' + // DeleteOption - Specify what happens to the public IP address when the VM using it is deleted. Possible values include: 'Delete', 'Detach' DeleteOption DeleteOptions `json:"deleteOption,omitempty"` } @@ -35033,6 +39611,20 @@ type PublicIPAddressSku struct { Tier PublicIPAddressSkuTier `json:"tier,omitempty"` } +// PublicIPDdosProtectionStatusResult response for GetPublicIpAddressDdosProtectionStatusOperation API +// service call. +type PublicIPDdosProtectionStatusResult struct { + autorest.Response `json:"-"` + // PublicIPAddressID - Public IP ARM resource ID + PublicIPAddressID *string `json:"publicIpAddressId,omitempty"` + // PublicIPAddress - IP Address of the Public IP Resource + PublicIPAddress *string `json:"publicIpAddress,omitempty"` + // IsWorkloadProtected - Value indicating whether the IP address is DDoS workload protected or not. Possible values include: 'IsWorkloadProtectedFalse', 'IsWorkloadProtectedTrue' + IsWorkloadProtected IsWorkloadProtected `json:"isWorkloadProtected,omitempty"` + // DdosProtectionPlanID - DDoS protection plan Resource Id of a if IP address is protected through a plan. + DdosProtectionPlanID *string `json:"ddosProtectionPlanId,omitempty"` +} + // PublicIPPrefix public IP prefix resource. type PublicIPPrefix struct { autorest.Response `json:"-"` @@ -35431,7 +40023,7 @@ func NewPublicIPPrefixListResultPage(cur PublicIPPrefixListResult, getNextPage f // PublicIPPrefixPropertiesFormat public IP prefix properties. type PublicIPPrefixPropertiesFormat struct { - // PublicIPAddressVersion - The public IP address version. Possible values include: 'IPVersionIPv4', 'IPVersionIPv6' + // PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6' PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"` // IPTags - The list of tags associated with the public IP prefix. IPTags *[]IPTag `json:"ipTags,omitempty"` @@ -35610,6 +40202,12 @@ type QueryInboundNatRulePortMappingRequest struct { IPAddress *string `json:"ipAddress,omitempty"` } +// QueryRequestOptions query Request Options +type QueryRequestOptions struct { + // SkipToken - When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data. + SkipToken *string `json:"skipToken,omitempty"` +} + // QueryResults query result type QueryResults struct { autorest.Response `json:"-"` @@ -36492,7 +41090,7 @@ func NewRouteFilterRuleListResultPage(cur RouteFilterRuleListResult, getNextPage // RouteFilterRulePropertiesFormat route Filter Rule Resource. type RouteFilterRulePropertiesFormat struct { - // Access - The access type of the rule. Possible values include: 'AccessAllow', 'AccessDeny' + // Access - The access type of the rule. Possible values include: 'Allow', 'Deny' Access Access `json:"access,omitempty"` // RouteFilterRuleType - The rule type of the rule. RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"` @@ -36836,6 +41434,212 @@ func NewRouteListResultPage(cur RouteListResult, getNextPage func(context.Contex } } +// RouteMap the RouteMap child resource of a Virtual hub. +type RouteMap struct { + autorest.Response `json:"-"` + // RouteMapProperties - Properties of the RouteMap resource. + *RouteMapProperties `json:"properties,omitempty"` + // Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for RouteMap. +func (rm RouteMap) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rm.RouteMapProperties != nil { + objectMap["properties"] = rm.RouteMapProperties + } + if rm.ID != nil { + objectMap["id"] = rm.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for RouteMap struct. +func (rm *RouteMap) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var routeMapProperties RouteMapProperties + err = json.Unmarshal(*v, &routeMapProperties) + if err != nil { + return err + } + rm.RouteMapProperties = &routeMapProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rm.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + rm.Etag = &etag + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rm.Type = &typeVar + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rm.ID = &ID + } + } + } + + return nil +} + +// RouteMapProperties properties of RouteMap resource +type RouteMapProperties struct { + // AssociatedInboundConnections - List of connections which have this RoutMap associated for inbound traffic. + AssociatedInboundConnections *[]string `json:"associatedInboundConnections,omitempty"` + // AssociatedOutboundConnections - List of connections which have this RoutMap associated for outbound traffic. + AssociatedOutboundConnections *[]string `json:"associatedOutboundConnections,omitempty"` + // Rules - List of RouteMap rules to be applied. + Rules *[]RouteMapRule `json:"rules,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the RouteMap resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for RouteMapProperties. +func (rmp RouteMapProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rmp.AssociatedInboundConnections != nil { + objectMap["associatedInboundConnections"] = rmp.AssociatedInboundConnections + } + if rmp.AssociatedOutboundConnections != nil { + objectMap["associatedOutboundConnections"] = rmp.AssociatedOutboundConnections + } + if rmp.Rules != nil { + objectMap["rules"] = rmp.Rules + } + return json.Marshal(objectMap) +} + +// RouteMapRule a RouteMap Rule. +type RouteMapRule struct { + // Name - The unique name for the rule. + Name *string `json:"name,omitempty"` + // MatchCriteria - List of matching criterion which will be applied to traffic. + MatchCriteria *[]Criterion `json:"matchCriteria,omitempty"` + // Actions - List of actions which will be applied on a match. + Actions *[]Action `json:"actions,omitempty"` + // NextStepIfMatched - Next step after rule is evaluated. Current supported behaviors are 'Continue'(to next rule) and 'Terminate'. Possible values include: 'NextStepUnknown', 'NextStepContinue', 'NextStepTerminate' + NextStepIfMatched NextStep `json:"nextStepIfMatched,omitempty"` +} + +// RouteMapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type RouteMapsCreateOrUpdateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(RouteMapsClient) (RouteMap, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *RouteMapsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for RouteMapsCreateOrUpdateFuture.Result. +func (future *RouteMapsCreateOrUpdateFuture) result(client RouteMapsClient) (rm RouteMap, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + rm.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.RouteMapsCreateOrUpdateFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if rm.Response.Response, err = future.GetResult(sender); err == nil && rm.Response.Response.StatusCode != http.StatusNoContent { + rm, err = client.CreateOrUpdateResponder(rm.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsCreateOrUpdateFuture", "Result", rm.Response.Response, "Failure responding to request") + } + } + return +} + +// RouteMapsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type RouteMapsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(RouteMapsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *RouteMapsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for RouteMapsDeleteFuture.Result. +func (future *RouteMapsDeleteFuture) result(client RouteMapsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.RouteMapsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + // RoutePropertiesFormat route resource. type RoutePropertiesFormat struct { // AddressPrefix - The destination CIDR to which the route applies. @@ -37336,6 +42140,10 @@ type RoutingConfiguration struct { PropagatedRouteTables *PropagatedRouteTable `json:"propagatedRouteTables,omitempty"` // VnetRoutes - List of routes that control routing from VirtualHub into a virtual network connection. VnetRoutes *VnetRoute `json:"vnetRoutes,omitempty"` + // InboundRouteMap - The resource id of the RouteMap associated with this RoutingConfiguration for inbound learned routes. + InboundRouteMap *SubResource `json:"inboundRouteMap,omitempty"` + // OutboundRouteMap - The resource id of theRouteMap associated with this RoutingConfiguration for outbound advertised routes. + OutboundRouteMap *SubResource `json:"outboundRouteMap,omitempty"` } // RoutingIntent the routing intent child resource of a Virtual hub. @@ -37621,6 +42429,586 @@ func (r Rule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) { return &r, true } +// ScopeConnection the Scope Connections resource +type ScopeConnection struct { + autorest.Response `json:"-"` + // ScopeConnectionProperties - The scope connection properties + *ScopeConnectionProperties `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for ScopeConnection. +func (sc ScopeConnection) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sc.ScopeConnectionProperties != nil { + objectMap["properties"] = sc.ScopeConnectionProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ScopeConnection struct. +func (sc *ScopeConnection) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var scopeConnectionProperties ScopeConnectionProperties + err = json.Unmarshal(*v, &scopeConnectionProperties) + if err != nil { + return err + } + sc.ScopeConnectionProperties = &scopeConnectionProperties + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + sc.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + sc.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sc.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + sc.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + sc.Etag = &etag + } + } + } + + return nil +} + +// ScopeConnectionListResult list of scope connections. +type ScopeConnectionListResult struct { + autorest.Response `json:"-"` + // Value - List of scope connections. + Value *[]ScopeConnection `json:"value,omitempty"` + // NextLink - Gets the URL to get the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ScopeConnectionListResultIterator provides access to a complete listing of ScopeConnection values. +type ScopeConnectionListResultIterator struct { + i int + page ScopeConnectionListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ScopeConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ScopeConnectionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ScopeConnectionListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ScopeConnectionListResultIterator) Response() ScopeConnectionListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ScopeConnectionListResultIterator) Value() ScopeConnection { + if !iter.page.NotDone() { + return ScopeConnection{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ScopeConnectionListResultIterator type. +func NewScopeConnectionListResultIterator(page ScopeConnectionListResultPage) ScopeConnectionListResultIterator { + return ScopeConnectionListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (sclr ScopeConnectionListResult) IsEmpty() bool { + return sclr.Value == nil || len(*sclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (sclr ScopeConnectionListResult) hasNextLink() bool { + return sclr.NextLink != nil && len(*sclr.NextLink) != 0 +} + +// scopeConnectionListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (sclr ScopeConnectionListResult) scopeConnectionListResultPreparer(ctx context.Context) (*http.Request, error) { + if !sclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(sclr.NextLink))) +} + +// ScopeConnectionListResultPage contains a page of ScopeConnection values. +type ScopeConnectionListResultPage struct { + fn func(context.Context, ScopeConnectionListResult) (ScopeConnectionListResult, error) + sclr ScopeConnectionListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ScopeConnectionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.sclr) + if err != nil { + return err + } + page.sclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ScopeConnectionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ScopeConnectionListResultPage) NotDone() bool { + return !page.sclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ScopeConnectionListResultPage) Response() ScopeConnectionListResult { + return page.sclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ScopeConnectionListResultPage) Values() []ScopeConnection { + if page.sclr.IsEmpty() { + return nil + } + return *page.sclr.Value +} + +// Creates a new instance of the ScopeConnectionListResultPage type. +func NewScopeConnectionListResultPage(cur ScopeConnectionListResult, getNextPage func(context.Context, ScopeConnectionListResult) (ScopeConnectionListResult, error)) ScopeConnectionListResultPage { + return ScopeConnectionListResultPage{ + fn: getNextPage, + sclr: cur, + } +} + +// ScopeConnectionProperties scope connection. +type ScopeConnectionProperties struct { + // TenantID - Tenant ID. + TenantID *string `json:"tenantId,omitempty"` + // ResourceID - Resource ID. + ResourceID *string `json:"resourceId,omitempty"` + // ConnectionState - Connection State. Possible values include: 'ScopeConnectionStateConnected', 'ScopeConnectionStatePending', 'ScopeConnectionStateConflict', 'ScopeConnectionStateRevoked', 'ScopeConnectionStateRejected' + ConnectionState ScopeConnectionState `json:"connectionState,omitempty"` + // Description - A description of the scope connection. + Description *string `json:"description,omitempty"` +} + +// SecurityAdminConfiguration defines the security admin configuration +type SecurityAdminConfiguration struct { + autorest.Response `json:"-"` + // SecurityAdminConfigurationPropertiesFormat - Indicates the properties for the network manager security admin configuration. + *SecurityAdminConfigurationPropertiesFormat `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for SecurityAdminConfiguration. +func (sac SecurityAdminConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sac.SecurityAdminConfigurationPropertiesFormat != nil { + objectMap["properties"] = sac.SecurityAdminConfigurationPropertiesFormat + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for SecurityAdminConfiguration struct. +func (sac *SecurityAdminConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var securityAdminConfigurationPropertiesFormat SecurityAdminConfigurationPropertiesFormat + err = json.Unmarshal(*v, &securityAdminConfigurationPropertiesFormat) + if err != nil { + return err + } + sac.SecurityAdminConfigurationPropertiesFormat = &securityAdminConfigurationPropertiesFormat + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + sac.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + sac.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sac.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + sac.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + sac.Etag = &etag + } + } + } + + return nil +} + +// SecurityAdminConfigurationListResult a list of network manager security admin configurations +type SecurityAdminConfigurationListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of security admin configurations + Value *[]SecurityAdminConfiguration `json:"value,omitempty"` + // NextLink - Gets the URL to get the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// SecurityAdminConfigurationListResultIterator provides access to a complete listing of +// SecurityAdminConfiguration values. +type SecurityAdminConfigurationListResultIterator struct { + i int + page SecurityAdminConfigurationListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *SecurityAdminConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SecurityAdminConfigurationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter SecurityAdminConfigurationListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter SecurityAdminConfigurationListResultIterator) Response() SecurityAdminConfigurationListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter SecurityAdminConfigurationListResultIterator) Value() SecurityAdminConfiguration { + if !iter.page.NotDone() { + return SecurityAdminConfiguration{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the SecurityAdminConfigurationListResultIterator type. +func NewSecurityAdminConfigurationListResultIterator(page SecurityAdminConfigurationListResultPage) SecurityAdminConfigurationListResultIterator { + return SecurityAdminConfigurationListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (saclr SecurityAdminConfigurationListResult) IsEmpty() bool { + return saclr.Value == nil || len(*saclr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (saclr SecurityAdminConfigurationListResult) hasNextLink() bool { + return saclr.NextLink != nil && len(*saclr.NextLink) != 0 +} + +// securityAdminConfigurationListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (saclr SecurityAdminConfigurationListResult) securityAdminConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) { + if !saclr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(saclr.NextLink))) +} + +// SecurityAdminConfigurationListResultPage contains a page of SecurityAdminConfiguration values. +type SecurityAdminConfigurationListResultPage struct { + fn func(context.Context, SecurityAdminConfigurationListResult) (SecurityAdminConfigurationListResult, error) + saclr SecurityAdminConfigurationListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *SecurityAdminConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.saclr) + if err != nil { + return err + } + page.saclr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SecurityAdminConfigurationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page SecurityAdminConfigurationListResultPage) NotDone() bool { + return !page.saclr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page SecurityAdminConfigurationListResultPage) Response() SecurityAdminConfigurationListResult { + return page.saclr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page SecurityAdminConfigurationListResultPage) Values() []SecurityAdminConfiguration { + if page.saclr.IsEmpty() { + return nil + } + return *page.saclr.Value +} + +// Creates a new instance of the SecurityAdminConfigurationListResultPage type. +func NewSecurityAdminConfigurationListResultPage(cur SecurityAdminConfigurationListResult, getNextPage func(context.Context, SecurityAdminConfigurationListResult) (SecurityAdminConfigurationListResult, error)) SecurityAdminConfigurationListResultPage { + return SecurityAdminConfigurationListResultPage{ + fn: getNextPage, + saclr: cur, + } +} + +// SecurityAdminConfigurationPropertiesFormat defines the security admin configuration properties. +type SecurityAdminConfigurationPropertiesFormat struct { + // Description - A description of the security configuration. + Description *string `json:"description,omitempty"` + // ApplyOnNetworkIntentPolicyBasedServices - Enum list of network intent policy based services. + ApplyOnNetworkIntentPolicyBasedServices *[]IntentPolicyBasedService `json:"applyOnNetworkIntentPolicyBasedServices,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for SecurityAdminConfigurationPropertiesFormat. +func (sacpf SecurityAdminConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sacpf.Description != nil { + objectMap["description"] = sacpf.Description + } + if sacpf.ApplyOnNetworkIntentPolicyBasedServices != nil { + objectMap["applyOnNetworkIntentPolicyBasedServices"] = sacpf.ApplyOnNetworkIntentPolicyBasedServices + } + return json.Marshal(objectMap) +} + +// SecurityAdminConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type SecurityAdminConfigurationsDeleteFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(SecurityAdminConfigurationsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *SecurityAdminConfigurationsDeleteFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for SecurityAdminConfigurationsDeleteFuture.Result. +func (future *SecurityAdminConfigurationsDeleteFuture) result(client SecurityAdminConfigurationsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.SecurityAdminConfigurationsDeleteFuture") + return + } + ar.Response = future.Response() + return +} + // SecurityGroup networkSecurityGroup resource. type SecurityGroup struct { autorest.Response `json:"-"` @@ -37905,6 +43293,8 @@ type SecurityGroupNetworkInterface struct { // SecurityGroupPropertiesFormat network Security Group resource. type SecurityGroupPropertiesFormat struct { + // FlushConnection - When enabled, flows created from Network Security Group connections will be re-evaluated when rules are updates. Initial enablement will trigger re-evaluation. + FlushConnection *bool `json:"flushConnection,omitempty"` // SecurityRules - A collection of security rules of the network security group. SecurityRules *[]SecurityRule `json:"securityRules,omitempty"` // DefaultSecurityRules - READ-ONLY; The default security rules of network security group. @@ -37924,6 +43314,9 @@ type SecurityGroupPropertiesFormat struct { // MarshalJSON is the custom marshaler for SecurityGroupPropertiesFormat. func (sgpf SecurityGroupPropertiesFormat) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) + if sgpf.FlushConnection != nil { + objectMap["flushConnection"] = sgpf.FlushConnection + } if sgpf.SecurityRules != nil { objectMap["securityRules"] = sgpf.SecurityRules } @@ -38319,7 +43712,7 @@ func NewSecurityPartnerProviderListResultPage(cur SecurityPartnerProviderListRes type SecurityPartnerProviderPropertiesFormat struct { // ProvisioningState - READ-ONLY; The provisioning state of the Security Partner Provider resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - // SecurityProviderName - The security provider name. Possible values include: 'SecurityProviderNameZScaler', 'SecurityProviderNameIBoss', 'SecurityProviderNameCheckpoint' + // SecurityProviderName - The security provider name. Possible values include: 'ZScaler', 'IBoss', 'Checkpoint' SecurityProviderName SecurityProviderName `json:"securityProviderName,omitempty"` // ConnectionStatus - READ-ONLY; The connection status with the Security Partner Provider. Possible values include: 'SecurityPartnerProviderConnectionStatusUnknown', 'SecurityPartnerProviderConnectionStatusPartiallyConnected', 'SecurityPartnerProviderConnectionStatusConnected', 'SecurityPartnerProviderConnectionStatusNotConnected' ConnectionStatus SecurityPartnerProviderConnectionStatus `json:"connectionStatus,omitempty"` @@ -39887,67 +45280,454 @@ func (iter *ServiceTagInformationListResultIterator) NextWithContext(ctx context // Next advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (iter *ServiceTagInformationListResultIterator) Next() error { +func (iter *ServiceTagInformationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ServiceTagInformationListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ServiceTagInformationListResultIterator) Response() ServiceTagInformationListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ServiceTagInformationListResultIterator) Value() ServiceTagInformation { + if !iter.page.NotDone() { + return ServiceTagInformation{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ServiceTagInformationListResultIterator type. +func NewServiceTagInformationListResultIterator(page ServiceTagInformationListResultPage) ServiceTagInformationListResultIterator { + return ServiceTagInformationListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (stilr ServiceTagInformationListResult) IsEmpty() bool { + return stilr.Value == nil || len(*stilr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (stilr ServiceTagInformationListResult) hasNextLink() bool { + return stilr.NextLink != nil && len(*stilr.NextLink) != 0 +} + +// serviceTagInformationListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (stilr ServiceTagInformationListResult) serviceTagInformationListResultPreparer(ctx context.Context) (*http.Request, error) { + if !stilr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(stilr.NextLink))) +} + +// ServiceTagInformationListResultPage contains a page of ServiceTagInformation values. +type ServiceTagInformationListResultPage struct { + fn func(context.Context, ServiceTagInformationListResult) (ServiceTagInformationListResult, error) + stilr ServiceTagInformationListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ServiceTagInformationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ServiceTagInformationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.stilr) + if err != nil { + return err + } + page.stilr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ServiceTagInformationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ServiceTagInformationListResultPage) NotDone() bool { + return !page.stilr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ServiceTagInformationListResultPage) Response() ServiceTagInformationListResult { + return page.stilr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ServiceTagInformationListResultPage) Values() []ServiceTagInformation { + if page.stilr.IsEmpty() { + return nil + } + return *page.stilr.Value +} + +// Creates a new instance of the ServiceTagInformationListResultPage type. +func NewServiceTagInformationListResultPage(cur ServiceTagInformationListResult, getNextPage func(context.Context, ServiceTagInformationListResult) (ServiceTagInformationListResult, error)) ServiceTagInformationListResultPage { + return ServiceTagInformationListResultPage{ + fn: getNextPage, + stilr: cur, + } +} + +// ServiceTagInformationPropertiesFormat properties of the service tag information. +type ServiceTagInformationPropertiesFormat struct { + // ChangeNumber - READ-ONLY; The iteration number of service tag. + ChangeNumber *string `json:"changeNumber,omitempty"` + // Region - READ-ONLY; The region of service tag. + Region *string `json:"region,omitempty"` + // SystemService - READ-ONLY; The name of system service. + SystemService *string `json:"systemService,omitempty"` + // AddressPrefixes - READ-ONLY; The list of IP address prefixes. + AddressPrefixes *[]string `json:"addressPrefixes,omitempty"` + // State - READ-ONLY; The state of the service tag. + State *string `json:"state,omitempty"` +} + +// MarshalJSON is the custom marshaler for ServiceTagInformationPropertiesFormat. +func (stipf ServiceTagInformationPropertiesFormat) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// ServiceTagsListResult response for the ListServiceTags API service call. +type ServiceTagsListResult struct { + autorest.Response `json:"-"` + // Name - READ-ONLY; The name of the cloud. + Name *string `json:"name,omitempty"` + // ID - READ-ONLY; The ID of the cloud. + ID *string `json:"id,omitempty"` + // Type - READ-ONLY; The azure resource type. + Type *string `json:"type,omitempty"` + // ChangeNumber - READ-ONLY; The iteration number. + ChangeNumber *string `json:"changeNumber,omitempty"` + // Cloud - READ-ONLY; The name of the cloud. + Cloud *string `json:"cloud,omitempty"` + // Values - READ-ONLY; The list of service tag information resources. + Values *[]ServiceTagInformation `json:"values,omitempty"` + // NextLink - READ-ONLY; The URL to get next page of service tag information resources. + NextLink *string `json:"nextLink,omitempty"` +} + +// MarshalJSON is the custom marshaler for ServiceTagsListResult. +func (stlr ServiceTagsListResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + return json.Marshal(objectMap) +} + +// SessionIds list of session IDs. +type SessionIds struct { + // SessionIds - List of session IDs. + SessionIds *[]string `json:"sessionIds,omitempty"` +} + +// SignatureOverridesFilterValuesQuery describes the filter values possibles for a given column +type SignatureOverridesFilterValuesQuery struct { + // FilterName - Describes the name of the column which values will be returned + FilterName *string `json:"filterName,omitempty"` +} + +// SignatureOverridesFilterValuesResponse describes the list of all possible values for a specific filter +// value +type SignatureOverridesFilterValuesResponse struct { + autorest.Response `json:"-"` + // FilterValues - Describes the possible values + FilterValues *[]string `json:"filterValues,omitempty"` +} + +// SignaturesOverrides contains all specific policy signatures overrides for the IDPS +type SignaturesOverrides struct { + autorest.Response `json:"-"` + // Name - Contains the name of the resource (default) + Name *string `json:"name,omitempty"` + // ID - Will contain the resource id of the signature override resource + ID *string `json:"id,omitempty"` + // Type - Will contain the type of the resource: Microsoft.Network/firewallPolicies/intrusionDetectionSignaturesOverrides + Type *string `json:"type,omitempty"` + // Properties - Will contain the properties of the resource (the actual signature overrides) + Properties *SignaturesOverridesProperties `json:"properties,omitempty"` +} + +// SignaturesOverridesList describes an object containing an array with a single item +type SignaturesOverridesList struct { + autorest.Response `json:"-"` + // Value - Describes a list consisting exactly one item describing the policy's signature override status + Value *[]SignaturesOverrides `json:"value,omitempty"` +} + +// SignaturesOverridesProperties will contain the properties of the resource (the actual signature +// overrides) +type SignaturesOverridesProperties struct { + Signatures map[string]*string `json:"signatures"` +} + +// MarshalJSON is the custom marshaler for SignaturesOverridesProperties. +func (so SignaturesOverridesProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if so.Signatures != nil { + objectMap["signatures"] = so.Signatures + } + return json.Marshal(objectMap) +} + +// SingleQueryResult ... +type SingleQueryResult struct { + // SignatureID - The ID of the signature + SignatureID *int32 `json:"signatureId,omitempty"` + // Mode - The current mode enforced, 0 - Disabled, 1 - Alert, 2 -Deny + Mode *int32 `json:"mode,omitempty"` + // Severity - Describes the severity of signature: 1 - Low, 2 - Medium, 3 - High + Severity *int32 `json:"severity,omitempty"` + // Direction - Describes in which direction signature is being enforced: 0 - Inbound, 1 - OutBound, 2 - Bidirectional + Direction *int32 `json:"direction,omitempty"` + // Group - Describes the groups the signature belongs to + Group *string `json:"group,omitempty"` + // Description - Describes what is the signature enforces + Description *string `json:"description,omitempty"` + // Protocol - Describes the protocol the signatures is being enforced in + Protocol *string `json:"protocol,omitempty"` + // SourcePorts - Describes the list of source ports related to this signature + SourcePorts *[]string `json:"sourcePorts,omitempty"` + // DestinationPorts - Describes the list of destination ports related to this signature + DestinationPorts *[]string `json:"destinationPorts,omitempty"` + // LastUpdated - Describes the last updated time of the signature (provided from 3rd party vendor) + LastUpdated *string `json:"lastUpdated,omitempty"` + // InheritedFromParentPolicy - Describes if this override is inherited from base policy or not + InheritedFromParentPolicy *bool `json:"inheritedFromParentPolicy,omitempty"` +} + +// Sku the sku of this Bastion Host. +type Sku struct { + // Name - The name of this Bastion Host. Possible values include: 'BastionHostSkuNameBasic', 'BastionHostSkuNameStandard' + Name BastionHostSkuName `json:"name,omitempty"` +} + +// StaticMember staticMember Item. +type StaticMember struct { + autorest.Response `json:"-"` + // StaticMemberProperties - The Static Member properties + *StaticMemberProperties `json:"properties,omitempty"` + // SystemData - READ-ONLY; The system metadata related to this resource. + SystemData *SystemData `json:"systemData,omitempty"` + // ID - READ-ONLY; Resource ID. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticMember. +func (sm StaticMember) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sm.StaticMemberProperties != nil { + objectMap["properties"] = sm.StaticMemberProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for StaticMember struct. +func (sm *StaticMember) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var staticMemberProperties StaticMemberProperties + err = json.Unmarshal(*v, &staticMemberProperties) + if err != nil { + return err + } + sm.StaticMemberProperties = &staticMemberProperties + } + case "systemData": + if v != nil { + var systemData SystemData + err = json.Unmarshal(*v, &systemData) + if err != nil { + return err + } + sm.SystemData = &systemData + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + sm.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + sm.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + sm.Type = &typeVar + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + sm.Etag = &etag + } + } + } + + return nil +} + +// StaticMemberListResult result of the request to list StaticMember. It contains a list of groups and a +// URL link to get the next set of results. +type StaticMemberListResult struct { + autorest.Response `json:"-"` + // Value - Gets a page of StaticMember + Value *[]StaticMember `json:"value,omitempty"` + // NextLink - Gets the URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// StaticMemberListResultIterator provides access to a complete listing of StaticMember values. +type StaticMemberListResultIterator struct { + i int + page StaticMemberListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *StaticMemberListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMemberListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *StaticMemberListResultIterator) Next() error { return iter.NextWithContext(context.Background()) } // NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ServiceTagInformationListResultIterator) NotDone() bool { +func (iter StaticMemberListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) } // Response returns the raw server response from the last page request. -func (iter ServiceTagInformationListResultIterator) Response() ServiceTagInformationListResult { +func (iter StaticMemberListResultIterator) Response() StaticMemberListResult { return iter.page.Response() } // Value returns the current value or a zero-initialized value if the // iterator has advanced beyond the end of the collection. -func (iter ServiceTagInformationListResultIterator) Value() ServiceTagInformation { +func (iter StaticMemberListResultIterator) Value() StaticMember { if !iter.page.NotDone() { - return ServiceTagInformation{} + return StaticMember{} } return iter.page.Values()[iter.i] } -// Creates a new instance of the ServiceTagInformationListResultIterator type. -func NewServiceTagInformationListResultIterator(page ServiceTagInformationListResultPage) ServiceTagInformationListResultIterator { - return ServiceTagInformationListResultIterator{page: page} +// Creates a new instance of the StaticMemberListResultIterator type. +func NewStaticMemberListResultIterator(page StaticMemberListResultPage) StaticMemberListResultIterator { + return StaticMemberListResultIterator{page: page} } // IsEmpty returns true if the ListResult contains no values. -func (stilr ServiceTagInformationListResult) IsEmpty() bool { - return stilr.Value == nil || len(*stilr.Value) == 0 +func (smlr StaticMemberListResult) IsEmpty() bool { + return smlr.Value == nil || len(*smlr.Value) == 0 } // hasNextLink returns true if the NextLink is not empty. -func (stilr ServiceTagInformationListResult) hasNextLink() bool { - return stilr.NextLink != nil && len(*stilr.NextLink) != 0 +func (smlr StaticMemberListResult) hasNextLink() bool { + return smlr.NextLink != nil && len(*smlr.NextLink) != 0 } -// serviceTagInformationListResultPreparer prepares a request to retrieve the next set of results. +// staticMemberListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (stilr ServiceTagInformationListResult) serviceTagInformationListResultPreparer(ctx context.Context) (*http.Request, error) { - if !stilr.hasNextLink() { +func (smlr StaticMemberListResult) staticMemberListResultPreparer(ctx context.Context) (*http.Request, error) { + if !smlr.hasNextLink() { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(stilr.NextLink))) + autorest.WithBaseURL(to.String(smlr.NextLink))) } -// ServiceTagInformationListResultPage contains a page of ServiceTagInformation values. -type ServiceTagInformationListResultPage struct { - fn func(context.Context, ServiceTagInformationListResult) (ServiceTagInformationListResult, error) - stilr ServiceTagInformationListResult +// StaticMemberListResultPage contains a page of StaticMember values. +type StaticMemberListResultPage struct { + fn func(context.Context, StaticMemberListResult) (StaticMemberListResult, error) + smlr StaticMemberListResult } // NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ServiceTagInformationListResultPage) NextWithContext(ctx context.Context) (err error) { +func (page *StaticMemberListResultPage) NextWithContext(ctx context.Context) (err error) { if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ServiceTagInformationListResultPage.NextWithContext") + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMemberListResultPage.NextWithContext") defer func() { sc := -1 if page.Response().Response.Response != nil { @@ -39957,11 +45737,11 @@ func (page *ServiceTagInformationListResultPage) NextWithContext(ctx context.Con }() } for { - next, err := page.fn(ctx, page.stilr) + next, err := page.fn(ctx, page.smlr) if err != nil { return err } - page.stilr = next + page.smlr = next if !next.hasNextLink() || !next.IsEmpty() { break } @@ -39972,168 +45752,55 @@ func (page *ServiceTagInformationListResultPage) NextWithContext(ctx context.Con // Next advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. // Deprecated: Use NextWithContext() instead. -func (page *ServiceTagInformationListResultPage) Next() error { +func (page *StaticMemberListResultPage) Next() error { return page.NextWithContext(context.Background()) } // NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ServiceTagInformationListResultPage) NotDone() bool { - return !page.stilr.IsEmpty() +func (page StaticMemberListResultPage) NotDone() bool { + return !page.smlr.IsEmpty() } // Response returns the raw server response from the last page request. -func (page ServiceTagInformationListResultPage) Response() ServiceTagInformationListResult { - return page.stilr +func (page StaticMemberListResultPage) Response() StaticMemberListResult { + return page.smlr } // Values returns the slice of values for the current page or nil if there are no values. -func (page ServiceTagInformationListResultPage) Values() []ServiceTagInformation { - if page.stilr.IsEmpty() { +func (page StaticMemberListResultPage) Values() []StaticMember { + if page.smlr.IsEmpty() { return nil } - return *page.stilr.Value + return *page.smlr.Value } -// Creates a new instance of the ServiceTagInformationListResultPage type. -func NewServiceTagInformationListResultPage(cur ServiceTagInformationListResult, getNextPage func(context.Context, ServiceTagInformationListResult) (ServiceTagInformationListResult, error)) ServiceTagInformationListResultPage { - return ServiceTagInformationListResultPage{ - fn: getNextPage, - stilr: cur, +// Creates a new instance of the StaticMemberListResultPage type. +func NewStaticMemberListResultPage(cur StaticMemberListResult, getNextPage func(context.Context, StaticMemberListResult) (StaticMemberListResult, error)) StaticMemberListResultPage { + return StaticMemberListResultPage{ + fn: getNextPage, + smlr: cur, } } -// ServiceTagInformationPropertiesFormat properties of the service tag information. -type ServiceTagInformationPropertiesFormat struct { - // ChangeNumber - READ-ONLY; The iteration number of service tag. - ChangeNumber *string `json:"changeNumber,omitempty"` - // Region - READ-ONLY; The region of service tag. +// StaticMemberProperties properties of static member. +type StaticMemberProperties struct { + // ResourceID - Resource Id. + ResourceID *string `json:"resourceId,omitempty"` + // Region - READ-ONLY; Resource region. Region *string `json:"region,omitempty"` - // SystemService - READ-ONLY; The name of system service. - SystemService *string `json:"systemService,omitempty"` - // AddressPrefixes - READ-ONLY; The list of IP address prefixes. - AddressPrefixes *[]string `json:"addressPrefixes,omitempty"` - // State - READ-ONLY; The state of the service tag. - State *string `json:"state,omitempty"` -} - -// MarshalJSON is the custom marshaler for ServiceTagInformationPropertiesFormat. -func (stipf ServiceTagInformationPropertiesFormat) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ServiceTagsListResult response for the ListServiceTags API service call. -type ServiceTagsListResult struct { - autorest.Response `json:"-"` - // Name - READ-ONLY; The name of the cloud. - Name *string `json:"name,omitempty"` - // ID - READ-ONLY; The ID of the cloud. - ID *string `json:"id,omitempty"` - // Type - READ-ONLY; The azure resource type. - Type *string `json:"type,omitempty"` - // ChangeNumber - READ-ONLY; The iteration number. - ChangeNumber *string `json:"changeNumber,omitempty"` - // Cloud - READ-ONLY; The name of the cloud. - Cloud *string `json:"cloud,omitempty"` - // Values - READ-ONLY; The list of service tag information resources. - Values *[]ServiceTagInformation `json:"values,omitempty"` - // NextLink - READ-ONLY; The URL to get next page of service tag information resources. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for ServiceTagsListResult. -func (stlr ServiceTagsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// SessionIds list of session IDs. -type SessionIds struct { - // SessionIds - List of session IDs. - SessionIds *[]string `json:"sessionIds,omitempty"` -} - -// SignatureOverridesFilterValuesQuery describes the filter values possibles for a given column -type SignatureOverridesFilterValuesQuery struct { - // FilterName - Describes the name of the column which values will be returned - FilterName *string `json:"filterName,omitempty"` -} - -// SignatureOverridesFilterValuesResponse describes the list of all possible values for a specific filter -// value -type SignatureOverridesFilterValuesResponse struct { - autorest.Response `json:"-"` - // FilterValues - Describes the possible values - FilterValues *[]string `json:"filterValues,omitempty"` -} - -// SignaturesOverrides contains all specific policy signatures overrides for the IDPS -type SignaturesOverrides struct { - autorest.Response `json:"-"` - // Name - Contains the name of the resource (default) - Name *string `json:"name,omitempty"` - // ID - Will contain the resource id of the signature override resource - ID *string `json:"id,omitempty"` - // Type - Will contain the type of the resource: Microsoft.Network/firewallPolicies/intrusionDetectionSignaturesOverrides - Type *string `json:"type,omitempty"` - // Properties - Will contain the properties of the resource (the actual signature overrides) - Properties *SignaturesOverridesProperties `json:"properties,omitempty"` -} - -// SignaturesOverridesList describes an object containing an array with a single item -type SignaturesOverridesList struct { - autorest.Response `json:"-"` - // Value - Describes a list consisting exactly one item describing the policy's signature override status - Value *[]SignaturesOverrides `json:"value,omitempty"` -} - -// SignaturesOverridesProperties will contain the properties of the resource (the actual signature -// overrides) -type SignaturesOverridesProperties struct { - Signatures map[string]*string `json:"signatures"` + // ProvisioningState - READ-ONLY; The provisioning state of the scope assignment resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` } -// MarshalJSON is the custom marshaler for SignaturesOverridesProperties. -func (so SignaturesOverridesProperties) MarshalJSON() ([]byte, error) { +// MarshalJSON is the custom marshaler for StaticMemberProperties. +func (smp StaticMemberProperties) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) - if so.Signatures != nil { - objectMap["signatures"] = so.Signatures + if smp.ResourceID != nil { + objectMap["resourceId"] = smp.ResourceID } return json.Marshal(objectMap) } -// SingleQueryResult ... -type SingleQueryResult struct { - // SignatureID - The ID of the signature - SignatureID *int32 `json:"signatureId,omitempty"` - // Mode - The current mode enforced, 0 - Disabled, 1 - Alert, 2 -Deny - Mode *int32 `json:"mode,omitempty"` - // Severity - Describes the severity of signature: 1 - Low, 2 - Medium, 3 - High - Severity *int32 `json:"severity,omitempty"` - // Direction - Describes in which direction signature is being enforced: 0 - Inbound, 1 - OutBound, 2 - Bidirectional - Direction *int32 `json:"direction,omitempty"` - // Group - Describes the groups the signature belongs to - Group *string `json:"group,omitempty"` - // Description - Describes what is the signature enforces - Description *string `json:"description,omitempty"` - // Protocol - Describes the protocol the signatures is being enforced in - Protocol *string `json:"protocol,omitempty"` - // SourcePorts - Describes the list of source ports related to this signature - SourcePorts *[]string `json:"sourcePorts,omitempty"` - // DestinationPorts - Describes the list of destination ports related to this signature - DestinationPorts *[]string `json:"destinationPorts,omitempty"` - // LastUpdated - Describes the last updated time of the signature (provided from 3rd party vendor) - LastUpdated *string `json:"lastUpdated,omitempty"` - // InheritedFromParentPolicy - Describes if this override is inherited from base policy or not - InheritedFromParentPolicy *bool `json:"inheritedFromParentPolicy,omitempty"` -} - -// Sku the sku of this Bastion Host. -type Sku struct { - // Name - The name of this Bastion Host. Possible values include: 'BastionHostSkuNameBasic', 'BastionHostSkuNameStandard' - Name BastionHostSkuName `json:"name,omitempty"` -} - // StaticRoute list of all Static Routes. type StaticRoute struct { // Name - The name of the StaticRoute that is unique within a VnetRoute. @@ -40144,6 +45811,24 @@ type StaticRoute struct { NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"` } +// StaticRoutesConfig configuration for static routes on this HubVnetConnectionConfiguration for static +// routes on this HubVnetConnection. +type StaticRoutesConfig struct { + // PropagateStaticRoutes - READ-ONLY; Boolean indicating whether static routes on this connection are automatically propagate to route tables which this connection propagates to. + PropagateStaticRoutes *bool `json:"propagateStaticRoutes,omitempty"` + // VnetLocalRouteOverrideCriteria - Parameter determining whether NVA in spoke vnet is bypassed for traffic with destination in spoke. Possible values include: 'VnetLocalRouteOverrideCriteriaContains', 'VnetLocalRouteOverrideCriteriaEqual' + VnetLocalRouteOverrideCriteria VnetLocalRouteOverrideCriteria `json:"vnetLocalRouteOverrideCriteria,omitempty"` +} + +// MarshalJSON is the custom marshaler for StaticRoutesConfig. +func (src StaticRoutesConfig) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if src.VnetLocalRouteOverrideCriteria != "" { + objectMap["vnetLocalRouteOverrideCriteria"] = src.VnetLocalRouteOverrideCriteria + } + return json.Marshal(objectMap) +} + // String ... type String struct { autorest.Response `json:"-"` @@ -40664,6 +46349,56 @@ type SubResource struct { ID *string `json:"id,omitempty"` } +// SwapResource swapResource to represent slot type on the specified cloud service. +type SwapResource struct { + autorest.Response `json:"-"` + // ID - READ-ONLY; Resource Id. + ID *string `json:"id,omitempty"` + // Name - READ-ONLY; Resource name. + Name *string `json:"name,omitempty"` + // Type - READ-ONLY; Resource type. + Type *string `json:"type,omitempty"` + Properties *SwapResourceProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for SwapResource. +func (sr SwapResource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if sr.Properties != nil { + objectMap["properties"] = sr.Properties + } + return json.Marshal(objectMap) +} + +// SwapResourceListResult swapResource List with single entry to represent slot type on the specified cloud +// service. +type SwapResourceListResult struct { + autorest.Response `json:"-"` + Value *[]SwapResource `json:"value,omitempty"` +} + +// SwapResourceProperties swap resource properties +type SwapResourceProperties struct { + // SlotType - Specifies slot info on a cloud service. Possible values include: 'Production', 'Staging' + SlotType SlotType `json:"slotType,omitempty"` +} + +// SystemData metadata pertaining to creation and last modification of the resource. +type SystemData struct { + // CreatedBy - The identity that created the resource. + CreatedBy *string `json:"createdBy,omitempty"` + // CreatedByType - The type of identity that created the resource. Possible values include: 'User', 'Application', 'ManagedIdentity', 'Key' + CreatedByType CreatedByType `json:"createdByType,omitempty"` + // CreatedAt - The timestamp of resource creation (UTC). + CreatedAt *date.Time `json:"createdAt,omitempty"` + // LastModifiedBy - The identity that last modified the resource. + LastModifiedBy *string `json:"lastModifiedBy,omitempty"` + // LastModifiedByType - The type of identity that last modified the resource. Possible values include: 'User', 'Application', 'ManagedIdentity', 'Key' + LastModifiedByType CreatedByType `json:"lastModifiedByType,omitempty"` + // LastModifiedAt - The type of identity that last modified the resource. + LastModifiedAt *date.Time `json:"lastModifiedAt,omitempty"` +} + // TagsObject tags object for patch operations. type TagsObject struct { // Tags - Resource tags. @@ -40707,7 +46442,7 @@ type TopologyAssociation struct { Name *string `json:"name,omitempty"` // ResourceID - The ID of the resource that is associated with the parent resource. ResourceID *string `json:"resourceId,omitempty"` - // AssociationType - The association type of the child resource to the parent resource. Possible values include: 'AssociationTypeAssociated', 'AssociationTypeContains' + // AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains' AssociationType AssociationType `json:"associationType,omitempty"` } @@ -41090,7 +46825,7 @@ func NewUsagesListResultPage(cur UsagesListResult, getNextPage func(context.Cont type VerificationIPFlowParameters struct { // TargetResourceID - The ID of the target resource to perform next-hop on. TargetResourceID *string `json:"targetResourceId,omitempty"` - // Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'DirectionInbound', 'DirectionOutbound' + // Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound' Direction Direction `json:"direction,omitempty"` // Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP' Protocol IPFlowProtocol `json:"protocol,omitempty"` @@ -41109,12 +46844,49 @@ type VerificationIPFlowParameters struct { // VerificationIPFlowResult results of IP flow verification on the target resource. type VerificationIPFlowResult struct { autorest.Response `json:"-"` - // Access - Indicates whether the traffic is allowed or denied. Possible values include: 'AccessAllow', 'AccessDeny' + // Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny' Access Access `json:"access,omitempty"` // RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed. RuleName *string `json:"ruleName,omitempty"` } +// VipSwapCreateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. +type VipSwapCreateFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VipSwapClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VipSwapCreateFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VipSwapCreateFuture.Result. +func (future *VipSwapCreateFuture) result(client VipSwapClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapCreateFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.VipSwapCreateFuture") + return + } + ar.Response = future.Response() + return +} + // VirtualAppliance networkVirtualAppliance Resource. type VirtualAppliance struct { autorest.Response `json:"-"` @@ -41433,7 +47205,7 @@ type VirtualAppliancePropertiesFormat struct { CloudInitConfigurationBlobs *[]string `json:"cloudInitConfigurationBlobs,omitempty"` // CloudInitConfiguration - CloudInitConfiguration string in plain text. CloudInitConfiguration *string `json:"cloudInitConfiguration,omitempty"` - // VirtualApplianceAsn - VirtualAppliance ASN. + // VirtualApplianceAsn - VirtualAppliance ASN. Microsoft private, public and IANA reserved ASN are not supported. VirtualApplianceAsn *int64 `json:"virtualApplianceAsn,omitempty"` // SSHPublicKey - Public key for SSH login. SSHPublicKey *string `json:"sshPublicKey,omitempty"` @@ -41445,6 +47217,12 @@ type VirtualAppliancePropertiesFormat struct { InboundSecurityRules *[]SubResource `json:"inboundSecurityRules,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` + // DeploymentType - READ-ONLY; The deployment type. PartnerManaged for the SaaS NVA + DeploymentType *string `json:"deploymentType,omitempty"` + // Delegation - The delegation for the Virtual Appliance + Delegation *DelegationProperties `json:"delegation,omitempty"` + // PartnerManagedResource - The delegation for the Virtual Appliance + PartnerManagedResource *PartnerManagedResourceProperties `json:"partnerManagedResource,omitempty"` } // MarshalJSON is the custom marshaler for VirtualAppliancePropertiesFormat. @@ -41471,6 +47249,12 @@ func (vapf VirtualAppliancePropertiesFormat) MarshalJSON() ([]byte, error) { if vapf.SSHPublicKey != nil { objectMap["sshPublicKey"] = vapf.SSHPublicKey } + if vapf.Delegation != nil { + objectMap["delegation"] = vapf.Delegation + } + if vapf.PartnerManagedResource != nil { + objectMap["partnerManagedResource"] = vapf.PartnerManagedResource + } return json.Marshal(objectMap) } @@ -42654,6 +48438,8 @@ type VirtualHubProperties struct { BgpConnections *[]SubResource `json:"bgpConnections,omitempty"` // IPConfigurations - READ-ONLY; List of references to IpConfigurations. IPConfigurations *[]SubResource `json:"ipConfigurations,omitempty"` + // RouteMaps - READ-ONLY; List of references to RouteMaps. + RouteMaps *[]SubResource `json:"routeMaps,omitempty"` // VirtualRouterAsn - VirtualRouter ASN. VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"` // VirtualRouterIps - VirtualRouter IPs. @@ -42664,6 +48450,8 @@ type VirtualHubProperties struct { PreferredRoutingGateway PreferredRoutingGateway `json:"preferredRoutingGateway,omitempty"` // HubRoutingPreference - The hubRoutingPreference of this VirtualHub. Possible values include: 'HubRoutingPreferenceExpressRoute', 'HubRoutingPreferenceVpnGateway', 'HubRoutingPreferenceASPath' HubRoutingPreference HubRoutingPreference `json:"hubRoutingPreference,omitempty"` + // VirtualRouterAutoScaleConfiguration - The VirtualHub Router autoscale configuration. + VirtualRouterAutoScaleConfiguration *VirtualRouterAutoScaleConfiguration `json:"virtualRouterAutoScaleConfiguration,omitempty"` } // MarshalJSON is the custom marshaler for VirtualHubProperties. @@ -42720,6 +48508,9 @@ func (vhp VirtualHubProperties) MarshalJSON() ([]byte, error) { if vhp.HubRoutingPreference != "" { objectMap["hubRoutingPreference"] = vhp.HubRoutingPreference } + if vhp.VirtualRouterAutoScaleConfiguration != nil { + objectMap["virtualRouterAutoScaleConfiguration"] = vhp.VirtualRouterAutoScaleConfiguration + } return json.Marshal(objectMap) } @@ -43047,6 +48838,80 @@ func (future *VirtualHubsGetEffectiveVirtualHubRoutesFuture) result(client Virtu return } +// VirtualHubsGetInboundRoutesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualHubsGetInboundRoutesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualHubsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualHubsGetInboundRoutesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualHubsGetInboundRoutesFuture.Result. +func (future *VirtualHubsGetInboundRoutesFuture) result(client VirtualHubsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsGetInboundRoutesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.VirtualHubsGetInboundRoutesFuture") + return + } + ar.Response = future.Response() + return +} + +// VirtualHubsGetOutboundRoutesFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualHubsGetOutboundRoutesFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualHubsClient) (autorest.Response, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualHubsGetOutboundRoutesFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualHubsGetOutboundRoutesFuture.Result. +func (future *VirtualHubsGetOutboundRoutesFuture) result(client VirtualHubsClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsGetOutboundRoutesFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + ar.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.VirtualHubsGetOutboundRoutesFuture") + return + } + ar.Response = future.Response() + return +} + // VirtualNetwork virtual Network resource. type VirtualNetwork struct { autorest.Response `json:"-"` @@ -43201,12 +49066,173 @@ type VirtualNetworkConnectionGatewayReference struct { ID *string `json:"id,omitempty"` } +// VirtualNetworkDdosProtectionStatusResult response for GetVirtualNetworkDdosProtectionStatusOperation. +type VirtualNetworkDdosProtectionStatusResult struct { + autorest.Response `json:"-"` + // Value - The Ddos Protection Status Result for each public ip under a virtual network. + Value *[]PublicIPDdosProtectionStatusResult `json:"value,omitempty"` + // NextLink - The URL to get the next set of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// VirtualNetworkDdosProtectionStatusResultIterator provides access to a complete listing of +// PublicIPDdosProtectionStatusResult values. +type VirtualNetworkDdosProtectionStatusResultIterator struct { + i int + page VirtualNetworkDdosProtectionStatusResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *VirtualNetworkDdosProtectionStatusResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkDdosProtectionStatusResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualNetworkDdosProtectionStatusResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter VirtualNetworkDdosProtectionStatusResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter VirtualNetworkDdosProtectionStatusResultIterator) Response() VirtualNetworkDdosProtectionStatusResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter VirtualNetworkDdosProtectionStatusResultIterator) Value() PublicIPDdosProtectionStatusResult { + if !iter.page.NotDone() { + return PublicIPDdosProtectionStatusResult{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the VirtualNetworkDdosProtectionStatusResultIterator type. +func NewVirtualNetworkDdosProtectionStatusResultIterator(page VirtualNetworkDdosProtectionStatusResultPage) VirtualNetworkDdosProtectionStatusResultIterator { + return VirtualNetworkDdosProtectionStatusResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (vndpsr VirtualNetworkDdosProtectionStatusResult) IsEmpty() bool { + return vndpsr.Value == nil || len(*vndpsr.Value) == 0 +} + +// hasNextLink returns true if the NextLink is not empty. +func (vndpsr VirtualNetworkDdosProtectionStatusResult) hasNextLink() bool { + return vndpsr.NextLink != nil && len(*vndpsr.NextLink) != 0 +} + +// virtualNetworkDdosProtectionStatusResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (vndpsr VirtualNetworkDdosProtectionStatusResult) virtualNetworkDdosProtectionStatusResultPreparer(ctx context.Context) (*http.Request, error) { + if !vndpsr.hasNextLink() { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(vndpsr.NextLink))) +} + +// VirtualNetworkDdosProtectionStatusResultPage contains a page of PublicIPDdosProtectionStatusResult +// values. +type VirtualNetworkDdosProtectionStatusResultPage struct { + fn func(context.Context, VirtualNetworkDdosProtectionStatusResult) (VirtualNetworkDdosProtectionStatusResult, error) + vndpsr VirtualNetworkDdosProtectionStatusResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *VirtualNetworkDdosProtectionStatusResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkDdosProtectionStatusResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + for { + next, err := page.fn(ctx, page.vndpsr) + if err != nil { + return err + } + page.vndpsr = next + if !next.hasNextLink() || !next.IsEmpty() { + break + } + } + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualNetworkDdosProtectionStatusResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page VirtualNetworkDdosProtectionStatusResultPage) NotDone() bool { + return !page.vndpsr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page VirtualNetworkDdosProtectionStatusResultPage) Response() VirtualNetworkDdosProtectionStatusResult { + return page.vndpsr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page VirtualNetworkDdosProtectionStatusResultPage) Values() []PublicIPDdosProtectionStatusResult { + if page.vndpsr.IsEmpty() { + return nil + } + return *page.vndpsr.Value +} + +// Creates a new instance of the VirtualNetworkDdosProtectionStatusResultPage type. +func NewVirtualNetworkDdosProtectionStatusResultPage(cur VirtualNetworkDdosProtectionStatusResult, getNextPage func(context.Context, VirtualNetworkDdosProtectionStatusResult) (VirtualNetworkDdosProtectionStatusResult, error)) VirtualNetworkDdosProtectionStatusResultPage { + return VirtualNetworkDdosProtectionStatusResultPage{ + fn: getNextPage, + vndpsr: cur, + } +} + // VirtualNetworkEncryption indicates if encryption is enabled on virtual network and if VM without // encryption is allowed in encrypted VNet. type VirtualNetworkEncryption struct { // Enabled - Indicates if encryption is enabled on the virtual network. Enabled *bool `json:"enabled,omitempty"` - // Enforcement - If the encrypted VNet allows VM that does not support encryption. Possible values include: 'VirtualNetworkEncryptionEnforcementDropUnencrypted', 'VirtualNetworkEncryptionEnforcementAllowUnencrypted' + // Enforcement - If the encrypted VNet allows VM that does not support encryption. Possible values include: 'DropUnencrypted', 'AllowUnencrypted' Enforcement VirtualNetworkEncryptionEnforcement `json:"enforcement,omitempty"` } @@ -43578,9 +49604,9 @@ type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct { VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"` // LocalNetworkGateway2 - The reference to local network gateway resource. LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"` - // ConnectionType - Gateway connection type. Possible values include: 'VirtualNetworkGatewayConnectionTypeIPsec', 'VirtualNetworkGatewayConnectionTypeVnet2Vnet', 'VirtualNetworkGatewayConnectionTypeExpressRoute', 'VirtualNetworkGatewayConnectionTypeVPNClient' + // ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"` - // ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'VirtualNetworkGatewayConnectionProtocolIKEv2', 'VirtualNetworkGatewayConnectionProtocolIKEv1' + // ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1' ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"` // RoutingWeight - The routing weight. RoutingWeight *int32 `json:"routingWeight,omitempty"` @@ -43614,6 +49640,8 @@ type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding. ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"` + // EnablePrivateLinkFastPath - Bypass the ExpressRoute gateway when accessing private-links. ExpressRoute FastPath (expressRouteGatewayBypass) must be enabled. + EnablePrivateLinkFastPath *bool `json:"enablePrivateLinkFastPath,omitempty"` } // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntityPropertiesFormat. @@ -43667,6 +49695,9 @@ func (vngclepf VirtualNetworkGatewayConnectionListEntityPropertiesFormat) Marsha if vngclepf.ExpressRouteGatewayBypass != nil { objectMap["expressRouteGatewayBypass"] = vngclepf.ExpressRouteGatewayBypass } + if vngclepf.EnablePrivateLinkFastPath != nil { + objectMap["enablePrivateLinkFastPath"] = vngclepf.EnablePrivateLinkFastPath + } return json.Marshal(objectMap) } @@ -43854,9 +49885,9 @@ type VirtualNetworkGatewayConnectionPropertiesFormat struct { IngressNatRules *[]SubResource `json:"ingressNatRules,omitempty"` // EgressNatRules - List of egress NatRules. EgressNatRules *[]SubResource `json:"egressNatRules,omitempty"` - // ConnectionType - Gateway connection type. Possible values include: 'VirtualNetworkGatewayConnectionTypeIPsec', 'VirtualNetworkGatewayConnectionTypeVnet2Vnet', 'VirtualNetworkGatewayConnectionTypeExpressRoute', 'VirtualNetworkGatewayConnectionTypeVPNClient' + // ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"` - // ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'VirtualNetworkGatewayConnectionProtocolIKEv2', 'VirtualNetworkGatewayConnectionProtocolIKEv1' + // ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1' ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"` // RoutingWeight - The routing weight. RoutingWeight *int32 `json:"routingWeight,omitempty"` @@ -43894,6 +49925,8 @@ type VirtualNetworkGatewayConnectionPropertiesFormat struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding. ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"` + // EnablePrivateLinkFastPath - Bypass the ExpressRoute gateway when accessing private-links. ExpressRoute FastPath (expressRouteGatewayBypass) must be enabled. + EnablePrivateLinkFastPath *bool `json:"enablePrivateLinkFastPath,omitempty"` } // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionPropertiesFormat. @@ -43959,6 +49992,9 @@ func (vngcpf VirtualNetworkGatewayConnectionPropertiesFormat) MarshalJSON() ([]b if vngcpf.ExpressRouteGatewayBypass != nil { objectMap["expressRouteGatewayBypass"] = vngcpf.ExpressRouteGatewayBypass } + if vngcpf.EnablePrivateLinkFastPath != nil { + objectMap["enablePrivateLinkFastPath"] = vngcpf.EnablePrivateLinkFastPath + } return json.Marshal(objectMap) } @@ -44417,7 +50453,7 @@ func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) er // VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration. type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct { - // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'IPAllocationMethodStatic', 'IPAllocationMethodDynamic' + // PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` // Subnet - The reference to the subnet resource. Subnet *SubResource `json:"subnet,omitempty"` @@ -44880,7 +50916,7 @@ type VirtualNetworkGatewayNatRuleProperties struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // Type - The type of NAT rule for VPN NAT. Possible values include: 'VpnNatRuleTypeStatic', 'VpnNatRuleTypeDynamic' Type VpnNatRuleType `json:"type,omitempty"` - // Mode - The Source NAT direction of a VPN NAT. Possible values include: 'VpnNatRuleModeEgressSnat', 'VpnNatRuleModeIngressSnat' + // Mode - The Source NAT direction of a VPN NAT. Possible values include: 'EgressSnat', 'IngressSnat' Mode VpnNatRuleMode `json:"mode,omitempty"` // InternalMappings - The private IP address internal mapping for NAT. InternalMappings *[]VpnNatRuleMapping `json:"internalMappings,omitempty"` @@ -44991,13 +51027,130 @@ func (future *VirtualNetworkGatewayNatRulesDeleteFuture) result(client VirtualNe return } +// VirtualNetworkGatewayPolicyGroup parameters for VirtualNetworkGatewayPolicyGroup. +type VirtualNetworkGatewayPolicyGroup struct { + // VirtualNetworkGatewayPolicyGroupProperties - Properties of tVirtualNetworkGatewayPolicyGroup. + *VirtualNetworkGatewayPolicyGroupProperties `json:"properties,omitempty"` + // Name - The name of the resource that is unique within a resource group. This name can be used to access the resource. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualNetworkGatewayPolicyGroup. +func (vngpg VirtualNetworkGatewayPolicyGroup) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vngpg.VirtualNetworkGatewayPolicyGroupProperties != nil { + objectMap["properties"] = vngpg.VirtualNetworkGatewayPolicyGroupProperties + } + if vngpg.Name != nil { + objectMap["name"] = vngpg.Name + } + if vngpg.ID != nil { + objectMap["id"] = vngpg.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayPolicyGroup struct. +func (vngpg *VirtualNetworkGatewayPolicyGroup) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var virtualNetworkGatewayPolicyGroupProperties VirtualNetworkGatewayPolicyGroupProperties + err = json.Unmarshal(*v, &virtualNetworkGatewayPolicyGroupProperties) + if err != nil { + return err + } + vngpg.VirtualNetworkGatewayPolicyGroupProperties = &virtualNetworkGatewayPolicyGroupProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vngpg.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + vngpg.Etag = &etag + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vngpg.ID = &ID + } + } + } + + return nil +} + +// VirtualNetworkGatewayPolicyGroupMember vpn Client Connection configuration PolicyGroup member +type VirtualNetworkGatewayPolicyGroupMember struct { + // Name - Name of the VirtualNetworkGatewayPolicyGroupMember. + Name *string `json:"name,omitempty"` + // AttributeType - The Vpn Policy member attribute type. Possible values include: 'CertificateGroupID', 'AADGroupID', 'RadiusAzureGroupID' + AttributeType VpnPolicyMemberAttributeType `json:"attributeType,omitempty"` + // AttributeValue - The value of Attribute used for this VirtualNetworkGatewayPolicyGroupMember. + AttributeValue *string `json:"attributeValue,omitempty"` +} + +// VirtualNetworkGatewayPolicyGroupProperties properties of VirtualNetworkGatewayPolicyGroup. +type VirtualNetworkGatewayPolicyGroupProperties struct { + // IsDefault - Shows if this is a Default VirtualNetworkGatewayPolicyGroup or not. + IsDefault *bool `json:"isDefault,omitempty"` + // Priority - Priority for VirtualNetworkGatewayPolicyGroup. + Priority *int32 `json:"priority,omitempty"` + // PolicyMembers - Multiple PolicyMembers for VirtualNetworkGatewayPolicyGroup. + PolicyMembers *[]VirtualNetworkGatewayPolicyGroupMember `json:"policyMembers,omitempty"` + // VngClientConnectionConfigurations - READ-ONLY; List of references to vngClientConnectionConfigurations. + VngClientConnectionConfigurations *[]SubResource `json:"vngClientConnectionConfigurations,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayPolicyGroup resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for VirtualNetworkGatewayPolicyGroupProperties. +func (vngpgp VirtualNetworkGatewayPolicyGroupProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vngpgp.IsDefault != nil { + objectMap["isDefault"] = vngpgp.IsDefault + } + if vngpgp.Priority != nil { + objectMap["priority"] = vngpgp.Priority + } + if vngpgp.PolicyMembers != nil { + objectMap["policyMembers"] = vngpgp.PolicyMembers + } + return json.Marshal(objectMap) +} + // VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties. type VirtualNetworkGatewayPropertiesFormat struct { // IPConfigurations - IP configurations for virtual network gateway. IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"` // GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute', 'VirtualNetworkGatewayTypeLocalGateway' GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"` - // VpnType - The type of this virtual network gateway. Possible values include: 'VpnTypePolicyBased', 'VpnTypeRouteBased' + // VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased' VpnType VpnType `json:"vpnType,omitempty"` // VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2' VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"` @@ -45015,6 +51168,8 @@ type VirtualNetworkGatewayPropertiesFormat struct { Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"` // VpnClientConfiguration - The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations. VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"` + // VirtualNetworkGatewayPolicyGroups - The reference to the VirtualNetworkGatewayPolicyGroup resource which represents the available VirtualNetworkGatewayPolicyGroup for the gateway. + VirtualNetworkGatewayPolicyGroups *[]VirtualNetworkGatewayPolicyGroup `json:"virtualNetworkGatewayPolicyGroups,omitempty"` // BgpSettings - Virtual network gateway's BGP speaker settings. BgpSettings *BgpSettings `json:"bgpSettings,omitempty"` // CustomRoutes - The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient. @@ -45033,6 +51188,10 @@ type VirtualNetworkGatewayPropertiesFormat struct { NatRules *[]VirtualNetworkGatewayNatRule `json:"natRules,omitempty"` // EnableBgpRouteTranslationForNat - EnableBgpRouteTranslationForNat flag. EnableBgpRouteTranslationForNat *bool `json:"enableBgpRouteTranslationForNat,omitempty"` + // AllowVirtualWanTraffic - Configures this gateway to accept traffic from remote Virtual WAN networks. + AllowVirtualWanTraffic *bool `json:"allowVirtualWanTraffic,omitempty"` + // AllowRemoteVnetTraffic - Configure this gateway to accept traffic from other Azure Virtual Networks. This configuration does not support connectivity to Azure Virtual WAN. + AllowRemoteVnetTraffic *bool `json:"allowRemoteVnetTraffic,omitempty"` } // MarshalJSON is the custom marshaler for VirtualNetworkGatewayPropertiesFormat. @@ -45071,6 +51230,9 @@ func (vngpf VirtualNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) if vngpf.VpnClientConfiguration != nil { objectMap["vpnClientConfiguration"] = vngpf.VpnClientConfiguration } + if vngpf.VirtualNetworkGatewayPolicyGroups != nil { + objectMap["virtualNetworkGatewayPolicyGroups"] = vngpf.VirtualNetworkGatewayPolicyGroups + } if vngpf.BgpSettings != nil { objectMap["bgpSettings"] = vngpf.BgpSettings } @@ -45089,6 +51251,12 @@ func (vngpf VirtualNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) if vngpf.EnableBgpRouteTranslationForNat != nil { objectMap["enableBgpRouteTranslationForNat"] = vngpf.EnableBgpRouteTranslationForNat } + if vngpf.AllowVirtualWanTraffic != nil { + objectMap["allowVirtualWanTraffic"] = vngpf.AllowVirtualWanTraffic + } + if vngpf.AllowRemoteVnetTraffic != nil { + objectMap["allowRemoteVnetTraffic"] = vngpf.AllowRemoteVnetTraffic + } return json.Marshal(objectMap) } @@ -46431,7 +52599,7 @@ type VirtualNetworkPeeringPropertiesFormat struct { RemoteVirtualNetworkEncryption *VirtualNetworkEncryption `json:"remoteVirtualNetworkEncryption,omitempty"` // PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected' PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"` - // PeeringSyncLevel - The peering sync status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringLevelFullyInSync', 'VirtualNetworkPeeringLevelRemoteNotInSync', 'VirtualNetworkPeeringLevelLocalNotInSync', 'VirtualNetworkPeeringLevelLocalAndRemoteNotInSync' + // PeeringSyncLevel - The peering sync status of the virtual network peering. Possible values include: 'FullyInSync', 'RemoteNotInSync', 'LocalNotInSync', 'LocalAndRemoteNotInSync' PeeringSyncLevel VirtualNetworkPeeringLevel `json:"peeringSyncLevel,omitempty"` // ProvisioningState - READ-ONLY; The provisioning state of the virtual network peering resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` @@ -46709,6 +52877,92 @@ func (future *VirtualNetworksDeleteFuture) result(client VirtualNetworksClient) return } +// VirtualNetworksListDdosProtectionStatusAllFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualNetworksListDdosProtectionStatusAllFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualNetworksClient) (VirtualNetworkDdosProtectionStatusResultPage, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualNetworksListDdosProtectionStatusAllFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualNetworksListDdosProtectionStatusAllFuture.Result. +func (future *VirtualNetworksListDdosProtectionStatusAllFuture) result(client VirtualNetworksClient) (vndpsrp VirtualNetworkDdosProtectionStatusResultPage, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksListDdosProtectionStatusAllFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vndpsrp.vndpsr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksListDdosProtectionStatusAllFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vndpsrp.vndpsr.Response.Response, err = future.GetResult(sender); err == nil && vndpsrp.vndpsr.Response.Response.StatusCode != http.StatusNoContent { + vndpsrp, err = client.ListDdosProtectionStatusResponder(vndpsrp.vndpsr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksListDdosProtectionStatusAllFuture", "Result", vndpsrp.vndpsr.Response.Response, "Failure responding to request") + } + } + return +} + +// VirtualNetworksListDdosProtectionStatusFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. +type VirtualNetworksListDdosProtectionStatusFuture struct { + azure.FutureAPI + // Result returns the result of the asynchronous operation. + // If the operation has not completed it will return an error. + Result func(VirtualNetworksClient) (VirtualNetworkDdosProtectionStatusResultPage, error) +} + +// UnmarshalJSON is the custom unmarshaller for CreateFuture. +func (future *VirtualNetworksListDdosProtectionStatusFuture) UnmarshalJSON(body []byte) error { + var azFuture azure.Future + if err := json.Unmarshal(body, &azFuture); err != nil { + return err + } + future.FutureAPI = &azFuture + future.Result = future.result + return nil +} + +// result is the default implementation for VirtualNetworksListDdosProtectionStatusFuture.Result. +func (future *VirtualNetworksListDdosProtectionStatusFuture) result(client VirtualNetworksClient) (vndpsrp VirtualNetworkDdosProtectionStatusResultPage, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksListDdosProtectionStatusFuture", "Result", future.Response(), "Polling failure") + return + } + if !done { + vndpsrp.vndpsr.Response.Response = future.Response() + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksListDdosProtectionStatusFuture") + return + } + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vndpsrp.vndpsr.Response.Response, err = future.GetResult(sender); err == nil && vndpsrp.vndpsr.Response.Response.StatusCode != http.StatusNoContent { + vndpsrp, err = client.ListDdosProtectionStatusResponder(vndpsrp.vndpsr.Response.Response) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksListDdosProtectionStatusFuture", "Result", vndpsrp.vndpsr.Response.Response, "Failure responding to request") + } + } + return +} + // VirtualNetworkTap virtual Network Tap resource. type VirtualNetworkTap struct { autorest.Response `json:"-"` @@ -47243,6 +53497,12 @@ func (vr *VirtualRouter) UnmarshalJSON(body []byte) error { return nil } +// VirtualRouterAutoScaleConfiguration the VirtualHub Router autoscale configuration. +type VirtualRouterAutoScaleConfiguration struct { + // MinCapacity - The minimum number of scale units for VirtualHub Router. + MinCapacity *int32 `json:"minCapacity,omitempty"` +} + // VirtualRouterListResult response for ListVirtualRouters API service call. type VirtualRouterListResult struct { autorest.Response `json:"-"` @@ -48110,7 +54370,7 @@ type VirtualWanSecurityProvider struct { Name *string `json:"name,omitempty"` // URL - Url of the security provider. URL *string `json:"url,omitempty"` - // Type - Name of the security provider. Possible values include: 'VirtualWanSecurityProviderTypeExternal', 'VirtualWanSecurityProviderTypeNative' + // Type - Name of the security provider. Possible values include: 'External', 'Native' Type VirtualWanSecurityProviderType `json:"type,omitempty"` } @@ -48125,7 +54385,7 @@ type VirtualWanSecurityProviders struct { type VirtualWanVpnProfileParameters struct { // VpnServerConfigurationResourceID - VpnServerConfiguration partial resource uri with which VirtualWan is associated to. VpnServerConfigurationResourceID *string `json:"vpnServerConfigurationResourceId,omitempty"` - // AuthenticationMethod - VPN client authentication method. Possible values include: 'AuthenticationMethodEAPTLS', 'AuthenticationMethodEAPMSCHAPv2' + // AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2' AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"` } @@ -48160,6 +54420,8 @@ func (vVar VM) MarshalJSON() ([]byte, error) { // VnetRoute list of routes that control routing from VirtualHub into a virtual network connection. type VnetRoute struct { + // StaticRoutesConfig - Configuration for static routes on this HubVnetConnection. + StaticRoutesConfig *StaticRoutesConfig `json:"staticRoutesConfig,omitempty"` // StaticRoutes - List of all Static Routes. StaticRoutes *[]StaticRoute `json:"staticRoutes,omitempty"` // BgpConnections - READ-ONLY; The list of references to HubBgpConnection objects. @@ -48169,12 +54431,116 @@ type VnetRoute struct { // MarshalJSON is the custom marshaler for VnetRoute. func (vr VnetRoute) MarshalJSON() ([]byte, error) { objectMap := make(map[string]interface{}) + if vr.StaticRoutesConfig != nil { + objectMap["staticRoutesConfig"] = vr.StaticRoutesConfig + } if vr.StaticRoutes != nil { objectMap["staticRoutes"] = vr.StaticRoutes } return json.Marshal(objectMap) } +// VngClientConnectionConfiguration a vpn client connection configuration for client connection +// configuration. +type VngClientConnectionConfiguration struct { + // VngClientConnectionConfigurationProperties - Properties of the vpn client root certificate. + *VngClientConnectionConfigurationProperties `json:"properties,omitempty"` + // Name - The name of the resource that is unique within a resource group. This name can be used to access the resource. + Name *string `json:"name,omitempty"` + // Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated. + Etag *string `json:"etag,omitempty"` + // ID - Resource ID. + ID *string `json:"id,omitempty"` +} + +// MarshalJSON is the custom marshaler for VngClientConnectionConfiguration. +func (vccc VngClientConnectionConfiguration) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vccc.VngClientConnectionConfigurationProperties != nil { + objectMap["properties"] = vccc.VngClientConnectionConfigurationProperties + } + if vccc.Name != nil { + objectMap["name"] = vccc.Name + } + if vccc.ID != nil { + objectMap["id"] = vccc.ID + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for VngClientConnectionConfiguration struct. +func (vccc *VngClientConnectionConfiguration) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var vngClientConnectionConfigurationProperties VngClientConnectionConfigurationProperties + err = json.Unmarshal(*v, &vngClientConnectionConfigurationProperties) + if err != nil { + return err + } + vccc.VngClientConnectionConfigurationProperties = &vngClientConnectionConfigurationProperties + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + vccc.Name = &name + } + case "etag": + if v != nil { + var etag string + err = json.Unmarshal(*v, &etag) + if err != nil { + return err + } + vccc.Etag = &etag + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + vccc.ID = &ID + } + } + } + + return nil +} + +// VngClientConnectionConfigurationProperties properties of VngClientConnectionConfiguration. +type VngClientConnectionConfigurationProperties struct { + // VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient. + VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"` + // VirtualNetworkGatewayPolicyGroups - List of references to virtualNetworkGatewayPolicyGroups + VirtualNetworkGatewayPolicyGroups *[]SubResource `json:"virtualNetworkGatewayPolicyGroups,omitempty"` + // ProvisioningState - READ-ONLY; The provisioning state of the VngClientConnectionConfiguration resource. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateUpdating', 'ProvisioningStateDeleting', 'ProvisioningStateFailed' + ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` +} + +// MarshalJSON is the custom marshaler for VngClientConnectionConfigurationProperties. +func (vcccp VngClientConnectionConfigurationProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if vcccp.VpnClientAddressPool != nil { + objectMap["vpnClientAddressPool"] = vcccp.VpnClientAddressPool + } + if vcccp.VirtualNetworkGatewayPolicyGroups != nil { + objectMap["virtualNetworkGatewayPolicyGroups"] = vcccp.VirtualNetworkGatewayPolicyGroups + } + return json.Marshal(objectMap) +} + // VpnClientConfiguration vpnClientConfiguration for P2S client. type VpnClientConfiguration struct { // VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient. @@ -48201,6 +54567,8 @@ type VpnClientConfiguration struct { AadAudience *string `json:"aadAudience,omitempty"` // AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication. AadIssuer *string `json:"aadIssuer,omitempty"` + // VngClientConnectionConfigurations - per ip address pool connection policy for virtual network gateway P2S client. + VngClientConnectionConfigurations *[]VngClientConnectionConfiguration `json:"vngClientConnectionConfigurations,omitempty"` } // VpnClientConnectionHealth vpnClientConnectionHealth properties. @@ -48279,7 +54647,7 @@ type VpnClientIPsecParameters struct { IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"` // IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256' IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"` - // IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'IkeEncryptionDES', 'IkeEncryptionDES3', 'IkeEncryptionAES128', 'IkeEncryptionAES192', 'IkeEncryptionAES256', 'IkeEncryptionGCMAES256', 'IkeEncryptionGCMAES128' + // IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128' IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"` // IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128' IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"` @@ -48291,9 +54659,9 @@ type VpnClientIPsecParameters struct { // VpnClientParameters vpn Client Parameters for package generation. type VpnClientParameters struct { - // ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'ProcessorArchitectureAmd64', 'ProcessorArchitectureX86' + // ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86' ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"` - // AuthenticationMethod - VPN client authentication method. Possible values include: 'AuthenticationMethodEAPTLS', 'AuthenticationMethodEAPMSCHAPv2' + // AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2' AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"` // RadiusServerAuthCertificate - The public certificate data for the radius server authentication certificate as a Base-64 encoded string. Required only if external radius authentication has been configured with EAPTLS authentication. RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"` @@ -48599,7 +54967,7 @@ type VpnConnectionProperties struct { DpdTimeoutSeconds *int32 `json:"dpdTimeoutSeconds,omitempty"` // ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected' ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"` - // VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'VirtualNetworkGatewayConnectionProtocolIKEv2', 'VirtualNetworkGatewayConnectionProtocolIKEv1' + // VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1' VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"` // IngressBytesTransferred - READ-ONLY; Ingress bytes transferred. IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"` @@ -49082,7 +55450,7 @@ type VpnGatewayNatRuleProperties struct { ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` // Type - The type of NAT rule for VPN NAT. Possible values include: 'VpnNatRuleTypeStatic', 'VpnNatRuleTypeDynamic' Type VpnNatRuleType `json:"type,omitempty"` - // Mode - The Source NAT direction of a VPN NAT. Possible values include: 'VpnNatRuleModeEgressSnat', 'VpnNatRuleModeIngressSnat' + // Mode - The Source NAT direction of a VPN NAT. Possible values include: 'EgressSnat', 'IngressSnat' Mode VpnNatRuleMode `json:"mode,omitempty"` // InternalMappings - The private IP address internal mapping for NAT. InternalMappings *[]VpnNatRuleMapping `json:"internalMappings,omitempty"` @@ -49780,7 +56148,7 @@ func (vscpg *VpnServerConfigurationPolicyGroup) UnmarshalJSON(body []byte) error type VpnServerConfigurationPolicyGroupMember struct { // Name - Name of the VpnServerConfigurationPolicyGroupMember. Name *string `json:"name,omitempty"` - // AttributeType - The Vpn Policy member attribute type. Possible values include: 'VpnPolicyMemberAttributeTypeCertificateGroupID', 'VpnPolicyMemberAttributeTypeAADGroupID', 'VpnPolicyMemberAttributeTypeRadiusAzureGroupID' + // AttributeType - The Vpn Policy member attribute type. Possible values include: 'CertificateGroupID', 'AADGroupID', 'RadiusAzureGroupID' AttributeType VpnPolicyMemberAttributeType `json:"attributeType,omitempty"` // AttributeValue - The value of Attribute used for this VpnServerConfigurationPolicyGroupMember. AttributeValue *string `json:"attributeValue,omitempty"` @@ -50361,7 +56729,7 @@ type VpnSiteLinkConnectionProperties struct { VpnLinkConnectionMode VpnLinkConnectionMode `json:"vpnLinkConnectionMode,omitempty"` // ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected' ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"` - // VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'VirtualNetworkGatewayConnectionProtocolIKEv2', 'VirtualNetworkGatewayConnectionProtocolIKEv1' + // VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1' VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"` // IngressBytesTransferred - READ-ONLY; Ingress bytes transferred. IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"` diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natgateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natgateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natgateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natgateways.go index 83c7d146cab1..b64e8d6210ce 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natgateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natgateways.go @@ -69,7 +69,7 @@ func (client NatGatewaysClient) CreateOrUpdatePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client NatGatewaysClient) DeletePreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client NatGatewaysClient) GetPreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -319,7 +319,7 @@ func (client NatGatewaysClient) ListPreparer(ctx context.Context, resourceGroupN "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client NatGatewaysClient) ListAllPreparer(ctx context.Context) (*http.Requ "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client NatGatewaysClient) UpdateTagsPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natrules.go index cff3437cc005..4def3d0c5e99 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/natrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/natrules.go @@ -71,7 +71,7 @@ func (client NatRulesClient) CreateOrUpdatePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client NatRulesClient) DeletePreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client NatRulesClient) GetPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client NatRulesClient) ListByVpnGatewayPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/operations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/operations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/operations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/operations.go index 675cac56998a..3c3c885537af 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/operations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/operations.go @@ -71,7 +71,7 @@ func (client OperationsClient) List(ctx context.Context) (result OperationListRe // ListPreparer prepares the List request. func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) { - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/p2svpngateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/p2svpngateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/p2svpngateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/p2svpngateways.go index 8c8e673466a1..446ce1cafd36 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/p2svpngateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/p2svpngateways.go @@ -69,7 +69,7 @@ func (client P2sVpnGatewaysClient) CreateOrUpdatePreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client P2sVpnGatewaysClient) DeletePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -231,7 +231,7 @@ func (client P2sVpnGatewaysClient) DisconnectP2sVpnConnectionsPreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -312,7 +312,7 @@ func (client P2sVpnGatewaysClient) GenerateVpnProfilePreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -400,7 +400,7 @@ func (client P2sVpnGatewaysClient) GetPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -470,7 +470,7 @@ func (client P2sVpnGatewaysClient) GetP2sVpnConnectionHealthPreparer(ctx context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -551,7 +551,7 @@ func (client P2sVpnGatewaysClient) GetP2sVpnConnectionHealthDetailedPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -639,7 +639,7 @@ func (client P2sVpnGatewaysClient) ListPreparer(ctx context.Context) (*http.Requ "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -755,7 +755,7 @@ func (client P2sVpnGatewaysClient) ListByResourceGroupPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -861,7 +861,7 @@ func (client P2sVpnGatewaysClient) ResetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -941,7 +941,7 @@ func (client P2sVpnGatewaysClient) UpdateTagsPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/packetcaptures.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/packetcaptures.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/packetcaptures.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/packetcaptures.go index 3e74bd4af098..d6998421def3 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/packetcaptures.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/packetcaptures.go @@ -93,7 +93,7 @@ func (client PacketCapturesClient) CreatePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -176,7 +176,7 @@ func (client PacketCapturesClient) DeletePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -263,7 +263,7 @@ func (client PacketCapturesClient) GetPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -334,7 +334,7 @@ func (client PacketCapturesClient) GetStatusPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -420,7 +420,7 @@ func (client PacketCapturesClient) ListPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -491,7 +491,7 @@ func (client PacketCapturesClient) StopPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/peerexpressroutecircuitconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/peerexpressroutecircuitconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/peerexpressroutecircuitconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/peerexpressroutecircuitconnections.go index 09c06f561610..dca72d3ce71b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/peerexpressroutecircuitconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/peerexpressroutecircuitconnections.go @@ -81,7 +81,7 @@ func (client PeerExpressRouteCircuitConnectionsClient) GetPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -164,7 +164,7 @@ func (client PeerExpressRouteCircuitConnectionsClient) ListPreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatednszonegroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatednszonegroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatednszonegroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatednszonegroups.go index b0baed9f4b84..362708731bc8 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatednszonegroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatednszonegroups.go @@ -72,7 +72,7 @@ func (client PrivateDNSZoneGroupsClient) CreateOrUpdatePreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client PrivateDNSZoneGroupsClient) DeletePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client PrivateDNSZoneGroupsClient) GetPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client PrivateDNSZoneGroupsClient) ListPreparer(ctx context.Context, priva "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privateendpoints.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privateendpoints.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privateendpoints.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privateendpoints.go index d42061efab6f..f85e9b302271 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privateendpoints.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privateendpoints.go @@ -70,7 +70,7 @@ func (client PrivateEndpointsClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client PrivateEndpointsClient) DeletePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -238,7 +238,7 @@ func (client PrivateEndpointsClient) GetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -320,7 +320,7 @@ func (client PrivateEndpointsClient) ListPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -433,7 +433,7 @@ func (client PrivateEndpointsClient) ListBySubscriptionPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatelinkservices.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatelinkservices.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatelinkservices.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatelinkservices.go index a7610b5b9eb3..15ddba895db5 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/privatelinkservices.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/privatelinkservices.go @@ -68,7 +68,7 @@ func (client PrivateLinkServicesClient) CheckPrivateLinkServiceVisibilityPrepare "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client PrivateLinkServicesClient) CheckPrivateLinkServiceVisibilityByResou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -233,7 +233,7 @@ func (client PrivateLinkServicesClient) CreateOrUpdatePreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -315,7 +315,7 @@ func (client PrivateLinkServicesClient) DeletePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -395,7 +395,7 @@ func (client PrivateLinkServicesClient) DeletePrivateEndpointConnectionPreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -481,7 +481,7 @@ func (client PrivateLinkServicesClient) GetPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -564,7 +564,7 @@ func (client PrivateLinkServicesClient) GetPrivateEndpointConnectionPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -646,7 +646,7 @@ func (client PrivateLinkServicesClient) ListPreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -763,7 +763,7 @@ func (client PrivateLinkServicesClient) ListAutoApprovedPrivateLinkServicesPrepa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -882,7 +882,7 @@ func (client PrivateLinkServicesClient) ListAutoApprovedPrivateLinkServicesByRes "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -995,7 +995,7 @@ func (client PrivateLinkServicesClient) ListBySubscriptionPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1113,7 +1113,7 @@ func (client PrivateLinkServicesClient) ListPrivateEndpointConnectionsPreparer(c "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1230,7 +1230,7 @@ func (client PrivateLinkServicesClient) UpdatePrivateEndpointConnectionPreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/profiles.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/profiles.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/profiles.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/profiles.go index b8b34572aced..59e825dab152 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/profiles.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/profiles.go @@ -76,7 +76,7 @@ func (client ProfilesClient) CreateOrUpdatePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -148,7 +148,7 @@ func (client ProfilesClient) DeletePreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -234,7 +234,7 @@ func (client ProfilesClient) GetPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client ProfilesClient) ListPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -429,7 +429,7 @@ func (client ProfilesClient) ListAllPreparer(ctx context.Context) (*http.Request "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -543,7 +543,7 @@ func (client ProfilesClient) UpdateTagsPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipaddresses.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipaddresses.go similarity index 93% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipaddresses.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipaddresses.go index 6056b28902b1..1e29520f8606 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipaddresses.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipaddresses.go @@ -84,7 +84,7 @@ func (client PublicIPAddressesClient) CreateOrUpdatePreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -128,6 +128,85 @@ func (client PublicIPAddressesClient) CreateOrUpdateResponder(resp *http.Respons return } +// DdosProtectionStatus gets the Ddos Protection Status of a Public IP Address +// Parameters: +// resourceGroupName - the name of the resource group. +// publicIPAddressName - the name of the public IP address. +func (client PublicIPAddressesClient) DdosProtectionStatus(ctx context.Context, resourceGroupName string, publicIPAddressName string) (result PublicIPAddressesDdosProtectionStatusFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.DdosProtectionStatus") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DdosProtectionStatusPreparer(ctx, resourceGroupName, publicIPAddressName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "DdosProtectionStatus", nil, "Failure preparing request") + return + } + + result, err = client.DdosProtectionStatusSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "DdosProtectionStatus", result.Response(), "Failure sending request") + return + } + + return +} + +// DdosProtectionStatusPreparer prepares the DdosProtectionStatus request. +func (client PublicIPAddressesClient) DdosProtectionStatusPreparer(ctx context.Context, resourceGroupName string, publicIPAddressName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "publicIpAddressName": autorest.Encode("path", publicIPAddressName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPAddresses/{publicIpAddressName}/ddosProtectionStatus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DdosProtectionStatusSender sends the DdosProtectionStatus request. The method will close the +// http.Response Body if it receives an error. +func (client PublicIPAddressesClient) DdosProtectionStatusSender(req *http.Request) (future PublicIPAddressesDdosProtectionStatusFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DdosProtectionStatusResponder handles the response to the DdosProtectionStatus request. The method always +// closes the http.Response Body. +func (client PublicIPAddressesClient) DdosProtectionStatusResponder(resp *http.Response) (result PublicIPDdosProtectionStatusResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + // Delete deletes the specified public IP address. // Parameters: // resourceGroupName - the name of the resource group. @@ -166,7 +245,7 @@ func (client PublicIPAddressesClient) DeletePreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -252,7 +331,7 @@ func (client PublicIPAddressesClient) GetPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -340,7 +419,7 @@ func (client PublicIPAddressesClient) GetCloudServicePublicIPAddressPreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -428,7 +507,7 @@ func (client PublicIPAddressesClient) GetVirtualMachineScaleSetPublicIPAddressPr "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -510,7 +589,7 @@ func (client PublicIPAddressesClient) ListPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -623,7 +702,7 @@ func (client PublicIPAddressesClient) ListAllPreparer(ctx context.Context) (*htt "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -741,7 +820,7 @@ func (client PublicIPAddressesClient) ListCloudServicePublicIPAddressesPreparer( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -866,7 +945,7 @@ func (client PublicIPAddressesClient) ListCloudServiceRoleInstancePublicIPAddres "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2017-03-30" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -985,7 +1064,7 @@ func (client PublicIPAddressesClient) ListVirtualMachineScaleSetPublicIPAddresse "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1110,7 +1189,7 @@ func (client PublicIPAddressesClient) ListVirtualMachineScaleSetVMPublicIPAddres "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), } - const APIVersion = "2017-03-30" + const APIVersion = "2018-10-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1224,7 +1303,7 @@ func (client PublicIPAddressesClient) UpdateTagsPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipprefixes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipprefixes.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipprefixes.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipprefixes.go index 5d7a29762114..4b076abe551d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/publicipprefixes.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/publicipprefixes.go @@ -70,7 +70,7 @@ func (client PublicIPPrefixesClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client PublicIPPrefixesClient) DeletePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -238,7 +238,7 @@ func (client PublicIPPrefixesClient) GetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -320,7 +320,7 @@ func (client PublicIPPrefixesClient) ListPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -433,7 +433,7 @@ func (client PublicIPPrefixesClient) ListAllPreparer(ctx context.Context) (*http "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -547,7 +547,7 @@ func (client PublicIPPrefixesClient) UpdateTagsPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/resourcenavigationlinks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/resourcenavigationlinks.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/resourcenavigationlinks.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/resourcenavigationlinks.go index ea9b569fd717..0ac79d4c49e0 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/resourcenavigationlinks.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/resourcenavigationlinks.go @@ -78,7 +78,7 @@ func (client ResourceNavigationLinksClient) ListPreparer(ctx context.Context, re "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilterrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilterrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilterrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilterrules.go index 2f76f810a30f..179b1a7cb287 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilterrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilterrules.go @@ -82,7 +82,7 @@ func (client RouteFilterRulesClient) CreateOrUpdatePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -166,7 +166,7 @@ func (client RouteFilterRulesClient) DeletePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -253,7 +253,7 @@ func (client RouteFilterRulesClient) GetPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -334,7 +334,7 @@ func (client RouteFilterRulesClient) ListByRouteFilterPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilters.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilters.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilters.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilters.go index b809ebd7944c..2f6a25f21b94 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routefilters.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routefilters.go @@ -69,7 +69,7 @@ func (client RouteFiltersClient) CreateOrUpdatePreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client RouteFiltersClient) DeletePreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client RouteFiltersClient) GetPreparer(ctx context.Context, resourceGroupN "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -316,7 +316,7 @@ func (client RouteFiltersClient) ListPreparer(ctx context.Context) (*http.Reques "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client RouteFiltersClient) ListByResourceGroupPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client RouteFiltersClient) UpdateTagsPreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routemaps.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routemaps.go new file mode 100644 index 000000000000..1f31d110144d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routemaps.go @@ -0,0 +1,394 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// RouteMapsClient is the network Client +type RouteMapsClient struct { + BaseClient +} + +// NewRouteMapsClient creates an instance of the RouteMapsClient client. +func NewRouteMapsClient(subscriptionID string) RouteMapsClient { + return NewRouteMapsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewRouteMapsClientWithBaseURI creates an instance of the RouteMapsClient client using a custom endpoint. Use this +// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewRouteMapsClientWithBaseURI(baseURI string, subscriptionID string) RouteMapsClient { + return RouteMapsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates a RouteMap if it doesn't exist else updates the existing one. +// Parameters: +// resourceGroupName - the resource group name of the RouteMap's resource group. +// virtualHubName - the name of the VirtualHub containing the RouteMap. +// routeMapName - the name of the RouteMap. +// routeMapParameters - parameters supplied to create or update a RouteMap. +func (client RouteMapsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string, routeMapParameters RouteMap) (result RouteMapsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteMapsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualHubName, routeMapName, routeMapParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client RouteMapsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string, routeMapParameters RouteMap) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "routeMapName": autorest.Encode("path", routeMapName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + routeMapParameters.Name = nil + routeMapParameters.Etag = nil + routeMapParameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/routeMaps/{routeMapName}", pathParameters), + autorest.WithJSON(routeMapParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client RouteMapsClient) CreateOrUpdateSender(req *http.Request) (future RouteMapsCreateOrUpdateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client RouteMapsClient) CreateOrUpdateResponder(resp *http.Response) (result RouteMap, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a RouteMap. +// Parameters: +// resourceGroupName - the resource group name of the RouteMap's resource group. +// virtualHubName - the name of the VirtualHub containing the RouteMap. +// routeMapName - the name of the RouteMap. +func (client RouteMapsClient) Delete(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string) (result RouteMapsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteMapsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, virtualHubName, routeMapName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client RouteMapsClient) DeletePreparer(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "routeMapName": autorest.Encode("path", routeMapName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/routeMaps/{routeMapName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client RouteMapsClient) DeleteSender(req *http.Request) (future RouteMapsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client RouteMapsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves the details of a RouteMap. +// Parameters: +// resourceGroupName - the resource group name of the RouteMap's resource group. +// virtualHubName - the name of the VirtualHub containing the RouteMap. +// routeMapName - the name of the RouteMap. +func (client RouteMapsClient) Get(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string) (result RouteMap, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteMapsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, virtualHubName, routeMapName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client RouteMapsClient) GetPreparer(ctx context.Context, resourceGroupName string, virtualHubName string, routeMapName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "routeMapName": autorest.Encode("path", routeMapName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/routeMaps/{routeMapName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client RouteMapsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client RouteMapsClient) GetResponder(resp *http.Response) (result RouteMap, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List retrieves the details of all RouteMaps. +// Parameters: +// resourceGroupName - the resource group name of the RouteMap's resource group'. +// virtualHubName - the name of the VirtualHub containing the RouteMap. +func (client RouteMapsClient) List(ctx context.Context, resourceGroupName string, virtualHubName string) (result ListRouteMapsResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteMapsClient.List") + defer func() { + sc := -1 + if result.lrmr.Response.Response != nil { + sc = result.lrmr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, virtualHubName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.lrmr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "List", resp, "Failure sending request") + return + } + + result.lrmr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "List", resp, "Failure responding to request") + return + } + if result.lrmr.hasNextLink() && result.lrmr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client RouteMapsClient) ListPreparer(ctx context.Context, resourceGroupName string, virtualHubName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/routeMaps", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client RouteMapsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client RouteMapsClient) ListResponder(resp *http.Response) (result ListRouteMapsResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client RouteMapsClient) listNextResults(ctx context.Context, lastResults ListRouteMapsResult) (result ListRouteMapsResult, err error) { + req, err := lastResults.listRouteMapsResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.RouteMapsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.RouteMapsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.RouteMapsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client RouteMapsClient) ListComplete(ctx context.Context, resourceGroupName string, virtualHubName string) (result ListRouteMapsResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteMapsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, virtualHubName) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routes.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routes.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routes.go index f189aeebf85c..fc2be63bfe36 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routes.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routes.go @@ -71,7 +71,7 @@ func (client RoutesClient) CreateOrUpdatePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -155,7 +155,7 @@ func (client RoutesClient) DeletePreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -242,7 +242,7 @@ func (client RoutesClient) GetPreparer(ctx context.Context, resourceGroupName st "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -323,7 +323,7 @@ func (client RoutesClient) ListPreparer(ctx context.Context, resourceGroupName s "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routetables.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routetables.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routetables.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routetables.go index f946c9041b03..79d8c6e272e8 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routetables.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routetables.go @@ -69,7 +69,7 @@ func (client RouteTablesClient) CreateOrUpdatePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client RouteTablesClient) DeletePreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client RouteTablesClient) GetPreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -319,7 +319,7 @@ func (client RouteTablesClient) ListPreparer(ctx context.Context, resourceGroupN "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client RouteTablesClient) ListAllPreparer(ctx context.Context) (*http.Requ "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client RouteTablesClient) UpdateTagsPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routingintent.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routingintent.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routingintent.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routingintent.go index 2a3d7fdb8f73..cafcec1b9fa6 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/routingintent.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/routingintent.go @@ -71,7 +71,7 @@ func (client RoutingIntentClient) CreateOrUpdatePreparer(ctx context.Context, re "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client RoutingIntentClient) DeletePreparer(ctx context.Context, resourceGr "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client RoutingIntentClient) GetPreparer(ctx context.Context, resourceGroup "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client RoutingIntentClient) ListPreparer(ctx context.Context, resourceGrou "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/scopeconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/scopeconnections.go new file mode 100644 index 000000000000..b08b24b972c9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/scopeconnections.go @@ -0,0 +1,408 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ScopeConnectionsClient is the network Client +type ScopeConnectionsClient struct { + BaseClient +} + +// NewScopeConnectionsClient creates an instance of the ScopeConnectionsClient client. +func NewScopeConnectionsClient(subscriptionID string) ScopeConnectionsClient { + return NewScopeConnectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewScopeConnectionsClientWithBaseURI creates an instance of the ScopeConnectionsClient client using a custom +// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure +// stack). +func NewScopeConnectionsClientWithBaseURI(baseURI string, subscriptionID string) ScopeConnectionsClient { + return ScopeConnectionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates scope connection from Network Manager +// Parameters: +// parameters - scope connection to be created/updated. +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// scopeConnectionName - name for the cross-tenant connection. +func (client ScopeConnectionsClient) CreateOrUpdate(ctx context.Context, parameters ScopeConnection, resourceGroupName string, networkManagerName string, scopeConnectionName string) (result ScopeConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, parameters, resourceGroupName, networkManagerName, scopeConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client ScopeConnectionsClient) CreateOrUpdatePreparer(ctx context.Context, parameters ScopeConnection, resourceGroupName string, networkManagerName string, scopeConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "scopeConnectionName": autorest.Encode("path", scopeConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/scopeConnections/{scopeConnectionName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client ScopeConnectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client ScopeConnectionsClient) CreateOrUpdateResponder(resp *http.Response) (result ScopeConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete the pending scope connection created by this network manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// scopeConnectionName - name for the cross-tenant connection. +func (client ScopeConnectionsClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, scopeConnectionName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, scopeConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client ScopeConnectionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, scopeConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "scopeConnectionName": autorest.Encode("path", scopeConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/scopeConnections/{scopeConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client ScopeConnectionsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client ScopeConnectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get get specified scope connection created by this Network Manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// scopeConnectionName - name for the cross-tenant connection. +func (client ScopeConnectionsClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, scopeConnectionName string) (result ScopeConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, scopeConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client ScopeConnectionsClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, scopeConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "scopeConnectionName": autorest.Encode("path", scopeConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/scopeConnections/{scopeConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client ScopeConnectionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client ScopeConnectionsClient) GetResponder(resp *http.Response) (result ScopeConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list all scope connections created by this network manager. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client ScopeConnectionsClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result ScopeConnectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionsClient.List") + defer func() { + sc := -1 + if result.sclr.Response.Response != nil { + sc = result.sclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.ScopeConnectionsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.sclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "List", resp, "Failure sending request") + return + } + + result.sclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "List", resp, "Failure responding to request") + return + } + if result.sclr.hasNextLink() && result.sclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client ScopeConnectionsClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/scopeConnections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ScopeConnectionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ScopeConnectionsClient) ListResponder(resp *http.Response) (result ScopeConnectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ScopeConnectionsClient) listNextResults(ctx context.Context, lastResults ScopeConnectionListResult) (result ScopeConnectionListResult, err error) { + req, err := lastResults.scopeConnectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.ScopeConnectionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ScopeConnectionsClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result ScopeConnectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ScopeConnectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityadminconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityadminconfigurations.go new file mode 100644 index 000000000000..4bea70a637e7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityadminconfigurations.go @@ -0,0 +1,416 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SecurityAdminConfigurationsClient is the network Client +type SecurityAdminConfigurationsClient struct { + BaseClient +} + +// NewSecurityAdminConfigurationsClient creates an instance of the SecurityAdminConfigurationsClient client. +func NewSecurityAdminConfigurationsClient(subscriptionID string) SecurityAdminConfigurationsClient { + return NewSecurityAdminConfigurationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSecurityAdminConfigurationsClientWithBaseURI creates an instance of the SecurityAdminConfigurationsClient client +// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign +// clouds, Azure stack). +func NewSecurityAdminConfigurationsClientWithBaseURI(baseURI string, subscriptionID string) SecurityAdminConfigurationsClient { + return SecurityAdminConfigurationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a network manager security admin configuration. +// Parameters: +// securityAdminConfiguration - the security admin configuration to create or update +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +func (client SecurityAdminConfigurationsClient) CreateOrUpdate(ctx context.Context, securityAdminConfiguration SecurityAdminConfiguration, resourceGroupName string, networkManagerName string, configurationName string) (result SecurityAdminConfiguration, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, securityAdminConfiguration, resourceGroupName, networkManagerName, configurationName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client SecurityAdminConfigurationsClient) CreateOrUpdatePreparer(ctx context.Context, securityAdminConfiguration SecurityAdminConfiguration, resourceGroupName string, networkManagerName string, configurationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + securityAdminConfiguration.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}", pathParameters), + autorest.WithJSON(securityAdminConfiguration), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client SecurityAdminConfigurationsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client SecurityAdminConfigurationsClient) CreateOrUpdateResponder(resp *http.Response) (result SecurityAdminConfiguration, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a network manager security admin configuration. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +// force - deletes the resource even if it is part of a deployed configuration. If the configuration has been +// deployed, the service will do a cleanup deployment in the background, prior to the delete. +func (client SecurityAdminConfigurationsClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, force *bool) (result SecurityAdminConfigurationsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationsClient.Delete") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, configurationName, force) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client SecurityAdminConfigurationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string, force *bool) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if force != nil { + queryParameters["force"] = autorest.Encode("query", *force) + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client SecurityAdminConfigurationsClient) DeleteSender(req *http.Request) (future SecurityAdminConfigurationsDeleteFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client SecurityAdminConfigurationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get retrieves a network manager security admin configuration. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// configurationName - the name of the network manager Security Configuration. +func (client SecurityAdminConfigurationsClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string) (result SecurityAdminConfiguration, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, configurationName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SecurityAdminConfigurationsClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, configurationName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "configurationName": autorest.Encode("path", configurationName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations/{configurationName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SecurityAdminConfigurationsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SecurityAdminConfigurationsClient) GetResponder(resp *http.Response) (result SecurityAdminConfiguration, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all the network manager security admin configurations in a network manager, in a paginated format. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client SecurityAdminConfigurationsClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result SecurityAdminConfigurationListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationsClient.List") + defer func() { + sc := -1 + if result.saclr.Response.Response != nil { + sc = result.saclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.SecurityAdminConfigurationsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.saclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "List", resp, "Failure sending request") + return + } + + result.saclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "List", resp, "Failure responding to request") + return + } + if result.saclr.hasNextLink() && result.saclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SecurityAdminConfigurationsClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/securityAdminConfigurations", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SecurityAdminConfigurationsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SecurityAdminConfigurationsClient) ListResponder(resp *http.Response) (result SecurityAdminConfigurationListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SecurityAdminConfigurationsClient) listNextResults(ctx context.Context, lastResults SecurityAdminConfigurationListResult) (result SecurityAdminConfigurationListResult, err error) { + req, err := lastResults.securityAdminConfigurationListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SecurityAdminConfigurationsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SecurityAdminConfigurationsClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, top *int32, skipToken string) (result SecurityAdminConfigurationListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityAdminConfigurationsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitygroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitygroups.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitygroups.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitygroups.go index fc059a966b0e..365f7f33c536 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitygroups.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitygroups.go @@ -69,7 +69,7 @@ func (client SecurityGroupsClient) CreateOrUpdatePreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client SecurityGroupsClient) DeletePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client SecurityGroupsClient) GetPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -319,7 +319,7 @@ func (client SecurityGroupsClient) ListPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client SecurityGroupsClient) ListAllPreparer(ctx context.Context) (*http.R "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -546,7 +546,7 @@ func (client SecurityGroupsClient) UpdateTagsPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitypartnerproviders.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitypartnerproviders.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitypartnerproviders.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitypartnerproviders.go index dd7f1dd0f17f..de93a91dffe5 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securitypartnerproviders.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securitypartnerproviders.go @@ -70,7 +70,7 @@ func (client SecurityPartnerProvidersClient) CreateOrUpdatePreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -152,7 +152,7 @@ func (client SecurityPartnerProvidersClient) DeletePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -237,7 +237,7 @@ func (client SecurityPartnerProvidersClient) GetPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -313,7 +313,7 @@ func (client SecurityPartnerProvidersClient) ListPreparer(ctx context.Context) ( "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -429,7 +429,7 @@ func (client SecurityPartnerProvidersClient) ListByResourceGroupPreparer(ctx con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -543,7 +543,7 @@ func (client SecurityPartnerProvidersClient) UpdateTagsPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securityrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securityrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityrules.go index 6e75a8eefb3e..744c7cea7023 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/securityrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/securityrules.go @@ -71,7 +71,7 @@ func (client SecurityRulesClient) CreateOrUpdatePreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -155,7 +155,7 @@ func (client SecurityRulesClient) DeletePreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -242,7 +242,7 @@ func (client SecurityRulesClient) GetPreparer(ctx context.Context, resourceGroup "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -323,7 +323,7 @@ func (client SecurityRulesClient) ListPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceassociationlinks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceassociationlinks.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceassociationlinks.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceassociationlinks.go index 097a5f0e76d0..c36939d2c79f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceassociationlinks.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceassociationlinks.go @@ -78,7 +78,7 @@ func (client ServiceAssociationLinksClient) ListPreparer(ctx context.Context, re "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicies.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicies.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicies.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicies.go index f894adbca990..4b74b9fff16e 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicies.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicies.go @@ -70,7 +70,7 @@ func (client ServiceEndpointPoliciesClient) CreateOrUpdatePreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -153,7 +153,7 @@ func (client ServiceEndpointPoliciesClient) DeletePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -239,7 +239,7 @@ func (client ServiceEndpointPoliciesClient) GetPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -318,7 +318,7 @@ func (client ServiceEndpointPoliciesClient) ListPreparer(ctx context.Context) (* "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -434,7 +434,7 @@ func (client ServiceEndpointPoliciesClient) ListByResourceGroupPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -548,7 +548,7 @@ func (client ServiceEndpointPoliciesClient) UpdateTagsPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicydefinitions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicydefinitions.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicydefinitions.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicydefinitions.go index 89eaa8bb537e..5206cad37abd 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/serviceendpointpolicydefinitions.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/serviceendpointpolicydefinitions.go @@ -73,7 +73,7 @@ func (client ServiceEndpointPolicyDefinitionsClient) CreateOrUpdatePreparer(ctx "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -157,7 +157,7 @@ func (client ServiceEndpointPolicyDefinitionsClient) DeletePreparer(ctx context. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client ServiceEndpointPolicyDefinitionsClient) GetPreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,7 +325,7 @@ func (client ServiceEndpointPolicyDefinitionsClient) ListByResourceGroupPreparer "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetaginformation.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetaginformation.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetaginformation.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetaginformation.go index 43306797828f..b57f55295f0a 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetaginformation.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetaginformation.go @@ -83,7 +83,7 @@ func (client ServiceTagInformationClient) ListPreparer(ctx context.Context, loca "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetags.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetags.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetags.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetags.go index 7f04ce556e1b..3710ad39614b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/servicetags.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/servicetags.go @@ -75,7 +75,7 @@ func (client ServiceTagsClient) ListPreparer(ctx context.Context, location strin "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/staticmembers.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/staticmembers.go new file mode 100644 index 000000000000..565741e30dc3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/staticmembers.go @@ -0,0 +1,415 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// StaticMembersClient is the network Client +type StaticMembersClient struct { + BaseClient +} + +// NewStaticMembersClient creates an instance of the StaticMembersClient client. +func NewStaticMembersClient(subscriptionID string) StaticMembersClient { + return NewStaticMembersClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewStaticMembersClientWithBaseURI creates an instance of the StaticMembersClient client using a custom endpoint. +// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewStaticMembersClientWithBaseURI(baseURI string, subscriptionID string) StaticMembersClient { + return StaticMembersClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a static member. +// Parameters: +// parameters - parameters supplied to the specify the static member to create +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// staticMemberName - the name of the static member. +func (client StaticMembersClient) CreateOrUpdate(ctx context.Context, parameters StaticMember, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (result StaticMember, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMembersClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, parameters, resourceGroupName, networkManagerName, networkGroupName, staticMemberName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client StaticMembersClient) CreateOrUpdatePreparer(ctx context.Context, parameters StaticMember, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "staticMemberName": autorest.Encode("path", staticMemberName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}/staticMembers/{staticMemberName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client StaticMembersClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client StaticMembersClient) CreateOrUpdateResponder(resp *http.Response) (result StaticMember, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes a static member. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// staticMemberName - the name of the static member. +func (client StaticMembersClient) Delete(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMembersClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkManagerName, networkGroupName, staticMemberName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client StaticMembersClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "staticMemberName": autorest.Encode("path", staticMemberName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}/staticMembers/{staticMemberName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client StaticMembersClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client StaticMembersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets the specified static member. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// staticMemberName - the name of the static member. +func (client StaticMembersClient) Get(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (result StaticMember, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMembersClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkManagerName, networkGroupName, staticMemberName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client StaticMembersClient) GetPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, staticMemberName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "staticMemberName": autorest.Encode("path", staticMemberName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}/staticMembers/{staticMemberName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client StaticMembersClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client StaticMembersClient) GetResponder(resp *http.Response) (result StaticMember, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists the specified static member. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkManagerName - the name of the network manager. +// networkGroupName - the name of the network group. +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client StaticMembersClient) List(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, top *int32, skipToken string) (result StaticMemberListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMembersClient.List") + defer func() { + sc := -1 + if result.smlr.Response.Response != nil { + sc = result.smlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.StaticMembersClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName, networkManagerName, networkGroupName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.smlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "List", resp, "Failure sending request") + return + } + + result.smlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "List", resp, "Failure responding to request") + return + } + if result.smlr.hasNextLink() && result.smlr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client StaticMembersClient) ListPreparer(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkGroupName": autorest.Encode("path", networkGroupName), + "networkManagerName": autorest.Encode("path", networkManagerName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkManagers/{networkManagerName}/networkGroups/{networkGroupName}/staticMembers", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client StaticMembersClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client StaticMembersClient) ListResponder(resp *http.Response) (result StaticMemberListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client StaticMembersClient) listNextResults(ctx context.Context, lastResults StaticMemberListResult) (result StaticMemberListResult, err error) { + req, err := lastResults.staticMemberListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.StaticMembersClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.StaticMembersClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.StaticMembersClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client StaticMembersClient) ListComplete(ctx context.Context, resourceGroupName string, networkManagerName string, networkGroupName string, top *int32, skipToken string) (result StaticMemberListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/StaticMembersClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName, networkManagerName, networkGroupName, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/subnets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subnets.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/subnets.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subnets.go index fa4f18c83c7b..3ef48cbbd0c2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/subnets.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subnets.go @@ -71,7 +71,7 @@ func (client SubnetsClient) CreateOrUpdatePreparer(ctx context.Context, resource "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -155,7 +155,7 @@ func (client SubnetsClient) DeletePreparer(ctx context.Context, resourceGroupNam "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client SubnetsClient) GetPreparer(ctx context.Context, resourceGroupName s "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -327,7 +327,7 @@ func (client SubnetsClient) ListPreparer(ctx context.Context, resourceGroupName "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -437,7 +437,7 @@ func (client SubnetsClient) PrepareNetworkPoliciesPreparer(ctx context.Context, "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -521,7 +521,7 @@ func (client SubnetsClient) UnprepareNetworkPoliciesPreparer(ctx context.Context "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subscriptionnetworkmanagerconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subscriptionnetworkmanagerconnections.go new file mode 100644 index 000000000000..41256f35bde7 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/subscriptionnetworkmanagerconnections.go @@ -0,0 +1,393 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// SubscriptionNetworkManagerConnectionsClient is the network Client +type SubscriptionNetworkManagerConnectionsClient struct { + BaseClient +} + +// NewSubscriptionNetworkManagerConnectionsClient creates an instance of the +// SubscriptionNetworkManagerConnectionsClient client. +func NewSubscriptionNetworkManagerConnectionsClient(subscriptionID string) SubscriptionNetworkManagerConnectionsClient { + return NewSubscriptionNetworkManagerConnectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewSubscriptionNetworkManagerConnectionsClientWithBaseURI creates an instance of the +// SubscriptionNetworkManagerConnectionsClient client using a custom endpoint. Use this when interacting with an Azure +// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewSubscriptionNetworkManagerConnectionsClientWithBaseURI(baseURI string, subscriptionID string) SubscriptionNetworkManagerConnectionsClient { + return SubscriptionNetworkManagerConnectionsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate create a network manager connection on this subscription. +// Parameters: +// parameters - network manager connection to be created/updated. +// networkManagerConnectionName - name for the network manager connection. +func (client SubscriptionNetworkManagerConnectionsClient) CreateOrUpdate(ctx context.Context, parameters ManagerConnection, networkManagerConnectionName string) (result ManagerConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubscriptionNetworkManagerConnectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, parameters, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "CreateOrUpdate", resp, "Failure responding to request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client SubscriptionNetworkManagerConnectionsClient) CreateOrUpdatePreparer(ctx context.Context, parameters ManagerConnection, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.SystemData = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client SubscriptionNetworkManagerConnectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client SubscriptionNetworkManagerConnectionsClient) CreateOrUpdateResponder(resp *http.Response) (result ManagerConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete delete specified connection created by this subscription. +// Parameters: +// networkManagerConnectionName - name for the network manager connection. +func (client SubscriptionNetworkManagerConnectionsClient) Delete(ctx context.Context, networkManagerConnectionName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubscriptionNetworkManagerConnectionsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Delete", resp, "Failure responding to request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client SubscriptionNetworkManagerConnectionsClient) DeletePreparer(ctx context.Context, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client SubscriptionNetworkManagerConnectionsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client SubscriptionNetworkManagerConnectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get get a specified connection created by this subscription. +// Parameters: +// networkManagerConnectionName - name for the network manager connection. +func (client SubscriptionNetworkManagerConnectionsClient) Get(ctx context.Context, networkManagerConnectionName string) (result ManagerConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubscriptionNetworkManagerConnectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, networkManagerConnectionName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client SubscriptionNetworkManagerConnectionsClient) GetPreparer(ctx context.Context, networkManagerConnectionName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkManagerConnectionName": autorest.Encode("path", networkManagerConnectionName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkManagerConnections/{networkManagerConnectionName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client SubscriptionNetworkManagerConnectionsClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client SubscriptionNetworkManagerConnectionsClient) GetResponder(resp *http.Response) (result ManagerConnection, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List list all network manager connections created by this subscription. +// Parameters: +// top - an optional query parameter which specifies the maximum number of records to be returned by the +// server. +// skipToken - skipToken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skipToken parameter that +// specifies a starting point to use for subsequent calls. +func (client SubscriptionNetworkManagerConnectionsClient) List(ctx context.Context, top *int32, skipToken string) (result ManagerConnectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubscriptionNetworkManagerConnectionsClient.List") + defer func() { + sc := -1 + if result.mclr.Response.Response != nil { + sc = result.mclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("network.SubscriptionNetworkManagerConnectionsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.mclr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "List", resp, "Failure sending request") + return + } + + result.mclr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "List", resp, "Failure responding to request") + return + } + if result.mclr.hasNextLink() && result.mclr.IsEmpty() { + err = result.NextWithContext(ctx) + return + } + + return +} + +// ListPreparer prepares the List request. +func (client SubscriptionNetworkManagerConnectionsClient) ListPreparer(ctx context.Context, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["$skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkManagerConnections", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client SubscriptionNetworkManagerConnectionsClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client SubscriptionNetworkManagerConnectionsClient) ListResponder(resp *http.Response) (result ManagerConnectionListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client SubscriptionNetworkManagerConnectionsClient) listNextResults(ctx context.Context, lastResults ManagerConnectionListResult) (result ManagerConnectionListResult, err error) { + req, err := lastResults.managerConnectionListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.SubscriptionNetworkManagerConnectionsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client SubscriptionNetworkManagerConnectionsClient) ListComplete(ctx context.Context, top *int32, skipToken string) (result ManagerConnectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubscriptionNetworkManagerConnectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, top, skipToken) + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/usages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/usages.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/usages.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/usages.go index f3a9b82cc598..724cb1157826 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/usages.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/usages.go @@ -85,7 +85,7 @@ func (client UsagesClient) ListPreparer(ctx context.Context, location string) (* "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/version.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/version.go similarity index 90% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/version.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/version.go index 5f7329994a00..0bc5ef088911 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/version.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/version.go @@ -10,7 +10,7 @@ import "github.com/Azure/azure-sdk-for-go/version" // UserAgent returns the UserAgent string to use when sending http.Requests. func UserAgent() string { - return "Azure-SDK-For-Go/" + Version() + " network/2021-08-01" + return "Azure-SDK-For-Go/" + Version() + " network/2022-07-01" } // Version returns the semantic version (see http://semver.org) of the client. diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vipswap.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vipswap.go new file mode 100644 index 000000000000..cc1f1ea744c5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vipswap.go @@ -0,0 +1,272 @@ +package network + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// VipSwapClient is the network Client +type VipSwapClient struct { + BaseClient +} + +// NewVipSwapClient creates an instance of the VipSwapClient client. +func NewVipSwapClient(subscriptionID string) VipSwapClient { + return NewVipSwapClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewVipSwapClientWithBaseURI creates an instance of the VipSwapClient client using a custom endpoint. Use this when +// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). +func NewVipSwapClientWithBaseURI(baseURI string, subscriptionID string) VipSwapClient { + return VipSwapClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Create performs vip swap operation on swappable cloud services. +// Parameters: +// groupName - the name of the resource group. +// resourceName - the name of the cloud service. +// parameters - swapResource object where slot type should be the target slot after vip swap for the specified +// cloud service. +func (client VipSwapClient) Create(ctx context.Context, groupName string, resourceName string, parameters SwapResource) (result VipSwapCreateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VipSwapClient.Create") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreatePreparer(ctx, groupName, resourceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "Create", nil, "Failure preparing request") + return + } + + result, err = client.CreateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "Create", result.Response(), "Failure sending request") + return + } + + return +} + +// CreatePreparer prepares the Create request. +func (client VipSwapClient) CreatePreparer(ctx context.Context, groupName string, resourceName string, parameters SwapResource) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "groupName": autorest.Encode("path", groupName), + "resourceName": autorest.Encode("path", resourceName), + "singletonResource": autorest.Encode("path", "swap"), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + parameters.ID = nil + parameters.Name = nil + parameters.Type = nil + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Compute/cloudServices/{resourceName}/providers/Microsoft.Network/cloudServiceSlots/{singletonResource}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateSender sends the Create request. The method will close the +// http.Response Body if it receives an error. +func (client VipSwapClient) CreateSender(req *http.Request) (future VipSwapCreateFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// CreateResponder handles the response to the Create request. The method always +// closes the http.Response Body. +func (client VipSwapClient) CreateResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets the SwapResource which identifies the slot type for the specified cloud service. The slot type on a cloud +// service can either be Staging or Production +// Parameters: +// groupName - the name of the resource group. +// resourceName - the name of the cloud service. +func (client VipSwapClient) Get(ctx context.Context, groupName string, resourceName string) (result SwapResource, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VipSwapClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, groupName, resourceName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "Get", resp, "Failure responding to request") + return + } + + return +} + +// GetPreparer prepares the Get request. +func (client VipSwapClient) GetPreparer(ctx context.Context, groupName string, resourceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "groupName": autorest.Encode("path", groupName), + "resourceName": autorest.Encode("path", resourceName), + "singletonResource": autorest.Encode("path", "swap"), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Compute/cloudServices/{resourceName}/providers/Microsoft.Network/cloudServiceSlots/{singletonResource}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client VipSwapClient) GetSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client VipSwapClient) GetResponder(resp *http.Response) (result SwapResource, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets the list of SwapResource which identifies the slot type for the specified cloud service. The slot type on +// a cloud service can either be Staging or Production +// Parameters: +// groupName - the name of the resource group. +// resourceName - the name of the cloud service. +func (client VipSwapClient) List(ctx context.Context, groupName string, resourceName string) (result SwapResourceListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VipSwapClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, groupName, resourceName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VipSwapClient", "List", resp, "Failure responding to request") + return + } + + return +} + +// ListPreparer prepares the List request. +func (client VipSwapClient) ListPreparer(ctx context.Context, groupName string, resourceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "groupName": autorest.Encode("path", groupName), + "resourceName": autorest.Encode("path", resourceName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Compute/cloudServices/{resourceName}/providers/Microsoft.Network/cloudServiceSlots", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client VipSwapClient) ListSender(req *http.Request) (*http.Response, error) { + return client.Send(req, azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client VipSwapClient) ListResponder(resp *http.Response) (result SwapResourceListResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliances.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliances.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliances.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliances.go index fd8e6a55a7a2..97d9fb25a9b5 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliances.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliances.go @@ -82,7 +82,7 @@ func (client VirtualAppliancesClient) CreateOrUpdatePreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -164,7 +164,7 @@ func (client VirtualAppliancesClient) DeletePreparer(ctx context.Context, resour "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -250,7 +250,7 @@ func (client VirtualAppliancesClient) GetPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -329,7 +329,7 @@ func (client VirtualAppliancesClient) ListPreparer(ctx context.Context) (*http.R "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -445,7 +445,7 @@ func (client VirtualAppliancesClient) ListByResourceGroupPreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -559,7 +559,7 @@ func (client VirtualAppliancesClient) UpdateTagsPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliancesites.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliancesites.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliancesites.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliancesites.go index 932a0a5f7fe3..1a9d2668582c 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualappliancesites.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualappliancesites.go @@ -72,7 +72,7 @@ func (client VirtualApplianceSitesClient) CreateOrUpdatePreparer(ctx context.Con "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -157,7 +157,7 @@ func (client VirtualApplianceSitesClient) DeletePreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client VirtualApplianceSitesClient) GetPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,7 +325,7 @@ func (client VirtualApplianceSitesClient) ListPreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualapplianceskus.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualapplianceskus.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualapplianceskus.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualapplianceskus.go index 7cb46dfa72b2..3da40524df86 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualapplianceskus.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualapplianceskus.go @@ -74,7 +74,7 @@ func (client VirtualApplianceSkusClient) GetPreparer(ctx context.Context, skuNam "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -150,7 +150,7 @@ func (client VirtualApplianceSkusClient) ListPreparer(ctx context.Context) (*htt "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnection.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnection.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnection.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnection.go index f46aaa5c60bc..766d33159755 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnection.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnection.go @@ -85,7 +85,7 @@ func (client VirtualHubBgpConnectionClient) CreateOrUpdatePreparer(ctx context.C "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -170,7 +170,7 @@ func (client VirtualHubBgpConnectionClient) DeletePreparer(ctx context.Context, "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -257,7 +257,7 @@ func (client VirtualHubBgpConnectionClient) GetPreparer(ctx context.Context, res "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnections.go index b6aae280990d..430cb12af99b 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubbgpconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubbgpconnections.go @@ -81,7 +81,7 @@ func (client VirtualHubBgpConnectionsClient) ListPreparer(ctx context.Context, r "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -189,7 +189,7 @@ func (client VirtualHubBgpConnectionsClient) ListAdvertisedRoutesPreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -270,7 +270,7 @@ func (client VirtualHubBgpConnectionsClient) ListLearnedRoutesPreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubipconfiguration.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubipconfiguration.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubipconfiguration.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubipconfiguration.go index 9d283a6e4fe9..c6c84931f25c 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubipconfiguration.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubipconfiguration.go @@ -91,7 +91,7 @@ func (client VirtualHubIPConfigurationClient) CreateOrUpdatePreparer(ctx context "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -176,7 +176,7 @@ func (client VirtualHubIPConfigurationClient) DeletePreparer(ctx context.Context "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -263,7 +263,7 @@ func (client VirtualHubIPConfigurationClient) GetPreparer(ctx context.Context, r "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -344,7 +344,7 @@ func (client VirtualHubIPConfigurationClient) ListPreparer(ctx context.Context, "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubroutetablev2s.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubroutetablev2s.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubroutetablev2s.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubroutetablev2s.go index 85d1612d3dda..210a170e348c 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubroutetablev2s.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubroutetablev2s.go @@ -73,7 +73,7 @@ func (client VirtualHubRouteTableV2sClient) CreateOrUpdatePreparer(ctx context.C "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -157,7 +157,7 @@ func (client VirtualHubRouteTableV2sClient) DeletePreparer(ctx context.Context, "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -244,7 +244,7 @@ func (client VirtualHubRouteTableV2sClient) GetPreparer(ctx context.Context, res "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -325,7 +325,7 @@ func (client VirtualHubRouteTableV2sClient) ListPreparer(ctx context.Context, re "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubs.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubs.go similarity index 77% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubs.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubs.go index 8bae5f0ca7c5..5ca1619791e3 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualhubs.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualhubs.go @@ -54,6 +54,10 @@ func (client VirtualHubsClient) CreateOrUpdate(ctx context.Context, resourceGrou Chain: []validation.Constraint{{Target: "virtualHubParameters.VirtualHubProperties.VirtualRouterAsn", Name: validation.InclusiveMaximum, Rule: int64(4294967295), Chain: nil}, {Target: "virtualHubParameters.VirtualHubProperties.VirtualRouterAsn", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, }}, + {Target: "virtualHubParameters.VirtualHubProperties.VirtualRouterAutoScaleConfiguration", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "virtualHubParameters.VirtualHubProperties.VirtualRouterAutoScaleConfiguration.MinCapacity", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "virtualHubParameters.VirtualHubProperties.VirtualRouterAutoScaleConfiguration.MinCapacity", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, + }}, }}}}}); err != nil { return result, validation.NewError("network.VirtualHubsClient", "CreateOrUpdate", err.Error()) } @@ -81,7 +85,7 @@ func (client VirtualHubsClient) CreateOrUpdatePreparer(ctx context.Context, reso "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -164,7 +168,7 @@ func (client VirtualHubsClient) DeletePreparer(ctx context.Context, resourceGrou "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -249,7 +253,7 @@ func (client VirtualHubsClient) GetPreparer(ctx context.Context, resourceGroupNa "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -320,7 +324,7 @@ func (client VirtualHubsClient) GetEffectiveVirtualHubRoutesPreparer(ctx context "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -365,6 +369,168 @@ func (client VirtualHubsClient) GetEffectiveVirtualHubRoutesResponder(resp *http return } +// GetInboundRoutes gets the inbound routes configured for the Virtual Hub on a particular connection. +// Parameters: +// resourceGroupName - the resource group name of the VirtualHub. +// virtualHubName - the name of the VirtualHub. +// getInboundRoutesParameters - parameters supplied to get the inbound routes for a connection resource. +func (client VirtualHubsClient) GetInboundRoutes(ctx context.Context, resourceGroupName string, virtualHubName string, getInboundRoutesParameters GetInboundRoutesParameters) (result VirtualHubsGetInboundRoutesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualHubsClient.GetInboundRoutes") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetInboundRoutesPreparer(ctx, resourceGroupName, virtualHubName, getInboundRoutesParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsClient", "GetInboundRoutes", nil, "Failure preparing request") + return + } + + result, err = client.GetInboundRoutesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsClient", "GetInboundRoutes", result.Response(), "Failure sending request") + return + } + + return +} + +// GetInboundRoutesPreparer prepares the GetInboundRoutes request. +func (client VirtualHubsClient) GetInboundRoutesPreparer(ctx context.Context, resourceGroupName string, virtualHubName string, getInboundRoutesParameters GetInboundRoutesParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/inboundRoutes", pathParameters), + autorest.WithJSON(getInboundRoutesParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetInboundRoutesSender sends the GetInboundRoutes request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualHubsClient) GetInboundRoutesSender(req *http.Request) (future VirtualHubsGetInboundRoutesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// GetInboundRoutesResponder handles the response to the GetInboundRoutes request. The method always +// closes the http.Response Body. +func (client VirtualHubsClient) GetInboundRoutesResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + +// GetOutboundRoutes gets the outbound routes configured for the Virtual Hub on a particular connection. +// Parameters: +// resourceGroupName - the resource group name of the VirtualHub. +// virtualHubName - the name of the VirtualHub. +// getOutboundRoutesParameters - parameters supplied to get the outbound routes for a connection resource. +func (client VirtualHubsClient) GetOutboundRoutes(ctx context.Context, resourceGroupName string, virtualHubName string, getOutboundRoutesParameters GetOutboundRoutesParameters) (result VirtualHubsGetOutboundRoutesFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualHubsClient.GetOutboundRoutes") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetOutboundRoutesPreparer(ctx, resourceGroupName, virtualHubName, getOutboundRoutesParameters) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsClient", "GetOutboundRoutes", nil, "Failure preparing request") + return + } + + result, err = client.GetOutboundRoutesSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualHubsClient", "GetOutboundRoutes", result.Response(), "Failure sending request") + return + } + + return +} + +// GetOutboundRoutesPreparer prepares the GetOutboundRoutes request. +func (client VirtualHubsClient) GetOutboundRoutesPreparer(ctx context.Context, resourceGroupName string, virtualHubName string, getOutboundRoutesParameters GetOutboundRoutesParameters) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualHubName": autorest.Encode("path", virtualHubName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualHubs/{virtualHubName}/outboundRoutes", pathParameters), + autorest.WithJSON(getOutboundRoutesParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetOutboundRoutesSender sends the GetOutboundRoutes request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualHubsClient) GetOutboundRoutesSender(req *http.Request) (future VirtualHubsGetOutboundRoutesFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// GetOutboundRoutesResponder handles the response to the GetOutboundRoutes request. The method always +// closes the http.Response Body. +func (client VirtualHubsClient) GetOutboundRoutesResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByClosing()) + result.Response = resp + return +} + // List lists all the VirtualHubs in a subscription. func (client VirtualHubsClient) List(ctx context.Context) (result ListVirtualHubsResultPage, err error) { if tracing.IsEnabled() { @@ -410,7 +576,7 @@ func (client VirtualHubsClient) ListPreparer(ctx context.Context) (*http.Request "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -526,7 +692,7 @@ func (client VirtualHubsClient) ListByResourceGroupPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -640,7 +806,7 @@ func (client VirtualHubsClient) UpdateTagsPreparer(ctx context.Context, resource "virtualHubName": autorest.Encode("path", virtualHubName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewayconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewayconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewayconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewayconnections.go index 578c03827347..44549b8b8f52 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewayconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewayconnections.go @@ -108,7 +108,7 @@ func (client VirtualNetworkGatewayConnectionsClient) CreateOrUpdatePreparer(ctx "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -190,7 +190,7 @@ func (client VirtualNetworkGatewayConnectionsClient) DeletePreparer(ctx context. "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -275,7 +275,7 @@ func (client VirtualNetworkGatewayConnectionsClient) GetPreparer(ctx context.Con "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -345,7 +345,7 @@ func (client VirtualNetworkGatewayConnectionsClient) GetIkeSasPreparer(ctx conte "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -432,7 +432,7 @@ func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyPreparer(ctx co "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -512,7 +512,7 @@ func (client VirtualNetworkGatewayConnectionsClient) ListPreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -618,7 +618,7 @@ func (client VirtualNetworkGatewayConnectionsClient) ResetConnectionPreparer(ctx "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -709,7 +709,7 @@ func (client VirtualNetworkGatewayConnectionsClient) ResetSharedKeyPreparer(ctx "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -800,7 +800,7 @@ func (client VirtualNetworkGatewayConnectionsClient) SetSharedKeyPreparer(ctx co "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -883,7 +883,7 @@ func (client VirtualNetworkGatewayConnectionsClient) StartPacketCapturePreparer( "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -969,7 +969,7 @@ func (client VirtualNetworkGatewayConnectionsClient) StopPacketCapturePreparer(c "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1051,7 +1051,7 @@ func (client VirtualNetworkGatewayConnectionsClient) UpdateTagsPreparer(ctx cont "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewaynatrules.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewaynatrules.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewaynatrules.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewaynatrules.go index fd083dab12fe..119619416b43 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgatewaynatrules.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgatewaynatrules.go @@ -73,7 +73,7 @@ func (client VirtualNetworkGatewayNatRulesClient) CreateOrUpdatePreparer(ctx con "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -158,7 +158,7 @@ func (client VirtualNetworkGatewayNatRulesClient) DeletePreparer(ctx context.Con "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -245,7 +245,7 @@ func (client VirtualNetworkGatewayNatRulesClient) GetPreparer(ctx context.Contex "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -326,7 +326,7 @@ func (client VirtualNetworkGatewayNatRulesClient) ListByVirtualNetworkGatewayPre "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgateways.go index 2943d5e9a6f6..1948dfbbd550 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkgateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkgateways.go @@ -84,7 +84,7 @@ func (client VirtualNetworkGatewaysClient) CreateOrUpdatePreparer(ctx context.Co "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -166,7 +166,7 @@ func (client VirtualNetworkGatewaysClient) DeletePreparer(ctx context.Context, r "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -246,7 +246,7 @@ func (client VirtualNetworkGatewaysClient) DisconnectVirtualNetworkGatewayVpnCon "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -328,7 +328,7 @@ func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackagePreparer(ctx "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -411,7 +411,7 @@ func (client VirtualNetworkGatewaysClient) GenerateVpnProfilePreparer(ctx contex "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -499,7 +499,7 @@ func (client VirtualNetworkGatewaysClient) GetPreparer(ctx context.Context, reso "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -570,7 +570,7 @@ func (client VirtualNetworkGatewaysClient) GetAdvertisedRoutesPreparer(ctx conte "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, "peer": autorest.Encode("query", peer), @@ -651,7 +651,7 @@ func (client VirtualNetworkGatewaysClient) GetBgpPeerStatusPreparer(ctx context. "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -734,7 +734,7 @@ func (client VirtualNetworkGatewaysClient) GetLearnedRoutesPreparer(ctx context. "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -814,7 +814,7 @@ func (client VirtualNetworkGatewaysClient) GetVpnclientConnectionHealthPreparer( "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -895,7 +895,7 @@ func (client VirtualNetworkGatewaysClient) GetVpnclientIpsecParametersPreparer(c "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -975,7 +975,7 @@ func (client VirtualNetworkGatewaysClient) GetVpnProfilePackageURLPreparer(ctx c "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1064,7 +1064,7 @@ func (client VirtualNetworkGatewaysClient) ListPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1182,7 +1182,7 @@ func (client VirtualNetworkGatewaysClient) ListConnectionsPreparer(ctx context.C "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1290,7 +1290,7 @@ func (client VirtualNetworkGatewaysClient) ResetPreparer(ctx context.Context, re "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1373,7 +1373,7 @@ func (client VirtualNetworkGatewaysClient) ResetVpnClientSharedKeyPreparer(ctx c "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1461,7 +1461,7 @@ func (client VirtualNetworkGatewaysClient) SetVpnclientIpsecParametersPreparer(c "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1543,7 +1543,7 @@ func (client VirtualNetworkGatewaysClient) StartPacketCapturePreparer(ctx contex "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1628,7 +1628,7 @@ func (client VirtualNetworkGatewaysClient) StopPacketCapturePreparer(ctx context "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1716,7 +1716,7 @@ func (client VirtualNetworkGatewaysClient) SupportedVpnDevicesPreparer(ctx conte "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1786,7 +1786,7 @@ func (client VirtualNetworkGatewaysClient) UpdateTagsPreparer(ctx context.Contex "virtualNetworkGatewayName": autorest.Encode("path", virtualNetworkGatewayName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1876,7 +1876,7 @@ func (client VirtualNetworkGatewaysClient) VpnDeviceConfigurationScriptPreparer( "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkpeerings.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkpeerings.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkpeerings.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkpeerings.go index f556b1fd8234..03e63e845a7f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworkpeerings.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworkpeerings.go @@ -87,7 +87,7 @@ func (client VirtualNetworkPeeringsClient) CreateOrUpdatePreparer(ctx context.Co "virtualNetworkPeeringName": autorest.Encode("path", virtualNetworkPeeringName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -174,7 +174,7 @@ func (client VirtualNetworkPeeringsClient) DeletePreparer(ctx context.Context, r "virtualNetworkPeeringName": autorest.Encode("path", virtualNetworkPeeringName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -261,7 +261,7 @@ func (client VirtualNetworkPeeringsClient) GetPreparer(ctx context.Context, reso "virtualNetworkPeeringName": autorest.Encode("path", virtualNetworkPeeringName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -342,7 +342,7 @@ func (client VirtualNetworkPeeringsClient) ListPreparer(ctx context.Context, res "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworks.go similarity index 83% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworks.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworks.go index 9febb3dec5d5..9f8ef4ba6b10 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworks.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworks.go @@ -77,7 +77,7 @@ func (client VirtualNetworksClient) CheckIPAddressAvailabilityPreparer(ctx conte "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, "ipAddress": autorest.Encode("query", IPAddress), @@ -159,7 +159,7 @@ func (client VirtualNetworksClient) CreateOrUpdatePreparer(ctx context.Context, "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -241,7 +241,7 @@ func (client VirtualNetworksClient) DeletePreparer(ctx context.Context, resource "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -327,7 +327,7 @@ func (client VirtualNetworksClient) GetPreparer(ctx context.Context, resourceGro "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -409,7 +409,7 @@ func (client VirtualNetworksClient) ListPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -522,7 +522,7 @@ func (client VirtualNetworksClient) ListAllPreparer(ctx context.Context) (*http. "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -590,6 +590,134 @@ func (client VirtualNetworksClient) ListAllComplete(ctx context.Context) (result return } +// ListDdosProtectionStatus gets the Ddos Protection Status of all IP Addresses under the Virtual Network +// Parameters: +// resourceGroupName - the name of the resource group. +// virtualNetworkName - the name of the virtual network. +// top - the max number of ip addresses to return. +// skipToken - the skipToken that is given with nextLink. +func (client VirtualNetworksClient) ListDdosProtectionStatus(ctx context.Context, resourceGroupName string, virtualNetworkName string, top *int32, skipToken string) (result VirtualNetworksListDdosProtectionStatusFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.ListDdosProtectionStatus") + defer func() { + sc := -1 + if result.FutureAPI != nil && result.FutureAPI.Response() != nil { + sc = result.FutureAPI.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListDdosProtectionStatusPreparer(ctx, resourceGroupName, virtualNetworkName, top, skipToken) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "ListDdosProtectionStatus", nil, "Failure preparing request") + return + } + + result, err = client.ListDdosProtectionStatusSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "ListDdosProtectionStatus", result.Response(), "Failure sending request") + return + } + + return +} + +// ListDdosProtectionStatusPreparer prepares the ListDdosProtectionStatus request. +func (client VirtualNetworksClient) ListDdosProtectionStatusPreparer(ctx context.Context, resourceGroupName string, virtualNetworkName string, top *int32, skipToken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualNetworkName": autorest.Encode("path", virtualNetworkName), + } + + const APIVersion = "2022-07-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if top != nil { + queryParameters["top"] = autorest.Encode("query", *top) + } + if len(skipToken) > 0 { + queryParameters["skipToken"] = autorest.Encode("query", skipToken) + } + + preparer := autorest.CreatePreparer( + autorest.AsPost(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/ddosProtectionStatus", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListDdosProtectionStatusSender sends the ListDdosProtectionStatus request. The method will close the +// http.Response Body if it receives an error. +func (client VirtualNetworksClient) ListDdosProtectionStatusSender(req *http.Request) (future VirtualNetworksListDdosProtectionStatusFuture, err error) { + var resp *http.Response + future.FutureAPI = &azure.Future{} + resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) + if err != nil { + return + } + var azf azure.Future + azf, err = azure.NewFutureFromResponse(resp) + future.FutureAPI = &azf + future.Result = future.result + return +} + +// ListDdosProtectionStatusResponder handles the response to the ListDdosProtectionStatus request. The method always +// closes the http.Response Body. +func (client VirtualNetworksClient) ListDdosProtectionStatusResponder(resp *http.Response) (result VirtualNetworkDdosProtectionStatusResultPage, err error) { + result.vndpsr, err = client.listDdosProtectionStatusResponder(resp) + result.fn = client.listDdosProtectionStatusNextResults + return +} + +func (client VirtualNetworksClient) listDdosProtectionStatusResponder(resp *http.Response) (result VirtualNetworkDdosProtectionStatusResult, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listDdosProtectionStatusNextResults retrieves the next set of results, if any. +func (client VirtualNetworksClient) listDdosProtectionStatusNextResults(ctx context.Context, lastResults VirtualNetworkDdosProtectionStatusResult) (result VirtualNetworkDdosProtectionStatusResult, err error) { + req, err := lastResults.virtualNetworkDdosProtectionStatusResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "listDdosProtectionStatusNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + var resp *http.Response + resp, err = client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "listDdosProtectionStatusNextResults", resp, "Failure sending next results request") + } + return client.listDdosProtectionStatusResponder(resp) +} + +// ListDdosProtectionStatusComplete enumerates all values, automatically crossing page boundaries as required. +func (client VirtualNetworksClient) ListDdosProtectionStatusComplete(ctx context.Context, resourceGroupName string, virtualNetworkName string, top *int32, skipToken string) (result VirtualNetworksListDdosProtectionStatusAllFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.ListDdosProtectionStatus") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + var future VirtualNetworksListDdosProtectionStatusFuture + future, err = client.ListDdosProtectionStatus(ctx, resourceGroupName, virtualNetworkName, top, skipToken) + result.FutureAPI = future.FutureAPI + return +} + // ListUsage lists usage stats. // Parameters: // resourceGroupName - the name of the resource group. @@ -640,7 +768,7 @@ func (client VirtualNetworksClient) ListUsagePreparer(ctx context.Context, resou "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -754,7 +882,7 @@ func (client VirtualNetworksClient) UpdateTagsPreparer(ctx context.Context, reso "virtualNetworkName": autorest.Encode("path", virtualNetworkName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworktaps.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworktaps.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworktaps.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworktaps.go index 7d6bc121f9e8..ed7df95593d6 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualnetworktaps.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualnetworktaps.go @@ -106,7 +106,7 @@ func (client VirtualNetworkTapsClient) CreateOrUpdatePreparer(ctx context.Contex "tapName": autorest.Encode("path", tapName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -188,7 +188,7 @@ func (client VirtualNetworkTapsClient) DeletePreparer(ctx context.Context, resou "tapName": autorest.Encode("path", tapName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -273,7 +273,7 @@ func (client VirtualNetworkTapsClient) GetPreparer(ctx context.Context, resource "tapName": autorest.Encode("path", tapName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -349,7 +349,7 @@ func (client VirtualNetworkTapsClient) ListAllPreparer(ctx context.Context) (*ht "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -465,7 +465,7 @@ func (client VirtualNetworkTapsClient) ListByResourceGroupPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -579,7 +579,7 @@ func (client VirtualNetworkTapsClient) UpdateTagsPreparer(ctx context.Context, r "tapName": autorest.Encode("path", tapName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouterpeerings.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouterpeerings.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouterpeerings.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouterpeerings.go index 4ed695c16f96..1b085b20789f 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouterpeerings.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouterpeerings.go @@ -84,7 +84,7 @@ func (client VirtualRouterPeeringsClient) CreateOrUpdatePreparer(ctx context.Con "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -169,7 +169,7 @@ func (client VirtualRouterPeeringsClient) DeletePreparer(ctx context.Context, re "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -256,7 +256,7 @@ func (client VirtualRouterPeeringsClient) GetPreparer(ctx context.Context, resou "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -337,7 +337,7 @@ func (client VirtualRouterPeeringsClient) ListPreparer(ctx context.Context, reso "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouters.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouters.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouters.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouters.go index a4da32dbc582..83c98525aa87 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualrouters.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualrouters.go @@ -81,7 +81,7 @@ func (client VirtualRoutersClient) CreateOrUpdatePreparer(ctx context.Context, r "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -163,7 +163,7 @@ func (client VirtualRoutersClient) DeletePreparer(ctx context.Context, resourceG "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -249,7 +249,7 @@ func (client VirtualRoutersClient) GetPreparer(ctx context.Context, resourceGrou "virtualRouterName": autorest.Encode("path", virtualRouterName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -328,7 +328,7 @@ func (client VirtualRoutersClient) ListPreparer(ctx context.Context) (*http.Requ "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -444,7 +444,7 @@ func (client VirtualRoutersClient) ListByResourceGroupPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualwans.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualwans.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualwans.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualwans.go index cf2385c7948f..840147910e05 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/virtualwans.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/virtualwans.go @@ -69,7 +69,7 @@ func (client VirtualWansClient) CreateOrUpdatePreparer(ctx context.Context, reso "VirtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -151,7 +151,7 @@ func (client VirtualWansClient) DeletePreparer(ctx context.Context, resourceGrou "VirtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -236,7 +236,7 @@ func (client VirtualWansClient) GetPreparer(ctx context.Context, resourceGroupNa "VirtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -312,7 +312,7 @@ func (client VirtualWansClient) ListPreparer(ctx context.Context) (*http.Request "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -428,7 +428,7 @@ func (client VirtualWansClient) ListByResourceGroupPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -542,7 +542,7 @@ func (client VirtualWansClient) UpdateTagsPreparer(ctx context.Context, resource "VirtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnconnections.go index bfa051bca448..48663fa5f9b0 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnconnections.go @@ -72,7 +72,7 @@ func (client VpnConnectionsClient) CreateOrUpdatePreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -156,7 +156,7 @@ func (client VpnConnectionsClient) DeletePreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -243,7 +243,7 @@ func (client VpnConnectionsClient) GetPreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -324,7 +324,7 @@ func (client VpnConnectionsClient) ListByVpnGatewayPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -434,7 +434,7 @@ func (client VpnConnectionsClient) StartPacketCapturePreparer(ctx context.Contex "vpnConnectionName": autorest.Encode("path", vpnConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -521,7 +521,7 @@ func (client VpnConnectionsClient) StopPacketCapturePreparer(ctx context.Context "vpnConnectionName": autorest.Encode("path", vpnConnectionName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpngateways.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpngateways.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpngateways.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpngateways.go index ea9d2837eccb..19e473877d6d 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpngateways.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpngateways.go @@ -83,7 +83,7 @@ func (client VpnGatewaysClient) CreateOrUpdatePreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -165,7 +165,7 @@ func (client VpnGatewaysClient) DeletePreparer(ctx context.Context, resourceGrou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -250,7 +250,7 @@ func (client VpnGatewaysClient) GetPreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -326,7 +326,7 @@ func (client VpnGatewaysClient) ListPreparer(ctx context.Context) (*http.Request "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -442,7 +442,7 @@ func (client VpnGatewaysClient) ListByResourceGroupPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -548,7 +548,7 @@ func (client VpnGatewaysClient) ResetPreparer(ctx context.Context, resourceGroup "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -628,7 +628,7 @@ func (client VpnGatewaysClient) StartPacketCapturePreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -713,7 +713,7 @@ func (client VpnGatewaysClient) StopPacketCapturePreparer(ctx context.Context, r "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -798,7 +798,7 @@ func (client VpnGatewaysClient) UpdateTagsPreparer(ctx context.Context, resource "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnlinkconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnlinkconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnlinkconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnlinkconnections.go index f84a1b158e0e..21927e1f1da2 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnlinkconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnlinkconnections.go @@ -73,7 +73,7 @@ func (client VpnLinkConnectionsClient) GetIkeSasPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -166,7 +166,7 @@ func (client VpnLinkConnectionsClient) ListByVpnConnectionPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -276,7 +276,7 @@ func (client VpnLinkConnectionsClient) ResetConnectionPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurations.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurations.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurations.go index 14784a641112..28d3c9535c58 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurations.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurations.go @@ -71,7 +71,7 @@ func (client VpnServerConfigurationsClient) CreateOrUpdatePreparer(ctx context.C "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -153,7 +153,7 @@ func (client VpnServerConfigurationsClient) DeletePreparer(ctx context.Context, "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -238,7 +238,7 @@ func (client VpnServerConfigurationsClient) GetPreparer(ctx context.Context, res "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -314,7 +314,7 @@ func (client VpnServerConfigurationsClient) ListPreparer(ctx context.Context) (* "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -430,7 +430,7 @@ func (client VpnServerConfigurationsClient) ListByResourceGroupPreparer(ctx cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -544,7 +544,7 @@ func (client VpnServerConfigurationsClient) UpdateTagsPreparer(ctx context.Conte "vpnServerConfigurationName": autorest.Encode("path", vpnServerConfigurationName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go index 21176b057549..fa7215ff90f0 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnserverconfigurationsassociatedwithvirtualwan.go @@ -70,7 +70,7 @@ func (client VpnServerConfigurationsAssociatedWithVirtualWanClient) ListPreparer "virtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinkconnections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinkconnections.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinkconnections.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinkconnections.go index b4b1695a678b..e39710eedbd1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinkconnections.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinkconnections.go @@ -80,7 +80,7 @@ func (client VpnSiteLinkConnectionsClient) GetPreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinks.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinks.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinks.go index 284ac1665d37..966f7e7a4cc9 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitelinks.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitelinks.go @@ -77,7 +77,7 @@ func (client VpnSiteLinksClient) GetPreparer(ctx context.Context, resourceGroupN "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -158,7 +158,7 @@ func (client VpnSiteLinksClient) ListByVpnSitePreparer(ctx context.Context, reso "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsites.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsites.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsites.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsites.go index 4524ca65ab0c..6baf98b822ef 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsites.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsites.go @@ -83,7 +83,7 @@ func (client VpnSitesClient) CreateOrUpdatePreparer(ctx context.Context, resourc "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -165,7 +165,7 @@ func (client VpnSitesClient) DeletePreparer(ctx context.Context, resourceGroupNa "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -250,7 +250,7 @@ func (client VpnSitesClient) GetPreparer(ctx context.Context, resourceGroupName "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -326,7 +326,7 @@ func (client VpnSitesClient) ListPreparer(ctx context.Context) (*http.Request, e "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -442,7 +442,7 @@ func (client VpnSitesClient) ListByResourceGroupPreparer(ctx context.Context, re "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -556,7 +556,7 @@ func (client VpnSitesClient) UpdateTagsPreparer(ctx context.Context, resourceGro "vpnSiteName": autorest.Encode("path", vpnSiteName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitesconfiguration.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitesconfiguration.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitesconfiguration.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitesconfiguration.go index 1cc56fb2eccf..91f1679b9c61 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/vpnsitesconfiguration.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/vpnsitesconfiguration.go @@ -77,7 +77,7 @@ func (client VpnSitesConfigurationClient) DownloadPreparer(ctx context.Context, "virtualWANName": autorest.Encode("path", virtualWANName), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/watchers.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/watchers.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/watchers.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/watchers.go index abdca8fdd90b..b995d820c544 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/watchers.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/watchers.go @@ -89,7 +89,7 @@ func (client WatchersClient) CheckConnectivityPreparer(ctx context.Context, reso "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -178,7 +178,7 @@ func (client WatchersClient) CreateOrUpdatePreparer(ctx context.Context, resourc "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -250,7 +250,7 @@ func (client WatchersClient) DeletePreparer(ctx context.Context, resourceGroupNa "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -335,7 +335,7 @@ func (client WatchersClient) GetPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -415,7 +415,7 @@ func (client WatchersClient) GetAzureReachabilityReportPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -503,7 +503,7 @@ func (client WatchersClient) GetFlowLogStatusPreparer(ctx context.Context, resou "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -596,7 +596,7 @@ func (client WatchersClient) GetNetworkConfigurationDiagnosticPreparer(ctx conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -686,7 +686,7 @@ func (client WatchersClient) GetNextHopPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -775,7 +775,7 @@ func (client WatchersClient) GetTopologyPreparer(ctx context.Context, resourceGr "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -857,7 +857,7 @@ func (client WatchersClient) GetTroubleshootingPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -945,7 +945,7 @@ func (client WatchersClient) GetTroubleshootingResultPreparer(ctx context.Contex "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1033,7 +1033,7 @@ func (client WatchersClient) GetVMSecurityRulesPreparer(ctx context.Context, res "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1119,7 +1119,7 @@ func (client WatchersClient) ListPreparer(ctx context.Context, resourceGroupName "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1190,7 +1190,7 @@ func (client WatchersClient) ListAllPreparer(ctx context.Context) (*http.Request "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1261,7 +1261,7 @@ func (client WatchersClient) ListAvailableProvidersPreparer(ctx context.Context, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1353,7 +1353,7 @@ func (client WatchersClient) SetFlowLogConfigurationPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1442,7 +1442,7 @@ func (client WatchersClient) UpdateTagsPreparer(ctx context.Context, resourceGro "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -1524,7 +1524,7 @@ func (client WatchersClient) VerifyIPFlowPreparer(ctx context.Context, resourceG "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webapplicationfirewallpolicies.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webapplicationfirewallpolicies.go similarity index 95% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webapplicationfirewallpolicies.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webapplicationfirewallpolicies.go index 5a0a6a2b315e..db5c195a2573 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webapplicationfirewallpolicies.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webapplicationfirewallpolicies.go @@ -58,6 +58,12 @@ func (client WebApplicationFirewallPoliciesClient) CreateOrUpdate(ctx context.Co Chain: []validation.Constraint{{Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.MaxRequestBodySizeInKb", Name: validation.InclusiveMinimum, Rule: int64(8), Chain: nil}}}, {Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.FileUploadLimitInMb", Name: validation.Null, Rule: false, Chain: []validation.Constraint{{Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.FileUploadLimitInMb", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, + {Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.CustomBlockResponseStatusCode", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.CustomBlockResponseStatusCode", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, + {Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.CustomBlockResponseBody", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.CustomBlockResponseBody", Name: validation.MaxLength, Rule: 32768, Chain: nil}, + {Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.PolicySettings.CustomBlockResponseBody", Name: validation.Pattern, Rule: `^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$`, Chain: nil}, + }}, }}, {Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.ManagedRules", Name: validation.Null, Rule: true, Chain: []validation.Constraint{{Target: "parameters.WebApplicationFirewallPolicyPropertiesFormat.ManagedRules.ManagedRuleSets", Name: validation.Null, Rule: true, Chain: nil}}}, @@ -95,7 +101,7 @@ func (client WebApplicationFirewallPoliciesClient) CreateOrUpdatePreparer(ctx co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -173,7 +179,7 @@ func (client WebApplicationFirewallPoliciesClient) DeletePreparer(ctx context.Co "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -264,7 +270,7 @@ func (client WebApplicationFirewallPoliciesClient) GetPreparer(ctx context.Conte "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -343,7 +349,7 @@ func (client WebApplicationFirewallPoliciesClient) ListPreparer(ctx context.Cont "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -456,7 +462,7 @@ func (client WebApplicationFirewallPoliciesClient) ListAllPreparer(ctx context.C "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webcategories.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webcategories.go similarity index 99% rename from cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webcategories.go rename to cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webcategories.go index 13fb4c1fb72e..bc9fa35445d1 100644 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network/webcategories.go +++ b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network/webcategories.go @@ -74,7 +74,7 @@ func (client WebCategoriesClient) GetPreparer(ctx context.Context, name string, "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } @@ -153,7 +153,7 @@ func (client WebCategoriesClient) ListBySubscriptionPreparer(ctx context.Context "subscriptionId": autorest.Encode("path", client.SubscriptionID), } - const APIVersion = "2021-08-01" + const APIVersion = "2022-07-01" queryParameters := map[string]interface{}{ "api-version": APIVersion, } diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md index d680ea4d9779..cb72bd6f2bc4 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -1,3 +1,57 @@ +## 2.11.0 + +In prior versions of Ginkgo specs the CLI filter flags (e.g. `--focus`, `--label-filter`) would _override_ any programmatic focus. This behavior has proved surprising and confusing in at least the following ways: + +- users cannot combine programmatic filters and CLI filters to more efficiently select subsets of tests +- CLI filters can override programmatic focus on CI systems resulting in an exit code of 0 despite the presence of (incorrectly!) committed focused specs. + +Going forward Ginkgo will AND all programmatic and CLI filters. Moreover, the presence of any programmatic focused tests will always result in a non-zero exit code. + +This change is technically a change in Ginkgo's external contract and may require some users to make changes to successfully adopt. Specifically: it's possible some users were intentionally using CLI filters to override programmatic focus. If this is you please open an issue so we can explore solutions to the underlying problem you are trying to solve. + +### Fixes +- Programmatic focus is no longer overwrriten by CLI filters [d6bba86] + +### Maintenance +- Bump github.com/onsi/gomega from 1.27.7 to 1.27.8 (#1218) [4a70a38] +- Bump golang.org/x/sys from 0.8.0 to 0.9.0 (#1219) [97eda4d] + +## 2.10.0 + +### Features +- feat(ginkgo/generators): add --tags flag (#1216) [a782a77] + adds a new --tags flag to ginkgo generate + +### Fixes +- Fix broken link of MIGRATING_TO_V2.md (#1217) [548d78e] + +### Maintenance +- Bump golang.org/x/tools from 0.9.1 to 0.9.3 (#1215) [2b76a5e] + +## 2.9.7 + +### Fixes +- fix race when multiple defercleanups are called in goroutines [07fc3a0] + +## 2.9.6 + +### Fixes +- fix: create parent directory before report files (#1212) [0ac65de] + +### Maintenance +- Bump github.com/onsi/gomega from 1.27.6 to 1.27.7 (#1202) [3e39231] + +## 2.9.5 + +### Fixes +- ensure the correct deterministic sort order is produced when ordered specs are generated by a helper function [7fa0b6b] + +### Maintenance +- fix generators link (#1200) [9f9d8b9] +- Bump golang.org/x/tools from 0.8.0 to 0.9.1 (#1196) [150e3f2] +- fix spelling err in docs (#1199) [0013b1a] +- Bump golang.org/x/sys from 0.7.0 to 0.8.0 (#1193) [9e9e3e5] + ## 2.9.4 ### Fixes diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go index 48d23f9191c2..be01dec979dc 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.go @@ -32,6 +32,9 @@ func BuildGenerateCommand() command.Command { {Name: "template-data", KeyPath: "CustomTemplateData", UsageArgument: "template-data-file", Usage: "If specified, generate will use the contents of the file passed as data to be rendered in the test file template"}, + {Name: "tags", KeyPath: "Tags", + UsageArgument: "build-tags", + Usage: "If specified, generate will create a test file that uses the given build tags (i.e. `--tags e2e,!unit` will add `//go:build e2e,!unit`)"}, }, &conf, types.GinkgoFlagSections{}, @@ -59,6 +62,7 @@ You can also pass a of the form "file.go" and generate will emit "fil } type specData struct { + BuildTags string Package string Subject string PackageImportPath string @@ -93,6 +97,7 @@ func generateTestFileForSubject(subject string, conf GeneratorsConfig) { } data := specData{ + BuildTags: getBuildTags(conf.Tags), Package: determinePackageName(packageName, conf.Internal), Subject: formattedName, PackageImportPath: getPackageImportPath(), diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go index c3470adbfd1c..4dab07d03692 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.go @@ -1,6 +1,7 @@ package generators -var specText = `package {{.Package}} +var specText = `{{.BuildTags}} +package {{.Package}} import ( {{.GinkgoImport}} @@ -14,7 +15,8 @@ var _ = {{.GinkgoPackage}}Describe("{{.Subject}}", func() { }) ` -var agoutiSpecText = `package {{.Package}} +var agoutiSpecText = `{{.BuildTags}} +package {{.Package}} import ( {{.GinkgoImport}} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go index 3046a4487aaa..28c7aa6f434e 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.go @@ -1,6 +1,7 @@ package generators import ( + "fmt" "go/build" "os" "path/filepath" @@ -14,6 +15,7 @@ type GeneratorsConfig struct { Agouti, NoDot, Internal bool CustomTemplate string CustomTemplateData string + Tags string } func getPackageAndFormattedName() (string, string, string) { @@ -62,3 +64,13 @@ func determinePackageName(name string, internal bool) string { return name + "_test" } + +// getBuildTags returns the resultant string to be added. +// If the input string is not empty, then returns a `//go:build {}` string, +// otherwise returns an empty string. +func getBuildTags(tags string) string { + if tags != "" { + return fmt.Sprintf("//go:build %s\n", tags) + } + return "" +} diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go index 966ea0c1a27a..e3da7d14dd1f 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/focus.go @@ -8,22 +8,22 @@ import ( ) /* - If a container marked as focus has a descendant that is also marked as focus, Ginkgo's policy is to - unmark the container's focus. This gives developers a more intuitive experience when debugging specs. - It is common to focus a container to just run a subset of specs, then identify the specific specs within the container to focus - - this policy allows the developer to simply focus those specific specs and not need to go back and turn the focus off of the container: - - As a common example, consider: - - FDescribe("something to debug", function() { - It("works", function() {...}) - It("works", function() {...}) - FIt("doesn't work", function() {...}) - It("works", function() {...}) - }) - - here the developer's intent is to focus in on the `"doesn't work"` spec and not to run the adjacent specs in the focused `"something to debug"` container. - The nested policy applied by this function enables this behavior. +If a container marked as focus has a descendant that is also marked as focus, Ginkgo's policy is to +unmark the container's focus. This gives developers a more intuitive experience when debugging specs. +It is common to focus a container to just run a subset of specs, then identify the specific specs within the container to focus - +this policy allows the developer to simply focus those specific specs and not need to go back and turn the focus off of the container: + +As a common example, consider: + + FDescribe("something to debug", function() { + It("works", function() {...}) + It("works", function() {...}) + FIt("doesn't work", function() {...}) + It("works", function() {...}) + }) + +here the developer's intent is to focus in on the `"doesn't work"` spec and not to run the adjacent specs in the focused `"something to debug"` container. +The nested policy applied by this function enables this behavior. */ func ApplyNestedFocusPolicyToTree(tree *TreeNode) { var walkTree func(tree *TreeNode) bool @@ -44,46 +44,43 @@ func ApplyNestedFocusPolicyToTree(tree *TreeNode) { } /* - Ginkgo supports focussing specs using `FIt`, `FDescribe`, etc. - this is called "programmatic focus" - It also supports focussing specs using regular expressions on the command line (`-focus=`, `-skip=`) that match against spec text - and file filters (`-focus-files=`, `-skip-files=`) that match against code locations for nodes in specs. +Ginkgo supports focussing specs using `FIt`, `FDescribe`, etc. - this is called "programmatic focus" +It also supports focussing specs using regular expressions on the command line (`-focus=`, `-skip=`) that match against spec text and file filters (`-focus-files=`, `-skip-files=`) that match against code locations for nodes in specs. - If any of the CLI flags are provided they take precedence. The file filters run first followed by the regex filters. +When both programmatic and file filters are provided their results are ANDed together. If multiple kinds of filters are provided, the file filters run first followed by the regex filters. - This function sets the `Skip` property on specs by applying Ginkgo's focus policy: - - If there are no CLI arguments and no programmatic focus, do nothing. - - If there are no CLI arguments but a spec somewhere has programmatic focus, skip any specs that have no programmatic focus. - - If there are CLI arguments parse them and skip any specs that either don't match the focus filters or do match the skip filters. +This function sets the `Skip` property on specs by applying Ginkgo's focus policy: +- If there are no CLI arguments and no programmatic focus, do nothing. +- If a spec somewhere has programmatic focus skip any specs that have no programmatic focus. +- If there are CLI arguments parse them and skip any specs that either don't match the focus filters or do match the skip filters. - *Note:* specs with pending nodes are Skipped when created by NewSpec. +*Note:* specs with pending nodes are Skipped when created by NewSpec. */ func ApplyFocusToSpecs(specs Specs, description string, suiteLabels Labels, suiteConfig types.SuiteConfig) (Specs, bool) { focusString := strings.Join(suiteConfig.FocusStrings, "|") skipString := strings.Join(suiteConfig.SkipStrings, "|") - hasFocusCLIFlags := focusString != "" || skipString != "" || len(suiteConfig.SkipFiles) > 0 || len(suiteConfig.FocusFiles) > 0 || suiteConfig.LabelFilter != "" - type SkipCheck func(spec Spec) bool // by default, skip any specs marked pending skipChecks := []SkipCheck{func(spec Spec) bool { return spec.Nodes.HasNodeMarkedPending() }} hasProgrammaticFocus := false - if !hasFocusCLIFlags { - // check for programmatic focus - for _, spec := range specs { - if spec.Nodes.HasNodeMarkedFocus() && !spec.Nodes.HasNodeMarkedPending() { - skipChecks = append(skipChecks, func(spec Spec) bool { return !spec.Nodes.HasNodeMarkedFocus() }) - hasProgrammaticFocus = true - break - } + for _, spec := range specs { + if spec.Nodes.HasNodeMarkedFocus() && !spec.Nodes.HasNodeMarkedPending() { + hasProgrammaticFocus = true + break } } + if hasProgrammaticFocus { + skipChecks = append(skipChecks, func(spec Spec) bool { return !spec.Nodes.HasNodeMarkedFocus() }) + } + if suiteConfig.LabelFilter != "" { labelFilter, _ := types.ParseLabelFilter(suiteConfig.LabelFilter) - skipChecks = append(skipChecks, func(spec Spec) bool { - return !labelFilter(UnionOfLabels(suiteLabels, spec.Nodes.UnionOfLabels())) + skipChecks = append(skipChecks, func(spec Spec) bool { + return !labelFilter(UnionOfLabels(suiteLabels, spec.Nodes.UnionOfLabels())) }) } diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go index 0869bffb390b..14c7cf54edd0 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/node.go @@ -875,6 +875,15 @@ func (n Nodes) FirstNodeMarkedOrdered() Node { return Node{} } +func (n Nodes) IndexOfFirstNodeMarkedOrdered() int { + for i := range n { + if n[i].MarkedOrdered { + return i + } + } + return -1 +} + func (n Nodes) GetMaxFlakeAttempts() int { maxFlakeAttempts := 0 for i := range n { diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go index 7ed43c7fdcc1..84eea0a59e65 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go @@ -27,36 +27,43 @@ func (s *SortableSpecs) Swap(i, j int) { s.Indexes[i], s.Indexes[j] = s.Indexes[ func (s *SortableSpecs) Less(i, j int) bool { a, b := s.Specs[s.Indexes[i]], s.Specs[s.Indexes[j]] - firstOrderedA := a.Nodes.FirstNodeMarkedOrdered() - firstOrderedB := b.Nodes.FirstNodeMarkedOrdered() - if firstOrderedA.ID == firstOrderedB.ID && !firstOrderedA.IsZero() { - // strictly preserve order in ordered containers. ID will track this as IDs are generated monotonically - return a.FirstNodeWithType(types.NodeTypeIt).ID < b.FirstNodeWithType(types.NodeTypeIt).ID + aNodes, bNodes := a.Nodes.WithType(types.NodeTypesForContainerAndIt), b.Nodes.WithType(types.NodeTypesForContainerAndIt) + + firstOrderedAIdx, firstOrderedBIdx := aNodes.IndexOfFirstNodeMarkedOrdered(), bNodes.IndexOfFirstNodeMarkedOrdered() + if firstOrderedAIdx > -1 && firstOrderedBIdx > -1 && aNodes[firstOrderedAIdx].ID == bNodes[firstOrderedBIdx].ID { + // strictly preserve order within an ordered containers. ID will track this as IDs are generated monotonically + return aNodes.FirstNodeWithType(types.NodeTypeIt).ID < bNodes.FirstNodeWithType(types.NodeTypeIt).ID + } + + // if either spec is in an ordered container - only use the nodes up to the outermost ordered container + if firstOrderedAIdx > -1 { + aNodes = aNodes[:firstOrderedAIdx+1] + } + if firstOrderedBIdx > -1 { + bNodes = bNodes[:firstOrderedBIdx+1] } - aCLs := a.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations() - bCLs := b.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations() - for i := 0; i < len(aCLs) && i < len(bCLs); i++ { - aCL, bCL := aCLs[i], bCLs[i] - if aCL.FileName < bCL.FileName { - return true - } else if aCL.FileName > bCL.FileName { - return false + for i := 0; i < len(aNodes) && i < len(bNodes); i++ { + aCL, bCL := aNodes[i].CodeLocation, bNodes[i].CodeLocation + if aCL.FileName != bCL.FileName { + return aCL.FileName < bCL.FileName } - if aCL.LineNumber < bCL.LineNumber { - return true - } else if aCL.LineNumber > bCL.LineNumber { - return false + if aCL.LineNumber != bCL.LineNumber { + return aCL.LineNumber < bCL.LineNumber } } // either everything is equal or we have different lengths of CLs - if len(aCLs) < len(bCLs) { - return true - } else if len(aCLs) > len(bCLs) { - return false + if len(aNodes) != len(bNodes) { + return len(aNodes) < len(bNodes) } // ok, now we are sure everything was equal. so we use the spec text to break ties - return a.Text() < b.Text() + for i := 0; i < len(aNodes); i++ { + if aNodes[i].Text != bNodes[i].Text { + return aNodes[i].Text < bNodes[i].Text + } + } + // ok, all those texts were equal. we'll use the ID of the most deeply nested node as a last resort + return aNodes[len(aNodes)-1].ID < bNodes[len(bNodes)-1].ID } type GroupedSpecIndices []SpecIndices diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go index 60c913d8971d..ea0d259d92a0 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/internal/suite.go @@ -245,7 +245,9 @@ func (suite *Suite) pushCleanupNode(node Node) error { node.NodeIDWhereCleanupWasGenerated = suite.currentNode.ID node.NestingLevel = suite.currentNode.NestingLevel + suite.selectiveLock.Lock() suite.cleanupNodes = append(suite.cleanupNodes, node) + suite.selectiveLock.Unlock() return nil } diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go index 7f96c450fe94..be506f9b472d 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/json_report.go @@ -4,12 +4,16 @@ import ( "encoding/json" "fmt" "os" + "path" "github.com/onsi/ginkgo/v2/types" ) -//GenerateJSONReport produces a JSON-formatted report at the passed in destination +// GenerateJSONReport produces a JSON-formatted report at the passed in destination func GenerateJSONReport(report types.Report, destination string) error { + if err := os.MkdirAll(path.Dir(destination), 0770); err != nil { + return err + } f, err := os.Create(destination) if err != nil { return err @@ -25,8 +29,8 @@ func GenerateJSONReport(report types.Report, destination string) error { return f.Close() } -//MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources -//It skips over reports that fail to decode but reports on them via the returned messages []string +// MergeJSONReports produces a single JSON-formatted report at the passed in destination by merging the JSON-formatted reports provided in sources +// It skips over reports that fail to decode but reports on them via the returned messages []string func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, error) { messages := []string{} allReports := []types.Report{} @@ -46,6 +50,9 @@ func MergeAndCleanupJSONReports(sources []string, destination string) ([]string, allReports = append(allReports, reports...) } + if err := os.MkdirAll(path.Dir(destination), 0770); err != nil { + return messages, err + } f, err := os.Create(destination) if err != nil { return messages, err diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go index 592d7f614b5f..816042208c08 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.go @@ -14,6 +14,7 @@ import ( "encoding/xml" "fmt" "os" + "path" "strings" "github.com/onsi/ginkgo/v2/config" @@ -285,6 +286,9 @@ func GenerateJUnitReportWithConfig(report types.Report, dst string, config Junit TestSuites: []JUnitTestSuite{suite}, } + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return err + } f, err := os.Create(dst) if err != nil { return err @@ -322,6 +326,9 @@ func MergeAndCleanupJUnitReports(sources []string, dst string) ([]string, error) mergedReport.TestSuites = append(mergedReport.TestSuites, report.TestSuites...) } + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return messages, err + } f, err := os.Create(dst) if err != nil { return messages, err diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go index c1863496dc71..e990ad82e138 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.go @@ -11,6 +11,7 @@ package reporters import ( "fmt" "os" + "path" "strings" "github.com/onsi/ginkgo/v2/types" @@ -27,6 +28,9 @@ func tcEscape(s string) string { } func GenerateTeamcityReport(report types.Report, dst string) error { + if err := os.MkdirAll(path.Dir(dst), 0770); err != nil { + return err + } f, err := os.Create(dst) if err != nil { return err diff --git a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go index d452bf9a695a..f895739b8331 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/cluster-autoscaler/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.9.4" +const VERSION = "2.11.0" diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore b/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore index 52266eae1132..425d0a509fe7 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/.gitignore @@ -3,5 +3,5 @@ . .idea gomega.iml -TODO.md +TODO .vscode \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md index ef428f6f6293..1526497b9f24 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,46 @@ +## 1.27.10 + +### Fixes +- fix: go 1.21 adding goroutine ID to creator+location (#685) [bdc7803] + +## 1.27.9 + +### Fixes +- Prevent nil-dereference in format.Object for boxed nil error (#681) [3b31fc3] + +### Maintenance +- Bump golang.org/x/net from 0.11.0 to 0.12.0 (#679) [360849b] +- chore: use String() instead of fmt.Sprintf (#678) [86f3659] +- Bump golang.org/x/net from 0.10.0 to 0.11.0 (#674) [642ead0] +- chore: unnecessary use of fmt.Sprintf (#677) [ceb9ca6] +- Bump github.com/onsi/ginkgo/v2 from 2.10.0 to 2.11.0 (#675) [a2087d8] +- docs: fix ContainSubstring references (#673) [fc9a89f] +- Bump github.com/onsi/ginkgo/v2 from 2.9.7 to 2.10.0 (#671) [9076019] + +## 1.27.8 + +### Fixes +- HaveExactElement should not call FailureMessage if a submatcher returned an error [096f392] + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.9.5 to 2.9.7 (#669) [8884bee] + +## 1.27.7 + +### Fixes +- fix: gcustom.MakeMatcher accepts nil as actual value (#666) [57054d5] + +### Maintenance +- update gitignore [05c1bc6] +- Bump github.com/onsi/ginkgo/v2 from 2.9.4 to 2.9.5 (#663) [7cadcf6] +- Bump golang.org/x/net from 0.9.0 to 0.10.0 (#662) [b524839] +- Bump github.com/onsi/ginkgo/v2 from 2.9.2 to 2.9.4 (#661) [5f44694] +- Bump commonmarker from 0.23.8 to 0.23.9 in /docs (#657) [05dc99a] +- Bump nokogiri from 1.14.1 to 1.14.3 in /docs (#658) [3a033d1] +- Replace deprecated NewGomegaWithT with NewWithT (#659) [a19238f] +- Bump golang.org/x/net from 0.8.0 to 0.9.0 (#656) [29ed041] +- Bump actions/setup-go from 3 to 4 (#651) [11b2080] + ## 1.27.6 ### Fixes diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go index 56bdd053bbcd..6c1680638bf9 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/format/format.go @@ -259,7 +259,7 @@ func Object(object interface{}, indentation uint) string { indent := strings.Repeat(Indent, int(indentation)) value := reflect.ValueOf(object) commonRepresentation := "" - if err, ok := object.(error); ok { + if err, ok := object.(error); ok && !isNilValue(value) { // isNilValue check needed here to avoid nil deref due to boxed nil commonRepresentation += "\n" + IndentString(err.Error(), indentation) + "\n" + indent } return fmt.Sprintf("%s<%s>: %s%s", indent, formatType(value), commonRepresentation, formatValue(value, indentation)) @@ -302,7 +302,7 @@ func formatType(v reflect.Value) string { case reflect.Map: return fmt.Sprintf("%s | len:%d", v.Type(), v.Len()) default: - return fmt.Sprintf("%s", v.Type()) + return v.Type().String() } } diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go index 872592bfbc37..1fd1803acf8d 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -22,7 +22,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.27.6" +const GOMEGA_VERSION = "1.27.10" const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. If you're using Ginkgo then you probably forgot to put your assertion in an It(). diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go index b832f3dbaf68..bdaf62b56b7f 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers.go @@ -92,9 +92,9 @@ func Succeed() types.GomegaMatcher { // // These are valid use-cases: // -// Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error" -// Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual) -// Expect(err).Should(MatchError(ContainsSubstring("sprocket not found"))) // asserts that edrr.Error() contains substring "sprocket not found" +// Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error" +// Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual) +// Expect(err).Should(MatchError(ContainSubstring("sprocket not found"))) // asserts that edrr.Error() contains substring "sprocket not found" // // It is an error for err to be nil or an object that does not implement the // Error interface diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go index acffc8570f91..93d4497c7058 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_directory.go @@ -52,5 +52,5 @@ func (matcher *BeADirectoryMatcher) FailureMessage(actual interface{}) (message } func (matcher *BeADirectoryMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, fmt.Sprintf("not be a directory")) + return format.Message(actual, "not be a directory") } diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go index 89441c800367..8fefc4deb7a3 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go @@ -52,5 +52,5 @@ func (matcher *BeARegularFileMatcher) FailureMessage(actual interface{}) (messag } func (matcher *BeARegularFileMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, fmt.Sprintf("not be a regular file")) + return format.Message(actual, "not be a regular file") } diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go index ec6506b001eb..e2bdd28113b3 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go @@ -32,9 +32,9 @@ func (matcher *BeAnExistingFileMatcher) Match(actual interface{}) (success bool, } func (matcher *BeAnExistingFileMatcher) FailureMessage(actual interface{}) (message string) { - return format.Message(actual, fmt.Sprintf("to exist")) + return format.Message(actual, "to exist") } func (matcher *BeAnExistingFileMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, fmt.Sprintf("not to exist")) + return format.Message(actual, "not to exist") } diff --git a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go index 7cce776c1843..dca5b944672c 100644 --- a/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go +++ b/cluster-autoscaler/vendor/github.com/onsi/gomega/matchers/have_exact_elements.go @@ -44,7 +44,12 @@ func (matcher *HaveExactElementsMatcher) Match(actual interface{}) (success bool elemMatcher := matchers[i].(omegaMatcher) match, err := elemMatcher.Match(values[i]) - if err != nil || !match { + if err != nil { + matcher.mismatchFailures = append(matcher.mismatchFailures, mismatchFailure{ + index: i, + failure: err.Error(), + }) + } else if !match { matcher.mismatchFailures = append(matcher.mismatchFailures, mismatchFailure{ index: i, failure: elemMatcher.FailureMessage(values[i]), diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_compare.go index 95d8e59da69b..b774da88d86c 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -352,9 +352,9 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { // Greater asserts that the first element is greater than the second // -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") +// assert.Greater(t, 2, 1) +// assert.Greater(t, float64(2), float64(1)) +// assert.Greater(t, "b", "a") func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -364,10 +364,10 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") +// assert.GreaterOrEqual(t, 2, 1) +// assert.GreaterOrEqual(t, 2, 2) +// assert.GreaterOrEqual(t, "b", "a") +// assert.GreaterOrEqual(t, "b", "b") func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -377,9 +377,9 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in // Less asserts that the first element is less than the second // -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") +// assert.Less(t, 1, 2) +// assert.Less(t, float64(1), float64(2)) +// assert.Less(t, "a", "b") func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -389,10 +389,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) // LessOrEqual asserts that the first element is less than or equal to the second // -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") +// assert.LessOrEqual(t, 1, 2) +// assert.LessOrEqual(t, 2, 2) +// assert.LessOrEqual(t, "a", "b") +// assert.LessOrEqual(t, "b", "b") func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -402,8 +402,8 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter // Positive asserts that the specified element is positive // -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) +// assert.Positive(t, 1) +// assert.Positive(t, 1.23) func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -414,8 +414,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { // Negative asserts that the specified element is negative // -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) +// assert.Negative(t, -1) +// assert.Negative(t, -1.23) func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_format.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_format.go index 7880b8f94333..84dbd6c790b9 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -22,9 +22,9 @@ func Conditionf(t TestingT, comp Comparison, msg string, args ...interface{}) bo // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") +// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") +// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") +// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -56,7 +56,7 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string // Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Emptyf(t, obj, "error message %s", "formatted") +// assert.Emptyf(t, obj, "error message %s", "formatted") func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -66,7 +66,7 @@ func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) boo // Equalf asserts that two objects are equal. // -// assert.Equalf(t, 123, 123, "error message %s", "formatted") +// assert.Equalf(t, 123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -81,8 +81,8 @@ func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, ar // EqualErrorf asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -90,10 +90,27 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args return EqualError(t, theError, errString, append([]interface{}{msg}, args...)...) } +// EqualExportedValuesf asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return EqualExportedValues(t, expected, actual, append([]interface{}{msg}, args...)...) +} + // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") +// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -103,10 +120,10 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// if assert.Errorf(t, err, "error message %s", "formatted") { +// assert.Equal(t, expectedErrorf, err) +// } func Errorf(t TestingT, err error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -126,8 +143,8 @@ func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...int // ErrorContainsf asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") func ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -147,7 +164,7 @@ func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -155,9 +172,34 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick return Eventually(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...) } +// EventuallyWithTf asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func EventuallyWithTf(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return EventuallyWithT(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...) +} + // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") +// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -183,7 +225,7 @@ func FailNowf(t TestingT, failureMessage string, msg string, args ...interface{} // Falsef asserts that the specified value is false. // -// assert.Falsef(t, myBool, "error message %s", "formatted") +// assert.Falsef(t, myBool, "error message %s", "formatted") func Falsef(t TestingT, value bool, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -202,9 +244,9 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool // Greaterf asserts that the first element is greater than the second // -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") +// assert.Greaterf(t, 2, 1, "error message %s", "formatted") +// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") +// assert.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -214,10 +256,10 @@ func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...in // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") +// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") +// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") +// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") +// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -228,7 +270,7 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { @@ -241,7 +283,7 @@ func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { @@ -253,7 +295,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u // HTTPErrorf asserts that a specified handler returns an error status code. // -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -265,7 +307,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -277,7 +319,7 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { @@ -289,7 +331,7 @@ func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url st // HTTPSuccessf asserts that a specified handler returns a success status code. // -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -301,7 +343,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -311,7 +353,7 @@ func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, ms // InDeltaf asserts that the two numerals are within delta of each other. // -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -353,9 +395,9 @@ func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsil // IsDecreasingf asserts that the collection is decreasing // -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -365,9 +407,9 @@ func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface // IsIncreasingf asserts that the collection is increasing // -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -377,9 +419,9 @@ func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface // IsNonDecreasingf asserts that the collection is not decreasing // -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -389,9 +431,9 @@ func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interf // IsNonIncreasingf asserts that the collection is not increasing // -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -409,7 +451,7 @@ func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg strin // JSONEqf asserts that two JSON strings are equivalent. // -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -420,7 +462,7 @@ func JSONEqf(t TestingT, expected string, actual string, msg string, args ...int // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") +// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -430,9 +472,9 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf // Lessf asserts that the first element is less than the second // -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") +// assert.Lessf(t, 1, 2, "error message %s", "formatted") +// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") +// assert.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -442,10 +484,10 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter // LessOrEqualf asserts that the first element is less than or equal to the second // -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") +// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") +// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") +// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") +// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -455,8 +497,8 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . // Negativef asserts that the specified element is negative // -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") +// assert.Negativef(t, -1, "error message %s", "formatted") +// assert.Negativef(t, -1.23, "error message %s", "formatted") func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -467,7 +509,7 @@ func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -477,7 +519,7 @@ func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time. // Nilf asserts that the specified object is nil. // -// assert.Nilf(t, err, "error message %s", "formatted") +// assert.Nilf(t, err, "error message %s", "formatted") func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -496,10 +538,10 @@ func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) bool // NoErrorf asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if assert.NoErrorf(t, err, "error message %s", "formatted") { +// assert.Equal(t, expectedObj, actualObj) +// } func NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -519,9 +561,9 @@ func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) boo // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -532,9 +574,9 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } +// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { +// assert.Equal(t, "two", obj[1]) +// } func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -544,7 +586,7 @@ func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) // NotEqualf asserts that the specified values are NOT equal. // -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") +// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -557,7 +599,7 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -576,7 +618,7 @@ func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interf // NotNilf asserts that the specified object is not nil. // -// assert.NotNilf(t, err, "error message %s", "formatted") +// assert.NotNilf(t, err, "error message %s", "formatted") func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -586,7 +628,7 @@ func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bo // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") +// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") func NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -596,8 +638,8 @@ func NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bo // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") +// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -607,7 +649,7 @@ func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args .. // NotSamef asserts that two pointers do not reference the same object. // -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") +// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -621,7 +663,7 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, // NotSubsetf asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") +// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -639,7 +681,7 @@ func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) bool { // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") +// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") func Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -651,7 +693,7 @@ func Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithErrorf(t TestingT, errString string, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -662,7 +704,7 @@ func PanicsWithErrorf(t TestingT, errString string, f PanicTestFunc, msg string, // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -672,8 +714,8 @@ func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg str // Positivef asserts that the specified element is positive // -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") +// assert.Positivef(t, 1, "error message %s", "formatted") +// assert.Positivef(t, 1.23, "error message %s", "formatted") func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -683,8 +725,8 @@ func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") +// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -694,7 +736,7 @@ func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...in // Samef asserts that two pointers reference the same object. // -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") +// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -708,7 +750,7 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg // Subsetf asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") +// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -718,7 +760,7 @@ func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args // Truef asserts that the specified value is true. // -// assert.Truef(t, myBool, "error message %s", "formatted") +// assert.Truef(t, myBool, "error message %s", "formatted") func Truef(t TestingT, value bool, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -728,7 +770,7 @@ func Truef(t TestingT, value bool, msg string, args ...interface{}) bool { // WithinDurationf asserts that the two times are within duration delta of each other. // -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -738,7 +780,7 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim // WithinRangef asserts that a time is within a time range (inclusive). // -// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_forward.go index 339515b8bfb9..b1d94aec53cc 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -30,9 +30,9 @@ func (a *Assertions) Conditionf(comp Comparison, msg string, args ...interface{} // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// a.Contains("Hello World", "World") -// a.Contains(["Hello", "World"], "World") -// a.Contains({"Hello": "World"}, "Hello") +// a.Contains("Hello World", "World") +// a.Contains(["Hello", "World"], "World") +// a.Contains({"Hello": "World"}, "Hello") func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -43,9 +43,9 @@ func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs .. // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// a.Containsf("Hello World", "World", "error message %s", "formatted") -// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") -// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") +// a.Containsf("Hello World", "World", "error message %s", "formatted") +// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") +// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -98,7 +98,7 @@ func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg st // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// a.Empty(obj) +// a.Empty(obj) func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -109,7 +109,7 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { // Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// a.Emptyf(obj, "error message %s", "formatted") +// a.Emptyf(obj, "error message %s", "formatted") func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -119,7 +119,7 @@ func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) // Equal asserts that two objects are equal. // -// a.Equal(123, 123) +// a.Equal(123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -134,8 +134,8 @@ func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs // EqualError asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// a.EqualError(err, expectedErrorString) +// actualObj, err := SomeFunction() +// a.EqualError(err, expectedErrorString) func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -146,8 +146,8 @@ func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ... // EqualErrorf asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -155,10 +155,44 @@ func (a *Assertions) EqualErrorf(theError error, errString string, msg string, a return EqualErrorf(a.t, theError, errString, msg, args...) } +// EqualExportedValues asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// a.EqualExportedValues(S{1, 2}, S{1, 3}) => true +// a.EqualExportedValues(S{1, 2}, S{2, 3}) => false +func (a *Assertions) EqualExportedValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return EqualExportedValues(a.t, expected, actual, msgAndArgs...) +} + +// EqualExportedValuesf asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// a.EqualExportedValuesf(S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// a.EqualExportedValuesf(S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return EqualExportedValuesf(a.t, expected, actual, msg, args...) +} + // EqualValues asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValues(uint32(123), int32(123)) +// a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -169,7 +203,7 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") +// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -179,7 +213,7 @@ func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg // Equalf asserts that two objects are equal. // -// a.Equalf(123, 123, "error message %s", "formatted") +// a.Equalf(123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -193,10 +227,10 @@ func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// if a.Error(err) { +// assert.Equal(t, expectedError, err) +// } func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -225,8 +259,8 @@ func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args .. // ErrorContains asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// a.ErrorContains(err, expectedErrorSubString) +// actualObj, err := SomeFunction() +// a.ErrorContains(err, expectedErrorSubString) func (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -237,8 +271,8 @@ func (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs . // ErrorContainsf asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// a.ErrorContainsf(err, expectedErrorSubString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// a.ErrorContainsf(err, expectedErrorSubString, "error message %s", "formatted") func (a *Assertions) ErrorContainsf(theError error, contains string, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -266,10 +300,10 @@ func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...inter // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// if a.Errorf(err, "error message %s", "formatted") { +// assert.Equal(t, expectedErrorf, err) +// } func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -280,7 +314,7 @@ func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) +// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -288,10 +322,60 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti return Eventually(a.t, condition, waitFor, tick, msgAndArgs...) } +// EventuallyWithT asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// a.EventuallyWithT(func(c *assert.CollectT) { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return EventuallyWithT(a.t, condition, waitFor, tick, msgAndArgs...) +} + +// EventuallyWithTf asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func (a *Assertions) EventuallyWithTf(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return EventuallyWithTf(a.t, condition, waitFor, tick, msg, args...) +} + // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -301,7 +385,7 @@ func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, t // Exactly asserts that two objects are equal in value and type. // -// a.Exactly(int32(123), int64(123)) +// a.Exactly(int32(123), int64(123)) func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -311,7 +395,7 @@ func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArg // Exactlyf asserts that two objects are equal in value and type. // -// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") +// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -353,7 +437,7 @@ func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{ // False asserts that the specified value is false. // -// a.False(myBool) +// a.False(myBool) func (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -363,7 +447,7 @@ func (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool { // Falsef asserts that the specified value is false. // -// a.Falsef(myBool, "error message %s", "formatted") +// a.Falsef(myBool, "error message %s", "formatted") func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -391,9 +475,9 @@ func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) b // Greater asserts that the first element is greater than the second // -// a.Greater(2, 1) -// a.Greater(float64(2), float64(1)) -// a.Greater("b", "a") +// a.Greater(2, 1) +// a.Greater(float64(2), float64(1)) +// a.Greater("b", "a") func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -403,10 +487,10 @@ func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...inter // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// a.GreaterOrEqual(2, 1) -// a.GreaterOrEqual(2, 2) -// a.GreaterOrEqual("b", "a") -// a.GreaterOrEqual("b", "b") +// a.GreaterOrEqual(2, 1) +// a.GreaterOrEqual(2, 2) +// a.GreaterOrEqual("b", "a") +// a.GreaterOrEqual("b", "b") func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -416,10 +500,10 @@ func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs . // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") -// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") -// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") -// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") +// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") +// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") +// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") +// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -429,9 +513,9 @@ func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, // Greaterf asserts that the first element is greater than the second // -// a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") -// a.Greaterf("b", "a", "error message %s", "formatted") +// a.Greaterf(2, 1, "error message %s", "formatted") +// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") +// a.Greaterf("b", "a", "error message %s", "formatted") func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -442,7 +526,7 @@ func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args . // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { @@ -455,7 +539,7 @@ func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, u // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { @@ -468,7 +552,7 @@ func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { @@ -481,7 +565,7 @@ func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { @@ -493,7 +577,7 @@ func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method strin // HTTPError asserts that a specified handler returns an error status code. // -// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -505,7 +589,7 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri // HTTPErrorf asserts that a specified handler returns an error status code. // -// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -517,7 +601,7 @@ func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url str // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -529,7 +613,7 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -541,7 +625,7 @@ func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) +// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { @@ -553,7 +637,7 @@ func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { @@ -565,7 +649,7 @@ func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, ur // HTTPSuccess asserts that a specified handler returns a success status code. // -// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) +// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -577,7 +661,7 @@ func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url st // HTTPSuccessf asserts that a specified handler returns a success status code. // -// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { @@ -589,7 +673,7 @@ func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url s // Implements asserts that an object is implemented by the specified interface. // -// a.Implements((*MyInterface)(nil), new(MyObject)) +// a.Implements((*MyInterface)(nil), new(MyObject)) func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -599,7 +683,7 @@ func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, // Implementsf asserts that an object is implemented by the specified interface. // -// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -609,7 +693,7 @@ func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{} // InDelta asserts that the two numerals are within delta of each other. // -// a.InDelta(math.Pi, 22/7.0, 0.01) +// a.InDelta(math.Pi, 22/7.0, 0.01) func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -651,7 +735,7 @@ func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, del // InDeltaf asserts that the two numerals are within delta of each other. // -// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -693,9 +777,9 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo // IsDecreasing asserts that the collection is decreasing // -// a.IsDecreasing([]int{2, 1, 0}) -// a.IsDecreasing([]float{2, 1}) -// a.IsDecreasing([]string{"b", "a"}) +// a.IsDecreasing([]int{2, 1, 0}) +// a.IsDecreasing([]float{2, 1}) +// a.IsDecreasing([]string{"b", "a"}) func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -705,9 +789,9 @@ func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) // IsDecreasingf asserts that the collection is decreasing // -// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") -// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") +// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") +// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -717,9 +801,9 @@ func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...inter // IsIncreasing asserts that the collection is increasing // -// a.IsIncreasing([]int{1, 2, 3}) -// a.IsIncreasing([]float{1, 2}) -// a.IsIncreasing([]string{"a", "b"}) +// a.IsIncreasing([]int{1, 2, 3}) +// a.IsIncreasing([]float{1, 2}) +// a.IsIncreasing([]string{"a", "b"}) func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -729,9 +813,9 @@ func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) // IsIncreasingf asserts that the collection is increasing // -// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") -// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") +// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") +// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -741,9 +825,9 @@ func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...inter // IsNonDecreasing asserts that the collection is not decreasing // -// a.IsNonDecreasing([]int{1, 1, 2}) -// a.IsNonDecreasing([]float{1, 2}) -// a.IsNonDecreasing([]string{"a", "b"}) +// a.IsNonDecreasing([]int{1, 1, 2}) +// a.IsNonDecreasing([]float{1, 2}) +// a.IsNonDecreasing([]string{"a", "b"}) func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -753,9 +837,9 @@ func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface // IsNonDecreasingf asserts that the collection is not decreasing // -// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") +// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -765,9 +849,9 @@ func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...in // IsNonIncreasing asserts that the collection is not increasing // -// a.IsNonIncreasing([]int{2, 1, 1}) -// a.IsNonIncreasing([]float{2, 1}) -// a.IsNonIncreasing([]string{"b", "a"}) +// a.IsNonIncreasing([]int{2, 1, 1}) +// a.IsNonIncreasing([]float{2, 1}) +// a.IsNonIncreasing([]string{"b", "a"}) func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -777,9 +861,9 @@ func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface // IsNonIncreasingf asserts that the collection is not increasing // -// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") +// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -805,7 +889,7 @@ func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg s // JSONEq asserts that two JSON strings are equivalent. // -// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -815,7 +899,7 @@ func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interf // JSONEqf asserts that two JSON strings are equivalent. // -// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -826,7 +910,7 @@ func (a *Assertions) JSONEqf(expected string, actual string, msg string, args .. // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// a.Len(mySlice, 3) +// a.Len(mySlice, 3) func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -837,7 +921,7 @@ func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// a.Lenf(mySlice, 3, "error message %s", "formatted") +// a.Lenf(mySlice, 3, "error message %s", "formatted") func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -847,9 +931,9 @@ func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...in // Less asserts that the first element is less than the second // -// a.Less(1, 2) -// a.Less(float64(1), float64(2)) -// a.Less("a", "b") +// a.Less(1, 2) +// a.Less(float64(1), float64(2)) +// a.Less("a", "b") func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -859,10 +943,10 @@ func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interfac // LessOrEqual asserts that the first element is less than or equal to the second // -// a.LessOrEqual(1, 2) -// a.LessOrEqual(2, 2) -// a.LessOrEqual("a", "b") -// a.LessOrEqual("b", "b") +// a.LessOrEqual(1, 2) +// a.LessOrEqual(2, 2) +// a.LessOrEqual("a", "b") +// a.LessOrEqual("b", "b") func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -872,10 +956,10 @@ func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...i // LessOrEqualf asserts that the first element is less than or equal to the second // -// a.LessOrEqualf(1, 2, "error message %s", "formatted") -// a.LessOrEqualf(2, 2, "error message %s", "formatted") -// a.LessOrEqualf("a", "b", "error message %s", "formatted") -// a.LessOrEqualf("b", "b", "error message %s", "formatted") +// a.LessOrEqualf(1, 2, "error message %s", "formatted") +// a.LessOrEqualf(2, 2, "error message %s", "formatted") +// a.LessOrEqualf("a", "b", "error message %s", "formatted") +// a.LessOrEqualf("b", "b", "error message %s", "formatted") func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -885,9 +969,9 @@ func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, ar // Lessf asserts that the first element is less than the second // -// a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1), float64(2), "error message %s", "formatted") -// a.Lessf("a", "b", "error message %s", "formatted") +// a.Lessf(1, 2, "error message %s", "formatted") +// a.Lessf(float64(1), float64(2), "error message %s", "formatted") +// a.Lessf("a", "b", "error message %s", "formatted") func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -897,8 +981,8 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i // Negative asserts that the specified element is negative // -// a.Negative(-1) -// a.Negative(-1.23) +// a.Negative(-1) +// a.Negative(-1.23) func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -908,8 +992,8 @@ func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool { // Negativef asserts that the specified element is negative // -// a.Negativef(-1, "error message %s", "formatted") -// a.Negativef(-1.23, "error message %s", "formatted") +// a.Negativef(-1, "error message %s", "formatted") +// a.Negativef(-1.23, "error message %s", "formatted") func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -920,7 +1004,7 @@ func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) b // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) +// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -931,7 +1015,7 @@ func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick ti // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -941,7 +1025,7 @@ func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick t // Nil asserts that the specified object is nil. // -// a.Nil(err) +// a.Nil(err) func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -951,7 +1035,7 @@ func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool { // Nilf asserts that the specified object is nil. // -// a.Nilf(err, "error message %s", "formatted") +// a.Nilf(err, "error message %s", "formatted") func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -979,10 +1063,10 @@ func (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) // NoError asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if a.NoError(err) { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if a.NoError(err) { +// assert.Equal(t, expectedObj, actualObj) +// } func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -992,10 +1076,10 @@ func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool { // NoErrorf asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if a.NoErrorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if a.NoErrorf(err, "error message %s", "formatted") { +// assert.Equal(t, expectedObj, actualObj) +// } func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1024,9 +1108,9 @@ func (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// a.NotContains("Hello World", "Earth") -// a.NotContains(["Hello", "World"], "Earth") -// a.NotContains({"Hello": "World"}, "Earth") +// a.NotContains("Hello World", "Earth") +// a.NotContains(["Hello", "World"], "Earth") +// a.NotContains({"Hello": "World"}, "Earth") func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1037,9 +1121,9 @@ func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") -// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") -// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") +// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") +// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") +// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1050,9 +1134,9 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if a.NotEmpty(obj) { -// assert.Equal(t, "two", obj[1]) -// } +// if a.NotEmpty(obj) { +// assert.Equal(t, "two", obj[1]) +// } func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1063,9 +1147,9 @@ func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) boo // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if a.NotEmptyf(obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } +// if a.NotEmptyf(obj, "error message %s", "formatted") { +// assert.Equal(t, "two", obj[1]) +// } func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1075,7 +1159,7 @@ func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface // NotEqual asserts that the specified values are NOT equal. // -// a.NotEqual(obj1, obj2) +// a.NotEqual(obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1088,7 +1172,7 @@ func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndAr // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// a.NotEqualValues(obj1, obj2) +// a.NotEqualValues(obj1, obj2) func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1098,7 +1182,7 @@ func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, ms // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") +// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1108,7 +1192,7 @@ func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, m // NotEqualf asserts that the specified values are NOT equal. // -// a.NotEqualf(obj1, obj2, "error message %s", "formatted") +// a.NotEqualf(obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1139,7 +1223,7 @@ func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...in // NotNil asserts that the specified object is not nil. // -// a.NotNil(err) +// a.NotNil(err) func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1149,7 +1233,7 @@ func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool // NotNilf asserts that the specified object is not nil. // -// a.NotNilf(err, "error message %s", "formatted") +// a.NotNilf(err, "error message %s", "formatted") func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1159,7 +1243,7 @@ func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{} // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// a.NotPanics(func(){ RemainCalm() }) +// a.NotPanics(func(){ RemainCalm() }) func (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1169,7 +1253,7 @@ func (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") +// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") func (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1179,8 +1263,8 @@ func (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{} // NotRegexp asserts that a specified regexp does not match a string. // -// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") -// a.NotRegexp("^start", "it's not starting") +// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") +// a.NotRegexp("^start", "it's not starting") func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1190,8 +1274,8 @@ func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...in // NotRegexpf asserts that a specified regexp does not match a string. // -// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") +// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1201,7 +1285,7 @@ func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, arg // NotSame asserts that two pointers do not reference the same object. // -// a.NotSame(ptr1, ptr2) +// a.NotSame(ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1214,7 +1298,7 @@ func (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArg // NotSamef asserts that two pointers do not reference the same object. // -// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") +// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1228,7 +1312,7 @@ func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg stri // NotSubset asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") +// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1239,7 +1323,7 @@ func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs // NotSubsetf asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") +// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1265,7 +1349,7 @@ func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) bo // Panics asserts that the code inside the specified PanicTestFunc panics. // -// a.Panics(func(){ GoCrazy() }) +// a.Panics(func(){ GoCrazy() }) func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1277,7 +1361,7 @@ func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool { // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// a.PanicsWithError("crazy error", func(){ GoCrazy() }) +// a.PanicsWithError("crazy error", func(){ GoCrazy() }) func (a *Assertions) PanicsWithError(errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1289,7 +1373,7 @@ func (a *Assertions) PanicsWithError(errString string, f PanicTestFunc, msgAndAr // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) PanicsWithErrorf(errString string, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1300,7 +1384,7 @@ func (a *Assertions) PanicsWithErrorf(errString string, f PanicTestFunc, msg str // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) +// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) func (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1311,7 +1395,7 @@ func (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgA // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1321,7 +1405,7 @@ func (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") +// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1331,8 +1415,8 @@ func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) b // Positive asserts that the specified element is positive // -// a.Positive(1) -// a.Positive(1.23) +// a.Positive(1) +// a.Positive(1.23) func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1342,8 +1426,8 @@ func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool { // Positivef asserts that the specified element is positive // -// a.Positivef(1, "error message %s", "formatted") -// a.Positivef(1.23, "error message %s", "formatted") +// a.Positivef(1, "error message %s", "formatted") +// a.Positivef(1.23, "error message %s", "formatted") func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1353,8 +1437,8 @@ func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) b // Regexp asserts that a specified regexp matches a string. // -// a.Regexp(regexp.MustCompile("start"), "it's starting") -// a.Regexp("start...$", "it's not starting") +// a.Regexp(regexp.MustCompile("start"), "it's starting") +// a.Regexp("start...$", "it's not starting") func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1364,8 +1448,8 @@ func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...inter // Regexpf asserts that a specified regexp matches a string. // -// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") +// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1375,7 +1459,7 @@ func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args . // Same asserts that two pointers reference the same object. // -// a.Same(ptr1, ptr2) +// a.Same(ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1388,7 +1472,7 @@ func (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs . // Samef asserts that two pointers reference the same object. // -// a.Samef(ptr1, ptr2, "error message %s", "formatted") +// a.Samef(ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1402,7 +1486,7 @@ func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, // Subset asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") +// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1413,7 +1497,7 @@ func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ... // Subsetf asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") +// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1423,7 +1507,7 @@ func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, a // True asserts that the specified value is true. // -// a.True(myBool) +// a.True(myBool) func (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1433,7 +1517,7 @@ func (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool { // Truef asserts that the specified value is true. // -// a.Truef(myBool, "error message %s", "formatted") +// a.Truef(myBool, "error message %s", "formatted") func (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1443,7 +1527,7 @@ func (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool { // WithinDuration asserts that the two times are within duration delta of each other. // -// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) +// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1453,7 +1537,7 @@ func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta // WithinDurationf asserts that the two times are within duration delta of each other. // -// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1463,7 +1547,7 @@ func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta // WithinRange asserts that a time is within a time range (inclusive). // -// a.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// a.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1473,7 +1557,7 @@ func (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Tim // WithinRangef asserts that a time is within a time range (inclusive). // -// a.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// a.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func (a *Assertions) WithinRangef(actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_order.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_order.go index 759448783585..00df62a05992 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertion_order.go @@ -46,36 +46,36 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareT // IsIncreasing asserts that the collection is increasing // -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) +// assert.IsIncreasing(t, []int{1, 2, 3}) +// assert.IsIncreasing(t, []float{1, 2}) +// assert.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) } // IsNonIncreasing asserts that the collection is not increasing // -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) +// assert.IsNonIncreasing(t, []int{2, 1, 1}) +// assert.IsNonIncreasing(t, []float{2, 1}) +// assert.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) } // IsDecreasing asserts that the collection is decreasing // -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) +// assert.IsDecreasing(t, []int{2, 1, 0}) +// assert.IsDecreasing(t, []float{2, 1}) +// assert.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) } // IsNonDecreasing asserts that the collection is not decreasing // -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) +// assert.IsNonDecreasing(t, []int{1, 1, 2}) +// assert.IsNonDecreasing(t, []float{1, 2}) +// assert.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) } diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertions.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertions.go index 2924cf3a1492..a55d1bba926c 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/assertions.go @@ -75,6 +75,77 @@ func ObjectsAreEqual(expected, actual interface{}) bool { return bytes.Equal(exp, act) } +// copyExportedFields iterates downward through nested data structures and creates a copy +// that only contains the exported struct fields. +func copyExportedFields(expected interface{}) interface{} { + if isNil(expected) { + return expected + } + + expectedType := reflect.TypeOf(expected) + expectedKind := expectedType.Kind() + expectedValue := reflect.ValueOf(expected) + + switch expectedKind { + case reflect.Struct: + result := reflect.New(expectedType).Elem() + for i := 0; i < expectedType.NumField(); i++ { + field := expectedType.Field(i) + isExported := field.IsExported() + if isExported { + fieldValue := expectedValue.Field(i) + if isNil(fieldValue) || isNil(fieldValue.Interface()) { + continue + } + newValue := copyExportedFields(fieldValue.Interface()) + result.Field(i).Set(reflect.ValueOf(newValue)) + } + } + return result.Interface() + + case reflect.Ptr: + result := reflect.New(expectedType.Elem()) + unexportedRemoved := copyExportedFields(expectedValue.Elem().Interface()) + result.Elem().Set(reflect.ValueOf(unexportedRemoved)) + return result.Interface() + + case reflect.Array, reflect.Slice: + result := reflect.MakeSlice(expectedType, expectedValue.Len(), expectedValue.Len()) + for i := 0; i < expectedValue.Len(); i++ { + index := expectedValue.Index(i) + if isNil(index) { + continue + } + unexportedRemoved := copyExportedFields(index.Interface()) + result.Index(i).Set(reflect.ValueOf(unexportedRemoved)) + } + return result.Interface() + + case reflect.Map: + result := reflect.MakeMap(expectedType) + for _, k := range expectedValue.MapKeys() { + index := expectedValue.MapIndex(k) + unexportedRemoved := copyExportedFields(index.Interface()) + result.SetMapIndex(k, reflect.ValueOf(unexportedRemoved)) + } + return result.Interface() + + default: + return expected + } +} + +// ObjectsExportedFieldsAreEqual determines if the exported (public) fields of two objects are +// considered equal. This comparison of only exported fields is applied recursively to nested data +// structures. +// +// This function does no assertion of any kind. +func ObjectsExportedFieldsAreEqual(expected, actual interface{}) bool { + expectedCleaned := copyExportedFields(expected) + actualCleaned := copyExportedFields(actual) + return ObjectsAreEqualValues(expectedCleaned, actualCleaned) +} + // ObjectsAreEqualValues gets whether two objects are equal, or if their // values are equal. func ObjectsAreEqualValues(expected, actual interface{}) bool { @@ -271,7 +342,7 @@ type labeledContent struct { // labeledOutput returns a string consisting of the provided labeledContent. Each labeled output is appended in the following manner: // -// \t{{label}}:{{align_spaces}}\t{{content}}\n +// \t{{label}}:{{align_spaces}}\t{{content}}\n // // The initial carriage return is required to undo/erase any padding added by testing.T.Errorf. The "\t{{label}}:" is for the label. // If a label is shorter than the longest label provided, padding spaces are added to make all the labels match in length. Once this @@ -294,7 +365,7 @@ func labeledOutput(content ...labeledContent) string { // Implements asserts that an object is implemented by the specified interface. // -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) +// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -326,7 +397,7 @@ func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs // Equal asserts that two objects are equal. // -// assert.Equal(t, 123, 123) +// assert.Equal(t, 123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -367,7 +438,7 @@ func validateEqualArgs(expected, actual interface{}) error { // Same asserts that two pointers reference the same object. // -// assert.Same(t, ptr1, ptr2) +// assert.Same(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -387,7 +458,7 @@ func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) b // NotSame asserts that two pointers do not reference the same object. // -// assert.NotSame(t, ptr1, ptr2) +// assert.NotSame(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -455,7 +526,7 @@ func truncatingFormat(data interface{}) string { // EqualValues asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValues(t, uint32(123), int32(123)) +// assert.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -473,9 +544,53 @@ func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interfa } +// EqualExportedValues asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true +// assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false +func EqualExportedValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + + aType := reflect.TypeOf(expected) + bType := reflect.TypeOf(actual) + + if aType != bType { + return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...) + } + + if aType.Kind() != reflect.Struct { + return Fail(t, fmt.Sprintf("Types expected to both be struct \n\t%v != %v", aType.Kind(), reflect.Struct), msgAndArgs...) + } + + if bType.Kind() != reflect.Struct { + return Fail(t, fmt.Sprintf("Types expected to both be struct \n\t%v != %v", bType.Kind(), reflect.Struct), msgAndArgs...) + } + + expected = copyExportedFields(expected) + actual = copyExportedFields(actual) + + if !ObjectsAreEqualValues(expected, actual) { + diff := diff(expected, actual) + expected, actual = formatUnequalValues(expected, actual) + return Fail(t, fmt.Sprintf("Not equal (comparing only exported fields): \n"+ + "expected: %s\n"+ + "actual : %s%s", expected, actual, diff), msgAndArgs...) + } + + return true +} + // Exactly asserts that two objects are equal in value and type. // -// assert.Exactly(t, int32(123), int64(123)) +// assert.Exactly(t, int32(123), int64(123)) func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -494,7 +609,7 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} // NotNil asserts that the specified object is not nil. // -// assert.NotNil(t, err) +// assert.NotNil(t, err) func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { if !isNil(object) { return true @@ -540,7 +655,7 @@ func isNil(object interface{}) bool { // Nil asserts that the specified object is nil. // -// assert.Nil(t, err) +// assert.Nil(t, err) func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { if isNil(object) { return true @@ -583,7 +698,7 @@ func isEmpty(object interface{}) bool { // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Empty(t, obj) +// assert.Empty(t, obj) func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { pass := isEmpty(object) if !pass { @@ -600,9 +715,9 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } +// if assert.NotEmpty(t, obj) { +// assert.Equal(t, "two", obj[1]) +// } func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { pass := !isEmpty(object) if !pass { @@ -631,7 +746,7 @@ func getLen(x interface{}) (ok bool, length int) { // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// assert.Len(t, mySlice, 3) +// assert.Len(t, mySlice, 3) func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -649,7 +764,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) // True asserts that the specified value is true. // -// assert.True(t, myBool) +// assert.True(t, myBool) func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { if !value { if h, ok := t.(tHelper); ok { @@ -664,7 +779,7 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { // False asserts that the specified value is false. // -// assert.False(t, myBool) +// assert.False(t, myBool) func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { if value { if h, ok := t.(tHelper); ok { @@ -679,7 +794,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { // NotEqual asserts that the specified values are NOT equal. // -// assert.NotEqual(t, obj1, obj2) +// assert.NotEqual(t, obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -702,7 +817,7 @@ func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{ // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValues(t, obj1, obj2) +// assert.NotEqualValues(t, obj1, obj2) func NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -761,9 +876,9 @@ func containsElement(list interface{}, element interface{}) (ok, found bool) { // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") +// assert.Contains(t, "Hello World", "World") +// assert.Contains(t, ["Hello", "World"], "World") +// assert.Contains(t, {"Hello": "World"}, "Hello") func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -784,9 +899,9 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") +// assert.NotContains(t, "Hello World", "Earth") +// assert.NotContains(t, ["Hello", "World"], "Earth") +// assert.NotContains(t, {"Hello": "World"}, "Earth") func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -794,10 +909,10 @@ func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) ok, found := containsElement(s, contains) if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...) + return Fail(t, fmt.Sprintf("%#v could not be applied builtin len()", s), msgAndArgs...) } if found { - return Fail(t, fmt.Sprintf("\"%s\" should not contain \"%s\"", s, contains), msgAndArgs...) + return Fail(t, fmt.Sprintf("%#v should not contain %#v", s, contains), msgAndArgs...) } return true @@ -807,7 +922,7 @@ func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) // Subset asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") +// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -863,7 +978,7 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok // NotSubset asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") +// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1048,7 +1163,7 @@ func didPanic(f PanicTestFunc) (didPanic bool, message interface{}, stack string // Panics asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panics(t, func(){ GoCrazy() }) +// assert.Panics(t, func(){ GoCrazy() }) func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1064,7 +1179,7 @@ func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) +// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) func PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1085,7 +1200,7 @@ func PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndAr // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) +// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) func PanicsWithError(t TestingT, errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1105,7 +1220,7 @@ func PanicsWithError(t TestingT, errString string, f PanicTestFunc, msgAndArgs . // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanics(t, func(){ RemainCalm() }) +// assert.NotPanics(t, func(){ RemainCalm() }) func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1120,7 +1235,7 @@ func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { // WithinDuration asserts that the two times are within duration delta of each other. // -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) +// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1136,7 +1251,7 @@ func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, // WithinRange asserts that a time is within a time range (inclusive). // -// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func WithinRange(t TestingT, actual, start, end time.Time, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1195,7 +1310,7 @@ func toFloat(x interface{}) (float64, bool) { // InDelta asserts that the two numerals are within delta of each other. // -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) +// assert.InDelta(t, math.Pi, 22/7.0, 0.01) func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1368,10 +1483,10 @@ func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, m // NoError asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if assert.NoError(t, err) { +// assert.Equal(t, expectedObj, actualObj) +// } func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { if err != nil { if h, ok := t.(tHelper); ok { @@ -1385,10 +1500,10 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// if assert.Error(t, err) { +// assert.Equal(t, expectedError, err) +// } func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { if err == nil { if h, ok := t.(tHelper); ok { @@ -1403,8 +1518,8 @@ func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { // EqualError asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) +// actualObj, err := SomeFunction() +// assert.EqualError(t, err, expectedErrorString) func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1426,8 +1541,8 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte // ErrorContains asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// assert.ErrorContains(t, err, expectedErrorSubString) +// actualObj, err := SomeFunction() +// assert.ErrorContains(t, err, expectedErrorSubString) func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1460,8 +1575,8 @@ func matchRegexp(rx interface{}, str interface{}) bool { // Regexp asserts that a specified regexp matches a string. // -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") +// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") +// assert.Regexp(t, "start...$", "it's not starting") func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1478,8 +1593,8 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface // NotRegexp asserts that a specified regexp does not match a string. // -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") +// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") +// assert.NotRegexp(t, "^start", "it's not starting") func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1591,7 +1706,7 @@ func NoDirExists(t TestingT, path string, msgAndArgs ...interface{}) bool { // JSONEq asserts that two JSON strings are equivalent. // -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1714,7 +1829,7 @@ type tHelper interface { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) +// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -1744,10 +1859,93 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t } } +// CollectT implements the TestingT interface and collects all errors. +type CollectT struct { + errors []error +} + +// Errorf collects the error. +func (c *CollectT) Errorf(format string, args ...interface{}) { + c.errors = append(c.errors, fmt.Errorf(format, args...)) +} + +// FailNow panics. +func (c *CollectT) FailNow() { + panic("Assertion failed") +} + +// Reset clears the collected errors. +func (c *CollectT) Reset() { + c.errors = nil +} + +// Copy copies the collected errors to the supplied t. +func (c *CollectT) Copy(t TestingT) { + if tt, ok := t.(tHelper); ok { + tt.Helper() + } + for _, err := range c.errors { + t.Errorf("%v", err) + } +} + +// EventuallyWithT asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// assert.EventuallyWithT(t, func(c *assert.CollectT) { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + + collect := new(CollectT) + ch := make(chan bool, 1) + + timer := time.NewTimer(waitFor) + defer timer.Stop() + + ticker := time.NewTicker(tick) + defer ticker.Stop() + + for tick := ticker.C; ; { + select { + case <-timer.C: + collect.Copy(t) + return Fail(t, "Condition never satisfied", msgAndArgs...) + case <-tick: + tick = nil + collect.Reset() + go func() { + condition(collect) + ch <- len(collect.errors) == 0 + }() + case v := <-ch: + if v { + return true + } + tick = ticker.C + } + } +} + // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) +// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/doc.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/doc.go index c9dccc4d6cd0..4953981d3878 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/doc.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/doc.go @@ -1,39 +1,40 @@ // Package assert provides a set of comprehensive testing tools for use with the normal Go testing system. // -// Example Usage +// # Example Usage // // The following is a complete example using assert in a standard test function: -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) // -// func TestSomething(t *testing.T) { +// import ( +// "testing" +// "github.com/stretchr/testify/assert" +// ) // -// var a string = "Hello" -// var b string = "Hello" +// func TestSomething(t *testing.T) { // -// assert.Equal(t, a, b, "The two words should be the same.") +// var a string = "Hello" +// var b string = "Hello" // -// } +// assert.Equal(t, a, b, "The two words should be the same.") +// +// } // // if you assert many times, use the format below: // -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) +// import ( +// "testing" +// "github.com/stretchr/testify/assert" +// ) // -// func TestSomething(t *testing.T) { -// assert := assert.New(t) +// func TestSomething(t *testing.T) { +// assert := assert.New(t) // -// var a string = "Hello" -// var b string = "Hello" +// var a string = "Hello" +// var b string = "Hello" // -// assert.Equal(a, b, "The two words should be the same.") -// } +// assert.Equal(a, b, "The two words should be the same.") +// } // -// Assertions +// # Assertions // // Assertions allow you to easily write test code, and are global funcs in the `assert` package. // All assertion functions take, as the first argument, the `*testing.T` object provided by the diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/http_assertions.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/http_assertions.go index 4ed341dd2893..d8038c28a758 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/assert/http_assertions.go @@ -23,7 +23,7 @@ func httpCode(handler http.HandlerFunc, method, url string, values url.Values) ( // HTTPSuccess asserts that a specified handler returns a success status code. // -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) +// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -45,7 +45,7 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, value // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -67,7 +67,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, valu // HTTPError asserts that a specified handler returns an error status code. // -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { @@ -89,7 +89,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { @@ -124,7 +124,7 @@ func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) s // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { @@ -144,7 +144,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/doc.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/doc.go index 7324128ef19c..d6b3c844cc8b 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/doc.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/doc.go @@ -1,17 +1,17 @@ // Package mock provides a system by which it is possible to mock your objects // and verify calls are happening as expected. // -// Example Usage +// # Example Usage // // The mock package provides an object, Mock, that tracks activity on another object. It is usually // embedded into a test object as shown below: // -// type MyTestObject struct { -// // add a Mock object instance -// mock.Mock +// type MyTestObject struct { +// // add a Mock object instance +// mock.Mock // -// // other fields go here as normal -// } +// // other fields go here as normal +// } // // When implementing the methods of an interface, you wire your functions up // to call the Mock.Called(args...) method, and return the appropriate values. @@ -19,25 +19,25 @@ // For example, to mock a method that saves the name and age of a person and returns // the year of their birth or an error, you might write this: // -// func (o *MyTestObject) SavePersonDetails(firstname, lastname string, age int) (int, error) { -// args := o.Called(firstname, lastname, age) -// return args.Int(0), args.Error(1) -// } +// func (o *MyTestObject) SavePersonDetails(firstname, lastname string, age int) (int, error) { +// args := o.Called(firstname, lastname, age) +// return args.Int(0), args.Error(1) +// } // // The Int, Error and Bool methods are examples of strongly typed getters that take the argument // index position. Given this argument list: // -// (12, true, "Something") +// (12, true, "Something") // // You could read them out strongly typed like this: // -// args.Int(0) -// args.Bool(1) -// args.String(2) +// args.Int(0) +// args.Bool(1) +// args.String(2) // // For objects of your own type, use the generic Arguments.Get(index) method and make a type assertion: // -// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine) +// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine) // // This may cause a panic if the object you are getting is nil (the type assertion will fail), in those // cases you should check for nil first. diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/mock.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/mock.go index e6ff8dfeb201..f4b42e44ffe9 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/mock.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/mock/mock.go @@ -3,6 +3,7 @@ package mock import ( "errors" "fmt" + "path" "reflect" "regexp" "runtime" @@ -13,6 +14,7 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/pmezard/go-difflib/difflib" "github.com/stretchr/objx" + "github.com/stretchr/testify/assert" ) @@ -99,7 +101,7 @@ func (c *Call) unlock() { // Return specifies the return arguments for the expectation. // -// Mock.On("DoSomething").Return(errors.New("failed")) +// Mock.On("DoSomething").Return(errors.New("failed")) func (c *Call) Return(returnArguments ...interface{}) *Call { c.lock() defer c.unlock() @@ -111,7 +113,7 @@ func (c *Call) Return(returnArguments ...interface{}) *Call { // Panic specifies if the functon call should fail and the panic message // -// Mock.On("DoSomething").Panic("test panic") +// Mock.On("DoSomething").Panic("test panic") func (c *Call) Panic(msg string) *Call { c.lock() defer c.unlock() @@ -123,14 +125,14 @@ func (c *Call) Panic(msg string) *Call { // Once indicates that that the mock should only return the value once. // -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() func (c *Call) Once() *Call { return c.Times(1) } // Twice indicates that that the mock should only return the value twice. // -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() func (c *Call) Twice() *Call { return c.Times(2) } @@ -138,7 +140,7 @@ func (c *Call) Twice() *Call { // Times indicates that that the mock should only return the indicated number // of times. // -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) func (c *Call) Times(i int) *Call { c.lock() defer c.unlock() @@ -149,7 +151,7 @@ func (c *Call) Times(i int) *Call { // WaitUntil sets the channel that will block the mock's return until its closed // or a message is received. // -// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) +// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) func (c *Call) WaitUntil(w <-chan time.Time) *Call { c.lock() defer c.unlock() @@ -159,7 +161,7 @@ func (c *Call) WaitUntil(w <-chan time.Time) *Call { // After sets how long to block until the call returns // -// Mock.On("MyMethod", arg1, arg2).After(time.Second) +// Mock.On("MyMethod", arg1, arg2).After(time.Second) func (c *Call) After(d time.Duration) *Call { c.lock() defer c.unlock() @@ -171,10 +173,10 @@ func (c *Call) After(d time.Duration) *Call { // mocking a method (such as an unmarshaler) that takes a pointer to a struct and // sets properties in such struct // -// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}")).Return().Run(func(args Arguments) { -// arg := args.Get(0).(*map[string]interface{}) -// arg["foo"] = "bar" -// }) +// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}")).Return().Run(func(args Arguments) { +// arg := args.Get(0).(*map[string]interface{}) +// arg["foo"] = "bar" +// }) func (c *Call) Run(fn func(args Arguments)) *Call { c.lock() defer c.unlock() @@ -194,16 +196,18 @@ func (c *Call) Maybe() *Call { // On chains a new expectation description onto the mocked interface. This // allows syntax like. // -// Mock. -// On("MyMethod", 1).Return(nil). -// On("MyOtherMethod", 'a', 'b', 'c').Return(errors.New("Some Error")) +// Mock. +// On("MyMethod", 1).Return(nil). +// On("MyOtherMethod", 'a', 'b', 'c').Return(errors.New("Some Error")) +// //go:noinline func (c *Call) On(methodName string, arguments ...interface{}) *Call { return c.Parent.On(methodName, arguments...) } // Unset removes a mock handler from being called. -// test.On("func", mock.Anything).Unset() +// +// test.On("func", mock.Anything).Unset() func (c *Call) Unset() *Call { var unlockOnce sync.Once @@ -249,9 +253,9 @@ func (c *Call) Unset() *Call { // calls have been called as expected. The referenced calls may be from the // same mock instance and/or other mock instances. // -// Mock.On("Do").Return(nil).Notbefore( -// Mock.On("Init").Return(nil) -// ) +// Mock.On("Do").Return(nil).Notbefore( +// Mock.On("Init").Return(nil) +// ) func (c *Call) NotBefore(calls ...*Call) *Call { c.lock() defer c.unlock() @@ -334,7 +338,7 @@ func (m *Mock) fail(format string, args ...interface{}) { // On starts a description of an expectation of the specified method // being called. // -// Mock.On("MyMethod", arg1, arg2) +// Mock.On("MyMethod", arg1, arg2) func (m *Mock) On(methodName string, arguments ...interface{}) *Call { for _, arg := range arguments { if v := reflect.ValueOf(arg); v.Kind() == reflect.Func { @@ -424,6 +428,10 @@ func callString(method string, arguments Arguments, includeArgumentValues bool) if includeArgumentValues { var argVals []string for argIndex, arg := range arguments { + if _, ok := arg.(*FunctionalOptionsArgument); ok { + argVals = append(argVals, fmt.Sprintf("%d: %s", argIndex, arg)) + continue + } argVals = append(argVals, fmt.Sprintf("%d: %#v", argIndex, arg)) } argValsString = fmt.Sprintf("\n\t\t%s", strings.Join(argVals, "\n\t\t")) @@ -758,6 +766,7 @@ type AnythingOfTypeArgument string // name of the type to check for. Used in Diff and Assert. // // For example: +// // Assert(t, AnythingOfType("string"), AnythingOfType("int")) func AnythingOfType(t string) AnythingOfTypeArgument { return AnythingOfTypeArgument(t) @@ -780,6 +789,34 @@ func IsType(t interface{}) *IsTypeArgument { return &IsTypeArgument{t: t} } +// FunctionalOptionsArgument is a struct that contains the type and value of an functional option argument +// for use when type checking. +type FunctionalOptionsArgument struct { + value interface{} +} + +// String returns the string representation of FunctionalOptionsArgument +func (f *FunctionalOptionsArgument) String() string { + var name string + tValue := reflect.ValueOf(f.value) + if tValue.Len() > 0 { + name = "[]" + reflect.TypeOf(tValue.Index(0).Interface()).String() + } + + return strings.Replace(fmt.Sprintf("%#v", f.value), "[]interface {}", name, 1) +} + +// FunctionalOptions returns an FunctionalOptionsArgument object containing the functional option type +// and the values to check of +// +// For example: +// Assert(t, FunctionalOptions("[]foo.FunctionalOption", foo.Opt1(), foo.Opt2())) +func FunctionalOptions(value ...interface{}) *FunctionalOptionsArgument { + return &FunctionalOptionsArgument{ + value: value, + } +} + // argumentMatcher performs custom argument matching, returning whether or // not the argument is matched by the expectation fixture function. type argumentMatcher struct { @@ -926,6 +963,29 @@ func (args Arguments) Diff(objects []interface{}) (string, int) { differences++ output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, reflect.TypeOf(t).Name(), reflect.TypeOf(actual).Name(), actualFmt) } + } else if reflect.TypeOf(expected) == reflect.TypeOf((*FunctionalOptionsArgument)(nil)) { + t := expected.(*FunctionalOptionsArgument).value + + var name string + tValue := reflect.ValueOf(t) + if tValue.Len() > 0 { + name = "[]" + reflect.TypeOf(tValue.Index(0).Interface()).String() + } + + tName := reflect.TypeOf(t).Name() + if name != reflect.TypeOf(actual).String() && tValue.Len() != 0 { + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, tName, reflect.TypeOf(actual).Name(), actualFmt) + } else { + if ef, af := assertOpts(t, actual); ef == "" && af == "" { + // match + output = fmt.Sprintf("%s\t%d: PASS: %s == %s\n", output, i, tName, tName) + } else { + // not match + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: %s != %s\n", output, i, af, ef) + } + } } else { // normal checking @@ -1102,3 +1162,65 @@ var spewConfig = spew.ConfigState{ type tHelper interface { Helper() } + +func assertOpts(expected, actual interface{}) (expectedFmt, actualFmt string) { + expectedOpts := reflect.ValueOf(expected) + actualOpts := reflect.ValueOf(actual) + var expectedNames []string + for i := 0; i < expectedOpts.Len(); i++ { + expectedNames = append(expectedNames, funcName(expectedOpts.Index(i).Interface())) + } + var actualNames []string + for i := 0; i < actualOpts.Len(); i++ { + actualNames = append(actualNames, funcName(actualOpts.Index(i).Interface())) + } + if !assert.ObjectsAreEqual(expectedNames, actualNames) { + expectedFmt = fmt.Sprintf("%v", expectedNames) + actualFmt = fmt.Sprintf("%v", actualNames) + return + } + + for i := 0; i < expectedOpts.Len(); i++ { + expectedOpt := expectedOpts.Index(i).Interface() + actualOpt := actualOpts.Index(i).Interface() + + expectedFunc := expectedNames[i] + actualFunc := actualNames[i] + if expectedFunc != actualFunc { + expectedFmt = expectedFunc + actualFmt = actualFunc + return + } + + ot := reflect.TypeOf(expectedOpt) + var expectedValues []reflect.Value + var actualValues []reflect.Value + if ot.NumIn() == 0 { + return + } + + for i := 0; i < ot.NumIn(); i++ { + vt := ot.In(i).Elem() + expectedValues = append(expectedValues, reflect.New(vt)) + actualValues = append(actualValues, reflect.New(vt)) + } + + reflect.ValueOf(expectedOpt).Call(expectedValues) + reflect.ValueOf(actualOpt).Call(actualValues) + + for i := 0; i < ot.NumIn(); i++ { + if !assert.ObjectsAreEqual(expectedValues[i].Interface(), actualValues[i].Interface()) { + expectedFmt = fmt.Sprintf("%s %+v", expectedNames[i], expectedValues[i].Interface()) + actualFmt = fmt.Sprintf("%s %+v", expectedNames[i], actualValues[i].Interface()) + return + } + } + } + + return "", "" +} + +func funcName(opt interface{}) string { + n := runtime.FuncForPC(reflect.ValueOf(opt).Pointer()).Name() + return strings.TrimSuffix(path.Base(n), path.Ext(n)) +} diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/doc.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/doc.go index 169de39221c7..968434724559 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/doc.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/doc.go @@ -1,24 +1,25 @@ // Package require implements the same assertions as the `assert` package but // stops test execution when a test fails. // -// Example Usage +// # Example Usage // // The following is a complete example using require in a standard test function: -// import ( -// "testing" -// "github.com/stretchr/testify/require" -// ) // -// func TestSomething(t *testing.T) { +// import ( +// "testing" +// "github.com/stretchr/testify/require" +// ) // -// var a string = "Hello" -// var b string = "Hello" +// func TestSomething(t *testing.T) { // -// require.Equal(t, a, b, "The two words should be the same.") +// var a string = "Hello" +// var b string = "Hello" // -// } +// require.Equal(t, a, b, "The two words should be the same.") // -// Assertions +// } +// +// # Assertions // // The `require` package have same global functions as in the `assert` package, // but instead of returning a boolean result they call `t.FailNow()`. diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require.go index 880853f5a2c5..63f852147675 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require.go @@ -37,9 +37,9 @@ func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interfac // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") +// assert.Contains(t, "Hello World", "World") +// assert.Contains(t, ["Hello", "World"], "World") +// assert.Contains(t, {"Hello": "World"}, "Hello") func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -53,9 +53,9 @@ func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...int // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") +// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") +// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") +// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -123,7 +123,7 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Empty(t, obj) +// assert.Empty(t, obj) func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -137,7 +137,7 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { // Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Emptyf(t, obj, "error message %s", "formatted") +// assert.Emptyf(t, obj, "error message %s", "formatted") func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -150,7 +150,7 @@ func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { // Equal asserts that two objects are equal. // -// assert.Equal(t, 123, 123) +// assert.Equal(t, 123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -168,8 +168,8 @@ func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...i // EqualError asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) +// actualObj, err := SomeFunction() +// assert.EqualError(t, err, expectedErrorString) func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -183,8 +183,8 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte // EqualErrorf asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -195,10 +195,50 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args t.FailNow() } +// EqualExportedValues asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true +// assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false +func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.EqualExportedValues(t, expected, actual, msgAndArgs...) { + return + } + t.FailNow() +} + +// EqualExportedValuesf asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.EqualExportedValuesf(t, expected, actual, msg, args...) { + return + } + t.FailNow() +} + // EqualValues asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValues(t, uint32(123), int32(123)) +// assert.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -212,7 +252,7 @@ func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArg // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") +// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -225,7 +265,7 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Equalf asserts that two objects are equal. // -// assert.Equalf(t, 123, 123, "error message %s", "formatted") +// assert.Equalf(t, 123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -242,10 +282,10 @@ func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, ar // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// if assert.Error(t, err) { +// assert.Equal(t, expectedError, err) +// } func Error(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -283,8 +323,8 @@ func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...int // ErrorContains asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// assert.ErrorContains(t, err, expectedErrorSubString) +// actualObj, err := SomeFunction() +// assert.ErrorContains(t, err, expectedErrorSubString) func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -298,8 +338,8 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // ErrorContainsf asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") func ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -336,10 +376,10 @@ func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// if assert.Errorf(t, err, "error message %s", "formatted") { +// assert.Equal(t, expectedErrorf, err) +// } func Errorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -353,7 +393,7 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) +// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -364,10 +404,66 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t t.FailNow() } +// EventuallyWithT asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// assert.EventuallyWithT(t, func(c *assert.CollectT) { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.EventuallyWithT(t, condition, waitFor, tick, msgAndArgs...) { + return + } + t.FailNow() +} + +// EventuallyWithTf asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.EventuallyWithTf(t, condition, waitFor, tick, msg, args...) { + return + } + t.FailNow() +} + // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -380,7 +476,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // Exactly asserts that two objects are equal in value and type. // -// assert.Exactly(t, int32(123), int64(123)) +// assert.Exactly(t, int32(123), int64(123)) func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -393,7 +489,7 @@ func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") +// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -450,7 +546,7 @@ func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) { // False asserts that the specified value is false. // -// assert.False(t, myBool) +// assert.False(t, myBool) func False(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -463,7 +559,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) { // Falsef asserts that the specified value is false. // -// assert.Falsef(t, myBool, "error message %s", "formatted") +// assert.Falsef(t, myBool, "error message %s", "formatted") func Falsef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -500,9 +596,9 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) { // Greater asserts that the first element is greater than the second // -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") +// assert.Greater(t, 2, 1) +// assert.Greater(t, float64(2), float64(1)) +// assert.Greater(t, "b", "a") func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -515,10 +611,10 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") +// assert.GreaterOrEqual(t, 2, 1) +// assert.GreaterOrEqual(t, 2, 2) +// assert.GreaterOrEqual(t, "b", "a") +// assert.GreaterOrEqual(t, "b", "b") func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -531,10 +627,10 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") +// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") +// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") +// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") +// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -547,9 +643,9 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg // Greaterf asserts that the first element is greater than the second // -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") +// assert.Greaterf(t, 2, 1, "error message %s", "formatted") +// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") +// assert.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -563,7 +659,7 @@ func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...in // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -579,7 +675,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url s // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -595,7 +691,7 @@ func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -611,7 +707,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, ur // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -626,7 +722,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u // HTTPError asserts that a specified handler returns an error status code. // -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -641,7 +737,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPErrorf asserts that a specified handler returns an error status code. // -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -656,7 +752,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -671,7 +767,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -686,7 +782,7 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { @@ -701,7 +797,7 @@ func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url str // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { @@ -716,7 +812,7 @@ func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url st // HTTPSuccess asserts that a specified handler returns a success status code. // -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) +// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -731,7 +827,7 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string // HTTPSuccessf asserts that a specified handler returns a success status code. // -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -746,7 +842,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin // Implements asserts that an object is implemented by the specified interface. // -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) +// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -759,7 +855,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -772,7 +868,7 @@ func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, ms // InDelta asserts that the two numerals are within delta of each other. // -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) +// assert.InDelta(t, math.Pi, 22/7.0, 0.01) func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -829,7 +925,7 @@ func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta f // InDeltaf asserts that the two numerals are within delta of each other. // -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -886,9 +982,9 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl // IsDecreasing asserts that the collection is decreasing // -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) +// assert.IsDecreasing(t, []int{2, 1, 0}) +// assert.IsDecreasing(t, []float{2, 1}) +// assert.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -901,9 +997,9 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsDecreasingf asserts that the collection is decreasing // -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -916,9 +1012,9 @@ func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface // IsIncreasing asserts that the collection is increasing // -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) +// assert.IsIncreasing(t, []int{1, 2, 3}) +// assert.IsIncreasing(t, []float{1, 2}) +// assert.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -931,9 +1027,9 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsIncreasingf asserts that the collection is increasing // -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -946,9 +1042,9 @@ func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface // IsNonDecreasing asserts that the collection is not decreasing // -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) +// assert.IsNonDecreasing(t, []int{1, 1, 2}) +// assert.IsNonDecreasing(t, []float{1, 2}) +// assert.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -961,9 +1057,9 @@ func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonDecreasingf asserts that the collection is not decreasing // -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -976,9 +1072,9 @@ func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interf // IsNonIncreasing asserts that the collection is not increasing // -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) +// assert.IsNonIncreasing(t, []int{2, 1, 1}) +// assert.IsNonIncreasing(t, []float{2, 1}) +// assert.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -991,9 +1087,9 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonIncreasingf asserts that the collection is not increasing // -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1028,7 +1124,7 @@ func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg strin // JSONEq asserts that two JSON strings are equivalent. // -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1041,7 +1137,7 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ // JSONEqf asserts that two JSON strings are equivalent. // -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1055,7 +1151,7 @@ func JSONEqf(t TestingT, expected string, actual string, msg string, args ...int // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// assert.Len(t, mySlice, 3) +// assert.Len(t, mySlice, 3) func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1069,7 +1165,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") +// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1082,9 +1178,9 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf // Less asserts that the first element is less than the second // -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") +// assert.Less(t, 1, 2) +// assert.Less(t, float64(1), float64(2)) +// assert.Less(t, "a", "b") func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1097,10 +1193,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) // LessOrEqual asserts that the first element is less than or equal to the second // -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") +// assert.LessOrEqual(t, 1, 2) +// assert.LessOrEqual(t, 2, 2) +// assert.LessOrEqual(t, "a", "b") +// assert.LessOrEqual(t, "b", "b") func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1113,10 +1209,10 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter // LessOrEqualf asserts that the first element is less than or equal to the second // -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") +// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") +// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") +// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") +// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1129,9 +1225,9 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . // Lessf asserts that the first element is less than the second // -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") +// assert.Lessf(t, 1, 2, "error message %s", "formatted") +// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") +// assert.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1144,8 +1240,8 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter // Negative asserts that the specified element is negative // -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) +// assert.Negative(t, -1) +// assert.Negative(t, -1.23) func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1158,8 +1254,8 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Negativef asserts that the specified element is negative // -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") +// assert.Negativef(t, -1, "error message %s", "formatted") +// assert.Negativef(t, -1.23, "error message %s", "formatted") func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1173,7 +1269,7 @@ func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) +// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1187,7 +1283,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1200,7 +1296,7 @@ func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time. // Nil asserts that the specified object is nil. // -// assert.Nil(t, err) +// assert.Nil(t, err) func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1213,7 +1309,7 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // Nilf asserts that the specified object is nil. // -// assert.Nilf(t, err, "error message %s", "formatted") +// assert.Nilf(t, err, "error message %s", "formatted") func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1250,10 +1346,10 @@ func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) { // NoError asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if assert.NoError(t, err) { +// assert.Equal(t, expectedObj, actualObj) +// } func NoError(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1266,10 +1362,10 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) { // NoErrorf asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if assert.NoErrorf(t, err, "error message %s", "formatted") { +// assert.Equal(t, expectedObj, actualObj) +// } func NoErrorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1307,9 +1403,9 @@ func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) { // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") +// assert.NotContains(t, "Hello World", "Earth") +// assert.NotContains(t, ["Hello", "World"], "Earth") +// assert.NotContains(t, {"Hello": "World"}, "Earth") func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1323,9 +1419,9 @@ func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ... // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") +// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1339,9 +1435,9 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } +// if assert.NotEmpty(t, obj) { +// assert.Equal(t, "two", obj[1]) +// } func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1355,9 +1451,9 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } +// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { +// assert.Equal(t, "two", obj[1]) +// } func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1370,7 +1466,7 @@ func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) // NotEqual asserts that the specified values are NOT equal. // -// assert.NotEqual(t, obj1, obj2) +// assert.NotEqual(t, obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1386,7 +1482,7 @@ func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs . // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValues(t, obj1, obj2) +// assert.NotEqualValues(t, obj1, obj2) func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1399,7 +1495,7 @@ func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAnd // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1412,7 +1508,7 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s // NotEqualf asserts that the specified values are NOT equal. // -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") +// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1452,7 +1548,7 @@ func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interf // NotNil asserts that the specified object is not nil. // -// assert.NotNil(t, err) +// assert.NotNil(t, err) func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1465,7 +1561,7 @@ func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // NotNilf asserts that the specified object is not nil. // -// assert.NotNilf(t, err, "error message %s", "formatted") +// assert.NotNilf(t, err, "error message %s", "formatted") func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1478,7 +1574,7 @@ func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanics(t, func(){ RemainCalm() }) +// assert.NotPanics(t, func(){ RemainCalm() }) func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1491,7 +1587,7 @@ func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") +// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1504,8 +1600,8 @@ func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interfac // NotRegexp asserts that a specified regexp does not match a string. // -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") +// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") +// assert.NotRegexp(t, "^start", "it's not starting") func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1518,8 +1614,8 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") +// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1532,7 +1628,7 @@ func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args .. // NotSame asserts that two pointers do not reference the same object. // -// assert.NotSame(t, ptr1, ptr2) +// assert.NotSame(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1548,7 +1644,7 @@ func NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // NotSamef asserts that two pointers do not reference the same object. // -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") +// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1565,7 +1661,7 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, // NotSubset asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") +// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1579,7 +1675,7 @@ func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...i // NotSubsetf asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") +// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1614,7 +1710,7 @@ func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) { // Panics asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panics(t, func(){ GoCrazy() }) +// assert.Panics(t, func(){ GoCrazy() }) func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1629,7 +1725,7 @@ func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) +// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1644,7 +1740,7 @@ func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAn // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1658,7 +1754,7 @@ func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) +// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1672,7 +1768,7 @@ func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, m // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1685,7 +1781,7 @@ func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") +// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1698,8 +1794,8 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{} // Positive asserts that the specified element is positive // -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) +// assert.Positive(t, 1) +// assert.Positive(t, 1.23) func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1712,8 +1808,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Positivef asserts that the specified element is positive // -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") +// assert.Positivef(t, 1, "error message %s", "formatted") +// assert.Positivef(t, 1.23, "error message %s", "formatted") func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1726,8 +1822,8 @@ func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { // Regexp asserts that a specified regexp matches a string. // -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") +// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") +// assert.Regexp(t, "start...$", "it's not starting") func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1740,8 +1836,8 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") +// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1754,7 +1850,7 @@ func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...in // Same asserts that two pointers reference the same object. // -// assert.Same(t, ptr1, ptr2) +// assert.Same(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1770,7 +1866,7 @@ func Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...in // Samef asserts that two pointers reference the same object. // -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") +// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1787,7 +1883,7 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg // Subset asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") +// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1801,7 +1897,7 @@ func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...inte // Subsetf asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") +// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1814,7 +1910,7 @@ func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args // True asserts that the specified value is true. // -// assert.True(t, myBool) +// assert.True(t, myBool) func True(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1827,7 +1923,7 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) { // Truef asserts that the specified value is true. // -// assert.Truef(t, myBool, "error message %s", "formatted") +// assert.Truef(t, myBool, "error message %s", "formatted") func Truef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1840,7 +1936,7 @@ func Truef(t TestingT, value bool, msg string, args ...interface{}) { // WithinDuration asserts that the two times are within duration delta of each other. // -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) +// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1853,7 +1949,7 @@ func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time // WithinDurationf asserts that the two times are within duration delta of each other. // -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1866,7 +1962,7 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim // WithinRange asserts that a time is within a time range (inclusive). // -// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1879,7 +1975,7 @@ func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, m // WithinRangef asserts that a time is within a time range (inclusive). // -// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require_forward.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require_forward.go index 960bf6f2cabf..3b5b09330a43 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require_forward.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/require/require_forward.go @@ -31,9 +31,9 @@ func (a *Assertions) Conditionf(comp assert.Comparison, msg string, args ...inte // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// a.Contains("Hello World", "World") -// a.Contains(["Hello", "World"], "World") -// a.Contains({"Hello": "World"}, "Hello") +// a.Contains("Hello World", "World") +// a.Contains(["Hello", "World"], "World") +// a.Contains({"Hello": "World"}, "Hello") func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -44,9 +44,9 @@ func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs .. // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// a.Containsf("Hello World", "World", "error message %s", "formatted") -// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") -// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") +// a.Containsf("Hello World", "World", "error message %s", "formatted") +// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") +// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -99,7 +99,7 @@ func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg st // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// a.Empty(obj) +// a.Empty(obj) func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -110,7 +110,7 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) { // Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// a.Emptyf(obj, "error message %s", "formatted") +// a.Emptyf(obj, "error message %s", "formatted") func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -120,7 +120,7 @@ func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) // Equal asserts that two objects are equal. // -// a.Equal(123, 123) +// a.Equal(123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -135,8 +135,8 @@ func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs // EqualError asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// a.EqualError(err, expectedErrorString) +// actualObj, err := SomeFunction() +// a.EqualError(err, expectedErrorString) func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -147,8 +147,8 @@ func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ... // EqualErrorf asserts that a function returned an error (i.e. not `nil`) // and that it is equal to the provided error. // -// actualObj, err := SomeFunction() -// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -156,10 +156,44 @@ func (a *Assertions) EqualErrorf(theError error, errString string, msg string, a EqualErrorf(a.t, theError, errString, msg, args...) } +// EqualExportedValues asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// a.EqualExportedValues(S{1, 2}, S{1, 3}) => true +// a.EqualExportedValues(S{1, 2}, S{2, 3}) => false +func (a *Assertions) EqualExportedValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + EqualExportedValues(a.t, expected, actual, msgAndArgs...) +} + +// EqualExportedValuesf asserts that the types of two objects are equal and their public +// fields are also equal. This is useful for comparing structs that have private fields +// that could potentially differ. +// +// type S struct { +// Exported int +// notExported int +// } +// a.EqualExportedValuesf(S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// a.EqualExportedValuesf(S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + EqualExportedValuesf(a.t, expected, actual, msg, args...) +} + // EqualValues asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValues(uint32(123), int32(123)) +// a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -170,7 +204,7 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") +// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -180,7 +214,7 @@ func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg // Equalf asserts that two objects are equal. // -// a.Equalf(123, 123, "error message %s", "formatted") +// a.Equalf(123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -194,10 +228,10 @@ func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// if a.Error(err) { +// assert.Equal(t, expectedError, err) +// } func (a *Assertions) Error(err error, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -226,8 +260,8 @@ func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args .. // ErrorContains asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// a.ErrorContains(err, expectedErrorSubString) +// actualObj, err := SomeFunction() +// a.ErrorContains(err, expectedErrorSubString) func (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -238,8 +272,8 @@ func (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs . // ErrorContainsf asserts that a function returned an error (i.e. not `nil`) // and that the error contains the specified substring. // -// actualObj, err := SomeFunction() -// a.ErrorContainsf(err, expectedErrorSubString, "error message %s", "formatted") +// actualObj, err := SomeFunction() +// a.ErrorContainsf(err, expectedErrorSubString, "error message %s", "formatted") func (a *Assertions) ErrorContainsf(theError error, contains string, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -267,10 +301,10 @@ func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...inter // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// if a.Errorf(err, "error message %s", "formatted") { +// assert.Equal(t, expectedErrorf, err) +// } func (a *Assertions) Errorf(err error, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -281,7 +315,7 @@ func (a *Assertions) Errorf(err error, msg string, args ...interface{}) { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) +// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -289,10 +323,60 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti Eventually(a.t, condition, waitFor, tick, msgAndArgs...) } +// EventuallyWithT asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// a.EventuallyWithT(func(c *assert.CollectT) { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + EventuallyWithT(a.t, condition, waitFor, tick, msgAndArgs...) +} + +// EventuallyWithTf asserts that given condition will be met in waitFor time, +// periodically checking target function each tick. In contrast to Eventually, +// it supplies a CollectT to the condition function, so that the condition +// function can use the CollectT to call other assertions. +// The condition is considered "met" if no errors are raised in a tick. +// The supplied CollectT collects all errors from one tick (if there are any). +// If the condition is not met before waitFor, the collected errors of +// the last tick are copied to t. +// +// externalValue := false +// go func() { +// time.Sleep(8*time.Second) +// externalValue = true +// }() +// a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { +// // add assertions as needed; any assertion failure will fail the current tick +// assert.True(c, externalValue, "expected 'externalValue' to be true") +// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +func (a *Assertions) EventuallyWithTf(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + EventuallyWithTf(a.t, condition, waitFor, tick, msg, args...) +} + // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -302,7 +386,7 @@ func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, t // Exactly asserts that two objects are equal in value and type. // -// a.Exactly(int32(123), int64(123)) +// a.Exactly(int32(123), int64(123)) func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -312,7 +396,7 @@ func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArg // Exactlyf asserts that two objects are equal in value and type. // -// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") +// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -354,7 +438,7 @@ func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{ // False asserts that the specified value is false. // -// a.False(myBool) +// a.False(myBool) func (a *Assertions) False(value bool, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -364,7 +448,7 @@ func (a *Assertions) False(value bool, msgAndArgs ...interface{}) { // Falsef asserts that the specified value is false. // -// a.Falsef(myBool, "error message %s", "formatted") +// a.Falsef(myBool, "error message %s", "formatted") func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -392,9 +476,9 @@ func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) { // Greater asserts that the first element is greater than the second // -// a.Greater(2, 1) -// a.Greater(float64(2), float64(1)) -// a.Greater("b", "a") +// a.Greater(2, 1) +// a.Greater(float64(2), float64(1)) +// a.Greater("b", "a") func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -404,10 +488,10 @@ func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...inter // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// a.GreaterOrEqual(2, 1) -// a.GreaterOrEqual(2, 2) -// a.GreaterOrEqual("b", "a") -// a.GreaterOrEqual("b", "b") +// a.GreaterOrEqual(2, 1) +// a.GreaterOrEqual(2, 2) +// a.GreaterOrEqual("b", "a") +// a.GreaterOrEqual("b", "b") func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -417,10 +501,10 @@ func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs . // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") -// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") -// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") -// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") +// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") +// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") +// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") +// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -430,9 +514,9 @@ func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, // Greaterf asserts that the first element is greater than the second // -// a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") -// a.Greaterf("b", "a", "error message %s", "formatted") +// a.Greaterf(2, 1, "error message %s", "formatted") +// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") +// a.Greaterf("b", "a", "error message %s", "formatted") func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -443,7 +527,7 @@ func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args . // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -456,7 +540,7 @@ func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, u // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -469,7 +553,7 @@ func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -482,7 +566,7 @@ func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -494,7 +578,7 @@ func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method strin // HTTPError asserts that a specified handler returns an error status code. // -// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -506,7 +590,7 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri // HTTPErrorf asserts that a specified handler returns an error status code. // -// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -518,7 +602,7 @@ func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url str // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -530,7 +614,7 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -542,7 +626,7 @@ func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) +// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { @@ -554,7 +638,7 @@ func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { @@ -566,7 +650,7 @@ func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, ur // HTTPSuccess asserts that a specified handler returns a success status code. // -// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) +// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -578,7 +662,7 @@ func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url st // HTTPSuccessf asserts that a specified handler returns a success status code. // -// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -590,7 +674,7 @@ func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url s // Implements asserts that an object is implemented by the specified interface. // -// a.Implements((*MyInterface)(nil), new(MyObject)) +// a.Implements((*MyInterface)(nil), new(MyObject)) func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -600,7 +684,7 @@ func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, // Implementsf asserts that an object is implemented by the specified interface. // -// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -610,7 +694,7 @@ func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{} // InDelta asserts that the two numerals are within delta of each other. // -// a.InDelta(math.Pi, 22/7.0, 0.01) +// a.InDelta(math.Pi, 22/7.0, 0.01) func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -652,7 +736,7 @@ func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, del // InDeltaf asserts that the two numerals are within delta of each other. // -// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -694,9 +778,9 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo // IsDecreasing asserts that the collection is decreasing // -// a.IsDecreasing([]int{2, 1, 0}) -// a.IsDecreasing([]float{2, 1}) -// a.IsDecreasing([]string{"b", "a"}) +// a.IsDecreasing([]int{2, 1, 0}) +// a.IsDecreasing([]float{2, 1}) +// a.IsDecreasing([]string{"b", "a"}) func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -706,9 +790,9 @@ func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) // IsDecreasingf asserts that the collection is decreasing // -// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") -// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") +// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") +// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -718,9 +802,9 @@ func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...inter // IsIncreasing asserts that the collection is increasing // -// a.IsIncreasing([]int{1, 2, 3}) -// a.IsIncreasing([]float{1, 2}) -// a.IsIncreasing([]string{"a", "b"}) +// a.IsIncreasing([]int{1, 2, 3}) +// a.IsIncreasing([]float{1, 2}) +// a.IsIncreasing([]string{"a", "b"}) func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -730,9 +814,9 @@ func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) // IsIncreasingf asserts that the collection is increasing // -// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") -// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") +// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") +// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -742,9 +826,9 @@ func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...inter // IsNonDecreasing asserts that the collection is not decreasing // -// a.IsNonDecreasing([]int{1, 1, 2}) -// a.IsNonDecreasing([]float{1, 2}) -// a.IsNonDecreasing([]string{"a", "b"}) +// a.IsNonDecreasing([]int{1, 1, 2}) +// a.IsNonDecreasing([]float{1, 2}) +// a.IsNonDecreasing([]string{"a", "b"}) func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -754,9 +838,9 @@ func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface // IsNonDecreasingf asserts that the collection is not decreasing // -// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") +// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -766,9 +850,9 @@ func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...in // IsNonIncreasing asserts that the collection is not increasing // -// a.IsNonIncreasing([]int{2, 1, 1}) -// a.IsNonIncreasing([]float{2, 1}) -// a.IsNonIncreasing([]string{"b", "a"}) +// a.IsNonIncreasing([]int{2, 1, 1}) +// a.IsNonIncreasing([]float{2, 1}) +// a.IsNonIncreasing([]string{"b", "a"}) func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -778,9 +862,9 @@ func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface // IsNonIncreasingf asserts that the collection is not increasing // -// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") +// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -806,7 +890,7 @@ func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg s // JSONEq asserts that two JSON strings are equivalent. // -// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -816,7 +900,7 @@ func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interf // JSONEqf asserts that two JSON strings are equivalent. // -// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -827,7 +911,7 @@ func (a *Assertions) JSONEqf(expected string, actual string, msg string, args .. // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// a.Len(mySlice, 3) +// a.Len(mySlice, 3) func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -838,7 +922,7 @@ func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// a.Lenf(mySlice, 3, "error message %s", "formatted") +// a.Lenf(mySlice, 3, "error message %s", "formatted") func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -848,9 +932,9 @@ func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...in // Less asserts that the first element is less than the second // -// a.Less(1, 2) -// a.Less(float64(1), float64(2)) -// a.Less("a", "b") +// a.Less(1, 2) +// a.Less(float64(1), float64(2)) +// a.Less("a", "b") func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -860,10 +944,10 @@ func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interfac // LessOrEqual asserts that the first element is less than or equal to the second // -// a.LessOrEqual(1, 2) -// a.LessOrEqual(2, 2) -// a.LessOrEqual("a", "b") -// a.LessOrEqual("b", "b") +// a.LessOrEqual(1, 2) +// a.LessOrEqual(2, 2) +// a.LessOrEqual("a", "b") +// a.LessOrEqual("b", "b") func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -873,10 +957,10 @@ func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...i // LessOrEqualf asserts that the first element is less than or equal to the second // -// a.LessOrEqualf(1, 2, "error message %s", "formatted") -// a.LessOrEqualf(2, 2, "error message %s", "formatted") -// a.LessOrEqualf("a", "b", "error message %s", "formatted") -// a.LessOrEqualf("b", "b", "error message %s", "formatted") +// a.LessOrEqualf(1, 2, "error message %s", "formatted") +// a.LessOrEqualf(2, 2, "error message %s", "formatted") +// a.LessOrEqualf("a", "b", "error message %s", "formatted") +// a.LessOrEqualf("b", "b", "error message %s", "formatted") func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -886,9 +970,9 @@ func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, ar // Lessf asserts that the first element is less than the second // -// a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1), float64(2), "error message %s", "formatted") -// a.Lessf("a", "b", "error message %s", "formatted") +// a.Lessf(1, 2, "error message %s", "formatted") +// a.Lessf(float64(1), float64(2), "error message %s", "formatted") +// a.Lessf("a", "b", "error message %s", "formatted") func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -898,8 +982,8 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i // Negative asserts that the specified element is negative // -// a.Negative(-1) -// a.Negative(-1.23) +// a.Negative(-1) +// a.Negative(-1.23) func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -909,8 +993,8 @@ func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) { // Negativef asserts that the specified element is negative // -// a.Negativef(-1, "error message %s", "formatted") -// a.Negativef(-1.23, "error message %s", "formatted") +// a.Negativef(-1, "error message %s", "formatted") +// a.Negativef(-1.23, "error message %s", "formatted") func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -921,7 +1005,7 @@ func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) { // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) +// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -932,7 +1016,7 @@ func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick ti // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -942,7 +1026,7 @@ func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick t // Nil asserts that the specified object is nil. // -// a.Nil(err) +// a.Nil(err) func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -952,7 +1036,7 @@ func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) { // Nilf asserts that the specified object is nil. // -// a.Nilf(err, "error message %s", "formatted") +// a.Nilf(err, "error message %s", "formatted") func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -980,10 +1064,10 @@ func (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) // NoError asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if a.NoError(err) { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if a.NoError(err) { +// assert.Equal(t, expectedObj, actualObj) +// } func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -993,10 +1077,10 @@ func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) { // NoErrorf asserts that a function returned no error (i.e. `nil`). // -// actualObj, err := SomeFunction() -// if a.NoErrorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } +// actualObj, err := SomeFunction() +// if a.NoErrorf(err, "error message %s", "formatted") { +// assert.Equal(t, expectedObj, actualObj) +// } func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1025,9 +1109,9 @@ func (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// a.NotContains("Hello World", "Earth") -// a.NotContains(["Hello", "World"], "Earth") -// a.NotContains({"Hello": "World"}, "Earth") +// a.NotContains("Hello World", "Earth") +// a.NotContains(["Hello", "World"], "Earth") +// a.NotContains({"Hello": "World"}, "Earth") func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1038,9 +1122,9 @@ func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") -// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") -// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") +// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") +// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") +// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1051,9 +1135,9 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if a.NotEmpty(obj) { -// assert.Equal(t, "two", obj[1]) -// } +// if a.NotEmpty(obj) { +// assert.Equal(t, "two", obj[1]) +// } func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1064,9 +1148,9 @@ func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) { // NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if a.NotEmptyf(obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } +// if a.NotEmptyf(obj, "error message %s", "formatted") { +// assert.Equal(t, "two", obj[1]) +// } func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1076,7 +1160,7 @@ func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface // NotEqual asserts that the specified values are NOT equal. // -// a.NotEqual(obj1, obj2) +// a.NotEqual(obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1089,7 +1173,7 @@ func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndAr // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// a.NotEqualValues(obj1, obj2) +// a.NotEqualValues(obj1, obj2) func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1099,7 +1183,7 @@ func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, ms // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") +// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1109,7 +1193,7 @@ func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, m // NotEqualf asserts that the specified values are NOT equal. // -// a.NotEqualf(obj1, obj2, "error message %s", "formatted") +// a.NotEqualf(obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1140,7 +1224,7 @@ func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...in // NotNil asserts that the specified object is not nil. // -// a.NotNil(err) +// a.NotNil(err) func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1150,7 +1234,7 @@ func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) { // NotNilf asserts that the specified object is not nil. // -// a.NotNilf(err, "error message %s", "formatted") +// a.NotNilf(err, "error message %s", "formatted") func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1160,7 +1244,7 @@ func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{} // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// a.NotPanics(func(){ RemainCalm() }) +// a.NotPanics(func(){ RemainCalm() }) func (a *Assertions) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1170,7 +1254,7 @@ func (a *Assertions) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{} // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") +// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") func (a *Assertions) NotPanicsf(f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1180,8 +1264,8 @@ func (a *Assertions) NotPanicsf(f assert.PanicTestFunc, msg string, args ...inte // NotRegexp asserts that a specified regexp does not match a string. // -// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") -// a.NotRegexp("^start", "it's not starting") +// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") +// a.NotRegexp("^start", "it's not starting") func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1191,8 +1275,8 @@ func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...in // NotRegexpf asserts that a specified regexp does not match a string. // -// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") +// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1202,7 +1286,7 @@ func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, arg // NotSame asserts that two pointers do not reference the same object. // -// a.NotSame(ptr1, ptr2) +// a.NotSame(ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1215,7 +1299,7 @@ func (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArg // NotSamef asserts that two pointers do not reference the same object. // -// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") +// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1229,7 +1313,7 @@ func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg stri // NotSubset asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") +// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1240,7 +1324,7 @@ func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs // NotSubsetf asserts that the specified list(array, slice...) contains not all // elements given in the specified subset(array, slice...). // -// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") +// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1266,7 +1350,7 @@ func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) { // Panics asserts that the code inside the specified PanicTestFunc panics. // -// a.Panics(func(){ GoCrazy() }) +// a.Panics(func(){ GoCrazy() }) func (a *Assertions) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1278,7 +1362,7 @@ func (a *Assertions) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) { // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// a.PanicsWithError("crazy error", func(){ GoCrazy() }) +// a.PanicsWithError("crazy error", func(){ GoCrazy() }) func (a *Assertions) PanicsWithError(errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1290,7 +1374,7 @@ func (a *Assertions) PanicsWithError(errString string, f assert.PanicTestFunc, m // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) PanicsWithErrorf(errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1301,7 +1385,7 @@ func (a *Assertions) PanicsWithErrorf(errString string, f assert.PanicTestFunc, // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) +// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) func (a *Assertions) PanicsWithValue(expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1312,7 +1396,7 @@ func (a *Assertions) PanicsWithValue(expected interface{}, f assert.PanicTestFun // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) PanicsWithValuef(expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1322,7 +1406,7 @@ func (a *Assertions) PanicsWithValuef(expected interface{}, f assert.PanicTestFu // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") +// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1332,8 +1416,8 @@ func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interfa // Positive asserts that the specified element is positive // -// a.Positive(1) -// a.Positive(1.23) +// a.Positive(1) +// a.Positive(1.23) func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1343,8 +1427,8 @@ func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) { // Positivef asserts that the specified element is positive // -// a.Positivef(1, "error message %s", "formatted") -// a.Positivef(1.23, "error message %s", "formatted") +// a.Positivef(1, "error message %s", "formatted") +// a.Positivef(1.23, "error message %s", "formatted") func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1354,8 +1438,8 @@ func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) { // Regexp asserts that a specified regexp matches a string. // -// a.Regexp(regexp.MustCompile("start"), "it's starting") -// a.Regexp("start...$", "it's not starting") +// a.Regexp(regexp.MustCompile("start"), "it's starting") +// a.Regexp("start...$", "it's not starting") func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1365,8 +1449,8 @@ func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...inter // Regexpf asserts that a specified regexp matches a string. // -// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") +// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1376,7 +1460,7 @@ func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args . // Same asserts that two pointers reference the same object. // -// a.Same(ptr1, ptr2) +// a.Same(ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1389,7 +1473,7 @@ func (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs . // Samef asserts that two pointers reference the same object. // -// a.Samef(ptr1, ptr2, "error message %s", "formatted") +// a.Samef(ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1403,7 +1487,7 @@ func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, // Subset asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") +// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1414,7 +1498,7 @@ func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ... // Subsetf asserts that the specified list(array, slice...) contains all // elements given in the specified subset(array, slice...). // -// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") +// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1424,7 +1508,7 @@ func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, a // True asserts that the specified value is true. // -// a.True(myBool) +// a.True(myBool) func (a *Assertions) True(value bool, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1434,7 +1518,7 @@ func (a *Assertions) True(value bool, msgAndArgs ...interface{}) { // Truef asserts that the specified value is true. // -// a.Truef(myBool, "error message %s", "formatted") +// a.Truef(myBool, "error message %s", "formatted") func (a *Assertions) Truef(value bool, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1444,7 +1528,7 @@ func (a *Assertions) Truef(value bool, msg string, args ...interface{}) { // WithinDuration asserts that the two times are within duration delta of each other. // -// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) +// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1454,7 +1538,7 @@ func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta // WithinDurationf asserts that the two times are within duration delta of each other. // -// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1464,7 +1548,7 @@ func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta // WithinRange asserts that a time is within a time range (inclusive). // -// a.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// a.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1474,7 +1558,7 @@ func (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Tim // WithinRangef asserts that a time is within a time range (inclusive). // -// a.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// a.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func (a *Assertions) WithinRangef(actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() diff --git a/cluster-autoscaler/vendor/github.com/stretchr/testify/suite/doc.go b/cluster-autoscaler/vendor/github.com/stretchr/testify/suite/doc.go index f91a245d3f8b..8d55a3aa8923 100644 --- a/cluster-autoscaler/vendor/github.com/stretchr/testify/suite/doc.go +++ b/cluster-autoscaler/vendor/github.com/stretchr/testify/suite/doc.go @@ -29,37 +29,38 @@ // Suite object has assertion methods. // // A crude example: -// // Basic imports -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// "github.com/stretchr/testify/suite" -// ) // -// // Define the suite, and absorb the built-in basic suite -// // functionality from testify - including a T() method which -// // returns the current testing context -// type ExampleTestSuite struct { -// suite.Suite -// VariableThatShouldStartAtFive int -// } +// // Basic imports +// import ( +// "testing" +// "github.com/stretchr/testify/assert" +// "github.com/stretchr/testify/suite" +// ) // -// // Make sure that VariableThatShouldStartAtFive is set to five -// // before each test -// func (suite *ExampleTestSuite) SetupTest() { -// suite.VariableThatShouldStartAtFive = 5 -// } +// // Define the suite, and absorb the built-in basic suite +// // functionality from testify - including a T() method which +// // returns the current testing context +// type ExampleTestSuite struct { +// suite.Suite +// VariableThatShouldStartAtFive int +// } // -// // All methods that begin with "Test" are run as tests within a -// // suite. -// func (suite *ExampleTestSuite) TestExample() { -// assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive) -// suite.Equal(5, suite.VariableThatShouldStartAtFive) -// } +// // Make sure that VariableThatShouldStartAtFive is set to five +// // before each test +// func (suite *ExampleTestSuite) SetupTest() { +// suite.VariableThatShouldStartAtFive = 5 +// } // -// // In order for 'go test' to run this suite, we need to create -// // a normal test function and pass our suite to suite.Run -// func TestExampleTestSuite(t *testing.T) { -// suite.Run(t, new(ExampleTestSuite)) -// } +// // All methods that begin with "Test" are run as tests within a +// // suite. +// func (suite *ExampleTestSuite) TestExample() { +// assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive) +// suite.Equal(5, suite.VariableThatShouldStartAtFive) +// } +// +// // In order for 'go test' to run this suite, we need to create +// // a normal test function and pass our suite to suite.Run +// func TestExampleTestSuite(t *testing.T) { +// suite.Run(t, new(ExampleTestSuite)) +// } package suite diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh index 0c4d14929a4c..8f775fafa693 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -624,7 +624,7 @@ ccflags="$@" $2 ~ /^MEM/ || $2 ~ /^WG/ || $2 ~ /^FIB_RULE_/ || - $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mmap_nomremap.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mmap_nomremap.go new file mode 100644 index 000000000000..ca0513632ee3 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mmap_nomremap.go @@ -0,0 +1,14 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris +// +build aix darwin dragonfly freebsd openbsd solaris + +package unix + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mremap.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mremap.go index 86213c05d698..fa93d0aa9045 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mremap.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mremap.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux -// +build linux +//go:build linux || netbsd +// +build linux netbsd package unix @@ -14,8 +14,17 @@ type mremapMmapper struct { mremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) } +var mapper = &mremapMmapper{ + mmapper: mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, + }, + mremap: mremap, +} + func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { - if newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&MREMAP_FIXED != 0 { + if newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 { return nil, EINVAL } @@ -32,9 +41,13 @@ func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data [ } bNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength) pNew := &bNew[cap(bNew)-1] - if flags&MREMAP_DONTUNMAP == 0 { + if flags&mremapDontunmap == 0 { delete(m.active, pOld) } m.active[pNew] = bNew return bNew, nil } + +func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { + return mapper.Mremap(oldData, newLength, flags) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_aix.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_aix.go index c406ae00f417..9a6e5acacbf1 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -535,21 +535,6 @@ func Fsync(fd int) error { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg //sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_bsd.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_bsd.go index 7705c3270b5e..4217de518bc8 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -601,20 +601,6 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { // Gethostuuid(uuid *byte, timeout *Timespec) (err error) // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, behav int) (err error) //sys Mlock(b []byte) (err error) //sys Mlockall(flags int) (err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_darwin.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_darwin.go index 206921504cb6..135cc3cd75ba 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -510,30 +510,36 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { return nil, err } - // Find size. - n := uintptr(0) - if err := sysctl(mib, nil, &n, nil, 0); err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + for { + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // Read into buffer of that size. - buf := make([]KinfoProc, n/SizeofKinfoProc) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { - return nil, err - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + // Read into buffer of that size. + buf := make([]KinfoProc, n/SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { + if err == ENOMEM { + // Process table grew. Try again. + continue + } + return nil, err + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // The actual call may return less than the original reported required - // size so ensure we deal with that. - return buf[:n/SizeofKinfoProc], nil + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n/SizeofKinfoProc], nil + } } //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go index 39de5f1430bb..a730878e4931 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1885,7 +1885,7 @@ func Getpgrp() (pid int) { //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) -//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) //sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) @@ -2125,28 +2125,6 @@ func writevRacedetect(iovecs []Iovec, n int) { // mmap varies by architecture; see syscall_linux_*.go. //sys munmap(addr uintptr, length uintptr) (err error) //sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) - -var mapper = &mremapMmapper{ - mmapper: mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, - }, - mremap: mremap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - -func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { - return mapper.Mremap(oldData, newLength, flags) -} - //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) @@ -2155,6 +2133,12 @@ func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) +const ( + mremapFixed = MREMAP_FIXED + mremapDontunmap = MREMAP_DONTUNMAP + mremapMaymove = MREMAP_MAYMOVE +) + // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, // using the specified flags. func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { @@ -2454,6 +2438,39 @@ func Getresgid() (rgid, egid, sgid int) { return int(r), int(e), int(s) } +// Pselect is a wrapper around the Linux pselect6 system call. +// This version does not modify the timeout argument. +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + // Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES, + // The Linux pselect6() system call modifies its timeout argument. + // [Not modifying the argument] is the behavior required by POSIX.1-2001. + var mutableTimeout *Timespec + if timeout != nil { + mutableTimeout = new(Timespec) + *mutableTimeout = *timeout + } + + // The final argument of the pselect6() system call is not a + // sigset_t * pointer, but is instead a structure + var kernelMask *sigset_argpack + if sigmask != nil { + wordBits := 32 << (^uintptr(0) >> 63) // see math.intSize + + // A sigset stores one bit per signal, + // offset by 1 (because signal 0 does not exist). + // So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉. + sigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits) + + sigsetBytes := uintptr(sigsetWords * (wordBits / 8)) + kernelMask = &sigset_argpack{ + ss: sigmask, + ssLen: sigsetBytes, + } + } + + return pselect6(nfd, r, w, e, mutableTimeout, kernelMask) +} + /* * Unimplemented */ diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 5b21fcfd7539..70601ce3692c 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -40,7 +40,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index a81f5742b8a5..f5266689af0e 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -33,7 +33,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 69d2d7c3db7a..f6ab02ec1501 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -28,7 +28,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 76d564095ef4..93fe59d25d9f 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -31,7 +31,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 35851ef70b8d..5e6ceee129fb 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -32,7 +32,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) @@ -177,3 +177,14 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +//sys riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) + +func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) { + var setSize uintptr + + if set != nil { + setSize = uintptr(unsafe.Sizeof(*set)) + } + return riscvHWProbe(pairs, setSize, set, flags) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 018d7d47822f..ddd1ac853412 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -360,6 +360,18 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) +const ( + mremapFixed = MAP_FIXED + mremapDontunmap = 0 + mremapMaymove = 0 +) + +//sys mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP + +func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) { + return mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags) +} + /* * Unimplemented */ @@ -564,7 +576,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { // mq_timedreceive // mq_timedsend // mq_unlink -// mremap // msgget // msgrcv // msgsnd diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_solaris.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_solaris.go index b600a289d338..72d23575fa43 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -716,20 +716,6 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - // Event Ports type fileObjCookie struct { diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go index 8e48c29ec332..8bb30e7ce3f6 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -147,6 +147,14 @@ func (m *mmapper) Munmap(data []byte) (err error) { return nil } +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled { diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index d3d49ec3ed75..44e72edb42d3 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -285,25 +285,11 @@ func Close(fd int) (err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - // Dummy function: there are no semantics for Madvise on z/OS func Madvise(b []byte, advice int) (err error) { return } -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getegid() (egid int) //sysnb Geteuid() (uid int) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index a46df0f1e57a..cfb143001862 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 6cd4a3ea9d33..df64f2d590a0 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index c7ebee24df3f..3025cd5b2d95 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 12a9a1389eac..09e1ffbef909 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index f26a164f4aab..a4572354079c 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 890bc3c9b706..fee7dfb819db 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 549f26ac6466..a5b2373aea06 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index e0365e32c174..5dde82c98ab3 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index fdccce15ca20..2e80ea6b33fc 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index b2205c83faa1..a65dcd7cbe30 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 81aa5ad0f695..cbd34e3d89a0 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 76807a1fd4f7..e4afa7a3178f 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index d4a5ab9e4e06..44f45a039d9b 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 66e65db95192..74733e260f7e 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 48984202c65f..f5f3934b1a9f 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -30,22 +30,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 7ceec233fbb4..a07321bed9b5 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1356,7 +1356,7 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { +func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) if e1 != 0 { diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 0b29239583b9..0ab4f2ed7206 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -531,3 +531,19 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(pairs) > 0 { + _p0 = unsafe.Pointer(&pairs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index cdb2af5ae0f4..35f499b32a3b 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 9d25f76b0bfd..3cda65b0da37 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index d3f8035169f0..1e1fea902be4 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 887188a529e2..3b77da110798 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 3e594a8c0910..ef285c567b64 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -251,6 +251,8 @@ const ( SYS_ACCEPT4 = 242 SYS_RECVMMSG = 243 SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_RISCV_HWPROBE = 258 + SYS_RISCV_FLUSH_ICACHE = 259 SYS_WAIT4 = 260 SYS_PRLIMIT64 = 261 SYS_FANOTIFY_INIT = 262 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go index 02e2462c8f9c..26ef52aafc2a 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -866,6 +866,11 @@ const ( POLLNVAL = 0x20 ) +type sigset_argpack struct { + ss *Sigset_t + ssLen uintptr +} + type SignalfdSiginfo struct { Signo uint32 Errno int32 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 9ea54b7b8600..83c69c119fa1 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -718,3 +718,26 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +type RISCVHWProbePairs struct { + Key int64 + Value uint64 +} + +const ( + RISCV_HWPROBE_KEY_MVENDORID = 0x0 + RISCV_HWPROBE_KEY_MARCHID = 0x1 + RISCV_HWPROBE_KEY_MIMPID = 0x2 + RISCV_HWPROBE_KEY_BASE_BEHAVIOR = 0x3 + RISCV_HWPROBE_BASE_BEHAVIOR_IMA = 0x1 + RISCV_HWPROBE_KEY_IMA_EXT_0 = 0x4 + RISCV_HWPROBE_IMA_FD = 0x1 + RISCV_HWPROBE_IMA_C = 0x2 + RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 + RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 + RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 + RISCV_HWPROBE_MISALIGNED_SLOW = 0x2 + RISCV_HWPROBE_MISALIGNED_FAST = 0x3 + RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 + RISCV_HWPROBE_MISALIGNED_MASK = 0x7 +) diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go b/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go index 9645900754f7..373d16388a10 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -135,14 +135,14 @@ func Getpagesize() int { return 4096 } // NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. // This is useful when interoperating with Windows code requiring callbacks. -// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. func NewCallback(fn interface{}) uintptr { return syscall.NewCallback(fn) } // NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. // This is useful when interoperating with Windows code requiring callbacks. -// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. func NewCallbackCDecl(fn interface{}) uintptr { return syscall.NewCallbackCDecl(fn) } diff --git a/cluster-autoscaler/vendor/golang.org/x/text/language/match.go b/cluster-autoscaler/vendor/golang.org/x/text/language/match.go index ee45f4947471..1153baf291ca 100644 --- a/cluster-autoscaler/vendor/golang.org/x/text/language/match.go +++ b/cluster-autoscaler/vendor/golang.org/x/text/language/match.go @@ -434,7 +434,7 @@ func newMatcher(supported []Tag, options []MatchOption) *matcher { // (their canonicalization simply substitutes a different language code, but // nothing else), the match confidence is Exact, otherwise it is High. for i, lm := range language.AliasMap { - // If deprecated codes match and there is no fiddling with the script or + // If deprecated codes match and there is no fiddling with the script // or region, we consider it an exact match. conf := Exact if language.AliasTypes[i] != language.Macro { diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go index 165ede0f8f38..03543bd4bb8f 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -128,15 +128,14 @@ func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, // (from "version"). Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': - _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) - return pkg, err + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - case 'v', 'c', 'd': - _, pkg, err := gcimporter.BImportData(fset, imports, data, path) + case 'i': // indexed, till go1.19 + _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) return pkg, err - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) return pkg, err diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/golist.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/golist.go index 6bb7168d2e34..e84f19dfa983 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/golist.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/golist.go @@ -625,7 +625,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse } if pkg.PkgPath == "unsafe" { - pkg.GoFiles = nil // ignore fake unsafe.go file + pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929) + } else if len(pkg.CompiledGoFiles) == 0 { + // Work around for pre-go.1.11 versions of go list. + // TODO(matloob): they should be handled by the fallback. + // Can we delete this? + pkg.CompiledGoFiles = pkg.GoFiles } // Assume go list emits only absolute paths for Dir. @@ -663,13 +668,6 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse response.Roots = append(response.Roots, pkg.ID) } - // Work around for pre-go.1.11 versions of go list. - // TODO(matloob): they should be handled by the fallback. - // Can we delete this? - if len(pkg.CompiledGoFiles) == 0 { - pkg.CompiledGoFiles = pkg.GoFiles - } - // Temporary work-around for golang/go#39986. Parse filenames out of // error messages. This happens if there are unrecoverable syntax // errors in the source, so we can't match on a specific error message. @@ -891,6 +889,15 @@ func golistargs(cfg *Config, words []string, goVersion int) []string { // probably because you'd just get the TestMain. fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)), } + + // golang/go#60456: with go1.21 and later, go list serves pgo variants, which + // can be costly to compute and may result in redundant processing for the + // caller. Disable these variants. If someone wants to add e.g. a NeedPGO + // mode flag, that should be a separate proposal. + if goVersion >= 21 { + fullargs = append(fullargs, "-pgo=off") + } + fullargs = append(fullargs, cfg.BuildFlags...) fullargs = append(fullargs, "--") fullargs = append(fullargs, words...) diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/packages.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/packages.go index 0f1505b808a6..632be722a2ba 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/packages.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/go/packages/packages.go @@ -308,6 +308,9 @@ type Package struct { TypeErrors []types.Error // GoFiles lists the absolute file paths of the package's Go source files. + // It may include files that should not be compiled, for example because + // they contain non-matching build tags, are documentary pseudo-files such as + // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing. GoFiles []string // CompiledGoFiles lists the absolute file paths of the package's source diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/cluster-autoscaler/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go deleted file mode 100644 index be8f5a867e65..000000000000 --- a/cluster-autoscaler/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ /dev/null @@ -1,762 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package objectpath defines a naming scheme for types.Objects -// (that is, named entities in Go programs) relative to their enclosing -// package. -// -// Type-checker objects are canonical, so they are usually identified by -// their address in memory (a pointer), but a pointer has meaning only -// within one address space. By contrast, objectpath names allow the -// identity of an object to be sent from one program to another, -// establishing a correspondence between types.Object variables that are -// distinct but logically equivalent. -// -// A single object may have multiple paths. In this example, -// -// type A struct{ X int } -// type B A -// -// the field X has two paths due to its membership of both A and B. -// The For(obj) function always returns one of these paths, arbitrarily -// but consistently. -package objectpath - -import ( - "fmt" - "go/types" - "sort" - "strconv" - "strings" - - "golang.org/x/tools/internal/typeparams" - - _ "unsafe" // for go:linkname -) - -// A Path is an opaque name that identifies a types.Object -// relative to its package. Conceptually, the name consists of a -// sequence of destructuring operations applied to the package scope -// to obtain the original object. -// The name does not include the package itself. -type Path string - -// Encoding -// -// An object path is a textual and (with training) human-readable encoding -// of a sequence of destructuring operators, starting from a types.Package. -// The sequences represent a path through the package/object/type graph. -// We classify these operators by their type: -// -// PO package->object Package.Scope.Lookup -// OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] -// TO type->object Type.{At,Field,Method,Obj} [AFMO] -// -// All valid paths start with a package and end at an object -// and thus may be defined by the regular language: -// -// objectpath = PO (OT TT* TO)* -// -// The concrete encoding follows directly: -// - The only PO operator is Package.Scope.Lookup, which requires an identifier. -// - The only OT operator is Object.Type, -// which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRUTC]; -// one of these (TypeParam) requires an integer operand, -// which is encoded as a string of decimal digits. -// - The TO operators are encoded as [AFMO]; -// three of these (At,Field,Method) require an integer operand, -// which is encoded as a string of decimal digits. -// These indices are stable across different representations -// of the same package, even source and export data. -// The indices used are implementation specific and may not correspond to -// the argument to the go/types function. -// -// In the example below, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// field X has the path "T.UM0.RA1.F0", -// representing the following sequence of operations: -// -// p.Lookup("T") T -// .Type().Underlying().Method(0). f -// .Type().Results().At(1) b -// .Type().Field(0) X -// -// The encoding is not maximally compact---every R or P is -// followed by an A, for example---but this simplifies the -// encoder and decoder. -const ( - // object->type operators - opType = '.' // .Type() (Object) - - // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) - opConstraint = 'C' // .Constraint() (TypeParam) - - // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named, TypeParam) -) - -// For returns the path to an object relative to its package, -// or an error if the object is not accessible from the package's Scope. -// -// The For function guarantees to return a path only for the following objects: -// - package-level types -// - exported package-level non-types -// - methods -// - parameter and result variables -// - struct fields -// These objects are sufficient to define the API of their package. -// The objects described by a package's export data are drawn from this set. -// -// For does not return a path for predeclared names, imported package -// names, local names, and unexported package-level names (except -// types). -// -// Example: given this definition, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// For(X) would return a path that denotes the following sequence of operations: -// -// p.Scope().Lookup("T") (TypeName T) -// .Type().Underlying().Method(0). (method Func f) -// .Type().Results().At(1) (field Var b) -// .Type().Field(0) (field Var X) -// -// where p is the package (*types.Package) to which X belongs. -func For(obj types.Object) (Path, error) { - return newEncoderFor()(obj) -} - -// An encoder amortizes the cost of encoding the paths of multiple objects. -// Nonexported pending approval of proposal 58668. -type encoder struct { - scopeNamesMemo map[*types.Scope][]string // memoization of Scope.Names() - namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods() -} - -// Exposed to gopls via golang.org/x/tools/internal/typesinternal -// pending approval of proposal 58668. -// -//go:linkname newEncoderFor -func newEncoderFor() func(types.Object) (Path, error) { return new(encoder).For } - -func (enc *encoder) For(obj types.Object) (Path, error) { - pkg := obj.Pkg() - - // This table lists the cases of interest. - // - // Object Action - // ------ ------ - // nil reject - // builtin reject - // pkgname reject - // label reject - // var - // package-level accept - // func param/result accept - // local reject - // struct field accept - // const - // package-level accept - // local reject - // func - // package-level accept - // init functions reject - // concrete method accept - // interface method accept - // type - // package-level accept - // local reject - // - // The only accessible package-level objects are members of pkg itself. - // - // The cases are handled in four steps: - // - // 1. reject nil and builtin - // 2. accept package-level objects - // 3. reject obviously invalid objects - // 4. search the API for the path to the param/result/field/method. - - // 1. reference to nil or builtin? - if pkg == nil { - return "", fmt.Errorf("predeclared %s has no path", obj) - } - scope := pkg.Scope() - - // 2. package-level object? - if scope.Lookup(obj.Name()) == obj { - // Only exported objects (and non-exported types) have a path. - // Non-exported types may be referenced by other objects. - if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { - return "", fmt.Errorf("no path for non-exported %v", obj) - } - return Path(obj.Name()), nil - } - - // 3. Not a package-level object. - // Reject obviously non-viable cases. - switch obj := obj.(type) { - case *types.TypeName: - if _, ok := obj.Type().(*typeparams.TypeParam); !ok { - // With the exception of type parameters, only package-level type names - // have a path. - return "", fmt.Errorf("no path for %v", obj) - } - case *types.Const, // Only package-level constants have a path. - *types.Label, // Labels are function-local. - *types.PkgName: // PkgNames are file-local. - return "", fmt.Errorf("no path for %v", obj) - - case *types.Var: - // Could be: - // - a field (obj.IsField()) - // - a func parameter or result - // - a local var. - // Sadly there is no way to distinguish - // a param/result from a local - // so we must proceed to the find. - - case *types.Func: - // A func, if not package-level, must be a method. - if recv := obj.Type().(*types.Signature).Recv(); recv == nil { - return "", fmt.Errorf("func is not a method: %v", obj) - } - - if path, ok := enc.concreteMethod(obj); ok { - // Fast path for concrete methods that avoids looping over scope. - return path, nil - } - - default: - panic(obj) - } - - // 4. Search the API for the path to the var (field/param/result) or method. - - // First inspect package-level named types. - // In the presence of path aliases, these give - // the best paths because non-types may - // refer to types, but not the reverse. - empty := make([]byte, 0, 48) // initial space - names := enc.scopeNames(scope) - for _, name := range names { - o := scope.Lookup(name) - tname, ok := o.(*types.TypeName) - if !ok { - continue // handle non-types in second pass - } - - path := append(empty, name...) - path = append(path, opType) - - T := o.Type() - - if tname.IsAlias() { - // type alias - if r := find(obj, T, path, nil); r != nil { - return Path(r), nil - } - } else { - if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { - // generic named type - return Path(r), nil - } - } - // defined (named) type - if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { - return Path(r), nil - } - } - } - - // Then inspect everything else: - // non-types, and declared methods of defined types. - for _, name := range names { - o := scope.Lookup(name) - path := append(empty, name...) - if _, ok := o.(*types.TypeName); !ok { - if o.Exported() { - // exported non-type (const, var, func) - if r := find(obj, o.Type(), append(path, opType), nil); r != nil { - return Path(r), nil - } - } - continue - } - - // Inspect declared methods of defined types. - if T, ok := o.Type().(*types.Named); ok { - path = append(path, opType) - // Note that method index here is always with respect - // to canonical ordering of methods, regardless of how - // they appear in the underlying type. - for i, m := range enc.namedMethods(T) { - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return Path(path2), nil // found declared method - } - if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { - return Path(r), nil - } - } - } - } - - return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) -} - -func appendOpArg(path []byte, op byte, arg int) []byte { - path = append(path, op) - path = strconv.AppendInt(path, int64(arg), 10) - return path -} - -// concreteMethod returns the path for meth, which must have a non-nil receiver. -// The second return value indicates success and may be false if the method is -// an interface method or if it is an instantiated method. -// -// This function is just an optimization that avoids the general scope walking -// approach. You are expected to fall back to the general approach if this -// function fails. -func (enc *encoder) concreteMethod(meth *types.Func) (Path, bool) { - // Concrete methods can only be declared on package-scoped named types. For - // that reason we can skip the expensive walk over the package scope: the - // path will always be package -> named type -> method. We can trivially get - // the type name from the receiver, and only have to look over the type's - // methods to find the method index. - // - // Methods on generic types require special consideration, however. Consider - // the following package: - // - // L1: type S[T any] struct{} - // L2: func (recv S[A]) Foo() { recv.Bar() } - // L3: func (recv S[B]) Bar() { } - // L4: type Alias = S[int] - // L5: func _[T any]() { var s S[int]; s.Foo() } - // - // The receivers of methods on generic types are instantiations. L2 and L3 - // instantiate S with the type-parameters A and B, which are scoped to the - // respective methods. L4 and L5 each instantiate S with int. Each of these - // instantiations has its own method set, full of methods (and thus objects) - // with receivers whose types are the respective instantiations. In other - // words, we have - // - // S[A].Foo, S[A].Bar - // S[B].Foo, S[B].Bar - // S[int].Foo, S[int].Bar - // - // We may thus be trying to produce object paths for any of these objects. - // - // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo - // and S.Bar, which are the paths that this function naturally produces. - // - // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that - // don't correspond to the origin methods. For S[int], this is significant. - // The most precise object path for S[int].Foo, for example, is Alias.Foo, - // not S.Foo. Our function, however, would produce S.Foo, which would - // resolve to a different object. - // - // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are - // still the correct paths, since only the origin methods have meaningful - // paths. But this is likely only true for trivial cases and has edge cases. - // Since this function is only an optimization, we err on the side of giving - // up, deferring to the slower but definitely correct algorithm. Most users - // of objectpath will only be giving us origin methods, anyway, as referring - // to instantiated methods is usually not useful. - - if typeparams.OriginMethod(meth) != meth { - return "", false - } - - recvT := meth.Type().(*types.Signature).Recv().Type() - if ptr, ok := recvT.(*types.Pointer); ok { - recvT = ptr.Elem() - } - - named, ok := recvT.(*types.Named) - if !ok { - return "", false - } - - if types.IsInterface(named) { - // Named interfaces don't have to be package-scoped - // - // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface - // methods, too, I think. - return "", false - } - - // Preallocate space for the name, opType, opMethod, and some digits. - name := named.Obj().Name() - path := make([]byte, 0, len(name)+8) - path = append(path, name...) - path = append(path, opType) - for i, m := range enc.namedMethods(named) { - if m == meth { - path = appendOpArg(path, opMethod, i) - return Path(path), true - } - } - - panic(fmt.Sprintf("couldn't find method %s on type %s", meth, named)) -} - -// find finds obj within type T, returning the path to it, or nil if not found. -// -// The seen map is used to short circuit cycles through type parameters. If -// nil, it will be allocated as necessary. -func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { - switch T := T.(type) { - case *types.Basic, *types.Named: - // Named types belonging to pkg were handled already, - // so T must belong to another package. No path. - return nil - case *types.Pointer: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Slice: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Array: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Chan: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Map: - if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { - return r - } - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Signature: - if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { - return r - } - if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { - return r - } - return find(obj, T.Results(), append(path, opResults), seen) - case *types.Struct: - for i := 0; i < T.NumFields(); i++ { - fld := T.Field(i) - path2 := appendOpArg(path, opField, i) - if fld == obj { - return path2 // found field var - } - if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Tuple: - for i := 0; i < T.Len(); i++ { - v := T.At(i) - path2 := appendOpArg(path, opAt, i) - if v == obj { - return path2 // found param/result var - } - if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Interface: - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return path2 // found interface method - } - if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *typeparams.TypeParam: - name := T.Obj() - if name == obj { - return append(path, opObj) - } - if seen[name] { - return nil - } - if seen == nil { - seen = make(map[*types.TypeName]bool) - } - seen[name] = true - if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { - return r - } - return nil - } - panic(T) -} - -func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { - for i := 0; i < list.Len(); i++ { - tparam := list.At(i) - path2 := appendOpArg(path, opTypeParam, i) - if r := find(obj, tparam, path2, seen); r != nil { - return r - } - } - return nil -} - -// Object returns the object denoted by path p within the package pkg. -func Object(pkg *types.Package, p Path) (types.Object, error) { - if p == "" { - return nil, fmt.Errorf("empty path") - } - - pathstr := string(p) - var pkgobj, suffix string - if dot := strings.IndexByte(pathstr, opType); dot < 0 { - pkgobj = pathstr - } else { - pkgobj = pathstr[:dot] - suffix = pathstr[dot:] // suffix starts with "." - } - - obj := pkg.Scope().Lookup(pkgobj) - if obj == nil { - return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) - } - - // abstraction of *types.{Pointer,Slice,Array,Chan,Map} - type hasElem interface { - Elem() types.Type - } - // abstraction of *types.{Named,Signature} - type hasTypeParams interface { - TypeParams() *typeparams.TypeParamList - } - // abstraction of *types.{Named,TypeParam} - type hasObj interface { - Obj() *types.TypeName - } - - // The loop state is the pair (t, obj), - // exactly one of which is non-nil, initially obj. - // All suffixes start with '.' (the only object->type operation), - // followed by optional type->type operations, - // then a type->object operation. - // The cycle then repeats. - var t types.Type - for suffix != "" { - code := suffix[0] - suffix = suffix[1:] - - // Codes [AFM] have an integer operand. - var index int - switch code { - case opAt, opField, opMethod, opTypeParam: - rest := strings.TrimLeft(suffix, "0123456789") - numerals := suffix[:len(suffix)-len(rest)] - suffix = rest - i, err := strconv.Atoi(numerals) - if err != nil { - return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) - } - index = int(i) - case opObj: - // no operand - default: - // The suffix must end with a type->object operation. - if suffix == "" { - return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) - } - } - - if code == opType { - if t != nil { - return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) - } - t = obj.Type() - obj = nil - continue - } - - if t == nil { - return nil, fmt.Errorf("invalid path: code %q in object context", code) - } - - // Inv: t != nil, obj == nil - - switch code { - case opElem: - hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) - } - t = hasElem.Elem() - - case opKey: - mapType, ok := t.(*types.Map) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) - } - t = mapType.Key() - - case opParams: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Params() - - case opResults: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Results() - - case opUnderlying: - named, ok := t.(*types.Named) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) - } - t = named.Underlying() - - case opTypeParam: - hasTypeParams, ok := t.(hasTypeParams) // Named, Signature - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) - } - tparams := hasTypeParams.TypeParams() - if n := tparams.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - t = tparams.At(index) - - case opConstraint: - tparam, ok := t.(*typeparams.TypeParam) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) - } - t = tparam.Constraint() - - case opAt: - tuple, ok := t.(*types.Tuple) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) - } - if n := tuple.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - obj = tuple.At(index) - t = nil - - case opField: - structType, ok := t.(*types.Struct) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) - } - if n := structType.NumFields(); index >= n { - return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) - } - obj = structType.Field(index) - t = nil - - case opMethod: - switch t := t.(type) { - case *types.Interface: - if index >= t.NumMethods() { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) - } - obj = t.Method(index) // Id-ordered - - case *types.Named: - methods := namedMethods(t) // (unmemoized) - if index >= len(methods) { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, len(methods)) - } - obj = methods[index] // Id-ordered - - default: - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) - } - t = nil - - case opObj: - hasObj, ok := t.(hasObj) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) - } - obj = hasObj.Obj() - t = nil - - default: - return nil, fmt.Errorf("invalid path: unknown code %q", code) - } - } - - if obj.Pkg() != pkg { - return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) - } - - return obj, nil // success -} - -// namedMethods returns the methods of a Named type in ascending Id order. -func namedMethods(named *types.Named) []*types.Func { - methods := make([]*types.Func, named.NumMethods()) - for i := range methods { - methods[i] = named.Method(i) - } - sort.Slice(methods, func(i, j int) bool { - return methods[i].Id() < methods[j].Id() - }) - return methods -} - -// scopeNames is a memoization of scope.Names. Callers must not modify the result. -func (enc *encoder) scopeNames(scope *types.Scope) []string { - m := enc.scopeNamesMemo - if m == nil { - m = make(map[*types.Scope][]string) - enc.scopeNamesMemo = m - } - names, ok := m[scope] - if !ok { - names = scope.Names() // allocates and sorts - m[scope] = names - } - return names -} - -// namedMethods is a memoization of the namedMethods function. Callers must not modify the result. -func (enc *encoder) namedMethods(named *types.Named) []*types.Func { - m := enc.namedMethodsMemo - if m == nil { - m = make(map[*types.Named][]*types.Func) - enc.namedMethodsMemo = m - } - methods, ok := m[named] - if !ok { - methods = namedMethods(named) // allocates and sorts - m[named] = methods - } - return methods - -} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/event/tag/tag.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/event/tag/tag.go new file mode 100644 index 000000000000..ff2f2ecd38d5 --- /dev/null +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/event/tag/tag.go @@ -0,0 +1,59 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag provides the labels used for telemetry throughout gopls. +package tag + +import ( + "golang.org/x/tools/internal/event/keys" +) + +var ( + // create the label keys we use + Method = keys.NewString("method", "") + StatusCode = keys.NewString("status.code", "") + StatusMessage = keys.NewString("status.message", "") + RPCID = keys.NewString("id", "") + RPCDirection = keys.NewString("direction", "") + File = keys.NewString("file", "") + Directory = keys.New("directory", "") + URI = keys.New("URI", "") + Package = keys.NewString("package", "") // Package ID + PackagePath = keys.NewString("package_path", "") + Query = keys.New("query", "") + Snapshot = keys.NewUInt64("snapshot", "") + Operation = keys.NewString("operation", "") + + Position = keys.New("position", "") + Category = keys.NewString("category", "") + PackageCount = keys.NewInt("packages", "") + Files = keys.New("files", "") + Port = keys.NewInt("port", "") + Type = keys.New("type", "") + HoverKind = keys.NewString("hoverkind", "") + + NewServer = keys.NewString("new_server", "A new server was added") + EndServer = keys.NewString("end_server", "A server was shut down") + + ServerID = keys.NewString("server", "The server ID an event is related to") + Logfile = keys.NewString("logfile", "") + DebugAddress = keys.NewString("debug_address", "") + GoplsPath = keys.NewString("gopls_path", "") + ClientID = keys.NewString("client_id", "") + + Level = keys.NewInt("level", "The logging level") +) + +var ( + // create the stats we measure + Started = keys.NewInt64("started", "Count of started RPCs.") + ReceivedBytes = keys.NewInt64("received_bytes", "Bytes received.") //, unit.Bytes) + SentBytes = keys.NewInt64("sent_bytes", "Bytes sent.") //, unit.Bytes) + Latency = keys.NewFloat64("latency_ms", "Elapsed time in milliseconds") //, unit.Milliseconds) +) + +const ( + Inbound = "in" + Outbound = "out" +) diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bexport.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bexport.go deleted file mode 100644 index 30582ed6d3d7..000000000000 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bexport.go +++ /dev/null @@ -1,852 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go; -// see that file for specification of the format. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "math" - "math/big" - "sort" - "strings" -) - -// If debugFormat is set, each integer and string value is preceded by a marker -// and position information in the encoding. This mechanism permits an importer -// to recognize immediately when it is out of sync. The importer recognizes this -// mode automatically (i.e., it can import export data produced with debugging -// support even if debugFormat is not set at the time of import). This mode will -// lead to massively larger export data (by a factor of 2 to 3) and should only -// be enabled during development and debugging. -// -// NOTE: This flag is the first flag to enable if importing dies because of -// (suspected) format errors, and whenever a change is made to the format. -const debugFormat = false // default: false - -// Current export format version. Increase with each format change. -// -// Note: The latest binary (non-indexed) export format is at version 6. -// This exporter is still at level 4, but it doesn't matter since -// the binary importer can handle older versions just fine. -// -// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE -// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMENTED HERE -// 4: type name objects support type aliases, uses aliasTag -// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used) -// 2: removed unused bool in ODCL export (compiler only) -// 1: header format change (more regular), export package for _ struct fields -// 0: Go1.7 encoding -const exportVersion = 4 - -// trackAllTypes enables cycle tracking for all types, not just named -// types. The existing compiler invariants assume that unnamed types -// that are not completely set up are not used, or else there are spurious -// errors. -// If disabled, only named types are tracked, possibly leading to slightly -// less efficient encoding in rare cases. It also prevents the export of -// some corner-case type declarations (but those are not handled correctly -// with with the textual export format either). -// TODO(gri) enable and remove once issues caused by it are fixed -const trackAllTypes = false - -type exporter struct { - fset *token.FileSet - out bytes.Buffer - - // object -> index maps, indexed in order of serialization - strIndex map[string]int - pkgIndex map[*types.Package]int - typIndex map[types.Type]int - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - - // debugging support - written int // bytes written - indent int // for trace -} - -// internalError represents an error generated inside this package. -type internalError string - -func (e internalError) Error() string { return "gcimporter: " + string(e) } - -func internalErrorf(format string, args ...interface{}) error { - return internalError(fmt.Sprintf(format, args...)) -} - -// BExportData returns binary export data for pkg. -// If no file set is provided, position info will be missing. -func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { - if !debug { - defer func() { - if e := recover(); e != nil { - if ierr, ok := e.(internalError); ok { - err = ierr - return - } - // Not an internal error; panic again. - panic(e) - } - }() - } - - p := exporter{ - fset: fset, - strIndex: map[string]int{"": 0}, // empty string is mapped to 0 - pkgIndex: make(map[*types.Package]int), - typIndex: make(map[types.Type]int), - posInfoFormat: true, // TODO(gri) might become a flag, eventually - } - - // write version info - // The version string must start with "version %d" where %d is the version - // number. Additional debugging information may follow after a blank; that - // text is ignored by the importer. - p.rawStringln(fmt.Sprintf("version %d", exportVersion)) - var debug string - if debugFormat { - debug = "debug" - } - p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly - p.bool(trackAllTypes) - p.bool(p.posInfoFormat) - - // --- generic export data --- - - // populate type map with predeclared "known" types - for index, typ := range predeclared() { - p.typIndex[typ] = index - } - if len(p.typIndex) != len(predeclared()) { - return nil, internalError("duplicate entries in type map?") - } - - // write package data - p.pkg(pkg, true) - if trace { - p.tracef("\n") - } - - // write objects - objcount := 0 - scope := pkg.Scope() - for _, name := range scope.Names() { - if !token.IsExported(name) { - continue - } - if trace { - p.tracef("\n") - } - p.obj(scope.Lookup(name)) - objcount++ - } - - // indicate end of list - if trace { - p.tracef("\n") - } - p.tag(endTag) - - // for self-verification only (redundant) - p.int(objcount) - - if trace { - p.tracef("\n") - } - - // --- end of export data --- - - return p.out.Bytes(), nil -} - -func (p *exporter) pkg(pkg *types.Package, emptypath bool) { - if pkg == nil { - panic(internalError("unexpected nil pkg")) - } - - // if we saw the package before, write its index (>= 0) - if i, ok := p.pkgIndex[pkg]; ok { - p.index('P', i) - return - } - - // otherwise, remember the package, write the package tag (< 0) and package data - if trace { - p.tracef("P%d = { ", len(p.pkgIndex)) - defer p.tracef("} ") - } - p.pkgIndex[pkg] = len(p.pkgIndex) - - p.tag(packageTag) - p.string(pkg.Name()) - if emptypath { - p.string("") - } else { - p.string(pkg.Path()) - } -} - -func (p *exporter) obj(obj types.Object) { - switch obj := obj.(type) { - case *types.Const: - p.tag(constTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - p.value(obj.Val()) - - case *types.TypeName: - if obj.IsAlias() { - p.tag(aliasTag) - p.pos(obj) - p.qualifiedName(obj) - } else { - p.tag(typeTag) - } - p.typ(obj.Type()) - - case *types.Var: - p.tag(varTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - - case *types.Func: - p.tag(funcTag) - p.pos(obj) - p.qualifiedName(obj) - sig := obj.Type().(*types.Signature) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - - default: - panic(internalErrorf("unexpected object %v (%T)", obj, obj)) - } -} - -func (p *exporter) pos(obj types.Object) { - if !p.posInfoFormat { - return - } - - file, line := p.fileLine(obj) - if file == p.prevFile { - // common case: write line delta - // delta == 0 means different file or no line change - delta := line - p.prevLine - p.int(delta) - if delta == 0 { - p.int(-1) // -1 means no file change - } - } else { - // different file - p.int(0) - // Encode filename as length of common prefix with previous - // filename, followed by (possibly empty) suffix. Filenames - // frequently share path prefixes, so this can save a lot - // of space and make export data size less dependent on file - // path length. The suffix is unlikely to be empty because - // file names tend to end in ".go". - n := commonPrefixLen(p.prevFile, file) - p.int(n) // n >= 0 - p.string(file[n:]) // write suffix only - p.prevFile = file - p.int(line) - } - p.prevLine = line -} - -func (p *exporter) fileLine(obj types.Object) (file string, line int) { - if p.fset != nil { - pos := p.fset.Position(obj.Pos()) - file = pos.Filename - line = pos.Line - } - return -} - -func commonPrefixLen(a, b string) int { - if len(a) > len(b) { - a, b = b, a - } - // len(a) <= len(b) - i := 0 - for i < len(a) && a[i] == b[i] { - i++ - } - return i -} - -func (p *exporter) qualifiedName(obj types.Object) { - p.string(obj.Name()) - p.pkg(obj.Pkg(), false) -} - -func (p *exporter) typ(t types.Type) { - if t == nil { - panic(internalError("nil type")) - } - - // Possible optimization: Anonymous pointer types *T where - // T is a named type are common. We could canonicalize all - // such types *T to a single type PT = *T. This would lead - // to at most one *T entry in typIndex, and all future *T's - // would be encoded as the respective index directly. Would - // save 1 byte (pointerTag) per *T and reduce the typIndex - // size (at the cost of a canonicalization map). We can do - // this later, without encoding format change. - - // if we saw the type before, write its index (>= 0) - if i, ok := p.typIndex[t]; ok { - p.index('T', i) - return - } - - // otherwise, remember the type, write the type tag (< 0) and type data - if trackAllTypes { - if trace { - p.tracef("T%d = {>\n", len(p.typIndex)) - defer p.tracef("<\n} ") - } - p.typIndex[t] = len(p.typIndex) - } - - switch t := t.(type) { - case *types.Named: - if !trackAllTypes { - // if we don't track all types, track named types now - p.typIndex[t] = len(p.typIndex) - } - - p.tag(namedTag) - p.pos(t.Obj()) - p.qualifiedName(t.Obj()) - p.typ(t.Underlying()) - if !types.IsInterface(t) { - p.assocMethods(t) - } - - case *types.Array: - p.tag(arrayTag) - p.int64(t.Len()) - p.typ(t.Elem()) - - case *types.Slice: - p.tag(sliceTag) - p.typ(t.Elem()) - - case *dddSlice: - p.tag(dddTag) - p.typ(t.elem) - - case *types.Struct: - p.tag(structTag) - p.fieldList(t) - - case *types.Pointer: - p.tag(pointerTag) - p.typ(t.Elem()) - - case *types.Signature: - p.tag(signatureTag) - p.paramList(t.Params(), t.Variadic()) - p.paramList(t.Results(), false) - - case *types.Interface: - p.tag(interfaceTag) - p.iface(t) - - case *types.Map: - p.tag(mapTag) - p.typ(t.Key()) - p.typ(t.Elem()) - - case *types.Chan: - p.tag(chanTag) - p.int(int(3 - t.Dir())) // hack - p.typ(t.Elem()) - - default: - panic(internalErrorf("unexpected type %T: %s", t, t)) - } -} - -func (p *exporter) assocMethods(named *types.Named) { - // Sort methods (for determinism). - var methods []*types.Func - for i := 0; i < named.NumMethods(); i++ { - methods = append(methods, named.Method(i)) - } - sort.Sort(methodsByName(methods)) - - p.int(len(methods)) - - if trace && methods != nil { - p.tracef("associated methods {>\n") - } - - for i, m := range methods { - if trace && i > 0 { - p.tracef("\n") - } - - p.pos(m) - name := m.Name() - p.string(name) - if !exported(name) { - p.pkg(m.Pkg(), false) - } - - sig := m.Type().(*types.Signature) - p.paramList(types.NewTuple(sig.Recv()), false) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - p.int(0) // dummy value for go:nointerface pragma - ignored by importer - } - - if trace && methods != nil { - p.tracef("<\n} ") - } -} - -type methodsByName []*types.Func - -func (x methodsByName) Len() int { return len(x) } -func (x methodsByName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() } - -func (p *exporter) fieldList(t *types.Struct) { - if trace && t.NumFields() > 0 { - p.tracef("fields {>\n") - defer p.tracef("<\n} ") - } - - p.int(t.NumFields()) - for i := 0; i < t.NumFields(); i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.field(t.Field(i)) - p.string(t.Tag(i)) - } -} - -func (p *exporter) field(f *types.Var) { - if !f.IsField() { - panic(internalError("field expected")) - } - - p.pos(f) - p.fieldName(f) - p.typ(f.Type()) -} - -func (p *exporter) iface(t *types.Interface) { - // TODO(gri): enable importer to load embedded interfaces, - // then emit Embeddeds and ExplicitMethods separately here. - p.int(0) - - n := t.NumMethods() - if trace && n > 0 { - p.tracef("methods {>\n") - defer p.tracef("<\n} ") - } - p.int(n) - for i := 0; i < n; i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.method(t.Method(i)) - } -} - -func (p *exporter) method(m *types.Func) { - sig := m.Type().(*types.Signature) - if sig.Recv() == nil { - panic(internalError("method expected")) - } - - p.pos(m) - p.string(m.Name()) - if m.Name() != "_" && !token.IsExported(m.Name()) { - p.pkg(m.Pkg(), false) - } - - // interface method; no need to encode receiver. - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) -} - -func (p *exporter) fieldName(f *types.Var) { - name := f.Name() - - if f.Anonymous() { - // anonymous field - we distinguish between 3 cases: - // 1) field name matches base type name and is exported - // 2) field name matches base type name and is not exported - // 3) field name doesn't match base type name (alias name) - bname := basetypeName(f.Type()) - if name == bname { - if token.IsExported(name) { - name = "" // 1) we don't need to know the field name or package - } else { - name = "?" // 2) use unexported name "?" to force package export - } - } else { - // 3) indicate alias and export name as is - // (this requires an extra "@" but this is a rare case) - p.string("@") - } - } - - p.string(name) - if name != "" && !token.IsExported(name) { - p.pkg(f.Pkg(), false) - } -} - -func basetypeName(typ types.Type) string { - switch typ := deref(typ).(type) { - case *types.Basic: - return typ.Name() - case *types.Named: - return typ.Obj().Name() - default: - return "" // unnamed type - } -} - -func (p *exporter) paramList(params *types.Tuple, variadic bool) { - // use negative length to indicate unnamed parameters - // (look at the first parameter only since either all - // names are present or all are absent) - n := params.Len() - if n > 0 && params.At(0).Name() == "" { - n = -n - } - p.int(n) - for i := 0; i < params.Len(); i++ { - q := params.At(i) - t := q.Type() - if variadic && i == params.Len()-1 { - t = &dddSlice{t.(*types.Slice).Elem()} - } - p.typ(t) - if n > 0 { - name := q.Name() - p.string(name) - if name != "_" { - p.pkg(q.Pkg(), false) - } - } - p.string("") // no compiler-specific info - } -} - -func (p *exporter) value(x constant.Value) { - if trace { - p.tracef("= ") - } - - switch x.Kind() { - case constant.Bool: - tag := falseTag - if constant.BoolVal(x) { - tag = trueTag - } - p.tag(tag) - - case constant.Int: - if v, exact := constant.Int64Val(x); exact { - // common case: x fits into an int64 - use compact encoding - p.tag(int64Tag) - p.int64(v) - return - } - // uncommon case: large x - use float encoding - // (powers of 2 will be encoded efficiently with exponent) - p.tag(floatTag) - p.float(constant.ToFloat(x)) - - case constant.Float: - p.tag(floatTag) - p.float(x) - - case constant.Complex: - p.tag(complexTag) - p.float(constant.Real(x)) - p.float(constant.Imag(x)) - - case constant.String: - p.tag(stringTag) - p.string(constant.StringVal(x)) - - case constant.Unknown: - // package contains type errors - p.tag(unknownTag) - - default: - panic(internalErrorf("unexpected value %v (%T)", x, x)) - } -} - -func (p *exporter) float(x constant.Value) { - if x.Kind() != constant.Float { - panic(internalErrorf("unexpected constant %v, want float", x)) - } - // extract sign (there is no -0) - sign := constant.Sign(x) - if sign == 0 { - // x == 0 - p.int(0) - return - } - // x != 0 - - var f big.Float - if v, exact := constant.Float64Val(x); exact { - // float64 - f.SetFloat64(v) - } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { - // TODO(gri): add big.Rat accessor to constant.Value. - r := valueToRat(num) - f.SetRat(r.Quo(r, valueToRat(denom))) - } else { - // Value too large to represent as a fraction => inaccessible. - // TODO(gri): add big.Float accessor to constant.Value. - f.SetFloat64(math.MaxFloat64) // FIXME - } - - // extract exponent such that 0.5 <= m < 1.0 - var m big.Float - exp := f.MantExp(&m) - - // extract mantissa as *big.Int - // - set exponent large enough so mant satisfies mant.IsInt() - // - get *big.Int from mant - m.SetMantExp(&m, int(m.MinPrec())) - mant, acc := m.Int(nil) - if acc != big.Exact { - panic(internalError("internal error")) - } - - p.int(sign) - p.int(exp) - p.string(string(mant.Bytes())) -} - -func valueToRat(x constant.Value) *big.Rat { - // Convert little-endian to big-endian. - // I can't believe this is necessary. - bytes := constant.Bytes(x) - for i := 0; i < len(bytes)/2; i++ { - bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] - } - return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) -} - -func (p *exporter) bool(b bool) bool { - if trace { - p.tracef("[") - defer p.tracef("= %v] ", b) - } - - x := 0 - if b { - x = 1 - } - p.int(x) - return b -} - -// ---------------------------------------------------------------------------- -// Low-level encoders - -func (p *exporter) index(marker byte, index int) { - if index < 0 { - panic(internalError("invalid index < 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%c%d ", marker, index) - } - p.rawInt64(int64(index)) -} - -func (p *exporter) tag(tag int) { - if tag >= 0 { - panic(internalError("invalid tag >= 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%s ", tagString[-tag]) - } - p.rawInt64(int64(tag)) -} - -func (p *exporter) int(x int) { - p.int64(int64(x)) -} - -func (p *exporter) int64(x int64) { - if debugFormat { - p.marker('i') - } - if trace { - p.tracef("%d ", x) - } - p.rawInt64(x) -} - -func (p *exporter) string(s string) { - if debugFormat { - p.marker('s') - } - if trace { - p.tracef("%q ", s) - } - // if we saw the string before, write its index (>= 0) - // (the empty string is mapped to 0) - if i, ok := p.strIndex[s]; ok { - p.rawInt64(int64(i)) - return - } - // otherwise, remember string and write its negative length and bytes - p.strIndex[s] = len(p.strIndex) - p.rawInt64(-int64(len(s))) - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } -} - -// marker emits a marker byte and position information which makes -// it easy for a reader to detect if it is "out of sync". Used for -// debugFormat format only. -func (p *exporter) marker(m byte) { - p.rawByte(m) - // Enable this for help tracking down the location - // of an incorrect marker when running in debugFormat. - if false && trace { - p.tracef("#%d ", p.written) - } - p.rawInt64(int64(p.written)) -} - -// rawInt64 should only be used by low-level encoders. -func (p *exporter) rawInt64(x int64) { - var tmp [binary.MaxVarintLen64]byte - n := binary.PutVarint(tmp[:], x) - for i := 0; i < n; i++ { - p.rawByte(tmp[i]) - } -} - -// rawStringln should only be used to emit the initial version string. -func (p *exporter) rawStringln(s string) { - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } - p.rawByte('\n') -} - -// rawByte is the bottleneck interface to write to p.out. -// rawByte escapes b as follows (any encoding does that -// hides '$'): -// -// '$' => '|' 'S' -// '|' => '|' '|' -// -// Necessary so other tools can find the end of the -// export data by searching for "$$". -// rawByte should only be used by low-level encoders. -func (p *exporter) rawByte(b byte) { - switch b { - case '$': - // write '$' as '|' 'S' - b = 'S' - fallthrough - case '|': - // write '|' as '|' '|' - p.out.WriteByte('|') - p.written++ - } - p.out.WriteByte(b) - p.written++ -} - -// tracef is like fmt.Printf but it rewrites the format string -// to take care of indentation. -func (p *exporter) tracef(format string, args ...interface{}) { - if strings.ContainsAny(format, "<>\n") { - var buf bytes.Buffer - for i := 0; i < len(format); i++ { - // no need to deal with runes - ch := format[i] - switch ch { - case '>': - p.indent++ - continue - case '<': - p.indent-- - continue - } - buf.WriteByte(ch) - if ch == '\n' { - for j := p.indent; j > 0; j-- { - buf.WriteString(". ") - } - } - } - format = buf.String() - } - fmt.Printf(format, args...) -} - -// Debugging support. -// (tagString is only used when tracing is enabled) -var tagString = [...]string{ - // Packages - -packageTag: "package", - - // Types - -namedTag: "named type", - -arrayTag: "array", - -sliceTag: "slice", - -dddTag: "ddd", - -structTag: "struct", - -pointerTag: "pointer", - -signatureTag: "signature", - -interfaceTag: "interface", - -mapTag: "map", - -chanTag: "chan", - - // Values - -falseTag: "false", - -trueTag: "true", - -int64Tag: "int64", - -floatTag: "float", - -fractionTag: "fraction", - -complexTag: "complex", - -stringTag: "string", - -unknownTag: "unknown", - - // Type aliases - -aliasTag: "alias", -} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bimport.go index b85de0147001..d98b0db2a9a9 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -2,340 +2,24 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go. +// This file contains the remaining vestiges of +// $GOROOT/src/go/internal/gcimporter/bimport.go. package gcimporter import ( - "encoding/binary" "fmt" - "go/constant" "go/token" "go/types" - "sort" - "strconv" - "strings" "sync" - "unicode" - "unicode/utf8" ) -type importer struct { - imports map[string]*types.Package - data []byte - importpath string - buf []byte // for reading strings - version int // export format version - - // object lists - strList []string // in order of appearance - pathList []string // in order of appearance - pkgList []*types.Package // in order of appearance - typList []types.Type // in order of appearance - interfaceList []*types.Interface // for delayed completion only - trackAllTypes bool - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - fake fakeFileSet - - // debugging support - debugFormat bool - read int // bytes read -} - -// BImportData imports a package from the serialized package data -// and returns the number of bytes consumed and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - // catch panics and return them as errors - const currentVersion = 6 - version := -1 // unknown version - defer func() { - if e := recover(); e != nil { - // Return a (possibly nil or incomplete) package unchanged (see #16088). - if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) - } - } - }() - - p := importer{ - imports: imports, - data: data, - importpath: path, - version: version, - strList: []string{""}, // empty string is mapped to 0 - pathList: []string{""}, // empty string is mapped to 0 - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*fileInfo), - }, - } - defer p.fake.setLines() // set lines for files in fset - - // read version info - var versionstr string - if b := p.rawByte(); b == 'c' || b == 'd' { - // Go1.7 encoding; first byte encodes low-level - // encoding format (compact vs debug). - // For backward-compatibility only (avoid problems with - // old installed packages). Newly compiled packages use - // the extensible format string. - // TODO(gri) Remove this support eventually; after Go1.8. - if b == 'd' { - p.debugFormat = true - } - p.trackAllTypes = p.rawByte() == 'a' - p.posInfoFormat = p.int() != 0 - versionstr = p.string() - if versionstr == "v1" { - version = 0 - } - } else { - // Go1.8 extensible encoding - // read version string and extract version number (ignore anything after the version number) - versionstr = p.rawStringln(b) - if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" { - if v, err := strconv.Atoi(s[1]); err == nil && v > 0 { - version = v - } - } - } - p.version = version - - // read version specific flags - extend as necessary - switch p.version { - // case currentVersion: - // ... - // fallthrough - case currentVersion, 5, 4, 3, 2, 1: - p.debugFormat = p.rawStringln(p.rawByte()) == "debug" - p.trackAllTypes = p.int() != 0 - p.posInfoFormat = p.int() != 0 - case 0: - // Go1.7 encoding format - nothing to do here - default: - errorf("unknown bexport format version %d (%q)", p.version, versionstr) - } - - // --- generic export data --- - - // populate typList with predeclared "known" types - p.typList = append(p.typList, predeclared()...) - - // read package data - pkg = p.pkg() - - // read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go) - objcount := 0 - for { - tag := p.tagOrIndex() - if tag == endTag { - break - } - p.obj(tag) - objcount++ - } - - // self-verification - if count := p.int(); count != objcount { - errorf("got %d objects; want %d", objcount, count) - } - - // ignore compiler-specific import data - - // complete interfaces - // TODO(gri) re-investigate if we still need to do this in a delayed fashion - for _, typ := range p.interfaceList { - typ.Complete() - } - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), p.pkgList[1:]...) - sort.Sort(byPath(list)) - pkg.SetImports(list) - - // package was imported completely and without errors - pkg.MarkComplete() - - return p.read, pkg, nil -} - func errorf(format string, args ...interface{}) { panic(fmt.Sprintf(format, args...)) } -func (p *importer) pkg() *types.Package { - // if the package was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.pkgList[i] - } - - // otherwise, i is the package tag (< 0) - if i != packageTag { - errorf("unexpected package tag %d version %d", i, p.version) - } - - // read package data - name := p.string() - var path string - if p.version >= 5 { - path = p.path() - } else { - path = p.string() - } - if p.version >= 6 { - p.int() // package height; unused by go/types - } - - // we should never see an empty package name - if name == "" { - errorf("empty package name in import") - } - - // an empty path denotes the package we are currently importing; - // it must be the first package we see - if (path == "") != (len(p.pkgList) == 0) { - errorf("package path %q for pkg index %d", path, len(p.pkgList)) - } - - // if the package was imported before, use that one; otherwise create a new one - if path == "" { - path = p.importpath - } - pkg := p.imports[path] - if pkg == nil { - pkg = types.NewPackage(path, name) - p.imports[path] = pkg - } else if pkg.Name() != name { - errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path) - } - p.pkgList = append(p.pkgList, pkg) - - return pkg -} - -// objTag returns the tag value for each object kind. -func objTag(obj types.Object) int { - switch obj.(type) { - case *types.Const: - return constTag - case *types.TypeName: - return typeTag - case *types.Var: - return varTag - case *types.Func: - return funcTag - default: - errorf("unexpected object: %v (%T)", obj, obj) // panics - panic("unreachable") - } -} - -func sameObj(a, b types.Object) bool { - // Because unnamed types are not canonicalized, we cannot simply compare types for - // (pointer) identity. - // Ideally we'd check equality of constant values as well, but this is good enough. - return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type()) -} - -func (p *importer) declare(obj types.Object) { - pkg := obj.Pkg() - if alt := pkg.Scope().Insert(obj); alt != nil { - // This can only trigger if we import a (non-type) object a second time. - // Excluding type aliases, this cannot happen because 1) we only import a package - // once; and b) we ignore compiler-specific export data which may contain - // functions whose inlined function bodies refer to other functions that - // were already imported. - // However, type aliases require reexporting the original type, so we need - // to allow it (see also the comment in cmd/compile/internal/gc/bimport.go, - // method importer.obj, switch case importing functions). - // TODO(gri) review/update this comment once the gc compiler handles type aliases. - if !sameObj(obj, alt) { - errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt) - } - } -} - -func (p *importer) obj(tag int) { - switch tag { - case constTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - val := p.value() - p.declare(types.NewConst(pos, pkg, name, typ, val)) - - case aliasTag: - // TODO(gri) verify type alias hookup is correct - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewTypeName(pos, pkg, name, typ)) - - case typeTag: - p.typ(nil, nil) - - case varTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewVar(pos, pkg, name, typ)) - - case funcTag: - pos := p.pos() - pkg, name := p.qualifiedName() - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(nil, params, result, isddd) - p.declare(types.NewFunc(pos, pkg, name, sig)) - - default: - errorf("unexpected object tag %d", tag) - } -} - const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go -func (p *importer) pos() token.Pos { - if !p.posInfoFormat { - return token.NoPos - } - - file := p.prevFile - line := p.prevLine - delta := p.int() - line += delta - if p.version >= 5 { - if delta == deltaNewFile { - if n := p.int(); n >= 0 { - // file changed - file = p.path() - line = n - } - } - } else { - if delta == 0 { - if n := p.int(); n >= 0 { - // file changed - file = p.prevFile[:n] + p.string() - line = p.int() - } - } - } - p.prevFile = file - p.prevLine = line - - return p.fake.pos(file, line, 0) -} - // Synthesize a token.Pos type fakeFileSet struct { fset *token.FileSet @@ -389,205 +73,6 @@ var ( fakeLinesOnce sync.Once ) -func (p *importer) qualifiedName() (pkg *types.Package, name string) { - name = p.string() - pkg = p.pkg() - return -} - -func (p *importer) record(t types.Type) { - p.typList = append(p.typList, t) -} - -// A dddSlice is a types.Type representing ...T parameters. -// It only appears for parameter types and does not escape -// the importer. -type dddSlice struct { - elem types.Type -} - -func (t *dddSlice) Underlying() types.Type { return t } -func (t *dddSlice) String() string { return "..." + t.elem.String() } - -// parent is the package which declared the type; parent == nil means -// the package currently imported. The parent package is needed for -// exported struct fields and interface methods which don't contain -// explicit package information in the export data. -// -// A non-nil tname is used as the "owner" of the result type; i.e., -// the result type is the underlying type of tname. tname is used -// to give interface methods a named receiver type where possible. -func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { - // if the type was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.typList[i] - } - - // otherwise, i is the type tag (< 0) - switch i { - case namedTag: - // read type object - pos := p.pos() - parent, name := p.qualifiedName() - scope := parent.Scope() - obj := scope.Lookup(name) - - // if the object doesn't exist yet, create and insert it - if obj == nil { - obj = types.NewTypeName(pos, parent, name, nil) - scope.Insert(obj) - } - - if _, ok := obj.(*types.TypeName); !ok { - errorf("pkg = %s, name = %s => %s", parent, name, obj) - } - - // associate new named type with obj if it doesn't exist yet - t0 := types.NewNamed(obj.(*types.TypeName), nil, nil) - - // but record the existing type, if any - tname := obj.Type().(*types.Named) // tname is either t0 or the existing type - p.record(tname) - - // read underlying type - t0.SetUnderlying(p.typ(parent, t0)) - - // interfaces don't have associated methods - if types.IsInterface(t0) { - return tname - } - - // read associated methods - for i := p.int(); i > 0; i-- { - // TODO(gri) replace this with something closer to fieldName - pos := p.pos() - name := p.string() - if !exported(name) { - p.pkg() - } - - recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver? - params, isddd := p.paramList() - result, _ := p.paramList() - p.int() // go:nointerface pragma - discarded - - sig := types.NewSignature(recv.At(0), params, result, isddd) - t0.AddMethod(types.NewFunc(pos, parent, name, sig)) - } - - return tname - - case arrayTag: - t := new(types.Array) - if p.trackAllTypes { - p.record(t) - } - - n := p.int64() - *t = *types.NewArray(p.typ(parent, nil), n) - return t - - case sliceTag: - t := new(types.Slice) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewSlice(p.typ(parent, nil)) - return t - - case dddTag: - t := new(dddSlice) - if p.trackAllTypes { - p.record(t) - } - - t.elem = p.typ(parent, nil) - return t - - case structTag: - t := new(types.Struct) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewStruct(p.fieldList(parent)) - return t - - case pointerTag: - t := new(types.Pointer) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewPointer(p.typ(parent, nil)) - return t - - case signatureTag: - t := new(types.Signature) - if p.trackAllTypes { - p.record(t) - } - - params, isddd := p.paramList() - result, _ := p.paramList() - *t = *types.NewSignature(nil, params, result, isddd) - return t - - case interfaceTag: - // Create a dummy entry in the type list. This is safe because we - // cannot expect the interface type to appear in a cycle, as any - // such cycle must contain a named type which would have been - // first defined earlier. - // TODO(gri) Is this still true now that we have type aliases? - // See issue #23225. - n := len(p.typList) - if p.trackAllTypes { - p.record(nil) - } - - var embeddeds []types.Type - for n := p.int(); n > 0; n-- { - p.pos() - embeddeds = append(embeddeds, p.typ(parent, nil)) - } - - t := newInterface(p.methodList(parent, tname), embeddeds) - p.interfaceList = append(p.interfaceList, t) - if p.trackAllTypes { - p.typList[n] = t - } - return t - - case mapTag: - t := new(types.Map) - if p.trackAllTypes { - p.record(t) - } - - key := p.typ(parent, nil) - val := p.typ(parent, nil) - *t = *types.NewMap(key, val) - return t - - case chanTag: - t := new(types.Chan) - if p.trackAllTypes { - p.record(t) - } - - dir := chanDir(p.int()) - val := p.typ(parent, nil) - *t = *types.NewChan(dir, val) - return t - - default: - errorf("unexpected type tag %d", i) // panics - panic("unreachable") - } -} - func chanDir(d int) types.ChanDir { // tag values must match the constants in cmd/compile/internal/gc/go.go switch d { @@ -603,394 +88,6 @@ func chanDir(d int) types.ChanDir { } } -func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) { - if n := p.int(); n > 0 { - fields = make([]*types.Var, n) - tags = make([]string, n) - for i := range fields { - fields[i], tags[i] = p.field(parent) - } - } - return -} - -func (p *importer) field(parent *types.Package) (*types.Var, string) { - pos := p.pos() - pkg, name, alias := p.fieldName(parent) - typ := p.typ(parent, nil) - tag := p.string() - - anonymous := false - if name == "" { - // anonymous field - typ must be T or *T and T must be a type name - switch typ := deref(typ).(type) { - case *types.Basic: // basic types are named types - pkg = nil // // objects defined in Universe scope have no package - name = typ.Name() - case *types.Named: - name = typ.Obj().Name() - default: - errorf("named base type expected") - } - anonymous = true - } else if alias { - // anonymous field: we have an explicit name because it's an alias - anonymous = true - } - - return types.NewField(pos, pkg, name, typ, anonymous), tag -} - -func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) { - if n := p.int(); n > 0 { - methods = make([]*types.Func, n) - for i := range methods { - methods[i] = p.method(parent, baseType) - } - } - return -} - -func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func { - pos := p.pos() - pkg, name, _ := p.fieldName(parent) - // If we don't have a baseType, use a nil receiver. - // A receiver using the actual interface type (which - // we don't know yet) will be filled in when we call - // types.Interface.Complete. - var recv *types.Var - if baseType != nil { - recv = types.NewVar(token.NoPos, parent, "", baseType) - } - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(recv, params, result, isddd) - return types.NewFunc(pos, pkg, name, sig) -} - -func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) { - name = p.string() - pkg = parent - if pkg == nil { - // use the imported package instead - pkg = p.pkgList[0] - } - if p.version == 0 && name == "_" { - // version 0 didn't export a package for _ fields - return - } - switch name { - case "": - // 1) field name matches base type name and is exported: nothing to do - case "?": - // 2) field name matches base type name and is not exported: need package - name = "" - pkg = p.pkg() - case "@": - // 3) field name doesn't match type name (alias) - name = p.string() - alias = true - fallthrough - default: - if !exported(name) { - pkg = p.pkg() - } - } - return -} - -func (p *importer) paramList() (*types.Tuple, bool) { - n := p.int() - if n == 0 { - return nil, false - } - // negative length indicates unnamed parameters - named := true - if n < 0 { - n = -n - named = false - } - // n > 0 - params := make([]*types.Var, n) - isddd := false - for i := range params { - params[i], isddd = p.param(named) - } - return types.NewTuple(params...), isddd -} - -func (p *importer) param(named bool) (*types.Var, bool) { - t := p.typ(nil, nil) - td, isddd := t.(*dddSlice) - if isddd { - t = types.NewSlice(td.elem) - } - - var pkg *types.Package - var name string - if named { - name = p.string() - if name == "" { - errorf("expected named parameter") - } - if name != "_" { - pkg = p.pkg() - } - if i := strings.Index(name, "·"); i > 0 { - name = name[:i] // cut off gc-specific parameter numbering - } - } - - // read and discard compiler-specific info - p.string() - - return types.NewVar(token.NoPos, pkg, name, t), isddd -} - -func exported(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) -} - -func (p *importer) value() constant.Value { - switch tag := p.tagOrIndex(); tag { - case falseTag: - return constant.MakeBool(false) - case trueTag: - return constant.MakeBool(true) - case int64Tag: - return constant.MakeInt64(p.int64()) - case floatTag: - return p.float() - case complexTag: - re := p.float() - im := p.float() - return constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - case stringTag: - return constant.MakeString(p.string()) - case unknownTag: - return constant.MakeUnknown() - default: - errorf("unexpected value tag %d", tag) // panics - panic("unreachable") - } -} - -func (p *importer) float() constant.Value { - sign := p.int() - if sign == 0 { - return constant.MakeInt64(0) - } - - exp := p.int() - mant := []byte(p.string()) // big endian - - // remove leading 0's if any - for len(mant) > 0 && mant[0] == 0 { - mant = mant[1:] - } - - // convert to little endian - // TODO(gri) go/constant should have a more direct conversion function - // (e.g., once it supports a big.Float based implementation) - for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 { - mant[i], mant[j] = mant[j], mant[i] - } - - // adjust exponent (constant.MakeFromBytes creates an integer value, - // but mant represents the mantissa bits such that 0.5 <= mant < 1.0) - exp -= len(mant) << 3 - if len(mant) > 0 { - for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 { - exp++ - } - } - - x := constant.MakeFromBytes(mant) - switch { - case exp < 0: - d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) - x = constant.BinaryOp(x, token.QUO, d) - case exp > 0: - x = constant.Shift(x, token.SHL, uint(exp)) - } - - if sign < 0 { - x = constant.UnaryOp(token.SUB, x, 0) - } - return x -} - -// ---------------------------------------------------------------------------- -// Low-level decoders - -func (p *importer) tagOrIndex() int { - if p.debugFormat { - p.marker('t') - } - - return int(p.rawInt64()) -} - -func (p *importer) int() int { - x := p.int64() - if int64(int(x)) != x { - errorf("exported integer too large") - } - return int(x) -} - -func (p *importer) int64() int64 { - if p.debugFormat { - p.marker('i') - } - - return p.rawInt64() -} - -func (p *importer) path() string { - if p.debugFormat { - p.marker('p') - } - // if the path was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.pathList[i] - } - // otherwise, i is the negative path length (< 0) - a := make([]string, -i) - for n := range a { - a[n] = p.string() - } - s := strings.Join(a, "/") - p.pathList = append(p.pathList, s) - return s -} - -func (p *importer) string() string { - if p.debugFormat { - p.marker('s') - } - // if the string was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.strList[i] - } - // otherwise, i is the negative string length (< 0) - if n := int(-i); n <= cap(p.buf) { - p.buf = p.buf[:n] - } else { - p.buf = make([]byte, n) - } - for i := range p.buf { - p.buf[i] = p.rawByte() - } - s := string(p.buf) - p.strList = append(p.strList, s) - return s -} - -func (p *importer) marker(want byte) { - if got := p.rawByte(); got != want { - errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read) - } - - pos := p.read - if n := int(p.rawInt64()); n != pos { - errorf("incorrect position: got %d; want %d", n, pos) - } -} - -// rawInt64 should only be used by low-level decoders. -func (p *importer) rawInt64() int64 { - i, err := binary.ReadVarint(p) - if err != nil { - errorf("read error: %v", err) - } - return i -} - -// rawStringln should only be used to read the initial version string. -func (p *importer) rawStringln(b byte) string { - p.buf = p.buf[:0] - for b != '\n' { - p.buf = append(p.buf, b) - b = p.rawByte() - } - return string(p.buf) -} - -// needed for binary.ReadVarint in rawInt64 -func (p *importer) ReadByte() (byte, error) { - return p.rawByte(), nil -} - -// byte is the bottleneck interface for reading p.data. -// It unescapes '|' 'S' to '$' and '|' '|' to '|'. -// rawByte should only be used by low-level decoders. -func (p *importer) rawByte() byte { - b := p.data[0] - r := 1 - if b == '|' { - b = p.data[1] - r = 2 - switch b { - case 'S': - b = '$' - case '|': - // nothing to do - default: - errorf("unexpected escape sequence in export data") - } - } - p.data = p.data[r:] - p.read += r - return b - -} - -// ---------------------------------------------------------------------------- -// Export format - -// Tags. Must be < 0. -const ( - // Objects - packageTag = -(iota + 1) - constTag - typeTag - varTag - funcTag - endTag - - // Types - namedTag - arrayTag - sliceTag - dddTag - structTag - pointerTag - signatureTag - interfaceTag - mapTag - chanTag - - // Values - falseTag - trueTag - int64Tag - floatTag - fractionTag // not used by gc - complexTag - stringTag - nilTag // only used by gc (appears in exported inlined function bodies) - unknownTag // not used by gc (only appears in packages with errors) - - // Type aliases - aliasTag -) - var predeclOnce sync.Once var predecl []types.Type // initialized lazily diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go index a973dece9360..b1223713b940 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -230,20 +230,17 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func // Or, define a new standard go/types/gcexportdata package. fset := token.NewFileSet() - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. + // Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': - _, pkg, err := IImportData(fset, packages, data[1:], id) - return pkg, err + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - case 'v', 'c', 'd': - _, pkg, err := BImportData(fset, packages, data, id) + case 'i': // indexed, till go1.19 + _, pkg, err := IImportData(fset, packages, data[1:], id) return pkg, err - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := UImportData(fset, packages, data[1:size], id) return pkg, err diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index a0dc0b5e27dd..9930d8c36a77 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -969,6 +969,16 @@ func constantToFloat(x constant.Value) *big.Float { return &f } +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + // mpint exports a multi-precision integer. // // For unsigned types, small values are written out as a single @@ -1178,3 +1188,12 @@ func (q *objQueue) popHead() types.Object { q.head++ return obj } + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +func internalErrorf(format string, args ...interface{}) error { + return internalError(fmt.Sprintf(format, args...)) +} diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index be6dace1534d..94a5eba333fa 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -131,7 +131,7 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, } else if version > currentVersion { err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e) } } }() @@ -140,11 +140,8 @@ func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, r := &intReader{bytes.NewReader(data), path} if bundle { - bundleVersion := r.uint64() - switch bundleVersion { - case bundleVersion: - default: - errorf("unknown bundle format version %d", bundleVersion) + if v := r.uint64(); v != bundleVersion { + errorf("unknown bundle format version %d", v) } } diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go index 34fc783f82b9..b977435f626d 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -10,6 +10,7 @@ package gcimporter import ( + "fmt" "go/token" "go/types" "sort" @@ -63,6 +64,14 @@ type typeInfo struct { } func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + if !debug { + defer func() { + if x := recover(); x != nil { + err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x) + } + }() + } + s := string(data) s = s[:strings.LastIndex(s, "\n$$\n")] input := pkgbits.NewPkgDecoder(path, s) diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/invoke.go index d50551693f3d..8d9fc98d8f56 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -8,10 +8,12 @@ package gocommand import ( "bytes" "context" + "errors" "fmt" "io" "log" "os" + "reflect" "regexp" "runtime" "strconv" @@ -22,6 +24,9 @@ import ( exec "golang.org/x/sys/execabs" "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" + "golang.org/x/tools/internal/event/tag" ) // An Runner will run go command invocations and serialize @@ -51,9 +56,19 @@ func (runner *Runner) initialize() { // 1.14: go: updating go.mod: existing contents have changed since last read var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`) +// verb is an event label for the go command verb. +var verb = keys.NewString("verb", "go command verb") + +func invLabels(inv Invocation) []label.Label { + return []label.Label{verb.Of(inv.Verb), tag.Directory.Of(inv.WorkingDir)} +} + // Run is a convenience wrapper around RunRaw. // It returns only stdout and a "friendly" error. func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...) + defer done() + stdout, _, friendly, _ := runner.RunRaw(ctx, inv) return stdout, friendly } @@ -61,6 +76,9 @@ func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, e // RunPiped runs the invocation serially, always waiting for any concurrent // invocations to complete first. func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error { + ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...) + defer done() + _, err := runner.runPiped(ctx, inv, stdout, stderr) return err } @@ -68,6 +86,8 @@ func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stde // RunRaw runs the invocation, serializing requests only if they fight over // go.mod changes. func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...) + defer done() // Make sure the runner is always initialized. runner.initialize() @@ -215,6 +235,18 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd := exec.Command("go", goArgs...) cmd.Stdout = stdout cmd.Stderr = stderr + + // cmd.WaitDelay was added only in go1.20 (see #50436). + if waitDelay := reflect.ValueOf(cmd).Elem().FieldByName("WaitDelay"); waitDelay.IsValid() { + // https://go.dev/issue/59541: don't wait forever copying stderr + // after the command has exited. + // After CL 484741 we copy stdout manually, so we we'll stop reading that as + // soon as ctx is done. However, we also don't want to wait around forever + // for stderr. Give a much-longer-than-reasonable delay and then assume that + // something has wedged in the kernel or runtime. + waitDelay.Set(reflect.ValueOf(30 * time.Second)) + } + // On darwin the cwd gets resolved to the real path, which breaks anything that // expects the working directory to keep the original path, including the // go command when dealing with modules. @@ -229,6 +261,7 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir) cmd.Dir = i.WorkingDir } + defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) return runCmdContext(ctx, cmd) @@ -242,10 +275,85 @@ var DebugHangingGoCommands = false // runCmdContext is like exec.CommandContext except it sends os.Interrupt // before os.Kill. -func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { - if err := cmd.Start(); err != nil { +func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { + // If cmd.Stdout is not an *os.File, the exec package will create a pipe and + // copy it to the Writer in a goroutine until the process has finished and + // either the pipe reaches EOF or command's WaitDelay expires. + // + // However, the output from 'go list' can be quite large, and we don't want to + // keep reading (and allocating buffers) if we've already decided we don't + // care about the output. We don't want to wait for the process to finish, and + // we don't wait to wait for the WaitDelay to expire either. + // + // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace + // it with a pipe (which is an *os.File), which we can close in order to stop + // copying output as soon as we realize we don't care about it. + var stdoutW *os.File + if cmd.Stdout != nil { + if _, ok := cmd.Stdout.(*os.File); !ok { + var stdoutR *os.File + stdoutR, stdoutW, err = os.Pipe() + if err != nil { + return err + } + prevStdout := cmd.Stdout + cmd.Stdout = stdoutW + + stdoutErr := make(chan error, 1) + go func() { + _, err := io.Copy(prevStdout, stdoutR) + if err != nil { + err = fmt.Errorf("copying stdout: %w", err) + } + stdoutErr <- err + }() + defer func() { + // We started a goroutine to copy a stdout pipe. + // Wait for it to finish, or terminate it if need be. + var err2 error + select { + case err2 = <-stdoutErr: + stdoutR.Close() + case <-ctx.Done(): + stdoutR.Close() + // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close + // should cause the Read call in io.Copy to unblock and return + // immediately, but we still need to receive from stdoutErr to confirm + // that that has happened. + <-stdoutErr + err2 = ctx.Err() + } + if err == nil { + err = err2 + } + }() + + // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the + // same writer, and have a type that can be compared with ==, at most + // one goroutine at a time will call Write.” + // + // Since we're starting a goroutine that writes to cmd.Stdout, we must + // also update cmd.Stderr so that that still holds. + func() { + defer func() { recover() }() + if cmd.Stderr == prevStdout { + cmd.Stderr = cmd.Stdout + } + }() + } + } + + err = cmd.Start() + if stdoutW != nil { + // The child process has inherited the pipe file, + // so close the copy held in this process. + stdoutW.Close() + stdoutW = nil + } + if err != nil { return err } + resChan := make(chan error, 1) go func() { resChan <- cmd.Wait() @@ -253,11 +361,14 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { // If we're interested in debugging hanging Go commands, stop waiting after a // minute and panic with interesting information. - if DebugHangingGoCommands { + debug := DebugHangingGoCommands + if debug { + timer := time.NewTimer(1 * time.Minute) + defer timer.Stop() select { case err := <-resChan: return err - case <-time.After(1 * time.Minute): + case <-timer.C: HandleHangingGoCommand(cmd.Process) case <-ctx.Done(): } @@ -270,30 +381,25 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { } // Cancelled. Interrupt and see if it ends voluntarily. - cmd.Process.Signal(os.Interrupt) - select { - case err := <-resChan: - return err - case <-time.After(time.Second): + if err := cmd.Process.Signal(os.Interrupt); err == nil { + // (We used to wait only 1s but this proved + // fragile on loaded builder machines.) + timer := time.NewTimer(5 * time.Second) + defer timer.Stop() + select { + case err := <-resChan: + return err + case <-timer.C: + } } // Didn't shut down in response to interrupt. Kill it hard. // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT // on certain platforms, such as unix. - if err := cmd.Process.Kill(); err != nil && DebugHangingGoCommands { - // Don't panic here as this reliably fails on windows with EINVAL. + if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { log.Printf("error killing the Go command: %v", err) } - // See above: don't wait indefinitely if we're debugging hanging Go commands. - if DebugHangingGoCommands { - select { - case err := <-resChan: - return err - case <-time.After(10 * time.Second): // a shorter wait as resChan should return quickly following Kill - HandleHangingGoCommand(cmd.Process) - } - } return <-resChan } diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/version.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/version.go index 307a76d474ad..446c5846a60f 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/version.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/gocommand/version.go @@ -23,21 +23,11 @@ import ( func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) { inv.Verb = "list" inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`} - inv.Env = append(append([]string{}, inv.Env...), "GO111MODULE=off") - // Unset any unneeded flags, and remove them from BuildFlags, if they're - // present. - inv.ModFile = "" + inv.BuildFlags = nil // This is not a build command. inv.ModFlag = "" - var buildFlags []string - for _, flag := range inv.BuildFlags { - // Flags can be prefixed by one or two dashes. - f := strings.TrimPrefix(strings.TrimPrefix(flag, "-"), "-") - if strings.HasPrefix(f, "mod=") || strings.HasPrefix(f, "modfile=") { - continue - } - buildFlags = append(buildFlags, flag) - } - inv.BuildFlags = buildFlags + inv.ModFile = "" + inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off") + stdoutBytes, err := r.Run(ctx, inv) if err != nil { return 0, err diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go index 642a5ac2d757..d4f1b4e8a0f2 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/fix.go @@ -26,6 +26,7 @@ import ( "unicode/utf8" "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gopathwalk" ) @@ -414,9 +415,16 @@ func (p *pass) fix() ([]*ImportFix, bool) { }) } } + // Collecting fixes involved map iteration, so sort for stability. See + // golang/go#59976. + sortFixes(fixes) + // collect selected fixes in a separate slice, so that it can be sorted + // separately. Note that these fixes must occur after fixes to existing + // imports. TODO(rfindley): figure out why. + var selectedFixes []*ImportFix for _, imp := range selected { - fixes = append(fixes, &ImportFix{ + selectedFixes = append(selectedFixes, &ImportFix{ StmtInfo: ImportInfo{ Name: p.importSpecName(imp), ImportPath: imp.ImportPath, @@ -425,8 +433,25 @@ func (p *pass) fix() ([]*ImportFix, bool) { FixType: AddImport, }) } + sortFixes(selectedFixes) - return fixes, true + return append(fixes, selectedFixes...), true +} + +func sortFixes(fixes []*ImportFix) { + sort.Slice(fixes, func(i, j int) bool { + fi, fj := fixes[i], fixes[j] + if fi.StmtInfo.ImportPath != fj.StmtInfo.ImportPath { + return fi.StmtInfo.ImportPath < fj.StmtInfo.ImportPath + } + if fi.StmtInfo.Name != fj.StmtInfo.Name { + return fi.StmtInfo.Name < fj.StmtInfo.Name + } + if fi.IdentName != fj.IdentName { + return fi.IdentName < fj.IdentName + } + return fi.FixType < fj.FixType + }) } // importSpecName gets the import name of imp in the import spec. @@ -519,7 +544,7 @@ func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) { var fixImports = fixImportsDefault func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { - fixes, err := getFixes(fset, f, filename, env) + fixes, err := getFixes(context.Background(), fset, f, filename, env) if err != nil { return err } @@ -529,7 +554,7 @@ func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *P // getFixes gets the import fixes that need to be made to f in order to fix the imports. // It does not modify the ast. -func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { +func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { abs, err := filepath.Abs(filename) if err != nil { return nil, err @@ -583,7 +608,7 @@ func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv // Go look for candidates in $GOPATH, etc. We don't necessarily load // the real exports of sibling imports, so keep assuming their contents. - if err := addExternalCandidates(p, p.missingRefs, filename); err != nil { + if err := addExternalCandidates(ctx, p, p.missingRefs, filename); err != nil { return nil, err } @@ -1031,7 +1056,10 @@ type scanCallback struct { exportsLoaded func(pkg *pkg, exports []string) } -func addExternalCandidates(pass *pass, refs references, filename string) error { +func addExternalCandidates(ctx context.Context, pass *pass, refs references, filename string) error { + ctx, done := event.Start(ctx, "imports.addExternalCandidates") + defer done() + var mu sync.Mutex found := make(map[string][]pkgDistance) callback := &scanCallback{ diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go index 95a88383a792..58e637b90f24 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/imports.go @@ -11,6 +11,7 @@ package imports import ( "bufio" "bytes" + "context" "fmt" "go/ast" "go/format" @@ -23,6 +24,7 @@ import ( "strings" "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" ) // Options is golang.org/x/tools/imports.Options with extra internal-only options. @@ -66,14 +68,17 @@ func Process(filename string, src []byte, opt *Options) (formatted []byte, err e // // Note that filename's directory influences which imports can be chosen, // so it is important that filename be accurate. -func FixImports(filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { +func FixImports(ctx context.Context, filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { + ctx, done := event.Start(ctx, "imports.FixImports") + defer done() + fileSet := token.NewFileSet() file, _, err := parse(fileSet, filename, src, opt) if err != nil { return nil, err } - return getFixes(fileSet, file, filename, opt.Env) + return getFixes(ctx, fileSet, file, filename, opt.Env) } // ApplyFixes applies all of the fixes to the file and formats it. extraMode diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go index 7d99d04ca8ad..1389d38b213c 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/imports/mod.go @@ -19,6 +19,7 @@ import ( "strings" "golang.org/x/mod/module" + "golang.org/x/tools/internal/event" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gopathwalk" ) @@ -424,6 +425,9 @@ func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) ( } func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error { + ctx, done := event.Start(ctx, "imports.ModuleResolver.scan") + defer done() + if err := r.init(); err != nil { return err } diff --git a/cluster-autoscaler/vendor/golang.org/x/tools/internal/typesinternal/types.go b/cluster-autoscaler/vendor/golang.org/x/tools/internal/typesinternal/types.go index 3c53fbc63b94..ce7d4351b220 100644 --- a/cluster-autoscaler/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ b/cluster-autoscaler/vendor/golang.org/x/tools/internal/typesinternal/types.go @@ -11,8 +11,6 @@ import ( "go/types" "reflect" "unsafe" - - "golang.org/x/tools/go/types/objectpath" ) func SetUsesCgo(conf *types.Config) bool { @@ -52,10 +50,3 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, } var SetGoVersion = func(conf *types.Config, version string) bool { return false } - -// NewObjectpathEncoder returns a function closure equivalent to -// objectpath.For but amortized for multiple (sequential) calls. -// It is a temporary workaround, pending the approval of proposal 58668. -// -//go:linkname NewObjectpathFunc golang.org/x/tools/go/types/objectpath.newEncoderFor -func NewObjectpathFunc() func(types.Object) (objectpath.Path, error) diff --git a/cluster-autoscaler/vendor/modules.txt b/cluster-autoscaler/vendor/modules.txt index 01efcd42a709..e0d22fc0b65e 100644 --- a/cluster-autoscaler/vendor/modules.txt +++ b/cluster-autoscaler/vendor/modules.txt @@ -9,11 +9,12 @@ cloud.google.com/go/compute/metadata github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute +github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2021-10-01/containerservice github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network -github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network +github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network github.com/Azure/azure-sdk-for-go/services/privatedns/mgmt/2018-09-01/privatedns github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage @@ -481,7 +482,7 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate -# github.com/onsi/ginkgo/v2 v2.9.4 +# github.com/onsi/ginkgo/v2 v2.11.0 ## explicit; go 1.18 github.com/onsi/ginkgo/v2 github.com/onsi/ginkgo/v2/config @@ -503,7 +504,7 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/testingtproxy github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.27.6 +# github.com/onsi/gomega v1.27.10 ## explicit; go 1.18 github.com/onsi/gomega github.com/onsi/gomega/format @@ -605,8 +606,8 @@ github.com/stoewer/go-strcase # github.com/stretchr/objx v0.5.0 ## explicit; go 1.12 github.com/stretchr/objx -# github.com/stretchr/testify v1.8.2 -## explicit; go 1.13 +# github.com/stretchr/testify v1.8.4 +## explicit; go 1.20 github.com/stretchr/testify/assert github.com/stretchr/testify/mock github.com/stretchr/testify/require @@ -771,7 +772,7 @@ go.uber.org/zap/internal/color go.uber.org/zap/internal/exit go.uber.org/zap/zapcore go.uber.org/zap/zapgrpc -# golang.org/x/crypto v0.11.0 +# golang.org/x/crypto v0.12.0 ## explicit; go 1.17 golang.org/x/crypto/cryptobyte golang.org/x/crypto/cryptobyte/asn1 @@ -817,10 +818,10 @@ golang.org/x/oauth2/google/internal/externalaccount golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.2.0 -## explicit +# golang.org/x/sync v0.3.0 +## explicit; go 1.17 golang.org/x/sync/singleflight -# golang.org/x/sys v0.10.0 +# golang.org/x/sys v0.11.0 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -830,10 +831,10 @@ golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry golang.org/x/sys/windows/svc -# golang.org/x/term v0.10.0 +# golang.org/x/term v0.11.0 ## explicit; go 1.17 golang.org/x/term -# golang.org/x/text v0.11.0 +# golang.org/x/text v0.12.0 ## explicit; go 1.17 golang.org/x/text/encoding golang.org/x/text/encoding/charmap @@ -867,7 +868,7 @@ golang.org/x/text/width # golang.org/x/time v0.3.0 ## explicit golang.org/x/time/rate -# golang.org/x/tools v0.8.0 +# golang.org/x/tools v0.9.3 ## explicit; go 1.18 golang.org/x/tools/cmd/stringer golang.org/x/tools/go/ast/astutil @@ -875,12 +876,12 @@ golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver golang.org/x/tools/go/packages -golang.org/x/tools/go/types/objectpath golang.org/x/tools/imports golang.org/x/tools/internal/event golang.org/x/tools/internal/event/core golang.org/x/tools/internal/event/keys golang.org/x/tools/internal/event/label +golang.org/x/tools/internal/event/tag golang.org/x/tools/internal/fastwalk golang.org/x/tools/internal/gcimporter golang.org/x/tools/internal/gocommand @@ -2179,8 +2180,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client -# sigs.k8s.io/cloud-provider-azure v1.26.2 -## explicit; go 1.19 +# sigs.k8s.io/cloud-provider-azure v1.28.0 +## explicit; go 1.20 sigs.k8s.io/cloud-provider-azure/pkg/azureclients sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient @@ -2226,7 +2227,6 @@ sigs.k8s.io/cloud-provider-azure/pkg/azureclients/zoneclient sigs.k8s.io/cloud-provider-azure/pkg/cache sigs.k8s.io/cloud-provider-azure/pkg/consts sigs.k8s.io/cloud-provider-azure/pkg/metrics -sigs.k8s.io/cloud-provider-azure/pkg/nodemanager sigs.k8s.io/cloud-provider-azure/pkg/provider sigs.k8s.io/cloud-provider-azure/pkg/provider/config sigs.k8s.io/cloud-provider-azure/pkg/provider/virtualmachine diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/azure_armclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/azure_armclient.go index 835a63b4544e..c9f6a044bd6f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/azure_armclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/azure_armclient.go @@ -75,7 +75,7 @@ func sender() autorest.Sender { Timeout: 30 * time.Second, // the same as default transport KeepAlive: 30 * time.Second, // the same as default transport }).DialContext, - ForceAttemptHTTP2: true, // always attempt HTTP/2 even though custom dialer is provided + ForceAttemptHTTP2: false, // respect custom dialer (default is true) MaxIdleConns: 100, // Zero means no limit, the same as default transport MaxIdleConnsPerHost: 100, // Default is 2, ref:https://cs.opensource.google/go/go/+/go1.18.4:src/net/http/transport.go;l=58 IdleConnTimeout: 90 * time.Second, // the same as default transport @@ -393,6 +393,40 @@ func (c *Client) PutResource(ctx context.Context, resourceID string, parameters return response, nil } +func (c *Client) waitAsync(ctx context.Context, futures map[string]*azure.Future, previousResponses map[string]*PutResourcesResponse) { + wg := sync.WaitGroup{} + var responseLock sync.Mutex + for resourceID, future := range futures { + wg.Add(1) + go func(resourceID string, future *azure.Future) { + defer wg.Done() + response, err := c.WaitForAsyncOperationResult(ctx, future, "armclient.PutResource") + if err != nil { + if response != nil { + klog.V(5).Infof("Received error in WaitForAsyncOperationResult: '%s', response code %d", err.Error(), response.StatusCode) + } else { + klog.V(5).Infof("Received error in WaitForAsyncOperationResult: '%s', no response", err.Error()) + } + + retriableErr := retry.GetError(response, err) + if !retriableErr.Retriable && + strings.Contains(strings.ToUpper(err.Error()), strings.ToUpper("InternalServerError")) { + klog.V(5).Infof("Received InternalServerError in WaitForAsyncOperationResult: '%s', setting error retriable", err.Error()) + retriableErr.Retriable = true + } + + responseLock.Lock() + previousResponses[resourceID] = &PutResourcesResponse{ + Error: retriableErr, + } + responseLock.Unlock() + return + } + }(resourceID, future) + } + wg.Wait() +} + // PutResourcesInBatches is similar with PutResources, but it sends sync request concurrently in batches. func (c *Client) PutResourcesInBatches(ctx context.Context, resources map[string]interface{}, batchSize int) map[string]*PutResourcesResponse { if len(resources) == 0 { @@ -413,27 +447,37 @@ func (c *Client) PutResourcesInBatches(ctx context.Context, resources map[string rateLimiter := make(chan struct{}, batchSize) // Concurrent sync requests in batches. + futures := make(map[string]*azure.Future) responses := make(map[string]*PutResourcesResponse) wg := sync.WaitGroup{} - var responseLock sync.Mutex + var responseLock, futuresLock sync.Mutex for resourceID, parameters := range resources { rateLimiter <- struct{}{} wg.Add(1) go func(resourceID string, parameters interface{}) { defer wg.Done() defer func() { <-rateLimiter }() - resp, rerr := c.PutResource(ctx, resourceID, parameters) - responseLock.Lock() - defer responseLock.Unlock() - responses[resourceID] = &PutResourcesResponse{ - Error: rerr, - Response: resp, + future, rerr := c.PutResourceAsync(ctx, resourceID, parameters) + if rerr != nil { + responseLock.Lock() + responses[resourceID] = &PutResourcesResponse{ + Error: rerr, + } + responseLock.Unlock() + return } + + futuresLock.Lock() + futures[resourceID] = future + futuresLock.Unlock() }(resourceID, parameters) } wg.Wait() close(rateLimiter) + // Concurrent async requests. + c.waitAsync(ctx, futures, responses) + return responses } @@ -501,7 +545,7 @@ func (c *Client) PutResourceAsync(ctx context.Context, resourceID string, parame future, resp, rErr := c.SendAsync(ctx, request) defer c.CloseResponse(ctx, resp) if rErr != nil { - klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "put.send", resourceID, err) + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "put.send", resourceID, rErr.Error()) return nil, rErr } @@ -544,7 +588,7 @@ func (c *Client) DeleteResource(ctx context.Context, resourceID string, decorato return nil } if err := future.WaitForCompletionRef(ctx, c.client); err != nil { - klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "delete.wait", resourceID, clientErr.Error()) + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "delete.wait", resourceID, err) return retry.NewError(true, err) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/util.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/util.go index afefd2cfc729..e9c974de405b 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/util.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient/util.go @@ -21,7 +21,7 @@ import ( "encoding/json" "fmt" "html" - "io/ioutil" + "io" "net/http" "net/http/httputil" "strings" @@ -114,9 +114,9 @@ func DoHackRegionalRetryForGET(c *Client) autorest.SendDecorator { return response, rerr } - bodyBytes, _ := ioutil.ReadAll(response.Body) + bodyBytes, _ := io.ReadAll(response.Body) defer func() { - response.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) + response.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) }() bodyString := string(bodyBytes) @@ -177,9 +177,9 @@ func DoHackRegionalRetryForGET(c *Client) autorest.SendDecorator { } // Do the same check on regional response just like the global one - bodyBytes, _ = ioutil.ReadAll(regionalResponse.Body) + bodyBytes, _ = io.ReadAll(regionalResponse.Body) defer func() { - regionalResponse.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) + regionalResponse.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) }() bodyString = string(bodyBytes) trimmed = strings.TrimSpace(bodyString) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/azure_blobclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/azure_blobclient.go index 517f8bda7657..d1fb1d08008e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/azure_blobclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/azure_blobclient.go @@ -38,9 +38,12 @@ var _ Interface = &Client{} // Client implements the blobclient interface type Client struct { - armClient armclient.Interface - subscriptionID string - cloudName string + blobServicesClient storage.BlobServicesClient + armClient armclient.Interface + subscriptionID string + cloudName string + baseURI string + authorizer autorest.Authorizer // Rate limiting configures. rateLimiterReader flowcontrol.RateLimiter @@ -60,6 +63,9 @@ func New(config *azclients.ClientConfig) *Client { authorizer := config.Authorizer apiVersion := APIVersion + blobServicesClient := storage.NewBlobServicesClientWithBaseURI(baseURI, config.SubscriptionID) + blobServicesClient.Authorizer = authorizer + if strings.EqualFold(config.CloudName, AzureStackCloudName) && !config.DisableAzureStackCloud { apiVersion = AzureStackCloudAPIVersion } @@ -78,12 +84,15 @@ func New(config *azclients.ClientConfig) *Client { } client := &Client{ - armClient: armClient, - rateLimiterReader: rateLimiterReader, - rateLimiterWriter: rateLimiterWriter, - subscriptionID: config.SubscriptionID, - cloudName: config.CloudName, - now: time.Now, + blobServicesClient: blobServicesClient, + armClient: armClient, + rateLimiterReader: rateLimiterReader, + rateLimiterWriter: rateLimiterWriter, + subscriptionID: config.SubscriptionID, + cloudName: config.CloudName, + now: time.Now, + baseURI: baseURI, + authorizer: authorizer, } return client @@ -268,3 +277,21 @@ func (c *Client) getContainer(ctx context.Context, subsID, resourceGroupName, ac container.Response = autorest.Response{Response: response} return container, nil } + +func (c *Client) GetServiceProperties(ctx context.Context, subsID, resourceGroupName, accountName string) (storage.BlobServiceProperties, error) { + blobServicesClient := c.blobServicesClient + if subsID != c.subscriptionID { + blobServicesClient = storage.NewBlobServicesClientWithBaseURI(c.baseURI, c.subscriptionID) + blobServicesClient.Authorizer = c.authorizer + } + return blobServicesClient.GetServiceProperties(ctx, resourceGroupName, accountName) +} + +func (c *Client) SetServiceProperties(ctx context.Context, subsID, resourceGroupName, accountName string, parameters storage.BlobServiceProperties) (storage.BlobServiceProperties, error) { + blobServicesClient := c.blobServicesClient + if subsID != c.subscriptionID { + blobServicesClient = storage.NewBlobServicesClientWithBaseURI(c.baseURI, c.subscriptionID) + blobServicesClient.Authorizer = c.authorizer + } + return blobServicesClient.SetServiceProperties(ctx, resourceGroupName, accountName, parameters) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/interface.go index b8ac9d8d7f21..3f89e3f1cce3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/blobclient/interface.go @@ -39,4 +39,6 @@ type Interface interface { CreateContainer(ctx context.Context, subsID, resourceGroupName, accountName, containerName string, parameters storage.BlobContainer) *retry.Error DeleteContainer(ctx context.Context, subsID, resourceGroupName, accountName, containerName string) *retry.Error GetContainer(ctx context.Context, subsID, resourceGroupName, accountName, containerName string) (storage.BlobContainer, *retry.Error) + GetServiceProperties(ctx context.Context, subsID, resourceGroupName, accountName string) (storage.BlobServiceProperties, error) + SetServiceProperties(ctx context.Context, subsID, resourceGroupName, accountName string, parameters storage.BlobServiceProperties) (storage.BlobServiceProperties, error) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/containerserviceclient/azure_containerserviceclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/containerserviceclient/azure_containerserviceclient.go index a61e784de1c4..44f55003e8a6 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/containerserviceclient/azure_containerserviceclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/containerserviceclient/azure_containerserviceclient.go @@ -24,10 +24,10 @@ import ( "github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2021-10-01/containerservice" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -196,7 +196,7 @@ func (c *Client) listManagedCluster(ctx context.Context, resourceGroupName strin result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -222,12 +222,12 @@ func (c *Client) listResponder(resp *http.Response) (result containerservice.Man // managedClusterListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) managedClusterListResultPreparer(ctx context.Context, mclr containerservice.ManagedClusterListResult) (*http.Request, error) { - if mclr.NextLink == nil || len(to.String(mclr.NextLink)) < 1 { + if mclr.NextLink == nil || len(pointer.StringDeref(mclr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(mclr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(mclr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/deploymentclient/azure_deploymentclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/deploymentclient/azure_deploymentclient.go index e0012660801a..8a15249704f7 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/deploymentclient/azure_deploymentclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/deploymentclient/azure_deploymentclient.go @@ -24,10 +24,10 @@ import ( "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -196,7 +196,7 @@ func (c *Client) listDeployment(ctx context.Context, resourceGroupName string) ( result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -222,12 +222,12 @@ func (c *Client) listResponder(resp *http.Response) (result resources.Deployment // deploymentListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) deploymentListResultPreparer(ctx context.Context, dplr resources.DeploymentListResult) (*http.Request, error) { - if dplr.NextLink == nil || len(to.String(dplr.NextLink)) < 1 { + if dplr.NextLink == nil || len(pointer.StringDeref(dplr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(dplr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(dplr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/azure_diskclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/azure_diskclient.go index 4e3053e71468..98500400016d 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/azure_diskclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/azure_diskclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -370,7 +370,7 @@ func (c *Client) ListByResourceGroup(ctx context.Context, subsID, resourceGroupN result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -420,13 +420,13 @@ func (c *Client) listResponder(resp *http.Response) (result compute.DiskList, er } func (c *Client) diskListPreparer(ctx context.Context, lr compute.DiskList) (*http.Request, error) { - if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 { + if lr.NextLink == nil || len(pointer.StringDeref(lr.NextLink, "")) < 1 { return nil, nil } return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), - autorest.WithBaseURL(to.String(lr.NextLink))) + autorest.WithBaseURL(pointer.StringDeref(lr.NextLink, ""))) } // DiskListPage contains a page of Disk values. diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/interface.go index a1fd9f1211ac..4259213b6e9a 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/interface.go @@ -19,14 +19,14 @@ package diskclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for compute. - APIVersion = "2022-03-02" + APIVersion = "2022-07-02" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2019-03-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/mockdiskclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/mockdiskclient/interface.go index 295423864372..405f1efc060b 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/mockdiskclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/diskclient/mockdiskclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/fileclient/azure_fileclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/fileclient/azure_fileclient.go index 737b03fbac6d..f66f1a40a498 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/fileclient/azure_fileclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/fileclient/azure_fileclient.go @@ -22,9 +22,9 @@ import ( "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage" "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/metrics" @@ -219,7 +219,7 @@ func (c *Client) ListFileShare(ctx context.Context, resourceGroupName, accountNa result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/azure_interfaceclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/azure_interfaceclient.go index 11a3b98f2f3a..ec69148dac38 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/azure_interfaceclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/azure_interfaceclient.go @@ -23,13 +23,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -261,8 +261,8 @@ func (c *Client) createOrUpdateInterface(ctx context.Context, resourceGroupName networkInterfaceName, ) decorators := []autorest.PrepareDecorator{} - if to.String(parameters.Etag) != "" { - decorators = append(decorators, autorest.WithHeader("If-Match", autorest.String(to.String(parameters.Etag)))) + if pointer.StringDeref(parameters.Etag, "") != "" { + decorators = append(decorators, autorest.WithHeader("If-Match", autorest.String(pointer.StringDeref(parameters.Etag, "")))) } response, rerr := c.armClient.PutResource(ctx, resourceID, parameters, decorators...) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/interface.go index e8e807a406bb..3d9ae10ed1d4 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/interface.go @@ -19,14 +19,14 @@ package interfaceclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/mockinterfaceclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/mockinterfaceclient/interface.go index 62e7050481de..53ba1bf5e4a0 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/mockinterfaceclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/interfaceclient/mockinterfaceclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/azure_loadbalancerclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/azure_loadbalancerclient.go index 1d5268463f43..f641d2b4421f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/azure_loadbalancerclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/azure_loadbalancerclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -55,6 +55,10 @@ type Client struct { RetryAfterWriter time.Time } +type backendPoolsToBeMigrated struct { + BackendPoolNames []string `json:"pools"` +} + // New creates a new LoadBalancer client with ratelimiting. func New(config *azclients.ClientConfig) *Client { baseURI := config.ResourceManagerEndpoint @@ -203,7 +207,7 @@ func (c *Client) listLB(ctx context.Context, resourceGroupName string) ([]networ result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -344,12 +348,12 @@ func (c *Client) listResponder(resp *http.Response) (result network.LoadBalancer // loadBalancerListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) loadBalancerListResultPreparer(ctx context.Context, lblr network.LoadBalancerListResult) (*http.Request, error) { - if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 { + if lblr.NextLink == nil || len(pointer.StringDeref(lblr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(lblr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(lblr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } @@ -421,6 +425,69 @@ func (page LoadBalancerListResultPage) Values() []network.LoadBalancer { return *page.lblr.Value } +// GetLBBackendPool gets a LoadBalancer backend pool. +func (c *Client) GetLBBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolName string, expand string) (network.BackendAddressPool, *retry.Error) { + mc := metrics.NewMetricContext("load_balancers", "get_backend_pool", resourceGroupName, c.subscriptionID, "") + + // Report errors if the client is rate limited. + if !c.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() + return network.BackendAddressPool{}, retry.GetRateLimitError(false, "LBGet") + } + + // Report errors if the client is throttled. + if c.RetryAfterReader.After(time.Now()) { + mc.ThrottledCount() + rerr := retry.GetThrottlingError("LBBackendPoolGet", "client throttled", c.RetryAfterReader) + return network.BackendAddressPool{}, rerr + } + + result, rerr := c.getLBBackendPool(ctx, resourceGroupName, loadBalancerName, backendPoolName, expand) + mc.Observe(rerr) + if rerr != nil { + if rerr.IsThrottled() { + // Update RetryAfterReader so that no more requests would be sent until RetryAfter expires. + c.RetryAfterReader = rerr.RetryAfter + } + + return result, rerr + } + + return result, nil +} + +// getLBBackendPool gets a LoadBalancer backend pool. +func (c *Client) getLBBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolName string, expand string) (network.BackendAddressPool, *retry.Error) { + resourceID := armclient.GetChildResourceID( + c.subscriptionID, + resourceGroupName, + lbResourceType, + loadBalancerName, + "backendAddressPools", + backendPoolName, + ) + result := network.BackendAddressPool{} + + response, rerr := c.armClient.GetResourceWithExpandQuery(ctx, resourceID, expand) + defer c.armClient.CloseResponse(ctx, response) + if rerr != nil { + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancer.backendpool.get.request", resourceID, rerr.Error()) + return result, rerr + } + + err := autorest.Respond( + response, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result)) + if err != nil { + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancer.backendpool.get.respond", resourceID, err) + return result, retry.GetError(response, err) + } + + result.Response = autorest.Response{Response: response} + return result, nil +} + // CreateOrUpdateBackendPools creates or updates a LoadBalancer backend pool. func (c *Client) CreateOrUpdateBackendPools(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolName string, parameters network.BackendAddressPool, etag string) *retry.Error { mc := metrics.NewMetricContext("load_balancers", "create_or_update_backend_pools", resourceGroupName, c.subscriptionID, "") @@ -470,14 +537,14 @@ func (c *Client) createOrUpdateLBBackendPool(ctx context.Context, resourceGroupN response, rerr := c.armClient.PutResource(ctx, resourceID, parameters, decorators...) defer c.armClient.CloseResponse(ctx, response) if rerr != nil { - klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancerbackendpool.put.request", resourceID, rerr.Error()) + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancer.backendpool.put.request", resourceID, rerr.Error()) return rerr } if response != nil && response.StatusCode != http.StatusNoContent { _, rerr = c.createOrUpdateBackendPoolResponder(response) if rerr != nil { - klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancerbackendpool.put.respond", resourceID, rerr.Error()) + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancer.backendpool.put.respond", resourceID, rerr.Error()) return rerr } } @@ -537,3 +604,56 @@ func (c *Client) createOrUpdateBackendPoolResponder(resp *http.Response) (*netwo result.Response = autorest.Response{Response: resp} return result, retry.GetError(resp, err) } + +// MigrateToIPBasedBackendPool migrates a NIC-based backend pool to IP-based. +func (c *Client) MigrateToIPBasedBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolNames []string) *retry.Error { + mc := metrics.NewMetricContext("load_balancers", "migrate_to_ip_based_backend_pool", resourceGroupName, c.subscriptionID, "") + + // Report errors if the client is rate limited. + if !c.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() + return retry.GetRateLimitError(true, "LBMigrateToIPBasedBackendPool") + } + + // Report errors if the client is throttled. + if c.RetryAfterWriter.After(time.Now()) { + mc.ThrottledCount() + rerr := retry.GetThrottlingError("LBMigrateToIPBasedBackendPool", "client throttled", c.RetryAfterWriter) + return rerr + } + + parameters := backendPoolsToBeMigrated{ + BackendPoolNames: backendPoolNames, + } + rerr := c.migrateToIPBasedBackendPool(ctx, resourceGroupName, loadBalancerName, parameters) + mc.Observe(rerr) + if rerr != nil { + if rerr.IsThrottled() { + // Update RetryAfterReader so that no more requests would be sent until RetryAfter expires. + c.RetryAfterWriter = rerr.RetryAfter + } + + return rerr + } + + return nil +} + +func (c *Client) migrateToIPBasedBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters backendPoolsToBeMigrated) *retry.Error { + resourceID := armclient.GetResourceID( + c.subscriptionID, + resourceGroupName, + lbResourceType, + loadBalancerName, + ) + + response, rerr := c.armClient.PostResource(ctx, resourceID, "migrateToIpBased", parameters, map[string]interface{}{}) + defer c.armClient.CloseResponse(ctx, response) + if rerr != nil { + klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "loadbalancerbackendpool.migrate.request", resourceID, rerr.Error()) + return rerr + } + + klog.Infof("Response: %v", response) + return nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/interface.go index a4da65f92f87..6f0feb22f8cd 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/interface.go @@ -19,14 +19,14 @@ package loadbalancerclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" // AzureStackCloudName is the cloud name of Azure Stack @@ -51,6 +51,12 @@ type Interface interface { // Delete deletes a LoadBalancer by name. Delete(ctx context.Context, resourceGroupName string, loadBalancerName string) *retry.Error + // GetLBBackendPool gets a LoadBalancer backend pool. + GetLBBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolName string, expand string) (network.BackendAddressPool, *retry.Error) + // DeleteLBBackendPool deletes a LoadBalancer backend pool by name. DeleteLBBackendPool(ctx context.Context, resourceGroupName, loadBalancerName, backendPoolName string) *retry.Error + + // MigrateToIPBasedBackendPool migrates a NIC-based backend pool to IP-based. + MigrateToIPBasedBackendPool(ctx context.Context, resourceGroupName string, loadBalancerName string, backendPoolNames []string) *retry.Error } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/mockloadbalancerclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/mockloadbalancerclient/interface.go index e9d0aaad8dff..c32c8a230a6c 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/mockloadbalancerclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/loadbalancerclient/mockloadbalancerclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) @@ -124,6 +124,21 @@ func (mr *MockInterfaceMockRecorder) Get(ctx, resourceGroupName, loadBalancerNam return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockInterface)(nil).Get), ctx, resourceGroupName, loadBalancerName, expand) } +// GetLBBackendPool mocks base method. +func (m *MockInterface) GetLBBackendPool(ctx context.Context, resourceGroupName, loadBalancerName, backendPoolName, expand string) (network.BackendAddressPool, *retry.Error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetLBBackendPool", ctx, resourceGroupName, loadBalancerName, backendPoolName, expand) + ret0, _ := ret[0].(network.BackendAddressPool) + ret1, _ := ret[1].(*retry.Error) + return ret0, ret1 +} + +// GetLBBackendPool indicates an expected call of GetLBBackendPool. +func (mr *MockInterfaceMockRecorder) GetLBBackendPool(ctx, resourceGroupName, loadBalancerName, backendPoolName, expand interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLBBackendPool", reflect.TypeOf((*MockInterface)(nil).GetLBBackendPool), ctx, resourceGroupName, loadBalancerName, backendPoolName, expand) +} + // List mocks base method. func (m *MockInterface) List(ctx context.Context, resourceGroupName string) ([]network.LoadBalancer, *retry.Error) { m.ctrl.T.Helper() @@ -138,3 +153,17 @@ func (mr *MockInterfaceMockRecorder) List(ctx, resourceGroupName interface{}) *g mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockInterface)(nil).List), ctx, resourceGroupName) } + +// MigrateToIPBasedBackendPool mocks base method. +func (m *MockInterface) MigrateToIPBasedBackendPool(ctx context.Context, resourceGroupName, loadBalancerName string, backendPoolNames []string) *retry.Error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MigrateToIPBasedBackendPool", ctx, resourceGroupName, loadBalancerName, backendPoolNames) + ret0, _ := ret[0].(*retry.Error) + return ret0 +} + +// MigrateToIPBasedBackendPool indicates an expected call of MigrateToIPBasedBackendPool. +func (mr *MockInterfaceMockRecorder) MigrateToIPBasedBackendPool(ctx, resourceGroupName, loadBalancerName, backendPoolNames interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MigrateToIPBasedBackendPool", reflect.TypeOf((*MockInterface)(nil).MigrateToIPBasedBackendPool), ctx, resourceGroupName, loadBalancerName, backendPoolNames) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/azure_privatednszonegroupclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/azure_privatednszonegroupclient.go index adaec79d4559..6ca7c1d9131c 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/azure_privatednszonegroupclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/azure_privatednszonegroupclient.go @@ -22,7 +22,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/interface.go index ce07a889b4fd..1bc97630d9d2 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatednszonegroupclient/interface.go @@ -19,14 +19,14 @@ package privatednszonegroupclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudName is the cloud name of Azure Stack AzureStackCloudName = "AZURESTACKCLOUD" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/azure_privateendpointclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/azure_privateendpointclient.go index 84240d5022c5..3d8982ad6186 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/azure_privateendpointclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/azure_privateendpointclient.go @@ -23,7 +23,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/interface.go index 06db14ad328b..17340cdab20d 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privateendpointclient/interface.go @@ -19,14 +19,14 @@ package privateendpointclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudName is the cloud name of Azure Stack AzureStackCloudName = "AZURESTACKCLOUD" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/azure_privatelinkserviceclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/azure_privatelinkserviceclient.go index bede7e41d26d..99b9a2c60161 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/azure_privatelinkserviceclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/azure_privatelinkserviceclient.go @@ -23,13 +23,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -270,7 +270,7 @@ func (c *Client) listPLS(ctx context.Context, resourceGroupName string) ([]netwo result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -382,12 +382,12 @@ func (c *Client) listResponder(resp *http.Response) (result network.PrivateLinkS // privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) privateLinkServiceListResultPreparer(ctx context.Context, plslr network.PrivateLinkServiceListResult) (*http.Request, error) { - if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 { + if plslr.NextLink == nil || len(pointer.StringDeref(plslr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(plslr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(plslr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/interface.go index 6ca0fd56bb5c..d18b182d57b3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/interface.go @@ -19,14 +19,14 @@ package privatelinkserviceclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2019-03-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/mockprivatelinkserviceclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/mockprivatelinkserviceclient/interface.go index eca997adfbc4..4225a88089d5 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/mockprivatelinkserviceclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/privatelinkserviceclient/mockprivatelinkserviceclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/azure_publicipclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/azure_publicipclient.go index 3f76b8425e4d..86722c5647d5 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/azure_publicipclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/azure_publicipclient.go @@ -23,13 +23,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -278,7 +278,7 @@ func (c *Client) listPublicIPAddress(ctx context.Context, resourceGroupName stri result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -415,12 +415,12 @@ func (c *Client) listResponder(resp *http.Response) (result network.PublicIPAddr // publicIPAddressListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) publicIPAddressListResultPreparer(ctx context.Context, lr network.PublicIPAddressListResult) (*http.Request, error) { - if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 { + if lr.NextLink == nil || len(pointer.StringDeref(lr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(lr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(lr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } @@ -543,7 +543,7 @@ func (c *Client) listAllPublicIPAddress(ctx context.Context) ([]network.PublicIP result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/interface.go index 670c07a0213b..241216151c9f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/interface.go @@ -19,14 +19,14 @@ package publicipclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/mockpublicipclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/mockpublicipclient/interface.go index eb22ba64c160..a0ad22b4877c 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/mockpublicipclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/publicipclient/mockpublicipclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/azure_routeclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/azure_routeclient.go index b071beee0a5c..1e63b53b7d52 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/azure_routeclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/azure_routeclient.go @@ -22,7 +22,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/interface.go index c552888a54d7..163436ec140f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/interface.go @@ -19,14 +19,14 @@ package routeclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/mockrouteclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/mockrouteclient/interface.go index 914a43eb8abd..12285f340a4b 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/mockrouteclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routeclient/mockrouteclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/azure_routetableclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/azure_routetableclient.go index fbfaba6f7b6a..1eea86106d87 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/azure_routetableclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/azure_routetableclient.go @@ -22,7 +22,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/interface.go index 1b467558939a..1ef8cfc08a32 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/interface.go @@ -19,14 +19,14 @@ package routetableclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/mockroutetableclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/mockroutetableclient/interface.go index 2f350b48cd9f..605683bcf199 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/mockroutetableclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/routetableclient/mockroutetableclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/azure_securitygroupclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/azure_securitygroupclient.go index dd76e6064f74..d81c3179a7d3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/azure_securitygroupclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/azure_securitygroupclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -203,7 +203,7 @@ func (c *Client) listSecurityGroup(ctx context.Context, resourceGroupName string result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -344,12 +344,12 @@ func (c *Client) listResponder(resp *http.Response) (result network.SecurityGrou // securityGroupListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) securityGroupListResultPreparer(ctx context.Context, sglr network.SecurityGroupListResult) (*http.Request, error) { - if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 { + if sglr.NextLink == nil || len(pointer.StringDeref(sglr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(sglr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(sglr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/interface.go index 807eefd2d240..983834c56401 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/interface.go @@ -19,14 +19,14 @@ package securitygroupclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/mocksecuritygroupclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/mocksecuritygroupclient/interface.go index 53c5b8e2fc24..dafbfbce4b7f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/mocksecuritygroupclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/securitygroupclient/mocksecuritygroupclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/azure_snapshotclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/azure_snapshotclient.go index b67d6ca1d725..f5c24bfa463e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/azure_snapshotclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/azure_snapshotclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -329,7 +329,7 @@ func (c *Client) listSnapshotsByResourceGroup(ctx context.Context, subsID, resou result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -355,12 +355,12 @@ func (c *Client) listResponder(resp *http.Response) (result compute.SnapshotList // SnapshotListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) SnapshotListResultPreparer(ctx context.Context, lr compute.SnapshotList) (*http.Request, error) { - if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 { + if lr.NextLink == nil || len(pointer.StringDeref(lr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(lr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(lr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/interface.go index cfd1236d76e8..1cf0ead02de4 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/interface.go @@ -19,7 +19,7 @@ package snapshotclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/mocksnapshotclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/mocksnapshotclient/interface.go index b72f36ef2a7a..b206f22e1d0e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/mocksnapshotclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/snapshotclient/mocksnapshotclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/storageaccountclient/azure_storageaccountclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/storageaccountclient/azure_storageaccountclient.go index 35e0bb6d185b..7a41f02decbb 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/storageaccountclient/azure_storageaccountclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/storageaccountclient/azure_storageaccountclient.go @@ -25,10 +25,10 @@ import ( "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -458,7 +458,7 @@ func (c *Client) ListStorageAccountByResourceGroup(ctx context.Context, subsID, result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -484,12 +484,12 @@ func (c *Client) listResponder(resp *http.Response) (result storage.AccountListR // StorageAccountResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) StorageAccountResultPreparer(ctx context.Context, lr storage.AccountListResult) (*http.Request, error) { - if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 { + if lr.NextLink == nil || len(pointer.StringDeref(lr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(lr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(lr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/azure_subnetclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/azure_subnetclient.go index d90f29f17a9b..7ea0c6a2f198 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/azure_subnetclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/azure_subnetclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -211,7 +211,7 @@ func (c *Client) listSubnet(ctx context.Context, resourceGroupName string, virtu result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -350,12 +350,12 @@ func (c *Client) listResponder(resp *http.Response) (result network.SubnetListRe // subnetListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) subnetListResultPreparer(ctx context.Context, lblr network.SubnetListResult) (*http.Request, error) { - if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 { + if lblr.NextLink == nil || len(pointer.StringDeref(lblr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(lblr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(lblr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/interface.go index 21967c0b74ea..fb6cc85656d7 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/interface.go @@ -19,14 +19,14 @@ package subnetclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( // APIVersion is the API version for network. - APIVersion = "2021-08-01" + APIVersion = "2022-07-01" // AzureStackCloudAPIVersion is the API version for Azure Stack AzureStackCloudAPIVersion = "2018-11-01" // AzureStackCloudName is the cloud name of Azure Stack diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/mocksubnetclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/mocksubnetclient/interface.go index a954980ec7d4..30f162e11593 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/mocksubnetclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/subnetclient/mocksubnetclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/azure_vmasclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/azure_vmasclient.go index 9e2ab7459143..2bb8ceafb42b 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/azure_vmasclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/azure_vmasclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -203,7 +203,7 @@ func (c *Client) listVMAS(ctx context.Context, resourceGroupName string) ([]comp result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -229,12 +229,12 @@ func (c *Client) listResponder(resp *http.Response) (result compute.Availability // availabilitySetListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) availabilitySetListResultPreparer(ctx context.Context, vmaslr compute.AvailabilitySetListResult) (*http.Request, error) { - if vmaslr.NextLink == nil || len(to.String(vmaslr.NextLink)) < 1 { + if vmaslr.NextLink == nil || len(pointer.StringDeref(vmaslr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(vmaslr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(vmaslr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/interface.go index 4e303f16bb1b..0206a204f9f9 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmasclient/interface.go @@ -19,7 +19,7 @@ package vmasclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/azure_vmclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/azure_vmclient.go index c3357964e31d..b429c6c9d19c 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/azure_vmclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/azure_vmclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -204,7 +204,7 @@ func (c *Client) listVM(ctx context.Context, resourceGroupName string) ([]comput result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -310,7 +310,7 @@ func (c *Client) listVmssFlexVMs(ctx context.Context, vmssFlexID string, statusO result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -324,34 +324,32 @@ func (c *Client) listVmssFlexVMs(ctx context.Context, vmssFlexID string, statusO } // Update updates a VirtualMachine. -func (c *Client) Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) *retry.Error { +func (c *Client) Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) (*compute.VirtualMachine, *retry.Error) { mc := metrics.NewMetricContext("vm", "update", resourceGroupName, c.subscriptionID, source) // Report errors if the client is rate limited. if !c.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() - return retry.GetRateLimitError(true, "VMUpdate") + return nil, retry.GetRateLimitError(true, "VMUpdate") } // Report errors if the client is throttled. if c.RetryAfterWriter.After(time.Now()) { mc.ThrottledCount() rerr := retry.GetThrottlingError("VMUpdate", "client throttled", c.RetryAfterWriter) - return rerr + return nil, rerr } - rerr := c.updateVM(ctx, resourceGroupName, VMName, parameters, source) + result, rerr := c.updateVM(ctx, resourceGroupName, VMName, parameters, source) mc.Observe(rerr) if rerr != nil { if rerr.IsThrottled() { // Update RetryAfterReader so that no more requests would be sent until RetryAfter expires. c.RetryAfterWriter = rerr.RetryAfter } - - return rerr + return result, rerr } - - return nil + return result, rerr } // UpdateAsync updates a VirtualMachine asynchronously @@ -393,7 +391,7 @@ func (c *Client) UpdateAsync(ctx context.Context, resourceGroupName string, VMNa } // WaitForUpdateResult waits for the response of the update request -func (c *Client) WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) *retry.Error { +func (c *Client) WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) (*compute.VirtualMachine, *retry.Error) { mc := metrics.NewMetricContext("vm", "wait_for_update_result", resourceGroupName, c.subscriptionID, source) response, err := c.armClient.WaitForAsyncOperationResult(ctx, future, "VMWaitForUpdateResult") mc.Observe(retry.NewErrorOrNil(false, err)) @@ -405,13 +403,24 @@ func (c *Client) WaitForUpdateResult(ctx context.Context, future *azure.Future, } else { klog.V(5).Infof("Received error in WaitForAsyncOperationResult: '%s', no response", err.Error()) } - return retry.GetError(response, err) + return nil, retry.GetError(response, err) } - return nil + if response != nil && response.StatusCode != http.StatusNoContent { + result, rerr := c.updateResponder(response) + if rerr != nil { + klog.V(5).Infof("Received error in WaitForAsyncOperationResult updateResponder: '%s'", rerr.Error()) + } + + return result, rerr + } + + result := &compute.VirtualMachine{} + result.Response = autorest.Response{Response: response} + return result, nil } // updateVM updates a VirtualMachine. -func (c *Client) updateVM(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) *retry.Error { +func (c *Client) updateVM(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) (*compute.VirtualMachine, *retry.Error) { resourceID := armclient.GetResourceID( c.subscriptionID, resourceGroupName, @@ -423,18 +432,20 @@ func (c *Client) updateVM(ctx context.Context, resourceGroupName string, VMName defer c.armClient.CloseResponse(ctx, response) if rerr != nil { klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "vm.put.request", resourceID, rerr.Error()) - return rerr + return nil, rerr } if response != nil && response.StatusCode != http.StatusNoContent { - _, rerr = c.updateResponder(response) + result, rerr := c.updateResponder(response) if rerr != nil { klog.V(5).Infof("Received error in %s: resourceID: %s, error: %s", "vm.put.respond", resourceID, rerr.Error()) - return rerr } + return result, rerr } - return nil + result := &compute.VirtualMachine{} + result.Response = autorest.Response{Response: response} + return result, nil } func (c *Client) updateResponder(resp *http.Response) (*compute.VirtualMachine, *retry.Error) { @@ -463,12 +474,12 @@ func (c *Client) listResponder(resp *http.Response) (result compute.VirtualMachi // vmListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) vmListResultPreparer(ctx context.Context, vmlr compute.VirtualMachineListResult) (*http.Request, error) { - if vmlr.NextLink == nil || len(to.String(vmlr.NextLink)) < 1 { + if vmlr.NextLink == nil || len(pointer.StringDeref(vmlr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(vmlr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(vmlr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/interface.go index 5c41811df258..c67de0c424f1 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/interface.go @@ -19,7 +19,7 @@ package vmclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" "sigs.k8s.io/cloud-provider-azure/pkg/retry" @@ -53,13 +53,13 @@ type Interface interface { CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine, source string) *retry.Error // Update updates a VirtualMachine. - Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) *retry.Error + Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) (*compute.VirtualMachine, *retry.Error) // UpdateAsync updates a VirtualMachine asynchronously UpdateAsync(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) (*azure.Future, *retry.Error) // WaitForUpdateResult waits for the response of the update request - WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) *retry.Error + WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) (*compute.VirtualMachine, *retry.Error) // Delete deletes a VirtualMachine. Delete(ctx context.Context, resourceGroupName string, VMName string) *retry.Error diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient/interface.go index 4ecd399f50f8..3384ce808f70 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmclient/mockvmclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" azure "github.com/Azure/go-autorest/autorest/azure" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" @@ -143,11 +143,12 @@ func (mr *MockInterfaceMockRecorder) ListVmssFlexVMsWithoutInstanceView(ctx, vms } // Update mocks base method. -func (m *MockInterface) Update(ctx context.Context, resourceGroupName, VMName string, parameters compute.VirtualMachineUpdate, source string) *retry.Error { +func (m *MockInterface) Update(ctx context.Context, resourceGroupName, VMName string, parameters compute.VirtualMachineUpdate, source string) (*compute.VirtualMachine, *retry.Error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Update", ctx, resourceGroupName, VMName, parameters, source) - ret0, _ := ret[0].(*retry.Error) - return ret0 + ret0, _ := ret[0].(*compute.VirtualMachine) + ret1, _ := ret[1].(*retry.Error) + return ret0, ret1 } // Update indicates an expected call of Update. @@ -172,11 +173,12 @@ func (mr *MockInterfaceMockRecorder) UpdateAsync(ctx, resourceGroupName, VMName, } // WaitForUpdateResult mocks base method. -func (m *MockInterface) WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) *retry.Error { +func (m *MockInterface) WaitForUpdateResult(ctx context.Context, future *azure.Future, resourceGroupName, source string) (*compute.VirtualMachine, *retry.Error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "WaitForUpdateResult", ctx, future, resourceGroupName, source) - ret0, _ := ret[0].(*retry.Error) - return ret0 + ret0, _ := ret[0].(*compute.VirtualMachine) + ret1, _ := ret[1].(*retry.Error) + return ret0, ret1 } // WaitForUpdateResult indicates an expected call of WaitForUpdateResult. diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/azure_vmsizeclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/azure_vmsizeclient.go index b6da2d422867..bf9510985e86 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/azure_vmsizeclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/azure_vmsizeclient.go @@ -23,7 +23,7 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/interface.go index 8c595d0f3f82..16f920713c7e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmsizeclient/interface.go @@ -19,7 +19,7 @@ package vmsizeclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/azure_vmssclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/azure_vmssclient.go index d2c194e4991e..e24a435a2ff7 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/azure_vmssclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/azure_vmssclient.go @@ -22,13 +22,13 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -207,7 +207,7 @@ func (c *Client) listVMSS(ctx context.Context, resourceGroupName string) ([]comp result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -366,12 +366,12 @@ func (c *Client) listResponder(resp *http.Response) (result compute.VirtualMachi // virtualMachineScaleSetListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) virtualMachineScaleSetListResultPreparer(ctx context.Context, vmsslr compute.VirtualMachineScaleSetListResult) (*http.Request, error) { - if vmsslr.NextLink == nil || len(to.String(vmsslr.NextLink)) < 1 { + if vmsslr.NextLink == nil || len(pointer.StringDeref(vmsslr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(vmsslr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(vmsslr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/interface.go index 12f414e1c9d8..c88e1ad06839 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/interface.go @@ -20,7 +20,7 @@ import ( "context" "net/http" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" "sigs.k8s.io/cloud-provider-azure/pkg/retry" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/mockvmssclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/mockvmssclient/interface.go index bba12610a00b..9cddb2d29584 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/mockvmssclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssclient/mockvmssclient/interface.go @@ -26,7 +26,7 @@ import ( http "net/http" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" azure "github.com/Azure/go-autorest/autorest/azure" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/azure_vmssvmclient.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/azure_vmssvmclient.go index 4f44248cedd6..6ab02bdce1a8 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/azure_vmssvmclient.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/azure_vmssvmclient.go @@ -22,14 +22,14 @@ import ( "strings" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/util/flowcontrol" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azclients "sigs.k8s.io/cloud-provider-azure/pkg/azureclients" "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/armclient" @@ -217,7 +217,7 @@ func (c *Client) listVMSSVM(ctx context.Context, resourceGroupName string, virtu result = append(result, page.Values()...) // Abort the loop when there's no nextLink in the response. - if to.String(page.Response().NextLink) == "" { + if pointer.StringDeref(page.Response().NextLink, "") == "" { break } @@ -383,12 +383,12 @@ func (c *Client) listResponder(resp *http.Response) (result compute.VirtualMachi // virtualMachineScaleSetListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. func (c *Client) virtualMachineScaleSetVMListResultPreparer(ctx context.Context, vmssvmlr compute.VirtualMachineScaleSetVMListResult) (*http.Request, error) { - if vmssvmlr.NextLink == nil || len(to.String(vmssvmlr.NextLink)) < 1 { + if vmssvmlr.NextLink == nil || len(pointer.StringDeref(vmssvmlr.NextLink, "")) < 1 { return nil, nil } decorators := []autorest.PrepareDecorator{ - autorest.WithBaseURL(to.String(vmssvmlr.NextLink)), + autorest.WithBaseURL(pointer.StringDeref(vmssvmlr.NextLink, "")), } return c.armClient.PrepareGetRequest(ctx, decorators...) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/interface.go index 22ec029c1d65..352c3aa642a3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/interface.go @@ -19,7 +19,7 @@ package vmssvmclient import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" "sigs.k8s.io/cloud-provider-azure/pkg/retry" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/mockvmssvmclient/interface.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/mockvmssvmclient/interface.go index 962c349f8960..ae571b4c723e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/mockvmssvmclient/interface.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/azureclients/vmssvmclient/mockvmssvmclient/interface.go @@ -25,7 +25,7 @@ import ( context "context" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" azure "github.com/Azure/go-autorest/autorest/azure" gomock "github.com/golang/mock/gomock" retry "sigs.k8s.io/cloud-provider-azure/pkg/retry" diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/cache/azure_cache.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/cache/azure_cache.go index d165c1f5f771..c60eaa036c8a 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/cache/azure_cache.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/cache/azure_cache.go @@ -62,28 +62,56 @@ func cacheKeyFunc(obj interface{}) (string, error) { return obj.(*AzureCacheEntry).Key, nil } +// Resource operations +type Resource interface { + Get(key string, crt AzureCacheReadType) (interface{}, error) + GetWithDeepCopy(key string, crt AzureCacheReadType) (interface{}, error) + Delete(key string) error + Set(key string, data interface{}) + Update(key string, data interface{}) + + GetStore() cache.Store + Lock() + Unlock() +} + // TimedCache is a cache with TTL. type TimedCache struct { - Store cache.Store - Lock sync.Mutex + Store cache.Store + MutexLock sync.RWMutex + TTL time.Duration + + resourceProvider Resource +} + +type ResourceProvider struct { Getter GetFunc - TTL time.Duration } -// NewTimedcache creates a new TimedCache. -func NewTimedcache(ttl time.Duration, getter GetFunc) (*TimedCache, error) { +// NewTimedCache creates a new azcache.Resource. +func NewTimedCache(ttl time.Duration, getter GetFunc, disabled bool) (Resource, error) { if getter == nil { return nil, fmt.Errorf("getter is not provided") } - return &TimedCache{ + provider := &ResourceProvider{ Getter: getter, + } + + if disabled { + return provider, nil + } + + timedCache := &TimedCache{ // switch to using NewStore instead of NewTTLStore so that we can // reuse entries for calls that are fine with reading expired/stalled data. // with NewTTLStore, entries are not returned if they have already expired. - Store: cache.NewStore(cacheKeyFunc), - TTL: ttl, - }, nil + Store: cache.NewStore(cacheKeyFunc), + MutexLock: sync.RWMutex{}, + TTL: ttl, + resourceProvider: provider, + } + return timedCache, nil } // getInternal returns AzureCacheEntry by key. If the key is not cached yet, @@ -100,8 +128,8 @@ func (t *TimedCache) getInternal(key string) (*AzureCacheEntry, error) { // lock here to ensure if entry doesn't exist, we add a new entry // avoiding overwrites - t.Lock.Lock() - defer t.Lock.Unlock() + t.Lock() + defer t.Unlock() // Another goroutine might have written the same key. entry, exists, err = t.Store.GetByKey(key) @@ -127,6 +155,10 @@ func (t *TimedCache) Get(key string, crt AzureCacheReadType) (interface{}, error return t.get(key, crt) } +func (c *ResourceProvider) Get(key string, _ AzureCacheReadType) (interface{}, error) { + return c.Getter(key) +} + // Get returns the requested item by key with deep copy. func (t *TimedCache) GetWithDeepCopy(key string, crt AzureCacheReadType) (interface{}, error) { data, err := t.get(key, crt) @@ -134,6 +166,10 @@ func (t *TimedCache) GetWithDeepCopy(key string, crt AzureCacheReadType) (interf return copied, err } +func (c *ResourceProvider) GetWithDeepCopy(key string, _ AzureCacheReadType) (interface{}, error) { + return c.Getter(key) +} + func (t *TimedCache) get(key string, crt AzureCacheReadType) (interface{}, error) { entry, err := t.getInternal(key) if err != nil { @@ -157,7 +193,7 @@ func (t *TimedCache) get(key string, crt AzureCacheReadType) (interface{}, error // Data is not cached yet, cache data is expired or requested force refresh // cache it by getter. entry is locked before getting to ensure concurrent // gets don't result in multiple ARM calls. - data, err := t.Getter(key) + data, err := t.resourceProvider.Get(key, CacheReadTypeDefault /* not matter */) if err != nil { return nil, err } @@ -177,6 +213,10 @@ func (t *TimedCache) Delete(key string) error { }) } +func (c *ResourceProvider) Delete(_ string) error { + return nil +} + // Set sets the data cache for the key. // It is only used for testing. func (t *TimedCache) Set(key string, data interface{}) { @@ -187,11 +227,42 @@ func (t *TimedCache) Set(key string, data interface{}) { }) } +func (c *ResourceProvider) Set(_ string, _ interface{}) {} + // Update updates the data cache for the key. func (t *TimedCache) Update(key string, data interface{}) { - _ = t.Store.Update(&AzureCacheEntry{ - Key: key, - Data: data, - CreatedOn: time.Now().UTC(), - }) + if entry, err := t.getInternal(key); err == nil { + entry.Lock.Lock() + defer entry.Lock.Unlock() + entry.Data = data + entry.CreatedOn = time.Now().UTC() + } else { + _ = t.Store.Update(&AzureCacheEntry{ + Key: key, + Data: data, + CreatedOn: time.Now().UTC(), + }) + } +} + +func (c *ResourceProvider) Update(_ string, _ interface{}) {} + +func (t *TimedCache) GetStore() cache.Store { + return t.Store } + +func (c *ResourceProvider) GetStore() cache.Store { + return nil +} + +func (t *TimedCache) Lock() { + t.MutexLock.Lock() +} + +func (t *TimedCache) Unlock() { + t.MutexLock.Unlock() +} + +func (c *ResourceProvider) Lock() {} + +func (c *ResourceProvider) Unlock() {} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/consts.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/consts.go index 04838b5d1d3c..c9e075d2fb13 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/consts.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/consts.go @@ -19,7 +19,6 @@ package consts import ( "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage" ) @@ -128,8 +127,10 @@ const ( TagKeyValueDelimiter = "=" // VMSetNamesSharingPrimarySLBDelimiter is the delimiter of vmSet names sharing the primary SLB VMSetNamesSharingPrimarySLBDelimiter = "," - // PremiumV2_LRS type for Azure Disk - PremiumV2LRS = compute.DiskStorageAccountTypes("PremiumV2_LRS") + // ProvisioningStateDeleting ... + ProvisioningStateDeleting = "Deleting" + // ProvisioningStateSucceeded ... + ProvisioningStateSucceeded = "Succeeded" ) // cache @@ -193,6 +194,15 @@ const ( BackoffJitterDefault = 1.0 ) +// IP family variables +const ( + IPVersionIPv6 bool = true + IPVersionIPv4 bool = false + IPVersionIPv4String string = "IPv4" + IPVersionIPv6String string = "IPv6" + IPVersionDualStackString string = "DualStack" +) + // LB variables for dual-stack var ( // Service.Spec.LoadBalancerIP has been deprecated and may be removed in a future release. Those two annotations are introduced as alternatives to set IPv4/IPv6 LoadBalancer IPs. @@ -201,12 +211,20 @@ var ( false: "service.beta.kubernetes.io/azure-load-balancer-ipv4", true: "service.beta.kubernetes.io/azure-load-balancer-ipv6", } + // ServiceAnnotationPIPName specifies the pip that will be applied to load balancer + ServiceAnnotationPIPNameDualStack = map[bool]string{ + false: "service.beta.kubernetes.io/azure-pip-name", + true: "service.beta.kubernetes.io/azure-pip-name-ipv6", + } + // ServiceAnnotationPIPPrefixID specifies the pip prefix that will be applied to the load balancer. + ServiceAnnotationPIPPrefixIDDualStack = map[bool]string{ + false: "service.beta.kubernetes.io/azure-pip-prefix-id", + true: "service.beta.kubernetes.io/azure-pip-prefix-id-ipv6", + } ) // load balancer const ( - // PreConfiguredBackendPoolLoadBalancerTypesNone means that the load balancers are not pre-configured - PreConfiguredBackendPoolLoadBalancerTypesNone = "" // PreConfiguredBackendPoolLoadBalancerTypesInternal means that the `internal` load balancers are pre-configured PreConfiguredBackendPoolLoadBalancerTypesInternal = "internal" // PreConfiguredBackendPoolLoadBalancerTypesExternal means that the `external` load balancers are pre-configured @@ -232,7 +250,7 @@ const ( // ServiceAnnotationLoadBalancerMode is the annotation used on the service to specify // which load balancer should be associated with the service. This is valid when using the basic - // load balancer or turn on the multiple standard load balancers mode, or it would be ignored. + // sku load balancer, or it would be ignored. // 1. Default mode - service has no annotation ("service.beta.kubernetes.io/azure-load-balancer-mode") // In this case the Loadbalancer of the primary VMSS/VMAS is selected. // 2. "__auto__" mode - service is annotated with __auto__ value, this when loadbalancer from any VMSS/VMAS @@ -260,12 +278,6 @@ const ( // to specify the resource group of load balancer objects that are not in the same resource group as the cluster. ServiceAnnotationLoadBalancerResourceGroup = "service.beta.kubernetes.io/azure-load-balancer-resource-group" - // ServiceAnnotationPIPName specifies the pip that will be applied to load balancer - ServiceAnnotationPIPName = "service.beta.kubernetes.io/azure-pip-name" - - // ServiceAnnotationPIPPrefixID specifies the pip prefix that will be applied to the load balancer. - ServiceAnnotationPIPPrefixID = "service.beta.kubernetes.io/azure-pip-prefix-id" - // ServiceAnnotationIPTagsForPublicIP specifies the iptags used when dynamically creating a public ip ServiceAnnotationIPTagsForPublicIP = "service.beta.kubernetes.io/azure-pip-ip-tags" @@ -312,11 +324,15 @@ const ( // If omitted, the default value is false ServiceAnnotationDisableLoadBalancerFloatingIP = "service.beta.kubernetes.io/azure-disable-load-balancer-floating-ip" - // ServiceAnnotationAzurePIPTags sets the additional Public IPs (split by comma) besides the service's Public IP configured on LoadBalancer. + // ServiceAnnotationAdditionalPublicIPs sets the additional Public IPs (split by comma) besides the service's Public IP configured on LoadBalancer. // These additional Public IPs would be consumed by kube-proxy to configure the iptables rules on each node. Note they would not be configured // automatically on Azure LoadBalancer. Instead, they need to be configured manually (e.g. on Azure cross-region LoadBalancer by another operator). ServiceAnnotationAdditionalPublicIPs = "service.beta.kubernetes.io/azure-additional-public-ips" + // ServiceAnnotationLoadBalancerConfigurations is the list of load balancer configurations the service can use. + // The list is separated by comma. It will be omitted if multi-slb is not used. + ServiceAnnotationLoadBalancerConfigurations = "service.beta.kubernetes.io/azure-load-balancer-configurations" + // ServiceTagKey is the service key applied for public IP tags. ServiceTagKey = "k8s-azure-service" LegacyServiceTagKey = "service" @@ -352,6 +368,8 @@ const ( FrontendIPConfigNameMaxLength = 80 // LoadBalancerRuleNameMaxLength is the max length of the load balancing rule LoadBalancerRuleNameMaxLength = 80 + // IPFamilySuffixLength is the length of suffix length of IP family ("-IPv4", "-IPv6") + IPFamilySuffixLength = 5 // LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration is the lb backend pool config type node IP configuration LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration = "nodeIPConfiguration" @@ -360,9 +378,6 @@ const ( // LoadBalancerBackendPoolConfigurationTypePODIP is the lb backend pool config type pod ip // TODO (nilo19): support pod IP in the future LoadBalancerBackendPoolConfigurationTypePODIP = "podIP" - - // To get pip, we need both resource group name and pip name, key in cache has format: pip_rg:pip_name - PIPCacheKeySeparator = ":" ) // error messages @@ -383,6 +398,8 @@ const ( CannotUpdateVMBeingDeletedMessagePrefix = "'Put on Virtual Machine Scale Set VM Instance' is not allowed on Virtual Machine Scale Set" // CannotUpdateVMBeingDeletedMessageSuffix is the suffix of the error message that the request failed due to delete a VM that is being deleted CannotUpdateVMBeingDeletedMessageSuffix = "since it is marked for deletion" + // OperationPreemptedErrorCode is the error code returned for vm operation preempted errors + OperationPreemptedErrorCode = "OperationPreempted" ) // node ipam controller @@ -413,6 +430,9 @@ const ( const ( RouteNameFmt = "%s____%s" RouteNameSeparator = "____" + + // DefaultRouteUpdateIntervalInSeconds defines the route reconciling interval. + DefaultRouteUpdateIntervalInSeconds = 30 ) // cloud provider config secret @@ -518,3 +538,14 @@ const ( const ( VMSSTagForBatchOperation = "aks-managed-coordination" ) + +type LoadBalancerBackendPoolUpdateOperation string + +const ( + LoadBalancerBackendPoolUpdateOperationAdd LoadBalancerBackendPoolUpdateOperation = "add" + LoadBalancerBackendPoolUpdateOperationRemove LoadBalancerBackendPoolUpdateOperation = "remove" + + DefaultLoadBalancerBackendPoolUpdateIntervalInSeconds = 30 + + ServiceNameLabel = "kubernetes.io/service-name" +) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/helpers.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/helpers.go index b800e9c64458..9706b55aa901 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/helpers.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/helpers.go @@ -23,7 +23,6 @@ import ( "strings" v1 "k8s.io/api/core/v1" - "k8s.io/utils/net" ) // IsK8sServiceHasHAModeEnabled return if HA Mode is enabled in kubernetes service annotations @@ -36,10 +35,6 @@ func IsK8sServiceUsingInternalLoadBalancer(service *v1.Service) bool { return expectAttributeInSvcAnnotationBeEqualTo(service.Annotations, ServiceAnnotationLoadBalancerInternal, TrueAnnotationValue) } -func IsK8sServiceInternalIPv6(service *v1.Service) bool { - return IsK8sServiceUsingInternalLoadBalancer(service) && net.IsIPv6String(service.Spec.ClusterIP) -} - // IsK8sServiceDisableLoadBalancerFloatingIP return if floating IP in load balancer is disabled in kubernetes service annotations func IsK8sServiceDisableLoadBalancerFloatingIP(service *v1.Service) bool { return expectAttributeInSvcAnnotationBeEqualTo(service.Annotations, ServiceAnnotationDisableLoadBalancerFloatingIP, TrueAnnotationValue) @@ -60,6 +55,16 @@ func IsLBRuleOnK8sServicePortDisabled(annotations map[string]string, port int32) return expectAttributeInSvcAnnotationBeEqualTo(annotations, BuildAnnotationKeyForPort(port, PortAnnotationNoLBRule), TrueAnnotationValue), nil } +// IsPLSProxyProtocolEnabled return true if ServiceAnnotationPLSProxyProtocol is true +func IsPLSProxyProtocolEnabled(annotations map[string]string) bool { + return expectAttributeInSvcAnnotationBeEqualTo(annotations, ServiceAnnotationPLSProxyProtocol, TrueAnnotationValue) +} + +// IsPLSEnabled return true if ServiceAnnotationPLSCreation is true +func IsPLSEnabled(annotations map[string]string) bool { + return expectAttributeInSvcAnnotationBeEqualTo(annotations, ServiceAnnotationPLSCreation, TrueAnnotationValue) +} + // Getint32ValueFromK8sSvcAnnotation get health probe configuration for port func Getint32ValueFromK8sSvcAnnotation(annotations map[string]string, key string, validators ...Int32BusinessValidator) (*int32, error) { val, err := GetAttributeValueInSvcAnnotation(annotations, key) @@ -90,10 +95,10 @@ type Int32BusinessValidator func(*int32) error // getInt32FromAnnotations parse integer value from annotation and return an reference to int32 object func extractInt32FromString(val string, businessValidator ...Int32BusinessValidator) (*int32, error) { val = strings.TrimSpace(val) - errKey := fmt.Errorf("%s value must be a whole number", val) + errKey := fmt.Sprintf("%s value must be a whole number", val) toInt, err := strconv.ParseInt(val, 10, 32) if err != nil { - return nil, fmt.Errorf("error value: %w: %v", err, errKey) + return nil, fmt.Errorf("error value: %w: %s", err, errKey) } parsedInt := int32(toInt) for _, validator := range businessValidator { @@ -132,3 +137,17 @@ func expectAttributeInSvcAnnotationBeEqualTo(annotations map[string]string, key } return false } + +// getLoadBalancerConfigurationsNames parse the annotation and return the names of the load balancer configurations. +func GetLoadBalancerConfigurationsNames(service *v1.Service) []string { + var names []string + for key, lbConfig := range service.Annotations { + if strings.EqualFold(key, ServiceAnnotationLoadBalancerConfigurations) { + names = append(names, strings.Split(lbConfig, ",")...) + } + } + for i := range names { + names[i] = strings.ToLower(strings.TrimSpace(names[i])) + } + return names +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/nodemanager/nodemanager.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/nodemanager/nodemanager.go deleted file mode 100644 index 898c3dd7affd..000000000000 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/nodemanager/nodemanager.go +++ /dev/null @@ -1,753 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package nodemanager - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "strings" - "time" - - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/equality" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/strategicpatch" - "k8s.io/apimachinery/pkg/util/wait" - coreinformers "k8s.io/client-go/informers/core/v1" - clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/scheme" - v1core "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/tools/cache" - "k8s.io/client-go/tools/record" - clientretry "k8s.io/client-go/util/retry" - cloudprovider "k8s.io/cloud-provider" - cloudproviderapi "k8s.io/cloud-provider/api" - cloudnodeutil "k8s.io/cloud-provider/node/helpers" - nodeutil "k8s.io/component-helpers/node/util" - "k8s.io/klog/v2" - - "sigs.k8s.io/cloud-provider-azure/pkg/consts" -) - -// NodeProvider defines the interfaces for node provider. -type NodeProvider interface { - // NodeAddresses returns the addresses of the specified instance. - NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.NodeAddress, error) - // InstanceID returns the cloud provider ID of the specified instance. - InstanceID(ctx context.Context, name types.NodeName) (string, error) - // InstanceType returns the type of the specified instance. - InstanceType(ctx context.Context, name types.NodeName) (string, error) - // GetZone returns the Zone containing the current failure zone and locality region that the program is running in - GetZone(ctx context.Context, name types.NodeName) (cloudprovider.Zone, error) - // GetPlatformSubFaultDomain returns the PlatformSubFaultDomain from IMDS if set. - GetPlatformSubFaultDomain() (string, error) -} - -// labelReconcileInfo lists Node labels to reconcile, and how to reconcile them. -// primaryKey and secondaryKey are keys of labels to reconcile. -// - If both keys exist, but their values don't match. Use the value from the -// primaryKey as the source of truth to reconcile. -// - If ensureSecondaryExists is true, and the secondaryKey does not -// exist, secondaryKey will be added with the value of the primaryKey. -var labelReconcileInfo = []struct { - primaryKey string - secondaryKey string - ensureSecondaryExists bool -}{} - -// UpdateNodeSpecBackoff is the back configure for node update. -var UpdateNodeSpecBackoff = wait.Backoff{ - Steps: 20, - Duration: 50 * time.Millisecond, - Jitter: 1.0, -} - -var updateNetworkConditionBackoff = wait.Backoff{ - Steps: 5, // Maximum number of retries. - Duration: 100 * time.Millisecond, - Jitter: 1.0, -} - -// CloudNodeController reconciles node information. -type CloudNodeController struct { - nodeName string - waitForRoutes bool - nodeProvider NodeProvider - nodeInformer coreinformers.NodeInformer - kubeClient clientset.Interface - recorder record.EventRecorder - - nodeStatusUpdateFrequency time.Duration -} - -// NewCloudNodeController creates a CloudNodeController object -func NewCloudNodeController( - nodeName string, - nodeInformer coreinformers.NodeInformer, - kubeClient clientset.Interface, - nodeProvider NodeProvider, - nodeStatusUpdateFrequency time.Duration, - waitForRoutes bool) *CloudNodeController { - - eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "cloud-node-controller"}) - eventBroadcaster.StartLogging(klog.Infof) - if kubeClient != nil { - klog.V(0).Infof("Sending events to api server.") - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) - } else { - klog.V(0).Infof("No api server defined - no events will be sent to API server.") - } - - cnc := &CloudNodeController{ - nodeName: nodeName, - nodeInformer: nodeInformer, - kubeClient: kubeClient, - recorder: recorder, - nodeProvider: nodeProvider, - waitForRoutes: waitForRoutes, - nodeStatusUpdateFrequency: nodeStatusUpdateFrequency, - } - - // Use shared informer to listen to add/update of nodes. Note that any nodes - // that exist before node controller starts will show up in the update method - _, _ = cnc.nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { cnc.AddCloudNode(context.TODO(), obj) }, - UpdateFunc: func(oldObj, newObj interface{}) { cnc.UpdateCloudNode(context.TODO(), oldObj, newObj) }, - }) - - return cnc -} - -// Run controller updates newly registered nodes with information -// from the cloud provider. This call is blocking so should be called -// via a goroutine -func (cnc *CloudNodeController) Run(stopCh <-chan struct{}) { - defer utilruntime.HandleCrash() - - // The following loops run communicate with the APIServer with a worst case complexity - // of O(num_nodes) per cycle. These functions are justified here because these events fire - // very infrequently. DO NOT MODIFY this to perform frequent operations. - - // Start a loop to periodically update the node addresses obtained from the cloud - wait.Until(func() { cnc.UpdateNodeStatus(context.TODO()) }, cnc.nodeStatusUpdateFrequency, stopCh) -} - -// UpdateNodeStatus updates the node status, such as node addresses -func (cnc *CloudNodeController) UpdateNodeStatus(ctx context.Context) { - node, err := cnc.nodeInformer.Lister().Get(cnc.nodeName) - if err != nil { - // If node not found, just ignore it. - if apierrors.IsNotFound(err) { - return - } - - klog.Errorf("Error getting node %q from informer, err: %v", cnc.nodeName, err) - return - } - - err = cnc.updateNodeAddress(ctx, node) - if err != nil { - klog.Errorf("Error reconciling node address for node %q, err: %v", node.Name, err) - } - - err = cnc.reconcileNodeLabels(node) - if err != nil { - klog.Errorf("Error reconciling node labels for node %q, err: %v", node.Name, err) - } -} - -// reconcileNodeLabels reconciles node labels transitioning from beta to GA -func (cnc *CloudNodeController) reconcileNodeLabels(node *v1.Node) error { - if node.Labels == nil { - // Nothing to reconcile. - return nil - } - - labelsToUpdate := map[string]string{} - for _, r := range labelReconcileInfo { - primaryValue, primaryExists := node.Labels[r.primaryKey] - secondaryValue, secondaryExists := node.Labels[r.secondaryKey] - - if !primaryExists { - // The primary label key does not exist. This should not happen - // within our supported version skew range, when no external - // components/factors modifying the node object. Ignore this case. - continue - } - if secondaryExists && primaryValue != secondaryValue { - // Secondary label exists, but not consistent with the primary - // label. Need to reconcile. - labelsToUpdate[r.secondaryKey] = primaryValue - - } else if !secondaryExists && r.ensureSecondaryExists { - // Apply secondary label based on primary label. - labelsToUpdate[r.secondaryKey] = primaryValue - } - } - - if len(labelsToUpdate) == 0 { - return nil - } - - if !cloudnodeutil.AddOrUpdateLabelsOnNode(cnc.kubeClient, labelsToUpdate, node) { - return fmt.Errorf("failed update labels for node %+v", node) - } - - return nil -} - -// UpdateNodeAddress updates the nodeAddress of a single node -func (cnc *CloudNodeController) updateNodeAddress(ctx context.Context, node *v1.Node) error { - // Do not process nodes that are still tainted - cloudTaint := GetCloudTaint(node.Spec.Taints) - if cloudTaint != nil { - klog.V(5).Infof("This node %s is still tainted. Will not process.", node.Name) - return nil - } - - // Node that isn't present according to the cloud provider shouldn't have its address updated - exists, err := cnc.ensureNodeExistsByProviderID(ctx, node) - if err != nil { - // Continue to update node address when not sure the node is not exists - klog.Warningf("ensureNodeExistsByProviderID (node %s) reported an error (%v), continue to update its address", node.Name, err) - } else if !exists { - klog.V(4).Infof("The node %s is no longer present according to the cloud provider, do not process.", node.Name) - return nil - } - - nodeAddresses, err := cnc.getNodeAddressesByName(ctx, node) - if err != nil { - return fmt.Errorf("getting node addresses for node %q: %w", node.Name, err) - } - - if len(nodeAddresses) == 0 { - klog.V(5).Infof("Skipping node address update for node %q since cloud provider did not return any", node.Name) - return nil - } - - // Check if a hostname address exists in the cloud provided addresses - hostnameExists := false - for i := range nodeAddresses { - if nodeAddresses[i].Type == v1.NodeHostName { - hostnameExists = true - break - } - } - // If hostname was not present in cloud provided addresses, use the hostname - // from the existing node (populated by kubelet) - if !hostnameExists { - for _, addr := range node.Status.Addresses { - if addr.Type == v1.NodeHostName { - nodeAddresses = append(nodeAddresses, addr) - } - } - } - // If nodeIP was suggested by user, ensure that - // it can be found in the cloud as well (consistent with the behaviour in kubelet) - if nodeIP, ok := ensureNodeProvidedIPExists(node, nodeAddresses); ok { - if nodeIP == nil { - return fmt.Errorf("specified Node IP %s not found in cloudprovider for node %q", nodeAddresses, node.Name) - } - } - if !nodeAddressesChangeDetected(node.Status.Addresses, nodeAddresses) { - return nil - } - - newNode := node.DeepCopy() - newNode.Status.Addresses = nodeAddresses - _, _, err = PatchNodeStatus(cnc.kubeClient.CoreV1(), types.NodeName(node.Name), node, newNode) - if err != nil { - return fmt.Errorf("patching node with cloud ip addresses: %w", err) - } - - return nil -} - -// nodeModifier is used to carry changes to node objects across multiple attempts to update them -// in a retry-if-conflict loop. -type nodeModifier func(*v1.Node) - -// UpdateCloudNode handles node update event. -func (cnc *CloudNodeController) UpdateCloudNode(ctx context.Context, _, newObj interface{}) { - node, ok := newObj.(*v1.Node) - if !ok { - utilruntime.HandleError(fmt.Errorf("unexpected object type: %v", newObj)) - return - } - - // Skip other nodes other than cnc.nodeName. - if !strings.EqualFold(cnc.nodeName, node.Name) { - return - } - - cloudTaint := GetCloudTaint(node.Spec.Taints) - if cloudTaint == nil { - // The node has already been initialized so nothing to do. - return - } - - cnc.initializeNode(ctx, node) -} - -// AddCloudNode handles initializing new nodes registered with the cloud taint. -func (cnc *CloudNodeController) AddCloudNode(ctx context.Context, obj interface{}) { - node := obj.(*v1.Node) - - // Skip other nodes other than cnc.nodeName. - if !strings.EqualFold(cnc.nodeName, node.Name) { - return - } - - cloudTaint := GetCloudTaint(node.Spec.Taints) - if cloudTaint == nil { - klog.V(2).Infof("This node %s is registered without the cloud taint. Will not process.", node.Name) - return - } - - cnc.initializeNode(ctx, node) -} - -// This processes nodes that were added into the cluster, and cloud initialize them if appropriate -func (cnc *CloudNodeController) initializeNode(ctx context.Context, node *v1.Node) { - klog.Infof("Initializing node %s with cloud provider", node.Name) - curNode, err := cnc.kubeClient.CoreV1().Nodes().Get(ctx, node.Name, metav1.GetOptions{}) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to get node %s: %w", node.Name, err)) - return - } - - cloudTaint := GetCloudTaint(curNode.Spec.Taints) - if cloudTaint == nil { - // Node object received from event had the cloud taint but was outdated, - // the node has actually already been initialized. - return - } - - if cnc.waitForRoutes { - // Set node condition node NodeNetworkUnavailable=true so that Pods won't - // be scheduled to this node until routes have been created. - err = cnc.updateNetworkingCondition(node, false) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to patch condition for node %s: %w", node.Name, err)) - return - } - } - - var nodeModifiers []nodeModifier - err = clientretry.OnError(UpdateNodeSpecBackoff, func(err error) bool { - return err != nil && strings.HasPrefix(err.Error(), "failed to set node provider id") - }, func() error { - nodeModifiers, err = cnc.getNodeModifiersFromCloudProvider(ctx, curNode) - return err - }) - if err != nil { - // Instead of just logging the error, panic and node manager can restart - utilruntime.Must(fmt.Errorf("failed to initialize node %s at cloudprovider: %w", node.Name, err)) - return - } - - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - n.Spec.Taints = excludeCloudTaint(n.Spec.Taints) - }) - - err = clientretry.RetryOnConflict(UpdateNodeSpecBackoff, func() error { - curNode, err := cnc.kubeClient.CoreV1().Nodes().Get(ctx, node.Name, metav1.GetOptions{}) - if err != nil { - return err - } - - for _, modify := range nodeModifiers { - modify(curNode) - } - - _, err = cnc.kubeClient.CoreV1().Nodes().Update(ctx, curNode, metav1.UpdateOptions{}) - if err != nil { - return err - } - - // After adding, call UpdateNodeAddress to set the CloudProvider provided IPAddresses - // So that users do not see any significant delay in IP addresses being filled into the node - err = cnc.updateNodeAddress(ctx, curNode) - if err != nil { - return err - } - - klog.Infof("Successfully initialized node %s with cloud provider", node.Name) - return nil - }) - if err != nil { - utilruntime.HandleError(err) - return - } -} - -// getNodeModifiersFromCloudProvider returns a slice of nodeModifiers that update -// a node object with provider-specific information. -// All of the returned functions are idempotent, because they are used in a retry-if-conflict -// loop, meaning they could get called multiple times. -func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Context, node *v1.Node) ([]nodeModifier, error) { - var nodeModifiers []nodeModifier - - if node.Spec.ProviderID == "" { - providerID, err := cnc.nodeProvider.InstanceID(ctx, types.NodeName(node.Name)) - if err == nil { - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - if n.Spec.ProviderID == "" { - n.Spec.ProviderID = providerID - } - }) - } else { - // if we are not able to get node provider id, - // we return error here and retry in the caller initializeNode() - return nil, fmt.Errorf("failed to set node provider id: %w", err) - } - } - - nodeAddresses, err := cnc.getNodeAddressesByName(ctx, node) - if err != nil { - return nil, err - } - - // If user provided an IP address, ensure that IP address is found - // in the cloud provider before removing the taint on the node - if nodeIP, ok := ensureNodeProvidedIPExists(node, nodeAddresses); ok { - if nodeIP == nil { - return nil, errors.New("failed to find kubelet node IP from cloud provider") - } - } - - if instanceType, err := cnc.getInstanceTypeByName(ctx, node); err != nil { - return nil, err - } else if instanceType != "" { - klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelInstanceTypeStable, instanceType) - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - if n.Labels == nil { - n.Labels = map[string]string{} - } - n.Labels[v1.LabelInstanceTypeStable] = instanceType - }) - } - zone, err := cnc.getZoneByName(ctx, node) - if err != nil { - return nil, fmt.Errorf("failed to get zone from cloud provider: %w", err) - } - if zone.FailureDomain != "" { - klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, zone.FailureDomain) - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - if n.Labels == nil { - n.Labels = map[string]string{} - } - n.Labels[v1.LabelZoneFailureDomainStable] = zone.FailureDomain - }) - } - if zone.Region != "" { - klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegionStable, zone.Region) - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - if n.Labels == nil { - n.Labels = map[string]string{} - } - n.Labels[v1.LabelZoneRegionStable] = zone.Region - }) - } - platformSubFaultDomain, err := cnc.getPlatformSubFaultDomain() - if err != nil { - return nil, fmt.Errorf("failed to get platformSubFaultDomain: %w", err) - } - if platformSubFaultDomain != "" { - klog.V(2).Infof("Adding node label from cloud provider: %s=%s", consts.LabelPlatformSubFaultDomain, platformSubFaultDomain) - nodeModifiers = append(nodeModifiers, func(n *v1.Node) { - if n.Labels == nil { - n.Labels = map[string]string{} - } - n.Labels[consts.LabelPlatformSubFaultDomain] = platformSubFaultDomain - }) - } - - return nodeModifiers, nil -} - -func GetCloudTaint(taints []v1.Taint) *v1.Taint { - for _, taint := range taints { - if taint.Key == cloudproviderapi.TaintExternalCloudProvider { - return &taint - } - } - return nil -} - -func excludeCloudTaint(taints []v1.Taint) []v1.Taint { - newTaints := []v1.Taint{} - for _, taint := range taints { - if taint.Key == cloudproviderapi.TaintExternalCloudProvider { - continue - } - newTaints = append(newTaints, taint) - } - return newTaints -} - -// ensureNodeExistsByProviderID checks if the instance exists by the provider id, -// If provider id in spec is empty it calls instanceId with node name to get provider id -func (cnc *CloudNodeController) ensureNodeExistsByProviderID(ctx context.Context, node *v1.Node) (bool, error) { - providerID := node.Spec.ProviderID - if providerID == "" { - var err error - providerID, err = cnc.nodeProvider.InstanceID(ctx, types.NodeName(node.Name)) - if err != nil { - if errors.Is(err, cloudprovider.InstanceNotFound) { - return false, nil - } - return false, err - } - - if providerID == "" { - klog.Warningf("Cannot find valid providerID for node name %q, assuming non existence", node.Name) - return false, nil - } - } - - return true, nil -} - -func (cnc *CloudNodeController) getNodeAddressesByName(ctx context.Context, node *v1.Node) ([]v1.NodeAddress, error) { - nodeAddresses, err := cnc.nodeProvider.NodeAddresses(ctx, types.NodeName(node.Name)) - if err != nil { - return nil, fmt.Errorf("error fetching node by name %s: %w", node.Name, err) - } - return nodeAddresses, nil -} - -func nodeAddressesChangeDetected(addressSet1, addressSet2 []v1.NodeAddress) bool { - if len(addressSet1) != len(addressSet2) { - return true - } - addressMap1 := map[v1.NodeAddressType]string{} - - for i := range addressSet1 { - addressMap1[addressSet1[i].Type] = addressSet1[i].Address - } - - for _, v := range addressSet2 { - if addressMap1[v.Type] != v.Address { - return true - } - } - return false -} - -func ensureNodeProvidedIPExists(node *v1.Node, nodeAddresses []v1.NodeAddress) (*v1.NodeAddress, bool) { - var nodeIP *v1.NodeAddress - nodeIPExists := false - if providedIP, ok := node.ObjectMeta.Annotations[cloudproviderapi.AnnotationAlphaProvidedIPAddr]; ok { - nodeIPExists = true - for i := range nodeAddresses { - if nodeAddresses[i].Address == providedIP { - nodeIP = &nodeAddresses[i] - break - } - } - } - return nodeIP, nodeIPExists -} - -func (cnc *CloudNodeController) getInstanceTypeByName(ctx context.Context, node *v1.Node) (string, error) { - instanceType, err := cnc.nodeProvider.InstanceType(ctx, types.NodeName(node.Name)) - if err != nil { - return "", fmt.Errorf("InstanceType: Error fetching by NodeName %s: %w", node.Name, err) - } - return instanceType, err -} - -// getZoneByName will attempt to get the zone of node using its providerID -// then it's name. If both attempts fail, an error is returned -func (cnc *CloudNodeController) getZoneByName(ctx context.Context, node *v1.Node) (cloudprovider.Zone, error) { - zone, err := cnc.nodeProvider.GetZone(ctx, types.NodeName(node.Name)) - if err != nil { - return cloudprovider.Zone{}, fmt.Errorf("Zone: Error fetching by NodeName %s: %w", node.Name, err) - } - - return zone, nil -} - -func (cnc *CloudNodeController) getPlatformSubFaultDomain() (string, error) { - subFD, err := cnc.nodeProvider.GetPlatformSubFaultDomain() - if err != nil { - return "", fmt.Errorf("cnc.getPlatformSubfaultDomain: %w", err) - } - return subFD, nil -} - -func (cnc *CloudNodeController) updateNetworkingCondition(node *v1.Node, networkReady bool) error { - _, condition := nodeutil.GetNodeCondition(&(node.Status), v1.NodeNetworkUnavailable) - if networkReady && condition != nil && condition.Status == v1.ConditionFalse { - klog.V(4).Infof("set node %v with NodeNetworkUnavailable=false was canceled because it is already set", node.Name) - return nil - } - - if !networkReady && condition != nil && condition.Status == v1.ConditionTrue { - klog.V(4).Infof("set node %v with NodeNetworkUnavailable=true was canceled because it is already set", node.Name) - return nil - } - - klog.V(2).Infof("Patching node status %v with %v previous condition was:%+v", node.Name, networkReady, condition) - - // either condition is not there, or has a value != to what we need - // start setting it - err := clientretry.RetryOnConflict(updateNetworkConditionBackoff, func() error { - var err error - // Patch could also fail, even though the chance is very slim. So we still do - // patch in the retry loop. - currentTime := metav1.Now() - if networkReady { - err = nodeutil.SetNodeCondition(cnc.kubeClient, types.NodeName(node.Name), v1.NodeCondition{ - Type: v1.NodeNetworkUnavailable, - Status: v1.ConditionFalse, - Reason: "NodeInitialization", - Message: "Don't need to wait for cloud routes", - LastTransitionTime: currentTime, - }) - } else { - err = nodeutil.SetNodeCondition(cnc.kubeClient, types.NodeName(node.Name), v1.NodeCondition{ - Type: v1.NodeNetworkUnavailable, - Status: v1.ConditionTrue, - Reason: "NodeInitialization", - Message: "Waiting for cloud routes", - LastTransitionTime: currentTime, - }) - } - if err != nil { - klog.V(4).Infof("Error updating node %s, retrying: %v", types.NodeName(node.Name), err) - } - return err - }) - - if err != nil { - klog.Errorf("Error updating node %s: %v", node.Name, err) - } - - return err -} - -// PatchNodeStatus patches node status. -func PatchNodeStatus(c v1core.CoreV1Interface, nodeName types.NodeName, oldNode *v1.Node, newNode *v1.Node) (*v1.Node, []byte, error) { - patchBytes, err := preparePatchBytesforNodeStatus(nodeName, oldNode, newNode) - if err != nil { - return nil, nil, err - } - - updatedNode, err := c.Nodes().Patch(context.TODO(), string(nodeName), types.StrategicMergePatchType, patchBytes, metav1.PatchOptions{}, "status") - if err != nil { - return nil, nil, fmt.Errorf("failed to patch status %q for node %q: %w", patchBytes, nodeName, err) - } - return updatedNode, patchBytes, nil -} - -func preparePatchBytesforNodeStatus(nodeName types.NodeName, oldNode *v1.Node, newNode *v1.Node) ([]byte, error) { - oldData, err := json.Marshal(oldNode) - if err != nil { - return nil, fmt.Errorf("failed to Marshal oldData for node %q: %w", nodeName, err) - } - - // NodeStatus.Addresses is incorrectly annotated as patchStrategy=merge, which - // will cause strategicpatch.CreateTwoWayMergePatch to create an incorrect patch - // if it changed. - manuallyPatchAddresses := (len(oldNode.Status.Addresses) > 0) && !equality.Semantic.DeepEqual(oldNode.Status.Addresses, newNode.Status.Addresses) - - // Reset spec to make sure only patch for Status or ObjectMeta is generated. - // Note that we don't reset ObjectMeta here, because: - // 1. This aligns with Nodes().UpdateStatus(). - // 2. Some component does use this to update node annotations. - diffNode := newNode.DeepCopy() - diffNode.Spec = oldNode.Spec - if manuallyPatchAddresses { - diffNode.Status.Addresses = oldNode.Status.Addresses - } - newData, err := json.Marshal(diffNode) - if err != nil { - return nil, fmt.Errorf("failed to Marshal newData for node %q: %w", nodeName, err) - } - - patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, v1.Node{}) - if err != nil { - return nil, fmt.Errorf("failed to CreateTwoWayMergePatch for node %q: %w", nodeName, err) - } - if manuallyPatchAddresses { - patchBytes, err = fixupPatchForNodeStatusAddresses(patchBytes, newNode.Status.Addresses) - if err != nil { - return nil, fmt.Errorf("failed to fix up NodeAddresses in patch for node %q: %w", nodeName, err) - } - } - - return patchBytes, nil -} - -// fixupPatchForNodeStatusAddresses adds a replace-strategy patch for Status.Addresses to -// the existing patch -func fixupPatchForNodeStatusAddresses(patchBytes []byte, addresses []v1.NodeAddress) ([]byte, error) { - // Given patchBytes='{"status": {"conditions": [ ... ], "phase": ...}}' and - // addresses=[{"type": "InternalIP", "address": "10.0.0.1"}], we need to generate: - // - // { - // "status": { - // "conditions": [ ... ], - // "phase": ..., - // "addresses": [ - // { - // "type": "InternalIP", - // "address": "10.0.0.1" - // }, - // { - // "$patch": "replace" - // } - // ] - // } - // } - - var patchMap map[string]interface{} - if err := json.Unmarshal(patchBytes, &patchMap); err != nil { - return nil, err - } - - addrBytes, err := json.Marshal(addresses) - if err != nil { - return nil, err - } - var addrArray []interface{} - if err := json.Unmarshal(addrBytes, &addrArray); err != nil { - return nil, err - } - addrArray = append(addrArray, map[string]interface{}{"$patch": "replace"}) - - status := patchMap["status"] - if status == nil { - status = map[string]interface{}{} - patchMap["status"] = status - } - statusMap, ok := status.(map[string]interface{}) - if !ok { - return nil, fmt.Errorf("unexpected data in patch") - } - statusMap["addresses"] = addrArray - - return json.Marshal(patchMap) -} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure.go index caacea3ef63f..a1ccec51a8e7 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure.go @@ -21,7 +21,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "net/http" "os" "strings" @@ -35,6 +34,7 @@ import ( "github.com/Azure/go-autorest/autorest/azure" v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/informers" @@ -76,14 +76,8 @@ import ( "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/zoneclient" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" - nodemanager "sigs.k8s.io/cloud-provider-azure/pkg/nodemanager" "sigs.k8s.io/cloud-provider-azure/pkg/retry" - // ensure the newly added package from azure-sdk-for-go is in vendor/ - _ "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/containerserviceclient" - // ensure the newly added package from azure-sdk-for-go is in vendor/ - _ "sigs.k8s.io/cloud-provider-azure/pkg/azureclients/deploymentclient" - "sigs.k8s.io/yaml" ) @@ -140,8 +134,8 @@ type Config struct { // the cloudprovider will try to add all nodes to a single backend pool which is forbidden. // In other words, if you use multiple agent pools (availability sets), you MUST set this field. PrimaryAvailabilitySetName string `json:"primaryAvailabilitySetName,omitempty" yaml:"primaryAvailabilitySetName,omitempty"` - // The type of azure nodes. Candidate values are: vmss and standard. - // If not set, it will be default to standard. + // The type of azure nodes. Candidate values are: vmss, standard and vmssflex. + // If not set, it will be default to vmss. VMType string `json:"vmType,omitempty" yaml:"vmType,omitempty"` // The name of the scale set that should be used as the load balancer backend. // If this is set, the Azure cloudprovider will only add nodes from that scale set to the load @@ -191,16 +185,6 @@ type Config struct { // Use instance metadata service where possible UseInstanceMetadata bool `json:"useInstanceMetadata,omitempty" yaml:"useInstanceMetadata,omitempty"` - // EnableMultipleStandardLoadBalancers determines the behavior of the standard load balancer. If set to true - // there would be one standard load balancer per VMAS or VMSS, which is similar with the behavior of the basic - // load balancer. Users could select the specific standard load balancer for their service by the service - // annotation `service.beta.kubernetes.io/azure-load-balancer-mode`, If set to false, the same standard load balancer - // would be shared by all services in the cluster. In this case, the mode selection annotation would be ignored. - EnableMultipleStandardLoadBalancers bool `json:"enableMultipleStandardLoadBalancers,omitempty" yaml:"enableMultipleStandardLoadBalancers,omitempty"` - // NodePoolsWithoutDedicatedSLB stores the VMAS/VMSS names that share the primary standard load balancer instead - // of having a dedicated one. This is useful only when EnableMultipleStandardLoadBalancers is set to true. - NodePoolsWithoutDedicatedSLB string `json:"nodePoolsWithoutDedicatedSLB,omitempty" yaml:"nodePoolsWithoutDedicatedSLB,omitempty"` - // Backoff exponent CloudProviderBackoffExponent float64 `json:"cloudProviderBackoffExponent,omitempty" yaml:"cloudProviderBackoffExponent,omitempty"` // Backoff jitter @@ -265,6 +249,76 @@ type Config struct { PutVMSSVMBatchSize int `json:"putVMSSVMBatchSize" yaml:"putVMSSVMBatchSize"` // PrivateLinkServiceResourceGroup determines the specific resource group of the private link services user want to use PrivateLinkServiceResourceGroup string `json:"privateLinkServiceResourceGroup,omitempty" yaml:"privateLinkServiceResourceGroup,omitempty"` + + // EnableMigrateToIPBasedBackendPoolAPI uses the migration API to migrate from NIC-based to IP-based backend pool. + // The migration API can provide a migration from NIC-based to IP-based backend pool without service downtime. + // If the API is not used, the migration will be done by decoupling all nodes on the backend pool and then re-attaching + // node IPs, which will introduce service downtime. The downtime increases with the number of nodes in the backend pool. + EnableMigrateToIPBasedBackendPoolAPI bool `json:"enableMigrateToIPBasedBackendPoolAPI" yaml:"enableMigrateToIPBasedBackendPoolAPI"` + + // MultipleStandardLoadBalancerConfigurations stores the properties regarding multiple standard load balancers. + // It will be ignored if LoadBalancerBackendPoolConfigurationType is nodeIPConfiguration. + // If the length is not 0, it is assumed the multiple standard load balancers mode is on. In this case, + // there must be one configuration named "" or an error will be reported. + MultipleStandardLoadBalancerConfigurations []MultipleStandardLoadBalancerConfiguration `json:"multipleStandardLoadBalancerConfigurations,omitempty" yaml:"multipleStandardLoadBalancerConfigurations,omitempty"` + + // DisableAPICallCache disables the cache for Azure API calls. It is for ARG support and not all resources will be disabled. + DisableAPICallCache bool `json:"disableAPICallCache,omitempty" yaml:"disableAPICallCache,omitempty"` + + // RouteUpdateIntervalInSeconds is the interval for updating routes. Default is 30 seconds. + RouteUpdateIntervalInSeconds int `json:"routeUpdateIntervalInSeconds,omitempty" yaml:"routeUpdateIntervalInSeconds,omitempty"` + // LoadBalancerBackendPoolUpdateIntervalInSeconds is the interval for updating load balancer backend pool of local services. Default is 30 seconds. + LoadBalancerBackendPoolUpdateIntervalInSeconds int `json:"loadBalancerBackendPoolUpdateIntervalInSeconds,omitempty" yaml:"loadBalancerBackendPoolUpdateIntervalInSeconds,omitempty"` +} + +// MultipleStandardLoadBalancerConfiguration stores the properties regarding multiple standard load balancers. +type MultipleStandardLoadBalancerConfiguration struct { + // Name of the public load balancer. There will be an internal load balancer + // created if needed, and the name will be `-internal`. The internal lb + // shares the same configurations as the external one. The internal lbs + // are not needed to be included in `MultipleStandardLoadBalancerConfigurations`. + // There must be a name of "" in the load balancer configuration list. + Name string `json:"name" yaml:"name"` + + MultipleStandardLoadBalancerConfigurationSpec + + MultipleStandardLoadBalancerConfigurationStatus +} + +// MultipleStandardLoadBalancerConfigurationSpec stores the properties regarding multiple standard load balancers. +type MultipleStandardLoadBalancerConfigurationSpec struct { + // This load balancer can have services placed on it. Defaults to true, + // can be set to false to drain and eventually remove a load balancer. + // This only affects services that will be using the LB. For services + // that is currently using the LB, they will not be affected. + AllowServicePlacement *bool `json:"allowServicePlacement" yaml:"allowServicePlacement"` + + // A string value that must specify the name of an existing vmSet. + // All nodes in the given vmSet will always be added to this load balancer. + // A vmSet can only be the primary vmSet for a single load balancer. + PrimaryVMSet string `json:"primaryVMSet" yaml:"primaryVMSet"` + + // Services that must match this selector can be placed on this load balancer. If not supplied, + // services with any labels can be created on the load balancer. + ServiceLabelSelector *metav1.LabelSelector `json:"serviceLabelSelector" yaml:"serviceLabelSelector"` + + // Services created in namespaces with the supplied label will be allowed to select that load balancer. + // If not supplied, services created in any namespaces can be created on that load balancer. + ServiceNamespaceSelector *metav1.LabelSelector `json:"serviceNamespaceSelector" yaml:"serviceNamespaceSelector"` + + // Nodes matching this selector will be preferentially added to the load balancers that + // they match selectors for. NodeSelector does not override primaryAgentPool for node allocation. + NodeSelector *metav1.LabelSelector `json:"nodeSelector" yaml:"nodeSelector"` +} + +// MultipleStandardLoadBalancerConfigurationStatus stores the properties regarding multiple standard load balancers. +type MultipleStandardLoadBalancerConfigurationStatus struct { + // ActiveServices stores the services that are supposed to use the load balancer. + ActiveServices sets.Set[string] `json:"activeServices" yaml:"activeServices"` + + // ActiveNodes stores the nodes that are supposed to be in the load balancer. + // It will be used in EnsureHostsInPool to make sure the given ones are in the backend pool. + ActiveNodes sets.Set[string] `json:"activeNodes" yaml:"activeNodes"` } type InitSecretConfig struct { @@ -326,22 +380,21 @@ type Cloud struct { // ipv6DualStack allows overriding for unit testing. It's normally initialized from featuregates ipv6DualStackEnabled bool - // isSHaredLoadBalancerSynced indicates if the reconcileSharedLoadBalancer has been run - isSharedLoadBalancerSynced bool // Lock for access to node caches, includes nodeZones, nodeResourceGroups, and unmanagedNodes. nodeCachesLock sync.RWMutex // nodeNames holds current nodes for tracking added nodes in VM caches. - nodeNames sets.String - // nodeZones is a mapping from Zone to a sets.String of Node's names in the Zone + nodeNames sets.Set[string] + // nodeZones is a mapping from Zone to a sets.Set[string] of Node's names in the Zone // it is updated by the nodeInformer - nodeZones map[string]sets.String + nodeZones map[string]sets.Set[string] // nodeResourceGroups holds nodes external resource groups nodeResourceGroups map[string]string // unmanagedNodes holds a list of nodes not managed by Azure cloud provider. - unmanagedNodes sets.String + unmanagedNodes sets.Set[string] // excludeLoadBalancerNodes holds a list of nodes that should be excluded from LoadBalancer. - excludeLoadBalancerNodes sets.String - nodePrivateIPs map[string]sets.String + excludeLoadBalancerNodes sets.Set[string] + nodePrivateIPs map[string]sets.Set[string] + nodePrivateIPToNodeNameMap map[string]string // nodeInformerSynced is for determining if the informer has synced. nodeInformerSynced cache.InformerSynced @@ -354,18 +407,24 @@ type Cloud struct { regionZonesMap map[string][]string refreshZonesLock sync.RWMutex - KubeClient clientset.Interface - eventBroadcaster record.EventBroadcaster - eventRecorder record.EventRecorder - routeUpdater *delayedRouteUpdater - - vmCache *azcache.TimedCache - lbCache *azcache.TimedCache - nsgCache *azcache.TimedCache - rtCache *azcache.TimedCache - pipCache *azcache.TimedCache + KubeClient clientset.Interface + eventBroadcaster record.EventBroadcaster + eventRecorder record.EventRecorder + routeUpdater batchProcessor + backendPoolUpdater batchProcessor + + vmCache azcache.Resource + lbCache azcache.Resource + nsgCache azcache.Resource + rtCache azcache.Resource + // public ip cache + // key: [resourceGroupName] + // Value: sync.Map of [pipName]*PublicIPAddress + pipCache azcache.Resource // use LB frontEndIpConfiguration ID as the key and search for PLS attached to the frontEnd - plsCache *azcache.TimedCache + plsCache azcache.Resource + // a timed cache storing storage account properties to avoid querying storage account frequently + storageAccountCache azcache.Resource // Add service lister to always get latest service serviceLister corelisters.ServiceLister @@ -374,6 +433,16 @@ type Cloud struct { *ManagedDiskController *controllerCommon + + // multipleStandardLoadBalancerConfigurationsSynced make sure the `reconcileMultipleStandardLoadBalancerConfigurations` + // runs only once every time the cloud provide restarts. + multipleStandardLoadBalancerConfigurationsSynced bool + // nodesWithCorrectLoadBalancerByPrimaryVMSet marks nodes that are matched with load balancers by primary vmSet. + nodesWithCorrectLoadBalancerByPrimaryVMSet sync.Map + multipleStandardLoadBalancersActiveServicesLock sync.Mutex + multipleStandardLoadBalancersActiveNodesLock sync.Mutex + localServiceNameToServiceInfoMap sync.Map + endpointSlicesCache sync.Map } // NewCloud returns a Cloud with initialized clients @@ -439,13 +508,14 @@ func (az *Cloud) configSecretMetadata(secretName, secretNamespace, cloudConfigKe func NewCloudFromSecret(ctx context.Context, clientBuilder cloudprovider.ControllerClientBuilder, secretName, secretNamespace, cloudConfigKey string) (cloudprovider.Interface, error) { az := &Cloud{ - nodeNames: sets.NewString(), - nodeZones: map[string]sets.String{}, - nodeResourceGroups: map[string]string{}, - unmanagedNodes: sets.NewString(), - routeCIDRs: map[string]string{}, - excludeLoadBalancerNodes: sets.NewString(), - nodePrivateIPs: map[string]sets.String{}, + nodeNames: sets.New[string](), + nodeZones: map[string]sets.Set[string]{}, + nodeResourceGroups: map[string]string{}, + unmanagedNodes: sets.New[string](), + routeCIDRs: map[string]string{}, + excludeLoadBalancerNodes: sets.New[string](), + nodePrivateIPs: map[string]sets.Set[string]{}, + nodePrivateIPToNodeNameMap: map[string]string{}, } az.configSecretMetadata(secretName, secretNamespace, cloudConfigKey) @@ -471,13 +541,14 @@ func NewCloudWithoutFeatureGates(ctx context.Context, configReader io.Reader, ca } az := &Cloud{ - nodeNames: sets.NewString(), - nodeZones: map[string]sets.String{}, - nodeResourceGroups: map[string]string{}, - unmanagedNodes: sets.NewString(), - routeCIDRs: map[string]string{}, - excludeLoadBalancerNodes: sets.NewString(), - nodePrivateIPs: map[string]sets.String{}, + nodeNames: sets.New[string](), + nodeZones: map[string]sets.Set[string]{}, + nodeResourceGroups: map[string]string{}, + unmanagedNodes: sets.New[string](), + routeCIDRs: map[string]string{}, + excludeLoadBalancerNodes: sets.New[string](), + nodePrivateIPs: map[string]sets.Set[string]{}, + nodePrivateIPToNodeNameMap: map[string]string{}, } err = az.InitializeCloudFromConfig(ctx, config, false, callFromCCM) @@ -508,8 +579,8 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, } if config.VMType == "" { - // default to standard vmType if not set. - config.VMType = consts.VMTypeStandard + // default to vmss vmType if not set. + config.VMType = consts.VMTypeVMSS } if config.RouteUpdateWaitingInSeconds <= 0 { @@ -524,12 +595,12 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, // The default cloud config type is cloudConfigTypeMerge. config.CloudConfigType = cloudConfigTypeMerge } else { - supportedCloudConfigTypes := sets.NewString( + supportedCloudConfigTypes := sets.New( string(cloudConfigTypeMerge), string(cloudConfigTypeFile), string(cloudConfigTypeSecret)) if !supportedCloudConfigTypes.Has(string(config.CloudConfigType)) { - return fmt.Errorf("cloudConfigType %v is not supported, supported values are %v", config.CloudConfigType, supportedCloudConfigTypes.List()) + return fmt.Errorf("cloudConfigType %v is not supported, supported values are %v", config.CloudConfigType, supportedCloudConfigTypes.UnsortedList()) } } @@ -538,12 +609,12 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, strings.EqualFold(config.LoadBalancerBackendPoolConfigurationType, consts.LoadBalancerBackendPoolConfigurationTypePODIP) { config.LoadBalancerBackendPoolConfigurationType = consts.LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration } else { - supportedLoadBalancerBackendPoolConfigurationTypes := sets.NewString( + supportedLoadBalancerBackendPoolConfigurationTypes := sets.New( strings.ToLower(consts.LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration), strings.ToLower(consts.LoadBalancerBackendPoolConfigurationTypeNodeIP), strings.ToLower(consts.LoadBalancerBackendPoolConfigurationTypePODIP)) if !supportedLoadBalancerBackendPoolConfigurationTypes.Has(strings.ToLower(config.LoadBalancerBackendPoolConfigurationType)) { - return fmt.Errorf("loadBalancerBackendPoolConfigurationType %s is not supported, supported values are %v", config.LoadBalancerBackendPoolConfigurationType, supportedLoadBalancerBackendPoolConfigurationTypes.List()) + return fmt.Errorf("loadBalancerBackendPoolConfigurationType %s is not supported, supported values are %v", config.LoadBalancerBackendPoolConfigurationType, supportedLoadBalancerBackendPoolConfigurationTypes.UnsortedList()) } } @@ -630,6 +701,12 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, az.LoadBalancerBackendPool = newBackendPoolTypeNodeIP(az) } + if az.useMultipleStandardLoadBalancers() { + if err := az.checkEnableMultipleStandardLoadBalancers(); err != nil { + return err + } + } + err = az.initCaches() if err != nil { return err @@ -642,8 +719,17 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, // updating routes and syncing zones only in CCM if callFromCCM { // start delayed route updater. - az.routeUpdater = newDelayedRouteUpdater(az, routeUpdateInterval) - go az.routeUpdater.run() + if az.RouteUpdateIntervalInSeconds == 0 { + az.RouteUpdateIntervalInSeconds = consts.DefaultRouteUpdateIntervalInSeconds + } + az.routeUpdater = newDelayedRouteUpdater(az, time.Duration(az.RouteUpdateIntervalInSeconds)*time.Second) + go az.routeUpdater.run(ctx) + + // start backend pool updater. + if az.useMultipleStandardLoadBalancers() { + az.backendPoolUpdater = newLoadBalancerBackendPoolUpdater(az, time.Duration(az.LoadBalancerBackendPoolUpdateIntervalInSeconds)*time.Second) + go az.backendPoolUpdater.run(ctx) + } // Azure Stack does not support zone at the moment // https://docs.microsoft.com/en-us/azure-stack/user/azure-stack-network-differences?view=azs-2102 @@ -655,8 +741,46 @@ func (az *Cloud) InitializeCloudFromConfig(ctx context.Context, config *Config, return err } - go az.refreshZones(az.syncRegionZonesMap) + go az.refreshZones(ctx, az.syncRegionZonesMap) + } + } + + return nil +} + +func (az *Cloud) useMultipleStandardLoadBalancers() bool { + return az.useStandardLoadBalancer() && len(az.MultipleStandardLoadBalancerConfigurations) > 0 +} + +func (az *Cloud) useSingleStandardLoadBalancer() bool { + return az.useStandardLoadBalancer() && len(az.MultipleStandardLoadBalancerConfigurations) == 0 +} + +// Multiple standard load balancer mode only supports IP-based load balancers. +func (az *Cloud) checkEnableMultipleStandardLoadBalancers() error { + if az.isLBBackendPoolTypeNodeIPConfig() { + return fmt.Errorf("multiple standard load balancers cannot be used with backend pool type %s", consts.LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration) + } + + names := sets.New[string]() + primaryVMSets := sets.New[string]() + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if names.Has(multiSLBConfig.Name) { + return fmt.Errorf("duplicated multiple standard load balancer configuration name %s", multiSLBConfig.Name) + } + names.Insert(multiSLBConfig.Name) + + if multiSLBConfig.PrimaryVMSet == "" { + return fmt.Errorf("multiple standard load balancer configuration %s must have primary VMSet", multiSLBConfig.Name) + } + if primaryVMSets.Has(multiSLBConfig.PrimaryVMSet) { + return fmt.Errorf("duplicated primary VMSet %s in multiple standard load balancer configurations %s", multiSLBConfig.PrimaryVMSet, multiSLBConfig.Name) } + primaryVMSets.Insert(multiSLBConfig.PrimaryVMSet) + } + + if az.LoadBalancerBackendPoolUpdateIntervalInSeconds == 0 { + az.LoadBalancerBackendPoolUpdateIntervalInSeconds = consts.DefaultLoadBalancerBackendPoolUpdateIntervalInSeconds } return nil @@ -675,6 +799,10 @@ func (az *Cloud) getPutVMSSVMBatchSize() int { } func (az *Cloud) initCaches() (err error) { + if az.Config.DisableAPICallCache { + klog.Infof("API call cache is disabled, ignore logs about cache operations") + } + az.vmCache, err = az.newVMCache() if err != nil { return err @@ -705,10 +833,17 @@ func (az *Cloud) initCaches() (err error) { return err } + if az.storageAccountCache, err = az.newStorageAccountCache(); err != nil { + return err + } return nil } func (az *Cloud) setLBDefaults(config *Config) error { + if config.LoadBalancerSku == "" { + config.LoadBalancerSku = consts.LoadBalancerSkuStandard + } + if strings.EqualFold(config.LoadBalancerSku, consts.LoadBalancerSkuStandard) { // Do not add master nodes to standard LB by default. if config.ExcludeMasterFromStandardLB == nil { @@ -921,7 +1056,7 @@ func ParseConfig(configReader io.Reader) (*Config, error) { return nil, nil } - configContents, err := ioutil.ReadAll(configReader) + configContents, err := io.ReadAll(configReader) if err != nil { return nil, err } @@ -934,6 +1069,18 @@ func ParseConfig(configReader io.Reader) (*Config, error) { // The resource group name may be in different cases from different Azure APIs, hence it is converted to lower here. // See more context at https://github.com/kubernetes/kubernetes/issues/71994. config.ResourceGroup = strings.ToLower(config.ResourceGroup) + + // these environment variables are injected by workload identity webhook + if tenantID := os.Getenv("AZURE_TENANT_ID"); tenantID != "" { + config.TenantID = tenantID + } + if clientID := os.Getenv("AZURE_CLIENT_ID"); clientID != "" { + config.AADClientID = clientID + } + if federatedTokenFile := os.Getenv("AZURE_FEDERATED_TOKEN_FILE"); federatedTokenFile != "" { + config.AADFederatedTokenFile = federatedTokenFile + config.UseFederatedWorkloadIdentityExtension = true + } return &config, nil } @@ -1007,20 +1154,10 @@ func initDiskControllers(az *Cloud) error { klog.V(2).Infof("attach/detach disk operation rate limit QPS: %f, Bucket: %d", qps, bucket) common := &controllerCommon{ - location: az.Location, - storageEndpointSuffix: az.Environment.StorageEndpointSuffix, - resourceGroup: az.ResourceGroup, - subscriptionID: az.SubscriptionID, - cloud: az, - lockMap: newLockMap(), - diskOpRateLimiter: flowcontrol.NewTokenBucketRateLimiter(qps, bucket), - } - - if az.HasExtendedLocation() { - common.extendedLocation = &ExtendedLocation{ - Name: az.ExtendedLocationName, - Type: az.ExtendedLocationType, - } + cloud: az, + lockMap: newLockMap(), + diskOpRateLimiter: flowcontrol.NewTokenBucketRateLimiter(qps, bucket), + AttachDetachInitialDelayInMs: defaultAttachDetachInitialDelayInMs, } az.ManagedDiskController = &ManagedDiskController{common: common} @@ -1068,6 +1205,8 @@ func (az *Cloud) SetInformers(informerFactory informers.SharedInformerFactory) { az.nodeInformerSynced = nodeInformer.HasSynced az.serviceLister = informerFactory.Core().V1().Services().Lister() + + az.setUpEndpointSlicesInformer(informerFactory) } // updateNodeCaches updates local cache for node's zones and external resource groups. @@ -1080,7 +1219,7 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { az.nodeNames.Delete(prevNode.ObjectMeta.Name) // Remove from nodeZones cache. - prevZone, ok := prevNode.ObjectMeta.Labels[consts.LabelFailureDomainBetaZone] + prevZone, ok := prevNode.ObjectMeta.Labels[v1.LabelTopologyZone] if ok && az.isAvailabilityZone(prevZone) { az.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name) if az.nodeZones[prevZone].Len() == 0 { @@ -1108,12 +1247,14 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { // if the node is being deleted from the cluster, exclude it from load balancers if newNode == nil { az.excludeLoadBalancerNodes.Insert(prevNode.ObjectMeta.Name) + az.nodesWithCorrectLoadBalancerByPrimaryVMSet.Delete(strings.ToLower(prevNode.ObjectMeta.Name)) } // Remove from nodePrivateIPs cache. for _, address := range getNodePrivateIPAddresses(prevNode) { klog.V(4).Infof("removing IP address %s of the node %s", address, prevNode.Name) az.nodePrivateIPs[prevNode.Name].Delete(address) + delete(az.nodePrivateIPToNodeNameMap, address) } } @@ -1122,10 +1263,10 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { az.nodeNames.Insert(newNode.ObjectMeta.Name) // Add to nodeZones cache. - newZone, ok := newNode.ObjectMeta.Labels[consts.LabelFailureDomainBetaZone] + newZone, ok := newNode.ObjectMeta.Labels[v1.LabelTopologyZone] if ok && az.isAvailabilityZone(newZone) { if az.nodeZones[newZone] == nil { - az.nodeZones[newZone] = sets.NewString() + az.nodeZones[newZone] = sets.New[string]() } az.nodeZones[newZone].Insert(newNode.ObjectMeta.Name) } @@ -1149,17 +1290,11 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { switch { case !isNodeManagedByCloudProvider: az.excludeLoadBalancerNodes.Insert(newNode.ObjectMeta.Name) + klog.V(6).Infof("excluding Node %q from LoadBalancer because it is not managed by cloud provider", newNode.ObjectMeta.Name) case hasExcludeBalancerLabel: az.excludeLoadBalancerNodes.Insert(newNode.ObjectMeta.Name) - - case !isNodeReady(newNode) && nodemanager.GetCloudTaint(newNode.Spec.Taints) == nil: - // If not in ready state and not a newly created node, add to excludeLoadBalancerNodes cache. - // New nodes (tainted with "node.cloudprovider.kubernetes.io/uninitialized") should not be - // excluded from load balancers regardless of their state, so as to reduce the number of - // VMSS API calls and not provoke VMScaleSetActiveModelsCountLimitReached. - // (https://github.com/kubernetes-sigs/cloud-provider-azure/issues/851) - az.excludeLoadBalancerNodes.Insert(newNode.ObjectMeta.Name) + klog.V(6).Infof("excluding Node %q from LoadBalancer because it has exclude-from-external-load-balancers label", newNode.ObjectMeta.Name) default: // Nodes not falling into the three cases above are valid backends and @@ -1170,17 +1305,21 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) { // Add to nodePrivateIPs cache for _, address := range getNodePrivateIPAddresses(newNode) { if az.nodePrivateIPs[newNode.Name] == nil { - az.nodePrivateIPs[newNode.Name] = sets.NewString() + az.nodePrivateIPs[newNode.Name] = sets.New[string]() + } + if az.nodePrivateIPToNodeNameMap == nil { + az.nodePrivateIPToNodeNameMap = make(map[string]string) } - klog.V(4).Infof("adding IP address %s of the node %s", address, newNode.Name) + klog.V(6).Infof("adding IP address %s of the node %s", address, newNode.Name) az.nodePrivateIPs[newNode.Name].Insert(address) + az.nodePrivateIPToNodeNameMap[address] = newNode.Name } } } // GetActiveZones returns all the zones in which k8s nodes are currently running. -func (az *Cloud) GetActiveZones() (sets.String, error) { +func (az *Cloud) GetActiveZones() (sets.Set[string], error) { if az.nodeInformerSynced == nil { return nil, fmt.Errorf("azure cloud provider doesn't have informers set") } @@ -1191,7 +1330,7 @@ func (az *Cloud) GetActiveZones() (sets.String, error) { return nil, fmt.Errorf("node informer is not synced when trying to GetActiveZones") } - zones := sets.NewString() + zones := sets.New[string]() for zone, nodes := range az.nodeZones { if len(nodes) > 0 { zones.Insert(zone) @@ -1228,7 +1367,7 @@ func (az *Cloud) GetNodeResourceGroup(nodeName string) (string, error) { } // GetNodeNames returns a set of all node names in the k8s cluster. -func (az *Cloud) GetNodeNames() (sets.String, error) { +func (az *Cloud) GetNodeNames() (sets.Set[string], error) { // Kubelet won't set az.nodeInformerSynced, return nil. if az.nodeInformerSynced == nil { return nil, nil @@ -1240,14 +1379,14 @@ func (az *Cloud) GetNodeNames() (sets.String, error) { return nil, fmt.Errorf("node informer is not synced when trying to GetNodeNames") } - return sets.NewString(az.nodeNames.List()...), nil + return sets.New(az.nodeNames.UnsortedList()...), nil } // GetResourceGroups returns a set of resource groups that all nodes are running on. -func (az *Cloud) GetResourceGroups() (sets.String, error) { +func (az *Cloud) GetResourceGroups() (sets.Set[string], error) { // Kubelet won't set az.nodeInformerSynced, always return configured resourceGroup. if az.nodeInformerSynced == nil { - return sets.NewString(az.ResourceGroup), nil + return sets.New(az.ResourceGroup), nil } az.nodeCachesLock.RLock() @@ -1256,7 +1395,7 @@ func (az *Cloud) GetResourceGroups() (sets.String, error) { return nil, fmt.Errorf("node informer is not synced when trying to GetResourceGroups") } - resourceGroups := sets.NewString(az.ResourceGroup) + resourceGroups := sets.New(az.ResourceGroup) for _, rg := range az.nodeResourceGroups { resourceGroups.Insert(rg) } @@ -1265,7 +1404,7 @@ func (az *Cloud) GetResourceGroups() (sets.String, error) { } // GetUnmanagedNodes returns a list of nodes not managed by Azure cloud provider (e.g. on-prem nodes). -func (az *Cloud) GetUnmanagedNodes() (sets.String, error) { +func (az *Cloud) GetUnmanagedNodes() (sets.Set[string], error) { // Kubelet won't set az.nodeInformerSynced, always return nil. if az.nodeInformerSynced == nil { return nil, nil @@ -1277,7 +1416,7 @@ func (az *Cloud) GetUnmanagedNodes() (sets.String, error) { return nil, fmt.Errorf("node informer is not synced when trying to GetUnmanagedNodes") } - return sets.NewString(az.unmanagedNodes.List()...), nil + return sets.New(az.unmanagedNodes.UnsortedList()...), nil } // ShouldNodeExcludedFromLoadBalancer returns true if node is unmanaged, in external resource group or labeled with "node.kubernetes.io/exclude-from-external-load-balancers". @@ -1301,11 +1440,15 @@ func (az *Cloud) ShouldNodeExcludedFromLoadBalancer(nodeName string) (bool, erro return az.excludeLoadBalancerNodes.Has(nodeName), nil } -func isNodeReady(node *v1.Node) bool { - for _, cond := range node.Status.Conditions { - if cond.Type == v1.NodeReady && cond.Status == v1.ConditionTrue { - return true +func (az *Cloud) getActiveNodesByLoadBalancerName(lbName string) sets.Set[string] { + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + defer az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), multiSLBConfig.Name) { + return multiSLBConfig.ActiveNodes } } - return false + + return sets.New[string]() } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_backoff.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_backoff.go index fadf4353dc8f..29cca3ee1c12 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_backoff.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_backoff.go @@ -17,28 +17,10 @@ limitations under the License. package provider import ( - "encoding/json" - "errors" - "fmt" - "net/http" "regexp" - "strings" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" - - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - cloudprovider "k8s.io/cloud-provider" - "k8s.io/klog/v2" - - azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" - "sigs.k8s.io/cloud-provider-azure/pkg/consts" - "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) var ( @@ -65,609 +47,3 @@ func (az *Cloud) Event(obj runtime.Object, eventType, reason, message string) { az.eventRecorder.Event(obj, eventType, reason, message) } } - -// GetVirtualMachineWithRetry invokes az.getVirtualMachine with exponential backoff retry -func (az *Cloud) GetVirtualMachineWithRetry(name types.NodeName, crt azcache.AzureCacheReadType) (compute.VirtualMachine, error) { - var machine compute.VirtualMachine - var retryErr error - err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { - machine, retryErr = az.getVirtualMachine(name, crt) - if errors.Is(retryErr, cloudprovider.InstanceNotFound) { - return true, cloudprovider.InstanceNotFound - } - if retryErr != nil { - klog.Errorf("GetVirtualMachineWithRetry(%s): backoff failure, will retry, err=%v", name, retryErr) - return false, nil - } - klog.V(2).Infof("GetVirtualMachineWithRetry(%s): backoff success", name) - return true, nil - }) - if errors.Is(err, wait.ErrWaitTimeout) { - err = retryErr - } - return machine, err -} - -// ListVirtualMachines invokes az.VirtualMachinesClient.List with exponential backoff retry -func (az *Cloud) ListVirtualMachines(resourceGroup string) ([]compute.VirtualMachine, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - - allNodes, rerr := az.VirtualMachinesClient.List(ctx, resourceGroup) - if rerr != nil { - klog.Errorf("VirtualMachinesClient.List(%v) failure with err=%v", resourceGroup, rerr) - return nil, rerr.Error() - } - klog.V(6).Infof("VirtualMachinesClient.List(%v) success", resourceGroup) - return allNodes, nil -} - -// getPrivateIPsForMachine is wrapper for optional backoff getting private ips -// list of a node by name -func (az *Cloud) getPrivateIPsForMachine(nodeName types.NodeName) ([]string, error) { - return az.getPrivateIPsForMachineWithRetry(nodeName) -} - -func (az *Cloud) getPrivateIPsForMachineWithRetry(nodeName types.NodeName) ([]string, error) { - var privateIPs []string - err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { - var retryErr error - privateIPs, retryErr = az.VMSet.GetPrivateIPsByNodeName(string(nodeName)) - if retryErr != nil { - // won't retry since the instance doesn't exist on Azure. - if errors.Is(retryErr, cloudprovider.InstanceNotFound) { - return true, retryErr - } - klog.Errorf("GetPrivateIPsByNodeName(%s): backoff failure, will retry,err=%v", nodeName, retryErr) - return false, nil - } - klog.V(3).Infof("GetPrivateIPsByNodeName(%s): backoff success", nodeName) - return true, nil - }) - return privateIPs, err -} - -func (az *Cloud) getIPForMachine(nodeName types.NodeName) (string, string, error) { - return az.GetIPForMachineWithRetry(nodeName) -} - -// GetIPForMachineWithRetry invokes az.getIPForMachine with exponential backoff retry -func (az *Cloud) GetIPForMachineWithRetry(name types.NodeName) (string, string, error) { - var ip, publicIP string - err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { - var retryErr error - ip, publicIP, retryErr = az.VMSet.GetIPByNodeName(string(name)) - if retryErr != nil { - klog.Errorf("GetIPForMachineWithRetry(%s): backoff failure, will retry,err=%v", name, retryErr) - return false, nil - } - klog.V(3).Infof("GetIPForMachineWithRetry(%s): backoff success", name) - return true, nil - }) - return ip, publicIP, err -} - -// CreateOrUpdateSecurityGroup invokes az.SecurityGroupsClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateSecurityGroup(sg network.SecurityGroup) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.SecurityGroupsClient.CreateOrUpdate(ctx, az.SecurityGroupResourceGroup, *sg.Name, sg, to.String(sg.Etag)) - klog.V(10).Infof("SecurityGroupsClient.CreateOrUpdate(%s): end", *sg.Name) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.nsgCache.Delete(*sg.Name) - return nil - } - - nsgJSON, _ := json.Marshal(sg) - klog.Warningf("CreateOrUpdateSecurityGroup(%s) failed: %v, NSG request: %s", to.String(sg.Name), rerr.Error(), string(nsgJSON)) - - // Invalidate the cache because ETAG precondition mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("SecurityGroup cache for %s is cleanup because of http.StatusPreconditionFailed", *sg.Name) - _ = az.nsgCache.Delete(*sg.Name) - } - - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("SecurityGroup cache for %s is cleanup because CreateOrUpdateSecurityGroup is canceled by another operation", *sg.Name) - _ = az.nsgCache.Delete(*sg.Name) - } - - return rerr.Error() -} - -func cleanupSubnetInFrontendIPConfigurations(lb *network.LoadBalancer) network.LoadBalancer { - if lb.LoadBalancerPropertiesFormat == nil || lb.FrontendIPConfigurations == nil { - return *lb - } - - frontendIPConfigurations := *lb.FrontendIPConfigurations - for i := range frontendIPConfigurations { - config := frontendIPConfigurations[i] - if config.FrontendIPConfigurationPropertiesFormat != nil && - config.Subnet != nil && - config.Subnet.ID != nil { - subnet := network.Subnet{ - ID: config.Subnet.ID, - } - if config.Subnet.Name != nil { - subnet.Name = config.FrontendIPConfigurationPropertiesFormat.Subnet.Name - } - config.FrontendIPConfigurationPropertiesFormat.Subnet = &subnet - frontendIPConfigurations[i] = config - continue - } - } - - lb.FrontendIPConfigurations = &frontendIPConfigurations - return *lb -} - -// CreateOrUpdateLB invokes az.LoadBalancerClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateLB(service *v1.Service, lb network.LoadBalancer) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - lb = cleanupSubnetInFrontendIPConfigurations(&lb) - - rgName := az.getLoadBalancerResourceGroup() - rerr := az.LoadBalancerClient.CreateOrUpdate(ctx, rgName, to.String(lb.Name), lb, to.String(lb.Etag)) - klog.V(10).Infof("LoadBalancerClient.CreateOrUpdate(%s): end", *lb.Name) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.lbCache.Delete(*lb.Name) - return nil - } - - lbJSON, _ := json.Marshal(lb) - klog.Warningf("LoadBalancerClient.CreateOrUpdate(%s) failed: %v, LoadBalancer request: %s", to.String(lb.Name), rerr.Error(), string(lbJSON)) - - // Invalidate the cache because ETAG precondition mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", to.String(lb.Name)) - _ = az.lbCache.Delete(*lb.Name) - } - - retryErrorMessage := rerr.Error().Error() - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", to.String(lb.Name)) - _ = az.lbCache.Delete(*lb.Name) - } - - // The LB update may fail because the referenced PIP is not in the Succeeded provisioning state - if strings.Contains(strings.ToLower(retryErrorMessage), strings.ToLower(consts.ReferencedResourceNotProvisionedMessageCode)) { - matches := pipErrorMessageRE.FindStringSubmatch(retryErrorMessage) - if len(matches) != 3 { - klog.Errorf("Failed to parse the retry error message %s", retryErrorMessage) - return rerr.Error() - } - pipRG, pipName := matches[1], matches[2] - klog.V(3).Infof("The public IP %s referenced by load balancer %s is not in Succeeded provisioning state, will try to update it", pipName, to.String(lb.Name)) - pip, _, err := az.getPublicIPAddress(pipRG, pipName, azcache.CacheReadTypeDefault) - if err != nil { - klog.Errorf("Failed to get the public IP %s in resource group %s: %v", pipName, pipRG, err) - return rerr.Error() - } - // Perform a dummy update to fix the provisioning state - err = az.CreateOrUpdatePIP(service, pipRG, pip) - if err != nil { - klog.Errorf("Failed to update the public IP %s in resource group %s: %v", pipName, pipRG, err) - return rerr.Error() - } - // Invalidate the LB cache, return the error, and the controller manager - // would retry the LB update in the next reconcile loop - _ = az.lbCache.Delete(*lb.Name) - } - - return rerr.Error() -} - -func (az *Cloud) CreateOrUpdateLBBackendPool(lbName string, backendPool network.BackendAddressPool) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - klog.V(4).Infof("CreateOrUpdateLBBackendPool: updating backend pool %s in LB %s", to.String(backendPool.Name), lbName) - rerr := az.LoadBalancerClient.CreateOrUpdateBackendPools(ctx, az.getLoadBalancerResourceGroup(), lbName, to.String(backendPool.Name), backendPool, to.String(backendPool.Etag)) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.lbCache.Delete(lbName) - return nil - } - - // Invalidate the cache because ETAG precondition mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", lbName) - _ = az.lbCache.Delete(lbName) - } - - retryErrorMessage := rerr.Error().Error() - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", lbName) - _ = az.lbCache.Delete(lbName) - } - - return rerr.Error() -} - -func (az *Cloud) DeleteLBBackendPool(lbName, backendPoolName string) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - klog.V(4).Infof("DeleteLBBackendPool: deleting backend pool %s in LB %s", backendPoolName, lbName) - rerr := az.LoadBalancerClient.DeleteLBBackendPool(ctx, az.getLoadBalancerResourceGroup(), lbName, backendPoolName) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.lbCache.Delete(lbName) - return nil - } - - // Invalidate the cache because ETAG precondition mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", lbName) - _ = az.lbCache.Delete(lbName) - } - - retryErrorMessage := rerr.Error().Error() - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", lbName) - _ = az.lbCache.Delete(lbName) - } - - return rerr.Error() -} - -// ListManagedLBs invokes az.LoadBalancerClient.List and filter out -// those that are not managed by cloud provider azure or not associated to a managed VMSet. -func (az *Cloud) ListManagedLBs(service *v1.Service, nodes []*v1.Node, clusterName string) ([]network.LoadBalancer, error) { - allLBs, err := az.ListLB(service) - if err != nil { - return nil, err - } - - if allLBs == nil { - klog.Warningf("ListManagedLBs: no LBs found") - return nil, nil - } - - // return early if wantLb=false - if nodes == nil { - klog.V(4).Infof("ListManagedLBs: return all LBs in the resource group %s, including unmanaged LBs", az.getLoadBalancerResourceGroup()) - return allLBs, nil - } - - agentPoolLBs := make([]network.LoadBalancer, 0) - agentPoolVMSetNames, err := az.VMSet.GetAgentPoolVMSetNames(nodes) - if err != nil { - return nil, fmt.Errorf("ListManagedLBs: failed to get agent pool vmSet names: %w", err) - } - - agentPoolVMSetNamesSet := sets.NewString() - if agentPoolVMSetNames != nil && len(*agentPoolVMSetNames) > 0 { - for _, vmSetName := range *agentPoolVMSetNames { - klog.V(6).Infof("ListManagedLBs: found agent pool vmSet name %s", vmSetName) - agentPoolVMSetNamesSet.Insert(strings.ToLower(vmSetName)) - } - } - - for _, lb := range allLBs { - vmSetNameFromLBName := az.mapLoadBalancerNameToVMSet(to.String(lb.Name), clusterName) - if strings.EqualFold(strings.TrimSuffix(to.String(lb.Name), consts.InternalLoadBalancerNameSuffix), clusterName) || - agentPoolVMSetNamesSet.Has(strings.ToLower(vmSetNameFromLBName)) { - agentPoolLBs = append(agentPoolLBs, lb) - klog.V(4).Infof("ListManagedLBs: found agent pool LB %s", to.String(lb.Name)) - } - } - - return agentPoolLBs, nil -} - -// ListLB invokes az.LoadBalancerClient.List with exponential backoff retry -func (az *Cloud) ListLB(service *v1.Service) ([]network.LoadBalancer, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - - rgName := az.getLoadBalancerResourceGroup() - allLBs, rerr := az.LoadBalancerClient.List(ctx, rgName) - if rerr != nil { - if rerr.IsNotFound() { - return nil, nil - } - az.Event(service, v1.EventTypeWarning, "ListLoadBalancers", rerr.Error().Error()) - klog.Errorf("LoadBalancerClient.List(%v) failure with err=%v", rgName, rerr) - return nil, rerr.Error() - } - klog.V(2).Infof("LoadBalancerClient.List(%v) success", rgName) - return allLBs, nil -} - -// ListPIP list the PIP resources in the given resource group -func (az *Cloud) ListPIP(service *v1.Service, pipResourceGroup string) ([]network.PublicIPAddress, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - - allPIPs, rerr := az.PublicIPAddressesClient.List(ctx, pipResourceGroup) - if rerr != nil { - if rerr.IsNotFound() { - return nil, nil - } - az.Event(service, v1.EventTypeWarning, "ListPublicIPs", rerr.Error().Error()) - klog.Errorf("PublicIPAddressesClient.List(%v) failure with err=%v", pipResourceGroup, rerr) - return nil, rerr.Error() - } - - klog.V(2).Infof("PublicIPAddressesClient.List(%v) success", pipResourceGroup) - return allPIPs, nil -} - -// CreateOrUpdatePIP invokes az.PublicIPAddressesClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdatePIP(service *v1.Service, pipResourceGroup string, pip network.PublicIPAddress) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.PublicIPAddressesClient.CreateOrUpdate(ctx, pipResourceGroup, to.String(pip.Name), pip) - klog.V(10).Infof("PublicIPAddressesClient.CreateOrUpdate(%s, %s): end", pipResourceGroup, to.String(pip.Name)) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.pipCache.Delete(az.getPIPCacheKey(pipResourceGroup, to.String(pip.Name))) - return nil - } - - pipJSON, _ := json.Marshal(pip) - klog.Warningf("PublicIPAddressesClient.CreateOrUpdate(%s, %s) failed: %s, PublicIP request: %s", pipResourceGroup, to.String(pip.Name), rerr.Error().Error(), string(pipJSON)) - az.Event(service, v1.EventTypeWarning, "CreateOrUpdatePublicIPAddress", rerr.Error().Error()) - - // Invalidate the cache because ETAG precondition mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("PublicIP cache for (%s, %s) is cleanup because of http.StatusPreconditionFailed", pipResourceGroup, to.String(pip.Name)) - _ = az.pipCache.Delete(az.getPIPCacheKey(pipResourceGroup, to.String(pip.Name))) - } - - retryErrorMessage := rerr.Error().Error() - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("PublicIP cache for (%s, %s) is cleanup because CreateOrUpdate is canceled by another operation", pipResourceGroup, to.String(pip.Name)) - _ = az.pipCache.Delete(az.getPIPCacheKey(pipResourceGroup, to.String(pip.Name))) - } - - return rerr.Error() -} - -// CreateOrUpdateInterface invokes az.InterfacesClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateInterface(service *v1.Service, nic network.Interface) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.InterfacesClient.CreateOrUpdate(ctx, az.ResourceGroup, *nic.Name, nic) - klog.V(10).Infof("InterfacesClient.CreateOrUpdate(%s): end", *nic.Name) - if rerr != nil { - klog.Errorf("InterfacesClient.CreateOrUpdate(%s) failed: %s", *nic.Name, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "CreateOrUpdateInterface", rerr.Error().Error()) - return rerr.Error() - } - - return nil -} - -// DeletePublicIP invokes az.PublicIPAddressesClient.Delete with exponential backoff retry -func (az *Cloud) DeletePublicIP(service *v1.Service, pipResourceGroup string, pipName string) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.PublicIPAddressesClient.Delete(ctx, pipResourceGroup, pipName) - if rerr != nil { - klog.Errorf("PublicIPAddressesClient.Delete(%s) failed: %s", pipName, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "DeletePublicIPAddress", rerr.Error().Error()) - - if strings.Contains(rerr.Error().Error(), consts.CannotDeletePublicIPErrorMessageCode) { - klog.Warningf("DeletePublicIP for public IP %s failed with error %v, this is because other resources are referencing the public IP. The deletion of the service will continue.", pipName, rerr.Error()) - return nil - } - return rerr.Error() - } - - // Invalidate the cache right after deleting - _ = az.pipCache.Delete(az.getPIPCacheKey(pipResourceGroup, pipName)) - return nil -} - -// DeleteLB invokes az.LoadBalancerClient.Delete with exponential backoff retry -func (az *Cloud) DeleteLB(service *v1.Service, lbName string) *retry.Error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rgName := az.getLoadBalancerResourceGroup() - rerr := az.LoadBalancerClient.Delete(ctx, rgName, lbName) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.lbCache.Delete(lbName) - return nil - } - - klog.Errorf("LoadBalancerClient.Delete(%s) failed: %s", lbName, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "DeleteLoadBalancer", rerr.Error().Error()) - return rerr -} - -// CreateOrUpdateRouteTable invokes az.RouteTablesClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateRouteTable(routeTable network.RouteTable) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.RouteTablesClient.CreateOrUpdate(ctx, az.RouteTableResourceGroup, az.RouteTableName, routeTable, to.String(routeTable.Etag)) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.rtCache.Delete(*routeTable.Name) - return nil - } - - rtJSON, _ := json.Marshal(routeTable) - klog.Warningf("RouteTablesClient.CreateOrUpdate(%s) failed: %v, RouteTable request: %s", to.String(routeTable.Name), rerr.Error(), string(rtJSON)) - - // Invalidate the cache because etag mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("Route table cache for %s is cleanup because of http.StatusPreconditionFailed", *routeTable.Name) - _ = az.rtCache.Delete(*routeTable.Name) - } - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("Route table cache for %s is cleanup because CreateOrUpdateRouteTable is canceled by another operation", *routeTable.Name) - _ = az.rtCache.Delete(*routeTable.Name) - } - klog.Errorf("RouteTablesClient.CreateOrUpdate(%s) failed: %v", az.RouteTableName, rerr.Error()) - return rerr.Error() -} - -// CreateOrUpdateRoute invokes az.RoutesClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateRoute(route network.Route) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.RoutesClient.CreateOrUpdate(ctx, az.RouteTableResourceGroup, az.RouteTableName, *route.Name, route, to.String(route.Etag)) - klog.V(10).Infof("RoutesClient.CreateOrUpdate(%s): end", *route.Name) - if rerr == nil { - _ = az.rtCache.Delete(az.RouteTableName) - return nil - } - - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("Route cache for %s is cleanup because of http.StatusPreconditionFailed", *route.Name) - _ = az.rtCache.Delete(az.RouteTableName) - } - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("Route cache for %s is cleanup because CreateOrUpdateRouteTable is canceled by another operation", *route.Name) - _ = az.rtCache.Delete(az.RouteTableName) - } - return rerr.Error() -} - -// DeleteRouteWithName invokes az.RoutesClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) DeleteRouteWithName(routeName string) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.RoutesClient.Delete(ctx, az.RouteTableResourceGroup, az.RouteTableName, routeName) - klog.V(10).Infof("RoutesClient.Delete(%s,%s): end", az.RouteTableName, routeName) - if rerr == nil { - return nil - } - - klog.Errorf("RoutesClient.Delete(%s, %s) failed: %v", az.RouteTableName, routeName, rerr.Error()) - return rerr.Error() -} - -// CreateOrUpdateVMSS invokes az.VirtualMachineScaleSetsClient.Update(). -func (az *Cloud) CreateOrUpdateVMSS(resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet) *retry.Error { - ctx, cancel := getContextWithCancel() - defer cancel() - - // When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error. - // Since it is being deleted, we shouldn't send more CreateOrUpdate requests for it. - klog.V(3).Infof("CreateOrUpdateVMSS: verify the status of the vmss being created or updated") - vmss, rerr := az.VirtualMachineScaleSetsClient.Get(ctx, resourceGroupName, VMScaleSetName) - if rerr != nil { - klog.Errorf("CreateOrUpdateVMSS: error getting vmss(%s): %v", VMScaleSetName, rerr) - return rerr - } - if vmss.ProvisioningState != nil && strings.EqualFold(*vmss.ProvisioningState, consts.VirtualMachineScaleSetsDeallocating) { - klog.V(3).Infof("CreateOrUpdateVMSS: found vmss %s being deleted, skipping", VMScaleSetName) - return nil - } - - rerr = az.VirtualMachineScaleSetsClient.CreateOrUpdate(ctx, resourceGroupName, VMScaleSetName, parameters) - klog.V(10).Infof("UpdateVmssVMWithRetry: VirtualMachineScaleSetsClient.CreateOrUpdate(%s): end", VMScaleSetName) - if rerr != nil { - klog.Errorf("CreateOrUpdateVMSS: error CreateOrUpdate vmss(%s): %v", VMScaleSetName, rerr) - return rerr - } - - return nil -} - -func (az *Cloud) CreateOrUpdatePLS(service *v1.Service, pls network.PrivateLinkService) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.PrivateLinkServiceClient.CreateOrUpdate(ctx, az.PrivateLinkServiceResourceGroup, to.String(pls.Name), pls, to.String(pls.Etag)) - if rerr == nil { - // Invalidate the cache right after updating - _ = az.plsCache.Delete(to.String((*pls.LoadBalancerFrontendIPConfigurations)[0].ID)) - return nil - } - - rtJSON, _ := json.Marshal(pls) - klog.Warningf("PrivateLinkServiceClient.CreateOrUpdate(%s) failed: %v, PrivateLinkService request: %s", to.String(pls.Name), rerr.Error(), string(rtJSON)) - - // Invalidate the cache because etag mismatch. - if rerr.HTTPStatusCode == http.StatusPreconditionFailed { - klog.V(3).Infof("Private link service cache for %s is cleanup because of http.StatusPreconditionFailed", to.String(pls.Name)) - _ = az.plsCache.Delete(to.String((*pls.LoadBalancerFrontendIPConfigurations)[0].ID)) - } - // Invalidate the cache because another new operation has canceled the current request. - if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { - klog.V(3).Infof("Private link service for %s is cleanup because CreateOrUpdatePrivateLinkService is canceled by another operation", to.String(pls.Name)) - _ = az.plsCache.Delete(to.String((*pls.LoadBalancerFrontendIPConfigurations)[0].ID)) - } - klog.Errorf("PrivateLinkServiceClient.CreateOrUpdate(%s) failed: %v", to.String(pls.Name), rerr.Error()) - return rerr.Error() -} - -// DeletePLS invokes az.PrivateLinkServiceClient.Delete with exponential backoff retry -func (az *Cloud) DeletePLS(service *v1.Service, plsName string, plsLBFrontendID string) *retry.Error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.PrivateLinkServiceClient.Delete(ctx, az.PrivateLinkServiceResourceGroup, plsName) - if rerr == nil { - // Invalidate the cache right after deleting - _ = az.plsCache.Delete(plsLBFrontendID) - return nil - } - - klog.Errorf("PrivateLinkServiceClient.DeletePLS(%s) failed: %s", plsName, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "DeletePrivateLinkService", rerr.Error().Error()) - return rerr -} - -// DeletePEConn invokes az.PrivateLinkServiceClient.DeletePEConnection with exponential backoff retry -func (az *Cloud) DeletePEConn(service *v1.Service, plsName string, peConnName string) *retry.Error { - ctx, cancel := getContextWithCancel() - defer cancel() - - rerr := az.PrivateLinkServiceClient.DeletePEConnection(ctx, az.PrivateLinkServiceResourceGroup, plsName, peConnName) - if rerr == nil { - return nil - } - - klog.Errorf("PrivateLinkServiceClient.DeletePEConnection(%s-%s) failed: %s", plsName, peConnName, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "DeletePrivateEndpointConnection", rerr.Error().Error()) - return rerr -} - -// CreateOrUpdateSubnet invokes az.SubnetClient.CreateOrUpdate with exponential backoff retry -func (az *Cloud) CreateOrUpdateSubnet(service *v1.Service, subnet network.Subnet) error { - ctx, cancel := getContextWithCancel() - defer cancel() - - var rg string - if len(az.VnetResourceGroup) > 0 { - rg = az.VnetResourceGroup - } else { - rg = az.ResourceGroup - } - - rerr := az.SubnetsClient.CreateOrUpdate(ctx, rg, az.VnetName, *subnet.Name, subnet) - klog.V(10).Infof("SubnetClient.CreateOrUpdate(%s): end", *subnet.Name) - if rerr != nil { - klog.Errorf("SubnetClient.CreateOrUpdate(%s) failed: %s", *subnet.Name, rerr.Error().Error()) - az.Event(service, v1.EventTypeWarning, "CreateOrUpdateSubnet", rerr.Error().Error()) - return rerr.Error() - } - - return nil -} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_common.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_common.go index 883e30e0c423..9702a89569e0 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_common.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_common.go @@ -27,7 +27,8 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/go-autorest/autorest/azure" "k8s.io/apimachinery/pkg/types" kwait "k8s.io/apimachinery/pkg/util/wait" @@ -35,9 +36,11 @@ import ( cloudprovider "k8s.io/cloud-provider" volerr "k8s.io/cloud-provider/volume/errors" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) const ( @@ -54,6 +57,13 @@ const ( attachDiskMapKeySuffix = "attachdiskmap" detachDiskMapKeySuffix = "detachdiskmap" + updateVMRetryDuration = time.Duration(1) * time.Second + updateVMRetryFactor = 3.0 + updateVMRetrySteps = 5 + + // default initial delay in milliseconds for batch disk attach/detach + defaultAttachDetachInitialDelayInMs = 1000 + // WriteAcceleratorEnabled support for Azure Write Accelerator on Azure Disks // https://docs.microsoft.com/azure/virtual-machines/windows/how-to-enable-write-accelerator WriteAcceleratorEnabled = "writeacceleratorenabled" @@ -72,26 +82,34 @@ var defaultBackOff = kwait.Backoff{ Jitter: 0.0, } +var updateVMBackoff = kwait.Backoff{ + Duration: updateVMRetryDuration, + Factor: updateVMRetryFactor, + Steps: updateVMRetrySteps, +} + var ( managedDiskPathRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/disks/(.+)`) diskSnapshotPathRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/snapshots/(.+)`) + errorCodeRE = regexp.MustCompile(`Code="(.*?)".*`) ) type controllerCommon struct { - subscriptionID string - location string - extendedLocation *ExtendedLocation - storageEndpointSuffix string - resourceGroup string - diskStateMap sync.Map // - lockMap *lockMap - cloud *Cloud + diskStateMap sync.Map // + lockMap *lockMap + cloud *Cloud // disk queue that is waiting for attach or detach on specific node // > attachDiskMap sync.Map detachDiskMap sync.Map // attach/detach disk rate limiter diskOpRateLimiter flowcontrol.RateLimiter + // DisableUpdateCache whether disable update cache in disk attach/detach + DisableUpdateCache bool + // DisableDiskLunCheck whether disable disk lun check after disk attach/detach + DisableDiskLunCheck bool + // AttachDetachInitialDelayInMs determines initial delay in milliseconds for batch disk attach/detach + AttachDetachInitialDelayInMs int } // AttachDiskOptions attach disk options @@ -220,7 +238,8 @@ func (c *controllerCommon) AttachDisk(ctx context.Context, async bool, diskName, } node := strings.ToLower(string(nodeName)) diskuri := strings.ToLower(diskURI) - if err := c.insertAttachDiskRequest(diskuri, node, &options); err != nil { + requestNum, err := c.insertAttachDiskRequest(diskuri, node, &options) + if err != nil { return -1, err } @@ -232,6 +251,11 @@ func (c *controllerCommon) AttachDisk(ctx context.Context, async bool, diskName, } }() + if c.AttachDetachInitialDelayInMs > 0 && requestNum == 1 { + klog.V(2).Infof("wait %dms for more requests on node %s, current disk attach: %s", c.AttachDetachInitialDelayInMs, node, diskURI) + time.Sleep(time.Duration(c.AttachDetachInitialDelayInMs) * time.Millisecond) + } + diskMap, err := c.cleanAttachDiskRequests(node) if err != nil { return -1, err @@ -242,8 +266,16 @@ func (c *controllerCommon) AttachDisk(ctx context.Context, async bool, diskName, return -1, err } - klog.V(2).Infof("Trying to attach volume %s lun %d to node %s, diskMap: %s", diskURI, lun, nodeName, diskMap) + klog.V(2).Infof("Trying to attach volume %s lun %d to node %s, diskMap len:%d, %s", diskURI, lun, nodeName, len(diskMap), diskMap) if len(diskMap) == 0 { + if !c.DisableDiskLunCheck { + // always check disk lun after disk attach complete + diskLun, vmState, errGetLun := c.GetDiskLun(diskName, diskURI, nodeName) + if errGetLun != nil { + return -1, fmt.Errorf("disk(%s) could not be found on node(%s), vmState: %s, error: %w", diskURI, nodeName, pointer.StringDeref(vmState, ""), errGetLun) + } + lun = diskLun + } return lun, nil } @@ -253,10 +285,20 @@ func (c *controllerCommon) AttachDisk(ctx context.Context, async bool, diskName, } c.diskStateMap.Store(disk, "attaching") defer c.diskStateMap.Delete(disk) - future, err := vmset.AttachDisk(ctx, nodeName, diskMap) + + defer func() { + // invalidate the cache if there is error in disk attach + if err != nil { + _ = vmset.DeleteCacheForNode(string(nodeName)) + } + }() + + var future *azure.Future + future, err = vmset.AttachDisk(ctx, nodeName, diskMap) if err != nil { return -1, err } + // err will be handled by waitForUpdateResult below if async && c.diskOpRateLimiter.TryAccept() { // unlock and wait for attach disk complete @@ -267,10 +309,51 @@ func (c *controllerCommon) AttachDisk(ctx context.Context, async bool, diskName, klog.Warningf("azureDisk - switch to batch operation due to rate limited, QPS: %f", c.diskOpRateLimiter.QPS()) } } - return lun, vmset.WaitForUpdateResult(ctx, future, nodeName, "attach_disk") + + if err = c.waitForUpdateResult(ctx, vmset, nodeName, future, err); err != nil { + return -1, err + } + + if !c.DisableDiskLunCheck { + // always check disk lun after disk attach complete + diskLun, vmState, errGetLun := c.GetDiskLun(diskName, diskURI, nodeName) + if errGetLun != nil { + return -1, fmt.Errorf("disk(%s) could not be found on node(%s), vmState: %s, error: %w", diskURI, nodeName, pointer.StringDeref(vmState, ""), errGetLun) + } + lun = diskLun + } + return lun, nil +} + +// waitForUpdateResult handles asynchronous VM update operations and retries with backoff if OperationPreempted error is observed +func (c *controllerCommon) waitForUpdateResult(ctx context.Context, vmset VMSet, nodeName types.NodeName, future *azure.Future, updateErr error) (err error) { + err = updateErr + if err == nil { + err = vmset.WaitForUpdateResult(ctx, future, nodeName, "attach_disk") + } + + if vmUpdateRequired(future, err) { + if derr := kwait.ExponentialBackoffWithContext(ctx, updateVMBackoff, func(ctx context.Context) (bool, error) { + klog.Errorf("Retry VM Update on node (%s) due to error (%v)", nodeName, err) + future, err = vmset.UpdateVMAsync(ctx, nodeName) + if err == nil { + err = vmset.WaitForUpdateResult(ctx, future, nodeName, "attach_disk") + } + return !vmUpdateRequired(future, err), nil + }); derr != nil { + err = derr + return + } + } + + if err != nil && configAccepted(future) { + err = retry.NewPartialUpdateError(err.Error()) + } + return } -func (c *controllerCommon) insertAttachDiskRequest(diskURI, nodeName string, options *AttachDiskOptions) error { +// insertAttachDiskRequest return (attachDiskRequestQueueLength, error) +func (c *controllerCommon) insertAttachDiskRequest(diskURI, nodeName string, options *AttachDiskOptions) (int, error) { var diskMap map[string]*AttachDiskOptions attachDiskMapKey := nodeName + attachDiskMapKeySuffix c.lockMap.LockEntry(attachDiskMapKey) @@ -278,7 +361,7 @@ func (c *controllerCommon) insertAttachDiskRequest(diskURI, nodeName string, opt v, ok := c.attachDiskMap.Load(nodeName) if ok { if diskMap, ok = v.(map[string]*AttachDiskOptions); !ok { - return fmt.Errorf("convert attachDiskMap failure on node(%s)", nodeName) + return -1, fmt.Errorf("convert attachDiskMap failure on node(%s)", nodeName) } } else { diskMap = make(map[string]*AttachDiskOptions) @@ -291,7 +374,7 @@ func (c *controllerCommon) insertAttachDiskRequest(diskURI, nodeName string, opt } else { diskMap[diskURI] = options } - return nil + return len(diskMap), nil } // clean up attach disk requests @@ -333,18 +416,24 @@ func (c *controllerCommon) DetachDisk(ctx context.Context, diskName, diskURI str node := strings.ToLower(string(nodeName)) disk := strings.ToLower(diskURI) - if err := c.insertDetachDiskRequest(diskName, disk, node); err != nil { + requestNum, err := c.insertDetachDiskRequest(diskName, disk, node) + if err != nil { return err } c.lockMap.LockEntry(node) defer c.lockMap.UnlockEntry(node) + + if c.AttachDetachInitialDelayInMs > 0 && requestNum == 1 { + klog.V(2).Infof("wait %dms for more requests on node %s, current disk detach: %s", c.AttachDetachInitialDelayInMs, node, diskURI) + time.Sleep(time.Duration(c.AttachDetachInitialDelayInMs) * time.Millisecond) + } diskMap, err := c.cleanDetachDiskRequests(node) if err != nil { return err } - klog.V(2).Infof("Trying to detach volume %s from node %s, diskMap: %s", diskURI, nodeName, diskMap) + klog.V(2).Infof("Trying to detach volume %s from node %s, diskMap len:%d, %s", diskURI, nodeName, len(diskMap), diskMap) if len(diskMap) > 0 { c.diskStateMap.Store(disk, "detaching") defer c.diskStateMap.Delete(disk) @@ -356,11 +445,6 @@ func (c *controllerCommon) DetachDisk(ctx context.Context, diskName, diskURI str return nil } } - } else { - lun, _, errGetLun := c.GetDiskLun(diskName, diskURI, nodeName) - if errGetLun == nil || !strings.Contains(errGetLun.Error(), consts.CannotFindDiskLUN) { - return fmt.Errorf("disk(%s) is still attached to node(%s) on lun(%d), error: %w", diskURI, nodeName, lun, errGetLun) - } } if err != nil { @@ -368,6 +452,14 @@ func (c *controllerCommon) DetachDisk(ctx context.Context, diskName, diskURI str return err } + if !c.DisableDiskLunCheck { + // always check disk lun after disk detach complete + lun, vmState, errGetLun := c.GetDiskLun(diskName, diskURI, nodeName) + if errGetLun == nil || !strings.Contains(errGetLun.Error(), consts.CannotFindDiskLUN) { + return fmt.Errorf("disk(%s) is still attached to node(%s) on lun(%d), vmState: %s, error: %w", diskURI, nodeName, lun, pointer.StringDeref(vmState, ""), errGetLun) + } + } + klog.V(2).Infof("azureDisk - detach disk(%s, %s) succeeded", diskName, diskURI) return nil } @@ -381,10 +473,17 @@ func (c *controllerCommon) UpdateVM(ctx context.Context, nodeName types.NodeName node := strings.ToLower(string(nodeName)) c.lockMap.LockEntry(node) defer c.lockMap.UnlockEntry(node) + + defer func() { + _ = vmset.DeleteCacheForNode(string(nodeName)) + }() + + klog.V(2).Infof("azureDisk - update: vm(%s)", nodeName) return vmset.UpdateVM(ctx, nodeName) } -func (c *controllerCommon) insertDetachDiskRequest(diskName, diskURI, nodeName string) error { +// insertDetachDiskRequest return (detachDiskRequestQueueLength, error) +func (c *controllerCommon) insertDetachDiskRequest(diskName, diskURI, nodeName string) (int, error) { var diskMap map[string]string detachDiskMapKey := nodeName + detachDiskMapKeySuffix c.lockMap.LockEntry(detachDiskMapKey) @@ -392,7 +491,7 @@ func (c *controllerCommon) insertDetachDiskRequest(diskName, diskURI, nodeName s v, ok := c.detachDiskMap.Load(nodeName) if ok { if diskMap, ok = v.(map[string]string); !ok { - return fmt.Errorf("convert detachDiskMap failure on node(%s)", nodeName) + return -1, fmt.Errorf("convert detachDiskMap failure on node(%s)", nodeName) } } else { diskMap = make(map[string]string) @@ -405,7 +504,7 @@ func (c *controllerCommon) insertDetachDiskRequest(diskName, diskURI, nodeName s } else { diskMap[diskURI] = diskName } - return nil + return len(diskMap), nil } // clean up detach disk requests @@ -620,14 +719,21 @@ func (c *controllerCommon) checkDiskExists(ctx context.Context, diskURI string) return true, nil } -func getValidCreationData(subscriptionID, resourceGroup, sourceResourceID, sourceType string) (compute.CreationData, error) { - if sourceResourceID == "" { +func vmUpdateRequired(future *azure.Future, err error) bool { + errCode := getAzureErrorCode(err) + return configAccepted(future) && errCode == consts.OperationPreemptedErrorCode +} + +func getValidCreationData(subscriptionID, resourceGroup string, options *ManagedDiskOptions) (compute.CreationData, error) { + if options.SourceResourceID == "" { return compute.CreationData{ - CreateOption: compute.Empty, + CreateOption: compute.Empty, + PerformancePlus: options.PerformancePlus, }, nil } - switch sourceType { + sourceResourceID := options.SourceResourceID + switch options.SourceType { case sourceSnapshot: if match := diskSnapshotPathRE.FindString(sourceResourceID); match == "" { sourceResourceID = fmt.Sprintf(diskSnapshotPath, subscriptionID, resourceGroup, sourceResourceID) @@ -639,13 +745,14 @@ func getValidCreationData(subscriptionID, resourceGroup, sourceResourceID, sourc } default: return compute.CreationData{ - CreateOption: compute.Empty, + CreateOption: compute.Empty, + PerformancePlus: options.PerformancePlus, }, nil } splits := strings.Split(sourceResourceID, "/") if len(splits) > 9 { - if sourceType == sourceSnapshot { + if options.SourceType == sourceSnapshot { return compute.CreationData{}, fmt.Errorf("sourceResourceID(%s) is invalid, correct format: %s", sourceResourceID, diskSnapshotPathRE) } return compute.CreationData{}, fmt.Errorf("sourceResourceID(%s) is invalid, correct format: %s", sourceResourceID, managedDiskPathRE) @@ -653,6 +760,7 @@ func getValidCreationData(subscriptionID, resourceGroup, sourceResourceID, sourc return compute.CreationData{ CreateOption: compute.Copy, SourceResourceID: &sourceResourceID, + PerformancePlus: options.PerformancePlus, }, nil } @@ -663,3 +771,21 @@ func isInstanceNotFoundError(err error) bool { } return strings.Contains(errMsg, errStatusCode400) && strings.Contains(errMsg, errInvalidParameter) && strings.Contains(errMsg, errTargetInstanceIds) } + +// getAzureErrorCode uses regex to parse out the error code encapsulated in the error string. +func getAzureErrorCode(err error) string { + if err == nil { + return "" + } + matches := errorCodeRE.FindStringSubmatch(err.Error()) + if matches == nil { + return "" + } + return matches[1] +} + +// configAccepted returns true if storage profile change had been committed (i.e. HTTP status code == 2xx) and returns false otherwise. +func configAccepted(future *azure.Future) bool { + // if status code indicates success, the storage profile change was committed + return future != nil && future.Response() != nil && future.Response().StatusCode/100 == 2 +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_standard.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_standard.go index 16ae72ec9840..3a494ecdf9a3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_standard.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_standard.go @@ -22,15 +22,16 @@ import ( "net/http" "strings" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) // AttachDisk attaches a disk to vm @@ -88,7 +89,7 @@ func (as *availabilitySet) AttachDisk(ctx context.Context, nodeName types.NodeNa Caching: opt.cachingMode, CreateOption: "attach", ManagedDisk: managedDisk, - WriteAcceleratorEnabled: to.BoolPtr(opt.writeAcceleratorEnabled), + WriteAcceleratorEnabled: pointer.Bool(opt.writeAcceleratorEnabled), }) } @@ -100,10 +101,6 @@ func (as *availabilitySet) AttachDisk(ctx context.Context, nodeName types.NodeNa }, } klog.V(2).Infof("azureDisk - update(%s): vm(%s) - attach disk list(%s)", nodeResourceGroup, vmName, diskMap) - // Invalidate the cache right after updating - defer func() { - _ = as.DeleteCacheForNode(vmName) - }() future, rerr := as.VirtualMachinesClient.UpdateAsync(ctx, nodeResourceGroup, vmName, newVM, "attach_disk") if rerr != nil { @@ -124,8 +121,13 @@ func (as *availabilitySet) AttachDisk(ctx context.Context, nodeName types.NodeNa } func (as *availabilitySet) DeleteCacheForNode(nodeName string) error { - _ = as.cloud.vmCache.Delete(nodeName) - return nil + err := as.cloud.vmCache.Delete(nodeName) + if err == nil { + klog.V(2).Infof("DeleteCacheForNode(%s) successfully", nodeName) + } else { + klog.Errorf("DeleteCacheForNode(%s) failed with %v", nodeName, err) + } + return err } // WaitForUpdateResult waits for the response of the update request @@ -136,9 +138,17 @@ func (as *availabilitySet) WaitForUpdateResult(ctx context.Context, future *azur return err } - if rerr := as.VirtualMachinesClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source); rerr != nil { + result, rerr := as.VirtualMachinesClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source) + if rerr != nil { return rerr.Error() } + + // clean node cache first and then update cache + _ = as.DeleteCacheForNode(vmName) + if result != nil && result.VirtualMachineProperties != nil { + // if we have an updated result, we update the vmss vm cache + as.updateCache(vmName, result) + } return nil } @@ -168,7 +178,7 @@ func (as *availabilitySet) DetachDisk(ctx context.Context, nodeName types.NodeNa (disk.ManagedDisk != nil && diskURI != "" && strings.EqualFold(*disk.ManagedDisk.ID, diskURI)) { // found the disk klog.V(2).Infof("azureDisk - detach disk: name %s uri %s", diskName, diskURI) - disks[i].ToBeDetached = to.BoolPtr(true) + disks[i].ToBeDetached = pointer.Bool(true) bFoundDisk = true } } @@ -176,13 +186,13 @@ func (as *availabilitySet) DetachDisk(ctx context.Context, nodeName types.NodeNa if !bFoundDisk { // only log here, next action is to update VM status with original meta data - klog.Errorf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) + klog.Warningf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) } else { if strings.EqualFold(as.cloud.Environment.Name, consts.AzureStackCloudName) && !as.Config.DisableAzureStackCloud { // Azure stack does not support ToBeDetached flag, use original way to detach disk newDisks := []compute.DataDisk{} for _, disk := range disks { - if !to.Bool(disk.ToBeDetached) { + if !pointer.BoolDeref(disk.ToBeDetached, false) { newDisks = append(newDisks, disk) } } @@ -198,19 +208,28 @@ func (as *availabilitySet) DetachDisk(ctx context.Context, nodeName types.NodeNa }, } klog.V(2).Infof("azureDisk - update(%s): vm(%s) - detach disk list(%s)", nodeResourceGroup, vmName, nodeName, diskMap) - // Invalidate the cache right after updating + + var result *compute.VirtualMachine + var rerr *retry.Error defer func() { + // invalidate the cache right after updating _ = as.DeleteCacheForNode(vmName) + + // update the cache with the updated result only if its not nil + // and contains the VirtualMachineProperties + if rerr == nil && result != nil && result.VirtualMachineProperties != nil { + as.updateCache(vmName, result) + } }() - rerr := as.VirtualMachinesClient.Update(ctx, nodeResourceGroup, vmName, newVM, "detach_disk") + result, rerr = as.VirtualMachinesClient.Update(ctx, nodeResourceGroup, vmName, newVM, "detach_disk") if rerr != nil { klog.Errorf("azureDisk - detach disk list(%s) on rg(%s) vm(%s) failed, err: %v", diskMap, nodeResourceGroup, vmName, rerr) if rerr.HTTPStatusCode == http.StatusNotFound { klog.Errorf("azureDisk - begin to filterNonExistingDisks(%v) on rg(%s) vm(%s)", diskMap, nodeResourceGroup, vmName) disks := as.filterNonExistingDisks(ctx, *vm.StorageProfile.DataDisks) newVM.VirtualMachineProperties.StorageProfile.DataDisks = &disks - rerr = as.VirtualMachinesClient.Update(ctx, nodeResourceGroup, vmName, newVM, "detach_disk") + result, rerr = as.VirtualMachinesClient.Update(ctx, nodeResourceGroup, vmName, newVM, "detach_disk") } } @@ -223,23 +242,34 @@ func (as *availabilitySet) DetachDisk(ctx context.Context, nodeName types.NodeNa // UpdateVM updates a vm func (as *availabilitySet) UpdateVM(ctx context.Context, nodeName types.NodeName) error { + future, err := as.UpdateVMAsync(ctx, nodeName) + if err != nil { + return err + } + return as.WaitForUpdateResult(ctx, future, nodeName, "update_vm") +} + +// UpdateVMAsync updates a vm asynchronously +func (as *availabilitySet) UpdateVMAsync(ctx context.Context, nodeName types.NodeName) (*azure.Future, error) { vmName := mapNodeNameToVMName(nodeName) nodeResourceGroup, err := as.GetNodeResourceGroup(vmName) if err != nil { - return err + return nil, err } - klog.V(2).Infof("azureDisk - update(%s): vm(%s)", nodeResourceGroup, vmName) - // Invalidate the cache right after updating - defer func() { - _ = as.DeleteCacheForNode(vmName) - }() - rerr := as.VirtualMachinesClient.Update(ctx, nodeResourceGroup, vmName, compute.VirtualMachineUpdate{}, "update_vm") - klog.V(2).Infof("azureDisk - update(%s): vm(%s) - returned with %v", nodeResourceGroup, vmName, rerr) + future, rerr := as.VirtualMachinesClient.UpdateAsync(ctx, nodeResourceGroup, vmName, compute.VirtualMachineUpdate{}, "update_vm") if rerr != nil { - return rerr.Error() + return future, rerr.Error() } - return nil + return future, nil +} + +func (as *availabilitySet) updateCache(nodeName string, vm *compute.VirtualMachine) { + if as.common.DisableUpdateCache { + return + } + as.cloud.vmCache.Update(nodeName, vm) + klog.V(2).Infof("updateCache(%s) successfully", nodeName) } // GetDataDisks gets a list of data disks attached to the node. diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go index 922bae588425..2a2e2c227ae8 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go @@ -22,12 +22,12 @@ import ( "net/http" "strings" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" @@ -95,7 +95,7 @@ func (ss *ScaleSet) AttachDisk(ctx context.Context, nodeName types.NodeName, dis Caching: opt.cachingMode, CreateOption: "attach", ManagedDisk: managedDisk, - WriteAcceleratorEnabled: to.BoolPtr(opt.writeAcceleratorEnabled), + WriteAcceleratorEnabled: pointer.Bool(opt.writeAcceleratorEnabled), }) } @@ -107,11 +107,6 @@ func (ss *ScaleSet) AttachDisk(ctx context.Context, nodeName types.NodeName, dis }, } - // Invalidate the cache right after updating - defer func() { - _ = ss.DeleteCacheForNode(vmName) - }() - klog.V(2).Infof("azureDisk - update(%s): vm(%s) - attach disk list(%s)", nodeResourceGroup, nodeName, diskMap) future, rerr := ss.VirtualMachineScaleSetVMsClient.UpdateAsync(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, newVM, "attach_disk") if rerr != nil { @@ -139,23 +134,30 @@ func (ss *ScaleSet) WaitForUpdateResult(ctx context.Context, future *azure.Futur return err } - var result *compute.VirtualMachineScaleSetVM - var rerr *retry.Error - defer func() { - if rerr == nil && result != nil && result.VirtualMachineScaleSetVMProperties != nil { - // If we have an updated result, we update the vmss vm cache - vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault) - if err != nil { - return - } - _ = ss.updateCache(vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, result) - } - }() - - result, rerr = ss.VirtualMachineScaleSetVMsClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source) + result, rerr := ss.VirtualMachineScaleSetVMsClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source) if rerr != nil { return rerr.Error() } + + var vmssName, instanceID string + if result != nil && result.VirtualMachineScaleSetVMProperties != nil { + // get vmssName, instanceID from cache first + vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault) + if err == nil && vm != nil { + vmssName = vm.VMSSName + instanceID = vm.InstanceID + } else { + klog.Errorf("getVmssVM failed with error(%v) or nil pointer", err) + } + } + + // clean node cache first and then update cache + _ = ss.DeleteCacheForNode(vmName) + if vmssName != "" && instanceID != "" { + if err := ss.updateCache(vmName, nodeResourceGroup, vmssName, instanceID, result); err != nil { + klog.Errorf("updateCache(%s, %s, %s, %s) failed with error: %v", vmName, nodeResourceGroup, vmssName, instanceID, err) + } + } return nil } @@ -189,7 +191,7 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis (disk.ManagedDisk != nil && diskURI != "" && strings.EqualFold(*disk.ManagedDisk.ID, diskURI)) { // found the disk klog.V(2).Infof("azureDisk - detach disk: name %s uri %s", diskName, diskURI) - disks[i].ToBeDetached = to.BoolPtr(true) + disks[i].ToBeDetached = pointer.Bool(true) bFoundDisk = true } } @@ -197,13 +199,13 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis if !bFoundDisk { // only log here, next action is to update VM status with original meta data - klog.Errorf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) + klog.Warningf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) } else { if strings.EqualFold(ss.cloud.Environment.Name, consts.AzureStackCloudName) && !ss.Config.DisableAzureStackCloud { // Azure stack does not support ToBeDetached flag, use original way to detach disk var newDisks []compute.DataDisk for _, disk := range disks { - if !to.Bool(disk.ToBeDetached) { + if !pointer.BoolDeref(disk.ToBeDetached, false) { newDisks = append(newDisks, disk) } } @@ -219,30 +221,23 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis }, } - var updateResult *compute.VirtualMachineScaleSetVM + var result *compute.VirtualMachineScaleSetVM var rerr *retry.Error defer func() { - // If there is an error with Update operation, - // invalidate the cache - if rerr != nil { - _ = ss.DeleteCacheForNode(vmName) - return - } + _ = ss.DeleteCacheForNode(vmName) // Update the cache with the updated result only if its not nil // and contains the VirtualMachineScaleSetVMProperties - if updateResult != nil && updateResult.VirtualMachineScaleSetVMProperties != nil { - if err := ss.updateCache(vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, updateResult); err != nil { - klog.Errorf("updateCache(%s, %s, %s) failed with error: %v", vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, err) - // if err faced during updating cache, invalidate the cache - _ = ss.DeleteCacheForNode(vmName) + if rerr == nil && result != nil && result.VirtualMachineScaleSetVMProperties != nil { + if err := ss.updateCache(vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, result); err != nil { + klog.Errorf("updateCache(%s, %s, %s, %s) failed with error: %v", vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, err) } } }() klog.V(2).Infof("azureDisk - update(%s): vm(%s) - detach disk list(%s)", nodeResourceGroup, nodeName, diskMap) - updateResult, rerr = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, newVM, + result, rerr = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, newVM, "detach_disk") if rerr != nil { klog.Errorf("azureDisk - detach disk list(%s) on rg(%s) vm(%s) failed, err: %v", diskMap, nodeResourceGroup, nodeName, rerr) @@ -250,7 +245,7 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis klog.Errorf("azureDisk - begin to filterNonExistingDisks(%v) on rg(%s) vm(%s)", diskMap, nodeResourceGroup, nodeName) disks := ss.filterNonExistingDisks(ctx, *newVM.VirtualMachineScaleSetVMProperties.StorageProfile.DataDisks) newVM.VirtualMachineScaleSetVMProperties.StorageProfile.DataDisks = &disks - updateResult, rerr = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, newVM, "detach_disk") + result, rerr = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, newVM, "detach_disk") } } @@ -263,47 +258,31 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis // UpdateVM updates a vm func (ss *ScaleSet) UpdateVM(ctx context.Context, nodeName types.NodeName) error { + future, err := ss.UpdateVMAsync(ctx, nodeName) + if err != nil { + return err + } + return ss.WaitForUpdateResult(ctx, future, nodeName, "update_vm") +} + +// UpdateVMAsync updates a vm asynchronously +func (ss *ScaleSet) UpdateVMAsync(ctx context.Context, nodeName types.NodeName) (*azure.Future, error) { vmName := mapNodeNameToVMName(nodeName) vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault) if err != nil { - return err + return nil, err } nodeResourceGroup, err := ss.GetNodeResourceGroup(vmName) if err != nil { - return err + return nil, err } - var updateResult *compute.VirtualMachineScaleSetVM - var rerr *retry.Error - - defer func() { - // If there is an error with Update operation, - // invalidate the cache - if rerr != nil { - _ = ss.DeleteCacheForNode(vmName) - return - } - - // Update the cache with the updated result only if its not nil - // and contains the VirtualMachineScaleSetVMProperties - if updateResult != nil && updateResult.VirtualMachineScaleSetVMProperties != nil { - if err := ss.updateCache(vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, updateResult); err != nil { - klog.Errorf("updateCache(%s, %s, %s) failed with error: %v", vmName, nodeResourceGroup, vm.VMSSName, vm.InstanceID, err) - // if err faced during updating cache, invalidate the cache - _ = ss.DeleteCacheForNode(vmName) - } - } - }() - - klog.V(2).Infof("azureDisk - update(%s): vm(%s)", nodeResourceGroup, nodeName) - updateResult, rerr = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, compute.VirtualMachineScaleSetVM{}, "update_vmss_instance") - - klog.V(2).Infof("azureDisk - update(%s): vm(%s) - returned with %v", nodeResourceGroup, nodeName, rerr) + future, rerr := ss.VirtualMachineScaleSetVMsClient.UpdateAsync(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, compute.VirtualMachineScaleSetVM{}, "update_vmss_instance") if rerr != nil { - return rerr.Error() + return future, rerr.Error() } - return nil + return future, nil } // GetDataDisks gets a list of data disks attached to the node. diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmssflex.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmssflex.go index e8cab8553230..e3ad7a9b7e77 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmssflex.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmssflex.go @@ -21,15 +21,17 @@ import ( "fmt" "net/http" "strings" + "sync" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) // AttachDisk attaches a disk to vm @@ -87,7 +89,7 @@ func (fs *FlexScaleSet) AttachDisk(ctx context.Context, nodeName types.NodeName, Caching: opt.cachingMode, CreateOption: "attach", ManagedDisk: managedDisk, - WriteAcceleratorEnabled: to.BoolPtr(opt.writeAcceleratorEnabled), + WriteAcceleratorEnabled: pointer.Bool(opt.writeAcceleratorEnabled), }) } @@ -99,10 +101,6 @@ func (fs *FlexScaleSet) AttachDisk(ctx context.Context, nodeName types.NodeName, }, } - defer func() { - _ = fs.DeleteCacheForNode(vmName) - }() - klog.V(2).Infof("azureDisk - update(%s): vm(%s) - attach disk list(%s)", nodeResourceGroup, vmName, diskMap) future, rerr := fs.VirtualMachinesClient.UpdateAsync(ctx, nodeResourceGroup, *vm.Name, newVM, "attach_disk") @@ -149,7 +147,7 @@ func (fs *FlexScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, (disk.ManagedDisk != nil && diskURI != "" && strings.EqualFold(*disk.ManagedDisk.ID, diskURI)) { // found the disk klog.V(2).Infof("azureDisk - detach disk: name %s uri %s", diskName, diskURI) - disks[i].ToBeDetached = to.BoolPtr(true) + disks[i].ToBeDetached = pointer.Bool(true) bFoundDisk = true } } @@ -157,13 +155,13 @@ func (fs *FlexScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, if !bFoundDisk { // only log here, next action is to update VM status with original meta data - klog.Errorf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) + klog.Warningf("detach azure disk on node(%s): disk list(%s) not found", nodeName, diskMap) } else { if strings.EqualFold(fs.cloud.Environment.Name, consts.AzureStackCloudName) && !fs.Config.DisableAzureStackCloud { // Azure stack does not support ToBeDetached flag, use original way to detach disk newDisks := []compute.DataDisk{} for _, disk := range disks { - if !to.Bool(disk.ToBeDetached) { + if !pointer.BoolDeref(disk.ToBeDetached, false) { newDisks = append(newDisks, disk) } } @@ -179,20 +177,30 @@ func (fs *FlexScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, }, } + var result *compute.VirtualMachine + var rerr *retry.Error defer func() { _ = fs.DeleteCacheForNode(vmName) + + // update the cache with the updated result only if its not nil + // and contains the VirtualMachineProperties + if rerr == nil && result != nil && result.VirtualMachineProperties != nil { + if err := fs.updateCache(vmName, result); err != nil { + klog.Errorf("updateCache(%s) failed with error: %v", vmName, err) + } + } }() klog.V(2).Infof("azureDisk - update(%s): vm(%s) - detach disk list(%s)", nodeResourceGroup, vmName, nodeName, diskMap) - rerr := fs.VirtualMachinesClient.Update(ctx, nodeResourceGroup, *vm.Name, newVM, "detach_disk") + result, rerr = fs.VirtualMachinesClient.Update(ctx, nodeResourceGroup, *vm.Name, newVM, "detach_disk") if rerr != nil { klog.Errorf("azureDisk - detach disk list(%s) on rg(%s) vm(%s) failed, err: %v", diskMap, nodeResourceGroup, vmName, rerr) if rerr.HTTPStatusCode == http.StatusNotFound { klog.Errorf("azureDisk - begin to filterNonExistingDisks(%v) on rg(%s) vm(%s)", diskMap, nodeResourceGroup, vmName) disks := fs.filterNonExistingDisks(ctx, *vm.StorageProfile.DataDisks) newVM.VirtualMachineProperties.StorageProfile.DataDisks = &disks - rerr = fs.VirtualMachinesClient.Update(ctx, nodeResourceGroup, *vm.Name, newVM, "detach_disk") + result, rerr = fs.VirtualMachinesClient.Update(ctx, nodeResourceGroup, *vm.Name, newVM, "detach_disk") } } @@ -210,37 +218,85 @@ func (fs *FlexScaleSet) WaitForUpdateResult(ctx context.Context, future *azure.F if err != nil { return err } - if rerr := fs.VirtualMachinesClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source); rerr != nil { + result, rerr := fs.VirtualMachinesClient.WaitForUpdateResult(ctx, future, nodeResourceGroup, source) + if rerr != nil { return rerr.Error() } + + // clean node cache first and then update cache + _ = fs.DeleteCacheForNode(vmName) + if result != nil && result.VirtualMachineProperties != nil { + if err := fs.updateCache(vmName, result); err != nil { + klog.Errorf("updateCache(%s) failed with error: %v", vmName, err) + } + } return nil } // UpdateVM updates a vm func (fs *FlexScaleSet) UpdateVM(ctx context.Context, nodeName types.NodeName) error { + future, err := fs.UpdateVMAsync(ctx, nodeName) + if err != nil { + return err + } + return fs.WaitForUpdateResult(ctx, future, nodeName, "update_vm") +} + +// UpdateVMAsync updates a vm asynchronously +func (fs *FlexScaleSet) UpdateVMAsync(ctx context.Context, nodeName types.NodeName) (*azure.Future, error) { vmName := mapNodeNameToVMName(nodeName) vm, err := fs.getVmssFlexVM(vmName, azcache.CacheReadTypeDefault) if err != nil { // if host doesn't exist, no need to update - klog.Warningf("azureDisk - cannot find node %s, skip updating vm)", nodeName) - return nil + klog.Warningf("azureDisk - cannot find node %s, skip updating vm", nodeName) + return nil, nil } nodeResourceGroup, err := fs.GetNodeResourceGroup(vmName) if err != nil { - return err + return nil, err } - defer func() { - _ = fs.DeleteCacheForNode(vmName) - }() + future, rerr := fs.VirtualMachinesClient.UpdateAsync(ctx, nodeResourceGroup, *vm.Name, compute.VirtualMachineUpdate{}, "update_vm") + if rerr != nil { + return future, rerr.Error() + } + return future, nil +} - klog.V(2).Infof("azureDisk - update(%s): vm(%s)", nodeResourceGroup, vmName) +func (fs *FlexScaleSet) updateCache(nodeName string, vm *compute.VirtualMachine) error { + if fs.common.DisableUpdateCache { + return nil + } + if vm == nil { + return fmt.Errorf("vm is nil") + } + if vm.Name == nil { + return fmt.Errorf("vm.Name is nil") + } + if vm.VirtualMachineProperties == nil { + return fmt.Errorf("vm.VirtualMachineProperties is nil") + } + if vm.OsProfile == nil || vm.OsProfile.ComputerName == nil { + return fmt.Errorf("vm.OsProfile.ComputerName is nil") + } - rerr := fs.VirtualMachinesClient.Update(ctx, nodeResourceGroup, *vm.Name, compute.VirtualMachineUpdate{}, "update_vm") - klog.V(2).Infof("azureDisk - update(%s): vm(%s) - returned with %v", nodeResourceGroup, vmName, rerr) - if rerr != nil { - return rerr.Error() + vmssFlexID, err := fs.getNodeVmssFlexID(nodeName) + if err != nil { + return err } + + fs.lockMap.LockEntry(vmssFlexID) + defer fs.lockMap.UnlockEntry(vmssFlexID) + cached, err := fs.vmssFlexVMCache.Get(vmssFlexID, azcache.CacheReadTypeDefault) + if err != nil { + return err + } + vmMap := cached.(*sync.Map) + vmMap.Store(nodeName, vm) + + fs.vmssFlexVMNameToVmssID.Store(strings.ToLower(*vm.OsProfile.ComputerName), vmssFlexID) + fs.vmssFlexVMNameToNodeName.Store(*vm.Name, strings.ToLower(*vm.OsProfile.ComputerName)) + klog.V(2).Infof("updateCache(%s) for vmssFlexID(%s) successfully", nodeName, vmssFlexID) return nil } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_fakes.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_fakes.go index 8c849dd162fc..58d764473f04 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_fakes.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_fakes.go @@ -96,12 +96,12 @@ func GetTestCloud(ctrl *gomock.Controller) (az *Cloud) { VMType: consts.VMTypeStandard, LoadBalancerBackendPoolConfigurationType: consts.LoadBalancerBackendPoolConfigurationTypeNodeIPConfiguration, }, - nodeZones: map[string]sets.String{}, + nodeZones: map[string]sets.Set[string]{}, nodeInformerSynced: func() bool { return true }, nodeResourceGroups: map[string]string{}, - unmanagedNodes: sets.NewString(), - excludeLoadBalancerNodes: sets.NewString(), - nodePrivateIPs: map[string]sets.String{}, + unmanagedNodes: sets.New[string](), + excludeLoadBalancerNodes: sets.New[string](), + nodePrivateIPs: map[string]sets.Set[string]{}, routeCIDRs: map[string]string{}, eventRecorder: &record.FakeRecorder{}, } @@ -126,6 +126,7 @@ func GetTestCloud(ctrl *gomock.Controller) (az *Cloud) { az.pipCache, _ = az.newPIPCache() az.plsCache, _ = az.newPLSCache() az.LoadBalancerBackendPool = NewMockBackendPool(ctrl) + az.storageAccountCache, _ = az.newStorageAccountCache() _ = initDiskControllers(az) @@ -139,9 +140,5 @@ func GetTestCloudWithExtendedLocation(ctrl *gomock.Controller) (az *Cloud) { az = GetTestCloud(ctrl) az.Config.ExtendedLocationName = "microsoftlosangeles1" az.Config.ExtendedLocationType = "EdgeZone" - az.controllerCommon.extendedLocation = &ExtendedLocation{ - Name: az.Config.ExtendedLocationName, - Type: az.Config.ExtendedLocationType, - } return az } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instance_metadata.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instance_metadata.go index b403ff6d2208..c79fd6395e4f 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instance_metadata.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instance_metadata.go @@ -19,8 +19,9 @@ package provider import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" + "strings" "k8s.io/klog/v2" @@ -101,7 +102,7 @@ type LoadBalancerMetadata struct { // InstanceMetadataService knows how to query the Azure instance metadata server. type InstanceMetadataService struct { imdsServer string - imsCache *azcache.TimedCache + imsCache azcache.Resource } // NewInstanceMetadataService creates an instance of the InstanceMetadataService accessor object. @@ -110,7 +111,7 @@ func NewInstanceMetadataService(imdsServer string) (*InstanceMetadataService, er imdsServer: imdsServer, } - imsCache, err := azcache.NewTimedcache(consts.MetadataCacheTTL, ims.getMetadata) + imsCache, err := azcache.NewTimedCache(consts.MetadataCacheTTL, ims.getMetadata, false) if err != nil { return nil, err } @@ -119,6 +120,33 @@ func NewInstanceMetadataService(imdsServer string) (*InstanceMetadataService, er return ims, nil } +// fillNetInterfacePublicIPs finds PIPs from imds load balancer and fills them into net interface config. +func fillNetInterfacePublicIPs(publicIPs []PublicIPMetadata, netInterface *NetworkInterface) { + // IPv6 IPs from imds load balancer are wrapped by brackets while those from imds are not. + trimIP := func(ip string) string { + return strings.Trim(strings.Trim(ip, "["), "]") + } + + if len(netInterface.IPV4.IPAddress) > 0 && len(netInterface.IPV4.IPAddress[0].PrivateIP) > 0 { + for _, pip := range publicIPs { + if pip.PrivateIPAddress == netInterface.IPV4.IPAddress[0].PrivateIP { + netInterface.IPV4.IPAddress[0].PublicIP = pip.FrontendIPAddress + break + } + } + } + if len(netInterface.IPV6.IPAddress) > 0 && len(netInterface.IPV6.IPAddress[0].PrivateIP) > 0 { + for _, pip := range publicIPs { + privateIP := trimIP(pip.PrivateIPAddress) + frontendIP := trimIP(pip.FrontendIPAddress) + if privateIP == netInterface.IPV6.IPAddress[0].PrivateIP { + netInterface.IPV6.IPAddress[0].PublicIP = frontendIP + break + } + } + } +} + func (ims *InstanceMetadataService) getMetadata(key string) (interface{}, error) { instanceMetadata, err := ims.getInstanceMetadata(key) if err != nil { @@ -142,22 +170,7 @@ func (ims *InstanceMetadataService) getMetadata(key string) (interface{}, error) } publicIPs := loadBalancerMetadata.LoadBalancer.PublicIPAddresses - if len(netInterface.IPV4.IPAddress) > 0 && len(netInterface.IPV4.IPAddress[0].PrivateIP) > 0 { - for _, pip := range publicIPs { - if pip.PrivateIPAddress == netInterface.IPV4.IPAddress[0].PrivateIP { - netInterface.IPV4.IPAddress[0].PublicIP = pip.FrontendIPAddress - break - } - } - } - if len(netInterface.IPV6.IPAddress) > 0 && len(netInterface.IPV6.IPAddress[0].PrivateIP) > 0 { - for _, pip := range publicIPs { - if pip.PrivateIPAddress == netInterface.IPV6.IPAddress[0].PrivateIP { - netInterface.IPV6.IPAddress[0].PublicIP = pip.FrontendIPAddress - break - } - } - } + fillNetInterfacePublicIPs(publicIPs, &netInterface) } return instanceMetadata, nil @@ -187,7 +200,7 @@ func (ims *InstanceMetadataService) getInstanceMetadata(key string) (*InstanceMe return nil, fmt.Errorf("failure of getting instance metadata with response %q", resp.Status) } - data, err := ioutil.ReadAll(resp.Body) + data, err := io.ReadAll(resp.Body) if err != nil { return nil, err } @@ -225,7 +238,7 @@ func (ims *InstanceMetadataService) getLoadBalancerMetadata() (*LoadBalancerMeta return nil, fmt.Errorf("failure of getting loadbalancer metadata with response %q", resp.Status) } - data, err := ioutil.ReadAll(resp.Body) + data, err := io.ReadAll(resp.Body) if err != nil { return nil, err } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instances.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instances.go index 6a95eee054d0..f14fe57d6195 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instances.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_instances.go @@ -28,8 +28,6 @@ import ( cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" ) @@ -227,6 +225,15 @@ func (az *Cloud) InstanceExists(ctx context.Context, node *v1.Node) (bool, error if node == nil { return false, nil } + unmanaged, err := az.IsNodeUnmanaged(node.Name) + if err != nil { + return false, err + } + if unmanaged { + klog.V(4).Infof("InstanceExists: omitting unmanaged node %q", node.Name) + return true, nil + } + providerID := node.Spec.ProviderID if providerID == "" { var err error @@ -287,7 +294,7 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st klog.V(3).Infof("InstanceShutdownByProviderID gets provisioning state %q for node %q", provisioningState, nodeName) status := strings.ToLower(powerStatus) - provisioningSucceeded := strings.EqualFold(strings.ToLower(provisioningState), strings.ToLower(string(compute.ProvisioningStateSucceeded))) + provisioningSucceeded := strings.EqualFold(strings.ToLower(provisioningState), strings.ToLower(string(consts.ProvisioningStateSucceeded))) return provisioningSucceeded && (status == vmPowerStateStopped || status == vmPowerStateDeallocated || status == vmPowerStateDeallocating), nil } @@ -297,6 +304,14 @@ func (az *Cloud) InstanceShutdown(ctx context.Context, node *v1.Node) (bool, err if node == nil { return false, nil } + unmanaged, err := az.IsNodeUnmanaged(node.Name) + if err != nil { + return false, err + } + if unmanaged { + klog.V(4).Infof("InstanceShutdown: omitting unmanaged node %q", node.Name) + return false, nil + } providerID := node.Spec.ProviderID if providerID == "" { var err error @@ -492,11 +507,18 @@ func (az *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.No // translated into specific fields in the Node object on registration. // Use the node.name or node.spec.providerID field to find the node in the cloud provider. func (az *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprovider.InstanceMetadata, error) { + meta := cloudprovider.InstanceMetadata{} if node == nil { - return &cloudprovider.InstanceMetadata{}, nil + return &meta, nil + } + unmanaged, err := az.IsNodeUnmanaged(node.Name) + if err != nil { + return &meta, err + } + if unmanaged { + klog.V(4).Infof("InstanceMetadata: omitting unmanaged node %q", node.Name) + return &meta, nil } - - meta := cloudprovider.InstanceMetadata{} if node.Spec.ProviderID != "" { meta.ProviderID = node.Spec.ProviderID diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_interface_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_interface_repo.go new file mode 100644 index 000000000000..0cfee7e96b67 --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_interface_repo.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" +) + +// CreateOrUpdateInterface invokes az.InterfacesClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdateInterface(service *v1.Service, nic network.Interface) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.InterfacesClient.CreateOrUpdate(ctx, az.ResourceGroup, *nic.Name, nic) + klog.V(10).Infof("InterfacesClient.CreateOrUpdate(%s): end", *nic.Name) + if rerr != nil { + klog.Errorf("InterfacesClient.CreateOrUpdate(%s) failed: %s", *nic.Name, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "CreateOrUpdateInterface", rerr.Error().Error()) + return rerr.Error() + } + + return nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer.go index 05d62796bf6f..21d9b404ab7e 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer.go @@ -28,18 +28,21 @@ import ( "sort" "strconv" "strings" + "unicode" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" cloudprovider "k8s.io/cloud-provider" servicehelpers "k8s.io/cloud-provider/service/helpers" "k8s.io/klog/v2" utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" "k8s.io/utils/strings/slices" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" @@ -48,74 +51,54 @@ import ( "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) -// getServiceLoadBalancerIP retrieves LB IP from IPv4 annotation, then IPv6 annotation, then service.Spec.LoadBalancerIP. -// TODO: Dual-stack support is not implemented. -func getServiceLoadBalancerIP(service *v1.Service) string { - if service == nil { - return "" - } - - if ip, ok := service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[false]]; ok && ip != "" { - return ip - } - if ip, ok := service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[true]]; ok && ip != "" { - return ip +// Since public IP is not a part of the load balancer on Azure, +// there is a chance that we could orphan public IP resources while we delete the load balancer (kubernetes/kubernetes#80571). +// We need to make sure the existence of the load balancer depends on the load balancer resource and public IP resource on Azure. +func (az *Cloud) existsPip(clusterName string, service *v1.Service) bool { + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + existsPipSingleStack := func(isIPv6 bool) bool { + pipName, _, err := az.determinePublicIPName(clusterName, service, isIPv6) + if err != nil { + return false + } + pipResourceGroup := az.getPublicIPAddressResourceGroup(service) + _, existingPip, err := az.getPublicIPAddress(pipResourceGroup, pipName, azcache.CacheReadTypeDefault) + if err != nil { + return false + } + return existingPip } - // Retrieve LB IP from service.Spec.LoadBalancerIP (will be deprecated) - return service.Spec.LoadBalancerIP -} - -// setServiceLoadBalancerIP sets LB IP to a Service -func setServiceLoadBalancerIP(service *v1.Service, ip string) { - if service.Annotations == nil { - service.Annotations = map[string]string{} + if v4Enabled && !existsPipSingleStack(consts.IPVersionIPv4) { + return false } - if net.ParseIP(ip).To4() != nil { - service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[false]] = ip - return + if v6Enabled && !existsPipSingleStack(consts.IPVersionIPv6) { + return false } - service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[true]] = ip + return true } // GetLoadBalancer returns whether the specified load balancer and its components exist, and // if so, what its status is. func (az *Cloud) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (status *v1.LoadBalancerStatus, exists bool, err error) { - // Since public IP is not a part of the load balancer on Azure, - // there is a chance that we could orphan public IP resources while we delete the load balancer (kubernetes/kubernetes#80571). - // We need to make sure the existence of the load balancer depends on the load balancer resource and public IP resource on Azure. - existsPip := func() bool { - var pips []network.PublicIPAddress - pipName, _, err := az.determinePublicIPName(clusterName, service, &pips) - if err != nil { - return false - } - pipResourceGroup := az.getPublicIPAddressResourceGroup(service) - _, existsPip, err := az.getPublicIPAddress(pipResourceGroup, pipName, azcache.CacheReadTypeDefault) - if err != nil { - return false - } - return existsPip - }() - existingLBs, err := az.ListLB(service) if err != nil { - return nil, existsPip, err + return nil, az.existsPip(clusterName, service), err } - _, status, existsLb, err := az.getServiceLoadBalancer(service, clusterName, nil, false, existingLBs) + _, _, status, _, existsLb, err := az.getServiceLoadBalancer(service, clusterName, nil, false, &existingLBs) if err != nil || existsLb { - return status, existsLb || existsPip, err + return status, existsLb || az.existsPip(clusterName, service), err } flippedService := flipServiceInternalAnnotation(service) - _, status, existsLb, err = az.getServiceLoadBalancer(flippedService, clusterName, nil, false, existingLBs) + _, _, status, _, existsLb, err = az.getServiceLoadBalancer(flippedService, clusterName, nil, false, &existingLBs) if err != nil || existsLb { - return status, existsLb || existsPip, err + return status, existsLb || az.existsPip(clusterName, service), err } // Return exists = false only if the load balancer and the public IP are not found on Azure - if !existsLb && !existsPip { + if !existsLb && !az.existsPip(clusterName, service) { serviceName := getServiceName(service) klog.V(5).Infof("getloadbalancer (cluster:%s) (service:%s) - doesn't exist", clusterName, serviceName) return nil, false, nil @@ -135,14 +118,16 @@ func getPublicIPDomainNameLabel(service *v1.Service) (string, bool) { // reconcileService reconcile the LoadBalancer service. It returns LoadBalancerStatus on success. func (az *Cloud) reconcileService(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { serviceName := getServiceName(service) + resourceBaseName := az.GetLoadBalancerName(context.TODO(), "", service) + klog.V(2).Infof("reconcileService: Start reconciling Service %q with its resource basename %q", serviceName, resourceBaseName) + lb, err := az.reconcileLoadBalancer(clusterName, service, nodes, true /* wantLb */) if err != nil { klog.Errorf("reconcileLoadBalancer(%s) failed: %v", serviceName, err) return nil, err } - var pips []network.PublicIPAddress - lbStatus, fipConfig, err := az.getServiceLoadBalancerStatus(service, lb, &pips) + lbStatus, lbIPsPrimaryPIPs, fipConfigs, err := az.getServiceLoadBalancerStatus(service, lb) if err != nil { klog.Errorf("getServiceLoadBalancerStatus(%s) failed: %v", serviceName, err) if !errors.Is(err, ErrorNotVmssInstance) { @@ -150,25 +135,21 @@ func (az *Cloud) reconcileService(ctx context.Context, clusterName string, servi } } - var serviceIP *string - if lbStatus != nil && len(lbStatus.Ingress) > 0 { - serviceIP = &lbStatus.Ingress[0].IP - } - - klog.V(2).Infof("reconcileService: reconciling security group for service %q with IP %q, wantLb = true", serviceName, logSafe(serviceIP)) - if _, err := az.reconcileSecurityGroup(clusterName, service, serviceIP, lb.Name, true /* wantLb */); err != nil { + serviceIPs := lbIPsPrimaryPIPs + klog.V(2).Infof("reconcileService: reconciling security group for service %q with IPs %q, wantLb = true", serviceName, serviceIPs) + if _, err := az.reconcileSecurityGroup(clusterName, service, &serviceIPs, lb.Name, true /* wantLb */); err != nil { klog.Errorf("reconcileSecurityGroup(%s) failed: %#v", serviceName, err) return nil, err } - if fipConfig != nil { + for _, fipConfig := range fipConfigs { if err := az.reconcilePrivateLinkService(clusterName, service, fipConfig, true /* wantPLS */); err != nil { klog.Errorf("reconcilePrivateLinkService(%s) failed: %#v", serviceName, err) return nil, err } } - updateService := updateServiceLoadBalancerIP(service, to.String(serviceIP)) + updateService := updateServiceLoadBalancerIPs(service, lbIPsPrimaryPIPs) flippedService := flipServiceInternalAnnotation(updateService) if _, err := az.reconcileLoadBalancer(clusterName, flippedService, nil, false /* wantLb */); err != nil { klog.Errorf("reconcileLoadBalancer(%s) failed: %#v", serviceName, err) @@ -177,11 +158,19 @@ func (az *Cloud) reconcileService(ctx context.Context, clusterName string, servi // lb is not reused here because the ETAG may be changed in above operations, hence reconcilePublicIP() would get lb again from cache. klog.V(2).Infof("reconcileService: reconciling pip") - if _, err := az.reconcilePublicIP(clusterName, updateService, to.String(lb.Name), true /* wantLb */); err != nil { + if _, err := az.reconcilePublicIPs(clusterName, updateService, pointer.StringDeref(lb.Name, ""), true /* wantLb */); err != nil { klog.Errorf("reconcilePublicIP(%s) failed: %#v", serviceName, err) return nil, err } + lbName := strings.ToLower(pointer.StringDeref(lb.Name, "")) + key := strings.ToLower(serviceName) + if az.useMultipleStandardLoadBalancers() && isLocalService(service) { + az.localServiceNameToServiceInfoMap.Store(key, newServiceInfo(getServiceIPFamily(service), lbName)) + } else { + az.localServiceNameToServiceInfoMap.Delete(key) + } + return lbStatus, nil } @@ -215,8 +204,10 @@ func (az *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, ser return lbStatus, nil } -func (az *Cloud) getLatestService(service *v1.Service) (*v1.Service, bool, error) { - latestService, err := az.serviceLister.Services(service.Namespace).Get(service.Name) +func (az *Cloud) getLatestService(serviceName string, deepcopy bool) (*v1.Service, bool, error) { + parts := strings.Split(serviceName, "/") + ns, n := parts[0], parts[1] + latestService, err := az.serviceLister.Services(ns).Get(n) switch { case apierrors.IsNotFound(err): // service absence in store means the service deletion is caught by watcher @@ -224,7 +215,10 @@ func (az *Cloud) getLatestService(service *v1.Service) (*v1.Service, bool, error case err != nil: return nil, false, err default: - return latestService.DeepCopy(), true, nil + if deepcopy { + return latestService.DeepCopy(), true, nil + } + return latestService, true, nil } } @@ -245,7 +239,7 @@ func (az *Cloud) UpdateLoadBalancer(ctx context.Context, clusterName string, ser }() // In case UpdateLoadBalancer gets stale service spec, retrieve the latest from lister - service, serviceExists, err := az.getLatestService(service) + service, serviceExists, err := az.getLatestService(serviceName, true) if err != nil { return fmt.Errorf("UpdateLoadBalancer: failed to get latest service %s: %w", service.Name, err) } @@ -296,13 +290,13 @@ func (az *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName stri klog.V(5).InfoS("EnsureLoadBalancerDeleted Finish", "service", serviceName, "cluster", clusterName, "service_spec", service, "error", err) }() - serviceIPToCleanup, err := az.findServiceIPAddress(ctx, clusterName, service) + _, _, _, lbIPsPrimaryPIPs, _, err := az.getServiceLoadBalancer(service, clusterName, nil, false, &[]network.LoadBalancer{}) if err != nil && !retry.HasStatusForbiddenOrIgnoredError(err) { return err } - - klog.V(2).Infof("EnsureLoadBalancerDeleted: reconciling security group for service %q with IP %q, wantLb = false", serviceName, serviceIPToCleanup) - _, err = az.reconcileSecurityGroup(clusterName, service, &serviceIPToCleanup, nil, false /* wantLb */) + serviceIPsToCleanup := lbIPsPrimaryPIPs + klog.V(2).Infof("EnsureLoadBalancerDeleted: reconciling security group for service %q with IPs %q, wantLb = false", serviceName, serviceIPsToCleanup) + _, err = az.reconcileSecurityGroup(clusterName, service, &serviceIPsToCleanup, nil, false /* wantLb */) if err != nil { return err } @@ -318,11 +312,15 @@ func (az *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName stri return err } - _, err = az.reconcilePublicIP(clusterName, service, "", false /* wantLb */) - if err != nil { + if _, err = az.reconcilePublicIPs(clusterName, service, "", false /* wantLb */); err != nil { return err } + if az.useMultipleStandardLoadBalancers() && isLocalService(service) { + key := strings.ToLower(serviceName) + az.localServiceNameToServiceInfoMap.Delete(key) + } + klog.V(2).Infof("Delete service (%s): FINISH", serviceName) isOperationSucceeded = true @@ -345,7 +343,19 @@ func (az *Cloud) getLoadBalancerResourceGroup() string { // shouldChangeLoadBalancer determines if the load balancer of the service should be switched to another one // according to the mode annotation on the service. This could be happened when the LB selection mode of an // existing service is changed to another VMSS/VMAS. -func (az *Cloud) shouldChangeLoadBalancer(service *v1.Service, currLBName, clusterName string) bool { +func (az *Cloud) shouldChangeLoadBalancer(service *v1.Service, currLBName, clusterName, expectedLBName string) bool { + // The load balancer can be changed in two cases: + // 1. Using multiple standard load balancers. + // 2. Migrate from multiple standard load balancers to single standard load balancer. + if az.useStandardLoadBalancer() { + if currLBName != expectedLBName { + klog.V(2).Infof("shouldChangeLoadBalancer(%s, %s, %s): change the LB to another one %s", service.Name, currLBName, clusterName, expectedLBName) + return true + } + return false + } + + // basic LB hasMode, isAuto, vmSetName := az.getServiceLoadBalancerMode(service) // if no mode is given or the mode is `__auto__`, the current LB should be kept @@ -353,12 +363,6 @@ func (az *Cloud) shouldChangeLoadBalancer(service *v1.Service, currLBName, clust return false } - // if using the single standard load balancer, the current LB should be kept - useSingleSLB := az.useStandardLoadBalancer() && !az.EnableMultipleStandardLoadBalancers - if useSingleSLB { - return false - } - lbName := strings.TrimSuffix(currLBName, consts.InternalLoadBalancerNameSuffix) // change the LB from vmSet dedicated to primary if the vmSet becomes the primary one if strings.EqualFold(lbName, vmSetName) { @@ -373,30 +377,26 @@ func (az *Cloud) shouldChangeLoadBalancer(service *v1.Service, currLBName, clust return false } - // if the vmSet selected by the annotation is sharing the primary slb, and the service - // has been associated to the primary slb, keep it - useMultipleSLBs := az.useStandardLoadBalancer() && az.EnableMultipleStandardLoadBalancers - if useMultipleSLBs && - az.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vmSetName)) && - strings.EqualFold(lbName, clusterName) { - return false - } - // if the VMSS/VMAS of the current LB is different from the mode, change the LB // to another one klog.V(2).Infof("shouldChangeLoadBalancer(%s, %s, %s): change the LB to another one", service.Name, currLBName, clusterName) return true } -func (az *Cloud) removeFrontendIPConfigurationFromLoadBalancer(lb *network.LoadBalancer, existingLBs []network.LoadBalancer, fip *network.FrontendIPConfiguration, clusterName string, service *v1.Service) error { +// removeFrontendIPConfigurationFromLoadBalancer removes the given ip configs from the load balancer +// and delete the load balancer if there is no ip config on it. It returns the name of the deleted load balancer +// and it will be used in reconcileLoadBalancer to remove the load balancer from the list. +func (az *Cloud) removeFrontendIPConfigurationFromLoadBalancer(lb *network.LoadBalancer, existingLBs *[]network.LoadBalancer, fips []*network.FrontendIPConfiguration, clusterName string, service *v1.Service) (string, error) { if lb == nil || lb.LoadBalancerPropertiesFormat == nil || lb.FrontendIPConfigurations == nil { - return nil + return "", nil } fipConfigs := *lb.FrontendIPConfigurations for i, fipConfig := range fipConfigs { - if strings.EqualFold(to.String(fipConfig.Name), to.String(fip.Name)) { - fipConfigs = append(fipConfigs[:i], fipConfigs[i+1:]...) - break + for _, fip := range fips { + if strings.EqualFold(pointer.StringDeref(fipConfig.Name, ""), pointer.StringDeref(fip.Name, "")) { + fipConfigs = append(fipConfigs[:i], fipConfigs[i+1:]...) + break + } } } lb.FrontendIPConfigurations = &fipConfigs @@ -405,8 +405,10 @@ func (az *Cloud) removeFrontendIPConfigurationFromLoadBalancer(lb *network.LoadB if lb.LoadBalancingRules != nil { lbRules := *lb.LoadBalancingRules for i := len(lbRules) - 1; i >= 0; i-- { - if strings.Contains(to.String(lbRules[i].Name), to.String(fip.Name)) { - lbRules = append(lbRules[:i], lbRules[i+1:]...) + for _, fip := range fips { + if strings.Contains(pointer.StringDeref(lbRules[i].Name, ""), pointer.StringDeref(fip.Name, "")) { + lbRules = append(lbRules[:i], lbRules[i+1:]...) + } } } lb.LoadBalancingRules = &lbRules @@ -414,58 +416,75 @@ func (az *Cloud) removeFrontendIPConfigurationFromLoadBalancer(lb *network.LoadB if lb.Probes != nil { lbProbes := *lb.Probes for i := len(lbProbes) - 1; i >= 0; i-- { - if strings.Contains(to.String(lbProbes[i].Name), to.String(fip.Name)) { - lbProbes = append(lbProbes[:i], lbProbes[i+1:]...) + for _, fip := range fips { + if strings.Contains(pointer.StringDeref(lbProbes[i].Name, ""), pointer.StringDeref(fip.Name, "")) { + lbProbes = append(lbProbes[:i], lbProbes[i+1:]...) + } } } lb.Probes = &lbProbes } - // clean up any private link service associated with the frontEndIPConfig - err := az.reconcilePrivateLinkService(clusterName, service, fip, false /* wantPLS */) - if err != nil { - klog.Errorf("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): failed to clean up PLS: %v", to.String(lb.Name), to.String(fip.Name), clusterName, service.Name, err) - return err + // PLS does not support IPv6 so there will not be additional API calls. + for _, fip := range fips { + // clean up any private link service associated with the frontEndIPConfig + if err := az.reconcilePrivateLinkService(clusterName, service, fip, false /* wantPLS */); err != nil { + klog.Errorf("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): failed to clean up PLS: %v", pointer.StringDeref(lb.Name, ""), pointer.StringDeref(fip.Name, ""), clusterName, service.Name, err) + return "", err + } } + var deletedLBName string + fipNames := []string{} + for _, fip := range fips { + fipNames = append(fipNames, pointer.StringDeref(fip.Name, "")) + } + logPrefix := fmt.Sprintf("removeFrontendIPConfigurationFromLoadBalancer(%s, %q, %s, %s)", pointer.StringDeref(lb.Name, ""), fipNames, clusterName, service.Name) if len(fipConfigs) == 0 { - klog.V(2).Infof("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): deleting load balancer because there is no remaining frontend IP configurations", to.String(lb.Name), to.String(fip.Name), clusterName, service.Name) - err := az.cleanOrphanedLoadBalancer(lb, existingLBs, service, clusterName) + klog.V(2).Infof("%s: deleting load balancer because there is no remaining frontend IP configurations", logPrefix) + err := az.cleanOrphanedLoadBalancer(lb, *existingLBs, service, clusterName) if err != nil { - klog.Errorf("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): failed to cleanupOrphanedLoadBalancer: %v", to.String(lb.Name), to.String(fip.Name), clusterName, service.Name, err) - return err + klog.Errorf("%s: failed to cleanupOrphanedLoadBalancer: %v", logPrefix, err) + return "", err } + deletedLBName = pointer.StringDeref(lb.Name, "") } else { - klog.V(2).Infof("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): updating the load balancer", to.String(lb.Name), to.String(fip.Name), clusterName, service.Name) + klog.V(2).Infof("%s: updating the load balancer", logPrefix) err := az.CreateOrUpdateLB(service, *lb) if err != nil { - klog.Errorf("removeFrontendIPConfigurationFromLoadBalancer(%s, %s, %s, %s): failed to CreateOrUpdateLB: %v", to.String(lb.Name), to.String(fip.Name), clusterName, service.Name, err) - return err + klog.Errorf("%s: failed to CreateOrUpdateLB: %v", logPrefix, err) + return "", err } - _ = az.lbCache.Delete(to.String(lb.Name)) + _ = az.lbCache.Delete(pointer.StringDeref(lb.Name, "")) } - return nil + return deletedLBName, nil } func (az *Cloud) cleanOrphanedLoadBalancer(lb *network.LoadBalancer, existingLBs []network.LoadBalancer, service *v1.Service, clusterName string) error { - lbName := to.String(lb.Name) + lbName := pointer.StringDeref(lb.Name, "") serviceName := getServiceName(service) isBackendPoolPreConfigured := az.isBackendPoolPreConfigured(service) - lbResourceGroup := az.getLoadBalancerResourceGroup() - lbBackendPoolName := getBackendPoolName(clusterName, service) - lbBackendPoolID := az.getBackendPoolID(lbName, lbResourceGroup, lbBackendPoolName) + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + lbBackendPoolIDs := az.getBackendPoolIDs(clusterName, lbName) + lbBackendPoolIDsToDelete := []string{} + if v4Enabled { + lbBackendPoolIDsToDelete = append(lbBackendPoolIDsToDelete, lbBackendPoolIDs[consts.IPVersionIPv4]) + } + if v6Enabled { + lbBackendPoolIDsToDelete = append(lbBackendPoolIDsToDelete, lbBackendPoolIDs[consts.IPVersionIPv6]) + } if isBackendPoolPreConfigured { klog.V(2).Infof("cleanOrphanedLoadBalancer(%s, %s, %s): ignore cleanup of dirty lb because the lb is pre-configured", lbName, serviceName, clusterName) } else { foundLB := false for _, existingLB := range existingLBs { - if strings.EqualFold(to.String(lb.Name), to.String(existingLB.Name)) { + if strings.EqualFold(pointer.StringDeref(lb.Name, ""), pointer.StringDeref(existingLB.Name, "")) { foundLB = true break } } if !foundLB { - klog.V(2).Infof("cleanOrphanedLoadBalancer: the LB %s doesn't exist, will not delete it", to.String(lb.Name)) + klog.V(2).Infof("cleanOrphanedLoadBalancer: the LB %s doesn't exist, will not delete it", pointer.StringDeref(lb.Name, "")) return nil } @@ -480,8 +499,7 @@ func (az *Cloud) cleanOrphanedLoadBalancer(lb *network.LoadBalancer, existingLBs lb.BackendAddressPools = nil } - deleteErr := az.safeDeleteLoadBalancer(*lb, clusterName, vmSetName, service) - if deleteErr != nil { + if deleteErr := az.safeDeleteLoadBalancer(*lb, clusterName, vmSetName, service); deleteErr != nil { klog.Warningf("cleanOrphanedLoadBalancer(%s, %s, %s): failed to DeleteLB: %v", lbName, serviceName, clusterName, deleteErr) rgName, vmssName, parseErr := retry.GetVMSSMetadataByRawError(deleteErr) @@ -505,14 +523,12 @@ func (az *Cloud) cleanOrphanedLoadBalancer(lb *network.LoadBalancer, existingLBs } vmssNamesMap := map[string]bool{vmssName: true} - err := az.VMSet.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, lbBackendPoolID) - if err != nil { + if err := az.VMSet.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, lbBackendPoolIDsToDelete); err != nil { klog.Errorf("cleanOrphanedLoadBalancer(%s, %s, %s): failed to EnsureBackendPoolDeletedFromVMSets: %v", lbName, serviceName, clusterName, err) return err } - deleteErr := az.DeleteLB(service, lbName) - if deleteErr != nil { + if deleteErr := az.DeleteLB(service, lbName); deleteErr != nil { klog.Errorf("cleanOrphanedLoadBalancer(%s, %s, %s): failed delete lb for the second time, stop retrying: %v", lbName, serviceName, clusterName, deleteErr) return deleteErr.Error() } @@ -524,105 +540,42 @@ func (az *Cloud) cleanOrphanedLoadBalancer(lb *network.LoadBalancer, existingLBs // safeDeleteLoadBalancer deletes the load balancer after decoupling it from the vmSet func (az *Cloud) safeDeleteLoadBalancer(lb network.LoadBalancer, clusterName, vmSetName string, service *v1.Service) *retry.Error { - lbBackendPoolID := az.getBackendPoolID(to.String(lb.Name), az.getLoadBalancerResourceGroup(), getBackendPoolName(clusterName, service)) - _, err := az.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolID, vmSetName, lb.BackendAddressPools, true) - if err != nil { - return retry.NewError(false, fmt.Errorf("safeDeleteLoadBalancer: failed to EnsureBackendPoolDeleted: %w", err)) - } - - klog.V(2).Infof("safeDeleteLoadBalancer: deleting LB %s", to.String(lb.Name)) - rerr := az.DeleteLB(service, to.String(lb.Name)) - if rerr != nil { - return rerr - } - _ = az.lbCache.Delete(to.String(lb.Name)) - - return nil -} - -// reconcileSharedLoadBalancer deletes the dedicated SLBs of the non-primary vmSets. There are -// two scenarios where this operation is needed: -// 1. Using multiple slbs and the vmSet is supposed to share the primary slb. -// 2. When migrating from multiple slbs to single slb mode. -// It also ensures those vmSets are joint the backend pools of the primary SLBs. -// It runs only once every time the cloud controller manager restarts. -func (az *Cloud) reconcileSharedLoadBalancer(service *v1.Service, clusterName string, nodes []*v1.Node) ([]network.LoadBalancer, error) { - var ( - existingLBs []network.LoadBalancer - err error - ) - - existingLBs, err = az.ListManagedLBs(service, nodes, clusterName) - if err != nil { - return nil, fmt.Errorf("reconcileSharedLoadBalancer: failed to list managed LB: %w", err) - } - - // only run once since the controller manager rebooted - if az.isSharedLoadBalancerSynced { - return existingLBs, nil + lbBackendPoolIDs := az.getBackendPoolIDs(clusterName, pointer.StringDeref(lb.Name, "")) + lbBackendPoolIDsToDelete := []string{} + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if v4Enabled { + lbBackendPoolIDsToDelete = append(lbBackendPoolIDsToDelete, lbBackendPoolIDs[consts.IPVersionIPv4]) } - defer func() { - if err == nil { - az.isSharedLoadBalancerSynced = true - } - }() - - // skip if the cluster is using basic LB - if !az.useStandardLoadBalancer() { - return existingLBs, nil + if v6Enabled { + lbBackendPoolIDsToDelete = append(lbBackendPoolIDsToDelete, lbBackendPoolIDs[consts.IPVersionIPv6]) } - - // Skip if nodes is nil, which means the service is being deleted. - // When nodes is nil, all LBs included unmanaged LBs will be returned, - // if we don't skip this function, the unmanaged ones may be deleted later. - if nodes == nil { - klog.V(4).Infof("reconcileSharedLoadBalancer: returning early because the service %s is being deleted", service.Name) - return existingLBs, nil + if _, err := az.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolIDsToDelete, vmSetName, lb.BackendAddressPools, true); err != nil { + return retry.NewError(false, fmt.Errorf("safeDeleteLoadBalancer: failed to EnsureBackendPoolDeleted: %w", err)) } - lbNamesToBeDeleted := sets.NewString() - // delete unwanted LBs - for _, lb := range existingLBs { - klog.V(4).Infof("reconcileSharedLoadBalancer: checking LB %s", to.String(lb.Name)) - // skip the internal or external primary load balancer - lbNamePrefix := strings.TrimSuffix(to.String(lb.Name), consts.InternalLoadBalancerNameSuffix) - if strings.EqualFold(lbNamePrefix, clusterName) { - continue - } - - // skip if the multiple slbs mode is enabled and - // the vmSet is supposed to have dedicated SLBs - vmSetName := strings.ToLower(az.mapLoadBalancerNameToVMSet(to.String(lb.Name), clusterName)) - if az.EnableMultipleStandardLoadBalancers && !az.getVMSetNamesSharingPrimarySLB().Has(vmSetName) { - klog.V(4).Infof("reconcileSharedLoadBalancer: skip deleting the LB %s because the vmSet %s needs a dedicated SLB", to.String(lb.Name), vmSetName) - continue - } - - // For non-primary load balancer, the lb name is the name of the VMSet. - // If the VMSet name is in az.NodePoolsWithoutDedicatedSLB, we should - // decouple the VMSet from the lb and delete the lb. Then adding the VMSet - // to the backend pool of the primary slb. - klog.V(2).Infof("reconcileSharedLoadBalancer: deleting LB %s because the corresponding vmSet is supposed to be in the primary SLB", to.String(lb.Name)) - rerr := az.safeDeleteLoadBalancer(lb, clusterName, vmSetName, service) - if rerr != nil { - return nil, rerr.Error() - } - - // remove the deleted lb from the list and construct a new primary - // lb, so that getServiceLoadBalancer doesn't have to call list api again - lbNamesToBeDeleted.Insert(strings.ToLower(to.String(lb.Name))) + klog.V(2).Infof("safeDeleteLoadBalancer: deleting LB %s", pointer.StringDeref(lb.Name, "")) + if rerr := az.DeleteLB(service, pointer.StringDeref(lb.Name, "")); rerr != nil { + return rerr } - - for i := len(existingLBs) - 1; i >= 0; i-- { - lb := existingLBs[i] - if !lbNamesToBeDeleted.Has(strings.ToLower(to.String(lb.Name))) { - continue + _ = az.lbCache.Delete(pointer.StringDeref(lb.Name, "")) + + // Remove corresponding nodes in ActiveNodes and nodesWithCorrectLoadBalancerByPrimaryVMSet. + for i := range az.MultipleStandardLoadBalancerConfigurations { + if strings.EqualFold( + strings.TrimSuffix(pointer.StringDeref(lb.Name, ""), consts.InternalLoadBalancerNameSuffix), + az.MultipleStandardLoadBalancerConfigurations[i].Name, + ) { + if az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes != nil { + for nodeName := range az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes { + az.nodesWithCorrectLoadBalancerByPrimaryVMSet.Delete(strings.ToLower(nodeName)) + } + } + az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes = sets.New[string]() + break } - // remove the deleted LB from the list - existingLBs = append(existingLBs[:i], existingLBs[i+1:]...) } - return existingLBs, nil + return nil } // getServiceLoadBalancer gets the loadbalancer for the service if it already exists. @@ -630,95 +583,125 @@ func (az *Cloud) reconcileSharedLoadBalancer(service *v1.Service, clusterName st // In case the selected load balancer does not exist it returns network.LoadBalancer struct // with added metadata (such as name, location) and existsLB set to FALSE. // By default - cluster default LB is returned. -func (az *Cloud) getServiceLoadBalancer(service *v1.Service, clusterName string, nodes []*v1.Node, wantLb bool, existingLBs []network.LoadBalancer) (lb *network.LoadBalancer, status *v1.LoadBalancerStatus, exists bool, err error) { +func (az *Cloud) getServiceLoadBalancer( + service *v1.Service, + clusterName string, + nodes []*v1.Node, + wantLb bool, + existingLBs *[]network.LoadBalancer, +) (lb *network.LoadBalancer, refreshedLBs *[]network.LoadBalancer, status *v1.LoadBalancerStatus, lbIPsPrimaryPIPs []string, exists bool, err error) { isInternal := requiresInternalLoadBalancer(service) var defaultLB *network.LoadBalancer primaryVMSetName := az.VMSet.GetPrimaryVMSetName() - defaultLBName := az.getAzureLoadBalancerName(clusterName, primaryVMSetName, isInternal) - useMultipleSLBs := az.useStandardLoadBalancer() && az.EnableMultipleStandardLoadBalancers + defaultLBName, err := az.getAzureLoadBalancerName(service, existingLBs, clusterName, primaryVMSetName, isInternal) + if err != nil { + return nil, nil, nil, nil, false, err + } // reuse the lb list from reconcileSharedLoadBalancer to reduce the api call - if len(existingLBs) == 0 { - existingLBs, err = az.ListLB(service) + if existingLBs == nil || len(*existingLBs) == 0 { + lbs, err := az.ListLB(service) if err != nil { - return nil, nil, false, err + return nil, nil, nil, nil, false, err } + existingLBs = &lbs } - // reuse pip list to reduce api call - var pips []network.PublicIPAddress - // check if the service already has a load balancer - for i := range existingLBs { - existingLB := existingLBs[i] - existingLBNamePrefix := strings.TrimSuffix(to.String(existingLB.Name), consts.InternalLoadBalancerNameSuffix) - - // for the primary standard load balancer (internal or external), when enabled multiple slbs - if strings.EqualFold(existingLBNamePrefix, clusterName) && useMultipleSLBs { - shouldRemoveVMSetFromSLB := func(vmSetName string) bool { - // not removing the vmSet from the primary SLB - // if it is supposed to share the primary SLB. - if az.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vmSetName)) { - return false - } + var shouldChangeLB bool + for i := range *existingLBs { + existingLB := (*existingLBs)[i] - // removing the vmSet from the primary SLB if - // it is not the primary vmSet. There are two situations: - // 1. when migrating from single SLB to multiple SLBs, we - // need to remove all non-primary vmSets from the primary SLB; - // 2. when migrating from shared mode to dedicated SLB, we - // need to remove the specific vmSet from the primary SLB. - return !strings.EqualFold(vmSetName, primaryVMSetName) && vmSetName != "" - } - cleanedLB, err := az.LoadBalancerBackendPool.CleanupVMSetFromBackendPoolByCondition(&existingLB, service, nodes, clusterName, shouldRemoveVMSetFromSLB) - if err != nil { - return nil, nil, false, err - } - existingLB = *cleanedLB - existingLBs[i] = *cleanedLB - } if strings.EqualFold(*existingLB.Name, defaultLBName) { defaultLB = &existingLB } if isInternalLoadBalancer(&existingLB) != isInternal { continue } - var fipConfig *network.FrontendIPConfiguration - status, fipConfig, err = az.getServiceLoadBalancerStatus(service, &existingLB, &pips) + + var fipConfigs []*network.FrontendIPConfiguration + status, lbIPsPrimaryPIPs, fipConfigs, err = az.getServiceLoadBalancerStatus(service, &existingLB) if err != nil { - return nil, nil, false, err + return nil, nil, nil, nil, false, err } if status == nil { // service is not on this load balancer continue } - klog.V(4).Infof("getServiceLoadBalancer(%s, %s, %v): current lb ip: %s", service.Name, clusterName, wantLb, status.Ingress[0].IP) + klog.V(4).Infof("getServiceLoadBalancer(%s, %s, %v): current lb IPs: %q", service.Name, clusterName, wantLb, lbIPsPrimaryPIPs) // select another load balancer instead of returning // the current one if the change is needed - if wantLb && az.shouldChangeLoadBalancer(service, to.String(existingLB.Name), clusterName) { - if err := az.removeFrontendIPConfigurationFromLoadBalancer(&existingLB, existingLBs, fipConfig, clusterName, service); err != nil { - klog.Errorf("getServiceLoadBalancer(%s, %s, %v): failed to remove frontend IP configuration from load balancer: %v", service.Name, clusterName, wantLb, err) - return nil, nil, false, err + var ( + deletedLBName string + err error + ) + if wantLb && az.shouldChangeLoadBalancer(service, pointer.StringDeref(existingLB.Name, ""), clusterName, defaultLBName) { + shouldChangeLB = true + fipConfigNames := []string{} + for _, fipConfig := range fipConfigs { + fipConfigNames = append(fipConfigNames, pointer.StringDeref(fipConfig.Name, "")) + } + deletedLBName, err = az.removeFrontendIPConfigurationFromLoadBalancer(&existingLB, existingLBs, fipConfigs, clusterName, service) + if err != nil { + klog.Errorf("getServiceLoadBalancer(%s, %s, %v): failed to remove frontend IP configurations %q from load balancer: %v", service.Name, clusterName, wantLb, fipConfigNames, err) + return nil, nil, nil, nil, false, err + } + if deletedLBName != "" { + removeLBFromList(existingLBs, deletedLBName) + } + az.reconcileMultipleStandardLoadBalancerConfigurationStatus( + false, + getServiceName(service), + pointer.StringDeref(existingLB.Name, ""), + ) + + if isLocalService(service) && az.useMultipleStandardLoadBalancers() { + // No need for the endpoint slice informer to update the backend pool + // for the service because the main loop will delete the old backend pool + // and create a new one in the new load balancer. + svcName := getServiceName(service) + if az.backendPoolUpdater != nil { + az.backendPoolUpdater.removeOperation(svcName) + } + + // Remove backend pools on the previous load balancer for the local service + if deletedLBName == "" { + newLBs, err := az.cleanupLocalServiceBackendPool(service, nodes, existingLBs, clusterName) + if err != nil { + klog.Errorf("getServiceLoadBalancer(%s, %s, %v): failed to cleanup backend pool for local service: %s", service.Name, clusterName, wantLb, err.Error()) + return nil, nil, nil, nil, false, err + } + existingLBs = newLBs + } } break } - return &existingLB, status, true, nil + return &existingLB, existingLBs, status, lbIPsPrimaryPIPs, true, nil } // Service does not have a load balancer, select one. // Single standard load balancer doesn't need this because // all backends nodes should be added to same LB. - useSingleSLB := az.useStandardLoadBalancer() && !az.EnableMultipleStandardLoadBalancers - if wantLb && !useSingleSLB { + if wantLb && !az.useStandardLoadBalancer() { // select new load balancer for service - selectedLB, exists, err := az.selectLoadBalancer(clusterName, service, &existingLBs, nodes) + selectedLB, exists, err := az.selectLoadBalancer(clusterName, service, existingLBs, nodes) if err != nil { - return nil, nil, false, err + return nil, existingLBs, nil, nil, false, err } - return selectedLB, status, exists, err + return selectedLB, existingLBs, status, lbIPsPrimaryPIPs, exists, err + } + + // If the service moves to a different load balancer, return the one + // instead of creating a new load balancer if it exists. + if shouldChangeLB { + for _, existingLB := range *existingLBs { + if strings.EqualFold(pointer.StringDeref(existingLB.Name, ""), defaultLBName) { + return &existingLB, existingLBs, status, lbIPsPrimaryPIPs, true, nil + } + } } // create a default LB with meta data if not present @@ -741,13 +724,14 @@ func (az *Cloud) getServiceLoadBalancer(service *v1.Service, clusterName string, } } - return defaultLB, nil, false, nil + return defaultLB, existingLBs, nil, nil, false, nil } // selectLoadBalancer selects load balancer for the service in the cluster. // The selection algorithm selects the load balancer which currently has // the minimum lb rules. If there are multiple LBs with same number of rules, // then selects the first one (sorted based on name). +// Note: this function is only useful for basic LB clusters. func (az *Cloud) selectLoadBalancer(clusterName string, service *v1.Service, existingLBs *[]network.LoadBalancer, nodes []*v1.Node) (selectedLB *network.LoadBalancer, existsLb bool, err error) { isInternal := requiresInternalLoadBalancer(service) serviceName := getServiceName(service) @@ -765,7 +749,7 @@ func (az *Cloud) selectLoadBalancer(clusterName string, service *v1.Service, exi } selectedLBRuleCount := math.MaxInt32 for _, currVMSetName := range *vmSetNames { - currLBName := az.getAzureLoadBalancerName(clusterName, currVMSetName, isInternal) + currLBName, _ := az.getAzureLoadBalancerName(service, existingLBs, clusterName, currVMSetName, isInternal) lb, exists := mapExistingLBs[currLBName] if !exists { // select this LB as this is a new LB and will have minimum rules @@ -818,94 +802,102 @@ func (az *Cloud) selectLoadBalancer(clusterName string, service *v1.Service, exi return selectedLB, existsLb, nil } -// pips: a non-nil pointer to a slice of existing PIPs, if the slice being pointed to is nil, listPIP would be called when needed and the slice would be filled -func (az *Cloud) getServiceLoadBalancerStatus(service *v1.Service, lb *network.LoadBalancer, pips *[]network.PublicIPAddress) (status *v1.LoadBalancerStatus, fipConfig *network.FrontendIPConfiguration, err error) { +// getServiceLoadBalancerStatus returns LB status for the Service. +// Before DualStack support, old logic takes the first ingress IP as non-additional one +// and the second one as additional one. With DualStack support, the second IP may be +// the IP of another IP family so the new logic returns two variables. +func (az *Cloud) getServiceLoadBalancerStatus(service *v1.Service, lb *network.LoadBalancer) (status *v1.LoadBalancerStatus, lbIPsPrimaryPIPs []string, fipConfigs []*network.FrontendIPConfiguration, err error) { if lb == nil { klog.V(10).Info("getServiceLoadBalancerStatus: lb is nil") - return nil, nil, nil + return nil, nil, nil, nil } if lb.FrontendIPConfigurations == nil || len(*lb.FrontendIPConfigurations) == 0 { klog.V(10).Info("getServiceLoadBalancerStatus: lb.FrontendIPConfigurations is nil") - return nil, nil, nil + return nil, nil, nil, nil } + isInternal := requiresInternalLoadBalancer(service) serviceName := getServiceName(service) - for _, ipConfiguration := range *lb.FrontendIPConfigurations { - owns, isPrimaryService, err := az.serviceOwnsFrontendIP(ipConfiguration, service, pips) - if err != nil { - return nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to filter frontend IP configs with error: %w", serviceName, to.String(lb.Name), err) - } + lbIngresses := []v1.LoadBalancerIngress{} + for i := range *lb.FrontendIPConfigurations { + ipConfiguration := (*lb.FrontendIPConfigurations)[i] + owns, isPrimaryService, _ := az.serviceOwnsFrontendIP(ipConfiguration, service) if owns { - klog.V(2).Infof("get(%s): lb(%s) - found frontend IP config, primary service: %v", serviceName, to.String(lb.Name), isPrimaryService) + klog.V(2).Infof("get(%s): lb(%s) - found frontend IP config, primary service: %v", serviceName, pointer.StringDeref(lb.Name, ""), isPrimaryService) var lbIP *string if isInternal { lbIP = ipConfiguration.PrivateIPAddress } else { if ipConfiguration.PublicIPAddress == nil { - return nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress is Nil", serviceName, *lb.Name) + return nil, nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress is Nil", serviceName, *lb.Name) } pipID := ipConfiguration.PublicIPAddress.ID if pipID == nil { - return nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress ID is Nil", serviceName, *lb.Name) + return nil, nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress ID is Nil", serviceName, *lb.Name) } pipName, err := getLastSegment(*pipID, "/") if err != nil { - return nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress Name from ID(%s)", serviceName, *lb.Name, *pipID) + return nil, nil, nil, fmt.Errorf("get(%s): lb(%s) - failed to get LB PublicIPAddress Name from ID(%s)", serviceName, *lb.Name, *pipID) } pip, existsPip, err := az.getPublicIPAddress(az.getPublicIPAddressResourceGroup(service), pipName, azcache.CacheReadTypeDefault) if err != nil { - return nil, nil, err + return nil, nil, nil, err } if existsPip { lbIP = pip.IPAddress } } - klog.V(2).Infof("getServiceLoadBalancerStatus gets ingress IP %q from frontendIPConfiguration %q for service %q", to.String(lbIP), to.String(ipConfiguration.Name), serviceName) - - // set additional public IPs to LoadBalancerStatus, so that kube-proxy would create their iptables rules. - lbIngress := []v1.LoadBalancerIngress{{IP: to.String(lbIP)}} - additionalIPs, err := getServiceAdditionalPublicIPs(service) - if err != nil { - return &v1.LoadBalancerStatus{Ingress: lbIngress}, &ipConfiguration, err - } - if len(additionalIPs) > 0 { - for _, pip := range additionalIPs { - lbIngress = append(lbIngress, v1.LoadBalancerIngress{ - IP: pip, - }) - } - } + klog.V(2).Infof("getServiceLoadBalancerStatus gets ingress IP %q from frontendIPConfiguration %q for service %q", pointer.StringDeref(lbIP, ""), pointer.StringDeref(ipConfiguration.Name, ""), serviceName) - return &v1.LoadBalancerStatus{Ingress: lbIngress}, &ipConfiguration, nil + lbIngresses = append(lbIngresses, v1.LoadBalancerIngress{IP: pointer.StringDeref(lbIP, "")}) + lbIPsPrimaryPIPs = append(lbIPsPrimaryPIPs, pointer.StringDeref(lbIP, "")) + fipConfigs = append(fipConfigs, &ipConfiguration) } } + if len(lbIngresses) == 0 { + return nil, nil, nil, nil + } - return nil, nil, nil + // set additional public IPs to LoadBalancerStatus, so that kube-proxy would create their iptables rules. + additionalIPs, err := getServiceAdditionalPublicIPs(service) + if err != nil { + return &v1.LoadBalancerStatus{Ingress: lbIngresses}, lbIPsPrimaryPIPs, fipConfigs, err + } + if len(additionalIPs) > 0 { + for _, pip := range additionalIPs { + lbIngresses = append(lbIngresses, v1.LoadBalancerIngress{ + IP: pip, + }) + } + } + return &v1.LoadBalancerStatus{Ingress: lbIngresses}, lbIPsPrimaryPIPs, fipConfigs, nil } -// pips: a non-nil pointer to a slice of existing PIPs, if the slice being pointed to is nil, listPIP would be called when needed and the slice would be filled -func (az *Cloud) determinePublicIPName(clusterName string, service *v1.Service, pips *[]network.PublicIPAddress) (string, bool, error) { - if name, found := service.Annotations[consts.ServiceAnnotationPIPName]; found && name != "" { +func (az *Cloud) determinePublicIPName(clusterName string, service *v1.Service, isIPv6 bool) (string, bool, error) { + if name := getServicePIPName(service, isIPv6); name != "" { return name, true, nil } - if ipPrefix, ok := service.Annotations[consts.ServiceAnnotationPIPPrefixID]; ok && ipPrefix != "" { - return az.getPublicIPName(clusterName, service), false, nil - } pipResourceGroup := az.getPublicIPAddressResourceGroup(service) - loadBalancerIP := getServiceLoadBalancerIP(service) + if id := getServicePIPPrefixID(service, isIPv6); id != "" { + pipName, err := az.getPublicIPName(clusterName, service, isIPv6) + return pipName, false, err + } + + loadBalancerIP := getServiceLoadBalancerIP(service, isIPv6) // Assume that the service without loadBalancerIP set is a primary service. // If a secondary service doesn't set the loadBalancerIP, it is not allowed to share the IP. if len(loadBalancerIP) == 0 { - return az.getPublicIPName(clusterName, service), false, nil + pipName, err := az.getPublicIPName(clusterName, service, isIPv6) + return pipName, false, err } // For the services with loadBalancerIP set, an existing public IP is required, primary // or secondary, or a public IP not found error would be reported. - pip, err := az.findMatchedPIPByLoadBalancerIP(service, loadBalancerIP, pipResourceGroup, pips) + pip, err := az.findMatchedPIP(loadBalancerIP, "", pipResourceGroup) if err != nil { return "", false, err } @@ -917,28 +909,6 @@ func (az *Cloud) determinePublicIPName(clusterName string, service *v1.Service, return "", false, fmt.Errorf("user supplied IP Address %s was not found in resource group %s", loadBalancerIP, pipResourceGroup) } -// pips: a non-nil pointer to a slice of existing PIPs, if the slice being pointed to is nil, listPIP would be called when needed and the slice would be filled -func (az *Cloud) findMatchedPIPByLoadBalancerIP(service *v1.Service, loadBalancerIP, pipResourceGroup string, pips *[]network.PublicIPAddress) (*network.PublicIPAddress, error) { - if pips == nil { - // this should not happen - return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: nil pip list passed") - } else if *pips == nil { - pipList, err := az.ListPIP(service, pipResourceGroup) - if err != nil { - return nil, err - } - *pips = pipList - } - for _, pip := range *pips { - if pip.PublicIPAddressPropertiesFormat.IPAddress != nil && - *pip.PublicIPAddressPropertiesFormat.IPAddress == loadBalancerIP { - return &pip, nil - } - } - - return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: cannot find public IP with IP address %s in resource group %s", loadBalancerIP, pipResourceGroup) -} - func flipServiceInternalAnnotation(service *v1.Service) *v1.Service { copyService := service.DeepCopy() if copyService.Annotations == nil { @@ -954,53 +924,32 @@ func flipServiceInternalAnnotation(service *v1.Service) *v1.Service { return copyService } -func updateServiceLoadBalancerIP(service *v1.Service, serviceIP string) *v1.Service { +func updateServiceLoadBalancerIPs(service *v1.Service, serviceIPs []string) *v1.Service { copyService := service.DeepCopy() - if len(serviceIP) > 0 && copyService != nil { - setServiceLoadBalancerIP(copyService, serviceIP) + if copyService != nil { + for _, serviceIP := range serviceIPs { + setServiceLoadBalancerIP(copyService, serviceIP) + } } return copyService } -func (az *Cloud) findServiceIPAddress(ctx context.Context, clusterName string, service *v1.Service) (string, error) { - lbIP := getServiceLoadBalancerIP(service) - if len(lbIP) > 0 { - return lbIP, nil - } - - if len(service.Status.LoadBalancer.Ingress) > 0 && len(service.Status.LoadBalancer.Ingress[0].IP) > 0 { - return service.Status.LoadBalancer.Ingress[0].IP, nil - } - - _, lbStatus, existsLb, err := az.getServiceLoadBalancer(service, clusterName, nil, false, []network.LoadBalancer{}) - if err != nil { - return "", err - } - if !existsLb { - klog.V(2).Infof("Expected to find an IP address for service %s but did not. Assuming it has been removed", service.Name) - return "", nil - } - if len(lbStatus.Ingress) < 1 { - klog.V(2).Infof("Expected to find an IP address for service %s but it had no ingresses. Assuming it has been removed", service.Name) - return "", nil - } - - return lbStatus.Ingress[0].IP, nil -} - -func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domainNameLabel, clusterName string, shouldPIPExisted, foundDNSLabelAnnotation bool) (*network.PublicIPAddress, error) { +func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domainNameLabel, clusterName string, shouldPIPExisted, foundDNSLabelAnnotation, isIPv6 bool) (*network.PublicIPAddress, error) { pipResourceGroup := az.getPublicIPAddressResourceGroup(service) pip, existsPip, err := az.getPublicIPAddress(pipResourceGroup, pipName, azcache.CacheReadTypeDefault) if err != nil { return nil, err } - serviceName := getServiceName(service) + ipVersion := network.IPv4 + if isIPv6 { + ipVersion = network.IPv6 + } - var changed bool + var changed, owns, isUserAssignedPIP bool if existsPip { // ensure that the service tag is good for managed pips - owns, isUserAssignedPIP := serviceOwnsPublicIP(service, &pip, clusterName) + owns, isUserAssignedPIP = serviceOwnsPublicIP(service, &pip, clusterName) if owns && !isUserAssignedPIP { changed, err = bindServicesToPIP(&pip, []string{serviceName}, false) if err != nil { @@ -1038,22 +987,23 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai } } - klog.V(2).Infof("ensurePublicIPExists for service(%s): pip(%s) - updating", serviceName, to.String(pip.Name)) + klog.V(2).Infof("ensurePublicIPExists for service(%s): pip(%s) - updating", serviceName, pointer.StringDeref(pip.Name, "")) if pip.PublicIPAddressPropertiesFormat == nil { pip.PublicIPAddressPropertiesFormat = &network.PublicIPAddressPropertiesFormat{ - PublicIPAllocationMethod: network.IPAllocationMethodStatic, + PublicIPAllocationMethod: network.Static, + PublicIPAddressVersion: ipVersion, } changed = true } } else { if shouldPIPExisted { - return nil, fmt.Errorf("PublicIP from annotation azure-pip-name=%s for service %s doesn't exist", pipName, serviceName) + return nil, fmt.Errorf("PublicIP from annotation azure-pip-name(-IPv6)=%s for service %s doesn't exist", pipName, serviceName) } changed = true - pip.Name = to.StringPtr(pipName) - pip.Location = to.StringPtr(az.Location) + pip.Name = pointer.String(pipName) + pip.Location = pointer.String(az.Location) if az.HasExtendedLocation() { klog.V(2).Infof("Using extended location with name %s, and type %s for PIP", az.ExtendedLocationName, az.ExtendedLocationType) pip.ExtendedLocation = &network.ExtendedLocation{ @@ -1062,11 +1012,12 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai } } pip.PublicIPAddressPropertiesFormat = &network.PublicIPAddressPropertiesFormat{ - PublicIPAllocationMethod: network.IPAllocationMethodStatic, + PublicIPAllocationMethod: network.Static, + PublicIPAddressVersion: ipVersion, IPTags: getServiceIPTagRequestForPublicIP(service).IPTags, } pip.Tags = map[string]*string{ - consts.ServiceTagKey: to.StringPtr(""), + consts.ServiceTagKey: pointer.String(""), consts.ClusterNameKey: &clusterName, } if _, err = bindServicesToPIP(&pip, []string{serviceName}, false); err != nil { @@ -1077,14 +1028,15 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai pip.Sku = &network.PublicIPAddressSku{ Name: network.PublicIPAddressSkuNameStandard, } - if pipPrefixName, ok := service.Annotations[consts.ServiceAnnotationPIPPrefixID]; ok && pipPrefixName != "" { - pip.PublicIPPrefix = &network.SubResource{ID: to.StringPtr(pipPrefixName)} + + if id := getServicePIPPrefixID(service, isIPv6); id != "" { + pip.PublicIPPrefix = &network.SubResource{ID: pointer.String(id)} } // skip adding zone info since edge zones doesn't support multiple availability zones. if !az.HasExtendedLocation() { // only add zone information for the new standard pips - zones, err := az.getRegionZonesBackoff(to.String(pip.Location)) + zones, err := az.getRegionZonesBackoff(pointer.StringDeref(pip.Location, "")) if err != nil { return nil, err } @@ -1095,12 +1047,12 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai } klog.V(2).Infof("ensurePublicIPExists for service(%s): pip(%s) - creating", serviceName, *pip.Name) } - if az.ensurePIPTagged(service, &pip) { + if !isUserAssignedPIP && az.ensurePIPTagged(service, &pip) { changed = true } if foundDNSLabelAnnotation { - updatedDNSSettings, err := reconcileDNSSettings(&pip, domainNameLabel, serviceName, pipName) + updatedDNSSettings, err := reconcileDNSSettings(&pip, domainNameLabel, serviceName, pipName, isUserAssignedPIP) if err != nil { return nil, fmt.Errorf("ensurePublicIPExists for service(%s): failed to reconcileDNSSettings: %w", serviceName, err) } @@ -1112,7 +1064,7 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai // use the same family as the clusterIP as we support IPv6 single stack as well // as dual-stack clusters - updatedIPSettings := az.reconcileIPSettings(&pip, service) + updatedIPSettings := az.reconcileIPSettings(&pip, service, isIPv6) if updatedIPSettings { changed = true } @@ -1137,32 +1089,31 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai return &pip, nil } -func (az *Cloud) reconcileIPSettings(pip *network.PublicIPAddress, service *v1.Service) bool { +func (az *Cloud) reconcileIPSettings(pip *network.PublicIPAddress, service *v1.Service, isIPv6 bool) bool { var changed bool serviceName := getServiceName(service) - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) - if ipv6 { - if !strings.EqualFold(string(pip.PublicIPAddressVersion), string(network.IPVersionIPv6)) { - pip.PublicIPAddressVersion = network.IPVersionIPv6 - klog.V(2).Infof("service(%s): pip(%s) - creating as ipv6 for clusterIP:%v", serviceName, *pip.Name, service.Spec.ClusterIP) + if isIPv6 { + if !strings.EqualFold(string(pip.PublicIPAddressVersion), string(network.IPv6)) { + pip.PublicIPAddressVersion = network.IPv6 + klog.V(2).Infof("service(%s): pip(%s) - should be created as IPv6", serviceName, *pip.Name) changed = true } if az.useStandardLoadBalancer() { // standard sku must have static allocation method for ipv6 - if !strings.EqualFold(string(pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod), string(network.IPAllocationMethodStatic)) { - pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod = network.IPAllocationMethodStatic + if !strings.EqualFold(string(pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod), string(network.Static)) { + pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod = network.Static changed = true } - } else if !strings.EqualFold(string(pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod), string(network.IPAllocationMethodDynamic)) { - pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod = network.IPAllocationMethodDynamic + } else if !strings.EqualFold(string(pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod), string(network.Dynamic)) { + pip.PublicIPAddressPropertiesFormat.PublicIPAllocationMethod = network.Dynamic changed = true } } else { - if !strings.EqualFold(string(pip.PublicIPAddressVersion), string(network.IPVersionIPv4)) { - pip.PublicIPAddressVersion = network.IPVersionIPv4 - klog.V(2).Infof("service(%s): pip(%s) - creating as ipv4 for clusterIP:%v", serviceName, *pip.Name, service.Spec.ClusterIP) + if !strings.EqualFold(string(pip.PublicIPAddressVersion), string(network.IPv4)) { + pip.PublicIPAddressVersion = network.IPv4 + klog.V(2).Infof("service(%s): pip(%s) - should be created as IPv4", serviceName, *pip.Name) changed = true } } @@ -1170,7 +1121,11 @@ func (az *Cloud) reconcileIPSettings(pip *network.PublicIPAddress, service *v1.S return changed } -func reconcileDNSSettings(pip *network.PublicIPAddress, domainNameLabel, serviceName, pipName string) (bool, error) { +func reconcileDNSSettings( + pip *network.PublicIPAddress, + domainNameLabel, serviceName, pipName string, + isUserAssignedPIP bool, +) (bool, error) { var changed bool if existingServiceName := getServiceFromPIPDNSTags(pip.Tags); existingServiceName != "" && !strings.EqualFold(existingServiceName, serviceName) { @@ -1192,15 +1147,17 @@ func reconcileDNSSettings(pip *network.PublicIPAddress, domainNameLabel, service changed = true } else { existingDNSLabel := pip.PublicIPAddressPropertiesFormat.DNSSettings.DomainNameLabel - if !strings.EqualFold(to.String(existingDNSLabel), domainNameLabel) { + if !strings.EqualFold(pointer.StringDeref(existingDNSLabel, ""), domainNameLabel) { pip.PublicIPAddressPropertiesFormat.DNSSettings.DomainNameLabel = &domainNameLabel changed = true } } if svc := getServiceFromPIPDNSTags(pip.Tags); svc == "" || !strings.EqualFold(svc, serviceName) { - pip.Tags[consts.ServiceUsingDNSKey] = &serviceName - changed = true + if !isUserAssignedPIP { + pip.Tags[consts.ServiceUsingDNSKey] = &serviceName + changed = true + } } } @@ -1299,8 +1256,8 @@ func sortIPTags(ipTags *[]network.IPTag) { if ipTags != nil { sort.Slice(*ipTags, func(i, j int) bool { ipTag := *ipTags - return to.String(ipTag[i].IPTagType) < to.String(ipTag[j].IPTagType) || - to.String(ipTag[i].Tag) < to.String(ipTag[j].Tag) + return pointer.StringDeref(ipTag[i].IPTagType, "") < pointer.StringDeref(ipTag[j].IPTagType, "") || + pointer.StringDeref(ipTag[i].Tag, "") < pointer.StringDeref(ipTag[j].Tag, "") }) } } @@ -1332,8 +1289,8 @@ func convertIPTagMapToSlice(ipTagMap map[string]string) *[]network.IPTag { outputTags := []network.IPTag{} for k, v := range ipTagMap { ipTag := network.IPTag{ - IPTagType: to.StringPtr(k), - Tag: to.StringPtr(v), + IPTagType: pointer.String(k), + Tag: pointer.String(v), } outputTags = append(outputTags, ipTag) } @@ -1345,53 +1302,61 @@ func getDomainNameLabel(pip *network.PublicIPAddress) string { if pip == nil || pip.PublicIPAddressPropertiesFormat == nil || pip.PublicIPAddressPropertiesFormat.DNSSettings == nil { return "" } - return to.String(pip.PublicIPAddressPropertiesFormat.DNSSettings.DomainNameLabel) + return pointer.StringDeref(pip.PublicIPAddressPropertiesFormat.DNSSettings.DomainNameLabel, "") } -// pips: a non-nil pointer to a slice of existing PIPs, if the slice being pointed to is nil, listPIP would be called when needed and the slice would be filled -func (az *Cloud) isFrontendIPChanged(clusterName string, config network.FrontendIPConfiguration, service *v1.Service, lbFrontendIPConfigName string, pips *[]network.PublicIPAddress) (bool, error) { - isServiceOwnsFrontendIP, isPrimaryService, err := az.serviceOwnsFrontendIP(config, service, pips) - if err != nil { - return false, err - } - if isServiceOwnsFrontendIP && isPrimaryService && !strings.EqualFold(to.String(config.Name), lbFrontendIPConfigName) { +// subnet is reused to reduce API calls when dualstack. +func (az *Cloud) isFrontendIPChanged( + clusterName string, + config network.FrontendIPConfiguration, + service *v1.Service, + lbFrontendIPConfigName string, + subnet *network.Subnet, +) (bool, error) { + isServiceOwnsFrontendIP, isPrimaryService, fipIPVersion := az.serviceOwnsFrontendIP(config, service) + if isServiceOwnsFrontendIP && isPrimaryService && !strings.EqualFold(pointer.StringDeref(config.Name, ""), lbFrontendIPConfigName) { return true, nil } - if !strings.EqualFold(to.String(config.Name), lbFrontendIPConfigName) { + if !strings.EqualFold(pointer.StringDeref(config.Name, ""), lbFrontendIPConfigName) { return false, nil } - loadBalancerIP := getServiceLoadBalancerIP(service) + pipRG := az.getPublicIPAddressResourceGroup(service) + var isIPv6 bool + var err error + if fipIPVersion != "" { + isIPv6 = fipIPVersion == network.IPv6 + } else { + if isIPv6, err = az.isFIPIPv6(service, pipRG, &config); err != nil { + return false, err + } + } + loadBalancerIP := getServiceLoadBalancerIP(service, isIPv6) isInternal := requiresInternalLoadBalancer(service) if isInternal { // Judge subnet - subnetName := subnet(service) + subnetName := getInternalSubnet(service) if subnetName != nil { - subnet, existsSubnet, err := az.getSubnet(az.VnetName, *subnetName) - if err != nil { - return false, err - } - if !existsSubnet { - return false, fmt.Errorf("failed to get subnet") + if subnet == nil { + return false, fmt.Errorf("isFrontendIPChanged: Unexpected nil subnet %q", pointer.StringDeref(subnetName, "")) } - if config.Subnet != nil && !strings.EqualFold(to.String(config.Subnet.ID), to.String(subnet.ID)) { + if config.Subnet != nil && !strings.EqualFold(pointer.StringDeref(config.Subnet.ID, ""), pointer.StringDeref(subnet.ID, "")) { return true, nil } } - return loadBalancerIP != "" && !strings.EqualFold(loadBalancerIP, to.String(config.PrivateIPAddress)), nil + return loadBalancerIP != "" && !strings.EqualFold(loadBalancerIP, pointer.StringDeref(config.PrivateIPAddress, "")), nil } - pipName, _, err := az.determinePublicIPName(clusterName, service, pips) + pipName, _, err := az.determinePublicIPName(clusterName, service, isIPv6) if err != nil { return false, err } - pipResourceGroup := az.getPublicIPAddressResourceGroup(service) - pip, existsPip, err := az.getPublicIPAddress(pipResourceGroup, pipName, azcache.CacheReadTypeDefault) + pip, existsPip, err := az.getPublicIPAddress(pipRG, pipName, azcache.CacheReadTypeDefault) if err != nil { return false, err } if !existsPip { return true, nil } - return config.PublicIPAddress != nil && !strings.EqualFold(to.String(pip.ID), to.String(config.PublicIPAddress.ID)), nil + return config.PublicIPAddress != nil && !strings.EqualFold(pointer.StringDeref(pip.ID, ""), pointer.StringDeref(config.PublicIPAddress.ID, "")), nil } // isFrontendIPConfigUnsafeToDelete checks if a frontend IP config is safe to be deleted. @@ -1505,22 +1470,118 @@ func findMatchedOutboundRuleFIPConfig(fipConfigID *string, outboundRuleFIPConfig return found } -func (az *Cloud) findFrontendIPConfigOfService( +func (az *Cloud) findFrontendIPConfigsOfService( fipConfigs *[]network.FrontendIPConfiguration, service *v1.Service, - pips *[]network.PublicIPAddress, -) (*network.FrontendIPConfiguration, error) { +) (map[bool]*network.FrontendIPConfiguration, error) { + fipsOfServiceMap := map[bool]*network.FrontendIPConfiguration{} + pipRG := az.getPublicIPAddressResourceGroup(service) for _, config := range *fipConfigs { - owns, _, err := az.serviceOwnsFrontendIP(config, service, pips) - if err != nil { - return nil, err - } + config := config + owns, _, fipIPVersion := az.serviceOwnsFrontendIP(config, service) if owns { - return &config, nil + var fipIsIPv6 bool + var err error + if fipIPVersion != "" { + fipIsIPv6 = fipIPVersion == network.IPv6 + } else { + if fipIsIPv6, err = az.isFIPIPv6(service, pipRG, &config); err != nil { + return nil, err + } + } + + fipsOfServiceMap[fipIsIPv6] = &config } } - return nil, nil + return fipsOfServiceMap, nil +} + +// reconcileMultipleStandardLoadBalancerConfigurations runs only once every time the +// cloud controller manager restarts or reloads itself. It checks all existing +// load balancer typed services and add service names to the ActiveServices queue +// of the corresponding load balancer configuration. It also checks if there is a configuration +// named . If not, an error will be reported. +func (az *Cloud) reconcileMultipleStandardLoadBalancerConfigurations( + lbs *[]network.LoadBalancer, + service *v1.Service, + clusterName string, + existingLBs *[]network.LoadBalancer, + nodes []*v1.Node, +) (err error) { + if !az.useMultipleStandardLoadBalancers() { + return nil + } + + if az.multipleStandardLoadBalancerConfigurationsSynced { + return nil + } + defer func() { + if err == nil { + az.multipleStandardLoadBalancerConfigurationsSynced = true + } + }() + + var found bool + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if strings.EqualFold(multiSLBConfig.Name, clusterName) { + found = true + break + } + } + if !found { + return fmt.Errorf("multiple standard load balancers are enabled but no configuration named %q is found", clusterName) + } + + svcs, err := az.KubeClient.CoreV1().Services("").List(context.Background(), metav1.ListOptions{}) + if err != nil { + klog.Errorf("reconcileMultipleStandardLoadBalancerConfigurations: failed to list all load balancer services: %w", err) + return fmt.Errorf("failed to list all load balancer services: %w", err) + } + rulePrefixToSVCNameMap := make(map[string]string) + for _, svc := range svcs.Items { + svc := svc + if strings.EqualFold(string(svc.Spec.Type), string(v1.ServiceTypeLoadBalancer)) { + prefix := az.GetLoadBalancerName(context.Background(), "", &svc) + svcName := getServiceName(&svc) + rulePrefixToSVCNameMap[strings.ToLower(prefix)] = svcName + klog.V(2).Infof("reconcileMultipleStandardLoadBalancerConfigurations: found service %q with prefix %q", svcName, prefix) + } + } + + for _, existingLB := range *existingLBs { + lbName := pointer.StringDeref(existingLB.Name, "") + if existingLB.LoadBalancerPropertiesFormat != nil && + existingLB.LoadBalancingRules != nil { + for _, rule := range *existingLB.LoadBalancingRules { + ruleName := pointer.StringDeref(rule.Name, "") + rulePrefix := strings.Split(ruleName, "-")[0] + if rulePrefix == "" { + klog.Warningf("reconcileMultipleStandardLoadBalancerConfigurations: the load balancing rule name %s is not in the correct format", ruleName) + } + svcName, ok := rulePrefixToSVCNameMap[strings.ToLower(rulePrefix)] + if ok { + klog.V(2).Infof( + "reconcileMultipleStandardLoadBalancerConfigurations: found load balancer %q with rule %q of service %q", + lbName, ruleName, svcName, + ) + for i := range az.MultipleStandardLoadBalancerConfigurations { + if strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), az.MultipleStandardLoadBalancerConfigurations[i].Name) { + az.multipleStandardLoadBalancersActiveServicesLock.Lock() + if az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices == nil { + az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices = sets.New[string]() + } + az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices.Insert(strings.ToLower(svcName)) + az.multipleStandardLoadBalancersActiveServicesLock.Unlock() + klog.V(2).Infof("reconcileMultipleStandardLoadBalancerConfigurations: service(%s) is active on lb(%s)", svcName, lbName) + } + } + } + } + } + } + + return az.reconcileMultipleStandardLoadBalancerBackendNodes("", lbs, service, nodes) } // reconcileLoadBalancer ensures load balancer exists and the frontend ip config is setup. @@ -1532,29 +1593,49 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, serviceName := getServiceName(service) klog.V(2).Infof("reconcileLoadBalancer for service(%s) - wantLb(%t): started", serviceName, wantLb) - existingLBs, err := az.reconcileSharedLoadBalancer(service, clusterName, nodes) + existingLBs, err := az.ListManagedLBs(service, nodes, clusterName) if err != nil { - klog.Errorf("reconcileLoadBalancer: failed to reconcile shared load balancer: %v", err) + return nil, fmt.Errorf("reconcileLoadBalancer: failed to list managed LB: %w", err) + } + + // Delete backend pools for local service if: + // 1. the cluster is migrating from multi-slb to single-slb, + // 2. the service is changed from local to cluster. + if !az.useMultipleStandardLoadBalancers() || !isLocalService(service) { + existingLBs, err = az.cleanupLocalServiceBackendPool(service, nodes, existingLBs, clusterName) + if err != nil { + klog.Errorf("reconcileLoadBalancer: failed to cleanup local service backend pool for service %q, error: %s", serviceName, err.Error()) + return nil, err + } + } + + if err := az.reconcileMultipleStandardLoadBalancerConfigurations(existingLBs, service, clusterName, existingLBs, nodes); err != nil { + klog.Errorf("reconcileLoadBalancer: failed to reconcile multiple standard load balancer configurations: %s", err.Error()) return nil, err } - lb, lbStatus, _, err := az.getServiceLoadBalancer(service, clusterName, nodes, wantLb, existingLBs) + lb, newLBs, lbStatus, _, _, err := az.getServiceLoadBalancer(service, clusterName, nodes, wantLb, existingLBs) if err != nil { klog.Errorf("reconcileLoadBalancer: failed to get load balancer for service %q, error: %v", serviceName, err) return nil, err } + existingLBs = newLBs lbName := *lb.Name lbResourceGroup := az.getLoadBalancerResourceGroup() - lbBackendPoolID := az.getBackendPoolID(lbName, az.getLoadBalancerResourceGroup(), getBackendPoolName(clusterName, service)) - klog.V(2).Infof("reconcileLoadBalancer for service(%s): lb(%s/%s) wantLb(%t) resolved load balancer name", serviceName, lbResourceGroup, lbName, wantLb) - defaultLBFrontendIPConfigName := az.getDefaultFrontendIPConfigName(service) - defaultLBFrontendIPConfigID := az.getFrontendIPConfigID(lbName, lbResourceGroup, defaultLBFrontendIPConfigName) + lbBackendPoolIDs := az.getBackendPoolIDsForService(service, clusterName, lbName) + klog.V(2).Infof("reconcileLoadBalancer for service(%s): lb(%s/%s) wantLb(%t) resolved load balancer name", + serviceName, lbResourceGroup, lbName, wantLb) + lbFrontendIPConfigNames := az.getFrontendIPConfigNames(service) + lbFrontendIPConfigIDs := map[bool]string{ + consts.IPVersionIPv4: az.getFrontendIPConfigID(lbName, lbFrontendIPConfigNames[consts.IPVersionIPv4]), + consts.IPVersionIPv6: az.getFrontendIPConfigID(lbName, lbFrontendIPConfigNames[consts.IPVersionIPv6]), + } dirtyLb := false // reconcile the load balancer's backend pool configuration. if wantLb { - preConfig, changed, err := az.LoadBalancerBackendPool.ReconcileBackendPools(clusterName, service, lb) + preConfig, changed, shouldRefreshLB, err := az.LoadBalancerBackendPool.ReconcileBackendPools(clusterName, service, lb) if err != nil { return lb, err } @@ -1562,38 +1643,76 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, dirtyLb = true } isBackendPoolPreConfigured = preConfig + + // If the LB is changed, refresh it to avoid etag mismatch error + // later when create or update the LB. + if shouldRefreshLB { + klog.V(4).Infof("reconcileLoadBalancer for service(%s): refreshing load balancer %s", serviceName, lbName) + lb, _, err = az.getAzureLoadBalancer(lbName, azcache.CacheReadTypeForceRefresh) + if err != nil { + return lb, fmt.Errorf("reconcileLoadBalancer for service (%s): failed to get load balancer %s: %w", serviceName, lbName, err) + } + addOrUpdateLBInList(existingLBs, lb) + } } // reconcile the load balancer's frontend IP configurations. - ownedFIPConfig, toDeleteConfigs, changed, err := az.reconcileFrontendIPConfigs(clusterName, service, lb, lbStatus, wantLb, defaultLBFrontendIPConfigName) + ownedFIPConfigs, toDeleteConfigs, fipChanged, err := az.reconcileFrontendIPConfigs(clusterName, service, lb, lbStatus, wantLb, lbFrontendIPConfigNames) if err != nil { return lb, err } - if changed { + if fipChanged { dirtyLb = true } // update probes/rules - if ownedFIPConfig != nil { - if ownedFIPConfig.ID != nil { - defaultLBFrontendIPConfigID = *ownedFIPConfig.ID - } else { - return nil, fmt.Errorf("reconcileLoadBalancer for service (%s)(%t): nil ID for frontend IP config", serviceName, wantLb) - } - } + pipRG := az.getPublicIPAddressResourceGroup(service) + for _, ownedFIPConfig := range ownedFIPConfigs { + if ownedFIPConfig == nil { + continue + } + if ownedFIPConfig.ID == nil { + return nil, fmt.Errorf("reconcileLoadBalancer for service (%s)(%t): nil ID for frontend IP config", serviceName, wantLb) + } - if wantLb { - err = az.checkLoadBalancerResourcesConflicts(lb, defaultLBFrontendIPConfigID, service) - if err != nil { - return nil, err + var isIPv6 bool + var err error + _, _, fipIPVersion := az.serviceOwnsFrontendIP(*ownedFIPConfig, service) + if fipIPVersion != "" { + isIPv6 = fipIPVersion == network.IPv6 + } else { + if isIPv6, err = az.isFIPIPv6(service, pipRG, ownedFIPConfig); err != nil { + return nil, err + } } + lbFrontendIPConfigIDs[isIPv6] = *ownedFIPConfig.ID } var expectedProbes []network.Probe var expectedRules []network.LoadBalancingRule - if wantLb { - expectedProbes, expectedRules, err = az.getExpectedLBRules(service, defaultLBFrontendIPConfigID, lbBackendPoolID, lbName) + getExpectedLBRule := func(isIPv6 bool) error { + expectedProbesSingleStack, expectedRulesSingleStack, err := az.getExpectedLBRules(service, lbFrontendIPConfigIDs[isIPv6], lbBackendPoolIDs[isIPv6], lbName, isIPv6) if err != nil { + return err + } + expectedProbes = append(expectedProbes, expectedProbesSingleStack...) + expectedRules = append(expectedRules, expectedRulesSingleStack...) + return nil + } + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if wantLb && v4Enabled { + if err = az.checkLoadBalancerResourcesConflicts(lb, lbFrontendIPConfigIDs[false], service); err != nil { + return nil, err + } + if err := getExpectedLBRule(consts.IPVersionIPv4); err != nil { + return nil, err + } + } + if wantLb && v6Enabled { + if err = az.checkLoadBalancerResourcesConflicts(lb, lbFrontendIPConfigIDs[true], service); err != nil { + return nil, err + } + if err := getExpectedLBRule(consts.IPVersionIPv6); err != nil { return nil, err } } @@ -1605,7 +1724,6 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, if changed := az.reconcileLBRules(lb, service, serviceName, wantLb, expectedRules); changed { dirtyLb = true } - if changed := az.ensureLoadBalancerTagged(lb); changed { dirtyLb = true } @@ -1623,7 +1741,7 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, "reconcileLoadBalancer for service(%s): lb(%s) - failed to clean up PrivateLinkService for frontEnd(%s): %v", serviceName, lbName, - to.String(fipConfigToDel.Name), + pointer.StringDeref(fipConfigToDel.Name, ""), err, ) } @@ -1631,7 +1749,7 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, } if lb.FrontendIPConfigurations == nil || len(*lb.FrontendIPConfigurations) == 0 { - err := az.cleanOrphanedLoadBalancer(lb, existingLBs, service, clusterName) + err := az.cleanOrphanedLoadBalancer(lb, *existingLBs, service, clusterName) if err != nil { klog.Errorf("reconcileLoadBalancer for service(%s): lb(%s) - failed to cleanOrphanedLoadBalancer: %v", serviceName, lbName, err) return nil, err @@ -1654,6 +1772,8 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, return nil, fmt.Errorf("load balancer %q not found", lbName) } lb = newLB + + addOrUpdateLBInList(existingLBs, newLB) } } @@ -1665,22 +1785,320 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, _ = az.lbCache.Delete(lbName) }() - if lb.LoadBalancerPropertiesFormat != nil && lb.BackendAddressPools != nil { - backendPools := *lb.BackendAddressPools - for _, backendPool := range backendPools { - if strings.EqualFold(to.String(backendPool.Name), getBackendPoolName(clusterName, service)) { - if err := az.LoadBalancerBackendPool.EnsureHostsInPool(service, nodes, lbBackendPoolID, vmSetName, clusterName, lbName, backendPool); err != nil { - return nil, err + if az.useMultipleStandardLoadBalancers() { + err := az.reconcileMultipleStandardLoadBalancerBackendNodes(lbName, existingLBs, service, nodes) + if err != nil { + return nil, err + } + } + + // Need to reconcile every managed backend pools of all managed load balancers in + // the cluster when using multiple standard load balancers. + // This is because there are chances for backend pools from more than one load balancers + // change in one reconciliation loop. + var lbToReconcile []network.LoadBalancer + lbToReconcile = append(lbToReconcile, *lb) + if az.useMultipleStandardLoadBalancers() { + lbToReconcile = *existingLBs + } + for _, lb := range lbToReconcile { + lbName := pointer.StringDeref(lb.Name, "") + if lb.LoadBalancerPropertiesFormat != nil && lb.LoadBalancerPropertiesFormat.BackendAddressPools != nil { + for _, backendPool := range *lb.LoadBalancerPropertiesFormat.BackendAddressPools { + isIPv6 := isBackendPoolIPv6(pointer.StringDeref(backendPool.Name, "")) + if strings.EqualFold(pointer.StringDeref(backendPool.Name, ""), az.getBackendPoolNameForService(service, clusterName, isIPv6)) { + if err := az.LoadBalancerBackendPool.EnsureHostsInPool(service, nodes, lbBackendPoolIDs[isIPv6], vmSetName, clusterName, lbName, backendPool); err != nil { + return nil, err + } } } } } } + if fipChanged { + az.reconcileMultipleStandardLoadBalancerConfigurationStatus(wantLb, serviceName, lbName) + } + klog.V(2).Infof("reconcileLoadBalancer for service(%s): lb(%s) finished", serviceName, lbName) return lb, nil } +// addOrUpdateLBInList adds or updates the given lb in the list +func addOrUpdateLBInList(lbs *[]network.LoadBalancer, targetLB *network.LoadBalancer) { + for i, lb := range *lbs { + if strings.EqualFold(pointer.StringDeref(lb.Name, ""), pointer.StringDeref(targetLB.Name, "")) { + (*lbs)[i] = *targetLB + return + } + } + *lbs = append(*lbs, *targetLB) +} + +// removeLBFromList removes the given lb from the list +func removeLBFromList(lbs *[]network.LoadBalancer, lbName string) { + if lbs != nil { + for i := len(*lbs) - 1; i >= 0; i-- { + if strings.EqualFold(pointer.StringDeref((*lbs)[i].Name, ""), lbName) { + *lbs = append((*lbs)[:i], (*lbs)[i+1:]...) + break + } + } + } +} + +// removeNodeFromLBConfig searches for the occurrence of the given node in the lb configs and removes it +func (az *Cloud) removeNodeFromLBConfig(nodeNameToLBConfigIDXMap map[string]int, nodeName string) { + if idx, ok := nodeNameToLBConfigIDXMap[nodeName]; ok { + currentLBConfigName := az.MultipleStandardLoadBalancerConfigurations[idx].Name + klog.V(4).Infof("reconcileMultipleStandardLoadBalancerBackendNodes: remove node(%s) on lb(%s)", nodeName, currentLBConfigName) + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + az.MultipleStandardLoadBalancerConfigurations[idx].ActiveNodes.Delete(strings.ToLower(nodeName)) + az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + } +} + +// removeDeletedNodesFromLoadBalancerConfigurations removes the deleted nodes +// that do not exist in nodes list from the load balancer configurations +func (az *Cloud) removeDeletedNodesFromLoadBalancerConfigurations(nodes []*v1.Node) map[string]int { + nodeNamesSet := sets.New[string]() + for _, node := range nodes { + nodeNamesSet.Insert(strings.ToLower(node.Name)) + } + + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + defer az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + + // Remove the nodes from the load balancer configurations if they are not in the node list. + nodeNameToLBConfigIDXMap := make(map[string]int) + for i, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if multiSLBConfig.ActiveNodes != nil { + for nodeName := range multiSLBConfig.ActiveNodes { + if nodeNamesSet.Has(nodeName) { + nodeNameToLBConfigIDXMap[nodeName] = i + } else { + klog.V(4).Infof("reconcileMultipleStandardLoadBalancerBackendNodes: node(%s) is gone, remove it from lb(%s)", nodeName, multiSLBConfig.Name) + az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes, _ = safeRemoveKeyFromStringsSet(az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes, strings.ToLower(nodeName)) + } + } + } + } + + return nodeNameToLBConfigIDXMap +} + +// accommodateNodesByPrimaryVMSet decides which load balancer configuration the node should be added to by primary vmSet +func (az *Cloud) accommodateNodesByPrimaryVMSet( + lbName string, + lbs *[]network.LoadBalancer, + nodes []*v1.Node, + nodeNameToLBConfigIDXMap map[string]int, +) error { + for _, node := range nodes { + if _, ok := az.nodesWithCorrectLoadBalancerByPrimaryVMSet.Load(strings.ToLower(node.Name)); ok { + continue + } + + // TODO(niqi): reduce the API calls for VMAS and standalone VMs + vmSetName, err := az.VMSet.GetNodeVMSetName(node) + if err != nil { + klog.Errorf("accommodateNodesByPrimaryVMSet: failed to get vmSetName for node(%s): %s", node.Name, err.Error()) + return err + } + for i := range az.MultipleStandardLoadBalancerConfigurations { + multiSLBConfig := az.MultipleStandardLoadBalancerConfigurations[i] + if strings.EqualFold(multiSLBConfig.PrimaryVMSet, vmSetName) { + foundPrimaryLB := isLBInList(lbs, multiSLBConfig.Name) + if !foundPrimaryLB && !strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), multiSLBConfig.Name) { + klog.V(4).Infof("accommodateNodesByPrimaryVMSet: node(%s) should be on lb(%s) because of primary vmSet (%s), but the lb is not found and will not be created this time, will ignore the primaryVMSet", node.Name, multiSLBConfig.Name, vmSetName) + continue + } + + az.nodesWithCorrectLoadBalancerByPrimaryVMSet.Store(strings.ToLower(node.Name), sets.Empty{}) + if !multiSLBConfig.ActiveNodes.Has(node.Name) { + klog.V(4).Infof("accommodateNodesByPrimaryVMSet: node(%s) should be on lb(%s) because of primary vmSet (%s)", node.Name, multiSLBConfig.Name, vmSetName) + + az.removeNodeFromLBConfig(nodeNameToLBConfigIDXMap, node.Name) + + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes = safeAddKeyToStringsSet(az.MultipleStandardLoadBalancerConfigurations[i].ActiveNodes, strings.ToLower(node.Name)) + az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + } + break + } + } + } + + return nil +} + +// accommodateNodesByNodeSelector decides which load balancer configuration the node should be added to by node selector +func (az *Cloud) accommodateNodesByNodeSelector( + lbName string, + lbs *[]network.LoadBalancer, + service *v1.Service, + nodes []*v1.Node, + nodeNameToLBConfigIDXMap map[string]int, +) error { + for _, node := range nodes { + // Skip nodes that have been matched with a load balancer + // by primary vmSet. + if _, ok := az.nodesWithCorrectLoadBalancerByPrimaryVMSet.Load(strings.ToLower(node.Name)); ok { + continue + } + + // If the vmSet of the node does not match any load balancer, + // pick all load balancers whose node selector matches the node. + var eligibleLBsIDX []int + for i, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if multiSLBConfig.NodeSelector != nil && + (len(multiSLBConfig.NodeSelector.MatchLabels) > 0 || len(multiSLBConfig.NodeSelector.MatchExpressions) > 0) { + nodeSelector, err := metav1.LabelSelectorAsSelector(multiSLBConfig.NodeSelector) + if err != nil { + klog.Errorf("accommodateNodesByNodeSelector: failed to parse nodeSelector for lb(%s): %s", multiSLBConfig.Name, err.Error()) + return err + } + if nodeSelector.Matches(labels.Set(node.Labels)) { + klog.V(4).Infof("accommodateNodesByNodeSelector: lb(%s) matches node(%s) labels", multiSLBConfig.Name, node.Name) + found := isLBInList(lbs, multiSLBConfig.Name) + if !found && !strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), multiSLBConfig.Name) { + klog.V(4).Infof("accommodateNodesByNodeSelector: but the lb is not found and will not be created this time, will ignore this load balancer") + continue + } + eligibleLBsIDX = append(eligibleLBsIDX, i) + } + } + } + // If no load balancer is matched, all load balancers without node selector are eligible. + if len(eligibleLBsIDX) == 0 { + for i, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if multiSLBConfig.NodeSelector == nil { + eligibleLBsIDX = append(eligibleLBsIDX, i) + } + } + } + // Check if the valid load balancer exists or will exist + // after the reconciliation. + for i := len(eligibleLBsIDX) - 1; i >= 0; i-- { + multiSLBConfig := az.MultipleStandardLoadBalancerConfigurations[eligibleLBsIDX[i]] + found := isLBInList(lbs, multiSLBConfig.Name) + if !found && !strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), multiSLBConfig.Name) { + klog.V(4).Infof("accommodateNodesByNodeSelector: the load balancer %s is a valid placement target for node %s, but the lb is not found and will not be created this time, ignore this load balancer", multiSLBConfig.Name, node.Name) + eligibleLBsIDX = append(eligibleLBsIDX[:i], eligibleLBsIDX[i+1:]...) + } + } + if idx, ok := nodeNameToLBConfigIDXMap[node.Name]; ok { + if IntInSlice(idx, eligibleLBsIDX) { + klog.V(4).Infof("accommodateNodesByNodeSelector: node(%s) is already on the eligible lb(%s)", node.Name, az.MultipleStandardLoadBalancerConfigurations[idx].Name) + continue + } + } + + // Pick one with the fewest nodes among all eligible load balancers. + minNodesIDX := -1 + minNodes := math.MaxInt32 + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + for _, idx := range eligibleLBsIDX { + multiSLBConfig := az.MultipleStandardLoadBalancerConfigurations[idx] + if multiSLBConfig.ActiveNodes.Len() < minNodes { + minNodes = multiSLBConfig.ActiveNodes.Len() + minNodesIDX = idx + } + } + az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + + if idx, ok := nodeNameToLBConfigIDXMap[node.Name]; ok && idx != minNodesIDX { + az.removeNodeFromLBConfig(nodeNameToLBConfigIDXMap, node.Name) + } + + // Emit a warning for the orphaned node. + if minNodesIDX == -1 { + warningMsg := fmt.Sprintf("failed to find a lb for node %s", node.Name) + az.Event(service, v1.EventTypeWarning, "FailedToFindLoadBalancerForNode", warningMsg) + continue + } + + klog.V(4).Infof("accommodateNodesByNodeSelector: node(%s) should be on lb(%s) it is the eligible LB with fewest number of nodes", node.Name, az.MultipleStandardLoadBalancerConfigurations[minNodesIDX].Name) + az.multipleStandardLoadBalancersActiveNodesLock.Lock() + az.MultipleStandardLoadBalancerConfigurations[minNodesIDX].ActiveNodes = safeAddKeyToStringsSet(az.MultipleStandardLoadBalancerConfigurations[minNodesIDX].ActiveNodes, strings.ToLower(node.Name)) + az.multipleStandardLoadBalancersActiveNodesLock.Unlock() + } + + return nil +} + +// isLBInList checks if the lb is in the list by multipleStandardLoadBalancerConfig name +func isLBInList(lbs *[]network.LoadBalancer, lbConfigName string) bool { + if lbs != nil { + for _, lb := range *lbs { + if strings.EqualFold(strings.TrimSuffix(pointer.StringDeref(lb.Name, ""), consts.InternalLoadBalancerNameSuffix), lbConfigName) { + return true + } + } + } + return false +} + +// reconcileMultipleStandardLoadBalancerBackendNodes makes sure the arrangement of nodes +// across load balancer configurations is expected. This is used in two places: +// 1. Every time the cloud provide restarts. +// 2. Every time we ensure hosts in pool. +// It consists of two parts. First we put corresponding nodes to the load balancers +// whose primary vmSet matches the node. Then we put the rest of the nodes to the +// most eligible load balancers according to the node selector and the number of +// nodes currently in the load balancer. +// For availability set (no cache) amd vmss flex (with cache) clusters, +// a list call will be introduced every time we +// try to get the vmSet of a node. This is acceptable because of two reasons: +// 1. In AKS, we don't support multiple availability sets in a cluster so the +// cluster scale is small. For self-managed clusters, it is not recommended to +// use multiple standard load balancers with availability sets. +// 2. We only check nodes that are not matched by primary vmSet before we ensure +// hosts in pool. So the number API calls is under control. +func (az *Cloud) reconcileMultipleStandardLoadBalancerBackendNodes( + lbName string, + lbs *[]network.LoadBalancer, + service *v1.Service, + nodes []*v1.Node, +) error { + // Remove the nodes from the load balancer configurations if they are not in the node list. + nodeNameToLBConfigIDXMap := az.removeDeletedNodesFromLoadBalancerConfigurations(nodes) + + err := az.accommodateNodesByPrimaryVMSet(lbName, lbs, nodes, nodeNameToLBConfigIDXMap) + if err != nil { + return err + } + + err = az.accommodateNodesByNodeSelector(lbName, lbs, service, nodes, nodeNameToLBConfigIDXMap) + if err != nil { + return err + } + + return nil +} + +func (az *Cloud) reconcileMultipleStandardLoadBalancerConfigurationStatus(wantLb bool, svcName, lbName string) { + lbName = strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix) + for i := range az.MultipleStandardLoadBalancerConfigurations { + if strings.EqualFold(lbName, az.MultipleStandardLoadBalancerConfigurations[i].Name) { + az.multipleStandardLoadBalancersActiveServicesLock.Lock() + if az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices == nil { + az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices = sets.New[string]() + } + + if wantLb { + klog.V(4).Infof("reconcileMultipleStandardLoadBalancerConfigurationStatus: service(%s) is active on lb(%s)", svcName, lbName) + az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices.Insert(strings.ToLower(svcName)) + } else { + klog.V(4).Infof("reconcileMultipleStandardLoadBalancerConfigurationStatus: service(%s) is not active on lb(%s) any more", svcName, lbName) + az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices, _ = safeRemoveKeyFromStringsSet(az.MultipleStandardLoadBalancerConfigurations[i].ActiveServices, strings.ToLower(svcName)) + } + az.multipleStandardLoadBalancersActiveServicesLock.Unlock() + break + } + } +} + func (az *Cloud) reconcileLBProbes(lb *network.LoadBalancer, service *v1.Service, serviceName string, wantLb bool, expectedProbes []network.Probe) bool { // remove unwanted probes dirtyProbes := false @@ -1771,7 +2189,12 @@ func (az *Cloud) reconcileLBRules(lb *network.LoadBalancer, service *v1.Service, return dirtyRules } -func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Service, lb *network.LoadBalancer, status *v1.LoadBalancerStatus, wantLb bool, defaultLBFrontendIPConfigName string) (*network.FrontendIPConfiguration, []network.FrontendIPConfiguration, bool, error) { +func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, + service *v1.Service, + lb *network.LoadBalancer, + status *v1.LoadBalancerStatus, + wantLb bool, + lbFrontendIPConfigNames map[bool]string) ([]*network.FrontendIPConfiguration, []network.FrontendIPConfiguration, bool, error) { var err error lbName := *lb.Name serviceName := getServiceName(service) @@ -1783,16 +2206,11 @@ func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Serv newConfigs = *lb.FrontendIPConfigurations } - // Save pip list so it can be reused in loop - var pips []network.PublicIPAddress - var ownedFIPConfig *network.FrontendIPConfiguration + var ownedFIPConfigs []*network.FrontendIPConfiguration if !wantLb { for i := len(newConfigs) - 1; i >= 0; i-- { config := newConfigs[i] - isServiceOwnsFrontendIP, _, err := az.serviceOwnsFrontendIP(config, service, &pips) - if err != nil { - return nil, toDeleteConfigs, false, err - } + isServiceOwnsFrontendIP, _, _ := az.serviceOwnsFrontendIP(config, service) if isServiceOwnsFrontendIP { unsafe, err := az.isFrontendIPConfigUnsafeToDelete(lb, service, config.ID) if err != nil { @@ -1824,16 +2242,45 @@ func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Serv var ( previousZone *[]string isFipChanged bool + subnet network.Subnet + existsSubnet bool ) + + if isInternal { + subnetName := getInternalSubnet(service) + if subnetName == nil { + subnetName = &az.SubnetName + } + subnet, existsSubnet, err = az.getSubnet(az.VnetName, *subnetName) + if err != nil { + return nil, toDeleteConfigs, false, err + } + if !existsSubnet { + return nil, toDeleteConfigs, false, fmt.Errorf("ensure(%s): lb(%s) - failed to get subnet: %s/%s", serviceName, lbName, az.VnetName, *subnetName) + } + } + + pipRG := az.getPublicIPAddressResourceGroup(service) + for i := len(newConfigs) - 1; i >= 0; i-- { config := newConfigs[i] - isServiceOwnsFrontendIP, _, _ := az.serviceOwnsFrontendIP(config, service, &pips) + isServiceOwnsFrontendIP, _, fipIPVersion := az.serviceOwnsFrontendIP(config, service) if !isServiceOwnsFrontendIP { - klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): the frontend IP configuration %s does not belong to the service", serviceName, to.String(config.Name)) + klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): the frontend IP configuration %s does not belong to the service", serviceName, pointer.StringDeref(config.Name, "")) continue } - klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): checking owned frontend IP configuration %s", serviceName, to.String(config.Name)) - isFipChanged, err = az.isFrontendIPChanged(clusterName, config, service, defaultLBFrontendIPConfigName, &pips) + klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): checking owned frontend IP configuration %s", serviceName, pointer.StringDeref(config.Name, "")) + var isIPv6 bool + var err error + if fipIPVersion != "" { + isIPv6 = fipIPVersion == network.IPv6 + } else { + if isIPv6, err = az.isFIPIPv6(service, pipRG, &config); err != nil { + return nil, toDeleteConfigs, false, err + } + } + + isFipChanged, err = az.isFrontendIPChanged(clusterName, config, service, lbFrontendIPConfigNames[isIPv6], &subnet) if err != nil { return nil, toDeleteConfigs, false, err } @@ -1844,65 +2291,67 @@ func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Serv dirtyConfigs = true previousZone = config.Zones } - break } - ownedFIPConfig, err = az.findFrontendIPConfigOfService(&newConfigs, service, &pips) + ownedFIPConfigMap, err := az.findFrontendIPConfigsOfService(&newConfigs, service) if err != nil { return nil, toDeleteConfigs, false, err } + for _, config := range ownedFIPConfigMap { + ownedFIPConfigs = append(ownedFIPConfigs, config) + } - if ownedFIPConfig == nil { - klog.V(4).Infof("ensure(%s): lb(%s) - creating a new frontend IP config", serviceName, lbName) + addNewFIPOfService := func(isIPv6 bool) error { + klog.V(4).Infof("ensure(%s): lb(%s) - creating a new frontend IP config %q (isIPv6=%t)", + serviceName, lbName, lbFrontendIPConfigNames[isIPv6], isIPv6) // construct FrontendIPConfigurationPropertiesFormat var fipConfigurationProperties *network.FrontendIPConfigurationPropertiesFormat if isInternal { - subnetName := subnet(service) - if subnetName == nil { - subnetName = &az.SubnetName - } - subnet, existsSubnet, err := az.getSubnet(az.VnetName, *subnetName) - if err != nil { - return nil, toDeleteConfigs, false, err - } - - if !existsSubnet { - return nil, toDeleteConfigs, false, fmt.Errorf("ensure(%s): lb(%s) - failed to get subnet: %s/%s", serviceName, lbName, az.VnetName, *subnetName) - } - configProperties := network.FrontendIPConfigurationPropertiesFormat{ Subnet: &subnet, } - if utilnet.IsIPv6String(service.Spec.ClusterIP) { - configProperties.PrivateIPAddressVersion = network.IPVersionIPv6 + if isIPv6 { + configProperties.PrivateIPAddressVersion = network.IPv6 } - loadBalancerIP := getServiceLoadBalancerIP(service) + loadBalancerIP := getServiceLoadBalancerIP(service, isIPv6) + privateIP := "" + ingressIPInSubnet := func(ingresses []v1.LoadBalancerIngress) bool { + for _, ingress := range ingresses { + ingressIP := ingress.IP + if (net.ParseIP(ingressIP).To4() == nil) == isIPv6 && ipInSubnet(ingressIP, &subnet) { + privateIP = ingressIP + break + } + } + return privateIP != "" + } if loadBalancerIP != "" { - configProperties.PrivateIPAllocationMethod = network.IPAllocationMethodStatic + klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): use loadBalancerIP %q from Service spec", serviceName, loadBalancerIP) + configProperties.PrivateIPAllocationMethod = network.Static configProperties.PrivateIPAddress = &loadBalancerIP - } else if status != nil && len(status.Ingress) > 0 && ipInSubnet(status.Ingress[0].IP, &subnet) { - klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): keep the original private IP %s", serviceName, status.Ingress[0].IP) - configProperties.PrivateIPAllocationMethod = network.IPAllocationMethodStatic - configProperties.PrivateIPAddress = to.StringPtr(status.Ingress[0].IP) + } else if status != nil && len(status.Ingress) > 0 && ingressIPInSubnet(status.Ingress) { + klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): keep the original private IP %s", serviceName, privateIP) + configProperties.PrivateIPAllocationMethod = network.Static + configProperties.PrivateIPAddress = pointer.String(privateIP) } else { // We'll need to call GetLoadBalancer later to retrieve allocated IP. klog.V(4).Infof("reconcileFrontendIPConfigs for service (%s): dynamically allocate the private IP", serviceName) - configProperties.PrivateIPAllocationMethod = network.IPAllocationMethodDynamic + configProperties.PrivateIPAllocationMethod = network.Dynamic } fipConfigurationProperties = &configProperties } else { - pipName, shouldPIPExisted, err := az.determinePublicIPName(clusterName, service, &pips) + pipName, shouldPIPExisted, err := az.determinePublicIPName(clusterName, service, isIPv6) if err != nil { - return nil, toDeleteConfigs, false, err + return err } domainNameLabel, found := getPublicIPDomainNameLabel(service) - pip, err := az.ensurePublicIPExists(service, pipName, domainNameLabel, clusterName, shouldPIPExisted, found) + pip, err := az.ensurePublicIPExists(service, pipName, domainNameLabel, clusterName, shouldPIPExisted, found, isIPv6) if err != nil { - return nil, toDeleteConfigs, false, err + return err } fipConfigurationProperties = &network.FrontendIPConfigurationPropertiesFormat{ PublicIPAddress: &network.PublicIPAddress{ID: pip.ID}, @@ -1910,20 +2359,33 @@ func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Serv } newConfig := network.FrontendIPConfiguration{ - Name: to.StringPtr(defaultLBFrontendIPConfigName), - ID: to.StringPtr(fmt.Sprintf(consts.FrontendIPConfigIDTemplate, az.getNetworkResourceSubscriptionID(), az.ResourceGroup, *lb.Name, defaultLBFrontendIPConfigName)), + Name: pointer.String(lbFrontendIPConfigNames[isIPv6]), + ID: pointer.String(fmt.Sprintf(consts.FrontendIPConfigIDTemplate, az.getNetworkResourceSubscriptionID(), az.ResourceGroup, pointer.StringDeref(lb.Name, ""), lbFrontendIPConfigNames[isIPv6])), FrontendIPConfigurationPropertiesFormat: fipConfigurationProperties, } if isInternal { - if err := az.getFrontendZones(&newConfig, previousZone, isFipChanged, serviceName, defaultLBFrontendIPConfigName); err != nil { + if err := az.getFrontendZones(&newConfig, previousZone, isFipChanged, serviceName, lbFrontendIPConfigNames[isIPv6]); err != nil { klog.Errorf("reconcileLoadBalancer for service (%s)(%t): failed to getFrontendZones: %s", serviceName, wantLb, err.Error()) - return nil, toDeleteConfigs, false, err + return err } } newConfigs = append(newConfigs, newConfig) - klog.V(2).Infof("reconcileLoadBalancer for service (%s)(%t): lb frontendconfig(%s) - adding", serviceName, wantLb, defaultLBFrontendIPConfigName) + klog.V(2).Infof("reconcileLoadBalancer for service (%s)(%t): lb frontendconfig(%s) - adding", serviceName, wantLb, lbFrontendIPConfigNames[isIPv6]) dirtyConfigs = true + return nil + } + + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if v4Enabled && ownedFIPConfigMap[false] == nil { + if err := addNewFIPOfService(false); err != nil { + return nil, toDeleteConfigs, false, err + } + } + if v6Enabled && ownedFIPConfigMap[true] == nil { + if err := addNewFIPOfService(true); err != nil { + return nil, toDeleteConfigs, false, err + } } } @@ -1931,7 +2393,7 @@ func (az *Cloud) reconcileFrontendIPConfigs(clusterName string, service *v1.Serv lb.FrontendIPConfigurations = &newConfigs } - return ownedFIPConfig, toDeleteConfigs, dirtyConfigs, err + return ownedFIPConfigs, toDeleteConfigs, dirtyConfigs, err } func (az *Cloud) getFrontendZones( @@ -2039,231 +2501,27 @@ func inboundNatPoolConflictsWithPort(pool network.InboundNatPool, frontendIPConf pool.FrontendPortRangeStart != nil && pool.FrontendPortRangeEnd != nil && *pool.FrontendPortRangeStart <= port.Port && - *pool.FrontendPortRangeEnd >= port.Port -} - -func inboundNatRuleConflictsWithPort(inboundNatRule network.InboundNatRule, frontendIPConfigID string, port v1.ServicePort) bool { - return inboundNatRule.InboundNatRulePropertiesFormat != nil && - inboundNatRule.FrontendIPConfiguration != nil && - inboundNatRule.FrontendIPConfiguration.ID != nil && - strings.EqualFold(*inboundNatRule.FrontendIPConfiguration.ID, frontendIPConfigID) && - strings.EqualFold(string(inboundNatRule.Protocol), string(port.Protocol)) && - inboundNatRule.FrontendPort != nil && - *inboundNatRule.FrontendPort == port.Port -} - -func lbRuleConflictsWithPort(rule network.LoadBalancingRule, frontendIPConfigID string, port v1.ServicePort) bool { - return rule.LoadBalancingRulePropertiesFormat != nil && - rule.FrontendIPConfiguration != nil && - rule.FrontendIPConfiguration.ID != nil && - strings.EqualFold(*rule.FrontendIPConfiguration.ID, frontendIPConfigID) && - strings.EqualFold(string(rule.Protocol), string(port.Protocol)) && - rule.FrontendPort != nil && - *rule.FrontendPort == port.Port -} - -// buildHealthProbeRulesForPort -// for following sku: basic loadbalancer vs standard load balancer -// for following protocols: TCP HTTP HTTPS(SLB only) -func (az *Cloud) buildHealthProbeRulesForPort(serviceManifest *v1.Service, port v1.ServicePort, lbrule string) (*network.Probe, error) { - if port.Protocol == v1.ProtocolUDP || port.Protocol == v1.ProtocolSCTP { - return nil, nil - } - // protocol should be tcp, because sctp is handled in outer loop - - properties := &network.ProbePropertiesFormat{} - var err error - - // order - Specific Override - // port_ annotation - // global annotation - - // Select Protocol - // - var protocol *string - - // 1. Look up port-specific override - protocol, err = consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsProtocol) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsProtocol), err) - } - - // 2. If not specified, look up from AppProtocol - // Note - this order is to remain compatible with previous versions - if protocol == nil { - protocol = port.AppProtocol - } - - // 3. If protocol is still nil, check the global annotation - if protocol == nil { - protocol, err = consts.GetAttributeValueInSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeProtocol) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeProtocol, err) - } - } - - // 4. Finally, if protocol is still nil, default to TCP - if protocol == nil { - protocol = to.StringPtr(string(network.ProtocolTCP)) - } - - *protocol = strings.TrimSpace(*protocol) - switch { - case strings.EqualFold(*protocol, string(network.ProtocolTCP)): - properties.Protocol = network.ProbeProtocolTCP - case strings.EqualFold(*protocol, string(network.ProtocolHTTPS)): - //HTTPS probe is only supported in standard loadbalancer - //For backward compatibility,when unsupported protocol is used, fall back to tcp protocol in basic lb mode instead - if !az.useStandardLoadBalancer() { - properties.Protocol = network.ProbeProtocolTCP - } else { - properties.Protocol = network.ProbeProtocolHTTPS - } - case strings.EqualFold(*protocol, string(network.ProtocolHTTP)): - properties.Protocol = network.ProbeProtocolHTTP - default: - //For backward compatibility,when unsupported protocol is used, fall back to tcp protocol in basic lb mode instead - properties.Protocol = network.ProbeProtocolTCP - } - - // Lookup or Override Health Probe Port - properties.Port = &port.NodePort - - probePort, err := consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsPort, func(s *string) error { - if s == nil { - return nil - } - //nolint:gosec - port, err := strconv.Atoi(*s) - if err != nil { - //not a integer - for _, item := range serviceManifest.Spec.Ports { - if strings.EqualFold(item.Name, *s) { - //found the port - return nil - } - } - return fmt.Errorf("port %s not found in service", *s) - } - if port < 0 || port > 65535 { - return fmt.Errorf("port %d is out of range", port) - } - for _, item := range serviceManifest.Spec.Ports { - //nolint:gosec - if item.Port == int32(port) { - //found the port - return nil - } - } - return fmt.Errorf("port %s not found in service", *s) - }) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsPort), err) - } - - if probePort != nil { - //nolint:gosec - port, err := strconv.Atoi(*probePort) - if err != nil { - //not a integer - for _, item := range serviceManifest.Spec.Ports { - if strings.EqualFold(item.Name, *probePort) { - //found the port - properties.Port = to.Int32Ptr(item.NodePort) - } - } - } else { - if port >= 0 || port <= 65535 { - for _, item := range serviceManifest.Spec.Ports { - //nolint:gosec - if item.Port == int32(port) { - //found the port - properties.Port = to.Int32Ptr(item.NodePort) - } - } - } - } - } - - // Select request path - if strings.EqualFold(string(properties.Protocol), string(network.ProtocolHTTPS)) || strings.EqualFold(string(properties.Protocol), string(network.ProtocolHTTP)) { - // get request path ,only used with http/https probe - path, err := consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsRequestPath) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsRequestPath), err) - } - if path == nil { - if path, err = consts.GetAttributeValueInSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeRequestPath); err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeRequestPath, err) - } - } - if path == nil { - path = to.StringPtr(consts.HealthProbeDefaultRequestPath) - } - properties.RequestPath = path - } - // get number of probes - var numOfProbeValidator = func(val *int32) error { - //minimum number of unhealthy responses is 2. ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe - const ( - MinimumNumOfProbe = 2 - ) - if *val < MinimumNumOfProbe { - return fmt.Errorf("the minimum value of %s is %d", consts.HealthProbeParamsNumOfProbe, MinimumNumOfProbe) - } - return nil - } - numberOfProbes, err := consts.GetInt32HealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsNumOfProbe, numOfProbeValidator) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsNumOfProbe), err) - } - if numberOfProbes == nil { - if numberOfProbes, err = consts.Getint32ValueFromK8sSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeNumOfProbe, numOfProbeValidator); err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeNumOfProbe, err) - } - } - - // if numberOfProbes is not set, set it to default instead ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe - if numberOfProbes == nil { - numberOfProbes = to.Int32Ptr(consts.HealthProbeDefaultNumOfProbe) - } + *pool.FrontendPortRangeEnd >= port.Port +} - // get probe interval in seconds - var probeIntervalValidator = func(val *int32) error { - //minimum probe interval in seconds is 5. ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe - const ( - MinimumProbeIntervalInSecond = 5 - ) - if *val < 5 { - return fmt.Errorf("the minimum value of %s is %d", consts.HealthProbeParamsProbeInterval, MinimumProbeIntervalInSecond) - } - return nil - } - probeInterval, err := consts.GetInt32HealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsProbeInterval, probeIntervalValidator) - if err != nil { - return nil, fmt.Errorf("failed to parse annotation %s:%w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsProbeInterval), err) - } - if probeInterval == nil { - if probeInterval, err = consts.Getint32ValueFromK8sSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeInterval, probeIntervalValidator); err != nil { - return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeInterval, err) - } - } - // if probeInterval is not set, set it to default instead ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe - if probeInterval == nil { - probeInterval = to.Int32Ptr(consts.HealthProbeDefaultProbeInterval) - } +func inboundNatRuleConflictsWithPort(inboundNatRule network.InboundNatRule, frontendIPConfigID string, port v1.ServicePort) bool { + return inboundNatRule.InboundNatRulePropertiesFormat != nil && + inboundNatRule.FrontendIPConfiguration != nil && + inboundNatRule.FrontendIPConfiguration.ID != nil && + strings.EqualFold(*inboundNatRule.FrontendIPConfiguration.ID, frontendIPConfigID) && + strings.EqualFold(string(inboundNatRule.Protocol), string(port.Protocol)) && + inboundNatRule.FrontendPort != nil && + *inboundNatRule.FrontendPort == port.Port +} - // total probe should be less than 120 seconds ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe - if (*probeInterval)*(*numberOfProbes) >= 120 { - return nil, fmt.Errorf("total probe should be less than 120, please adjust interval and number of probe accordingly") - } - properties.IntervalInSeconds = probeInterval - properties.NumberOfProbes = numberOfProbes - probe := &network.Probe{ - Name: &lbrule, - ProbePropertiesFormat: properties, - } - return probe, nil +func lbRuleConflictsWithPort(rule network.LoadBalancingRule, frontendIPConfigID string, port v1.ServicePort) bool { + return rule.LoadBalancingRulePropertiesFormat != nil && + rule.FrontendIPConfiguration != nil && + rule.FrontendIPConfiguration.ID != nil && + strings.EqualFold(*rule.FrontendIPConfiguration.ID, frontendIPConfigID) && + strings.EqualFold(string(rule.Protocol), string(port.Protocol)) && + rule.FrontendPort != nil && + *rule.FrontendPort == port.Port } // buildLBRules @@ -2273,7 +2531,8 @@ func (az *Cloud) getExpectedLBRules( service *v1.Service, lbFrontendIPConfigID string, lbBackendPoolID string, - lbName string) ([]network.Probe, []network.LoadBalancingRule, error) { + lbName string, + isIPv6 bool) ([]network.Probe, []network.LoadBalancingRule, error) { var expectedRules []network.LoadBalancingRule var expectedProbes []network.Probe @@ -2283,18 +2542,21 @@ func (az *Cloud) getExpectedLBRules( // healthcheck proxy server serves http requests // https://github.com/kubernetes/kubernetes/blob/7c013c3f64db33cf19f38bb2fc8d9182e42b0b7b/pkg/proxy/healthcheck/service_health.go#L236 var nodeEndpointHealthprobe *network.Probe - if servicehelpers.NeedsHealthCheck(service) { + if servicehelpers.NeedsHealthCheck(service) && !(consts.IsPLSEnabled(service.Annotations) && consts.IsPLSProxyProtocolEnabled(service.Annotations)) { podPresencePath, podPresencePort := servicehelpers.GetServiceHealthCheckPathPort(service) - lbRuleName := az.getLoadBalancerRuleName(service, v1.ProtocolTCP, podPresencePort) - + lbRuleName := az.getLoadBalancerRuleName(service, v1.ProtocolTCP, podPresencePort, isIPv6) + probeInterval, numberOfProbes, err := az.getHealthProbeConfigProbeIntervalAndNumOfProbe(service, podPresencePort) + if err != nil { + return nil, nil, err + } nodeEndpointHealthprobe = &network.Probe{ Name: &lbRuleName, ProbePropertiesFormat: &network.ProbePropertiesFormat{ - RequestPath: to.StringPtr(podPresencePath), + RequestPath: pointer.String(podPresencePath), Protocol: network.ProbeProtocolHTTP, - Port: to.Int32Ptr(podPresencePort), - IntervalInSeconds: to.Int32Ptr(consts.HealthProbeDefaultProbeInterval), - NumberOfProbes: to.Int32Ptr(consts.HealthProbeDefaultNumOfProbe), + Port: pointer.Int32(podPresencePort), + IntervalInSeconds: probeInterval, + ProbeThreshold: numberOfProbes, }, } expectedProbes = append(expectedProbes, *nodeEndpointHealthprobe) @@ -2306,7 +2568,7 @@ func (az *Cloud) getExpectedLBRules( az.useStandardLoadBalancer() && consts.IsK8sServiceHasHAModeEnabled(service) { - lbRuleName := az.getloadbalancerHAmodeRuleName(service) + lbRuleName := az.getloadbalancerHAmodeRuleName(service, isIPv6) klog.V(2).Infof("getExpectedLBRules lb name (%s) rule name (%s)", lbName, lbRuleName) props, err := az.getExpectedHAModeLoadBalancingRuleProperties(service, lbFrontendIPConfigID, lbBackendPoolID) @@ -2325,7 +2587,7 @@ func (az *Cloud) getExpectedLBRules( } if portprobe != nil { props.Probe = &network.SubResource{ - ID: to.StringPtr(az.getLoadBalancerProbeID(lbName, az.getLoadBalancerResourceGroup(), *portprobe.Name)), + ID: pointer.String(az.getLoadBalancerProbeID(lbName, *portprobe.Name)), } expectedProbes = append(expectedProbes, *portprobe) break @@ -2333,7 +2595,7 @@ func (az *Cloud) getExpectedLBRules( } } else { props.Probe = &network.SubResource{ - ID: to.StringPtr(az.getLoadBalancerProbeID(lbName, az.getLoadBalancerResourceGroup(), *nodeEndpointHealthprobe.Name)), + ID: pointer.String(az.getLoadBalancerProbeID(lbName, *nodeEndpointHealthprobe.Name)), } } @@ -2346,7 +2608,7 @@ func (az *Cloud) getExpectedLBRules( // generate lb rule for each port defined in svc object for _, port := range service.Spec.Ports { - lbRuleName := az.getLoadBalancerRuleName(service, port.Protocol, port.Port) + lbRuleName := az.getLoadBalancerRuleName(service, port.Protocol, port.Port, isIPv6) klog.V(2).Infof("getExpectedLBRules lb name (%s) rule name (%s)", lbName, lbRuleName) isNoLBRuleRequired, err := consts.IsLBRuleOnK8sServicePortDisabled(service.Annotations, port.Port) if err != nil { @@ -2387,19 +2649,19 @@ func (az *Cloud) getExpectedLBRules( } if portprobe != nil { props.Probe = &network.SubResource{ - ID: to.StringPtr(az.getLoadBalancerProbeID(lbName, az.getLoadBalancerResourceGroup(), *portprobe.Name)), + ID: pointer.String(az.getLoadBalancerProbeID(lbName, *portprobe.Name)), } expectedProbes = append(expectedProbes, *portprobe) } } else { props.Probe = &network.SubResource{ - ID: to.StringPtr(az.getLoadBalancerProbeID(lbName, az.getLoadBalancerResourceGroup(), *nodeEndpointHealthprobe.Name)), + ID: pointer.String(az.getLoadBalancerProbeID(lbName, *nodeEndpointHealthprobe.Name)), } } } if consts.IsK8sServiceDisableLoadBalancerFloatingIP(service) { - props.BackendPort = to.Int32Ptr(port.NodePort) - props.EnableFloatingIP = to.BoolPtr(false) + props.BackendPort = pointer.Int32(port.NodePort) + props.EnableFloatingIP = pointer.Bool(false) } expectedRules = append(expectedRules, network.LoadBalancingRule{ Name: &lbRuleName, @@ -2427,7 +2689,7 @@ func (az *Cloud) getExpectedLoadBalancingRulePropertiesForPort( if lbIdleTimeout, err = consts.Getint32ValueFromK8sSvcAnnotation(service.Annotations, consts.ServiceAnnotationLoadBalancerIdleTimeout, func(val *int32) error { const ( min = 4 - max = 30 + max = 100 ) if *val < min || *val > max { return fmt.Errorf("idle timeout value must be a whole number representing minutes between %d and %d, actual value: %d", min, max, *val) @@ -2436,33 +2698,33 @@ func (az *Cloud) getExpectedLoadBalancingRulePropertiesForPort( }); err != nil { return nil, fmt.Errorf("error parsing idle timeout key: %s, err: %w", consts.ServiceAnnotationLoadBalancerIdleTimeout, err) } else if lbIdleTimeout == nil { - lbIdleTimeout = to.Int32Ptr(4) + lbIdleTimeout = pointer.Int32(4) } props := &network.LoadBalancingRulePropertiesFormat{ Protocol: transportProto, - FrontendPort: to.Int32Ptr(servicePort.Port), - BackendPort: to.Int32Ptr(servicePort.Port), - DisableOutboundSnat: to.BoolPtr(az.disableLoadBalancerOutboundSNAT()), - EnableFloatingIP: to.BoolPtr(true), + FrontendPort: pointer.Int32(servicePort.Port), + BackendPort: pointer.Int32(servicePort.Port), + DisableOutboundSnat: pointer.Bool(az.disableLoadBalancerOutboundSNAT()), + EnableFloatingIP: pointer.Bool(true), LoadDistribution: loadDistribution, FrontendIPConfiguration: &network.SubResource{ - ID: to.StringPtr(lbFrontendIPConfigID), + ID: pointer.String(lbFrontendIPConfigID), }, BackendAddressPool: &network.SubResource{ - ID: to.StringPtr(lbBackendPoolID), + ID: pointer.String(lbBackendPoolID), }, IdleTimeoutInMinutes: lbIdleTimeout, } if strings.EqualFold(string(transportProto), string(network.TransportProtocolTCP)) && az.useStandardLoadBalancer() { - props.EnableTCPReset = to.BoolPtr(true) + props.EnableTCPReset = pointer.Bool(true) } // Azure ILB does not support secondary IPs as floating IPs on the LB. Therefore, floating IP needs to be turned // off and the rule should point to the nodeIP:nodePort. - if consts.IsK8sServiceInternalIPv6(service) { - props.BackendPort = to.Int32Ptr(servicePort.NodePort) - props.EnableFloatingIP = to.BoolPtr(false) + if consts.IsK8sServiceUsingInternalLoadBalancer(service) && isBackendPoolIPv6(lbBackendPoolID) { + props.BackendPort = pointer.Int32(servicePort.NodePort) + props.EnableFloatingIP = pointer.Bool(false) } return props, nil } @@ -2476,13 +2738,13 @@ func (az *Cloud) getExpectedHAModeLoadBalancingRuleProperties( if err != nil { return nil, fmt.Errorf("error generate lb rule for ha mod loadbalancer. err: %w", err) } - props.EnableTCPReset = to.BoolPtr(true) + props.EnableTCPReset = pointer.Bool(true) return props, nil } // This reconciles the Network Security Group similar to how the LB is reconciled. // This entails adding required, missing SecurityRules and removing stale rules. -func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, lbIP *string, lbName *string, wantLb bool) (*network.SecurityGroup, error) { +func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, lbIPs *[]string, lbName *string, wantLb bool) (*network.SecurityGroup, error) { serviceName := getServiceName(service) klog.V(5).Infof("reconcileSecurityGroup(%s): START clusterName=%q", serviceName, clusterName) @@ -2500,16 +2762,26 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, return nil, err } - destinationIPAddress := "" - if wantLb && lbIP == nil { + if wantLb && lbIPs == nil { return nil, fmt.Errorf("no load balancer IP for setting up security rules for service %s", service.Name) } - if lbIP != nil { - destinationIPAddress = *lbIP + + destinationIPAddresses := map[bool][]string{} + if lbIPs != nil { + for _, ip := range *lbIPs { + if net.ParseIP(ip).To4() != nil { + destinationIPAddresses[false] = append(destinationIPAddresses[false], ip) + } else { + destinationIPAddresses[true] = append(destinationIPAddresses[true], ip) + } + } } - if destinationIPAddress == "" { - destinationIPAddress = "*" + if len(destinationIPAddresses[false]) == 0 { + destinationIPAddresses[false] = []string{"*"} + } + if len(destinationIPAddresses[true]) == 0 { + destinationIPAddresses[true] = []string{"*"} } disableFloatingIP := false @@ -2517,30 +2789,27 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, disableFloatingIP = true } - backendIPAddresses := make([]string, 0) + backendIPAddresses := map[bool][]string{} if wantLb && disableFloatingIP { - lb, exist, err := az.getAzureLoadBalancer(to.String(lbName), azcache.CacheReadTypeDefault) + lb, exist, err := az.getAzureLoadBalancer(pointer.StringDeref(lbName, ""), azcache.CacheReadTypeDefault) if err != nil { return nil, err } if !exist { - return nil, fmt.Errorf("unable to get lb %s", to.String(lbName)) - } - backendPrivateIPv4s, backendPrivateIPv6s := az.LoadBalancerBackendPool.GetBackendPrivateIPs(clusterName, service, lb) - backendIPAddresses = backendPrivateIPv4s - if utilnet.IsIPv6String(*lbIP) { - backendIPAddresses = backendPrivateIPv6s + return nil, fmt.Errorf("unable to get lb %s", pointer.StringDeref(lbName, "")) } + backendIPAddresses[false], backendIPAddresses[true] = az.LoadBalancerBackendPool.GetBackendPrivateIPs(clusterName, service, lb) } additionalIPs, err := getServiceAdditionalPublicIPs(service) if err != nil { return nil, fmt.Errorf("unable to get additional public IPs, error=%w", err) } - - destinationIPAddresses := []string{destinationIPAddress} - if destinationIPAddress != "*" { - destinationIPAddresses = append(destinationIPAddresses, additionalIPs...) + for _, ip := range additionalIPs { + isIPv6 := net.ParseIP(ip).To4() == nil + if len(destinationIPAddresses[isIPv6]) != 1 || destinationIPAddresses[isIPv6][0] != "*" { + destinationIPAddresses[isIPv6] = append(destinationIPAddresses[isIPv6], ip) + } } sourceRanges, err := servicehelpers.GetLoadBalancerSourceRanges(service) @@ -2552,21 +2821,40 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, delete(sourceRanges, consts.DefaultLoadBalancerSourceRanges) } - var sourceAddressPrefixes []string + sourceAddressPrefixes := map[bool][]string{} if (sourceRanges == nil || servicehelpers.IsAllowAll(sourceRanges)) && len(serviceTags) == 0 { if !requiresInternalLoadBalancer(service) || len(service.Spec.LoadBalancerSourceRanges) > 0 { - sourceAddressPrefixes = []string{"Internet"} + sourceAddressPrefixes[false] = []string{"Internet"} + sourceAddressPrefixes[true] = []string{"Internet"} } } else { for _, ip := range sourceRanges { - sourceAddressPrefixes = append(sourceAddressPrefixes, ip.String()) + if ip == nil { + continue + } + isIPv6 := net.ParseIP(ip.IP.String()).To4() == nil + sourceAddressPrefixes[isIPv6] = append(sourceAddressPrefixes[isIPv6], ip.String()) } - sourceAddressPrefixes = append(sourceAddressPrefixes, serviceTags...) + sourceAddressPrefixes[false] = append(sourceAddressPrefixes[false], serviceTags...) + sourceAddressPrefixes[true] = append(sourceAddressPrefixes[true], serviceTags...) } - expectedSecurityRules, err := az.getExpectedSecurityRules(wantLb, ports, sourceAddressPrefixes, service, destinationIPAddresses, sourceRanges, backendIPAddresses, disableFloatingIP) - if err != nil { - return nil, err + expectedSecurityRules := []network.SecurityRule{} + handleSecurityRules := func(isIPv6 bool) error { + expectedSecurityRulesSingleStack, err := az.getExpectedSecurityRules(wantLb, ports, sourceAddressPrefixes[isIPv6], service, destinationIPAddresses[isIPv6], sourceRanges, backendIPAddresses[isIPv6], disableFloatingIP, isIPv6) + expectedSecurityRules = append(expectedSecurityRules, expectedSecurityRulesSingleStack...) + return err + } + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if v4Enabled { + if err := handleSecurityRules(false); err != nil { + return nil, err + } + } + if v6Enabled { + if err := handleSecurityRules(true); err != nil { + return nil, err + } } // update security rules @@ -2590,12 +2878,19 @@ func (az *Cloud) reconcileSecurityGroup(clusterName string, service *v1.Service, return nil, err } klog.V(10).Infof("CreateOrUpdateSecurityGroup(%q): end", *sg.Name) - _ = az.nsgCache.Delete(to.String(sg.Name)) + _ = az.nsgCache.Delete(pointer.StringDeref(sg.Name, "")) } return &sg, nil } -func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, service *v1.Service, serviceName string, wantLb bool, expectedSecurityRules []network.SecurityRule, ports []v1.ServicePort, sourceAddressPrefixes []string, destinationIPAddresses []string) (bool, []network.SecurityRule, error) { +func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, + service *v1.Service, + serviceName string, + wantLb bool, + expectedSecurityRules []network.SecurityRule, + ports []v1.ServicePort, + sourceAddressPrefixes, destinationIPAddresses map[bool][]string, +) (bool, []network.SecurityRule, error) { dirtySg := false var updatedRules []network.SecurityRule if sg.SecurityGroupPropertiesFormat != nil && sg.SecurityGroupPropertiesFormat.SecurityRules != nil { @@ -2627,39 +2922,58 @@ func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, service *v1.Se // update security rules: if the service uses a shared rule and is being deleted, // then remove it from the shared rule - if useSharedSecurityRule(service) && !wantLb { - for _, port := range ports { - for _, sourceAddressPrefix := range sourceAddressPrefixes { - sharedRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefix) - sharedIndex, sharedRule, sharedRuleFound := findSecurityRuleByName(updatedRules, sharedRuleName) - if !sharedRuleFound { - klog.V(4).Infof("Didn't find shared rule %s for service %s", sharedRuleName, service.Name) - continue - } - if sharedRule.DestinationAddressPrefixes == nil { - klog.V(4).Infof("Didn't find DestinationAddressPrefixes in shared rule for service %s", service.Name) - continue - } - existingPrefixes := *sharedRule.DestinationAddressPrefixes - for _, destinationIPAddress := range destinationIPAddresses { - addressIndex, found := findIndex(existingPrefixes, destinationIPAddress) - if !found { - klog.Warningf("Didn't find destination address %v in shared rule %s for service %s", destinationIPAddress, sharedRuleName, service.Name) + handleRule := func(isIPv6 bool) { + if useSharedSecurityRule(service) && !wantLb { + for _, port := range ports { + for _, sourceAddressPrefix := range sourceAddressPrefixes[isIPv6] { + sharedRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefix, isIPv6) + sharedIndex, sharedRule, sharedRuleFound := findSecurityRuleByName(updatedRules, sharedRuleName) + if !sharedRuleFound { + klog.V(4).Infof("Didn't find shared rule %s for service %s", sharedRuleName, service.Name) continue } - if len(existingPrefixes) == 1 { - updatedRules = append(updatedRules[:sharedIndex], updatedRules[sharedIndex+1:]...) + shouldDeleteNSGRule := false + if sharedRule.SecurityRulePropertiesFormat == nil || + sharedRule.SecurityRulePropertiesFormat.DestinationAddressPrefixes == nil || + len(*sharedRule.SecurityRulePropertiesFormat.DestinationAddressPrefixes) == 0 { + shouldDeleteNSGRule = true } else { - newDestinations := append(existingPrefixes[:addressIndex], existingPrefixes[addressIndex+1:]...) - sharedRule.DestinationAddressPrefixes = &newDestinations - updatedRules[sharedIndex] = sharedRule + existingPrefixes := *sharedRule.DestinationAddressPrefixes + for _, destinationIPAddress := range destinationIPAddresses[isIPv6] { + addressIndex, found := findIndex(existingPrefixes, destinationIPAddress) + if !found { + klog.Warningf("Didn't find destination address %v in shared rule %s for service %s", destinationIPAddress, sharedRuleName, service.Name) + continue + } + if len(existingPrefixes) == 1 { + shouldDeleteNSGRule = true + break //shared nsg rule has only one entry and entry owned by deleted svc has been found. skip the rest of the entries + } else { + newDestinations := append(existingPrefixes[:addressIndex], existingPrefixes[addressIndex+1:]...) + sharedRule.DestinationAddressPrefixes = &newDestinations + updatedRules[sharedIndex] = sharedRule + } + dirtySg = true + } } - dirtySg = true - } + if shouldDeleteNSGRule { + klog.V(4).Infof("shared rule will be deleted because last service %s which refers this rule is deleted.", service.Name) + updatedRules = append(updatedRules[:sharedIndex], updatedRules[sharedIndex+1:]...) + dirtySg = true + continue + } + } } } } + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if v4Enabled { + handleRule(consts.IPVersionIPv4) + } + if v6Enabled { + handleRule(consts.IPVersionIPv6) + } // update security rules: prepare rules for consolidation for index, rule := range updatedRules { @@ -2681,10 +2995,14 @@ func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, service *v1.Se } if foundRule && allowsConsolidation(expectedRule) { index, _ := findConsolidationCandidate(updatedRules, expectedRule) - updatedRules[index] = consolidate(updatedRules[index], expectedRule) + if updatedRules[index].DestinationAddressPrefixes != nil { + updatedRules[index] = consolidate(updatedRules[index], expectedRule) + } else { + updatedRules = append(updatedRules[:index], updatedRules[index+1:]...) + } dirtySg = true } - if !foundRule { + if !foundRule && wantLb { klog.V(10).Infof("reconcile(%s)(%t): sg rule(%s) - adding", serviceName, wantLb, *expectedRule.Name) nextAvailablePriority, err := getNextAvailablePriority(updatedRules) @@ -2692,7 +3010,7 @@ func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, service *v1.Se return false, nil, err } - expectedRule.Priority = to.Int32Ptr(nextAvailablePriority) + expectedRule.Priority = pointer.Int32(nextAvailablePriority) updatedRules = append(updatedRules, expectedRule) dirtySg = true } @@ -2703,10 +3021,11 @@ func (az *Cloud) reconcileSecurityRules(sg network.SecurityGroup, service *v1.Se for _, r := range updatedRules { klog.V(10).Infof("Updated security rule while processing %s: %s:%s -> %s:%s", service.Name, logSafe(r.SourceAddressPrefix), logSafe(r.SourcePortRange), logSafeCollection(r.DestinationAddressPrefix, r.DestinationAddressPrefixes), logSafe(r.DestinationPortRange)) } + return dirtySg, updatedRules, nil } -func (az *Cloud) getExpectedSecurityRules(wantLb bool, ports []v1.ServicePort, sourceAddressPrefixes []string, service *v1.Service, destinationIPAddresses []string, sourceRanges utilnet.IPNetSet, backendIPAddresses []string, disableFloatingIP bool) ([]network.SecurityRule, error) { +func (az *Cloud) getExpectedSecurityRules(wantLb bool, ports []v1.ServicePort, sourceAddressPrefixes []string, service *v1.Service, destinationIPAddresses []string, sourceRanges utilnet.IPNetSet, backendIPAddresses []string, disableFloatingIP, isIPv6 bool) ([]network.SecurityRule, error) { expectedSecurityRules := []network.SecurityRule{} if wantLb { @@ -2723,26 +3042,26 @@ func (az *Cloud) getExpectedSecurityRules(wantLb bool, ports []v1.ServicePort, s } for j := range sourceAddressPrefixes { ix := i*len(sourceAddressPrefixes) + j - securityRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefixes[j]) + securityRuleName := az.getSecurityRuleName(service, port, sourceAddressPrefixes[j], isIPv6) nsgRule := network.SecurityRule{ - Name: to.StringPtr(securityRuleName), + Name: pointer.String(securityRuleName), SecurityRulePropertiesFormat: &network.SecurityRulePropertiesFormat{ Protocol: *securityProto, - SourcePortRange: to.StringPtr("*"), - DestinationPortRange: to.StringPtr(strconv.Itoa(int(dstPort))), - SourceAddressPrefix: to.StringPtr(sourceAddressPrefixes[j]), + SourcePortRange: pointer.String("*"), + DestinationPortRange: pointer.String(strconv.Itoa(int(dstPort))), + SourceAddressPrefix: pointer.String(sourceAddressPrefixes[j]), Access: network.SecurityRuleAccessAllow, Direction: network.SecurityRuleDirectionInbound, }, } if len(destinationIPAddresses) == 1 && disableFloatingIP { - nsgRule.DestinationAddressPrefixes = to.StringSlicePtr(backendIPAddresses) + nsgRule.DestinationAddressPrefixes = &(backendIPAddresses) } else if len(destinationIPAddresses) == 1 && !disableFloatingIP { // continue to use DestinationAddressPrefix to avoid NSG updates for existing rules. - nsgRule.DestinationAddressPrefix = to.StringPtr(destinationIPAddresses[0]) + nsgRule.DestinationAddressPrefix = pointer.String(destinationIPAddresses[0]) } else { - nsgRule.DestinationAddressPrefixes = to.StringSlicePtr(destinationIPAddresses) + nsgRule.DestinationAddressPrefixes = &(destinationIPAddresses) } expectedSecurityRules[ix] = nsgRule } @@ -2760,23 +3079,23 @@ func (az *Cloud) getExpectedSecurityRules(wantLb bool, ports []v1.ServicePort, s if err != nil { return nil, err } - securityRuleName := az.getSecurityRuleName(service, port, "deny_all") + securityRuleName := az.getSecurityRuleName(service, port, "deny_all", isIPv6) nsgRule := network.SecurityRule{ - Name: to.StringPtr(securityRuleName), + Name: pointer.String(securityRuleName), SecurityRulePropertiesFormat: &network.SecurityRulePropertiesFormat{ Protocol: *securityProto, - SourcePortRange: to.StringPtr("*"), - DestinationPortRange: to.StringPtr(strconv.Itoa(int(port.Port))), - SourceAddressPrefix: to.StringPtr("*"), + SourcePortRange: pointer.String("*"), + DestinationPortRange: pointer.String(strconv.Itoa(int(port.Port))), + SourceAddressPrefix: pointer.String("*"), Access: network.SecurityRuleAccessDeny, Direction: network.SecurityRuleDirectionInbound, }, } if len(destinationIPAddresses) == 1 { // continue to use DestinationAddressPrefix to avoid NSG updates for existing rules. - nsgRule.DestinationAddressPrefix = to.StringPtr(destinationIPAddresses[0]) + nsgRule.DestinationAddressPrefix = pointer.String(destinationIPAddresses[0]) } else { - nsgRule.DestinationAddressPrefixes = to.StringSlicePtr(destinationIPAddresses) + nsgRule.DestinationAddressPrefixes = &(destinationIPAddresses) } expectedSecurityRules = append(expectedSecurityRules, nsgRule) } @@ -2784,7 +3103,7 @@ func (az *Cloud) getExpectedSecurityRules(wantLb bool, ports []v1.ServicePort, s } for _, r := range expectedSecurityRules { - klog.V(10).Infof("Expecting security rule for %s: %s:%s -> %v %v :%s", service.Name, to.String(r.SourceAddressPrefix), to.String(r.SourcePortRange), to.String(r.DestinationAddressPrefix), to.StringSlice(r.DestinationAddressPrefixes), to.String(r.DestinationPortRange)) + klog.V(10).Infof("Expecting security rule for %s: %s:%s -> %v %v :%s", service.Name, pointer.StringDeref(r.SourceAddressPrefix, ""), pointer.StringDeref(r.SourcePortRange, ""), pointer.StringDeref(r.DestinationAddressPrefix, ""), stringSlice(r.DestinationAddressPrefixes), pointer.StringDeref(r.DestinationPortRange, "")) } return expectedSecurityRules, nil } @@ -2795,7 +3114,7 @@ func (az *Cloud) shouldUpdateLoadBalancer(clusterName string, service *v1.Servic return false, fmt.Errorf("shouldUpdateLoadBalancer: failed to list managed load balancers: %w", err) } - _, _, existsLb, _ := az.getServiceLoadBalancer(service, clusterName, nodes, false, existingManagedLBs) + _, _, _, _, existsLb, _ := az.getServiceLoadBalancer(service, clusterName, nodes, false, existingManagedLBs) return existsLb && service.ObjectMeta.DeletionTimestamp == nil && service.Spec.Type == v1.ServiceTypeLoadBalancer, nil } @@ -2835,13 +3154,13 @@ func findIndex(strs []string, s string) (int, bool) { } func allowsConsolidation(rule network.SecurityRule) bool { - return strings.HasPrefix(to.String(rule.Name), "shared") + return strings.HasPrefix(pointer.StringDeref(rule.Name, ""), "shared") } func findConsolidationCandidate(rules []network.SecurityRule, rule network.SecurityRule) (int, bool) { for index, r := range rules { if allowsConsolidation(r) { - if strings.EqualFold(to.String(r.Name), to.String(rule.Name)) { + if strings.EqualFold(pointer.StringDeref(r.Name, ""), pointer.StringDeref(rule.Name, "")) { return index, true } } @@ -2974,6 +3293,8 @@ func shouldReleaseExistingOwnedPublicIP(existingPip *network.PublicIPAddress, lb // #2 - If the load balancer is internal, and thus doesn't require public exposure lbIsInternal || // #3 - If the name of this public ip does not match the desired name, + // NOTICE: For IPv6 Service created with CCM v1.27.1, the created PIP has IPv6 suffix. + // We need to recreate such PIP and current logic to delete needs no change. (pipName != desiredPipName) || // #4 If the service annotations have specified the ip tags that the public ip must have, but they do not match the ip tags of the existing instance (ipTagRequest.IPTagsRequestedByAnnotation && !areIPTagsEquivalent(currentIPTags, ipTagRequest.IPTags)) @@ -2991,25 +3312,31 @@ func (az *Cloud) ensurePIPTagged(service *v1.Service, pip *network.PublicIPAddre found, key := findKeyInMapCaseInsensitive(configTags, k) if !found { configTags[k] = v - } else if !strings.EqualFold(to.String(v), to.String(configTags[key])) { + } else if !strings.EqualFold(pointer.StringDeref(v, ""), pointer.StringDeref(configTags[key], "")) { configTags[key] = v } } // include the cluster name and service names tags when comparing - var clusterName, serviceNames *string + var clusterName, serviceNames, serviceNameUsingDNS *string if v := getClusterFromPIPClusterTags(pip.Tags); v != "" { clusterName = &v } if v := getServiceFromPIPServiceTags(pip.Tags); v != "" { serviceNames = &v } + if v := getServiceFromPIPDNSTags(pip.Tags); v != "" { + serviceNameUsingDNS = &v + } if clusterName != nil { configTags[consts.ClusterNameKey] = clusterName } if serviceNames != nil { configTags[consts.ServiceTagKey] = serviceNames } + if serviceNameUsingDNS != nil { + configTags[consts.ServiceUsingDNSKey] = serviceNameUsingDNS + } tags, changed := az.reconcileTags(pip.Tags, configTags) pip.Tags = tags @@ -3017,11 +3344,54 @@ func (az *Cloud) ensurePIPTagged(service *v1.Service, pip *network.PublicIPAddre return changed } -// This reconciles the PublicIP resources similar to how the LB is reconciled. -func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbName string, wantLb bool) (*network.PublicIPAddress, error) { +// reconcilePublicIPs reconciles the PublicIP resources similar to how the LB is reconciled. +func (az *Cloud) reconcilePublicIPs(clusterName string, service *v1.Service, lbName string, wantLb bool) ([]*network.PublicIPAddress, error) { + pipResourceGroup := az.getPublicIPAddressResourceGroup(service) + + reconciledPIPs := []*network.PublicIPAddress{} + pips, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeDefault) + if err != nil { + return nil, err + } + + pipsV4, pipsV6 := []network.PublicIPAddress{}, []network.PublicIPAddress{} + for _, pip := range pips { + if pip.PublicIPAddressPropertiesFormat == nil || pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion == "" || + pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion == network.IPv4 { + pipsV4 = append(pipsV4, pip) + } else { + pipsV6 = append(pipsV6, pip) + } + } + + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + if v4Enabled { + reconciledPIP, err := az.reconcilePublicIP(pipsV4, clusterName, service, lbName, wantLb, false) + if err != nil { + return reconciledPIPs, err + } + if reconciledPIP != nil { + reconciledPIPs = append(reconciledPIPs, reconciledPIP) + } + } + if v6Enabled { + reconciledPIP, err := az.reconcilePublicIP(pipsV6, clusterName, service, lbName, wantLb, true) + if err != nil { + return reconciledPIPs, err + } + if reconciledPIP != nil { + reconciledPIPs = append(reconciledPIPs, reconciledPIP) + } + } + return reconciledPIPs, nil +} + +// reconcilePublicIP reconciles the PublicIP resources similar to how the LB is reconciled with the specified IP family. +func (az *Cloud) reconcilePublicIP(pips []network.PublicIPAddress, clusterName string, service *v1.Service, lbName string, wantLb, isIPv6 bool) (*network.PublicIPAddress, error) { isInternal := requiresInternalLoadBalancer(service) serviceName := getServiceName(service) serviceIPTagRequest := getServiceIPTagRequestForPublicIP(service) + pipResourceGroup := az.getPublicIPAddressResourceGroup(service) var ( lb *network.LoadBalancer @@ -3030,15 +3400,8 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa shouldPIPExisted bool ) - pipResourceGroup := az.getPublicIPAddressResourceGroup(service) - - pips, err := az.ListPIP(service, pipResourceGroup) - if err != nil { - return nil, err - } - if !isInternal && wantLb { - desiredPipName, shouldPIPExisted, err = az.determinePublicIPName(clusterName, service, &pips) + desiredPipName, shouldPIPExisted, err = az.determinePublicIPName(clusterName, service, isIPv6) if err != nil { return nil, err } @@ -3052,7 +3415,7 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa } discoveredDesiredPublicIP, pipsToBeDeleted, deletedDesiredPublicIP, pipsToBeUpdated, err := az.getPublicIPUpdates( - clusterName, service, pips, wantLb, isInternal, desiredPipName, serviceName, serviceIPTagRequest, shouldPIPExisted) + clusterName, service, pips, wantLb, isInternal, desiredPipName, serviceName, serviceIPTagRequest, shouldPIPExisted, isIPv6) if err != nil { return nil, err } @@ -3061,7 +3424,7 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa for _, pip := range pipsToBeUpdated { pipCopy := *pip updateFuncs = append(updateFuncs, func() error { - klog.V(2).Infof("reconcilePublicIP for service(%s): pip(%s) - updating", serviceName, *pip.Name) + klog.V(2).Infof("reconcilePublicIP for service(%s): pip(%s), isIPv6(%v) - updating", serviceName, *pip.Name, isIPv6) return az.CreateOrUpdatePIP(service, pipResourceGroup, pipCopy) }) } @@ -3073,7 +3436,7 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa for _, pip := range pipsToBeDeleted { pipCopy := *pip deleteFuncs = append(deleteFuncs, func() error { - klog.V(2).Infof("reconcilePublicIP for service(%s): pip(%s) - deleting", serviceName, *pip.Name) + klog.V(2).Infof("reconcilePublicIP for service(%s): pip(%s), isIPv6(%v) - deleting", serviceName, *pip.Name, isIPv6) return az.safeDeletePublicIP(service, pipResourceGroup, &pipCopy, lb) }) } @@ -3087,7 +3450,7 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa var pip *network.PublicIPAddress domainNameLabel, found := getPublicIPDomainNameLabel(service) errorIfPublicIPDoesNotExist := shouldPIPExisted && discoveredDesiredPublicIP && !deletedDesiredPublicIP - if pip, err = az.ensurePublicIPExists(service, desiredPipName, domainNameLabel, clusterName, errorIfPublicIPDoesNotExist, found); err != nil { + if pip, err = az.ensurePublicIPExists(service, desiredPipName, domainNameLabel, clusterName, errorIfPublicIPDoesNotExist, found, isIPv6); err != nil { return nil, err } return pip, nil @@ -3095,6 +3458,7 @@ func (az *Cloud) reconcilePublicIP(clusterName string, service *v1.Service, lbNa return nil, nil } +// getPublicIPUpdates handles one IP family only according to isIPv6 and PIP IP version. func (az *Cloud) getPublicIPUpdates( clusterName string, service *v1.Service, @@ -3104,7 +3468,8 @@ func (az *Cloud) getPublicIPUpdates( desiredPipName string, serviceName string, serviceIPTagRequest serviceIPTagRequest, - serviceAnnotationRequestsNamedPublicIP bool, + serviceAnnotationRequestsNamedPublicIP, + isIPv6 bool, ) (bool, []*network.PublicIPAddress, bool, []*network.PublicIPAddress, error) { var ( err error @@ -3115,6 +3480,16 @@ func (az *Cloud) getPublicIPUpdates( ) for i := range pips { pip := pips[i] + if pip.PublicIPAddressPropertiesFormat != nil && pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion != "" { + if (pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion == network.IPv4 && isIPv6) || + (pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion == network.IPv6 && !isIPv6) { + continue + } + } + + if pip.Name == nil { + return false, nil, false, nil, fmt.Errorf("PIP name is empty: %v", pip) + } pipName := *pip.Name // If we've been told to use a specific public ip by the client, let's track whether or not it actually existed @@ -3126,7 +3501,7 @@ func (az *Cloud) getPublicIPUpdates( owns, isUserAssignedPIP := serviceOwnsPublicIP(service, &pip, clusterName) if owns { var dirtyPIP, toBeDeleted bool - if !wantLb { + if !wantLb && !isUserAssignedPIP { klog.V(2).Infof("reconcilePublicIP for service(%s): unbinding the service from pip %s", serviceName, *pip.Name) if err = unbindServiceFromPIP(&pip, service, serviceName, clusterName, isUserAssignedPIP); err != nil { return false, nil, false, nil, err @@ -3171,70 +3546,82 @@ func (az *Cloud) getPublicIPUpdates( func (az *Cloud) safeDeletePublicIP(service *v1.Service, pipResourceGroup string, pip *network.PublicIPAddress, lb *network.LoadBalancer) error { // Remove references if pip.IPConfiguration is not nil. if pip.PublicIPAddressPropertiesFormat != nil && - pip.PublicIPAddressPropertiesFormat.IPConfiguration != nil && - lb != nil && lb.LoadBalancerPropertiesFormat != nil && - lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations != nil { - referencedLBRules := []network.SubResource{} - frontendIPConfigUpdated := false - loadBalancerRuleUpdated := false - - // Check whether there are still frontend IP configurations referring to it. - ipConfigurationID := to.String(pip.PublicIPAddressPropertiesFormat.IPConfiguration.ID) - if ipConfigurationID != "" { - lbFrontendIPConfigs := *lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations - for i := len(lbFrontendIPConfigs) - 1; i >= 0; i-- { - config := lbFrontendIPConfigs[i] - if strings.EqualFold(ipConfigurationID, to.String(config.ID)) { - if config.FrontendIPConfigurationPropertiesFormat != nil && - config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules != nil { - referencedLBRules = *config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules - } + pip.PublicIPAddressPropertiesFormat.IPConfiguration != nil { + // Fetch latest pip to check if the pip in the cache is stale. + // In some cases the public IP to be deleted is still referencing + // the frontend IP config on the LB. This is because the pip is + // stored in the cache and is not up-to-date. + latestPIP, ok, err := az.getPublicIPAddress(pipResourceGroup, *pip.Name, azcache.CacheReadTypeForceRefresh) + if err != nil { + klog.Errorf("safeDeletePublicIP: failed to get latest public IP %s/%s: %s", pipResourceGroup, *pip.Name, err.Error()) + return err + } + if ok && latestPIP.PublicIPAddressPropertiesFormat != nil && + latestPIP.PublicIPAddressPropertiesFormat.IPConfiguration != nil && + lb != nil && lb.LoadBalancerPropertiesFormat != nil && + lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations != nil { + referencedLBRules := []network.SubResource{} + frontendIPConfigUpdated := false + loadBalancerRuleUpdated := false + + // Check whether there are still frontend IP configurations referring to it. + ipConfigurationID := pointer.StringDeref(pip.PublicIPAddressPropertiesFormat.IPConfiguration.ID, "") + if ipConfigurationID != "" { + lbFrontendIPConfigs := *lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations + for i := len(lbFrontendIPConfigs) - 1; i >= 0; i-- { + config := lbFrontendIPConfigs[i] + if strings.EqualFold(ipConfigurationID, pointer.StringDeref(config.ID, "")) { + if config.FrontendIPConfigurationPropertiesFormat != nil && + config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules != nil { + referencedLBRules = *config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules + } - frontendIPConfigUpdated = true - lbFrontendIPConfigs = append(lbFrontendIPConfigs[:i], lbFrontendIPConfigs[i+1:]...) - break + frontendIPConfigUpdated = true + lbFrontendIPConfigs = append(lbFrontendIPConfigs[:i], lbFrontendIPConfigs[i+1:]...) + break + } } - } - if frontendIPConfigUpdated { - lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations = &lbFrontendIPConfigs + if frontendIPConfigUpdated { + lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations = &lbFrontendIPConfigs + } } - } - // Check whether there are still load balancer rules referring to it. - if len(referencedLBRules) > 0 { - referencedLBRuleIDs := sets.NewString() - for _, refer := range referencedLBRules { - referencedLBRuleIDs.Insert(to.String(refer.ID)) - } + // Check whether there are still load balancer rules referring to it. + if len(referencedLBRules) > 0 { + referencedLBRuleIDs := sets.New[string]() + for _, refer := range referencedLBRules { + referencedLBRuleIDs.Insert(pointer.StringDeref(refer.ID, "")) + } - if lb.LoadBalancerPropertiesFormat.LoadBalancingRules != nil { - lbRules := *lb.LoadBalancerPropertiesFormat.LoadBalancingRules - for i := len(lbRules) - 1; i >= 0; i-- { - ruleID := to.String(lbRules[i].ID) - if ruleID != "" && referencedLBRuleIDs.Has(ruleID) { - loadBalancerRuleUpdated = true - lbRules = append(lbRules[:i], lbRules[i+1:]...) + if lb.LoadBalancerPropertiesFormat.LoadBalancingRules != nil { + lbRules := *lb.LoadBalancerPropertiesFormat.LoadBalancingRules + for i := len(lbRules) - 1; i >= 0; i-- { + ruleID := pointer.StringDeref(lbRules[i].ID, "") + if ruleID != "" && referencedLBRuleIDs.Has(ruleID) { + loadBalancerRuleUpdated = true + lbRules = append(lbRules[:i], lbRules[i+1:]...) + } } - } - if loadBalancerRuleUpdated { - lb.LoadBalancerPropertiesFormat.LoadBalancingRules = &lbRules + if loadBalancerRuleUpdated { + lb.LoadBalancerPropertiesFormat.LoadBalancingRules = &lbRules + } } } - } - // Update load balancer when frontendIPConfigUpdated or loadBalancerRuleUpdated. - if frontendIPConfigUpdated || loadBalancerRuleUpdated { - err := az.CreateOrUpdateLB(service, *lb) - if err != nil { - klog.Errorf("safeDeletePublicIP for service(%s) failed with error: %v", getServiceName(service), err) - return err + // Update load balancer when frontendIPConfigUpdated or loadBalancerRuleUpdated. + if frontendIPConfigUpdated || loadBalancerRuleUpdated { + err := az.CreateOrUpdateLB(service, *lb) + if err != nil { + klog.Errorf("safeDeletePublicIP for service(%s) failed with error: %v", getServiceName(service), err) + return err + } } } } - pipName := to.String(pip.Name) + pipName := pointer.StringDeref(pip.Name, "") klog.V(10).Infof("DeletePublicIP(%s, %q): start", pipResourceGroup, pipName) err := az.DeletePublicIP(service, pipResourceGroup, pipName) if err != nil { @@ -3245,23 +3632,9 @@ func (az *Cloud) safeDeletePublicIP(service *v1.Service, pipResourceGroup string return nil } -func findProbe(probes []network.Probe, probe network.Probe) bool { - for _, existingProbe := range probes { - if strings.EqualFold(to.String(existingProbe.Name), to.String(probe.Name)) && - to.Int32(existingProbe.Port) == to.Int32(probe.Port) && - strings.EqualFold(string(existingProbe.Protocol), string(probe.Protocol)) && - strings.EqualFold(to.String(existingProbe.RequestPath), to.String(probe.RequestPath)) && - to.Int32(existingProbe.IntervalInSeconds) == to.Int32(probe.IntervalInSeconds) && - to.Int32(existingProbe.NumberOfProbes) == to.Int32(probe.NumberOfProbes) { - return true - } - } - return false -} - func findRule(rules []network.LoadBalancingRule, rule network.LoadBalancingRule, wantLB bool) bool { for _, existingRule := range rules { - if strings.EqualFold(to.String(existingRule.Name), to.String(rule.Name)) && + if strings.EqualFold(pointer.StringDeref(existingRule.Name, ""), pointer.StringDeref(rule.Name, "")) && equalLoadBalancingRulePropertiesFormat(existingRule.LoadBalancingRulePropertiesFormat, rule.LoadBalancingRulePropertiesFormat, wantLB) { return true } @@ -3271,6 +3644,7 @@ func findRule(rules []network.LoadBalancingRule, rule network.LoadBalancingRule, // equalLoadBalancingRulePropertiesFormat checks whether the provided LoadBalancingRulePropertiesFormat are equal. // Note: only fields used in reconcileLoadBalancer are considered. +// s: existing, t: target func equalLoadBalancingRulePropertiesFormat(s *network.LoadBalancingRulePropertiesFormat, t *network.LoadBalancingRulePropertiesFormat, wantLB bool) bool { if s == nil || t == nil { return false @@ -3282,7 +3656,7 @@ func equalLoadBalancingRulePropertiesFormat(s *network.LoadBalancingRuleProperti } if reflect.DeepEqual(s.Protocol, network.TransportProtocolTCP) { - properties = properties && reflect.DeepEqual(to.Bool(s.EnableTCPReset), to.Bool(t.EnableTCPReset)) + properties = properties && reflect.DeepEqual(pointer.BoolDeref(s.EnableTCPReset, false), pointer.BoolDeref(t.EnableTCPReset, false)) } properties = properties && equalSubResource(s.FrontendIPConfiguration, t.FrontendIPConfiguration) && @@ -3292,7 +3666,7 @@ func equalLoadBalancingRulePropertiesFormat(s *network.LoadBalancingRuleProperti reflect.DeepEqual(s.BackendPort, t.BackendPort) && equalSubResource(s.Probe, t.Probe) && reflect.DeepEqual(s.EnableFloatingIP, t.EnableFloatingIP) && - reflect.DeepEqual(to.Bool(s.DisableOutboundSnat), to.Bool(t.DisableOutboundSnat)) + reflect.DeepEqual(pointer.BoolDeref(s.DisableOutboundSnat, false), pointer.BoolDeref(t.DisableOutboundSnat, false)) if wantLB && s.IdleTimeoutInMinutes != nil && t.IdleTimeoutInMinutes != nil { return properties && reflect.DeepEqual(s.IdleTimeoutInMinutes, t.IdleTimeoutInMinutes) @@ -3307,7 +3681,7 @@ func equalSubResource(s *network.SubResource, t *network.SubResource) bool { if s == nil || t == nil { return false } - return strings.EqualFold(to.String(s.ID), to.String(t.ID)) + return strings.EqualFold(pointer.StringDeref(s.ID, ""), pointer.StringDeref(t.ID, "")) } // This compares rule's Name, Protocol, SourcePortRange, DestinationPortRange, SourceAddressPrefix, Access, and Direction. @@ -3316,26 +3690,26 @@ func equalSubResource(s *network.SubResource, t *network.SubResource) bool { // despite different DestinationAddressPrefixes, in order to give it a chance to consolidate the two rules. func findSecurityRule(rules []network.SecurityRule, rule network.SecurityRule) bool { for _, existingRule := range rules { - if !strings.EqualFold(to.String(existingRule.Name), to.String(rule.Name)) { + if !strings.EqualFold(pointer.StringDeref(existingRule.Name, ""), pointer.StringDeref(rule.Name, "")) { continue } if !strings.EqualFold(string(existingRule.Protocol), string(rule.Protocol)) { continue } - if !strings.EqualFold(to.String(existingRule.SourcePortRange), to.String(rule.SourcePortRange)) { + if !strings.EqualFold(pointer.StringDeref(existingRule.SourcePortRange, ""), pointer.StringDeref(rule.SourcePortRange, "")) { continue } - if !strings.EqualFold(to.String(existingRule.DestinationPortRange), to.String(rule.DestinationPortRange)) { + if !strings.EqualFold(pointer.StringDeref(existingRule.DestinationPortRange, ""), pointer.StringDeref(rule.DestinationPortRange, "")) { continue } - if !strings.EqualFold(to.String(existingRule.SourceAddressPrefix), to.String(rule.SourceAddressPrefix)) { + if !strings.EqualFold(pointer.StringDeref(existingRule.SourceAddressPrefix, ""), pointer.StringDeref(rule.SourceAddressPrefix, "")) { continue } if !allowsConsolidation(existingRule) && !allowsConsolidation(rule) { - if !strings.EqualFold(to.String(existingRule.DestinationAddressPrefix), to.String(rule.DestinationAddressPrefix)) { + if !strings.EqualFold(pointer.StringDeref(existingRule.DestinationAddressPrefix, ""), pointer.StringDeref(rule.DestinationAddressPrefix, "")) { continue } - if !slices.Equal(to.StringSlice(existingRule.DestinationAddressPrefixes), to.StringSlice(rule.DestinationAddressPrefixes)) { + if !slices.Equal(stringSlice(existingRule.DestinationAddressPrefixes), stringSlice(rule.DestinationAddressPrefixes)) { continue } } @@ -3387,7 +3761,7 @@ func requiresInternalLoadBalancer(service *v1.Service) bool { return false } -func subnet(service *v1.Service) *string { +func getInternalSubnet(service *v1.Service) *string { if requiresInternalLoadBalancer(service) { if l, found := service.Annotations[consts.ServiceAnnotationLoadBalancerInternalSubnet]; found && strings.TrimSpace(l) != "" { return &l @@ -3431,8 +3805,7 @@ func ipInSubnet(ip string, subnet *network.Subnet) bool { // if anything else it returns the unique VM set names after trimming spaces. func (az *Cloud) getServiceLoadBalancerMode(service *v1.Service) (bool, bool, string) { mode, hasMode := service.Annotations[consts.ServiceAnnotationLoadBalancerMode] - useSingleSLB := az.useStandardLoadBalancer() && !az.EnableMultipleStandardLoadBalancers - if useSingleSLB && hasMode { + if az.useStandardLoadBalancer() && hasMode { klog.Warningf("single standard load balancer doesn't work with annotation %q, would ignore it", consts.ServiceAnnotationLoadBalancerMode) } mode = strings.TrimSpace(mode) @@ -3481,20 +3854,21 @@ func serviceOwnsPublicIP(service *v1.Service, pip *network.PublicIPAddress, clus return false, false } - if pip.PublicIPAddressPropertiesFormat == nil || to.String(pip.IPAddress) == "" { + if pip.PublicIPAddressPropertiesFormat == nil || pointer.StringDeref(pip.IPAddress, "") == "" { klog.Warningf("serviceOwnsPublicIP: empty pip.IPAddress") return false, false } serviceName := getServiceName(service) + isIPv6 := pip.PublicIPAddressVersion == network.IPv6 if pip.Tags != nil { serviceTag := getServiceFromPIPServiceTags(pip.Tags) clusterTag := getClusterFromPIPClusterTags(pip.Tags) // if there is no service tag on the pip, it is user-created pip if serviceTag == "" { - return strings.EqualFold(to.String(pip.IPAddress), getServiceLoadBalancerIP(service)), true + return isServiceSelectPIP(service, pip, isIPv6), true } // if there is service tag on the pip, it is system-created pip @@ -3506,17 +3880,28 @@ func serviceOwnsPublicIP(service *v1.Service, pip *network.PublicIPAddress, clus } // If cluster name tag is set, then return true if it matches. - if clusterTag == clusterName { - return true, false - } - } else { - // if the service is not included in the tags of the system-created pip, check the ip address - // this could happen for secondary services - return strings.EqualFold(to.String(pip.IPAddress), getServiceLoadBalancerIP(service)), false + return strings.EqualFold(clusterTag, clusterName), false } + + // if the service is not included in the tags of the system-created pip, check the ip address + // or pip name, this could happen for secondary services + return isServiceSelectPIP(service, pip, isIPv6), false } - return false, false + // if the pip has no tags, it should be user-created + return isServiceSelectPIP(service, pip, isIPv6), true +} + +func isServiceLoadBalancerIPMatchesPIP(service *v1.Service, pip *network.PublicIPAddress, isIPV6 bool) bool { + return strings.EqualFold(pointer.StringDeref(pip.IPAddress, ""), getServiceLoadBalancerIP(service, isIPV6)) +} + +func isServicePIPNameMatchesPIP(service *v1.Service, pip *network.PublicIPAddress, isIPV6 bool) bool { + return strings.EqualFold(pointer.StringDeref(pip.Name, ""), getServicePIPName(service, isIPV6)) +} + +func isServiceSelectPIP(service *v1.Service, pip *network.PublicIPAddress, isIPV6 bool) bool { + return isServiceLoadBalancerIPMatchesPIP(service, pip, isIPV6) || isServicePIPNameMatchesPIP(service, pip, isIPV6) } func isSVCNameInPIPTag(tag, svcName string) bool { @@ -3559,17 +3944,17 @@ func bindServicesToPIP(pip *network.PublicIPAddress, incomingServiceNames []stri } if pip.Tags == nil { - pip.Tags = map[string]*string{consts.ServiceTagKey: to.StringPtr("")} + pip.Tags = map[string]*string{consts.ServiceTagKey: pointer.String("")} } - serviceTagValue := to.StringPtr(getServiceFromPIPServiceTags(pip.Tags)) + serviceTagValue := pointer.String(getServiceFromPIPServiceTags(pip.Tags)) serviceTagValueSet := make(map[string]struct{}) existingServiceNames := parsePIPServiceTag(serviceTagValue) addedNew := false // replace is used when unbinding the service from PIP so addedNew remains false all the time if replace { - serviceTagValue = to.StringPtr(strings.Join(incomingServiceNames, ",")) + serviceTagValue = pointer.String(strings.Join(incomingServiceNames, ",")) pip.Tags[consts.ServiceTagKey] = serviceTagValue return false, nil @@ -3583,7 +3968,7 @@ func bindServicesToPIP(pip *network.PublicIPAddress, incomingServiceNames []stri for _, serviceName := range incomingServiceNames { if serviceTagValue == nil || *serviceTagValue == "" { - serviceTagValue = to.StringPtr(serviceName) + serviceTagValue = pointer.String(serviceName) addedNew = true } else { // detect duplicates @@ -3614,7 +3999,7 @@ func unbindServiceFromPIP(pip *network.PublicIPAddress, service *v1.Service, } // skip removing tags for user assigned pips - serviceTagValue := to.StringPtr(getServiceFromPIPServiceTags(pip.Tags)) + serviceTagValue := pointer.String(getServiceFromPIPServiceTags(pip.Tags)) existingServiceNames := parsePIPServiceTag(serviceTagValue) var found bool for i := len(existingServiceNames) - 1; i >= 0; i-- { @@ -3663,3 +4048,340 @@ func (az *Cloud) ensureSecurityGroupTagged(sg *network.SecurityGroup) bool { return changed } + +// For a load balancer, all frontend ip should reference either a subnet or publicIpAddress. +// Thus Azure do not allow mixed type (public and internal) load balancer. +// So we'd have a separate name for internal load balancer. +// This would be the name for Azure LoadBalancer resource. +func (az *Cloud) getAzureLoadBalancerName( + service *v1.Service, + existingLBs *[]network.LoadBalancer, + clusterName, vmSetName string, + isInternal bool, +) (string, error) { + if az.LoadBalancerName != "" { + clusterName = az.LoadBalancerName + } + lbNamePrefix := vmSetName + // The LB name prefix is set to the name of the cluster when: + // 1. the LB belongs to the primary agent pool. + // 2. using the single SLB. + if strings.EqualFold(vmSetName, az.VMSet.GetPrimaryVMSetName()) || az.useSingleStandardLoadBalancer() { + lbNamePrefix = clusterName + } + + // For multiple standard load balancers scenario: + // 1. Filter out the eligible load balancers. + // 2. Choose the most eligible load balancer. + if az.useMultipleStandardLoadBalancers() { + eligibleLBs, err := az.getEligibleLoadBalancersForService(service) + if err != nil { + return "", err + } + + currentLBName := az.getServiceCurrentLoadBalancerName(service) + lbNamePrefix = getMostEligibleLBForService(currentLBName, eligibleLBs, existingLBs) + } + + if isInternal { + return fmt.Sprintf("%s%s", lbNamePrefix, consts.InternalLoadBalancerNameSuffix), nil + } + return lbNamePrefix, nil +} + +func getMostEligibleLBForService( + currentLBName string, + eligibleLBs []string, + existingLBs *[]network.LoadBalancer, +) string { + // 1. If the LB is eligible and being used, choose it. + if StringInSlice(currentLBName, eligibleLBs) { + klog.V(4).Infof("getMostEligibleLBForService: choose %s as it is eligible and being used", currentLBName) + return currentLBName + } + + // 2. If the LB is eligible and not created yet, choose it because it has the fewest rules. + for _, eligibleLB := range eligibleLBs { + var found bool + if existingLBs != nil { + for _, existingLB := range *existingLBs { + if strings.EqualFold(pointer.StringDeref(existingLB.Name, ""), eligibleLB) { + found = true + break + } + } + } + if !found { + klog.V(4).Infof("getMostEligibleLBForService: choose %s as it is eligible and not existing", eligibleLB) + return eligibleLB + } + } + + // 3. If all eligible LBs are existing, choose the one with the fewest rules. + var expectedLBName string + ruleCount := 301 + if existingLBs != nil { + for _, existingLB := range *existingLBs { + if StringInSlice(pointer.StringDeref(existingLB.Name, ""), eligibleLBs) { + if existingLB.LoadBalancerPropertiesFormat != nil && + existingLB.LoadBalancingRules != nil { + if len(*existingLB.LoadBalancingRules) < ruleCount { + ruleCount = len(*existingLB.LoadBalancingRules) + expectedLBName = pointer.StringDeref(existingLB.Name, "") + } + } + } + } + } + + if expectedLBName != "" { + klog.V(4).Infof("getMostEligibleLBForService: choose %s with fewest %d rules", expectedLBName, ruleCount) + } + + return expectedLBName +} + +func (az *Cloud) getServiceCurrentLoadBalancerName(service *v1.Service) string { + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if az.isLoadBalancerInUseByService(service, multiSLBConfig) { + return multiSLBConfig.Name + } + } + return "" +} + +// getEligibleLoadBalancersForService filter out the eligible load balancers for the service. +// It follows four kinds of constraints: +// 1. Service annotation `service.beta.kubernetes.io/azure-load-balancer-configurations: lb1,lb2`. +// 2. AllowServicePlacement flag. Default to true, if set to false, the new services will not be put onto the LB. +// But the existing services that is using the LB will not be affected. +// 3. ServiceLabelSelector. The service will be put onto the LB only if the service has the labels specified in the selector. +// If there is no ServiceLabel selector on the LB, all services can be valid. +// 4. ServiceNamespaceSelector. The service will be put onto the LB only if the service is in the namespaces specified in the selector. +// If there is no ServiceNamespace selector on the LB, all services can be valid. +func (az *Cloud) getEligibleLoadBalancersForService(service *v1.Service) ([]string, error) { + var ( + eligibleLBs []MultipleStandardLoadBalancerConfiguration + eligibleLBNames []string + lbSelectedByAnnotation []string + lbFailedLabelSelector []string + lbFailedNamespaceSelector []string + lbFailedPlacementFlag []string + ) + + // 1. Service selects LBs defined in the annotation. + // If there is no annotation given, it selects all LBs. + lbsFromAnnotation := consts.GetLoadBalancerConfigurationsNames(service) + if len(lbsFromAnnotation) > 0 { + lbNamesSet := sets.New[string](lbsFromAnnotation...) + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + if lbNamesSet.Has(strings.ToLower(multiSLBConfig.Name)) { + klog.V(4).Infof("getEligibleLoadBalancersForService: service %q selects load balancer %q by annotation", service.Name, multiSLBConfig.Name) + eligibleLBs = append(eligibleLBs, multiSLBConfig) + lbSelectedByAnnotation = append(lbSelectedByAnnotation, multiSLBConfig.Name) + } + } + if len(lbSelectedByAnnotation) == 0 { + return nil, fmt.Errorf("service %q selects %d load balancers by annotation, but none of them is defined in cloud provider configuration", service.Name, len(lbsFromAnnotation)) + } + } else { + klog.V(4).Infof("getEligibleLoadBalancersForService: service %q does not select any load balancer by annotation, all load balancers are eligible", service.Name) + eligibleLBs = append(eligibleLBs, az.MultipleStandardLoadBalancerConfigurations...) + for _, eligibleLB := range eligibleLBs { + lbSelectedByAnnotation = append(lbSelectedByAnnotation, eligibleLB.Name) + } + } + + for i := len(eligibleLBs) - 1; i >= 0; i-- { + eligibleLB := eligibleLBs[i] + + // 2. If the LB does not allow service placement, it is not eligible, + // unless the service is already using the LB. + if !pointer.BoolDeref(eligibleLB.AllowServicePlacement, true) { + if az.isLoadBalancerInUseByService(service, eligibleLB) { + klog.V(4).Infof("getEligibleLoadBalancersForService: although load balancer %q has AllowServicePlacement=false, service %q is allowed to be placed on load balancer %q because it is using the load balancer", eligibleLB.Name, service.Name, eligibleLB.Name) + } else { + klog.V(4).Infof("getEligibleLoadBalancersForService: service %q is not allowed to be placed on load balancer %q", service.Name, eligibleLB.Name) + eligibleLBs = append(eligibleLBs[:i], eligibleLBs[i+1:]...) + lbFailedPlacementFlag = append(lbFailedPlacementFlag, eligibleLB.Name) + continue + } + } + + // 3. Check the service label selector. The service can be migrated from one LB to another LB + // if the service does not match the selector of the LB that it is currently using. + if eligibleLB.ServiceLabelSelector != nil { + serviceLabelSelector, err := metav1.LabelSelectorAsSelector(eligibleLB.ServiceLabelSelector) + if err != nil { + klog.Errorf("Failed to parse label selector %q for load balancer %q: %s", eligibleLB.ServiceLabelSelector.String(), eligibleLB.Name, err.Error()) + return []string{}, err + } + if !serviceLabelSelector.Matches(labels.Set(service.Labels)) { + klog.V(2).Infof("getEligibleLoadBalancersForService: service %q does not match label selector %q for load balancer %q", service.Name, eligibleLB.ServiceLabelSelector.String(), eligibleLB.Name) + eligibleLBs = append(eligibleLBs[:i], eligibleLBs[i+1:]...) + lbFailedLabelSelector = append(lbFailedLabelSelector, eligibleLB.Name) + continue + } + } + + // 4. Check the service namespace selector. The service can be migrated from one LB to another LB + // if the service does not match the selector of the LB that it is currently using. + if eligibleLB.ServiceNamespaceSelector != nil { + serviceNamespaceSelector, err := metav1.LabelSelectorAsSelector(eligibleLB.ServiceNamespaceSelector) + if err != nil { + klog.Errorf("Failed to parse namespace selector %q for load balancer %q: %s", eligibleLB.ServiceNamespaceSelector.String(), eligibleLB.Name, err.Error()) + return []string{}, err + } + ns, err := az.KubeClient.CoreV1().Namespaces().Get(context.Background(), service.Namespace, metav1.GetOptions{}) + if err != nil { + klog.Errorf("Failed to get namespace %q for load balancer %q: %s", service.Namespace, eligibleLB.Name, err.Error()) + return []string{}, err + } + if !serviceNamespaceSelector.Matches(labels.Set(ns.Labels)) { + klog.V(2).Infof("getEligibleLoadBalancersForService: namespace %q does not match namespace selector %q for load balancer %q", service.Namespace, eligibleLB.ServiceNamespaceSelector.String(), eligibleLB.Name) + eligibleLBs = append(eligibleLBs[:i], eligibleLBs[i+1:]...) + lbFailedNamespaceSelector = append(lbFailedNamespaceSelector, eligibleLB.Name) + continue + } + } + } + + serviceName := getServiceName(service) + if len(eligibleLBs) == 0 { + return []string{}, fmt.Errorf( + "service %q selects %d load balancers (%s), but %d of them (%s) have AllowServicePlacement set to false and the service is not using any of them, %d of them (%s) do not match the service label selector, and %d of them (%s) do not match the service namespace selector", + serviceName, + len(lbSelectedByAnnotation), + strings.Join(lbSelectedByAnnotation, ", "), + len(lbFailedPlacementFlag), + strings.Join(lbFailedPlacementFlag, ", "), + len(lbFailedLabelSelector), + strings.Join(lbFailedLabelSelector, ", "), + len(lbFailedNamespaceSelector), + strings.Join(lbFailedNamespaceSelector, ", "), + ) + } + + for _, eligibleLB := range eligibleLBs { + eligibleLBNames = append(eligibleLBNames, eligibleLB.Name) + } + + return eligibleLBNames, nil +} + +func (az *Cloud) isLoadBalancerInUseByService(service *v1.Service, lbConfig MultipleStandardLoadBalancerConfiguration) bool { + az.multipleStandardLoadBalancersActiveServicesLock.Lock() + defer az.multipleStandardLoadBalancersActiveServicesLock.Unlock() + + serviceName := getServiceName(service) + if lbConfig.ActiveServices != nil { + return lbConfig.ActiveServices.Has(serviceName) + } + return false +} + +// There are two cases when a service owns the frontend IP config: +// 1. The primary service, which means the frontend IP config is created after the creation of the service. +// This means the name of the config can be tracked by the service UID. +// 2. The secondary services must have their loadBalancer IP set if they want to share the same config as the primary +// service. Hence, it can be tracked by the loadBalancer IP. +// If the IP version is not empty, which means it is the secondary Service, it returns IP version of the Service FIP. +func (az *Cloud) serviceOwnsFrontendIP(fip network.FrontendIPConfiguration, service *v1.Service) (bool, bool, network.IPVersion) { + var isPrimaryService bool + baseName := az.GetLoadBalancerName(context.TODO(), "", service) + if strings.HasPrefix(pointer.StringDeref(fip.Name, ""), baseName) { + klog.V(6).Infof("serviceOwnsFrontendIP: found primary service %s of the frontend IP config %s", service.Name, *fip.Name) + isPrimaryService = true + return true, isPrimaryService, "" + } + + loadBalancerIPs := getServiceLoadBalancerIPs(service) + pipResourceGroup := az.getPublicIPAddressResourceGroup(service) + var pipNames []string + if len(loadBalancerIPs) == 0 { + if !requiresInternalLoadBalancer(service) { + pipNames = getServicePIPNames(service) + for _, pipName := range pipNames { + if pipName != "" { + pip, err := az.findMatchedPIP("", pipName, pipResourceGroup) + if err != nil { + klog.Warningf("serviceOwnsFrontendIP: unexpected error when finding match public IP of the service %s with name %s: %v", service.Name, pipName, err) + return false, isPrimaryService, "" + } + if publicIPOwnsFrontendIP(service, &fip, pip) { + return true, isPrimaryService, pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion + } + } + } + } + // it is a must that the secondary services set the loadBalancer IP or pip name + return false, isPrimaryService, "" + } + + // for external secondary service the public IP address should be checked + if !requiresInternalLoadBalancer(service) { + for _, loadBalancerIP := range loadBalancerIPs { + pip, err := az.findMatchedPIP(loadBalancerIP, "", pipResourceGroup) + if err != nil { + klog.Warningf("serviceOwnsFrontendIP: unexpected error when finding match public IP of the service %s with loadBalancerIP %s: %v", service.Name, loadBalancerIP, err) + return false, isPrimaryService, "" + } + + if publicIPOwnsFrontendIP(service, &fip, pip) { + return true, isPrimaryService, pip.PublicIPAddressPropertiesFormat.PublicIPAddressVersion + } + klog.V(6).Infof("serviceOwnsFrontendIP: the public IP with ID %s is being referenced by other service with public IP address %s "+ + "OR it is of incorrect IP version", *pip.ID, *pip.IPAddress) + } + + return false, isPrimaryService, "" + } + + // for internal secondary service the private IP address on the frontend IP config should be checked + if fip.PrivateIPAddress == nil { + return false, isPrimaryService, "" + } + privateIPAddrVersion := network.IPv4 + if net.ParseIP(*fip.PrivateIPAddress).To4() == nil { + privateIPAddrVersion = network.IPv6 + } + + privateIPEquals := false + for _, loadBalancerIP := range loadBalancerIPs { + if strings.EqualFold(*fip.PrivateIPAddress, loadBalancerIP) { + privateIPEquals = true + break + } + } + return privateIPEquals, isPrimaryService, privateIPAddrVersion +} + +func (az *Cloud) getFrontendIPConfigNames(service *v1.Service) map[bool]string { + isDualStack := isServiceDualStack(service) + defaultLBFrontendIPConfigName := az.getDefaultFrontendIPConfigName(service) + return map[bool]string{ + consts.IPVersionIPv4: getResourceByIPFamily(defaultLBFrontendIPConfigName, isDualStack, consts.IPVersionIPv4), + consts.IPVersionIPv6: getResourceByIPFamily(defaultLBFrontendIPConfigName, isDualStack, consts.IPVersionIPv6), + } +} + +func (az *Cloud) getDefaultFrontendIPConfigName(service *v1.Service) string { + baseName := az.GetLoadBalancerName(context.TODO(), "", service) + subnetName := getInternalSubnet(service) + if subnetName != nil { + ipcName := fmt.Sprintf("%s-%s", baseName, *subnetName) + + // Azure lb front end configuration name must not exceed 80 characters + maxLength := consts.FrontendIPConfigNameMaxLength - consts.IPFamilySuffixLength + if len(ipcName) > maxLength { + ipcName = ipcName[:maxLength] + // Cutting the string may result in char like "-" as the string end. + // If the last char is not a letter or '_', replace it with "_". + if !unicode.IsLetter(rune(ipcName[len(ipcName)-1:][0])) && ipcName[len(ipcName)-1:] != "_" { + ipcName = ipcName[:len(ipcName)-1] + "_" + } + } + return ipcName + } + return baseName +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_backendpool.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_backendpool.go index a94f54eb8b90..28d75bdb040d 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_backendpool.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_backendpool.go @@ -23,17 +23,18 @@ import ( "fmt" "strings" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/metrics" ) type BackendPool interface { @@ -51,7 +52,7 @@ type BackendPool interface { // ReconcileBackendPools creates the inbound backend pool if it is not existed, and removes nodes that are supposed to be // excluded from the load balancers. - ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, error) + ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, bool, error) // GetBackendPrivateIPs returns the private IPs of LoadBalancer's backend pool GetBackendPrivateIPs(clusterName string, service *v1.Service, lb *network.LoadBalancer) ([]string, []string) @@ -69,10 +70,23 @@ func (bc *backendPoolTypeNodeIPConfig) EnsureHostsInPool(service *v1.Service, no return bc.VMSet.EnsureHostsInPool(service, nodes, backendPoolID, vmSetName) } +func isLBBackendPoolsExisting(lbBackendPoolNames map[bool]string, bpName *string) (found, isIPv6 bool) { + if strings.EqualFold(pointer.StringDeref(bpName, ""), lbBackendPoolNames[consts.IPVersionIPv4]) { + isIPv6 = false + found = true + } + if strings.EqualFold(pointer.StringDeref(bpName, ""), lbBackendPoolNames[consts.IPVersionIPv6]) { + isIPv6 = true + found = true + } + return found, isIPv6 +} + func (bc *backendPoolTypeNodeIPConfig) CleanupVMSetFromBackendPoolByCondition(slb *network.LoadBalancer, service *v1.Service, nodes []*v1.Node, clusterName string, shouldRemoveVMSetFromSLB func(string) bool) (*network.LoadBalancer, error) { - lbBackendPoolName := getBackendPoolName(clusterName, service) - lbResourceGroup := bc.getLoadBalancerResourceGroup() - lbBackendPoolID := bc.getBackendPoolID(to.String(slb.Name), lbResourceGroup, lbBackendPoolName) + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + + lbBackendPoolNames := getBackendPoolNames(clusterName) + lbBackendPoolIDs := bc.getBackendPoolIDs(clusterName, pointer.StringDeref(slb.Name, "")) newBackendPools := make([]network.BackendAddressPool, 0) if slb.LoadBalancerPropertiesFormat != nil && slb.BackendAddressPools != nil { newBackendPools = *slb.BackendAddressPools @@ -80,12 +94,12 @@ func (bc *backendPoolTypeNodeIPConfig) CleanupVMSetFromBackendPoolByCondition(sl vmSetNameToBackendIPConfigurationsToBeDeleted := make(map[string][]network.InterfaceIPConfiguration) for j, bp := range newBackendPools { - if strings.EqualFold(to.String(bp.Name), lbBackendPoolName) { - klog.V(2).Infof("bc.CleanupVMSetFromBackendPoolByCondition: checking the backend pool %s from standard load balancer %s", to.String(bp.Name), to.String(slb.Name)) + if found, _ := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name); found { + klog.V(2).Infof("bc.CleanupVMSetFromBackendPoolByCondition: checking the backend pool %s from standard load balancer %s", pointer.StringDeref(bp.Name, ""), pointer.StringDeref(slb.Name, "")) if bp.BackendAddressPoolPropertiesFormat != nil && bp.BackendIPConfigurations != nil { for i := len(*bp.BackendIPConfigurations) - 1; i >= 0; i-- { ipConf := (*bp.BackendIPConfigurations)[i] - ipConfigID := to.String(ipConf.ID) + ipConfigID := pointer.StringDeref(ipConf.ID, "") _, vmSetName, err := bc.VMSet.GetNodeNameByIPConfigurationID(ipConfigID) if err != nil && !errors.Is(err, cloudprovider.InstanceNotFound) { return nil, err @@ -95,7 +109,7 @@ func (bc *backendPoolTypeNodeIPConfig) CleanupVMSetFromBackendPoolByCondition(sl klog.V(2).Infof("bc.CleanupVMSetFromBackendPoolByCondition: found unwanted vmSet %s, decouple it from the LB", vmSetName) // construct a backendPool that only contains the IP config of the node to be deleted interfaceIPConfigToBeDeleted := network.InterfaceIPConfiguration{ - ID: to.StringPtr(ipConfigID), + ID: pointer.String(ipConfigID), } vmSetNameToBackendIPConfigurationsToBeDeleted[vmSetName] = append(vmSetNameToBackendIPConfigurationsToBeDeleted[vmSetName], interfaceIPConfigToBeDeleted) *bp.BackendIPConfigurations = append((*bp.BackendIPConfigurations)[:i], (*bp.BackendIPConfigurations)[i+1:]...) @@ -104,29 +118,38 @@ func (bc *backendPoolTypeNodeIPConfig) CleanupVMSetFromBackendPoolByCondition(sl } newBackendPools[j] = bp - break } } for vmSetName := range vmSetNameToBackendIPConfigurationsToBeDeleted { + shouldRefreshLB := false backendIPConfigurationsToBeDeleted := vmSetNameToBackendIPConfigurationsToBeDeleted[vmSetName] - backendpoolToBeDeleted := &[]network.BackendAddressPool{ - { - ID: to.StringPtr(lbBackendPoolID), + backendpoolToBeDeleted := []network.BackendAddressPool{} + lbBackendPoolIDsSlice := []string{} + findBackendpoolToBeDeleted := func(isIPv6 bool) { + lbBackendPoolIDsSlice = append(lbBackendPoolIDsSlice, lbBackendPoolIDs[isIPv6]) + backendpoolToBeDeleted = append(backendpoolToBeDeleted, network.BackendAddressPool{ + ID: pointer.String(lbBackendPoolIDs[isIPv6]), BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ BackendIPConfigurations: &backendIPConfigurationsToBeDeleted, }, - }, + }) + } + if v4Enabled { + findBackendpoolToBeDeleted(consts.IPVersionIPv4) + } + if v6Enabled { + findBackendpoolToBeDeleted(consts.IPVersionIPv6) } // decouple the backendPool from the node - shouldRefreshLB, err := bc.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolID, vmSetName, backendpoolToBeDeleted, true) + shouldRefreshLB, err := bc.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolIDsSlice, vmSetName, &backendpoolToBeDeleted, true) if err != nil { return nil, err } if shouldRefreshLB { - slb, _, err = bc.getAzureLoadBalancer(to.String(slb.Name), cache.CacheReadTypeForceRefresh) + slb, _, err := bc.getAzureLoadBalancer(pointer.StringDeref(slb.Name, ""), cache.CacheReadTypeForceRefresh) if err != nil { - return nil, fmt.Errorf("bc.CleanupVMSetFromBackendPoolByCondition: failed to get load balancer %s, err: %w", to.String(slb.Name), err) + return nil, fmt.Errorf("bc.CleanupVMSetFromBackendPoolByCondition: failed to get load balancer %s, err: %w", pointer.StringDeref(slb.Name, ""), err) } } } @@ -134,29 +157,33 @@ func (bc *backendPoolTypeNodeIPConfig) CleanupVMSetFromBackendPoolByCondition(sl return slb, nil } -func (bc *backendPoolTypeNodeIPConfig) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, error) { +func (bc *backendPoolTypeNodeIPConfig) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, bool, error) { var newBackendPools []network.BackendAddressPool var err error if lb.BackendAddressPools != nil { newBackendPools = *lb.BackendAddressPools } - foundBackendPool := false - changed := false - shouldRefreshLB := false + var changed, shouldRefreshLB, isOperationSucceeded, isMigration bool + foundBackendPools := map[bool]bool{} lbName := *lb.Name serviceName := getServiceName(service) - lbBackendPoolName := getBackendPoolName(clusterName, service) - lbBackendPoolID := bc.getBackendPoolID(lbName, bc.getLoadBalancerResourceGroup(), lbBackendPoolName) + lbBackendPoolNames := getBackendPoolNames(clusterName) + lbBackendPoolIDs := bc.getBackendPoolIDs(clusterName, lbName) vmSetName := bc.mapLoadBalancerNameToVMSet(lbName, clusterName) isBackendPoolPreConfigured := bc.isBackendPoolPreConfigured(service) + mc := metrics.NewMetricContext("services", "migrate_to_nic_based_backend_pool", bc.ResourceGroup, bc.getNetworkResourceSubscriptionID(), serviceName) + + backendpoolToBeDeleted := []network.BackendAddressPool{} + lbBackendPoolIDsSlice := []string{} for i := len(newBackendPools) - 1; i >= 0; i-- { bp := newBackendPools[i] - if strings.EqualFold(*bp.Name, lbBackendPoolName) { + found, isIPv6 := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name) + if found { klog.V(10).Infof("bc.ReconcileBackendPools for service (%s): lb backendpool - found wanted backendpool. not adding anything", serviceName) - foundBackendPool = true + foundBackendPools[isBackendPoolIPv6(pointer.StringDeref(bp.Name, ""))] = true // Don't bother to remove unused nodeIPConfiguration if backend pool is pre configured if isBackendPoolPreConfigured { @@ -169,10 +196,12 @@ func (bc *backendPoolTypeNodeIPConfig) ReconcileBackendPools(clusterName string, if bp.BackendAddressPoolPropertiesFormat != nil && bp.LoadBalancerBackendAddresses != nil && len(*bp.LoadBalancerBackendAddresses) > 0 { - if removeNodeIPAddressesFromBackendPool(bp, []string{}, true) { + if removeNodeIPAddressesFromBackendPool(bp, []string{}, true, false) { + isMigration = true + bp.VirtualNetwork = nil if err := bc.CreateOrUpdateLBBackendPool(lbName, bp); err != nil { - klog.Errorf("bc.ReconcileBackendPools for service (%s): failed to cleanup IP based backend pool %s: %s", serviceName, lbBackendPoolName, err.Error()) - return false, false, fmt.Errorf("bc.ReconcileBackendPools for service (%s): failed to cleanup IP based backend pool %s: %w", serviceName, lbBackendPoolName, err) + klog.Errorf("bc.ReconcileBackendPools for service (%s): failed to cleanup IP based backend pool %s: %s", serviceName, lbBackendPoolNames[isIPv6], err.Error()) + return false, false, false, fmt.Errorf("bc.ReconcileBackendPools for service (%s): failed to cleanup IP based backend pool %s: %w", serviceName, lbBackendPoolNames[isIPv6], err) } newBackendPools[i] = bp lb.BackendAddressPools = &newBackendPools @@ -180,17 +209,17 @@ func (bc *backendPoolTypeNodeIPConfig) ReconcileBackendPools(clusterName string, } } - var backendIPConfigurationsToBeDeleted []network.InterfaceIPConfiguration + var backendIPConfigurationsToBeDeleted, bipConfigNotFound, bipConfigExclude []network.InterfaceIPConfiguration if bp.BackendAddressPoolPropertiesFormat != nil && bp.BackendIPConfigurations != nil { for _, ipConf := range *bp.BackendIPConfigurations { - ipConfID := to.String(ipConf.ID) + ipConfID := pointer.StringDeref(ipConf.ID, "") nodeName, _, err := bc.VMSet.GetNodeNameByIPConfigurationID(ipConfID) if err != nil { if errors.Is(err, cloudprovider.InstanceNotFound) { klog.V(2).Infof("bc.ReconcileBackendPools for service (%s): vm not found for ipConfID %s", serviceName, ipConfID) - backendIPConfigurationsToBeDeleted = append(backendIPConfigurationsToBeDeleted, ipConf) + bipConfigNotFound = append(bipConfigNotFound, ipConf) } else { - return false, false, err + return false, false, false, err } } @@ -201,68 +230,123 @@ func (bc *backendPoolTypeNodeIPConfig) ReconcileBackendPools(clusterName string, shouldExcludeLoadBalancer, err := bc.ShouldNodeExcludedFromLoadBalancer(nodeName) if err != nil { klog.Errorf("bc.ReconcileBackendPools: ShouldNodeExcludedFromLoadBalancer(%s) failed with error: %v", nodeName, err) - return false, false, err + return false, false, false, err } if shouldExcludeLoadBalancer { klog.V(2).Infof("bc.ReconcileBackendPools for service (%s): lb backendpool - found unwanted node %s, decouple it from the LB %s", serviceName, nodeName, lbName) // construct a backendPool that only contains the IP config of the node to be deleted - backendIPConfigurationsToBeDeleted = append(backendIPConfigurationsToBeDeleted, network.InterfaceIPConfiguration{ID: to.StringPtr(ipConfID)}) + bipConfigExclude = append(bipConfigExclude, network.InterfaceIPConfiguration{ID: pointer.String(ipConfID)}) } } } + backendIPConfigurationsToBeDeleted = getBackendIPConfigurationsToBeDeleted(bp, bipConfigNotFound, bipConfigExclude) if len(backendIPConfigurationsToBeDeleted) > 0 { - backendpoolToBeDeleted := &[]network.BackendAddressPool{ - { - ID: to.StringPtr(lbBackendPoolID), - BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ - BackendIPConfigurations: &backendIPConfigurationsToBeDeleted, - }, + backendpoolToBeDeleted = append(backendpoolToBeDeleted, network.BackendAddressPool{ + ID: pointer.String(lbBackendPoolIDs[isIPv6]), + BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ + BackendIPConfigurations: &backendIPConfigurationsToBeDeleted, }, - } - // decouple the backendPool from the node - updated, err := bc.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolID, vmSetName, backendpoolToBeDeleted, false) - if err != nil { - return false, false, err - } - if updated { - shouldRefreshLB = true - } + }) + lbBackendPoolIDsSlice = append(lbBackendPoolIDsSlice, lbBackendPoolIDs[isIPv6]) } - break } else { - klog.V(10).Infof("bc.ReconcileBackendPools for service (%s): lb backendpool - found unmanaged backendpool %s", serviceName, *bp.Name) + klog.V(10).Infof("bc.ReconcileBackendPools for service (%s): lb backendpool - found unmanaged backendpool %s", serviceName, pointer.StringDeref(bp.Name, "")) + } + } + if len(backendpoolToBeDeleted) > 0 { + // decouple the backendPool from the node + updated, err := bc.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolIDsSlice, vmSetName, &backendpoolToBeDeleted, false) + if err != nil { + return false, false, false, err + } + if updated { + shouldRefreshLB = true } } if shouldRefreshLB { lb, _, err = bc.getAzureLoadBalancer(lbName, cache.CacheReadTypeForceRefresh) if err != nil { - return false, false, fmt.Errorf("bc.ReconcileBackendPools for service (%s): failed to get loadbalancer %s: %w", serviceName, lbName, err) + return false, false, false, fmt.Errorf("bc.ReconcileBackendPools for service (%s): failed to get loadbalancer %s: %w", serviceName, lbName, err) } } - if !foundBackendPool { - isBackendPoolPreConfigured = newBackendPool(lb, isBackendPoolPreConfigured, bc.PreConfiguredBackendPoolLoadBalancerTypes, getServiceName(service), getBackendPoolName(clusterName, service)) + for _, ipFamily := range service.Spec.IPFamilies { + if foundBackendPools[ipFamily == v1.IPv6Protocol] { + continue + } + isBackendPoolPreConfigured = newBackendPool(lb, isBackendPoolPreConfigured, + bc.PreConfiguredBackendPoolLoadBalancerTypes, serviceName, + lbBackendPoolNames[ipFamily == v1.IPv6Protocol]) changed = true } - return isBackendPoolPreConfigured, changed, err + if isMigration { + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded) + }() + } + + isOperationSucceeded = true + return isBackendPoolPreConfigured, changed, false, err +} + +func getBackendIPConfigurationsToBeDeleted( + bp network.BackendAddressPool, + bipConfigNotFound, bipConfigExclude []network.InterfaceIPConfiguration, +) []network.InterfaceIPConfiguration { + if bp.BackendAddressPoolPropertiesFormat == nil || bp.BackendIPConfigurations == nil { + return []network.InterfaceIPConfiguration{} + } + + bipConfigNotFoundIDSet := sets.New[string]() + bipConfigExcludeIDSet := sets.New[string]() + for _, ipConfig := range bipConfigNotFound { + bipConfigNotFoundIDSet.Insert(pointer.StringDeref(ipConfig.ID, "")) + } + for _, ipConfig := range bipConfigExclude { + bipConfigExcludeIDSet.Insert(pointer.StringDeref(ipConfig.ID, "")) + } + + var bipConfigToBeDeleted []network.InterfaceIPConfiguration + ipConfigs := *bp.BackendIPConfigurations + for i := len(ipConfigs) - 1; i >= 0; i-- { + ipConfigID := pointer.StringDeref(ipConfigs[i].ID, "") + if bipConfigNotFoundIDSet.Has(ipConfigID) { + bipConfigToBeDeleted = append(bipConfigToBeDeleted, ipConfigs[i]) + ipConfigs = append(ipConfigs[:i], ipConfigs[i+1:]...) + } + } + + var unwantedIPConfigs []network.InterfaceIPConfiguration + for _, ipConfig := range ipConfigs { + ipConfigID := pointer.StringDeref(ipConfig.ID, "") + if bipConfigExcludeIDSet.Has(ipConfigID) { + unwantedIPConfigs = append(unwantedIPConfigs, ipConfig) + } + } + if len(unwantedIPConfigs) == len(ipConfigs) { + klog.V(2).Info("getBackendIPConfigurationsToBeDeleted: the pool is empty or will be empty after removing the unwanted IP addresses, skipping the removal") + return bipConfigToBeDeleted + } + return append(bipConfigToBeDeleted, unwantedIPConfigs...) } func (bc *backendPoolTypeNodeIPConfig) GetBackendPrivateIPs(clusterName string, service *v1.Service, lb *network.LoadBalancer) ([]string, []string) { serviceName := getServiceName(service) - lbBackendPoolName := getBackendPoolName(clusterName, service) + lbBackendPoolNames := getBackendPoolNames(clusterName) if lb.LoadBalancerPropertiesFormat == nil || lb.LoadBalancerPropertiesFormat.BackendAddressPools == nil { return nil, nil } - backendPrivateIPv4s, backendPrivateIPv6s := sets.NewString(), sets.NewString() + backendPrivateIPv4s, backendPrivateIPv6s := sets.New[string](), sets.New[string]() for _, bp := range *lb.BackendAddressPools { - if strings.EqualFold(to.String(bp.Name), lbBackendPoolName) { - klog.V(10).Infof("bc.GetBackendPrivateIPs for service (%s): found wanted backendpool %s", serviceName, to.String(bp.Name)) + found, _ := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name) + if found { + klog.V(10).Infof("bc.GetBackendPrivateIPs for service (%s): found wanted backendpool %s", serviceName, pointer.StringDeref(bp.Name, "")) if bp.BackendAddressPoolPropertiesFormat != nil && bp.BackendIPConfigurations != nil { for _, backendIPConfig := range *bp.BackendIPConfigurations { - ipConfigID := to.String(backendIPConfig.ID) + ipConfigID := pointer.StringDeref(backendIPConfig.ID, "") nodeName, _, err := bc.VMSet.GetNodeNameByIPConfigurationID(ipConfigID) if err != nil { klog.Errorf("bc.GetBackendPrivateIPs for service (%s): GetNodeNameByIPConfigurationID failed with error: %v", serviceName, err) @@ -273,7 +357,7 @@ func (bc *backendPoolTypeNodeIPConfig) GetBackendPrivateIPs(clusterName string, klog.Warningf("bc.GetBackendPrivateIPs for service (%s): failed to get private IPs of node %s", serviceName, nodeName) continue } - privateIPs := privateIPsSet.List() + privateIPs := privateIPsSet.UnsortedList() for _, ip := range privateIPs { klog.V(2).Infof("bc.GetBackendPrivateIPs for service (%s): lb backendpool - found private IPs %s of node %s", serviceName, ip, nodeName) if utilnet.IsIPv4String(ip) { @@ -285,10 +369,10 @@ func (bc *backendPoolTypeNodeIPConfig) GetBackendPrivateIPs(clusterName string, } } } else { - klog.V(10).Infof("bc.GetBackendPrivateIPs for service (%s): found unmanaged backendpool %s", serviceName, to.String(bp.Name)) + klog.V(10).Infof("bc.GetBackendPrivateIPs for service (%s): found unmanaged backendpool %s", serviceName, pointer.StringDeref(bp.Name, "")) } } - return backendPrivateIPv4s.List(), backendPrivateIPv6s.List() + return backendPrivateIPv4s.UnsortedList(), backendPrivateIPv6s.UnsortedList() } type backendPoolTypeNodeIP struct { @@ -300,86 +384,116 @@ func newBackendPoolTypeNodeIP(c *Cloud) BackendPool { } func (bi *backendPoolTypeNodeIP) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, backendPoolID, vmSetName, clusterName, lbName string, backendPool network.BackendAddressPool) error { + isIPv6 := isBackendPoolIPv6(pointer.StringDeref(backendPool.Name, "")) vnetResourceGroup := bi.ResourceGroup if len(bi.VnetResourceGroup) > 0 { vnetResourceGroup = bi.VnetResourceGroup } vnetID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s", bi.SubscriptionID, vnetResourceGroup, bi.VnetName) - changed := false - numOfAdd := 0 - lbBackendPoolName := getBackendPoolName(clusterName, service) - if strings.EqualFold(to.String(backendPool.Name), lbBackendPoolName) && + var ( + changed bool + numOfAdd, numOfDelete int + activeNodes sets.Set[string] + err error + ) + if bi.useMultipleStandardLoadBalancers() { + if !isLocalService(service) { + activeNodes = bi.getActiveNodesByLoadBalancerName(lbName) + } else { + key := strings.ToLower(getServiceName(service)) + si, found := bi.getLocalServiceInfo(key) + if found && !strings.EqualFold(si.lbName, lbName) { + klog.V(4).InfoS("EnsureHostsInPool: the service is not on the load balancer", + "service", key, + "previous load balancer", lbName, + "current load balancer", si.lbName) + return nil + } + activeNodes, err = bi.getLocalServiceEndpointsNodeNames(service) + if err != nil { + return err + } + } + if activeNodes == nil { + activeNodes = sets.New[string]() + } + } + + lbBackendPoolName := bi.getBackendPoolNameForService(service, clusterName, isIPv6) + if strings.EqualFold(pointer.StringDeref(backendPool.Name, ""), lbBackendPoolName) && backendPool.BackendAddressPoolPropertiesFormat != nil { + backendPool.VirtualNetwork = &network.SubResource{ + ID: &vnetID, + } + if backendPool.LoadBalancerBackendAddresses == nil { lbBackendPoolAddresses := make([]network.LoadBalancerBackendAddress, 0) backendPool.LoadBalancerBackendAddresses = &lbBackendPoolAddresses } - existingIPs := sets.NewString() + existingIPs := sets.New[string]() for _, loadBalancerBackendAddress := range *backendPool.LoadBalancerBackendAddresses { if loadBalancerBackendAddress.LoadBalancerBackendAddressPropertiesFormat != nil && loadBalancerBackendAddress.IPAddress != nil { - klog.V(4).Infof("bi.EnsureHostsInPool: found existing IP %s in the backend pool %s", to.String(loadBalancerBackendAddress.IPAddress), lbBackendPoolName) - existingIPs.Insert(to.String(loadBalancerBackendAddress.IPAddress)) + klog.V(4).Infof("bi.EnsureHostsInPool: found existing IP %s in the backend pool %s", pointer.StringDeref(loadBalancerBackendAddress.IPAddress, ""), lbBackendPoolName) + existingIPs.Insert(pointer.StringDeref(loadBalancerBackendAddress.IPAddress, "")) } } + var nodeIPsToBeAdded []string + nodePrivateIPsSet := sets.New[string]() for _, node := range nodes { if isControlPlaneNode(node) { klog.V(4).Infof("bi.EnsureHostsInPool: skipping control plane node %s", node.Name) continue } - var err error - shouldSkip := false - useSingleSLB := strings.EqualFold(bi.LoadBalancerSku, consts.LoadBalancerSkuStandard) && !bi.EnableMultipleStandardLoadBalancers - if !useSingleSLB { - vmSetName, err = bi.VMSet.GetNodeVMSetName(node) - if err != nil { - klog.Errorf("bi.EnsureHostsInPool: failed to get vmSet name by node name: %s", err.Error()) - return err - } - - if !strings.EqualFold(vmSetName, bi.mapLoadBalancerNameToVMSet(lbName, clusterName)) { - shouldSkip = true + privateIP := getNodePrivateIPAddress(node, isIPv6) + nodePrivateIPsSet.Insert(privateIP) - lbNamePrefix := strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix) - if strings.EqualFold(lbNamePrefix, clusterName) && - strings.EqualFold(bi.LoadBalancerSku, consts.LoadBalancerSkuStandard) && - bi.getVMSetNamesSharingPrimarySLB().Has(vmSetName) { - klog.V(4).Infof("bi.EnsureHostsInPool: the node %s in VMSet %s is supposed to share the primary SLB", node.Name, vmSetName) - shouldSkip = false - } + if bi.useMultipleStandardLoadBalancers() { + if activeNodes == nil || !activeNodes.Has(node.Name) { + klog.V(4).Infof("bi.EnsureHostsInPool: node %s should not be in load balancer %q", node.Name, lbName) + continue } } - if shouldSkip { - klog.V(4).Infof("bi.EnsureHostsInPool: skipping attaching node %s to lb %s, because the vmSet of the node is %s", node.Name, lbName, vmSetName) - continue - } - privateIP := getNodePrivateIPAddress(service, node) if !existingIPs.Has(privateIP) { name := node.Name - if utilnet.IsIPv6String(privateIP) { - name = fmt.Sprintf("%s-ipv6", name) - } - klog.V(6).Infof("bi.EnsureHostsInPool: adding %s with ip address %s", name, privateIP) - *backendPool.LoadBalancerBackendAddresses = append(*backendPool.LoadBalancerBackendAddresses, network.LoadBalancerBackendAddress{ - Name: to.StringPtr(name), - LoadBalancerBackendAddressPropertiesFormat: &network.LoadBalancerBackendAddressPropertiesFormat{ - IPAddress: to.StringPtr(privateIP), - VirtualNetwork: &network.SubResource{ID: to.StringPtr(vnetID)}, - }, - }) + nodeIPsToBeAdded = append(nodeIPsToBeAdded, privateIP) numOfAdd++ + } + } + changed = bi.addNodeIPAddressesToBackendPool(&backendPool, nodeIPsToBeAdded) + + var nodeIPsToBeDeleted []string + for _, loadBalancerBackendAddress := range *backendPool.LoadBalancerBackendAddresses { + ip := pointer.StringDeref(loadBalancerBackendAddress.IPAddress, "") + if !nodePrivateIPsSet.Has(ip) { + klog.V(4).Infof("bi.EnsureHostsInPool: removing IP %s because it is deleted or should be excluded", ip) + nodeIPsToBeDeleted = append(nodeIPsToBeDeleted, ip) changed = true + numOfDelete++ + } else if bi.useMultipleStandardLoadBalancers() && activeNodes != nil { + nodeName, ok := bi.nodePrivateIPToNodeNameMap[ip] + if !ok { + klog.Warningf("bi.EnsureHostsInPool: cannot find node name for private IP %s", ip) + continue + } + if !activeNodes.Has(nodeName) { + klog.V(4).Infof("bi.EnsureHostsInPool: removing IP %s because it should not be in this load balancer", ip) + nodeIPsToBeDeleted = append(nodeIPsToBeDeleted, ip) + changed = true + numOfDelete++ + } } } + removeNodeIPAddressesFromBackendPool(backendPool, nodeIPsToBeDeleted, false, bi.useMultipleStandardLoadBalancers()) } if changed { - klog.V(2).Infof("bi.EnsureHostsInPool: updating backend pool %s of load balancer %s to add %d nodes", lbBackendPoolName, lbName, numOfAdd) + klog.V(2).Infof("bi.EnsureHostsInPool: updating backend pool %s of load balancer %s to add %d nodes and remove %d nodes", lbBackendPoolName, lbName, numOfAdd, numOfDelete) if err := bi.CreateOrUpdateLBBackendPool(lbName, backendPool); err != nil { return fmt.Errorf("bi.EnsureHostsInPool: failed to update backend pool %s: %w", lbBackendPoolName, err) } @@ -389,17 +503,18 @@ func (bi *backendPoolTypeNodeIP) EnsureHostsInPool(service *v1.Service, nodes [] } func (bi *backendPoolTypeNodeIP) CleanupVMSetFromBackendPoolByCondition(slb *network.LoadBalancer, service *v1.Service, nodes []*v1.Node, clusterName string, shouldRemoveVMSetFromSLB func(string) bool) (*network.LoadBalancer, error) { - lbBackendPoolName := getBackendPoolName(clusterName, service) + lbBackendPoolNames := getBackendPoolNames(clusterName) newBackendPools := make([]network.BackendAddressPool, 0) if slb.LoadBalancerPropertiesFormat != nil && slb.BackendAddressPools != nil { newBackendPools = *slb.BackendAddressPools } - var updatedPrivateIPs bool + updatedPrivateIPs := map[bool]bool{} for j, bp := range newBackendPools { - if strings.EqualFold(to.String(bp.Name), lbBackendPoolName) { - klog.V(2).Infof("bi.CleanupVMSetFromBackendPoolByCondition: checking the backend pool %s from standard load balancer %s", to.String(bp.Name), to.String(slb.Name)) - vmIPsToBeDeleted := sets.NewString() + found, isIPv6 := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name) + if found { + klog.V(2).Infof("bi.CleanupVMSetFromBackendPoolByCondition: checking the backend pool %s from standard load balancer %s", pointer.StringDeref(bp.Name, ""), pointer.StringDeref(slb.Name, "")) + vmIPsToBeDeleted := sets.New[string]() for _, node := range nodes { vmSetName, err := bi.VMSet.GetNodeVMSetName(node) if err != nil { @@ -407,8 +522,8 @@ func (bi *backendPoolTypeNodeIP) CleanupVMSetFromBackendPoolByCondition(slb *net } if shouldRemoveVMSetFromSLB(vmSetName) { - privateIP := getNodePrivateIPAddress(service, node) - klog.V(4).Infof("bi.CleanupVMSetFromBackendPoolByCondition: removing ip %s from the backend pool %s", privateIP, lbBackendPoolName) + privateIP := getNodePrivateIPAddress(node, isIPv6) + klog.V(4).Infof("bi.CleanupVMSetFromBackendPoolByCondition: removing ip %s from the backend pool %s", privateIP, lbBackendPoolNames[isIPv6]) vmIPsToBeDeleted.Insert(privateIP) } } @@ -416,25 +531,28 @@ func (bi *backendPoolTypeNodeIP) CleanupVMSetFromBackendPoolByCondition(slb *net if bp.BackendAddressPoolPropertiesFormat != nil && bp.LoadBalancerBackendAddresses != nil { for i := len(*bp.LoadBalancerBackendAddresses) - 1; i >= 0; i-- { if (*bp.LoadBalancerBackendAddresses)[i].LoadBalancerBackendAddressPropertiesFormat != nil && - vmIPsToBeDeleted.Has(to.String((*bp.LoadBalancerBackendAddresses)[i].IPAddress)) { + vmIPsToBeDeleted.Has(pointer.StringDeref((*bp.LoadBalancerBackendAddresses)[i].IPAddress, "")) { *bp.LoadBalancerBackendAddresses = append((*bp.LoadBalancerBackendAddresses)[:i], (*bp.LoadBalancerBackendAddresses)[i+1:]...) - updatedPrivateIPs = true + updatedPrivateIPs[isIPv6] = true } } } newBackendPools[j] = bp - break + } else { + klog.V(10).Infof("bi.CleanupVMSetFromBackendPoolByCondition: found unmanaged backendpool %s from standard load balancer %q", pointer.StringDeref(bp.Name, ""), pointer.StringDeref(slb.Name, "")) } + } - if updatedPrivateIPs { - klog.V(2).Infof("bi.CleanupVMSetFromBackendPoolByCondition: updating lb %s since there are private IP updates", to.String(slb.Name)) + for isIPv6 := range updatedPrivateIPs { + klog.V(2).Infof("bi.CleanupVMSetFromBackendPoolByCondition: updating lb %s since there are private IP updates", pointer.StringDeref(slb.Name, "")) slb.BackendAddressPools = &newBackendPools for _, backendAddressPool := range *slb.BackendAddressPools { - if strings.EqualFold(lbBackendPoolName, to.String(backendAddressPool.Name)) { - if err := bi.CreateOrUpdateLBBackendPool(to.String(slb.Name), backendAddressPool); err != nil { - return nil, fmt.Errorf("bi.CleanupVMSetFromBackendPoolByCondition: failed to create or update backend pool %s: %w", lbBackendPoolName, err) + if strings.EqualFold(lbBackendPoolNames[isIPv6], pointer.StringDeref(backendAddressPool.Name, "")) { + if err := bi.CreateOrUpdateLBBackendPool(pointer.StringDeref(slb.Name, ""), backendAddressPool); err != nil { + return nil, fmt.Errorf("bi.CleanupVMSetFromBackendPoolByCondition: "+ + "failed to create or update backend pool %s: %w", lbBackendPoolNames[isIPv6], err) } } } @@ -443,93 +561,182 @@ func (bi *backendPoolTypeNodeIP) CleanupVMSetFromBackendPoolByCondition(slb *net return slb, nil } -func (bi *backendPoolTypeNodeIP) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, error) { +func (bi *backendPoolTypeNodeIP) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, bool, error) { var newBackendPools []network.BackendAddressPool if lb.BackendAddressPools != nil { newBackendPools = *lb.BackendAddressPools } - foundBackendPool := false - changed := false - shouldRefreshLB := false + var changed, shouldRefreshLB, isOperationSucceeded, isMigration, updated bool + foundBackendPools := map[bool]bool{} lbName := *lb.Name serviceName := getServiceName(service) - lbBackendPoolName := getBackendPoolName(clusterName, service) + lbBackendPoolNames := bi.getBackendPoolNamesForService(service, clusterName) vmSetName := bi.mapLoadBalancerNameToVMSet(lbName, clusterName) - lbBackendPoolID := bi.getBackendPoolID(to.String(lb.Name), bi.getLoadBalancerResourceGroup(), getBackendPoolName(clusterName, service)) + lbBackendPoolIDs := bi.getBackendPoolIDsForService(service, clusterName, pointer.StringDeref(lb.Name, "")) isBackendPoolPreConfigured := bi.isBackendPoolPreConfigured(service) - var err error + mc := metrics.NewMetricContext("services", "migrate_to_ip_based_backend_pool", bi.ResourceGroup, bi.getNetworkResourceSubscriptionID(), serviceName) + + var ( + err error + bpIdxes []int + lbBackendPoolIDsSlice []string + ) + nicsCountMap := make(map[string]int) for i := len(newBackendPools) - 1; i >= 0; i-- { bp := newBackendPools[i] - if strings.EqualFold(*bp.Name, lbBackendPoolName) { - klog.V(10).Infof("bi.ReconcileBackendPools for service (%s): found wanted backendpool. not adding anything", serviceName) - foundBackendPool = true + found, isIPv6 := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name) + if found { + bpIdxes = append(bpIdxes, i) + klog.V(10).Infof("bi.ReconcileBackendPools for service (%s): found wanted backendpool. Not adding anything", serviceName) + foundBackendPools[isIPv6] = true + lbBackendPoolIDsSlice = append(lbBackendPoolIDsSlice, lbBackendPoolIDs[isIPv6]) + + if nicsCount := countNICsOnBackendPool(bp); nicsCount > 0 { + nicsCountMap[pointer.StringDeref(bp.Name, "")] = nicsCount + klog.V(4).Infof( + "bi.ReconcileBackendPools for service(%s): found NIC-based backendpool %s with %d NICs, will migrate to IP-based", + serviceName, + pointer.StringDeref(bp.Name, ""), + nicsCount, + ) + isMigration = true + } + } else { + klog.V(10).Infof("bi.ReconcileBackendPools for service (%s): found unmanaged backendpool %s", serviceName, *bp.Name) + } + } - // Don't bother to remove unused nodeIP if backend pool is pre configured - if isBackendPoolPreConfigured { - break + // Don't bother to remove unused nodeIP if backend pool is pre configured + if !isBackendPoolPreConfigured { + // If the LB backend pool type is configured from nodeIPConfiguration + // to nodeIP, we need to decouple the VM NICs from the LB + // before attaching nodeIPs/podIPs to the LB backend pool. + // If the migration API is enabled, we use the migration API to decouple + // the VM NICs from the LB. Then we manually decouple the VMSS + // and its VMs from the LB by EnsureBackendPoolDeleted. These manual operations + // cannot be omitted because we use the VMSS manual upgrade policy. + // If the migration API is not enabled, we manually decouple the VM NICs and + // the VMSS from the LB by EnsureBackendPoolDeleted. If no NIC-based backend + // pool is found (it is not a migration scenario), EnsureBackendPoolDeleted would be a no-op. + if isMigration && bi.EnableMigrateToIPBasedBackendPoolAPI { + var backendPoolNames []string + for _, id := range lbBackendPoolIDsSlice { + name, err := getLBNameFromBackendPoolID(id) + if err != nil { + klog.Errorf("bi.ReconcileBackendPools for service (%s): failed to get LB name from backend pool ID: %s", serviceName, err.Error()) + return false, false, false, err + } + backendPoolNames = append(backendPoolNames, name) } - // If the LB backend pool type is configured from nodeIPConfiguration - // to nodeIP, we need to decouple the VM NICs from the LB - // before attaching nodeIPs/podIPs to the LB backend pool. - klog.V(2).Infof("bi.ReconcileBackendPools for service (%s) and vmSet (%s): ensuring the LB is decoupled from the VMSet", serviceName, vmSetName) - shouldRefreshLB, err = bi.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolID, vmSetName, lb.BackendAddressPools, true) - if err != nil { - klog.Errorf("bi.ReconcileBackendPools for service (%s): failed to EnsureBackendPoolDeleted: %s", serviceName, err.Error()) - return false, false, err + if err := bi.MigrateToIPBasedBackendPoolAndWaitForCompletion(lbName, backendPoolNames, nicsCountMap); err != nil { + backendPoolNamesStr := strings.Join(backendPoolNames, ",") + klog.Errorf("Failed to migrate to IP based backend pool for lb %s, backend pool %s: %s", lbName, backendPoolNamesStr, err.Error()) + return false, false, false, err } + } + // EnsureBackendPoolDeleted is useful in the following scenarios: + // 1. Migrate from NIC-based to IP-based backend pool if the migration + // API is not enabled. + // 2. Migrate from NIC-based to IP-based backend pool when the migration + // API is enabled. This is needed because since we use the manual upgrade + // policy on VMSS so the migration API will not change the VMSS and VMSS + // VMs during the migration. + // 3. Decouple vmss from the lb if the backend pool is empty when using + // ip-based LB. Ref: https://github.com/kubernetes-sigs/cloud-provider-azure/pull/2829. + klog.V(2).Infof("bi.ReconcileBackendPools for service (%s) and vmSet (%s): ensuring the LB is decoupled from the VMSet", serviceName, vmSetName) + shouldRefreshLB, err = bi.VMSet.EnsureBackendPoolDeleted(service, lbBackendPoolIDsSlice, vmSetName, lb.BackendAddressPools, true) + if err != nil { + klog.Errorf("bi.ReconcileBackendPools for service (%s): failed to EnsureBackendPoolDeleted: %s", serviceName, err.Error()) + return false, false, false, err + } + + for _, i := range bpIdxes { + bp := newBackendPools[i] var nodeIPAddressesToBeDeleted []string for nodeName := range bi.excludeLoadBalancerNodes { for ip := range bi.nodePrivateIPs[nodeName] { - klog.V(2).Infof("bi.ReconcileBackendPools for service (%s): found unwanted node private IP %s, decoupling it from the LB %s", serviceName, ip, lbName) + klog.V(2).Infof("bi.ReconcileBackendPools for service (%s): found unwanted node private IP %s, decouple it from the LB %s", serviceName, ip, lbName) nodeIPAddressesToBeDeleted = append(nodeIPAddressesToBeDeleted, ip) } } if len(nodeIPAddressesToBeDeleted) > 0 { - updated := removeNodeIPAddressesFromBackendPool(bp, nodeIPAddressesToBeDeleted, false) - if updated { - (*lb.BackendAddressPools)[i] = bp - if err := bi.CreateOrUpdateLBBackendPool(lbName, bp); err != nil { - return false, false, fmt.Errorf("bi.ReconcileBackendPools for service (%s): lb backendpool - failed to update backend pool %s for load balancer %s: %w", serviceName, lbBackendPoolName, lbName, err) + if removeNodeIPAddressesFromBackendPool(bp, nodeIPAddressesToBeDeleted, false, false) { + updated = true + } + } + // delete the vnet in LoadBalancerBackendAddresses and ensure it is in the backend pool level + var vnet string + if bp.BackendAddressPoolPropertiesFormat != nil { + if bp.VirtualNetwork == nil || + pointer.StringDeref(bp.VirtualNetwork.ID, "") == "" { + if bp.LoadBalancerBackendAddresses != nil { + for _, a := range *bp.LoadBalancerBackendAddresses { + if a.LoadBalancerBackendAddressPropertiesFormat != nil && + a.VirtualNetwork != nil { + if vnet == "" { + vnet = pointer.StringDeref(a.VirtualNetwork.ID, "") + } + a.VirtualNetwork = nil + } + } + } + if vnet != "" { + bp.VirtualNetwork = &network.SubResource{ + ID: pointer.String(vnet), + } + updated = true } - shouldRefreshLB = true } } - break - } else { - klog.V(10).Infof("bi.ReconcileBackendPools for service (%s): found unmanaged backendpool %s", serviceName, *bp.Name) + + if updated { + (*lb.BackendAddressPools)[i] = bp + if err := bi.CreateOrUpdateLBBackendPool(lbName, bp); err != nil { + return false, false, false, fmt.Errorf("bi.ReconcileBackendPools for service (%s): lb backendpool - failed to update backend pool %s for load balancer %s: %w", serviceName, pointer.StringDeref(bp.Name, ""), lbName, err) + } + shouldRefreshLB = true + } } } - if shouldRefreshLB { - lb, _, err = bi.getAzureLoadBalancer(lbName, cache.CacheReadTypeForceRefresh) - if err != nil { - return false, false, fmt.Errorf("bi.ReconcileBackendPools for service (%s): failed to get load balancer %s: %w", serviceName, lbName, err) + shouldRefreshLB = shouldRefreshLB || isMigration + + for _, ipFamily := range service.Spec.IPFamilies { + if foundBackendPools[ipFamily == v1.IPv6Protocol] { + continue } + isBackendPoolPreConfigured = newBackendPool(lb, isBackendPoolPreConfigured, + bi.PreConfiguredBackendPoolLoadBalancerTypes, serviceName, + lbBackendPoolNames[ipFamily == v1.IPv6Protocol]) + changed = true } - if !foundBackendPool { - isBackendPoolPreConfigured = newBackendPool(lb, isBackendPoolPreConfigured, bi.PreConfiguredBackendPoolLoadBalancerTypes, getServiceName(service), getBackendPoolName(clusterName, service)) - changed = true + if isMigration { + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded) + }() } - return isBackendPoolPreConfigured, changed, nil + isOperationSucceeded = true + return isBackendPoolPreConfigured, changed, shouldRefreshLB, nil } func (bi *backendPoolTypeNodeIP) GetBackendPrivateIPs(clusterName string, service *v1.Service, lb *network.LoadBalancer) ([]string, []string) { serviceName := getServiceName(service) - lbBackendPoolName := getBackendPoolName(clusterName, service) + lbBackendPoolNames := bi.getBackendPoolNamesForService(service, clusterName) if lb.LoadBalancerPropertiesFormat == nil || lb.LoadBalancerPropertiesFormat.BackendAddressPools == nil { return nil, nil } - backendPrivateIPv4s, backendPrivateIPv6s := sets.NewString(), sets.NewString() + backendPrivateIPv4s, backendPrivateIPv6s := sets.New[string](), sets.New[string]() for _, bp := range *lb.BackendAddressPools { - if strings.EqualFold(to.String(bp.Name), lbBackendPoolName) { - klog.V(10).Infof("bi.GetBackendPrivateIPs for service (%s): found wanted backendpool %s", serviceName, to.String(bp.Name)) + found, _ := isLBBackendPoolsExisting(lbBackendPoolNames, bp.Name) + if found { + klog.V(10).Infof("bi.GetBackendPrivateIPs for service (%s): found wanted backendpool %s", serviceName, pointer.StringDeref(bp.Name, "")) if bp.BackendAddressPoolPropertiesFormat != nil && bp.LoadBalancerBackendAddresses != nil { for _, backendAddress := range *bp.LoadBalancerBackendAddresses { ipAddress := backendAddress.IPAddress @@ -537,7 +744,7 @@ func (bi *backendPoolTypeNodeIP) GetBackendPrivateIPs(clusterName string, servic klog.V(2).Infof("bi.GetBackendPrivateIPs for service (%s): lb backendpool - found private IP %q", serviceName, *ipAddress) if utilnet.IsIPv4String(*ipAddress) { backendPrivateIPv4s.Insert(*ipAddress) - } else { + } else if utilnet.IsIPv6String(*ipAddress) { backendPrivateIPv6s.Insert(*ipAddress) } } else { @@ -546,17 +753,18 @@ func (bi *backendPoolTypeNodeIP) GetBackendPrivateIPs(clusterName string, servic } } } else { - klog.V(10).Infof("bi.GetBackendPrivateIPs for service (%s): found unmanaged backendpool %s", serviceName, to.String(bp.Name)) + klog.V(10).Infof("bi.GetBackendPrivateIPs for service (%s): found unmanaged backendpool %s", serviceName, pointer.StringDeref(bp.Name, "")) } } - return backendPrivateIPv4s.List(), backendPrivateIPv6s.List() + return backendPrivateIPv4s.UnsortedList(), backendPrivateIPv6s.UnsortedList() } func newBackendPool(lb *network.LoadBalancer, isBackendPoolPreConfigured bool, preConfiguredBackendPoolLoadBalancerTypes, serviceName, lbBackendPoolName string) bool { if isBackendPoolPreConfigured { - klog.V(2).Infof("newBackendPool for service (%s)(true): lb backendpool - PreConfiguredBackendPoolLoadBalancerTypes %s has been set but can not find corresponding backend pool, ignoring it", + klog.V(2).Infof("newBackendPool for service (%s)(true): lb backendpool - PreConfiguredBackendPoolLoadBalancerTypes %s has been set but can not find corresponding backend pool %q, ignoring it", serviceName, - preConfiguredBackendPoolLoadBalancerTypes) + preConfiguredBackendPoolLoadBalancerTypes, + lbBackendPoolName) isBackendPoolPreConfigured = false } @@ -564,33 +772,97 @@ func newBackendPool(lb *network.LoadBalancer, isBackendPoolPreConfigured bool, p lb.BackendAddressPools = &[]network.BackendAddressPool{} } *lb.BackendAddressPools = append(*lb.BackendAddressPools, network.BackendAddressPool{ - Name: to.StringPtr(lbBackendPoolName), + Name: pointer.String(lbBackendPoolName), BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{}, }) + // Always returns false return isBackendPoolPreConfigured } -func removeNodeIPAddressesFromBackendPool(backendPool network.BackendAddressPool, nodeIPAddresses []string, removeAll bool) bool { +func (az *Cloud) addNodeIPAddressesToBackendPool(backendPool *network.BackendAddressPool, nodeIPAddresses []string) bool { + if backendPool.LoadBalancerBackendAddresses == nil { + lbBackendPoolAddresses := make([]network.LoadBalancerBackendAddress, 0) + backendPool.LoadBalancerBackendAddresses = &lbBackendPoolAddresses + } + + var changed bool + addresses := *backendPool.LoadBalancerBackendAddresses + for _, ipAddress := range nodeIPAddresses { + if !hasIPAddressInBackendPool(backendPool, ipAddress) { + name := az.nodePrivateIPToNodeNameMap[ipAddress] + klog.V(4).Infof("bi.addNodeIPAddressesToBackendPool: adding %s to the backend pool %s", ipAddress, pointer.StringDeref(backendPool.Name, "")) + addresses = append(addresses, network.LoadBalancerBackendAddress{ + Name: pointer.String(name), + LoadBalancerBackendAddressPropertiesFormat: &network.LoadBalancerBackendAddressPropertiesFormat{ + IPAddress: pointer.String(ipAddress), + }, + }) + changed = true + } + } + backendPool.LoadBalancerBackendAddresses = &addresses + return changed +} + +func hasIPAddressInBackendPool(backendPool *network.BackendAddressPool, ipAddress string) bool { + if backendPool.LoadBalancerBackendAddresses == nil { + return false + } + + addresses := *backendPool.LoadBalancerBackendAddresses + for _, address := range addresses { + if address.LoadBalancerBackendAddressPropertiesFormat != nil && + pointer.StringDeref(address.IPAddress, "") == ipAddress { + return true + } + } + + return false +} + +func removeNodeIPAddressesFromBackendPool( + backendPool network.BackendAddressPool, + nodeIPAddresses []string, + removeAll, useMultipleStandardLoadBalancers bool, +) bool { changed := false - nodeIPsSet := sets.NewString(nodeIPAddresses...) - if backendPool.BackendAddressPoolPropertiesFormat != nil && - backendPool.LoadBalancerBackendAddresses != nil { - for i := len(*backendPool.LoadBalancerBackendAddresses) - 1; i >= 0; i-- { - if (*backendPool.LoadBalancerBackendAddresses)[i].LoadBalancerBackendAddressPropertiesFormat != nil { - ipAddress := to.String((*backendPool.LoadBalancerBackendAddresses)[i].IPAddress) - if ipAddress == "" { - klog.V(4).Infof("removeNodeIPAddressFromBackendPool: LoadBalancerBackendAddress %s is not IP-based, skipping", to.String((*backendPool.LoadBalancerBackendAddresses)[i].Name)) - continue - } - if removeAll || nodeIPsSet.Has(ipAddress) { - klog.V(4).Infof("removeNodeIPAddressFromBackendPool: removing %s from the backend pool %s", ipAddress, to.String(backendPool.Name)) - *backendPool.LoadBalancerBackendAddresses = append((*backendPool.LoadBalancerBackendAddresses)[:i], (*backendPool.LoadBalancerBackendAddresses)[i+1:]...) - changed = true - } + nodeIPsSet := sets.New(nodeIPAddresses...) + + if backendPool.BackendAddressPoolPropertiesFormat == nil || + backendPool.LoadBalancerBackendAddresses == nil { + return false + } + + addresses := *backendPool.LoadBalancerBackendAddresses + for i := len(addresses) - 1; i >= 0; i-- { + if addresses[i].LoadBalancerBackendAddressPropertiesFormat != nil { + ipAddress := pointer.StringDeref((*backendPool.LoadBalancerBackendAddresses)[i].IPAddress, "") + if ipAddress == "" { + klog.V(4).Infof("removeNodeIPAddressFromBackendPool: LoadBalancerBackendAddress %s is not IP-based, skipping", pointer.StringDeref(addresses[i].Name, "")) + continue + } + if removeAll || nodeIPsSet.Has(ipAddress) { + klog.V(4).Infof("removeNodeIPAddressFromBackendPool: removing %s from the backend pool %s", ipAddress, pointer.StringDeref(backendPool.Name, "")) + addresses = append(addresses[:i], addresses[i+1:]...) + changed = true } } } + if removeAll { + backendPool.LoadBalancerBackendAddresses = &addresses + return changed + } + + // Allow the pool to be empty when EnsureHostsInPool for multiple standard load balancers clusters, + // or one node could occur in multiple backend pools. + if len(addresses) == 0 && !useMultipleStandardLoadBalancers { + klog.V(2).Info("removeNodeIPAddressFromBackendPool: the pool is empty or will be empty after removing the unwanted IP addresses, skipping the removal") + changed = false + } else if changed { + backendPool.LoadBalancerBackendAddresses = &addresses + } + return changed } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_healthprobe.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_healthprobe.go new file mode 100644 index 000000000000..8664f907a7aa --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_healthprobe.go @@ -0,0 +1,271 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "fmt" + "strconv" + "strings" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + v1 "k8s.io/api/core/v1" + "k8s.io/utils/pointer" + + "sigs.k8s.io/cloud-provider-azure/pkg/consts" +) + +// buildHealthProbeRulesForPort +// for following sku: basic loadbalancer vs standard load balancer +// for following protocols: TCP HTTP HTTPS(SLB only) +func (az *Cloud) buildHealthProbeRulesForPort(serviceManifest *v1.Service, port v1.ServicePort, lbrule string) (*network.Probe, error) { + if port.Protocol == v1.ProtocolUDP || port.Protocol == v1.ProtocolSCTP { + return nil, nil + } + // protocol should be tcp, because sctp is handled in outer loop + + properties := &network.ProbePropertiesFormat{} + var err error + + // order - Specific Override + // port_ annotation + // global annotation + + // Select Protocol + // + var protocol *string + + // 1. Look up port-specific override + protocol, err = consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsProtocol) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsProtocol), err) + } + + // 2. If not specified, look up from AppProtocol + // Note - this order is to remain compatible with previous versions + if protocol == nil { + protocol = port.AppProtocol + } + + // 3. If protocol is still nil, check the global annotation + if protocol == nil { + protocol, err = consts.GetAttributeValueInSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeProtocol) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeProtocol, err) + } + } + + // 4. Finally, if protocol is still nil, default to TCP + if protocol == nil { + protocol = pointer.String(string(network.ProtocolTCP)) + } + + *protocol = strings.TrimSpace(*protocol) + switch { + case strings.EqualFold(*protocol, string(network.ProtocolTCP)): + properties.Protocol = network.ProbeProtocolTCP + case strings.EqualFold(*protocol, string(network.ProtocolHTTPS)): + //HTTPS probe is only supported in standard loadbalancer + //For backward compatibility,when unsupported protocol is used, fall back to tcp protocol in basic lb mode instead + if !az.useStandardLoadBalancer() { + properties.Protocol = network.ProbeProtocolTCP + } else { + properties.Protocol = network.ProbeProtocolHTTPS + } + case strings.EqualFold(*protocol, string(network.ProtocolHTTP)): + properties.Protocol = network.ProbeProtocolHTTP + default: + //For backward compatibility,when unsupported protocol is used, fall back to tcp protocol in basic lb mode instead + properties.Protocol = network.ProbeProtocolTCP + } + + // Lookup or Override Health Probe Port + properties.Port = &port.NodePort + + probePort, err := consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsPort, func(s *string) error { + if s == nil { + return nil + } + //not a integer + for _, item := range serviceManifest.Spec.Ports { + if strings.EqualFold(item.Name, *s) { + //found the port + return nil + } + } + //nolint:gosec + port, err := strconv.Atoi(*s) + if err != nil { + return fmt.Errorf("port %s not found in service", *s) + } + if port < 0 || port > 65535 { + return fmt.Errorf("port %d is out of range", port) + } + return nil + }) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsPort), err) + } + + if probePort != nil { + //nolint:gosec + port, err := strconv.ParseInt(*probePort, 10, 32) + if err != nil { + //not a integer + for _, item := range serviceManifest.Spec.Ports { + if strings.EqualFold(item.Name, *probePort) { + //found the port + properties.Port = pointer.Int32(item.NodePort) + } + } + } else { + // Not need to verify probePort is in correct range again. + var found bool + for _, item := range serviceManifest.Spec.Ports { + //nolint:gosec + if item.Port == int32(port) { + //found the port + properties.Port = pointer.Int32(item.NodePort) + found = true + break + } + } + if !found { + //nolint:gosec + properties.Port = pointer.Int32(int32(port)) + } + } + } + + // Select request path + if strings.EqualFold(string(properties.Protocol), string(network.ProtocolHTTPS)) || strings.EqualFold(string(properties.Protocol), string(network.ProtocolHTTP)) { + // get request path ,only used with http/https probe + path, err := consts.GetHealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port.Port, consts.HealthProbeParamsRequestPath) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsRequestPath), err) + } + if path == nil { + if path, err = consts.GetAttributeValueInSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeRequestPath); err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeRequestPath, err) + } + } + if path == nil { + path = pointer.String(consts.HealthProbeDefaultRequestPath) + } + properties.RequestPath = path + } + + properties.IntervalInSeconds, properties.ProbeThreshold, err = az.getHealthProbeConfigProbeIntervalAndNumOfProbe(serviceManifest, port.Port) + if err != nil { + return nil, fmt.Errorf("failed to parse health probe config for port %d: %w", port.Port, err) + } + probe := &network.Probe{ + Name: &lbrule, + ProbePropertiesFormat: properties, + } + return probe, nil +} + +// getHealthProbeConfigProbeIntervalAndNumOfProbe +func (az *Cloud) getHealthProbeConfigProbeIntervalAndNumOfProbe(serviceManifest *v1.Service, port int32) (*int32, *int32, error) { + + numberOfProbes, err := az.getHealthProbeConfigNumOfProbe(serviceManifest, port) + if err != nil { + return nil, nil, err + } + + probeInterval, err := az.getHealthProbeConfigProbeInterval(serviceManifest, port) + if err != nil { + return nil, nil, err + } + // total probe should be less than 120 seconds ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe + if (*probeInterval)*(*numberOfProbes) >= 120 { + return nil, nil, fmt.Errorf("total probe should be less than 120, please adjust interval and number of probe accordingly") + } + return probeInterval, numberOfProbes, nil +} + +// getHealthProbeConfigProbeInterval get probe interval in seconds +// minimum probe interval in seconds is 5. ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe +// if probeInterval is not set, set it to default instead ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe +func (*Cloud) getHealthProbeConfigProbeInterval(serviceManifest *v1.Service, port int32) (*int32, error) { + var probeIntervalValidator = func(val *int32) error { + const ( + MinimumProbeIntervalInSecond = 5 + ) + if *val < 5 { + return fmt.Errorf("the minimum value of %s is %d", consts.HealthProbeParamsProbeInterval, MinimumProbeIntervalInSecond) + } + return nil + } + probeInterval, err := consts.GetInt32HealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port, consts.HealthProbeParamsProbeInterval, probeIntervalValidator) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s:%w", consts.BuildHealthProbeAnnotationKeyForPort(port, consts.HealthProbeParamsProbeInterval), err) + } + if probeInterval == nil { + if probeInterval, err = consts.Getint32ValueFromK8sSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeInterval, probeIntervalValidator); err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeInterval, err) + } + } + + if probeInterval == nil { + probeInterval = pointer.Int32(consts.HealthProbeDefaultProbeInterval) + } + return probeInterval, nil +} + +// getHealthProbeConfigNumOfProbe get number of probes +// minimum number of unhealthy responses is 2. ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe +// if numberOfProbes is not set, set it to default instead ref: https://docs.microsoft.com/en-us/rest/api/load-balancer/load-balancers/create-or-update#probe +func (*Cloud) getHealthProbeConfigNumOfProbe(serviceManifest *v1.Service, port int32) (*int32, error) { + var numOfProbeValidator = func(val *int32) error { + const ( + MinimumNumOfProbe = 2 + ) + if *val < MinimumNumOfProbe { + return fmt.Errorf("the minimum value of %s is %d", consts.HealthProbeParamsNumOfProbe, MinimumNumOfProbe) + } + return nil + } + numberOfProbes, err := consts.GetInt32HealthProbeConfigOfPortFromK8sSvcAnnotation(serviceManifest.Annotations, port, consts.HealthProbeParamsNumOfProbe, numOfProbeValidator) + if err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port, consts.HealthProbeParamsNumOfProbe), err) + } + if numberOfProbes == nil { + if numberOfProbes, err = consts.Getint32ValueFromK8sSvcAnnotation(serviceManifest.Annotations, consts.ServiceAnnotationLoadBalancerHealthProbeNumOfProbe, numOfProbeValidator); err != nil { + return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.ServiceAnnotationLoadBalancerHealthProbeNumOfProbe, err) + } + } + + if numberOfProbes == nil { + numberOfProbes = pointer.Int32(consts.HealthProbeDefaultNumOfProbe) + } + return numberOfProbes, nil +} + +func findProbe(probes []network.Probe, probe network.Probe) bool { + for _, existingProbe := range probes { + if strings.EqualFold(pointer.StringDeref(existingProbe.Name, ""), pointer.StringDeref(probe.Name, "")) && + pointer.Int32Deref(existingProbe.Port, 0) == pointer.Int32Deref(probe.Port, 0) && + strings.EqualFold(string(existingProbe.Protocol), string(probe.Protocol)) && + strings.EqualFold(pointer.StringDeref(existingProbe.RequestPath, ""), pointer.StringDeref(probe.RequestPath, "")) && + pointer.Int32Deref(existingProbe.IntervalInSeconds, 0) == pointer.Int32Deref(probe.IntervalInSeconds, 0) && + pointer.Int32Deref(existingProbe.ProbeThreshold, 0) == pointer.Int32Deref(probe.ProbeThreshold, 0) { + return true + } + } + return false +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_repo.go new file mode 100644 index 000000000000..d18d6521a7be --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer_repo.go @@ -0,0 +1,389 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "net/http" + "strings" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" +) + +// DeleteLB invokes az.LoadBalancerClient.Delete with exponential backoff retry +func (az *Cloud) DeleteLB(service *v1.Service, lbName string) *retry.Error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rgName := az.getLoadBalancerResourceGroup() + rerr := az.LoadBalancerClient.Delete(ctx, rgName, lbName) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.lbCache.Delete(lbName) + return nil + } + + klog.Errorf("LoadBalancerClient.Delete(%s) failed: %s", lbName, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "DeleteLoadBalancer", rerr.Error().Error()) + return rerr +} + +// ListLB invokes az.LoadBalancerClient.List with exponential backoff retry +func (az *Cloud) ListLB(service *v1.Service) ([]network.LoadBalancer, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + + rgName := az.getLoadBalancerResourceGroup() + allLBs, rerr := az.LoadBalancerClient.List(ctx, rgName) + if rerr != nil { + if rerr.IsNotFound() { + return nil, nil + } + az.Event(service, v1.EventTypeWarning, "ListLoadBalancers", rerr.Error().Error()) + klog.Errorf("LoadBalancerClient.List(%v) failure with err=%v", rgName, rerr) + return nil, rerr.Error() + } + klog.V(2).Infof("LoadBalancerClient.List(%v) success", rgName) + return allLBs, nil +} + +// ListManagedLBs invokes az.LoadBalancerClient.List and filter out +// those that are not managed by cloud provider azure or not associated to a managed VMSet. +func (az *Cloud) ListManagedLBs(service *v1.Service, nodes []*v1.Node, clusterName string) (*[]network.LoadBalancer, error) { + allLBs, err := az.ListLB(service) + if err != nil { + return nil, err + } + + if allLBs == nil { + klog.Warningf("ListManagedLBs: no LBs found") + return nil, nil + } + + managedLBNames := sets.New[string](strings.ToLower(clusterName)) + managedLBs := make([]network.LoadBalancer, 0) + if strings.EqualFold(az.LoadBalancerSku, consts.LoadBalancerSkuBasic) { + // return early if wantLb=false + if nodes == nil { + klog.V(4).Infof("ListManagedLBs: return all LBs in the resource group %s, including unmanaged LBs", az.getLoadBalancerResourceGroup()) + return &allLBs, nil + } + + agentPoolVMSetNamesMap := make(map[string]bool) + agentPoolVMSetNames, err := az.VMSet.GetAgentPoolVMSetNames(nodes) + if err != nil { + return nil, fmt.Errorf("ListManagedLBs: failed to get agent pool vmSet names: %w", err) + } + + if agentPoolVMSetNames != nil && len(*agentPoolVMSetNames) > 0 { + for _, vmSetName := range *agentPoolVMSetNames { + klog.V(6).Infof("ListManagedLBs: found agent pool vmSet name %s", vmSetName) + agentPoolVMSetNamesMap[strings.ToLower(vmSetName)] = true + } + } + + for agentPoolVMSetName := range agentPoolVMSetNamesMap { + managedLBNames.Insert(az.mapVMSetNameToLoadBalancerName(agentPoolVMSetName, clusterName)) + } + } + + if az.useMultipleStandardLoadBalancers() { + for _, multiSLBConfig := range az.MultipleStandardLoadBalancerConfigurations { + managedLBNames.Insert(multiSLBConfig.Name, fmt.Sprintf("%s%s", multiSLBConfig.Name, consts.InternalLoadBalancerNameSuffix)) + } + } + + for _, lb := range allLBs { + if managedLBNames.Has(strings.ToLower(strings.TrimSuffix(pointer.StringDeref(lb.Name, ""), consts.InternalLoadBalancerNameSuffix))) { + managedLBs = append(managedLBs, lb) + klog.V(4).Infof("ListManagedLBs: found managed LB %s", pointer.StringDeref(lb.Name, "")) + } + } + + return &managedLBs, nil +} + +// CreateOrUpdateLB invokes az.LoadBalancerClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdateLB(service *v1.Service, lb network.LoadBalancer) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + lb = cleanupSubnetInFrontendIPConfigurations(&lb) + + rgName := az.getLoadBalancerResourceGroup() + rerr := az.LoadBalancerClient.CreateOrUpdate(ctx, rgName, pointer.StringDeref(lb.Name, ""), lb, pointer.StringDeref(lb.Etag, "")) + klog.V(10).Infof("LoadBalancerClient.CreateOrUpdate(%s): end", *lb.Name) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.lbCache.Delete(*lb.Name) + return nil + } + + lbJSON, _ := json.Marshal(lb) + klog.Warningf("LoadBalancerClient.CreateOrUpdate(%s) failed: %v, LoadBalancer request: %s", pointer.StringDeref(lb.Name, ""), rerr.Error(), string(lbJSON)) + + // Invalidate the cache because ETAG precondition mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", pointer.StringDeref(lb.Name, "")) + _ = az.lbCache.Delete(*lb.Name) + } + + retryErrorMessage := rerr.Error().Error() + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", pointer.StringDeref(lb.Name, "")) + _ = az.lbCache.Delete(*lb.Name) + } + + // The LB update may fail because the referenced PIP is not in the Succeeded provisioning state + if strings.Contains(strings.ToLower(retryErrorMessage), strings.ToLower(consts.ReferencedResourceNotProvisionedMessageCode)) { + matches := pipErrorMessageRE.FindStringSubmatch(retryErrorMessage) + if len(matches) != 3 { + klog.Errorf("Failed to parse the retry error message %s", retryErrorMessage) + return rerr.Error() + } + pipRG, pipName := matches[1], matches[2] + klog.V(3).Infof("The public IP %s referenced by load balancer %s is not in Succeeded provisioning state, will try to update it", pipName, pointer.StringDeref(lb.Name, "")) + pip, _, err := az.getPublicIPAddress(pipRG, pipName, azcache.CacheReadTypeDefault) + if err != nil { + klog.Errorf("Failed to get the public IP %s in resource group %s: %v", pipName, pipRG, err) + return rerr.Error() + } + // Perform a dummy update to fix the provisioning state + err = az.CreateOrUpdatePIP(service, pipRG, pip) + if err != nil { + klog.Errorf("Failed to update the public IP %s in resource group %s: %v", pipName, pipRG, err) + return rerr.Error() + } + // Invalidate the LB cache, return the error, and the controller manager + // would retry the LB update in the next reconcile loop + _ = az.lbCache.Delete(*lb.Name) + } + + return rerr.Error() +} + +func (az *Cloud) CreateOrUpdateLBBackendPool(lbName string, backendPool network.BackendAddressPool) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + klog.V(4).Infof("CreateOrUpdateLBBackendPool: updating backend pool %s in LB %s", pointer.StringDeref(backendPool.Name, ""), lbName) + rerr := az.LoadBalancerClient.CreateOrUpdateBackendPools(ctx, az.getLoadBalancerResourceGroup(), lbName, pointer.StringDeref(backendPool.Name, ""), backendPool, pointer.StringDeref(backendPool.Etag, "")) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.lbCache.Delete(lbName) + return nil + } + + // Invalidate the cache because ETAG precondition mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", lbName) + _ = az.lbCache.Delete(lbName) + } + + retryErrorMessage := rerr.Error().Error() + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", lbName) + _ = az.lbCache.Delete(lbName) + } + + return rerr.Error() +} + +func (az *Cloud) DeleteLBBackendPool(lbName, backendPoolName string) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + klog.V(4).Infof("DeleteLBBackendPool: deleting backend pool %s in LB %s", backendPoolName, lbName) + rerr := az.LoadBalancerClient.DeleteLBBackendPool(ctx, az.getLoadBalancerResourceGroup(), lbName, backendPoolName) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.lbCache.Delete(lbName) + return nil + } + + // Invalidate the cache because ETAG precondition mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because of http.StatusPreconditionFailed", lbName) + _ = az.lbCache.Delete(lbName) + } + + retryErrorMessage := rerr.Error().Error() + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("LoadBalancer cache for %s is cleanup because CreateOrUpdate is canceled by another operation", lbName) + _ = az.lbCache.Delete(lbName) + } + + return rerr.Error() +} + +func cleanupSubnetInFrontendIPConfigurations(lb *network.LoadBalancer) network.LoadBalancer { + if lb.LoadBalancerPropertiesFormat == nil || lb.FrontendIPConfigurations == nil { + return *lb + } + + frontendIPConfigurations := *lb.FrontendIPConfigurations + for i := range frontendIPConfigurations { + config := frontendIPConfigurations[i] + if config.FrontendIPConfigurationPropertiesFormat != nil && + config.Subnet != nil && + config.Subnet.ID != nil { + subnet := network.Subnet{ + ID: config.Subnet.ID, + } + if config.Subnet.Name != nil { + subnet.Name = config.FrontendIPConfigurationPropertiesFormat.Subnet.Name + } + config.FrontendIPConfigurationPropertiesFormat.Subnet = &subnet + frontendIPConfigurations[i] = config + continue + } + } + + lb.FrontendIPConfigurations = &frontendIPConfigurations + return *lb +} + +// MigrateToIPBasedBackendPoolAndWaitForCompletion use the migration API to migrate from +// NIC-based to IP-based LB backend pools. It also makes sure the number of IP addresses +// in the backend pools is expected. +func (az *Cloud) MigrateToIPBasedBackendPoolAndWaitForCompletion( + lbName string, backendPoolNames []string, nicsCountMap map[string]int, +) error { + if rerr := az.LoadBalancerClient.MigrateToIPBasedBackendPool(context.Background(), az.ResourceGroup, lbName, backendPoolNames); rerr != nil { + backendPoolNamesStr := strings.Join(backendPoolNames, ",") + klog.Errorf("MigrateToIPBasedBackendPoolAndWaitForCompletion: Failed to migrate to IP based backend pool for lb %s, backend pool %s: %s", lbName, backendPoolNamesStr, rerr.Error().Error()) + return rerr.Error() + } + + succeeded := make(map[string]bool) + for bpName := range nicsCountMap { + succeeded[bpName] = false + } + + err := wait.PollImmediate(5*time.Second, 10*time.Minute, func() (done bool, err error) { + for bpName, nicsCount := range nicsCountMap { + if succeeded[bpName] { + continue + } + + bp, rerr := az.LoadBalancerClient.GetLBBackendPool(context.Background(), az.ResourceGroup, lbName, bpName, "") + if rerr != nil { + klog.Errorf("MigrateToIPBasedBackendPoolAndWaitForCompletion: Failed to get backend pool %s for lb %s: %s", bpName, lbName, rerr.Error().Error()) + return false, rerr.Error() + } + + if countIPsOnBackendPool(bp) != nicsCount { + klog.V(4).Infof("MigrateToIPBasedBackendPoolAndWaitForCompletion: Expected IPs %s, current IPs %d, will retry in 5s", nicsCount, countIPsOnBackendPool(bp)) + return false, nil + } + succeeded[bpName] = true + } + return true, nil + }) + + if err != nil { + if errors.Is(err, wait.ErrWaitTimeout) { + klog.Warningf("MigrateToIPBasedBackendPoolAndWaitForCompletion: Timeout waiting for migration to IP based backend pool for lb %s, backend pool %s", lbName, strings.Join(backendPoolNames, ",")) + return nil + } + + klog.Errorf("MigrateToIPBasedBackendPoolAndWaitForCompletion: Failed to wait for migration to IP based backend pool for lb %s, backend pool %s: %s", lbName, strings.Join(backendPoolNames, ","), err.Error()) + return err + } + + return nil +} + +func (az *Cloud) newLBCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + + lb, err := az.LoadBalancerClient.Get(ctx, az.getLoadBalancerResourceGroup(), key, "") + exists, rerr := checkResourceExistsFromError(err) + if rerr != nil { + return nil, rerr.Error() + } + + if !exists { + klog.V(2).Infof("Load balancer %q not found", key) + return nil, nil + } + + return &lb, nil + } + + if az.LoadBalancerCacheTTLInSeconds == 0 { + az.LoadBalancerCacheTTLInSeconds = loadBalancerCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.LoadBalancerCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} + +func (az *Cloud) getAzureLoadBalancer(name string, crt azcache.AzureCacheReadType) (lb *network.LoadBalancer, exists bool, err error) { + cachedLB, err := az.lbCache.GetWithDeepCopy(name, crt) + if err != nil { + return lb, false, err + } + + if cachedLB == nil { + return lb, false, nil + } + + return cachedLB.(*network.LoadBalancer), true, nil +} + +// isBackendPoolOnSameLB checks whether newBackendPoolID is on the same load balancer as existingBackendPools. +// Since both public and internal LBs are supported, lbName and lbName-internal are treated as same. +// If not same, the lbName for existingBackendPools would also be returned. +func isBackendPoolOnSameLB(newBackendPoolID string, existingBackendPools []string) (bool, string, error) { + matches := backendPoolIDRE.FindStringSubmatch(newBackendPoolID) + if len(matches) != 2 { + return false, "", fmt.Errorf("new backendPoolID %q is in wrong format", newBackendPoolID) + } + + newLBName := matches[1] + newLBNameTrimmed := strings.TrimSuffix(newLBName, consts.InternalLoadBalancerNameSuffix) + for _, backendPool := range existingBackendPools { + matches := backendPoolIDRE.FindStringSubmatch(backendPool) + if len(matches) != 2 { + return false, "", fmt.Errorf("existing backendPoolID %q is in wrong format", backendPool) + } + + lbName := matches[1] + if !strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), newLBNameTrimmed) { + return false, lbName, nil + } + } + + return true, "", nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_local_services.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_local_services.go new file mode 100644 index 000000000000..66ff100ed684 --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_local_services.go @@ -0,0 +1,546 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "context" + "fmt" + "strings" + "sync" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + + v1 "k8s.io/api/core/v1" + discovery_v1 "k8s.io/api/discovery/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/informers" + "k8s.io/client-go/tools/cache" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" +) + +// batchProcessor collects operations in a certain interval and then processes them in batches. +type batchProcessor interface { + // run starts the batchProcessor, and stops if the context exits. + run(ctx context.Context) + + // addOperation adds an operation to the batchProcessor. + addOperation(operation batchOperation) batchOperation + + // removeOperation removes all operations targeting to the specified service. + removeOperation(name string) +} + +// batchOperation is an operation that can be added to a batchProcessor. +type batchOperation interface { + wait() batchOperationResult +} + +// loadBalancerBackendPoolUpdateOperation is an operation that updates the backend pool of a load balancer. +type loadBalancerBackendPoolUpdateOperation struct { + serviceName string + loadBalancerName string + backendPoolName string + kind consts.LoadBalancerBackendPoolUpdateOperation + nodeIPs []string +} + +func (op *loadBalancerBackendPoolUpdateOperation) wait() batchOperationResult { + return batchOperationResult{} +} + +// loadBalancerBackendPoolUpdater is a batchProcessor that updates the backend pool of a load balancer. +type loadBalancerBackendPoolUpdater struct { + az *Cloud + interval time.Duration + lock sync.Mutex + operations []batchOperation +} + +// newLoadBalancerBackendPoolUpdater creates a new loadBalancerBackendPoolUpdater. +func newLoadBalancerBackendPoolUpdater(az *Cloud, interval time.Duration) *loadBalancerBackendPoolUpdater { + return &loadBalancerBackendPoolUpdater{ + az: az, + interval: interval, + operations: make([]batchOperation, 0), + } +} + +// run starts the loadBalancerBackendPoolUpdater, and stops if the context exits. +func (updater *loadBalancerBackendPoolUpdater) run(ctx context.Context) { + klog.V(2).Info("loadBalancerBackendPoolUpdater.run: started") + err := wait.PollUntilContextCancel(ctx, updater.interval, false, func(ctx context.Context) (bool, error) { + updater.process() + return false, nil + }) + klog.Infof("loadBalancerBackendPoolUpdater.run: stopped due to %s", err.Error()) +} + +// getAddIPsToBackendPoolOperation creates a new loadBalancerBackendPoolUpdateOperation +// that adds nodeIPs to the backend pool. +func getAddIPsToBackendPoolOperation(serviceName, loadBalancerName, backendPoolName string, nodeIPs []string) *loadBalancerBackendPoolUpdateOperation { + return &loadBalancerBackendPoolUpdateOperation{ + serviceName: serviceName, + loadBalancerName: loadBalancerName, + backendPoolName: backendPoolName, + kind: consts.LoadBalancerBackendPoolUpdateOperationAdd, + nodeIPs: nodeIPs, + } +} + +// getRemoveIPsFromBackendPoolOperation creates a new loadBalancerBackendPoolUpdateOperation +// that removes nodeIPs from the backend pool. +func getRemoveIPsFromBackendPoolOperation(serviceName, loadBalancerName, backendPoolName string, nodeIPs []string) *loadBalancerBackendPoolUpdateOperation { + return &loadBalancerBackendPoolUpdateOperation{ + serviceName: serviceName, + loadBalancerName: loadBalancerName, + backendPoolName: backendPoolName, + kind: consts.LoadBalancerBackendPoolUpdateOperationRemove, + nodeIPs: nodeIPs, + } +} + +// addOperation adds an operation to the loadBalancerBackendPoolUpdater. +func (updater *loadBalancerBackendPoolUpdater) addOperation(operation batchOperation) batchOperation { + updater.lock.Lock() + defer updater.lock.Unlock() + + op := operation.(*loadBalancerBackendPoolUpdateOperation) + klog.V(4).InfoS("loadBalancerBackendPoolUpdater.addOperation", + "kind", op.kind, + "service name", op.serviceName, + "load balancer name", op.loadBalancerName, + "backend pool name", op.backendPoolName, + "node IPs", strings.Join(op.nodeIPs, ",")) + updater.operations = append(updater.operations, operation) + return operation +} + +// removeOperation removes all operations targeting to the specified service. +func (updater *loadBalancerBackendPoolUpdater) removeOperation(serviceName string) { + updater.lock.Lock() + defer updater.lock.Unlock() + + for i := len(updater.operations) - 1; i >= 0; i-- { + op := updater.operations[i].(*loadBalancerBackendPoolUpdateOperation) + if strings.EqualFold(op.serviceName, serviceName) { + klog.V(4).InfoS("loadBalancerBackendPoolUpdater.removeOperation", + "kind", op.kind, + "service name", op.serviceName, + "load balancer name", op.loadBalancerName, + "backend pool name", op.backendPoolName, + "node IPs", strings.Join(op.nodeIPs, ",")) + updater.operations = append(updater.operations[:i], updater.operations[i+1:]...) + } + } +} + +// process processes all operations in the loadBalancerBackendPoolUpdater. +// It merges operations that have the same loadBalancerName and backendPoolName, +// and then processes them in batches. If an operation fails, it will be retried +// if it is retriable, otherwise all operations in the batch targeting to +// this backend pool will fail. +func (updater *loadBalancerBackendPoolUpdater) process() { + updater.lock.Lock() + defer updater.lock.Unlock() + + if len(updater.operations) == 0 { + klog.V(4).Infof("loadBalancerBackendPoolUpdater.process: no operations to process") + return + } + + // Group operations by loadBalancerName:backendPoolName + groups := make(map[string][]batchOperation) + for _, op := range updater.operations { + lbOp := op.(*loadBalancerBackendPoolUpdateOperation) + si, found := updater.az.getLocalServiceInfo(strings.ToLower(lbOp.serviceName)) + if !found { + klog.V(4).Infof("loadBalancerBackendPoolUpdater.process: service %s is not a local service, skip the operation", lbOp.serviceName) + continue + } + if !strings.EqualFold(si.lbName, lbOp.loadBalancerName) { + klog.V(4).InfoS("loadBalancerBackendPoolUpdater.process: service is not associated with the load balancer, skip the operation", + "service", lbOp.serviceName, + "previous load balancer", lbOp.loadBalancerName, + "current load balancer", si.lbName) + continue + } + + key := fmt.Sprintf("%s:%s", lbOp.loadBalancerName, lbOp.backendPoolName) + groups[key] = append(groups[key], op) + } + + // Clear all jobs. + updater.operations = make([]batchOperation, 0) + + for key, ops := range groups { + parts := strings.Split(key, ":") + lbName, poolName := parts[0], parts[1] + operationName := fmt.Sprintf("%s/%s", lbName, poolName) + bp, rerr := updater.az.LoadBalancerClient.GetLBBackendPool(context.Background(), updater.az.ResourceGroup, lbName, poolName, "") + if rerr != nil { + updater.processError(rerr, operationName, ops...) + continue + } + + var changed bool + for _, op := range ops { + lbOp := op.(*loadBalancerBackendPoolUpdateOperation) + switch lbOp.kind { + case consts.LoadBalancerBackendPoolUpdateOperationRemove: + removed := removeNodeIPAddressesFromBackendPool(bp, lbOp.nodeIPs, false, true) + changed = changed || removed + case consts.LoadBalancerBackendPoolUpdateOperationAdd: + added := updater.az.addNodeIPAddressesToBackendPool(&bp, lbOp.nodeIPs) + changed = changed || added + default: + panic("loadBalancerBackendPoolUpdater.process: unknown operation type") + } + } + // To keep the code clean, ignore the case when `changed` is true + // but the backend pool object is not changed after multiple times of removal and re-adding. + if changed { + klog.V(2).Infof("loadBalancerBackendPoolUpdater.process: updating backend pool %s/%s", lbName, poolName) + rerr = updater.az.LoadBalancerClient.CreateOrUpdateBackendPools(context.Background(), updater.az.ResourceGroup, lbName, poolName, bp, pointer.StringDeref(bp.Etag, "")) + if rerr != nil { + updater.processError(rerr, operationName, ops...) + continue + } + } + updater.notify(newBatchOperationResult(operationName, true, nil), ops...) + } +} + +// processError mark the operations as retriable if the error is retriable, +// and fail all operations if the error is not retriable. +func (updater *loadBalancerBackendPoolUpdater) processError( + rerr *retry.Error, + operationName string, + operations ...batchOperation, +) { + if rerr.IsNotFound() { + klog.V(4).Infof("backend pool not found for operation %s, skip updating", operationName) + return + } + + if rerr.Retriable { + // Retry if retriable. + updater.operations = append(updater.operations, operations...) + } else { + // Fail all operations if not retriable. + updater.notify(newBatchOperationResult(operationName, false, rerr.Error()), operations...) + } +} + +// notify notifies the operations with the result. +func (updater *loadBalancerBackendPoolUpdater) notify(res batchOperationResult, operations ...batchOperation) { + for _, op := range operations { + updater.az.processBatchOperationResult(op, res) + break + } +} + +// batchOperationResult is the result of a batch operation. +type batchOperationResult struct { + name string + success bool + err error +} + +// newBatchOperationResult creates a new batchOperationResult. +func newBatchOperationResult(name string, success bool, err error) batchOperationResult { + return batchOperationResult{ + name: name, + success: success, + err: err, + } +} + +func (az *Cloud) getLocalServiceInfo(serviceName string) (*serviceInfo, bool) { + data, ok := az.localServiceNameToServiceInfoMap.Load(serviceName) + if !ok { + return &serviceInfo{}, false + } + return data.(*serviceInfo), true +} + +// setUpEndpointSlicesInformer creates an informer for EndpointSlices of local services. +// It watches the update events and send backend pool update operations to the batch updater. +// TODO (niqi): the update of endpointslice may be slower than tue update of endpoint pods. Need to fix this. +func (az *Cloud) setUpEndpointSlicesInformer(informerFactory informers.SharedInformerFactory) { + endpointSlicesInformer := informerFactory.Discovery().V1().EndpointSlices().Informer() + _, _ = endpointSlicesInformer.AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + es := obj.(*discovery_v1.EndpointSlice) + az.endpointSlicesCache.Store(strings.ToLower(fmt.Sprintf("%s/%s", es.Namespace, es.Name)), es) + }, + UpdateFunc: func(oldObj, newObj interface{}) { + previousES := oldObj.(*discovery_v1.EndpointSlice) + newES := newObj.(*discovery_v1.EndpointSlice) + + svcName := getServiceNameOfEndpointSlice(newES) + if svcName == "" { + klog.V(4).Infof("EndpointSlice %s/%s does not have service name label, skip updating load balancer backend pool", newES.Namespace, newES.Name) + return + } + + klog.V(4).Infof("Detecting EndpointSlice %s/%s update", newES.Namespace, newES.Name) + az.endpointSlicesCache.Store(strings.ToLower(fmt.Sprintf("%s/%s", newES.Namespace, newES.Name)), newES) + + key := strings.ToLower(fmt.Sprintf("%s/%s", newES.Namespace, svcName)) + si, found := az.getLocalServiceInfo(key) + if !found { + klog.V(4).Infof("EndpointSlice %s/%s belongs to service %s, but the service is not a local service, skip updating load balancer backend pool", key, newES.Namespace, newES.Name) + return + } + lbName, ipFamily := si.lbName, si.ipFamily + + var previousIPs, currentIPs, previousNodeNames, currentNodeNames []string + if previousES != nil { + for _, ep := range previousES.Endpoints { + previousNodeNames = append(previousNodeNames, pointer.StringDeref(ep.NodeName, "")) + } + } + if newES != nil { + for _, ep := range newES.Endpoints { + currentNodeNames = append(currentNodeNames, pointer.StringDeref(ep.NodeName, "")) + } + } + for _, previousNodeName := range previousNodeNames { + nodeIPsSet := az.nodePrivateIPs[previousNodeName] + previousIPs = append(previousIPs, setToStrings(nodeIPsSet)...) + } + for _, currentNodeName := range currentNodeNames { + nodeIPsSet := az.nodePrivateIPs[currentNodeName] + currentIPs = append(currentIPs, setToStrings(nodeIPsSet)...) + } + ipsToBeDeleted := compareNodeIPs(previousIPs, currentIPs) + if len(ipsToBeDeleted) == 0 && len(previousIPs) == len(currentIPs) { + klog.V(4).Infof("No IP change detected for EndpointSlice %s/%s, skip updating load balancer backend pool", newES.Namespace, newES.Name) + return + } + + if az.backendPoolUpdater != nil { + var bpNames []string + bpNameIPv4 := getLocalServiceBackendPoolName(key, false) + bpNameIPv6 := getLocalServiceBackendPoolName(key, true) + switch strings.ToLower(ipFamily) { + case strings.ToLower(consts.IPVersionIPv4String): + bpNames = append(bpNames, bpNameIPv4) + case strings.ToLower(consts.IPVersionIPv6String): + bpNames = append(bpNames, bpNameIPv6) + default: + bpNames = append(bpNames, bpNameIPv4, bpNameIPv6) + } + for _, bpName := range bpNames { + if len(ipsToBeDeleted) > 0 { + az.backendPoolUpdater.addOperation(getRemoveIPsFromBackendPoolOperation(key, lbName, bpName, ipsToBeDeleted)) + } + if len(currentIPs) > 0 { + az.backendPoolUpdater.addOperation(getAddIPsToBackendPoolOperation(key, lbName, bpName, currentIPs)) + } + } + } + }, + DeleteFunc: func(obj interface{}) { + es := obj.(*discovery_v1.EndpointSlice) + az.endpointSlicesCache.Delete(strings.ToLower(fmt.Sprintf("%s/%s", es.Namespace, es.Name))) + }, + }) +} + +func (az *Cloud) processBatchOperationResult(op batchOperation, res batchOperationResult) { + lbOp := op.(*loadBalancerBackendPoolUpdateOperation) + var svc *v1.Service + svc, _, _ = az.getLatestService(lbOp.serviceName, false) + if svc == nil { + klog.Warningf("Service %s not found, skip sending event", lbOp.serviceName) + return + } + if !res.success { + var errStr string + if res.err != nil { + errStr = res.err.Error() + } + az.Event(svc, v1.EventTypeWarning, "LoadBalancerBackendPoolUpdateFailed", errStr) + } else { + az.Event(svc, v1.EventTypeNormal, "LoadBalancerBackendPoolUpdated", "Load balancer backend pool updated successfully") + } +} + +// getServiceNameOfEndpointSlice gets the service name of an EndpointSlice. +func getServiceNameOfEndpointSlice(es *discovery_v1.EndpointSlice) string { + if es.Labels != nil { + return es.Labels[consts.ServiceNameLabel] + } + return "" +} + +// compareNodeIPs compares the previous and current node IPs and returns the IPs to be deleted. +func compareNodeIPs(previousIPs, currentIPs []string) []string { + previousIPSet := sets.NewString(previousIPs...) + currentIPSet := sets.NewString(currentIPs...) + return previousIPSet.Difference(currentIPSet).List() +} + +// getLocalServiceBackendPoolName gets the name of the backend pool of a local service. +func getLocalServiceBackendPoolName(serviceName string, ipv6 bool) string { + serviceName = strings.ToLower(strings.Replace(serviceName, "/", "-", -1)) + if ipv6 { + return fmt.Sprintf("%s-ipv6", serviceName) + } + return serviceName +} + +// getBackendPoolNameForService determine the expected backend pool name +// by checking the external traffic policy of the service. +func (az *Cloud) getBackendPoolNameForService(service *v1.Service, clusterName string, ipv6 bool) string { + if !isLocalService(service) || !az.useMultipleStandardLoadBalancers() { + return getBackendPoolName(clusterName, ipv6) + } + return getLocalServiceBackendPoolName(getServiceName(service), ipv6) +} + +// getBackendPoolNamesForService determine the expected backend pool names +// by checking the external traffic policy of the service. +func (az *Cloud) getBackendPoolNamesForService(service *v1.Service, clusterName string) map[bool]string { + if !isLocalService(service) || !az.useMultipleStandardLoadBalancers() { + return getBackendPoolNames(clusterName) + } + return map[bool]string{ + consts.IPVersionIPv4: getLocalServiceBackendPoolName(getServiceName(service), false), + consts.IPVersionIPv6: getLocalServiceBackendPoolName(getServiceName(service), true), + } +} + +// getBackendPoolIDsForService determine the expected backend pool IDs +// by checking the external traffic policy of the service. +func (az *Cloud) getBackendPoolIDsForService(service *v1.Service, clusterName, lbName string) map[bool]string { + if !isLocalService(service) || !az.useMultipleStandardLoadBalancers() { + return az.getBackendPoolIDs(clusterName, lbName) + } + return map[bool]string{ + consts.IPVersionIPv4: az.getLocalServiceBackendPoolID(getServiceName(service), lbName, false), + consts.IPVersionIPv6: az.getLocalServiceBackendPoolID(getServiceName(service), lbName, true), + } +} + +// getLocalServiceBackendPoolID gets the ID of the backend pool of a local service. +func (az *Cloud) getLocalServiceBackendPoolID(serviceName string, lbName string, ipv6 bool) string { + return az.getBackendPoolID(lbName, getLocalServiceBackendPoolName(serviceName, ipv6)) +} + +// localServiceOwnsBackendPool checks if a backend pool is owned by a local service. +func localServiceOwnsBackendPool(serviceName, bpName string) bool { + prefix := strings.Replace(serviceName, "/", "-", -1) + return strings.HasPrefix(strings.ToLower(bpName), strings.ToLower(prefix)) +} + +type serviceInfo struct { + ipFamily string + lbName string +} + +func newServiceInfo(ipFamily, lbName string) *serviceInfo { + return &serviceInfo{ + ipFamily: ipFamily, + lbName: lbName, + } +} + +// getLocalServiceEndpointsNodeNames gets the node names that host all endpoints of the local service. +func (az *Cloud) getLocalServiceEndpointsNodeNames(service *v1.Service) (sets.Set[string], error) { + var ep *discovery_v1.EndpointSlice + az.endpointSlicesCache.Range(func(key, value interface{}) bool { + endpointSlice := value.(*discovery_v1.EndpointSlice) + if strings.EqualFold(getServiceNameOfEndpointSlice(endpointSlice), service.Name) && + strings.EqualFold(endpointSlice.Namespace, service.Namespace) { + ep = endpointSlice + return false + } + return true + }) + if ep == nil { + klog.Infof("EndpointSlice for service %s/%s not found, try to list EndpointSlices", service.Namespace, service.Name) + eps, err := az.KubeClient.DiscoveryV1().EndpointSlices(service.Namespace).List(context.Background(), metav1.ListOptions{}) + if err != nil { + klog.Errorf("Failed to list EndpointSlices for service %s/%s: %s", service.Namespace, service.Name, err.Error()) + return nil, err + } + for _, endpointSlice := range eps.Items { + endpointSlice := endpointSlice + if strings.EqualFold(getServiceNameOfEndpointSlice(&endpointSlice), service.Name) { + ep = &endpointSlice + break + } + } + } + if ep == nil { + return nil, fmt.Errorf("failed to find EndpointSlice for service %s/%s", service.Namespace, service.Name) + } + + var nodeNames []string + for _, endpoint := range ep.Endpoints { + klog.V(4).Infof("EndpointSlice %s/%s has endpoint %s on node %s", ep.Namespace, ep.Name, endpoint.Addresses, pointer.StringDeref(endpoint.NodeName, "")) + nodeNames = append(nodeNames, pointer.StringDeref(endpoint.NodeName, "")) + } + + return sets.New[string](nodeNames...), nil +} + +// cleanupLocalServiceBackendPool cleans up the backend pool of +// a local service among given load balancers. +func (az *Cloud) cleanupLocalServiceBackendPool( + svc *v1.Service, + nodes []*v1.Node, + lbs *[]network.LoadBalancer, + clusterName string, +) (newLBs *[]network.LoadBalancer, err error) { + var changed bool + if lbs != nil { + for _, lb := range *lbs { + lbName := pointer.StringDeref(lb.Name, "") + if lb.BackendAddressPools != nil { + for _, bp := range *lb.BackendAddressPools { + bpName := pointer.StringDeref(bp.Name, "") + if localServiceOwnsBackendPool(getServiceName(svc), bpName) { + if err := az.DeleteLBBackendPool(lbName, bpName); err != nil { + return nil, err + } + changed = true + } + } + } + } + } + if changed { + // Refresh the list of existing LBs after cleanup to update etags for the LBs. + klog.V(4).Info("Refreshing the list of existing LBs") + lbs, err = az.ListManagedLBs(svc, nodes, clusterName) + if err != nil { + return nil, fmt.Errorf("reconcileLoadBalancer: failed to list managed LB: %w", err) + } + } + return lbs, nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_managedDiskController.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_managedDiskController.go index 538ed8d8470a..a0b8af849dd2 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_managedDiskController.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_managedDiskController.go @@ -24,8 +24,7 @@ import ( "strconv" "strings" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -33,6 +32,7 @@ import ( cloudvolume "k8s.io/cloud-provider/volume" volumehelpers "k8s.io/cloud-provider/volume/helpers" "k8s.io/klog/v2" + "k8s.io/utils/pointer" "sigs.k8s.io/cloud-provider-azure/pkg/consts" ) @@ -76,6 +76,8 @@ type ManagedDiskOptions struct { LogicalSectorSize int32 // SkipGetDiskOperation indicates whether skip GetDisk operation(mainly due to throttling) SkipGetDiskOperation bool + // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' + PublicNetworkAccess compute.PublicNetworkAccess // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' NetworkAccessPolicy compute.NetworkAccessPolicy // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. @@ -86,6 +88,8 @@ type ManagedDiskOptions struct { SubscriptionID string // Location - specify a different location Location string + // PerformancePlus - Set this flag to true to get a boost on the performance target of the disk deployed + PerformancePlus *bool } // CreateManagedDisk: create managed disk @@ -117,19 +121,19 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * diskSizeGB := int32(options.SizeGB) diskSku := options.StorageAccountType - rg := c.common.resourceGroup + rg := c.common.cloud.ResourceGroup if options.ResourceGroup != "" { rg = options.ResourceGroup } - if options.SubscriptionID != "" && !strings.EqualFold(options.SubscriptionID, c.common.subscriptionID) && options.ResourceGroup == "" { + if options.SubscriptionID != "" && !strings.EqualFold(options.SubscriptionID, c.common.cloud.SubscriptionID) && options.ResourceGroup == "" { return "", fmt.Errorf("resourceGroup must be specified when subscriptionID(%s) is not empty", options.SubscriptionID) } - subsID := c.common.subscriptionID + subsID := c.common.cloud.SubscriptionID if options.SubscriptionID != "" { subsID = options.SubscriptionID } - creationData, err := getValidCreationData(subsID, rg, options.SourceResourceID, options.SourceType) + creationData, err := getValidCreationData(subsID, rg, options) if err != nil { return "", err } @@ -139,6 +143,10 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * BurstingEnabled: options.BurstingEnabled, } + if options.PublicNetworkAccess != "" { + diskProperties.PublicNetworkAccess = options.PublicNetworkAccess + } + if options.NetworkAccessPolicy != "" { diskProperties.NetworkAccessPolicy = options.NetworkAccessPolicy if options.NetworkAccessPolicy == compute.AllowPrivate { @@ -153,11 +161,11 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * } } - if diskSku == compute.UltraSSDLRS || diskSku == consts.PremiumV2LRS { + if diskSku == compute.UltraSSDLRS || diskSku == compute.PremiumV2LRS { if options.DiskIOPSReadWrite == "" { if diskSku == compute.UltraSSDLRS { diskIOPSReadWrite := int64(consts.DefaultDiskIOPSReadWrite) - diskProperties.DiskIOPSReadWrite = to.Int64Ptr(diskIOPSReadWrite) + diskProperties.DiskIOPSReadWrite = pointer.Int64(diskIOPSReadWrite) } } else { v, err := strconv.Atoi(options.DiskIOPSReadWrite) @@ -165,13 +173,13 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * return "", fmt.Errorf("AzureDisk - failed to parse DiskIOPSReadWrite: %w", err) } diskIOPSReadWrite := int64(v) - diskProperties.DiskIOPSReadWrite = to.Int64Ptr(diskIOPSReadWrite) + diskProperties.DiskIOPSReadWrite = pointer.Int64(diskIOPSReadWrite) } if options.DiskMBpsReadWrite == "" { if diskSku == compute.UltraSSDLRS { diskMBpsReadWrite := int64(consts.DefaultDiskMBpsReadWrite) - diskProperties.DiskMBpsReadWrite = to.Int64Ptr(diskMBpsReadWrite) + diskProperties.DiskMBpsReadWrite = pointer.Int64(diskMBpsReadWrite) } } else { v, err := strconv.Atoi(options.DiskMBpsReadWrite) @@ -179,12 +187,12 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * return "", fmt.Errorf("AzureDisk - failed to parse DiskMBpsReadWrite: %w", err) } diskMBpsReadWrite := int64(v) - diskProperties.DiskMBpsReadWrite = to.Int64Ptr(diskMBpsReadWrite) + diskProperties.DiskMBpsReadWrite = pointer.Int64(diskMBpsReadWrite) } if options.LogicalSectorSize != 0 { klog.V(2).Infof("AzureDisk - requested LogicalSectorSize: %v", options.LogicalSectorSize) - diskProperties.CreationData.LogicalSectorSize = to.Int32Ptr(options.LogicalSectorSize) + diskProperties.CreationData.LogicalSectorSize = pointer.Int32(options.LogicalSectorSize) } } else { if options.DiskIOPSReadWrite != "" { @@ -221,7 +229,7 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * diskProperties.MaxShares = &options.MaxShares } - location := c.common.location + location := c.common.cloud.Location if options.Location != "" { location = options.Location } @@ -234,10 +242,10 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * DiskProperties: &diskProperties, } - if el := c.common.extendedLocation; el != nil { + if c.common.cloud.HasExtendedLocation() { model.ExtendedLocation = &compute.ExtendedLocation{ - Name: to.StringPtr(el.Name), - Type: compute.ExtendedLocationTypes(el.Type), + Name: pointer.String(c.common.cloud.ExtendedLocationName), + Type: compute.ExtendedLocationTypes(c.common.cloud.ExtendedLocationType), } } @@ -254,7 +262,7 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options * if options.SkipGetDiskOperation { klog.Warningf("azureDisk - GetDisk(%s, StorageAccountType:%s) is throttled, unable to confirm provisioningState in poll process", options.DiskName, options.StorageAccountType) } else { - err = kwait.ExponentialBackoff(defaultBackOff, func() (bool, error) { + err = kwait.ExponentialBackoffWithContext(ctx, defaultBackOff, func(ctx context.Context) (bool, error) { provisionState, id, err := c.GetDisk(ctx, subsID, rg, options.DiskName) if err == nil { if id != "" { @@ -288,8 +296,8 @@ func (c *ManagedDiskController) DeleteManagedDisk(ctx context.Context, diskURI s return err } - if _, ok := c.common.diskStateMap.Load(strings.ToLower(diskURI)); ok { - return fmt.Errorf("failed to delete disk(%s) since it's in attaching or detaching state", diskURI) + if state, ok := c.common.diskStateMap.Load(strings.ToLower(diskURI)); ok { + return fmt.Errorf("failed to delete disk(%s) since it's in %s state", diskURI, state.(string)) } diskName := path.Base(diskURI) @@ -364,7 +372,7 @@ func (c *ManagedDiskController) ResizeDisk(ctx context.Context, diskURI string, } if !supportOnlineResize && result.DiskProperties.DiskState != compute.Unattached { - return oldSize, fmt.Errorf("azureDisk - disk resize is only supported on Unattached disk, current disk state: %s, already attached to %s", result.DiskProperties.DiskState, to.String(result.ManagedBy)) + return oldSize, fmt.Errorf("azureDisk - disk resize is only supported on Unattached disk, current disk state: %s, already attached to %s", result.DiskProperties.DiskState, pointer.StringDeref(result.ManagedBy, "")) } diskParameter := compute.DiskUpdate{ diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_loadbalancer_backendpool.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_loadbalancer_backendpool.go index 9b446ae0b0fd..9d1911995dc4 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_loadbalancer_backendpool.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_loadbalancer_backendpool.go @@ -19,50 +19,35 @@ package provider import ( reflect "reflect" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" gomock "github.com/golang/mock/gomock" - v1 "k8s.io/api/core/v1" ) -// MockBackendPool is a mock of BackendPool interface +// MockBackendPool is a mock of BackendPool interface. type MockBackendPool struct { ctrl *gomock.Controller recorder *MockBackendPoolMockRecorder } -// MockBackendPoolMockRecorder is the mock recorder for MockBackendPool +// MockBackendPoolMockRecorder is the mock recorder for MockBackendPool. type MockBackendPoolMockRecorder struct { mock *MockBackendPool } -// NewMockBackendPool creates a new mock instance +// NewMockBackendPool creates a new mock instance. func NewMockBackendPool(ctrl *gomock.Controller) *MockBackendPool { mock := &MockBackendPool{ctrl: ctrl} mock.recorder = &MockBackendPoolMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockBackendPool) EXPECT() *MockBackendPoolMockRecorder { return m.recorder } -// EnsureHostsInPool mocks base method -func (m *MockBackendPool) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, backendPoolID, vmSetName, clusterName, lbName string, backendPool network.BackendAddressPool) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureHostsInPool", service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool) - ret0, _ := ret[0].(error) - return ret0 -} - -// EnsureHostsInPool indicates an expected call of EnsureHostsInPool -func (mr *MockBackendPoolMockRecorder) EnsureHostsInPool(service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureHostsInPool", reflect.TypeOf((*MockBackendPool)(nil).EnsureHostsInPool), service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool) -} - -// CleanupVMSetFromBackendPoolByCondition mocks base method +// CleanupVMSetFromBackendPoolByCondition mocks base method. func (m *MockBackendPool) CleanupVMSetFromBackendPoolByCondition(slb *network.LoadBalancer, service *v1.Service, nodes []*v1.Node, clusterName string, shouldRemoveVMSetFromSLB func(string) bool) (*network.LoadBalancer, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CleanupVMSetFromBackendPoolByCondition", slb, service, nodes, clusterName, shouldRemoveVMSetFromSLB) @@ -71,29 +56,27 @@ func (m *MockBackendPool) CleanupVMSetFromBackendPoolByCondition(slb *network.Lo return ret0, ret1 } -// CleanupVMSetFromBackendPoolByCondition indicates an expected call of CleanupVMSetFromBackendPoolByCondition +// CleanupVMSetFromBackendPoolByCondition indicates an expected call of CleanupVMSetFromBackendPoolByCondition. func (mr *MockBackendPoolMockRecorder) CleanupVMSetFromBackendPoolByCondition(slb, service, nodes, clusterName, shouldRemoveVMSetFromSLB interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanupVMSetFromBackendPoolByCondition", reflect.TypeOf((*MockBackendPool)(nil).CleanupVMSetFromBackendPoolByCondition), slb, service, nodes, clusterName, shouldRemoveVMSetFromSLB) } -// ReconcileBackendPools mocks base method -func (m *MockBackendPool) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, error) { +// EnsureHostsInPool mocks base method. +func (m *MockBackendPool) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, backendPoolID, vmSetName, clusterName, lbName string, backendPool network.BackendAddressPool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ReconcileBackendPools", clusterName, service, lb) - ret0, _ := ret[0].(bool) - ret1, _ := ret[1].(bool) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret := m.ctrl.Call(m, "EnsureHostsInPool", service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool) + ret0, _ := ret[0].(error) + return ret0 } -// ReconcileBackendPools indicates an expected call of ReconcileBackendPools -func (mr *MockBackendPoolMockRecorder) ReconcileBackendPools(clusterName, service, lb interface{}) *gomock.Call { +// EnsureHostsInPool indicates an expected call of EnsureHostsInPool. +func (mr *MockBackendPoolMockRecorder) EnsureHostsInPool(service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReconcileBackendPools", reflect.TypeOf((*MockBackendPool)(nil).ReconcileBackendPools), clusterName, service, lb) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureHostsInPool", reflect.TypeOf((*MockBackendPool)(nil).EnsureHostsInPool), service, nodes, backendPoolID, vmSetName, clusterName, lbName, backendPool) } -// GetBackendPrivateIPs mocks base method +// GetBackendPrivateIPs mocks base method. func (m *MockBackendPool) GetBackendPrivateIPs(clusterName string, service *v1.Service, lb *network.LoadBalancer) ([]string, []string) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetBackendPrivateIPs", clusterName, service, lb) @@ -102,8 +85,25 @@ func (m *MockBackendPool) GetBackendPrivateIPs(clusterName string, service *v1.S return ret0, ret1 } -// GetBackendPrivateIPs indicates an expected call of GetBackendPrivateIPs +// GetBackendPrivateIPs indicates an expected call of GetBackendPrivateIPs. func (mr *MockBackendPoolMockRecorder) GetBackendPrivateIPs(clusterName, service, lb interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBackendPrivateIPs", reflect.TypeOf((*MockBackendPool)(nil).GetBackendPrivateIPs), clusterName, service, lb) } + +// ReconcileBackendPools mocks base method. +func (m *MockBackendPool) ReconcileBackendPools(clusterName string, service *v1.Service, lb *network.LoadBalancer) (bool, bool, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReconcileBackendPools", clusterName, service, lb) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(bool) + ret3, _ := ret[3].(error) + return ret0, ret1, ret2, ret3 +} + +// ReconcileBackendPools indicates an expected call of ReconcileBackendPools. +func (mr *MockBackendPoolMockRecorder) ReconcileBackendPools(clusterName, service, lb interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReconcileBackendPools", reflect.TypeOf((*MockBackendPool)(nil).ReconcileBackendPools), clusterName, service, lb) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_vmsets.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_vmsets.go index be51095b08d7..c4102e2e971a 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_vmsets.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_mock_vmsets.go @@ -20,10 +20,11 @@ import ( context "context" reflect "reflect" - compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + network "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" azure "github.com/Azure/go-autorest/autorest/azure" gomock "github.com/golang/mock/gomock" + v1 "k8s.io/api/core/v1" types "k8s.io/apimachinery/pkg/types" cloud_provider "k8s.io/cloud-provider" @@ -98,32 +99,32 @@ func (mr *MockVMSetMockRecorder) DetachDisk(ctx, nodeName, diskMap interface{}) } // EnsureBackendPoolDeleted mocks base method. -func (m *MockVMSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { +func (m *MockVMSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureBackendPoolDeleted", service, backendPoolID, vmSetName, backendAddressPools, deleteFromVMSet) + ret := m.ctrl.Call(m, "EnsureBackendPoolDeleted", service, backendPoolIDs, vmSetName, backendAddressPools, deleteFromVMSet) ret0, _ := ret[0].(bool) ret1, _ := ret[1].(error) return ret0, ret1 } // EnsureBackendPoolDeleted indicates an expected call of EnsureBackendPoolDeleted. -func (mr *MockVMSetMockRecorder) EnsureBackendPoolDeleted(service, backendPoolID, vmSetName, backendAddressPools, deleteFromVMSet interface{}) *gomock.Call { +func (mr *MockVMSetMockRecorder) EnsureBackendPoolDeleted(service, backendPoolIDs, vmSetName, backendAddressPools, deleteFromVMSet interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureBackendPoolDeleted", reflect.TypeOf((*MockVMSet)(nil).EnsureBackendPoolDeleted), service, backendPoolID, vmSetName, backendAddressPools, deleteFromVMSet) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureBackendPoolDeleted", reflect.TypeOf((*MockVMSet)(nil).EnsureBackendPoolDeleted), service, backendPoolIDs, vmSetName, backendAddressPools, deleteFromVMSet) } // EnsureBackendPoolDeletedFromVMSets mocks base method. -func (m *MockVMSet) EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap map[string]bool, backendPoolID string) error { +func (m *MockVMSet) EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap map[string]bool, backendPoolIDs []string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureBackendPoolDeletedFromVMSets", vmSetNamesMap, backendPoolID) + ret := m.ctrl.Call(m, "EnsureBackendPoolDeletedFromVMSets", vmSetNamesMap, backendPoolIDs) ret0, _ := ret[0].(error) return ret0 } // EnsureBackendPoolDeletedFromVMSets indicates an expected call of EnsureBackendPoolDeletedFromVMSets. -func (mr *MockVMSetMockRecorder) EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap, backendPoolID interface{}) *gomock.Call { +func (mr *MockVMSetMockRecorder) EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap, backendPoolIDs interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureBackendPoolDeletedFromVMSets", reflect.TypeOf((*MockVMSet)(nil).EnsureBackendPoolDeletedFromVMSets), vmSetNamesMap, backendPoolID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureBackendPoolDeletedFromVMSets", reflect.TypeOf((*MockVMSet)(nil).EnsureBackendPoolDeletedFromVMSets), vmSetNamesMap, backendPoolIDs) } // EnsureHostInPool mocks base method. @@ -415,10 +416,25 @@ func (mr *MockVMSetMockRecorder) UpdateVM(ctx, nodeName interface{}) *gomock.Cal return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateVM", reflect.TypeOf((*MockVMSet)(nil).UpdateVM), ctx, nodeName) } +// UpdateVMAsync mocks base method. +func (m *MockVMSet) UpdateVMAsync(ctx context.Context, nodeName types.NodeName) (*azure.Future, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateVMAsync", ctx, nodeName) + ret0, _ := ret[0].(*azure.Future) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateVMAsync indicates an expected call of UpdateVMAsync. +func (mr *MockVMSetMockRecorder) UpdateVMAsync(ctx, nodeName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateVMAsync", reflect.TypeOf((*MockVMSet)(nil).UpdateVMAsync), ctx, nodeName) +} + // WaitForUpdateResult mocks base method. func (m *MockVMSet) WaitForUpdateResult(ctx context.Context, future *azure.Future, nodeName types.NodeName, source string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "WaitForUpdateResult", ctx, future, source) + ret := m.ctrl.Call(m, "WaitForUpdateResult", ctx, future, nodeName, source) ret0, _ := ret[0].(error) return ret0 } @@ -426,5 +442,5 @@ func (m *MockVMSet) WaitForUpdateResult(ctx context.Context, future *azure.Futur // WaitForUpdateResult indicates an expected call of WaitForUpdateResult. func (mr *MockVMSetMockRecorder) WaitForUpdateResult(ctx, future, nodeName, source interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitForUpdateResult", reflect.TypeOf((*MockVMSet)(nil).WaitForUpdateResult), ctx, future, source) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitForUpdateResult", reflect.TypeOf((*MockVMSet)(nil).WaitForUpdateResult), ctx, future, nodeName, source) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice.go index 43c356a6f8ae..fc65530ab1a5 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice.go @@ -21,14 +21,15 @@ import ( "net" "strings" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/metrics" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) @@ -40,33 +41,66 @@ func (az *Cloud) reconcilePrivateLinkService( fipConfig *network.FrontendIPConfiguration, wantPLS bool, ) error { - createPLS := wantPLS && serviceRequiresPLS(service) + isinternal := requiresInternalLoadBalancer(service) + pipRG := az.getPublicIPAddressResourceGroup(service) + _, _, fipIPVersion := az.serviceOwnsFrontendIP(*fipConfig, service) serviceName := getServiceName(service) + var isIPv6 bool + var err error + if fipIPVersion != "" { + isIPv6 = fipIPVersion == network.IPv6 + } else { + if isIPv6, err = az.isFIPIPv6(service, pipRG, fipConfig); err != nil { + klog.Errorf("reconcilePrivateLinkService for service(%s): failed to get FIP IP family: %v", serviceName, err) + return err + } + } + createPLS := wantPLS && serviceRequiresPLS(service) + isDualStack := isServiceDualStack(service) + if isIPv6 { + if isDualStack || !createPLS { + klog.V(2).Infof("IPv6 is not supported for private link service, skip reconcilePrivateLinkService for service(%s)", serviceName) + return nil + } + return fmt.Errorf("IPv6 is not supported for private link service") + } + fipConfigID := fipConfig.ID - klog.V(2).Infof("reconcilePrivateLinkService for service(%s) - LB fipConfigID(%s) - wantPLS(%t) - createPLS(%t)", serviceName, to.String(fipConfig.Name), wantPLS, createPLS) + klog.V(2).Infof("reconcilePrivateLinkService for service(%s) - LB fipConfigID(%s) - wantPLS(%t) - createPLS(%t)", serviceName, pointer.StringDeref(fipConfig.Name, ""), wantPLS, createPLS) + + request := "ensure_privatelinkservice" + if !wantPLS { + request = "ensure_privatelinkservice_deleted" + } + mc := metrics.NewMetricContext("services", request, az.ResourceGroup, az.getNetworkResourceSubscriptionID(), serviceName) + + isOperationSucceeded := false + defer func() { + mc.ObserveOperationWithResult(isOperationSucceeded) + }() if createPLS { // Firstly, make sure it's internal service - if !requiresInternalLoadBalancer(service) && !consts.IsK8sServiceDisableLoadBalancerFloatingIP(service) { + if !isinternal && !consts.IsK8sServiceDisableLoadBalancerFloatingIP(service) { return fmt.Errorf("reconcilePrivateLinkService for service(%s): service requiring private link service must be internal or disable floating ip", serviceName) } // Secondly, check if there is a private link service already created existingPLS, err := az.getPrivateLinkService(fipConfigID, azcache.CacheReadTypeDefault) if err != nil { - klog.Errorf("reconcilePrivateLinkService for service(%s): getPrivateLinkService(%s) failed: %v", serviceName, to.String(fipConfigID), err) + klog.Errorf("reconcilePrivateLinkService for service(%s): getPrivateLinkService(%s) failed: %v", serviceName, pointer.StringDeref(fipConfigID, ""), err) return err } - exists := !strings.EqualFold(to.String(existingPLS.ID), consts.PrivateLinkServiceNotExistID) + exists := !strings.EqualFold(pointer.StringDeref(existingPLS.ID, ""), consts.PrivateLinkServiceNotExistID) if exists { - klog.V(4).Infof("reconcilePrivateLinkService for service(%s): found existing private link service attached(%s)", serviceName, to.String(existingPLS.Name)) + klog.V(4).Infof("reconcilePrivateLinkService for service(%s): found existing private link service attached(%s)", serviceName, pointer.StringDeref(existingPLS.Name, "")) if !isManagedPrivateLinkSerivce(&existingPLS, clusterName) { return fmt.Errorf( "reconcilePrivateLinkService for service(%s) failed: LB frontend(%s) already has unmanaged private link service(%s)", serviceName, - to.String(fipConfigID), - to.String(existingPLS.ID), + pointer.StringDeref(fipConfigID, ""), + pointer.StringDeref(existingPLS.ID, ""), ) } // If there is an existing private link service, only owner service can update its properties @@ -76,15 +110,15 @@ func (az *Cloud) reconcilePrivateLinkService( return fmt.Errorf( "reconcilePrivateLinkService for service(%s) failed: LB frontend(%s) already has existing private link service(%s) owned by service(%s)", serviceName, - to.String(fipConfigID), - to.String(existingPLS.Name), + pointer.StringDeref(fipConfigID, ""), + pointer.StringDeref(existingPLS.Name, ""), ownerService, ) } klog.V(2).Infof( "reconcilePrivateLinkService for service(%s): automatically share private link service(%s) owned by service(%s)", serviceName, - to.String(existingPLS.Name), + pointer.StringDeref(existingPLS.Name, ""), ownerService, ) return nil @@ -118,7 +152,7 @@ func (az *Cloud) reconcilePrivateLinkService( klog.Errorf("reconcilePrivateLinkService for service(%s) disable PLS network policy failed for pls(%s): %v", serviceName, plsName, err.Error()) return err } - existingPLS.Etag = to.StringPtr("") + existingPLS.Etag = pointer.String("") err = az.CreateOrUpdatePLS(service, existingPLS) if err != nil { klog.Errorf("reconcilePrivateLinkService for service(%s) abort backoff: pls(%s) - updating: %s", serviceName, plsName, err.Error()) @@ -128,20 +162,21 @@ func (az *Cloud) reconcilePrivateLinkService( } else if !wantPLS { existingPLS, err := az.getPrivateLinkService(fipConfigID, azcache.CacheReadTypeDefault) if err != nil { - klog.Errorf("reconcilePrivateLinkService for service(%s): getPrivateLinkService(%s) failed: %v", serviceName, to.String(fipConfigID), err) + klog.Errorf("reconcilePrivateLinkService for service(%s): getPrivateLinkService(%s) failed: %v", serviceName, pointer.StringDeref(fipConfigID, ""), err) return err } - exists := !strings.EqualFold(to.String(existingPLS.ID), consts.PrivateLinkServiceNotExistID) + exists := !strings.EqualFold(pointer.StringDeref(existingPLS.ID, ""), consts.PrivateLinkServiceNotExistID) if exists { deleteErr := az.safeDeletePLS(&existingPLS, service) if deleteErr != nil { - klog.Errorf("reconcilePrivateLinkService for service(%s): deletePLS for frontEnd(%s) failed: %v", serviceName, to.String(fipConfigID), err) + klog.Errorf("reconcilePrivateLinkService for service(%s): deletePLS for frontEnd(%s) failed: %v", serviceName, pointer.StringDeref(fipConfigID, ""), err) return deleteErr.Error() } } } + isOperationSucceeded = true klog.V(2).Infof("reconcilePrivateLinkService for service(%s) finished", serviceName) return nil } @@ -182,19 +217,19 @@ func (az *Cloud) safeDeletePLS(pls *network.PrivateLinkService, service *v1.Serv peConns := pls.PrivateEndpointConnections if peConns != nil { for _, peConn := range *peConns { - klog.V(2).Infof("deletePLS: deleting PEConnection %s", to.String(peConn.Name)) - rerr := az.DeletePEConn(service, to.String(pls.Name), to.String(peConn.Name)) + klog.V(2).Infof("deletePLS: deleting PEConnection %s", pointer.StringDeref(peConn.Name, "")) + rerr := az.DeletePEConn(service, pointer.StringDeref(pls.Name, ""), pointer.StringDeref(peConn.Name, "")) if rerr != nil { return rerr } } } - rerr := az.DeletePLS(service, to.String(pls.Name), to.String((*pls.LoadBalancerFrontendIPConfigurations)[0].ID)) + rerr := az.DeletePLS(service, pointer.StringDeref(pls.Name, ""), pointer.StringDeref((*pls.LoadBalancerFrontendIPConfigurations)[0].ID, "")) if rerr != nil { return rerr } - klog.V(2).Infof("safeDeletePLS(%s) finished", to.String(pls.Name)) + klog.V(2).Infof("safeDeletePLS(%s) finished", pointer.StringDeref(pls.Name, "")) return nil } @@ -209,11 +244,11 @@ func (az *Cloud) getPrivateLinkServiceName( if nameFromService, found := service.Annotations[consts.ServiceAnnotationPLSName]; found { nameFromService = strings.TrimSpace(nameFromService) - if existingName != nil && !strings.EqualFold(to.String(existingName), nameFromService) { + if existingName != nil && !strings.EqualFold(pointer.StringDeref(existingName, ""), nameFromService) { return "", fmt.Errorf( "getPrivateLinkServiceName(%s) failed: cannot change existing private link service name (%s) to (%s)", serviceName, - to.String(existingName), + pointer.StringDeref(existingName, ""), nameFromService, ) } @@ -221,7 +256,7 @@ func (az *Cloud) getPrivateLinkServiceName( } if existingName != nil { - return to.String(existingName), nil + return pointer.StringDeref(existingName, ""), nil } // default PLS name: pls- @@ -339,19 +374,19 @@ func (az *Cloud) reconcilePLSIpConfigs( existingStaticIps := make([]string, 0) for _, ipConfig := range *existingPLS.IPConfigurations { - if !strings.EqualFold(to.String(subnet.ID), to.String(ipConfig.Subnet.ID)) { + if !strings.EqualFold(pointer.StringDeref(subnet.ID, ""), pointer.StringDeref(ipConfig.Subnet.ID, "")) { changed = true } - if strings.EqualFold(string(ipConfig.PrivateIPAllocationMethod), string(network.IPAllocationMethodStatic)) { - klog.V(10).Infof("Found static IP: %s", to.String(ipConfig.PrivateIPAddress)) - if _, found := staticIps[to.String(ipConfig.PrivateIPAddress)]; !found { + if strings.EqualFold(string(ipConfig.PrivateIPAllocationMethod), string(network.Static)) { + klog.V(10).Infof("Found static IP: %s", pointer.StringDeref(ipConfig.PrivateIPAddress, "")) + if _, found := staticIps[pointer.StringDeref(ipConfig.PrivateIPAddress, "")]; !found { changed = true } - existingStaticIps = append(existingStaticIps, to.String(ipConfig.PrivateIPAddress)) + existingStaticIps = append(existingStaticIps, pointer.StringDeref(ipConfig.PrivateIPAddress, "")) } if *ipConfig.Primary { - if strings.EqualFold(string(ipConfig.PrivateIPAllocationMethod), string(network.IPAllocationMethodStatic)) { - if !strings.EqualFold(primaryIP, to.String(ipConfig.PrivateIPAddress)) { + if strings.EqualFold(string(ipConfig.PrivateIPAllocationMethod), string(network.Static)) { + if !strings.EqualFold(primaryIP, pointer.StringDeref(ipConfig.PrivateIPAddress, "")) { changed = true } } else { @@ -371,32 +406,32 @@ func (az *Cloud) reconcilePLSIpConfigs( for k := range staticIps { ip := k isPrimary := strings.EqualFold(ip, primaryIP) - configName := fmt.Sprintf("%s-%s-static-%s", to.String(subnet.Name), to.String(existingPLS.Name), ip) + configName := fmt.Sprintf("%s-%s-static-%s", pointer.StringDeref(subnet.Name, ""), pointer.StringDeref(existingPLS.Name, ""), ip) ipConfigs = append(ipConfigs, network.PrivateLinkServiceIPConfiguration{ Name: &configName, PrivateLinkServiceIPConfigurationProperties: &network.PrivateLinkServiceIPConfigurationProperties{ PrivateIPAddress: &ip, - PrivateIPAllocationMethod: network.IPAllocationMethodStatic, + PrivateIPAllocationMethod: network.Static, Subnet: &network.Subnet{ ID: subnet.ID, }, Primary: &isPrimary, - PrivateIPAddressVersion: network.IPVersionIPv4, + PrivateIPAddressVersion: network.IPv4, }, }) } for i := 0; i < int(ipConfigCount)-len(staticIps); i++ { isPrimary := primaryIP == "" && i == 0 - configName := fmt.Sprintf("%s-%s-dynamic-%d", to.String(subnet.Name), to.String(existingPLS.Name), i) + configName := fmt.Sprintf("%s-%s-dynamic-%d", pointer.StringDeref(subnet.Name, ""), pointer.StringDeref(existingPLS.Name, ""), i) ipConfigs = append(ipConfigs, network.PrivateLinkServiceIPConfiguration{ Name: &configName, PrivateLinkServiceIPConfigurationProperties: &network.PrivateLinkServiceIPConfigurationProperties{ - PrivateIPAllocationMethod: network.IPAllocationMethodDynamic, + PrivateIPAllocationMethod: network.Dynamic, Subnet: &network.Subnet{ ID: subnet.ID, }, Primary: &isPrimary, - PrivateIPAddressVersion: network.IPVersionIPv4, + PrivateIPAddressVersion: network.IPv4, }, }) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice_repo.go new file mode 100644 index 000000000000..ae43681f0ead --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_privatelinkservice_repo.go @@ -0,0 +1,142 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "encoding/json" + "net/http" + "strings" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" +) + +func (az *Cloud) CreateOrUpdatePLS(service *v1.Service, pls network.PrivateLinkService) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.PrivateLinkServiceClient.CreateOrUpdate(ctx, az.PrivateLinkServiceResourceGroup, pointer.StringDeref(pls.Name, ""), pls, pointer.StringDeref(pls.Etag, "")) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.plsCache.Delete(pointer.StringDeref((*pls.LoadBalancerFrontendIPConfigurations)[0].ID, "")) + return nil + } + + rtJSON, _ := json.Marshal(pls) + klog.Warningf("PrivateLinkServiceClient.CreateOrUpdate(%s) failed: %v, PrivateLinkService request: %s", pointer.StringDeref(pls.Name, ""), rerr.Error(), string(rtJSON)) + + // Invalidate the cache because etag mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("Private link service cache for %s is cleanup because of http.StatusPreconditionFailed", pointer.StringDeref(pls.Name, "")) + _ = az.plsCache.Delete(pointer.StringDeref((*pls.LoadBalancerFrontendIPConfigurations)[0].ID, "")) + } + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("Private link service for %s is cleanup because CreateOrUpdatePrivateLinkService is canceled by another operation", pointer.StringDeref(pls.Name, "")) + _ = az.plsCache.Delete(pointer.StringDeref((*pls.LoadBalancerFrontendIPConfigurations)[0].ID, "")) + } + klog.Errorf("PrivateLinkServiceClient.CreateOrUpdate(%s) failed: %v", pointer.StringDeref(pls.Name, ""), rerr.Error()) + return rerr.Error() +} + +// DeletePLS invokes az.PrivateLinkServiceClient.Delete with exponential backoff retry +func (az *Cloud) DeletePLS(service *v1.Service, plsName string, plsLBFrontendID string) *retry.Error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.PrivateLinkServiceClient.Delete(ctx, az.PrivateLinkServiceResourceGroup, plsName) + if rerr == nil { + // Invalidate the cache right after deleting + _ = az.plsCache.Delete(plsLBFrontendID) + return nil + } + + klog.Errorf("PrivateLinkServiceClient.DeletePLS(%s) failed: %s", plsName, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "DeletePrivateLinkService", rerr.Error().Error()) + return rerr +} + +// DeletePEConn invokes az.PrivateLinkServiceClient.DeletePEConnection with exponential backoff retry +func (az *Cloud) DeletePEConn(service *v1.Service, plsName string, peConnName string) *retry.Error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.PrivateLinkServiceClient.DeletePEConnection(ctx, az.PrivateLinkServiceResourceGroup, plsName, peConnName) + if rerr == nil { + return nil + } + + klog.Errorf("PrivateLinkServiceClient.DeletePEConnection(%s-%s) failed: %s", plsName, peConnName, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "DeletePrivateEndpointConnection", rerr.Error().Error()) + return rerr +} + +func (az *Cloud) newPLSCache() (azcache.Resource, error) { + // for PLS cache, key is LBFrontendIPConfiguration ID + getter := func(key string) (interface{}, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + plsList, err := az.PrivateLinkServiceClient.List(ctx, az.PrivateLinkServiceResourceGroup) + exists, rerr := checkResourceExistsFromError(err) + if rerr != nil { + return nil, rerr.Error() + } + + if exists { + for i := range plsList { + pls := plsList[i] + if pls.PrivateLinkServiceProperties == nil { + continue + } + fipConfigs := pls.PrivateLinkServiceProperties.LoadBalancerFrontendIPConfigurations + if fipConfigs == nil { + continue + } + for _, fipConfig := range *fipConfigs { + if strings.EqualFold(*fipConfig.ID, key) { + return &pls, nil + } + } + + } + } + + klog.V(2).Infof("No privateLinkService found for frontendIPConfig %q", key) + plsNotExistID := consts.PrivateLinkServiceNotExistID + return &network.PrivateLinkService{ID: &plsNotExistID}, nil + } + + if az.PlsCacheTTLInSeconds == 0 { + az.PlsCacheTTLInSeconds = plsCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.PlsCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} + +func (az *Cloud) getPrivateLinkService(frontendIPConfigID *string, crt azcache.AzureCacheReadType) (pls network.PrivateLinkService, err error) { + cachedPLS, err := az.plsCache.GetWithDeepCopy(*frontendIPConfigID, crt) + if err != nil { + return pls, err + } + return *(cachedPLS.(*network.PrivateLinkService)), nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_publicip_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_publicip_repo.go new file mode 100644 index 000000000000..2ace3b9925a0 --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_publicip_repo.go @@ -0,0 +1,227 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" + "sync" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + + v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/util/deepcopy" +) + +// CreateOrUpdatePIP invokes az.PublicIPAddressesClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdatePIP(service *v1.Service, pipResourceGroup string, pip network.PublicIPAddress) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.PublicIPAddressesClient.CreateOrUpdate(ctx, pipResourceGroup, pointer.StringDeref(pip.Name, ""), pip) + klog.V(10).Infof("PublicIPAddressesClient.CreateOrUpdate(%s, %s): end", pipResourceGroup, pointer.StringDeref(pip.Name, "")) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.pipCache.Delete(pipResourceGroup) + return nil + } + + pipJSON, _ := json.Marshal(pip) + klog.Warningf("PublicIPAddressesClient.CreateOrUpdate(%s, %s) failed: %s, PublicIP request: %s", pipResourceGroup, pointer.StringDeref(pip.Name, ""), rerr.Error().Error(), string(pipJSON)) + az.Event(service, v1.EventTypeWarning, "CreateOrUpdatePublicIPAddress", rerr.Error().Error()) + + // Invalidate the cache because ETAG precondition mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("PublicIP cache for (%s, %s) is cleanup because of http.StatusPreconditionFailed", pipResourceGroup, pointer.StringDeref(pip.Name, "")) + _ = az.pipCache.Delete(pipResourceGroup) + } + + retryErrorMessage := rerr.Error().Error() + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(retryErrorMessage), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("PublicIP cache for (%s, %s) is cleanup because CreateOrUpdate is canceled by another operation", pipResourceGroup, pointer.StringDeref(pip.Name, "")) + _ = az.pipCache.Delete(pipResourceGroup) + } + + return rerr.Error() +} + +// DeletePublicIP invokes az.PublicIPAddressesClient.Delete with exponential backoff retry +func (az *Cloud) DeletePublicIP(service *v1.Service, pipResourceGroup string, pipName string) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.PublicIPAddressesClient.Delete(ctx, pipResourceGroup, pipName) + if rerr != nil { + klog.Errorf("PublicIPAddressesClient.Delete(%s) failed: %s", pipName, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "DeletePublicIPAddress", rerr.Error().Error()) + + if strings.Contains(rerr.Error().Error(), consts.CannotDeletePublicIPErrorMessageCode) { + klog.Warningf("DeletePublicIP for public IP %s failed with error %v, this is because other resources are referencing the public IP. The deletion of the service will continue.", pipName, rerr.Error()) + return nil + } + return rerr.Error() + } + + // Invalidate the cache right after deleting + _ = az.pipCache.Delete(pipResourceGroup) + return nil +} + +func (az *Cloud) newPIPCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + + pipResourceGroup := key + pipList, rerr := az.PublicIPAddressesClient.List(ctx, pipResourceGroup) + if rerr != nil { + return nil, rerr.Error() + } + + pipMap := &sync.Map{} + for _, pip := range pipList { + pip := pip + pipMap.Store(pointer.StringDeref(pip.Name, ""), &pip) + } + return pipMap, nil + } + + if az.PublicIPCacheTTLInSeconds == 0 { + az.PublicIPCacheTTLInSeconds = publicIPCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.PublicIPCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} + +func (az *Cloud) getPublicIPAddress(pipResourceGroup string, pipName string, crt azcache.AzureCacheReadType) (network.PublicIPAddress, bool, error) { + cached, err := az.pipCache.Get(pipResourceGroup, crt) + if err != nil { + return network.PublicIPAddress{}, false, err + } + + pips := cached.(*sync.Map) + pip, ok := pips.Load(pipName) + if !ok { + // pip not found, refresh cache and retry + cached, err = az.pipCache.Get(pipResourceGroup, azcache.CacheReadTypeForceRefresh) + if err != nil { + return network.PublicIPAddress{}, false, err + } + pips = cached.(*sync.Map) + pip, ok = pips.Load(pipName) + if !ok { + return network.PublicIPAddress{}, false, nil + } + } + + pip = pip.(*network.PublicIPAddress) + return *(deepcopy.Copy(pip).(*network.PublicIPAddress)), true, nil +} + +func (az *Cloud) listPIP(pipResourceGroup string, crt azcache.AzureCacheReadType) ([]network.PublicIPAddress, error) { + cached, err := az.pipCache.Get(pipResourceGroup, crt) + if err != nil { + return nil, err + } + pips := cached.(*sync.Map) + var ret []network.PublicIPAddress + pips.Range(func(key, value interface{}) bool { + pip := value.(*network.PublicIPAddress) + ret = append(ret, *pip) + return true + }) + return ret, nil +} + +func (az *Cloud) findMatchedPIP(loadBalancerIP, pipName, pipResourceGroup string) (pip *network.PublicIPAddress, err error) { + pips, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeDefault) + if err != nil { + return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: failed to listPIP: %w", err) + } + + if loadBalancerIP != "" { + pip, err = az.findMatchedPIPByLoadBalancerIP(&pips, loadBalancerIP, pipResourceGroup) + if err != nil { + return nil, err + } + return pip, nil + } + + if pipResourceGroup != "" { + pip, err = az.findMatchedPIPByName(&pips, pipName, pipResourceGroup) + if err != nil { + return nil, err + } + } + return pip, nil +} + +func (az *Cloud) findMatchedPIPByName(pips *[]network.PublicIPAddress, pipName, pipResourceGroup string) (*network.PublicIPAddress, error) { + for _, pip := range *pips { + if strings.EqualFold(pointer.StringDeref(pip.Name, ""), pipName) { + return &pip, nil + } + } + + pipList, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeForceRefresh) + if err != nil { + return nil, fmt.Errorf("findMatchedPIPByName: failed to listPIP force refresh: %w", err) + } + for _, pip := range pipList { + if strings.EqualFold(pointer.StringDeref(pip.Name, ""), pipName) { + return &pip, nil + } + } + + return nil, fmt.Errorf("findMatchedPIPByName: failed to find PIP %s in resource group %s", pipName, pipResourceGroup) +} + +func (az *Cloud) findMatchedPIPByLoadBalancerIP(pips *[]network.PublicIPAddress, loadBalancerIP, pipResourceGroup string) (*network.PublicIPAddress, error) { + pip, err := getExpectedPIPFromListByIPAddress(*pips, loadBalancerIP) + if err != nil { + pipList, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeForceRefresh) + if err != nil { + return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: failed to listPIP force refresh: %w", err) + } + + pip, err = getExpectedPIPFromListByIPAddress(pipList, loadBalancerIP) + if err != nil { + return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: cannot find public IP with IP address %s in resource group %s", loadBalancerIP, pipResourceGroup) + } + } + + return pip, nil +} + +func getExpectedPIPFromListByIPAddress(pips []network.PublicIPAddress, ip string) (*network.PublicIPAddress, error) { + for _, pip := range pips { + if pip.PublicIPAddressPropertiesFormat.IPAddress != nil && + *pip.PublicIPAddressPropertiesFormat.IPAddress == ip { + return &pip, nil + } + } + + return nil, fmt.Errorf("getExpectedPIPFromListByIPAddress: cannot find public IP with IP address %s", ip) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routes.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routes.go index 63e924616bd6..4379531bf6f5 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routes.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routes.go @@ -23,25 +23,20 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" "sigs.k8s.io/cloud-provider-azure/pkg/metrics" ) -var ( - // routeUpdateInterval defines the route reconciling interval. - routeUpdateInterval = 30 * time.Second -) - // routeOperation defines the allowed operations for route updating. type routeOperation string @@ -59,11 +54,11 @@ type delayedRouteOperation struct { route network.Route routeTableTags map[string]*string operation routeOperation - result chan error + result chan batchOperationResult } // wait waits for the operation completion and returns the result. -func (op *delayedRouteOperation) wait() error { +func (op *delayedRouteOperation) wait() batchOperationResult { return <-op.result } @@ -77,27 +72,26 @@ type delayedRouteUpdater struct { interval time.Duration lock sync.Mutex - routesToUpdate []*delayedRouteOperation + routesToUpdate []batchOperation } // newDelayedRouteUpdater creates a new delayedRouteUpdater. -func newDelayedRouteUpdater(az *Cloud, interval time.Duration) *delayedRouteUpdater { +func newDelayedRouteUpdater(az *Cloud, interval time.Duration) batchProcessor { return &delayedRouteUpdater{ az: az, interval: interval, - routesToUpdate: make([]*delayedRouteOperation, 0), + routesToUpdate: make([]batchOperation, 0), } } // run starts the updater reconciling loop. -func (d *delayedRouteUpdater) run() { - err := wait.PollImmediateInfinite(d.interval, func() (bool, error) { +func (d *delayedRouteUpdater) run(ctx context.Context) { + klog.Info("delayedRouteUpdater: started") + err := wait.PollUntilContextCancel(ctx, d.interval, true, func(ctx context.Context) (bool, error) { d.updateRoutes() return false, nil }) - if err != nil { // this should never happen, if it does, panic - panic(err) - } + klog.Info("delayedRouteUpdater: stopped due to %s", err.Error()) } // updateRoutes invokes route table client to update all routes. @@ -114,11 +108,12 @@ func (d *delayedRouteUpdater) updateRoutes() { var err error defer func() { // Notify all the goroutines. - for _, rt := range d.routesToUpdate { - rt.result <- err + for _, op := range d.routesToUpdate { + rt := op.(*delayedRouteOperation) + rt.result <- newBatchOperationResult("", false, err) } // Clear all the jobs. - d.routesToUpdate = make([]*delayedRouteOperation, 0) + d.routesToUpdate = make([]batchOperation, 0) }() var ( @@ -158,7 +153,8 @@ func (d *delayedRouteUpdater) updateRoutes() { onlyUpdateTags = false } - for _, rt := range d.routesToUpdate { + for _, op := range d.routesToUpdate { + rt := op.(*delayedRouteOperation) if rt.operation == routeTableOperationUpdateTags { routeTable.Tags = rt.routeTableTags dirty = true @@ -168,13 +164,13 @@ func (d *delayedRouteUpdater) updateRoutes() { routeMatch := false onlyUpdateTags = false for i, existingRoute := range routes { - if strings.EqualFold(to.String(existingRoute.Name), to.String(rt.route.Name)) { + if strings.EqualFold(pointer.StringDeref(existingRoute.Name, ""), pointer.StringDeref(rt.route.Name, "")) { // delete the name-matched routes here (missing routes would be added later if the operation is add). routes = append(routes[:i], routes[i+1:]...) if existingRoute.RoutePropertiesFormat != nil && rt.route.RoutePropertiesFormat != nil && - strings.EqualFold(to.String(existingRoute.AddressPrefix), to.String(rt.route.AddressPrefix)) && - strings.EqualFold(to.String(existingRoute.NextHopIPAddress), to.String(rt.route.NextHopIPAddress)) { + strings.EqualFold(pointer.StringDeref(existingRoute.AddressPrefix, ""), pointer.StringDeref(rt.route.AddressPrefix, "")) && + strings.EqualFold(pointer.StringDeref(existingRoute.NextHopIPAddress, ""), pointer.StringDeref(rt.route.NextHopIPAddress, "")) { routeMatch = true } if rt.operation == routeOperationDelete { @@ -184,7 +180,7 @@ func (d *delayedRouteUpdater) updateRoutes() { } } if rt.operation == routeOperationDelete && !dirty { - klog.Warningf("updateRoutes: route to be deleted %s does not match any of the existing route", to.String(rt.route.Name)) + klog.Warningf("updateRoutes: route to be deleted %s does not match any of the existing route", pointer.StringDeref(rt.route.Name, "")) } // Add missing routes if the operation is add. @@ -217,7 +213,7 @@ func (d *delayedRouteUpdater) updateRoutes() { // and deletes all dualstack routes when dualstack is not enabled. func (d *delayedRouteUpdater) cleanupOutdatedRoutes(existingRoutes []network.Route) (routes []network.Route, changed bool) { for i := len(existingRoutes) - 1; i >= 0; i-- { - existingRouteName := to.String(existingRoutes[i].Name) + existingRouteName := pointer.StringDeref(existingRoutes[i].Name, "") split := strings.Split(existingRouteName, consts.RouteNameSeparator) klog.V(4).Infof("cleanupOutdatedRoutes: checking route %s", existingRouteName) @@ -243,34 +239,41 @@ func (d *delayedRouteUpdater) cleanupOutdatedRoutes(existingRoutes []network.Rou return existingRoutes, changed } -// addRouteOperation adds the routeOperation to delayedRouteUpdater and returns a delayedRouteOperation. -func (d *delayedRouteUpdater) addRouteOperation(operation routeOperation, route network.Route) (*delayedRouteOperation, error) { - d.lock.Lock() - defer d.lock.Unlock() +func getAddRouteOperation(route network.Route) batchOperation { + return &delayedRouteOperation{ + route: route, + operation: routeOperationAdd, + result: make(chan batchOperationResult), + } +} - op := &delayedRouteOperation{ +func getDeleteRouteOperation(route network.Route) batchOperation { + return &delayedRouteOperation{ route: route, - operation: operation, - result: make(chan error), + operation: routeOperationDelete, + result: make(chan batchOperationResult), } - d.routesToUpdate = append(d.routesToUpdate, op) - return op, nil } -// addUpdateRouteTableTagsOperation adds a update route table tags operation to delayedRouteUpdater and returns a delayedRouteOperation. -func (d *delayedRouteUpdater) addUpdateRouteTableTagsOperation(operation routeOperation, tags map[string]*string) (*delayedRouteOperation, error) { +func getUpdateRouteTableTagsOperation(tags map[string]*string) batchOperation { + return &delayedRouteOperation{ + routeTableTags: tags, + operation: routeTableOperationUpdateTags, + result: make(chan batchOperationResult), + } +} + +// addOperation adds the routeOperation to delayedRouteUpdater and returns a delayedRouteOperation. +func (d *delayedRouteUpdater) addOperation(operation batchOperation) batchOperation { d.lock.Lock() defer d.lock.Unlock() - op := &delayedRouteOperation{ - routeTableTags: tags, - operation: operation, - result: make(chan error), - } - d.routesToUpdate = append(d.routesToUpdate, op) - return op, nil + d.routesToUpdate = append(d.routesToUpdate, operation) + return operation } +func (d *delayedRouteUpdater) removeOperation(name string) {} + // ListRoutes lists all managed routes that belong to the specified clusterName func (az *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) { klog.V(10).Infof("ListRoutes: START clusterName=%q", clusterName) @@ -287,7 +290,7 @@ func (az *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudpr } az.routeCIDRsLock.Lock() defer az.routeCIDRsLock.Unlock() - for _, nodeName := range unmanagedNodes.List() { + for _, nodeName := range unmanagedNodes.UnsortedList() { if cidr, ok := az.routeCIDRs[nodeName]; ok { routes = append(routes, &cloudprovider.Route{ Name: nodeName, @@ -300,15 +303,11 @@ func (az *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudpr // ensure the route table is tagged as configured tags, changed := az.ensureRouteTableTagged(&routeTable) if changed { - klog.V(2).Infof("ListRoutes: updating tags on route table %s", to.String(routeTable.Name)) - op, err := az.routeUpdater.addUpdateRouteTableTagsOperation(routeTableOperationUpdateTags, tags) - if err != nil { - klog.Errorf("ListRoutes: failed to add route table operation with error: %v", err) - return nil, err - } + klog.V(2).Infof("ListRoutes: updating tags on route table %s", pointer.StringDeref(routeTable.Name, "")) + op := az.routeUpdater.addOperation(getUpdateRouteTableTagsOperation(tags)) // Wait for operation complete. - err = op.wait() + err = op.wait().err if err != nil { klog.Errorf("ListRoutes: failed to update route table tags with error: %v", err) return nil, err @@ -349,8 +348,8 @@ func processRoutes(ipv6DualStackEnabled bool, routeTable network.RouteTable, exi func (az *Cloud) createRouteTable() error { routeTable := network.RouteTable{ - Name: to.StringPtr(az.RouteTableName), - Location: to.StringPtr(az.Location), + Name: pointer.String(az.RouteTableName), + Location: pointer.String(az.Location), RouteTablePropertiesFormat: &network.RouteTablePropertiesFormat{}, } @@ -417,23 +416,19 @@ func (az *Cloud) CreateRoute(ctx context.Context, clusterName string, nameHint s } routeName := mapNodeNameToRouteName(az.ipv6DualStackEnabled, kubeRoute.TargetNode, kubeRoute.DestinationCIDR) route := network.Route{ - Name: to.StringPtr(routeName), + Name: pointer.String(routeName), RoutePropertiesFormat: &network.RoutePropertiesFormat{ - AddressPrefix: to.StringPtr(kubeRoute.DestinationCIDR), + AddressPrefix: pointer.String(kubeRoute.DestinationCIDR), NextHopType: network.RouteNextHopTypeVirtualAppliance, - NextHopIPAddress: to.StringPtr(targetIP), + NextHopIPAddress: pointer.String(targetIP), }, } klog.V(2).Infof("CreateRoute: creating route for clusterName=%q instance=%q cidr=%q", clusterName, kubeRoute.TargetNode, kubeRoute.DestinationCIDR) - op, err := az.routeUpdater.addRouteOperation(routeOperationAdd, route) - if err != nil { - klog.Errorf("CreateRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) - return err - } + op := az.routeUpdater.addOperation(getAddRouteOperation(route)) // Wait for operation complete. - err = op.wait() + err = op.wait().err if err != nil { klog.Errorf("CreateRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) return err @@ -471,17 +466,13 @@ func (az *Cloud) DeleteRoute(ctx context.Context, clusterName string, kubeRoute routeName := mapNodeNameToRouteName(az.ipv6DualStackEnabled, kubeRoute.TargetNode, kubeRoute.DestinationCIDR) klog.V(2).Infof("DeleteRoute: deleting route. clusterName=%q instance=%q cidr=%q routeName=%q", clusterName, kubeRoute.TargetNode, kubeRoute.DestinationCIDR, routeName) route := network.Route{ - Name: to.StringPtr(routeName), + Name: pointer.String(routeName), RoutePropertiesFormat: &network.RoutePropertiesFormat{}, } - op, err := az.routeUpdater.addRouteOperation(routeOperationDelete, route) - if err != nil { - klog.Errorf("DeleteRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) - return err - } + op := az.routeUpdater.addOperation(getDeleteRouteOperation(route)) // Wait for operation complete. - err = op.wait() + err = op.wait().err if err != nil { klog.Errorf("DeleteRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) return err @@ -492,17 +483,13 @@ func (az *Cloud) DeleteRoute(ctx context.Context, clusterName string, kubeRoute routeNameWithoutIPV6Suffix := strings.Split(routeName, consts.RouteNameSeparator)[0] klog.V(2).Infof("DeleteRoute: deleting route. clusterName=%q instance=%q cidr=%q routeName=%q", clusterName, kubeRoute.TargetNode, kubeRoute.DestinationCIDR, routeNameWithoutIPV6Suffix) route := network.Route{ - Name: to.StringPtr(routeNameWithoutIPV6Suffix), + Name: pointer.String(routeNameWithoutIPV6Suffix), RoutePropertiesFormat: &network.RoutePropertiesFormat{}, } - op, err := az.routeUpdater.addRouteOperation(routeOperationDelete, route) - if err != nil { - klog.Errorf("DeleteRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) - return err - } + op := az.routeUpdater.addOperation(getDeleteRouteOperation(route)) // Wait for operation complete. - err = op.wait() + err = op.wait().err if err != nil { klog.Errorf("DeleteRoute failed for node %q with error: %v", kubeRoute.TargetNode, err) return err diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routetable_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routetable_repo.go new file mode 100644 index 000000000000..9f11101329d6 --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_routetable_repo.go @@ -0,0 +1,84 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "encoding/json" + "net/http" + "strings" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" +) + +// CreateOrUpdateRouteTable invokes az.RouteTablesClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdateRouteTable(routeTable network.RouteTable) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.RouteTablesClient.CreateOrUpdate(ctx, az.RouteTableResourceGroup, az.RouteTableName, routeTable, pointer.StringDeref(routeTable.Etag, "")) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.rtCache.Delete(*routeTable.Name) + return nil + } + + rtJSON, _ := json.Marshal(routeTable) + klog.Warningf("RouteTablesClient.CreateOrUpdate(%s) failed: %v, RouteTable request: %s", pointer.StringDeref(routeTable.Name, ""), rerr.Error(), string(rtJSON)) + + // Invalidate the cache because etag mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("Route table cache for %s is cleanup because of http.StatusPreconditionFailed", *routeTable.Name) + _ = az.rtCache.Delete(*routeTable.Name) + } + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("Route table cache for %s is cleanup because CreateOrUpdateRouteTable is canceled by another operation", *routeTable.Name) + _ = az.rtCache.Delete(*routeTable.Name) + } + klog.Errorf("RouteTablesClient.CreateOrUpdate(%s) failed: %v", az.RouteTableName, rerr.Error()) + return rerr.Error() +} + +func (az *Cloud) newRouteTableCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + rt, err := az.RouteTablesClient.Get(ctx, az.RouteTableResourceGroup, key, "") + exists, rerr := checkResourceExistsFromError(err) + if rerr != nil { + return nil, rerr.Error() + } + + if !exists { + klog.V(2).Infof("Route table %q not found", key) + return nil, nil + } + + return &rt, nil + } + + if az.RouteTableCacheTTLInSeconds == 0 { + az.RouteTableCacheTTLInSeconds = routeTableCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.RouteTableCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_securitygroup_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_securitygroup_repo.go new file mode 100644 index 000000000000..7ecc6b666bb8 --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_securitygroup_repo.go @@ -0,0 +1,105 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" + "time" + + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" +) + +// CreateOrUpdateSecurityGroup invokes az.SecurityGroupsClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdateSecurityGroup(sg network.SecurityGroup) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + rerr := az.SecurityGroupsClient.CreateOrUpdate(ctx, az.SecurityGroupResourceGroup, *sg.Name, sg, pointer.StringDeref(sg.Etag, "")) + klog.V(10).Infof("SecurityGroupsClient.CreateOrUpdate(%s): end", *sg.Name) + if rerr == nil { + // Invalidate the cache right after updating + _ = az.nsgCache.Delete(*sg.Name) + return nil + } + + nsgJSON, _ := json.Marshal(sg) + klog.Warningf("CreateOrUpdateSecurityGroup(%s) failed: %v, NSG request: %s", pointer.StringDeref(sg.Name, ""), rerr.Error(), string(nsgJSON)) + + // Invalidate the cache because ETAG precondition mismatch. + if rerr.HTTPStatusCode == http.StatusPreconditionFailed { + klog.V(3).Infof("SecurityGroup cache for %s is cleanup because of http.StatusPreconditionFailed", *sg.Name) + _ = az.nsgCache.Delete(*sg.Name) + } + + // Invalidate the cache because another new operation has canceled the current request. + if strings.Contains(strings.ToLower(rerr.Error().Error()), consts.OperationCanceledErrorMessage) { + klog.V(3).Infof("SecurityGroup cache for %s is cleanup because CreateOrUpdateSecurityGroup is canceled by another operation", *sg.Name) + _ = az.nsgCache.Delete(*sg.Name) + } + + return rerr.Error() +} + +func (az *Cloud) newNSGCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + nsg, err := az.SecurityGroupsClient.Get(ctx, az.SecurityGroupResourceGroup, key, "") + exists, rerr := checkResourceExistsFromError(err) + if rerr != nil { + return nil, rerr.Error() + } + + if !exists { + klog.V(2).Infof("Security group %q not found", key) + return nil, nil + } + + return &nsg, nil + } + + if az.NsgCacheTTLInSeconds == 0 { + az.NsgCacheTTLInSeconds = nsgCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.NsgCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} + +func (az *Cloud) getSecurityGroup(crt azcache.AzureCacheReadType) (network.SecurityGroup, error) { + nsg := network.SecurityGroup{} + if az.SecurityGroupName == "" { + return nsg, fmt.Errorf("securityGroupName is not configured") + } + + securityGroup, err := az.nsgCache.GetWithDeepCopy(az.SecurityGroupName, crt) + if err != nil { + return nsg, err + } + + if securityGroup == nil { + return nsg, fmt.Errorf("nsg %q not found", az.SecurityGroupName) + } + + return *(securityGroup.(*network.SecurityGroup)), nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_standard.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_standard.go index 53cd282fbf39..1040317becef 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_standard.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_standard.go @@ -25,14 +25,11 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "time" - "unicode" - "sigs.k8s.io/cloud-provider-azure/pkg/consts" - - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" @@ -40,9 +37,10 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" - utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" "sigs.k8s.io/cloud-provider-azure/pkg/metrics" ) @@ -56,6 +54,14 @@ var ( vmasIDRE = regexp.MustCompile(`/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/availabilitySets/(.+)`) ) +const ( + v6Suffix = "IPv6" +) + +var ( + v6SuffixLower = strings.ToLower(v6Suffix) +) + // returns the full identifier of an availabilitySet func (az *Cloud) getAvailabilitySetID(resourceGroup, availabilitySetName string) string { return fmt.Sprintf( @@ -66,7 +72,11 @@ func (az *Cloud) getAvailabilitySetID(resourceGroup, availabilitySetName string) } // returns the full identifier of a loadbalancer frontendipconfiguration. -func (az *Cloud) getFrontendIPConfigID(lbName, rgName, fipConfigName string) string { +func (az *Cloud) getFrontendIPConfigID(lbName, fipConfigName string) string { + return az.getFrontendIPConfigIDWithRG(lbName, az.getLoadBalancerResourceGroup(), fipConfigName) +} + +func (az *Cloud) getFrontendIPConfigIDWithRG(lbName, rgName, fipConfigName string) string { return fmt.Sprintf( consts.FrontendIPConfigIDTemplate, az.getNetworkResourceSubscriptionID(), @@ -76,7 +86,11 @@ func (az *Cloud) getFrontendIPConfigID(lbName, rgName, fipConfigName string) str } // returns the full identifier of a loadbalancer backendpool. -func (az *Cloud) getBackendPoolID(lbName, rgName, backendPoolName string) string { +func (az *Cloud) getBackendPoolID(lbName, backendPoolName string) string { + return az.getBackendPoolIDWithRG(lbName, az.getLoadBalancerResourceGroup(), backendPoolName) +} + +func (az *Cloud) getBackendPoolIDWithRG(lbName, rgName, backendPoolName string) string { return fmt.Sprintf( consts.BackendPoolIDTemplate, az.getNetworkResourceSubscriptionID(), @@ -85,8 +99,19 @@ func (az *Cloud) getBackendPoolID(lbName, rgName, backendPoolName string) string backendPoolName) } +func (az *Cloud) getBackendPoolIDs(clusterName, lbName string) map[bool]string { + return map[bool]string{ + consts.IPVersionIPv4: az.getBackendPoolID(lbName, getBackendPoolName(clusterName, consts.IPVersionIPv4)), + consts.IPVersionIPv6: az.getBackendPoolID(lbName, getBackendPoolName(clusterName, consts.IPVersionIPv6)), + } +} + // returns the full identifier of a loadbalancer probe. -func (az *Cloud) getLoadBalancerProbeID(lbName, rgName, lbRuleName string) string { +func (az *Cloud) getLoadBalancerProbeID(lbName, lbRuleName string) string { + return az.getLoadBalancerProbeIDWithRG(lbName, az.getLoadBalancerResourceGroup(), lbRuleName) +} + +func (az *Cloud) getLoadBalancerProbeIDWithRG(lbName, rgName, lbRuleName string) string { return fmt.Sprintf( consts.LoadBalancerProbeIDTemplate, az.getNetworkResourceSubscriptionID(), @@ -112,31 +137,11 @@ func (az *Cloud) mapLoadBalancerNameToVMSet(lbName string, clusterName string) ( return vmSetName } -// For a load balancer, all frontend ip should reference either a subnet or publicIpAddress. -// Thus Azure do not allow mixed type (public and internal) load balancer. -// So we'd have a separate name for internal load balancer. -// This would be the name for Azure LoadBalancer resource. -func (az *Cloud) getAzureLoadBalancerName(clusterName string, vmSetName string, isInternal bool) string { - if az.LoadBalancerName != "" { - clusterName = az.LoadBalancerName - } - lbNamePrefix := vmSetName - // The LB name prefix is set to the name of the cluster when: - // 1. the LB belongs to the primary agent pool. - // 2. using the single SLB. - useSingleSLB := az.useStandardLoadBalancer() && !az.EnableMultipleStandardLoadBalancers - if strings.EqualFold(vmSetName, az.VMSet.GetPrimaryVMSetName()) || useSingleSLB { - lbNamePrefix = clusterName - } - // 3. using multiple SLBs while the vmSet is sharing the primary SLB - useMultipleSLB := az.useStandardLoadBalancer() && az.EnableMultipleStandardLoadBalancers - if useMultipleSLB && az.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vmSetName)) { - lbNamePrefix = clusterName - } - if isInternal { - return fmt.Sprintf("%s%s", lbNamePrefix, consts.InternalLoadBalancerNameSuffix) - } - return lbNamePrefix +func (az *Cloud) mapVMSetNameToLoadBalancerName(vmSetName, clusterName string) string { + if vmSetName == az.VMSet.GetPrimaryVMSetName() { + return clusterName + } + return vmSetName } // isControlPlaneNode returns true if the node has a control-plane role label. @@ -201,7 +206,7 @@ func getPrimaryInterfaceID(machine compute.VirtualMachine) (string, error) { } for _, ref := range *machine.NetworkProfile.NetworkInterfaces { - if to.Bool(ref.Primary) { + if pointer.BoolDeref(ref.Primary, false) { return *ref.ID, nil } } @@ -219,6 +224,7 @@ func getPrimaryIPConfig(nic network.Interface) (*network.InterfaceIPConfiguratio } for _, ref := range *nic.IPConfigurations { + ref := ref if *ref.Primary { return &ref, nil } @@ -235,16 +241,17 @@ func getIPConfigByIPFamily(nic network.Interface, IPv6 bool) (*network.Interface var ipVersion network.IPVersion if IPv6 { - ipVersion = network.IPVersionIPv6 + ipVersion = network.IPv6 } else { - ipVersion = network.IPVersionIPv4 + ipVersion = network.IPv4 } for _, ref := range *nic.IPConfigurations { + ref := ref if ref.PrivateIPAddress != nil && ref.PrivateIPAddressVersion == ipVersion { return &ref, nil } } - return nil, fmt.Errorf("failed to determine the ipconfig(IPv6=%v). nicname=%q", IPv6, to.String(nic.Name)) + return nil, fmt.Errorf("failed to determine the ipconfig(IPv6=%v). nicname=%q", IPv6, pointer.StringDeref(nic.Name, "")) } func isInternalLoadBalancer(lb *network.LoadBalancer) bool { @@ -261,44 +268,66 @@ func isInternalLoadBalancer(lb *network.LoadBalancer) bool { // This means: // clusters moving from IPv4 to dualstack will require no changes // clusters moving from IPv6 to dualstack will require no changes as the IPv4 backend pool will created with -func getBackendPoolName(clusterName string, service *v1.Service) string { - IPv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) - if IPv6 { - return fmt.Sprintf("%v-IPv6", clusterName) +func getBackendPoolName(clusterName string, isIPv6 bool) string { + if isIPv6 { + return fmt.Sprintf("%s-%s", clusterName, v6Suffix) } return clusterName } -func (az *Cloud) getLoadBalancerRuleName(service *v1.Service, protocol v1.Protocol, port int32) string { +// getBackendPoolNames returns the IPv4 and IPv6 backend pool names. +func getBackendPoolNames(clusterName string) map[bool]string { + return map[bool]string{ + consts.IPVersionIPv4: getBackendPoolName(clusterName, consts.IPVersionIPv4), + consts.IPVersionIPv6: getBackendPoolName(clusterName, consts.IPVersionIPv6), + } +} + +// ifBackendPoolIPv6 checks if a backend pool is of IPv6 according to name/ID. +func isBackendPoolIPv6(name string) bool { + return managedResourceHasIPv6Suffix(name) +} + +func managedResourceHasIPv6Suffix(name string) bool { + return strings.HasSuffix(strings.ToLower(name), fmt.Sprintf("-%s", v6SuffixLower)) +} + +func (az *Cloud) getLoadBalancerRuleName(service *v1.Service, protocol v1.Protocol, port int32, isIPv6 bool) string { prefix := az.getRulePrefix(service) ruleName := fmt.Sprintf("%s-%s-%d", prefix, protocol, port) - subnet := subnet(service) + subnet := getInternalSubnet(service) + isDualStack := isServiceDualStack(service) if subnet == nil { - return ruleName + return getResourceByIPFamily(ruleName, isDualStack, isIPv6) } // Load balancer rule name must be less or equal to 80 characters, so excluding the hyphen two segments cannot exceed 79 subnetSegment := *subnet - if len(ruleName)+len(subnetSegment)+1 > consts.LoadBalancerRuleNameMaxLength { - subnetSegment = subnetSegment[:consts.LoadBalancerRuleNameMaxLength-len(ruleName)-1] + maxLength := consts.LoadBalancerRuleNameMaxLength - consts.IPFamilySuffixLength + if len(ruleName)+len(subnetSegment)+1 > maxLength { + subnetSegment = subnetSegment[:maxLength-len(ruleName)-1] } - return fmt.Sprintf("%s-%s-%s-%d", prefix, subnetSegment, protocol, port) + return getResourceByIPFamily(fmt.Sprintf("%s-%s-%s-%d", prefix, subnetSegment, protocol, port), isDualStack, isIPv6) } -func (az *Cloud) getloadbalancerHAmodeRuleName(service *v1.Service) string { - return az.getLoadBalancerRuleName(service, service.Spec.Ports[0].Protocol, service.Spec.Ports[0].Port) +func (az *Cloud) getloadbalancerHAmodeRuleName(service *v1.Service, isIPv6 bool) string { + return az.getLoadBalancerRuleName(service, service.Spec.Ports[0].Protocol, service.Spec.Ports[0].Port, isIPv6) } -func (az *Cloud) getSecurityRuleName(service *v1.Service, port v1.ServicePort, sourceAddrPrefix string) string { +func (az *Cloud) getSecurityRuleName(service *v1.Service, port v1.ServicePort, sourceAddrPrefix string, isIPv6 bool) string { + isDualStack := isServiceDualStack(service) + safePrefix := strings.Replace(sourceAddrPrefix, "/", "_", -1) + safePrefix = strings.Replace(safePrefix, ":", ".", -1) // Consider IPv6 address + var name string if useSharedSecurityRule(service) { - safePrefix := strings.Replace(sourceAddrPrefix, "/", "_", -1) - return fmt.Sprintf("shared-%s-%d-%s", port.Protocol, port.Port, safePrefix) + name = fmt.Sprintf("shared-%s-%d-%s", port.Protocol, port.Port, safePrefix) + } else { + rulePrefix := az.getRulePrefix(service) + name = fmt.Sprintf("%s-%s-%d-%s", rulePrefix, port.Protocol, port.Port, safePrefix) } - safePrefix := strings.Replace(sourceAddrPrefix, "/", "_", -1) - rulePrefix := az.getRulePrefix(service) - return fmt.Sprintf("%s-%s-%d-%s", rulePrefix, port.Protocol, port.Port, safePrefix) + return getResourceByIPFamily(name, isDualStack, isIPv6) } // This returns a human-readable version of the Service used to tag some resources. @@ -312,95 +341,38 @@ func (az *Cloud) getRulePrefix(service *v1.Service) string { return az.GetLoadBalancerName(context.TODO(), "", service) } -func (az *Cloud) getPublicIPName(clusterName string, service *v1.Service) string { +func (az *Cloud) getPublicIPName(clusterName string, service *v1.Service, isIPv6 bool) (string, error) { + isDualStack := isServiceDualStack(service) pipName := fmt.Sprintf("%s-%s", clusterName, az.GetLoadBalancerName(context.TODO(), clusterName, service)) - if prefixID, ok := service.Annotations[consts.ServiceAnnotationPIPPrefixID]; ok && prefixID != "" { - prefixName, err := getLastSegment(prefixID, "/") - if err != nil { - return pipName + if id := getServicePIPPrefixID(service, isIPv6); id != "" { + id, err := getLastSegment(id, "/") + if err == nil { + pipName = fmt.Sprintf("%s-%s", pipName, id) } - pipName = fmt.Sprintf("%s-%s", pipName, prefixName) } - return pipName + return getResourceByIPFamily(pipName, isDualStack, isIPv6), nil } +// TODO: UT func (az *Cloud) serviceOwnsRule(service *v1.Service, rule string) bool { prefix := az.getRulePrefix(service) return strings.HasPrefix(strings.ToUpper(rule), strings.ToUpper(prefix)) } -// There are two cases when a service owns the frontend IP config: -// 1. The primary service, which means the frontend IP config is created after the creation of the service. -// This means the name of the config can be tracked by the service UID. -// 2. The secondary services must have their loadBalancer IP set if they want to share the same config as the primary -// service. Hence, it can be tracked by the loadBalancer IP. -func (az *Cloud) serviceOwnsFrontendIP(fip network.FrontendIPConfiguration, service *v1.Service, pips *[]network.PublicIPAddress) (bool, bool, error) { - var isPrimaryService bool - baseName := az.GetLoadBalancerName(context.TODO(), "", service) - if strings.HasPrefix(to.String(fip.Name), baseName) { - klog.V(6).Infof("serviceOwnsFrontendIP: found primary service %s of the frontend IP config %s", service.Name, *fip.Name) - isPrimaryService = true - return true, isPrimaryService, nil - } - - loadBalancerIP := getServiceLoadBalancerIP(service) - if loadBalancerIP == "" { - // it is a must that the secondary services set the loadBalancer IP - return false, isPrimaryService, nil - } - - // for external secondary service the public IP address should be checked - if !requiresInternalLoadBalancer(service) { - pipResourceGroup := az.getPublicIPAddressResourceGroup(service) - pip, err := az.findMatchedPIPByLoadBalancerIP(service, loadBalancerIP, pipResourceGroup, pips) - if err != nil { - klog.Warningf("serviceOwnsFrontendIP: unexpected error when finding match public IP of the service %s with loadBalancerLP %s: %v", service.Name, loadBalancerIP, err) - return false, isPrimaryService, nil +func publicIPOwnsFrontendIP(service *v1.Service, fip *network.FrontendIPConfiguration, pip *network.PublicIPAddress) bool { + if pip != nil && + pip.ID != nil && + pip.PublicIPAddressPropertiesFormat != nil && + pip.PublicIPAddressPropertiesFormat.IPAddress != nil && + fip != nil && + fip.FrontendIPConfigurationPropertiesFormat != nil && + fip.FrontendIPConfigurationPropertiesFormat.PublicIPAddress != nil { + if strings.EqualFold(pointer.StringDeref(pip.ID, ""), pointer.StringDeref(fip.PublicIPAddress.ID, "")) { + klog.V(6).Infof("publicIPOwnsFrontendIP:found secondary service %s of the frontend IP config %s", service.Name, *fip.Name) + return true } - - if pip != nil && - pip.ID != nil && - pip.PublicIPAddressPropertiesFormat != nil && - pip.IPAddress != nil && - fip.FrontendIPConfigurationPropertiesFormat != nil && - fip.FrontendIPConfigurationPropertiesFormat.PublicIPAddress != nil { - if strings.EqualFold(to.String(pip.ID), to.String(fip.PublicIPAddress.ID)) { - klog.V(4).Infof("serviceOwnsFrontendIP: found secondary service %s of the frontend IP config %s", service.Name, *fip.Name) - - return true, isPrimaryService, nil - } - klog.V(4).Infof("serviceOwnsFrontendIP: the public IP with ID %s is being referenced by other service with public IP address %s", *pip.ID, *pip.IPAddress) - } - - return false, isPrimaryService, nil } - - // for internal secondary service the private IP address on the frontend IP config should be checked - if fip.PrivateIPAddress == nil { - return false, isPrimaryService, nil - } - - return strings.EqualFold(*fip.PrivateIPAddress, loadBalancerIP), isPrimaryService, nil -} - -func (az *Cloud) getDefaultFrontendIPConfigName(service *v1.Service) string { - baseName := az.GetLoadBalancerName(context.TODO(), "", service) - subnetName := subnet(service) - if subnetName != nil { - ipcName := fmt.Sprintf("%s-%s", baseName, *subnetName) - - // Azure lb front end configuration name must not exceed 80 characters - if len(ipcName) > consts.FrontendIPConfigNameMaxLength { - ipcName = ipcName[:consts.FrontendIPConfigNameMaxLength] - // Cutting the string may result in char like "-" as the string end. - // If the last char is not a letter or '_', replace it with "_". - if !unicode.IsLetter(rune(ipcName[len(ipcName)-1:][0])) && ipcName[len(ipcName)-1:] != "_" { - ipcName = ipcName[:len(ipcName)-1] + "_" - } - } - return ipcName - } - return baseName + return false } // This returns the next available rule priority level for a given set of security rules. @@ -437,7 +409,7 @@ func MakeCRC32(str string) string { type availabilitySet struct { *Cloud - vmasCache *azcache.TimedCache + vmasCache azcache.Resource } type AvailabilitySetEntry struct { @@ -445,7 +417,7 @@ type AvailabilitySetEntry struct { ResourceGroup string } -func (as *availabilitySet) newVMASCache() (*azcache.TimedCache, error) { +func (as *availabilitySet) newVMASCache() (azcache.Resource, error) { getter := func(key string) (interface{}, error) { localCache := &sync.Map{} @@ -454,7 +426,7 @@ func (as *availabilitySet) newVMASCache() (*azcache.TimedCache, error) { return nil, err } - for _, resourceGroup := range allResourceGroups.List() { + for _, resourceGroup := range allResourceGroups.UnsortedList() { allAvailabilitySets, rerr := as.AvailabilitySetsClient.List(context.Background(), resourceGroup) if rerr != nil { klog.Errorf("AvailabilitySetsClient.List failed: %v", rerr) @@ -463,11 +435,11 @@ func (as *availabilitySet) newVMASCache() (*azcache.TimedCache, error) { for i := range allAvailabilitySets { vmas := allAvailabilitySets[i] - if strings.EqualFold(to.String(vmas.Name), "") { + if strings.EqualFold(pointer.StringDeref(vmas.Name, ""), "") { klog.Warning("failed to get the name of the VMAS") continue } - localCache.Store(to.String(vmas.Name), &AvailabilitySetEntry{ + localCache.Store(pointer.StringDeref(vmas.Name, ""), &AvailabilitySetEntry{ VMAS: &vmas, ResourceGroup: resourceGroup, }) @@ -481,7 +453,7 @@ func (as *availabilitySet) newVMASCache() (*azcache.TimedCache, error) { as.Config.AvailabilitySetsCacheTTLInSeconds = consts.VMASCacheTTLDefaultInSeconds } - return azcache.NewTimedcache(time.Duration(as.Config.AvailabilitySetsCacheTTLInSeconds)*time.Second, getter) + return azcache.NewTimedCache(time.Duration(as.Config.AvailabilitySetsCacheTTLInSeconds)*time.Second, getter, as.Cloud.Config.DisableAPICallCache) } // newStandardSet creates a new availabilitySet. @@ -543,7 +515,7 @@ func (as *availabilitySet) GetPowerStatusByNodeName(name string) (powerState str if vm.InstanceView != nil && vm.InstanceView.Statuses != nil { statuses := *vm.InstanceView.Statuses for _, status := range statuses { - state := to.String(status.Code) + state := pointer.StringDeref(status.Code, "") if strings.HasPrefix(state, vmPowerStatePrefix) { return strings.TrimPrefix(state, vmPowerStatePrefix), nil } @@ -566,7 +538,7 @@ func (as *availabilitySet) GetProvisioningStateByNodeName(name string) (provisio return provisioningState, nil } - return to.String(vm.VirtualMachineProperties.ProvisioningState), nil + return pointer.StringDeref(vm.VirtualMachineProperties.ProvisioningState, ""), nil } // GetNodeNameByProviderID gets the node name by provider ID. @@ -612,15 +584,15 @@ func (as *availabilitySet) GetZoneByNodeName(name string) (cloudprovider.Zone, e return cloudprovider.Zone{}, fmt.Errorf("failed to parse zone %q: %w", zones, err) } - failureDomain = as.makeZone(to.String(vm.Location), zoneID) + failureDomain = as.makeZone(pointer.StringDeref(vm.Location, ""), zoneID) } else { // Availability zone is not used for the node, falling back to fault domain. - failureDomain = strconv.Itoa(int(to.Int32(vm.VirtualMachineProperties.InstanceView.PlatformFaultDomain))) + failureDomain = strconv.Itoa(int(pointer.Int32Deref(vm.VirtualMachineProperties.InstanceView.PlatformFaultDomain, 0))) } zone := cloudprovider.Zone{ FailureDomain: strings.ToLower(failureDomain), - Region: strings.ToLower(to.String(vm.Location)), + Region: strings.ToLower(pointer.StringDeref(vm.Location, "")), } return zone, nil } @@ -730,8 +702,7 @@ func (as *availabilitySet) getAgentPoolAvailabilitySets(vms []compute.VirtualMac // annotation would be ignored when using one SLB per cluster. func (as *availabilitySet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (availabilitySetNames *[]string, err error) { hasMode, isAuto, serviceAvailabilitySetName := as.getServiceLoadBalancerMode(service) - useSingleSLB := as.useStandardLoadBalancer() && !as.EnableMultipleStandardLoadBalancers - if !hasMode || useSingleSLB { + if !hasMode || as.useStandardLoadBalancer() { // no mode specified in service annotation or use single SLB mode // default to PrimaryAvailabilitySetName availabilitySetNames = &[]string{as.Config.PrimaryAvailabilitySetName} @@ -795,13 +766,13 @@ func (as *availabilitySet) GetNodeVMSetName(node *v1.Node) (string, error) { var asName string for _, vm := range vms { - if strings.EqualFold(to.String(vm.Name), hostName) { - if vm.AvailabilitySet != nil && to.String(vm.AvailabilitySet.ID) != "" { + if strings.EqualFold(pointer.StringDeref(vm.Name, ""), hostName) { + if vm.AvailabilitySet != nil && pointer.StringDeref(vm.AvailabilitySet.ID, "") != "" { klog.V(4).Infof("as.GetNodeVMSetName: found vm %s", hostName) - asName, err = getLastSegment(to.String(vm.AvailabilitySet.ID), "/") + asName, err = getLastSegment(pointer.StringDeref(vm.AvailabilitySet.ID, ""), "/") if err != nil { - klog.Errorf("as.GetNodeVMSetName: failed to get last segment of ID %s: %s", to.String(vm.AvailabilitySet.ID), err) + klog.Errorf("as.GetNodeVMSetName: failed to get last segment of ID %s: %s", pointer.StringDeref(vm.AvailabilitySet.ID, ""), err) return "", err } } @@ -865,19 +836,6 @@ func (as *availabilitySet) getPrimaryInterfaceWithVMSet(nodeName, vmSetName stri if !as.useStandardLoadBalancer() { // need to check the vmSet name when using the basic LB needCheck = true - } else if as.EnableMultipleStandardLoadBalancers { - // need to check the vmSet name when using multiple standard LBs - needCheck = true - - // ensure the vm that is supposed to share the primary SLB in the backendpool of the primary SLB - if machine.AvailabilitySet != nil { - vmasName, _ := getLastSegment(to.String(machine.AvailabilitySet.ID), "/") - if strings.EqualFold(as.GetPrimaryVMSetName(), vmSetName) && - as.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vmasName)) { - klog.V(4).Infof("getPrimaryInterfaceWithVMSet: the vm %s in the vmSet %s is supposed to share the primary SLB", nodeName, vmasName) - needCheck = false - } - } } if vmSetName != "" && needCheck { expectedAvailabilitySetID := as.getAvailabilitySetID(nodeResourceGroup, vmSetName) @@ -902,7 +860,7 @@ func (as *availabilitySet) getPrimaryInterfaceWithVMSet(nodeName, vmSetName stri var availabilitySetID string if machine.VirtualMachineProperties != nil && machine.AvailabilitySet != nil { - availabilitySetID = to.String(machine.AvailabilitySet.ID) + availabilitySetID = pointer.StringDeref(machine.AvailabilitySet.ID, "") } return nic, availabilitySetID, nil } @@ -929,7 +887,7 @@ func (as *availabilitySet) EnsureHostInPool(service *v1.Service, nodeName types. } var primaryIPConfig *network.InterfaceIPConfiguration - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) + ipv6 := isBackendPoolIPv6(backendPoolID) if !as.Cloud.ipv6DualStackEnabled && !ipv6 { primaryIPConfig, err = getPrimaryIPConfig(nic) if err != nil { @@ -977,7 +935,7 @@ func (as *availabilitySet) EnsureHostInPool(service *v1.Service, nodeName types. newBackendPools = append(newBackendPools, network.BackendAddressPool{ - ID: to.StringPtr(backendPoolID), + ID: pointer.String(backendPoolID), }) primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools @@ -1039,7 +997,8 @@ func (as *availabilitySet) EnsureHostsInPool(service *v1.Service, nodes []*v1.No } // EnsureBackendPoolDeleted ensures the loadBalancer backendAddressPools deleted from the specified nodes. -func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { +// backendPoolIDs are the IDs of the backendpools to be deleted. +func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { // Returns nil if backend address pools already deleted. if backendAddressPools == nil { return false, nil @@ -1053,23 +1012,32 @@ func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backend ipConfigurationIDs := []string{} for _, backendPool := range *backendAddressPools { - if strings.EqualFold(to.String(backendPool.ID), backendPoolID) && - backendPool.BackendAddressPoolPropertiesFormat != nil && - backendPool.BackendIPConfigurations != nil { - for _, ipConf := range *backendPool.BackendIPConfigurations { - if ipConf.ID == nil { - continue - } + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(pointer.StringDeref(backendPool.ID, ""), backendPoolID) { + if backendPool.BackendAddressPoolPropertiesFormat != nil && + backendPool.BackendIPConfigurations != nil { + for _, ipConf := range *backendPool.BackendIPConfigurations { + if ipConf.ID == nil { + continue + } - ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) + ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) + } + } } } + } nicUpdaters := make([]func() error, 0) allErrs := make([]error, 0) - var nicUpdated bool + + ipconfigPrefixToNicMap := map[string]network.Interface{} // ipconfig prefix -> nic for i := range ipConfigurationIDs { ipConfigurationID := ipConfigurationIDs[i] + ipConfigIDPrefix := getResourceIDPrefix(ipConfigurationID) + if _, ok := ipconfigPrefixToNicMap[ipConfigIDPrefix]; ok { + continue + } nodeName, _, err := as.GetNodeNameByIPConfigurationID(ipConfigurationID) if err != nil && !errors.Is(err, cloudprovider.InstanceNotFound) { klog.Errorf("Failed to GetNodeNameByIPConfigurationID(%s): %v", ipConfigurationID, err) @@ -1096,7 +1064,8 @@ func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backend return false, fmt.Errorf("EnsureBackendPoolDeleted: failed to parse the VMAS ID %s: %w", vmasID, err) } // Only remove nodes belonging to specified vmSet to basic LB backends. - if !strings.EqualFold(vmasName, vmSetName) { + // If vmasID is empty, then it is standalone VM. + if vmasID != "" && !strings.EqualFold(vmasName, vmSetName) { klog.V(2).Infof("EnsureBackendPoolDeleted: skipping the node %s belonging to another vm set %s", nodeName, vmasName) continue } @@ -1107,50 +1076,61 @@ func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backend } if nic.InterfacePropertiesFormat != nil && nic.InterfacePropertiesFormat.IPConfigurations != nil { - newIPConfigs := *nic.IPConfigurations - for j, ipConf := range newIPConfigs { - if !to.Bool(ipConf.Primary) { - continue - } - // found primary ip configuration - if ipConf.LoadBalancerBackendAddressPools != nil { - newLBAddressPools := *ipConf.LoadBalancerBackendAddressPools - for k := len(newLBAddressPools) - 1; k >= 0; k-- { - pool := newLBAddressPools[k] - if strings.EqualFold(to.String(pool.ID), backendPoolID) { + ipconfigPrefixToNicMap[ipConfigIDPrefix] = nic + } + } + v4Enabled, v6Enabled := getIPFamiliesEnabled(service) + isServiceIPv4 := v4Enabled && !v6Enabled + var nicUpdated atomic.Bool + for k := range ipconfigPrefixToNicMap { + nic := ipconfigPrefixToNicMap[k] + newIPConfigs := *nic.IPConfigurations + for j, ipConf := range newIPConfigs { + if isServiceIPv4 && !pointer.BoolDeref(ipConf.Primary, false) { + continue + } + // To support IPv6 only and dual-stack clusters, all IP configurations + // should be checked regardless of primary or not because IPv6 IP configurations + // are not marked as primary. + if ipConf.LoadBalancerBackendAddressPools != nil { + newLBAddressPools := *ipConf.LoadBalancerBackendAddressPools + for k := len(newLBAddressPools) - 1; k >= 0; k-- { + pool := newLBAddressPools[k] + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(pointer.StringDeref(pool.ID, ""), backendPoolID) { newLBAddressPools = append(newLBAddressPools[:k], newLBAddressPools[k+1:]...) break } } - newIPConfigs[j].LoadBalancerBackendAddressPools = &newLBAddressPools } + newIPConfigs[j].LoadBalancerBackendAddressPools = &newLBAddressPools } - nic.IPConfigurations = &newIPConfigs - nicUpdaters = append(nicUpdaters, func() error { - ctx, cancel := getContextWithCancel() - defer cancel() - klog.V(2).Infof("EnsureBackendPoolDeleted begins to CreateOrUpdate for NIC(%s, %s) with backendPoolID %s", as.resourceGroup, to.String(nic.Name), backendPoolID) - rerr := as.InterfacesClient.CreateOrUpdate(ctx, as.ResourceGroup, to.String(nic.Name), nic) - if rerr != nil { - klog.Errorf("EnsureBackendPoolDeleted CreateOrUpdate for NIC(%s, %s) failed with error %v", as.resourceGroup, to.String(nic.Name), rerr.Error()) - return rerr.Error() - } - nicUpdated = true - return nil - }) } + nic.IPConfigurations = &newIPConfigs + nicUpdaters = append(nicUpdaters, func() error { + ctx, cancel := getContextWithCancel() + defer cancel() + klog.V(2).Infof("EnsureBackendPoolDeleted begins to CreateOrUpdate for NIC(%s, %s) with backendPoolIDs %q", as.ResourceGroup, pointer.StringDeref(nic.Name, ""), backendPoolIDs) + rerr := as.InterfacesClient.CreateOrUpdate(ctx, as.ResourceGroup, pointer.StringDeref(nic.Name, ""), nic) + if rerr != nil { + klog.Errorf("EnsureBackendPoolDeleted CreateOrUpdate for NIC(%s, %s) failed with error %v", as.ResourceGroup, pointer.StringDeref(nic.Name, ""), rerr.Error()) + return rerr.Error() + } + nicUpdated.Store(true) + return nil + }) } errs := utilerrors.AggregateGoroutines(nicUpdaters...) if errs != nil { - return nicUpdated, utilerrors.Flatten(errs) + return nicUpdated.Load(), utilerrors.Flatten(errs) } // Fail if there are other errors. if len(allErrs) > 0 { - return nicUpdated, utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) + return nicUpdated.Load(), utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) } isOperationSucceeded = true - return nicUpdated, nil + return nicUpdated.Load(), nil } func getAvailabilitySetNameByID(asID string) (string, error) { @@ -1195,7 +1175,7 @@ func (as *availabilitySet) GetNodeNameByIPConfigurationID(ipConfigurationID stri } vmID := "" if nic.InterfacePropertiesFormat != nil && nic.VirtualMachine != nil { - vmID = to.String(nic.VirtualMachine.ID) + vmID = pointer.StringDeref(nic.VirtualMachine.ID, "") } if vmID == "" { klog.V(2).Infof("GetNodeNameByIPConfigurationID(%s): empty vmID", ipConfigurationID) @@ -1215,7 +1195,7 @@ func (as *availabilitySet) GetNodeNameByIPConfigurationID(ipConfigurationID stri } asID := "" if vm.VirtualMachineProperties != nil && vm.AvailabilitySet != nil { - asID = to.String(vm.AvailabilitySet.ID) + asID = pointer.StringDeref(vm.AvailabilitySet.ID, "") } if asID == "" { return vmName, "", nil @@ -1247,9 +1227,9 @@ func (as *availabilitySet) getAvailabilitySetByNodeName(nodeName string, crt azc if vmas != nil && vmas.AvailabilitySetProperties != nil && vmas.VirtualMachines != nil { for _, vmIDRef := range *vmas.VirtualMachines { if vmIDRef.ID != nil { - matches := vmIDRE.FindStringSubmatch(to.String(vmIDRef.ID)) + matches := vmIDRE.FindStringSubmatch(pointer.StringDeref(vmIDRef.ID, "")) if len(matches) != 2 { - err = fmt.Errorf("invalid vm ID %s", to.String(vmIDRef.ID)) + err = fmt.Errorf("invalid vm ID %s", pointer.StringDeref(vmIDRef.ID, "")) return false } @@ -1294,15 +1274,15 @@ func (as *availabilitySet) GetNodeCIDRMasksByProviderID(providerID string) (int, var ipv4Mask, ipv6Mask int if v4, ok := vmas.Tags[consts.VMSetCIDRIPV4TagKey]; ok && v4 != nil { - ipv4Mask, err = strconv.Atoi(to.String(v4)) + ipv4Mask, err = strconv.Atoi(pointer.StringDeref(v4, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", to.String(v4), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", pointer.StringDeref(v4, ""), err) } } if v6, ok := vmas.Tags[consts.VMSetCIDRIPV6TagKey]; ok && v6 != nil { - ipv6Mask, err = strconv.Atoi(to.String(v6)) + ipv6Mask, err = strconv.Atoi(pointer.StringDeref(v6, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", to.String(v6), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", pointer.StringDeref(v6, ""), err) } } @@ -1310,7 +1290,7 @@ func (as *availabilitySet) GetNodeCIDRMasksByProviderID(providerID string) (int, } // EnsureBackendPoolDeletedFromVMSets ensures the loadBalancer backendAddressPools deleted from the specified VMAS -func (as *availabilitySet) EnsureBackendPoolDeletedFromVMSets(vmasNamesMap map[string]bool, backendPoolID string) error { +func (as *availabilitySet) EnsureBackendPoolDeletedFromVMSets(vmasNamesMap map[string]bool, backendPoolIDs []string) error { return nil } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storage.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storage.go index 436cd9859d01..bde20fa51d22 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storage.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storage.go @@ -38,10 +38,10 @@ func (az *Cloud) CreateFileShare(ctx context.Context, accountOptions *AccountOpt return "", "", fmt.Errorf("share options is nil") } if accountOptions.ResourceGroup == "" { - accountOptions.ResourceGroup = az.resourceGroup + accountOptions.ResourceGroup = az.ResourceGroup } if accountOptions.SubscriptionID == "" { - accountOptions.SubscriptionID = az.subscriptionID + accountOptions.SubscriptionID = az.SubscriptionID } accountOptions.EnableHTTPSTrafficOnly = true diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storageaccount.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storageaccount.go index bbde88ad9c1a..ee0fe7db91e6 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storageaccount.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storageaccount.go @@ -18,17 +18,21 @@ package provider import ( "context" + "crypto/rand" "fmt" + "math/big" "strings" + "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/azure-sdk-for-go/services/privatedns/mgmt/2018-09-01/privatedns" "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage" - "github.com/Azure/go-autorest/autorest/to" "k8s.io/klog/v2" + "k8s.io/utils/pointer" + "sigs.k8s.io/cloud-provider-azure/pkg/cache" + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) @@ -36,8 +40,14 @@ import ( // SkipMatchingTag skip account matching tag const SkipMatchingTag = "skip-matching" const LocationGlobal = "global" -const GroupIDFile = "file" -const PrivateDNSZoneName = "privatelink.file.core.windows.net" +const privateDNSZoneNameFmt = "privatelink.%s.%s" + +type StorageType string + +const ( + StorageTypeBlob StorageType = "blob" + StorageTypeFile StorageType = "file" +) // AccountOptions contains the fields which are used to create storage account. type AccountOptions struct { @@ -46,9 +56,11 @@ type AccountOptions struct { EnableHTTPSTrafficOnly bool // indicate whether create new account when Name is empty or when account does not exists CreateAccount bool - EnableLargeFileShare bool CreatePrivateEndpoint bool - DisableFileServiceDeleteRetentionPolicy bool + StorageType StorageType + StorageEndpointSuffix string + DisableFileServiceDeleteRetentionPolicy *bool + EnableLargeFileShare *bool IsHnsEnabled *bool EnableNfsV3 *bool AllowBlobPublicAccess *bool @@ -65,6 +77,12 @@ type AccountOptions struct { SubnetName string AccessTier string MatchTags bool + GetLatestAccountKey bool + EnableBlobVersioning *bool + SoftDeleteBlobs int32 + SoftDeleteContainers int32 + // indicate whether to get a random matching account, if false, will get the first matching account + PickRandomMatchingAccount bool } type accountWithLocation struct { @@ -93,9 +111,17 @@ func (az *Cloud) getStorageAccounts(ctx context.Context, accountOptions *Account isTaggedWithSkip(acct) && isHnsPropertyEqual(acct, accountOptions) && isEnableNfsV3PropertyEqual(acct, accountOptions) && + isAllowBlobPublicAccessEqual(acct, accountOptions) && + isRequireInfrastructureEncryptionEqual(acct, accountOptions) && + isAllowSharedKeyAccessEqual(acct, accountOptions) && + isAccessTierEqual(acct, accountOptions) && + az.isMultichannelEnabledEqual(ctx, acct, accountOptions) && + az.isDisableFileServiceDeleteRetentionPolicyEqual(ctx, acct, accountOptions) && + az.isEnableBlobDataProtectionEqual(ctx, acct, accountOptions) && isPrivateEndpointAsExpected(acct, accountOptions)) { continue } + accounts = append(accounts, accountWithLocation{Name: *acct.Name, StorageType: string((*acct.Sku).Name), Location: *acct.Location}) } } @@ -103,7 +129,8 @@ func (az *Cloud) getStorageAccounts(ctx context.Context, accountOptions *Account } // GetStorageAccesskey gets the storage account access key -func (az *Cloud) GetStorageAccesskey(ctx context.Context, subsID, account, resourceGroup string) (string, error) { +// getLatestAccountKey: get the latest account key per CreationTime if true, otherwise get the first account key +func (az *Cloud) GetStorageAccesskey(ctx context.Context, subsID, account, resourceGroup string, getLatestAccountKey bool) (string, error) { if az.StorageAccountClient == nil { return "", fmt.Errorf("StorageAccountClient is nil") } @@ -116,16 +143,40 @@ func (az *Cloud) GetStorageAccesskey(ctx context.Context, subsID, account, resou return "", fmt.Errorf("empty keys") } + var key string + var creationTime time.Time + for _, k := range *result.Keys { if k.Value != nil && *k.Value != "" { v := *k.Value if ind := strings.LastIndex(v, " "); ind >= 0 { v = v[(ind + 1):] } - return v, nil + if !getLatestAccountKey { + // get first key + return v, nil + } + // get account key with latest CreationTime + if key == "" { + key = v + if k.CreationTime != nil { + creationTime = k.CreationTime.ToTime() + } + klog.V(2).Infof("got storage account key with creation time: %v", creationTime) + } else { + if k.CreationTime != nil && creationTime.Before(k.CreationTime.ToTime()) { + key = v + creationTime = k.CreationTime.ToTime() + klog.V(2).Infof("got storage account key with latest creation time: %v", creationTime) + } + } } } - return "", fmt.Errorf("no valid keys") + + if key == "" { + return "", fmt.Errorf("no valid keys") + } + return key, nil } // EnsureStorageAccount search storage account, create one storage account(with genAccountNamePrefix) if not found, return accountName, accountKey @@ -160,6 +211,23 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou subsID = accountOptions.SubscriptionID } + if location == "" { + location = az.Location + } + + var privateDNSZoneName string + if accountOptions.CreatePrivateEndpoint { + if accountOptions.StorageType == "" { + klog.V(2).Info("set StorageType as file when not specified") + accountOptions.StorageType = StorageTypeFile + } + + if len(accountOptions.StorageEndpointSuffix) == 0 { + accountOptions.StorageEndpointSuffix = az.cloud.Environment.StorageEndpointSuffix + } + privateDNSZoneName = fmt.Sprintf(privateDNSZoneNameFmt, accountOptions.StorageType, accountOptions.StorageEndpointSuffix) + } + if len(accountOptions.Tags) == 0 { accountOptions.Tags = make(map[string]string) } @@ -177,9 +245,19 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou } if len(accounts) > 0 { - accountName = accounts[0].Name + index := 0 + if accountOptions.PickRandomMatchingAccount { + // randomly pick one matching account + n, err := rand.Int(rand.Reader, big.NewInt(int64(len(accounts)))) + if err != nil || n == nil { + return "", "", err + } + index = int(n.Int64()) + klog.V(4).Infof("randomly pick one matching account, index: %d, matching accounts: %s", index, accounts) + } + accountName = accounts[index].Name createNewAccount = false - klog.V(4).Infof("found a matching account %s type %s location %s", accounts[0].Name, accounts[0].StorageType, accounts[0].Location) + klog.V(4).Infof("found a matching account %s type %s location %s", accounts[index].Name, accounts[index].StorageType, accounts[index].Location) } } @@ -190,7 +268,7 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou createNewAccount = false if accountOptions.CreateAccount { // check whether account exists - if _, err := az.GetStorageAccesskey(ctx, subsID, accountName, resourceGroup); err != nil { + if _, err := az.GetStorageAccesskey(ctx, subsID, accountName, resourceGroup, accountOptions.GetLatestAccountKey); err != nil { klog.V(2).Infof("get storage key for storage account %s returned with %v", accountName, err) createNewAccount = true } @@ -205,20 +283,20 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou } if accountOptions.CreatePrivateEndpoint { - if _, err := az.privatednsclient.Get(ctx, vnetResourceGroup, PrivateDNSZoneName); err != nil { - klog.V(2).Infof("get private dns zone %s returned with %v", PrivateDNSZoneName, err.Error()) + if _, err := az.privatednsclient.Get(ctx, vnetResourceGroup, privateDNSZoneName); err != nil { + klog.V(2).Infof("get private dns zone %s returned with %v", privateDNSZoneName, err.Error()) // Create DNS zone first, this could make sure driver has write permission on vnetResourceGroup - if err := az.createPrivateDNSZone(ctx, vnetResourceGroup); err != nil { - return "", "", fmt.Errorf("create private DNS zone(%s) in resourceGroup(%s): %w", PrivateDNSZoneName, vnetResourceGroup, err) + if err := az.createPrivateDNSZone(ctx, vnetResourceGroup, privateDNSZoneName); err != nil { + return "", "", fmt.Errorf("create private DNS zone(%s) in resourceGroup(%s): %w", privateDNSZoneName, vnetResourceGroup, err) } } // Create virtual link to the private DNS zone - vNetLinkName := accountName + "-vnetlink" - if _, err := az.virtualNetworkLinksClient.Get(ctx, vnetResourceGroup, PrivateDNSZoneName, vNetLinkName); err != nil { - klog.V(2).Infof("get virtual link for vnet(%s) and DNS Zone(%s) returned with %v", vnetName, PrivateDNSZoneName, err.Error()) - if err := az.createVNetLink(ctx, vNetLinkName, vnetResourceGroup, vnetName); err != nil { - return "", "", fmt.Errorf("create virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s): %w", vnetName, PrivateDNSZoneName, vnetResourceGroup, err) + vNetLinkName := vnetName + "-vnetlink" + if _, err := az.virtualNetworkLinksClient.Get(ctx, vnetResourceGroup, privateDNSZoneName, vNetLinkName); err != nil { + klog.V(2).Infof("get virtual link for vnet(%s) and DNS Zone(%s) returned with %v", vnetName, privateDNSZoneName, err.Error()) + if err := az.createVNetLink(ctx, vNetLinkName, vnetResourceGroup, vnetName, privateDNSZoneName); err != nil { + return "", "", fmt.Errorf("create virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s): %w", vnetName, privateDNSZoneName, vnetResourceGroup, err) } } } @@ -248,9 +326,6 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou } } - if location == "" { - location = az.Location - } if accountType == "" { accountType = consts.DefaultStorageAccountType } @@ -278,9 +353,13 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou Tags: tags, Location: &location} - if accountOptions.EnableLargeFileShare { - klog.V(2).Infof("Enabling LargeFileShare for storage account(%s)", accountName) - cp.AccountPropertiesCreateParameters.LargeFileSharesState = storage.LargeFileSharesStateEnabled + if accountOptions.EnableLargeFileShare != nil { + state := storage.LargeFileSharesStateDisabled + if *accountOptions.EnableLargeFileShare { + state = storage.LargeFileSharesStateEnabled + } + klog.V(2).Infof("enable LargeFileShare(%s) for storage account(%s)", state, accountName) + cp.AccountPropertiesCreateParameters.LargeFileSharesState = state } if accountOptions.AllowBlobPublicAccess != nil { klog.V(2).Infof("set AllowBlobPublicAccess(%v) for storage account(%s)", *accountOptions.AllowBlobPublicAccess, accountName) @@ -292,8 +371,8 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou RequireInfrastructureEncryption: accountOptions.RequireInfrastructureEncryption, KeySource: storage.KeySourceMicrosoftStorage, Services: &storage.EncryptionServices{ - File: &storage.EncryptionService{Enabled: to.BoolPtr(true)}, - Blob: &storage.EncryptionService{Enabled: to.BoolPtr(true)}, + File: &storage.EncryptionService{Enabled: pointer.Bool(true)}, + Blob: &storage.EncryptionService{Enabled: pointer.Bool(true)}, }, } } @@ -311,8 +390,8 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou }, KeySource: storage.KeySourceMicrosoftKeyvault, Services: &storage.EncryptionServices{ - File: &storage.EncryptionService{Enabled: to.BoolPtr(true)}, - Blob: &storage.EncryptionService{Enabled: to.BoolPtr(true)}, + File: &storage.EncryptionService{Enabled: pointer.Bool(true)}, + Blob: &storage.EncryptionService{Enabled: pointer.Bool(true)}, }, } } @@ -324,7 +403,43 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou return "", "", fmt.Errorf("failed to create storage account %s, error: %v", accountName, rerr) } - if accountOptions.DisableFileServiceDeleteRetentionPolicy || to.Bool(accountOptions.IsMultichannelEnabled) { + if pointer.BoolDeref(accountOptions.EnableBlobVersioning, false) || + accountOptions.SoftDeleteBlobs > 0 || + accountOptions.SoftDeleteContainers > 0 { + var blobPolicy, containerPolicy *storage.DeleteRetentionPolicy + var enableBlobVersioning *bool + + if accountOptions.SoftDeleteContainers > 0 { + containerPolicy = &storage.DeleteRetentionPolicy{ + Enabled: pointer.Bool(accountOptions.SoftDeleteContainers > 0), + Days: pointer.Int32(accountOptions.SoftDeleteContainers), + } + } + if accountOptions.SoftDeleteBlobs > 0 { + blobPolicy = &storage.DeleteRetentionPolicy{ + Enabled: pointer.Bool(accountOptions.SoftDeleteBlobs > 0), + Days: pointer.Int32(accountOptions.SoftDeleteBlobs), + } + } + + if accountOptions.EnableBlobVersioning != nil { + enableBlobVersioning = pointer.Bool(*accountOptions.EnableBlobVersioning) + } + + property := storage.BlobServiceProperties{ + BlobServicePropertiesProperties: &storage.BlobServicePropertiesProperties{ + IsVersioningEnabled: enableBlobVersioning, + ContainerDeleteRetentionPolicy: containerPolicy, + DeleteRetentionPolicy: blobPolicy, + }, + } + + if _, err := az.BlobClient.SetServiceProperties(ctx, subsID, resourceGroup, accountName, property); err != nil { + return "", "", fmt.Errorf("failed to set blob service properties for storage account %s, error: %w", accountName, err) + } + } + + if accountOptions.DisableFileServiceDeleteRetentionPolicy != nil || accountOptions.IsMultichannelEnabled != nil { prop, err := az.FileClient.WithSubscriptionID(subsID).GetServiceProperties(ctx, resourceGroup, accountName) if err != nil { return "", "", err @@ -334,13 +449,16 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou } prop.FileServicePropertiesProperties.ProtocolSettings = nil prop.FileServicePropertiesProperties.Cors = nil - if accountOptions.DisableFileServiceDeleteRetentionPolicy { - klog.V(2).Infof("disable FileServiceDeleteRetentionPolicy on account(%s), subscription(%s), resource group(%s)", accountName, subsID, resourceGroup) - prop.FileServicePropertiesProperties.ShareDeleteRetentionPolicy = &storage.DeleteRetentionPolicy{Enabled: to.BoolPtr(false)} + if accountOptions.DisableFileServiceDeleteRetentionPolicy != nil { + enable := !*accountOptions.DisableFileServiceDeleteRetentionPolicy + klog.V(2).Infof("set ShareDeleteRetentionPolicy(%v) on account(%s), subscription(%s), resource group(%s)", + enable, accountName, subsID, resourceGroup) + prop.FileServicePropertiesProperties.ShareDeleteRetentionPolicy = &storage.DeleteRetentionPolicy{Enabled: &enable} } - if to.Bool(accountOptions.IsMultichannelEnabled) { + if accountOptions.IsMultichannelEnabled != nil { klog.V(2).Infof("enable SMB Multichannel setting on account(%s), subscription(%s), resource group(%s)", accountName, subsID, resourceGroup) - prop.FileServicePropertiesProperties.ProtocolSettings = &storage.ProtocolSettings{Smb: &storage.SmbSetting{Multichannel: &storage.Multichannel{Enabled: to.BoolPtr(true)}}} + enabled := *accountOptions.IsMultichannelEnabled + prop.FileServicePropertiesProperties.ProtocolSettings = &storage.ProtocolSettings{Smb: &storage.SmbSetting{Multichannel: &storage.Multichannel{Enabled: &enabled}}} } if _, err := az.FileClient.WithSubscriptionID(subsID).SetServiceProperties(ctx, resourceGroup, accountName, prop); err != nil { return "", "", err @@ -351,30 +469,36 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou klog.V(2).Infof("set AccessTier(%s) on account(%s), subscription(%s), resource group(%s)", accountOptions.AccessTier, accountName, subsID, resourceGroup) cp.AccountPropertiesCreateParameters.AccessTier = storage.AccessTier(accountOptions.AccessTier) } + } - if accountOptions.CreatePrivateEndpoint { - // Get properties of the storageAccount - storageAccount, err := az.StorageAccountClient.GetProperties(ctx, subsID, resourceGroup, accountName) - if err != nil { - return "", "", fmt.Errorf("Failed to get the properties of storage account(%s), resourceGroup(%s), error: %v", accountName, resourceGroup, err) - } + if accountOptions.CreatePrivateEndpoint { + // Get properties of the storageAccount + storageAccount, err := az.StorageAccountClient.GetProperties(ctx, subsID, resourceGroup, accountName) + if err != nil { + return "", "", fmt.Errorf("failed to get the properties of storage account(%s), resourceGroup(%s), error: %v", accountName, resourceGroup, err) + } - // Create private endpoint - privateEndpointName := accountName + "-pvtendpoint" - if err := az.createPrivateEndpoint(ctx, accountName, storageAccount.ID, privateEndpointName, vnetResourceGroup, vnetName, subnetName, location); err != nil { - return "", "", fmt.Errorf("create private endpoint for storage account(%s), resourceGroup(%s): %w", accountName, vnetResourceGroup, err) - } + // Create private endpoint + privateEndpointName := accountName + "-pvtendpoint" + if accountOptions.StorageType == StorageTypeBlob { + privateEndpointName = privateEndpointName + "-blob" + } + if err := az.createPrivateEndpoint(ctx, accountName, storageAccount.ID, privateEndpointName, vnetResourceGroup, vnetName, subnetName, location, accountOptions.StorageType); err != nil { + return "", "", fmt.Errorf("create private endpoint for storage account(%s), resourceGroup(%s): %w", accountName, vnetResourceGroup, err) + } - // Create dns zone group - dnsZoneGroupName := accountName + "-dnszonegroup" - if err := az.createPrivateDNSZoneGroup(ctx, dnsZoneGroupName, privateEndpointName, vnetResourceGroup, vnetName); err != nil { - return "", "", fmt.Errorf("create private DNS zone group - privateEndpoint(%s), vNetName(%s), resourceGroup(%s): %w", privateEndpointName, vnetName, vnetResourceGroup, err) - } + // Create dns zone group + dnsZoneGroupName := accountName + "-dnszonegroup" + if accountOptions.StorageType == StorageTypeBlob { + dnsZoneGroupName = dnsZoneGroupName + "-blob" + } + if err := az.createPrivateDNSZoneGroup(ctx, dnsZoneGroupName, privateEndpointName, vnetResourceGroup, vnetName, privateDNSZoneName); err != nil { + return "", "", fmt.Errorf("create private DNS zone group - privateEndpoint(%s), vNetName(%s), resourceGroup(%s): %w", privateEndpointName, vnetName, vnetResourceGroup, err) } } // find the access key with this account - accountKey, err := az.GetStorageAccesskey(ctx, subsID, accountName, resourceGroup) + accountKey, err := az.GetStorageAccesskey(ctx, subsID, accountName, resourceGroup, accountOptions.GetLatestAccountKey) if err != nil { return "", "", fmt.Errorf("could not get storage key for storage account %s: %w", accountName, err) } @@ -382,7 +506,7 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou return accountName, accountKey, nil } -func (az *Cloud) createPrivateEndpoint(ctx context.Context, accountName string, accountID *string, privateEndpointName, vnetResourceGroup, vnetName, subnetName, location string) error { +func (az *Cloud) createPrivateEndpoint(ctx context.Context, accountName string, accountID *string, privateEndpointName, vnetResourceGroup, vnetName, subnetName, location string, storageType StorageType) error { klog.V(2).Infof("Creating private endpoint(%s) for account (%s)", privateEndpointName, accountName) subnet, _, err := az.getSubnet(vnetName, subnetName) @@ -401,10 +525,13 @@ func (az *Cloud) createPrivateEndpoint(ctx context.Context, accountName string, //Create private endpoint privateLinkServiceConnectionName := accountName + "-pvtsvcconn" + if storageType == StorageTypeBlob { + privateLinkServiceConnectionName = privateLinkServiceConnectionName + "-blob" + } privateLinkServiceConnection := network.PrivateLinkServiceConnection{ Name: &privateLinkServiceConnectionName, PrivateLinkServiceConnectionProperties: &network.PrivateLinkServiceConnectionProperties{ - GroupIds: &[]string{GroupIDFile}, + GroupIds: &[]string{string(storageType)}, PrivateLinkServiceID: accountID, }, } @@ -417,13 +544,13 @@ func (az *Cloud) createPrivateEndpoint(ctx context.Context, accountName string, return az.privateendpointclient.CreateOrUpdate(ctx, vnetResourceGroup, privateEndpointName, privateEndpoint, "", true).Error() } -func (az *Cloud) createPrivateDNSZone(ctx context.Context, vnetResourceGroup string) error { - klog.V(2).Infof("Creating private dns zone(%s) in resourceGroup (%s)", PrivateDNSZoneName, vnetResourceGroup) +func (az *Cloud) createPrivateDNSZone(ctx context.Context, vnetResourceGroup, privateDNSZoneName string) error { + klog.V(2).Infof("Creating private dns zone(%s) in resourceGroup (%s)", privateDNSZoneName, vnetResourceGroup) location := LocationGlobal privateDNSZone := privatedns.PrivateZone{Location: &location} - if err := az.privatednsclient.CreateOrUpdate(ctx, vnetResourceGroup, PrivateDNSZoneName, privateDNSZone, "", true); err != nil { + if err := az.privatednsclient.CreateOrUpdate(ctx, vnetResourceGroup, privateDNSZoneName, privateDNSZone, "", true); err != nil { if strings.Contains(err.Error().Error(), "exists already") { - klog.V(2).Infof("private dns zone(%s) in resourceGroup (%s) already exists", PrivateDNSZoneName, vnetResourceGroup) + klog.V(2).Infof("private dns zone(%s) in resourceGroup (%s) already exists", privateDNSZoneName, vnetResourceGroup) return nil } return err.Error() @@ -431,25 +558,24 @@ func (az *Cloud) createPrivateDNSZone(ctx context.Context, vnetResourceGroup str return nil } -func (az *Cloud) createVNetLink(ctx context.Context, vNetLinkName, vnetResourceGroup, vnetName string) error { - klog.V(2).Infof("Creating virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s)", vNetLinkName, PrivateDNSZoneName, vnetResourceGroup) +func (az *Cloud) createVNetLink(ctx context.Context, vNetLinkName, vnetResourceGroup, vnetName, privateDNSZoneName string) error { + klog.V(2).Infof("Creating virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s)", vNetLinkName, privateDNSZoneName, vnetResourceGroup) location := LocationGlobal vnetID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s", az.SubscriptionID, vnetResourceGroup, vnetName) parameters := privatedns.VirtualNetworkLink{ Location: &location, VirtualNetworkLinkProperties: &privatedns.VirtualNetworkLinkProperties{ VirtualNetwork: &privatedns.SubResource{ID: &vnetID}, - RegistrationEnabled: to.BoolPtr(true)}, + RegistrationEnabled: pointer.Bool(false)}, } - return az.virtualNetworkLinksClient.CreateOrUpdate(ctx, vnetResourceGroup, PrivateDNSZoneName, vNetLinkName, parameters, "", false).Error() + return az.virtualNetworkLinksClient.CreateOrUpdate(ctx, vnetResourceGroup, privateDNSZoneName, vNetLinkName, parameters, "", false).Error() } -func (az *Cloud) createPrivateDNSZoneGroup(ctx context.Context, dnsZoneGroupName, privateEndpointName, vnetResourceGroup, vnetName string) error { +func (az *Cloud) createPrivateDNSZoneGroup(ctx context.Context, dnsZoneGroupName, privateEndpointName, vnetResourceGroup, vnetName, privateDNSZoneName string) error { klog.V(2).Infof("Creating private DNS zone group(%s) with privateEndpoint(%s), vNetName(%s), resourceGroup(%s)", dnsZoneGroupName, privateEndpointName, vnetName, vnetResourceGroup) - privateDNSZoneID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/privateDnsZones/%s", az.SubscriptionID, vnetResourceGroup, PrivateDNSZoneName) - dnsZoneName := PrivateDNSZoneName + privateDNSZoneID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/privateDnsZones/%s", az.SubscriptionID, vnetResourceGroup, privateDNSZoneName) privateDNSZoneConfig := network.PrivateDNSZoneConfig{ - Name: &dnsZoneName, + Name: &privateDNSZoneName, PrivateDNSZonePropertiesFormat: &network.PrivateDNSZonePropertiesFormat{ PrivateDNSZoneID: &privateDNSZoneID}, } @@ -462,12 +588,44 @@ func (az *Cloud) createPrivateDNSZoneGroup(ctx context.Context, dnsZoneGroupName return az.privatednszonegroupclient.CreateOrUpdate(ctx, vnetResourceGroup, privateEndpointName, dnsZoneGroupName, privateDNSZoneGroup, "", false).Error() } -// AddStorageAccountTags add tags to storage account -func (az *Cloud) AddStorageAccountTags(ctx context.Context, subsID, resourceGroup, account string, tags map[string]*string) *retry.Error { +func (az *Cloud) newStorageAccountCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { return nil, nil } + return azcache.NewTimedCache(time.Minute, getter, az.Config.DisableAPICallCache) +} + +func (az *Cloud) getStorageAccountWithCache(ctx context.Context, subsID, resourceGroup, account string) (storage.Account, *retry.Error) { if az.StorageAccountClient == nil { - return retry.NewError(false, fmt.Errorf("StorageAccountClient is nil")) + return storage.Account{}, retry.NewError(false, fmt.Errorf("StorageAccountClient is nil")) } - result, rerr := az.StorageAccountClient.GetProperties(ctx, subsID, resourceGroup, account) + + if az.storageAccountCache == nil { + return storage.Account{}, retry.NewError(false, fmt.Errorf("storageAccountCache is nil")) + } + + // search in cache first + cache, err := az.storageAccountCache.Get(account, cache.CacheReadTypeDefault) + if err != nil { + return storage.Account{}, retry.NewError(false, err) + } + var result storage.Account + if cache != nil { + result = cache.(storage.Account) + klog.V(2).Infof("Get storage account(%s) from cache", account) + } else { + var rerr *retry.Error + result, rerr = az.StorageAccountClient.GetProperties(ctx, subsID, resourceGroup, account) + if rerr != nil { + return storage.Account{}, rerr + } + az.storageAccountCache.Set(account, result) + } + + return result, nil +} + +// AddStorageAccountTags add tags to storage account +func (az *Cloud) AddStorageAccountTags(ctx context.Context, subsID, resourceGroup, account string, tags map[string]*string) *retry.Error { + result, rerr := az.getStorageAccountWithCache(ctx, subsID, resourceGroup, account) if rerr != nil { return rerr } @@ -482,16 +640,18 @@ func (az *Cloud) AddStorageAccountTags(ctx context.Context, subsID, resourceGrou newTags[k] = v } - updateParams := storage.AccountUpdateParameters{Tags: newTags} - return az.StorageAccountClient.Update(ctx, subsID, resourceGroup, account, updateParams) + if len(newTags) > len(result.Tags) { + // only update when newTags is different from old tags + _ = az.storageAccountCache.Delete(account) // clean cache + updateParams := storage.AccountUpdateParameters{Tags: newTags} + return az.StorageAccountClient.Update(ctx, subsID, resourceGroup, account, updateParams) + } + return nil } // RemoveStorageAccountTag remove tag from storage account func (az *Cloud) RemoveStorageAccountTag(ctx context.Context, subsID, resourceGroup, account, key string) *retry.Error { - if az.StorageAccountClient == nil { - return retry.NewError(false, fmt.Errorf("StorageAccountClient is nil")) - } - result, rerr := az.StorageAccountClient.GetProperties(ctx, subsID, resourceGroup, account) + result, rerr := az.getStorageAccountWithCache(ctx, subsID, resourceGroup, account) if rerr != nil { return rerr } @@ -503,6 +663,8 @@ func (az *Cloud) RemoveStorageAccountTag(ctx context.Context, subsID, resourceGr originalLen := len(result.Tags) delete(result.Tags, key) if originalLen != len(result.Tags) { + // only update when newTags is different from old tags + _ = az.storageAccountCache.Delete(account) // clean cache updateParams := storage.AccountUpdateParameters{Tags: result.Tags} return az.StorageAccountClient.Update(ctx, subsID, resourceGroup, account, updateParams) } @@ -540,7 +702,7 @@ func AreVNetRulesEqual(account storage.Account, accountOptions *AccountOptions) found := false for _, subnetID := range accountOptions.VirtualNetworkResourceIDs { for _, rule := range *account.AccountProperties.NetworkRuleSet.VirtualNetworkRules { - if strings.EqualFold(to.String(rule.VirtualNetworkResourceID), subnetID) && rule.Action == storage.ActionAllow { + if strings.EqualFold(pointer.StringDeref(rule.VirtualNetworkResourceID, ""), subnetID) && rule.Action == storage.ActionAllow { found = true break } @@ -554,10 +716,13 @@ func AreVNetRulesEqual(account storage.Account, accountOptions *AccountOptions) } func isLargeFileSharesPropertyEqual(account storage.Account, accountOptions *AccountOptions) bool { - if account.Sku.Tier != storage.SkuTier(compute.StorageAccountTypesPremiumLRS) && accountOptions.EnableLargeFileShare && (len(account.LargeFileSharesState) == 0 || account.LargeFileSharesState == storage.LargeFileSharesStateDisabled) { - return false + if accountOptions.EnableLargeFileShare == nil { + return true } - return true + if *accountOptions.EnableLargeFileShare { + return account.LargeFileSharesState == storage.LargeFileSharesStateEnabled + } + return account.LargeFileSharesState == "" || account.LargeFileSharesState == storage.LargeFileSharesStateDisabled } func isTaggedWithSkip(account storage.Account) bool { @@ -597,11 +762,11 @@ func isTagsEqual(account storage.Account, accountOptions *AccountOptions) bool { } func isHnsPropertyEqual(account storage.Account, accountOptions *AccountOptions) bool { - return to.Bool(account.IsHnsEnabled) == to.Bool(accountOptions.IsHnsEnabled) + return pointer.BoolDeref(accountOptions.IsHnsEnabled, false) == pointer.BoolDeref(account.IsHnsEnabled, false) } func isEnableNfsV3PropertyEqual(account storage.Account, accountOptions *AccountOptions) bool { - return to.Bool(account.EnableNfsV3) == to.Bool(accountOptions.EnableNfsV3) + return pointer.BoolDeref(accountOptions.EnableNfsV3, false) == pointer.BoolDeref(account.EnableNfsV3, false) } func isPrivateEndpointAsExpected(account storage.Account, accountOptions *AccountOptions) bool { @@ -613,3 +778,128 @@ func isPrivateEndpointAsExpected(account storage.Account, accountOptions *Accoun } return false } + +func isAllowBlobPublicAccessEqual(account storage.Account, accountOptions *AccountOptions) bool { + return pointer.BoolDeref(accountOptions.AllowBlobPublicAccess, true) == pointer.BoolDeref(account.AllowBlobPublicAccess, true) +} + +func isRequireInfrastructureEncryptionEqual(account storage.Account, accountOptions *AccountOptions) bool { + requireInfraEncryption := pointer.BoolDeref(accountOptions.RequireInfrastructureEncryption, false) + if account.Encryption == nil { + return !requireInfraEncryption + } + return requireInfraEncryption == pointer.BoolDeref(account.Encryption.RequireInfrastructureEncryption, false) +} + +func isAllowSharedKeyAccessEqual(account storage.Account, accountOptions *AccountOptions) bool { + return pointer.BoolDeref(accountOptions.AllowSharedKeyAccess, true) == pointer.BoolDeref(account.AllowSharedKeyAccess, true) +} + +func isAccessTierEqual(account storage.Account, accountOptions *AccountOptions) bool { + if accountOptions.AccessTier == "" { + return true + } + return accountOptions.AccessTier == string(account.AccessTier) +} + +func (az *Cloud) isMultichannelEnabledEqual(ctx context.Context, account storage.Account, accountOptions *AccountOptions) bool { + if accountOptions.IsMultichannelEnabled == nil { + return true + } + + if account.Name == nil { + klog.Warningf("account.Name under resource group(%s) is nil", accountOptions.ResourceGroup) + return false + } + + prop, err := az.FileClient.WithSubscriptionID(accountOptions.SubscriptionID).GetServiceProperties(ctx, accountOptions.ResourceGroup, *account.Name) + if err != nil { + klog.Warningf("GetServiceProperties(%s) under resource group(%s) failed with %v", *account.Name, accountOptions.ResourceGroup, err) + return false + } + + if prop.FileServicePropertiesProperties == nil || + prop.FileServicePropertiesProperties.ProtocolSettings == nil || + prop.FileServicePropertiesProperties.ProtocolSettings.Smb == nil || + prop.FileServicePropertiesProperties.ProtocolSettings.Smb.Multichannel == nil { + return !*accountOptions.IsMultichannelEnabled + } + + return *accountOptions.IsMultichannelEnabled == pointer.BoolDeref(prop.FileServicePropertiesProperties.ProtocolSettings.Smb.Multichannel.Enabled, false) +} + +func (az *Cloud) isDisableFileServiceDeleteRetentionPolicyEqual(ctx context.Context, account storage.Account, accountOptions *AccountOptions) bool { + if accountOptions.DisableFileServiceDeleteRetentionPolicy == nil { + return true + } + + if account.Name == nil { + klog.Warningf("account.Name under resource group(%s) is nil", accountOptions.ResourceGroup) + return false + } + + prop, err := az.FileClient.WithSubscriptionID(accountOptions.SubscriptionID).GetServiceProperties(ctx, accountOptions.ResourceGroup, *account.Name) + if err != nil { + klog.Warningf("GetServiceProperties(%s) under resource group(%s) failed with %v", *account.Name, accountOptions.ResourceGroup, err) + return false + } + + if prop.FileServicePropertiesProperties == nil || + prop.FileServicePropertiesProperties.ShareDeleteRetentionPolicy == nil || + prop.FileServicePropertiesProperties.ShareDeleteRetentionPolicy.Enabled == nil { + // by default, ShareDeleteRetentionPolicy.Enabled is true if it's nil + return !*accountOptions.DisableFileServiceDeleteRetentionPolicy + } + + return *accountOptions.DisableFileServiceDeleteRetentionPolicy != *prop.FileServicePropertiesProperties.ShareDeleteRetentionPolicy.Enabled +} + +func (az *Cloud) isEnableBlobDataProtectionEqual(ctx context.Context, account storage.Account, accountOptions *AccountOptions) bool { + if accountOptions.SoftDeleteBlobs == 0 && + accountOptions.SoftDeleteContainers == 0 && + accountOptions.EnableBlobVersioning == nil { + return true + } + + property, err := az.BlobClient.GetServiceProperties(ctx, accountOptions.SubscriptionID, accountOptions.ResourceGroup, *account.Name) + if err != nil { + klog.Warningf("GetServiceProperties failed for account %s, err: %v", *account.Name, err) + return false + } + + return isSoftDeleteBlobsEqual(property, accountOptions) && + isSoftDeleteContainersEqual(property, accountOptions) && + isEnableBlobVersioningEqual(property, accountOptions) +} + +func isSoftDeleteBlobsEqual(property storage.BlobServiceProperties, accountOptions *AccountOptions) bool { + wantEnable := accountOptions.SoftDeleteBlobs > 0 + actualEnable := property.DeleteRetentionPolicy != nil && + pointer.BoolDeref(property.DeleteRetentionPolicy.Enabled, false) + if wantEnable != actualEnable { + return false + } + if !actualEnable { + return true + } + + return accountOptions.SoftDeleteBlobs == pointer.Int32Deref(property.DeleteRetentionPolicy.Days, 0) +} + +func isSoftDeleteContainersEqual(property storage.BlobServiceProperties, accountOptions *AccountOptions) bool { + wantEnable := accountOptions.SoftDeleteContainers > 0 + actualEnable := property.ContainerDeleteRetentionPolicy != nil && + pointer.BoolDeref(property.ContainerDeleteRetentionPolicy.Enabled, false) + if wantEnable != actualEnable { + return false + } + if !actualEnable { + return true + } + + return accountOptions.SoftDeleteContainers == pointer.Int32Deref(property.ContainerDeleteRetentionPolicy.Days, 0) +} + +func isEnableBlobVersioningEqual(property storage.BlobServiceProperties, accountOptions *AccountOptions) bool { + return pointer.BoolDeref(accountOptions.EnableBlobVersioning, false) == pointer.BoolDeref(property.IsVersioningEnabled, false) +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_subnet_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_subnet_repo.go new file mode 100644 index 000000000000..9d5cec09e3bc --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_subnet_repo.go @@ -0,0 +1,68 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" +) + +// CreateOrUpdateSubnet invokes az.SubnetClient.CreateOrUpdate with exponential backoff retry +func (az *Cloud) CreateOrUpdateSubnet(service *v1.Service, subnet network.Subnet) error { + ctx, cancel := getContextWithCancel() + defer cancel() + + var rg string + if len(az.VnetResourceGroup) > 0 { + rg = az.VnetResourceGroup + } else { + rg = az.ResourceGroup + } + + rerr := az.SubnetsClient.CreateOrUpdate(ctx, rg, az.VnetName, *subnet.Name, subnet) + klog.V(10).Infof("SubnetClient.CreateOrUpdate(%s): end", *subnet.Name) + if rerr != nil { + klog.Errorf("SubnetClient.CreateOrUpdate(%s) failed: %s", *subnet.Name, rerr.Error().Error()) + az.Event(service, v1.EventTypeWarning, "CreateOrUpdateSubnet", rerr.Error().Error()) + return rerr.Error() + } + + return nil +} + +func (az *Cloud) getSubnet(virtualNetworkName string, subnetName string) (network.Subnet, bool, error) { + var rg string + if len(az.VnetResourceGroup) > 0 { + rg = az.VnetResourceGroup + } else { + rg = az.ResourceGroup + } + + ctx, cancel := getContextWithCancel() + defer cancel() + subnet, err := az.SubnetsClient.Get(ctx, rg, virtualNetworkName, subnetName, "") + exists, rerr := checkResourceExistsFromError(err) + if rerr != nil { + return subnet, false, rerr.Error() + } + + if !exists { + klog.V(2).Infof("Subnet %q not found", subnetName) + } + return subnet, exists, nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_utils.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_utils.go index e3542f35c914..e8724ef6a506 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_utils.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_utils.go @@ -23,20 +23,25 @@ import ( "strings" "sync" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" ) +const ( + IPVersionIPv6 bool = true + IPVersionIPv4 bool = false +) + var strToExtendedLocationType = map[string]network.ExtendedLocationTypes{ - "edgezone": network.ExtendedLocationTypesEdgeZone, + "edgezone": network.EdgeZone, } // lockMap used to lock on entries @@ -56,12 +61,13 @@ func newLockMap() *lockMap { func (lm *lockMap) LockEntry(entry string) { lm.Lock() // check if entry does not exists, then add entry - if _, exists := lm.mutexMap[entry]; !exists { - lm.addEntry(entry) + mutex, exists := lm.mutexMap[entry] + if !exists { + mutex = &sync.Mutex{} + lm.mutexMap[entry] = mutex } - lm.Unlock() - lm.lockEntry(entry) + mutex.Lock() } // UnlockEntry release the lock associated with the specific entry @@ -69,22 +75,11 @@ func (lm *lockMap) UnlockEntry(entry string) { lm.Lock() defer lm.Unlock() - if _, exists := lm.mutexMap[entry]; !exists { + mutex, exists := lm.mutexMap[entry] + if !exists { return } - lm.unlockEntry(entry) -} - -func (lm *lockMap) addEntry(entry string) { - lm.mutexMap[entry] = &sync.Mutex{} -} - -func (lm *lockMap) lockEntry(entry string) { - lm.mutexMap[entry].Lock() -} - -func (lm *lockMap) unlockEntry(entry string) { - lm.mutexMap[entry].Unlock() + mutex.Unlock() } func getContextWithCancel() (context.Context, context.CancelFunc) { @@ -116,7 +111,7 @@ func parseTags(tags string, tagsMap map[string]string) map[string]*string { klog.Warning("parseTags: empty key, ignoring this key-value pair") continue } - formatted[k] = to.StringPtr(v) + formatted[k] = pointer.String(v) } } @@ -132,7 +127,7 @@ func parseTags(tags string, tagsMap map[string]string) map[string]*string { klog.V(4).Infof("parseTags: found identical keys: %s from tags and %s from tagsMap (case-insensitive), %s will replace %s", k, key, key, k) delete(formatted, k) } - formatted[key] = to.StringPtr(value) + formatted[key] = pointer.String(value) } } @@ -160,7 +155,7 @@ func (az *Cloud) reconcileTags(currentTagsOnResource, newTags map[string]*string } for _, systemTag := range systemTags { - systemTagsMap[systemTag] = to.StringPtr("") + systemTagsMap[systemTag] = pointer.String("") } } @@ -171,7 +166,7 @@ func (az *Cloud) reconcileTags(currentTagsOnResource, newTags map[string]*string if !found { currentTagsOnResource[k] = v changed = true - } else if !strings.EqualFold(to.String(v), to.String(currentTagsOnResource[key])) { + } else if !strings.EqualFold(pointer.StringDeref(v, ""), pointer.StringDeref(currentTagsOnResource[key], "")) { currentTagsOnResource[key] = v changed = true } @@ -182,6 +177,7 @@ func (az *Cloud) reconcileTags(currentTagsOnResource, newTags map[string]*string for k := range currentTagsOnResource { if _, ok := newTags[k]; !ok { if found, _ := findKeyInMapCaseInsensitive(systemTagsMap, k); !found { + klog.V(2).Infof("reconcileTags: delete tag %s: %s", k, pointer.StringDeref(currentTagsOnResource[k], "")) delete(currentTagsOnResource, k) changed = true } @@ -192,24 +188,12 @@ func (az *Cloud) reconcileTags(currentTagsOnResource, newTags map[string]*string return currentTagsOnResource, changed } -func (az *Cloud) getVMSetNamesSharingPrimarySLB() sets.String { - vmSetNames := make([]string, 0) - if az.NodePoolsWithoutDedicatedSLB != "" { - vmSetNames = strings.Split(az.Config.NodePoolsWithoutDedicatedSLB, consts.VMSetNamesSharingPrimarySLBDelimiter) - for i := 0; i < len(vmSetNames); i++ { - vmSetNames[i] = strings.ToLower(strings.TrimSpace(vmSetNames[i])) - } - } - - return sets.NewString(vmSetNames...) -} - func getExtendedLocationTypeFromString(extendedLocationType string) network.ExtendedLocationTypes { extendedLocationType = strings.ToLower(extendedLocationType) if val, ok := strToExtendedLocationType[extendedLocationType]; ok { return val } - return network.ExtendedLocationTypesEdgeZone + return network.EdgeZone } func getServiceAdditionalPublicIPs(service *v1.Service) ([]string, error) { @@ -237,11 +221,10 @@ func getServiceAdditionalPublicIPs(service *v1.Service) ([]string, error) { return result, nil } -func getNodePrivateIPAddress(service *v1.Service, node *v1.Node) string { - isIPV6SVC := utilnet.IsIPv6String(service.Spec.ClusterIP) +func getNodePrivateIPAddress(node *v1.Node, isIPv6 bool) string { for _, nodeAddress := range node.Status.Addresses { if strings.EqualFold(string(nodeAddress.Type), string(v1.NodeInternalIP)) && - utilnet.IsIPv6String(nodeAddress.Address) == isIPV6SVC { + utilnet.IsIPv6String(nodeAddress.Address) == isIPv6 { klog.V(6).Infof("getNodePrivateIPAddress: node %s, ip %s", node.Name, nodeAddress.Address) return nodeAddress.Address } @@ -289,11 +272,11 @@ func sameContentInSlices(s1 []string, s2 []string) bool { func removeDuplicatedSecurityRules(rules []network.SecurityRule) []network.SecurityRule { ruleNames := make(map[string]bool) for i := len(rules) - 1; i >= 0; i-- { - if _, ok := ruleNames[to.String(rules[i].Name)]; ok { - klog.Warningf("Found duplicated rule %s, will be removed.", to.String(rules[i].Name)) + if _, ok := ruleNames[pointer.StringDeref(rules[i].Name, "")]; ok { + klog.Warningf("Found duplicated rule %s, will be removed.", pointer.StringDeref(rules[i].Name, "")) rules = append(rules[:i], rules[i+1:]...) } - ruleNames[to.String(rules[i].Name)] = true + ruleNames[pointer.StringDeref(rules[i].Name, "")] = true } return rules } @@ -304,17 +287,17 @@ func getVMSSVMCacheKey(resourceGroup, vmssName string) string { } // isNodeInVMSSVMCache check whether nodeName is in vmssVMCache -func isNodeInVMSSVMCache(nodeName string, vmssVMCache *azcache.TimedCache) bool { +func isNodeInVMSSVMCache(nodeName string, vmssVMCache azcache.Resource) bool { if vmssVMCache == nil { return false } var isInCache bool - vmssVMCache.Lock.Lock() - defer vmssVMCache.Lock.Unlock() + vmssVMCache.Lock() + defer vmssVMCache.Unlock() - for _, entry := range vmssVMCache.Store.List() { + for _, entry := range vmssVMCache.GetStore().List() { if entry != nil { e := entry.(*azcache.AzureCacheEntry) e.Lock.Lock() @@ -338,3 +321,286 @@ func isNodeInVMSSVMCache(nodeName string, vmssVMCache *azcache.TimedCache) bool return isInCache } + +func extractVmssVMName(name string) (string, string, error) { + split := strings.SplitAfter(name, consts.VMSSNameSeparator) + if len(split) < 2 { + klog.V(3).Infof("Failed to extract vmssVMName %q", name) + return "", "", ErrorNotVmssInstance + } + + ssName := strings.Join(split[0:len(split)-1], "") + // removing the trailing `vmssNameSeparator` since we used SplitAfter + ssName = ssName[:len(ssName)-1] + instanceID := split[len(split)-1] + return ssName, instanceID, nil +} + +// isServiceDualStack checks if a Service is dual-stack or not. +func isServiceDualStack(svc *v1.Service) bool { + return len(svc.Spec.IPFamilies) == 2 +} + +// getIPFamiliesEnabled checks if IPv4, IPv6 are enabled according to svc.Spec.IPFamilies. +func getIPFamiliesEnabled(svc *v1.Service) (v4Enabled bool, v6Enabled bool) { + for _, ipFamily := range svc.Spec.IPFamilies { + if ipFamily == v1.IPv4Protocol { + v4Enabled = true + } else if ipFamily == v1.IPv6Protocol { + v6Enabled = true + } + } + return +} + +// getServiceLoadBalancerIP retrieves LB IP from IPv4 annotation, then IPv6 annotation, then service.Spec.LoadBalancerIP. +func getServiceLoadBalancerIP(service *v1.Service, isIPv6 bool) string { + if service == nil { + return "" + } + + if ip, ok := service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[isIPv6]]; ok && ip != "" { + return ip + } + + // Retrieve LB IP from service.Spec.LoadBalancerIP (will be deprecated) + svcLBIP := service.Spec.LoadBalancerIP + if (net.ParseIP(svcLBIP).To4() != nil && !isIPv6) || + (net.ParseIP(svcLBIP).To4() == nil && isIPv6) { + return svcLBIP + } + return "" +} + +func getServiceLoadBalancerIPs(service *v1.Service) []string { + if service == nil { + return []string{} + } + + ips := []string{} + if ip, ok := service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[false]]; ok && ip != "" { + ips = append(ips, ip) + } + if ip, ok := service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[true]]; ok && ip != "" { + ips = append(ips, ip) + } + if len(ips) != 0 { + return ips + } + + lbIP := service.Spec.LoadBalancerIP + if lbIP != "" { + ips = append(ips, lbIP) + } + + return ips +} + +// setServiceLoadBalancerIP sets LB IP to a Service +func setServiceLoadBalancerIP(service *v1.Service, ip string) { + if service == nil { + klog.Warning("setServiceLoadBalancerIP: Service is nil") + return + } + parsedIP := net.ParseIP(ip) + if parsedIP == nil { + klog.Warning("setServiceLoadBalancerIP: IP %q is not valid for Service", ip, service.Name) + return + } + + isIPv6 := parsedIP.To4() == nil + if service.Annotations == nil { + service.Annotations = map[string]string{} + } + service.Annotations[consts.ServiceAnnotationLoadBalancerIPDualStack[isIPv6]] = ip +} + +func getServicePIPName(service *v1.Service, isIPv6 bool) string { + if service == nil { + return "" + } + + if !isServiceDualStack(service) { + return service.Annotations[consts.ServiceAnnotationPIPNameDualStack[false]] + } + + return service.Annotations[consts.ServiceAnnotationPIPNameDualStack[isIPv6]] +} + +func getServicePIPNames(service *v1.Service) []string { + var ips []string + for _, ipVersion := range []bool{IPVersionIPv4, IPVersionIPv6} { + ips = append(ips, getServicePIPName(service, ipVersion)) + } + return ips +} + +func getServicePIPPrefixID(service *v1.Service, isIPv6 bool) string { + if service == nil { + return "" + } + + if !isServiceDualStack(service) { + return service.Annotations[consts.ServiceAnnotationPIPPrefixIDDualStack[false]] + } + + return service.Annotations[consts.ServiceAnnotationPIPPrefixIDDualStack[isIPv6]] +} + +// getResourceByIPFamily returns the resource name of with IPv6 suffix when +// it is a dual-stack Service and the resource is of IPv6. +// NOTICE: For PIPs of IPv6 Services created with CCM v1.27.1, after the CCM is upgraded, +// the old PIPs will be recreated. +func getResourceByIPFamily(resource string, isDualStack, isIPv6 bool) string { + if isDualStack && isIPv6 { + return fmt.Sprintf("%s-%s", resource, v6Suffix) + } + return resource +} + +// isFIPIPv6 checks if the frontend IP configuration is of IPv6. +// NOTICE: isFIPIPv6 assumes the FIP is owned by the Service and it is the primary Service. +func (az *Cloud) isFIPIPv6(service *v1.Service, pipRG string, fip *network.FrontendIPConfiguration) (bool, error) { + isDualStack := isServiceDualStack(service) + if !isDualStack { + return service.Spec.IPFamilies[0] == v1.IPv6Protocol, nil + } + return managedResourceHasIPv6Suffix(pointer.StringDeref(fip.Name, "")), nil +} + +// getResourceIDPrefix returns a substring from the provided one between beginning and the last "/". +func getResourceIDPrefix(id string) string { + idx := strings.LastIndexByte(id, '/') + if idx == -1 { + return id // Should not happen + } + return id[:idx] +} + +// fillSubnet fills subnet value into the variable. +func (az *Cloud) fillSubnet(subnet *network.Subnet, subnetName string) error { + if subnet == nil { + return fmt.Errorf("subnet is nil, should not happen") + } + if subnet.ID == nil { + curSubnet, existsSubnet, err := az.getSubnet(az.VnetName, subnetName) + if err != nil { + return err + } + if !existsSubnet { + return fmt.Errorf("failed to get subnet: %s/%s", az.VnetName, subnetName) + } + *subnet = curSubnet + } + return nil +} + +func getLBNameFromBackendPoolID(backendPoolID string) (string, error) { + matches := backendPoolIDRE.FindStringSubmatch(backendPoolID) + if len(matches) != 2 { + return "", fmt.Errorf("backendPoolID %q is in wrong format", backendPoolID) + } + + return matches[1], nil +} + +func countNICsOnBackendPool(backendPool network.BackendAddressPool) int { + if backendPool.BackendAddressPoolPropertiesFormat == nil || + backendPool.BackendIPConfigurations == nil { + return 0 + } + + return len(*backendPool.BackendIPConfigurations) +} + +func countIPsOnBackendPool(backendPool network.BackendAddressPool) int { + if backendPool.BackendAddressPoolPropertiesFormat == nil || + backendPool.LoadBalancerBackendAddresses == nil { + return 0 + } + + var ipsCount int + for _, loadBalancerBackendAddress := range *backendPool.LoadBalancerBackendAddresses { + if loadBalancerBackendAddress.LoadBalancerBackendAddressPropertiesFormat != nil && + pointer.StringDeref(loadBalancerBackendAddress.IPAddress, "") != "" { + ipsCount++ + } + } + + return ipsCount +} + +// StringInSlice check if string in a list +func StringInSlice(s string, list []string) bool { + for _, item := range list { + if item == s { + return true + } + } + return false +} + +// stringSlice returns a string slice value for the passed string slice pointer. It returns a nil +// slice if the pointer is nil. +func stringSlice(s *[]string) []string { + if s != nil { + return *s + } + return nil +} + +// IntInSlice checks if an int is in a list +func IntInSlice(i int, list []int) bool { + for _, item := range list { + if item == i { + return true + } + } + return false +} + +func safeAddKeyToStringsSet(set sets.Set[string], key string) sets.Set[string] { + if set != nil { + set.Insert(key) + } else { + set = sets.New[string](key) + } + + return set +} + +func safeRemoveKeyFromStringsSet(set sets.Set[string], key string) (sets.Set[string], bool) { + var has bool + if set != nil { + if set.Has(key) { + has = true + } + set.Delete(key) + } + + return set, has +} + +func setToStrings(set sets.Set[string]) []string { + var res []string + for key := range set { + res = append(res, key) + } + return res +} + +func isLocalService(service *v1.Service) bool { + return service.Spec.ExternalTrafficPolicy == v1.ServiceExternalTrafficPolicyLocal +} + +func getServiceIPFamily(service *v1.Service) string { + if len(service.Spec.IPFamilies) > 1 { + return consts.IPVersionDualStackString + } + for _, ipFamily := range service.Spec.IPFamilies { + if ipFamily == v1.IPv6Protocol { + return consts.IPVersionIPv6String + } + } + return consts.IPVersionIPv4String +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets.go index d829587960b6..e405ef3a7179 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets.go @@ -19,8 +19,8 @@ package provider import ( "context" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" "github.com/Azure/go-autorest/autorest/azure" v1 "k8s.io/api/core/v1" @@ -71,9 +71,9 @@ type VMSet interface { // participating in the specified LoadBalancer Backend Pool. EnsureHostInPool(service *v1.Service, nodeName types.NodeName, backendPoolID string, vmSetName string) (string, string, string, *compute.VirtualMachineScaleSetVM, error) // EnsureBackendPoolDeleted ensures the loadBalancer backendAddressPools deleted from the specified nodes. - EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) + EnsureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) //EnsureBackendPoolDeletedFromVMSets ensures the loadBalancer backendAddressPools deleted from the specified VMSS/VMAS - EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap map[string]bool, backendPoolID string) error + EnsureBackendPoolDeletedFromVMSets(vmSetNamesMap map[string]bool, backendPoolIDs []string) error // AttachDisk attaches a disk to vm AttachDisk(ctx context.Context, nodeName types.NodeName, diskMap map[string]*AttachDiskOptions) (*azure.Future, error) @@ -88,6 +88,9 @@ type VMSet interface { // UpdateVM updates a vm UpdateVM(ctx context.Context, nodeName types.NodeName) error + // UpdateVMAsync updates a vm asynchronously + UpdateVMAsync(ctx context.Context, nodeName types.NodeName) (*azure.Future, error) + // GetPowerStatusByNodeName returns the powerState for the specified node. GetPowerStatusByNodeName(name string) (string, error) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets_repo.go new file mode 100644 index 000000000000..a672286bd0ba --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmsets_repo.go @@ -0,0 +1,193 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "errors" + "fmt" + "strings" + "time" + + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" + cloudprovider "k8s.io/cloud-provider" + "k8s.io/klog/v2" + "k8s.io/utils/pointer" + + azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" + "sigs.k8s.io/cloud-provider-azure/pkg/consts" +) + +// GetVirtualMachineWithRetry invokes az.getVirtualMachine with exponential backoff retry +func (az *Cloud) GetVirtualMachineWithRetry(name types.NodeName, crt azcache.AzureCacheReadType) (compute.VirtualMachine, error) { + var machine compute.VirtualMachine + var retryErr error + err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { + machine, retryErr = az.getVirtualMachine(name, crt) + if errors.Is(retryErr, cloudprovider.InstanceNotFound) { + return true, cloudprovider.InstanceNotFound + } + if retryErr != nil { + klog.Errorf("GetVirtualMachineWithRetry(%s): backoff failure, will retry, err=%v", name, retryErr) + return false, nil + } + klog.V(2).Infof("GetVirtualMachineWithRetry(%s): backoff success", name) + return true, nil + }) + if errors.Is(err, wait.ErrWaitTimeout) { + err = retryErr + } + return machine, err +} + +// ListVirtualMachines invokes az.VirtualMachinesClient.List with exponential backoff retry +func (az *Cloud) ListVirtualMachines(resourceGroup string) ([]compute.VirtualMachine, error) { + ctx, cancel := getContextWithCancel() + defer cancel() + + allNodes, rerr := az.VirtualMachinesClient.List(ctx, resourceGroup) + if rerr != nil { + klog.Errorf("VirtualMachinesClient.List(%v) failure with err=%v", resourceGroup, rerr) + return nil, rerr.Error() + } + klog.V(6).Infof("VirtualMachinesClient.List(%v) success", resourceGroup) + return allNodes, nil +} + +// getPrivateIPsForMachine is wrapper for optional backoff getting private ips +// list of a node by name +func (az *Cloud) getPrivateIPsForMachine(nodeName types.NodeName) ([]string, error) { + return az.getPrivateIPsForMachineWithRetry(nodeName) +} + +func (az *Cloud) getPrivateIPsForMachineWithRetry(nodeName types.NodeName) ([]string, error) { + var privateIPs []string + err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { + var retryErr error + privateIPs, retryErr = az.VMSet.GetPrivateIPsByNodeName(string(nodeName)) + if retryErr != nil { + // won't retry since the instance doesn't exist on Azure. + if errors.Is(retryErr, cloudprovider.InstanceNotFound) { + return true, retryErr + } + klog.Errorf("GetPrivateIPsByNodeName(%s): backoff failure, will retry,err=%v", nodeName, retryErr) + return false, nil + } + klog.V(3).Infof("GetPrivateIPsByNodeName(%s): backoff success", nodeName) + return true, nil + }) + return privateIPs, err +} + +func (az *Cloud) getIPForMachine(nodeName types.NodeName) (string, string, error) { + return az.GetIPForMachineWithRetry(nodeName) +} + +// GetIPForMachineWithRetry invokes az.getIPForMachine with exponential backoff retry +func (az *Cloud) GetIPForMachineWithRetry(name types.NodeName) (string, string, error) { + var ip, publicIP string + err := wait.ExponentialBackoff(az.RequestBackoff(), func() (bool, error) { + var retryErr error + ip, publicIP, retryErr = az.VMSet.GetIPByNodeName(string(name)) + if retryErr != nil { + klog.Errorf("GetIPForMachineWithRetry(%s): backoff failure, will retry,err=%v", name, retryErr) + return false, nil + } + klog.V(3).Infof("GetIPForMachineWithRetry(%s): backoff success", name) + return true, nil + }) + return ip, publicIP, err +} + +func (az *Cloud) newVMCache() (azcache.Resource, error) { + getter := func(key string) (interface{}, error) { + // Currently InstanceView request are used by azure_zones, while the calls come after non-InstanceView + // request. If we first send an InstanceView request and then a non InstanceView request, the second + // request will still hit throttling. This is what happens now for cloud controller manager: In this + // case we do get instance view every time to fulfill the azure_zones requirement without hitting + // throttling. + // Consider adding separate parameter for controlling 'InstanceView' once node update issue #56276 is fixed + ctx, cancel := getContextWithCancel() + defer cancel() + + resourceGroup, err := az.GetNodeResourceGroup(key) + if err != nil { + return nil, err + } + + vm, verr := az.VirtualMachinesClient.Get(ctx, resourceGroup, key, compute.InstanceViewTypesInstanceView) + exists, rerr := checkResourceExistsFromError(verr) + if rerr != nil { + return nil, rerr.Error() + } + + if !exists { + klog.V(2).Infof("Virtual machine %q not found", key) + return nil, nil + } + + if vm.VirtualMachineProperties != nil && + strings.EqualFold(pointer.StringDeref(vm.VirtualMachineProperties.ProvisioningState, ""), string(consts.ProvisioningStateDeleting)) { + klog.V(2).Infof("Virtual machine %q is under deleting", key) + return nil, nil + } + + return &vm, nil + } + + if az.VMCacheTTLInSeconds == 0 { + az.VMCacheTTLInSeconds = vmCacheTTLDefaultInSeconds + } + return azcache.NewTimedCache(time.Duration(az.VMCacheTTLInSeconds)*time.Second, getter, az.Config.DisableAPICallCache) +} + +// getVirtualMachine calls 'VirtualMachinesClient.Get' with a timed cache +// The service side has throttling control that delays responses if there are multiple requests onto certain vm +// resource request in short period. +func (az *Cloud) getVirtualMachine(nodeName types.NodeName, crt azcache.AzureCacheReadType) (vm compute.VirtualMachine, err error) { + vmName := string(nodeName) + cachedVM, err := az.vmCache.Get(vmName, crt) + if err != nil { + return vm, err + } + + if cachedVM == nil { + klog.Warningf("Unable to find node %s: %v", nodeName, cloudprovider.InstanceNotFound) + return vm, cloudprovider.InstanceNotFound + } + + return *(cachedVM.(*compute.VirtualMachine)), nil +} + +func (az *Cloud) getRouteTable(crt azcache.AzureCacheReadType) (routeTable network.RouteTable, exists bool, err error) { + if len(az.RouteTableName) == 0 { + return routeTable, false, fmt.Errorf("route table name is not configured") + } + + cachedRt, err := az.rtCache.GetWithDeepCopy(az.RouteTableName, crt) + if err != nil { + return routeTable, false, err + } + + if cachedRt == nil { + return routeTable, false, nil + } + + return *(cachedRt.(*network.RouteTable)), true, nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss.go index 94b2201577af..24b29ac81b59 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss.go @@ -24,17 +24,17 @@ import ( "strconv" "strings" "sync" + "sync/atomic" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" - utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" @@ -86,19 +86,19 @@ type ScaleSet struct { // vmssCache is timed cache where the Store in the cache is a map of // Key: consts.VMSSKey // Value: sync.Map of [vmssName]*VMSSEntry - vmssCache *azcache.TimedCache + vmssCache azcache.Resource // vmssVMCache is timed cache where the Store in the cache is a map of // Key: [resourcegroup/vmssName] // Value: sync.Map of [vmName]*VMSSVirtualMachineEntry - vmssVMCache *azcache.TimedCache + vmssVMCache azcache.Resource // nonVmssUniformNodesCache is used to store node names from non uniform vm. // Currently, the nodes can from avset or vmss flex or individual vm. // This cache contains an entry called nonVmssUniformNodesEntry. // nonVmssUniformNodesEntry contains avSetVMNodeNames list, clusterNodeNames list // and current clusterNodeNames. - nonVmssUniformNodesCache *azcache.TimedCache + nonVmssUniformNodesCache azcache.Resource // lockMap in cache refresh lockMap *lockMap @@ -284,7 +284,7 @@ func (ss *ScaleSet) GetPowerStatusByNodeName(name string) (powerState string, er if v.InstanceView != nil && v.InstanceView.Statuses != nil { statuses := *v.InstanceView.Statuses for _, status := range statuses { - state := to.String(status.Code) + state := pointer.StringDeref(status.Code, "") if strings.HasPrefix(state, vmPowerStatePrefix) { return strings.TrimPrefix(state, vmPowerStatePrefix), nil } @@ -323,7 +323,7 @@ func (ss *ScaleSet) GetProvisioningStateByNodeName(name string) (provisioningSta return provisioningState, nil } - return to.String(vm.VirtualMachineScaleSetVMProperties.ProvisioningState), nil + return pointer.StringDeref(vm.VirtualMachineScaleSetVMProperties.ProvisioningState, ""), nil } // getCachedVirtualMachineByInstanceID gets scaleSetVMInfo from cache. @@ -373,6 +373,9 @@ func (ss *ScaleSet) getVmssVMByInstanceID(resourceGroup, scaleSetName, instanceI } } if !found || vm == nil { + // There is a corner case that the VM is deleted but the ip configuration is not deleted from the load balancer. + // In this case the cloud provider will keep refreshing the cache to search the VM, and will introduce + // a lot of unnecessary requests to ARM. return nil, cloudprovider.InstanceNotFound } @@ -687,7 +690,7 @@ func (ss *ScaleSet) GetPrivateIPsByNodeName(nodeName string) ([]string, error) { func (ss *ScaleSet) getPrimaryInterfaceID(vm *virtualmachine.VirtualMachine) (string, error) { machine := vm.AsVirtualMachineScaleSetVM() if machine.NetworkProfile == nil || machine.NetworkProfile.NetworkInterfaces == nil { - return "", fmt.Errorf("failed to find the network interfaces for vm %s", to.String(machine.Name)) + return "", fmt.Errorf("failed to find the network interfaces for vm %s", pointer.StringDeref(machine.Name, "")) } if len(*machine.NetworkProfile.NetworkInterfaces) == 1 { @@ -695,12 +698,12 @@ func (ss *ScaleSet) getPrimaryInterfaceID(vm *virtualmachine.VirtualMachine) (st } for _, ref := range *machine.NetworkProfile.NetworkInterfaces { - if to.Bool(ref.Primary) { + if pointer.BoolDeref(ref.Primary, false) { return *ref.ID, nil } } - return "", fmt.Errorf("failed to find a primary nic for the vm. vmname=%q", to.String(machine.Name)) + return "", fmt.Errorf("failed to find a primary nic for the vm. vmname=%q", pointer.StringDeref(machine.Name, "")) } // getVmssMachineID returns the full identifier of a vmss virtual machine. @@ -764,7 +767,7 @@ func (ss *ScaleSet) listScaleSets(resourceGroup string) ([]string, error) { ssNames := make([]string, 0) for _, vmss := range allScaleSets { name := *vmss.Name - if vmss.Sku != nil && to.Int64(vmss.Sku.Capacity) == 0 { + if vmss.Sku != nil && pointer.Int64Deref(vmss.Sku.Capacity, 0) == 0 { klog.V(3).Infof("Capacity of VMSS %q is 0, skipping", name) continue } @@ -899,8 +902,7 @@ func (ss *ScaleSet) getAgentPoolScaleSets(nodes []*v1.Node) (*[]string, error) { // for loadbalancer exists then return the eligible VMSet. func (ss *ScaleSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (*[]string, error) { hasMode, isAuto, serviceVMSetName := ss.getServiceLoadBalancerMode(service) - useSingleSLB := ss.useStandardLoadBalancer() && !ss.EnableMultipleStandardLoadBalancers - if !hasMode || useSingleSLB { + if !hasMode || ss.useStandardLoadBalancer() { // no mode specified in service annotation or use single SLB mode // default to PrimaryScaleSetName scaleSetNames := &[]string{ss.Config.PrimaryScaleSetName} @@ -1016,8 +1018,8 @@ func (ss *ScaleSet) GetPrimaryInterface(nodeName string) (network.Interface, err return nic, nil } -// getPrimaryNetworkInterfaceConfiguration gets primary network interface configuration for scale set virtual machine. -func (ss *ScaleSet) getPrimaryNetworkInterfaceConfiguration(networkConfigurations []compute.VirtualMachineScaleSetNetworkConfiguration, nodeName string) (*compute.VirtualMachineScaleSetNetworkConfiguration, error) { +// getPrimaryNetworkInterfaceConfiguration gets primary network interface configuration for VMSS VM or VMSS. +func getPrimaryNetworkInterfaceConfiguration(networkConfigurations []compute.VirtualMachineScaleSetNetworkConfiguration, resource string) (*compute.VirtualMachineScaleSetNetworkConfiguration, error) { if len(networkConfigurations) == 1 { return &networkConfigurations[0], nil } @@ -1029,58 +1031,38 @@ func (ss *ScaleSet) getPrimaryNetworkInterfaceConfiguration(networkConfiguration } } - return nil, fmt.Errorf("failed to find a primary network configuration for the scale set VM %q", nodeName) + return nil, fmt.Errorf("failed to find a primary network configuration for the VMSS VM or VMSS %q", resource) } -// getPrimaryNetworkInterfaceConfigurationForScaleSet gets primary network interface configuration for scale set. -func getPrimaryNetworkInterfaceConfigurationForScaleSet(networkConfigurations []compute.VirtualMachineScaleSetNetworkConfiguration, vmssName string) (*compute.VirtualMachineScaleSetNetworkConfiguration, error) { - if len(networkConfigurations) == 1 { - return &networkConfigurations[0], nil - } - - for idx := range networkConfigurations { - networkConfig := &networkConfigurations[idx] - if networkConfig.Primary != nil && *networkConfig.Primary { - return networkConfig, nil - } - } - - return nil, fmt.Errorf("failed to find a primary network configuration for the scale set %q", vmssName) -} - -func getPrimaryIPConfigFromVMSSNetworkConfig(config *compute.VirtualMachineScaleSetNetworkConfiguration) (*compute.VirtualMachineScaleSetIPConfiguration, error) { +func getPrimaryIPConfigFromVMSSNetworkConfig(config *compute.VirtualMachineScaleSetNetworkConfiguration, backendPoolID, resource string) (*compute.VirtualMachineScaleSetIPConfiguration, error) { ipConfigurations := *config.IPConfigurations - if len(ipConfigurations) == 1 { - return &ipConfigurations[0], nil - } - - for idx := range ipConfigurations { - ipConfig := &ipConfigurations[idx] - if ipConfig.Primary != nil && *ipConfig.Primary { - return ipConfig, nil + isIPv6 := isBackendPoolIPv6(backendPoolID) + + if !isIPv6 { + // There should be exactly one primary IP config. + // https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/virtual-network-network-interface-addresses?tabs=nic-address-portal#ip-configurations + if len(ipConfigurations) == 1 { + return &ipConfigurations[0], nil + } + for idx := range ipConfigurations { + ipConfig := &ipConfigurations[idx] + if ipConfig.Primary != nil && *ipConfig.Primary { + return ipConfig, nil + } } - } - - return nil, fmt.Errorf("failed to find a primary IP configuration") -} - -func getConfigForScaleSetByIPFamily(config *compute.VirtualMachineScaleSetNetworkConfiguration, nodeName string, IPv6 bool) (*compute.VirtualMachineScaleSetIPConfiguration, error) { - ipConfigurations := *config.IPConfigurations - - var ipVersion compute.IPVersion - if IPv6 { - ipVersion = compute.IPv6 } else { - ipVersion = compute.IPv4 - } - for idx := range ipConfigurations { - ipConfig := &ipConfigurations[idx] - if ipConfig.PrivateIPAddressVersion == ipVersion { - return ipConfig, nil + // For IPv6 or dualstack service, we need to pick the right IP configuration based on the cluster ip family + // IPv6 configuration is only supported as non-primary, so we need to fetch the ip configuration where the + // privateIPAddressVersion matches the clusterIP family + for idx := range ipConfigurations { + ipConfig := &ipConfigurations[idx] + if ipConfig.PrivateIPAddressVersion == compute.IPv6 { + return ipConfig, nil + } } } - return nil, fmt.Errorf("failed to find a IPconfiguration(IPv6=%v) for the scale set VM %q", IPv6, nodeName) + return nil, fmt.Errorf("failed to find a primary IP configuration (IPv6=%t) for the VMSS VM or VMSS %q", isIPv6, resource) } // EnsureHostInPool ensures the given VM's Primary NIC's Primary IP Configuration is @@ -1111,17 +1093,6 @@ func (ss *ScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeNam if !ss.useStandardLoadBalancer() { // need to check the vmSet name when using the basic LB needCheck = true - } else if ss.EnableMultipleStandardLoadBalancers { - // need to check the vmSet name when using multiple standard LBs - needCheck = true - - // ensure the vm that is supposed to share the primary SLB in the backendpool of the primary SLB - if strings.EqualFold(ss.GetPrimaryVMSetName(), vmSetNameOfLB) && - ss.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vm.VMSSName)) { - klog.V(4).Infof("EnsureHostInPool: the vm %s in the vmSet %s is supposed to share the primary SLB", - nodeName, vm.VMSSName) - needCheck = false - } } if vmSetNameOfLB != "" && needCheck && !strings.EqualFold(vmSetNameOfLB, vm.VMSSName) { @@ -1137,28 +1108,15 @@ func (ss *ScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeNam } networkInterfaceConfigurations := *vm.VirtualMachineScaleSetVMProperties.NetworkProfileConfiguration.NetworkInterfaceConfigurations - primaryNetworkInterfaceConfiguration, err := ss.getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, vmName) + primaryNetworkInterfaceConfiguration, err := getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, vmName) if err != nil { return "", "", "", nil, err } - var primaryIPConfiguration *compute.VirtualMachineScaleSetIPConfiguration - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) // Find primary network interface configuration. - if !ss.Cloud.ipv6DualStackEnabled && !ipv6 { - // Find primary IP configuration. - primaryIPConfiguration, err = getPrimaryIPConfigFromVMSSNetworkConfig(primaryNetworkInterfaceConfiguration) - if err != nil { - return "", "", "", nil, err - } - } else { - // For IPv6 or dualstack service, we need to pick the right IP configuration based on the cluster ip family - // IPv6 configuration is only supported as non-primary, so we need to fetch the ip configuration where the - // privateIPAddressVersion matches the clusterIP family - primaryIPConfiguration, err = getConfigForScaleSetByIPFamily(primaryNetworkInterfaceConfiguration, vmName, ipv6) - if err != nil { - return "", "", "", nil, err - } + primaryIPConfiguration, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNetworkInterfaceConfiguration, backendPoolID, vmName) + if err != nil { + return "", "", "", nil, err } // Update primary IP configuration's LoadBalancerBackendAddressPools. @@ -1203,7 +1161,7 @@ func (ss *ScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeNam // Compose a new vmssVM with added backendPoolID. newBackendPools = append(newBackendPools, compute.SubResource{ - ID: to.StringPtr(backendPoolID), + ID: pointer.String(backendPoolID), }) primaryIPConfiguration.LoadBalancerBackendAddressPools = &newBackendPools newVM := &compute.VirtualMachineScaleSetVM{ @@ -1247,7 +1205,7 @@ func (ss *ScaleSet) ensureVMSSInPool(service *v1.Service, nodes []*v1.Node, back // the single standard load balancer supports multiple vmss in its backend while // multiple standard load balancers and the basic load balancer doesn't - if ss.useStandardLoadBalancer() && !ss.EnableMultipleStandardLoadBalancers { + if ss.useStandardLoadBalancer() { for _, node := range nodes { if ss.excludeMasterNodesFromStandardLB() && isControlPlaneNode(node) { continue @@ -1312,24 +1270,14 @@ func (ss *ScaleSet) ensureVMSSInPool(service *v1.Service, nodes []*v1.Node, back continue } vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations - primaryNIC, err := getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssName) + primaryNIC, err := getPrimaryNetworkInterfaceConfiguration(vmssNIC, vmssName) if err != nil { return err } - var primaryIPConfig *compute.VirtualMachineScaleSetIPConfiguration - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) // Find primary network interface configuration. - if !ss.Cloud.ipv6DualStackEnabled && !ipv6 { - // Find primary IP configuration. - primaryIPConfig, err = getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC) - if err != nil { - return err - } - } else { - primaryIPConfig, err = getConfigForScaleSetByIPFamily(primaryNIC, "", ipv6) - if err != nil { - return err - } + primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC, backendPoolID, vmssName) + if err != nil { + return err } loadBalancerBackendAddressPools := []compute.SubResource{} @@ -1372,7 +1320,7 @@ func (ss *ScaleSet) ensureVMSSInPool(service *v1.Service, nodes []*v1.Node, back // Compose a new vmss with added backendPoolID. loadBalancerBackendAddressPools = append(loadBalancerBackendAddressPools, compute.SubResource{ - ID: to.StringPtr(backendPoolID), + ID: pointer.String(backendPoolID), }) primaryIPConfig.LoadBalancerBackendAddressPools = &loadBalancerBackendAddressPools newVMSS := compute.VirtualMachineScaleSet{ @@ -1583,7 +1531,7 @@ func (ss *ScaleSet) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, bac // ensureBackendPoolDeletedFromNode ensures the loadBalancer backendAddressPools deleted // from the specified node, which returns (resourceGroup, vmasName, instanceID, vmssVM, error). -func (ss *ScaleSet) ensureBackendPoolDeletedFromNode(nodeName, backendPoolID string) (string, string, string, *compute.VirtualMachineScaleSetVM, error) { +func (ss *ScaleSet) ensureBackendPoolDeletedFromNode(nodeName string, backendPoolIDs []string) (string, string, string, *compute.VirtualMachineScaleSetVM, error) { vm, err := ss.getVmssVM(nodeName, azcache.CacheReadTypeDefault) if err != nil { if errors.Is(err, cloudprovider.InstanceNotFound) { @@ -1596,45 +1544,31 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromNode(nodeName, backendPoolID str // Find primary network interface configuration. if vm.VirtualMachineScaleSetVMProperties.NetworkProfileConfiguration.NetworkInterfaceConfigurations == nil { - klog.V(4).Infof("EnsureHostInPool: cannot obtain the primary network interface configuration, of vm %s, "+ + klog.V(4).Infof("ensureBackendPoolDeletedFromNode: cannot obtain the primary network interface configuration, of vm %s, "+ "probably because the vm's being deleted", nodeName) return "", "", "", nil, nil } networkInterfaceConfigurations := *vm.VirtualMachineScaleSetVMProperties.NetworkProfileConfiguration.NetworkInterfaceConfigurations - primaryNetworkInterfaceConfiguration, err := ss.getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, nodeName) - if err != nil { - return "", "", "", nil, err - } - - // Find primary IP configuration. - primaryIPConfiguration, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNetworkInterfaceConfiguration) + primaryNetworkInterfaceConfiguration, err := getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, nodeName) if err != nil { return "", "", "", nil, err } - if primaryIPConfiguration.LoadBalancerBackendAddressPools == nil || len(*primaryIPConfiguration.LoadBalancerBackendAddressPools) == 0 { - return "", "", "", nil, nil - } - // Construct new loadBalancerBackendAddressPools and remove backendAddressPools from primary IP configuration. - existingBackendPools := *primaryIPConfiguration.LoadBalancerBackendAddressPools - newBackendPools := []compute.SubResource{} - foundPool := false - for i := len(existingBackendPools) - 1; i >= 0; i-- { - curPool := existingBackendPools[i] - if strings.EqualFold(backendPoolID, *curPool.ID) { - klog.V(10).Infof("ensureBackendPoolDeletedFromNode gets unwanted backend pool %q for node %s", backendPoolID, nodeName) - foundPool = true - newBackendPools = append(existingBackendPools[:i], existingBackendPools[i+1:]...) + foundTotal := false + for _, backendPoolID := range backendPoolIDs { + found, err := deleteBackendPoolFromIPConfig("ensureBackendPoolDeletedFromNode", backendPoolID, nodeName, primaryNetworkInterfaceConfiguration) + if err != nil { + return "", "", "", nil, err + } + if found { + foundTotal = true } } - - // Pool not found, assume it has been already removed. - if !foundPool { + if !foundTotal { return "", "", "", nil, nil } // Compose a new vmssVM with added backendPoolID. - primaryIPConfiguration.LoadBalancerBackendAddressPools = &newBackendPools newVM := &compute.VirtualMachineScaleSetVM{ Location: &vm.Location, VirtualMachineScaleSetVMProperties: &compute.VirtualMachineScaleSetVMProperties{ @@ -1704,7 +1638,7 @@ func getScaleSetAndResourceGroupNameByIPConfigurationID(ipConfigurationID string return scaleSetName, resourceGroup, nil } -func (ss *ScaleSet) ensureBackendPoolDeletedFromVMSS(backendPoolID, vmSetName string) error { +func (ss *ScaleSet) ensureBackendPoolDeletedFromVMSS(backendPoolIDs []string, vmSetName string) error { if !ss.useStandardLoadBalancer() { found := false @@ -1717,14 +1651,14 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromVMSS(backendPoolID, vmSetName st vmssUniformMap.Range(func(key, value interface{}) bool { vmssEntry := value.(*VMSSEntry) - if to.String(vmssEntry.VMSS.Name) == vmSetName { + if pointer.StringDeref(vmssEntry.VMSS.Name, "") == vmSetName { found = true return false } return true }) if found { - return ss.ensureBackendPoolDeletedFromVmssUniform(backendPoolID, vmSetName) + return ss.ensureBackendPoolDeletedFromVmssUniform(backendPoolIDs, vmSetName) } flexScaleSet := ss.flexScaleSet.(*FlexScaleSet) @@ -1736,7 +1670,7 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromVMSS(backendPoolID, vmSetName st vmssFlexMap := cachedFlex.(*sync.Map) vmssFlexMap.Range(func(key, value interface{}) bool { vmssFlex := value.(*compute.VirtualMachineScaleSet) - if to.String(vmssFlex.Name) == vmSetName { + if pointer.StringDeref(vmssFlex.Name, "") == vmSetName { found = true return false } @@ -1744,30 +1678,27 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromVMSS(backendPoolID, vmSetName st }) if found { - return flexScaleSet.ensureBackendPoolDeletedFromVmssFlex(backendPoolID, vmSetName) + return flexScaleSet.ensureBackendPoolDeletedFromVmssFlex(backendPoolIDs, vmSetName) } return cloudprovider.InstanceNotFound - } - err := ss.ensureBackendPoolDeletedFromVmssUniform(backendPoolID, vmSetName) + err := ss.ensureBackendPoolDeletedFromVmssUniform(backendPoolIDs, vmSetName) if err != nil { return err } if ss.EnableVmssFlexNodes { flexScaleSet := ss.flexScaleSet.(*FlexScaleSet) - err = flexScaleSet.ensureBackendPoolDeletedFromVmssFlex(backendPoolID, vmSetName) + err = flexScaleSet.ensureBackendPoolDeletedFromVmssFlex(backendPoolIDs, vmSetName) } return err } -func (ss *ScaleSet) ensureBackendPoolDeletedFromVmssUniform(backendPoolID, vmSetName string) error { - klog.V(2).Infof("ensureBackendPoolDeletedFromVmssUniform: vmSetName (%s), backendPoolID (%s)", vmSetName, backendPoolID) - +func (ss *ScaleSet) ensureBackendPoolDeletedFromVmssUniform(backendPoolIDs []string, vmSetName string) error { vmssNamesMap := make(map[string]bool) // the standard load balancer supports multiple vmss in its backend while the basic sku doesn't - if ss.useStandardLoadBalancer() && !ss.EnableMultipleStandardLoadBalancers { + if ss.useStandardLoadBalancer() { cachedUniform, err := ss.vmssCache.Get(consts.VMSSKey, azcache.CacheReadTypeDefault) if err != nil { klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to get vmss uniform from cache: %v", err) @@ -1783,44 +1714,53 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromVmssUniform(backendPoolID, vmSet } else if v, ok := value.(*compute.VirtualMachineScaleSet); ok { vmss = v } - klog.V(2).Infof("ensureBackendPoolDeletedFromVmssUniform: vmss (%s)", to.String(vmss.Name)) + klog.V(2).Infof("ensureBackendPoolDeletedFromVmssUniform: vmss %q, backendPoolIDs %q", pointer.StringDeref(vmss.Name, ""), backendPoolIDs) // When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error. // Since it is being deleted, we shouldn't send more CreateOrUpdate requests for it. if vmss.ProvisioningState != nil && strings.EqualFold(*vmss.ProvisioningState, consts.VirtualMachineScaleSetsDeallocating) { - klog.V(3).Infof("ensureBackendPoolDeletedFromVMSS: found vmss %s being deleted, skipping", to.String(vmss.Name)) + klog.V(3).Infof("ensureBackendPoolDeletedFromVMSS: found vmss %s being deleted, skipping", pointer.StringDeref(vmss.Name, "")) return true } if vmss.VirtualMachineProfile == nil { - klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: vmss %s has no VirtualMachineProfile, skipping", to.String(vmss.Name)) + klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: vmss %s has no VirtualMachineProfile, skipping", pointer.StringDeref(vmss.Name, "")) return true } if vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations == nil { - klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: cannot obtain the primary network interface configuration, of vmss %s", to.String(vmss.Name)) + klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: cannot obtain the primary network interface configuration, of vmss %s", pointer.StringDeref(vmss.Name, "")) return true } vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations - primaryNIC, err := getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, to.String(vmss.Name)) + primaryNIC, err := getPrimaryNetworkInterfaceConfiguration(vmssNIC, pointer.StringDeref(vmss.Name, "")) if err != nil { - klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to get the primary network interface config of the VMSS %s: %v", to.String(vmss.Name), err) + klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to get the primary network interface config of the VMSS %s: %v", pointer.StringDeref(vmss.Name, ""), err) errorList = append(errorList, err) return true } - primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC) - if err != nil { - klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to the primary IP config from the VMSS %s's network config : %v", to.String(vmss.Name), err) - errorList = append(errorList, err) + + handleBackendPool := func(backendPoolID string) bool { + primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC, backendPoolID, pointer.StringDeref(vmss.Name, "")) + if err != nil { + klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to find the primary IP config from the VMSS %s's network config : %v", pointer.StringDeref(vmss.Name, ""), err) + errorList = append(errorList, err) + return true + } + loadBalancerBackendAddressPools := make([]compute.SubResource, 0) + if primaryIPConfig.LoadBalancerBackendAddressPools != nil { + loadBalancerBackendAddressPools = *primaryIPConfig.LoadBalancerBackendAddressPools + } + for _, loadBalancerBackendAddressPool := range loadBalancerBackendAddressPools { + klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: loadBalancerBackendAddressPool (%s) on vmss (%s)", pointer.StringDeref(loadBalancerBackendAddressPool.ID, ""), pointer.StringDeref(vmss.Name, "")) + if strings.EqualFold(pointer.StringDeref(loadBalancerBackendAddressPool.ID, ""), backendPoolID) { + klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: found vmss %s with backend pool %s, removing it", pointer.StringDeref(vmss.Name, ""), backendPoolID) + vmssNamesMap[pointer.StringDeref(vmss.Name, "")] = true + } + } return true } - loadBalancerBackendAddressPools := make([]compute.SubResource, 0) - if primaryIPConfig.LoadBalancerBackendAddressPools != nil { - loadBalancerBackendAddressPools = *primaryIPConfig.LoadBalancerBackendAddressPools - } - for _, loadBalancerBackendAddressPool := range loadBalancerBackendAddressPools { - klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: loadBalancerBackendAddressPool (%s) on vmss (%s)", to.String(loadBalancerBackendAddressPool.ID), to.String(vmss.Name)) - if strings.EqualFold(to.String(loadBalancerBackendAddressPool.ID), backendPoolID) { - klog.V(4).Infof("ensureBackendPoolDeletedFromVMSS: found vmss %s with backend pool %s, removing it", to.String(vmss.Name), backendPoolID) - vmssNamesMap[to.String(vmss.Name)] = true + for _, backendPoolID := range backendPoolIDs { + if !handleBackendPool(backendPoolID) { + return false } } @@ -1833,14 +1773,15 @@ func (ss *ScaleSet) ensureBackendPoolDeletedFromVmssUniform(backendPoolID, vmSet return utilerrors.Flatten(utilerrors.NewAggregate(errorList)) } } else { + klog.V(2).Infof("ensureBackendPoolDeletedFromVmssUniform: vmss %q, backendPoolIDs %q", vmSetName, backendPoolIDs) vmssNamesMap[vmSetName] = true } - return ss.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, backendPoolID) + return ss.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, backendPoolIDs) } // ensureBackendPoolDeleted ensures the loadBalancer backendAddressPools deleted from the specified nodes. -func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool) (bool, error) { +func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool) (bool, error) { // Returns nil if backend address pools already deleted. if backendAddressPools == nil { return false, nil @@ -1854,13 +1795,15 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, ipConfigurationIDs := []string{} for _, backendPool := range *backendAddressPools { - if strings.EqualFold(*backendPool.ID, backendPoolID) && backendPool.BackendIPConfigurations != nil { - for _, ipConf := range *backendPool.BackendIPConfigurations { - if ipConf.ID == nil { - continue + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(*backendPool.ID, backendPoolID) && backendPool.BackendIPConfigurations != nil { + for _, ipConf := range *backendPool.BackendIPConfigurations { + if ipConf.ID == nil { + continue + } + + ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) } - - ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) } } } @@ -1869,8 +1812,14 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, hostUpdates := make([]func() error, 0, len(ipConfigurationIDs)) nodeUpdates := make(map[vmssMetaInfo]map[string]compute.VirtualMachineScaleSetVM) allErrs := make([]error, 0) + visitedIPConfigIDPrefix := map[string]bool{} for i := range ipConfigurationIDs { ipConfigurationID := ipConfigurationIDs[i] + ipConfigurationIDPrefix := getResourceIDPrefix(ipConfigurationID) + if _, ok := visitedIPConfigIDPrefix[ipConfigurationIDPrefix]; ok { + continue + } + visitedIPConfigIDPrefix[ipConfigurationIDPrefix] = true var scaleSetName string var err error @@ -1898,10 +1847,10 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, continue } - nodeResourceGroup, nodeVMSS, nodeInstanceID, nodeVMSSVM, err := ss.ensureBackendPoolDeletedFromNode(nodeName, backendPoolID) + nodeResourceGroup, nodeVMSS, nodeInstanceID, nodeVMSSVM, err := ss.ensureBackendPoolDeletedFromNode(nodeName, backendPoolIDs) if err != nil { if !errors.Is(err, ErrorNotVmssInstance) { // Do nothing for the VMAS nodes. - klog.Errorf("ensureBackendPoolDeleted(%s): backendPoolID(%s) - failed with error %v", getServiceName(service), backendPoolID, err) + klog.Errorf("ensureBackendPoolDeleted(%s): backendPoolIDs(%q) - failed with error %v", getServiceName(service), backendPoolIDs, err) allErrs = append(allErrs, err) } continue @@ -1928,7 +1877,7 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, } // Update VMs with best effort that have already been added to nodeUpdates. - var updatedVM bool + var updatedVM atomic.Bool for meta, update := range nodeUpdates { // create new instance of meta and update for passing to anonymous function meta := meta @@ -1941,7 +1890,7 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, "operation", "EnsureBackendPoolDeleted UpdateVMSSVMs", "vmssName", meta.vmssName, "resourceGroup", meta.resourceGroup, - "backendPoolID", backendPoolID, + "backendPoolIDs", backendPoolIDs, } batchSize, err := ss.VMSSBatchSize(meta.vmssName) @@ -1957,56 +1906,58 @@ func (ss *ScaleSet) ensureBackendPoolDeleted(service *v1.Service, backendPoolID, return rerr.Error() } - updatedVM = true + updatedVM.Store(true) return nil }) } errs := utilerrors.AggregateGoroutines(hostUpdates...) if errs != nil { - return updatedVM, utilerrors.Flatten(errs) + return updatedVM.Load(), utilerrors.Flatten(errs) } // Fail if there are other errors. if len(allErrs) > 0 { - return updatedVM, utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) + return updatedVM.Load(), utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) } isOperationSucceeded = true - return updatedVM, nil + return updatedVM.Load(), nil } // EnsureBackendPoolDeleted ensures the loadBalancer backendAddressPools deleted from the specified nodes. -func (ss *ScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { +func (ss *ScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { if backendAddressPools == nil { return false, nil } - vmssUniformBackendIPConfigurations := []network.InterfaceIPConfiguration{} - vmssFlexBackendIPConfigurations := []network.InterfaceIPConfiguration{} - avSetBackendIPConfigurations := []network.InterfaceIPConfiguration{} + vmssUniformBackendIPConfigurationsMap := map[string][]network.InterfaceIPConfiguration{} + vmssFlexBackendIPConfigurationsMap := map[string][]network.InterfaceIPConfiguration{} + avSetBackendIPConfigurationsMap := map[string][]network.InterfaceIPConfiguration{} for _, backendPool := range *backendAddressPools { - if strings.EqualFold(*backendPool.ID, backendPoolID) && backendPool.BackendIPConfigurations != nil { - for _, ipConf := range *backendPool.BackendIPConfigurations { - if ipConf.ID == nil { - continue - } - - vmManagementType, err := ss.getVMManagementTypeByIPConfigurationID(*ipConf.ID, azcache.CacheReadTypeUnsafe) - if err != nil { - klog.Warningf("Failed to check VM management type by ipConfigurationID %s: %v, skip it", *ipConf.ID, err) - } - - if vmManagementType == ManagedByAvSet { - // vm is managed by availability set. - avSetBackendIPConfigurations = append(avSetBackendIPConfigurations, ipConf) - } - if vmManagementType == ManagedByVmssFlex { - // vm is managed by vmss flex. - vmssFlexBackendIPConfigurations = append(vmssFlexBackendIPConfigurations, ipConf) - } - if vmManagementType == ManagedByVmssUniform { - // vm is managed by vmss flex. - vmssUniformBackendIPConfigurations = append(vmssUniformBackendIPConfigurations, ipConf) + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(*backendPool.ID, backendPoolID) && backendPool.BackendIPConfigurations != nil { + for _, ipConf := range *backendPool.BackendIPConfigurations { + if ipConf.ID == nil { + continue + } + + vmManagementType, err := ss.getVMManagementTypeByIPConfigurationID(*ipConf.ID, azcache.CacheReadTypeUnsafe) + if err != nil { + klog.Warningf("Failed to check VM management type by ipConfigurationID %s: %v, skip it", *ipConf.ID, err) + } + + if vmManagementType == ManagedByAvSet { + // vm is managed by availability set. + avSetBackendIPConfigurationsMap[backendPoolID] = append(avSetBackendIPConfigurationsMap[backendPoolID], ipConf) + } + if vmManagementType == ManagedByVmssFlex { + // vm is managed by vmss flex. + vmssFlexBackendIPConfigurationsMap[backendPoolID] = append(vmssFlexBackendIPConfigurationsMap[backendPoolID], ipConf) + } + if vmManagementType == ManagedByVmssUniform { + // vm is managed by vmss uniform. + vmssUniformBackendIPConfigurationsMap[backendPoolID] = append(vmssUniformBackendIPConfigurationsMap[backendPoolID], ipConf) + } } } } @@ -2015,23 +1966,25 @@ func (ss *ScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, // make sure all vmss including uniform and flex are decoupled from // the lb backend pool even if there is no ipConfigs in the backend pool. if deleteFromVMSet { - err := ss.ensureBackendPoolDeletedFromVMSS(backendPoolID, vmSetName) + err := ss.ensureBackendPoolDeletedFromVMSS(backendPoolIDs, vmSetName) if err != nil { return false, err } } var updated bool - if len(vmssUniformBackendIPConfigurations) > 0 { - vmssUniformBackendPools := &[]network.BackendAddressPool{ - { - ID: to.StringPtr(backendPoolID), - BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ - BackendIPConfigurations: &vmssUniformBackendIPConfigurations, - }, + vmssUniformBackendPools := []network.BackendAddressPool{} + for backendPoolID, vmssUniformBackendIPConfigurations := range vmssUniformBackendIPConfigurationsMap { + vmssUniformBackendIPConfigurations := vmssUniformBackendIPConfigurations + vmssUniformBackendPools = append(vmssUniformBackendPools, network.BackendAddressPool{ + ID: pointer.String(backendPoolID), + BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ + BackendIPConfigurations: &vmssUniformBackendIPConfigurations, }, - } - updatedVM, err := ss.ensureBackendPoolDeleted(service, backendPoolID, vmSetName, vmssUniformBackendPools) + }) + } + if len(vmssUniformBackendPools) > 0 { + updatedVM, err := ss.ensureBackendPoolDeleted(service, backendPoolIDs, vmSetName, &vmssUniformBackendPools) if err != nil { return false, err } @@ -2040,16 +1993,18 @@ func (ss *ScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, } } - if len(vmssFlexBackendIPConfigurations) > 0 { - vmssFlexBackendPools := &[]network.BackendAddressPool{ - { - ID: to.StringPtr(backendPoolID), - BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ - BackendIPConfigurations: &vmssFlexBackendIPConfigurations, - }, + vmssFlexBackendPools := []network.BackendAddressPool{} + for backendPoolID, vmssFlexBackendIPConfigurations := range vmssFlexBackendIPConfigurationsMap { + vmssFlexBackendIPConfigurations := vmssFlexBackendIPConfigurations + vmssFlexBackendPools = append(vmssFlexBackendPools, network.BackendAddressPool{ + ID: pointer.String(backendPoolID), + BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ + BackendIPConfigurations: &vmssFlexBackendIPConfigurations, }, - } - updatedNIC, err := ss.flexScaleSet.EnsureBackendPoolDeleted(service, backendPoolID, vmSetName, vmssFlexBackendPools, false) + }) + } + if len(vmssFlexBackendPools) > 0 { + updatedNIC, err := ss.flexScaleSet.EnsureBackendPoolDeleted(service, backendPoolIDs, vmSetName, &vmssFlexBackendPools, false) if err != nil { return false, err } @@ -2058,16 +2013,18 @@ func (ss *ScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, } } - if len(avSetBackendIPConfigurations) > 0 { - avSetBackendPools := &[]network.BackendAddressPool{ - { - ID: to.StringPtr(backendPoolID), - BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ - BackendIPConfigurations: &avSetBackendIPConfigurations, - }, + avSetBackendPools := []network.BackendAddressPool{} + for backendPoolID, avSetBackendIPConfigurations := range avSetBackendIPConfigurationsMap { + avSetBackendIPConfigurations := avSetBackendIPConfigurations + avSetBackendPools = append(avSetBackendPools, network.BackendAddressPool{ + ID: pointer.String(backendPoolID), + BackendAddressPoolPropertiesFormat: &network.BackendAddressPoolPropertiesFormat{ + BackendIPConfigurations: &avSetBackendIPConfigurations, }, - } - updatedNIC, err := ss.availabilitySet.EnsureBackendPoolDeleted(service, backendPoolID, vmSetName, avSetBackendPools, false) + }) + } + if len(avSetBackendPools) > 0 { + updatedNIC, err := ss.availabilitySet.EnsureBackendPoolDeleted(service, backendPoolIDs, vmSetName, &avSetBackendPools, false) if err != nil { return false, err } @@ -2109,23 +2066,52 @@ func (ss *ScaleSet) GetNodeCIDRMasksByProviderID(providerID string) (int, int, e var ipv4Mask, ipv6Mask int if v4, ok := vmss.Tags[consts.VMSetCIDRIPV4TagKey]; ok && v4 != nil { - ipv4Mask, err = strconv.Atoi(to.String(v4)) + ipv4Mask, err = strconv.Atoi(pointer.StringDeref(v4, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", to.String(v4), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", pointer.StringDeref(v4, ""), err) } } if v6, ok := vmss.Tags[consts.VMSetCIDRIPV6TagKey]; ok && v6 != nil { - ipv6Mask, err = strconv.Atoi(to.String(v6)) + ipv6Mask, err = strconv.Atoi(pointer.StringDeref(v6, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", to.String(v6), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", pointer.StringDeref(v6, ""), err) } } return ipv4Mask, ipv6Mask, nil } +// deleteBackendPoolFromIPConfig deletes the backend pool from the IP config. +func deleteBackendPoolFromIPConfig(msg, backendPoolID, resource string, primaryNIC *compute.VirtualMachineScaleSetNetworkConfiguration) (bool, error) { + primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC, backendPoolID, resource) + if err != nil { + klog.Errorf("%s: failed to get the primary IP config from the VMSS %q's network config: %v", msg, resource, err) + return false, err + } + loadBalancerBackendAddressPools := []compute.SubResource{} + if primaryIPConfig.LoadBalancerBackendAddressPools != nil { + loadBalancerBackendAddressPools = *primaryIPConfig.LoadBalancerBackendAddressPools + } + + var found bool + var newBackendPools []compute.SubResource + for i := len(loadBalancerBackendAddressPools) - 1; i >= 0; i-- { + curPool := loadBalancerBackendAddressPools[i] + if strings.EqualFold(backendPoolID, *curPool.ID) { + klog.V(10).Infof("%s gets unwanted backend pool %q for VMSS OR VMSS VM %q", msg, backendPoolID, resource) + found = true + newBackendPools = append(loadBalancerBackendAddressPools[:i], loadBalancerBackendAddressPools[i+1:]...) + } + } + if !found { + return false, nil + } + primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools + return true, nil +} + // EnsureBackendPoolDeletedFromVMSets ensures the loadBalancer backendAddressPools deleted from the specified VMSS -func (ss *ScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]bool, backendPoolID string) error { +func (ss *ScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]bool, backendPoolIDs []string) error { vmssUpdaters := make([]func() error, 0, len(vmssNamesMap)) errors := make([]error, 0, len(vmssNamesMap)) for vmssName := range vmssNamesMap { @@ -2148,40 +2134,29 @@ func (ss *ScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]b continue } vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations - primaryNIC, err := getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssName) + primaryNIC, err := getPrimaryNetworkInterfaceConfiguration(vmssNIC, vmssName) if err != nil { klog.Errorf("EnsureBackendPoolDeletedFromVMSets: failed to get the primary network interface config of the VMSS %s: %v", vmssName, err) errors = append(errors, err) continue } - primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC) - if err != nil { - klog.Errorf("EnsureBackendPoolDeletedFromVMSets: failed to the primary IP config from the VMSS %s's network config : %v", vmssName, err) - errors = append(errors, err) - continue - } - loadBalancerBackendAddressPools := []compute.SubResource{} - if primaryIPConfig.LoadBalancerBackendAddressPools != nil { - loadBalancerBackendAddressPools = *primaryIPConfig.LoadBalancerBackendAddressPools - } - - var found bool - var newBackendPools []compute.SubResource - for i := len(loadBalancerBackendAddressPools) - 1; i >= 0; i-- { - curPool := loadBalancerBackendAddressPools[i] - if strings.EqualFold(backendPoolID, *curPool.ID) { - klog.V(10).Infof("EnsureBackendPoolDeletedFromVMSets gets unwanted backend pool %q for VMSS %s", backendPoolID, vmssName) - found = true - newBackendPools = append(loadBalancerBackendAddressPools[:i], loadBalancerBackendAddressPools[i+1:]...) + foundTotal := false + for _, backendPoolID := range backendPoolIDs { + found, err := deleteBackendPoolFromIPConfig("EnsureBackendPoolDeletedFromVMSets", backendPoolID, vmssName, primaryNIC) + if err != nil { + errors = append(errors, err) + continue + } + if found { + foundTotal = true } } - if !found { + if !foundTotal { continue } vmssUpdaters = append(vmssUpdaters, func() error { // Compose a new vmss with added backendPoolID. - primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools newVMSS := compute.VirtualMachineScaleSet{ Location: vmss.Location, VirtualMachineScaleSetProperties: &compute.VirtualMachineScaleSetProperties{ @@ -2193,10 +2168,10 @@ func (ss *ScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]b }, } - klog.V(2).Infof("EnsureBackendPoolDeletedFromVMSets begins to update vmss(%s) with backendPoolID %s", vmssName, backendPoolID) + klog.V(2).Infof("EnsureBackendPoolDeletedFromVMSets begins to update vmss(%s) with backendPoolIDs %q", vmssName, backendPoolIDs) rerr := ss.CreateOrUpdateVMSS(ss.ResourceGroup, vmssName, newVMSS) if rerr != nil { - klog.Errorf("EnsureBackendPoolDeletedFromVMSets CreateOrUpdateVMSS(%s) with new backendPoolID %s, err: %v", vmssName, backendPoolID, rerr) + klog.Errorf("EnsureBackendPoolDeletedFromVMSets CreateOrUpdateVMSS(%s) with new backendPoolIDs %q, err: %v", vmssName, backendPoolIDs, rerr) return rerr.Error() } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_cache.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_cache.go index 47ff879cb783..860fead7a9aa 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_cache.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_cache.go @@ -23,11 +23,11 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" @@ -48,11 +48,11 @@ type VMSSEntry struct { } type NonVmssUniformNodesEntry struct { - VMSSFlexVMNodeNames sets.String - VMSSFlexVMProviderIDs sets.String - AvSetVMNodeNames sets.String - AvSetVMProviderIDs sets.String - ClusterNodeNames sets.String + VMSSFlexVMNodeNames sets.Set[string] + VMSSFlexVMProviderIDs sets.Set[string] + AvSetVMNodeNames sets.Set[string] + AvSetVMProviderIDs sets.Set[string] + ClusterNodeNames sets.Set[string] } type VMManagementType string @@ -64,7 +64,7 @@ const ( ManagedByUnknownVMSet VMManagementType = "ManagedByUnknownVMSet" ) -func (ss *ScaleSet) newVMSSCache(ctx context.Context) (*azcache.TimedCache, error) { +func (ss *ScaleSet) newVMSSCache(ctx context.Context) (azcache.Resource, error) { getter := func(key string) (interface{}, error) { localCache := &sync.Map{} // [vmssName]*vmssEntry @@ -74,7 +74,7 @@ func (ss *ScaleSet) newVMSSCache(ctx context.Context) (*azcache.TimedCache, erro } resourceGroupNotFound := false - for _, resourceGroup := range allResourceGroups.List() { + for _, resourceGroup := range allResourceGroups.UnsortedList() { allScaleSets, rerr := ss.VirtualMachineScaleSetsClient.List(ctx, resourceGroup) if rerr != nil { if rerr.IsNotFound() { @@ -102,14 +102,16 @@ func (ss *ScaleSet) newVMSSCache(ctx context.Context) (*azcache.TimedCache, erro } } - if resourceGroupNotFound { - // gc vmss vm cache when there is resource group not found - vmssVMKeys := ss.vmssVMCache.Store.ListKeys() - for _, cacheKey := range vmssVMKeys { - vmssName := cacheKey[strings.LastIndex(cacheKey, "/")+1:] - if _, ok := localCache.Load(vmssName); !ok { - klog.V(2).Infof("remove vmss %s from vmssVMCache due to rg not found", cacheKey) - _ = ss.vmssVMCache.Delete(cacheKey) + if !ss.Cloud.Config.DisableAPICallCache { + if resourceGroupNotFound { + // gc vmss vm cache when there is resource group not found + vmssVMKeys := ss.vmssVMCache.GetStore().ListKeys() + for _, cacheKey := range vmssVMKeys { + vmssName := cacheKey[strings.LastIndex(cacheKey, "/")+1:] + if _, ok := localCache.Load(vmssName); !ok { + klog.V(2).Infof("remove vmss %s from vmssVMCache due to rg not found", cacheKey) + _ = ss.vmssVMCache.Delete(cacheKey) + } } } } @@ -119,21 +121,7 @@ func (ss *ScaleSet) newVMSSCache(ctx context.Context) (*azcache.TimedCache, erro if ss.Config.VmssCacheTTLInSeconds == 0 { ss.Config.VmssCacheTTLInSeconds = consts.VMSSCacheTTLDefaultInSeconds } - return azcache.NewTimedcache(time.Duration(ss.Config.VmssCacheTTLInSeconds)*time.Second, getter) -} - -func extractVmssVMName(name string) (string, string, error) { - split := strings.SplitAfter(name, consts.VMSSNameSeparator) - if len(split) < 2 { - klog.V(3).Infof("Failed to extract vmssVMName %q", name) - return "", "", ErrorNotVmssInstance - } - - ssName := strings.Join(split[0:len(split)-1], "") - // removing the trailing `vmssNameSeparator` since we used SplitAfter - ssName = ssName[:len(ssName)-1] - instanceID := split[len(split)-1] - return ssName, instanceID, nil + return azcache.NewTimedCache(time.Duration(ss.Config.VmssCacheTTLInSeconds)*time.Second, getter, ss.Config.DisableAPICallCache) } func (ss *ScaleSet) getVMSSVMsFromCache(resourceGroup, vmssName string, crt azcache.AzureCacheReadType) (*sync.Map, error) { @@ -152,38 +140,34 @@ func (ss *ScaleSet) getVMSSVMsFromCache(resourceGroup, vmssName string, crt azca return virtualMachines, nil } -// gcVMSSVMCache delete stale VMSS VMs caches from deleted VMSSes. -func (ss *ScaleSet) gcVMSSVMCache() error { - return ss.vmssCache.Delete(consts.VMSSKey) -} - // newVMSSVirtualMachinesCache instantiates a new VMs cache for VMs belonging to the provided VMSS. -func (ss *ScaleSet) newVMSSVirtualMachinesCache() (*azcache.TimedCache, error) { +func (ss *ScaleSet) newVMSSVirtualMachinesCache() (azcache.Resource, error) { vmssVirtualMachinesCacheTTL := time.Duration(ss.Config.VmssVirtualMachinesCacheTTLInSeconds) * time.Second getter := func(cacheKey string) (interface{}, error) { localCache := &sync.Map{} // [nodeName]*VMSSVirtualMachineEntry - oldCache := make(map[string]*VMSSVirtualMachineEntry) - entry, exists, err := ss.vmssVMCache.Store.GetByKey(cacheKey) - if err != nil { - return nil, err - } - if exists { - cached := entry.(*azcache.AzureCacheEntry).Data - if cached != nil { - virtualMachines := cached.(*sync.Map) - virtualMachines.Range(func(key, value interface{}) bool { - oldCache[key.(string)] = value.(*VMSSVirtualMachineEntry) - return true - }) + if !ss.Cloud.Config.DisableAPICallCache { + entry, exists, err := ss.vmssVMCache.GetStore().GetByKey(cacheKey) + if err != nil { + return nil, err + } + if exists { + cached := entry.(*azcache.AzureCacheEntry).Data + if cached != nil { + virtualMachines := cached.(*sync.Map) + virtualMachines.Range(func(key, value interface{}) bool { + oldCache[key.(string)] = value.(*VMSSVirtualMachineEntry) + return true + }) + } } } result := strings.Split(cacheKey, "/") if len(result) < 2 { - err = fmt.Errorf("Invalid cacheKey (%s)", cacheKey) + err := fmt.Errorf("invalid cacheKey (%s)", cacheKey) return nil, err } @@ -210,58 +194,65 @@ func (ss *ScaleSet) newVMSSVirtualMachinesCache() (*azcache.TimedCache, error) { vmssVMCacheEntry := &VMSSVirtualMachineEntry{ ResourceGroup: resourceGroupName, VMSSName: vmssName, - InstanceID: to.String(vm.InstanceID), + InstanceID: pointer.StringDeref(vm.InstanceID, ""), VirtualMachine: &vm, LastUpdate: time.Now().UTC(), } // set cache entry to nil when the VM is under deleting. if vm.VirtualMachineScaleSetVMProperties != nil && - strings.EqualFold(to.String(vm.VirtualMachineScaleSetVMProperties.ProvisioningState), string(compute.ProvisioningStateDeleting)) { + strings.EqualFold(pointer.StringDeref(vm.VirtualMachineScaleSetVMProperties.ProvisioningState, ""), string(consts.ProvisioningStateDeleting)) { klog.V(4).Infof("VMSS virtualMachine %q is under deleting, setting its cache to nil", computerName) vmssVMCacheEntry.VirtualMachine = nil } localCache.Store(computerName, vmssVMCacheEntry) - delete(oldCache, computerName) + if !ss.Cloud.Config.DisableAPICallCache { + delete(oldCache, computerName) + } } - // add old missing cache data with nil entries to prevent aggressive - // ARM calls during cache invalidation - for name, vmEntry := range oldCache { - // if the nil cache entry has existed for vmssVirtualMachinesCacheTTL in the cache - // then it should not be added back to the cache - if vmEntry.VirtualMachine == nil && time.Since(vmEntry.LastUpdate) > vmssVirtualMachinesCacheTTL { - klog.V(5).Infof("ignoring expired entries from old cache for %s", name) - continue - } - LastUpdate := time.Now().UTC() - if vmEntry.VirtualMachine == nil { - // if this is already a nil entry then keep the time the nil - // entry was first created, so we can cleanup unwanted entries - LastUpdate = vmEntry.LastUpdate - } + if !ss.Cloud.Config.DisableAPICallCache { + // add old missing cache data with nil entries to prevent aggressive + // ARM calls during cache invalidation + for name, vmEntry := range oldCache { + // if the nil cache entry has existed for vmssVirtualMachinesCacheTTL in the cache + // then it should not be added back to the cache + if vmEntry.VirtualMachine == nil && time.Since(vmEntry.LastUpdate) > vmssVirtualMachinesCacheTTL { + klog.V(5).Infof("ignoring expired entries from old cache for %s", name) + continue + } + LastUpdate := time.Now().UTC() + if vmEntry.VirtualMachine == nil { + // if this is already a nil entry then keep the time the nil + // entry was first created, so we can cleanup unwanted entries + LastUpdate = vmEntry.LastUpdate + } - klog.V(5).Infof("adding old entries to new cache for %s", name) - localCache.Store(name, &VMSSVirtualMachineEntry{ - ResourceGroup: vmEntry.ResourceGroup, - VMSSName: vmEntry.VMSSName, - InstanceID: vmEntry.InstanceID, - VirtualMachine: nil, - LastUpdate: LastUpdate, - }) + klog.V(5).Infof("adding old entries to new cache for %s", name) + localCache.Store(name, &VMSSVirtualMachineEntry{ + ResourceGroup: vmEntry.ResourceGroup, + VMSSName: vmEntry.VMSSName, + InstanceID: vmEntry.InstanceID, + VirtualMachine: nil, + LastUpdate: LastUpdate, + }) + } } return localCache, nil } - return azcache.NewTimedcache(vmssVirtualMachinesCacheTTL, getter) + return azcache.NewTimedCache(vmssVirtualMachinesCacheTTL, getter, ss.Cloud.Config.DisableAPICallCache) } // DeleteCacheForNode deletes Node from VMSS VM and VM caches. func (ss *ScaleSet) DeleteCacheForNode(nodeName string) error { + if ss.Config.DisableAPICallCache { + return nil + } vmManagementType, err := ss.getVMManagementTypeByNodeName(nodeName, azcache.CacheReadTypeUnsafe) if err != nil { - klog.Errorf("Failed to check VM management type: %v", err) + klog.Errorf("getVMManagementTypeByNodeName(%s) failed with %v", nodeName, err) return err } @@ -276,24 +267,30 @@ func (ss *ScaleSet) DeleteCacheForNode(nodeName string) error { node, err := ss.getNodeIdentityByNodeName(nodeName, azcache.CacheReadTypeUnsafe) if err != nil { - klog.Errorf("DeleteCacheForNode(%s) failed with error: %v", nodeName, err) + klog.Errorf("getNodeIdentityByNodeName(%s) failed with %v", nodeName, err) return err } + // get sync.Map cache and remove the node from the cache + cacheKey := getVMSSVMCacheKey(node.resourceGroup, node.vmssName) + ss.lockMap.LockEntry(cacheKey) + defer ss.lockMap.UnlockEntry(cacheKey) - err = ss.vmssVMCache.Delete(getVMSSVMCacheKey(node.resourceGroup, node.vmssName)) + virtualMachines, err := ss.getVMSSVMsFromCache(node.resourceGroup, node.vmssName, azcache.CacheReadTypeUnsafe) if err != nil { - klog.Errorf("DeleteCacheForNode(%s) failed to remove from vmssVMCache with error: %v", nodeName, err) + klog.Errorf("getVMSSVMsFromCache(%s, %s) failed with %v", node.resourceGroup, node.vmssName, err) return err } - if err := ss.gcVMSSVMCache(); err != nil { - klog.Errorf("DeleteCacheForNode(%s) failed to gc stale vmss caches: %v", nodeName, err) - } - + virtualMachines.Delete(nodeName) + ss.vmssVMCache.Update(cacheKey, virtualMachines) + klog.V(2).Infof("DeleteCacheForNode(%s, %s, %s) successfully", node.resourceGroup, node.vmssName, nodeName) return nil } func (ss *ScaleSet) updateCache(nodeName, resourceGroupName, vmssName, instanceID string, updatedVM *compute.VirtualMachineScaleSetVM) error { + if ss.common.DisableUpdateCache { + return nil + } // lock the VMSS entry to ensure a consistent view of the VM map when there are concurrent updates. cacheKey := getVMSSVMCacheKey(resourceGroupName, vmssName) ss.lockMap.LockEntry(cacheKey) @@ -301,12 +298,9 @@ func (ss *ScaleSet) updateCache(nodeName, resourceGroupName, vmssName, instanceI virtualMachines, err := ss.getVMSSVMsFromCache(resourceGroupName, vmssName, azcache.CacheReadTypeUnsafe) if err != nil { - err = fmt.Errorf("updateCache(%s, %s, %s) failed getting vmCache with error: %w", vmssName, resourceGroupName, nodeName, err) - return err + return fmt.Errorf("updateCache(%s, %s, %s) failed getting vmCache with error: %w", vmssName, resourceGroupName, nodeName, err) } - localCache := &sync.Map{} - vmssVMCacheEntry := &VMSSVirtualMachineEntry{ ResourceGroup: resourceGroupName, VMSSName: vmssName, @@ -315,8 +309,10 @@ func (ss *ScaleSet) updateCache(nodeName, resourceGroupName, vmssName, instanceI LastUpdate: time.Now().UTC(), } + localCache := &sync.Map{} localCache.Store(nodeName, vmssVMCacheEntry) + // copy all elements except current VM to localCache virtualMachines.Range(func(key, value interface{}) bool { if key.(string) != nodeName { localCache.Store(key.(string), value.(*VMSSVirtualMachineEntry)) @@ -325,23 +321,23 @@ func (ss *ScaleSet) updateCache(nodeName, resourceGroupName, vmssName, instanceI }) ss.vmssVMCache.Update(cacheKey, localCache) - klog.V(4).Infof("updateCache(%s, %s, %s) for cacheKey(%s) updated successfully", vmssName, resourceGroupName, nodeName, cacheKey) + klog.V(2).Infof("updateCache(%s, %s, %s) for cacheKey(%s) updated successfully", vmssName, resourceGroupName, nodeName, cacheKey) return nil } -func (ss *ScaleSet) newNonVmssUniformNodesCache() (*azcache.TimedCache, error) { +func (ss *ScaleSet) newNonVmssUniformNodesCache() (azcache.Resource, error) { getter := func(key string) (interface{}, error) { - vmssFlexVMNodeNames := sets.NewString() - vmssFlexVMProviderIDs := sets.NewString() - avSetVMNodeNames := sets.NewString() - avSetVMProviderIDs := sets.NewString() + vmssFlexVMNodeNames := sets.New[string]() + vmssFlexVMProviderIDs := sets.New[string]() + avSetVMNodeNames := sets.New[string]() + avSetVMProviderIDs := sets.New[string]() resourceGroups, err := ss.GetResourceGroups() if err != nil { return nil, err } klog.V(2).Infof("refresh the cache of NonVmssUniformNodesCache in rg %v", resourceGroups) - for _, resourceGroup := range resourceGroups.List() { + for _, resourceGroup := range resourceGroups.UnsortedList() { vms, err := ss.Cloud.ListVirtualMachines(resourceGroup) if err != nil { return nil, fmt.Errorf("getter function of nonVmssUniformNodesCache: failed to list vms in the resource group %s: %w", resourceGroup, err) @@ -349,14 +345,14 @@ func (ss *ScaleSet) newNonVmssUniformNodesCache() (*azcache.TimedCache, error) { for _, vm := range vms { if vm.OsProfile != nil && vm.OsProfile.ComputerName != nil { if vm.VirtualMachineScaleSet != nil { - vmssFlexVMNodeNames.Insert(strings.ToLower(to.String(vm.OsProfile.ComputerName))) + vmssFlexVMNodeNames.Insert(strings.ToLower(pointer.StringDeref(vm.OsProfile.ComputerName, ""))) if vm.ID != nil { - vmssFlexVMProviderIDs.Insert(ss.ProviderName() + "://" + to.String(vm.ID)) + vmssFlexVMProviderIDs.Insert(ss.ProviderName() + "://" + pointer.StringDeref(vm.ID, "")) } } else { - avSetVMNodeNames.Insert(strings.ToLower(to.String(vm.OsProfile.ComputerName))) + avSetVMNodeNames.Insert(strings.ToLower(pointer.StringDeref(vm.OsProfile.ComputerName, ""))) if vm.ID != nil { - avSetVMProviderIDs.Insert(ss.ProviderName() + "://" + to.String(vm.ID)) + avSetVMProviderIDs.Insert(ss.ProviderName() + "://" + pointer.StringDeref(vm.ID, "")) } } } @@ -383,7 +379,7 @@ func (ss *ScaleSet) newNonVmssUniformNodesCache() (*azcache.TimedCache, error) { if ss.Config.NonVmssUniformNodesCacheTTLInSeconds == 0 { ss.Config.NonVmssUniformNodesCacheTTLInSeconds = consts.NonVmssUniformNodesCacheTTLDefaultInSeconds } - return azcache.NewTimedcache(time.Duration(ss.Config.NonVmssUniformNodesCacheTTLInSeconds)*time.Second, getter) + return azcache.NewTimedCache(time.Duration(ss.Config.NonVmssUniformNodesCacheTTLInSeconds)*time.Second, getter, ss.Cloud.Config.DisableAPICallCache) } func (ss *ScaleSet) getVMManagementTypeByNodeName(nodeName string, crt azcache.AzureCacheReadType) (VMManagementType, error) { @@ -397,6 +393,16 @@ func (ss *ScaleSet) getVMManagementTypeByNodeName(nodeName string, crt azcache.A return ManagedByUnknownVMSet, err } + if ss.Cloud.Config.DisableAPICallCache { + if cached.(NonVmssUniformNodesEntry).AvSetVMNodeNames.Has(nodeName) { + return ManagedByAvSet, nil + } + if cached.(NonVmssUniformNodesEntry).VMSSFlexVMNodeNames.Has(nodeName) { + return ManagedByVmssFlex, nil + } + return ManagedByVmssUniform, nil + } + cachedNodes := cached.(NonVmssUniformNodesEntry).ClusterNodeNames // if the node is not in the cache, assume the node has joined after the last cache refresh and attempt to refresh the cache. if !cachedNodes.Has(nodeName) { diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_repo.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_repo.go new file mode 100644 index 000000000000..6721dceaba8c --- /dev/null +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss_repo.go @@ -0,0 +1,55 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provider + +import ( + "strings" + + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "k8s.io/klog/v2" + + "sigs.k8s.io/cloud-provider-azure/pkg/consts" + "sigs.k8s.io/cloud-provider-azure/pkg/retry" +) + +// CreateOrUpdateVMSS invokes az.VirtualMachineScaleSetsClient.Update(). +func (az *Cloud) CreateOrUpdateVMSS(resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet) *retry.Error { + ctx, cancel := getContextWithCancel() + defer cancel() + + // When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error. + // Since it is being deleted, we shouldn't send more CreateOrUpdate requests for it. + klog.V(3).Infof("CreateOrUpdateVMSS: verify the status of the vmss being created or updated") + vmss, rerr := az.VirtualMachineScaleSetsClient.Get(ctx, resourceGroupName, VMScaleSetName) + if rerr != nil { + klog.Errorf("CreateOrUpdateVMSS: error getting vmss(%s): %v", VMScaleSetName, rerr) + return rerr + } + if vmss.ProvisioningState != nil && strings.EqualFold(*vmss.ProvisioningState, consts.VirtualMachineScaleSetsDeallocating) { + klog.V(3).Infof("CreateOrUpdateVMSS: found vmss %s being deleted, skipping", VMScaleSetName) + return nil + } + + rerr = az.VirtualMachineScaleSetsClient.CreateOrUpdate(ctx, resourceGroupName, VMScaleSetName, parameters) + klog.V(10).Infof("UpdateVmssVMWithRetry: VirtualMachineScaleSetsClient.CreateOrUpdate(%s): end", VMScaleSetName) + if rerr != nil { + klog.Errorf("CreateOrUpdateVMSS: error CreateOrUpdate vmss(%s): %v", VMScaleSetName, rerr) + return rerr + } + + return nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex.go index a2e301d2e3fc..22889373bee2 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex.go @@ -23,16 +23,16 @@ import ( "strconv" "strings" "sync" + "sync/atomic" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2022-07-01/network" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" - utilnet "k8s.io/utils/net" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" @@ -48,11 +48,11 @@ var ( type FlexScaleSet struct { *Cloud - vmssFlexCache *azcache.TimedCache + vmssFlexCache azcache.Resource vmssFlexVMNameToVmssID *sync.Map vmssFlexVMNameToNodeName *sync.Map - vmssFlexVMCache *azcache.TimedCache + vmssFlexVMCache azcache.Resource // lockMap in cache refresh lockMap *lockMap @@ -126,8 +126,7 @@ func (fs *FlexScaleSet) GetAgentPoolVMSetNames(nodes []*v1.Node) (*[]string, err // annotation would be ignored when using one SLB per cluster. func (fs *FlexScaleSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (*[]string, error) { hasMode, isAuto, serviceVMSetName := fs.getServiceLoadBalancerMode(service) - useSingleSLB := fs.useStandardLoadBalancer() && !fs.EnableMultipleStandardLoadBalancers - if !hasMode || useSingleSLB { + if !hasMode || fs.useStandardLoadBalancer() { // no mode specified in service annotation or use single SLB mode // default to PrimaryScaleSetName vmssFlexNames := &[]string{fs.Config.PrimaryScaleSetName} @@ -162,7 +161,7 @@ func (fs *FlexScaleSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (*[ // providerID example: // azure:///subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/flexprofile-mp-0_df53ee36 // Different from vmas where vm name is always equal to nodeName, we need to further map vmName to actual nodeName in vmssflex. -// Note: nodeName is always equal to strings.ToLower(*vm.OsProfile.ComputerName) +// Note: nodeName is always equal pointer.StringDerefs.ToLower(*vm.OsProfile.ComputerName, "") func (fs *FlexScaleSet) GetNodeNameByProviderID(providerID string) (types.NodeName, error) { // NodeName is part of providerID for standard instances. matches := providerIDRE.FindStringSubmatch(providerID) @@ -231,10 +230,10 @@ func (fs *FlexScaleSet) GetZoneByNodeName(name string) (cloudprovider.Zone, erro return cloudprovider.Zone{}, fmt.Errorf("failed to parse zone %q: %w", zones, err) } - failureDomain = fs.makeZone(to.String(vm.Location), zoneID) + failureDomain = fs.makeZone(pointer.StringDeref(vm.Location, ""), zoneID) } else if vm.VirtualMachineProperties.InstanceView != nil && vm.VirtualMachineProperties.InstanceView.PlatformFaultDomain != nil { // Availability zone is not used for the node, falling back to fault domain. - failureDomain = strconv.Itoa(int(to.Int32(vm.VirtualMachineProperties.InstanceView.PlatformFaultDomain))) + failureDomain = strconv.Itoa(int(pointer.Int32Deref(vm.VirtualMachineProperties.InstanceView.PlatformFaultDomain, 0))) } else { err = fmt.Errorf("failed to get zone info") klog.Errorf("GetZoneByNodeName: got unexpected error %v", err) @@ -243,7 +242,7 @@ func (fs *FlexScaleSet) GetZoneByNodeName(name string) (cloudprovider.Zone, erro zone := cloudprovider.Zone{ FailureDomain: strings.ToLower(failureDomain), - Region: strings.ToLower(to.String(vm.Location)), + Region: strings.ToLower(pointer.StringDeref(vm.Location, "")), } return zone, nil } @@ -259,7 +258,7 @@ func (fs *FlexScaleSet) GetProvisioningStateByNodeName(name string) (provisionin return provisioningState, nil } - return to.String(vm.VirtualMachineProperties.ProvisioningState), nil + return pointer.StringDeref(vm.VirtualMachineProperties.ProvisioningState, ""), nil } // GetPowerStatusByNodeName returns the powerState for the specified node. @@ -272,7 +271,7 @@ func (fs *FlexScaleSet) GetPowerStatusByNodeName(name string) (powerState string if vm.InstanceView != nil && vm.InstanceView.Statuses != nil { statuses := *vm.InstanceView.Statuses for _, status := range statuses { - state := to.String(status.Code) + state := pointer.StringDeref(status.Code, "") if strings.HasPrefix(state, vmPowerStatePrefix) { return strings.TrimPrefix(state, vmPowerStatePrefix), nil } @@ -406,7 +405,7 @@ func (fs *FlexScaleSet) getNodeInformationByIPConfigurationID(ipConfigurationID if nic.InterfacePropertiesFormat == nil || nic.InterfacePropertiesFormat.VirtualMachine == nil || nic.InterfacePropertiesFormat.VirtualMachine.ID == nil { return "", "", "", fmt.Errorf("failed to get vm ID of ip config ID %s", ipConfigurationID) } - vmID := to.String(nic.InterfacePropertiesFormat.VirtualMachine.ID) + vmID := pointer.StringDeref(nic.InterfacePropertiesFormat.VirtualMachine.ID, "") matches = vmIDRE.FindStringSubmatch(vmID) if len(matches) != 2 { return "", "", "", fmt.Errorf("invalid virtual machine ID %s", vmID) @@ -447,15 +446,15 @@ func (fs *FlexScaleSet) GetNodeCIDRMasksByProviderID(providerID string) (int, in var ipv4Mask, ipv6Mask int if v4, ok := vmssFlex.Tags[consts.VMSetCIDRIPV4TagKey]; ok && v4 != nil { - ipv4Mask, err = strconv.Atoi(to.String(v4)) + ipv4Mask, err = strconv.Atoi(pointer.StringDeref(v4, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", to.String(v4), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv4 mask size %s: %v", pointer.StringDeref(v4, ""), err) } } if v6, ok := vmssFlex.Tags[consts.VMSetCIDRIPV6TagKey]; ok && v6 != nil { - ipv6Mask, err = strconv.Atoi(to.String(v6)) + ipv6Mask, err = strconv.Atoi(pointer.StringDeref(v6, "")) if err != nil { - klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", to.String(v6), err) + klog.Errorf("GetNodeCIDRMasksByProviderID: error when paring the value of the ipv6 mask size%s: %v", pointer.StringDeref(v6, ""), err) } } @@ -482,18 +481,6 @@ func (fs *FlexScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.Nod if !fs.useStandardLoadBalancer() { return "", "", "", nil, fmt.Errorf("EnsureHostInPool: VMSS Flex does not support Basic Load Balancer") } - if fs.EnableMultipleStandardLoadBalancers { - // need to check the vmSet name when using multiple standard LBs - needCheck = true - - // ensure the vm that is supposed to share the primary SLB in the backendpool of the primary SLB - if strings.EqualFold(fs.GetPrimaryVMSetName(), vmSetNameOfLB) && - fs.getVMSetNamesSharingPrimarySLB().Has(strings.ToLower(vmssFlexName)) { - klog.V(4).Infof("EnsureHostInPool: the vm %s in the vmSet %s is supposed to share the primary SLB", - nodeName, vmssFlexName) - needCheck = false - } - } if vmSetNameOfLB != "" && needCheck && !strings.EqualFold(vmSetNameOfLB, vmssFlexName) { klog.V(3).Infof("EnsureHostInPool skips node %s because it is not in the ScaleSet %s", name, vmSetNameOfLB) return "", "", "", nil, errNotInVMSet @@ -511,7 +498,7 @@ func (fs *FlexScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.Nod } var primaryIPConfig *network.InterfaceIPConfiguration - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) + ipv6 := isBackendPoolIPv6(backendPoolID) if !fs.Cloud.ipv6DualStackEnabled && !ipv6 { primaryIPConfig, err = getPrimaryIPConfig(nic) if err != nil { @@ -563,7 +550,7 @@ func (fs *FlexScaleSet) EnsureHostInPool(service *v1.Service, nodeName types.Nod newBackendPools = append(newBackendPools, network.BackendAddressPool{ - ID: to.StringPtr(backendPoolID), + ID: pointer.String(backendPoolID), }) primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools @@ -595,7 +582,7 @@ func (fs *FlexScaleSet) ensureVMSSFlexInPool(service *v1.Service, nodes []*v1.No // the single standard load balancer supports multiple vmss in its backend while // multiple standard load balancers doesn't - if fs.useStandardLoadBalancer() && !fs.EnableMultipleStandardLoadBalancers { + if fs.useStandardLoadBalancer() { for _, node := range nodes { if fs.excludeMasterNodesFromStandardLB() && isControlPlaneNode(node) { continue @@ -657,24 +644,13 @@ func (fs *FlexScaleSet) ensureVMSSFlexInPool(service *v1.Service, nodes []*v1.No continue } vmssNIC := *vmssFlex.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations - primaryNIC, err := getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssFlexName) + primaryNIC, err := getPrimaryNetworkInterfaceConfiguration(vmssNIC, vmssFlexName) if err != nil { return err } - var primaryIPConfig *compute.VirtualMachineScaleSetIPConfiguration - ipv6 := utilnet.IsIPv6String(service.Spec.ClusterIP) - // Find primary network interface configuration. - if !fs.Cloud.ipv6DualStackEnabled && !ipv6 { - // Find primary IP configuration. - primaryIPConfig, err = getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC) - if err != nil { - return err - } - } else { - primaryIPConfig, err = getConfigForScaleSetByIPFamily(primaryNIC, "", ipv6) - if err != nil { - return err - } + primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC, backendPoolID, vmssFlexName) + if err != nil { + return err } loadBalancerBackendAddressPools := []compute.SubResource{} @@ -717,7 +693,7 @@ func (fs *FlexScaleSet) ensureVMSSFlexInPool(service *v1.Service, nodes []*v1.No // Compose a new vmss with added backendPoolID. loadBalancerBackendAddressPools = append(loadBalancerBackendAddressPools, compute.SubResource{ - ID: to.StringPtr(backendPoolID), + ID: pointer.String(backendPoolID), }) primaryIPConfig.LoadBalancerBackendAddressPools = &loadBalancerBackendAddressPools newVMSS := compute.VirtualMachineScaleSet{ @@ -797,9 +773,9 @@ func (fs *FlexScaleSet) EnsureHostsInPool(service *v1.Service, nodes []*v1.Node, return nil } -func (fs *FlexScaleSet) ensureBackendPoolDeletedFromVmssFlex(backendPoolID string, vmSetName string) error { +func (fs *FlexScaleSet) ensureBackendPoolDeletedFromVmssFlex(backendPoolIDs []string, vmSetName string) error { vmssNamesMap := make(map[string]bool) - if fs.useStandardLoadBalancer() && !fs.EnableMultipleStandardLoadBalancers { + if fs.useStandardLoadBalancer() { cached, err := fs.vmssFlexCache.Get(consts.VmssFlexKey, azcache.CacheReadTypeDefault) if err != nil { klog.Errorf("ensureBackendPoolDeletedFromVmssFlex: failed to get vmss flex from cache: %v", err) @@ -808,17 +784,17 @@ func (fs *FlexScaleSet) ensureBackendPoolDeletedFromVmssFlex(backendPoolID strin vmssFlexes := cached.(*sync.Map) vmssFlexes.Range(func(key, value interface{}) bool { vmssFlex := value.(*compute.VirtualMachineScaleSet) - vmssNamesMap[to.String(vmssFlex.Name)] = true + vmssNamesMap[pointer.StringDeref(vmssFlex.Name, "")] = true return true }) } else { vmssNamesMap[vmSetName] = true } - return fs.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, backendPoolID) + return fs.EnsureBackendPoolDeletedFromVMSets(vmssNamesMap, backendPoolIDs) } // EnsureBackendPoolDeletedFromVMSets ensures the loadBalancer backendAddressPools deleted from the specified VMSS Flex -func (fs *FlexScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]bool, backendPoolID string) error { +func (fs *FlexScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[string]bool, backendPoolIDs []string) error { vmssUpdaters := make([]func() error, 0, len(vmssNamesMap)) errors := make([]error, 0, len(vmssNamesMap)) for vmssName := range vmssNamesMap { @@ -841,40 +817,29 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[stri continue } vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations - primaryNIC, err := getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssName) + primaryNIC, err := getPrimaryNetworkInterfaceConfiguration(vmssNIC, vmssName) if err != nil { klog.Errorf("fs.EnsureBackendPoolDeletedFromVMSets: failed to get the primary network interface config of the VMSS %s: %v", vmssName, err) errors = append(errors, err) continue } - primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC) - if err != nil { - klog.Errorf("fs.EnsureBackendPoolDeletedFromVMSets: failed to the primary IP config from the VMSS %s's network config : %v", vmssName, err) - errors = append(errors, err) - continue - } - loadBalancerBackendAddressPools := []compute.SubResource{} - if primaryIPConfig.LoadBalancerBackendAddressPools != nil { - loadBalancerBackendAddressPools = *primaryIPConfig.LoadBalancerBackendAddressPools - } - - var found bool - var newBackendPools []compute.SubResource - for i := len(loadBalancerBackendAddressPools) - 1; i >= 0; i-- { - curPool := loadBalancerBackendAddressPools[i] - if strings.EqualFold(backendPoolID, *curPool.ID) { - klog.V(10).Infof("fs.EnsureBackendPoolDeletedFromVMSets gets unwanted backend pool %q for VMSS %s", backendPoolID, vmssName) - found = true - newBackendPools = append(loadBalancerBackendAddressPools[:i], loadBalancerBackendAddressPools[i+1:]...) + foundTotal := false + for _, backendPoolID := range backendPoolIDs { + found, err := deleteBackendPoolFromIPConfig("FlexSet.EnsureBackendPoolDeletedFromVMSets", backendPoolID, vmssName, primaryNIC) + if err != nil { + errors = append(errors, err) + continue + } + if found { + foundTotal = true } } - if !found { + if !foundTotal { continue } vmssUpdaters = append(vmssUpdaters, func() error { // Compose a new vmss with added backendPoolID. - primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools newVMSS := compute.VirtualMachineScaleSet{ Location: vmss.Location, VirtualMachineScaleSetProperties: &compute.VirtualMachineScaleSetProperties{ @@ -891,10 +856,10 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[stri _ = fs.vmssFlexCache.Delete(consts.VmssFlexKey) }() - klog.V(2).Infof("fs.EnsureBackendPoolDeletedFromVMSets begins to delete backendPoolID %s from vmss(%s)", backendPoolID, vmssName) + klog.V(2).Infof("fs.EnsureBackendPoolDeletedFromVMSets begins to delete backendPoolIDs %q from vmss(%s)", backendPoolIDs, vmssName) rerr := fs.CreateOrUpdateVMSS(fs.ResourceGroup, vmssName, newVMSS) if rerr != nil { - klog.Errorf("fs.EnsureBackendPoolDeletedFromVMSets CreateOrUpdateVMSS(%s) for backendPoolID %s, err: %v", vmssName, backendPoolID, rerr) + klog.Errorf("fs.EnsureBackendPoolDeletedFromVMSets CreateOrUpdateVMSS(%s) for backendPoolIDs %q, err: %v", vmssName, backendPoolIDs, rerr) return rerr.Error() } @@ -915,7 +880,7 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeletedFromVMSets(vmssNamesMap map[stri } // EnsureBackendPoolDeleted ensures the loadBalancer backendAddressPools deleted from the specified nodes. -func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { +func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolIDs []string, vmSetName string, backendAddressPools *[]network.BackendAddressPool, deleteFromVMSet bool) (bool, error) { // Returns nil if backend address pools already deleted. if backendAddressPools == nil { return false, nil @@ -929,13 +894,15 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoo ipConfigurationIDs := []string{} for _, backendPool := range *backendAddressPools { - if strings.EqualFold(to.String(backendPool.ID), backendPoolID) && backendPool.BackendAddressPoolPropertiesFormat != nil && backendPool.BackendIPConfigurations != nil { - for _, ipConf := range *backendPool.BackendIPConfigurations { - if ipConf.ID == nil { - continue - } + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(pointer.StringDeref(backendPool.ID, ""), backendPoolID) && backendPool.BackendAddressPoolPropertiesFormat != nil && backendPool.BackendIPConfigurations != nil { + for _, ipConf := range *backendPool.BackendIPConfigurations { + if ipConf.ID == nil { + continue + } - ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) + ipConfigurationIDs = append(ipConfigurationIDs, *ipConf.ID) + } } } } @@ -957,7 +924,7 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoo } // only vmsses in the resource group same as it's in azure config are included if strings.EqualFold(resourceGroupName, fs.ResourceGroup) { - if fs.useStandardLoadBalancer() && !fs.EnableMultipleStandardLoadBalancers { + if fs.useStandardLoadBalancer() { vmssFlexVMNameMap[nodeName] = nicName } else { if strings.EqualFold(vmssFlexName, vmSetName) { @@ -971,19 +938,17 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoo } } - // 1. Ensure the backendPoolID is deleted from the VMSS. - klog.V(2).Infof("1. Ensure the backendPoolID is deleted from the VMSS.") + klog.V(2).Infof("Ensure backendPoolIDs %q deleted from the VMSS.", backendPoolIDs) if deleteFromVMSet { - err := fs.ensureBackendPoolDeletedFromVmssFlex(backendPoolID, vmSetName) + err := fs.ensureBackendPoolDeletedFromVmssFlex(backendPoolIDs, vmSetName) if err != nil { allErrs = append(allErrs, err) } } - klog.V(2).Infof("2. Ensure the backendPoolID is deleted from the VMSS VMs.") - // 2. Ensure the backendPoolID is deleted from the VMSS VMs. - klog.V(2).Infof("go into fs.ensureBackendPoolDeletedFromNode, vmssFlexVMNameMap: %s, size: %s", vmssFlexVMNameMap, len(vmssFlexVMNameMap)) - nicUpdated, err := fs.ensureBackendPoolDeletedFromNode(vmssFlexVMNameMap, backendPoolID) + klog.V(2).Infof("Ensure backendPoolIDs %q deleted from the VMSS VMs.", backendPoolIDs) + klog.V(2).Infof("go into fs.ensureBackendPoolDeletedFromNode, vmssFlexVMNameMap: %s, size: %d", vmssFlexVMNameMap, len(vmssFlexVMNameMap)) + nicUpdated, err := fs.ensureBackendPoolDeletedFromNode(vmssFlexVMNameMap, backendPoolIDs) klog.V(2).Infof("exit from fs.ensureBackendPoolDeletedFromNode") if err != nil { allErrs = append(allErrs, err) @@ -998,14 +963,14 @@ func (fs *FlexScaleSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoo } -func (fs *FlexScaleSet) ensureBackendPoolDeletedFromNode(vmssFlexVMNameMap map[string]string, backendPoolID string) (bool, error) { +func (fs *FlexScaleSet) ensureBackendPoolDeletedFromNode(vmssFlexVMNameMap map[string]string, backendPoolIDs []string) (bool, error) { nicUpdaters := make([]func() error, 0) allErrs := make([]error, 0) - i := 0 - var nicUpdated bool + nics := map[string]network.Interface{} // nicName -> nic for nodeName, nicName := range vmssFlexVMNameMap { - i++ - klog.V(2).Infof("i = %s", i) + if _, ok := nics[nicName]; ok { + continue + } ctx, cancel := getContextWithCancel() defer cancel() @@ -1020,48 +985,55 @@ func (fs *FlexScaleSet) ensureBackendPoolDeletedFromNode(vmssFlexVMNameMap map[s } if nic.InterfacePropertiesFormat != nil && nic.InterfacePropertiesFormat.IPConfigurations != nil { - newIPConfigs := *nic.IPConfigurations - for j, ipConf := range newIPConfigs { - if !to.Bool(ipConf.Primary) { - continue - } - // found primary ip configuration - if ipConf.LoadBalancerBackendAddressPools != nil { - newLBAddressPools := *ipConf.LoadBalancerBackendAddressPools - for k := len(newLBAddressPools) - 1; k >= 0; k-- { - pool := newLBAddressPools[k] - if strings.EqualFold(to.String(pool.ID), backendPoolID) { + nicName := pointer.StringDeref(nic.Name, "") + nics[nicName] = nic + } + } + var nicUpdated atomic.Bool + for _, nic := range nics { + nic := nic + newIPConfigs := *nic.IPConfigurations + for j, ipConf := range newIPConfigs { + if !pointer.BoolDeref(ipConf.Primary, false) { + continue + } + // found primary ip configuration + if ipConf.LoadBalancerBackendAddressPools != nil { + newLBAddressPools := *ipConf.LoadBalancerBackendAddressPools + for k := len(newLBAddressPools) - 1; k >= 0; k-- { + pool := newLBAddressPools[k] + for _, backendPoolID := range backendPoolIDs { + if strings.EqualFold(pointer.StringDeref(pool.ID, ""), backendPoolID) { newLBAddressPools = append(newLBAddressPools[:k], newLBAddressPools[k+1:]...) - break } } - newIPConfigs[j].LoadBalancerBackendAddressPools = &newLBAddressPools } + newIPConfigs[j].LoadBalancerBackendAddressPools = &newLBAddressPools } - nic.IPConfigurations = &newIPConfigs - - nicUpdaters = append(nicUpdaters, func() error { - ctx, cancel := getContextWithCancel() - defer cancel() - klog.V(2).Infof("EnsureBackendPoolDeleted begins to CreateOrUpdate for NIC(%s, %s) with backendPoolID %s", fs.resourceGroup, to.String(nic.Name), backendPoolID) - rerr := fs.InterfacesClient.CreateOrUpdate(ctx, fs.ResourceGroup, to.String(nic.Name), nic) - if rerr != nil { - klog.Errorf("EnsureBackendPoolDeleted CreateOrUpdate for NIC(%s, %s) failed with error %v", fs.resourceGroup, to.String(nic.Name), rerr.Error()) - return rerr.Error() - } - nicUpdated = true - klog.V(2).Infof("EnsureBackendPoolDeleted done") - return nil - }) } + nic.IPConfigurations = &newIPConfigs + + nicUpdaters = append(nicUpdaters, func() error { + ctx, cancel := getContextWithCancel() + defer cancel() + klog.V(2).Infof("EnsureBackendPoolDeleted begins to CreateOrUpdate for NIC(%s, %s) with backendPoolIDs %q", fs.ResourceGroup, pointer.StringDeref(nic.Name, ""), backendPoolIDs) + rerr := fs.InterfacesClient.CreateOrUpdate(ctx, fs.ResourceGroup, pointer.StringDeref(nic.Name, ""), nic) + if rerr != nil { + klog.Errorf("EnsureBackendPoolDeleted CreateOrUpdate for NIC(%s, %s) failed with error %v", fs.ResourceGroup, pointer.StringDeref(nic.Name, ""), rerr.Error()) + return rerr.Error() + } + nicUpdated.Store(true) + klog.V(2).Infof("EnsureBackendPoolDeleted done") + return nil + }) } - klog.V(2).Infof("nicUpdaters size: %s", len(nicUpdaters)) + klog.V(2).Infof("nicUpdaters size: %d", len(nicUpdaters)) errs := utilerrors.AggregateGoroutines(nicUpdaters...) if errs != nil { allErrs = append(allErrs, utilerrors.Flatten(errs)) } if len(allErrs) > 0 { - return nicUpdated, utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) + return nicUpdated.Load(), utilerrors.Flatten(utilerrors.NewAggregate(allErrs)) } - return nicUpdated, nil + return nicUpdated.Load(), nil } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex_cache.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex_cache.go index efca4cb12eaf..ed44394f8402 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex_cache.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmssflex_cache.go @@ -24,16 +24,17 @@ import ( "sync" "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog/v2" + "k8s.io/utils/pointer" azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" ) -func (fs *FlexScaleSet) newVmssFlexCache(ctx context.Context) (*azcache.TimedCache, error) { +func (fs *FlexScaleSet) newVmssFlexCache(ctx context.Context) (azcache.Resource, error) { getter := func(key string) (interface{}, error) { localCache := &sync.Map{} @@ -42,7 +43,7 @@ func (fs *FlexScaleSet) newVmssFlexCache(ctx context.Context) (*azcache.TimedCac return nil, err } - for _, resourceGroup := range allResourceGroups.List() { + for _, resourceGroup := range allResourceGroups.UnsortedList() { allScaleSets, rerr := fs.VirtualMachineScaleSetsClient.List(ctx, resourceGroup) if rerr != nil { if rerr.IsNotFound() { @@ -72,10 +73,10 @@ func (fs *FlexScaleSet) newVmssFlexCache(ctx context.Context) (*azcache.TimedCac if fs.Config.VmssFlexCacheTTLInSeconds == 0 { fs.Config.VmssFlexCacheTTLInSeconds = consts.VmssFlexCacheTTLDefaultInSeconds } - return azcache.NewTimedcache(time.Duration(fs.Config.VmssFlexCacheTTLInSeconds)*time.Second, getter) + return azcache.NewTimedCache(time.Duration(fs.Config.VmssFlexCacheTTLInSeconds)*time.Second, getter, fs.Cloud.Config.DisableAPICallCache) } -func (fs *FlexScaleSet) newVmssFlexVMCache(ctx context.Context) (*azcache.TimedCache, error) { +func (fs *FlexScaleSet) newVmssFlexVMCache(ctx context.Context) (azcache.Resource, error) { getter := func(key string) (interface{}, error) { localCache := &sync.Map{} @@ -122,7 +123,7 @@ func (fs *FlexScaleSet) newVmssFlexVMCache(ctx context.Context) (*azcache.TimedC if fs.Config.VmssFlexVMCacheTTLInSeconds == 0 { fs.Config.VmssFlexVMCacheTTLInSeconds = consts.VmssFlexVMCacheTTLDefaultInSeconds } - return azcache.NewTimedcache(time.Duration(fs.Config.VmssFlexVMCacheTTLInSeconds)*time.Second, getter) + return azcache.NewTimedCache(time.Duration(fs.Config.VmssFlexVMCacheTTLInSeconds)*time.Second, getter, fs.Cloud.Config.DisableAPICallCache) } func (fs *FlexScaleSet) getNodeNameByVMName(vmName string) (string, error) { @@ -181,18 +182,35 @@ func (fs *FlexScaleSet) getNodeVmssFlexID(nodeName string) (string, error) { } vmssFlexes := cached.(*sync.Map) + var vmssFlexIDs []string vmssFlexes.Range(func(key, value interface{}) bool { vmssFlexID := key.(string) - _, err := fs.vmssFlexVMCache.Get(vmssFlexID, azcache.CacheReadTypeForceRefresh) - if err != nil { - klog.Errorf("failed to refresh vmss flex VM cache for vmssFlexID %s", vmssFlexID) + vmssFlex := value.(*compute.VirtualMachineScaleSet) + vmssPrefix := pointer.StringDeref(vmssFlex.Name, "") + if vmssFlex.VirtualMachineProfile != nil && + vmssFlex.VirtualMachineProfile.OsProfile != nil && + vmssFlex.VirtualMachineProfile.OsProfile.ComputerNamePrefix != nil { + vmssPrefix = pointer.StringDeref(vmssFlex.VirtualMachineProfile.OsProfile.ComputerNamePrefix, "") + } + if strings.EqualFold(vmssPrefix, nodeName[:len(nodeName)-6]) { + // we should check this vmss first since nodeName and vmssFlex.Name or + // ComputerNamePrefix belongs to same vmss, so prepend here + vmssFlexIDs = append([]string{vmssFlexID}, vmssFlexIDs...) + } else { + vmssFlexIDs = append(vmssFlexIDs, vmssFlexID) } return true }) - cachedVmssFlexID, isCached = fs.vmssFlexVMNameToVmssID.Load(nodeName) - if isCached { - return fmt.Sprintf("%v", cachedVmssFlexID), nil + for _, vmssID := range vmssFlexIDs { + if _, err := fs.vmssFlexVMCache.Get(vmssID, azcache.CacheReadTypeForceRefresh); err != nil { + klog.Errorf("failed to refresh vmss flex VM cache for vmssFlexID %s", vmssID) + } + // if the vm is cached stop refreshing + cachedVmssFlexID, isCached = fs.vmssFlexVMNameToVmssID.Load(nodeName) + if isCached { + return fmt.Sprintf("%v", cachedVmssFlexID), nil + } } return "", cloudprovider.InstanceNotFound } @@ -315,19 +333,33 @@ func (fs *FlexScaleSet) getVmssFlexByName(vmssFlexName string) (*compute.Virtual } func (fs *FlexScaleSet) DeleteCacheForNode(nodeName string) error { + if fs.Config.DisableAPICallCache { + return nil + } vmssFlexID, err := fs.getNodeVmssFlexID(nodeName) if err != nil { + klog.Errorf("getNodeVmssFlexID(%s) failed with %v", nodeName, err) return err } + fs.lockMap.LockEntry(vmssFlexID) + defer fs.lockMap.UnlockEntry(vmssFlexID) cached, err := fs.vmssFlexVMCache.Get(vmssFlexID, azcache.CacheReadTypeDefault) if err != nil { + klog.Errorf("vmssFlexVMCache.Get(%s, %s) failed with %v", vmssFlexID, nodeName, err) + return err + } + if cached == nil { + err := fmt.Errorf("nil cache returned from %s", vmssFlexID) + klog.Errorf("DeleteCacheForNode(%s, %s) failed with %v", vmssFlexID, nodeName, err) return err } vmMap := cached.(*sync.Map) vmMap.Delete(nodeName) + fs.vmssFlexVMCache.Update(vmssFlexID, vmMap) fs.vmssFlexVMNameToVmssID.Delete(nodeName) + klog.V(2).Infof("DeleteCacheForNode(%s, %s) successfully", vmssFlexID, nodeName) return nil } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_wrap.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_wrap.go index 05e965ea83d1..1675aa12e948 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_wrap.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_wrap.go @@ -21,17 +21,7 @@ import ( "net/http" "regexp" "strings" - "time" - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" - "github.com/Azure/go-autorest/autorest/to" - - "k8s.io/apimachinery/pkg/types" - cloudprovider "k8s.io/cloud-provider" - "k8s.io/klog/v2" - - azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache" "sigs.k8s.io/cloud-provider-azure/pkg/consts" "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) @@ -63,314 +53,6 @@ func checkResourceExistsFromError(err *retry.Error) (bool, *retry.Error) { return false, err } -// getVirtualMachine calls 'VirtualMachinesClient.Get' with a timed cache -// The service side has throttling control that delays responses if there are multiple requests onto certain vm -// resource request in short period. -func (az *Cloud) getVirtualMachine(nodeName types.NodeName, crt azcache.AzureCacheReadType) (vm compute.VirtualMachine, err error) { - vmName := string(nodeName) - cachedVM, err := az.vmCache.Get(vmName, crt) - if err != nil { - return vm, err - } - - if cachedVM == nil { - klog.Warningf("Unable to find node %s: %v", nodeName, cloudprovider.InstanceNotFound) - return vm, cloudprovider.InstanceNotFound - } - - return *(cachedVM.(*compute.VirtualMachine)), nil -} - -func (az *Cloud) getRouteTable(crt azcache.AzureCacheReadType) (routeTable network.RouteTable, exists bool, err error) { - if len(az.RouteTableName) == 0 { - return routeTable, false, fmt.Errorf("Route table name is not configured") - } - - cachedRt, err := az.rtCache.GetWithDeepCopy(az.RouteTableName, crt) - if err != nil { - return routeTable, false, err - } - - if cachedRt == nil { - return routeTable, false, nil - } - - return *(cachedRt.(*network.RouteTable)), true, nil -} - -func (az *Cloud) getPIPCacheKey(pipResourceGroup string, pipName string) string { - resourceGroup := az.ResourceGroup - if pipResourceGroup != "" { - resourceGroup = pipResourceGroup - } - return fmt.Sprintf("%s%s%s", resourceGroup, consts.PIPCacheKeySeparator, pipName) -} - -func (az *Cloud) getPublicIPAddress(pipResourceGroup string, pipName string, crt azcache.AzureCacheReadType) (network.PublicIPAddress, bool, error) { - pip := network.PublicIPAddress{} - cacheKey := az.getPIPCacheKey(pipResourceGroup, pipName) - cachedPIP, err := az.pipCache.GetWithDeepCopy(cacheKey, crt) - if err != nil { - return pip, false, err - } - - if cachedPIP == nil { - return pip, false, nil - } - - return *(cachedPIP.(*network.PublicIPAddress)), true, nil -} - -func (az *Cloud) getSubnet(virtualNetworkName string, subnetName string) (network.Subnet, bool, error) { - var rg string - if len(az.VnetResourceGroup) > 0 { - rg = az.VnetResourceGroup - } else { - rg = az.ResourceGroup - } - - ctx, cancel := getContextWithCancel() - defer cancel() - subnet, err := az.SubnetsClient.Get(ctx, rg, virtualNetworkName, subnetName, "") - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return subnet, false, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Subnet %q not found", subnetName) - return subnet, false, nil - } - - return subnet, exists, nil -} - -func (az *Cloud) getAzureLoadBalancer(name string, crt azcache.AzureCacheReadType) (lb *network.LoadBalancer, exists bool, err error) { - cachedLB, err := az.lbCache.GetWithDeepCopy(name, crt) - if err != nil { - return lb, false, err - } - - if cachedLB == nil { - return lb, false, nil - } - - return cachedLB.(*network.LoadBalancer), true, nil -} - -func (az *Cloud) getSecurityGroup(crt azcache.AzureCacheReadType) (network.SecurityGroup, error) { - nsg := network.SecurityGroup{} - if az.SecurityGroupName == "" { - return nsg, fmt.Errorf("securityGroupName is not configured") - } - - securityGroup, err := az.nsgCache.GetWithDeepCopy(az.SecurityGroupName, crt) - if err != nil { - return nsg, err - } - - if securityGroup == nil { - return nsg, fmt.Errorf("nsg %q not found", az.SecurityGroupName) - } - - return *(securityGroup.(*network.SecurityGroup)), nil -} - -func (az *Cloud) getPrivateLinkService(frontendIPConfigID *string, crt azcache.AzureCacheReadType) (pls network.PrivateLinkService, err error) { - cachedPLS, err := az.plsCache.GetWithDeepCopy(*frontendIPConfigID, crt) - if err != nil { - return pls, err - } - return *(cachedPLS.(*network.PrivateLinkService)), nil -} - -func (az *Cloud) newVMCache() (*azcache.TimedCache, error) { - getter := func(key string) (interface{}, error) { - // Currently InstanceView request are used by azure_zones, while the calls come after non-InstanceView - // request. If we first send an InstanceView request and then a non InstanceView request, the second - // request will still hit throttling. This is what happens now for cloud controller manager: In this - // case we do get instance view every time to fulfill the azure_zones requirement without hitting - // throttling. - // Consider adding separate parameter for controlling 'InstanceView' once node update issue #56276 is fixed - ctx, cancel := getContextWithCancel() - defer cancel() - - resourceGroup, err := az.GetNodeResourceGroup(key) - if err != nil { - return nil, err - } - - vm, verr := az.VirtualMachinesClient.Get(ctx, resourceGroup, key, compute.InstanceViewTypesInstanceView) - exists, rerr := checkResourceExistsFromError(verr) - if rerr != nil { - return nil, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Virtual machine %q not found", key) - return nil, nil - } - - if vm.VirtualMachineProperties != nil && - strings.EqualFold(to.String(vm.VirtualMachineProperties.ProvisioningState), string(compute.ProvisioningStateDeleting)) { - klog.V(2).Infof("Virtual machine %q is under deleting", key) - return nil, nil - } - - return &vm, nil - } - - if az.VMCacheTTLInSeconds == 0 { - az.VMCacheTTLInSeconds = vmCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.VMCacheTTLInSeconds)*time.Second, getter) -} - -func (az *Cloud) newLBCache() (*azcache.TimedCache, error) { - getter := func(key string) (interface{}, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - - lb, err := az.LoadBalancerClient.Get(ctx, az.getLoadBalancerResourceGroup(), key, "") - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return nil, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Load balancer %q not found", key) - return nil, nil - } - - return &lb, nil - } - - if az.LoadBalancerCacheTTLInSeconds == 0 { - az.LoadBalancerCacheTTLInSeconds = loadBalancerCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.LoadBalancerCacheTTLInSeconds)*time.Second, getter) -} - -func (az *Cloud) newNSGCache() (*azcache.TimedCache, error) { - getter := func(key string) (interface{}, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - nsg, err := az.SecurityGroupsClient.Get(ctx, az.SecurityGroupResourceGroup, key, "") - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return nil, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Security group %q not found", key) - return nil, nil - } - - return &nsg, nil - } - - if az.NsgCacheTTLInSeconds == 0 { - az.NsgCacheTTLInSeconds = nsgCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.NsgCacheTTLInSeconds)*time.Second, getter) -} - -func (az *Cloud) newRouteTableCache() (*azcache.TimedCache, error) { - getter := func(key string) (interface{}, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - rt, err := az.RouteTablesClient.Get(ctx, az.RouteTableResourceGroup, key, "") - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return nil, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Route table %q not found", key) - return nil, nil - } - - return &rt, nil - } - - if az.RouteTableCacheTTLInSeconds == 0 { - az.RouteTableCacheTTLInSeconds = routeTableCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.RouteTableCacheTTLInSeconds)*time.Second, getter) -} - -func (az *Cloud) newPIPCache() (*azcache.TimedCache, error) { - getter := func(key string) (interface{}, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - - parsedKey := strings.Split(strings.TrimSpace(key), consts.PIPCacheKeySeparator) - if len(parsedKey) != 2 { - return nil, fmt.Errorf("failed to parse public ip rg and name from cache key %q", key) - } - pipResourceGroup, pipName := strings.TrimSpace(parsedKey[0]), strings.TrimSpace(parsedKey[1]) - - pip, err := az.PublicIPAddressesClient.Get(ctx, pipResourceGroup, pipName, "") - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return nil, rerr.Error() - } - - if !exists { - klog.V(2).Infof("Public IP %q in rg %q not found", pipName, pipResourceGroup) - return nil, nil - } - - return &pip, nil - } - - if az.PublicIPCacheTTLInSeconds == 0 { - az.PublicIPCacheTTLInSeconds = publicIPCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.PublicIPCacheTTLInSeconds)*time.Second, getter) -} - -func (az *Cloud) newPLSCache() (*azcache.TimedCache, error) { - // for PLS cache, key is LBFrontendIPConfiguration ID - getter := func(key string) (interface{}, error) { - ctx, cancel := getContextWithCancel() - defer cancel() - plsList, err := az.PrivateLinkServiceClient.List(ctx, az.PrivateLinkServiceResourceGroup) - exists, rerr := checkResourceExistsFromError(err) - if rerr != nil { - return nil, rerr.Error() - } - - if exists { - for i := range plsList { - pls := plsList[i] - if pls.PrivateLinkServiceProperties == nil { - continue - } - fipConfigs := pls.PrivateLinkServiceProperties.LoadBalancerFrontendIPConfigurations - if fipConfigs == nil { - continue - } - for _, fipConfig := range *fipConfigs { - if strings.EqualFold(*fipConfig.ID, key) { - return &pls, nil - } - } - - } - } - - klog.V(2).Infof("No privateLinkService found for frontendIPConfig %q", key) - plsNotExistID := consts.PrivateLinkServiceNotExistID - return &network.PrivateLinkService{ID: &plsNotExistID}, nil - } - - if az.PlsCacheTTLInSeconds == 0 { - az.PlsCacheTTLInSeconds = plsCacheTTLDefaultInSeconds - } - return azcache.NewTimedcache(time.Duration(az.PlsCacheTTLInSeconds)*time.Second, getter) -} - func (az *Cloud) useStandardLoadBalancer() bool { return strings.EqualFold(az.LoadBalancerSku, consts.LoadBalancerSkuStandard) } @@ -415,29 +97,3 @@ func ConvertResourceGroupNameToLower(resourceID string) (string, error) { resourceGroup := matches[1] return strings.Replace(resourceID, resourceGroup, strings.ToLower(resourceGroup), 1), nil } - -// isBackendPoolOnSameLB checks whether newBackendPoolID is on the same load balancer as existingBackendPools. -// Since both public and internal LBs are supported, lbName and lbName-internal are treated as same. -// If not same, the lbName for existingBackendPools would also be returned. -func isBackendPoolOnSameLB(newBackendPoolID string, existingBackendPools []string) (bool, string, error) { - matches := backendPoolIDRE.FindStringSubmatch(newBackendPoolID) - if len(matches) != 2 { - return false, "", fmt.Errorf("new backendPoolID %q is in wrong format", newBackendPoolID) - } - - newLBName := matches[1] - newLBNameTrimmed := strings.TrimSuffix(newLBName, consts.InternalLoadBalancerNameSuffix) - for _, backendPool := range existingBackendPools { - matches := backendPoolIDRE.FindStringSubmatch(backendPool) - if len(matches) != 2 { - return false, "", fmt.Errorf("existing backendPoolID %q is in wrong format", backendPool) - } - - lbName := matches[1] - if !strings.EqualFold(strings.TrimSuffix(lbName, consts.InternalLoadBalancerNameSuffix), newLBNameTrimmed) { - return false, lbName, nil - } - } - - return true, "", nil -} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_zones.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_zones.go index 68f8f8203da5..7c922ac84d82 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_zones.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_zones.go @@ -23,7 +23,6 @@ import ( "os" "strconv" "strings" - "time" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -35,13 +34,13 @@ import ( "sigs.k8s.io/cloud-provider-azure/pkg/retry" ) -func (az *Cloud) refreshZones(refreshFunc func() error) { - ticker := time.NewTicker(consts.ZoneFetchingInterval) - defer ticker.Stop() - - for range ticker.C { +func (az *Cloud) refreshZones(ctx context.Context, refreshFunc func() error) { + klog.V(2).Info("refreshZones: refreshing zones every 30 minutes.") + err := wait.PollUntilContextCancel(ctx, consts.ZoneFetchingInterval, false, func(ctx context.Context) (bool, error) { _ = refreshFunc() - } + return false, nil + }) + klog.V(2).Infof("refreshZones: refresh zones finished with error: %s", err.Error()) } func (az *Cloud) syncRegionZonesMap() error { diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/config/azure_auth.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/config/azure_auth.go index a7ba9ea9bfea..7a02691668ff 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/config/azure_auth.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/config/azure_auth.go @@ -78,6 +78,10 @@ type AzureAuthConfig struct { NetworkResourceTenantID string `json:"networkResourceTenantID,omitempty" yaml:"networkResourceTenantID,omitempty"` // The ID of the Azure Subscription that the network resources are deployed in NetworkResourceSubscriptionID string `json:"networkResourceSubscriptionID,omitempty" yaml:"networkResourceSubscriptionID,omitempty"` + // The AAD federated token file + AADFederatedTokenFile string `json:"aadFederatedTokenFile,omitempty" yaml:"aadFederatedTokenFile,omitempty"` + // Use workload identity federation for the virtual machine to access Azure ARM APIs + UseFederatedWorkloadIdentityExtension bool `json:"useFederatedWorkloadIdentityExtension,omitempty" yaml:"useFederatedWorkloadIdentityExtension,omitempty"` } // GetServicePrincipalToken creates a new service principal token based on the configuration. @@ -100,6 +104,28 @@ func GetServicePrincipalToken(config *AzureAuthConfig, env *azure.Environment, r resource = env.ServiceManagementEndpoint } + if config.UseFederatedWorkloadIdentityExtension { + klog.V(2).Infoln("azure: using workload identity extension to retrieve access token") + oauthConfig, err := adal.NewOAuthConfigWithAPIVersion(env.ActiveDirectoryEndpoint, config.TenantID, nil) + if err != nil { + return nil, fmt.Errorf("failed to create the OAuth config: %w", err) + } + + jwtCallback := func() (string, error) { + jwt, err := os.ReadFile(config.AADFederatedTokenFile) + if err != nil { + return "", fmt.Errorf("failed to read a file with a federated token: %w", err) + } + return string(jwt), nil + } + + token, err := adal.NewServicePrincipalTokenFromFederatedTokenCallback(*oauthConfig, config.AADClientID, jwtCallback, env.ResourceManagerEndpoint) + if err != nil { + return nil, fmt.Errorf("failed to create a workload identity token: %w", err) + } + return token, nil + } + if config.UseManagedIdentityExtension { klog.V(2).Infoln("azure: using managed identity extension to retrieve access token") msiEndpoint, err := adal.GetMSIVMEndpoint() diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/virtualmachine/virtualmachine.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/virtualmachine/virtualmachine.go index 098bb8dad31b..bd6b77535be3 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/virtualmachine/virtualmachine.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/virtualmachine/virtualmachine.go @@ -17,8 +17,8 @@ limitations under the License. package virtualmachine import ( - "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute" + "k8s.io/utils/pointer" ) type Variant string @@ -79,12 +79,12 @@ func FromVirtualMachine(vm *compute.VirtualMachine, opt ...ManageOption) *Virtua vm: vm, Variant: VariantVirtualMachine, - ID: to.String(vm.ID), - Name: to.String(vm.Name), - Type: to.String(vm.Type), - Location: to.String(vm.Location), - Tags: to.StringMap(vm.Tags), - Zones: to.StringSlice(vm.Zones), + ID: pointer.StringDeref(vm.ID, ""), + Name: pointer.StringDeref(vm.Name, ""), + Type: pointer.StringDeref(vm.Type, ""), + Location: pointer.StringDeref(vm.Location, ""), + Tags: stringMap(vm.Tags), + Zones: stringSlice(vm.Zones), Plan: vm.Plan, Resources: vm.Resources, @@ -104,17 +104,17 @@ func FromVirtualMachineScaleSetVM(vm *compute.VirtualMachineScaleSetVM, opt Mana Variant: VariantVirtualMachineScaleSetVM, vmssVM: vm, - ID: to.String(vm.ID), - Name: to.String(vm.Name), - Type: to.String(vm.Type), - Location: to.String(vm.Location), - Tags: to.StringMap(vm.Tags), - Zones: to.StringSlice(vm.Zones), + ID: pointer.StringDeref(vm.ID, ""), + Name: pointer.StringDeref(vm.Name, ""), + Type: pointer.StringDeref(vm.Type, ""), + Location: pointer.StringDeref(vm.Location, ""), + Tags: stringMap(vm.Tags), + Zones: stringSlice(vm.Zones), Plan: vm.Plan, Resources: vm.Resources, SKU: vm.Sku, - InstanceID: to.String(vm.InstanceID), + InstanceID: pointer.StringDeref(vm.InstanceID, ""), VirtualMachineScaleSetVMProperties: vm.VirtualMachineScaleSetVMProperties, } @@ -144,3 +144,26 @@ func (vm *VirtualMachine) AsVirtualMachine() *compute.VirtualMachine { func (vm *VirtualMachine) AsVirtualMachineScaleSetVM() *compute.VirtualMachineScaleSetVM { return vm.vmssVM } + +// StringMap returns a map of strings built from the map of string pointers. The empty string is +// used for nil pointers. +func stringMap(msp map[string]*string) map[string]string { + ms := make(map[string]string, len(msp)) + for k, sp := range msp { + if sp != nil { + ms[k] = *sp + } else { + ms[k] = "" + } + } + return ms +} + +// stringSlice returns a string slice value for the passed string slice pointer. It returns a nil +// slice if the pointer is nil. +func stringSlice(s *[]string) []string { + if s != nil { + return *s + } + return nil +} diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/retry/azure_error.go b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/retry/azure_error.go index d5ddae531ddc..ef47fe476395 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/retry/azure_error.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/cloud-provider-azure/pkg/retry/azure_error.go @@ -20,7 +20,7 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "regexp" "strconv" @@ -64,13 +64,6 @@ type Error struct { RawError error } -// RawErrorContainer is the container of the Error.RawError -type RawErrorContainer struct { - Code string `json:"code"` - Message string `json:"message"` - Details []string `json:"details"` -} - // Error returns the error. // Note that Error doesn't implement error interface because (nil *Error) != (nil error). func (err *Error) Error() error { @@ -198,8 +191,8 @@ func getRawError(resp *http.Response, err error) error { // return the http status if it is unable to get response body. defer resp.Body.Close() - respBody, _ := ioutil.ReadAll(resp.Body) - resp.Body = ioutil.NopCloser(bytes.NewReader(respBody)) + respBody, _ := io.ReadAll(resp.Body) + resp.Body = io.NopCloser(bytes.NewReader(respBody)) if len(respBody) == 0 { return fmt.Errorf("HTTP status code (%d)", resp.StatusCode) } @@ -425,3 +418,16 @@ func getOperationNotAllowedReason(msg string) string { } return OperationNotAllowed } + +// PartialUpdateError implements error interface. It is meant to be returned for errors with http status code of 2xx +type PartialUpdateError struct { + message string +} + +func NewPartialUpdateError(msg string) *PartialUpdateError { + return &PartialUpdateError{message: msg} +} + +func (e *PartialUpdateError) Error() string { + return e.message +} From 1bf5e878b94da90c5111e2b928b0e6eafb774bba Mon Sep 17 00:00:00 2001 From: ricardovivanc0 Date: Fri, 22 Sep 2023 11:56:37 -0700 Subject: [PATCH 058/125] Add EC2 instance type p5.48xlarge --- cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go b/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go index a9dc9937d5ee..5d302c0fda0c 100644 --- a/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go +++ b/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go @@ -2825,6 +2825,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 8, Architecture: "amd64", }, + "p5.48xlarge": { + InstanceType: "p5.48xlarge", + VCPU: 192, + MemoryMb: 2048000, + GPU: 8, + Architecture: "amd64", + }, "r3.2xlarge": { InstanceType: "r3.2xlarge", VCPU: 8, From d2fe118db94c8717df8efef158cc99b414c24f9f Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Fri, 22 Sep 2023 20:51:34 +0000 Subject: [PATCH 059/125] Add startup taint flag, prefix & add status taint prefix --- cluster-autoscaler/main.go | 3 +- cluster-autoscaler/utils/taints/taints.go | 29 +++++++++++--- .../utils/taints/taints_test.go | 40 +++++++++++++++++-- 3 files changed, 62 insertions(+), 10 deletions(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index ab21e8f0fae6..123b9ecfb2e0 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -198,6 +198,7 @@ var ( newPodScaleUpDelay = flag.Duration("new-pod-scale-up-delay", 0*time.Second, "Pods less than this old will not be considered for scale-up. Can be increased for individual pods through annotation 'cluster-autoscaler.kubernetes.io/pod-scale-up-delay'.") ignoreTaintsFlag = multiStringFlag("ignore-taint", "Specifies a taint to ignore in node templates when considering to scale a node group") + startupTaintFlag = multiStringFlag("startup-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Equivalent to ignore-taint)") balancingIgnoreLabelsFlag = multiStringFlag("balancing-ignore-label", "Specifies a label to ignore in addition to the basic and cloud-provider set of labels when comparing if two node groups are similar") balancingLabelsFlag = multiStringFlag("balancing-label", "Specifies a label to use for comparing if two node groups are similar, rather than the built in heuristics. Setting this flag disables all other comparison logic, and cannot be combined with --balancing-ignore-label.") awsUseStaticInstanceList = flag.Bool("aws-use-static-instance-list", false, "Should CA fetch instance types in runtime or use a static list. AWS only") @@ -346,7 +347,7 @@ func createAutoscalingOptions() config.AutoscalingOptions { ExpendablePodsPriorityCutoff: *expendablePodsPriorityCutoff, Regional: *regional, NewPodScaleUpDelay: *newPodScaleUpDelay, - IgnoredTaints: *ignoreTaintsFlag, + IgnoredTaints: append(*ignoreTaintsFlag, *startupTaintFlag...), BalancingExtraIgnoredLabels: *balancingIgnoreLabelsFlag, BalancingLabels: *balancingLabelsFlag, KubeConfigPath: *kubeConfigFile, diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 1f0a1ac348ae..07381e6f9bc7 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -44,6 +44,12 @@ const ( // IgnoreTaintPrefix any taint starting with it will be filtered out from autoscaler template node. IgnoreTaintPrefix = "ignore-taint.cluster-autoscaler.kubernetes.io/" + // StartupTaintPrefix (Same as IgnoreTaintPrefix) any taint starting with it will be filtered out from autoscaler template node. + StartupTaintPrefix = "startup-taint.cluster-autoscaler.kubernetes.io/" + + // StartupTaintPrefix (Same as IgnoreTaintPrefix) any taint starting with it will be filtered out from autoscaler template node. + DefaultStatusTaintPrefix = "status-taint.cluster-autoscaler.kubernetes.io/" + gkeNodeTerminationHandlerTaint = "cloud.google.com/impending-node-termination" // AWS: Indicates that a node has volumes stuck in attaching state and hence it is not fit for scheduling more pods @@ -55,8 +61,9 @@ type TaintKeySet map[string]bool // TaintConfig is a config of taints that require special handling type TaintConfig struct { - IgnoredTaints TaintKeySet - StatusTaints TaintKeySet + IgnoredTaints TaintKeySet + StatusTaints TaintKeySet + StatusTaintPrefix string } // NewTaintConfig returns the taint config extracted from options @@ -74,8 +81,9 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { } return TaintConfig{ - IgnoredTaints: ignoredTaints, - StatusTaints: statusTaints, + IgnoredTaints: ignoredTaints, + StatusTaints: statusTaints, + StatusTaintPrefix: DefaultStatusTaintPrefix, } } @@ -352,6 +360,15 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint continue } + if strings.HasPrefix(taint.Key, StartupTaintPrefix) { + klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) + continue + } + if strings.HasPrefix(taint.Key, DefaultStatusTaintPrefix) { + klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) + continue + } + if _, exists := taintConfig.StatusTaints[taint.Key]; exists { klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) continue @@ -376,10 +393,10 @@ func FilterOutNodesWithIgnoredTaints(ignoredTaints TaintKeySet, allNodes, readyN ready := true for _, t := range node.Spec.Taints { _, hasIgnoredTaint := ignoredTaints[t.Key] - if hasIgnoredTaint || strings.HasPrefix(t.Key, IgnoreTaintPrefix) { + if hasIgnoredTaint || strings.HasPrefix(t.Key, IgnoreTaintPrefix) || strings.HasPrefix(t.Key, StartupTaintPrefix) { ready = false nodesWithIgnoredTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.IgnoreTaint) - klog.V(3).Infof("Overriding status of node %v, which seems to have ignored taint %q", node.Name, t.Key) + klog.V(3).Infof("Overriding status of node %v, which seems to have ignored or startup taint %q", node.Name, t.Key) break } } diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index 276cada33eef..78f0953d2680 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -388,7 +388,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "no ignored taint, one unready prefixed tainted node": { + "no ignored taint, one node unready prefixed with ignore taint": { readyNodes: 0, allNodes: 1, ignoredTaints: map[string]bool{}, @@ -411,6 +411,29 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, + "no ignored taint, one node unready prefixed with startup taint": { + readyNodes: 0, + allNodes: 1, + ignoredTaints: map[string]bool{}, + node: &apiv1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "notReadyTainted", + CreationTimestamp: metav1.NewTime(time.Now()), + }, + Spec: apiv1.NodeSpec{ + Taints: []apiv1.Taint{ + { + Key: StartupTaintPrefix + "another-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + }, + }, + Status: apiv1.NodeStatus{ + Conditions: []apiv1.NodeCondition{readyCondition}, + }, + }, + }, "no ignored taint, two taints": { readyNodes: 1, allNodes: 1, @@ -485,6 +508,16 @@ func TestSanitizeTaints(t *testing.T) { Value: "myValue", Effect: apiv1.TaintEffectNoSchedule, }, + { + Key: DefaultStatusTaintPrefix + "some-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: StartupTaintPrefix + "some-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, { Key: "test-taint", Value: "test2", @@ -522,8 +555,9 @@ func TestSanitizeTaints(t *testing.T) { }, } taintConfig := TaintConfig{ - IgnoredTaints: map[string]bool{"ignore-me": true}, - StatusTaints: map[string]bool{"status-me": true}, + IgnoredTaints: map[string]bool{"ignore-me": true}, + StatusTaints: map[string]bool{"status-me": true}, + StatusTaintPrefix: DefaultStatusTaintPrefix, } newTaints := SanitizeTaints(node.Spec.Taints, taintConfig) From 79a55bbb0519a4689fe052f975291d4fc7bd87c2 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Fri, 22 Sep 2023 21:06:48 +0000 Subject: [PATCH 060/125] Add startup taint flag, prefix & add status taint prefix --- cluster-autoscaler/main.go | 2 ++ cluster-autoscaler/utils/taints/taints.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 123b9ecfb2e0..0eb192d2d40e 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -199,6 +199,7 @@ var ( ignoreTaintsFlag = multiStringFlag("ignore-taint", "Specifies a taint to ignore in node templates when considering to scale a node group") startupTaintFlag = multiStringFlag("startup-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Equivalent to ignore-taint)") + statusTaintsFlag = multiStringFlag("status-taint", "Specifies a taint to ignore in node templates when considering to scale a node group but nodes will not be treated as unready") balancingIgnoreLabelsFlag = multiStringFlag("balancing-ignore-label", "Specifies a label to ignore in addition to the basic and cloud-provider set of labels when comparing if two node groups are similar") balancingLabelsFlag = multiStringFlag("balancing-label", "Specifies a label to use for comparing if two node groups are similar, rather than the built in heuristics. Setting this flag disables all other comparison logic, and cannot be combined with --balancing-ignore-label.") awsUseStaticInstanceList = flag.Bool("aws-use-static-instance-list", false, "Should CA fetch instance types in runtime or use a static list. AWS only") @@ -348,6 +349,7 @@ func createAutoscalingOptions() config.AutoscalingOptions { Regional: *regional, NewPodScaleUpDelay: *newPodScaleUpDelay, IgnoredTaints: append(*ignoreTaintsFlag, *startupTaintFlag...), + StatusTaints: *statusTaintsFlag, BalancingExtraIgnoredLabels: *balancingIgnoreLabelsFlag, BalancingLabels: *balancingLabelsFlag, KubeConfigPath: *kubeConfigFile, diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 07381e6f9bc7..1e997c278c05 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -47,7 +47,7 @@ const ( // StartupTaintPrefix (Same as IgnoreTaintPrefix) any taint starting with it will be filtered out from autoscaler template node. StartupTaintPrefix = "startup-taint.cluster-autoscaler.kubernetes.io/" - // StartupTaintPrefix (Same as IgnoreTaintPrefix) any taint starting with it will be filtered out from autoscaler template node. + // DefaultStatusTaintPrefix any taint starting with it will be filtered out from autoscaler template node but unlike IgnoreTaintPrefix & StartTaintPrefix it should not be trated as unready. DefaultStatusTaintPrefix = "status-taint.cluster-autoscaler.kubernetes.io/" gkeNodeTerminationHandlerTaint = "cloud.google.com/impending-node-termination" From 43bad9a95a0d0d36afcd9c66e7ea2383b8591504 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Fri, 22 Sep 2023 21:22:26 +0000 Subject: [PATCH 061/125] Remove StatusTaintPrefix from TaintConfig since it's not needed atm --- cluster-autoscaler/utils/taints/taints.go | 2 -- cluster-autoscaler/utils/taints/taints_test.go | 1 - 2 files changed, 3 deletions(-) diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 1e997c278c05..7b825acca05e 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -63,7 +63,6 @@ type TaintKeySet map[string]bool type TaintConfig struct { IgnoredTaints TaintKeySet StatusTaints TaintKeySet - StatusTaintPrefix string } // NewTaintConfig returns the taint config extracted from options @@ -83,7 +82,6 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { return TaintConfig{ IgnoredTaints: ignoredTaints, StatusTaints: statusTaints, - StatusTaintPrefix: DefaultStatusTaintPrefix, } } diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index 78f0953d2680..40f87e9baf77 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -557,7 +557,6 @@ func TestSanitizeTaints(t *testing.T) { taintConfig := TaintConfig{ IgnoredTaints: map[string]bool{"ignore-me": true}, StatusTaints: map[string]bool{"status-me": true}, - StatusTaintPrefix: DefaultStatusTaintPrefix, } newTaints := SanitizeTaints(node.Spec.Taints, taintConfig) From 85d63e79da2beedd8367ff280c224b8e07383d7f Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Fri, 22 Sep 2023 15:49:13 -0700 Subject: [PATCH 062/125] Azure: add ENV coverage to UT Signed-off-by: Jack Francis --- cluster-autoscaler/cloudprovider/azure/azure_manager_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go b/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go index 130d79bae08b..bfcf0bb02f47 100644 --- a/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go +++ b/cluster-autoscaler/cloudprovider/azure/azure_manager_test.go @@ -423,6 +423,8 @@ func TestCreateAzureManagerWithNilConfig(t *testing.T) { t.Setenv("ARM_CLOUD", "AzurePublicCloud") t.Setenv("LOCATION", "southeastasia") + t.Setenv("AZURE_TENANT_ID", "tenantId") + t.Setenv("AZURE_CLIENT_ID", "aadClientId") t.Setenv("ARM_SUBSCRIPTION_ID", "subscriptionId") t.Setenv("ARM_RESOURCE_GROUP", "resourceGroup") t.Setenv("ARM_TENANT_ID", "tenantId") From 6bf31ca3f3a86072b665cf918ca7d16faa1e7641 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Mon, 25 Sep 2023 08:02:22 +0000 Subject: [PATCH 063/125] Fix formatting issue --- cluster-autoscaler/utils/taints/taints.go | 8 ++++---- cluster-autoscaler/utils/taints/taints_test.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 7b825acca05e..241599b54ecc 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -61,8 +61,8 @@ type TaintKeySet map[string]bool // TaintConfig is a config of taints that require special handling type TaintConfig struct { - IgnoredTaints TaintKeySet - StatusTaints TaintKeySet + IgnoredTaints TaintKeySet + StatusTaints TaintKeySet } // NewTaintConfig returns the taint config extracted from options @@ -80,8 +80,8 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { } return TaintConfig{ - IgnoredTaints: ignoredTaints, - StatusTaints: statusTaints, + IgnoredTaints: ignoredTaints, + StatusTaints: statusTaints, } } diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index 40f87e9baf77..43a7dde869b4 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -555,8 +555,8 @@ func TestSanitizeTaints(t *testing.T) { }, } taintConfig := TaintConfig{ - IgnoredTaints: map[string]bool{"ignore-me": true}, - StatusTaints: map[string]bool{"status-me": true}, + IgnoredTaints: map[string]bool{"ignore-me": true}, + StatusTaints: map[string]bool{"status-me": true}, } newTaints := SanitizeTaints(node.Spec.Taints, taintConfig) From f9d3185f16d9f3510a9653f4d2b65c23ccfc2788 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Tue, 26 Sep 2023 09:12:01 +0000 Subject: [PATCH 064/125] Rename IgnoreTaints to StartupTaints & deprecate --ignore-taints flag --- cluster-autoscaler/core/static_autoscaler.go | 2 +- cluster-autoscaler/main.go | 2 +- cluster-autoscaler/utils/taints/taints.go | 16 +++++++------- .../utils/taints/taints_test.go | 22 +++++++++---------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index c4bca6969b9b..6da20fd814b7 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -959,7 +959,7 @@ func (a *StaticAutoscaler) obtainNodeLists(cp cloudprovider.CloudProvider) ([]*a // our normal handling for booting up nodes deal with this. // TODO: Remove this call when we handle dynamically provisioned resources. allNodes, readyNodes = a.processors.CustomResourcesProcessor.FilterOutNodesWithUnreadyResources(a.AutoscalingContext, allNodes, readyNodes) - allNodes, readyNodes = taints.FilterOutNodesWithIgnoredTaints(a.taintConfig.IgnoredTaints, allNodes, readyNodes) + allNodes, readyNodes = taints.FilterOutNodesWithIgnoredTaints(a.taintConfig.StartupTaints, allNodes, readyNodes) return allNodes, readyNodes, nil } diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 0eb192d2d40e..5d3adeababab 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -197,7 +197,7 @@ var ( regional = flag.Bool("regional", false, "Cluster is regional.") newPodScaleUpDelay = flag.Duration("new-pod-scale-up-delay", 0*time.Second, "Pods less than this old will not be considered for scale-up. Can be increased for individual pods through annotation 'cluster-autoscaler.kubernetes.io/pod-scale-up-delay'.") - ignoreTaintsFlag = multiStringFlag("ignore-taint", "Specifies a taint to ignore in node templates when considering to scale a node group") + ignoreTaintsFlag = multiStringFlag("ignore-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Deprecated, use startup-taints instead)") startupTaintFlag = multiStringFlag("startup-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Equivalent to ignore-taint)") statusTaintsFlag = multiStringFlag("status-taint", "Specifies a taint to ignore in node templates when considering to scale a node group but nodes will not be treated as unready") balancingIgnoreLabelsFlag = multiStringFlag("balancing-ignore-label", "Specifies a label to ignore in addition to the basic and cloud-provider set of labels when comparing if two node groups are similar") diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 241599b54ecc..62628ede25b9 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -47,8 +47,8 @@ const ( // StartupTaintPrefix (Same as IgnoreTaintPrefix) any taint starting with it will be filtered out from autoscaler template node. StartupTaintPrefix = "startup-taint.cluster-autoscaler.kubernetes.io/" - // DefaultStatusTaintPrefix any taint starting with it will be filtered out from autoscaler template node but unlike IgnoreTaintPrefix & StartTaintPrefix it should not be trated as unready. - DefaultStatusTaintPrefix = "status-taint.cluster-autoscaler.kubernetes.io/" + // StatusTaintPrefix any taint starting with it will be filtered out from autoscaler template node but unlike IgnoreTaintPrefix & StartupTaintPrefix it should not be trated as unready. + StatusTaintPrefix = "status-taint.cluster-autoscaler.kubernetes.io/" gkeNodeTerminationHandlerTaint = "cloud.google.com/impending-node-termination" @@ -61,16 +61,16 @@ type TaintKeySet map[string]bool // TaintConfig is a config of taints that require special handling type TaintConfig struct { - IgnoredTaints TaintKeySet + StartupTaints TaintKeySet StatusTaints TaintKeySet } // NewTaintConfig returns the taint config extracted from options func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { - ignoredTaints := make(TaintKeySet) + startupTaints := make(TaintKeySet) for _, taintKey := range opts.IgnoredTaints { klog.V(4).Infof("Ignoring taint %s on all NodeGroups", taintKey) - ignoredTaints[taintKey] = true + startupTaints[taintKey] = true } statusTaints := make(TaintKeySet) @@ -80,7 +80,7 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { } return TaintConfig{ - IgnoredTaints: ignoredTaints, + StartupTaints: startupTaints, StatusTaints: statusTaints, } } @@ -348,7 +348,7 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint continue } - if _, exists := taintConfig.IgnoredTaints[taint.Key]; exists { + if _, exists := taintConfig.StartupTaints[taint.Key]; exists { klog.V(4).Infof("Removing ignored taint %s, when creating template from node", taint.Key) continue } @@ -362,7 +362,7 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) continue } - if strings.HasPrefix(taint.Key, DefaultStatusTaintPrefix) { + if strings.HasPrefix(taint.Key, StatusTaintPrefix) { klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) continue } diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index 43a7dde869b4..b9949cbabe89 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -327,19 +327,19 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { for name, tc := range map[string]struct { readyNodes int allNodes int - ignoredTaints TaintKeySet + startupTaints TaintKeySet node *apiv1.Node }{ "empty ignored taints, no node": { readyNodes: 0, allNodes: 0, - ignoredTaints: map[string]bool{}, + startupTaints: map[string]bool{}, node: nil, }, "one ignored taint, no node": { readyNodes: 0, allNodes: 0, - ignoredTaints: map[string]bool{ + startupTaints: map[string]bool{ "my-taint": true, }, node: nil, @@ -347,7 +347,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { "one ignored taint, one ready untainted node": { readyNodes: 1, allNodes: 1, - ignoredTaints: map[string]bool{ + startupTaints: map[string]bool{ "my-taint": true, }, node: &apiv1.Node{ @@ -366,7 +366,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { "one ignored taint, one unready tainted node": { readyNodes: 0, allNodes: 1, - ignoredTaints: map[string]bool{ + startupTaints: map[string]bool{ "my-taint": true, }, node: &apiv1.Node{ @@ -391,7 +391,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { "no ignored taint, one node unready prefixed with ignore taint": { readyNodes: 0, allNodes: 1, - ignoredTaints: map[string]bool{}, + startupTaints: map[string]bool{}, node: &apiv1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "notReadyTainted", @@ -414,7 +414,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { "no ignored taint, one node unready prefixed with startup taint": { readyNodes: 0, allNodes: 1, - ignoredTaints: map[string]bool{}, + startupTaints: map[string]bool{}, node: &apiv1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "notReadyTainted", @@ -437,7 +437,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { "no ignored taint, two taints": { readyNodes: 1, allNodes: 1, - ignoredTaints: map[string]bool{}, + startupTaints: map[string]bool{}, node: &apiv1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "ReadyTainted", @@ -468,7 +468,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { if tc.node != nil { nodes = append(nodes, tc.node) } - allNodes, readyNodes := FilterOutNodesWithIgnoredTaints(tc.ignoredTaints, nodes, nodes) + allNodes, readyNodes := FilterOutNodesWithIgnoredTaints(tc.startupTaints, nodes, nodes) assert.Equal(t, tc.allNodes, len(allNodes)) assert.Equal(t, tc.readyNodes, len(readyNodes)) @@ -509,7 +509,7 @@ func TestSanitizeTaints(t *testing.T) { Effect: apiv1.TaintEffectNoSchedule, }, { - Key: DefaultStatusTaintPrefix + "some-taint", + Key: StatusTaintPrefix + "some-taint", Value: "myValue", Effect: apiv1.TaintEffectNoSchedule, }, @@ -555,7 +555,7 @@ func TestSanitizeTaints(t *testing.T) { }, } taintConfig := TaintConfig{ - IgnoredTaints: map[string]bool{"ignore-me": true}, + StartupTaints: map[string]bool{"ignore-me": true}, StatusTaints: map[string]bool{"status-me": true}, } From 7f5dd80ec2c46d56141ef3f821e7e834c887638b Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Tue, 26 Sep 2023 10:22:26 +0000 Subject: [PATCH 065/125] Adds prefix lists instead of relying on constant values --- .../oci/nodepools/consts/annotations.go | 2 +- .../core/scaledown/actuation/actuator_test.go | 4 +- cluster-autoscaler/core/static_autoscaler.go | 2 +- cluster-autoscaler/utils/kubernetes/ready.go | 6 +-- cluster-autoscaler/utils/taints/taints.go | 44 ++++++++++--------- .../utils/taints/taints_test.go | 41 ++++++++++------- 6 files changed, 56 insertions(+), 43 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go b/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go index 1b84c3c2cd7d..ac4c5f44e2c5 100644 --- a/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go +++ b/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go @@ -24,5 +24,5 @@ const ( // ToBeDeletedByClusterAutoscaler is the taint used to ensure that after a node has been called to be deleted // no more pods will schedule onto it - ToBeDeletedByClusterAutoscaler = "ignore-taint.cluster-autoscaler.kubernetes.io/oke-impending-node-termination" + ToBeDeletedByClusterAutoscaler = "startup-taint.cluster-autoscaler.kubernetes.io/oke-impending-node-termination" ) diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go index 562413a9a6c8..cc77afce9f1d 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator_test.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator_test.go @@ -1260,8 +1260,8 @@ func TestStartDeletion(t *testing.T) { break taintsLoop } } - ignoreTaintValue := cmpopts.IgnoreFields(apiv1.Taint{}, "Value") - if diff := cmp.Diff(tc.wantTaintUpdates, gotTaintUpdates, ignoreTaintValue, cmpopts.EquateEmpty()); diff != "" { + startupTaintValue := cmpopts.IgnoreFields(apiv1.Taint{}, "Value") + if diff := cmp.Diff(tc.wantTaintUpdates, gotTaintUpdates, startupTaintValue, cmpopts.EquateEmpty()); diff != "" { t.Errorf("taintUpdates diff (-want +got):\n%s", diff) } diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index 6da20fd814b7..be916288b70f 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -959,7 +959,7 @@ func (a *StaticAutoscaler) obtainNodeLists(cp cloudprovider.CloudProvider) ([]*a // our normal handling for booting up nodes deal with this. // TODO: Remove this call when we handle dynamically provisioned resources. allNodes, readyNodes = a.processors.CustomResourcesProcessor.FilterOutNodesWithUnreadyResources(a.AutoscalingContext, allNodes, readyNodes) - allNodes, readyNodes = taints.FilterOutNodesWithIgnoredTaints(a.taintConfig.StartupTaints, allNodes, readyNodes) + allNodes, readyNodes = taints.FilterOutNodesWithIgnoredTaints(a.taintConfig, allNodes, readyNodes) return allNodes, readyNodes, nil } diff --git a/cluster-autoscaler/utils/kubernetes/ready.go b/cluster-autoscaler/utils/kubernetes/ready.go index 09175de42297..bc01d1d18e0a 100644 --- a/cluster-autoscaler/utils/kubernetes/ready.go +++ b/cluster-autoscaler/utils/kubernetes/ready.go @@ -35,10 +35,10 @@ const ( // still upcoming due to a missing resource (e.g. GPU). ResourceUnready NodeNotReadyReason = "cluster-autoscaler.kubernetes.io/resource-not-ready" - // IgnoreTaint is a fake identifier used internally by Cluster Autoscaler + // StartupNodes is a fake identifier used internally by Cluster Autoscaler // to indicate nodes that appear Ready in the API, but are treated as - // still upcoming due to applied ignore taint. - IgnoreTaint NodeNotReadyReason = "cluster-autoscaler.kubernetes.io/ignore-taint" + // still upcoming due to applied startup taint. + StartupNodes NodeNotReadyReason = "cluster-autoscaler.kubernetes.io/startup-taint" ) // IsNodeReadyAndSchedulable returns true if the node is ready and schedulable. diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index 62628ede25b9..cc095f0adebf 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -61,8 +61,10 @@ type TaintKeySet map[string]bool // TaintConfig is a config of taints that require special handling type TaintConfig struct { - StartupTaints TaintKeySet - StatusTaints TaintKeySet + StartupTaints TaintKeySet + StatusTaints TaintKeySet + StartupTaintPrefixes []string + StatusTaintPrefixes []string } // NewTaintConfig returns the taint config extracted from options @@ -80,8 +82,10 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { } return TaintConfig{ - StartupTaints: startupTaints, - StatusTaints: statusTaints, + StartupTaints: startupTaints, + StatusTaints: statusTaints, + StartupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, + StatusTaintPrefixes: []string{StatusTaintPrefix}, } } @@ -329,6 +333,15 @@ func CleanAllTaints(nodes []*apiv1.Node, client kube_client.Interface, recorder } } +func prefixExistsInList(prefixes []string, key string) bool { + for _, prefix := range prefixes { + if strings.HasPrefix(key, prefix) { + return true + } + } + return false +} + // SanitizeTaints returns filtered taints func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint { var newTaints []apiv1.Taint @@ -352,20 +365,11 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint klog.V(4).Infof("Removing ignored taint %s, when creating template from node", taint.Key) continue } - - if strings.HasPrefix(taint.Key, IgnoreTaintPrefix) { - klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) - continue - } - - if strings.HasPrefix(taint.Key, StartupTaintPrefix) { + shouldRemoveBasedOnPrefix := prefixExistsInList(taintConfig.StartupTaintPrefixes, taint.Key) || prefixExistsInList(taintConfig.StatusTaintPrefixes, taint.Key) + if shouldRemoveBasedOnPrefix { klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) continue } - if strings.HasPrefix(taint.Key, StatusTaintPrefix) { - klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) - continue - } if _, exists := taintConfig.StatusTaints[taint.Key]; exists { klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) @@ -379,7 +383,7 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint // FilterOutNodesWithIgnoredTaints override the condition status of the given nodes to mark them as NotReady when they have // filtered taints. -func FilterOutNodesWithIgnoredTaints(ignoredTaints TaintKeySet, allNodes, readyNodes []*apiv1.Node) ([]*apiv1.Node, []*apiv1.Node) { +func FilterOutNodesWithIgnoredTaints(taintConfig TaintConfig, allNodes, readyNodes []*apiv1.Node) ([]*apiv1.Node, []*apiv1.Node) { newAllNodes := make([]*apiv1.Node, 0) newReadyNodes := make([]*apiv1.Node, 0) nodesWithIgnoredTaints := make(map[string]*apiv1.Node) @@ -390,11 +394,11 @@ func FilterOutNodesWithIgnoredTaints(ignoredTaints TaintKeySet, allNodes, readyN } ready := true for _, t := range node.Spec.Taints { - _, hasIgnoredTaint := ignoredTaints[t.Key] - if hasIgnoredTaint || strings.HasPrefix(t.Key, IgnoreTaintPrefix) || strings.HasPrefix(t.Key, StartupTaintPrefix) { + _, hasIgnoredTaint := taintConfig.StartupTaints[t.Key] + if hasIgnoredTaint || prefixExistsInList(taintConfig.StartupTaintPrefixes, t.Key) { ready = false - nodesWithIgnoredTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.IgnoreTaint) - klog.V(3).Infof("Overriding status of node %v, which seems to have ignored or startup taint %q", node.Name, t.Key) + nodesWithIgnoredTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.StartupNodes) + klog.V(3).Infof("Overriding status of node %v, which seems to have startup taint %q", node.Name, t.Key) break } } diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index b9949cbabe89..1835b620f977 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -325,10 +325,11 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { } for name, tc := range map[string]struct { - readyNodes int - allNodes int - startupTaints TaintKeySet - node *apiv1.Node + readyNodes int + allNodes int + startupTaints TaintKeySet + startupTaintsPrefixes []string + node *apiv1.Node }{ "empty ignored taints, no node": { readyNodes: 0, @@ -388,10 +389,11 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "no ignored taint, one node unready prefixed with ignore taint": { - readyNodes: 0, - allNodes: 1, - startupTaints: map[string]bool{}, + "no ignored taint, one node unready prefixed with startup taint prefix": { + readyNodes: 0, + allNodes: 1, + startupTaints: map[string]bool{}, + startupTaintsPrefixes: []string{IgnoreTaintPrefix}, node: &apiv1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "notReadyTainted", @@ -412,9 +414,10 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, "no ignored taint, one node unready prefixed with startup taint": { - readyNodes: 0, - allNodes: 1, - startupTaints: map[string]bool{}, + readyNodes: 0, + allNodes: 1, + startupTaints: map[string]bool{}, + startupTaintsPrefixes: []string{StartupTaintPrefix}, node: &apiv1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "notReadyTainted", @@ -468,7 +471,11 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { if tc.node != nil { nodes = append(nodes, tc.node) } - allNodes, readyNodes := FilterOutNodesWithIgnoredTaints(tc.startupTaints, nodes, nodes) + taintConfig := TaintConfig{ + StartupTaints: tc.startupTaints, + StartupTaintPrefixes: tc.startupTaintsPrefixes, + } + allNodes, readyNodes := FilterOutNodesWithIgnoredTaints(taintConfig, nodes, nodes) assert.Equal(t, tc.allNodes, len(allNodes)) assert.Equal(t, tc.readyNodes, len(readyNodes)) @@ -555,11 +562,13 @@ func TestSanitizeTaints(t *testing.T) { }, } taintConfig := TaintConfig{ - StartupTaints: map[string]bool{"ignore-me": true}, - StatusTaints: map[string]bool{"status-me": true}, + StartupTaints: map[string]bool{"ignore-me": true}, + StatusTaints: map[string]bool{"status-me": true}, + StartupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, } newTaints := SanitizeTaints(node.Spec.Taints, taintConfig) - require.Equal(t, len(newTaints), 1) - assert.Equal(t, newTaints[0].Key, "test-taint") + require.Equal(t, 2, len(newTaints)) + assert.Equal(t, newTaints[0].Key, StatusTaintPrefix+"some-taint") + assert.Equal(t, newTaints[1].Key, "test-taint") } From 267476fd061867de7af454c2f5c8dcb3ac4d3c75 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Tue, 26 Sep 2023 13:54:52 +0000 Subject: [PATCH 066/125] Rename variables & methods to StartupTaint... instead of IgnoreTaint --- .../oci/nodepools/consts/annotations.go | 2 +- .../config/autoscaling_options.go | 6 ++--- cluster-autoscaler/core/static_autoscaler.go | 2 +- cluster-autoscaler/main.go | 2 +- cluster-autoscaler/utils/taints/taints.go | 24 +++++++++---------- .../utils/taints/taints_test.go | 18 +++++++------- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go b/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go index ac4c5f44e2c5..1b84c3c2cd7d 100644 --- a/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go +++ b/cluster-autoscaler/cloudprovider/oci/nodepools/consts/annotations.go @@ -24,5 +24,5 @@ const ( // ToBeDeletedByClusterAutoscaler is the taint used to ensure that after a node has been called to be deleted // no more pods will schedule onto it - ToBeDeletedByClusterAutoscaler = "startup-taint.cluster-autoscaler.kubernetes.io/oke-impending-node-termination" + ToBeDeletedByClusterAutoscaler = "ignore-taint.cluster-autoscaler.kubernetes.io/oke-impending-node-termination" ) diff --git a/cluster-autoscaler/config/autoscaling_options.go b/cluster-autoscaler/config/autoscaling_options.go index 3282b0bb64ea..05e6cc2fb6e8 100644 --- a/cluster-autoscaler/config/autoscaling_options.go +++ b/cluster-autoscaler/config/autoscaling_options.go @@ -203,10 +203,10 @@ type AutoscalingOptions struct { MaxBulkSoftTaintTime time.Duration // MaxPodEvictionTime sets the maximum time CA tries to evict a pod before giving up. MaxPodEvictionTime time.Duration - // IgnoredTaints is a list of taints CA considers to reflect transient node + // StartupTaints is a list of taints CA considers to reflect transient node // status that should be removed when creating a node template for scheduling. - // The ignored taints are expected to appear during node startup. - IgnoredTaints []string + // startup taints are expected to appear during node startup. + StartupTaints []string // StatusTaints is a list of taints CA considers to reflect transient node // status that should be removed when creating a node template for scheduling. // The status taints are expected to appear during node lifetime, after startup. diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index be916288b70f..e31a63fc7007 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -959,7 +959,7 @@ func (a *StaticAutoscaler) obtainNodeLists(cp cloudprovider.CloudProvider) ([]*a // our normal handling for booting up nodes deal with this. // TODO: Remove this call when we handle dynamically provisioned resources. allNodes, readyNodes = a.processors.CustomResourcesProcessor.FilterOutNodesWithUnreadyResources(a.AutoscalingContext, allNodes, readyNodes) - allNodes, readyNodes = taints.FilterOutNodesWithIgnoredTaints(a.taintConfig, allNodes, readyNodes) + allNodes, readyNodes = taints.FilterOutNodesWithStartupTaints(a.taintConfig, allNodes, readyNodes) return allNodes, readyNodes, nil } diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 5d3adeababab..ac57ff8d33fd 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -348,7 +348,7 @@ func createAutoscalingOptions() config.AutoscalingOptions { ExpendablePodsPriorityCutoff: *expendablePodsPriorityCutoff, Regional: *regional, NewPodScaleUpDelay: *newPodScaleUpDelay, - IgnoredTaints: append(*ignoreTaintsFlag, *startupTaintFlag...), + StartupTaints: append(*ignoreTaintsFlag, *startupTaintFlag...), StatusTaints: *statusTaintsFlag, BalancingExtraIgnoredLabels: *balancingIgnoreLabelsFlag, BalancingLabels: *balancingLabelsFlag, diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index cc095f0adebf..c3a09db60e12 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -70,8 +70,8 @@ type TaintConfig struct { // NewTaintConfig returns the taint config extracted from options func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { startupTaints := make(TaintKeySet) - for _, taintKey := range opts.IgnoredTaints { - klog.V(4).Infof("Ignoring taint %s on all NodeGroups", taintKey) + for _, taintKey := range opts.StartupTaints { + klog.V(4).Infof("Startup taint %s on all NodeGroups", taintKey) startupTaints[taintKey] = true } @@ -333,7 +333,7 @@ func CleanAllTaints(nodes []*apiv1.Node, client kube_client.Interface, recorder } } -func prefixExistsInList(prefixes []string, key string) bool { +func matchesAnyPrefix(prefixes []string, key string) bool { for _, prefix := range prefixes { if strings.HasPrefix(key, prefix) { return true @@ -362,10 +362,10 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint } if _, exists := taintConfig.StartupTaints[taint.Key]; exists { - klog.V(4).Infof("Removing ignored taint %s, when creating template from node", taint.Key) + klog.V(4).Infof("Removing startup taint %s, when creating template from node", taint.Key) continue } - shouldRemoveBasedOnPrefix := prefixExistsInList(taintConfig.StartupTaintPrefixes, taint.Key) || prefixExistsInList(taintConfig.StatusTaintPrefixes, taint.Key) + shouldRemoveBasedOnPrefix := matchesAnyPrefix(taintConfig.StartupTaintPrefixes, taint.Key) || matchesAnyPrefix(taintConfig.StatusTaintPrefixes, taint.Key) if shouldRemoveBasedOnPrefix { klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) continue @@ -381,12 +381,12 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint return newTaints } -// FilterOutNodesWithIgnoredTaints override the condition status of the given nodes to mark them as NotReady when they have +// FilterOutNodesWithStartupTaints override the condition status of the given nodes to mark them as NotReady when they have // filtered taints. -func FilterOutNodesWithIgnoredTaints(taintConfig TaintConfig, allNodes, readyNodes []*apiv1.Node) ([]*apiv1.Node, []*apiv1.Node) { +func FilterOutNodesWithStartupTaints(taintConfig TaintConfig, allNodes, readyNodes []*apiv1.Node) ([]*apiv1.Node, []*apiv1.Node) { newAllNodes := make([]*apiv1.Node, 0) newReadyNodes := make([]*apiv1.Node, 0) - nodesWithIgnoredTaints := make(map[string]*apiv1.Node) + nodesWithStartupTaints := make(map[string]*apiv1.Node) for _, node := range readyNodes { if len(node.Spec.Taints) == 0 { newReadyNodes = append(newReadyNodes, node) @@ -394,10 +394,10 @@ func FilterOutNodesWithIgnoredTaints(taintConfig TaintConfig, allNodes, readyNod } ready := true for _, t := range node.Spec.Taints { - _, hasIgnoredTaint := taintConfig.StartupTaints[t.Key] - if hasIgnoredTaint || prefixExistsInList(taintConfig.StartupTaintPrefixes, t.Key) { + _, hasStartupTaint := taintConfig.StartupTaints[t.Key] + if hasStartupTaint || matchesAnyPrefix(taintConfig.StartupTaintPrefixes, t.Key) { ready = false - nodesWithIgnoredTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.StartupNodes) + nodesWithStartupTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.StartupNodes) klog.V(3).Infof("Overriding status of node %v, which seems to have startup taint %q", node.Name, t.Key) break } @@ -408,7 +408,7 @@ func FilterOutNodesWithIgnoredTaints(taintConfig TaintConfig, allNodes, readyNod } // Override any node with ignored taint with its "unready" copy for _, node := range allNodes { - if newNode, found := nodesWithIgnoredTaints[node.Name]; found { + if newNode, found := nodesWithStartupTaints[node.Name]; found { newAllNodes = append(newAllNodes, newNode) } else { newAllNodes = append(newAllNodes, node) diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index 1835b620f977..e12979fe61c5 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -307,7 +307,7 @@ func buildFakeClientWithConflicts(t *testing.T, nodes ...*apiv1.Node) *fake.Clie return fakeClient } -func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { +func TestFilterOutNodesWithStartupTaints(t *testing.T) { isReady := func(t *testing.T, node *apiv1.Node) bool { for _, condition := range node.Status.Conditions { if condition.Type == apiv1.NodeReady { @@ -331,13 +331,13 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { startupTaintsPrefixes []string node *apiv1.Node }{ - "empty ignored taints, no node": { + "empty startup taints, no node": { readyNodes: 0, allNodes: 0, startupTaints: map[string]bool{}, node: nil, }, - "one ignored taint, no node": { + "one startup taint, no node": { readyNodes: 0, allNodes: 0, startupTaints: map[string]bool{ @@ -345,7 +345,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, node: nil, }, - "one ignored taint, one ready untainted node": { + "one startup taint, one ready untainted node": { readyNodes: 1, allNodes: 1, startupTaints: map[string]bool{ @@ -364,7 +364,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "one ignored taint, one unready tainted node": { + "one startup taint, one unready tainted node": { readyNodes: 0, allNodes: 1, startupTaints: map[string]bool{ @@ -389,7 +389,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "no ignored taint, one node unready prefixed with startup taint prefix": { + "no startup taint, one node unready prefixed with startup taint prefix (Compatability)": { readyNodes: 0, allNodes: 1, startupTaints: map[string]bool{}, @@ -413,7 +413,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "no ignored taint, one node unready prefixed with startup taint": { + "no startup taint, one node unready prefixed with startup taint prefix": { readyNodes: 0, allNodes: 1, startupTaints: map[string]bool{}, @@ -437,7 +437,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { }, }, }, - "no ignored taint, two taints": { + "no startup taint, two taints": { readyNodes: 1, allNodes: 1, startupTaints: map[string]bool{}, @@ -475,7 +475,7 @@ func TestFilterOutNodesWithIgnoredTaints(t *testing.T) { StartupTaints: tc.startupTaints, StartupTaintPrefixes: tc.startupTaintsPrefixes, } - allNodes, readyNodes := FilterOutNodesWithIgnoredTaints(taintConfig, nodes, nodes) + allNodes, readyNodes := FilterOutNodesWithStartupTaints(taintConfig, nodes, nodes) assert.Equal(t, tc.allNodes, len(allNodes)) assert.Equal(t, tc.readyNodes, len(readyNodes)) From c9880c32daae0f8aa8c44a9136e51affbfda5691 Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Tue, 26 Sep 2023 13:59:07 +0000 Subject: [PATCH 067/125] fix spelling issue --- cluster-autoscaler/utils/taints/taints_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index e12979fe61c5..fff009c81792 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -389,7 +389,7 @@ func TestFilterOutNodesWithStartupTaints(t *testing.T) { }, }, }, - "no startup taint, one node unready prefixed with startup taint prefix (Compatability)": { + "no startup taint, one node unready prefixed with startup taint prefix (Compatibility)": { readyNodes: 0, allNodes: 1, startupTaints: map[string]bool{}, From 6fee2f4462d468f23070d182ce1c649254454d40 Mon Sep 17 00:00:00 2001 From: Ray Wainman Date: Tue, 26 Sep 2023 13:48:30 +0000 Subject: [PATCH 068/125] fix duplicate -addext when generating certificates --- vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh b/vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh index 1882601cdf40..730464c460c7 100755 --- a/vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh +++ b/vertical-pod-autoscaler/pkg/admission-controller/gencerts.sh @@ -51,7 +51,7 @@ set -o errexit # Create a server certificate openssl genrsa -out ${TMP_DIR}/serverKey.pem 2048 # Note the CN is the DNS name of the service of the webhook. -openssl req -new -key ${TMP_DIR}/serverKey.pem -out ${TMP_DIR}/server.csr -subj "/CN=vpa-webhook.kube-system.svc" -config ${TMP_DIR}/server.conf -addext "subjectAltName = DNS:vpa-webhook.kube-system.svc" +openssl req -new -key ${TMP_DIR}/serverKey.pem -out ${TMP_DIR}/server.csr -subj "/CN=vpa-webhook.kube-system.svc" -config ${TMP_DIR}/server.conf openssl x509 -req -in ${TMP_DIR}/server.csr -CA ${TMP_DIR}/caCert.pem -CAkey ${TMP_DIR}/caKey.pem -CAcreateserial -out ${TMP_DIR}/serverCert.pem -days 100000 -extensions SAN -extensions v3_req -extfile ${TMP_DIR}/server.conf echo "Uploading certs to the cluster." From 4360d4572bfb7bf7beb8236adec860a96b0e1272 Mon Sep 17 00:00:00 2001 From: Ray Wainman Date: Tue, 26 Sep 2023 19:26:54 +0000 Subject: [PATCH 069/125] Fix vpa-up.sh script by removing duplicate recommender from vpa-process-yamls.sh. Tweak that script so that it can accept recommender-externalmetrics as an argument. --- vertical-pod-autoscaler/hack/vpa-process-yamls.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/vertical-pod-autoscaler/hack/vpa-process-yamls.sh b/vertical-pod-autoscaler/hack/vpa-process-yamls.sh index da853e9d8bed..6233c735e3a2 100755 --- a/vertical-pod-autoscaler/hack/vpa-process-yamls.sh +++ b/vertical-pod-autoscaler/hack/vpa-process-yamls.sh @@ -40,17 +40,16 @@ if [ $# -gt 2 ]; then fi ACTION=$1 -COMPONENTS="vpa-v1-crd-gen vpa-rbac updater-deployment recommender-deployment admission-controller-deployment recommender-externalmetrics-deployment" -TEST_COMPONENTS=(recommender-externalmetrics-deployment) +COMPONENTS="vpa-v1-crd-gen vpa-rbac updater-deployment recommender-deployment admission-controller-deployment" function script_path { # Regular components have deployment yaml files under /deploy/. But some components only have - # test deployment yaml files that are under hack/e2e. If $1 is one of ${TEST_COMPONENTS}, use - # the hack/e2e subdir instead of deploy. - if printf '%s\0' "${TEST_COMPONENTS[@]}" | grep -Fqxz -- $1; then - echo "${SCRIPT_ROOT}/hack/e2e/${1}.yaml" - else + # test deployment yaml files that are under hack/e2e. Check the main deploy directory before + # using the e2e subdirectory. + if test -f "${SCRIPT_ROOT}/deploy/${1}.yaml"; then echo "${SCRIPT_ROOT}/deploy/${1}.yaml" + else + echo "${SCRIPT_ROOT}/hack/e2e/${1}.yaml" fi } From d364e7bc64c46b34525310c3487a1f1c5fc700cc Mon Sep 17 00:00:00 2001 From: Ray Wainman Date: Tue, 26 Sep 2023 19:49:44 +0000 Subject: [PATCH 070/125] Bump default VPA version to 1.0.0 --- vertical-pod-autoscaler/README.md | 1 + .../deploy/admission-controller-deployment.yaml | 2 +- vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml | 2 +- vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml | 2 +- vertical-pod-autoscaler/deploy/recommender-deployment.yaml | 2 +- vertical-pod-autoscaler/deploy/updater-deployment.yaml | 2 +- vertical-pod-autoscaler/hack/vpa-process-yaml.sh | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/vertical-pod-autoscaler/README.md b/vertical-pod-autoscaler/README.md index 9225e2f70f8e..e13134aa6eb5 100644 --- a/vertical-pod-autoscaler/README.md +++ b/vertical-pod-autoscaler/README.md @@ -55,6 +55,7 @@ The current default version is Vertical Pod Autoscaler 0.14.0 | VPA version | Kubernetes version | |-----------------|--------------------| +| 1.0 | 1.25+ | | 0.14 | 1.25+ | | 0.13 | 1.25+ | | 0.12 | 1.25+ | diff --git a/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml b/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml index 29b3dd278e85..2a8537ef4249 100644 --- a/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml @@ -20,7 +20,7 @@ spec: runAsUser: 65534 # nobody containers: - name: admission-controller - image: registry.k8s.io/autoscaling/vpa-admission-controller:0.14.0 + image: registry.k8s.io/autoscaling/vpa-admission-controller:1.0.0 imagePullPolicy: Always env: - name: NAMESPACE diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml index 10bdef97bcd1..5349f2c88349 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment-high.yaml @@ -26,7 +26,7 @@ spec: runAsUser: 65534 # nobody containers: - name: recommender - image: registry.k8s.io/autoscaling/vpa-recommender:0.14.0 + image: registry.k8s.io/autoscaling/vpa-recommender:1.0.0 imagePullPolicy: Always args: - --recommender-name=performance diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml index bb7cbcf90076..01408bc173e8 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment-low.yaml @@ -26,7 +26,7 @@ spec: runAsUser: 65534 # nobody containers: - name: recommender - image: registry.k8s.io/autoscaling/vpa-recommender:0.14.0 + image: registry.k8s.io/autoscaling/vpa-recommender:1.0.0 imagePullPolicy: Always args: - --recommender-name=frugal diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment.yaml index 7714c0626601..6d23ab476d50 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment.yaml @@ -20,7 +20,7 @@ spec: runAsUser: 65534 # nobody containers: - name: recommender - image: registry.k8s.io/autoscaling/vpa-recommender:0.14.0 + image: registry.k8s.io/autoscaling/vpa-recommender:1.0.0 imagePullPolicy: Always resources: limits: diff --git a/vertical-pod-autoscaler/deploy/updater-deployment.yaml b/vertical-pod-autoscaler/deploy/updater-deployment.yaml index eda37a5a9ced..1d826c200dff 100644 --- a/vertical-pod-autoscaler/deploy/updater-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/updater-deployment.yaml @@ -20,7 +20,7 @@ spec: runAsUser: 65534 # nobody containers: - name: updater - image: registry.k8s.io/autoscaling/vpa-updater:0.14.0 + image: registry.k8s.io/autoscaling/vpa-updater:1.0.0 imagePullPolicy: Always env: - name: NAMESPACE diff --git a/vertical-pod-autoscaler/hack/vpa-process-yaml.sh b/vertical-pod-autoscaler/hack/vpa-process-yaml.sh index 328f8aaf3f30..94e7ff132be0 100755 --- a/vertical-pod-autoscaler/hack/vpa-process-yaml.sh +++ b/vertical-pod-autoscaler/hack/vpa-process-yaml.sh @@ -32,7 +32,7 @@ if [ $# -eq 0 ]; then fi DEFAULT_REGISTRY="registry.k8s.io/autoscaling" -DEFAULT_TAG="0.14.0" +DEFAULT_TAG="1.0.0" REGISTRY_TO_APPLY=${REGISTRY-$DEFAULT_REGISTRY} TAG_TO_APPLY=${TAG-$DEFAULT_TAG} From 1bbbbd6036187abb461cbc8247e745c39e3cd71a Mon Sep 17 00:00:00 2001 From: Mahmoud Atwa Date: Wed, 27 Sep 2023 09:00:32 +0000 Subject: [PATCH 071/125] fix typo --- cluster-autoscaler/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index ac57ff8d33fd..680990a07956 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -198,7 +198,7 @@ var ( newPodScaleUpDelay = flag.Duration("new-pod-scale-up-delay", 0*time.Second, "Pods less than this old will not be considered for scale-up. Can be increased for individual pods through annotation 'cluster-autoscaler.kubernetes.io/pod-scale-up-delay'.") ignoreTaintsFlag = multiStringFlag("ignore-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Deprecated, use startup-taints instead)") - startupTaintFlag = multiStringFlag("startup-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Equivalent to ignore-taint)") + startupTaintsFlag = multiStringFlag("startup-taint", "Specifies a taint to ignore in node templates when considering to scale a node group (Equivalent to ignore-taint)") statusTaintsFlag = multiStringFlag("status-taint", "Specifies a taint to ignore in node templates when considering to scale a node group but nodes will not be treated as unready") balancingIgnoreLabelsFlag = multiStringFlag("balancing-ignore-label", "Specifies a label to ignore in addition to the basic and cloud-provider set of labels when comparing if two node groups are similar") balancingLabelsFlag = multiStringFlag("balancing-label", "Specifies a label to use for comparing if two node groups are similar, rather than the built in heuristics. Setting this flag disables all other comparison logic, and cannot be combined with --balancing-ignore-label.") @@ -348,7 +348,7 @@ func createAutoscalingOptions() config.AutoscalingOptions { ExpendablePodsPriorityCutoff: *expendablePodsPriorityCutoff, Regional: *regional, NewPodScaleUpDelay: *newPodScaleUpDelay, - StartupTaints: append(*ignoreTaintsFlag, *startupTaintFlag...), + StartupTaints: append(*ignoreTaintsFlag, *startupTaintsFlag...), StatusTaints: *statusTaintsFlag, BalancingExtraIgnoredLabels: *balancingIgnoreLabelsFlag, BalancingLabels: *balancingLabelsFlag, From 3aff54889e541be21db195e14205a1d8738bfdf7 Mon Sep 17 00:00:00 2001 From: Eric Lin Date: Wed, 27 Sep 2023 13:02:10 +0000 Subject: [PATCH 072/125] CA - Update k/k vendoring to 1.29.0-alpha.1 Signed-off-by: Eric Lin --- cluster-autoscaler/go.mod | 120 +- cluster-autoscaler/go.sum | 144 +- .../mgmt/2022-03-01/compute/CHANGELOG.md | 2 - .../mgmt/2022-03-01/compute/_meta.json | 11 - .../2022-03-01/compute/availabilitysets.go | 652 - .../compute/capacityreservationgroups.go | 596 - .../compute/capacityreservations.go | 493 - .../compute/mgmt/2022-03-01/compute/client.go | 43 - .../compute/cloudserviceoperatingsystems.go | 422 - .../compute/cloudserviceroleinstances.go | 699 - .../2022-03-01/compute/cloudserviceroles.go | 224 - .../mgmt/2022-03-01/compute/cloudservices.go | 1198 - .../compute/cloudservicesupdatedomain.go | 319 - .../2022-03-01/compute/communitygalleries.go | 108 - .../compute/communitygalleryimages.go | 110 - .../compute/communitygalleryimageversions.go | 114 - .../2022-03-01/compute/dedicatedhostgroups.go | 589 - .../mgmt/2022-03-01/compute/dedicatedhosts.go | 575 - .../mgmt/2022-03-01/compute/diskaccesses.go | 1045 - .../2022-03-01/compute/diskencryptionsets.go | 719 - .../2022-03-01/compute/diskrestorepoint.go | 407 - .../compute/mgmt/2022-03-01/compute/disks.go | 779 - .../compute/mgmt/2022-03-01/compute/enums.go | 2263 -- .../mgmt/2022-03-01/compute/galleries.go | 588 - .../2022-03-01/compute/galleryapplications.go | 485 - .../compute/galleryapplicationversions.go | 516 - .../mgmt/2022-03-01/compute/galleryimages.go | 492 - .../compute/galleryimageversions.go | 503 - .../compute/gallerysharingprofile.go | 114 - .../compute/mgmt/2022-03-01/compute/images.go | 583 - .../mgmt/2022-03-01/compute/loganalytics.go | 206 - .../compute/mgmt/2022-03-01/compute/models.go | 23788 ---------------- .../mgmt/2022-03-01/compute/operations.go | 98 - .../compute/proximityplacementgroups.go | 575 - .../mgmt/2022-03-01/compute/resourceskus.go | 153 - .../compute/restorepointcollections.go | 582 - .../mgmt/2022-03-01/compute/restorepoints.go | 302 - .../2022-03-01/compute/sharedgalleries.go | 227 - .../2022-03-01/compute/sharedgalleryimages.go | 233 - .../compute/sharedgalleryimageversions.go | 240 - .../mgmt/2022-03-01/compute/snapshots.go | 778 - .../mgmt/2022-03-01/compute/sshpublickeys.go | 649 - .../compute/mgmt/2022-03-01/compute/usage.go | 155 - .../mgmt/2022-03-01/compute/version.go | 19 - .../compute/virtualmachineextensionimages.go | 270 - .../compute/virtualmachineextensions.go | 442 - .../compute/virtualmachineimages.go | 508 - .../compute/virtualmachineimagesedgezone.go | 445 - .../compute/virtualmachineruncommands.go | 689 - .../2022-03-01/compute/virtualmachines.go | 2205 -- .../virtualmachinescalesetextensions.go | 483 - .../virtualmachinescalesetrollingupgrades.go | 346 - .../compute/virtualmachinescalesets.go | 2162 -- .../virtualmachinescalesetvmextensions.go | 457 - .../virtualmachinescalesetvmruncommands.go | 495 - .../compute/virtualmachinescalesetvms.go | 1430 - .../2022-03-01/compute/virtualmachinesizes.go | 113 - .../distribution/reference/.gitattributes | 1 + .../distribution/reference/.gitignore | 2 + .../distribution/reference/.golangci.yml | 18 + .../distribution/reference/CODE-OF-CONDUCT.md | 5 + .../distribution/reference/CONTRIBUTING.md | 114 + .../distribution/reference/GOVERNANCE.md | 144 + .../reference}/LICENSE | 0 .../distribution/reference/MAINTAINERS | 26 + .../distribution/reference/Makefile | 25 + .../distribution/reference/README.md | 30 + .../distribution/reference/SECURITY.md | 7 + .../reference/distribution-logo.svg | 1 + .../distribution/reference/helpers.go | 2 +- .../distribution/reference/normalize.go | 131 +- .../distribution/reference/reference.go | 27 +- .../distribution/reference/regexp.go | 163 + .../github.com/distribution/reference/sort.go | 75 + .../docker/distribution/digestset/set.go | 247 - .../docker/distribution/reference/regexp.go | 143 - .../github.com/google/cel-go/cel/BUILD.bazel | 8 +- .../github.com/google/cel-go/cel/decls.go | 1051 +- .../github.com/google/cel-go/cel/env.go | 358 +- .../vendor/github.com/google/cel-go/cel/io.go | 46 +- .../github.com/google/cel-go/cel/library.go | 260 +- .../github.com/google/cel-go/cel/macro.go | 11 +- .../github.com/google/cel-go/cel/options.go | 157 +- .../github.com/google/cel-go/cel/program.go | 34 +- .../github.com/google/cel-go/cel/validator.go | 388 + .../google/cel-go/checker/BUILD.bazel | 6 + .../google/cel-go/checker/checker.go | 416 +- .../github.com/google/cel-go/checker/cost.go | 82 +- .../google/cel-go/checker/decls/BUILD.bazel | 1 - .../github.com/google/cel-go/checker/env.go | 264 +- .../google/cel-go/checker/errors.go | 94 +- .../google/cel-go/checker/format.go | 216 + .../google/cel-go/checker/mapping.go | 14 +- .../google/cel-go/checker/options.go | 13 +- .../google/cel-go/checker/printer.go | 3 + .../cel-go/checker/{decls => }/scopes.go | 38 +- .../google/cel-go/checker/standard.go | 481 +- .../github.com/google/cel-go/checker/types.go | 402 +- .../google/cel-go/common/ast/BUILD.bazel | 52 + .../google/cel-go/common/ast/ast.go | 226 + .../google/cel-go/common/ast/expr.go | 709 + .../google/cel-go/common/decls/BUILD.bazel | 39 + .../google/cel-go/common/decls/decls.go | 844 + .../github.com/google/cel-go/common/error.go | 8 +- .../github.com/google/cel-go/common/errors.go | 16 +- .../cel-go/common/functions/BUILD.bazel | 17 + .../cel-go/common/functions/functions.go | 61 + .../github.com/google/cel-go/common/source.go | 3 - .../google/cel-go/common/stdlib/BUILD.bazel | 25 + .../google/cel-go/common/stdlib/standard.go | 661 + .../google/cel-go/common/types/BUILD.bazel | 7 +- .../google/cel-go/common/types/bool.go | 6 - .../google/cel-go/common/types/bytes.go | 7 - .../google/cel-go/common/types/double.go | 10 - .../google/cel-go/common/types/duration.go | 68 +- .../google/cel-go/common/types/err.go | 7 +- .../google/cel-go/common/types/int.go | 11 - .../google/cel-go/common/types/iterator.go | 2 +- .../google/cel-go/common/types/list.go | 90 +- .../google/cel-go/common/types/map.go | 87 +- .../google/cel-go/common/types/null.go | 2 - .../google/cel-go/common/types/object.go | 18 +- .../google/cel-go/common/types/optional.go | 2 +- .../google/cel-go/common/types/pb/type.go | 23 +- .../google/cel-go/common/types/provider.go | 244 +- .../cel-go/common/types/ref/provider.go | 37 +- .../google/cel-go/common/types/string.go | 44 +- .../google/cel-go/common/types/timestamp.go | 10 - .../google/cel-go/common/types/type.go | 102 - .../google/cel-go/common/types/types.go | 806 + .../google/cel-go/common/types/uint.go | 10 - .../google/cel-go/common/types/unknown.go | 290 +- .../google/cel-go/common/types/util.go | 2 +- .../github.com/google/cel-go/ext/BUILD.bazel | 4 +- .../github.com/google/cel-go/ext/README.md | 17 + .../github.com/google/cel-go/ext/bindings.go | 8 +- .../github.com/google/cel-go/ext/encoders.go | 5 - .../github.com/google/cel-go/ext/guards.go | 1 + .../github.com/google/cel-go/ext/lists.go | 94 + .../github.com/google/cel-go/ext/math.go | 33 +- .../github.com/google/cel-go/ext/native.go | 92 +- .../github.com/google/cel-go/ext/protos.go | 12 +- .../github.com/google/cel-go/ext/strings.go | 38 +- .../google/cel-go/interpreter/BUILD.bazel | 8 +- .../google/cel-go/interpreter/activation.go | 2 +- .../cel-go/interpreter/attribute_patterns.go | 42 +- .../google/cel-go/interpreter/attributes.go | 52 +- .../google/cel-go/interpreter/decorators.go | 10 +- .../google/cel-go/interpreter/dispatcher.go | 2 +- .../google/cel-go/interpreter/evalstate.go | 6 +- .../google/cel-go/interpreter/formatting.go | 2 +- .../cel-go/interpreter/functions/BUILD.bazel | 9 +- .../cel-go/interpreter/functions/functions.go | 33 +- .../cel-go/interpreter/functions/standard.go | 270 - .../cel-go/interpreter/interpretable.go | 311 +- .../google/cel-go/interpreter/interpreter.go | 28 +- .../google/cel-go/interpreter/planner.go | 65 +- .../google/cel-go/interpreter/prune.go | 45 +- .../google/cel-go/interpreter/runtimecost.go | 16 +- .../github.com/google/cel-go/parser/errors.go | 17 +- .../github.com/google/cel-go/parser/helper.go | 113 +- .../github.com/google/cel-go/parser/macro.go | 17 +- .../google/cel-go/parser/options.go | 13 + .../github.com/google/cel-go/parser/parser.go | 41 +- .../github.com/gorilla/websocket/.gitignore | 25 + .../github.com/gorilla/websocket/AUTHORS | 9 + .../github.com/gorilla/websocket/LICENSE | 22 + .../github.com/gorilla/websocket/README.md | 39 + .../github.com/gorilla/websocket/client.go | 422 + .../gorilla/websocket/compression.go | 148 + .../github.com/gorilla/websocket/conn.go | 1230 + .../github.com/gorilla/websocket/doc.go | 227 + .../github.com/gorilla/websocket/join.go | 42 + .../github.com/gorilla/websocket/json.go | 60 + .../github.com/gorilla/websocket/mask.go | 55 + .../github.com/gorilla/websocket/mask_safe.go | 16 + .../github.com/gorilla/websocket/prepared.go | 102 + .../github.com/gorilla/websocket/proxy.go | 77 + .../github.com/gorilla/websocket/server.go | 365 + .../gorilla/websocket/tls_handshake.go | 21 + .../gorilla/websocket/tls_handshake_116.go | 21 + .../github.com/gorilla/websocket/util.go | 283 + .../gorilla/websocket/x_net_proxy.go | 473 + .../runc/libcontainer/cgroups/fs2/memory.go | 24 +- .../libcontainer/cgroups/systemd/common.go | 20 +- .../runc/libcontainer/cgroups/systemd/v1.go | 9 + .../runc/libcontainer/container_linux.go | 29 +- .../runc/libcontainer/factory_linux.go | 43 +- .../runc/libcontainer/init_linux.go | 8 +- .../runc/libcontainer/intelrdt/intelrdt.go | 234 +- .../runc/libcontainer/mount_linux.go | 18 + .../runc/libcontainer/process_linux.go | 2 +- .../runc/libcontainer/rootfs_linux.go | 20 +- .../runc/libcontainer/seccomp/config.go | 1 + .../seccomp/patchbpf/enosys_linux.go | 10 + .../runc/libcontainer/user/user.go | 2 +- .../opencontainers/selinux/go-selinux/doc.go | 1 - .../selinux/go-selinux/label/label.go | 22 +- .../selinux/go-selinux/label/label_linux.go | 46 - .../selinux/go-selinux/label/label_stub.go | 1 + .../selinux/go-selinux/rchcon.go | 22 - .../selinux/go-selinux/rchcon_go115.go | 21 - .../selinux/go-selinux/selinux.go | 30 +- .../selinux/go-selinux/selinux_linux.go | 257 +- .../selinux/go-selinux/selinux_stub.go | 45 +- .../selinux/pkg/pwalk/README.md | 48 - .../opencontainers/selinux/pkg/pwalk/pwalk.go | 115 - .../selinux/pkg/pwalkdir/pwalkdir.go | 2 +- .../github.com/vmware/govmomi/find/finder.go | 14 +- .../govmomi/internal/version/version.go | 2 +- .../github.com/vmware/govmomi/list/lister.go | 4 +- .../vmware/govmomi/lookup/client.go | 4 +- .../govmomi/object/host_certificate_info.go | 5 +- .../vmware/govmomi/object/search_index.go | 13 +- .../vmware/govmomi/vim25/soap/client.go | 26 +- .../vmware/govmomi/vim25/soap/error.go | 37 + .../vendor/golang.org/x/net/http2/Dockerfile | 51 - .../vendor/golang.org/x/net/http2/Makefile | 3 - .../vendor/golang.org/x/net/http2/server.go | 8 - .../golang.org/x/net/http2/transport.go | 33 +- .../vendor/golang.org/x/sys/cpu/cpu.go | 5 +- .../vendor/golang.org/x/sys/cpu/cpu_x86.go | 7 + .../vendor/golang.org/x/sys/unix/mkerrors.sh | 1 + .../golang.org/x/sys/unix/syscall_linux.go | 23 + .../golang.org/x/sys/unix/syscall_unix.go | 3 + .../golang.org/x/sys/unix/zerrors_linux.go | 17 + .../golang.org/x/sys/unix/zsyscall_linux.go | 20 + .../golang.org/x/sys/unix/ztypes_linux.go | 15 + .../x/sys/windows/syscall_windows.go | 11 +- .../x/sys/windows/zsyscall_windows.go | 26 +- .../golang.org/x/text/unicode/norm/trie.go | 2 +- .../protobuf/encoding/protojson/encode.go | 14 +- .../protobuf/encoding/prototext/encode.go | 14 +- .../protobuf/internal/encoding/json/encode.go | 10 +- .../protobuf/internal/encoding/text/encode.go | 10 +- .../protobuf/internal/genid/descriptor_gen.go | 48 + .../protobuf/internal/genid/type_gen.go | 6 + .../protobuf/internal/order/order.go | 2 +- .../protobuf/internal/version/version.go | 2 +- .../google.golang.org/protobuf/proto/size.go | 10 +- .../reflect/protoreflect/source_gen.go | 27 + .../types/descriptorpb/descriptor.pb.go | 1011 +- .../protobuf/types/dynamicpb/types.go | 177 + .../protobuf/types/known/anypb/any.pb.go | 70 +- .../types/known/structpb/struct.pb.go | 2 +- .../types/known/timestamppb/timestamp.pb.go | 2 +- .../k8s.io/api/batch/v1/generated.proto | 1 + .../vendor/k8s.io/api/batch/v1/types.go | 14 + .../vendor/k8s.io/api/core/v1/generated.pb.go | 2400 +- .../vendor/k8s.io/api/core/v1/generated.proto | 26 +- .../vendor/k8s.io/api/core/v1/types.go | 46 +- .../core/v1/types_swagger_doc_generated.go | 11 + .../api/core/v1/zz_generated.deepcopy.go | 35 + .../k8s.io/api/flowcontrol/v1alpha1/doc.go | 25 - .../api/flowcontrol/v1alpha1/generated.pb.go | 5664 ---- .../api/flowcontrol/v1alpha1/generated.proto | 511 - .../api/flowcontrol/v1alpha1/register.go | 58 - .../k8s.io/api/flowcontrol/v1alpha1/types.go | 621 - .../v1alpha1/types_swagger_doc_generated.go | 274 - .../v1alpha1/zz_generated.deepcopy.go | 583 - .../zz_generated.prerelease-lifecycle.go | 122 - .../vendor/k8s.io/api/policy/v1/doc.go | 2 +- .../vendor/k8s.io/api/policy/v1beta1/doc.go | 2 +- .../k8s.io/api/policy/v1beta1/generated.pb.go | 4950 +--- .../k8s.io/api/policy/v1beta1/generated.proto | 277 - .../k8s.io/api/policy/v1beta1/register.go | 2 - .../vendor/k8s.io/api/policy/v1beta1/types.go | 371 - .../v1beta1/types_swagger_doc_generated.go | 160 - .../policy/v1beta1/zz_generated.deepcopy.go | 367 - .../zz_generated.prerelease-lifecycle.go | 36 - .../api/resource/v1alpha2/generated.proto | 4 +- .../k8s.io/api/resource/v1alpha2/types.go | 4 +- .../pkg/apis/meta/v1/unstructured/helpers.go | 2 +- .../k8s.io/apimachinery/pkg/runtime/helper.go | 23 + .../runtime/serializer/streaming/streaming.go | 20 - .../pkg/util/httpstream/wsstream/conn.go | 35 +- .../pkg/util/httpstream/wsstream/doc.go | 52 +- .../apimachinery/pkg/util/intstr/intstr.go | 6 +- .../pkg/util/remotecommand/constants.go | 14 + .../apimachinery/pkg/util/version/version.go | 42 + .../k8s.io/apiserver/pkg/admission/config.go | 5 +- .../plugin/webhook/config/kubeconfig.go | 3 +- .../plugin/webhook/mutating/dispatcher.go | 22 +- .../plugin/webhook/validating/dispatcher.go | 27 +- .../k8s.io/apiserver/pkg/admission/plugins.go | 3 +- .../apiserver/pkg/apis/apiserver/register.go | 2 + .../apiserver/pkg/apis/apiserver/types.go | 158 + .../pkg/apis/apiserver/v1alpha1/defaults.go} | 27 +- .../pkg/apis/apiserver/v1alpha1/register.go | 4 +- .../pkg/apis/apiserver/v1alpha1/types.go | 228 + .../v1alpha1/zz_generated.conversion.go | 384 + .../v1alpha1/zz_generated.deepcopy.go | 246 + .../v1alpha1/zz_generated.defaults.go | 10 + .../apis/apiserver/zz_generated.deepcopy.go | 246 + .../pkg/authentication/request/x509/x509.go | 27 + .../apiserver/pkg/cel/environment/base.go | 19 +- .../k8s.io/apiserver/pkg/cel/lazy/lazy.go | 2 +- .../k8s.io/apiserver/pkg/cel/library/authz.go | 6 +- .../k8s.io/apiserver/pkg/cel/library/cost.go | 63 +- .../k8s.io/apiserver/pkg/cel/library/lists.go | 4 + .../apiserver/pkg/cel/library/quantity.go | 5 + .../k8s.io/apiserver/pkg/cel/library/regex.go | 4 + .../k8s.io/apiserver/pkg/cel/library/test.go | 4 + .../k8s.io/apiserver/pkg/cel/library/urls.go | 4 + .../endpoints/discovery/aggregated/handler.go | 2 +- .../pkg/endpoints/filters/impersonation.go | 20 +- .../pkg/endpoints/handlers/helpers.go | 90 + .../pkg/endpoints/handlers/response.go | 143 +- .../pkg/endpoints/handlers/trace_util.go | 5 + .../apiserver/pkg/endpoints/handlers/watch.go | 87 +- .../apiserver/pkg/features/kube_features.go | 17 +- .../generic/registry/storage_factory.go | 2 +- .../pkg/registry/generic/storage_decorator.go | 6 +- .../k8s.io/apiserver/pkg/server/config.go | 8 +- .../dynamic_cafile_content.go | 4 +- .../dynamic_serving_content.go | 6 +- .../pkg/server/egressselector/config.go | 4 +- .../server/egressselector/egress_selector.go | 4 +- .../apiserver/pkg/server/httplog/httplog.go | 1 - .../server/options/encryptionconfig/config.go | 47 +- .../encryptionconfig/controller/controller.go | 15 +- .../encryptionconfig/metrics/metrics.go | 53 +- .../apiserver/pkg/server/options/etcd.go | 12 +- .../apiserver/pkg/server/options/serving.go | 34 +- .../pkg/server/storage/storage_factory.go | 16 +- .../pkg/storage/cacher/cache_watcher.go | 11 +- .../apiserver/pkg/storage/cacher/cacher.go | 46 +- .../apiserver/pkg/storage/etcd3/event.go | 11 + .../pkg/storage/etcd3/metrics/metrics.go | 19 +- .../apiserver/pkg/storage/etcd3/store.go | 160 +- .../apiserver/pkg/storage/etcd3/watcher.go | 232 +- .../apiserver/pkg/storage/interfaces.go | 13 + .../storage/storagebackend/factory/etcd3.go | 8 +- .../storage/storagebackend/factory/factory.go | 4 +- .../k8s.io/apiserver/pkg/storage/util.go | 62 + .../value/encrypt/envelope/kmsv2/cache.go | 14 +- .../value/encrypt/envelope/kmsv2/envelope.go | 20 +- .../value/encrypt/envelope/metrics/metrics.go | 76 +- .../pkg/util/flowcontrol/apf_controller.go | 8 +- .../fairqueuing/promise/promise.go | 15 +- .../fairqueuing/queueset/queueset.go | 10 +- .../pkg/util/flowcontrol/metrics/metrics.go | 16 + .../request/list_work_estimator.go | 8 +- .../pkg/util/webhook/authentication.go | 4 +- .../core/v1/loadbalanceringress.go | 13 + .../core/v1/persistentvolumeclaimspec.go | 18 +- .../core/v1/volumeresourcerequirements.go | 52 + .../exemptprioritylevelconfiguration.go | 48 - .../v1alpha1/flowdistinguishermethod.go | 43 - .../flowcontrol/v1alpha1/flowschema.go | 256 - .../v1alpha1/flowschemacondition.go | 80 - .../flowcontrol/v1alpha1/flowschemaspec.go | 71 - .../flowcontrol/v1alpha1/flowschemastatus.go | 44 - .../flowcontrol/v1alpha1/groupsubject.go | 39 - .../limitedprioritylevelconfiguration.go | 66 - .../flowcontrol/v1alpha1/limitresponse.go | 52 - .../v1alpha1/nonresourcepolicyrule.go | 52 - .../v1alpha1/policyruleswithsubjects.go | 72 - .../v1alpha1/prioritylevelconfiguration.go | 256 - .../prioritylevelconfigurationcondition.go | 80 - .../prioritylevelconfigurationreference.go | 39 - .../prioritylevelconfigurationspec.go | 61 - .../prioritylevelconfigurationstatus.go | 44 - .../v1alpha1/queuingconfiguration.go | 57 - .../v1alpha1/resourcepolicyrule.go | 83 - .../v1alpha1/serviceaccountsubject.go | 48 - .../flowcontrol/v1alpha1/subject.go | 70 - .../flowcontrol/v1alpha1/usersubject.go | 39 - .../applyconfigurations/internal/internal.go | 596 +- .../meta/v1/unstructured.go | 2 +- .../policy/v1beta1/allowedcsidriver.go | 39 - .../policy/v1beta1/allowedflexvolume.go | 39 - .../policy/v1beta1/allowedhostpath.go | 48 - .../policy/v1beta1/fsgroupstrategyoptions.go | 57 - .../policy/v1beta1/hostportrange.go | 48 - .../policy/v1beta1/idrange.go | 48 - .../policy/v1beta1/podsecuritypolicy.go | 247 - .../policy/v1beta1/podsecuritypolicyspec.go | 285 - .../v1beta1/runasgroupstrategyoptions.go | 57 - .../v1beta1/runasuserstrategyoptions.go | 57 - .../v1beta1/runtimeclassstrategyoptions.go | 50 - .../policy/v1beta1/selinuxstrategyoptions.go | 53 - .../supplementalgroupsstrategyoptions.go | 57 - .../client-go/discovery/discovery_client.go | 68 +- .../k8s.io/client-go/informers/factory.go | 10 + .../informers/flowcontrol/interface.go | 8 - .../flowcontrol/v1alpha1/flowschema.go | 89 - .../flowcontrol/v1alpha1/interface.go | 52 - .../v1alpha1/prioritylevelconfiguration.go | 89 - .../k8s.io/client-go/informers/generic.go | 9 - .../informers/policy/v1beta1/interface.go | 7 - .../policy/v1beta1/podsecuritypolicy.go | 89 - .../k8s.io/client-go/kubernetes/clientset.go | 13 - .../kubernetes/fake/clientset_generated.go | 7 - .../client-go/kubernetes/fake/register.go | 2 - .../client-go/kubernetes/scheme/register.go | 2 - .../typed/flowcontrol/v1alpha1/doc.go | 20 - .../typed/flowcontrol/v1alpha1/fake/doc.go | 20 - .../v1alpha1/fake/fake_flowcontrol_client.go | 44 - .../v1alpha1/fake/fake_flowschema.go | 178 - .../fake/fake_prioritylevelconfiguration.go | 178 - .../v1alpha1/flowcontrol_client.go | 112 - .../typed/flowcontrol/v1alpha1/flowschema.go | 243 - .../v1alpha1/generated_expansion.go | 23 - .../v1alpha1/prioritylevelconfiguration.go | 243 - .../v1beta1/fake/fake_podsecuritypolicy.go | 145 - .../policy/v1beta1/fake/fake_policy_client.go | 4 - .../policy/v1beta1/generated_expansion.go | 2 - .../typed/policy/v1beta1/podsecuritypolicy.go | 197 - .../typed/policy/v1beta1/policy_client.go | 5 - .../flowcontrol/v1alpha1/flowschema.go | 68 - .../v1alpha1/prioritylevelconfiguration.go | 68 - .../policy/v1beta1/expansion_generated.go | 4 - .../policy/v1beta1/podsecuritypolicy.go | 68 - .../k8s.io/client-go/tools/cache/reflector.go | 6 +- .../client-go/tools/cache/shared_informer.go | 2 - .../tools/clientcmd/merged_client_builder.go | 4 +- .../tools/remotecommand/remotecommand.go | 124 - .../client-go/tools/remotecommand/spdy.go | 150 + .../client-go/tools/remotecommand/v5.go | 35 + .../tools/remotecommand/websocket.go | 485 + .../k8s.io/client-go/transport/transport.go | 55 + .../transport/websocket/roundtripper.go | 166 + .../k8s.io/client-go/util/workqueue/queue.go | 55 +- .../k8s.io/cloud-provider/options/options.go | 2 +- .../k8s.io/cloud-provider/options/webhook.go | 2 +- .../cloud-provider/service/helpers/helper.go | 3 + .../cmd/informer-gen/generators/factory.go | 12 +- .../cmd/informer-gen/generators/types.go | 1 + .../k8s.io/component-base/metrics/buckets.go | 10 + .../metrics/prometheus/slis/metrics.go | 4 +- .../apimachinery/lease/controller.go | 31 +- .../pkg/features/kube_features.go | 3 +- .../vendor/k8s.io/gengo/args/args.go | 19 - .../deepcopy-gen/generators/deepcopy.go | 14 +- .../defaulter-gen/generators/defaulter.go | 267 +- .../import-boss/generators/import_restrict.go | 26 +- .../k8s.io/gengo/generator/import_tracker.go | 23 +- .../k8s.io/gengo/namer/import_tracker.go | 35 +- .../vendor/k8s.io/gengo/namer/namer.go | 1 + .../k8s.io/kube-openapi/pkg/cached/cache.go | 268 +- .../kube-openapi/pkg/generators/openapi.go | 58 +- .../kube-openapi/pkg/handler/handler.go | 55 +- .../kube-openapi/pkg/handler3/handler.go | 77 +- .../kube-scheduler/config/v1beta3/doc.go | 21 - .../kube-scheduler/config/v1beta3/register.go | 50 - .../kube-scheduler/config/v1beta3/types.go | 377 - .../config/v1beta3/types_pluginargs.go | 229 - .../config/v1beta3/zz_generated.deepcopy.go | 604 - .../kubelet => kubelet/pkg}/types/labels.go | 0 .../kubernetes/cmd/kubelet/app/server.go | 5 + .../k8s.io/kubernetes/pkg/api/service/util.go | 7 + .../kubernetes/pkg/api/v1/service/util.go | 12 +- .../k8s.io/kubernetes/pkg/apis/batch/types.go | 1 + .../k8s.io/kubernetes/pkg/apis/core/types.go | 41 +- .../kubernetes/pkg/apis/core/v1/defaults.go | 20 +- .../apis/core/v1/zz_generated.conversion.go | 38 +- .../pkg/apis/core/validation/validation.go | 89 +- .../pkg/apis/core/zz_generated.deepcopy.go | 35 + .../kubernetes/pkg/apis/policy/register.go | 2 - .../kubernetes/pkg/apis/policy/types.go | 355 - .../pkg/apis/policy/validation/validation.go | 489 - .../pkg/apis/policy/zz_generated.deepcopy.go | 362 - .../pkg/controller/daemon/update.go | 73 +- .../kubernetes/pkg/features/kube_features.go | 31 +- .../pkg/kubelet/cm/dra/plugin/client.go | 73 +- .../pkg/kubelet/cm/dra/plugin/plugin.go | 44 +- .../kubelet/cm/dra/plugin/plugins_store.go | 42 + .../pkg/kubelet/images/image_gc_manager.go | 12 +- .../k8s.io/kubernetes/pkg/kubelet/kubelet.go | 57 +- .../pkg/kubelet/kubelet_node_status.go | 10 + .../kubernetes/pkg/kubelet/kubelet_pods.go | 4 +- .../kuberuntime/kuberuntime_container.go | 64 +- .../kubelet/kuberuntime/kuberuntime_image.go | 1 + .../kuberuntime/kuberuntime_manager.go | 119 +- .../kuberuntime/kuberuntime_sandbox.go | 2 +- .../pkg/kubelet/kuberuntime/labels.go | 2 +- .../metrics/collectors/resource_metrics.go | 23 +- .../kubernetes/pkg/kubelet/metrics/metrics.go | 55 + .../nodeshutdown/systemd/inhibit_linux.go | 2 +- .../operationexecutor/operation_executor.go | 2 +- .../k8s.io/kubernetes/pkg/kubelet/runonce.go | 2 +- .../kubernetes/pkg/kubelet/server/server.go | 7 +- .../kubelet/stats/cadvisor_stats_provider.go | 2 +- .../pkg/kubelet/stats/cri_stats_provider.go | 2 +- .../pkg/kubelet/status/status_manager.go | 2 +- .../util/manager/cache_based_manager.go | 30 +- .../util/node_startup_latency_tracker.go | 103 + .../reconciler/reconstruct_common.go | 68 +- .../kubernetes/pkg/kubemark/hollow_kubelet.go | 37 +- .../kubernetes/pkg/proxy/conntrack/cleanup.go | 4 +- .../k8s.io/kubernetes/pkg/proxy/endpoints.go | 29 +- .../kubernetes/pkg/proxy/ipvs/proxier.go | 10 +- .../k8s.io/kubernetes/pkg/proxy/node.go | 4 +- .../k8s.io/kubernetes/pkg/proxy/service.go | 50 +- .../k8s.io/kubernetes/pkg/proxy/types.go | 6 +- .../k8s.io/kubernetes/pkg/proxy/util/utils.go | 49 +- .../scheduler/apis/config/scheme/scheme.go | 3 - .../pkg/scheduler/apis/config/types.go | 4 - .../apis/config/v1/default_plugins.go | 16 +- .../pkg/scheduler/apis/config/v1/defaults.go | 24 +- .../apis/config/v1beta3/conversion.go | 118 - .../apis/config/v1beta3/default_plugins.go | 144 - .../scheduler/apis/config/v1beta3/defaults.go | 242 - .../pkg/scheduler/apis/config/v1beta3/doc.go | 24 - .../scheduler/apis/config/v1beta3/register.go | 42 - .../config/v1beta3/zz_generated.conversion.go | 936 - .../config/v1beta3/zz_generated.deepcopy.go | 22 - .../config/v1beta3/zz_generated.defaults.go | 73 - .../apis/config/validation/validation.go | 7 +- .../kubernetes/pkg/scheduler/eventhandlers.go | 13 +- .../plugins/defaultbinder/default_binder.go | 2 +- .../defaultpreemption/default_preemption.go | 7 +- .../dynamicresources/dynamicresources.go | 450 +- .../plugins/imagelocality/image_locality.go | 2 +- .../plugins/interpodaffinity/plugin.go | 3 +- .../framework/plugins/names/names.go | 1 - .../plugins/nodeaffinity/node_affinity.go | 2 +- .../framework/plugins/nodename/node_name.go | 2 +- .../framework/plugins/nodeports/node_ports.go | 2 +- .../noderesources/balanced_allocation.go | 2 +- .../framework/plugins/noderesources/fit.go | 2 +- .../nodeunschedulable/node_unschedulable.go | 37 +- .../framework/plugins/nodevolumelimits/csi.go | 54 +- .../plugins/nodevolumelimits/non_csi.go | 50 +- .../plugins/podtopologyspread/plugin.go | 3 +- .../plugins/queuesort/priority_sort.go | 3 +- .../scheduler/framework/plugins/registry.go | 2 - .../schedulinggates/scheduling_gates.go | 2 +- .../plugins/selectorspread/selector_spread.go | 234 - .../tainttoleration/taint_toleration.go | 2 +- .../framework/plugins/volumebinding/binder.go | 2 +- .../plugins/volumebinding/test_utils.go | 6 +- .../plugins/volumebinding/volume_binding.go | 2 +- .../volumerestrictions/volume_restrictions.go | 2 +- .../plugins/volumezone/volume_zone.go | 16 +- .../framework/preemption/preemption.go | 2 +- .../scheduler/framework/runtime/framework.go | 10 +- .../scheduler/framework/runtime/registry.go | 9 +- .../pkg/scheduler/framework/types.go | 114 +- .../internal/queue/scheduling_queue.go | 182 +- .../pkg/scheduler/metrics/metrics.go | 18 +- .../kubernetes/pkg/scheduler/schedule_one.go | 18 + .../kubernetes/pkg/scheduler/scheduler.go | 18 +- .../kubernetes/pkg/scheduler/util/utils.go | 3 +- .../kubernetes/pkg/util/parsers/parsers.go | 2 +- .../kubernetes/pkg/volume/csi/csi_attacher.go | 8 +- .../kubernetes/pkg/volume/csi/csi_block.go | 16 +- .../kubernetes/pkg/volume/csi/csi_metrics.go | 5 +- .../kubernetes/pkg/volume/csi/csi_mounter.go | 6 +- .../kubernetes/pkg/volume/csi/csi_plugin.go | 45 +- .../kubernetes/pkg/volume/csi/expander.go | 4 +- .../k8s.io/kubernetes/pkg/volume/plugins.go | 2 +- .../volume/util/subpath/subpath_windows.go | 12 +- .../k8s.io/kubernetes/pkg/volume/util/util.go | 12 +- .../k8s.io/kubernetes/test/utils/runners.go | 2 +- .../k8s.io/mount-utils/mount_windows.go | 24 +- .../vendor/k8s.io/utils/pointer/pointer.go | 283 +- .../vendor/k8s.io/utils/ptr/OWNERS | 10 + .../vendor/k8s.io/utils/ptr/README.md | 3 + .../vendor/k8s.io/utils/ptr/ptr.go | 73 + cluster-autoscaler/vendor/modules.txt | 163 +- .../konnectivity-client/pkg/client/client.go | 56 +- .../konnectivity-client/pkg/client/conn.go | 62 +- .../v4/merge/conflict.go | 2 +- .../structured-merge-diff/v4/merge/update.go | 51 +- .../v4/schema/elements.go | 3 +- .../v4/schema/schemaschema.go | 2 +- .../structured-merge-diff/v4/typed/merge.go | 11 +- .../structured-merge-diff/v4/typed/typed.go | 7 +- .../v4/typed/validate.go | 6 + .../v4/value/mapreflect.go | 2 +- .../v4/value/mapunstructured.go | 8 +- .../v4/value/reflectcache.go | 4 +- 574 files changed, 21007 insertions(+), 84390 deletions(-) delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/CHANGELOG.md delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/_meta.json delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/availabilitysets.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservationgroups.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservations.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/client.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceoperatingsystems.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroleinstances.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroles.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservices.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservicesupdatedomain.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleries.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimages.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimageversions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhostgroups.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhosts.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskaccesses.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskencryptionsets.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskrestorepoint.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/disks.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/enums.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleries.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplications.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplicationversions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimages.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimageversions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/gallerysharingprofile.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/images.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/loganalytics.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/models.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/operations.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/proximityplacementgroups.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/resourceskus.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepointcollections.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepoints.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleries.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimages.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimageversions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/snapshots.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sshpublickeys.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/usage.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/version.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensionimages.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimages.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimagesedgezone.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineruncommands.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachines.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetextensions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetrollingupgrades.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesets.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmextensions.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmruncommands.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvms.go delete mode 100644 cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinesizes.go create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/.gitattributes create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/.golangci.yml create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/CONTRIBUTING.md create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/GOVERNANCE.md rename cluster-autoscaler/vendor/github.com/{docker/distribution => distribution/reference}/LICENSE (100%) create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/MAINTAINERS create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/Makefile create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/README.md create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/SECURITY.md create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/distribution-logo.svg rename cluster-autoscaler/vendor/github.com/{docker => }/distribution/reference/helpers.go (94%) rename cluster-autoscaler/vendor/github.com/{docker => }/distribution/reference/normalize.go (52%) rename cluster-autoscaler/vendor/github.com/{docker => }/distribution/reference/reference.go (93%) create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/regexp.go create mode 100644 cluster-autoscaler/vendor/github.com/distribution/reference/sort.go delete mode 100644 cluster-autoscaler/vendor/github.com/docker/distribution/digestset/set.go delete mode 100644 cluster-autoscaler/vendor/github.com/docker/distribution/reference/regexp.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/cel/validator.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/checker/format.go rename cluster-autoscaler/vendor/github.com/google/cel-go/checker/{decls => }/scopes.go (81%) create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/BUILD.bazel create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/ast.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/expr.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/BUILD.bazel create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/decls.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/BUILD.bazel create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/functions.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/standard.go delete mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/types/type.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/common/types/types.go create mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/ext/lists.go delete mode 100644 cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/standard.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/.gitignore create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/AUTHORS create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/LICENSE create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/README.md create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/client.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/compression.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/conn.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/doc.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/join.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/json.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/mask.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/mask_safe.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/prepared.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/proxy.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/server.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake_116.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/util.go create mode 100644 cluster-autoscaler/vendor/github.com/gorilla/websocket/x_net_proxy.go delete mode 100644 cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go delete mode 100644 cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go delete mode 100644 cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md delete mode 100644 cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go delete mode 100644 cluster-autoscaler/vendor/golang.org/x/net/http2/Dockerfile delete mode 100644 cluster-autoscaler/vendor/golang.org/x/net/http2/Makefile create mode 100644 cluster-autoscaler/vendor/google.golang.org/protobuf/types/dynamicpb/types.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go rename cluster-autoscaler/vendor/k8s.io/{client-go/listers/flowcontrol/v1alpha1/expansion_generated.go => apiserver/pkg/apis/apiserver/v1alpha1/defaults.go} (55%) create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/volumeresourcerequirements.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/exemptprioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowdistinguishermethod.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschema.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemacondition.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemaspec.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemastatus.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/groupsubject.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitedprioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitresponse.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/nonresourcepolicyrule.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/policyruleswithsubjects.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationcondition.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationreference.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationspec.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationstatus.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/queuingconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/resourcepolicyrule.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/serviceaccountsubject.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/subject.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/usersubject.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedcsidriver.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedflexvolume.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedhostpath.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/fsgroupstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/hostportrange.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/idrange.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicyspec.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasgroupstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasuserstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runtimeclassstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/selinuxstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/supplementalgroupsstrategyoptions.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/doc.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowcontrol_client.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowschema.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_prioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/spdy.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/v5.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/websocket.go create mode 100644 cluster-autoscaler/vendor/k8s.io/client-go/transport/websocket/roundtripper.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/doc.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/register.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/zz_generated.deepcopy.go rename cluster-autoscaler/vendor/k8s.io/{kubernetes/pkg/kubelet => kubelet/pkg}/types/labels.go (100%) create mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/node_startup_latency_tracker.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/conversion.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/default_plugins.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/defaults.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/doc.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/register.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go delete mode 100644 cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go create mode 100644 cluster-autoscaler/vendor/k8s.io/utils/ptr/OWNERS create mode 100644 cluster-autoscaler/vendor/k8s.io/utils/ptr/README.md create mode 100644 cluster-autoscaler/vendor/k8s.io/utils/ptr/ptr.go diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index 2059823dd270..fe346fb0a88d 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -30,31 +30,31 @@ require ( github.com/satori/go.uuid v1.2.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.4 - golang.org/x/crypto v0.12.0 - golang.org/x/net v0.13.0 + golang.org/x/crypto v0.13.0 + golang.org/x/net v0.15.0 golang.org/x/oauth2 v0.8.0 - golang.org/x/sys v0.11.0 + golang.org/x/sys v0.12.0 google.golang.org/api v0.114.0 google.golang.org/grpc v1.54.0 - google.golang.org/protobuf v1.30.0 + google.golang.org/protobuf v1.31.0 gopkg.in/gcfg.v1 v1.2.3 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.28.0 - k8s.io/apimachinery v0.28.0 - k8s.io/apiserver v0.28.0 - k8s.io/client-go v0.28.0 - k8s.io/cloud-provider v0.28.0 + k8s.io/api v0.29.0-alpha.1 + k8s.io/apimachinery v0.29.0-alpha.1 + k8s.io/apiserver v0.29.0-alpha.1 + k8s.io/client-go v0.29.0-alpha.1 + k8s.io/cloud-provider v0.29.0-alpha.1 k8s.io/cloud-provider-aws v1.27.0 - k8s.io/code-generator v0.28.0 - k8s.io/component-base v0.28.0 - k8s.io/component-helpers v0.28.0 + k8s.io/code-generator v0.29.0-alpha.1 + k8s.io/component-base v0.29.0-alpha.1 + k8s.io/component-helpers v0.29.0-alpha.1 k8s.io/klog/v2 v2.100.1 - k8s.io/kubelet v0.28.0 - k8s.io/kubernetes v1.28.0 + k8s.io/kubelet v0.29.0-alpha.1 + k8s.io/kubernetes v1.29.0-alpha.1 k8s.io/legacy-cloud-providers v0.0.0 - k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 + k8s.io/utils v0.0.0-20230726121419-3b25d923346b sigs.k8s.io/cloud-provider-azure v1.28.0 - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 + sigs.k8s.io/structured-merge-diff/v4 v4.3.0 sigs.k8s.io/yaml v1.3.0 ) @@ -88,6 +88,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/distribution/reference v0.5.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.10.2 // indirect @@ -106,12 +107,13 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/cadvisor v0.47.3 // indirect - github.com/google/cel-go v0.16.0 // indirect + github.com/google/cel-go v0.17.6 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 // indirect github.com/imdario/mergo v0.3.15 // indirect @@ -134,9 +136,9 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/runc v1.1.7 // indirect + github.com/opencontainers/runc v1.1.9 // indirect github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78 // indirect - github.com/opencontainers/selinux v1.10.0 // indirect + github.com/opencontainers/selinux v1.11.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.44.0 // indirect @@ -150,7 +152,7 @@ require ( github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/vishvananda/netlink v1.1.0 // indirect github.com/vishvananda/netns v0.0.4 // indirect - github.com/vmware/govmomi v0.30.0 // indirect + github.com/vmware/govmomi v0.30.6 // indirect go.etcd.io/etcd/api/v3 v3.5.9 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect go.etcd.io/etcd/client/v3 v3.5.9 // indirect @@ -172,8 +174,8 @@ require ( golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/term v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -185,17 +187,17 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.0.0 // indirect - k8s.io/controller-manager v0.28.0 // indirect - k8s.io/cri-api v0.28.0 // indirect + k8s.io/controller-manager v0.29.0-alpha.1 // indirect + k8s.io/cri-api v0.29.0-alpha.1 // indirect k8s.io/csi-translation-lib v0.27.0 // indirect k8s.io/dynamic-resource-allocation v0.0.0 // indirect - k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect - k8s.io/kms v0.28.0 // indirect - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect + k8s.io/kms v0.29.0-alpha.1 // indirect + k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f // indirect k8s.io/kube-scheduler v0.0.0 // indirect k8s.io/kubectl v0.0.0 // indirect k8s.io/mount-utils v0.26.0-alpha.0 // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 // indirect + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect ) @@ -205,64 +207,62 @@ replace github.com/digitalocean/godo => github.com/digitalocean/godo v1.27.0 replace github.com/rancher/go-rancher => github.com/rancher/go-rancher v0.1.0 -replace k8s.io/api => k8s.io/api v0.28.0 +replace k8s.io/api => k8s.io/api v0.29.0-alpha.1 -replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0 +replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.29.0-alpha.1 -replace k8s.io/apimachinery => k8s.io/apimachinery v0.28.0 +replace k8s.io/apimachinery => k8s.io/apimachinery v0.29.0-alpha.1 -replace k8s.io/apiserver => k8s.io/apiserver v0.28.0 +replace k8s.io/apiserver => k8s.io/apiserver v0.29.0-alpha.1 -replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0 +replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.29.0-alpha.1 -replace k8s.io/client-go => k8s.io/client-go v0.28.0 +replace k8s.io/client-go => k8s.io/client-go v0.29.0-alpha.1 -replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0 +replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.29.0-alpha.1 -replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0 +replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.29.0-alpha.1 -replace k8s.io/code-generator => k8s.io/code-generator v0.28.0 +replace k8s.io/code-generator => k8s.io/code-generator v0.29.0-alpha.1 -replace k8s.io/component-base => k8s.io/component-base v0.28.0 +replace k8s.io/component-base => k8s.io/component-base v0.29.0-alpha.1 -replace k8s.io/component-helpers => k8s.io/component-helpers v0.28.0 +replace k8s.io/component-helpers => k8s.io/component-helpers v0.29.0-alpha.1 -replace k8s.io/controller-manager => k8s.io/controller-manager v0.28.0 +replace k8s.io/controller-manager => k8s.io/controller-manager v0.29.0-alpha.1 -replace k8s.io/cri-api => k8s.io/cri-api v0.28.0 +replace k8s.io/cri-api => k8s.io/cri-api v0.29.0-alpha.1 -replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0 +replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.29.0-alpha.1 -replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0 +replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.29.0-alpha.1 -replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0 +replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.29.0-alpha.1 -replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0 +replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.29.0-alpha.1 -replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0 +replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.29.0-alpha.1 -replace k8s.io/kubectl => k8s.io/kubectl v0.28.0 +replace k8s.io/kubectl => k8s.io/kubectl v0.29.0-alpha.1 -replace k8s.io/kubelet => k8s.io/kubelet v0.28.0 +replace k8s.io/kubelet => k8s.io/kubelet v0.29.0-alpha.1 -replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0 +replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.29.0-alpha.1 -replace k8s.io/metrics => k8s.io/metrics v0.28.0 +replace k8s.io/metrics => k8s.io/metrics v0.29.0-alpha.1 -replace k8s.io/mount-utils => k8s.io/mount-utils v0.28.0 +replace k8s.io/mount-utils => k8s.io/mount-utils v0.29.0-alpha.1 -replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0 +replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.29.0-alpha.1 -replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0 +replace k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.29.0-alpha.1 -replace k8s.io/sample-controller => k8s.io/sample-controller v0.28.0 +replace k8s.io/sample-controller => k8s.io/sample-controller v0.29.0-alpha.1 -replace k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0 +replace k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.29.0-alpha.1 -replace k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0 +replace k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.29.0-alpha.1 -replace k8s.io/kms => k8s.io/kms v0.28.0 +replace k8s.io/kms => k8s.io/kms v0.29.0-alpha.1 -replace k8s.io/noderesourcetopology-api => k8s.io/noderesourcetopology-api v0.27.0 - -replace k8s.io/endpointslice => k8s.io/endpointslice v0.28.0 +replace k8s.io/endpointslice => k8s.io/endpointslice v0.29.0-alpha.1 diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 0a84af857efe..2081c8502e1c 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -205,6 +205,8 @@ github.com/digitalocean/godo v1.27.0/go.mod h1:iJnN9rVu6K5LioLxLimlq0uRI+y/eAQjR github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= @@ -331,8 +333,8 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/cadvisor v0.47.3 h1:5XKTHBduWlBjmgw07uwEiC+Xa/FRd0MZI37oqlTagO0= github.com/google/cadvisor v0.47.3/go.mod h1:iJdTjcjyKHjLCf7OSTzwP5GxdfrkPusw2x5bwGvuLUw= -github.com/google/cel-go v0.16.0 h1:DG9YQ8nFCFXAs/FDDwBxmL1tpKNrdlGUM9U3537bX/Y= -github.com/google/cel-go v0.16.0/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/cel-go v0.17.6 h1:QDvHTIJunIsbgN8yVukx0HGnsqVLSY6xGqo+17IjIyM= +github.com/google/cel-go v0.17.6/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -388,8 +390,9 @@ github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0 github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= @@ -496,15 +499,16 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v1.1.4/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runc v1.1.7 h1:y2EZDS8sNng4Ksf0GUYNhKbTShZJPJg1FiXJNH/uoCk= -github.com/opencontainers/runc v1.1.7/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= +github.com/opencontainers/runc v1.1.9 h1:XR0VIHTGce5eWPkaPesqTBrhW2yAcaraWfsEalNwQLM= +github.com/opencontainers/runc v1.1.9/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78 h1:R5M2qXZiK/mWPMT4VldCOiSL9HIAMuxQZWdG0CSM5+4= github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0 h1:rAiKF8hTcgLI3w0DHm6i0ylVVcOrlgR1kK99DRLDhyU= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -614,8 +618,8 @@ github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYp github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= -github.com/vmware/govmomi v0.30.0 h1:Fm8ugPnnlMSTSceDKY9goGvjmqc6eQLPUSUeNXdpeXA= -github.com/vmware/govmomi v0.30.0/go.mod h1:F7adsVewLNHsW/IIm7ziFURaXDaHEwcc+ym4r3INMdY= +github.com/vmware/govmomi v0.30.6 h1:O3tjSwQBy0XwI5uK1/yVIfQ1LP9bAECEDUfifnyGs9U= +github.com/vmware/govmomi v0.30.6/go.mod h1:epgoslm97rLECMV4D+08ORzUBEU7boFSepKjt7AYVGg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -696,8 +700,8 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -786,8 +790,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -897,15 +901,15 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -918,8 +922,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1141,8 +1145,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1182,71 +1186,71 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.28.0 h1:3j3VPWmN9tTDI68NETBWlDiA9qOiGJ7sdKeufehBYsM= -k8s.io/api v0.28.0/go.mod h1:0l8NZJzB0i/etuWnIXcwfIv+xnDOhL3lLW919AWYDuY= -k8s.io/apiextensions-apiserver v0.28.0 h1:CszgmBL8CizEnj4sj7/PtLGey6Na3YgWyGCPONv7E9E= -k8s.io/apiextensions-apiserver v0.28.0/go.mod h1:uRdYiwIuu0SyqJKriKmqEN2jThIJPhVmOWETm8ud1VE= -k8s.io/apimachinery v0.28.0 h1:ScHS2AG16UlYWk63r46oU3D5y54T53cVI5mMJwwqFNA= -k8s.io/apimachinery v0.28.0/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= -k8s.io/apiserver v0.28.0 h1:wVh7bK6Xj7hq+5ntInysTeQRAOqqFoKGUOW2yj8DXrY= -k8s.io/apiserver v0.28.0/go.mod h1:MvLmtxhQ0Tb1SZk4hfJBjs8iqr5nhYeaFSaoEcz7Lk4= -k8s.io/client-go v0.28.0 h1:ebcPRDZsCjpj62+cMk1eGNX1QkMdRmQ6lmz5BLoFWeM= -k8s.io/client-go v0.28.0/go.mod h1:0Asy9Xt3U98RypWJmU1ZrRAGKhP6NqDPmptlAzK2kMc= -k8s.io/cloud-provider v0.28.0 h1:BTIW7b757T+VXB5yqJeajPXsNOmeooopUgfzQueiWvk= -k8s.io/cloud-provider v0.28.0/go.mod h1:u0MGqdlutkTmCJyNrCzIMJ+OhrwQE9x5X8mBTN0R7us= +k8s.io/api v0.29.0-alpha.1 h1:2L/HVdzNvB6cEKWWzdz6ocGqUsWvxcnmzuacEhhs0Fk= +k8s.io/api v0.29.0-alpha.1/go.mod h1:eYxbep9dvaZTFXRWrbVTJWC/F3Y41J7K8xODAOnBYIg= +k8s.io/apiextensions-apiserver v0.29.0-alpha.1 h1:FW9gaevczuiNMa8/Njj2DQucyAlkBjarX457z1/taJg= +k8s.io/apiextensions-apiserver v0.29.0-alpha.1/go.mod h1:CAvUfnG5iRasgdu6N/MpuPLOBPh5T/j6ZSuRjs9L0Pk= +k8s.io/apimachinery v0.29.0-alpha.1 h1:d7cj9SSTDXLZxiAJ1g6Oib4Ya+2XTlNOePNYVuATjg4= +k8s.io/apimachinery v0.29.0-alpha.1/go.mod h1:ITRsvhyE2eLGBxgwRxs79z49RNNQh7HUqBvHCNIgEZc= +k8s.io/apiserver v0.29.0-alpha.1 h1:vgUBmwYy+abAVaO7yw7qWwH54QA2ZJ4FEye8FSirmC8= +k8s.io/apiserver v0.29.0-alpha.1/go.mod h1:VdI6MYOEzDjiJmtie0ZCCBiuFZ5gp7YBbcJXspCVkZU= +k8s.io/client-go v0.29.0-alpha.1 h1:V3iWjzFQSHcs4AOeBV3fL379SjEVfyU2KnNW0Q6ACII= +k8s.io/client-go v0.29.0-alpha.1/go.mod h1:5CnPkSLo3JBTEka4x0g46Lh06l08UnJf+1x7O+dqtEM= +k8s.io/cloud-provider v0.29.0-alpha.1 h1:tR/ujvDVQ48nxb2J/BpBoN4j2C6sIIO2i9i85Ns6TJc= +k8s.io/cloud-provider v0.29.0-alpha.1/go.mod h1:eQ39dx211gSMPmOffP2l1Emr/5xKYcicVHWX96/Yg6g= k8s.io/cloud-provider-aws v1.27.0 h1:PF8YrH8QcN6JoXB3Xxlaz84SBDYMPunJuCc0cPuCWXA= k8s.io/cloud-provider-aws v1.27.0/go.mod h1:9vUb5mnVnReSRDBWcBxB1b0HOeEc472iOPmrnwpN9SA= -k8s.io/code-generator v0.28.0 h1:msdkRVJNVFgdiIJ8REl/d3cZsMB9HByFcWMmn13NyuE= -k8s.io/code-generator v0.28.0/go.mod h1:ueeSJZJ61NHBa0ccWLey6mwawum25vX61nRZ6WOzN9A= -k8s.io/component-base v0.28.0 h1:HQKy1enJrOeJlTlN4a6dU09wtmXaUvThC0irImfqyxI= -k8s.io/component-base v0.28.0/go.mod h1:Yyf3+ZypLfMydVzuLBqJ5V7Kx6WwDr/5cN+dFjw1FNk= -k8s.io/component-helpers v0.28.0 h1:ubHUiEF7H/DOx4471pHHsLlH3EGu8jlEvnld5PS4KdI= -k8s.io/component-helpers v0.28.0/go.mod h1:i7hJ/oFhZImqUWwjLFG/yGkLpJ3KFoirY2DLYIMql6Q= -k8s.io/controller-manager v0.28.0 h1:55rmyzwEOnhAZLsuDdDHwVT2sGzkleFY0SqZFKsLN5U= -k8s.io/controller-manager v0.28.0/go.mod h1:WrABGmrpEWBap27eu533RpW5lBnVT5K+u2oc2bDwcmU= -k8s.io/cri-api v0.28.0 h1:TVidtHNi425IaKF50oDD5hRvQuK7wB4NQAfTVOcr9QA= -k8s.io/cri-api v0.28.0/go.mod h1:xXygwvSOGcT/2KXg8sMYTHns2xFem3949kCQn5IS1k4= -k8s.io/csi-translation-lib v0.28.0 h1:X3Kr5aHvH4xutNg4pgdc6RP0h3FOlJGDeui5CLfBeO4= -k8s.io/csi-translation-lib v0.28.0/go.mod h1:HvnmmGZoTobqMU4MD3yQFJ4U4Dq3PxnCfVbJUjky3K0= -k8s.io/dynamic-resource-allocation v0.28.0 h1:LQjb8kRQcvorEHlJVfHLSGued8taykmqROMGozMpHsY= -k8s.io/dynamic-resource-allocation v0.28.0/go.mod h1:x8xyQvoo22hfBEZlKt3nqkzfoTcMOJxiD9mSgDgrd2w= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/code-generator v0.29.0-alpha.1 h1:sfbxSLrwdLtpu2NOHcP3yMQ/bdBAZ76P2m2qN5iqzaM= +k8s.io/code-generator v0.29.0-alpha.1/go.mod h1:QS2putemLRnTUwX2Wljb8/qGw8zfABufWxcGY2EsY1c= +k8s.io/component-base v0.29.0-alpha.1 h1:MbCLImc1x7DyzfbGI2SyZfFfWT7Oyjuf3A1L36Rk1Rk= +k8s.io/component-base v0.29.0-alpha.1/go.mod h1:S5VlgkBTvlKvSI4g24CfDmZB+03FJ7aEqoxxKYSVQhU= +k8s.io/component-helpers v0.29.0-alpha.1 h1:yuPH1fSqWywOOc6ftqpXhmsqrE73xlbz7xGb2QPxEOY= +k8s.io/component-helpers v0.29.0-alpha.1/go.mod h1:MdRjCozF35nI3M6OCl7LBkSud/Et3m4vsLsmsL2kG3M= +k8s.io/controller-manager v0.29.0-alpha.1 h1:ZA6ayqClQCIenm7kNcj5DF3xQs/CdsgUtydFBgDRZ1w= +k8s.io/controller-manager v0.29.0-alpha.1/go.mod h1:qRztwHnGqF930MNAXejQzo6aebBv6wFtIgYlH/+deZ8= +k8s.io/cri-api v0.29.0-alpha.1 h1:XkxDGYHUSeRDj6ozr6SFaS4HDSmLM8C8fb1wMIB7amA= +k8s.io/cri-api v0.29.0-alpha.1/go.mod h1:PoSGzactM57YPD9hDk0Fsz3SdrMQV31ktb7QdnqXtCo= +k8s.io/csi-translation-lib v0.29.0-alpha.1 h1:dd7L6mBEUSe7DM3VmSskJyqRLvBVwaqWx71qmGwHe7g= +k8s.io/csi-translation-lib v0.29.0-alpha.1/go.mod h1:EZ3Jx2rDxoAANwvm2z0NE1PgHf8jwvnBUmi84G7nL14= +k8s.io/dynamic-resource-allocation v0.29.0-alpha.1 h1:ZpPumTIM51aY1w1obOQHIHNkVhlGBj4+DCa/lDYmesQ= +k8s.io/dynamic-resource-allocation v0.29.0-alpha.1/go.mod h1:As+JCGvjfiasaDPHbOg7MDfj7ANDHEIH93//cNeCovY= +k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= +k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kms v0.28.0 h1:BwJhU9qPcJhHLUcQjtelOSjYti+1/caJLr+4jHbKzTA= -k8s.io/kms v0.28.0/go.mod h1:CNU792ls92v2Ye7Vn1jn+xLqYtUSezDZNVu6PLbJyrU= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/kube-scheduler v0.28.0 h1:Z9zAKRKOiOHcZwhfRYZrOtq+O6+bfWUKmlFuFHlvwHM= -k8s.io/kube-scheduler v0.28.0/go.mod h1:GMTnTM+SCwDlpRRjAC/0TgiGVgwfUbHi38rtYzqcLfc= -k8s.io/kubectl v0.28.0 h1:qhfju0OaU+JGeBlToPeeIg2UJUWP++QwTkpio6nlPKg= -k8s.io/kubectl v0.28.0/go.mod h1:1We+E5nSX3/TVoSQ6y5Bzld5OhTBHZHlKEYl7g/NaTk= -k8s.io/kubelet v0.28.0 h1:H/3JAkLIungVF+WLpqrxhgJ4gzwsbN8VA8LOTYsEX3U= -k8s.io/kubelet v0.28.0/go.mod h1:i8jUg4ltbRusT3ExOhSAeqETuHdoHTZcTT2cPr9RTgc= -k8s.io/kubernetes v1.28.0 h1:p8qq/VoNHnBWinLEi5LO2IvCfzFouN7Jhdz8+L++V+U= -k8s.io/kubernetes v1.28.0/go.mod h1:rBQpjGYlLBV0KuOLw8EG45N5EBCskWiPpi0xy5liHMI= -k8s.io/legacy-cloud-providers v0.28.0 h1:UnIGD5YlU7x4lIbJCPc49ijh0NzZhXh+lE9gWnn4m2U= -k8s.io/legacy-cloud-providers v0.28.0/go.mod h1:sb1fnmuZEVNFJG3Uhs4BO5zN/QA9jG98B0i+zG2Fg+A= -k8s.io/mount-utils v0.28.0 h1:BGYxriZPWTJFCEWDtXsdC1ZPFvI6HbfXCWpjJ42mIw4= -k8s.io/mount-utils v0.28.0/go.mod h1:AyP8LmZSLgpGdFQr+vzHTerlPiGvXUdP99n98Er47jw= +k8s.io/kms v0.29.0-alpha.1 h1:jIbt/B48SHg5EJ0XxTsMTyoI0yrQkA8SLqBAWcImMic= +k8s.io/kms v0.29.0-alpha.1/go.mod h1:Yv5MtAfuOkfGy+iov2HxqOWDTSGVSv+sBVchzevpFMM= +k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f h1:eeEUOoGYWhOz7EyXqhlR2zHKNw2mNJ9vzJmub6YN6kk= +k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kube-scheduler v0.29.0-alpha.1 h1:XnPSEAl/aFSBPkHt3u4UgJ/R124YBRPMKHAKdikrxus= +k8s.io/kube-scheduler v0.29.0-alpha.1/go.mod h1:okXX4sToeOtriI64yvAubxChfJcYaRId7Sal6nxfh3o= +k8s.io/kubectl v0.29.0-alpha.1 h1:mMfChxVG5qpC3tbqpurq8w33jlX7niat9YWYaDonuDU= +k8s.io/kubectl v0.29.0-alpha.1/go.mod h1:2woriKYJccld2smvsZujHnzbjaI2gGpK2NfcIbQcWwo= +k8s.io/kubelet v0.29.0-alpha.1 h1:hA5DgE9IvzmXmVHnmeAehud/4GnhNCZc5u3EqtlpF9o= +k8s.io/kubelet v0.29.0-alpha.1/go.mod h1:emA5bLiHT8K+CAa5dqjz7fxTOrdbhNXIoBzZVRtsIlw= +k8s.io/kubernetes v1.29.0-alpha.1 h1:6xRN0z/ftaJO1jD8H86pvNJoDenT66zFt/FhMNdkGsY= +k8s.io/kubernetes v1.29.0-alpha.1/go.mod h1:YqGcjUoL8mgiUc4rnyvXFZuCKQaD1/03JrKuFEzrv70= +k8s.io/legacy-cloud-providers v0.29.0-alpha.1 h1:nqQWr6E47uZMFUfePFhas1TSc4nV0tqJ1/T5ZLyOYjE= +k8s.io/legacy-cloud-providers v0.29.0-alpha.1/go.mod h1:zZ4Ww11LNvrguh19v9KFM4S/ehxyAmv78dfEaAVTIDA= +k8s.io/mount-utils v0.29.0-alpha.1 h1:W1wx2RtOybrZn29PSNqrqlq4xGJ8kGcZMlWDPuW0nV4= +k8s.io/mount-utils v0.29.0-alpha.1/go.mod h1:M+wkKv/SGLol4JME67gjJL2XN46YpQiAyCnMhhCBuEc= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 h1:trsWhjU5jZrx6UvFu4WzQDrN7Pga4a7Qg+zcfcj64PA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2SGwkQasmbeqDo8th5wOBA5h/AjTKA4I= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= sigs.k8s.io/cloud-provider-azure v1.28.0 h1:LkvvDQ2u0rCr1lhFBoyjvKhYazhpYnAohOqQKN060H8= sigs.k8s.io/cloud-provider-azure v1.28.0/go.mod h1:ubvg4F58jePO4Z7C4XfgJkFFGpqhVeogpzOdc1X4dyk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/CHANGELOG.md b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/CHANGELOG.md deleted file mode 100644 index 52911e4cc5e4..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/CHANGELOG.md +++ /dev/null @@ -1,2 +0,0 @@ -# Change History - diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/_meta.json b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/_meta.json deleted file mode 100644 index b93e50bd72d8..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/_meta.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "commit": "1c8d7850afbec9ede6de6f2d14bcc30896a74ed6", - "readme": "/_/azure-rest-api-specs/specification/compute/resource-manager/readme.md", - "tag": "package-2022-03-01", - "use": "@microsoft.azure/autorest.go@2.1.188", - "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", - "autorest_command": "autorest --use=@microsoft.azure/autorest.go@2.1.188 --tag=package-2022-03-01 --go-sdk-folder=/_/azure-sdk-for-go --go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION /_/azure-rest-api-specs/specification/compute/resource-manager/readme.md", - "additional_properties": { - "additional_options": "--go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION" - } -} \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/availabilitysets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/availabilitysets.go deleted file mode 100644 index ea14bbbb511e..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/availabilitysets.go +++ /dev/null @@ -1,652 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// AvailabilitySetsClient is the compute Client -type AvailabilitySetsClient struct { - BaseClient -} - -// NewAvailabilitySetsClient creates an instance of the AvailabilitySetsClient client. -func NewAvailabilitySetsClient(subscriptionID string) AvailabilitySetsClient { - return NewAvailabilitySetsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewAvailabilitySetsClientWithBaseURI creates an instance of the AvailabilitySetsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewAvailabilitySetsClientWithBaseURI(baseURI string, subscriptionID string) AvailabilitySetsClient { - return AvailabilitySetsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update an availability set. -// Parameters: -// resourceGroupName - the name of the resource group. -// availabilitySetName - the name of the availability set. -// parameters - parameters supplied to the Create Availability Set operation. -func (client AvailabilitySetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySet) (result AvailabilitySet, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, availabilitySetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client AvailabilitySetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySet) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "availabilitySetName": autorest.Encode("path", availabilitySetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) CreateOrUpdateResponder(resp *http.Response) (result AvailabilitySet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete an availability set. -// Parameters: -// resourceGroupName - the name of the resource group. -// availabilitySetName - the name of the availability set. -func (client AvailabilitySetsClient) Delete(ctx context.Context, resourceGroupName string, availabilitySetName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, availabilitySetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client AvailabilitySetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "availabilitySetName": autorest.Encode("path", availabilitySetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about an availability set. -// Parameters: -// resourceGroupName - the name of the resource group. -// availabilitySetName - the name of the availability set. -func (client AvailabilitySetsClient) Get(ctx context.Context, resourceGroupName string, availabilitySetName string) (result AvailabilitySet, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, availabilitySetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client AvailabilitySetsClient) GetPreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "availabilitySetName": autorest.Encode("path", availabilitySetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) GetResponder(resp *http.Response) (result AvailabilitySet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all availability sets in a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client AvailabilitySetsClient) List(ctx context.Context, resourceGroupName string) (result AvailabilitySetListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.List") - defer func() { - sc := -1 - if result.aslr.Response.Response != nil { - sc = result.aslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.aslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", resp, "Failure sending request") - return - } - - result.aslr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "List", resp, "Failure responding to request") - return - } - if result.aslr.hasNextLink() && result.aslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client AvailabilitySetsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) ListResponder(resp *http.Response) (result AvailabilitySetListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client AvailabilitySetsClient) listNextResults(ctx context.Context, lastResults AvailabilitySetListResult) (result AvailabilitySetListResult, err error) { - req, err := lastResults.availabilitySetListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client AvailabilitySetsClient) ListComplete(ctx context.Context, resourceGroupName string) (result AvailabilitySetListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName) - return -} - -// ListAvailableSizes lists all available virtual machine sizes that can be used to create a new virtual machine in an -// existing availability set. -// Parameters: -// resourceGroupName - the name of the resource group. -// availabilitySetName - the name of the availability set. -func (client AvailabilitySetsClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, availabilitySetName string) (result VirtualMachineSizeListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListAvailableSizes") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListAvailableSizesPreparer(ctx, resourceGroupName, availabilitySetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", nil, "Failure preparing request") - return - } - - resp, err := client.ListAvailableSizesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", resp, "Failure sending request") - return - } - - result, err = client.ListAvailableSizesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListAvailableSizes", resp, "Failure responding to request") - return - } - - return -} - -// ListAvailableSizesPreparer prepares the ListAvailableSizes request. -func (client AvailabilitySetsClient) ListAvailableSizesPreparer(ctx context.Context, resourceGroupName string, availabilitySetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "availabilitySetName": autorest.Encode("path", availabilitySetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAvailableSizesSender sends the ListAvailableSizes request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) ListAvailableSizesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAvailableSizesResponder handles the response to the ListAvailableSizes request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) ListAvailableSizesResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListBySubscription lists all availability sets in a subscription. -// Parameters: -// expand - the expand expression to apply to the operation. Allowed values are 'instanceView'. -func (client AvailabilitySetsClient) ListBySubscription(ctx context.Context, expand string) (result AvailabilitySetListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListBySubscription") - defer func() { - sc := -1 - if result.aslr.Response.Response != nil { - sc = result.aslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listBySubscriptionNextResults - req, err := client.ListBySubscriptionPreparer(ctx, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", nil, "Failure preparing request") - return - } - - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.aslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", resp, "Failure sending request") - return - } - - result.aslr, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "ListBySubscription", resp, "Failure responding to request") - return - } - if result.aslr.hasNextLink() && result.aslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListBySubscriptionPreparer prepares the ListBySubscription request. -func (client AvailabilitySetsClient) ListBySubscriptionPreparer(ctx context.Context, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/availabilitySets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListBySubscriptionSender sends the ListBySubscription request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) ListBySubscriptionResponder(resp *http.Response) (result AvailabilitySetListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listBySubscriptionNextResults retrieves the next set of results, if any. -func (client AvailabilitySetsClient) listBySubscriptionNextResults(ctx context.Context, lastResults AvailabilitySetListResult) (result AvailabilitySetListResult, err error) { - req, err := lastResults.availabilitySetListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") - } - result, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. -func (client AvailabilitySetsClient) ListBySubscriptionComplete(ctx context.Context, expand string) (result AvailabilitySetListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.ListBySubscription") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListBySubscription(ctx, expand) - return -} - -// Update update an availability set. -// Parameters: -// resourceGroupName - the name of the resource group. -// availabilitySetName - the name of the availability set. -// parameters - parameters supplied to the Update Availability Set operation. -func (client AvailabilitySetsClient) Update(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySetUpdate) (result AvailabilitySet, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetsClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, availabilitySetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.AvailabilitySetsClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client AvailabilitySetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, availabilitySetName string, parameters AvailabilitySetUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "availabilitySetName": autorest.Encode("path", availabilitySetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client AvailabilitySetsClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client AvailabilitySetsClient) UpdateResponder(resp *http.Response) (result AvailabilitySet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservationgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservationgroups.go deleted file mode 100644 index e73d47ddeb97..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservationgroups.go +++ /dev/null @@ -1,596 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CapacityReservationGroupsClient is the compute Client -type CapacityReservationGroupsClient struct { - BaseClient -} - -// NewCapacityReservationGroupsClient creates an instance of the CapacityReservationGroupsClient client. -func NewCapacityReservationGroupsClient(subscriptionID string) CapacityReservationGroupsClient { - return NewCapacityReservationGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCapacityReservationGroupsClientWithBaseURI creates an instance of the CapacityReservationGroupsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewCapacityReservationGroupsClientWithBaseURI(baseURI string, subscriptionID string) CapacityReservationGroupsClient { - return CapacityReservationGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update a capacity reservation group. When updating a capacity reservation -// group, only tags may be modified. Please refer to https://aka.ms/CapacityReservation for more details. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// parameters - parameters supplied to the Create capacity reservation Group. -func (client CapacityReservationGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroup) (result CapacityReservationGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client CapacityReservationGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroup) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result CapacityReservationGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete a capacity reservation group. This operation is allowed only if all the associated -// resources are disassociated from the reservation group and all capacity reservations under the reservation group -// have also been deleted. Please refer to https://aka.ms/CapacityReservation for more details. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -func (client CapacityReservationGroupsClient) Delete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, capacityReservationGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client CapacityReservationGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation that retrieves information about a capacity reservation group. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance -// views of the capacity reservations under the capacity reservation group which is a snapshot of the runtime -// properties of a capacity reservation that is managed by the platform and can change outside of control plane -// operations. -func (client CapacityReservationGroupsClient) Get(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, expand CapacityReservationGroupInstanceViewTypes) (result CapacityReservationGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, capacityReservationGroupName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CapacityReservationGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, expand CapacityReservationGroupInstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) GetResponder(resp *http.Response) (result CapacityReservationGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByResourceGroup lists all of the capacity reservation groups in the specified resource group. Use the nextLink -// property in the response to get the next page of capacity reservation groups. -// Parameters: -// resourceGroupName - the name of the resource group. -// expand - the expand expression to apply on the operation. Based on the expand param(s) specified we return -// Virtual Machine or ScaleSet VM Instance or both resource Ids which are associated to capacity reservation -// group in the response. -func (client CapacityReservationGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.crglr.Response.Response != nil { - sc = result.crglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.crglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.crglr, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.crglr.hasNextLink() && result.crglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client CapacityReservationGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result CapacityReservationGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client CapacityReservationGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults CapacityReservationGroupListResult) (result CapacityReservationGroupListResult, err error) { - req, err := lastResults.capacityReservationGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client CapacityReservationGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName, expand) - return -} - -// ListBySubscription lists all of the capacity reservation groups in the subscription. Use the nextLink property in -// the response to get the next page of capacity reservation groups. -// Parameters: -// expand - the expand expression to apply on the operation. Based on the expand param(s) specified we return -// Virtual Machine or ScaleSet VM Instance or both resource Ids which are associated to capacity reservation -// group in the response. -func (client CapacityReservationGroupsClient) ListBySubscription(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.crglr.Response.Response != nil { - sc = result.crglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listBySubscriptionNextResults - req, err := client.ListBySubscriptionPreparer(ctx, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", nil, "Failure preparing request") - return - } - - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.crglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", resp, "Failure sending request") - return - } - - result.crglr, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "ListBySubscription", resp, "Failure responding to request") - return - } - if result.crglr.hasNextLink() && result.crglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListBySubscriptionPreparer prepares the ListBySubscription request. -func (client CapacityReservationGroupsClient) ListBySubscriptionPreparer(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/capacityReservationGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListBySubscriptionSender sends the ListBySubscription request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result CapacityReservationGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listBySubscriptionNextResults retrieves the next set of results, if any. -func (client CapacityReservationGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults CapacityReservationGroupListResult) (result CapacityReservationGroupListResult, err error) { - req, err := lastResults.capacityReservationGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") - } - result, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. -func (client CapacityReservationGroupsClient) ListBySubscriptionComplete(ctx context.Context, expand ExpandTypesForGetCapacityReservationGroups) (result CapacityReservationGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListBySubscription(ctx, expand) - return -} - -// Update the operation to update a capacity reservation group. When updating a capacity reservation group, only tags -// may be modified. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// parameters - parameters supplied to the Update capacity reservation Group operation. -func (client CapacityReservationGroupsClient) Update(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroupUpdate) (result CapacityReservationGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupsClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationGroupsClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client CapacityReservationGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, parameters CapacityReservationGroupUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client CapacityReservationGroupsClient) UpdateResponder(resp *http.Response) (result CapacityReservationGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservations.go deleted file mode 100644 index c2599c46262e..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/capacityreservations.go +++ /dev/null @@ -1,493 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CapacityReservationsClient is the compute Client -type CapacityReservationsClient struct { - BaseClient -} - -// NewCapacityReservationsClient creates an instance of the CapacityReservationsClient client. -func NewCapacityReservationsClient(subscriptionID string) CapacityReservationsClient { - return NewCapacityReservationsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCapacityReservationsClientWithBaseURI creates an instance of the CapacityReservationsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewCapacityReservationsClientWithBaseURI(baseURI string, subscriptionID string) CapacityReservationsClient { - return CapacityReservationsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update a capacity reservation. Please note some properties can be set only -// during capacity reservation creation. Please refer to https://aka.ms/CapacityReservation for more details. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// capacityReservationName - the name of the capacity reservation. -// parameters - parameters supplied to the Create capacity reservation. -func (client CapacityReservationsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservation) (result CapacityReservationsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.Sku", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.CapacityReservationsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client CapacityReservationsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservation) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "capacityReservationName": autorest.Encode("path", capacityReservationName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationsClient) CreateOrUpdateSender(req *http.Request) (future CapacityReservationsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client CapacityReservationsClient) CreateOrUpdateResponder(resp *http.Response) (result CapacityReservation, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete a capacity reservation. This operation is allowed only when all the associated -// resources are disassociated from the capacity reservation. Please refer to https://aka.ms/CapacityReservation for -// more details. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// capacityReservationName - the name of the capacity reservation. -func (client CapacityReservationsClient) Delete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string) (result CapacityReservationsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client CapacityReservationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "capacityReservationName": autorest.Encode("path", capacityReservationName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationsClient) DeleteSender(req *http.Request) (future CapacityReservationsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client CapacityReservationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation that retrieves information about the capacity reservation. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// capacityReservationName - the name of the capacity reservation. -// expand - the expand expression to apply on the operation. 'InstanceView' retrieves a snapshot of the runtime -// properties of the capacity reservation that is managed by the platform and can change outside of control -// plane operations. -func (client CapacityReservationsClient) Get(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, expand CapacityReservationInstanceViewTypes) (result CapacityReservation, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CapacityReservationsClient) GetPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, expand CapacityReservationInstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "capacityReservationName": autorest.Encode("path", capacityReservationName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CapacityReservationsClient) GetResponder(resp *http.Response) (result CapacityReservation, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByCapacityReservationGroup lists all of the capacity reservations in the specified capacity reservation group. -// Use the nextLink property in the response to get the next page of capacity reservations. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -func (client CapacityReservationsClient) ListByCapacityReservationGroup(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result CapacityReservationListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.ListByCapacityReservationGroup") - defer func() { - sc := -1 - if result.crlr.Response.Response != nil { - sc = result.crlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByCapacityReservationGroupNextResults - req, err := client.ListByCapacityReservationGroupPreparer(ctx, resourceGroupName, capacityReservationGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByCapacityReservationGroupSender(req) - if err != nil { - result.crlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", resp, "Failure sending request") - return - } - - result.crlr, err = client.ListByCapacityReservationGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "ListByCapacityReservationGroup", resp, "Failure responding to request") - return - } - if result.crlr.hasNextLink() && result.crlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByCapacityReservationGroupPreparer prepares the ListByCapacityReservationGroup request. -func (client CapacityReservationsClient) ListByCapacityReservationGroupPreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByCapacityReservationGroupSender sends the ListByCapacityReservationGroup request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationsClient) ListByCapacityReservationGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByCapacityReservationGroupResponder handles the response to the ListByCapacityReservationGroup request. The method always -// closes the http.Response Body. -func (client CapacityReservationsClient) ListByCapacityReservationGroupResponder(resp *http.Response) (result CapacityReservationListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByCapacityReservationGroupNextResults retrieves the next set of results, if any. -func (client CapacityReservationsClient) listByCapacityReservationGroupNextResults(ctx context.Context, lastResults CapacityReservationListResult) (result CapacityReservationListResult, err error) { - req, err := lastResults.capacityReservationListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByCapacityReservationGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByCapacityReservationGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "listByCapacityReservationGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByCapacityReservationGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client CapacityReservationsClient) ListByCapacityReservationGroupComplete(ctx context.Context, resourceGroupName string, capacityReservationGroupName string) (result CapacityReservationListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.ListByCapacityReservationGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByCapacityReservationGroup(ctx, resourceGroupName, capacityReservationGroupName) - return -} - -// Update the operation to update a capacity reservation. -// Parameters: -// resourceGroupName - the name of the resource group. -// capacityReservationGroupName - the name of the capacity reservation group. -// capacityReservationName - the name of the capacity reservation. -// parameters - parameters supplied to the Update capacity reservation operation. -func (client CapacityReservationsClient) Update(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservationUpdate) (result CapacityReservationsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, capacityReservationGroupName, capacityReservationName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client CapacityReservationsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, capacityReservationGroupName string, capacityReservationName string, parameters CapacityReservationUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "capacityReservationGroupName": autorest.Encode("path", capacityReservationGroupName), - "capacityReservationName": autorest.Encode("path", capacityReservationName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client CapacityReservationsClient) UpdateSender(req *http.Request) (future CapacityReservationsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client CapacityReservationsClient) UpdateResponder(resp *http.Response) (result CapacityReservation, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/client.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/client.go deleted file mode 100644 index c7c4543154d5..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/client.go +++ /dev/null @@ -1,43 +0,0 @@ -// Deprecated: Please note, this package has been deprecated. A replacement package is available [github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute). We strongly encourage you to upgrade to continue receiving updates. See [Migration Guide](https://aka.ms/azsdk/golang/t2/migration) for guidance on upgrading. Refer to our [deprecation policy](https://azure.github.io/azure-sdk/policies_support.html) for more details. -// -// Package compute implements the Azure ARM Compute service API version . -// -// Compute Client -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "github.com/Azure/go-autorest/autorest" -) - -const ( - // DefaultBaseURI is the default URI used for the service Compute - DefaultBaseURI = "https://management.azure.com" -) - -// BaseClient is the base client for Compute. -type BaseClient struct { - autorest.Client - BaseURI string - SubscriptionID string -} - -// New creates an instance of the BaseClient client. -func New(subscriptionID string) BaseClient { - return NewWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewWithBaseURI creates an instance of the BaseClient client using a custom endpoint. Use this when interacting with -// an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewWithBaseURI(baseURI string, subscriptionID string) BaseClient { - return BaseClient{ - Client: autorest.NewClientWithUserAgent(UserAgent()), - BaseURI: baseURI, - SubscriptionID: subscriptionID, - } -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceoperatingsystems.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceoperatingsystems.go deleted file mode 100644 index 7dfce08d9096..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceoperatingsystems.go +++ /dev/null @@ -1,422 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CloudServiceOperatingSystemsClient is the compute Client -type CloudServiceOperatingSystemsClient struct { - BaseClient -} - -// NewCloudServiceOperatingSystemsClient creates an instance of the CloudServiceOperatingSystemsClient client. -func NewCloudServiceOperatingSystemsClient(subscriptionID string) CloudServiceOperatingSystemsClient { - return NewCloudServiceOperatingSystemsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCloudServiceOperatingSystemsClientWithBaseURI creates an instance of the CloudServiceOperatingSystemsClient -// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI -// (sovereign clouds, Azure stack). -func NewCloudServiceOperatingSystemsClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceOperatingSystemsClient { - return CloudServiceOperatingSystemsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// GetOSFamily gets properties of a guest operating system family that can be specified in the XML service -// configuration (.cscfg) for a cloud service. -// Parameters: -// location - name of the location that the OS family pertains to. -// osFamilyName - name of the OS family. -func (client CloudServiceOperatingSystemsClient) GetOSFamily(ctx context.Context, location string, osFamilyName string) (result OSFamily, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.GetOSFamily") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetOSFamilyPreparer(ctx, location, osFamilyName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", nil, "Failure preparing request") - return - } - - resp, err := client.GetOSFamilySender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", resp, "Failure sending request") - return - } - - result, err = client.GetOSFamilyResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSFamily", resp, "Failure responding to request") - return - } - - return -} - -// GetOSFamilyPreparer prepares the GetOSFamily request. -func (client CloudServiceOperatingSystemsClient) GetOSFamilyPreparer(ctx context.Context, location string, osFamilyName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "osFamilyName": autorest.Encode("path", osFamilyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies/{osFamilyName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetOSFamilySender sends the GetOSFamily request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceOperatingSystemsClient) GetOSFamilySender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetOSFamilyResponder handles the response to the GetOSFamily request. The method always -// closes the http.Response Body. -func (client CloudServiceOperatingSystemsClient) GetOSFamilyResponder(resp *http.Response) (result OSFamily, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetOSVersion gets properties of a guest operating system version that can be specified in the XML service -// configuration (.cscfg) for a cloud service. -// Parameters: -// location - name of the location that the OS version pertains to. -// osVersionName - name of the OS version. -func (client CloudServiceOperatingSystemsClient) GetOSVersion(ctx context.Context, location string, osVersionName string) (result OSVersion, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.GetOSVersion") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetOSVersionPreparer(ctx, location, osVersionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", nil, "Failure preparing request") - return - } - - resp, err := client.GetOSVersionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", resp, "Failure sending request") - return - } - - result, err = client.GetOSVersionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "GetOSVersion", resp, "Failure responding to request") - return - } - - return -} - -// GetOSVersionPreparer prepares the GetOSVersion request. -func (client CloudServiceOperatingSystemsClient) GetOSVersionPreparer(ctx context.Context, location string, osVersionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "osVersionName": autorest.Encode("path", osVersionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions/{osVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetOSVersionSender sends the GetOSVersion request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceOperatingSystemsClient) GetOSVersionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetOSVersionResponder handles the response to the GetOSVersion request. The method always -// closes the http.Response Body. -func (client CloudServiceOperatingSystemsClient) GetOSVersionResponder(resp *http.Response) (result OSVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListOSFamilies gets a list of all guest operating system families available to be specified in the XML service -// configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next page of OS -// Families. Do this till nextLink is null to fetch all the OS Families. -// Parameters: -// location - name of the location that the OS families pertain to. -func (client CloudServiceOperatingSystemsClient) ListOSFamilies(ctx context.Context, location string) (result OSFamilyListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSFamilies") - defer func() { - sc := -1 - if result.oflr.Response.Response != nil { - sc = result.oflr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listOSFamiliesNextResults - req, err := client.ListOSFamiliesPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", nil, "Failure preparing request") - return - } - - resp, err := client.ListOSFamiliesSender(req) - if err != nil { - result.oflr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", resp, "Failure sending request") - return - } - - result.oflr, err = client.ListOSFamiliesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSFamilies", resp, "Failure responding to request") - return - } - if result.oflr.hasNextLink() && result.oflr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListOSFamiliesPreparer prepares the ListOSFamilies request. -func (client CloudServiceOperatingSystemsClient) ListOSFamiliesPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsFamilies", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListOSFamiliesSender sends the ListOSFamilies request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceOperatingSystemsClient) ListOSFamiliesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListOSFamiliesResponder handles the response to the ListOSFamilies request. The method always -// closes the http.Response Body. -func (client CloudServiceOperatingSystemsClient) ListOSFamiliesResponder(resp *http.Response) (result OSFamilyListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listOSFamiliesNextResults retrieves the next set of results, if any. -func (client CloudServiceOperatingSystemsClient) listOSFamiliesNextResults(ctx context.Context, lastResults OSFamilyListResult) (result OSFamilyListResult, err error) { - req, err := lastResults.oSFamilyListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListOSFamiliesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", resp, "Failure sending next results request") - } - result, err = client.ListOSFamiliesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSFamiliesNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListOSFamiliesComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServiceOperatingSystemsClient) ListOSFamiliesComplete(ctx context.Context, location string) (result OSFamilyListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSFamilies") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListOSFamilies(ctx, location) - return -} - -// ListOSVersions gets a list of all guest operating system versions available to be specified in the XML service -// configuration (.cscfg) for a cloud service. Use nextLink property in the response to get the next page of OS -// versions. Do this till nextLink is null to fetch all the OS versions. -// Parameters: -// location - name of the location that the OS versions pertain to. -func (client CloudServiceOperatingSystemsClient) ListOSVersions(ctx context.Context, location string) (result OSVersionListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSVersions") - defer func() { - sc := -1 - if result.ovlr.Response.Response != nil { - sc = result.ovlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listOSVersionsNextResults - req, err := client.ListOSVersionsPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", nil, "Failure preparing request") - return - } - - resp, err := client.ListOSVersionsSender(req) - if err != nil { - result.ovlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", resp, "Failure sending request") - return - } - - result.ovlr, err = client.ListOSVersionsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "ListOSVersions", resp, "Failure responding to request") - return - } - if result.ovlr.hasNextLink() && result.ovlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListOSVersionsPreparer prepares the ListOSVersions request. -func (client CloudServiceOperatingSystemsClient) ListOSVersionsPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/cloudServiceOsVersions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListOSVersionsSender sends the ListOSVersions request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceOperatingSystemsClient) ListOSVersionsSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListOSVersionsResponder handles the response to the ListOSVersions request. The method always -// closes the http.Response Body. -func (client CloudServiceOperatingSystemsClient) ListOSVersionsResponder(resp *http.Response) (result OSVersionListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listOSVersionsNextResults retrieves the next set of results, if any. -func (client CloudServiceOperatingSystemsClient) listOSVersionsNextResults(ctx context.Context, lastResults OSVersionListResult) (result OSVersionListResult, err error) { - req, err := lastResults.oSVersionListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListOSVersionsSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", resp, "Failure sending next results request") - } - result, err = client.ListOSVersionsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceOperatingSystemsClient", "listOSVersionsNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListOSVersionsComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServiceOperatingSystemsClient) ListOSVersionsComplete(ctx context.Context, location string) (result OSVersionListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceOperatingSystemsClient.ListOSVersions") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListOSVersions(ctx, location) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroleinstances.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroleinstances.go deleted file mode 100644 index 4edea0aec5d7..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroleinstances.go +++ /dev/null @@ -1,699 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CloudServiceRoleInstancesClient is the compute Client -type CloudServiceRoleInstancesClient struct { - BaseClient -} - -// NewCloudServiceRoleInstancesClient creates an instance of the CloudServiceRoleInstancesClient client. -func NewCloudServiceRoleInstancesClient(subscriptionID string) CloudServiceRoleInstancesClient { - return NewCloudServiceRoleInstancesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCloudServiceRoleInstancesClientWithBaseURI creates an instance of the CloudServiceRoleInstancesClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewCloudServiceRoleInstancesClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceRoleInstancesClient { - return CloudServiceRoleInstancesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Delete deletes a role instance from a cloud service. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) Delete(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client CloudServiceRoleInstancesClient) DeletePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) DeleteSender(req *http.Request) (future CloudServiceRoleInstancesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets a role instance from a cloud service. -// Parameters: -// roleInstanceName - name of the role instance. -// expand - the expand expression to apply to the operation. 'UserData' is not supported for cloud services. -func (client CloudServiceRoleInstancesClient) Get(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstance, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CloudServiceRoleInstancesClient) GetPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) GetResponder(resp *http.Response) (result RoleInstance, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetInstanceView retrieves information about the run-time state of a role instance in a cloud service. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) GetInstanceView(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result RoleInstanceInstanceView, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.GetInstanceView") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetInstanceViewPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", nil, "Failure preparing request") - return - } - - resp, err := client.GetInstanceViewSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", resp, "Failure sending request") - return - } - - result, err = client.GetInstanceViewResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetInstanceView", resp, "Failure responding to request") - return - } - - return -} - -// GetInstanceViewPreparer prepares the GetInstanceView request. -func (client CloudServiceRoleInstancesClient) GetInstanceViewPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/instanceView", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetInstanceViewSender sends the GetInstanceView request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) GetInstanceViewResponder(resp *http.Response) (result RoleInstanceInstanceView, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetRemoteDesktopFile gets a remote desktop file for a role instance in a cloud service. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFile(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result ReadCloser, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.GetRemoteDesktopFile") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetRemoteDesktopFilePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", nil, "Failure preparing request") - return - } - - resp, err := client.GetRemoteDesktopFileSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", resp, "Failure sending request") - return - } - - result, err = client.GetRemoteDesktopFileResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "GetRemoteDesktopFile", resp, "Failure responding to request") - return - } - - return -} - -// GetRemoteDesktopFilePreparer prepares the GetRemoteDesktopFile request. -func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFilePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/remoteDesktopFile", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetRemoteDesktopFileSender sends the GetRemoteDesktopFile request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFileSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetRemoteDesktopFileResponder handles the response to the GetRemoteDesktopFile request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) GetRemoteDesktopFileResponder(resp *http.Response) (result ReadCloser, err error) { - result.Value = &resp.Body - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK)) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets the list of all role instances in a cloud service. Use nextLink property in the response to get the next -// page of role instances. Do this till nextLink is null to fetch all the role instances. -// Parameters: -// expand - the expand expression to apply to the operation. 'UserData' is not supported for cloud services. -func (client CloudServiceRoleInstancesClient) List(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstanceListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.List") - defer func() { - sc := -1 - if result.rilr.Response.Response != nil { - sc = result.rilr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, cloudServiceName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", resp, "Failure sending request") - return - } - - result.rilr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "List", resp, "Failure responding to request") - return - } - if result.rilr.hasNextLink() && result.rilr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client CloudServiceRoleInstancesClient) ListPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) ListResponder(resp *http.Response) (result RoleInstanceListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client CloudServiceRoleInstancesClient) listNextResults(ctx context.Context, lastResults RoleInstanceListResult) (result RoleInstanceListResult, err error) { - req, err := lastResults.roleInstanceListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServiceRoleInstancesClient) ListComplete(ctx context.Context, resourceGroupName string, cloudServiceName string, expand InstanceViewTypes) (result RoleInstanceListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, cloudServiceName, expand) - return -} - -// Rebuild the Rebuild Role Instance asynchronous operation reinstalls the operating system on instances of web roles -// or worker roles and initializes the storage resources that are used by them. If you do not want to initialize -// storage resources, you can use Reimage Role Instance. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) Rebuild(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesRebuildFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Rebuild") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RebuildPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Rebuild", nil, "Failure preparing request") - return - } - - result, err = client.RebuildSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Rebuild", result.Response(), "Failure sending request") - return - } - - return -} - -// RebuildPreparer prepares the Rebuild request. -func (client CloudServiceRoleInstancesClient) RebuildPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/rebuild", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RebuildSender sends the Rebuild request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) RebuildSender(req *http.Request) (future CloudServiceRoleInstancesRebuildFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RebuildResponder handles the response to the Rebuild request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) RebuildResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reimage the Reimage Role Instance asynchronous operation reinstalls the operating system on instances of web roles -// or worker roles. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) Reimage(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesReimageFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Reimage") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimagePreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Reimage", nil, "Failure preparing request") - return - } - - result, err = client.ReimageSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Reimage", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimagePreparer prepares the Reimage request. -func (client CloudServiceRoleInstancesClient) ReimagePreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/reimage", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageSender sends the Reimage request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) ReimageSender(req *http.Request) (future CloudServiceRoleInstancesReimageFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageResponder handles the response to the Reimage request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Restart the Reboot Role Instance asynchronous operation requests a reboot of a role instance in the cloud service. -// Parameters: -// roleInstanceName - name of the role instance. -func (client CloudServiceRoleInstancesClient) Restart(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleInstancesRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleInstancesClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RestartPreparer(ctx, roleInstanceName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client CloudServiceRoleInstancesClient) RestartPreparer(ctx context.Context, roleInstanceName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleInstanceName": autorest.Encode("path", roleInstanceName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roleInstances/{roleInstanceName}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRoleInstancesClient) RestartSender(req *http.Request) (future CloudServiceRoleInstancesRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client CloudServiceRoleInstancesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroles.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroles.go deleted file mode 100644 index dac28bd988b1..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudserviceroles.go +++ /dev/null @@ -1,224 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CloudServiceRolesClient is the compute Client -type CloudServiceRolesClient struct { - BaseClient -} - -// NewCloudServiceRolesClient creates an instance of the CloudServiceRolesClient client. -func NewCloudServiceRolesClient(subscriptionID string) CloudServiceRolesClient { - return NewCloudServiceRolesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCloudServiceRolesClientWithBaseURI creates an instance of the CloudServiceRolesClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewCloudServiceRolesClientWithBaseURI(baseURI string, subscriptionID string) CloudServiceRolesClient { - return CloudServiceRolesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get gets a role from a cloud service. -// Parameters: -// roleName - name of the role. -func (client CloudServiceRolesClient) Get(ctx context.Context, roleName string, resourceGroupName string, cloudServiceName string) (result CloudServiceRole, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, roleName, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CloudServiceRolesClient) GetPreparer(ctx context.Context, roleName string, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "roleName": autorest.Encode("path", roleName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles/{roleName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRolesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CloudServiceRolesClient) GetResponder(resp *http.Response) (result CloudServiceRole, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all roles in a cloud service. Use nextLink property in the response to get the next page of -// roles. Do this till nextLink is null to fetch all the roles. -func (client CloudServiceRolesClient) List(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.List") - defer func() { - sc := -1 - if result.csrlr.Response.Response != nil { - sc = result.csrlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.csrlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", resp, "Failure sending request") - return - } - - result.csrlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "List", resp, "Failure responding to request") - return - } - if result.csrlr.hasNextLink() && result.csrlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client CloudServiceRolesClient) ListPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/roles", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServiceRolesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client CloudServiceRolesClient) ListResponder(resp *http.Response) (result CloudServiceRoleListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client CloudServiceRolesClient) listNextResults(ctx context.Context, lastResults CloudServiceRoleListResult) (result CloudServiceRoleListResult, err error) { - req, err := lastResults.cloudServiceRoleListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRolesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServiceRolesClient) ListComplete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceRoleListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRolesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, cloudServiceName) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservices.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservices.go deleted file mode 100644 index 7086dd644a08..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservices.go +++ /dev/null @@ -1,1198 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CloudServicesClient is the compute Client -type CloudServicesClient struct { - BaseClient -} - -// NewCloudServicesClient creates an instance of the CloudServicesClient client. -func NewCloudServicesClient(subscriptionID string) CloudServicesClient { - return NewCloudServicesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCloudServicesClientWithBaseURI creates an instance of the CloudServicesClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewCloudServicesClientWithBaseURI(baseURI string, subscriptionID string) CloudServicesClient { - return CloudServicesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a cloud service. Please note some properties can be set only during cloud service -// creation. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - the cloud service object. -func (client CloudServicesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudService) (result CloudServicesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.Location", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.CloudServicesClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client CloudServicesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudService) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - parameters.ID = nil - parameters.Name = nil - parameters.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) CreateOrUpdateSender(req *http.Request) (future CloudServicesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) CreateOrUpdateResponder(resp *http.Response) (result CloudService, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesClient) Delete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client CloudServicesClient) DeletePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) DeleteSender(req *http.Request) (future CloudServicesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// DeleteInstances deletes role instances in a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - list of cloud service role instance names. -func (client CloudServicesClient) DeleteInstances(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesDeleteInstancesFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.DeleteInstances") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.CloudServicesClient", "DeleteInstances", err.Error()) - } - - req, err := client.DeleteInstancesPreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "DeleteInstances", nil, "Failure preparing request") - return - } - - result, err = client.DeleteInstancesSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "DeleteInstances", result.Response(), "Failure sending request") - return - } - - return -} - -// DeleteInstancesPreparer prepares the DeleteInstances request. -func (client CloudServicesClient) DeleteInstancesPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/delete", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteInstancesSender sends the DeleteInstances request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) DeleteInstancesSender(req *http.Request) (future CloudServicesDeleteInstancesFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteInstancesResponder handles the response to the DeleteInstances request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) DeleteInstancesResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get display information about a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesClient) Get(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudService, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CloudServicesClient) GetPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) GetResponder(resp *http.Response) (result CloudService, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetInstanceView gets the status of a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesClient) GetInstanceView(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServiceInstanceView, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.GetInstanceView") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", nil, "Failure preparing request") - return - } - - resp, err := client.GetInstanceViewSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", resp, "Failure sending request") - return - } - - result, err = client.GetInstanceViewResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "GetInstanceView", resp, "Failure responding to request") - return - } - - return -} - -// GetInstanceViewPreparer prepares the GetInstanceView request. -func (client CloudServicesClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/instanceView", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetInstanceViewSender sends the GetInstanceView request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) GetInstanceViewResponder(resp *http.Response) (result CloudServiceInstanceView, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all cloud services under a resource group. Use nextLink property in the response to get the next -// page of Cloud Services. Do this till nextLink is null to fetch all the Cloud Services. -// Parameters: -// resourceGroupName - name of the resource group. -func (client CloudServicesClient) List(ctx context.Context, resourceGroupName string) (result CloudServiceListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.List") - defer func() { - sc := -1 - if result.cslr.Response.Response != nil { - sc = result.cslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.cslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", resp, "Failure sending request") - return - } - - result.cslr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "List", resp, "Failure responding to request") - return - } - if result.cslr.hasNextLink() && result.cslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client CloudServicesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) ListResponder(resp *http.Response) (result CloudServiceListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client CloudServicesClient) listNextResults(ctx context.Context, lastResults CloudServiceListResult) (result CloudServiceListResult, err error) { - req, err := lastResults.cloudServiceListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServicesClient) ListComplete(ctx context.Context, resourceGroupName string) (result CloudServiceListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName) - return -} - -// ListAll gets a list of all cloud services in the subscription, regardless of the associated resource group. Use -// nextLink property in the response to get the next page of Cloud Services. Do this till nextLink is null to fetch all -// the Cloud Services. -func (client CloudServicesClient) ListAll(ctx context.Context) (result CloudServiceListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.ListAll") - defer func() { - sc := -1 - if result.cslr.Response.Response != nil { - sc = result.cslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listAllNextResults - req, err := client.ListAllPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", nil, "Failure preparing request") - return - } - - resp, err := client.ListAllSender(req) - if err != nil { - result.cslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", resp, "Failure sending request") - return - } - - result.cslr, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "ListAll", resp, "Failure responding to request") - return - } - if result.cslr.hasNextLink() && result.cslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListAllPreparer prepares the ListAll request. -func (client CloudServicesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/cloudServices", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAllSender sends the ListAll request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) ListAllSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAllResponder handles the response to the ListAll request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) ListAllResponder(resp *http.Response) (result CloudServiceListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAllNextResults retrieves the next set of results, if any. -func (client CloudServicesClient) listAllNextResults(ctx context.Context, lastResults CloudServiceListResult) (result CloudServiceListResult, err error) { - req, err := lastResults.cloudServiceListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAllSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "listAllNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAllComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServicesClient) ListAllComplete(ctx context.Context) (result CloudServiceListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.ListAll") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListAll(ctx) - return -} - -// PowerOff power off the cloud service. Note that resources are still attached and you are getting charged for the -// resources. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesClient) PowerOff(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesPowerOffFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.PowerOff") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PowerOffPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "PowerOff", nil, "Failure preparing request") - return - } - - result, err = client.PowerOffSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "PowerOff", result.Response(), "Failure sending request") - return - } - - return -} - -// PowerOffPreparer prepares the PowerOff request. -func (client CloudServicesClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/poweroff", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PowerOffSender sends the PowerOff request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) PowerOffSender(req *http.Request) (future CloudServicesPowerOffFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PowerOffResponder handles the response to the PowerOff request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Rebuild rebuild Role Instances reinstalls the operating system on instances of web roles or worker roles and -// initializes the storage resources that are used by them. If you do not want to initialize storage resources, you can -// use Reimage Role Instances. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - list of cloud service role instance names. -func (client CloudServicesClient) Rebuild(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesRebuildFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Rebuild") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.CloudServicesClient", "Rebuild", err.Error()) - } - - req, err := client.RebuildPreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Rebuild", nil, "Failure preparing request") - return - } - - result, err = client.RebuildSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Rebuild", result.Response(), "Failure sending request") - return - } - - return -} - -// RebuildPreparer prepares the Rebuild request. -func (client CloudServicesClient) RebuildPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/rebuild", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RebuildSender sends the Rebuild request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) RebuildSender(req *http.Request) (future CloudServicesRebuildFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RebuildResponder handles the response to the Rebuild request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) RebuildResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reimage reimage asynchronous operation reinstalls the operating system on instances of web roles or worker roles. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - list of cloud service role instance names. -func (client CloudServicesClient) Reimage(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesReimageFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Reimage") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.CloudServicesClient", "Reimage", err.Error()) - } - - req, err := client.ReimagePreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Reimage", nil, "Failure preparing request") - return - } - - result, err = client.ReimageSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Reimage", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimagePreparer prepares the Reimage request. -func (client CloudServicesClient) ReimagePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/reimage", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageSender sends the Reimage request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) ReimageSender(req *http.Request) (future CloudServicesReimageFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageResponder handles the response to the Reimage request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Restart restarts one or more role instances in a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - list of cloud service role instance names. -func (client CloudServicesClient) Restart(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (result CloudServicesRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RoleInstances", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.CloudServicesClient", "Restart", err.Error()) - } - - req, err := client.RestartPreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client CloudServicesClient) RestartPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *RoleInstances) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) RestartSender(req *http.Request) (future CloudServicesRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Start starts the cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesClient) Start(ctx context.Context, resourceGroupName string, cloudServiceName string) (result CloudServicesStartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Start") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Start", nil, "Failure preparing request") - return - } - - result, err = client.StartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Start", result.Response(), "Failure sending request") - return - } - - return -} - -// StartPreparer prepares the Start request. -func (client CloudServicesClient) StartPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/start", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartSender sends the Start request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) StartSender(req *http.Request) (future CloudServicesStartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartResponder handles the response to the Start request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update update a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// parameters - the cloud service object. -func (client CloudServicesClient) Update(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudServiceUpdate) (result CloudServicesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, cloudServiceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client CloudServicesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, parameters *CloudServiceUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesClient) UpdateSender(req *http.Request) (future CloudServicesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client CloudServicesClient) UpdateResponder(resp *http.Response) (result CloudService, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservicesupdatedomain.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservicesupdatedomain.go deleted file mode 100644 index eabe4deefce2..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/cloudservicesupdatedomain.go +++ /dev/null @@ -1,319 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CloudServicesUpdateDomainClient is the compute Client -type CloudServicesUpdateDomainClient struct { - BaseClient -} - -// NewCloudServicesUpdateDomainClient creates an instance of the CloudServicesUpdateDomainClient client. -func NewCloudServicesUpdateDomainClient(subscriptionID string) CloudServicesUpdateDomainClient { - return NewCloudServicesUpdateDomainClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCloudServicesUpdateDomainClientWithBaseURI creates an instance of the CloudServicesUpdateDomainClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewCloudServicesUpdateDomainClientWithBaseURI(baseURI string, subscriptionID string) CloudServicesUpdateDomainClient { - return CloudServicesUpdateDomainClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// GetUpdateDomain gets the specified update domain of a cloud service. Use nextLink property in the response to get -// the next page of update domains. Do this till nextLink is null to fetch all the update domains. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// updateDomain - specifies an integer value that identifies the update domain. Update domains are identified -// with a zero-based index: the first update domain has an ID of 0, the second has an ID of 1, and so on. -func (client CloudServicesUpdateDomainClient) GetUpdateDomain(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32) (result UpdateDomain, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.GetUpdateDomain") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetUpdateDomainPreparer(ctx, resourceGroupName, cloudServiceName, updateDomain) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", nil, "Failure preparing request") - return - } - - resp, err := client.GetUpdateDomainSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", resp, "Failure sending request") - return - } - - result, err = client.GetUpdateDomainResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "GetUpdateDomain", resp, "Failure responding to request") - return - } - - return -} - -// GetUpdateDomainPreparer prepares the GetUpdateDomain request. -func (client CloudServicesUpdateDomainClient) GetUpdateDomainPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "updateDomain": autorest.Encode("path", updateDomain), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetUpdateDomainSender sends the GetUpdateDomain request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesUpdateDomainClient) GetUpdateDomainSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetUpdateDomainResponder handles the response to the GetUpdateDomain request. The method always -// closes the http.Response Body. -func (client CloudServicesUpdateDomainClient) GetUpdateDomainResponder(resp *http.Response) (result UpdateDomain, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListUpdateDomains gets a list of all update domains in a cloud service. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -func (client CloudServicesUpdateDomainClient) ListUpdateDomains(ctx context.Context, resourceGroupName string, cloudServiceName string) (result UpdateDomainListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.ListUpdateDomains") - defer func() { - sc := -1 - if result.udlr.Response.Response != nil { - sc = result.udlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listUpdateDomainsNextResults - req, err := client.ListUpdateDomainsPreparer(ctx, resourceGroupName, cloudServiceName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", nil, "Failure preparing request") - return - } - - resp, err := client.ListUpdateDomainsSender(req) - if err != nil { - result.udlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", resp, "Failure sending request") - return - } - - result.udlr, err = client.ListUpdateDomainsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "ListUpdateDomains", resp, "Failure responding to request") - return - } - if result.udlr.hasNextLink() && result.udlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListUpdateDomainsPreparer prepares the ListUpdateDomains request. -func (client CloudServicesUpdateDomainClient) ListUpdateDomainsPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListUpdateDomainsSender sends the ListUpdateDomains request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesUpdateDomainClient) ListUpdateDomainsSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListUpdateDomainsResponder handles the response to the ListUpdateDomains request. The method always -// closes the http.Response Body. -func (client CloudServicesUpdateDomainClient) ListUpdateDomainsResponder(resp *http.Response) (result UpdateDomainListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listUpdateDomainsNextResults retrieves the next set of results, if any. -func (client CloudServicesUpdateDomainClient) listUpdateDomainsNextResults(ctx context.Context, lastResults UpdateDomainListResult) (result UpdateDomainListResult, err error) { - req, err := lastResults.updateDomainListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListUpdateDomainsSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", resp, "Failure sending next results request") - } - result, err = client.ListUpdateDomainsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "listUpdateDomainsNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListUpdateDomainsComplete enumerates all values, automatically crossing page boundaries as required. -func (client CloudServicesUpdateDomainClient) ListUpdateDomainsComplete(ctx context.Context, resourceGroupName string, cloudServiceName string) (result UpdateDomainListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.ListUpdateDomains") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListUpdateDomains(ctx, resourceGroupName, cloudServiceName) - return -} - -// WalkUpdateDomain updates the role instances in the specified update domain. -// Parameters: -// resourceGroupName - name of the resource group. -// cloudServiceName - name of the cloud service. -// updateDomain - specifies an integer value that identifies the update domain. Update domains are identified -// with a zero-based index: the first update domain has an ID of 0, the second has an ID of 1, and so on. -// parameters - the update domain object. -func (client CloudServicesUpdateDomainClient) WalkUpdateDomain(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32, parameters *UpdateDomain) (result CloudServicesUpdateDomainWalkUpdateDomainFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServicesUpdateDomainClient.WalkUpdateDomain") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.WalkUpdateDomainPreparer(ctx, resourceGroupName, cloudServiceName, updateDomain, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "WalkUpdateDomain", nil, "Failure preparing request") - return - } - - result, err = client.WalkUpdateDomainSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainClient", "WalkUpdateDomain", result.Response(), "Failure sending request") - return - } - - return -} - -// WalkUpdateDomainPreparer prepares the WalkUpdateDomain request. -func (client CloudServicesUpdateDomainClient) WalkUpdateDomainPreparer(ctx context.Context, resourceGroupName string, cloudServiceName string, updateDomain int32, parameters *UpdateDomain) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "cloudServiceName": autorest.Encode("path", cloudServiceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "updateDomain": autorest.Encode("path", updateDomain), - } - - const APIVersion = "2021-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - parameters.ID = nil - parameters.Name = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}/updateDomains/{updateDomain}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// WalkUpdateDomainSender sends the WalkUpdateDomain request. The method will close the -// http.Response Body if it receives an error. -func (client CloudServicesUpdateDomainClient) WalkUpdateDomainSender(req *http.Request) (future CloudServicesUpdateDomainWalkUpdateDomainFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// WalkUpdateDomainResponder handles the response to the WalkUpdateDomain request. The method always -// closes the http.Response Body. -func (client CloudServicesUpdateDomainClient) WalkUpdateDomainResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleries.go deleted file mode 100644 index 99596387171d..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleries.go +++ /dev/null @@ -1,108 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CommunityGalleriesClient is the compute Client -type CommunityGalleriesClient struct { - BaseClient -} - -// NewCommunityGalleriesClient creates an instance of the CommunityGalleriesClient client. -func NewCommunityGalleriesClient(subscriptionID string) CommunityGalleriesClient { - return NewCommunityGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCommunityGalleriesClientWithBaseURI creates an instance of the CommunityGalleriesClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewCommunityGalleriesClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleriesClient { - return CommunityGalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a community gallery by gallery public name. -// Parameters: -// location - resource location. -// publicGalleryName - the public name of the community gallery. -func (client CommunityGalleriesClient) Get(ctx context.Context, location string, publicGalleryName string) (result CommunityGallery, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleriesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, publicGalleryName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleriesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CommunityGalleriesClient) GetPreparer(ctx context.Context, location string, publicGalleryName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "publicGalleryName": autorest.Encode("path", publicGalleryName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CommunityGalleriesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CommunityGalleriesClient) GetResponder(resp *http.Response) (result CommunityGallery, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimages.go deleted file mode 100644 index ef82a37bc941..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimages.go +++ /dev/null @@ -1,110 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CommunityGalleryImagesClient is the compute Client -type CommunityGalleryImagesClient struct { - BaseClient -} - -// NewCommunityGalleryImagesClient creates an instance of the CommunityGalleryImagesClient client. -func NewCommunityGalleryImagesClient(subscriptionID string) CommunityGalleryImagesClient { - return NewCommunityGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCommunityGalleryImagesClientWithBaseURI creates an instance of the CommunityGalleryImagesClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewCommunityGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleryImagesClient { - return CommunityGalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a community gallery image. -// Parameters: -// location - resource location. -// publicGalleryName - the public name of the community gallery. -// galleryImageName - the name of the community gallery image definition. -func (client CommunityGalleryImagesClient) Get(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (result CommunityGalleryImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, publicGalleryName, galleryImageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CommunityGalleryImagesClient) GetPreparer(ctx context.Context, location string, publicGalleryName string, galleryImageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "location": autorest.Encode("path", location), - "publicGalleryName": autorest.Encode("path", publicGalleryName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CommunityGalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CommunityGalleryImagesClient) GetResponder(resp *http.Response) (result CommunityGalleryImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimageversions.go deleted file mode 100644 index 03d67523dff7..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/communitygalleryimageversions.go +++ /dev/null @@ -1,114 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CommunityGalleryImageVersionsClient is the compute Client -type CommunityGalleryImageVersionsClient struct { - BaseClient -} - -// NewCommunityGalleryImageVersionsClient creates an instance of the CommunityGalleryImageVersionsClient client. -func NewCommunityGalleryImageVersionsClient(subscriptionID string) CommunityGalleryImageVersionsClient { - return NewCommunityGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCommunityGalleryImageVersionsClientWithBaseURI creates an instance of the CommunityGalleryImageVersionsClient -// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI -// (sovereign clouds, Azure stack). -func NewCommunityGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) CommunityGalleryImageVersionsClient { - return CommunityGalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a community gallery image version. -// Parameters: -// location - resource location. -// publicGalleryName - the public name of the community gallery. -// galleryImageName - the name of the community gallery image definition. -// galleryImageVersionName - the name of the community gallery image version. Needs to follow semantic version -// name pattern: The allowed characters are digit and period. Digits must be within the range of a 32-bit -// integer. Format: .. -func (client CommunityGalleryImageVersionsClient) Get(ctx context.Context, location string, publicGalleryName string, galleryImageName string, galleryImageVersionName string) (result CommunityGalleryImageVersion, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CommunityGalleryImageVersionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, publicGalleryName, galleryImageName, galleryImageVersionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CommunityGalleryImageVersionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CommunityGalleryImageVersionsClient) GetPreparer(ctx context.Context, location string, publicGalleryName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "location": autorest.Encode("path", location), - "publicGalleryName": autorest.Encode("path", publicGalleryName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/communityGalleries/{publicGalleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CommunityGalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CommunityGalleryImageVersionsClient) GetResponder(resp *http.Response) (result CommunityGalleryImageVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhostgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhostgroups.go deleted file mode 100644 index 0b7ea6ca3f59..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhostgroups.go +++ /dev/null @@ -1,589 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DedicatedHostGroupsClient is the compute Client -type DedicatedHostGroupsClient struct { - BaseClient -} - -// NewDedicatedHostGroupsClient creates an instance of the DedicatedHostGroupsClient client. -func NewDedicatedHostGroupsClient(subscriptionID string) DedicatedHostGroupsClient { - return NewDedicatedHostGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDedicatedHostGroupsClientWithBaseURI creates an instance of the DedicatedHostGroupsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewDedicatedHostGroupsClientWithBaseURI(baseURI string, subscriptionID string) DedicatedHostGroupsClient { - return DedicatedHostGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a dedicated host group. For details of Dedicated Host and Dedicated Host Groups -// please see [Dedicated Host Documentation] (https://go.microsoft.com/fwlink/?linkid=2082596) -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// parameters - parameters supplied to the Create Dedicated Host Group. -func (client DedicatedHostGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroup) (result DedicatedHostGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties.PlatformFaultDomainCount", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.DedicatedHostGroupProperties.PlatformFaultDomainCount", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}, - }}}}}); err != nil { - return result, validation.NewError("compute.DedicatedHostGroupsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, hostGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client DedicatedHostGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroup) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result DedicatedHostGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a dedicated host group. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -func (client DedicatedHostGroupsClient) Delete(ctx context.Context, resourceGroupName string, hostGroupName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, hostGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client DedicatedHostGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, hostGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a dedicated host group. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance -// views of the dedicated hosts under the dedicated host group. 'UserData' is not supported for dedicated host -// group. -func (client DedicatedHostGroupsClient) Get(ctx context.Context, resourceGroupName string, hostGroupName string, expand InstanceViewTypes) (result DedicatedHostGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, hostGroupName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DedicatedHostGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) GetResponder(resp *http.Response) (result DedicatedHostGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByResourceGroup lists all of the dedicated host groups in the specified resource group. Use the nextLink -// property in the response to get the next page of dedicated host groups. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client DedicatedHostGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DedicatedHostGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.dhglr.Response.Response != nil { - sc = result.dhglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.dhglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.dhglr, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.dhglr.hasNextLink() && result.dhglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client DedicatedHostGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result DedicatedHostGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client DedicatedHostGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults DedicatedHostGroupListResult) (result DedicatedHostGroupListResult, err error) { - req, err := lastResults.dedicatedHostGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client DedicatedHostGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DedicatedHostGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// ListBySubscription lists all of the dedicated host groups in the subscription. Use the nextLink property in the -// response to get the next page of dedicated host groups. -func (client DedicatedHostGroupsClient) ListBySubscription(ctx context.Context) (result DedicatedHostGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.dhglr.Response.Response != nil { - sc = result.dhglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listBySubscriptionNextResults - req, err := client.ListBySubscriptionPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", nil, "Failure preparing request") - return - } - - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.dhglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", resp, "Failure sending request") - return - } - - result.dhglr, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "ListBySubscription", resp, "Failure responding to request") - return - } - if result.dhglr.hasNextLink() && result.dhglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListBySubscriptionPreparer prepares the ListBySubscription request. -func (client DedicatedHostGroupsClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/hostGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListBySubscriptionSender sends the ListBySubscription request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result DedicatedHostGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listBySubscriptionNextResults retrieves the next set of results, if any. -func (client DedicatedHostGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults DedicatedHostGroupListResult) (result DedicatedHostGroupListResult, err error) { - req, err := lastResults.dedicatedHostGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") - } - result, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. -func (client DedicatedHostGroupsClient) ListBySubscriptionComplete(ctx context.Context) (result DedicatedHostGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListBySubscription(ctx) - return -} - -// Update update an dedicated host group. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// parameters - parameters supplied to the Update Dedicated Host Group operation. -func (client DedicatedHostGroupsClient) Update(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroupUpdate) (result DedicatedHostGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupsClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, hostGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostGroupsClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client DedicatedHostGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, parameters DedicatedHostGroupUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client DedicatedHostGroupsClient) UpdateResponder(resp *http.Response) (result DedicatedHostGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhosts.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhosts.go deleted file mode 100644 index 67a3daf017b5..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/dedicatedhosts.go +++ /dev/null @@ -1,575 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DedicatedHostsClient is the compute Client -type DedicatedHostsClient struct { - BaseClient -} - -// NewDedicatedHostsClient creates an instance of the DedicatedHostsClient client. -func NewDedicatedHostsClient(subscriptionID string) DedicatedHostsClient { - return NewDedicatedHostsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDedicatedHostsClientWithBaseURI creates an instance of the DedicatedHostsClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewDedicatedHostsClientWithBaseURI(baseURI string, subscriptionID string) DedicatedHostsClient { - return DedicatedHostsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a dedicated host . -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// hostName - the name of the dedicated host . -// parameters - parameters supplied to the Create Dedicated Host. -func (client DedicatedHostsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHost) (result DedicatedHostsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.DedicatedHostProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.DedicatedHostProperties.PlatformFaultDomain", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.DedicatedHostProperties.PlatformFaultDomain", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}, - }}, - {Target: "parameters.Sku", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.DedicatedHostsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, hostGroupName, hostName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client DedicatedHostsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHost) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "hostName": autorest.Encode("path", hostName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) CreateOrUpdateSender(req *http.Request) (future DedicatedHostsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) CreateOrUpdateResponder(resp *http.Response) (result DedicatedHost, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a dedicated host. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// hostName - the name of the dedicated host. -func (client DedicatedHostsClient) Delete(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (result DedicatedHostsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, hostGroupName, hostName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client DedicatedHostsClient) DeletePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "hostName": autorest.Encode("path", hostName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) DeleteSender(req *http.Request) (future DedicatedHostsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a dedicated host. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// hostName - the name of the dedicated host. -// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance -// views of the dedicated host. 'UserData' is not supported for dedicated host. -func (client DedicatedHostsClient) Get(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, expand InstanceViewTypes) (result DedicatedHost, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, hostGroupName, hostName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DedicatedHostsClient) GetPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "hostName": autorest.Encode("path", hostName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) GetResponder(resp *http.Response) (result DedicatedHost, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByHostGroup lists all of the dedicated hosts in the specified dedicated host group. Use the nextLink property in -// the response to get the next page of dedicated hosts. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -func (client DedicatedHostsClient) ListByHostGroup(ctx context.Context, resourceGroupName string, hostGroupName string) (result DedicatedHostListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.ListByHostGroup") - defer func() { - sc := -1 - if result.dhlr.Response.Response != nil { - sc = result.dhlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByHostGroupNextResults - req, err := client.ListByHostGroupPreparer(ctx, resourceGroupName, hostGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByHostGroupSender(req) - if err != nil { - result.dhlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", resp, "Failure sending request") - return - } - - result.dhlr, err = client.ListByHostGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "ListByHostGroup", resp, "Failure responding to request") - return - } - if result.dhlr.hasNextLink() && result.dhlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByHostGroupPreparer prepares the ListByHostGroup request. -func (client DedicatedHostsClient) ListByHostGroupPreparer(ctx context.Context, resourceGroupName string, hostGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByHostGroupSender sends the ListByHostGroup request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) ListByHostGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByHostGroupResponder handles the response to the ListByHostGroup request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) ListByHostGroupResponder(resp *http.Response) (result DedicatedHostListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByHostGroupNextResults retrieves the next set of results, if any. -func (client DedicatedHostsClient) listByHostGroupNextResults(ctx context.Context, lastResults DedicatedHostListResult) (result DedicatedHostListResult, err error) { - req, err := lastResults.dedicatedHostListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByHostGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByHostGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "listByHostGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByHostGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client DedicatedHostsClient) ListByHostGroupComplete(ctx context.Context, resourceGroupName string, hostGroupName string) (result DedicatedHostListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.ListByHostGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByHostGroup(ctx, resourceGroupName, hostGroupName) - return -} - -// Restart restart the dedicated host. The operation will complete successfully once the dedicated host has restarted -// and is running. To determine the health of VMs deployed on the dedicated host after the restart check the Resource -// Health Center in the Azure Portal. Please refer to -// https://docs.microsoft.com/azure/service-health/resource-health-overview for more details. -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// hostName - the name of the dedicated host. -func (client DedicatedHostsClient) Restart(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (result DedicatedHostsRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RestartPreparer(ctx, resourceGroupName, hostGroupName, hostName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client DedicatedHostsClient) RestartPreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "hostName": autorest.Encode("path", hostName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) RestartSender(req *http.Request) (future DedicatedHostsRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update update an dedicated host . -// Parameters: -// resourceGroupName - the name of the resource group. -// hostGroupName - the name of the dedicated host group. -// hostName - the name of the dedicated host . -// parameters - parameters supplied to the Update Dedicated Host operation. -func (client DedicatedHostsClient) Update(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHostUpdate) (result DedicatedHostsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, hostGroupName, hostName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client DedicatedHostsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, hostGroupName string, hostName string, parameters DedicatedHostUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "hostGroupName": autorest.Encode("path", hostGroupName), - "hostName": autorest.Encode("path", hostName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}/hosts/{hostName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client DedicatedHostsClient) UpdateSender(req *http.Request) (future DedicatedHostsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client DedicatedHostsClient) UpdateResponder(resp *http.Response) (result DedicatedHost, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskaccesses.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskaccesses.go deleted file mode 100644 index 0026f2946e72..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskaccesses.go +++ /dev/null @@ -1,1045 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DiskAccessesClient is the compute Client -type DiskAccessesClient struct { - BaseClient -} - -// NewDiskAccessesClient creates an instance of the DiskAccessesClient client. -func NewDiskAccessesClient(subscriptionID string) DiskAccessesClient { - return NewDiskAccessesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDiskAccessesClientWithBaseURI creates an instance of the DiskAccessesClient client using a custom endpoint. Use -// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewDiskAccessesClientWithBaseURI(baseURI string, subscriptionID string) DiskAccessesClient { - return DiskAccessesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate creates or updates a disk access resource -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// diskAccess - disk access object supplied in the body of the Put disk access operation. -func (client DiskAccessesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccess) (result DiskAccessesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskAccessName, diskAccess) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client DiskAccessesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccess) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), - autorest.WithJSON(diskAccess), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) CreateOrUpdateSender(req *http.Request) (future DiskAccessesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) CreateOrUpdateResponder(resp *http.Response) (result DiskAccess, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes a disk access resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskAccessesClient) Delete(ctx context.Context, resourceGroupName string, diskAccessName string) (result DiskAccessesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, diskAccessName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client DiskAccessesClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) DeleteSender(req *http.Request) (future DiskAccessesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// DeleteAPrivateEndpointConnection deletes a private endpoint connection under a disk access resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// privateEndpointConnectionName - the name of the private endpoint connection. -func (client DiskAccessesClient) DeleteAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (result DiskAccessesDeleteAPrivateEndpointConnectionFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.DeleteAPrivateEndpointConnection") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeleteAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "DeleteAPrivateEndpointConnection", nil, "Failure preparing request") - return - } - - result, err = client.DeleteAPrivateEndpointConnectionSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "DeleteAPrivateEndpointConnection", result.Response(), "Failure sending request") - return - } - - return -} - -// DeleteAPrivateEndpointConnectionPreparer prepares the DeleteAPrivateEndpointConnection request. -func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteAPrivateEndpointConnectionSender sends the DeleteAPrivateEndpointConnection request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionSender(req *http.Request) (future DiskAccessesDeleteAPrivateEndpointConnectionFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteAPrivateEndpointConnectionResponder handles the response to the DeleteAPrivateEndpointConnection request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) DeleteAPrivateEndpointConnectionResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets information about a disk access resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskAccessesClient) Get(ctx context.Context, resourceGroupName string, diskAccessName string) (result DiskAccess, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, diskAccessName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DiskAccessesClient) GetPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) GetResponder(resp *http.Response) (result DiskAccess, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetAPrivateEndpointConnection gets information about a private endpoint connection under a disk access resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// privateEndpointConnectionName - the name of the private endpoint connection. -func (client DiskAccessesClient) GetAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (result PrivateEndpointConnection, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.GetAPrivateEndpointConnection") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", nil, "Failure preparing request") - return - } - - resp, err := client.GetAPrivateEndpointConnectionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", resp, "Failure sending request") - return - } - - result, err = client.GetAPrivateEndpointConnectionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetAPrivateEndpointConnection", resp, "Failure responding to request") - return - } - - return -} - -// GetAPrivateEndpointConnectionPreparer prepares the GetAPrivateEndpointConnection request. -func (client DiskAccessesClient) GetAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetAPrivateEndpointConnectionSender sends the GetAPrivateEndpointConnection request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) GetAPrivateEndpointConnectionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetAPrivateEndpointConnectionResponder handles the response to the GetAPrivateEndpointConnection request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) GetAPrivateEndpointConnectionResponder(resp *http.Response) (result PrivateEndpointConnection, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetPrivateLinkResources gets the private link resources possible under disk access resource -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskAccessesClient) GetPrivateLinkResources(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateLinkResourceListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.GetPrivateLinkResources") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPrivateLinkResourcesPreparer(ctx, resourceGroupName, diskAccessName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", nil, "Failure preparing request") - return - } - - resp, err := client.GetPrivateLinkResourcesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", resp, "Failure sending request") - return - } - - result, err = client.GetPrivateLinkResourcesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "GetPrivateLinkResources", resp, "Failure responding to request") - return - } - - return -} - -// GetPrivateLinkResourcesPreparer prepares the GetPrivateLinkResources request. -func (client DiskAccessesClient) GetPrivateLinkResourcesPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateLinkResources", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetPrivateLinkResourcesSender sends the GetPrivateLinkResources request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) GetPrivateLinkResourcesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetPrivateLinkResourcesResponder handles the response to the GetPrivateLinkResources request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) GetPrivateLinkResourcesResponder(resp *http.Response) (result PrivateLinkResourceListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all the disk access resources under a subscription. -func (client DiskAccessesClient) List(ctx context.Context) (result DiskAccessListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.List") - defer func() { - sc := -1 - if result.dal.Response.Response != nil { - sc = result.dal.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.dal.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", resp, "Failure sending request") - return - } - - result.dal, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "List", resp, "Failure responding to request") - return - } - if result.dal.hasNextLink() && result.dal.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client DiskAccessesClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskAccesses", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) ListResponder(resp *http.Response) (result DiskAccessList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client DiskAccessesClient) listNextResults(ctx context.Context, lastResults DiskAccessList) (result DiskAccessList, err error) { - req, err := lastResults.diskAccessListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskAccessesClient) ListComplete(ctx context.Context) (result DiskAccessListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListByResourceGroup lists all the disk access resources under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client DiskAccessesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskAccessListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.dal.Response.Response != nil { - sc = result.dal.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.dal.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.dal, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.dal.hasNextLink() && result.dal.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client DiskAccessesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) ListByResourceGroupResponder(resp *http.Response) (result DiskAccessList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client DiskAccessesClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskAccessList) (result DiskAccessList, err error) { - req, err := lastResults.diskAccessListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskAccessesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskAccessListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// ListPrivateEndpointConnections list information about private endpoint connections under a disk access resource -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskAccessesClient) ListPrivateEndpointConnections(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateEndpointConnectionListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListPrivateEndpointConnections") - defer func() { - sc := -1 - if result.peclr.Response.Response != nil { - sc = result.peclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listPrivateEndpointConnectionsNextResults - req, err := client.ListPrivateEndpointConnectionsPreparer(ctx, resourceGroupName, diskAccessName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", nil, "Failure preparing request") - return - } - - resp, err := client.ListPrivateEndpointConnectionsSender(req) - if err != nil { - result.peclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", resp, "Failure sending request") - return - } - - result.peclr, err = client.ListPrivateEndpointConnectionsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "ListPrivateEndpointConnections", resp, "Failure responding to request") - return - } - if result.peclr.hasNextLink() && result.peclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPrivateEndpointConnectionsPreparer prepares the ListPrivateEndpointConnections request. -func (client DiskAccessesClient) ListPrivateEndpointConnectionsPreparer(ctx context.Context, resourceGroupName string, diskAccessName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListPrivateEndpointConnectionsSender sends the ListPrivateEndpointConnections request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) ListPrivateEndpointConnectionsSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListPrivateEndpointConnectionsResponder handles the response to the ListPrivateEndpointConnections request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) ListPrivateEndpointConnectionsResponder(resp *http.Response) (result PrivateEndpointConnectionListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listPrivateEndpointConnectionsNextResults retrieves the next set of results, if any. -func (client DiskAccessesClient) listPrivateEndpointConnectionsNextResults(ctx context.Context, lastResults PrivateEndpointConnectionListResult) (result PrivateEndpointConnectionListResult, err error) { - req, err := lastResults.privateEndpointConnectionListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListPrivateEndpointConnectionsSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", resp, "Failure sending next results request") - } - result, err = client.ListPrivateEndpointConnectionsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "listPrivateEndpointConnectionsNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListPrivateEndpointConnectionsComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskAccessesClient) ListPrivateEndpointConnectionsComplete(ctx context.Context, resourceGroupName string, diskAccessName string) (result PrivateEndpointConnectionListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.ListPrivateEndpointConnections") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListPrivateEndpointConnections(ctx, resourceGroupName, diskAccessName) - return -} - -// Update updates (patches) a disk access resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// diskAccess - disk access object supplied in the body of the Patch disk access operation. -func (client DiskAccessesClient) Update(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccessUpdate) (result DiskAccessesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, diskAccessName, diskAccess) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client DiskAccessesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskAccessName string, diskAccess DiskAccessUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}", pathParameters), - autorest.WithJSON(diskAccess), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) UpdateSender(req *http.Request) (future DiskAccessesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) UpdateResponder(resp *http.Response) (result DiskAccess, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// UpdateAPrivateEndpointConnection approve or reject a private endpoint connection under disk access resource, this -// can't be used to create a new private endpoint connection. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskAccessName - the name of the disk access resource that is being created. The name can't be changed after -// the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// privateEndpointConnectionName - the name of the private endpoint connection. -// privateEndpointConnection - private endpoint connection object supplied in the body of the Put private -// endpoint connection operation. -func (client DiskAccessesClient) UpdateAPrivateEndpointConnection(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string, privateEndpointConnection PrivateEndpointConnection) (result DiskAccessesUpdateAPrivateEndpointConnectionFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessesClient.UpdateAPrivateEndpointConnection") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: privateEndpointConnection, - Constraints: []validation.Constraint{{Target: "privateEndpointConnection.PrivateEndpointConnectionProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "privateEndpointConnection.PrivateEndpointConnectionProperties.PrivateLinkServiceConnectionState", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", err.Error()) - } - - req, err := client.UpdateAPrivateEndpointConnectionPreparer(ctx, resourceGroupName, diskAccessName, privateEndpointConnectionName, privateEndpointConnection) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", nil, "Failure preparing request") - return - } - - result, err = client.UpdateAPrivateEndpointConnectionSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesClient", "UpdateAPrivateEndpointConnection", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdateAPrivateEndpointConnectionPreparer prepares the UpdateAPrivateEndpointConnection request. -func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionPreparer(ctx context.Context, resourceGroupName string, diskAccessName string, privateEndpointConnectionName string, privateEndpointConnection PrivateEndpointConnection) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskAccessName": autorest.Encode("path", diskAccessName), - "privateEndpointConnectionName": autorest.Encode("path", privateEndpointConnectionName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - privateEndpointConnection.ID = nil - privateEndpointConnection.Name = nil - privateEndpointConnection.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskAccesses/{diskAccessName}/privateEndpointConnections/{privateEndpointConnectionName}", pathParameters), - autorest.WithJSON(privateEndpointConnection), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateAPrivateEndpointConnectionSender sends the UpdateAPrivateEndpointConnection request. The method will close the -// http.Response Body if it receives an error. -func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionSender(req *http.Request) (future DiskAccessesUpdateAPrivateEndpointConnectionFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateAPrivateEndpointConnectionResponder handles the response to the UpdateAPrivateEndpointConnection request. The method always -// closes the http.Response Body. -func (client DiskAccessesClient) UpdateAPrivateEndpointConnectionResponder(resp *http.Response) (result PrivateEndpointConnection, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskencryptionsets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskencryptionsets.go deleted file mode 100644 index ee62e9aa74ef..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskencryptionsets.go +++ /dev/null @@ -1,719 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DiskEncryptionSetsClient is the compute Client -type DiskEncryptionSetsClient struct { - BaseClient -} - -// NewDiskEncryptionSetsClient creates an instance of the DiskEncryptionSetsClient client. -func NewDiskEncryptionSetsClient(subscriptionID string) DiskEncryptionSetsClient { - return NewDiskEncryptionSetsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDiskEncryptionSetsClientWithBaseURI creates an instance of the DiskEncryptionSetsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewDiskEncryptionSetsClientWithBaseURI(baseURI string, subscriptionID string) DiskEncryptionSetsClient { - return DiskEncryptionSetsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate creates or updates a disk encryption set -// Parameters: -// resourceGroupName - the name of the resource group. -// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed -// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// diskEncryptionSet - disk encryption set object supplied in the body of the Put disk encryption set -// operation. -func (client DiskEncryptionSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSet) (result DiskEncryptionSetsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: diskEncryptionSet, - Constraints: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties.ActiveKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "diskEncryptionSet.EncryptionSetProperties.ActiveKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}}}, - }}}}}); err != nil { - return result, validation.NewError("compute.DiskEncryptionSetsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskEncryptionSetName, diskEncryptionSet) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client DiskEncryptionSetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSet) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), - autorest.WithJSON(diskEncryptionSet), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) CreateOrUpdateSender(req *http.Request) (future DiskEncryptionSetsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) CreateOrUpdateResponder(resp *http.Response) (result DiskEncryptionSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes a disk encryption set. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed -// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskEncryptionSetsClient) Delete(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result DiskEncryptionSetsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, diskEncryptionSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client DiskEncryptionSetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) DeleteSender(req *http.Request) (future DiskEncryptionSetsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets information about a disk encryption set. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed -// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskEncryptionSetsClient) Get(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result DiskEncryptionSet, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, diskEncryptionSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DiskEncryptionSetsClient) GetPreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) GetResponder(resp *http.Response) (result DiskEncryptionSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all the disk encryption sets under a subscription. -func (client DiskEncryptionSetsClient) List(ctx context.Context) (result DiskEncryptionSetListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.List") - defer func() { - sc := -1 - if result.desl.Response.Response != nil { - sc = result.desl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.desl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", resp, "Failure sending request") - return - } - - result.desl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "List", resp, "Failure responding to request") - return - } - if result.desl.hasNextLink() && result.desl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client DiskEncryptionSetsClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/diskEncryptionSets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) ListResponder(resp *http.Response) (result DiskEncryptionSetList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client DiskEncryptionSetsClient) listNextResults(ctx context.Context, lastResults DiskEncryptionSetList) (result DiskEncryptionSetList, err error) { - req, err := lastResults.diskEncryptionSetListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskEncryptionSetsClient) ListComplete(ctx context.Context) (result DiskEncryptionSetListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListAssociatedResources lists all resources that are encrypted with this disk encryption set. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed -// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -func (client DiskEncryptionSetsClient) ListAssociatedResources(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result ResourceURIListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListAssociatedResources") - defer func() { - sc := -1 - if result.rul.Response.Response != nil { - sc = result.rul.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listAssociatedResourcesNextResults - req, err := client.ListAssociatedResourcesPreparer(ctx, resourceGroupName, diskEncryptionSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", nil, "Failure preparing request") - return - } - - resp, err := client.ListAssociatedResourcesSender(req) - if err != nil { - result.rul.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", resp, "Failure sending request") - return - } - - result.rul, err = client.ListAssociatedResourcesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListAssociatedResources", resp, "Failure responding to request") - return - } - if result.rul.hasNextLink() && result.rul.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListAssociatedResourcesPreparer prepares the ListAssociatedResources request. -func (client DiskEncryptionSetsClient) ListAssociatedResourcesPreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}/associatedResources", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAssociatedResourcesSender sends the ListAssociatedResources request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) ListAssociatedResourcesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAssociatedResourcesResponder handles the response to the ListAssociatedResources request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) ListAssociatedResourcesResponder(resp *http.Response) (result ResourceURIList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAssociatedResourcesNextResults retrieves the next set of results, if any. -func (client DiskEncryptionSetsClient) listAssociatedResourcesNextResults(ctx context.Context, lastResults ResourceURIList) (result ResourceURIList, err error) { - req, err := lastResults.resourceURIListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAssociatedResourcesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAssociatedResourcesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listAssociatedResourcesNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAssociatedResourcesComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskEncryptionSetsClient) ListAssociatedResourcesComplete(ctx context.Context, resourceGroupName string, diskEncryptionSetName string) (result ResourceURIListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListAssociatedResources") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListAssociatedResources(ctx, resourceGroupName, diskEncryptionSetName) - return -} - -// ListByResourceGroup lists all the disk encryption sets under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client DiskEncryptionSetsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskEncryptionSetListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.desl.Response.Response != nil { - sc = result.desl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.desl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.desl, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.desl.hasNextLink() && result.desl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client DiskEncryptionSetsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) ListByResourceGroupResponder(resp *http.Response) (result DiskEncryptionSetList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client DiskEncryptionSetsClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskEncryptionSetList) (result DiskEncryptionSetList, err error) { - req, err := lastResults.diskEncryptionSetListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskEncryptionSetsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskEncryptionSetListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// Update updates (patches) a disk encryption set. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskEncryptionSetName - the name of the disk encryption set that is being created. The name can't be changed -// after the disk encryption set is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The -// maximum name length is 80 characters. -// diskEncryptionSet - disk encryption set object supplied in the body of the Patch disk encryption set -// operation. -func (client DiskEncryptionSetsClient) Update(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSetUpdate) (result DiskEncryptionSetsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, diskEncryptionSetName, diskEncryptionSet) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client DiskEncryptionSetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskEncryptionSetName string, diskEncryptionSet DiskEncryptionSetUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskEncryptionSetName": autorest.Encode("path", diskEncryptionSetName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSetName}", pathParameters), - autorest.WithJSON(diskEncryptionSet), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client DiskEncryptionSetsClient) UpdateSender(req *http.Request) (future DiskEncryptionSetsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client DiskEncryptionSetsClient) UpdateResponder(resp *http.Response) (result DiskEncryptionSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskrestorepoint.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskrestorepoint.go deleted file mode 100644 index dcc708c62850..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/diskrestorepoint.go +++ /dev/null @@ -1,407 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DiskRestorePointClient is the compute Client -type DiskRestorePointClient struct { - BaseClient -} - -// NewDiskRestorePointClient creates an instance of the DiskRestorePointClient client. -func NewDiskRestorePointClient(subscriptionID string) DiskRestorePointClient { - return NewDiskRestorePointClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDiskRestorePointClientWithBaseURI creates an instance of the DiskRestorePointClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewDiskRestorePointClientWithBaseURI(baseURI string, subscriptionID string) DiskRestorePointClient { - return DiskRestorePointClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get disk restorePoint resource -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. -// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. -// diskRestorePointName - the name of the disk restore point created. -func (client DiskRestorePointClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (result DiskRestorePoint, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DiskRestorePointClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskRestorePointName": autorest.Encode("path", diskRestorePointName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmRestorePointName": autorest.Encode("path", VMRestorePointName), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DiskRestorePointClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DiskRestorePointClient) GetResponder(resp *http.Response) (result DiskRestorePoint, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GrantAccess grants access to a diskRestorePoint. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. -// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. -// diskRestorePointName - the name of the disk restore point created. -// grantAccessData - access data object supplied in the body of the get disk access operation. -func (client DiskRestorePointClient) GrantAccess(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string, grantAccessData GrantAccessData) (result DiskRestorePointGrantAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.GrantAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: grantAccessData, - Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.DiskRestorePointClient", "GrantAccess", err.Error()) - } - - req, err := client.GrantAccessPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName, grantAccessData) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "GrantAccess", nil, "Failure preparing request") - return - } - - result, err = client.GrantAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "GrantAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// GrantAccessPreparer prepares the GrantAccess request. -func (client DiskRestorePointClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string, grantAccessData GrantAccessData) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskRestorePointName": autorest.Encode("path", diskRestorePointName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmRestorePointName": autorest.Encode("path", VMRestorePointName), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/beginGetAccess", pathParameters), - autorest.WithJSON(grantAccessData), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GrantAccessSender sends the GrantAccess request. The method will close the -// http.Response Body if it receives an error. -func (client DiskRestorePointClient) GrantAccessSender(req *http.Request) (future DiskRestorePointGrantAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// GrantAccessResponder handles the response to the GrantAccess request. The method always -// closes the http.Response Body. -func (client DiskRestorePointClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByRestorePoint lists diskRestorePoints under a vmRestorePoint. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. -// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. -func (client DiskRestorePointClient) ListByRestorePoint(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (result DiskRestorePointListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.ListByRestorePoint") - defer func() { - sc := -1 - if result.drpl.Response.Response != nil { - sc = result.drpl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByRestorePointNextResults - req, err := client.ListByRestorePointPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", nil, "Failure preparing request") - return - } - - resp, err := client.ListByRestorePointSender(req) - if err != nil { - result.drpl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", resp, "Failure sending request") - return - } - - result.drpl, err = client.ListByRestorePointResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "ListByRestorePoint", resp, "Failure responding to request") - return - } - if result.drpl.hasNextLink() && result.drpl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByRestorePointPreparer prepares the ListByRestorePoint request. -func (client DiskRestorePointClient) ListByRestorePointPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmRestorePointName": autorest.Encode("path", VMRestorePointName), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByRestorePointSender sends the ListByRestorePoint request. The method will close the -// http.Response Body if it receives an error. -func (client DiskRestorePointClient) ListByRestorePointSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByRestorePointResponder handles the response to the ListByRestorePoint request. The method always -// closes the http.Response Body. -func (client DiskRestorePointClient) ListByRestorePointResponder(resp *http.Response) (result DiskRestorePointList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByRestorePointNextResults retrieves the next set of results, if any. -func (client DiskRestorePointClient) listByRestorePointNextResults(ctx context.Context, lastResults DiskRestorePointList) (result DiskRestorePointList, err error) { - req, err := lastResults.diskRestorePointListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByRestorePointSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByRestorePointResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "listByRestorePointNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByRestorePointComplete enumerates all values, automatically crossing page boundaries as required. -func (client DiskRestorePointClient) ListByRestorePointComplete(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string) (result DiskRestorePointListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.ListByRestorePoint") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByRestorePoint(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName) - return -} - -// RevokeAccess revokes access to a diskRestorePoint. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection that the disk restore point belongs. -// VMRestorePointName - the name of the vm restore point that the disk disk restore point belongs. -// diskRestorePointName - the name of the disk restore point created. -func (client DiskRestorePointClient) RevokeAccess(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (result DiskRestorePointRevokeAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointClient.RevokeAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, restorePointCollectionName, VMRestorePointName, diskRestorePointName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "RevokeAccess", nil, "Failure preparing request") - return - } - - result, err = client.RevokeAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointClient", "RevokeAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// RevokeAccessPreparer prepares the RevokeAccess request. -func (client DiskRestorePointClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, VMRestorePointName string, diskRestorePointName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskRestorePointName": autorest.Encode("path", diskRestorePointName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmRestorePointName": autorest.Encode("path", VMRestorePointName), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{vmRestorePointName}/diskRestorePoints/{diskRestorePointName}/endGetAccess", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RevokeAccessSender sends the RevokeAccess request. The method will close the -// http.Response Body if it receives an error. -func (client DiskRestorePointClient) RevokeAccessSender(req *http.Request) (future DiskRestorePointRevokeAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RevokeAccessResponder handles the response to the RevokeAccess request. The method always -// closes the http.Response Body. -func (client DiskRestorePointClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/disks.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/disks.go deleted file mode 100644 index bef84adc4f22..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/disks.go +++ /dev/null @@ -1,779 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// DisksClient is the compute Client -type DisksClient struct { - BaseClient -} - -// NewDisksClient creates an instance of the DisksClient client. -func NewDisksClient(subscriptionID string) DisksClient { - return NewDisksClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewDisksClientWithBaseURI creates an instance of the DisksClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewDisksClientWithBaseURI(baseURI string, subscriptionID string) DisksClient { - return DisksClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate creates or updates a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -// disk - disk object supplied in the body of the Put disk operation. -func (client DisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (result DisksCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: disk, - Constraints: []validation.Constraint{{Target: "disk.DiskProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.PurchasePlan", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.PurchasePlan.Publisher", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "disk.DiskProperties.PurchasePlan.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "disk.DiskProperties.PurchasePlan.Product", Name: validation.Null, Rule: true, Chain: nil}, - }}, - {Target: "disk.DiskProperties.CreationData", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.ImageReference", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.ImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}}, - {Target: "disk.DiskProperties.CreationData.GalleryImageReference", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.CreationData.GalleryImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}}, - }}, - {Target: "disk.DiskProperties.EncryptionSettingsCollection", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "disk.DiskProperties.EncryptionSettingsCollection.Enabled", Name: validation.Null, Rule: true, Chain: nil}}}, - }}}}}); err != nil { - return result, validation.NewError("compute.DisksClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, diskName, disk) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client DisksClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk Disk) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - disk.ManagedBy = nil - disk.ManagedByExtended = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), - autorest.WithJSON(disk), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) CreateOrUpdateSender(req *http.Request) (future DisksCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client DisksClient) CreateOrUpdateResponder(resp *http.Response) (result Disk, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -func (client DisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (result DisksDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, diskName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client DisksClient) DeletePreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) DeleteSender(req *http.Request) (future DisksDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client DisksClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets information about a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -func (client DisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result Disk, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, diskName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client DisksClient) GetPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client DisksClient) GetResponder(resp *http.Response) (result Disk, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GrantAccess grants access to a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -// grantAccessData - access data object supplied in the body of the get disk access operation. -func (client DisksClient) GrantAccess(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (result DisksGrantAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.GrantAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: grantAccessData, - Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.DisksClient", "GrantAccess", err.Error()) - } - - req, err := client.GrantAccessPreparer(ctx, resourceGroupName, diskName, grantAccessData) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", nil, "Failure preparing request") - return - } - - result, err = client.GrantAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "GrantAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// GrantAccessPreparer prepares the GrantAccess request. -func (client DisksClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, diskName string, grantAccessData GrantAccessData) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", pathParameters), - autorest.WithJSON(grantAccessData), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GrantAccessSender sends the GrantAccess request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) GrantAccessSender(req *http.Request) (future DisksGrantAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// GrantAccessResponder handles the response to the GrantAccess request. The method always -// closes the http.Response Body. -func (client DisksClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all the disks under a subscription. -func (client DisksClient) List(ctx context.Context) (result DiskListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List") - defer func() { - sc := -1 - if result.dl.Response.Response != nil { - sc = result.dl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.dl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure sending request") - return - } - - result.dl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "List", resp, "Failure responding to request") - return - } - if result.dl.hasNextLink() && result.dl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client DisksClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client DisksClient) ListResponder(resp *http.Response) (result DiskList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client DisksClient) listNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) { - req, err := lastResults.diskListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client DisksClient) ListComplete(ctx context.Context) (result DiskListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListByResourceGroup lists all the disks under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client DisksClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DiskListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.dl.Response.Response != nil { - sc = result.dl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.dl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.dl, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.dl.hasNextLink() && result.dl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client DisksClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client DisksClient) ListByResourceGroupResponder(resp *http.Response) (result DiskList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client DisksClient) listByResourceGroupNextResults(ctx context.Context, lastResults DiskList) (result DiskList, err error) { - req, err := lastResults.diskListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client DisksClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DiskListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// RevokeAccess revokes access to a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -func (client DisksClient) RevokeAccess(ctx context.Context, resourceGroupName string, diskName string) (result DisksRevokeAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.RevokeAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, diskName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", nil, "Failure preparing request") - return - } - - result, err = client.RevokeAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "RevokeAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// RevokeAccessPreparer prepares the RevokeAccess request. -func (client DisksClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, diskName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RevokeAccessSender sends the RevokeAccess request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) RevokeAccessSender(req *http.Request) (future DisksRevokeAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RevokeAccessResponder handles the response to the RevokeAccess request. The method always -// closes the http.Response Body. -func (client DisksClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update updates (patches) a disk. -// Parameters: -// resourceGroupName - the name of the resource group. -// diskName - the name of the managed disk that is being created. The name can't be changed after the disk is -// created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The maximum name length is 80 -// characters. -// disk - disk object supplied in the body of the Patch disk operation. -func (client DisksClient) Update(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (result DisksUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DisksClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, diskName, disk) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client DisksClient) UpdatePreparer(ctx context.Context, resourceGroupName string, diskName string, disk DiskUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "diskName": autorest.Encode("path", diskName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters), - autorest.WithJSON(disk), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client DisksClient) UpdateSender(req *http.Request) (future DisksUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client DisksClient) UpdateResponder(resp *http.Response) (result Disk, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/enums.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/enums.go deleted file mode 100644 index 15b22d526a93..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/enums.go +++ /dev/null @@ -1,2263 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -// AccessLevel enumerates the values for access level. -type AccessLevel string - -const ( - // None ... - None AccessLevel = "None" - // Read ... - Read AccessLevel = "Read" - // Write ... - Write AccessLevel = "Write" -) - -// PossibleAccessLevelValues returns an array of possible values for the AccessLevel const type. -func PossibleAccessLevelValues() []AccessLevel { - return []AccessLevel{None, Read, Write} -} - -// AggregatedReplicationState enumerates the values for aggregated replication state. -type AggregatedReplicationState string - -const ( - // Completed ... - Completed AggregatedReplicationState = "Completed" - // Failed ... - Failed AggregatedReplicationState = "Failed" - // InProgress ... - InProgress AggregatedReplicationState = "InProgress" - // Unknown ... - Unknown AggregatedReplicationState = "Unknown" -) - -// PossibleAggregatedReplicationStateValues returns an array of possible values for the AggregatedReplicationState const type. -func PossibleAggregatedReplicationStateValues() []AggregatedReplicationState { - return []AggregatedReplicationState{Completed, Failed, InProgress, Unknown} -} - -// Architecture enumerates the values for architecture. -type Architecture string - -const ( - // Arm64 ... - Arm64 Architecture = "Arm64" - // X64 ... - X64 Architecture = "x64" -) - -// PossibleArchitectureValues returns an array of possible values for the Architecture const type. -func PossibleArchitectureValues() []Architecture { - return []Architecture{Arm64, X64} -} - -// ArchitectureTypes enumerates the values for architecture types. -type ArchitectureTypes string - -const ( - // ArchitectureTypesArm64 ... - ArchitectureTypesArm64 ArchitectureTypes = "Arm64" - // ArchitectureTypesX64 ... - ArchitectureTypesX64 ArchitectureTypes = "x64" -) - -// PossibleArchitectureTypesValues returns an array of possible values for the ArchitectureTypes const type. -func PossibleArchitectureTypesValues() []ArchitectureTypes { - return []ArchitectureTypes{ArchitectureTypesArm64, ArchitectureTypesX64} -} - -// AvailabilitySetSkuTypes enumerates the values for availability set sku types. -type AvailabilitySetSkuTypes string - -const ( - // Aligned ... - Aligned AvailabilitySetSkuTypes = "Aligned" - // Classic ... - Classic AvailabilitySetSkuTypes = "Classic" -) - -// PossibleAvailabilitySetSkuTypesValues returns an array of possible values for the AvailabilitySetSkuTypes const type. -func PossibleAvailabilitySetSkuTypesValues() []AvailabilitySetSkuTypes { - return []AvailabilitySetSkuTypes{Aligned, Classic} -} - -// CachingTypes enumerates the values for caching types. -type CachingTypes string - -const ( - // CachingTypesNone ... - CachingTypesNone CachingTypes = "None" - // CachingTypesReadOnly ... - CachingTypesReadOnly CachingTypes = "ReadOnly" - // CachingTypesReadWrite ... - CachingTypesReadWrite CachingTypes = "ReadWrite" -) - -// PossibleCachingTypesValues returns an array of possible values for the CachingTypes const type. -func PossibleCachingTypesValues() []CachingTypes { - return []CachingTypes{CachingTypesNone, CachingTypesReadOnly, CachingTypesReadWrite} -} - -// CapacityReservationGroupInstanceViewTypes enumerates the values for capacity reservation group instance view -// types. -type CapacityReservationGroupInstanceViewTypes string - -const ( - // InstanceView ... - InstanceView CapacityReservationGroupInstanceViewTypes = "instanceView" -) - -// PossibleCapacityReservationGroupInstanceViewTypesValues returns an array of possible values for the CapacityReservationGroupInstanceViewTypes const type. -func PossibleCapacityReservationGroupInstanceViewTypesValues() []CapacityReservationGroupInstanceViewTypes { - return []CapacityReservationGroupInstanceViewTypes{InstanceView} -} - -// CapacityReservationInstanceViewTypes enumerates the values for capacity reservation instance view types. -type CapacityReservationInstanceViewTypes string - -const ( - // CapacityReservationInstanceViewTypesInstanceView ... - CapacityReservationInstanceViewTypesInstanceView CapacityReservationInstanceViewTypes = "instanceView" -) - -// PossibleCapacityReservationInstanceViewTypesValues returns an array of possible values for the CapacityReservationInstanceViewTypes const type. -func PossibleCapacityReservationInstanceViewTypesValues() []CapacityReservationInstanceViewTypes { - return []CapacityReservationInstanceViewTypes{CapacityReservationInstanceViewTypesInstanceView} -} - -// CloudServiceUpgradeMode enumerates the values for cloud service upgrade mode. -type CloudServiceUpgradeMode string - -const ( - // Auto ... - Auto CloudServiceUpgradeMode = "Auto" - // Manual ... - Manual CloudServiceUpgradeMode = "Manual" - // Simultaneous ... - Simultaneous CloudServiceUpgradeMode = "Simultaneous" -) - -// PossibleCloudServiceUpgradeModeValues returns an array of possible values for the CloudServiceUpgradeMode const type. -func PossibleCloudServiceUpgradeModeValues() []CloudServiceUpgradeMode { - return []CloudServiceUpgradeMode{Auto, Manual, Simultaneous} -} - -// ComponentNames enumerates the values for component names. -type ComponentNames string - -const ( - // MicrosoftWindowsShellSetup ... - MicrosoftWindowsShellSetup ComponentNames = "Microsoft-Windows-Shell-Setup" -) - -// PossibleComponentNamesValues returns an array of possible values for the ComponentNames const type. -func PossibleComponentNamesValues() []ComponentNames { - return []ComponentNames{MicrosoftWindowsShellSetup} -} - -// ConfidentialVMEncryptionType enumerates the values for confidential vm encryption type. -type ConfidentialVMEncryptionType string - -const ( - // EncryptedVMGuestStateOnlyWithPmk ... - EncryptedVMGuestStateOnlyWithPmk ConfidentialVMEncryptionType = "EncryptedVMGuestStateOnlyWithPmk" - // EncryptedWithCmk ... - EncryptedWithCmk ConfidentialVMEncryptionType = "EncryptedWithCmk" - // EncryptedWithPmk ... - EncryptedWithPmk ConfidentialVMEncryptionType = "EncryptedWithPmk" -) - -// PossibleConfidentialVMEncryptionTypeValues returns an array of possible values for the ConfidentialVMEncryptionType const type. -func PossibleConfidentialVMEncryptionTypeValues() []ConfidentialVMEncryptionType { - return []ConfidentialVMEncryptionType{EncryptedVMGuestStateOnlyWithPmk, EncryptedWithCmk, EncryptedWithPmk} -} - -// ConsistencyModeTypes enumerates the values for consistency mode types. -type ConsistencyModeTypes string - -const ( - // ApplicationConsistent ... - ApplicationConsistent ConsistencyModeTypes = "ApplicationConsistent" - // CrashConsistent ... - CrashConsistent ConsistencyModeTypes = "CrashConsistent" - // FileSystemConsistent ... - FileSystemConsistent ConsistencyModeTypes = "FileSystemConsistent" -) - -// PossibleConsistencyModeTypesValues returns an array of possible values for the ConsistencyModeTypes const type. -func PossibleConsistencyModeTypesValues() []ConsistencyModeTypes { - return []ConsistencyModeTypes{ApplicationConsistent, CrashConsistent, FileSystemConsistent} -} - -// DataAccessAuthMode enumerates the values for data access auth mode. -type DataAccessAuthMode string - -const ( - // DataAccessAuthModeAzureActiveDirectory When export/upload URL is used, the system checks if the user has - // an identity in Azure Active Directory and has necessary permissions to export/upload the data. Please - // refer to aka.ms/DisksAzureADAuth. - DataAccessAuthModeAzureActiveDirectory DataAccessAuthMode = "AzureActiveDirectory" - // DataAccessAuthModeNone No additional authentication would be performed when accessing export/upload URL. - DataAccessAuthModeNone DataAccessAuthMode = "None" -) - -// PossibleDataAccessAuthModeValues returns an array of possible values for the DataAccessAuthMode const type. -func PossibleDataAccessAuthModeValues() []DataAccessAuthMode { - return []DataAccessAuthMode{DataAccessAuthModeAzureActiveDirectory, DataAccessAuthModeNone} -} - -// DedicatedHostLicenseTypes enumerates the values for dedicated host license types. -type DedicatedHostLicenseTypes string - -const ( - // DedicatedHostLicenseTypesNone ... - DedicatedHostLicenseTypesNone DedicatedHostLicenseTypes = "None" - // DedicatedHostLicenseTypesWindowsServerHybrid ... - DedicatedHostLicenseTypesWindowsServerHybrid DedicatedHostLicenseTypes = "Windows_Server_Hybrid" - // DedicatedHostLicenseTypesWindowsServerPerpetual ... - DedicatedHostLicenseTypesWindowsServerPerpetual DedicatedHostLicenseTypes = "Windows_Server_Perpetual" -) - -// PossibleDedicatedHostLicenseTypesValues returns an array of possible values for the DedicatedHostLicenseTypes const type. -func PossibleDedicatedHostLicenseTypesValues() []DedicatedHostLicenseTypes { - return []DedicatedHostLicenseTypes{DedicatedHostLicenseTypesNone, DedicatedHostLicenseTypesWindowsServerHybrid, DedicatedHostLicenseTypesWindowsServerPerpetual} -} - -// DeleteOptions enumerates the values for delete options. -type DeleteOptions string - -const ( - // Delete ... - Delete DeleteOptions = "Delete" - // Detach ... - Detach DeleteOptions = "Detach" -) - -// PossibleDeleteOptionsValues returns an array of possible values for the DeleteOptions const type. -func PossibleDeleteOptionsValues() []DeleteOptions { - return []DeleteOptions{Delete, Detach} -} - -// DiffDiskOptions enumerates the values for diff disk options. -type DiffDiskOptions string - -const ( - // Local ... - Local DiffDiskOptions = "Local" -) - -// PossibleDiffDiskOptionsValues returns an array of possible values for the DiffDiskOptions const type. -func PossibleDiffDiskOptionsValues() []DiffDiskOptions { - return []DiffDiskOptions{Local} -} - -// DiffDiskPlacement enumerates the values for diff disk placement. -type DiffDiskPlacement string - -const ( - // CacheDisk ... - CacheDisk DiffDiskPlacement = "CacheDisk" - // ResourceDisk ... - ResourceDisk DiffDiskPlacement = "ResourceDisk" -) - -// PossibleDiffDiskPlacementValues returns an array of possible values for the DiffDiskPlacement const type. -func PossibleDiffDiskPlacementValues() []DiffDiskPlacement { - return []DiffDiskPlacement{CacheDisk, ResourceDisk} -} - -// DiskCreateOption enumerates the values for disk create option. -type DiskCreateOption string - -const ( - // Attach Disk will be attached to a VM. - Attach DiskCreateOption = "Attach" - // Copy Create a new disk or snapshot by copying from a disk or snapshot specified by the given - // sourceResourceId. - Copy DiskCreateOption = "Copy" - // CopyStart Create a new disk by using a deep copy process, where the resource creation is considered - // complete only after all data has been copied from the source. - CopyStart DiskCreateOption = "CopyStart" - // Empty Create an empty data disk of a size given by diskSizeGB. - Empty DiskCreateOption = "Empty" - // FromImage Create a new disk from a platform image specified by the given imageReference or - // galleryImageReference. - FromImage DiskCreateOption = "FromImage" - // Import Create a disk by importing from a blob specified by a sourceUri in a storage account specified by - // storageAccountId. - Import DiskCreateOption = "Import" - // ImportSecure Similar to Import create option. Create a new Trusted Launch VM or Confidential VM - // supported disk by importing additional blob for VM guest state specified by securityDataUri in storage - // account specified by storageAccountId - ImportSecure DiskCreateOption = "ImportSecure" - // Restore Create a new disk by copying from a backup recovery point. - Restore DiskCreateOption = "Restore" - // Upload Create a new disk by obtaining a write token and using it to directly upload the contents of the - // disk. - Upload DiskCreateOption = "Upload" - // UploadPreparedSecure Similar to Upload create option. Create a new Trusted Launch VM or Confidential VM - // supported disk and upload using write token in both disk and VM guest state - UploadPreparedSecure DiskCreateOption = "UploadPreparedSecure" -) - -// PossibleDiskCreateOptionValues returns an array of possible values for the DiskCreateOption const type. -func PossibleDiskCreateOptionValues() []DiskCreateOption { - return []DiskCreateOption{Attach, Copy, CopyStart, Empty, FromImage, Import, ImportSecure, Restore, Upload, UploadPreparedSecure} -} - -// DiskCreateOptionTypes enumerates the values for disk create option types. -type DiskCreateOptionTypes string - -const ( - // DiskCreateOptionTypesAttach ... - DiskCreateOptionTypesAttach DiskCreateOptionTypes = "Attach" - // DiskCreateOptionTypesEmpty ... - DiskCreateOptionTypesEmpty DiskCreateOptionTypes = "Empty" - // DiskCreateOptionTypesFromImage ... - DiskCreateOptionTypesFromImage DiskCreateOptionTypes = "FromImage" -) - -// PossibleDiskCreateOptionTypesValues returns an array of possible values for the DiskCreateOptionTypes const type. -func PossibleDiskCreateOptionTypesValues() []DiskCreateOptionTypes { - return []DiskCreateOptionTypes{DiskCreateOptionTypesAttach, DiskCreateOptionTypesEmpty, DiskCreateOptionTypesFromImage} -} - -// DiskDeleteOptionTypes enumerates the values for disk delete option types. -type DiskDeleteOptionTypes string - -const ( - // DiskDeleteOptionTypesDelete ... - DiskDeleteOptionTypesDelete DiskDeleteOptionTypes = "Delete" - // DiskDeleteOptionTypesDetach ... - DiskDeleteOptionTypesDetach DiskDeleteOptionTypes = "Detach" -) - -// PossibleDiskDeleteOptionTypesValues returns an array of possible values for the DiskDeleteOptionTypes const type. -func PossibleDiskDeleteOptionTypesValues() []DiskDeleteOptionTypes { - return []DiskDeleteOptionTypes{DiskDeleteOptionTypesDelete, DiskDeleteOptionTypesDetach} -} - -// DiskDetachOptionTypes enumerates the values for disk detach option types. -type DiskDetachOptionTypes string - -const ( - // ForceDetach ... - ForceDetach DiskDetachOptionTypes = "ForceDetach" -) - -// PossibleDiskDetachOptionTypesValues returns an array of possible values for the DiskDetachOptionTypes const type. -func PossibleDiskDetachOptionTypesValues() []DiskDetachOptionTypes { - return []DiskDetachOptionTypes{ForceDetach} -} - -// DiskEncryptionSetIdentityType enumerates the values for disk encryption set identity type. -type DiskEncryptionSetIdentityType string - -const ( - // DiskEncryptionSetIdentityTypeNone ... - DiskEncryptionSetIdentityTypeNone DiskEncryptionSetIdentityType = "None" - // DiskEncryptionSetIdentityTypeSystemAssigned ... - DiskEncryptionSetIdentityTypeSystemAssigned DiskEncryptionSetIdentityType = "SystemAssigned" -) - -// PossibleDiskEncryptionSetIdentityTypeValues returns an array of possible values for the DiskEncryptionSetIdentityType const type. -func PossibleDiskEncryptionSetIdentityTypeValues() []DiskEncryptionSetIdentityType { - return []DiskEncryptionSetIdentityType{DiskEncryptionSetIdentityTypeNone, DiskEncryptionSetIdentityTypeSystemAssigned} -} - -// DiskEncryptionSetType enumerates the values for disk encryption set type. -type DiskEncryptionSetType string - -const ( - // ConfidentialVMEncryptedWithCustomerKey Confidential VM supported disk and VM guest state would be - // encrypted with customer managed key. - ConfidentialVMEncryptedWithCustomerKey DiskEncryptionSetType = "ConfidentialVmEncryptedWithCustomerKey" - // EncryptionAtRestWithCustomerKey Resource using diskEncryptionSet would be encrypted at rest with - // Customer managed key that can be changed and revoked by a customer. - EncryptionAtRestWithCustomerKey DiskEncryptionSetType = "EncryptionAtRestWithCustomerKey" - // EncryptionAtRestWithPlatformAndCustomerKeys Resource using diskEncryptionSet would be encrypted at rest - // with two layers of encryption. One of the keys is Customer managed and the other key is Platform - // managed. - EncryptionAtRestWithPlatformAndCustomerKeys DiskEncryptionSetType = "EncryptionAtRestWithPlatformAndCustomerKeys" -) - -// PossibleDiskEncryptionSetTypeValues returns an array of possible values for the DiskEncryptionSetType const type. -func PossibleDiskEncryptionSetTypeValues() []DiskEncryptionSetType { - return []DiskEncryptionSetType{ConfidentialVMEncryptedWithCustomerKey, EncryptionAtRestWithCustomerKey, EncryptionAtRestWithPlatformAndCustomerKeys} -} - -// DiskSecurityTypes enumerates the values for disk security types. -type DiskSecurityTypes string - -const ( - // ConfidentialVMDiskEncryptedWithCustomerKey Indicates Confidential VM disk with both OS disk and VM guest - // state encrypted with a customer managed key - ConfidentialVMDiskEncryptedWithCustomerKey DiskSecurityTypes = "ConfidentialVM_DiskEncryptedWithCustomerKey" - // ConfidentialVMDiskEncryptedWithPlatformKey Indicates Confidential VM disk with both OS disk and VM guest - // state encrypted with a platform managed key - ConfidentialVMDiskEncryptedWithPlatformKey DiskSecurityTypes = "ConfidentialVM_DiskEncryptedWithPlatformKey" - // ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey Indicates Confidential VM disk with only VM guest - // state encrypted - ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey DiskSecurityTypes = "ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey" - // TrustedLaunch Trusted Launch provides security features such as secure boot and virtual Trusted Platform - // Module (vTPM) - TrustedLaunch DiskSecurityTypes = "TrustedLaunch" -) - -// PossibleDiskSecurityTypesValues returns an array of possible values for the DiskSecurityTypes const type. -func PossibleDiskSecurityTypesValues() []DiskSecurityTypes { - return []DiskSecurityTypes{ConfidentialVMDiskEncryptedWithCustomerKey, ConfidentialVMDiskEncryptedWithPlatformKey, ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey, TrustedLaunch} -} - -// DiskState enumerates the values for disk state. -type DiskState string - -const ( - // ActiveSAS The disk currently has an Active SAS Uri associated with it. - ActiveSAS DiskState = "ActiveSAS" - // ActiveSASFrozen The disk is attached to a VM in hibernated state and has an active SAS URI associated - // with it. - ActiveSASFrozen DiskState = "ActiveSASFrozen" - // ActiveUpload A disk is created for upload and a write token has been issued for uploading to it. - ActiveUpload DiskState = "ActiveUpload" - // Attached The disk is currently attached to a running VM. - Attached DiskState = "Attached" - // Frozen The disk is attached to a VM which is in hibernated state. - Frozen DiskState = "Frozen" - // ReadyToUpload A disk is ready to be created by upload by requesting a write token. - ReadyToUpload DiskState = "ReadyToUpload" - // Reserved The disk is attached to a stopped-deallocated VM. - Reserved DiskState = "Reserved" - // Unattached The disk is not being used and can be attached to a VM. - Unattached DiskState = "Unattached" -) - -// PossibleDiskStateValues returns an array of possible values for the DiskState const type. -func PossibleDiskStateValues() []DiskState { - return []DiskState{ActiveSAS, ActiveSASFrozen, ActiveUpload, Attached, Frozen, ReadyToUpload, Reserved, Unattached} -} - -// DiskStorageAccountTypes enumerates the values for disk storage account types. -type DiskStorageAccountTypes string - -const ( - // PremiumLRS Premium SSD locally redundant storage. Best for production and performance sensitive - // workloads. - PremiumLRS DiskStorageAccountTypes = "Premium_LRS" - // PremiumZRS Premium SSD zone redundant storage. Best for the production workloads that need storage - // resiliency against zone failures. - PremiumZRS DiskStorageAccountTypes = "Premium_ZRS" - // StandardLRS Standard HDD locally redundant storage. Best for backup, non-critical, and infrequent - // access. - StandardLRS DiskStorageAccountTypes = "Standard_LRS" - // StandardSSDLRS Standard SSD locally redundant storage. Best for web servers, lightly used enterprise - // applications and dev/test. - StandardSSDLRS DiskStorageAccountTypes = "StandardSSD_LRS" - // StandardSSDZRS Standard SSD zone redundant storage. Best for web servers, lightly used enterprise - // applications and dev/test that need storage resiliency against zone failures. - StandardSSDZRS DiskStorageAccountTypes = "StandardSSD_ZRS" - // UltraSSDLRS Ultra SSD locally redundant storage. Best for IO-intensive workloads such as SAP HANA, top - // tier databases (for example, SQL, Oracle), and other transaction-heavy workloads. - UltraSSDLRS DiskStorageAccountTypes = "UltraSSD_LRS" -) - -// PossibleDiskStorageAccountTypesValues returns an array of possible values for the DiskStorageAccountTypes const type. -func PossibleDiskStorageAccountTypesValues() []DiskStorageAccountTypes { - return []DiskStorageAccountTypes{PremiumLRS, PremiumZRS, StandardLRS, StandardSSDLRS, StandardSSDZRS, UltraSSDLRS} -} - -// EncryptionType enumerates the values for encryption type. -type EncryptionType string - -const ( - // EncryptionTypeEncryptionAtRestWithCustomerKey Disk is encrypted at rest with Customer managed key that - // can be changed and revoked by a customer. - EncryptionTypeEncryptionAtRestWithCustomerKey EncryptionType = "EncryptionAtRestWithCustomerKey" - // EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys Disk is encrypted at rest with 2 layers of - // encryption. One of the keys is Customer managed and the other key is Platform managed. - EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys EncryptionType = "EncryptionAtRestWithPlatformAndCustomerKeys" - // EncryptionTypeEncryptionAtRestWithPlatformKey Disk is encrypted at rest with Platform managed key. It is - // the default encryption type. This is not a valid encryption type for disk encryption sets. - EncryptionTypeEncryptionAtRestWithPlatformKey EncryptionType = "EncryptionAtRestWithPlatformKey" -) - -// PossibleEncryptionTypeValues returns an array of possible values for the EncryptionType const type. -func PossibleEncryptionTypeValues() []EncryptionType { - return []EncryptionType{EncryptionTypeEncryptionAtRestWithCustomerKey, EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys, EncryptionTypeEncryptionAtRestWithPlatformKey} -} - -// ExecutionState enumerates the values for execution state. -type ExecutionState string - -const ( - // ExecutionStateCanceled ... - ExecutionStateCanceled ExecutionState = "Canceled" - // ExecutionStateFailed ... - ExecutionStateFailed ExecutionState = "Failed" - // ExecutionStatePending ... - ExecutionStatePending ExecutionState = "Pending" - // ExecutionStateRunning ... - ExecutionStateRunning ExecutionState = "Running" - // ExecutionStateSucceeded ... - ExecutionStateSucceeded ExecutionState = "Succeeded" - // ExecutionStateTimedOut ... - ExecutionStateTimedOut ExecutionState = "TimedOut" - // ExecutionStateUnknown ... - ExecutionStateUnknown ExecutionState = "Unknown" -) - -// PossibleExecutionStateValues returns an array of possible values for the ExecutionState const type. -func PossibleExecutionStateValues() []ExecutionState { - return []ExecutionState{ExecutionStateCanceled, ExecutionStateFailed, ExecutionStatePending, ExecutionStateRunning, ExecutionStateSucceeded, ExecutionStateTimedOut, ExecutionStateUnknown} -} - -// ExpandTypesForGetCapacityReservationGroups enumerates the values for expand types for get capacity -// reservation groups. -type ExpandTypesForGetCapacityReservationGroups string - -const ( - // VirtualMachineScaleSetVMsref ... - VirtualMachineScaleSetVMsref ExpandTypesForGetCapacityReservationGroups = "virtualMachineScaleSetVMs/$ref" - // VirtualMachinesref ... - VirtualMachinesref ExpandTypesForGetCapacityReservationGroups = "virtualMachines/$ref" -) - -// PossibleExpandTypesForGetCapacityReservationGroupsValues returns an array of possible values for the ExpandTypesForGetCapacityReservationGroups const type. -func PossibleExpandTypesForGetCapacityReservationGroupsValues() []ExpandTypesForGetCapacityReservationGroups { - return []ExpandTypesForGetCapacityReservationGroups{VirtualMachineScaleSetVMsref, VirtualMachinesref} -} - -// ExpandTypesForGetVMScaleSets enumerates the values for expand types for get vm scale sets. -type ExpandTypesForGetVMScaleSets string - -const ( - // UserData ... - UserData ExpandTypesForGetVMScaleSets = "userData" -) - -// PossibleExpandTypesForGetVMScaleSetsValues returns an array of possible values for the ExpandTypesForGetVMScaleSets const type. -func PossibleExpandTypesForGetVMScaleSetsValues() []ExpandTypesForGetVMScaleSets { - return []ExpandTypesForGetVMScaleSets{UserData} -} - -// ExtendedLocationType enumerates the values for extended location type. -type ExtendedLocationType string - -const ( - // EdgeZone ... - EdgeZone ExtendedLocationType = "EdgeZone" -) - -// PossibleExtendedLocationTypeValues returns an array of possible values for the ExtendedLocationType const type. -func PossibleExtendedLocationTypeValues() []ExtendedLocationType { - return []ExtendedLocationType{EdgeZone} -} - -// ExtendedLocationTypes enumerates the values for extended location types. -type ExtendedLocationTypes string - -const ( - // ExtendedLocationTypesEdgeZone ... - ExtendedLocationTypesEdgeZone ExtendedLocationTypes = "EdgeZone" -) - -// PossibleExtendedLocationTypesValues returns an array of possible values for the ExtendedLocationTypes const type. -func PossibleExtendedLocationTypesValues() []ExtendedLocationTypes { - return []ExtendedLocationTypes{ExtendedLocationTypesEdgeZone} -} - -// GalleryExpandParams enumerates the values for gallery expand params. -type GalleryExpandParams string - -const ( - // SharingProfileGroups ... - SharingProfileGroups GalleryExpandParams = "SharingProfile/Groups" -) - -// PossibleGalleryExpandParamsValues returns an array of possible values for the GalleryExpandParams const type. -func PossibleGalleryExpandParamsValues() []GalleryExpandParams { - return []GalleryExpandParams{SharingProfileGroups} -} - -// GalleryExtendedLocationType enumerates the values for gallery extended location type. -type GalleryExtendedLocationType string - -const ( - // GalleryExtendedLocationTypeEdgeZone ... - GalleryExtendedLocationTypeEdgeZone GalleryExtendedLocationType = "EdgeZone" - // GalleryExtendedLocationTypeUnknown ... - GalleryExtendedLocationTypeUnknown GalleryExtendedLocationType = "Unknown" -) - -// PossibleGalleryExtendedLocationTypeValues returns an array of possible values for the GalleryExtendedLocationType const type. -func PossibleGalleryExtendedLocationTypeValues() []GalleryExtendedLocationType { - return []GalleryExtendedLocationType{GalleryExtendedLocationTypeEdgeZone, GalleryExtendedLocationTypeUnknown} -} - -// GallerySharingPermissionTypes enumerates the values for gallery sharing permission types. -type GallerySharingPermissionTypes string - -const ( - // Groups ... - Groups GallerySharingPermissionTypes = "Groups" - // Private ... - Private GallerySharingPermissionTypes = "Private" -) - -// PossibleGallerySharingPermissionTypesValues returns an array of possible values for the GallerySharingPermissionTypes const type. -func PossibleGallerySharingPermissionTypesValues() []GallerySharingPermissionTypes { - return []GallerySharingPermissionTypes{Groups, Private} -} - -// HostCaching enumerates the values for host caching. -type HostCaching string - -const ( - // HostCachingNone ... - HostCachingNone HostCaching = "None" - // HostCachingReadOnly ... - HostCachingReadOnly HostCaching = "ReadOnly" - // HostCachingReadWrite ... - HostCachingReadWrite HostCaching = "ReadWrite" -) - -// PossibleHostCachingValues returns an array of possible values for the HostCaching const type. -func PossibleHostCachingValues() []HostCaching { - return []HostCaching{HostCachingNone, HostCachingReadOnly, HostCachingReadWrite} -} - -// HyperVGeneration enumerates the values for hyper v generation. -type HyperVGeneration string - -const ( - // V1 ... - V1 HyperVGeneration = "V1" - // V2 ... - V2 HyperVGeneration = "V2" -) - -// PossibleHyperVGenerationValues returns an array of possible values for the HyperVGeneration const type. -func PossibleHyperVGenerationValues() []HyperVGeneration { - return []HyperVGeneration{V1, V2} -} - -// HyperVGenerationType enumerates the values for hyper v generation type. -type HyperVGenerationType string - -const ( - // HyperVGenerationTypeV1 ... - HyperVGenerationTypeV1 HyperVGenerationType = "V1" - // HyperVGenerationTypeV2 ... - HyperVGenerationTypeV2 HyperVGenerationType = "V2" -) - -// PossibleHyperVGenerationTypeValues returns an array of possible values for the HyperVGenerationType const type. -func PossibleHyperVGenerationTypeValues() []HyperVGenerationType { - return []HyperVGenerationType{HyperVGenerationTypeV1, HyperVGenerationTypeV2} -} - -// HyperVGenerationTypes enumerates the values for hyper v generation types. -type HyperVGenerationTypes string - -const ( - // HyperVGenerationTypesV1 ... - HyperVGenerationTypesV1 HyperVGenerationTypes = "V1" - // HyperVGenerationTypesV2 ... - HyperVGenerationTypesV2 HyperVGenerationTypes = "V2" -) - -// PossibleHyperVGenerationTypesValues returns an array of possible values for the HyperVGenerationTypes const type. -func PossibleHyperVGenerationTypesValues() []HyperVGenerationTypes { - return []HyperVGenerationTypes{HyperVGenerationTypesV1, HyperVGenerationTypesV2} -} - -// InstanceViewTypes enumerates the values for instance view types. -type InstanceViewTypes string - -const ( - // InstanceViewTypesInstanceView ... - InstanceViewTypesInstanceView InstanceViewTypes = "instanceView" - // InstanceViewTypesUserData ... - InstanceViewTypesUserData InstanceViewTypes = "userData" -) - -// PossibleInstanceViewTypesValues returns an array of possible values for the InstanceViewTypes const type. -func PossibleInstanceViewTypesValues() []InstanceViewTypes { - return []InstanceViewTypes{InstanceViewTypesInstanceView, InstanceViewTypesUserData} -} - -// IntervalInMins enumerates the values for interval in mins. -type IntervalInMins string - -const ( - // FiveMins ... - FiveMins IntervalInMins = "FiveMins" - // SixtyMins ... - SixtyMins IntervalInMins = "SixtyMins" - // ThirtyMins ... - ThirtyMins IntervalInMins = "ThirtyMins" - // ThreeMins ... - ThreeMins IntervalInMins = "ThreeMins" -) - -// PossibleIntervalInMinsValues returns an array of possible values for the IntervalInMins const type. -func PossibleIntervalInMinsValues() []IntervalInMins { - return []IntervalInMins{FiveMins, SixtyMins, ThirtyMins, ThreeMins} -} - -// IPVersion enumerates the values for ip version. -type IPVersion string - -const ( - // IPv4 ... - IPv4 IPVersion = "IPv4" - // IPv6 ... - IPv6 IPVersion = "IPv6" -) - -// PossibleIPVersionValues returns an array of possible values for the IPVersion const type. -func PossibleIPVersionValues() []IPVersion { - return []IPVersion{IPv4, IPv6} -} - -// IPVersions enumerates the values for ip versions. -type IPVersions string - -const ( - // IPVersionsIPv4 ... - IPVersionsIPv4 IPVersions = "IPv4" - // IPVersionsIPv6 ... - IPVersionsIPv6 IPVersions = "IPv6" -) - -// PossibleIPVersionsValues returns an array of possible values for the IPVersions const type. -func PossibleIPVersionsValues() []IPVersions { - return []IPVersions{IPVersionsIPv4, IPVersionsIPv6} -} - -// LinuxPatchAssessmentMode enumerates the values for linux patch assessment mode. -type LinuxPatchAssessmentMode string - -const ( - // AutomaticByPlatform ... - AutomaticByPlatform LinuxPatchAssessmentMode = "AutomaticByPlatform" - // ImageDefault ... - ImageDefault LinuxPatchAssessmentMode = "ImageDefault" -) - -// PossibleLinuxPatchAssessmentModeValues returns an array of possible values for the LinuxPatchAssessmentMode const type. -func PossibleLinuxPatchAssessmentModeValues() []LinuxPatchAssessmentMode { - return []LinuxPatchAssessmentMode{AutomaticByPlatform, ImageDefault} -} - -// LinuxVMGuestPatchAutomaticByPlatformRebootSetting enumerates the values for linux vm guest patch automatic -// by platform reboot setting. -type LinuxVMGuestPatchAutomaticByPlatformRebootSetting string - -const ( - // LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways ... - LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Always" - // LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired ... - LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "IfRequired" - // LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever ... - LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Never" - // LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown ... - LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown LinuxVMGuestPatchAutomaticByPlatformRebootSetting = "Unknown" -) - -// PossibleLinuxVMGuestPatchAutomaticByPlatformRebootSettingValues returns an array of possible values for the LinuxVMGuestPatchAutomaticByPlatformRebootSetting const type. -func PossibleLinuxVMGuestPatchAutomaticByPlatformRebootSettingValues() []LinuxVMGuestPatchAutomaticByPlatformRebootSetting { - return []LinuxVMGuestPatchAutomaticByPlatformRebootSetting{LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways, LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired, LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever, LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown} -} - -// LinuxVMGuestPatchMode enumerates the values for linux vm guest patch mode. -type LinuxVMGuestPatchMode string - -const ( - // LinuxVMGuestPatchModeAutomaticByPlatform ... - LinuxVMGuestPatchModeAutomaticByPlatform LinuxVMGuestPatchMode = "AutomaticByPlatform" - // LinuxVMGuestPatchModeImageDefault ... - LinuxVMGuestPatchModeImageDefault LinuxVMGuestPatchMode = "ImageDefault" -) - -// PossibleLinuxVMGuestPatchModeValues returns an array of possible values for the LinuxVMGuestPatchMode const type. -func PossibleLinuxVMGuestPatchModeValues() []LinuxVMGuestPatchMode { - return []LinuxVMGuestPatchMode{LinuxVMGuestPatchModeAutomaticByPlatform, LinuxVMGuestPatchModeImageDefault} -} - -// MaintenanceOperationResultCodeTypes enumerates the values for maintenance operation result code types. -type MaintenanceOperationResultCodeTypes string - -const ( - // MaintenanceOperationResultCodeTypesMaintenanceAborted ... - MaintenanceOperationResultCodeTypesMaintenanceAborted MaintenanceOperationResultCodeTypes = "MaintenanceAborted" - // MaintenanceOperationResultCodeTypesMaintenanceCompleted ... - MaintenanceOperationResultCodeTypesMaintenanceCompleted MaintenanceOperationResultCodeTypes = "MaintenanceCompleted" - // MaintenanceOperationResultCodeTypesNone ... - MaintenanceOperationResultCodeTypesNone MaintenanceOperationResultCodeTypes = "None" - // MaintenanceOperationResultCodeTypesRetryLater ... - MaintenanceOperationResultCodeTypesRetryLater MaintenanceOperationResultCodeTypes = "RetryLater" -) - -// PossibleMaintenanceOperationResultCodeTypesValues returns an array of possible values for the MaintenanceOperationResultCodeTypes const type. -func PossibleMaintenanceOperationResultCodeTypesValues() []MaintenanceOperationResultCodeTypes { - return []MaintenanceOperationResultCodeTypes{MaintenanceOperationResultCodeTypesMaintenanceAborted, MaintenanceOperationResultCodeTypesMaintenanceCompleted, MaintenanceOperationResultCodeTypesNone, MaintenanceOperationResultCodeTypesRetryLater} -} - -// NetworkAccessPolicy enumerates the values for network access policy. -type NetworkAccessPolicy string - -const ( - // AllowAll The disk can be exported or uploaded to from any network. - AllowAll NetworkAccessPolicy = "AllowAll" - // AllowPrivate The disk can be exported or uploaded to using a DiskAccess resource's private endpoints. - AllowPrivate NetworkAccessPolicy = "AllowPrivate" - // DenyAll The disk cannot be exported. - DenyAll NetworkAccessPolicy = "DenyAll" -) - -// PossibleNetworkAccessPolicyValues returns an array of possible values for the NetworkAccessPolicy const type. -func PossibleNetworkAccessPolicyValues() []NetworkAccessPolicy { - return []NetworkAccessPolicy{AllowAll, AllowPrivate, DenyAll} -} - -// NetworkAPIVersion enumerates the values for network api version. -type NetworkAPIVersion string - -const ( - // TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne ... - TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne NetworkAPIVersion = "2020-11-01" -) - -// PossibleNetworkAPIVersionValues returns an array of possible values for the NetworkAPIVersion const type. -func PossibleNetworkAPIVersionValues() []NetworkAPIVersion { - return []NetworkAPIVersion{TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne} -} - -// OperatingSystemStateTypes enumerates the values for operating system state types. -type OperatingSystemStateTypes string - -const ( - // Generalized Generalized image. Needs to be provisioned during deployment time. - Generalized OperatingSystemStateTypes = "Generalized" - // Specialized Specialized image. Contains already provisioned OS Disk. - Specialized OperatingSystemStateTypes = "Specialized" -) - -// PossibleOperatingSystemStateTypesValues returns an array of possible values for the OperatingSystemStateTypes const type. -func PossibleOperatingSystemStateTypesValues() []OperatingSystemStateTypes { - return []OperatingSystemStateTypes{Generalized, Specialized} -} - -// OperatingSystemType enumerates the values for operating system type. -type OperatingSystemType string - -const ( - // Linux ... - Linux OperatingSystemType = "Linux" - // Windows ... - Windows OperatingSystemType = "Windows" -) - -// PossibleOperatingSystemTypeValues returns an array of possible values for the OperatingSystemType const type. -func PossibleOperatingSystemTypeValues() []OperatingSystemType { - return []OperatingSystemType{Linux, Windows} -} - -// OperatingSystemTypes enumerates the values for operating system types. -type OperatingSystemTypes string - -const ( - // OperatingSystemTypesLinux ... - OperatingSystemTypesLinux OperatingSystemTypes = "Linux" - // OperatingSystemTypesWindows ... - OperatingSystemTypesWindows OperatingSystemTypes = "Windows" -) - -// PossibleOperatingSystemTypesValues returns an array of possible values for the OperatingSystemTypes const type. -func PossibleOperatingSystemTypesValues() []OperatingSystemTypes { - return []OperatingSystemTypes{OperatingSystemTypesLinux, OperatingSystemTypesWindows} -} - -// OrchestrationMode enumerates the values for orchestration mode. -type OrchestrationMode string - -const ( - // Flexible ... - Flexible OrchestrationMode = "Flexible" - // Uniform ... - Uniform OrchestrationMode = "Uniform" -) - -// PossibleOrchestrationModeValues returns an array of possible values for the OrchestrationMode const type. -func PossibleOrchestrationModeValues() []OrchestrationMode { - return []OrchestrationMode{Flexible, Uniform} -} - -// OrchestrationServiceNames enumerates the values for orchestration service names. -type OrchestrationServiceNames string - -const ( - // AutomaticRepairs ... - AutomaticRepairs OrchestrationServiceNames = "AutomaticRepairs" -) - -// PossibleOrchestrationServiceNamesValues returns an array of possible values for the OrchestrationServiceNames const type. -func PossibleOrchestrationServiceNamesValues() []OrchestrationServiceNames { - return []OrchestrationServiceNames{AutomaticRepairs} -} - -// OrchestrationServiceState enumerates the values for orchestration service state. -type OrchestrationServiceState string - -const ( - // NotRunning ... - NotRunning OrchestrationServiceState = "NotRunning" - // Running ... - Running OrchestrationServiceState = "Running" - // Suspended ... - Suspended OrchestrationServiceState = "Suspended" -) - -// PossibleOrchestrationServiceStateValues returns an array of possible values for the OrchestrationServiceState const type. -func PossibleOrchestrationServiceStateValues() []OrchestrationServiceState { - return []OrchestrationServiceState{NotRunning, Running, Suspended} -} - -// OrchestrationServiceStateAction enumerates the values for orchestration service state action. -type OrchestrationServiceStateAction string - -const ( - // Resume ... - Resume OrchestrationServiceStateAction = "Resume" - // Suspend ... - Suspend OrchestrationServiceStateAction = "Suspend" -) - -// PossibleOrchestrationServiceStateActionValues returns an array of possible values for the OrchestrationServiceStateAction const type. -func PossibleOrchestrationServiceStateActionValues() []OrchestrationServiceStateAction { - return []OrchestrationServiceStateAction{Resume, Suspend} -} - -// PassNames enumerates the values for pass names. -type PassNames string - -const ( - // OobeSystem ... - OobeSystem PassNames = "OobeSystem" -) - -// PossiblePassNamesValues returns an array of possible values for the PassNames const type. -func PossiblePassNamesValues() []PassNames { - return []PassNames{OobeSystem} -} - -// PatchAssessmentState enumerates the values for patch assessment state. -type PatchAssessmentState string - -const ( - // PatchAssessmentStateAvailable ... - PatchAssessmentStateAvailable PatchAssessmentState = "Available" - // PatchAssessmentStateUnknown ... - PatchAssessmentStateUnknown PatchAssessmentState = "Unknown" -) - -// PossiblePatchAssessmentStateValues returns an array of possible values for the PatchAssessmentState const type. -func PossiblePatchAssessmentStateValues() []PatchAssessmentState { - return []PatchAssessmentState{PatchAssessmentStateAvailable, PatchAssessmentStateUnknown} -} - -// PatchInstallationState enumerates the values for patch installation state. -type PatchInstallationState string - -const ( - // PatchInstallationStateExcluded ... - PatchInstallationStateExcluded PatchInstallationState = "Excluded" - // PatchInstallationStateFailed ... - PatchInstallationStateFailed PatchInstallationState = "Failed" - // PatchInstallationStateInstalled ... - PatchInstallationStateInstalled PatchInstallationState = "Installed" - // PatchInstallationStateNotSelected ... - PatchInstallationStateNotSelected PatchInstallationState = "NotSelected" - // PatchInstallationStatePending ... - PatchInstallationStatePending PatchInstallationState = "Pending" - // PatchInstallationStateUnknown ... - PatchInstallationStateUnknown PatchInstallationState = "Unknown" -) - -// PossiblePatchInstallationStateValues returns an array of possible values for the PatchInstallationState const type. -func PossiblePatchInstallationStateValues() []PatchInstallationState { - return []PatchInstallationState{PatchInstallationStateExcluded, PatchInstallationStateFailed, PatchInstallationStateInstalled, PatchInstallationStateNotSelected, PatchInstallationStatePending, PatchInstallationStateUnknown} -} - -// PatchOperationStatus enumerates the values for patch operation status. -type PatchOperationStatus string - -const ( - // PatchOperationStatusCompletedWithWarnings ... - PatchOperationStatusCompletedWithWarnings PatchOperationStatus = "CompletedWithWarnings" - // PatchOperationStatusFailed ... - PatchOperationStatusFailed PatchOperationStatus = "Failed" - // PatchOperationStatusInProgress ... - PatchOperationStatusInProgress PatchOperationStatus = "InProgress" - // PatchOperationStatusSucceeded ... - PatchOperationStatusSucceeded PatchOperationStatus = "Succeeded" - // PatchOperationStatusUnknown ... - PatchOperationStatusUnknown PatchOperationStatus = "Unknown" -) - -// PossiblePatchOperationStatusValues returns an array of possible values for the PatchOperationStatus const type. -func PossiblePatchOperationStatusValues() []PatchOperationStatus { - return []PatchOperationStatus{PatchOperationStatusCompletedWithWarnings, PatchOperationStatusFailed, PatchOperationStatusInProgress, PatchOperationStatusSucceeded, PatchOperationStatusUnknown} -} - -// PrivateEndpointConnectionProvisioningState enumerates the values for private endpoint connection -// provisioning state. -type PrivateEndpointConnectionProvisioningState string - -const ( - // PrivateEndpointConnectionProvisioningStateCreating ... - PrivateEndpointConnectionProvisioningStateCreating PrivateEndpointConnectionProvisioningState = "Creating" - // PrivateEndpointConnectionProvisioningStateDeleting ... - PrivateEndpointConnectionProvisioningStateDeleting PrivateEndpointConnectionProvisioningState = "Deleting" - // PrivateEndpointConnectionProvisioningStateFailed ... - PrivateEndpointConnectionProvisioningStateFailed PrivateEndpointConnectionProvisioningState = "Failed" - // PrivateEndpointConnectionProvisioningStateSucceeded ... - PrivateEndpointConnectionProvisioningStateSucceeded PrivateEndpointConnectionProvisioningState = "Succeeded" -) - -// PossiblePrivateEndpointConnectionProvisioningStateValues returns an array of possible values for the PrivateEndpointConnectionProvisioningState const type. -func PossiblePrivateEndpointConnectionProvisioningStateValues() []PrivateEndpointConnectionProvisioningState { - return []PrivateEndpointConnectionProvisioningState{PrivateEndpointConnectionProvisioningStateCreating, PrivateEndpointConnectionProvisioningStateDeleting, PrivateEndpointConnectionProvisioningStateFailed, PrivateEndpointConnectionProvisioningStateSucceeded} -} - -// PrivateEndpointServiceConnectionStatus enumerates the values for private endpoint service connection status. -type PrivateEndpointServiceConnectionStatus string - -const ( - // Approved ... - Approved PrivateEndpointServiceConnectionStatus = "Approved" - // Pending ... - Pending PrivateEndpointServiceConnectionStatus = "Pending" - // Rejected ... - Rejected PrivateEndpointServiceConnectionStatus = "Rejected" -) - -// PossiblePrivateEndpointServiceConnectionStatusValues returns an array of possible values for the PrivateEndpointServiceConnectionStatus const type. -func PossiblePrivateEndpointServiceConnectionStatusValues() []PrivateEndpointServiceConnectionStatus { - return []PrivateEndpointServiceConnectionStatus{Approved, Pending, Rejected} -} - -// ProtocolTypes enumerates the values for protocol types. -type ProtocolTypes string - -const ( - // HTTP ... - HTTP ProtocolTypes = "Http" - // HTTPS ... - HTTPS ProtocolTypes = "Https" -) - -// PossibleProtocolTypesValues returns an array of possible values for the ProtocolTypes const type. -func PossibleProtocolTypesValues() []ProtocolTypes { - return []ProtocolTypes{HTTP, HTTPS} -} - -// ProvisioningState enumerates the values for provisioning state. -type ProvisioningState string - -const ( - // ProvisioningStateCreating ... - ProvisioningStateCreating ProvisioningState = "Creating" - // ProvisioningStateDeleting ... - ProvisioningStateDeleting ProvisioningState = "Deleting" - // ProvisioningStateFailed ... - ProvisioningStateFailed ProvisioningState = "Failed" - // ProvisioningStateMigrating ... - ProvisioningStateMigrating ProvisioningState = "Migrating" - // ProvisioningStateSucceeded ... - ProvisioningStateSucceeded ProvisioningState = "Succeeded" - // ProvisioningStateUpdating ... - ProvisioningStateUpdating ProvisioningState = "Updating" -) - -// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type. -func PossibleProvisioningStateValues() []ProvisioningState { - return []ProvisioningState{ProvisioningStateCreating, ProvisioningStateDeleting, ProvisioningStateFailed, ProvisioningStateMigrating, ProvisioningStateSucceeded, ProvisioningStateUpdating} -} - -// ProvisioningState1 enumerates the values for provisioning state 1. -type ProvisioningState1 string - -const ( - // ProvisioningState1Creating ... - ProvisioningState1Creating ProvisioningState1 = "Creating" - // ProvisioningState1Deleting ... - ProvisioningState1Deleting ProvisioningState1 = "Deleting" - // ProvisioningState1Failed ... - ProvisioningState1Failed ProvisioningState1 = "Failed" - // ProvisioningState1Migrating ... - ProvisioningState1Migrating ProvisioningState1 = "Migrating" - // ProvisioningState1Succeeded ... - ProvisioningState1Succeeded ProvisioningState1 = "Succeeded" - // ProvisioningState1Updating ... - ProvisioningState1Updating ProvisioningState1 = "Updating" -) - -// PossibleProvisioningState1Values returns an array of possible values for the ProvisioningState1 const type. -func PossibleProvisioningState1Values() []ProvisioningState1 { - return []ProvisioningState1{ProvisioningState1Creating, ProvisioningState1Deleting, ProvisioningState1Failed, ProvisioningState1Migrating, ProvisioningState1Succeeded, ProvisioningState1Updating} -} - -// ProvisioningState2 enumerates the values for provisioning state 2. -type ProvisioningState2 string - -const ( - // ProvisioningState2Creating ... - ProvisioningState2Creating ProvisioningState2 = "Creating" - // ProvisioningState2Deleting ... - ProvisioningState2Deleting ProvisioningState2 = "Deleting" - // ProvisioningState2Failed ... - ProvisioningState2Failed ProvisioningState2 = "Failed" - // ProvisioningState2Migrating ... - ProvisioningState2Migrating ProvisioningState2 = "Migrating" - // ProvisioningState2Succeeded ... - ProvisioningState2Succeeded ProvisioningState2 = "Succeeded" - // ProvisioningState2Updating ... - ProvisioningState2Updating ProvisioningState2 = "Updating" -) - -// PossibleProvisioningState2Values returns an array of possible values for the ProvisioningState2 const type. -func PossibleProvisioningState2Values() []ProvisioningState2 { - return []ProvisioningState2{ProvisioningState2Creating, ProvisioningState2Deleting, ProvisioningState2Failed, ProvisioningState2Migrating, ProvisioningState2Succeeded, ProvisioningState2Updating} -} - -// ProvisioningState3 enumerates the values for provisioning state 3. -type ProvisioningState3 string - -const ( - // ProvisioningState3Creating ... - ProvisioningState3Creating ProvisioningState3 = "Creating" - // ProvisioningState3Deleting ... - ProvisioningState3Deleting ProvisioningState3 = "Deleting" - // ProvisioningState3Failed ... - ProvisioningState3Failed ProvisioningState3 = "Failed" - // ProvisioningState3Migrating ... - ProvisioningState3Migrating ProvisioningState3 = "Migrating" - // ProvisioningState3Succeeded ... - ProvisioningState3Succeeded ProvisioningState3 = "Succeeded" - // ProvisioningState3Updating ... - ProvisioningState3Updating ProvisioningState3 = "Updating" -) - -// PossibleProvisioningState3Values returns an array of possible values for the ProvisioningState3 const type. -func PossibleProvisioningState3Values() []ProvisioningState3 { - return []ProvisioningState3{ProvisioningState3Creating, ProvisioningState3Deleting, ProvisioningState3Failed, ProvisioningState3Migrating, ProvisioningState3Succeeded, ProvisioningState3Updating} -} - -// ProximityPlacementGroupType enumerates the values for proximity placement group type. -type ProximityPlacementGroupType string - -const ( - // Standard ... - Standard ProximityPlacementGroupType = "Standard" - // Ultra ... - Ultra ProximityPlacementGroupType = "Ultra" -) - -// PossibleProximityPlacementGroupTypeValues returns an array of possible values for the ProximityPlacementGroupType const type. -func PossibleProximityPlacementGroupTypeValues() []ProximityPlacementGroupType { - return []ProximityPlacementGroupType{Standard, Ultra} -} - -// PublicIPAddressSkuName enumerates the values for public ip address sku name. -type PublicIPAddressSkuName string - -const ( - // PublicIPAddressSkuNameBasic ... - PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic" - // PublicIPAddressSkuNameStandard ... - PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard" -) - -// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type. -func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName { - return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard} -} - -// PublicIPAddressSkuTier enumerates the values for public ip address sku tier. -type PublicIPAddressSkuTier string - -const ( - // Global ... - Global PublicIPAddressSkuTier = "Global" - // Regional ... - Regional PublicIPAddressSkuTier = "Regional" -) - -// PossiblePublicIPAddressSkuTierValues returns an array of possible values for the PublicIPAddressSkuTier const type. -func PossiblePublicIPAddressSkuTierValues() []PublicIPAddressSkuTier { - return []PublicIPAddressSkuTier{Global, Regional} -} - -// PublicIPAllocationMethod enumerates the values for public ip allocation method. -type PublicIPAllocationMethod string - -const ( - // Dynamic ... - Dynamic PublicIPAllocationMethod = "Dynamic" - // Static ... - Static PublicIPAllocationMethod = "Static" -) - -// PossiblePublicIPAllocationMethodValues returns an array of possible values for the PublicIPAllocationMethod const type. -func PossiblePublicIPAllocationMethodValues() []PublicIPAllocationMethod { - return []PublicIPAllocationMethod{Dynamic, Static} -} - -// PublicNetworkAccess enumerates the values for public network access. -type PublicNetworkAccess string - -const ( - // Disabled You cannot access the underlying data of the disk publicly on the internet even when - // NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your trusted - // Azure VNET when NetworkAccessPolicy is set to AllowPrivate. - Disabled PublicNetworkAccess = "Disabled" - // Enabled You can generate a SAS URI to access the underlying data of the disk publicly on the internet - // when NetworkAccessPolicy is set to AllowAll. You can access the data via the SAS URI only from your - // trusted Azure VNET when NetworkAccessPolicy is set to AllowPrivate. - Enabled PublicNetworkAccess = "Enabled" -) - -// PossiblePublicNetworkAccessValues returns an array of possible values for the PublicNetworkAccess const type. -func PossiblePublicNetworkAccessValues() []PublicNetworkAccess { - return []PublicNetworkAccess{Disabled, Enabled} -} - -// RepairAction enumerates the values for repair action. -type RepairAction string - -const ( - // Reimage ... - Reimage RepairAction = "Reimage" - // Replace ... - Replace RepairAction = "Replace" - // Restart ... - Restart RepairAction = "Restart" -) - -// PossibleRepairActionValues returns an array of possible values for the RepairAction const type. -func PossibleRepairActionValues() []RepairAction { - return []RepairAction{Reimage, Replace, Restart} -} - -// ReplicationMode enumerates the values for replication mode. -type ReplicationMode string - -const ( - // Full ... - Full ReplicationMode = "Full" - // Shallow ... - Shallow ReplicationMode = "Shallow" -) - -// PossibleReplicationModeValues returns an array of possible values for the ReplicationMode const type. -func PossibleReplicationModeValues() []ReplicationMode { - return []ReplicationMode{Full, Shallow} -} - -// ReplicationState enumerates the values for replication state. -type ReplicationState string - -const ( - // ReplicationStateCompleted ... - ReplicationStateCompleted ReplicationState = "Completed" - // ReplicationStateFailed ... - ReplicationStateFailed ReplicationState = "Failed" - // ReplicationStateReplicating ... - ReplicationStateReplicating ReplicationState = "Replicating" - // ReplicationStateUnknown ... - ReplicationStateUnknown ReplicationState = "Unknown" -) - -// PossibleReplicationStateValues returns an array of possible values for the ReplicationState const type. -func PossibleReplicationStateValues() []ReplicationState { - return []ReplicationState{ReplicationStateCompleted, ReplicationStateFailed, ReplicationStateReplicating, ReplicationStateUnknown} -} - -// ReplicationStatusTypes enumerates the values for replication status types. -type ReplicationStatusTypes string - -const ( - // ReplicationStatusTypesReplicationStatus ... - ReplicationStatusTypesReplicationStatus ReplicationStatusTypes = "ReplicationStatus" -) - -// PossibleReplicationStatusTypesValues returns an array of possible values for the ReplicationStatusTypes const type. -func PossibleReplicationStatusTypesValues() []ReplicationStatusTypes { - return []ReplicationStatusTypes{ReplicationStatusTypesReplicationStatus} -} - -// ResourceIdentityType enumerates the values for resource identity type. -type ResourceIdentityType string - -const ( - // ResourceIdentityTypeNone ... - ResourceIdentityTypeNone ResourceIdentityType = "None" - // ResourceIdentityTypeSystemAssigned ... - ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned" - // ResourceIdentityTypeSystemAssignedUserAssigned ... - ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned" - // ResourceIdentityTypeUserAssigned ... - ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned" -) - -// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type. -func PossibleResourceIdentityTypeValues() []ResourceIdentityType { - return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned} -} - -// ResourceSkuCapacityScaleType enumerates the values for resource sku capacity scale type. -type ResourceSkuCapacityScaleType string - -const ( - // ResourceSkuCapacityScaleTypeAutomatic ... - ResourceSkuCapacityScaleTypeAutomatic ResourceSkuCapacityScaleType = "Automatic" - // ResourceSkuCapacityScaleTypeManual ... - ResourceSkuCapacityScaleTypeManual ResourceSkuCapacityScaleType = "Manual" - // ResourceSkuCapacityScaleTypeNone ... - ResourceSkuCapacityScaleTypeNone ResourceSkuCapacityScaleType = "None" -) - -// PossibleResourceSkuCapacityScaleTypeValues returns an array of possible values for the ResourceSkuCapacityScaleType const type. -func PossibleResourceSkuCapacityScaleTypeValues() []ResourceSkuCapacityScaleType { - return []ResourceSkuCapacityScaleType{ResourceSkuCapacityScaleTypeAutomatic, ResourceSkuCapacityScaleTypeManual, ResourceSkuCapacityScaleTypeNone} -} - -// ResourceSkuRestrictionsReasonCode enumerates the values for resource sku restrictions reason code. -type ResourceSkuRestrictionsReasonCode string - -const ( - // NotAvailableForSubscription ... - NotAvailableForSubscription ResourceSkuRestrictionsReasonCode = "NotAvailableForSubscription" - // QuotaID ... - QuotaID ResourceSkuRestrictionsReasonCode = "QuotaId" -) - -// PossibleResourceSkuRestrictionsReasonCodeValues returns an array of possible values for the ResourceSkuRestrictionsReasonCode const type. -func PossibleResourceSkuRestrictionsReasonCodeValues() []ResourceSkuRestrictionsReasonCode { - return []ResourceSkuRestrictionsReasonCode{NotAvailableForSubscription, QuotaID} -} - -// ResourceSkuRestrictionsType enumerates the values for resource sku restrictions type. -type ResourceSkuRestrictionsType string - -const ( - // Location ... - Location ResourceSkuRestrictionsType = "Location" - // Zone ... - Zone ResourceSkuRestrictionsType = "Zone" -) - -// PossibleResourceSkuRestrictionsTypeValues returns an array of possible values for the ResourceSkuRestrictionsType const type. -func PossibleResourceSkuRestrictionsTypeValues() []ResourceSkuRestrictionsType { - return []ResourceSkuRestrictionsType{Location, Zone} -} - -// RestorePointCollectionExpandOptions enumerates the values for restore point collection expand options. -type RestorePointCollectionExpandOptions string - -const ( - // RestorePoints ... - RestorePoints RestorePointCollectionExpandOptions = "restorePoints" -) - -// PossibleRestorePointCollectionExpandOptionsValues returns an array of possible values for the RestorePointCollectionExpandOptions const type. -func PossibleRestorePointCollectionExpandOptionsValues() []RestorePointCollectionExpandOptions { - return []RestorePointCollectionExpandOptions{RestorePoints} -} - -// RestorePointExpandOptions enumerates the values for restore point expand options. -type RestorePointExpandOptions string - -const ( - // RestorePointExpandOptionsInstanceView ... - RestorePointExpandOptionsInstanceView RestorePointExpandOptions = "instanceView" -) - -// PossibleRestorePointExpandOptionsValues returns an array of possible values for the RestorePointExpandOptions const type. -func PossibleRestorePointExpandOptionsValues() []RestorePointExpandOptions { - return []RestorePointExpandOptions{RestorePointExpandOptionsInstanceView} -} - -// RollingUpgradeActionType enumerates the values for rolling upgrade action type. -type RollingUpgradeActionType string - -const ( - // Cancel ... - Cancel RollingUpgradeActionType = "Cancel" - // Start ... - Start RollingUpgradeActionType = "Start" -) - -// PossibleRollingUpgradeActionTypeValues returns an array of possible values for the RollingUpgradeActionType const type. -func PossibleRollingUpgradeActionTypeValues() []RollingUpgradeActionType { - return []RollingUpgradeActionType{Cancel, Start} -} - -// RollingUpgradeStatusCode enumerates the values for rolling upgrade status code. -type RollingUpgradeStatusCode string - -const ( - // RollingUpgradeStatusCodeCancelled ... - RollingUpgradeStatusCodeCancelled RollingUpgradeStatusCode = "Cancelled" - // RollingUpgradeStatusCodeCompleted ... - RollingUpgradeStatusCodeCompleted RollingUpgradeStatusCode = "Completed" - // RollingUpgradeStatusCodeFaulted ... - RollingUpgradeStatusCodeFaulted RollingUpgradeStatusCode = "Faulted" - // RollingUpgradeStatusCodeRollingForward ... - RollingUpgradeStatusCodeRollingForward RollingUpgradeStatusCode = "RollingForward" -) - -// PossibleRollingUpgradeStatusCodeValues returns an array of possible values for the RollingUpgradeStatusCode const type. -func PossibleRollingUpgradeStatusCodeValues() []RollingUpgradeStatusCode { - return []RollingUpgradeStatusCode{RollingUpgradeStatusCodeCancelled, RollingUpgradeStatusCodeCompleted, RollingUpgradeStatusCodeFaulted, RollingUpgradeStatusCodeRollingForward} -} - -// SecurityEncryptionTypes enumerates the values for security encryption types. -type SecurityEncryptionTypes string - -const ( - // DiskWithVMGuestState ... - DiskWithVMGuestState SecurityEncryptionTypes = "DiskWithVMGuestState" - // VMGuestStateOnly ... - VMGuestStateOnly SecurityEncryptionTypes = "VMGuestStateOnly" -) - -// PossibleSecurityEncryptionTypesValues returns an array of possible values for the SecurityEncryptionTypes const type. -func PossibleSecurityEncryptionTypesValues() []SecurityEncryptionTypes { - return []SecurityEncryptionTypes{DiskWithVMGuestState, VMGuestStateOnly} -} - -// SecurityTypes enumerates the values for security types. -type SecurityTypes string - -const ( - // SecurityTypesConfidentialVM ... - SecurityTypesConfidentialVM SecurityTypes = "ConfidentialVM" - // SecurityTypesTrustedLaunch ... - SecurityTypesTrustedLaunch SecurityTypes = "TrustedLaunch" -) - -// PossibleSecurityTypesValues returns an array of possible values for the SecurityTypes const type. -func PossibleSecurityTypesValues() []SecurityTypes { - return []SecurityTypes{SecurityTypesConfidentialVM, SecurityTypesTrustedLaunch} -} - -// SelectPermissions enumerates the values for select permissions. -type SelectPermissions string - -const ( - // Permissions ... - Permissions SelectPermissions = "Permissions" -) - -// PossibleSelectPermissionsValues returns an array of possible values for the SelectPermissions const type. -func PossibleSelectPermissionsValues() []SelectPermissions { - return []SelectPermissions{Permissions} -} - -// SettingNames enumerates the values for setting names. -type SettingNames string - -const ( - // AutoLogon ... - AutoLogon SettingNames = "AutoLogon" - // FirstLogonCommands ... - FirstLogonCommands SettingNames = "FirstLogonCommands" -) - -// PossibleSettingNamesValues returns an array of possible values for the SettingNames const type. -func PossibleSettingNamesValues() []SettingNames { - return []SettingNames{AutoLogon, FirstLogonCommands} -} - -// SharedToValues enumerates the values for shared to values. -type SharedToValues string - -const ( - // Tenant ... - Tenant SharedToValues = "tenant" -) - -// PossibleSharedToValuesValues returns an array of possible values for the SharedToValues const type. -func PossibleSharedToValuesValues() []SharedToValues { - return []SharedToValues{Tenant} -} - -// SharingProfileGroupTypes enumerates the values for sharing profile group types. -type SharingProfileGroupTypes string - -const ( - // AADTenants ... - AADTenants SharingProfileGroupTypes = "AADTenants" - // Community ... - Community SharingProfileGroupTypes = "Community" - // Subscriptions ... - Subscriptions SharingProfileGroupTypes = "Subscriptions" -) - -// PossibleSharingProfileGroupTypesValues returns an array of possible values for the SharingProfileGroupTypes const type. -func PossibleSharingProfileGroupTypesValues() []SharingProfileGroupTypes { - return []SharingProfileGroupTypes{AADTenants, Community, Subscriptions} -} - -// SharingState enumerates the values for sharing state. -type SharingState string - -const ( - // SharingStateFailed ... - SharingStateFailed SharingState = "Failed" - // SharingStateInProgress ... - SharingStateInProgress SharingState = "InProgress" - // SharingStateSucceeded ... - SharingStateSucceeded SharingState = "Succeeded" - // SharingStateUnknown ... - SharingStateUnknown SharingState = "Unknown" -) - -// PossibleSharingStateValues returns an array of possible values for the SharingState const type. -func PossibleSharingStateValues() []SharingState { - return []SharingState{SharingStateFailed, SharingStateInProgress, SharingStateSucceeded, SharingStateUnknown} -} - -// SharingUpdateOperationTypes enumerates the values for sharing update operation types. -type SharingUpdateOperationTypes string - -const ( - // Add ... - Add SharingUpdateOperationTypes = "Add" - // EnableCommunity ... - EnableCommunity SharingUpdateOperationTypes = "EnableCommunity" - // Remove ... - Remove SharingUpdateOperationTypes = "Remove" - // Reset ... - Reset SharingUpdateOperationTypes = "Reset" -) - -// PossibleSharingUpdateOperationTypesValues returns an array of possible values for the SharingUpdateOperationTypes const type. -func PossibleSharingUpdateOperationTypesValues() []SharingUpdateOperationTypes { - return []SharingUpdateOperationTypes{Add, EnableCommunity, Remove, Reset} -} - -// SnapshotStorageAccountTypes enumerates the values for snapshot storage account types. -type SnapshotStorageAccountTypes string - -const ( - // SnapshotStorageAccountTypesPremiumLRS Premium SSD locally redundant storage - SnapshotStorageAccountTypesPremiumLRS SnapshotStorageAccountTypes = "Premium_LRS" - // SnapshotStorageAccountTypesStandardLRS Standard HDD locally redundant storage - SnapshotStorageAccountTypesStandardLRS SnapshotStorageAccountTypes = "Standard_LRS" - // SnapshotStorageAccountTypesStandardZRS Standard zone redundant storage - SnapshotStorageAccountTypesStandardZRS SnapshotStorageAccountTypes = "Standard_ZRS" -) - -// PossibleSnapshotStorageAccountTypesValues returns an array of possible values for the SnapshotStorageAccountTypes const type. -func PossibleSnapshotStorageAccountTypesValues() []SnapshotStorageAccountTypes { - return []SnapshotStorageAccountTypes{SnapshotStorageAccountTypesPremiumLRS, SnapshotStorageAccountTypesStandardLRS, SnapshotStorageAccountTypesStandardZRS} -} - -// StatusLevelTypes enumerates the values for status level types. -type StatusLevelTypes string - -const ( - // Error ... - Error StatusLevelTypes = "Error" - // Info ... - Info StatusLevelTypes = "Info" - // Warning ... - Warning StatusLevelTypes = "Warning" -) - -// PossibleStatusLevelTypesValues returns an array of possible values for the StatusLevelTypes const type. -func PossibleStatusLevelTypesValues() []StatusLevelTypes { - return []StatusLevelTypes{Error, Info, Warning} -} - -// StorageAccountType enumerates the values for storage account type. -type StorageAccountType string - -const ( - // StorageAccountTypePremiumLRS ... - StorageAccountTypePremiumLRS StorageAccountType = "Premium_LRS" - // StorageAccountTypeStandardLRS ... - StorageAccountTypeStandardLRS StorageAccountType = "Standard_LRS" - // StorageAccountTypeStandardZRS ... - StorageAccountTypeStandardZRS StorageAccountType = "Standard_ZRS" -) - -// PossibleStorageAccountTypeValues returns an array of possible values for the StorageAccountType const type. -func PossibleStorageAccountTypeValues() []StorageAccountType { - return []StorageAccountType{StorageAccountTypePremiumLRS, StorageAccountTypeStandardLRS, StorageAccountTypeStandardZRS} -} - -// StorageAccountTypes enumerates the values for storage account types. -type StorageAccountTypes string - -const ( - // StorageAccountTypesPremiumLRS ... - StorageAccountTypesPremiumLRS StorageAccountTypes = "Premium_LRS" - // StorageAccountTypesPremiumV2LRS ... - StorageAccountTypesPremiumV2LRS StorageAccountTypes = "PremiumV2_LRS" - // StorageAccountTypesPremiumZRS ... - StorageAccountTypesPremiumZRS StorageAccountTypes = "Premium_ZRS" - // StorageAccountTypesStandardLRS ... - StorageAccountTypesStandardLRS StorageAccountTypes = "Standard_LRS" - // StorageAccountTypesStandardSSDLRS ... - StorageAccountTypesStandardSSDLRS StorageAccountTypes = "StandardSSD_LRS" - // StorageAccountTypesStandardSSDZRS ... - StorageAccountTypesStandardSSDZRS StorageAccountTypes = "StandardSSD_ZRS" - // StorageAccountTypesUltraSSDLRS ... - StorageAccountTypesUltraSSDLRS StorageAccountTypes = "UltraSSD_LRS" -) - -// PossibleStorageAccountTypesValues returns an array of possible values for the StorageAccountTypes const type. -func PossibleStorageAccountTypesValues() []StorageAccountTypes { - return []StorageAccountTypes{StorageAccountTypesPremiumLRS, StorageAccountTypesPremiumV2LRS, StorageAccountTypesPremiumZRS, StorageAccountTypesStandardLRS, StorageAccountTypesStandardSSDLRS, StorageAccountTypesStandardSSDZRS, StorageAccountTypesUltraSSDLRS} -} - -// UpgradeMode enumerates the values for upgrade mode. -type UpgradeMode string - -const ( - // UpgradeModeAutomatic ... - UpgradeModeAutomatic UpgradeMode = "Automatic" - // UpgradeModeManual ... - UpgradeModeManual UpgradeMode = "Manual" - // UpgradeModeRolling ... - UpgradeModeRolling UpgradeMode = "Rolling" -) - -// PossibleUpgradeModeValues returns an array of possible values for the UpgradeMode const type. -func PossibleUpgradeModeValues() []UpgradeMode { - return []UpgradeMode{UpgradeModeAutomatic, UpgradeModeManual, UpgradeModeRolling} -} - -// UpgradeOperationInvoker enumerates the values for upgrade operation invoker. -type UpgradeOperationInvoker string - -const ( - // UpgradeOperationInvokerPlatform ... - UpgradeOperationInvokerPlatform UpgradeOperationInvoker = "Platform" - // UpgradeOperationInvokerUnknown ... - UpgradeOperationInvokerUnknown UpgradeOperationInvoker = "Unknown" - // UpgradeOperationInvokerUser ... - UpgradeOperationInvokerUser UpgradeOperationInvoker = "User" -) - -// PossibleUpgradeOperationInvokerValues returns an array of possible values for the UpgradeOperationInvoker const type. -func PossibleUpgradeOperationInvokerValues() []UpgradeOperationInvoker { - return []UpgradeOperationInvoker{UpgradeOperationInvokerPlatform, UpgradeOperationInvokerUnknown, UpgradeOperationInvokerUser} -} - -// UpgradeState enumerates the values for upgrade state. -type UpgradeState string - -const ( - // UpgradeStateCancelled ... - UpgradeStateCancelled UpgradeState = "Cancelled" - // UpgradeStateCompleted ... - UpgradeStateCompleted UpgradeState = "Completed" - // UpgradeStateFaulted ... - UpgradeStateFaulted UpgradeState = "Faulted" - // UpgradeStateRollingForward ... - UpgradeStateRollingForward UpgradeState = "RollingForward" -) - -// PossibleUpgradeStateValues returns an array of possible values for the UpgradeState const type. -func PossibleUpgradeStateValues() []UpgradeState { - return []UpgradeState{UpgradeStateCancelled, UpgradeStateCompleted, UpgradeStateFaulted, UpgradeStateRollingForward} -} - -// VirtualMachineEvictionPolicyTypes enumerates the values for virtual machine eviction policy types. -type VirtualMachineEvictionPolicyTypes string - -const ( - // VirtualMachineEvictionPolicyTypesDeallocate ... - VirtualMachineEvictionPolicyTypesDeallocate VirtualMachineEvictionPolicyTypes = "Deallocate" - // VirtualMachineEvictionPolicyTypesDelete ... - VirtualMachineEvictionPolicyTypesDelete VirtualMachineEvictionPolicyTypes = "Delete" -) - -// PossibleVirtualMachineEvictionPolicyTypesValues returns an array of possible values for the VirtualMachineEvictionPolicyTypes const type. -func PossibleVirtualMachineEvictionPolicyTypesValues() []VirtualMachineEvictionPolicyTypes { - return []VirtualMachineEvictionPolicyTypes{VirtualMachineEvictionPolicyTypesDeallocate, VirtualMachineEvictionPolicyTypesDelete} -} - -// VirtualMachinePriorityTypes enumerates the values for virtual machine priority types. -type VirtualMachinePriorityTypes string - -const ( - // Low ... - Low VirtualMachinePriorityTypes = "Low" - // Regular ... - Regular VirtualMachinePriorityTypes = "Regular" - // Spot ... - Spot VirtualMachinePriorityTypes = "Spot" -) - -// PossibleVirtualMachinePriorityTypesValues returns an array of possible values for the VirtualMachinePriorityTypes const type. -func PossibleVirtualMachinePriorityTypesValues() []VirtualMachinePriorityTypes { - return []VirtualMachinePriorityTypes{Low, Regular, Spot} -} - -// VirtualMachineScaleSetScaleInRules enumerates the values for virtual machine scale set scale in rules. -type VirtualMachineScaleSetScaleInRules string - -const ( - // Default ... - Default VirtualMachineScaleSetScaleInRules = "Default" - // NewestVM ... - NewestVM VirtualMachineScaleSetScaleInRules = "NewestVM" - // OldestVM ... - OldestVM VirtualMachineScaleSetScaleInRules = "OldestVM" -) - -// PossibleVirtualMachineScaleSetScaleInRulesValues returns an array of possible values for the VirtualMachineScaleSetScaleInRules const type. -func PossibleVirtualMachineScaleSetScaleInRulesValues() []VirtualMachineScaleSetScaleInRules { - return []VirtualMachineScaleSetScaleInRules{Default, NewestVM, OldestVM} -} - -// VirtualMachineScaleSetSkuScaleType enumerates the values for virtual machine scale set sku scale type. -type VirtualMachineScaleSetSkuScaleType string - -const ( - // VirtualMachineScaleSetSkuScaleTypeAutomatic ... - VirtualMachineScaleSetSkuScaleTypeAutomatic VirtualMachineScaleSetSkuScaleType = "Automatic" - // VirtualMachineScaleSetSkuScaleTypeNone ... - VirtualMachineScaleSetSkuScaleTypeNone VirtualMachineScaleSetSkuScaleType = "None" -) - -// PossibleVirtualMachineScaleSetSkuScaleTypeValues returns an array of possible values for the VirtualMachineScaleSetSkuScaleType const type. -func PossibleVirtualMachineScaleSetSkuScaleTypeValues() []VirtualMachineScaleSetSkuScaleType { - return []VirtualMachineScaleSetSkuScaleType{VirtualMachineScaleSetSkuScaleTypeAutomatic, VirtualMachineScaleSetSkuScaleTypeNone} -} - -// VirtualMachineSizeTypes enumerates the values for virtual machine size types. -type VirtualMachineSizeTypes string - -const ( - // BasicA0 ... - BasicA0 VirtualMachineSizeTypes = "Basic_A0" - // BasicA1 ... - BasicA1 VirtualMachineSizeTypes = "Basic_A1" - // BasicA2 ... - BasicA2 VirtualMachineSizeTypes = "Basic_A2" - // BasicA3 ... - BasicA3 VirtualMachineSizeTypes = "Basic_A3" - // BasicA4 ... - BasicA4 VirtualMachineSizeTypes = "Basic_A4" - // StandardA0 ... - StandardA0 VirtualMachineSizeTypes = "Standard_A0" - // StandardA1 ... - StandardA1 VirtualMachineSizeTypes = "Standard_A1" - // StandardA10 ... - StandardA10 VirtualMachineSizeTypes = "Standard_A10" - // StandardA11 ... - StandardA11 VirtualMachineSizeTypes = "Standard_A11" - // StandardA1V2 ... - StandardA1V2 VirtualMachineSizeTypes = "Standard_A1_v2" - // StandardA2 ... - StandardA2 VirtualMachineSizeTypes = "Standard_A2" - // StandardA2mV2 ... - StandardA2mV2 VirtualMachineSizeTypes = "Standard_A2m_v2" - // StandardA2V2 ... - StandardA2V2 VirtualMachineSizeTypes = "Standard_A2_v2" - // StandardA3 ... - StandardA3 VirtualMachineSizeTypes = "Standard_A3" - // StandardA4 ... - StandardA4 VirtualMachineSizeTypes = "Standard_A4" - // StandardA4mV2 ... - StandardA4mV2 VirtualMachineSizeTypes = "Standard_A4m_v2" - // StandardA4V2 ... - StandardA4V2 VirtualMachineSizeTypes = "Standard_A4_v2" - // StandardA5 ... - StandardA5 VirtualMachineSizeTypes = "Standard_A5" - // StandardA6 ... - StandardA6 VirtualMachineSizeTypes = "Standard_A6" - // StandardA7 ... - StandardA7 VirtualMachineSizeTypes = "Standard_A7" - // StandardA8 ... - StandardA8 VirtualMachineSizeTypes = "Standard_A8" - // StandardA8mV2 ... - StandardA8mV2 VirtualMachineSizeTypes = "Standard_A8m_v2" - // StandardA8V2 ... - StandardA8V2 VirtualMachineSizeTypes = "Standard_A8_v2" - // StandardA9 ... - StandardA9 VirtualMachineSizeTypes = "Standard_A9" - // StandardB1ms ... - StandardB1ms VirtualMachineSizeTypes = "Standard_B1ms" - // StandardB1s ... - StandardB1s VirtualMachineSizeTypes = "Standard_B1s" - // StandardB2ms ... - StandardB2ms VirtualMachineSizeTypes = "Standard_B2ms" - // StandardB2s ... - StandardB2s VirtualMachineSizeTypes = "Standard_B2s" - // StandardB4ms ... - StandardB4ms VirtualMachineSizeTypes = "Standard_B4ms" - // StandardB8ms ... - StandardB8ms VirtualMachineSizeTypes = "Standard_B8ms" - // StandardD1 ... - StandardD1 VirtualMachineSizeTypes = "Standard_D1" - // StandardD11 ... - StandardD11 VirtualMachineSizeTypes = "Standard_D11" - // StandardD11V2 ... - StandardD11V2 VirtualMachineSizeTypes = "Standard_D11_v2" - // StandardD12 ... - StandardD12 VirtualMachineSizeTypes = "Standard_D12" - // StandardD12V2 ... - StandardD12V2 VirtualMachineSizeTypes = "Standard_D12_v2" - // StandardD13 ... - StandardD13 VirtualMachineSizeTypes = "Standard_D13" - // StandardD13V2 ... - StandardD13V2 VirtualMachineSizeTypes = "Standard_D13_v2" - // StandardD14 ... - StandardD14 VirtualMachineSizeTypes = "Standard_D14" - // StandardD14V2 ... - StandardD14V2 VirtualMachineSizeTypes = "Standard_D14_v2" - // StandardD15V2 ... - StandardD15V2 VirtualMachineSizeTypes = "Standard_D15_v2" - // StandardD16sV3 ... - StandardD16sV3 VirtualMachineSizeTypes = "Standard_D16s_v3" - // StandardD16V3 ... - StandardD16V3 VirtualMachineSizeTypes = "Standard_D16_v3" - // StandardD1V2 ... - StandardD1V2 VirtualMachineSizeTypes = "Standard_D1_v2" - // StandardD2 ... - StandardD2 VirtualMachineSizeTypes = "Standard_D2" - // StandardD2sV3 ... - StandardD2sV3 VirtualMachineSizeTypes = "Standard_D2s_v3" - // StandardD2V2 ... - StandardD2V2 VirtualMachineSizeTypes = "Standard_D2_v2" - // StandardD2V3 ... - StandardD2V3 VirtualMachineSizeTypes = "Standard_D2_v3" - // StandardD3 ... - StandardD3 VirtualMachineSizeTypes = "Standard_D3" - // StandardD32sV3 ... - StandardD32sV3 VirtualMachineSizeTypes = "Standard_D32s_v3" - // StandardD32V3 ... - StandardD32V3 VirtualMachineSizeTypes = "Standard_D32_v3" - // StandardD3V2 ... - StandardD3V2 VirtualMachineSizeTypes = "Standard_D3_v2" - // StandardD4 ... - StandardD4 VirtualMachineSizeTypes = "Standard_D4" - // StandardD4sV3 ... - StandardD4sV3 VirtualMachineSizeTypes = "Standard_D4s_v3" - // StandardD4V2 ... - StandardD4V2 VirtualMachineSizeTypes = "Standard_D4_v2" - // StandardD4V3 ... - StandardD4V3 VirtualMachineSizeTypes = "Standard_D4_v3" - // StandardD5V2 ... - StandardD5V2 VirtualMachineSizeTypes = "Standard_D5_v2" - // StandardD64sV3 ... - StandardD64sV3 VirtualMachineSizeTypes = "Standard_D64s_v3" - // StandardD64V3 ... - StandardD64V3 VirtualMachineSizeTypes = "Standard_D64_v3" - // StandardD8sV3 ... - StandardD8sV3 VirtualMachineSizeTypes = "Standard_D8s_v3" - // StandardD8V3 ... - StandardD8V3 VirtualMachineSizeTypes = "Standard_D8_v3" - // StandardDS1 ... - StandardDS1 VirtualMachineSizeTypes = "Standard_DS1" - // StandardDS11 ... - StandardDS11 VirtualMachineSizeTypes = "Standard_DS11" - // StandardDS11V2 ... - StandardDS11V2 VirtualMachineSizeTypes = "Standard_DS11_v2" - // StandardDS12 ... - StandardDS12 VirtualMachineSizeTypes = "Standard_DS12" - // StandardDS12V2 ... - StandardDS12V2 VirtualMachineSizeTypes = "Standard_DS12_v2" - // StandardDS13 ... - StandardDS13 VirtualMachineSizeTypes = "Standard_DS13" - // StandardDS132V2 ... - StandardDS132V2 VirtualMachineSizeTypes = "Standard_DS13-2_v2" - // StandardDS134V2 ... - StandardDS134V2 VirtualMachineSizeTypes = "Standard_DS13-4_v2" - // StandardDS13V2 ... - StandardDS13V2 VirtualMachineSizeTypes = "Standard_DS13_v2" - // StandardDS14 ... - StandardDS14 VirtualMachineSizeTypes = "Standard_DS14" - // StandardDS144V2 ... - StandardDS144V2 VirtualMachineSizeTypes = "Standard_DS14-4_v2" - // StandardDS148V2 ... - StandardDS148V2 VirtualMachineSizeTypes = "Standard_DS14-8_v2" - // StandardDS14V2 ... - StandardDS14V2 VirtualMachineSizeTypes = "Standard_DS14_v2" - // StandardDS15V2 ... - StandardDS15V2 VirtualMachineSizeTypes = "Standard_DS15_v2" - // StandardDS1V2 ... - StandardDS1V2 VirtualMachineSizeTypes = "Standard_DS1_v2" - // StandardDS2 ... - StandardDS2 VirtualMachineSizeTypes = "Standard_DS2" - // StandardDS2V2 ... - StandardDS2V2 VirtualMachineSizeTypes = "Standard_DS2_v2" - // StandardDS3 ... - StandardDS3 VirtualMachineSizeTypes = "Standard_DS3" - // StandardDS3V2 ... - StandardDS3V2 VirtualMachineSizeTypes = "Standard_DS3_v2" - // StandardDS4 ... - StandardDS4 VirtualMachineSizeTypes = "Standard_DS4" - // StandardDS4V2 ... - StandardDS4V2 VirtualMachineSizeTypes = "Standard_DS4_v2" - // StandardDS5V2 ... - StandardDS5V2 VirtualMachineSizeTypes = "Standard_DS5_v2" - // StandardE16sV3 ... - StandardE16sV3 VirtualMachineSizeTypes = "Standard_E16s_v3" - // StandardE16V3 ... - StandardE16V3 VirtualMachineSizeTypes = "Standard_E16_v3" - // StandardE2sV3 ... - StandardE2sV3 VirtualMachineSizeTypes = "Standard_E2s_v3" - // StandardE2V3 ... - StandardE2V3 VirtualMachineSizeTypes = "Standard_E2_v3" - // StandardE3216V3 ... - StandardE3216V3 VirtualMachineSizeTypes = "Standard_E32-16_v3" - // StandardE328sV3 ... - StandardE328sV3 VirtualMachineSizeTypes = "Standard_E32-8s_v3" - // StandardE32sV3 ... - StandardE32sV3 VirtualMachineSizeTypes = "Standard_E32s_v3" - // StandardE32V3 ... - StandardE32V3 VirtualMachineSizeTypes = "Standard_E32_v3" - // StandardE4sV3 ... - StandardE4sV3 VirtualMachineSizeTypes = "Standard_E4s_v3" - // StandardE4V3 ... - StandardE4V3 VirtualMachineSizeTypes = "Standard_E4_v3" - // StandardE6416sV3 ... - StandardE6416sV3 VirtualMachineSizeTypes = "Standard_E64-16s_v3" - // StandardE6432sV3 ... - StandardE6432sV3 VirtualMachineSizeTypes = "Standard_E64-32s_v3" - // StandardE64sV3 ... - StandardE64sV3 VirtualMachineSizeTypes = "Standard_E64s_v3" - // StandardE64V3 ... - StandardE64V3 VirtualMachineSizeTypes = "Standard_E64_v3" - // StandardE8sV3 ... - StandardE8sV3 VirtualMachineSizeTypes = "Standard_E8s_v3" - // StandardE8V3 ... - StandardE8V3 VirtualMachineSizeTypes = "Standard_E8_v3" - // StandardF1 ... - StandardF1 VirtualMachineSizeTypes = "Standard_F1" - // StandardF16 ... - StandardF16 VirtualMachineSizeTypes = "Standard_F16" - // StandardF16s ... - StandardF16s VirtualMachineSizeTypes = "Standard_F16s" - // StandardF16sV2 ... - StandardF16sV2 VirtualMachineSizeTypes = "Standard_F16s_v2" - // StandardF1s ... - StandardF1s VirtualMachineSizeTypes = "Standard_F1s" - // StandardF2 ... - StandardF2 VirtualMachineSizeTypes = "Standard_F2" - // StandardF2s ... - StandardF2s VirtualMachineSizeTypes = "Standard_F2s" - // StandardF2sV2 ... - StandardF2sV2 VirtualMachineSizeTypes = "Standard_F2s_v2" - // StandardF32sV2 ... - StandardF32sV2 VirtualMachineSizeTypes = "Standard_F32s_v2" - // StandardF4 ... - StandardF4 VirtualMachineSizeTypes = "Standard_F4" - // StandardF4s ... - StandardF4s VirtualMachineSizeTypes = "Standard_F4s" - // StandardF4sV2 ... - StandardF4sV2 VirtualMachineSizeTypes = "Standard_F4s_v2" - // StandardF64sV2 ... - StandardF64sV2 VirtualMachineSizeTypes = "Standard_F64s_v2" - // StandardF72sV2 ... - StandardF72sV2 VirtualMachineSizeTypes = "Standard_F72s_v2" - // StandardF8 ... - StandardF8 VirtualMachineSizeTypes = "Standard_F8" - // StandardF8s ... - StandardF8s VirtualMachineSizeTypes = "Standard_F8s" - // StandardF8sV2 ... - StandardF8sV2 VirtualMachineSizeTypes = "Standard_F8s_v2" - // StandardG1 ... - StandardG1 VirtualMachineSizeTypes = "Standard_G1" - // StandardG2 ... - StandardG2 VirtualMachineSizeTypes = "Standard_G2" - // StandardG3 ... - StandardG3 VirtualMachineSizeTypes = "Standard_G3" - // StandardG4 ... - StandardG4 VirtualMachineSizeTypes = "Standard_G4" - // StandardG5 ... - StandardG5 VirtualMachineSizeTypes = "Standard_G5" - // StandardGS1 ... - StandardGS1 VirtualMachineSizeTypes = "Standard_GS1" - // StandardGS2 ... - StandardGS2 VirtualMachineSizeTypes = "Standard_GS2" - // StandardGS3 ... - StandardGS3 VirtualMachineSizeTypes = "Standard_GS3" - // StandardGS4 ... - StandardGS4 VirtualMachineSizeTypes = "Standard_GS4" - // StandardGS44 ... - StandardGS44 VirtualMachineSizeTypes = "Standard_GS4-4" - // StandardGS48 ... - StandardGS48 VirtualMachineSizeTypes = "Standard_GS4-8" - // StandardGS5 ... - StandardGS5 VirtualMachineSizeTypes = "Standard_GS5" - // StandardGS516 ... - StandardGS516 VirtualMachineSizeTypes = "Standard_GS5-16" - // StandardGS58 ... - StandardGS58 VirtualMachineSizeTypes = "Standard_GS5-8" - // StandardH16 ... - StandardH16 VirtualMachineSizeTypes = "Standard_H16" - // StandardH16m ... - StandardH16m VirtualMachineSizeTypes = "Standard_H16m" - // StandardH16mr ... - StandardH16mr VirtualMachineSizeTypes = "Standard_H16mr" - // StandardH16r ... - StandardH16r VirtualMachineSizeTypes = "Standard_H16r" - // StandardH8 ... - StandardH8 VirtualMachineSizeTypes = "Standard_H8" - // StandardH8m ... - StandardH8m VirtualMachineSizeTypes = "Standard_H8m" - // StandardL16s ... - StandardL16s VirtualMachineSizeTypes = "Standard_L16s" - // StandardL32s ... - StandardL32s VirtualMachineSizeTypes = "Standard_L32s" - // StandardL4s ... - StandardL4s VirtualMachineSizeTypes = "Standard_L4s" - // StandardL8s ... - StandardL8s VirtualMachineSizeTypes = "Standard_L8s" - // StandardM12832ms ... - StandardM12832ms VirtualMachineSizeTypes = "Standard_M128-32ms" - // StandardM12864ms ... - StandardM12864ms VirtualMachineSizeTypes = "Standard_M128-64ms" - // StandardM128ms ... - StandardM128ms VirtualMachineSizeTypes = "Standard_M128ms" - // StandardM128s ... - StandardM128s VirtualMachineSizeTypes = "Standard_M128s" - // StandardM6416ms ... - StandardM6416ms VirtualMachineSizeTypes = "Standard_M64-16ms" - // StandardM6432ms ... - StandardM6432ms VirtualMachineSizeTypes = "Standard_M64-32ms" - // StandardM64ms ... - StandardM64ms VirtualMachineSizeTypes = "Standard_M64ms" - // StandardM64s ... - StandardM64s VirtualMachineSizeTypes = "Standard_M64s" - // StandardNC12 ... - StandardNC12 VirtualMachineSizeTypes = "Standard_NC12" - // StandardNC12sV2 ... - StandardNC12sV2 VirtualMachineSizeTypes = "Standard_NC12s_v2" - // StandardNC12sV3 ... - StandardNC12sV3 VirtualMachineSizeTypes = "Standard_NC12s_v3" - // StandardNC24 ... - StandardNC24 VirtualMachineSizeTypes = "Standard_NC24" - // StandardNC24r ... - StandardNC24r VirtualMachineSizeTypes = "Standard_NC24r" - // StandardNC24rsV2 ... - StandardNC24rsV2 VirtualMachineSizeTypes = "Standard_NC24rs_v2" - // StandardNC24rsV3 ... - StandardNC24rsV3 VirtualMachineSizeTypes = "Standard_NC24rs_v3" - // StandardNC24sV2 ... - StandardNC24sV2 VirtualMachineSizeTypes = "Standard_NC24s_v2" - // StandardNC24sV3 ... - StandardNC24sV3 VirtualMachineSizeTypes = "Standard_NC24s_v3" - // StandardNC6 ... - StandardNC6 VirtualMachineSizeTypes = "Standard_NC6" - // StandardNC6sV2 ... - StandardNC6sV2 VirtualMachineSizeTypes = "Standard_NC6s_v2" - // StandardNC6sV3 ... - StandardNC6sV3 VirtualMachineSizeTypes = "Standard_NC6s_v3" - // StandardND12s ... - StandardND12s VirtualMachineSizeTypes = "Standard_ND12s" - // StandardND24rs ... - StandardND24rs VirtualMachineSizeTypes = "Standard_ND24rs" - // StandardND24s ... - StandardND24s VirtualMachineSizeTypes = "Standard_ND24s" - // StandardND6s ... - StandardND6s VirtualMachineSizeTypes = "Standard_ND6s" - // StandardNV12 ... - StandardNV12 VirtualMachineSizeTypes = "Standard_NV12" - // StandardNV24 ... - StandardNV24 VirtualMachineSizeTypes = "Standard_NV24" - // StandardNV6 ... - StandardNV6 VirtualMachineSizeTypes = "Standard_NV6" -) - -// PossibleVirtualMachineSizeTypesValues returns an array of possible values for the VirtualMachineSizeTypes const type. -func PossibleVirtualMachineSizeTypesValues() []VirtualMachineSizeTypes { - return []VirtualMachineSizeTypes{BasicA0, BasicA1, BasicA2, BasicA3, BasicA4, StandardA0, StandardA1, StandardA10, StandardA11, StandardA1V2, StandardA2, StandardA2mV2, StandardA2V2, StandardA3, StandardA4, StandardA4mV2, StandardA4V2, StandardA5, StandardA6, StandardA7, StandardA8, StandardA8mV2, StandardA8V2, StandardA9, StandardB1ms, StandardB1s, StandardB2ms, StandardB2s, StandardB4ms, StandardB8ms, StandardD1, StandardD11, StandardD11V2, StandardD12, StandardD12V2, StandardD13, StandardD13V2, StandardD14, StandardD14V2, StandardD15V2, StandardD16sV3, StandardD16V3, StandardD1V2, StandardD2, StandardD2sV3, StandardD2V2, StandardD2V3, StandardD3, StandardD32sV3, StandardD32V3, StandardD3V2, StandardD4, StandardD4sV3, StandardD4V2, StandardD4V3, StandardD5V2, StandardD64sV3, StandardD64V3, StandardD8sV3, StandardD8V3, StandardDS1, StandardDS11, StandardDS11V2, StandardDS12, StandardDS12V2, StandardDS13, StandardDS132V2, StandardDS134V2, StandardDS13V2, StandardDS14, StandardDS144V2, StandardDS148V2, StandardDS14V2, StandardDS15V2, StandardDS1V2, StandardDS2, StandardDS2V2, StandardDS3, StandardDS3V2, StandardDS4, StandardDS4V2, StandardDS5V2, StandardE16sV3, StandardE16V3, StandardE2sV3, StandardE2V3, StandardE3216V3, StandardE328sV3, StandardE32sV3, StandardE32V3, StandardE4sV3, StandardE4V3, StandardE6416sV3, StandardE6432sV3, StandardE64sV3, StandardE64V3, StandardE8sV3, StandardE8V3, StandardF1, StandardF16, StandardF16s, StandardF16sV2, StandardF1s, StandardF2, StandardF2s, StandardF2sV2, StandardF32sV2, StandardF4, StandardF4s, StandardF4sV2, StandardF64sV2, StandardF72sV2, StandardF8, StandardF8s, StandardF8sV2, StandardG1, StandardG2, StandardG3, StandardG4, StandardG5, StandardGS1, StandardGS2, StandardGS3, StandardGS4, StandardGS44, StandardGS48, StandardGS5, StandardGS516, StandardGS58, StandardH16, StandardH16m, StandardH16mr, StandardH16r, StandardH8, StandardH8m, StandardL16s, StandardL32s, StandardL4s, StandardL8s, StandardM12832ms, StandardM12864ms, StandardM128ms, StandardM128s, StandardM6416ms, StandardM6432ms, StandardM64ms, StandardM64s, StandardNC12, StandardNC12sV2, StandardNC12sV3, StandardNC24, StandardNC24r, StandardNC24rsV2, StandardNC24rsV3, StandardNC24sV2, StandardNC24sV3, StandardNC6, StandardNC6sV2, StandardNC6sV3, StandardND12s, StandardND24rs, StandardND24s, StandardND6s, StandardNV12, StandardNV24, StandardNV6} -} - -// VMDiskTypes enumerates the values for vm disk types. -type VMDiskTypes string - -const ( - // VMDiskTypesNone ... - VMDiskTypesNone VMDiskTypes = "None" - // VMDiskTypesUnmanaged ... - VMDiskTypesUnmanaged VMDiskTypes = "Unmanaged" -) - -// PossibleVMDiskTypesValues returns an array of possible values for the VMDiskTypes const type. -func PossibleVMDiskTypesValues() []VMDiskTypes { - return []VMDiskTypes{VMDiskTypesNone, VMDiskTypesUnmanaged} -} - -// VMGuestPatchClassificationLinux enumerates the values for vm guest patch classification linux. -type VMGuestPatchClassificationLinux string - -const ( - // Critical ... - Critical VMGuestPatchClassificationLinux = "Critical" - // Other ... - Other VMGuestPatchClassificationLinux = "Other" - // Security ... - Security VMGuestPatchClassificationLinux = "Security" -) - -// PossibleVMGuestPatchClassificationLinuxValues returns an array of possible values for the VMGuestPatchClassificationLinux const type. -func PossibleVMGuestPatchClassificationLinuxValues() []VMGuestPatchClassificationLinux { - return []VMGuestPatchClassificationLinux{Critical, Other, Security} -} - -// VMGuestPatchClassificationWindows enumerates the values for vm guest patch classification windows. -type VMGuestPatchClassificationWindows string - -const ( - // VMGuestPatchClassificationWindowsCritical ... - VMGuestPatchClassificationWindowsCritical VMGuestPatchClassificationWindows = "Critical" - // VMGuestPatchClassificationWindowsDefinition ... - VMGuestPatchClassificationWindowsDefinition VMGuestPatchClassificationWindows = "Definition" - // VMGuestPatchClassificationWindowsFeaturePack ... - VMGuestPatchClassificationWindowsFeaturePack VMGuestPatchClassificationWindows = "FeaturePack" - // VMGuestPatchClassificationWindowsSecurity ... - VMGuestPatchClassificationWindowsSecurity VMGuestPatchClassificationWindows = "Security" - // VMGuestPatchClassificationWindowsServicePack ... - VMGuestPatchClassificationWindowsServicePack VMGuestPatchClassificationWindows = "ServicePack" - // VMGuestPatchClassificationWindowsTools ... - VMGuestPatchClassificationWindowsTools VMGuestPatchClassificationWindows = "Tools" - // VMGuestPatchClassificationWindowsUpdateRollUp ... - VMGuestPatchClassificationWindowsUpdateRollUp VMGuestPatchClassificationWindows = "UpdateRollUp" - // VMGuestPatchClassificationWindowsUpdates ... - VMGuestPatchClassificationWindowsUpdates VMGuestPatchClassificationWindows = "Updates" -) - -// PossibleVMGuestPatchClassificationWindowsValues returns an array of possible values for the VMGuestPatchClassificationWindows const type. -func PossibleVMGuestPatchClassificationWindowsValues() []VMGuestPatchClassificationWindows { - return []VMGuestPatchClassificationWindows{VMGuestPatchClassificationWindowsCritical, VMGuestPatchClassificationWindowsDefinition, VMGuestPatchClassificationWindowsFeaturePack, VMGuestPatchClassificationWindowsSecurity, VMGuestPatchClassificationWindowsServicePack, VMGuestPatchClassificationWindowsTools, VMGuestPatchClassificationWindowsUpdateRollUp, VMGuestPatchClassificationWindowsUpdates} -} - -// VMGuestPatchRebootBehavior enumerates the values for vm guest patch reboot behavior. -type VMGuestPatchRebootBehavior string - -const ( - // VMGuestPatchRebootBehaviorAlwaysRequiresReboot ... - VMGuestPatchRebootBehaviorAlwaysRequiresReboot VMGuestPatchRebootBehavior = "AlwaysRequiresReboot" - // VMGuestPatchRebootBehaviorCanRequestReboot ... - VMGuestPatchRebootBehaviorCanRequestReboot VMGuestPatchRebootBehavior = "CanRequestReboot" - // VMGuestPatchRebootBehaviorNeverReboots ... - VMGuestPatchRebootBehaviorNeverReboots VMGuestPatchRebootBehavior = "NeverReboots" - // VMGuestPatchRebootBehaviorUnknown ... - VMGuestPatchRebootBehaviorUnknown VMGuestPatchRebootBehavior = "Unknown" -) - -// PossibleVMGuestPatchRebootBehaviorValues returns an array of possible values for the VMGuestPatchRebootBehavior const type. -func PossibleVMGuestPatchRebootBehaviorValues() []VMGuestPatchRebootBehavior { - return []VMGuestPatchRebootBehavior{VMGuestPatchRebootBehaviorAlwaysRequiresReboot, VMGuestPatchRebootBehaviorCanRequestReboot, VMGuestPatchRebootBehaviorNeverReboots, VMGuestPatchRebootBehaviorUnknown} -} - -// VMGuestPatchRebootSetting enumerates the values for vm guest patch reboot setting. -type VMGuestPatchRebootSetting string - -const ( - // Always ... - Always VMGuestPatchRebootSetting = "Always" - // IfRequired ... - IfRequired VMGuestPatchRebootSetting = "IfRequired" - // Never ... - Never VMGuestPatchRebootSetting = "Never" -) - -// PossibleVMGuestPatchRebootSettingValues returns an array of possible values for the VMGuestPatchRebootSetting const type. -func PossibleVMGuestPatchRebootSettingValues() []VMGuestPatchRebootSetting { - return []VMGuestPatchRebootSetting{Always, IfRequired, Never} -} - -// VMGuestPatchRebootStatus enumerates the values for vm guest patch reboot status. -type VMGuestPatchRebootStatus string - -const ( - // VMGuestPatchRebootStatusCompleted ... - VMGuestPatchRebootStatusCompleted VMGuestPatchRebootStatus = "Completed" - // VMGuestPatchRebootStatusFailed ... - VMGuestPatchRebootStatusFailed VMGuestPatchRebootStatus = "Failed" - // VMGuestPatchRebootStatusNotNeeded ... - VMGuestPatchRebootStatusNotNeeded VMGuestPatchRebootStatus = "NotNeeded" - // VMGuestPatchRebootStatusRequired ... - VMGuestPatchRebootStatusRequired VMGuestPatchRebootStatus = "Required" - // VMGuestPatchRebootStatusStarted ... - VMGuestPatchRebootStatusStarted VMGuestPatchRebootStatus = "Started" - // VMGuestPatchRebootStatusUnknown ... - VMGuestPatchRebootStatusUnknown VMGuestPatchRebootStatus = "Unknown" -) - -// PossibleVMGuestPatchRebootStatusValues returns an array of possible values for the VMGuestPatchRebootStatus const type. -func PossibleVMGuestPatchRebootStatusValues() []VMGuestPatchRebootStatus { - return []VMGuestPatchRebootStatus{VMGuestPatchRebootStatusCompleted, VMGuestPatchRebootStatusFailed, VMGuestPatchRebootStatusNotNeeded, VMGuestPatchRebootStatusRequired, VMGuestPatchRebootStatusStarted, VMGuestPatchRebootStatusUnknown} -} - -// WindowsPatchAssessmentMode enumerates the values for windows patch assessment mode. -type WindowsPatchAssessmentMode string - -const ( - // WindowsPatchAssessmentModeAutomaticByPlatform ... - WindowsPatchAssessmentModeAutomaticByPlatform WindowsPatchAssessmentMode = "AutomaticByPlatform" - // WindowsPatchAssessmentModeImageDefault ... - WindowsPatchAssessmentModeImageDefault WindowsPatchAssessmentMode = "ImageDefault" -) - -// PossibleWindowsPatchAssessmentModeValues returns an array of possible values for the WindowsPatchAssessmentMode const type. -func PossibleWindowsPatchAssessmentModeValues() []WindowsPatchAssessmentMode { - return []WindowsPatchAssessmentMode{WindowsPatchAssessmentModeAutomaticByPlatform, WindowsPatchAssessmentModeImageDefault} -} - -// WindowsVMGuestPatchAutomaticByPlatformRebootSetting enumerates the values for windows vm guest patch -// automatic by platform reboot setting. -type WindowsVMGuestPatchAutomaticByPlatformRebootSetting string - -const ( - // WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways ... - WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Always" - // WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired ... - WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "IfRequired" - // WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever ... - WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Never" - // WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown ... - WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown WindowsVMGuestPatchAutomaticByPlatformRebootSetting = "Unknown" -) - -// PossibleWindowsVMGuestPatchAutomaticByPlatformRebootSettingValues returns an array of possible values for the WindowsVMGuestPatchAutomaticByPlatformRebootSetting const type. -func PossibleWindowsVMGuestPatchAutomaticByPlatformRebootSettingValues() []WindowsVMGuestPatchAutomaticByPlatformRebootSetting { - return []WindowsVMGuestPatchAutomaticByPlatformRebootSetting{WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways, WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired, WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever, WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown} -} - -// WindowsVMGuestPatchMode enumerates the values for windows vm guest patch mode. -type WindowsVMGuestPatchMode string - -const ( - // WindowsVMGuestPatchModeAutomaticByOS ... - WindowsVMGuestPatchModeAutomaticByOS WindowsVMGuestPatchMode = "AutomaticByOS" - // WindowsVMGuestPatchModeAutomaticByPlatform ... - WindowsVMGuestPatchModeAutomaticByPlatform WindowsVMGuestPatchMode = "AutomaticByPlatform" - // WindowsVMGuestPatchModeManual ... - WindowsVMGuestPatchModeManual WindowsVMGuestPatchMode = "Manual" -) - -// PossibleWindowsVMGuestPatchModeValues returns an array of possible values for the WindowsVMGuestPatchMode const type. -func PossibleWindowsVMGuestPatchModeValues() []WindowsVMGuestPatchMode { - return []WindowsVMGuestPatchMode{WindowsVMGuestPatchModeAutomaticByOS, WindowsVMGuestPatchModeAutomaticByPlatform, WindowsVMGuestPatchModeManual} -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleries.go deleted file mode 100644 index 370c530f0d24..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleries.go +++ /dev/null @@ -1,588 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GalleriesClient is the compute Client -type GalleriesClient struct { - BaseClient -} - -// NewGalleriesClient creates an instance of the GalleriesClient client. -func NewGalleriesClient(subscriptionID string) GalleriesClient { - return NewGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGalleriesClientWithBaseURI creates an instance of the GalleriesClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewGalleriesClientWithBaseURI(baseURI string, subscriptionID string) GalleriesClient { - return GalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a Shared Image Gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery. The allowed characters are alphabets and numbers with -// dots and periods allowed in the middle. The maximum length is 80 characters. -// gallery - parameters supplied to the create or update Shared Image Gallery operation. -func (client GalleriesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, gallery Gallery) (result GalleriesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, gallery) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client GalleriesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, gallery Gallery) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), - autorest.WithJSON(gallery), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) CreateOrUpdateSender(req *http.Request) (future GalleriesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client GalleriesClient) CreateOrUpdateResponder(resp *http.Response) (result Gallery, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a Shared Image Gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery to be deleted. -func (client GalleriesClient) Delete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleriesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client GalleriesClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) DeleteSender(req *http.Request) (future GalleriesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client GalleriesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a Shared Image Gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery. -// selectParameter - the select expression to apply on the operation. -// expand - the expand query option to apply on the operation. -func (client GalleriesClient) Get(ctx context.Context, resourceGroupName string, galleryName string, selectParameter SelectPermissions, expand GalleryExpandParams) (result Gallery, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, selectParameter, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client GalleriesClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, selectParameter SelectPermissions, expand GalleryExpandParams) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(selectParameter)) > 0 { - queryParameters["$select"] = autorest.Encode("query", selectParameter) - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client GalleriesClient) GetResponder(resp *http.Response) (result Gallery, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List list galleries under a subscription. -func (client GalleriesClient) List(ctx context.Context) (result GalleryListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.List") - defer func() { - sc := -1 - if result.gl.Response.Response != nil { - sc = result.gl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.gl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", resp, "Failure sending request") - return - } - - result.gl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "List", resp, "Failure responding to request") - return - } - if result.gl.hasNextLink() && result.gl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client GalleriesClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/galleries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client GalleriesClient) ListResponder(resp *http.Response) (result GalleryList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client GalleriesClient) listNextResults(ctx context.Context, lastResults GalleryList) (result GalleryList, err error) { - req, err := lastResults.galleryListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleriesClient) ListComplete(ctx context.Context) (result GalleryListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListByResourceGroup list galleries under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client GalleriesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result GalleryListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.gl.Response.Response != nil { - sc = result.gl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.gl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.gl, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.gl.hasNextLink() && result.gl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client GalleriesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client GalleriesClient) ListByResourceGroupResponder(resp *http.Response) (result GalleryList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client GalleriesClient) listByResourceGroupNextResults(ctx context.Context, lastResults GalleryList) (result GalleryList, err error) { - req, err := lastResults.galleryListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleriesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result GalleryListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// Update update a Shared Image Gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery. The allowed characters are alphabets and numbers with -// dots and periods allowed in the middle. The maximum length is 80 characters. -// gallery - parameters supplied to the update Shared Image Gallery operation. -func (client GalleriesClient) Update(ctx context.Context, resourceGroupName string, galleryName string, gallery GalleryUpdate) (result GalleriesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleriesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, gallery) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GalleriesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, gallery GalleryUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}", pathParameters), - autorest.WithJSON(gallery), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GalleriesClient) UpdateSender(req *http.Request) (future GalleriesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GalleriesClient) UpdateResponder(resp *http.Response) (result Gallery, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplications.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplications.go deleted file mode 100644 index a5804d0f38ff..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplications.go +++ /dev/null @@ -1,485 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GalleryApplicationsClient is the compute Client -type GalleryApplicationsClient struct { - BaseClient -} - -// NewGalleryApplicationsClient creates an instance of the GalleryApplicationsClient client. -func NewGalleryApplicationsClient(subscriptionID string) GalleryApplicationsClient { - return NewGalleryApplicationsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGalleryApplicationsClientWithBaseURI creates an instance of the GalleryApplicationsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewGalleryApplicationsClientWithBaseURI(baseURI string, subscriptionID string) GalleryApplicationsClient { - return GalleryApplicationsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a gallery Application Definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be -// created. -// galleryApplicationName - the name of the gallery Application Definition to be created or updated. The -// allowed characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The -// maximum length is 80 characters. -// galleryApplication - parameters supplied to the create or update gallery Application operation. -func (client GalleryApplicationsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplication) (result GalleryApplicationsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplication) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client GalleryApplicationsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplication) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), - autorest.WithJSON(galleryApplication), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationsClient) CreateOrUpdateSender(req *http.Request) (future GalleryApplicationsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client GalleryApplicationsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryApplication, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a gallery Application. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be -// deleted. -// galleryApplicationName - the name of the gallery Application Definition to be deleted. -func (client GalleryApplicationsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client GalleryApplicationsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationsClient) DeleteSender(req *http.Request) (future GalleryApplicationsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client GalleryApplicationsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a gallery Application Definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery from which the Application Definitions are to be -// retrieved. -// galleryApplicationName - the name of the gallery Application Definition to be retrieved. -func (client GalleryApplicationsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplication, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client GalleryApplicationsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client GalleryApplicationsClient) GetResponder(resp *http.Response) (result GalleryApplication, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByGallery list gallery Application Definitions in a gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery from which Application Definitions are to be -// listed. -func (client GalleryApplicationsClient) ListByGallery(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryApplicationListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.ListByGallery") - defer func() { - sc := -1 - if result.gal.Response.Response != nil { - sc = result.gal.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByGalleryNextResults - req, err := client.ListByGalleryPreparer(ctx, resourceGroupName, galleryName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", nil, "Failure preparing request") - return - } - - resp, err := client.ListByGallerySender(req) - if err != nil { - result.gal.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", resp, "Failure sending request") - return - } - - result.gal, err = client.ListByGalleryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "ListByGallery", resp, "Failure responding to request") - return - } - if result.gal.hasNextLink() && result.gal.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByGalleryPreparer prepares the ListByGallery request. -func (client GalleryApplicationsClient) ListByGalleryPreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByGallerySender sends the ListByGallery request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationsClient) ListByGallerySender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByGalleryResponder handles the response to the ListByGallery request. The method always -// closes the http.Response Body. -func (client GalleryApplicationsClient) ListByGalleryResponder(resp *http.Response) (result GalleryApplicationList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByGalleryNextResults retrieves the next set of results, if any. -func (client GalleryApplicationsClient) listByGalleryNextResults(ctx context.Context, lastResults GalleryApplicationList) (result GalleryApplicationList, err error) { - req, err := lastResults.galleryApplicationListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByGallerySender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByGalleryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "listByGalleryNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByGalleryComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleryApplicationsClient) ListByGalleryComplete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryApplicationListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.ListByGallery") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByGallery(ctx, resourceGroupName, galleryName) - return -} - -// Update update a gallery Application Definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition is to be -// updated. -// galleryApplicationName - the name of the gallery Application Definition to be updated. The allowed -// characters are alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum -// length is 80 characters. -// galleryApplication - parameters supplied to the update gallery Application operation. -func (client GalleryApplicationsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplicationUpdate) (result GalleryApplicationsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplication) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GalleryApplicationsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplication GalleryApplicationUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}", pathParameters), - autorest.WithJSON(galleryApplication), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationsClient) UpdateSender(req *http.Request) (future GalleryApplicationsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GalleryApplicationsClient) UpdateResponder(resp *http.Response) (result GalleryApplication, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplicationversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplicationversions.go deleted file mode 100644 index 965afa79b20d..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryapplicationversions.go +++ /dev/null @@ -1,516 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GalleryApplicationVersionsClient is the compute Client -type GalleryApplicationVersionsClient struct { - BaseClient -} - -// NewGalleryApplicationVersionsClient creates an instance of the GalleryApplicationVersionsClient client. -func NewGalleryApplicationVersionsClient(subscriptionID string) GalleryApplicationVersionsClient { - return NewGalleryApplicationVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGalleryApplicationVersionsClientWithBaseURI creates an instance of the GalleryApplicationVersionsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewGalleryApplicationVersionsClientWithBaseURI(baseURI string, subscriptionID string) GalleryApplicationVersionsClient { - return GalleryApplicationVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a gallery Application Version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. -// galleryApplicationName - the name of the gallery Application Definition in which the Application Version is -// to be created. -// galleryApplicationVersionName - the name of the gallery Application Version to be created. Needs to follow -// semantic version name pattern: The allowed characters are digit and period. Digits must be within the range -// of a 32-bit integer. Format: .. -// galleryApplicationVersion - parameters supplied to the create or update gallery Application Version -// operation. -func (client GalleryApplicationVersionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersion) (result GalleryApplicationVersionsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: galleryApplicationVersion, - Constraints: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.Source", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.Source.MediaLink", Name: validation.Null, Rule: true, Chain: nil}}}, - {Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions.Install", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "galleryApplicationVersion.GalleryApplicationVersionProperties.PublishingProfile.ManageActions.Remove", Name: validation.Null, Rule: true, Chain: nil}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.GalleryApplicationVersionsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client GalleryApplicationVersionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersion) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), - autorest.WithJSON(galleryApplicationVersion), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationVersionsClient) CreateOrUpdateSender(req *http.Request) (future GalleryApplicationVersionsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client GalleryApplicationVersionsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a gallery Application Version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. -// galleryApplicationName - the name of the gallery Application Definition in which the Application Version -// resides. -// galleryApplicationVersionName - the name of the gallery Application Version to be deleted. -func (client GalleryApplicationVersionsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string) (result GalleryApplicationVersionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client GalleryApplicationVersionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationVersionsClient) DeleteSender(req *http.Request) (future GalleryApplicationVersionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client GalleryApplicationVersionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a gallery Application Version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. -// galleryApplicationName - the name of the gallery Application Definition in which the Application Version -// resides. -// galleryApplicationVersionName - the name of the gallery Application Version to be retrieved. -// expand - the expand expression to apply on the operation. -func (client GalleryApplicationVersionsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, expand ReplicationStatusTypes) (result GalleryApplicationVersion, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client GalleryApplicationVersionsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, expand ReplicationStatusTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationVersionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client GalleryApplicationVersionsClient) GetResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByGalleryApplication list gallery Application Versions in a gallery Application Definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. -// galleryApplicationName - the name of the Shared Application Gallery Application Definition from which the -// Application Versions are to be listed. -func (client GalleryApplicationVersionsClient) ListByGalleryApplication(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationVersionListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.ListByGalleryApplication") - defer func() { - sc := -1 - if result.gavl.Response.Response != nil { - sc = result.gavl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByGalleryApplicationNextResults - req, err := client.ListByGalleryApplicationPreparer(ctx, resourceGroupName, galleryName, galleryApplicationName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", nil, "Failure preparing request") - return - } - - resp, err := client.ListByGalleryApplicationSender(req) - if err != nil { - result.gavl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", resp, "Failure sending request") - return - } - - result.gavl, err = client.ListByGalleryApplicationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "ListByGalleryApplication", resp, "Failure responding to request") - return - } - if result.gavl.hasNextLink() && result.gavl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByGalleryApplicationPreparer prepares the ListByGalleryApplication request. -func (client GalleryApplicationVersionsClient) ListByGalleryApplicationPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByGalleryApplicationSender sends the ListByGalleryApplication request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationVersionsClient) ListByGalleryApplicationSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByGalleryApplicationResponder handles the response to the ListByGalleryApplication request. The method always -// closes the http.Response Body. -func (client GalleryApplicationVersionsClient) ListByGalleryApplicationResponder(resp *http.Response) (result GalleryApplicationVersionList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByGalleryApplicationNextResults retrieves the next set of results, if any. -func (client GalleryApplicationVersionsClient) listByGalleryApplicationNextResults(ctx context.Context, lastResults GalleryApplicationVersionList) (result GalleryApplicationVersionList, err error) { - req, err := lastResults.galleryApplicationVersionListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByGalleryApplicationSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByGalleryApplicationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "listByGalleryApplicationNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByGalleryApplicationComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleryApplicationVersionsClient) ListByGalleryApplicationComplete(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string) (result GalleryApplicationVersionListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.ListByGalleryApplication") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByGalleryApplication(ctx, resourceGroupName, galleryName, galleryApplicationName) - return -} - -// Update update a gallery Application Version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Application Gallery in which the Application Definition resides. -// galleryApplicationName - the name of the gallery Application Definition in which the Application Version is -// to be updated. -// galleryApplicationVersionName - the name of the gallery Application Version to be updated. Needs to follow -// semantic version name pattern: The allowed characters are digit and period. Digits must be within the range -// of a 32-bit integer. Format: .. -// galleryApplicationVersion - parameters supplied to the update gallery Application Version operation. -func (client GalleryApplicationVersionsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersionUpdate) (result GalleryApplicationVersionsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryApplicationName, galleryApplicationVersionName, galleryApplicationVersion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GalleryApplicationVersionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryApplicationName string, galleryApplicationVersionName string, galleryApplicationVersion GalleryApplicationVersionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryApplicationName": autorest.Encode("path", galleryApplicationName), - "galleryApplicationVersionName": autorest.Encode("path", galleryApplicationVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{galleryApplicationName}/versions/{galleryApplicationVersionName}", pathParameters), - autorest.WithJSON(galleryApplicationVersion), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryApplicationVersionsClient) UpdateSender(req *http.Request) (future GalleryApplicationVersionsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GalleryApplicationVersionsClient) UpdateResponder(resp *http.Response) (result GalleryApplicationVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimages.go deleted file mode 100644 index 2f92ec0e7ca1..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimages.go +++ /dev/null @@ -1,492 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GalleryImagesClient is the compute Client -type GalleryImagesClient struct { - BaseClient -} - -// NewGalleryImagesClient creates an instance of the GalleryImagesClient client. -func NewGalleryImagesClient(subscriptionID string) GalleryImagesClient { - return NewGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGalleryImagesClientWithBaseURI creates an instance of the GalleryImagesClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) GalleryImagesClient { - return GalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a gallery image definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be created. -// galleryImageName - the name of the gallery image definition to be created or updated. The allowed characters -// are alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum length is 80 -// characters. -// galleryImage - parameters supplied to the create or update gallery image operation. -func (client GalleryImagesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImage) (result GalleryImagesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: galleryImage, - Constraints: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties.Identifier", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "galleryImage.GalleryImageProperties.Identifier.Publisher", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "galleryImage.GalleryImageProperties.Identifier.Offer", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "galleryImage.GalleryImageProperties.Identifier.Sku", Name: validation.Null, Rule: true, Chain: nil}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.GalleryImagesClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImage) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client GalleryImagesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImage) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), - autorest.WithJSON(galleryImage), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImagesClient) CreateOrUpdateSender(req *http.Request) (future GalleryImagesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client GalleryImagesClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a gallery image. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be deleted. -// galleryImageName - the name of the gallery image definition to be deleted. -func (client GalleryImagesClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImagesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryImageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client GalleryImagesClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImagesClient) DeleteSender(req *http.Request) (future GalleryImagesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client GalleryImagesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a gallery image definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery from which the Image Definitions are to be retrieved. -// galleryImageName - the name of the gallery image definition to be retrieved. -func (client GalleryImagesClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryImageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client GalleryImagesClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client GalleryImagesClient) GetResponder(resp *http.Response) (result GalleryImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByGallery list gallery image definitions in a gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery from which Image Definitions are to be listed. -func (client GalleryImagesClient) ListByGallery(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryImageListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.ListByGallery") - defer func() { - sc := -1 - if result.gil.Response.Response != nil { - sc = result.gil.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByGalleryNextResults - req, err := client.ListByGalleryPreparer(ctx, resourceGroupName, galleryName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", nil, "Failure preparing request") - return - } - - resp, err := client.ListByGallerySender(req) - if err != nil { - result.gil.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", resp, "Failure sending request") - return - } - - result.gil, err = client.ListByGalleryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "ListByGallery", resp, "Failure responding to request") - return - } - if result.gil.hasNextLink() && result.gil.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByGalleryPreparer prepares the ListByGallery request. -func (client GalleryImagesClient) ListByGalleryPreparer(ctx context.Context, resourceGroupName string, galleryName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByGallerySender sends the ListByGallery request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImagesClient) ListByGallerySender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByGalleryResponder handles the response to the ListByGallery request. The method always -// closes the http.Response Body. -func (client GalleryImagesClient) ListByGalleryResponder(resp *http.Response) (result GalleryImageList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByGalleryNextResults retrieves the next set of results, if any. -func (client GalleryImagesClient) listByGalleryNextResults(ctx context.Context, lastResults GalleryImageList) (result GalleryImageList, err error) { - req, err := lastResults.galleryImageListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByGallerySender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByGalleryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "listByGalleryNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByGalleryComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleryImagesClient) ListByGalleryComplete(ctx context.Context, resourceGroupName string, galleryName string) (result GalleryImageListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.ListByGallery") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByGallery(ctx, resourceGroupName, galleryName) - return -} - -// Update update a gallery image definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition is to be updated. -// galleryImageName - the name of the gallery image definition to be updated. The allowed characters are -// alphabets and numbers with dots, dashes, and periods allowed in the middle. The maximum length is 80 -// characters. -// galleryImage - parameters supplied to the update gallery image operation. -func (client GalleryImagesClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImageUpdate) (result GalleryImagesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImagesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImage) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GalleryImagesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImage GalleryImageUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}", pathParameters), - autorest.WithJSON(galleryImage), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImagesClient) UpdateSender(req *http.Request) (future GalleryImagesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GalleryImagesClient) UpdateResponder(resp *http.Response) (result GalleryImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimageversions.go deleted file mode 100644 index 496a6686d1e5..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/galleryimageversions.go +++ /dev/null @@ -1,503 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GalleryImageVersionsClient is the compute Client -type GalleryImageVersionsClient struct { - BaseClient -} - -// NewGalleryImageVersionsClient creates an instance of the GalleryImageVersionsClient client. -func NewGalleryImageVersionsClient(subscriptionID string) GalleryImageVersionsClient { - return NewGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGalleryImageVersionsClientWithBaseURI creates an instance of the GalleryImageVersionsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) GalleryImageVersionsClient { - return GalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a gallery image version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. -// galleryImageName - the name of the gallery image definition in which the Image Version is to be created. -// galleryImageVersionName - the name of the gallery image version to be created. Needs to follow semantic -// version name pattern: The allowed characters are digit and period. Digits must be within the range of a -// 32-bit integer. Format: .. -// galleryImageVersion - parameters supplied to the create or update gallery image version operation. -func (client GalleryImageVersionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersion) (result GalleryImageVersionsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: galleryImageVersion, - Constraints: []validation.Constraint{{Target: "galleryImageVersion.GalleryImageVersionProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "galleryImageVersion.GalleryImageVersionProperties.StorageProfile", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil { - return result, validation.NewError("compute.GalleryImageVersionsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client GalleryImageVersionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersion) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithJSON(galleryImageVersion), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImageVersionsClient) CreateOrUpdateSender(req *http.Request) (future GalleryImageVersionsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client GalleryImageVersionsClient) CreateOrUpdateResponder(resp *http.Response) (result GalleryImageVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a gallery image version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. -// galleryImageName - the name of the gallery image definition in which the Image Version resides. -// galleryImageVersionName - the name of the gallery image version to be deleted. -func (client GalleryImageVersionsClient) Delete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string) (result GalleryImageVersionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client GalleryImageVersionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImageVersionsClient) DeleteSender(req *http.Request) (future GalleryImageVersionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client GalleryImageVersionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a gallery image version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. -// galleryImageName - the name of the gallery image definition in which the Image Version resides. -// galleryImageVersionName - the name of the gallery image version to be retrieved. -// expand - the expand expression to apply on the operation. -func (client GalleryImageVersionsClient) Get(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, expand ReplicationStatusTypes) (result GalleryImageVersion, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client GalleryImageVersionsClient) GetPreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, expand ReplicationStatusTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client GalleryImageVersionsClient) GetResponder(resp *http.Response) (result GalleryImageVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByGalleryImage list gallery image versions in a gallery image definition. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. -// galleryImageName - the name of the Shared Image Gallery Image Definition from which the Image Versions are -// to be listed. -func (client GalleryImageVersionsClient) ListByGalleryImage(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImageVersionListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.ListByGalleryImage") - defer func() { - sc := -1 - if result.givl.Response.Response != nil { - sc = result.givl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByGalleryImageNextResults - req, err := client.ListByGalleryImagePreparer(ctx, resourceGroupName, galleryName, galleryImageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", nil, "Failure preparing request") - return - } - - resp, err := client.ListByGalleryImageSender(req) - if err != nil { - result.givl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", resp, "Failure sending request") - return - } - - result.givl, err = client.ListByGalleryImageResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "ListByGalleryImage", resp, "Failure responding to request") - return - } - if result.givl.hasNextLink() && result.givl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByGalleryImagePreparer prepares the ListByGalleryImage request. -func (client GalleryImageVersionsClient) ListByGalleryImagePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByGalleryImageSender sends the ListByGalleryImage request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImageVersionsClient) ListByGalleryImageSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByGalleryImageResponder handles the response to the ListByGalleryImage request. The method always -// closes the http.Response Body. -func (client GalleryImageVersionsClient) ListByGalleryImageResponder(resp *http.Response) (result GalleryImageVersionList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByGalleryImageNextResults retrieves the next set of results, if any. -func (client GalleryImageVersionsClient) listByGalleryImageNextResults(ctx context.Context, lastResults GalleryImageVersionList) (result GalleryImageVersionList, err error) { - req, err := lastResults.galleryImageVersionListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByGalleryImageSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByGalleryImageResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "listByGalleryImageNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByGalleryImageComplete enumerates all values, automatically crossing page boundaries as required. -func (client GalleryImageVersionsClient) ListByGalleryImageComplete(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string) (result GalleryImageVersionListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.ListByGalleryImage") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByGalleryImage(ctx, resourceGroupName, galleryName, galleryImageName) - return -} - -// Update update a gallery image version. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery in which the Image Definition resides. -// galleryImageName - the name of the gallery image definition in which the Image Version is to be updated. -// galleryImageVersionName - the name of the gallery image version to be updated. Needs to follow semantic -// version name pattern: The allowed characters are digit and period. Digits must be within the range of a -// 32-bit integer. Format: .. -// galleryImageVersion - parameters supplied to the update gallery image version operation. -func (client GalleryImageVersionsClient) Update(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersionUpdate) (result GalleryImageVersionsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, galleryImageName, galleryImageVersionName, galleryImageVersion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GalleryImageVersionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, galleryImageName string, galleryImageVersionName string, galleryImageVersion GalleryImageVersionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithJSON(galleryImageVersion), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GalleryImageVersionsClient) UpdateSender(req *http.Request) (future GalleryImageVersionsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GalleryImageVersionsClient) UpdateResponder(resp *http.Response) (result GalleryImageVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/gallerysharingprofile.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/gallerysharingprofile.go deleted file mode 100644 index 2f55daecf584..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/gallerysharingprofile.go +++ /dev/null @@ -1,114 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// GallerySharingProfileClient is the compute Client -type GallerySharingProfileClient struct { - BaseClient -} - -// NewGallerySharingProfileClient creates an instance of the GallerySharingProfileClient client. -func NewGallerySharingProfileClient(subscriptionID string) GallerySharingProfileClient { - return NewGallerySharingProfileClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewGallerySharingProfileClientWithBaseURI creates an instance of the GallerySharingProfileClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewGallerySharingProfileClientWithBaseURI(baseURI string, subscriptionID string) GallerySharingProfileClient { - return GallerySharingProfileClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Update update sharing profile of a gallery. -// Parameters: -// resourceGroupName - the name of the resource group. -// galleryName - the name of the Shared Image Gallery. -// sharingUpdate - parameters supplied to the update gallery sharing profile. -func (client GallerySharingProfileClient) Update(ctx context.Context, resourceGroupName string, galleryName string, sharingUpdate SharingUpdate) (result GallerySharingProfileUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GallerySharingProfileClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, galleryName, sharingUpdate) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client GallerySharingProfileClient) UpdatePreparer(ctx context.Context, resourceGroupName string, galleryName string, sharingUpdate SharingUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryName": autorest.Encode("path", galleryName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/share", pathParameters), - autorest.WithJSON(sharingUpdate), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client GallerySharingProfileClient) UpdateSender(req *http.Request) (future GallerySharingProfileUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client GallerySharingProfileClient) UpdateResponder(resp *http.Response) (result SharingUpdate, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/images.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/images.go deleted file mode 100644 index 57908cb564e0..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/images.go +++ /dev/null @@ -1,583 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ImagesClient is the compute Client -type ImagesClient struct { - BaseClient -} - -// NewImagesClient creates an instance of the ImagesClient client. -func NewImagesClient(subscriptionID string) ImagesClient { - return NewImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewImagesClientWithBaseURI creates an instance of the ImagesClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewImagesClientWithBaseURI(baseURI string, subscriptionID string) ImagesClient { - return ImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update an image. -// Parameters: -// resourceGroupName - the name of the resource group. -// imageName - the name of the image. -// parameters - parameters supplied to the Create Image operation. -func (client ImagesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, imageName string, parameters Image) (result ImagesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, imageName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client ImagesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, imageName string, parameters Image) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "imageName": autorest.Encode("path", imageName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) CreateOrUpdateSender(req *http.Request) (future ImagesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client ImagesClient) CreateOrUpdateResponder(resp *http.Response) (result Image, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes an Image. -// Parameters: -// resourceGroupName - the name of the resource group. -// imageName - the name of the image. -func (client ImagesClient) Delete(ctx context.Context, resourceGroupName string, imageName string) (result ImagesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, imageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client ImagesClient) DeletePreparer(ctx context.Context, resourceGroupName string, imageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "imageName": autorest.Encode("path", imageName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) DeleteSender(req *http.Request) (future ImagesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client ImagesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets an image. -// Parameters: -// resourceGroupName - the name of the resource group. -// imageName - the name of the image. -// expand - the expand expression to apply on the operation. -func (client ImagesClient) Get(ctx context.Context, resourceGroupName string, imageName string, expand string) (result Image, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, imageName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client ImagesClient) GetPreparer(ctx context.Context, resourceGroupName string, imageName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "imageName": autorest.Encode("path", imageName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client ImagesClient) GetResponder(resp *http.Response) (result Image, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets the list of Images in the subscription. Use nextLink property in the response to get the next page of -// Images. Do this till nextLink is null to fetch all the Images. -func (client ImagesClient) List(ctx context.Context) (result ImageListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.List") - defer func() { - sc := -1 - if result.ilr.Response.Response != nil { - sc = result.ilr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure responding to request") - return - } - if result.ilr.hasNextLink() && result.ilr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ImagesClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ImagesClient) ListResponder(resp *http.Response) (result ImageListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ImagesClient) listNextResults(ctx context.Context, lastResults ImageListResult) (result ImageListResult, err error) { - req, err := lastResults.imageListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ImagesClient) ListComplete(ctx context.Context) (result ImageListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListByResourceGroup gets the list of images under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client ImagesClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ImageListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.ilr.Response.Response != nil { - sc = result.ilr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.ilr.hasNextLink() && result.ilr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client ImagesClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client ImagesClient) ListByResourceGroupResponder(resp *http.Response) (result ImageListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client ImagesClient) listByResourceGroupNextResults(ctx context.Context, lastResults ImageListResult) (result ImageListResult, err error) { - req, err := lastResults.imageListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client ImagesClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ImageListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// Update update an image. -// Parameters: -// resourceGroupName - the name of the resource group. -// imageName - the name of the image. -// parameters - parameters supplied to the Update Image operation. -func (client ImagesClient) Update(ctx context.Context, resourceGroupName string, imageName string, parameters ImageUpdate) (result ImagesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImagesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, imageName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client ImagesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, imageName string, parameters ImageUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "imageName": autorest.Encode("path", imageName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client ImagesClient) UpdateSender(req *http.Request) (future ImagesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client ImagesClient) UpdateResponder(resp *http.Response) (result Image, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/loganalytics.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/loganalytics.go deleted file mode 100644 index 0e82102d8c76..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/loganalytics.go +++ /dev/null @@ -1,206 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// LogAnalyticsClient is the compute Client -type LogAnalyticsClient struct { - BaseClient -} - -// NewLogAnalyticsClient creates an instance of the LogAnalyticsClient client. -func NewLogAnalyticsClient(subscriptionID string) LogAnalyticsClient { - return NewLogAnalyticsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewLogAnalyticsClientWithBaseURI creates an instance of the LogAnalyticsClient client using a custom endpoint. Use -// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewLogAnalyticsClientWithBaseURI(baseURI string, subscriptionID string) LogAnalyticsClient { - return LogAnalyticsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// ExportRequestRateByInterval export logs that show Api requests made by this subscription in the given time window to -// show throttling activities. -// Parameters: -// parameters - parameters supplied to the LogAnalytics getRequestRateByInterval Api. -// location - the location upon which virtual-machine-sizes is queried. -func (client LogAnalyticsClient) ExportRequestRateByInterval(ctx context.Context, parameters RequestRateByIntervalInput, location string) (result LogAnalyticsExportRequestRateByIntervalFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LogAnalyticsClient.ExportRequestRateByInterval") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.LogAnalyticsClient", "ExportRequestRateByInterval", err.Error()) - } - - req, err := client.ExportRequestRateByIntervalPreparer(ctx, parameters, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportRequestRateByInterval", nil, "Failure preparing request") - return - } - - result, err = client.ExportRequestRateByIntervalSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportRequestRateByInterval", result.Response(), "Failure sending request") - return - } - - return -} - -// ExportRequestRateByIntervalPreparer prepares the ExportRequestRateByInterval request. -func (client LogAnalyticsClient) ExportRequestRateByIntervalPreparer(ctx context.Context, parameters RequestRateByIntervalInput, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ExportRequestRateByIntervalSender sends the ExportRequestRateByInterval request. The method will close the -// http.Response Body if it receives an error. -func (client LogAnalyticsClient) ExportRequestRateByIntervalSender(req *http.Request) (future LogAnalyticsExportRequestRateByIntervalFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ExportRequestRateByIntervalResponder handles the response to the ExportRequestRateByInterval request. The method always -// closes the http.Response Body. -func (client LogAnalyticsClient) ExportRequestRateByIntervalResponder(resp *http.Response) (result LogAnalyticsOperationResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ExportThrottledRequests export logs that show total throttled Api requests for this subscription in the given time -// window. -// Parameters: -// parameters - parameters supplied to the LogAnalytics getThrottledRequests Api. -// location - the location upon which virtual-machine-sizes is queried. -func (client LogAnalyticsClient) ExportThrottledRequests(ctx context.Context, parameters ThrottledRequestsInput, location string) (result LogAnalyticsExportThrottledRequestsFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LogAnalyticsClient.ExportThrottledRequests") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.LogAnalyticsClient", "ExportThrottledRequests", err.Error()) - } - - req, err := client.ExportThrottledRequestsPreparer(ctx, parameters, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportThrottledRequests", nil, "Failure preparing request") - return - } - - result, err = client.ExportThrottledRequestsSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsClient", "ExportThrottledRequests", result.Response(), "Failure sending request") - return - } - - return -} - -// ExportThrottledRequestsPreparer prepares the ExportThrottledRequests request. -func (client LogAnalyticsClient) ExportThrottledRequestsPreparer(ctx context.Context, parameters ThrottledRequestsInput, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ExportThrottledRequestsSender sends the ExportThrottledRequests request. The method will close the -// http.Response Body if it receives an error. -func (client LogAnalyticsClient) ExportThrottledRequestsSender(req *http.Request) (future LogAnalyticsExportThrottledRequestsFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ExportThrottledRequestsResponder handles the response to the ExportThrottledRequests request. The method always -// closes the http.Response Body. -func (client LogAnalyticsClient) ExportThrottledRequestsResponder(resp *http.Response) (result LogAnalyticsOperationResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/models.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/models.go deleted file mode 100644 index 551a1b034698..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/models.go +++ /dev/null @@ -1,23788 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "encoding/json" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/date" - "github.com/Azure/go-autorest/autorest/to" - "github.com/Azure/go-autorest/tracing" - "io" - "net/http" -) - -// The package's fully qualified name. -const fqdn = "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute" - -// AccessURI a disk access SAS uri. -type AccessURI struct { - autorest.Response `json:"-"` - // AccessSAS - READ-ONLY; A SAS uri for accessing a disk. - AccessSAS *string `json:"accessSAS,omitempty"` - // SecurityDataAccessSAS - READ-ONLY; A SAS uri for accessing a VM guest state. - SecurityDataAccessSAS *string `json:"securityDataAccessSAS,omitempty"` -} - -// MarshalJSON is the custom marshaler for AccessURI. -func (au AccessURI) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// AdditionalCapabilities enables or disables a capability on the virtual machine or virtual machine scale -// set. -type AdditionalCapabilities struct { - // UltraSSDEnabled - The flag that enables or disables a capability to have one or more managed data disks with UltraSSD_LRS storage account type on the VM or VMSS. Managed disks with storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale set only if this property is enabled. - UltraSSDEnabled *bool `json:"ultraSSDEnabled,omitempty"` - // HibernationEnabled - The flag that enables or disables hibernation capability on the VM. - HibernationEnabled *bool `json:"hibernationEnabled,omitempty"` -} - -// AdditionalUnattendContent specifies additional XML formatted information that can be included in the -// Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, -// and the pass in which the content is applied. -type AdditionalUnattendContent struct { - // PassName - The pass name. Currently, the only allowable value is OobeSystem. Possible values include: 'OobeSystem' - PassName PassNames `json:"passName,omitempty"` - // ComponentName - The component name. Currently, the only allowable value is Microsoft-Windows-Shell-Setup. Possible values include: 'MicrosoftWindowsShellSetup' - ComponentName ComponentNames `json:"componentName,omitempty"` - // SettingName - Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon. Possible values include: 'AutoLogon', 'FirstLogonCommands' - SettingName SettingNames `json:"settingName,omitempty"` - // Content - Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted. - Content *string `json:"content,omitempty"` -} - -// APIEntityReference the API entity reference. -type APIEntityReference struct { - // ID - The ARM resource id in the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/... - ID *string `json:"id,omitempty"` -} - -// APIError api error. -type APIError struct { - // Details - The Api error details - Details *[]APIErrorBase `json:"details,omitempty"` - // Innererror - The Api inner error - Innererror *InnerError `json:"innererror,omitempty"` - // Code - The error code. - Code *string `json:"code,omitempty"` - // Target - The target of the particular error. - Target *string `json:"target,omitempty"` - // Message - The error message. - Message *string `json:"message,omitempty"` -} - -// APIErrorBase api error base. -type APIErrorBase struct { - // Code - The error code. - Code *string `json:"code,omitempty"` - // Target - The target of the particular error. - Target *string `json:"target,omitempty"` - // Message - The error message. - Message *string `json:"message,omitempty"` -} - -// ApplicationProfile contains the list of gallery applications that should be made available to the -// VM/VMSS -type ApplicationProfile struct { - // GalleryApplications - Specifies the gallery applications that should be made available to the VM/VMSS - GalleryApplications *[]VMGalleryApplication `json:"galleryApplications,omitempty"` -} - -// AutomaticOSUpgradePolicy the configuration parameters used for performing automatic OS upgrade. -type AutomaticOSUpgradePolicy struct { - // EnableAutomaticOSUpgrade - Indicates whether OS upgrades should automatically be applied to scale set instances in a rolling fashion when a newer version of the OS image becomes available. Default value is false.

    If this is set to true for Windows based scale sets, [enableAutomaticUpdates](https://docs.microsoft.com/dotnet/api/microsoft.azure.management.compute.models.windowsconfiguration.enableautomaticupdates?view=azure-dotnet) is automatically set to false and cannot be set to true. - EnableAutomaticOSUpgrade *bool `json:"enableAutomaticOSUpgrade,omitempty"` - // DisableAutomaticRollback - Whether OS image rollback feature should be disabled. Default value is false. - DisableAutomaticRollback *bool `json:"disableAutomaticRollback,omitempty"` - // UseRollingUpgradePolicy - Indicates whether rolling upgrade policy should be used during Auto OS Upgrade. Default value is false. Auto OS Upgrade will fallback to the default policy if no policy is defined on the VMSS. - UseRollingUpgradePolicy *bool `json:"useRollingUpgradePolicy,omitempty"` -} - -// AutomaticOSUpgradeProperties describes automatic OS upgrade properties on the image. -type AutomaticOSUpgradeProperties struct { - // AutomaticOSUpgradeSupported - Specifies whether automatic OS upgrade is supported on the image. - AutomaticOSUpgradeSupported *bool `json:"automaticOSUpgradeSupported,omitempty"` -} - -// AutomaticRepairsPolicy specifies the configuration parameters for automatic repairs on the virtual -// machine scale set. -type AutomaticRepairsPolicy struct { - // Enabled - Specifies whether automatic repairs should be enabled on the virtual machine scale set. The default value is false. - Enabled *bool `json:"enabled,omitempty"` - // GracePeriod - The amount of time for which automatic repairs are suspended due to a state change on VM. The grace time starts after the state change has completed. This helps avoid premature or accidental repairs. The time duration should be specified in ISO 8601 format. The minimum allowed grace period is 10 minutes (PT10M), which is also the default value. The maximum allowed grace period is 90 minutes (PT90M). - GracePeriod *string `json:"gracePeriod,omitempty"` - // RepairAction - Type of repair action (replace, restart, reimage) that will be used for repairing unhealthy virtual machines in the scale set. Default value is replace. Possible values include: 'Replace', 'Restart', 'Reimage' - RepairAction RepairAction `json:"repairAction,omitempty"` -} - -// AvailabilitySet specifies information about the availability set that the virtual machine should be -// assigned to. Virtual machines specified in the same availability set are allocated to different nodes to -// maximize availability. For more information about availability sets, see [Availability sets -// overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

    For -// more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in -// Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

    Currently, a -// VM can only be added to availability set at creation time. An existing VM cannot be added to an -// availability set. -type AvailabilitySet struct { - autorest.Response `json:"-"` - *AvailabilitySetProperties `json:"properties,omitempty"` - // Sku - Sku of the availability set, only name is required to be set. See AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is 'Classic'. - Sku *Sku `json:"sku,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for AvailabilitySet. -func (as AvailabilitySet) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if as.AvailabilitySetProperties != nil { - objectMap["properties"] = as.AvailabilitySetProperties - } - if as.Sku != nil { - objectMap["sku"] = as.Sku - } - if as.Location != nil { - objectMap["location"] = as.Location - } - if as.Tags != nil { - objectMap["tags"] = as.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for AvailabilitySet struct. -func (as *AvailabilitySet) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var availabilitySetProperties AvailabilitySetProperties - err = json.Unmarshal(*v, &availabilitySetProperties) - if err != nil { - return err - } - as.AvailabilitySetProperties = &availabilitySetProperties - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - as.Sku = &sku - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - as.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - as.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - as.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - as.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - as.Tags = tags - } - } - } - - return nil -} - -// AvailabilitySetListResult the List Availability Set operation response. -type AvailabilitySetListResult struct { - autorest.Response `json:"-"` - // Value - The list of availability sets - Value *[]AvailabilitySet `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets. - NextLink *string `json:"nextLink,omitempty"` -} - -// AvailabilitySetListResultIterator provides access to a complete listing of AvailabilitySet values. -type AvailabilitySetListResultIterator struct { - i int - page AvailabilitySetListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *AvailabilitySetListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *AvailabilitySetListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter AvailabilitySetListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter AvailabilitySetListResultIterator) Response() AvailabilitySetListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter AvailabilitySetListResultIterator) Value() AvailabilitySet { - if !iter.page.NotDone() { - return AvailabilitySet{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the AvailabilitySetListResultIterator type. -func NewAvailabilitySetListResultIterator(page AvailabilitySetListResultPage) AvailabilitySetListResultIterator { - return AvailabilitySetListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (aslr AvailabilitySetListResult) IsEmpty() bool { - return aslr.Value == nil || len(*aslr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (aslr AvailabilitySetListResult) hasNextLink() bool { - return aslr.NextLink != nil && len(*aslr.NextLink) != 0 -} - -// availabilitySetListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (aslr AvailabilitySetListResult) availabilitySetListResultPreparer(ctx context.Context) (*http.Request, error) { - if !aslr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(aslr.NextLink))) -} - -// AvailabilitySetListResultPage contains a page of AvailabilitySet values. -type AvailabilitySetListResultPage struct { - fn func(context.Context, AvailabilitySetListResult) (AvailabilitySetListResult, error) - aslr AvailabilitySetListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *AvailabilitySetListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AvailabilitySetListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.aslr) - if err != nil { - return err - } - page.aslr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *AvailabilitySetListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page AvailabilitySetListResultPage) NotDone() bool { - return !page.aslr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page AvailabilitySetListResultPage) Response() AvailabilitySetListResult { - return page.aslr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page AvailabilitySetListResultPage) Values() []AvailabilitySet { - if page.aslr.IsEmpty() { - return nil - } - return *page.aslr.Value -} - -// Creates a new instance of the AvailabilitySetListResultPage type. -func NewAvailabilitySetListResultPage(cur AvailabilitySetListResult, getNextPage func(context.Context, AvailabilitySetListResult) (AvailabilitySetListResult, error)) AvailabilitySetListResultPage { - return AvailabilitySetListResultPage{ - fn: getNextPage, - aslr: cur, - } -} - -// AvailabilitySetProperties the instance view of a resource. -type AvailabilitySetProperties struct { - // PlatformUpdateDomainCount - Update Domain count. - PlatformUpdateDomainCount *int32 `json:"platformUpdateDomainCount,omitempty"` - // PlatformFaultDomainCount - Fault Domain count. - PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` - // VirtualMachines - A list of references to all virtual machines in the availability set. - VirtualMachines *[]SubResource `json:"virtualMachines,omitempty"` - // ProximityPlacementGroup - Specifies information about the proximity placement group that the availability set should be assigned to.

    Minimum api-version: 2018-04-01. - ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` - // Statuses - READ-ONLY; The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for AvailabilitySetProperties. -func (asp AvailabilitySetProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if asp.PlatformUpdateDomainCount != nil { - objectMap["platformUpdateDomainCount"] = asp.PlatformUpdateDomainCount - } - if asp.PlatformFaultDomainCount != nil { - objectMap["platformFaultDomainCount"] = asp.PlatformFaultDomainCount - } - if asp.VirtualMachines != nil { - objectMap["virtualMachines"] = asp.VirtualMachines - } - if asp.ProximityPlacementGroup != nil { - objectMap["proximityPlacementGroup"] = asp.ProximityPlacementGroup - } - return json.Marshal(objectMap) -} - -// AvailabilitySetUpdate specifies information about the availability set that the virtual machine should -// be assigned to. Only tags may be updated. -type AvailabilitySetUpdate struct { - *AvailabilitySetProperties `json:"properties,omitempty"` - // Sku - Sku of the availability set - Sku *Sku `json:"sku,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for AvailabilitySetUpdate. -func (asu AvailabilitySetUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if asu.AvailabilitySetProperties != nil { - objectMap["properties"] = asu.AvailabilitySetProperties - } - if asu.Sku != nil { - objectMap["sku"] = asu.Sku - } - if asu.Tags != nil { - objectMap["tags"] = asu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for AvailabilitySetUpdate struct. -func (asu *AvailabilitySetUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var availabilitySetProperties AvailabilitySetProperties - err = json.Unmarshal(*v, &availabilitySetProperties) - if err != nil { - return err - } - asu.AvailabilitySetProperties = &availabilitySetProperties - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - asu.Sku = &sku - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - asu.Tags = tags - } - } - } - - return nil -} - -// AvailablePatchSummary describes the properties of an virtual machine instance view for available patch -// summary. -type AvailablePatchSummary struct { - // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' - Status PatchOperationStatus `json:"status,omitempty"` - // AssessmentActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. - AssessmentActivityID *string `json:"assessmentActivityId,omitempty"` - // RebootPending - READ-ONLY; The overall reboot status of the VM. It will be true when partially installed patches require a reboot to complete installation but the reboot has not yet occurred. - RebootPending *bool `json:"rebootPending,omitempty"` - // CriticalAndSecurityPatchCount - READ-ONLY; The number of critical or security patches that have been detected as available and not yet installed. - CriticalAndSecurityPatchCount *int32 `json:"criticalAndSecurityPatchCount,omitempty"` - // OtherPatchCount - READ-ONLY; The number of all available patches excluding critical and security. - OtherPatchCount *int32 `json:"otherPatchCount,omitempty"` - // StartTime - READ-ONLY; The UTC timestamp when the operation began. - StartTime *date.Time `json:"startTime,omitempty"` - // LastModifiedTime - READ-ONLY; The UTC timestamp when the operation began. - LastModifiedTime *date.Time `json:"lastModifiedTime,omitempty"` - // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. - Error *APIError `json:"error,omitempty"` -} - -// MarshalJSON is the custom marshaler for AvailablePatchSummary. -func (aps AvailablePatchSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// BillingProfile specifies the billing related details of a Azure Spot VM or VMSS.

    Minimum -// api-version: 2019-03-01. -type BillingProfile struct { - // MaxPrice - Specifies the maximum price you are willing to pay for a Azure Spot VM/VMSS. This price is in US Dollars.

    This price will be compared with the current Azure Spot price for the VM size. Also, the prices are compared at the time of create/update of Azure Spot VM/VMSS and the operation will only succeed if the maxPrice is greater than the current Azure Spot price.

    The maxPrice will also be used for evicting a Azure Spot VM/VMSS if the current Azure Spot price goes beyond the maxPrice after creation of VM/VMSS.

    Possible values are:

    - Any decimal value greater than zero. Example: 0.01538

    -1 – indicates default price to be up-to on-demand.

    You can set the maxPrice to -1 to indicate that the Azure Spot VM/VMSS should not be evicted for price reasons. Also, the default max price is -1 if it is not provided by you.

    Minimum api-version: 2019-03-01. - MaxPrice *float64 `json:"maxPrice,omitempty"` -} - -// BootDiagnostics boot Diagnostics is a debugging feature which allows you to view Console Output and -// Screenshot to diagnose VM status.

    You can easily view the output of your console log.

    -// Azure also enables you to see a screenshot of the VM from the hypervisor. -type BootDiagnostics struct { - // Enabled - Whether boot diagnostics should be enabled on the Virtual Machine. - Enabled *bool `json:"enabled,omitempty"` - // StorageURI - Uri of the storage account to use for placing the console output and screenshot.

    If storageUri is not specified while enabling boot diagnostics, managed storage will be used. - StorageURI *string `json:"storageUri,omitempty"` -} - -// BootDiagnosticsInstanceView the instance view of a virtual machine boot diagnostics. -type BootDiagnosticsInstanceView struct { - // ConsoleScreenshotBlobURI - READ-ONLY; The console screenshot blob URI.

    NOTE: This will **not** be set if boot diagnostics is currently enabled with managed storage. - ConsoleScreenshotBlobURI *string `json:"consoleScreenshotBlobUri,omitempty"` - // SerialConsoleLogBlobURI - READ-ONLY; The serial console log blob Uri.

    NOTE: This will **not** be set if boot diagnostics is currently enabled with managed storage. - SerialConsoleLogBlobURI *string `json:"serialConsoleLogBlobUri,omitempty"` - // Status - READ-ONLY; The boot diagnostics status information for the VM.

    NOTE: It will be set only if there are errors encountered in enabling boot diagnostics. - Status *InstanceViewStatus `json:"status,omitempty"` -} - -// MarshalJSON is the custom marshaler for BootDiagnosticsInstanceView. -func (bdiv BootDiagnosticsInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CapacityReservation specifies information about the capacity reservation. -type CapacityReservation struct { - autorest.Response `json:"-"` - *CapacityReservationProperties `json:"properties,omitempty"` - // Sku - SKU of the resource for which capacity needs be reserved. The SKU name and capacity is required to be set. Currently VM Skus with the capability called 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. - Sku *Sku `json:"sku,omitempty"` - // Zones - Availability Zone to use for this capacity reservation. The zone has to be single value and also should be part for the list of zones specified during the capacity reservation group creation. The zone can be assigned only during creation. If not provided, the reservation supports only non-zonal deployments. If provided, enforces VM/VMSS using this capacity reservation to be in same zone. - Zones *[]string `json:"zones,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CapacityReservation. -func (cr CapacityReservation) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cr.CapacityReservationProperties != nil { - objectMap["properties"] = cr.CapacityReservationProperties - } - if cr.Sku != nil { - objectMap["sku"] = cr.Sku - } - if cr.Zones != nil { - objectMap["zones"] = cr.Zones - } - if cr.Location != nil { - objectMap["location"] = cr.Location - } - if cr.Tags != nil { - objectMap["tags"] = cr.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CapacityReservation struct. -func (cr *CapacityReservation) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var capacityReservationProperties CapacityReservationProperties - err = json.Unmarshal(*v, &capacityReservationProperties) - if err != nil { - return err - } - cr.CapacityReservationProperties = &capacityReservationProperties - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - cr.Sku = &sku - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - cr.Zones = &zones - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - cr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - cr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - cr.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - cr.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - cr.Tags = tags - } - } - } - - return nil -} - -// CapacityReservationGroup specifies information about the capacity reservation group that the capacity -// reservations should be assigned to.

    Currently, a capacity reservation can only be added to a -// capacity reservation group at creation time. An existing capacity reservation cannot be added or moved -// to another capacity reservation group. -type CapacityReservationGroup struct { - autorest.Response `json:"-"` - *CapacityReservationGroupProperties `json:"properties,omitempty"` - // Zones - Availability Zones to use for this capacity reservation group. The zones can be assigned only during creation. If not provided, the group supports only regional resources in the region. If provided, enforces each capacity reservation in the group to be in one of the zones. - Zones *[]string `json:"zones,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationGroup. -func (crg CapacityReservationGroup) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if crg.CapacityReservationGroupProperties != nil { - objectMap["properties"] = crg.CapacityReservationGroupProperties - } - if crg.Zones != nil { - objectMap["zones"] = crg.Zones - } - if crg.Location != nil { - objectMap["location"] = crg.Location - } - if crg.Tags != nil { - objectMap["tags"] = crg.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CapacityReservationGroup struct. -func (crg *CapacityReservationGroup) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var capacityReservationGroupProperties CapacityReservationGroupProperties - err = json.Unmarshal(*v, &capacityReservationGroupProperties) - if err != nil { - return err - } - crg.CapacityReservationGroupProperties = &capacityReservationGroupProperties - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - crg.Zones = &zones - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - crg.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - crg.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - crg.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - crg.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - crg.Tags = tags - } - } - } - - return nil -} - -// CapacityReservationGroupInstanceView ... -type CapacityReservationGroupInstanceView struct { - // CapacityReservations - READ-ONLY; List of instance view of the capacity reservations under the capacity reservation group. - CapacityReservations *[]CapacityReservationInstanceViewWithName `json:"capacityReservations,omitempty"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationGroupInstanceView. -func (crgiv CapacityReservationGroupInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CapacityReservationGroupListResult the List capacity reservation group with resource group response. -type CapacityReservationGroupListResult struct { - autorest.Response `json:"-"` - // Value - The list of capacity reservation groups - Value *[]CapacityReservationGroup `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of capacity reservation groups. Call ListNext() with this URI to fetch the next page of capacity reservation groups. - NextLink *string `json:"nextLink,omitempty"` -} - -// CapacityReservationGroupListResultIterator provides access to a complete listing of -// CapacityReservationGroup values. -type CapacityReservationGroupListResultIterator struct { - i int - page CapacityReservationGroupListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *CapacityReservationGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *CapacityReservationGroupListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter CapacityReservationGroupListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter CapacityReservationGroupListResultIterator) Response() CapacityReservationGroupListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter CapacityReservationGroupListResultIterator) Value() CapacityReservationGroup { - if !iter.page.NotDone() { - return CapacityReservationGroup{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the CapacityReservationGroupListResultIterator type. -func NewCapacityReservationGroupListResultIterator(page CapacityReservationGroupListResultPage) CapacityReservationGroupListResultIterator { - return CapacityReservationGroupListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (crglr CapacityReservationGroupListResult) IsEmpty() bool { - return crglr.Value == nil || len(*crglr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (crglr CapacityReservationGroupListResult) hasNextLink() bool { - return crglr.NextLink != nil && len(*crglr.NextLink) != 0 -} - -// capacityReservationGroupListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (crglr CapacityReservationGroupListResult) capacityReservationGroupListResultPreparer(ctx context.Context) (*http.Request, error) { - if !crglr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(crglr.NextLink))) -} - -// CapacityReservationGroupListResultPage contains a page of CapacityReservationGroup values. -type CapacityReservationGroupListResultPage struct { - fn func(context.Context, CapacityReservationGroupListResult) (CapacityReservationGroupListResult, error) - crglr CapacityReservationGroupListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *CapacityReservationGroupListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationGroupListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.crglr) - if err != nil { - return err - } - page.crglr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *CapacityReservationGroupListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page CapacityReservationGroupListResultPage) NotDone() bool { - return !page.crglr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page CapacityReservationGroupListResultPage) Response() CapacityReservationGroupListResult { - return page.crglr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page CapacityReservationGroupListResultPage) Values() []CapacityReservationGroup { - if page.crglr.IsEmpty() { - return nil - } - return *page.crglr.Value -} - -// Creates a new instance of the CapacityReservationGroupListResultPage type. -func NewCapacityReservationGroupListResultPage(cur CapacityReservationGroupListResult, getNextPage func(context.Context, CapacityReservationGroupListResult) (CapacityReservationGroupListResult, error)) CapacityReservationGroupListResultPage { - return CapacityReservationGroupListResultPage{ - fn: getNextPage, - crglr: cur, - } -} - -// CapacityReservationGroupProperties capacity reservation group Properties. -type CapacityReservationGroupProperties struct { - // CapacityReservations - READ-ONLY; A list of all capacity reservation resource ids that belong to capacity reservation group. - CapacityReservations *[]SubResourceReadOnly `json:"capacityReservations,omitempty"` - // VirtualMachinesAssociated - READ-ONLY; A list of references to all virtual machines associated to the capacity reservation group. - VirtualMachinesAssociated *[]SubResourceReadOnly `json:"virtualMachinesAssociated,omitempty"` - // InstanceView - READ-ONLY; The capacity reservation group instance view which has the list of instance views for all the capacity reservations that belong to the capacity reservation group. - InstanceView *CapacityReservationGroupInstanceView `json:"instanceView,omitempty"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationGroupProperties. -func (crgp CapacityReservationGroupProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CapacityReservationGroupUpdate specifies information about the capacity reservation group. Only tags can -// be updated. -type CapacityReservationGroupUpdate struct { - *CapacityReservationGroupProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationGroupUpdate. -func (crgu CapacityReservationGroupUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if crgu.CapacityReservationGroupProperties != nil { - objectMap["properties"] = crgu.CapacityReservationGroupProperties - } - if crgu.Tags != nil { - objectMap["tags"] = crgu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CapacityReservationGroupUpdate struct. -func (crgu *CapacityReservationGroupUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var capacityReservationGroupProperties CapacityReservationGroupProperties - err = json.Unmarshal(*v, &capacityReservationGroupProperties) - if err != nil { - return err - } - crgu.CapacityReservationGroupProperties = &capacityReservationGroupProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - crgu.Tags = tags - } - } - } - - return nil -} - -// CapacityReservationInstanceView the instance view of a capacity reservation that provides as snapshot of -// the runtime properties of the capacity reservation that is managed by the platform and can change -// outside of control plane operations. -type CapacityReservationInstanceView struct { - // UtilizationInfo - Unutilized capacity of the capacity reservation. - UtilizationInfo *CapacityReservationUtilization `json:"utilizationInfo,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// CapacityReservationInstanceViewWithName the instance view of a capacity reservation that includes the -// name of the capacity reservation. It is used for the response to the instance view of a capacity -// reservation group. -type CapacityReservationInstanceViewWithName struct { - // Name - READ-ONLY; The name of the capacity reservation. - Name *string `json:"name,omitempty"` - // UtilizationInfo - Unutilized capacity of the capacity reservation. - UtilizationInfo *CapacityReservationUtilization `json:"utilizationInfo,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationInstanceViewWithName. -func (crivwn CapacityReservationInstanceViewWithName) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if crivwn.UtilizationInfo != nil { - objectMap["utilizationInfo"] = crivwn.UtilizationInfo - } - if crivwn.Statuses != nil { - objectMap["statuses"] = crivwn.Statuses - } - return json.Marshal(objectMap) -} - -// CapacityReservationListResult the list capacity reservation operation response. -type CapacityReservationListResult struct { - autorest.Response `json:"-"` - // Value - The list of capacity reservations - Value *[]CapacityReservation `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of capacity reservations. Call ListNext() with this URI to fetch the next page of capacity reservations. - NextLink *string `json:"nextLink,omitempty"` -} - -// CapacityReservationListResultIterator provides access to a complete listing of CapacityReservation -// values. -type CapacityReservationListResultIterator struct { - i int - page CapacityReservationListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *CapacityReservationListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *CapacityReservationListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter CapacityReservationListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter CapacityReservationListResultIterator) Response() CapacityReservationListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter CapacityReservationListResultIterator) Value() CapacityReservation { - if !iter.page.NotDone() { - return CapacityReservation{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the CapacityReservationListResultIterator type. -func NewCapacityReservationListResultIterator(page CapacityReservationListResultPage) CapacityReservationListResultIterator { - return CapacityReservationListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (crlr CapacityReservationListResult) IsEmpty() bool { - return crlr.Value == nil || len(*crlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (crlr CapacityReservationListResult) hasNextLink() bool { - return crlr.NextLink != nil && len(*crlr.NextLink) != 0 -} - -// capacityReservationListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (crlr CapacityReservationListResult) capacityReservationListResultPreparer(ctx context.Context) (*http.Request, error) { - if !crlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(crlr.NextLink))) -} - -// CapacityReservationListResultPage contains a page of CapacityReservation values. -type CapacityReservationListResultPage struct { - fn func(context.Context, CapacityReservationListResult) (CapacityReservationListResult, error) - crlr CapacityReservationListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *CapacityReservationListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CapacityReservationListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.crlr) - if err != nil { - return err - } - page.crlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *CapacityReservationListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page CapacityReservationListResultPage) NotDone() bool { - return !page.crlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page CapacityReservationListResultPage) Response() CapacityReservationListResult { - return page.crlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page CapacityReservationListResultPage) Values() []CapacityReservation { - if page.crlr.IsEmpty() { - return nil - } - return *page.crlr.Value -} - -// Creates a new instance of the CapacityReservationListResultPage type. -func NewCapacityReservationListResultPage(cur CapacityReservationListResult, getNextPage func(context.Context, CapacityReservationListResult) (CapacityReservationListResult, error)) CapacityReservationListResultPage { - return CapacityReservationListResultPage{ - fn: getNextPage, - crlr: cur, - } -} - -// CapacityReservationProfile the parameters of a capacity reservation Profile. -type CapacityReservationProfile struct { - // CapacityReservationGroup - Specifies the capacity reservation group resource id that should be used for allocating the virtual machine or scaleset vm instances provided enough capacity has been reserved. Please refer to https://aka.ms/CapacityReservation for more details. - CapacityReservationGroup *SubResource `json:"capacityReservationGroup,omitempty"` -} - -// CapacityReservationProperties properties of the Capacity reservation. -type CapacityReservationProperties struct { - // ReservationID - READ-ONLY; A unique id generated and assigned to the capacity reservation by the platform which does not change throughout the lifetime of the resource. - ReservationID *string `json:"reservationId,omitempty"` - // VirtualMachinesAssociated - READ-ONLY; A list of all virtual machine resource ids that are associated with the capacity reservation. - VirtualMachinesAssociated *[]SubResourceReadOnly `json:"virtualMachinesAssociated,omitempty"` - // ProvisioningTime - READ-ONLY; The date time when the capacity reservation was last updated. - ProvisioningTime *date.Time `json:"provisioningTime,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // InstanceView - READ-ONLY; The Capacity reservation instance view. - InstanceView *CapacityReservationInstanceView `json:"instanceView,omitempty"` - // TimeCreated - READ-ONLY; Specifies the time at which the Capacity Reservation resource was created.

    Minimum api-version: 2022-03-01. - TimeCreated *date.Time `json:"timeCreated,omitempty"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationProperties. -func (crp CapacityReservationProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CapacityReservationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CapacityReservationsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CapacityReservationsClient) (CapacityReservation, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CapacityReservationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CapacityReservationsCreateOrUpdateFuture.Result. -func (future *CapacityReservationsCreateOrUpdateFuture) result(client CapacityReservationsClient) (cr CapacityReservation, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - cr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if cr.Response.Response, err = future.GetResult(sender); err == nil && cr.Response.Response.StatusCode != http.StatusNoContent { - cr, err = client.CreateOrUpdateResponder(cr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsCreateOrUpdateFuture", "Result", cr.Response.Response, "Failure responding to request") - } - } - return -} - -// CapacityReservationsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CapacityReservationsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CapacityReservationsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CapacityReservationsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CapacityReservationsDeleteFuture.Result. -func (future *CapacityReservationsDeleteFuture) result(client CapacityReservationsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// CapacityReservationsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CapacityReservationsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CapacityReservationsClient) (CapacityReservation, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CapacityReservationsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CapacityReservationsUpdateFuture.Result. -func (future *CapacityReservationsUpdateFuture) result(client CapacityReservationsClient) (cr CapacityReservation, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - cr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CapacityReservationsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if cr.Response.Response, err = future.GetResult(sender); err == nil && cr.Response.Response.StatusCode != http.StatusNoContent { - cr, err = client.UpdateResponder(cr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CapacityReservationsUpdateFuture", "Result", cr.Response.Response, "Failure responding to request") - } - } - return -} - -// CapacityReservationUpdate specifies information about the capacity reservation. Only tags and -// sku.capacity can be updated. -type CapacityReservationUpdate struct { - *CapacityReservationProperties `json:"properties,omitempty"` - // Sku - SKU of the resource for which capacity needs be reserved. The SKU name and capacity is required to be set. Currently VM Skus with the capability called 'CapacityReservationSupported' set to true are supported. Refer to List Microsoft.Compute SKUs in a region (https://docs.microsoft.com/rest/api/compute/resourceskus/list) for supported values. - Sku *Sku `json:"sku,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationUpdate. -func (cru CapacityReservationUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cru.CapacityReservationProperties != nil { - objectMap["properties"] = cru.CapacityReservationProperties - } - if cru.Sku != nil { - objectMap["sku"] = cru.Sku - } - if cru.Tags != nil { - objectMap["tags"] = cru.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CapacityReservationUpdate struct. -func (cru *CapacityReservationUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var capacityReservationProperties CapacityReservationProperties - err = json.Unmarshal(*v, &capacityReservationProperties) - if err != nil { - return err - } - cru.CapacityReservationProperties = &capacityReservationProperties - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - cru.Sku = &sku - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - cru.Tags = tags - } - } - } - - return nil -} - -// CapacityReservationUtilization represents the capacity reservation utilization in terms of resources -// allocated. -type CapacityReservationUtilization struct { - // VirtualMachinesAllocated - READ-ONLY; A list of all virtual machines resource ids allocated against the capacity reservation. - VirtualMachinesAllocated *[]SubResourceReadOnly `json:"virtualMachinesAllocated,omitempty"` -} - -// MarshalJSON is the custom marshaler for CapacityReservationUtilization. -func (cru CapacityReservationUtilization) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CloudError an error response from the Compute service. -type CloudError struct { - Error *APIError `json:"error,omitempty"` -} - -// CloudService describes the cloud service. -type CloudService struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Location - Resource location. - Location *string `json:"location,omitempty"` - // Tags - Resource tags. - Tags map[string]*string `json:"tags"` - Properties *CloudServiceProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudService. -func (cs CloudService) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cs.Location != nil { - objectMap["location"] = cs.Location - } - if cs.Tags != nil { - objectMap["tags"] = cs.Tags - } - if cs.Properties != nil { - objectMap["properties"] = cs.Properties - } - return json.Marshal(objectMap) -} - -// CloudServiceExtensionProfile describes a cloud service extension profile. -type CloudServiceExtensionProfile struct { - // Extensions - List of extensions for the cloud service. - Extensions *[]Extension `json:"extensions,omitempty"` -} - -// CloudServiceExtensionProperties extension Properties. -type CloudServiceExtensionProperties struct { - // Publisher - The name of the extension handler publisher. - Publisher *string `json:"publisher,omitempty"` - // Type - Specifies the type of the extension. - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the extension. Specifies the version of the extension. If this element is not specified or an asterisk (*) is used as the value, the latest version of the extension is used. If the value is specified with a major version number and an asterisk as the minor version number (X.), the latest minor version of the specified major version is selected. If a major version number and a minor version number are specified (X.Y), the specific extension version is selected. If a version is specified, an auto-upgrade is performed on the role instance. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // AutoUpgradeMinorVersion - Explicitly specify whether platform can automatically upgrade typeHandlerVersion to higher minor versions when they become available. - AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` - // Settings - Public settings for the extension. For JSON extensions, this is the JSON settings for the extension. For XML Extension (like RDP), this is the XML setting for the extension. - Settings *string `json:"settings,omitempty"` - // ProtectedSettings - Protected settings for the extension which are encrypted before sent to the role instance. - ProtectedSettings *string `json:"protectedSettings,omitempty"` - ProtectedSettingsFromKeyVault *CloudServiceVaultAndSecretReference `json:"protectedSettingsFromKeyVault,omitempty"` - // ForceUpdateTag - Tag to force apply the provided public and protected settings. - // Changing the tag value allows for re-running the extension without changing any of the public or protected settings. - // If forceUpdateTag is not changed, updates to public or protected settings would still be applied by the handler. - // If neither forceUpdateTag nor any of public or protected settings change, extension would flow to the role instance with the same sequence-number, and - // it is up to handler implementation whether to re-run it or not - ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // RolesAppliedTo - Optional list of roles to apply this extension. If property is not specified or '*' is specified, extension is applied to all roles in the cloud service. - RolesAppliedTo *[]string `json:"rolesAppliedTo,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudServiceExtensionProperties. -func (csep CloudServiceExtensionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if csep.Publisher != nil { - objectMap["publisher"] = csep.Publisher - } - if csep.Type != nil { - objectMap["type"] = csep.Type - } - if csep.TypeHandlerVersion != nil { - objectMap["typeHandlerVersion"] = csep.TypeHandlerVersion - } - if csep.AutoUpgradeMinorVersion != nil { - objectMap["autoUpgradeMinorVersion"] = csep.AutoUpgradeMinorVersion - } - if csep.Settings != nil { - objectMap["settings"] = csep.Settings - } - if csep.ProtectedSettings != nil { - objectMap["protectedSettings"] = csep.ProtectedSettings - } - if csep.ProtectedSettingsFromKeyVault != nil { - objectMap["protectedSettingsFromKeyVault"] = csep.ProtectedSettingsFromKeyVault - } - if csep.ForceUpdateTag != nil { - objectMap["forceUpdateTag"] = csep.ForceUpdateTag - } - if csep.RolesAppliedTo != nil { - objectMap["rolesAppliedTo"] = csep.RolesAppliedTo - } - return json.Marshal(objectMap) -} - -// CloudServiceInstanceView instanceView of CloudService as a whole -type CloudServiceInstanceView struct { - autorest.Response `json:"-"` - RoleInstance *InstanceViewStatusesSummary `json:"roleInstance,omitempty"` - // SdkVersion - READ-ONLY; The version of the SDK that was used to generate the package for the cloud service. - SdkVersion *string `json:"sdkVersion,omitempty"` - // PrivateIds - READ-ONLY; Specifies a list of unique identifiers generated internally for the cloud service.

    NOTE: If you are using Azure Diagnostics extension, this property can be used as 'DeploymentId' for querying details. - PrivateIds *[]string `json:"privateIds,omitempty"` - // Statuses - READ-ONLY - Statuses *[]ResourceInstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudServiceInstanceView. -func (csiv CloudServiceInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if csiv.RoleInstance != nil { - objectMap["roleInstance"] = csiv.RoleInstance - } - return json.Marshal(objectMap) -} - -// CloudServiceListResult ... -type CloudServiceListResult struct { - autorest.Response `json:"-"` - Value *[]CloudService `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// CloudServiceListResultIterator provides access to a complete listing of CloudService values. -type CloudServiceListResultIterator struct { - i int - page CloudServiceListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *CloudServiceListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *CloudServiceListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter CloudServiceListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter CloudServiceListResultIterator) Response() CloudServiceListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter CloudServiceListResultIterator) Value() CloudService { - if !iter.page.NotDone() { - return CloudService{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the CloudServiceListResultIterator type. -func NewCloudServiceListResultIterator(page CloudServiceListResultPage) CloudServiceListResultIterator { - return CloudServiceListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (cslr CloudServiceListResult) IsEmpty() bool { - return cslr.Value == nil || len(*cslr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (cslr CloudServiceListResult) hasNextLink() bool { - return cslr.NextLink != nil && len(*cslr.NextLink) != 0 -} - -// cloudServiceListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (cslr CloudServiceListResult) cloudServiceListResultPreparer(ctx context.Context) (*http.Request, error) { - if !cslr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(cslr.NextLink))) -} - -// CloudServiceListResultPage contains a page of CloudService values. -type CloudServiceListResultPage struct { - fn func(context.Context, CloudServiceListResult) (CloudServiceListResult, error) - cslr CloudServiceListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *CloudServiceListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.cslr) - if err != nil { - return err - } - page.cslr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *CloudServiceListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page CloudServiceListResultPage) NotDone() bool { - return !page.cslr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page CloudServiceListResultPage) Response() CloudServiceListResult { - return page.cslr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page CloudServiceListResultPage) Values() []CloudService { - if page.cslr.IsEmpty() { - return nil - } - return *page.cslr.Value -} - -// Creates a new instance of the CloudServiceListResultPage type. -func NewCloudServiceListResultPage(cur CloudServiceListResult, getNextPage func(context.Context, CloudServiceListResult) (CloudServiceListResult, error)) CloudServiceListResultPage { - return CloudServiceListResultPage{ - fn: getNextPage, - cslr: cur, - } -} - -// CloudServiceNetworkProfile network Profile for the cloud service. -type CloudServiceNetworkProfile struct { - // LoadBalancerConfigurations - List of Load balancer configurations. Cloud service can have up to two load balancer configurations, corresponding to a Public Load Balancer and an Internal Load Balancer. - LoadBalancerConfigurations *[]LoadBalancerConfiguration `json:"loadBalancerConfigurations,omitempty"` - // SwappableCloudService - The id reference of the cloud service containing the target IP with which the subject cloud service can perform a swap. This property cannot be updated once it is set. The swappable cloud service referred by this id must be present otherwise an error will be thrown. - SwappableCloudService *SubResource `json:"swappableCloudService,omitempty"` -} - -// CloudServiceOsProfile describes the OS profile for the cloud service. -type CloudServiceOsProfile struct { - // Secrets - Specifies set of certificates that should be installed onto the role instances. - Secrets *[]CloudServiceVaultSecretGroup `json:"secrets,omitempty"` -} - -// CloudServiceProperties cloud service properties -type CloudServiceProperties struct { - // PackageURL - Specifies a URL that refers to the location of the service package in the Blob service. The service package URL can be Shared Access Signature (SAS) URI from any storage account. - // This is a write-only property and is not returned in GET calls. - PackageURL *string `json:"packageUrl,omitempty"` - // Configuration - Specifies the XML service configuration (.cscfg) for the cloud service. - Configuration *string `json:"configuration,omitempty"` - // ConfigurationURL - Specifies a URL that refers to the location of the service configuration in the Blob service. The service package URL can be Shared Access Signature (SAS) URI from any storage account. - // This is a write-only property and is not returned in GET calls. - ConfigurationURL *string `json:"configurationUrl,omitempty"` - // StartCloudService - (Optional) Indicates whether to start the cloud service immediately after it is created. The default value is `true`. - // If false, the service model is still deployed, but the code is not run immediately. Instead, the service is PoweredOff until you call Start, at which time the service will be started. A deployed service still incurs charges, even if it is poweredoff. - StartCloudService *bool `json:"startCloudService,omitempty"` - // AllowModelOverride - (Optional) Indicates whether the role sku properties (roleProfile.roles.sku) specified in the model/template should override the role instance count and vm size specified in the .cscfg and .csdef respectively. - // The default value is `false`. - AllowModelOverride *bool `json:"allowModelOverride,omitempty"` - // UpgradeMode - Possible values include: 'Auto', 'Manual', 'Simultaneous' - UpgradeMode CloudServiceUpgradeMode `json:"upgradeMode,omitempty"` - RoleProfile *CloudServiceRoleProfile `json:"roleProfile,omitempty"` - OsProfile *CloudServiceOsProfile `json:"osProfile,omitempty"` - NetworkProfile *CloudServiceNetworkProfile `json:"networkProfile,omitempty"` - ExtensionProfile *CloudServiceExtensionProfile `json:"extensionProfile,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // UniqueID - READ-ONLY; The unique identifier for the cloud service. - UniqueID *string `json:"uniqueId,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudServiceProperties. -func (csp CloudServiceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if csp.PackageURL != nil { - objectMap["packageUrl"] = csp.PackageURL - } - if csp.Configuration != nil { - objectMap["configuration"] = csp.Configuration - } - if csp.ConfigurationURL != nil { - objectMap["configurationUrl"] = csp.ConfigurationURL - } - if csp.StartCloudService != nil { - objectMap["startCloudService"] = csp.StartCloudService - } - if csp.AllowModelOverride != nil { - objectMap["allowModelOverride"] = csp.AllowModelOverride - } - if csp.UpgradeMode != "" { - objectMap["upgradeMode"] = csp.UpgradeMode - } - if csp.RoleProfile != nil { - objectMap["roleProfile"] = csp.RoleProfile - } - if csp.OsProfile != nil { - objectMap["osProfile"] = csp.OsProfile - } - if csp.NetworkProfile != nil { - objectMap["networkProfile"] = csp.NetworkProfile - } - if csp.ExtensionProfile != nil { - objectMap["extensionProfile"] = csp.ExtensionProfile - } - return json.Marshal(objectMap) -} - -// CloudServiceRole describes a role of the cloud service. -type CloudServiceRole struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - Sku *CloudServiceRoleSku `json:"sku,omitempty"` - Properties *CloudServiceRoleProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudServiceRole. -func (csr CloudServiceRole) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if csr.Sku != nil { - objectMap["sku"] = csr.Sku - } - if csr.Properties != nil { - objectMap["properties"] = csr.Properties - } - return json.Marshal(objectMap) -} - -// CloudServiceRoleInstancesDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServiceRoleInstancesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServiceRoleInstancesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServiceRoleInstancesDeleteFuture.Result. -func (future *CloudServiceRoleInstancesDeleteFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServiceRoleInstancesRebuildFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServiceRoleInstancesRebuildFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServiceRoleInstancesRebuildFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServiceRoleInstancesRebuildFuture.Result. -func (future *CloudServiceRoleInstancesRebuildFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesRebuildFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesRebuildFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServiceRoleInstancesReimageFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServiceRoleInstancesReimageFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServiceRoleInstancesReimageFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServiceRoleInstancesReimageFuture.Result. -func (future *CloudServiceRoleInstancesReimageFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesReimageFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesReimageFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServiceRoleInstancesRestartFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServiceRoleInstancesRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServiceRoleInstancesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServiceRoleInstancesRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServiceRoleInstancesRestartFuture.Result. -func (future *CloudServiceRoleInstancesRestartFuture) result(client CloudServiceRoleInstancesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServiceRoleInstancesRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServiceRoleInstancesRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServiceRoleListResult ... -type CloudServiceRoleListResult struct { - autorest.Response `json:"-"` - Value *[]CloudServiceRole `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// CloudServiceRoleListResultIterator provides access to a complete listing of CloudServiceRole values. -type CloudServiceRoleListResultIterator struct { - i int - page CloudServiceRoleListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *CloudServiceRoleListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *CloudServiceRoleListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter CloudServiceRoleListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter CloudServiceRoleListResultIterator) Response() CloudServiceRoleListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter CloudServiceRoleListResultIterator) Value() CloudServiceRole { - if !iter.page.NotDone() { - return CloudServiceRole{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the CloudServiceRoleListResultIterator type. -func NewCloudServiceRoleListResultIterator(page CloudServiceRoleListResultPage) CloudServiceRoleListResultIterator { - return CloudServiceRoleListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (csrlr CloudServiceRoleListResult) IsEmpty() bool { - return csrlr.Value == nil || len(*csrlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (csrlr CloudServiceRoleListResult) hasNextLink() bool { - return csrlr.NextLink != nil && len(*csrlr.NextLink) != 0 -} - -// cloudServiceRoleListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (csrlr CloudServiceRoleListResult) cloudServiceRoleListResultPreparer(ctx context.Context) (*http.Request, error) { - if !csrlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(csrlr.NextLink))) -} - -// CloudServiceRoleListResultPage contains a page of CloudServiceRole values. -type CloudServiceRoleListResultPage struct { - fn func(context.Context, CloudServiceRoleListResult) (CloudServiceRoleListResult, error) - csrlr CloudServiceRoleListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *CloudServiceRoleListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CloudServiceRoleListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.csrlr) - if err != nil { - return err - } - page.csrlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *CloudServiceRoleListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page CloudServiceRoleListResultPage) NotDone() bool { - return !page.csrlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page CloudServiceRoleListResultPage) Response() CloudServiceRoleListResult { - return page.csrlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page CloudServiceRoleListResultPage) Values() []CloudServiceRole { - if page.csrlr.IsEmpty() { - return nil - } - return *page.csrlr.Value -} - -// Creates a new instance of the CloudServiceRoleListResultPage type. -func NewCloudServiceRoleListResultPage(cur CloudServiceRoleListResult, getNextPage func(context.Context, CloudServiceRoleListResult) (CloudServiceRoleListResult, error)) CloudServiceRoleListResultPage { - return CloudServiceRoleListResultPage{ - fn: getNextPage, - csrlr: cur, - } -} - -// CloudServiceRoleProfile describes the role profile for the cloud service. -type CloudServiceRoleProfile struct { - // Roles - List of roles for the cloud service. - Roles *[]CloudServiceRoleProfileProperties `json:"roles,omitempty"` -} - -// CloudServiceRoleProfileProperties describes the role properties. -type CloudServiceRoleProfileProperties struct { - // Name - Resource name. - Name *string `json:"name,omitempty"` - Sku *CloudServiceRoleSku `json:"sku,omitempty"` -} - -// CloudServiceRoleProperties ... -type CloudServiceRoleProperties struct { - // UniqueID - READ-ONLY; Specifies the ID which uniquely identifies a cloud service role. - UniqueID *string `json:"uniqueId,omitempty"` -} - -// MarshalJSON is the custom marshaler for CloudServiceRoleProperties. -func (csrp CloudServiceRoleProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CloudServiceRoleSku describes the cloud service role sku. -type CloudServiceRoleSku struct { - // Name - The sku name. NOTE: If the new SKU is not supported on the hardware the cloud service is currently on, you need to delete and recreate the cloud service or move back to the old sku. - Name *string `json:"name,omitempty"` - // Tier - Specifies the tier of the cloud service. Possible Values are

    **Standard**

    **Basic** - Tier *string `json:"tier,omitempty"` - // Capacity - Specifies the number of role instances in the cloud service. - Capacity *int64 `json:"capacity,omitempty"` -} - -// CloudServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServicesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (CloudService, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesCreateOrUpdateFuture.Result. -func (future *CloudServicesCreateOrUpdateFuture) result(client CloudServicesClient) (cs CloudService, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - cs.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if cs.Response.Response, err = future.GetResult(sender); err == nil && cs.Response.Response.StatusCode != http.StatusNoContent { - cs, err = client.CreateOrUpdateResponder(cs.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesCreateOrUpdateFuture", "Result", cs.Response.Response, "Failure responding to request") - } - } - return -} - -// CloudServicesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesDeleteFuture.Result. -func (future *CloudServicesDeleteFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesDeleteInstancesFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type CloudServicesDeleteInstancesFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesDeleteInstancesFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesDeleteInstancesFuture.Result. -func (future *CloudServicesDeleteInstancesFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesDeleteInstancesFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesDeleteInstancesFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesPowerOffFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesPowerOffFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesPowerOffFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesPowerOffFuture.Result. -func (future *CloudServicesPowerOffFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesPowerOffFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesPowerOffFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesRebuildFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesRebuildFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesRebuildFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesRebuildFuture.Result. -func (future *CloudServicesRebuildFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesRebuildFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesRebuildFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesReimageFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesReimageFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesReimageFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesReimageFuture.Result. -func (future *CloudServicesReimageFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesReimageFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesReimageFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesRestartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesRestartFuture.Result. -func (future *CloudServicesRestartFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesStartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesStartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesStartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesStartFuture.Result. -func (future *CloudServicesStartFuture) result(client CloudServicesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesStartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesStartFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesUpdateDomainWalkUpdateDomainFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type CloudServicesUpdateDomainWalkUpdateDomainFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesUpdateDomainClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesUpdateDomainWalkUpdateDomainFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesUpdateDomainWalkUpdateDomainFuture.Result. -func (future *CloudServicesUpdateDomainWalkUpdateDomainFuture) result(client CloudServicesUpdateDomainClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateDomainWalkUpdateDomainFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesUpdateDomainWalkUpdateDomainFuture") - return - } - ar.Response = future.Response() - return -} - -// CloudServicesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type CloudServicesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(CloudServicesClient) (CloudService, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *CloudServicesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for CloudServicesUpdateFuture.Result. -func (future *CloudServicesUpdateFuture) result(client CloudServicesClient) (cs CloudService, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - cs.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.CloudServicesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if cs.Response.Response, err = future.GetResult(sender); err == nil && cs.Response.Response.StatusCode != http.StatusNoContent { - cs, err = client.UpdateResponder(cs.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.CloudServicesUpdateFuture", "Result", cs.Response.Response, "Failure responding to request") - } - } - return -} - -// CloudServiceUpdate ... -type CloudServiceUpdate struct { - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CloudServiceUpdate. -func (csu CloudServiceUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if csu.Tags != nil { - objectMap["tags"] = csu.Tags - } - return json.Marshal(objectMap) -} - -// CloudServiceVaultAndSecretReference ... -type CloudServiceVaultAndSecretReference struct { - SourceVault *SubResource `json:"sourceVault,omitempty"` - SecretURL *string `json:"secretUrl,omitempty"` -} - -// CloudServiceVaultCertificate describes a single certificate reference in a Key Vault, and where the -// certificate should reside on the role instance. -type CloudServiceVaultCertificate struct { - // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. - CertificateURL *string `json:"certificateUrl,omitempty"` -} - -// CloudServiceVaultSecretGroup describes a set of certificates which are all in the same Key Vault. -type CloudServiceVaultSecretGroup struct { - // SourceVault - The relative URL of the Key Vault containing all of the certificates in VaultCertificates. - SourceVault *SubResource `json:"sourceVault,omitempty"` - // VaultCertificates - The list of key vault references in SourceVault which contain certificates. - VaultCertificates *[]CloudServiceVaultCertificate `json:"vaultCertificates,omitempty"` -} - -// CommunityGallery specifies information about the Community Gallery that you want to create or update. -type CommunityGallery struct { - autorest.Response `json:"-"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *CommunityGalleryIdentifier `json:"identifier,omitempty"` -} - -// MarshalJSON is the custom marshaler for CommunityGallery. -func (cg CommunityGallery) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cg.CommunityGalleryIdentifier != nil { - objectMap["identifier"] = cg.CommunityGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CommunityGallery struct. -func (cg *CommunityGallery) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - cg.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - cg.Location = &location - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - cg.Type = &typeVar - } - case "identifier": - if v != nil { - var communityGalleryIdentifier CommunityGalleryIdentifier - err = json.Unmarshal(*v, &communityGalleryIdentifier) - if err != nil { - return err - } - cg.CommunityGalleryIdentifier = &communityGalleryIdentifier - } - } - } - - return nil -} - -// CommunityGalleryIdentifier the identifier information of community gallery. -type CommunityGalleryIdentifier struct { - // UniqueID - The unique id of this community gallery. - UniqueID *string `json:"uniqueId,omitempty"` -} - -// CommunityGalleryImage specifies information about the gallery image definition that you want to create -// or update. -type CommunityGalleryImage struct { - autorest.Response `json:"-"` - *CommunityGalleryImageProperties `json:"properties,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *CommunityGalleryIdentifier `json:"identifier,omitempty"` -} - -// MarshalJSON is the custom marshaler for CommunityGalleryImage. -func (cgiVar CommunityGalleryImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cgiVar.CommunityGalleryImageProperties != nil { - objectMap["properties"] = cgiVar.CommunityGalleryImageProperties - } - if cgiVar.CommunityGalleryIdentifier != nil { - objectMap["identifier"] = cgiVar.CommunityGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CommunityGalleryImage struct. -func (cgiVar *CommunityGalleryImage) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var communityGalleryImageProperties CommunityGalleryImageProperties - err = json.Unmarshal(*v, &communityGalleryImageProperties) - if err != nil { - return err - } - cgiVar.CommunityGalleryImageProperties = &communityGalleryImageProperties - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - cgiVar.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - cgiVar.Location = &location - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - cgiVar.Type = &typeVar - } - case "identifier": - if v != nil { - var communityGalleryIdentifier CommunityGalleryIdentifier - err = json.Unmarshal(*v, &communityGalleryIdentifier) - if err != nil { - return err - } - cgiVar.CommunityGalleryIdentifier = &communityGalleryIdentifier - } - } - } - - return nil -} - -// CommunityGalleryImageProperties describes the properties of a gallery image definition. -type CommunityGalleryImageProperties struct { - // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' - OsState OperatingSystemStateTypes `json:"osState,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` - Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` - Disallowed *Disallowed `json:"disallowed,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // Features - A list of gallery image features. - Features *[]GalleryImageFeature `json:"features,omitempty"` - PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` -} - -// CommunityGalleryImageVersion specifies information about the gallery image version that you want to -// create or update. -type CommunityGalleryImageVersion struct { - autorest.Response `json:"-"` - *CommunityGalleryImageVersionProperties `json:"properties,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *CommunityGalleryIdentifier `json:"identifier,omitempty"` -} - -// MarshalJSON is the custom marshaler for CommunityGalleryImageVersion. -func (cgiv CommunityGalleryImageVersion) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cgiv.CommunityGalleryImageVersionProperties != nil { - objectMap["properties"] = cgiv.CommunityGalleryImageVersionProperties - } - if cgiv.CommunityGalleryIdentifier != nil { - objectMap["identifier"] = cgiv.CommunityGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CommunityGalleryImageVersion struct. -func (cgiv *CommunityGalleryImageVersion) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var communityGalleryImageVersionProperties CommunityGalleryImageVersionProperties - err = json.Unmarshal(*v, &communityGalleryImageVersionProperties) - if err != nil { - return err - } - cgiv.CommunityGalleryImageVersionProperties = &communityGalleryImageVersionProperties - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - cgiv.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - cgiv.Location = &location - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - cgiv.Type = &typeVar - } - case "identifier": - if v != nil { - var communityGalleryIdentifier CommunityGalleryIdentifier - err = json.Unmarshal(*v, &communityGalleryIdentifier) - if err != nil { - return err - } - cgiv.CommunityGalleryIdentifier = &communityGalleryIdentifier - } - } - } - - return nil -} - -// CommunityGalleryImageVersionProperties describes the properties of a gallery image version. -type CommunityGalleryImageVersionProperties struct { - // PublishedDate - The published date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` -} - -// CommunityGalleryInfo information of community gallery if current gallery is shared to community -type CommunityGalleryInfo struct { - // PublisherURI - Community gallery publisher uri - PublisherURI *string `json:"publisherUri,omitempty"` - // PublisherContact - Community gallery publisher contact email - PublisherContact *string `json:"publisherContact,omitempty"` - // Eula - Community gallery publisher eula - Eula *string `json:"eula,omitempty"` - // PublicNamePrefix - Community gallery public name prefix - PublicNamePrefix *string `json:"publicNamePrefix,omitempty"` - // CommunityGalleryEnabled - READ-ONLY; Contains info about whether community gallery sharing is enabled. - CommunityGalleryEnabled *bool `json:"communityGalleryEnabled,omitempty"` - // PublicNames - READ-ONLY; Community gallery public name list. - PublicNames *[]string `json:"publicNames,omitempty"` -} - -// MarshalJSON is the custom marshaler for CommunityGalleryInfo. -func (cgiVar CommunityGalleryInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cgiVar.PublisherURI != nil { - objectMap["publisherUri"] = cgiVar.PublisherURI - } - if cgiVar.PublisherContact != nil { - objectMap["publisherContact"] = cgiVar.PublisherContact - } - if cgiVar.Eula != nil { - objectMap["eula"] = cgiVar.Eula - } - if cgiVar.PublicNamePrefix != nil { - objectMap["publicNamePrefix"] = cgiVar.PublicNamePrefix - } - return json.Marshal(objectMap) -} - -// CreationData data used when creating a disk. -type CreationData struct { - // CreateOption - This enumerates the possible sources of a disk's creation. Possible values include: 'Empty', 'Attach', 'FromImage', 'Import', 'Copy', 'Restore', 'Upload', 'CopyStart', 'ImportSecure', 'UploadPreparedSecure' - CreateOption DiskCreateOption `json:"createOption,omitempty"` - // StorageAccountID - Required if createOption is Import. The Azure Resource Manager identifier of the storage account containing the blob to import as a disk. - StorageAccountID *string `json:"storageAccountId,omitempty"` - // ImageReference - Disk source information. - ImageReference *ImageDiskReference `json:"imageReference,omitempty"` - // GalleryImageReference - Required if creating from a Gallery Image. The id of the ImageDiskReference will be the ARM id of the shared galley image version from which to create a disk. - GalleryImageReference *ImageDiskReference `json:"galleryImageReference,omitempty"` - // SourceURI - If createOption is Import, this is the URI of a blob to be imported into a managed disk. - SourceURI *string `json:"sourceUri,omitempty"` - // SourceResourceID - If createOption is Copy, this is the ARM id of the source snapshot or disk. - SourceResourceID *string `json:"sourceResourceId,omitempty"` - // SourceUniqueID - READ-ONLY; If this field is set, this is the unique id identifying the source of this resource. - SourceUniqueID *string `json:"sourceUniqueId,omitempty"` - // UploadSizeBytes - If createOption is Upload, this is the size of the contents of the upload including the VHD footer. This value should be between 20972032 (20 MiB + 512 bytes for the VHD footer) and 35183298347520 bytes (32 TiB + 512 bytes for the VHD footer). - UploadSizeBytes *int64 `json:"uploadSizeBytes,omitempty"` - // LogicalSectorSize - Logical sector size in bytes for Ultra disks. Supported values are 512 ad 4096. 4096 is the default. - LogicalSectorSize *int32 `json:"logicalSectorSize,omitempty"` - // SecurityDataURI - If createOption is ImportSecure, this is the URI of a blob to be imported into VM guest state. - SecurityDataURI *string `json:"securityDataUri,omitempty"` -} - -// MarshalJSON is the custom marshaler for CreationData. -func (cd CreationData) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cd.CreateOption != "" { - objectMap["createOption"] = cd.CreateOption - } - if cd.StorageAccountID != nil { - objectMap["storageAccountId"] = cd.StorageAccountID - } - if cd.ImageReference != nil { - objectMap["imageReference"] = cd.ImageReference - } - if cd.GalleryImageReference != nil { - objectMap["galleryImageReference"] = cd.GalleryImageReference - } - if cd.SourceURI != nil { - objectMap["sourceUri"] = cd.SourceURI - } - if cd.SourceResourceID != nil { - objectMap["sourceResourceId"] = cd.SourceResourceID - } - if cd.UploadSizeBytes != nil { - objectMap["uploadSizeBytes"] = cd.UploadSizeBytes - } - if cd.LogicalSectorSize != nil { - objectMap["logicalSectorSize"] = cd.LogicalSectorSize - } - if cd.SecurityDataURI != nil { - objectMap["securityDataUri"] = cd.SecurityDataURI - } - return json.Marshal(objectMap) -} - -// DataDisk describes a data disk. -type DataDisk struct { - // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. - Lun *int32 `json:"lun,omitempty"` - // Name - The disk name. - Name *string `json:"name,omitempty"` - // Vhd - The virtual hard disk. - Vhd *VirtualHardDisk `json:"vhd,omitempty"` - // Image - The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - Image *VirtualHardDisk `json:"image,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. - WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` - // CreateOption - Specifies how the virtual machine should be created.

    Possible values are:

    **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.

    **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' - CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` - // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // ManagedDisk - The managed disk parameters. - ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` - // ToBeDetached - Specifies whether the data disk is in process of detachment from the VirtualMachine/VirtualMachineScaleset - ToBeDetached *bool `json:"toBeDetached,omitempty"` - // DiskIOPSReadWrite - READ-ONLY; Specifies the Read-Write IOPS for the managed disk when StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be updated only via updates to the VirtualMachine Scale Set. - DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` - // DiskMBpsReadWrite - READ-ONLY; Specifies the bandwidth in MB per second for the managed disk when StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be updated only via updates to the VirtualMachine Scale Set. - DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` - // DetachOption - Specifies the detach behavior to be used while detaching a disk or which is already in the process of detachment from the virtual machine. Supported values: **ForceDetach**.

    detachOption: **ForceDetach** is applicable only for managed data disks. If a previous detachment attempt of the data disk did not complete due to an unexpected failure from the virtual machine and the disk is still not released then use force-detach as a last resort option to detach the disk forcibly from the VM. All writes might not have been flushed when using this detach behavior.

    This feature is still in preview mode and is not supported for VirtualMachineScaleSet. To force-detach a data disk update toBeDetached to 'true' along with setting detachOption: 'ForceDetach'. Possible values include: 'ForceDetach' - DetachOption DiskDetachOptionTypes `json:"detachOption,omitempty"` - // DeleteOption - Specifies whether data disk should be deleted or detached upon VM deletion.

    Possible values:

    **Delete** If this value is used, the data disk is deleted when VM is deleted.

    **Detach** If this value is used, the data disk is retained after VM is deleted.

    The default value is set to **detach**. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' - DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` -} - -// MarshalJSON is the custom marshaler for DataDisk. -func (dd DataDisk) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dd.Lun != nil { - objectMap["lun"] = dd.Lun - } - if dd.Name != nil { - objectMap["name"] = dd.Name - } - if dd.Vhd != nil { - objectMap["vhd"] = dd.Vhd - } - if dd.Image != nil { - objectMap["image"] = dd.Image - } - if dd.Caching != "" { - objectMap["caching"] = dd.Caching - } - if dd.WriteAcceleratorEnabled != nil { - objectMap["writeAcceleratorEnabled"] = dd.WriteAcceleratorEnabled - } - if dd.CreateOption != "" { - objectMap["createOption"] = dd.CreateOption - } - if dd.DiskSizeGB != nil { - objectMap["diskSizeGB"] = dd.DiskSizeGB - } - if dd.ManagedDisk != nil { - objectMap["managedDisk"] = dd.ManagedDisk - } - if dd.ToBeDetached != nil { - objectMap["toBeDetached"] = dd.ToBeDetached - } - if dd.DetachOption != "" { - objectMap["detachOption"] = dd.DetachOption - } - if dd.DeleteOption != "" { - objectMap["deleteOption"] = dd.DeleteOption - } - return json.Marshal(objectMap) -} - -// DataDiskImage contains the data disk images information. -type DataDiskImage struct { - // Lun - READ-ONLY; Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. - Lun *int32 `json:"lun,omitempty"` -} - -// MarshalJSON is the custom marshaler for DataDiskImage. -func (ddi DataDiskImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// DataDiskImageEncryption contains encryption settings for a data disk image. -type DataDiskImageEncryption struct { - // Lun - This property specifies the logical unit number of the data disk. This value is used to identify data disks within the Virtual Machine and therefore must be unique for each data disk attached to the Virtual Machine. - Lun *int32 `json:"lun,omitempty"` - // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. - DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` -} - -// DedicatedHost specifies information about the Dedicated host. -type DedicatedHost struct { - autorest.Response `json:"-"` - *DedicatedHostProperties `json:"properties,omitempty"` - // Sku - SKU of the dedicated host for Hardware Generation and VM family. Only name is required to be set. List Microsoft.Compute SKUs for a list of possible values. - Sku *Sku `json:"sku,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DedicatedHost. -func (dh DedicatedHost) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dh.DedicatedHostProperties != nil { - objectMap["properties"] = dh.DedicatedHostProperties - } - if dh.Sku != nil { - objectMap["sku"] = dh.Sku - } - if dh.Location != nil { - objectMap["location"] = dh.Location - } - if dh.Tags != nil { - objectMap["tags"] = dh.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DedicatedHost struct. -func (dh *DedicatedHost) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var dedicatedHostProperties DedicatedHostProperties - err = json.Unmarshal(*v, &dedicatedHostProperties) - if err != nil { - return err - } - dh.DedicatedHostProperties = &dedicatedHostProperties - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - dh.Sku = &sku - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - dh.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - dh.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - dh.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - dh.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - dh.Tags = tags - } - } - } - - return nil -} - -// DedicatedHostAllocatableVM represents the dedicated host unutilized capacity in terms of a specific VM -// size. -type DedicatedHostAllocatableVM struct { - // VMSize - VM size in terms of which the unutilized capacity is represented. - VMSize *string `json:"vmSize,omitempty"` - // Count - Maximum number of VMs of size vmSize that can fit in the dedicated host's remaining capacity. - Count *float64 `json:"count,omitempty"` -} - -// DedicatedHostAvailableCapacity dedicated host unutilized capacity. -type DedicatedHostAvailableCapacity struct { - // AllocatableVMs - The unutilized capacity of the dedicated host represented in terms of each VM size that is allowed to be deployed to the dedicated host. - AllocatableVMs *[]DedicatedHostAllocatableVM `json:"allocatableVMs,omitempty"` -} - -// DedicatedHostGroup specifies information about the dedicated host group that the dedicated hosts should -// be assigned to.

    Currently, a dedicated host can only be added to a dedicated host group at -// creation time. An existing dedicated host cannot be added to another dedicated host group. -type DedicatedHostGroup struct { - autorest.Response `json:"-"` - *DedicatedHostGroupProperties `json:"properties,omitempty"` - // Zones - Availability Zone to use for this host group. Only single zone is supported. The zone can be assigned only during creation. If not provided, the group supports all zones in the region. If provided, enforces each host in the group to be in the same zone. - Zones *[]string `json:"zones,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostGroup. -func (dhg DedicatedHostGroup) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhg.DedicatedHostGroupProperties != nil { - objectMap["properties"] = dhg.DedicatedHostGroupProperties - } - if dhg.Zones != nil { - objectMap["zones"] = dhg.Zones - } - if dhg.Location != nil { - objectMap["location"] = dhg.Location - } - if dhg.Tags != nil { - objectMap["tags"] = dhg.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DedicatedHostGroup struct. -func (dhg *DedicatedHostGroup) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var dedicatedHostGroupProperties DedicatedHostGroupProperties - err = json.Unmarshal(*v, &dedicatedHostGroupProperties) - if err != nil { - return err - } - dhg.DedicatedHostGroupProperties = &dedicatedHostGroupProperties - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - dhg.Zones = &zones - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - dhg.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - dhg.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - dhg.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - dhg.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - dhg.Tags = tags - } - } - } - - return nil -} - -// DedicatedHostGroupInstanceView ... -type DedicatedHostGroupInstanceView struct { - // Hosts - List of instance view of the dedicated hosts under the dedicated host group. - Hosts *[]DedicatedHostInstanceViewWithName `json:"hosts,omitempty"` -} - -// DedicatedHostGroupListResult the List Dedicated Host Group with resource group response. -type DedicatedHostGroupListResult struct { - autorest.Response `json:"-"` - // Value - The list of dedicated host groups - Value *[]DedicatedHostGroup `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with this URI to fetch the next page of Dedicated Host Groups. - NextLink *string `json:"nextLink,omitempty"` -} - -// DedicatedHostGroupListResultIterator provides access to a complete listing of DedicatedHostGroup values. -type DedicatedHostGroupListResultIterator struct { - i int - page DedicatedHostGroupListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DedicatedHostGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DedicatedHostGroupListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DedicatedHostGroupListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DedicatedHostGroupListResultIterator) Response() DedicatedHostGroupListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DedicatedHostGroupListResultIterator) Value() DedicatedHostGroup { - if !iter.page.NotDone() { - return DedicatedHostGroup{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DedicatedHostGroupListResultIterator type. -func NewDedicatedHostGroupListResultIterator(page DedicatedHostGroupListResultPage) DedicatedHostGroupListResultIterator { - return DedicatedHostGroupListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (dhglr DedicatedHostGroupListResult) IsEmpty() bool { - return dhglr.Value == nil || len(*dhglr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (dhglr DedicatedHostGroupListResult) hasNextLink() bool { - return dhglr.NextLink != nil && len(*dhglr.NextLink) != 0 -} - -// dedicatedHostGroupListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (dhglr DedicatedHostGroupListResult) dedicatedHostGroupListResultPreparer(ctx context.Context) (*http.Request, error) { - if !dhglr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(dhglr.NextLink))) -} - -// DedicatedHostGroupListResultPage contains a page of DedicatedHostGroup values. -type DedicatedHostGroupListResultPage struct { - fn func(context.Context, DedicatedHostGroupListResult) (DedicatedHostGroupListResult, error) - dhglr DedicatedHostGroupListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DedicatedHostGroupListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostGroupListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.dhglr) - if err != nil { - return err - } - page.dhglr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DedicatedHostGroupListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DedicatedHostGroupListResultPage) NotDone() bool { - return !page.dhglr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DedicatedHostGroupListResultPage) Response() DedicatedHostGroupListResult { - return page.dhglr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DedicatedHostGroupListResultPage) Values() []DedicatedHostGroup { - if page.dhglr.IsEmpty() { - return nil - } - return *page.dhglr.Value -} - -// Creates a new instance of the DedicatedHostGroupListResultPage type. -func NewDedicatedHostGroupListResultPage(cur DedicatedHostGroupListResult, getNextPage func(context.Context, DedicatedHostGroupListResult) (DedicatedHostGroupListResult, error)) DedicatedHostGroupListResultPage { - return DedicatedHostGroupListResultPage{ - fn: getNextPage, - dhglr: cur, - } -} - -// DedicatedHostGroupProperties dedicated Host Group Properties. -type DedicatedHostGroupProperties struct { - // PlatformFaultDomainCount - Number of fault domains that the host group can span. - PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` - // Hosts - READ-ONLY; A list of references to all dedicated hosts in the dedicated host group. - Hosts *[]SubResourceReadOnly `json:"hosts,omitempty"` - // InstanceView - READ-ONLY; The dedicated host group instance view, which has the list of instance view of the dedicated hosts under the dedicated host group. - InstanceView *DedicatedHostGroupInstanceView `json:"instanceView,omitempty"` - // SupportAutomaticPlacement - Specifies whether virtual machines or virtual machine scale sets can be placed automatically on the dedicated host group. Automatic placement means resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host group. The value is defaulted to 'false' when not provided.

    Minimum api-version: 2020-06-01. - SupportAutomaticPlacement *bool `json:"supportAutomaticPlacement,omitempty"` - // AdditionalCapabilities - Enables or disables a capability on the dedicated host group.

    Minimum api-version: 2022-03-01. - AdditionalCapabilities *DedicatedHostGroupPropertiesAdditionalCapabilities `json:"additionalCapabilities,omitempty"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostGroupProperties. -func (dhgp DedicatedHostGroupProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhgp.PlatformFaultDomainCount != nil { - objectMap["platformFaultDomainCount"] = dhgp.PlatformFaultDomainCount - } - if dhgp.SupportAutomaticPlacement != nil { - objectMap["supportAutomaticPlacement"] = dhgp.SupportAutomaticPlacement - } - if dhgp.AdditionalCapabilities != nil { - objectMap["additionalCapabilities"] = dhgp.AdditionalCapabilities - } - return json.Marshal(objectMap) -} - -// DedicatedHostGroupPropertiesAdditionalCapabilities enables or disables a capability on the dedicated -// host group.

    Minimum api-version: 2022-03-01. -type DedicatedHostGroupPropertiesAdditionalCapabilities struct { - // UltraSSDEnabled - The flag that enables or disables a capability to have UltraSSD Enabled Virtual Machines on Dedicated Hosts of the Dedicated Host Group. For the Virtual Machines to be UltraSSD Enabled, UltraSSDEnabled flag for the resource needs to be set true as well. The value is defaulted to 'false' when not provided. Please refer to https://docs.microsoft.com/en-us/azure/virtual-machines/disks-enable-ultra-ssd for more details on Ultra SSD feature.

    NOTE: The ultraSSDEnabled setting can only be enabled for Host Groups that are created as zonal.

    Minimum api-version: 2022-03-01. - UltraSSDEnabled *bool `json:"ultraSSDEnabled,omitempty"` -} - -// DedicatedHostGroupUpdate specifies information about the dedicated host group that the dedicated host -// should be assigned to. Only tags may be updated. -type DedicatedHostGroupUpdate struct { - *DedicatedHostGroupProperties `json:"properties,omitempty"` - // Zones - Availability Zone to use for this host group. Only single zone is supported. The zone can be assigned only during creation. If not provided, the group supports all zones in the region. If provided, enforces each host in the group to be in the same zone. - Zones *[]string `json:"zones,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostGroupUpdate. -func (dhgu DedicatedHostGroupUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhgu.DedicatedHostGroupProperties != nil { - objectMap["properties"] = dhgu.DedicatedHostGroupProperties - } - if dhgu.Zones != nil { - objectMap["zones"] = dhgu.Zones - } - if dhgu.Tags != nil { - objectMap["tags"] = dhgu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DedicatedHostGroupUpdate struct. -func (dhgu *DedicatedHostGroupUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var dedicatedHostGroupProperties DedicatedHostGroupProperties - err = json.Unmarshal(*v, &dedicatedHostGroupProperties) - if err != nil { - return err - } - dhgu.DedicatedHostGroupProperties = &dedicatedHostGroupProperties - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - dhgu.Zones = &zones - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - dhgu.Tags = tags - } - } - } - - return nil -} - -// DedicatedHostInstanceView the instance view of a dedicated host. -type DedicatedHostInstanceView struct { - // AssetID - READ-ONLY; Specifies the unique id of the dedicated physical machine on which the dedicated host resides. - AssetID *string `json:"assetId,omitempty"` - // AvailableCapacity - Unutilized capacity of the dedicated host. - AvailableCapacity *DedicatedHostAvailableCapacity `json:"availableCapacity,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostInstanceView. -func (dhiv DedicatedHostInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhiv.AvailableCapacity != nil { - objectMap["availableCapacity"] = dhiv.AvailableCapacity - } - if dhiv.Statuses != nil { - objectMap["statuses"] = dhiv.Statuses - } - return json.Marshal(objectMap) -} - -// DedicatedHostInstanceViewWithName the instance view of a dedicated host that includes the name of the -// dedicated host. It is used for the response to the instance view of a dedicated host group. -type DedicatedHostInstanceViewWithName struct { - // Name - READ-ONLY; The name of the dedicated host. - Name *string `json:"name,omitempty"` - // AssetID - READ-ONLY; Specifies the unique id of the dedicated physical machine on which the dedicated host resides. - AssetID *string `json:"assetId,omitempty"` - // AvailableCapacity - Unutilized capacity of the dedicated host. - AvailableCapacity *DedicatedHostAvailableCapacity `json:"availableCapacity,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostInstanceViewWithName. -func (dhivwn DedicatedHostInstanceViewWithName) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhivwn.AvailableCapacity != nil { - objectMap["availableCapacity"] = dhivwn.AvailableCapacity - } - if dhivwn.Statuses != nil { - objectMap["statuses"] = dhivwn.Statuses - } - return json.Marshal(objectMap) -} - -// DedicatedHostListResult the list dedicated host operation response. -type DedicatedHostListResult struct { - autorest.Response `json:"-"` - // Value - The list of dedicated hosts - Value *[]DedicatedHost `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of dedicated hosts. Call ListNext() with this URI to fetch the next page of dedicated hosts. - NextLink *string `json:"nextLink,omitempty"` -} - -// DedicatedHostListResultIterator provides access to a complete listing of DedicatedHost values. -type DedicatedHostListResultIterator struct { - i int - page DedicatedHostListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DedicatedHostListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DedicatedHostListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DedicatedHostListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DedicatedHostListResultIterator) Response() DedicatedHostListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DedicatedHostListResultIterator) Value() DedicatedHost { - if !iter.page.NotDone() { - return DedicatedHost{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DedicatedHostListResultIterator type. -func NewDedicatedHostListResultIterator(page DedicatedHostListResultPage) DedicatedHostListResultIterator { - return DedicatedHostListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (dhlr DedicatedHostListResult) IsEmpty() bool { - return dhlr.Value == nil || len(*dhlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (dhlr DedicatedHostListResult) hasNextLink() bool { - return dhlr.NextLink != nil && len(*dhlr.NextLink) != 0 -} - -// dedicatedHostListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (dhlr DedicatedHostListResult) dedicatedHostListResultPreparer(ctx context.Context) (*http.Request, error) { - if !dhlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(dhlr.NextLink))) -} - -// DedicatedHostListResultPage contains a page of DedicatedHost values. -type DedicatedHostListResultPage struct { - fn func(context.Context, DedicatedHostListResult) (DedicatedHostListResult, error) - dhlr DedicatedHostListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DedicatedHostListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DedicatedHostListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.dhlr) - if err != nil { - return err - } - page.dhlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DedicatedHostListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DedicatedHostListResultPage) NotDone() bool { - return !page.dhlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DedicatedHostListResultPage) Response() DedicatedHostListResult { - return page.dhlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DedicatedHostListResultPage) Values() []DedicatedHost { - if page.dhlr.IsEmpty() { - return nil - } - return *page.dhlr.Value -} - -// Creates a new instance of the DedicatedHostListResultPage type. -func NewDedicatedHostListResultPage(cur DedicatedHostListResult, getNextPage func(context.Context, DedicatedHostListResult) (DedicatedHostListResult, error)) DedicatedHostListResultPage { - return DedicatedHostListResultPage{ - fn: getNextPage, - dhlr: cur, - } -} - -// DedicatedHostProperties properties of the dedicated host. -type DedicatedHostProperties struct { - // PlatformFaultDomain - Fault domain of the dedicated host within a dedicated host group. - PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` - // AutoReplaceOnFailure - Specifies whether the dedicated host should be replaced automatically in case of a failure. The value is defaulted to 'true' when not provided. - AutoReplaceOnFailure *bool `json:"autoReplaceOnFailure,omitempty"` - // HostID - READ-ONLY; A unique id generated and assigned to the dedicated host by the platform.

    Does not change throughout the lifetime of the host. - HostID *string `json:"hostId,omitempty"` - // VirtualMachines - READ-ONLY; A list of references to all virtual machines in the Dedicated Host. - VirtualMachines *[]SubResourceReadOnly `json:"virtualMachines,omitempty"` - // LicenseType - Specifies the software license type that will be applied to the VMs deployed on the dedicated host.

    Possible values are:

    **None**

    **Windows_Server_Hybrid**

    **Windows_Server_Perpetual**

    Default: **None**. Possible values include: 'DedicatedHostLicenseTypesNone', 'DedicatedHostLicenseTypesWindowsServerHybrid', 'DedicatedHostLicenseTypesWindowsServerPerpetual' - LicenseType DedicatedHostLicenseTypes `json:"licenseType,omitempty"` - // ProvisioningTime - READ-ONLY; The date when the host was first provisioned. - ProvisioningTime *date.Time `json:"provisioningTime,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // InstanceView - READ-ONLY; The dedicated host instance view. - InstanceView *DedicatedHostInstanceView `json:"instanceView,omitempty"` - // TimeCreated - READ-ONLY; Specifies the time at which the Dedicated Host resource was created.

    Minimum api-version: 2022-03-01. - TimeCreated *date.Time `json:"timeCreated,omitempty"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostProperties. -func (dhp DedicatedHostProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhp.PlatformFaultDomain != nil { - objectMap["platformFaultDomain"] = dhp.PlatformFaultDomain - } - if dhp.AutoReplaceOnFailure != nil { - objectMap["autoReplaceOnFailure"] = dhp.AutoReplaceOnFailure - } - if dhp.LicenseType != "" { - objectMap["licenseType"] = dhp.LicenseType - } - return json.Marshal(objectMap) -} - -// DedicatedHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DedicatedHostsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DedicatedHostsClient) (DedicatedHost, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DedicatedHostsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DedicatedHostsCreateOrUpdateFuture.Result. -func (future *DedicatedHostsCreateOrUpdateFuture) result(client DedicatedHostsClient) (dh DedicatedHost, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - dh.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if dh.Response.Response, err = future.GetResult(sender); err == nil && dh.Response.Response.StatusCode != http.StatusNoContent { - dh, err = client.CreateOrUpdateResponder(dh.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsCreateOrUpdateFuture", "Result", dh.Response.Response, "Failure responding to request") - } - } - return -} - -// DedicatedHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DedicatedHostsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DedicatedHostsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DedicatedHostsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DedicatedHostsDeleteFuture.Result. -func (future *DedicatedHostsDeleteFuture) result(client DedicatedHostsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// DedicatedHostsRestartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DedicatedHostsRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DedicatedHostsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DedicatedHostsRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DedicatedHostsRestartFuture.Result. -func (future *DedicatedHostsRestartFuture) result(client DedicatedHostsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// DedicatedHostsUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DedicatedHostsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DedicatedHostsClient) (DedicatedHost, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DedicatedHostsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DedicatedHostsUpdateFuture.Result. -func (future *DedicatedHostsUpdateFuture) result(client DedicatedHostsClient) (dh DedicatedHost, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - dh.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DedicatedHostsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if dh.Response.Response, err = future.GetResult(sender); err == nil && dh.Response.Response.StatusCode != http.StatusNoContent { - dh, err = client.UpdateResponder(dh.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DedicatedHostsUpdateFuture", "Result", dh.Response.Response, "Failure responding to request") - } - } - return -} - -// DedicatedHostUpdate specifies information about the dedicated host. Only tags, autoReplaceOnFailure and -// licenseType may be updated. -type DedicatedHostUpdate struct { - *DedicatedHostProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DedicatedHostUpdate. -func (dhu DedicatedHostUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dhu.DedicatedHostProperties != nil { - objectMap["properties"] = dhu.DedicatedHostProperties - } - if dhu.Tags != nil { - objectMap["tags"] = dhu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DedicatedHostUpdate struct. -func (dhu *DedicatedHostUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var dedicatedHostProperties DedicatedHostProperties - err = json.Unmarshal(*v, &dedicatedHostProperties) - if err != nil { - return err - } - dhu.DedicatedHostProperties = &dedicatedHostProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - dhu.Tags = tags - } - } - } - - return nil -} - -// DiagnosticsProfile specifies the boot diagnostic settings state.

    Minimum api-version: -// 2015-06-15. -type DiagnosticsProfile struct { - // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.
    **NOTE**: If storageUri is being specified then ensure that the storage account is in the same region and subscription as the VM.

    You can easily view the output of your console log.

    Azure also enables you to see a screenshot of the VM from the hypervisor. - BootDiagnostics *BootDiagnostics `json:"bootDiagnostics,omitempty"` -} - -// DiffDiskSettings describes the parameters of ephemeral disk settings that can be specified for operating -// system disk.

    NOTE: The ephemeral disk settings can only be specified for managed disk. -type DiffDiskSettings struct { - // Option - Specifies the ephemeral disk settings for operating system disk. Possible values include: 'Local' - Option DiffDiskOptions `json:"option,omitempty"` - // Placement - Specifies the ephemeral disk placement for operating system disk.

    Possible values are:

    **CacheDisk**

    **ResourceDisk**

    Default: **CacheDisk** if one is configured for the VM size otherwise **ResourceDisk** is used.

    Refer to VM size documentation for Windows VM at https://docs.microsoft.com/azure/virtual-machines/windows/sizes and Linux VM at https://docs.microsoft.com/azure/virtual-machines/linux/sizes to check which VM sizes exposes a cache disk. Possible values include: 'CacheDisk', 'ResourceDisk' - Placement DiffDiskPlacement `json:"placement,omitempty"` -} - -// Disallowed describes the disallowed disk types. -type Disallowed struct { - // DiskTypes - A list of disk types. - DiskTypes *[]string `json:"diskTypes,omitempty"` -} - -// DisallowedConfiguration specifies the disallowed configuration for a virtual machine image. -type DisallowedConfiguration struct { - // VMDiskType - VM disk types which are disallowed. Possible values include: 'VMDiskTypesNone', 'VMDiskTypesUnmanaged' - VMDiskType VMDiskTypes `json:"vmDiskType,omitempty"` -} - -// Disk disk resource. -type Disk struct { - autorest.Response `json:"-"` - // ManagedBy - READ-ONLY; A relative URI containing the ID of the VM that has the disk attached. - ManagedBy *string `json:"managedBy,omitempty"` - // ManagedByExtended - READ-ONLY; List of relative URIs containing the IDs of the VMs that have the disk attached. maxShares should be set to a value greater than one for disks to allow attaching them to multiple VMs. - ManagedByExtended *[]string `json:"managedByExtended,omitempty"` - Sku *DiskSku `json:"sku,omitempty"` - // Zones - The Logical zone list for Disk. - Zones *[]string `json:"zones,omitempty"` - // ExtendedLocation - The extended location where the disk will be created. Extended location cannot be changed. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - *DiskProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Disk. -func (d Disk) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if d.Sku != nil { - objectMap["sku"] = d.Sku - } - if d.Zones != nil { - objectMap["zones"] = d.Zones - } - if d.ExtendedLocation != nil { - objectMap["extendedLocation"] = d.ExtendedLocation - } - if d.DiskProperties != nil { - objectMap["properties"] = d.DiskProperties - } - if d.Location != nil { - objectMap["location"] = d.Location - } - if d.Tags != nil { - objectMap["tags"] = d.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Disk struct. -func (d *Disk) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "managedBy": - if v != nil { - var managedBy string - err = json.Unmarshal(*v, &managedBy) - if err != nil { - return err - } - d.ManagedBy = &managedBy - } - case "managedByExtended": - if v != nil { - var managedByExtended []string - err = json.Unmarshal(*v, &managedByExtended) - if err != nil { - return err - } - d.ManagedByExtended = &managedByExtended - } - case "sku": - if v != nil { - var sku DiskSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - d.Sku = &sku - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - d.Zones = &zones - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - d.ExtendedLocation = &extendedLocation - } - case "properties": - if v != nil { - var diskProperties DiskProperties - err = json.Unmarshal(*v, &diskProperties) - if err != nil { - return err - } - d.DiskProperties = &diskProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - d.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - d.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - d.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - d.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - d.Tags = tags - } - } - } - - return nil -} - -// DiskAccess disk access resource. -type DiskAccess struct { - autorest.Response `json:"-"` - *DiskAccessProperties `json:"properties,omitempty"` - // ExtendedLocation - The extended location where the disk access will be created. Extended location cannot be changed. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DiskAccess. -func (da DiskAccess) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if da.DiskAccessProperties != nil { - objectMap["properties"] = da.DiskAccessProperties - } - if da.ExtendedLocation != nil { - objectMap["extendedLocation"] = da.ExtendedLocation - } - if da.Location != nil { - objectMap["location"] = da.Location - } - if da.Tags != nil { - objectMap["tags"] = da.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DiskAccess struct. -func (da *DiskAccess) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var diskAccessProperties DiskAccessProperties - err = json.Unmarshal(*v, &diskAccessProperties) - if err != nil { - return err - } - da.DiskAccessProperties = &diskAccessProperties - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - da.ExtendedLocation = &extendedLocation - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - da.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - da.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - da.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - da.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - da.Tags = tags - } - } - } - - return nil -} - -// DiskAccessesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskAccessesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskAccessesClient) (DiskAccess, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskAccessesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskAccessesCreateOrUpdateFuture.Result. -func (future *DiskAccessesCreateOrUpdateFuture) result(client DiskAccessesClient) (da DiskAccess, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - da.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if da.Response.Response, err = future.GetResult(sender); err == nil && da.Response.Response.StatusCode != http.StatusNoContent { - da, err = client.CreateOrUpdateResponder(da.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesCreateOrUpdateFuture", "Result", da.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskAccessesDeleteAPrivateEndpointConnectionFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type DiskAccessesDeleteAPrivateEndpointConnectionFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskAccessesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskAccessesDeleteAPrivateEndpointConnectionFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskAccessesDeleteAPrivateEndpointConnectionFuture.Result. -func (future *DiskAccessesDeleteAPrivateEndpointConnectionFuture) result(client DiskAccessesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesDeleteAPrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesDeleteAPrivateEndpointConnectionFuture") - return - } - ar.Response = future.Response() - return -} - -// DiskAccessesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DiskAccessesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskAccessesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskAccessesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskAccessesDeleteFuture.Result. -func (future *DiskAccessesDeleteFuture) result(client DiskAccessesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// DiskAccessesUpdateAPrivateEndpointConnectionFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type DiskAccessesUpdateAPrivateEndpointConnectionFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskAccessesClient) (PrivateEndpointConnection, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskAccessesUpdateAPrivateEndpointConnectionFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskAccessesUpdateAPrivateEndpointConnectionFuture.Result. -func (future *DiskAccessesUpdateAPrivateEndpointConnectionFuture) result(client DiskAccessesClient) (pec PrivateEndpointConnection, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - pec.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if pec.Response.Response, err = future.GetResult(sender); err == nil && pec.Response.Response.StatusCode != http.StatusNoContent { - pec, err = client.UpdateAPrivateEndpointConnectionResponder(pec.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateAPrivateEndpointConnectionFuture", "Result", pec.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskAccessesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DiskAccessesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskAccessesClient) (DiskAccess, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskAccessesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskAccessesUpdateFuture.Result. -func (future *DiskAccessesUpdateFuture) result(client DiskAccessesClient) (da DiskAccess, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - da.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskAccessesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if da.Response.Response, err = future.GetResult(sender); err == nil && da.Response.Response.StatusCode != http.StatusNoContent { - da, err = client.UpdateResponder(da.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskAccessesUpdateFuture", "Result", da.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskAccessList the List disk access operation response. -type DiskAccessList struct { - autorest.Response `json:"-"` - // Value - A list of disk access resources. - Value *[]DiskAccess `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of disk access resources. Call ListNext() with this to fetch the next page of disk access resources. - NextLink *string `json:"nextLink,omitempty"` -} - -// DiskAccessListIterator provides access to a complete listing of DiskAccess values. -type DiskAccessListIterator struct { - i int - page DiskAccessListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DiskAccessListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DiskAccessListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DiskAccessListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DiskAccessListIterator) Response() DiskAccessList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DiskAccessListIterator) Value() DiskAccess { - if !iter.page.NotDone() { - return DiskAccess{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DiskAccessListIterator type. -func NewDiskAccessListIterator(page DiskAccessListPage) DiskAccessListIterator { - return DiskAccessListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (dal DiskAccessList) IsEmpty() bool { - return dal.Value == nil || len(*dal.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (dal DiskAccessList) hasNextLink() bool { - return dal.NextLink != nil && len(*dal.NextLink) != 0 -} - -// diskAccessListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (dal DiskAccessList) diskAccessListPreparer(ctx context.Context) (*http.Request, error) { - if !dal.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(dal.NextLink))) -} - -// DiskAccessListPage contains a page of DiskAccess values. -type DiskAccessListPage struct { - fn func(context.Context, DiskAccessList) (DiskAccessList, error) - dal DiskAccessList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DiskAccessListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskAccessListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.dal) - if err != nil { - return err - } - page.dal = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DiskAccessListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DiskAccessListPage) NotDone() bool { - return !page.dal.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DiskAccessListPage) Response() DiskAccessList { - return page.dal -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DiskAccessListPage) Values() []DiskAccess { - if page.dal.IsEmpty() { - return nil - } - return *page.dal.Value -} - -// Creates a new instance of the DiskAccessListPage type. -func NewDiskAccessListPage(cur DiskAccessList, getNextPage func(context.Context, DiskAccessList) (DiskAccessList, error)) DiskAccessListPage { - return DiskAccessListPage{ - fn: getNextPage, - dal: cur, - } -} - -// DiskAccessProperties ... -type DiskAccessProperties struct { - // PrivateEndpointConnections - READ-ONLY; A readonly collection of private endpoint connections created on the disk. Currently only one endpoint connection is supported. - PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"` - // ProvisioningState - READ-ONLY; The disk access resource provisioning state. - ProvisioningState *string `json:"provisioningState,omitempty"` - // TimeCreated - READ-ONLY; The time when the disk access was created. - TimeCreated *date.Time `json:"timeCreated,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskAccessProperties. -func (dap DiskAccessProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// DiskAccessUpdate used for updating a disk access resource. -type DiskAccessUpdate struct { - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DiskAccessUpdate. -func (dau DiskAccessUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dau.Tags != nil { - objectMap["tags"] = dau.Tags - } - return json.Marshal(objectMap) -} - -// DiskEncryptionSet disk encryption set resource. -type DiskEncryptionSet struct { - autorest.Response `json:"-"` - Identity *EncryptionSetIdentity `json:"identity,omitempty"` - *EncryptionSetProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for DiskEncryptionSet. -func (desVar DiskEncryptionSet) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if desVar.Identity != nil { - objectMap["identity"] = desVar.Identity - } - if desVar.EncryptionSetProperties != nil { - objectMap["properties"] = desVar.EncryptionSetProperties - } - if desVar.Location != nil { - objectMap["location"] = desVar.Location - } - if desVar.Tags != nil { - objectMap["tags"] = desVar.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DiskEncryptionSet struct. -func (desVar *DiskEncryptionSet) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "identity": - if v != nil { - var identity EncryptionSetIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - desVar.Identity = &identity - } - case "properties": - if v != nil { - var encryptionSetProperties EncryptionSetProperties - err = json.Unmarshal(*v, &encryptionSetProperties) - if err != nil { - return err - } - desVar.EncryptionSetProperties = &encryptionSetProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - desVar.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - desVar.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - desVar.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - desVar.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - desVar.Tags = tags - } - } - } - - return nil -} - -// DiskEncryptionSetList the List disk encryption set operation response. -type DiskEncryptionSetList struct { - autorest.Response `json:"-"` - // Value - A list of disk encryption sets. - Value *[]DiskEncryptionSet `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of disk encryption sets. Call ListNext() with this to fetch the next page of disk encryption sets. - NextLink *string `json:"nextLink,omitempty"` -} - -// DiskEncryptionSetListIterator provides access to a complete listing of DiskEncryptionSet values. -type DiskEncryptionSetListIterator struct { - i int - page DiskEncryptionSetListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DiskEncryptionSetListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DiskEncryptionSetListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DiskEncryptionSetListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DiskEncryptionSetListIterator) Response() DiskEncryptionSetList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DiskEncryptionSetListIterator) Value() DiskEncryptionSet { - if !iter.page.NotDone() { - return DiskEncryptionSet{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DiskEncryptionSetListIterator type. -func NewDiskEncryptionSetListIterator(page DiskEncryptionSetListPage) DiskEncryptionSetListIterator { - return DiskEncryptionSetListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (desl DiskEncryptionSetList) IsEmpty() bool { - return desl.Value == nil || len(*desl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (desl DiskEncryptionSetList) hasNextLink() bool { - return desl.NextLink != nil && len(*desl.NextLink) != 0 -} - -// diskEncryptionSetListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (desl DiskEncryptionSetList) diskEncryptionSetListPreparer(ctx context.Context) (*http.Request, error) { - if !desl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(desl.NextLink))) -} - -// DiskEncryptionSetListPage contains a page of DiskEncryptionSet values. -type DiskEncryptionSetListPage struct { - fn func(context.Context, DiskEncryptionSetList) (DiskEncryptionSetList, error) - desl DiskEncryptionSetList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DiskEncryptionSetListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskEncryptionSetListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.desl) - if err != nil { - return err - } - page.desl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DiskEncryptionSetListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DiskEncryptionSetListPage) NotDone() bool { - return !page.desl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DiskEncryptionSetListPage) Response() DiskEncryptionSetList { - return page.desl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DiskEncryptionSetListPage) Values() []DiskEncryptionSet { - if page.desl.IsEmpty() { - return nil - } - return *page.desl.Value -} - -// Creates a new instance of the DiskEncryptionSetListPage type. -func NewDiskEncryptionSetListPage(cur DiskEncryptionSetList, getNextPage func(context.Context, DiskEncryptionSetList) (DiskEncryptionSetList, error)) DiskEncryptionSetListPage { - return DiskEncryptionSetListPage{ - fn: getNextPage, - desl: cur, - } -} - -// DiskEncryptionSetParameters describes the parameter of customer managed disk encryption set resource id -// that can be specified for disk.

    NOTE: The disk encryption set resource id can only be specified -// for managed disk. Please refer https://aka.ms/mdssewithcmkoverview for more details. -type DiskEncryptionSetParameters struct { - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// DiskEncryptionSetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskEncryptionSetsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskEncryptionSetsClient) (DiskEncryptionSet, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskEncryptionSetsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskEncryptionSetsCreateOrUpdateFuture.Result. -func (future *DiskEncryptionSetsCreateOrUpdateFuture) result(client DiskEncryptionSetsClient) (desVar DiskEncryptionSet, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - desVar.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if desVar.Response.Response, err = future.GetResult(sender); err == nil && desVar.Response.Response.StatusCode != http.StatusNoContent { - desVar, err = client.CreateOrUpdateResponder(desVar.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsCreateOrUpdateFuture", "Result", desVar.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskEncryptionSetsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskEncryptionSetsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskEncryptionSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskEncryptionSetsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskEncryptionSetsDeleteFuture.Result. -func (future *DiskEncryptionSetsDeleteFuture) result(client DiskEncryptionSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// DiskEncryptionSetsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskEncryptionSetsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskEncryptionSetsClient) (DiskEncryptionSet, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskEncryptionSetsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskEncryptionSetsUpdateFuture.Result. -func (future *DiskEncryptionSetsUpdateFuture) result(client DiskEncryptionSetsClient) (desVar DiskEncryptionSet, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - desVar.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskEncryptionSetsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if desVar.Response.Response, err = future.GetResult(sender); err == nil && desVar.Response.Response.StatusCode != http.StatusNoContent { - desVar, err = client.UpdateResponder(desVar.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskEncryptionSetsUpdateFuture", "Result", desVar.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskEncryptionSettings describes a Encryption Settings for a Disk -type DiskEncryptionSettings struct { - // DiskEncryptionKey - Specifies the location of the disk encryption key, which is a Key Vault Secret. - DiskEncryptionKey *KeyVaultSecretReference `json:"diskEncryptionKey,omitempty"` - // KeyEncryptionKey - Specifies the location of the key encryption key in Key Vault. - KeyEncryptionKey *KeyVaultKeyReference `json:"keyEncryptionKey,omitempty"` - // Enabled - Specifies whether disk encryption should be enabled on the virtual machine. - Enabled *bool `json:"enabled,omitempty"` -} - -// DiskEncryptionSetUpdate disk encryption set update resource. -type DiskEncryptionSetUpdate struct { - *DiskEncryptionSetUpdateProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` - Identity *EncryptionSetIdentity `json:"identity,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskEncryptionSetUpdate. -func (desu DiskEncryptionSetUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if desu.DiskEncryptionSetUpdateProperties != nil { - objectMap["properties"] = desu.DiskEncryptionSetUpdateProperties - } - if desu.Tags != nil { - objectMap["tags"] = desu.Tags - } - if desu.Identity != nil { - objectMap["identity"] = desu.Identity - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DiskEncryptionSetUpdate struct. -func (desu *DiskEncryptionSetUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var diskEncryptionSetUpdateProperties DiskEncryptionSetUpdateProperties - err = json.Unmarshal(*v, &diskEncryptionSetUpdateProperties) - if err != nil { - return err - } - desu.DiskEncryptionSetUpdateProperties = &diskEncryptionSetUpdateProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - desu.Tags = tags - } - case "identity": - if v != nil { - var identity EncryptionSetIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - desu.Identity = &identity - } - } - } - - return nil -} - -// DiskEncryptionSetUpdateProperties disk encryption set resource update properties. -type DiskEncryptionSetUpdateProperties struct { - // EncryptionType - Possible values include: 'EncryptionAtRestWithCustomerKey', 'EncryptionAtRestWithPlatformAndCustomerKeys', 'ConfidentialVMEncryptedWithCustomerKey' - EncryptionType DiskEncryptionSetType `json:"encryptionType,omitempty"` - ActiveKey *KeyForDiskEncryptionSet `json:"activeKey,omitempty"` - // RotationToLatestKeyVersionEnabled - Set this flag to true to enable auto-updating of this disk encryption set to the latest key version. - RotationToLatestKeyVersionEnabled *bool `json:"rotationToLatestKeyVersionEnabled,omitempty"` -} - -// DiskImageEncryption this is the disk image encryption base class. -type DiskImageEncryption struct { - // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. - DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` -} - -// DiskInstanceView the instance view of the disk. -type DiskInstanceView struct { - // Name - The disk name. - Name *string `json:"name,omitempty"` - // EncryptionSettings - Specifies the encryption settings for the OS Disk.

    Minimum api-version: 2015-06-15 - EncryptionSettings *[]DiskEncryptionSettings `json:"encryptionSettings,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// DiskList the List Disks operation response. -type DiskList struct { - autorest.Response `json:"-"` - // Value - A list of disks. - Value *[]Disk `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of disks. Call ListNext() with this to fetch the next page of disks. - NextLink *string `json:"nextLink,omitempty"` -} - -// DiskListIterator provides access to a complete listing of Disk values. -type DiskListIterator struct { - i int - page DiskListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DiskListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DiskListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DiskListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DiskListIterator) Response() DiskList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DiskListIterator) Value() Disk { - if !iter.page.NotDone() { - return Disk{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DiskListIterator type. -func NewDiskListIterator(page DiskListPage) DiskListIterator { - return DiskListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (dl DiskList) IsEmpty() bool { - return dl.Value == nil || len(*dl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (dl DiskList) hasNextLink() bool { - return dl.NextLink != nil && len(*dl.NextLink) != 0 -} - -// diskListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (dl DiskList) diskListPreparer(ctx context.Context) (*http.Request, error) { - if !dl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(dl.NextLink))) -} - -// DiskListPage contains a page of Disk values. -type DiskListPage struct { - fn func(context.Context, DiskList) (DiskList, error) - dl DiskList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DiskListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.dl) - if err != nil { - return err - } - page.dl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DiskListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DiskListPage) NotDone() bool { - return !page.dl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DiskListPage) Response() DiskList { - return page.dl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DiskListPage) Values() []Disk { - if page.dl.IsEmpty() { - return nil - } - return *page.dl.Value -} - -// Creates a new instance of the DiskListPage type. -func NewDiskListPage(cur DiskList, getNextPage func(context.Context, DiskList) (DiskList, error)) DiskListPage { - return DiskListPage{ - fn: getNextPage, - dl: cur, - } -} - -// DiskProperties disk resource properties. -type DiskProperties struct { - // TimeCreated - READ-ONLY; The time when the disk was created. - TimeCreated *date.Time `json:"timeCreated,omitempty"` - // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // PurchasePlan - Purchase plan information for the the image from which the OS disk was created. E.g. - {name: 2019-Datacenter, publisher: MicrosoftWindowsServer, product: WindowsServer} - PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` - // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. - SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` - // CreationData - Disk source information. CreationData information cannot be changed after the disk has been created. - CreationData *CreationData `json:"creationData,omitempty"` - // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // DiskSizeBytes - READ-ONLY; The size of the disk in bytes. This field is read only. - DiskSizeBytes *int64 `json:"diskSizeBytes,omitempty"` - // UniqueID - READ-ONLY; Unique Guid identifying the resource. - UniqueID *string `json:"uniqueId,omitempty"` - // EncryptionSettingsCollection - Encryption settings collection used for Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. - EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` - // ProvisioningState - READ-ONLY; The disk provisioning state. - ProvisioningState *string `json:"provisioningState,omitempty"` - // DiskIOPSReadWrite - The number of IOPS allowed for this disk; only settable for UltraSSD disks. One operation can transfer between 4k and 256k bytes. - DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` - // DiskMBpsReadWrite - The bandwidth allowed for this disk; only settable for UltraSSD disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. - DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` - // DiskIOPSReadOnly - The total number of IOPS that will be allowed across all VMs mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes. - DiskIOPSReadOnly *int64 `json:"diskIOPSReadOnly,omitempty"` - // DiskMBpsReadOnly - The total throughput (MBps) that will be allowed across all VMs mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. - DiskMBpsReadOnly *int64 `json:"diskMBpsReadOnly,omitempty"` - // DiskState - The state of the disk. Possible values include: 'Unattached', 'Attached', 'Reserved', 'Frozen', 'ActiveSAS', 'ActiveSASFrozen', 'ReadyToUpload', 'ActiveUpload' - DiskState DiskState `json:"diskState,omitempty"` - // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. - Encryption *Encryption `json:"encryption,omitempty"` - // MaxShares - The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a disk that can be mounted on multiple VMs at the same time. - MaxShares *int32 `json:"maxShares,omitempty"` - // ShareInfo - READ-ONLY; Details of the list of all VMs that have the disk attached. maxShares should be set to a value greater than one for disks to allow attaching them to multiple VMs. - ShareInfo *[]ShareInfoElement `json:"shareInfo,omitempty"` - // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' - NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` - // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. - DiskAccessID *string `json:"diskAccessId,omitempty"` - // Tier - Performance tier of the disk (e.g, P4, S10) as described here: https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra disks. - Tier *string `json:"tier,omitempty"` - // BurstingEnabled - Set to true to enable bursting beyond the provisioned performance target of the disk. Bursting is disabled by default. Does not apply to Ultra disks. - BurstingEnabled *bool `json:"burstingEnabled,omitempty"` - // PropertyUpdatesInProgress - READ-ONLY; Properties of the disk for which update is pending. - PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` - // SupportsHibernation - Indicates the OS on a disk supports hibernation. - SupportsHibernation *bool `json:"supportsHibernation,omitempty"` - // SecurityProfile - Contains the security related information for the resource. - SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"` - // CompletionPercent - Percentage complete for the background copy when a resource is created via the CopyStart operation. - CompletionPercent *float64 `json:"completionPercent,omitempty"` - // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' - PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` - // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' - DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskProperties. -func (dp DiskProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dp.OsType != "" { - objectMap["osType"] = dp.OsType - } - if dp.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = dp.HyperVGeneration - } - if dp.PurchasePlan != nil { - objectMap["purchasePlan"] = dp.PurchasePlan - } - if dp.SupportedCapabilities != nil { - objectMap["supportedCapabilities"] = dp.SupportedCapabilities - } - if dp.CreationData != nil { - objectMap["creationData"] = dp.CreationData - } - if dp.DiskSizeGB != nil { - objectMap["diskSizeGB"] = dp.DiskSizeGB - } - if dp.EncryptionSettingsCollection != nil { - objectMap["encryptionSettingsCollection"] = dp.EncryptionSettingsCollection - } - if dp.DiskIOPSReadWrite != nil { - objectMap["diskIOPSReadWrite"] = dp.DiskIOPSReadWrite - } - if dp.DiskMBpsReadWrite != nil { - objectMap["diskMBpsReadWrite"] = dp.DiskMBpsReadWrite - } - if dp.DiskIOPSReadOnly != nil { - objectMap["diskIOPSReadOnly"] = dp.DiskIOPSReadOnly - } - if dp.DiskMBpsReadOnly != nil { - objectMap["diskMBpsReadOnly"] = dp.DiskMBpsReadOnly - } - if dp.DiskState != "" { - objectMap["diskState"] = dp.DiskState - } - if dp.Encryption != nil { - objectMap["encryption"] = dp.Encryption - } - if dp.MaxShares != nil { - objectMap["maxShares"] = dp.MaxShares - } - if dp.NetworkAccessPolicy != "" { - objectMap["networkAccessPolicy"] = dp.NetworkAccessPolicy - } - if dp.DiskAccessID != nil { - objectMap["diskAccessId"] = dp.DiskAccessID - } - if dp.Tier != nil { - objectMap["tier"] = dp.Tier - } - if dp.BurstingEnabled != nil { - objectMap["burstingEnabled"] = dp.BurstingEnabled - } - if dp.SupportsHibernation != nil { - objectMap["supportsHibernation"] = dp.SupportsHibernation - } - if dp.SecurityProfile != nil { - objectMap["securityProfile"] = dp.SecurityProfile - } - if dp.CompletionPercent != nil { - objectMap["completionPercent"] = dp.CompletionPercent - } - if dp.PublicNetworkAccess != "" { - objectMap["publicNetworkAccess"] = dp.PublicNetworkAccess - } - if dp.DataAccessAuthMode != "" { - objectMap["dataAccessAuthMode"] = dp.DataAccessAuthMode - } - return json.Marshal(objectMap) -} - -// DiskRestorePoint properties of disk restore point -type DiskRestorePoint struct { - autorest.Response `json:"-"` - *DiskRestorePointProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskRestorePoint. -func (drp DiskRestorePoint) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if drp.DiskRestorePointProperties != nil { - objectMap["properties"] = drp.DiskRestorePointProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DiskRestorePoint struct. -func (drp *DiskRestorePoint) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var diskRestorePointProperties DiskRestorePointProperties - err = json.Unmarshal(*v, &diskRestorePointProperties) - if err != nil { - return err - } - drp.DiskRestorePointProperties = &diskRestorePointProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - drp.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - drp.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - drp.Type = &typeVar - } - } - } - - return nil -} - -// DiskRestorePointGrantAccessFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskRestorePointGrantAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskRestorePointClient) (AccessURI, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskRestorePointGrantAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskRestorePointGrantAccessFuture.Result. -func (future *DiskRestorePointGrantAccessFuture) result(client DiskRestorePointClient) (au AccessURI, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointGrantAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - au.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskRestorePointGrantAccessFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { - au, err = client.GrantAccessResponder(au.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskRestorePointInstanceView the instance view of a disk restore point. -type DiskRestorePointInstanceView struct { - // ID - Disk restore point Id. - ID *string `json:"id,omitempty"` - // ReplicationStatus - The disk restore point replication status information. - ReplicationStatus *DiskRestorePointReplicationStatus `json:"replicationStatus,omitempty"` -} - -// DiskRestorePointList the List Disk Restore Points operation response. -type DiskRestorePointList struct { - autorest.Response `json:"-"` - // Value - A list of disk restore points. - Value *[]DiskRestorePoint `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of disk restore points. Call ListNext() with this to fetch the next page of disk restore points. - NextLink *string `json:"nextLink,omitempty"` -} - -// DiskRestorePointListIterator provides access to a complete listing of DiskRestorePoint values. -type DiskRestorePointListIterator struct { - i int - page DiskRestorePointListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *DiskRestorePointListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *DiskRestorePointListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter DiskRestorePointListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter DiskRestorePointListIterator) Response() DiskRestorePointList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter DiskRestorePointListIterator) Value() DiskRestorePoint { - if !iter.page.NotDone() { - return DiskRestorePoint{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the DiskRestorePointListIterator type. -func NewDiskRestorePointListIterator(page DiskRestorePointListPage) DiskRestorePointListIterator { - return DiskRestorePointListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (drpl DiskRestorePointList) IsEmpty() bool { - return drpl.Value == nil || len(*drpl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (drpl DiskRestorePointList) hasNextLink() bool { - return drpl.NextLink != nil && len(*drpl.NextLink) != 0 -} - -// diskRestorePointListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (drpl DiskRestorePointList) diskRestorePointListPreparer(ctx context.Context) (*http.Request, error) { - if !drpl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(drpl.NextLink))) -} - -// DiskRestorePointListPage contains a page of DiskRestorePoint values. -type DiskRestorePointListPage struct { - fn func(context.Context, DiskRestorePointList) (DiskRestorePointList, error) - drpl DiskRestorePointList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *DiskRestorePointListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/DiskRestorePointListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.drpl) - if err != nil { - return err - } - page.drpl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *DiskRestorePointListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page DiskRestorePointListPage) NotDone() bool { - return !page.drpl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page DiskRestorePointListPage) Response() DiskRestorePointList { - return page.drpl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page DiskRestorePointListPage) Values() []DiskRestorePoint { - if page.drpl.IsEmpty() { - return nil - } - return *page.drpl.Value -} - -// Creates a new instance of the DiskRestorePointListPage type. -func NewDiskRestorePointListPage(cur DiskRestorePointList, getNextPage func(context.Context, DiskRestorePointList) (DiskRestorePointList, error)) DiskRestorePointListPage { - return DiskRestorePointListPage{ - fn: getNextPage, - drpl: cur, - } -} - -// DiskRestorePointProperties properties of an incremental disk restore point -type DiskRestorePointProperties struct { - // TimeCreated - READ-ONLY; The timestamp of restorePoint creation - TimeCreated *date.Time `json:"timeCreated,omitempty"` - // SourceResourceID - READ-ONLY; arm id of source disk or source disk restore point. - SourceResourceID *string `json:"sourceResourceId,omitempty"` - // OsType - READ-ONLY; The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // PurchasePlan - Purchase plan information for the the image from which the OS disk was created. - PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` - // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. - SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` - // FamilyID - READ-ONLY; id of the backing snapshot's MIS family - FamilyID *string `json:"familyId,omitempty"` - // SourceUniqueID - READ-ONLY; unique incarnation id of the source disk - SourceUniqueID *string `json:"sourceUniqueId,omitempty"` - // Encryption - READ-ONLY; Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. - Encryption *Encryption `json:"encryption,omitempty"` - // SupportsHibernation - Indicates the OS on a disk supports hibernation. - SupportsHibernation *bool `json:"supportsHibernation,omitempty"` - // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' - NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` - // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' - PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` - // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. - DiskAccessID *string `json:"diskAccessId,omitempty"` - // CompletionPercent - Percentage complete for the background copy of disk restore point when source resource is from a different region. - CompletionPercent *float64 `json:"completionPercent,omitempty"` - // ReplicationState - READ-ONLY; Replication state of disk restore point when source resource is from a different region. - ReplicationState *string `json:"replicationState,omitempty"` - // SourceResourceLocation - READ-ONLY; Location of source disk or source disk restore point when source resource is from a different region. - SourceResourceLocation *string `json:"sourceResourceLocation,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskRestorePointProperties. -func (drpp DiskRestorePointProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if drpp.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = drpp.HyperVGeneration - } - if drpp.PurchasePlan != nil { - objectMap["purchasePlan"] = drpp.PurchasePlan - } - if drpp.SupportedCapabilities != nil { - objectMap["supportedCapabilities"] = drpp.SupportedCapabilities - } - if drpp.SupportsHibernation != nil { - objectMap["supportsHibernation"] = drpp.SupportsHibernation - } - if drpp.NetworkAccessPolicy != "" { - objectMap["networkAccessPolicy"] = drpp.NetworkAccessPolicy - } - if drpp.PublicNetworkAccess != "" { - objectMap["publicNetworkAccess"] = drpp.PublicNetworkAccess - } - if drpp.DiskAccessID != nil { - objectMap["diskAccessId"] = drpp.DiskAccessID - } - if drpp.CompletionPercent != nil { - objectMap["completionPercent"] = drpp.CompletionPercent - } - return json.Marshal(objectMap) -} - -// DiskRestorePointReplicationStatus the instance view of a disk restore point. -type DiskRestorePointReplicationStatus struct { - // Status - The resource status information. - Status *InstanceViewStatus `json:"status,omitempty"` - // CompletionPercent - Replication completion percentage. - CompletionPercent *int32 `json:"completionPercent,omitempty"` -} - -// DiskRestorePointRevokeAccessFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type DiskRestorePointRevokeAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DiskRestorePointClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DiskRestorePointRevokeAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DiskRestorePointRevokeAccessFuture.Result. -func (future *DiskRestorePointRevokeAccessFuture) result(client DiskRestorePointClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DiskRestorePointRevokeAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DiskRestorePointRevokeAccessFuture") - return - } - ar.Response = future.Response() - return -} - -// DisksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DisksCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DisksClient) (Disk, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DisksCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DisksCreateOrUpdateFuture.Result. -func (future *DisksCreateOrUpdateFuture) result(client DisksClient) (d Disk, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - d.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DisksCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if d.Response.Response, err = future.GetResult(sender); err == nil && d.Response.Response.StatusCode != http.StatusNoContent { - d, err = client.CreateOrUpdateResponder(d.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksCreateOrUpdateFuture", "Result", d.Response.Response, "Failure responding to request") - } - } - return -} - -// DisksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. -type DisksDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DisksClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DisksDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DisksDeleteFuture.Result. -func (future *DisksDeleteFuture) result(client DisksClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DisksDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// DiskSecurityProfile contains the security related information for the resource. -type DiskSecurityProfile struct { - // SecurityType - Possible values include: 'TrustedLaunch', 'ConfidentialVMVMGuestStateOnlyEncryptedWithPlatformKey', 'ConfidentialVMDiskEncryptedWithPlatformKey', 'ConfidentialVMDiskEncryptedWithCustomerKey' - SecurityType DiskSecurityTypes `json:"securityType,omitempty"` - // SecureVMDiskEncryptionSetID - ResourceId of the disk encryption set associated to Confidential VM supported disk encrypted with customer managed key - SecureVMDiskEncryptionSetID *string `json:"secureVMDiskEncryptionSetId,omitempty"` -} - -// DisksGrantAccessFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DisksGrantAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DisksClient) (AccessURI, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DisksGrantAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DisksGrantAccessFuture.Result. -func (future *DisksGrantAccessFuture) result(client DisksClient) (au AccessURI, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksGrantAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - au.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DisksGrantAccessFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { - au, err = client.GrantAccessResponder(au.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskSku the disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, -// Premium_ZRS, or StandardSSD_ZRS. -type DiskSku struct { - // Name - The sku name. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS', 'UltraSSDLRS', 'PremiumZRS', 'StandardSSDZRS' - Name DiskStorageAccountTypes `json:"name,omitempty"` - // Tier - READ-ONLY; The sku tier. - Tier *string `json:"tier,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskSku. -func (ds DiskSku) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ds.Name != "" { - objectMap["name"] = ds.Name - } - return json.Marshal(objectMap) -} - -// DisksRevokeAccessFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type DisksRevokeAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DisksClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DisksRevokeAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DisksRevokeAccessFuture.Result. -func (future *DisksRevokeAccessFuture) result(client DisksClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksRevokeAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DisksRevokeAccessFuture") - return - } - ar.Response = future.Response() - return -} - -// DisksUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation. -type DisksUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(DisksClient) (Disk, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *DisksUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for DisksUpdateFuture.Result. -func (future *DisksUpdateFuture) result(client DisksClient) (d Disk, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - d.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.DisksUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if d.Response.Response, err = future.GetResult(sender); err == nil && d.Response.Response.StatusCode != http.StatusNoContent { - d, err = client.UpdateResponder(d.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.DisksUpdateFuture", "Result", d.Response.Response, "Failure responding to request") - } - } - return -} - -// DiskUpdate disk update resource. -type DiskUpdate struct { - *DiskUpdateProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` - Sku *DiskSku `json:"sku,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskUpdate. -func (du DiskUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if du.DiskUpdateProperties != nil { - objectMap["properties"] = du.DiskUpdateProperties - } - if du.Tags != nil { - objectMap["tags"] = du.Tags - } - if du.Sku != nil { - objectMap["sku"] = du.Sku - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for DiskUpdate struct. -func (du *DiskUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var diskUpdateProperties DiskUpdateProperties - err = json.Unmarshal(*v, &diskUpdateProperties) - if err != nil { - return err - } - du.DiskUpdateProperties = &diskUpdateProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - du.Tags = tags - } - case "sku": - if v != nil { - var sku DiskSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - du.Sku = &sku - } - } - } - - return nil -} - -// DiskUpdateProperties disk resource update properties. -type DiskUpdateProperties struct { - // OsType - the Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. - EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` - // DiskIOPSReadWrite - The number of IOPS allowed for this disk; only settable for UltraSSD disks. One operation can transfer between 4k and 256k bytes. - DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` - // DiskMBpsReadWrite - The bandwidth allowed for this disk; only settable for UltraSSD disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. - DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` - // DiskIOPSReadOnly - The total number of IOPS that will be allowed across all VMs mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes. - DiskIOPSReadOnly *int64 `json:"diskIOPSReadOnly,omitempty"` - // DiskMBpsReadOnly - The total throughput (MBps) that will be allowed across all VMs mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10. - DiskMBpsReadOnly *int64 `json:"diskMBpsReadOnly,omitempty"` - // MaxShares - The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a disk that can be mounted on multiple VMs at the same time. - MaxShares *int32 `json:"maxShares,omitempty"` - // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. - Encryption *Encryption `json:"encryption,omitempty"` - // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' - NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` - // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. - DiskAccessID *string `json:"diskAccessId,omitempty"` - // Tier - Performance tier of the disk (e.g, P4, S10) as described here: https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra disks. - Tier *string `json:"tier,omitempty"` - // BurstingEnabled - Set to true to enable bursting beyond the provisioned performance target of the disk. Bursting is disabled by default. Does not apply to Ultra disks. - BurstingEnabled *bool `json:"burstingEnabled,omitempty"` - // PurchasePlan - Purchase plan information to be added on the OS disk - PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` - // SupportedCapabilities - List of supported capabilities to be added on the OS disk. - SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` - // PropertyUpdatesInProgress - READ-ONLY; Properties of the disk for which update is pending. - PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` - // SupportsHibernation - Indicates the OS on a disk supports hibernation. - SupportsHibernation *bool `json:"supportsHibernation,omitempty"` - // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' - PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` - // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' - DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` -} - -// MarshalJSON is the custom marshaler for DiskUpdateProperties. -func (dup DiskUpdateProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if dup.OsType != "" { - objectMap["osType"] = dup.OsType - } - if dup.DiskSizeGB != nil { - objectMap["diskSizeGB"] = dup.DiskSizeGB - } - if dup.EncryptionSettingsCollection != nil { - objectMap["encryptionSettingsCollection"] = dup.EncryptionSettingsCollection - } - if dup.DiskIOPSReadWrite != nil { - objectMap["diskIOPSReadWrite"] = dup.DiskIOPSReadWrite - } - if dup.DiskMBpsReadWrite != nil { - objectMap["diskMBpsReadWrite"] = dup.DiskMBpsReadWrite - } - if dup.DiskIOPSReadOnly != nil { - objectMap["diskIOPSReadOnly"] = dup.DiskIOPSReadOnly - } - if dup.DiskMBpsReadOnly != nil { - objectMap["diskMBpsReadOnly"] = dup.DiskMBpsReadOnly - } - if dup.MaxShares != nil { - objectMap["maxShares"] = dup.MaxShares - } - if dup.Encryption != nil { - objectMap["encryption"] = dup.Encryption - } - if dup.NetworkAccessPolicy != "" { - objectMap["networkAccessPolicy"] = dup.NetworkAccessPolicy - } - if dup.DiskAccessID != nil { - objectMap["diskAccessId"] = dup.DiskAccessID - } - if dup.Tier != nil { - objectMap["tier"] = dup.Tier - } - if dup.BurstingEnabled != nil { - objectMap["burstingEnabled"] = dup.BurstingEnabled - } - if dup.PurchasePlan != nil { - objectMap["purchasePlan"] = dup.PurchasePlan - } - if dup.SupportedCapabilities != nil { - objectMap["supportedCapabilities"] = dup.SupportedCapabilities - } - if dup.SupportsHibernation != nil { - objectMap["supportsHibernation"] = dup.SupportsHibernation - } - if dup.PublicNetworkAccess != "" { - objectMap["publicNetworkAccess"] = dup.PublicNetworkAccess - } - if dup.DataAccessAuthMode != "" { - objectMap["dataAccessAuthMode"] = dup.DataAccessAuthMode - } - return json.Marshal(objectMap) -} - -// Encryption encryption at rest settings for disk or snapshot -type Encryption struct { - // DiskEncryptionSetID - ResourceId of the disk encryption set to use for enabling encryption at rest. - DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` - // Type - Possible values include: 'EncryptionTypeEncryptionAtRestWithPlatformKey', 'EncryptionTypeEncryptionAtRestWithCustomerKey', 'EncryptionTypeEncryptionAtRestWithPlatformAndCustomerKeys' - Type EncryptionType `json:"type,omitempty"` -} - -// EncryptionImages optional. Allows users to provide customer managed keys for encrypting the OS and data -// disks in the gallery artifact. -type EncryptionImages struct { - OsDiskImage *OSDiskImageEncryption `json:"osDiskImage,omitempty"` - // DataDiskImages - A list of encryption specifications for data disk images. - DataDiskImages *[]DataDiskImageEncryption `json:"dataDiskImages,omitempty"` -} - -// EncryptionSetIdentity the managed identity for the disk encryption set. It should be given permission on -// the key vault before it can be used to encrypt disks. -type EncryptionSetIdentity struct { - // Type - The type of Managed Identity used by the DiskEncryptionSet. Only SystemAssigned is supported for new creations. Disk Encryption Sets can be updated with Identity type None during migration of subscription to a new Azure Active Directory tenant; it will cause the encrypted resources to lose access to the keys. Possible values include: 'DiskEncryptionSetIdentityTypeSystemAssigned', 'DiskEncryptionSetIdentityTypeNone' - Type DiskEncryptionSetIdentityType `json:"type,omitempty"` - // PrincipalID - READ-ONLY; The object id of the Managed Identity Resource. This will be sent to the RP from ARM via the x-ms-identity-principal-id header in the PUT request if the resource has a systemAssigned(implicit) identity - PrincipalID *string `json:"principalId,omitempty"` - // TenantID - READ-ONLY; The tenant id of the Managed Identity Resource. This will be sent to the RP from ARM via the x-ms-client-tenant-id header in the PUT request if the resource has a systemAssigned(implicit) identity - TenantID *string `json:"tenantId,omitempty"` -} - -// MarshalJSON is the custom marshaler for EncryptionSetIdentity. -func (esi EncryptionSetIdentity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if esi.Type != "" { - objectMap["type"] = esi.Type - } - return json.Marshal(objectMap) -} - -// EncryptionSetProperties ... -type EncryptionSetProperties struct { - // EncryptionType - Possible values include: 'EncryptionAtRestWithCustomerKey', 'EncryptionAtRestWithPlatformAndCustomerKeys', 'ConfidentialVMEncryptedWithCustomerKey' - EncryptionType DiskEncryptionSetType `json:"encryptionType,omitempty"` - // ActiveKey - The key vault key which is currently used by this disk encryption set. - ActiveKey *KeyForDiskEncryptionSet `json:"activeKey,omitempty"` - // PreviousKeys - READ-ONLY; A readonly collection of key vault keys previously used by this disk encryption set while a key rotation is in progress. It will be empty if there is no ongoing key rotation. - PreviousKeys *[]KeyForDiskEncryptionSet `json:"previousKeys,omitempty"` - // ProvisioningState - READ-ONLY; The disk encryption set provisioning state. - ProvisioningState *string `json:"provisioningState,omitempty"` - // RotationToLatestKeyVersionEnabled - Set this flag to true to enable auto-updating of this disk encryption set to the latest key version. - RotationToLatestKeyVersionEnabled *bool `json:"rotationToLatestKeyVersionEnabled,omitempty"` - // LastKeyRotationTimestamp - READ-ONLY; The time when the active key of this disk encryption set was updated. - LastKeyRotationTimestamp *date.Time `json:"lastKeyRotationTimestamp,omitempty"` - // AutoKeyRotationError - READ-ONLY; The error that was encountered during auto-key rotation. If an error is present, then auto-key rotation will not be attempted until the error on this disk encryption set is fixed. - AutoKeyRotationError *APIError `json:"autoKeyRotationError,omitempty"` -} - -// MarshalJSON is the custom marshaler for EncryptionSetProperties. -func (esp EncryptionSetProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if esp.EncryptionType != "" { - objectMap["encryptionType"] = esp.EncryptionType - } - if esp.ActiveKey != nil { - objectMap["activeKey"] = esp.ActiveKey - } - if esp.RotationToLatestKeyVersionEnabled != nil { - objectMap["rotationToLatestKeyVersionEnabled"] = esp.RotationToLatestKeyVersionEnabled - } - return json.Marshal(objectMap) -} - -// EncryptionSettingsCollection encryption settings for disk or snapshot -type EncryptionSettingsCollection struct { - // Enabled - Set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object, the existing settings remain unchanged. - Enabled *bool `json:"enabled,omitempty"` - // EncryptionSettings - A collection of encryption settings, one for each disk volume. - EncryptionSettings *[]EncryptionSettingsElement `json:"encryptionSettings,omitempty"` - // EncryptionSettingsVersion - Describes what type of encryption is used for the disks. Once this field is set, it cannot be overwritten. '1.0' corresponds to Azure Disk Encryption with AAD app.'1.1' corresponds to Azure Disk Encryption. - EncryptionSettingsVersion *string `json:"encryptionSettingsVersion,omitempty"` -} - -// EncryptionSettingsElement encryption settings for one disk volume. -type EncryptionSettingsElement struct { - // DiskEncryptionKey - Key Vault Secret Url and vault id of the disk encryption key - DiskEncryptionKey *KeyVaultAndSecretReference `json:"diskEncryptionKey,omitempty"` - // KeyEncryptionKey - Key Vault Key Url and vault id of the key encryption key. KeyEncryptionKey is optional and when provided is used to unwrap the disk encryption key. - KeyEncryptionKey *KeyVaultAndKeyReference `json:"keyEncryptionKey,omitempty"` -} - -// ExtendedLocation the complex type of the extended location. -type ExtendedLocation struct { - // Name - The name of the extended location. - Name *string `json:"name,omitempty"` - // Type - The type of the extended location. Possible values include: 'ExtendedLocationTypesEdgeZone' - Type ExtendedLocationTypes `json:"type,omitempty"` -} - -// Extension describes a cloud service Extension. -type Extension struct { - // Name - The name of the extension. - Name *string `json:"name,omitempty"` - Properties *CloudServiceExtensionProperties `json:"properties,omitempty"` -} - -// GalleriesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type GalleriesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleriesClient) (Gallery, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleriesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleriesCreateOrUpdateFuture.Result. -func (future *GalleriesCreateOrUpdateFuture) result(client GalleriesClient) (g Gallery, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - g.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleriesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if g.Response.Response, err = future.GetResult(sender); err == nil && g.Response.Response.StatusCode != http.StatusNoContent { - g, err = client.CreateOrUpdateResponder(g.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesCreateOrUpdateFuture", "Result", g.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleriesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type GalleriesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleriesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleriesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleriesDeleteFuture.Result. -func (future *GalleriesDeleteFuture) result(client GalleriesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleriesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// GalleriesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type GalleriesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleriesClient) (Gallery, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleriesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleriesUpdateFuture.Result. -func (future *GalleriesUpdateFuture) result(client GalleriesClient) (g Gallery, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - g.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleriesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if g.Response.Response, err = future.GetResult(sender); err == nil && g.Response.Response.StatusCode != http.StatusNoContent { - g, err = client.UpdateResponder(g.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleriesUpdateFuture", "Result", g.Response.Response, "Failure responding to request") - } - } - return -} - -// Gallery specifies information about the Shared Image Gallery that you want to create or update. -type Gallery struct { - autorest.Response `json:"-"` - *GalleryProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Gallery. -func (g Gallery) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if g.GalleryProperties != nil { - objectMap["properties"] = g.GalleryProperties - } - if g.Location != nil { - objectMap["location"] = g.Location - } - if g.Tags != nil { - objectMap["tags"] = g.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Gallery struct. -func (g *Gallery) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryProperties GalleryProperties - err = json.Unmarshal(*v, &galleryProperties) - if err != nil { - return err - } - g.GalleryProperties = &galleryProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - g.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - g.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - g.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - g.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - g.Tags = tags - } - } - } - - return nil -} - -// GalleryApplication specifies information about the gallery Application Definition that you want to -// create or update. -type GalleryApplication struct { - autorest.Response `json:"-"` - *GalleryApplicationProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryApplication. -func (ga GalleryApplication) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ga.GalleryApplicationProperties != nil { - objectMap["properties"] = ga.GalleryApplicationProperties - } - if ga.Location != nil { - objectMap["location"] = ga.Location - } - if ga.Tags != nil { - objectMap["tags"] = ga.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryApplication struct. -func (ga *GalleryApplication) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryApplicationProperties GalleryApplicationProperties - err = json.Unmarshal(*v, &galleryApplicationProperties) - if err != nil { - return err - } - ga.GalleryApplicationProperties = &galleryApplicationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - ga.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - ga.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - ga.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - ga.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - ga.Tags = tags - } - } - } - - return nil -} - -// GalleryApplicationList the List Gallery Applications operation response. -type GalleryApplicationList struct { - autorest.Response `json:"-"` - // Value - A list of Gallery Applications. - Value *[]GalleryApplication `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Application Definitions in the Application Gallery. Call ListNext() with this to fetch the next page of gallery Application Definitions. - NextLink *string `json:"nextLink,omitempty"` -} - -// GalleryApplicationListIterator provides access to a complete listing of GalleryApplication values. -type GalleryApplicationListIterator struct { - i int - page GalleryApplicationListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *GalleryApplicationListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *GalleryApplicationListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter GalleryApplicationListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter GalleryApplicationListIterator) Response() GalleryApplicationList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter GalleryApplicationListIterator) Value() GalleryApplication { - if !iter.page.NotDone() { - return GalleryApplication{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the GalleryApplicationListIterator type. -func NewGalleryApplicationListIterator(page GalleryApplicationListPage) GalleryApplicationListIterator { - return GalleryApplicationListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (gal GalleryApplicationList) IsEmpty() bool { - return gal.Value == nil || len(*gal.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (gal GalleryApplicationList) hasNextLink() bool { - return gal.NextLink != nil && len(*gal.NextLink) != 0 -} - -// galleryApplicationListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (gal GalleryApplicationList) galleryApplicationListPreparer(ctx context.Context) (*http.Request, error) { - if !gal.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(gal.NextLink))) -} - -// GalleryApplicationListPage contains a page of GalleryApplication values. -type GalleryApplicationListPage struct { - fn func(context.Context, GalleryApplicationList) (GalleryApplicationList, error) - gal GalleryApplicationList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *GalleryApplicationListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.gal) - if err != nil { - return err - } - page.gal = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *GalleryApplicationListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page GalleryApplicationListPage) NotDone() bool { - return !page.gal.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page GalleryApplicationListPage) Response() GalleryApplicationList { - return page.gal -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page GalleryApplicationListPage) Values() []GalleryApplication { - if page.gal.IsEmpty() { - return nil - } - return *page.gal.Value -} - -// Creates a new instance of the GalleryApplicationListPage type. -func NewGalleryApplicationListPage(cur GalleryApplicationList, getNextPage func(context.Context, GalleryApplicationList) (GalleryApplicationList, error)) GalleryApplicationListPage { - return GalleryApplicationListPage{ - fn: getNextPage, - gal: cur, - } -} - -// GalleryApplicationProperties describes the properties of a gallery Application Definition. -type GalleryApplicationProperties struct { - // Description - The description of this gallery Application Definition resource. This property is updatable. - Description *string `json:"description,omitempty"` - // Eula - The Eula agreement for the gallery Application Definition. - Eula *string `json:"eula,omitempty"` - // PrivacyStatementURI - The privacy statement uri. - PrivacyStatementURI *string `json:"privacyStatementUri,omitempty"` - // ReleaseNoteURI - The release note uri. - ReleaseNoteURI *string `json:"releaseNoteUri,omitempty"` - // EndOfLifeDate - The end of life date of the gallery Application Definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - // SupportedOSType - This property allows you to specify the supported type of the OS that application is built for.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - SupportedOSType OperatingSystemTypes `json:"supportedOSType,omitempty"` -} - -// GalleryApplicationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryApplicationsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationsClient) (GalleryApplication, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationsCreateOrUpdateFuture.Result. -func (future *GalleryApplicationsCreateOrUpdateFuture) result(client GalleryApplicationsClient) (ga GalleryApplication, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ga.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if ga.Response.Response, err = future.GetResult(sender); err == nil && ga.Response.Response.StatusCode != http.StatusNoContent { - ga, err = client.CreateOrUpdateResponder(ga.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsCreateOrUpdateFuture", "Result", ga.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryApplicationsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryApplicationsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationsDeleteFuture.Result. -func (future *GalleryApplicationsDeleteFuture) result(client GalleryApplicationsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// GalleryApplicationsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryApplicationsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationsClient) (GalleryApplication, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationsUpdateFuture.Result. -func (future *GalleryApplicationsUpdateFuture) result(client GalleryApplicationsClient) (ga GalleryApplication, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ga.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if ga.Response.Response, err = future.GetResult(sender); err == nil && ga.Response.Response.StatusCode != http.StatusNoContent { - ga, err = client.UpdateResponder(ga.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationsUpdateFuture", "Result", ga.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryApplicationUpdate specifies information about the gallery Application Definition that you want to -// update. -type GalleryApplicationUpdate struct { - *GalleryApplicationProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryApplicationUpdate. -func (gau GalleryApplicationUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gau.GalleryApplicationProperties != nil { - objectMap["properties"] = gau.GalleryApplicationProperties - } - if gau.Tags != nil { - objectMap["tags"] = gau.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryApplicationUpdate struct. -func (gau *GalleryApplicationUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryApplicationProperties GalleryApplicationProperties - err = json.Unmarshal(*v, &galleryApplicationProperties) - if err != nil { - return err - } - gau.GalleryApplicationProperties = &galleryApplicationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - gau.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - gau.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - gau.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - gau.Tags = tags - } - } - } - - return nil -} - -// GalleryApplicationVersion specifies information about the gallery Application Version that you want to -// create or update. -type GalleryApplicationVersion struct { - autorest.Response `json:"-"` - *GalleryApplicationVersionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryApplicationVersion. -func (gav GalleryApplicationVersion) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gav.GalleryApplicationVersionProperties != nil { - objectMap["properties"] = gav.GalleryApplicationVersionProperties - } - if gav.Location != nil { - objectMap["location"] = gav.Location - } - if gav.Tags != nil { - objectMap["tags"] = gav.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryApplicationVersion struct. -func (gav *GalleryApplicationVersion) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryApplicationVersionProperties GalleryApplicationVersionProperties - err = json.Unmarshal(*v, &galleryApplicationVersionProperties) - if err != nil { - return err - } - gav.GalleryApplicationVersionProperties = &galleryApplicationVersionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - gav.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - gav.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - gav.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - gav.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - gav.Tags = tags - } - } - } - - return nil -} - -// GalleryApplicationVersionList the List Gallery Application version operation response. -type GalleryApplicationVersionList struct { - autorest.Response `json:"-"` - // Value - A list of gallery Application Versions. - Value *[]GalleryApplicationVersion `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of gallery Application Versions. Call ListNext() with this to fetch the next page of gallery Application Versions. - NextLink *string `json:"nextLink,omitempty"` -} - -// GalleryApplicationVersionListIterator provides access to a complete listing of GalleryApplicationVersion -// values. -type GalleryApplicationVersionListIterator struct { - i int - page GalleryApplicationVersionListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *GalleryApplicationVersionListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *GalleryApplicationVersionListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter GalleryApplicationVersionListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter GalleryApplicationVersionListIterator) Response() GalleryApplicationVersionList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter GalleryApplicationVersionListIterator) Value() GalleryApplicationVersion { - if !iter.page.NotDone() { - return GalleryApplicationVersion{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the GalleryApplicationVersionListIterator type. -func NewGalleryApplicationVersionListIterator(page GalleryApplicationVersionListPage) GalleryApplicationVersionListIterator { - return GalleryApplicationVersionListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (gavl GalleryApplicationVersionList) IsEmpty() bool { - return gavl.Value == nil || len(*gavl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (gavl GalleryApplicationVersionList) hasNextLink() bool { - return gavl.NextLink != nil && len(*gavl.NextLink) != 0 -} - -// galleryApplicationVersionListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (gavl GalleryApplicationVersionList) galleryApplicationVersionListPreparer(ctx context.Context) (*http.Request, error) { - if !gavl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(gavl.NextLink))) -} - -// GalleryApplicationVersionListPage contains a page of GalleryApplicationVersion values. -type GalleryApplicationVersionListPage struct { - fn func(context.Context, GalleryApplicationVersionList) (GalleryApplicationVersionList, error) - gavl GalleryApplicationVersionList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *GalleryApplicationVersionListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryApplicationVersionListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.gavl) - if err != nil { - return err - } - page.gavl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *GalleryApplicationVersionListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page GalleryApplicationVersionListPage) NotDone() bool { - return !page.gavl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page GalleryApplicationVersionListPage) Response() GalleryApplicationVersionList { - return page.gavl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page GalleryApplicationVersionListPage) Values() []GalleryApplicationVersion { - if page.gavl.IsEmpty() { - return nil - } - return *page.gavl.Value -} - -// Creates a new instance of the GalleryApplicationVersionListPage type. -func NewGalleryApplicationVersionListPage(cur GalleryApplicationVersionList, getNextPage func(context.Context, GalleryApplicationVersionList) (GalleryApplicationVersionList, error)) GalleryApplicationVersionListPage { - return GalleryApplicationVersionListPage{ - fn: getNextPage, - gavl: cur, - } -} - -// GalleryApplicationVersionProperties describes the properties of a gallery image version. -type GalleryApplicationVersionProperties struct { - PublishingProfile *GalleryApplicationVersionPublishingProfile `json:"publishingProfile,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. Possible values include: 'ProvisioningState1Creating', 'ProvisioningState1Updating', 'ProvisioningState1Failed', 'ProvisioningState1Succeeded', 'ProvisioningState1Deleting', 'ProvisioningState1Migrating' - ProvisioningState ProvisioningState1 `json:"provisioningState,omitempty"` - // ReplicationStatus - READ-ONLY - ReplicationStatus *ReplicationStatus `json:"replicationStatus,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryApplicationVersionProperties. -func (gavp GalleryApplicationVersionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gavp.PublishingProfile != nil { - objectMap["publishingProfile"] = gavp.PublishingProfile - } - return json.Marshal(objectMap) -} - -// GalleryApplicationVersionPublishingProfile the publishing profile of a gallery image version. -type GalleryApplicationVersionPublishingProfile struct { - Source *UserArtifactSource `json:"source,omitempty"` - ManageActions *UserArtifactManage `json:"manageActions,omitempty"` - // EnableHealthCheck - Optional. Whether or not this application reports health. - EnableHealthCheck *bool `json:"enableHealthCheck,omitempty"` - // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. - TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` - // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. - ReplicaCount *int32 `json:"replicaCount,omitempty"` - // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. - ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` - // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' - StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` - // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' - ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` - // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. - TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryApplicationVersionPublishingProfile. -func (gavpp GalleryApplicationVersionPublishingProfile) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gavpp.Source != nil { - objectMap["source"] = gavpp.Source - } - if gavpp.ManageActions != nil { - objectMap["manageActions"] = gavpp.ManageActions - } - if gavpp.EnableHealthCheck != nil { - objectMap["enableHealthCheck"] = gavpp.EnableHealthCheck - } - if gavpp.TargetRegions != nil { - objectMap["targetRegions"] = gavpp.TargetRegions - } - if gavpp.ReplicaCount != nil { - objectMap["replicaCount"] = gavpp.ReplicaCount - } - if gavpp.ExcludeFromLatest != nil { - objectMap["excludeFromLatest"] = gavpp.ExcludeFromLatest - } - if gavpp.EndOfLifeDate != nil { - objectMap["endOfLifeDate"] = gavpp.EndOfLifeDate - } - if gavpp.StorageAccountType != "" { - objectMap["storageAccountType"] = gavpp.StorageAccountType - } - if gavpp.ReplicationMode != "" { - objectMap["replicationMode"] = gavpp.ReplicationMode - } - if gavpp.TargetExtendedLocations != nil { - objectMap["targetExtendedLocations"] = gavpp.TargetExtendedLocations - } - return json.Marshal(objectMap) -} - -// GalleryApplicationVersionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type GalleryApplicationVersionsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationVersionsClient) (GalleryApplicationVersion, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationVersionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationVersionsCreateOrUpdateFuture.Result. -func (future *GalleryApplicationVersionsCreateOrUpdateFuture) result(client GalleryApplicationVersionsClient) (gav GalleryApplicationVersion, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - gav.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if gav.Response.Response, err = future.GetResult(sender); err == nil && gav.Response.Response.StatusCode != http.StatusNoContent { - gav, err = client.CreateOrUpdateResponder(gav.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsCreateOrUpdateFuture", "Result", gav.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryApplicationVersionsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryApplicationVersionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationVersionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationVersionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationVersionsDeleteFuture.Result. -func (future *GalleryApplicationVersionsDeleteFuture) result(client GalleryApplicationVersionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// GalleryApplicationVersionsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryApplicationVersionsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryApplicationVersionsClient) (GalleryApplicationVersion, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryApplicationVersionsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryApplicationVersionsUpdateFuture.Result. -func (future *GalleryApplicationVersionsUpdateFuture) result(client GalleryApplicationVersionsClient) (gav GalleryApplicationVersion, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - gav.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryApplicationVersionsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if gav.Response.Response, err = future.GetResult(sender); err == nil && gav.Response.Response.StatusCode != http.StatusNoContent { - gav, err = client.UpdateResponder(gav.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryApplicationVersionsUpdateFuture", "Result", gav.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryApplicationVersionUpdate specifies information about the gallery Application Version that you -// want to update. -type GalleryApplicationVersionUpdate struct { - *GalleryApplicationVersionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryApplicationVersionUpdate. -func (gavu GalleryApplicationVersionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gavu.GalleryApplicationVersionProperties != nil { - objectMap["properties"] = gavu.GalleryApplicationVersionProperties - } - if gavu.Tags != nil { - objectMap["tags"] = gavu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryApplicationVersionUpdate struct. -func (gavu *GalleryApplicationVersionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryApplicationVersionProperties GalleryApplicationVersionProperties - err = json.Unmarshal(*v, &galleryApplicationVersionProperties) - if err != nil { - return err - } - gavu.GalleryApplicationVersionProperties = &galleryApplicationVersionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - gavu.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - gavu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - gavu.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - gavu.Tags = tags - } - } - } - - return nil -} - -// GalleryArtifactPublishingProfileBase describes the basic gallery artifact publishing profile. -type GalleryArtifactPublishingProfileBase struct { - // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. - TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` - // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. - ReplicaCount *int32 `json:"replicaCount,omitempty"` - // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. - ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` - // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' - StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` - // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' - ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` - // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. - TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryArtifactPublishingProfileBase. -func (gappb GalleryArtifactPublishingProfileBase) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gappb.TargetRegions != nil { - objectMap["targetRegions"] = gappb.TargetRegions - } - if gappb.ReplicaCount != nil { - objectMap["replicaCount"] = gappb.ReplicaCount - } - if gappb.ExcludeFromLatest != nil { - objectMap["excludeFromLatest"] = gappb.ExcludeFromLatest - } - if gappb.EndOfLifeDate != nil { - objectMap["endOfLifeDate"] = gappb.EndOfLifeDate - } - if gappb.StorageAccountType != "" { - objectMap["storageAccountType"] = gappb.StorageAccountType - } - if gappb.ReplicationMode != "" { - objectMap["replicationMode"] = gappb.ReplicationMode - } - if gappb.TargetExtendedLocations != nil { - objectMap["targetExtendedLocations"] = gappb.TargetExtendedLocations - } - return json.Marshal(objectMap) -} - -// GalleryArtifactSource the source image from which the Image Version is going to be created. -type GalleryArtifactSource struct { - ManagedImage *ManagedArtifact `json:"managedImage,omitempty"` -} - -// GalleryArtifactVersionSource the gallery artifact version source. -type GalleryArtifactVersionSource struct { - // ID - The id of the gallery artifact version source. Can specify a disk uri, snapshot uri, user image or storage account resource. - ID *string `json:"id,omitempty"` - // URI - The uri of the gallery artifact version source. Currently used to specify vhd/blob source. - URI *string `json:"uri,omitempty"` -} - -// GalleryDataDiskImage this is the data disk image. -type GalleryDataDiskImage struct { - // Lun - This property specifies the logical unit number of the data disk. This value is used to identify data disks within the Virtual Machine and therefore must be unique for each data disk attached to the Virtual Machine. - Lun *int32 `json:"lun,omitempty"` - // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. - SizeInGB *int32 `json:"sizeInGB,omitempty"` - // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' - HostCaching HostCaching `json:"hostCaching,omitempty"` - Source *GalleryArtifactVersionSource `json:"source,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryDataDiskImage. -func (gddi GalleryDataDiskImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gddi.Lun != nil { - objectMap["lun"] = gddi.Lun - } - if gddi.HostCaching != "" { - objectMap["hostCaching"] = gddi.HostCaching - } - if gddi.Source != nil { - objectMap["source"] = gddi.Source - } - return json.Marshal(objectMap) -} - -// GalleryDiskImage this is the disk image base class. -type GalleryDiskImage struct { - // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. - SizeInGB *int32 `json:"sizeInGB,omitempty"` - // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' - HostCaching HostCaching `json:"hostCaching,omitempty"` - Source *GalleryArtifactVersionSource `json:"source,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryDiskImage. -func (gdi GalleryDiskImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gdi.HostCaching != "" { - objectMap["hostCaching"] = gdi.HostCaching - } - if gdi.Source != nil { - objectMap["source"] = gdi.Source - } - return json.Marshal(objectMap) -} - -// GalleryExtendedLocation the name of the extended location. -type GalleryExtendedLocation struct { - Name *string `json:"name,omitempty"` - // Type - Possible values include: 'GalleryExtendedLocationTypeEdgeZone', 'GalleryExtendedLocationTypeUnknown' - Type GalleryExtendedLocationType `json:"type,omitempty"` -} - -// GalleryIdentifier describes the gallery unique name. -type GalleryIdentifier struct { - // UniqueName - READ-ONLY; The unique name of the Shared Image Gallery. This name is generated automatically by Azure. - UniqueName *string `json:"uniqueName,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryIdentifier. -func (gi GalleryIdentifier) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// GalleryImage specifies information about the gallery image definition that you want to create or update. -type GalleryImage struct { - autorest.Response `json:"-"` - *GalleryImageProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryImage. -func (gi GalleryImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gi.GalleryImageProperties != nil { - objectMap["properties"] = gi.GalleryImageProperties - } - if gi.Location != nil { - objectMap["location"] = gi.Location - } - if gi.Tags != nil { - objectMap["tags"] = gi.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryImage struct. -func (gi *GalleryImage) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryImageProperties GalleryImageProperties - err = json.Unmarshal(*v, &galleryImageProperties) - if err != nil { - return err - } - gi.GalleryImageProperties = &galleryImageProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - gi.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - gi.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - gi.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - gi.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - gi.Tags = tags - } - } - } - - return nil -} - -// GalleryImageFeature a feature for gallery image. -type GalleryImageFeature struct { - // Name - The name of the gallery image feature. - Name *string `json:"name,omitempty"` - // Value - The value of the gallery image feature. - Value *string `json:"value,omitempty"` -} - -// GalleryImageIdentifier this is the gallery image definition identifier. -type GalleryImageIdentifier struct { - // Publisher - The name of the gallery image definition publisher. - Publisher *string `json:"publisher,omitempty"` - // Offer - The name of the gallery image definition offer. - Offer *string `json:"offer,omitempty"` - // Sku - The name of the gallery image definition SKU. - Sku *string `json:"sku,omitempty"` -} - -// GalleryImageList the List Gallery Images operation response. -type GalleryImageList struct { - autorest.Response `json:"-"` - // Value - A list of Shared Image Gallery images. - Value *[]GalleryImage `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Image Definitions in the Shared Image Gallery. Call ListNext() with this to fetch the next page of gallery image definitions. - NextLink *string `json:"nextLink,omitempty"` -} - -// GalleryImageListIterator provides access to a complete listing of GalleryImage values. -type GalleryImageListIterator struct { - i int - page GalleryImageListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *GalleryImageListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *GalleryImageListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter GalleryImageListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter GalleryImageListIterator) Response() GalleryImageList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter GalleryImageListIterator) Value() GalleryImage { - if !iter.page.NotDone() { - return GalleryImage{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the GalleryImageListIterator type. -func NewGalleryImageListIterator(page GalleryImageListPage) GalleryImageListIterator { - return GalleryImageListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (gil GalleryImageList) IsEmpty() bool { - return gil.Value == nil || len(*gil.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (gil GalleryImageList) hasNextLink() bool { - return gil.NextLink != nil && len(*gil.NextLink) != 0 -} - -// galleryImageListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (gil GalleryImageList) galleryImageListPreparer(ctx context.Context) (*http.Request, error) { - if !gil.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(gil.NextLink))) -} - -// GalleryImageListPage contains a page of GalleryImage values. -type GalleryImageListPage struct { - fn func(context.Context, GalleryImageList) (GalleryImageList, error) - gil GalleryImageList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *GalleryImageListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.gil) - if err != nil { - return err - } - page.gil = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *GalleryImageListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page GalleryImageListPage) NotDone() bool { - return !page.gil.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page GalleryImageListPage) Response() GalleryImageList { - return page.gil -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page GalleryImageListPage) Values() []GalleryImage { - if page.gil.IsEmpty() { - return nil - } - return *page.gil.Value -} - -// Creates a new instance of the GalleryImageListPage type. -func NewGalleryImageListPage(cur GalleryImageList, getNextPage func(context.Context, GalleryImageList) (GalleryImageList, error)) GalleryImageListPage { - return GalleryImageListPage{ - fn: getNextPage, - gil: cur, - } -} - -// GalleryImageProperties describes the properties of a gallery image definition. -type GalleryImageProperties struct { - // Description - The description of this gallery image definition resource. This property is updatable. - Description *string `json:"description,omitempty"` - // Eula - The Eula agreement for the gallery image definition. - Eula *string `json:"eula,omitempty"` - // PrivacyStatementURI - The privacy statement uri. - PrivacyStatementURI *string `json:"privacyStatementUri,omitempty"` - // ReleaseNoteURI - The release note uri. - ReleaseNoteURI *string `json:"releaseNoteUri,omitempty"` - // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' - OsState OperatingSystemStateTypes `json:"osState,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` - Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` - Disallowed *Disallowed `json:"disallowed,omitempty"` - PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. Possible values include: 'ProvisioningState2Creating', 'ProvisioningState2Updating', 'ProvisioningState2Failed', 'ProvisioningState2Succeeded', 'ProvisioningState2Deleting', 'ProvisioningState2Migrating' - ProvisioningState ProvisioningState2 `json:"provisioningState,omitempty"` - // Features - A list of gallery image features. - Features *[]GalleryImageFeature `json:"features,omitempty"` - // Architecture - The architecture of the image. Applicable to OS disks only. Possible values include: 'X64', 'Arm64' - Architecture Architecture `json:"architecture,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryImageProperties. -func (gip GalleryImageProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gip.Description != nil { - objectMap["description"] = gip.Description - } - if gip.Eula != nil { - objectMap["eula"] = gip.Eula - } - if gip.PrivacyStatementURI != nil { - objectMap["privacyStatementUri"] = gip.PrivacyStatementURI - } - if gip.ReleaseNoteURI != nil { - objectMap["releaseNoteUri"] = gip.ReleaseNoteURI - } - if gip.OsType != "" { - objectMap["osType"] = gip.OsType - } - if gip.OsState != "" { - objectMap["osState"] = gip.OsState - } - if gip.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = gip.HyperVGeneration - } - if gip.EndOfLifeDate != nil { - objectMap["endOfLifeDate"] = gip.EndOfLifeDate - } - if gip.Identifier != nil { - objectMap["identifier"] = gip.Identifier - } - if gip.Recommended != nil { - objectMap["recommended"] = gip.Recommended - } - if gip.Disallowed != nil { - objectMap["disallowed"] = gip.Disallowed - } - if gip.PurchasePlan != nil { - objectMap["purchasePlan"] = gip.PurchasePlan - } - if gip.Features != nil { - objectMap["features"] = gip.Features - } - if gip.Architecture != "" { - objectMap["architecture"] = gip.Architecture - } - return json.Marshal(objectMap) -} - -// GalleryImagesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryImagesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImagesClient) (GalleryImage, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImagesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImagesCreateOrUpdateFuture.Result. -func (future *GalleryImagesCreateOrUpdateFuture) result(client GalleryImagesClient) (gi GalleryImage, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - gi.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if gi.Response.Response, err = future.GetResult(sender); err == nil && gi.Response.Response.StatusCode != http.StatusNoContent { - gi, err = client.CreateOrUpdateResponder(gi.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesCreateOrUpdateFuture", "Result", gi.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryImagesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type GalleryImagesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImagesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImagesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImagesDeleteFuture.Result. -func (future *GalleryImagesDeleteFuture) result(client GalleryImagesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// GalleryImagesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type GalleryImagesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImagesClient) (GalleryImage, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImagesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImagesUpdateFuture.Result. -func (future *GalleryImagesUpdateFuture) result(client GalleryImagesClient) (gi GalleryImage, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - gi.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImagesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if gi.Response.Response, err = future.GetResult(sender); err == nil && gi.Response.Response.StatusCode != http.StatusNoContent { - gi, err = client.UpdateResponder(gi.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImagesUpdateFuture", "Result", gi.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryImageUpdate specifies information about the gallery image definition that you want to update. -type GalleryImageUpdate struct { - *GalleryImageProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryImageUpdate. -func (giu GalleryImageUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if giu.GalleryImageProperties != nil { - objectMap["properties"] = giu.GalleryImageProperties - } - if giu.Tags != nil { - objectMap["tags"] = giu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryImageUpdate struct. -func (giu *GalleryImageUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryImageProperties GalleryImageProperties - err = json.Unmarshal(*v, &galleryImageProperties) - if err != nil { - return err - } - giu.GalleryImageProperties = &galleryImageProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - giu.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - giu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - giu.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - giu.Tags = tags - } - } - } - - return nil -} - -// GalleryImageVersion specifies information about the gallery image version that you want to create or -// update. -type GalleryImageVersion struct { - autorest.Response `json:"-"` - *GalleryImageVersionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryImageVersion. -func (giv GalleryImageVersion) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if giv.GalleryImageVersionProperties != nil { - objectMap["properties"] = giv.GalleryImageVersionProperties - } - if giv.Location != nil { - objectMap["location"] = giv.Location - } - if giv.Tags != nil { - objectMap["tags"] = giv.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryImageVersion struct. -func (giv *GalleryImageVersion) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryImageVersionProperties GalleryImageVersionProperties - err = json.Unmarshal(*v, &galleryImageVersionProperties) - if err != nil { - return err - } - giv.GalleryImageVersionProperties = &galleryImageVersionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - giv.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - giv.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - giv.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - giv.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - giv.Tags = tags - } - } - } - - return nil -} - -// GalleryImageVersionList the List Gallery Image version operation response. -type GalleryImageVersionList struct { - autorest.Response `json:"-"` - // Value - A list of gallery image versions. - Value *[]GalleryImageVersion `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of gallery image versions. Call ListNext() with this to fetch the next page of gallery image versions. - NextLink *string `json:"nextLink,omitempty"` -} - -// GalleryImageVersionListIterator provides access to a complete listing of GalleryImageVersion values. -type GalleryImageVersionListIterator struct { - i int - page GalleryImageVersionListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *GalleryImageVersionListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *GalleryImageVersionListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter GalleryImageVersionListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter GalleryImageVersionListIterator) Response() GalleryImageVersionList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter GalleryImageVersionListIterator) Value() GalleryImageVersion { - if !iter.page.NotDone() { - return GalleryImageVersion{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the GalleryImageVersionListIterator type. -func NewGalleryImageVersionListIterator(page GalleryImageVersionListPage) GalleryImageVersionListIterator { - return GalleryImageVersionListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (givl GalleryImageVersionList) IsEmpty() bool { - return givl.Value == nil || len(*givl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (givl GalleryImageVersionList) hasNextLink() bool { - return givl.NextLink != nil && len(*givl.NextLink) != 0 -} - -// galleryImageVersionListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (givl GalleryImageVersionList) galleryImageVersionListPreparer(ctx context.Context) (*http.Request, error) { - if !givl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(givl.NextLink))) -} - -// GalleryImageVersionListPage contains a page of GalleryImageVersion values. -type GalleryImageVersionListPage struct { - fn func(context.Context, GalleryImageVersionList) (GalleryImageVersionList, error) - givl GalleryImageVersionList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *GalleryImageVersionListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryImageVersionListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.givl) - if err != nil { - return err - } - page.givl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *GalleryImageVersionListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page GalleryImageVersionListPage) NotDone() bool { - return !page.givl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page GalleryImageVersionListPage) Response() GalleryImageVersionList { - return page.givl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page GalleryImageVersionListPage) Values() []GalleryImageVersion { - if page.givl.IsEmpty() { - return nil - } - return *page.givl.Value -} - -// Creates a new instance of the GalleryImageVersionListPage type. -func NewGalleryImageVersionListPage(cur GalleryImageVersionList, getNextPage func(context.Context, GalleryImageVersionList) (GalleryImageVersionList, error)) GalleryImageVersionListPage { - return GalleryImageVersionListPage{ - fn: getNextPage, - givl: cur, - } -} - -// GalleryImageVersionProperties describes the properties of a gallery image version. -type GalleryImageVersionProperties struct { - PublishingProfile *GalleryImageVersionPublishingProfile `json:"publishingProfile,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. Possible values include: 'ProvisioningState3Creating', 'ProvisioningState3Updating', 'ProvisioningState3Failed', 'ProvisioningState3Succeeded', 'ProvisioningState3Deleting', 'ProvisioningState3Migrating' - ProvisioningState ProvisioningState3 `json:"provisioningState,omitempty"` - StorageProfile *GalleryImageVersionStorageProfile `json:"storageProfile,omitempty"` - // ReplicationStatus - READ-ONLY - ReplicationStatus *ReplicationStatus `json:"replicationStatus,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryImageVersionProperties. -func (givp GalleryImageVersionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if givp.PublishingProfile != nil { - objectMap["publishingProfile"] = givp.PublishingProfile - } - if givp.StorageProfile != nil { - objectMap["storageProfile"] = givp.StorageProfile - } - return json.Marshal(objectMap) -} - -// GalleryImageVersionPublishingProfile the publishing profile of a gallery image Version. -type GalleryImageVersionPublishingProfile struct { - // TargetRegions - The target regions where the Image Version is going to be replicated to. This property is updatable. - TargetRegions *[]TargetRegion `json:"targetRegions,omitempty"` - // ReplicaCount - The number of replicas of the Image Version to be created per region. This property would take effect for a region when regionalReplicaCount is not specified. This property is updatable. - ReplicaCount *int32 `json:"replicaCount,omitempty"` - // ExcludeFromLatest - If set to true, Virtual Machines deployed from the latest version of the Image Definition won't use this Image Version. - ExcludeFromLatest *bool `json:"excludeFromLatest,omitempty"` - // PublishedDate - READ-ONLY; The timestamp for when the gallery image version is published. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image version. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' - StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` - // ReplicationMode - Optional parameter which specifies the mode to be used for replication. This property is not updatable. Possible values include: 'Full', 'Shallow' - ReplicationMode ReplicationMode `json:"replicationMode,omitempty"` - // TargetExtendedLocations - The target extended locations where the Image Version is going to be replicated to. This property is updatable. - TargetExtendedLocations *[]GalleryTargetExtendedLocation `json:"targetExtendedLocations,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryImageVersionPublishingProfile. -func (givpp GalleryImageVersionPublishingProfile) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if givpp.TargetRegions != nil { - objectMap["targetRegions"] = givpp.TargetRegions - } - if givpp.ReplicaCount != nil { - objectMap["replicaCount"] = givpp.ReplicaCount - } - if givpp.ExcludeFromLatest != nil { - objectMap["excludeFromLatest"] = givpp.ExcludeFromLatest - } - if givpp.EndOfLifeDate != nil { - objectMap["endOfLifeDate"] = givpp.EndOfLifeDate - } - if givpp.StorageAccountType != "" { - objectMap["storageAccountType"] = givpp.StorageAccountType - } - if givpp.ReplicationMode != "" { - objectMap["replicationMode"] = givpp.ReplicationMode - } - if givpp.TargetExtendedLocations != nil { - objectMap["targetExtendedLocations"] = givpp.TargetExtendedLocations - } - return json.Marshal(objectMap) -} - -// GalleryImageVersionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryImageVersionsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImageVersionsClient) (GalleryImageVersion, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImageVersionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImageVersionsCreateOrUpdateFuture.Result. -func (future *GalleryImageVersionsCreateOrUpdateFuture) result(client GalleryImageVersionsClient) (giv GalleryImageVersion, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - giv.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if giv.Response.Response, err = future.GetResult(sender); err == nil && giv.Response.Response.StatusCode != http.StatusNoContent { - giv, err = client.CreateOrUpdateResponder(giv.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsCreateOrUpdateFuture", "Result", giv.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryImageVersionsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryImageVersionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImageVersionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImageVersionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImageVersionsDeleteFuture.Result. -func (future *GalleryImageVersionsDeleteFuture) result(client GalleryImageVersionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// GalleryImageVersionStorageProfile this is the storage profile of a Gallery Image Version. -type GalleryImageVersionStorageProfile struct { - Source *GalleryArtifactVersionSource `json:"source,omitempty"` - OsDiskImage *GalleryOSDiskImage `json:"osDiskImage,omitempty"` - // DataDiskImages - A list of data disk images. - DataDiskImages *[]GalleryDataDiskImage `json:"dataDiskImages,omitempty"` -} - -// GalleryImageVersionsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GalleryImageVersionsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GalleryImageVersionsClient) (GalleryImageVersion, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GalleryImageVersionsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GalleryImageVersionsUpdateFuture.Result. -func (future *GalleryImageVersionsUpdateFuture) result(client GalleryImageVersionsClient) (giv GalleryImageVersion, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - giv.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GalleryImageVersionsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if giv.Response.Response, err = future.GetResult(sender); err == nil && giv.Response.Response.StatusCode != http.StatusNoContent { - giv, err = client.UpdateResponder(giv.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GalleryImageVersionsUpdateFuture", "Result", giv.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryImageVersionUpdate specifies information about the gallery image version that you want to update. -type GalleryImageVersionUpdate struct { - *GalleryImageVersionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryImageVersionUpdate. -func (givu GalleryImageVersionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if givu.GalleryImageVersionProperties != nil { - objectMap["properties"] = givu.GalleryImageVersionProperties - } - if givu.Tags != nil { - objectMap["tags"] = givu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryImageVersionUpdate struct. -func (givu *GalleryImageVersionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryImageVersionProperties GalleryImageVersionProperties - err = json.Unmarshal(*v, &galleryImageVersionProperties) - if err != nil { - return err - } - givu.GalleryImageVersionProperties = &galleryImageVersionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - givu.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - givu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - givu.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - givu.Tags = tags - } - } - } - - return nil -} - -// GalleryList the List Galleries operation response. -type GalleryList struct { - autorest.Response `json:"-"` - // Value - A list of galleries. - Value *[]Gallery `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of galleries. Call ListNext() with this to fetch the next page of galleries. - NextLink *string `json:"nextLink,omitempty"` -} - -// GalleryListIterator provides access to a complete listing of Gallery values. -type GalleryListIterator struct { - i int - page GalleryListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *GalleryListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *GalleryListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter GalleryListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter GalleryListIterator) Response() GalleryList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter GalleryListIterator) Value() Gallery { - if !iter.page.NotDone() { - return Gallery{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the GalleryListIterator type. -func NewGalleryListIterator(page GalleryListPage) GalleryListIterator { - return GalleryListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (gl GalleryList) IsEmpty() bool { - return gl.Value == nil || len(*gl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (gl GalleryList) hasNextLink() bool { - return gl.NextLink != nil && len(*gl.NextLink) != 0 -} - -// galleryListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (gl GalleryList) galleryListPreparer(ctx context.Context) (*http.Request, error) { - if !gl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(gl.NextLink))) -} - -// GalleryListPage contains a page of Gallery values. -type GalleryListPage struct { - fn func(context.Context, GalleryList) (GalleryList, error) - gl GalleryList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *GalleryListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/GalleryListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.gl) - if err != nil { - return err - } - page.gl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *GalleryListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page GalleryListPage) NotDone() bool { - return !page.gl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page GalleryListPage) Response() GalleryList { - return page.gl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page GalleryListPage) Values() []Gallery { - if page.gl.IsEmpty() { - return nil - } - return *page.gl.Value -} - -// Creates a new instance of the GalleryListPage type. -func NewGalleryListPage(cur GalleryList, getNextPage func(context.Context, GalleryList) (GalleryList, error)) GalleryListPage { - return GalleryListPage{ - fn: getNextPage, - gl: cur, - } -} - -// GalleryOSDiskImage this is the OS disk image. -type GalleryOSDiskImage struct { - // SizeInGB - READ-ONLY; This property indicates the size of the VHD to be created. - SizeInGB *int32 `json:"sizeInGB,omitempty"` - // HostCaching - The host caching of the disk. Valid values are 'None', 'ReadOnly', and 'ReadWrite'. Possible values include: 'HostCachingNone', 'HostCachingReadOnly', 'HostCachingReadWrite' - HostCaching HostCaching `json:"hostCaching,omitempty"` - Source *GalleryArtifactVersionSource `json:"source,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryOSDiskImage. -func (godi GalleryOSDiskImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if godi.HostCaching != "" { - objectMap["hostCaching"] = godi.HostCaching - } - if godi.Source != nil { - objectMap["source"] = godi.Source - } - return json.Marshal(objectMap) -} - -// GalleryProperties describes the properties of a Shared Image Gallery. -type GalleryProperties struct { - // Description - The description of this Shared Image Gallery resource. This property is updatable. - Description *string `json:"description,omitempty"` - Identifier *GalleryIdentifier `json:"identifier,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. Possible values include: 'ProvisioningStateCreating', 'ProvisioningStateUpdating', 'ProvisioningStateFailed', 'ProvisioningStateSucceeded', 'ProvisioningStateDeleting', 'ProvisioningStateMigrating' - ProvisioningState ProvisioningState `json:"provisioningState,omitempty"` - SharingProfile *SharingProfile `json:"sharingProfile,omitempty"` - SoftDeletePolicy *SoftDeletePolicy `json:"softDeletePolicy,omitempty"` - // SharingStatus - READ-ONLY - SharingStatus *SharingStatus `json:"sharingStatus,omitempty"` -} - -// MarshalJSON is the custom marshaler for GalleryProperties. -func (gp GalleryProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gp.Description != nil { - objectMap["description"] = gp.Description - } - if gp.Identifier != nil { - objectMap["identifier"] = gp.Identifier - } - if gp.SharingProfile != nil { - objectMap["sharingProfile"] = gp.SharingProfile - } - if gp.SoftDeletePolicy != nil { - objectMap["softDeletePolicy"] = gp.SoftDeletePolicy - } - return json.Marshal(objectMap) -} - -// GallerySharingProfileUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type GallerySharingProfileUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(GallerySharingProfileClient) (SharingUpdate, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *GallerySharingProfileUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for GallerySharingProfileUpdateFuture.Result. -func (future *GallerySharingProfileUpdateFuture) result(client GallerySharingProfileClient) (su SharingUpdate, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - su.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.GallerySharingProfileUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if su.Response.Response, err = future.GetResult(sender); err == nil && su.Response.Response.StatusCode != http.StatusNoContent { - su, err = client.UpdateResponder(su.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.GallerySharingProfileUpdateFuture", "Result", su.Response.Response, "Failure responding to request") - } - } - return -} - -// GalleryTargetExtendedLocation ... -type GalleryTargetExtendedLocation struct { - // Name - The name of the region. - Name *string `json:"name,omitempty"` - ExtendedLocation *GalleryExtendedLocation `json:"extendedLocation,omitempty"` - // ExtendedLocationReplicaCount - The number of replicas of the Image Version to be created per extended location. This property is updatable. - ExtendedLocationReplicaCount *int32 `json:"extendedLocationReplicaCount,omitempty"` - // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' - StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` - Encryption *EncryptionImages `json:"encryption,omitempty"` -} - -// GalleryUpdate specifies information about the Shared Image Gallery that you want to update. -type GalleryUpdate struct { - *GalleryProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for GalleryUpdate. -func (gu GalleryUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if gu.GalleryProperties != nil { - objectMap["properties"] = gu.GalleryProperties - } - if gu.Tags != nil { - objectMap["tags"] = gu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for GalleryUpdate struct. -func (gu *GalleryUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var galleryProperties GalleryProperties - err = json.Unmarshal(*v, &galleryProperties) - if err != nil { - return err - } - gu.GalleryProperties = &galleryProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - gu.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - gu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - gu.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - gu.Tags = tags - } - } - } - - return nil -} - -// GrantAccessData data used for requesting a SAS. -type GrantAccessData struct { - // Access - Possible values include: 'None', 'Read', 'Write' - Access AccessLevel `json:"access,omitempty"` - // DurationInSeconds - Time duration in seconds until the SAS access expires. - DurationInSeconds *int32 `json:"durationInSeconds,omitempty"` - // GetSecureVMGuestStateSAS - Set this flag to true to get additional SAS for VM guest state - GetSecureVMGuestStateSAS *bool `json:"getSecureVMGuestStateSAS,omitempty"` -} - -// HardwareProfile specifies the hardware settings for the virtual machine. -type HardwareProfile struct { - // VMSize - Specifies the size of the virtual machine.

    The enum data type is currently deprecated and will be removed by December 23rd 2023.

    Recommended way to get the list of available sizes is using these APIs:

    [List all available virtual machine sizes in an availability set](https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes)

    [List all available virtual machine sizes in a region]( https://docs.microsoft.com/rest/api/compute/resourceskus/list)

    [List all available virtual machine sizes for resizing](https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes). For more information about virtual machine sizes, see [Sizes for virtual machines](https://docs.microsoft.com/azure/virtual-machines/sizes).

    The available VM sizes depend on region and availability set. Possible values include: 'BasicA0', 'BasicA1', 'BasicA2', 'BasicA3', 'BasicA4', 'StandardA0', 'StandardA1', 'StandardA2', 'StandardA3', 'StandardA4', 'StandardA5', 'StandardA6', 'StandardA7', 'StandardA8', 'StandardA9', 'StandardA10', 'StandardA11', 'StandardA1V2', 'StandardA2V2', 'StandardA4V2', 'StandardA8V2', 'StandardA2mV2', 'StandardA4mV2', 'StandardA8mV2', 'StandardB1s', 'StandardB1ms', 'StandardB2s', 'StandardB2ms', 'StandardB4ms', 'StandardB8ms', 'StandardD1', 'StandardD2', 'StandardD3', 'StandardD4', 'StandardD11', 'StandardD12', 'StandardD13', 'StandardD14', 'StandardD1V2', 'StandardD2V2', 'StandardD3V2', 'StandardD4V2', 'StandardD5V2', 'StandardD2V3', 'StandardD4V3', 'StandardD8V3', 'StandardD16V3', 'StandardD32V3', 'StandardD64V3', 'StandardD2sV3', 'StandardD4sV3', 'StandardD8sV3', 'StandardD16sV3', 'StandardD32sV3', 'StandardD64sV3', 'StandardD11V2', 'StandardD12V2', 'StandardD13V2', 'StandardD14V2', 'StandardD15V2', 'StandardDS1', 'StandardDS2', 'StandardDS3', 'StandardDS4', 'StandardDS11', 'StandardDS12', 'StandardDS13', 'StandardDS14', 'StandardDS1V2', 'StandardDS2V2', 'StandardDS3V2', 'StandardDS4V2', 'StandardDS5V2', 'StandardDS11V2', 'StandardDS12V2', 'StandardDS13V2', 'StandardDS14V2', 'StandardDS15V2', 'StandardDS134V2', 'StandardDS132V2', 'StandardDS148V2', 'StandardDS144V2', 'StandardE2V3', 'StandardE4V3', 'StandardE8V3', 'StandardE16V3', 'StandardE32V3', 'StandardE64V3', 'StandardE2sV3', 'StandardE4sV3', 'StandardE8sV3', 'StandardE16sV3', 'StandardE32sV3', 'StandardE64sV3', 'StandardE3216V3', 'StandardE328sV3', 'StandardE6432sV3', 'StandardE6416sV3', 'StandardF1', 'StandardF2', 'StandardF4', 'StandardF8', 'StandardF16', 'StandardF1s', 'StandardF2s', 'StandardF4s', 'StandardF8s', 'StandardF16s', 'StandardF2sV2', 'StandardF4sV2', 'StandardF8sV2', 'StandardF16sV2', 'StandardF32sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardG1', 'StandardG2', 'StandardG3', 'StandardG4', 'StandardG5', 'StandardGS1', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS5', 'StandardGS48', 'StandardGS44', 'StandardGS516', 'StandardGS58', 'StandardH8', 'StandardH16', 'StandardH8m', 'StandardH16m', 'StandardH16r', 'StandardH16mr', 'StandardL4s', 'StandardL8s', 'StandardL16s', 'StandardL32s', 'StandardM64s', 'StandardM64ms', 'StandardM128s', 'StandardM128ms', 'StandardM6432ms', 'StandardM6416ms', 'StandardM12864ms', 'StandardM12832ms', 'StandardNC6', 'StandardNC12', 'StandardNC24', 'StandardNC24r', 'StandardNC6sV2', 'StandardNC12sV2', 'StandardNC24sV2', 'StandardNC24rsV2', 'StandardNC6sV3', 'StandardNC12sV3', 'StandardNC24sV3', 'StandardNC24rsV3', 'StandardND6s', 'StandardND12s', 'StandardND24s', 'StandardND24rs', 'StandardNV6', 'StandardNV12', 'StandardNV24' - VMSize VirtualMachineSizeTypes `json:"vmSize,omitempty"` - // VMSizeProperties - Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2021-07-01.

    This feature is still in preview mode and is not supported for VirtualMachineScaleSet.

    Please follow the instructions in [VM Customization](https://aka.ms/vmcustomization) for more details. - VMSizeProperties *VMSizeProperties `json:"vmSizeProperties,omitempty"` -} - -// Image the source user image virtual hard disk. The virtual hard disk will be copied before being -// attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not -// exist. -type Image struct { - autorest.Response `json:"-"` - *ImageProperties `json:"properties,omitempty"` - // ExtendedLocation - The extended location of the Image. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Image. -func (i Image) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if i.ImageProperties != nil { - objectMap["properties"] = i.ImageProperties - } - if i.ExtendedLocation != nil { - objectMap["extendedLocation"] = i.ExtendedLocation - } - if i.Location != nil { - objectMap["location"] = i.Location - } - if i.Tags != nil { - objectMap["tags"] = i.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Image struct. -func (i *Image) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var imageProperties ImageProperties - err = json.Unmarshal(*v, &imageProperties) - if err != nil { - return err - } - i.ImageProperties = &imageProperties - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - i.ExtendedLocation = &extendedLocation - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - i.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - i.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - i.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - i.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - i.Tags = tags - } - } - } - - return nil -} - -// ImageDataDisk describes a data disk. -type ImageDataDisk struct { - // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. - Lun *int32 `json:"lun,omitempty"` - // Snapshot - The snapshot. - Snapshot *SubResource `json:"snapshot,omitempty"` - // ManagedDisk - The managedDisk. - ManagedDisk *SubResource `json:"managedDisk,omitempty"` - // BlobURI - The Virtual Hard Disk. - BlobURI *string `json:"blobUri,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' - StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` -} - -// ImageDisk describes a image disk. -type ImageDisk struct { - // Snapshot - The snapshot. - Snapshot *SubResource `json:"snapshot,omitempty"` - // ManagedDisk - The managedDisk. - ManagedDisk *SubResource `json:"managedDisk,omitempty"` - // BlobURI - The Virtual Hard Disk. - BlobURI *string `json:"blobUri,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' - StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` -} - -// ImageDiskReference the source image used for creating the disk. -type ImageDiskReference struct { - // ID - A relative uri containing either a Platform Image Repository or user image reference. - ID *string `json:"id,omitempty"` - // Lun - If the disk is created from an image's data disk, this is an index that indicates which of the data disks in the image to use. For OS disks, this field is null. - Lun *int32 `json:"lun,omitempty"` -} - -// ImageListResult the List Image operation response. -type ImageListResult struct { - autorest.Response `json:"-"` - // Value - The list of Images. - Value *[]Image `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images. - NextLink *string `json:"nextLink,omitempty"` -} - -// ImageListResultIterator provides access to a complete listing of Image values. -type ImageListResultIterator struct { - i int - page ImageListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ImageListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImageListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ImageListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ImageListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ImageListResultIterator) Response() ImageListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ImageListResultIterator) Value() Image { - if !iter.page.NotDone() { - return Image{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ImageListResultIterator type. -func NewImageListResultIterator(page ImageListResultPage) ImageListResultIterator { - return ImageListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (ilr ImageListResult) IsEmpty() bool { - return ilr.Value == nil || len(*ilr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (ilr ImageListResult) hasNextLink() bool { - return ilr.NextLink != nil && len(*ilr.NextLink) != 0 -} - -// imageListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (ilr ImageListResult) imageListResultPreparer(ctx context.Context) (*http.Request, error) { - if !ilr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(ilr.NextLink))) -} - -// ImageListResultPage contains a page of Image values. -type ImageListResultPage struct { - fn func(context.Context, ImageListResult) (ImageListResult, error) - ilr ImageListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ImageListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ImageListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.ilr) - if err != nil { - return err - } - page.ilr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ImageListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ImageListResultPage) NotDone() bool { - return !page.ilr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ImageListResultPage) Response() ImageListResult { - return page.ilr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ImageListResultPage) Values() []Image { - if page.ilr.IsEmpty() { - return nil - } - return *page.ilr.Value -} - -// Creates a new instance of the ImageListResultPage type. -func NewImageListResultPage(cur ImageListResult, getNextPage func(context.Context, ImageListResult) (ImageListResult, error)) ImageListResultPage { - return ImageListResultPage{ - fn: getNextPage, - ilr: cur, - } -} - -// ImageOSDisk describes an Operating System disk. -type ImageOSDisk struct { - // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // OsState - The OS State. For managed images, use Generalized. Possible values include: 'Generalized', 'Specialized' - OsState OperatingSystemStateTypes `json:"osState,omitempty"` - // Snapshot - The snapshot. - Snapshot *SubResource `json:"snapshot,omitempty"` - // ManagedDisk - The managedDisk. - ManagedDisk *SubResource `json:"managedDisk,omitempty"` - // BlobURI - The Virtual Hard Disk. - BlobURI *string `json:"blobUri,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // DiskSizeGB - Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' - StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed image disk. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` -} - -// ImageProperties describes the properties of an Image. -type ImageProperties struct { - // SourceVirtualMachine - The source virtual machine from which Image is created. - SourceVirtualMachine *SubResource `json:"sourceVirtualMachine,omitempty"` - // StorageProfile - Specifies the storage settings for the virtual machine disks. - StorageProfile *ImageStorageProfile `json:"storageProfile,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state. - ProvisioningState *string `json:"provisioningState,omitempty"` - // HyperVGeneration - Specifies the HyperVGenerationType of the VirtualMachine created from the image. From API Version 2019-03-01 if the image source is a blob, then we need the user to specify the value, if the source is managed resource like disk or snapshot, we may require the user to specify the property if we cannot deduce it from the source managed resource. Possible values include: 'HyperVGenerationTypesV1', 'HyperVGenerationTypesV2' - HyperVGeneration HyperVGenerationTypes `json:"hyperVGeneration,omitempty"` -} - -// MarshalJSON is the custom marshaler for ImageProperties. -func (IP ImageProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if IP.SourceVirtualMachine != nil { - objectMap["sourceVirtualMachine"] = IP.SourceVirtualMachine - } - if IP.StorageProfile != nil { - objectMap["storageProfile"] = IP.StorageProfile - } - if IP.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = IP.HyperVGeneration - } - return json.Marshal(objectMap) -} - -// ImagePurchasePlan describes the gallery image definition purchase plan. This is used by marketplace -// images. -type ImagePurchasePlan struct { - // Name - The plan ID. - Name *string `json:"name,omitempty"` - // Publisher - The publisher ID. - Publisher *string `json:"publisher,omitempty"` - // Product - The product ID. - Product *string `json:"product,omitempty"` -} - -// ImageReference specifies information about the image to use. You can specify information about platform -// images, marketplace images, or virtual machine images. This element is required when you want to use a -// platform image, marketplace image, or virtual machine image, but is not used in other creation -// operations. NOTE: Image reference publisher and offer can only be set when you create the scale set. -type ImageReference struct { - // Publisher - The image publisher. - Publisher *string `json:"publisher,omitempty"` - // Offer - Specifies the offer of the platform image or marketplace image used to create the virtual machine. - Offer *string `json:"offer,omitempty"` - // Sku - The image SKU. - Sku *string `json:"sku,omitempty"` - // Version - Specifies the version of the platform image or marketplace image used to create the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to use the latest version of an image available at deploy time. Even if you use 'latest', the VM image will not automatically update after deploy time even if a new version becomes available. Please do not use field 'version' for gallery image deployment, gallery image should always use 'id' field for deployment, to use 'latest' version of gallery image, just set '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}' in the 'id' field without version input. - Version *string `json:"version,omitempty"` - // ExactVersion - READ-ONLY; Specifies in decimal numbers, the version of platform image or marketplace image used to create the virtual machine. This readonly field differs from 'version', only if the value specified in 'version' field is 'latest'. - ExactVersion *string `json:"exactVersion,omitempty"` - // SharedGalleryImageID - Specified the shared gallery image unique id for vm deployment. This can be fetched from shared gallery image GET call. - SharedGalleryImageID *string `json:"sharedGalleryImageId,omitempty"` - // CommunityGalleryImageID - Specified the community gallery image unique id for vm deployment. This can be fetched from community gallery image GET call. - CommunityGalleryImageID *string `json:"communityGalleryImageId,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for ImageReference. -func (ir ImageReference) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ir.Publisher != nil { - objectMap["publisher"] = ir.Publisher - } - if ir.Offer != nil { - objectMap["offer"] = ir.Offer - } - if ir.Sku != nil { - objectMap["sku"] = ir.Sku - } - if ir.Version != nil { - objectMap["version"] = ir.Version - } - if ir.SharedGalleryImageID != nil { - objectMap["sharedGalleryImageId"] = ir.SharedGalleryImageID - } - if ir.CommunityGalleryImageID != nil { - objectMap["communityGalleryImageId"] = ir.CommunityGalleryImageID - } - if ir.ID != nil { - objectMap["id"] = ir.ID - } - return json.Marshal(objectMap) -} - -// ImagesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type ImagesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(ImagesClient) (Image, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *ImagesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for ImagesCreateOrUpdateFuture.Result. -func (future *ImagesCreateOrUpdateFuture) result(client ImagesClient) (i Image, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - i.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.ImagesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent { - i, err = client.CreateOrUpdateResponder(i.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request") - } - } - return -} - -// ImagesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. -type ImagesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(ImagesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *ImagesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for ImagesDeleteFuture.Result. -func (future *ImagesDeleteFuture) result(client ImagesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.ImagesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// ImageStorageProfile describes a storage profile. -type ImageStorageProfile struct { - // OsDisk - Specifies information about the operating system disk used by the virtual machine.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - OsDisk *ImageOSDisk `json:"osDisk,omitempty"` - // DataDisks - Specifies the parameters that are used to add a data disk to a virtual machine.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - DataDisks *[]ImageDataDisk `json:"dataDisks,omitempty"` - // ZoneResilient - Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS). - ZoneResilient *bool `json:"zoneResilient,omitempty"` -} - -// ImagesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation. -type ImagesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(ImagesClient) (Image, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *ImagesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for ImagesUpdateFuture.Result. -func (future *ImagesUpdateFuture) result(client ImagesClient) (i Image, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - i.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.ImagesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent { - i, err = client.UpdateResponder(i.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ImagesUpdateFuture", "Result", i.Response.Response, "Failure responding to request") - } - } - return -} - -// ImageUpdate the source user image virtual hard disk. Only tags may be updated. -type ImageUpdate struct { - *ImageProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ImageUpdate. -func (iu ImageUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if iu.ImageProperties != nil { - objectMap["properties"] = iu.ImageProperties - } - if iu.Tags != nil { - objectMap["tags"] = iu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ImageUpdate struct. -func (iu *ImageUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var imageProperties ImageProperties - err = json.Unmarshal(*v, &imageProperties) - if err != nil { - return err - } - iu.ImageProperties = &imageProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - iu.Tags = tags - } - } - } - - return nil -} - -// InnerError inner error details. -type InnerError struct { - // Exceptiontype - The exception type. - Exceptiontype *string `json:"exceptiontype,omitempty"` - // Errordetail - The internal error message or exception dump. - Errordetail *string `json:"errordetail,omitempty"` -} - -// InstanceSku ... -type InstanceSku struct { - // Name - READ-ONLY; The sku name. - Name *string `json:"name,omitempty"` - // Tier - READ-ONLY; The tier of the cloud service role instance. - Tier *string `json:"tier,omitempty"` -} - -// MarshalJSON is the custom marshaler for InstanceSku. -func (is InstanceSku) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// InstanceViewStatus instance view status. -type InstanceViewStatus struct { - // Code - The status code. - Code *string `json:"code,omitempty"` - // Level - The level code. Possible values include: 'Info', 'Warning', 'Error' - Level StatusLevelTypes `json:"level,omitempty"` - // DisplayStatus - The short localizable label for the status. - DisplayStatus *string `json:"displayStatus,omitempty"` - // Message - The detailed status message, including for alerts and error messages. - Message *string `json:"message,omitempty"` - // Time - The time of the status. - Time *date.Time `json:"time,omitempty"` -} - -// InstanceViewStatusesSummary instance view statuses. -type InstanceViewStatusesSummary struct { - // StatusesSummary - READ-ONLY - StatusesSummary *[]StatusCodeCount `json:"statusesSummary,omitempty"` -} - -// MarshalJSON is the custom marshaler for InstanceViewStatusesSummary. -func (ivss InstanceViewStatusesSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// KeyForDiskEncryptionSet key Vault Key Url to be used for server side encryption of Managed Disks and -// Snapshots -type KeyForDiskEncryptionSet struct { - // SourceVault - Resource id of the KeyVault containing the key or secret. This property is optional and cannot be used if the KeyVault subscription is not the same as the Disk Encryption Set subscription. - SourceVault *SourceVault `json:"sourceVault,omitempty"` - // KeyURL - Fully versioned Key Url pointing to a key in KeyVault. Version segment of the Url is required regardless of rotationToLatestKeyVersionEnabled value. - KeyURL *string `json:"keyUrl,omitempty"` -} - -// KeyVaultAndKeyReference key Vault Key Url and vault id of KeK, KeK is optional and when provided is used -// to unwrap the encryptionKey -type KeyVaultAndKeyReference struct { - // SourceVault - Resource id of the KeyVault containing the key or secret - SourceVault *SourceVault `json:"sourceVault,omitempty"` - // KeyURL - Url pointing to a key or secret in KeyVault - KeyURL *string `json:"keyUrl,omitempty"` -} - -// KeyVaultAndSecretReference key Vault Secret Url and vault id of the encryption key -type KeyVaultAndSecretReference struct { - // SourceVault - Resource id of the KeyVault containing the key or secret - SourceVault *SourceVault `json:"sourceVault,omitempty"` - // SecretURL - Url pointing to a key or secret in KeyVault - SecretURL *string `json:"secretUrl,omitempty"` -} - -// KeyVaultKeyReference describes a reference to Key Vault Key -type KeyVaultKeyReference struct { - // KeyURL - The URL referencing a key encryption key in Key Vault. - KeyURL *string `json:"keyUrl,omitempty"` - // SourceVault - The relative URL of the Key Vault containing the key. - SourceVault *SubResource `json:"sourceVault,omitempty"` -} - -// KeyVaultSecretReference describes a reference to Key Vault Secret -type KeyVaultSecretReference struct { - // SecretURL - The URL referencing a secret in a Key Vault. - SecretURL *string `json:"secretUrl,omitempty"` - // SourceVault - The relative URL of the Key Vault containing the secret. - SourceVault *SubResource `json:"sourceVault,omitempty"` -} - -// LastPatchInstallationSummary describes the properties of the last installed patch summary. -type LastPatchInstallationSummary struct { - // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' - Status PatchOperationStatus `json:"status,omitempty"` - // InstallationActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. - InstallationActivityID *string `json:"installationActivityId,omitempty"` - // MaintenanceWindowExceeded - READ-ONLY; Describes whether the operation ran out of time before it completed all its intended actions - MaintenanceWindowExceeded *bool `json:"maintenanceWindowExceeded,omitempty"` - // NotSelectedPatchCount - READ-ONLY; The number of all available patches but not going to be installed because it didn't match a classification or inclusion list entry. - NotSelectedPatchCount *int32 `json:"notSelectedPatchCount,omitempty"` - // ExcludedPatchCount - READ-ONLY; The number of all available patches but excluded explicitly by a customer-specified exclusion list match. - ExcludedPatchCount *int32 `json:"excludedPatchCount,omitempty"` - // PendingPatchCount - READ-ONLY; The number of all available patches expected to be installed over the course of the patch installation operation. - PendingPatchCount *int32 `json:"pendingPatchCount,omitempty"` - // InstalledPatchCount - READ-ONLY; The count of patches that successfully installed. - InstalledPatchCount *int32 `json:"installedPatchCount,omitempty"` - // FailedPatchCount - READ-ONLY; The count of patches that failed installation. - FailedPatchCount *int32 `json:"failedPatchCount,omitempty"` - // StartTime - READ-ONLY; The UTC timestamp when the operation began. - StartTime *date.Time `json:"startTime,omitempty"` - // LastModifiedTime - READ-ONLY; The UTC timestamp when the operation began. - LastModifiedTime *date.Time `json:"lastModifiedTime,omitempty"` - // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. - Error *APIError `json:"error,omitempty"` -} - -// MarshalJSON is the custom marshaler for LastPatchInstallationSummary. -func (lpis LastPatchInstallationSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LinuxConfiguration specifies the Linux operating system settings on the virtual machine.

    For a -// list of supported Linux distributions, see [Linux on Azure-Endorsed -// Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). -type LinuxConfiguration struct { - // DisablePasswordAuthentication - Specifies whether password authentication should be disabled. - DisablePasswordAuthentication *bool `json:"disablePasswordAuthentication,omitempty"` - // SSH - Specifies the ssh key configuration for a Linux OS. - SSH *SSHConfiguration `json:"ssh,omitempty"` - // ProvisionVMAgent - Indicates whether virtual machine agent should be provisioned on the virtual machine.

    When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later. - ProvisionVMAgent *bool `json:"provisionVMAgent,omitempty"` - // PatchSettings - [Preview Feature] Specifies settings related to VM Guest Patching on Linux. - PatchSettings *LinuxPatchSettings `json:"patchSettings,omitempty"` -} - -// LinuxParameters input for InstallPatches on a Linux VM, as directly received by the API -type LinuxParameters struct { - // ClassificationsToInclude - The update classifications to select when installing patches for Linux. - ClassificationsToInclude *[]VMGuestPatchClassificationLinux `json:"classificationsToInclude,omitempty"` - // PackageNameMasksToInclude - packages to include in the patch operation. Format: packageName_packageVersion - PackageNameMasksToInclude *[]string `json:"packageNameMasksToInclude,omitempty"` - // PackageNameMasksToExclude - packages to exclude in the patch operation. Format: packageName_packageVersion - PackageNameMasksToExclude *[]string `json:"packageNameMasksToExclude,omitempty"` - // MaintenanceRunID - This is used as a maintenance run identifier for Auto VM Guest Patching in Linux. - MaintenanceRunID *string `json:"maintenanceRunId,omitempty"` -} - -// LinuxPatchSettings specifies settings related to VM Guest Patching on Linux. -type LinuxPatchSettings struct { - // PatchMode - Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual machines associated to virtual machine scale set with OrchestrationMode as Flexible.

    Possible values are:

    **ImageDefault** - The virtual machine's default patching configuration is used.

    **AutomaticByPlatform** - The virtual machine will be automatically updated by the platform. The property provisionVMAgent must be true. Possible values include: 'LinuxVMGuestPatchModeImageDefault', 'LinuxVMGuestPatchModeAutomaticByPlatform' - PatchMode LinuxVMGuestPatchMode `json:"patchMode,omitempty"` - // AssessmentMode - Specifies the mode of VM Guest Patch Assessment for the IaaS virtual machine.

    Possible values are:

    **ImageDefault** - You control the timing of patch assessments on a virtual machine.

    **AutomaticByPlatform** - The platform will trigger periodic patch assessments. The property provisionVMAgent must be true. Possible values include: 'ImageDefault', 'AutomaticByPlatform' - AssessmentMode LinuxPatchAssessmentMode `json:"assessmentMode,omitempty"` - // AutomaticByPlatformSettings - Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Linux. - AutomaticByPlatformSettings *LinuxVMGuestPatchAutomaticByPlatformSettings `json:"automaticByPlatformSettings,omitempty"` -} - -// LinuxVMGuestPatchAutomaticByPlatformSettings specifies additional settings to be applied when patch mode -// AutomaticByPlatform is selected in Linux patch settings. -type LinuxVMGuestPatchAutomaticByPlatformSettings struct { - // RebootSetting - Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Possible values include: 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingUnknown', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingIfRequired', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingNever', 'LinuxVMGuestPatchAutomaticByPlatformRebootSettingAlways' - RebootSetting LinuxVMGuestPatchAutomaticByPlatformRebootSetting `json:"rebootSetting,omitempty"` -} - -// ListUsagesResult the List Usages operation response. -type ListUsagesResult struct { - autorest.Response `json:"-"` - // Value - The list of compute resource usages. - Value *[]Usage `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information. - NextLink *string `json:"nextLink,omitempty"` -} - -// ListUsagesResultIterator provides access to a complete listing of Usage values. -type ListUsagesResultIterator struct { - i int - page ListUsagesResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ListUsagesResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListUsagesResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ListUsagesResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ListUsagesResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ListUsagesResultIterator) Response() ListUsagesResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ListUsagesResultIterator) Value() Usage { - if !iter.page.NotDone() { - return Usage{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ListUsagesResultIterator type. -func NewListUsagesResultIterator(page ListUsagesResultPage) ListUsagesResultIterator { - return ListUsagesResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (lur ListUsagesResult) IsEmpty() bool { - return lur.Value == nil || len(*lur.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (lur ListUsagesResult) hasNextLink() bool { - return lur.NextLink != nil && len(*lur.NextLink) != 0 -} - -// listUsagesResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (lur ListUsagesResult) listUsagesResultPreparer(ctx context.Context) (*http.Request, error) { - if !lur.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(lur.NextLink))) -} - -// ListUsagesResultPage contains a page of Usage values. -type ListUsagesResultPage struct { - fn func(context.Context, ListUsagesResult) (ListUsagesResult, error) - lur ListUsagesResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ListUsagesResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ListUsagesResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.lur) - if err != nil { - return err - } - page.lur = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ListUsagesResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ListUsagesResultPage) NotDone() bool { - return !page.lur.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ListUsagesResultPage) Response() ListUsagesResult { - return page.lur -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ListUsagesResultPage) Values() []Usage { - if page.lur.IsEmpty() { - return nil - } - return *page.lur.Value -} - -// Creates a new instance of the ListUsagesResultPage type. -func NewListUsagesResultPage(cur ListUsagesResult, getNextPage func(context.Context, ListUsagesResult) (ListUsagesResult, error)) ListUsagesResultPage { - return ListUsagesResultPage{ - fn: getNextPage, - lur: cur, - } -} - -// ListVirtualMachineExtensionImage ... -type ListVirtualMachineExtensionImage struct { - autorest.Response `json:"-"` - Value *[]VirtualMachineExtensionImage `json:"value,omitempty"` -} - -// ListVirtualMachineImageResource ... -type ListVirtualMachineImageResource struct { - autorest.Response `json:"-"` - Value *[]VirtualMachineImageResource `json:"value,omitempty"` -} - -// LoadBalancerConfiguration describes the load balancer configuration. -type LoadBalancerConfiguration struct { - // ID - Resource Id - ID *string `json:"id,omitempty"` - // Name - The name of the Load balancer - Name *string `json:"name,omitempty"` - // Properties - Properties of the load balancer configuration. - Properties *LoadBalancerConfigurationProperties `json:"properties,omitempty"` -} - -// LoadBalancerConfigurationProperties ... -type LoadBalancerConfigurationProperties struct { - // FrontendIPConfigurations - Specifies the frontend IP to be used for the load balancer. Only IPv4 frontend IP address is supported. Each load balancer configuration must have exactly one frontend IP configuration. - FrontendIPConfigurations *[]LoadBalancerFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"` -} - -// LoadBalancerFrontendIPConfiguration ... -type LoadBalancerFrontendIPConfiguration struct { - // Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource. - Name *string `json:"name,omitempty"` - // Properties - Properties of load balancer frontend ip configuration. - Properties *LoadBalancerFrontendIPConfigurationProperties `json:"properties,omitempty"` -} - -// LoadBalancerFrontendIPConfigurationProperties describes a cloud service IP Configuration -type LoadBalancerFrontendIPConfigurationProperties struct { - // PublicIPAddress - The reference to the public ip address resource. - PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"` - // Subnet - The reference to the virtual network subnet resource. - Subnet *SubResource `json:"subnet,omitempty"` - // PrivateIPAddress - The virtual network private IP address of the IP configuration. - PrivateIPAddress *string `json:"privateIPAddress,omitempty"` -} - -// LogAnalyticsExportRequestRateByIntervalFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type LogAnalyticsExportRequestRateByIntervalFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(LogAnalyticsClient) (LogAnalyticsOperationResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LogAnalyticsExportRequestRateByIntervalFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for LogAnalyticsExportRequestRateByIntervalFuture.Result. -func (future *LogAnalyticsExportRequestRateByIntervalFuture) result(client LogAnalyticsClient) (laor LogAnalyticsOperationResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportRequestRateByIntervalFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - laor.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.LogAnalyticsExportRequestRateByIntervalFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if laor.Response.Response, err = future.GetResult(sender); err == nil && laor.Response.Response.StatusCode != http.StatusNoContent { - laor, err = client.ExportRequestRateByIntervalResponder(laor.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportRequestRateByIntervalFuture", "Result", laor.Response.Response, "Failure responding to request") - } - } - return -} - -// LogAnalyticsExportThrottledRequestsFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type LogAnalyticsExportThrottledRequestsFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(LogAnalyticsClient) (LogAnalyticsOperationResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *LogAnalyticsExportThrottledRequestsFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for LogAnalyticsExportThrottledRequestsFuture.Result. -func (future *LogAnalyticsExportThrottledRequestsFuture) result(client LogAnalyticsClient) (laor LogAnalyticsOperationResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportThrottledRequestsFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - laor.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.LogAnalyticsExportThrottledRequestsFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if laor.Response.Response, err = future.GetResult(sender); err == nil && laor.Response.Response.StatusCode != http.StatusNoContent { - laor, err = client.ExportThrottledRequestsResponder(laor.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.LogAnalyticsExportThrottledRequestsFuture", "Result", laor.Response.Response, "Failure responding to request") - } - } - return -} - -// LogAnalyticsInputBase api input base class for LogAnalytics Api. -type LogAnalyticsInputBase struct { - // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. - BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` - // FromTime - From time of the query - FromTime *date.Time `json:"fromTime,omitempty"` - // ToTime - To time of the query - ToTime *date.Time `json:"toTime,omitempty"` - // GroupByThrottlePolicy - Group query result by Throttle Policy applied. - GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` - // GroupByOperationName - Group query result by Operation Name. - GroupByOperationName *bool `json:"groupByOperationName,omitempty"` - // GroupByResourceName - Group query result by Resource Name. - GroupByResourceName *bool `json:"groupByResourceName,omitempty"` - // GroupByClientApplicationID - Group query result by Client Application ID. - GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` - // GroupByUserAgent - Group query result by User Agent. - GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` -} - -// LogAnalyticsOperationResult logAnalytics operation status response -type LogAnalyticsOperationResult struct { - autorest.Response `json:"-"` - // Properties - READ-ONLY; LogAnalyticsOutput - Properties *LogAnalyticsOutput `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for LogAnalyticsOperationResult. -func (laor LogAnalyticsOperationResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LogAnalyticsOutput logAnalytics output properties -type LogAnalyticsOutput struct { - // Output - READ-ONLY; Output file Uri path to blob container. - Output *string `json:"output,omitempty"` -} - -// MarshalJSON is the custom marshaler for LogAnalyticsOutput. -func (lao LogAnalyticsOutput) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// MaintenanceRedeployStatus maintenance Operation Status. -type MaintenanceRedeployStatus struct { - // IsCustomerInitiatedMaintenanceAllowed - True, if customer is allowed to perform Maintenance. - IsCustomerInitiatedMaintenanceAllowed *bool `json:"isCustomerInitiatedMaintenanceAllowed,omitempty"` - // PreMaintenanceWindowStartTime - Start Time for the Pre Maintenance Window. - PreMaintenanceWindowStartTime *date.Time `json:"preMaintenanceWindowStartTime,omitempty"` - // PreMaintenanceWindowEndTime - End Time for the Pre Maintenance Window. - PreMaintenanceWindowEndTime *date.Time `json:"preMaintenanceWindowEndTime,omitempty"` - // MaintenanceWindowStartTime - Start Time for the Maintenance Window. - MaintenanceWindowStartTime *date.Time `json:"maintenanceWindowStartTime,omitempty"` - // MaintenanceWindowEndTime - End Time for the Maintenance Window. - MaintenanceWindowEndTime *date.Time `json:"maintenanceWindowEndTime,omitempty"` - // LastOperationResultCode - The Last Maintenance Operation Result Code. Possible values include: 'MaintenanceOperationResultCodeTypesNone', 'MaintenanceOperationResultCodeTypesRetryLater', 'MaintenanceOperationResultCodeTypesMaintenanceAborted', 'MaintenanceOperationResultCodeTypesMaintenanceCompleted' - LastOperationResultCode MaintenanceOperationResultCodeTypes `json:"lastOperationResultCode,omitempty"` - // LastOperationMessage - Message returned for the last Maintenance Operation. - LastOperationMessage *string `json:"lastOperationMessage,omitempty"` -} - -// ManagedArtifact the managed artifact. -type ManagedArtifact struct { - // ID - The managed artifact id. - ID *string `json:"id,omitempty"` -} - -// ManagedDiskParameters the parameters of a managed disk. -type ManagedDiskParameters struct { - // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' - StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` - // SecurityProfile - Specifies the security profile for the managed disk. - SecurityProfile *VMDiskSecurityProfile `json:"securityProfile,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// NetworkInterfaceReference describes a network interface reference. -type NetworkInterfaceReference struct { - *NetworkInterfaceReferenceProperties `json:"properties,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for NetworkInterfaceReference. -func (nir NetworkInterfaceReference) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if nir.NetworkInterfaceReferenceProperties != nil { - objectMap["properties"] = nir.NetworkInterfaceReferenceProperties - } - if nir.ID != nil { - objectMap["id"] = nir.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for NetworkInterfaceReference struct. -func (nir *NetworkInterfaceReference) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var networkInterfaceReferenceProperties NetworkInterfaceReferenceProperties - err = json.Unmarshal(*v, &networkInterfaceReferenceProperties) - if err != nil { - return err - } - nir.NetworkInterfaceReferenceProperties = &networkInterfaceReferenceProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - nir.ID = &ID - } - } - } - - return nil -} - -// NetworkInterfaceReferenceProperties describes a network interface reference properties. -type NetworkInterfaceReferenceProperties struct { - // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. - Primary *bool `json:"primary,omitempty"` - // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` -} - -// NetworkProfile specifies the network interfaces or the networking configuration of the virtual machine. -type NetworkProfile struct { - // NetworkInterfaces - Specifies the list of resource Ids for the network interfaces associated with the virtual machine. - NetworkInterfaces *[]NetworkInterfaceReference `json:"networkInterfaces,omitempty"` - // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' - NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` - // NetworkInterfaceConfigurations - Specifies the networking configurations that will be used to create the virtual machine networking resources. - NetworkInterfaceConfigurations *[]VirtualMachineNetworkInterfaceConfiguration `json:"networkInterfaceConfigurations,omitempty"` -} - -// OperationListResult the List Compute Operation operation response. -type OperationListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of compute operations - Value *[]OperationValue `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for OperationListResult. -func (olr OperationListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OperationValue describes the properties of a Compute Operation value. -type OperationValue struct { - // Origin - READ-ONLY; The origin of the compute operation. - Origin *string `json:"origin,omitempty"` - // Name - READ-ONLY; The name of the compute operation. - Name *string `json:"name,omitempty"` - *OperationValueDisplay `json:"display,omitempty"` -} - -// MarshalJSON is the custom marshaler for OperationValue. -func (ov OperationValue) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ov.OperationValueDisplay != nil { - objectMap["display"] = ov.OperationValueDisplay - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for OperationValue struct. -func (ov *OperationValue) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "origin": - if v != nil { - var origin string - err = json.Unmarshal(*v, &origin) - if err != nil { - return err - } - ov.Origin = &origin - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - ov.Name = &name - } - case "display": - if v != nil { - var operationValueDisplay OperationValueDisplay - err = json.Unmarshal(*v, &operationValueDisplay) - if err != nil { - return err - } - ov.OperationValueDisplay = &operationValueDisplay - } - } - } - - return nil -} - -// OperationValueDisplay describes the properties of a Compute Operation Value Display. -type OperationValueDisplay struct { - // Operation - READ-ONLY; The display name of the compute operation. - Operation *string `json:"operation,omitempty"` - // Resource - READ-ONLY; The display name of the resource the operation applies to. - Resource *string `json:"resource,omitempty"` - // Description - READ-ONLY; The description of the operation. - Description *string `json:"description,omitempty"` - // Provider - READ-ONLY; The resource provider for the operation. - Provider *string `json:"provider,omitempty"` -} - -// MarshalJSON is the custom marshaler for OperationValueDisplay. -func (ovd OperationValueDisplay) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OrchestrationServiceStateInput the input for OrchestrationServiceState -type OrchestrationServiceStateInput struct { - // ServiceName - The name of the service. Possible values include: 'AutomaticRepairs' - ServiceName OrchestrationServiceNames `json:"serviceName,omitempty"` - // Action - The action to be performed. Possible values include: 'Resume', 'Suspend' - Action OrchestrationServiceStateAction `json:"action,omitempty"` -} - -// OrchestrationServiceSummary summary for an orchestration service of a virtual machine scale set. -type OrchestrationServiceSummary struct { - // ServiceName - READ-ONLY; The name of the service. Possible values include: 'AutomaticRepairs', 'DummyOrchestrationServiceName' - ServiceName OrchestrationServiceNames `json:"serviceName,omitempty"` - // ServiceState - READ-ONLY; The current state of the service. Possible values include: 'NotRunning', 'Running', 'Suspended' - ServiceState OrchestrationServiceState `json:"serviceState,omitempty"` -} - -// MarshalJSON is the custom marshaler for OrchestrationServiceSummary. -func (oss OrchestrationServiceSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OSDisk specifies information about the operating system disk used by the virtual machine.

    For -// more information about disks, see [About disks and VHDs for Azure virtual -// machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). -type OSDisk struct { - // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // EncryptionSettings - Specifies the encryption settings for the OS Disk.

    Minimum api-version: 2015-06-15 - EncryptionSettings *DiskEncryptionSettings `json:"encryptionSettings,omitempty"` - // Name - The disk name. - Name *string `json:"name,omitempty"` - // Vhd - The virtual hard disk. - Vhd *VirtualHardDisk `json:"vhd,omitempty"` - // Image - The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist. - Image *VirtualHardDisk `json:"image,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None** for Standard storage. **ReadOnly** for Premium storage. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. - WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` - // DiffDiskSettings - Specifies the ephemeral Disk Settings for the operating system disk used by the virtual machine. - DiffDiskSettings *DiffDiskSettings `json:"diffDiskSettings,omitempty"` - // CreateOption - Specifies how the virtual machine should be created.

    Possible values are:

    **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.

    **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' - CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` - // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // ManagedDisk - The managed disk parameters. - ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` - // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VM deletion.

    Possible values:

    **Delete** If this value is used, the OS disk is deleted when VM is deleted.

    **Detach** If this value is used, the os disk is retained after VM is deleted.

    The default value is set to **detach**. For an ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' - DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` -} - -// OSDiskImage contains the os disk image information. -type OSDiskImage struct { - // OperatingSystem - The operating system of the osDiskImage. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OperatingSystem OperatingSystemTypes `json:"operatingSystem,omitempty"` -} - -// OSDiskImageEncryption contains encryption settings for an OS disk image. -type OSDiskImageEncryption struct { - // SecurityProfile - This property specifies the security profile of an OS disk image. - SecurityProfile *OSDiskImageSecurityProfile `json:"securityProfile,omitempty"` - // DiskEncryptionSetID - A relative URI containing the resource ID of the disk encryption set. - DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"` -} - -// OSDiskImageSecurityProfile contains security profile for an OS disk image. -type OSDiskImageSecurityProfile struct { - // ConfidentialVMEncryptionType - confidential VM encryption types. Possible values include: 'EncryptedVMGuestStateOnlyWithPmk', 'EncryptedWithPmk', 'EncryptedWithCmk' - ConfidentialVMEncryptionType ConfidentialVMEncryptionType `json:"confidentialVMEncryptionType,omitempty"` - // SecureVMDiskEncryptionSetID - secure VM disk encryption set id - SecureVMDiskEncryptionSetID *string `json:"secureVMDiskEncryptionSetId,omitempty"` -} - -// OSFamily describes a cloud service OS family. -type OSFamily struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Location - READ-ONLY; Resource location. - Location *string `json:"location,omitempty"` - Properties *OSFamilyProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for OSFamily. -func (of OSFamily) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if of.Properties != nil { - objectMap["properties"] = of.Properties - } - return json.Marshal(objectMap) -} - -// OSFamilyListResult ... -type OSFamilyListResult struct { - autorest.Response `json:"-"` - Value *[]OSFamily `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// OSFamilyListResultIterator provides access to a complete listing of OSFamily values. -type OSFamilyListResultIterator struct { - i int - page OSFamilyListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *OSFamilyListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OSFamilyListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *OSFamilyListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter OSFamilyListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter OSFamilyListResultIterator) Response() OSFamilyListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter OSFamilyListResultIterator) Value() OSFamily { - if !iter.page.NotDone() { - return OSFamily{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the OSFamilyListResultIterator type. -func NewOSFamilyListResultIterator(page OSFamilyListResultPage) OSFamilyListResultIterator { - return OSFamilyListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (oflr OSFamilyListResult) IsEmpty() bool { - return oflr.Value == nil || len(*oflr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (oflr OSFamilyListResult) hasNextLink() bool { - return oflr.NextLink != nil && len(*oflr.NextLink) != 0 -} - -// oSFamilyListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (oflr OSFamilyListResult) oSFamilyListResultPreparer(ctx context.Context) (*http.Request, error) { - if !oflr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(oflr.NextLink))) -} - -// OSFamilyListResultPage contains a page of OSFamily values. -type OSFamilyListResultPage struct { - fn func(context.Context, OSFamilyListResult) (OSFamilyListResult, error) - oflr OSFamilyListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *OSFamilyListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OSFamilyListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.oflr) - if err != nil { - return err - } - page.oflr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *OSFamilyListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page OSFamilyListResultPage) NotDone() bool { - return !page.oflr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page OSFamilyListResultPage) Response() OSFamilyListResult { - return page.oflr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page OSFamilyListResultPage) Values() []OSFamily { - if page.oflr.IsEmpty() { - return nil - } - return *page.oflr.Value -} - -// Creates a new instance of the OSFamilyListResultPage type. -func NewOSFamilyListResultPage(cur OSFamilyListResult, getNextPage func(context.Context, OSFamilyListResult) (OSFamilyListResult, error)) OSFamilyListResultPage { - return OSFamilyListResultPage{ - fn: getNextPage, - oflr: cur, - } -} - -// OSFamilyProperties OS family properties. -type OSFamilyProperties struct { - // Name - READ-ONLY; The OS family name. - Name *string `json:"name,omitempty"` - // Label - READ-ONLY; The OS family label. - Label *string `json:"label,omitempty"` - // Versions - READ-ONLY; List of OS versions belonging to this family. - Versions *[]OSVersionPropertiesBase `json:"versions,omitempty"` -} - -// MarshalJSON is the custom marshaler for OSFamilyProperties. -func (ofp OSFamilyProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OSProfile specifies the operating system settings for the virtual machine. Some of the settings cannot -// be changed once VM is provisioned. -type OSProfile struct { - // ComputerName - Specifies the host OS name of the virtual machine.

    This name cannot be updated after the VM is created.

    **Max-length (Windows):** 15 characters

    **Max-length (Linux):** 64 characters.

    For naming conventions and restrictions see [Azure infrastructure services implementation guidelines](https://docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules). - ComputerName *string `json:"computerName,omitempty"` - // AdminUsername - Specifies the name of the administrator account.

    This property cannot be updated after the VM is created.

    **Windows-only restriction:** Cannot end in "."

    **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".

    **Minimum-length (Linux):** 1 character

    **Max-length (Linux):** 64 characters

    **Max-length (Windows):** 20 characters. - AdminUsername *string `json:"adminUsername,omitempty"` - // AdminPassword - Specifies the password of the administrator account.

    **Minimum-length (Windows):** 8 characters

    **Minimum-length (Linux):** 6 characters

    **Max-length (Windows):** 123 characters

    **Max-length (Linux):** 72 characters

    **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled
    Has lower characters
    Has upper characters
    Has a digit
    Has a special character (Regex match [\W_])

    **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!"

    For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/reset-rdp)

    For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/troubleshoot-ssh-connection) - AdminPassword *string `json:"adminPassword,omitempty"` - // CustomData - Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes.

    **Note: Do not pass any secrets or passwords in customData property**

    This property cannot be updated after the VM is created.

    customData is passed to the VM to be saved as a file, for more information see [Custom Data on Azure VMs](https://azure.microsoft.com/blog/custom-data-and-cloud-init-on-windows-azure/)

    For using cloud-init for your Linux VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/linux/using-cloud-init) - CustomData *string `json:"customData,omitempty"` - // WindowsConfiguration - Specifies Windows operating system settings on the virtual machine. - WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` - // LinuxConfiguration - Specifies the Linux operating system settings on the virtual machine.

    For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). - LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` - // Secrets - Specifies set of certificates that should be installed onto the virtual machine. To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). - Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` - // AllowExtensionOperations - Specifies whether extension operations should be allowed on the virtual machine.

    This may only be set to False when no extensions are present on the virtual machine. - AllowExtensionOperations *bool `json:"allowExtensionOperations,omitempty"` - // RequireGuestProvisionSignal - Optional property which must either be set to True or omitted. - RequireGuestProvisionSignal *bool `json:"requireGuestProvisionSignal,omitempty"` -} - -// OSVersion describes a cloud service OS version. -type OSVersion struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Location - READ-ONLY; Resource location. - Location *string `json:"location,omitempty"` - Properties *OSVersionProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for OSVersion. -func (ov OSVersion) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ov.Properties != nil { - objectMap["properties"] = ov.Properties - } - return json.Marshal(objectMap) -} - -// OSVersionListResult ... -type OSVersionListResult struct { - autorest.Response `json:"-"` - Value *[]OSVersion `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// OSVersionListResultIterator provides access to a complete listing of OSVersion values. -type OSVersionListResultIterator struct { - i int - page OSVersionListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *OSVersionListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OSVersionListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *OSVersionListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter OSVersionListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter OSVersionListResultIterator) Response() OSVersionListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter OSVersionListResultIterator) Value() OSVersion { - if !iter.page.NotDone() { - return OSVersion{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the OSVersionListResultIterator type. -func NewOSVersionListResultIterator(page OSVersionListResultPage) OSVersionListResultIterator { - return OSVersionListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (ovlr OSVersionListResult) IsEmpty() bool { - return ovlr.Value == nil || len(*ovlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (ovlr OSVersionListResult) hasNextLink() bool { - return ovlr.NextLink != nil && len(*ovlr.NextLink) != 0 -} - -// oSVersionListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (ovlr OSVersionListResult) oSVersionListResultPreparer(ctx context.Context) (*http.Request, error) { - if !ovlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(ovlr.NextLink))) -} - -// OSVersionListResultPage contains a page of OSVersion values. -type OSVersionListResultPage struct { - fn func(context.Context, OSVersionListResult) (OSVersionListResult, error) - ovlr OSVersionListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *OSVersionListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OSVersionListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.ovlr) - if err != nil { - return err - } - page.ovlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *OSVersionListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page OSVersionListResultPage) NotDone() bool { - return !page.ovlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page OSVersionListResultPage) Response() OSVersionListResult { - return page.ovlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page OSVersionListResultPage) Values() []OSVersion { - if page.ovlr.IsEmpty() { - return nil - } - return *page.ovlr.Value -} - -// Creates a new instance of the OSVersionListResultPage type. -func NewOSVersionListResultPage(cur OSVersionListResult, getNextPage func(context.Context, OSVersionListResult) (OSVersionListResult, error)) OSVersionListResultPage { - return OSVersionListResultPage{ - fn: getNextPage, - ovlr: cur, - } -} - -// OSVersionProperties OS version properties. -type OSVersionProperties struct { - // Family - READ-ONLY; The family of this OS version. - Family *string `json:"family,omitempty"` - // FamilyLabel - READ-ONLY; The family label of this OS version. - FamilyLabel *string `json:"familyLabel,omitempty"` - // Version - READ-ONLY; The OS version. - Version *string `json:"version,omitempty"` - // Label - READ-ONLY; The OS version label. - Label *string `json:"label,omitempty"` - // IsDefault - READ-ONLY; Specifies whether this is the default OS version for its family. - IsDefault *bool `json:"isDefault,omitempty"` - // IsActive - READ-ONLY; Specifies whether this OS version is active. - IsActive *bool `json:"isActive,omitempty"` -} - -// MarshalJSON is the custom marshaler for OSVersionProperties. -func (ovp OSVersionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OSVersionPropertiesBase configuration view of an OS version. -type OSVersionPropertiesBase struct { - // Version - READ-ONLY; The OS version. - Version *string `json:"version,omitempty"` - // Label - READ-ONLY; The OS version label. - Label *string `json:"label,omitempty"` - // IsDefault - READ-ONLY; Specifies whether this is the default OS version for its family. - IsDefault *bool `json:"isDefault,omitempty"` - // IsActive - READ-ONLY; Specifies whether this OS version is active. - IsActive *bool `json:"isActive,omitempty"` -} - -// MarshalJSON is the custom marshaler for OSVersionPropertiesBase. -func (ovpb OSVersionPropertiesBase) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PatchInstallationDetail information about a specific patch that was encountered during an installation -// action. -type PatchInstallationDetail struct { - // PatchID - READ-ONLY; A unique identifier for the patch. - PatchID *string `json:"patchId,omitempty"` - // Name - READ-ONLY; The friendly name of the patch. - Name *string `json:"name,omitempty"` - // Version - READ-ONLY; The version string of the package. It may conform to Semantic Versioning. Only applies to Linux. - Version *string `json:"version,omitempty"` - // KbID - READ-ONLY; The KBID of the patch. Only applies to Windows patches. - KbID *string `json:"kbId,omitempty"` - // Classifications - READ-ONLY; The classification(s) of the patch as provided by the patch publisher. - Classifications *[]string `json:"classifications,omitempty"` - // InstallationState - READ-ONLY; The state of the patch after the installation operation completed. Possible values include: 'PatchInstallationStateUnknown', 'PatchInstallationStateInstalled', 'PatchInstallationStateFailed', 'PatchInstallationStateExcluded', 'PatchInstallationStateNotSelected', 'PatchInstallationStatePending' - InstallationState PatchInstallationState `json:"installationState,omitempty"` -} - -// MarshalJSON is the custom marshaler for PatchInstallationDetail. -func (pid PatchInstallationDetail) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PatchSettings specifies settings related to VM Guest Patching on Windows. -type PatchSettings struct { - // PatchMode - Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual machines associated to virtual machine scale set with OrchestrationMode as Flexible.

    Possible values are:

    **Manual** - You control the application of patches to a virtual machine. You do this by applying patches manually inside the VM. In this mode, automatic updates are disabled; the property WindowsConfiguration.enableAutomaticUpdates must be false

    **AutomaticByOS** - The virtual machine will automatically be updated by the OS. The property WindowsConfiguration.enableAutomaticUpdates must be true.

    **AutomaticByPlatform** - the virtual machine will automatically updated by the platform. The properties provisionVMAgent and WindowsConfiguration.enableAutomaticUpdates must be true. Possible values include: 'WindowsVMGuestPatchModeManual', 'WindowsVMGuestPatchModeAutomaticByOS', 'WindowsVMGuestPatchModeAutomaticByPlatform' - PatchMode WindowsVMGuestPatchMode `json:"patchMode,omitempty"` - // EnableHotpatching - Enables customers to patch their Azure VMs without requiring a reboot. For enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode' must be set to 'AutomaticByPlatform'. - EnableHotpatching *bool `json:"enableHotpatching,omitempty"` - // AssessmentMode - Specifies the mode of VM Guest patch assessment for the IaaS virtual machine.

    Possible values are:

    **ImageDefault** - You control the timing of patch assessments on a virtual machine.

    **AutomaticByPlatform** - The platform will trigger periodic patch assessments. The property provisionVMAgent must be true. Possible values include: 'WindowsPatchAssessmentModeImageDefault', 'WindowsPatchAssessmentModeAutomaticByPlatform' - AssessmentMode WindowsPatchAssessmentMode `json:"assessmentMode,omitempty"` - // AutomaticByPlatformSettings - Specifies additional settings for patch mode AutomaticByPlatform in VM Guest Patching on Windows. - AutomaticByPlatformSettings *WindowsVMGuestPatchAutomaticByPlatformSettings `json:"automaticByPlatformSettings,omitempty"` -} - -// PirCommunityGalleryResource base information about the community gallery resource in pir. -type PirCommunityGalleryResource struct { - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *CommunityGalleryIdentifier `json:"identifier,omitempty"` -} - -// MarshalJSON is the custom marshaler for PirCommunityGalleryResource. -func (pcgr PirCommunityGalleryResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if pcgr.CommunityGalleryIdentifier != nil { - objectMap["identifier"] = pcgr.CommunityGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for PirCommunityGalleryResource struct. -func (pcgr *PirCommunityGalleryResource) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - pcgr.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - pcgr.Location = &location - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - pcgr.Type = &typeVar - } - case "identifier": - if v != nil { - var communityGalleryIdentifier CommunityGalleryIdentifier - err = json.Unmarshal(*v, &communityGalleryIdentifier) - if err != nil { - return err - } - pcgr.CommunityGalleryIdentifier = &communityGalleryIdentifier - } - } - } - - return nil -} - -// PirResource the Resource model definition. -type PirResource struct { - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for PirResource. -func (pr PirResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PirSharedGalleryResource base information about the shared gallery resource in pir. -type PirSharedGalleryResource struct { - *SharedGalleryIdentifier `json:"identifier,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for PirSharedGalleryResource. -func (psgr PirSharedGalleryResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if psgr.SharedGalleryIdentifier != nil { - objectMap["identifier"] = psgr.SharedGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for PirSharedGalleryResource struct. -func (psgr *PirSharedGalleryResource) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "identifier": - if v != nil { - var sharedGalleryIdentifier SharedGalleryIdentifier - err = json.Unmarshal(*v, &sharedGalleryIdentifier) - if err != nil { - return err - } - psgr.SharedGalleryIdentifier = &sharedGalleryIdentifier - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - psgr.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - psgr.Location = &location - } - } - } - - return nil -} - -// Plan specifies information about the marketplace image used to create the virtual machine. This element -// is only used for marketplace images. Before you can use a marketplace image from an API, you must enable -// the image for programmatic use. In the Azure portal, find the marketplace image that you want to use -// and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and -// then click **Save**. -type Plan struct { - // Name - The plan ID. - Name *string `json:"name,omitempty"` - // Publisher - The publisher ID. - Publisher *string `json:"publisher,omitempty"` - // Product - Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element. - Product *string `json:"product,omitempty"` - // PromotionCode - The promotion code. - PromotionCode *string `json:"promotionCode,omitempty"` -} - -// PrivateEndpoint the Private Endpoint resource. -type PrivateEndpoint struct { - // ID - READ-ONLY; The ARM identifier for Private Endpoint - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for PrivateEndpoint. -func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PrivateEndpointConnection the Private Endpoint Connection resource. -type PrivateEndpointConnection struct { - autorest.Response `json:"-"` - // PrivateEndpointConnectionProperties - Resource properties. - *PrivateEndpointConnectionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; private endpoint connection Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; private endpoint connection name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; private endpoint connection type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for PrivateEndpointConnection. -func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if pec.PrivateEndpointConnectionProperties != nil { - objectMap["properties"] = pec.PrivateEndpointConnectionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct. -func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var privateEndpointConnectionProperties PrivateEndpointConnectionProperties - err = json.Unmarshal(*v, &privateEndpointConnectionProperties) - if err != nil { - return err - } - pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - pec.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - pec.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - pec.Type = &typeVar - } - } - } - - return nil -} - -// PrivateEndpointConnectionListResult a list of private link resources -type PrivateEndpointConnectionListResult struct { - autorest.Response `json:"-"` - // Value - Array of private endpoint connections - Value *[]PrivateEndpointConnection `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of snapshots. Call ListNext() with this to fetch the next page of snapshots. - NextLink *string `json:"nextLink,omitempty"` -} - -// PrivateEndpointConnectionListResultIterator provides access to a complete listing of -// PrivateEndpointConnection values. -type PrivateEndpointConnectionListResultIterator struct { - i int - page PrivateEndpointConnectionListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *PrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *PrivateEndpointConnectionListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter PrivateEndpointConnectionListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter PrivateEndpointConnectionListResultIterator) Response() PrivateEndpointConnectionListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter PrivateEndpointConnectionListResultIterator) Value() PrivateEndpointConnection { - if !iter.page.NotDone() { - return PrivateEndpointConnection{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the PrivateEndpointConnectionListResultIterator type. -func NewPrivateEndpointConnectionListResultIterator(page PrivateEndpointConnectionListResultPage) PrivateEndpointConnectionListResultIterator { - return PrivateEndpointConnectionListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (peclr PrivateEndpointConnectionListResult) IsEmpty() bool { - return peclr.Value == nil || len(*peclr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (peclr PrivateEndpointConnectionListResult) hasNextLink() bool { - return peclr.NextLink != nil && len(*peclr.NextLink) != 0 -} - -// privateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (peclr PrivateEndpointConnectionListResult) privateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) { - if !peclr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(peclr.NextLink))) -} - -// PrivateEndpointConnectionListResultPage contains a page of PrivateEndpointConnection values. -type PrivateEndpointConnectionListResultPage struct { - fn func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error) - peclr PrivateEndpointConnectionListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *PrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.peclr) - if err != nil { - return err - } - page.peclr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *PrivateEndpointConnectionListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page PrivateEndpointConnectionListResultPage) NotDone() bool { - return !page.peclr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page PrivateEndpointConnectionListResultPage) Response() PrivateEndpointConnectionListResult { - return page.peclr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page PrivateEndpointConnectionListResultPage) Values() []PrivateEndpointConnection { - if page.peclr.IsEmpty() { - return nil - } - return *page.peclr.Value -} - -// Creates a new instance of the PrivateEndpointConnectionListResultPage type. -func NewPrivateEndpointConnectionListResultPage(cur PrivateEndpointConnectionListResult, getNextPage func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)) PrivateEndpointConnectionListResultPage { - return PrivateEndpointConnectionListResultPage{ - fn: getNextPage, - peclr: cur, - } -} - -// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties. -type PrivateEndpointConnectionProperties struct { - // PrivateEndpoint - READ-ONLY; The resource of private end point. - PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"` - // PrivateLinkServiceConnectionState - A collection of information about the state of the connection between DiskAccess and Virtual Network. - PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"` - // ProvisioningState - The provisioning state of the private endpoint connection resource. Possible values include: 'PrivateEndpointConnectionProvisioningStateSucceeded', 'PrivateEndpointConnectionProvisioningStateCreating', 'PrivateEndpointConnectionProvisioningStateDeleting', 'PrivateEndpointConnectionProvisioningStateFailed' - ProvisioningState PrivateEndpointConnectionProvisioningState `json:"provisioningState,omitempty"` -} - -// MarshalJSON is the custom marshaler for PrivateEndpointConnectionProperties. -func (pecp PrivateEndpointConnectionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if pecp.PrivateLinkServiceConnectionState != nil { - objectMap["privateLinkServiceConnectionState"] = pecp.PrivateLinkServiceConnectionState - } - if pecp.ProvisioningState != "" { - objectMap["provisioningState"] = pecp.ProvisioningState - } - return json.Marshal(objectMap) -} - -// PrivateLinkResource a private link resource -type PrivateLinkResource struct { - // PrivateLinkResourceProperties - Resource properties. - *PrivateLinkResourceProperties `json:"properties,omitempty"` - // ID - READ-ONLY; private link resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; private link resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; private link resource type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for PrivateLinkResource. -func (plr PrivateLinkResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if plr.PrivateLinkResourceProperties != nil { - objectMap["properties"] = plr.PrivateLinkResourceProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for PrivateLinkResource struct. -func (plr *PrivateLinkResource) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var privateLinkResourceProperties PrivateLinkResourceProperties - err = json.Unmarshal(*v, &privateLinkResourceProperties) - if err != nil { - return err - } - plr.PrivateLinkResourceProperties = &privateLinkResourceProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - plr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - plr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - plr.Type = &typeVar - } - } - } - - return nil -} - -// PrivateLinkResourceListResult a list of private link resources -type PrivateLinkResourceListResult struct { - autorest.Response `json:"-"` - // Value - Array of private link resources - Value *[]PrivateLinkResource `json:"value,omitempty"` -} - -// PrivateLinkResourceProperties properties of a private link resource. -type PrivateLinkResourceProperties struct { - // GroupID - READ-ONLY; The private link resource group id. - GroupID *string `json:"groupId,omitempty"` - // RequiredMembers - READ-ONLY; The private link resource required member names. - RequiredMembers *[]string `json:"requiredMembers,omitempty"` - // RequiredZoneNames - The private link resource DNS zone name. - RequiredZoneNames *[]string `json:"requiredZoneNames,omitempty"` -} - -// MarshalJSON is the custom marshaler for PrivateLinkResourceProperties. -func (plrp PrivateLinkResourceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if plrp.RequiredZoneNames != nil { - objectMap["requiredZoneNames"] = plrp.RequiredZoneNames - } - return json.Marshal(objectMap) -} - -// PrivateLinkServiceConnectionState a collection of information about the state of the connection between -// service consumer and provider. -type PrivateLinkServiceConnectionState struct { - // Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service. Possible values include: 'Pending', 'Approved', 'Rejected' - Status PrivateEndpointServiceConnectionStatus `json:"status,omitempty"` - // Description - The reason for approval/rejection of the connection. - Description *string `json:"description,omitempty"` - // ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer. - ActionsRequired *string `json:"actionsRequired,omitempty"` -} - -// PropertyUpdatesInProgress properties of the disk for which update is pending. -type PropertyUpdatesInProgress struct { - // TargetTier - The target performance tier of the disk if a tier change operation is in progress. - TargetTier *string `json:"targetTier,omitempty"` -} - -// ProximityPlacementGroup specifies information about the proximity placement group. -type ProximityPlacementGroup struct { - autorest.Response `json:"-"` - // ProximityPlacementGroupProperties - Describes the properties of a Proximity Placement Group. - *ProximityPlacementGroupProperties `json:"properties,omitempty"` - // Zones - Specifies the Availability Zone where virtual machine, virtual machine scale set or availability set associated with the proximity placement group can be created. - Zones *[]string `json:"zones,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ProximityPlacementGroup. -func (ppg ProximityPlacementGroup) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ppg.ProximityPlacementGroupProperties != nil { - objectMap["properties"] = ppg.ProximityPlacementGroupProperties - } - if ppg.Zones != nil { - objectMap["zones"] = ppg.Zones - } - if ppg.Location != nil { - objectMap["location"] = ppg.Location - } - if ppg.Tags != nil { - objectMap["tags"] = ppg.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ProximityPlacementGroup struct. -func (ppg *ProximityPlacementGroup) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var proximityPlacementGroupProperties ProximityPlacementGroupProperties - err = json.Unmarshal(*v, &proximityPlacementGroupProperties) - if err != nil { - return err - } - ppg.ProximityPlacementGroupProperties = &proximityPlacementGroupProperties - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - ppg.Zones = &zones - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - ppg.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - ppg.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - ppg.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - ppg.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - ppg.Tags = tags - } - } - } - - return nil -} - -// ProximityPlacementGroupListResult the List Proximity Placement Group operation response. -type ProximityPlacementGroupListResult struct { - autorest.Response `json:"-"` - // Value - The list of proximity placement groups - Value *[]ProximityPlacementGroup `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of proximity placement groups. - NextLink *string `json:"nextLink,omitempty"` -} - -// ProximityPlacementGroupListResultIterator provides access to a complete listing of -// ProximityPlacementGroup values. -type ProximityPlacementGroupListResultIterator struct { - i int - page ProximityPlacementGroupListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ProximityPlacementGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ProximityPlacementGroupListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ProximityPlacementGroupListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ProximityPlacementGroupListResultIterator) Response() ProximityPlacementGroupListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ProximityPlacementGroupListResultIterator) Value() ProximityPlacementGroup { - if !iter.page.NotDone() { - return ProximityPlacementGroup{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ProximityPlacementGroupListResultIterator type. -func NewProximityPlacementGroupListResultIterator(page ProximityPlacementGroupListResultPage) ProximityPlacementGroupListResultIterator { - return ProximityPlacementGroupListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (ppglr ProximityPlacementGroupListResult) IsEmpty() bool { - return ppglr.Value == nil || len(*ppglr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (ppglr ProximityPlacementGroupListResult) hasNextLink() bool { - return ppglr.NextLink != nil && len(*ppglr.NextLink) != 0 -} - -// proximityPlacementGroupListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (ppglr ProximityPlacementGroupListResult) proximityPlacementGroupListResultPreparer(ctx context.Context) (*http.Request, error) { - if !ppglr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(ppglr.NextLink))) -} - -// ProximityPlacementGroupListResultPage contains a page of ProximityPlacementGroup values. -type ProximityPlacementGroupListResultPage struct { - fn func(context.Context, ProximityPlacementGroupListResult) (ProximityPlacementGroupListResult, error) - ppglr ProximityPlacementGroupListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ProximityPlacementGroupListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.ppglr) - if err != nil { - return err - } - page.ppglr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ProximityPlacementGroupListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ProximityPlacementGroupListResultPage) NotDone() bool { - return !page.ppglr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ProximityPlacementGroupListResultPage) Response() ProximityPlacementGroupListResult { - return page.ppglr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ProximityPlacementGroupListResultPage) Values() []ProximityPlacementGroup { - if page.ppglr.IsEmpty() { - return nil - } - return *page.ppglr.Value -} - -// Creates a new instance of the ProximityPlacementGroupListResultPage type. -func NewProximityPlacementGroupListResultPage(cur ProximityPlacementGroupListResult, getNextPage func(context.Context, ProximityPlacementGroupListResult) (ProximityPlacementGroupListResult, error)) ProximityPlacementGroupListResultPage { - return ProximityPlacementGroupListResultPage{ - fn: getNextPage, - ppglr: cur, - } -} - -// ProximityPlacementGroupProperties describes the properties of a Proximity Placement Group. -type ProximityPlacementGroupProperties struct { - // ProximityPlacementGroupType - Specifies the type of the proximity placement group.

    Possible values are:

    **Standard** : Co-locate resources within an Azure region or Availability Zone.

    **Ultra** : For future use. Possible values include: 'Standard', 'Ultra' - ProximityPlacementGroupType ProximityPlacementGroupType `json:"proximityPlacementGroupType,omitempty"` - // VirtualMachines - READ-ONLY; A list of references to all virtual machines in the proximity placement group. - VirtualMachines *[]SubResourceWithColocationStatus `json:"virtualMachines,omitempty"` - // VirtualMachineScaleSets - READ-ONLY; A list of references to all virtual machine scale sets in the proximity placement group. - VirtualMachineScaleSets *[]SubResourceWithColocationStatus `json:"virtualMachineScaleSets,omitempty"` - // AvailabilitySets - READ-ONLY; A list of references to all availability sets in the proximity placement group. - AvailabilitySets *[]SubResourceWithColocationStatus `json:"availabilitySets,omitempty"` - // ColocationStatus - Describes colocation status of the Proximity Placement Group. - ColocationStatus *InstanceViewStatus `json:"colocationStatus,omitempty"` - // Intent - Specifies the user intent of the proximity placement group. - Intent *ProximityPlacementGroupPropertiesIntent `json:"intent,omitempty"` -} - -// MarshalJSON is the custom marshaler for ProximityPlacementGroupProperties. -func (ppgp ProximityPlacementGroupProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ppgp.ProximityPlacementGroupType != "" { - objectMap["proximityPlacementGroupType"] = ppgp.ProximityPlacementGroupType - } - if ppgp.ColocationStatus != nil { - objectMap["colocationStatus"] = ppgp.ColocationStatus - } - if ppgp.Intent != nil { - objectMap["intent"] = ppgp.Intent - } - return json.Marshal(objectMap) -} - -// ProximityPlacementGroupPropertiesIntent specifies the user intent of the proximity placement group. -type ProximityPlacementGroupPropertiesIntent struct { - // VMSizes - Specifies possible sizes of virtual machines that can be created in the proximity placement group. - VMSizes *[]string `json:"vmSizes,omitempty"` -} - -// ProximityPlacementGroupUpdate specifies information about the proximity placement group. -type ProximityPlacementGroupUpdate struct { - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ProximityPlacementGroupUpdate. -func (ppgu ProximityPlacementGroupUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ppgu.Tags != nil { - objectMap["tags"] = ppgu.Tags - } - return json.Marshal(objectMap) -} - -// ProxyOnlyResource the ProxyOnly Resource model definition. -type ProxyOnlyResource struct { - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for ProxyOnlyResource. -func (por ProxyOnlyResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ProxyResource the resource model definition for an Azure Resource Manager proxy resource. It will not -// have tags and a location -type ProxyResource struct { - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for ProxyResource. -func (pr ProxyResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PublicIPAddressSku describes the public IP Sku. It can only be set with OrchestrationMode as Flexible. -type PublicIPAddressSku struct { - // Name - Specify public IP sku name. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard' - Name PublicIPAddressSkuName `json:"name,omitempty"` - // Tier - Specify public IP sku tier. Possible values include: 'Regional', 'Global' - Tier PublicIPAddressSkuTier `json:"tier,omitempty"` -} - -// PurchasePlan used for establishing the purchase context of any 3rd Party artifact through MarketPlace. -type PurchasePlan struct { - // Publisher - The publisher ID. - Publisher *string `json:"publisher,omitempty"` - // Name - The plan ID. - Name *string `json:"name,omitempty"` - // Product - Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element. - Product *string `json:"product,omitempty"` - // PromotionCode - The Offer Promotion Code. - PromotionCode *string `json:"promotionCode,omitempty"` -} - -// ReadCloser ... -type ReadCloser struct { - autorest.Response `json:"-"` - Value *io.ReadCloser `json:"value,omitempty"` -} - -// RecommendedMachineConfiguration the properties describe the recommended machine configuration for this -// Image Definition. These properties are updatable. -type RecommendedMachineConfiguration struct { - VCPUs *ResourceRange `json:"vCPUs,omitempty"` - Memory *ResourceRange `json:"memory,omitempty"` -} - -// RecoveryWalkResponse response after calling a manual recovery walk -type RecoveryWalkResponse struct { - autorest.Response `json:"-"` - // WalkPerformed - READ-ONLY; Whether the recovery walk was performed - WalkPerformed *bool `json:"walkPerformed,omitempty"` - // NextPlatformUpdateDomain - READ-ONLY; The next update domain that needs to be walked. Null means walk spanning all update domains has been completed - NextPlatformUpdateDomain *int32 `json:"nextPlatformUpdateDomain,omitempty"` -} - -// MarshalJSON is the custom marshaler for RecoveryWalkResponse. -func (rwr RecoveryWalkResponse) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RegionalReplicationStatus this is the regional replication status. -type RegionalReplicationStatus struct { - // Region - READ-ONLY; The region to which the gallery image version is being replicated to. - Region *string `json:"region,omitempty"` - // State - READ-ONLY; This is the regional replication state. Possible values include: 'ReplicationStateUnknown', 'ReplicationStateReplicating', 'ReplicationStateCompleted', 'ReplicationStateFailed' - State ReplicationState `json:"state,omitempty"` - // Details - READ-ONLY; The details of the replication status. - Details *string `json:"details,omitempty"` - // Progress - READ-ONLY; It indicates progress of the replication job. - Progress *int32 `json:"progress,omitempty"` -} - -// MarshalJSON is the custom marshaler for RegionalReplicationStatus. -func (rrs RegionalReplicationStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RegionalSharingStatus gallery regional sharing status -type RegionalSharingStatus struct { - // Region - Region name - Region *string `json:"region,omitempty"` - // State - Gallery sharing state in current region. Possible values include: 'SharingStateSucceeded', 'SharingStateInProgress', 'SharingStateFailed', 'SharingStateUnknown' - State SharingState `json:"state,omitempty"` - // Details - Details of gallery regional sharing failure. - Details *string `json:"details,omitempty"` -} - -// ReplicationStatus this is the replication status of the gallery image version. -type ReplicationStatus struct { - // AggregatedState - READ-ONLY; This is the aggregated replication status based on all the regional replication status flags. Possible values include: 'Unknown', 'InProgress', 'Completed', 'Failed' - AggregatedState AggregatedReplicationState `json:"aggregatedState,omitempty"` - // Summary - READ-ONLY; This is a summary of replication status for each region. - Summary *[]RegionalReplicationStatus `json:"summary,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReplicationStatus. -func (rs ReplicationStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RequestRateByIntervalInput api request input for LogAnalytics getRequestRateByInterval Api. -type RequestRateByIntervalInput struct { - // IntervalLength - Interval value in minutes used to create LogAnalytics call rate logs. Possible values include: 'ThreeMins', 'FiveMins', 'ThirtyMins', 'SixtyMins' - IntervalLength IntervalInMins `json:"intervalLength,omitempty"` - // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. - BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` - // FromTime - From time of the query - FromTime *date.Time `json:"fromTime,omitempty"` - // ToTime - To time of the query - ToTime *date.Time `json:"toTime,omitempty"` - // GroupByThrottlePolicy - Group query result by Throttle Policy applied. - GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` - // GroupByOperationName - Group query result by Operation Name. - GroupByOperationName *bool `json:"groupByOperationName,omitempty"` - // GroupByResourceName - Group query result by Resource Name. - GroupByResourceName *bool `json:"groupByResourceName,omitempty"` - // GroupByClientApplicationID - Group query result by Client Application ID. - GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` - // GroupByUserAgent - Group query result by User Agent. - GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` -} - -// Resource the Resource model definition. -type Resource struct { - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Resource. -func (r Resource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if r.Location != nil { - objectMap["location"] = r.Location - } - if r.Tags != nil { - objectMap["tags"] = r.Tags - } - return json.Marshal(objectMap) -} - -// ResourceInstanceViewStatus instance view status. -type ResourceInstanceViewStatus struct { - // Code - READ-ONLY; The status code. - Code *string `json:"code,omitempty"` - // DisplayStatus - READ-ONLY; The short localizable label for the status. - DisplayStatus *string `json:"displayStatus,omitempty"` - // Message - READ-ONLY; The detailed status message, including for alerts and error messages. - Message *string `json:"message,omitempty"` - // Time - READ-ONLY; The time of the status. - Time *date.Time `json:"time,omitempty"` - // Level - The level code. Possible values include: 'Info', 'Warning', 'Error' - Level StatusLevelTypes `json:"level,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceInstanceViewStatus. -func (rivs ResourceInstanceViewStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rivs.Level != "" { - objectMap["level"] = rivs.Level - } - return json.Marshal(objectMap) -} - -// ResourceRange describes the resource range. -type ResourceRange struct { - // Min - The minimum number of the resource. - Min *int32 `json:"min,omitempty"` - // Max - The maximum number of the resource. - Max *int32 `json:"max,omitempty"` -} - -// ResourceSku describes an available Compute SKU. -type ResourceSku struct { - // ResourceType - READ-ONLY; The type of resource the SKU applies to. - ResourceType *string `json:"resourceType,omitempty"` - // Name - READ-ONLY; The name of SKU. - Name *string `json:"name,omitempty"` - // Tier - READ-ONLY; Specifies the tier of virtual machines in a scale set.

    Possible Values:

    **Standard**

    **Basic** - Tier *string `json:"tier,omitempty"` - // Size - READ-ONLY; The Size of the SKU. - Size *string `json:"size,omitempty"` - // Family - READ-ONLY; The Family of this particular SKU. - Family *string `json:"family,omitempty"` - // Kind - READ-ONLY; The Kind of resources that are supported in this SKU. - Kind *string `json:"kind,omitempty"` - // Capacity - READ-ONLY; Specifies the number of virtual machines in the scale set. - Capacity *ResourceSkuCapacity `json:"capacity,omitempty"` - // Locations - READ-ONLY; The set of locations that the SKU is available. - Locations *[]string `json:"locations,omitempty"` - // LocationInfo - READ-ONLY; A list of locations and availability zones in those locations where the SKU is available. - LocationInfo *[]ResourceSkuLocationInfo `json:"locationInfo,omitempty"` - // APIVersions - READ-ONLY; The api versions that support this SKU. - APIVersions *[]string `json:"apiVersions,omitempty"` - // Costs - READ-ONLY; Metadata for retrieving price info. - Costs *[]ResourceSkuCosts `json:"costs,omitempty"` - // Capabilities - READ-ONLY; A name value pair to describe the capability. - Capabilities *[]ResourceSkuCapabilities `json:"capabilities,omitempty"` - // Restrictions - READ-ONLY; The restrictions because of which SKU cannot be used. This is empty if there are no restrictions. - Restrictions *[]ResourceSkuRestrictions `json:"restrictions,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSku. -func (rs ResourceSku) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuCapabilities describes The SKU capabilities object. -type ResourceSkuCapabilities struct { - // Name - READ-ONLY; An invariant to describe the feature. - Name *string `json:"name,omitempty"` - // Value - READ-ONLY; An invariant if the feature is measured by quantity. - Value *string `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuCapabilities. -func (rsc ResourceSkuCapabilities) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuCapacity describes scaling information of a SKU. -type ResourceSkuCapacity struct { - // Minimum - READ-ONLY; The minimum capacity. - Minimum *int64 `json:"minimum,omitempty"` - // Maximum - READ-ONLY; The maximum capacity that can be set. - Maximum *int64 `json:"maximum,omitempty"` - // Default - READ-ONLY; The default capacity. - Default *int64 `json:"default,omitempty"` - // ScaleType - READ-ONLY; The scale type applicable to the sku. Possible values include: 'ResourceSkuCapacityScaleTypeAutomatic', 'ResourceSkuCapacityScaleTypeManual', 'ResourceSkuCapacityScaleTypeNone' - ScaleType ResourceSkuCapacityScaleType `json:"scaleType,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuCapacity. -func (rsc ResourceSkuCapacity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuCosts describes metadata for retrieving price info. -type ResourceSkuCosts struct { - // MeterID - READ-ONLY; Used for querying price from commerce. - MeterID *string `json:"meterID,omitempty"` - // Quantity - READ-ONLY; The multiplier is needed to extend the base metered cost. - Quantity *int64 `json:"quantity,omitempty"` - // ExtendedUnit - READ-ONLY; An invariant to show the extended unit. - ExtendedUnit *string `json:"extendedUnit,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuCosts. -func (rsc ResourceSkuCosts) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuLocationInfo describes an available Compute SKU Location Information. -type ResourceSkuLocationInfo struct { - // Location - READ-ONLY; Location of the SKU - Location *string `json:"location,omitempty"` - // Zones - READ-ONLY; List of availability zones where the SKU is supported. - Zones *[]string `json:"zones,omitempty"` - // ZoneDetails - READ-ONLY; Details of capabilities available to a SKU in specific zones. - ZoneDetails *[]ResourceSkuZoneDetails `json:"zoneDetails,omitempty"` - // ExtendedLocations - READ-ONLY; The names of extended locations. - ExtendedLocations *[]string `json:"extendedLocations,omitempty"` - // Type - READ-ONLY; The type of the extended location. Possible values include: 'EdgeZone' - Type ExtendedLocationType `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuLocationInfo. -func (rsli ResourceSkuLocationInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuRestrictionInfo describes an available Compute SKU Restriction Information. -type ResourceSkuRestrictionInfo struct { - // Locations - READ-ONLY; Locations where the SKU is restricted - Locations *[]string `json:"locations,omitempty"` - // Zones - READ-ONLY; List of availability zones where the SKU is restricted. - Zones *[]string `json:"zones,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuRestrictionInfo. -func (rsri ResourceSkuRestrictionInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkuRestrictions describes scaling information of a SKU. -type ResourceSkuRestrictions struct { - // Type - READ-ONLY; The type of restrictions. Possible values include: 'Location', 'Zone' - Type ResourceSkuRestrictionsType `json:"type,omitempty"` - // Values - READ-ONLY; The value of restrictions. If the restriction type is set to location. This would be different locations where the SKU is restricted. - Values *[]string `json:"values,omitempty"` - // RestrictionInfo - READ-ONLY; The information about the restriction where the SKU cannot be used. - RestrictionInfo *ResourceSkuRestrictionInfo `json:"restrictionInfo,omitempty"` - // ReasonCode - READ-ONLY; The reason for restriction. Possible values include: 'QuotaID', 'NotAvailableForSubscription' - ReasonCode ResourceSkuRestrictionsReasonCode `json:"reasonCode,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuRestrictions. -func (rsr ResourceSkuRestrictions) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceSkusResult the List Resource Skus operation response. -type ResourceSkusResult struct { - autorest.Response `json:"-"` - // Value - The list of skus available for the subscription. - Value *[]ResourceSku `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of Resource Skus. Call ListNext() with this URI to fetch the next page of Resource Skus - NextLink *string `json:"nextLink,omitempty"` -} - -// ResourceSkusResultIterator provides access to a complete listing of ResourceSku values. -type ResourceSkusResultIterator struct { - i int - page ResourceSkusResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ResourceSkusResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ResourceSkusResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ResourceSkusResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ResourceSkusResultIterator) Response() ResourceSkusResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ResourceSkusResultIterator) Value() ResourceSku { - if !iter.page.NotDone() { - return ResourceSku{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ResourceSkusResultIterator type. -func NewResourceSkusResultIterator(page ResourceSkusResultPage) ResourceSkusResultIterator { - return ResourceSkusResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rsr ResourceSkusResult) IsEmpty() bool { - return rsr.Value == nil || len(*rsr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rsr ResourceSkusResult) hasNextLink() bool { - return rsr.NextLink != nil && len(*rsr.NextLink) != 0 -} - -// resourceSkusResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rsr ResourceSkusResult) resourceSkusResultPreparer(ctx context.Context) (*http.Request, error) { - if !rsr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rsr.NextLink))) -} - -// ResourceSkusResultPage contains a page of ResourceSku values. -type ResourceSkusResultPage struct { - fn func(context.Context, ResourceSkusResult) (ResourceSkusResult, error) - rsr ResourceSkusResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ResourceSkusResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rsr) - if err != nil { - return err - } - page.rsr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ResourceSkusResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ResourceSkusResultPage) NotDone() bool { - return !page.rsr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ResourceSkusResultPage) Response() ResourceSkusResult { - return page.rsr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ResourceSkusResultPage) Values() []ResourceSku { - if page.rsr.IsEmpty() { - return nil - } - return *page.rsr.Value -} - -// Creates a new instance of the ResourceSkusResultPage type. -func NewResourceSkusResultPage(cur ResourceSkusResult, getNextPage func(context.Context, ResourceSkusResult) (ResourceSkusResult, error)) ResourceSkusResultPage { - return ResourceSkusResultPage{ - fn: getNextPage, - rsr: cur, - } -} - -// ResourceSkuZoneDetails describes The zonal capabilities of a SKU. -type ResourceSkuZoneDetails struct { - // Name - READ-ONLY; The set of zones that the SKU is available in with the specified capabilities. - Name *[]string `json:"name,omitempty"` - // Capabilities - READ-ONLY; A list of capabilities that are available for the SKU in the specified list of zones. - Capabilities *[]ResourceSkuCapabilities `json:"capabilities,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceSkuZoneDetails. -func (rszd ResourceSkuZoneDetails) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceURIList the List resources which are encrypted with the disk encryption set. -type ResourceURIList struct { - autorest.Response `json:"-"` - // Value - A list of IDs or Owner IDs of resources which are encrypted with the disk encryption set. - Value *[]string `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of encrypted resources. Call ListNext() with this to fetch the next page of encrypted resources. - NextLink *string `json:"nextLink,omitempty"` -} - -// ResourceURIListIterator provides access to a complete listing of string values. -type ResourceURIListIterator struct { - i int - page ResourceURIListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ResourceURIListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceURIListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ResourceURIListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ResourceURIListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ResourceURIListIterator) Response() ResourceURIList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ResourceURIListIterator) Value() string { - if !iter.page.NotDone() { - return "" - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ResourceURIListIterator type. -func NewResourceURIListIterator(page ResourceURIListPage) ResourceURIListIterator { - return ResourceURIListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rul ResourceURIList) IsEmpty() bool { - return rul.Value == nil || len(*rul.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rul ResourceURIList) hasNextLink() bool { - return rul.NextLink != nil && len(*rul.NextLink) != 0 -} - -// resourceURIListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rul ResourceURIList) resourceURIListPreparer(ctx context.Context) (*http.Request, error) { - if !rul.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rul.NextLink))) -} - -// ResourceURIListPage contains a page of string values. -type ResourceURIListPage struct { - fn func(context.Context, ResourceURIList) (ResourceURIList, error) - rul ResourceURIList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ResourceURIListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceURIListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rul) - if err != nil { - return err - } - page.rul = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ResourceURIListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ResourceURIListPage) NotDone() bool { - return !page.rul.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ResourceURIListPage) Response() ResourceURIList { - return page.rul -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ResourceURIListPage) Values() []string { - if page.rul.IsEmpty() { - return nil - } - return *page.rul.Value -} - -// Creates a new instance of the ResourceURIListPage type. -func NewResourceURIListPage(cur ResourceURIList, getNextPage func(context.Context, ResourceURIList) (ResourceURIList, error)) ResourceURIListPage { - return ResourceURIListPage{ - fn: getNextPage, - rul: cur, - } -} - -// ResourceWithOptionalLocation the Resource model definition with location property as optional. -type ResourceWithOptionalLocation struct { - // Location - Resource location - Location *string `json:"location,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ResourceWithOptionalLocation. -func (rwol ResourceWithOptionalLocation) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rwol.Location != nil { - objectMap["location"] = rwol.Location - } - if rwol.Tags != nil { - objectMap["tags"] = rwol.Tags - } - return json.Marshal(objectMap) -} - -// RestorePoint restore Point details. -type RestorePoint struct { - autorest.Response `json:"-"` - *RestorePointProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` -} - -// MarshalJSON is the custom marshaler for RestorePoint. -func (rp RestorePoint) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rp.RestorePointProperties != nil { - objectMap["properties"] = rp.RestorePointProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for RestorePoint struct. -func (rp *RestorePoint) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var restorePointProperties RestorePointProperties - err = json.Unmarshal(*v, &restorePointProperties) - if err != nil { - return err - } - rp.RestorePointProperties = &restorePointProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rp.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rp.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rp.Type = &typeVar - } - } - } - - return nil -} - -// RestorePointCollection create or update Restore Point collection parameters. -type RestorePointCollection struct { - autorest.Response `json:"-"` - *RestorePointCollectionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for RestorePointCollection. -func (RPCVar RestorePointCollection) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if RPCVar.RestorePointCollectionProperties != nil { - objectMap["properties"] = RPCVar.RestorePointCollectionProperties - } - if RPCVar.Location != nil { - objectMap["location"] = RPCVar.Location - } - if RPCVar.Tags != nil { - objectMap["tags"] = RPCVar.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for RestorePointCollection struct. -func (RPCVar *RestorePointCollection) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var restorePointCollectionProperties RestorePointCollectionProperties - err = json.Unmarshal(*v, &restorePointCollectionProperties) - if err != nil { - return err - } - RPCVar.RestorePointCollectionProperties = &restorePointCollectionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - RPCVar.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - RPCVar.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - RPCVar.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - RPCVar.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - RPCVar.Tags = tags - } - } - } - - return nil -} - -// RestorePointCollectionListResult the List restore point collection operation response. -type RestorePointCollectionListResult struct { - autorest.Response `json:"-"` - // Value - Gets the list of restore point collections. - Value *[]RestorePointCollection `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of RestorePointCollections. Call ListNext() with this to fetch the next page of RestorePointCollections - NextLink *string `json:"nextLink,omitempty"` -} - -// RestorePointCollectionListResultIterator provides access to a complete listing of RestorePointCollection -// values. -type RestorePointCollectionListResultIterator struct { - i int - page RestorePointCollectionListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *RestorePointCollectionListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *RestorePointCollectionListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter RestorePointCollectionListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter RestorePointCollectionListResultIterator) Response() RestorePointCollectionListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter RestorePointCollectionListResultIterator) Value() RestorePointCollection { - if !iter.page.NotDone() { - return RestorePointCollection{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the RestorePointCollectionListResultIterator type. -func NewRestorePointCollectionListResultIterator(page RestorePointCollectionListResultPage) RestorePointCollectionListResultIterator { - return RestorePointCollectionListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rpclr RestorePointCollectionListResult) IsEmpty() bool { - return rpclr.Value == nil || len(*rpclr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rpclr RestorePointCollectionListResult) hasNextLink() bool { - return rpclr.NextLink != nil && len(*rpclr.NextLink) != 0 -} - -// restorePointCollectionListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rpclr RestorePointCollectionListResult) restorePointCollectionListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rpclr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rpclr.NextLink))) -} - -// RestorePointCollectionListResultPage contains a page of RestorePointCollection values. -type RestorePointCollectionListResultPage struct { - fn func(context.Context, RestorePointCollectionListResult) (RestorePointCollectionListResult, error) - rpclr RestorePointCollectionListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *RestorePointCollectionListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rpclr) - if err != nil { - return err - } - page.rpclr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *RestorePointCollectionListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page RestorePointCollectionListResultPage) NotDone() bool { - return !page.rpclr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page RestorePointCollectionListResultPage) Response() RestorePointCollectionListResult { - return page.rpclr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page RestorePointCollectionListResultPage) Values() []RestorePointCollection { - if page.rpclr.IsEmpty() { - return nil - } - return *page.rpclr.Value -} - -// Creates a new instance of the RestorePointCollectionListResultPage type. -func NewRestorePointCollectionListResultPage(cur RestorePointCollectionListResult, getNextPage func(context.Context, RestorePointCollectionListResult) (RestorePointCollectionListResult, error)) RestorePointCollectionListResultPage { - return RestorePointCollectionListResultPage{ - fn: getNextPage, - rpclr: cur, - } -} - -// RestorePointCollectionProperties the restore point collection properties. -type RestorePointCollectionProperties struct { - Source *RestorePointCollectionSourceProperties `json:"source,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state of the restore point collection. - ProvisioningState *string `json:"provisioningState,omitempty"` - // RestorePointCollectionID - READ-ONLY; The unique id of the restore point collection. - RestorePointCollectionID *string `json:"restorePointCollectionId,omitempty"` - // RestorePoints - READ-ONLY; A list containing all restore points created under this restore point collection. - RestorePoints *[]RestorePoint `json:"restorePoints,omitempty"` -} - -// MarshalJSON is the custom marshaler for RestorePointCollectionProperties. -func (rpcp RestorePointCollectionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rpcp.Source != nil { - objectMap["source"] = rpcp.Source - } - return json.Marshal(objectMap) -} - -// RestorePointCollectionsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type RestorePointCollectionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(RestorePointCollectionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *RestorePointCollectionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for RestorePointCollectionsDeleteFuture.Result. -func (future *RestorePointCollectionsDeleteFuture) result(client RestorePointCollectionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.RestorePointCollectionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// RestorePointCollectionSourceProperties the properties of the source resource that this restore point -// collection is created from. -type RestorePointCollectionSourceProperties struct { - // Location - READ-ONLY; Location of the source resource used to create this restore point collection. - Location *string `json:"location,omitempty"` - // ID - Resource Id of the source resource used to create this restore point collection - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for RestorePointCollectionSourceProperties. -func (rpcsp RestorePointCollectionSourceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rpcsp.ID != nil { - objectMap["id"] = rpcsp.ID - } - return json.Marshal(objectMap) -} - -// RestorePointCollectionUpdate update Restore Point collection parameters. -type RestorePointCollectionUpdate struct { - *RestorePointCollectionProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for RestorePointCollectionUpdate. -func (rpcu RestorePointCollectionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rpcu.RestorePointCollectionProperties != nil { - objectMap["properties"] = rpcu.RestorePointCollectionProperties - } - if rpcu.Tags != nil { - objectMap["tags"] = rpcu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for RestorePointCollectionUpdate struct. -func (rpcu *RestorePointCollectionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var restorePointCollectionProperties RestorePointCollectionProperties - err = json.Unmarshal(*v, &restorePointCollectionProperties) - if err != nil { - return err - } - rpcu.RestorePointCollectionProperties = &restorePointCollectionProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rpcu.Tags = tags - } - } - } - - return nil -} - -// RestorePointInstanceView the instance view of a restore point. -type RestorePointInstanceView struct { - // DiskRestorePoints - The disk restore points information. - DiskRestorePoints *[]DiskRestorePointInstanceView `json:"diskRestorePoints,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// RestorePointProperties the restore point properties. -type RestorePointProperties struct { - // ExcludeDisks - List of disk resource ids that the customer wishes to exclude from the restore point. If no disks are specified, all disks will be included. - ExcludeDisks *[]APIEntityReference `json:"excludeDisks,omitempty"` - // SourceMetadata - READ-ONLY; Gets the details of the VM captured at the time of the restore point creation. - SourceMetadata *RestorePointSourceMetadata `json:"sourceMetadata,omitempty"` - // ProvisioningState - READ-ONLY; Gets the provisioning state of the restore point. - ProvisioningState *string `json:"provisioningState,omitempty"` - // ConsistencyMode - ConsistencyMode of the RestorePoint. Can be specified in the input while creating a restore point. For now, only CrashConsistent is accepted as a valid input. Please refer to https://aka.ms/RestorePoints for more details. Possible values include: 'CrashConsistent', 'FileSystemConsistent', 'ApplicationConsistent' - ConsistencyMode ConsistencyModeTypes `json:"consistencyMode,omitempty"` - // TimeCreated - Gets the creation time of the restore point. - TimeCreated *date.Time `json:"timeCreated,omitempty"` - // SourceRestorePoint - Resource Id of the source restore point from which a copy needs to be created. - SourceRestorePoint *APIEntityReference `json:"sourceRestorePoint,omitempty"` - // InstanceView - READ-ONLY; The restore point instance view. - InstanceView *RestorePointInstanceView `json:"instanceView,omitempty"` -} - -// MarshalJSON is the custom marshaler for RestorePointProperties. -func (rpp RestorePointProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rpp.ExcludeDisks != nil { - objectMap["excludeDisks"] = rpp.ExcludeDisks - } - if rpp.ConsistencyMode != "" { - objectMap["consistencyMode"] = rpp.ConsistencyMode - } - if rpp.TimeCreated != nil { - objectMap["timeCreated"] = rpp.TimeCreated - } - if rpp.SourceRestorePoint != nil { - objectMap["sourceRestorePoint"] = rpp.SourceRestorePoint - } - return json.Marshal(objectMap) -} - -// RestorePointsCreateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type RestorePointsCreateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(RestorePointsClient) (RestorePoint, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *RestorePointsCreateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for RestorePointsCreateFuture.Result. -func (future *RestorePointsCreateFuture) result(client RestorePointsClient) (rp RestorePoint, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsCreateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - rp.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.RestorePointsCreateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent { - rp, err = client.CreateResponder(rp.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsCreateFuture", "Result", rp.Response.Response, "Failure responding to request") - } - } - return -} - -// RestorePointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type RestorePointsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(RestorePointsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *RestorePointsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for RestorePointsDeleteFuture.Result. -func (future *RestorePointsDeleteFuture) result(client RestorePointsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.RestorePointsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// RestorePointSourceMetadata describes the properties of the Virtual Machine for which the restore point -// was created. The properties provided are a subset and the snapshot of the overall Virtual Machine -// properties captured at the time of the restore point creation. -type RestorePointSourceMetadata struct { - // HardwareProfile - Gets the hardware profile. - HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` - // StorageProfile - Gets the storage profile. - StorageProfile *RestorePointSourceVMStorageProfile `json:"storageProfile,omitempty"` - // OsProfile - Gets the OS profile. - OsProfile *OSProfile `json:"osProfile,omitempty"` - // DiagnosticsProfile - Gets the diagnostics profile. - DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` - // LicenseType - Gets the license type, which is for bring your own license scenario. - LicenseType *string `json:"licenseType,omitempty"` - // VMID - Gets the virtual machine unique id. - VMID *string `json:"vmId,omitempty"` - // SecurityProfile - Gets the security profile. - SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` - // Location - Location of the VM from which the restore point was created. - Location *string `json:"location,omitempty"` -} - -// RestorePointSourceVMDataDisk describes a data disk. -type RestorePointSourceVMDataDisk struct { - // Lun - Gets the logical unit number. - Lun *int32 `json:"lun,omitempty"` - // Name - Gets the disk name. - Name *string `json:"name,omitempty"` - // Caching - Gets the caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // DiskSizeGB - Gets the initial disk size in GB for blank data disks, and the new desired size for existing OS and Data disks. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // ManagedDisk - Gets the managed disk details - ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` - // DiskRestorePoint - Gets the disk restore point Id. - DiskRestorePoint *APIEntityReference `json:"diskRestorePoint,omitempty"` -} - -// RestorePointSourceVMOSDisk describes an Operating System disk. -type RestorePointSourceVMOSDisk struct { - // OsType - Gets the Operating System type. Possible values include: 'Windows', 'Linux' - OsType OperatingSystemType `json:"osType,omitempty"` - // EncryptionSettings - Gets the disk encryption settings. - EncryptionSettings *DiskEncryptionSettings `json:"encryptionSettings,omitempty"` - // Name - Gets the disk name. - Name *string `json:"name,omitempty"` - // Caching - Gets the caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // DiskSizeGB - Gets the disk size in GB. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // ManagedDisk - Gets the managed disk details - ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"` - // DiskRestorePoint - Gets the disk restore point Id. - DiskRestorePoint *APIEntityReference `json:"diskRestorePoint,omitempty"` -} - -// RestorePointSourceVMStorageProfile describes the storage profile. -type RestorePointSourceVMStorageProfile struct { - // OsDisk - Gets the OS disk of the VM captured at the time of the restore point creation. - OsDisk *RestorePointSourceVMOSDisk `json:"osDisk,omitempty"` - // DataDisks - Gets the data disks of the VM captured at the time of the restore point creation. - DataDisks *[]RestorePointSourceVMDataDisk `json:"dataDisks,omitempty"` -} - -// RetrieveBootDiagnosticsDataResult the SAS URIs of the console screenshot and serial log blobs. -type RetrieveBootDiagnosticsDataResult struct { - autorest.Response `json:"-"` - // ConsoleScreenshotBlobURI - READ-ONLY; The console screenshot blob URI - ConsoleScreenshotBlobURI *string `json:"consoleScreenshotBlobUri,omitempty"` - // SerialConsoleLogBlobURI - READ-ONLY; The serial console log blob URI. - SerialConsoleLogBlobURI *string `json:"serialConsoleLogBlobUri,omitempty"` -} - -// MarshalJSON is the custom marshaler for RetrieveBootDiagnosticsDataResult. -func (rbddr RetrieveBootDiagnosticsDataResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RoleInstance ... -type RoleInstance struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource Name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource Type. - Type *string `json:"type,omitempty"` - // Location - READ-ONLY; Resource Location. - Location *string `json:"location,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` - Sku *InstanceSku `json:"sku,omitempty"` - Properties *RoleInstanceProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for RoleInstance. -func (ri RoleInstance) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ri.Sku != nil { - objectMap["sku"] = ri.Sku - } - if ri.Properties != nil { - objectMap["properties"] = ri.Properties - } - return json.Marshal(objectMap) -} - -// RoleInstanceInstanceView the instance view of the role instance. -type RoleInstanceInstanceView struct { - autorest.Response `json:"-"` - // PlatformUpdateDomain - READ-ONLY; The Update Domain. - PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` - // PlatformFaultDomain - READ-ONLY; The Fault Domain. - PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` - // PrivateID - READ-ONLY; Specifies a unique identifier generated internally for the cloud service associated with this role instance.

    NOTE: If you are using Azure Diagnostics extension, this property can be used as 'DeploymentId' for querying details. - PrivateID *string `json:"privateId,omitempty"` - // Statuses - READ-ONLY - Statuses *[]ResourceInstanceViewStatus `json:"statuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for RoleInstanceInstanceView. -func (riiv RoleInstanceInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RoleInstanceListResult ... -type RoleInstanceListResult struct { - autorest.Response `json:"-"` - Value *[]RoleInstance `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// RoleInstanceListResultIterator provides access to a complete listing of RoleInstance values. -type RoleInstanceListResultIterator struct { - i int - page RoleInstanceListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *RoleInstanceListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RoleInstanceListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *RoleInstanceListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter RoleInstanceListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter RoleInstanceListResultIterator) Response() RoleInstanceListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter RoleInstanceListResultIterator) Value() RoleInstance { - if !iter.page.NotDone() { - return RoleInstance{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the RoleInstanceListResultIterator type. -func NewRoleInstanceListResultIterator(page RoleInstanceListResultPage) RoleInstanceListResultIterator { - return RoleInstanceListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rilr RoleInstanceListResult) IsEmpty() bool { - return rilr.Value == nil || len(*rilr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rilr RoleInstanceListResult) hasNextLink() bool { - return rilr.NextLink != nil && len(*rilr.NextLink) != 0 -} - -// roleInstanceListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rilr RoleInstanceListResult) roleInstanceListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rilr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rilr.NextLink))) -} - -// RoleInstanceListResultPage contains a page of RoleInstance values. -type RoleInstanceListResultPage struct { - fn func(context.Context, RoleInstanceListResult) (RoleInstanceListResult, error) - rilr RoleInstanceListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *RoleInstanceListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RoleInstanceListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rilr) - if err != nil { - return err - } - page.rilr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *RoleInstanceListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page RoleInstanceListResultPage) NotDone() bool { - return !page.rilr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page RoleInstanceListResultPage) Response() RoleInstanceListResult { - return page.rilr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page RoleInstanceListResultPage) Values() []RoleInstance { - if page.rilr.IsEmpty() { - return nil - } - return *page.rilr.Value -} - -// Creates a new instance of the RoleInstanceListResultPage type. -func NewRoleInstanceListResultPage(cur RoleInstanceListResult, getNextPage func(context.Context, RoleInstanceListResult) (RoleInstanceListResult, error)) RoleInstanceListResultPage { - return RoleInstanceListResultPage{ - fn: getNextPage, - rilr: cur, - } -} - -// RoleInstanceNetworkProfile describes the network profile for the role instance. -type RoleInstanceNetworkProfile struct { - // NetworkInterfaces - READ-ONLY; Specifies the list of resource Ids for the network interfaces associated with the role instance. - NetworkInterfaces *[]SubResource `json:"networkInterfaces,omitempty"` -} - -// MarshalJSON is the custom marshaler for RoleInstanceNetworkProfile. -func (rinp RoleInstanceNetworkProfile) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RoleInstanceProperties ... -type RoleInstanceProperties struct { - NetworkProfile *RoleInstanceNetworkProfile `json:"networkProfile,omitempty"` - InstanceView *RoleInstanceInstanceView `json:"instanceView,omitempty"` -} - -// RoleInstances specifies a list of role instances from the cloud service. -type RoleInstances struct { - // RoleInstances - List of cloud service role instance names. Value of '*' will signify all role instances of the cloud service. - RoleInstances *[]string `json:"roleInstances,omitempty"` -} - -// RollbackStatusInfo information about rollback on failed VM instances after a OS Upgrade operation. -type RollbackStatusInfo struct { - // SuccessfullyRolledbackInstanceCount - READ-ONLY; The number of instances which have been successfully rolled back. - SuccessfullyRolledbackInstanceCount *int32 `json:"successfullyRolledbackInstanceCount,omitempty"` - // FailedRolledbackInstanceCount - READ-ONLY; The number of instances which failed to rollback. - FailedRolledbackInstanceCount *int32 `json:"failedRolledbackInstanceCount,omitempty"` - // RollbackError - READ-ONLY; Error details if OS rollback failed. - RollbackError *APIError `json:"rollbackError,omitempty"` -} - -// MarshalJSON is the custom marshaler for RollbackStatusInfo. -func (rsi RollbackStatusInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RollingUpgradePolicy the configuration parameters used while performing a rolling upgrade. -type RollingUpgradePolicy struct { - // MaxBatchInstancePercent - The maximum percent of total virtual machine instances that will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum, unhealthy instances in previous or future batches can cause the percentage of instances in a batch to decrease to ensure higher reliability. The default value for this parameter is 20%. - MaxBatchInstancePercent *int32 `json:"maxBatchInstancePercent,omitempty"` - // MaxUnhealthyInstancePercent - The maximum percentage of the total virtual machine instances in the scale set that can be simultaneously unhealthy, either as a result of being upgraded, or by being found in an unhealthy state by the virtual machine health checks before the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The default value for this parameter is 20%. - MaxUnhealthyInstancePercent *int32 `json:"maxUnhealthyInstancePercent,omitempty"` - // MaxUnhealthyUpgradedInstancePercent - The maximum percentage of upgraded virtual machine instances that can be found to be in an unhealthy state. This check will happen after each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The default value for this parameter is 20%. - MaxUnhealthyUpgradedInstancePercent *int32 `json:"maxUnhealthyUpgradedInstancePercent,omitempty"` - // PauseTimeBetweenBatches - The wait time between completing the update for all virtual machines in one batch and starting the next batch. The time duration should be specified in ISO 8601 format. The default value is 0 seconds (PT0S). - PauseTimeBetweenBatches *string `json:"pauseTimeBetweenBatches,omitempty"` - // EnableCrossZoneUpgrade - Allow VMSS to ignore AZ boundaries when constructing upgrade batches. Take into consideration the Update Domain and maxBatchInstancePercent to determine the batch size. - EnableCrossZoneUpgrade *bool `json:"enableCrossZoneUpgrade,omitempty"` - // PrioritizeUnhealthyInstances - Upgrade all unhealthy instances in a scale set before any healthy instances. - PrioritizeUnhealthyInstances *bool `json:"prioritizeUnhealthyInstances,omitempty"` -} - -// RollingUpgradeProgressInfo information about the number of virtual machine instances in each upgrade -// state. -type RollingUpgradeProgressInfo struct { - // SuccessfulInstanceCount - READ-ONLY; The number of instances that have been successfully upgraded. - SuccessfulInstanceCount *int32 `json:"successfulInstanceCount,omitempty"` - // FailedInstanceCount - READ-ONLY; The number of instances that have failed to be upgraded successfully. - FailedInstanceCount *int32 `json:"failedInstanceCount,omitempty"` - // InProgressInstanceCount - READ-ONLY; The number of instances that are currently being upgraded. - InProgressInstanceCount *int32 `json:"inProgressInstanceCount,omitempty"` - // PendingInstanceCount - READ-ONLY; The number of instances that have not yet begun to be upgraded. - PendingInstanceCount *int32 `json:"pendingInstanceCount,omitempty"` -} - -// MarshalJSON is the custom marshaler for RollingUpgradeProgressInfo. -func (rupi RollingUpgradeProgressInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RollingUpgradeRunningStatus information about the current running state of the overall upgrade. -type RollingUpgradeRunningStatus struct { - // Code - READ-ONLY; Code indicating the current status of the upgrade. Possible values include: 'RollingUpgradeStatusCodeRollingForward', 'RollingUpgradeStatusCodeCancelled', 'RollingUpgradeStatusCodeCompleted', 'RollingUpgradeStatusCodeFaulted' - Code RollingUpgradeStatusCode `json:"code,omitempty"` - // StartTime - READ-ONLY; Start time of the upgrade. - StartTime *date.Time `json:"startTime,omitempty"` - // LastAction - READ-ONLY; The last action performed on the rolling upgrade. Possible values include: 'Start', 'Cancel' - LastAction RollingUpgradeActionType `json:"lastAction,omitempty"` - // LastActionTime - READ-ONLY; Last action time of the upgrade. - LastActionTime *date.Time `json:"lastActionTime,omitempty"` -} - -// MarshalJSON is the custom marshaler for RollingUpgradeRunningStatus. -func (rurs RollingUpgradeRunningStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RollingUpgradeStatusInfo the status of the latest virtual machine scale set rolling upgrade. -type RollingUpgradeStatusInfo struct { - autorest.Response `json:"-"` - *RollingUpgradeStatusInfoProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for RollingUpgradeStatusInfo. -func (rusi RollingUpgradeStatusInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rusi.RollingUpgradeStatusInfoProperties != nil { - objectMap["properties"] = rusi.RollingUpgradeStatusInfoProperties - } - if rusi.Location != nil { - objectMap["location"] = rusi.Location - } - if rusi.Tags != nil { - objectMap["tags"] = rusi.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for RollingUpgradeStatusInfo struct. -func (rusi *RollingUpgradeStatusInfo) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var rollingUpgradeStatusInfoProperties RollingUpgradeStatusInfoProperties - err = json.Unmarshal(*v, &rollingUpgradeStatusInfoProperties) - if err != nil { - return err - } - rusi.RollingUpgradeStatusInfoProperties = &rollingUpgradeStatusInfoProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rusi.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rusi.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rusi.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - rusi.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rusi.Tags = tags - } - } - } - - return nil -} - -// RollingUpgradeStatusInfoProperties the status of the latest virtual machine scale set rolling upgrade. -type RollingUpgradeStatusInfoProperties struct { - // Policy - READ-ONLY; The rolling upgrade policies applied for this upgrade. - Policy *RollingUpgradePolicy `json:"policy,omitempty"` - // RunningStatus - READ-ONLY; Information about the current running state of the overall upgrade. - RunningStatus *RollingUpgradeRunningStatus `json:"runningStatus,omitempty"` - // Progress - READ-ONLY; Information about the number of virtual machine instances in each upgrade state. - Progress *RollingUpgradeProgressInfo `json:"progress,omitempty"` - // Error - READ-ONLY; Error details for this upgrade, if there are any. - Error *APIError `json:"error,omitempty"` -} - -// MarshalJSON is the custom marshaler for RollingUpgradeStatusInfoProperties. -func (rusip RollingUpgradeStatusInfoProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// RunCommandDocument describes the properties of a Run Command. -type RunCommandDocument struct { - autorest.Response `json:"-"` - // Script - The script to be executed. - Script *[]string `json:"script,omitempty"` - // Parameters - The parameters used by the script. - Parameters *[]RunCommandParameterDefinition `json:"parameters,omitempty"` - // Schema - The VM run command schema. - Schema *string `json:"$schema,omitempty"` - // ID - The VM run command id. - ID *string `json:"id,omitempty"` - // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // Label - The VM run command label. - Label *string `json:"label,omitempty"` - // Description - The VM run command description. - Description *string `json:"description,omitempty"` -} - -// RunCommandDocumentBase describes the properties of a Run Command metadata. -type RunCommandDocumentBase struct { - // Schema - The VM run command schema. - Schema *string `json:"$schema,omitempty"` - // ID - The VM run command id. - ID *string `json:"id,omitempty"` - // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // Label - The VM run command label. - Label *string `json:"label,omitempty"` - // Description - The VM run command description. - Description *string `json:"description,omitempty"` -} - -// RunCommandInput capture Virtual Machine parameters. -type RunCommandInput struct { - // CommandID - The run command id. - CommandID *string `json:"commandId,omitempty"` - // Script - Optional. The script to be executed. When this value is given, the given script will override the default script of the command. - Script *[]string `json:"script,omitempty"` - // Parameters - The run command parameters. - Parameters *[]RunCommandInputParameter `json:"parameters,omitempty"` -} - -// RunCommandInputParameter describes the properties of a run command parameter. -type RunCommandInputParameter struct { - // Name - The run command parameter name. - Name *string `json:"name,omitempty"` - // Value - The run command parameter value. - Value *string `json:"value,omitempty"` -} - -// RunCommandListResult the List Virtual Machine operation response. -type RunCommandListResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machine run commands. - Value *[]RunCommandDocumentBase `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands. - NextLink *string `json:"nextLink,omitempty"` -} - -// RunCommandListResultIterator provides access to a complete listing of RunCommandDocumentBase values. -type RunCommandListResultIterator struct { - i int - page RunCommandListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *RunCommandListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RunCommandListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *RunCommandListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter RunCommandListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter RunCommandListResultIterator) Response() RunCommandListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter RunCommandListResultIterator) Value() RunCommandDocumentBase { - if !iter.page.NotDone() { - return RunCommandDocumentBase{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the RunCommandListResultIterator type. -func NewRunCommandListResultIterator(page RunCommandListResultPage) RunCommandListResultIterator { - return RunCommandListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rclr RunCommandListResult) IsEmpty() bool { - return rclr.Value == nil || len(*rclr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rclr RunCommandListResult) hasNextLink() bool { - return rclr.NextLink != nil && len(*rclr.NextLink) != 0 -} - -// runCommandListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rclr RunCommandListResult) runCommandListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rclr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rclr.NextLink))) -} - -// RunCommandListResultPage contains a page of RunCommandDocumentBase values. -type RunCommandListResultPage struct { - fn func(context.Context, RunCommandListResult) (RunCommandListResult, error) - rclr RunCommandListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *RunCommandListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RunCommandListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rclr) - if err != nil { - return err - } - page.rclr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *RunCommandListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page RunCommandListResultPage) NotDone() bool { - return !page.rclr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page RunCommandListResultPage) Response() RunCommandListResult { - return page.rclr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page RunCommandListResultPage) Values() []RunCommandDocumentBase { - if page.rclr.IsEmpty() { - return nil - } - return *page.rclr.Value -} - -// Creates a new instance of the RunCommandListResultPage type. -func NewRunCommandListResultPage(cur RunCommandListResult, getNextPage func(context.Context, RunCommandListResult) (RunCommandListResult, error)) RunCommandListResultPage { - return RunCommandListResultPage{ - fn: getNextPage, - rclr: cur, - } -} - -// RunCommandParameterDefinition describes the properties of a run command parameter. -type RunCommandParameterDefinition struct { - // Name - The run command parameter name. - Name *string `json:"name,omitempty"` - // Type - The run command parameter type. - Type *string `json:"type,omitempty"` - // DefaultValue - The run command parameter default value. - DefaultValue *string `json:"defaultValue,omitempty"` - // Required - The run command parameter required. - Required *bool `json:"required,omitempty"` -} - -// RunCommandResult ... -type RunCommandResult struct { - autorest.Response `json:"-"` - // Value - Run command operation response. - Value *[]InstanceViewStatus `json:"value,omitempty"` -} - -// ScaleInPolicy describes a scale-in policy for a virtual machine scale set. -type ScaleInPolicy struct { - // Rules - The rules to be followed when scaling-in a virtual machine scale set.

    Possible values are:

    **Default** When a virtual machine scale set is scaled in, the scale set will first be balanced across zones if it is a zonal scale set. Then, it will be balanced across Fault Domains as far as possible. Within each Fault Domain, the virtual machines chosen for removal will be the newest ones that are not protected from scale-in.

    **OldestVM** When a virtual machine scale set is being scaled-in, the oldest virtual machines that are not protected from scale-in will be chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced across zones. Within each zone, the oldest virtual machines that are not protected will be chosen for removal.

    **NewestVM** When a virtual machine scale set is being scaled-in, the newest virtual machines that are not protected from scale-in will be chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced across zones. Within each zone, the newest virtual machines that are not protected will be chosen for removal.

    - Rules *[]VirtualMachineScaleSetScaleInRules `json:"rules,omitempty"` - // ForceDeletion - This property allows you to specify if virtual machines chosen for removal have to be force deleted when a virtual machine scale set is being scaled-in.(Feature in Preview) - ForceDeletion *bool `json:"forceDeletion,omitempty"` -} - -// ScheduledEventsProfile ... -type ScheduledEventsProfile struct { - // TerminateNotificationProfile - Specifies Terminate Scheduled Event related configurations. - TerminateNotificationProfile *TerminateNotificationProfile `json:"terminateNotificationProfile,omitempty"` -} - -// SecurityProfile specifies the Security profile settings for the virtual machine or virtual machine scale -// set. -type SecurityProfile struct { - // UefiSettings - Specifies the security settings like secure boot and vTPM used while creating the virtual machine.

    Minimum api-version: 2020-12-01 - UefiSettings *UefiSettings `json:"uefiSettings,omitempty"` - // EncryptionAtHost - This property can be used by user in the request to enable or disable the Host Encryption for the virtual machine or virtual machine scale set. This will enable the encryption for all the disks including Resource/Temp disk at host itself.

    Default: The Encryption at host will be disabled unless this property is set to true for the resource. - EncryptionAtHost *bool `json:"encryptionAtHost,omitempty"` - // SecurityType - Specifies the SecurityType of the virtual machine. It has to be set to any specified value to enable UefiSettings.

    Default: UefiSettings will not be enabled unless this property is set. Possible values include: 'SecurityTypesTrustedLaunch', 'SecurityTypesConfidentialVM' - SecurityType SecurityTypes `json:"securityType,omitempty"` -} - -// SharedGallery specifies information about the Shared Gallery that you want to create or update. -type SharedGallery struct { - autorest.Response `json:"-"` - *SharedGalleryIdentifier `json:"identifier,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for SharedGallery. -func (sg SharedGallery) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if sg.SharedGalleryIdentifier != nil { - objectMap["identifier"] = sg.SharedGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SharedGallery struct. -func (sg *SharedGallery) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "identifier": - if v != nil { - var sharedGalleryIdentifier SharedGalleryIdentifier - err = json.Unmarshal(*v, &sharedGalleryIdentifier) - if err != nil { - return err - } - sg.SharedGalleryIdentifier = &sharedGalleryIdentifier - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - sg.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - sg.Location = &location - } - } - } - - return nil -} - -// SharedGalleryIdentifier the identifier information of shared gallery. -type SharedGalleryIdentifier struct { - // UniqueID - The unique id of this shared gallery. - UniqueID *string `json:"uniqueId,omitempty"` -} - -// SharedGalleryImage specifies information about the gallery image definition that you want to create or -// update. -type SharedGalleryImage struct { - autorest.Response `json:"-"` - *SharedGalleryImageProperties `json:"properties,omitempty"` - *SharedGalleryIdentifier `json:"identifier,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for SharedGalleryImage. -func (sgi SharedGalleryImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if sgi.SharedGalleryImageProperties != nil { - objectMap["properties"] = sgi.SharedGalleryImageProperties - } - if sgi.SharedGalleryIdentifier != nil { - objectMap["identifier"] = sgi.SharedGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SharedGalleryImage struct. -func (sgi *SharedGalleryImage) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var sharedGalleryImageProperties SharedGalleryImageProperties - err = json.Unmarshal(*v, &sharedGalleryImageProperties) - if err != nil { - return err - } - sgi.SharedGalleryImageProperties = &sharedGalleryImageProperties - } - case "identifier": - if v != nil { - var sharedGalleryIdentifier SharedGalleryIdentifier - err = json.Unmarshal(*v, &sharedGalleryIdentifier) - if err != nil { - return err - } - sgi.SharedGalleryIdentifier = &sharedGalleryIdentifier - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - sgi.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - sgi.Location = &location - } - } - } - - return nil -} - -// SharedGalleryImageList the List Shared Gallery Images operation response. -type SharedGalleryImageList struct { - autorest.Response `json:"-"` - // Value - A list of shared gallery images. - Value *[]SharedGalleryImage `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of shared gallery images. Call ListNext() with this to fetch the next page of shared gallery images. - NextLink *string `json:"nextLink,omitempty"` -} - -// SharedGalleryImageListIterator provides access to a complete listing of SharedGalleryImage values. -type SharedGalleryImageListIterator struct { - i int - page SharedGalleryImageListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *SharedGalleryImageListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *SharedGalleryImageListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter SharedGalleryImageListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter SharedGalleryImageListIterator) Response() SharedGalleryImageList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter SharedGalleryImageListIterator) Value() SharedGalleryImage { - if !iter.page.NotDone() { - return SharedGalleryImage{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the SharedGalleryImageListIterator type. -func NewSharedGalleryImageListIterator(page SharedGalleryImageListPage) SharedGalleryImageListIterator { - return SharedGalleryImageListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (sgil SharedGalleryImageList) IsEmpty() bool { - return sgil.Value == nil || len(*sgil.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (sgil SharedGalleryImageList) hasNextLink() bool { - return sgil.NextLink != nil && len(*sgil.NextLink) != 0 -} - -// sharedGalleryImageListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (sgil SharedGalleryImageList) sharedGalleryImageListPreparer(ctx context.Context) (*http.Request, error) { - if !sgil.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(sgil.NextLink))) -} - -// SharedGalleryImageListPage contains a page of SharedGalleryImage values. -type SharedGalleryImageListPage struct { - fn func(context.Context, SharedGalleryImageList) (SharedGalleryImageList, error) - sgil SharedGalleryImageList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *SharedGalleryImageListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.sgil) - if err != nil { - return err - } - page.sgil = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *SharedGalleryImageListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page SharedGalleryImageListPage) NotDone() bool { - return !page.sgil.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page SharedGalleryImageListPage) Response() SharedGalleryImageList { - return page.sgil -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page SharedGalleryImageListPage) Values() []SharedGalleryImage { - if page.sgil.IsEmpty() { - return nil - } - return *page.sgil.Value -} - -// Creates a new instance of the SharedGalleryImageListPage type. -func NewSharedGalleryImageListPage(cur SharedGalleryImageList, getNextPage func(context.Context, SharedGalleryImageList) (SharedGalleryImageList, error)) SharedGalleryImageListPage { - return SharedGalleryImageListPage{ - fn: getNextPage, - sgil: cur, - } -} - -// SharedGalleryImageProperties describes the properties of a gallery image definition. -type SharedGalleryImageProperties struct { - // OsType - This property allows you to specify the type of the OS that is included in the disk when creating a VM from a managed image.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // OsState - This property allows the user to specify whether the virtual machines created under this image are 'Generalized' or 'Specialized'. Possible values include: 'Generalized', 'Specialized' - OsState OperatingSystemStateTypes `json:"osState,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` - Identifier *GalleryImageIdentifier `json:"identifier,omitempty"` - Recommended *RecommendedMachineConfiguration `json:"recommended,omitempty"` - Disallowed *Disallowed `json:"disallowed,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // Features - A list of gallery image features. - Features *[]GalleryImageFeature `json:"features,omitempty"` - PurchasePlan *ImagePurchasePlan `json:"purchasePlan,omitempty"` -} - -// SharedGalleryImageVersion specifies information about the gallery image version that you want to create -// or update. -type SharedGalleryImageVersion struct { - autorest.Response `json:"-"` - *SharedGalleryImageVersionProperties `json:"properties,omitempty"` - *SharedGalleryIdentifier `json:"identifier,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for SharedGalleryImageVersion. -func (sgiv SharedGalleryImageVersion) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if sgiv.SharedGalleryImageVersionProperties != nil { - objectMap["properties"] = sgiv.SharedGalleryImageVersionProperties - } - if sgiv.SharedGalleryIdentifier != nil { - objectMap["identifier"] = sgiv.SharedGalleryIdentifier - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SharedGalleryImageVersion struct. -func (sgiv *SharedGalleryImageVersion) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var sharedGalleryImageVersionProperties SharedGalleryImageVersionProperties - err = json.Unmarshal(*v, &sharedGalleryImageVersionProperties) - if err != nil { - return err - } - sgiv.SharedGalleryImageVersionProperties = &sharedGalleryImageVersionProperties - } - case "identifier": - if v != nil { - var sharedGalleryIdentifier SharedGalleryIdentifier - err = json.Unmarshal(*v, &sharedGalleryIdentifier) - if err != nil { - return err - } - sgiv.SharedGalleryIdentifier = &sharedGalleryIdentifier - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - sgiv.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - sgiv.Location = &location - } - } - } - - return nil -} - -// SharedGalleryImageVersionList the List Shared Gallery Image versions operation response. -type SharedGalleryImageVersionList struct { - autorest.Response `json:"-"` - // Value - A list of shared gallery images versions. - Value *[]SharedGalleryImageVersion `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of shared gallery image versions. Call ListNext() with this to fetch the next page of shared gallery image versions. - NextLink *string `json:"nextLink,omitempty"` -} - -// SharedGalleryImageVersionListIterator provides access to a complete listing of SharedGalleryImageVersion -// values. -type SharedGalleryImageVersionListIterator struct { - i int - page SharedGalleryImageVersionListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *SharedGalleryImageVersionListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *SharedGalleryImageVersionListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter SharedGalleryImageVersionListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter SharedGalleryImageVersionListIterator) Response() SharedGalleryImageVersionList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter SharedGalleryImageVersionListIterator) Value() SharedGalleryImageVersion { - if !iter.page.NotDone() { - return SharedGalleryImageVersion{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the SharedGalleryImageVersionListIterator type. -func NewSharedGalleryImageVersionListIterator(page SharedGalleryImageVersionListPage) SharedGalleryImageVersionListIterator { - return SharedGalleryImageVersionListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (sgivl SharedGalleryImageVersionList) IsEmpty() bool { - return sgivl.Value == nil || len(*sgivl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (sgivl SharedGalleryImageVersionList) hasNextLink() bool { - return sgivl.NextLink != nil && len(*sgivl.NextLink) != 0 -} - -// sharedGalleryImageVersionListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (sgivl SharedGalleryImageVersionList) sharedGalleryImageVersionListPreparer(ctx context.Context) (*http.Request, error) { - if !sgivl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(sgivl.NextLink))) -} - -// SharedGalleryImageVersionListPage contains a page of SharedGalleryImageVersion values. -type SharedGalleryImageVersionListPage struct { - fn func(context.Context, SharedGalleryImageVersionList) (SharedGalleryImageVersionList, error) - sgivl SharedGalleryImageVersionList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *SharedGalleryImageVersionListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.sgivl) - if err != nil { - return err - } - page.sgivl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *SharedGalleryImageVersionListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page SharedGalleryImageVersionListPage) NotDone() bool { - return !page.sgivl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page SharedGalleryImageVersionListPage) Response() SharedGalleryImageVersionList { - return page.sgivl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page SharedGalleryImageVersionListPage) Values() []SharedGalleryImageVersion { - if page.sgivl.IsEmpty() { - return nil - } - return *page.sgivl.Value -} - -// Creates a new instance of the SharedGalleryImageVersionListPage type. -func NewSharedGalleryImageVersionListPage(cur SharedGalleryImageVersionList, getNextPage func(context.Context, SharedGalleryImageVersionList) (SharedGalleryImageVersionList, error)) SharedGalleryImageVersionListPage { - return SharedGalleryImageVersionListPage{ - fn: getNextPage, - sgivl: cur, - } -} - -// SharedGalleryImageVersionProperties describes the properties of a gallery image version. -type SharedGalleryImageVersionProperties struct { - // PublishedDate - The published date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // EndOfLifeDate - The end of life date of the gallery image version Definition. This property can be used for decommissioning purposes. This property is updatable. - EndOfLifeDate *date.Time `json:"endOfLifeDate,omitempty"` -} - -// SharedGalleryList the List Shared Galleries operation response. -type SharedGalleryList struct { - autorest.Response `json:"-"` - // Value - A list of shared galleries. - Value *[]SharedGallery `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of shared galleries. Call ListNext() with this to fetch the next page of shared galleries. - NextLink *string `json:"nextLink,omitempty"` -} - -// SharedGalleryListIterator provides access to a complete listing of SharedGallery values. -type SharedGalleryListIterator struct { - i int - page SharedGalleryListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *SharedGalleryListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *SharedGalleryListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter SharedGalleryListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter SharedGalleryListIterator) Response() SharedGalleryList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter SharedGalleryListIterator) Value() SharedGallery { - if !iter.page.NotDone() { - return SharedGallery{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the SharedGalleryListIterator type. -func NewSharedGalleryListIterator(page SharedGalleryListPage) SharedGalleryListIterator { - return SharedGalleryListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (sgl SharedGalleryList) IsEmpty() bool { - return sgl.Value == nil || len(*sgl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (sgl SharedGalleryList) hasNextLink() bool { - return sgl.NextLink != nil && len(*sgl.NextLink) != 0 -} - -// sharedGalleryListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (sgl SharedGalleryList) sharedGalleryListPreparer(ctx context.Context) (*http.Request, error) { - if !sgl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(sgl.NextLink))) -} - -// SharedGalleryListPage contains a page of SharedGallery values. -type SharedGalleryListPage struct { - fn func(context.Context, SharedGalleryList) (SharedGalleryList, error) - sgl SharedGalleryList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *SharedGalleryListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.sgl) - if err != nil { - return err - } - page.sgl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *SharedGalleryListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page SharedGalleryListPage) NotDone() bool { - return !page.sgl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page SharedGalleryListPage) Response() SharedGalleryList { - return page.sgl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page SharedGalleryListPage) Values() []SharedGallery { - if page.sgl.IsEmpty() { - return nil - } - return *page.sgl.Value -} - -// Creates a new instance of the SharedGalleryListPage type. -func NewSharedGalleryListPage(cur SharedGalleryList, getNextPage func(context.Context, SharedGalleryList) (SharedGalleryList, error)) SharedGalleryListPage { - return SharedGalleryListPage{ - fn: getNextPage, - sgl: cur, - } -} - -// ShareInfoElement ... -type ShareInfoElement struct { - // VMURI - READ-ONLY; A relative URI containing the ID of the VM that has the disk attached. - VMURI *string `json:"vmUri,omitempty"` -} - -// MarshalJSON is the custom marshaler for ShareInfoElement. -func (sie ShareInfoElement) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// SharingProfile profile for gallery sharing to subscription or tenant -type SharingProfile struct { - // Permissions - This property allows you to specify the permission of sharing gallery.

    Possible values are:

    **Private**

    **Groups**. Possible values include: 'Private', 'Groups' - Permissions GallerySharingPermissionTypes `json:"permissions,omitempty"` - // Groups - READ-ONLY; A list of sharing profile groups. - Groups *[]SharingProfileGroup `json:"groups,omitempty"` - // CommunityGalleryInfo - Information of community gallery if current gallery is shared to community. - CommunityGalleryInfo *CommunityGalleryInfo `json:"communityGalleryInfo,omitempty"` -} - -// MarshalJSON is the custom marshaler for SharingProfile. -func (sp SharingProfile) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if sp.Permissions != "" { - objectMap["permissions"] = sp.Permissions - } - if sp.CommunityGalleryInfo != nil { - objectMap["communityGalleryInfo"] = sp.CommunityGalleryInfo - } - return json.Marshal(objectMap) -} - -// SharingProfileGroup group of the gallery sharing profile -type SharingProfileGroup struct { - // Type - This property allows you to specify the type of sharing group.

    Possible values are:

    **Subscriptions**

    **AADTenants**

    **Community**. Possible values include: 'Subscriptions', 'AADTenants', 'Community' - Type SharingProfileGroupTypes `json:"type,omitempty"` - // Ids - A list of subscription/tenant ids the gallery is aimed to be shared to. - Ids *[]string `json:"ids,omitempty"` -} - -// SharingStatus sharing status of current gallery. -type SharingStatus struct { - // AggregatedState - Aggregated sharing state of current gallery. Possible values include: 'SharingStateSucceeded', 'SharingStateInProgress', 'SharingStateFailed', 'SharingStateUnknown' - AggregatedState SharingState `json:"aggregatedState,omitempty"` - // Summary - Summary of all regional sharing status. - Summary *[]RegionalSharingStatus `json:"summary,omitempty"` -} - -// SharingUpdate specifies information about the gallery sharing profile update. -type SharingUpdate struct { - autorest.Response `json:"-"` - // OperationType - This property allows you to specify the operation type of gallery sharing update.

    Possible values are:

    **Add**

    **Remove**

    **Reset**. Possible values include: 'Add', 'Remove', 'Reset', 'EnableCommunity' - OperationType SharingUpdateOperationTypes `json:"operationType,omitempty"` - // Groups - A list of sharing profile groups. - Groups *[]SharingProfileGroup `json:"groups,omitempty"` -} - -// Sku describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware -// the scale set is currently on, you need to deallocate the VMs in the scale set before you modify the SKU -// name. -type Sku struct { - // Name - The sku name. - Name *string `json:"name,omitempty"` - // Tier - Specifies the tier of virtual machines in a scale set.

    Possible Values:

    **Standard**

    **Basic** - Tier *string `json:"tier,omitempty"` - // Capacity - Specifies the number of virtual machines in the scale set. - Capacity *int64 `json:"capacity,omitempty"` -} - -// Snapshot snapshot resource. -type Snapshot struct { - autorest.Response `json:"-"` - // ManagedBy - READ-ONLY; Unused. Always Null. - ManagedBy *string `json:"managedBy,omitempty"` - Sku *SnapshotSku `json:"sku,omitempty"` - // ExtendedLocation - The extended location where the snapshot will be created. Extended location cannot be changed. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - *SnapshotProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Snapshot. -func (s Snapshot) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if s.Sku != nil { - objectMap["sku"] = s.Sku - } - if s.ExtendedLocation != nil { - objectMap["extendedLocation"] = s.ExtendedLocation - } - if s.SnapshotProperties != nil { - objectMap["properties"] = s.SnapshotProperties - } - if s.Location != nil { - objectMap["location"] = s.Location - } - if s.Tags != nil { - objectMap["tags"] = s.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Snapshot struct. -func (s *Snapshot) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "managedBy": - if v != nil { - var managedBy string - err = json.Unmarshal(*v, &managedBy) - if err != nil { - return err - } - s.ManagedBy = &managedBy - } - case "sku": - if v != nil { - var sku SnapshotSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - s.Sku = &sku - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - s.ExtendedLocation = &extendedLocation - } - case "properties": - if v != nil { - var snapshotProperties SnapshotProperties - err = json.Unmarshal(*v, &snapshotProperties) - if err != nil { - return err - } - s.SnapshotProperties = &snapshotProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - s.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - s.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - s.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - s.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - s.Tags = tags - } - } - } - - return nil -} - -// SnapshotList the List Snapshots operation response. -type SnapshotList struct { - autorest.Response `json:"-"` - // Value - A list of snapshots. - Value *[]Snapshot `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of snapshots. Call ListNext() with this to fetch the next page of snapshots. - NextLink *string `json:"nextLink,omitempty"` -} - -// SnapshotListIterator provides access to a complete listing of Snapshot values. -type SnapshotListIterator struct { - i int - page SnapshotListPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *SnapshotListIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotListIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *SnapshotListIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter SnapshotListIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter SnapshotListIterator) Response() SnapshotList { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter SnapshotListIterator) Value() Snapshot { - if !iter.page.NotDone() { - return Snapshot{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the SnapshotListIterator type. -func NewSnapshotListIterator(page SnapshotListPage) SnapshotListIterator { - return SnapshotListIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (sl SnapshotList) IsEmpty() bool { - return sl.Value == nil || len(*sl.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (sl SnapshotList) hasNextLink() bool { - return sl.NextLink != nil && len(*sl.NextLink) != 0 -} - -// snapshotListPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (sl SnapshotList) snapshotListPreparer(ctx context.Context) (*http.Request, error) { - if !sl.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(sl.NextLink))) -} - -// SnapshotListPage contains a page of Snapshot values. -type SnapshotListPage struct { - fn func(context.Context, SnapshotList) (SnapshotList, error) - sl SnapshotList -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *SnapshotListPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotListPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.sl) - if err != nil { - return err - } - page.sl = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *SnapshotListPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page SnapshotListPage) NotDone() bool { - return !page.sl.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page SnapshotListPage) Response() SnapshotList { - return page.sl -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page SnapshotListPage) Values() []Snapshot { - if page.sl.IsEmpty() { - return nil - } - return *page.sl.Value -} - -// Creates a new instance of the SnapshotListPage type. -func NewSnapshotListPage(cur SnapshotList, getNextPage func(context.Context, SnapshotList) (SnapshotList, error)) SnapshotListPage { - return SnapshotListPage{ - fn: getNextPage, - sl: cur, - } -} - -// SnapshotProperties snapshot resource properties. -type SnapshotProperties struct { - // TimeCreated - READ-ONLY; The time when the snapshot was created. - TimeCreated *date.Time `json:"timeCreated,omitempty"` - // OsType - The Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // HyperVGeneration - The hypervisor generation of the Virtual Machine. Applicable to OS disks only. Possible values include: 'V1', 'V2' - HyperVGeneration HyperVGeneration `json:"hyperVGeneration,omitempty"` - // PurchasePlan - Purchase plan information for the image from which the source disk for the snapshot was originally created. - PurchasePlan *PurchasePlan `json:"purchasePlan,omitempty"` - // SupportedCapabilities - List of supported capabilities for the image from which the source disk from the snapshot was originally created. - SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` - // CreationData - Disk source information. CreationData information cannot be changed after the disk has been created. - CreationData *CreationData `json:"creationData,omitempty"` - // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // DiskSizeBytes - READ-ONLY; The size of the disk in bytes. This field is read only. - DiskSizeBytes *int64 `json:"diskSizeBytes,omitempty"` - // DiskState - The state of the snapshot. Possible values include: 'Unattached', 'Attached', 'Reserved', 'Frozen', 'ActiveSAS', 'ActiveSASFrozen', 'ReadyToUpload', 'ActiveUpload' - DiskState DiskState `json:"diskState,omitempty"` - // UniqueID - READ-ONLY; Unique Guid identifying the resource. - UniqueID *string `json:"uniqueId,omitempty"` - // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. - EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` - // ProvisioningState - READ-ONLY; The disk provisioning state. - ProvisioningState *string `json:"provisioningState,omitempty"` - // Incremental - Whether a snapshot is incremental. Incremental snapshots on the same disk occupy less space than full snapshots and can be diffed. - Incremental *bool `json:"incremental,omitempty"` - // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. - Encryption *Encryption `json:"encryption,omitempty"` - // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' - NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` - // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. - DiskAccessID *string `json:"diskAccessId,omitempty"` - // SecurityProfile - Contains the security related information for the resource. - SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"` - // SupportsHibernation - Indicates the OS on a snapshot supports hibernation. - SupportsHibernation *bool `json:"supportsHibernation,omitempty"` - // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' - PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` - // CompletionPercent - Percentage complete for the background copy when a resource is created via the CopyStart operation. - CompletionPercent *float64 `json:"completionPercent,omitempty"` - // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' - DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` -} - -// MarshalJSON is the custom marshaler for SnapshotProperties. -func (sp SnapshotProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if sp.OsType != "" { - objectMap["osType"] = sp.OsType - } - if sp.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = sp.HyperVGeneration - } - if sp.PurchasePlan != nil { - objectMap["purchasePlan"] = sp.PurchasePlan - } - if sp.SupportedCapabilities != nil { - objectMap["supportedCapabilities"] = sp.SupportedCapabilities - } - if sp.CreationData != nil { - objectMap["creationData"] = sp.CreationData - } - if sp.DiskSizeGB != nil { - objectMap["diskSizeGB"] = sp.DiskSizeGB - } - if sp.DiskState != "" { - objectMap["diskState"] = sp.DiskState - } - if sp.EncryptionSettingsCollection != nil { - objectMap["encryptionSettingsCollection"] = sp.EncryptionSettingsCollection - } - if sp.Incremental != nil { - objectMap["incremental"] = sp.Incremental - } - if sp.Encryption != nil { - objectMap["encryption"] = sp.Encryption - } - if sp.NetworkAccessPolicy != "" { - objectMap["networkAccessPolicy"] = sp.NetworkAccessPolicy - } - if sp.DiskAccessID != nil { - objectMap["diskAccessId"] = sp.DiskAccessID - } - if sp.SecurityProfile != nil { - objectMap["securityProfile"] = sp.SecurityProfile - } - if sp.SupportsHibernation != nil { - objectMap["supportsHibernation"] = sp.SupportsHibernation - } - if sp.PublicNetworkAccess != "" { - objectMap["publicNetworkAccess"] = sp.PublicNetworkAccess - } - if sp.CompletionPercent != nil { - objectMap["completionPercent"] = sp.CompletionPercent - } - if sp.DataAccessAuthMode != "" { - objectMap["dataAccessAuthMode"] = sp.DataAccessAuthMode - } - return json.Marshal(objectMap) -} - -// SnapshotsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type SnapshotsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(SnapshotsClient) (Snapshot, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *SnapshotsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for SnapshotsCreateOrUpdateFuture.Result. -func (future *SnapshotsCreateOrUpdateFuture) result(client SnapshotsClient) (s Snapshot, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - s.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.SnapshotsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { - s, err = client.CreateOrUpdateResponder(s.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request") - } - } - return -} - -// SnapshotsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type SnapshotsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(SnapshotsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *SnapshotsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for SnapshotsDeleteFuture.Result. -func (future *SnapshotsDeleteFuture) result(client SnapshotsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.SnapshotsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// SnapshotsGrantAccessFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type SnapshotsGrantAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(SnapshotsClient) (AccessURI, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *SnapshotsGrantAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for SnapshotsGrantAccessFuture.Result. -func (future *SnapshotsGrantAccessFuture) result(client SnapshotsClient) (au AccessURI, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsGrantAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - au.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.SnapshotsGrantAccessFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if au.Response.Response, err = future.GetResult(sender); err == nil && au.Response.Response.StatusCode != http.StatusNoContent { - au, err = client.GrantAccessResponder(au.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsGrantAccessFuture", "Result", au.Response.Response, "Failure responding to request") - } - } - return -} - -// SnapshotSku the snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS. This is an -// optional parameter for incremental snapshot and the default behavior is the SKU will be set to the same -// sku as the previous snapshot -type SnapshotSku struct { - // Name - The sku name. Possible values include: 'SnapshotStorageAccountTypesStandardLRS', 'SnapshotStorageAccountTypesPremiumLRS', 'SnapshotStorageAccountTypesStandardZRS' - Name SnapshotStorageAccountTypes `json:"name,omitempty"` - // Tier - READ-ONLY; The sku tier. - Tier *string `json:"tier,omitempty"` -} - -// MarshalJSON is the custom marshaler for SnapshotSku. -func (ss SnapshotSku) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ss.Name != "" { - objectMap["name"] = ss.Name - } - return json.Marshal(objectMap) -} - -// SnapshotsRevokeAccessFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type SnapshotsRevokeAccessFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(SnapshotsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *SnapshotsRevokeAccessFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for SnapshotsRevokeAccessFuture.Result. -func (future *SnapshotsRevokeAccessFuture) result(client SnapshotsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsRevokeAccessFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.SnapshotsRevokeAccessFuture") - return - } - ar.Response = future.Response() - return -} - -// SnapshotsUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type SnapshotsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(SnapshotsClient) (Snapshot, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *SnapshotsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for SnapshotsUpdateFuture.Result. -func (future *SnapshotsUpdateFuture) result(client SnapshotsClient) (s Snapshot, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - s.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.SnapshotsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { - s, err = client.UpdateResponder(s.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsUpdateFuture", "Result", s.Response.Response, "Failure responding to request") - } - } - return -} - -// SnapshotUpdate snapshot update resource. -type SnapshotUpdate struct { - *SnapshotUpdateProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` - Sku *SnapshotSku `json:"sku,omitempty"` -} - -// MarshalJSON is the custom marshaler for SnapshotUpdate. -func (su SnapshotUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if su.SnapshotUpdateProperties != nil { - objectMap["properties"] = su.SnapshotUpdateProperties - } - if su.Tags != nil { - objectMap["tags"] = su.Tags - } - if su.Sku != nil { - objectMap["sku"] = su.Sku - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SnapshotUpdate struct. -func (su *SnapshotUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var snapshotUpdateProperties SnapshotUpdateProperties - err = json.Unmarshal(*v, &snapshotUpdateProperties) - if err != nil { - return err - } - su.SnapshotUpdateProperties = &snapshotUpdateProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - su.Tags = tags - } - case "sku": - if v != nil { - var sku SnapshotSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - su.Sku = &sku - } - } - } - - return nil -} - -// SnapshotUpdateProperties snapshot resource update properties. -type SnapshotUpdateProperties struct { - // OsType - the Operating System type. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // DiskSizeGB - If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // EncryptionSettingsCollection - Encryption settings collection used be Azure Disk Encryption, can contain multiple encryption settings per disk or snapshot. - EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` - // Encryption - Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys. - Encryption *Encryption `json:"encryption,omitempty"` - // NetworkAccessPolicy - Possible values include: 'AllowAll', 'AllowPrivate', 'DenyAll' - NetworkAccessPolicy NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` - // DiskAccessID - ARM id of the DiskAccess resource for using private endpoints on disks. - DiskAccessID *string `json:"diskAccessId,omitempty"` - // SupportsHibernation - Indicates the OS on a snapshot supports hibernation. - SupportsHibernation *bool `json:"supportsHibernation,omitempty"` - // PublicNetworkAccess - Possible values include: 'Enabled', 'Disabled' - PublicNetworkAccess PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` - // DataAccessAuthMode - Possible values include: 'DataAccessAuthModeAzureActiveDirectory', 'DataAccessAuthModeNone' - DataAccessAuthMode DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` - // SupportedCapabilities - List of supported capabilities for the image from which the OS disk was created. - SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"` -} - -// SoftDeletePolicy contains information about the soft deletion policy of the gallery. -type SoftDeletePolicy struct { - // IsSoftDeleteEnabled - Enables soft-deletion for resources in this gallery, allowing them to be recovered within retention time. - IsSoftDeleteEnabled *bool `json:"isSoftDeleteEnabled,omitempty"` -} - -// SourceVault the vault id is an Azure Resource Manager Resource id in the form -// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName} -type SourceVault struct { - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// SpotRestorePolicy specifies the Spot-Try-Restore properties for the virtual machine scale set.

    -// With this property customer can enable or disable automatic restore of the evicted Spot VMSS VM -// instances opportunistically based on capacity availability and pricing constraint. -type SpotRestorePolicy struct { - // Enabled - Enables the Spot-Try-Restore feature where evicted VMSS SPOT instances will be tried to be restored opportunistically based on capacity availability and pricing constraints - Enabled *bool `json:"enabled,omitempty"` - // RestoreTimeout - Timeout value expressed as an ISO 8601 time duration after which the platform will not try to restore the VMSS SPOT instances - RestoreTimeout *string `json:"restoreTimeout,omitempty"` -} - -// SSHConfiguration SSH configuration for Linux based VMs running on Azure -type SSHConfiguration struct { - // PublicKeys - The list of SSH public keys used to authenticate with linux based VMs. - PublicKeys *[]SSHPublicKey `json:"publicKeys,omitempty"` -} - -// SSHPublicKey contains information about SSH certificate public key and the path on the Linux VM where -// the public key is placed. -type SSHPublicKey struct { - // Path - Specifies the full path on the created VM where ssh public key is stored. If the file already exists, the specified key is appended to the file. Example: /home/user/.ssh/authorized_keys - Path *string `json:"path,omitempty"` - // KeyData - SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format.

    For creating ssh keys, see [Create SSH keys on Linux and Mac for Linux VMs in Azure]https://docs.microsoft.com/azure/virtual-machines/linux/create-ssh-keys-detailed). - KeyData *string `json:"keyData,omitempty"` -} - -// SSHPublicKeyGenerateKeyPairResult response from generation of an SSH key pair. -type SSHPublicKeyGenerateKeyPairResult struct { - autorest.Response `json:"-"` - // PrivateKey - Private key portion of the key pair used to authenticate to a virtual machine through ssh. The private key is returned in RFC3447 format and should be treated as a secret. - PrivateKey *string `json:"privateKey,omitempty"` - // PublicKey - Public key portion of the key pair used to authenticate to a virtual machine through ssh. The public key is in ssh-rsa format. - PublicKey *string `json:"publicKey,omitempty"` - // ID - The ARM resource id in the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName} - ID *string `json:"id,omitempty"` -} - -// SSHPublicKeyResource specifies information about the SSH public key. -type SSHPublicKeyResource struct { - autorest.Response `json:"-"` - // SSHPublicKeyResourceProperties - Properties of the SSH public key. - *SSHPublicKeyResourceProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for SSHPublicKeyResource. -func (spkr SSHPublicKeyResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if spkr.SSHPublicKeyResourceProperties != nil { - objectMap["properties"] = spkr.SSHPublicKeyResourceProperties - } - if spkr.Location != nil { - objectMap["location"] = spkr.Location - } - if spkr.Tags != nil { - objectMap["tags"] = spkr.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SSHPublicKeyResource struct. -func (spkr *SSHPublicKeyResource) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var SSHPublicKeyResourceProperties SSHPublicKeyResourceProperties - err = json.Unmarshal(*v, &SSHPublicKeyResourceProperties) - if err != nil { - return err - } - spkr.SSHPublicKeyResourceProperties = &SSHPublicKeyResourceProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - spkr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - spkr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - spkr.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - spkr.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - spkr.Tags = tags - } - } - } - - return nil -} - -// SSHPublicKeyResourceProperties properties of the SSH public key. -type SSHPublicKeyResourceProperties struct { - // PublicKey - SSH public key used to authenticate to a virtual machine through ssh. If this property is not initially provided when the resource is created, the publicKey property will be populated when generateKeyPair is called. If the public key is provided upon resource creation, the provided public key needs to be at least 2048-bit and in ssh-rsa format. - PublicKey *string `json:"publicKey,omitempty"` -} - -// SSHPublicKeysGroupListResult the list SSH public keys operation response. -type SSHPublicKeysGroupListResult struct { - autorest.Response `json:"-"` - // Value - The list of SSH public keys - Value *[]SSHPublicKeyResource `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of SSH public keys. Call ListNext() with this URI to fetch the next page of SSH public keys. - NextLink *string `json:"nextLink,omitempty"` -} - -// SSHPublicKeysGroupListResultIterator provides access to a complete listing of SSHPublicKeyResource -// values. -type SSHPublicKeysGroupListResultIterator struct { - i int - page SSHPublicKeysGroupListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *SSHPublicKeysGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysGroupListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *SSHPublicKeysGroupListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter SSHPublicKeysGroupListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter SSHPublicKeysGroupListResultIterator) Response() SSHPublicKeysGroupListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter SSHPublicKeysGroupListResultIterator) Value() SSHPublicKeyResource { - if !iter.page.NotDone() { - return SSHPublicKeyResource{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the SSHPublicKeysGroupListResultIterator type. -func NewSSHPublicKeysGroupListResultIterator(page SSHPublicKeysGroupListResultPage) SSHPublicKeysGroupListResultIterator { - return SSHPublicKeysGroupListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (spkglr SSHPublicKeysGroupListResult) IsEmpty() bool { - return spkglr.Value == nil || len(*spkglr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (spkglr SSHPublicKeysGroupListResult) hasNextLink() bool { - return spkglr.NextLink != nil && len(*spkglr.NextLink) != 0 -} - -// sSHPublicKeysGroupListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (spkglr SSHPublicKeysGroupListResult) sSHPublicKeysGroupListResultPreparer(ctx context.Context) (*http.Request, error) { - if !spkglr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(spkglr.NextLink))) -} - -// SSHPublicKeysGroupListResultPage contains a page of SSHPublicKeyResource values. -type SSHPublicKeysGroupListResultPage struct { - fn func(context.Context, SSHPublicKeysGroupListResult) (SSHPublicKeysGroupListResult, error) - spkglr SSHPublicKeysGroupListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *SSHPublicKeysGroupListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysGroupListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.spkglr) - if err != nil { - return err - } - page.spkglr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *SSHPublicKeysGroupListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page SSHPublicKeysGroupListResultPage) NotDone() bool { - return !page.spkglr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page SSHPublicKeysGroupListResultPage) Response() SSHPublicKeysGroupListResult { - return page.spkglr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page SSHPublicKeysGroupListResultPage) Values() []SSHPublicKeyResource { - if page.spkglr.IsEmpty() { - return nil - } - return *page.spkglr.Value -} - -// Creates a new instance of the SSHPublicKeysGroupListResultPage type. -func NewSSHPublicKeysGroupListResultPage(cur SSHPublicKeysGroupListResult, getNextPage func(context.Context, SSHPublicKeysGroupListResult) (SSHPublicKeysGroupListResult, error)) SSHPublicKeysGroupListResultPage { - return SSHPublicKeysGroupListResultPage{ - fn: getNextPage, - spkglr: cur, - } -} - -// SSHPublicKeyUpdateResource specifies information about the SSH public key. -type SSHPublicKeyUpdateResource struct { - // SSHPublicKeyResourceProperties - Properties of the SSH public key. - *SSHPublicKeyResourceProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for SSHPublicKeyUpdateResource. -func (spkur SSHPublicKeyUpdateResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if spkur.SSHPublicKeyResourceProperties != nil { - objectMap["properties"] = spkur.SSHPublicKeyResourceProperties - } - if spkur.Tags != nil { - objectMap["tags"] = spkur.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for SSHPublicKeyUpdateResource struct. -func (spkur *SSHPublicKeyUpdateResource) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var SSHPublicKeyResourceProperties SSHPublicKeyResourceProperties - err = json.Unmarshal(*v, &SSHPublicKeyResourceProperties) - if err != nil { - return err - } - spkur.SSHPublicKeyResourceProperties = &SSHPublicKeyResourceProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - spkur.Tags = tags - } - } - } - - return nil -} - -// StatusCodeCount ... -type StatusCodeCount struct { - // Code - READ-ONLY; The instance view status code - Code *string `json:"code,omitempty"` - // Count - READ-ONLY; Number of instances having this status code - Count *int32 `json:"count,omitempty"` -} - -// MarshalJSON is the custom marshaler for StatusCodeCount. -func (scc StatusCodeCount) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// StorageProfile specifies the storage settings for the virtual machine disks. -type StorageProfile struct { - // ImageReference - Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - ImageReference *ImageReference `json:"imageReference,omitempty"` - // OsDisk - Specifies information about the operating system disk used by the virtual machine.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - OsDisk *OSDisk `json:"osDisk,omitempty"` - // DataDisks - Specifies the parameters that are used to add a data disk to a virtual machine.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - DataDisks *[]DataDisk `json:"dataDisks,omitempty"` -} - -// SubResource ... -type SubResource struct { - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// SubResourceReadOnly ... -type SubResourceReadOnly struct { - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for SubResourceReadOnly. -func (srro SubResourceReadOnly) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// SubResourceWithColocationStatus ... -type SubResourceWithColocationStatus struct { - // ColocationStatus - Describes colocation status of a resource in the Proximity Placement Group. - ColocationStatus *InstanceViewStatus `json:"colocationStatus,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// SupportedCapabilities list of supported capabilities persisted on the disk resource for VM use. -type SupportedCapabilities struct { - // AcceleratedNetwork - True if the image from which the OS disk is created supports accelerated networking. - AcceleratedNetwork *bool `json:"acceleratedNetwork,omitempty"` - // Architecture - CPU architecture supported by an OS disk. Possible values include: 'X64', 'Arm64' - Architecture Architecture `json:"architecture,omitempty"` -} - -// TargetRegion describes the target region information. -type TargetRegion struct { - // Name - The name of the region. - Name *string `json:"name,omitempty"` - // RegionalReplicaCount - The number of replicas of the Image Version to be created per region. This property is updatable. - RegionalReplicaCount *int32 `json:"regionalReplicaCount,omitempty"` - // StorageAccountType - Specifies the storage account type to be used to store the image. This property is not updatable. Possible values include: 'StorageAccountTypeStandardLRS', 'StorageAccountTypeStandardZRS', 'StorageAccountTypePremiumLRS' - StorageAccountType StorageAccountType `json:"storageAccountType,omitempty"` - Encryption *EncryptionImages `json:"encryption,omitempty"` -} - -// TerminateNotificationProfile ... -type TerminateNotificationProfile struct { - // NotBeforeTimeout - Configurable length of time a Virtual Machine being deleted will have to potentially approve the Terminate Scheduled Event before the event is auto approved (timed out). The configuration must be specified in ISO 8601 format, the default value is 5 minutes (PT5M) - NotBeforeTimeout *string `json:"notBeforeTimeout,omitempty"` - // Enable - Specifies whether the Terminate Scheduled event is enabled or disabled. - Enable *bool `json:"enable,omitempty"` -} - -// ThrottledRequestsInput api request input for LogAnalytics getThrottledRequests Api. -type ThrottledRequestsInput struct { - // BlobContainerSasURI - SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to. - BlobContainerSasURI *string `json:"blobContainerSasUri,omitempty"` - // FromTime - From time of the query - FromTime *date.Time `json:"fromTime,omitempty"` - // ToTime - To time of the query - ToTime *date.Time `json:"toTime,omitempty"` - // GroupByThrottlePolicy - Group query result by Throttle Policy applied. - GroupByThrottlePolicy *bool `json:"groupByThrottlePolicy,omitempty"` - // GroupByOperationName - Group query result by Operation Name. - GroupByOperationName *bool `json:"groupByOperationName,omitempty"` - // GroupByResourceName - Group query result by Resource Name. - GroupByResourceName *bool `json:"groupByResourceName,omitempty"` - // GroupByClientApplicationID - Group query result by Client Application ID. - GroupByClientApplicationID *bool `json:"groupByClientApplicationId,omitempty"` - // GroupByUserAgent - Group query result by User Agent. - GroupByUserAgent *bool `json:"groupByUserAgent,omitempty"` -} - -// UefiSettings specifies the security settings like secure boot and vTPM used while creating the virtual -// machine.

    Minimum api-version: 2020-12-01 -type UefiSettings struct { - // SecureBootEnabled - Specifies whether secure boot should be enabled on the virtual machine.

    Minimum api-version: 2020-12-01 - SecureBootEnabled *bool `json:"secureBootEnabled,omitempty"` - // VTpmEnabled - Specifies whether vTPM should be enabled on the virtual machine.

    Minimum api-version: 2020-12-01 - VTpmEnabled *bool `json:"vTpmEnabled,omitempty"` -} - -// UpdateDomain defines an update domain for the cloud service. -type UpdateDomain struct { - autorest.Response `json:"-"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource Name - Name *string `json:"name,omitempty"` -} - -// MarshalJSON is the custom marshaler for UpdateDomain. -func (ud UpdateDomain) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UpdateDomainListResult ... -type UpdateDomainListResult struct { - autorest.Response `json:"-"` - Value *[]UpdateDomain `json:"value,omitempty"` - NextLink *string `json:"nextLink,omitempty"` -} - -// UpdateDomainListResultIterator provides access to a complete listing of UpdateDomain values. -type UpdateDomainListResultIterator struct { - i int - page UpdateDomainListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *UpdateDomainListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UpdateDomainListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *UpdateDomainListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter UpdateDomainListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter UpdateDomainListResultIterator) Response() UpdateDomainListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter UpdateDomainListResultIterator) Value() UpdateDomain { - if !iter.page.NotDone() { - return UpdateDomain{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the UpdateDomainListResultIterator type. -func NewUpdateDomainListResultIterator(page UpdateDomainListResultPage) UpdateDomainListResultIterator { - return UpdateDomainListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (udlr UpdateDomainListResult) IsEmpty() bool { - return udlr.Value == nil || len(*udlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (udlr UpdateDomainListResult) hasNextLink() bool { - return udlr.NextLink != nil && len(*udlr.NextLink) != 0 -} - -// updateDomainListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (udlr UpdateDomainListResult) updateDomainListResultPreparer(ctx context.Context) (*http.Request, error) { - if !udlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(udlr.NextLink))) -} - -// UpdateDomainListResultPage contains a page of UpdateDomain values. -type UpdateDomainListResultPage struct { - fn func(context.Context, UpdateDomainListResult) (UpdateDomainListResult, error) - udlr UpdateDomainListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *UpdateDomainListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UpdateDomainListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.udlr) - if err != nil { - return err - } - page.udlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *UpdateDomainListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page UpdateDomainListResultPage) NotDone() bool { - return !page.udlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page UpdateDomainListResultPage) Response() UpdateDomainListResult { - return page.udlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page UpdateDomainListResultPage) Values() []UpdateDomain { - if page.udlr.IsEmpty() { - return nil - } - return *page.udlr.Value -} - -// Creates a new instance of the UpdateDomainListResultPage type. -func NewUpdateDomainListResultPage(cur UpdateDomainListResult, getNextPage func(context.Context, UpdateDomainListResult) (UpdateDomainListResult, error)) UpdateDomainListResultPage { - return UpdateDomainListResultPage{ - fn: getNextPage, - udlr: cur, - } -} - -// UpdateResource the Update Resource model definition. -type UpdateResource struct { - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for UpdateResource. -func (ur UpdateResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ur.Tags != nil { - objectMap["tags"] = ur.Tags - } - return json.Marshal(objectMap) -} - -// UpdateResourceDefinition the Update Resource model definition. -type UpdateResourceDefinition struct { - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for UpdateResourceDefinition. -func (urd UpdateResourceDefinition) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if urd.Tags != nil { - objectMap["tags"] = urd.Tags - } - return json.Marshal(objectMap) -} - -// UpgradeOperationHistoricalStatusInfo virtual Machine Scale Set OS Upgrade History operation response. -type UpgradeOperationHistoricalStatusInfo struct { - // Properties - READ-ONLY; Information about the properties of the upgrade operation. - Properties *UpgradeOperationHistoricalStatusInfoProperties `json:"properties,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` -} - -// MarshalJSON is the custom marshaler for UpgradeOperationHistoricalStatusInfo. -func (uohsi UpgradeOperationHistoricalStatusInfo) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UpgradeOperationHistoricalStatusInfoProperties describes each OS upgrade on the Virtual Machine Scale -// Set. -type UpgradeOperationHistoricalStatusInfoProperties struct { - // RunningStatus - READ-ONLY; Information about the overall status of the upgrade operation. - RunningStatus *UpgradeOperationHistoryStatus `json:"runningStatus,omitempty"` - // Progress - READ-ONLY; Counts of the VMs in each state. - Progress *RollingUpgradeProgressInfo `json:"progress,omitempty"` - // Error - READ-ONLY; Error Details for this upgrade if there are any. - Error *APIError `json:"error,omitempty"` - // StartedBy - READ-ONLY; Invoker of the Upgrade Operation. Possible values include: 'UpgradeOperationInvokerUnknown', 'UpgradeOperationInvokerUser', 'UpgradeOperationInvokerPlatform' - StartedBy UpgradeOperationInvoker `json:"startedBy,omitempty"` - // TargetImageReference - READ-ONLY; Image Reference details - TargetImageReference *ImageReference `json:"targetImageReference,omitempty"` - // RollbackInfo - READ-ONLY; Information about OS rollback if performed - RollbackInfo *RollbackStatusInfo `json:"rollbackInfo,omitempty"` -} - -// MarshalJSON is the custom marshaler for UpgradeOperationHistoricalStatusInfoProperties. -func (uohsip UpgradeOperationHistoricalStatusInfoProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UpgradeOperationHistoryStatus information about the current running state of the overall upgrade. -type UpgradeOperationHistoryStatus struct { - // Code - READ-ONLY; Code indicating the current status of the upgrade. Possible values include: 'UpgradeStateRollingForward', 'UpgradeStateCancelled', 'UpgradeStateCompleted', 'UpgradeStateFaulted' - Code UpgradeState `json:"code,omitempty"` - // StartTime - READ-ONLY; Start time of the upgrade. - StartTime *date.Time `json:"startTime,omitempty"` - // EndTime - READ-ONLY; End time of the upgrade. - EndTime *date.Time `json:"endTime,omitempty"` -} - -// MarshalJSON is the custom marshaler for UpgradeOperationHistoryStatus. -func (uohs UpgradeOperationHistoryStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UpgradePolicy describes an upgrade policy - automatic, manual, or rolling. -type UpgradePolicy struct { - // Mode - Specifies the mode of an upgrade to virtual machines in the scale set.

    Possible values are:

    **Manual** - You control the application of updates to virtual machines in the scale set. You do this by using the manualUpgrade action.

    **Automatic** - All virtual machines in the scale set are automatically updated at the same time. Possible values include: 'UpgradeModeAutomatic', 'UpgradeModeManual', 'UpgradeModeRolling' - Mode UpgradeMode `json:"mode,omitempty"` - // RollingUpgradePolicy - The configuration parameters used while performing a rolling upgrade. - RollingUpgradePolicy *RollingUpgradePolicy `json:"rollingUpgradePolicy,omitempty"` - // AutomaticOSUpgradePolicy - Configuration parameters used for performing automatic OS Upgrade. - AutomaticOSUpgradePolicy *AutomaticOSUpgradePolicy `json:"automaticOSUpgradePolicy,omitempty"` -} - -// Usage describes Compute Resource Usage. -type Usage struct { - // Unit - An enum describing the unit of usage measurement. - Unit *string `json:"unit,omitempty"` - // CurrentValue - The current usage of the resource. - CurrentValue *int32 `json:"currentValue,omitempty"` - // Limit - The maximum permitted usage of the resource. - Limit *int64 `json:"limit,omitempty"` - // Name - The name of the type of usage. - Name *UsageName `json:"name,omitempty"` -} - -// UsageName the Usage Names. -type UsageName struct { - // Value - The name of the resource. - Value *string `json:"value,omitempty"` - // LocalizedValue - The localized name of the resource. - LocalizedValue *string `json:"localizedValue,omitempty"` -} - -// UserArtifactManage ... -type UserArtifactManage struct { - // Install - Required. The path and arguments to install the gallery application. This is limited to 4096 characters. - Install *string `json:"install,omitempty"` - // Remove - Required. The path and arguments to remove the gallery application. This is limited to 4096 characters. - Remove *string `json:"remove,omitempty"` - // Update - Optional. The path and arguments to update the gallery application. If not present, then update operation will invoke remove command on the previous version and install command on the current version of the gallery application. This is limited to 4096 characters. - Update *string `json:"update,omitempty"` -} - -// UserArtifactSource the source image from which the Image Version is going to be created. -type UserArtifactSource struct { - // MediaLink - Required. The mediaLink of the artifact, must be a readable storage page blob. - MediaLink *string `json:"mediaLink,omitempty"` - // DefaultConfigurationLink - Optional. The defaultConfigurationLink of the artifact, must be a readable storage page blob. - DefaultConfigurationLink *string `json:"defaultConfigurationLink,omitempty"` -} - -// UserAssignedIdentitiesValue ... -type UserAssignedIdentitiesValue struct { - // PrincipalID - READ-ONLY; The principal id of user assigned identity. - PrincipalID *string `json:"principalId,omitempty"` - // ClientID - READ-ONLY; The client id of user assigned identity. - ClientID *string `json:"clientId,omitempty"` -} - -// MarshalJSON is the custom marshaler for UserAssignedIdentitiesValue. -func (uaiv UserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VaultCertificate describes a single certificate reference in a Key Vault, and where the certificate -// should reside on the VM. -type VaultCertificate struct { - // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8:

    {
    "data":"",
    "dataType":"pfx",
    "password":""
    }
    To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). - CertificateURL *string `json:"certificateUrl,omitempty"` - // CertificateStore - For Windows VMs, specifies the certificate store on the Virtual Machine to which the certificate should be added. The specified certificate store is implicitly in the LocalMachine account.

    For Linux VMs, the certificate file is placed under the /var/lib/waagent directory, with the file name <UppercaseThumbprint>.crt for the X509 certificate file and <UppercaseThumbprint>.prv for private key. Both of these files are .pem formatted. - CertificateStore *string `json:"certificateStore,omitempty"` -} - -// VaultSecretGroup describes a set of certificates which are all in the same Key Vault. -type VaultSecretGroup struct { - // SourceVault - The relative URL of the Key Vault containing all of the certificates in VaultCertificates. - SourceVault *SubResource `json:"sourceVault,omitempty"` - // VaultCertificates - The list of key vault references in SourceVault which contain certificates. - VaultCertificates *[]VaultCertificate `json:"vaultCertificates,omitempty"` -} - -// VirtualHardDisk describes the uri of a disk. -type VirtualHardDisk struct { - // URI - Specifies the virtual hard disk's uri. - URI *string `json:"uri,omitempty"` -} - -// VirtualMachine describes a Virtual Machine. -type VirtualMachine struct { - autorest.Response `json:"-"` - // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - Plan *Plan `json:"plan,omitempty"` - *VirtualMachineProperties `json:"properties,omitempty"` - // Resources - READ-ONLY; The virtual machine child extension resources. - Resources *[]VirtualMachineExtension `json:"resources,omitempty"` - // Identity - The identity of the virtual machine, if configured. - Identity *VirtualMachineIdentity `json:"identity,omitempty"` - // Zones - The virtual machine zones. - Zones *[]string `json:"zones,omitempty"` - // ExtendedLocation - The extended location of the Virtual Machine. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachine. -func (VM VirtualMachine) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if VM.Plan != nil { - objectMap["plan"] = VM.Plan - } - if VM.VirtualMachineProperties != nil { - objectMap["properties"] = VM.VirtualMachineProperties - } - if VM.Identity != nil { - objectMap["identity"] = VM.Identity - } - if VM.Zones != nil { - objectMap["zones"] = VM.Zones - } - if VM.ExtendedLocation != nil { - objectMap["extendedLocation"] = VM.ExtendedLocation - } - if VM.Location != nil { - objectMap["location"] = VM.Location - } - if VM.Tags != nil { - objectMap["tags"] = VM.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachine struct. -func (VM *VirtualMachine) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "plan": - if v != nil { - var plan Plan - err = json.Unmarshal(*v, &plan) - if err != nil { - return err - } - VM.Plan = &plan - } - case "properties": - if v != nil { - var virtualMachineProperties VirtualMachineProperties - err = json.Unmarshal(*v, &virtualMachineProperties) - if err != nil { - return err - } - VM.VirtualMachineProperties = &virtualMachineProperties - } - case "resources": - if v != nil { - var resources []VirtualMachineExtension - err = json.Unmarshal(*v, &resources) - if err != nil { - return err - } - VM.Resources = &resources - } - case "identity": - if v != nil { - var identity VirtualMachineIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - VM.Identity = &identity - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - VM.Zones = &zones - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - VM.ExtendedLocation = &extendedLocation - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - VM.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - VM.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - VM.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - VM.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - VM.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineAgentInstanceView the instance view of the VM Agent running on the virtual machine. -type VirtualMachineAgentInstanceView struct { - // VMAgentVersion - The VM Agent full version. - VMAgentVersion *string `json:"vmAgentVersion,omitempty"` - // ExtensionHandlers - The virtual machine extension handler instance view. - ExtensionHandlers *[]VirtualMachineExtensionHandlerInstanceView `json:"extensionHandlers,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// VirtualMachineAssessPatchesResult describes the properties of an AssessPatches result. -type VirtualMachineAssessPatchesResult struct { - autorest.Response `json:"-"` - // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded", or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' - Status PatchOperationStatus `json:"status,omitempty"` - // AssessmentActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. - AssessmentActivityID *string `json:"assessmentActivityId,omitempty"` - // RebootPending - READ-ONLY; The overall reboot status of the VM. It will be true when partially installed patches require a reboot to complete installation but the reboot has not yet occurred. - RebootPending *bool `json:"rebootPending,omitempty"` - // CriticalAndSecurityPatchCount - READ-ONLY; The number of critical or security patches that have been detected as available and not yet installed. - CriticalAndSecurityPatchCount *int32 `json:"criticalAndSecurityPatchCount,omitempty"` - // OtherPatchCount - READ-ONLY; The number of all available patches excluding critical and security. - OtherPatchCount *int32 `json:"otherPatchCount,omitempty"` - // StartDateTime - READ-ONLY; The UTC timestamp when the operation began. - StartDateTime *date.Time `json:"startDateTime,omitempty"` - // AvailablePatches - READ-ONLY; The list of patches that have been detected as available for installation. - AvailablePatches *[]VirtualMachineSoftwarePatchProperties `json:"availablePatches,omitempty"` - // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. - Error *APIError `json:"error,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineAssessPatchesResult. -func (vmapr VirtualMachineAssessPatchesResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineCaptureParameters capture Virtual Machine parameters. -type VirtualMachineCaptureParameters struct { - // VhdPrefix - The captured virtual hard disk's name prefix. - VhdPrefix *string `json:"vhdPrefix,omitempty"` - // DestinationContainerName - The destination container name. - DestinationContainerName *string `json:"destinationContainerName,omitempty"` - // OverwriteVhds - Specifies whether to overwrite the destination virtual hard disk, in case of conflict. - OverwriteVhds *bool `json:"overwriteVhds,omitempty"` -} - -// VirtualMachineCaptureResult output of virtual machine capture operation. -type VirtualMachineCaptureResult struct { - autorest.Response `json:"-"` - // Schema - READ-ONLY; the schema of the captured virtual machine - Schema *string `json:"$schema,omitempty"` - // ContentVersion - READ-ONLY; the version of the content - ContentVersion *string `json:"contentVersion,omitempty"` - // Parameters - READ-ONLY; parameters of the captured virtual machine - Parameters interface{} `json:"parameters,omitempty"` - // Resources - READ-ONLY; a list of resource items of the captured virtual machine - Resources *[]interface{} `json:"resources,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineCaptureResult. -func (vmcr VirtualMachineCaptureResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmcr.ID != nil { - objectMap["id"] = vmcr.ID - } - return json.Marshal(objectMap) -} - -// VirtualMachineExtension describes a Virtual Machine Extension. -type VirtualMachineExtension struct { - autorest.Response `json:"-"` - *VirtualMachineExtensionProperties `json:"properties,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineExtension. -func (vme VirtualMachineExtension) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vme.VirtualMachineExtensionProperties != nil { - objectMap["properties"] = vme.VirtualMachineExtensionProperties - } - if vme.Location != nil { - objectMap["location"] = vme.Location - } - if vme.Tags != nil { - objectMap["tags"] = vme.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtension struct. -func (vme *VirtualMachineExtension) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineExtensionProperties VirtualMachineExtensionProperties - err = json.Unmarshal(*v, &virtualMachineExtensionProperties) - if err != nil { - return err - } - vme.VirtualMachineExtensionProperties = &virtualMachineExtensionProperties - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vme.Location = &location - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vme.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vme.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vme.Type = &typeVar - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vme.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineExtensionHandlerInstanceView the instance view of a virtual machine extension handler. -type VirtualMachineExtensionHandlerInstanceView struct { - // Type - Specifies the type of the extension; an example is "CustomScriptExtension". - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the script handler. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // Status - The extension handler status. - Status *InstanceViewStatus `json:"status,omitempty"` -} - -// VirtualMachineExtensionImage describes a Virtual Machine Extension Image. -type VirtualMachineExtensionImage struct { - autorest.Response `json:"-"` - *VirtualMachineExtensionImageProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineExtensionImage. -func (vmei VirtualMachineExtensionImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmei.VirtualMachineExtensionImageProperties != nil { - objectMap["properties"] = vmei.VirtualMachineExtensionImageProperties - } - if vmei.Location != nil { - objectMap["location"] = vmei.Location - } - if vmei.Tags != nil { - objectMap["tags"] = vmei.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtensionImage struct. -func (vmei *VirtualMachineExtensionImage) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineExtensionImageProperties VirtualMachineExtensionImageProperties - err = json.Unmarshal(*v, &virtualMachineExtensionImageProperties) - if err != nil { - return err - } - vmei.VirtualMachineExtensionImageProperties = &virtualMachineExtensionImageProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmei.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmei.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmei.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vmei.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmei.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineExtensionImageProperties describes the properties of a Virtual Machine Extension Image. -type VirtualMachineExtensionImageProperties struct { - // OperatingSystem - The operating system this extension supports. - OperatingSystem *string `json:"operatingSystem,omitempty"` - // ComputeRole - The type of role (IaaS or PaaS) this extension supports. - ComputeRole *string `json:"computeRole,omitempty"` - // HandlerSchema - The schema defined by publisher, where extension consumers should provide settings in a matching schema. - HandlerSchema *string `json:"handlerSchema,omitempty"` - // VMScaleSetEnabled - Whether the extension can be used on xRP VMScaleSets. By default existing extensions are usable on scalesets, but there might be cases where a publisher wants to explicitly indicate the extension is only enabled for CRP VMs but not VMSS. - VMScaleSetEnabled *bool `json:"vmScaleSetEnabled,omitempty"` - // SupportsMultipleExtensions - Whether the handler can support multiple extensions. - SupportsMultipleExtensions *bool `json:"supportsMultipleExtensions,omitempty"` -} - -// VirtualMachineExtensionInstanceView the instance view of a virtual machine extension. -type VirtualMachineExtensionInstanceView struct { - // Name - The virtual machine extension name. - Name *string `json:"name,omitempty"` - // Type - Specifies the type of the extension; an example is "CustomScriptExtension". - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the script handler. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // Substatuses - The resource status information. - Substatuses *[]InstanceViewStatus `json:"substatuses,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// VirtualMachineExtensionProperties describes the properties of a Virtual Machine Extension. -type VirtualMachineExtensionProperties struct { - // ForceUpdateTag - How the extension handler should be forced to update even if the extension configuration has not changed. - ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` - // Publisher - The name of the extension handler publisher. - Publisher *string `json:"publisher,omitempty"` - // Type - Specifies the type of the extension; an example is "CustomScriptExtension". - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the script handler. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. - AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` - // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. - EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` - // Settings - Json formatted public settings for the extension. - Settings interface{} `json:"settings,omitempty"` - // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. - ProtectedSettings interface{} `json:"protectedSettings,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // InstanceView - The virtual machine extension instance view. - InstanceView *VirtualMachineExtensionInstanceView `json:"instanceView,omitempty"` - // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. - SuppressFailures *bool `json:"suppressFailures,omitempty"` - // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault - ProtectedSettingsFromKeyVault interface{} `json:"protectedSettingsFromKeyVault,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineExtensionProperties. -func (vmep VirtualMachineExtensionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmep.ForceUpdateTag != nil { - objectMap["forceUpdateTag"] = vmep.ForceUpdateTag - } - if vmep.Publisher != nil { - objectMap["publisher"] = vmep.Publisher - } - if vmep.Type != nil { - objectMap["type"] = vmep.Type - } - if vmep.TypeHandlerVersion != nil { - objectMap["typeHandlerVersion"] = vmep.TypeHandlerVersion - } - if vmep.AutoUpgradeMinorVersion != nil { - objectMap["autoUpgradeMinorVersion"] = vmep.AutoUpgradeMinorVersion - } - if vmep.EnableAutomaticUpgrade != nil { - objectMap["enableAutomaticUpgrade"] = vmep.EnableAutomaticUpgrade - } - if vmep.Settings != nil { - objectMap["settings"] = vmep.Settings - } - if vmep.ProtectedSettings != nil { - objectMap["protectedSettings"] = vmep.ProtectedSettings - } - if vmep.InstanceView != nil { - objectMap["instanceView"] = vmep.InstanceView - } - if vmep.SuppressFailures != nil { - objectMap["suppressFailures"] = vmep.SuppressFailures - } - if vmep.ProtectedSettingsFromKeyVault != nil { - objectMap["protectedSettingsFromKeyVault"] = vmep.ProtectedSettingsFromKeyVault - } - return json.Marshal(objectMap) -} - -// VirtualMachineExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineExtensionsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineExtensionsClient) (VirtualMachineExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineExtensionsCreateOrUpdateFuture.Result. -func (future *VirtualMachineExtensionsCreateOrUpdateFuture) result(client VirtualMachineExtensionsClient) (vme VirtualMachineExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vme.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vme.Response.Response, err = future.GetResult(sender); err == nil && vme.Response.Response.StatusCode != http.StatusNoContent { - vme, err = client.CreateOrUpdateResponder(vme.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsCreateOrUpdateFuture", "Result", vme.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineExtensionsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineExtensionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineExtensionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineExtensionsDeleteFuture.Result. -func (future *VirtualMachineExtensionsDeleteFuture) result(client VirtualMachineExtensionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineExtensionsListResult the List Extension operation response -type VirtualMachineExtensionsListResult struct { - autorest.Response `json:"-"` - // Value - The list of extensions - Value *[]VirtualMachineExtension `json:"value,omitempty"` -} - -// VirtualMachineExtensionsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineExtensionsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineExtensionsClient) (VirtualMachineExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineExtensionsUpdateFuture.Result. -func (future *VirtualMachineExtensionsUpdateFuture) result(client VirtualMachineExtensionsClient) (vme VirtualMachineExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vme.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineExtensionsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vme.Response.Response, err = future.GetResult(sender); err == nil && vme.Response.Response.StatusCode != http.StatusNoContent { - vme, err = client.UpdateResponder(vme.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsUpdateFuture", "Result", vme.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineExtensionUpdate describes a Virtual Machine Extension. -type VirtualMachineExtensionUpdate struct { - *VirtualMachineExtensionUpdateProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineExtensionUpdate. -func (vmeu VirtualMachineExtensionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmeu.VirtualMachineExtensionUpdateProperties != nil { - objectMap["properties"] = vmeu.VirtualMachineExtensionUpdateProperties - } - if vmeu.Tags != nil { - objectMap["tags"] = vmeu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineExtensionUpdate struct. -func (vmeu *VirtualMachineExtensionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineExtensionUpdateProperties VirtualMachineExtensionUpdateProperties - err = json.Unmarshal(*v, &virtualMachineExtensionUpdateProperties) - if err != nil { - return err - } - vmeu.VirtualMachineExtensionUpdateProperties = &virtualMachineExtensionUpdateProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmeu.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineExtensionUpdateProperties describes the properties of a Virtual Machine Extension. -type VirtualMachineExtensionUpdateProperties struct { - // ForceUpdateTag - How the extension handler should be forced to update even if the extension configuration has not changed. - ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` - // Publisher - The name of the extension handler publisher. - Publisher *string `json:"publisher,omitempty"` - // Type - Specifies the type of the extension; an example is "CustomScriptExtension". - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the script handler. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. - AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` - // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. - EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` - // Settings - Json formatted public settings for the extension. - Settings interface{} `json:"settings,omitempty"` - // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. - ProtectedSettings interface{} `json:"protectedSettings,omitempty"` - // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. - SuppressFailures *bool `json:"suppressFailures,omitempty"` - // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault - ProtectedSettingsFromKeyVault interface{} `json:"protectedSettingsFromKeyVault,omitempty"` -} - -// VirtualMachineHealthStatus the health status of the VM. -type VirtualMachineHealthStatus struct { - // Status - READ-ONLY; The health status information for the VM. - Status *InstanceViewStatus `json:"status,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineHealthStatus. -func (vmhs VirtualMachineHealthStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineIdentity identity for the virtual machine. -type VirtualMachineIdentity struct { - // PrincipalID - READ-ONLY; The principal id of virtual machine identity. This property will only be provided for a system assigned identity. - PrincipalID *string `json:"principalId,omitempty"` - // TenantID - READ-ONLY; The tenant id associated with the virtual machine. This property will only be provided for a system assigned identity. - TenantID *string `json:"tenantId,omitempty"` - // Type - The type of identity used for the virtual machine. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' - Type ResourceIdentityType `json:"type,omitempty"` - // UserAssignedIdentities - The list of user identities associated with the Virtual Machine. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. - UserAssignedIdentities map[string]*UserAssignedIdentitiesValue `json:"userAssignedIdentities"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineIdentity. -func (vmi VirtualMachineIdentity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmi.Type != "" { - objectMap["type"] = vmi.Type - } - if vmi.UserAssignedIdentities != nil { - objectMap["userAssignedIdentities"] = vmi.UserAssignedIdentities - } - return json.Marshal(objectMap) -} - -// VirtualMachineImage describes a Virtual Machine Image. -type VirtualMachineImage struct { - autorest.Response `json:"-"` - *VirtualMachineImageProperties `json:"properties,omitempty"` - // Name - The name of the resource. - Name *string `json:"name,omitempty"` - // Location - The supported Azure location of the resource. - Location *string `json:"location,omitempty"` - // Tags - Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md). - Tags map[string]*string `json:"tags"` - // ExtendedLocation - The extended location of the Virtual Machine. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineImage. -func (vmi VirtualMachineImage) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmi.VirtualMachineImageProperties != nil { - objectMap["properties"] = vmi.VirtualMachineImageProperties - } - if vmi.Name != nil { - objectMap["name"] = vmi.Name - } - if vmi.Location != nil { - objectMap["location"] = vmi.Location - } - if vmi.Tags != nil { - objectMap["tags"] = vmi.Tags - } - if vmi.ExtendedLocation != nil { - objectMap["extendedLocation"] = vmi.ExtendedLocation - } - if vmi.ID != nil { - objectMap["id"] = vmi.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineImage struct. -func (vmi *VirtualMachineImage) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineImageProperties VirtualMachineImageProperties - err = json.Unmarshal(*v, &virtualMachineImageProperties) - if err != nil { - return err - } - vmi.VirtualMachineImageProperties = &virtualMachineImageProperties - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmi.Name = &name - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vmi.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmi.Tags = tags - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - vmi.ExtendedLocation = &extendedLocation - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmi.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineImageFeature specifies additional capabilities supported by the image -type VirtualMachineImageFeature struct { - // Name - The name of the feature. - Name *string `json:"name,omitempty"` - // Value - The corresponding value for the feature. - Value *string `json:"value,omitempty"` -} - -// VirtualMachineImageProperties describes the properties of a Virtual Machine Image. -type VirtualMachineImageProperties struct { - Plan *PurchasePlan `json:"plan,omitempty"` - OsDiskImage *OSDiskImage `json:"osDiskImage,omitempty"` - DataDiskImages *[]DataDiskImage `json:"dataDiskImages,omitempty"` - AutomaticOSUpgradeProperties *AutomaticOSUpgradeProperties `json:"automaticOSUpgradeProperties,omitempty"` - // HyperVGeneration - Possible values include: 'HyperVGenerationTypesV1', 'HyperVGenerationTypesV2' - HyperVGeneration HyperVGenerationTypes `json:"hyperVGeneration,omitempty"` - // Disallowed - Specifies disallowed configuration for the VirtualMachine created from the image - Disallowed *DisallowedConfiguration `json:"disallowed,omitempty"` - Features *[]VirtualMachineImageFeature `json:"features,omitempty"` - // Architecture - Possible values include: 'ArchitectureTypesX64', 'ArchitectureTypesArm64' - Architecture ArchitectureTypes `json:"architecture,omitempty"` -} - -// VirtualMachineImageResource virtual machine image resource information. -type VirtualMachineImageResource struct { - // Name - The name of the resource. - Name *string `json:"name,omitempty"` - // Location - The supported Azure location of the resource. - Location *string `json:"location,omitempty"` - // Tags - Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md). - Tags map[string]*string `json:"tags"` - // ExtendedLocation - The extended location of the Virtual Machine. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineImageResource. -func (vmir VirtualMachineImageResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmir.Name != nil { - objectMap["name"] = vmir.Name - } - if vmir.Location != nil { - objectMap["location"] = vmir.Location - } - if vmir.Tags != nil { - objectMap["tags"] = vmir.Tags - } - if vmir.ExtendedLocation != nil { - objectMap["extendedLocation"] = vmir.ExtendedLocation - } - if vmir.ID != nil { - objectMap["id"] = vmir.ID - } - return json.Marshal(objectMap) -} - -// VirtualMachineInstallPatchesParameters input for InstallPatches as directly received by the API -type VirtualMachineInstallPatchesParameters struct { - // MaximumDuration - Specifies the maximum amount of time that the operation will run. It must be an ISO 8601-compliant duration string such as PT4H (4 hours) - MaximumDuration *string `json:"maximumDuration,omitempty"` - // RebootSetting - Defines when it is acceptable to reboot a VM during a software update operation. Possible values include: 'IfRequired', 'Never', 'Always' - RebootSetting VMGuestPatchRebootSetting `json:"rebootSetting,omitempty"` - // WindowsParameters - Input for InstallPatches on a Windows VM, as directly received by the API - WindowsParameters *WindowsParameters `json:"windowsParameters,omitempty"` - // LinuxParameters - Input for InstallPatches on a Linux VM, as directly received by the API - LinuxParameters *LinuxParameters `json:"linuxParameters,omitempty"` -} - -// VirtualMachineInstallPatchesResult the result summary of an installation operation. -type VirtualMachineInstallPatchesResult struct { - autorest.Response `json:"-"` - // Status - READ-ONLY; The overall success or failure status of the operation. It remains "InProgress" until the operation completes. At that point it will become "Failed", "Succeeded", "Unknown" or "CompletedWithWarnings.". Possible values include: 'PatchOperationStatusUnknown', 'PatchOperationStatusInProgress', 'PatchOperationStatusFailed', 'PatchOperationStatusSucceeded', 'PatchOperationStatusCompletedWithWarnings' - Status PatchOperationStatus `json:"status,omitempty"` - // InstallationActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. - InstallationActivityID *string `json:"installationActivityId,omitempty"` - // RebootStatus - READ-ONLY; The reboot state of the VM following completion of the operation. Possible values include: 'VMGuestPatchRebootStatusUnknown', 'VMGuestPatchRebootStatusNotNeeded', 'VMGuestPatchRebootStatusRequired', 'VMGuestPatchRebootStatusStarted', 'VMGuestPatchRebootStatusFailed', 'VMGuestPatchRebootStatusCompleted' - RebootStatus VMGuestPatchRebootStatus `json:"rebootStatus,omitempty"` - // MaintenanceWindowExceeded - READ-ONLY; Whether the operation ran out of time before it completed all its intended actions. - MaintenanceWindowExceeded *bool `json:"maintenanceWindowExceeded,omitempty"` - // ExcludedPatchCount - READ-ONLY; The number of patches that were not installed due to the user blocking their installation. - ExcludedPatchCount *int32 `json:"excludedPatchCount,omitempty"` - // NotSelectedPatchCount - READ-ONLY; The number of patches that were detected as available for install, but did not meet the operation's criteria. - NotSelectedPatchCount *int32 `json:"notSelectedPatchCount,omitempty"` - // PendingPatchCount - READ-ONLY; The number of patches that were identified as meeting the installation criteria, but were not able to be installed. Typically this happens when maintenanceWindowExceeded == true. - PendingPatchCount *int32 `json:"pendingPatchCount,omitempty"` - // InstalledPatchCount - READ-ONLY; The number of patches successfully installed. - InstalledPatchCount *int32 `json:"installedPatchCount,omitempty"` - // FailedPatchCount - READ-ONLY; The number of patches that could not be installed due to some issue. See errors for details. - FailedPatchCount *int32 `json:"failedPatchCount,omitempty"` - // Patches - READ-ONLY; The patches that were installed during the operation. - Patches *[]PatchInstallationDetail `json:"patches,omitempty"` - // StartDateTime - READ-ONLY; The UTC timestamp when the operation began. - StartDateTime *date.Time `json:"startDateTime,omitempty"` - // Error - READ-ONLY; The errors that were encountered during execution of the operation. The details array contains the list of them. - Error *APIError `json:"error,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineInstallPatchesResult. -func (vmipr VirtualMachineInstallPatchesResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineInstanceView the instance view of a virtual machine. -type VirtualMachineInstanceView struct { - autorest.Response `json:"-"` - // PlatformUpdateDomain - Specifies the update domain of the virtual machine. - PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` - // PlatformFaultDomain - Specifies the fault domain of the virtual machine. - PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` - // ComputerName - The computer name assigned to the virtual machine. - ComputerName *string `json:"computerName,omitempty"` - // OsName - The Operating System running on the virtual machine. - OsName *string `json:"osName,omitempty"` - // OsVersion - The version of Operating System running on the virtual machine. - OsVersion *string `json:"osVersion,omitempty"` - // HyperVGeneration - Specifies the HyperVGeneration Type associated with a resource. Possible values include: 'HyperVGenerationTypeV1', 'HyperVGenerationTypeV2' - HyperVGeneration HyperVGenerationType `json:"hyperVGeneration,omitempty"` - // RdpThumbPrint - The Remote desktop certificate thumbprint. - RdpThumbPrint *string `json:"rdpThumbPrint,omitempty"` - // VMAgent - The VM Agent running on the virtual machine. - VMAgent *VirtualMachineAgentInstanceView `json:"vmAgent,omitempty"` - // MaintenanceRedeployStatus - The Maintenance Operation status on the virtual machine. - MaintenanceRedeployStatus *MaintenanceRedeployStatus `json:"maintenanceRedeployStatus,omitempty"` - // Disks - The virtual machine disk information. - Disks *[]DiskInstanceView `json:"disks,omitempty"` - // Extensions - The extensions information. - Extensions *[]VirtualMachineExtensionInstanceView `json:"extensions,omitempty"` - // VMHealth - READ-ONLY; The health status for the VM. - VMHealth *VirtualMachineHealthStatus `json:"vmHealth,omitempty"` - // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.

    You can easily view the output of your console log.

    Azure also enables you to see a screenshot of the VM from the hypervisor. - BootDiagnostics *BootDiagnosticsInstanceView `json:"bootDiagnostics,omitempty"` - // AssignedHost - READ-ONLY; Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled.

    Minimum api-version: 2020-06-01. - AssignedHost *string `json:"assignedHost,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` - // PatchStatus - [Preview Feature] The status of virtual machine patch operations. - PatchStatus *VirtualMachinePatchStatus `json:"patchStatus,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineInstanceView. -func (vmiv VirtualMachineInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmiv.PlatformUpdateDomain != nil { - objectMap["platformUpdateDomain"] = vmiv.PlatformUpdateDomain - } - if vmiv.PlatformFaultDomain != nil { - objectMap["platformFaultDomain"] = vmiv.PlatformFaultDomain - } - if vmiv.ComputerName != nil { - objectMap["computerName"] = vmiv.ComputerName - } - if vmiv.OsName != nil { - objectMap["osName"] = vmiv.OsName - } - if vmiv.OsVersion != nil { - objectMap["osVersion"] = vmiv.OsVersion - } - if vmiv.HyperVGeneration != "" { - objectMap["hyperVGeneration"] = vmiv.HyperVGeneration - } - if vmiv.RdpThumbPrint != nil { - objectMap["rdpThumbPrint"] = vmiv.RdpThumbPrint - } - if vmiv.VMAgent != nil { - objectMap["vmAgent"] = vmiv.VMAgent - } - if vmiv.MaintenanceRedeployStatus != nil { - objectMap["maintenanceRedeployStatus"] = vmiv.MaintenanceRedeployStatus - } - if vmiv.Disks != nil { - objectMap["disks"] = vmiv.Disks - } - if vmiv.Extensions != nil { - objectMap["extensions"] = vmiv.Extensions - } - if vmiv.BootDiagnostics != nil { - objectMap["bootDiagnostics"] = vmiv.BootDiagnostics - } - if vmiv.Statuses != nil { - objectMap["statuses"] = vmiv.Statuses - } - if vmiv.PatchStatus != nil { - objectMap["patchStatus"] = vmiv.PatchStatus - } - return json.Marshal(objectMap) -} - -// VirtualMachineIPTag contains the IP tag associated with the public IP address. -type VirtualMachineIPTag struct { - // IPTagType - IP tag type. Example: FirstPartyUsage. - IPTagType *string `json:"ipTagType,omitempty"` - // Tag - IP tag associated with the public IP. Example: SQL, Storage etc. - Tag *string `json:"tag,omitempty"` -} - -// VirtualMachineListResult the List Virtual Machine operation response. -type VirtualMachineListResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machines. - Value *[]VirtualMachine `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineListResultIterator provides access to a complete listing of VirtualMachine values. -type VirtualMachineListResultIterator struct { - i int - page VirtualMachineListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineListResultIterator) Response() VirtualMachineListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineListResultIterator) Value() VirtualMachine { - if !iter.page.NotDone() { - return VirtualMachine{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineListResultIterator type. -func NewVirtualMachineListResultIterator(page VirtualMachineListResultPage) VirtualMachineListResultIterator { - return VirtualMachineListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmlr VirtualMachineListResult) IsEmpty() bool { - return vmlr.Value == nil || len(*vmlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmlr VirtualMachineListResult) hasNextLink() bool { - return vmlr.NextLink != nil && len(*vmlr.NextLink) != 0 -} - -// virtualMachineListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmlr VirtualMachineListResult) virtualMachineListResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmlr.NextLink))) -} - -// VirtualMachineListResultPage contains a page of VirtualMachine values. -type VirtualMachineListResultPage struct { - fn func(context.Context, VirtualMachineListResult) (VirtualMachineListResult, error) - vmlr VirtualMachineListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmlr) - if err != nil { - return err - } - page.vmlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineListResultPage) NotDone() bool { - return !page.vmlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineListResultPage) Response() VirtualMachineListResult { - return page.vmlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineListResultPage) Values() []VirtualMachine { - if page.vmlr.IsEmpty() { - return nil - } - return *page.vmlr.Value -} - -// Creates a new instance of the VirtualMachineListResultPage type. -func NewVirtualMachineListResultPage(cur VirtualMachineListResult, getNextPage func(context.Context, VirtualMachineListResult) (VirtualMachineListResult, error)) VirtualMachineListResultPage { - return VirtualMachineListResultPage{ - fn: getNextPage, - vmlr: cur, - } -} - -// VirtualMachineNetworkInterfaceConfiguration describes a virtual machine network interface -// configurations. -type VirtualMachineNetworkInterfaceConfiguration struct { - // Name - The network interface configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineNetworkInterfaceConfigurationProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineNetworkInterfaceConfiguration. -func (vmnic VirtualMachineNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmnic.Name != nil { - objectMap["name"] = vmnic.Name - } - if vmnic.VirtualMachineNetworkInterfaceConfigurationProperties != nil { - objectMap["properties"] = vmnic.VirtualMachineNetworkInterfaceConfigurationProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineNetworkInterfaceConfiguration struct. -func (vmnic *VirtualMachineNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmnic.Name = &name - } - case "properties": - if v != nil { - var virtualMachineNetworkInterfaceConfigurationProperties VirtualMachineNetworkInterfaceConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineNetworkInterfaceConfigurationProperties) - if err != nil { - return err - } - vmnic.VirtualMachineNetworkInterfaceConfigurationProperties = &virtualMachineNetworkInterfaceConfigurationProperties - } - } - } - - return nil -} - -// VirtualMachineNetworkInterfaceConfigurationProperties describes a virtual machine network profile's IP -// configuration. -type VirtualMachineNetworkInterfaceConfigurationProperties struct { - // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. - Primary *bool `json:"primary,omitempty"` - // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` - // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. - EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` - // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. - EnableFpga *bool `json:"enableFpga,omitempty"` - // EnableIPForwarding - Whether IP forwarding enabled on this NIC. - EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` - // NetworkSecurityGroup - The network security group. - NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` - // DNSSettings - The dns settings to be applied on the network interfaces. - DNSSettings *VirtualMachineNetworkInterfaceDNSSettingsConfiguration `json:"dnsSettings,omitempty"` - // IPConfigurations - Specifies the IP configurations of the network interface. - IPConfigurations *[]VirtualMachineNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"` - DscpConfiguration *SubResource `json:"dscpConfiguration,omitempty"` -} - -// VirtualMachineNetworkInterfaceDNSSettingsConfiguration describes a virtual machines network -// configuration's DNS settings. -type VirtualMachineNetworkInterfaceDNSSettingsConfiguration struct { - // DNSServers - List of DNS servers IP addresses - DNSServers *[]string `json:"dnsServers,omitempty"` -} - -// VirtualMachineNetworkInterfaceIPConfiguration describes a virtual machine network profile's IP -// configuration. -type VirtualMachineNetworkInterfaceIPConfiguration struct { - // Name - The IP configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineNetworkInterfaceIPConfigurationProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineNetworkInterfaceIPConfiguration. -func (vmniic VirtualMachineNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmniic.Name != nil { - objectMap["name"] = vmniic.Name - } - if vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties != nil { - objectMap["properties"] = vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineNetworkInterfaceIPConfiguration struct. -func (vmniic *VirtualMachineNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmniic.Name = &name - } - case "properties": - if v != nil { - var virtualMachineNetworkInterfaceIPConfigurationProperties VirtualMachineNetworkInterfaceIPConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineNetworkInterfaceIPConfigurationProperties) - if err != nil { - return err - } - vmniic.VirtualMachineNetworkInterfaceIPConfigurationProperties = &virtualMachineNetworkInterfaceIPConfigurationProperties - } - } - } - - return nil -} - -// VirtualMachineNetworkInterfaceIPConfigurationProperties describes a virtual machine network interface IP -// configuration properties. -type VirtualMachineNetworkInterfaceIPConfigurationProperties struct { - // Subnet - Specifies the identifier of the subnet. - Subnet *SubResource `json:"subnet,omitempty"` - // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. - Primary *bool `json:"primary,omitempty"` - // PublicIPAddressConfiguration - The publicIPAddressConfiguration. - PublicIPAddressConfiguration *VirtualMachinePublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` - // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPVersionsIPv4', 'IPVersionsIPv6' - PrivateIPAddressVersion IPVersions `json:"privateIPAddressVersion,omitempty"` - // ApplicationSecurityGroups - Specifies an array of references to application security group. - ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` - // ApplicationGatewayBackendAddressPools - Specifies an array of references to backend address pools of application gateways. A virtual machine can reference backend address pools of multiple application gateways. Multiple virtual machines cannot use the same application gateway. - ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` - // LoadBalancerBackendAddressPools - Specifies an array of references to backend address pools of load balancers. A virtual machine can reference backend address pools of one public and one internal load balancer. [Multiple virtual machines cannot use the same basic sku load balancer]. - LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` -} - -// VirtualMachinePatchStatus the status of virtual machine patch operations. -type VirtualMachinePatchStatus struct { - // AvailablePatchSummary - The available patch summary of the latest assessment operation for the virtual machine. - AvailablePatchSummary *AvailablePatchSummary `json:"availablePatchSummary,omitempty"` - // LastPatchInstallationSummary - The installation summary of the latest installation operation for the virtual machine. - LastPatchInstallationSummary *LastPatchInstallationSummary `json:"lastPatchInstallationSummary,omitempty"` - // ConfigurationStatuses - READ-ONLY; The enablement status of the specified patchMode - ConfigurationStatuses *[]InstanceViewStatus `json:"configurationStatuses,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachinePatchStatus. -func (vmps VirtualMachinePatchStatus) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmps.AvailablePatchSummary != nil { - objectMap["availablePatchSummary"] = vmps.AvailablePatchSummary - } - if vmps.LastPatchInstallationSummary != nil { - objectMap["lastPatchInstallationSummary"] = vmps.LastPatchInstallationSummary - } - return json.Marshal(objectMap) -} - -// VirtualMachineProperties describes the properties of a Virtual Machine. -type VirtualMachineProperties struct { - // HardwareProfile - Specifies the hardware settings for the virtual machine. - HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` - // StorageProfile - Specifies the storage settings for the virtual machine disks. - StorageProfile *StorageProfile `json:"storageProfile,omitempty"` - // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the virtual machine. - AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` - // OsProfile - Specifies the operating system settings used while creating the virtual machine. Some of the settings cannot be changed once VM is provisioned. - OsProfile *OSProfile `json:"osProfile,omitempty"` - // NetworkProfile - Specifies the network interfaces of the virtual machine. - NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"` - // SecurityProfile - Specifies the Security related profile settings for the virtual machine. - SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` - // DiagnosticsProfile - Specifies the boot diagnostic settings state.

    Minimum api-version: 2015-06-15. - DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` - // AvailabilitySet - Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Availability sets overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

    For more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

    Currently, a VM can only be added to availability set at creation time. The availability set to which the VM is being added should be under the same resource group as the availability set resource. An existing VM cannot be added to an availability set.

    This property cannot exist along with a non-null properties.virtualMachineScaleSet reference. - AvailabilitySet *SubResource `json:"availabilitySet,omitempty"` - // VirtualMachineScaleSet - Specifies information about the virtual machine scale set that the virtual machine should be assigned to. Virtual machines specified in the same virtual machine scale set are allocated to different nodes to maximize availability. Currently, a VM can only be added to virtual machine scale set at creation time. An existing VM cannot be added to a virtual machine scale set.

    This property cannot exist along with a non-null properties.availabilitySet reference.

    Minimum api‐version: 2019‐03‐01 - VirtualMachineScaleSet *SubResource `json:"virtualMachineScaleSet,omitempty"` - // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine should be assigned to.

    Minimum api-version: 2018-04-01. - ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` - // Priority - Specifies the priority for the virtual machine.

    Minimum api-version: 2019-03-01. Possible values include: 'Regular', 'Low', 'Spot' - Priority VirtualMachinePriorityTypes `json:"priority,omitempty"` - // EvictionPolicy - Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set.

    For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.

    For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Possible values include: 'VirtualMachineEvictionPolicyTypesDeallocate', 'VirtualMachineEvictionPolicyTypesDelete' - EvictionPolicy VirtualMachineEvictionPolicyTypes `json:"evictionPolicy,omitempty"` - // BillingProfile - Specifies the billing related details of a Azure Spot virtual machine.

    Minimum api-version: 2019-03-01. - BillingProfile *BillingProfile `json:"billingProfile,omitempty"` - // Host - Specifies information about the dedicated host that the virtual machine resides in.

    Minimum api-version: 2018-10-01. - Host *SubResource `json:"host,omitempty"` - // HostGroup - Specifies information about the dedicated host group that the virtual machine resides in.

    Minimum api-version: 2020-06-01.

    NOTE: User cannot specify both host and hostGroup properties. - HostGroup *SubResource `json:"hostGroup,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // InstanceView - READ-ONLY; The virtual machine instance view. - InstanceView *VirtualMachineInstanceView `json:"instanceView,omitempty"` - // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

    Possible values for Windows Server operating system are:

    Windows_Client

    Windows_Server

    Possible values for Linux Server operating system are:

    RHEL_BYOS (for RHEL)

    SLES_BYOS (for SUSE)

    For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

    [Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

    Minimum api-version: 2015-06-15 - LicenseType *string `json:"licenseType,omitempty"` - // VMID - READ-ONLY; Specifies the VM unique ID which is a 128-bits identifier that is encoded and stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands. - VMID *string `json:"vmId,omitempty"` - // ExtensionsTimeBudget - Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M).

    Minimum api-version: 2020-06-01 - ExtensionsTimeBudget *string `json:"extensionsTimeBudget,omitempty"` - // PlatformFaultDomain - Specifies the scale set logical fault domain into which the Virtual Machine will be created. By default, the Virtual Machine will by automatically assigned to a fault domain that best maintains balance across available fault domains.
  • This is applicable only if the 'virtualMachineScaleSet' property of this Virtual Machine is set.
  • The Virtual Machine Scale Set that is referenced, must have 'platformFaultDomainCount' > 1.
  • This property cannot be updated once the Virtual Machine is created.
  • Fault domain assignment can be viewed in the Virtual Machine Instance View.

    Minimum api‐version: 2020‐12‐01 - PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` - // ScheduledEventsProfile - Specifies Scheduled Event related configurations. - ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` - // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 - UserData *string `json:"userData,omitempty"` - // CapacityReservation - Specifies information about the capacity reservation that is used to allocate virtual machine.

    Minimum api-version: 2021-04-01. - CapacityReservation *CapacityReservationProfile `json:"capacityReservation,omitempty"` - // ApplicationProfile - Specifies the gallery applications that should be made available to the VM/VMSS - ApplicationProfile *ApplicationProfile `json:"applicationProfile,omitempty"` - // TimeCreated - READ-ONLY; Specifies the time at which the Virtual Machine resource was created.

    Minimum api-version: 2022-03-01. - TimeCreated *date.Time `json:"timeCreated,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineProperties. -func (vmp VirtualMachineProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmp.HardwareProfile != nil { - objectMap["hardwareProfile"] = vmp.HardwareProfile - } - if vmp.StorageProfile != nil { - objectMap["storageProfile"] = vmp.StorageProfile - } - if vmp.AdditionalCapabilities != nil { - objectMap["additionalCapabilities"] = vmp.AdditionalCapabilities - } - if vmp.OsProfile != nil { - objectMap["osProfile"] = vmp.OsProfile - } - if vmp.NetworkProfile != nil { - objectMap["networkProfile"] = vmp.NetworkProfile - } - if vmp.SecurityProfile != nil { - objectMap["securityProfile"] = vmp.SecurityProfile - } - if vmp.DiagnosticsProfile != nil { - objectMap["diagnosticsProfile"] = vmp.DiagnosticsProfile - } - if vmp.AvailabilitySet != nil { - objectMap["availabilitySet"] = vmp.AvailabilitySet - } - if vmp.VirtualMachineScaleSet != nil { - objectMap["virtualMachineScaleSet"] = vmp.VirtualMachineScaleSet - } - if vmp.ProximityPlacementGroup != nil { - objectMap["proximityPlacementGroup"] = vmp.ProximityPlacementGroup - } - if vmp.Priority != "" { - objectMap["priority"] = vmp.Priority - } - if vmp.EvictionPolicy != "" { - objectMap["evictionPolicy"] = vmp.EvictionPolicy - } - if vmp.BillingProfile != nil { - objectMap["billingProfile"] = vmp.BillingProfile - } - if vmp.Host != nil { - objectMap["host"] = vmp.Host - } - if vmp.HostGroup != nil { - objectMap["hostGroup"] = vmp.HostGroup - } - if vmp.LicenseType != nil { - objectMap["licenseType"] = vmp.LicenseType - } - if vmp.ExtensionsTimeBudget != nil { - objectMap["extensionsTimeBudget"] = vmp.ExtensionsTimeBudget - } - if vmp.PlatformFaultDomain != nil { - objectMap["platformFaultDomain"] = vmp.PlatformFaultDomain - } - if vmp.ScheduledEventsProfile != nil { - objectMap["scheduledEventsProfile"] = vmp.ScheduledEventsProfile - } - if vmp.UserData != nil { - objectMap["userData"] = vmp.UserData - } - if vmp.CapacityReservation != nil { - objectMap["capacityReservation"] = vmp.CapacityReservation - } - if vmp.ApplicationProfile != nil { - objectMap["applicationProfile"] = vmp.ApplicationProfile - } - return json.Marshal(objectMap) -} - -// VirtualMachinePublicIPAddressConfiguration describes a virtual machines IP Configuration's -// PublicIPAddress configuration -type VirtualMachinePublicIPAddressConfiguration struct { - // Name - The publicIP address configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachinePublicIPAddressConfigurationProperties `json:"properties,omitempty"` - Sku *PublicIPAddressSku `json:"sku,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachinePublicIPAddressConfiguration. -func (vmpiac VirtualMachinePublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmpiac.Name != nil { - objectMap["name"] = vmpiac.Name - } - if vmpiac.VirtualMachinePublicIPAddressConfigurationProperties != nil { - objectMap["properties"] = vmpiac.VirtualMachinePublicIPAddressConfigurationProperties - } - if vmpiac.Sku != nil { - objectMap["sku"] = vmpiac.Sku - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachinePublicIPAddressConfiguration struct. -func (vmpiac *VirtualMachinePublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmpiac.Name = &name - } - case "properties": - if v != nil { - var virtualMachinePublicIPAddressConfigurationProperties VirtualMachinePublicIPAddressConfigurationProperties - err = json.Unmarshal(*v, &virtualMachinePublicIPAddressConfigurationProperties) - if err != nil { - return err - } - vmpiac.VirtualMachinePublicIPAddressConfigurationProperties = &virtualMachinePublicIPAddressConfigurationProperties - } - case "sku": - if v != nil { - var sku PublicIPAddressSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - vmpiac.Sku = &sku - } - } - } - - return nil -} - -// VirtualMachinePublicIPAddressConfigurationProperties describes a virtual machines IP Configuration's -// PublicIPAddress configuration -type VirtualMachinePublicIPAddressConfigurationProperties struct { - // IdleTimeoutInMinutes - The idle timeout of the public IP address. - IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` - // DeleteOption - Specify what happens to the public IP address when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` - // DNSSettings - The dns settings to be applied on the publicIP addresses . - DNSSettings *VirtualMachinePublicIPAddressDNSSettingsConfiguration `json:"dnsSettings,omitempty"` - // IPTags - The list of IP tags associated with the public IP address. - IPTags *[]VirtualMachineIPTag `json:"ipTags,omitempty"` - // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. - PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` - // PublicIPAddressVersion - Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPVersionsIPv4', 'IPVersionsIPv6' - PublicIPAddressVersion IPVersions `json:"publicIPAddressVersion,omitempty"` - // PublicIPAllocationMethod - Specify the public IP allocation type. Possible values include: 'Dynamic', 'Static' - PublicIPAllocationMethod PublicIPAllocationMethod `json:"publicIPAllocationMethod,omitempty"` -} - -// VirtualMachinePublicIPAddressDNSSettingsConfiguration describes a virtual machines network -// configuration's DNS settings. -type VirtualMachinePublicIPAddressDNSSettingsConfiguration struct { - // DomainNameLabel - The Domain name label prefix of the PublicIPAddress resources that will be created. The generated name label is the concatenation of the domain name label and vm network profile unique ID. - DomainNameLabel *string `json:"domainNameLabel,omitempty"` -} - -// VirtualMachineReimageParameters parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk -// will always be reimaged -type VirtualMachineReimageParameters struct { - // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. - TempDisk *bool `json:"tempDisk,omitempty"` -} - -// VirtualMachineRunCommand describes a Virtual Machine run command. -type VirtualMachineRunCommand struct { - autorest.Response `json:"-"` - *VirtualMachineRunCommandProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineRunCommand. -func (vmrc VirtualMachineRunCommand) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmrc.VirtualMachineRunCommandProperties != nil { - objectMap["properties"] = vmrc.VirtualMachineRunCommandProperties - } - if vmrc.Location != nil { - objectMap["location"] = vmrc.Location - } - if vmrc.Tags != nil { - objectMap["tags"] = vmrc.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineRunCommand struct. -func (vmrc *VirtualMachineRunCommand) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineRunCommandProperties VirtualMachineRunCommandProperties - err = json.Unmarshal(*v, &virtualMachineRunCommandProperties) - if err != nil { - return err - } - vmrc.VirtualMachineRunCommandProperties = &virtualMachineRunCommandProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmrc.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmrc.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmrc.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vmrc.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmrc.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineRunCommandInstanceView the instance view of a virtual machine run command. -type VirtualMachineRunCommandInstanceView struct { - // ExecutionState - Script execution status. Possible values include: 'ExecutionStateUnknown', 'ExecutionStatePending', 'ExecutionStateRunning', 'ExecutionStateFailed', 'ExecutionStateSucceeded', 'ExecutionStateTimedOut', 'ExecutionStateCanceled' - ExecutionState ExecutionState `json:"executionState,omitempty"` - // ExecutionMessage - Communicate script configuration errors or execution messages. - ExecutionMessage *string `json:"executionMessage,omitempty"` - // ExitCode - Exit code returned from script execution. - ExitCode *int32 `json:"exitCode,omitempty"` - // Output - Script output stream. - Output *string `json:"output,omitempty"` - // Error - Script error stream. - Error *string `json:"error,omitempty"` - // StartTime - Script start time. - StartTime *date.Time `json:"startTime,omitempty"` - // EndTime - Script end time. - EndTime *date.Time `json:"endTime,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` -} - -// VirtualMachineRunCommandProperties describes the properties of a Virtual Machine run command. -type VirtualMachineRunCommandProperties struct { - // Source - The source of the run command script. - Source *VirtualMachineRunCommandScriptSource `json:"source,omitempty"` - // Parameters - The parameters used by the script. - Parameters *[]RunCommandInputParameter `json:"parameters,omitempty"` - // ProtectedParameters - The parameters used by the script. - ProtectedParameters *[]RunCommandInputParameter `json:"protectedParameters,omitempty"` - // AsyncExecution - Optional. If set to true, provisioning will complete as soon as the script starts and will not wait for script to complete. - AsyncExecution *bool `json:"asyncExecution,omitempty"` - // RunAsUser - Specifies the user account on the VM when executing the run command. - RunAsUser *string `json:"runAsUser,omitempty"` - // RunAsPassword - Specifies the user account password on the VM when executing the run command. - RunAsPassword *string `json:"runAsPassword,omitempty"` - // TimeoutInSeconds - The timeout in seconds to execute the run command. - TimeoutInSeconds *int32 `json:"timeoutInSeconds,omitempty"` - // OutputBlobURI - Specifies the Azure storage blob where script output stream will be uploaded. - OutputBlobURI *string `json:"outputBlobUri,omitempty"` - // ErrorBlobURI - Specifies the Azure storage blob where script error stream will be uploaded. - ErrorBlobURI *string `json:"errorBlobUri,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // InstanceView - READ-ONLY; The virtual machine run command instance view. - InstanceView *VirtualMachineRunCommandInstanceView `json:"instanceView,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineRunCommandProperties. -func (vmrcp VirtualMachineRunCommandProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmrcp.Source != nil { - objectMap["source"] = vmrcp.Source - } - if vmrcp.Parameters != nil { - objectMap["parameters"] = vmrcp.Parameters - } - if vmrcp.ProtectedParameters != nil { - objectMap["protectedParameters"] = vmrcp.ProtectedParameters - } - if vmrcp.AsyncExecution != nil { - objectMap["asyncExecution"] = vmrcp.AsyncExecution - } - if vmrcp.RunAsUser != nil { - objectMap["runAsUser"] = vmrcp.RunAsUser - } - if vmrcp.RunAsPassword != nil { - objectMap["runAsPassword"] = vmrcp.RunAsPassword - } - if vmrcp.TimeoutInSeconds != nil { - objectMap["timeoutInSeconds"] = vmrcp.TimeoutInSeconds - } - if vmrcp.OutputBlobURI != nil { - objectMap["outputBlobUri"] = vmrcp.OutputBlobURI - } - if vmrcp.ErrorBlobURI != nil { - objectMap["errorBlobUri"] = vmrcp.ErrorBlobURI - } - return json.Marshal(objectMap) -} - -// VirtualMachineRunCommandsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineRunCommandsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineRunCommandsClient) (VirtualMachineRunCommand, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineRunCommandsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineRunCommandsCreateOrUpdateFuture.Result. -func (future *VirtualMachineRunCommandsCreateOrUpdateFuture) result(client VirtualMachineRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmrc.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { - vmrc, err = client.CreateOrUpdateResponder(vmrc.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsCreateOrUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineRunCommandScriptSource describes the script sources for run command. -type VirtualMachineRunCommandScriptSource struct { - // Script - Specifies the script content to be executed on the VM. - Script *string `json:"script,omitempty"` - // ScriptURI - Specifies the script download location. - ScriptURI *string `json:"scriptUri,omitempty"` - // CommandID - Specifies a commandId of predefined built-in script. - CommandID *string `json:"commandId,omitempty"` -} - -// VirtualMachineRunCommandsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineRunCommandsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineRunCommandsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineRunCommandsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineRunCommandsDeleteFuture.Result. -func (future *VirtualMachineRunCommandsDeleteFuture) result(client VirtualMachineRunCommandsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineRunCommandsListResult the List run command operation response -type VirtualMachineRunCommandsListResult struct { - autorest.Response `json:"-"` - // Value - The list of run commands - Value *[]VirtualMachineRunCommand `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of run commands. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineRunCommandsListResultIterator provides access to a complete listing of -// VirtualMachineRunCommand values. -type VirtualMachineRunCommandsListResultIterator struct { - i int - page VirtualMachineRunCommandsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineRunCommandsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineRunCommandsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineRunCommandsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineRunCommandsListResultIterator) Response() VirtualMachineRunCommandsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineRunCommandsListResultIterator) Value() VirtualMachineRunCommand { - if !iter.page.NotDone() { - return VirtualMachineRunCommand{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineRunCommandsListResultIterator type. -func NewVirtualMachineRunCommandsListResultIterator(page VirtualMachineRunCommandsListResultPage) VirtualMachineRunCommandsListResultIterator { - return VirtualMachineRunCommandsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmrclr VirtualMachineRunCommandsListResult) IsEmpty() bool { - return vmrclr.Value == nil || len(*vmrclr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmrclr VirtualMachineRunCommandsListResult) hasNextLink() bool { - return vmrclr.NextLink != nil && len(*vmrclr.NextLink) != 0 -} - -// virtualMachineRunCommandsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmrclr VirtualMachineRunCommandsListResult) virtualMachineRunCommandsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmrclr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmrclr.NextLink))) -} - -// VirtualMachineRunCommandsListResultPage contains a page of VirtualMachineRunCommand values. -type VirtualMachineRunCommandsListResultPage struct { - fn func(context.Context, VirtualMachineRunCommandsListResult) (VirtualMachineRunCommandsListResult, error) - vmrclr VirtualMachineRunCommandsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineRunCommandsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmrclr) - if err != nil { - return err - } - page.vmrclr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineRunCommandsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineRunCommandsListResultPage) NotDone() bool { - return !page.vmrclr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineRunCommandsListResultPage) Response() VirtualMachineRunCommandsListResult { - return page.vmrclr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineRunCommandsListResultPage) Values() []VirtualMachineRunCommand { - if page.vmrclr.IsEmpty() { - return nil - } - return *page.vmrclr.Value -} - -// Creates a new instance of the VirtualMachineRunCommandsListResultPage type. -func NewVirtualMachineRunCommandsListResultPage(cur VirtualMachineRunCommandsListResult, getNextPage func(context.Context, VirtualMachineRunCommandsListResult) (VirtualMachineRunCommandsListResult, error)) VirtualMachineRunCommandsListResultPage { - return VirtualMachineRunCommandsListResultPage{ - fn: getNextPage, - vmrclr: cur, - } -} - -// VirtualMachineRunCommandsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineRunCommandsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineRunCommandsClient) (VirtualMachineRunCommand, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineRunCommandsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineRunCommandsUpdateFuture.Result. -func (future *VirtualMachineRunCommandsUpdateFuture) result(client VirtualMachineRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmrc.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineRunCommandsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { - vmrc, err = client.UpdateResponder(vmrc.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineRunCommandUpdate describes a Virtual Machine run command. -type VirtualMachineRunCommandUpdate struct { - *VirtualMachineRunCommandProperties `json:"properties,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineRunCommandUpdate. -func (vmrcu VirtualMachineRunCommandUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmrcu.VirtualMachineRunCommandProperties != nil { - objectMap["properties"] = vmrcu.VirtualMachineRunCommandProperties - } - if vmrcu.Tags != nil { - objectMap["tags"] = vmrcu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineRunCommandUpdate struct. -func (vmrcu *VirtualMachineRunCommandUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var virtualMachineRunCommandProperties VirtualMachineRunCommandProperties - err = json.Unmarshal(*v, &virtualMachineRunCommandProperties) - if err != nil { - return err - } - vmrcu.VirtualMachineRunCommandProperties = &virtualMachineRunCommandProperties - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmrcu.Tags = tags - } - } - } - - return nil -} - -// VirtualMachinesAssessPatchesFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesAssessPatchesFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (VirtualMachineAssessPatchesResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesAssessPatchesFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesAssessPatchesFuture.Result. -func (future *VirtualMachinesAssessPatchesFuture) result(client VirtualMachinesClient) (vmapr VirtualMachineAssessPatchesResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesAssessPatchesFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmapr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesAssessPatchesFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmapr.Response.Response, err = future.GetResult(sender); err == nil && vmapr.Response.Response.StatusCode != http.StatusNoContent { - vmapr, err = client.AssessPatchesResponder(vmapr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesAssessPatchesFuture", "Result", vmapr.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSet describes a Virtual Machine Scale Set. -type VirtualMachineScaleSet struct { - autorest.Response `json:"-"` - // Sku - The virtual machine scale set sku. - Sku *Sku `json:"sku,omitempty"` - // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - Plan *Plan `json:"plan,omitempty"` - *VirtualMachineScaleSetProperties `json:"properties,omitempty"` - // Identity - The identity of the virtual machine scale set, if configured. - Identity *VirtualMachineScaleSetIdentity `json:"identity,omitempty"` - // Zones - The virtual machine scale set zones. NOTE: Availability zones can only be set when you create the scale set - Zones *[]string `json:"zones,omitempty"` - // ExtendedLocation - The extended location of the Virtual Machine Scale Set. - ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSet. -func (vmss VirtualMachineScaleSet) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmss.Sku != nil { - objectMap["sku"] = vmss.Sku - } - if vmss.Plan != nil { - objectMap["plan"] = vmss.Plan - } - if vmss.VirtualMachineScaleSetProperties != nil { - objectMap["properties"] = vmss.VirtualMachineScaleSetProperties - } - if vmss.Identity != nil { - objectMap["identity"] = vmss.Identity - } - if vmss.Zones != nil { - objectMap["zones"] = vmss.Zones - } - if vmss.ExtendedLocation != nil { - objectMap["extendedLocation"] = vmss.ExtendedLocation - } - if vmss.Location != nil { - objectMap["location"] = vmss.Location - } - if vmss.Tags != nil { - objectMap["tags"] = vmss.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSet struct. -func (vmss *VirtualMachineScaleSet) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - vmss.Sku = &sku - } - case "plan": - if v != nil { - var plan Plan - err = json.Unmarshal(*v, &plan) - if err != nil { - return err - } - vmss.Plan = &plan - } - case "properties": - if v != nil { - var virtualMachineScaleSetProperties VirtualMachineScaleSetProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetProperties) - if err != nil { - return err - } - vmss.VirtualMachineScaleSetProperties = &virtualMachineScaleSetProperties - } - case "identity": - if v != nil { - var identity VirtualMachineScaleSetIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - vmss.Identity = &identity - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - vmss.Zones = &zones - } - case "extendedLocation": - if v != nil { - var extendedLocation ExtendedLocation - err = json.Unmarshal(*v, &extendedLocation) - if err != nil { - return err - } - vmss.ExtendedLocation = &extendedLocation - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmss.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmss.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmss.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vmss.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmss.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineScaleSetDataDisk describes a virtual machine scale set data disk. -type VirtualMachineScaleSetDataDisk struct { - // Name - The disk name. - Name *string `json:"name,omitempty"` - // Lun - Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM. - Lun *int32 `json:"lun,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. - WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` - // CreateOption - The create option. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' - CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` - // DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // ManagedDisk - The managed disk parameters. - ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` - // DiskIOPSReadWrite - Specifies the Read-Write IOPS for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. - DiskIOPSReadWrite *int64 `json:"diskIOPSReadWrite,omitempty"` - // DiskMBpsReadWrite - Specifies the bandwidth in MB per second for the managed disk. Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be assigned based on diskSizeGB. - DiskMBpsReadWrite *int64 `json:"diskMBpsReadWrite,omitempty"` - // DeleteOption - Specifies whether data disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the data disk is deleted when the VMSS Flex VM is deleted.

    **Detach** If this value is used, the data disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' - DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetExtension describes a Virtual Machine Scale Set Extension. -type VirtualMachineScaleSetExtension struct { - autorest.Response `json:"-"` - // Name - The name of the extension. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *VirtualMachineScaleSetExtensionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtension. -func (vmsse VirtualMachineScaleSetExtension) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmsse.Name != nil { - objectMap["name"] = vmsse.Name - } - if vmsse.VirtualMachineScaleSetExtensionProperties != nil { - objectMap["properties"] = vmsse.VirtualMachineScaleSetExtensionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetExtension struct. -func (vmsse *VirtualMachineScaleSetExtension) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmsse.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmsse.Type = &typeVar - } - case "properties": - if v != nil { - var virtualMachineScaleSetExtensionProperties VirtualMachineScaleSetExtensionProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetExtensionProperties) - if err != nil { - return err - } - vmsse.VirtualMachineScaleSetExtensionProperties = &virtualMachineScaleSetExtensionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmsse.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetExtensionListResult the List VM scale set extension operation response. -type VirtualMachineScaleSetExtensionListResult struct { - autorest.Response `json:"-"` - // Value - The list of VM scale set extensions. - Value *[]VirtualMachineScaleSetExtension `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetExtensionListResultIterator provides access to a complete listing of -// VirtualMachineScaleSetExtension values. -type VirtualMachineScaleSetExtensionListResultIterator struct { - i int - page VirtualMachineScaleSetExtensionListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetExtensionListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetExtensionListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetExtensionListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetExtensionListResultIterator) Response() VirtualMachineScaleSetExtensionListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetExtensionListResultIterator) Value() VirtualMachineScaleSetExtension { - if !iter.page.NotDone() { - return VirtualMachineScaleSetExtension{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetExtensionListResultIterator type. -func NewVirtualMachineScaleSetExtensionListResultIterator(page VirtualMachineScaleSetExtensionListResultPage) VirtualMachineScaleSetExtensionListResultIterator { - return VirtualMachineScaleSetExtensionListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmsselr VirtualMachineScaleSetExtensionListResult) IsEmpty() bool { - return vmsselr.Value == nil || len(*vmsselr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmsselr VirtualMachineScaleSetExtensionListResult) hasNextLink() bool { - return vmsselr.NextLink != nil && len(*vmsselr.NextLink) != 0 -} - -// virtualMachineScaleSetExtensionListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmsselr VirtualMachineScaleSetExtensionListResult) virtualMachineScaleSetExtensionListResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmsselr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmsselr.NextLink))) -} - -// VirtualMachineScaleSetExtensionListResultPage contains a page of VirtualMachineScaleSetExtension values. -type VirtualMachineScaleSetExtensionListResultPage struct { - fn func(context.Context, VirtualMachineScaleSetExtensionListResult) (VirtualMachineScaleSetExtensionListResult, error) - vmsselr VirtualMachineScaleSetExtensionListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetExtensionListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmsselr) - if err != nil { - return err - } - page.vmsselr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetExtensionListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetExtensionListResultPage) NotDone() bool { - return !page.vmsselr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetExtensionListResultPage) Response() VirtualMachineScaleSetExtensionListResult { - return page.vmsselr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetExtensionListResultPage) Values() []VirtualMachineScaleSetExtension { - if page.vmsselr.IsEmpty() { - return nil - } - return *page.vmsselr.Value -} - -// Creates a new instance of the VirtualMachineScaleSetExtensionListResultPage type. -func NewVirtualMachineScaleSetExtensionListResultPage(cur VirtualMachineScaleSetExtensionListResult, getNextPage func(context.Context, VirtualMachineScaleSetExtensionListResult) (VirtualMachineScaleSetExtensionListResult, error)) VirtualMachineScaleSetExtensionListResultPage { - return VirtualMachineScaleSetExtensionListResultPage{ - fn: getNextPage, - vmsselr: cur, - } -} - -// VirtualMachineScaleSetExtensionProfile describes a virtual machine scale set extension profile. -type VirtualMachineScaleSetExtensionProfile struct { - // Extensions - The virtual machine scale set child extension resources. - Extensions *[]VirtualMachineScaleSetExtension `json:"extensions,omitempty"` - // ExtensionsTimeBudget - Specifies the time alloted for all extensions to start. The time duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in ISO 8601 format. The default value is 90 minutes (PT1H30M).

    Minimum api-version: 2020-06-01 - ExtensionsTimeBudget *string `json:"extensionsTimeBudget,omitempty"` -} - -// VirtualMachineScaleSetExtensionProperties describes the properties of a Virtual Machine Scale Set -// Extension. -type VirtualMachineScaleSetExtensionProperties struct { - // ForceUpdateTag - If a value is provided and is different from the previous value, the extension handler will be forced to update even if the extension configuration has not changed. - ForceUpdateTag *string `json:"forceUpdateTag,omitempty"` - // Publisher - The name of the extension handler publisher. - Publisher *string `json:"publisher,omitempty"` - // Type - Specifies the type of the extension; an example is "CustomScriptExtension". - Type *string `json:"type,omitempty"` - // TypeHandlerVersion - Specifies the version of the script handler. - TypeHandlerVersion *string `json:"typeHandlerVersion,omitempty"` - // AutoUpgradeMinorVersion - Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true. - AutoUpgradeMinorVersion *bool `json:"autoUpgradeMinorVersion,omitempty"` - // EnableAutomaticUpgrade - Indicates whether the extension should be automatically upgraded by the platform if there is a newer version of the extension available. - EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` - // Settings - Json formatted public settings for the extension. - Settings interface{} `json:"settings,omitempty"` - // ProtectedSettings - The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all. - ProtectedSettings interface{} `json:"protectedSettings,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // ProvisionAfterExtensions - Collection of extension names after which this extension needs to be provisioned. - ProvisionAfterExtensions *[]string `json:"provisionAfterExtensions,omitempty"` - // SuppressFailures - Indicates whether failures stemming from the extension will be suppressed (Operational failures such as not connecting to the VM will not be suppressed regardless of this value). The default is false. - SuppressFailures *bool `json:"suppressFailures,omitempty"` - // ProtectedSettingsFromKeyVault - The extensions protected settings that are passed by reference, and consumed from key vault - ProtectedSettingsFromKeyVault interface{} `json:"protectedSettingsFromKeyVault,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtensionProperties. -func (vmssep VirtualMachineScaleSetExtensionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssep.ForceUpdateTag != nil { - objectMap["forceUpdateTag"] = vmssep.ForceUpdateTag - } - if vmssep.Publisher != nil { - objectMap["publisher"] = vmssep.Publisher - } - if vmssep.Type != nil { - objectMap["type"] = vmssep.Type - } - if vmssep.TypeHandlerVersion != nil { - objectMap["typeHandlerVersion"] = vmssep.TypeHandlerVersion - } - if vmssep.AutoUpgradeMinorVersion != nil { - objectMap["autoUpgradeMinorVersion"] = vmssep.AutoUpgradeMinorVersion - } - if vmssep.EnableAutomaticUpgrade != nil { - objectMap["enableAutomaticUpgrade"] = vmssep.EnableAutomaticUpgrade - } - if vmssep.Settings != nil { - objectMap["settings"] = vmssep.Settings - } - if vmssep.ProtectedSettings != nil { - objectMap["protectedSettings"] = vmssep.ProtectedSettings - } - if vmssep.ProvisionAfterExtensions != nil { - objectMap["provisionAfterExtensions"] = vmssep.ProvisionAfterExtensions - } - if vmssep.SuppressFailures != nil { - objectMap["suppressFailures"] = vmssep.SuppressFailures - } - if vmssep.ProtectedSettingsFromKeyVault != nil { - objectMap["protectedSettingsFromKeyVault"] = vmssep.ProtectedSettingsFromKeyVault - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type VirtualMachineScaleSetExtensionsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetExtensionsClient) (VirtualMachineScaleSetExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetExtensionsCreateOrUpdateFuture.Result. -func (future *VirtualMachineScaleSetExtensionsCreateOrUpdateFuture) result(client VirtualMachineScaleSetExtensionsClient) (vmsse VirtualMachineScaleSetExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmsse.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmsse.Response.Response, err = future.GetResult(sender); err == nil && vmsse.Response.Response.StatusCode != http.StatusNoContent { - vmsse, err = client.CreateOrUpdateResponder(vmsse.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsCreateOrUpdateFuture", "Result", vmsse.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetExtensionsDeleteFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineScaleSetExtensionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetExtensionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetExtensionsDeleteFuture.Result. -func (future *VirtualMachineScaleSetExtensionsDeleteFuture) result(client VirtualMachineScaleSetExtensionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetExtensionsUpdateFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineScaleSetExtensionsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetExtensionsClient) (VirtualMachineScaleSetExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetExtensionsUpdateFuture.Result. -func (future *VirtualMachineScaleSetExtensionsUpdateFuture) result(client VirtualMachineScaleSetExtensionsClient) (vmsse VirtualMachineScaleSetExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmsse.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetExtensionsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmsse.Response.Response, err = future.GetResult(sender); err == nil && vmsse.Response.Response.StatusCode != http.StatusNoContent { - vmsse, err = client.UpdateResponder(vmsse.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsUpdateFuture", "Result", vmsse.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetExtensionUpdate describes a Virtual Machine Scale Set Extension. -type VirtualMachineScaleSetExtensionUpdate struct { - // Name - READ-ONLY; The name of the extension. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *VirtualMachineScaleSetExtensionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetExtensionUpdate. -func (vmsseu VirtualMachineScaleSetExtensionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmsseu.VirtualMachineScaleSetExtensionProperties != nil { - objectMap["properties"] = vmsseu.VirtualMachineScaleSetExtensionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetExtensionUpdate struct. -func (vmsseu *VirtualMachineScaleSetExtensionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmsseu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmsseu.Type = &typeVar - } - case "properties": - if v != nil { - var virtualMachineScaleSetExtensionProperties VirtualMachineScaleSetExtensionProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetExtensionProperties) - if err != nil { - return err - } - vmsseu.VirtualMachineScaleSetExtensionProperties = &virtualMachineScaleSetExtensionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmsseu.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetHardwareProfile specifies the hardware settings for the virtual machine scale set. -type VirtualMachineScaleSetHardwareProfile struct { - // VMSizeProperties - Specifies the properties for customizing the size of the virtual machine. Minimum api-version: 2022-03-01.

    Please follow the instructions in [VM Customization](https://aka.ms/vmcustomization) for more details. - VMSizeProperties *VMSizeProperties `json:"vmSizeProperties,omitempty"` -} - -// VirtualMachineScaleSetIdentity identity for the virtual machine scale set. -type VirtualMachineScaleSetIdentity struct { - // PrincipalID - READ-ONLY; The principal id of virtual machine scale set identity. This property will only be provided for a system assigned identity. - PrincipalID *string `json:"principalId,omitempty"` - // TenantID - READ-ONLY; The tenant id associated with the virtual machine scale set. This property will only be provided for a system assigned identity. - TenantID *string `json:"tenantId,omitempty"` - // Type - The type of identity used for the virtual machine scale set. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine scale set. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone' - Type ResourceIdentityType `json:"type,omitempty"` - // UserAssignedIdentities - The list of user identities associated with the virtual machine scale set. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. - UserAssignedIdentities map[string]*UserAssignedIdentitiesValue `json:"userAssignedIdentities"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetIdentity. -func (vmssi VirtualMachineScaleSetIdentity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssi.Type != "" { - objectMap["type"] = vmssi.Type - } - if vmssi.UserAssignedIdentities != nil { - objectMap["userAssignedIdentities"] = vmssi.UserAssignedIdentities - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetInstanceView the instance view of a virtual machine scale set. -type VirtualMachineScaleSetInstanceView struct { - autorest.Response `json:"-"` - // VirtualMachine - READ-ONLY; The instance view status summary for the virtual machine scale set. - VirtualMachine *VirtualMachineScaleSetInstanceViewStatusesSummary `json:"virtualMachine,omitempty"` - // Extensions - READ-ONLY; The extensions information. - Extensions *[]VirtualMachineScaleSetVMExtensionsSummary `json:"extensions,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` - // OrchestrationServices - READ-ONLY; The orchestration services information. - OrchestrationServices *[]OrchestrationServiceSummary `json:"orchestrationServices,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetInstanceView. -func (vmssiv VirtualMachineScaleSetInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssiv.Statuses != nil { - objectMap["statuses"] = vmssiv.Statuses - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetInstanceViewStatusesSummary instance view statuses summary for virtual machines of -// a virtual machine scale set. -type VirtualMachineScaleSetInstanceViewStatusesSummary struct { - // StatusesSummary - READ-ONLY; The extensions information. - StatusesSummary *[]VirtualMachineStatusCodeCount `json:"statusesSummary,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetInstanceViewStatusesSummary. -func (vmssivss VirtualMachineScaleSetInstanceViewStatusesSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetIPConfiguration describes a virtual machine scale set network profile's IP -// configuration. -type VirtualMachineScaleSetIPConfiguration struct { - // Name - The IP configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetIPConfigurationProperties `json:"properties,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetIPConfiguration. -func (vmssic VirtualMachineScaleSetIPConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssic.Name != nil { - objectMap["name"] = vmssic.Name - } - if vmssic.VirtualMachineScaleSetIPConfigurationProperties != nil { - objectMap["properties"] = vmssic.VirtualMachineScaleSetIPConfigurationProperties - } - if vmssic.ID != nil { - objectMap["id"] = vmssic.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetIPConfiguration struct. -func (vmssic *VirtualMachineScaleSetIPConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssic.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetIPConfigurationProperties VirtualMachineScaleSetIPConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetIPConfigurationProperties) - if err != nil { - return err - } - vmssic.VirtualMachineScaleSetIPConfigurationProperties = &virtualMachineScaleSetIPConfigurationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssic.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetIPConfigurationProperties describes a virtual machine scale set network profile's -// IP configuration properties. -type VirtualMachineScaleSetIPConfigurationProperties struct { - // Subnet - Specifies the identifier of the subnet. - Subnet *APIEntityReference `json:"subnet,omitempty"` - // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. - Primary *bool `json:"primary,omitempty"` - // PublicIPAddressConfiguration - The publicIPAddressConfiguration. - PublicIPAddressConfiguration *VirtualMachineScaleSetPublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` - // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' - PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` - // ApplicationGatewayBackendAddressPools - Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway. - ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` - // ApplicationSecurityGroups - Specifies an array of references to application security group. - ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` - // LoadBalancerBackendAddressPools - Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. - LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` - // LoadBalancerInboundNatPools - Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same basic sku load balancer. - LoadBalancerInboundNatPools *[]SubResource `json:"loadBalancerInboundNatPools,omitempty"` -} - -// VirtualMachineScaleSetIPTag contains the IP tag associated with the public IP address. -type VirtualMachineScaleSetIPTag struct { - // IPTagType - IP tag type. Example: FirstPartyUsage. - IPTagType *string `json:"ipTagType,omitempty"` - // Tag - IP tag associated with the public IP. Example: SQL, Storage etc. - Tag *string `json:"tag,omitempty"` -} - -// VirtualMachineScaleSetListOSUpgradeHistory list of Virtual Machine Scale Set OS Upgrade History -// operation response. -type VirtualMachineScaleSetListOSUpgradeHistory struct { - autorest.Response `json:"-"` - // Value - The list of OS upgrades performed on the virtual machine scale set. - Value *[]UpgradeOperationHistoricalStatusInfo `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetListOSUpgradeHistoryIterator provides access to a complete listing of -// UpgradeOperationHistoricalStatusInfo values. -type VirtualMachineScaleSetListOSUpgradeHistoryIterator struct { - i int - page VirtualMachineScaleSetListOSUpgradeHistoryPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetListOSUpgradeHistoryIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListOSUpgradeHistoryIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetListOSUpgradeHistoryIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) Response() VirtualMachineScaleSetListOSUpgradeHistory { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetListOSUpgradeHistoryIterator) Value() UpgradeOperationHistoricalStatusInfo { - if !iter.page.NotDone() { - return UpgradeOperationHistoricalStatusInfo{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetListOSUpgradeHistoryIterator type. -func NewVirtualMachineScaleSetListOSUpgradeHistoryIterator(page VirtualMachineScaleSetListOSUpgradeHistoryPage) VirtualMachineScaleSetListOSUpgradeHistoryIterator { - return VirtualMachineScaleSetListOSUpgradeHistoryIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) IsEmpty() bool { - return vmsslouh.Value == nil || len(*vmsslouh.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) hasNextLink() bool { - return vmsslouh.NextLink != nil && len(*vmsslouh.NextLink) != 0 -} - -// virtualMachineScaleSetListOSUpgradeHistoryPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmsslouh VirtualMachineScaleSetListOSUpgradeHistory) virtualMachineScaleSetListOSUpgradeHistoryPreparer(ctx context.Context) (*http.Request, error) { - if !vmsslouh.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmsslouh.NextLink))) -} - -// VirtualMachineScaleSetListOSUpgradeHistoryPage contains a page of UpgradeOperationHistoricalStatusInfo -// values. -type VirtualMachineScaleSetListOSUpgradeHistoryPage struct { - fn func(context.Context, VirtualMachineScaleSetListOSUpgradeHistory) (VirtualMachineScaleSetListOSUpgradeHistory, error) - vmsslouh VirtualMachineScaleSetListOSUpgradeHistory -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetListOSUpgradeHistoryPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListOSUpgradeHistoryPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmsslouh) - if err != nil { - return err - } - page.vmsslouh = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetListOSUpgradeHistoryPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) NotDone() bool { - return !page.vmsslouh.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) Response() VirtualMachineScaleSetListOSUpgradeHistory { - return page.vmsslouh -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetListOSUpgradeHistoryPage) Values() []UpgradeOperationHistoricalStatusInfo { - if page.vmsslouh.IsEmpty() { - return nil - } - return *page.vmsslouh.Value -} - -// Creates a new instance of the VirtualMachineScaleSetListOSUpgradeHistoryPage type. -func NewVirtualMachineScaleSetListOSUpgradeHistoryPage(cur VirtualMachineScaleSetListOSUpgradeHistory, getNextPage func(context.Context, VirtualMachineScaleSetListOSUpgradeHistory) (VirtualMachineScaleSetListOSUpgradeHistory, error)) VirtualMachineScaleSetListOSUpgradeHistoryPage { - return VirtualMachineScaleSetListOSUpgradeHistoryPage{ - fn: getNextPage, - vmsslouh: cur, - } -} - -// VirtualMachineScaleSetListResult the List Virtual Machine operation response. -type VirtualMachineScaleSetListResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machine scale sets. - Value *[]VirtualMachineScaleSet `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetListResultIterator provides access to a complete listing of VirtualMachineScaleSet -// values. -type VirtualMachineScaleSetListResultIterator struct { - i int - page VirtualMachineScaleSetListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetListResultIterator) Response() VirtualMachineScaleSetListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetListResultIterator) Value() VirtualMachineScaleSet { - if !iter.page.NotDone() { - return VirtualMachineScaleSet{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetListResultIterator type. -func NewVirtualMachineScaleSetListResultIterator(page VirtualMachineScaleSetListResultPage) VirtualMachineScaleSetListResultIterator { - return VirtualMachineScaleSetListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmsslr VirtualMachineScaleSetListResult) IsEmpty() bool { - return vmsslr.Value == nil || len(*vmsslr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmsslr VirtualMachineScaleSetListResult) hasNextLink() bool { - return vmsslr.NextLink != nil && len(*vmsslr.NextLink) != 0 -} - -// virtualMachineScaleSetListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmsslr VirtualMachineScaleSetListResult) virtualMachineScaleSetListResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmsslr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmsslr.NextLink))) -} - -// VirtualMachineScaleSetListResultPage contains a page of VirtualMachineScaleSet values. -type VirtualMachineScaleSetListResultPage struct { - fn func(context.Context, VirtualMachineScaleSetListResult) (VirtualMachineScaleSetListResult, error) - vmsslr VirtualMachineScaleSetListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmsslr) - if err != nil { - return err - } - page.vmsslr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetListResultPage) NotDone() bool { - return !page.vmsslr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetListResultPage) Response() VirtualMachineScaleSetListResult { - return page.vmsslr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetListResultPage) Values() []VirtualMachineScaleSet { - if page.vmsslr.IsEmpty() { - return nil - } - return *page.vmsslr.Value -} - -// Creates a new instance of the VirtualMachineScaleSetListResultPage type. -func NewVirtualMachineScaleSetListResultPage(cur VirtualMachineScaleSetListResult, getNextPage func(context.Context, VirtualMachineScaleSetListResult) (VirtualMachineScaleSetListResult, error)) VirtualMachineScaleSetListResultPage { - return VirtualMachineScaleSetListResultPage{ - fn: getNextPage, - vmsslr: cur, - } -} - -// VirtualMachineScaleSetListSkusResult the Virtual Machine Scale Set List Skus operation response. -type VirtualMachineScaleSetListSkusResult struct { - autorest.Response `json:"-"` - // Value - The list of skus available for the virtual machine scale set. - Value *[]VirtualMachineScaleSetSku `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetListSkusResultIterator provides access to a complete listing of -// VirtualMachineScaleSetSku values. -type VirtualMachineScaleSetListSkusResultIterator struct { - i int - page VirtualMachineScaleSetListSkusResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetListSkusResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListSkusResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetListSkusResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetListSkusResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetListSkusResultIterator) Response() VirtualMachineScaleSetListSkusResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetListSkusResultIterator) Value() VirtualMachineScaleSetSku { - if !iter.page.NotDone() { - return VirtualMachineScaleSetSku{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetListSkusResultIterator type. -func NewVirtualMachineScaleSetListSkusResultIterator(page VirtualMachineScaleSetListSkusResultPage) VirtualMachineScaleSetListSkusResultIterator { - return VirtualMachineScaleSetListSkusResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmsslsr VirtualMachineScaleSetListSkusResult) IsEmpty() bool { - return vmsslsr.Value == nil || len(*vmsslsr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmsslsr VirtualMachineScaleSetListSkusResult) hasNextLink() bool { - return vmsslsr.NextLink != nil && len(*vmsslsr.NextLink) != 0 -} - -// virtualMachineScaleSetListSkusResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmsslsr VirtualMachineScaleSetListSkusResult) virtualMachineScaleSetListSkusResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmsslsr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmsslsr.NextLink))) -} - -// VirtualMachineScaleSetListSkusResultPage contains a page of VirtualMachineScaleSetSku values. -type VirtualMachineScaleSetListSkusResultPage struct { - fn func(context.Context, VirtualMachineScaleSetListSkusResult) (VirtualMachineScaleSetListSkusResult, error) - vmsslsr VirtualMachineScaleSetListSkusResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetListSkusResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListSkusResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmsslsr) - if err != nil { - return err - } - page.vmsslsr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetListSkusResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetListSkusResultPage) NotDone() bool { - return !page.vmsslsr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetListSkusResultPage) Response() VirtualMachineScaleSetListSkusResult { - return page.vmsslsr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetListSkusResultPage) Values() []VirtualMachineScaleSetSku { - if page.vmsslsr.IsEmpty() { - return nil - } - return *page.vmsslsr.Value -} - -// Creates a new instance of the VirtualMachineScaleSetListSkusResultPage type. -func NewVirtualMachineScaleSetListSkusResultPage(cur VirtualMachineScaleSetListSkusResult, getNextPage func(context.Context, VirtualMachineScaleSetListSkusResult) (VirtualMachineScaleSetListSkusResult, error)) VirtualMachineScaleSetListSkusResultPage { - return VirtualMachineScaleSetListSkusResultPage{ - fn: getNextPage, - vmsslsr: cur, - } -} - -// VirtualMachineScaleSetListWithLinkResult the List Virtual Machine operation response. -type VirtualMachineScaleSetListWithLinkResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machine scale sets. - Value *[]VirtualMachineScaleSet `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets. - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetListWithLinkResultIterator provides access to a complete listing of -// VirtualMachineScaleSet values. -type VirtualMachineScaleSetListWithLinkResultIterator struct { - i int - page VirtualMachineScaleSetListWithLinkResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetListWithLinkResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListWithLinkResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetListWithLinkResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetListWithLinkResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetListWithLinkResultIterator) Response() VirtualMachineScaleSetListWithLinkResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetListWithLinkResultIterator) Value() VirtualMachineScaleSet { - if !iter.page.NotDone() { - return VirtualMachineScaleSet{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetListWithLinkResultIterator type. -func NewVirtualMachineScaleSetListWithLinkResultIterator(page VirtualMachineScaleSetListWithLinkResultPage) VirtualMachineScaleSetListWithLinkResultIterator { - return VirtualMachineScaleSetListWithLinkResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) IsEmpty() bool { - return vmsslwlr.Value == nil || len(*vmsslwlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) hasNextLink() bool { - return vmsslwlr.NextLink != nil && len(*vmsslwlr.NextLink) != 0 -} - -// virtualMachineScaleSetListWithLinkResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmsslwlr VirtualMachineScaleSetListWithLinkResult) virtualMachineScaleSetListWithLinkResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmsslwlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmsslwlr.NextLink))) -} - -// VirtualMachineScaleSetListWithLinkResultPage contains a page of VirtualMachineScaleSet values. -type VirtualMachineScaleSetListWithLinkResultPage struct { - fn func(context.Context, VirtualMachineScaleSetListWithLinkResult) (VirtualMachineScaleSetListWithLinkResult, error) - vmsslwlr VirtualMachineScaleSetListWithLinkResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetListWithLinkResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetListWithLinkResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmsslwlr) - if err != nil { - return err - } - page.vmsslwlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetListWithLinkResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetListWithLinkResultPage) NotDone() bool { - return !page.vmsslwlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetListWithLinkResultPage) Response() VirtualMachineScaleSetListWithLinkResult { - return page.vmsslwlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetListWithLinkResultPage) Values() []VirtualMachineScaleSet { - if page.vmsslwlr.IsEmpty() { - return nil - } - return *page.vmsslwlr.Value -} - -// Creates a new instance of the VirtualMachineScaleSetListWithLinkResultPage type. -func NewVirtualMachineScaleSetListWithLinkResultPage(cur VirtualMachineScaleSetListWithLinkResult, getNextPage func(context.Context, VirtualMachineScaleSetListWithLinkResult) (VirtualMachineScaleSetListWithLinkResult, error)) VirtualMachineScaleSetListWithLinkResultPage { - return VirtualMachineScaleSetListWithLinkResultPage{ - fn: getNextPage, - vmsslwlr: cur, - } -} - -// VirtualMachineScaleSetManagedDiskParameters describes the parameters of a ScaleSet managed disk. -type VirtualMachineScaleSetManagedDiskParameters struct { - // StorageAccountType - Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values include: 'StorageAccountTypesStandardLRS', 'StorageAccountTypesPremiumLRS', 'StorageAccountTypesStandardSSDLRS', 'StorageAccountTypesUltraSSDLRS', 'StorageAccountTypesPremiumZRS', 'StorageAccountTypesStandardSSDZRS', 'StorageAccountTypesPremiumV2LRS' - StorageAccountType StorageAccountTypes `json:"storageAccountType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` - // SecurityProfile - Specifies the security profile for the managed disk. - SecurityProfile *VMDiskSecurityProfile `json:"securityProfile,omitempty"` -} - -// VirtualMachineScaleSetNetworkConfiguration describes a virtual machine scale set network profile's -// network configurations. -type VirtualMachineScaleSetNetworkConfiguration struct { - // Name - The network configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetNetworkConfigurationProperties `json:"properties,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetNetworkConfiguration. -func (vmssnc VirtualMachineScaleSetNetworkConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssnc.Name != nil { - objectMap["name"] = vmssnc.Name - } - if vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties != nil { - objectMap["properties"] = vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties - } - if vmssnc.ID != nil { - objectMap["id"] = vmssnc.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetNetworkConfiguration struct. -func (vmssnc *VirtualMachineScaleSetNetworkConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssnc.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetNetworkConfigurationProperties VirtualMachineScaleSetNetworkConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetNetworkConfigurationProperties) - if err != nil { - return err - } - vmssnc.VirtualMachineScaleSetNetworkConfigurationProperties = &virtualMachineScaleSetNetworkConfigurationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssnc.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetNetworkConfigurationDNSSettings describes a virtual machines scale sets network -// configuration's DNS settings. -type VirtualMachineScaleSetNetworkConfigurationDNSSettings struct { - // DNSServers - List of DNS servers IP addresses - DNSServers *[]string `json:"dnsServers,omitempty"` -} - -// VirtualMachineScaleSetNetworkConfigurationProperties describes a virtual machine scale set network -// profile's IP configuration. -type VirtualMachineScaleSetNetworkConfigurationProperties struct { - // Primary - Specifies the primary network interface in case the virtual machine has more than 1 network interface. - Primary *bool `json:"primary,omitempty"` - // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. - EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` - // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. - EnableFpga *bool `json:"enableFpga,omitempty"` - // NetworkSecurityGroup - The network security group. - NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` - // DNSSettings - The dns settings to be applied on the network interfaces. - DNSSettings *VirtualMachineScaleSetNetworkConfigurationDNSSettings `json:"dnsSettings,omitempty"` - // IPConfigurations - Specifies the IP configurations of the network interface. - IPConfigurations *[]VirtualMachineScaleSetIPConfiguration `json:"ipConfigurations,omitempty"` - // EnableIPForwarding - Whether IP forwarding enabled on this NIC. - EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` - // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetNetworkProfile describes a virtual machine scale set network profile. -type VirtualMachineScaleSetNetworkProfile struct { - // HealthProbe - A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. - HealthProbe *APIEntityReference `json:"healthProbe,omitempty"` - // NetworkInterfaceConfigurations - The list of network configurations. - NetworkInterfaceConfigurations *[]VirtualMachineScaleSetNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` - // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with orchestration mode 'Flexible'. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' - NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` -} - -// VirtualMachineScaleSetOSDisk describes a virtual machine scale set operating system disk. -type VirtualMachineScaleSetOSDisk struct { - // Name - The disk name. - Name *string `json:"name,omitempty"` - // Caching - Specifies the caching requirements.

    Possible values are:

    **None**

    **ReadOnly**

    **ReadWrite**

    Default: **None for Standard storage. ReadOnly for Premium storage**. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. - WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` - // CreateOption - Specifies how the virtual machines in the scale set should be created.

    The only allowed value is: **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach' - CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"` - // DiffDiskSettings - Specifies the ephemeral disk Settings for the operating system disk used by the virtual machine scale set. - DiffDiskSettings *DiffDiskSettings `json:"diffDiskSettings,omitempty"` - // DiskSizeGB - Specifies the size of the operating system disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // OsType - This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD.

    Possible values are:

    **Windows**

    **Linux**. Possible values include: 'OperatingSystemTypesWindows', 'OperatingSystemTypesLinux' - OsType OperatingSystemTypes `json:"osType,omitempty"` - // Image - Specifies information about the unmanaged user image to base the scale set on. - Image *VirtualHardDisk `json:"image,omitempty"` - // VhdContainers - Specifies the container urls that are used to store operating system disks for the scale set. - VhdContainers *[]string `json:"vhdContainers,omitempty"` - // ManagedDisk - The managed disk parameters. - ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` - // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the OS disk is deleted when VMSS Flex VM is deleted.

    **Detach** If this value is used, the OS disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' - DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetOSProfile describes a virtual machine scale set OS profile. -type VirtualMachineScaleSetOSProfile struct { - // ComputerNamePrefix - Specifies the computer name prefix for all of the virtual machines in the scale set. Computer name prefixes must be 1 to 15 characters long. - ComputerNamePrefix *string `json:"computerNamePrefix,omitempty"` - // AdminUsername - Specifies the name of the administrator account.

    **Windows-only restriction:** Cannot end in "."

    **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".

    **Minimum-length (Linux):** 1 character

    **Max-length (Linux):** 64 characters

    **Max-length (Windows):** 20 characters - AdminUsername *string `json:"adminUsername,omitempty"` - // AdminPassword - Specifies the password of the administrator account.

    **Minimum-length (Windows):** 8 characters

    **Minimum-length (Linux):** 6 characters

    **Max-length (Windows):** 123 characters

    **Max-length (Linux):** 72 characters

    **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled
    Has lower characters
    Has upper characters
    Has a digit
    Has a special character (Regex match [\W_])

    **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!"

    For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/reset-rdp)

    For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/troubleshoot/azure/virtual-machines/troubleshoot-ssh-connection) - AdminPassword *string `json:"adminPassword,omitempty"` - // CustomData - Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes.

    For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/linux/using-cloud-init) - CustomData *string `json:"customData,omitempty"` - // WindowsConfiguration - Specifies Windows operating system settings on the virtual machine. - WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` - // LinuxConfiguration - Specifies the Linux operating system settings on the virtual machine.

    For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/linux/endorsed-distros). - LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` - // Secrets - Specifies set of certificates that should be installed onto the virtual machines in the scale set. To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). - Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` - // AllowExtensionOperations - Specifies whether extension operations should be allowed on the virtual machine scale set.

    This may only be set to False when no extensions are present on the virtual machine scale set. - AllowExtensionOperations *bool `json:"allowExtensionOperations,omitempty"` -} - -// VirtualMachineScaleSetProperties describes the properties of a Virtual Machine Scale Set. -type VirtualMachineScaleSetProperties struct { - // UpgradePolicy - The upgrade policy. - UpgradePolicy *UpgradePolicy `json:"upgradePolicy,omitempty"` - // AutomaticRepairsPolicy - Policy for automatic repairs. - AutomaticRepairsPolicy *AutomaticRepairsPolicy `json:"automaticRepairsPolicy,omitempty"` - // VirtualMachineProfile - The virtual machine profile. - VirtualMachineProfile *VirtualMachineScaleSetVMProfile `json:"virtualMachineProfile,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // Overprovision - Specifies whether the Virtual Machine Scale Set should be overprovisioned. - Overprovision *bool `json:"overprovision,omitempty"` - // DoNotRunExtensionsOnOverprovisionedVMs - When Overprovision is enabled, extensions are launched only on the requested number of VMs which are finally kept. This property will hence ensure that the extensions do not run on the extra overprovisioned VMs. - DoNotRunExtensionsOnOverprovisionedVMs *bool `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"` - // UniqueID - READ-ONLY; Specifies the ID which uniquely identifies a Virtual Machine Scale Set. - UniqueID *string `json:"uniqueId,omitempty"` - // SinglePlacementGroup - When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true. - SinglePlacementGroup *bool `json:"singlePlacementGroup,omitempty"` - // ZoneBalance - Whether to force strictly even Virtual Machine distribution cross x-zones in case there is zone outage. zoneBalance property can only be set if the zones property of the scale set contains more than one zone. If there are no zones or only one zone specified, then zoneBalance property should not be set. - ZoneBalance *bool `json:"zoneBalance,omitempty"` - // PlatformFaultDomainCount - Fault Domain count for each placement group. - PlatformFaultDomainCount *int32 `json:"platformFaultDomainCount,omitempty"` - // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine scale set should be assigned to.

    Minimum api-version: 2018-04-01. - ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` - // HostGroup - Specifies information about the dedicated host group that the virtual machine scale set resides in.

    Minimum api-version: 2020-06-01. - HostGroup *SubResource `json:"hostGroup,omitempty"` - // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` - // ScaleInPolicy - Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - ScaleInPolicy *ScaleInPolicy `json:"scaleInPolicy,omitempty"` - // OrchestrationMode - Specifies the orchestration mode for the virtual machine scale set. Possible values include: 'Uniform', 'Flexible' - OrchestrationMode OrchestrationMode `json:"orchestrationMode,omitempty"` - // SpotRestorePolicy - Specifies the Spot Restore properties for the virtual machine scale set. - SpotRestorePolicy *SpotRestorePolicy `json:"spotRestorePolicy,omitempty"` - // TimeCreated - READ-ONLY; Specifies the time at which the Virtual Machine Scale Set resource was created.

    Minimum api-version: 2022-03-01. - TimeCreated *date.Time `json:"timeCreated,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetProperties. -func (vmssp VirtualMachineScaleSetProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssp.UpgradePolicy != nil { - objectMap["upgradePolicy"] = vmssp.UpgradePolicy - } - if vmssp.AutomaticRepairsPolicy != nil { - objectMap["automaticRepairsPolicy"] = vmssp.AutomaticRepairsPolicy - } - if vmssp.VirtualMachineProfile != nil { - objectMap["virtualMachineProfile"] = vmssp.VirtualMachineProfile - } - if vmssp.Overprovision != nil { - objectMap["overprovision"] = vmssp.Overprovision - } - if vmssp.DoNotRunExtensionsOnOverprovisionedVMs != nil { - objectMap["doNotRunExtensionsOnOverprovisionedVMs"] = vmssp.DoNotRunExtensionsOnOverprovisionedVMs - } - if vmssp.SinglePlacementGroup != nil { - objectMap["singlePlacementGroup"] = vmssp.SinglePlacementGroup - } - if vmssp.ZoneBalance != nil { - objectMap["zoneBalance"] = vmssp.ZoneBalance - } - if vmssp.PlatformFaultDomainCount != nil { - objectMap["platformFaultDomainCount"] = vmssp.PlatformFaultDomainCount - } - if vmssp.ProximityPlacementGroup != nil { - objectMap["proximityPlacementGroup"] = vmssp.ProximityPlacementGroup - } - if vmssp.HostGroup != nil { - objectMap["hostGroup"] = vmssp.HostGroup - } - if vmssp.AdditionalCapabilities != nil { - objectMap["additionalCapabilities"] = vmssp.AdditionalCapabilities - } - if vmssp.ScaleInPolicy != nil { - objectMap["scaleInPolicy"] = vmssp.ScaleInPolicy - } - if vmssp.OrchestrationMode != "" { - objectMap["orchestrationMode"] = vmssp.OrchestrationMode - } - if vmssp.SpotRestorePolicy != nil { - objectMap["spotRestorePolicy"] = vmssp.SpotRestorePolicy - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetPublicIPAddressConfiguration describes a virtual machines scale set IP -// Configuration's PublicIPAddress configuration -type VirtualMachineScaleSetPublicIPAddressConfiguration struct { - // Name - The publicIP address configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetPublicIPAddressConfigurationProperties `json:"properties,omitempty"` - Sku *PublicIPAddressSku `json:"sku,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetPublicIPAddressConfiguration. -func (vmsspiac VirtualMachineScaleSetPublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmsspiac.Name != nil { - objectMap["name"] = vmsspiac.Name - } - if vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties != nil { - objectMap["properties"] = vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties - } - if vmsspiac.Sku != nil { - objectMap["sku"] = vmsspiac.Sku - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetPublicIPAddressConfiguration struct. -func (vmsspiac *VirtualMachineScaleSetPublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmsspiac.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetPublicIPAddressConfigurationProperties VirtualMachineScaleSetPublicIPAddressConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetPublicIPAddressConfigurationProperties) - if err != nil { - return err - } - vmsspiac.VirtualMachineScaleSetPublicIPAddressConfigurationProperties = &virtualMachineScaleSetPublicIPAddressConfigurationProperties - } - case "sku": - if v != nil { - var sku PublicIPAddressSku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - vmsspiac.Sku = &sku - } - } - } - - return nil -} - -// VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings describes a virtual machines scale sets -// network configuration's DNS settings. -type VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings struct { - // DomainNameLabel - The Domain name label.The concatenation of the domain name label and vm index will be the domain name labels of the PublicIPAddress resources that will be created - DomainNameLabel *string `json:"domainNameLabel,omitempty"` -} - -// VirtualMachineScaleSetPublicIPAddressConfigurationProperties describes a virtual machines scale set IP -// Configuration's PublicIPAddress configuration -type VirtualMachineScaleSetPublicIPAddressConfigurationProperties struct { - // IdleTimeoutInMinutes - The idle timeout of the public IP address. - IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` - // DNSSettings - The dns settings to be applied on the publicIP addresses . - DNSSettings *VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings `json:"dnsSettings,omitempty"` - // IPTags - The list of IP tags associated with the public IP address. - IPTags *[]VirtualMachineScaleSetIPTag `json:"ipTags,omitempty"` - // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. - PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` - // PublicIPAddressVersion - Available from Api-Version 2019-07-01 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' - PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"` - // DeleteOption - Specify what happens to the public IP when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetReimageParameters describes a Virtual Machine Scale Set VM Reimage Parameters. -type VirtualMachineScaleSetReimageParameters struct { - // InstanceIds - The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set. - InstanceIds *[]string `json:"instanceIds,omitempty"` - // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. - TempDisk *bool `json:"tempDisk,omitempty"` -} - -// VirtualMachineScaleSetRollingUpgradesCancelFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type VirtualMachineScaleSetRollingUpgradesCancelFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetRollingUpgradesCancelFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetRollingUpgradesCancelFuture.Result. -func (future *VirtualMachineScaleSetRollingUpgradesCancelFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesCancelFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesCancelFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture an abstraction for monitoring and -// retrieving the results of a long-running operation. -type VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture.Result. -func (future *VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture an abstraction for monitoring and retrieving -// the results of a long-running operation. -type VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetRollingUpgradesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture.Result. -func (future *VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture) result(client VirtualMachineScaleSetRollingUpgradesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineScaleSetsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (VirtualMachineScaleSet, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsCreateOrUpdateFuture.Result. -func (future *VirtualMachineScaleSetsCreateOrUpdateFuture) result(client VirtualMachineScaleSetsClient) (vmss VirtualMachineScaleSet, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmss.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmss.Response.Response, err = future.GetResult(sender); err == nil && vmss.Response.Response.StatusCode != http.StatusNoContent { - vmss, err = client.CreateOrUpdateResponder(vmss.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsCreateOrUpdateFuture", "Result", vmss.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetsDeallocateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsDeallocateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsDeallocateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsDeallocateFuture.Result. -func (future *VirtualMachineScaleSetsDeallocateFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeallocateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeallocateFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsDeleteFuture.Result. -func (future *VirtualMachineScaleSetsDeleteFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsDeleteInstancesFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineScaleSetsDeleteInstancesFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsDeleteInstancesFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsDeleteInstancesFuture.Result. -func (future *VirtualMachineScaleSetsDeleteInstancesFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsDeleteInstancesFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsDeleteInstancesFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetSku describes an available virtual machine scale set sku. -type VirtualMachineScaleSetSku struct { - // ResourceType - READ-ONLY; The type of resource the sku applies to. - ResourceType *string `json:"resourceType,omitempty"` - // Sku - READ-ONLY; The Sku. - Sku *Sku `json:"sku,omitempty"` - // Capacity - READ-ONLY; Specifies the number of virtual machines in the scale set. - Capacity *VirtualMachineScaleSetSkuCapacity `json:"capacity,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetSku. -func (vmsss VirtualMachineScaleSetSku) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetSkuCapacity describes scaling information of a sku. -type VirtualMachineScaleSetSkuCapacity struct { - // Minimum - READ-ONLY; The minimum capacity. - Minimum *int64 `json:"minimum,omitempty"` - // Maximum - READ-ONLY; The maximum capacity that can be set. - Maximum *int64 `json:"maximum,omitempty"` - // DefaultCapacity - READ-ONLY; The default capacity. - DefaultCapacity *int64 `json:"defaultCapacity,omitempty"` - // ScaleType - READ-ONLY; The scale type applicable to the sku. Possible values include: 'VirtualMachineScaleSetSkuScaleTypeAutomatic', 'VirtualMachineScaleSetSkuScaleTypeNone' - ScaleType VirtualMachineScaleSetSkuScaleType `json:"scaleType,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetSkuCapacity. -func (vmsssc VirtualMachineScaleSetSkuCapacity) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetsPerformMaintenanceFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineScaleSetsPerformMaintenanceFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsPerformMaintenanceFuture.Result. -func (future *VirtualMachineScaleSetsPerformMaintenanceFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsPerformMaintenanceFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsPowerOffFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsPowerOffFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsPowerOffFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsPowerOffFuture.Result. -func (future *VirtualMachineScaleSetsPowerOffFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsPowerOffFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsPowerOffFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsRedeployFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsRedeployFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsRedeployFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsRedeployFuture.Result. -func (future *VirtualMachineScaleSetsRedeployFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsRedeployFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsRedeployFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsReimageAllFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsReimageAllFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsReimageAllFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsReimageAllFuture.Result. -func (future *VirtualMachineScaleSetsReimageAllFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsReimageAllFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsReimageAllFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsReimageFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsReimageFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsReimageFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsReimageFuture.Result. -func (future *VirtualMachineScaleSetsReimageFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsReimageFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsReimageFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsRestartFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsRestartFuture.Result. -func (future *VirtualMachineScaleSetsRestartFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsSetOrchestrationServiceStateFuture an abstraction for monitoring and retrieving -// the results of a long-running operation. -type VirtualMachineScaleSetsSetOrchestrationServiceStateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsSetOrchestrationServiceStateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsSetOrchestrationServiceStateFuture.Result. -func (future *VirtualMachineScaleSetsSetOrchestrationServiceStateFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsSetOrchestrationServiceStateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsSetOrchestrationServiceStateFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetsStartFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsStartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsStartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsStartFuture.Result. -func (future *VirtualMachineScaleSetsStartFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsStartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsStartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetStorageProfile describes a virtual machine scale set storage profile. -type VirtualMachineScaleSetStorageProfile struct { - // ImageReference - Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. - ImageReference *ImageReference `json:"imageReference,omitempty"` - // OsDisk - Specifies information about the operating system disk used by the virtual machines in the scale set.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - OsDisk *VirtualMachineScaleSetOSDisk `json:"osDisk,omitempty"` - // DataDisks - Specifies the parameters that are used to add data disks to the virtual machines in the scale set.

    For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/managed-disks-overview). - DataDisks *[]VirtualMachineScaleSetDataDisk `json:"dataDisks,omitempty"` -} - -// VirtualMachineScaleSetsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (VirtualMachineScaleSet, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsUpdateFuture.Result. -func (future *VirtualMachineScaleSetsUpdateFuture) result(client VirtualMachineScaleSetsClient) (vmss VirtualMachineScaleSet, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmss.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmss.Response.Response, err = future.GetResult(sender); err == nil && vmss.Response.Response.StatusCode != http.StatusNoContent { - vmss, err = client.UpdateResponder(vmss.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateFuture", "Result", vmss.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetsUpdateInstancesFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. -type VirtualMachineScaleSetsUpdateInstancesFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetsUpdateInstancesFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetsUpdateInstancesFuture.Result. -func (future *VirtualMachineScaleSetsUpdateInstancesFuture) result(client VirtualMachineScaleSetsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsUpdateInstancesFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetsUpdateInstancesFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetUpdate describes a Virtual Machine Scale Set. -type VirtualMachineScaleSetUpdate struct { - // Sku - The virtual machine scale set sku. - Sku *Sku `json:"sku,omitempty"` - // Plan - The purchase plan when deploying a virtual machine scale set from VM Marketplace images. - Plan *Plan `json:"plan,omitempty"` - *VirtualMachineScaleSetUpdateProperties `json:"properties,omitempty"` - // Identity - The identity of the virtual machine scale set, if configured. - Identity *VirtualMachineScaleSetIdentity `json:"identity,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdate. -func (vmssu VirtualMachineScaleSetUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssu.Sku != nil { - objectMap["sku"] = vmssu.Sku - } - if vmssu.Plan != nil { - objectMap["plan"] = vmssu.Plan - } - if vmssu.VirtualMachineScaleSetUpdateProperties != nil { - objectMap["properties"] = vmssu.VirtualMachineScaleSetUpdateProperties - } - if vmssu.Identity != nil { - objectMap["identity"] = vmssu.Identity - } - if vmssu.Tags != nil { - objectMap["tags"] = vmssu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdate struct. -func (vmssu *VirtualMachineScaleSetUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - vmssu.Sku = &sku - } - case "plan": - if v != nil { - var plan Plan - err = json.Unmarshal(*v, &plan) - if err != nil { - return err - } - vmssu.Plan = &plan - } - case "properties": - if v != nil { - var virtualMachineScaleSetUpdateProperties VirtualMachineScaleSetUpdateProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateProperties) - if err != nil { - return err - } - vmssu.VirtualMachineScaleSetUpdateProperties = &virtualMachineScaleSetUpdateProperties - } - case "identity": - if v != nil { - var identity VirtualMachineScaleSetIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - vmssu.Identity = &identity - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmssu.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineScaleSetUpdateIPConfiguration describes a virtual machine scale set network profile's IP -// configuration. NOTE: The subnet of a scale set may be modified as long as the original subnet and the -// new subnet are in the same virtual network -type VirtualMachineScaleSetUpdateIPConfiguration struct { - // Name - The IP configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetUpdateIPConfigurationProperties `json:"properties,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdateIPConfiguration. -func (vmssuic VirtualMachineScaleSetUpdateIPConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssuic.Name != nil { - objectMap["name"] = vmssuic.Name - } - if vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties != nil { - objectMap["properties"] = vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties - } - if vmssuic.ID != nil { - objectMap["id"] = vmssuic.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdateIPConfiguration struct. -func (vmssuic *VirtualMachineScaleSetUpdateIPConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssuic.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetUpdateIPConfigurationProperties VirtualMachineScaleSetUpdateIPConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateIPConfigurationProperties) - if err != nil { - return err - } - vmssuic.VirtualMachineScaleSetUpdateIPConfigurationProperties = &virtualMachineScaleSetUpdateIPConfigurationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssuic.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetUpdateIPConfigurationProperties describes a virtual machine scale set network -// profile's IP configuration properties. -type VirtualMachineScaleSetUpdateIPConfigurationProperties struct { - // Subnet - The subnet. - Subnet *APIEntityReference `json:"subnet,omitempty"` - // Primary - Specifies the primary IP Configuration in case the network interface has more than one IP Configuration. - Primary *bool `json:"primary,omitempty"` - // PublicIPAddressConfiguration - The publicIPAddressConfiguration. - PublicIPAddressConfiguration *VirtualMachineScaleSetUpdatePublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"` - // PrivateIPAddressVersion - Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6' - PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"` - // ApplicationGatewayBackendAddressPools - The application gateway backend address pools. - ApplicationGatewayBackendAddressPools *[]SubResource `json:"applicationGatewayBackendAddressPools,omitempty"` - // ApplicationSecurityGroups - Specifies an array of references to application security group. - ApplicationSecurityGroups *[]SubResource `json:"applicationSecurityGroups,omitempty"` - // LoadBalancerBackendAddressPools - The load balancer backend address pools. - LoadBalancerBackendAddressPools *[]SubResource `json:"loadBalancerBackendAddressPools,omitempty"` - // LoadBalancerInboundNatPools - The load balancer inbound nat pools. - LoadBalancerInboundNatPools *[]SubResource `json:"loadBalancerInboundNatPools,omitempty"` -} - -// VirtualMachineScaleSetUpdateNetworkConfiguration describes a virtual machine scale set network profile's -// network configurations. -type VirtualMachineScaleSetUpdateNetworkConfiguration struct { - // Name - The network configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetUpdateNetworkConfigurationProperties `json:"properties,omitempty"` - // ID - Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdateNetworkConfiguration. -func (vmssunc VirtualMachineScaleSetUpdateNetworkConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssunc.Name != nil { - objectMap["name"] = vmssunc.Name - } - if vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties != nil { - objectMap["properties"] = vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties - } - if vmssunc.ID != nil { - objectMap["id"] = vmssunc.ID - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdateNetworkConfiguration struct. -func (vmssunc *VirtualMachineScaleSetUpdateNetworkConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssunc.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetUpdateNetworkConfigurationProperties VirtualMachineScaleSetUpdateNetworkConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetUpdateNetworkConfigurationProperties) - if err != nil { - return err - } - vmssunc.VirtualMachineScaleSetUpdateNetworkConfigurationProperties = &virtualMachineScaleSetUpdateNetworkConfigurationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssunc.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetUpdateNetworkConfigurationProperties describes a virtual machine scale set -// updatable network profile's IP configuration.Use this object for updating network profile's IP -// Configuration. -type VirtualMachineScaleSetUpdateNetworkConfigurationProperties struct { - // Primary - Whether this is a primary NIC on a virtual machine. - Primary *bool `json:"primary,omitempty"` - // EnableAcceleratedNetworking - Specifies whether the network interface is accelerated networking-enabled. - EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"` - // EnableFpga - Specifies whether the network interface is FPGA networking-enabled. - EnableFpga *bool `json:"enableFpga,omitempty"` - // NetworkSecurityGroup - The network security group. - NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"` - // DNSSettings - The dns settings to be applied on the network interfaces. - DNSSettings *VirtualMachineScaleSetNetworkConfigurationDNSSettings `json:"dnsSettings,omitempty"` - // IPConfigurations - The virtual machine scale set IP Configuration. - IPConfigurations *[]VirtualMachineScaleSetUpdateIPConfiguration `json:"ipConfigurations,omitempty"` - // EnableIPForwarding - Whether IP forwarding enabled on this NIC. - EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"` - // DeleteOption - Specify what happens to the network interface when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetUpdateNetworkProfile describes a virtual machine scale set network profile. -type VirtualMachineScaleSetUpdateNetworkProfile struct { - // HealthProbe - A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'. - HealthProbe *APIEntityReference `json:"healthProbe,omitempty"` - // NetworkInterfaceConfigurations - The list of network configurations. - NetworkInterfaceConfigurations *[]VirtualMachineScaleSetUpdateNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` - // NetworkAPIVersion - specifies the Microsoft.Network API version used when creating networking resources in the Network Interface Configurations for Virtual Machine Scale Set with orchestration mode 'Flexible'. Possible values include: 'TwoZeroTwoZeroHyphenMinusOneOneHyphenMinusZeroOne' - NetworkAPIVersion NetworkAPIVersion `json:"networkApiVersion,omitempty"` -} - -// VirtualMachineScaleSetUpdateOSDisk describes virtual machine scale set operating system disk Update -// Object. This should be used for Updating VMSS OS Disk. -type VirtualMachineScaleSetUpdateOSDisk struct { - // Caching - The caching type. Possible values include: 'CachingTypesNone', 'CachingTypesReadOnly', 'CachingTypesReadWrite' - Caching CachingTypes `json:"caching,omitempty"` - // WriteAcceleratorEnabled - Specifies whether writeAccelerator should be enabled or disabled on the disk. - WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"` - // DiskSizeGB - Specifies the size of the operating system disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image.

    This value cannot be larger than 1023 GB - DiskSizeGB *int32 `json:"diskSizeGB,omitempty"` - // Image - The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist. - Image *VirtualHardDisk `json:"image,omitempty"` - // VhdContainers - The list of virtual hard disk container uris. - VhdContainers *[]string `json:"vhdContainers,omitempty"` - // ManagedDisk - The managed disk parameters. - ManagedDisk *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"` - // DeleteOption - Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion (This feature is available for VMSS with Flexible OrchestrationMode only).

    Possible values:

    **Delete** If this value is used, the OS disk is deleted when VMSS Flex VM is deleted.

    **Detach** If this value is used, the OS disk is retained after VMSS Flex VM is deleted.

    The default value is set to **Delete**. For an Ephemeral OS Disk, the default value is set to **Delete**. User cannot change the delete option for Ephemeral OS Disk. Possible values include: 'DiskDeleteOptionTypesDelete', 'DiskDeleteOptionTypesDetach' - DeleteOption DiskDeleteOptionTypes `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetUpdateOSProfile describes a virtual machine scale set OS profile. -type VirtualMachineScaleSetUpdateOSProfile struct { - // CustomData - A base-64 encoded string of custom data. - CustomData *string `json:"customData,omitempty"` - // WindowsConfiguration - The Windows Configuration of the OS profile. - WindowsConfiguration *WindowsConfiguration `json:"windowsConfiguration,omitempty"` - // LinuxConfiguration - The Linux Configuration of the OS profile. - LinuxConfiguration *LinuxConfiguration `json:"linuxConfiguration,omitempty"` - // Secrets - The List of certificates for addition to the VM. - Secrets *[]VaultSecretGroup `json:"secrets,omitempty"` -} - -// VirtualMachineScaleSetUpdateProperties describes the properties of a Virtual Machine Scale Set. -type VirtualMachineScaleSetUpdateProperties struct { - // UpgradePolicy - The upgrade policy. - UpgradePolicy *UpgradePolicy `json:"upgradePolicy,omitempty"` - // AutomaticRepairsPolicy - Policy for automatic repairs. - AutomaticRepairsPolicy *AutomaticRepairsPolicy `json:"automaticRepairsPolicy,omitempty"` - // VirtualMachineProfile - The virtual machine profile. - VirtualMachineProfile *VirtualMachineScaleSetUpdateVMProfile `json:"virtualMachineProfile,omitempty"` - // Overprovision - Specifies whether the Virtual Machine Scale Set should be overprovisioned. - Overprovision *bool `json:"overprovision,omitempty"` - // DoNotRunExtensionsOnOverprovisionedVMs - When Overprovision is enabled, extensions are launched only on the requested number of VMs which are finally kept. This property will hence ensure that the extensions do not run on the extra overprovisioned VMs. - DoNotRunExtensionsOnOverprovisionedVMs *bool `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"` - // SinglePlacementGroup - When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true. - SinglePlacementGroup *bool `json:"singlePlacementGroup,omitempty"` - // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines have the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` - // ScaleInPolicy - Specifies the policies applied when scaling in Virtual Machines in the Virtual Machine Scale Set. - ScaleInPolicy *ScaleInPolicy `json:"scaleInPolicy,omitempty"` - // ProximityPlacementGroup - Specifies information about the proximity placement group that the virtual machine scale set should be assigned to.

    Minimum api-version: 2018-04-01. - ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"` -} - -// VirtualMachineScaleSetUpdatePublicIPAddressConfiguration describes a virtual machines scale set IP -// Configuration's PublicIPAddress configuration -type VirtualMachineScaleSetUpdatePublicIPAddressConfiguration struct { - // Name - The publicIP address configuration name. - Name *string `json:"name,omitempty"` - *VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties `json:"properties,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetUpdatePublicIPAddressConfiguration. -func (vmssupiac VirtualMachineScaleSetUpdatePublicIPAddressConfiguration) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssupiac.Name != nil { - objectMap["name"] = vmssupiac.Name - } - if vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties != nil { - objectMap["properties"] = vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetUpdatePublicIPAddressConfiguration struct. -func (vmssupiac *VirtualMachineScaleSetUpdatePublicIPAddressConfiguration) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssupiac.Name = &name - } - case "properties": - if v != nil { - var virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties) - if err != nil { - return err - } - vmssupiac.VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties = &virtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties - } - } - } - - return nil -} - -// VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties describes a virtual machines scale -// set IP Configuration's PublicIPAddress configuration -type VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties struct { - // IdleTimeoutInMinutes - The idle timeout of the public IP address. - IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"` - // DNSSettings - The dns settings to be applied on the publicIP addresses . - DNSSettings *VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings `json:"dnsSettings,omitempty"` - // PublicIPPrefix - The PublicIPPrefix from which to allocate publicIP addresses. - PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"` - // DeleteOption - Specify what happens to the public IP when the VM is deleted. Possible values include: 'Delete', 'Detach' - DeleteOption DeleteOptions `json:"deleteOption,omitempty"` -} - -// VirtualMachineScaleSetUpdateStorageProfile describes a virtual machine scale set storage profile. -type VirtualMachineScaleSetUpdateStorageProfile struct { - // ImageReference - The image reference. - ImageReference *ImageReference `json:"imageReference,omitempty"` - // OsDisk - The OS disk. - OsDisk *VirtualMachineScaleSetUpdateOSDisk `json:"osDisk,omitempty"` - // DataDisks - The data disks. - DataDisks *[]VirtualMachineScaleSetDataDisk `json:"dataDisks,omitempty"` -} - -// VirtualMachineScaleSetUpdateVMProfile describes a virtual machine scale set virtual machine profile. -type VirtualMachineScaleSetUpdateVMProfile struct { - // OsProfile - The virtual machine scale set OS profile. - OsProfile *VirtualMachineScaleSetUpdateOSProfile `json:"osProfile,omitempty"` - // StorageProfile - The virtual machine scale set storage profile. - StorageProfile *VirtualMachineScaleSetUpdateStorageProfile `json:"storageProfile,omitempty"` - // NetworkProfile - The virtual machine scale set network profile. - NetworkProfile *VirtualMachineScaleSetUpdateNetworkProfile `json:"networkProfile,omitempty"` - // SecurityProfile - The virtual machine scale set Security profile - SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` - // DiagnosticsProfile - The virtual machine scale set diagnostics profile. - DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` - // ExtensionProfile - The virtual machine scale set extension profile. - ExtensionProfile *VirtualMachineScaleSetExtensionProfile `json:"extensionProfile,omitempty"` - // LicenseType - The license type, which is for bring your own license scenario. - LicenseType *string `json:"licenseType,omitempty"` - // BillingProfile - Specifies the billing related details of a Azure Spot VMSS.

    Minimum api-version: 2019-03-01. - BillingProfile *BillingProfile `json:"billingProfile,omitempty"` - // ScheduledEventsProfile - Specifies Scheduled Event related configurations. - ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` - // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 - UserData *string `json:"userData,omitempty"` -} - -// VirtualMachineScaleSetVM describes a virtual machine scale set virtual machine. -type VirtualMachineScaleSetVM struct { - autorest.Response `json:"-"` - // InstanceID - READ-ONLY; The virtual machine instance ID. - InstanceID *string `json:"instanceId,omitempty"` - // Sku - READ-ONLY; The virtual machine SKU. - Sku *Sku `json:"sku,omitempty"` - *VirtualMachineScaleSetVMProperties `json:"properties,omitempty"` - // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - Plan *Plan `json:"plan,omitempty"` - // Resources - READ-ONLY; The virtual machine child extension resources. - Resources *[]VirtualMachineExtension `json:"resources,omitempty"` - // Zones - READ-ONLY; The virtual machine zones. - Zones *[]string `json:"zones,omitempty"` - // Identity - The identity of the virtual machine, if configured. - Identity *VirtualMachineIdentity `json:"identity,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - // Location - Resource location - Location *string `json:"location,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVM. -func (vmssv VirtualMachineScaleSetVM) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssv.VirtualMachineScaleSetVMProperties != nil { - objectMap["properties"] = vmssv.VirtualMachineScaleSetVMProperties - } - if vmssv.Plan != nil { - objectMap["plan"] = vmssv.Plan - } - if vmssv.Identity != nil { - objectMap["identity"] = vmssv.Identity - } - if vmssv.Location != nil { - objectMap["location"] = vmssv.Location - } - if vmssv.Tags != nil { - objectMap["tags"] = vmssv.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVM struct. -func (vmssv *VirtualMachineScaleSetVM) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "instanceId": - if v != nil { - var instanceID string - err = json.Unmarshal(*v, &instanceID) - if err != nil { - return err - } - vmssv.InstanceID = &instanceID - } - case "sku": - if v != nil { - var sku Sku - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - vmssv.Sku = &sku - } - case "properties": - if v != nil { - var virtualMachineScaleSetVMProperties VirtualMachineScaleSetVMProperties - err = json.Unmarshal(*v, &virtualMachineScaleSetVMProperties) - if err != nil { - return err - } - vmssv.VirtualMachineScaleSetVMProperties = &virtualMachineScaleSetVMProperties - } - case "plan": - if v != nil { - var plan Plan - err = json.Unmarshal(*v, &plan) - if err != nil { - return err - } - vmssv.Plan = &plan - } - case "resources": - if v != nil { - var resources []VirtualMachineExtension - err = json.Unmarshal(*v, &resources) - if err != nil { - return err - } - vmssv.Resources = &resources - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - vmssv.Zones = &zones - } - case "identity": - if v != nil { - var identity VirtualMachineIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - vmssv.Identity = &identity - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssv.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssv.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmssv.Type = &typeVar - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - vmssv.Location = &location - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmssv.Tags = tags - } - } - } - - return nil -} - -// VirtualMachineScaleSetVMExtension describes a VMSS VM Extension. -type VirtualMachineScaleSetVMExtension struct { - autorest.Response `json:"-"` - // Name - READ-ONLY; The name of the extension. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *VirtualMachineExtensionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtension. -func (vmssve VirtualMachineScaleSetVMExtension) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssve.VirtualMachineExtensionProperties != nil { - objectMap["properties"] = vmssve.VirtualMachineExtensionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVMExtension struct. -func (vmssve *VirtualMachineScaleSetVMExtension) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssve.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmssve.Type = &typeVar - } - case "properties": - if v != nil { - var virtualMachineExtensionProperties VirtualMachineExtensionProperties - err = json.Unmarshal(*v, &virtualMachineExtensionProperties) - if err != nil { - return err - } - vmssve.VirtualMachineExtensionProperties = &virtualMachineExtensionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssve.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMExtensionsClient) (VirtualMachineScaleSetVMExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture.Result. -func (future *VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (vmssve VirtualMachineScaleSetVMExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmssve.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmssve.Response.Response, err = future.GetResult(sender); err == nil && vmssve.Response.Response.StatusCode != http.StatusNoContent { - vmssve, err = client.CreateOrUpdateResponder(vmssve.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture", "Result", vmssve.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetVMExtensionsDeleteFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineScaleSetVMExtensionsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMExtensionsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMExtensionsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMExtensionsDeleteFuture.Result. -func (future *VirtualMachineScaleSetVMExtensionsDeleteFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMExtensionsListResult the List VMSS VM Extension operation response -type VirtualMachineScaleSetVMExtensionsListResult struct { - autorest.Response `json:"-"` - // Value - The list of VMSS VM extensions - Value *[]VirtualMachineScaleSetVMExtension `json:"value,omitempty"` -} - -// VirtualMachineScaleSetVMExtensionsSummary extensions summary for virtual machines of a virtual machine -// scale set. -type VirtualMachineScaleSetVMExtensionsSummary struct { - // Name - READ-ONLY; The extension name. - Name *string `json:"name,omitempty"` - // StatusesSummary - READ-ONLY; The extensions information. - StatusesSummary *[]VirtualMachineStatusCodeCount `json:"statusesSummary,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtensionsSummary. -func (vmssves VirtualMachineScaleSetVMExtensionsSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetVMExtensionsUpdateFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineScaleSetVMExtensionsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMExtensionsClient) (VirtualMachineScaleSetVMExtension, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMExtensionsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMExtensionsUpdateFuture.Result. -func (future *VirtualMachineScaleSetVMExtensionsUpdateFuture) result(client VirtualMachineScaleSetVMExtensionsClient) (vmssve VirtualMachineScaleSetVMExtension, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmssve.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMExtensionsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmssve.Response.Response, err = future.GetResult(sender); err == nil && vmssve.Response.Response.StatusCode != http.StatusNoContent { - vmssve, err = client.UpdateResponder(vmssve.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsUpdateFuture", "Result", vmssve.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetVMExtensionUpdate describes a VMSS VM Extension. -type VirtualMachineScaleSetVMExtensionUpdate struct { - // Name - READ-ONLY; The name of the extension. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type - Type *string `json:"type,omitempty"` - *VirtualMachineExtensionUpdateProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id - ID *string `json:"id,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMExtensionUpdate. -func (vmssveu VirtualMachineScaleSetVMExtensionUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssveu.VirtualMachineExtensionUpdateProperties != nil { - objectMap["properties"] = vmssveu.VirtualMachineExtensionUpdateProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineScaleSetVMExtensionUpdate struct. -func (vmssveu *VirtualMachineScaleSetVMExtensionUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - vmssveu.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - vmssveu.Type = &typeVar - } - case "properties": - if v != nil { - var virtualMachineExtensionUpdateProperties VirtualMachineExtensionUpdateProperties - err = json.Unmarshal(*v, &virtualMachineExtensionUpdateProperties) - if err != nil { - return err - } - vmssveu.VirtualMachineExtensionUpdateProperties = &virtualMachineExtensionUpdateProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - vmssveu.ID = &ID - } - } - } - - return nil -} - -// VirtualMachineScaleSetVMInstanceIDs specifies a list of virtual machine instance IDs from the VM scale -// set. -type VirtualMachineScaleSetVMInstanceIDs struct { - // InstanceIds - The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set. - InstanceIds *[]string `json:"instanceIds,omitempty"` -} - -// VirtualMachineScaleSetVMInstanceRequiredIDs specifies a list of virtual machine instance IDs from the VM -// scale set. -type VirtualMachineScaleSetVMInstanceRequiredIDs struct { - // InstanceIds - The virtual machine scale set instance ids. - InstanceIds *[]string `json:"instanceIds,omitempty"` -} - -// VirtualMachineScaleSetVMInstanceView the instance view of a virtual machine scale set VM. -type VirtualMachineScaleSetVMInstanceView struct { - autorest.Response `json:"-"` - // PlatformUpdateDomain - The Update Domain count. - PlatformUpdateDomain *int32 `json:"platformUpdateDomain,omitempty"` - // PlatformFaultDomain - The Fault Domain count. - PlatformFaultDomain *int32 `json:"platformFaultDomain,omitempty"` - // RdpThumbPrint - The Remote desktop certificate thumbprint. - RdpThumbPrint *string `json:"rdpThumbPrint,omitempty"` - // VMAgent - The VM Agent running on the virtual machine. - VMAgent *VirtualMachineAgentInstanceView `json:"vmAgent,omitempty"` - // MaintenanceRedeployStatus - The Maintenance Operation status on the virtual machine. - MaintenanceRedeployStatus *MaintenanceRedeployStatus `json:"maintenanceRedeployStatus,omitempty"` - // Disks - The disks information. - Disks *[]DiskInstanceView `json:"disks,omitempty"` - // Extensions - The extensions information. - Extensions *[]VirtualMachineExtensionInstanceView `json:"extensions,omitempty"` - // VMHealth - READ-ONLY; The health status for the VM. - VMHealth *VirtualMachineHealthStatus `json:"vmHealth,omitempty"` - // BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status.

    You can easily view the output of your console log.

    Azure also enables you to see a screenshot of the VM from the hypervisor. - BootDiagnostics *BootDiagnosticsInstanceView `json:"bootDiagnostics,omitempty"` - // Statuses - The resource status information. - Statuses *[]InstanceViewStatus `json:"statuses,omitempty"` - // AssignedHost - READ-ONLY; Resource id of the dedicated host, on which the virtual machine is allocated through automatic placement, when the virtual machine is associated with a dedicated host group that has automatic placement enabled.

    Minimum api-version: 2020-06-01. - AssignedHost *string `json:"assignedHost,omitempty"` - // PlacementGroupID - The placement group in which the VM is running. If the VM is deallocated it will not have a placementGroupId. - PlacementGroupID *string `json:"placementGroupId,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMInstanceView. -func (vmssviv VirtualMachineScaleSetVMInstanceView) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssviv.PlatformUpdateDomain != nil { - objectMap["platformUpdateDomain"] = vmssviv.PlatformUpdateDomain - } - if vmssviv.PlatformFaultDomain != nil { - objectMap["platformFaultDomain"] = vmssviv.PlatformFaultDomain - } - if vmssviv.RdpThumbPrint != nil { - objectMap["rdpThumbPrint"] = vmssviv.RdpThumbPrint - } - if vmssviv.VMAgent != nil { - objectMap["vmAgent"] = vmssviv.VMAgent - } - if vmssviv.MaintenanceRedeployStatus != nil { - objectMap["maintenanceRedeployStatus"] = vmssviv.MaintenanceRedeployStatus - } - if vmssviv.Disks != nil { - objectMap["disks"] = vmssviv.Disks - } - if vmssviv.Extensions != nil { - objectMap["extensions"] = vmssviv.Extensions - } - if vmssviv.BootDiagnostics != nil { - objectMap["bootDiagnostics"] = vmssviv.BootDiagnostics - } - if vmssviv.Statuses != nil { - objectMap["statuses"] = vmssviv.Statuses - } - if vmssviv.PlacementGroupID != nil { - objectMap["placementGroupId"] = vmssviv.PlacementGroupID - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetVMListResult the List Virtual Machine Scale Set VMs operation response. -type VirtualMachineScaleSetVMListResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machine scale sets VMs. - Value *[]VirtualMachineScaleSetVM `json:"value,omitempty"` - // NextLink - The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs - NextLink *string `json:"nextLink,omitempty"` -} - -// VirtualMachineScaleSetVMListResultIterator provides access to a complete listing of -// VirtualMachineScaleSetVM values. -type VirtualMachineScaleSetVMListResultIterator struct { - i int - page VirtualMachineScaleSetVMListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *VirtualMachineScaleSetVMListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *VirtualMachineScaleSetVMListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter VirtualMachineScaleSetVMListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter VirtualMachineScaleSetVMListResultIterator) Response() VirtualMachineScaleSetVMListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter VirtualMachineScaleSetVMListResultIterator) Value() VirtualMachineScaleSetVM { - if !iter.page.NotDone() { - return VirtualMachineScaleSetVM{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the VirtualMachineScaleSetVMListResultIterator type. -func NewVirtualMachineScaleSetVMListResultIterator(page VirtualMachineScaleSetVMListResultPage) VirtualMachineScaleSetVMListResultIterator { - return VirtualMachineScaleSetVMListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (vmssvlr VirtualMachineScaleSetVMListResult) IsEmpty() bool { - return vmssvlr.Value == nil || len(*vmssvlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (vmssvlr VirtualMachineScaleSetVMListResult) hasNextLink() bool { - return vmssvlr.NextLink != nil && len(*vmssvlr.NextLink) != 0 -} - -// virtualMachineScaleSetVMListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (vmssvlr VirtualMachineScaleSetVMListResult) virtualMachineScaleSetVMListResultPreparer(ctx context.Context) (*http.Request, error) { - if !vmssvlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(vmssvlr.NextLink))) -} - -// VirtualMachineScaleSetVMListResultPage contains a page of VirtualMachineScaleSetVM values. -type VirtualMachineScaleSetVMListResultPage struct { - fn func(context.Context, VirtualMachineScaleSetVMListResult) (VirtualMachineScaleSetVMListResult, error) - vmssvlr VirtualMachineScaleSetVMListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *VirtualMachineScaleSetVMListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.vmssvlr) - if err != nil { - return err - } - page.vmssvlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *VirtualMachineScaleSetVMListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page VirtualMachineScaleSetVMListResultPage) NotDone() bool { - return !page.vmssvlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page VirtualMachineScaleSetVMListResultPage) Response() VirtualMachineScaleSetVMListResult { - return page.vmssvlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page VirtualMachineScaleSetVMListResultPage) Values() []VirtualMachineScaleSetVM { - if page.vmssvlr.IsEmpty() { - return nil - } - return *page.vmssvlr.Value -} - -// Creates a new instance of the VirtualMachineScaleSetVMListResultPage type. -func NewVirtualMachineScaleSetVMListResultPage(cur VirtualMachineScaleSetVMListResult, getNextPage func(context.Context, VirtualMachineScaleSetVMListResult) (VirtualMachineScaleSetVMListResult, error)) VirtualMachineScaleSetVMListResultPage { - return VirtualMachineScaleSetVMListResultPage{ - fn: getNextPage, - vmssvlr: cur, - } -} - -// VirtualMachineScaleSetVMNetworkProfileConfiguration describes a virtual machine scale set VM network -// profile. -type VirtualMachineScaleSetVMNetworkProfileConfiguration struct { - // NetworkInterfaceConfigurations - The list of network configurations. - NetworkInterfaceConfigurations *[]VirtualMachineScaleSetNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"` -} - -// VirtualMachineScaleSetVMProfile describes a virtual machine scale set virtual machine profile. -type VirtualMachineScaleSetVMProfile struct { - // OsProfile - Specifies the operating system settings for the virtual machines in the scale set. - OsProfile *VirtualMachineScaleSetOSProfile `json:"osProfile,omitempty"` - // StorageProfile - Specifies the storage settings for the virtual machine disks. - StorageProfile *VirtualMachineScaleSetStorageProfile `json:"storageProfile,omitempty"` - // NetworkProfile - Specifies properties of the network interfaces of the virtual machines in the scale set. - NetworkProfile *VirtualMachineScaleSetNetworkProfile `json:"networkProfile,omitempty"` - // SecurityProfile - Specifies the Security related profile settings for the virtual machines in the scale set. - SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` - // DiagnosticsProfile - Specifies the boot diagnostic settings state.

    Minimum api-version: 2015-06-15. - DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` - // ExtensionProfile - Specifies a collection of settings for extensions installed on virtual machines in the scale set. - ExtensionProfile *VirtualMachineScaleSetExtensionProfile `json:"extensionProfile,omitempty"` - // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

    Possible values for Windows Server operating system are:

    Windows_Client

    Windows_Server

    Possible values for Linux Server operating system are:

    RHEL_BYOS (for RHEL)

    SLES_BYOS (for SUSE)

    For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

    [Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

    Minimum api-version: 2015-06-15 - LicenseType *string `json:"licenseType,omitempty"` - // Priority - Specifies the priority for the virtual machines in the scale set.

    Minimum api-version: 2017-10-30-preview. Possible values include: 'Regular', 'Low', 'Spot' - Priority VirtualMachinePriorityTypes `json:"priority,omitempty"` - // EvictionPolicy - Specifies the eviction policy for the Azure Spot virtual machine and Azure Spot scale set.

    For Azure Spot virtual machines, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.

    For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported and the minimum api-version is 2017-10-30-preview. Possible values include: 'VirtualMachineEvictionPolicyTypesDeallocate', 'VirtualMachineEvictionPolicyTypesDelete' - EvictionPolicy VirtualMachineEvictionPolicyTypes `json:"evictionPolicy,omitempty"` - // BillingProfile - Specifies the billing related details of a Azure Spot VMSS.

    Minimum api-version: 2019-03-01. - BillingProfile *BillingProfile `json:"billingProfile,omitempty"` - // ScheduledEventsProfile - Specifies Scheduled Event related configurations. - ScheduledEventsProfile *ScheduledEventsProfile `json:"scheduledEventsProfile,omitempty"` - // UserData - UserData for the virtual machines in the scale set, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 - UserData *string `json:"userData,omitempty"` - // CapacityReservation - Specifies the capacity reservation related details of a scale set.

    Minimum api-version: 2021-04-01. - CapacityReservation *CapacityReservationProfile `json:"capacityReservation,omitempty"` - // ApplicationProfile - Specifies the gallery applications that should be made available to the VM/VMSS - ApplicationProfile *ApplicationProfile `json:"applicationProfile,omitempty"` - // HardwareProfile - Specifies the hardware profile related details of a scale set.

    Minimum api-version: 2022-03-01. - HardwareProfile *VirtualMachineScaleSetHardwareProfile `json:"hardwareProfile,omitempty"` -} - -// VirtualMachineScaleSetVMProperties describes the properties of a virtual machine scale set virtual -// machine. -type VirtualMachineScaleSetVMProperties struct { - // LatestModelApplied - READ-ONLY; Specifies whether the latest model has been applied to the virtual machine. - LatestModelApplied *bool `json:"latestModelApplied,omitempty"` - // VMID - READ-ONLY; Azure VM unique ID. - VMID *string `json:"vmId,omitempty"` - // InstanceView - READ-ONLY; The virtual machine instance view. - InstanceView *VirtualMachineScaleSetVMInstanceView `json:"instanceView,omitempty"` - // HardwareProfile - Specifies the hardware settings for the virtual machine. - HardwareProfile *HardwareProfile `json:"hardwareProfile,omitempty"` - // StorageProfile - Specifies the storage settings for the virtual machine disks. - StorageProfile *StorageProfile `json:"storageProfile,omitempty"` - // AdditionalCapabilities - Specifies additional capabilities enabled or disabled on the virtual machine in the scale set. For instance: whether the virtual machine has the capability to support attaching managed data disks with UltraSSD_LRS storage account type. - AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"` - // OsProfile - Specifies the operating system settings for the virtual machine. - OsProfile *OSProfile `json:"osProfile,omitempty"` - // SecurityProfile - Specifies the Security related profile settings for the virtual machine. - SecurityProfile *SecurityProfile `json:"securityProfile,omitempty"` - // NetworkProfile - Specifies the network interfaces of the virtual machine. - NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"` - // NetworkProfileConfiguration - Specifies the network profile configuration of the virtual machine. - NetworkProfileConfiguration *VirtualMachineScaleSetVMNetworkProfileConfiguration `json:"networkProfileConfiguration,omitempty"` - // DiagnosticsProfile - Specifies the boot diagnostic settings state.

    Minimum api-version: 2015-06-15. - DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"` - // AvailabilitySet - Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Availability sets overview](https://docs.microsoft.com/azure/virtual-machines/availability-set-overview).

    For more information on Azure planned maintenance, see [Maintenance and updates for Virtual Machines in Azure](https://docs.microsoft.com/azure/virtual-machines/maintenance-and-updates)

    Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set. - AvailabilitySet *SubResource `json:"availabilitySet,omitempty"` - // ProvisioningState - READ-ONLY; The provisioning state, which only appears in the response. - ProvisioningState *string `json:"provisioningState,omitempty"` - // LicenseType - Specifies that the image or disk that is being used was licensed on-premises.

    Possible values for Windows Server operating system are:

    Windows_Client

    Windows_Server

    Possible values for Linux Server operating system are:

    RHEL_BYOS (for RHEL)

    SLES_BYOS (for SUSE)

    For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)

    [Azure Hybrid Use Benefit for Linux Server](https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)

    Minimum api-version: 2015-06-15 - LicenseType *string `json:"licenseType,omitempty"` - // ModelDefinitionApplied - READ-ONLY; Specifies whether the model applied to the virtual machine is the model of the virtual machine scale set or the customized model for the virtual machine. - ModelDefinitionApplied *string `json:"modelDefinitionApplied,omitempty"` - // ProtectionPolicy - Specifies the protection policy of the virtual machine. - ProtectionPolicy *VirtualMachineScaleSetVMProtectionPolicy `json:"protectionPolicy,omitempty"` - // UserData - UserData for the VM, which must be base-64 encoded. Customer should not pass any secrets in here.

    Minimum api-version: 2021-03-01 - UserData *string `json:"userData,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineScaleSetVMProperties. -func (vmssvp VirtualMachineScaleSetVMProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmssvp.HardwareProfile != nil { - objectMap["hardwareProfile"] = vmssvp.HardwareProfile - } - if vmssvp.StorageProfile != nil { - objectMap["storageProfile"] = vmssvp.StorageProfile - } - if vmssvp.AdditionalCapabilities != nil { - objectMap["additionalCapabilities"] = vmssvp.AdditionalCapabilities - } - if vmssvp.OsProfile != nil { - objectMap["osProfile"] = vmssvp.OsProfile - } - if vmssvp.SecurityProfile != nil { - objectMap["securityProfile"] = vmssvp.SecurityProfile - } - if vmssvp.NetworkProfile != nil { - objectMap["networkProfile"] = vmssvp.NetworkProfile - } - if vmssvp.NetworkProfileConfiguration != nil { - objectMap["networkProfileConfiguration"] = vmssvp.NetworkProfileConfiguration - } - if vmssvp.DiagnosticsProfile != nil { - objectMap["diagnosticsProfile"] = vmssvp.DiagnosticsProfile - } - if vmssvp.AvailabilitySet != nil { - objectMap["availabilitySet"] = vmssvp.AvailabilitySet - } - if vmssvp.LicenseType != nil { - objectMap["licenseType"] = vmssvp.LicenseType - } - if vmssvp.ProtectionPolicy != nil { - objectMap["protectionPolicy"] = vmssvp.ProtectionPolicy - } - if vmssvp.UserData != nil { - objectMap["userData"] = vmssvp.UserData - } - return json.Marshal(objectMap) -} - -// VirtualMachineScaleSetVMProtectionPolicy the protection policy of a virtual machine scale set VM. -type VirtualMachineScaleSetVMProtectionPolicy struct { - // ProtectFromScaleIn - Indicates that the virtual machine scale set VM shouldn't be considered for deletion during a scale-in operation. - ProtectFromScaleIn *bool `json:"protectFromScaleIn,omitempty"` - // ProtectFromScaleSetActions - Indicates that model updates or actions (including scale-in) initiated on the virtual machine scale set should not be applied to the virtual machine scale set VM. - ProtectFromScaleSetActions *bool `json:"protectFromScaleSetActions,omitempty"` -} - -// VirtualMachineScaleSetVMReimageParameters describes a Virtual Machine Scale Set VM Reimage Parameters. -type VirtualMachineScaleSetVMReimageParameters struct { - // TempDisk - Specifies whether to reimage temp disk. Default value: false. Note: This temp disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk. - TempDisk *bool `json:"tempDisk,omitempty"` -} - -// VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMRunCommandsClient) (VirtualMachineRunCommand, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture.Result. -func (future *VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmrc.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { - vmrc, err = client.CreateOrUpdateResponder(vmrc.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetVMRunCommandsDeleteFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineScaleSetVMRunCommandsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMRunCommandsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMRunCommandsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMRunCommandsDeleteFuture.Result. -func (future *VirtualMachineScaleSetVMRunCommandsDeleteFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMRunCommandsUpdateFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. -type VirtualMachineScaleSetVMRunCommandsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMRunCommandsClient) (VirtualMachineRunCommand, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMRunCommandsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMRunCommandsUpdateFuture.Result. -func (future *VirtualMachineScaleSetVMRunCommandsUpdateFuture) result(client VirtualMachineScaleSetVMRunCommandsClient) (vmrc VirtualMachineRunCommand, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmrc.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmrc.Response.Response, err = future.GetResult(sender); err == nil && vmrc.Response.Response.StatusCode != http.StatusNoContent { - vmrc, err = client.UpdateResponder(vmrc.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsUpdateFuture", "Result", vmrc.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetVMsDeallocateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsDeallocateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsDeallocateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsDeallocateFuture.Result. -func (future *VirtualMachineScaleSetVMsDeallocateFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsDeallocateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsDeallocateFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsDeleteFuture.Result. -func (future *VirtualMachineScaleSetVMsDeleteFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsPerformMaintenanceFuture an abstraction for monitoring and retrieving the -// results of a long-running operation. -type VirtualMachineScaleSetVMsPerformMaintenanceFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsPerformMaintenanceFuture.Result. -func (future *VirtualMachineScaleSetVMsPerformMaintenanceFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsPerformMaintenanceFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsPowerOffFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsPowerOffFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsPowerOffFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsPowerOffFuture.Result. -func (future *VirtualMachineScaleSetVMsPowerOffFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsPowerOffFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsPowerOffFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsRedeployFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsRedeployFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsRedeployFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsRedeployFuture.Result. -func (future *VirtualMachineScaleSetVMsRedeployFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRedeployFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRedeployFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsReimageAllFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsReimageAllFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsReimageAllFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsReimageAllFuture.Result. -func (future *VirtualMachineScaleSetVMsReimageAllFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsReimageAllFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsReimageAllFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsReimageFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsReimageFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsReimageFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsReimageFuture.Result. -func (future *VirtualMachineScaleSetVMsReimageFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsReimageFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsReimageFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsRestartFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsRestartFuture.Result. -func (future *VirtualMachineScaleSetVMsRestartFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsRunCommandFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsRunCommandFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (RunCommandResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsRunCommandFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsRunCommandFuture.Result. -func (future *VirtualMachineScaleSetVMsRunCommandFuture) result(client VirtualMachineScaleSetVMsClient) (rcr RunCommandResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRunCommandFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - rcr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsRunCommandFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if rcr.Response.Response, err = future.GetResult(sender); err == nil && rcr.Response.Response.StatusCode != http.StatusNoContent { - rcr, err = client.RunCommandResponder(rcr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsRunCommandFuture", "Result", rcr.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineScaleSetVMsStartFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsStartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsStartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsStartFuture.Result. -func (future *VirtualMachineScaleSetVMsStartFuture) result(client VirtualMachineScaleSetVMsClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsStartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsStartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineScaleSetVMsUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachineScaleSetVMsUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachineScaleSetVMsClient) (VirtualMachineScaleSetVM, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachineScaleSetVMsUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachineScaleSetVMsUpdateFuture.Result. -func (future *VirtualMachineScaleSetVMsUpdateFuture) result(client VirtualMachineScaleSetVMsClient) (vmssv VirtualMachineScaleSetVM, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmssv.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachineScaleSetVMsUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmssv.Response.Response, err = future.GetResult(sender); err == nil && vmssv.Response.Response.StatusCode != http.StatusNoContent { - vmssv, err = client.UpdateResponder(vmssv.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsUpdateFuture", "Result", vmssv.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachinesCaptureFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesCaptureFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (VirtualMachineCaptureResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesCaptureFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesCaptureFuture.Result. -func (future *VirtualMachinesCaptureFuture) result(client VirtualMachinesClient) (vmcr VirtualMachineCaptureResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCaptureFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmcr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesCaptureFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmcr.Response.Response, err = future.GetResult(sender); err == nil && vmcr.Response.Response.StatusCode != http.StatusNoContent { - vmcr, err = client.CaptureResponder(vmcr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCaptureFuture", "Result", vmcr.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachinesConvertToManagedDisksFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesConvertToManagedDisksFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesConvertToManagedDisksFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesConvertToManagedDisksFuture.Result. -func (future *VirtualMachinesConvertToManagedDisksFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesConvertToManagedDisksFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesConvertToManagedDisksFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesCreateOrUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (VirtualMachine, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesCreateOrUpdateFuture.Result. -func (future *VirtualMachinesCreateOrUpdateFuture) result(client VirtualMachinesClient) (VM VirtualMachine, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - VM.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesCreateOrUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if VM.Response.Response, err = future.GetResult(sender); err == nil && VM.Response.Response.StatusCode != http.StatusNoContent { - VM, err = client.CreateOrUpdateResponder(VM.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesCreateOrUpdateFuture", "Result", VM.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachinesDeallocateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesDeallocateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesDeallocateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesDeallocateFuture.Result. -func (future *VirtualMachinesDeallocateFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesDeallocateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesDeallocateFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesDeleteFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesDeleteFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesDeleteFuture.Result. -func (future *VirtualMachinesDeleteFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesDeleteFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesDeleteFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesInstallPatchesFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesInstallPatchesFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (VirtualMachineInstallPatchesResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesInstallPatchesFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesInstallPatchesFuture.Result. -func (future *VirtualMachinesInstallPatchesFuture) result(client VirtualMachinesClient) (vmipr VirtualMachineInstallPatchesResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesInstallPatchesFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - vmipr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesInstallPatchesFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if vmipr.Response.Response, err = future.GetResult(sender); err == nil && vmipr.Response.Response.StatusCode != http.StatusNoContent { - vmipr, err = client.InstallPatchesResponder(vmipr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesInstallPatchesFuture", "Result", vmipr.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineSize describes the properties of a VM size. -type VirtualMachineSize struct { - // Name - The name of the virtual machine size. - Name *string `json:"name,omitempty"` - // NumberOfCores - The number of cores supported by the virtual machine size. For Constrained vCPU capable VM sizes, this number represents the total vCPUs of quota that the VM uses. For accurate vCPU count, please refer to https://docs.microsoft.com/azure/virtual-machines/constrained-vcpu or https://docs.microsoft.com/rest/api/compute/resourceskus/list - NumberOfCores *int32 `json:"numberOfCores,omitempty"` - // OsDiskSizeInMB - The OS disk size, in MB, allowed by the virtual machine size. - OsDiskSizeInMB *int32 `json:"osDiskSizeInMB,omitempty"` - // ResourceDiskSizeInMB - The resource disk size, in MB, allowed by the virtual machine size. - ResourceDiskSizeInMB *int32 `json:"resourceDiskSizeInMB,omitempty"` - // MemoryInMB - The amount of memory, in MB, supported by the virtual machine size. - MemoryInMB *int32 `json:"memoryInMB,omitempty"` - // MaxDataDiskCount - The maximum number of data disks that can be attached to the virtual machine size. - MaxDataDiskCount *int32 `json:"maxDataDiskCount,omitempty"` -} - -// VirtualMachineSizeListResult the List Virtual Machine operation response. -type VirtualMachineSizeListResult struct { - autorest.Response `json:"-"` - // Value - The list of virtual machine sizes. - Value *[]VirtualMachineSize `json:"value,omitempty"` -} - -// VirtualMachineSoftwarePatchProperties describes the properties of a Virtual Machine software patch. -type VirtualMachineSoftwarePatchProperties struct { - // PatchID - READ-ONLY; A unique identifier for the patch. - PatchID *string `json:"patchId,omitempty"` - // Name - READ-ONLY; The friendly name of the patch. - Name *string `json:"name,omitempty"` - // Version - READ-ONLY; The version number of the patch. This property applies only to Linux patches. - Version *string `json:"version,omitempty"` - // KbID - READ-ONLY; The KBID of the patch. Only applies to Windows patches. - KbID *string `json:"kbId,omitempty"` - // Classifications - READ-ONLY; The classification(s) of the patch as provided by the patch publisher. - Classifications *[]string `json:"classifications,omitempty"` - // RebootBehavior - READ-ONLY; Describes the reboot requirements of the patch. Possible values include: 'VMGuestPatchRebootBehaviorUnknown', 'VMGuestPatchRebootBehaviorNeverReboots', 'VMGuestPatchRebootBehaviorAlwaysRequiresReboot', 'VMGuestPatchRebootBehaviorCanRequestReboot' - RebootBehavior VMGuestPatchRebootBehavior `json:"rebootBehavior,omitempty"` - // ActivityID - READ-ONLY; The activity ID of the operation that produced this result. It is used to correlate across CRP and extension logs. - ActivityID *string `json:"activityId,omitempty"` - // PublishedDate - READ-ONLY; The UTC timestamp when the repository published this patch. - PublishedDate *date.Time `json:"publishedDate,omitempty"` - // LastModifiedDateTime - READ-ONLY; The UTC timestamp of the last update to this patch record. - LastModifiedDateTime *date.Time `json:"lastModifiedDateTime,omitempty"` - // AssessmentState - READ-ONLY; Describes the availability of a given patch. Possible values include: 'PatchAssessmentStateUnknown', 'PatchAssessmentStateAvailable' - AssessmentState PatchAssessmentState `json:"assessmentState,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineSoftwarePatchProperties. -func (vmspp VirtualMachineSoftwarePatchProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachinesPerformMaintenanceFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesPerformMaintenanceFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesPerformMaintenanceFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesPerformMaintenanceFuture.Result. -func (future *VirtualMachinesPerformMaintenanceFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesPerformMaintenanceFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesPerformMaintenanceFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesPowerOffFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesPowerOffFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesPowerOffFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesPowerOffFuture.Result. -func (future *VirtualMachinesPowerOffFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesPowerOffFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesPowerOffFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesReapplyFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesReapplyFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesReapplyFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesReapplyFuture.Result. -func (future *VirtualMachinesReapplyFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesReapplyFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesReapplyFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesRedeployFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesRedeployFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesRedeployFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesRedeployFuture.Result. -func (future *VirtualMachinesRedeployFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRedeployFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRedeployFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesReimageFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesReimageFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesReimageFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesReimageFuture.Result. -func (future *VirtualMachinesReimageFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesReimageFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesReimageFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesRestartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesRestartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesRestartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesRestartFuture.Result. -func (future *VirtualMachinesRestartFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRestartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRestartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachinesRunCommandFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. -type VirtualMachinesRunCommandFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (RunCommandResult, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesRunCommandFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesRunCommandFuture.Result. -func (future *VirtualMachinesRunCommandFuture) result(client VirtualMachinesClient) (rcr RunCommandResult, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRunCommandFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - rcr.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesRunCommandFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if rcr.Response.Response, err = future.GetResult(sender); err == nil && rcr.Response.Response.StatusCode != http.StatusNoContent { - rcr, err = client.RunCommandResponder(rcr.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesRunCommandFuture", "Result", rcr.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachinesStartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesStartFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (autorest.Response, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesStartFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesStartFuture.Result. -func (future *VirtualMachinesStartFuture) result(client VirtualMachinesClient) (ar autorest.Response, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesStartFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - ar.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesStartFuture") - return - } - ar.Response = future.Response() - return -} - -// VirtualMachineStatusCodeCount the status code and count of the virtual machine scale set instance view -// status summary. -type VirtualMachineStatusCodeCount struct { - // Code - READ-ONLY; The instance view status code. - Code *string `json:"code,omitempty"` - // Count - READ-ONLY; The number of instances having a particular status code. - Count *int32 `json:"count,omitempty"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineStatusCodeCount. -func (vmscc VirtualMachineStatusCodeCount) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// VirtualMachinesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualMachinesUpdateFuture struct { - azure.FutureAPI - // Result returns the result of the asynchronous operation. - // If the operation has not completed it will return an error. - Result func(VirtualMachinesClient) (VirtualMachine, error) -} - -// UnmarshalJSON is the custom unmarshaller for CreateFuture. -func (future *VirtualMachinesUpdateFuture) UnmarshalJSON(body []byte) error { - var azFuture azure.Future - if err := json.Unmarshal(body, &azFuture); err != nil { - return err - } - future.FutureAPI = &azFuture - future.Result = future.result - return nil -} - -// result is the default implementation for VirtualMachinesUpdateFuture.Result. -func (future *VirtualMachinesUpdateFuture) result(client VirtualMachinesClient) (VM VirtualMachine, err error) { - var done bool - done, err = future.DoneWithContext(context.Background(), client) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesUpdateFuture", "Result", future.Response(), "Polling failure") - return - } - if !done { - VM.Response.Response = future.Response() - err = azure.NewAsyncOpIncompleteError("compute.VirtualMachinesUpdateFuture") - return - } - sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if VM.Response.Response, err = future.GetResult(sender); err == nil && VM.Response.Response.StatusCode != http.StatusNoContent { - VM, err = client.UpdateResponder(VM.Response.Response) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesUpdateFuture", "Result", VM.Response.Response, "Failure responding to request") - } - } - return -} - -// VirtualMachineUpdate describes a Virtual Machine Update. -type VirtualMachineUpdate struct { - // Plan - Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use. In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**. - Plan *Plan `json:"plan,omitempty"` - *VirtualMachineProperties `json:"properties,omitempty"` - // Identity - The identity of the virtual machine, if configured. - Identity *VirtualMachineIdentity `json:"identity,omitempty"` - // Zones - The virtual machine zones. - Zones *[]string `json:"zones,omitempty"` - // Tags - Resource tags - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for VirtualMachineUpdate. -func (vmu VirtualMachineUpdate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if vmu.Plan != nil { - objectMap["plan"] = vmu.Plan - } - if vmu.VirtualMachineProperties != nil { - objectMap["properties"] = vmu.VirtualMachineProperties - } - if vmu.Identity != nil { - objectMap["identity"] = vmu.Identity - } - if vmu.Zones != nil { - objectMap["zones"] = vmu.Zones - } - if vmu.Tags != nil { - objectMap["tags"] = vmu.Tags - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for VirtualMachineUpdate struct. -func (vmu *VirtualMachineUpdate) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "plan": - if v != nil { - var plan Plan - err = json.Unmarshal(*v, &plan) - if err != nil { - return err - } - vmu.Plan = &plan - } - case "properties": - if v != nil { - var virtualMachineProperties VirtualMachineProperties - err = json.Unmarshal(*v, &virtualMachineProperties) - if err != nil { - return err - } - vmu.VirtualMachineProperties = &virtualMachineProperties - } - case "identity": - if v != nil { - var identity VirtualMachineIdentity - err = json.Unmarshal(*v, &identity) - if err != nil { - return err - } - vmu.Identity = &identity - } - case "zones": - if v != nil { - var zones []string - err = json.Unmarshal(*v, &zones) - if err != nil { - return err - } - vmu.Zones = &zones - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - vmu.Tags = tags - } - } - } - - return nil -} - -// VMDiskSecurityProfile specifies the security profile settings for the managed disk.

    NOTE: It -// can only be set for Confidential VMs -type VMDiskSecurityProfile struct { - // SecurityEncryptionType - Specifies the EncryptionType of the managed disk.
    It is set to DiskWithVMGuestState for encryption of the managed disk along with VMGuestState blob, and VMGuestStateOnly for encryption of just the VMGuestState blob.

    NOTE: It can be set for only Confidential VMs. Possible values include: 'VMGuestStateOnly', 'DiskWithVMGuestState' - SecurityEncryptionType SecurityEncryptionTypes `json:"securityEncryptionType,omitempty"` - // DiskEncryptionSet - Specifies the customer managed disk encryption set resource id for the managed disk that is used for Customer Managed Key encrypted ConfidentialVM OS Disk and VMGuest blob. - DiskEncryptionSet *DiskEncryptionSetParameters `json:"diskEncryptionSet,omitempty"` -} - -// VMGalleryApplication specifies the required information to reference a compute gallery application -// version -type VMGalleryApplication struct { - // Tags - Optional, Specifies a passthrough value for more generic context. - Tags *string `json:"tags,omitempty"` - // Order - Optional, Specifies the order in which the packages have to be installed - Order *int32 `json:"order,omitempty"` - // PackageReferenceID - Specifies the GalleryApplicationVersion resource id on the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version} - PackageReferenceID *string `json:"packageReferenceId,omitempty"` - // ConfigurationReference - Optional, Specifies the uri to an azure blob that will replace the default configuration for the package if provided - ConfigurationReference *string `json:"configurationReference,omitempty"` - // TreatFailureAsDeploymentFailure - Optional, If true, any failure for any operation in the VmApplication will fail the deployment - TreatFailureAsDeploymentFailure *bool `json:"treatFailureAsDeploymentFailure,omitempty"` - // EnableAutomaticUpgrade - If set to true, when a new Gallery Application version is available in PIR/SIG, it will be automatically updated for the VM/VMSS - EnableAutomaticUpgrade *bool `json:"enableAutomaticUpgrade,omitempty"` -} - -// VMImagesInEdgeZoneListResult the List VmImages in EdgeZone operation response. -type VMImagesInEdgeZoneListResult struct { - autorest.Response `json:"-"` - // Value - The list of VMImages in EdgeZone - Value *[]VirtualMachineImageResource `json:"value,omitempty"` - // NextLink - The URI to fetch the next page of VMImages in EdgeZone. Call ListNext() with this URI to fetch the next page of VmImages. - NextLink *string `json:"nextLink,omitempty"` -} - -// VMScaleSetConvertToSinglePlacementGroupInput ... -type VMScaleSetConvertToSinglePlacementGroupInput struct { - // ActivePlacementGroupID - Id of the placement group in which you want future virtual machine instances to be placed. To query placement group Id, please use Virtual Machine Scale Set VMs - Get API. If not provided, the platform will choose one with maximum number of virtual machine instances. - ActivePlacementGroupID *string `json:"activePlacementGroupId,omitempty"` -} - -// VMSizeProperties specifies VM Size Property settings on the virtual machine. -type VMSizeProperties struct { - // VCPUsAvailable - Specifies the number of vCPUs available for the VM.

    When this property is not specified in the request body the default behavior is to set it to the value of vCPUs available for that VM size exposed in api response of [List all available virtual machine sizes in a region](https://docs.microsoft.com/en-us/rest/api/compute/resource-skus/list) . - VCPUsAvailable *int32 `json:"vCPUsAvailable,omitempty"` - // VCPUsPerCore - Specifies the vCPU to physical core ratio.

    When this property is not specified in the request body the default behavior is set to the value of vCPUsPerCore for the VM Size exposed in api response of [List all available virtual machine sizes in a region](https://docs.microsoft.com/en-us/rest/api/compute/resource-skus/list)

    Setting this property to 1 also means that hyper-threading is disabled. - VCPUsPerCore *int32 `json:"vCPUsPerCore,omitempty"` -} - -// WindowsConfiguration specifies Windows operating system settings on the virtual machine. -type WindowsConfiguration struct { - // ProvisionVMAgent - Indicates whether virtual machine agent should be provisioned on the virtual machine.

    When this property is not specified in the request body, default behavior is to set it to true. This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later. - ProvisionVMAgent *bool `json:"provisionVMAgent,omitempty"` - // EnableAutomaticUpdates - Indicates whether Automatic Updates is enabled for the Windows virtual machine. Default value is true.

    For virtual machine scale sets, this property can be updated and updates will take effect on OS reprovisioning. - EnableAutomaticUpdates *bool `json:"enableAutomaticUpdates,omitempty"` - // TimeZone - Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".

    Possible values can be [TimeZoneInfo.Id](https://docs.microsoft.com/dotnet/api/system.timezoneinfo.id?#System_TimeZoneInfo_Id) value from time zones returned by [TimeZoneInfo.GetSystemTimeZones](https://docs.microsoft.com/dotnet/api/system.timezoneinfo.getsystemtimezones). - TimeZone *string `json:"timeZone,omitempty"` - // AdditionalUnattendContent - Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. - AdditionalUnattendContent *[]AdditionalUnattendContent `json:"additionalUnattendContent,omitempty"` - // PatchSettings - [Preview Feature] Specifies settings related to VM Guest Patching on Windows. - PatchSettings *PatchSettings `json:"patchSettings,omitempty"` - // WinRM - Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell. - WinRM *WinRMConfiguration `json:"winRM,omitempty"` -} - -// WindowsParameters input for InstallPatches on a Windows VM, as directly received by the API -type WindowsParameters struct { - // ClassificationsToInclude - The update classifications to select when installing patches for Windows. - ClassificationsToInclude *[]VMGuestPatchClassificationWindows `json:"classificationsToInclude,omitempty"` - // KbNumbersToInclude - Kbs to include in the patch operation - KbNumbersToInclude *[]string `json:"kbNumbersToInclude,omitempty"` - // KbNumbersToExclude - Kbs to exclude in the patch operation - KbNumbersToExclude *[]string `json:"kbNumbersToExclude,omitempty"` - // ExcludeKbsRequiringReboot - Filters out Kbs that don't have an InstallationRebootBehavior of 'NeverReboots' when this is set to true. - ExcludeKbsRequiringReboot *bool `json:"excludeKbsRequiringReboot,omitempty"` - // MaxPatchPublishDate - This is used to install patches that were published on or before this given max published date. - MaxPatchPublishDate *date.Time `json:"maxPatchPublishDate,omitempty"` -} - -// WindowsVMGuestPatchAutomaticByPlatformSettings specifies additional settings to be applied when patch -// mode AutomaticByPlatform is selected in Windows patch settings. -type WindowsVMGuestPatchAutomaticByPlatformSettings struct { - // RebootSetting - Specifies the reboot setting for all AutomaticByPlatform patch installation operations. Possible values include: 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingUnknown', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingIfRequired', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingNever', 'WindowsVMGuestPatchAutomaticByPlatformRebootSettingAlways' - RebootSetting WindowsVMGuestPatchAutomaticByPlatformRebootSetting `json:"rebootSetting,omitempty"` -} - -// WinRMConfiguration describes Windows Remote Management configuration of the VM -type WinRMConfiguration struct { - // Listeners - The list of Windows Remote Management listeners - Listeners *[]WinRMListener `json:"listeners,omitempty"` -} - -// WinRMListener describes Protocol and thumbprint of Windows Remote Management listener -type WinRMListener struct { - // Protocol - Specifies the protocol of WinRM listener.

    Possible values are:
    **http**

    **https**. Possible values include: 'HTTP', 'HTTPS' - Protocol ProtocolTypes `json:"protocol,omitempty"` - // CertificateURL - This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8:

    {
    "data":"",
    "dataType":"pfx",
    "password":""
    }
    To install certificates on a virtual machine it is recommended to use the [Azure Key Vault virtual machine extension for Linux](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-linux) or the [Azure Key Vault virtual machine extension for Windows](https://docs.microsoft.com/azure/virtual-machines/extensions/key-vault-windows). - CertificateURL *string `json:"certificateUrl,omitempty"` -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/operations.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/operations.go deleted file mode 100644 index 8974d4ff0812..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/operations.go +++ /dev/null @@ -1,98 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// OperationsClient is the compute Client -type OperationsClient struct { - BaseClient -} - -// NewOperationsClient creates an instance of the OperationsClient client. -func NewOperationsClient(subscriptionID string) OperationsClient { - return NewOperationsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewOperationsClientWithBaseURI creates an instance of the OperationsClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewOperationsClientWithBaseURI(baseURI string, subscriptionID string) OperationsClient { - return OperationsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List gets a list of compute operations. -func (client OperationsClient) List(ctx context.Context) (result OperationListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.OperationsClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) { - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPath("/providers/Microsoft.Compute/operations"), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client OperationsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client OperationsClient) ListResponder(resp *http.Response) (result OperationListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/proximityplacementgroups.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/proximityplacementgroups.go deleted file mode 100644 index 0b13634122f8..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/proximityplacementgroups.go +++ /dev/null @@ -1,575 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ProximityPlacementGroupsClient is the compute Client -type ProximityPlacementGroupsClient struct { - BaseClient -} - -// NewProximityPlacementGroupsClient creates an instance of the ProximityPlacementGroupsClient client. -func NewProximityPlacementGroupsClient(subscriptionID string) ProximityPlacementGroupsClient { - return NewProximityPlacementGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewProximityPlacementGroupsClientWithBaseURI creates an instance of the ProximityPlacementGroupsClient client using -// a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewProximityPlacementGroupsClientWithBaseURI(baseURI string, subscriptionID string) ProximityPlacementGroupsClient { - return ProximityPlacementGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate create or update a proximity placement group. -// Parameters: -// resourceGroupName - the name of the resource group. -// proximityPlacementGroupName - the name of the proximity placement group. -// parameters - parameters supplied to the Create Proximity Placement Group operation. -func (client ProximityPlacementGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroup) (result ProximityPlacementGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, proximityPlacementGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client ProximityPlacementGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroup) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete a proximity placement group. -// Parameters: -// resourceGroupName - the name of the resource group. -// proximityPlacementGroupName - the name of the proximity placement group. -func (client ProximityPlacementGroupsClient) Delete(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, proximityPlacementGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client ProximityPlacementGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about a proximity placement group . -// Parameters: -// resourceGroupName - the name of the resource group. -// proximityPlacementGroupName - the name of the proximity placement group. -// includeColocationStatus - includeColocationStatus=true enables fetching the colocation status of all the -// resources in the proximity placement group. -func (client ProximityPlacementGroupsClient) Get(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, includeColocationStatus string) (result ProximityPlacementGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, proximityPlacementGroupName, includeColocationStatus) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client ProximityPlacementGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, includeColocationStatus string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(includeColocationStatus) > 0 { - queryParameters["includeColocationStatus"] = autorest.Encode("query", includeColocationStatus) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) GetResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByResourceGroup lists all proximity placement groups in a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client ProximityPlacementGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ProximityPlacementGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.ppglr.Response.Response != nil { - sc = result.ppglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.ppglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.ppglr, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.ppglr.hasNextLink() && result.ppglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client ProximityPlacementGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result ProximityPlacementGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client ProximityPlacementGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults ProximityPlacementGroupListResult) (result ProximityPlacementGroupListResult, err error) { - req, err := lastResults.proximityPlacementGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client ProximityPlacementGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ProximityPlacementGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// ListBySubscription lists all proximity placement groups in a subscription. -func (client ProximityPlacementGroupsClient) ListBySubscription(ctx context.Context) (result ProximityPlacementGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.ppglr.Response.Response != nil { - sc = result.ppglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listBySubscriptionNextResults - req, err := client.ListBySubscriptionPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", nil, "Failure preparing request") - return - } - - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.ppglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", resp, "Failure sending request") - return - } - - result.ppglr, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "ListBySubscription", resp, "Failure responding to request") - return - } - if result.ppglr.hasNextLink() && result.ppglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListBySubscriptionPreparer prepares the ListBySubscription request. -func (client ProximityPlacementGroupsClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/proximityPlacementGroups", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListBySubscriptionSender sends the ListBySubscription request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) ListBySubscriptionResponder(resp *http.Response) (result ProximityPlacementGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listBySubscriptionNextResults retrieves the next set of results, if any. -func (client ProximityPlacementGroupsClient) listBySubscriptionNextResults(ctx context.Context, lastResults ProximityPlacementGroupListResult) (result ProximityPlacementGroupListResult, err error) { - req, err := lastResults.proximityPlacementGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") - } - result, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. -func (client ProximityPlacementGroupsClient) ListBySubscriptionComplete(ctx context.Context) (result ProximityPlacementGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.ListBySubscription") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListBySubscription(ctx) - return -} - -// Update update a proximity placement group. -// Parameters: -// resourceGroupName - the name of the resource group. -// proximityPlacementGroupName - the name of the proximity placement group. -// parameters - parameters supplied to the Update Proximity Placement Group operation. -func (client ProximityPlacementGroupsClient) Update(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroupUpdate) (result ProximityPlacementGroup, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ProximityPlacementGroupsClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, proximityPlacementGroupName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ProximityPlacementGroupsClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client ProximityPlacementGroupsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, proximityPlacementGroupName string, parameters ProximityPlacementGroupUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "proximityPlacementGroupName": autorest.Encode("path", proximityPlacementGroupName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/proximityPlacementGroups/{proximityPlacementGroupName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client ProximityPlacementGroupsClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client ProximityPlacementGroupsClient) UpdateResponder(resp *http.Response) (result ProximityPlacementGroup, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/resourceskus.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/resourceskus.go deleted file mode 100644 index 35266973811b..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/resourceskus.go +++ /dev/null @@ -1,153 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ResourceSkusClient is the compute Client -type ResourceSkusClient struct { - BaseClient -} - -// NewResourceSkusClient creates an instance of the ResourceSkusClient client. -func NewResourceSkusClient(subscriptionID string) ResourceSkusClient { - return NewResourceSkusClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewResourceSkusClientWithBaseURI creates an instance of the ResourceSkusClient client using a custom endpoint. Use -// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewResourceSkusClientWithBaseURI(baseURI string, subscriptionID string) ResourceSkusClient { - return ResourceSkusClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List gets the list of Microsoft.Compute SKUs available for your Subscription. -// Parameters: -// filter - the filter to apply on the operation. Only **location** filter is supported currently. -// includeExtendedLocations - to Include Extended Locations information or not in the response. -func (client ResourceSkusClient) List(ctx context.Context, filter string, includeExtendedLocations string) (result ResourceSkusResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusClient.List") - defer func() { - sc := -1 - if result.rsr.Response.Response != nil { - sc = result.rsr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, filter, includeExtendedLocations) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rsr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", resp, "Failure sending request") - return - } - - result.rsr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "List", resp, "Failure responding to request") - return - } - if result.rsr.hasNextLink() && result.rsr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ResourceSkusClient) ListPreparer(ctx context.Context, filter string, includeExtendedLocations string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(includeExtendedLocations) > 0 { - queryParameters["includeExtendedLocations"] = autorest.Encode("query", includeExtendedLocations) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/skus", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ResourceSkusClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ResourceSkusClient) ListResponder(resp *http.Response) (result ResourceSkusResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ResourceSkusClient) listNextResults(ctx context.Context, lastResults ResourceSkusResult) (result ResourceSkusResult, err error) { - req, err := lastResults.resourceSkusResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.ResourceSkusClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ResourceSkusClient) ListComplete(ctx context.Context, filter string, includeExtendedLocations string) (result ResourceSkusResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ResourceSkusClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, filter, includeExtendedLocations) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepointcollections.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepointcollections.go deleted file mode 100644 index d1997811b740..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepointcollections.go +++ /dev/null @@ -1,582 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// RestorePointCollectionsClient is the compute Client -type RestorePointCollectionsClient struct { - BaseClient -} - -// NewRestorePointCollectionsClient creates an instance of the RestorePointCollectionsClient client. -func NewRestorePointCollectionsClient(subscriptionID string) RestorePointCollectionsClient { - return NewRestorePointCollectionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewRestorePointCollectionsClientWithBaseURI creates an instance of the RestorePointCollectionsClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewRestorePointCollectionsClientWithBaseURI(baseURI string, subscriptionID string) RestorePointCollectionsClient { - return RestorePointCollectionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update the restore point collection. Please refer to -// https://aka.ms/RestorePoints for more details. When updating a restore point collection, only tags may be modified. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection. -// parameters - parameters supplied to the Create or Update restore point collection operation. -func (client RestorePointCollectionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollection) (result RestorePointCollection, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, restorePointCollectionName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client RestorePointCollectionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollection) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) CreateOrUpdateResponder(resp *http.Response) (result RestorePointCollection, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the restore point collection. This operation will also delete all the contained -// restore points. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the Restore Point Collection. -func (client RestorePointCollectionsClient) Delete(ctx context.Context, resourceGroupName string, restorePointCollectionName string) (result RestorePointCollectionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, restorePointCollectionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client RestorePointCollectionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) DeleteSender(req *http.Request) (future RestorePointCollectionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the restore point collection. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection. -// expand - the expand expression to apply on the operation. If expand=restorePoints, server will return all -// contained restore points in the restorePointCollection. -func (client RestorePointCollectionsClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, expand RestorePointCollectionExpandOptions) (result RestorePointCollection, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client RestorePointCollectionsClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, expand RestorePointCollectionExpandOptions) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) GetResponder(resp *http.Response) (result RestorePointCollection, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets the list of restore point collections in a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client RestorePointCollectionsClient) List(ctx context.Context, resourceGroupName string) (result RestorePointCollectionListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.List") - defer func() { - sc := -1 - if result.rpclr.Response.Response != nil { - sc = result.rpclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rpclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", resp, "Failure sending request") - return - } - - result.rpclr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "List", resp, "Failure responding to request") - return - } - if result.rpclr.hasNextLink() && result.rpclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client RestorePointCollectionsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) ListResponder(resp *http.Response) (result RestorePointCollectionListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client RestorePointCollectionsClient) listNextResults(ctx context.Context, lastResults RestorePointCollectionListResult) (result RestorePointCollectionListResult, err error) { - req, err := lastResults.restorePointCollectionListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client RestorePointCollectionsClient) ListComplete(ctx context.Context, resourceGroupName string) (result RestorePointCollectionListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName) - return -} - -// ListAll gets the list of restore point collections in the subscription. Use nextLink property in the response to get -// the next page of restore point collections. Do this till nextLink is not null to fetch all the restore point -// collections. -func (client RestorePointCollectionsClient) ListAll(ctx context.Context) (result RestorePointCollectionListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.ListAll") - defer func() { - sc := -1 - if result.rpclr.Response.Response != nil { - sc = result.rpclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listAllNextResults - req, err := client.ListAllPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", nil, "Failure preparing request") - return - } - - resp, err := client.ListAllSender(req) - if err != nil { - result.rpclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", resp, "Failure sending request") - return - } - - result.rpclr, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "ListAll", resp, "Failure responding to request") - return - } - if result.rpclr.hasNextLink() && result.rpclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListAllPreparer prepares the ListAll request. -func (client RestorePointCollectionsClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/restorePointCollections", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAllSender sends the ListAll request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) ListAllSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAllResponder handles the response to the ListAll request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) ListAllResponder(resp *http.Response) (result RestorePointCollectionListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAllNextResults retrieves the next set of results, if any. -func (client RestorePointCollectionsClient) listAllNextResults(ctx context.Context, lastResults RestorePointCollectionListResult) (result RestorePointCollectionListResult, err error) { - req, err := lastResults.restorePointCollectionListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAllSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "listAllNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAllComplete enumerates all values, automatically crossing page boundaries as required. -func (client RestorePointCollectionsClient) ListAllComplete(ctx context.Context) (result RestorePointCollectionListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.ListAll") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListAll(ctx) - return -} - -// Update the operation to update the restore point collection. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection. -// parameters - parameters supplied to the Update restore point collection operation. -func (client RestorePointCollectionsClient) Update(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollectionUpdate) (result RestorePointCollection, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointCollectionsClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, restorePointCollectionName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointCollectionsClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client RestorePointCollectionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, parameters RestorePointCollectionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointCollectionsClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client RestorePointCollectionsClient) UpdateResponder(resp *http.Response) (result RestorePointCollection, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepoints.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepoints.go deleted file mode 100644 index ac171854f76e..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/restorepoints.go +++ /dev/null @@ -1,302 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// RestorePointsClient is the compute Client -type RestorePointsClient struct { - BaseClient -} - -// NewRestorePointsClient creates an instance of the RestorePointsClient client. -func NewRestorePointsClient(subscriptionID string) RestorePointsClient { - return NewRestorePointsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewRestorePointsClientWithBaseURI creates an instance of the RestorePointsClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewRestorePointsClientWithBaseURI(baseURI string, subscriptionID string) RestorePointsClient { - return RestorePointsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Create the operation to create the restore point. Updating properties of an existing restore point is not allowed -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection. -// restorePointName - the name of the restore point. -// parameters - parameters supplied to the Create restore point operation. -func (client RestorePointsClient) Create(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, parameters RestorePoint) (result RestorePointsCreateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Create") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.RestorePointProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.RestorePointProperties.SourceMetadata.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - }}, - }}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.RestorePointsClient", "Create", err.Error()) - } - - req, err := client.CreatePreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Create", nil, "Failure preparing request") - return - } - - result, err = client.CreateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Create", result.Response(), "Failure sending request") - return - } - - return -} - -// CreatePreparer prepares the Create request. -func (client RestorePointsClient) CreatePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, parameters RestorePoint) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "restorePointName": autorest.Encode("path", restorePointName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateSender sends the Create request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointsClient) CreateSender(req *http.Request) (future RestorePointsCreateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateResponder handles the response to the Create request. The method always -// closes the http.Response Body. -func (client RestorePointsClient) CreateResponder(resp *http.Response) (result RestorePoint, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the restore point. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the Restore Point Collection. -// restorePointName - the name of the restore point. -func (client RestorePointsClient) Delete(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string) (result RestorePointsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client RestorePointsClient) DeletePreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "restorePointName": autorest.Encode("path", restorePointName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointsClient) DeleteSender(req *http.Request) (future RestorePointsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client RestorePointsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the restore point. -// Parameters: -// resourceGroupName - the name of the resource group. -// restorePointCollectionName - the name of the restore point collection. -// restorePointName - the name of the restore point. -// expand - the expand expression to apply on the operation. 'InstanceView' retrieves information about the -// run-time state of a restore point. -func (client RestorePointsClient) Get(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, expand RestorePointExpandOptions) (result RestorePoint, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/RestorePointsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, restorePointCollectionName, restorePointName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.RestorePointsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client RestorePointsClient) GetPreparer(ctx context.Context, resourceGroupName string, restorePointCollectionName string, restorePointName string, expand RestorePointExpandOptions) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "restorePointCollectionName": autorest.Encode("path", restorePointCollectionName), - "restorePointName": autorest.Encode("path", restorePointName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/restorePointCollections/{restorePointCollectionName}/restorePoints/{restorePointName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client RestorePointsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client RestorePointsClient) GetResponder(resp *http.Response) (result RestorePoint, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleries.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleries.go deleted file mode 100644 index 261ed0770ac0..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleries.go +++ /dev/null @@ -1,227 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// SharedGalleriesClient is the compute Client -type SharedGalleriesClient struct { - BaseClient -} - -// NewSharedGalleriesClient creates an instance of the SharedGalleriesClient client. -func NewSharedGalleriesClient(subscriptionID string) SharedGalleriesClient { - return NewSharedGalleriesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewSharedGalleriesClientWithBaseURI creates an instance of the SharedGalleriesClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewSharedGalleriesClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleriesClient { - return SharedGalleriesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a shared gallery by subscription id or tenant id. -// Parameters: -// location - resource location. -// galleryUniqueName - the unique name of the Shared Gallery. -func (client SharedGalleriesClient) Get(ctx context.Context, location string, galleryUniqueName string) (result SharedGallery, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, galleryUniqueName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client SharedGalleriesClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryUniqueName": autorest.Encode("path", galleryUniqueName), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleriesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client SharedGalleriesClient) GetResponder(resp *http.Response) (result SharedGallery, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List list shared galleries by subscription id or tenant id. -// Parameters: -// location - resource location. -// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. -func (client SharedGalleriesClient) List(ctx context.Context, location string, sharedTo SharedToValues) (result SharedGalleryListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.List") - defer func() { - sc := -1 - if result.sgl.Response.Response != nil { - sc = result.sgl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, location, sharedTo) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.sgl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", resp, "Failure sending request") - return - } - - result.sgl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "List", resp, "Failure responding to request") - return - } - if result.sgl.hasNextLink() && result.sgl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client SharedGalleriesClient) ListPreparer(ctx context.Context, location string, sharedTo SharedToValues) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(sharedTo)) > 0 { - queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleriesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client SharedGalleriesClient) ListResponder(resp *http.Response) (result SharedGalleryList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client SharedGalleriesClient) listNextResults(ctx context.Context, lastResults SharedGalleryList) (result SharedGalleryList, err error) { - req, err := lastResults.sharedGalleryListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleriesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client SharedGalleriesClient) ListComplete(ctx context.Context, location string, sharedTo SharedToValues) (result SharedGalleryListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleriesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, location, sharedTo) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimages.go deleted file mode 100644 index 5378b4f89811..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimages.go +++ /dev/null @@ -1,233 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// SharedGalleryImagesClient is the compute Client -type SharedGalleryImagesClient struct { - BaseClient -} - -// NewSharedGalleryImagesClient creates an instance of the SharedGalleryImagesClient client. -func NewSharedGalleryImagesClient(subscriptionID string) SharedGalleryImagesClient { - return NewSharedGalleryImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewSharedGalleryImagesClientWithBaseURI creates an instance of the SharedGalleryImagesClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewSharedGalleryImagesClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleryImagesClient { - return SharedGalleryImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a shared gallery image by subscription id or tenant id. -// Parameters: -// location - resource location. -// galleryUniqueName - the unique name of the Shared Gallery. -// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be -// listed. -func (client SharedGalleryImagesClient) Get(ctx context.Context, location string, galleryUniqueName string, galleryImageName string) (result SharedGalleryImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, galleryUniqueName, galleryImageName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client SharedGalleryImagesClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryUniqueName": autorest.Encode("path", galleryUniqueName), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleryImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client SharedGalleryImagesClient) GetResponder(resp *http.Response) (result SharedGalleryImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List list shared gallery images by subscription id or tenant id. -// Parameters: -// location - resource location. -// galleryUniqueName - the unique name of the Shared Gallery. -// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. -func (client SharedGalleryImagesClient) List(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (result SharedGalleryImageListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.List") - defer func() { - sc := -1 - if result.sgil.Response.Response != nil { - sc = result.sgil.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, location, galleryUniqueName, sharedTo) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.sgil.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", resp, "Failure sending request") - return - } - - result.sgil, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "List", resp, "Failure responding to request") - return - } - if result.sgil.hasNextLink() && result.sgil.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client SharedGalleryImagesClient) ListPreparer(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryUniqueName": autorest.Encode("path", galleryUniqueName), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(sharedTo)) > 0 { - queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleryImagesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client SharedGalleryImagesClient) ListResponder(resp *http.Response) (result SharedGalleryImageList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client SharedGalleryImagesClient) listNextResults(ctx context.Context, lastResults SharedGalleryImageList) (result SharedGalleryImageList, err error) { - req, err := lastResults.sharedGalleryImageListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImagesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client SharedGalleryImagesClient) ListComplete(ctx context.Context, location string, galleryUniqueName string, sharedTo SharedToValues) (result SharedGalleryImageListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImagesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, location, galleryUniqueName, sharedTo) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimageversions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimageversions.go deleted file mode 100644 index 325d3f48b3e9..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sharedgalleryimageversions.go +++ /dev/null @@ -1,240 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// SharedGalleryImageVersionsClient is the compute Client -type SharedGalleryImageVersionsClient struct { - BaseClient -} - -// NewSharedGalleryImageVersionsClient creates an instance of the SharedGalleryImageVersionsClient client. -func NewSharedGalleryImageVersionsClient(subscriptionID string) SharedGalleryImageVersionsClient { - return NewSharedGalleryImageVersionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewSharedGalleryImageVersionsClientWithBaseURI creates an instance of the SharedGalleryImageVersionsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewSharedGalleryImageVersionsClientWithBaseURI(baseURI string, subscriptionID string) SharedGalleryImageVersionsClient { - return SharedGalleryImageVersionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get a shared gallery image version by subscription id or tenant id. -// Parameters: -// location - resource location. -// galleryUniqueName - the unique name of the Shared Gallery. -// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be -// listed. -// galleryImageVersionName - the name of the gallery image version to be created. Needs to follow semantic -// version name pattern: The allowed characters are digit and period. Digits must be within the range of a -// 32-bit integer. Format: .. -func (client SharedGalleryImageVersionsClient) Get(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, galleryImageVersionName string) (result SharedGalleryImageVersion, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, galleryUniqueName, galleryImageName, galleryImageVersionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client SharedGalleryImageVersionsClient) GetPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, galleryImageVersionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryImageVersionName": autorest.Encode("path", galleryImageVersionName), - "galleryUniqueName": autorest.Encode("path", galleryUniqueName), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions/{galleryImageVersionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleryImageVersionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client SharedGalleryImageVersionsClient) GetResponder(resp *http.Response) (result SharedGalleryImageVersion, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List list shared gallery image versions by subscription id or tenant id. -// Parameters: -// location - resource location. -// galleryUniqueName - the unique name of the Shared Gallery. -// galleryImageName - the name of the Shared Gallery Image Definition from which the Image Versions are to be -// listed. -// sharedTo - the query parameter to decide what shared galleries to fetch when doing listing operations. -func (client SharedGalleryImageVersionsClient) List(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (result SharedGalleryImageVersionListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.List") - defer func() { - sc := -1 - if result.sgivl.Response.Response != nil { - sc = result.sgivl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, location, galleryUniqueName, galleryImageName, sharedTo) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.sgivl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", resp, "Failure sending request") - return - } - - result.sgivl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "List", resp, "Failure responding to request") - return - } - if result.sgivl.hasNextLink() && result.sgivl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client SharedGalleryImageVersionsClient) ListPreparer(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "galleryImageName": autorest.Encode("path", galleryImageName), - "galleryUniqueName": autorest.Encode("path", galleryUniqueName), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-07-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(sharedTo)) > 0 { - queryParameters["sharedTo"] = autorest.Encode("query", sharedTo) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/sharedGalleries/{galleryUniqueName}/images/{galleryImageName}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client SharedGalleryImageVersionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client SharedGalleryImageVersionsClient) ListResponder(resp *http.Response) (result SharedGalleryImageVersionList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client SharedGalleryImageVersionsClient) listNextResults(ctx context.Context, lastResults SharedGalleryImageVersionList) (result SharedGalleryImageVersionList, err error) { - req, err := lastResults.sharedGalleryImageVersionListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SharedGalleryImageVersionsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client SharedGalleryImageVersionsClient) ListComplete(ctx context.Context, location string, galleryUniqueName string, galleryImageName string, sharedTo SharedToValues) (result SharedGalleryImageVersionListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SharedGalleryImageVersionsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, location, galleryUniqueName, galleryImageName, sharedTo) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/snapshots.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/snapshots.go deleted file mode 100644 index 792c3d82eb53..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/snapshots.go +++ /dev/null @@ -1,778 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// SnapshotsClient is the compute Client -type SnapshotsClient struct { - BaseClient -} - -// NewSnapshotsClient creates an instance of the SnapshotsClient client. -func NewSnapshotsClient(subscriptionID string) SnapshotsClient { - return NewSnapshotsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewSnapshotsClientWithBaseURI creates an instance of the SnapshotsClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewSnapshotsClientWithBaseURI(baseURI string, subscriptionID string) SnapshotsClient { - return SnapshotsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate creates or updates a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -// snapshot - snapshot object supplied in the body of the Put disk operation. -func (client SnapshotsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, snapshotName string, snapshot Snapshot) (result SnapshotsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: snapshot, - Constraints: []validation.Constraint{{Target: "snapshot.SnapshotProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.PurchasePlan", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.PurchasePlan.Publisher", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "snapshot.SnapshotProperties.PurchasePlan.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "snapshot.SnapshotProperties.PurchasePlan.Product", Name: validation.Null, Rule: true, Chain: nil}, - }}, - {Target: "snapshot.SnapshotProperties.CreationData", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.CreationData.ImageReference", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.CreationData.ImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}}, - {Target: "snapshot.SnapshotProperties.CreationData.GalleryImageReference", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.CreationData.GalleryImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}}, - }}, - {Target: "snapshot.SnapshotProperties.EncryptionSettingsCollection", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "snapshot.SnapshotProperties.EncryptionSettingsCollection.Enabled", Name: validation.Null, Rule: true, Chain: nil}}}, - }}}}}); err != nil { - return result, validation.NewError("compute.SnapshotsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, snapshotName, snapshot) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client SnapshotsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, snapshotName string, snapshot Snapshot) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - snapshot.ManagedBy = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), - autorest.WithJSON(snapshot), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) CreateOrUpdateSender(req *http.Request) (future SnapshotsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) CreateOrUpdateResponder(resp *http.Response) (result Snapshot, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -func (client SnapshotsClient) Delete(ctx context.Context, resourceGroupName string, snapshotName string) (result SnapshotsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, snapshotName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client SnapshotsClient) DeletePreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) DeleteSender(req *http.Request) (future SnapshotsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets information about a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -func (client SnapshotsClient) Get(ctx context.Context, resourceGroupName string, snapshotName string) (result Snapshot, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, snapshotName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client SnapshotsClient) GetPreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) GetResponder(resp *http.Response) (result Snapshot, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GrantAccess grants access to a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -// grantAccessData - access data object supplied in the body of the get snapshot access operation. -func (client SnapshotsClient) GrantAccess(ctx context.Context, resourceGroupName string, snapshotName string, grantAccessData GrantAccessData) (result SnapshotsGrantAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.GrantAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: grantAccessData, - Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.SnapshotsClient", "GrantAccess", err.Error()) - } - - req, err := client.GrantAccessPreparer(ctx, resourceGroupName, snapshotName, grantAccessData) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "GrantAccess", nil, "Failure preparing request") - return - } - - result, err = client.GrantAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "GrantAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// GrantAccessPreparer prepares the GrantAccess request. -func (client SnapshotsClient) GrantAccessPreparer(ctx context.Context, resourceGroupName string, snapshotName string, grantAccessData GrantAccessData) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", pathParameters), - autorest.WithJSON(grantAccessData), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GrantAccessSender sends the GrantAccess request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) GrantAccessSender(req *http.Request) (future SnapshotsGrantAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// GrantAccessResponder handles the response to the GrantAccess request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) GrantAccessResponder(resp *http.Response) (result AccessURI, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists snapshots under a subscription. -func (client SnapshotsClient) List(ctx context.Context) (result SnapshotListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.List") - defer func() { - sc := -1 - if result.sl.Response.Response != nil { - sc = result.sl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.sl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", resp, "Failure sending request") - return - } - - result.sl, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "List", resp, "Failure responding to request") - return - } - if result.sl.hasNextLink() && result.sl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client SnapshotsClient) ListPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/snapshots", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) ListResponder(resp *http.Response) (result SnapshotList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client SnapshotsClient) listNextResults(ctx context.Context, lastResults SnapshotList) (result SnapshotList, err error) { - req, err := lastResults.snapshotListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client SnapshotsClient) ListComplete(ctx context.Context) (result SnapshotListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} - -// ListByResourceGroup lists snapshots under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client SnapshotsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result SnapshotListPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.sl.Response.Response != nil { - sc = result.sl.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.sl.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.sl, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.sl.hasNextLink() && result.sl.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client SnapshotsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) ListByResourceGroupResponder(resp *http.Response) (result SnapshotList, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client SnapshotsClient) listByResourceGroupNextResults(ctx context.Context, lastResults SnapshotList) (result SnapshotList, err error) { - req, err := lastResults.snapshotListPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client SnapshotsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result SnapshotListIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// RevokeAccess revokes access to a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -func (client SnapshotsClient) RevokeAccess(ctx context.Context, resourceGroupName string, snapshotName string) (result SnapshotsRevokeAccessFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.RevokeAccess") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RevokeAccessPreparer(ctx, resourceGroupName, snapshotName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "RevokeAccess", nil, "Failure preparing request") - return - } - - result, err = client.RevokeAccessSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "RevokeAccess", result.Response(), "Failure sending request") - return - } - - return -} - -// RevokeAccessPreparer prepares the RevokeAccess request. -func (client SnapshotsClient) RevokeAccessPreparer(ctx context.Context, resourceGroupName string, snapshotName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RevokeAccessSender sends the RevokeAccess request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) RevokeAccessSender(req *http.Request) (future SnapshotsRevokeAccessFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RevokeAccessResponder handles the response to the RevokeAccess request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update updates (patches) a snapshot. -// Parameters: -// resourceGroupName - the name of the resource group. -// snapshotName - the name of the snapshot that is being created. The name can't be changed after the snapshot -// is created. Supported characters for the name are a-z, A-Z, 0-9, _ and -. The max name length is 80 -// characters. -// snapshot - snapshot object supplied in the body of the Patch snapshot operation. -func (client SnapshotsClient) Update(ctx context.Context, resourceGroupName string, snapshotName string, snapshot SnapshotUpdate) (result SnapshotsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SnapshotsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, snapshotName, snapshot) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SnapshotsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client SnapshotsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, snapshotName string, snapshot SnapshotUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "snapshotName": autorest.Encode("path", snapshotName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2021-12-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters), - autorest.WithJSON(snapshot), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client SnapshotsClient) UpdateSender(req *http.Request) (future SnapshotsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client SnapshotsClient) UpdateResponder(resp *http.Response) (result Snapshot, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sshpublickeys.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sshpublickeys.go deleted file mode 100644 index 0e554727dae2..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/sshpublickeys.go +++ /dev/null @@ -1,649 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// SSHPublicKeysClient is the compute Client -type SSHPublicKeysClient struct { - BaseClient -} - -// NewSSHPublicKeysClient creates an instance of the SSHPublicKeysClient client. -func NewSSHPublicKeysClient(subscriptionID string) SSHPublicKeysClient { - return NewSSHPublicKeysClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewSSHPublicKeysClientWithBaseURI creates an instance of the SSHPublicKeysClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewSSHPublicKeysClientWithBaseURI(baseURI string, subscriptionID string) SSHPublicKeysClient { - return SSHPublicKeysClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Create creates a new SSH public key resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// SSHPublicKeyName - the name of the SSH public key. -// parameters - parameters supplied to create the SSH public key. -func (client SSHPublicKeysClient) Create(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyResource) (result SSHPublicKeyResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Create") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreatePreparer(ctx, resourceGroupName, SSHPublicKeyName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", nil, "Failure preparing request") - return - } - - resp, err := client.CreateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", resp, "Failure sending request") - return - } - - result, err = client.CreateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Create", resp, "Failure responding to request") - return - } - - return -} - -// CreatePreparer prepares the Create request. -func (client SSHPublicKeysClient) CreatePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyResource) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateSender sends the Create request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) CreateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// CreateResponder handles the response to the Create request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) CreateResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete delete an SSH public key. -// Parameters: -// resourceGroupName - the name of the resource group. -// SSHPublicKeyName - the name of the SSH public key. -func (client SSHPublicKeysClient) Delete(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, SSHPublicKeyName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client SSHPublicKeysClient) DeletePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// GenerateKeyPair generates and returns a public/private key pair and populates the SSH public key resource with the -// public key. The length of the key will be 3072 bits. This operation can only be performed once per SSH public key -// resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// SSHPublicKeyName - the name of the SSH public key. -func (client SSHPublicKeysClient) GenerateKeyPair(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result SSHPublicKeyGenerateKeyPairResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.GenerateKeyPair") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GenerateKeyPairPreparer(ctx, resourceGroupName, SSHPublicKeyName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", nil, "Failure preparing request") - return - } - - resp, err := client.GenerateKeyPairSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", resp, "Failure sending request") - return - } - - result, err = client.GenerateKeyPairResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "GenerateKeyPair", resp, "Failure responding to request") - return - } - - return -} - -// GenerateKeyPairPreparer prepares the GenerateKeyPair request. -func (client SSHPublicKeysClient) GenerateKeyPairPreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}/generateKeyPair", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GenerateKeyPairSender sends the GenerateKeyPair request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) GenerateKeyPairSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GenerateKeyPairResponder handles the response to the GenerateKeyPair request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) GenerateKeyPairResponder(resp *http.Response) (result SSHPublicKeyGenerateKeyPairResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Get retrieves information about an SSH public key. -// Parameters: -// resourceGroupName - the name of the resource group. -// SSHPublicKeyName - the name of the SSH public key. -func (client SSHPublicKeysClient) Get(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (result SSHPublicKeyResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, SSHPublicKeyName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client SSHPublicKeysClient) GetPreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) GetResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByResourceGroup lists all of the SSH public keys in the specified resource group. Use the nextLink property in -// the response to get the next page of SSH public keys. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client SSHPublicKeysClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result SSHPublicKeysGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.spkglr.Response.Response != nil { - sc = result.spkglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByResourceGroupNextResults - req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.spkglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", resp, "Failure sending request") - return - } - - result.spkglr, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListByResourceGroup", resp, "Failure responding to request") - return - } - if result.spkglr.hasNextLink() && result.spkglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByResourceGroupPreparer prepares the ListByResourceGroup request. -func (client SSHPublicKeysClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) ListByResourceGroupResponder(resp *http.Response) (result SSHPublicKeysGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByResourceGroupNextResults retrieves the next set of results, if any. -func (client SSHPublicKeysClient) listByResourceGroupNextResults(ctx context.Context, lastResults SSHPublicKeysGroupListResult) (result SSHPublicKeysGroupListResult, err error) { - req, err := lastResults.sSHPublicKeysGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByResourceGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByResourceGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. -func (client SSHPublicKeysClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result SSHPublicKeysGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListByResourceGroup") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) - return -} - -// ListBySubscription lists all of the SSH public keys in the subscription. Use the nextLink property in the response -// to get the next page of SSH public keys. -func (client SSHPublicKeysClient) ListBySubscription(ctx context.Context) (result SSHPublicKeysGroupListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListBySubscription") - defer func() { - sc := -1 - if result.spkglr.Response.Response != nil { - sc = result.spkglr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listBySubscriptionNextResults - req, err := client.ListBySubscriptionPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", nil, "Failure preparing request") - return - } - - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.spkglr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", resp, "Failure sending request") - return - } - - result.spkglr, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "ListBySubscription", resp, "Failure responding to request") - return - } - if result.spkglr.hasNextLink() && result.spkglr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListBySubscriptionPreparer prepares the ListBySubscription request. -func (client SSHPublicKeysClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/sshPublicKeys", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListBySubscriptionSender sends the ListBySubscription request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) ListBySubscriptionResponder(resp *http.Response) (result SSHPublicKeysGroupListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listBySubscriptionNextResults retrieves the next set of results, if any. -func (client SSHPublicKeysClient) listBySubscriptionNextResults(ctx context.Context, lastResults SSHPublicKeysGroupListResult) (result SSHPublicKeysGroupListResult, err error) { - req, err := lastResults.sSHPublicKeysGroupListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListBySubscriptionSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", resp, "Failure sending next results request") - } - result, err = client.ListBySubscriptionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required. -func (client SSHPublicKeysClient) ListBySubscriptionComplete(ctx context.Context) (result SSHPublicKeysGroupListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.ListBySubscription") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListBySubscription(ctx) - return -} - -// Update updates a new SSH public key resource. -// Parameters: -// resourceGroupName - the name of the resource group. -// SSHPublicKeyName - the name of the SSH public key. -// parameters - parameters supplied to update the SSH public key. -func (client SSHPublicKeysClient) Update(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyUpdateResource) (result SSHPublicKeyResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/SSHPublicKeysClient.Update") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, SSHPublicKeyName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", nil, "Failure preparing request") - return - } - - resp, err := client.UpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", resp, "Failure sending request") - return - } - - result, err = client.UpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.SSHPublicKeysClient", "Update", resp, "Failure responding to request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client SSHPublicKeysClient) UpdatePreparer(ctx context.Context, resourceGroupName string, SSHPublicKeyName string, parameters SSHPublicKeyUpdateResource) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "sshPublicKeyName": autorest.Encode("path", SSHPublicKeyName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{sshPublicKeyName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client SSHPublicKeysClient) UpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client SSHPublicKeysClient) UpdateResponder(resp *http.Response) (result SSHPublicKeyResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/usage.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/usage.go deleted file mode 100644 index 8adea6c2629e..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/usage.go +++ /dev/null @@ -1,155 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// UsageClient is the compute Client -type UsageClient struct { - BaseClient -} - -// NewUsageClient creates an instance of the UsageClient client. -func NewUsageClient(subscriptionID string) UsageClient { - return NewUsageClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewUsageClientWithBaseURI creates an instance of the UsageClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewUsageClientWithBaseURI(baseURI string, subscriptionID string) UsageClient { - return UsageClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List gets, for the specified location, the current compute resource usage information as well as the limits for -// compute resources under the subscription. -// Parameters: -// location - the location for which resource usage is queried. -func (client UsageClient) List(ctx context.Context, location string) (result ListUsagesResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageClient.List") - defer func() { - sc := -1 - if result.lur.Response.Response != nil { - sc = result.lur.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.UsageClient", "List", err.Error()) - } - - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.lur.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure sending request") - return - } - - result.lur, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure responding to request") - return - } - if result.lur.hasNextLink() && result.lur.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client UsageClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client UsageClient) ListResponder(resp *http.Response) (result ListUsagesResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client UsageClient) listNextResults(ctx context.Context, lastResults ListUsagesResult) (result ListUsagesResult, err error) { - req, err := lastResults.listUsagesResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.UsageClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client UsageClient) ListComplete(ctx context.Context, location string) (result ListUsagesResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, location) - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/version.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/version.go deleted file mode 100644 index 56165b81787c..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/version.go +++ /dev/null @@ -1,19 +0,0 @@ -package compute - -import "github.com/Azure/azure-sdk-for-go/version" - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -// UserAgent returns the UserAgent string to use when sending http.Requests. -func UserAgent() string { - return "Azure-SDK-For-Go/" + Version() + " compute/2022-03-01" -} - -// Version returns the semantic version (see http://semver.org) of the client. -func Version() string { - return version.Number -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensionimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensionimages.go deleted file mode 100644 index 8055eded87ca..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensionimages.go +++ /dev/null @@ -1,270 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineExtensionImagesClient is the compute Client -type VirtualMachineExtensionImagesClient struct { - BaseClient -} - -// NewVirtualMachineExtensionImagesClient creates an instance of the VirtualMachineExtensionImagesClient client. -func NewVirtualMachineExtensionImagesClient(subscriptionID string) VirtualMachineExtensionImagesClient { - return NewVirtualMachineExtensionImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineExtensionImagesClientWithBaseURI creates an instance of the VirtualMachineExtensionImagesClient -// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI -// (sovereign clouds, Azure stack). -func NewVirtualMachineExtensionImagesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineExtensionImagesClient { - return VirtualMachineExtensionImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get gets a virtual machine extension image. -// Parameters: -// location - the name of a supported Azure region. -func (client VirtualMachineExtensionImagesClient) Get(ctx context.Context, location string, publisherName string, typeParameter string, version string) (result VirtualMachineExtensionImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, publisherName, typeParameter, version) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineExtensionImagesClient) GetPreparer(ctx context.Context, location string, publisherName string, typeParameter string, version string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "type": autorest.Encode("path", typeParameter), - "version": autorest.Encode("path", version), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionImagesClient) GetResponder(resp *http.Response) (result VirtualMachineExtensionImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListTypes gets a list of virtual machine extension image types. -// Parameters: -// location - the name of a supported Azure region. -func (client VirtualMachineExtensionImagesClient) ListTypes(ctx context.Context, location string, publisherName string) (result ListVirtualMachineExtensionImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.ListTypes") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListTypesPreparer(ctx, location, publisherName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", nil, "Failure preparing request") - return - } - - resp, err := client.ListTypesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", resp, "Failure sending request") - return - } - - result, err = client.ListTypesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListTypes", resp, "Failure responding to request") - return - } - - return -} - -// ListTypesPreparer prepares the ListTypes request. -func (client VirtualMachineExtensionImagesClient) ListTypesPreparer(ctx context.Context, location string, publisherName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListTypesSender sends the ListTypes request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionImagesClient) ListTypesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListTypesResponder handles the response to the ListTypes request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionImagesClient) ListTypesResponder(resp *http.Response) (result ListVirtualMachineExtensionImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListVersions gets a list of virtual machine extension image versions. -// Parameters: -// location - the name of a supported Azure region. -// filter - the filter to apply on the operation. -func (client VirtualMachineExtensionImagesClient) ListVersions(ctx context.Context, location string, publisherName string, typeParameter string, filter string, top *int32, orderby string) (result ListVirtualMachineExtensionImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionImagesClient.ListVersions") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListVersionsPreparer(ctx, location, publisherName, typeParameter, filter, top, orderby) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", nil, "Failure preparing request") - return - } - - resp, err := client.ListVersionsSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", resp, "Failure sending request") - return - } - - result, err = client.ListVersionsResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionImagesClient", "ListVersions", resp, "Failure responding to request") - return - } - - return -} - -// ListVersionsPreparer prepares the ListVersions request. -func (client VirtualMachineExtensionImagesClient) ListVersionsPreparer(ctx context.Context, location string, publisherName string, typeParameter string, filter string, top *int32, orderby string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "type": autorest.Encode("path", typeParameter), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - if len(orderby) > 0 { - queryParameters["$orderby"] = autorest.Encode("query", orderby) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListVersionsSender sends the ListVersions request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionImagesClient) ListVersionsSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListVersionsResponder handles the response to the ListVersions request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionImagesClient) ListVersionsResponder(resp *http.Response) (result ListVirtualMachineExtensionImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensions.go deleted file mode 100644 index bf768eca7e0e..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineextensions.go +++ /dev/null @@ -1,442 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineExtensionsClient is the compute Client -type VirtualMachineExtensionsClient struct { - BaseClient -} - -// NewVirtualMachineExtensionsClient creates an instance of the VirtualMachineExtensionsClient client. -func NewVirtualMachineExtensionsClient(subscriptionID string) VirtualMachineExtensionsClient { - return NewVirtualMachineExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineExtensionsClientWithBaseURI creates an instance of the VirtualMachineExtensionsClient client using -// a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewVirtualMachineExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineExtensionsClient { - return VirtualMachineExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the extension should be created or updated. -// VMExtensionName - the name of the virtual machine extension. -// extensionParameters - parameters supplied to the Create Virtual Machine Extension operation. -func (client VirtualMachineExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtension) (result VirtualMachineExtensionsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, VMExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtension) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineExtensionsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the extension should be deleted. -// VMExtensionName - the name of the virtual machine extension. -func (client VirtualMachineExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string) (result VirtualMachineExtensionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, VMExtensionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineExtensionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine containing the extension. -// VMExtensionName - the name of the virtual machine extension. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, expand string) (result VirtualMachineExtension, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMName, VMExtensionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List the operation to get all extensions of a Virtual Machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine containing the extension. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineExtensionsClient) List(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineExtensionsListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, resourceGroupName, VMName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineExtensionsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Update the operation to update the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the extension should be updated. -// VMExtensionName - the name of the virtual machine extension. -// extensionParameters - parameters supplied to the Update Virtual Machine Extension operation. -func (client VirtualMachineExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtensionUpdate) (result VirtualMachineExtensionsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineExtensionsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, VMExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineExtensionsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, VMExtensionName string, extensionParameters VirtualMachineExtensionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineExtensionsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimages.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimages.go deleted file mode 100644 index 8c07cf5e5f4d..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimages.go +++ /dev/null @@ -1,508 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineImagesClient is the compute Client -type VirtualMachineImagesClient struct { - BaseClient -} - -// NewVirtualMachineImagesClient creates an instance of the VirtualMachineImagesClient client. -func NewVirtualMachineImagesClient(subscriptionID string) VirtualMachineImagesClient { - return NewVirtualMachineImagesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineImagesClientWithBaseURI creates an instance of the VirtualMachineImagesClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewVirtualMachineImagesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineImagesClient { - return VirtualMachineImagesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get gets a virtual machine image. -// Parameters: -// location - the name of a supported Azure region. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -// skus - a valid image SKU. -// version - a valid image SKU version. -func (client VirtualMachineImagesClient) Get(ctx context.Context, location string, publisherName string, offer string, skus string, version string) (result VirtualMachineImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, publisherName, offer, skus, version) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineImagesClient) GetPreparer(ctx context.Context, location string, publisherName string, offer string, skus string, version string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "skus": autorest.Encode("path", skus), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "version": autorest.Encode("path", version), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) GetResponder(resp *http.Response) (result VirtualMachineImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all virtual machine image versions for the specified location, publisher, offer, and SKU. -// Parameters: -// location - the name of a supported Azure region. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -// skus - a valid image SKU. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineImagesClient) List(ctx context.Context, location string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, location, publisherName, offer, skus, expand, top, orderby) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineImagesClient) ListPreparer(ctx context.Context, location string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "skus": autorest.Encode("path", skus), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - if len(orderby) > 0 { - queryParameters["$orderby"] = autorest.Encode("query", orderby) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) ListResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByEdgeZone gets a list of all virtual machine image versions for the specified edge zone -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -func (client VirtualMachineImagesClient) ListByEdgeZone(ctx context.Context, location string, edgeZone string) (result VMImagesInEdgeZoneListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListByEdgeZone") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListByEdgeZonePreparer(ctx, location, edgeZone) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", nil, "Failure preparing request") - return - } - - resp, err := client.ListByEdgeZoneSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", resp, "Failure sending request") - return - } - - result, err = client.ListByEdgeZoneResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListByEdgeZone", resp, "Failure responding to request") - return - } - - return -} - -// ListByEdgeZonePreparer prepares the ListByEdgeZone request. -func (client VirtualMachineImagesClient) ListByEdgeZonePreparer(ctx context.Context, location string, edgeZone string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/vmimages", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByEdgeZoneSender sends the ListByEdgeZone request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) ListByEdgeZoneSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByEdgeZoneResponder handles the response to the ListByEdgeZone request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) ListByEdgeZoneResponder(resp *http.Response) (result VMImagesInEdgeZoneListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListOffers gets a list of virtual machine image offers for the specified location and publisher. -// Parameters: -// location - the name of a supported Azure region. -// publisherName - a valid image publisher. -func (client VirtualMachineImagesClient) ListOffers(ctx context.Context, location string, publisherName string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListOffers") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListOffersPreparer(ctx, location, publisherName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", nil, "Failure preparing request") - return - } - - resp, err := client.ListOffersSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", resp, "Failure sending request") - return - } - - result, err = client.ListOffersResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListOffers", resp, "Failure responding to request") - return - } - - return -} - -// ListOffersPreparer prepares the ListOffers request. -func (client VirtualMachineImagesClient) ListOffersPreparer(ctx context.Context, location string, publisherName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListOffersSender sends the ListOffers request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) ListOffersSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListOffersResponder handles the response to the ListOffers request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) ListOffersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListPublishers gets a list of virtual machine image publishers for the specified Azure location. -// Parameters: -// location - the name of a supported Azure region. -func (client VirtualMachineImagesClient) ListPublishers(ctx context.Context, location string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListPublishers") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPublishersPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", nil, "Failure preparing request") - return - } - - resp, err := client.ListPublishersSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", resp, "Failure sending request") - return - } - - result, err = client.ListPublishersResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListPublishers", resp, "Failure responding to request") - return - } - - return -} - -// ListPublishersPreparer prepares the ListPublishers request. -func (client VirtualMachineImagesClient) ListPublishersPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListPublishersSender sends the ListPublishers request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) ListPublishersSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListPublishersResponder handles the response to the ListPublishers request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) ListPublishersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListSkus gets a list of virtual machine image SKUs for the specified location, publisher, and offer. -// Parameters: -// location - the name of a supported Azure region. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -func (client VirtualMachineImagesClient) ListSkus(ctx context.Context, location string, publisherName string, offer string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesClient.ListSkus") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListSkusPreparer(ctx, location, publisherName, offer) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", nil, "Failure preparing request") - return - } - - resp, err := client.ListSkusSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", resp, "Failure sending request") - return - } - - result, err = client.ListSkusResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesClient", "ListSkus", resp, "Failure responding to request") - return - } - - return -} - -// ListSkusPreparer prepares the ListSkus request. -func (client VirtualMachineImagesClient) ListSkusPreparer(ctx context.Context, location string, publisherName string, offer string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSkusSender sends the ListSkus request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesClient) ListSkusSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListSkusResponder handles the response to the ListSkus request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesClient) ListSkusResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimagesedgezone.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimagesedgezone.go deleted file mode 100644 index 576a70b53287..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineimagesedgezone.go +++ /dev/null @@ -1,445 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineImagesEdgeZoneClient is the compute Client -type VirtualMachineImagesEdgeZoneClient struct { - BaseClient -} - -// NewVirtualMachineImagesEdgeZoneClient creates an instance of the VirtualMachineImagesEdgeZoneClient client. -func NewVirtualMachineImagesEdgeZoneClient(subscriptionID string) VirtualMachineImagesEdgeZoneClient { - return NewVirtualMachineImagesEdgeZoneClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineImagesEdgeZoneClientWithBaseURI creates an instance of the VirtualMachineImagesEdgeZoneClient -// client using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI -// (sovereign clouds, Azure stack). -func NewVirtualMachineImagesEdgeZoneClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineImagesEdgeZoneClient { - return VirtualMachineImagesEdgeZoneClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get gets a virtual machine image in an edge zone. -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -// skus - a valid image SKU. -// version - a valid image SKU version. -func (client VirtualMachineImagesEdgeZoneClient) Get(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string) (result VirtualMachineImage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, location, edgeZone, publisherName, offer, skus, version) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineImagesEdgeZoneClient) GetPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "skus": autorest.Encode("path", skus), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "version": autorest.Encode("path", version), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesEdgeZoneClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesEdgeZoneClient) GetResponder(resp *http.Response) (result VirtualMachineImage, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all virtual machine image versions for the specified location, edge zone, publisher, offer, and -// SKU. -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -// skus - a valid image SKU. -// expand - the expand expression to apply on the operation. -// top - an integer value specifying the number of images to return that matches supplied values. -// orderby - specifies the order of the results returned. Formatted as an OData query. -func (client VirtualMachineImagesEdgeZoneClient) List(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, location, edgeZone, publisherName, offer, skus, expand, top, orderby) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineImagesEdgeZoneClient) ListPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, expand string, top *int32, orderby string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "skus": autorest.Encode("path", skus), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - if len(orderby) > 0 { - queryParameters["$orderby"] = autorest.Encode("query", orderby) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesEdgeZoneClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesEdgeZoneClient) ListResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListOffers gets a list of virtual machine image offers for the specified location, edge zone and publisher. -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -// publisherName - a valid image publisher. -func (client VirtualMachineImagesEdgeZoneClient) ListOffers(ctx context.Context, location string, edgeZone string, publisherName string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListOffers") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListOffersPreparer(ctx, location, edgeZone, publisherName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", nil, "Failure preparing request") - return - } - - resp, err := client.ListOffersSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", resp, "Failure sending request") - return - } - - result, err = client.ListOffersResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListOffers", resp, "Failure responding to request") - return - } - - return -} - -// ListOffersPreparer prepares the ListOffers request. -func (client VirtualMachineImagesEdgeZoneClient) ListOffersPreparer(ctx context.Context, location string, edgeZone string, publisherName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListOffersSender sends the ListOffers request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesEdgeZoneClient) ListOffersSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListOffersResponder handles the response to the ListOffers request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesEdgeZoneClient) ListOffersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListPublishers gets a list of virtual machine image publishers for the specified Azure location and edge zone. -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -func (client VirtualMachineImagesEdgeZoneClient) ListPublishers(ctx context.Context, location string, edgeZone string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListPublishers") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPublishersPreparer(ctx, location, edgeZone) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", nil, "Failure preparing request") - return - } - - resp, err := client.ListPublishersSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", resp, "Failure sending request") - return - } - - result, err = client.ListPublishersResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListPublishers", resp, "Failure responding to request") - return - } - - return -} - -// ListPublishersPreparer prepares the ListPublishers request. -func (client VirtualMachineImagesEdgeZoneClient) ListPublishersPreparer(ctx context.Context, location string, edgeZone string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListPublishersSender sends the ListPublishers request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesEdgeZoneClient) ListPublishersSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListPublishersResponder handles the response to the ListPublishers request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesEdgeZoneClient) ListPublishersResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListSkus gets a list of virtual machine image SKUs for the specified location, edge zone, publisher, and offer. -// Parameters: -// location - the name of a supported Azure region. -// edgeZone - the name of the edge zone. -// publisherName - a valid image publisher. -// offer - a valid image publisher offer. -func (client VirtualMachineImagesEdgeZoneClient) ListSkus(ctx context.Context, location string, edgeZone string, publisherName string, offer string) (result ListVirtualMachineImageResource, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineImagesEdgeZoneClient.ListSkus") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListSkusPreparer(ctx, location, edgeZone, publisherName, offer) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", nil, "Failure preparing request") - return - } - - resp, err := client.ListSkusSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", resp, "Failure sending request") - return - } - - result, err = client.ListSkusResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineImagesEdgeZoneClient", "ListSkus", resp, "Failure responding to request") - return - } - - return -} - -// ListSkusPreparer prepares the ListSkus request. -func (client VirtualMachineImagesEdgeZoneClient) ListSkusPreparer(ctx context.Context, location string, edgeZone string, publisherName string, offer string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "edgeZone": autorest.Encode("path", edgeZone), - "location": autorest.Encode("path", location), - "offer": autorest.Encode("path", offer), - "publisherName": autorest.Encode("path", publisherName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSkusSender sends the ListSkus request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineImagesEdgeZoneClient) ListSkusSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListSkusResponder handles the response to the ListSkus request. The method always -// closes the http.Response Body. -func (client VirtualMachineImagesEdgeZoneClient) ListSkusResponder(resp *http.Response) (result ListVirtualMachineImageResource, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Value), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineruncommands.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineruncommands.go deleted file mode 100644 index 3935fd45a07d..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachineruncommands.go +++ /dev/null @@ -1,689 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineRunCommandsClient is the compute Client -type VirtualMachineRunCommandsClient struct { - BaseClient -} - -// NewVirtualMachineRunCommandsClient creates an instance of the VirtualMachineRunCommandsClient client. -func NewVirtualMachineRunCommandsClient(subscriptionID string) VirtualMachineRunCommandsClient { - return NewVirtualMachineRunCommandsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineRunCommandsClientWithBaseURI creates an instance of the VirtualMachineRunCommandsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewVirtualMachineRunCommandsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineRunCommandsClient { - return VirtualMachineRunCommandsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update the run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the run command should be created or updated. -// runCommandName - the name of the virtual machine run command. -// runCommand - parameters supplied to the Create Virtual Machine RunCommand operation. -func (client VirtualMachineRunCommandsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommand) (result VirtualMachineRunCommandsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, runCommandName, runCommand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineRunCommandsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommand) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), - autorest.WithJSON(runCommand), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineRunCommandsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the run command should be deleted. -// runCommandName - the name of the virtual machine run command. -func (client VirtualMachineRunCommandsClient) Delete(ctx context.Context, resourceGroupName string, VMName string, runCommandName string) (result VirtualMachineRunCommandsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, runCommandName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineRunCommandsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) DeleteSender(req *http.Request) (future VirtualMachineRunCommandsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets specific run command for a subscription in a location. -// Parameters: -// location - the location upon which run commands is queried. -// commandID - the command id. -func (client VirtualMachineRunCommandsClient) Get(ctx context.Context, location string, commandID string) (result RunCommandDocument, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineRunCommandsClient", "Get", err.Error()) - } - - req, err := client.GetPreparer(ctx, location, commandID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineRunCommandsClient) GetPreparer(ctx context.Context, location string, commandID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "commandId": autorest.Encode("path", commandID), - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) GetResponder(resp *http.Response) (result RunCommandDocument, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetByVirtualMachine the operation to get the run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine containing the run command. -// runCommandName - the name of the virtual machine run command. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineRunCommandsClient) GetByVirtualMachine(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, expand string) (result VirtualMachineRunCommand, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.GetByVirtualMachine") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetByVirtualMachinePreparer(ctx, resourceGroupName, VMName, runCommandName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", nil, "Failure preparing request") - return - } - - resp, err := client.GetByVirtualMachineSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", resp, "Failure sending request") - return - } - - result, err = client.GetByVirtualMachineResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "GetByVirtualMachine", resp, "Failure responding to request") - return - } - - return -} - -// GetByVirtualMachinePreparer prepares the GetByVirtualMachine request. -func (client VirtualMachineRunCommandsClient) GetByVirtualMachinePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetByVirtualMachineSender sends the GetByVirtualMachine request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) GetByVirtualMachineSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetByVirtualMachineResponder handles the response to the GetByVirtualMachine request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) GetByVirtualMachineResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all available run commands for a subscription in a location. -// Parameters: -// location - the location upon which run commands is queried. -func (client VirtualMachineRunCommandsClient) List(ctx context.Context, location string) (result RunCommandListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.List") - defer func() { - sc := -1 - if result.rclr.Response.Response != nil { - sc = result.rclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineRunCommandsClient", "List", err.Error()) - } - - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", resp, "Failure sending request") - return - } - - result.rclr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "List", resp, "Failure responding to request") - return - } - if result.rclr.hasNextLink() && result.rclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineRunCommandsClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) ListResponder(resp *http.Response) (result RunCommandListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachineRunCommandsClient) listNextResults(ctx context.Context, lastResults RunCommandListResult) (result RunCommandListResult, err error) { - req, err := lastResults.runCommandListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineRunCommandsClient) ListComplete(ctx context.Context, location string) (result RunCommandListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, location) - return -} - -// ListByVirtualMachine the operation to get all run commands of a Virtual Machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine containing the run command. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineRunCommandsClient) ListByVirtualMachine(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineRunCommandsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.ListByVirtualMachine") - defer func() { - sc := -1 - if result.vmrclr.Response.Response != nil { - sc = result.vmrclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByVirtualMachineNextResults - req, err := client.ListByVirtualMachinePreparer(ctx, resourceGroupName, VMName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", nil, "Failure preparing request") - return - } - - resp, err := client.ListByVirtualMachineSender(req) - if err != nil { - result.vmrclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", resp, "Failure sending request") - return - } - - result.vmrclr, err = client.ListByVirtualMachineResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "ListByVirtualMachine", resp, "Failure responding to request") - return - } - if result.vmrclr.hasNextLink() && result.vmrclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByVirtualMachinePreparer prepares the ListByVirtualMachine request. -func (client VirtualMachineRunCommandsClient) ListByVirtualMachinePreparer(ctx context.Context, resourceGroupName string, VMName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByVirtualMachineSender sends the ListByVirtualMachine request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) ListByVirtualMachineSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByVirtualMachineResponder handles the response to the ListByVirtualMachine request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) ListByVirtualMachineResponder(resp *http.Response) (result VirtualMachineRunCommandsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByVirtualMachineNextResults retrieves the next set of results, if any. -func (client VirtualMachineRunCommandsClient) listByVirtualMachineNextResults(ctx context.Context, lastResults VirtualMachineRunCommandsListResult) (result VirtualMachineRunCommandsListResult, err error) { - req, err := lastResults.virtualMachineRunCommandsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByVirtualMachineSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByVirtualMachineResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "listByVirtualMachineNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByVirtualMachineComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineRunCommandsClient) ListByVirtualMachineComplete(ctx context.Context, resourceGroupName string, VMName string, expand string) (result VirtualMachineRunCommandsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.ListByVirtualMachine") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByVirtualMachine(ctx, resourceGroupName, VMName, expand) - return -} - -// Update the operation to update the run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine where the run command should be updated. -// runCommandName - the name of the virtual machine run command. -// runCommand - parameters supplied to the Update Virtual Machine RunCommand operation. -func (client VirtualMachineRunCommandsClient) Update(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (result VirtualMachineRunCommandsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineRunCommandsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, runCommandName, runCommand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineRunCommandsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineRunCommandsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommands/{runCommandName}", pathParameters), - autorest.WithJSON(runCommand), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineRunCommandsClient) UpdateSender(req *http.Request) (future VirtualMachineRunCommandsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineRunCommandsClient) UpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachines.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachines.go deleted file mode 100644 index 934842c07016..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachines.go +++ /dev/null @@ -1,2205 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachinesClient is the compute Client -type VirtualMachinesClient struct { - BaseClient -} - -// NewVirtualMachinesClient creates an instance of the VirtualMachinesClient client. -func NewVirtualMachinesClient(subscriptionID string) VirtualMachinesClient { - return NewVirtualMachinesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachinesClientWithBaseURI creates an instance of the VirtualMachinesClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewVirtualMachinesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachinesClient { - return VirtualMachinesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// AssessPatches assess patches on the VM. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) AssessPatches(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesAssessPatchesFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.AssessPatches") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.AssessPatchesPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "AssessPatches", nil, "Failure preparing request") - return - } - - result, err = client.AssessPatchesSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "AssessPatches", result.Response(), "Failure sending request") - return - } - - return -} - -// AssessPatchesPreparer prepares the AssessPatches request. -func (client VirtualMachinesClient) AssessPatchesPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/assessPatches", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// AssessPatchesSender sends the AssessPatches request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) AssessPatchesSender(req *http.Request) (future VirtualMachinesAssessPatchesFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// AssessPatchesResponder handles the response to the AssessPatches request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) AssessPatchesResponder(resp *http.Response) (result VirtualMachineAssessPatchesResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Capture captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create -// similar VMs. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// parameters - parameters supplied to the Capture Virtual Machine operation. -func (client VirtualMachinesClient) Capture(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineCaptureParameters) (result VirtualMachinesCaptureFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Capture") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.VhdPrefix", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.DestinationContainerName", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.OverwriteVhds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachinesClient", "Capture", err.Error()) - } - - req, err := client.CapturePreparer(ctx, resourceGroupName, VMName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Capture", nil, "Failure preparing request") - return - } - - result, err = client.CaptureSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Capture", result.Response(), "Failure sending request") - return - } - - return -} - -// CapturePreparer prepares the Capture request. -func (client VirtualMachinesClient) CapturePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineCaptureParameters) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CaptureSender sends the Capture request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) CaptureSender(req *http.Request) (future VirtualMachinesCaptureFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CaptureResponder handles the response to the Capture request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) CaptureResponder(resp *http.Response) (result VirtualMachineCaptureResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ConvertToManagedDisks converts virtual machine disks from blob-based to managed disks. Virtual machine must be -// stop-deallocated before invoking this operation. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) ConvertToManagedDisks(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesConvertToManagedDisksFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ConvertToManagedDisks") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ConvertToManagedDisksPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ConvertToManagedDisks", nil, "Failure preparing request") - return - } - - result, err = client.ConvertToManagedDisksSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ConvertToManagedDisks", result.Response(), "Failure sending request") - return - } - - return -} - -// ConvertToManagedDisksPreparer prepares the ConvertToManagedDisks request. -func (client VirtualMachinesClient) ConvertToManagedDisksPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ConvertToManagedDisksSender sends the ConvertToManagedDisks request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ConvertToManagedDisksSender(req *http.Request) (future VirtualMachinesConvertToManagedDisksFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ConvertToManagedDisksResponder handles the response to the ConvertToManagedDisks request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ConvertToManagedDisksResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// CreateOrUpdate the operation to create or update a virtual machine. Please note some properties can be set only -// during virtual machine creation. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// parameters - parameters supplied to the Create Virtual Machine operation. -func (client VirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachine) (result VirtualMachinesCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.VirtualMachineProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - }}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachinesClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachinesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachine) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - parameters.Resources = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachinesCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachine, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Deallocate shuts down the virtual machine and releases the compute resources. You are not billed for the compute -// resources that this virtual machine uses. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// hibernate - optional parameter to hibernate a virtual machine. (Feature in Preview) -func (client VirtualMachinesClient) Deallocate(ctx context.Context, resourceGroupName string, VMName string, hibernate *bool) (result VirtualMachinesDeallocateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Deallocate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMName, hibernate) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Deallocate", nil, "Failure preparing request") - return - } - - result, err = client.DeallocateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Deallocate", result.Response(), "Failure sending request") - return - } - - return -} - -// DeallocatePreparer prepares the Deallocate request. -func (client VirtualMachinesClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMName string, hibernate *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if hibernate != nil { - queryParameters["hibernate"] = autorest.Encode("query", *hibernate) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeallocateSender sends the Deallocate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) DeallocateSender(req *http.Request) (future VirtualMachinesDeallocateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeallocateResponder handles the response to the Deallocate request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Delete the operation to delete a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// forceDeletion - optional parameter to force delete virtual machines. -func (client VirtualMachinesClient) Delete(ctx context.Context, resourceGroupName string, VMName string, forceDeletion *bool) (result VirtualMachinesDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMName, forceDeletion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachinesClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMName string, forceDeletion *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if forceDeletion != nil { - queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) DeleteSender(req *http.Request) (future VirtualMachinesDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Generalize sets the OS state of the virtual machine to generalized. It is recommended to sysprep the virtual machine -// before performing this operation.
    For Windows, please refer to [Create a managed image of a generalized VM in -// Azure](https://docs.microsoft.com/azure/virtual-machines/windows/capture-image-resource).
    For Linux, please refer -// to [How to create an image of a virtual machine or -// VHD](https://docs.microsoft.com/azure/virtual-machines/linux/capture-image). -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) Generalize(ctx context.Context, resourceGroupName string, VMName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Generalize") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GeneralizePreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", nil, "Failure preparing request") - return - } - - resp, err := client.GeneralizeSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", resp, "Failure sending request") - return - } - - result, err = client.GeneralizeResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Generalize", resp, "Failure responding to request") - return - } - - return -} - -// GeneralizePreparer prepares the Generalize request. -func (client VirtualMachinesClient) GeneralizePreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GeneralizeSender sends the Generalize request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) GeneralizeSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GeneralizeResponder handles the response to the Generalize request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) GeneralizeResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get retrieves information about the model view or the instance view of a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// expand - the expand expression to apply on the operation. 'InstanceView' retrieves a snapshot of the runtime -// properties of the virtual machine that is managed by the platform and can change outside of control plane -// operations. 'UserData' retrieves the UserData property as part of the VM model view that was provided by the -// user during the VM Create/Update operation. -func (client VirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, VMName string, expand InstanceViewTypes) (result VirtualMachine, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachinesClient) GetPreparer(ctx context.Context, resourceGroupName string, VMName string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) GetResponder(resp *http.Response) (result VirtualMachine, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// InstallPatches installs patches on the VM. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// installPatchesInput - input for InstallPatches as directly received by the API -func (client VirtualMachinesClient) InstallPatches(ctx context.Context, resourceGroupName string, VMName string, installPatchesInput VirtualMachineInstallPatchesParameters) (result VirtualMachinesInstallPatchesFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.InstallPatches") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.InstallPatchesPreparer(ctx, resourceGroupName, VMName, installPatchesInput) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstallPatches", nil, "Failure preparing request") - return - } - - result, err = client.InstallPatchesSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstallPatches", result.Response(), "Failure sending request") - return - } - - return -} - -// InstallPatchesPreparer prepares the InstallPatches request. -func (client VirtualMachinesClient) InstallPatchesPreparer(ctx context.Context, resourceGroupName string, VMName string, installPatchesInput VirtualMachineInstallPatchesParameters) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/installPatches", pathParameters), - autorest.WithJSON(installPatchesInput), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// InstallPatchesSender sends the InstallPatches request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) InstallPatchesSender(req *http.Request) (future VirtualMachinesInstallPatchesFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// InstallPatchesResponder handles the response to the InstallPatches request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) InstallPatchesResponder(resp *http.Response) (result VirtualMachineInstallPatchesResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// InstanceView retrieves information about the run-time state of a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) InstanceView(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachineInstanceView, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.InstanceView") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.InstanceViewPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", nil, "Failure preparing request") - return - } - - resp, err := client.InstanceViewSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", resp, "Failure sending request") - return - } - - result, err = client.InstanceViewResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "InstanceView", resp, "Failure responding to request") - return - } - - return -} - -// InstanceViewPreparer prepares the InstanceView request. -func (client VirtualMachinesClient) InstanceViewPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// InstanceViewSender sends the InstanceView request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) InstanceViewSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// InstanceViewResponder handles the response to the InstanceView request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) InstanceViewResponder(resp *http.Response) (result VirtualMachineInstanceView, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to -// get the next page of virtual machines. -// Parameters: -// resourceGroupName - the name of the resource group. -// filter - the system query option to filter VMs returned in the response. Allowed value is -// 'virtualMachineScaleSet/id' eq -// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}' -func (client VirtualMachinesClient) List(ctx context.Context, resourceGroupName string, filter string) (result VirtualMachineListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.List") - defer func() { - sc := -1 - if result.vmlr.Response.Response != nil { - sc = result.vmlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.vmlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", resp, "Failure sending request") - return - } - - result.vmlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "List", resp, "Failure responding to request") - return - } - if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachinesClient) ListPreparer(ctx context.Context, resourceGroupName string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ListResponder(resp *http.Response) (result VirtualMachineListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachinesClient) listNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { - req, err := lastResults.virtualMachineListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachinesClient) ListComplete(ctx context.Context, resourceGroupName string, filter string) (result VirtualMachineListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, filter) - return -} - -// ListAll lists all of the virtual machines in the specified subscription. Use the nextLink property in the response -// to get the next page of virtual machines. -// Parameters: -// statusOnly - statusOnly=true enables fetching run time status of all Virtual Machines in the subscription. -// filter - the system query option to filter VMs returned in the response. Allowed value is -// 'virtualMachineScaleSet/id' eq -// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}' -func (client VirtualMachinesClient) ListAll(ctx context.Context, statusOnly string, filter string) (result VirtualMachineListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAll") - defer func() { - sc := -1 - if result.vmlr.Response.Response != nil { - sc = result.vmlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listAllNextResults - req, err := client.ListAllPreparer(ctx, statusOnly, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", nil, "Failure preparing request") - return - } - - resp, err := client.ListAllSender(req) - if err != nil { - result.vmlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", resp, "Failure sending request") - return - } - - result.vmlr, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAll", resp, "Failure responding to request") - return - } - if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListAllPreparer prepares the ListAll request. -func (client VirtualMachinesClient) ListAllPreparer(ctx context.Context, statusOnly string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(statusOnly) > 0 { - queryParameters["statusOnly"] = autorest.Encode("query", statusOnly) - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAllSender sends the ListAll request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ListAllSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAllResponder handles the response to the ListAll request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ListAllResponder(resp *http.Response) (result VirtualMachineListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAllNextResults retrieves the next set of results, if any. -func (client VirtualMachinesClient) listAllNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { - req, err := lastResults.virtualMachineListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAllSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listAllNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAllComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachinesClient) ListAllComplete(ctx context.Context, statusOnly string, filter string) (result VirtualMachineListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAll") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListAll(ctx, statusOnly, filter) - return -} - -// ListAvailableSizes lists all available virtual machine sizes to which the specified virtual machine can be resized. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) ListAvailableSizes(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachineSizeListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListAvailableSizes") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListAvailableSizesPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", nil, "Failure preparing request") - return - } - - resp, err := client.ListAvailableSizesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", resp, "Failure sending request") - return - } - - result, err = client.ListAvailableSizesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListAvailableSizes", resp, "Failure responding to request") - return - } - - return -} - -// ListAvailableSizesPreparer prepares the ListAvailableSizes request. -func (client VirtualMachinesClient) ListAvailableSizesPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAvailableSizesSender sends the ListAvailableSizes request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ListAvailableSizesSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAvailableSizesResponder handles the response to the ListAvailableSizes request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ListAvailableSizesResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// ListByLocation gets all the virtual machines under the specified subscription for the specified location. -// Parameters: -// location - the location for which virtual machines under the subscription are queried. -func (client VirtualMachinesClient) ListByLocation(ctx context.Context, location string) (result VirtualMachineListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListByLocation") - defer func() { - sc := -1 - if result.vmlr.Response.Response != nil { - sc = result.vmlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachinesClient", "ListByLocation", err.Error()) - } - - result.fn = client.listByLocationNextResults - req, err := client.ListByLocationPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", nil, "Failure preparing request") - return - } - - resp, err := client.ListByLocationSender(req) - if err != nil { - result.vmlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", resp, "Failure sending request") - return - } - - result.vmlr, err = client.ListByLocationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "ListByLocation", resp, "Failure responding to request") - return - } - if result.vmlr.hasNextLink() && result.vmlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByLocationPreparer prepares the ListByLocation request. -func (client VirtualMachinesClient) ListByLocationPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachines", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByLocationSender sends the ListByLocation request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ListByLocationSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByLocationResponder handles the response to the ListByLocation request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ListByLocationResponder(resp *http.Response) (result VirtualMachineListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByLocationNextResults retrieves the next set of results, if any. -func (client VirtualMachinesClient) listByLocationNextResults(ctx context.Context, lastResults VirtualMachineListResult) (result VirtualMachineListResult, err error) { - req, err := lastResults.virtualMachineListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByLocationSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByLocationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "listByLocationNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByLocationComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachinesClient) ListByLocationComplete(ctx context.Context, location string) (result VirtualMachineListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.ListByLocation") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByLocation(ctx, location) - return -} - -// PerformMaintenance the operation to perform maintenance on a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesPerformMaintenanceFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.PerformMaintenance") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PerformMaintenance", nil, "Failure preparing request") - return - } - - result, err = client.PerformMaintenanceSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PerformMaintenance", result.Response(), "Failure sending request") - return - } - - return -} - -// PerformMaintenancePreparer prepares the PerformMaintenance request. -func (client VirtualMachinesClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachinesPerformMaintenanceFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// PowerOff the operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same -// provisioned resources. You are still charged for this virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates -// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not -// specified -func (client VirtualMachinesClient) PowerOff(ctx context.Context, resourceGroupName string, VMName string, skipShutdown *bool) (result VirtualMachinesPowerOffFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.PowerOff") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMName, skipShutdown) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PowerOff", nil, "Failure preparing request") - return - } - - result, err = client.PowerOffSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "PowerOff", result.Response(), "Failure sending request") - return - } - - return -} - -// PowerOffPreparer prepares the PowerOff request. -func (client VirtualMachinesClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMName string, skipShutdown *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if skipShutdown != nil { - queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) - } else { - queryParameters["skipShutdown"] = autorest.Encode("query", false) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PowerOffSender sends the PowerOff request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) PowerOffSender(req *http.Request) (future VirtualMachinesPowerOffFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PowerOffResponder handles the response to the PowerOff request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reapply the operation to reapply a virtual machine's state. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) Reapply(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesReapplyFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Reapply") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReapplyPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reapply", nil, "Failure preparing request") - return - } - - result, err = client.ReapplySender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reapply", result.Response(), "Failure sending request") - return - } - - return -} - -// ReapplyPreparer prepares the Reapply request. -func (client VirtualMachinesClient) ReapplyPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reapply", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReapplySender sends the Reapply request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ReapplySender(req *http.Request) (future VirtualMachinesReapplyFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReapplyResponder handles the response to the Reapply request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ReapplyResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Redeploy shuts down the virtual machine, moves it to a new node, and powers it back on. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) Redeploy(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesRedeployFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Redeploy") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RedeployPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Redeploy", nil, "Failure preparing request") - return - } - - result, err = client.RedeploySender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Redeploy", result.Response(), "Failure sending request") - return - } - - return -} - -// RedeployPreparer prepares the Redeploy request. -func (client VirtualMachinesClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RedeploySender sends the Redeploy request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) RedeploySender(req *http.Request) (future VirtualMachinesRedeployFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RedeployResponder handles the response to the Redeploy request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reimage reimages the virtual machine which has an ephemeral OS disk back to its initial state. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// parameters - parameters supplied to the Reimage Virtual Machine operation. -func (client VirtualMachinesClient) Reimage(ctx context.Context, resourceGroupName string, VMName string, parameters *VirtualMachineReimageParameters) (result VirtualMachinesReimageFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Reimage") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimagePreparer(ctx, resourceGroupName, VMName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reimage", nil, "Failure preparing request") - return - } - - result, err = client.ReimageSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Reimage", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimagePreparer prepares the Reimage request. -func (client VirtualMachinesClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters *VirtualMachineReimageParameters) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/reimage", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if parameters != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(parameters)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageSender sends the Reimage request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) ReimageSender(req *http.Request) (future VirtualMachinesReimageFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageResponder handles the response to the Reimage request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Restart the operation to restart a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) Restart(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RestartPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client VirtualMachinesClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) RestartSender(req *http.Request) (future VirtualMachinesRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// RetrieveBootDiagnosticsData the operation to retrieve SAS URIs for a virtual machine's boot diagnostic logs. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// sasURIExpirationTimeInMinutes - expiration duration in minutes for the SAS URIs with a value between 1 to -// 1440 minutes.

    NOTE: If not specified, SAS URIs will be generated with a default expiration duration -// of 120 minutes. -func (client VirtualMachinesClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, VMName string, sasURIExpirationTimeInMinutes *int32) (result RetrieveBootDiagnosticsDataResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.RetrieveBootDiagnosticsData") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RetrieveBootDiagnosticsDataPreparer(ctx, resourceGroupName, VMName, sasURIExpirationTimeInMinutes) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", nil, "Failure preparing request") - return - } - - resp, err := client.RetrieveBootDiagnosticsDataSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", resp, "Failure sending request") - return - } - - result, err = client.RetrieveBootDiagnosticsDataResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RetrieveBootDiagnosticsData", resp, "Failure responding to request") - return - } - - return -} - -// RetrieveBootDiagnosticsDataPreparer prepares the RetrieveBootDiagnosticsData request. -func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataPreparer(ctx context.Context, resourceGroupName string, VMName string, sasURIExpirationTimeInMinutes *int32) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if sasURIExpirationTimeInMinutes != nil { - queryParameters["sasUriExpirationTimeInMinutes"] = autorest.Encode("query", *sasURIExpirationTimeInMinutes) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/retrieveBootDiagnosticsData", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RetrieveBootDiagnosticsDataSender sends the RetrieveBootDiagnosticsData request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// RetrieveBootDiagnosticsDataResponder handles the response to the RetrieveBootDiagnosticsData request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) RetrieveBootDiagnosticsDataResponder(resp *http.Response) (result RetrieveBootDiagnosticsDataResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// RunCommand run command on the VM. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// parameters - parameters supplied to the Run command operation. -func (client VirtualMachinesClient) RunCommand(ctx context.Context, resourceGroupName string, VMName string, parameters RunCommandInput) (result VirtualMachinesRunCommandFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.RunCommand") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.CommandID", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachinesClient", "RunCommand", err.Error()) - } - - req, err := client.RunCommandPreparer(ctx, resourceGroupName, VMName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RunCommand", nil, "Failure preparing request") - return - } - - result, err = client.RunCommandSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "RunCommand", result.Response(), "Failure sending request") - return - } - - return -} - -// RunCommandPreparer prepares the RunCommand request. -func (client VirtualMachinesClient) RunCommandPreparer(ctx context.Context, resourceGroupName string, VMName string, parameters RunCommandInput) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RunCommandSender sends the RunCommand request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) RunCommandSender(req *http.Request) (future VirtualMachinesRunCommandFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RunCommandResponder handles the response to the RunCommand request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) RunCommandResponder(resp *http.Response) (result RunCommandResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// SimulateEviction the operation to simulate the eviction of spot virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) SimulateEviction(ctx context.Context, resourceGroupName string, VMName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.SimulateEviction") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.SimulateEvictionPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", nil, "Failure preparing request") - return - } - - resp, err := client.SimulateEvictionSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", resp, "Failure sending request") - return - } - - result, err = client.SimulateEvictionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "SimulateEviction", resp, "Failure responding to request") - return - } - - return -} - -// SimulateEvictionPreparer prepares the SimulateEviction request. -func (client VirtualMachinesClient) SimulateEvictionPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// SimulateEvictionSender sends the SimulateEviction request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) SimulateEvictionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// SimulateEvictionResponder handles the response to the SimulateEviction request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) SimulateEvictionResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Start the operation to start a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -func (client VirtualMachinesClient) Start(ctx context.Context, resourceGroupName string, VMName string) (result VirtualMachinesStartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Start") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartPreparer(ctx, resourceGroupName, VMName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Start", nil, "Failure preparing request") - return - } - - result, err = client.StartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Start", result.Response(), "Failure sending request") - return - } - - return -} - -// StartPreparer prepares the Start request. -func (client VirtualMachinesClient) StartPreparer(ctx context.Context, resourceGroupName string, VMName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartSender sends the Start request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) StartSender(req *http.Request) (future VirtualMachinesStartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartResponder handles the response to the Start request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update the operation to update a virtual machine. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMName - the name of the virtual machine. -// parameters - parameters supplied to the Update Virtual Machine operation. -func (client VirtualMachinesClient) Update(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineUpdate) (result VirtualMachinesUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachinesClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachinesClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachinesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMName string, parameters VirtualMachineUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmName": autorest.Encode("path", VMName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachinesClient) UpdateSender(req *http.Request) (future VirtualMachinesUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachinesClient) UpdateResponder(resp *http.Response) (result VirtualMachine, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetextensions.go deleted file mode 100644 index d9b42d118360..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetextensions.go +++ /dev/null @@ -1,483 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetExtensionsClient is the compute Client -type VirtualMachineScaleSetExtensionsClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetExtensionsClient creates an instance of the VirtualMachineScaleSetExtensionsClient client. -func NewVirtualMachineScaleSetExtensionsClient(subscriptionID string) VirtualMachineScaleSetExtensionsClient { - return NewVirtualMachineScaleSetExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetExtensionsClientWithBaseURI creates an instance of the -// VirtualMachineScaleSetExtensionsClient client using a custom endpoint. Use this when interacting with an Azure -// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewVirtualMachineScaleSetExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetExtensionsClient { - return VirtualMachineScaleSetExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update an extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set where the extension should be create or updated. -// vmssExtensionName - the name of the VM scale set extension. -// extensionParameters - parameters supplied to the Create VM scale set Extension operation. -func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (result VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtension) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - "vmssExtensionName": autorest.Encode("path", vmssExtensionName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - extensionParameters.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set where the extension should be deleted. -// vmssExtensionName - the name of the VM scale set extension. -func (client VirtualMachineScaleSetExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (result VirtualMachineScaleSetExtensionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineScaleSetExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - "vmssExtensionName": autorest.Encode("path", vmssExtensionName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetExtensionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set containing the extension. -// vmssExtensionName - the name of the VM scale set extension. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineScaleSetExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (result VirtualMachineScaleSetExtension, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineScaleSetExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - "vmssExtensionName": autorest.Encode("path", vmssExtensionName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all extensions in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set containing the extension. -func (client VirtualMachineScaleSetExtensionsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List") - defer func() { - sc := -1 - if result.vmsselr.Response.Response != nil { - sc = result.vmsselr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.vmsselr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure sending request") - return - } - - result.vmsselr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "List", resp, "Failure responding to request") - return - } - if result.vmsselr.hasNextLink() && result.vmsselr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineScaleSetExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetExtensionListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetExtensionsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetExtensionListResult) (result VirtualMachineScaleSetExtensionListResult, err error) { - req, err := lastResults.virtualMachineScaleSetExtensionListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetExtensionsClient) ListComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetExtensionListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, VMScaleSetName) - return -} - -// Update the operation to update an extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set where the extension should be updated. -// vmssExtensionName - the name of the VM scale set extension. -// extensionParameters - parameters supplied to the Update VM scale set Extension operation. -func (client VirtualMachineScaleSetExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (result VirtualMachineScaleSetExtensionsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetExtensionsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, vmssExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetExtensionsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineScaleSetExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, vmssExtensionName string, extensionParameters VirtualMachineScaleSetExtensionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - "vmssExtensionName": autorest.Encode("path", vmssExtensionName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - extensionParameters.Name = nil - extensionParameters.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetExtensionsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetrollingupgrades.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetrollingupgrades.go deleted file mode 100644 index a1b349866ced..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetrollingupgrades.go +++ /dev/null @@ -1,346 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetRollingUpgradesClient is the compute Client -type VirtualMachineScaleSetRollingUpgradesClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetRollingUpgradesClient creates an instance of the -// VirtualMachineScaleSetRollingUpgradesClient client. -func NewVirtualMachineScaleSetRollingUpgradesClient(subscriptionID string) VirtualMachineScaleSetRollingUpgradesClient { - return NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI creates an instance of the -// VirtualMachineScaleSetRollingUpgradesClient client using a custom endpoint. Use this when interacting with an Azure -// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewVirtualMachineScaleSetRollingUpgradesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetRollingUpgradesClient { - return VirtualMachineScaleSetRollingUpgradesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Cancel cancels the current virtual machine scale set rolling upgrade. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetRollingUpgradesClient) Cancel(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesCancelFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.Cancel") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CancelPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "Cancel", nil, "Failure preparing request") - return - } - - result, err = client.CancelSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "Cancel", result.Response(), "Failure sending request") - return - } - - return -} - -// CancelPreparer prepares the Cancel request. -func (client VirtualMachineScaleSetRollingUpgradesClient) CancelPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CancelSender sends the Cancel request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetRollingUpgradesClient) CancelSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesCancelFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CancelResponder handles the response to the Cancel request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetRollingUpgradesClient) CancelResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// GetLatest gets the status of the latest virtual machine scale set rolling upgrade. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatest(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result RollingUpgradeStatusInfo, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.GetLatest") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetLatestPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", nil, "Failure preparing request") - return - } - - resp, err := client.GetLatestSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", resp, "Failure sending request") - return - } - - result, err = client.GetLatestResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "GetLatest", resp, "Failure responding to request") - return - } - - return -} - -// GetLatestPreparer prepares the GetLatest request. -func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetLatestSender sends the GetLatest request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetLatestResponder handles the response to the GetLatest request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetRollingUpgradesClient) GetLatestResponder(resp *http.Response) (result RollingUpgradeStatusInfo, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// StartExtensionUpgrade starts a rolling upgrade to move all extensions for all virtual machine scale set instances to -// the latest available extension version. Instances which are already running the latest extension versions are not -// affected. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgrade(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.StartExtensionUpgrade") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartExtensionUpgradePreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartExtensionUpgrade", nil, "Failure preparing request") - return - } - - result, err = client.StartExtensionUpgradeSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartExtensionUpgrade", result.Response(), "Failure sending request") - return - } - - return -} - -// StartExtensionUpgradePreparer prepares the StartExtensionUpgrade request. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensionRollingUpgrade", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartExtensionUpgradeSender sends the StartExtensionUpgrade request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradeSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesStartExtensionUpgradeFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartExtensionUpgradeResponder handles the response to the StartExtensionUpgrade request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartExtensionUpgradeResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// StartOSUpgrade starts a rolling upgrade to move all virtual machine scale set instances to the latest available -// Platform Image OS version. Instances which are already running the latest available OS version are not affected. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgrade(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetRollingUpgradesClient.StartOSUpgrade") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartOSUpgradePreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartOSUpgrade", nil, "Failure preparing request") - return - } - - result, err = client.StartOSUpgradeSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetRollingUpgradesClient", "StartOSUpgrade", result.Response(), "Failure sending request") - return - } - - return -} - -// StartOSUpgradePreparer prepares the StartOSUpgrade request. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartOSUpgradeSender sends the StartOSUpgrade request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradeSender(req *http.Request) (future VirtualMachineScaleSetRollingUpgradesStartOSUpgradeFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartOSUpgradeResponder handles the response to the StartOSUpgrade request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetRollingUpgradesClient) StartOSUpgradeResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesets.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesets.go deleted file mode 100644 index 5e8af862fe83..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesets.go +++ /dev/null @@ -1,2162 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetsClient is the compute Client -type VirtualMachineScaleSetsClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetsClient creates an instance of the VirtualMachineScaleSetsClient client. -func NewVirtualMachineScaleSetsClient(subscriptionID string) VirtualMachineScaleSetsClient { - return NewVirtualMachineScaleSetsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetsClientWithBaseURI creates an instance of the VirtualMachineScaleSetsClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewVirtualMachineScaleSetsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetsClient { - return VirtualMachineScaleSetsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// ConvertToSinglePlacementGroup converts SinglePlacementGroup property to false for a existing virtual machine scale -// set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the virtual machine scale set to create or update. -// parameters - the input object for ConvertToSinglePlacementGroup API. -func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroup(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VMScaleSetConvertToSinglePlacementGroupInput) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ConvertToSinglePlacementGroup") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ConvertToSinglePlacementGroupPreparer(ctx, resourceGroupName, VMScaleSetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", nil, "Failure preparing request") - return - } - - resp, err := client.ConvertToSinglePlacementGroupSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", resp, "Failure sending request") - return - } - - result, err = client.ConvertToSinglePlacementGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ConvertToSinglePlacementGroup", resp, "Failure responding to request") - return - } - - return -} - -// ConvertToSinglePlacementGroupPreparer prepares the ConvertToSinglePlacementGroup request. -func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VMScaleSetConvertToSinglePlacementGroupInput) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/convertToSinglePlacementGroup", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ConvertToSinglePlacementGroupSender sends the ConvertToSinglePlacementGroup request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ConvertToSinglePlacementGroupResponder handles the response to the ConvertToSinglePlacementGroup request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ConvertToSinglePlacementGroupResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByClosing()) - result.Response = resp - return -} - -// CreateOrUpdate create or update a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set to create or update. -// parameters - the scale set object. -func (client VirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSet) (result VirtualMachineScaleSetsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, - {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(5), Chain: nil}, - }}, - {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, - {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(5), Chain: nil}, - }}, - {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.InclusiveMaximum, Rule: int64(100), Chain: nil}, - {Target: "parameters.VirtualMachineScaleSetProperties.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}, - }}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineScaleSetsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSet) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Deallocate deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and releases the -// compute resources. You are not billed for the compute resources that this virtual machine scale set deallocates. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) Deallocate(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsDeallocateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Deallocate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Deallocate", nil, "Failure preparing request") - return - } - - result, err = client.DeallocateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Deallocate", result.Response(), "Failure sending request") - return - } - - return -} - -// DeallocatePreparer prepares the Deallocate request. -func (client VirtualMachineScaleSetsClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeallocateSender sends the Deallocate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) DeallocateSender(req *http.Request) (future VirtualMachineScaleSetsDeallocateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeallocateResponder handles the response to the Deallocate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Delete deletes a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// forceDeletion - optional parameter to force delete a VM scale set. (Feature in Preview) -func (client VirtualMachineScaleSetsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, forceDeletion *bool) (result VirtualMachineScaleSetsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, forceDeletion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineScaleSetsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, forceDeletion *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if forceDeletion != nil { - queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// DeleteInstances deletes virtual machines in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -// forceDeletion - optional parameter to force delete virtual machines from the VM scale set. (Feature in -// Preview) -func (client VirtualMachineScaleSetsClient) DeleteInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs, forceDeletion *bool) (result VirtualMachineScaleSetsDeleteInstancesFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.DeleteInstances") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: VMInstanceIDs, - Constraints: []validation.Constraint{{Target: "VMInstanceIDs.InstanceIds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "DeleteInstances", err.Error()) - } - - req, err := client.DeleteInstancesPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs, forceDeletion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "DeleteInstances", nil, "Failure preparing request") - return - } - - result, err = client.DeleteInstancesSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "DeleteInstances", result.Response(), "Failure sending request") - return - } - - return -} - -// DeleteInstancesPreparer prepares the DeleteInstances request. -func (client VirtualMachineScaleSetsClient) DeleteInstancesPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs, forceDeletion *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if forceDeletion != nil { - queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete", pathParameters), - autorest.WithJSON(VMInstanceIDs), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteInstancesSender sends the DeleteInstances request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) DeleteInstancesSender(req *http.Request) (future VirtualMachineScaleSetsDeleteInstancesFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteInstancesResponder handles the response to the DeleteInstances request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) DeleteInstancesResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// ForceRecoveryServiceFabricPlatformUpdateDomainWalk manual platform update domain walk to update virtual machines in -// a service fabric virtual machine scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// platformUpdateDomain - the platform update domain for which a manual recovery walk is requested -// zone - the zone in which the manual recovery walk is requested for cross zone virtual machine scale set -// placementGroupID - the placement group id for which the manual recovery walk is requested. -func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalk(ctx context.Context, resourceGroupName string, VMScaleSetName string, platformUpdateDomain int32, zone string, placementGroupID string) (result RecoveryWalkResponse, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ForceRecoveryServiceFabricPlatformUpdateDomainWalk") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer(ctx, resourceGroupName, VMScaleSetName, platformUpdateDomain, zone, placementGroupID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", nil, "Failure preparing request") - return - } - - resp, err := client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", resp, "Failure sending request") - return - } - - result, err = client.ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ForceRecoveryServiceFabricPlatformUpdateDomainWalk", resp, "Failure responding to request") - return - } - - return -} - -// ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer prepares the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. -func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, platformUpdateDomain int32, zone string, placementGroupID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "platformUpdateDomain": autorest.Encode("query", platformUpdateDomain), - } - if len(zone) > 0 { - queryParameters["zone"] = autorest.Encode("query", zone) - } - if len(placementGroupID) > 0 { - queryParameters["placementGroupId"] = autorest.Encode("query", placementGroupID) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender sends the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder handles the response to the ForceRecoveryServiceFabricPlatformUpdateDomainWalk request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ForceRecoveryServiceFabricPlatformUpdateDomainWalkResponder(resp *http.Response) (result RecoveryWalkResponse, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Get display information about a virtual machine scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// expand - the expand expression to apply on the operation. 'UserData' retrieves the UserData property of the -// VM scale set that was provided by the user during the VM scale set Create/Update operation -func (client VirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, expand ExpandTypesForGetVMScaleSets) (result VirtualMachineScaleSet, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineScaleSetsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, expand ExpandTypesForGetVMScaleSets) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetInstanceView gets the status of a VM scale set instance. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetInstanceView, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetInstanceView") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", nil, "Failure preparing request") - return - } - - resp, err := client.GetInstanceViewSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", resp, "Failure sending request") - return - } - - result, err = client.GetInstanceViewResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetInstanceView", resp, "Failure responding to request") - return - } - - return -} - -// GetInstanceViewPreparer prepares the GetInstanceView request. -func (client VirtualMachineScaleSetsClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetInstanceViewSender sends the GetInstanceView request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) GetInstanceViewResponder(resp *http.Response) (result VirtualMachineScaleSetInstanceView, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetOSUpgradeHistory gets list of OS upgrades on a VM scale set instance. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistory(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListOSUpgradeHistoryPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetOSUpgradeHistory") - defer func() { - sc := -1 - if result.vmsslouh.Response.Response != nil { - sc = result.vmsslouh.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.getOSUpgradeHistoryNextResults - req, err := client.GetOSUpgradeHistoryPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", nil, "Failure preparing request") - return - } - - resp, err := client.GetOSUpgradeHistorySender(req) - if err != nil { - result.vmsslouh.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", resp, "Failure sending request") - return - } - - result.vmsslouh, err = client.GetOSUpgradeHistoryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "GetOSUpgradeHistory", resp, "Failure responding to request") - return - } - if result.vmsslouh.hasNextLink() && result.vmsslouh.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// GetOSUpgradeHistoryPreparer prepares the GetOSUpgradeHistory request. -func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetOSUpgradeHistorySender sends the GetOSUpgradeHistory request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistorySender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetOSUpgradeHistoryResponder handles the response to the GetOSUpgradeHistory request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryResponder(resp *http.Response) (result VirtualMachineScaleSetListOSUpgradeHistory, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// getOSUpgradeHistoryNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetsClient) getOSUpgradeHistoryNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListOSUpgradeHistory) (result VirtualMachineScaleSetListOSUpgradeHistory, err error) { - req, err := lastResults.virtualMachineScaleSetListOSUpgradeHistoryPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.GetOSUpgradeHistorySender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", resp, "Failure sending next results request") - } - result, err = client.GetOSUpgradeHistoryResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "getOSUpgradeHistoryNextResults", resp, "Failure responding to next results request") - } - return -} - -// GetOSUpgradeHistoryComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetsClient) GetOSUpgradeHistoryComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListOSUpgradeHistoryIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.GetOSUpgradeHistory") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.GetOSUpgradeHistory(ctx, resourceGroupName, VMScaleSetName) - return -} - -// List gets a list of all VM scale sets under a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client VirtualMachineScaleSetsClient) List(ctx context.Context, resourceGroupName string) (result VirtualMachineScaleSetListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.List") - defer func() { - sc := -1 - if result.vmsslr.Response.Response != nil { - sc = result.vmsslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.vmsslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", resp, "Failure sending request") - return - } - - result.vmsslr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "List", resp, "Failure responding to request") - return - } - if result.vmsslr.hasNextLink() && result.vmsslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineScaleSetsClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListResult) (result VirtualMachineScaleSetListResult, err error) { - req, err := lastResults.virtualMachineScaleSetListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetsClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualMachineScaleSetListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName) - return -} - -// ListAll gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. Use -// nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink is null to fetch all -// the VM Scale Sets. -func (client VirtualMachineScaleSetsClient) ListAll(ctx context.Context) (result VirtualMachineScaleSetListWithLinkResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListAll") - defer func() { - sc := -1 - if result.vmsslwlr.Response.Response != nil { - sc = result.vmsslwlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listAllNextResults - req, err := client.ListAllPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", nil, "Failure preparing request") - return - } - - resp, err := client.ListAllSender(req) - if err != nil { - result.vmsslwlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", resp, "Failure sending request") - return - } - - result.vmsslwlr, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListAll", resp, "Failure responding to request") - return - } - if result.vmsslwlr.hasNextLink() && result.vmsslwlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListAllPreparer prepares the ListAll request. -func (client VirtualMachineScaleSetsClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAllSender sends the ListAll request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ListAllSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListAllResponder handles the response to the ListAll request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ListAllResponder(resp *http.Response) (result VirtualMachineScaleSetListWithLinkResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAllNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetsClient) listAllNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListWithLinkResult) (result VirtualMachineScaleSetListWithLinkResult, err error) { - req, err := lastResults.virtualMachineScaleSetListWithLinkResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAllSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listAllNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAllComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetsClient) ListAllComplete(ctx context.Context) (result VirtualMachineScaleSetListWithLinkResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListAll") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListAll(ctx) - return -} - -// ListByLocation gets all the VM scale sets under the specified subscription for the specified location. -// Parameters: -// location - the location for which VM scale sets under the subscription are queried. -func (client VirtualMachineScaleSetsClient) ListByLocation(ctx context.Context, location string) (result VirtualMachineScaleSetListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListByLocation") - defer func() { - sc := -1 - if result.vmsslr.Response.Response != nil { - sc = result.vmsslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "ListByLocation", err.Error()) - } - - result.fn = client.listByLocationNextResults - req, err := client.ListByLocationPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", nil, "Failure preparing request") - return - } - - resp, err := client.ListByLocationSender(req) - if err != nil { - result.vmsslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", resp, "Failure sending request") - return - } - - result.vmsslr, err = client.ListByLocationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListByLocation", resp, "Failure responding to request") - return - } - if result.vmsslr.hasNextLink() && result.vmsslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByLocationPreparer prepares the ListByLocation request. -func (client VirtualMachineScaleSetsClient) ListByLocationPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/virtualMachineScaleSets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByLocationSender sends the ListByLocation request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ListByLocationSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListByLocationResponder handles the response to the ListByLocation request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ListByLocationResponder(resp *http.Response) (result VirtualMachineScaleSetListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByLocationNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetsClient) listByLocationNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListResult) (result VirtualMachineScaleSetListResult, err error) { - req, err := lastResults.virtualMachineScaleSetListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByLocationSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByLocationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listByLocationNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByLocationComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetsClient) ListByLocationComplete(ctx context.Context, location string) (result VirtualMachineScaleSetListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListByLocation") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByLocation(ctx, location) - return -} - -// ListSkus gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances allowed -// for each SKU. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -func (client VirtualMachineScaleSetsClient) ListSkus(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListSkusResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListSkus") - defer func() { - sc := -1 - if result.vmsslsr.Response.Response != nil { - sc = result.vmsslsr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listSkusNextResults - req, err := client.ListSkusPreparer(ctx, resourceGroupName, VMScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", nil, "Failure preparing request") - return - } - - resp, err := client.ListSkusSender(req) - if err != nil { - result.vmsslsr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", resp, "Failure sending request") - return - } - - result.vmsslsr, err = client.ListSkusResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ListSkus", resp, "Failure responding to request") - return - } - if result.vmsslsr.hasNextLink() && result.vmsslsr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListSkusPreparer prepares the ListSkus request. -func (client VirtualMachineScaleSetsClient) ListSkusPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSkusSender sends the ListSkus request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ListSkusSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListSkusResponder handles the response to the ListSkus request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ListSkusResponder(resp *http.Response) (result VirtualMachineScaleSetListSkusResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listSkusNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetsClient) listSkusNextResults(ctx context.Context, lastResults VirtualMachineScaleSetListSkusResult) (result VirtualMachineScaleSetListSkusResult, err error) { - req, err := lastResults.virtualMachineScaleSetListSkusResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSkusSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", resp, "Failure sending next results request") - } - result, err = client.ListSkusResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "listSkusNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListSkusComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetsClient) ListSkusComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result VirtualMachineScaleSetListSkusResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ListSkus") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListSkus(ctx, resourceGroupName, VMScaleSetName) - return -} - -// PerformMaintenance perform maintenance on one or more virtual machines in a VM scale set. Operation on instances -// which are not eligible for perform maintenance will be failed. Please refer to best practices for more details: -// https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsPerformMaintenanceFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.PerformMaintenance") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PerformMaintenance", nil, "Failure preparing request") - return - } - - result, err = client.PerformMaintenanceSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PerformMaintenance", result.Response(), "Failure sending request") - return - } - - return -} - -// PerformMaintenancePreparer prepares the PerformMaintenance request. -func (client VirtualMachineScaleSetsClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachineScaleSetsPerformMaintenanceFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// PowerOff power off (stop) one or more virtual machines in a VM scale set. Note that resources are still attached and -// you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates -// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not -// specified -func (client VirtualMachineScaleSetsClient) PowerOff(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs, skipShutdown *bool) (result VirtualMachineScaleSetsPowerOffFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.PowerOff") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs, skipShutdown) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PowerOff", nil, "Failure preparing request") - return - } - - result, err = client.PowerOffSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "PowerOff", result.Response(), "Failure sending request") - return - } - - return -} - -// PowerOffPreparer prepares the PowerOff request. -func (client VirtualMachineScaleSetsClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs, skipShutdown *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if skipShutdown != nil { - queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) - } else { - queryParameters["skipShutdown"] = autorest.Encode("query", false) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PowerOffSender sends the PowerOff request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) PowerOffSender(req *http.Request) (future VirtualMachineScaleSetsPowerOffFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PowerOffResponder handles the response to the PowerOff request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Redeploy shuts down all the virtual machines in the virtual machine scale set, moves them to a new node, and powers -// them back on. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) Redeploy(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsRedeployFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Redeploy") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RedeployPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Redeploy", nil, "Failure preparing request") - return - } - - result, err = client.RedeploySender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Redeploy", result.Response(), "Failure sending request") - return - } - - return -} - -// RedeployPreparer prepares the Redeploy request. -func (client VirtualMachineScaleSetsClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RedeploySender sends the Redeploy request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) RedeploySender(req *http.Request) (future VirtualMachineScaleSetsRedeployFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RedeployResponder handles the response to the Redeploy request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reimage reimages (upgrade the operating system) one or more virtual machines in a VM scale set which don't have a -// ephemeral OS disk, for virtual machines who have a ephemeral OS disk the virtual machine is reset to initial state. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMScaleSetReimageInput - parameters for Reimaging VM ScaleSet. -func (client VirtualMachineScaleSetsClient) Reimage(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMScaleSetReimageInput *VirtualMachineScaleSetReimageParameters) (result VirtualMachineScaleSetsReimageFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Reimage") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimagePreparer(ctx, resourceGroupName, VMScaleSetName, VMScaleSetReimageInput) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Reimage", nil, "Failure preparing request") - return - } - - result, err = client.ReimageSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Reimage", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimagePreparer prepares the Reimage request. -func (client VirtualMachineScaleSetsClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMScaleSetReimageInput *VirtualMachineScaleSetReimageParameters) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMScaleSetReimageInput != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMScaleSetReimageInput)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageSender sends the Reimage request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ReimageSender(req *http.Request) (future VirtualMachineScaleSetsReimageFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageResponder handles the response to the Reimage request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// ReimageAll reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This operation -// is only supported for managed disks. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) ReimageAll(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsReimageAllFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.ReimageAll") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimageAllPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ReimageAll", nil, "Failure preparing request") - return - } - - result, err = client.ReimageAllSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "ReimageAll", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimageAllPreparer prepares the ReimageAll request. -func (client VirtualMachineScaleSetsClient) ReimageAllPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageAllSender sends the ReimageAll request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) ReimageAllSender(req *http.Request) (future VirtualMachineScaleSetsReimageAllFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageAllResponder handles the response to the ReimageAll request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) ReimageAllResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Restart restarts one or more virtual machines in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) Restart(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RestartPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client VirtualMachineScaleSetsClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) RestartSender(req *http.Request) (future VirtualMachineScaleSetsRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// SetOrchestrationServiceState changes ServiceState property for a given service -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the virtual machine scale set to create or update. -// parameters - the input object for SetOrchestrationServiceState API. -func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceState(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters OrchestrationServiceStateInput) (result VirtualMachineScaleSetsSetOrchestrationServiceStateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.SetOrchestrationServiceState") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.SetOrchestrationServiceStatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "SetOrchestrationServiceState", nil, "Failure preparing request") - return - } - - result, err = client.SetOrchestrationServiceStateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "SetOrchestrationServiceState", result.Response(), "Failure sending request") - return - } - - return -} - -// SetOrchestrationServiceStatePreparer prepares the SetOrchestrationServiceState request. -func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters OrchestrationServiceStateInput) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/setOrchestrationServiceState", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// SetOrchestrationServiceStateSender sends the SetOrchestrationServiceState request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStateSender(req *http.Request) (future VirtualMachineScaleSetsSetOrchestrationServiceStateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// SetOrchestrationServiceStateResponder handles the response to the SetOrchestrationServiceState request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) SetOrchestrationServiceStateResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Start starts one or more virtual machines in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) Start(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (result VirtualMachineScaleSetsStartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Start") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Start", nil, "Failure preparing request") - return - } - - result, err = client.StartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Start", result.Response(), "Failure sending request") - return - } - - return -} - -// StartPreparer prepares the Start request. -func (client VirtualMachineScaleSetsClient) StartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs *VirtualMachineScaleSetVMInstanceIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMInstanceIDs != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMInstanceIDs)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartSender sends the Start request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) StartSender(req *http.Request) (future VirtualMachineScaleSetsStartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartResponder handles the response to the Start request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update update a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set to create or update. -// parameters - the scale set object. -func (client VirtualMachineScaleSetsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSetUpdate) (result VirtualMachineScaleSetsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineScaleSetsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, parameters VirtualMachineScaleSetUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSet, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// UpdateInstances upgrades one or more virtual machines to the latest SKU set in the VM scale set model. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// VMInstanceIDs - a list of virtual machine instance IDs from the VM scale set. -func (client VirtualMachineScaleSetsClient) UpdateInstances(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs) (result VirtualMachineScaleSetsUpdateInstancesFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetsClient.UpdateInstances") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: VMInstanceIDs, - Constraints: []validation.Constraint{{Target: "VMInstanceIDs.InstanceIds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetsClient", "UpdateInstances", err.Error()) - } - - req, err := client.UpdateInstancesPreparer(ctx, resourceGroupName, VMScaleSetName, VMInstanceIDs) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "UpdateInstances", nil, "Failure preparing request") - return - } - - result, err = client.UpdateInstancesSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetsClient", "UpdateInstances", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdateInstancesPreparer prepares the UpdateInstances request. -func (client VirtualMachineScaleSetsClient) UpdateInstancesPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, VMInstanceIDs VirtualMachineScaleSetVMInstanceRequiredIDs) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade", pathParameters), - autorest.WithJSON(VMInstanceIDs), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateInstancesSender sends the UpdateInstances request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetsClient) UpdateInstancesSender(req *http.Request) (future VirtualMachineScaleSetsUpdateInstancesFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateInstancesResponder handles the response to the UpdateInstances request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetsClient) UpdateInstancesResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmextensions.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmextensions.go deleted file mode 100644 index 37b146255709..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmextensions.go +++ /dev/null @@ -1,457 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetVMExtensionsClient is the compute Client -type VirtualMachineScaleSetVMExtensionsClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetVMExtensionsClient creates an instance of the VirtualMachineScaleSetVMExtensionsClient -// client. -func NewVirtualMachineScaleSetVMExtensionsClient(subscriptionID string) VirtualMachineScaleSetVMExtensionsClient { - return NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI creates an instance of the -// VirtualMachineScaleSetVMExtensionsClient client using a custom endpoint. Use this when interacting with an Azure -// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewVirtualMachineScaleSetVMExtensionsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMExtensionsClient { - return VirtualMachineScaleSetVMExtensionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update the VMSS VM extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// VMExtensionName - the name of the virtual machine extension. -// extensionParameters - parameters supplied to the Create Virtual Machine Extension operation. -func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtension) (result VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtension) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - extensionParameters.Name = nil - extensionParameters.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMExtensionsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the VMSS VM extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// VMExtensionName - the name of the virtual machine extension. -func (client VirtualMachineScaleSetVMExtensionsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string) (result VirtualMachineScaleSetVMExtensionsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineScaleSetVMExtensionsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMExtensionsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMExtensionsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the VMSS VM extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// VMExtensionName - the name of the virtual machine extension. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineScaleSetVMExtensionsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, expand string) (result VirtualMachineScaleSetVMExtension, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineScaleSetVMExtensionsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMExtensionsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMExtensionsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List the operation to get all extensions of an instance in Virtual Machine Scaleset. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineScaleSetVMExtensionsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineScaleSetVMExtensionsListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineScaleSetVMExtensionsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMExtensionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMExtensionsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtensionsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Update the operation to update the VMSS VM extension. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// VMExtensionName - the name of the virtual machine extension. -// extensionParameters - parameters supplied to the Update Virtual Machine Extension operation. -func (client VirtualMachineScaleSetVMExtensionsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtensionUpdate) (result VirtualMachineScaleSetVMExtensionsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMExtensionsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMExtensionName, extensionParameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMExtensionsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineScaleSetVMExtensionsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMExtensionName string, extensionParameters VirtualMachineScaleSetVMExtensionUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmExtensionName": autorest.Encode("path", VMExtensionName), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - extensionParameters.Name = nil - extensionParameters.Type = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/extensions/{vmExtensionName}", pathParameters), - autorest.WithJSON(extensionParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMExtensionsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMExtensionsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMExtensionsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVMExtension, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmruncommands.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmruncommands.go deleted file mode 100644 index 34f298e84833..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvmruncommands.go +++ /dev/null @@ -1,495 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetVMRunCommandsClient is the compute Client -type VirtualMachineScaleSetVMRunCommandsClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetVMRunCommandsClient creates an instance of the VirtualMachineScaleSetVMRunCommandsClient -// client. -func NewVirtualMachineScaleSetVMRunCommandsClient(subscriptionID string) VirtualMachineScaleSetVMRunCommandsClient { - return NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI creates an instance of the -// VirtualMachineScaleSetVMRunCommandsClient client using a custom endpoint. Use this when interacting with an Azure -// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewVirtualMachineScaleSetVMRunCommandsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMRunCommandsClient { - return VirtualMachineScaleSetVMRunCommandsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update the VMSS VM run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// runCommandName - the name of the virtual machine run command. -// runCommand - parameters supplied to the Create Virtual Machine RunCommand operation. -func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand) (result VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, runCommand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommand) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), - autorest.WithJSON(runCommand), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdateSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsCreateOrUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMRunCommandsClient) CreateOrUpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete the VMSS VM run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// runCommandName - the name of the virtual machine run command. -func (client VirtualMachineScaleSetVMRunCommandsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string) (result VirtualMachineScaleSetVMRunCommandsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineScaleSetVMRunCommandsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMRunCommandsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMRunCommandsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get the operation to get the VMSS VM run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// runCommandName - the name of the virtual machine run command. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineScaleSetVMRunCommandsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, expand string) (result VirtualMachineRunCommand, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineScaleSetVMRunCommandsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMRunCommandsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMRunCommandsClient) GetResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List the operation to get all run commands of an instance in Virtual Machine Scaleset. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// expand - the expand expression to apply on the operation. -func (client VirtualMachineScaleSetVMRunCommandsClient) List(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineRunCommandsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.List") - defer func() { - sc := -1 - if result.vmrclr.Response.Response != nil { - sc = result.vmrclr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.vmrclr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", resp, "Failure sending request") - return - } - - result.vmrclr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "List", resp, "Failure responding to request") - return - } - if result.vmrclr.hasNextLink() && result.vmrclr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineScaleSetVMRunCommandsClient) ListPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMRunCommandsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMRunCommandsClient) ListResponder(resp *http.Response) (result VirtualMachineRunCommandsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetVMRunCommandsClient) listNextResults(ctx context.Context, lastResults VirtualMachineRunCommandsListResult) (result VirtualMachineRunCommandsListResult, err error) { - req, err := lastResults.virtualMachineRunCommandsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetVMRunCommandsClient) ListComplete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand string) (result VirtualMachineRunCommandsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) - return -} - -// Update the operation to update the VMSS VM run command. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// runCommandName - the name of the virtual machine run command. -// runCommand - parameters supplied to the Update Virtual Machine RunCommand operation. -func (client VirtualMachineScaleSetVMRunCommandsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (result VirtualMachineScaleSetVMRunCommandsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMRunCommandsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, runCommandName, runCommand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMRunCommandsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineScaleSetVMRunCommandsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, runCommandName string, runCommand VirtualMachineRunCommandUpdate) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "runCommandName": autorest.Encode("path", runCommandName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPatch(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/runCommands/{runCommandName}", pathParameters), - autorest.WithJSON(runCommand), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMRunCommandsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMRunCommandsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMRunCommandsClient) UpdateResponder(resp *http.Response) (result VirtualMachineRunCommand, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvms.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvms.go deleted file mode 100644 index f155885f9bc6..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinescalesetvms.go +++ /dev/null @@ -1,1430 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineScaleSetVMsClient is the compute Client -type VirtualMachineScaleSetVMsClient struct { - BaseClient -} - -// NewVirtualMachineScaleSetVMsClient creates an instance of the VirtualMachineScaleSetVMsClient client. -func NewVirtualMachineScaleSetVMsClient(subscriptionID string) VirtualMachineScaleSetVMsClient { - return NewVirtualMachineScaleSetVMsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineScaleSetVMsClientWithBaseURI creates an instance of the VirtualMachineScaleSetVMsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewVirtualMachineScaleSetVMsClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineScaleSetVMsClient { - return VirtualMachineScaleSetVMsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Deallocate deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the -// compute resources it uses. You are not billed for the compute resources of this virtual machine once it is -// deallocated. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) Deallocate(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsDeallocateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Deallocate") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeallocatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", nil, "Failure preparing request") - return - } - - result, err = client.DeallocateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Deallocate", result.Response(), "Failure sending request") - return - } - - return -} - -// DeallocatePreparer prepares the Deallocate request. -func (client VirtualMachineScaleSetVMsClient) DeallocatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/deallocate", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeallocateSender sends the Deallocate request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) DeallocateSender(req *http.Request) (future VirtualMachineScaleSetVMsDeallocateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeallocateResponder handles the response to the Deallocate request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) DeallocateResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Delete deletes a virtual machine from a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// forceDeletion - optional parameter to force delete a virtual machine from a VM scale set. (Feature in -// Preview) -func (client VirtualMachineScaleSetVMsClient) Delete(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, forceDeletion *bool) (result VirtualMachineScaleSetVMsDeleteFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Delete") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, forceDeletion) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client VirtualMachineScaleSetVMsClient) DeletePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, forceDeletion *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if forceDeletion != nil { - queryParameters["forceDeletion"] = autorest.Encode("query", *forceDeletion) - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) DeleteSender(req *http.Request) (future VirtualMachineScaleSetVMsDeleteFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets a virtual machine from a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// expand - the expand expression to apply on the operation. 'InstanceView' will retrieve the instance view of -// the virtual machine. 'UserData' will retrieve the UserData of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand InstanceViewTypes) (result VirtualMachineScaleSetVM, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client VirtualMachineScaleSetVMsClient) GetPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, expand InstanceViewTypes) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(string(expand)) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) GetResponder(resp *http.Response) (result VirtualMachineScaleSetVM, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetInstanceView gets the status of a virtual machine from a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMInstanceView, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.GetInstanceView") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetInstanceViewPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", nil, "Failure preparing request") - return - } - - resp, err := client.GetInstanceViewSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure sending request") - return - } - - result, err = client.GetInstanceViewResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "GetInstanceView", resp, "Failure responding to request") - return - } - - return -} - -// GetInstanceViewPreparer prepares the GetInstanceView request. -func (client VirtualMachineScaleSetVMsClient) GetInstanceViewPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/instanceView", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetInstanceViewSender sends the GetInstanceView request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) GetInstanceViewSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetInstanceViewResponder handles the response to the GetInstanceView request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) GetInstanceViewResponder(resp *http.Response) (result VirtualMachineScaleSetVMInstanceView, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets a list of all virtual machines in a VM scale sets. -// Parameters: -// resourceGroupName - the name of the resource group. -// virtualMachineScaleSetName - the name of the VM scale set. -// filter - the filter to apply to the operation. Allowed values are 'startswith(instanceView/statuses/code, -// 'PowerState') eq true', 'properties/latestModelApplied eq true', 'properties/latestModelApplied eq false'. -// selectParameter - the list parameters. Allowed values are 'instanceView', 'instanceView/statuses'. -// expand - the expand expression to apply to the operation. Allowed values are 'instanceView'. -func (client VirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List") - defer func() { - sc := -1 - if result.vmssvlr.Response.Response != nil { - sc = result.vmssvlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.vmssvlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure sending request") - return - } - - result.vmssvlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "List", resp, "Failure responding to request") - return - } - if result.vmssvlr.hasNextLink() && result.vmssvlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineScaleSetVMsClient) ListPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(selectParameter) > 0 { - queryParameters["$select"] = autorest.Encode("query", selectParameter) - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) ListResponder(resp *http.Response) (result VirtualMachineScaleSetVMListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client VirtualMachineScaleSetVMsClient) listNextResults(ctx context.Context, lastResults VirtualMachineScaleSetVMListResult) (result VirtualMachineScaleSetVMListResult, err error) { - req, err := lastResults.virtualMachineScaleSetVMListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client VirtualMachineScaleSetVMsClient) ListComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result VirtualMachineScaleSetVMListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand) - return -} - -// PerformMaintenance performs maintenance on a virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) PerformMaintenance(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsPerformMaintenanceFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.PerformMaintenance") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PerformMaintenancePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PerformMaintenance", nil, "Failure preparing request") - return - } - - result, err = client.PerformMaintenanceSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PerformMaintenance", result.Response(), "Failure sending request") - return - } - - return -} - -// PerformMaintenancePreparer prepares the PerformMaintenance request. -func (client VirtualMachineScaleSetVMsClient) PerformMaintenancePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PerformMaintenanceSender sends the PerformMaintenance request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) PerformMaintenanceSender(req *http.Request) (future VirtualMachineScaleSetVMsPerformMaintenanceFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PerformMaintenanceResponder handles the response to the PerformMaintenance request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) PerformMaintenanceResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// PowerOff power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are -// getting charged for the resources. Instead, use deallocate to release resources and avoid charges. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// skipShutdown - the parameter to request non-graceful VM shutdown. True value for this flag indicates -// non-graceful shutdown whereas false indicates otherwise. Default value for this flag is false if not -// specified -func (client VirtualMachineScaleSetVMsClient) PowerOff(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, skipShutdown *bool) (result VirtualMachineScaleSetVMsPowerOffFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.PowerOff") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.PowerOffPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, skipShutdown) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", nil, "Failure preparing request") - return - } - - result, err = client.PowerOffSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "PowerOff", result.Response(), "Failure sending request") - return - } - - return -} - -// PowerOffPreparer prepares the PowerOff request. -func (client VirtualMachineScaleSetVMsClient) PowerOffPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, skipShutdown *bool) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if skipShutdown != nil { - queryParameters["skipShutdown"] = autorest.Encode("query", *skipShutdown) - } else { - queryParameters["skipShutdown"] = autorest.Encode("query", false) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// PowerOffSender sends the PowerOff request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) PowerOffSender(req *http.Request) (future VirtualMachineScaleSetVMsPowerOffFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// PowerOffResponder handles the response to the PowerOff request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) PowerOffResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Redeploy shuts down the virtual machine in the virtual machine scale set, moves it to a new node, and powers it back -// on. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) Redeploy(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsRedeployFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Redeploy") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RedeployPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Redeploy", nil, "Failure preparing request") - return - } - - result, err = client.RedeploySender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Redeploy", result.Response(), "Failure sending request") - return - } - - return -} - -// RedeployPreparer prepares the Redeploy request. -func (client VirtualMachineScaleSetVMsClient) RedeployPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RedeploySender sends the Redeploy request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) RedeploySender(req *http.Request) (future VirtualMachineScaleSetVMsRedeployFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RedeployResponder handles the response to the Redeploy request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) RedeployResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Reimage reimages (upgrade the operating system) a specific virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// VMScaleSetVMReimageInput - parameters for the Reimaging Virtual machine in ScaleSet. -func (client VirtualMachineScaleSetVMsClient) Reimage(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMScaleSetVMReimageInput *VirtualMachineScaleSetVMReimageParameters) (result VirtualMachineScaleSetVMsReimageFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Reimage") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimagePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, VMScaleSetVMReimageInput) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", nil, "Failure preparing request") - return - } - - result, err = client.ReimageSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Reimage", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimagePreparer prepares the Reimage request. -func (client VirtualMachineScaleSetVMsClient) ReimagePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, VMScaleSetVMReimageInput *VirtualMachineScaleSetVMReimageParameters) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimage", pathParameters), - autorest.WithQueryParameters(queryParameters)) - if VMScaleSetVMReimageInput != nil { - preparer = autorest.DecoratePreparer(preparer, - autorest.WithJSON(VMScaleSetVMReimageInput)) - } - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageSender sends the Reimage request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) ReimageSender(req *http.Request) (future VirtualMachineScaleSetVMsReimageFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageResponder handles the response to the Reimage request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) ReimageResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// ReimageAll allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This -// operation is only supported for managed disks. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) ReimageAll(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsReimageAllFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.ReimageAll") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ReimageAllPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "ReimageAll", nil, "Failure preparing request") - return - } - - result, err = client.ReimageAllSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "ReimageAll", result.Response(), "Failure sending request") - return - } - - return -} - -// ReimageAllPreparer prepares the ReimageAll request. -func (client VirtualMachineScaleSetVMsClient) ReimageAllPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/reimageall", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ReimageAllSender sends the ReimageAll request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) ReimageAllSender(req *http.Request) (future VirtualMachineScaleSetVMsReimageAllFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// ReimageAllResponder handles the response to the ReimageAll request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) ReimageAllResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Restart restarts a virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) Restart(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsRestartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Restart") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RestartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", nil, "Failure preparing request") - return - } - - result, err = client.RestartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Restart", result.Response(), "Failure sending request") - return - } - - return -} - -// RestartPreparer prepares the Restart request. -func (client VirtualMachineScaleSetVMsClient) RestartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RestartSender sends the Restart request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) RestartSender(req *http.Request) (future VirtualMachineScaleSetVMsRestartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RestartResponder handles the response to the Restart request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) RestartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// RetrieveBootDiagnosticsData the operation to retrieve SAS URIs of boot diagnostic logs for a virtual machine in a VM -// scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// sasURIExpirationTimeInMinutes - expiration duration in minutes for the SAS URIs with a value between 1 to -// 1440 minutes.

    NOTE: If not specified, SAS URIs will be generated with a default expiration duration -// of 120 minutes. -func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsData(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, sasURIExpirationTimeInMinutes *int32) (result RetrieveBootDiagnosticsDataResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.RetrieveBootDiagnosticsData") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.RetrieveBootDiagnosticsDataPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, sasURIExpirationTimeInMinutes) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", nil, "Failure preparing request") - return - } - - resp, err := client.RetrieveBootDiagnosticsDataSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", resp, "Failure sending request") - return - } - - result, err = client.RetrieveBootDiagnosticsDataResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RetrieveBootDiagnosticsData", resp, "Failure responding to request") - return - } - - return -} - -// RetrieveBootDiagnosticsDataPreparer prepares the RetrieveBootDiagnosticsData request. -func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, sasURIExpirationTimeInMinutes *int32) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if sasURIExpirationTimeInMinutes != nil { - queryParameters["sasUriExpirationTimeInMinutes"] = autorest.Encode("query", *sasURIExpirationTimeInMinutes) - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/retrieveBootDiagnosticsData", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RetrieveBootDiagnosticsDataSender sends the RetrieveBootDiagnosticsData request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// RetrieveBootDiagnosticsDataResponder handles the response to the RetrieveBootDiagnosticsData request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) RetrieveBootDiagnosticsDataResponder(resp *http.Response) (result RetrieveBootDiagnosticsDataResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// RunCommand run command on a virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -// parameters - parameters supplied to the Run command operation. -func (client VirtualMachineScaleSetVMsClient) RunCommand(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters RunCommandInput) (result VirtualMachineScaleSetVMsRunCommandFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.RunCommand") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.CommandID", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetVMsClient", "RunCommand", err.Error()) - } - - req, err := client.RunCommandPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RunCommand", nil, "Failure preparing request") - return - } - - result, err = client.RunCommandSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "RunCommand", result.Response(), "Failure sending request") - return - } - - return -} - -// RunCommandPreparer prepares the RunCommand request. -func (client VirtualMachineScaleSetVMsClient) RunCommandPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters RunCommandInput) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// RunCommandSender sends the RunCommand request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) RunCommandSender(req *http.Request) (future VirtualMachineScaleSetVMsRunCommandFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// RunCommandResponder handles the response to the RunCommand request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) RunCommandResponder(resp *http.Response) (result RunCommandResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// SimulateEviction the operation to simulate the eviction of spot virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) SimulateEviction(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.SimulateEviction") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.SimulateEvictionPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", nil, "Failure preparing request") - return - } - - resp, err := client.SimulateEvictionSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", resp, "Failure sending request") - return - } - - result, err = client.SimulateEvictionResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "SimulateEviction", resp, "Failure responding to request") - return - } - - return -} - -// SimulateEvictionPreparer prepares the SimulateEviction request. -func (client VirtualMachineScaleSetVMsClient) SimulateEvictionPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}/simulateEviction", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// SimulateEvictionSender sends the SimulateEviction request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) SimulateEvictionSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// SimulateEvictionResponder handles the response to the SimulateEviction request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) SimulateEvictionResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Start starts a virtual machine in a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set. -// instanceID - the instance ID of the virtual machine. -func (client VirtualMachineScaleSetVMsClient) Start(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result VirtualMachineScaleSetVMsStartFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Start") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.StartPreparer(ctx, resourceGroupName, VMScaleSetName, instanceID) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", nil, "Failure preparing request") - return - } - - result, err = client.StartSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Start", result.Response(), "Failure sending request") - return - } - - return -} - -// StartPreparer prepares the Start request. -func (client VirtualMachineScaleSetVMsClient) StartPreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsPost(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// StartSender sends the Start request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) StartSender(req *http.Request) (future VirtualMachineScaleSetVMsStartFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// StartResponder handles the response to the Start request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) StartResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByClosing()) - result.Response = resp - return -} - -// Update updates a virtual machine of a VM scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// VMScaleSetName - the name of the VM scale set where the extension should be create or updated. -// instanceID - the instance ID of the virtual machine. -// parameters - parameters supplied to the Update Virtual Machine Scale Sets VM operation. -func (client VirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM) (result VirtualMachineScaleSetVMsUpdateFuture, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineScaleSetVMsClient.Update") - defer func() { - sc := -1 - if result.FutureAPI != nil && result.FutureAPI.Response() != nil { - sc = result.FutureAPI.Response().StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.VirtualMachineScaleSetVMProperties.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil}, - }}, - }}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineScaleSetVMsClient", "Update", err.Error()) - } - - req, err := client.UpdatePreparer(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Update", nil, "Failure preparing request") - return - } - - result, err = client.UpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineScaleSetVMsClient", "Update", result.Response(), "Failure sending request") - return - } - - return -} - -// UpdatePreparer prepares the Update request. -func (client VirtualMachineScaleSetVMsClient) UpdatePreparer(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters VirtualMachineScaleSetVM) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "instanceId": autorest.Encode("path", instanceID), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "vmScaleSetName": autorest.Encode("path", VMScaleSetName), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - parameters.InstanceID = nil - parameters.Sku = nil - parameters.Resources = nil - parameters.Zones = nil - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instanceId}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// UpdateSender sends the Update request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineScaleSetVMsClient) UpdateSender(req *http.Request) (future VirtualMachineScaleSetVMsUpdateFuture, err error) { - var resp *http.Response - future.FutureAPI = &azure.Future{} - resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) - if err != nil { - return - } - var azf azure.Future - azf, err = azure.NewFutureFromResponse(resp) - future.FutureAPI = &azf - future.Result = future.result - return -} - -// UpdateResponder handles the response to the Update request. The method always -// closes the http.Response Body. -func (client VirtualMachineScaleSetVMsClient) UpdateResponder(resp *http.Response) (result VirtualMachineScaleSetVM, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinesizes.go b/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinesizes.go deleted file mode 100644 index 90a976ce0ea5..000000000000 --- a/cluster-autoscaler/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute/virtualmachinesizes.go +++ /dev/null @@ -1,113 +0,0 @@ -package compute - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// VirtualMachineSizesClient is the compute Client -type VirtualMachineSizesClient struct { - BaseClient -} - -// NewVirtualMachineSizesClient creates an instance of the VirtualMachineSizesClient client. -func NewVirtualMachineSizesClient(subscriptionID string) VirtualMachineSizesClient { - return NewVirtualMachineSizesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewVirtualMachineSizesClientWithBaseURI creates an instance of the VirtualMachineSizesClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewVirtualMachineSizesClientWithBaseURI(baseURI string, subscriptionID string) VirtualMachineSizesClient { - return VirtualMachineSizesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List this API is deprecated. Use [Resources Skus](https://docs.microsoft.com/rest/api/compute/resourceskus/list) -// Parameters: -// location - the location upon which virtual-machine-sizes is queried. -func (client VirtualMachineSizesClient) List(ctx context.Context, location string) (result VirtualMachineSizeListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/VirtualMachineSizesClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: location, - Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { - return result, validation.NewError("compute.VirtualMachineSizesClient", "List", err.Error()) - } - - req, err := client.ListPreparer(ctx, location) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "compute.VirtualMachineSizesClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client VirtualMachineSizesClient) ListPreparer(ctx context.Context, location string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "location": autorest.Encode("path", location), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2022-03-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client VirtualMachineSizesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client VirtualMachineSizesClient) ListResponder(resp *http.Response) (result VirtualMachineSizeListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/.gitattributes b/cluster-autoscaler/vendor/github.com/distribution/reference/.gitattributes new file mode 100644 index 000000000000..d207b1802b20 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/.gitattributes @@ -0,0 +1 @@ +*.go text eol=lf diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/.gitignore b/cluster-autoscaler/vendor/github.com/distribution/reference/.gitignore new file mode 100644 index 000000000000..dc07e6b04a0e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/.gitignore @@ -0,0 +1,2 @@ +# Cover profiles +*.out diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/.golangci.yml b/cluster-autoscaler/vendor/github.com/distribution/reference/.golangci.yml new file mode 100644 index 000000000000..793f0bb7ec39 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/.golangci.yml @@ -0,0 +1,18 @@ +linters: + enable: + - bodyclose + - dupword # Checks for duplicate words in the source code + - gofmt + - goimports + - ineffassign + - misspell + - revive + - staticcheck + - unconvert + - unused + - vet + disable: + - errcheck + +run: + deadline: 2m diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md b/cluster-autoscaler/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md new file mode 100644 index 000000000000..48f6704c6d35 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md @@ -0,0 +1,5 @@ +# Code of Conduct + +We follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). + +Please contact the [CNCF Code of Conduct Committee](mailto:conduct@cncf.io) in order to report violations of the Code of Conduct. diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/CONTRIBUTING.md b/cluster-autoscaler/vendor/github.com/distribution/reference/CONTRIBUTING.md new file mode 100644 index 000000000000..ab2194665653 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/CONTRIBUTING.md @@ -0,0 +1,114 @@ +# Contributing to the reference library + +## Community help + +If you need help, please ask in the [#distribution](https://cloud-native.slack.com/archives/C01GVR8SY4R) channel on CNCF community slack. +[Click here for an invite to the CNCF community slack](https://slack.cncf.io/) + +## Reporting security issues + +The maintainers take security seriously. If you discover a security +issue, please bring it to their attention right away! + +Please **DO NOT** file a public issue, instead send your report privately to +[cncf-distribution-security@lists.cncf.io](mailto:cncf-distribution-security@lists.cncf.io). + +## Reporting an issue properly + +By following these simple rules you will get better and faster feedback on your issue. + + - search the bugtracker for an already reported issue + +### If you found an issue that describes your problem: + + - please read other user comments first, and confirm this is the same issue: a given error condition might be indicative of different problems - you may also find a workaround in the comments + - please refrain from adding "same thing here" or "+1" comments + - you don't need to comment on an issue to get notified of updates: just hit the "subscribe" button + - comment if you have some new, technical and relevant information to add to the case + - __DO NOT__ comment on closed issues or merged PRs. If you think you have a related problem, open up a new issue and reference the PR or issue. + +### If you have not found an existing issue that describes your problem: + + 1. create a new issue, with a succinct title that describes your issue: + - bad title: "It doesn't work with my docker" + - good title: "Private registry push fail: 400 error with E_INVALID_DIGEST" + 2. copy the output of (or similar for other container tools): + - `docker version` + - `docker info` + - `docker exec registry --version` + 3. copy the command line you used to launch your Registry + 4. restart your docker daemon in debug mode (add `-D` to the daemon launch arguments) + 5. reproduce your problem and get your docker daemon logs showing the error + 6. if relevant, copy your registry logs that show the error + 7. provide any relevant detail about your specific Registry configuration (e.g., storage backend used) + 8. indicate if you are using an enterprise proxy, Nginx, or anything else between you and your Registry + +## Contributing Code + +Contributions should be made via pull requests. Pull requests will be reviewed +by one or more maintainers or reviewers and merged when acceptable. + +You should follow the basic GitHub workflow: + + 1. Use your own [fork](https://help.github.com/en/articles/about-forks) + 2. Create your [change](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes) + 3. Test your code + 4. [Commit](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages) your work, always [sign your commits](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages) + 5. Push your change to your fork and create a [Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork) + +Refer to [containerd's contribution guide](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes) +for tips on creating a successful contribution. + +## Sign your work + +The sign-off is a simple line at the end of the explanation for the patch. Your +signature certifies that you wrote the patch or otherwise have the right to pass +it on as an open-source patch. The rules are pretty simple: if you can certify +the below (from [developercertificate.org](http://developercertificate.org/)): + +``` +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. +``` + +Then you just add a line to every git commit message: + + Signed-off-by: Joe Smith + +Use your real name (sorry, no pseudonyms or anonymous contributions.) + +If you set your `user.name` and `user.email` git configs, you can sign your +commit automatically with `git commit -s`. diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/GOVERNANCE.md b/cluster-autoscaler/vendor/github.com/distribution/reference/GOVERNANCE.md new file mode 100644 index 000000000000..200045b05091 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/GOVERNANCE.md @@ -0,0 +1,144 @@ +# distribution/reference Project Governance + +Distribution [Code of Conduct](./CODE-OF-CONDUCT.md) can be found here. + +For specific guidance on practical contribution steps please +see our [CONTRIBUTING.md](./CONTRIBUTING.md) guide. + +## Maintainership + +There are different types of maintainers, with different responsibilities, but +all maintainers have 3 things in common: + +1) They share responsibility in the project's success. +2) They have made a long-term, recurring time investment to improve the project. +3) They spend that time doing whatever needs to be done, not necessarily what +is the most interesting or fun. + +Maintainers are often under-appreciated, because their work is harder to appreciate. +It's easy to appreciate a really cool and technically advanced feature. It's harder +to appreciate the absence of bugs, the slow but steady improvement in stability, +or the reliability of a release process. But those things distinguish a good +project from a great one. + +## Reviewers + +A reviewer is a core role within the project. +They share in reviewing issues and pull requests and their LGTM counts towards the +required LGTM count to merge a code change into the project. + +Reviewers are part of the organization but do not have write access. +Becoming a reviewer is a core aspect in the journey to becoming a maintainer. + +## Adding maintainers + +Maintainers are first and foremost contributors that have shown they are +committed to the long term success of a project. Contributors wanting to become +maintainers are expected to be deeply involved in contributing code, pull +request review, and triage of issues in the project for more than three months. + +Just contributing does not make you a maintainer, it is about building trust +with the current maintainers of the project and being a person that they can +depend on and trust to make decisions in the best interest of the project. + +Periodically, the existing maintainers curate a list of contributors that have +shown regular activity on the project over the prior months. From this list, +maintainer candidates are selected and proposed in a pull request or a +maintainers communication channel. + +After a candidate has been announced to the maintainers, the existing +maintainers are given five business days to discuss the candidate, raise +objections and cast their vote. Votes may take place on the communication +channel or via pull request comment. Candidates must be approved by at least 66% +of the current maintainers by adding their vote on the mailing list. The +reviewer role has the same process but only requires 33% of current maintainers. +Only maintainers of the repository that the candidate is proposed for are +allowed to vote. + +If a candidate is approved, a maintainer will contact the candidate to invite +the candidate to open a pull request that adds the contributor to the +MAINTAINERS file. The voting process may take place inside a pull request if a +maintainer has already discussed the candidacy with the candidate and a +maintainer is willing to be a sponsor by opening the pull request. The candidate +becomes a maintainer once the pull request is merged. + +## Stepping down policy + +Life priorities, interests, and passions can change. If you're a maintainer but +feel you must remove yourself from the list, inform other maintainers that you +intend to step down, and if possible, help find someone to pick up your work. +At the very least, ensure your work can be continued where you left off. + +After you've informed other maintainers, create a pull request to remove +yourself from the MAINTAINERS file. + +## Removal of inactive maintainers + +Similar to the procedure for adding new maintainers, existing maintainers can +be removed from the list if they do not show significant activity on the +project. Periodically, the maintainers review the list of maintainers and their +activity over the last three months. + +If a maintainer has shown insufficient activity over this period, a neutral +person will contact the maintainer to ask if they want to continue being +a maintainer. If the maintainer decides to step down as a maintainer, they +open a pull request to be removed from the MAINTAINERS file. + +If the maintainer wants to remain a maintainer, but is unable to perform the +required duties they can be removed with a vote of at least 66% of the current +maintainers. In this case, maintainers should first propose the change to +maintainers via the maintainers communication channel, then open a pull request +for voting. The voting period is five business days. The voting pull request +should not come as a surpise to any maintainer and any discussion related to +performance must not be discussed on the pull request. + +## How are decisions made? + +Docker distribution is an open-source project with an open design philosophy. +This means that the repository is the source of truth for EVERY aspect of the +project, including its philosophy, design, road map, and APIs. *If it's part of +the project, it's in the repo. If it's in the repo, it's part of the project.* + +As a result, all decisions can be expressed as changes to the repository. An +implementation change is a change to the source code. An API change is a change +to the API specification. A philosophy change is a change to the philosophy +manifesto, and so on. + +All decisions affecting distribution, big and small, follow the same 3 steps: + +* Step 1: Open a pull request. Anyone can do this. + +* Step 2: Discuss the pull request. Anyone can do this. + +* Step 3: Merge or refuse the pull request. Who does this depends on the nature +of the pull request and which areas of the project it affects. + +## Helping contributors with the DCO + +The [DCO or `Sign your work`](./CONTRIBUTING.md#sign-your-work) +requirement is not intended as a roadblock or speed bump. + +Some contributors are not as familiar with `git`, or have used a web +based editor, and thus asking them to `git commit --amend -s` is not the best +way forward. + +In this case, maintainers can update the commits based on clause (c) of the DCO. +The most trivial way for a contributor to allow the maintainer to do this, is to +add a DCO signature in a pull requests's comment, or a maintainer can simply +note that the change is sufficiently trivial that it does not substantially +change the existing contribution - i.e., a spelling change. + +When you add someone's DCO, please also add your own to keep a log. + +## I'm a maintainer. Should I make pull requests too? + +Yes. Nobody should ever push to master directly. All changes should be +made through a pull request. + +## Conflict Resolution + +If you have a technical dispute that you feel has reached an impasse with a +subset of the community, any contributor may open an issue, specifically +calling for a resolution vote of the current core maintainers to resolve the +dispute. The same voting quorums required (2/3) for adding and removing +maintainers will apply to conflict resolution. diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/LICENSE b/cluster-autoscaler/vendor/github.com/distribution/reference/LICENSE similarity index 100% rename from cluster-autoscaler/vendor/github.com/docker/distribution/LICENSE rename to cluster-autoscaler/vendor/github.com/distribution/reference/LICENSE diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/MAINTAINERS b/cluster-autoscaler/vendor/github.com/distribution/reference/MAINTAINERS new file mode 100644 index 000000000000..9e0a60c8bdcb --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/MAINTAINERS @@ -0,0 +1,26 @@ +# Distribution project maintainers & reviewers +# +# See GOVERNANCE.md for maintainer versus reviewer roles +# +# MAINTAINERS (cncf-distribution-maintainers@lists.cncf.io) +# GitHub ID, Name, Email address +"chrispat","Chris Patterson","chrispat@github.com" +"clarkbw","Bryan Clark","clarkbw@github.com" +"corhere","Cory Snider","csnider@mirantis.com" +"deleteriousEffect","Hayley Swimelar","hswimelar@gitlab.com" +"heww","He Weiwei","hweiwei@vmware.com" +"joaodrp","João Pereira","jpereira@gitlab.com" +"justincormack","Justin Cormack","justin.cormack@docker.com" +"squizzi","Kyle Squizzato","ksquizzato@mirantis.com" +"milosgajdos","Milos Gajdos","milosthegajdos@gmail.com" +"sargun","Sargun Dhillon","sargun@sargun.me" +"wy65701436","Wang Yan","wangyan@vmware.com" +"stevelasker","Steve Lasker","steve.lasker@microsoft.com" +# +# REVIEWERS +# GitHub ID, Name, Email address +"dmcgowan","Derek McGowan","derek@mcgstyle.net" +"stevvooe","Stephen Day","stevvooe@gmail.com" +"thajeztah","Sebastiaan van Stijn","github@gone.nl" +"DavidSpek", "David van der Spek", "vanderspek.david@gmail.com" +"Jamstah", "James Hewitt", "james.hewitt@gmail.com" diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/Makefile b/cluster-autoscaler/vendor/github.com/distribution/reference/Makefile new file mode 100644 index 000000000000..c78576b75d0f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/Makefile @@ -0,0 +1,25 @@ +# Project packages. +PACKAGES=$(shell go list ./...) + +# Flags passed to `go test` +BUILDFLAGS ?= +TESTFLAGS ?= + +.PHONY: all build test coverage +.DEFAULT: all + +all: build + +build: ## no binaries to build, so just check compilation suceeds + go build ${BUILDFLAGS} ./... + +test: ## run tests + go test ${TESTFLAGS} ./... + +coverage: ## generate coverprofiles from the unit tests + rm -f coverage.txt + go test ${TESTFLAGS} -cover -coverprofile=cover.out ./... + +.PHONY: help +help: + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_\/%-]+:.*?##/ { printf " \033[36m%-27s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/README.md b/cluster-autoscaler/vendor/github.com/distribution/reference/README.md new file mode 100644 index 000000000000..e2531e49c4f9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/README.md @@ -0,0 +1,30 @@ +# Distribution reference + +Go library to handle references to container images. + + + +[![Build Status](https://github.com/distribution/reference/actions/workflows/test.yml/badge.svg?branch=main&event=push)](https://github.com/distribution/reference/actions?query=workflow%3ACI) +[![GoDoc](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/distribution/reference) +[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) +[![codecov](https://codecov.io/gh/distribution/reference/branch/main/graph/badge.svg)](https://codecov.io/gh/distribution/reference) +[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference?ref=badge_shield) + +This repository contains a library for handling refrences to container images held in container registries. Please see [godoc](https://pkg.go.dev/github.com/distribution/reference) for details. + +## Contribution + +Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute +issues, fixes, and patches to this project. + +## Communication + +For async communication and long running discussions please use issues and pull requests on the github repo. +This will be the best place to discuss design and implementation. + +For sync communication we have a #distribution channel in the [CNCF Slack](https://slack.cncf.io/) +that everyone is welcome to join and chat about development. + +## Licenses + +The distribution codebase is released under the [Apache 2.0 license](LICENSE). diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/SECURITY.md b/cluster-autoscaler/vendor/github.com/distribution/reference/SECURITY.md new file mode 100644 index 000000000000..aaf983c0f054 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +## Reporting a Vulnerability + +The maintainers take security seriously. If you discover a security issue, please bring it to their attention right away! + +Please DO NOT file a public issue, instead send your report privately to cncf-distribution-security@lists.cncf.io. diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/distribution-logo.svg b/cluster-autoscaler/vendor/github.com/distribution/reference/distribution-logo.svg new file mode 100644 index 000000000000..cc9f4073b9ba --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/distribution-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/helpers.go b/cluster-autoscaler/vendor/github.com/distribution/reference/helpers.go similarity index 94% rename from cluster-autoscaler/vendor/github.com/docker/distribution/reference/helpers.go rename to cluster-autoscaler/vendor/github.com/distribution/reference/helpers.go index 978df7eabbf1..d10c7ef83878 100644 --- a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/helpers.go +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/helpers.go @@ -32,7 +32,7 @@ func FamiliarString(ref Reference) string { } // FamiliarMatch reports whether ref matches the specified pattern. -// See https://godoc.org/path#Match for supported patterns. +// See [path.Match] for supported patterns. func FamiliarMatch(pattern string, ref Reference) (bool, error) { matched, err := path.Match(pattern, FamiliarString(ref)) if namedRef, isNamed := ref.(Named); isNamed && !matched { diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/normalize.go b/cluster-autoscaler/vendor/github.com/distribution/reference/normalize.go similarity index 52% rename from cluster-autoscaler/vendor/github.com/docker/distribution/reference/normalize.go rename to cluster-autoscaler/vendor/github.com/distribution/reference/normalize.go index b3dfb7a6d7e1..a30229d01bb4 100644 --- a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/normalize.go +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/normalize.go @@ -1,19 +1,42 @@ package reference import ( - "errors" "fmt" "strings" - "github.com/docker/distribution/digestset" "github.com/opencontainers/go-digest" ) -var ( +const ( + // legacyDefaultDomain is the legacy domain for Docker Hub (which was + // originally named "the Docker Index"). This domain is still used for + // authentication and image search, which were part of the "v1" Docker + // registry specification. + // + // This domain will continue to be supported, but there are plans to consolidate + // legacy domains to new "canonical" domains. Once those domains are decided + // on, we must update the normalization functions, but preserve compatibility + // with existing installs, clients, and user configuration. legacyDefaultDomain = "index.docker.io" - defaultDomain = "docker.io" - officialRepoName = "library" - defaultTag = "latest" + + // defaultDomain is the default domain used for images on Docker Hub. + // It is used to normalize "familiar" names to canonical names, for example, + // to convert "ubuntu" to "docker.io/library/ubuntu:latest". + // + // Note that actual domain of Docker Hub's registry is registry-1.docker.io. + // This domain will continue to be supported, but there are plans to consolidate + // legacy domains to new "canonical" domains. Once those domains are decided + // on, we must update the normalization functions, but preserve compatibility + // with existing installs, clients, and user configuration. + defaultDomain = "docker.io" + + // officialRepoPrefix is the namespace used for official images on Docker Hub. + // It is used to normalize "familiar" names to canonical names, for example, + // to convert "ubuntu" to "docker.io/library/ubuntu:latest". + officialRepoPrefix = "library/" + + // defaultTag is the default tag if no tag is provided. + defaultTag = "latest" ) // normalizedNamed represents a name which has been @@ -35,14 +58,14 @@ func ParseNormalizedNamed(s string) (Named, error) { return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s) } domain, remainder := splitDockerDomain(s) - var remoteName string + var remote string if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 { - remoteName = remainder[:tagSep] + remote = remainder[:tagSep] } else { - remoteName = remainder + remote = remainder } - if strings.ToLower(remoteName) != remoteName { - return nil, errors.New("invalid reference format: repository name must be lowercase") + if strings.ToLower(remote) != remote { + return nil, fmt.Errorf("invalid reference format: repository name (%s) must be lowercase", remote) } ref, err := Parse(domain + "/" + remainder) @@ -56,41 +79,53 @@ func ParseNormalizedNamed(s string) (Named, error) { return named, nil } -// ParseDockerRef normalizes the image reference following the docker convention. This is added -// mainly for backward compatibility. -// The reference returned can only be either tagged or digested. For reference contains both tag -// and digest, the function returns digested reference, e.g. docker.io/library/busybox:latest@ -// sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa will be returned as -// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa. +// namedTaggedDigested is a reference that has both a tag and a digest. +type namedTaggedDigested interface { + NamedTagged + Digested +} + +// ParseDockerRef normalizes the image reference following the docker convention, +// which allows for references to contain both a tag and a digest. It returns a +// reference that is either tagged or digested. For references containing both +// a tag and a digest, it returns a digested reference. For example, the following +// reference: +// +// docker.io/library/busybox:latest@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa +// +// Is returned as a digested reference (with the ":latest" tag removed): +// +// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa +// +// References that are already "tagged" or "digested" are returned unmodified: +// +// // Already a digested reference +// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa +// +// // Already a named reference +// docker.io/library/busybox:latest func ParseDockerRef(ref string) (Named, error) { named, err := ParseNormalizedNamed(ref) if err != nil { return nil, err } - if _, ok := named.(NamedTagged); ok { - if canonical, ok := named.(Canonical); ok { - // The reference is both tagged and digested, only - // return digested. - newNamed, err := WithName(canonical.Name()) - if err != nil { - return nil, err - } - newCanonical, err := WithDigest(newNamed, canonical.Digest()) - if err != nil { - return nil, err - } - return newCanonical, nil + if canonical, ok := named.(namedTaggedDigested); ok { + // The reference is both tagged and digested; only return digested. + newNamed, err := WithName(canonical.Name()) + if err != nil { + return nil, err } + return WithDigest(newNamed, canonical.Digest()) } return TagNameOnly(named), nil } -// splitDockerDomain splits a repository name to domain and remotename string. +// splitDockerDomain splits a repository name to domain and remote-name. // If no valid domain is found, the default domain is used. Repository name // needs to be already validated before. func splitDockerDomain(name string) (domain, remainder string) { i := strings.IndexRune(name, '/') - if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost") { + if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != localhost && strings.ToLower(name[:i]) == name[:i]) { domain, remainder = defaultDomain, name } else { domain, remainder = name[:i], name[i+1:] @@ -99,13 +134,13 @@ func splitDockerDomain(name string) (domain, remainder string) { domain = defaultDomain } if domain == defaultDomain && !strings.ContainsRune(remainder, '/') { - remainder = officialRepoName + "/" + remainder + remainder = officialRepoPrefix + remainder } return } // familiarizeName returns a shortened version of the name familiar -// to to the Docker UI. Familiar names have the default domain +// to the Docker UI. Familiar names have the default domain // "docker.io" and "library/" repository prefix removed. // For example, "docker.io/library/redis" will have the familiar // name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp". @@ -119,8 +154,15 @@ func familiarizeName(named namedRepository) repository { if repo.domain == defaultDomain { repo.domain = "" // Handle official repositories which have the pattern "library/" - if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName { - repo.path = split[1] + if strings.HasPrefix(repo.path, officialRepoPrefix) { + // TODO(thaJeztah): this check may be too strict, as it assumes the + // "library/" namespace does not have nested namespaces. While this + // is true (currently), technically it would be possible for Docker + // Hub to use those (e.g. "library/distros/ubuntu:latest"). + // See https://github.com/distribution/distribution/pull/3769#issuecomment-1302031785. + if remainder := strings.TrimPrefix(repo.path, officialRepoPrefix); !strings.ContainsRune(remainder, '/') { + repo.path = remainder + } } } return repo @@ -180,20 +222,3 @@ func ParseAnyReference(ref string) (Reference, error) { return ParseNormalizedNamed(ref) } - -// ParseAnyReferenceWithSet parses a reference string as a possible short -// identifier to be matched in a digest set, a full digest, or familiar name. -func ParseAnyReferenceWithSet(ref string, ds *digestset.Set) (Reference, error) { - if ok := anchoredShortIdentifierRegexp.MatchString(ref); ok { - dgst, err := ds.Lookup(ref) - if err == nil { - return digestReference(dgst), nil - } - } else { - if dgst, err := digest.Parse(ref); err == nil { - return digestReference(dgst), nil - } - } - - return ParseNormalizedNamed(ref) -} diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/reference.go b/cluster-autoscaler/vendor/github.com/distribution/reference/reference.go similarity index 93% rename from cluster-autoscaler/vendor/github.com/docker/distribution/reference/reference.go rename to cluster-autoscaler/vendor/github.com/distribution/reference/reference.go index b7cd00b0d68e..e98c44daa2a8 100644 --- a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/reference.go +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/reference.go @@ -4,11 +4,14 @@ // Grammar // // reference := name [ ":" tag ] [ "@" digest ] -// name := [domain '/'] path-component ['/' path-component]* -// domain := domain-component ['.' domain-component]* [':' port-number] +// name := [domain '/'] remote-name +// domain := host [':' port-number] +// host := domain-name | IPv4address | \[ IPv6address \] ; rfc3986 appendix-A +// domain-name := domain-component ['.' domain-component]* // domain-component := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/ // port-number := /[0-9]+/ // path-component := alpha-numeric [separator alpha-numeric]* +// path (or "remote-name") := path-component ['/' path-component]* // alpha-numeric := /[a-z0-9]+/ // separator := /[_.]|__|[-]*/ // @@ -21,7 +24,6 @@ // digest-hex := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value // // identifier := /[a-f0-9]{64}/ -// short-identifier := /[a-f0-9]{6,64}/ package reference import ( @@ -145,7 +147,7 @@ type namedRepository interface { Path() string } -// Domain returns the domain part of the Named reference +// Domain returns the domain part of the [Named] reference. func Domain(named Named) string { if r, ok := named.(namedRepository); ok { return r.Domain() @@ -154,7 +156,7 @@ func Domain(named Named) string { return domain } -// Path returns the name without the domain part of the Named reference +// Path returns the name without the domain part of the [Named] reference. func Path(named Named) (name string) { if r, ok := named.(namedRepository); ok { return r.Path() @@ -175,7 +177,8 @@ func splitDomain(name string) (string, string) { // hostname and name string. If no valid hostname is // found, the hostname is empty and the full value // is returned as name -// DEPRECATED: Use Domain or Path +// +// Deprecated: Use [Domain] or [Path]. func SplitHostname(named Named) (string, string) { if r, ok := named.(namedRepository); ok { return r.Domain(), r.Path() @@ -185,7 +188,6 @@ func SplitHostname(named Named) (string, string) { // Parse parses s and returns a syntactically valid Reference. // If an error was encountered it is returned, along with a nil Reference. -// NOTE: Parse will not handle short digests. func Parse(s string) (Reference, error) { matches := ReferenceRegexp.FindStringSubmatch(s) if matches == nil { @@ -237,7 +239,6 @@ func Parse(s string) (Reference, error) { // the Named interface. The reference must have a name and be in the canonical // form, otherwise an error is returned. // If an error was encountered it is returned, along with a nil Reference. -// NOTE: ParseNamed will not handle short digests. func ParseNamed(s string) (Named, error) { named, err := ParseNormalizedNamed(s) if err != nil { @@ -320,11 +321,13 @@ func WithDigest(name Named, digest digest.Digest) (Canonical, error) { // TrimNamed removes any tag or digest from the named reference. func TrimNamed(ref Named) Named { - domain, path := SplitHostname(ref) - return repository{ - domain: domain, - path: path, + repo := repository{} + if r, ok := ref.(namedRepository); ok { + repo.domain, repo.path = r.Domain(), r.Path() + } else { + repo.domain, repo.path = splitDomain(ref.Name()) } + return repo } func getBestReferenceType(ref reference) Reference { diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/regexp.go b/cluster-autoscaler/vendor/github.com/distribution/reference/regexp.go new file mode 100644 index 000000000000..65bc49d79be2 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/regexp.go @@ -0,0 +1,163 @@ +package reference + +import ( + "regexp" + "strings" +) + +// DigestRegexp matches well-formed digests, including algorithm (e.g. "sha256:"). +var DigestRegexp = regexp.MustCompile(digestPat) + +// DomainRegexp matches hostname or IP-addresses, optionally including a port +// number. It defines the structure of potential domain components that may be +// part of image names. This is purposely a subset of what is allowed by DNS to +// ensure backwards compatibility with Docker image names. It may be a subset of +// DNS domain name, an IPv4 address in decimal format, or an IPv6 address between +// square brackets (excluding zone identifiers as defined by [RFC 6874] or special +// addresses such as IPv4-Mapped). +// +// [RFC 6874]: https://www.rfc-editor.org/rfc/rfc6874. +var DomainRegexp = regexp.MustCompile(domainAndPort) + +// IdentifierRegexp is the format for string identifier used as a +// content addressable identifier using sha256. These identifiers +// are like digests without the algorithm, since sha256 is used. +var IdentifierRegexp = regexp.MustCompile(identifier) + +// NameRegexp is the format for the name component of references, including +// an optional domain and port, but without tag or digest suffix. +var NameRegexp = regexp.MustCompile(namePat) + +// ReferenceRegexp is the full supported format of a reference. The regexp +// is anchored and has capturing groups for name, tag, and digest +// components. +var ReferenceRegexp = regexp.MustCompile(referencePat) + +// TagRegexp matches valid tag names. From [docker/docker:graph/tags.go]. +// +// [docker/docker:graph/tags.go]: https://github.com/moby/moby/blob/v1.6.0/graph/tags.go#L26-L28 +var TagRegexp = regexp.MustCompile(tag) + +const ( + // alphanumeric defines the alphanumeric atom, typically a + // component of names. This only allows lower case characters and digits. + alphanumeric = `[a-z0-9]+` + + // separator defines the separators allowed to be embedded in name + // components. This allows one period, one or two underscore and multiple + // dashes. Repeated dashes and underscores are intentionally treated + // differently. In order to support valid hostnames as name components, + // supporting repeated dash was added. Additionally double underscore is + // now allowed as a separator to loosen the restriction for previously + // supported names. + separator = `(?:[._]|__|[-]+)` + + // localhost is treated as a special value for domain-name. Any other + // domain-name without a "." or a ":port" are considered a path component. + localhost = `localhost` + + // domainNameComponent restricts the registry domain component of a + // repository name to start with a component as defined by DomainRegexp. + domainNameComponent = `(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])` + + // optionalPort matches an optional port-number including the port separator + // (e.g. ":80"). + optionalPort = `(?::[0-9]+)?` + + // tag matches valid tag names. From docker/docker:graph/tags.go. + tag = `[\w][\w.-]{0,127}` + + // digestPat matches well-formed digests, including algorithm (e.g. "sha256:"). + // + // TODO(thaJeztah): this should follow the same rules as https://pkg.go.dev/github.com/opencontainers/go-digest@v1.0.0#DigestRegexp + // so that go-digest defines the canonical format. Note that the go-digest is + // more relaxed: + // - it allows multiple algorithms (e.g. "sha256+b64:") to allow + // future expansion of supported algorithms. + // - it allows the "" value to use urlsafe base64 encoding as defined + // in [rfc4648, section 5]. + // + // [rfc4648, section 5]: https://www.rfc-editor.org/rfc/rfc4648#section-5. + digestPat = `[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}` + + // identifier is the format for a content addressable identifier using sha256. + // These identifiers are like digests without the algorithm, since sha256 is used. + identifier = `([a-f0-9]{64})` + + // ipv6address are enclosed between square brackets and may be represented + // in many ways, see rfc5952. Only IPv6 in compressed or uncompressed format + // are allowed, IPv6 zone identifiers (rfc6874) or Special addresses such as + // IPv4-Mapped are deliberately excluded. + ipv6address = `\[(?:[a-fA-F0-9:]+)\]` +) + +var ( + // domainName defines the structure of potential domain components + // that may be part of image names. This is purposely a subset of what is + // allowed by DNS to ensure backwards compatibility with Docker image + // names. This includes IPv4 addresses on decimal format. + domainName = domainNameComponent + anyTimes(`\.`+domainNameComponent) + + // host defines the structure of potential domains based on the URI + // Host subcomponent on rfc3986. It may be a subset of DNS domain name, + // or an IPv4 address in decimal format, or an IPv6 address between square + // brackets (excluding zone identifiers as defined by rfc6874 or special + // addresses such as IPv4-Mapped). + host = `(?:` + domainName + `|` + ipv6address + `)` + + // allowed by the URI Host subcomponent on rfc3986 to ensure backwards + // compatibility with Docker image names. + domainAndPort = host + optionalPort + + // anchoredTagRegexp matches valid tag names, anchored at the start and + // end of the matched string. + anchoredTagRegexp = regexp.MustCompile(anchored(tag)) + + // anchoredDigestRegexp matches valid digests, anchored at the start and + // end of the matched string. + anchoredDigestRegexp = regexp.MustCompile(anchored(digestPat)) + + // pathComponent restricts path-components to start with an alphanumeric + // character, with following parts able to be separated by a separator + // (one period, one or two underscore and multiple dashes). + pathComponent = alphanumeric + anyTimes(separator+alphanumeric) + + // remoteName matches the remote-name of a repository. It consists of one + // or more forward slash (/) delimited path-components: + // + // pathComponent[[/pathComponent] ...] // e.g., "library/ubuntu" + remoteName = pathComponent + anyTimes(`/`+pathComponent) + namePat = optional(domainAndPort+`/`) + remoteName + + // anchoredNameRegexp is used to parse a name value, capturing the + // domain and trailing components. + anchoredNameRegexp = regexp.MustCompile(anchored(optional(capture(domainAndPort), `/`), capture(remoteName))) + + referencePat = anchored(capture(namePat), optional(`:`, capture(tag)), optional(`@`, capture(digestPat))) + + // anchoredIdentifierRegexp is used to check or match an + // identifier value, anchored at start and end of string. + anchoredIdentifierRegexp = regexp.MustCompile(anchored(identifier)) +) + +// optional wraps the expression in a non-capturing group and makes the +// production optional. +func optional(res ...string) string { + return `(?:` + strings.Join(res, "") + `)?` +} + +// anyTimes wraps the expression in a non-capturing group that can occur +// any number of times. +func anyTimes(res ...string) string { + return `(?:` + strings.Join(res, "") + `)*` +} + +// capture wraps the expression in a capturing group. +func capture(res ...string) string { + return `(` + strings.Join(res, "") + `)` +} + +// anchored anchors the regular expression by adding start and end delimiters. +func anchored(res ...string) string { + return `^` + strings.Join(res, "") + `$` +} diff --git a/cluster-autoscaler/vendor/github.com/distribution/reference/sort.go b/cluster-autoscaler/vendor/github.com/distribution/reference/sort.go new file mode 100644 index 000000000000..416c37b076fd --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/distribution/reference/sort.go @@ -0,0 +1,75 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package reference + +import ( + "sort" +) + +// Sort sorts string references preferring higher information references. +// +// The precedence is as follows: +// +// 1. [Named] + [Tagged] + [Digested] (e.g., "docker.io/library/busybox:latest@sha256:") +// 2. [Named] + [Tagged] (e.g., "docker.io/library/busybox:latest") +// 3. [Named] + [Digested] (e.g., "docker.io/library/busybo@sha256:") +// 4. [Named] (e.g., "docker.io/library/busybox") +// 5. [Digested] (e.g., "docker.io@sha256:") +// 6. Parse error +func Sort(references []string) []string { + var prefs []Reference + var bad []string + + for _, ref := range references { + pref, err := ParseAnyReference(ref) + if err != nil { + bad = append(bad, ref) + } else { + prefs = append(prefs, pref) + } + } + sort.Slice(prefs, func(a, b int) bool { + ar := refRank(prefs[a]) + br := refRank(prefs[b]) + if ar == br { + return prefs[a].String() < prefs[b].String() + } + return ar < br + }) + sort.Strings(bad) + var refs []string + for _, pref := range prefs { + refs = append(refs, pref.String()) + } + return append(refs, bad...) +} + +func refRank(ref Reference) uint8 { + if _, ok := ref.(Named); ok { + if _, ok = ref.(Tagged); ok { + if _, ok = ref.(Digested); ok { + return 1 + } + return 2 + } + if _, ok = ref.(Digested); ok { + return 3 + } + return 4 + } + return 5 +} diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/digestset/set.go b/cluster-autoscaler/vendor/github.com/docker/distribution/digestset/set.go deleted file mode 100644 index 71327dca7209..000000000000 --- a/cluster-autoscaler/vendor/github.com/docker/distribution/digestset/set.go +++ /dev/null @@ -1,247 +0,0 @@ -package digestset - -import ( - "errors" - "sort" - "strings" - "sync" - - digest "github.com/opencontainers/go-digest" -) - -var ( - // ErrDigestNotFound is used when a matching digest - // could not be found in a set. - ErrDigestNotFound = errors.New("digest not found") - - // ErrDigestAmbiguous is used when multiple digests - // are found in a set. None of the matching digests - // should be considered valid matches. - ErrDigestAmbiguous = errors.New("ambiguous digest string") -) - -// Set is used to hold a unique set of digests which -// may be easily referenced by easily referenced by a string -// representation of the digest as well as short representation. -// The uniqueness of the short representation is based on other -// digests in the set. If digests are omitted from this set, -// collisions in a larger set may not be detected, therefore it -// is important to always do short representation lookups on -// the complete set of digests. To mitigate collisions, an -// appropriately long short code should be used. -type Set struct { - mutex sync.RWMutex - entries digestEntries -} - -// NewSet creates an empty set of digests -// which may have digests added. -func NewSet() *Set { - return &Set{ - entries: digestEntries{}, - } -} - -// checkShortMatch checks whether two digests match as either whole -// values or short values. This function does not test equality, -// rather whether the second value could match against the first -// value. -func checkShortMatch(alg digest.Algorithm, hex, shortAlg, shortHex string) bool { - if len(hex) == len(shortHex) { - if hex != shortHex { - return false - } - if len(shortAlg) > 0 && string(alg) != shortAlg { - return false - } - } else if !strings.HasPrefix(hex, shortHex) { - return false - } else if len(shortAlg) > 0 && string(alg) != shortAlg { - return false - } - return true -} - -// Lookup looks for a digest matching the given string representation. -// If no digests could be found ErrDigestNotFound will be returned -// with an empty digest value. If multiple matches are found -// ErrDigestAmbiguous will be returned with an empty digest value. -func (dst *Set) Lookup(d string) (digest.Digest, error) { - dst.mutex.RLock() - defer dst.mutex.RUnlock() - if len(dst.entries) == 0 { - return "", ErrDigestNotFound - } - var ( - searchFunc func(int) bool - alg digest.Algorithm - hex string - ) - dgst, err := digest.Parse(d) - if err == digest.ErrDigestInvalidFormat { - hex = d - searchFunc = func(i int) bool { - return dst.entries[i].val >= d - } - } else { - hex = dgst.Hex() - alg = dgst.Algorithm() - searchFunc = func(i int) bool { - if dst.entries[i].val == hex { - return dst.entries[i].alg >= alg - } - return dst.entries[i].val >= hex - } - } - idx := sort.Search(len(dst.entries), searchFunc) - if idx == len(dst.entries) || !checkShortMatch(dst.entries[idx].alg, dst.entries[idx].val, string(alg), hex) { - return "", ErrDigestNotFound - } - if dst.entries[idx].alg == alg && dst.entries[idx].val == hex { - return dst.entries[idx].digest, nil - } - if idx+1 < len(dst.entries) && checkShortMatch(dst.entries[idx+1].alg, dst.entries[idx+1].val, string(alg), hex) { - return "", ErrDigestAmbiguous - } - - return dst.entries[idx].digest, nil -} - -// Add adds the given digest to the set. An error will be returned -// if the given digest is invalid. If the digest already exists in the -// set, this operation will be a no-op. -func (dst *Set) Add(d digest.Digest) error { - if err := d.Validate(); err != nil { - return err - } - dst.mutex.Lock() - defer dst.mutex.Unlock() - entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d} - searchFunc := func(i int) bool { - if dst.entries[i].val == entry.val { - return dst.entries[i].alg >= entry.alg - } - return dst.entries[i].val >= entry.val - } - idx := sort.Search(len(dst.entries), searchFunc) - if idx == len(dst.entries) { - dst.entries = append(dst.entries, entry) - return nil - } else if dst.entries[idx].digest == d { - return nil - } - - entries := append(dst.entries, nil) - copy(entries[idx+1:], entries[idx:len(entries)-1]) - entries[idx] = entry - dst.entries = entries - return nil -} - -// Remove removes the given digest from the set. An err will be -// returned if the given digest is invalid. If the digest does -// not exist in the set, this operation will be a no-op. -func (dst *Set) Remove(d digest.Digest) error { - if err := d.Validate(); err != nil { - return err - } - dst.mutex.Lock() - defer dst.mutex.Unlock() - entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d} - searchFunc := func(i int) bool { - if dst.entries[i].val == entry.val { - return dst.entries[i].alg >= entry.alg - } - return dst.entries[i].val >= entry.val - } - idx := sort.Search(len(dst.entries), searchFunc) - // Not found if idx is after or value at idx is not digest - if idx == len(dst.entries) || dst.entries[idx].digest != d { - return nil - } - - entries := dst.entries - copy(entries[idx:], entries[idx+1:]) - entries = entries[:len(entries)-1] - dst.entries = entries - - return nil -} - -// All returns all the digests in the set -func (dst *Set) All() []digest.Digest { - dst.mutex.RLock() - defer dst.mutex.RUnlock() - retValues := make([]digest.Digest, len(dst.entries)) - for i := range dst.entries { - retValues[i] = dst.entries[i].digest - } - - return retValues -} - -// ShortCodeTable returns a map of Digest to unique short codes. The -// length represents the minimum value, the maximum length may be the -// entire value of digest if uniqueness cannot be achieved without the -// full value. This function will attempt to make short codes as short -// as possible to be unique. -func ShortCodeTable(dst *Set, length int) map[digest.Digest]string { - dst.mutex.RLock() - defer dst.mutex.RUnlock() - m := make(map[digest.Digest]string, len(dst.entries)) - l := length - resetIdx := 0 - for i := 0; i < len(dst.entries); i++ { - var short string - extended := true - for extended { - extended = false - if len(dst.entries[i].val) <= l { - short = dst.entries[i].digest.String() - } else { - short = dst.entries[i].val[:l] - for j := i + 1; j < len(dst.entries); j++ { - if checkShortMatch(dst.entries[j].alg, dst.entries[j].val, "", short) { - if j > resetIdx { - resetIdx = j - } - extended = true - } else { - break - } - } - if extended { - l++ - } - } - } - m[dst.entries[i].digest] = short - if i >= resetIdx { - l = length - } - } - return m -} - -type digestEntry struct { - alg digest.Algorithm - val string - digest digest.Digest -} - -type digestEntries []*digestEntry - -func (d digestEntries) Len() int { - return len(d) -} - -func (d digestEntries) Less(i, j int) bool { - if d[i].val != d[j].val { - return d[i].val < d[j].val - } - return d[i].alg < d[j].alg -} - -func (d digestEntries) Swap(i, j int) { - d[i], d[j] = d[j], d[i] -} diff --git a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/regexp.go b/cluster-autoscaler/vendor/github.com/docker/distribution/reference/regexp.go deleted file mode 100644 index 78603493203f..000000000000 --- a/cluster-autoscaler/vendor/github.com/docker/distribution/reference/regexp.go +++ /dev/null @@ -1,143 +0,0 @@ -package reference - -import "regexp" - -var ( - // alphaNumericRegexp defines the alpha numeric atom, typically a - // component of names. This only allows lower case characters and digits. - alphaNumericRegexp = match(`[a-z0-9]+`) - - // separatorRegexp defines the separators allowed to be embedded in name - // components. This allow one period, one or two underscore and multiple - // dashes. - separatorRegexp = match(`(?:[._]|__|[-]*)`) - - // nameComponentRegexp restricts registry path component names to start - // with at least one letter or number, with following parts able to be - // separated by one period, one or two underscore and multiple dashes. - nameComponentRegexp = expression( - alphaNumericRegexp, - optional(repeated(separatorRegexp, alphaNumericRegexp))) - - // domainComponentRegexp restricts the registry domain component of a - // repository name to start with a component as defined by DomainRegexp - // and followed by an optional port. - domainComponentRegexp = match(`(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`) - - // DomainRegexp defines the structure of potential domain components - // that may be part of image names. This is purposely a subset of what is - // allowed by DNS to ensure backwards compatibility with Docker image - // names. - DomainRegexp = expression( - domainComponentRegexp, - optional(repeated(literal(`.`), domainComponentRegexp)), - optional(literal(`:`), match(`[0-9]+`))) - - // TagRegexp matches valid tag names. From docker/docker:graph/tags.go. - TagRegexp = match(`[\w][\w.-]{0,127}`) - - // anchoredTagRegexp matches valid tag names, anchored at the start and - // end of the matched string. - anchoredTagRegexp = anchored(TagRegexp) - - // DigestRegexp matches valid digests. - DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`) - - // anchoredDigestRegexp matches valid digests, anchored at the start and - // end of the matched string. - anchoredDigestRegexp = anchored(DigestRegexp) - - // NameRegexp is the format for the name component of references. The - // regexp has capturing groups for the domain and name part omitting - // the separating forward slash from either. - NameRegexp = expression( - optional(DomainRegexp, literal(`/`)), - nameComponentRegexp, - optional(repeated(literal(`/`), nameComponentRegexp))) - - // anchoredNameRegexp is used to parse a name value, capturing the - // domain and trailing components. - anchoredNameRegexp = anchored( - optional(capture(DomainRegexp), literal(`/`)), - capture(nameComponentRegexp, - optional(repeated(literal(`/`), nameComponentRegexp)))) - - // ReferenceRegexp is the full supported format of a reference. The regexp - // is anchored and has capturing groups for name, tag, and digest - // components. - ReferenceRegexp = anchored(capture(NameRegexp), - optional(literal(":"), capture(TagRegexp)), - optional(literal("@"), capture(DigestRegexp))) - - // IdentifierRegexp is the format for string identifier used as a - // content addressable identifier using sha256. These identifiers - // are like digests without the algorithm, since sha256 is used. - IdentifierRegexp = match(`([a-f0-9]{64})`) - - // ShortIdentifierRegexp is the format used to represent a prefix - // of an identifier. A prefix may be used to match a sha256 identifier - // within a list of trusted identifiers. - ShortIdentifierRegexp = match(`([a-f0-9]{6,64})`) - - // anchoredIdentifierRegexp is used to check or match an - // identifier value, anchored at start and end of string. - anchoredIdentifierRegexp = anchored(IdentifierRegexp) - - // anchoredShortIdentifierRegexp is used to check if a value - // is a possible identifier prefix, anchored at start and end - // of string. - anchoredShortIdentifierRegexp = anchored(ShortIdentifierRegexp) -) - -// match compiles the string to a regular expression. -var match = regexp.MustCompile - -// literal compiles s into a literal regular expression, escaping any regexp -// reserved characters. -func literal(s string) *regexp.Regexp { - re := match(regexp.QuoteMeta(s)) - - if _, complete := re.LiteralPrefix(); !complete { - panic("must be a literal") - } - - return re -} - -// expression defines a full expression, where each regular expression must -// follow the previous. -func expression(res ...*regexp.Regexp) *regexp.Regexp { - var s string - for _, re := range res { - s += re.String() - } - - return match(s) -} - -// optional wraps the expression in a non-capturing group and makes the -// production optional. -func optional(res ...*regexp.Regexp) *regexp.Regexp { - return match(group(expression(res...)).String() + `?`) -} - -// repeated wraps the regexp in a non-capturing group to get one or more -// matches. -func repeated(res ...*regexp.Regexp) *regexp.Regexp { - return match(group(expression(res...)).String() + `+`) -} - -// group wraps the regexp in a non-capturing group. -func group(res ...*regexp.Regexp) *regexp.Regexp { - return match(`(?:` + expression(res...).String() + `)`) -} - -// capture wraps the expression in a capturing group. -func capture(res ...*regexp.Regexp) *regexp.Regexp { - return match(`(` + expression(res...).String() + `)`) -} - -// anchored anchors the regular expression by adding start and end delimiters. -func anchored(res ...*regexp.Regexp) *regexp.Regexp { - return match(`^` + expression(res...).String() + `$`) -} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/BUILD.bazel index 4331321139ec..0905f6353955 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "macro.go", "options.go", "program.go", + "validator.go", ], importpath = "github.com/google/cel-go/cel", visibility = ["//visibility:public"], @@ -22,15 +23,18 @@ go_library( "//checker:go_default_library", "//checker/decls:go_default_library", "//common:go_default_library", + "//common/ast:go_default_library", "//common/containers:go_default_library", + "//common/decls:go_default_library", + "//common/functions:go_default_library", "//common/operators:go_default_library", "//common/overloads:go_default_library", + "//common/stdlib:go_default_library", "//common/types:go_default_library", "//common/types/pb:go_default_library", "//common/types/ref:go_default_library", "//common/types/traits:go_default_library", "//interpreter:go_default_library", - "//interpreter/functions:go_default_library", "//parser:go_default_library", "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", @@ -72,6 +76,8 @@ go_test( "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_protobuf//encoding/prototext:go_default_library", "@org_golang_google_protobuf//types/known/structpb:go_default_library", + "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", ], ) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/decls.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/decls.go index c0624d1e5963..0f9501341b4c 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/decls.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/decls.go @@ -16,341 +16,133 @@ package cel import ( "fmt" - "strings" - "github.com/google/cel-go/checker/decls" + "github.com/google/cel-go/common/ast" + "github.com/google/cel-go/common/decls" + "github.com/google/cel-go/common/functions" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" - "github.com/google/cel-go/interpreter/functions" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) // Kind indicates a CEL type's kind which is used to differentiate quickly between simple and complex types. -type Kind uint +type Kind = types.Kind const ( // DynKind represents a dynamic type. This kind only exists at type-check time. - DynKind Kind = iota + DynKind Kind = types.DynKind // AnyKind represents a google.protobuf.Any type. This kind only exists at type-check time. - AnyKind + AnyKind = types.AnyKind // BoolKind represents a boolean type. - BoolKind + BoolKind = types.BoolKind // BytesKind represents a bytes type. - BytesKind + BytesKind = types.BytesKind // DoubleKind represents a double type. - DoubleKind + DoubleKind = types.DoubleKind // DurationKind represents a CEL duration type. - DurationKind + DurationKind = types.DurationKind // IntKind represents an integer type. - IntKind + IntKind = types.IntKind // ListKind represents a list type. - ListKind + ListKind = types.ListKind // MapKind represents a map type. - MapKind + MapKind = types.MapKind // NullTypeKind represents a null type. - NullTypeKind + NullTypeKind = types.NullTypeKind // OpaqueKind represents an abstract type which has no accessible fields. - OpaqueKind + OpaqueKind = types.OpaqueKind // StringKind represents a string type. - StringKind + StringKind = types.StringKind // StructKind represents a structured object with typed fields. - StructKind + StructKind = types.StructKind // TimestampKind represents a a CEL time type. - TimestampKind + TimestampKind = types.TimestampKind // TypeKind represents the CEL type. - TypeKind + TypeKind = types.TypeKind // TypeParamKind represents a parameterized type whose type name will be resolved at type-check time, if possible. - TypeParamKind + TypeParamKind = types.TypeParamKind // UintKind represents a uint type. - UintKind + UintKind = types.UintKind ) var ( // AnyType represents the google.protobuf.Any type. - AnyType = &Type{ - kind: AnyKind, - runtimeType: types.NewTypeValue("google.protobuf.Any"), - } + AnyType = types.AnyType // BoolType represents the bool type. - BoolType = &Type{ - kind: BoolKind, - runtimeType: types.BoolType, - } + BoolType = types.BoolType // BytesType represents the bytes type. - BytesType = &Type{ - kind: BytesKind, - runtimeType: types.BytesType, - } + BytesType = types.BytesType // DoubleType represents the double type. - DoubleType = &Type{ - kind: DoubleKind, - runtimeType: types.DoubleType, - } + DoubleType = types.DoubleType // DurationType represents the CEL duration type. - DurationType = &Type{ - kind: DurationKind, - runtimeType: types.DurationType, - } + DurationType = types.DurationType // DynType represents a dynamic CEL type whose type will be determined at runtime from context. - DynType = &Type{ - kind: DynKind, - runtimeType: types.NewTypeValue("dyn"), - } + DynType = types.DynType // IntType represents the int type. - IntType = &Type{ - kind: IntKind, - runtimeType: types.IntType, - } + IntType = types.IntType // NullType represents the type of a null value. - NullType = &Type{ - kind: NullTypeKind, - runtimeType: types.NullType, - } + NullType = types.NullType // StringType represents the string type. - StringType = &Type{ - kind: StringKind, - runtimeType: types.StringType, - } + StringType = types.StringType // TimestampType represents the time type. - TimestampType = &Type{ - kind: TimestampKind, - runtimeType: types.TimestampType, - } + TimestampType = types.TimestampType // TypeType represents a CEL type - TypeType = &Type{ - kind: TypeKind, - runtimeType: types.TypeType, - } + TypeType = types.TypeType // UintType represents a uint type. - UintType = &Type{ - kind: UintKind, - runtimeType: types.UintType, - } + UintType = types.UintType + + // function references for instantiating new types. + + // ListType creates an instances of a list type value with the provided element type. + ListType = types.NewListType + // MapType creates an instance of a map type value with the provided key and value types. + MapType = types.NewMapType + // NullableType creates an instance of a nullable type with the provided wrapped type. + // + // Note: only primitive types are supported as wrapped types. + NullableType = types.NewNullableType + // OptionalType creates an abstract parameterized type instance corresponding to CEL's notion of optional. + OptionalType = types.NewOptionalType + // OpaqueType creates an abstract parameterized type with a given name. + OpaqueType = types.NewOpaqueType + // ObjectType creates a type references to an externally defined type, e.g. a protobuf message type. + ObjectType = types.NewObjectType + // TypeParamType creates a parameterized type instance. + TypeParamType = types.NewTypeParamType ) // Type holds a reference to a runtime type with an optional type-checked set of type parameters. -type Type struct { - // kind indicates general category of the type. - kind Kind - - // runtimeType is the runtime type of the declaration. - runtimeType ref.Type - - // parameters holds the optional type-checked set of type parameters that are used during static analysis. - parameters []*Type - - // isAssignableType function determines whether one type is assignable to this type. - // A nil value for the isAssignableType function falls back to equality of kind, runtimeType, and parameters. - isAssignableType func(other *Type) bool - - // isAssignableRuntimeType function determines whether the runtime type (with erasure) is assignable to this type. - // A nil value for the isAssignableRuntimeType function falls back to the equality of the type or type name. - isAssignableRuntimeType func(other ref.Val) bool -} - -// IsAssignableType determines whether the current type is type-check assignable from the input fromType. -func (t *Type) IsAssignableType(fromType *Type) bool { - if t.isAssignableType != nil { - return t.isAssignableType(fromType) - } - return t.defaultIsAssignableType(fromType) -} - -// IsAssignableRuntimeType determines whether the current type is runtime assignable from the input runtimeType. -// -// At runtime, parameterized types are erased and so a function which type-checks to support a map(string, string) -// will have a runtime assignable type of a map. -func (t *Type) IsAssignableRuntimeType(val ref.Val) bool { - if t.isAssignableRuntimeType != nil { - return t.isAssignableRuntimeType(val) - } - return t.defaultIsAssignableRuntimeType(val) -} - -// String returns a human-readable definition of the type name. -func (t *Type) String() string { - if len(t.parameters) == 0 { - return t.runtimeType.TypeName() - } - params := make([]string, len(t.parameters)) - for i, p := range t.parameters { - params[i] = p.String() - } - return fmt.Sprintf("%s(%s)", t.runtimeType.TypeName(), strings.Join(params, ", ")) -} - -// isDyn indicates whether the type is dynamic in any way. -func (t *Type) isDyn() bool { - return t.kind == DynKind || t.kind == AnyKind || t.kind == TypeParamKind -} - -// equals indicates whether two types have the same kind, type name, and parameters. -func (t *Type) equals(other *Type) bool { - if t.kind != other.kind || - t.runtimeType.TypeName() != other.runtimeType.TypeName() || - len(t.parameters) != len(other.parameters) { - return false - } - for i, p := range t.parameters { - if !p.equals(other.parameters[i]) { - return false - } - } - return true -} - -// defaultIsAssignableType provides the standard definition of what it means for one type to be assignable to another -// where any of the following may return a true result: -// - The from types are the same instance -// - The target type is dynamic -// - The fromType has the same kind and type name as the target type, and all parameters of the target type -// -// are IsAssignableType() from the parameters of the fromType. -func (t *Type) defaultIsAssignableType(fromType *Type) bool { - if t == fromType || t.isDyn() { - return true - } - if t.kind != fromType.kind || - t.runtimeType.TypeName() != fromType.runtimeType.TypeName() || - len(t.parameters) != len(fromType.parameters) { - return false - } - for i, tp := range t.parameters { - fp := fromType.parameters[i] - if !tp.IsAssignableType(fp) { - return false - } - } - return true -} - -// defaultIsAssignableRuntimeType inspects the type and in the case of list and map elements, the key and element types -// to determine whether a ref.Val is assignable to the declared type for a function signature. -func (t *Type) defaultIsAssignableRuntimeType(val ref.Val) bool { - valType := val.Type() - if !(t.runtimeType == valType || t.isDyn() || t.runtimeType.TypeName() == valType.TypeName()) { - return false - } - switch t.runtimeType { - case types.ListType: - elemType := t.parameters[0] - l := val.(traits.Lister) - if l.Size() == types.IntZero { - return true - } - it := l.Iterator() - for it.HasNext() == types.True { - elemVal := it.Next() - return elemType.IsAssignableRuntimeType(elemVal) - } - case types.MapType: - keyType := t.parameters[0] - elemType := t.parameters[1] - m := val.(traits.Mapper) - if m.Size() == types.IntZero { - return true - } - it := m.Iterator() - for it.HasNext() == types.True { - keyVal := it.Next() - elemVal := m.Get(keyVal) - return keyType.IsAssignableRuntimeType(keyVal) && elemType.IsAssignableRuntimeType(elemVal) - } - } - return true -} - -// ListType creates an instances of a list type value with the provided element type. -func ListType(elemType *Type) *Type { - return &Type{ - kind: ListKind, - runtimeType: types.ListType, - parameters: []*Type{elemType}, - } -} - -// MapType creates an instance of a map type value with the provided key and value types. -func MapType(keyType, valueType *Type) *Type { - return &Type{ - kind: MapKind, - runtimeType: types.MapType, - parameters: []*Type{keyType, valueType}, - } -} - -// NullableType creates an instance of a nullable type with the provided wrapped type. -// -// Note: only primitive types are supported as wrapped types. -func NullableType(wrapped *Type) *Type { - return &Type{ - kind: wrapped.kind, - runtimeType: wrapped.runtimeType, - parameters: wrapped.parameters, - isAssignableType: func(other *Type) bool { - return NullType.IsAssignableType(other) || wrapped.IsAssignableType(other) - }, - isAssignableRuntimeType: func(other ref.Val) bool { - return NullType.IsAssignableRuntimeType(other) || wrapped.IsAssignableRuntimeType(other) - }, - } -} - -// OptionalType creates an abstract parameterized type instance corresponding to CEL's notion of optional. -func OptionalType(param *Type) *Type { - return OpaqueType("optional", param) -} - -// OpaqueType creates an abstract parameterized type with a given name. -func OpaqueType(name string, params ...*Type) *Type { - return &Type{ - kind: OpaqueKind, - runtimeType: types.NewTypeValue(name), - parameters: params, - } -} - -// ObjectType creates a type references to an externally defined type, e.g. a protobuf message type. -func ObjectType(typeName string) *Type { - return &Type{ - kind: StructKind, - runtimeType: types.NewObjectTypeValue(typeName), - } -} +type Type = types.Type -// TypeParamType creates a parameterized type instance. -func TypeParamType(paramName string) *Type { - return &Type{ - kind: TypeParamKind, - runtimeType: types.NewTypeValue(paramName), +// Constant creates an instances of an identifier declaration with a variable name, type, and value. +func Constant(name string, t *Type, v ref.Val) EnvOption { + return func(e *Env) (*Env, error) { + e.variables = append(e.variables, decls.NewConstant(name, t, v)) + return e, nil } } // Variable creates an instance of a variable declaration with a variable name and type. func Variable(name string, t *Type) EnvOption { return func(e *Env) (*Env, error) { - et, err := TypeToExprType(t) - if err != nil { - return nil, err - } - e.declarations = append(e.declarations, decls.NewVar(name, et)) + e.variables = append(e.variables, decls.NewVariable(name, t)) return e, nil } } @@ -386,53 +178,30 @@ func Variable(name string, t *Type) EnvOption { // overload as CEL can only make inferences by type-name regarding such types. func Function(name string, opts ...FunctionOpt) EnvOption { return func(e *Env) (*Env, error) { - fn := &functionDecl{ - name: name, - overloads: []*overloadDecl{}, - options: opts, - } - err := fn.init() - if err != nil { - return nil, err - } - _, err = functionDeclToExprDecl(fn) + fn, err := decls.NewFunction(name, opts...) if err != nil { return nil, err } - if existing, found := e.functions[fn.name]; found { - fn, err = existing.merge(fn) + if existing, found := e.functions[fn.Name()]; found { + fn, err = existing.Merge(fn) if err != nil { return nil, err } } - e.functions[name] = fn + e.functions[fn.Name()] = fn return e, nil } } // FunctionOpt defines a functional option for configuring a function declaration. -type FunctionOpt func(*functionDecl) (*functionDecl, error) +type FunctionOpt = decls.FunctionOpt // SingletonUnaryBinding creates a singleton function definition to be used for all function overloads. // // Note, this approach works well if operand is expected to have a specific trait which it implements, // e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. func SingletonUnaryBinding(fn functions.UnaryOp, traits ...int) FunctionOpt { - trait := 0 - for _, t := range traits { - trait = trait | t - } - return func(f *functionDecl) (*functionDecl, error) { - if f.singleton != nil { - return nil, fmt.Errorf("function already has a singleton binding: %s", f.name) - } - f.singleton = &functions.Overload{ - Operator: f.name, - Unary: fn, - OperandTrait: trait, - } - return f, nil - } + return decls.SingletonUnaryBinding(fn, traits...) } // SingletonBinaryImpl creates a singleton function definition to be used with all function overloads. @@ -442,7 +211,7 @@ func SingletonUnaryBinding(fn functions.UnaryOp, traits ...int) FunctionOpt { // // Deprecated: use SingletonBinaryBinding func SingletonBinaryImpl(fn functions.BinaryOp, traits ...int) FunctionOpt { - return SingletonBinaryBinding(fn, traits...) + return decls.SingletonBinaryBinding(fn, traits...) } // SingletonBinaryBinding creates a singleton function definition to be used with all function overloads. @@ -450,21 +219,7 @@ func SingletonBinaryImpl(fn functions.BinaryOp, traits ...int) FunctionOpt { // Note, this approach works well if operand is expected to have a specific trait which it implements, // e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. func SingletonBinaryBinding(fn functions.BinaryOp, traits ...int) FunctionOpt { - trait := 0 - for _, t := range traits { - trait = trait | t - } - return func(f *functionDecl) (*functionDecl, error) { - if f.singleton != nil { - return nil, fmt.Errorf("function already has a singleton binding: %s", f.name) - } - f.singleton = &functions.Overload{ - Operator: f.name, - Binary: fn, - OperandTrait: trait, - } - return f, nil - } + return decls.SingletonBinaryBinding(fn, traits...) } // SingletonFunctionImpl creates a singleton function definition to be used with all function overloads. @@ -474,7 +229,7 @@ func SingletonBinaryBinding(fn functions.BinaryOp, traits ...int) FunctionOpt { // // Deprecated: use SingletonFunctionBinding func SingletonFunctionImpl(fn functions.FunctionOp, traits ...int) FunctionOpt { - return SingletonFunctionBinding(fn, traits...) + return decls.SingletonFunctionBinding(fn, traits...) } // SingletonFunctionBinding creates a singleton function definition to be used with all function overloads. @@ -482,21 +237,13 @@ func SingletonFunctionImpl(fn functions.FunctionOp, traits ...int) FunctionOpt { // Note, this approach works well if operand is expected to have a specific trait which it implements, // e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. func SingletonFunctionBinding(fn functions.FunctionOp, traits ...int) FunctionOpt { - trait := 0 - for _, t := range traits { - trait = trait | t - } - return func(f *functionDecl) (*functionDecl, error) { - if f.singleton != nil { - return nil, fmt.Errorf("function already has a singleton binding: %s", f.name) - } - f.singleton = &functions.Overload{ - Operator: f.name, - Function: fn, - OperandTrait: trait, - } - return f, nil - } + return decls.SingletonFunctionBinding(fn, traits...) +} + +// DisableDeclaration disables the function signatures, effectively removing them from the type-check +// environment while preserving the runtime bindings. +func DisableDeclaration(value bool) FunctionOpt { + return decls.DisableDeclaration(value) } // Overload defines a new global overload with an overload id, argument types, and result type. Through the @@ -506,7 +253,7 @@ func SingletonFunctionBinding(fn functions.FunctionOp, traits ...int) FunctionOp // Note: function bindings should be commonly configured with Overload instances whereas operand traits and // strict-ness should be rare occurrences. func Overload(overloadID string, args []*Type, resultType *Type, opts ...OverloadOpt) FunctionOpt { - return newOverload(overloadID, false, args, resultType, opts...) + return decls.Overload(overloadID, args, resultType, opts...) } // MemberOverload defines a new receiver-style overload (or member function) with an overload id, argument types, @@ -516,609 +263,51 @@ func Overload(overloadID string, args []*Type, resultType *Type, opts ...Overloa // Note: function bindings should be commonly configured with Overload instances whereas operand traits and // strict-ness should be rare occurrences. func MemberOverload(overloadID string, args []*Type, resultType *Type, opts ...OverloadOpt) FunctionOpt { - return newOverload(overloadID, true, args, resultType, opts...) + return decls.MemberOverload(overloadID, args, resultType, opts...) } // OverloadOpt is a functional option for configuring a function overload. -type OverloadOpt func(*overloadDecl) (*overloadDecl, error) +type OverloadOpt = decls.OverloadOpt // UnaryBinding provides the implementation of a unary overload. The provided function is protected by a runtime // type-guard which ensures runtime type agreement between the overload signature and runtime argument types. func UnaryBinding(binding functions.UnaryOp) OverloadOpt { - return func(o *overloadDecl) (*overloadDecl, error) { - if o.hasBinding() { - return nil, fmt.Errorf("overload already has a binding: %s", o.id) - } - if len(o.argTypes) != 1 { - return nil, fmt.Errorf("unary function bound to non-unary overload: %s", o.id) - } - o.unaryOp = binding - return o, nil - } + return decls.UnaryBinding(binding) } // BinaryBinding provides the implementation of a binary overload. The provided function is protected by a runtime // type-guard which ensures runtime type agreement between the overload signature and runtime argument types. func BinaryBinding(binding functions.BinaryOp) OverloadOpt { - return func(o *overloadDecl) (*overloadDecl, error) { - if o.hasBinding() { - return nil, fmt.Errorf("overload already has a binding: %s", o.id) - } - if len(o.argTypes) != 2 { - return nil, fmt.Errorf("binary function bound to non-binary overload: %s", o.id) - } - o.binaryOp = binding - return o, nil - } + return decls.BinaryBinding(binding) } // FunctionBinding provides the implementation of a variadic overload. The provided function is protected by a runtime // type-guard which ensures runtime type agreement between the overload signature and runtime argument types. func FunctionBinding(binding functions.FunctionOp) OverloadOpt { - return func(o *overloadDecl) (*overloadDecl, error) { - if o.hasBinding() { - return nil, fmt.Errorf("overload already has a binding: %s", o.id) - } - o.functionOp = binding - return o, nil - } + return decls.FunctionBinding(binding) } // OverloadIsNonStrict enables the function to be called with error and unknown argument values. // // Note: do not use this option unless absoluately necessary as it should be an uncommon feature. func OverloadIsNonStrict() OverloadOpt { - return func(o *overloadDecl) (*overloadDecl, error) { - o.nonStrict = true - return o, nil - } + return decls.OverloadIsNonStrict() } // OverloadOperandTrait configures a set of traits which the first argument to the overload must implement in order to be // successfully invoked. func OverloadOperandTrait(trait int) OverloadOpt { - return func(o *overloadDecl) (*overloadDecl, error) { - o.operandTrait = trait - return o, nil - } -} - -type functionDecl struct { - name string - overloads []*overloadDecl - options []FunctionOpt - singleton *functions.Overload - initialized bool -} - -// init ensures that a function's options have been applied. -// -// This function is used in both the environment configuration and internally for function merges. -func (f *functionDecl) init() error { - if f.initialized { - return nil - } - f.initialized = true - - var err error - for _, opt := range f.options { - f, err = opt(f) - if err != nil { - return err - } - } - if len(f.overloads) == 0 { - return fmt.Errorf("function %s must have at least one overload", f.name) - } - return nil -} - -// bindings produces a set of function bindings, if any are defined. -func (f *functionDecl) bindings() ([]*functions.Overload, error) { - overloads := []*functions.Overload{} - nonStrict := false - for _, o := range f.overloads { - if o.hasBinding() { - overload := &functions.Overload{ - Operator: o.id, - Unary: o.guardedUnaryOp(f.name), - Binary: o.guardedBinaryOp(f.name), - Function: o.guardedFunctionOp(f.name), - OperandTrait: o.operandTrait, - NonStrict: o.nonStrict, - } - overloads = append(overloads, overload) - nonStrict = nonStrict || o.nonStrict - } - } - if f.singleton != nil { - if len(overloads) != 0 { - return nil, fmt.Errorf("singleton function incompatible with specialized overloads: %s", f.name) - } - return []*functions.Overload{ - { - Operator: f.name, - Unary: f.singleton.Unary, - Binary: f.singleton.Binary, - Function: f.singleton.Function, - OperandTrait: f.singleton.OperandTrait, - }, - }, nil - } - if len(overloads) == 0 { - return overloads, nil - } - // Single overload. Replicate an entry for it using the function name as well. - if len(overloads) == 1 { - if overloads[0].Operator == f.name { - return overloads, nil - } - return append(overloads, &functions.Overload{ - Operator: f.name, - Unary: overloads[0].Unary, - Binary: overloads[0].Binary, - Function: overloads[0].Function, - NonStrict: overloads[0].NonStrict, - OperandTrait: overloads[0].OperandTrait, - }), nil - } - // All of the defined overloads are wrapped into a top-level function which - // performs dynamic dispatch to the proper overload based on the argument types. - bindings := append([]*functions.Overload{}, overloads...) - funcDispatch := func(args ...ref.Val) ref.Val { - for _, o := range f.overloads { - if !o.matchesRuntimeSignature(args...) { - continue - } - switch len(args) { - case 1: - if o.unaryOp != nil { - return o.unaryOp(args[0]) - } - case 2: - if o.binaryOp != nil { - return o.binaryOp(args[0], args[1]) - } - } - if o.functionOp != nil { - return o.functionOp(args...) - } - // eventually this will fall through to the noSuchOverload below. - } - return noSuchOverload(f.name, args...) - } - function := &functions.Overload{ - Operator: f.name, - Function: funcDispatch, - NonStrict: nonStrict, - } - return append(bindings, function), nil -} - -// merge one function declaration with another. -// -// If a function is extended, by say adding new overloads to an existing function, then it is merged with the -// prior definition of the function at which point its overloads must not collide with pre-existing overloads -// and its bindings (singleton, or per-overload) must not conflict with previous definitions either. -func (f *functionDecl) merge(other *functionDecl) (*functionDecl, error) { - if f.name != other.name { - return nil, fmt.Errorf("cannot merge unrelated functions. %s and %s", f.name, other.name) - } - err := f.init() - if err != nil { - return nil, err - } - err = other.init() - if err != nil { - return nil, err - } - merged := &functionDecl{ - name: f.name, - overloads: make([]*overloadDecl, len(f.overloads)), - options: []FunctionOpt{}, - initialized: true, - singleton: f.singleton, - } - copy(merged.overloads, f.overloads) - for _, o := range other.overloads { - err := merged.addOverload(o) - if err != nil { - return nil, fmt.Errorf("function declaration merge failed: %v", err) - } - } - if other.singleton != nil { - if merged.singleton != nil { - return nil, fmt.Errorf("function already has a binding: %s", f.name) - } - merged.singleton = other.singleton - } - return merged, nil -} - -// addOverload ensures that the new overload does not collide with an existing overload signature; -// however, if the function signatures are identical, the implementation may be rewritten as its -// difficult to compare functions by object identity. -func (f *functionDecl) addOverload(overload *overloadDecl) error { - for index, o := range f.overloads { - if o.id != overload.id && o.signatureOverlaps(overload) { - return fmt.Errorf("overload signature collision in function %s: %s collides with %s", f.name, o.id, overload.id) - } - if o.id == overload.id { - if o.signatureEquals(overload) && o.nonStrict == overload.nonStrict { - // Allow redefinition of an overload implementation so long as the signatures match. - f.overloads[index] = overload - return nil - } - return fmt.Errorf("overload redefinition in function. %s: %s has multiple definitions", f.name, o.id) - } - } - f.overloads = append(f.overloads, overload) - return nil -} - -func noSuchOverload(funcName string, args ...ref.Val) ref.Val { - argTypes := make([]string, len(args)) - for i, arg := range args { - argTypes[i] = arg.Type().TypeName() - } - signature := strings.Join(argTypes, ", ") - return types.NewErr("no such overload: %s(%s)", funcName, signature) -} - -// overloadDecl contains all of the relevant information regarding a specific function overload. -type overloadDecl struct { - id string - argTypes []*Type - resultType *Type - memberFunction bool - - // binding options, optional but encouraged. - unaryOp functions.UnaryOp - binaryOp functions.BinaryOp - functionOp functions.FunctionOp - - // behavioral options, uncommon - nonStrict bool - operandTrait int -} - -func (o *overloadDecl) hasBinding() bool { - return o.unaryOp != nil || o.binaryOp != nil || o.functionOp != nil -} - -// guardedUnaryOp creates an invocation guard around the provided unary operator, if one is defined. -func (o *overloadDecl) guardedUnaryOp(funcName string) functions.UnaryOp { - if o.unaryOp == nil { - return nil - } - return func(arg ref.Val) ref.Val { - if !o.matchesRuntimeUnarySignature(arg) { - return noSuchOverload(funcName, arg) - } - return o.unaryOp(arg) - } -} - -// guardedBinaryOp creates an invocation guard around the provided binary operator, if one is defined. -func (o *overloadDecl) guardedBinaryOp(funcName string) functions.BinaryOp { - if o.binaryOp == nil { - return nil - } - return func(arg1, arg2 ref.Val) ref.Val { - if !o.matchesRuntimeBinarySignature(arg1, arg2) { - return noSuchOverload(funcName, arg1, arg2) - } - return o.binaryOp(arg1, arg2) - } -} - -// guardedFunctionOp creates an invocation guard around the provided variadic function binding, if one is provided. -func (o *overloadDecl) guardedFunctionOp(funcName string) functions.FunctionOp { - if o.functionOp == nil { - return nil - } - return func(args ...ref.Val) ref.Val { - if !o.matchesRuntimeSignature(args...) { - return noSuchOverload(funcName, args...) - } - return o.functionOp(args...) - } -} - -// matchesRuntimeUnarySignature indicates whether the argument type is runtime assiganble to the overload's expected argument. -func (o *overloadDecl) matchesRuntimeUnarySignature(arg ref.Val) bool { - if o.nonStrict && types.IsUnknownOrError(arg) { - return true - } - return o.argTypes[0].IsAssignableRuntimeType(arg) && (o.operandTrait == 0 || arg.Type().HasTrait(o.operandTrait)) -} - -// matchesRuntimeBinarySignature indicates whether the argument types are runtime assiganble to the overload's expected arguments. -func (o *overloadDecl) matchesRuntimeBinarySignature(arg1, arg2 ref.Val) bool { - if o.nonStrict { - if types.IsUnknownOrError(arg1) { - return types.IsUnknownOrError(arg2) || o.argTypes[1].IsAssignableRuntimeType(arg2) - } - } else if !o.argTypes[1].IsAssignableRuntimeType(arg2) { - return false - } - return o.argTypes[0].IsAssignableRuntimeType(arg1) && (o.operandTrait == 0 || arg1.Type().HasTrait(o.operandTrait)) -} - -// matchesRuntimeSignature indicates whether the argument types are runtime assiganble to the overload's expected arguments. -func (o *overloadDecl) matchesRuntimeSignature(args ...ref.Val) bool { - if len(args) != len(o.argTypes) { - return false - } - if len(args) == 0 { - return true - } - allArgsMatch := true - for i, arg := range args { - if o.nonStrict && types.IsUnknownOrError(arg) { - continue - } - allArgsMatch = allArgsMatch && o.argTypes[i].IsAssignableRuntimeType(arg) - } - - arg := args[0] - return allArgsMatch && (o.operandTrait == 0 || (o.nonStrict && types.IsUnknownOrError(arg)) || arg.Type().HasTrait(o.operandTrait)) -} - -// signatureEquals indicates whether one overload has an identical signature to another overload. -// -// Providing a duplicate signature is not an issue, but an overloapping signature is problematic. -func (o *overloadDecl) signatureEquals(other *overloadDecl) bool { - if o.id != other.id || o.memberFunction != other.memberFunction || len(o.argTypes) != len(other.argTypes) { - return false - } - for i, at := range o.argTypes { - oat := other.argTypes[i] - if !at.equals(oat) { - return false - } - } - return o.resultType.equals(other.resultType) -} - -// signatureOverlaps indicates whether one overload has an overlapping signature with another overload. -// -// The 'other' overload must first be checked for equality before determining whether it overlaps in order to be completely accurate. -func (o *overloadDecl) signatureOverlaps(other *overloadDecl) bool { - if o.memberFunction != other.memberFunction || len(o.argTypes) != len(other.argTypes) { - return false - } - argsOverlap := true - for i, argType := range o.argTypes { - otherArgType := other.argTypes[i] - argsOverlap = argsOverlap && - (argType.IsAssignableType(otherArgType) || - otherArgType.IsAssignableType(argType)) - } - return argsOverlap -} - -func newOverload(overloadID string, memberFunction bool, args []*Type, resultType *Type, opts ...OverloadOpt) FunctionOpt { - return func(f *functionDecl) (*functionDecl, error) { - overload := &overloadDecl{ - id: overloadID, - argTypes: args, - resultType: resultType, - memberFunction: memberFunction, - } - var err error - for _, opt := range opts { - overload, err = opt(overload) - if err != nil { - return nil, err - } - } - err = f.addOverload(overload) - if err != nil { - return nil, err - } - return f, nil - } -} - -func maybeWrapper(t *Type, pbType *exprpb.Type) *exprpb.Type { - if t.IsAssignableType(NullType) { - return decls.NewWrapperType(pbType) - } - return pbType + return decls.OverloadOperandTrait(trait) } // TypeToExprType converts a CEL-native type representation to a protobuf CEL Type representation. func TypeToExprType(t *Type) (*exprpb.Type, error) { - switch t.kind { - case AnyKind: - return decls.Any, nil - case BoolKind: - return maybeWrapper(t, decls.Bool), nil - case BytesKind: - return maybeWrapper(t, decls.Bytes), nil - case DoubleKind: - return maybeWrapper(t, decls.Double), nil - case DurationKind: - return decls.Duration, nil - case DynKind: - return decls.Dyn, nil - case IntKind: - return maybeWrapper(t, decls.Int), nil - case ListKind: - et, err := TypeToExprType(t.parameters[0]) - if err != nil { - return nil, err - } - return decls.NewListType(et), nil - case MapKind: - kt, err := TypeToExprType(t.parameters[0]) - if err != nil { - return nil, err - } - vt, err := TypeToExprType(t.parameters[1]) - if err != nil { - return nil, err - } - return decls.NewMapType(kt, vt), nil - case NullTypeKind: - return decls.Null, nil - case OpaqueKind: - params := make([]*exprpb.Type, len(t.parameters)) - for i, p := range t.parameters { - pt, err := TypeToExprType(p) - if err != nil { - return nil, err - } - params[i] = pt - } - return decls.NewAbstractType(t.runtimeType.TypeName(), params...), nil - case StringKind: - return maybeWrapper(t, decls.String), nil - case StructKind: - switch t.runtimeType.TypeName() { - case "google.protobuf.Any": - return decls.Any, nil - case "google.protobuf.Duration": - return decls.Duration, nil - case "google.protobuf.Timestamp": - return decls.Timestamp, nil - case "google.protobuf.Value": - return decls.Dyn, nil - case "google.protobuf.ListValue": - return decls.NewListType(decls.Dyn), nil - case "google.protobuf.Struct": - return decls.NewMapType(decls.String, decls.Dyn), nil - case "google.protobuf.BoolValue": - return decls.NewWrapperType(decls.Bool), nil - case "google.protobuf.BytesValue": - return decls.NewWrapperType(decls.Bytes), nil - case "google.protobuf.DoubleValue", "google.protobuf.FloatValue": - return decls.NewWrapperType(decls.Double), nil - case "google.protobuf.Int32Value", "google.protobuf.Int64Value": - return decls.NewWrapperType(decls.Int), nil - case "google.protobuf.StringValue": - return decls.NewWrapperType(decls.String), nil - case "google.protobuf.UInt32Value", "google.protobuf.UInt64Value": - return decls.NewWrapperType(decls.Uint), nil - default: - return decls.NewObjectType(t.runtimeType.TypeName()), nil - } - case TimestampKind: - return decls.Timestamp, nil - case TypeParamKind: - return decls.NewTypeParamType(t.runtimeType.TypeName()), nil - case TypeKind: - return decls.NewTypeType(decls.Dyn), nil - case UintKind: - return maybeWrapper(t, decls.Uint), nil - } - return nil, fmt.Errorf("missing type conversion to proto: %v", t) + return types.TypeToExprType(t) } // ExprTypeToType converts a protobuf CEL type representation to a CEL-native type representation. func ExprTypeToType(t *exprpb.Type) (*Type, error) { - switch t.GetTypeKind().(type) { - case *exprpb.Type_Dyn: - return DynType, nil - case *exprpb.Type_AbstractType_: - paramTypes := make([]*Type, len(t.GetAbstractType().GetParameterTypes())) - for i, p := range t.GetAbstractType().GetParameterTypes() { - pt, err := ExprTypeToType(p) - if err != nil { - return nil, err - } - paramTypes[i] = pt - } - return OpaqueType(t.GetAbstractType().GetName(), paramTypes...), nil - case *exprpb.Type_ListType_: - et, err := ExprTypeToType(t.GetListType().GetElemType()) - if err != nil { - return nil, err - } - return ListType(et), nil - case *exprpb.Type_MapType_: - kt, err := ExprTypeToType(t.GetMapType().GetKeyType()) - if err != nil { - return nil, err - } - vt, err := ExprTypeToType(t.GetMapType().GetValueType()) - if err != nil { - return nil, err - } - return MapType(kt, vt), nil - case *exprpb.Type_MessageType: - switch t.GetMessageType() { - case "google.protobuf.Any": - return AnyType, nil - case "google.protobuf.Duration": - return DurationType, nil - case "google.protobuf.Timestamp": - return TimestampType, nil - case "google.protobuf.Value": - return DynType, nil - case "google.protobuf.ListValue": - return ListType(DynType), nil - case "google.protobuf.Struct": - return MapType(StringType, DynType), nil - case "google.protobuf.BoolValue": - return NullableType(BoolType), nil - case "google.protobuf.BytesValue": - return NullableType(BytesType), nil - case "google.protobuf.DoubleValue", "google.protobuf.FloatValue": - return NullableType(DoubleType), nil - case "google.protobuf.Int32Value", "google.protobuf.Int64Value": - return NullableType(IntType), nil - case "google.protobuf.StringValue": - return NullableType(StringType), nil - case "google.protobuf.UInt32Value", "google.protobuf.UInt64Value": - return NullableType(UintType), nil - default: - return ObjectType(t.GetMessageType()), nil - } - case *exprpb.Type_Null: - return NullType, nil - case *exprpb.Type_Primitive: - switch t.GetPrimitive() { - case exprpb.Type_BOOL: - return BoolType, nil - case exprpb.Type_BYTES: - return BytesType, nil - case exprpb.Type_DOUBLE: - return DoubleType, nil - case exprpb.Type_INT64: - return IntType, nil - case exprpb.Type_STRING: - return StringType, nil - case exprpb.Type_UINT64: - return UintType, nil - default: - return nil, fmt.Errorf("unsupported primitive type: %v", t) - } - case *exprpb.Type_TypeParam: - return TypeParamType(t.GetTypeParam()), nil - case *exprpb.Type_Type: - return TypeType, nil - case *exprpb.Type_WellKnown: - switch t.GetWellKnown() { - case exprpb.Type_ANY: - return AnyType, nil - case exprpb.Type_DURATION: - return DurationType, nil - case exprpb.Type_TIMESTAMP: - return TimestampType, nil - default: - return nil, fmt.Errorf("unsupported well-known type: %v", t) - } - case *exprpb.Type_Wrapper: - t, err := ExprTypeToType(&exprpb.Type{TypeKind: &exprpb.Type_Primitive{Primitive: t.GetWrapper()}}) - if err != nil { - return nil, err - } - return NullableType(t), nil - default: - return nil, fmt.Errorf("unsupported type: %v", t) - } + return types.ExprTypeToType(t) } // ExprDeclToDeclaration converts a protobuf CEL declaration to a CEL-native declaration, either a Variable or Function. @@ -1130,82 +319,42 @@ func ExprDeclToDeclaration(d *exprpb.Decl) (EnvOption, error) { for i, o := range overloads { args := make([]*Type, len(o.GetParams())) for j, p := range o.GetParams() { - a, err := ExprTypeToType(p) + a, err := types.ExprTypeToType(p) if err != nil { return nil, err } args[j] = a } - res, err := ExprTypeToType(o.GetResultType()) + res, err := types.ExprTypeToType(o.GetResultType()) if err != nil { return nil, err } - opts[i] = Overload(o.GetOverloadId(), args, res) + if o.IsInstanceFunction { + opts[i] = decls.MemberOverload(o.GetOverloadId(), args, res) + } else { + opts[i] = decls.Overload(o.GetOverloadId(), args, res) + } } return Function(d.GetName(), opts...), nil case *exprpb.Decl_Ident: - t, err := ExprTypeToType(d.GetIdent().GetType()) + t, err := types.ExprTypeToType(d.GetIdent().GetType()) if err != nil { return nil, err } - return Variable(d.GetName(), t), nil - default: - return nil, fmt.Errorf("unsupported decl: %v", d) - } - -} - -func functionDeclToExprDecl(f *functionDecl) (*exprpb.Decl, error) { - overloads := make([]*exprpb.Decl_FunctionDecl_Overload, len(f.overloads)) - i := 0 - for _, o := range f.overloads { - paramNames := map[string]struct{}{} - argTypes := make([]*exprpb.Type, len(o.argTypes)) - for j, a := range o.argTypes { - collectParamNames(paramNames, a) - at, err := TypeToExprType(a) - if err != nil { - return nil, err - } - argTypes[j] = at + if d.GetIdent().GetValue() == nil { + return Variable(d.GetName(), t), nil } - collectParamNames(paramNames, o.resultType) - resultType, err := TypeToExprType(o.resultType) + val, err := ast.ConstantToVal(d.GetIdent().GetValue()) if err != nil { return nil, err } - if len(paramNames) == 0 { - if o.memberFunction { - overloads[i] = decls.NewInstanceOverload(o.id, argTypes, resultType) - } else { - overloads[i] = decls.NewOverload(o.id, argTypes, resultType) - } - } else { - params := []string{} - for pn := range paramNames { - params = append(params, pn) - } - if o.memberFunction { - overloads[i] = decls.NewParameterizedInstanceOverload(o.id, argTypes, resultType, params) - } else { - overloads[i] = decls.NewParameterizedOverload(o.id, argTypes, resultType, params) - } - } - i++ - } - return decls.NewFunction(f.name, overloads...), nil -} - -func collectParamNames(paramNames map[string]struct{}, arg *Type) { - if arg.kind == TypeParamKind { - paramNames[arg.runtimeType.TypeName()] = struct{}{} - } - for _, param := range arg.parameters { - collectParamNames(paramNames, param) + return Constant(d.GetName(), t, val), nil + default: + return nil, fmt.Errorf("unsupported decl: %v", d) } } -func typeValueToKind(tv *types.TypeValue) (Kind, error) { +func typeValueToKind(tv ref.Type) (Kind, error) { switch tv { case types.BoolType: return BoolKind, nil diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/env.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/env.go index d9c2ef63f27a..69ba34dbd59d 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/env.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/env.go @@ -16,13 +16,14 @@ package cel import ( "errors" - "fmt" "sync" "github.com/google/cel-go/checker" - "github.com/google/cel-go/checker/decls" + chkdecls "github.com/google/cel-go/checker/decls" "github.com/google/cel-go/common" + celast "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/decls" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/interpreter" @@ -40,8 +41,8 @@ type Ast struct { expr *exprpb.Expr info *exprpb.SourceInfo source Source - refMap map[int64]*exprpb.Reference - typeMap map[int64]*exprpb.Type + refMap map[int64]*celast.ReferenceInfo + typeMap map[int64]*types.Type } // Expr returns the proto serializable instance of the parsed/checked expression. @@ -60,21 +61,26 @@ func (ast *Ast) SourceInfo() *exprpb.SourceInfo { } // ResultType returns the output type of the expression if the Ast has been type-checked, else -// returns decls.Dyn as the parse step cannot infer the type. +// returns chkdecls.Dyn as the parse step cannot infer the type. // // Deprecated: use OutputType func (ast *Ast) ResultType() *exprpb.Type { if !ast.IsChecked() { - return decls.Dyn + return chkdecls.Dyn } - return ast.typeMap[ast.expr.GetId()] + out := ast.OutputType() + t, err := TypeToExprType(out) + if err != nil { + return chkdecls.Dyn + } + return t } // OutputType returns the output type of the expression if the Ast has been type-checked, else // returns cel.DynType as the parse step cannot infer types. func (ast *Ast) OutputType() *Type { - t, err := ExprTypeToType(ast.ResultType()) - if err != nil { + t, found := ast.typeMap[ast.expr.GetId()] + if !found { return DynType } return t @@ -87,22 +93,32 @@ func (ast *Ast) Source() Source { } // FormatType converts a type message into a string representation. +// +// Deprecated: prefer FormatCELType func FormatType(t *exprpb.Type) string { return checker.FormatCheckedType(t) } +// FormatCELType formats a cel.Type value to a string representation. +// +// The type formatting is identical to FormatType. +func FormatCELType(t *Type) string { + return checker.FormatCELType(t) +} + // Env encapsulates the context necessary to perform parsing, type checking, or generation of // evaluable programs for different expressions. type Env struct { Container *containers.Container - functions map[string]*functionDecl - declarations []*exprpb.Decl + variables []*decls.VariableDecl + functions map[string]*decls.FunctionDecl macros []parser.Macro - adapter ref.TypeAdapter - provider ref.TypeProvider + adapter types.Adapter + provider types.Provider features map[int]bool appliedFeatures map[int]bool libraries map[string]bool + validators []ASTValidator // Internal parser representation prsr *parser.Parser @@ -154,8 +170,8 @@ func NewCustomEnv(opts ...EnvOption) (*Env, error) { return nil, err } return (&Env{ - declarations: []*exprpb.Decl{}, - functions: map[string]*functionDecl{}, + variables: []*decls.VariableDecl{}, + functions: map[string]*decls.FunctionDecl{}, macros: []parser.Macro{}, Container: containers.DefaultContainer, adapter: registry, @@ -163,14 +179,19 @@ func NewCustomEnv(opts ...EnvOption) (*Env, error) { features: map[int]bool{}, appliedFeatures: map[int]bool{}, libraries: map[string]bool{}, + validators: []ASTValidator{}, progOpts: []ProgramOption{}, }).configure(opts) } // Check performs type-checking on the input Ast and yields a checked Ast and/or set of Issues. +// If any `ASTValidators` are configured on the environment, they will be applied after a valid +// type-check result. If any issues are detected, the validators will provide them on the +// output Issues object. // -// Checking has failed if the returned Issues value and its Issues.Err() value are non-nil. -// Issues should be inspected if they are non-nil, but may not represent a fatal error. +// Either checking or validation has failed if the returned Issues value and its Issues.Err() +// value are non-nil. Issues should be inspected if they are non-nil, but may not represent a +// fatal error. // // It is possible to have both non-nil Ast and Issues values returned from this call: however, // the mere presence of an Ast does not imply that it is valid for use. @@ -183,21 +204,38 @@ func (e *Env) Check(ast *Ast) (*Ast, *Issues) { if err != nil { errs := common.NewErrors(ast.Source()) errs.ReportError(common.NoLocation, err.Error()) - return nil, NewIssues(errs) + return nil, NewIssuesWithSourceInfo(errs, ast.SourceInfo()) } res, errs := checker.Check(pe, ast.Source(), chk) if len(errs.GetErrors()) > 0 { - return nil, NewIssues(errs) + return nil, NewIssuesWithSourceInfo(errs, ast.SourceInfo()) } // Manually create the Ast to ensure that the Ast source information (which may be more // detailed than the information provided by Check), is returned to the caller. - return &Ast{ + ast = &Ast{ source: ast.Source(), - expr: res.GetExpr(), - info: res.GetSourceInfo(), - refMap: res.GetReferenceMap(), - typeMap: res.GetTypeMap()}, nil + expr: res.Expr, + info: res.SourceInfo, + refMap: res.ReferenceMap, + typeMap: res.TypeMap} + + // Generate a validator configuration from the set of configured validators. + vConfig := newValidatorConfig() + for _, v := range e.validators { + if cv, ok := v.(ASTValidatorConfigurer); ok { + cv.Configure(vConfig) + } + } + // Apply additional validators on the type-checked result. + iss := NewIssuesWithSourceInfo(errs, ast.SourceInfo()) + for _, v := range e.validators { + v.Validate(e, vConfig, res, iss) + } + if iss.Err() != nil { + return nil, iss + } + return ast, nil } // Compile combines the Parse and Check phases CEL program compilation to produce an Ast and @@ -255,7 +293,7 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { copy(chkOptsCopy, e.chkOpts) // Copy the declarations if needed. - decsCopy := []*exprpb.Decl{} + varsCopy := []*decls.VariableDecl{} if chk != nil { // If the type-checker has already been instantiated, then the e.declarations have been // validated within the chk instance. @@ -263,8 +301,8 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { } else { // If the type-checker has not been instantiated, ensure the unvalidated declarations are // provided to the extended Env instance. - decsCopy = make([]*exprpb.Decl, len(e.declarations)) - copy(decsCopy, e.declarations) + varsCopy = make([]*decls.VariableDecl, len(e.variables)) + copy(varsCopy, e.variables) } // Copy macros and program options @@ -276,8 +314,8 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { // Copy the adapter / provider if they appear to be mutable. adapter := e.adapter provider := e.provider - adapterReg, isAdapterReg := e.adapter.(ref.TypeRegistry) - providerReg, isProviderReg := e.provider.(ref.TypeRegistry) + adapterReg, isAdapterReg := e.adapter.(*types.Registry) + providerReg, isProviderReg := e.provider.(*types.Registry) // In most cases the provider and adapter will be a ref.TypeRegistry; // however, in the rare cases where they are not, they are assumed to // be immutable. Since it is possible to set the TypeProvider separately @@ -308,7 +346,7 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { for k, v := range e.appliedFeatures { appliedFeaturesCopy[k] = v } - funcsCopy := make(map[string]*functionDecl, len(e.functions)) + funcsCopy := make(map[string]*decls.FunctionDecl, len(e.functions)) for k, v := range e.functions { funcsCopy[k] = v } @@ -316,10 +354,12 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { for k, v := range e.libraries { libsCopy[k] = v } + validatorsCopy := make([]ASTValidator, len(e.validators)) + copy(validatorsCopy, e.validators) ext := &Env{ Container: e.Container, - declarations: decsCopy, + variables: varsCopy, functions: funcsCopy, macros: macsCopy, progOpts: progOptsCopy, @@ -327,6 +367,7 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { features: featuresCopy, appliedFeatures: appliedFeaturesCopy, libraries: libsCopy, + validators: validatorsCopy, provider: provider, chkOpts: chkOptsCopy, prsrOpts: prsrOptsCopy, @@ -347,6 +388,25 @@ func (e *Env) HasLibrary(libName string) bool { return exists && configured } +// Libraries returns a list of SingletonLibrary that have been configured in the environment. +func (e *Env) Libraries() []string { + libraries := make([]string, 0, len(e.libraries)) + for libName := range e.libraries { + libraries = append(libraries, libName) + } + return libraries +} + +// HasValidator returns whether a specific ASTValidator has been configured in the environment. +func (e *Env) HasValidator(name string) bool { + for _, v := range e.validators { + if v.Name() == name { + return true + } + } + return false +} + // Parse parses the input expression value `txt` to a Ast and/or a set of Issues. // // This form of Parse creates a Source value for the input `txt` and forwards to the @@ -388,36 +448,64 @@ func (e *Env) Program(ast *Ast, opts ...ProgramOption) (Program, error) { return newProgram(e, ast, optSet) } +// CELTypeAdapter returns the `types.Adapter` configured for the environment. +func (e *Env) CELTypeAdapter() types.Adapter { + return e.adapter +} + +// CELTypeProvider returns the `types.Provider` configured for the environment. +func (e *Env) CELTypeProvider() types.Provider { + return e.provider +} + // TypeAdapter returns the `ref.TypeAdapter` configured for the environment. +// +// Deprecated: use CELTypeAdapter() func (e *Env) TypeAdapter() ref.TypeAdapter { return e.adapter } // TypeProvider returns the `ref.TypeProvider` configured for the environment. +// +// Deprecated: use CELTypeProvider() func (e *Env) TypeProvider() ref.TypeProvider { - return e.provider + if legacyProvider, ok := e.provider.(ref.TypeProvider); ok { + return legacyProvider + } + return &interopLegacyTypeProvider{Provider: e.provider} } -// UnknownVars returns an interpreter.PartialActivation which marks all variables -// declared in the Env as unknown AttributePattern values. +// UnknownVars returns an interpreter.PartialActivation which marks all variables declared in the +// Env as unknown AttributePattern values. // -// Note, the UnknownVars will behave the same as an interpreter.EmptyActivation -// unless the PartialAttributes option is provided as a ProgramOption. +// Note, the UnknownVars will behave the same as an interpreter.EmptyActivation unless the +// PartialAttributes option is provided as a ProgramOption. func (e *Env) UnknownVars() interpreter.PartialActivation { - var unknownPatterns []*interpreter.AttributePattern - for _, d := range e.declarations { - switch d.GetDeclKind().(type) { - case *exprpb.Decl_Ident: - unknownPatterns = append(unknownPatterns, - interpreter.NewAttributePattern(d.GetName())) - } - } - part, _ := PartialVars( - interpreter.EmptyActivation(), - unknownPatterns...) + act := interpreter.EmptyActivation() + part, _ := PartialVars(act, e.computeUnknownVars(act)...) return part } +// PartialVars returns an interpreter.PartialActivation where all variables not in the input variable +// set, but which have been configured in the environment, are marked as unknown. +// +// The `vars` value may either be an interpreter.Activation or any valid input to the +// interpreter.NewActivation call. +// +// Note, this is equivalent to calling cel.PartialVars and manually configuring the set of unknown +// variables. For more advanced use cases of partial state where portions of an object graph, rather +// than top-level variables, are missing the PartialVars() method may be a more suitable choice. +// +// Note, the PartialVars will behave the same as an interpreter.EmptyActivation unless the +// PartialAttributes option is provided as a ProgramOption. +func (e *Env) PartialVars(vars any) (interpreter.PartialActivation, error) { + act, err := interpreter.NewActivation(vars) + if err != nil { + return nil, err + } + return PartialVars(act, e.computeUnknownVars(act)...) +} + // ResidualAst takes an Ast and its EvalDetails to produce a new Ast which only contains the // attribute references which are unknown. // @@ -463,9 +551,11 @@ func (e *Env) ResidualAst(a *Ast, details *EvalDetails) (*Ast, error) { // EstimateCost estimates the cost of a type checked CEL expression using the length estimates of input data and // extension functions provided by estimator. func (e *Env) EstimateCost(ast *Ast, estimator checker.CostEstimator, opts ...checker.CostOption) (checker.CostEstimate, error) { - checked, err := AstToCheckedExpr(ast) - if err != nil { - return checker.CostEstimate{}, fmt.Errorf("EsimateCost could not inspect Ast: %v", err) + checked := &celast.CheckedAST{ + Expr: ast.Expr(), + SourceInfo: ast.SourceInfo(), + TypeMap: ast.typeMap, + ReferenceMap: ast.refMap, } return checker.Cost(checked, estimator, opts...) } @@ -488,14 +578,6 @@ func (e *Env) configure(opts []EnvOption) (*Env, error) { return nil, err } - // Initialize all of the functions configured within the environment. - for _, fn := range e.functions { - err = fn.init() - if err != nil { - return nil, err - } - } - // Configure the parser. prsrOpts := []parser.Option{} prsrOpts = append(prsrOpts, e.prsrOpts...) @@ -504,6 +586,9 @@ func (e *Env) configure(opts []EnvOption) (*Env, error) { if e.HasFeature(featureEnableMacroCallTracking) { prsrOpts = append(prsrOpts, parser.PopulateMacroCalls(true)) } + if e.HasFeature(featureVariadicLogicalASTs) { + prsrOpts = append(prsrOpts, parser.EnableVariadicOperatorASTs(true)) + } e.prsr, err = parser.NewParser(prsrOpts...) if err != nil { return nil, err @@ -525,8 +610,6 @@ func (e *Env) initChecker() (*checker.Env, error) { chkOpts := []checker.Option{} chkOpts = append(chkOpts, e.chkOpts...) chkOpts = append(chkOpts, - checker.HomogeneousAggregateLiterals( - e.HasFeature(featureDisableDynamicAggregateLiterals)), checker.CrossTypeNumericComparisons( e.HasFeature(featureCrossTypeNumericComparisons))) @@ -536,19 +619,17 @@ func (e *Env) initChecker() (*checker.Env, error) { return } // Add the statically configured declarations. - err = ce.Add(e.declarations...) + err = ce.AddIdents(e.variables...) if err != nil { e.setCheckerOrError(nil, err) return } // Add the function declarations which are derived from the FunctionDecl instances. for _, fn := range e.functions { - fnDecl, err := functionDeclToExprDecl(fn) - if err != nil { - e.setCheckerOrError(nil, err) - return + if fn.IsDeclarationDisabled() { + continue } - err = ce.Add(fnDecl) + err = ce.AddFunctions(fn) if err != nil { e.setCheckerOrError(nil, err) return @@ -596,17 +677,43 @@ func (e *Env) maybeApplyFeature(feature int, option EnvOption) (*Env, error) { return e, nil } +// computeUnknownVars determines a set of missing variables based on the input activation and the +// environment's configured declaration set. +func (e *Env) computeUnknownVars(vars interpreter.Activation) []*interpreter.AttributePattern { + var unknownPatterns []*interpreter.AttributePattern + for _, v := range e.variables { + varName := v.Name() + if _, found := vars.ResolveName(varName); found { + continue + } + unknownPatterns = append(unknownPatterns, interpreter.NewAttributePattern(varName)) + } + return unknownPatterns +} + +// Error type which references an expression id, a location within source, and a message. +type Error = common.Error + // Issues defines methods for inspecting the error details of parse and check calls. // // Note: in the future, non-fatal warnings and notices may be inspectable via the Issues struct. type Issues struct { errs *common.Errors + info *exprpb.SourceInfo } // NewIssues returns an Issues struct from a common.Errors object. func NewIssues(errs *common.Errors) *Issues { + return NewIssuesWithSourceInfo(errs, nil) +} + +// NewIssuesWithSourceInfo returns an Issues struct from a common.Errors object with SourceInfo metatata +// which can be used with the `ReportErrorAtID` method for additional error reports within the context +// information that's inferred from an expression id. +func NewIssuesWithSourceInfo(errs *common.Errors, info *exprpb.SourceInfo) *Issues { return &Issues{ errs: errs, + info: info, } } @@ -622,9 +729,9 @@ func (i *Issues) Err() error { } // Errors returns the collection of errors encountered in more granular detail. -func (i *Issues) Errors() []common.Error { +func (i *Issues) Errors() []*Error { if i == nil { - return []common.Error{} + return []*Error{} } return i.errs.GetErrors() } @@ -648,6 +755,37 @@ func (i *Issues) String() string { return i.errs.ToDisplayString() } +// ReportErrorAtID reports an error message with an optional set of formatting arguments. +// +// The source metadata for the expression at `id`, if present, is attached to the error report. +// To ensure that source metadata is attached to error reports, use NewIssuesWithSourceInfo. +func (i *Issues) ReportErrorAtID(id int64, message string, args ...any) { + i.errs.ReportErrorAtID(id, locationByID(id, i.info), message, args...) +} + +// locationByID returns a common.Location given an expression id. +// +// TODO: move this functionality into the native SourceInfo and an overhaul of the common.Source +// as this implementation relies on the abstractions present in the protobuf SourceInfo object, +// and is replicated in the checker. +func locationByID(id int64, sourceInfo *exprpb.SourceInfo) common.Location { + positions := sourceInfo.GetPositions() + var line = 1 + if offset, found := positions[id]; found { + col := int(offset) + for _, lineOffset := range sourceInfo.GetLineOffsets() { + if lineOffset < offset { + line++ + col = int(offset - lineOffset) + } else { + break + } + } + return common.NewLocation(line, col) + } + return common.NoLocation +} + // getStdEnv lazy initializes the CEL standard environment. func getStdEnv() (*Env, error) { stdEnvInit.Do(func() { @@ -656,6 +794,90 @@ func getStdEnv() (*Env, error) { return stdEnv, stdEnvErr } +// interopCELTypeProvider layers support for the types.Provider interface on top of a ref.TypeProvider. +type interopCELTypeProvider struct { + ref.TypeProvider +} + +// FindStructType returns a types.Type instance for the given fully-qualified typeName if one exists. +// +// This method proxies to the underyling ref.TypeProvider's FindType method and converts protobuf type +// into a native type representation. If the conversion fails, the type is listed as not found. +func (p *interopCELTypeProvider) FindStructType(typeName string) (*types.Type, bool) { + if et, found := p.FindType(typeName); found { + t, err := types.ExprTypeToType(et) + if err != nil { + return nil, false + } + return t, true + } + return nil, false +} + +// FindStructFieldType returns a types.FieldType instance for the given fully-qualified typeName and field +// name, if one exists. +// +// This method proxies to the underyling ref.TypeProvider's FindFieldType method and converts protobuf type +// into a native type representation. If the conversion fails, the type is listed as not found. +func (p *interopCELTypeProvider) FindStructFieldType(structType, fieldName string) (*types.FieldType, bool) { + if ft, found := p.FindFieldType(structType, fieldName); found { + t, err := types.ExprTypeToType(ft.Type) + if err != nil { + return nil, false + } + return &types.FieldType{ + Type: t, + IsSet: ft.IsSet, + GetFrom: ft.GetFrom, + }, true + } + return nil, false +} + +// interopLegacyTypeProvider layers support for the ref.TypeProvider interface on top of a types.Provider. +type interopLegacyTypeProvider struct { + types.Provider +} + +// FindType retruns the protobuf Type representation for the input type name if one exists. +// +// This method proxies to the underlying types.Provider FindStructType method and converts the types.Type +// value to a protobuf Type representation. +// +// Failure to convert the type will result in the type not being found. +func (p *interopLegacyTypeProvider) FindType(typeName string) (*exprpb.Type, bool) { + if t, found := p.FindStructType(typeName); found { + et, err := types.TypeToExprType(t) + if err != nil { + return nil, false + } + return et, true + } + return nil, false +} + +// FindFieldType returns the protobuf-based FieldType representation for the input type name and field, +// if one exists. +// +// This call proxies to the types.Provider FindStructFieldType method and converts the types.FIeldType +// value to a protobuf-based ref.FieldType representation if found. +// +// Failure to convert the FieldType will result in the field not being found. +func (p *interopLegacyTypeProvider) FindFieldType(structType, fieldName string) (*ref.FieldType, bool) { + if cft, found := p.FindStructFieldType(structType, fieldName); found { + et, err := types.TypeToExprType(cft.Type) + if err != nil { + return nil, false + } + return &ref.FieldType{ + Type: et, + IsSet: cft.IsSet, + GetFrom: cft.GetFrom, + }, true + } + return nil, false +} + var ( stdEnvInit sync.Once stdEnv *Env diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/io.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/io.go index 93ded3cf1b7e..80f63140e306 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/io.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/io.go @@ -22,6 +22,7 @@ import ( "google.golang.org/protobuf/proto" "github.com/google/cel-go/common" + "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" @@ -33,7 +34,8 @@ import ( // CheckedExprToAst converts a checked expression proto message to an Ast. func CheckedExprToAst(checkedExpr *exprpb.CheckedExpr) *Ast { - return CheckedExprToAstWithSource(checkedExpr, nil) + checked, _ := CheckedExprToAstWithSource(checkedExpr, nil) + return checked } // CheckedExprToAstWithSource converts a checked expression proto message to an Ast, @@ -44,29 +46,18 @@ func CheckedExprToAst(checkedExpr *exprpb.CheckedExpr) *Ast { // through future calls. // // Prefer CheckedExprToAst if loading expressions from storage. -func CheckedExprToAstWithSource(checkedExpr *exprpb.CheckedExpr, src Source) *Ast { - refMap := checkedExpr.GetReferenceMap() - if refMap == nil { - refMap = map[int64]*exprpb.Reference{} - } - typeMap := checkedExpr.GetTypeMap() - if typeMap == nil { - typeMap = map[int64]*exprpb.Type{} - } - si := checkedExpr.GetSourceInfo() - if si == nil { - si = &exprpb.SourceInfo{} - } - if src == nil { - src = common.NewInfoSource(si) +func CheckedExprToAstWithSource(checkedExpr *exprpb.CheckedExpr, src Source) (*Ast, error) { + checkedAST, err := ast.CheckedExprToCheckedAST(checkedExpr) + if err != nil { + return nil, err } return &Ast{ - expr: checkedExpr.GetExpr(), - info: si, + expr: checkedAST.Expr, + info: checkedAST.SourceInfo, source: src, - refMap: refMap, - typeMap: typeMap, - } + refMap: checkedAST.ReferenceMap, + typeMap: checkedAST.TypeMap, + }, nil } // AstToCheckedExpr converts an Ast to an protobuf CheckedExpr value. @@ -76,12 +67,13 @@ func AstToCheckedExpr(a *Ast) (*exprpb.CheckedExpr, error) { if !a.IsChecked() { return nil, fmt.Errorf("cannot convert unchecked ast") } - return &exprpb.CheckedExpr{ - Expr: a.Expr(), - SourceInfo: a.SourceInfo(), + cAst := &ast.CheckedAST{ + Expr: a.expr, + SourceInfo: a.info, ReferenceMap: a.refMap, TypeMap: a.typeMap, - }, nil + } + return ast.CheckedASTToCheckedExpr(cAst) } // ParsedExprToAst converts a parsed expression proto message to an Ast. @@ -202,7 +194,7 @@ func RefValueToValue(res ref.Val) (*exprpb.Value, error) { } var ( - typeNameToTypeValue = map[string]*types.TypeValue{ + typeNameToTypeValue = map[string]ref.Val{ "bool": types.BoolType, "bytes": types.BytesType, "double": types.DoubleType, @@ -219,7 +211,7 @@ var ( ) // ValueToRefValue converts between exprpb.Value and ref.Val. -func ValueToRefValue(adapter ref.TypeAdapter, v *exprpb.Value) (ref.Val, error) { +func ValueToRefValue(adapter types.Adapter, v *exprpb.Value) (ref.Val, error) { switch v.Kind.(type) { case *exprpb.Value_NullValue: return types.NullValue, nil diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/library.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/library.go index bcfd44f78a9f..4d232085c249 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/library.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/library.go @@ -15,19 +15,18 @@ package cel import ( + "math" "strconv" "strings" "time" - "github.com/google/cel-go/checker" - "github.com/google/cel-go/common" "github.com/google/cel-go/common/operators" "github.com/google/cel-go/common/overloads" + "github.com/google/cel-go/common/stdlib" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" "github.com/google/cel-go/interpreter" - "github.com/google/cel-go/interpreter/functions" "github.com/google/cel-go/parser" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" @@ -35,6 +34,7 @@ import ( const ( optMapMacro = "optMap" + optFlatMapMacro = "optFlatMap" hasValueFunc = "hasValue" optionalNoneFunc = "optional.none" optionalOfFunc = "optional.of" @@ -106,44 +106,213 @@ func (stdLibrary) LibraryName() string { return "cel.lib.std" } -// EnvOptions returns options for the standard CEL function declarations and macros. +// CompileOptions returns options for the standard CEL function declarations and macros. func (stdLibrary) CompileOptions() []EnvOption { return []EnvOption{ - Declarations(checker.StandardDeclarations()...), + func(e *Env) (*Env, error) { + var err error + for _, fn := range stdlib.Functions() { + existing, found := e.functions[fn.Name()] + if found { + fn, err = existing.Merge(fn) + if err != nil { + return nil, err + } + } + e.functions[fn.Name()] = fn + } + return e, nil + }, + func(e *Env) (*Env, error) { + e.variables = append(e.variables, stdlib.Types()...) + return e, nil + }, Macros(StandardMacros...), } } // ProgramOptions returns function implementations for the standard CEL functions. func (stdLibrary) ProgramOptions() []ProgramOption { - return []ProgramOption{ - Functions(functions.StandardOverloads()...), + return []ProgramOption{} +} + +// OptionalTypes enable support for optional syntax and types in CEL. +// +// The optional value type makes it possible to express whether variables have +// been provided, whether a result has been computed, and in the future whether +// an object field path, map key value, or list index has a value. +// +// # Syntax Changes +// +// OptionalTypes are unlike other CEL extensions because they modify the CEL +// syntax itself, notably through the use of a `?` preceding a field name or +// index value. +// +// ## Field Selection +// +// The optional syntax in field selection is denoted as `obj.?field`. In other +// words, if a field is set, return `optional.of(obj.field)“, else +// `optional.none()`. The optional field selection is viral in the sense that +// after the first optional selection all subsequent selections or indices +// are treated as optional, i.e. the following expressions are equivalent: +// +// obj.?field.subfield +// obj.?field.?subfield +// +// ## Indexing +// +// Similar to field selection, the optional syntax can be used in index +// expressions on maps and lists: +// +// list[?0] +// map[?key] +// +// ## Optional Field Setting +// +// When creating map or message literals, if a field may be optionally set +// based on its presence, then placing a `?` before the field name or key +// will ensure the type on the right-hand side must be optional(T) where T +// is the type of the field or key-value. +// +// The following returns a map with the key expression set only if the +// subfield is present, otherwise an empty map is created: +// +// {?key: obj.?field.subfield} +// +// ## Optional Element Setting +// +// When creating list literals, an element in the list may be optionally added +// when the element expression is preceded by a `?`: +// +// [a, ?b, ?c] // return a list with either [a], [a, b], [a, b, c], or [a, c] +// +// # Optional.Of +// +// Create an optional(T) value of a given value with type T. +// +// optional.of(10) +// +// # Optional.OfNonZeroValue +// +// Create an optional(T) value of a given value with type T if it is not a +// zero-value. A zero-value the default empty value for any given CEL type, +// including empty protobuf message types. If the value is empty, the result +// of this call will be optional.none(). +// +// optional.ofNonZeroValue([1, 2, 3]) // optional(list(int)) +// optional.ofNonZeroValue([]) // optional.none() +// optional.ofNonZeroValue(0) // optional.none() +// optional.ofNonZeroValue("") // optional.none() +// +// # Optional.None +// +// Create an empty optional value. +// +// # HasValue +// +// Determine whether the optional contains a value. +// +// optional.of(b'hello').hasValue() // true +// optional.ofNonZeroValue({}).hasValue() // false +// +// # Value +// +// Get the value contained by the optional. If the optional does not have a +// value, the result will be a CEL error. +// +// optional.of(b'hello').value() // b'hello' +// optional.ofNonZeroValue({}).value() // error +// +// # Or +// +// If the value on the left-hand side is optional.none(), the optional value +// on the right hand side is returned. If the value on the left-hand set is +// valued, then it is returned. This operation is short-circuiting and will +// only evaluate as many links in the `or` chain as are needed to return a +// non-empty optional value. +// +// obj.?field.or(m[?key]) +// l[?index].or(obj.?field.subfield).or(obj.?other) +// +// # OrValue +// +// Either return the value contained within the optional on the left-hand side +// or return the alternative value on the right hand side. +// +// m[?key].orValue("none") +// +// # OptMap +// +// Apply a transformation to the optional's underlying value if it is not empty +// and return an optional typed result based on the transformation. The +// transformation expression type must return a type T which is wrapped into +// an optional. +// +// msg.?elements.optMap(e, e.size()).orValue(0) +// +// # OptFlatMap +// +// Introduced in version: 1 +// +// Apply a transformation to the optional's underlying value if it is not empty +// and return the result. The transform expression must return an optional(T) +// rather than type T. This can be useful when dealing with zero values and +// conditionally generating an empty or non-empty result in ways which cannot +// be expressed with `optMap`. +// +// msg.?elements.optFlatMap(e, e[?0]) // return the first element if present. +func OptionalTypes(opts ...OptionalTypesOption) EnvOption { + lib := &optionalLib{version: math.MaxUint32} + for _, opt := range opts { + lib = opt(lib) } + return Lib(lib) } -type optionalLibrary struct{} +type optionalLib struct { + version uint32 +} + +// OptionalTypesOption is a functional interface for configuring the strings library. +type OptionalTypesOption func(*optionalLib) *optionalLib + +// OptionalTypesVersion configures the version of the optional type library. +// +// The version limits which functions are available. Only functions introduced +// below or equal to the given version included in the library. If this option +// is not set, all functions are available. +// +// See the library documentation to determine which version a function was introduced. +// If the documentation does not state which version a function was introduced, it can +// be assumed to be introduced at version 0, when the library was first created. +func OptionalTypesVersion(version uint32) OptionalTypesOption { + return func(lib *optionalLib) *optionalLib { + lib.version = version + return lib + } +} // LibraryName implements the SingletonLibrary interface method. -func (optionalLibrary) LibraryName() string { +func (lib *optionalLib) LibraryName() string { return "cel.lib.optional" } // CompileOptions implements the Library interface method. -func (optionalLibrary) CompileOptions() []EnvOption { +func (lib *optionalLib) CompileOptions() []EnvOption { paramTypeK := TypeParamType("K") paramTypeV := TypeParamType("V") optionalTypeV := OptionalType(paramTypeV) listTypeV := ListType(paramTypeV) mapTypeKV := MapType(paramTypeK, paramTypeV) - return []EnvOption{ + opts := []EnvOption{ // Enable the optional syntax in the parser. enableOptionalSyntax(), // Introduce the optional type. Types(types.OptionalType), - // Configure the optMap macro. + // Configure the optMap and optFlatMap macros. Macros(NewReceiverMacro(optMapMacro, 2, optMap)), // Global and member functions for working with optional values. @@ -202,21 +371,29 @@ func (optionalLibrary) CompileOptions() []EnvOption { // Index overloads to accommodate using an optional value as the operand. Function(operators.Index, Overload("optional_list_index_int", []*Type{OptionalType(listTypeV), IntType}, optionalTypeV), - Overload("optional_map_index_optional_value", []*Type{OptionalType(mapTypeKV), paramTypeK}, optionalTypeV)), + Overload("optional_map_index_value", []*Type{OptionalType(mapTypeKV), paramTypeK}, optionalTypeV)), + } + if lib.version >= 1 { + opts = append(opts, Macros(NewReceiverMacro(optFlatMapMacro, 2, optFlatMap))) + } + return opts +} + +// ProgramOptions implements the Library interface method. +func (lib *optionalLib) ProgramOptions() []ProgramOption { + return []ProgramOption{ + CustomDecorator(decorateOptionalOr), } } -func optMap(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func optMap(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { varIdent := args[0] varName := "" switch varIdent.GetExprKind().(type) { case *exprpb.Expr_IdentExpr: varName = varIdent.GetIdentExpr().GetName() default: - return nil, &common.Error{ - Message: "optMap() variable name must be a simple identifier", - Location: meh.OffsetLocation(varIdent.GetId()), - } + return nil, meh.NewError(varIdent.GetId(), "optMap() variable name must be a simple identifier") } mapExpr := args[1] return meh.GlobalCall( @@ -237,11 +414,30 @@ func optMap(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exp ), nil } -// ProgramOptions implements the Library interface method. -func (optionalLibrary) ProgramOptions() []ProgramOption { - return []ProgramOption{ - CustomDecorator(decorateOptionalOr), +func optFlatMap(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { + varIdent := args[0] + varName := "" + switch varIdent.GetExprKind().(type) { + case *exprpb.Expr_IdentExpr: + varName = varIdent.GetIdentExpr().GetName() + default: + return nil, meh.NewError(varIdent.GetId(), "optFlatMap() variable name must be a simple identifier") } + mapExpr := args[1] + return meh.GlobalCall( + operators.Conditional, + meh.ReceiverCall(hasValueFunc, target), + meh.Fold( + unusedIterVar, + meh.NewList(), + varName, + meh.ReceiverCall(valueFunc, target), + meh.LiteralBool(false), + meh.Ident(varName), + mapExpr, + ), + meh.GlobalCall(optionalNoneFunc), + ), nil } func enableOptionalSyntax() EnvOption { @@ -358,28 +554,16 @@ var ( timeOverloadDeclarations = []EnvOption{ Function(overloads.TimeGetHours, MemberOverload(overloads.DurationToHours, []*Type{DurationType}, IntType, - UnaryBinding(func(dur ref.Val) ref.Val { - d := dur.(types.Duration) - return types.Int(d.Hours()) - }))), + UnaryBinding(types.DurationGetHours))), Function(overloads.TimeGetMinutes, MemberOverload(overloads.DurationToMinutes, []*Type{DurationType}, IntType, - UnaryBinding(func(dur ref.Val) ref.Val { - d := dur.(types.Duration) - return types.Int(d.Minutes()) - }))), + UnaryBinding(types.DurationGetMinutes))), Function(overloads.TimeGetSeconds, MemberOverload(overloads.DurationToSeconds, []*Type{DurationType}, IntType, - UnaryBinding(func(dur ref.Val) ref.Val { - d := dur.(types.Duration) - return types.Int(d.Seconds()) - }))), + UnaryBinding(types.DurationGetSeconds))), Function(overloads.TimeGetMilliseconds, MemberOverload(overloads.DurationToMilliseconds, []*Type{DurationType}, IntType, - UnaryBinding(func(dur ref.Val) ref.Val { - d := dur.(types.Duration) - return types.Int(d.Milliseconds()) - }))), + UnaryBinding(types.DurationGetMilliseconds))), Function(overloads.TimeGetFullYear, MemberOverload(overloads.TimestampToYear, []*Type{TimestampType}, IntType, UnaryBinding(func(ts ref.Val) ref.Val { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/macro.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/macro.go index e48c5bf8eedd..1eb414c8be4c 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/macro.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/macro.go @@ -15,7 +15,6 @@ package cel import ( - "github.com/google/cel-go/common" "github.com/google/cel-go/parser" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" @@ -63,21 +62,21 @@ func NewReceiverVarArgMacro(function string, expander MacroExpander) Macro { } // HasMacroExpander expands the input call arguments into a presence test, e.g. has(.field) -func HasMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func HasMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { return parser.MakeHas(meh, target, args) } // ExistsMacroExpander expands the input call arguments into a comprehension that returns true if any of the // elements in the range match the predicate expressions: // .exists(, ) -func ExistsMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func ExistsMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { return parser.MakeExists(meh, target, args) } // ExistsOneMacroExpander expands the input call arguments into a comprehension that returns true if exactly // one of the elements in the range match the predicate expressions: // .exists_one(, ) -func ExistsOneMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func ExistsOneMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { return parser.MakeExistsOne(meh, target, args) } @@ -91,14 +90,14 @@ func ExistsOneMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*ex // // In the second form only iterVar values which return true when provided to the predicate expression // are transformed. -func MapMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func MapMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { return parser.MakeMap(meh, target, args) } // FilterMacroExpander expands the input call arguments into a comprehension which produces a list which contains // only elements which match the provided predicate expression: // .filter(, ) -func FilterMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func FilterMacroExpander(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) { return parser.MakeFilter(meh, target, args) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/options.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/options.go index 07f3d6c71611..d47f55d8eedc 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/options.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/options.go @@ -23,12 +23,12 @@ import ( "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/types/dynamicpb" - "github.com/google/cel-go/checker/decls" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/pb" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/interpreter" - "github.com/google/cel-go/interpreter/functions" "github.com/google/cel-go/parser" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" @@ -41,13 +41,6 @@ import ( const ( _ = iota - // Disallow heterogeneous aggregate (list, map) literals. - // Note, it is still possible to have heterogeneous aggregates when - // provided as variables to the expression, as well as via conversion - // of well-known dynamic types, or with unchecked expressions. - // Affects checking. Provides a subset of standard behavior. - featureDisableDynamicAggregateLiterals - // Enable the tracking of function call expressions replaced by macros. featureEnableMacroCallTracking @@ -63,9 +56,10 @@ const ( // is not already in UTC. featureDefaultUTCTimeZone - // Enable the use of optional types in the syntax, type-system, type-checking, - // and runtime. - featureOptionalTypes + // Enable the serialization of logical operator ASTs as variadic calls, thus + // compressing the logic graph to a single call when multiple like-operator + // expressions occur: e.g. a && b && c && d -> call(_&&_, [a, b, c, d]) + featureVariadicLogicalASTs ) // EnvOption is a functional interface for configuring the environment. @@ -82,23 +76,26 @@ func ClearMacros() EnvOption { } } -// CustomTypeAdapter swaps the default ref.TypeAdapter implementation with a custom one. +// CustomTypeAdapter swaps the default types.Adapter implementation with a custom one. // // Note: This option must be specified before the Types and TypeDescs options when used together. -func CustomTypeAdapter(adapter ref.TypeAdapter) EnvOption { +func CustomTypeAdapter(adapter types.Adapter) EnvOption { return func(e *Env) (*Env, error) { e.adapter = adapter return e, nil } } -// CustomTypeProvider swaps the default ref.TypeProvider implementation with a custom one. +// CustomTypeProvider replaces the types.Provider implementation with a custom one. +// +// The `provider` variable type may either be types.Provider or ref.TypeProvider (deprecated) // // Note: This option must be specified before the Types and TypeDescs options when used together. -func CustomTypeProvider(provider ref.TypeProvider) EnvOption { +func CustomTypeProvider(provider any) EnvOption { return func(e *Env) (*Env, error) { - e.provider = provider - return e, nil + var err error + e.provider, err = maybeInteropProvider(provider) + return e, err } } @@ -108,8 +105,28 @@ func CustomTypeProvider(provider ref.TypeProvider) EnvOption { // for the environment. The NewEnv call builds on top of the standard CEL declarations. For a // purely custom set of declarations use NewCustomEnv. func Declarations(decls ...*exprpb.Decl) EnvOption { + declOpts := []EnvOption{} + var err error + var opt EnvOption + // Convert the declarations to `EnvOption` values ahead of time. + // Surface any errors in conversion when the options are applied. + for _, d := range decls { + opt, err = ExprDeclToDeclaration(d) + if err != nil { + break + } + declOpts = append(declOpts, opt) + } return func(e *Env) (*Env, error) { - e.declarations = append(e.declarations, decls...) + if err != nil { + return nil, err + } + for _, o := range declOpts { + e, err = o(e) + if err != nil { + return nil, err + } + } return e, nil } } @@ -126,14 +143,25 @@ func EagerlyValidateDeclarations(enabled bool) EnvOption { return features(featureEagerlyValidateDeclarations, enabled) } -// HomogeneousAggregateLiterals option ensures that list and map literal entry types must agree -// during type-checking. +// HomogeneousAggregateLiterals disables mixed type list and map literal values. // // Note, it is still possible to have heterogeneous aggregates when provided as variables to the // expression, as well as via conversion of well-known dynamic types, or with unchecked // expressions. func HomogeneousAggregateLiterals() EnvOption { - return features(featureDisableDynamicAggregateLiterals, true) + return ASTValidators(ValidateHomogeneousAggregateLiterals()) +} + +// variadicLogicalOperatorASTs flatten like-operator chained logical expressions into a single +// variadic call with N-terms. This behavior is useful when serializing to a protocol buffer as +// it will reduce the number of recursive calls needed to deserialize the AST later. +// +// For example, given the following expression the call graph will be rendered accordingly: +// +// expression: a && b && c && (d || e) +// ast: call(_&&_, [a, b, c, call(_||_, [d, e])]) +func variadicLogicalOperatorASTs() EnvOption { + return features(featureVariadicLogicalASTs, true) } // Macros option extends the macro set configured in the environment. @@ -226,7 +254,12 @@ func Abbrevs(qualifiedNames ...string) EnvOption { // Note: This option must be specified after the CustomTypeProvider option when used together. func Types(addTypes ...any) EnvOption { return func(e *Env) (*Env, error) { - reg, isReg := e.provider.(ref.TypeRegistry) + var reg ref.TypeRegistry + var isReg bool + reg, isReg = e.provider.(*types.Registry) + if !isReg { + reg, isReg = e.provider.(ref.TypeRegistry) + } if !isReg { return nil, fmt.Errorf("custom types not supported by provider: %T", e.provider) } @@ -457,25 +490,21 @@ func CostLimit(costLimit uint64) ProgramOption { } } -func fieldToCELType(field protoreflect.FieldDescriptor) (*exprpb.Type, error) { +func fieldToCELType(field protoreflect.FieldDescriptor) (*Type, error) { if field.Kind() == protoreflect.MessageKind || field.Kind() == protoreflect.GroupKind { msgName := (string)(field.Message().FullName()) - wellKnownType, found := pb.CheckedWellKnowns[msgName] - if found { - return wellKnownType, nil - } - return decls.NewObjectType(msgName), nil + return ObjectType(msgName), nil } - if primitiveType, found := pb.CheckedPrimitives[field.Kind()]; found { + if primitiveType, found := types.ProtoCELPrimitives[field.Kind()]; found { return primitiveType, nil } if field.Kind() == protoreflect.EnumKind { - return decls.Int, nil + return IntType, nil } return nil, fmt.Errorf("field %s type %s not implemented", field.FullName(), field.Kind().String()) } -func fieldToDecl(field protoreflect.FieldDescriptor) (*exprpb.Decl, error) { +func fieldToVariable(field protoreflect.FieldDescriptor) (EnvOption, error) { name := string(field.Name()) if field.IsMap() { mapKey := field.MapKey() @@ -488,20 +517,20 @@ func fieldToDecl(field protoreflect.FieldDescriptor) (*exprpb.Decl, error) { if err != nil { return nil, err } - return decls.NewVar(name, decls.NewMapType(keyType, valueType)), nil + return Variable(name, MapType(keyType, valueType)), nil } if field.IsList() { elemType, err := fieldToCELType(field) if err != nil { return nil, err } - return decls.NewVar(name, decls.NewListType(elemType)), nil + return Variable(name, ListType(elemType)), nil } celType, err := fieldToCELType(field) if err != nil { return nil, err } - return decls.NewVar(name, celType), nil + return Variable(name, celType), nil } // DeclareContextProto returns an option to extend CEL environment with declarations from the given context proto. @@ -509,23 +538,51 @@ func fieldToDecl(field protoreflect.FieldDescriptor) (*exprpb.Decl, error) { // https://github.com/google/cel-spec/blob/master/doc/langdef.md#evaluation-environment func DeclareContextProto(descriptor protoreflect.MessageDescriptor) EnvOption { return func(e *Env) (*Env, error) { - var decls []*exprpb.Decl fields := descriptor.Fields() for i := 0; i < fields.Len(); i++ { field := fields.Get(i) - decl, err := fieldToDecl(field) + variable, err := fieldToVariable(field) + if err != nil { + return nil, err + } + e, err = variable(e) if err != nil { return nil, err } - decls = append(decls, decl) } - var err error - e, err = Declarations(decls...)(e) + return Types(dynamicpb.NewMessage(descriptor))(e) + } +} + +// ContextProtoVars uses the fields of the input proto.Messages as top-level variables within an Activation. +// +// Consider using with `DeclareContextProto` to simplify variable type declarations and publishing when using +// protocol buffers. +func ContextProtoVars(ctx proto.Message) (interpreter.Activation, error) { + if ctx == nil || !ctx.ProtoReflect().IsValid() { + return interpreter.EmptyActivation(), nil + } + reg, err := types.NewRegistry(ctx) + if err != nil { + return nil, err + } + pbRef := ctx.ProtoReflect() + typeName := string(pbRef.Descriptor().FullName()) + fields := pbRef.Descriptor().Fields() + vars := make(map[string]any, fields.Len()) + for i := 0; i < fields.Len(); i++ { + field := fields.Get(i) + sft, found := reg.FindStructFieldType(typeName, field.TextName()) + if !found { + return nil, fmt.Errorf("no such field: %s", field.TextName()) + } + fieldVal, err := sft.GetFrom(ctx) if err != nil { return nil, err } - return Types(dynamicpb.NewMessage(descriptor))(e) + vars[field.TextName()] = fieldVal } + return interpreter.NewActivation(vars) } // EnableMacroCallTracking ensures that call expressions which are replaced by macros @@ -545,13 +602,6 @@ func DefaultUTCTimeZone(enabled bool) EnvOption { return features(featureDefaultUTCTimeZone, enabled) } -// OptionalTypes enable support for optional syntax and types in CEL. The optional value type makes -// it possible to express whether variables have been provided, whether a result has been computed, -// and in the future whether an object field path, map key value, or list index has a value. -func OptionalTypes() EnvOption { - return Lib(optionalLibrary{}) -} - // features sets the given feature flags. See list of Feature constants above. func features(flag int, enabled bool) EnvOption { return func(e *Env) (*Env, error) { @@ -577,3 +627,14 @@ func ParserExpressionSizeLimit(limit int) EnvOption { return e, nil } } + +func maybeInteropProvider(provider any) (types.Provider, error) { + switch p := provider.(type) { + case types.Provider: + return p, nil + case ref.TypeProvider: + return &interopCELTypeProvider{TypeProvider: p}, nil + default: + return nil, fmt.Errorf("unsupported type provider: %T", provider) + } +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/program.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/program.go index a630f5bfa1f2..11c5c447e37a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/program.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/program.go @@ -19,11 +19,10 @@ import ( "fmt" "sync" + celast "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/interpreter" - - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) // Program is an evaluable view of an Ast. @@ -62,6 +61,9 @@ func NoVars() interpreter.Activation { // PartialVars returns a PartialActivation which contains variables and a set of AttributePattern // values that indicate variables or parts of variables whose value are not yet known. // +// This method relies on manually configured sets of missing attribute patterns. For a method which +// infers the missing variables from the input and the configured environment, use Env.PartialVars(). +// // The `vars` value may either be an interpreter.Activation or any valid input to the // interpreter.NewActivation call. func PartialVars(vars any, @@ -169,7 +171,7 @@ func newProgram(e *Env, ast *Ast, opts []ProgramOption) (Program, error) { // Add the function bindings created via Function() options. for _, fn := range e.functions { - bindings, err := fn.bindings() + bindings, err := fn.Bindings() if err != nil { return nil, err } @@ -208,14 +210,11 @@ func newProgram(e *Env, ast *Ast, opts []ProgramOption) (Program, error) { } // Enable compile-time checking of syntax/cardinality for string.format calls. if p.evalOpts&OptCheckStringFormat == OptCheckStringFormat { - var isValidType func(id int64, validTypes ...*types.TypeValue) (bool, error) + var isValidType func(id int64, validTypes ...ref.Type) (bool, error) if ast.IsChecked() { - isValidType = func(id int64, validTypes ...*types.TypeValue) (bool, error) { - t, err := ExprTypeToType(ast.typeMap[id]) - if err != nil { - return false, err - } - if t.kind == DynKind { + isValidType = func(id int64, validTypes ...ref.Type) (bool, error) { + t := ast.typeMap[id] + if t.Kind() == DynKind { return true, nil } for _, vt := range validTypes { @@ -223,7 +222,7 @@ func newProgram(e *Env, ast *Ast, opts []ProgramOption) (Program, error) { if err != nil { return false, err } - if k == t.kind { + if t.Kind() == k { return true, nil } } @@ -231,7 +230,7 @@ func newProgram(e *Env, ast *Ast, opts []ProgramOption) (Program, error) { } } else { // if the AST isn't type-checked, short-circuit validation - isValidType = func(id int64, validTypes ...*types.TypeValue) (bool, error) { + isValidType = func(id int64, validTypes ...ref.Type) (bool, error) { return true, nil } } @@ -284,10 +283,11 @@ func (p *prog) initInterpretable(ast *Ast, decs []interpreter.InterpretableDecor } // When the AST has been checked it contains metadata that can be used to speed up program execution. - var checked *exprpb.CheckedExpr - checked, err := AstToCheckedExpr(ast) - if err != nil { - return nil, err + checked := &celast.CheckedAST{ + Expr: ast.Expr(), + SourceInfo: ast.SourceInfo(), + TypeMap: ast.typeMap, + ReferenceMap: ast.refMap, } interpretable, err := p.interpreter.NewInterpretable(checked, decs...) if err != nil { @@ -498,7 +498,7 @@ type evalActivation struct { // The lazy binding will only be invoked once per evaluation. // // Values which are not represented as ref.Val types on input may be adapted to a ref.Val using -// the ref.TypeAdapter configured in the environment. +// the types.Adapter configured in the environment. func (a *evalActivation) ResolveName(name string) (any, bool) { v, found := a.vars[name] if !found { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/cel/validator.go b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/validator.go new file mode 100644 index 000000000000..78b311381867 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/cel/validator.go @@ -0,0 +1,388 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cel + +import ( + "fmt" + "reflect" + "regexp" + + "github.com/google/cel-go/common/ast" + "github.com/google/cel-go/common/overloads" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +const ( + homogeneousValidatorName = "cel.lib.std.validate.types.homogeneous" + + // HomogeneousAggregateLiteralExemptFunctions is the ValidatorConfig key used to configure + // the set of function names which are exempt from homogeneous type checks. The expected type + // is a string list of function names. + // + // As an example, the `.format([args])` call expects the input arguments list to be + // comprised of a variety of types which correspond to the types expected by the format control + // clauses; however, all other uses of a mixed element type list, would be unexpected. + HomogeneousAggregateLiteralExemptFunctions = homogeneousValidatorName + ".exempt" +) + +// ASTValidators configures a set of ASTValidator instances into the target environment. +// +// Validators are applied in the order in which the are specified and are treated as singletons. +// The same ASTValidator with a given name will not be applied more than once. +func ASTValidators(validators ...ASTValidator) EnvOption { + return func(e *Env) (*Env, error) { + for _, v := range validators { + if !e.HasValidator(v.Name()) { + e.validators = append(e.validators, v) + } + } + return e, nil + } +} + +// ASTValidator defines a singleton interface for validating a type-checked Ast against an environment. +// +// Note: the Issues argument is mutable in the sense that it is intended to collect errors which will be +// reported to the caller. +type ASTValidator interface { + // Name returns the name of the validator. Names must be unique. + Name() string + + // Validate validates a given Ast within an Environment and collects a set of potential issues. + // + // The ValidatorConfig is generated from the set of ASTValidatorConfigurer instances prior to + // the invocation of the Validate call. The expectation is that the validator configuration + // is created in sequence and immutable once provided to the Validate call. + // + // See individual validators for more information on their configuration keys and configuration + // properties. + Validate(*Env, ValidatorConfig, *ast.CheckedAST, *Issues) +} + +// ValidatorConfig provides an accessor method for querying validator configuration state. +type ValidatorConfig interface { + GetOrDefault(name string, value any) any +} + +// MutableValidatorConfig provides mutation methods for querying and updating validator configuration +// settings. +type MutableValidatorConfig interface { + ValidatorConfig + Set(name string, value any) error +} + +// ASTValidatorConfigurer indicates that this object, currently expected to be an ASTValidator, +// participates in validator configuration settings. +// +// This interface may be split from the expectation of being an ASTValidator instance in the future. +type ASTValidatorConfigurer interface { + Configure(MutableValidatorConfig) error +} + +// validatorConfig implements the ValidatorConfig and MutableValidatorConfig interfaces. +type validatorConfig struct { + data map[string]any +} + +// newValidatorConfig initializes the validator config with default values for core CEL validators. +func newValidatorConfig() *validatorConfig { + return &validatorConfig{ + data: map[string]any{ + HomogeneousAggregateLiteralExemptFunctions: []string{}, + }, + } +} + +// GetOrDefault returns the configured value for the name, if present, else the input default value. +// +// Note, the type-agreement between the input default and configured value is not checked on read. +func (config *validatorConfig) GetOrDefault(name string, value any) any { + v, found := config.data[name] + if !found { + return value + } + return v +} + +// Set configures a validator option with the given name and value. +// +// If the value had previously been set, the new value must have the same reflection type as the old one, +// or the call will error. +func (config *validatorConfig) Set(name string, value any) error { + v, found := config.data[name] + if found && reflect.TypeOf(v) != reflect.TypeOf(value) { + return fmt.Errorf("incompatible configuration type for %s, got %T, wanted %T", name, value, v) + } + config.data[name] = value + return nil +} + +// ExtendedValidations collects a set of common AST validations which reduce the likelihood of runtime errors. +// +// - Validate duration and timestamp literals +// - Ensure regex strings are valid +// - Disable mixed type list and map literals +func ExtendedValidations() EnvOption { + return ASTValidators( + ValidateDurationLiterals(), + ValidateTimestampLiterals(), + ValidateRegexLiterals(), + ValidateHomogeneousAggregateLiterals(), + ) +} + +// ValidateDurationLiterals ensures that duration literal arguments are valid immediately after type-check. +func ValidateDurationLiterals() ASTValidator { + return newFormatValidator(overloads.TypeConvertDuration, 0, evalCall) +} + +// ValidateTimestampLiterals ensures that timestamp literal arguments are valid immediately after type-check. +func ValidateTimestampLiterals() ASTValidator { + return newFormatValidator(overloads.TypeConvertTimestamp, 0, evalCall) +} + +// ValidateRegexLiterals ensures that regex patterns are validated after type-check. +func ValidateRegexLiterals() ASTValidator { + return newFormatValidator(overloads.Matches, 0, compileRegex) +} + +// ValidateHomogeneousAggregateLiterals checks that all list and map literals entries have the same types, i.e. +// no mixed list element types or mixed map key or map value types. +// +// Note: the string format call relies on a mixed element type list for ease of use, so this check skips all +// literals which occur within string format calls. +func ValidateHomogeneousAggregateLiterals() ASTValidator { + return homogeneousAggregateLiteralValidator{} +} + +// ValidateComprehensionNestingLimit ensures that comprehension nesting does not exceed the specified limit. +// +// This validator can be useful for preventing arbitrarily nested comprehensions which can take high polynomial +// time to complete. +// +// Note, this limit does not apply to comprehensions with an empty iteration range, as these comprehensions have +// no actual looping cost. The cel.bind() utilizes the comprehension structure to perform local variable +// assignments and supplies an empty iteration range, so they won't count against the nesting limit either. +func ValidateComprehensionNestingLimit(limit int) ASTValidator { + return nestingLimitValidator{limit: limit} +} + +type argChecker func(env *Env, call, arg ast.NavigableExpr) error + +func newFormatValidator(funcName string, argNum int, check argChecker) formatValidator { + return formatValidator{ + funcName: funcName, + check: check, + argNum: argNum, + } +} + +type formatValidator struct { + funcName string + argNum int + check argChecker +} + +// Name returns the unique name of this function format validator. +func (v formatValidator) Name() string { + return fmt.Sprintf("cel.lib.std.validate.functions.%s", v.funcName) +} + +// Validate searches the AST for uses of a given function name with a constant argument and performs a check +// on whether the argument is a valid literal value. +func (v formatValidator) Validate(e *Env, _ ValidatorConfig, a *ast.CheckedAST, iss *Issues) { + root := ast.NavigateCheckedAST(a) + funcCalls := ast.MatchDescendants(root, ast.FunctionMatcher(v.funcName)) + for _, call := range funcCalls { + callArgs := call.AsCall().Args() + if len(callArgs) <= v.argNum { + continue + } + litArg := callArgs[v.argNum] + if litArg.Kind() != ast.LiteralKind { + continue + } + if err := v.check(e, call, litArg); err != nil { + iss.ReportErrorAtID(litArg.ID(), "invalid %s argument", v.funcName) + } + } +} + +func evalCall(env *Env, call, arg ast.NavigableExpr) error { + ast := ParsedExprToAst(&exprpb.ParsedExpr{Expr: call.ToExpr()}) + prg, err := env.Program(ast) + if err != nil { + return err + } + _, _, err = prg.Eval(NoVars()) + return err +} + +func compileRegex(_ *Env, _, arg ast.NavigableExpr) error { + pattern := arg.AsLiteral().Value().(string) + _, err := regexp.Compile(pattern) + return err +} + +type homogeneousAggregateLiteralValidator struct{} + +// Name returns the unique name of the homogeneous type validator. +func (homogeneousAggregateLiteralValidator) Name() string { + return homogeneousValidatorName +} + +// Configure implements the ASTValidatorConfigurer interface and currently sets the list of standard +// and exempt functions from homogeneous aggregate literal checks. +// +// TODO: Move this call into the string.format() ASTValidator once ported. +func (homogeneousAggregateLiteralValidator) Configure(c MutableValidatorConfig) error { + emptyList := []string{} + exemptFunctions := c.GetOrDefault(HomogeneousAggregateLiteralExemptFunctions, emptyList).([]string) + exemptFunctions = append(exemptFunctions, "format") + return c.Set(HomogeneousAggregateLiteralExemptFunctions, exemptFunctions) +} + +// Validate validates that all lists and map literals have homogeneous types, i.e. don't contain dyn types. +// +// This validator makes an exception for list and map literals which occur at any level of nesting within +// string format calls. +func (v homogeneousAggregateLiteralValidator) Validate(_ *Env, c ValidatorConfig, a *ast.CheckedAST, iss *Issues) { + var exemptedFunctions []string + exemptedFunctions = c.GetOrDefault(HomogeneousAggregateLiteralExemptFunctions, exemptedFunctions).([]string) + root := ast.NavigateCheckedAST(a) + listExprs := ast.MatchDescendants(root, ast.KindMatcher(ast.ListKind)) + for _, listExpr := range listExprs { + if inExemptFunction(listExpr, exemptedFunctions) { + continue + } + l := listExpr.AsList() + elements := l.Elements() + optIndices := l.OptionalIndices() + var elemType *Type + for i, e := range elements { + et := e.Type() + if isOptionalIndex(i, optIndices) { + et = et.Parameters()[0] + } + if elemType == nil { + elemType = et + continue + } + if !elemType.IsEquivalentType(et) { + v.typeMismatch(iss, e.ID(), elemType, et) + break + } + } + } + mapExprs := ast.MatchDescendants(root, ast.KindMatcher(ast.MapKind)) + for _, mapExpr := range mapExprs { + if inExemptFunction(mapExpr, exemptedFunctions) { + continue + } + m := mapExpr.AsMap() + entries := m.Entries() + var keyType, valType *Type + for _, e := range entries { + key, val := e.Key(), e.Value() + kt, vt := key.Type(), val.Type() + if e.IsOptional() { + vt = vt.Parameters()[0] + } + if keyType == nil && valType == nil { + keyType, valType = kt, vt + continue + } + if !keyType.IsEquivalentType(kt) { + v.typeMismatch(iss, key.ID(), keyType, kt) + } + if !valType.IsEquivalentType(vt) { + v.typeMismatch(iss, val.ID(), valType, vt) + } + } + } +} + +func inExemptFunction(e ast.NavigableExpr, exemptFunctions []string) bool { + if parent, found := e.Parent(); found { + if parent.Kind() == ast.CallKind { + fnName := parent.AsCall().FunctionName() + for _, exempt := range exemptFunctions { + if exempt == fnName { + return true + } + } + } + if parent.Kind() == ast.ListKind || parent.Kind() == ast.MapKind { + return inExemptFunction(parent, exemptFunctions) + } + } + return false +} + +func isOptionalIndex(i int, optIndices []int32) bool { + for _, optInd := range optIndices { + if i == int(optInd) { + return true + } + } + return false +} + +func (homogeneousAggregateLiteralValidator) typeMismatch(iss *Issues, id int64, expected, actual *Type) { + iss.ReportErrorAtID(id, "expected type '%s' but found '%s'", FormatCELType(expected), FormatCELType(actual)) +} + +type nestingLimitValidator struct { + limit int +} + +func (v nestingLimitValidator) Name() string { + return "cel.lib.std.validate.comprehension_nesting_limit" +} + +func (v nestingLimitValidator) Validate(e *Env, _ ValidatorConfig, a *ast.CheckedAST, iss *Issues) { + root := ast.NavigateCheckedAST(a) + comprehensions := ast.MatchDescendants(root, ast.KindMatcher(ast.ComprehensionKind)) + if len(comprehensions) <= v.limit { + return + } + for _, comp := range comprehensions { + count := 0 + e := comp + hasParent := true + for hasParent { + // When the expression is not a comprehension, continue to the next ancestor. + if e.Kind() != ast.ComprehensionKind { + e, hasParent = e.Parent() + continue + } + // When the comprehension has an empty range, continue to the next ancestor + // as this comprehension does not have any associated cost. + iterRange := e.AsComprehension().IterRange() + if iterRange.Kind() == ast.ListKind && iterRange.AsList().Size() == 0 { + e, hasParent = e.Parent() + continue + } + // Otherwise check the nesting limit. + count++ + if count > v.limit { + iss.ReportErrorAtID(comp.ID(), "comprehension exceeds nesting limit") + break + } + e, hasParent = e.Parent() + } + } +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/BUILD.bazel index 1c6ddb7f7da6..0459d35239f8 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/BUILD.bazel @@ -11,9 +11,11 @@ go_library( "cost.go", "env.go", "errors.go", + "format.go", "mapping.go", "options.go", "printer.go", + "scopes.go", "standard.go", "types.go", ], @@ -22,10 +24,13 @@ go_library( deps = [ "//checker/decls:go_default_library", "//common:go_default_library", + "//common/ast:go_default_library", "//common/containers:go_default_library", "//common/debug:go_default_library", + "//common/decls:go_default_library", "//common/operators:go_default_library", "//common/overloads:go_default_library", + "//common/stdlib:go_default_library", "//common/types:go_default_library", "//common/types/pb:go_default_library", "//common/types/ref:go_default_library", @@ -44,6 +49,7 @@ go_test( "checker_test.go", "cost_test.go", "env_test.go", + "format_test.go", ], embed = [ ":go_default_library", diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/checker.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/checker.go index 257cffecf66b..720e4fa968f4 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/checker.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/checker.go @@ -18,15 +18,13 @@ package checker import ( "fmt" - "reflect" - "github.com/google/cel-go/checker/decls" "github.com/google/cel-go/common" + "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/decls" "github.com/google/cel-go/common/operators" - "github.com/google/cel-go/common/types/ref" - - "google.golang.org/protobuf/proto" + "github.com/google/cel-go/common/types" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -37,8 +35,8 @@ type checker struct { mappings *mapping freeTypeVarCounter int sourceInfo *exprpb.SourceInfo - types map[int64]*exprpb.Type - references map[int64]*exprpb.Reference + types map[int64]*types.Type + references map[int64]*ast.ReferenceInfo } // Check performs type checking, giving a typed AST. @@ -47,40 +45,38 @@ type checker struct { // descriptions of protocol buffers, and a registry for errors. // Returns a CheckedExpr proto, which might not be usable if // there are errors in the error registry. -func Check(parsedExpr *exprpb.ParsedExpr, - source common.Source, - env *Env) (*exprpb.CheckedExpr, *common.Errors) { +func Check(parsedExpr *exprpb.ParsedExpr, source common.Source, env *Env) (*ast.CheckedAST, *common.Errors) { + errs := common.NewErrors(source) c := checker{ env: env, - errors: &typeErrors{common.NewErrors(source)}, + errors: &typeErrors{errs: errs}, mappings: newMapping(), freeTypeVarCounter: 0, sourceInfo: parsedExpr.GetSourceInfo(), - types: make(map[int64]*exprpb.Type), - references: make(map[int64]*exprpb.Reference), + types: make(map[int64]*types.Type), + references: make(map[int64]*ast.ReferenceInfo), } c.check(parsedExpr.GetExpr()) // Walk over the final type map substituting any type parameters either by their bound value or // by DYN. - m := make(map[int64]*exprpb.Type) - for k, v := range c.types { - m[k] = substitute(c.mappings, v, true) + m := make(map[int64]*types.Type) + for id, t := range c.types { + m[id] = substitute(c.mappings, t, true) } - return &exprpb.CheckedExpr{ + return &ast.CheckedAST{ Expr: parsedExpr.GetExpr(), SourceInfo: parsedExpr.GetSourceInfo(), TypeMap: m, ReferenceMap: c.references, - }, c.errors.Errors + }, errs } func (c *checker) check(e *exprpb.Expr) { if e == nil { return } - switch e.GetExprKind().(type) { case *exprpb.Expr_ConstExpr: literal := e.GetConstExpr() @@ -113,53 +109,51 @@ func (c *checker) check(e *exprpb.Expr) { case *exprpb.Expr_ComprehensionExpr: c.checkComprehension(e) default: - c.errors.ReportError( - c.location(e), "Unrecognized ast type: %v", reflect.TypeOf(e)) + c.errors.unexpectedASTType(e.GetId(), c.location(e), e) } } func (c *checker) checkInt64Literal(e *exprpb.Expr) { - c.setType(e, decls.Int) + c.setType(e, types.IntType) } func (c *checker) checkUint64Literal(e *exprpb.Expr) { - c.setType(e, decls.Uint) + c.setType(e, types.UintType) } func (c *checker) checkStringLiteral(e *exprpb.Expr) { - c.setType(e, decls.String) + c.setType(e, types.StringType) } func (c *checker) checkBytesLiteral(e *exprpb.Expr) { - c.setType(e, decls.Bytes) + c.setType(e, types.BytesType) } func (c *checker) checkDoubleLiteral(e *exprpb.Expr) { - c.setType(e, decls.Double) + c.setType(e, types.DoubleType) } func (c *checker) checkBoolLiteral(e *exprpb.Expr) { - c.setType(e, decls.Bool) + c.setType(e, types.BoolType) } func (c *checker) checkNullLiteral(e *exprpb.Expr) { - c.setType(e, decls.Null) + c.setType(e, types.NullType) } func (c *checker) checkIdent(e *exprpb.Expr) { identExpr := e.GetIdentExpr() // Check to see if the identifier is declared. if ident := c.env.LookupIdent(identExpr.GetName()); ident != nil { - c.setType(e, ident.GetIdent().GetType()) - c.setReference(e, newIdentReference(ident.GetName(), ident.GetIdent().GetValue())) + c.setType(e, ident.Type()) + c.setReference(e, ast.NewIdentReference(ident.Name(), ident.Value())) // Overwrite the identifier with its fully qualified name. - identExpr.Name = ident.GetName() + identExpr.Name = ident.Name() return } - c.setType(e, decls.Error) - c.errors.undeclaredReference( - c.location(e), c.env.container.Name(), identExpr.GetName()) + c.setType(e, types.ErrorType) + c.errors.undeclaredReference(e.GetId(), c.location(e), c.env.container.Name(), identExpr.GetName()) } func (c *checker) checkSelect(e *exprpb.Expr) { @@ -174,9 +168,9 @@ func (c *checker) checkSelect(e *exprpb.Expr) { // Rewrite the node to be a variable reference to the resolved fully-qualified // variable name. - c.setType(e, ident.GetIdent().GetType()) - c.setReference(e, newIdentReference(ident.GetName(), ident.GetIdent().GetValue())) - identName := ident.GetName() + c.setType(e, ident.Type()) + c.setReference(e, ast.NewIdentReference(ident.Name(), ident.Value())) + identName := ident.Name() e.ExprKind = &exprpb.Expr_IdentExpr{ IdentExpr: &exprpb.Expr_Ident{ Name: identName, @@ -188,7 +182,7 @@ func (c *checker) checkSelect(e *exprpb.Expr) { resultType := c.checkSelectField(e, sel.GetOperand(), sel.GetField(), false) if sel.TestOnly { - resultType = decls.Bool + resultType = types.BoolType } c.setType(e, substitute(c.mappings, resultType, false)) } @@ -200,16 +194,17 @@ func (c *checker) checkOptSelect(e *exprpb.Expr) { field := call.GetArgs()[1] fieldName, isString := maybeUnwrapString(field) if !isString { - c.errors.ReportError(c.location(field), "unsupported optional field selection: %v", field) + c.errors.notAnOptionalFieldSelection(field.GetId(), c.location(field), field) return } // Perform type-checking using the field selection logic. resultType := c.checkSelectField(e, operand, fieldName, true) c.setType(e, substitute(c.mappings, resultType, false)) + c.setReference(e, ast.NewFunctionReference("select_optional_field")) } -func (c *checker) checkSelectField(e, operand *exprpb.Expr, field string, optional bool) *exprpb.Type { +func (c *checker) checkSelectField(e, operand *exprpb.Expr, field string, optional bool) *types.Type { // Interpret as field selection, first traversing down the operand. c.check(operand) operandType := substitute(c.mappings, c.getType(operand), false) @@ -218,38 +213,37 @@ func (c *checker) checkSelectField(e, operand *exprpb.Expr, field string, option targetType, isOpt := maybeUnwrapOptional(operandType) // Assume error type by default as most types do not support field selection. - resultType := decls.Error - switch kindOf(targetType) { - case kindMap: + resultType := types.ErrorType + switch targetType.Kind() { + case types.MapKind: // Maps yield their value type as the selection result type. - mapType := targetType.GetMapType() - resultType = mapType.GetValueType() - case kindObject: + resultType = targetType.Parameters()[1] + case types.StructKind: // Objects yield their field type declaration as the selection result type, but only if // the field is defined. messageType := targetType - if fieldType, found := c.lookupFieldType(c.location(e), messageType.GetMessageType(), field); found { - resultType = fieldType.Type + if fieldType, found := c.lookupFieldType(e.GetId(), messageType.TypeName(), field); found { + resultType = fieldType } - case kindTypeParam: + case types.TypeParamKind: // Set the operand type to DYN to prevent assignment to a potentially incorrect type // at a later point in type-checking. The isAssignable call will update the type // substitutions for the type param under the covers. - c.isAssignable(decls.Dyn, targetType) + c.isAssignable(types.DynType, targetType) // Also, set the result type to DYN. - resultType = decls.Dyn + resultType = types.DynType default: // Dynamic / error values are treated as DYN type. Errors are handled this way as well // in order to allow forward progress on the check. if !isDynOrError(targetType) { - c.errors.typeDoesNotSupportFieldSelection(c.location(e), targetType) + c.errors.typeDoesNotSupportFieldSelection(e.GetId(), c.location(e), targetType) } - resultType = decls.Dyn + resultType = types.DynType } // If the target type was optional coming in, then the result must be optional going out. if isOpt || optional { - return decls.NewOptionalType(resultType) + return types.NewOptionalType(resultType) } return resultType } @@ -277,15 +271,14 @@ func (c *checker) checkCall(e *exprpb.Expr) { // Check for the existence of the function. fn := c.env.LookupFunction(fnName) if fn == nil { - c.errors.undeclaredReference( - c.location(e), c.env.container.Name(), fnName) - c.setType(e, decls.Error) + c.errors.undeclaredReference(e.GetId(), c.location(e), c.env.container.Name(), fnName) + c.setType(e, types.ErrorType) return } // Overwrite the function name with its fully qualified resolved name. - call.Function = fn.GetName() + call.Function = fn.Name() // Check to see whether the overload resolves. - c.resolveOverloadOrError(c.location(e), e, fn, nil, args) + c.resolveOverloadOrError(e, fn, nil, args) return } @@ -303,8 +296,8 @@ func (c *checker) checkCall(e *exprpb.Expr) { // be an inaccurate representation of the desired evaluation behavior. // Overwrite with fully-qualified resolved function name sans receiver target. call.Target = nil - call.Function = fn.GetName() - c.resolveOverloadOrError(c.location(e), e, fn, nil, args) + call.Function = fn.Name() + c.resolveOverloadOrError(e, fn, nil, args) return } } @@ -314,22 +307,21 @@ func (c *checker) checkCall(e *exprpb.Expr) { fn := c.env.LookupFunction(fnName) // Function found, attempt overload resolution. if fn != nil { - c.resolveOverloadOrError(c.location(e), e, fn, target, args) + c.resolveOverloadOrError(e, fn, target, args) return } // Function name not declared, record error. - c.errors.undeclaredReference(c.location(e), c.env.container.Name(), fnName) + c.setType(e, types.ErrorType) + c.errors.undeclaredReference(e.GetId(), c.location(e), c.env.container.Name(), fnName) } func (c *checker) resolveOverloadOrError( - loc common.Location, - e *exprpb.Expr, - fn *exprpb.Decl, target *exprpb.Expr, args []*exprpb.Expr) { + e *exprpb.Expr, fn *decls.FunctionDecl, target *exprpb.Expr, args []*exprpb.Expr) { // Attempt to resolve the overload. - resolution := c.resolveOverload(loc, fn, target, args) + resolution := c.resolveOverload(e, fn, target, args) // No such overload, error noted in the resolveOverload call, type recorded here. if resolution == nil { - c.setType(e, decls.Error) + c.setType(e, types.ErrorType) return } // Overload found. @@ -338,10 +330,9 @@ func (c *checker) resolveOverloadOrError( } func (c *checker) resolveOverload( - loc common.Location, - fn *exprpb.Decl, target *exprpb.Expr, args []*exprpb.Expr) *overloadResolution { + call *exprpb.Expr, fn *decls.FunctionDecl, target *exprpb.Expr, args []*exprpb.Expr) *overloadResolution { - var argTypes []*exprpb.Type + var argTypes []*types.Type if target != nil { argTypes = append(argTypes, c.getType(target)) } @@ -349,55 +340,75 @@ func (c *checker) resolveOverload( argTypes = append(argTypes, c.getType(arg)) } - var resultType *exprpb.Type - var checkedRef *exprpb.Reference - for _, overload := range fn.GetFunction().GetOverloads() { + var resultType *types.Type + var checkedRef *ast.ReferenceInfo + for _, overload := range fn.OverloadDecls() { // Determine whether the overload is currently considered. - if c.env.isOverloadDisabled(overload.GetOverloadId()) { + if c.env.isOverloadDisabled(overload.ID()) { continue } // Ensure the call style for the overload matches. - if (target == nil && overload.GetIsInstanceFunction()) || - (target != nil && !overload.GetIsInstanceFunction()) { + if (target == nil && overload.IsMemberFunction()) || + (target != nil && !overload.IsMemberFunction()) { // not a compatible call style. continue } - overloadType := decls.NewFunctionType(overload.ResultType, overload.Params...) - if len(overload.GetTypeParams()) > 0 { + // Alternative type-checking behavior when the logical operators are compacted into + // variadic AST representations. + if fn.Name() == operators.LogicalAnd || fn.Name() == operators.LogicalOr { + checkedRef = ast.NewFunctionReference(overload.ID()) + for i, argType := range argTypes { + if !c.isAssignable(argType, types.BoolType) { + c.errors.typeMismatch( + args[i].GetId(), + c.locationByID(args[i].GetId()), + types.BoolType, + argType) + resultType = types.ErrorType + } + } + if isError(resultType) { + return nil + } + return newResolution(checkedRef, types.BoolType) + } + + overloadType := newFunctionType(overload.ResultType(), overload.ArgTypes()...) + typeParams := overload.TypeParams() + if len(typeParams) != 0 { // Instantiate overload's type with fresh type variables. substitutions := newMapping() - for _, typePar := range overload.GetTypeParams() { - substitutions.add(decls.NewTypeParamType(typePar), c.newTypeVar()) + for _, typePar := range typeParams { + substitutions.add(types.NewTypeParamType(typePar), c.newTypeVar()) } overloadType = substitute(substitutions, overloadType, false) } - candidateArgTypes := overloadType.GetFunction().GetArgTypes() + candidateArgTypes := overloadType.Parameters()[1:] if c.isAssignableList(argTypes, candidateArgTypes) { if checkedRef == nil { - checkedRef = newFunctionReference(overload.GetOverloadId()) + checkedRef = ast.NewFunctionReference(overload.ID()) } else { - checkedRef.OverloadId = append(checkedRef.GetOverloadId(), overload.GetOverloadId()) + checkedRef.AddOverload(overload.ID()) } // First matching overload, determines result type. - fnResultType := substitute(c.mappings, overloadType.GetFunction().GetResultType(), false) + fnResultType := substitute(c.mappings, overloadType.Parameters()[0], false) if resultType == nil { resultType = fnResultType - } else if !isDyn(resultType) && !proto.Equal(fnResultType, resultType) { - resultType = decls.Dyn + } else if !isDyn(resultType) && !fnResultType.IsExactType(resultType) { + resultType = types.DynType } } } if resultType == nil { - for i, arg := range argTypes { - argTypes[i] = substitute(c.mappings, arg, true) + for i, argType := range argTypes { + argTypes[i] = substitute(c.mappings, argType, true) } - c.errors.noMatchingOverload(loc, fn.GetName(), argTypes, target != nil) - resultType = decls.Error + c.errors.noMatchingOverload(call.GetId(), c.location(call), fn.Name(), argTypes, target != nil) return nil } @@ -406,7 +417,7 @@ func (c *checker) resolveOverload( func (c *checker) checkCreateList(e *exprpb.Expr) { create := e.GetListExpr() - var elemsType *exprpb.Type + var elemsType *types.Type optionalIndices := create.GetOptionalIndices() optionals := make(map[int32]bool, len(optionalIndices)) for _, optInd := range optionalIndices { @@ -419,16 +430,16 @@ func (c *checker) checkCreateList(e *exprpb.Expr) { var isOptional bool elemType, isOptional = maybeUnwrapOptional(elemType) if !isOptional && !isDyn(elemType) { - c.errors.typeMismatch(c.location(e), decls.NewOptionalType(elemType), elemType) + c.errors.typeMismatch(e.GetId(), c.location(e), types.NewOptionalType(elemType), elemType) } } - elemsType = c.joinTypes(c.location(e), elemsType, elemType) + elemsType = c.joinTypes(e, elemsType, elemType) } if elemsType == nil { // If the list is empty, assign free type var to elem type. elemsType = c.newTypeVar() } - c.setType(e, decls.NewListType(elemsType)) + c.setType(e, types.NewListType(elemsType)) } func (c *checker) checkCreateStruct(e *exprpb.Expr) { @@ -442,12 +453,12 @@ func (c *checker) checkCreateStruct(e *exprpb.Expr) { func (c *checker) checkCreateMap(e *exprpb.Expr) { mapVal := e.GetStructExpr() - var mapKeyType *exprpb.Type - var mapValueType *exprpb.Type + var mapKeyType *types.Type + var mapValueType *types.Type for _, ent := range mapVal.GetEntries() { key := ent.GetMapKey() c.check(key) - mapKeyType = c.joinTypes(c.location(key), mapKeyType, c.getType(key)) + mapKeyType = c.joinTypes(key, mapKeyType, c.getType(key)) val := ent.GetValue() c.check(val) @@ -456,50 +467,54 @@ func (c *checker) checkCreateMap(e *exprpb.Expr) { var isOptional bool valType, isOptional = maybeUnwrapOptional(valType) if !isOptional && !isDyn(valType) { - c.errors.typeMismatch(c.location(val), decls.NewOptionalType(valType), valType) + c.errors.typeMismatch(val.GetId(), c.location(val), types.NewOptionalType(valType), valType) } } - mapValueType = c.joinTypes(c.location(val), mapValueType, valType) + mapValueType = c.joinTypes(val, mapValueType, valType) } if mapKeyType == nil { // If the map is empty, assign free type variables to typeKey and value type. mapKeyType = c.newTypeVar() mapValueType = c.newTypeVar() } - c.setType(e, decls.NewMapType(mapKeyType, mapValueType)) + c.setType(e, types.NewMapType(mapKeyType, mapValueType)) } func (c *checker) checkCreateMessage(e *exprpb.Expr) { msgVal := e.GetStructExpr() // Determine the type of the message. - messageType := decls.Error - decl := c.env.LookupIdent(msgVal.GetMessageName()) - if decl == nil { + resultType := types.ErrorType + ident := c.env.LookupIdent(msgVal.GetMessageName()) + if ident == nil { c.errors.undeclaredReference( - c.location(e), c.env.container.Name(), msgVal.GetMessageName()) + e.GetId(), c.location(e), c.env.container.Name(), msgVal.GetMessageName()) + c.setType(e, types.ErrorType) return } // Ensure the type name is fully qualified in the AST. - msgVal.MessageName = decl.GetName() - c.setReference(e, newIdentReference(decl.GetName(), nil)) - ident := decl.GetIdent() - identKind := kindOf(ident.GetType()) - if identKind != kindError { - if identKind != kindType { - c.errors.notAType(c.location(e), ident.GetType()) + typeName := ident.Name() + msgVal.MessageName = typeName + c.setReference(e, ast.NewIdentReference(ident.Name(), nil)) + identKind := ident.Type().Kind() + if identKind != types.ErrorKind { + if identKind != types.TypeKind { + c.errors.notAType(e.GetId(), c.location(e), ident.Type().DeclaredTypeName()) } else { - messageType = ident.GetType().GetType() - if kindOf(messageType) != kindObject { - c.errors.notAMessageType(c.location(e), messageType) - messageType = decls.Error + resultType = ident.Type().Parameters()[0] + // Backwards compatibility test between well-known types and message types + // In this context, the type is being instantiated by its protobuf name which + // is not ideal or recommended, but some users expect this to work. + if isWellKnownType(resultType) { + typeName = getWellKnownTypeName(resultType) + } else if resultType.Kind() == types.StructKind { + typeName = resultType.DeclaredTypeName() + } else { + c.errors.notAMessageType(e.GetId(), c.location(e), resultType.DeclaredTypeName()) + resultType = types.ErrorType } } } - if isObjectWellKnownType(messageType) { - c.setType(e, getObjectWellKnownType(messageType)) - } else { - c.setType(e, messageType) - } + c.setType(e, resultType) // Check the field initializers. for _, ent := range msgVal.GetEntries() { @@ -507,10 +522,10 @@ func (c *checker) checkCreateMessage(e *exprpb.Expr) { value := ent.GetValue() c.check(value) - fieldType := decls.Error - ft, found := c.lookupFieldType(c.locationByID(ent.GetId()), messageType.GetMessageType(), field) + fieldType := types.ErrorType + ft, found := c.lookupFieldType(ent.GetId(), typeName, field) if found { - fieldType = ft.Type + fieldType = ft } valType := c.getType(value) @@ -518,11 +533,11 @@ func (c *checker) checkCreateMessage(e *exprpb.Expr) { var isOptional bool valType, isOptional = maybeUnwrapOptional(valType) if !isOptional && !isDyn(valType) { - c.errors.typeMismatch(c.location(value), decls.NewOptionalType(valType), valType) + c.errors.typeMismatch(value.GetId(), c.location(value), types.NewOptionalType(valType), valType) } } if !c.isAssignable(fieldType, valType) { - c.errors.fieldTypeMismatch(c.locationByID(ent.Id), field, fieldType, valType) + c.errors.fieldTypeMismatch(ent.GetId(), c.locationByID(ent.GetId()), field, fieldType, valType) } } } @@ -533,36 +548,36 @@ func (c *checker) checkComprehension(e *exprpb.Expr) { c.check(comp.GetAccuInit()) accuType := c.getType(comp.GetAccuInit()) rangeType := substitute(c.mappings, c.getType(comp.GetIterRange()), false) - var varType *exprpb.Type + var varType *types.Type - switch kindOf(rangeType) { - case kindList: - varType = rangeType.GetListType().GetElemType() - case kindMap: + switch rangeType.Kind() { + case types.ListKind: + varType = rangeType.Parameters()[0] + case types.MapKind: // Ranges over the keys. - varType = rangeType.GetMapType().GetKeyType() - case kindDyn, kindError, kindTypeParam: + varType = rangeType.Parameters()[0] + case types.DynKind, types.ErrorKind, types.TypeParamKind: // Set the range type to DYN to prevent assignment to a potentially incorrect type // at a later point in type-checking. The isAssignable call will update the type // substitutions for the type param under the covers. - c.isAssignable(decls.Dyn, rangeType) + c.isAssignable(types.DynType, rangeType) // Set the range iteration variable to type DYN as well. - varType = decls.Dyn + varType = types.DynType default: - c.errors.notAComprehensionRange(c.location(comp.GetIterRange()), rangeType) - varType = decls.Error + c.errors.notAComprehensionRange(comp.GetIterRange().GetId(), c.location(comp.GetIterRange()), rangeType) + varType = types.ErrorType } // Create a scope for the comprehension since it has a local accumulation variable. // This scope will contain the accumulation variable used to compute the result. c.env = c.env.enterScope() - c.env.Add(decls.NewVar(comp.GetAccuVar(), accuType)) + c.env.AddIdents(decls.NewVariable(comp.GetAccuVar(), accuType)) // Create a block scope for the loop. c.env = c.env.enterScope() - c.env.Add(decls.NewVar(comp.GetIterVar(), varType)) + c.env.AddIdents(decls.NewVariable(comp.GetIterVar(), varType)) // Check the variable references in the condition and step. c.check(comp.GetLoopCondition()) - c.assertType(comp.GetLoopCondition(), decls.Bool) + c.assertType(comp.GetLoopCondition(), types.BoolType) c.check(comp.GetLoopStep()) c.assertType(comp.GetLoopStep(), accuType) // Exit the loop's block scope before checking the result. @@ -574,9 +589,7 @@ func (c *checker) checkComprehension(e *exprpb.Expr) { } // Checks compatibility of joined types, and returns the most general common type. -func (c *checker) joinTypes(loc common.Location, - previous *exprpb.Type, - current *exprpb.Type) *exprpb.Type { +func (c *checker) joinTypes(e *exprpb.Expr, previous, current *types.Type) *types.Type { if previous == nil { return current } @@ -584,23 +597,23 @@ func (c *checker) joinTypes(loc common.Location, return mostGeneral(previous, current) } if c.dynAggregateLiteralElementTypesEnabled() { - return decls.Dyn + return types.DynType } - c.errors.typeMismatch(loc, previous, current) - return decls.Error + c.errors.typeMismatch(e.GetId(), c.location(e), previous, current) + return types.ErrorType } func (c *checker) dynAggregateLiteralElementTypesEnabled() bool { return c.env.aggLitElemType == dynElementType } -func (c *checker) newTypeVar() *exprpb.Type { +func (c *checker) newTypeVar() *types.Type { id := c.freeTypeVarCounter c.freeTypeVarCounter++ - return decls.NewTypeParamType(fmt.Sprintf("_var%d", id)) + return types.NewTypeParamType(fmt.Sprintf("_var%d", id)) } -func (c *checker) isAssignable(t1 *exprpb.Type, t2 *exprpb.Type) bool { +func (c *checker) isAssignable(t1, t2 *types.Type) bool { subs := isAssignable(c.mappings, t1, t2) if subs != nil { c.mappings = subs @@ -610,7 +623,7 @@ func (c *checker) isAssignable(t1 *exprpb.Type, t2 *exprpb.Type) bool { return false } -func (c *checker) isAssignableList(l1 []*exprpb.Type, l2 []*exprpb.Type) bool { +func (c *checker) isAssignableList(l1, l2 []*types.Type) bool { subs := isAssignableList(c.mappings, l1, l2) if subs != nil { c.mappings = subs @@ -620,57 +633,52 @@ func (c *checker) isAssignableList(l1 []*exprpb.Type, l2 []*exprpb.Type) bool { return false } -func (c *checker) lookupFieldType(l common.Location, messageType string, fieldName string) (*ref.FieldType, bool) { - if _, found := c.env.provider.FindType(messageType); !found { - // This should not happen, anyway, report an error. - c.errors.unexpectedFailedResolution(l, messageType) - return nil, false - } - - if ft, found := c.env.provider.FindFieldType(messageType, fieldName); found { - return ft, found +func maybeUnwrapString(e *exprpb.Expr) (string, bool) { + switch e.GetExprKind().(type) { + case *exprpb.Expr_ConstExpr: + literal := e.GetConstExpr() + switch literal.GetConstantKind().(type) { + case *exprpb.Constant_StringValue: + return literal.GetStringValue(), true + } } - - c.errors.undefinedField(l, fieldName) - return nil, false + return "", false } -func (c *checker) setType(e *exprpb.Expr, t *exprpb.Type) { - if old, found := c.types[e.GetId()]; found && !proto.Equal(old, t) { - c.errors.ReportError(c.location(e), - "(Incompatible) Type already exists for expression: %v(%d) old:%v, new:%v", e, e.GetId(), old, t) +func (c *checker) setType(e *exprpb.Expr, t *types.Type) { + if old, found := c.types[e.GetId()]; found && !old.IsExactType(t) { + c.errors.incompatibleType(e.GetId(), c.location(e), e, old, t) return } c.types[e.GetId()] = t } -func (c *checker) getType(e *exprpb.Expr) *exprpb.Type { +func (c *checker) getType(e *exprpb.Expr) *types.Type { return c.types[e.GetId()] } -func (c *checker) setReference(e *exprpb.Expr, r *exprpb.Reference) { - if old, found := c.references[e.GetId()]; found && !proto.Equal(old, r) { - c.errors.ReportError(c.location(e), - "Reference already exists for expression: %v(%d) old:%v, new:%v", e, e.GetId(), old, r) +func (c *checker) setReference(e *exprpb.Expr, r *ast.ReferenceInfo) { + if old, found := c.references[e.GetId()]; found && !old.Equals(r) { + c.errors.referenceRedefinition(e.GetId(), c.location(e), e, old, r) return } c.references[e.GetId()] = r } -func (c *checker) assertType(e *exprpb.Expr, t *exprpb.Type) { +func (c *checker) assertType(e *exprpb.Expr, t *types.Type) { if !c.isAssignable(t, c.getType(e)) { - c.errors.typeMismatch(c.location(e), t, c.getType(e)) + c.errors.typeMismatch(e.GetId(), c.location(e), t, c.getType(e)) } } type overloadResolution struct { - Reference *exprpb.Reference - Type *exprpb.Type + Type *types.Type + Reference *ast.ReferenceInfo } -func newResolution(checkedRef *exprpb.Reference, t *exprpb.Type) *overloadResolution { +func newResolution(r *ast.ReferenceInfo, t *types.Type) *overloadResolution { return &overloadResolution{ - Reference: checkedRef, + Reference: r, Type: t, } } @@ -697,10 +705,56 @@ func (c *checker) locationByID(id int64) common.Location { return common.NoLocation } -func newIdentReference(name string, value *exprpb.Constant) *exprpb.Reference { - return &exprpb.Reference{Name: name, Value: value} +func (c *checker) lookupFieldType(exprID int64, structType, fieldName string) (*types.Type, bool) { + if _, found := c.env.provider.FindStructType(structType); !found { + // This should not happen, anyway, report an error. + c.errors.unexpectedFailedResolution(exprID, c.locationByID(exprID), structType) + return nil, false + } + + if ft, found := c.env.provider.FindStructFieldType(structType, fieldName); found { + return ft.Type, found + } + + c.errors.undefinedField(exprID, c.locationByID(exprID), fieldName) + return nil, false +} + +func isWellKnownType(t *types.Type) bool { + switch t.Kind() { + case types.AnyKind, types.TimestampKind, types.DurationKind, types.DynKind, types.NullTypeKind: + return true + case types.BoolKind, types.BytesKind, types.DoubleKind, types.IntKind, types.StringKind, types.UintKind: + return t.IsAssignableType(types.NullType) + case types.ListKind: + return t.Parameters()[0] == types.DynType + case types.MapKind: + return t.Parameters()[0] == types.StringType && t.Parameters()[1] == types.DynType + } + return false } -func newFunctionReference(overloads ...string) *exprpb.Reference { - return &exprpb.Reference{OverloadId: overloads} +func getWellKnownTypeName(t *types.Type) string { + if name, found := wellKnownTypes[t.Kind()]; found { + return name + } + return "" } + +var ( + wellKnownTypes = map[types.Kind]string{ + types.AnyKind: "google.protobuf.Any", + types.BoolKind: "google.protobuf.BoolValue", + types.BytesKind: "google.protobuf.BytesValue", + types.DoubleKind: "google.protobuf.DoubleValue", + types.DurationKind: "google.protobuf.Duration", + types.DynKind: "google.protobuf.Value", + types.IntKind: "google.protobuf.Int64Value", + types.ListKind: "google.protobuf.ListValue", + types.NullTypeKind: "google.protobuf.NullValue", + types.MapKind: "google.protobuf.Struct", + types.StringKind: "google.protobuf.StringValue", + types.TimestampKind: "google.protobuf.Timestamp", + types.UintKind: "google.protobuf.UInt64Value", + } +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/cost.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/cost.go index 8ae8d18bfce7..d02f2628ab75 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/cost.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/cost.go @@ -18,7 +18,9 @@ import ( "math" "github.com/google/cel-go/common" + "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/overloads" + "github.com/google/cel-go/common/types" "github.com/google/cel-go/parser" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" @@ -54,7 +56,7 @@ type AstNode interface { // The first path element is a variable. All subsequent path elements are one of: field name, '@items', '@keys', '@values'. Path() []string // Type returns the deduced type of the AstNode. - Type() *exprpb.Type + Type() *types.Type // Expr returns the expression of the AstNode. Expr() *exprpb.Expr // ComputedSize returns a size estimate of the AstNode derived from information available in the CEL expression. @@ -66,7 +68,7 @@ type AstNode interface { type astNode struct { path []string - t *exprpb.Type + t *types.Type expr *exprpb.Expr derivedSize *SizeEstimate } @@ -75,7 +77,7 @@ func (e astNode) Path() []string { return e.path } -func (e astNode) Type() *exprpb.Type { +func (e astNode) Type() *types.Type { return e.t } @@ -259,7 +261,7 @@ type coster struct { iterRanges iterRangeScopes // computedSizes tracks the computed sizes of call results. computedSizes map[int64]SizeEstimate - checkedExpr *exprpb.CheckedExpr + checkedAST *ast.CheckedAST estimator CostEstimator // presenceTestCost will either be a zero or one based on whether has() macros count against cost computations. presenceTestCost CostEstimate @@ -302,9 +304,9 @@ func PresenceTestHasCost(hasCost bool) CostOption { } // Cost estimates the cost of the parsed and type checked CEL expression. -func Cost(checker *exprpb.CheckedExpr, estimator CostEstimator, opts ...CostOption) (CostEstimate, error) { +func Cost(checker *ast.CheckedAST, estimator CostEstimator, opts ...CostOption) (CostEstimate, error) { c := &coster{ - checkedExpr: checker, + checkedAST: checker, estimator: estimator, exprPath: map[int64][]string{}, iterRanges: map[string][]int64{}, @@ -317,7 +319,7 @@ func Cost(checker *exprpb.CheckedExpr, estimator CostEstimator, opts ...CostOpti return CostEstimate{}, err } } - return c.cost(checker.GetExpr()), nil + return c.cost(checker.Expr), nil } func (c *coster) cost(e *exprpb.Expr) CostEstimate { @@ -351,10 +353,10 @@ func (c *coster) costIdent(e *exprpb.Expr) CostEstimate { // build and track the field path if iterRange, ok := c.iterRanges.peek(identExpr.GetName()); ok { - switch c.checkedExpr.TypeMap[iterRange].GetTypeKind().(type) { - case *exprpb.Type_ListType_: + switch c.checkedAST.TypeMap[iterRange].Kind() { + case types.ListKind: c.addPath(e, append(c.exprPath[iterRange], "@items")) - case *exprpb.Type_MapType_: + case types.MapKind: c.addPath(e, append(c.exprPath[iterRange], "@keys")) } } else { @@ -378,8 +380,8 @@ func (c *coster) costSelect(e *exprpb.Expr) CostEstimate { } sum = sum.Add(c.cost(sel.GetOperand())) targetType := c.getType(sel.GetOperand()) - switch kindOf(targetType) { - case kindMap, kindObject, kindTypeParam: + switch targetType.Kind() { + case types.MapKind, types.StructKind, types.TypeParamKind: sum = sum.Add(selectAndIdentCost) } @@ -403,8 +405,8 @@ func (c *coster) costCall(e *exprpb.Expr) CostEstimate { argTypes[i] = c.newAstNode(arg) } - ref := c.checkedExpr.ReferenceMap[e.GetId()] - if ref == nil || len(ref.GetOverloadId()) == 0 { + ref := c.checkedAST.ReferenceMap[e.GetId()] + if ref == nil || len(ref.OverloadIDs) == 0 { return CostEstimate{} } var targetType AstNode @@ -417,7 +419,7 @@ func (c *coster) costCall(e *exprpb.Expr) CostEstimate { // Pick a cost estimate range that covers all the overload cost estimation ranges fnCost := CostEstimate{Min: uint64(math.MaxUint64), Max: 0} var resultSize *SizeEstimate - for _, overload := range ref.GetOverloadId() { + for _, overload := range ref.OverloadIDs { overloadCost := c.functionCost(call.GetFunction(), overload, &targetType, argTypes, argCosts) fnCost = fnCost.Union(overloadCost.CostEstimate) if overloadCost.ResultSize != nil { @@ -533,14 +535,34 @@ func (c *coster) functionCost(function, overloadID string, target *AstNode, args if est := c.estimator.EstimateCallCost(function, overloadID, target, args); est != nil { callEst := *est - return CallEstimate{CostEstimate: callEst.Add(argCostSum())} + return CallEstimate{CostEstimate: callEst.Add(argCostSum()), ResultSize: est.ResultSize} } switch overloadID { // O(n) functions - case overloads.StartsWithString, overloads.EndsWithString, overloads.StringToBytes, overloads.BytesToString, overloads.ExtQuoteString, overloads.ExtFormatString: - if overloadID == overloads.ExtFormatString { + case overloads.ExtFormatString: + if target != nil { + // ResultSize not calculated because we can't bound the max size. return CallEstimate{CostEstimate: c.sizeEstimate(*target).MultiplyByCostFactor(common.StringTraversalCostFactor).Add(argCostSum())} } + case overloads.StringToBytes: + if len(args) == 1 { + sz := c.sizeEstimate(args[0]) + // ResultSize max is when each char converts to 4 bytes. + return CallEstimate{CostEstimate: sz.MultiplyByCostFactor(common.StringTraversalCostFactor).Add(argCostSum()), ResultSize: &SizeEstimate{Min: sz.Min, Max: sz.Max * 4}} + } + case overloads.BytesToString: + if len(args) == 1 { + sz := c.sizeEstimate(args[0]) + // ResultSize min is when 4 bytes convert to 1 char. + return CallEstimate{CostEstimate: sz.MultiplyByCostFactor(common.StringTraversalCostFactor).Add(argCostSum()), ResultSize: &SizeEstimate{Min: sz.Min / 4, Max: sz.Max}} + } + case overloads.ExtQuoteString: + if len(args) == 1 { + sz := c.sizeEstimate(args[0]) + // ResultSize max is when each char is escaped. 2 quote chars always added. + return CallEstimate{CostEstimate: sz.MultiplyByCostFactor(common.StringTraversalCostFactor).Add(argCostSum()), ResultSize: &SizeEstimate{Min: sz.Min + 2, Max: sz.Max*2 + 2}} + } + case overloads.StartsWithString, overloads.EndsWithString: if len(args) == 1 { return CallEstimate{CostEstimate: c.sizeEstimate(args[0]).MultiplyByCostFactor(common.StringTraversalCostFactor).Add(argCostSum())} } @@ -621,8 +643,8 @@ func (c *coster) functionCost(function, overloadID string, target *AstNode, args return CallEstimate{CostEstimate: CostEstimate{Min: 1, Max: 1}.Add(argCostSum())} } -func (c *coster) getType(e *exprpb.Expr) *exprpb.Type { - return c.checkedExpr.TypeMap[e.GetId()] +func (c *coster) getType(e *exprpb.Expr) *types.Type { + return c.checkedAST.TypeMap[e.GetId()] } func (c *coster) getPath(e *exprpb.Expr) []string { @@ -643,22 +665,20 @@ func (c *coster) newAstNode(e *exprpb.Expr) *astNode { if size, ok := c.computedSizes[e.GetId()]; ok { derivedSize = &size } - return &astNode{path: path, t: c.getType(e), expr: e, derivedSize: derivedSize} + return &astNode{ + path: path, + t: c.getType(e), + expr: e, + derivedSize: derivedSize} } // isScalar returns true if the given type is known to be of a constant size at // compile time. isScalar will return false for strings (they are variable-width) // in addition to protobuf.Any and protobuf.Value (their size is not knowable at compile time). -func isScalar(t *exprpb.Type) bool { - switch kindOf(t) { - case kindPrimitive: - if t.GetPrimitive() != exprpb.Type_STRING && t.GetPrimitive() != exprpb.Type_BYTES { - return true - } - case kindWellKnown: - if t.GetWellKnown() == exprpb.Type_DURATION || t.GetWellKnown() == exprpb.Type_TIMESTAMP { - return true - } +func isScalar(t *types.Type) bool { + switch t.Kind() { + case types.BoolKind, types.DoubleKind, types.DurationKind, types.IntKind, types.TimestampKind, types.UintKind: + return true } return false } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/BUILD.bazel index 9384be4507c2..a6b0be292cef 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/BUILD.bazel @@ -9,7 +9,6 @@ go_library( name = "go_default_library", srcs = [ "decls.go", - "scopes.go", ], importpath = "github.com/google/cel-go/checker/decls", deps = [ diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/env.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/env.go index be89d2d68d76..70682b17c6b4 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/env.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/env.go @@ -18,17 +18,11 @@ import ( "fmt" "strings" - "google.golang.org/protobuf/proto" - - "github.com/google/cel-go/checker/decls" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/decls" "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types" - "github.com/google/cel-go/common/types/pb" - "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/parser" - - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) type aggregateLiteralElementType int @@ -76,15 +70,15 @@ var ( // which can be used to assist with type-checking. type Env struct { container *containers.Container - provider ref.TypeProvider - declarations *decls.Scopes + provider types.Provider + declarations *Scopes aggLitElemType aggregateLiteralElementType filteredOverloadIDs map[string]struct{} } // NewEnv returns a new *Env with the given parameters. -func NewEnv(container *containers.Container, provider ref.TypeProvider, opts ...Option) (*Env, error) { - declarations := decls.NewScopes() +func NewEnv(container *containers.Container, provider types.Provider, opts ...Option) (*Env, error) { + declarations := newScopes() declarations.Push() envOptions := &options{} @@ -113,24 +107,31 @@ func NewEnv(container *containers.Container, provider ref.TypeProvider, opts ... }, nil } -// Add adds new Decl protos to the Env. -// Returns an error for identifier redeclarations. -func (e *Env) Add(decls ...*exprpb.Decl) error { +// AddIdents configures the checker with a list of variable declarations. +// +// If there are overlapping declarations, the method will error. +func (e *Env) AddIdents(declarations ...*decls.VariableDecl) error { errMsgs := make([]errorMsg, 0) - for _, decl := range decls { - switch decl.DeclKind.(type) { - case *exprpb.Decl_Ident: - errMsgs = append(errMsgs, e.addIdent(sanitizeIdent(decl))) - case *exprpb.Decl_Function: - errMsgs = append(errMsgs, e.setFunction(sanitizeFunction(decl))...) - } + for _, d := range declarations { + errMsgs = append(errMsgs, e.addIdent(d)) + } + return formatError(errMsgs) +} + +// AddFunctions configures the checker with a list of function declarations. +// +// If there are overlapping declarations, the method will error. +func (e *Env) AddFunctions(declarations ...*decls.FunctionDecl) error { + errMsgs := make([]errorMsg, 0) + for _, d := range declarations { + errMsgs = append(errMsgs, e.setFunction(d)...) } return formatError(errMsgs) } // LookupIdent returns a Decl proto for typeName as an identifier in the Env. // Returns nil if no such identifier is found in the Env. -func (e *Env) LookupIdent(name string) *exprpb.Decl { +func (e *Env) LookupIdent(name string) *decls.VariableDecl { for _, candidate := range e.container.ResolveCandidateNames(name) { if ident := e.declarations.FindIdent(candidate); ident != nil { return ident @@ -139,8 +140,8 @@ func (e *Env) LookupIdent(name string) *exprpb.Decl { // Next try to import the name as a reference to a message type. If found, // the declaration is added to the outest (global) scope of the // environment, so next time we can access it faster. - if t, found := e.provider.FindType(candidate); found { - decl := decls.NewVar(candidate, t) + if t, found := e.provider.FindStructType(candidate); found { + decl := decls.NewVariable(candidate, t) e.declarations.AddIdent(decl) return decl } @@ -148,11 +149,7 @@ func (e *Env) LookupIdent(name string) *exprpb.Decl { // Next try to import this as an enum value by splitting the name in a type prefix and // the enum inside. if enumValue := e.provider.EnumValue(candidate); enumValue.Type() != types.ErrType { - decl := decls.NewIdent(candidate, - decls.Int, - &exprpb.Constant{ - ConstantKind: &exprpb.Constant_Int64Value{ - Int64Value: int64(enumValue.(types.Int))}}) + decl := decls.NewConstant(candidate, types.IntType, enumValue) e.declarations.AddIdent(decl) return decl } @@ -162,7 +159,7 @@ func (e *Env) LookupIdent(name string) *exprpb.Decl { // LookupFunction returns a Decl proto for typeName as a function in env. // Returns nil if no such function is found in env. -func (e *Env) LookupFunction(name string) *exprpb.Decl { +func (e *Env) LookupFunction(name string) *decls.FunctionDecl { for _, candidate := range e.container.ResolveCandidateNames(name) { if fn := e.declarations.FindFunction(candidate); fn != nil { return fn @@ -171,88 +168,46 @@ func (e *Env) LookupFunction(name string) *exprpb.Decl { return nil } -// addOverload adds overload to function declaration f. -// Returns one or more errorMsg values if the overload overlaps with an existing overload or macro. -func (e *Env) addOverload(f *exprpb.Decl, overload *exprpb.Decl_FunctionDecl_Overload) []errorMsg { - errMsgs := make([]errorMsg, 0) - function := f.GetFunction() - emptyMappings := newMapping() - overloadFunction := decls.NewFunctionType(overload.GetResultType(), - overload.GetParams()...) - overloadErased := substitute(emptyMappings, overloadFunction, true) - for _, existing := range function.GetOverloads() { - existingFunction := decls.NewFunctionType(existing.GetResultType(), existing.GetParams()...) - existingErased := substitute(emptyMappings, existingFunction, true) - overlap := isAssignable(emptyMappings, overloadErased, existingErased) != nil || - isAssignable(emptyMappings, existingErased, overloadErased) != nil - if overlap && - overload.GetIsInstanceFunction() == existing.GetIsInstanceFunction() { - errMsgs = append(errMsgs, - overlappingOverloadError(f.Name, - overload.GetOverloadId(), overloadFunction, - existing.GetOverloadId(), existingFunction)) - } - } - - for _, macro := range parser.AllMacros { - if macro.Function() == f.Name && - macro.IsReceiverStyle() == overload.GetIsInstanceFunction() && - macro.ArgCount() == len(overload.GetParams()) { - errMsgs = append(errMsgs, overlappingMacroError(f.Name, macro.ArgCount())) - } - } - if len(errMsgs) > 0 { - return errMsgs - } - function.Overloads = append(function.GetOverloads(), overload) - return errMsgs -} - // setFunction adds the function Decl to the Env. // Adds a function decl if one doesn't already exist, then adds all overloads from the Decl. // If overload overlaps with an existing overload, adds to the errors in the Env instead. -func (e *Env) setFunction(decl *exprpb.Decl) []errorMsg { - errorMsgs := make([]errorMsg, 0) - overloads := decl.GetFunction().GetOverloads() - current := e.declarations.FindFunction(decl.Name) - if current == nil { - //Add the function declaration without overloads and check the overloads below. - current = decls.NewFunction(decl.Name) - } else { - existingOverloads := map[string]*exprpb.Decl_FunctionDecl_Overload{} - for _, overload := range current.GetFunction().GetOverloads() { - existingOverloads[overload.GetOverloadId()] = overload +func (e *Env) setFunction(fn *decls.FunctionDecl) []errorMsg { + errMsgs := make([]errorMsg, 0) + current := e.declarations.FindFunction(fn.Name()) + if current != nil { + var err error + current, err = current.Merge(fn) + if err != nil { + return append(errMsgs, errorMsg(err.Error())) } - newOverloads := []*exprpb.Decl_FunctionDecl_Overload{} - for _, overload := range overloads { - existing, found := existingOverloads[overload.GetOverloadId()] - if !found || !overloadsEqual(existing, overload) { - newOverloads = append(newOverloads, overload) + } else { + current = fn + } + for _, overload := range current.OverloadDecls() { + for _, macro := range parser.AllMacros { + if macro.Function() == current.Name() && + macro.IsReceiverStyle() == overload.IsMemberFunction() && + macro.ArgCount() == len(overload.ArgTypes()) { + errMsgs = append(errMsgs, overlappingMacroError(current.Name(), macro.ArgCount())) } } - overloads = newOverloads - if len(newOverloads) == 0 { - return errorMsgs + if len(errMsgs) > 0 { + return errMsgs } - // Copy on write since we don't know where this original definition came from. - current = proto.Clone(current).(*exprpb.Decl) } e.declarations.SetFunction(current) - for _, overload := range overloads { - errorMsgs = append(errorMsgs, e.addOverload(current, overload)...) - } - return errorMsgs + return errMsgs } // addIdent adds the Decl to the declarations in the Env. // Returns a non-empty errorMsg if the identifier is already declared in the scope. -func (e *Env) addIdent(decl *exprpb.Decl) errorMsg { - current := e.declarations.FindIdentInScope(decl.Name) +func (e *Env) addIdent(decl *decls.VariableDecl) errorMsg { + current := e.declarations.FindIdentInScope(decl.Name()) if current != nil { - if proto.Equal(current, decl) { + if current.DeclarationIsEquivalent(decl) { return "" } - return overlappingIdentifierError(decl.Name) + return overlappingIdentifierError(decl.Name()) } e.declarations.AddIdent(decl) return "" @@ -264,111 +219,9 @@ func (e *Env) isOverloadDisabled(overloadID string) bool { return found } -// overloadsEqual returns whether two overloads have identical signatures. -// -// type parameter names are ignored as they may be specified in any order and have no bearing on overload -// equivalence -func overloadsEqual(o1, o2 *exprpb.Decl_FunctionDecl_Overload) bool { - return o1.GetOverloadId() == o2.GetOverloadId() && - o1.GetIsInstanceFunction() == o2.GetIsInstanceFunction() && - paramsEqual(o1.GetParams(), o2.GetParams()) && - proto.Equal(o1.GetResultType(), o2.GetResultType()) -} - -// paramsEqual returns whether two lists have equal length and all types are equal -func paramsEqual(p1, p2 []*exprpb.Type) bool { - if len(p1) != len(p2) { - return false - } - for i, a := range p1 { - b := p2[i] - if !proto.Equal(a, b) { - return false - } - } - return true -} - -// sanitizeFunction replaces well-known types referenced by message name with their equivalent -// CEL built-in type instances. -func sanitizeFunction(decl *exprpb.Decl) *exprpb.Decl { - fn := decl.GetFunction() - // Determine whether the declaration requires replacements from proto-based message type - // references to well-known CEL type references. - var needsSanitizing bool - for _, o := range fn.GetOverloads() { - if isObjectWellKnownType(o.GetResultType()) { - needsSanitizing = true - break - } - for _, p := range o.GetParams() { - if isObjectWellKnownType(p) { - needsSanitizing = true - break - } - } - } - - // Early return if the declaration requires no modification. - if !needsSanitizing { - return decl - } - - // Sanitize all of the overloads if any overload requires an update to its type references. - overloads := make([]*exprpb.Decl_FunctionDecl_Overload, len(fn.GetOverloads())) - for i, o := range fn.GetOverloads() { - rt := o.GetResultType() - if isObjectWellKnownType(rt) { - rt = getObjectWellKnownType(rt) - } - params := make([]*exprpb.Type, len(o.GetParams())) - copy(params, o.GetParams()) - for j, p := range params { - if isObjectWellKnownType(p) { - params[j] = getObjectWellKnownType(p) - } - } - // If sanitized, replace the overload definition. - if o.IsInstanceFunction { - overloads[i] = - decls.NewInstanceOverload(o.GetOverloadId(), params, rt) - } else { - overloads[i] = - decls.NewOverload(o.GetOverloadId(), params, rt) - } - } - return decls.NewFunction(decl.GetName(), overloads...) -} - -// sanitizeIdent replaces the identifier's well-known types referenced by message name with -// references to CEL built-in type instances. -func sanitizeIdent(decl *exprpb.Decl) *exprpb.Decl { - id := decl.GetIdent() - t := id.GetType() - if !isObjectWellKnownType(t) { - return decl - } - return decls.NewIdent(decl.GetName(), getObjectWellKnownType(t), id.GetValue()) -} - -// isObjectWellKnownType returns true if the input type is an OBJECT type with a message name -// that corresponds the message name of a built-in CEL type. -func isObjectWellKnownType(t *exprpb.Type) bool { - if kindOf(t) != kindObject { - return false - } - _, found := pb.CheckedWellKnowns[t.GetMessageType()] - return found -} - -// getObjectWellKnownType returns the built-in CEL type declaration for input type's message name. -func getObjectWellKnownType(t *exprpb.Type) *exprpb.Type { - return pb.CheckedWellKnowns[t.GetMessageType()] -} - // validatedDeclarations returns a reference to the validated variable and function declaration scope stack. // must be copied before use. -func (e *Env) validatedDeclarations() *decls.Scopes { +func (e *Env) validatedDeclarations() *Scopes { return e.declarations } @@ -402,19 +255,6 @@ func overlappingIdentifierError(name string) errorMsg { return errorMsg(fmt.Sprintf("overlapping identifier for name '%s'", name)) } -func overlappingOverloadError(name string, - overloadID1 string, f1 *exprpb.Type, - overloadID2 string, f2 *exprpb.Type) errorMsg { - return errorMsg(fmt.Sprintf( - "overlapping overload for name '%s' (type '%s' with overloadId: '%s' "+ - "cannot be distinguished from '%s' with overloadId: '%s')", - name, - FormatCheckedType(f1), - overloadID1, - FormatCheckedType(f2), - overloadID2)) -} - func overlappingMacroError(name string, argCount int) errorMsg { return errorMsg(fmt.Sprintf( "overlapping macro for name '%s' with %d args", name, argCount)) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/errors.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/errors.go index 0014f9abe1c2..c2b96498d1d0 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/errors.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/errors.go @@ -15,82 +15,78 @@ package checker import ( + "reflect" + "github.com/google/cel-go/common" + "github.com/google/cel-go/common/ast" + "github.com/google/cel-go/common/types" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) // typeErrors is a specialization of Errors. type typeErrors struct { - *common.Errors + errs *common.Errors +} + +func (e *typeErrors) fieldTypeMismatch(id int64, l common.Location, name string, field, value *types.Type) { + e.errs.ReportErrorAtID(id, l, "expected type of field '%s' is '%s' but provided type is '%s'", + name, FormatCELType(field), FormatCELType(value)) +} + +func (e *typeErrors) incompatibleType(id int64, l common.Location, ex *exprpb.Expr, prev, next *types.Type) { + e.errs.ReportErrorAtID(id, l, + "incompatible type already exists for expression: %v(%d) old:%v, new:%v", ex, ex.GetId(), prev, next) +} + +func (e *typeErrors) noMatchingOverload(id int64, l common.Location, name string, args []*types.Type, isInstance bool) { + signature := formatFunctionDeclType(nil, args, isInstance) + e.errs.ReportErrorAtID(id, l, "found no matching overload for '%s' applied to '%s'", name, signature) } -func (e *typeErrors) undeclaredReference(l common.Location, container string, name string) { - e.ReportError(l, "undeclared reference to '%s' (in container '%s')", name, container) +func (e *typeErrors) notAComprehensionRange(id int64, l common.Location, t *types.Type) { + e.errs.ReportErrorAtID(id, l, "expression of type '%s' cannot be range of a comprehension (must be list, map, or dynamic)", + FormatCELType(t)) } -func (e *typeErrors) typeDoesNotSupportFieldSelection(l common.Location, t *exprpb.Type) { - e.ReportError(l, "type '%s' does not support field selection", t) +func (e *typeErrors) notAnOptionalFieldSelection(id int64, l common.Location, field *exprpb.Expr) { + e.errs.ReportErrorAtID(id, l, "unsupported optional field selection: %v", field) } -func (e *typeErrors) undefinedField(l common.Location, field string) { - e.ReportError(l, "undefined field '%s'", field) +func (e *typeErrors) notAType(id int64, l common.Location, typeName string) { + e.errs.ReportErrorAtID(id, l, "'%s' is not a type", typeName) } -func (e *typeErrors) noMatchingOverload(l common.Location, name string, args []*exprpb.Type, isInstance bool) { - signature := formatFunction(nil, args, isInstance) - e.ReportError(l, "found no matching overload for '%s' applied to '%s'", name, signature) +func (e *typeErrors) notAMessageType(id int64, l common.Location, typeName string) { + e.errs.ReportErrorAtID(id, l, "'%s' is not a message type", typeName) } -func (e *typeErrors) notAType(l common.Location, t *exprpb.Type) { - e.ReportError(l, "'%s(%v)' is not a type", FormatCheckedType(t), t) +func (e *typeErrors) referenceRedefinition(id int64, l common.Location, ex *exprpb.Expr, prev, next *ast.ReferenceInfo) { + e.errs.ReportErrorAtID(id, l, + "reference already exists for expression: %v(%d) old:%v, new:%v", ex, ex.GetId(), prev, next) } -func (e *typeErrors) notAMessageType(l common.Location, t *exprpb.Type) { - e.ReportError(l, "'%s' is not a message type", FormatCheckedType(t)) +func (e *typeErrors) typeDoesNotSupportFieldSelection(id int64, l common.Location, t *types.Type) { + e.errs.ReportErrorAtID(id, l, "type '%s' does not support field selection", FormatCELType(t)) } -func (e *typeErrors) fieldTypeMismatch(l common.Location, name string, field *exprpb.Type, value *exprpb.Type) { - e.ReportError(l, "expected type of field '%s' is '%s' but provided type is '%s'", - name, FormatCheckedType(field), FormatCheckedType(value)) +func (e *typeErrors) typeMismatch(id int64, l common.Location, expected, actual *types.Type) { + e.errs.ReportErrorAtID(id, l, "expected type '%s' but found '%s'", + FormatCELType(expected), FormatCELType(actual)) } -func (e *typeErrors) unexpectedFailedResolution(l common.Location, typeName string) { - e.ReportError(l, "[internal] unexpected failed resolution of '%s'", typeName) +func (e *typeErrors) undefinedField(id int64, l common.Location, field string) { + e.errs.ReportErrorAtID(id, l, "undefined field '%s'", field) } -func (e *typeErrors) notAComprehensionRange(l common.Location, t *exprpb.Type) { - e.ReportError(l, "expression of type '%s' cannot be range of a comprehension (must be list, map, or dynamic)", - FormatCheckedType(t)) +func (e *typeErrors) undeclaredReference(id int64, l common.Location, container string, name string) { + e.errs.ReportErrorAtID(id, l, "undeclared reference to '%s' (in container '%s')", name, container) } -func (e *typeErrors) typeMismatch(l common.Location, expected *exprpb.Type, actual *exprpb.Type) { - e.ReportError(l, "expected type '%s' but found '%s'", - FormatCheckedType(expected), FormatCheckedType(actual)) +func (e *typeErrors) unexpectedFailedResolution(id int64, l common.Location, typeName string) { + e.errs.ReportErrorAtID(id, l, "unexpected failed resolution of '%s'", typeName) } -func formatFunction(resultType *exprpb.Type, argTypes []*exprpb.Type, isInstance bool) string { - result := "" - if isInstance { - target := argTypes[0] - argTypes = argTypes[1:] - - result += FormatCheckedType(target) - result += "." - } - - result += "(" - for i, arg := range argTypes { - if i > 0 { - result += ", " - } - result += FormatCheckedType(arg) - } - result += ")" - if resultType != nil { - result += " -> " - result += FormatCheckedType(resultType) - } - - return result +func (e *typeErrors) unexpectedASTType(id int64, l common.Location, ex *exprpb.Expr) { + e.errs.ReportErrorAtID(id, l, "unrecognized ast type: %v", reflect.TypeOf(ex)) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/format.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/format.go new file mode 100644 index 000000000000..95842905e6d5 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/format.go @@ -0,0 +1,216 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package checker + +import ( + "fmt" + "strings" + + chkdecls "github.com/google/cel-go/checker/decls" + "github.com/google/cel-go/common/types" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +const ( + kindUnknown = iota + 1 + kindError + kindFunction + kindDyn + kindPrimitive + kindWellKnown + kindWrapper + kindNull + kindAbstract + kindType + kindList + kindMap + kindObject + kindTypeParam +) + +// FormatCheckedType converts a type message into a string representation. +func FormatCheckedType(t *exprpb.Type) string { + switch kindOf(t) { + case kindDyn: + return "dyn" + case kindFunction: + return formatFunctionExprType(t.GetFunction().GetResultType(), + t.GetFunction().GetArgTypes(), + false) + case kindList: + return fmt.Sprintf("list(%s)", FormatCheckedType(t.GetListType().GetElemType())) + case kindObject: + return t.GetMessageType() + case kindMap: + return fmt.Sprintf("map(%s, %s)", + FormatCheckedType(t.GetMapType().GetKeyType()), + FormatCheckedType(t.GetMapType().GetValueType())) + case kindNull: + return "null" + case kindPrimitive: + switch t.GetPrimitive() { + case exprpb.Type_UINT64: + return "uint" + case exprpb.Type_INT64: + return "int" + } + return strings.Trim(strings.ToLower(t.GetPrimitive().String()), " ") + case kindType: + if t.GetType() == nil || t.GetType().GetTypeKind() == nil { + return "type" + } + return fmt.Sprintf("type(%s)", FormatCheckedType(t.GetType())) + case kindWellKnown: + switch t.GetWellKnown() { + case exprpb.Type_ANY: + return "any" + case exprpb.Type_DURATION: + return "duration" + case exprpb.Type_TIMESTAMP: + return "timestamp" + } + case kindWrapper: + return fmt.Sprintf("wrapper(%s)", + FormatCheckedType(chkdecls.NewPrimitiveType(t.GetWrapper()))) + case kindError: + return "!error!" + case kindTypeParam: + return t.GetTypeParam() + case kindAbstract: + at := t.GetAbstractType() + params := at.GetParameterTypes() + paramStrs := make([]string, len(params)) + for i, p := range params { + paramStrs[i] = FormatCheckedType(p) + } + return fmt.Sprintf("%s(%s)", at.GetName(), strings.Join(paramStrs, ", ")) + } + return t.String() +} + +type formatter func(any) string + +// FormatCELType formats a types.Type value to a string representation. +// +// The type formatting is identical to FormatCheckedType. +func FormatCELType(t any) string { + dt := t.(*types.Type) + switch dt.Kind() { + case types.AnyKind: + return "any" + case types.DurationKind: + return "duration" + case types.ErrorKind: + return "!error!" + case types.NullTypeKind: + return "null" + case types.TimestampKind: + return "timestamp" + case types.TypeParamKind: + return dt.TypeName() + case types.OpaqueKind: + if dt.TypeName() == "function" { + // There is no explicit function type in the new types representation, so information like + // whether the function is a member function is absent. + return formatFunctionDeclType(dt.Parameters()[0], dt.Parameters()[1:], false) + } + case types.UnspecifiedKind: + return "" + } + if len(dt.Parameters()) == 0 { + return dt.DeclaredTypeName() + } + paramTypeNames := make([]string, 0, len(dt.Parameters())) + for _, p := range dt.Parameters() { + paramTypeNames = append(paramTypeNames, FormatCELType(p)) + } + return fmt.Sprintf("%s(%s)", dt.TypeName(), strings.Join(paramTypeNames, ", ")) +} + +func formatExprType(t any) string { + if t == nil { + return "" + } + return FormatCheckedType(t.(*exprpb.Type)) +} + +func formatFunctionExprType(resultType *exprpb.Type, argTypes []*exprpb.Type, isInstance bool) string { + return formatFunctionInternal[*exprpb.Type](resultType, argTypes, isInstance, formatExprType) +} + +func formatFunctionDeclType(resultType *types.Type, argTypes []*types.Type, isInstance bool) string { + return formatFunctionInternal[*types.Type](resultType, argTypes, isInstance, FormatCELType) +} + +func formatFunctionInternal[T any](resultType T, argTypes []T, isInstance bool, format formatter) string { + result := "" + if isInstance { + target := argTypes[0] + argTypes = argTypes[1:] + result += format(target) + result += "." + } + result += "(" + for i, arg := range argTypes { + if i > 0 { + result += ", " + } + result += format(arg) + } + result += ")" + rt := format(resultType) + if rt != "" { + result += " -> " + result += rt + } + return result +} + +// kindOf returns the kind of the type as defined in the checked.proto. +func kindOf(t *exprpb.Type) int { + if t == nil || t.TypeKind == nil { + return kindUnknown + } + switch t.GetTypeKind().(type) { + case *exprpb.Type_Error: + return kindError + case *exprpb.Type_Function: + return kindFunction + case *exprpb.Type_Dyn: + return kindDyn + case *exprpb.Type_Primitive: + return kindPrimitive + case *exprpb.Type_WellKnown: + return kindWellKnown + case *exprpb.Type_Wrapper: + return kindWrapper + case *exprpb.Type_Null: + return kindNull + case *exprpb.Type_Type: + return kindType + case *exprpb.Type_ListType_: + return kindList + case *exprpb.Type_MapType_: + return kindMap + case *exprpb.Type_MessageType: + return kindObject + case *exprpb.Type_TypeParam: + return kindTypeParam + case *exprpb.Type_AbstractType_: + return kindAbstract + } + return kindUnknown +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/mapping.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/mapping.go index fbc55a28d9d7..8163a908a5f2 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/mapping.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/mapping.go @@ -15,25 +15,25 @@ package checker import ( - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" + "github.com/google/cel-go/common/types" ) type mapping struct { - mapping map[string]*exprpb.Type + mapping map[string]*types.Type } func newMapping() *mapping { return &mapping{ - mapping: make(map[string]*exprpb.Type), + mapping: make(map[string]*types.Type), } } -func (m *mapping) add(from *exprpb.Type, to *exprpb.Type) { - m.mapping[typeKey(from)] = to +func (m *mapping) add(from, to *types.Type) { + m.mapping[FormatCELType(from)] = to } -func (m *mapping) find(from *exprpb.Type) (*exprpb.Type, bool) { - if r, found := m.mapping[typeKey(from)]; found { +func (m *mapping) find(from *types.Type) (*types.Type, bool) { + if r, found := m.mapping[FormatCELType(from)]; found { return r, found } return nil, false diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/options.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/options.go index cded00a660d7..0560c3813cf1 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/options.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/options.go @@ -14,12 +14,10 @@ package checker -import "github.com/google/cel-go/checker/decls" - type options struct { crossTypeNumericComparisons bool homogeneousAggregateLiterals bool - validatedDeclarations *decls.Scopes + validatedDeclarations *Scopes } // Option is a functional option for configuring the type-checker @@ -34,15 +32,6 @@ func CrossTypeNumericComparisons(enabled bool) Option { } } -// HomogeneousAggregateLiterals toggles support for constructing lists and maps whose elements all -// have the same type. -func HomogeneousAggregateLiterals(enabled bool) Option { - return func(opts *options) error { - opts.homogeneousAggregateLiterals = enabled - return nil - } -} - // ValidatedDeclarations provides a references to validated declarations which will be copied // into new checker instances. func ValidatedDeclarations(env *Env) Option { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/printer.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/printer.go index 0cecc5210dde..15cba06ee97a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/printer.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/printer.go @@ -15,6 +15,8 @@ package checker import ( + "sort" + "github.com/google/cel-go/common/debug" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" @@ -47,6 +49,7 @@ func (a *semanticAdorner) GetMetadata(elem any) string { if len(ref.GetOverloadId()) == 0 { result += "^" + ref.Name } else { + sort.Strings(ref.GetOverloadId()) for i, overload := range ref.GetOverloadId() { if i == 0 { result += "^" diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/scopes.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/scopes.go similarity index 81% rename from cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/scopes.go rename to cluster-autoscaler/vendor/github.com/google/cel-go/checker/scopes.go index 608bca3e5379..8bb73ddb6a29 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/decls/scopes.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/scopes.go @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package decls +package checker -import exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +import ( + "github.com/google/cel-go/common/decls" +) // Scopes represents nested Decl sets where the Scopes value contains a Groups containing all // identifiers in scope and an optional parent representing outer scopes. @@ -25,9 +27,9 @@ type Scopes struct { scopes *Group } -// NewScopes creates a new, empty Scopes. +// newScopes creates a new, empty Scopes. // Some operations can't be safely performed until a Group is added with Push. -func NewScopes() *Scopes { +func newScopes() *Scopes { return &Scopes{ scopes: newGroup(), } @@ -35,7 +37,7 @@ func NewScopes() *Scopes { // Copy creates a copy of the current Scopes values, including a copy of its parent if non-nil. func (s *Scopes) Copy() *Scopes { - cpy := NewScopes() + cpy := newScopes() if s == nil { return cpy } @@ -66,14 +68,14 @@ func (s *Scopes) Pop() *Scopes { // AddIdent adds the ident Decl in the current scope. // Note: If the name collides with an existing identifier in the scope, the Decl is overwritten. -func (s *Scopes) AddIdent(decl *exprpb.Decl) { - s.scopes.idents[decl.Name] = decl +func (s *Scopes) AddIdent(decl *decls.VariableDecl) { + s.scopes.idents[decl.Name()] = decl } // FindIdent finds the first ident Decl with a matching name in Scopes, or nil if one cannot be // found. // Note: The search is performed from innermost to outermost. -func (s *Scopes) FindIdent(name string) *exprpb.Decl { +func (s *Scopes) FindIdent(name string) *decls.VariableDecl { if ident, found := s.scopes.idents[name]; found { return ident } @@ -86,7 +88,7 @@ func (s *Scopes) FindIdent(name string) *exprpb.Decl { // FindIdentInScope finds the first ident Decl with a matching name in the current Scopes value, or // nil if one does not exist. // Note: The search is only performed on the current scope and does not search outer scopes. -func (s *Scopes) FindIdentInScope(name string) *exprpb.Decl { +func (s *Scopes) FindIdentInScope(name string) *decls.VariableDecl { if ident, found := s.scopes.idents[name]; found { return ident } @@ -95,14 +97,14 @@ func (s *Scopes) FindIdentInScope(name string) *exprpb.Decl { // SetFunction adds the function Decl to the current scope. // Note: Any previous entry for a function in the current scope with the same name is overwritten. -func (s *Scopes) SetFunction(fn *exprpb.Decl) { - s.scopes.functions[fn.Name] = fn +func (s *Scopes) SetFunction(fn *decls.FunctionDecl) { + s.scopes.functions[fn.Name()] = fn } // FindFunction finds the first function Decl with a matching name in Scopes. // The search is performed from innermost to outermost. // Returns nil if no such function in Scopes. -func (s *Scopes) FindFunction(name string) *exprpb.Decl { +func (s *Scopes) FindFunction(name string) *decls.FunctionDecl { if fn, found := s.scopes.functions[name]; found { return fn } @@ -116,16 +118,16 @@ func (s *Scopes) FindFunction(name string) *exprpb.Decl { // Contains separate namespaces for identifier and function Decls. // (Should be named "Scope" perhaps?) type Group struct { - idents map[string]*exprpb.Decl - functions map[string]*exprpb.Decl + idents map[string]*decls.VariableDecl + functions map[string]*decls.FunctionDecl } // copy creates a new Group instance with a shallow copy of the variables and functions. // If callers need to mutate the exprpb.Decl definitions for a Function, they should copy-on-write. func (g *Group) copy() *Group { cpy := &Group{ - idents: make(map[string]*exprpb.Decl, len(g.idents)), - functions: make(map[string]*exprpb.Decl, len(g.functions)), + idents: make(map[string]*decls.VariableDecl, len(g.idents)), + functions: make(map[string]*decls.FunctionDecl, len(g.functions)), } for n, id := range g.idents { cpy.idents[n] = id @@ -139,7 +141,7 @@ func (g *Group) copy() *Group { // newGroup creates a new Group with empty maps for identifiers and functions. func newGroup() *Group { return &Group{ - idents: make(map[string]*exprpb.Decl), - functions: make(map[string]*exprpb.Decl), + idents: make(map[string]*decls.VariableDecl), + functions: make(map[string]*decls.FunctionDecl), } } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/standard.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/standard.go index e64337ba44ae..11b35b80ee28 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/standard.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/standard.go @@ -15,480 +15,21 @@ package checker import ( - "github.com/google/cel-go/checker/decls" - "github.com/google/cel-go/common/operators" - "github.com/google/cel-go/common/overloads" + "github.com/google/cel-go/common/stdlib" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) -var ( - standardDeclarations []*exprpb.Decl -) - -func init() { - // Some shortcuts we use when building declarations. - paramA := decls.NewTypeParamType("A") - typeParamAList := []string{"A"} - listOfA := decls.NewListType(paramA) - paramB := decls.NewTypeParamType("B") - typeParamABList := []string{"A", "B"} - mapOfAB := decls.NewMapType(paramA, paramB) - - var idents []*exprpb.Decl - for _, t := range []*exprpb.Type{ - decls.Int, decls.Uint, decls.Bool, - decls.Double, decls.Bytes, decls.String} { - idents = append(idents, - decls.NewVar(FormatCheckedType(t), decls.NewTypeType(t))) - } - idents = append(idents, - decls.NewVar("list", decls.NewTypeType(listOfA)), - decls.NewVar("map", decls.NewTypeType(mapOfAB)), - decls.NewVar("null_type", decls.NewTypeType(decls.Null)), - decls.NewVar("type", decls.NewTypeType(decls.NewTypeType(nil)))) - - standardDeclarations = append(standardDeclarations, idents...) - standardDeclarations = append(standardDeclarations, []*exprpb.Decl{ - // Booleans - decls.NewFunction(operators.Conditional, - decls.NewParameterizedOverload(overloads.Conditional, - []*exprpb.Type{decls.Bool, paramA, paramA}, paramA, - typeParamAList)), - - decls.NewFunction(operators.LogicalAnd, - decls.NewOverload(overloads.LogicalAnd, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool)), - - decls.NewFunction(operators.LogicalOr, - decls.NewOverload(overloads.LogicalOr, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool)), - - decls.NewFunction(operators.LogicalNot, - decls.NewOverload(overloads.LogicalNot, - []*exprpb.Type{decls.Bool}, decls.Bool)), - - decls.NewFunction(operators.NotStrictlyFalse, - decls.NewOverload(overloads.NotStrictlyFalse, - []*exprpb.Type{decls.Bool}, decls.Bool)), - - decls.NewFunction(operators.Equals, - decls.NewParameterizedOverload(overloads.Equals, - []*exprpb.Type{paramA, paramA}, decls.Bool, - typeParamAList)), - - decls.NewFunction(operators.NotEquals, - decls.NewParameterizedOverload(overloads.NotEquals, - []*exprpb.Type{paramA, paramA}, decls.Bool, - typeParamAList)), - - // Algebra. - - decls.NewFunction(operators.Subtract, - decls.NewOverload(overloads.SubtractInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Int), - decls.NewOverload(overloads.SubtractUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint), - decls.NewOverload(overloads.SubtractDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Double), - decls.NewOverload(overloads.SubtractTimestampTimestamp, - []*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Duration), - decls.NewOverload(overloads.SubtractTimestampDuration, - []*exprpb.Type{decls.Timestamp, decls.Duration}, decls.Timestamp), - decls.NewOverload(overloads.SubtractDurationDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Duration)), - - decls.NewFunction(operators.Multiply, - decls.NewOverload(overloads.MultiplyInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Int), - decls.NewOverload(overloads.MultiplyUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint), - decls.NewOverload(overloads.MultiplyDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Double)), - - decls.NewFunction(operators.Divide, - decls.NewOverload(overloads.DivideInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Int), - decls.NewOverload(overloads.DivideUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint), - decls.NewOverload(overloads.DivideDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Double)), - - decls.NewFunction(operators.Modulo, - decls.NewOverload(overloads.ModuloInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Int), - decls.NewOverload(overloads.ModuloUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint)), - - decls.NewFunction(operators.Add, - decls.NewOverload(overloads.AddInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Int), - decls.NewOverload(overloads.AddUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Uint), - decls.NewOverload(overloads.AddDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Double), - decls.NewOverload(overloads.AddString, - []*exprpb.Type{decls.String, decls.String}, decls.String), - decls.NewOverload(overloads.AddBytes, - []*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bytes), - decls.NewParameterizedOverload(overloads.AddList, - []*exprpb.Type{listOfA, listOfA}, listOfA, - typeParamAList), - decls.NewOverload(overloads.AddTimestampDuration, - []*exprpb.Type{decls.Timestamp, decls.Duration}, decls.Timestamp), - decls.NewOverload(overloads.AddDurationTimestamp, - []*exprpb.Type{decls.Duration, decls.Timestamp}, decls.Timestamp), - decls.NewOverload(overloads.AddDurationDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Duration)), - - decls.NewFunction(operators.Negate, - decls.NewOverload(overloads.NegateInt64, - []*exprpb.Type{decls.Int}, decls.Int), - decls.NewOverload(overloads.NegateDouble, - []*exprpb.Type{decls.Double}, decls.Double)), - - // Index. - - decls.NewFunction(operators.Index, - decls.NewParameterizedOverload(overloads.IndexList, - []*exprpb.Type{listOfA, decls.Int}, paramA, - typeParamAList), - decls.NewParameterizedOverload(overloads.IndexMap, - []*exprpb.Type{mapOfAB, paramA}, paramB, - typeParamABList)), - - // Collections. - - decls.NewFunction(overloads.Size, - decls.NewInstanceOverload(overloads.SizeStringInst, - []*exprpb.Type{decls.String}, decls.Int), - decls.NewInstanceOverload(overloads.SizeBytesInst, - []*exprpb.Type{decls.Bytes}, decls.Int), - decls.NewParameterizedInstanceOverload(overloads.SizeListInst, - []*exprpb.Type{listOfA}, decls.Int, typeParamAList), - decls.NewParameterizedInstanceOverload(overloads.SizeMapInst, - []*exprpb.Type{mapOfAB}, decls.Int, typeParamABList), - decls.NewOverload(overloads.SizeString, - []*exprpb.Type{decls.String}, decls.Int), - decls.NewOverload(overloads.SizeBytes, - []*exprpb.Type{decls.Bytes}, decls.Int), - decls.NewParameterizedOverload(overloads.SizeList, - []*exprpb.Type{listOfA}, decls.Int, typeParamAList), - decls.NewParameterizedOverload(overloads.SizeMap, - []*exprpb.Type{mapOfAB}, decls.Int, typeParamABList)), - - decls.NewFunction(operators.In, - decls.NewParameterizedOverload(overloads.InList, - []*exprpb.Type{paramA, listOfA}, decls.Bool, - typeParamAList), - decls.NewParameterizedOverload(overloads.InMap, - []*exprpb.Type{paramA, mapOfAB}, decls.Bool, - typeParamABList)), - - // Deprecated 'in()' function. - - decls.NewFunction(overloads.DeprecatedIn, - decls.NewParameterizedOverload(overloads.InList, - []*exprpb.Type{paramA, listOfA}, decls.Bool, - typeParamAList), - decls.NewParameterizedOverload(overloads.InMap, - []*exprpb.Type{paramA, mapOfAB}, decls.Bool, - typeParamABList)), - - // Conversions to type. - - decls.NewFunction(overloads.TypeConvertType, - decls.NewParameterizedOverload(overloads.TypeConvertType, - []*exprpb.Type{paramA}, decls.NewTypeType(paramA), typeParamAList)), - - // Conversions to int. - - decls.NewFunction(overloads.TypeConvertInt, - decls.NewOverload(overloads.IntToInt, []*exprpb.Type{decls.Int}, decls.Int), - decls.NewOverload(overloads.UintToInt, []*exprpb.Type{decls.Uint}, decls.Int), - decls.NewOverload(overloads.DoubleToInt, []*exprpb.Type{decls.Double}, decls.Int), - decls.NewOverload(overloads.StringToInt, []*exprpb.Type{decls.String}, decls.Int), - decls.NewOverload(overloads.TimestampToInt, []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewOverload(overloads.DurationToInt, []*exprpb.Type{decls.Duration}, decls.Int)), - - // Conversions to uint. - - decls.NewFunction(overloads.TypeConvertUint, - decls.NewOverload(overloads.UintToUint, []*exprpb.Type{decls.Uint}, decls.Uint), - decls.NewOverload(overloads.IntToUint, []*exprpb.Type{decls.Int}, decls.Uint), - decls.NewOverload(overloads.DoubleToUint, []*exprpb.Type{decls.Double}, decls.Uint), - decls.NewOverload(overloads.StringToUint, []*exprpb.Type{decls.String}, decls.Uint)), - - // Conversions to double. - - decls.NewFunction(overloads.TypeConvertDouble, - decls.NewOverload(overloads.DoubleToDouble, []*exprpb.Type{decls.Double}, decls.Double), - decls.NewOverload(overloads.IntToDouble, []*exprpb.Type{decls.Int}, decls.Double), - decls.NewOverload(overloads.UintToDouble, []*exprpb.Type{decls.Uint}, decls.Double), - decls.NewOverload(overloads.StringToDouble, []*exprpb.Type{decls.String}, decls.Double)), - - // Conversions to bool. - - decls.NewFunction(overloads.TypeConvertBool, - decls.NewOverload(overloads.BoolToBool, []*exprpb.Type{decls.Bool}, decls.Bool), - decls.NewOverload(overloads.StringToBool, []*exprpb.Type{decls.String}, decls.Bool)), - - // Conversions to string. - - decls.NewFunction(overloads.TypeConvertString, - decls.NewOverload(overloads.StringToString, []*exprpb.Type{decls.String}, decls.String), - decls.NewOverload(overloads.BoolToString, []*exprpb.Type{decls.Bool}, decls.String), - decls.NewOverload(overloads.IntToString, []*exprpb.Type{decls.Int}, decls.String), - decls.NewOverload(overloads.UintToString, []*exprpb.Type{decls.Uint}, decls.String), - decls.NewOverload(overloads.DoubleToString, []*exprpb.Type{decls.Double}, decls.String), - decls.NewOverload(overloads.BytesToString, []*exprpb.Type{decls.Bytes}, decls.String), - decls.NewOverload(overloads.TimestampToString, []*exprpb.Type{decls.Timestamp}, decls.String), - decls.NewOverload(overloads.DurationToString, []*exprpb.Type{decls.Duration}, decls.String)), - - // Conversions to bytes. - - decls.NewFunction(overloads.TypeConvertBytes, - decls.NewOverload(overloads.BytesToBytes, []*exprpb.Type{decls.Bytes}, decls.Bytes), - decls.NewOverload(overloads.StringToBytes, []*exprpb.Type{decls.String}, decls.Bytes)), - - // Conversions to timestamps. - - decls.NewFunction(overloads.TypeConvertTimestamp, - decls.NewOverload(overloads.TimestampToTimestamp, - []*exprpb.Type{decls.Timestamp}, decls.Timestamp), - decls.NewOverload(overloads.StringToTimestamp, - []*exprpb.Type{decls.String}, decls.Timestamp), - decls.NewOverload(overloads.IntToTimestamp, - []*exprpb.Type{decls.Int}, decls.Timestamp)), - - // Conversions to durations. - - decls.NewFunction(overloads.TypeConvertDuration, - decls.NewOverload(overloads.DurationToDuration, - []*exprpb.Type{decls.Duration}, decls.Duration), - decls.NewOverload(overloads.StringToDuration, - []*exprpb.Type{decls.String}, decls.Duration), - decls.NewOverload(overloads.IntToDuration, - []*exprpb.Type{decls.Int}, decls.Duration)), - - // Conversions to Dyn. - - decls.NewFunction(overloads.TypeConvertDyn, - decls.NewParameterizedOverload(overloads.ToDyn, - []*exprpb.Type{paramA}, decls.Dyn, - typeParamAList)), - - // String functions. - - decls.NewFunction(overloads.Contains, - decls.NewInstanceOverload(overloads.ContainsString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool)), - decls.NewFunction(overloads.EndsWith, - decls.NewInstanceOverload(overloads.EndsWithString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool)), - decls.NewFunction(overloads.Matches, - decls.NewOverload(overloads.Matches, - []*exprpb.Type{decls.String, decls.String}, decls.Bool), - decls.NewInstanceOverload(overloads.MatchesString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool)), - decls.NewFunction(overloads.StartsWith, - decls.NewInstanceOverload(overloads.StartsWithString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool)), - - // Date/time functions. - - decls.NewFunction(overloads.TimeGetFullYear, - decls.NewInstanceOverload(overloads.TimestampToYear, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToYearWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetMonth, - decls.NewInstanceOverload(overloads.TimestampToMonth, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToMonthWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetDayOfYear, - decls.NewInstanceOverload(overloads.TimestampToDayOfYear, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToDayOfYearWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetDayOfMonth, - decls.NewInstanceOverload(overloads.TimestampToDayOfMonthZeroBased, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToDayOfMonthZeroBasedWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetDate, - decls.NewInstanceOverload(overloads.TimestampToDayOfMonthOneBased, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToDayOfMonthOneBasedWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetDayOfWeek, - decls.NewInstanceOverload(overloads.TimestampToDayOfWeek, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToDayOfWeekWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int)), - - decls.NewFunction(overloads.TimeGetHours, - decls.NewInstanceOverload(overloads.TimestampToHours, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToHoursWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int), - decls.NewInstanceOverload(overloads.DurationToHours, - []*exprpb.Type{decls.Duration}, decls.Int)), - - decls.NewFunction(overloads.TimeGetMinutes, - decls.NewInstanceOverload(overloads.TimestampToMinutes, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToMinutesWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int), - decls.NewInstanceOverload(overloads.DurationToMinutes, - []*exprpb.Type{decls.Duration}, decls.Int)), - - decls.NewFunction(overloads.TimeGetSeconds, - decls.NewInstanceOverload(overloads.TimestampToSeconds, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToSecondsWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int), - decls.NewInstanceOverload(overloads.DurationToSeconds, - []*exprpb.Type{decls.Duration}, decls.Int)), - - decls.NewFunction(overloads.TimeGetMilliseconds, - decls.NewInstanceOverload(overloads.TimestampToMilliseconds, - []*exprpb.Type{decls.Timestamp}, decls.Int), - decls.NewInstanceOverload(overloads.TimestampToMillisecondsWithTz, - []*exprpb.Type{decls.Timestamp, decls.String}, decls.Int), - decls.NewInstanceOverload(overloads.DurationToMilliseconds, - []*exprpb.Type{decls.Duration}, decls.Int)), - - // Relations. - decls.NewFunction(operators.Less, - decls.NewOverload(overloads.LessBool, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool), - decls.NewOverload(overloads.LessInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessInt64Double, - []*exprpb.Type{decls.Int, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessInt64Uint64, - []*exprpb.Type{decls.Int, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessUint64Double, - []*exprpb.Type{decls.Uint, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessUint64Int64, - []*exprpb.Type{decls.Uint, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessDoubleInt64, - []*exprpb.Type{decls.Double, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessDoubleUint64, - []*exprpb.Type{decls.Double, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool), - decls.NewOverload(overloads.LessBytes, - []*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool), - decls.NewOverload(overloads.LessTimestamp, - []*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool), - decls.NewOverload(overloads.LessDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)), - - decls.NewFunction(operators.LessEquals, - decls.NewOverload(overloads.LessEqualsBool, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool), - decls.NewOverload(overloads.LessEqualsInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessEqualsInt64Double, - []*exprpb.Type{decls.Int, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessEqualsInt64Uint64, - []*exprpb.Type{decls.Int, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessEqualsUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessEqualsUint64Double, - []*exprpb.Type{decls.Uint, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessEqualsUint64Int64, - []*exprpb.Type{decls.Uint, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessEqualsDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Bool), - decls.NewOverload(overloads.LessEqualsDoubleInt64, - []*exprpb.Type{decls.Double, decls.Int}, decls.Bool), - decls.NewOverload(overloads.LessEqualsDoubleUint64, - []*exprpb.Type{decls.Double, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.LessEqualsString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool), - decls.NewOverload(overloads.LessEqualsBytes, - []*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool), - decls.NewOverload(overloads.LessEqualsTimestamp, - []*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool), - decls.NewOverload(overloads.LessEqualsDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)), - - decls.NewFunction(operators.Greater, - decls.NewOverload(overloads.GreaterBool, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool), - decls.NewOverload(overloads.GreaterInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterInt64Double, - []*exprpb.Type{decls.Int, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterInt64Uint64, - []*exprpb.Type{decls.Int, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterUint64Double, - []*exprpb.Type{decls.Uint, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterUint64Int64, - []*exprpb.Type{decls.Uint, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterDoubleInt64, - []*exprpb.Type{decls.Double, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterDoubleUint64, - []*exprpb.Type{decls.Double, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool), - decls.NewOverload(overloads.GreaterBytes, - []*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool), - decls.NewOverload(overloads.GreaterTimestamp, - []*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool), - decls.NewOverload(overloads.GreaterDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)), - - decls.NewFunction(operators.GreaterEquals, - decls.NewOverload(overloads.GreaterEqualsBool, - []*exprpb.Type{decls.Bool, decls.Bool}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsInt64, - []*exprpb.Type{decls.Int, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsInt64Double, - []*exprpb.Type{decls.Int, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsInt64Uint64, - []*exprpb.Type{decls.Int, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsUint64, - []*exprpb.Type{decls.Uint, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsUint64Double, - []*exprpb.Type{decls.Uint, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsUint64Int64, - []*exprpb.Type{decls.Uint, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsDouble, - []*exprpb.Type{decls.Double, decls.Double}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsDoubleInt64, - []*exprpb.Type{decls.Double, decls.Int}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsDoubleUint64, - []*exprpb.Type{decls.Double, decls.Uint}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsString, - []*exprpb.Type{decls.String, decls.String}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsBytes, - []*exprpb.Type{decls.Bytes, decls.Bytes}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsTimestamp, - []*exprpb.Type{decls.Timestamp, decls.Timestamp}, decls.Bool), - decls.NewOverload(overloads.GreaterEqualsDuration, - []*exprpb.Type{decls.Duration, decls.Duration}, decls.Bool)), - }...) +// StandardFunctions returns the Decls for all functions in the evaluator. +// +// Deprecated: prefer stdlib.FunctionExprDecls() +func StandardFunctions() []*exprpb.Decl { + return stdlib.FunctionExprDecls() } -// StandardDeclarations returns the Decls for all functions and constants in the evaluator. -func StandardDeclarations() []*exprpb.Decl { - return standardDeclarations +// StandardTypes returns the set of type identifiers for standard library types. +// +// Deprecated: prefer stdlib.TypeExprDecls() +func StandardTypes() []*exprpb.Decl { + return stdlib.TypeExprDecls() } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/types.go b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/types.go index 28d21c9d9291..e2373d1b7cba 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/checker/types.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/checker/types.go @@ -15,154 +15,54 @@ package checker import ( - "fmt" - "strings" - - "github.com/google/cel-go/checker/decls" - - "google.golang.org/protobuf/proto" - - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" + "github.com/google/cel-go/common/types" ) -const ( - kindUnknown = iota + 1 - kindError - kindFunction - kindDyn - kindPrimitive - kindWellKnown - kindWrapper - kindNull - kindAbstract - kindType - kindList - kindMap - kindObject - kindTypeParam -) - -// FormatCheckedType converts a type message into a string representation. -func FormatCheckedType(t *exprpb.Type) string { - switch kindOf(t) { - case kindDyn: - return "dyn" - case kindFunction: - return formatFunction(t.GetFunction().GetResultType(), - t.GetFunction().GetArgTypes(), - false) - case kindList: - return fmt.Sprintf("list(%s)", FormatCheckedType(t.GetListType().GetElemType())) - case kindObject: - return t.GetMessageType() - case kindMap: - return fmt.Sprintf("map(%s, %s)", - FormatCheckedType(t.GetMapType().GetKeyType()), - FormatCheckedType(t.GetMapType().GetValueType())) - case kindNull: - return "null" - case kindPrimitive: - switch t.GetPrimitive() { - case exprpb.Type_UINT64: - return "uint" - case exprpb.Type_INT64: - return "int" - } - return strings.Trim(strings.ToLower(t.GetPrimitive().String()), " ") - case kindType: - if t.GetType() == nil { - return "type" - } - return fmt.Sprintf("type(%s)", FormatCheckedType(t.GetType())) - case kindWellKnown: - switch t.GetWellKnown() { - case exprpb.Type_ANY: - return "any" - case exprpb.Type_DURATION: - return "duration" - case exprpb.Type_TIMESTAMP: - return "timestamp" - } - case kindWrapper: - return fmt.Sprintf("wrapper(%s)", - FormatCheckedType(decls.NewPrimitiveType(t.GetWrapper()))) - case kindError: - return "!error!" - case kindTypeParam: - return t.GetTypeParam() - case kindAbstract: - at := t.GetAbstractType() - params := at.GetParameterTypes() - paramStrs := make([]string, len(params)) - for i, p := range params { - paramStrs[i] = FormatCheckedType(p) - } - return fmt.Sprintf("%s(%s)", at.GetName(), strings.Join(paramStrs, ", ")) - } - return t.String() -} - // isDyn returns true if the input t is either type DYN or a well-known ANY message. -func isDyn(t *exprpb.Type) bool { +func isDyn(t *types.Type) bool { // Note: object type values that are well-known and map to a DYN value in practice // are sanitized prior to being added to the environment. - switch kindOf(t) { - case kindDyn: + switch t.Kind() { + case types.DynKind, types.AnyKind: return true - case kindWellKnown: - return t.GetWellKnown() == exprpb.Type_ANY default: return false } } // isDynOrError returns true if the input is either an Error, DYN, or well-known ANY message. -func isDynOrError(t *exprpb.Type) bool { +func isDynOrError(t *types.Type) bool { return isError(t) || isDyn(t) } -func isError(t *exprpb.Type) bool { - return kindOf(t) == kindError +func isError(t *types.Type) bool { + return t.Kind() == types.ErrorKind } -func isOptional(t *exprpb.Type) bool { - if kindOf(t) == kindAbstract { - at := t.GetAbstractType() - return at.GetName() == "optional" +func isOptional(t *types.Type) bool { + if t.Kind() == types.OpaqueKind { + return t.TypeName() == "optional" } return false } -func maybeUnwrapOptional(t *exprpb.Type) (*exprpb.Type, bool) { +func maybeUnwrapOptional(t *types.Type) (*types.Type, bool) { if isOptional(t) { - at := t.GetAbstractType() - return at.GetParameterTypes()[0], true + return t.Parameters()[0], true } return t, false } -func maybeUnwrapString(e *exprpb.Expr) (string, bool) { - switch e.GetExprKind().(type) { - case *exprpb.Expr_ConstExpr: - literal := e.GetConstExpr() - switch literal.GetConstantKind().(type) { - case *exprpb.Constant_StringValue: - return literal.GetStringValue(), true - } - } - return "", false -} - // isEqualOrLessSpecific checks whether one type is equal or less specific than the other one. // A type is less specific if it matches the other type using the DYN type. -func isEqualOrLessSpecific(t1 *exprpb.Type, t2 *exprpb.Type) bool { - kind1, kind2 := kindOf(t1), kindOf(t2) +func isEqualOrLessSpecific(t1, t2 *types.Type) bool { + kind1, kind2 := t1.Kind(), t2.Kind() // The first type is less specific. - if isDyn(t1) || kind1 == kindTypeParam { + if isDyn(t1) || kind1 == types.TypeParamKind { return true } // The first type is not less specific. - if isDyn(t2) || kind2 == kindTypeParam { + if isDyn(t2) || kind2 == types.TypeParamKind { return false } // Types must be of the same kind to be equal. @@ -173,38 +73,34 @@ func isEqualOrLessSpecific(t1 *exprpb.Type, t2 *exprpb.Type) bool { // With limited exceptions for ANY and JSON values, the types must agree and be equivalent in // order to return true. switch kind1 { - case kindAbstract: - a1 := t1.GetAbstractType() - a2 := t2.GetAbstractType() - if a1.GetName() != a2.GetName() || - len(a1.GetParameterTypes()) != len(a2.GetParameterTypes()) { + case types.OpaqueKind: + if t1.TypeName() != t2.TypeName() || + len(t1.Parameters()) != len(t2.Parameters()) { return false } - for i, p1 := range a1.GetParameterTypes() { - if !isEqualOrLessSpecific(p1, a2.GetParameterTypes()[i]) { + for i, p1 := range t1.Parameters() { + if !isEqualOrLessSpecific(p1, t2.Parameters()[i]) { return false } } return true - case kindList: - return isEqualOrLessSpecific(t1.GetListType().GetElemType(), t2.GetListType().GetElemType()) - case kindMap: - m1 := t1.GetMapType() - m2 := t2.GetMapType() - return isEqualOrLessSpecific(m1.GetKeyType(), m2.GetKeyType()) && - isEqualOrLessSpecific(m1.GetValueType(), m2.GetValueType()) - case kindType: + case types.ListKind: + return isEqualOrLessSpecific(t1.Parameters()[0], t2.Parameters()[0]) + case types.MapKind: + return isEqualOrLessSpecific(t1.Parameters()[0], t2.Parameters()[0]) && + isEqualOrLessSpecific(t1.Parameters()[1], t2.Parameters()[1]) + case types.TypeKind: return true default: - return proto.Equal(t1, t2) + return t1.IsExactType(t2) } } // / internalIsAssignable returns true if t1 is assignable to t2. -func internalIsAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) bool { +func internalIsAssignable(m *mapping, t1, t2 *types.Type) bool { // Process type parameters. - kind1, kind2 := kindOf(t1), kindOf(t2) - if kind2 == kindTypeParam { + kind1, kind2 := t1.Kind(), t2.Kind() + if kind2 == types.TypeParamKind { // If t2 is a valid type substitution for t1, return true. valid, t2HasSub := isValidTypeSubstitution(m, t1, t2) if valid { @@ -217,7 +113,7 @@ func internalIsAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) bool { } // Otherwise, fall through to check whether t1 is a possible substitution for t2. } - if kind1 == kindTypeParam { + if kind1 == types.TypeParamKind { // Return whether t1 is a valid substitution for t2. If not, do no additional checks as the // possible type substitutions have been searched in both directions. valid, _ := isValidTypeSubstitution(m, t2, t1) @@ -228,40 +124,25 @@ func internalIsAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) bool { if isDynOrError(t1) || isDynOrError(t2) { return true } - - // Test for when the types do not need to agree, but are more specific than dyn. - switch kind1 { - case kindNull: + // Preserve the nullness checks of the legacy type-checker. + if kind1 == types.NullTypeKind { return internalIsAssignableNull(t2) - case kindPrimitive: - return internalIsAssignablePrimitive(t1.GetPrimitive(), t2) - case kindWrapper: - return internalIsAssignable(m, decls.NewPrimitiveType(t1.GetWrapper()), t2) - default: - if kind1 != kind2 { - return false - } + } + if kind2 == types.NullTypeKind { + return internalIsAssignableNull(t1) } - // Test for when the types must agree. + // Test for when the types do not need to agree, but are more specific than dyn. switch kind1 { - // ERROR, TYPE_PARAM, and DYN handled above. - case kindAbstract: - return internalIsAssignableAbstractType(m, t1.GetAbstractType(), t2.GetAbstractType()) - case kindFunction: - return internalIsAssignableFunction(m, t1.GetFunction(), t2.GetFunction()) - case kindList: - return internalIsAssignable(m, t1.GetListType().GetElemType(), t2.GetListType().GetElemType()) - case kindMap: - return internalIsAssignableMap(m, t1.GetMapType(), t2.GetMapType()) - case kindObject: - return t1.GetMessageType() == t2.GetMessageType() - case kindType: - // A type is a type is a type, any additional parameterization of the - // type cannot affect method resolution or assignability. - return true - case kindWellKnown: - return t1.GetWellKnown() == t2.GetWellKnown() + case types.BoolKind, types.BytesKind, types.DoubleKind, types.IntKind, types.StringKind, types.UintKind, + types.AnyKind, types.DurationKind, types.TimestampKind, + types.StructKind: + return t1.IsAssignableType(t2) + case types.TypeKind: + return kind2 == types.TypeKind + case types.OpaqueKind, types.ListKind, types.MapKind: + return t1.Kind() == t2.Kind() && t1.TypeName() == t2.TypeName() && + internalIsAssignableList(m, t1.Parameters(), t2.Parameters()) default: return false } @@ -274,16 +155,16 @@ func internalIsAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) bool { // - t2 has a type substitution (t2sub) equal to t1 // - t2 has a type substitution (t2sub) assignable to t1 // - t2 does not occur within t1. -func isValidTypeSubstitution(m *mapping, t1, t2 *exprpb.Type) (valid, hasSub bool) { +func isValidTypeSubstitution(m *mapping, t1, t2 *types.Type) (valid, hasSub bool) { // Early return if the t1 and t2 are the same instance. - kind1, kind2 := kindOf(t1), kindOf(t2) - if kind1 == kind2 && (t1 == t2 || proto.Equal(t1, t2)) { + kind1, kind2 := t1.Kind(), t2.Kind() + if kind1 == kind2 && t1.IsExactType(t2) { return true, true } if t2Sub, found := m.find(t2); found { // Early return if t1 and t2Sub are the same instance as otherwise the mapping // might mark a type as being a subtitution for itself. - if kind1 == kindOf(t2Sub) && (t1 == t2Sub || proto.Equal(t1, t2Sub)) { + if kind1 == t2Sub.Kind() && t1.IsExactType(t2Sub) { return true, true } // If the types are compatible, pick the more general type and return true @@ -305,28 +186,10 @@ func isValidTypeSubstitution(m *mapping, t1, t2 *exprpb.Type) (valid, hasSub boo return false, false } -// internalIsAssignableAbstractType returns true if the abstract type names agree and all type -// parameters are assignable. -func internalIsAssignableAbstractType(m *mapping, a1 *exprpb.Type_AbstractType, a2 *exprpb.Type_AbstractType) bool { - return a1.GetName() == a2.GetName() && - internalIsAssignableList(m, a1.GetParameterTypes(), a2.GetParameterTypes()) -} - -// internalIsAssignableFunction returns true if the function return type and arg types are -// assignable. -func internalIsAssignableFunction(m *mapping, f1 *exprpb.Type_FunctionType, f2 *exprpb.Type_FunctionType) bool { - f1ArgTypes := flattenFunctionTypes(f1) - f2ArgTypes := flattenFunctionTypes(f2) - if internalIsAssignableList(m, f1ArgTypes, f2ArgTypes) { - return true - } - return false -} - // internalIsAssignableList returns true if the element types at each index in the list are // assignable from l1[i] to l2[i]. The list lengths must also agree for the lists to be // assignable. -func internalIsAssignableList(m *mapping, l1 []*exprpb.Type, l2 []*exprpb.Type) bool { +func internalIsAssignableList(m *mapping, l1, l2 []*types.Type) bool { if len(l1) != len(l2) { return false } @@ -338,41 +201,22 @@ func internalIsAssignableList(m *mapping, l1 []*exprpb.Type, l2 []*exprpb.Type) return true } -// internalIsAssignableMap returns true if map m1 may be assigned to map m2. -func internalIsAssignableMap(m *mapping, m1 *exprpb.Type_MapType, m2 *exprpb.Type_MapType) bool { - if internalIsAssignableList(m, - []*exprpb.Type{m1.GetKeyType(), m1.GetValueType()}, - []*exprpb.Type{m2.GetKeyType(), m2.GetValueType()}) { - return true - } - return false -} - // internalIsAssignableNull returns true if the type is nullable. -func internalIsAssignableNull(t *exprpb.Type) bool { - switch kindOf(t) { - case kindAbstract, kindObject, kindNull, kindWellKnown, kindWrapper: - return true - default: - return false - } +func internalIsAssignableNull(t *types.Type) bool { + return isLegacyNullable(t) || t.IsAssignableType(types.NullType) } -// internalIsAssignablePrimitive returns true if the target type is the same or if it is a wrapper -// for the primitive type. -func internalIsAssignablePrimitive(p exprpb.Type_PrimitiveType, target *exprpb.Type) bool { - switch kindOf(target) { - case kindPrimitive: - return p == target.GetPrimitive() - case kindWrapper: - return p == target.GetWrapper() - default: - return false +// isLegacyNullable preserves the null-ness compatibility of the original type-checker implementation. +func isLegacyNullable(t *types.Type) bool { + switch t.Kind() { + case types.OpaqueKind, types.StructKind, types.AnyKind, types.DurationKind, types.TimestampKind: + return true } + return false } // isAssignable returns an updated type substitution mapping if t1 is assignable to t2. -func isAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) *mapping { +func isAssignable(m *mapping, t1, t2 *types.Type) *mapping { mCopy := m.copy() if internalIsAssignable(mCopy, t1, t2) { return mCopy @@ -381,7 +225,7 @@ func isAssignable(m *mapping, t1 *exprpb.Type, t2 *exprpb.Type) *mapping { } // isAssignableList returns an updated type substitution mapping if l1 is assignable to l2. -func isAssignableList(m *mapping, l1 []*exprpb.Type, l2 []*exprpb.Type) *mapping { +func isAssignableList(m *mapping, l1, l2 []*types.Type) *mapping { mCopy := m.copy() if internalIsAssignableList(mCopy, l1, l2) { return mCopy @@ -389,44 +233,8 @@ func isAssignableList(m *mapping, l1 []*exprpb.Type, l2 []*exprpb.Type) *mapping return nil } -// kindOf returns the kind of the type as defined in the checked.proto. -func kindOf(t *exprpb.Type) int { - if t == nil || t.TypeKind == nil { - return kindUnknown - } - switch t.GetTypeKind().(type) { - case *exprpb.Type_Error: - return kindError - case *exprpb.Type_Function: - return kindFunction - case *exprpb.Type_Dyn: - return kindDyn - case *exprpb.Type_Primitive: - return kindPrimitive - case *exprpb.Type_WellKnown: - return kindWellKnown - case *exprpb.Type_Wrapper: - return kindWrapper - case *exprpb.Type_Null: - return kindNull - case *exprpb.Type_Type: - return kindType - case *exprpb.Type_ListType_: - return kindList - case *exprpb.Type_MapType_: - return kindMap - case *exprpb.Type_MessageType: - return kindObject - case *exprpb.Type_TypeParam: - return kindTypeParam - case *exprpb.Type_AbstractType_: - return kindAbstract - } - return kindUnknown -} - // mostGeneral returns the more general of two types which are known to unify. -func mostGeneral(t1 *exprpb.Type, t2 *exprpb.Type) *exprpb.Type { +func mostGeneral(t1, t2 *types.Type) *types.Type { if isEqualOrLessSpecific(t1, t2) { return t1 } @@ -436,32 +244,25 @@ func mostGeneral(t1 *exprpb.Type, t2 *exprpb.Type) *exprpb.Type { // notReferencedIn checks whether the type doesn't appear directly or transitively within the other // type. This is a standard requirement for type unification, commonly referred to as the "occurs // check". -func notReferencedIn(m *mapping, t *exprpb.Type, withinType *exprpb.Type) bool { - if proto.Equal(t, withinType) { +func notReferencedIn(m *mapping, t, withinType *types.Type) bool { + if t.IsExactType(withinType) { return false } - withinKind := kindOf(withinType) + withinKind := withinType.Kind() switch withinKind { - case kindTypeParam: + case types.TypeParamKind: wtSub, found := m.find(withinType) if !found { return true } return notReferencedIn(m, t, wtSub) - case kindAbstract: - for _, pt := range withinType.GetAbstractType().GetParameterTypes() { + case types.OpaqueKind, types.ListKind, types.MapKind: + for _, pt := range withinType.Parameters() { if !notReferencedIn(m, t, pt) { return false } } return true - case kindList: - return notReferencedIn(m, t, withinType.GetListType().GetElemType()) - case kindMap: - mt := withinType.GetMapType() - return notReferencedIn(m, t, mt.GetKeyType()) && notReferencedIn(m, t, mt.GetValueType()) - case kindWrapper: - return notReferencedIn(m, t, decls.NewPrimitiveType(withinType.GetWrapper())) default: return true } @@ -469,39 +270,25 @@ func notReferencedIn(m *mapping, t *exprpb.Type, withinType *exprpb.Type) bool { // substitute replaces all direct and indirect occurrences of bound type parameters. Unbound type // parameters are replaced by DYN if typeParamToDyn is true. -func substitute(m *mapping, t *exprpb.Type, typeParamToDyn bool) *exprpb.Type { +func substitute(m *mapping, t *types.Type, typeParamToDyn bool) *types.Type { if tSub, found := m.find(t); found { return substitute(m, tSub, typeParamToDyn) } - kind := kindOf(t) - if typeParamToDyn && kind == kindTypeParam { - return decls.Dyn + kind := t.Kind() + if typeParamToDyn && kind == types.TypeParamKind { + return types.DynType } switch kind { - case kindAbstract: - at := t.GetAbstractType() - params := make([]*exprpb.Type, len(at.GetParameterTypes())) - for i, p := range at.GetParameterTypes() { - params[i] = substitute(m, p, typeParamToDyn) - } - return decls.NewAbstractType(at.GetName(), params...) - case kindFunction: - fn := t.GetFunction() - rt := substitute(m, fn.ResultType, typeParamToDyn) - args := make([]*exprpb.Type, len(fn.GetArgTypes())) - for i, a := range fn.ArgTypes { - args[i] = substitute(m, a, typeParamToDyn) - } - return decls.NewFunctionType(rt, args...) - case kindList: - return decls.NewListType(substitute(m, t.GetListType().GetElemType(), typeParamToDyn)) - case kindMap: - mt := t.GetMapType() - return decls.NewMapType(substitute(m, mt.GetKeyType(), typeParamToDyn), - substitute(m, mt.GetValueType(), typeParamToDyn)) - case kindType: - if t.GetType() != nil { - return decls.NewTypeType(substitute(m, t.GetType(), typeParamToDyn)) + case types.OpaqueKind: + return types.NewOpaqueType(t.TypeName(), substituteParams(m, t.Parameters(), typeParamToDyn)...) + case types.ListKind: + return types.NewListType(substitute(m, t.Parameters()[0], typeParamToDyn)) + case types.MapKind: + return types.NewMapType(substitute(m, t.Parameters()[0], typeParamToDyn), + substitute(m, t.Parameters()[1], typeParamToDyn)) + case types.TypeKind: + if len(t.Parameters()) > 0 { + return types.NewTypeTypeWithParam(substitute(m, t.Parameters()[0], typeParamToDyn)) } return t default: @@ -509,21 +296,14 @@ func substitute(m *mapping, t *exprpb.Type, typeParamToDyn bool) *exprpb.Type { } } -func typeKey(t *exprpb.Type) string { - return FormatCheckedType(t) +func substituteParams(m *mapping, typeParams []*types.Type, typeParamToDyn bool) []*types.Type { + subParams := make([]*types.Type, len(typeParams)) + for i, tp := range typeParams { + subParams[i] = substitute(m, tp, typeParamToDyn) + } + return subParams } -// flattenFunctionTypes takes a function with arg types T1, T2, ..., TN and result type TR -// and returns a slice containing {T1, T2, ..., TN, TR}. -func flattenFunctionTypes(f *exprpb.Type_FunctionType) []*exprpb.Type { - argTypes := f.GetArgTypes() - if len(argTypes) == 0 { - return []*exprpb.Type{f.GetResultType()} - } - flattend := make([]*exprpb.Type, len(argTypes)+1, len(argTypes)+1) - for i, at := range argTypes { - flattend[i] = at - } - flattend[len(argTypes)] = f.GetResultType() - return flattend +func newFunctionType(resultType *types.Type, argTypes ...*types.Type) *types.Type { + return types.NewOpaqueType("function", append([]*types.Type{resultType}, argTypes...)...) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/BUILD.bazel new file mode 100644 index 000000000000..7269cdff5f7f --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/BUILD.bazel @@ -0,0 +1,52 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package( + default_visibility = [ + "//cel:__subpackages__", + "//checker:__subpackages__", + "//common:__subpackages__", + "//interpreter:__subpackages__", + ], + licenses = ["notice"], # Apache 2.0 +) + +go_library( + name = "go_default_library", + srcs = [ + "ast.go", + "expr.go", + ], + importpath = "github.com/google/cel-go/common/ast", + deps = [ + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", + "@org_golang_google_protobuf//types/known/structpb:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "ast_test.go", + "expr_test.go", + ], + embed = [ + ":go_default_library", + ], + deps = [ + "//checker:go_default_library", + "//checker/decls:go_default_library", + "//common:go_default_library", + "//common/containers:go_default_library", + "//common/decls:go_default_library", + "//common/overloads:go_default_library", + "//common/stdlib:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "//parser:go_default_library", + "//test/proto3pb:go_default_library", + "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", + ], +) \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/ast.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/ast.go new file mode 100644 index 000000000000..b3c150793a94 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/ast.go @@ -0,0 +1,226 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package ast declares data structures useful for parsed and checked abstract syntax trees +package ast + +import ( + "fmt" + + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + + structpb "google.golang.org/protobuf/types/known/structpb" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +// CheckedAST contains a protobuf expression and source info along with CEL-native type and reference information. +type CheckedAST struct { + Expr *exprpb.Expr + SourceInfo *exprpb.SourceInfo + TypeMap map[int64]*types.Type + ReferenceMap map[int64]*ReferenceInfo +} + +// CheckedASTToCheckedExpr converts a CheckedAST to a CheckedExpr protobouf. +func CheckedASTToCheckedExpr(ast *CheckedAST) (*exprpb.CheckedExpr, error) { + refMap := make(map[int64]*exprpb.Reference, len(ast.ReferenceMap)) + for id, ref := range ast.ReferenceMap { + r, err := ReferenceInfoToReferenceExpr(ref) + if err != nil { + return nil, err + } + refMap[id] = r + } + typeMap := make(map[int64]*exprpb.Type, len(ast.TypeMap)) + for id, typ := range ast.TypeMap { + t, err := types.TypeToExprType(typ) + if err != nil { + return nil, err + } + typeMap[id] = t + } + return &exprpb.CheckedExpr{ + Expr: ast.Expr, + SourceInfo: ast.SourceInfo, + ReferenceMap: refMap, + TypeMap: typeMap, + }, nil +} + +// CheckedExprToCheckedAST converts a CheckedExpr protobuf to a CheckedAST instance. +func CheckedExprToCheckedAST(checked *exprpb.CheckedExpr) (*CheckedAST, error) { + refMap := make(map[int64]*ReferenceInfo, len(checked.GetReferenceMap())) + for id, ref := range checked.GetReferenceMap() { + r, err := ReferenceExprToReferenceInfo(ref) + if err != nil { + return nil, err + } + refMap[id] = r + } + typeMap := make(map[int64]*types.Type, len(checked.GetTypeMap())) + for id, typ := range checked.GetTypeMap() { + t, err := types.ExprTypeToType(typ) + if err != nil { + return nil, err + } + typeMap[id] = t + } + return &CheckedAST{ + Expr: checked.GetExpr(), + SourceInfo: checked.GetSourceInfo(), + ReferenceMap: refMap, + TypeMap: typeMap, + }, nil +} + +// ReferenceInfo contains a CEL native representation of an identifier reference which may refer to +// either a qualified identifier name, a set of overload ids, or a constant value from an enum. +type ReferenceInfo struct { + Name string + OverloadIDs []string + Value ref.Val +} + +// NewIdentReference creates a ReferenceInfo instance for an identifier with an optional constant value. +func NewIdentReference(name string, value ref.Val) *ReferenceInfo { + return &ReferenceInfo{Name: name, Value: value} +} + +// NewFunctionReference creates a ReferenceInfo instance for a set of function overloads. +func NewFunctionReference(overloads ...string) *ReferenceInfo { + info := &ReferenceInfo{} + for _, id := range overloads { + info.AddOverload(id) + } + return info +} + +// AddOverload appends a function overload ID to the ReferenceInfo. +func (r *ReferenceInfo) AddOverload(overloadID string) { + for _, id := range r.OverloadIDs { + if id == overloadID { + return + } + } + r.OverloadIDs = append(r.OverloadIDs, overloadID) +} + +// Equals returns whether two references are identical to each other. +func (r *ReferenceInfo) Equals(other *ReferenceInfo) bool { + if r.Name != other.Name { + return false + } + if len(r.OverloadIDs) != len(other.OverloadIDs) { + return false + } + if len(r.OverloadIDs) != 0 { + overloadMap := make(map[string]struct{}, len(r.OverloadIDs)) + for _, id := range r.OverloadIDs { + overloadMap[id] = struct{}{} + } + for _, id := range other.OverloadIDs { + _, found := overloadMap[id] + if !found { + return false + } + } + } + if r.Value == nil && other.Value == nil { + return true + } + if r.Value == nil && other.Value != nil || + r.Value != nil && other.Value == nil || + r.Value.Equal(other.Value) != types.True { + return false + } + return true +} + +// ReferenceInfoToReferenceExpr converts a ReferenceInfo instance to a protobuf Reference suitable for serialization. +func ReferenceInfoToReferenceExpr(info *ReferenceInfo) (*exprpb.Reference, error) { + c, err := ValToConstant(info.Value) + if err != nil { + return nil, err + } + return &exprpb.Reference{ + Name: info.Name, + OverloadId: info.OverloadIDs, + Value: c, + }, nil +} + +// ReferenceExprToReferenceInfo converts a protobuf Reference into a CEL-native ReferenceInfo instance. +func ReferenceExprToReferenceInfo(ref *exprpb.Reference) (*ReferenceInfo, error) { + v, err := ConstantToVal(ref.GetValue()) + if err != nil { + return nil, err + } + return &ReferenceInfo{ + Name: ref.GetName(), + OverloadIDs: ref.GetOverloadId(), + Value: v, + }, nil +} + +// ValToConstant converts a CEL-native ref.Val to a protobuf Constant. +// +// Only simple scalar types are supported by this method. +func ValToConstant(v ref.Val) (*exprpb.Constant, error) { + if v == nil { + return nil, nil + } + switch v.Type() { + case types.BoolType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_BoolValue{BoolValue: v.Value().(bool)}}, nil + case types.BytesType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_BytesValue{BytesValue: v.Value().([]byte)}}, nil + case types.DoubleType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_DoubleValue{DoubleValue: v.Value().(float64)}}, nil + case types.IntType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_Int64Value{Int64Value: v.Value().(int64)}}, nil + case types.NullType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_NullValue{NullValue: structpb.NullValue_NULL_VALUE}}, nil + case types.StringType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_StringValue{StringValue: v.Value().(string)}}, nil + case types.UintType: + return &exprpb.Constant{ConstantKind: &exprpb.Constant_Uint64Value{Uint64Value: v.Value().(uint64)}}, nil + } + return nil, fmt.Errorf("unsupported constant kind: %v", v.Type()) +} + +// ConstantToVal converts a protobuf Constant to a CEL-native ref.Val. +func ConstantToVal(c *exprpb.Constant) (ref.Val, error) { + if c == nil { + return nil, nil + } + switch c.GetConstantKind().(type) { + case *exprpb.Constant_BoolValue: + return types.Bool(c.GetBoolValue()), nil + case *exprpb.Constant_BytesValue: + return types.Bytes(c.GetBytesValue()), nil + case *exprpb.Constant_DoubleValue: + return types.Double(c.GetDoubleValue()), nil + case *exprpb.Constant_Int64Value: + return types.Int(c.GetInt64Value()), nil + case *exprpb.Constant_NullValue: + return types.NullValue, nil + case *exprpb.Constant_StringValue: + return types.String(c.GetStringValue()), nil + case *exprpb.Constant_Uint64Value: + return types.Uint(c.GetUint64Value()), nil + } + return nil, fmt.Errorf("unsupported constant kind: %v", c.GetConstantKind()) +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/expr.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/expr.go new file mode 100644 index 000000000000..b63884a6028a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/ast/expr.go @@ -0,0 +1,709 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ast + +import ( + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +// ExprKind represents the expression node kind. +type ExprKind int + +const ( + // UnspecifiedKind represents an unset expression with no specified properties. + UnspecifiedKind ExprKind = iota + + // LiteralKind represents a primitive scalar literal. + LiteralKind + + // IdentKind represents a simple variable, constant, or type identifier. + IdentKind + + // SelectKind represents a field selection expression. + SelectKind + + // CallKind represents a function call. + CallKind + + // ListKind represents a list literal expression. + ListKind + + // MapKind represents a map literal expression. + MapKind + + // StructKind represents a struct literal expression. + StructKind + + // ComprehensionKind represents a comprehension expression generated by a macro. + ComprehensionKind +) + +// NavigateCheckedAST converts a CheckedAST to a NavigableExpr +func NavigateCheckedAST(ast *CheckedAST) NavigableExpr { + return newNavigableExpr(nil, ast.Expr, ast.TypeMap) +} + +// ExprMatcher takes a NavigableExpr in and indicates whether the value is a match. +// +// This function type should be use with the `Match` and `MatchList` calls. +type ExprMatcher func(NavigableExpr) bool + +// ConstantValueMatcher returns an ExprMatcher which will return true if the input NavigableExpr +// is comprised of all constant values, such as a simple literal or even list and map literal. +func ConstantValueMatcher() ExprMatcher { + return matchIsConstantValue +} + +// KindMatcher returns an ExprMatcher which will return true if the input NavigableExpr.Kind() matches +// the specified `kind`. +func KindMatcher(kind ExprKind) ExprMatcher { + return func(e NavigableExpr) bool { + return e.Kind() == kind + } +} + +// FunctionMatcher returns an ExprMatcher which will match NavigableExpr nodes of CallKind type whose +// function name is equal to `funcName`. +func FunctionMatcher(funcName string) ExprMatcher { + return func(e NavigableExpr) bool { + if e.Kind() != CallKind { + return false + } + return e.AsCall().FunctionName() == funcName + } +} + +// AllMatcher returns true for all descendants of a NavigableExpr, effectively flattening them into a list. +// +// Such a result would work well with subsequent MatchList calls. +func AllMatcher() ExprMatcher { + return func(NavigableExpr) bool { + return true + } +} + +// MatchDescendants takes a NavigableExpr and ExprMatcher and produces a list of NavigableExpr values of the +// descendants which match. +func MatchDescendants(expr NavigableExpr, matcher ExprMatcher) []NavigableExpr { + return matchListInternal([]NavigableExpr{expr}, matcher, true) +} + +// MatchSubset applies an ExprMatcher to a list of NavigableExpr values and their descendants, producing a +// subset of NavigableExpr values which match. +func MatchSubset(exprs []NavigableExpr, matcher ExprMatcher) []NavigableExpr { + visit := make([]NavigableExpr, len(exprs)) + copy(visit, exprs) + return matchListInternal(visit, matcher, false) +} + +func matchListInternal(visit []NavigableExpr, matcher ExprMatcher, visitDescendants bool) []NavigableExpr { + var matched []NavigableExpr + for len(visit) != 0 { + e := visit[0] + if matcher(e) { + matched = append(matched, e) + } + if visitDescendants { + visit = append(visit[1:], e.Children()...) + } else { + visit = visit[1:] + } + } + return matched +} + +func matchIsConstantValue(e NavigableExpr) bool { + if e.Kind() == LiteralKind { + return true + } + if e.Kind() == StructKind || e.Kind() == MapKind || e.Kind() == ListKind { + for _, child := range e.Children() { + if !matchIsConstantValue(child) { + return false + } + } + return true + } + return false +} + +// NavigableExpr represents the base navigable expression value. +// +// Depending on the `Kind()` value, the NavigableExpr may be converted to a concrete expression types +// as indicated by the `As` methods. +// +// NavigableExpr values and their concrete expression types should be nil-safe. Conversion of an expr +// to the wrong kind should produce a nil value. +type NavigableExpr interface { + // ID of the expression as it appears in the AST + ID() int64 + + // Kind of the expression node. See ExprKind for the valid enum values. + Kind() ExprKind + + // Type of the expression node. + Type() *types.Type + + // Parent returns the parent expression node, if one exists. + Parent() (NavigableExpr, bool) + + // Children returns a list of child expression nodes. + Children() []NavigableExpr + + // ToExpr adapts this NavigableExpr to a protobuf representation. + ToExpr() *exprpb.Expr + + // AsCall adapts the expr into a NavigableCallExpr + // + // The Kind() must be equal to a CallKind for the conversion to be well-defined. + AsCall() NavigableCallExpr + + // AsComprehension adapts the expr into a NavigableComprehensionExpr. + // + // The Kind() must be equal to a ComprehensionKind for the conversion to be well-defined. + AsComprehension() NavigableComprehensionExpr + + // AsIdent adapts the expr into an identifier string. + // + // The Kind() must be equal to an IdentKind for the conversion to be well-defined. + AsIdent() string + + // AsLiteral adapts the expr into a constant ref.Val. + // + // The Kind() must be equal to a LiteralKind for the conversion to be well-defined. + AsLiteral() ref.Val + + // AsList adapts the expr into a NavigableListExpr. + // + // The Kind() must be equal to a ListKind for the conversion to be well-defined. + AsList() NavigableListExpr + + // AsMap adapts the expr into a NavigableMapExpr. + // + // The Kind() must be equal to a MapKind for the conversion to be well-defined. + AsMap() NavigableMapExpr + + // AsSelect adapts the expr into a NavigableSelectExpr. + // + // The Kind() must be equal to a SelectKind for the conversion to be well-defined. + AsSelect() NavigableSelectExpr + + // AsStruct adapts the expr into a NavigableStructExpr. + // + // The Kind() must be equal to a StructKind for the conversion to be well-defined. + AsStruct() NavigableStructExpr + + // marker interface method + isNavigable() +} + +// NavigableCallExpr defines an interface for inspecting a function call and its arugments. +type NavigableCallExpr interface { + // FunctionName returns the name of the function. + FunctionName() string + + // Target returns the target of the expression if one is present. + Target() NavigableExpr + + // Args returns the list of call arguments, excluding the target. + Args() []NavigableExpr + + // ReturnType returns the result type of the call. + ReturnType() *types.Type + + // marker interface method + isNavigable() +} + +// NavigableListExpr defines an interface for inspecting a list literal expression. +type NavigableListExpr interface { + // Elements returns the list elements as navigable expressions. + Elements() []NavigableExpr + + // OptionalIndicies returns the list of optional indices in the list literal. + OptionalIndices() []int32 + + // Size returns the number of elements in the list. + Size() int + + // marker interface method + isNavigable() +} + +// NavigableSelectExpr defines an interface for inspecting a select expression. +type NavigableSelectExpr interface { + // Operand returns the selection operand expression. + Operand() NavigableExpr + + // FieldName returns the field name being selected from the operand. + FieldName() string + + // IsTestOnly indicates whether the select expression is a presence test generated by a macro. + IsTestOnly() bool + + // marker interface method + isNavigable() +} + +// NavigableMapExpr defines an interface for inspecting a map expression. +type NavigableMapExpr interface { + // Entries returns the map key value pairs as NavigableEntry values. + Entries() []NavigableEntry + + // Size returns the number of entries in the map. + Size() int + + // marker interface method + isNavigable() +} + +// NavigableEntry defines an interface for inspecting a map entry. +type NavigableEntry interface { + // Key returns the map entry key expression. + Key() NavigableExpr + + // Value returns the map entry value expression. + Value() NavigableExpr + + // IsOptional returns whether the entry is optional. + IsOptional() bool + + // marker interface method + isNavigable() +} + +// NavigableStructExpr defines an interfaces for inspecting a struct and its field initializers. +type NavigableStructExpr interface { + // TypeName returns the struct type name. + TypeName() string + + // Fields returns the set of field initializers in the struct expression as NavigableField values. + Fields() []NavigableField + + // marker interface method + isNavigable() +} + +// NavigableField defines an interface for inspecting a struct field initialization. +type NavigableField interface { + // FieldName returns the name of the field. + FieldName() string + + // Value returns the field initialization expression. + Value() NavigableExpr + + // IsOptional returns whether the field is optional. + IsOptional() bool + + // marker interface method + isNavigable() +} + +// NavigableComprehensionExpr defines an interface for inspecting a comprehension expression. +type NavigableComprehensionExpr interface { + // IterRange returns the iteration range expression. + IterRange() NavigableExpr + + // IterVar returns the iteration variable name. + IterVar() string + + // AccuVar returns the accumulation variable name. + AccuVar() string + + // AccuInit returns the accumulation variable initialization expression. + AccuInit() NavigableExpr + + // LoopCondition returns the loop condition expression. + LoopCondition() NavigableExpr + + // LoopStep returns the loop step expression. + LoopStep() NavigableExpr + + // Result returns the comprehension result expression. + Result() NavigableExpr + + // marker interface method + isNavigable() +} + +func newNavigableExpr(parent NavigableExpr, expr *exprpb.Expr, typeMap map[int64]*types.Type) NavigableExpr { + kind, factory := kindOf(expr) + nav := &navigableExprImpl{ + parent: parent, + kind: kind, + expr: expr, + typeMap: typeMap, + createChildren: factory, + } + return nav +} + +type navigableExprImpl struct { + parent NavigableExpr + kind ExprKind + expr *exprpb.Expr + typeMap map[int64]*types.Type + createChildren childFactory +} + +func (nav *navigableExprImpl) ID() int64 { + return nav.ToExpr().GetId() +} + +func (nav *navigableExprImpl) Kind() ExprKind { + return nav.kind +} + +func (nav *navigableExprImpl) Type() *types.Type { + if t, found := nav.typeMap[nav.ID()]; found { + return t + } + return types.DynType +} + +func (nav *navigableExprImpl) Parent() (NavigableExpr, bool) { + if nav.parent != nil { + return nav.parent, true + } + return nil, false +} + +func (nav *navigableExprImpl) Children() []NavigableExpr { + return nav.createChildren(nav) +} + +func (nav *navigableExprImpl) ToExpr() *exprpb.Expr { + return nav.expr +} + +func (nav *navigableExprImpl) AsCall() NavigableCallExpr { + return navigableCallImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) AsComprehension() NavigableComprehensionExpr { + return navigableComprehensionImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) AsIdent() string { + return nav.ToExpr().GetIdentExpr().GetName() +} + +func (nav *navigableExprImpl) AsLiteral() ref.Val { + if nav.Kind() != LiteralKind { + return nil + } + val, err := ConstantToVal(nav.ToExpr().GetConstExpr()) + if err != nil { + panic(err) + } + return val +} + +func (nav *navigableExprImpl) AsList() NavigableListExpr { + return navigableListImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) AsMap() NavigableMapExpr { + return navigableMapImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) AsSelect() NavigableSelectExpr { + return navigableSelectImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) AsStruct() NavigableStructExpr { + return navigableStructImpl{navigableExprImpl: nav} +} + +func (nav *navigableExprImpl) createChild(e *exprpb.Expr) NavigableExpr { + return newNavigableExpr(nav, e, nav.typeMap) +} + +func (nav *navigableExprImpl) isNavigable() {} + +type navigableCallImpl struct { + *navigableExprImpl +} + +func (call navigableCallImpl) FunctionName() string { + return call.ToExpr().GetCallExpr().GetFunction() +} + +func (call navigableCallImpl) Target() NavigableExpr { + t := call.ToExpr().GetCallExpr().GetTarget() + if t != nil { + return call.createChild(t) + } + return nil +} + +func (call navigableCallImpl) Args() []NavigableExpr { + args := call.ToExpr().GetCallExpr().GetArgs() + navArgs := make([]NavigableExpr, len(args)) + for i, a := range args { + navArgs[i] = call.createChild(a) + } + return navArgs +} + +func (call navigableCallImpl) ReturnType() *types.Type { + return call.Type() +} + +type navigableComprehensionImpl struct { + *navigableExprImpl +} + +func (comp navigableComprehensionImpl) IterRange() NavigableExpr { + return comp.createChild(comp.ToExpr().GetComprehensionExpr().GetIterRange()) +} + +func (comp navigableComprehensionImpl) IterVar() string { + return comp.ToExpr().GetComprehensionExpr().GetIterVar() +} + +func (comp navigableComprehensionImpl) AccuVar() string { + return comp.ToExpr().GetComprehensionExpr().GetAccuVar() +} + +func (comp navigableComprehensionImpl) AccuInit() NavigableExpr { + return comp.createChild(comp.ToExpr().GetComprehensionExpr().GetAccuInit()) +} + +func (comp navigableComprehensionImpl) LoopCondition() NavigableExpr { + return comp.createChild(comp.ToExpr().GetComprehensionExpr().GetLoopCondition()) +} + +func (comp navigableComprehensionImpl) LoopStep() NavigableExpr { + return comp.createChild(comp.ToExpr().GetComprehensionExpr().GetLoopStep()) +} + +func (comp navigableComprehensionImpl) Result() NavigableExpr { + return comp.createChild(comp.ToExpr().GetComprehensionExpr().GetResult()) +} + +type navigableListImpl struct { + *navigableExprImpl +} + +func (l navigableListImpl) Elements() []NavigableExpr { + return l.Children() +} + +func (l navigableListImpl) OptionalIndices() []int32 { + return l.ToExpr().GetListExpr().GetOptionalIndices() +} + +func (l navigableListImpl) Size() int { + return len(l.ToExpr().GetListExpr().GetElements()) +} + +type navigableMapImpl struct { + *navigableExprImpl +} + +func (m navigableMapImpl) Entries() []NavigableEntry { + mapExpr := m.ToExpr().GetStructExpr() + entries := make([]NavigableEntry, len(mapExpr.GetEntries())) + for i, e := range mapExpr.GetEntries() { + entries[i] = navigableEntryImpl{ + key: m.createChild(e.GetMapKey()), + val: m.createChild(e.GetValue()), + isOpt: e.GetOptionalEntry(), + } + } + return entries +} + +func (m navigableMapImpl) Size() int { + return len(m.ToExpr().GetStructExpr().GetEntries()) +} + +type navigableEntryImpl struct { + key NavigableExpr + val NavigableExpr + isOpt bool +} + +func (e navigableEntryImpl) Key() NavigableExpr { + return e.key +} + +func (e navigableEntryImpl) Value() NavigableExpr { + return e.val +} + +func (e navigableEntryImpl) IsOptional() bool { + return e.isOpt +} + +func (e navigableEntryImpl) isNavigable() {} + +type navigableSelectImpl struct { + *navigableExprImpl +} + +func (sel navigableSelectImpl) FieldName() string { + return sel.ToExpr().GetSelectExpr().GetField() +} + +func (sel navigableSelectImpl) IsTestOnly() bool { + return sel.ToExpr().GetSelectExpr().GetTestOnly() +} + +func (sel navigableSelectImpl) Operand() NavigableExpr { + return sel.createChild(sel.ToExpr().GetSelectExpr().GetOperand()) +} + +type navigableStructImpl struct { + *navigableExprImpl +} + +func (s navigableStructImpl) TypeName() string { + return s.ToExpr().GetStructExpr().GetMessageName() +} + +func (s navigableStructImpl) Fields() []NavigableField { + fieldInits := s.ToExpr().GetStructExpr().GetEntries() + fields := make([]NavigableField, len(fieldInits)) + for i, f := range fieldInits { + fields[i] = navigableFieldImpl{ + name: f.GetFieldKey(), + val: s.createChild(f.GetValue()), + isOpt: f.GetOptionalEntry(), + } + } + return fields +} + +type navigableFieldImpl struct { + name string + val NavigableExpr + isOpt bool +} + +func (f navigableFieldImpl) FieldName() string { + return f.name +} + +func (f navigableFieldImpl) Value() NavigableExpr { + return f.val +} + +func (f navigableFieldImpl) IsOptional() bool { + return f.isOpt +} + +func (f navigableFieldImpl) isNavigable() {} + +func kindOf(expr *exprpb.Expr) (ExprKind, childFactory) { + switch expr.GetExprKind().(type) { + case *exprpb.Expr_ConstExpr: + return LiteralKind, noopFactory + case *exprpb.Expr_IdentExpr: + return IdentKind, noopFactory + case *exprpb.Expr_SelectExpr: + return SelectKind, selectFactory + case *exprpb.Expr_CallExpr: + return CallKind, callArgFactory + case *exprpb.Expr_ListExpr: + return ListKind, listElemFactory + case *exprpb.Expr_StructExpr: + if expr.GetStructExpr().GetMessageName() != "" { + return StructKind, structEntryFactory + } + return MapKind, mapEntryFactory + case *exprpb.Expr_ComprehensionExpr: + return ComprehensionKind, comprehensionFactory + default: + return UnspecifiedKind, noopFactory + } +} + +type childFactory func(*navigableExprImpl) []NavigableExpr + +func noopFactory(*navigableExprImpl) []NavigableExpr { + return nil +} + +func selectFactory(nav *navigableExprImpl) []NavigableExpr { + return []NavigableExpr{ + nav.createChild(nav.ToExpr().GetSelectExpr().GetOperand()), + } +} + +func callArgFactory(nav *navigableExprImpl) []NavigableExpr { + call := nav.ToExpr().GetCallExpr() + argCount := len(call.GetArgs()) + if call.GetTarget() != nil { + argCount++ + } + navExprs := make([]NavigableExpr, argCount) + i := 0 + if call.GetTarget() != nil { + navExprs[i] = nav.createChild(call.GetTarget()) + i++ + } + for _, arg := range call.GetArgs() { + navExprs[i] = nav.createChild(arg) + i++ + } + return navExprs +} + +func listElemFactory(nav *navigableExprImpl) []NavigableExpr { + l := nav.ToExpr().GetListExpr() + navExprs := make([]NavigableExpr, len(l.GetElements())) + for i, e := range l.GetElements() { + navExprs[i] = nav.createChild(e) + } + return navExprs +} + +func structEntryFactory(nav *navigableExprImpl) []NavigableExpr { + s := nav.ToExpr().GetStructExpr() + entries := make([]NavigableExpr, len(s.GetEntries())) + for i, e := range s.GetEntries() { + + entries[i] = nav.createChild(e.GetValue()) + } + return entries +} + +func mapEntryFactory(nav *navigableExprImpl) []NavigableExpr { + s := nav.ToExpr().GetStructExpr() + entries := make([]NavigableExpr, len(s.GetEntries())*2) + j := 0 + for _, e := range s.GetEntries() { + entries[j] = nav.createChild(e.GetMapKey()) + entries[j+1] = nav.createChild(e.GetValue()) + j += 2 + } + return entries +} + +func comprehensionFactory(nav *navigableExprImpl) []NavigableExpr { + compre := nav.ToExpr().GetComprehensionExpr() + return []NavigableExpr{ + nav.createChild(compre.GetIterRange()), + nav.createChild(compre.GetAccuInit()), + nav.createChild(compre.GetLoopCondition()), + nav.createChild(compre.GetLoopStep()), + nav.createChild(compre.GetResult()), + } +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/BUILD.bazel new file mode 100644 index 000000000000..17791dce6a0d --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/BUILD.bazel @@ -0,0 +1,39 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], # Apache 2.0 +) + +go_library( + name = "go_default_library", + srcs = [ + "decls.go", + ], + importpath = "github.com/google/cel-go/common/decls", + deps = [ + "//checker/decls:go_default_library", + "//common/functions:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "//common/types/traits:go_default_library", + "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "decls_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//checker/decls:go_default_library", + "//common/overloads:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "//common/types/traits:go_default_library", + "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", + ], +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/decls.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/decls.go new file mode 100644 index 000000000000..734ebe57e526 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/decls/decls.go @@ -0,0 +1,844 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package decls contains function and variable declaration structs and helper methods. +package decls + +import ( + "fmt" + "strings" + + chkdecls "github.com/google/cel-go/checker/decls" + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +// NewFunction creates a new function declaration with a set of function options to configure overloads +// and function definitions (implementations). +// +// Functions are checked for name collisions and singleton redefinition. +func NewFunction(name string, opts ...FunctionOpt) (*FunctionDecl, error) { + fn := &FunctionDecl{ + name: name, + overloads: map[string]*OverloadDecl{}, + overloadOrdinals: []string{}, + } + var err error + for _, opt := range opts { + fn, err = opt(fn) + if err != nil { + return nil, err + } + } + if len(fn.overloads) == 0 { + return nil, fmt.Errorf("function %s must have at least one overload", name) + } + return fn, nil +} + +// FunctionDecl defines a function name, overload set, and optionally a singleton definition for all +// overload instances. +type FunctionDecl struct { + name string + + // overloads associated with the function name. + overloads map[string]*OverloadDecl + + // singleton implementation of the function for all overloads. + // + // If this option is set, an error will occur if any overloads specify a per-overload implementation + // or if another function with the same name attempts to redefine the singleton. + singleton *functions.Overload + + // disableTypeGuards is a performance optimization to disable detailed runtime type checks which could + // add overhead on common operations. Setting this option true leaves error checks and argument checks + // intact. + disableTypeGuards bool + + // state indicates that the binding should be provided as a declaration, as a runtime binding, or both. + state declarationState + + // overloadOrdinals indicates the order in which the overload was declared. + overloadOrdinals []string +} + +type declarationState int + +const ( + declarationStateUnset declarationState = iota + declarationDisabled + declarationEnabled +) + +// Name returns the function name in human-readable terms, e.g. 'contains' of 'math.least' +func (f *FunctionDecl) Name() string { + if f == nil { + return "" + } + return f.name +} + +// IsDeclarationDisabled indicates that the function implementation should be added to the dispatcher, but the +// declaration should not be exposed for use in expressions. +func (f *FunctionDecl) IsDeclarationDisabled() bool { + return f.state == declarationDisabled +} + +// Merge combines an existing function declaration with another. +// +// If a function is extended, by say adding new overloads to an existing function, then it is merged with the +// prior definition of the function at which point its overloads must not collide with pre-existing overloads +// and its bindings (singleton, or per-overload) must not conflict with previous definitions either. +func (f *FunctionDecl) Merge(other *FunctionDecl) (*FunctionDecl, error) { + if f == other { + return f, nil + } + if f.Name() != other.Name() { + return nil, fmt.Errorf("cannot merge unrelated functions. %s and %s", f.Name(), other.Name()) + } + merged := &FunctionDecl{ + name: f.Name(), + overloads: make(map[string]*OverloadDecl, len(f.overloads)), + singleton: f.singleton, + overloadOrdinals: make([]string, len(f.overloads)), + // if one function is expecting type-guards and the other is not, then they + // must not be disabled. + disableTypeGuards: f.disableTypeGuards && other.disableTypeGuards, + // default to the current functions declaration state. + state: f.state, + } + // If the other state indicates that the declaration should be explicitly enabled or + // disabled, then update the merged state with the most recent value. + if other.state != declarationStateUnset { + merged.state = other.state + } + // baseline copy of the overloads and their ordinals + copy(merged.overloadOrdinals, f.overloadOrdinals) + for oID, o := range f.overloads { + merged.overloads[oID] = o + } + // overloads and their ordinals are added from the left + for _, oID := range other.overloadOrdinals { + o := other.overloads[oID] + err := merged.AddOverload(o) + if err != nil { + return nil, fmt.Errorf("function declaration merge failed: %v", err) + } + } + if other.singleton != nil { + if merged.singleton != nil && merged.singleton != other.singleton { + return nil, fmt.Errorf("function already has a singleton binding: %s", f.Name()) + } + merged.singleton = other.singleton + } + return merged, nil +} + +// AddOverload ensures that the new overload does not collide with an existing overload signature; +// however, if the function signatures are identical, the implementation may be rewritten as its +// difficult to compare functions by object identity. +func (f *FunctionDecl) AddOverload(overload *OverloadDecl) error { + if f == nil { + return fmt.Errorf("nil function cannot add overload: %s", overload.ID()) + } + for oID, o := range f.overloads { + if oID != overload.ID() && o.SignatureOverlaps(overload) { + return fmt.Errorf("overload signature collision in function %s: %s collides with %s", f.Name(), oID, overload.ID()) + } + if oID == overload.ID() { + if o.SignatureEquals(overload) && o.IsNonStrict() == overload.IsNonStrict() { + // Allow redefinition of an overload implementation so long as the signatures match. + f.overloads[oID] = overload + return nil + } + return fmt.Errorf("overload redefinition in function. %s: %s has multiple definitions", f.Name(), oID) + } + } + f.overloadOrdinals = append(f.overloadOrdinals, overload.ID()) + f.overloads[overload.ID()] = overload + return nil +} + +// OverloadDecls returns the overload declarations in the order in which they were declared. +func (f *FunctionDecl) OverloadDecls() []*OverloadDecl { + if f == nil { + return []*OverloadDecl{} + } + overloads := make([]*OverloadDecl, 0, len(f.overloads)) + for _, oID := range f.overloadOrdinals { + overloads = append(overloads, f.overloads[oID]) + } + return overloads +} + +// Bindings produces a set of function bindings, if any are defined. +func (f *FunctionDecl) Bindings() ([]*functions.Overload, error) { + if f == nil { + return []*functions.Overload{}, nil + } + overloads := []*functions.Overload{} + nonStrict := false + for _, oID := range f.overloadOrdinals { + o := f.overloads[oID] + if o.hasBinding() { + overload := &functions.Overload{ + Operator: o.ID(), + Unary: o.guardedUnaryOp(f.Name(), f.disableTypeGuards), + Binary: o.guardedBinaryOp(f.Name(), f.disableTypeGuards), + Function: o.guardedFunctionOp(f.Name(), f.disableTypeGuards), + OperandTrait: o.OperandTrait(), + NonStrict: o.IsNonStrict(), + } + overloads = append(overloads, overload) + nonStrict = nonStrict || o.IsNonStrict() + } + } + if f.singleton != nil { + if len(overloads) != 0 { + return nil, fmt.Errorf("singleton function incompatible with specialized overloads: %s", f.Name()) + } + overloads = []*functions.Overload{ + { + Operator: f.Name(), + Unary: f.singleton.Unary, + Binary: f.singleton.Binary, + Function: f.singleton.Function, + OperandTrait: f.singleton.OperandTrait, + }, + } + // fall-through to return single overload case. + } + if len(overloads) == 0 { + return overloads, nil + } + // Single overload. Replicate an entry for it using the function name as well. + if len(overloads) == 1 { + if overloads[0].Operator == f.Name() { + return overloads, nil + } + return append(overloads, &functions.Overload{ + Operator: f.Name(), + Unary: overloads[0].Unary, + Binary: overloads[0].Binary, + Function: overloads[0].Function, + NonStrict: overloads[0].NonStrict, + OperandTrait: overloads[0].OperandTrait, + }), nil + } + // All of the defined overloads are wrapped into a top-level function which + // performs dynamic dispatch to the proper overload based on the argument types. + bindings := append([]*functions.Overload{}, overloads...) + funcDispatch := func(args ...ref.Val) ref.Val { + for _, oID := range f.overloadOrdinals { + o := f.overloads[oID] + // During dynamic dispatch over multiple functions, signature agreement checks + // are preserved in order to assist with the function resolution step. + switch len(args) { + case 1: + if o.unaryOp != nil && o.matchesRuntimeSignature( /* disableTypeGuards=*/ false, args...) { + return o.unaryOp(args[0]) + } + case 2: + if o.binaryOp != nil && o.matchesRuntimeSignature( /* disableTypeGuards=*/ false, args...) { + return o.binaryOp(args[0], args[1]) + } + } + if o.functionOp != nil && o.matchesRuntimeSignature( /* disableTypeGuards=*/ false, args...) { + return o.functionOp(args...) + } + // eventually this will fall through to the noSuchOverload below. + } + return MaybeNoSuchOverload(f.Name(), args...) + } + function := &functions.Overload{ + Operator: f.Name(), + Function: funcDispatch, + NonStrict: nonStrict, + } + return append(bindings, function), nil +} + +// MaybeNoSuchOverload determines whether to propagate an error if one is provided as an argument, or +// to return an unknown set, or to produce a new error for a missing function signature. +func MaybeNoSuchOverload(funcName string, args ...ref.Val) ref.Val { + argTypes := make([]string, len(args)) + var unk *types.Unknown = nil + for i, arg := range args { + if types.IsError(arg) { + return arg + } + if types.IsUnknown(arg) { + unk = types.MergeUnknowns(arg.(*types.Unknown), unk) + } + argTypes[i] = arg.Type().TypeName() + } + if unk != nil { + return unk + } + signature := strings.Join(argTypes, ", ") + return types.NewErr("no such overload: %s(%s)", funcName, signature) +} + +// FunctionOpt defines a functional option for mutating a function declaration. +type FunctionOpt func(*FunctionDecl) (*FunctionDecl, error) + +// DisableTypeGuards disables automatically generated function invocation guards on direct overload calls. +// Type guards remain on during dynamic dispatch for parsed-only expressions. +func DisableTypeGuards(value bool) FunctionOpt { + return func(fn *FunctionDecl) (*FunctionDecl, error) { + fn.disableTypeGuards = value + return fn, nil + } +} + +// DisableDeclaration indicates that the function declaration should be disabled, but the runtime function +// binding should be provided. Marking a function as runtime-only is a safe way to manage deprecations +// of function declarations while still preserving the runtime behavior for previously compiled expressions. +func DisableDeclaration(value bool) FunctionOpt { + return func(fn *FunctionDecl) (*FunctionDecl, error) { + if value { + fn.state = declarationDisabled + } else { + fn.state = declarationEnabled + } + return fn, nil + } +} + +// SingletonUnaryBinding creates a singleton function definition to be used for all function overloads. +// +// Note, this approach works well if operand is expected to have a specific trait which it implements, +// e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. +func SingletonUnaryBinding(fn functions.UnaryOp, traits ...int) FunctionOpt { + trait := 0 + for _, t := range traits { + trait = trait | t + } + return func(f *FunctionDecl) (*FunctionDecl, error) { + if f.singleton != nil { + return nil, fmt.Errorf("function already has a singleton binding: %s", f.Name()) + } + f.singleton = &functions.Overload{ + Operator: f.Name(), + Unary: fn, + OperandTrait: trait, + } + return f, nil + } +} + +// SingletonBinaryBinding creates a singleton function definition to be used with all function overloads. +// +// Note, this approach works well if operand is expected to have a specific trait which it implements, +// e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. +func SingletonBinaryBinding(fn functions.BinaryOp, traits ...int) FunctionOpt { + trait := 0 + for _, t := range traits { + trait = trait | t + } + return func(f *FunctionDecl) (*FunctionDecl, error) { + if f.singleton != nil { + return nil, fmt.Errorf("function already has a singleton binding: %s", f.Name()) + } + f.singleton = &functions.Overload{ + Operator: f.Name(), + Binary: fn, + OperandTrait: trait, + } + return f, nil + } +} + +// SingletonFunctionBinding creates a singleton function definition to be used with all function overloads. +// +// Note, this approach works well if operand is expected to have a specific trait which it implements, +// e.g. traits.ContainerType. Otherwise, prefer per-overload function bindings. +func SingletonFunctionBinding(fn functions.FunctionOp, traits ...int) FunctionOpt { + trait := 0 + for _, t := range traits { + trait = trait | t + } + return func(f *FunctionDecl) (*FunctionDecl, error) { + if f.singleton != nil { + return nil, fmt.Errorf("function already has a singleton binding: %s", f.Name()) + } + f.singleton = &functions.Overload{ + Operator: f.Name(), + Function: fn, + OperandTrait: trait, + } + return f, nil + } +} + +// Overload defines a new global overload with an overload id, argument types, and result type. Through the +// use of OverloadOpt options, the overload may also be configured with a binding, an operand trait, and to +// be non-strict. +// +// Note: function bindings should be commonly configured with Overload instances whereas operand traits and +// strict-ness should be rare occurrences. +func Overload(overloadID string, + args []*types.Type, resultType *types.Type, + opts ...OverloadOpt) FunctionOpt { + return newOverload(overloadID, false, args, resultType, opts...) +} + +// MemberOverload defines a new receiver-style overload (or member function) with an overload id, argument types, +// and result type. Through the use of OverloadOpt options, the overload may also be configured with a binding, +// an operand trait, and to be non-strict. +// +// Note: function bindings should be commonly configured with Overload instances whereas operand traits and +// strict-ness should be rare occurrences. +func MemberOverload(overloadID string, + args []*types.Type, resultType *types.Type, + opts ...OverloadOpt) FunctionOpt { + return newOverload(overloadID, true, args, resultType, opts...) +} + +func newOverload(overloadID string, + memberFunction bool, args []*types.Type, resultType *types.Type, + opts ...OverloadOpt) FunctionOpt { + return func(f *FunctionDecl) (*FunctionDecl, error) { + overload, err := newOverloadInternal(overloadID, memberFunction, args, resultType, opts...) + if err != nil { + return nil, err + } + err = f.AddOverload(overload) + if err != nil { + return nil, err + } + return f, nil + } +} + +func newOverloadInternal(overloadID string, + memberFunction bool, args []*types.Type, resultType *types.Type, + opts ...OverloadOpt) (*OverloadDecl, error) { + overload := &OverloadDecl{ + id: overloadID, + argTypes: args, + resultType: resultType, + isMemberFunction: memberFunction, + } + var err error + for _, opt := range opts { + overload, err = opt(overload) + if err != nil { + return nil, err + } + } + return overload, nil +} + +// OverloadDecl contains the definition of a single overload id with a specific signature, and an optional +// implementation. +type OverloadDecl struct { + id string + argTypes []*types.Type + resultType *types.Type + isMemberFunction bool + // nonStrict indicates that the function will accept error and unknown arguments as inputs. + nonStrict bool + // operandTrait indicates whether the member argument should have a specific type-trait. + // + // This is useful for creating overloads which operate on a type-interface rather than a concrete type. + operandTrait int + + // Function implementation options. Optional, but encouraged. + // unaryOp is a function binding that takes a single argument. + unaryOp functions.UnaryOp + // binaryOp is a function binding that takes two arguments. + binaryOp functions.BinaryOp + // functionOp is a catch-all for zero-arity and three-plus arity functions. + functionOp functions.FunctionOp +} + +// ID mirrors the overload signature and provides a unique id which may be referenced within the type-checker +// and interpreter to optimize performance. +// +// The ID format is usually one of two styles: +// global: __ +// member: ___ +func (o *OverloadDecl) ID() string { + if o == nil { + return "" + } + return o.id +} + +// ArgTypes contains the set of argument types expected by the overload. +// +// For member functions ArgTypes[0] represents the member operand type. +func (o *OverloadDecl) ArgTypes() []*types.Type { + if o == nil { + return emptyArgs + } + return o.argTypes +} + +// IsMemberFunction indicates whether the overload is a member function +func (o *OverloadDecl) IsMemberFunction() bool { + if o == nil { + return false + } + return o.isMemberFunction +} + +// IsNonStrict returns whether the overload accepts errors and unknown values as arguments. +func (o *OverloadDecl) IsNonStrict() bool { + if o == nil { + return false + } + return o.nonStrict +} + +// OperandTrait returns the trait mask of the first operand to the overload call, e.g. +// `traits.Indexer` +func (o *OverloadDecl) OperandTrait() int { + if o == nil { + return 0 + } + return o.operandTrait +} + +// ResultType indicates the output type from calling the function. +func (o *OverloadDecl) ResultType() *types.Type { + if o == nil { + // *types.Type is nil-safe + return nil + } + return o.resultType +} + +// TypeParams returns the type parameter names associated with the overload. +func (o *OverloadDecl) TypeParams() []string { + typeParams := map[string]struct{}{} + collectParamNames(typeParams, o.ResultType()) + for _, arg := range o.ArgTypes() { + collectParamNames(typeParams, arg) + } + params := make([]string, 0, len(typeParams)) + for param := range typeParams { + params = append(params, param) + } + return params +} + +// SignatureEquals determines whether the incoming overload declaration signature is equal to the current signature. +// +// Result type, operand trait, and strict-ness are not considered as part of signature equality. +func (o *OverloadDecl) SignatureEquals(other *OverloadDecl) bool { + if o == other { + return true + } + if o.ID() != other.ID() || o.IsMemberFunction() != other.IsMemberFunction() || len(o.ArgTypes()) != len(other.ArgTypes()) { + return false + } + for i, at := range o.ArgTypes() { + oat := other.ArgTypes()[i] + if !at.IsEquivalentType(oat) { + return false + } + } + return o.ResultType().IsEquivalentType(other.ResultType()) +} + +// SignatureOverlaps indicates whether two functions have non-equal, but overloapping function signatures. +// +// For example, list(dyn) collides with list(string) since the 'dyn' type can contain a 'string' type. +func (o *OverloadDecl) SignatureOverlaps(other *OverloadDecl) bool { + if o.IsMemberFunction() != other.IsMemberFunction() || len(o.ArgTypes()) != len(other.ArgTypes()) { + return false + } + argsOverlap := true + for i, argType := range o.ArgTypes() { + otherArgType := other.ArgTypes()[i] + argsOverlap = argsOverlap && + (argType.IsAssignableType(otherArgType) || + otherArgType.IsAssignableType(argType)) + } + return argsOverlap +} + +// hasBinding indicates whether the overload already has a definition. +func (o *OverloadDecl) hasBinding() bool { + return o != nil && (o.unaryOp != nil || o.binaryOp != nil || o.functionOp != nil) +} + +// guardedUnaryOp creates an invocation guard around the provided unary operator, if one is defined. +func (o *OverloadDecl) guardedUnaryOp(funcName string, disableTypeGuards bool) functions.UnaryOp { + if o.unaryOp == nil { + return nil + } + return func(arg ref.Val) ref.Val { + if !o.matchesRuntimeUnarySignature(disableTypeGuards, arg) { + return MaybeNoSuchOverload(funcName, arg) + } + return o.unaryOp(arg) + } +} + +// guardedBinaryOp creates an invocation guard around the provided binary operator, if one is defined. +func (o *OverloadDecl) guardedBinaryOp(funcName string, disableTypeGuards bool) functions.BinaryOp { + if o.binaryOp == nil { + return nil + } + return func(arg1, arg2 ref.Val) ref.Val { + if !o.matchesRuntimeBinarySignature(disableTypeGuards, arg1, arg2) { + return MaybeNoSuchOverload(funcName, arg1, arg2) + } + return o.binaryOp(arg1, arg2) + } +} + +// guardedFunctionOp creates an invocation guard around the provided variadic function binding, if one is provided. +func (o *OverloadDecl) guardedFunctionOp(funcName string, disableTypeGuards bool) functions.FunctionOp { + if o.functionOp == nil { + return nil + } + return func(args ...ref.Val) ref.Val { + if !o.matchesRuntimeSignature(disableTypeGuards, args...) { + return MaybeNoSuchOverload(funcName, args...) + } + return o.functionOp(args...) + } +} + +// matchesRuntimeUnarySignature indicates whether the argument type is runtime assiganble to the overload's expected argument. +func (o *OverloadDecl) matchesRuntimeUnarySignature(disableTypeGuards bool, arg ref.Val) bool { + return matchRuntimeArgType(o.IsNonStrict(), disableTypeGuards, o.ArgTypes()[0], arg) && + matchOperandTrait(o.OperandTrait(), arg) +} + +// matchesRuntimeBinarySignature indicates whether the argument types are runtime assiganble to the overload's expected arguments. +func (o *OverloadDecl) matchesRuntimeBinarySignature(disableTypeGuards bool, arg1, arg2 ref.Val) bool { + return matchRuntimeArgType(o.IsNonStrict(), disableTypeGuards, o.ArgTypes()[0], arg1) && + matchRuntimeArgType(o.IsNonStrict(), disableTypeGuards, o.ArgTypes()[1], arg2) && + matchOperandTrait(o.OperandTrait(), arg1) +} + +// matchesRuntimeSignature indicates whether the argument types are runtime assiganble to the overload's expected arguments. +func (o *OverloadDecl) matchesRuntimeSignature(disableTypeGuards bool, args ...ref.Val) bool { + if len(args) != len(o.ArgTypes()) { + return false + } + if len(args) == 0 { + return true + } + for i, arg := range args { + if !matchRuntimeArgType(o.IsNonStrict(), disableTypeGuards, o.ArgTypes()[i], arg) { + return false + } + } + return matchOperandTrait(o.OperandTrait(), args[0]) +} + +func matchRuntimeArgType(nonStrict, disableTypeGuards bool, argType *types.Type, arg ref.Val) bool { + if nonStrict && (disableTypeGuards || types.IsUnknownOrError(arg)) { + return true + } + if types.IsUnknownOrError(arg) { + return false + } + return disableTypeGuards || argType.IsAssignableRuntimeType(arg) +} + +func matchOperandTrait(trait int, arg ref.Val) bool { + return trait == 0 || arg.Type().HasTrait(trait) || types.IsUnknownOrError(arg) +} + +// OverloadOpt is a functional option for configuring a function overload. +type OverloadOpt func(*OverloadDecl) (*OverloadDecl, error) + +// UnaryBinding provides the implementation of a unary overload. The provided function is protected by a runtime +// type-guard which ensures runtime type agreement between the overload signature and runtime argument types. +func UnaryBinding(binding functions.UnaryOp) OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + if o.hasBinding() { + return nil, fmt.Errorf("overload already has a binding: %s", o.ID()) + } + if len(o.ArgTypes()) != 1 { + return nil, fmt.Errorf("unary function bound to non-unary overload: %s", o.ID()) + } + o.unaryOp = binding + return o, nil + } +} + +// BinaryBinding provides the implementation of a binary overload. The provided function is protected by a runtime +// type-guard which ensures runtime type agreement between the overload signature and runtime argument types. +func BinaryBinding(binding functions.BinaryOp) OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + if o.hasBinding() { + return nil, fmt.Errorf("overload already has a binding: %s", o.ID()) + } + if len(o.ArgTypes()) != 2 { + return nil, fmt.Errorf("binary function bound to non-binary overload: %s", o.ID()) + } + o.binaryOp = binding + return o, nil + } +} + +// FunctionBinding provides the implementation of a variadic overload. The provided function is protected by a runtime +// type-guard which ensures runtime type agreement between the overload signature and runtime argument types. +func FunctionBinding(binding functions.FunctionOp) OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + if o.hasBinding() { + return nil, fmt.Errorf("overload already has a binding: %s", o.ID()) + } + o.functionOp = binding + return o, nil + } +} + +// OverloadIsNonStrict enables the function to be called with error and unknown argument values. +// +// Note: do not use this option unless absoluately necessary as it should be an uncommon feature. +func OverloadIsNonStrict() OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + o.nonStrict = true + return o, nil + } +} + +// OverloadOperandTrait configures a set of traits which the first argument to the overload must implement in order to be +// successfully invoked. +func OverloadOperandTrait(trait int) OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + o.operandTrait = trait + return o, nil + } +} + +// NewConstant creates a new constant declaration. +func NewConstant(name string, t *types.Type, v ref.Val) *VariableDecl { + return &VariableDecl{name: name, varType: t, value: v} +} + +// NewVariable creates a new variable declaration. +func NewVariable(name string, t *types.Type) *VariableDecl { + return &VariableDecl{name: name, varType: t} +} + +// VariableDecl defines a variable declaration which may optionally have a constant value. +type VariableDecl struct { + name string + varType *types.Type + value ref.Val +} + +// Name returns the fully-qualified variable name +func (v *VariableDecl) Name() string { + if v == nil { + return "" + } + return v.name +} + +// Type returns the types.Type value associated with the variable. +func (v *VariableDecl) Type() *types.Type { + if v == nil { + // types.Type is nil-safe + return nil + } + return v.varType +} + +// Value returns the constant value associated with the declaration. +func (v *VariableDecl) Value() ref.Val { + if v == nil { + return nil + } + return v.value +} + +// DeclarationIsEquivalent returns true if one variable declaration has the same name and same type as the input. +func (v *VariableDecl) DeclarationIsEquivalent(other *VariableDecl) bool { + if v == other { + return true + } + return v.Name() == other.Name() && v.Type().IsEquivalentType(other.Type()) +} + +// VariableDeclToExprDecl converts a go-native variable declaration into a protobuf-type variable declaration. +func VariableDeclToExprDecl(v *VariableDecl) (*exprpb.Decl, error) { + varType, err := types.TypeToExprType(v.Type()) + if err != nil { + return nil, err + } + return chkdecls.NewVar(v.Name(), varType), nil +} + +// TypeVariable creates a new type identifier for use within a types.Provider +func TypeVariable(t *types.Type) *VariableDecl { + return NewVariable(t.TypeName(), types.NewTypeTypeWithParam(t)) +} + +// FunctionDeclToExprDecl converts a go-native function declaration into a protobuf-typed function declaration. +func FunctionDeclToExprDecl(f *FunctionDecl) (*exprpb.Decl, error) { + overloads := make([]*exprpb.Decl_FunctionDecl_Overload, len(f.overloads)) + for i, oID := range f.overloadOrdinals { + o := f.overloads[oID] + paramNames := map[string]struct{}{} + argTypes := make([]*exprpb.Type, len(o.ArgTypes())) + for j, a := range o.ArgTypes() { + collectParamNames(paramNames, a) + at, err := types.TypeToExprType(a) + if err != nil { + return nil, err + } + argTypes[j] = at + } + collectParamNames(paramNames, o.ResultType()) + resultType, err := types.TypeToExprType(o.ResultType()) + if err != nil { + return nil, err + } + if len(paramNames) == 0 { + if o.IsMemberFunction() { + overloads[i] = chkdecls.NewInstanceOverload(oID, argTypes, resultType) + } else { + overloads[i] = chkdecls.NewOverload(oID, argTypes, resultType) + } + } else { + params := []string{} + for pn := range paramNames { + params = append(params, pn) + } + if o.IsMemberFunction() { + overloads[i] = chkdecls.NewParameterizedInstanceOverload(oID, argTypes, resultType, params) + } else { + overloads[i] = chkdecls.NewParameterizedOverload(oID, argTypes, resultType, params) + } + } + } + return chkdecls.NewFunction(f.Name(), overloads...), nil +} + +func collectParamNames(paramNames map[string]struct{}, arg *types.Type) { + if arg.Kind() == types.TypeParamKind { + paramNames[arg.TypeName()] = struct{}{} + } + for _, param := range arg.Parameters() { + collectParamNames(paramNames, param) + } +} + +var ( + emptyArgs = []*types.Type{} +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/error.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/error.go index f91f7f8d1093..774dcb5b48ad 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/error.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/error.go @@ -22,10 +22,16 @@ import ( "golang.org/x/text/width" ) -// Error type which references a location within source and a message. +// NewError creates an error associated with an expression id with the given message at the given location. +func NewError(id int64, message string, location Location) *Error { + return &Error{Message: message, Location: location, ExprID: id} +} + +// Error type which references an expression id, a location within source, and a message. type Error struct { Location Location Message string + ExprID int64 } const ( diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/errors.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/errors.go index 1565085ab9a5..63919714ea7a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/errors.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/errors.go @@ -22,7 +22,7 @@ import ( // Errors type which contains a list of errors observed during parsing. type Errors struct { - errors []Error + errors []*Error source Source numErrors int maxErrorsToReport int @@ -31,7 +31,7 @@ type Errors struct { // NewErrors creates a new instance of the Errors type. func NewErrors(source Source) *Errors { return &Errors{ - errors: []Error{}, + errors: []*Error{}, source: source, maxErrorsToReport: 100, } @@ -39,11 +39,17 @@ func NewErrors(source Source) *Errors { // ReportError records an error at a source location. func (e *Errors) ReportError(l Location, format string, args ...any) { + e.ReportErrorAtID(0, l, format, args...) +} + +// ReportErrorAtID records an error at a source location and expression id. +func (e *Errors) ReportErrorAtID(id int64, l Location, format string, args ...any) { e.numErrors++ if e.numErrors > e.maxErrorsToReport { return } - err := Error{ + err := &Error{ + ExprID: id, Location: l, Message: fmt.Sprintf(format, args...), } @@ -51,12 +57,12 @@ func (e *Errors) ReportError(l Location, format string, args ...any) { } // GetErrors returns the list of observed errors. -func (e *Errors) GetErrors() []Error { +func (e *Errors) GetErrors() []*Error { return e.errors[:] } // Append creates a new Errors object with the current and input errors. -func (e *Errors) Append(errs []Error) *Errors { +func (e *Errors) Append(errs []*Error) *Errors { return &Errors{ errors: append(e.errors, errs...), source: e.source, diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/BUILD.bazel new file mode 100644 index 000000000000..3cc27d60ce31 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/BUILD.bazel @@ -0,0 +1,17 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], # Apache 2.0 +) + +go_library( + name = "go_default_library", + srcs = [ + "functions.go", + ], + importpath = "github.com/google/cel-go/common/functions", + deps = [ + "//common/types/ref:go_default_library", + ], +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/functions.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/functions.go new file mode 100644 index 000000000000..67f4a5944e15 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/functions/functions.go @@ -0,0 +1,61 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package functions defines the standard builtin functions supported by the interpreter +package functions + +import "github.com/google/cel-go/common/types/ref" + +// Overload defines a named overload of a function, indicating an operand trait +// which must be present on the first argument to the overload as well as one +// of either a unary, binary, or function implementation. +// +// The majority of operators within the expression language are unary or binary +// and the specializations simplify the call contract for implementers of +// types with operator overloads. Any added complexity is assumed to be handled +// by the generic FunctionOp. +type Overload struct { + // Operator name as written in an expression or defined within + // operators.go. + Operator string + + // Operand trait used to dispatch the call. The zero-value indicates a + // global function overload or that one of the Unary / Binary / Function + // definitions should be used to execute the call. + OperandTrait int + + // Unary defines the overload with a UnaryOp implementation. May be nil. + Unary UnaryOp + + // Binary defines the overload with a BinaryOp implementation. May be nil. + Binary BinaryOp + + // Function defines the overload with a FunctionOp implementation. May be + // nil. + Function FunctionOp + + // NonStrict specifies whether the Overload will tolerate arguments that + // are types.Err or types.Unknown. + NonStrict bool +} + +// UnaryOp is a function that takes a single value and produces an output. +type UnaryOp func(value ref.Val) ref.Val + +// BinaryOp is a function that takes two values and produces an output. +type BinaryOp func(lhs ref.Val, rhs ref.Val) ref.Val + +// FunctionOp is a function with accepts zero or more arguments and produces +// a value or error as a result. +type FunctionOp func(values ...ref.Val) ref.Val diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/source.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/source.go index 52377d9308a2..acf22bdf15ea 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/source.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/source.go @@ -64,7 +64,6 @@ type sourceImpl struct { runes.Buffer description string lineOffsets []int32 - idOffsets map[int64]int32 } var _ runes.Buffer = &sourceImpl{} @@ -92,7 +91,6 @@ func NewStringSource(contents string, description string) Source { Buffer: runes.NewBuffer(contents), description: description, lineOffsets: offsets, - idOffsets: map[int64]int32{}, } } @@ -102,7 +100,6 @@ func NewInfoSource(info *exprpb.SourceInfo) Source { Buffer: runes.NewBuffer(""), description: info.GetLocation(), lineOffsets: info.GetLineOffsets(), - idOffsets: info.GetPositions(), } } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel new file mode 100644 index 000000000000..c130a93f63fe --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel @@ -0,0 +1,25 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], # Apache 2.0 +) + +go_library( + name = "go_default_library", + srcs = [ + "standard.go", + ], + importpath = "github.com/google/cel-go/common/stdlib", + deps = [ + "//checker/decls:go_default_library", + "//common/decls:go_default_library", + "//common/functions:go_default_library", + "//common/operators:go_default_library", + "//common/overloads:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "//common/types/traits:go_default_library", + "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", + ], +) \ No newline at end of file diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/standard.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/standard.go new file mode 100644 index 000000000000..d02cb64bf1f9 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/stdlib/standard.go @@ -0,0 +1,661 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package stdlib contains all of the standard library function declarations and definitions for CEL. +package stdlib + +import ( + "github.com/google/cel-go/common/decls" + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/operators" + "github.com/google/cel-go/common/overloads" + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/common/types/traits" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +var ( + stdFunctions []*decls.FunctionDecl + stdFnDecls []*exprpb.Decl + stdTypes []*decls.VariableDecl + stdTypeDecls []*exprpb.Decl +) + +func init() { + paramA := types.NewTypeParamType("A") + paramB := types.NewTypeParamType("B") + listOfA := types.NewListType(paramA) + mapOfAB := types.NewMapType(paramA, paramB) + + stdTypes = []*decls.VariableDecl{ + decls.TypeVariable(types.BoolType), + decls.TypeVariable(types.BytesType), + decls.TypeVariable(types.DoubleType), + decls.TypeVariable(types.DurationType), + decls.TypeVariable(types.IntType), + decls.TypeVariable(listOfA), + decls.TypeVariable(mapOfAB), + decls.TypeVariable(types.NullType), + decls.TypeVariable(types.StringType), + decls.TypeVariable(types.TimestampType), + decls.TypeVariable(types.TypeType), + decls.TypeVariable(types.UintType), + } + + stdTypeDecls = make([]*exprpb.Decl, 0, len(stdTypes)) + for _, stdType := range stdTypes { + typeVar, err := decls.VariableDeclToExprDecl(stdType) + if err != nil { + panic(err) + } + stdTypeDecls = append(stdTypeDecls, typeVar) + } + + stdFunctions = []*decls.FunctionDecl{ + // Logical operators. Special-cased within the interpreter. + // Note, the singleton binding prevents extensions from overriding the operator behavior. + function(operators.Conditional, + decls.Overload(overloads.Conditional, argTypes(types.BoolType, paramA, paramA), paramA, + decls.OverloadIsNonStrict()), + decls.SingletonFunctionBinding(noFunctionOverrides)), + function(operators.LogicalAnd, + decls.Overload(overloads.LogicalAnd, argTypes(types.BoolType, types.BoolType), types.BoolType, + decls.OverloadIsNonStrict()), + decls.SingletonBinaryBinding(noBinaryOverrides)), + function(operators.LogicalOr, + decls.Overload(overloads.LogicalOr, argTypes(types.BoolType, types.BoolType), types.BoolType, + decls.OverloadIsNonStrict()), + decls.SingletonBinaryBinding(noBinaryOverrides)), + function(operators.LogicalNot, + decls.Overload(overloads.LogicalNot, argTypes(types.BoolType), types.BoolType), + decls.SingletonUnaryBinding(func(val ref.Val) ref.Val { + b, ok := val.(types.Bool) + if !ok { + return types.MaybeNoSuchOverloadErr(val) + } + return b.Negate() + })), + + // Comprehension short-circuiting related function + function(operators.NotStrictlyFalse, + decls.Overload(overloads.NotStrictlyFalse, argTypes(types.BoolType), types.BoolType, + decls.OverloadIsNonStrict(), + decls.UnaryBinding(notStrictlyFalse))), + // Deprecated: __not_strictly_false__ + function(operators.OldNotStrictlyFalse, + decls.DisableDeclaration(true), // safe deprecation + decls.Overload(operators.OldNotStrictlyFalse, argTypes(types.BoolType), types.BoolType, + decls.OverloadIsNonStrict(), + decls.UnaryBinding(notStrictlyFalse))), + + // Equality / inequality. Special-cased in the interpreter + function(operators.Equals, + decls.Overload(overloads.Equals, argTypes(paramA, paramA), types.BoolType), + decls.SingletonBinaryBinding(noBinaryOverrides)), + function(operators.NotEquals, + decls.Overload(overloads.NotEquals, argTypes(paramA, paramA), types.BoolType), + decls.SingletonBinaryBinding(noBinaryOverrides)), + + // Mathematical operators + function(operators.Add, + decls.Overload(overloads.AddBytes, + argTypes(types.BytesType, types.BytesType), types.BytesType), + decls.Overload(overloads.AddDouble, + argTypes(types.DoubleType, types.DoubleType), types.DoubleType), + decls.Overload(overloads.AddDurationDuration, + argTypes(types.DurationType, types.DurationType), types.DurationType), + decls.Overload(overloads.AddDurationTimestamp, + argTypes(types.DurationType, types.TimestampType), types.TimestampType), + decls.Overload(overloads.AddTimestampDuration, + argTypes(types.TimestampType, types.DurationType), types.TimestampType), + decls.Overload(overloads.AddInt64, + argTypes(types.IntType, types.IntType), types.IntType), + decls.Overload(overloads.AddList, + argTypes(listOfA, listOfA), listOfA), + decls.Overload(overloads.AddString, + argTypes(types.StringType, types.StringType), types.StringType), + decls.Overload(overloads.AddUint64, + argTypes(types.UintType, types.UintType), types.UintType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Adder).Add(rhs) + }, traits.AdderType)), + function(operators.Divide, + decls.Overload(overloads.DivideDouble, + argTypes(types.DoubleType, types.DoubleType), types.DoubleType), + decls.Overload(overloads.DivideInt64, + argTypes(types.IntType, types.IntType), types.IntType), + decls.Overload(overloads.DivideUint64, + argTypes(types.UintType, types.UintType), types.UintType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Divider).Divide(rhs) + }, traits.DividerType)), + function(operators.Modulo, + decls.Overload(overloads.ModuloInt64, + argTypes(types.IntType, types.IntType), types.IntType), + decls.Overload(overloads.ModuloUint64, + argTypes(types.UintType, types.UintType), types.UintType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Modder).Modulo(rhs) + }, traits.ModderType)), + function(operators.Multiply, + decls.Overload(overloads.MultiplyDouble, + argTypes(types.DoubleType, types.DoubleType), types.DoubleType), + decls.Overload(overloads.MultiplyInt64, + argTypes(types.IntType, types.IntType), types.IntType), + decls.Overload(overloads.MultiplyUint64, + argTypes(types.UintType, types.UintType), types.UintType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Multiplier).Multiply(rhs) + }, traits.MultiplierType)), + function(operators.Negate, + decls.Overload(overloads.NegateDouble, argTypes(types.DoubleType), types.DoubleType), + decls.Overload(overloads.NegateInt64, argTypes(types.IntType), types.IntType), + decls.SingletonUnaryBinding(func(val ref.Val) ref.Val { + if types.IsBool(val) { + return types.MaybeNoSuchOverloadErr(val) + } + return val.(traits.Negater).Negate() + }, traits.NegatorType)), + function(operators.Subtract, + decls.Overload(overloads.SubtractDouble, + argTypes(types.DoubleType, types.DoubleType), types.DoubleType), + decls.Overload(overloads.SubtractDurationDuration, + argTypes(types.DurationType, types.DurationType), types.DurationType), + decls.Overload(overloads.SubtractInt64, + argTypes(types.IntType, types.IntType), types.IntType), + decls.Overload(overloads.SubtractTimestampDuration, + argTypes(types.TimestampType, types.DurationType), types.TimestampType), + decls.Overload(overloads.SubtractTimestampTimestamp, + argTypes(types.TimestampType, types.TimestampType), types.DurationType), + decls.Overload(overloads.SubtractUint64, + argTypes(types.UintType, types.UintType), types.UintType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Subtractor).Subtract(rhs) + }, traits.SubtractorType)), + + // Relations operators + + function(operators.Less, + decls.Overload(overloads.LessBool, + argTypes(types.BoolType, types.BoolType), types.BoolType), + decls.Overload(overloads.LessInt64, + argTypes(types.IntType, types.IntType), types.BoolType), + decls.Overload(overloads.LessInt64Double, + argTypes(types.IntType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessInt64Uint64, + argTypes(types.IntType, types.UintType), types.BoolType), + decls.Overload(overloads.LessUint64, + argTypes(types.UintType, types.UintType), types.BoolType), + decls.Overload(overloads.LessUint64Double, + argTypes(types.UintType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessUint64Int64, + argTypes(types.UintType, types.IntType), types.BoolType), + decls.Overload(overloads.LessDouble, + argTypes(types.DoubleType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessDoubleInt64, + argTypes(types.DoubleType, types.IntType), types.BoolType), + decls.Overload(overloads.LessDoubleUint64, + argTypes(types.DoubleType, types.UintType), types.BoolType), + decls.Overload(overloads.LessString, + argTypes(types.StringType, types.StringType), types.BoolType), + decls.Overload(overloads.LessBytes, + argTypes(types.BytesType, types.BytesType), types.BoolType), + decls.Overload(overloads.LessTimestamp, + argTypes(types.TimestampType, types.TimestampType), types.BoolType), + decls.Overload(overloads.LessDuration, + argTypes(types.DurationType, types.DurationType), types.BoolType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + cmp := lhs.(traits.Comparer).Compare(rhs) + if cmp == types.IntNegOne { + return types.True + } + if cmp == types.IntOne || cmp == types.IntZero { + return types.False + } + return cmp + }, traits.ComparerType)), + + function(operators.LessEquals, + decls.Overload(overloads.LessEqualsBool, + argTypes(types.BoolType, types.BoolType), types.BoolType), + decls.Overload(overloads.LessEqualsInt64, + argTypes(types.IntType, types.IntType), types.BoolType), + decls.Overload(overloads.LessEqualsInt64Double, + argTypes(types.IntType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessEqualsInt64Uint64, + argTypes(types.IntType, types.UintType), types.BoolType), + decls.Overload(overloads.LessEqualsUint64, + argTypes(types.UintType, types.UintType), types.BoolType), + decls.Overload(overloads.LessEqualsUint64Double, + argTypes(types.UintType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessEqualsUint64Int64, + argTypes(types.UintType, types.IntType), types.BoolType), + decls.Overload(overloads.LessEqualsDouble, + argTypes(types.DoubleType, types.DoubleType), types.BoolType), + decls.Overload(overloads.LessEqualsDoubleInt64, + argTypes(types.DoubleType, types.IntType), types.BoolType), + decls.Overload(overloads.LessEqualsDoubleUint64, + argTypes(types.DoubleType, types.UintType), types.BoolType), + decls.Overload(overloads.LessEqualsString, + argTypes(types.StringType, types.StringType), types.BoolType), + decls.Overload(overloads.LessEqualsBytes, + argTypes(types.BytesType, types.BytesType), types.BoolType), + decls.Overload(overloads.LessEqualsTimestamp, + argTypes(types.TimestampType, types.TimestampType), types.BoolType), + decls.Overload(overloads.LessEqualsDuration, + argTypes(types.DurationType, types.DurationType), types.BoolType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + cmp := lhs.(traits.Comparer).Compare(rhs) + if cmp == types.IntNegOne || cmp == types.IntZero { + return types.True + } + if cmp == types.IntOne { + return types.False + } + return cmp + }, traits.ComparerType)), + + function(operators.Greater, + decls.Overload(overloads.GreaterBool, + argTypes(types.BoolType, types.BoolType), types.BoolType), + decls.Overload(overloads.GreaterInt64, + argTypes(types.IntType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterInt64Double, + argTypes(types.IntType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterInt64Uint64, + argTypes(types.IntType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterUint64, + argTypes(types.UintType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterUint64Double, + argTypes(types.UintType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterUint64Int64, + argTypes(types.UintType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterDouble, + argTypes(types.DoubleType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterDoubleInt64, + argTypes(types.DoubleType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterDoubleUint64, + argTypes(types.DoubleType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterString, + argTypes(types.StringType, types.StringType), types.BoolType), + decls.Overload(overloads.GreaterBytes, + argTypes(types.BytesType, types.BytesType), types.BoolType), + decls.Overload(overloads.GreaterTimestamp, + argTypes(types.TimestampType, types.TimestampType), types.BoolType), + decls.Overload(overloads.GreaterDuration, + argTypes(types.DurationType, types.DurationType), types.BoolType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + cmp := lhs.(traits.Comparer).Compare(rhs) + if cmp == types.IntOne { + return types.True + } + if cmp == types.IntNegOne || cmp == types.IntZero { + return types.False + } + return cmp + }, traits.ComparerType)), + + function(operators.GreaterEquals, + decls.Overload(overloads.GreaterEqualsBool, + argTypes(types.BoolType, types.BoolType), types.BoolType), + decls.Overload(overloads.GreaterEqualsInt64, + argTypes(types.IntType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterEqualsInt64Double, + argTypes(types.IntType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterEqualsInt64Uint64, + argTypes(types.IntType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterEqualsUint64, + argTypes(types.UintType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterEqualsUint64Double, + argTypes(types.UintType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterEqualsUint64Int64, + argTypes(types.UintType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterEqualsDouble, + argTypes(types.DoubleType, types.DoubleType), types.BoolType), + decls.Overload(overloads.GreaterEqualsDoubleInt64, + argTypes(types.DoubleType, types.IntType), types.BoolType), + decls.Overload(overloads.GreaterEqualsDoubleUint64, + argTypes(types.DoubleType, types.UintType), types.BoolType), + decls.Overload(overloads.GreaterEqualsString, + argTypes(types.StringType, types.StringType), types.BoolType), + decls.Overload(overloads.GreaterEqualsBytes, + argTypes(types.BytesType, types.BytesType), types.BoolType), + decls.Overload(overloads.GreaterEqualsTimestamp, + argTypes(types.TimestampType, types.TimestampType), types.BoolType), + decls.Overload(overloads.GreaterEqualsDuration, + argTypes(types.DurationType, types.DurationType), types.BoolType), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + cmp := lhs.(traits.Comparer).Compare(rhs) + if cmp == types.IntOne || cmp == types.IntZero { + return types.True + } + if cmp == types.IntNegOne { + return types.False + } + return cmp + }, traits.ComparerType)), + + // Indexing + function(operators.Index, + decls.Overload(overloads.IndexList, argTypes(listOfA, types.IntType), paramA), + decls.Overload(overloads.IndexMap, argTypes(mapOfAB, paramA), paramB), + decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + return lhs.(traits.Indexer).Get(rhs) + }, traits.IndexerType)), + + // Collections operators + function(operators.In, + decls.Overload(overloads.InList, argTypes(paramA, listOfA), types.BoolType), + decls.Overload(overloads.InMap, argTypes(paramA, mapOfAB), types.BoolType), + decls.SingletonBinaryBinding(inAggregate)), + function(operators.OldIn, + decls.DisableDeclaration(true), // safe deprecation + decls.Overload(overloads.InList, argTypes(paramA, listOfA), types.BoolType), + decls.Overload(overloads.InMap, argTypes(paramA, mapOfAB), types.BoolType), + decls.SingletonBinaryBinding(inAggregate)), + function(overloads.DeprecatedIn, + decls.DisableDeclaration(true), // safe deprecation + decls.Overload(overloads.InList, argTypes(paramA, listOfA), types.BoolType), + decls.Overload(overloads.InMap, argTypes(paramA, mapOfAB), types.BoolType), + decls.SingletonBinaryBinding(inAggregate)), + function(overloads.Size, + decls.Overload(overloads.SizeBytes, argTypes(types.BytesType), types.IntType), + decls.MemberOverload(overloads.SizeBytesInst, argTypes(types.BytesType), types.IntType), + decls.Overload(overloads.SizeList, argTypes(listOfA), types.IntType), + decls.MemberOverload(overloads.SizeListInst, argTypes(listOfA), types.IntType), + decls.Overload(overloads.SizeMap, argTypes(mapOfAB), types.IntType), + decls.MemberOverload(overloads.SizeMapInst, argTypes(mapOfAB), types.IntType), + decls.Overload(overloads.SizeString, argTypes(types.StringType), types.IntType), + decls.MemberOverload(overloads.SizeStringInst, argTypes(types.StringType), types.IntType), + decls.SingletonUnaryBinding(func(val ref.Val) ref.Val { + return val.(traits.Sizer).Size() + }, traits.SizerType)), + + // Type conversions + function(overloads.TypeConvertType, + decls.Overload(overloads.TypeConvertType, argTypes(paramA), types.NewTypeTypeWithParam(paramA)), + decls.SingletonUnaryBinding(convertToType(types.TypeType))), + + // Bool conversions + function(overloads.TypeConvertBool, + decls.Overload(overloads.BoolToBool, argTypes(types.BoolType), types.BoolType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.StringToBool, argTypes(types.StringType), types.BoolType, + decls.UnaryBinding(convertToType(types.BoolType)))), + + // Bytes conversions + function(overloads.TypeConvertBytes, + decls.Overload(overloads.BytesToBytes, argTypes(types.BytesType), types.BytesType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.StringToBytes, argTypes(types.StringType), types.BytesType, + decls.UnaryBinding(convertToType(types.BytesType)))), + + // Double conversions + function(overloads.TypeConvertDouble, + decls.Overload(overloads.DoubleToDouble, argTypes(types.DoubleType), types.DoubleType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.IntToDouble, argTypes(types.IntType), types.DoubleType, + decls.UnaryBinding(convertToType(types.DoubleType))), + decls.Overload(overloads.StringToDouble, argTypes(types.StringType), types.DoubleType, + decls.UnaryBinding(convertToType(types.DoubleType))), + decls.Overload(overloads.UintToDouble, argTypes(types.UintType), types.DoubleType, + decls.UnaryBinding(convertToType(types.DoubleType)))), + + // Duration conversions + function(overloads.TypeConvertDuration, + decls.Overload(overloads.DurationToDuration, argTypes(types.DurationType), types.DurationType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.IntToDuration, argTypes(types.IntType), types.DurationType, + decls.UnaryBinding(convertToType(types.DurationType))), + decls.Overload(overloads.StringToDuration, argTypes(types.StringType), types.DurationType, + decls.UnaryBinding(convertToType(types.DurationType)))), + + // Dyn conversions + function(overloads.TypeConvertDyn, + decls.Overload(overloads.ToDyn, argTypes(paramA), types.DynType), + decls.SingletonUnaryBinding(identity)), + + // Int conversions + function(overloads.TypeConvertInt, + decls.Overload(overloads.IntToInt, argTypes(types.IntType), types.IntType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.DoubleToInt, argTypes(types.DoubleType), types.IntType, + decls.UnaryBinding(convertToType(types.IntType))), + decls.Overload(overloads.DurationToInt, argTypes(types.DurationType), types.IntType, + decls.UnaryBinding(convertToType(types.IntType))), + decls.Overload(overloads.StringToInt, argTypes(types.StringType), types.IntType, + decls.UnaryBinding(convertToType(types.IntType))), + decls.Overload(overloads.TimestampToInt, argTypes(types.TimestampType), types.IntType, + decls.UnaryBinding(convertToType(types.IntType))), + decls.Overload(overloads.UintToInt, argTypes(types.UintType), types.IntType, + decls.UnaryBinding(convertToType(types.IntType))), + ), + + // String conversions + function(overloads.TypeConvertString, + decls.Overload(overloads.StringToString, argTypes(types.StringType), types.StringType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.BoolToString, argTypes(types.BoolType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.BytesToString, argTypes(types.BytesType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.DoubleToString, argTypes(types.DoubleType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.DurationToString, argTypes(types.DurationType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.IntToString, argTypes(types.IntType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.TimestampToString, argTypes(types.TimestampType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType))), + decls.Overload(overloads.UintToString, argTypes(types.UintType), types.StringType, + decls.UnaryBinding(convertToType(types.StringType)))), + + // Timestamp conversions + function(overloads.TypeConvertTimestamp, + decls.Overload(overloads.TimestampToTimestamp, argTypes(types.TimestampType), types.TimestampType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.IntToTimestamp, argTypes(types.IntType), types.TimestampType, + decls.UnaryBinding(convertToType(types.TimestampType))), + decls.Overload(overloads.StringToTimestamp, argTypes(types.StringType), types.TimestampType, + decls.UnaryBinding(convertToType(types.TimestampType)))), + + // Uint conversions + function(overloads.TypeConvertUint, + decls.Overload(overloads.UintToUint, argTypes(types.UintType), types.UintType, + decls.UnaryBinding(identity)), + decls.Overload(overloads.DoubleToUint, argTypes(types.DoubleType), types.UintType, + decls.UnaryBinding(convertToType(types.UintType))), + decls.Overload(overloads.IntToUint, argTypes(types.IntType), types.UintType, + decls.UnaryBinding(convertToType(types.UintType))), + decls.Overload(overloads.StringToUint, argTypes(types.StringType), types.UintType, + decls.UnaryBinding(convertToType(types.UintType)))), + + // String functions + function(overloads.Contains, + decls.MemberOverload(overloads.ContainsString, + argTypes(types.StringType, types.StringType), types.BoolType, + decls.BinaryBinding(types.StringContains)), + decls.DisableTypeGuards(true)), + function(overloads.EndsWith, + decls.MemberOverload(overloads.EndsWithString, + argTypes(types.StringType, types.StringType), types.BoolType, + decls.BinaryBinding(types.StringEndsWith)), + decls.DisableTypeGuards(true)), + function(overloads.StartsWith, + decls.MemberOverload(overloads.StartsWithString, + argTypes(types.StringType, types.StringType), types.BoolType, + decls.BinaryBinding(types.StringStartsWith)), + decls.DisableTypeGuards(true)), + function(overloads.Matches, + decls.Overload(overloads.Matches, argTypes(types.StringType, types.StringType), types.BoolType), + decls.MemberOverload(overloads.MatchesString, + argTypes(types.StringType, types.StringType), types.BoolType), + decls.SingletonBinaryBinding(func(str, pat ref.Val) ref.Val { + return str.(traits.Matcher).Match(pat) + }, traits.MatcherType)), + + // Timestamp / duration functions + function(overloads.TimeGetFullYear, + decls.MemberOverload(overloads.TimestampToYear, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToYearWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetMonth, + decls.MemberOverload(overloads.TimestampToMonth, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToMonthWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetDayOfYear, + decls.MemberOverload(overloads.TimestampToDayOfYear, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToDayOfYearWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetDayOfMonth, + decls.MemberOverload(overloads.TimestampToDayOfMonthZeroBased, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToDayOfMonthZeroBasedWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetDate, + decls.MemberOverload(overloads.TimestampToDayOfMonthOneBased, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToDayOfMonthOneBasedWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetDayOfWeek, + decls.MemberOverload(overloads.TimestampToDayOfWeek, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToDayOfWeekWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType)), + + function(overloads.TimeGetHours, + decls.MemberOverload(overloads.TimestampToHours, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToHoursWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType), + decls.MemberOverload(overloads.DurationToHours, + argTypes(types.DurationType), types.IntType)), + + function(overloads.TimeGetMinutes, + decls.MemberOverload(overloads.TimestampToMinutes, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToMinutesWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType), + decls.MemberOverload(overloads.DurationToMinutes, + argTypes(types.DurationType), types.IntType)), + + function(overloads.TimeGetSeconds, + decls.MemberOverload(overloads.TimestampToSeconds, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToSecondsWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType), + decls.MemberOverload(overloads.DurationToSeconds, + argTypes(types.DurationType), types.IntType)), + + function(overloads.TimeGetMilliseconds, + decls.MemberOverload(overloads.TimestampToMilliseconds, + argTypes(types.TimestampType), types.IntType), + decls.MemberOverload(overloads.TimestampToMillisecondsWithTz, + argTypes(types.TimestampType, types.StringType), types.IntType), + decls.MemberOverload(overloads.DurationToMilliseconds, + argTypes(types.DurationType), types.IntType)), + } + + stdFnDecls = make([]*exprpb.Decl, 0, len(stdFunctions)) + for _, fn := range stdFunctions { + if fn.IsDeclarationDisabled() { + continue + } + ed, err := decls.FunctionDeclToExprDecl(fn) + if err != nil { + panic(err) + } + stdFnDecls = append(stdFnDecls, ed) + } +} + +// Functions returns the set of standard library function declarations and definitions for CEL. +func Functions() []*decls.FunctionDecl { + return stdFunctions +} + +// FunctionExprDecls returns the legacy style protobuf-typed declarations for all functions and overloads +// in the CEL standard environment. +// +// Deprecated: use Functions +func FunctionExprDecls() []*exprpb.Decl { + return stdFnDecls +} + +// Types returns the set of standard library types for CEL. +func Types() []*decls.VariableDecl { + return stdTypes +} + +// TypeExprDecls returns the legacy style protobuf-typed declarations for all types in the CEL +// standard environment. +// +// Deprecated: use Types +func TypeExprDecls() []*exprpb.Decl { + return stdTypeDecls +} + +func notStrictlyFalse(value ref.Val) ref.Val { + if types.IsBool(value) { + return value + } + return types.True +} + +func inAggregate(lhs ref.Val, rhs ref.Val) ref.Val { + if rhs.Type().HasTrait(traits.ContainerType) { + return rhs.(traits.Container).Contains(lhs) + } + return types.ValOrErr(rhs, "no such overload") +} + +func function(name string, opts ...decls.FunctionOpt) *decls.FunctionDecl { + fn, err := decls.NewFunction(name, opts...) + if err != nil { + panic(err) + } + return fn +} + +func argTypes(args ...*types.Type) []*types.Type { + return args +} + +func noBinaryOverrides(rhs, lhs ref.Val) ref.Val { + return types.NoSuchOverloadErr() +} + +func noFunctionOverrides(args ...ref.Val) ref.Val { + return types.NoSuchOverloadErr() +} + +func identity(val ref.Val) ref.Val { + return val +} + +func convertToType(t ref.Type) functions.UnaryOp { + return func(val ref.Val) ref.Val { + return val.ConvertToType(t) + } +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/BUILD.bazel index 89c4feacbfc7..b5e44ffbf149 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/BUILD.bazel @@ -27,20 +27,20 @@ go_library( "provider.go", "string.go", "timestamp.go", - "type.go", + "types.go", "uint.go", "unknown.go", "util.go", ], importpath = "github.com/google/cel-go/common/types", deps = [ + "//checker/decls:go_default_library", "//common/overloads:go_default_library", "//common/types/pb:go_default_library", "//common/types/ref:go_default_library", "//common/types/traits:go_default_library", "@com_github_stoewer_go_strcase//:go_default_library", "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", - "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", @@ -71,8 +71,9 @@ go_test( "provider_test.go", "string_test.go", "timestamp_test.go", - "type_test.go", + "types_test.go", "uint_test.go", + "unknown_test.go", "util_test.go", ], embed = [":go_default_library"], diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bool.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bool.go index a634ecc2879e..565734f3ff5b 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bool.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bool.go @@ -20,7 +20,6 @@ import ( "strconv" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -31,11 +30,6 @@ import ( type Bool bool var ( - // BoolType singleton. - BoolType = NewTypeValue("bool", - traits.ComparerType, - traits.NegatorType) - // boolWrapperType golang reflected type for protobuf bool wrapper type. boolWrapperType = reflect.TypeOf(&wrapperspb.BoolValue{}) ) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bytes.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bytes.go index bef190759fd8..5838755f8b35 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bytes.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/bytes.go @@ -22,7 +22,6 @@ import ( "unicode/utf8" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -34,12 +33,6 @@ import ( type Bytes []byte var ( - // BytesType singleton. - BytesType = NewTypeValue("bytes", - traits.AdderType, - traits.ComparerType, - traits.SizerType) - // byteWrapperType golang reflected type for protobuf bytes wrapper type. byteWrapperType = reflect.TypeOf(&wrapperspb.BytesValue{}) ) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/double.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/double.go index bda9f31a6bf0..027e789786b9 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/double.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/double.go @@ -20,7 +20,6 @@ import ( "reflect" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -32,15 +31,6 @@ import ( type Double float64 var ( - // DoubleType singleton. - DoubleType = NewTypeValue("double", - traits.AdderType, - traits.ComparerType, - traits.DividerType, - traits.MultiplierType, - traits.NegatorType, - traits.SubtractorType) - // doubleWrapperType reflected type for protobuf double wrapper type. doubleWrapperType = reflect.TypeOf(&wrapperspb.DoubleValue{}) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/duration.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/duration.go index c90ac1bee957..596e56d6b03e 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/duration.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/duration.go @@ -22,7 +22,6 @@ import ( "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" dpb "google.golang.org/protobuf/types/known/durationpb" @@ -41,13 +40,14 @@ func durationOf(d time.Duration) Duration { } var ( - // DurationType singleton. - DurationType = NewTypeValue("google.protobuf.Duration", - traits.AdderType, - traits.ComparerType, - traits.NegatorType, - traits.ReceiverType, - traits.SubtractorType) + durationValueType = reflect.TypeOf(&dpb.Duration{}) + + durationZeroArgOverloads = map[string]func(ref.Val) ref.Val{ + overloads.TimeGetHours: DurationGetHours, + overloads.TimeGetMinutes: DurationGetMinutes, + overloads.TimeGetSeconds: DurationGetSeconds, + overloads.TimeGetMilliseconds: DurationGetMilliseconds, + } ) // Add implements traits.Adder.Add. @@ -156,7 +156,7 @@ func (d Duration) Negate() ref.Val { func (d Duration) Receive(function string, overload string, args []ref.Val) ref.Val { if len(args) == 0 { if f, found := durationZeroArgOverloads[function]; found { - return f(d.Duration) + return f(d) } } return NoSuchOverloadErr() @@ -185,20 +185,38 @@ func (d Duration) Value() any { return d.Duration } -var ( - durationValueType = reflect.TypeOf(&dpb.Duration{}) +// DurationGetHours returns the duration in hours. +func DurationGetHours(val ref.Val) ref.Val { + dur, ok := val.(Duration) + if !ok { + return MaybeNoSuchOverloadErr(val) + } + return Int(dur.Hours()) +} - durationZeroArgOverloads = map[string]func(time.Duration) ref.Val{ - overloads.TimeGetHours: func(dur time.Duration) ref.Val { - return Int(dur.Hours()) - }, - overloads.TimeGetMinutes: func(dur time.Duration) ref.Val { - return Int(dur.Minutes()) - }, - overloads.TimeGetSeconds: func(dur time.Duration) ref.Val { - return Int(dur.Seconds()) - }, - overloads.TimeGetMilliseconds: func(dur time.Duration) ref.Val { - return Int(dur.Milliseconds()) - }} -) +// DurationGetMinutes returns duration in minutes. +func DurationGetMinutes(val ref.Val) ref.Val { + dur, ok := val.(Duration) + if !ok { + return MaybeNoSuchOverloadErr(val) + } + return Int(dur.Minutes()) +} + +// DurationGetSeconds returns duration in seconds. +func DurationGetSeconds(val ref.Val) ref.Val { + dur, ok := val.(Duration) + if !ok { + return MaybeNoSuchOverloadErr(val) + } + return Int(dur.Seconds()) +} + +// DurationGetMilliseconds returns duration in milliseconds. +func DurationGetMilliseconds(val ref.Val) ref.Val { + dur, ok := val.(Duration) + if !ok { + return MaybeNoSuchOverloadErr(val) + } + return Int(dur.Milliseconds()) +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/err.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/err.go index b4874d9d4d11..aa8f94b4f855 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/err.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/err.go @@ -35,7 +35,7 @@ type Err struct { var ( // ErrType singleton. - ErrType = NewTypeValue("error") + ErrType = NewOpaqueType("error") // errDivideByZero is an error indicating a division by zero of an integer value. errDivideByZero = errors.New("division by zero") @@ -129,6 +129,11 @@ func (e *Err) Is(target error) bool { return e.error.Error() == target.Error() } +// Unwrap implements errors.Unwrap. +func (e *Err) Unwrap() error { + return e.error +} + // IsError returns whether the input element ref.Type or ref.Val is equal to // the ErrType singleton. func IsError(val ref.Val) bool { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/int.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/int.go index f5a9511c8d1c..940772aed1f0 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/int.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/int.go @@ -22,7 +22,6 @@ import ( "time" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -41,16 +40,6 @@ const ( ) var ( - // IntType singleton. - IntType = NewTypeValue("int", - traits.AdderType, - traits.ComparerType, - traits.DividerType, - traits.ModderType, - traits.MultiplierType, - traits.NegatorType, - traits.SubtractorType) - // int32WrapperType reflected type for protobuf int32 wrapper type. int32WrapperType = reflect.TypeOf(&wrapperspb.Int32Value{}) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/iterator.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/iterator.go index 9f224ad4ffa3..98e9147b6ee8 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/iterator.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/iterator.go @@ -24,7 +24,7 @@ import ( var ( // IteratorType singleton. - IteratorType = NewTypeValue("iterator", traits.IteratorType) + IteratorType = NewObjectType("iterator", traits.IteratorType) ) // baseIterator is the basis for list, map, and object iterators. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/list.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/list.go index de5f2099bf79..d4932b4a90c5 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/list.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/list.go @@ -29,25 +29,15 @@ import ( structpb "google.golang.org/protobuf/types/known/structpb" ) -var ( - // ListType singleton. - ListType = NewTypeValue("list", - traits.AdderType, - traits.ContainerType, - traits.IndexerType, - traits.IterableType, - traits.SizerType) -) - // NewDynamicList returns a traits.Lister with heterogenous elements. // value should be an array of "native" types, i.e. any type that // NativeToValue() can convert to a ref.Val. -func NewDynamicList(adapter ref.TypeAdapter, value any) traits.Lister { +func NewDynamicList(adapter Adapter, value any) traits.Lister { refValue := reflect.ValueOf(value) return &baseList{ - TypeAdapter: adapter, - value: value, - size: refValue.Len(), + Adapter: adapter, + value: value, + size: refValue.Len(), get: func(i int) any { return refValue.Index(i).Interface() }, @@ -55,56 +45,56 @@ func NewDynamicList(adapter ref.TypeAdapter, value any) traits.Lister { } // NewStringList returns a traits.Lister containing only strings. -func NewStringList(adapter ref.TypeAdapter, elems []string) traits.Lister { +func NewStringList(adapter Adapter, elems []string) traits.Lister { return &baseList{ - TypeAdapter: adapter, - value: elems, - size: len(elems), - get: func(i int) any { return elems[i] }, + Adapter: adapter, + value: elems, + size: len(elems), + get: func(i int) any { return elems[i] }, } } // NewRefValList returns a traits.Lister with ref.Val elements. // // This type specialization is used with list literals within CEL expressions. -func NewRefValList(adapter ref.TypeAdapter, elems []ref.Val) traits.Lister { +func NewRefValList(adapter Adapter, elems []ref.Val) traits.Lister { return &baseList{ - TypeAdapter: adapter, - value: elems, - size: len(elems), - get: func(i int) any { return elems[i] }, + Adapter: adapter, + value: elems, + size: len(elems), + get: func(i int) any { return elems[i] }, } } // NewProtoList returns a traits.Lister based on a pb.List instance. -func NewProtoList(adapter ref.TypeAdapter, list protoreflect.List) traits.Lister { +func NewProtoList(adapter Adapter, list protoreflect.List) traits.Lister { return &baseList{ - TypeAdapter: adapter, - value: list, - size: list.Len(), - get: func(i int) any { return list.Get(i).Interface() }, + Adapter: adapter, + value: list, + size: list.Len(), + get: func(i int) any { return list.Get(i).Interface() }, } } // NewJSONList returns a traits.Lister based on structpb.ListValue instance. -func NewJSONList(adapter ref.TypeAdapter, l *structpb.ListValue) traits.Lister { +func NewJSONList(adapter Adapter, l *structpb.ListValue) traits.Lister { vals := l.GetValues() return &baseList{ - TypeAdapter: adapter, - value: l, - size: len(vals), - get: func(i int) any { return vals[i] }, + Adapter: adapter, + value: l, + size: len(vals), + get: func(i int) any { return vals[i] }, } } // NewMutableList creates a new mutable list whose internal state can be modified. -func NewMutableList(adapter ref.TypeAdapter) traits.MutableLister { +func NewMutableList(adapter Adapter) traits.MutableLister { var mutableValues []ref.Val l := &mutableList{ baseList: &baseList{ - TypeAdapter: adapter, - value: mutableValues, - size: 0, + Adapter: adapter, + value: mutableValues, + size: 0, }, mutableValues: mutableValues, } @@ -116,9 +106,9 @@ func NewMutableList(adapter ref.TypeAdapter) traits.MutableLister { // baseList points to a list containing elements of any type. // The `value` is an array of native values, and refValue is its reflection object. -// The `ref.TypeAdapter` enables native type to CEL type conversions. +// The `Adapter` enables native type to CEL type conversions. type baseList struct { - ref.TypeAdapter + Adapter value any // size indicates the number of elements within the list. @@ -143,9 +133,9 @@ func (l *baseList) Add(other ref.Val) ref.Val { return l } return &concatList{ - TypeAdapter: l.TypeAdapter, - prevList: l, - nextList: otherList} + Adapter: l.Adapter, + prevList: l, + nextList: otherList} } // Contains implements the traits.Container interface method. @@ -322,13 +312,13 @@ func (l *mutableList) Add(other ref.Val) ref.Val { func (l *mutableList) ToImmutableList() traits.Lister { // The reference to internal state is guaranteed to be safe as this call is only performed // when mutations have been completed. - return NewRefValList(l.TypeAdapter, l.mutableValues) + return NewRefValList(l.Adapter, l.mutableValues) } // concatList combines two list implementations together into a view. -// The `ref.TypeAdapter` enables native type to CEL type conversions. +// The `Adapter` enables native type to CEL type conversions. type concatList struct { - ref.TypeAdapter + Adapter value any prevList traits.Lister nextList traits.Lister @@ -347,9 +337,9 @@ func (l *concatList) Add(other ref.Val) ref.Val { return l } return &concatList{ - TypeAdapter: l.TypeAdapter, - prevList: l, - nextList: otherList} + Adapter: l.Adapter, + prevList: l, + nextList: otherList} } // Contains implements the traits.Container interface method. @@ -376,7 +366,7 @@ func (l *concatList) Contains(elem ref.Val) ref.Val { // ConvertToNative implements the ref.Val interface method. func (l *concatList) ConvertToNative(typeDesc reflect.Type) (any, error) { - combined := NewDynamicList(l.TypeAdapter, l.Value().([]any)) + combined := NewDynamicList(l.Adapter, l.Value().([]any)) return combined.ConvertToNative(typeDesc) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/map.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/map.go index 213be4ac9e33..739b7aab00d9 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/map.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/map.go @@ -32,10 +32,10 @@ import ( ) // NewDynamicMap returns a traits.Mapper value with dynamic key, value pairs. -func NewDynamicMap(adapter ref.TypeAdapter, value any) traits.Mapper { +func NewDynamicMap(adapter Adapter, value any) traits.Mapper { refValue := reflect.ValueOf(value) return &baseMap{ - TypeAdapter: adapter, + Adapter: adapter, mapAccessor: newReflectMapAccessor(adapter, refValue), value: value, size: refValue.Len(), @@ -46,10 +46,10 @@ func NewDynamicMap(adapter ref.TypeAdapter, value any) traits.Mapper { // encoded in protocol buffer form. // // The `adapter` argument provides type adaptation capabilities from proto to CEL. -func NewJSONStruct(adapter ref.TypeAdapter, value *structpb.Struct) traits.Mapper { +func NewJSONStruct(adapter Adapter, value *structpb.Struct) traits.Mapper { fields := value.GetFields() return &baseMap{ - TypeAdapter: adapter, + Adapter: adapter, mapAccessor: newJSONStructAccessor(adapter, fields), value: value, size: len(fields), @@ -57,9 +57,9 @@ func NewJSONStruct(adapter ref.TypeAdapter, value *structpb.Struct) traits.Mappe } // NewRefValMap returns a specialized traits.Mapper with CEL valued keys and values. -func NewRefValMap(adapter ref.TypeAdapter, value map[ref.Val]ref.Val) traits.Mapper { +func NewRefValMap(adapter Adapter, value map[ref.Val]ref.Val) traits.Mapper { return &baseMap{ - TypeAdapter: adapter, + Adapter: adapter, mapAccessor: newRefValMapAccessor(value), value: value, size: len(value), @@ -67,9 +67,9 @@ func NewRefValMap(adapter ref.TypeAdapter, value map[ref.Val]ref.Val) traits.Map } // NewStringInterfaceMap returns a specialized traits.Mapper with string keys and interface values. -func NewStringInterfaceMap(adapter ref.TypeAdapter, value map[string]any) traits.Mapper { +func NewStringInterfaceMap(adapter Adapter, value map[string]any) traits.Mapper { return &baseMap{ - TypeAdapter: adapter, + Adapter: adapter, mapAccessor: newStringIfaceMapAccessor(adapter, value), value: value, size: len(value), @@ -77,9 +77,9 @@ func NewStringInterfaceMap(adapter ref.TypeAdapter, value map[string]any) traits } // NewStringStringMap returns a specialized traits.Mapper with string keys and values. -func NewStringStringMap(adapter ref.TypeAdapter, value map[string]string) traits.Mapper { +func NewStringStringMap(adapter Adapter, value map[string]string) traits.Mapper { return &baseMap{ - TypeAdapter: adapter, + Adapter: adapter, mapAccessor: newStringMapAccessor(value), value: value, size: len(value), @@ -87,22 +87,13 @@ func NewStringStringMap(adapter ref.TypeAdapter, value map[string]string) traits } // NewProtoMap returns a specialized traits.Mapper for handling protobuf map values. -func NewProtoMap(adapter ref.TypeAdapter, value *pb.Map) traits.Mapper { +func NewProtoMap(adapter Adapter, value *pb.Map) traits.Mapper { return &protoMap{ - TypeAdapter: adapter, - value: value, + Adapter: adapter, + value: value, } } -var ( - // MapType singleton. - MapType = NewTypeValue("map", - traits.ContainerType, - traits.IndexerType, - traits.IterableType, - traits.SizerType) -) - // mapAccessor is a private interface for finding values within a map and iterating over the keys. // This interface implements portions of the API surface area required by the traits.Mapper // interface. @@ -121,7 +112,7 @@ type mapAccessor interface { // Since CEL is side-effect free, the base map represents an immutable object. type baseMap struct { // TypeAdapter used to convert keys and values accessed within the map. - ref.TypeAdapter + Adapter // mapAccessor interface implementation used to find and iterate over map keys. mapAccessor @@ -316,15 +307,15 @@ func (m *baseMap) Value() any { return m.value } -func newJSONStructAccessor(adapter ref.TypeAdapter, st map[string]*structpb.Value) mapAccessor { +func newJSONStructAccessor(adapter Adapter, st map[string]*structpb.Value) mapAccessor { return &jsonStructAccessor{ - TypeAdapter: adapter, - st: st, + Adapter: adapter, + st: st, } } type jsonStructAccessor struct { - ref.TypeAdapter + Adapter st map[string]*structpb.Value } @@ -359,17 +350,17 @@ func (a *jsonStructAccessor) Iterator() traits.Iterator { } } -func newReflectMapAccessor(adapter ref.TypeAdapter, value reflect.Value) mapAccessor { +func newReflectMapAccessor(adapter Adapter, value reflect.Value) mapAccessor { keyType := value.Type().Key() return &reflectMapAccessor{ - TypeAdapter: adapter, - refValue: value, - keyType: keyType, + Adapter: adapter, + refValue: value, + keyType: keyType, } } type reflectMapAccessor struct { - ref.TypeAdapter + Adapter refValue reflect.Value keyType reflect.Type } @@ -427,9 +418,9 @@ func (m *reflectMapAccessor) findInternal(key ref.Val) (ref.Val, bool) { // Iterator creates a Golang reflection based traits.Iterator. func (m *reflectMapAccessor) Iterator() traits.Iterator { return &mapIterator{ - TypeAdapter: m.TypeAdapter, - mapKeys: m.refValue.MapRange(), - len: m.refValue.Len(), + Adapter: m.Adapter, + mapKeys: m.refValue.MapRange(), + len: m.refValue.Len(), } } @@ -480,9 +471,9 @@ func (a *refValMapAccessor) Find(key ref.Val) (ref.Val, bool) { // Iterator produces a new traits.Iterator which iterates over the map keys via Golang reflection. func (a *refValMapAccessor) Iterator() traits.Iterator { return &mapIterator{ - TypeAdapter: DefaultTypeAdapter, - mapKeys: reflect.ValueOf(a.mapVal).MapRange(), - len: len(a.mapVal), + Adapter: DefaultTypeAdapter, + mapKeys: reflect.ValueOf(a.mapVal).MapRange(), + len: len(a.mapVal), } } @@ -524,15 +515,15 @@ func (a *stringMapAccessor) Iterator() traits.Iterator { } } -func newStringIfaceMapAccessor(adapter ref.TypeAdapter, mapVal map[string]any) mapAccessor { +func newStringIfaceMapAccessor(adapter Adapter, mapVal map[string]any) mapAccessor { return &stringIfaceMapAccessor{ - TypeAdapter: adapter, - mapVal: mapVal, + Adapter: adapter, + mapVal: mapVal, } } type stringIfaceMapAccessor struct { - ref.TypeAdapter + Adapter mapVal map[string]any } @@ -569,7 +560,7 @@ func (a *stringIfaceMapAccessor) Iterator() traits.Iterator { // protoMap is a specialized, separate implementation of the traits.Mapper interfaces tailored to // accessing protoreflect.Map values. type protoMap struct { - ref.TypeAdapter + Adapter value *pb.Map } @@ -772,9 +763,9 @@ func (m *protoMap) Iterator() traits.Iterator { return true }) return &protoMapIterator{ - TypeAdapter: m.TypeAdapter, - mapKeys: mapKeys, - len: m.value.Len(), + Adapter: m.Adapter, + mapKeys: mapKeys, + len: m.value.Len(), } } @@ -795,7 +786,7 @@ func (m *protoMap) Value() any { type mapIterator struct { *baseIterator - ref.TypeAdapter + Adapter mapKeys *reflect.MapIter cursor int len int @@ -818,7 +809,7 @@ func (it *mapIterator) Next() ref.Val { type protoMapIterator struct { *baseIterator - ref.TypeAdapter + Adapter mapKeys []protoreflect.MapKey cursor int len int diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/null.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/null.go index 38927a112cd6..926ca3dc980b 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/null.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/null.go @@ -30,8 +30,6 @@ import ( type Null structpb.NullValue var ( - // NullType singleton. - NullType = NewTypeValue("null_type") // NullValue singleton. NullValue = Null(structpb.NullValue_NULL_VALUE) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/object.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/object.go index 9955e2dce59b..8ba0af9fbe1c 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/object.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/object.go @@ -29,10 +29,10 @@ import ( ) type protoObj struct { - ref.TypeAdapter + Adapter value proto.Message typeDesc *pb.TypeDescription - typeValue *TypeValue + typeValue ref.Val } // NewObject returns an object based on a proto.Message value which handles @@ -42,15 +42,15 @@ type protoObj struct { // Note: the type value is pulled from the list of registered types within the // type provider. If the proto type is not registered within the type provider, // then this will result in an error within the type adapter / provider. -func NewObject(adapter ref.TypeAdapter, +func NewObject(adapter Adapter, typeDesc *pb.TypeDescription, - typeValue *TypeValue, + typeValue ref.Val, value proto.Message) ref.Val { return &protoObj{ - TypeAdapter: adapter, - value: value, - typeDesc: typeDesc, - typeValue: typeValue} + Adapter: adapter, + value: value, + typeDesc: typeDesc, + typeValue: typeValue} } func (o *protoObj) ConvertToNative(typeDesc reflect.Type) (any, error) { @@ -157,7 +157,7 @@ func (o *protoObj) Get(index ref.Val) ref.Val { } func (o *protoObj) Type() ref.Type { - return o.typeValue + return o.typeValue.(ref.Type) } func (o *protoObj) Value() any { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/optional.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/optional.go index 54cb35b1ab97..a9f30aed0157 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/optional.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/optional.go @@ -24,7 +24,7 @@ import ( var ( // OptionalType indicates the runtime type of an optional value. - OptionalType = NewTypeValue("optional") + OptionalType = NewOpaqueType("optional") // OptionalNone is a sentinel value which is used to indicate an empty optional value. OptionalNone = &Optional{} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/pb/type.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/pb/type.go index df9532156a06..6cc95c276dda 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/pb/type.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/pb/type.go @@ -285,7 +285,7 @@ func (fd *FieldDescription) GetFrom(target any) (any, error) { // IsEnum returns true if the field type refers to an enum value. func (fd *FieldDescription) IsEnum() bool { - return fd.desc.Kind() == protoreflect.EnumKind + return fd.ProtoKind() == protoreflect.EnumKind } // IsMap returns true if the field is of map type. @@ -295,7 +295,7 @@ func (fd *FieldDescription) IsMap() bool { // IsMessage returns true if the field is of message type. func (fd *FieldDescription) IsMessage() bool { - kind := fd.desc.Kind() + kind := fd.ProtoKind() return kind == protoreflect.MessageKind || kind == protoreflect.GroupKind } @@ -326,6 +326,11 @@ func (fd *FieldDescription) Name() string { return string(fd.desc.Name()) } +// ProtoKind returns the protobuf reflected kind of the field. +func (fd *FieldDescription) ProtoKind() protoreflect.Kind { + return fd.desc.Kind() +} + // ReflectType returns the Golang reflect.Type for this field. func (fd *FieldDescription) ReflectType() reflect.Type { return fd.reflectType @@ -345,17 +350,17 @@ func (fd *FieldDescription) Zero() proto.Message { } func (fd *FieldDescription) typeDefToType() *exprpb.Type { - if fd.desc.Kind() == protoreflect.MessageKind || fd.desc.Kind() == protoreflect.GroupKind { + if fd.IsMessage() { msgType := string(fd.desc.Message().FullName()) if wk, found := CheckedWellKnowns[msgType]; found { return wk } return checkedMessageType(msgType) } - if fd.desc.Kind() == protoreflect.EnumKind { + if fd.IsEnum() { return checkedInt } - return CheckedPrimitives[fd.desc.Kind()] + return CheckedPrimitives[fd.ProtoKind()] } // Map wraps the protoreflect.Map object with a key and value FieldDescription for use in @@ -463,13 +468,13 @@ func unwrapDynamic(desc description, refMsg protoreflect.Message) (any, bool, er unwrappedAny := &anypb.Any{} err := Merge(unwrappedAny, msg) if err != nil { - return nil, false, err + return nil, false, fmt.Errorf("unwrap dynamic field failed: %v", err) } dynMsg, err := unwrappedAny.UnmarshalNew() if err != nil { // Allow the error to move further up the stack as it should result in an type // conversion error if the caller does not recover it somehow. - return nil, false, err + return nil, false, fmt.Errorf("unmarshal dynamic any failed: %v", err) } // Attempt to unwrap the dynamic type, otherwise return the dynamic message. unwrapped, nested, err := unwrapDynamic(desc, dynMsg.ProtoReflect()) @@ -560,8 +565,10 @@ func zeroValueOf(msg proto.Message) proto.Message { } var ( + jsonValueTypeURL = "types.googleapis.com/google.protobuf.Value" + zeroValueMap = map[string]proto.Message{ - "google.protobuf.Any": &anypb.Any{}, + "google.protobuf.Any": &anypb.Any{TypeUrl: jsonValueTypeURL}, "google.protobuf.Duration": &dpb.Duration{}, "google.protobuf.ListValue": &structpb.ListValue{}, "google.protobuf.Struct": &structpb.Struct{}, diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/provider.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/provider.go index e66951f5b248..e80b4622e244 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/provider.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/provider.go @@ -33,17 +33,64 @@ import ( tpb "google.golang.org/protobuf/types/known/timestamppb" ) -type protoTypeRegistry struct { - revTypeMap map[string]ref.Type +// Adapter converts native Go values of varying type and complexity to equivalent CEL values. +type Adapter = ref.TypeAdapter + +// Provider specifies functions for creating new object instances and for resolving +// enum values by name. +type Provider interface { + // EnumValue returns the numeric value of the given enum value name. + EnumValue(enumName string) ref.Val + + // FindIdent takes a qualified identifier name and returns a ref.Val if one exists. + FindIdent(identName string) (ref.Val, bool) + + // FindStructType returns the Type give a qualified type name. + // + // For historical reasons, only struct types are expected to be returned through this + // method, and the type values are expected to be wrapped in a TypeType instance using + // TypeTypeWithParam(). + // + // Returns false if not found. + FindStructType(structType string) (*Type, bool) + + // FieldStructFieldType returns the field type for a checked type value. Returns + // false if the field could not be found. + FindStructFieldType(structType, fieldName string) (*FieldType, bool) + + // NewValue creates a new type value from a qualified name and map of field + // name to value. + // + // Note, for each value, the Val.ConvertToNative function will be invoked + // to convert the Val to the field's native type. If an error occurs during + // conversion, the NewValue will be a types.Err. + NewValue(structType string, fields map[string]ref.Val) ref.Val +} + +// FieldType represents a field's type value and whether that field supports presence detection. +type FieldType struct { + // Type of the field as a CEL native type value. + Type *Type + + // IsSet indicates whether the field is set on an input object. + IsSet ref.FieldTester + + // GetFrom retrieves the field value on the input object, if set. + GetFrom ref.FieldGetter +} + +// Registry provides type information for a set of registered types. +type Registry struct { + revTypeMap map[string]*Type pbdb *pb.Db } // NewRegistry accepts a list of proto message instances and returns a type // provider which can create new instances of the provided message or any // message that proto depends upon in its FileDescriptor. -func NewRegistry(types ...proto.Message) (ref.TypeRegistry, error) { - p := &protoTypeRegistry{ - revTypeMap: make(map[string]ref.Type), +func NewRegistry(types ...proto.Message) (*Registry, error) { + p := &Registry{ + revTypeMap: make(map[string]*Type), pbdb: pb.NewDb(), } err := p.RegisterType( @@ -79,18 +126,17 @@ func NewRegistry(types ...proto.Message) (ref.TypeRegistry, error) { } // NewEmptyRegistry returns a registry which is completely unconfigured. -func NewEmptyRegistry() ref.TypeRegistry { - return &protoTypeRegistry{ - revTypeMap: make(map[string]ref.Type), +func NewEmptyRegistry() *Registry { + return &Registry{ + revTypeMap: make(map[string]*Type), pbdb: pb.NewDb(), } } -// Copy implements the ref.TypeRegistry interface method which copies the current state of the -// registry into its own memory space. -func (p *protoTypeRegistry) Copy() ref.TypeRegistry { - copy := &protoTypeRegistry{ - revTypeMap: make(map[string]ref.Type), +// Copy copies the current state of the registry into its own memory space. +func (p *Registry) Copy() *Registry { + copy := &Registry{ + revTypeMap: make(map[string]*Type), pbdb: p.pbdb.Copy(), } for k, v := range p.revTypeMap { @@ -99,7 +145,8 @@ func (p *protoTypeRegistry) Copy() ref.TypeRegistry { return copy } -func (p *protoTypeRegistry) EnumValue(enumName string) ref.Val { +// EnumValue returns the numeric value of the given enum value name. +func (p *Registry) EnumValue(enumName string) ref.Val { enumVal, found := p.pbdb.DescribeEnum(enumName) if !found { return NewErr("unknown enum name '%s'", enumName) @@ -107,9 +154,12 @@ func (p *protoTypeRegistry) EnumValue(enumName string) ref.Val { return Int(enumVal.Value()) } -func (p *protoTypeRegistry) FindFieldType(messageType string, - fieldName string) (*ref.FieldType, bool) { - msgType, found := p.pbdb.DescribeType(messageType) +// FieldFieldType returns the field type for a checked type value. Returns false if +// the field could not be found. +// +// Deprecated: use FindStructFieldType +func (p *Registry) FindFieldType(structType, fieldName string) (*ref.FieldType, bool) { + msgType, found := p.pbdb.DescribeType(structType) if !found { return nil, false } @@ -118,15 +168,32 @@ func (p *protoTypeRegistry) FindFieldType(messageType string, return nil, false } return &ref.FieldType{ - Type: field.CheckedType(), - IsSet: field.IsSet, - GetFrom: field.GetFrom}, - true + Type: field.CheckedType(), + IsSet: field.IsSet, + GetFrom: field.GetFrom}, true +} + +// FieldStructFieldType returns the field type for a checked type value. Returns +// false if the field could not be found. +func (p *Registry) FindStructFieldType(structType, fieldName string) (*FieldType, bool) { + msgType, found := p.pbdb.DescribeType(structType) + if !found { + return nil, false + } + field, found := msgType.FieldByName(fieldName) + if !found { + return nil, false + } + return &FieldType{ + Type: fieldDescToCELType(field), + IsSet: field.IsSet, + GetFrom: field.GetFrom}, true } -func (p *protoTypeRegistry) FindIdent(identName string) (ref.Val, bool) { +// FindIdent takes a qualified identifier name and returns a ref.Val if one exists. +func (p *Registry) FindIdent(identName string) (ref.Val, bool) { if t, found := p.revTypeMap[identName]; found { - return t.(ref.Val), true + return t, true } if enumVal, found := p.pbdb.DescribeEnum(identName); found { return Int(enumVal.Value()), true @@ -134,24 +201,50 @@ func (p *protoTypeRegistry) FindIdent(identName string) (ref.Val, bool) { return nil, false } -func (p *protoTypeRegistry) FindType(typeName string) (*exprpb.Type, bool) { - if _, found := p.pbdb.DescribeType(typeName); !found { +// FindType looks up the Type given a qualified typeName. Returns false if not found. +// +// Deprecated: use FindStructType +func (p *Registry) FindType(structType string) (*exprpb.Type, bool) { + if _, found := p.pbdb.DescribeType(structType); !found { return nil, false } - if typeName != "" && typeName[0] == '.' { - typeName = typeName[1:] + if structType != "" && structType[0] == '.' { + structType = structType[1:] } return &exprpb.Type{ TypeKind: &exprpb.Type_Type{ Type: &exprpb.Type{ TypeKind: &exprpb.Type_MessageType{ - MessageType: typeName}}}}, true + MessageType: structType}}}}, true +} + +// FindStructType returns the Type give a qualified type name. +// +// For historical reasons, only struct types are expected to be returned through this +// method, and the type values are expected to be wrapped in a TypeType instance using +// TypeTypeWithParam(). +// +// Returns false if not found. +func (p *Registry) FindStructType(structType string) (*Type, bool) { + if _, found := p.pbdb.DescribeType(structType); !found { + return nil, false + } + if structType != "" && structType[0] == '.' { + structType = structType[1:] + } + return NewTypeTypeWithParam(NewObjectType(structType)), true } -func (p *protoTypeRegistry) NewValue(typeName string, fields map[string]ref.Val) ref.Val { - td, found := p.pbdb.DescribeType(typeName) +// NewValue creates a new type value from a qualified name and map of field +// name to value. +// +// Note, for each value, the Val.ConvertToNative function will be invoked +// to convert the Val to the field's native type. If an error occurs during +// conversion, the NewValue will be a types.Err. +func (p *Registry) NewValue(structType string, fields map[string]ref.Val) ref.Val { + td, found := p.pbdb.DescribeType(structType) if !found { - return NewErr("unknown type '%s'", typeName) + return NewErr("unknown type '%s'", structType) } msg := td.New() fieldMap := td.FieldMap() @@ -168,7 +261,8 @@ func (p *protoTypeRegistry) NewValue(typeName string, fields map[string]ref.Val) return p.NativeToValue(msg.Interface()) } -func (p *protoTypeRegistry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error { +// RegisterDescriptor registers the contents of a protocol buffer `FileDescriptor`. +func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error { fd, err := p.pbdb.RegisterDescriptor(fileDesc) if err != nil { return err @@ -176,7 +270,8 @@ func (p *protoTypeRegistry) RegisterDescriptor(fileDesc protoreflect.FileDescrip return p.registerAllTypes(fd) } -func (p *protoTypeRegistry) RegisterMessage(message proto.Message) error { +// RegisterMessage registers a protocol buffer message and its dependencies. +func (p *Registry) RegisterMessage(message proto.Message) error { fd, err := p.pbdb.RegisterMessage(message) if err != nil { return err @@ -184,11 +279,32 @@ func (p *protoTypeRegistry) RegisterMessage(message proto.Message) error { return p.registerAllTypes(fd) } -func (p *protoTypeRegistry) RegisterType(types ...ref.Type) error { +// RegisterType registers a type value with the provider which ensures the provider is aware of how to +// map the type to an identifier. +// +// If the `ref.Type` value is a `*types.Type` it will be registered directly by its runtime type name. +// If the `ref.Type` value is not a `*types.Type` instance, a `*types.Type` instance which reflects the +// traits present on the input and the runtime type name. By default this foreign type will be treated +// as a types.StructKind. To avoid potential issues where the `ref.Type` values does not match the +// generated `*types.Type` instance, consider always using the `*types.Type` to represent type extensions +// to CEL, even when they're not based on protobuf types. +func (p *Registry) RegisterType(types ...ref.Type) error { for _, t := range types { - p.revTypeMap[t.TypeName()] = t + celType := maybeForeignType(t) + existing, found := p.revTypeMap[t.TypeName()] + if !found { + p.revTypeMap[t.TypeName()] = celType + continue + } + if !existing.IsEquivalentType(celType) { + return fmt.Errorf("type registration conflict. found: %v, input: %v", existing, celType) + } + if existing.traitMask != celType.traitMask { + return fmt.Errorf( + "type registered with conflicting traits: %v with traits %v, input: %v", + existing.TypeName(), existing.traitMask, celType.traitMask) + } } - // TODO: generate an error when the type name is registered more than once. return nil } @@ -196,7 +312,7 @@ func (p *protoTypeRegistry) RegisterType(types ...ref.Type) error { // providing support for custom proto-based types. // // This method should be the inverse of ref.Val.ConvertToNative. -func (p *protoTypeRegistry) NativeToValue(value any) ref.Val { +func (p *Registry) NativeToValue(value any) ref.Val { if val, found := nativeToValue(p, value); found { return val } @@ -218,7 +334,7 @@ func (p *protoTypeRegistry) NativeToValue(value any) ref.Val { if !found { return NewErr("unknown type: '%s'", typeName) } - return NewObject(p, td, typeVal.(*TypeValue), v) + return NewObject(p, td, typeVal, v) case *pb.Map: return NewProtoMap(p, v) case protoreflect.List: @@ -231,8 +347,13 @@ func (p *protoTypeRegistry) NativeToValue(value any) ref.Val { return UnsupportedRefValConversionErr(value) } -func (p *protoTypeRegistry) registerAllTypes(fd *pb.FileDescription) error { +func (p *Registry) registerAllTypes(fd *pb.FileDescription) error { for _, typeName := range fd.GetTypeNames() { + // skip well-known type names since they're automatically sanitized + // during NewObjectType() calls. + if _, found := checkedWellKnowns[typeName]; found { + continue + } err := p.RegisterType(NewObjectTypeValue(typeName)) if err != nil { return err @@ -241,6 +362,28 @@ func (p *protoTypeRegistry) registerAllTypes(fd *pb.FileDescription) error { return nil } +func fieldDescToCELType(field *pb.FieldDescription) *Type { + if field.IsMap() { + return NewMapType( + singularFieldDescToCELType(field.KeyType), + singularFieldDescToCELType(field.ValueType)) + } + if field.IsList() { + return NewListType(singularFieldDescToCELType(field)) + } + return singularFieldDescToCELType(field) +} + +func singularFieldDescToCELType(field *pb.FieldDescription) *Type { + if field.IsMessage() { + return NewObjectType(string(field.Descriptor().Message().FullName())) + } + if field.IsEnum() { + return IntType + } + return ProtoCELPrimitives[field.ProtoKind()] +} + // defaultTypeAdapter converts go native types to CEL values. type defaultTypeAdapter struct{} @@ -259,7 +402,7 @@ func (a *defaultTypeAdapter) NativeToValue(value any) ref.Val { // nativeToValue returns the converted (ref.Val, true) of a conversion is found, // otherwise (nil, false) -func nativeToValue(a ref.TypeAdapter, value any) (ref.Val, bool) { +func nativeToValue(a Adapter, value any) (ref.Val, bool) { switch v := value.(type) { case nil: return NullValue, true @@ -547,3 +690,24 @@ func fieldTypeConversionError(field *pb.FieldDescription, err error) error { msgName := field.Descriptor().ContainingMessage().FullName() return fmt.Errorf("field type conversion error for %v.%v value type: %v", msgName, field.Name(), err) } + +var ( + // ProtoCELPrimitives provides a map from the protoreflect Kind to the equivalent CEL type. + ProtoCELPrimitives = map[protoreflect.Kind]*Type{ + protoreflect.BoolKind: BoolType, + protoreflect.BytesKind: BytesType, + protoreflect.DoubleKind: DoubleType, + protoreflect.FloatKind: DoubleType, + protoreflect.Int32Kind: IntType, + protoreflect.Int64Kind: IntType, + protoreflect.Sint32Kind: IntType, + protoreflect.Sint64Kind: IntType, + protoreflect.Uint32Kind: UintType, + protoreflect.Uint64Kind: UintType, + protoreflect.Fixed32Kind: UintType, + protoreflect.Fixed64Kind: UintType, + protoreflect.Sfixed32Kind: IntType, + protoreflect.Sfixed64Kind: IntType, + protoreflect.StringKind: StringType, + } +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/ref/provider.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/ref/provider.go index 7eabbb9ca388..b9820023d6f5 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/ref/provider.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/ref/provider.go @@ -23,34 +23,34 @@ import ( // TypeProvider specifies functions for creating new object instances and for // resolving enum values by name. +// +// Deprecated: use types.Provider type TypeProvider interface { // EnumValue returns the numeric value of the given enum value name. EnumValue(enumName string) Val - // FindIdent takes a qualified identifier name and returns a Value if one - // exists. + // FindIdent takes a qualified identifier name and returns a Value if one exists. FindIdent(identName string) (Val, bool) - // FindType looks up the Type given a qualified typeName. Returns false - // if not found. - // - // Used during type-checking only. + // FindType looks up the Type given a qualified typeName. Returns false if not found. FindType(typeName string) (*exprpb.Type, bool) - // FieldFieldType returns the field type for a checked type value. Returns - // false if the field could not be found. - FindFieldType(messageType string, fieldName string) (*FieldType, bool) + // FieldFieldType returns the field type for a checked type value. Returns false if + // the field could not be found. + FindFieldType(messageType, fieldName string) (*FieldType, bool) - // NewValue creates a new type value from a qualified name and map of field - // name to value. + // NewValue creates a new type value from a qualified name and map of field name + // to value. // - // Note, for each value, the Val.ConvertToNative function will be invoked - // to convert the Val to the field's native type. If an error occurs during - // conversion, the NewValue will be a types.Err. + // Note, for each value, the Val.ConvertToNative function will be invoked to convert + // the Val to the field's native type. If an error occurs during conversion, the + // NewValue will be a types.Err. NewValue(typeName string, fields map[string]Val) Val } // TypeAdapter converts native Go values of varying type and complexity to equivalent CEL values. +// +// Deprecated: use types.Adapter type TypeAdapter interface { // NativeToValue converts the input `value` to a CEL `ref.Val`. NativeToValue(value any) Val @@ -60,6 +60,8 @@ type TypeAdapter interface { // implementations support type-customization, so these features are optional. However, a // `TypeRegistry` should be a `TypeProvider` and a `TypeAdapter` to ensure that types // which are registered can be converted to CEL representations. +// +// Deprecated: use types.Registry type TypeRegistry interface { TypeAdapter TypeProvider @@ -76,15 +78,14 @@ type TypeRegistry interface { // If a type is provided more than once with an alternative definition, the // call will result in an error. RegisterType(types ...Type) error - - // Copy the TypeRegistry and return a new registry whose mutable state is isolated. - Copy() TypeRegistry } // FieldType represents a field's type value and whether that field supports // presence detection. +// +// Deprecated: use types.FieldType type FieldType struct { - // Type of the field. + // Type of the field as a protobuf type value. Type *exprpb.Type // IsSet indicates whether the field is set on an input object. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/string.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/string.go index a65cc14e4c50..028e6824d220 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/string.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/string.go @@ -24,7 +24,6 @@ import ( "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -36,18 +35,10 @@ import ( type String string var ( - // StringType singleton. - StringType = NewTypeValue("string", - traits.AdderType, - traits.ComparerType, - traits.MatcherType, - traits.ReceiverType, - traits.SizerType) - - stringOneArgOverloads = map[string]func(String, ref.Val) ref.Val{ - overloads.Contains: stringContains, - overloads.EndsWith: stringEndsWith, - overloads.StartsWith: stringStartsWith, + stringOneArgOverloads = map[string]func(ref.Val, ref.Val) ref.Val{ + overloads.Contains: StringContains, + overloads.EndsWith: StringEndsWith, + overloads.StartsWith: StringStartsWith, } stringWrapperType = reflect.TypeOf(&wrapperspb.StringValue{}) @@ -198,26 +189,41 @@ func (s String) Value() any { return string(s) } -func stringContains(s String, sub ref.Val) ref.Val { +// StringContains returns whether the string contains a substring. +func StringContains(s, sub ref.Val) ref.Val { + str, ok := s.(String) + if !ok { + return MaybeNoSuchOverloadErr(s) + } subStr, ok := sub.(String) if !ok { return MaybeNoSuchOverloadErr(sub) } - return Bool(strings.Contains(string(s), string(subStr))) + return Bool(strings.Contains(string(str), string(subStr))) } -func stringEndsWith(s String, suf ref.Val) ref.Val { +// StringEndsWith returns whether the target string contains the input suffix. +func StringEndsWith(s, suf ref.Val) ref.Val { + str, ok := s.(String) + if !ok { + return MaybeNoSuchOverloadErr(s) + } sufStr, ok := suf.(String) if !ok { return MaybeNoSuchOverloadErr(suf) } - return Bool(strings.HasSuffix(string(s), string(sufStr))) + return Bool(strings.HasSuffix(string(str), string(sufStr))) } -func stringStartsWith(s String, pre ref.Val) ref.Val { +// StringStartsWith returns whether the target string contains the input prefix. +func StringStartsWith(s, pre ref.Val) ref.Val { + str, ok := s.(String) + if !ok { + return MaybeNoSuchOverloadErr(s) + } preStr, ok := pre.(String) if !ok { return MaybeNoSuchOverloadErr(pre) } - return Bool(strings.HasPrefix(string(s), string(preStr))) + return Bool(strings.HasPrefix(string(str), string(preStr))) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/timestamp.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/timestamp.go index c784f2e54be4..33acdea8ef7c 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/timestamp.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/timestamp.go @@ -23,7 +23,6 @@ import ( "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -53,15 +52,6 @@ const ( maxUnixTime int64 = 253402300799 ) -var ( - // TimestampType singleton. - TimestampType = NewTypeValue("google.protobuf.Timestamp", - traits.AdderType, - traits.ComparerType, - traits.ReceiverType, - traits.SubtractorType) -) - // Add implements traits.Adder.Add. func (t Timestamp) Add(other ref.Val) ref.Val { switch other.Type() { diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/type.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/type.go deleted file mode 100644 index 164a4605033a..000000000000 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/type.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "reflect" - - "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" -) - -var ( - // TypeType is the type of a TypeValue. - TypeType = NewTypeValue("type") -) - -// TypeValue is an instance of a Value that describes a value's type. -type TypeValue struct { - name string - traitMask int -} - -// NewTypeValue returns *TypeValue which is both a ref.Type and ref.Val. -func NewTypeValue(name string, traits ...int) *TypeValue { - traitMask := 0 - for _, trait := range traits { - traitMask |= trait - } - return &TypeValue{ - name: name, - traitMask: traitMask} -} - -// NewObjectTypeValue returns a *TypeValue based on the input name, which is -// annotated with the traits relevant to all objects. -func NewObjectTypeValue(name string) *TypeValue { - return NewTypeValue(name, - traits.FieldTesterType, - traits.IndexerType) -} - -// ConvertToNative implements ref.Val.ConvertToNative. -func (t *TypeValue) ConvertToNative(typeDesc reflect.Type) (any, error) { - // TODO: replace the internal type representation with a proto-value. - return nil, fmt.Errorf("type conversion not supported for 'type'") -} - -// ConvertToType implements ref.Val.ConvertToType. -func (t *TypeValue) ConvertToType(typeVal ref.Type) ref.Val { - switch typeVal { - case TypeType: - return TypeType - case StringType: - return String(t.TypeName()) - } - return NewErr("type conversion error from '%s' to '%s'", TypeType, typeVal) -} - -// Equal implements ref.Val.Equal. -func (t *TypeValue) Equal(other ref.Val) ref.Val { - otherType, ok := other.(ref.Type) - return Bool(ok && t.TypeName() == otherType.TypeName()) -} - -// HasTrait indicates whether the type supports the given trait. -// Trait codes are defined in the traits package, e.g. see traits.AdderType. -func (t *TypeValue) HasTrait(trait int) bool { - return trait&t.traitMask == trait -} - -// String implements fmt.Stringer. -func (t *TypeValue) String() string { - return t.name -} - -// Type implements ref.Val.Type. -func (t *TypeValue) Type() ref.Type { - return TypeType -} - -// TypeName gives the type's name as a string. -func (t *TypeValue) TypeName() string { - return t.name -} - -// Value implements ref.Val.Value. -func (t *TypeValue) Value() any { - return t.name -} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/types.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/types.go new file mode 100644 index 000000000000..76624eefdee3 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/types.go @@ -0,0 +1,806 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "fmt" + "reflect" + "strings" + + chkdecls "github.com/google/cel-go/checker/decls" + "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/common/types/traits" + + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" +) + +// Kind indicates a CEL type's kind which is used to differentiate quickly between simple +// and complex types. +type Kind uint + +const ( + // UnspecifiedKind is returned when the type is nil or its kind is not specified. + UnspecifiedKind Kind = iota + + // DynKind represents a dynamic type. This kind only exists at type-check time. + DynKind + + // AnyKind represents a google.protobuf.Any type. This kind only exists at type-check time. + // Prefer DynKind to AnyKind as AnyKind has a specific meaning which is based on protobuf + // well-known types. + AnyKind + + // BoolKind represents a boolean type. + BoolKind + + // BytesKind represents a bytes type. + BytesKind + + // DoubleKind represents a double type. + DoubleKind + + // DurationKind represents a CEL duration type. + DurationKind + + // ErrorKind represents a CEL error type. + ErrorKind + + // IntKind represents an integer type. + IntKind + + // ListKind represents a list type. + ListKind + + // MapKind represents a map type. + MapKind + + // NullTypeKind represents a null type. + NullTypeKind + + // OpaqueKind represents an abstract type which has no accessible fields. + OpaqueKind + + // StringKind represents a string type. + StringKind + + // StructKind represents a structured object with typed fields. + StructKind + + // TimestampKind represents a a CEL time type. + TimestampKind + + // TypeKind represents the CEL type. + TypeKind + + // TypeParamKind represents a parameterized type whose type name will be resolved at type-check time, if possible. + TypeParamKind + + // UintKind represents a uint type. + UintKind + + // UnknownKind represents an unknown value type. + UnknownKind +) + +var ( + // AnyType represents the google.protobuf.Any type. + AnyType = &Type{ + kind: AnyKind, + runtimeTypeName: "google.protobuf.Any", + traitMask: traits.FieldTesterType | + traits.IndexerType, + } + // BoolType represents the bool type. + BoolType = &Type{ + kind: BoolKind, + runtimeTypeName: "bool", + traitMask: traits.ComparerType | + traits.NegatorType, + } + // BytesType represents the bytes type. + BytesType = &Type{ + kind: BytesKind, + runtimeTypeName: "bytes", + traitMask: traits.AdderType | + traits.ComparerType | + traits.SizerType, + } + // DoubleType represents the double type. + DoubleType = &Type{ + kind: DoubleKind, + runtimeTypeName: "double", + traitMask: traits.AdderType | + traits.ComparerType | + traits.DividerType | + traits.MultiplierType | + traits.NegatorType | + traits.SubtractorType, + } + // DurationType represents the CEL duration type. + DurationType = &Type{ + kind: DurationKind, + runtimeTypeName: "google.protobuf.Duration", + traitMask: traits.AdderType | + traits.ComparerType | + traits.NegatorType | + traits.ReceiverType | + traits.SubtractorType, + } + // DynType represents a dynamic CEL type whose type will be determined at runtime from context. + DynType = &Type{ + kind: DynKind, + runtimeTypeName: "dyn", + } + // ErrorType represents a CEL error value. + ErrorType = &Type{ + kind: ErrorKind, + runtimeTypeName: "error", + } + // IntType represents the int type. + IntType = &Type{ + kind: IntKind, + runtimeTypeName: "int", + traitMask: traits.AdderType | + traits.ComparerType | + traits.DividerType | + traits.ModderType | + traits.MultiplierType | + traits.NegatorType | + traits.SubtractorType, + } + // ListType represents the runtime list type. + ListType = NewListType(nil) + // MapType represents the runtime map type. + MapType = NewMapType(nil, nil) + // NullType represents the type of a null value. + NullType = &Type{ + kind: NullTypeKind, + runtimeTypeName: "null_type", + } + // StringType represents the string type. + StringType = &Type{ + kind: StringKind, + runtimeTypeName: "string", + traitMask: traits.AdderType | + traits.ComparerType | + traits.MatcherType | + traits.ReceiverType | + traits.SizerType, + } + // TimestampType represents the time type. + TimestampType = &Type{ + kind: TimestampKind, + runtimeTypeName: "google.protobuf.Timestamp", + traitMask: traits.AdderType | + traits.ComparerType | + traits.ReceiverType | + traits.SubtractorType, + } + // TypeType represents a CEL type + TypeType = &Type{ + kind: TypeKind, + runtimeTypeName: "type", + } + // UintType represents a uint type. + UintType = &Type{ + kind: UintKind, + runtimeTypeName: "uint", + traitMask: traits.AdderType | + traits.ComparerType | + traits.DividerType | + traits.ModderType | + traits.MultiplierType | + traits.SubtractorType, + } + // UnknownType represents an unknown value type. + UnknownType = &Type{ + kind: UnknownKind, + runtimeTypeName: "unknown", + } +) + +var _ ref.Type = &Type{} +var _ ref.Val = &Type{} + +// Type holds a reference to a runtime type with an optional type-checked set of type parameters. +type Type struct { + // kind indicates general category of the type. + kind Kind + + // parameters holds the optional type-checked set of type Parameters that are used during static analysis. + parameters []*Type + + // runtimeTypeName indicates the runtime type name of the type. + runtimeTypeName string + + // isAssignableType function determines whether one type is assignable to this type. + // A nil value for the isAssignableType function falls back to equality of kind, runtimeType, and parameters. + isAssignableType func(other *Type) bool + + // isAssignableRuntimeType function determines whether the runtime type (with erasure) is assignable to this type. + // A nil value for the isAssignableRuntimeType function falls back to the equality of the type or type name. + isAssignableRuntimeType func(other ref.Val) bool + + // traitMask is a mask of flags which indicate the capabilities of the type. + traitMask int +} + +// ConvertToNative implements ref.Val.ConvertToNative. +func (t *Type) ConvertToNative(typeDesc reflect.Type) (any, error) { + return nil, fmt.Errorf("type conversion not supported for 'type'") +} + +// ConvertToType implements ref.Val.ConvertToType. +func (t *Type) ConvertToType(typeVal ref.Type) ref.Val { + switch typeVal { + case TypeType: + return TypeType + case StringType: + return String(t.TypeName()) + } + return NewErr("type conversion error from '%s' to '%s'", TypeType, typeVal) +} + +// Equal indicates whether two types have the same runtime type name. +// +// The name Equal is a bit of a misnomer, but for historical reasons, this is the +// runtime behavior. For a more accurate definition see IsType(). +func (t *Type) Equal(other ref.Val) ref.Val { + otherType, ok := other.(ref.Type) + return Bool(ok && t.TypeName() == otherType.TypeName()) +} + +// HasTrait implements the ref.Type interface method. +func (t *Type) HasTrait(trait int) bool { + return trait&t.traitMask == trait +} + +// IsExactType indicates whether the two types are exactly the same. This check also verifies type parameter type names. +func (t *Type) IsExactType(other *Type) bool { + return t.isTypeInternal(other, true) +} + +// IsEquivalentType indicates whether two types are equivalent. This check ignores type parameter type names. +func (t *Type) IsEquivalentType(other *Type) bool { + return t.isTypeInternal(other, false) +} + +// Kind indicates general category of the type. +func (t *Type) Kind() Kind { + if t == nil { + return UnspecifiedKind + } + return t.kind +} + +// isTypeInternal checks whether the two types are equivalent or exactly the same based on the checkTypeParamName flag. +func (t *Type) isTypeInternal(other *Type, checkTypeParamName bool) bool { + if t == nil { + return false + } + if t == other { + return true + } + if t.Kind() != other.Kind() || len(t.Parameters()) != len(other.Parameters()) { + return false + } + if (checkTypeParamName || t.Kind() != TypeParamKind) && t.TypeName() != other.TypeName() { + return false + } + for i, p := range t.Parameters() { + if !p.isTypeInternal(other.Parameters()[i], checkTypeParamName) { + return false + } + } + return true +} + +// IsAssignableType determines whether the current type is type-check assignable from the input fromType. +func (t *Type) IsAssignableType(fromType *Type) bool { + if t == nil { + return false + } + if t.isAssignableType != nil { + return t.isAssignableType(fromType) + } + return t.defaultIsAssignableType(fromType) +} + +// IsAssignableRuntimeType determines whether the current type is runtime assignable from the input runtimeType. +// +// At runtime, parameterized types are erased and so a function which type-checks to support a map(string, string) +// will have a runtime assignable type of a map. +func (t *Type) IsAssignableRuntimeType(val ref.Val) bool { + if t == nil { + return false + } + if t.isAssignableRuntimeType != nil { + return t.isAssignableRuntimeType(val) + } + return t.defaultIsAssignableRuntimeType(val) +} + +// Parameters returns the list of type parameters if set. +// +// For ListKind, Parameters()[0] represents the list element type +// For MapKind, Parameters()[0] represents the map key type, and Parameters()[1] represents the map +// value type. +func (t *Type) Parameters() []*Type { + if t == nil { + return emptyParams + } + return t.parameters +} + +// DeclaredTypeName indicates the fully qualified and parameterized type-check type name. +func (t *Type) DeclaredTypeName() string { + // if the type itself is neither null, nor dyn, but is assignable to null, then it's a wrapper type. + if t.Kind() != NullTypeKind && !t.isDyn() && t.IsAssignableType(NullType) { + return fmt.Sprintf("wrapper(%s)", t.TypeName()) + } + return t.TypeName() +} + +// Type implements the ref.Val interface method. +func (t *Type) Type() ref.Type { + return TypeType +} + +// Value implements the ref.Val interface method. +func (t *Type) Value() any { + return t.TypeName() +} + +// TypeName returns the type-erased fully qualified runtime type name. +// +// TypeName implements the ref.Type interface method. +func (t *Type) TypeName() string { + if t == nil { + return "" + } + return t.runtimeTypeName +} + +// String returns a human-readable definition of the type name. +func (t *Type) String() string { + if len(t.Parameters()) == 0 { + return t.DeclaredTypeName() + } + params := make([]string, len(t.Parameters())) + for i, p := range t.Parameters() { + params[i] = p.String() + } + return fmt.Sprintf("%s(%s)", t.DeclaredTypeName(), strings.Join(params, ", ")) +} + +// isDyn indicates whether the type is dynamic in any way. +func (t *Type) isDyn() bool { + k := t.Kind() + return k == DynKind || k == AnyKind || k == TypeParamKind +} + +// defaultIsAssignableType provides the standard definition of what it means for one type to be assignable to another +// where any of the following may return a true result: +// - The from types are the same instance +// - The target type is dynamic +// - The fromType has the same kind and type name as the target type, and all parameters of the target type +// +// are IsAssignableType() from the parameters of the fromType. +func (t *Type) defaultIsAssignableType(fromType *Type) bool { + if t == fromType || t.isDyn() { + return true + } + if t.Kind() != fromType.Kind() || + t.TypeName() != fromType.TypeName() || + len(t.Parameters()) != len(fromType.Parameters()) { + return false + } + for i, tp := range t.Parameters() { + fp := fromType.Parameters()[i] + if !tp.IsAssignableType(fp) { + return false + } + } + return true +} + +// defaultIsAssignableRuntimeType inspects the type and in the case of list and map elements, the key and element types +// to determine whether a ref.Val is assignable to the declared type for a function signature. +func (t *Type) defaultIsAssignableRuntimeType(val ref.Val) bool { + valType := val.Type() + // If the current type and value type don't agree, then return + if !(t.isDyn() || t.TypeName() == valType.TypeName()) { + return false + } + switch t.Kind() { + case ListKind: + elemType := t.Parameters()[0] + l := val.(traits.Lister) + if l.Size() == IntZero { + return true + } + it := l.Iterator() + elemVal := it.Next() + return elemType.IsAssignableRuntimeType(elemVal) + case MapKind: + keyType := t.Parameters()[0] + elemType := t.Parameters()[1] + m := val.(traits.Mapper) + if m.Size() == IntZero { + return true + } + it := m.Iterator() + keyVal := it.Next() + elemVal := m.Get(keyVal) + return keyType.IsAssignableRuntimeType(keyVal) && elemType.IsAssignableRuntimeType(elemVal) + } + return true +} + +// NewListType creates an instances of a list type value with the provided element type. +func NewListType(elemType *Type) *Type { + return &Type{ + kind: ListKind, + parameters: []*Type{elemType}, + runtimeTypeName: "list", + traitMask: traits.AdderType | + traits.ContainerType | + traits.IndexerType | + traits.IterableType | + traits.SizerType, + } +} + +// NewMapType creates an instance of a map type value with the provided key and value types. +func NewMapType(keyType, valueType *Type) *Type { + return &Type{ + kind: MapKind, + parameters: []*Type{keyType, valueType}, + runtimeTypeName: "map", + traitMask: traits.ContainerType | + traits.IndexerType | + traits.IterableType | + traits.SizerType, + } +} + +// NewNullableType creates an instance of a nullable type with the provided wrapped type. +// +// Note: only primitive types are supported as wrapped types. +func NewNullableType(wrapped *Type) *Type { + return &Type{ + kind: wrapped.Kind(), + parameters: wrapped.Parameters(), + runtimeTypeName: wrapped.TypeName(), + traitMask: wrapped.traitMask, + isAssignableType: func(other *Type) bool { + return NullType.IsAssignableType(other) || wrapped.IsAssignableType(other) + }, + isAssignableRuntimeType: func(other ref.Val) bool { + return NullType.IsAssignableRuntimeType(other) || wrapped.IsAssignableRuntimeType(other) + }, + } +} + +// NewOptionalType creates an abstract parameterized type instance corresponding to CEL's notion of optional. +func NewOptionalType(param *Type) *Type { + return NewOpaqueType("optional", param) +} + +// NewOpaqueType creates an abstract parameterized type with a given name. +func NewOpaqueType(name string, params ...*Type) *Type { + return &Type{ + kind: OpaqueKind, + parameters: params, + runtimeTypeName: name, + } +} + +// NewObjectType creates a type reference to an externally defined type, e.g. a protobuf message type. +// +// An object type is assumed to support field presence testing and field indexing. Additionally, the +// type may also indicate additional traits through the use of the optional traits vararg argument. +func NewObjectType(typeName string, traits ...int) *Type { + // Function sanitizes object types on the fly + if wkt, found := checkedWellKnowns[typeName]; found { + return wkt + } + traitMask := 0 + for _, trait := range traits { + traitMask |= trait + } + return &Type{ + kind: StructKind, + parameters: emptyParams, + runtimeTypeName: typeName, + traitMask: structTypeTraitMask | traitMask, + } +} + +// NewObjectTypeValue creates a type reference to an externally defined type. +// +// Deprecated: use cel.ObjectType(typeName) +func NewObjectTypeValue(typeName string) *Type { + return NewObjectType(typeName) +} + +// NewTypeValue creates an opaque type which has a set of optional type traits as defined in +// the common/types/traits package. +// +// Deprecated: use cel.ObjectType(typeName, traits) +func NewTypeValue(typeName string, traits ...int) *Type { + traitMask := 0 + for _, trait := range traits { + traitMask |= trait + } + return &Type{ + kind: StructKind, + parameters: emptyParams, + runtimeTypeName: typeName, + traitMask: traitMask, + } +} + +// NewTypeParamType creates a parameterized type instance. +func NewTypeParamType(paramName string) *Type { + return &Type{ + kind: TypeParamKind, + runtimeTypeName: paramName, + } +} + +// NewTypeTypeWithParam creates a type with a type parameter. +// Used for type-checking purposes, but equivalent to TypeType otherwise. +func NewTypeTypeWithParam(param *Type) *Type { + return &Type{ + kind: TypeKind, + runtimeTypeName: "type", + parameters: []*Type{param}, + } +} + +// TypeToExprType converts a CEL-native type representation to a protobuf CEL Type representation. +func TypeToExprType(t *Type) (*exprpb.Type, error) { + switch t.Kind() { + case AnyKind: + return chkdecls.Any, nil + case BoolKind: + return maybeWrapper(t, chkdecls.Bool), nil + case BytesKind: + return maybeWrapper(t, chkdecls.Bytes), nil + case DoubleKind: + return maybeWrapper(t, chkdecls.Double), nil + case DurationKind: + return chkdecls.Duration, nil + case DynKind: + return chkdecls.Dyn, nil + case ErrorKind: + return chkdecls.Error, nil + case IntKind: + return maybeWrapper(t, chkdecls.Int), nil + case ListKind: + if len(t.Parameters()) != 1 { + return nil, fmt.Errorf("invalid list, got %d parameters, wanted one", len(t.Parameters())) + } + et, err := TypeToExprType(t.Parameters()[0]) + if err != nil { + return nil, err + } + return chkdecls.NewListType(et), nil + case MapKind: + if len(t.Parameters()) != 2 { + return nil, fmt.Errorf("invalid map, got %d parameters, wanted two", len(t.Parameters())) + } + kt, err := TypeToExprType(t.Parameters()[0]) + if err != nil { + return nil, err + } + vt, err := TypeToExprType(t.Parameters()[1]) + if err != nil { + return nil, err + } + return chkdecls.NewMapType(kt, vt), nil + case NullTypeKind: + return chkdecls.Null, nil + case OpaqueKind: + params := make([]*exprpb.Type, len(t.Parameters())) + for i, p := range t.Parameters() { + pt, err := TypeToExprType(p) + if err != nil { + return nil, err + } + params[i] = pt + } + return chkdecls.NewAbstractType(t.TypeName(), params...), nil + case StringKind: + return maybeWrapper(t, chkdecls.String), nil + case StructKind: + return chkdecls.NewObjectType(t.TypeName()), nil + case TimestampKind: + return chkdecls.Timestamp, nil + case TypeParamKind: + return chkdecls.NewTypeParamType(t.TypeName()), nil + case TypeKind: + if len(t.Parameters()) == 1 { + p, err := TypeToExprType(t.Parameters()[0]) + if err != nil { + return nil, err + } + return chkdecls.NewTypeType(p), nil + } + return chkdecls.NewTypeType(nil), nil + case UintKind: + return maybeWrapper(t, chkdecls.Uint), nil + } + return nil, fmt.Errorf("missing type conversion to proto: %v", t) +} + +// ExprTypeToType converts a protobuf CEL type representation to a CEL-native type representation. +func ExprTypeToType(t *exprpb.Type) (*Type, error) { + switch t.GetTypeKind().(type) { + case *exprpb.Type_Dyn: + return DynType, nil + case *exprpb.Type_AbstractType_: + paramTypes := make([]*Type, len(t.GetAbstractType().GetParameterTypes())) + for i, p := range t.GetAbstractType().GetParameterTypes() { + pt, err := ExprTypeToType(p) + if err != nil { + return nil, err + } + paramTypes[i] = pt + } + return NewOpaqueType(t.GetAbstractType().GetName(), paramTypes...), nil + case *exprpb.Type_ListType_: + et, err := ExprTypeToType(t.GetListType().GetElemType()) + if err != nil { + return nil, err + } + return NewListType(et), nil + case *exprpb.Type_MapType_: + kt, err := ExprTypeToType(t.GetMapType().GetKeyType()) + if err != nil { + return nil, err + } + vt, err := ExprTypeToType(t.GetMapType().GetValueType()) + if err != nil { + return nil, err + } + return NewMapType(kt, vt), nil + case *exprpb.Type_MessageType: + return NewObjectType(t.GetMessageType()), nil + case *exprpb.Type_Null: + return NullType, nil + case *exprpb.Type_Primitive: + switch t.GetPrimitive() { + case exprpb.Type_BOOL: + return BoolType, nil + case exprpb.Type_BYTES: + return BytesType, nil + case exprpb.Type_DOUBLE: + return DoubleType, nil + case exprpb.Type_INT64: + return IntType, nil + case exprpb.Type_STRING: + return StringType, nil + case exprpb.Type_UINT64: + return UintType, nil + default: + return nil, fmt.Errorf("unsupported primitive type: %v", t) + } + case *exprpb.Type_TypeParam: + return NewTypeParamType(t.GetTypeParam()), nil + case *exprpb.Type_Type: + if t.GetType().GetTypeKind() != nil { + p, err := ExprTypeToType(t.GetType()) + if err != nil { + return nil, err + } + return NewTypeTypeWithParam(p), nil + } + return TypeType, nil + case *exprpb.Type_WellKnown: + switch t.GetWellKnown() { + case exprpb.Type_ANY: + return AnyType, nil + case exprpb.Type_DURATION: + return DurationType, nil + case exprpb.Type_TIMESTAMP: + return TimestampType, nil + default: + return nil, fmt.Errorf("unsupported well-known type: %v", t) + } + case *exprpb.Type_Wrapper: + t, err := ExprTypeToType(&exprpb.Type{TypeKind: &exprpb.Type_Primitive{Primitive: t.GetWrapper()}}) + if err != nil { + return nil, err + } + return NewNullableType(t), nil + case *exprpb.Type_Error: + return ErrorType, nil + default: + return nil, fmt.Errorf("unsupported type: %v", t) + } +} + +func maybeWrapper(t *Type, pbType *exprpb.Type) *exprpb.Type { + if t.IsAssignableType(NullType) { + return chkdecls.NewWrapperType(pbType) + } + return pbType +} + +func maybeForeignType(t ref.Type) *Type { + if celType, ok := t.(*Type); ok { + return celType + } + // Inspect the incoming type to determine its traits. The assumption will be that the incoming + // type does not have any field values; however, if the trait mask indicates that field testing + // and indexing are supported, the foreign type is marked as a struct. + traitMask := 0 + for _, trait := range allTraits { + if t.HasTrait(trait) { + traitMask |= trait + } + } + // Treat the value like a struct. If it has no fields, this is harmless to denote the type + // as such since it basically becomes an opaque type by convention. + return NewObjectType(t.TypeName(), traitMask) +} + +var ( + checkedWellKnowns = map[string]*Type{ + // Wrapper types. + "google.protobuf.BoolValue": NewNullableType(BoolType), + "google.protobuf.BytesValue": NewNullableType(BytesType), + "google.protobuf.DoubleValue": NewNullableType(DoubleType), + "google.protobuf.FloatValue": NewNullableType(DoubleType), + "google.protobuf.Int64Value": NewNullableType(IntType), + "google.protobuf.Int32Value": NewNullableType(IntType), + "google.protobuf.UInt64Value": NewNullableType(UintType), + "google.protobuf.UInt32Value": NewNullableType(UintType), + "google.protobuf.StringValue": NewNullableType(StringType), + // Well-known types. + "google.protobuf.Any": AnyType, + "google.protobuf.Duration": DurationType, + "google.protobuf.Timestamp": TimestampType, + // Json types. + "google.protobuf.ListValue": NewListType(DynType), + "google.protobuf.NullValue": NullType, + "google.protobuf.Struct": NewMapType(StringType, DynType), + "google.protobuf.Value": DynType, + } + + emptyParams = []*Type{} + + allTraits = []int{ + traits.AdderType, + traits.ComparerType, + traits.ContainerType, + traits.DividerType, + traits.FieldTesterType, + traits.IndexerType, + traits.IterableType, + traits.IteratorType, + traits.MatcherType, + traits.ModderType, + traits.MultiplierType, + traits.NegatorType, + traits.ReceiverType, + traits.SizerType, + traits.SubtractorType, + } + + structTypeTraitMask = traits.FieldTesterType | traits.IndexerType +) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/uint.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/uint.go index 615c7ec5230b..3257f9ade977 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/uint.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/uint.go @@ -21,7 +21,6 @@ import ( "strconv" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" @@ -32,15 +31,6 @@ import ( type Uint uint64 var ( - // UintType singleton. - UintType = NewTypeValue("uint", - traits.AdderType, - traits.ComparerType, - traits.DividerType, - traits.ModderType, - traits.MultiplierType, - traits.SubtractorType) - uint32WrapperType = reflect.TypeOf(&wrapperspb.UInt32Value{}) uint64WrapperType = reflect.TypeOf(&wrapperspb.UInt64Value{}) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/unknown.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/unknown.go index bc411c15b92b..9dd2b2579479 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/unknown.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/unknown.go @@ -15,52 +15,312 @@ package types import ( + "fmt" + "math" "reflect" + "sort" + "strings" + "unicode" "github.com/google/cel-go/common/types/ref" ) -// Unknown type implementation which collects expression ids which caused the -// current value to become unknown. -type Unknown []int64 - var ( - // UnknownType singleton. - UnknownType = NewTypeValue("unknown") + unspecifiedAttribute = &AttributeTrail{qualifierPath: []any{}} ) +// NewAttributeTrail creates a new simple attribute from a variable name. +func NewAttributeTrail(variable string) *AttributeTrail { + if variable == "" { + return unspecifiedAttribute + } + return &AttributeTrail{variable: variable} +} + +// AttributeTrail specifies a variable with an optional qualifier path. An attribute value is expected to +// correspond to an AbsoluteAttribute, meaning a field selection which starts with a top-level variable. +// +// The qualifer path elements adhere to the AttributeQualifier type constraint. +type AttributeTrail struct { + variable string + qualifierPath []any +} + +// Equal returns whether two attribute values have the same variable name and qualifier paths. +func (a *AttributeTrail) Equal(other *AttributeTrail) bool { + if a.Variable() != other.Variable() || len(a.QualifierPath()) != len(other.QualifierPath()) { + return false + } + for i, q := range a.QualifierPath() { + qual := other.QualifierPath()[i] + if !qualifiersEqual(q, qual) { + return false + } + } + return true +} + +func qualifiersEqual(a, b any) bool { + if a == b { + return true + } + switch numA := a.(type) { + case int64: + numB, ok := b.(uint64) + if !ok { + return false + } + return intUintEqual(numA, numB) + case uint64: + numB, ok := b.(int64) + if !ok { + return false + } + return intUintEqual(numB, numA) + default: + return false + } +} + +func intUintEqual(i int64, u uint64) bool { + if i < 0 || u > math.MaxInt64 { + return false + } + return i == int64(u) +} + +// Variable returns the variable name associated with the attribute. +func (a *AttributeTrail) Variable() string { + return a.variable +} + +// QualifierPath returns the optional set of qualifying fields or indices applied to the variable. +func (a *AttributeTrail) QualifierPath() []any { + return a.qualifierPath +} + +// String returns the string representation of the Attribute. +func (a *AttributeTrail) String() string { + if a.variable == "" { + return "" + } + var str strings.Builder + str.WriteString(a.variable) + for _, q := range a.qualifierPath { + switch q := q.(type) { + case bool, int64: + str.WriteString(fmt.Sprintf("[%v]", q)) + case uint64: + str.WriteString(fmt.Sprintf("[%vu]", q)) + case string: + if isIdentifierCharacter(q) { + str.WriteString(fmt.Sprintf(".%v", q)) + } else { + str.WriteString(fmt.Sprintf("[%q]", q)) + } + } + } + return str.String() +} + +func isIdentifierCharacter(str string) bool { + for _, c := range str { + if unicode.IsLetter(c) || unicode.IsDigit(c) || string(c) == "_" { + continue + } + return false + } + return true +} + +// AttributeQualifier constrains the possible types which may be used to qualify an attribute. +type AttributeQualifier interface { + bool | int64 | uint64 | string +} + +// QualifyAttribute qualifies an attribute using a valid AttributeQualifier type. +func QualifyAttribute[T AttributeQualifier](attr *AttributeTrail, qualifier T) *AttributeTrail { + attr.qualifierPath = append(attr.qualifierPath, qualifier) + return attr +} + +// Unknown type which collects expression ids which caused the current value to become unknown. +type Unknown struct { + attributeTrails map[int64][]*AttributeTrail +} + +// NewUnknown creates a new unknown at a given expression id for an attribute. +// +// If the attribute is nil, the attribute value will be the `unspecifiedAttribute`. +func NewUnknown(id int64, attr *AttributeTrail) *Unknown { + if attr == nil { + attr = unspecifiedAttribute + } + return &Unknown{ + attributeTrails: map[int64][]*AttributeTrail{id: {attr}}, + } +} + +// IDs returns the set of unknown expression ids contained by this value. +// +// Numeric identifiers are guaranteed to be in sorted order. +func (u *Unknown) IDs() []int64 { + ids := make(int64Slice, len(u.attributeTrails)) + i := 0 + for id := range u.attributeTrails { + ids[i] = id + i++ + } + ids.Sort() + return ids +} + +// GetAttributeTrails returns the attribute trails, if present, missing for a given expression id. +func (u *Unknown) GetAttributeTrails(id int64) ([]*AttributeTrail, bool) { + trails, found := u.attributeTrails[id] + return trails, found +} + +// Contains returns true if the input unknown is a subset of the current unknown. +func (u *Unknown) Contains(other *Unknown) bool { + for id, otherTrails := range other.attributeTrails { + trails, found := u.attributeTrails[id] + if !found || len(otherTrails) != len(trails) { + return false + } + for _, ot := range otherTrails { + found := false + for _, t := range trails { + if t.Equal(ot) { + found = true + break + } + } + if !found { + return false + } + } + } + return true +} + // ConvertToNative implements ref.Val.ConvertToNative. -func (u Unknown) ConvertToNative(typeDesc reflect.Type) (any, error) { +func (u *Unknown) ConvertToNative(typeDesc reflect.Type) (any, error) { return u.Value(), nil } // ConvertToType is an identity function since unknown values cannot be modified. -func (u Unknown) ConvertToType(typeVal ref.Type) ref.Val { +func (u *Unknown) ConvertToType(typeVal ref.Type) ref.Val { return u } // Equal is an identity function since unknown values cannot be modified. -func (u Unknown) Equal(other ref.Val) ref.Val { +func (u *Unknown) Equal(other ref.Val) ref.Val { return u } +// String implements the Stringer interface +func (u *Unknown) String() string { + var str strings.Builder + for id, attrs := range u.attributeTrails { + if str.Len() != 0 { + str.WriteString(", ") + } + if len(attrs) == 1 { + str.WriteString(fmt.Sprintf("%v (%d)", attrs[0], id)) + } else { + str.WriteString(fmt.Sprintf("%v (%d)", attrs, id)) + } + } + return str.String() +} + // Type implements ref.Val.Type. -func (u Unknown) Type() ref.Type { +func (u *Unknown) Type() ref.Type { return UnknownType } // Value implements ref.Val.Value. -func (u Unknown) Value() any { - return []int64(u) +func (u *Unknown) Value() any { + return u } -// IsUnknown returns whether the element ref.Type or ref.Val is equal to the -// UnknownType singleton. +// IsUnknown returns whether the element ref.Val is in instance of *types.Unknown func IsUnknown(val ref.Val) bool { switch val.(type) { - case Unknown: + case *Unknown: return true default: return false } } + +// MaybeMergeUnknowns determines whether an input value and another, possibly nil, unknown will produce +// an unknown result. +// +// If the input `val` is another Unknown, then the result will be the merge of the `val` and the input +// `unk`. If the `val` is not unknown, then the result will depend on whether the input `unk` is nil. +// If both values are non-nil and unknown, then the return value will be a merge of both unknowns. +func MaybeMergeUnknowns(val ref.Val, unk *Unknown) (*Unknown, bool) { + src, isUnk := val.(*Unknown) + if !isUnk { + if unk != nil { + return unk, true + } + return unk, false + } + return MergeUnknowns(src, unk), true +} + +// MergeUnknowns combines two unknown values into a new unknown value. +func MergeUnknowns(unk1, unk2 *Unknown) *Unknown { + if unk1 == nil { + return unk2 + } + if unk2 == nil { + return unk1 + } + out := &Unknown{ + attributeTrails: make(map[int64][]*AttributeTrail, len(unk1.attributeTrails)+len(unk2.attributeTrails)), + } + for id, ats := range unk1.attributeTrails { + out.attributeTrails[id] = ats + } + for id, ats := range unk2.attributeTrails { + existing, found := out.attributeTrails[id] + if !found { + out.attributeTrails[id] = ats + continue + } + + for _, at := range ats { + found := false + for _, et := range existing { + if at.Equal(et) { + found = true + break + } + } + if !found { + existing = append(existing, at) + } + } + out.attributeTrails[id] = existing + } + return out +} + +// int64Slice is an implementation of the sort.Interface +type int64Slice []int64 + +// Len returns the number of elements in the slice. +func (x int64Slice) Len() int { return len(x) } + +// Less indicates whether the value at index i is less than the value at index j. +func (x int64Slice) Less(i, j int) bool { return x[i] < x[j] } + +// Swap swaps the values at indices i and j in place. +func (x int64Slice) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +// Sort is a convenience method: x.Sort() calls Sort(x). +func (x int64Slice) Sort() { sort.Sort(x) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/util.go b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/util.go index a8e9afa9e70c..71662eee31b7 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/util.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/common/types/util.go @@ -21,7 +21,7 @@ import ( // IsUnknownOrError returns whether the input element ref.Val is an ErrType or UnknownType. func IsUnknownOrError(val ref.Val) bool { switch val.(type) { - case Unknown, *Err: + case *Unknown, *Err: return true } return false diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/BUILD.bazel index 4bcf8a283eaa..ebdf7d01e320 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/BUILD.bazel @@ -9,6 +9,7 @@ go_library( srcs = [ "encoders.go", "guards.go", + "lists.go", "math.go", "native.go", "protos.go", @@ -20,7 +21,6 @@ go_library( deps = [ "//cel:go_default_library", "//checker/decls:go_default_library", - "//common:go_default_library", "//common/overloads:go_default_library", "//common/types:go_default_library", "//common/types/pb:go_default_library", @@ -41,6 +41,7 @@ go_test( size = "small", srcs = [ "encoders_test.go", + "lists_test.go", "math_test.go", "native_test.go", "protos_test.go", @@ -53,7 +54,6 @@ go_test( deps = [ "//cel:go_default_library", "//checker:go_default_library", - "//common:go_default_library", "//common/types:go_default_library", "//common/types/ref:go_default_library", "//common/types/traits:go_default_library", diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/README.md b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/README.md index ef0eb2ab7f53..6f621ac4af64 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/README.md +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/README.md @@ -149,6 +149,23 @@ Example: proto.hasExt(msg, google.expr.proto2.test.int32_ext) // returns true || false +## Lists + +Extended functions for list manipulation. As a general note, all indices are +zero-based. + +### Slice + + +Returns a new sub-list using the indexes provided. + + .slice(, ) -> + +Examples: + + [1,2,3,4].slice(1, 3) // return [2, 3] + [1,2,3,4].slice(2, 4) // return [3 ,4] + ## Sets Sets provides set relationship tests. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/bindings.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/bindings.go index 9cc3c3efe585..4ac9a7f07fcc 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/bindings.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/bindings.go @@ -16,7 +16,6 @@ package ext import ( "github.com/google/cel-go/cel" - "github.com/google/cel-go/common" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -71,7 +70,7 @@ func (celBindings) ProgramOptions() []cel.ProgramOption { return []cel.ProgramOption{} } -func celBind(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func celBind(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *cel.Error) { if !macroTargetMatchesNamespace(celNamespace, target) { return nil, nil } @@ -81,10 +80,7 @@ func celBind(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) case *exprpb.Expr_IdentExpr: varName = varIdent.GetIdentExpr().GetName() default: - return nil, &common.Error{ - Message: "cel.bind() variable names must be simple identifers", - Location: meh.OffsetLocation(varIdent.GetId()), - } + return nil, meh.NewError(varIdent.GetId(), "cel.bind() variable names must be simple identifiers") } varInit := args[1] resultExpr := args[2] diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/encoders.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/encoders.go index d9f9cb5152d8..61ac0b777507 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/encoders.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/encoders.go @@ -16,7 +16,6 @@ package ext import ( "encoding/base64" - "reflect" "github.com/google/cel-go/cel" "github.com/google/cel-go/common/types" @@ -86,7 +85,3 @@ func base64DecodeString(str string) ([]byte, error) { func base64EncodeBytes(bytes []byte) (string, error) { return base64.StdEncoding.EncodeToString(bytes), nil } - -var ( - bytesListType = reflect.TypeOf([]byte{}) -) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/guards.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/guards.go index 4c7786a690b2..785c8675bbf7 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/guards.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/guards.go @@ -17,6 +17,7 @@ package ext import ( "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/lists.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/lists.go new file mode 100644 index 000000000000..08751d08a1e8 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/lists.go @@ -0,0 +1,94 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ext + +import ( + "fmt" + + "github.com/google/cel-go/cel" + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/common/types/traits" +) + +// Lists returns a cel.EnvOption to configure extended functions for list manipulation. +// As a general note, all indices are zero-based. +// # Slice +// +// Returns a new sub-list using the indexes provided. +// +// .slice(, ) -> +// +// Examples: +// +// [1,2,3,4].slice(1, 3) // return [2, 3] +// [1,2,3,4].slice(2, 4) // return [3 ,4] +func Lists() cel.EnvOption { + return cel.Lib(listsLib{}) +} + +type listsLib struct{} + +// LibraryName implements the SingletonLibrary interface method. +func (listsLib) LibraryName() string { + return "cel.lib.ext.lists" +} + +// CompileOptions implements the Library interface method. +func (listsLib) CompileOptions() []cel.EnvOption { + listType := cel.ListType(cel.TypeParamType("T")) + return []cel.EnvOption{ + cel.Function("slice", + cel.MemberOverload("list_slice", + []*cel.Type{listType, cel.IntType, cel.IntType}, listType, + cel.FunctionBinding(func(args ...ref.Val) ref.Val { + list := args[0].(traits.Lister) + start := args[1].(types.Int) + end := args[2].(types.Int) + result, err := slice(list, start, end) + if err != nil { + return types.WrapErr(err) + } + return result + }), + ), + ), + } +} + +// ProgramOptions implements the Library interface method. +func (listsLib) ProgramOptions() []cel.ProgramOption { + return []cel.ProgramOption{} +} + +func slice(list traits.Lister, start, end types.Int) (ref.Val, error) { + listLength := list.Size().(types.Int) + if start < 0 || end < 0 { + return nil, fmt.Errorf("cannot slice(%d, %d), negative indexes not supported", start, end) + } + if start > end { + return nil, fmt.Errorf("cannot slice(%d, %d), start index must be less than or equal to end index", start, end) + } + if listLength < end { + return nil, fmt.Errorf("cannot slice(%d, %d), list is length %d", start, end, listLength) + } + + var newList []ref.Val + for i := types.Int(start); i < end; i++ { + val := list.Get(i) + newList = append(newList, val) + } + return types.DefaultTypeAdapter.NativeToValue(newList), nil +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/math.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/math.go index 1c8ad585a176..0b9a36103142 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/math.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/math.go @@ -19,10 +19,10 @@ import ( "strings" "github.com/google/cel-go/cel" - "github.com/google/cel-go/common" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" + exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -187,24 +187,18 @@ func (mathLib) ProgramOptions() []cel.ProgramOption { return []cel.ProgramOption{} } -func mathLeast(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func mathLeast(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *cel.Error) { if !macroTargetMatchesNamespace(mathNamespace, target) { return nil, nil } switch len(args) { case 0: - return nil, &common.Error{ - Message: "math.least() requires at least one argument", - Location: meh.OffsetLocation(target.GetId()), - } + return nil, meh.NewError(target.GetId(), "math.least() requires at least one argument") case 1: if isListLiteralWithValidArgs(args[0]) || isValidArgType(args[0]) { return meh.GlobalCall(minFunc, args[0]), nil } - return nil, &common.Error{ - Message: "math.least() invalid single argument value", - Location: meh.OffsetLocation(args[0].GetId()), - } + return nil, meh.NewError(args[0].GetId(), "math.least() invalid single argument value") case 2: err := checkInvalidArgs(meh, "math.least()", args) if err != nil { @@ -220,24 +214,18 @@ func mathLeast(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr } } -func mathGreatest(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func mathGreatest(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *cel.Error) { if !macroTargetMatchesNamespace(mathNamespace, target) { return nil, nil } switch len(args) { case 0: - return nil, &common.Error{ - Message: "math.greatest() requires at least one argument", - Location: meh.OffsetLocation(target.GetId()), - } + return nil, meh.NewError(target.GetId(), "math.greatest() requires at least one argument") case 1: if isListLiteralWithValidArgs(args[0]) || isValidArgType(args[0]) { return meh.GlobalCall(maxFunc, args[0]), nil } - return nil, &common.Error{ - Message: "math.greatest() invalid single argument value", - Location: meh.OffsetLocation(args[0].GetId()), - } + return nil, meh.NewError(args[0].GetId(), "math.greatest() invalid single argument value") case 2: err := checkInvalidArgs(meh, "math.greatest()", args) if err != nil { @@ -323,14 +311,11 @@ func maxList(numList ref.Val) ref.Val { } } -func checkInvalidArgs(meh cel.MacroExprHelper, funcName string, args []*exprpb.Expr) *common.Error { +func checkInvalidArgs(meh cel.MacroExprHelper, funcName string, args []*exprpb.Expr) *cel.Error { for _, arg := range args { err := checkInvalidArgLiteral(funcName, arg) if err != nil { - return &common.Error{ - Message: err.Error(), - Location: meh.OffsetLocation(arg.GetId()), - } + return meh.NewError(arg.GetId(), err.Error()) } } return nil diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/native.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/native.go index acbc44b6d519..0b5fc38ca97a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/native.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/native.go @@ -24,13 +24,11 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" "github.com/google/cel-go/cel" - "github.com/google/cel-go/checker/decls" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/pb" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" structpb "google.golang.org/protobuf/types/known/structpb" ) @@ -81,7 +79,7 @@ var ( // the time that it is invoked. func NativeTypes(refTypes ...any) cel.EnvOption { return func(env *cel.Env) (*cel.Env, error) { - tp, err := newNativeTypeProvider(env.TypeAdapter(), env.TypeProvider(), refTypes...) + tp, err := newNativeTypeProvider(env.CELTypeAdapter(), env.CELTypeProvider(), refTypes...) if err != nil { return nil, err } @@ -93,7 +91,7 @@ func NativeTypes(refTypes ...any) cel.EnvOption { } } -func newNativeTypeProvider(adapter ref.TypeAdapter, provider ref.TypeProvider, refTypes ...any) (*nativeTypeProvider, error) { +func newNativeTypeProvider(adapter types.Adapter, provider types.Provider, refTypes ...any) (*nativeTypeProvider, error) { nativeTypes := make(map[string]*nativeType, len(refTypes)) for _, refType := range refTypes { switch rt := refType.(type) { @@ -122,18 +120,18 @@ func newNativeTypeProvider(adapter ref.TypeAdapter, provider ref.TypeProvider, r type nativeTypeProvider struct { nativeTypes map[string]*nativeType - baseAdapter ref.TypeAdapter - baseProvider ref.TypeProvider + baseAdapter types.Adapter + baseProvider types.Provider } -// EnumValue proxies to the ref.TypeProvider configured at the times the NativeTypes +// EnumValue proxies to the types.Provider configured at the times the NativeTypes // option was configured. func (tp *nativeTypeProvider) EnumValue(enumName string) ref.Val { return tp.baseProvider.EnumValue(enumName) } // FindIdent looks up natives type instances by qualified identifier, and if not found -// proxies to the composed ref.TypeProvider. +// proxies to the composed types.Provider. func (tp *nativeTypeProvider) FindIdent(typeName string) (ref.Val, bool) { if t, found := tp.nativeTypes[typeName]; found { return t, true @@ -141,32 +139,35 @@ func (tp *nativeTypeProvider) FindIdent(typeName string) (ref.Val, bool) { return tp.baseProvider.FindIdent(typeName) } -// FindType looks up CEL type-checker type definition by qualified identifier, and if not found -// proxies to the composed ref.TypeProvider. -func (tp *nativeTypeProvider) FindType(typeName string) (*exprpb.Type, bool) { +// FindStructType looks up the CEL type definition by qualified identifier, and if not found +// proxies to the composed types.Provider. +func (tp *nativeTypeProvider) FindStructType(typeName string) (*types.Type, bool) { if _, found := tp.nativeTypes[typeName]; found { - return decls.NewTypeType(decls.NewObjectType(typeName)), true + return types.NewTypeTypeWithParam(types.NewObjectType(typeName)), true } - return tp.baseProvider.FindType(typeName) + if celType, found := tp.baseProvider.FindStructType(typeName); found { + return celType, true + } + return tp.baseProvider.FindStructType(typeName) } -// FindFieldType looks up a native type's field definition, and if the type name is not a native -// type then proxies to the composed ref.TypeProvider -func (tp *nativeTypeProvider) FindFieldType(typeName, fieldName string) (*ref.FieldType, bool) { +// FindStructFieldType looks up a native type's field definition, and if the type name is not a native +// type then proxies to the composed types.Provider +func (tp *nativeTypeProvider) FindStructFieldType(typeName, fieldName string) (*types.FieldType, bool) { t, found := tp.nativeTypes[typeName] if !found { - return tp.baseProvider.FindFieldType(typeName, fieldName) + return tp.baseProvider.FindStructFieldType(typeName, fieldName) } refField, isDefined := t.hasField(fieldName) if !found || !isDefined { return nil, false } - exprType, ok := convertToExprType(refField.Type) + celType, ok := convertToCelType(refField.Type) if !ok { return nil, false } - return &ref.FieldType{ - Type: exprType, + return &types.FieldType{ + Type: celType, IsSet: func(obj any) bool { refVal := reflect.Indirect(reflect.ValueOf(obj)) refField := refVal.FieldByName(fieldName) @@ -243,75 +244,74 @@ func (tp *nativeTypeProvider) NativeToValue(val any) ref.Val { } } -// convertToExprType converts the Golang reflect.Type to a protobuf exprpb.Type. -func convertToExprType(refType reflect.Type) (*exprpb.Type, bool) { +func convertToCelType(refType reflect.Type) (*cel.Type, bool) { switch refType.Kind() { case reflect.Bool: - return decls.Bool, true + return cel.BoolType, true case reflect.Float32, reflect.Float64: - return decls.Double, true + return cel.DoubleType, true case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: if refType == durationType { - return decls.Duration, true + return cel.DurationType, true } - return decls.Int, true + return cel.IntType, true case reflect.String: - return decls.String, true + return cel.StringType, true case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return decls.Uint, true + return cel.UintType, true case reflect.Array, reflect.Slice: refElem := refType.Elem() if refElem == reflect.TypeOf(byte(0)) { - return decls.Bytes, true + return cel.BytesType, true } - elemType, ok := convertToExprType(refElem) + elemType, ok := convertToCelType(refElem) if !ok { return nil, false } - return decls.NewListType(elemType), true + return cel.ListType(elemType), true case reflect.Map: - keyType, ok := convertToExprType(refType.Key()) + keyType, ok := convertToCelType(refType.Key()) if !ok { return nil, false } // Ensure the key type is a int, bool, uint, string - elemType, ok := convertToExprType(refType.Elem()) + elemType, ok := convertToCelType(refType.Elem()) if !ok { return nil, false } - return decls.NewMapType(keyType, elemType), true + return cel.MapType(keyType, elemType), true case reflect.Struct: if refType == timestampType { - return decls.Timestamp, true + return cel.TimestampType, true } - return decls.NewObjectType( + return cel.ObjectType( fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()), ), true case reflect.Pointer: if refType.Implements(pbMsgInterfaceType) { pbMsg := reflect.New(refType.Elem()).Interface().(protoreflect.ProtoMessage) - return decls.NewObjectType(string(pbMsg.ProtoReflect().Descriptor().FullName())), true + return cel.ObjectType(string(pbMsg.ProtoReflect().Descriptor().FullName())), true } - return convertToExprType(refType.Elem()) + return convertToCelType(refType.Elem()) } return nil, false } -func newNativeObject(adapter ref.TypeAdapter, val any, refValue reflect.Value) ref.Val { +func newNativeObject(adapter types.Adapter, val any, refValue reflect.Value) ref.Val { valType, err := newNativeType(refValue.Type()) if err != nil { return types.NewErr(err.Error()) } return &nativeObj{ - TypeAdapter: adapter, - val: val, - valType: valType, - refValue: refValue, + Adapter: adapter, + val: val, + valType: valType, + refValue: refValue, } } type nativeObj struct { - ref.TypeAdapter + types.Adapter val any valType *nativeType refValue reflect.Value @@ -520,11 +520,11 @@ func (t *nativeType) hasField(fieldName string) (reflect.StructField, bool) { return f, true } -func adaptFieldValue(adapter ref.TypeAdapter, refField reflect.Value) ref.Val { +func adaptFieldValue(adapter types.Adapter, refField reflect.Value) ref.Val { return adapter.NativeToValue(getFieldValue(adapter, refField)) } -func getFieldValue(adapter ref.TypeAdapter, refField reflect.Value) any { +func getFieldValue(adapter types.Adapter, refField reflect.Value) any { if refField.IsZero() { switch refField.Kind() { case reflect.Array, reflect.Slice: diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/protos.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/protos.go index b905e710c14f..a7ca27a6a276 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/protos.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/protos.go @@ -16,7 +16,6 @@ package ext import ( "github.com/google/cel-go/cel" - "github.com/google/cel-go/common" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -86,7 +85,7 @@ func (protoLib) ProgramOptions() []cel.ProgramOption { } // hasProtoExt generates a test-only select expression for a fully-qualified extension name on a protobuf message. -func hasProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func hasProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *cel.Error) { if !macroTargetMatchesNamespace(protoNamespace, target) { return nil, nil } @@ -98,7 +97,7 @@ func hasProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Ex } // getProtoExt generates a select expression for a fully-qualified extension name on a protobuf message. -func getProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { +func getProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *cel.Error) { if !macroTargetMatchesNamespace(protoNamespace, target) { return nil, nil } @@ -109,7 +108,7 @@ func getProtoExt(meh cel.MacroExprHelper, target *exprpb.Expr, args []*exprpb.Ex return meh.Select(args[0], extFieldName), nil } -func getExtFieldName(meh cel.MacroExprHelper, expr *exprpb.Expr) (string, *common.Error) { +func getExtFieldName(meh cel.MacroExprHelper, expr *exprpb.Expr) (string, *cel.Error) { isValid := false extensionField := "" switch expr.GetExprKind().(type) { @@ -117,10 +116,7 @@ func getExtFieldName(meh cel.MacroExprHelper, expr *exprpb.Expr) (string, *commo extensionField, isValid = validateIdentifier(expr) } if !isValid { - return "", &common.Error{ - Message: "invalid extension field", - Location: meh.OffsetLocation(expr.GetId()), - } + return "", meh.NewError(expr.GetId(), "invalid extension field") } return extensionField, nil } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/strings.go b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/strings.go index 8455d5829093..88c119f2b0bf 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/ext/strings.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/ext/strings.go @@ -173,7 +173,7 @@ const ( // 'TacoCat'.lowerAscii() // returns 'tacocat' // 'TacoCÆt Xii'.lowerAscii() // returns 'tacocÆt xii' // -// # Quote +// # Strings.Quote // // Introduced in version: 1 // @@ -301,26 +301,28 @@ func StringsLocale(locale string) StringsOption { } } -// StringsVersion configures the version of the string library. The version limits which -// functions are available. Only functions introduced below or equal to the given -// version included in the library. See the library documentation to determine -// which version a function was introduced at. If the documentation does not -// state which version a function was introduced at, it can be assumed to be -// introduced at version 0, when the library was first created. -// If this option is not set, all functions are available. -func StringsVersion(version uint32) func(lib *stringLib) *stringLib { - return func(sl *stringLib) *stringLib { - sl.version = version - return sl +// StringsVersion configures the version of the string library. +// +// The version limits which functions are available. Only functions introduced +// below or equal to the given version included in the library. If this option +// is not set, all functions are available. +// +// See the library documentation to determine which version a function was introduced. +// If the documentation does not state which version a function was introduced, it can +// be assumed to be introduced at version 0, when the library was first created. +func StringsVersion(version uint32) StringsOption { + return func(lib *stringLib) *stringLib { + lib.version = version + return lib } } // CompileOptions implements the Library interface method. -func (sl *stringLib) CompileOptions() []cel.EnvOption { +func (lib *stringLib) CompileOptions() []cel.EnvOption { formatLocale := "en_US" - if sl.locale != "" { + if lib.locale != "" { // ensure locale is properly-formed if set - _, err := language.Parse(sl.locale) + _, err := language.Parse(lib.locale) if err != nil { return []cel.EnvOption{ func(e *cel.Env) (*cel.Env, error) { @@ -328,7 +330,7 @@ func (sl *stringLib) CompileOptions() []cel.EnvOption { }, } } - formatLocale = sl.locale + formatLocale = lib.locale } opts := []cel.EnvOption{ @@ -432,7 +434,7 @@ func (sl *stringLib) CompileOptions() []cel.EnvOption { return stringOrError(upperASCII(string(s))) }))), } - if sl.version >= 1 { + if lib.version >= 1 { opts = append(opts, cel.Function("format", cel.MemberOverload("string_format", []*cel.Type{cel.StringType, cel.ListType(cel.DynType)}, cel.StringType, cel.FunctionBinding(func(args ...ref.Val) ref.Val { @@ -447,7 +449,7 @@ func (sl *stringLib) CompileOptions() []cel.EnvOption { })))) } - if sl.version >= 2 { + if lib.version >= 2 { opts = append(opts, cel.Function("join", cel.MemberOverload("list_join", []*cel.Type{cel.ListType(cel.StringType)}, cel.StringType, diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/BUILD.bazel index b6d04e000317..3a5219eb5f6f 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/BUILD.bazel @@ -25,13 +25,14 @@ go_library( importpath = "github.com/google/cel-go/interpreter", deps = [ "//common:go_default_library", + "//common/ast:go_default_library", "//common/containers:go_default_library", + "//common/functions:go_default_library", "//common/operators:go_default_library", "//common/overloads:go_default_library", "//common/types:go_default_library", "//common/types/ref:go_default_library", "//common/types/traits:go_default_library", - "//interpreter/functions:go_default_library", "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//types/known/durationpb:go_default_library", @@ -56,12 +57,13 @@ go_test( ], deps = [ "//checker:go_default_library", - "//checker/decls:go_default_library", "//common/containers:go_default_library", "//common/debug:go_default_library", + "//common/decls:go_default_library", + "//common/functions:go_default_library", "//common/operators:go_default_library", + "//common/stdlib:go_default_library", "//common/types:go_default_library", - "//interpreter/functions:go_default_library", "//parser:go_default_library", "//test:go_default_library", "//test/proto2pb:go_default_library", diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/activation.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/activation.go index f82e4e9038b7..a80264451c5a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/activation.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/activation.go @@ -58,7 +58,7 @@ func (emptyActivation) Parent() Activation { return nil } // The output of the lazy binding will overwrite the variable reference in the internal map. // // Values which are not represented as ref.Val types on input may be adapted to a ref.Val using -// the ref.TypeAdapter configured in the environment. +// the types.Adapter configured in the environment. func NewActivation(bindings any) (Activation, error) { if bindings == nil { return nil, errors.New("bindings must be non-nil") diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go index afb7c8d5bf38..1fbaaf17e205 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go @@ -15,6 +15,8 @@ package interpreter import ( + "fmt" + "github.com/google/cel-go/common/containers" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" @@ -177,8 +179,8 @@ func numericValueEquals(value any, celValue ref.Val) bool { // NewPartialAttributeFactory returns an AttributeFactory implementation capable of performing // AttributePattern matches with PartialActivation inputs. func NewPartialAttributeFactory(container *containers.Container, - adapter ref.TypeAdapter, - provider ref.TypeProvider) AttributeFactory { + adapter types.Adapter, + provider types.Provider) AttributeFactory { fac := NewAttributeFactory(container, adapter, provider) return &partialAttributeFactory{ AttributeFactory: fac, @@ -191,8 +193,8 @@ func NewPartialAttributeFactory(container *containers.Container, type partialAttributeFactory struct { AttributeFactory container *containers.Container - adapter ref.TypeAdapter - provider ref.TypeProvider + adapter types.Adapter + provider types.Provider } // AbsoluteAttribute implementation of the AttributeFactory interface which wraps the @@ -241,12 +243,15 @@ func (fac *partialAttributeFactory) matchesUnknownPatterns( vars PartialActivation, attrID int64, variableNames []string, - qualifiers []Qualifier) (types.Unknown, error) { + qualifiers []Qualifier) (*types.Unknown, error) { patterns := vars.UnknownAttributePatterns() candidateIndices := map[int]struct{}{} for _, variable := range variableNames { for i, pat := range patterns { if pat.VariableMatches(variable) { + if len(qualifiers) == 0 { + return types.NewUnknown(attrID, types.NewAttributeTrail(variable)), nil + } candidateIndices[i] = struct{}{} } } @@ -255,10 +260,6 @@ func (fac *partialAttributeFactory) matchesUnknownPatterns( if len(candidateIndices) == 0 { return nil, nil } - // Determine whether to return early if there are no qualifiers. - if len(qualifiers) == 0 { - return types.Unknown{attrID}, nil - } // Resolve the attribute qualifiers into a static set. This prevents more dynamic // Attribute resolutions than necessary when there are multiple unknown patterns // that traverse the same Attribute-based qualifier field. @@ -300,7 +301,28 @@ func (fac *partialAttributeFactory) matchesUnknownPatterns( } } if isUnk { - return types.Unknown{matchExprID}, nil + attr := types.NewAttributeTrail(pat.variable) + for i := 0; i < len(qualPats) && i < len(newQuals); i++ { + if qual, ok := newQuals[i].(ConstantQualifier); ok { + switch v := qual.Value().Value().(type) { + case bool: + types.QualifyAttribute[bool](attr, v) + case float64: + types.QualifyAttribute[int64](attr, int64(v)) + case int64: + types.QualifyAttribute[int64](attr, v) + case string: + types.QualifyAttribute[string](attr, v) + case uint64: + types.QualifyAttribute[uint64](attr, v) + default: + types.QualifyAttribute[string](attr, fmt.Sprintf("%v", v)) + } + } else { + types.QualifyAttribute[string](attr, "*") + } + } + return types.NewUnknown(matchExprID, attr), nil } } return nil, nil diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attributes.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attributes.go index 1b19dc2b57b8..ca97bdfcf14e 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attributes.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/attributes.go @@ -22,8 +22,6 @@ import ( "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" - - exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) // AttributeFactory provides methods creating Attribute and Qualifier values. @@ -61,7 +59,7 @@ type AttributeFactory interface { // The qualifier may consider the object type being qualified, if present. If absent, the // qualification should be considered dynamic and the qualification should still work, though // it may be sub-optimal. - NewQualifier(objType *exprpb.Type, qualID int64, val any, opt bool) (Qualifier, error) + NewQualifier(objType *types.Type, qualID int64, val any, opt bool) (Qualifier, error) } // Qualifier marker interface for designating different qualifier values and where they appear @@ -131,7 +129,7 @@ type NamespacedAttribute interface { // NewAttributeFactory returns a default AttributeFactory which is produces Attribute values // capable of resolving types by simple names and qualify the values using the supported qualifier // types: bool, int, string, and uint. -func NewAttributeFactory(cont *containers.Container, a ref.TypeAdapter, p ref.TypeProvider) AttributeFactory { +func NewAttributeFactory(cont *containers.Container, a types.Adapter, p types.Provider) AttributeFactory { return &attrFactory{ container: cont, adapter: a, @@ -141,8 +139,8 @@ func NewAttributeFactory(cont *containers.Container, a ref.TypeAdapter, p ref.Ty type attrFactory struct { container *containers.Container - adapter ref.TypeAdapter - provider ref.TypeProvider + adapter types.Adapter + provider types.Provider } // AbsoluteAttribute refers to a variable value and an optional qualifier path. @@ -199,13 +197,13 @@ func (r *attrFactory) RelativeAttribute(id int64, operand Interpretable) Attribu } // NewQualifier is an implementation of the AttributeFactory interface. -func (r *attrFactory) NewQualifier(objType *exprpb.Type, qualID int64, val any, opt bool) (Qualifier, error) { +func (r *attrFactory) NewQualifier(objType *types.Type, qualID int64, val any, opt bool) (Qualifier, error) { // Before creating a new qualifier check to see if this is a protobuf message field access. // If so, use the precomputed GetFrom qualification method rather than the standard // stringQualifier. str, isStr := val.(string) - if isStr && objType != nil && objType.GetMessageType() != "" { - ft, found := r.provider.FindFieldType(objType.GetMessageType(), str) + if isStr && objType != nil && objType.Kind() == types.StructKind { + ft, found := r.provider.FindStructFieldType(objType.TypeName(), str) if found && ft.IsSet != nil && ft.GetFrom != nil { return &fieldQualifier{ id: qualID, @@ -225,8 +223,8 @@ type absoluteAttribute struct { // (package) of the expression. namespaceNames []string qualifiers []Qualifier - adapter ref.TypeAdapter - provider ref.TypeProvider + adapter types.Adapter + provider types.Provider fac AttributeFactory } @@ -325,7 +323,7 @@ type conditionalAttribute struct { expr Interpretable truthy Attribute falsy Attribute - adapter ref.TypeAdapter + adapter types.Adapter fac AttributeFactory } @@ -393,8 +391,8 @@ func (a *conditionalAttribute) String() string { type maybeAttribute struct { id int64 attrs []NamespacedAttribute - adapter ref.TypeAdapter - provider ref.TypeProvider + adapter types.Adapter + provider types.Provider fac AttributeFactory } @@ -511,7 +509,7 @@ type relativeAttribute struct { id int64 operand Interpretable qualifiers []Qualifier - adapter ref.TypeAdapter + adapter types.Adapter fac AttributeFactory } @@ -576,7 +574,7 @@ func (a *relativeAttribute) String() string { return fmt.Sprintf("id: %v, operand: %v", a.id, a.operand) } -func newQualifier(adapter ref.TypeAdapter, id int64, v any, opt bool) (Qualifier, error) { +func newQualifier(adapter types.Adapter, id int64, v any, opt bool) (Qualifier, error) { var qual Qualifier switch val := v.(type) { case Attribute: @@ -657,7 +655,7 @@ func newQualifier(adapter ref.TypeAdapter, id int64, v any, opt bool) (Qualifier qual = &doubleQualifier{ id: id, value: float64(val), celValue: val, adapter: adapter, optional: opt, } - case types.Unknown: + case *types.Unknown: qual = &unknownQualifier{id: id, value: val} default: if q, ok := v.(Qualifier); ok { @@ -689,7 +687,7 @@ type stringQualifier struct { id int64 value string celValue ref.Val - adapter ref.TypeAdapter + adapter types.Adapter optional bool } @@ -790,7 +788,7 @@ type intQualifier struct { id int64 value int64 celValue ref.Val - adapter ref.TypeAdapter + adapter types.Adapter optional bool } @@ -917,7 +915,7 @@ type uintQualifier struct { id int64 value uint64 celValue ref.Val - adapter ref.TypeAdapter + adapter types.Adapter optional bool } @@ -982,7 +980,7 @@ type boolQualifier struct { id int64 value bool celValue ref.Val - adapter ref.TypeAdapter + adapter types.Adapter optional bool } @@ -1035,8 +1033,8 @@ func (q *boolQualifier) Value() ref.Val { type fieldQualifier struct { id int64 Name string - FieldType *ref.FieldType - adapter ref.TypeAdapter + FieldType *types.FieldType + adapter types.Adapter optional bool } @@ -1094,7 +1092,7 @@ type doubleQualifier struct { id int64 value float64 celValue ref.Val - adapter ref.TypeAdapter + adapter types.Adapter optional bool } @@ -1131,7 +1129,7 @@ func (q *doubleQualifier) Value() ref.Val { // for any value subject to qualification. This is consistent with CEL's unknown handling elsewhere. type unknownQualifier struct { id int64 - value types.Unknown + value *types.Unknown } // ID is an implementation of the Qualifier interface method. @@ -1225,10 +1223,10 @@ func attrQualifyIfPresent(fac AttributeFactory, vars Activation, obj any, qualAt // refQualify attempts to convert the value to a CEL value and then uses reflection methods to try and // apply the qualifier with the option to presence test field accesses before retrieving field values. -func refQualify(adapter ref.TypeAdapter, obj any, idx ref.Val, presenceTest, presenceOnly bool) (ref.Val, bool, error) { +func refQualify(adapter types.Adapter, obj any, idx ref.Val, presenceTest, presenceOnly bool) (ref.Val, bool, error) { celVal := adapter.NativeToValue(obj) switch v := celVal.(type) { - case types.Unknown: + case *types.Unknown: return v, true, nil case *types.Err: return nil, false, v diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/decorators.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/decorators.go index 208487b7d3b0..502db35fc0f5 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/decorators.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/decorators.go @@ -75,15 +75,13 @@ func decDisableShortcircuits() InterpretableDecorator { switch expr := i.(type) { case *evalOr: return &evalExhaustiveOr{ - id: expr.id, - lhs: expr.lhs, - rhs: expr.rhs, + id: expr.id, + terms: expr.terms, }, nil case *evalAnd: return &evalExhaustiveAnd{ - id: expr.id, - lhs: expr.lhs, - rhs: expr.rhs, + id: expr.id, + terms: expr.terms, }, nil case *evalFold: expr.exhaustive = true diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/dispatcher.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/dispatcher.go index febf9d8a8340..8f0bdb7b8eef 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/dispatcher.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/dispatcher.go @@ -17,7 +17,7 @@ package interpreter import ( "fmt" - "github.com/google/cel-go/interpreter/functions" + "github.com/google/cel-go/common/functions" ) // Dispatcher resolves function calls to their appropriate overload. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/evalstate.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/evalstate.go index cc0d3e6f9487..4bdd1fdc7325 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/evalstate.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/evalstate.go @@ -66,7 +66,11 @@ func (s *evalState) Value(exprID int64) (ref.Val, bool) { // SetValue is an implementation of the EvalState interface method. func (s *evalState) SetValue(exprID int64, val ref.Val) { - s.values[exprID] = val + if val == nil { + delete(s.values, exprID) + } else { + s.values[exprID] = val + } } // Reset implements the EvalState interface method. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/formatting.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/formatting.go index 6a98f6fa564d..e3f7533745e0 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/formatting.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/formatting.go @@ -25,7 +25,7 @@ import ( "github.com/google/cel-go/common/types/ref" ) -type typeVerifier func(int64, ...*types.TypeValue) (bool, error) +type typeVerifier func(int64, ...ref.Type) (bool, error) // InterpolateFormattedString checks the syntax and cardinality of any string.format calls present in the expression and reports // any errors at compile time. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/BUILD.bazel b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/BUILD.bazel index 846d11bf470b..4a80c3ea0859 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/BUILD.bazel +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/BUILD.bazel @@ -7,16 +7,11 @@ package( go_library( name = "go_default_library", - srcs = [ + srcs = [ "functions.go", - "standard.go", ], importpath = "github.com/google/cel-go/interpreter/functions", deps = [ - "//common/operators:go_default_library", - "//common/overloads:go_default_library", - "//common/types:go_default_library", - "//common/types/ref:go_default_library", - "//common/types/traits:go_default_library", + "//common/functions:go_default_library", ], ) diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/functions.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/functions.go index 9816017522f1..21ffb69246a7 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/functions.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/functions.go @@ -16,7 +16,7 @@ // interpreter and as declared within the checker#StandardDeclarations. package functions -import "github.com/google/cel-go/common/types/ref" +import fn "github.com/google/cel-go/common/functions" // Overload defines a named overload of a function, indicating an operand trait // which must be present on the first argument to the overload as well as one @@ -26,37 +26,14 @@ import "github.com/google/cel-go/common/types/ref" // and the specializations simplify the call contract for implementers of // types with operator overloads. Any added complexity is assumed to be handled // by the generic FunctionOp. -type Overload struct { - // Operator name as written in an expression or defined within - // operators.go. - Operator string - - // Operand trait used to dispatch the call. The zero-value indicates a - // global function overload or that one of the Unary / Binary / Function - // definitions should be used to execute the call. - OperandTrait int - - // Unary defines the overload with a UnaryOp implementation. May be nil. - Unary UnaryOp - - // Binary defines the overload with a BinaryOp implementation. May be nil. - Binary BinaryOp - - // Function defines the overload with a FunctionOp implementation. May be - // nil. - Function FunctionOp - - // NonStrict specifies whether the Overload will tolerate arguments that - // are types.Err or types.Unknown. - NonStrict bool -} +type Overload = fn.Overload // UnaryOp is a function that takes a single value and produces an output. -type UnaryOp func(value ref.Val) ref.Val +type UnaryOp = fn.UnaryOp // BinaryOp is a function that takes two values and produces an output. -type BinaryOp func(lhs ref.Val, rhs ref.Val) ref.Val +type BinaryOp = fn.BinaryOp // FunctionOp is a function with accepts zero or more arguments and produces // a value or error as a result. -type FunctionOp func(values ...ref.Val) ref.Val +type FunctionOp = fn.FunctionOp diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/standard.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/standard.go deleted file mode 100644 index 73e936114f27..000000000000 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/functions/standard.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package functions - -import ( - "github.com/google/cel-go/common/operators" - "github.com/google/cel-go/common/overloads" - "github.com/google/cel-go/common/types" - "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" -) - -// StandardOverloads returns the definitions of the built-in overloads. -func StandardOverloads() []*Overload { - return []*Overload{ - // Logical not (!a) - { - Operator: operators.LogicalNot, - OperandTrait: traits.NegatorType, - Unary: func(value ref.Val) ref.Val { - if !types.IsBool(value) { - return types.ValOrErr(value, "no such overload") - } - return value.(traits.Negater).Negate() - }}, - // Not strictly false: IsBool(a) ? a : true - { - Operator: operators.NotStrictlyFalse, - Unary: notStrictlyFalse}, - // Deprecated: not strictly false, may be overridden in the environment. - { - Operator: operators.OldNotStrictlyFalse, - Unary: notStrictlyFalse}, - - // Less than operator - {Operator: operators.Less, - OperandTrait: traits.ComparerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - cmp := lhs.(traits.Comparer).Compare(rhs) - if cmp == types.IntNegOne { - return types.True - } - if cmp == types.IntOne || cmp == types.IntZero { - return types.False - } - return cmp - }}, - - // Less than or equal operator - {Operator: operators.LessEquals, - OperandTrait: traits.ComparerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - cmp := lhs.(traits.Comparer).Compare(rhs) - if cmp == types.IntNegOne || cmp == types.IntZero { - return types.True - } - if cmp == types.IntOne { - return types.False - } - return cmp - }}, - - // Greater than operator - {Operator: operators.Greater, - OperandTrait: traits.ComparerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - cmp := lhs.(traits.Comparer).Compare(rhs) - if cmp == types.IntOne { - return types.True - } - if cmp == types.IntNegOne || cmp == types.IntZero { - return types.False - } - return cmp - }}, - - // Greater than equal operators - {Operator: operators.GreaterEquals, - OperandTrait: traits.ComparerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - cmp := lhs.(traits.Comparer).Compare(rhs) - if cmp == types.IntOne || cmp == types.IntZero { - return types.True - } - if cmp == types.IntNegOne { - return types.False - } - return cmp - }}, - - // Add operator - {Operator: operators.Add, - OperandTrait: traits.AdderType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Adder).Add(rhs) - }}, - - // Subtract operators - {Operator: operators.Subtract, - OperandTrait: traits.SubtractorType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Subtractor).Subtract(rhs) - }}, - - // Multiply operator - {Operator: operators.Multiply, - OperandTrait: traits.MultiplierType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Multiplier).Multiply(rhs) - }}, - - // Divide operator - {Operator: operators.Divide, - OperandTrait: traits.DividerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Divider).Divide(rhs) - }}, - - // Modulo operator - {Operator: operators.Modulo, - OperandTrait: traits.ModderType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Modder).Modulo(rhs) - }}, - - // Negate operator - {Operator: operators.Negate, - OperandTrait: traits.NegatorType, - Unary: func(value ref.Val) ref.Val { - if types.IsBool(value) { - return types.ValOrErr(value, "no such overload") - } - return value.(traits.Negater).Negate() - }}, - - // Index operator - {Operator: operators.Index, - OperandTrait: traits.IndexerType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Indexer).Get(rhs) - }}, - - // Size function - {Operator: overloads.Size, - OperandTrait: traits.SizerType, - Unary: func(value ref.Val) ref.Val { - return value.(traits.Sizer).Size() - }}, - - // In operator - {Operator: operators.In, Binary: inAggregate}, - // Deprecated: in operator, may be overridden in the environment. - {Operator: operators.OldIn, Binary: inAggregate}, - - // Matches function - {Operator: overloads.Matches, - OperandTrait: traits.MatcherType, - Binary: func(lhs ref.Val, rhs ref.Val) ref.Val { - return lhs.(traits.Matcher).Match(rhs) - }}, - - // Type conversion functions - // TODO: verify type conversion safety of numeric values. - - // Int conversions. - {Operator: overloads.TypeConvertInt, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.IntType) - }}, - - // Uint conversions. - {Operator: overloads.TypeConvertUint, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.UintType) - }}, - - // Double conversions. - {Operator: overloads.TypeConvertDouble, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.DoubleType) - }}, - - // Bool conversions. - {Operator: overloads.TypeConvertBool, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.BoolType) - }}, - - // Bytes conversions. - {Operator: overloads.TypeConvertBytes, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.BytesType) - }}, - - // String conversions. - {Operator: overloads.TypeConvertString, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.StringType) - }}, - - // Timestamp conversions. - {Operator: overloads.TypeConvertTimestamp, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.TimestampType) - }}, - - // Duration conversions. - {Operator: overloads.TypeConvertDuration, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.DurationType) - }}, - - // Type operations. - {Operator: overloads.TypeConvertType, - Unary: func(value ref.Val) ref.Val { - return value.ConvertToType(types.TypeType) - }}, - - // Dyn conversion (identity function). - {Operator: overloads.TypeConvertDyn, - Unary: func(value ref.Val) ref.Val { - return value - }}, - - {Operator: overloads.Iterator, - OperandTrait: traits.IterableType, - Unary: func(value ref.Val) ref.Val { - return value.(traits.Iterable).Iterator() - }}, - - {Operator: overloads.HasNext, - OperandTrait: traits.IteratorType, - Unary: func(value ref.Val) ref.Val { - return value.(traits.Iterator).HasNext() - }}, - - {Operator: overloads.Next, - OperandTrait: traits.IteratorType, - Unary: func(value ref.Val) ref.Val { - return value.(traits.Iterator).Next() - }}, - } - -} - -func notStrictlyFalse(value ref.Val) ref.Val { - if types.IsBool(value) { - return value - } - return types.True -} - -func inAggregate(lhs ref.Val, rhs ref.Val) ref.Val { - if rhs.Type().HasTrait(traits.ContainerType) { - return rhs.(traits.Container).Contains(lhs) - } - return types.ValOrErr(rhs, "no such overload") -} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpretable.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpretable.go index 32e2bcb7deaa..c4598dfa73ba 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpretable.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpretable.go @@ -17,12 +17,12 @@ package interpreter import ( "fmt" + "github.com/google/cel-go/common/functions" "github.com/google/cel-go/common/operators" "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" - "github.com/google/cel-go/interpreter/functions" ) // Interpretable can accept a given Activation and produce a value along with @@ -52,7 +52,7 @@ type InterpretableAttribute interface { Attr() Attribute // Adapter returns the type adapter to be used for adapting resolved Attribute values. - Adapter() ref.TypeAdapter + Adapter() types.Adapter // AddQualifier proxies the Attribute.AddQualifier method. // @@ -202,9 +202,8 @@ func (cons *evalConst) Value() ref.Val { } type evalOr struct { - id int64 - lhs Interpretable - rhs Interpretable + id int64 + terms []Interpretable } // ID implements the Interpretable interface method. @@ -214,41 +213,39 @@ func (or *evalOr) ID() int64 { // Eval implements the Interpretable interface method. func (or *evalOr) Eval(ctx Activation) ref.Val { - // short-circuit lhs. - lVal := or.lhs.Eval(ctx) - lBool, lok := lVal.(types.Bool) - if lok && lBool == types.True { - return types.True - } - // short-circuit on rhs. - rVal := or.rhs.Eval(ctx) - rBool, rok := rVal.(types.Bool) - if rok && rBool == types.True { - return types.True - } - // return if both sides are bool false. - if lok && rok { - return types.False + var err ref.Val = nil + var unk *types.Unknown + for _, term := range or.terms { + val := term.Eval(ctx) + boolVal, ok := val.(types.Bool) + // short-circuit on true. + if ok && boolVal == types.True { + return types.True + } + if !ok { + isUnk := false + unk, isUnk = types.MaybeMergeUnknowns(val, unk) + if !isUnk && err == nil { + if types.IsError(val) { + err = val + } else { + err = types.MaybeNoSuchOverloadErr(val) + } + } + } } - // TODO: return both values as a set if both are unknown or error. - // prefer left unknown to right unknown. - if types.IsUnknown(lVal) { - return lVal + if unk != nil { + return unk } - if types.IsUnknown(rVal) { - return rVal - } - // If the left-hand side is non-boolean return it as the error. - if types.IsError(lVal) { - return lVal + if err != nil { + return err } - return types.ValOrErr(rVal, "no such overload") + return types.False } type evalAnd struct { - id int64 - lhs Interpretable - rhs Interpretable + id int64 + terms []Interpretable } // ID implements the Interpretable interface method. @@ -258,35 +255,34 @@ func (and *evalAnd) ID() int64 { // Eval implements the Interpretable interface method. func (and *evalAnd) Eval(ctx Activation) ref.Val { - // short-circuit lhs. - lVal := and.lhs.Eval(ctx) - lBool, lok := lVal.(types.Bool) - if lok && lBool == types.False { - return types.False - } - // short-circuit on rhs. - rVal := and.rhs.Eval(ctx) - rBool, rok := rVal.(types.Bool) - if rok && rBool == types.False { - return types.False - } - // return if both sides are bool true. - if lok && rok { - return types.True - } - // TODO: return both values as a set if both are unknown or error. - // prefer left unknown to right unknown. - if types.IsUnknown(lVal) { - return lVal + var err ref.Val = nil + var unk *types.Unknown + for _, term := range and.terms { + val := term.Eval(ctx) + boolVal, ok := val.(types.Bool) + // short-circuit on false. + if ok && boolVal == types.False { + return types.False + } + if !ok { + isUnk := false + unk, isUnk = types.MaybeMergeUnknowns(val, unk) + if !isUnk && err == nil { + if types.IsError(val) { + err = val + } else { + err = types.MaybeNoSuchOverloadErr(val) + } + } + } } - if types.IsUnknown(rVal) { - return rVal + if unk != nil { + return unk } - // If the left-hand side is non-boolean return it as the error. - if types.IsError(lVal) { - return lVal + if err != nil { + return err } - return types.ValOrErr(rVal, "no such overload") + return types.True } type evalEq struct { @@ -579,7 +575,7 @@ type evalList struct { elems []Interpretable optionals []bool hasOptionals bool - adapter ref.TypeAdapter + adapter types.Adapter } // ID implements the Interpretable interface method. @@ -625,7 +621,7 @@ type evalMap struct { vals []Interpretable optionals []bool hasOptionals bool - adapter ref.TypeAdapter + adapter types.Adapter } // ID implements the Interpretable interface method. @@ -689,7 +685,7 @@ type evalObj struct { vals []Interpretable optionals []bool hasOptionals bool - provider ref.TypeProvider + provider types.Provider } // ID implements the Interpretable interface method. @@ -739,7 +735,7 @@ type evalFold struct { cond Interpretable step Interpretable result Interpretable - adapter ref.TypeAdapter + adapter types.Adapter exhaustive bool interruptable bool } @@ -865,18 +861,40 @@ type evalWatchAttr struct { // AddQualifier creates a wrapper over the incoming qualifier which observes the qualification // result. func (e *evalWatchAttr) AddQualifier(q Qualifier) (Attribute, error) { - cq, isConst := q.(ConstantQualifier) - if isConst { + switch qual := q.(type) { + // By default, the qualifier is either a constant or an attribute + // There may be some custom cases where the attribute is neither. + case ConstantQualifier: + // Expose a method to test whether the qualifier matches the input pattern. q = &evalWatchConstQual{ - ConstantQualifier: cq, + ConstantQualifier: qual, observer: e.observer, - adapter: e.InterpretableAttribute.Adapter(), + adapter: e.Adapter(), } - } else { + case *evalWatchAttr: + // Unwrap the evalWatchAttr since the observation will be applied during Qualify or + // QualifyIfPresent rather than Eval. + q = &evalWatchAttrQual{ + Attribute: qual.InterpretableAttribute, + observer: e.observer, + adapter: e.Adapter(), + } + case Attribute: + // Expose methods which intercept the qualification prior to being applied as a qualifier. + // Using this interface ensures that the qualifier is converted to a constant value one + // time during attribute pattern matching as the method embeds the Attribute interface + // needed to trip the conversion to a constant. + q = &evalWatchAttrQual{ + Attribute: qual, + observer: e.observer, + adapter: e.Adapter(), + } + default: + // This is likely a custom qualifier type. q = &evalWatchQual{ - Qualifier: q, + Qualifier: qual, observer: e.observer, - adapter: e.InterpretableAttribute.Adapter(), + adapter: e.Adapter(), } } _, err := e.InterpretableAttribute.AddQualifier(q) @@ -895,7 +913,7 @@ func (e *evalWatchAttr) Eval(vars Activation) ref.Val { type evalWatchConstQual struct { ConstantQualifier observer EvalObserver - adapter ref.TypeAdapter + adapter types.Adapter } // Qualify observes the qualification of a object via a constant boolean, int, string, or uint. @@ -934,11 +952,48 @@ func (e *evalWatchConstQual) QualifierValueEquals(value any) bool { return ok && qve.QualifierValueEquals(value) } +// evalWatchAttrQual observes the qualification of an object by a value computed at runtime. +type evalWatchAttrQual struct { + Attribute + observer EvalObserver + adapter ref.TypeAdapter +} + +// Qualify observes the qualification of a object via a value computed at runtime. +func (e *evalWatchAttrQual) Qualify(vars Activation, obj any) (any, error) { + out, err := e.Attribute.Qualify(vars, obj) + var val ref.Val + if err != nil { + val = types.WrapErr(err) + } else { + val = e.adapter.NativeToValue(out) + } + e.observer(e.ID(), e.Attribute, val) + return out, err +} + +// QualifyIfPresent conditionally qualifies the variable and only records a value if one is present. +func (e *evalWatchAttrQual) QualifyIfPresent(vars Activation, obj any, presenceOnly bool) (any, bool, error) { + out, present, err := e.Attribute.QualifyIfPresent(vars, obj, presenceOnly) + var val ref.Val + if err != nil { + val = types.WrapErr(err) + } else if out != nil { + val = e.adapter.NativeToValue(out) + } else if presenceOnly { + val = types.Bool(present) + } + if present || presenceOnly { + e.observer(e.ID(), e.Attribute, val) + } + return out, present, err +} + // evalWatchQual observes the qualification of an object by a value computed at runtime. type evalWatchQual struct { Qualifier observer EvalObserver - adapter ref.TypeAdapter + adapter types.Adapter } // Qualify observes the qualification of a object via a value computed at runtime. @@ -986,9 +1041,8 @@ func (e *evalWatchConst) Eval(vars Activation) ref.Val { // evalExhaustiveOr is just like evalOr, but does not short-circuit argument evaluation. type evalExhaustiveOr struct { - id int64 - lhs Interpretable - rhs Interpretable + id int64 + terms []Interpretable } // ID implements the Interpretable interface method. @@ -998,38 +1052,44 @@ func (or *evalExhaustiveOr) ID() int64 { // Eval implements the Interpretable interface method. func (or *evalExhaustiveOr) Eval(ctx Activation) ref.Val { - lVal := or.lhs.Eval(ctx) - rVal := or.rhs.Eval(ctx) - lBool, lok := lVal.(types.Bool) - if lok && lBool == types.True { - return types.True + var err ref.Val = nil + var unk *types.Unknown + isTrue := false + for _, term := range or.terms { + val := term.Eval(ctx) + boolVal, ok := val.(types.Bool) + // flag the result as true + if ok && boolVal == types.True { + isTrue = true + } + if !ok && !isTrue { + isUnk := false + unk, isUnk = types.MaybeMergeUnknowns(val, unk) + if !isUnk && err == nil { + if types.IsError(val) { + err = val + } else { + err = types.MaybeNoSuchOverloadErr(val) + } + } + } } - rBool, rok := rVal.(types.Bool) - if rok && rBool == types.True { + if isTrue { return types.True } - if lok && rok { - return types.False - } - if types.IsUnknown(lVal) { - return lVal - } - if types.IsUnknown(rVal) { - return rVal + if unk != nil { + return unk } - // TODO: Combine the errors into a set in the future. - // If the left-hand side is non-boolean return it as the error. - if types.IsError(lVal) { - return lVal + if err != nil { + return err } - return types.MaybeNoSuchOverloadErr(rVal) + return types.False } // evalExhaustiveAnd is just like evalAnd, but does not short-circuit argument evaluation. type evalExhaustiveAnd struct { - id int64 - lhs Interpretable - rhs Interpretable + id int64 + terms []Interpretable } // ID implements the Interpretable interface method. @@ -1039,38 +1099,45 @@ func (and *evalExhaustiveAnd) ID() int64 { // Eval implements the Interpretable interface method. func (and *evalExhaustiveAnd) Eval(ctx Activation) ref.Val { - lVal := and.lhs.Eval(ctx) - rVal := and.rhs.Eval(ctx) - lBool, lok := lVal.(types.Bool) - if lok && lBool == types.False { - return types.False + var err ref.Val = nil + var unk *types.Unknown + isFalse := false + for _, term := range and.terms { + val := term.Eval(ctx) + boolVal, ok := val.(types.Bool) + // short-circuit on false. + if ok && boolVal == types.False { + isFalse = true + } + if !ok && !isFalse { + isUnk := false + unk, isUnk = types.MaybeMergeUnknowns(val, unk) + if !isUnk && err == nil { + if types.IsError(val) { + err = val + } else { + err = types.MaybeNoSuchOverloadErr(val) + } + } + } } - rBool, rok := rVal.(types.Bool) - if rok && rBool == types.False { + if isFalse { return types.False } - if lok && rok { - return types.True - } - if types.IsUnknown(lVal) { - return lVal - } - if types.IsUnknown(rVal) { - return rVal + if unk != nil { + return unk } - // TODO: Combine the errors into a set in the future. - // If the left-hand side is non-boolean return it as the error. - if types.IsError(lVal) { - return lVal + if err != nil { + return err } - return types.MaybeNoSuchOverloadErr(rVal) + return types.True } // evalExhaustiveConditional is like evalConditional, but does not short-circuit argument // evaluation. type evalExhaustiveConditional struct { id int64 - adapter ref.TypeAdapter + adapter types.Adapter attr *conditionalAttribute } @@ -1102,7 +1169,7 @@ func (cond *evalExhaustiveConditional) Eval(ctx Activation) ref.Val { // evalAttr evaluates an Attribute value. type evalAttr struct { - adapter ref.TypeAdapter + adapter types.Adapter attr Attribute optional bool } @@ -1127,7 +1194,7 @@ func (a *evalAttr) Attr() Attribute { } // Adapter implements the InterpretableAttribute interface method. -func (a *evalAttr) Adapter() ref.TypeAdapter { +func (a *evalAttr) Adapter() types.Adapter { return a.adapter } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpreter.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpreter.go index 707a6105a1ca..00fc74732c6b 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpreter.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/interpreter.go @@ -18,9 +18,10 @@ package interpreter import ( + "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/interpreter/functions" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -29,7 +30,7 @@ import ( type Interpreter interface { // NewInterpretable creates an Interpretable from a checked expression and an // optional list of InterpretableDecorator values. - NewInterpretable(checked *exprpb.CheckedExpr, decorators ...InterpretableDecorator) (Interpretable, error) + NewInterpretable(checked *ast.CheckedAST, decorators ...InterpretableDecorator) (Interpretable, error) // NewUncheckedInterpretable returns an Interpretable from a parsed expression // and an optional list of InterpretableDecorator values. @@ -154,8 +155,8 @@ func CompileRegexConstants(regexOptimizations ...*RegexOptimization) Interpretab type exprInterpreter struct { dispatcher Dispatcher container *containers.Container - provider ref.TypeProvider - adapter ref.TypeAdapter + provider types.Provider + adapter types.Adapter attrFactory AttributeFactory } @@ -163,8 +164,8 @@ type exprInterpreter struct { // throughout the Eval of all Interpretable instances generated from it. func NewInterpreter(dispatcher Dispatcher, container *containers.Container, - provider ref.TypeProvider, - adapter ref.TypeAdapter, + provider types.Provider, + adapter types.Adapter, attrFactory AttributeFactory) Interpreter { return &exprInterpreter{ dispatcher: dispatcher, @@ -174,20 +175,9 @@ func NewInterpreter(dispatcher Dispatcher, attrFactory: attrFactory} } -// NewStandardInterpreter builds a Dispatcher and TypeProvider with support for all of the CEL -// builtins defined in the language definition. -func NewStandardInterpreter(container *containers.Container, - provider ref.TypeProvider, - adapter ref.TypeAdapter, - resolver AttributeFactory) Interpreter { - dispatcher := NewDispatcher() - dispatcher.Add(functions.StandardOverloads()...) - return NewInterpreter(dispatcher, container, provider, adapter, resolver) -} - // NewIntepretable implements the Interpreter interface method. func (i *exprInterpreter) NewInterpretable( - checked *exprpb.CheckedExpr, + checked *ast.CheckedAST, decorators ...InterpretableDecorator) (Interpretable, error) { p := newPlanner( i.dispatcher, @@ -197,7 +187,7 @@ func (i *exprInterpreter) NewInterpretable( i.container, checked, decorators...) - return p.Plan(checked.GetExpr()) + return p.Plan(checked.Expr) } // NewUncheckedIntepretable implements the Interpreter interface method. diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/planner.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/planner.go index 0b65d0fa90d2..757cd080e5c4 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/planner.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/planner.go @@ -18,10 +18,12 @@ import ( "fmt" "strings" + "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/containers" + "github.com/google/cel-go/common/functions" "github.com/google/cel-go/common/operators" + "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/interpreter/functions" exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" ) @@ -37,11 +39,11 @@ type interpretablePlanner interface { // functions, types, and namespaced identifiers at plan time rather than at runtime since // it only needs to be done once and may be semi-expensive to compute. func newPlanner(disp Dispatcher, - provider ref.TypeProvider, - adapter ref.TypeAdapter, + provider types.Provider, + adapter types.Adapter, attrFactory AttributeFactory, cont *containers.Container, - checked *exprpb.CheckedExpr, + checked *ast.CheckedAST, decorators ...InterpretableDecorator) interpretablePlanner { return &planner{ disp: disp, @@ -49,8 +51,8 @@ func newPlanner(disp Dispatcher, adapter: adapter, attrFactory: attrFactory, container: cont, - refMap: checked.GetReferenceMap(), - typeMap: checked.GetTypeMap(), + refMap: checked.ReferenceMap, + typeMap: checked.TypeMap, decorators: decorators, } } @@ -59,8 +61,8 @@ func newPlanner(disp Dispatcher, // TypeAdapter, and Container to resolve functions and types at plan time. Namespaces present in // Select expressions are resolved lazily at evaluation time. func newUncheckedPlanner(disp Dispatcher, - provider ref.TypeProvider, - adapter ref.TypeAdapter, + provider types.Provider, + adapter types.Adapter, attrFactory AttributeFactory, cont *containers.Container, decorators ...InterpretableDecorator) interpretablePlanner { @@ -70,8 +72,8 @@ func newUncheckedPlanner(disp Dispatcher, adapter: adapter, attrFactory: attrFactory, container: cont, - refMap: make(map[int64]*exprpb.Reference), - typeMap: make(map[int64]*exprpb.Type), + refMap: make(map[int64]*ast.ReferenceInfo), + typeMap: make(map[int64]*types.Type), decorators: decorators, } } @@ -79,12 +81,12 @@ func newUncheckedPlanner(disp Dispatcher, // planner is an implementation of the interpretablePlanner interface. type planner struct { disp Dispatcher - provider ref.TypeProvider - adapter ref.TypeAdapter + provider types.Provider + adapter types.Adapter attrFactory AttributeFactory container *containers.Container - refMap map[int64]*exprpb.Reference - typeMap map[int64]*exprpb.Type + refMap map[int64]*ast.ReferenceInfo + typeMap map[int64]*types.Type decorators []InterpretableDecorator } @@ -143,22 +145,19 @@ func (p *planner) planIdent(expr *exprpb.Expr) (Interpretable, error) { }, nil } -func (p *planner) planCheckedIdent(id int64, identRef *exprpb.Reference) (Interpretable, error) { +func (p *planner) planCheckedIdent(id int64, identRef *ast.ReferenceInfo) (Interpretable, error) { // Plan a constant reference if this is the case for this simple identifier. - if identRef.GetValue() != nil { - return p.Plan(&exprpb.Expr{Id: id, - ExprKind: &exprpb.Expr_ConstExpr{ - ConstExpr: identRef.GetValue(), - }}) + if identRef.Value != nil { + return NewConstValue(id, identRef.Value), nil } // Check to see whether the type map indicates this is a type name. All types should be // registered with the provider. cType := p.typeMap[id] - if cType.GetType() != nil { - cVal, found := p.provider.FindIdent(identRef.GetName()) + if cType.Kind() == types.TypeKind { + cVal, found := p.provider.FindIdent(identRef.Name) if !found { - return nil, fmt.Errorf("reference to undefined type: %s", identRef.GetName()) + return nil, fmt.Errorf("reference to undefined type: %s", identRef.Name) } return NewConstValue(id, cVal), nil } @@ -166,7 +165,7 @@ func (p *planner) planCheckedIdent(id int64, identRef *exprpb.Reference) (Interp // Otherwise, return the attribute for the resolved identifier name. return &evalAttr{ adapter: p.adapter, - attr: p.attrFactory.AbsoluteAttribute(id, identRef.GetName()), + attr: p.attrFactory.AbsoluteAttribute(id, identRef.Name), }, nil } @@ -429,18 +428,16 @@ func (p *planner) planCallNotEqual(expr *exprpb.Expr, args []Interpretable) (Int // planCallLogicalAnd generates a logical and (&&) Interpretable. func (p *planner) planCallLogicalAnd(expr *exprpb.Expr, args []Interpretable) (Interpretable, error) { return &evalAnd{ - id: expr.GetId(), - lhs: args[0], - rhs: args[1], + id: expr.GetId(), + terms: args, }, nil } // planCallLogicalOr generates a logical or (||) Interpretable. func (p *planner) planCallLogicalOr(expr *exprpb.Expr, args []Interpretable) (Interpretable, error) { return &evalOr{ - id: expr.GetId(), - lhs: args[0], - rhs: args[1], + id: expr.GetId(), + terms: args, }, nil } @@ -476,7 +473,7 @@ func (p *planner) planCallConditional(expr *exprpb.Expr, args []Interpretable) ( func (p *planner) planCallIndex(expr *exprpb.Expr, args []Interpretable, optional bool) (Interpretable, error) { op := args[0] ind := args[1] - opType := p.typeMap[expr.GetCallExpr().GetTarget().GetId()] + opType := p.typeMap[op.ID()] // Establish the attribute reference. var err error @@ -675,7 +672,7 @@ func (p *planner) constValue(c *exprpb.Constant) (ref.Val, error) { // namespace resolution rules to it in a scan over possible matching types in the TypeProvider. func (p *planner) resolveTypeName(typeName string) (string, bool) { for _, qualifiedTypeName := range p.container.ResolveCandidateNames(typeName) { - if _, found := p.provider.FindType(qualifiedTypeName); found { + if _, found := p.provider.FindStructType(qualifiedTypeName); found { return qualifiedTypeName, true } } @@ -702,8 +699,8 @@ func (p *planner) resolveFunction(expr *exprpb.Expr) (*exprpb.Expr, string, stri // function name as the fnName value. oRef, hasOverload := p.refMap[expr.GetId()] if hasOverload { - if len(oRef.GetOverloadId()) == 1 { - return target, fnName, oRef.GetOverloadId()[0] + if len(oRef.OverloadIDs) == 1 { + return target, fnName, oRef.OverloadIDs[0] } // Note, this namespaced function name will not appear as a fully qualified name in ASTs // built and stored before cel-go v0.5.0; however, this functionality did not work at all diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/prune.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/prune.go index d1b5d6bd6bf4..b8834b1cb85b 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/prune.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/prune.go @@ -341,6 +341,11 @@ func (p *astPruner) prune(node *exprpb.Expr) (*exprpb.Expr, bool) { } } if macro, found := p.macroCalls[node.GetId()]; found { + // Ensure that intermediate values for the comprehension are cleared during pruning + compre := node.GetComprehensionExpr() + if compre != nil { + visit(macro, clearIterVarVisitor(compre.IterVar, p.state)) + } // prune the expression in terms of the macro call instead of the expanded form. if newMacro, pruned := p.prune(macro); pruned { p.macroCalls[node.GetId()] = newMacro @@ -488,6 +493,27 @@ func (p *astPruner) prune(node *exprpb.Expr) (*exprpb.Expr, bool) { }, }, true } + case *exprpb.Expr_ComprehensionExpr: + compre := node.GetComprehensionExpr() + // Only the range of the comprehension is pruned since the state tracking only records + // the last iteration of the comprehension and not each step in the evaluation which + // means that the any residuals computed in between might be inaccurate. + if newRange, pruned := p.maybePrune(compre.GetIterRange()); pruned { + return &exprpb.Expr{ + Id: node.GetId(), + ExprKind: &exprpb.Expr_ComprehensionExpr{ + ComprehensionExpr: &exprpb.Expr_Comprehension{ + IterVar: compre.GetIterVar(), + IterRange: newRange, + AccuVar: compre.GetAccuVar(), + AccuInit: compre.GetAccuInit(), + LoopCondition: compre.GetLoopCondition(), + LoopStep: compre.GetLoopStep(), + Result: compre.GetResult(), + }, + }, + }, true + } } return node, false } @@ -524,6 +550,17 @@ func getMaxID(expr *exprpb.Expr) int64 { return maxID } +func clearIterVarVisitor(varName string, state EvalState) astVisitor { + return astVisitor{ + visitExpr: func(e *exprpb.Expr) { + ident := e.GetIdentExpr() + if ident != nil && ident.GetName() == varName { + state.SetValue(e.GetId(), nil) + } + }, + } +} + func maxIDVisitor(maxID *int64) astVisitor { return astVisitor{ visitExpr: func(e *exprpb.Expr) { @@ -543,7 +580,9 @@ func visit(expr *exprpb.Expr, visitor astVisitor) { exprs := []*exprpb.Expr{expr} for len(exprs) != 0 { e := exprs[0] - visitor.visitExpr(e) + if visitor.visitExpr != nil { + visitor.visitExpr(e) + } exprs = exprs[1:] switch e.GetExprKind().(type) { case *exprpb.Expr_SelectExpr: @@ -567,7 +606,9 @@ func visit(expr *exprpb.Expr, visitor astVisitor) { exprs = append(exprs, list.GetElements()...) case *exprpb.Expr_StructExpr: for _, entry := range e.GetStructExpr().GetEntries() { - visitor.visitEntry(entry) + if visitor.visitEntry != nil { + visitor.visitEntry(entry) + } if entry.GetMapKey() != nil { exprs = append(exprs, entry.GetMapKey()) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/runtimecost.go b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/runtimecost.go index 80e7f6134496..96faed2e5041 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/runtimecost.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/interpreter/runtimecost.go @@ -65,13 +65,21 @@ func CostObserver(tracker *CostTracker) EvalObserver { // While the field names are identical, the boolean operation eval structs do not share an interface and so // must be handled individually. case *evalOr: - tracker.stack.drop(t.rhs.ID(), t.lhs.ID()) + for _, term := range t.terms { + tracker.stack.drop(term.ID()) + } case *evalAnd: - tracker.stack.drop(t.rhs.ID(), t.lhs.ID()) + for _, term := range t.terms { + tracker.stack.drop(term.ID()) + } case *evalExhaustiveOr: - tracker.stack.drop(t.rhs.ID(), t.lhs.ID()) + for _, term := range t.terms { + tracker.stack.drop(term.ID()) + } case *evalExhaustiveAnd: - tracker.stack.drop(t.rhs.ID(), t.lhs.ID()) + for _, term := range t.terms { + tracker.stack.drop(term.ID()) + } case *evalFold: tracker.stack.drop(t.iterRange.ID()) case Qualifier: diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/errors.go b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/errors.go index ce49bb87f8e7..93ae7a3ad8c4 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/errors.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/errors.go @@ -22,9 +22,22 @@ import ( // parseErrors is a specialization of Errors. type parseErrors struct { - *common.Errors + errs *common.Errors +} + +// errorCount indicates the number of errors reported. +func (e *parseErrors) errorCount() int { + return len(e.errs.GetErrors()) +} + +func (e *parseErrors) internalError(message string) { + e.errs.ReportErrorAtID(0, common.NoLocation, message) } func (e *parseErrors) syntaxError(l common.Location, message string) { - e.ReportError(l, fmt.Sprintf("Syntax error: %s", message)) + e.errs.ReportErrorAtID(0, l, fmt.Sprintf("Syntax error: %s", message)) +} + +func (e *parseErrors) reportErrorAtID(id int64, l common.Location, message string, args ...any) { + e.errs.ReportErrorAtID(id, l, message, args...) } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/helper.go b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/helper.go index 8f8f478ed12e..a5f29e3d7aed 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/helper.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/helper.go @@ -193,15 +193,15 @@ func (p *parserHelper) newExpr(ctx any) *exprpb.Expr { func (p *parserHelper) id(ctx any) int64 { var location common.Location - switch ctx.(type) { + switch c := ctx.(type) { case antlr.ParserRuleContext: - token := (ctx.(antlr.ParserRuleContext)).GetStart() + token := c.GetStart() location = p.source.NewLocation(token.GetLine(), token.GetColumn()) case antlr.Token: - token := ctx.(antlr.Token) + token := c location = p.source.NewLocation(token.GetLine(), token.GetColumn()) case common.Location: - location = ctx.(common.Location) + location = c default: // This should only happen if the ctx is nil return -1 @@ -297,67 +297,83 @@ func (p *parserHelper) addMacroCall(exprID int64, function string, target *exprp } } -// balancer performs tree balancing on operators whose arguments are of equal precedence. +// logicManager compacts logical trees into a more efficient structure which is semantically +// equivalent with how the logic graph is constructed by the ANTLR parser. // -// The purpose of the balancer is to ensure a compact serialization format for the logical &&, || +// The purpose of the logicManager is to ensure a compact serialization format for the logical &&, || // operators which have a tendency to create long DAGs which are skewed in one direction. Since the // operators are commutative re-ordering the terms *must not* affect the evaluation result. // -// Re-balancing the terms is a safe, if somewhat controversial choice. A better solution would be -// to make these functions variadic and update both the checker and interpreter to understand this; -// however, this is a more complex change. -// -// TODO: Consider replacing tree-balancing with variadic logical &&, || within the parser, checker, -// and interpreter. -type balancer struct { - helper *parserHelper - function string - terms []*exprpb.Expr - ops []int64 -} - -// newBalancer creates a balancer instance bound to a specific function and its first term. -func newBalancer(h *parserHelper, function string, term *exprpb.Expr) *balancer { - return &balancer{ - helper: h, - function: function, - terms: []*exprpb.Expr{term}, - ops: []int64{}, +// The logic manager will either render the terms to N-chained && / || operators as a single logical +// call with N-terms, or will rebalance the tree. Rebalancing the terms is a safe, if somewhat +// controversial choice as it alters the traditional order of execution assumptions present in most +// expressions. +type logicManager struct { + helper *parserHelper + function string + terms []*exprpb.Expr + ops []int64 + variadicASTs bool +} + +// newVariadicLogicManager creates a logic manager instance bound to a specific function and its first term. +func newVariadicLogicManager(h *parserHelper, function string, term *exprpb.Expr) *logicManager { + return &logicManager{ + helper: h, + function: function, + terms: []*exprpb.Expr{term}, + ops: []int64{}, + variadicASTs: true, + } +} + +// newBalancingLogicManager creates a logic manager instance bound to a specific function and its first term. +func newBalancingLogicManager(h *parserHelper, function string, term *exprpb.Expr) *logicManager { + return &logicManager{ + helper: h, + function: function, + terms: []*exprpb.Expr{term}, + ops: []int64{}, + variadicASTs: false, } } // addTerm adds an operation identifier and term to the set of terms to be balanced. -func (b *balancer) addTerm(op int64, term *exprpb.Expr) { - b.terms = append(b.terms, term) - b.ops = append(b.ops, op) +func (l *logicManager) addTerm(op int64, term *exprpb.Expr) { + l.terms = append(l.terms, term) + l.ops = append(l.ops, op) } -// balance creates a balanced tree from the sub-terms and returns the final Expr value. -func (b *balancer) balance() *exprpb.Expr { - if len(b.terms) == 1 { - return b.terms[0] +// toExpr renders the logic graph into an Expr value, either balancing a tree of logical +// operations or creating a variadic representation of the logical operator. +func (l *logicManager) toExpr() *exprpb.Expr { + if len(l.terms) == 1 { + return l.terms[0] + } + if l.variadicASTs { + return l.helper.newGlobalCall(l.ops[0], l.function, l.terms...) } - return b.balancedTree(0, len(b.ops)-1) + return l.balancedTree(0, len(l.ops)-1) } // balancedTree recursively balances the terms provided to a commutative operator. -func (b *balancer) balancedTree(lo, hi int) *exprpb.Expr { +func (l *logicManager) balancedTree(lo, hi int) *exprpb.Expr { mid := (lo + hi + 1) / 2 var left *exprpb.Expr if mid == lo { - left = b.terms[mid] + left = l.terms[mid] } else { - left = b.balancedTree(lo, mid-1) + left = l.balancedTree(lo, mid-1) } var right *exprpb.Expr if mid == hi { - right = b.terms[mid+1] + right = l.terms[mid+1] } else { - right = b.balancedTree(mid+1, hi) + right = l.balancedTree(mid+1, hi) } - return b.helper.newGlobalCall(b.ops[mid], b.function, left, right) + return l.helper.newGlobalCall(l.ops[mid], l.function, left, right) } type exprHelper struct { @@ -370,7 +386,7 @@ func (e *exprHelper) nextMacroID() int64 { } // Copy implements the ExprHelper interface method by producing a copy of the input Expr value -// with a fresh set of numeric identifiers the Expr and all its descendents. +// with a fresh set of numeric identifiers the Expr and all its descendants. func (e *exprHelper) Copy(expr *exprpb.Expr) *exprpb.Expr { copy := e.parserHelper.newExpr(e.parserHelper.getLocation(expr.GetId())) switch expr.GetExprKind().(type) { @@ -558,11 +574,22 @@ func (e *exprHelper) Select(operand *exprpb.Expr, field string) *exprpb.Expr { // OffsetLocation implements the ExprHelper interface method. func (e *exprHelper) OffsetLocation(exprID int64) common.Location { - offset := e.parserHelper.positions[exprID] - location, _ := e.parserHelper.source.OffsetLocation(offset) + offset, found := e.parserHelper.positions[exprID] + if !found { + return common.NoLocation + } + location, found := e.parserHelper.source.OffsetLocation(offset) + if !found { + return common.NoLocation + } return location } +// NewError associates an error message with a given expression id, populating the source offset location of the error if possible. +func (e *exprHelper) NewError(exprID int64, message string) *common.Error { + return common.NewError(exprID, message, e.OffsetLocation(exprID)) +} + var ( // Thread-safe pool of ExprHelper values to minimize alloc overhead of ExprHelper creations. exprHelperPool = &sync.Pool{ diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/macro.go b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/macro.go index 80e5c66c6566..6066e8ef4f8a 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/macro.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/macro.go @@ -232,6 +232,9 @@ type ExprHelper interface { // OffsetLocation returns the Location of the expression identifier. OffsetLocation(exprID int64) common.Location + + // NewError associates an error message with a given expression id. + NewError(exprID int64, message string) *common.Error } var ( @@ -324,7 +327,7 @@ func MakeExistsOne(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*ex func MakeMap(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { v, found := extractIdent(args[0]) if !found { - return nil, &common.Error{Message: "argument is not an identifier"} + return nil, eh.NewError(args[0].GetId(), "argument is not an identifier") } var fn *exprpb.Expr @@ -355,7 +358,7 @@ func MakeMap(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.E func MakeFilter(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { v, found := extractIdent(args[0]) if !found { - return nil, &common.Error{Message: "argument is not an identifier"} + return nil, eh.NewError(args[0].GetId(), "argument is not an identifier") } filter := args[1] @@ -372,17 +375,13 @@ func MakeHas(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.E if s, ok := args[0].ExprKind.(*exprpb.Expr_SelectExpr); ok { return eh.PresenceTest(s.SelectExpr.GetOperand(), s.SelectExpr.GetField()), nil } - return nil, &common.Error{Message: "invalid argument to has() macro"} + return nil, eh.NewError(args[0].GetId(), "invalid argument to has() macro") } func makeQuantifier(kind quantifierKind, eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) { v, found := extractIdent(args[0]) if !found { - location := eh.OffsetLocation(args[0].GetId()) - return nil, &common.Error{ - Message: "argument must be a simple name", - Location: location, - } + return nil, eh.NewError(args[0].GetId(), "argument must be a simple name") } var init *exprpb.Expr @@ -411,7 +410,7 @@ func makeQuantifier(kind quantifierKind, eh ExprHelper, target *exprpb.Expr, arg eh.GlobalCall(operators.Add, eh.AccuIdent(), oneExpr), eh.AccuIdent()) result = eh.GlobalCall(operators.Equals, eh.AccuIdent(), oneExpr) default: - return nil, &common.Error{Message: fmt.Sprintf("unrecognized quantifier '%v'", kind)} + return nil, eh.NewError(args[0].GetId(), fmt.Sprintf("unrecognized quantifier '%v'", kind)) } return eh.Fold(v, target, AccumulatorName, init, condition, step, result), nil } diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/options.go b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/options.go index 674c697c5cd7..61fc3adec4cd 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/options.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/options.go @@ -25,6 +25,7 @@ type options struct { macros map[string]Macro populateMacroCalls bool enableOptionalSyntax bool + enableVariadicOperatorASTs bool } // Option configures the behavior of the parser. @@ -125,3 +126,15 @@ func EnableOptionalSyntax(optionalSyntax bool) Option { return nil } } + +// EnableVariadicOperatorASTs enables a compact representation of chained like-kind commutative +// operators. e.g. `a || b || c || d` -> `call(op='||', args=[a, b, c, d])` +// +// The benefit of enabling variadic operators ASTs is a more compact representation deeply nested +// logic graphs. +func EnableVariadicOperatorASTs(varArgASTs bool) Option { + return func(opts *options) error { + opts.enableVariadicOperatorASTs = varArgASTs + return nil + } +} diff --git a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/parser.go b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/parser.go index e6f70f9060e0..109326a93998 100644 --- a/cluster-autoscaler/vendor/github.com/google/cel-go/parser/parser.go +++ b/cluster-autoscaler/vendor/github.com/google/cel-go/parser/parser.go @@ -89,8 +89,9 @@ func mustNewParser(opts ...Option) *Parser { // Parse parses the expression represented by source and returns the result. func (p *Parser) Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors) { + errs := common.NewErrors(source) impl := parser{ - errors: &parseErrors{common.NewErrors(source)}, + errors: &parseErrors{errs}, helper: newParserHelper(source), macros: p.macros, maxRecursionDepth: p.maxRecursionDepth, @@ -99,6 +100,7 @@ func (p *Parser) Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors errorRecoveryLookaheadTokenLimit: p.errorRecoveryTokenLookaheadLimit, populateMacroCalls: p.populateMacroCalls, enableOptionalSyntax: p.enableOptionalSyntax, + enableVariadicOperatorASTs: p.enableVariadicOperatorASTs, } buf, ok := source.(runes.Buffer) if !ok { @@ -115,7 +117,7 @@ func (p *Parser) Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors return &exprpb.ParsedExpr{ Expr: e, SourceInfo: impl.helper.getSourceInfo(), - }, impl.errors.Errors + }, errs } // reservedIds are not legal to use as variables. We exclude them post-parse, as they *are* valid @@ -295,6 +297,7 @@ type parser struct { errorRecoveryLookaheadTokenLimit int populateMacroCalls bool enableOptionalSyntax bool + enableVariadicOperatorASTs bool } var ( @@ -357,9 +360,9 @@ func (p *parser) parse(expr runes.Buffer, desc string) *exprpb.Expr { if val := recover(); val != nil { switch err := val.(type) { case *lookaheadLimitError: - p.errors.ReportError(common.NoLocation, err.Error()) + p.errors.internalError(err.Error()) case *recursionError: - p.errors.ReportError(common.NoLocation, err.Error()) + p.errors.internalError(err.Error()) case *tooManyErrors: // do nothing case *recoveryLimitError: @@ -449,7 +452,7 @@ func (p *parser) Visit(tree antlr.ParseTree) any { // Report at least one error if the parser reaches an unknown parse element. // Typically, this happens if the parser has already encountered a syntax error elsewhere. - if len(p.errors.GetErrors()) == 0 { + if p.errors.errorCount() == 0 { txt := "<>" if t != nil { txt = fmt.Sprintf("<<%T>>", t) @@ -480,7 +483,7 @@ func (p *parser) VisitExpr(ctx *gen.ExprContext) any { // Visit a parse tree produced by CELParser#conditionalOr. func (p *parser) VisitConditionalOr(ctx *gen.ConditionalOrContext) any { result := p.Visit(ctx.GetE()).(*exprpb.Expr) - b := newBalancer(p.helper, operators.LogicalOr, result) + l := p.newLogicManager(operators.LogicalOr, result) rest := ctx.GetE1() for i, op := range ctx.GetOps() { if i >= len(rest) { @@ -488,15 +491,15 @@ func (p *parser) VisitConditionalOr(ctx *gen.ConditionalOrContext) any { } next := p.Visit(rest[i]).(*exprpb.Expr) opID := p.helper.id(op) - b.addTerm(opID, next) + l.addTerm(opID, next) } - return b.balance() + return l.toExpr() } // Visit a parse tree produced by CELParser#conditionalAnd. func (p *parser) VisitConditionalAnd(ctx *gen.ConditionalAndContext) any { result := p.Visit(ctx.GetE()).(*exprpb.Expr) - b := newBalancer(p.helper, operators.LogicalAnd, result) + l := p.newLogicManager(operators.LogicalAnd, result) rest := ctx.GetE1() for i, op := range ctx.GetOps() { if i >= len(rest) { @@ -504,9 +507,9 @@ func (p *parser) VisitConditionalAnd(ctx *gen.ConditionalAndContext) any { } next := p.Visit(rest[i]).(*exprpb.Expr) opID := p.helper.id(op) - b.addTerm(opID, next) + l.addTerm(opID, next) } - return b.balance() + return l.toExpr() } // Visit a parse tree produced by CELParser#relation. @@ -867,18 +870,24 @@ func (p *parser) unquote(ctx any, value string, isBytes bool) string { return text } +func (p *parser) newLogicManager(function string, term *exprpb.Expr) *logicManager { + if p.enableVariadicOperatorASTs { + return newVariadicLogicManager(p.helper, function, term) + } + return newBalancingLogicManager(p.helper, function, term) +} + func (p *parser) reportError(ctx any, format string, args ...any) *exprpb.Expr { var location common.Location - switch ctx.(type) { + err := p.helper.newExpr(ctx) + switch c := ctx.(type) { case common.Location: - location = ctx.(common.Location) + location = c case antlr.Token, antlr.ParserRuleContext: - err := p.helper.newExpr(ctx) location = p.helper.getLocation(err.GetId()) } - err := p.helper.newExpr(ctx) // Provide arguments to the report error. - p.errors.ReportError(location, format, args...) + p.errors.reportErrorAtID(err.GetId(), location, format, args...) return err } diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/.gitignore b/cluster-autoscaler/vendor/github.com/gorilla/websocket/.gitignore new file mode 100644 index 000000000000..cd3fcd1ef72a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/.gitignore @@ -0,0 +1,25 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +.idea/ +*.iml diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/AUTHORS b/cluster-autoscaler/vendor/github.com/gorilla/websocket/AUTHORS new file mode 100644 index 000000000000..1931f400682c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/AUTHORS @@ -0,0 +1,9 @@ +# This is the official list of Gorilla WebSocket authors for copyright +# purposes. +# +# Please keep the list sorted. + +Gary Burd +Google LLC (https://opensource.google.com/) +Joachim Bauch + diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/LICENSE b/cluster-autoscaler/vendor/github.com/gorilla/websocket/LICENSE new file mode 100644 index 000000000000..9171c9722522 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/README.md b/cluster-autoscaler/vendor/github.com/gorilla/websocket/README.md new file mode 100644 index 000000000000..2517a28715fa --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/README.md @@ -0,0 +1,39 @@ +# Gorilla WebSocket + +[![GoDoc](https://godoc.org/github.com/gorilla/websocket?status.svg)](https://godoc.org/github.com/gorilla/websocket) +[![CircleCI](https://circleci.com/gh/gorilla/websocket.svg?style=svg)](https://circleci.com/gh/gorilla/websocket) + +Gorilla WebSocket is a [Go](http://golang.org/) implementation of the +[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. + + +--- + +⚠️ **[The Gorilla WebSocket Package is looking for a new maintainer](https://github.com/gorilla/websocket/issues/370)** + +--- + +### Documentation + +* [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc) +* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) +* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) +* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) +* [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) + +### Status + +The Gorilla WebSocket package provides a complete and tested implementation of +the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The +package API is stable. + +### Installation + + go get github.com/gorilla/websocket + +### Protocol Compliance + +The Gorilla WebSocket package passes the server tests in the [Autobahn Test +Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn +subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). + diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/client.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/client.go new file mode 100644 index 000000000000..2efd83555d37 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/client.go @@ -0,0 +1,422 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "context" + "crypto/tls" + "errors" + "io" + "io/ioutil" + "net" + "net/http" + "net/http/httptrace" + "net/url" + "strings" + "time" +) + +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = errors.New("websocket: bad handshake") + +var errInvalidCompression = errors.New("websocket: invalid compression negotiation") + +// NewClient creates a new client connection using the given net connection. +// The URL u specifies the host and request URI. Use requestHeader to specify +// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies +// (Cookie). Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etc. +// +// Deprecated: Use Dialer instead. +func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { + d := Dialer{ + ReadBufferSize: readBufSize, + WriteBufferSize: writeBufSize, + NetDial: func(net, addr string) (net.Conn, error) { + return netConn, nil + }, + } + return d.Dial(u.String(), requestHeader) +} + +// A Dialer contains options for connecting to WebSocket server. +// +// It is safe to call Dialer's methods concurrently. +type Dialer struct { + // NetDial specifies the dial function for creating TCP connections. If + // NetDial is nil, net.Dial is used. + NetDial func(network, addr string) (net.Conn, error) + + // NetDialContext specifies the dial function for creating TCP connections. If + // NetDialContext is nil, NetDial is used. + NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + + // NetDialTLSContext specifies the dial function for creating TLS/TCP connections. If + // NetDialTLSContext is nil, NetDialContext is used. + // If NetDialTLSContext is set, Dial assumes the TLS handshake is done there and + // TLSClientConfig is ignored. + NetDialTLSContext func(ctx context.Context, network, addr string) (net.Conn, error) + + // Proxy specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxy func(*http.Request) (*url.URL, error) + + // TLSClientConfig specifies the TLS configuration to use with tls.Client. + // If nil, the default configuration is used. + // If either NetDialTLS or NetDialTLSContext are set, Dial assumes the TLS handshake + // is done there and TLSClientConfig is ignored. + TLSClientConfig *tls.Config + + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then a useful default size is used. The I/O buffer sizes + // do not limit the size of the messages that can be sent or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the client's requested subprotocols. + Subprotocols []string + + // EnableCompression specifies if the client should attempt to negotiate + // per message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool + + // Jar specifies the cookie jar. + // If Jar is nil, cookies are not sent in requests and ignored + // in responses. + Jar http.CookieJar +} + +// Dial creates a new client connection by calling DialContext with a background context. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + return d.DialContext(context.Background(), urlStr, requestHeader) +} + +var errMalformedURL = errors.New("malformed ws or wss URL") + +func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { + hostPort = u.Host + hostNoPort = u.Host + if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { + hostNoPort = hostNoPort[:i] + } else { + switch u.Scheme { + case "wss": + hostPort += ":443" + case "https": + hostPort += ":443" + default: + hostPort += ":80" + } + } + return hostPort, hostNoPort +} + +// DefaultDialer is a dialer with all fields set to the default values. +var DefaultDialer = &Dialer{ + Proxy: http.ProxyFromEnvironment, + HandshakeTimeout: 45 * time.Second, +} + +// nilDialer is dialer to use when receiver is nil. +var nilDialer = *DefaultDialer + +// DialContext creates a new client connection. Use requestHeader to specify the +// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). +// Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// The context will be used in the request and in the Dialer. +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etcetera. The response body may not contain the entire response and does not +// need to be closed by the application. +func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + if d == nil { + d = &nilDialer + } + + challengeKey, err := generateChallengeKey() + if err != nil { + return nil, nil, err + } + + u, err := url.Parse(urlStr) + if err != nil { + return nil, nil, err + } + + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + default: + return nil, nil, errMalformedURL + } + + if u.User != nil { + // User name and password are not allowed in websocket URIs. + return nil, nil, errMalformedURL + } + + req := &http.Request{ + Method: http.MethodGet, + URL: u, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: u.Host, + } + req = req.WithContext(ctx) + + // Set the cookies present in the cookie jar of the dialer + if d.Jar != nil { + for _, cookie := range d.Jar.Cookies(u) { + req.AddCookie(cookie) + } + } + + // Set the request headers using the capitalization for names and values in + // RFC examples. Although the capitalization shouldn't matter, there are + // servers that depend on it. The Header.Set method is not used because the + // method canonicalizes the header names. + req.Header["Upgrade"] = []string{"websocket"} + req.Header["Connection"] = []string{"Upgrade"} + req.Header["Sec-WebSocket-Key"] = []string{challengeKey} + req.Header["Sec-WebSocket-Version"] = []string{"13"} + if len(d.Subprotocols) > 0 { + req.Header["Sec-WebSocket-Protocol"] = []string{strings.Join(d.Subprotocols, ", ")} + } + for k, vs := range requestHeader { + switch { + case k == "Host": + if len(vs) > 0 { + req.Host = vs[0] + } + case k == "Upgrade" || + k == "Connection" || + k == "Sec-Websocket-Key" || + k == "Sec-Websocket-Version" || + k == "Sec-Websocket-Extensions" || + (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): + return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + case k == "Sec-Websocket-Protocol": + req.Header["Sec-WebSocket-Protocol"] = vs + default: + req.Header[k] = vs + } + } + + if d.EnableCompression { + req.Header["Sec-WebSocket-Extensions"] = []string{"permessage-deflate; server_no_context_takeover; client_no_context_takeover"} + } + + if d.HandshakeTimeout != 0 { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) + defer cancel() + } + + // Get network dial function. + var netDial func(network, add string) (net.Conn, error) + + switch u.Scheme { + case "http": + if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial + } + case "https": + if d.NetDialTLSContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialTLSContext(ctx, network, addr) + } + } else if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial + } + default: + return nil, nil, errMalformedURL + } + + if netDial == nil { + netDialer := &net.Dialer{} + netDial = func(network, addr string) (net.Conn, error) { + return netDialer.DialContext(ctx, network, addr) + } + } + + // If needed, wrap the dial function to set the connection deadline. + if deadline, ok := ctx.Deadline(); ok { + forwardDial := netDial + netDial = func(network, addr string) (net.Conn, error) { + c, err := forwardDial(network, addr) + if err != nil { + return nil, err + } + err = c.SetDeadline(deadline) + if err != nil { + c.Close() + return nil, err + } + return c, nil + } + } + + // If needed, wrap the dial function to connect through a proxy. + if d.Proxy != nil { + proxyURL, err := d.Proxy(req) + if err != nil { + return nil, nil, err + } + if proxyURL != nil { + dialer, err := proxy_FromURL(proxyURL, netDialerFunc(netDial)) + if err != nil { + return nil, nil, err + } + netDial = dialer.Dial + } + } + + hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } + + netConn, err := netDial("tcp", hostPort) + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: netConn, + }) + } + if err != nil { + return nil, nil, err + } + + defer func() { + if netConn != nil { + netConn.Close() + } + }() + + if u.Scheme == "https" && d.NetDialTLSContext == nil { + // If NetDialTLSContext is set, assume that the TLS handshake has already been done + + cfg := cloneTLSConfig(d.TLSClientConfig) + if cfg.ServerName == "" { + cfg.ServerName = hostNoPort + } + tlsConn := tls.Client(netConn, cfg) + netConn = tlsConn + + if trace != nil && trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(ctx, tlsConn, cfg) + if trace != nil && trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + + if err != nil { + return nil, nil, err + } + } + + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil) + + if err := req.Write(netConn); err != nil { + return nil, nil, err + } + + if trace != nil && trace.GotFirstResponseByte != nil { + if peek, err := conn.br.Peek(1); err == nil && len(peek) == 1 { + trace.GotFirstResponseByte() + } + } + + resp, err := http.ReadResponse(conn.br, req) + if err != nil { + return nil, nil, err + } + + if d.Jar != nil { + if rc := resp.Cookies(); len(rc) > 0 { + d.Jar.SetCookies(u, rc) + } + } + + if resp.StatusCode != 101 || + !tokenListContainsValue(resp.Header, "Upgrade", "websocket") || + !tokenListContainsValue(resp.Header, "Connection", "upgrade") || + resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { + // Before closing the network connection on return from this + // function, slurp up some of the response to aid application + // debugging. + buf := make([]byte, 1024) + n, _ := io.ReadFull(resp.Body, buf) + resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) + return nil, resp, ErrBadHandshake + } + + for _, ext := range parseExtensions(resp.Header) { + if ext[""] != "permessage-deflate" { + continue + } + _, snct := ext["server_no_context_takeover"] + _, cnct := ext["client_no_context_takeover"] + if !snct || !cnct { + return nil, resp, errInvalidCompression + } + conn.newCompressionWriter = compressNoContextTakeover + conn.newDecompressionReader = decompressNoContextTakeover + break + } + + resp.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) + conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") + + netConn.SetDeadline(time.Time{}) + netConn = nil // to avoid close in defer. + return conn, resp, nil +} + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return cfg.Clone() +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/compression.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/compression.go new file mode 100644 index 000000000000..813ffb1e8433 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/compression.go @@ -0,0 +1,148 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "compress/flate" + "errors" + "io" + "strings" + "sync" +) + +const ( + minCompressionLevel = -2 // flate.HuffmanOnly not defined in Go < 1.6 + maxCompressionLevel = flate.BestCompression + defaultCompressionLevel = 1 +) + +var ( + flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool + flateReaderPool = sync.Pool{New: func() interface{} { + return flate.NewReader(nil) + }} +) + +func decompressNoContextTakeover(r io.Reader) io.ReadCloser { + const tail = + // Add four bytes as specified in RFC + "\x00\x00\xff\xff" + + // Add final block to squelch unexpected EOF error from flate reader. + "\x01\x00\x00\xff\xff" + + fr, _ := flateReaderPool.Get().(io.ReadCloser) + fr.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil) + return &flateReadWrapper{fr} +} + +func isValidCompressionLevel(level int) bool { + return minCompressionLevel <= level && level <= maxCompressionLevel +} + +func compressNoContextTakeover(w io.WriteCloser, level int) io.WriteCloser { + p := &flateWriterPools[level-minCompressionLevel] + tw := &truncWriter{w: w} + fw, _ := p.Get().(*flate.Writer) + if fw == nil { + fw, _ = flate.NewWriter(tw, level) + } else { + fw.Reset(tw) + } + return &flateWriteWrapper{fw: fw, tw: tw, p: p} +} + +// truncWriter is an io.Writer that writes all but the last four bytes of the +// stream to another io.Writer. +type truncWriter struct { + w io.WriteCloser + n int + p [4]byte +} + +func (w *truncWriter) Write(p []byte) (int, error) { + n := 0 + + // fill buffer first for simplicity. + if w.n < len(w.p) { + n = copy(w.p[w.n:], p) + p = p[n:] + w.n += n + if len(p) == 0 { + return n, nil + } + } + + m := len(p) + if m > len(w.p) { + m = len(w.p) + } + + if nn, err := w.w.Write(w.p[:m]); err != nil { + return n + nn, err + } + + copy(w.p[:], w.p[m:]) + copy(w.p[len(w.p)-m:], p[len(p)-m:]) + nn, err := w.w.Write(p[:len(p)-m]) + return n + nn, err +} + +type flateWriteWrapper struct { + fw *flate.Writer + tw *truncWriter + p *sync.Pool +} + +func (w *flateWriteWrapper) Write(p []byte) (int, error) { + if w.fw == nil { + return 0, errWriteClosed + } + return w.fw.Write(p) +} + +func (w *flateWriteWrapper) Close() error { + if w.fw == nil { + return errWriteClosed + } + err1 := w.fw.Flush() + w.p.Put(w.fw) + w.fw = nil + if w.tw.p != [4]byte{0, 0, 0xff, 0xff} { + return errors.New("websocket: internal error, unexpected bytes at end of flate stream") + } + err2 := w.tw.w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +type flateReadWrapper struct { + fr io.ReadCloser +} + +func (r *flateReadWrapper) Read(p []byte) (int, error) { + if r.fr == nil { + return 0, io.ErrClosedPipe + } + n, err := r.fr.Read(p) + if err == io.EOF { + // Preemptively place the reader back in the pool. This helps with + // scenarios where the application does not call NextReader() soon after + // this final read. + r.Close() + } + return n, err +} + +func (r *flateReadWrapper) Close() error { + if r.fr == nil { + return io.ErrClosedPipe + } + err := r.fr.Close() + flateReaderPool.Put(r.fr) + r.fr = nil + return err +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/conn.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/conn.go new file mode 100644 index 000000000000..331eebc85009 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/conn.go @@ -0,0 +1,1230 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/binary" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "strconv" + "strings" + "sync" + "time" + "unicode/utf8" +) + +const ( + // Frame header byte 0 bits from Section 5.2 of RFC 6455 + finalBit = 1 << 7 + rsv1Bit = 1 << 6 + rsv2Bit = 1 << 5 + rsv3Bit = 1 << 4 + + // Frame header byte 1 bits from Section 5.2 of RFC 6455 + maskBit = 1 << 7 + + maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask + maxControlFramePayloadSize = 125 + + writeWait = time.Second + + defaultReadBufferSize = 4096 + defaultWriteBufferSize = 4096 + + continuationFrame = 0 + noFrame = -1 +) + +// Close codes defined in RFC 6455, section 11.7. +const ( + CloseNormalClosure = 1000 + CloseGoingAway = 1001 + CloseProtocolError = 1002 + CloseUnsupportedData = 1003 + CloseNoStatusReceived = 1005 + CloseAbnormalClosure = 1006 + CloseInvalidFramePayloadData = 1007 + ClosePolicyViolation = 1008 + CloseMessageTooBig = 1009 + CloseMandatoryExtension = 1010 + CloseInternalServerErr = 1011 + CloseServiceRestart = 1012 + CloseTryAgainLater = 1013 + CloseTLSHandshake = 1015 +) + +// The message types are defined in RFC 6455, section 11.8. +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage = 1 + + // BinaryMessage denotes a binary data message. + BinaryMessage = 2 + + // CloseMessage denotes a close control message. The optional message + // payload contains a numeric code and text. Use the FormatCloseMessage + // function to format a close message payload. + CloseMessage = 8 + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage = 9 + + // PongMessage denotes a pong control message. The optional message payload + // is UTF-8 encoded text. + PongMessage = 10 +) + +// ErrCloseSent is returned when the application writes a message to the +// connection after sending a close message. +var ErrCloseSent = errors.New("websocket: close sent") + +// ErrReadLimit is returned when reading a message that is larger than the +// read limit set for the connection. +var ErrReadLimit = errors.New("websocket: read limit exceeded") + +// netError satisfies the net Error interface. +type netError struct { + msg string + temporary bool + timeout bool +} + +func (e *netError) Error() string { return e.msg } +func (e *netError) Temporary() bool { return e.temporary } +func (e *netError) Timeout() bool { return e.timeout } + +// CloseError represents a close message. +type CloseError struct { + // Code is defined in RFC 6455, section 11.7. + Code int + + // Text is the optional text payload. + Text string +} + +func (e *CloseError) Error() string { + s := []byte("websocket: close ") + s = strconv.AppendInt(s, int64(e.Code), 10) + switch e.Code { + case CloseNormalClosure: + s = append(s, " (normal)"...) + case CloseGoingAway: + s = append(s, " (going away)"...) + case CloseProtocolError: + s = append(s, " (protocol error)"...) + case CloseUnsupportedData: + s = append(s, " (unsupported data)"...) + case CloseNoStatusReceived: + s = append(s, " (no status)"...) + case CloseAbnormalClosure: + s = append(s, " (abnormal closure)"...) + case CloseInvalidFramePayloadData: + s = append(s, " (invalid payload data)"...) + case ClosePolicyViolation: + s = append(s, " (policy violation)"...) + case CloseMessageTooBig: + s = append(s, " (message too big)"...) + case CloseMandatoryExtension: + s = append(s, " (mandatory extension missing)"...) + case CloseInternalServerErr: + s = append(s, " (internal server error)"...) + case CloseTLSHandshake: + s = append(s, " (TLS handshake error)"...) + } + if e.Text != "" { + s = append(s, ": "...) + s = append(s, e.Text...) + } + return string(s) +} + +// IsCloseError returns boolean indicating whether the error is a *CloseError +// with one of the specified codes. +func IsCloseError(err error, codes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range codes { + if e.Code == code { + return true + } + } + } + return false +} + +// IsUnexpectedCloseError returns boolean indicating whether the error is a +// *CloseError with a code not in the list of expected codes. +func IsUnexpectedCloseError(err error, expectedCodes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range expectedCodes { + if e.Code == code { + return false + } + } + return true + } + return false +} + +var ( + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} + errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} + errBadWriteOpCode = errors.New("websocket: bad write message type") + errWriteClosed = errors.New("websocket: write closed") + errInvalidControlFrame = errors.New("websocket: invalid control frame") +) + +func newMaskKey() [4]byte { + n := rand.Uint32() + return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)} +} + +func hideTempErr(err error) error { + if e, ok := err.(net.Error); ok && e.Temporary() { + err = &netError{msg: e.Error(), timeout: e.Timeout()} + } + return err +} + +func isControl(frameType int) bool { + return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage +} + +func isData(frameType int) bool { + return frameType == TextMessage || frameType == BinaryMessage +} + +var validReceivedCloseCodes = map[int]bool{ + // see http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number + + CloseNormalClosure: true, + CloseGoingAway: true, + CloseProtocolError: true, + CloseUnsupportedData: true, + CloseNoStatusReceived: false, + CloseAbnormalClosure: false, + CloseInvalidFramePayloadData: true, + ClosePolicyViolation: true, + CloseMessageTooBig: true, + CloseMandatoryExtension: true, + CloseInternalServerErr: true, + CloseServiceRestart: true, + CloseTryAgainLater: true, + CloseTLSHandshake: false, +} + +func isValidReceivedCloseCode(code int) bool { + return validReceivedCloseCodes[code] || (code >= 3000 && code <= 4999) +} + +// BufferPool represents a pool of buffers. The *sync.Pool type satisfies this +// interface. The type of the value stored in a pool is not specified. +type BufferPool interface { + // Get gets a value from the pool or returns nil if the pool is empty. + Get() interface{} + // Put adds a value to the pool. + Put(interface{}) +} + +// writePoolData is the type added to the write buffer pool. This wrapper is +// used to prevent applications from peeking at and depending on the values +// added to the pool. +type writePoolData struct{ buf []byte } + +// The Conn type represents a WebSocket connection. +type Conn struct { + conn net.Conn + isServer bool + subprotocol string + + // Write fields + mu chan struct{} // used as mutex to protect write to conn + writeBuf []byte // frame is constructed in this buffer. + writePool BufferPool + writeBufSize int + writeDeadline time.Time + writer io.WriteCloser // the current writer returned to the application + isWriting bool // for best-effort concurrent write detection + + writeErrMu sync.Mutex + writeErr error + + enableWriteCompression bool + compressionLevel int + newCompressionWriter func(io.WriteCloser, int) io.WriteCloser + + // Read fields + reader io.ReadCloser // the current reader returned to the application + readErr error + br *bufio.Reader + // bytes remaining in current frame. + // set setReadRemaining to safely update this value and prevent overflow + readRemaining int64 + readFinal bool // true the current message has more frames. + readLength int64 // Message size. + readLimit int64 // Maximum message size. + readMaskPos int + readMaskKey [4]byte + handlePong func(string) error + handlePing func(string) error + handleClose func(int, string) error + readErrCount int + messageReader *messageReader // the current low-level reader + + readDecompress bool // whether last read frame had RSV1 set + newDecompressionReader func(io.Reader) io.ReadCloser +} + +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn { + + if br == nil { + if readBufferSize == 0 { + readBufferSize = defaultReadBufferSize + } else if readBufferSize < maxControlFramePayloadSize { + // must be large enough for control frame + readBufferSize = maxControlFramePayloadSize + } + br = bufio.NewReaderSize(conn, readBufferSize) + } + + if writeBufferSize <= 0 { + writeBufferSize = defaultWriteBufferSize + } + writeBufferSize += maxFrameHeaderSize + + if writeBuf == nil && writeBufferPool == nil { + writeBuf = make([]byte, writeBufferSize) + } + + mu := make(chan struct{}, 1) + mu <- struct{}{} + c := &Conn{ + isServer: isServer, + br: br, + conn: conn, + mu: mu, + readFinal: true, + writeBuf: writeBuf, + writePool: writeBufferPool, + writeBufSize: writeBufferSize, + enableWriteCompression: true, + compressionLevel: defaultCompressionLevel, + } + c.SetCloseHandler(nil) + c.SetPingHandler(nil) + c.SetPongHandler(nil) + return c +} + +// setReadRemaining tracks the number of bytes remaining on the connection. If n +// overflows, an ErrReadLimit is returned. +func (c *Conn) setReadRemaining(n int64) error { + if n < 0 { + return ErrReadLimit + } + + c.readRemaining = n + return nil +} + +// Subprotocol returns the negotiated protocol for the connection. +func (c *Conn) Subprotocol() string { + return c.subprotocol +} + +// Close closes the underlying network connection without sending or waiting +// for a close message. +func (c *Conn) Close() error { + return c.conn.Close() +} + +// LocalAddr returns the local network address. +func (c *Conn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +// RemoteAddr returns the remote network address. +func (c *Conn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +// Write methods + +func (c *Conn) writeFatal(err error) error { + err = hideTempErr(err) + c.writeErrMu.Lock() + if c.writeErr == nil { + c.writeErr = err + } + c.writeErrMu.Unlock() + return err +} + +func (c *Conn) read(n int) ([]byte, error) { + p, err := c.br.Peek(n) + if err == io.EOF { + err = errUnexpectedEOF + } + c.br.Discard(len(p)) + return p, err +} + +func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { + <-c.mu + defer func() { c.mu <- struct{}{} }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + c.conn.SetWriteDeadline(deadline) + if len(buf1) == 0 { + _, err = c.conn.Write(buf0) + } else { + err = c.writeBufs(buf0, buf1) + } + if err != nil { + return c.writeFatal(err) + } + if frameType == CloseMessage { + c.writeFatal(ErrCloseSent) + } + return nil +} + +func (c *Conn) writeBufs(bufs ...[]byte) error { + b := net.Buffers(bufs) + _, err := b.WriteTo(c.conn) + return err +} + +// WriteControl writes a control message with the given deadline. The allowed +// message types are CloseMessage, PingMessage and PongMessage. +func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { + if !isControl(messageType) { + return errBadWriteOpCode + } + if len(data) > maxControlFramePayloadSize { + return errInvalidControlFrame + } + + b0 := byte(messageType) | finalBit + b1 := byte(len(data)) + if !c.isServer { + b1 |= maskBit + } + + buf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize) + buf = append(buf, b0, b1) + + if c.isServer { + buf = append(buf, data...) + } else { + key := newMaskKey() + buf = append(buf, key[:]...) + buf = append(buf, data...) + maskBytes(key, 0, buf[6:]) + } + + d := 1000 * time.Hour + if !deadline.IsZero() { + d = deadline.Sub(time.Now()) + if d < 0 { + return errWriteTimeout + } + } + + timer := time.NewTimer(d) + select { + case <-c.mu: + timer.Stop() + case <-timer.C: + return errWriteTimeout + } + defer func() { c.mu <- struct{}{} }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + c.conn.SetWriteDeadline(deadline) + _, err = c.conn.Write(buf) + if err != nil { + return c.writeFatal(err) + } + if messageType == CloseMessage { + c.writeFatal(ErrCloseSent) + } + return err +} + +// beginMessage prepares a connection and message writer for a new message. +func (c *Conn) beginMessage(mw *messageWriter, messageType int) error { + // Close previous writer if not already closed by the application. It's + // probably better to return an error in this situation, but we cannot + // change this without breaking existing applications. + if c.writer != nil { + c.writer.Close() + c.writer = nil + } + + if !isControl(messageType) && !isData(messageType) { + return errBadWriteOpCode + } + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + mw.c = c + mw.frameType = messageType + mw.pos = maxFrameHeaderSize + + if c.writeBuf == nil { + wpd, ok := c.writePool.Get().(writePoolData) + if ok { + c.writeBuf = wpd.buf + } else { + c.writeBuf = make([]byte, c.writeBufSize) + } + } + return nil +} + +// NextWriter returns a writer for the next message to send. The writer's Close +// method flushes the complete message to the network. +// +// There can be at most one open writer on a connection. NextWriter closes the +// previous writer if the application has not already done so. +// +// All message types (TextMessage, BinaryMessage, CloseMessage, PingMessage and +// PongMessage) are supported. +func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return nil, err + } + c.writer = &mw + if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { + w := c.newCompressionWriter(c.writer, c.compressionLevel) + mw.compress = true + c.writer = w + } + return c.writer, nil +} + +type messageWriter struct { + c *Conn + compress bool // whether next call to flushFrame should set RSV1 + pos int // end of data in writeBuf. + frameType int // type of the current frame. + err error +} + +func (w *messageWriter) endMessage(err error) error { + if w.err != nil { + return err + } + c := w.c + w.err = err + c.writer = nil + if c.writePool != nil { + c.writePool.Put(writePoolData{buf: c.writeBuf}) + c.writeBuf = nil + } + return err +} + +// flushFrame writes buffered data and extra as a frame to the network. The +// final argument indicates that this is the last frame in the message. +func (w *messageWriter) flushFrame(final bool, extra []byte) error { + c := w.c + length := w.pos - maxFrameHeaderSize + len(extra) + + // Check for invalid control frames. + if isControl(w.frameType) && + (!final || length > maxControlFramePayloadSize) { + return w.endMessage(errInvalidControlFrame) + } + + b0 := byte(w.frameType) + if final { + b0 |= finalBit + } + if w.compress { + b0 |= rsv1Bit + } + w.compress = false + + b1 := byte(0) + if !c.isServer { + b1 |= maskBit + } + + // Assume that the frame starts at beginning of c.writeBuf. + framePos := 0 + if c.isServer { + // Adjust up if mask not included in the header. + framePos = 4 + } + + switch { + case length >= 65536: + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 127 + binary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length)) + case length > 125: + framePos += 6 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 126 + binary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length)) + default: + framePos += 8 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | byte(length) + } + + if !c.isServer { + key := newMaskKey() + copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) + maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:w.pos]) + if len(extra) > 0 { + return w.endMessage(c.writeFatal(errors.New("websocket: internal error, extra used in client mode"))) + } + } + + // Write the buffers to the connection with best-effort detection of + // concurrent writes. See the concurrency section in the package + // documentation for more info. + + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + + err := c.write(w.frameType, c.writeDeadline, c.writeBuf[framePos:w.pos], extra) + + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + + if err != nil { + return w.endMessage(err) + } + + if final { + w.endMessage(errWriteClosed) + return nil + } + + // Setup for next frame. + w.pos = maxFrameHeaderSize + w.frameType = continuationFrame + return nil +} + +func (w *messageWriter) ncopy(max int) (int, error) { + n := len(w.c.writeBuf) - w.pos + if n <= 0 { + if err := w.flushFrame(false, nil); err != nil { + return 0, err + } + n = len(w.c.writeBuf) - w.pos + } + if n > max { + n = max + } + return n, nil +} + +func (w *messageWriter) Write(p []byte) (int, error) { + if w.err != nil { + return 0, w.err + } + + if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { + // Don't buffer large messages. + err := w.flushFrame(false, p) + if err != nil { + return 0, err + } + return len(p), nil + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) WriteString(p string) (int, error) { + if w.err != nil { + return 0, w.err + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { + if w.err != nil { + return 0, w.err + } + for { + if w.pos == len(w.c.writeBuf) { + err = w.flushFrame(false, nil) + if err != nil { + break + } + } + var n int + n, err = r.Read(w.c.writeBuf[w.pos:]) + w.pos += n + nn += int64(n) + if err != nil { + if err == io.EOF { + err = nil + } + break + } + } + return nn, err +} + +func (w *messageWriter) Close() error { + if w.err != nil { + return w.err + } + return w.flushFrame(true, nil) +} + +// WritePreparedMessage writes prepared message into connection. +func (c *Conn) WritePreparedMessage(pm *PreparedMessage) error { + frameType, frameData, err := pm.frame(prepareKey{ + isServer: c.isServer, + compress: c.newCompressionWriter != nil && c.enableWriteCompression && isData(pm.messageType), + compressionLevel: c.compressionLevel, + }) + if err != nil { + return err + } + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + err = c.write(frameType, c.writeDeadline, frameData, nil) + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + return err +} + +// WriteMessage is a helper method for getting a writer using NextWriter, +// writing the message and closing the writer. +func (c *Conn) WriteMessage(messageType int, data []byte) error { + + if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { + // Fast path with no allocations and single frame. + + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return err + } + n := copy(c.writeBuf[mw.pos:], data) + mw.pos += n + data = data[n:] + return mw.flushFrame(true, data) + } + + w, err := c.NextWriter(messageType) + if err != nil { + return err + } + if _, err = w.Write(data); err != nil { + return err + } + return w.Close() +} + +// SetWriteDeadline sets the write deadline on the underlying network +// connection. After a write has timed out, the websocket state is corrupt and +// all future writes will return an error. A zero value for t means writes will +// not time out. +func (c *Conn) SetWriteDeadline(t time.Time) error { + c.writeDeadline = t + return nil +} + +// Read methods + +func (c *Conn) advanceFrame() (int, error) { + // 1. Skip remainder of previous frame. + + if c.readRemaining > 0 { + if _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil { + return noFrame, err + } + } + + // 2. Read and parse first two bytes of frame header. + // To aid debugging, collect and report all errors in the first two bytes + // of the header. + + var errors []string + + p, err := c.read(2) + if err != nil { + return noFrame, err + } + + frameType := int(p[0] & 0xf) + final := p[0]&finalBit != 0 + rsv1 := p[0]&rsv1Bit != 0 + rsv2 := p[0]&rsv2Bit != 0 + rsv3 := p[0]&rsv3Bit != 0 + mask := p[1]&maskBit != 0 + c.setReadRemaining(int64(p[1] & 0x7f)) + + c.readDecompress = false + if rsv1 { + if c.newDecompressionReader != nil { + c.readDecompress = true + } else { + errors = append(errors, "RSV1 set") + } + } + + if rsv2 { + errors = append(errors, "RSV2 set") + } + + if rsv3 { + errors = append(errors, "RSV3 set") + } + + switch frameType { + case CloseMessage, PingMessage, PongMessage: + if c.readRemaining > maxControlFramePayloadSize { + errors = append(errors, "len > 125 for control") + } + if !final { + errors = append(errors, "FIN not set on control") + } + case TextMessage, BinaryMessage: + if !c.readFinal { + errors = append(errors, "data before FIN") + } + c.readFinal = final + case continuationFrame: + if c.readFinal { + errors = append(errors, "continuation after FIN") + } + c.readFinal = final + default: + errors = append(errors, "bad opcode "+strconv.Itoa(frameType)) + } + + if mask != c.isServer { + errors = append(errors, "bad MASK") + } + + if len(errors) > 0 { + return noFrame, c.handleProtocolError(strings.Join(errors, ", ")) + } + + // 3. Read and parse frame length as per + // https://tools.ietf.org/html/rfc6455#section-5.2 + // + // The length of the "Payload data", in bytes: if 0-125, that is the payload + // length. + // - If 126, the following 2 bytes interpreted as a 16-bit unsigned + // integer are the payload length. + // - If 127, the following 8 bytes interpreted as + // a 64-bit unsigned integer (the most significant bit MUST be 0) are the + // payload length. Multibyte length quantities are expressed in network byte + // order. + + switch c.readRemaining { + case 126: + p, err := c.read(2) + if err != nil { + return noFrame, err + } + + if err := c.setReadRemaining(int64(binary.BigEndian.Uint16(p))); err != nil { + return noFrame, err + } + case 127: + p, err := c.read(8) + if err != nil { + return noFrame, err + } + + if err := c.setReadRemaining(int64(binary.BigEndian.Uint64(p))); err != nil { + return noFrame, err + } + } + + // 4. Handle frame masking. + + if mask { + c.readMaskPos = 0 + p, err := c.read(len(c.readMaskKey)) + if err != nil { + return noFrame, err + } + copy(c.readMaskKey[:], p) + } + + // 5. For text and binary messages, enforce read limit and return. + + if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage { + + c.readLength += c.readRemaining + // Don't allow readLength to overflow in the presence of a large readRemaining + // counter. + if c.readLength < 0 { + return noFrame, ErrReadLimit + } + + if c.readLimit > 0 && c.readLength > c.readLimit { + c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) + return noFrame, ErrReadLimit + } + + return frameType, nil + } + + // 6. Read control frame payload. + + var payload []byte + if c.readRemaining > 0 { + payload, err = c.read(int(c.readRemaining)) + c.setReadRemaining(0) + if err != nil { + return noFrame, err + } + if c.isServer { + maskBytes(c.readMaskKey, 0, payload) + } + } + + // 7. Process control frame payload. + + switch frameType { + case PongMessage: + if err := c.handlePong(string(payload)); err != nil { + return noFrame, err + } + case PingMessage: + if err := c.handlePing(string(payload)); err != nil { + return noFrame, err + } + case CloseMessage: + closeCode := CloseNoStatusReceived + closeText := "" + if len(payload) >= 2 { + closeCode = int(binary.BigEndian.Uint16(payload)) + if !isValidReceivedCloseCode(closeCode) { + return noFrame, c.handleProtocolError("bad close code " + strconv.Itoa(closeCode)) + } + closeText = string(payload[2:]) + if !utf8.ValidString(closeText) { + return noFrame, c.handleProtocolError("invalid utf8 payload in close frame") + } + } + if err := c.handleClose(closeCode, closeText); err != nil { + return noFrame, err + } + return noFrame, &CloseError{Code: closeCode, Text: closeText} + } + + return frameType, nil +} + +func (c *Conn) handleProtocolError(message string) error { + data := FormatCloseMessage(CloseProtocolError, message) + if len(data) > maxControlFramePayloadSize { + data = data[:maxControlFramePayloadSize] + } + c.WriteControl(CloseMessage, data, time.Now().Add(writeWait)) + return errors.New("websocket: " + message) +} + +// NextReader returns the next data message received from the peer. The +// returned messageType is either TextMessage or BinaryMessage. +// +// There can be at most one open reader on a connection. NextReader discards +// the previous message if the application has not already consumed it. +// +// Applications must break out of the application's read loop when this method +// returns a non-nil error value. Errors returned from this method are +// permanent. Once this method returns a non-nil error, all subsequent calls to +// this method return the same error. +func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { + // Close previous reader, only relevant for decompression. + if c.reader != nil { + c.reader.Close() + c.reader = nil + } + + c.messageReader = nil + c.readLength = 0 + + for c.readErr == nil { + frameType, err := c.advanceFrame() + if err != nil { + c.readErr = hideTempErr(err) + break + } + + if frameType == TextMessage || frameType == BinaryMessage { + c.messageReader = &messageReader{c} + c.reader = c.messageReader + if c.readDecompress { + c.reader = c.newDecompressionReader(c.reader) + } + return frameType, c.reader, nil + } + } + + // Applications that do handle the error returned from this method spin in + // tight loop on connection failure. To help application developers detect + // this error, panic on repeated reads to the failed connection. + c.readErrCount++ + if c.readErrCount >= 1000 { + panic("repeated read on failed websocket connection") + } + + return noFrame, nil, c.readErr +} + +type messageReader struct{ c *Conn } + +func (r *messageReader) Read(b []byte) (int, error) { + c := r.c + if c.messageReader != r { + return 0, io.EOF + } + + for c.readErr == nil { + + if c.readRemaining > 0 { + if int64(len(b)) > c.readRemaining { + b = b[:c.readRemaining] + } + n, err := c.br.Read(b) + c.readErr = hideTempErr(err) + if c.isServer { + c.readMaskPos = maskBytes(c.readMaskKey, c.readMaskPos, b[:n]) + } + rem := c.readRemaining + rem -= int64(n) + c.setReadRemaining(rem) + if c.readRemaining > 0 && c.readErr == io.EOF { + c.readErr = errUnexpectedEOF + } + return n, c.readErr + } + + if c.readFinal { + c.messageReader = nil + return 0, io.EOF + } + + frameType, err := c.advanceFrame() + switch { + case err != nil: + c.readErr = hideTempErr(err) + case frameType == TextMessage || frameType == BinaryMessage: + c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader") + } + } + + err := c.readErr + if err == io.EOF && c.messageReader == r { + err = errUnexpectedEOF + } + return 0, err +} + +func (r *messageReader) Close() error { + return nil +} + +// ReadMessage is a helper method for getting a reader using NextReader and +// reading from that reader to a buffer. +func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { + var r io.Reader + messageType, r, err = c.NextReader() + if err != nil { + return messageType, nil, err + } + p, err = ioutil.ReadAll(r) + return messageType, p, err +} + +// SetReadDeadline sets the read deadline on the underlying network connection. +// After a read has timed out, the websocket connection state is corrupt and +// all future reads will return an error. A zero value for t means reads will +// not time out. +func (c *Conn) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a +// message exceeds the limit, the connection sends a close message to the peer +// and returns ErrReadLimit to the application. +func (c *Conn) SetReadLimit(limit int64) { + c.readLimit = limit +} + +// CloseHandler returns the current close handler +func (c *Conn) CloseHandler() func(code int, text string) error { + return c.handleClose +} + +// SetCloseHandler sets the handler for close messages received from the peer. +// The code argument to h is the received close code or CloseNoStatusReceived +// if the close message is empty. The default close handler sends a close +// message back to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// close messages as described in the section on Control Messages above. +// +// The connection read methods return a CloseError when a close message is +// received. Most applications should handle close messages as part of their +// normal error handling. Applications should only set a close handler when the +// application must perform some action before sending a close message back to +// the peer. +func (c *Conn) SetCloseHandler(h func(code int, text string) error) { + if h == nil { + h = func(code int, text string) error { + message := FormatCloseMessage(code, "") + c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)) + return nil + } + } + c.handleClose = h +} + +// PingHandler returns the current ping handler +func (c *Conn) PingHandler() func(appData string) error { + return c.handlePing +} + +// SetPingHandler sets the handler for ping messages received from the peer. +// The appData argument to h is the PING message application data. The default +// ping handler sends a pong to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// ping messages as described in the section on Control Messages above. +func (c *Conn) SetPingHandler(h func(appData string) error) { + if h == nil { + h = func(message string) error { + err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + if err == ErrCloseSent { + return nil + } else if e, ok := err.(net.Error); ok && e.Temporary() { + return nil + } + return err + } + } + c.handlePing = h +} + +// PongHandler returns the current pong handler +func (c *Conn) PongHandler() func(appData string) error { + return c.handlePong +} + +// SetPongHandler sets the handler for pong messages received from the peer. +// The appData argument to h is the PONG message application data. The default +// pong handler does nothing. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// pong messages as described in the section on Control Messages above. +func (c *Conn) SetPongHandler(h func(appData string) error) { + if h == nil { + h = func(string) error { return nil } + } + c.handlePong = h +} + +// UnderlyingConn returns the internal net.Conn. This can be used to further +// modifications to connection specific flags. +func (c *Conn) UnderlyingConn() net.Conn { + return c.conn +} + +// EnableWriteCompression enables and disables write compression of +// subsequent text and binary messages. This function is a noop if +// compression was not negotiated with the peer. +func (c *Conn) EnableWriteCompression(enable bool) { + c.enableWriteCompression = enable +} + +// SetCompressionLevel sets the flate compression level for subsequent text and +// binary messages. This function is a noop if compression was not negotiated +// with the peer. See the compress/flate package for a description of +// compression levels. +func (c *Conn) SetCompressionLevel(level int) error { + if !isValidCompressionLevel(level) { + return errors.New("websocket: invalid compression level") + } + c.compressionLevel = level + return nil +} + +// FormatCloseMessage formats closeCode and text as a WebSocket close message. +// An empty message is returned for code CloseNoStatusReceived. +func FormatCloseMessage(closeCode int, text string) []byte { + if closeCode == CloseNoStatusReceived { + // Return empty message because it's illegal to send + // CloseNoStatusReceived. Return non-nil value in case application + // checks for nil. + return []byte{} + } + buf := make([]byte, 2+len(text)) + binary.BigEndian.PutUint16(buf, uint16(closeCode)) + copy(buf[2:], text) + return buf +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/doc.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/doc.go new file mode 100644 index 000000000000..8db0cef95a29 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/doc.go @@ -0,0 +1,227 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package websocket implements the WebSocket protocol defined in RFC 6455. +// +// Overview +// +// The Conn type represents a WebSocket connection. A server application calls +// the Upgrader.Upgrade method from an HTTP request handler to get a *Conn: +// +// var upgrader = websocket.Upgrader{ +// ReadBufferSize: 1024, +// WriteBufferSize: 1024, +// } +// +// func handler(w http.ResponseWriter, r *http.Request) { +// conn, err := upgrader.Upgrade(w, r, nil) +// if err != nil { +// log.Println(err) +// return +// } +// ... Use conn to send and receive messages. +// } +// +// Call the connection's WriteMessage and ReadMessage methods to send and +// receive messages as a slice of bytes. This snippet of code shows how to echo +// messages using these methods: +// +// for { +// messageType, p, err := conn.ReadMessage() +// if err != nil { +// log.Println(err) +// return +// } +// if err := conn.WriteMessage(messageType, p); err != nil { +// log.Println(err) +// return +// } +// } +// +// In above snippet of code, p is a []byte and messageType is an int with value +// websocket.BinaryMessage or websocket.TextMessage. +// +// An application can also send and receive messages using the io.WriteCloser +// and io.Reader interfaces. To send a message, call the connection NextWriter +// method to get an io.WriteCloser, write the message to the writer and close +// the writer when done. To receive a message, call the connection NextReader +// method to get an io.Reader and read until io.EOF is returned. This snippet +// shows how to echo messages using the NextWriter and NextReader methods: +// +// for { +// messageType, r, err := conn.NextReader() +// if err != nil { +// return +// } +// w, err := conn.NextWriter(messageType) +// if err != nil { +// return err +// } +// if _, err := io.Copy(w, r); err != nil { +// return err +// } +// if err := w.Close(); err != nil { +// return err +// } +// } +// +// Data Messages +// +// The WebSocket protocol distinguishes between text and binary data messages. +// Text messages are interpreted as UTF-8 encoded text. The interpretation of +// binary messages is left to the application. +// +// This package uses the TextMessage and BinaryMessage integer constants to +// identify the two data message types. The ReadMessage and NextReader methods +// return the type of the received message. The messageType argument to the +// WriteMessage and NextWriter methods specifies the type of a sent message. +// +// It is the application's responsibility to ensure that text messages are +// valid UTF-8 encoded text. +// +// Control Messages +// +// The WebSocket protocol defines three types of control messages: close, ping +// and pong. Call the connection WriteControl, WriteMessage or NextWriter +// methods to send a control message to the peer. +// +// Connections handle received close messages by calling the handler function +// set with the SetCloseHandler method and by returning a *CloseError from the +// NextReader, ReadMessage or the message Read method. The default close +// handler sends a close message to the peer. +// +// Connections handle received ping messages by calling the handler function +// set with the SetPingHandler method. The default ping handler sends a pong +// message to the peer. +// +// Connections handle received pong messages by calling the handler function +// set with the SetPongHandler method. The default pong handler does nothing. +// If an application sends ping messages, then the application should set a +// pong handler to receive the corresponding pong. +// +// The control message handler functions are called from the NextReader, +// ReadMessage and message reader Read methods. The default close and ping +// handlers can block these methods for a short time when the handler writes to +// the connection. +// +// The application must read the connection to process close, ping and pong +// messages sent from the peer. If the application is not otherwise interested +// in messages from the peer, then the application should start a goroutine to +// read and discard messages from the peer. A simple example is: +// +// func readLoop(c *websocket.Conn) { +// for { +// if _, _, err := c.NextReader(); err != nil { +// c.Close() +// break +// } +// } +// } +// +// Concurrency +// +// Connections support one concurrent reader and one concurrent writer. +// +// Applications are responsible for ensuring that no more than one goroutine +// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, +// WriteJSON, EnableWriteCompression, SetCompressionLevel) concurrently and +// that no more than one goroutine calls the read methods (NextReader, +// SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, SetPingHandler) +// concurrently. +// +// The Close and WriteControl methods can be called concurrently with all other +// methods. +// +// Origin Considerations +// +// Web browsers allow Javascript applications to open a WebSocket connection to +// any host. It's up to the server to enforce an origin policy using the Origin +// request header sent by the browser. +// +// The Upgrader calls the function specified in the CheckOrigin field to check +// the origin. If the CheckOrigin function returns false, then the Upgrade +// method fails the WebSocket handshake with HTTP status 403. +// +// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail +// the handshake if the Origin request header is present and the Origin host is +// not equal to the Host request header. +// +// The deprecated package-level Upgrade function does not perform origin +// checking. The application is responsible for checking the Origin header +// before calling the Upgrade function. +// +// Buffers +// +// Connections buffer network input and output to reduce the number +// of system calls when reading or writing messages. +// +// Write buffers are also used for constructing WebSocket frames. See RFC 6455, +// Section 5 for a discussion of message framing. A WebSocket frame header is +// written to the network each time a write buffer is flushed to the network. +// Decreasing the size of the write buffer can increase the amount of framing +// overhead on the connection. +// +// The buffer sizes in bytes are specified by the ReadBufferSize and +// WriteBufferSize fields in the Dialer and Upgrader. The Dialer uses a default +// size of 4096 when a buffer size field is set to zero. The Upgrader reuses +// buffers created by the HTTP server when a buffer size field is set to zero. +// The HTTP server buffers have a size of 4096 at the time of this writing. +// +// The buffer sizes do not limit the size of a message that can be read or +// written by a connection. +// +// Buffers are held for the lifetime of the connection by default. If the +// Dialer or Upgrader WriteBufferPool field is set, then a connection holds the +// write buffer only when writing a message. +// +// Applications should tune the buffer sizes to balance memory use and +// performance. Increasing the buffer size uses more memory, but can reduce the +// number of system calls to read or write the network. In the case of writing, +// increasing the buffer size can reduce the number of frame headers written to +// the network. +// +// Some guidelines for setting buffer parameters are: +// +// Limit the buffer sizes to the maximum expected message size. Buffers larger +// than the largest message do not provide any benefit. +// +// Depending on the distribution of message sizes, setting the buffer size to +// a value less than the maximum expected message size can greatly reduce memory +// use with a small impact on performance. Here's an example: If 99% of the +// messages are smaller than 256 bytes and the maximum message size is 512 +// bytes, then a buffer size of 256 bytes will result in 1.01 more system calls +// than a buffer size of 512 bytes. The memory savings is 50%. +// +// A write buffer pool is useful when the application has a modest number +// writes over a large number of connections. when buffers are pooled, a larger +// buffer size has a reduced impact on total memory use and has the benefit of +// reducing system calls and frame overhead. +// +// Compression EXPERIMENTAL +// +// Per message compression extensions (RFC 7692) are experimentally supported +// by this package in a limited capacity. Setting the EnableCompression option +// to true in Dialer or Upgrader will attempt to negotiate per message deflate +// support. +// +// var upgrader = websocket.Upgrader{ +// EnableCompression: true, +// } +// +// If compression was successfully negotiated with the connection's peer, any +// message received in compressed form will be automatically decompressed. +// All Read methods will return uncompressed bytes. +// +// Per message compression of messages written to a connection can be enabled +// or disabled by calling the corresponding Conn method: +// +// conn.EnableWriteCompression(false) +// +// Currently this package does not support compression with "context takeover". +// This means that messages must be compressed and decompressed in isolation, +// without retaining sliding window or dictionary state across messages. For +// more details refer to RFC 7692. +// +// Use of compression is experimental and may result in decreased performance. +package websocket diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/join.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/join.go new file mode 100644 index 000000000000..c64f8c82901a --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/join.go @@ -0,0 +1,42 @@ +// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "io" + "strings" +) + +// JoinMessages concatenates received messages to create a single io.Reader. +// The string term is appended to each message. The returned reader does not +// support concurrent calls to the Read method. +func JoinMessages(c *Conn, term string) io.Reader { + return &joinReader{c: c, term: term} +} + +type joinReader struct { + c *Conn + term string + r io.Reader +} + +func (r *joinReader) Read(p []byte) (int, error) { + if r.r == nil { + var err error + _, r.r, err = r.c.NextReader() + if err != nil { + return 0, err + } + if r.term != "" { + r.r = io.MultiReader(r.r, strings.NewReader(r.term)) + } + } + n, err := r.r.Read(p) + if err == io.EOF { + err = nil + r.r = nil + } + return n, err +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/json.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/json.go new file mode 100644 index 000000000000..dc2c1f6415ff --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/json.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "encoding/json" + "io" +) + +// WriteJSON writes the JSON encoding of v as a message. +// +// Deprecated: Use c.WriteJSON instead. +func WriteJSON(c *Conn, v interface{}) error { + return c.WriteJSON(v) +} + +// WriteJSON writes the JSON encoding of v as a message. +// +// See the documentation for encoding/json Marshal for details about the +// conversion of Go values to JSON. +func (c *Conn) WriteJSON(v interface{}) error { + w, err := c.NextWriter(TextMessage) + if err != nil { + return err + } + err1 := json.NewEncoder(w).Encode(v) + err2 := w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// Deprecated: Use c.ReadJSON instead. +func ReadJSON(c *Conn, v interface{}) error { + return c.ReadJSON(v) +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// See the documentation for the encoding/json Unmarshal function for details +// about the conversion of JSON to a Go value. +func (c *Conn) ReadJSON(v interface{}) error { + _, r, err := c.NextReader() + if err != nil { + return err + } + err = json.NewDecoder(r).Decode(v) + if err == io.EOF { + // One value is expected in the message. + err = io.ErrUnexpectedEOF + } + return err +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask.go new file mode 100644 index 000000000000..d0742bf2a551 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask.go @@ -0,0 +1,55 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +//go:build !appengine +// +build !appengine + +package websocket + +import "unsafe" + +const wordSize = int(unsafe.Sizeof(uintptr(0))) + +func maskBytes(key [4]byte, pos int, b []byte) int { + // Mask one byte at a time for small buffers. + if len(b) < 2*wordSize { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 + } + + // Mask one byte at a time to word boundary. + if n := int(uintptr(unsafe.Pointer(&b[0]))) % wordSize; n != 0 { + n = wordSize - n + for i := range b[:n] { + b[i] ^= key[pos&3] + pos++ + } + b = b[n:] + } + + // Create aligned word size key. + var k [wordSize]byte + for i := range k { + k[i] = key[(pos+i)&3] + } + kw := *(*uintptr)(unsafe.Pointer(&k)) + + // Mask one word at a time. + n := (len(b) / wordSize) * wordSize + for i := 0; i < n; i += wordSize { + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&b[0])) + uintptr(i))) ^= kw + } + + // Mask one byte at a time for remaining bytes. + b = b[n:] + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + + return pos & 3 +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask_safe.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask_safe.go new file mode 100644 index 000000000000..36250ca7c47e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/mask_safe.go @@ -0,0 +1,16 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +//go:build appengine +// +build appengine + +package websocket + +func maskBytes(key [4]byte, pos int, b []byte) int { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/prepared.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/prepared.go new file mode 100644 index 000000000000..c854225e9676 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/prepared.go @@ -0,0 +1,102 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "net" + "sync" + "time" +) + +// PreparedMessage caches on the wire representations of a message payload. +// Use PreparedMessage to efficiently send a message payload to multiple +// connections. PreparedMessage is especially useful when compression is used +// because the CPU and memory expensive compression operation can be executed +// once for a given set of compression options. +type PreparedMessage struct { + messageType int + data []byte + mu sync.Mutex + frames map[prepareKey]*preparedFrame +} + +// prepareKey defines a unique set of options to cache prepared frames in PreparedMessage. +type prepareKey struct { + isServer bool + compress bool + compressionLevel int +} + +// preparedFrame contains data in wire representation. +type preparedFrame struct { + once sync.Once + data []byte +} + +// NewPreparedMessage returns an initialized PreparedMessage. You can then send +// it to connection using WritePreparedMessage method. Valid wire +// representation will be calculated lazily only once for a set of current +// connection options. +func NewPreparedMessage(messageType int, data []byte) (*PreparedMessage, error) { + pm := &PreparedMessage{ + messageType: messageType, + frames: make(map[prepareKey]*preparedFrame), + data: data, + } + + // Prepare a plain server frame. + _, frameData, err := pm.frame(prepareKey{isServer: true, compress: false}) + if err != nil { + return nil, err + } + + // To protect against caller modifying the data argument, remember the data + // copied to the plain server frame. + pm.data = frameData[len(frameData)-len(data):] + return pm, nil +} + +func (pm *PreparedMessage) frame(key prepareKey) (int, []byte, error) { + pm.mu.Lock() + frame, ok := pm.frames[key] + if !ok { + frame = &preparedFrame{} + pm.frames[key] = frame + } + pm.mu.Unlock() + + var err error + frame.once.Do(func() { + // Prepare a frame using a 'fake' connection. + // TODO: Refactor code in conn.go to allow more direct construction of + // the frame. + mu := make(chan struct{}, 1) + mu <- struct{}{} + var nc prepareConn + c := &Conn{ + conn: &nc, + mu: mu, + isServer: key.isServer, + compressionLevel: key.compressionLevel, + enableWriteCompression: true, + writeBuf: make([]byte, defaultWriteBufferSize+maxFrameHeaderSize), + } + if key.compress { + c.newCompressionWriter = compressNoContextTakeover + } + err = c.WriteMessage(pm.messageType, pm.data) + frame.data = nc.buf.Bytes() + }) + return pm.messageType, frame.data, err +} + +type prepareConn struct { + buf bytes.Buffer + net.Conn +} + +func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) } +func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil } diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/proxy.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/proxy.go new file mode 100644 index 000000000000..e0f466b72fbb --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/proxy.go @@ -0,0 +1,77 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/base64" + "errors" + "net" + "net/http" + "net/url" + "strings" +) + +type netDialerFunc func(network, addr string) (net.Conn, error) + +func (fn netDialerFunc) Dial(network, addr string) (net.Conn, error) { + return fn(network, addr) +} + +func init() { + proxy_RegisterDialerType("http", func(proxyURL *url.URL, forwardDialer proxy_Dialer) (proxy_Dialer, error) { + return &httpProxyDialer{proxyURL: proxyURL, forwardDial: forwardDialer.Dial}, nil + }) +} + +type httpProxyDialer struct { + proxyURL *url.URL + forwardDial func(network, addr string) (net.Conn, error) +} + +func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) { + hostPort, _ := hostPortNoPort(hpd.proxyURL) + conn, err := hpd.forwardDial(network, hostPort) + if err != nil { + return nil, err + } + + connectHeader := make(http.Header) + if user := hpd.proxyURL.User; user != nil { + proxyUser := user.Username() + if proxyPassword, passwordSet := user.Password(); passwordSet { + credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) + connectHeader.Set("Proxy-Authorization", "Basic "+credential) + } + } + + connectReq := &http.Request{ + Method: http.MethodConnect, + URL: &url.URL{Opaque: addr}, + Host: addr, + Header: connectHeader, + } + + if err := connectReq.Write(conn); err != nil { + conn.Close() + return nil, err + } + + // Read response. It's OK to use and discard buffered reader here becaue + // the remote server does not speak until spoken to. + br := bufio.NewReader(conn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + conn.Close() + return nil, err + } + + if resp.StatusCode != 200 { + conn.Close() + f := strings.SplitN(resp.Status, " ", 2) + return nil, errors.New(f[1]) + } + return conn, nil +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/server.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/server.go new file mode 100644 index 000000000000..24d53b38abed --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/server.go @@ -0,0 +1,365 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "errors" + "io" + "net/http" + "net/url" + "strings" + "time" +) + +// HandshakeError describes an error with the handshake from the peer. +type HandshakeError struct { + message string +} + +func (e HandshakeError) Error() string { return e.message } + +// Upgrader specifies parameters for upgrading an HTTP connection to a +// WebSocket connection. +// +// It is safe to call Upgrader's methods concurrently. +type Upgrader struct { + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then buffers allocated by the HTTP server are used. The + // I/O buffer sizes do not limit the size of the messages that can be sent + // or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the server's supported protocols in order of + // preference. If this field is not nil, then the Upgrade method negotiates a + // subprotocol by selecting the first match in this list with a protocol + // requested by the client. If there's no match, then no protocol is + // negotiated (the Sec-Websocket-Protocol header is not included in the + // handshake response). + Subprotocols []string + + // Error specifies the function for generating HTTP error responses. If Error + // is nil, then http.Error is used to generate the HTTP response. + Error func(w http.ResponseWriter, r *http.Request, status int, reason error) + + // CheckOrigin returns true if the request Origin header is acceptable. If + // CheckOrigin is nil, then a safe default is used: return false if the + // Origin request header is present and the origin host is not equal to + // request Host header. + // + // A CheckOrigin function should carefully validate the request origin to + // prevent cross-site request forgery. + CheckOrigin func(r *http.Request) bool + + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool +} + +func (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) { + err := HandshakeError{reason} + if u.Error != nil { + u.Error(w, r, status, err) + } else { + w.Header().Set("Sec-Websocket-Version", "13") + http.Error(w, http.StatusText(status), status) + } + return nil, err +} + +// checkSameOrigin returns true if the origin is not set or is equal to the request host. +func checkSameOrigin(r *http.Request) bool { + origin := r.Header["Origin"] + if len(origin) == 0 { + return true + } + u, err := url.Parse(origin[0]) + if err != nil { + return false + } + return equalASCIIFold(u.Host, r.Host) +} + +func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { + if u.Subprotocols != nil { + clientProtocols := Subprotocols(r) + for _, serverProtocol := range u.Subprotocols { + for _, clientProtocol := range clientProtocols { + if clientProtocol == serverProtocol { + return clientProtocol + } + } + } + } else if responseHeader != nil { + return responseHeader.Get("Sec-Websocket-Protocol") + } + return "" +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie). To specify +// subprotocols supported by the server, set Upgrader.Subprotocols directly. +// +// If the upgrade fails, then Upgrade replies to the client with an HTTP error +// response. +func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { + const badHandshake = "websocket: the client is not using the websocket protocol: " + + if !tokenListContainsValue(r.Header, "Connection", "upgrade") { + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'upgrade' token not found in 'Connection' header") + } + + if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header") + } + + if r.Method != http.MethodGet { + return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET") + } + + if !tokenListContainsValue(r.Header, "Sec-Websocket-Version", "13") { + return u.returnError(w, r, http.StatusBadRequest, "websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header") + } + + if _, ok := responseHeader["Sec-Websocket-Extensions"]; ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported") + } + + checkOrigin := u.CheckOrigin + if checkOrigin == nil { + checkOrigin = checkSameOrigin + } + if !checkOrigin(r) { + return u.returnError(w, r, http.StatusForbidden, "websocket: request origin not allowed by Upgrader.CheckOrigin") + } + + challengeKey := r.Header.Get("Sec-Websocket-Key") + if challengeKey == "" { + return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: 'Sec-WebSocket-Key' header is missing or blank") + } + + subprotocol := u.selectSubprotocol(r, responseHeader) + + // Negotiate PMCE + var compress bool + if u.EnableCompression { + for _, ext := range parseExtensions(r.Header) { + if ext[""] != "permessage-deflate" { + continue + } + compress = true + break + } + } + + h, ok := w.(http.Hijacker) + if !ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") + } + var brw *bufio.ReadWriter + netConn, brw, err := h.Hijack() + if err != nil { + return u.returnError(w, r, http.StatusInternalServerError, err.Error()) + } + + if brw.Reader.Buffered() > 0 { + netConn.Close() + return nil, errors.New("websocket: client sent data before handshake is complete") + } + + var br *bufio.Reader + if u.ReadBufferSize == 0 && bufioReaderSize(netConn, brw.Reader) > 256 { + // Reuse hijacked buffered reader as connection reader. + br = brw.Reader + } + + buf := bufioWriterBuffer(netConn, brw.Writer) + + var writeBuf []byte + if u.WriteBufferPool == nil && u.WriteBufferSize == 0 && len(buf) >= maxFrameHeaderSize+256 { + // Reuse hijacked write buffer as connection buffer. + writeBuf = buf + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize, u.WriteBufferPool, br, writeBuf) + c.subprotocol = subprotocol + + if compress { + c.newCompressionWriter = compressNoContextTakeover + c.newDecompressionReader = decompressNoContextTakeover + } + + // Use larger of hijacked buffer and connection write buffer for header. + p := buf + if len(c.writeBuf) > len(p) { + p = c.writeBuf + } + p = p[:0] + + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) + p = append(p, computeAcceptKey(challengeKey)...) + p = append(p, "\r\n"...) + if c.subprotocol != "" { + p = append(p, "Sec-WebSocket-Protocol: "...) + p = append(p, c.subprotocol...) + p = append(p, "\r\n"...) + } + if compress { + p = append(p, "Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover\r\n"...) + } + for k, vs := range responseHeader { + if k == "Sec-Websocket-Protocol" { + continue + } + for _, v := range vs { + p = append(p, k...) + p = append(p, ": "...) + for i := 0; i < len(v); i++ { + b := v[i] + if b <= 31 { + // prevent response splitting. + b = ' ' + } + p = append(p, b) + } + p = append(p, "\r\n"...) + } + } + p = append(p, "\r\n"...) + + // Clear deadlines set by HTTP server. + netConn.SetDeadline(time.Time{}) + + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout)) + } + if _, err = netConn.Write(p); err != nil { + netConn.Close() + return nil, err + } + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Time{}) + } + + return c, nil +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// Deprecated: Use websocket.Upgrader instead. +// +// Upgrade does not perform origin checking. The application is responsible for +// checking the Origin header before calling Upgrade. An example implementation +// of the same origin policy check is: +// +// if req.Header.Get("Origin") != "http://"+req.Host { +// http.Error(w, "Origin not allowed", http.StatusForbidden) +// return +// } +// +// If the endpoint supports subprotocols, then the application is responsible +// for negotiating the protocol used on the connection. Use the Subprotocols() +// function to get the subprotocols requested by the client. Use the +// Sec-Websocket-Protocol response header to specify the subprotocol selected +// by the application. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// negotiated subprotocol (Sec-Websocket-Protocol). +// +// The connection buffers IO to the underlying network connection. The +// readBufSize and writeBufSize parameters specify the size of the buffers to +// use. Messages can be larger than the buffers. +// +// If the request is not a valid WebSocket handshake, then Upgrade returns an +// error of type HandshakeError. Applications should handle this error by +// replying to the client with an HTTP error response. +func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) { + u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize} + u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { + // don't return errors to maintain backwards compatibility + } + u.CheckOrigin = func(r *http.Request) bool { + // allow all connections by default + return true + } + return u.Upgrade(w, r, responseHeader) +} + +// Subprotocols returns the subprotocols requested by the client in the +// Sec-Websocket-Protocol header. +func Subprotocols(r *http.Request) []string { + h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) + if h == "" { + return nil + } + protocols := strings.Split(h, ",") + for i := range protocols { + protocols[i] = strings.TrimSpace(protocols[i]) + } + return protocols +} + +// IsWebSocketUpgrade returns true if the client requested upgrade to the +// WebSocket protocol. +func IsWebSocketUpgrade(r *http.Request) bool { + return tokenListContainsValue(r.Header, "Connection", "upgrade") && + tokenListContainsValue(r.Header, "Upgrade", "websocket") +} + +// bufioReaderSize size returns the size of a bufio.Reader. +func bufioReaderSize(originalReader io.Reader, br *bufio.Reader) int { + // This code assumes that peek on a reset reader returns + // bufio.Reader.buf[:0]. + // TODO: Use bufio.Reader.Size() after Go 1.10 + br.Reset(originalReader) + if p, err := br.Peek(0); err == nil { + return cap(p) + } + return 0 +} + +// writeHook is an io.Writer that records the last slice passed to it vio +// io.Writer.Write. +type writeHook struct { + p []byte +} + +func (wh *writeHook) Write(p []byte) (int, error) { + wh.p = p + return len(p), nil +} + +// bufioWriterBuffer grabs the buffer from a bufio.Writer. +func bufioWriterBuffer(originalWriter io.Writer, bw *bufio.Writer) []byte { + // This code assumes that bufio.Writer.buf[:1] is passed to the + // bufio.Writer's underlying writer. + var wh writeHook + bw.Reset(&wh) + bw.WriteByte(0) + bw.Flush() + + bw.Reset(originalWriter) + + return wh.p[:cap(wh.p)] +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake.go new file mode 100644 index 000000000000..a62b68ccb11e --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake.go @@ -0,0 +1,21 @@ +//go:build go1.17 +// +build go1.17 + +package websocket + +import ( + "context" + "crypto/tls" +) + +func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.HandshakeContext(ctx); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake_116.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake_116.go new file mode 100644 index 000000000000..e1b2b44f6e6c --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/tls_handshake_116.go @@ -0,0 +1,21 @@ +//go:build !go1.17 +// +build !go1.17 + +package websocket + +import ( + "context" + "crypto/tls" +) + +func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.Handshake(); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/util.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/util.go new file mode 100644 index 000000000000..7bf2f66c6747 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/util.go @@ -0,0 +1,283 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "crypto/rand" + "crypto/sha1" + "encoding/base64" + "io" + "net/http" + "strings" + "unicode/utf8" +) + +var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11") + +func computeAcceptKey(challengeKey string) string { + h := sha1.New() + h.Write([]byte(challengeKey)) + h.Write(keyGUID) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +func generateChallengeKey() (string, error) { + p := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, p); err != nil { + return "", err + } + return base64.StdEncoding.EncodeToString(p), nil +} + +// Token octets per RFC 2616. +var isTokenOctet = [256]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, +} + +// skipSpace returns a slice of the string s with all leading RFC 2616 linear +// whitespace removed. +func skipSpace(s string) (rest string) { + i := 0 + for ; i < len(s); i++ { + if b := s[i]; b != ' ' && b != '\t' { + break + } + } + return s[i:] +} + +// nextToken returns the leading RFC 2616 token of s and the string following +// the token. +func nextToken(s string) (token, rest string) { + i := 0 + for ; i < len(s); i++ { + if !isTokenOctet[s[i]] { + break + } + } + return s[:i], s[i:] +} + +// nextTokenOrQuoted returns the leading token or quoted string per RFC 2616 +// and the string following the token or quoted string. +func nextTokenOrQuoted(s string) (value string, rest string) { + if !strings.HasPrefix(s, "\"") { + return nextToken(s) + } + s = s[1:] + for i := 0; i < len(s); i++ { + switch s[i] { + case '"': + return s[:i], s[i+1:] + case '\\': + p := make([]byte, len(s)-1) + j := copy(p, s[:i]) + escape := true + for i = i + 1; i < len(s); i++ { + b := s[i] + switch { + case escape: + escape = false + p[j] = b + j++ + case b == '\\': + escape = true + case b == '"': + return string(p[:j]), s[i+1:] + default: + p[j] = b + j++ + } + } + return "", "" + } + } + return "", "" +} + +// equalASCIIFold returns true if s is equal to t with ASCII case folding as +// defined in RFC 4790. +func equalASCIIFold(s, t string) bool { + for s != "" && t != "" { + sr, size := utf8.DecodeRuneInString(s) + s = s[size:] + tr, size := utf8.DecodeRuneInString(t) + t = t[size:] + if sr == tr { + continue + } + if 'A' <= sr && sr <= 'Z' { + sr = sr + 'a' - 'A' + } + if 'A' <= tr && tr <= 'Z' { + tr = tr + 'a' - 'A' + } + if sr != tr { + return false + } + } + return s == t +} + +// tokenListContainsValue returns true if the 1#token header with the given +// name contains a token equal to value with ASCII case folding. +func tokenListContainsValue(header http.Header, name string, value string) bool { +headers: + for _, s := range header[name] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + s = skipSpace(s) + if s != "" && s[0] != ',' { + continue headers + } + if equalASCIIFold(t, value) { + return true + } + if s == "" { + continue headers + } + s = s[1:] + } + } + return false +} + +// parseExtensions parses WebSocket extensions from a header. +func parseExtensions(header http.Header) []map[string]string { + // From RFC 6455: + // + // Sec-WebSocket-Extensions = extension-list + // extension-list = 1#extension + // extension = extension-token *( ";" extension-param ) + // extension-token = registered-token + // registered-token = token + // extension-param = token [ "=" (token | quoted-string) ] + // ;When using the quoted-string syntax variant, the value + // ;after quoted-string unescaping MUST conform to the + // ;'token' ABNF. + + var result []map[string]string +headers: + for _, s := range header["Sec-Websocket-Extensions"] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + ext := map[string]string{"": t} + for { + s = skipSpace(s) + if !strings.HasPrefix(s, ";") { + break + } + var k string + k, s = nextToken(skipSpace(s[1:])) + if k == "" { + continue headers + } + s = skipSpace(s) + var v string + if strings.HasPrefix(s, "=") { + v, s = nextTokenOrQuoted(skipSpace(s[1:])) + s = skipSpace(s) + } + if s != "" && s[0] != ',' && s[0] != ';' { + continue headers + } + ext[k] = v + } + if s != "" && s[0] != ',' { + continue headers + } + result = append(result, ext) + if s == "" { + continue headers + } + s = s[1:] + } + } + return result +} diff --git a/cluster-autoscaler/vendor/github.com/gorilla/websocket/x_net_proxy.go b/cluster-autoscaler/vendor/github.com/gorilla/websocket/x_net_proxy.go new file mode 100644 index 000000000000..2e668f6b8821 --- /dev/null +++ b/cluster-autoscaler/vendor/github.com/gorilla/websocket/x_net_proxy.go @@ -0,0 +1,473 @@ +// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT. +//go:generate bundle -o x_net_proxy.go golang.org/x/net/proxy + +// Package proxy provides support for a variety of protocols to proxy network +// data. +// + +package websocket + +import ( + "errors" + "io" + "net" + "net/url" + "os" + "strconv" + "strings" + "sync" +) + +type proxy_direct struct{} + +// Direct is a direct proxy: one that makes network connections directly. +var proxy_Direct = proxy_direct{} + +func (proxy_direct) Dial(network, addr string) (net.Conn, error) { + return net.Dial(network, addr) +} + +// A PerHost directs connections to a default Dialer unless the host name +// requested matches one of a number of exceptions. +type proxy_PerHost struct { + def, bypass proxy_Dialer + + bypassNetworks []*net.IPNet + bypassIPs []net.IP + bypassZones []string + bypassHosts []string +} + +// NewPerHost returns a PerHost Dialer that directs connections to either +// defaultDialer or bypass, depending on whether the connection matches one of +// the configured rules. +func proxy_NewPerHost(defaultDialer, bypass proxy_Dialer) *proxy_PerHost { + return &proxy_PerHost{ + def: defaultDialer, + bypass: bypass, + } +} + +// Dial connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *proxy_PerHost) Dial(network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + + return p.dialerForRequest(host).Dial(network, addr) +} + +func (p *proxy_PerHost) dialerForRequest(host string) proxy_Dialer { + if ip := net.ParseIP(host); ip != nil { + for _, net := range p.bypassNetworks { + if net.Contains(ip) { + return p.bypass + } + } + for _, bypassIP := range p.bypassIPs { + if bypassIP.Equal(ip) { + return p.bypass + } + } + return p.def + } + + for _, zone := range p.bypassZones { + if strings.HasSuffix(host, zone) { + return p.bypass + } + if host == zone[1:] { + // For a zone ".example.com", we match "example.com" + // too. + return p.bypass + } + } + for _, bypassHost := range p.bypassHosts { + if bypassHost == host { + return p.bypass + } + } + return p.def +} + +// AddFromString parses a string that contains comma-separated values +// specifying hosts that should use the bypass proxy. Each value is either an +// IP address, a CIDR range, a zone (*.example.com) or a host name +// (localhost). A best effort is made to parse the string and errors are +// ignored. +func (p *proxy_PerHost) AddFromString(s string) { + hosts := strings.Split(s, ",") + for _, host := range hosts { + host = strings.TrimSpace(host) + if len(host) == 0 { + continue + } + if strings.Contains(host, "/") { + // We assume that it's a CIDR address like 127.0.0.0/8 + if _, net, err := net.ParseCIDR(host); err == nil { + p.AddNetwork(net) + } + continue + } + if ip := net.ParseIP(host); ip != nil { + p.AddIP(ip) + continue + } + if strings.HasPrefix(host, "*.") { + p.AddZone(host[1:]) + continue + } + p.AddHost(host) + } +} + +// AddIP specifies an IP address that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match an IP. +func (p *proxy_PerHost) AddIP(ip net.IP) { + p.bypassIPs = append(p.bypassIPs, ip) +} + +// AddNetwork specifies an IP range that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match. +func (p *proxy_PerHost) AddNetwork(net *net.IPNet) { + p.bypassNetworks = append(p.bypassNetworks, net) +} + +// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of +// "example.com" matches "example.com" and all of its subdomains. +func (p *proxy_PerHost) AddZone(zone string) { + if strings.HasSuffix(zone, ".") { + zone = zone[:len(zone)-1] + } + if !strings.HasPrefix(zone, ".") { + zone = "." + zone + } + p.bypassZones = append(p.bypassZones, zone) +} + +// AddHost specifies a host name that will use the bypass proxy. +func (p *proxy_PerHost) AddHost(host string) { + if strings.HasSuffix(host, ".") { + host = host[:len(host)-1] + } + p.bypassHosts = append(p.bypassHosts, host) +} + +// A Dialer is a means to establish a connection. +type proxy_Dialer interface { + // Dial connects to the given address via the proxy. + Dial(network, addr string) (c net.Conn, err error) +} + +// Auth contains authentication parameters that specific Dialers may require. +type proxy_Auth struct { + User, Password string +} + +// FromEnvironment returns the dialer specified by the proxy related variables in +// the environment. +func proxy_FromEnvironment() proxy_Dialer { + allProxy := proxy_allProxyEnv.Get() + if len(allProxy) == 0 { + return proxy_Direct + } + + proxyURL, err := url.Parse(allProxy) + if err != nil { + return proxy_Direct + } + proxy, err := proxy_FromURL(proxyURL, proxy_Direct) + if err != nil { + return proxy_Direct + } + + noProxy := proxy_noProxyEnv.Get() + if len(noProxy) == 0 { + return proxy + } + + perHost := proxy_NewPerHost(proxy, proxy_Direct) + perHost.AddFromString(noProxy) + return perHost +} + +// proxySchemes is a map from URL schemes to a function that creates a Dialer +// from a URL with such a scheme. +var proxy_proxySchemes map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error) + +// RegisterDialerType takes a URL scheme and a function to generate Dialers from +// a URL with that scheme and a forwarding Dialer. Registered schemes are used +// by FromURL. +func proxy_RegisterDialerType(scheme string, f func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) { + if proxy_proxySchemes == nil { + proxy_proxySchemes = make(map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) + } + proxy_proxySchemes[scheme] = f +} + +// FromURL returns a Dialer given a URL specification and an underlying +// Dialer for it to make network requests. +func proxy_FromURL(u *url.URL, forward proxy_Dialer) (proxy_Dialer, error) { + var auth *proxy_Auth + if u.User != nil { + auth = new(proxy_Auth) + auth.User = u.User.Username() + if p, ok := u.User.Password(); ok { + auth.Password = p + } + } + + switch u.Scheme { + case "socks5": + return proxy_SOCKS5("tcp", u.Host, auth, forward) + } + + // If the scheme doesn't match any of the built-in schemes, see if it + // was registered by another package. + if proxy_proxySchemes != nil { + if f, ok := proxy_proxySchemes[u.Scheme]; ok { + return f(u, forward) + } + } + + return nil, errors.New("proxy: unknown scheme: " + u.Scheme) +} + +var ( + proxy_allProxyEnv = &proxy_envOnce{ + names: []string{"ALL_PROXY", "all_proxy"}, + } + proxy_noProxyEnv = &proxy_envOnce{ + names: []string{"NO_PROXY", "no_proxy"}, + } +) + +// envOnce looks up an environment variable (optionally by multiple +// names) once. It mitigates expensive lookups on some platforms +// (e.g. Windows). +// (Borrowed from net/http/transport.go) +type proxy_envOnce struct { + names []string + once sync.Once + val string +} + +func (e *proxy_envOnce) Get() string { + e.once.Do(e.init) + return e.val +} + +func (e *proxy_envOnce) init() { + for _, n := range e.names { + e.val = os.Getenv(n) + if e.val != "" { + return + } + } +} + +// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address +// with an optional username and password. See RFC 1928 and RFC 1929. +func proxy_SOCKS5(network, addr string, auth *proxy_Auth, forward proxy_Dialer) (proxy_Dialer, error) { + s := &proxy_socks5{ + network: network, + addr: addr, + forward: forward, + } + if auth != nil { + s.user = auth.User + s.password = auth.Password + } + + return s, nil +} + +type proxy_socks5 struct { + user, password string + network, addr string + forward proxy_Dialer +} + +const proxy_socks5Version = 5 + +const ( + proxy_socks5AuthNone = 0 + proxy_socks5AuthPassword = 2 +) + +const proxy_socks5Connect = 1 + +const ( + proxy_socks5IP4 = 1 + proxy_socks5Domain = 3 + proxy_socks5IP6 = 4 +) + +var proxy_socks5Errors = []string{ + "", + "general failure", + "connection forbidden", + "network unreachable", + "host unreachable", + "connection refused", + "TTL expired", + "command not supported", + "address type not supported", +} + +// Dial connects to the address addr on the given network via the SOCKS5 proxy. +func (s *proxy_socks5) Dial(network, addr string) (net.Conn, error) { + switch network { + case "tcp", "tcp6", "tcp4": + default: + return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network) + } + + conn, err := s.forward.Dial(s.network, s.addr) + if err != nil { + return nil, err + } + if err := s.connect(conn, addr); err != nil { + conn.Close() + return nil, err + } + return conn, nil +} + +// connect takes an existing connection to a socks5 proxy server, +// and commands the server to extend that connection to target, +// which must be a canonical address with a host and port. +func (s *proxy_socks5) connect(conn net.Conn, target string) error { + host, portStr, err := net.SplitHostPort(target) + if err != nil { + return err + } + + port, err := strconv.Atoi(portStr) + if err != nil { + return errors.New("proxy: failed to parse port number: " + portStr) + } + if port < 1 || port > 0xffff { + return errors.New("proxy: port number out of range: " + portStr) + } + + // the size here is just an estimate + buf := make([]byte, 0, 6+len(host)) + + buf = append(buf, proxy_socks5Version) + if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 { + buf = append(buf, 2 /* num auth methods */, proxy_socks5AuthNone, proxy_socks5AuthPassword) + } else { + buf = append(buf, 1 /* num auth methods */, proxy_socks5AuthNone) + } + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + if buf[0] != 5 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0]))) + } + if buf[1] == 0xff { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication") + } + + // See RFC 1929 + if buf[1] == proxy_socks5AuthPassword { + buf = buf[:0] + buf = append(buf, 1 /* password protocol version */) + buf = append(buf, uint8(len(s.user))) + buf = append(buf, s.user...) + buf = append(buf, uint8(len(s.password))) + buf = append(buf, s.password...) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if buf[1] != 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password") + } + } + + buf = buf[:0] + buf = append(buf, proxy_socks5Version, proxy_socks5Connect, 0 /* reserved */) + + if ip := net.ParseIP(host); ip != nil { + if ip4 := ip.To4(); ip4 != nil { + buf = append(buf, proxy_socks5IP4) + ip = ip4 + } else { + buf = append(buf, proxy_socks5IP6) + } + buf = append(buf, ip...) + } else { + if len(host) > 255 { + return errors.New("proxy: destination host name too long: " + host) + } + buf = append(buf, proxy_socks5Domain) + buf = append(buf, byte(len(host))) + buf = append(buf, host...) + } + buf = append(buf, byte(port>>8), byte(port)) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:4]); err != nil { + return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + failure := "unknown error" + if int(buf[1]) < len(proxy_socks5Errors) { + failure = proxy_socks5Errors[buf[1]] + } + + if len(failure) > 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure) + } + + bytesToDiscard := 0 + switch buf[3] { + case proxy_socks5IP4: + bytesToDiscard = net.IPv4len + case proxy_socks5IP6: + bytesToDiscard = net.IPv6len + case proxy_socks5Domain: + _, err := io.ReadFull(conn, buf[:1]) + if err != nil { + return errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + bytesToDiscard = int(buf[0]) + default: + return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr) + } + + if cap(buf) < bytesToDiscard { + buf = make([]byte, bytesToDiscard) + } else { + buf = buf[:bytesToDiscard] + } + if _, err := io.ReadFull(conn, buf); err != nil { + return errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + // Also need to discard the port number + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + return nil +} diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go index adbc4b23086a..9cca98c4c0a2 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/memory.go @@ -101,8 +101,9 @@ func statMemory(dirPath string, stats *cgroups.Stats) error { if err != nil { if errors.Is(err, unix.ENOENT) && dirPath == UnifiedMountpoint { // The root cgroup does not have memory.{current,max} - // so emulate those using data from /proc/meminfo. - return statsFromMeminfo(stats) + // so emulate those using data from /proc/meminfo and + // /sys/fs/cgroup/memory.stat + return rootStatsFromMeminfo(stats) } return err } @@ -154,7 +155,7 @@ func getMemoryDataV2(path, name string) (cgroups.MemoryData, error) { return memoryData, nil } -func statsFromMeminfo(stats *cgroups.Stats) error { +func rootStatsFromMeminfo(stats *cgroups.Stats) error { const file = "/proc/meminfo" f, err := os.Open(file) if err != nil { @@ -166,14 +167,10 @@ func statsFromMeminfo(stats *cgroups.Stats) error { var ( swap_free uint64 swap_total uint64 - main_total uint64 - main_free uint64 ) mem := map[string]*uint64{ "SwapFree": &swap_free, "SwapTotal": &swap_total, - "MemTotal": &main_total, - "MemFree": &main_free, } found := 0 @@ -206,11 +203,18 @@ func statsFromMeminfo(stats *cgroups.Stats) error { return &parseError{Path: "", File: file, Err: err} } + // cgroup v1 `usage_in_bytes` reports memory usage as the sum of + // - rss (NR_ANON_MAPPED) + // - cache (NR_FILE_PAGES) + // cgroup v1 reports SwapUsage values as mem+swap combined + // cgroup v2 reports rss and cache as anon and file. + // sum `anon` + `file` to report the same value as `usage_in_bytes` in v1. + // sum swap usage as combined mem+swap usage for consistency as well. + stats.MemoryStats.Usage.Usage = stats.MemoryStats.Stats["anon"] + stats.MemoryStats.Stats["file"] + stats.MemoryStats.Usage.Limit = math.MaxUint64 stats.MemoryStats.SwapUsage.Usage = (swap_total - swap_free) * 1024 stats.MemoryStats.SwapUsage.Limit = math.MaxUint64 - - stats.MemoryStats.Usage.Usage = (main_total - main_free) * 1024 - stats.MemoryStats.Usage.Limit = math.MaxUint64 + stats.MemoryStats.SwapUsage.Usage += stats.MemoryStats.Usage.Usage return nil } diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go index 5d561facebcb..c5b476e2cc89 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/common.go @@ -370,7 +370,10 @@ retry: // In case a unit with the same name exists, this may // be a leftover failed unit. Reset it, so systemd can // remove it, and retry once. - resetFailedUnit(cm, unitName) + err = resetFailedUnit(cm, unitName) + if err != nil { + logrus.Warnf("unable to reset failed unit: %v", err) + } retry = false goto retry } @@ -385,11 +388,11 @@ retry: close(statusChan) // Please refer to https://pkg.go.dev/github.com/coreos/go-systemd/v22/dbus#Conn.StartUnit if s != "done" { - resetFailedUnit(cm, unitName) + _ = resetFailedUnit(cm, unitName) return fmt.Errorf("error creating systemd unit `%s`: got `%s`", unitName, s) } case <-timeout.C: - resetFailedUnit(cm, unitName) + _ = resetFailedUnit(cm, unitName) return errors.New("Timeout waiting for systemd to create " + unitName) } @@ -417,16 +420,17 @@ func stopUnit(cm *dbusConnManager, unitName string) error { return errors.New("Timed out while waiting for systemd to remove " + unitName) } } + + // In case of a failed unit, let systemd remove it. + _ = resetFailedUnit(cm, unitName) + return nil } -func resetFailedUnit(cm *dbusConnManager, name string) { - err := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error { +func resetFailedUnit(cm *dbusConnManager, name string) error { + return cm.retryOnDisconnect(func(c *systemdDbus.Conn) error { return c.ResetFailedUnitContext(context.TODO(), name) }) - if err != nil { - logrus.Warnf("unable to reset failed unit: %v", err) - } } func getUnitTypeProperty(cm *dbusConnManager, unitName string, unitType string, propertyName string) (*systemdDbus.Property, error) { diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go index fe036b3bda5d..a574552daebf 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/v1.go @@ -417,6 +417,15 @@ func (m *legacyManager) Set(r *configs.Resources) error { if err := m.doFreeze(configs.Frozen); err != nil { // If freezer cgroup isn't supported, we just warn about it. logrus.Infof("freeze container before SetUnitProperties failed: %v", err) + // skip update the cgroup while frozen failed. #3803 + if !errors.Is(err, errSubsystemDoesNotExist) { + if needsThaw { + if thawErr := m.doFreeze(configs.Thawed); thawErr != nil { + logrus.Infof("thaw container after doFreeze failed: %v", thawErr) + } + } + return err + } } } setErr := setUnitProperties(m.dbus, unitName, properties...) diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go index dd61dfd3c90c..2f17e37d43dc 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/container_linux.go @@ -40,7 +40,7 @@ type linuxContainer struct { root string config *configs.Config cgroupManager cgroups.Manager - intelRdtManager intelrdt.Manager + intelRdtManager *intelrdt.Manager initPath string initArgs []string initProcess parentProcess @@ -146,19 +146,21 @@ func (c *linuxContainer) OCIState() (*specs.State, error) { return c.currentOCIState() } -func (c *linuxContainer) Processes() ([]int, error) { - var pids []int - status, err := c.currentStatus() - if err != nil { - return pids, err +// ignoreCgroupError filters out cgroup-related errors that can be ignored, +// because the container is stopped and its cgroup is gone. +func (c *linuxContainer) ignoreCgroupError(err error) error { + if err == nil { + return nil } - // for systemd cgroup, the unit's cgroup path will be auto removed if container's all processes exited - if status == Stopped && !c.cgroupManager.Exists() { - return pids, nil + if errors.Is(err, os.ErrNotExist) && c.runType() == Stopped && !c.cgroupManager.Exists() { + return nil } + return err +} - pids, err = c.cgroupManager.GetAllPids() - if err != nil { +func (c *linuxContainer) Processes() ([]int, error) { + pids, err := c.cgroupManager.GetAllPids() + if err = c.ignoreCgroupError(err); err != nil { return nil, fmt.Errorf("unable to get all container pids: %w", err) } return pids, nil @@ -382,11 +384,12 @@ func (c *linuxContainer) Signal(s os.Signal, all bool) error { return err } if all { - // for systemd cgroup, the unit's cgroup path will be auto removed if container's all processes exited if status == Stopped && !c.cgroupManager.Exists() { + // Avoid calling signalAllProcesses which may print + // a warning trying to freeze a non-existing cgroup. return nil } - return signalAllProcesses(c.cgroupManager, s) + return c.ignoreCgroupError(signalAllProcesses(c.cgroupManager, s)) } // to avoid a PID reuse attack if status == Running || status == Created || status == Paused { diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go index a1fa7de2d249..546d0eb000c0 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/factory_linux.go @@ -48,20 +48,6 @@ func InitArgs(args ...string) func(*LinuxFactory) error { } } -// IntelRdtfs is an options func to configure a LinuxFactory to return -// containers that use the Intel RDT "resource control" filesystem to -// create and manage Intel RDT resources (e.g., L3 cache, memory bandwidth). -func IntelRdtFs(l *LinuxFactory) error { - if !intelrdt.IsCATEnabled() && !intelrdt.IsMBAEnabled() { - l.NewIntelRdtManager = nil - } else { - l.NewIntelRdtManager = func(config *configs.Config, id string, path string) intelrdt.Manager { - return intelrdt.NewManager(config, id, path) - } - } - return nil -} - // TmpfsRoot is an option func to mount LinuxFactory.Root to tmpfs. func TmpfsRoot(l *LinuxFactory) error { mounted, err := mountinfo.Mounted(l.Root) @@ -136,9 +122,6 @@ type LinuxFactory struct { // Validator provides validation to container configurations. Validator validate.Validator - - // NewIntelRdtManager returns an initialized Intel RDT manager for a single container. - NewIntelRdtManager func(config *configs.Config, id string, path string) intelrdt.Manager } func (l *LinuxFactory) Create(id string, config *configs.Config) (Container, error) { @@ -208,18 +191,16 @@ func (l *LinuxFactory) Create(id string, config *configs.Config) (Container, err return nil, err } c := &linuxContainer{ - id: id, - root: containerRoot, - config: config, - initPath: l.InitPath, - initArgs: l.InitArgs, - criuPath: l.CriuPath, - newuidmapPath: l.NewuidmapPath, - newgidmapPath: l.NewgidmapPath, - cgroupManager: cm, - } - if l.NewIntelRdtManager != nil { - c.intelRdtManager = l.NewIntelRdtManager(config, id, "") + id: id, + root: containerRoot, + config: config, + initPath: l.InitPath, + initArgs: l.InitArgs, + criuPath: l.CriuPath, + newuidmapPath: l.NewuidmapPath, + newgidmapPath: l.NewgidmapPath, + cgroupManager: cm, + intelRdtManager: intelrdt.NewManager(config, id, ""), } c.state = &stoppedState{c: c} return c, nil @@ -261,12 +242,10 @@ func (l *LinuxFactory) Load(id string) (Container, error) { newuidmapPath: l.NewuidmapPath, newgidmapPath: l.NewgidmapPath, cgroupManager: cm, + intelRdtManager: intelrdt.NewManager(&state.Config, id, state.IntelRdtPath), root: containerRoot, created: state.Created, } - if l.NewIntelRdtManager != nil { - c.intelRdtManager = l.NewIntelRdtManager(&state.Config, id, state.IntelRdtPath) - } c.state = &loadedState{c: c} if err := c.refreshState(); err != nil { return nil, err diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go index 2e4c59353c83..5b88c71fc83a 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/init_linux.go @@ -116,17 +116,17 @@ func populateProcessEnvironment(env []string) error { for _, pair := range env { p := strings.SplitN(pair, "=", 2) if len(p) < 2 { - return fmt.Errorf("invalid environment variable: %q", pair) + return errors.New("invalid environment variable: missing '='") } name, val := p[0], p[1] if name == "" { - return fmt.Errorf("environment variable name can't be empty: %q", pair) + return errors.New("invalid environment variable: name cannot be empty") } if strings.IndexByte(name, 0) >= 0 { - return fmt.Errorf("environment variable name can't contain null(\\x00): %q", pair) + return fmt.Errorf("invalid environment variable %q: name contains nul byte (\\x00)", name) } if strings.IndexByte(val, 0) >= 0 { - return fmt.Errorf("environment variable value can't contain null(\\x00): %q", pair) + return fmt.Errorf("invalid environment variable %q: value contains nul byte (\\x00)", name) } if err := os.Setenv(name, val); err != nil { return err diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go index 8b6bf3ef09dc..0f5c457b099a 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/intelrdt.go @@ -1,11 +1,9 @@ package intelrdt import ( - "bufio" "bytes" "errors" "fmt" - "io" "os" "path/filepath" "strconv" @@ -13,6 +11,8 @@ import ( "sync" "github.com/moby/sys/mountinfo" + "golang.org/x/sys/unix" + "github.com/opencontainers/runc/libcontainer/cgroups/fscommon" "github.com/opencontainers/runc/libcontainer/configs" ) @@ -145,34 +145,31 @@ import ( * } */ -type Manager interface { - // Applies Intel RDT configuration to the process with the specified pid - Apply(pid int) error - - // Returns statistics for Intel RDT - GetStats() (*Stats, error) - - // Destroys the Intel RDT container-specific 'container_id' group - Destroy() error - - // Returns Intel RDT path to save in a state file and to be able to - // restore the object later - GetPath() string - - // Set Intel RDT "resource control" filesystem as configured. - Set(container *configs.Config) error -} - -// This implements interface Manager -type intelRdtManager struct { +type Manager struct { mu sync.Mutex config *configs.Config id string path string } -func NewManager(config *configs.Config, id string, path string) Manager { - return &intelRdtManager{ +// NewManager returns a new instance of Manager, or nil if the Intel RDT +// functionality is not specified in the config, available from hardware or +// enabled in the kernel. +func NewManager(config *configs.Config, id string, path string) *Manager { + if config.IntelRdt == nil { + return nil + } + if _, err := Root(); err != nil { + // Intel RDT is not available. + return nil + } + return newManager(config, id, path) +} + +// newManager is the same as NewManager, except it does not check if the feature +// is actually available. Used by unit tests that mock intelrdt paths. +func newManager(config *configs.Config, id string, path string) *Manager { + return &Manager{ config: config, id: id, path: path, @@ -188,71 +185,52 @@ var ( catEnabled bool // The flag to indicate if Intel RDT/MBA is enabled mbaEnabled bool - // The flag to indicate if Intel RDT/MBA Software Controller is enabled - mbaScEnabled bool // For Intel RDT initialization initOnce sync.Once - errNotFound = errors.New("Intel RDT resctrl mount point not found") + errNotFound = errors.New("Intel RDT not available") ) // Check if Intel RDT sub-features are enabled in featuresInit() func featuresInit() { initOnce.Do(func() { - // 1. Check if hardware and kernel support Intel RDT sub-features - flagsSet, err := parseCpuInfoFile("/proc/cpuinfo") - if err != nil { - return - } - - // 2. Check if Intel RDT "resource control" filesystem is available. + // 1. Check if Intel RDT "resource control" filesystem is available. // The user guarantees to mount the filesystem. root, err := Root() if err != nil { return } - // 3. Double check if Intel RDT sub-features are available in - // "resource control" filesystem. Intel RDT sub-features can be + // 2. Check if Intel RDT sub-features are available in "resource + // control" filesystem. Intel RDT sub-features can be // selectively disabled or enabled by kernel command line // (e.g., rdt=!l3cat,mba) in 4.14 and newer kernel - if flagsSet.CAT { - if _, err := os.Stat(filepath.Join(root, "info", "L3")); err == nil { - catEnabled = true - } + if _, err := os.Stat(filepath.Join(root, "info", "L3")); err == nil { + catEnabled = true } - if mbaScEnabled { - // We confirm MBA Software Controller is enabled in step 2, - // MBA should be enabled because MBA Software Controller - // depends on MBA + if _, err := os.Stat(filepath.Join(root, "info", "MB")); err == nil { mbaEnabled = true - } else if flagsSet.MBA { - if _, err := os.Stat(filepath.Join(root, "info", "MB")); err == nil { - mbaEnabled = true - } } - if flagsSet.MBMTotal || flagsSet.MBMLocal || flagsSet.CMT { - if _, err := os.Stat(filepath.Join(root, "info", "L3_MON")); err != nil { - return - } - enabledMonFeatures, err = getMonFeatures(root) - if err != nil { - return - } - if enabledMonFeatures.mbmTotalBytes || enabledMonFeatures.mbmLocalBytes { - mbmEnabled = true - } - if enabledMonFeatures.llcOccupancy { - cmtEnabled = true - } + if _, err := os.Stat(filepath.Join(root, "info", "L3_MON")); err != nil { + return + } + enabledMonFeatures, err = getMonFeatures(root) + if err != nil { + return + } + if enabledMonFeatures.mbmTotalBytes || enabledMonFeatures.mbmLocalBytes { + mbmEnabled = true + } + if enabledMonFeatures.llcOccupancy { + cmtEnabled = true } }) } -// Return the mount point path of Intel RDT "resource control" filesysem -func findIntelRdtMountpointDir(f io.Reader) (string, error) { - mi, err := mountinfo.GetMountsFromReader(f, func(m *mountinfo.Info) (bool, bool) { +// findIntelRdtMountpointDir returns the mount point of the Intel RDT "resource control" filesystem. +func findIntelRdtMountpointDir() (string, error) { + mi, err := mountinfo.GetMounts(func(m *mountinfo.Info) (bool, bool) { // similar to mountinfo.FSTypeFilter but stops after the first match if m.FSType == "resctrl" { return false, true // don't skip, stop @@ -266,97 +244,45 @@ func findIntelRdtMountpointDir(f io.Reader) (string, error) { return "", errNotFound } - // Check if MBA Software Controller is enabled through mount option "-o mba_MBps" - if strings.Contains(","+mi[0].VFSOptions+",", ",mba_MBps,") { - mbaScEnabled = true - } - return mi[0].Mountpoint, nil } // For Root() use only. var ( - intelRdtRoot string - rootMu sync.Mutex + intelRdtRoot string + intelRdtRootErr error + rootOnce sync.Once ) +// The kernel creates this (empty) directory if resctrl is supported by the +// hardware and kernel. The user is responsible for mounting the resctrl +// filesystem, and they could mount it somewhere else if they wanted to. +const defaultResctrlMountpoint = "/sys/fs/resctrl" + // Root returns the Intel RDT "resource control" filesystem mount point. func Root() (string, error) { - rootMu.Lock() - defer rootMu.Unlock() - - if intelRdtRoot != "" { - return intelRdtRoot, nil - } - - f, err := os.Open("/proc/self/mountinfo") - if err != nil { - return "", err - } - root, err := findIntelRdtMountpointDir(f) - f.Close() - if err != nil { - return "", err - } - - if _, err := os.Stat(root); err != nil { - return "", err - } - - intelRdtRoot = root - return intelRdtRoot, nil -} - -type cpuInfoFlags struct { - CAT bool // Cache Allocation Technology - MBA bool // Memory Bandwidth Allocation - - // Memory Bandwidth Monitoring related. - MBMTotal bool - MBMLocal bool - - CMT bool // Cache Monitoring Technology -} - -func parseCpuInfoFile(path string) (cpuInfoFlags, error) { - infoFlags := cpuInfoFlags{} - - f, err := os.Open(path) - if err != nil { - return infoFlags, err - } - defer f.Close() - - s := bufio.NewScanner(f) - for s.Scan() { - line := s.Text() - - // Search "cat_l3" and "mba" flags in first "flags" line - if strings.HasPrefix(line, "flags") { - flags := strings.Split(line, " ") - // "cat_l3" flag for CAT and "mba" flag for MBA - for _, flag := range flags { - switch flag { - case "cat_l3": - infoFlags.CAT = true - case "mba": - infoFlags.MBA = true - case "cqm_mbm_total": - infoFlags.MBMTotal = true - case "cqm_mbm_local": - infoFlags.MBMLocal = true - case "cqm_occup_llc": - infoFlags.CMT = true - } + rootOnce.Do(func() { + // Does this system support resctrl? + var statfs unix.Statfs_t + if err := unix.Statfs(defaultResctrlMountpoint, &statfs); err != nil { + if errors.Is(err, unix.ENOENT) { + err = errNotFound } - return infoFlags, nil + intelRdtRootErr = err + return } - } - if err := s.Err(); err != nil { - return infoFlags, err - } - return infoFlags, nil + // Has the resctrl fs been mounted to the default mount point? + if statfs.Type == unix.RDTGROUP_SUPER_MAGIC { + intelRdtRoot = defaultResctrlMountpoint + return + } + + // The resctrl fs could have been mounted somewhere nonstandard. + intelRdtRoot, intelRdtRootErr = findIntelRdtMountpointDir() + }) + + return intelRdtRoot, intelRdtRootErr } // Gets a single uint64 value from the specified file. @@ -502,14 +428,8 @@ func IsMBAEnabled() bool { return mbaEnabled } -// Check if Intel RDT/MBA Software Controller is enabled -func IsMBAScEnabled() bool { - featuresInit() - return mbaScEnabled -} - // Get the path of the clos group in "resource control" filesystem that the container belongs to -func (m *intelRdtManager) getIntelRdtPath() (string, error) { +func (m *Manager) getIntelRdtPath() (string, error) { rootPath, err := Root() if err != nil { return "", err @@ -524,7 +444,7 @@ func (m *intelRdtManager) getIntelRdtPath() (string, error) { } // Applies Intel RDT configuration to the process with the specified pid -func (m *intelRdtManager) Apply(pid int) (err error) { +func (m *Manager) Apply(pid int) (err error) { // If intelRdt is not specified in config, we do nothing if m.config.IntelRdt == nil { return nil @@ -559,11 +479,11 @@ func (m *intelRdtManager) Apply(pid int) (err error) { } // Destroys the Intel RDT container-specific 'container_id' group -func (m *intelRdtManager) Destroy() error { +func (m *Manager) Destroy() error { // Don't remove resctrl group if closid has been explicitly specified. The // group is likely externally managed, i.e. by some other entity than us. // There are probably other containers/tasks sharing the same group. - if m.config.IntelRdt == nil || m.config.IntelRdt.ClosID == "" { + if m.config.IntelRdt != nil && m.config.IntelRdt.ClosID == "" { m.mu.Lock() defer m.mu.Unlock() if err := os.RemoveAll(m.GetPath()); err != nil { @@ -576,7 +496,7 @@ func (m *intelRdtManager) Destroy() error { // Returns Intel RDT path to save in a state file and to be able to // restore the object later -func (m *intelRdtManager) GetPath() string { +func (m *Manager) GetPath() string { if m.path == "" { m.path, _ = m.getIntelRdtPath() } @@ -584,7 +504,7 @@ func (m *intelRdtManager) GetPath() string { } // Returns statistics for Intel RDT -func (m *intelRdtManager) GetStats() (*Stats, error) { +func (m *Manager) GetStats() (*Stats, error) { // If intelRdt is not specified in config if m.config.IntelRdt == nil { return nil, nil @@ -670,7 +590,7 @@ func (m *intelRdtManager) GetStats() (*Stats, error) { } // Set Intel RDT "resource control" filesystem as configured. -func (m *intelRdtManager) Set(container *configs.Config) error { +func (m *Manager) Set(container *configs.Config) error { // About L3 cache schema: // It has allocation bitmasks/values for L3 cache on each socket, // which contains L3 cache id and capacity bitmask (CBM). diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go index 5f49de964ff5..948b6c0b48bc 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/mount_linux.go @@ -1,6 +1,7 @@ package libcontainer import ( + "io/fs" "strconv" "golang.org/x/sys/unix" @@ -81,3 +82,20 @@ func unmount(target string, flags int) error { } return nil } + +// syscallMode returns the syscall-specific mode bits from Go's portable mode bits. +// Copy from https://cs.opensource.google/go/go/+/refs/tags/go1.20.7:src/os/file_posix.go;l=61-75 +func syscallMode(i fs.FileMode) (o uint32) { + o |= uint32(i.Perm()) + if i&fs.ModeSetuid != 0 { + o |= unix.S_ISUID + } + if i&fs.ModeSetgid != 0 { + o |= unix.S_ISGID + } + if i&fs.ModeSticky != 0 { + o |= unix.S_ISVTX + } + // No mapping for Go's ModeTemporary (plan9 only). + return +} diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go index 446649af8432..0d9ceb9c98c4 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/process_linux.go @@ -299,7 +299,7 @@ type initProcess struct { logFilePair filePair config *initConfig manager cgroups.Manager - intelRdtManager intelrdt.Manager + intelRdtManager *intelrdt.Manager container *linuxContainer fds []string process *Process diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go index c3f88fc7038b..c701d6a2fcd8 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/rootfs_linux.go @@ -459,11 +459,16 @@ func mountToRootfs(m *configs.Mount, c *mountConfig) error { } return label.SetFileLabel(dest, mountLabel) case "tmpfs": - stat, err := os.Stat(dest) - if err != nil { + if stat, err := os.Stat(dest); err != nil { if err := os.MkdirAll(dest, 0o755); err != nil { return err } + } else { + dt := fmt.Sprintf("mode=%04o", syscallMode(stat.Mode())) + if m.Data != "" { + dt = dt + "," + m.Data + } + m.Data = dt } if m.Extensions&configs.EXT_COPYUP == configs.EXT_COPYUP { @@ -472,16 +477,7 @@ func mountToRootfs(m *configs.Mount, c *mountConfig) error { err = mountPropagate(m, rootfs, mountLabel, nil) } - if err != nil { - return err - } - - if stat != nil { - if err = os.Chmod(dest, stat.Mode()); err != nil { - return err - } - } - return nil + return err case "bind": if err := prepareBindMount(m, rootfs, mountFd); err != nil { return err diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go index 98e08e8f0b68..2b15576ac902 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go @@ -66,6 +66,7 @@ var archs = map[string]string{ "SCMP_ARCH_PPC": "ppc", "SCMP_ARCH_PPC64": "ppc64", "SCMP_ARCH_PPC64LE": "ppc64le", + "SCMP_ARCH_RISCV64": "riscv64", "SCMP_ARCH_S390": "s390", "SCMP_ARCH_S390X": "s390x", } diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go index 7d4ec6a42e55..6376512b086f 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/seccomp/patchbpf/enosys_linux.go @@ -48,6 +48,13 @@ const uintptr_t C_FILTER_FLAG_LOG = SECCOMP_FILTER_FLAG_LOG; #endif const uintptr_t C_FILTER_FLAG_NEW_LISTENER = SECCOMP_FILTER_FLAG_NEW_LISTENER; +#ifndef AUDIT_ARCH_RISCV64 +#ifndef EM_RISCV +#define EM_RISCV 243 +#endif +#define AUDIT_ARCH_RISCV64 (EM_RISCV|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#endif + // We use the AUDIT_ARCH_* values because those are the ones used by the kernel // and SCMP_ARCH_* sometimes has fake values (such as SCMP_ARCH_X32). But we // use so we get libseccomp's fallback definitions of AUDIT_ARCH_*. @@ -67,6 +74,7 @@ const uint32_t C_AUDIT_ARCH_PPC64 = AUDIT_ARCH_PPC64; const uint32_t C_AUDIT_ARCH_PPC64LE = AUDIT_ARCH_PPC64LE; const uint32_t C_AUDIT_ARCH_S390 = AUDIT_ARCH_S390; const uint32_t C_AUDIT_ARCH_S390X = AUDIT_ARCH_S390X; +const uint32_t C_AUDIT_ARCH_RISCV64 = AUDIT_ARCH_RISCV64; */ import "C" @@ -202,6 +210,8 @@ func archToNative(arch libseccomp.ScmpArch) (nativeArch, error) { return nativeArch(C.C_AUDIT_ARCH_S390), nil case libseccomp.ArchS390X: return nativeArch(C.C_AUDIT_ARCH_S390X), nil + case libseccomp.ArchRISCV64: + return nativeArch(C.C_AUDIT_ARCH_RISCV64), nil default: return invalidArch, fmt.Errorf("unknown architecture: %v", arch) } diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/user/user.go b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/user/user.go index a1e216683d90..984466d1ab59 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/user/user.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/runc/libcontainer/user/user.go @@ -201,7 +201,7 @@ func ParseGroupFilter(r io.Reader, filter func(Group) bool) ([]Group, error) { if err != nil { // We should return no error if EOF is reached // without a match. - if err == io.EOF { //nolint:errorlint // comparison with io.EOF is legit, https://github.com/polyfloyd/go-errorlint/pull/12 + if err == io.EOF { err = nil } return out, err diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/doc.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/doc.go index 0ac7d819e6d3..57a15c9a11ec 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/doc.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/doc.go @@ -9,6 +9,5 @@ Usage: if selinux.EnforceMode() != selinux.Enforcing { selinux.SetEnforceMode(selinux.Enforcing) } - */ package selinux diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go index fea096c180f6..07e0f77dc278 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go @@ -78,6 +78,9 @@ func ReleaseLabel(label string) error { // Deprecated: use selinux.DupSecOpt var DupSecOpt = selinux.DupSecOpt +// FormatMountLabel returns a string to be used by the mount command. Using +// the SELinux `context` mount option. Changing labels of files on mount +// points with this option can never be changed. // FormatMountLabel returns a string to be used by the mount command. // The format of this string will be used to alter the labeling of the mountpoint. // The string returned is suitable to be used as the options field of the mount command. @@ -85,12 +88,27 @@ var DupSecOpt = selinux.DupSecOpt // the first parameter. Second parameter is the label that you wish to apply // to all content in the mount point. func FormatMountLabel(src, mountLabel string) string { + return FormatMountLabelByType(src, mountLabel, "context") +} + +// FormatMountLabelByType returns a string to be used by the mount command. +// Allow caller to specify the mount options. For example using the SELinux +// `fscontext` mount option would allow certain container processes to change +// labels of files created on the mount points, where as `context` option does +// not. +// FormatMountLabelByType returns a string to be used by the mount command. +// The format of this string will be used to alter the labeling of the mountpoint. +// The string returned is suitable to be used as the options field of the mount command. +// If you need to have additional mount point options, you can pass them in as +// the first parameter. Second parameter is the label that you wish to apply +// to all content in the mount point. +func FormatMountLabelByType(src, mountLabel, contextType string) string { if mountLabel != "" { switch src { case "": - src = fmt.Sprintf("context=%q", mountLabel) + src = fmt.Sprintf("%s=%q", contextType, mountLabel) default: - src = fmt.Sprintf("%s,context=%q", src, mountLabel) + src = fmt.Sprintf("%s,%s=%q", src, contextType, mountLabel) } } return src diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go index 12de0ae5d65e..f61a560158b2 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go @@ -3,8 +3,6 @@ package label import ( "errors" "fmt" - "os" - "os/user" "strings" "github.com/opencontainers/selinux/go-selinux" @@ -113,50 +111,6 @@ func Relabel(path string, fileLabel string, shared bool) error { return nil } - exclude_paths := map[string]bool{ - "/": true, - "/bin": true, - "/boot": true, - "/dev": true, - "/etc": true, - "/etc/passwd": true, - "/etc/pki": true, - "/etc/shadow": true, - "/home": true, - "/lib": true, - "/lib64": true, - "/media": true, - "/opt": true, - "/proc": true, - "/root": true, - "/run": true, - "/sbin": true, - "/srv": true, - "/sys": true, - "/tmp": true, - "/usr": true, - "/var": true, - "/var/lib": true, - "/var/log": true, - } - - if home := os.Getenv("HOME"); home != "" { - exclude_paths[home] = true - } - - if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" { - if usr, err := user.Lookup(sudoUser); err == nil { - exclude_paths[usr.HomeDir] = true - } - } - - if path != "/" { - path = strings.TrimSuffix(path, "/") - } - if exclude_paths[path] { - return fmt.Errorf("SELinux relabeling of %s is not allowed", path) - } - if shared { c, err := selinux.NewContext(fileLabel) if err != nil { diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go index 02d206239c7e..f21c80c5ab03 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package label diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go deleted file mode 100644 index 897ecbac41ce..000000000000 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go +++ /dev/null @@ -1,22 +0,0 @@ -// +build linux,go1.16 - -package selinux - -import ( - "errors" - "io/fs" - "os" - - "github.com/opencontainers/selinux/pkg/pwalkdir" -) - -func rchcon(fpath, label string) error { - return pwalkdir.Walk(fpath, func(p string, _ fs.DirEntry, _ error) error { - e := setFileLabel(p, label) - // Walk a file tree can race with removal, so ignore ENOENT. - if errors.Is(e, os.ErrNotExist) { - return nil - } - return e - }) -} diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go deleted file mode 100644 index 2c8b033ce058..000000000000 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go +++ /dev/null @@ -1,21 +0,0 @@ -// +build linux,!go1.16 - -package selinux - -import ( - "errors" - "os" - - "github.com/opencontainers/selinux/pkg/pwalk" -) - -func rchcon(fpath, label string) error { - return pwalk.Walk(fpath, func(p string, _ os.FileInfo, _ error) error { - e := setFileLabel(p, label) - // Walk a file tree can race with removal, so ignore ENOENT. - if errors.Is(e, os.ErrNotExist) { - return nil - } - return e - }) -} diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go index 5a59d151f675..af058b84b132 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux.go @@ -23,8 +23,13 @@ var ( // ErrEmptyPath is returned when an empty path has been specified. ErrEmptyPath = errors.New("empty path") + // ErrInvalidLabel is returned when an invalid label is specified. + ErrInvalidLabel = errors.New("invalid Label") + // InvalidLabel is returned when an invalid label is specified. - InvalidLabel = errors.New("Invalid Label") + // + // Deprecated: use [ErrInvalidLabel]. + InvalidLabel = ErrInvalidLabel // ErrIncomparable is returned two levels are not comparable ErrIncomparable = errors.New("incomparable levels") @@ -144,7 +149,7 @@ func CalculateGlbLub(sourceRange, targetRange string) (string, error) { // of the program is finished to guarantee another goroutine does not migrate to the current // thread before execution is complete. func SetExecLabel(label string) error { - return setExecLabel(label) + return writeCon(attrPath("exec"), label) } // SetTaskLabel sets the SELinux label for the current thread, or an error. @@ -152,21 +157,21 @@ func SetExecLabel(label string) error { // be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() to guarantee // the current thread does not run in a new mislabeled thread. func SetTaskLabel(label string) error { - return setTaskLabel(label) + return writeCon(attrPath("current"), label) } // SetSocketLabel takes a process label and tells the kernel to assign the // label to the next socket that gets created. Calls to SetSocketLabel // should be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() until -// the the socket is created to guarantee another goroutine does not migrate +// the socket is created to guarantee another goroutine does not migrate // to the current thread before execution is complete. func SetSocketLabel(label string) error { - return setSocketLabel(label) + return writeCon(attrPath("sockcreate"), label) } // SocketLabel retrieves the current socket label setting func SocketLabel() (string, error) { - return socketLabel() + return readCon(attrPath("sockcreate")) } // PeerLabel retrieves the label of the client on the other side of a socket @@ -185,7 +190,7 @@ func SetKeyLabel(label string) error { // KeyLabel retrieves the current kernel keyring label setting func KeyLabel() (string, error) { - return keyLabel() + return readCon("/proc/self/attr/keycreate") } // Get returns the Context as a string @@ -208,6 +213,11 @@ func ReserveLabel(label string) { reserveLabel(label) } +// MLSEnabled checks if MLS is enabled. +func MLSEnabled() bool { + return isMLSEnabled() +} + // EnforceMode returns the current SELinux mode Enforcing, Permissive, Disabled func EnforceMode() int { return enforceMode() @@ -220,7 +230,7 @@ func SetEnforceMode(mode int) error { } // DefaultEnforceMode returns the systems default SELinux mode Enforcing, -// Permissive or Disabled. Note this is is just the default at boot time. +// Permissive or Disabled. Note this is just the default at boot time. // EnforceMode tells you the systems current mode. func DefaultEnforceMode() int { return defaultEnforceMode() @@ -266,7 +276,7 @@ func CopyLevel(src, dest string) (string, error) { return copyLevel(src, dest) } -// Chcon changes the fpath file object to the SELinux label label. +// Chcon changes the fpath file object to the SELinux label. // If fpath is a directory and recurse is true, then Chcon walks the // directory tree setting the label. // @@ -284,7 +294,7 @@ func DupSecOpt(src string) ([]string, error) { // DisableSecOpt returns a security opt that can be used to disable SELinux // labeling support for future container processes. func DisableSecOpt() []string { - return disableSecOpt() + return []string{"disable"} } // GetDefaultContextWithLevel gets a single context for the specified SELinux user diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go index ee602ab96ddc..f1e95977d3b0 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go @@ -8,15 +8,16 @@ import ( "errors" "fmt" "io" - "io/ioutil" + "io/fs" "math/big" "os" - "path" + "os/user" "path/filepath" "strconv" "strings" "sync" + "github.com/opencontainers/selinux/pkg/pwalkdir" "golang.org/x/sys/unix" ) @@ -34,17 +35,17 @@ const ( ) type selinuxState struct { + mcsList map[string]bool + selinuxfs string + selinuxfsOnce sync.Once enabledSet bool enabled bool - selinuxfsOnce sync.Once - selinuxfs string - mcsList map[string]bool sync.Mutex } type level struct { - sens uint cats *big.Int + sens uint } type mlsRange struct { @@ -53,10 +54,10 @@ type mlsRange struct { } type defaultSECtx struct { - user, level, scon string - userRdr, defaultRdr io.Reader - - verifier func(string) error + userRdr io.Reader + verifier func(string) error + defaultRdr io.Reader + user, level, scon string } type levelItem byte @@ -154,7 +155,7 @@ func findSELinuxfs() string { } // check if selinuxfs is available before going the slow path - fs, err := ioutil.ReadFile("/proc/filesystems") + fs, err := os.ReadFile("/proc/filesystems") if err != nil { return "" } @@ -291,7 +292,7 @@ func readCon(fpath string) (string, error) { } func readConFd(in *os.File) (string, error) { - data, err := ioutil.ReadAll(in) + data, err := io.ReadAll(in) if err != nil { return "", err } @@ -304,7 +305,7 @@ func classIndex(class string) (int, error) { permpath := fmt.Sprintf("class/%s/index", class) indexpath := filepath.Join(getSelinuxMountPoint(), permpath) - indexB, err := ioutil.ReadFile(indexpath) + indexB, err := os.ReadFile(indexpath) if err != nil { return -1, err } @@ -390,21 +391,19 @@ func lFileLabel(fpath string) (string, error) { return string(label), nil } -// setFSCreateLabel tells kernel the label to create all file system objects -// created by this task. Setting label="" to return to default. func setFSCreateLabel(label string) error { - return writeAttr("fscreate", label) + return writeCon(attrPath("fscreate"), label) } // fsCreateLabel returns the default label the kernel which the kernel is using // for file system objects created by this task. "" indicates default. func fsCreateLabel() (string, error) { - return readAttr("fscreate") + return readCon(attrPath("fscreate")) } // currentLabel returns the SELinux label of the current process thread, or an error. func currentLabel() (string, error) { - return readAttr("current") + return readCon(attrPath("current")) } // pidLabel returns the SELinux label of the given pid, or an error. @@ -415,7 +414,7 @@ func pidLabel(pid int) (string, error) { // ExecLabel returns the SELinux label that the kernel will use for any programs // that are executed by the current process thread, or an error. func execLabel() (string, error) { - return readAttr("exec") + return readCon(attrPath("exec")) } func writeCon(fpath, val string) error { @@ -461,18 +460,10 @@ func attrPath(attr string) string { }) if haveThreadSelf { - return path.Join(threadSelfPrefix, attr) + return filepath.Join(threadSelfPrefix, attr) } - return path.Join("/proc/self/task/", strconv.Itoa(unix.Gettid()), "/attr/", attr) -} - -func readAttr(attr string) (string, error) { - return readCon(attrPath(attr)) -} - -func writeAttr(attr, val string) error { - return writeCon(attrPath(attr), val) + return filepath.Join("/proc/self/task", strconv.Itoa(unix.Gettid()), "attr", attr) } // canonicalizeContext takes a context string and writes it to the kernel @@ -559,30 +550,30 @@ func (l *level) parseLevel(levelStr string) error { // rangeStrToMLSRange marshals a string representation of a range. func rangeStrToMLSRange(rangeStr string) (*mlsRange, error) { - mlsRange := &mlsRange{} - levelSlice := strings.SplitN(rangeStr, "-", 2) + r := &mlsRange{} + l := strings.SplitN(rangeStr, "-", 2) - switch len(levelSlice) { + switch len(l) { // rangeStr that has a low and a high level, e.g. s4:c0.c1023-s6:c0.c1023 case 2: - mlsRange.high = &level{} - if err := mlsRange.high.parseLevel(levelSlice[1]); err != nil { - return nil, fmt.Errorf("failed to parse high level %q: %w", levelSlice[1], err) + r.high = &level{} + if err := r.high.parseLevel(l[1]); err != nil { + return nil, fmt.Errorf("failed to parse high level %q: %w", l[1], err) } fallthrough // rangeStr that is single level, e.g. s6:c0,c3,c5,c30.c1023 case 1: - mlsRange.low = &level{} - if err := mlsRange.low.parseLevel(levelSlice[0]); err != nil { - return nil, fmt.Errorf("failed to parse low level %q: %w", levelSlice[0], err) + r.low = &level{} + if err := r.low.parseLevel(l[0]); err != nil { + return nil, fmt.Errorf("failed to parse low level %q: %w", l[0], err) } } - if mlsRange.high == nil { - mlsRange.high = mlsRange.low + if r.high == nil { + r.high = r.low } - return mlsRange, nil + return r, nil } // bitsetToStr takes a category bitset and returns it in the @@ -616,17 +607,17 @@ func bitsetToStr(c *big.Int) string { return str } -func (l1 *level) equal(l2 *level) bool { - if l2 == nil || l1 == nil { - return l1 == l2 +func (l *level) equal(l2 *level) bool { + if l2 == nil || l == nil { + return l == l2 } - if l1.sens != l2.sens { + if l2.sens != l.sens { return false } - if l2.cats == nil || l1.cats == nil { - return l2.cats == l1.cats + if l2.cats == nil || l.cats == nil { + return l2.cats == l.cats } - return l1.cats.Cmp(l2.cats) == 0 + return l.cats.Cmp(l2.cats) == 0 } // String returns an mlsRange as a string. @@ -720,36 +711,13 @@ func readWriteCon(fpath string, val string) (string, error) { return readConFd(f) } -// setExecLabel sets the SELinux label that the kernel will use for any programs -// that are executed by the current process thread, or an error. -func setExecLabel(label string) error { - return writeAttr("exec", label) -} - -// setTaskLabel sets the SELinux label for the current thread, or an error. -// This requires the dyntransition permission. -func setTaskLabel(label string) error { - return writeAttr("current", label) -} - -// setSocketLabel takes a process label and tells the kernel to assign the -// label to the next socket that gets created -func setSocketLabel(label string) error { - return writeAttr("sockcreate", label) -} - -// socketLabel retrieves the current socket label setting -func socketLabel() (string, error) { - return readAttr("sockcreate") -} - // peerLabel retrieves the label of the client on the other side of a socket func peerLabel(fd uintptr) (string, error) { - label, err := unix.GetsockoptString(int(fd), unix.SOL_SOCKET, unix.SO_PEERSEC) + l, err := unix.GetsockoptString(int(fd), unix.SOL_SOCKET, unix.SO_PEERSEC) if err != nil { return "", &os.PathError{Op: "getsockopt", Path: "fd " + strconv.Itoa(int(fd)), Err: err} } - return label, nil + return l, nil } // setKeyLabel takes a process label and tells the kernel to assign the @@ -765,15 +733,10 @@ func setKeyLabel(label string) error { return err } -// keyLabel retrieves the current kernel keyring label setting -func keyLabel() (string, error) { - return readCon("/proc/self/attr/keycreate") -} - // get returns the Context as a string func (c Context) get() string { - if level := c["level"]; level != "" { - return c["user"] + ":" + c["role"] + ":" + c["type"] + ":" + level + if l := c["level"]; l != "" { + return c["user"] + ":" + c["role"] + ":" + c["type"] + ":" + l } return c["user"] + ":" + c["role"] + ":" + c["type"] } @@ -785,7 +748,7 @@ func newContext(label string) (Context, error) { if len(label) != 0 { con := strings.SplitN(label, ":", 4) if len(con) < 3 { - return c, InvalidLabel + return c, ErrInvalidLabel } c["user"] = con[0] c["role"] = con[1] @@ -815,14 +778,23 @@ func reserveLabel(label string) { } func selinuxEnforcePath() string { - return path.Join(getSelinuxMountPoint(), "enforce") + return filepath.Join(getSelinuxMountPoint(), "enforce") +} + +// isMLSEnabled checks if MLS is enabled. +func isMLSEnabled() bool { + enabledB, err := os.ReadFile(filepath.Join(getSelinuxMountPoint(), "mls")) + if err != nil { + return false + } + return bytes.Equal(enabledB, []byte{'1'}) } // enforceMode returns the current SELinux mode Enforcing, Permissive, Disabled func enforceMode() int { var enforce int - enforceB, err := ioutil.ReadFile(selinuxEnforcePath()) + enforceB, err := os.ReadFile(selinuxEnforcePath()) if err != nil { return -1 } @@ -836,11 +808,12 @@ func enforceMode() int { // setEnforceMode sets the current SELinux mode Enforcing, Permissive. // Disabled is not valid, since this needs to be set at boot time. func setEnforceMode(mode int) error { - return ioutil.WriteFile(selinuxEnforcePath(), []byte(strconv.Itoa(mode)), 0o644) + //nolint:gosec // ignore G306: permissions to be 0600 or less. + return os.WriteFile(selinuxEnforcePath(), []byte(strconv.Itoa(mode)), 0o644) } // defaultEnforceMode returns the systems default SELinux mode Enforcing, -// Permissive or Disabled. Note this is is just the default at boot time. +// Permissive or Disabled. Note this is just the default at boot time. // EnforceMode tells you the systems current mode. func defaultEnforceMode() int { switch readConfig(selinuxTag) { @@ -940,7 +913,7 @@ func openContextFile() (*os.File, error) { if f, err := os.Open(contextFile); err == nil { return f, nil } - return os.Open(filepath.Join(policyRoot(), "/contexts/lxc_contexts")) + return os.Open(filepath.Join(policyRoot(), "contexts", "lxc_contexts")) } func loadLabels() { @@ -1043,7 +1016,8 @@ func addMcs(processLabel, fileLabel string) (string, string) { // securityCheckContext validates that the SELinux label is understood by the kernel func securityCheckContext(val string) error { - return ioutil.WriteFile(path.Join(getSelinuxMountPoint(), "context"), []byte(val), 0o644) + //nolint:gosec // ignore G306: permissions to be 0600 or less. + return os.WriteFile(filepath.Join(getSelinuxMountPoint(), "context"), []byte(val), 0o644) } // copyLevel returns a label with the MLS/MCS level from src label replaced on @@ -1072,22 +1046,7 @@ func copyLevel(src, dest string) (string, error) { return tcon.Get(), nil } -// Prevent users from relabeling system files -func badPrefix(fpath string) error { - if fpath == "" { - return ErrEmptyPath - } - - badPrefixes := []string{"/usr"} - for _, prefix := range badPrefixes { - if strings.HasPrefix(fpath, prefix) { - return fmt.Errorf("relabeling content in %s is not allowed", prefix) - } - } - return nil -} - -// chcon changes the fpath file object to the SELinux label label. +// chcon changes the fpath file object to the SELinux label. // If fpath is a directory and recurse is true, then chcon walks the // directory tree setting the label. func chcon(fpath string, label string, recurse bool) error { @@ -1097,17 +1056,97 @@ func chcon(fpath string, label string, recurse bool) error { if label == "" { return nil } - if err := badPrefix(fpath); err != nil { - return err + + excludePaths := map[string]bool{ + "/": true, + "/bin": true, + "/boot": true, + "/dev": true, + "/etc": true, + "/etc/passwd": true, + "/etc/pki": true, + "/etc/shadow": true, + "/home": true, + "/lib": true, + "/lib64": true, + "/media": true, + "/opt": true, + "/proc": true, + "/root": true, + "/run": true, + "/sbin": true, + "/srv": true, + "/sys": true, + "/tmp": true, + "/usr": true, + "/var": true, + "/var/lib": true, + "/var/log": true, + } + + if home := os.Getenv("HOME"); home != "" { + excludePaths[home] = true + } + + if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" { + if usr, err := user.Lookup(sudoUser); err == nil { + excludePaths[usr.HomeDir] = true + } + } + + if fpath != "/" { + fpath = strings.TrimSuffix(fpath, "/") + } + if excludePaths[fpath] { + return fmt.Errorf("SELinux relabeling of %s is not allowed", fpath) } if !recurse { - return setFileLabel(fpath, label) + err := lSetFileLabel(fpath, label) + if err != nil { + // Check if file doesn't exist, must have been removed + if errors.Is(err, os.ErrNotExist) { + return nil + } + // Check if current label is correct on disk + flabel, nerr := lFileLabel(fpath) + if nerr == nil && flabel == label { + return nil + } + // Check if file doesn't exist, must have been removed + if errors.Is(nerr, os.ErrNotExist) { + return nil + } + return err + } + return nil } return rchcon(fpath, label) } +func rchcon(fpath, label string) error { //revive:disable:cognitive-complexity + fastMode := false + // If the current label matches the new label, assume + // other labels are correct. + if cLabel, err := lFileLabel(fpath); err == nil && cLabel == label { + fastMode = true + } + return pwalkdir.Walk(fpath, func(p string, _ fs.DirEntry, _ error) error { + if fastMode { + if cLabel, err := lFileLabel(fpath); err == nil && cLabel == label { + return nil + } + } + err := lSetFileLabel(p, label) + // Walk a file tree can race with removal, so ignore ENOENT. + if errors.Is(err, os.ErrNotExist) { + return nil + } + return err + }) +} + // dupSecOpt takes an SELinux process label and returns security options that // can be used to set the SELinux Type and Level for future container processes. func dupSecOpt(src string) ([]string, error) { @@ -1136,12 +1175,6 @@ func dupSecOpt(src string) ([]string, error) { return dup, nil } -// disableSecOpt returns a security opt that can be used to disable SELinux -// labeling support for future container processes. -func disableSecOpt() []string { - return []string{"disable"} -} - // findUserInContext scans the reader for a valid SELinux context // match that is verified with the verifier. Invalid contexts are // skipped. It returns a matched context or an empty string if no diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go index 78743b020c92..bc3fd3b3701f 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go @@ -1,10 +1,22 @@ +//go:build !linux // +build !linux package selinux -func setDisabled() { +func attrPath(string) string { + return "" +} + +func readCon(fpath string) (string, error) { + return "", nil +} + +func writeCon(string, string) error { + return nil } +func setDisabled() {} + func getEnabled() bool { return false } @@ -61,22 +73,6 @@ func calculateGlbLub(sourceRange, targetRange string) (string, error) { return "", nil } -func setExecLabel(label string) error { - return nil -} - -func setTaskLabel(label string) error { - return nil -} - -func setSocketLabel(label string) error { - return nil -} - -func socketLabel() (string, error) { - return "", nil -} - func peerLabel(fd uintptr) (string, error) { return "", nil } @@ -85,17 +81,12 @@ func setKeyLabel(label string) error { return nil } -func keyLabel() (string, error) { - return "", nil -} - func (c Context) get() string { return "" } func newContext(label string) (Context, error) { - c := make(Context) - return c, nil + return Context{}, nil } func clearLabels() { @@ -104,6 +95,10 @@ func clearLabels() { func reserveLabel(label string) { } +func isMLSEnabled() bool { + return false +} + func enforceMode() int { return Disabled } @@ -151,10 +146,6 @@ func dupSecOpt(src string) ([]string, error) { return nil, nil } -func disableSecOpt() []string { - return []string{"disable"} -} - func getDefaultContextWithLevel(user, level, scon string) (string, error) { return "", nil } diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md deleted file mode 100644 index 7e78dce0156b..000000000000 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/README.md +++ /dev/null @@ -1,48 +0,0 @@ -## pwalk: parallel implementation of filepath.Walk - -This is a wrapper for [filepath.Walk](https://pkg.go.dev/path/filepath?tab=doc#Walk) -which may speed it up by calling multiple callback functions (WalkFunc) in parallel, -utilizing goroutines. - -By default, it utilizes 2\*runtime.NumCPU() goroutines for callbacks. -This can be changed by using WalkN function which has the additional -parameter, specifying the number of goroutines (concurrency). - -### pwalk vs pwalkdir - -This package is deprecated in favor of -[pwalkdir](https://pkg.go.dev/github.com/opencontainers/selinux/pkg/pwalkdir), -which is faster, but requires at least Go 1.16. - -### Caveats - -Please note the following limitations of this code: - -* Unlike filepath.Walk, the order of calls is non-deterministic; - -* Only primitive error handling is supported: - - * filepath.SkipDir is not supported; - - * no errors are ever passed to WalkFunc; - - * once any error is returned from any WalkFunc instance, no more new calls - to WalkFunc are made, and the error is returned to the caller of Walk; - - * if more than one walkFunc instance will return an error, only one - of such errors will be propagated and returned by Walk, others - will be silently discarded. - -### Documentation - -For the official documentation, see -https://pkg.go.dev/github.com/opencontainers/selinux/pkg/pwalk?tab=doc - -### Benchmarks - -For a WalkFunc that consists solely of the return statement, this -implementation is about 10% slower than the standard library's -filepath.Walk. - -Otherwise (if a WalkFunc is doing something) this is usually faster, -except when the WalkN(..., 1) is used. diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go deleted file mode 100644 index 202c80da59c3..000000000000 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalk/pwalk.go +++ /dev/null @@ -1,115 +0,0 @@ -package pwalk - -import ( - "fmt" - "os" - "path/filepath" - "runtime" - "sync" -) - -type WalkFunc = filepath.WalkFunc - -// Walk is a wrapper for filepath.Walk which can call multiple walkFn -// in parallel, allowing to handle each item concurrently. A maximum of -// twice the runtime.NumCPU() walkFn will be called at any one time. -// If you want to change the maximum, use WalkN instead. -// -// The order of calls is non-deterministic. -// -// Note that this implementation only supports primitive error handling: -// -// - no errors are ever passed to walkFn; -// -// - once a walkFn returns any error, all further processing stops -// and the error is returned to the caller of Walk; -// -// - filepath.SkipDir is not supported; -// -// - if more than one walkFn instance will return an error, only one -// of such errors will be propagated and returned by Walk, others -// will be silently discarded. -func Walk(root string, walkFn WalkFunc) error { - return WalkN(root, walkFn, runtime.NumCPU()*2) -} - -// WalkN is a wrapper for filepath.Walk which can call multiple walkFn -// in parallel, allowing to handle each item concurrently. A maximum of -// num walkFn will be called at any one time. -// -// Please see Walk documentation for caveats of using this function. -func WalkN(root string, walkFn WalkFunc, num int) error { - // make sure limit is sensible - if num < 1 { - return fmt.Errorf("walk(%q): num must be > 0", root) - } - - files := make(chan *walkArgs, 2*num) - errCh := make(chan error, 1) // get the first error, ignore others - - // Start walking a tree asap - var ( - err error - wg sync.WaitGroup - - rootLen = len(root) - rootEntry *walkArgs - ) - wg.Add(1) - go func() { - err = filepath.Walk(root, func(p string, info os.FileInfo, err error) error { - if err != nil { - close(files) - return err - } - if len(p) == rootLen { - // Root entry is processed separately below. - rootEntry = &walkArgs{path: p, info: &info} - return nil - } - // add a file to the queue unless a callback sent an error - select { - case e := <-errCh: - close(files) - return e - default: - files <- &walkArgs{path: p, info: &info} - return nil - } - }) - if err == nil { - close(files) - } - wg.Done() - }() - - wg.Add(num) - for i := 0; i < num; i++ { - go func() { - for file := range files { - if e := walkFn(file.path, *file.info, nil); e != nil { - select { - case errCh <- e: // sent ok - default: // buffer full - } - } - } - wg.Done() - }() - } - - wg.Wait() - - if err == nil { - err = walkFn(rootEntry.path, *rootEntry.info, nil) - } - - return err -} - -// walkArgs holds the arguments that were passed to the Walk or WalkN -// functions. -type walkArgs struct { - path string - info *os.FileInfo -} diff --git a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go index a5796b2c4f1c..0f5d9f580d1d 100644 --- a/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go +++ b/cluster-autoscaler/vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go @@ -111,6 +111,6 @@ func WalkN(root string, walkFn fs.WalkDirFunc, num int) error { // walkArgs holds the arguments that were passed to the Walk or WalkN // functions. type walkArgs struct { - path string entry fs.DirEntry + path string } diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/find/finder.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/find/finder.go index 61ac780c45c0..4830fc26ebcd 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/find/finder.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/find/finder.go @@ -1,5 +1,5 @@ /* -Copyright (c) 2014-2020 VMware, Inc. All Rights Reserved. +Copyright (c) 2014-2023 VMware, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -784,6 +784,11 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network } if len(ns) == 0 { + net, nerr := f.networkByID(ctx, path) + if nerr == nil { + return []object.NetworkReference{net}, nil + } + return nil, &NotFoundError{"network", path} } @@ -798,18 +803,13 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network // Examples: // - Name: "dvpg-1" // - Inventory Path: "vds-1/dvpg-1" +// - Cluster Path: "/dc-1/host/cluster-1/dvpg-1" // - ManagedObject ID: "DistributedVirtualPortgroup:dvportgroup-53" // - Logical Switch UUID: "da2a59b8-2450-4cb2-b5cc-79c4c1d2144c" // - Segment ID: "/infra/segments/vnet_ce50e69b-1784-4a14-9206-ffd7f1f146f7" func (f *Finder) Network(ctx context.Context, path string) (object.NetworkReference, error) { networks, err := f.NetworkList(ctx, path) if err != nil { - if _, ok := err.(*NotFoundError); ok { - net, nerr := f.networkByID(ctx, path) - if nerr == nil { - return net, nil - } - } return nil, err } diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/internal/version/version.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/internal/version/version.go index b141a9597edf..dc29e12bf358 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/internal/version/version.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/internal/version/version.go @@ -21,5 +21,5 @@ const ( ClientName = "govmomi" // ClientVersion is the version of this SDK - ClientVersion = "0.30.0" + ClientVersion = "0.30.6" ) diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/list/lister.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/list/lister.go index 9a4caed68625..92a40e8ba875 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/list/lister.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/list/lister.go @@ -1,5 +1,5 @@ /* -Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved. +Copyright (c) 2014-2023 VMware, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -312,6 +312,7 @@ func (l Lister) ListComputeResource(ctx context.Context) ([]Element, error) { fields := []string{ "host", + "network", "resourcePool", } @@ -327,6 +328,7 @@ func (l Lister) ListComputeResource(ctx context.Context) ([]Element, error) { childTypes := []string{ "HostSystem", + "Network", "ResourcePool", } diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/lookup/client.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/lookup/client.go index b3c19846a10e..4cc73e0d338e 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/lookup/client.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/lookup/client.go @@ -125,7 +125,9 @@ func EndpointURL(ctx context.Context, c *vim25.Client, path string, filter *type path = endpoint.Url if u, err := url.Parse(path); err == nil { - if c.Thumbprint(u.Host) == "" { + // Set thumbprint only for endpoints on hosts outside this vCenter. + // Platform Services may live on multiple hosts. + if c.URL().Host != u.Host && c.Thumbprint(u.Host) == "" { c.SetThumbprint(u.Host, endpointThumbprint(endpoint)) } } diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/host_certificate_info.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/host_certificate_info.go index 52c26a9dd687..bb5ee9c91612 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/host_certificate_info.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/host_certificate_info.go @@ -86,10 +86,7 @@ func (info *HostCertificateInfo) FromURL(u *url.URL, config *tls.Config) error { conn, err := tls.Dial("tcp", addr, config) if err != nil { - switch err.(type) { - case x509.UnknownAuthorityError: - case x509.HostnameError: - default: + if !soap.IsCertificateUntrusted(err) { return err } diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/search_index.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/search_index.go index bcf5e29f2718..288f78097cf4 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/search_index.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/object/search_index.go @@ -93,7 +93,18 @@ func (s SearchIndex) FindByInventoryPath(ctx context.Context, path string) (Refe if res.Returnval == nil { return nil, nil } - return NewReference(s.c, *res.Returnval), nil + + r := NewReference(s.c, *res.Returnval) + + type common interface { + SetInventoryPath(string) + } + + if c, ok := r.(common); ok { + c.SetInventoryPath(path) + } + + return r, nil } // FindByIp finds a virtual machine or host by IP address. diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/client.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/client.go index e46a17f95484..624d04cb11fd 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/client.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/client.go @@ -369,24 +369,10 @@ func (c *Client) dialTLSContext( return conn, nil } - switch err.(type) { - case x509.UnknownAuthorityError: - case x509.HostnameError: - default: - // Allow a thumbprint verification attempt if the error indicates - // the failure was due to lack of trust. - // - // Please note the err variable is not a special type of x509 or HTTP - // error that can be validated by a type assertion. The err variable is - // in fact an *errors.errorString. - switch { - case strings.HasSuffix(err.Error(), "certificate is not trusted"): - // darwin and linux - case strings.HasSuffix(err.Error(), "certificate signed by unknown authority"): - // windows - default: - return nil, err - } + // Allow a thumbprint verification attempt if the error indicates + // the failure was due to lack of trust. + if !IsCertificateUntrusted(err) { + return nil, err } thumbprint := c.Thumbprint(addr) @@ -411,10 +397,6 @@ func (c *Client) dialTLSContext( return conn, nil } -func (c *Client) dialTLS(network, addr string) (net.Conn, error) { - return c.dialTLSContext(context.Background(), network, addr) -} - // splitHostPort is similar to net.SplitHostPort, // but rather than return error if there isn't a ':port', // return an empty string for the port. diff --git a/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/error.go b/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/error.go index 1e1508733a52..fd30e3ff8cb2 100644 --- a/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/error.go +++ b/cluster-autoscaler/vendor/github.com/vmware/govmomi/vim25/soap/error.go @@ -17,9 +17,12 @@ limitations under the License. package soap import ( + "crypto/x509" "encoding/json" + "errors" "fmt" "reflect" + "strings" "github.com/vmware/govmomi/vim25/types" ) @@ -127,3 +130,37 @@ func IsVimFault(err error) bool { func ToVimFault(err error) types.BaseMethodFault { return err.(vimFaultError).fault } + +func IsCertificateUntrusted(err error) bool { + // golang 1.20 introduce a new type to wrap 509 errors. So instead of + // casting the type, now we check the error chain contains the + // x509 error or not. + x509UnknownAuthorityErr := &x509.UnknownAuthorityError{} + ok := errors.As(err, x509UnknownAuthorityErr) + if ok { + return true + } + + x509HostNameErr := &x509.HostnameError{} + ok = errors.As(err, x509HostNameErr) + if ok { + return true + } + + // The err variable may not be a special type of x509 or HTTP + // error that can be validated by a type assertion. The err variable is + // in fact be an *errors.errorString. + + msgs := []string{ + "certificate is not trusted", + "certificate signed by unknown authority", + } + + for _, msg := range msgs { + if strings.HasSuffix(err.Error(), msg) { + return true + } + } + + return false +} diff --git a/cluster-autoscaler/vendor/golang.org/x/net/http2/Dockerfile b/cluster-autoscaler/vendor/golang.org/x/net/http2/Dockerfile deleted file mode 100644 index 8512245952be..000000000000 --- a/cluster-autoscaler/vendor/golang.org/x/net/http2/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -# -# This Dockerfile builds a recent curl with HTTP/2 client support, using -# a recent nghttp2 build. -# -# See the Makefile for how to tag it. If Docker and that image is found, the -# Go tests use this curl binary for integration tests. -# - -FROM ubuntu:trusty - -RUN apt-get update && \ - apt-get upgrade -y && \ - apt-get install -y git-core build-essential wget - -RUN apt-get install -y --no-install-recommends \ - autotools-dev libtool pkg-config zlib1g-dev \ - libcunit1-dev libssl-dev libxml2-dev libevent-dev \ - automake autoconf - -# The list of packages nghttp2 recommends for h2load: -RUN apt-get install -y --no-install-recommends make binutils \ - autoconf automake autotools-dev \ - libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev \ - libev-dev libevent-dev libjansson-dev libjemalloc-dev \ - cython python3.4-dev python-setuptools - -# Note: setting NGHTTP2_VER before the git clone, so an old git clone isn't cached: -ENV NGHTTP2_VER 895da9a -RUN cd /root && git clone https://github.com/tatsuhiro-t/nghttp2.git - -WORKDIR /root/nghttp2 -RUN git reset --hard $NGHTTP2_VER -RUN autoreconf -i -RUN automake -RUN autoconf -RUN ./configure -RUN make -RUN make install - -WORKDIR /root -RUN wget https://curl.se/download/curl-7.45.0.tar.gz -RUN tar -zxvf curl-7.45.0.tar.gz -WORKDIR /root/curl-7.45.0 -RUN ./configure --with-ssl --with-nghttp2=/usr/local -RUN make -RUN make install -RUN ldconfig - -CMD ["-h"] -ENTRYPOINT ["/usr/local/bin/curl"] - diff --git a/cluster-autoscaler/vendor/golang.org/x/net/http2/Makefile b/cluster-autoscaler/vendor/golang.org/x/net/http2/Makefile deleted file mode 100644 index 55fd826f77bd..000000000000 --- a/cluster-autoscaler/vendor/golang.org/x/net/http2/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -curlimage: - docker build -t gohttp2/curl . - diff --git a/cluster-autoscaler/vendor/golang.org/x/net/http2/server.go b/cluster-autoscaler/vendor/golang.org/x/net/http2/server.go index 033b6e6db64f..6d5e008874b1 100644 --- a/cluster-autoscaler/vendor/golang.org/x/net/http2/server.go +++ b/cluster-autoscaler/vendor/golang.org/x/net/http2/server.go @@ -1012,14 +1012,6 @@ func (sc *serverConn) serve() { } } -func (sc *serverConn) awaitGracefulShutdown(sharedCh <-chan struct{}, privateCh chan struct{}) { - select { - case <-sc.doneServing: - case <-sharedCh: - close(privateCh) - } -} - type serverMessage int // Message values sent to serveMsgCh. diff --git a/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go b/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go index b20c74917111..4515b22c4a16 100644 --- a/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go +++ b/cluster-autoscaler/vendor/golang.org/x/net/http2/transport.go @@ -19,6 +19,7 @@ import ( "io/fs" "log" "math" + "math/bits" mathrand "math/rand" "net" "net/http" @@ -290,8 +291,7 @@ func (t *Transport) initConnPool() { // HTTP/2 server. type ClientConn struct { t *Transport - tconn net.Conn // usually *tls.Conn, except specialized impls - tconnClosed bool + tconn net.Conn // usually *tls.Conn, except specialized impls tlsState *tls.ConnectionState // nil only for specialized impls reused uint32 // whether conn is being reused; atomic singleUse bool // whether being used for a single http.Request @@ -1680,7 +1680,27 @@ func (cs *clientStream) frameScratchBufferLen(maxFrameSize int) int { return int(n) // doesn't truncate; max is 512K } -var bufPool sync.Pool // of *[]byte +// Seven bufPools manage different frame sizes. This helps to avoid scenarios where long-running +// streaming requests using small frame sizes occupy large buffers initially allocated for prior +// requests needing big buffers. The size ranges are as follows: +// {0 KB, 16 KB], {16 KB, 32 KB], {32 KB, 64 KB], {64 KB, 128 KB], {128 KB, 256 KB], +// {256 KB, 512 KB], {512 KB, infinity} +// In practice, the maximum scratch buffer size should not exceed 512 KB due to +// frameScratchBufferLen(maxFrameSize), thus the "infinity pool" should never be used. +// It exists mainly as a safety measure, for potential future increases in max buffer size. +var bufPools [7]sync.Pool // of *[]byte +func bufPoolIndex(size int) int { + if size <= 16384 { + return 0 + } + size -= 1 + bits := bits.Len(uint(size)) + index := bits - 14 + if index >= len(bufPools) { + return len(bufPools) - 1 + } + return index +} func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { cc := cs.cc @@ -1698,12 +1718,13 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { // Scratch buffer for reading into & writing from. scratchLen := cs.frameScratchBufferLen(maxFrameSize) var buf []byte - if bp, ok := bufPool.Get().(*[]byte); ok && len(*bp) >= scratchLen { - defer bufPool.Put(bp) + index := bufPoolIndex(scratchLen) + if bp, ok := bufPools[index].Get().(*[]byte); ok && len(*bp) >= scratchLen { + defer bufPools[index].Put(bp) buf = *bp } else { buf = make([]byte, scratchLen) - defer bufPool.Put(&buf) + defer bufPools[index].Put(&buf) } var sawEOF bool diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu.go b/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu.go index 83f112c4c808..4756ad5f7951 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu.go @@ -38,7 +38,7 @@ var X86 struct { HasAVX512F bool // Advanced vector extension 512 Foundation Instructions HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions - HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions Instructions + HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions @@ -54,6 +54,9 @@ var X86 struct { HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2 HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions + HasAMXTile bool // Advanced Matrix Extension Tile instructions + HasAMXInt8 bool // Advanced Matrix Extension Int8 instructions + HasAMXBF16 bool // Advanced Matrix Extension BFloat16 instructions HasBMI1 bool // Bit manipulation instruction set 1 HasBMI2 bool // Bit manipulation instruction set 2 HasCX16 bool // Compare and exchange 16 Bytes diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu_x86.go b/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu_x86.go index f5aacfc825d5..2dcde8285d59 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -37,6 +37,9 @@ func initOptions() { {Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2}, {Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG}, {Name: "avx512bf16", Feature: &X86.HasAVX512BF16}, + {Name: "amxtile", Feature: &X86.HasAMXTile}, + {Name: "amxint8", Feature: &X86.HasAMXInt8}, + {Name: "amxbf16", Feature: &X86.HasAMXBF16}, {Name: "bmi1", Feature: &X86.HasBMI1}, {Name: "bmi2", Feature: &X86.HasBMI2}, {Name: "cx16", Feature: &X86.HasCX16}, @@ -138,6 +141,10 @@ func archInit() { eax71, _, _, _ := cpuid(7, 1) X86.HasAVX512BF16 = isSet(5, eax71) } + + X86.HasAMXTile = isSet(24, edx7) + X86.HasAMXInt8 = isSet(25, edx7) + X86.HasAMXBF16 = isSet(22, edx7) } func isSet(bitpos uint, value uint32) bool { diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh index 8f775fafa693..47fa6a7ebd45 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -583,6 +583,7 @@ ccflags="$@" $2 ~ /^PERF_/ || $2 ~ /^SECCOMP_MODE_/ || $2 ~ /^SEEK_/ || + $2 ~ /^SCHED_/ || $2 ~ /^SPLICE_/ || $2 ~ /^SYNC_FILE_RANGE_/ || $2 !~ /IOC_MAGIC/ && diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go index a730878e4931..0ba030197f2a 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -2471,6 +2471,29 @@ func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask * return pselect6(nfd, r, w, e, mutableTimeout, kernelMask) } +//sys schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) +//sys schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) + +// SchedSetAttr is a wrapper for sched_setattr(2) syscall. +// https://man7.org/linux/man-pages/man2/sched_setattr.2.html +func SchedSetAttr(pid int, attr *SchedAttr, flags uint) error { + if attr == nil { + return EINVAL + } + attr.Size = SizeofSchedAttr + return schedSetattr(pid, attr, flags) +} + +// SchedGetAttr is a wrapper for sched_getattr(2) syscall. +// https://man7.org/linux/man-pages/man2/sched_getattr.2.html +func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { + attr := &SchedAttr{} + if err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil { + return nil, err + } + return attr, nil +} + /* * Unimplemented */ diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go index 8bb30e7ce3f6..f6eda27050da 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -549,6 +549,9 @@ func SetNonblock(fd int, nonblocking bool) (err error) { if err != nil { return err } + if (flag&O_NONBLOCK != 0) == nonblocking { + return nil + } if nonblocking { flag |= O_NONBLOCK } else { diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux.go index 3784f402e559..0787a043be12 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -2821,6 +2821,23 @@ const ( RWF_SUPPORTED = 0x1f RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 + SCHED_BATCH = 0x3 + SCHED_DEADLINE = 0x6 + SCHED_FIFO = 0x1 + SCHED_FLAG_ALL = 0x7f + SCHED_FLAG_DL_OVERRUN = 0x4 + SCHED_FLAG_KEEP_ALL = 0x18 + SCHED_FLAG_KEEP_PARAMS = 0x10 + SCHED_FLAG_KEEP_POLICY = 0x8 + SCHED_FLAG_RECLAIM = 0x2 + SCHED_FLAG_RESET_ON_FORK = 0x1 + SCHED_FLAG_UTIL_CLAMP = 0x60 + SCHED_FLAG_UTIL_CLAMP_MAX = 0x40 + SCHED_FLAG_UTIL_CLAMP_MIN = 0x20 + SCHED_IDLE = 0x5 + SCHED_NORMAL = 0x0 + SCHED_RESET_ON_FORK = 0x40000000 + SCHED_RR = 0x2 SCM_CREDENTIALS = 0x2 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x1d diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go index a07321bed9b5..14ab34a56514 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -2197,3 +2197,23 @@ func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { RawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) { + _, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) { + _, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go index 26ef52aafc2a..494493c78c9d 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -5868,3 +5868,18 @@ const ( VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5 VIRTIO_NET_HDR_GSO_ECN = 0x80 ) + +type SchedAttr struct { + Size uint32 + Policy uint32 + Flags uint64 + Nice int32 + Priority uint32 + Runtime uint64 + Deadline uint64 + Period uint64 + Util_min uint32 + Util_max uint32 +} + +const SizeofSchedAttr = 0x38 diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go b/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go index 373d16388a10..67bad0926ae1 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -216,7 +216,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath //sys TerminateProcess(handle Handle, exitcode uint32) (err error) //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) -//sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW +//sys getStartupInfo(startupInfo *StartupInfo) = GetStartupInfoW //sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) //sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) //sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] @@ -437,6 +437,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute //sys DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute +// Windows Multimedia API +//sys TimeBeginPeriod (period uint32) (err error) [failretval != 0] = winmm.timeBeginPeriod +//sys TimeEndPeriod (period uint32) (err error) [failretval != 0] = winmm.timeEndPeriod + // syscall interface implementation for other packages // GetCurrentProcess returns the handle for the current process. @@ -1624,6 +1628,11 @@ func SetConsoleCursorPosition(console Handle, position Coord) error { return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position)))) } +func GetStartupInfo(startupInfo *StartupInfo) error { + getStartupInfo(startupInfo) + return nil +} + func (s NTStatus) Errno() syscall.Errno { return rtlNtStatusToDosErrorNoTeb(s) } diff --git a/cluster-autoscaler/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/cluster-autoscaler/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 566dd3e315f7..5c385580f68b 100644 --- a/cluster-autoscaler/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/cluster-autoscaler/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -55,6 +55,7 @@ var ( moduser32 = NewLazySystemDLL("user32.dll") moduserenv = NewLazySystemDLL("userenv.dll") modversion = NewLazySystemDLL("version.dll") + modwinmm = NewLazySystemDLL("winmm.dll") modwintrust = NewLazySystemDLL("wintrust.dll") modws2_32 = NewLazySystemDLL("ws2_32.dll") modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") @@ -468,6 +469,8 @@ var ( procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") procVerQueryValueW = modversion.NewProc("VerQueryValueW") + proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod") + proctimeEndPeriod = modwinmm.NewProc("timeEndPeriod") procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") @@ -2367,11 +2370,8 @@ func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uin return } -func GetStartupInfo(startupInfo *StartupInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) - if r1 == 0 { - err = errnoErr(e1) - } +func getStartupInfo(startupInfo *StartupInfo) { + syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) return } @@ -4017,6 +4017,22 @@ func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPoint return } +func TimeBeginPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func TimeEndPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) if r0 != 0 { diff --git a/cluster-autoscaler/vendor/golang.org/x/text/unicode/norm/trie.go b/cluster-autoscaler/vendor/golang.org/x/text/unicode/norm/trie.go index 423386bf4369..e4250ae22ce0 100644 --- a/cluster-autoscaler/vendor/golang.org/x/text/unicode/norm/trie.go +++ b/cluster-autoscaler/vendor/golang.org/x/text/unicode/norm/trie.go @@ -29,7 +29,7 @@ var ( nfkcData = newNfkcTrie(0) ) -// lookupValue determines the type of block n and looks up the value for b. +// lookup determines the type of block n and looks up the value for b. // For n < t.cutoff, the block is a simple lookup table. Otherwise, the block // is a list of ranges with an accompanying value. Given a matching range r, // the value for b is by r.value + (b - r.lo) * stride. diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/protojson/encode.go index d09d22e139bc..66b95870e977 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/protojson/encode.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/protojson/encode.go @@ -106,13 +106,19 @@ func (o MarshalOptions) Format(m proto.Message) string { // MarshalOptions. Do not depend on the output being stable. It may change over // time across different versions of the program. func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { - return o.marshal(m) + return o.marshal(nil, m) +} + +// MarshalAppend appends the JSON format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) } // marshal is a centralized function that all marshal operations go through. // For profiling purposes, avoid changing the name of this function or // introducing other code paths for marshal that do not go through this. -func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { if o.Multiline && o.Indent == "" { o.Indent = defaultIndent } @@ -120,7 +126,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { o.Resolver = protoregistry.GlobalTypes } - internalEnc, err := json.NewEncoder(o.Indent) + internalEnc, err := json.NewEncoder(b, o.Indent) if err != nil { return nil, err } @@ -128,7 +134,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { // Treat nil message interface as an empty message, // in which case the output in an empty JSON object. if m == nil { - return []byte("{}"), nil + return append(b, '{', '}'), nil } enc := encoder{internalEnc, o} diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/prototext/encode.go index ebf6c65284dd..722a7b41df36 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/encoding/prototext/encode.go @@ -101,13 +101,19 @@ func (o MarshalOptions) Format(m proto.Message) string { // MarshalOptions object. Do not depend on the output being stable. It may // change over time across different versions of the program. func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { - return o.marshal(m) + return o.marshal(nil, m) +} + +// MarshalAppend appends the textproto format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) } // marshal is a centralized function that all marshal operations go through. // For profiling purposes, avoid changing the name of this function or // introducing other code paths for marshal that do not go through this. -func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { var delims = [2]byte{'{', '}'} if o.Multiline && o.Indent == "" { @@ -117,7 +123,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { o.Resolver = protoregistry.GlobalTypes } - internalEnc, err := text.NewEncoder(o.Indent, delims, o.EmitASCII) + internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII) if err != nil { return nil, err } @@ -125,7 +131,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { // Treat nil message interface as an empty message, // in which case there is nothing to output. if m == nil { - return []byte{}, nil + return b, nil } enc := encoder{internalEnc, o} diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go index fbdf34873420..934f2dcb39d0 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go @@ -41,8 +41,10 @@ type Encoder struct { // // If indent is a non-empty string, it causes every entry for an Array or Object // to be preceded by the indent and trailed by a newline. -func NewEncoder(indent string) (*Encoder, error) { - e := &Encoder{} +func NewEncoder(buf []byte, indent string) (*Encoder, error) { + e := &Encoder{ + out: buf, + } if len(indent) > 0 { if strings.Trim(indent, " \t") != "" { return nil, errors.New("indent may only be composed of space or tab characters") @@ -176,13 +178,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte { // WriteInt writes out the given signed integer in JSON number value. func (e *Encoder) WriteInt(n int64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatInt(n, 10)...) + e.out = strconv.AppendInt(e.out, n, 10) } // WriteUint writes out the given unsigned integer in JSON number value. func (e *Encoder) WriteUint(n uint64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatUint(n, 10)...) + e.out = strconv.AppendUint(e.out, n, 10) } // StartObject writes out the '{' symbol. diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go index da289ccce6e2..cf7aed77bc30 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go @@ -53,8 +53,10 @@ type encoderState struct { // If outputASCII is true, strings will be serialized in such a way that // multi-byte UTF-8 sequences are escaped. This property ensures that the // overall output is ASCII (as opposed to UTF-8). -func NewEncoder(indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { - e := &Encoder{} +func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { + e := &Encoder{ + encoderState: encoderState{out: buf}, + } if len(indent) > 0 { if strings.Trim(indent, " \t") != "" { return nil, errors.New("indent may only be composed of space and tab characters") @@ -195,13 +197,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte { // WriteInt writes out the given signed integer value. func (e *Encoder) WriteInt(n int64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatInt(n, 10)...) + e.out = strconv.AppendInt(e.out, n, 10) } // WriteUint writes out the given unsigned integer value. func (e *Encoder) WriteUint(n uint64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatUint(n, 10)...) + e.out = strconv.AppendUint(e.out, n, 10) } // WriteLiteral writes out the given string as a literal value without quotes. diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go index 5c0e8f73f4e4..136f1b215733 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -183,13 +183,58 @@ const ( // Field names for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration" + ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification" ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option" + ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration" + ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification" ) // Field numbers for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState" + ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" +) + +// Names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" + ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration" +) + +// Field names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number" + ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name" + ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type" + ExtensionRangeOptions_Declaration_IsRepeated_field_name protoreflect.Name = "is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved" + ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated" + + ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number" + ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name" + ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type" + ExtensionRangeOptions_Declaration_IsRepeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved" + ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated" +) + +// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1 + ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3 + ExtensionRangeOptions_Declaration_IsRepeated_field_number protoreflect.FieldNumber = 4 + ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5 + ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.FieldDescriptorProto. @@ -540,6 +585,7 @@ const ( FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" FieldOptions_Retention_field_name protoreflect.Name = "retention" FieldOptions_Target_field_name protoreflect.Name = "target" + FieldOptions_Targets_field_name protoreflect.Name = "targets" FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype" @@ -552,6 +598,7 @@ const ( FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact" FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention" FieldOptions_Target_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.target" + FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets" FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option" ) @@ -567,6 +614,7 @@ const ( FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16 FieldOptions_Retention_field_number protoreflect.FieldNumber = 17 FieldOptions_Target_field_number protoreflect.FieldNumber = 18 + FieldOptions_Targets_field_number protoreflect.FieldNumber = 19 FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 ) diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/type_gen.go index 3bc710138ad9..e0f75fea0a13 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/genid/type_gen.go @@ -32,6 +32,7 @@ const ( Type_Options_field_name protoreflect.Name = "options" Type_SourceContext_field_name protoreflect.Name = "source_context" Type_Syntax_field_name protoreflect.Name = "syntax" + Type_Edition_field_name protoreflect.Name = "edition" Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name" Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields" @@ -39,6 +40,7 @@ const ( Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options" Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context" Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax" + Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition" ) // Field numbers for google.protobuf.Type. @@ -49,6 +51,7 @@ const ( Type_Options_field_number protoreflect.FieldNumber = 4 Type_SourceContext_field_number protoreflect.FieldNumber = 5 Type_Syntax_field_number protoreflect.FieldNumber = 6 + Type_Edition_field_number protoreflect.FieldNumber = 7 ) // Names for google.protobuf.Field. @@ -121,12 +124,14 @@ const ( Enum_Options_field_name protoreflect.Name = "options" Enum_SourceContext_field_name protoreflect.Name = "source_context" Enum_Syntax_field_name protoreflect.Name = "syntax" + Enum_Edition_field_name protoreflect.Name = "edition" Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name" Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue" Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options" Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context" Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax" + Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition" ) // Field numbers for google.protobuf.Enum. @@ -136,6 +141,7 @@ const ( Enum_Options_field_number protoreflect.FieldNumber = 3 Enum_SourceContext_field_number protoreflect.FieldNumber = 4 Enum_Syntax_field_number protoreflect.FieldNumber = 5 + Enum_Edition_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.EnumValue. diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/order/order.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/order/order.go index 33745ed06254..dea522e127dc 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/order/order.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/order/order.go @@ -33,7 +33,7 @@ var ( return !inOneof(ox) && inOneof(oy) } // Fields in disjoint oneof sets are sorted by declaration index. - if ox != nil && oy != nil && ox != oy { + if inOneof(ox) && inOneof(oy) && ox != oy { return ox.Index() < oy.Index() } // Fields sorted by field number. diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/version/version.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/version/version.go index f7014cd51cd7..0999f29d501e 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,7 +51,7 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 30 + Minor = 31 Patch = 0 PreRelease = "" ) diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/proto/size.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/proto/size.go index 554b9c6c09a1..f1692b49b6c7 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/proto/size.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/proto/size.go @@ -73,23 +73,27 @@ func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protore } func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { + sizeTag := protowire.SizeTag(num) + if fd.IsPacked() && list.Len() > 0 { content := 0 for i, llen := 0, list.Len(); i < llen; i++ { content += o.sizeSingular(num, fd.Kind(), list.Get(i)) } - return protowire.SizeTag(num) + protowire.SizeBytes(content) + return sizeTag + protowire.SizeBytes(content) } for i, llen := 0, list.Len(); i < llen; i++ { - size += protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), list.Get(i)) + size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i)) } return size } func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { + sizeTag := protowire.SizeTag(num) + mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { - size += protowire.SizeTag(num) + size += sizeTag size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value)) return true }) diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go index 54ce326df94e..717b106f3da9 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -363,6 +363,8 @@ func (p *SourcePath) appendFieldOptions(b []byte) []byte { b = p.appendSingularField(b, "retention", nil) case 18: b = p.appendSingularField(b, "target", nil) + case 19: + b = p.appendRepeatedField(b, "targets", nil) case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) } @@ -418,6 +420,10 @@ func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte { switch (*p)[0] { case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + case 2: + b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration) + case 3: + b = p.appendSingularField(b, "verification", nil) } return b } @@ -473,3 +479,24 @@ func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte { } return b } + +func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "number", nil) + case 2: + b = p.appendSingularField(b, "full_name", nil) + case 3: + b = p.appendSingularField(b, "type", nil) + case 4: + b = p.appendSingularField(b, "is_repeated", nil) + case 5: + b = p.appendSingularField(b, "reserved", nil) + case 6: + b = p.appendSingularField(b, "repeated", nil) + } + return b +} diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go index dac5671db003..04c00f737c1e 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -48,6 +48,64 @@ import ( sync "sync" ) +// The verification state of the extension range. +type ExtensionRangeOptions_VerificationState int32 + +const ( + // All the extensions of the range must be declared. + ExtensionRangeOptions_DECLARATION ExtensionRangeOptions_VerificationState = 0 + ExtensionRangeOptions_UNVERIFIED ExtensionRangeOptions_VerificationState = 1 +) + +// Enum value maps for ExtensionRangeOptions_VerificationState. +var ( + ExtensionRangeOptions_VerificationState_name = map[int32]string{ + 0: "DECLARATION", + 1: "UNVERIFIED", + } + ExtensionRangeOptions_VerificationState_value = map[string]int32{ + "DECLARATION": 0, + "UNVERIFIED": 1, + } +) + +func (x ExtensionRangeOptions_VerificationState) Enum() *ExtensionRangeOptions_VerificationState { + p := new(ExtensionRangeOptions_VerificationState) + *p = x + return p +} + +func (x ExtensionRangeOptions_VerificationState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExtensionRangeOptions_VerificationState) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() +} + +func (ExtensionRangeOptions_VerificationState) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[0] +} + +func (x ExtensionRangeOptions_VerificationState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ExtensionRangeOptions_VerificationState) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ExtensionRangeOptions_VerificationState(num) + return nil +} + +// Deprecated: Use ExtensionRangeOptions_VerificationState.Descriptor instead. +func (ExtensionRangeOptions_VerificationState) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + type FieldDescriptorProto_Type int32 const ( @@ -137,11 +195,11 @@ func (x FieldDescriptorProto_Type) String() string { } func (FieldDescriptorProto_Type) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() } func (FieldDescriptorProto_Type) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[0] + return &file_google_protobuf_descriptor_proto_enumTypes[1] } func (x FieldDescriptorProto_Type) Number() protoreflect.EnumNumber { @@ -197,11 +255,11 @@ func (x FieldDescriptorProto_Label) String() string { } func (FieldDescriptorProto_Label) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() } func (FieldDescriptorProto_Label) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[1] + return &file_google_protobuf_descriptor_proto_enumTypes[2] } func (x FieldDescriptorProto_Label) Number() protoreflect.EnumNumber { @@ -258,11 +316,11 @@ func (x FileOptions_OptimizeMode) String() string { } func (FileOptions_OptimizeMode) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() } func (FileOptions_OptimizeMode) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[2] + return &file_google_protobuf_descriptor_proto_enumTypes[3] } func (x FileOptions_OptimizeMode) Number() protoreflect.EnumNumber { @@ -288,7 +346,13 @@ type FieldOptions_CType int32 const ( // Default mode. - FieldOptions_STRING FieldOptions_CType = 0 + FieldOptions_STRING FieldOptions_CType = 0 + // The option [ctype=CORD] may be applied to a non-repeated field of type + // "bytes". It indicates that in C++, the data should be stored in a Cord + // instead of a string. For very large strings, this may reduce memory + // fragmentation. It may also allow better performance when parsing from a + // Cord, or when parsing with aliasing enabled, as the parsed Cord may then + // alias the original buffer. FieldOptions_CORD FieldOptions_CType = 1 FieldOptions_STRING_PIECE FieldOptions_CType = 2 ) @@ -318,11 +382,11 @@ func (x FieldOptions_CType) String() string { } func (FieldOptions_CType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() } func (FieldOptions_CType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[3] + return &file_google_protobuf_descriptor_proto_enumTypes[4] } func (x FieldOptions_CType) Number() protoreflect.EnumNumber { @@ -380,11 +444,11 @@ func (x FieldOptions_JSType) String() string { } func (FieldOptions_JSType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() } func (FieldOptions_JSType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[4] + return &file_google_protobuf_descriptor_proto_enumTypes[5] } func (x FieldOptions_JSType) Number() protoreflect.EnumNumber { @@ -442,11 +506,11 @@ func (x FieldOptions_OptionRetention) String() string { } func (FieldOptions_OptionRetention) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() } func (FieldOptions_OptionRetention) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[5] + return &file_google_protobuf_descriptor_proto_enumTypes[6] } func (x FieldOptions_OptionRetention) Number() protoreflect.EnumNumber { @@ -526,11 +590,11 @@ func (x FieldOptions_OptionTargetType) String() string { } func (FieldOptions_OptionTargetType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() } func (FieldOptions_OptionTargetType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[6] + return &file_google_protobuf_descriptor_proto_enumTypes[7] } func (x FieldOptions_OptionTargetType) Number() protoreflect.EnumNumber { @@ -588,11 +652,11 @@ func (x MethodOptions_IdempotencyLevel) String() string { } func (MethodOptions_IdempotencyLevel) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() } func (MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[7] + return &file_google_protobuf_descriptor_proto_enumTypes[8] } func (x MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber { @@ -652,11 +716,11 @@ func (x GeneratedCodeInfo_Annotation_Semantic) String() string { } func (GeneratedCodeInfo_Annotation_Semantic) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() } func (GeneratedCodeInfo_Annotation_Semantic) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[8] + return &file_google_protobuf_descriptor_proto_enumTypes[9] } func (x GeneratedCodeInfo_Annotation_Semantic) Number() protoreflect.EnumNumber { @@ -1015,7 +1079,21 @@ type ExtensionRangeOptions struct { // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -} + // go/protobuf-stripping-extension-declarations + // Like Metadata, but we use a repeated field to hold all extension + // declarations. This should avoid the size increases of transforming a large + // extension range into small ranges in generated binaries. + Declaration []*ExtensionRangeOptions_Declaration `protobuf:"bytes,2,rep,name=declaration" json:"declaration,omitempty"` + // The verification state of the range. + // TODO(b/278783756): flip the default to DECLARATION once all empty ranges + // are marked as UNVERIFIED. + Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` +} + +// Default values for ExtensionRangeOptions fields. +const ( + Default_ExtensionRangeOptions_Verification = ExtensionRangeOptions_UNVERIFIED +) func (x *ExtensionRangeOptions) Reset() { *x = ExtensionRangeOptions{} @@ -1056,6 +1134,20 @@ func (x *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption return nil } +func (x *ExtensionRangeOptions) GetDeclaration() []*ExtensionRangeOptions_Declaration { + if x != nil { + return x.Declaration + } + return nil +} + +func (x *ExtensionRangeOptions) GetVerification() ExtensionRangeOptions_VerificationState { + if x != nil && x.Verification != nil { + return *x.Verification + } + return Default_ExtensionRangeOptions_Verification +} + // Describes a field within a message. type FieldDescriptorProto struct { state protoimpl.MessageState @@ -2046,8 +2138,10 @@ type FieldOptions struct { // The ctype option instructs the C++ code generator to use a different // representation of the field than it normally would. See the specific - // options below. This option is not yet implemented in the open source - // release -- sorry, we'll try to include it in a future version! + // options below. This option is only implemented to support use of + // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of + // type "bytes" in the open source release -- sorry, we'll try to include + // other types in a future version! Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` // The packed option can be enabled for repeated primitive fields to enable // a more efficient representation on the wire. Rather than repeatedly @@ -2111,9 +2205,11 @@ type FieldOptions struct { Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` // Indicate that the field value should not be printed out when using debug // formats, e.g. when the field contains sensitive credentials. - DebugRedact *bool `protobuf:"varint,16,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` - Retention *FieldOptions_OptionRetention `protobuf:"varint,17,opt,name=retention,enum=google.protobuf.FieldOptions_OptionRetention" json:"retention,omitempty"` - Target *FieldOptions_OptionTargetType `protobuf:"varint,18,opt,name=target,enum=google.protobuf.FieldOptions_OptionTargetType" json:"target,omitempty"` + DebugRedact *bool `protobuf:"varint,16,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` + Retention *FieldOptions_OptionRetention `protobuf:"varint,17,opt,name=retention,enum=google.protobuf.FieldOptions_OptionRetention" json:"retention,omitempty"` + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + Target *FieldOptions_OptionTargetType `protobuf:"varint,18,opt,name=target,enum=google.protobuf.FieldOptions_OptionTargetType" json:"target,omitempty"` + Targets []FieldOptions_OptionTargetType `protobuf:"varint,19,rep,name=targets,enum=google.protobuf.FieldOptions_OptionTargetType" json:"targets,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` } @@ -2224,6 +2320,7 @@ func (x *FieldOptions) GetRetention() FieldOptions_OptionRetention { return FieldOptions_RETENTION_UNKNOWN } +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. func (x *FieldOptions) GetTarget() FieldOptions_OptionTargetType { if x != nil && x.Target != nil { return *x.Target @@ -2231,6 +2328,13 @@ func (x *FieldOptions) GetTarget() FieldOptions_OptionTargetType { return FieldOptions_TARGET_TYPE_UNKNOWN } +func (x *FieldOptions) GetTargets() []FieldOptions_OptionTargetType { + if x != nil { + return x.Targets + } + return nil +} + func (x *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -2960,6 +3064,108 @@ func (x *DescriptorProto_ReservedRange) GetEnd() int32 { return 0 } +type ExtensionRangeOptions_Declaration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The extension number declared within the extension range. + Number *int32 `protobuf:"varint,1,opt,name=number" json:"number,omitempty"` + // The fully-qualified name of the extension field. There must be a leading + // dot in front of the full name. + FullName *string `protobuf:"bytes,2,opt,name=full_name,json=fullName" json:"full_name,omitempty"` + // The fully-qualified type name of the extension field. Unlike + // Metadata.type, Declaration.type must have a leading dot for messages + // and enums. + Type *string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` + // Deprecated. Please use "repeated". + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + IsRepeated *bool `protobuf:"varint,4,opt,name=is_repeated,json=isRepeated" json:"is_repeated,omitempty"` + // If true, indicates that the number is reserved in the extension range, + // and any extension field with the number will fail to compile. Set this + // when a declared extension field is deleted. + Reserved *bool `protobuf:"varint,5,opt,name=reserved" json:"reserved,omitempty"` + // If true, indicates that the extension must be defined as repeated. + // Otherwise the extension must be defined as optional. + Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` +} + +func (x *ExtensionRangeOptions_Declaration) Reset() { + *x = ExtensionRangeOptions_Declaration{} + if protoimpl.UnsafeEnabled { + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtensionRangeOptions_Declaration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionRangeOptions_Declaration) ProtoMessage() {} + +func (x *ExtensionRangeOptions_Declaration) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionRangeOptions_Declaration.ProtoReflect.Descriptor instead. +func (*ExtensionRangeOptions_Declaration) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ExtensionRangeOptions_Declaration) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *ExtensionRangeOptions_Declaration) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *ExtensionRangeOptions_Declaration) GetType() string { + if x != nil && x.Type != nil { + return *x.Type + } + return "" +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *ExtensionRangeOptions_Declaration) GetIsRepeated() bool { + if x != nil && x.IsRepeated != nil { + return *x.IsRepeated + } + return false +} + +func (x *ExtensionRangeOptions_Declaration) GetReserved() bool { + if x != nil && x.Reserved != nil { + return *x.Reserved + } + return false +} + +func (x *ExtensionRangeOptions_Declaration) GetRepeated() bool { + if x != nil && x.Repeated != nil { + return *x.Repeated + } + return false +} + // Range of reserved numeric values. Reserved values may not be used by // entries in the same enum. Reserved ranges may not overlap. // @@ -2978,7 +3184,7 @@ type EnumDescriptorProto_EnumReservedRange struct { func (x *EnumDescriptorProto_EnumReservedRange) Reset() { *x = EnumDescriptorProto_EnumReservedRange{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2991,7 +3197,7 @@ func (x *EnumDescriptorProto_EnumReservedRange) String() string { func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} func (x *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3038,7 +3244,7 @@ type UninterpretedOption_NamePart struct { func (x *UninterpretedOption_NamePart) Reset() { *x = UninterpretedOption_NamePart{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3051,7 +3257,7 @@ func (x *UninterpretedOption_NamePart) String() string { func (*UninterpretedOption_NamePart) ProtoMessage() {} func (x *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3182,7 +3388,7 @@ type SourceCodeInfo_Location struct { func (x *SourceCodeInfo_Location) Reset() { *x = SourceCodeInfo_Location{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3195,7 +3401,7 @@ func (x *SourceCodeInfo_Location) String() string { func (*SourceCodeInfo_Location) ProtoMessage() {} func (x *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3269,7 +3475,7 @@ type GeneratedCodeInfo_Annotation struct { func (x *GeneratedCodeInfo_Annotation) Reset() { *x = GeneratedCodeInfo_Annotation{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3282,7 +3488,7 @@ func (x *GeneratedCodeInfo_Annotation) String() string { func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (x *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3436,264 +3642,296 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, - 0x7c, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, - 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0xad, 0x04, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0x88, 0x01, + 0x02, 0x52, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, + 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x0a, + 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x63, + 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x34, + 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, + 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, - 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, - 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, - 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, - 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, - 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, - 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, - 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, - 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, - 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, - 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, - 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, - 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, - 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, - 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, + 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, + 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, + 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, + 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, + 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, + 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, + 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, + 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, + 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, + 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, + 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, + 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, + 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, + 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, + 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, + 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, + 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, + 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, + 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, + 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, 0x09, 0x0a, 0x0b, 0x46, + 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, + 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, + 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, + 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, + 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, + 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, - 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, - 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, - 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, - 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, - 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, - 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, - 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, - 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, - 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, - 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, - 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, 0x70, 0x68, 0x70, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, - 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, - 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x72, 0x65, - 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, 0x61, 0x72, - 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x77, - 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, - 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, - 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x68, - 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, - 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, - 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, - 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, - 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xbb, 0x03, 0x0a, - 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x77, - 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, - 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x1c, 0x6e, - 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x65, - 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, + 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, + 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, + 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, 0x5f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, 0x70, 0x68, 0x70, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, + 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, + 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, + 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, - 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xb7, 0x08, 0x0a, 0x0c, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, - 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, - 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, 0x75, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, 0x0a, 0x0c, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x58, 0x0a, 0x14, 0x75, + 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, + 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, + 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xbb, + 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, + 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, + 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x85, 0x09, 0x0a, + 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, + 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, + 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, + 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, + 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, + 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, + 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, + 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x48, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, @@ -3885,98 +4123,103 @@ func file_google_protobuf_descriptor_proto_rawDescGZIP() []byte { return file_google_protobuf_descriptor_proto_rawDescData } -var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_google_protobuf_descriptor_proto_goTypes = []interface{}{ - (FieldDescriptorProto_Type)(0), // 0: google.protobuf.FieldDescriptorProto.Type - (FieldDescriptorProto_Label)(0), // 1: google.protobuf.FieldDescriptorProto.Label - (FileOptions_OptimizeMode)(0), // 2: google.protobuf.FileOptions.OptimizeMode - (FieldOptions_CType)(0), // 3: google.protobuf.FieldOptions.CType - (FieldOptions_JSType)(0), // 4: google.protobuf.FieldOptions.JSType - (FieldOptions_OptionRetention)(0), // 5: google.protobuf.FieldOptions.OptionRetention - (FieldOptions_OptionTargetType)(0), // 6: google.protobuf.FieldOptions.OptionTargetType - (MethodOptions_IdempotencyLevel)(0), // 7: google.protobuf.MethodOptions.IdempotencyLevel - (GeneratedCodeInfo_Annotation_Semantic)(0), // 8: google.protobuf.GeneratedCodeInfo.Annotation.Semantic - (*FileDescriptorSet)(nil), // 9: google.protobuf.FileDescriptorSet - (*FileDescriptorProto)(nil), // 10: google.protobuf.FileDescriptorProto - (*DescriptorProto)(nil), // 11: google.protobuf.DescriptorProto - (*ExtensionRangeOptions)(nil), // 12: google.protobuf.ExtensionRangeOptions - (*FieldDescriptorProto)(nil), // 13: google.protobuf.FieldDescriptorProto - (*OneofDescriptorProto)(nil), // 14: google.protobuf.OneofDescriptorProto - (*EnumDescriptorProto)(nil), // 15: google.protobuf.EnumDescriptorProto - (*EnumValueDescriptorProto)(nil), // 16: google.protobuf.EnumValueDescriptorProto - (*ServiceDescriptorProto)(nil), // 17: google.protobuf.ServiceDescriptorProto - (*MethodDescriptorProto)(nil), // 18: google.protobuf.MethodDescriptorProto - (*FileOptions)(nil), // 19: google.protobuf.FileOptions - (*MessageOptions)(nil), // 20: google.protobuf.MessageOptions - (*FieldOptions)(nil), // 21: google.protobuf.FieldOptions - (*OneofOptions)(nil), // 22: google.protobuf.OneofOptions - (*EnumOptions)(nil), // 23: google.protobuf.EnumOptions - (*EnumValueOptions)(nil), // 24: google.protobuf.EnumValueOptions - (*ServiceOptions)(nil), // 25: google.protobuf.ServiceOptions - (*MethodOptions)(nil), // 26: google.protobuf.MethodOptions - (*UninterpretedOption)(nil), // 27: google.protobuf.UninterpretedOption - (*SourceCodeInfo)(nil), // 28: google.protobuf.SourceCodeInfo - (*GeneratedCodeInfo)(nil), // 29: google.protobuf.GeneratedCodeInfo - (*DescriptorProto_ExtensionRange)(nil), // 30: google.protobuf.DescriptorProto.ExtensionRange - (*DescriptorProto_ReservedRange)(nil), // 31: google.protobuf.DescriptorProto.ReservedRange - (*EnumDescriptorProto_EnumReservedRange)(nil), // 32: google.protobuf.EnumDescriptorProto.EnumReservedRange - (*UninterpretedOption_NamePart)(nil), // 33: google.protobuf.UninterpretedOption.NamePart - (*SourceCodeInfo_Location)(nil), // 34: google.protobuf.SourceCodeInfo.Location - (*GeneratedCodeInfo_Annotation)(nil), // 35: google.protobuf.GeneratedCodeInfo.Annotation + (ExtensionRangeOptions_VerificationState)(0), // 0: google.protobuf.ExtensionRangeOptions.VerificationState + (FieldDescriptorProto_Type)(0), // 1: google.protobuf.FieldDescriptorProto.Type + (FieldDescriptorProto_Label)(0), // 2: google.protobuf.FieldDescriptorProto.Label + (FileOptions_OptimizeMode)(0), // 3: google.protobuf.FileOptions.OptimizeMode + (FieldOptions_CType)(0), // 4: google.protobuf.FieldOptions.CType + (FieldOptions_JSType)(0), // 5: google.protobuf.FieldOptions.JSType + (FieldOptions_OptionRetention)(0), // 6: google.protobuf.FieldOptions.OptionRetention + (FieldOptions_OptionTargetType)(0), // 7: google.protobuf.FieldOptions.OptionTargetType + (MethodOptions_IdempotencyLevel)(0), // 8: google.protobuf.MethodOptions.IdempotencyLevel + (GeneratedCodeInfo_Annotation_Semantic)(0), // 9: google.protobuf.GeneratedCodeInfo.Annotation.Semantic + (*FileDescriptorSet)(nil), // 10: google.protobuf.FileDescriptorSet + (*FileDescriptorProto)(nil), // 11: google.protobuf.FileDescriptorProto + (*DescriptorProto)(nil), // 12: google.protobuf.DescriptorProto + (*ExtensionRangeOptions)(nil), // 13: google.protobuf.ExtensionRangeOptions + (*FieldDescriptorProto)(nil), // 14: google.protobuf.FieldDescriptorProto + (*OneofDescriptorProto)(nil), // 15: google.protobuf.OneofDescriptorProto + (*EnumDescriptorProto)(nil), // 16: google.protobuf.EnumDescriptorProto + (*EnumValueDescriptorProto)(nil), // 17: google.protobuf.EnumValueDescriptorProto + (*ServiceDescriptorProto)(nil), // 18: google.protobuf.ServiceDescriptorProto + (*MethodDescriptorProto)(nil), // 19: google.protobuf.MethodDescriptorProto + (*FileOptions)(nil), // 20: google.protobuf.FileOptions + (*MessageOptions)(nil), // 21: google.protobuf.MessageOptions + (*FieldOptions)(nil), // 22: google.protobuf.FieldOptions + (*OneofOptions)(nil), // 23: google.protobuf.OneofOptions + (*EnumOptions)(nil), // 24: google.protobuf.EnumOptions + (*EnumValueOptions)(nil), // 25: google.protobuf.EnumValueOptions + (*ServiceOptions)(nil), // 26: google.protobuf.ServiceOptions + (*MethodOptions)(nil), // 27: google.protobuf.MethodOptions + (*UninterpretedOption)(nil), // 28: google.protobuf.UninterpretedOption + (*SourceCodeInfo)(nil), // 29: google.protobuf.SourceCodeInfo + (*GeneratedCodeInfo)(nil), // 30: google.protobuf.GeneratedCodeInfo + (*DescriptorProto_ExtensionRange)(nil), // 31: google.protobuf.DescriptorProto.ExtensionRange + (*DescriptorProto_ReservedRange)(nil), // 32: google.protobuf.DescriptorProto.ReservedRange + (*ExtensionRangeOptions_Declaration)(nil), // 33: google.protobuf.ExtensionRangeOptions.Declaration + (*EnumDescriptorProto_EnumReservedRange)(nil), // 34: google.protobuf.EnumDescriptorProto.EnumReservedRange + (*UninterpretedOption_NamePart)(nil), // 35: google.protobuf.UninterpretedOption.NamePart + (*SourceCodeInfo_Location)(nil), // 36: google.protobuf.SourceCodeInfo.Location + (*GeneratedCodeInfo_Annotation)(nil), // 37: google.protobuf.GeneratedCodeInfo.Annotation } var file_google_protobuf_descriptor_proto_depIdxs = []int32{ - 10, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto - 11, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto - 15, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 17, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto - 13, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 19, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions - 28, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo - 13, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto - 13, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 11, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto - 15, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 30, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange - 14, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto - 20, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions - 31, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange - 27, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 1, // 16: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label - 0, // 17: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type - 21, // 18: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions - 22, // 19: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions - 16, // 20: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto - 23, // 21: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions - 32, // 22: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange - 24, // 23: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions - 18, // 24: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto - 25, // 25: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions - 26, // 26: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions - 2, // 27: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode - 27, // 28: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 27, // 29: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 3, // 30: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType - 4, // 31: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType - 5, // 32: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention - 6, // 33: google.protobuf.FieldOptions.target:type_name -> google.protobuf.FieldOptions.OptionTargetType - 27, // 34: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 27, // 35: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 27, // 36: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 27, // 37: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 27, // 38: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 7, // 39: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel - 27, // 40: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 33, // 41: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart - 34, // 42: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location - 35, // 43: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation - 12, // 44: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions - 8, // 45: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic - 46, // [46:46] is the sub-list for method output_type - 46, // [46:46] is the sub-list for method input_type - 46, // [46:46] is the sub-list for extension type_name - 46, // [46:46] is the sub-list for extension extendee - 0, // [0:46] is the sub-list for field type_name + 11, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto + 12, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto + 16, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 18, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto + 14, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 20, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions + 29, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo + 14, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto + 14, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 12, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto + 16, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 31, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange + 15, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto + 21, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions + 32, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange + 28, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 33, // 16: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration + 0, // 17: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState + 2, // 18: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label + 1, // 19: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type + 22, // 20: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions + 23, // 21: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions + 17, // 22: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto + 24, // 23: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions + 34, // 24: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange + 25, // 25: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions + 19, // 26: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto + 26, // 27: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions + 27, // 28: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions + 3, // 29: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode + 28, // 30: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 31: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 4, // 32: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType + 5, // 33: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType + 6, // 34: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention + 7, // 35: google.protobuf.FieldOptions.target:type_name -> google.protobuf.FieldOptions.OptionTargetType + 7, // 36: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType + 28, // 37: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 38: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 39: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 40: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 41: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 8, // 42: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel + 28, // 43: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 35, // 44: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart + 36, // 45: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location + 37, // 46: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation + 13, // 47: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions + 9, // 48: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_google_protobuf_descriptor_proto_init() } @@ -4280,7 +4523,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { + switch v := v.(*ExtensionRangeOptions_Declaration); i { case 0: return &v.state case 1: @@ -4292,7 +4535,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UninterpretedOption_NamePart); i { + switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { case 0: return &v.state case 1: @@ -4304,7 +4547,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceCodeInfo_Location); i { + switch v := v.(*UninterpretedOption_NamePart); i { case 0: return &v.state case 1: @@ -4316,6 +4559,18 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SourceCodeInfo_Location); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_protobuf_descriptor_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GeneratedCodeInfo_Annotation); i { case 0: return &v.state @@ -4333,8 +4588,8 @@ func file_google_protobuf_descriptor_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_protobuf_descriptor_proto_rawDesc, - NumEnums: 9, - NumMessages: 27, + NumEnums: 10, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/dynamicpb/types.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/dynamicpb/types.go new file mode 100644 index 000000000000..5a8010f18faf --- /dev/null +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/dynamicpb/types.go @@ -0,0 +1,177 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package dynamicpb + +import ( + "fmt" + "strings" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +type extField struct { + name protoreflect.FullName + number protoreflect.FieldNumber +} + +// A Types is a collection of dynamically constructed descriptors. +// Its methods are safe for concurrent use. +// +// Types implements protoregistry.MessageTypeResolver and protoregistry.ExtensionTypeResolver. +// A Types may be used as a proto.UnmarshalOptions.Resolver. +type Types struct { + files *protoregistry.Files + + extMu sync.Mutex + atomicExtFiles uint64 + extensionsByMessage map[extField]protoreflect.ExtensionDescriptor +} + +// NewTypes creates a new Types registry with the provided files. +// The Files registry is retained, and changes to Files will be reflected in Types. +// It is not safe to concurrently change the Files while calling Types methods. +func NewTypes(f *protoregistry.Files) *Types { + return &Types{ + files: f, + } +} + +// FindEnumByName looks up an enum by its full name; +// e.g., "google.protobuf.Field.Kind". +// +// This returns (nil, protoregistry.NotFound) if not found. +func (t *Types) FindEnumByName(name protoreflect.FullName) (protoreflect.EnumType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + ed, ok := d.(protoreflect.EnumDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want enum", descName(d)) + } + return NewEnumType(ed), nil +} + +// FindExtensionByName looks up an extension field by the field's full name. +// Note that this is the full name of the field as determined by +// where the extension is declared and is unrelated to the full name of the +// message being extended. +// +// This returns (nil, protoregistry.NotFound) if not found. +func (t *Types) FindExtensionByName(name protoreflect.FullName) (protoreflect.ExtensionType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + xd, ok := d.(protoreflect.ExtensionDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want extension", descName(d)) + } + return NewExtensionType(xd), nil +} + +// FindExtensionByNumber looks up an extension field by the field number +// within some parent message, identified by full name. +// +// This returns (nil, protoregistry.NotFound) if not found. +func (t *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + // Construct the extension number map lazily, since not every user will need it. + // Update the map if new files are added to the registry. + if atomic.LoadUint64(&t.atomicExtFiles) != uint64(t.files.NumFiles()) { + t.updateExtensions() + } + xd := t.extensionsByMessage[extField{message, field}] + if xd == nil { + return nil, protoregistry.NotFound + } + return NewExtensionType(xd), nil +} + +// FindMessageByName looks up a message by its full name; +// e.g. "google.protobuf.Any". +// +// This returns (nil, protoregistry.NotFound) if not found. +func (t *Types) FindMessageByName(name protoreflect.FullName) (protoreflect.MessageType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + md, ok := d.(protoreflect.MessageDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want message", descName(d)) + } + return NewMessageType(md), nil +} + +// FindMessageByURL looks up a message by a URL identifier. +// See documentation on google.protobuf.Any.type_url for the URL format. +// +// This returns (nil, protoregistry.NotFound) if not found. +func (t *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) { + // This function is similar to FindMessageByName but + // truncates anything before and including '/' in the URL. + message := protoreflect.FullName(url) + if i := strings.LastIndexByte(url, '/'); i >= 0 { + message = message[i+len("/"):] + } + return t.FindMessageByName(message) +} + +func (t *Types) updateExtensions() { + t.extMu.Lock() + defer t.extMu.Unlock() + if atomic.LoadUint64(&t.atomicExtFiles) == uint64(t.files.NumFiles()) { + return + } + defer atomic.StoreUint64(&t.atomicExtFiles, uint64(t.files.NumFiles())) + t.files.RangeFiles(func(fd protoreflect.FileDescriptor) bool { + t.registerExtensions(fd.Extensions()) + t.registerExtensionsInMessages(fd.Messages()) + return true + }) +} + +func (t *Types) registerExtensionsInMessages(mds protoreflect.MessageDescriptors) { + count := mds.Len() + for i := 0; i < count; i++ { + md := mds.Get(i) + t.registerExtensions(md.Extensions()) + t.registerExtensionsInMessages(md.Messages()) + } +} + +func (t *Types) registerExtensions(xds protoreflect.ExtensionDescriptors) { + count := xds.Len() + for i := 0; i < count; i++ { + xd := xds.Get(i) + field := xd.Number() + message := xd.ContainingMessage().FullName() + if t.extensionsByMessage == nil { + t.extensionsByMessage = make(map[extField]protoreflect.ExtensionDescriptor) + } + t.extensionsByMessage[extField{message, field}] = xd + } +} + +func descName(d protoreflect.Descriptor) string { + switch d.(type) { + case protoreflect.EnumDescriptor: + return "enum" + case protoreflect.EnumValueDescriptor: + return "enum value" + case protoreflect.MessageDescriptor: + return "message" + case protoreflect.ExtensionDescriptor: + return "extension" + case protoreflect.ServiceDescriptor: + return "service" + default: + return fmt.Sprintf("%T", d) + } +} diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go index a6c7a33f3336..580b232f477a 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go @@ -142,39 +142,39 @@ import ( // // Example 2: Pack and unpack a message in Java. // -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// // or ... -// if (any.isSameTypeAs(Foo.getDefaultInstance())) { -// foo = any.unpack(Foo.getDefaultInstance()); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := anypb.New(foo) -// if err != nil { -// ... -// } -// ... -// foo := &pb.Foo{} -// if err := any.UnmarshalTo(foo); err != nil { -// ... -// } +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// // or ... +// if (any.isSameTypeAs(Foo.getDefaultInstance())) { +// foo = any.unpack(Foo.getDefaultInstance()); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } +// ... +// foo := &pb.Foo{} +// if err := any.UnmarshalTo(foo); err != nil { +// ... +// } // // The pack methods provided by protobuf library will by default use // 'type.googleapis.com/full.type.name' as the type URL and the unpack @@ -182,8 +182,8 @@ import ( // in the type URL, for example "foo.bar.com/x/y.z" will yield type // name "y.z". // -// # JSON -// +// JSON +// ==== // The JSON representation of an `Any` value uses the regular // representation of the deserialized, embedded message, with an // additional field `@type` which contains the type URL. Example: diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go index 9577ed593c9c..d2bac8b88ea1 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go @@ -132,7 +132,7 @@ import ( // `NullValue` is a singleton enumeration to represent the null value for the // `Value` type union. // -// The JSON representation for `NullValue` is JSON `null`. +// The JSON representation for `NullValue` is JSON `null`. type NullValue int32 const ( diff --git a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go index 61f69fc11b16..81511a3363ee 100644 --- a/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go +++ b/cluster-autoscaler/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go @@ -167,7 +167,7 @@ import ( // [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with // the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use // the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() // ) to obtain a formatter capable of generating timestamps in this format. type Timestamp struct { state protoimpl.MessageState diff --git a/cluster-autoscaler/vendor/k8s.io/api/batch/v1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/batch/v1/generated.proto index e1bef3a4634c..4f0822440faa 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/batch/v1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/batch/v1/generated.proto @@ -530,6 +530,7 @@ message PodFailurePolicyRule { // as a list of pod condition patterns. The requirement is satisfied if at // least one pattern matches an actual pod condition. At most 20 elements are allowed. // +listType=atomic + // +optional repeated PodFailurePolicyOnPodConditionsPattern onPodConditions = 3; } diff --git a/cluster-autoscaler/vendor/k8s.io/api/batch/v1/types.go b/cluster-autoscaler/vendor/k8s.io/api/batch/v1/types.go index 883d193aaebf..00144f5eb417 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/batch/v1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/batch/v1/types.go @@ -236,6 +236,7 @@ type PodFailurePolicyRule struct { // as a list of pod condition patterns. The requirement is satisfied if at // least one pattern matches an actual pod condition. At most 20 elements are allowed. // +listType=atomic + // +optional OnPodConditions []PodFailurePolicyOnPodConditionsPattern `json:"onPodConditions" protobuf:"bytes,3,opt,name=onPodConditions"` } @@ -534,6 +535,19 @@ const ( JobFailureTarget JobConditionType = "FailureTarget" ) +const ( + // JobReasonPodFailurePolicy reason indicates a job failure condition is added due to + // a failed pod matching a pod failure policy rule + // https://kep.k8s.io/3329 + // This is currently a beta field. + JobReasonPodFailurePolicy string = "PodFailurePolicy" + // JobReasonBackOffLimitExceeded reason indicates that pods within a job have failed a number of + // times higher than backOffLimit times. + JobReasonBackoffLimitExceeded string = "BackoffLimitExceeded" + // JobReasponDeadlineExceeded means job duration is past ActiveDeadline + JobReasonDeadlineExceeded string = "DeadlineExceeded" +) + // JobCondition describes current state of a job. type JobCondition struct { // Type of job condition, Complete or Failed. diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go index c267a5febded..200a368ccdc4 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.pb.go @@ -6041,10 +6041,38 @@ func (m *VolumeProjection) XXX_DiscardUnknown() { var xxx_messageInfo_VolumeProjection proto.InternalMessageInfo +func (m *VolumeResourceRequirements) Reset() { *m = VolumeResourceRequirements{} } +func (*VolumeResourceRequirements) ProtoMessage() {} +func (*VolumeResourceRequirements) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{214} +} +func (m *VolumeResourceRequirements) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeResourceRequirements) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeResourceRequirements) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeResourceRequirements.Merge(m, src) +} +func (m *VolumeResourceRequirements) XXX_Size() int { + return m.Size() +} +func (m *VolumeResourceRequirements) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeResourceRequirements.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeResourceRequirements proto.InternalMessageInfo + func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} func (*VolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_83c10c24ec417dc9, []int{214} + return fileDescriptor_83c10c24ec417dc9, []int{215} } func (m *VolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6072,7 +6100,7 @@ var xxx_messageInfo_VolumeSource proto.InternalMessageInfo func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_83c10c24ec417dc9, []int{215} + return fileDescriptor_83c10c24ec417dc9, []int{216} } func (m *VsphereVirtualDiskVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6100,7 +6128,7 @@ var xxx_messageInfo_VsphereVirtualDiskVolumeSource proto.InternalMessageInfo func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptor_83c10c24ec417dc9, []int{216} + return fileDescriptor_83c10c24ec417dc9, []int{217} } func (m *WeightedPodAffinityTerm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6128,7 +6156,7 @@ var xxx_messageInfo_WeightedPodAffinityTerm proto.InternalMessageInfo func (m *WindowsSecurityContextOptions) Reset() { *m = WindowsSecurityContextOptions{} } func (*WindowsSecurityContextOptions) ProtoMessage() {} func (*WindowsSecurityContextOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_83c10c24ec417dc9, []int{217} + return fileDescriptor_83c10c24ec417dc9, []int{218} } func (m *WindowsSecurityContextOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6398,6 +6426,9 @@ func init() { proto.RegisterType((*VolumeMount)(nil), "k8s.io.api.core.v1.VolumeMount") proto.RegisterType((*VolumeNodeAffinity)(nil), "k8s.io.api.core.v1.VolumeNodeAffinity") proto.RegisterType((*VolumeProjection)(nil), "k8s.io.api.core.v1.VolumeProjection") + proto.RegisterType((*VolumeResourceRequirements)(nil), "k8s.io.api.core.v1.VolumeResourceRequirements") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.VolumeResourceRequirements.LimitsEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.VolumeResourceRequirements.RequestsEntry") proto.RegisterType((*VolumeSource)(nil), "k8s.io.api.core.v1.VolumeSource") proto.RegisterType((*VsphereVirtualDiskVolumeSource)(nil), "k8s.io.api.core.v1.VsphereVirtualDiskVolumeSource") proto.RegisterType((*WeightedPodAffinityTerm)(nil), "k8s.io.api.core.v1.WeightedPodAffinityTerm") @@ -6409,934 +6440,951 @@ func init() { } var fileDescriptor_83c10c24ec417dc9 = []byte{ - // 14822 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x70, 0x24, 0xc9, - 0x75, 0x18, 0xcc, 0xea, 0xc6, 0xd5, 0x0f, 0x77, 0x62, 0x0e, 0x0c, 0x76, 0x66, 0x7a, 0xb6, 0x76, - 0x77, 0x76, 0xf6, 0xc2, 0x70, 0xf6, 0x20, 0x97, 0xbb, 0xe4, 0x8a, 0x38, 0x67, 0xb0, 0x03, 0x60, - 0x7a, 0xb3, 0x31, 0x33, 0xe4, 0x72, 0xc9, 0x60, 0xa1, 0x3b, 0x01, 0x14, 0xd1, 0xa8, 0xea, 0xad, - 0xaa, 0xc6, 0x0c, 0xe6, 0x23, 0x43, 0x12, 0xf5, 0xe9, 0xa0, 0xa4, 0xef, 0x0b, 0xc6, 0x17, 0xfa, - 0x8e, 0xa0, 0x14, 0x8a, 0x2f, 0x24, 0x59, 0x87, 0x69, 0xd9, 0xa6, 0x29, 0x4b, 0xb2, 0xa8, 0xcb, - 0x57, 0x58, 0x72, 0x38, 0x64, 0x59, 0x11, 0x16, 0x15, 0xa1, 0x30, 0x24, 0x8e, 0x1c, 0x21, 0x2b, - 0xc2, 0x96, 0xe4, 0xe3, 0x87, 0x0d, 0xcb, 0x96, 0x23, 0xcf, 0xca, 0xac, 0xa3, 0xbb, 0x31, 0x8b, - 0x01, 0x97, 0x8c, 0xfd, 0xd7, 0xfd, 0xde, 0xcb, 0x97, 0x59, 0x79, 0xbe, 0x7c, 0xef, 0xe5, 0x7b, - 0xf0, 0xea, 0xf6, 0xcb, 0xe1, 0xb4, 0xeb, 0x5f, 0xde, 0x6e, 0xad, 0x93, 0xc0, 0x23, 0x11, 0x09, - 0x2f, 0xef, 0x12, 0xaf, 0xee, 0x07, 0x97, 0x05, 0xc2, 0x69, 0xba, 0x97, 0x6b, 0x7e, 0x40, 0x2e, - 0xef, 0x5e, 0xb9, 0xbc, 0x49, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0x4f, 0x37, 0x03, 0x3f, 0xf2, 0x11, - 0xe2, 0x34, 0xd3, 0x4e, 0xd3, 0x9d, 0xa6, 0x34, 0xd3, 0xbb, 0x57, 0xa6, 0x9e, 0xdb, 0x74, 0xa3, - 0xad, 0xd6, 0xfa, 0x74, 0xcd, 0xdf, 0xb9, 0xbc, 0xe9, 0x6f, 0xfa, 0x97, 0x19, 0xe9, 0x7a, 0x6b, - 0x83, 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0xce, 0x62, 0xea, 0xc5, 0xb8, 0x9a, 0x1d, 0xa7, 0xb6, 0xe5, - 0x7a, 0x24, 0xd8, 0xbb, 0xdc, 0xdc, 0xde, 0x64, 0xf5, 0x06, 0x24, 0xf4, 0x5b, 0x41, 0x8d, 0x24, - 0x2b, 0x6e, 0x5b, 0x2a, 0xbc, 0xbc, 0x43, 0x22, 0x27, 0xa3, 0xb9, 0x53, 0x97, 0xf3, 0x4a, 0x05, - 0x2d, 0x2f, 0x72, 0x77, 0xd2, 0xd5, 0x7c, 0xa0, 0x53, 0x81, 0xb0, 0xb6, 0x45, 0x76, 0x9c, 0x54, - 0xb9, 0x17, 0xf2, 0xca, 0xb5, 0x22, 0xb7, 0x71, 0xd9, 0xf5, 0xa2, 0x30, 0x0a, 0x92, 0x85, 0xec, - 0xaf, 0x5b, 0x70, 0x61, 0xe6, 0x76, 0x75, 0xa1, 0xe1, 0x84, 0x91, 0x5b, 0x9b, 0x6d, 0xf8, 0xb5, - 0xed, 0x6a, 0xe4, 0x07, 0xe4, 0x96, 0xdf, 0x68, 0xed, 0x90, 0x2a, 0xeb, 0x08, 0xf4, 0x2c, 0x0c, - 0xec, 0xb2, 0xff, 0x4b, 0xf3, 0x93, 0xd6, 0x05, 0xeb, 0x52, 0x69, 0x76, 0xec, 0xb7, 0xf6, 0xcb, - 0xef, 0xbb, 0xbf, 0x5f, 0x1e, 0xb8, 0x25, 0xe0, 0x58, 0x51, 0xa0, 0x8b, 0xd0, 0xb7, 0x11, 0xae, - 0xed, 0x35, 0xc9, 0x64, 0x81, 0xd1, 0x8e, 0x08, 0xda, 0xbe, 0xc5, 0x2a, 0x85, 0x62, 0x81, 0x45, - 0x97, 0xa1, 0xd4, 0x74, 0x82, 0xc8, 0x8d, 0x5c, 0xdf, 0x9b, 0x2c, 0x5e, 0xb0, 0x2e, 0xf5, 0xce, - 0x8e, 0x0b, 0xd2, 0x52, 0x45, 0x22, 0x70, 0x4c, 0x43, 0x9b, 0x11, 0x10, 0xa7, 0x7e, 0xc3, 0x6b, - 0xec, 0x4d, 0xf6, 0x5c, 0xb0, 0x2e, 0x0d, 0xc4, 0xcd, 0xc0, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0xa5, - 0x02, 0x0c, 0xcc, 0x6c, 0x6c, 0xb8, 0x9e, 0x1b, 0xed, 0xa1, 0x5b, 0x30, 0xe4, 0xf9, 0x75, 0x22, - 0xff, 0xb3, 0xaf, 0x18, 0x7c, 0xfe, 0xc2, 0x74, 0x7a, 0x2a, 0x4d, 0xaf, 0x6a, 0x74, 0xb3, 0x63, - 0xf7, 0xf7, 0xcb, 0x43, 0x3a, 0x04, 0x1b, 0x7c, 0x10, 0x86, 0xc1, 0xa6, 0x5f, 0x57, 0x6c, 0x0b, - 0x8c, 0x6d, 0x39, 0x8b, 0x6d, 0x25, 0x26, 0x9b, 0x1d, 0xbd, 0xbf, 0x5f, 0x1e, 0xd4, 0x00, 0x58, - 0x67, 0x82, 0xd6, 0x61, 0x94, 0xfe, 0xf5, 0x22, 0x57, 0xf1, 0x2d, 0x32, 0xbe, 0x8f, 0xe5, 0xf1, - 0xd5, 0x48, 0x67, 0x27, 0xee, 0xef, 0x97, 0x47, 0x13, 0x40, 0x9c, 0x64, 0x68, 0xdf, 0x83, 0x91, - 0x99, 0x28, 0x72, 0x6a, 0x5b, 0xa4, 0xce, 0x47, 0x10, 0xbd, 0x08, 0x3d, 0x9e, 0xb3, 0x43, 0xc4, - 0xf8, 0x5e, 0x10, 0x1d, 0xdb, 0xb3, 0xea, 0xec, 0x90, 0x83, 0xfd, 0xf2, 0xd8, 0x4d, 0xcf, 0x7d, - 0xbb, 0x25, 0x66, 0x05, 0x85, 0x61, 0x46, 0x8d, 0x9e, 0x07, 0xa8, 0x93, 0x5d, 0xb7, 0x46, 0x2a, - 0x4e, 0xb4, 0x25, 0xc6, 0x1b, 0x89, 0xb2, 0x30, 0xaf, 0x30, 0x58, 0xa3, 0xb2, 0xef, 0x42, 0x69, - 0x66, 0xd7, 0x77, 0xeb, 0x15, 0xbf, 0x1e, 0xa2, 0x6d, 0x18, 0x6d, 0x06, 0x64, 0x83, 0x04, 0x0a, - 0x34, 0x69, 0x5d, 0x28, 0x5e, 0x1a, 0x7c, 0xfe, 0x52, 0xe6, 0xc7, 0x9a, 0xa4, 0x0b, 0x5e, 0x14, - 0xec, 0xcd, 0x9e, 0x16, 0xf5, 0x8d, 0x26, 0xb0, 0x38, 0xc9, 0xd9, 0xfe, 0x27, 0x05, 0x38, 0x39, - 0x73, 0xaf, 0x15, 0x90, 0x79, 0x37, 0xdc, 0x4e, 0xce, 0xf0, 0xba, 0x1b, 0x6e, 0xaf, 0xc6, 0x3d, - 0xa0, 0xa6, 0xd6, 0xbc, 0x80, 0x63, 0x45, 0x81, 0x9e, 0x83, 0x7e, 0xfa, 0xfb, 0x26, 0x5e, 0x12, - 0x9f, 0x3c, 0x21, 0x88, 0x07, 0xe7, 0x9d, 0xc8, 0x99, 0xe7, 0x28, 0x2c, 0x69, 0xd0, 0x0a, 0x0c, - 0xd6, 0xd8, 0x82, 0xdc, 0x5c, 0xf1, 0xeb, 0x84, 0x0d, 0x66, 0x69, 0xf6, 0x19, 0x4a, 0x3e, 0x17, - 0x83, 0x0f, 0xf6, 0xcb, 0x93, 0xbc, 0x6d, 0x82, 0x85, 0x86, 0xc3, 0x7a, 0x79, 0x64, 0xab, 0xf5, - 0xd5, 0xc3, 0x38, 0x41, 0xc6, 0xda, 0xba, 0xa4, 0x2d, 0x95, 0x5e, 0xb6, 0x54, 0x86, 0xb2, 0x97, - 0x09, 0xba, 0x02, 0x3d, 0xdb, 0xae, 0x57, 0x9f, 0xec, 0x63, 0xbc, 0xce, 0xd1, 0x31, 0xbf, 0xee, - 0x7a, 0xf5, 0x83, 0xfd, 0xf2, 0xb8, 0xd1, 0x1c, 0x0a, 0xc4, 0x8c, 0xd4, 0xfe, 0xcf, 0x16, 0x94, - 0x19, 0x6e, 0xd1, 0x6d, 0x90, 0x0a, 0x09, 0x42, 0x37, 0x8c, 0x88, 0x17, 0x19, 0x1d, 0xfa, 0x3c, - 0x40, 0x48, 0x6a, 0x01, 0x89, 0xb4, 0x2e, 0x55, 0x13, 0xa3, 0xaa, 0x30, 0x58, 0xa3, 0xa2, 0x1b, - 0x42, 0xb8, 0xe5, 0x04, 0x6c, 0x7e, 0x89, 0x8e, 0x55, 0x1b, 0x42, 0x55, 0x22, 0x70, 0x4c, 0x63, - 0x6c, 0x08, 0xc5, 0x4e, 0x1b, 0x02, 0xfa, 0x08, 0x8c, 0xc6, 0x95, 0x85, 0x4d, 0xa7, 0x26, 0x3b, - 0x90, 0x2d, 0x99, 0xaa, 0x89, 0xc2, 0x49, 0x5a, 0xfb, 0x6f, 0x5a, 0x62, 0xf2, 0xd0, 0xaf, 0x7e, - 0x97, 0x7f, 0xab, 0xfd, 0xcb, 0x16, 0xf4, 0xcf, 0xba, 0x5e, 0xdd, 0xf5, 0x36, 0xd1, 0xa7, 0x61, - 0x80, 0x9e, 0x4d, 0x75, 0x27, 0x72, 0xc4, 0xbe, 0xf7, 0x7e, 0x6d, 0x6d, 0xa9, 0xa3, 0x62, 0xba, - 0xb9, 0xbd, 0x49, 0x01, 0xe1, 0x34, 0xa5, 0xa6, 0xab, 0xed, 0xc6, 0xfa, 0x67, 0x48, 0x2d, 0x5a, - 0x21, 0x91, 0x13, 0x7f, 0x4e, 0x0c, 0xc3, 0x8a, 0x2b, 0xba, 0x0e, 0x7d, 0x91, 0x13, 0x6c, 0x92, - 0x48, 0x6c, 0x80, 0x99, 0x1b, 0x15, 0x2f, 0x89, 0xe9, 0x8a, 0x24, 0x5e, 0x8d, 0xc4, 0xc7, 0xc2, - 0x1a, 0x2b, 0x8a, 0x05, 0x0b, 0xfb, 0x7f, 0xf4, 0xc3, 0x99, 0xb9, 0xea, 0x52, 0xce, 0xbc, 0xba, - 0x08, 0x7d, 0xf5, 0xc0, 0xdd, 0x25, 0x81, 0xe8, 0x67, 0xc5, 0x65, 0x9e, 0x41, 0xb1, 0xc0, 0xa2, - 0x97, 0x61, 0x88, 0x1f, 0x48, 0xd7, 0x1c, 0xaf, 0xde, 0x90, 0x5d, 0x7c, 0x42, 0x50, 0x0f, 0xdd, - 0xd2, 0x70, 0xd8, 0xa0, 0x3c, 0xe4, 0xa4, 0xba, 0x98, 0x58, 0x8c, 0x79, 0x87, 0xdd, 0x17, 0x2c, - 0x18, 0xe3, 0xd5, 0xcc, 0x44, 0x51, 0xe0, 0xae, 0xb7, 0x22, 0x12, 0x4e, 0xf6, 0xb2, 0x9d, 0x6e, - 0x2e, 0xab, 0xb7, 0x72, 0x7b, 0x60, 0xfa, 0x56, 0x82, 0x0b, 0xdf, 0x04, 0x27, 0x45, 0xbd, 0x63, - 0x49, 0x34, 0x4e, 0x55, 0x8b, 0xbe, 0xc7, 0x82, 0xa9, 0x9a, 0xef, 0x45, 0x81, 0xdf, 0x68, 0x90, - 0xa0, 0xd2, 0x5a, 0x6f, 0xb8, 0xe1, 0x16, 0x9f, 0xa7, 0x98, 0x6c, 0xb0, 0x9d, 0x20, 0x67, 0x0c, - 0x15, 0x91, 0x18, 0xc3, 0xf3, 0xf7, 0xf7, 0xcb, 0x53, 0x73, 0xb9, 0xac, 0x70, 0x9b, 0x6a, 0xd0, - 0x36, 0x20, 0x7a, 0x94, 0x56, 0x23, 0x67, 0x93, 0xc4, 0x95, 0xf7, 0x77, 0x5f, 0xf9, 0xa9, 0xfb, - 0xfb, 0x65, 0xb4, 0x9a, 0x62, 0x81, 0x33, 0xd8, 0xa2, 0xb7, 0xe1, 0x04, 0x85, 0xa6, 0xbe, 0x75, - 0xa0, 0xfb, 0xea, 0x26, 0xef, 0xef, 0x97, 0x4f, 0xac, 0x66, 0x30, 0xc1, 0x99, 0xac, 0xd1, 0x77, - 0x59, 0x70, 0x26, 0xfe, 0xfc, 0x85, 0xbb, 0x4d, 0xc7, 0xab, 0xc7, 0x15, 0x97, 0xba, 0xaf, 0x98, - 0xee, 0xc9, 0x67, 0xe6, 0xf2, 0x38, 0xe1, 0xfc, 0x4a, 0x90, 0x07, 0x13, 0xb4, 0x69, 0xc9, 0xba, - 0xa1, 0xfb, 0xba, 0x4f, 0xdf, 0xdf, 0x2f, 0x4f, 0xac, 0xa6, 0x79, 0xe0, 0x2c, 0xc6, 0x53, 0x73, - 0x70, 0x32, 0x73, 0x76, 0xa2, 0x31, 0x28, 0x6e, 0x13, 0x2e, 0x75, 0x95, 0x30, 0xfd, 0x89, 0x4e, - 0x40, 0xef, 0xae, 0xd3, 0x68, 0x89, 0x85, 0x89, 0xf9, 0x9f, 0x57, 0x0a, 0x2f, 0x5b, 0xf6, 0x3f, - 0x2d, 0xc2, 0xe8, 0x5c, 0x75, 0xe9, 0x81, 0x56, 0xbd, 0x7e, 0xec, 0x15, 0xda, 0x1e, 0x7b, 0xf1, - 0x21, 0x5a, 0xcc, 0x3d, 0x44, 0xbf, 0x33, 0x63, 0xc9, 0xf6, 0xb0, 0x25, 0xfb, 0xa1, 0x9c, 0x25, - 0x7b, 0xc4, 0x0b, 0x75, 0x37, 0x67, 0xd6, 0xf6, 0xb2, 0x01, 0xcc, 0x94, 0x90, 0x96, 0xfd, 0x9a, - 0xd3, 0x48, 0x6e, 0xb5, 0x87, 0x9c, 0xba, 0x47, 0x33, 0x8e, 0x35, 0x18, 0x9a, 0x73, 0x9a, 0xce, - 0xba, 0xdb, 0x70, 0x23, 0x97, 0x84, 0xe8, 0x49, 0x28, 0x3a, 0xf5, 0x3a, 0x93, 0xee, 0x4a, 0xb3, - 0x27, 0xef, 0xef, 0x97, 0x8b, 0x33, 0x75, 0x2a, 0x66, 0x80, 0xa2, 0xda, 0xc3, 0x94, 0x02, 0x3d, - 0x0d, 0x3d, 0xf5, 0xc0, 0x6f, 0x4e, 0x16, 0x18, 0x25, 0x5d, 0xe5, 0x3d, 0xf3, 0x81, 0xdf, 0x4c, - 0x90, 0x32, 0x1a, 0xfb, 0x37, 0x0b, 0x70, 0x76, 0x8e, 0x34, 0xb7, 0x16, 0xab, 0x39, 0xe7, 0xc5, - 0x25, 0x18, 0xd8, 0xf1, 0x3d, 0x37, 0xf2, 0x83, 0x50, 0x54, 0xcd, 0x66, 0xc4, 0x8a, 0x80, 0x61, - 0x85, 0x45, 0x17, 0xa0, 0xa7, 0x19, 0x0b, 0xb1, 0x43, 0x52, 0x00, 0x66, 0xe2, 0x2b, 0xc3, 0x50, - 0x8a, 0x56, 0x48, 0x02, 0x31, 0x63, 0x14, 0xc5, 0xcd, 0x90, 0x04, 0x98, 0x61, 0x62, 0x49, 0x80, - 0xca, 0x08, 0xe2, 0x44, 0x48, 0x48, 0x02, 0x14, 0x83, 0x35, 0x2a, 0x54, 0x81, 0x52, 0x98, 0x18, - 0xd9, 0xae, 0x96, 0xe6, 0x30, 0x13, 0x15, 0xd4, 0x48, 0xc6, 0x4c, 0x8c, 0x13, 0xac, 0xaf, 0xa3, - 0xa8, 0xf0, 0xb5, 0x02, 0x20, 0xde, 0x85, 0xdf, 0x62, 0x1d, 0x77, 0x33, 0xdd, 0x71, 0xdd, 0x2f, - 0x89, 0xa3, 0xea, 0xbd, 0xff, 0x62, 0xc1, 0xd9, 0x39, 0xd7, 0xab, 0x93, 0x20, 0x67, 0x02, 0x3e, - 0x9c, 0xbb, 0xf3, 0xe1, 0x84, 0x14, 0x63, 0x8a, 0xf5, 0x1c, 0xc1, 0x14, 0xb3, 0xff, 0xc2, 0x02, - 0xc4, 0x3f, 0xfb, 0x5d, 0xf7, 0xb1, 0x37, 0xd3, 0x1f, 0x7b, 0x04, 0xd3, 0xc2, 0xfe, 0x3b, 0x16, - 0x0c, 0xce, 0x35, 0x1c, 0x77, 0x47, 0x7c, 0xea, 0x1c, 0x8c, 0x4b, 0x45, 0x11, 0x03, 0x6b, 0xb2, - 0x3f, 0xdd, 0xdc, 0xc6, 0x71, 0x12, 0x89, 0xd3, 0xf4, 0xe8, 0x13, 0x70, 0xc6, 0x00, 0xae, 0x91, - 0x9d, 0x66, 0xc3, 0x89, 0xf4, 0x5b, 0x01, 0x3b, 0xfd, 0x71, 0x1e, 0x11, 0xce, 0x2f, 0x6f, 0x2f, - 0xc3, 0xc8, 0x5c, 0xc3, 0x25, 0x5e, 0xb4, 0x54, 0x99, 0xf3, 0xbd, 0x0d, 0x77, 0x13, 0xbd, 0x02, - 0x23, 0x91, 0xbb, 0x43, 0xfc, 0x56, 0x54, 0x25, 0x35, 0xdf, 0x63, 0x77, 0x6d, 0xeb, 0x52, 0xef, - 0x2c, 0xba, 0xbf, 0x5f, 0x1e, 0x59, 0x33, 0x30, 0x38, 0x41, 0x69, 0xff, 0x21, 0x1d, 0x71, 0x7f, - 0xa7, 0xe9, 0x7b, 0xc4, 0x8b, 0xe6, 0x7c, 0xaf, 0xce, 0x75, 0x32, 0xaf, 0x40, 0x4f, 0x44, 0x47, - 0x90, 0x7f, 0xf9, 0x45, 0xb9, 0xb4, 0xe9, 0xb8, 0x1d, 0xec, 0x97, 0x4f, 0xa5, 0x4b, 0xb0, 0x91, - 0x65, 0x65, 0xd0, 0x87, 0xa0, 0x2f, 0x8c, 0x9c, 0xa8, 0x15, 0x8a, 0x4f, 0x7d, 0x54, 0x8e, 0x7f, - 0x95, 0x41, 0x0f, 0xf6, 0xcb, 0xa3, 0xaa, 0x18, 0x07, 0x61, 0x51, 0x00, 0x3d, 0x05, 0xfd, 0x3b, - 0x24, 0x0c, 0x9d, 0x4d, 0x79, 0x7e, 0x8f, 0x8a, 0xb2, 0xfd, 0x2b, 0x1c, 0x8c, 0x25, 0x1e, 0x3d, - 0x06, 0xbd, 0x24, 0x08, 0xfc, 0x40, 0xec, 0x2a, 0xc3, 0x82, 0xb0, 0x77, 0x81, 0x02, 0x31, 0xc7, - 0xd9, 0xff, 0xd2, 0x82, 0x51, 0xd5, 0x56, 0x5e, 0xd7, 0x31, 0xdc, 0x9b, 0xde, 0x04, 0xa8, 0xc9, - 0x0f, 0x0c, 0xd9, 0x79, 0x37, 0xf8, 0xfc, 0xc5, 0x4c, 0xd1, 0x22, 0xd5, 0x8d, 0x31, 0x67, 0x05, - 0x0a, 0xb1, 0xc6, 0xcd, 0xfe, 0x35, 0x0b, 0x26, 0x12, 0x5f, 0xb4, 0xec, 0x86, 0x11, 0x7a, 0x2b, - 0xf5, 0x55, 0xd3, 0xdd, 0x7d, 0x15, 0x2d, 0xcd, 0xbe, 0x49, 0x2d, 0x3e, 0x09, 0xd1, 0xbe, 0xe8, - 0x1a, 0xf4, 0xba, 0x11, 0xd9, 0x91, 0x1f, 0xf3, 0x58, 0xdb, 0x8f, 0xe1, 0xad, 0x8a, 0x47, 0x64, - 0x89, 0x96, 0xc4, 0x9c, 0x81, 0xfd, 0x9b, 0x45, 0x28, 0xf1, 0x69, 0xbb, 0xe2, 0x34, 0x8f, 0x61, - 0x2c, 0x9e, 0x81, 0x92, 0xbb, 0xb3, 0xd3, 0x8a, 0x9c, 0x75, 0x71, 0x00, 0x0d, 0xf0, 0xcd, 0x60, - 0x49, 0x02, 0x71, 0x8c, 0x47, 0x4b, 0xd0, 0xc3, 0x9a, 0xc2, 0xbf, 0xf2, 0xc9, 0xec, 0xaf, 0x14, - 0x6d, 0x9f, 0x9e, 0x77, 0x22, 0x87, 0xcb, 0x7e, 0xea, 0xe4, 0xa3, 0x20, 0xcc, 0x58, 0x20, 0x07, - 0x60, 0xdd, 0xf5, 0x9c, 0x60, 0x8f, 0xc2, 0x26, 0x8b, 0x8c, 0xe1, 0x73, 0xed, 0x19, 0xce, 0x2a, - 0x7a, 0xce, 0x56, 0x7d, 0x58, 0x8c, 0xc0, 0x1a, 0xd3, 0xa9, 0x0f, 0x42, 0x49, 0x11, 0x1f, 0x46, - 0x84, 0x9b, 0xfa, 0x08, 0x8c, 0x26, 0xea, 0xea, 0x54, 0x7c, 0x48, 0x97, 0x00, 0x7f, 0x85, 0x6d, - 0x19, 0xa2, 0xd5, 0x0b, 0xde, 0xae, 0xd8, 0x39, 0xef, 0xc1, 0x89, 0x46, 0xc6, 0xde, 0x2b, 0xc6, - 0xb5, 0xfb, 0xbd, 0xfa, 0xac, 0xf8, 0xec, 0x13, 0x59, 0x58, 0x9c, 0x59, 0x07, 0x95, 0x6a, 0xfc, - 0x26, 0x5d, 0x20, 0x4e, 0x43, 0xbf, 0x20, 0xdc, 0x10, 0x30, 0xac, 0xb0, 0x74, 0xbf, 0x3b, 0xa1, - 0x1a, 0x7f, 0x9d, 0xec, 0x55, 0x49, 0x83, 0xd4, 0x22, 0x3f, 0xf8, 0xa6, 0x36, 0xff, 0x1c, 0xef, - 0x7d, 0xbe, 0x5d, 0x0e, 0x0a, 0x06, 0xc5, 0xeb, 0x64, 0x8f, 0x0f, 0x85, 0xfe, 0x75, 0xc5, 0xb6, - 0x5f, 0xf7, 0x15, 0x0b, 0x86, 0xd5, 0xd7, 0x1d, 0xc3, 0xbe, 0x30, 0x6b, 0xee, 0x0b, 0xe7, 0xda, - 0x4e, 0xf0, 0x9c, 0x1d, 0xe1, 0x6b, 0x05, 0x38, 0xa3, 0x68, 0xe8, 0x6d, 0x86, 0xff, 0x11, 0xb3, - 0xea, 0x32, 0x94, 0x3c, 0xa5, 0xd7, 0xb3, 0x4c, 0x85, 0x5a, 0xac, 0xd5, 0x8b, 0x69, 0xa8, 0x50, - 0xea, 0xc5, 0xc7, 0xec, 0x90, 0xae, 0xf0, 0x16, 0xca, 0xed, 0x59, 0x28, 0xb6, 0xdc, 0xba, 0x38, - 0x60, 0xde, 0x2f, 0x7b, 0xfb, 0xe6, 0xd2, 0xfc, 0xc1, 0x7e, 0xf9, 0xd1, 0x3c, 0x63, 0x0b, 0x3d, - 0xd9, 0xc2, 0xe9, 0x9b, 0x4b, 0xf3, 0x98, 0x16, 0x46, 0x33, 0x30, 0x2a, 0x4f, 0xe8, 0x5b, 0x54, - 0x40, 0xf4, 0x3d, 0x71, 0x0e, 0x29, 0xad, 0x35, 0x36, 0xd1, 0x38, 0x49, 0x8f, 0xe6, 0x61, 0x6c, - 0xbb, 0xb5, 0x4e, 0x1a, 0x24, 0xe2, 0x1f, 0x7c, 0x9d, 0x70, 0x9d, 0x6e, 0x29, 0xbe, 0x4b, 0x5e, - 0x4f, 0xe0, 0x71, 0xaa, 0x84, 0xfd, 0xd7, 0xec, 0x3c, 0x10, 0xbd, 0x57, 0x09, 0x7c, 0x3a, 0xb1, - 0x28, 0xf7, 0x6f, 0xe6, 0x74, 0xee, 0x66, 0x56, 0x5c, 0x27, 0x7b, 0x6b, 0x3e, 0xbd, 0x4b, 0x64, - 0xcf, 0x0a, 0x63, 0xce, 0xf7, 0xb4, 0x9d, 0xf3, 0xbf, 0x50, 0x80, 0x93, 0xaa, 0x07, 0x0c, 0xb1, - 0xf5, 0x5b, 0xbd, 0x0f, 0xae, 0xc0, 0x60, 0x9d, 0x6c, 0x38, 0xad, 0x46, 0xa4, 0x0c, 0x0c, 0xbd, - 0xdc, 0xc8, 0x34, 0x1f, 0x83, 0xb1, 0x4e, 0x73, 0x88, 0x6e, 0xfb, 0xf9, 0x61, 0x76, 0x10, 0x47, - 0x0e, 0x9d, 0xe3, 0x6a, 0xd5, 0x58, 0xb9, 0xab, 0xe6, 0x31, 0xe8, 0x75, 0x77, 0xa8, 0x60, 0x56, - 0x30, 0xe5, 0xad, 0x25, 0x0a, 0xc4, 0x1c, 0x87, 0x9e, 0x80, 0xfe, 0x9a, 0xbf, 0xb3, 0xe3, 0x78, - 0x75, 0x76, 0xe4, 0x95, 0x66, 0x07, 0xa9, 0xec, 0x36, 0xc7, 0x41, 0x58, 0xe2, 0xd0, 0x59, 0xe8, - 0x71, 0x82, 0x4d, 0xae, 0x75, 0x29, 0xcd, 0x0e, 0xd0, 0x9a, 0x66, 0x82, 0xcd, 0x10, 0x33, 0x28, - 0xbd, 0x34, 0xde, 0xf1, 0x83, 0x6d, 0xd7, 0xdb, 0x9c, 0x77, 0x03, 0xb1, 0x24, 0xd4, 0x59, 0x78, - 0x5b, 0x61, 0xb0, 0x46, 0x85, 0x16, 0xa1, 0xb7, 0xe9, 0x07, 0x51, 0x38, 0xd9, 0xc7, 0xba, 0xfb, - 0xd1, 0x9c, 0x8d, 0x88, 0x7f, 0x6d, 0xc5, 0x0f, 0xa2, 0xf8, 0x03, 0xe8, 0xbf, 0x10, 0xf3, 0xe2, - 0x68, 0x19, 0xfa, 0x89, 0xb7, 0xbb, 0x18, 0xf8, 0x3b, 0x93, 0x13, 0xf9, 0x9c, 0x16, 0x38, 0x09, - 0x9f, 0x66, 0xb1, 0x8c, 0x2a, 0xc0, 0x58, 0xb2, 0x40, 0x1f, 0x82, 0x22, 0xf1, 0x76, 0x27, 0xfb, - 0x19, 0xa7, 0xa9, 0x1c, 0x4e, 0xb7, 0x9c, 0x20, 0xde, 0xf3, 0x17, 0xbc, 0x5d, 0x4c, 0xcb, 0xa0, - 0x8f, 0x43, 0x49, 0x6e, 0x18, 0xa1, 0x50, 0x67, 0x66, 0x4e, 0x58, 0xb9, 0xcd, 0x60, 0xf2, 0x76, - 0xcb, 0x0d, 0xc8, 0x0e, 0xf1, 0xa2, 0x30, 0xde, 0x21, 0x25, 0x36, 0xc4, 0x31, 0x37, 0x54, 0x83, - 0xa1, 0x80, 0x84, 0xee, 0x3d, 0x52, 0xf1, 0x1b, 0x6e, 0x6d, 0x6f, 0xf2, 0x34, 0x6b, 0xde, 0x53, - 0x6d, 0xbb, 0x0c, 0x6b, 0x05, 0x62, 0x75, 0xbb, 0x0e, 0xc5, 0x06, 0x53, 0xf4, 0x06, 0x0c, 0x07, - 0x24, 0x8c, 0x9c, 0x20, 0x12, 0xb5, 0x4c, 0x2a, 0xf3, 0xd8, 0x30, 0xd6, 0x11, 0xfc, 0x3a, 0x11, - 0x57, 0x13, 0x63, 0xb0, 0xc9, 0x01, 0x7d, 0x5c, 0xea, 0xfe, 0x57, 0xfc, 0x96, 0x17, 0x85, 0x93, - 0x25, 0xd6, 0xee, 0x4c, 0xab, 0xec, 0xad, 0x98, 0x2e, 0x69, 0x1c, 0xe0, 0x85, 0xb1, 0xc1, 0x0a, - 0x7d, 0x12, 0x86, 0xf9, 0x7f, 0x6e, 0xdb, 0x0c, 0x27, 0x4f, 0x32, 0xde, 0x17, 0xf2, 0x79, 0x73, - 0xc2, 0xd9, 0x93, 0x82, 0xf9, 0xb0, 0x0e, 0x0d, 0xb1, 0xc9, 0x0d, 0x61, 0x18, 0x6e, 0xb8, 0xbb, - 0xc4, 0x23, 0x61, 0x58, 0x09, 0xfc, 0x75, 0x22, 0x54, 0xb5, 0x67, 0xb2, 0x6d, 0xa1, 0xfe, 0x3a, - 0x99, 0x1d, 0xa7, 0x3c, 0x97, 0xf5, 0x32, 0xd8, 0x64, 0x81, 0x6e, 0xc2, 0x08, 0xbd, 0x1b, 0xbb, - 0x31, 0xd3, 0xc1, 0x4e, 0x4c, 0xd9, 0x7d, 0x10, 0x1b, 0x85, 0x70, 0x82, 0x09, 0xba, 0x01, 0x43, - 0xac, 0xcf, 0x5b, 0x4d, 0xce, 0xf4, 0x54, 0x27, 0xa6, 0xcc, 0x94, 0x5e, 0xd5, 0x8a, 0x60, 0x83, - 0x01, 0x7a, 0x1d, 0x4a, 0x0d, 0x77, 0x83, 0xd4, 0xf6, 0x6a, 0x0d, 0x32, 0x39, 0xc4, 0xb8, 0x65, - 0x6e, 0x86, 0xcb, 0x92, 0x88, 0xcb, 0xe7, 0xea, 0x2f, 0x8e, 0x8b, 0xa3, 0x5b, 0x70, 0x2a, 0x22, - 0xc1, 0x8e, 0xeb, 0x39, 0x74, 0x13, 0x13, 0x57, 0x42, 0x66, 0xa2, 0x1e, 0x66, 0xb3, 0xeb, 0xbc, - 0x18, 0x8d, 0x53, 0x6b, 0x99, 0x54, 0x38, 0xa7, 0x34, 0xba, 0x0b, 0x93, 0x19, 0x18, 0x3e, 0x6f, - 0x4f, 0x30, 0xce, 0x1f, 0x16, 0x9c, 0x27, 0xd7, 0x72, 0xe8, 0x0e, 0xda, 0xe0, 0x70, 0x2e, 0x77, - 0x74, 0x03, 0x46, 0xd9, 0xce, 0x59, 0x69, 0x35, 0x1a, 0xa2, 0xc2, 0x11, 0x56, 0xe1, 0x13, 0x52, - 0x8e, 0x58, 0x32, 0xd1, 0x07, 0xfb, 0x65, 0x88, 0xff, 0xe1, 0x64, 0x69, 0xb4, 0xce, 0xac, 0xa1, - 0xad, 0xc0, 0x8d, 0xf6, 0xe8, 0xaa, 0x22, 0x77, 0xa3, 0xc9, 0xd1, 0xb6, 0x9a, 0x21, 0x9d, 0x54, - 0x99, 0x4c, 0x75, 0x20, 0x4e, 0x32, 0xa4, 0x47, 0x41, 0x18, 0xd5, 0x5d, 0x6f, 0x72, 0x8c, 0xdf, - 0xa7, 0xe4, 0x4e, 0x5a, 0xa5, 0x40, 0xcc, 0x71, 0xcc, 0x12, 0x4a, 0x7f, 0xdc, 0xa0, 0x27, 0xee, - 0x38, 0x23, 0x8c, 0x2d, 0xa1, 0x12, 0x81, 0x63, 0x1a, 0x2a, 0x04, 0x47, 0xd1, 0xde, 0x24, 0x62, - 0xa4, 0x6a, 0x43, 0x5c, 0x5b, 0xfb, 0x38, 0xa6, 0x70, 0x7b, 0x1d, 0x46, 0xd4, 0x36, 0xc1, 0xfa, - 0x04, 0x95, 0xa1, 0x97, 0x89, 0x7d, 0x42, 0x8f, 0x59, 0xa2, 0x4d, 0x60, 0x22, 0x21, 0xe6, 0x70, - 0xd6, 0x04, 0xf7, 0x1e, 0x99, 0xdd, 0x8b, 0x08, 0xd7, 0x45, 0x14, 0xb5, 0x26, 0x48, 0x04, 0x8e, - 0x69, 0xec, 0xff, 0xc9, 0xc5, 0xe7, 0xf8, 0x94, 0xe8, 0xe2, 0x5c, 0x7c, 0x16, 0x06, 0xb6, 0xfc, - 0x30, 0xa2, 0xd4, 0xac, 0x8e, 0xde, 0x58, 0x60, 0xbe, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x57, 0x61, - 0xb8, 0xa6, 0x57, 0x20, 0x0e, 0x75, 0xb5, 0x8d, 0x18, 0xb5, 0x63, 0x93, 0x16, 0xbd, 0x0c, 0x03, - 0xcc, 0xbb, 0xa7, 0xe6, 0x37, 0x84, 0xb4, 0x29, 0x25, 0x93, 0x81, 0x8a, 0x80, 0x1f, 0x68, 0xbf, - 0xb1, 0xa2, 0x46, 0x17, 0xa1, 0x8f, 0x36, 0x61, 0xa9, 0x22, 0x8e, 0x53, 0xa5, 0x92, 0xbb, 0xc6, - 0xa0, 0x58, 0x60, 0xed, 0x5f, 0xb3, 0x98, 0x2c, 0x95, 0xde, 0xf3, 0xd1, 0x35, 0x76, 0x68, 0xb0, - 0x13, 0x44, 0x53, 0x89, 0x3d, 0xae, 0x9d, 0x04, 0x0a, 0x77, 0x90, 0xf8, 0x8f, 0x8d, 0x92, 0xe8, - 0xcd, 0xe4, 0xc9, 0xc0, 0x05, 0x8a, 0x17, 0x65, 0x17, 0x24, 0x4f, 0x87, 0x47, 0xe2, 0x23, 0x8e, - 0xb6, 0xa7, 0xdd, 0x11, 0x61, 0xff, 0x5f, 0x05, 0x6d, 0x96, 0x54, 0x23, 0x27, 0x22, 0xa8, 0x02, - 0xfd, 0x77, 0x1c, 0x37, 0x72, 0xbd, 0x4d, 0x21, 0xf7, 0xb5, 0x3f, 0xe8, 0x58, 0xa1, 0xdb, 0xbc, - 0x00, 0x97, 0x5e, 0xc4, 0x1f, 0x2c, 0xd9, 0x50, 0x8e, 0x41, 0xcb, 0xf3, 0x28, 0xc7, 0x42, 0xb7, - 0x1c, 0x31, 0x2f, 0xc0, 0x39, 0x8a, 0x3f, 0x58, 0xb2, 0x41, 0x6f, 0x01, 0xc8, 0x1d, 0x82, 0xd4, - 0x85, 0x57, 0xd0, 0xb3, 0x9d, 0x99, 0xae, 0xa9, 0x32, 0xb3, 0x23, 0x54, 0x36, 0x8a, 0xff, 0x63, - 0x8d, 0x9f, 0x1d, 0x69, 0x63, 0xaa, 0x37, 0x06, 0x7d, 0x82, 0x2e, 0x51, 0x27, 0x88, 0x48, 0x7d, - 0x26, 0x12, 0x9d, 0xf3, 0x74, 0x77, 0x97, 0xc3, 0x35, 0x77, 0x87, 0xe8, 0xcb, 0x59, 0x30, 0xc1, - 0x31, 0x3f, 0xfb, 0x97, 0x8a, 0x30, 0x99, 0xd7, 0x5c, 0xba, 0x68, 0xc8, 0x5d, 0x37, 0x9a, 0xa3, - 0x62, 0xad, 0x65, 0x2e, 0x9a, 0x05, 0x01, 0xc7, 0x8a, 0x82, 0xce, 0xde, 0xd0, 0xdd, 0x94, 0x77, - 0xfb, 0xde, 0x78, 0xf6, 0x56, 0x19, 0x14, 0x0b, 0x2c, 0xa5, 0x0b, 0x88, 0x13, 0x0a, 0xb7, 0x33, - 0x6d, 0x96, 0x63, 0x06, 0xc5, 0x02, 0xab, 0x6b, 0x19, 0x7b, 0x3a, 0x68, 0x19, 0x8d, 0x2e, 0xea, - 0x3d, 0xda, 0x2e, 0x42, 0x9f, 0x02, 0xd8, 0x70, 0x3d, 0x37, 0xdc, 0x62, 0xdc, 0xfb, 0x0e, 0xcd, - 0x5d, 0x09, 0xc5, 0x8b, 0x8a, 0x0b, 0xd6, 0x38, 0xa2, 0x97, 0x60, 0x50, 0x6d, 0x20, 0x4b, 0xf3, - 0xcc, 0x06, 0xaf, 0xf9, 0x34, 0xc5, 0xbb, 0xe9, 0x3c, 0xd6, 0xe9, 0xec, 0xcf, 0x24, 0xe7, 0x8b, - 0x58, 0x01, 0x5a, 0xff, 0x5a, 0xdd, 0xf6, 0x6f, 0xa1, 0x7d, 0xff, 0xda, 0xdf, 0xe8, 0x83, 0x51, - 0xa3, 0xb2, 0x56, 0xd8, 0xc5, 0x9e, 0x7b, 0x95, 0x1e, 0x40, 0x4e, 0x44, 0xc4, 0xfa, 0xb3, 0x3b, - 0x2f, 0x15, 0xfd, 0x90, 0xa2, 0x2b, 0x80, 0x97, 0x47, 0x9f, 0x82, 0x52, 0xc3, 0x09, 0x99, 0xc6, - 0x92, 0x88, 0x75, 0xd7, 0x0d, 0xb3, 0xf8, 0x42, 0xe8, 0x84, 0x91, 0x76, 0xea, 0x73, 0xde, 0x31, - 0x4b, 0x7a, 0x52, 0x52, 0xf9, 0x4a, 0xfa, 0x35, 0xaa, 0x46, 0x50, 0x21, 0x6c, 0x0f, 0x73, 0x1c, - 0x7a, 0x99, 0x6d, 0xad, 0x74, 0x56, 0xcc, 0x51, 0x69, 0x94, 0x4d, 0xb3, 0x5e, 0x43, 0xc8, 0x56, - 0x38, 0x6c, 0x50, 0xc6, 0x77, 0xb2, 0xbe, 0x36, 0x77, 0xb2, 0xa7, 0xa0, 0x9f, 0xfd, 0x50, 0x33, - 0x40, 0x8d, 0xc6, 0x12, 0x07, 0x63, 0x89, 0x4f, 0x4e, 0x98, 0x81, 0xee, 0x26, 0x0c, 0xbd, 0xf5, - 0x89, 0x49, 0xcd, 0xfc, 0x1f, 0x06, 0xf8, 0x2e, 0x27, 0xa6, 0x3c, 0x96, 0x38, 0xf4, 0x33, 0x16, - 0x20, 0xa7, 0x41, 0x6f, 0xcb, 0x14, 0xac, 0x2e, 0x37, 0xc0, 0x44, 0xed, 0x57, 0x3b, 0x76, 0x7b, - 0x2b, 0x9c, 0x9e, 0x49, 0x95, 0xe6, 0x9a, 0xd2, 0x57, 0x44, 0x13, 0x51, 0x9a, 0x40, 0x3f, 0x8c, - 0x96, 0xdd, 0x30, 0xfa, 0xfc, 0x1f, 0x25, 0x0e, 0xa7, 0x8c, 0x26, 0xa1, 0x9b, 0xfa, 0xe5, 0x6b, - 0xf0, 0x90, 0x97, 0xaf, 0xe1, 0xbc, 0x8b, 0xd7, 0x54, 0x0b, 0x4e, 0xe7, 0x7c, 0x41, 0x86, 0xfe, - 0x75, 0x5e, 0xd7, 0xbf, 0x76, 0xd0, 0xda, 0x4d, 0xcb, 0x3a, 0xa6, 0xdf, 0x68, 0x39, 0x5e, 0xe4, - 0x46, 0x7b, 0xba, 0xbe, 0xf6, 0x69, 0x18, 0x99, 0x77, 0xc8, 0x8e, 0xef, 0x2d, 0x78, 0xf5, 0xa6, - 0xef, 0x7a, 0x11, 0x9a, 0x84, 0x1e, 0x26, 0x7c, 0xf0, 0xad, 0xb7, 0x87, 0xf6, 0x1e, 0x66, 0x10, - 0x7b, 0x13, 0x4e, 0xce, 0xfb, 0x77, 0xbc, 0x3b, 0x4e, 0x50, 0x9f, 0xa9, 0x2c, 0x69, 0xfa, 0xa4, - 0x55, 0xa9, 0xcf, 0xb0, 0xf2, 0x6f, 0x8b, 0x5a, 0x49, 0x7e, 0x1d, 0x5a, 0x74, 0x1b, 0x24, 0x47, - 0xeb, 0xf7, 0xff, 0x16, 0x8c, 0x9a, 0x62, 0x7a, 0x65, 0x77, 0xb6, 0x72, 0xed, 0xce, 0x6f, 0xc0, - 0xc0, 0x86, 0x4b, 0x1a, 0x75, 0x4c, 0x36, 0x44, 0xef, 0x3c, 0x99, 0xef, 0x99, 0xb6, 0x48, 0x29, - 0xa5, 0x96, 0x97, 0x6b, 0x43, 0x16, 0x45, 0x61, 0xac, 0xd8, 0xa0, 0x6d, 0x18, 0x93, 0x7d, 0x28, - 0xb1, 0x62, 0x3f, 0x78, 0xaa, 0xdd, 0xc0, 0x9b, 0xcc, 0x4f, 0xdc, 0xdf, 0x2f, 0x8f, 0xe1, 0x04, - 0x1b, 0x9c, 0x62, 0x8c, 0xce, 0x42, 0xcf, 0x0e, 0x3d, 0xf9, 0x7a, 0x58, 0xf7, 0x33, 0xf5, 0x07, - 0xd3, 0xe4, 0x30, 0xa8, 0xfd, 0x63, 0x16, 0x9c, 0x4e, 0xf5, 0x8c, 0xd0, 0x68, 0x1d, 0xf1, 0x28, - 0x24, 0x35, 0x4c, 0x85, 0xce, 0x1a, 0x26, 0xfb, 0x6f, 0x59, 0x70, 0x62, 0x61, 0xa7, 0x19, 0xed, - 0xcd, 0xbb, 0xa6, 0x91, 0xf8, 0x83, 0xd0, 0xb7, 0x43, 0xea, 0x6e, 0x6b, 0x47, 0x8c, 0x5c, 0x59, - 0x9e, 0x0e, 0x2b, 0x0c, 0x7a, 0xb0, 0x5f, 0x1e, 0xae, 0x46, 0x7e, 0xe0, 0x6c, 0x12, 0x0e, 0xc0, - 0x82, 0x9c, 0x9d, 0xb1, 0xee, 0x3d, 0xb2, 0xec, 0xee, 0xb8, 0xd1, 0x83, 0xcd, 0x76, 0x61, 0xdf, - 0x95, 0x4c, 0x70, 0xcc, 0xcf, 0xfe, 0xba, 0x05, 0xa3, 0x72, 0xde, 0xcf, 0xd4, 0xeb, 0x01, 0x09, - 0x43, 0x34, 0x05, 0x05, 0xb7, 0x29, 0x5a, 0x09, 0xa2, 0x95, 0x85, 0xa5, 0x0a, 0x2e, 0xb8, 0x4d, - 0x29, 0xce, 0xb3, 0x03, 0xa8, 0x68, 0x9a, 0xba, 0xaf, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x12, 0x0c, - 0x78, 0x7e, 0x9d, 0x4b, 0xc4, 0x5c, 0x94, 0x60, 0x13, 0x6c, 0x55, 0xc0, 0xb0, 0xc2, 0xa2, 0x0a, - 0x94, 0xb8, 0x23, 0x64, 0x3c, 0x69, 0xbb, 0x72, 0xa7, 0x64, 0x5f, 0xb6, 0x26, 0x4b, 0xe2, 0x98, - 0x89, 0xfd, 0x1b, 0x16, 0x0c, 0xc9, 0x2f, 0xeb, 0xf2, 0xae, 0x42, 0x97, 0x56, 0x7c, 0x4f, 0x89, - 0x97, 0x16, 0xbd, 0x6b, 0x30, 0x8c, 0x71, 0xc5, 0x28, 0x1e, 0xea, 0x8a, 0x71, 0x05, 0x06, 0x9d, - 0x66, 0xb3, 0x62, 0xde, 0x4f, 0xd8, 0x54, 0x9a, 0x89, 0xc1, 0x58, 0xa7, 0xb1, 0x7f, 0xb4, 0x00, - 0x23, 0xf2, 0x0b, 0xaa, 0xad, 0xf5, 0x90, 0x44, 0x68, 0x0d, 0x4a, 0x0e, 0x1f, 0x25, 0x22, 0x27, - 0xf9, 0x63, 0xd9, 0x7a, 0x33, 0x63, 0x48, 0x63, 0x41, 0x6b, 0x46, 0x96, 0xc6, 0x31, 0x23, 0xd4, - 0x80, 0x71, 0xcf, 0x8f, 0xd8, 0xa1, 0xab, 0xf0, 0xed, 0x4c, 0x99, 0x49, 0xee, 0x67, 0x04, 0xf7, - 0xf1, 0xd5, 0x24, 0x17, 0x9c, 0x66, 0x8c, 0x16, 0xa4, 0x2e, 0xb2, 0x98, 0xaf, 0x44, 0xd2, 0x07, - 0x2e, 0x5b, 0x15, 0x69, 0xff, 0xaa, 0x05, 0x25, 0x49, 0x76, 0x1c, 0x56, 0xeb, 0x15, 0xe8, 0x0f, - 0xd9, 0x20, 0xc8, 0xae, 0xb1, 0xdb, 0x35, 0x9c, 0x8f, 0x57, 0x2c, 0x4b, 0xf0, 0xff, 0x21, 0x96, - 0x3c, 0x98, 0x29, 0x4a, 0x35, 0xff, 0x5d, 0x62, 0x8a, 0x52, 0xed, 0xc9, 0x39, 0x94, 0xfe, 0x94, - 0xb5, 0x59, 0xd3, 0xed, 0x52, 0x91, 0xb7, 0x19, 0x90, 0x0d, 0xf7, 0x6e, 0x52, 0xe4, 0xad, 0x30, - 0x28, 0x16, 0x58, 0xf4, 0x16, 0x0c, 0xd5, 0xa4, 0x0d, 0x22, 0x5e, 0xe1, 0x17, 0xdb, 0xda, 0xc3, - 0x94, 0xe9, 0x94, 0xeb, 0xd0, 0xe6, 0xb4, 0xf2, 0xd8, 0xe0, 0x66, 0x3a, 0xfa, 0x14, 0x3b, 0x39, - 0xfa, 0xc4, 0x7c, 0xf3, 0xdd, 0x5e, 0x7e, 0xdc, 0x82, 0x3e, 0xae, 0x7b, 0xee, 0x4e, 0xf5, 0xaf, - 0x59, 0x92, 0xe3, 0xbe, 0xbb, 0x45, 0x81, 0x42, 0xd2, 0x40, 0x2b, 0x50, 0x62, 0x3f, 0x98, 0xee, - 0xbc, 0x98, 0xff, 0x0e, 0x87, 0xd7, 0xaa, 0x37, 0xf0, 0x96, 0x2c, 0x86, 0x63, 0x0e, 0xf6, 0x8f, - 0x14, 0xe9, 0xee, 0x16, 0x93, 0x1a, 0x87, 0xbe, 0xf5, 0xf0, 0x0e, 0xfd, 0xc2, 0xc3, 0x3a, 0xf4, - 0x37, 0x61, 0xb4, 0xa6, 0xd9, 0x9d, 0xe3, 0x91, 0xbc, 0xd4, 0x76, 0x92, 0x68, 0x26, 0x6a, 0xae, - 0x9d, 0x9b, 0x33, 0x99, 0xe0, 0x24, 0x57, 0xf4, 0x09, 0x18, 0xe2, 0xe3, 0x2c, 0x6a, 0xe1, 0xbe, - 0x52, 0x4f, 0xe4, 0xcf, 0x17, 0xbd, 0x0a, 0xae, 0xcd, 0xd5, 0x8a, 0x63, 0x83, 0x99, 0xfd, 0x97, - 0x16, 0xa0, 0x85, 0xe6, 0x16, 0xd9, 0x21, 0x81, 0xd3, 0x88, 0xcd, 0x47, 0x3f, 0x68, 0xc1, 0x24, - 0x49, 0x81, 0xe7, 0xfc, 0x9d, 0x1d, 0x71, 0x59, 0xcc, 0xd1, 0x67, 0x2c, 0xe4, 0x94, 0x51, 0x0f, - 0x95, 0x26, 0xf3, 0x28, 0x70, 0x6e, 0x7d, 0x68, 0x05, 0x26, 0xf8, 0x29, 0xa9, 0x10, 0x9a, 0xdf, - 0xd5, 0x23, 0x82, 0xf1, 0xc4, 0x5a, 0x9a, 0x04, 0x67, 0x95, 0xb3, 0x7f, 0x75, 0x18, 0x72, 0x5b, - 0xf1, 0x9e, 0xdd, 0xec, 0x3d, 0xbb, 0xd9, 0x7b, 0x76, 0xb3, 0xf7, 0xec, 0x66, 0xef, 0xd9, 0xcd, - 0xde, 0xb3, 0x9b, 0xbd, 0x4b, 0xed, 0x66, 0xff, 0xb7, 0x05, 0x27, 0xd5, 0xf1, 0x65, 0x5c, 0xd8, - 0x3f, 0x0b, 0x13, 0x7c, 0xb9, 0x19, 0x3e, 0xc6, 0xe2, 0xb8, 0xbe, 0x92, 0x39, 0x73, 0x13, 0xbe, - 0xf0, 0x46, 0x41, 0xfe, 0xa8, 0x28, 0x03, 0x81, 0xb3, 0xaa, 0xb1, 0x7f, 0x69, 0x00, 0x7a, 0x17, - 0x76, 0x89, 0x17, 0x1d, 0xc3, 0xd5, 0xa6, 0x06, 0x23, 0xae, 0xb7, 0xeb, 0x37, 0x76, 0x49, 0x9d, - 0xe3, 0x0f, 0x73, 0x03, 0x3f, 0x25, 0x58, 0x8f, 0x2c, 0x19, 0x2c, 0x70, 0x82, 0xe5, 0xc3, 0xb0, - 0x3e, 0x5c, 0x85, 0x3e, 0x7e, 0xf8, 0x08, 0xd3, 0x43, 0xe6, 0x9e, 0xcd, 0x3a, 0x51, 0x1c, 0xa9, - 0xb1, 0x65, 0x84, 0x1f, 0x6e, 0xa2, 0x38, 0xfa, 0x0c, 0x8c, 0x6c, 0xb8, 0x41, 0x18, 0xad, 0xb9, - 0x3b, 0xf4, 0x68, 0xd8, 0x69, 0x3e, 0x80, 0xb5, 0x41, 0xf5, 0xc3, 0xa2, 0xc1, 0x09, 0x27, 0x38, - 0xa3, 0x4d, 0x18, 0x6e, 0x38, 0x7a, 0x55, 0xfd, 0x87, 0xae, 0x4a, 0x9d, 0x0e, 0xcb, 0x3a, 0x23, - 0x6c, 0xf2, 0xa5, 0xcb, 0xa9, 0xc6, 0x14, 0xe6, 0x03, 0x4c, 0x9d, 0xa1, 0x96, 0x13, 0xd7, 0x94, - 0x73, 0x1c, 0x15, 0xd0, 0x98, 0x23, 0x7b, 0xc9, 0x14, 0xd0, 0x34, 0x77, 0xf5, 0x4f, 0x43, 0x89, - 0xd0, 0x2e, 0xa4, 0x8c, 0xc5, 0x01, 0x73, 0xb9, 0xbb, 0xb6, 0xae, 0xb8, 0xb5, 0xc0, 0x37, 0xed, - 0x3c, 0x0b, 0x92, 0x13, 0x8e, 0x99, 0xa2, 0x39, 0xe8, 0x0b, 0x49, 0xe0, 0x2a, 0x5d, 0x72, 0x9b, - 0x61, 0x64, 0x64, 0xfc, 0xd5, 0x1a, 0xff, 0x8d, 0x45, 0x51, 0x3a, 0xbd, 0x1c, 0xa6, 0x8a, 0x65, - 0x87, 0x81, 0x36, 0xbd, 0x66, 0x18, 0x14, 0x0b, 0x2c, 0x7a, 0x1d, 0xfa, 0x03, 0xd2, 0x60, 0x86, - 0xc4, 0xe1, 0xee, 0x27, 0x39, 0xb7, 0x4b, 0xf2, 0x72, 0x58, 0x32, 0x40, 0xd7, 0x01, 0x05, 0x84, - 0x0a, 0x78, 0xae, 0xb7, 0xa9, 0xdc, 0xbb, 0xc5, 0x46, 0xab, 0x04, 0x69, 0x1c, 0x53, 0xc8, 0x07, - 0x8b, 0x38, 0xa3, 0x18, 0xba, 0x0a, 0xe3, 0x0a, 0xba, 0xe4, 0x85, 0x91, 0x43, 0x37, 0xb8, 0x51, - 0xc6, 0x4b, 0xe9, 0x57, 0x70, 0x92, 0x00, 0xa7, 0xcb, 0xd8, 0x3f, 0x67, 0x01, 0xef, 0xe7, 0x63, - 0xd0, 0x2a, 0xbc, 0x66, 0x6a, 0x15, 0xce, 0xe4, 0x8e, 0x5c, 0x8e, 0x46, 0xe1, 0xe7, 0x2c, 0x18, - 0xd4, 0x46, 0x36, 0x9e, 0xb3, 0x56, 0x9b, 0x39, 0xdb, 0x82, 0x31, 0x3a, 0xd3, 0x6f, 0xac, 0x87, - 0x24, 0xd8, 0x25, 0x75, 0x36, 0x31, 0x0b, 0x0f, 0x36, 0x31, 0x95, 0x2b, 0xe9, 0x72, 0x82, 0x21, - 0x4e, 0x55, 0x61, 0x7f, 0x5a, 0x36, 0x55, 0x79, 0xde, 0xd6, 0xd4, 0x98, 0x27, 0x3c, 0x6f, 0xd5, - 0xa8, 0xe2, 0x98, 0x86, 0x2e, 0xb5, 0x2d, 0x3f, 0x8c, 0x92, 0x9e, 0xb7, 0xd7, 0xfc, 0x30, 0xc2, - 0x0c, 0x63, 0xbf, 0x00, 0xb0, 0x70, 0x97, 0xd4, 0xf8, 0x8c, 0xd5, 0x2f, 0x3d, 0x56, 0xfe, 0xa5, - 0xc7, 0xfe, 0x3d, 0x0b, 0x46, 0x16, 0xe7, 0x8c, 0x93, 0x6b, 0x1a, 0x80, 0xdf, 0xd4, 0x6e, 0xdf, - 0x5e, 0x95, 0xee, 0x1f, 0xdc, 0x02, 0xae, 0xa0, 0x58, 0xa3, 0x40, 0x67, 0xa0, 0xd8, 0x68, 0x79, - 0x42, 0xed, 0xd9, 0x4f, 0x8f, 0xc7, 0xe5, 0x96, 0x87, 0x29, 0x4c, 0x7b, 0xac, 0x54, 0xec, 0xfa, - 0xb1, 0x52, 0xc7, 0x20, 0x25, 0xa8, 0x0c, 0xbd, 0x77, 0xee, 0xb8, 0x75, 0xfe, 0x14, 0x5c, 0xb8, - 0xa6, 0xdc, 0xbe, 0xbd, 0x34, 0x1f, 0x62, 0x0e, 0xb7, 0xbf, 0x58, 0x84, 0xa9, 0xc5, 0x06, 0xb9, - 0xfb, 0x0e, 0x9f, 0xc3, 0x77, 0xfb, 0xd4, 0xea, 0x70, 0x0a, 0xa4, 0xc3, 0x3e, 0xa7, 0xeb, 0xdc, - 0x1f, 0x1b, 0xd0, 0xcf, 0x1d, 0x4f, 0xe5, 0xe3, 0xf8, 0x4c, 0x73, 0x5f, 0x7e, 0x87, 0x4c, 0x73, - 0x07, 0x56, 0x61, 0xee, 0x53, 0x07, 0xa6, 0x80, 0x62, 0xc9, 0x7c, 0xea, 0x15, 0x18, 0xd2, 0x29, - 0x0f, 0xf5, 0xb0, 0xf5, 0xbb, 0x8b, 0x30, 0x46, 0x5b, 0xf0, 0x50, 0x07, 0xe2, 0x66, 0x7a, 0x20, - 0x8e, 0xfa, 0x71, 0x63, 0xe7, 0xd1, 0x78, 0x2b, 0x39, 0x1a, 0x57, 0xf2, 0x46, 0xe3, 0xb8, 0xc7, - 0xe0, 0x7b, 0x2c, 0x98, 0x58, 0x6c, 0xf8, 0xb5, 0xed, 0xc4, 0x03, 0xc4, 0x97, 0x60, 0x90, 0x6e, - 0xc7, 0xa1, 0x11, 0x8b, 0xc3, 0x88, 0xce, 0x22, 0x50, 0x58, 0xa7, 0xd3, 0x8a, 0xdd, 0xbc, 0xb9, - 0x34, 0x9f, 0x15, 0xd4, 0x45, 0xa0, 0xb0, 0x4e, 0x67, 0xff, 0x8e, 0x05, 0xe7, 0xae, 0xce, 0x2d, - 0xc4, 0x53, 0x31, 0x15, 0x57, 0xe6, 0x22, 0xf4, 0x35, 0xeb, 0x5a, 0x53, 0x62, 0xb5, 0xf0, 0x3c, - 0x6b, 0x85, 0xc0, 0xbe, 0x5b, 0x62, 0x26, 0xdd, 0x04, 0xb8, 0x8a, 0x2b, 0x73, 0x62, 0xdf, 0x95, - 0x56, 0x20, 0x2b, 0xd7, 0x0a, 0xf4, 0x04, 0xf4, 0xd3, 0x73, 0xc1, 0xad, 0xc9, 0x76, 0x73, 0x83, - 0x3e, 0x07, 0x61, 0x89, 0xb3, 0x7f, 0xd6, 0x82, 0x89, 0xab, 0x6e, 0x44, 0x0f, 0xed, 0x64, 0xe0, - 0x14, 0x7a, 0x6a, 0x87, 0x6e, 0xe4, 0x07, 0x7b, 0xc9, 0xc0, 0x29, 0x58, 0x61, 0xb0, 0x46, 0xc5, - 0x3f, 0x68, 0xd7, 0x65, 0x2f, 0x29, 0x0a, 0xa6, 0xdd, 0x0d, 0x0b, 0x38, 0x56, 0x14, 0xb4, 0xbf, - 0xea, 0x6e, 0xc0, 0x54, 0x96, 0x7b, 0x62, 0xe3, 0x56, 0xfd, 0x35, 0x2f, 0x11, 0x38, 0xa6, 0xb1, - 0xff, 0xdc, 0x82, 0xf2, 0xd5, 0x46, 0x2b, 0x8c, 0x48, 0xb0, 0x11, 0xe6, 0x6c, 0xba, 0x2f, 0x40, - 0x89, 0x48, 0x03, 0x81, 0x7c, 0xf2, 0x29, 0x05, 0x51, 0x65, 0x39, 0xe0, 0xf1, 0x5b, 0x14, 0x5d, - 0x17, 0xaf, 0xa4, 0x0f, 0xf7, 0xcc, 0x75, 0x11, 0x10, 0xd1, 0xeb, 0xd2, 0x03, 0xda, 0xb0, 0xc8, - 0x18, 0x0b, 0x29, 0x2c, 0xce, 0x28, 0x61, 0xff, 0x98, 0x05, 0x27, 0xd5, 0x07, 0xbf, 0xeb, 0x3e, - 0xd3, 0xfe, 0x6a, 0x01, 0x86, 0xaf, 0xad, 0xad, 0x55, 0xae, 0x92, 0x48, 0x9b, 0x95, 0xed, 0xcd, - 0xfe, 0x58, 0xb3, 0x5e, 0xb6, 0xbb, 0x23, 0xb6, 0x22, 0xb7, 0x31, 0xcd, 0xe3, 0xa2, 0x4d, 0x2f, - 0x79, 0xd1, 0x8d, 0xa0, 0x1a, 0x05, 0xae, 0xb7, 0x99, 0x39, 0xd3, 0xa5, 0xcc, 0x52, 0xcc, 0x93, - 0x59, 0xd0, 0x0b, 0xd0, 0xc7, 0x02, 0xb3, 0xc9, 0x41, 0x78, 0x44, 0x5d, 0xb1, 0x18, 0xf4, 0x60, - 0xbf, 0x5c, 0xba, 0x89, 0x97, 0xf8, 0x1f, 0x2c, 0x48, 0xd1, 0x4d, 0x18, 0xdc, 0x8a, 0xa2, 0xe6, - 0x35, 0xe2, 0xd4, 0x49, 0x20, 0x77, 0xd9, 0xf3, 0x59, 0xbb, 0x2c, 0xed, 0x04, 0x4e, 0x16, 0x6f, - 0x4c, 0x31, 0x2c, 0xc4, 0x3a, 0x1f, 0xbb, 0x0a, 0x10, 0xe3, 0x8e, 0xc8, 0x70, 0x63, 0xaf, 0x41, - 0x89, 0x7e, 0xee, 0x4c, 0xc3, 0x75, 0xda, 0x9b, 0xc6, 0x9f, 0x81, 0x92, 0x34, 0x7c, 0x87, 0x22, - 0x8a, 0x03, 0x3b, 0x91, 0xa4, 0x5d, 0x3c, 0xc4, 0x31, 0xde, 0x7e, 0x1c, 0x84, 0x6f, 0x69, 0x3b, - 0x96, 0xf6, 0x06, 0x9c, 0x60, 0x4e, 0xb2, 0x4e, 0xb4, 0x65, 0xcc, 0xd1, 0xce, 0x93, 0xe1, 0x59, - 0x71, 0xaf, 0xe3, 0x5f, 0x36, 0xa9, 0x3d, 0x4e, 0x1e, 0x92, 0x1c, 0xe3, 0x3b, 0x9e, 0xfd, 0x67, - 0x3d, 0xf0, 0xc8, 0x52, 0x35, 0x3f, 0xfc, 0xd0, 0xcb, 0x30, 0xc4, 0xc5, 0x45, 0x3a, 0x35, 0x9c, - 0x86, 0xa8, 0x57, 0x69, 0x40, 0xd7, 0x34, 0x1c, 0x36, 0x28, 0xd1, 0x39, 0x28, 0xba, 0x6f, 0x7b, - 0xc9, 0xa7, 0x7b, 0x4b, 0x6f, 0xac, 0x62, 0x0a, 0xa7, 0x68, 0x2a, 0x79, 0xf2, 0x2d, 0x5d, 0xa1, - 0x95, 0xf4, 0xf9, 0x1a, 0x8c, 0xb8, 0x61, 0x2d, 0x74, 0x97, 0x3c, 0xba, 0x4e, 0xb5, 0x95, 0xae, - 0x74, 0x0e, 0xb4, 0xd1, 0x0a, 0x8b, 0x13, 0xd4, 0xda, 0xf9, 0xd2, 0xdb, 0xb5, 0xf4, 0xda, 0x31, - 0xf8, 0x01, 0xdd, 0xfe, 0x9b, 0xec, 0xeb, 0x42, 0xa6, 0x82, 0x17, 0xdb, 0x3f, 0xff, 0xe0, 0x10, - 0x4b, 0x1c, 0xbd, 0xd0, 0xd5, 0xb6, 0x9c, 0xe6, 0x4c, 0x2b, 0xda, 0x9a, 0x77, 0xc3, 0x9a, 0xbf, - 0x4b, 0x82, 0x3d, 0x76, 0x17, 0x1f, 0x88, 0x2f, 0x74, 0x0a, 0x31, 0x77, 0x6d, 0xa6, 0x42, 0x29, - 0x71, 0xba, 0x0c, 0x9a, 0x81, 0x51, 0x09, 0xac, 0x92, 0x90, 0x1d, 0x01, 0x83, 0x8c, 0x8d, 0x7a, - 0x4c, 0x27, 0xc0, 0x8a, 0x49, 0x92, 0xde, 0x14, 0x70, 0xe1, 0x28, 0x04, 0xdc, 0x0f, 0xc2, 0xb0, - 0xeb, 0xb9, 0x91, 0xeb, 0x44, 0x3e, 0xb7, 0x1f, 0xf1, 0x6b, 0x37, 0x53, 0x30, 0x2f, 0xe9, 0x08, - 0x6c, 0xd2, 0xd9, 0xff, 0xb6, 0x07, 0xc6, 0xd9, 0xb0, 0xbd, 0x37, 0xc3, 0xbe, 0x9d, 0x66, 0xd8, - 0xcd, 0xf4, 0x0c, 0x3b, 0x0a, 0xc9, 0xfd, 0x81, 0xa7, 0xd9, 0x67, 0xa0, 0xa4, 0xde, 0x0f, 0xca, - 0x07, 0xc4, 0x56, 0xce, 0x03, 0xe2, 0xce, 0xa7, 0xb7, 0x74, 0x49, 0x2b, 0x66, 0xba, 0xa4, 0x7d, - 0xd9, 0x82, 0xd8, 0xb0, 0x80, 0xde, 0x80, 0x52, 0xd3, 0x67, 0x1e, 0xae, 0x81, 0x74, 0x1b, 0x7f, - 0xbc, 0xad, 0x65, 0x82, 0x47, 0x60, 0x0b, 0x78, 0x2f, 0x54, 0x64, 0x51, 0x1c, 0x73, 0x41, 0xd7, - 0xa1, 0xbf, 0x19, 0x90, 0x6a, 0xc4, 0xc2, 0x03, 0x75, 0xcf, 0x90, 0xcf, 0x1a, 0x5e, 0x10, 0x4b, - 0x0e, 0xf6, 0xbf, 0xb7, 0x60, 0x2c, 0x49, 0x8a, 0x3e, 0x0c, 0x3d, 0xe4, 0x2e, 0xa9, 0x89, 0xf6, - 0x66, 0x1e, 0xc5, 0xb1, 0x6a, 0x82, 0x77, 0x00, 0xfd, 0x8f, 0x59, 0x29, 0x74, 0x0d, 0xfa, 0xe9, - 0x39, 0x7c, 0x55, 0x85, 0xc2, 0x7b, 0x34, 0xef, 0x2c, 0x57, 0x02, 0x0d, 0x6f, 0x9c, 0x00, 0x61, - 0x59, 0x9c, 0xf9, 0x81, 0xd5, 0x9a, 0x55, 0x7a, 0xc5, 0x89, 0xda, 0xdd, 0xc4, 0xd7, 0xe6, 0x2a, - 0x9c, 0x48, 0x70, 0xe3, 0x7e, 0x60, 0x12, 0x88, 0x63, 0x26, 0xf6, 0x2f, 0x58, 0x00, 0xdc, 0xed, - 0xcd, 0xf1, 0x36, 0xc9, 0x31, 0x68, 0xd3, 0xe7, 0xa1, 0x27, 0x6c, 0x92, 0x5a, 0x3b, 0xe7, 0xeb, - 0xb8, 0x3d, 0xd5, 0x26, 0xa9, 0xc5, 0x33, 0x8e, 0xfe, 0xc3, 0xac, 0xb4, 0xfd, 0xbd, 0x00, 0x23, - 0x31, 0xd9, 0x52, 0x44, 0x76, 0xd0, 0x73, 0x46, 0xd0, 0x91, 0x33, 0x89, 0xa0, 0x23, 0x25, 0x46, - 0xad, 0x29, 0x6e, 0x3f, 0x03, 0xc5, 0x1d, 0xe7, 0xae, 0xd0, 0xcc, 0x3d, 0xd3, 0xbe, 0x19, 0x94, - 0xff, 0xf4, 0x8a, 0x73, 0x97, 0x5f, 0x5e, 0x9f, 0x91, 0x2b, 0x64, 0xc5, 0xb9, 0xdb, 0xd1, 0x41, - 0x98, 0x56, 0xc2, 0xea, 0x72, 0x3d, 0xe1, 0xd1, 0xd5, 0x55, 0x5d, 0xae, 0x97, 0xac, 0xcb, 0xf5, - 0xba, 0xa8, 0xcb, 0xf5, 0xd0, 0x3d, 0xe8, 0x17, 0x0e, 0x97, 0x22, 0x2c, 0xd9, 0xe5, 0x2e, 0xea, - 0x13, 0xfe, 0x9a, 0xbc, 0xce, 0xcb, 0xf2, 0x72, 0x2e, 0xa0, 0x1d, 0xeb, 0x95, 0x15, 0xa2, 0xff, - 0xc7, 0x82, 0x11, 0xf1, 0x1b, 0x93, 0xb7, 0x5b, 0x24, 0x8c, 0x84, 0xf0, 0xfa, 0x81, 0xee, 0xdb, - 0x20, 0x0a, 0xf2, 0xa6, 0x7c, 0x40, 0x9e, 0x33, 0x26, 0xb2, 0x63, 0x8b, 0x12, 0xad, 0x40, 0x7f, - 0xdb, 0x82, 0x13, 0x3b, 0xce, 0x5d, 0x5e, 0x23, 0x87, 0x61, 0x27, 0x72, 0x7d, 0xe1, 0xb8, 0xf0, - 0xe1, 0xee, 0x86, 0x3f, 0x55, 0x9c, 0x37, 0x52, 0x5a, 0x29, 0x4f, 0x64, 0x91, 0x74, 0x6c, 0x6a, - 0x66, 0xbb, 0xa6, 0x36, 0x60, 0x40, 0xce, 0xb7, 0x87, 0xe9, 0xdd, 0xcd, 0xea, 0x11, 0x73, 0xed, - 0xa1, 0xd6, 0xf3, 0x19, 0x18, 0xd2, 0xe7, 0xd8, 0x43, 0xad, 0xeb, 0x6d, 0x98, 0xc8, 0x98, 0x4b, - 0x0f, 0xb5, 0xca, 0x3b, 0x70, 0x26, 0x77, 0x7e, 0x3c, 0x54, 0xef, 0xfc, 0xaf, 0x5a, 0xfa, 0x3e, - 0x78, 0x0c, 0x26, 0x8d, 0x39, 0xd3, 0xa4, 0x71, 0xbe, 0xfd, 0xca, 0xc9, 0xb1, 0x6b, 0xbc, 0xa5, - 0x37, 0x9a, 0xee, 0xea, 0xe8, 0x75, 0xe8, 0x6b, 0x50, 0x88, 0x74, 0xdb, 0xb5, 0x3b, 0xaf, 0xc8, - 0x58, 0x98, 0x64, 0xf0, 0x10, 0x0b, 0x0e, 0xf6, 0x2f, 0x5b, 0xd0, 0x73, 0x0c, 0x3d, 0x81, 0xcd, - 0x9e, 0x78, 0x2e, 0x97, 0xb5, 0x88, 0xd0, 0x3e, 0x8d, 0x9d, 0x3b, 0x0b, 0x77, 0x23, 0xe2, 0x85, - 0xec, 0x44, 0xce, 0xec, 0x98, 0x9f, 0xb2, 0x60, 0x62, 0xd9, 0x77, 0xea, 0xb3, 0x4e, 0xc3, 0xf1, - 0x6a, 0x24, 0x58, 0xf2, 0x36, 0x0f, 0xe5, 0x73, 0x5e, 0xe8, 0xe8, 0x73, 0x3e, 0x27, 0x5d, 0xb6, - 0x7a, 0xf2, 0xc7, 0x8f, 0x4a, 0xd2, 0xc9, 0x30, 0x4c, 0x86, 0x73, 0xf1, 0x16, 0x20, 0xbd, 0x95, - 0xe2, 0xe5, 0x15, 0x86, 0x7e, 0x97, 0xb7, 0x57, 0x0c, 0xe2, 0x93, 0xd9, 0x12, 0x6e, 0xea, 0xf3, - 0xb4, 0x37, 0x45, 0x1c, 0x80, 0x25, 0x23, 0xfb, 0x65, 0xc8, 0x0c, 0x9b, 0xd1, 0x59, 0x7b, 0x61, - 0x7f, 0x1c, 0xc6, 0x59, 0xc9, 0x43, 0x6a, 0x06, 0xec, 0x84, 0xce, 0x35, 0x23, 0x04, 0xa8, 0xfd, - 0x05, 0x0b, 0x46, 0x57, 0x13, 0x91, 0x11, 0x2f, 0x32, 0x2b, 0x6d, 0x86, 0xaa, 0xbf, 0xca, 0xa0, - 0x58, 0x60, 0x8f, 0x5c, 0x15, 0xf6, 0xd7, 0x16, 0xc4, 0x91, 0x6c, 0x8e, 0x41, 0x7c, 0x9b, 0x33, - 0xc4, 0xb7, 0x4c, 0x41, 0x56, 0x35, 0x27, 0x4f, 0x7a, 0x43, 0xd7, 0x55, 0x8c, 0xb7, 0x36, 0x32, - 0x6c, 0xcc, 0x86, 0x4f, 0xc5, 0x11, 0x33, 0x10, 0x9c, 0x8c, 0xfa, 0x66, 0xff, 0x7e, 0x01, 0x90, - 0xa2, 0xed, 0x3a, 0x06, 0x5d, 0xba, 0xc4, 0xd1, 0xc4, 0xa0, 0xdb, 0x05, 0xc4, 0xfc, 0x0c, 0x02, - 0xc7, 0x0b, 0x39, 0x5b, 0x57, 0x28, 0xff, 0x0e, 0xe7, 0xc4, 0x30, 0x25, 0x1f, 0xa5, 0x2d, 0xa7, - 0xb8, 0xe1, 0x8c, 0x1a, 0x34, 0xff, 0x91, 0xde, 0x6e, 0xfd, 0x47, 0xfa, 0x3a, 0xbc, 0xae, 0xfc, - 0x8a, 0x05, 0xc3, 0xaa, 0x9b, 0xde, 0x25, 0x3e, 0xf8, 0xaa, 0x3d, 0x39, 0x1b, 0x68, 0x45, 0x6b, - 0x32, 0x3b, 0x58, 0xbe, 0x83, 0xbd, 0x92, 0x75, 0x1a, 0xee, 0x3d, 0xa2, 0x62, 0x96, 0x96, 0xc5, - 0xab, 0x57, 0x01, 0x3d, 0xd8, 0x2f, 0x0f, 0xab, 0x7f, 0x3c, 0x26, 0x7b, 0x5c, 0x84, 0x6e, 0xc9, - 0xa3, 0x89, 0xa9, 0x88, 0x5e, 0x82, 0xde, 0xe6, 0x96, 0x13, 0x92, 0xc4, 0x5b, 0xa5, 0xde, 0x0a, - 0x05, 0x1e, 0xec, 0x97, 0x47, 0x54, 0x01, 0x06, 0xc1, 0x9c, 0xba, 0xfb, 0xc8, 0x7e, 0xe9, 0xc9, - 0xd9, 0x31, 0xb2, 0xdf, 0x5f, 0x5a, 0xd0, 0xb3, 0xea, 0xd7, 0x8f, 0x63, 0x0b, 0x78, 0xcd, 0xd8, - 0x02, 0xce, 0xe6, 0xa5, 0xcb, 0xc8, 0x5d, 0xfd, 0x8b, 0x89, 0xd5, 0x7f, 0x3e, 0x97, 0x43, 0xfb, - 0x85, 0xbf, 0x03, 0x83, 0x2c, 0x09, 0x87, 0x78, 0x97, 0xf5, 0x82, 0xb1, 0xe0, 0xcb, 0x89, 0x05, - 0x3f, 0xaa, 0x91, 0x6a, 0x2b, 0xfd, 0x29, 0xe8, 0x17, 0x0f, 0x7d, 0x92, 0x8f, 0x8d, 0x05, 0x2d, - 0x96, 0x78, 0xfb, 0xc7, 0x8b, 0x60, 0x24, 0xfd, 0x40, 0xbf, 0x6a, 0xc1, 0x74, 0xc0, 0x1d, 0x80, - 0xeb, 0xf3, 0xad, 0xc0, 0xf5, 0x36, 0xab, 0xb5, 0x2d, 0x52, 0x6f, 0x35, 0x5c, 0x6f, 0x73, 0x69, - 0xd3, 0xf3, 0x15, 0x78, 0xe1, 0x2e, 0xa9, 0xb5, 0x98, 0x71, 0xae, 0x43, 0x86, 0x11, 0xe5, 0x48, - 0xff, 0xfc, 0xfd, 0xfd, 0xf2, 0x34, 0x3e, 0x14, 0x6f, 0x7c, 0xc8, 0xb6, 0xa0, 0xdf, 0xb1, 0xe0, - 0x32, 0xcf, 0x85, 0xd1, 0x7d, 0xfb, 0xdb, 0xdc, 0x96, 0x2b, 0x92, 0x55, 0xcc, 0x64, 0x8d, 0x04, - 0x3b, 0xb3, 0x1f, 0x14, 0x1d, 0x7a, 0xb9, 0x72, 0xb8, 0xba, 0xf0, 0x61, 0x1b, 0x67, 0xff, 0xc3, - 0x22, 0x0c, 0x8b, 0x08, 0x70, 0xe2, 0x0c, 0x78, 0xc9, 0x98, 0x12, 0x8f, 0x26, 0xa6, 0xc4, 0xb8, - 0x41, 0x7c, 0x34, 0xdb, 0x7f, 0x08, 0xe3, 0x74, 0x73, 0xbe, 0x46, 0x9c, 0x20, 0x5a, 0x27, 0x0e, - 0x77, 0x0b, 0x2b, 0x1e, 0x7a, 0xf7, 0x57, 0xfa, 0xc9, 0xe5, 0x24, 0x33, 0x9c, 0xe6, 0xff, 0xed, - 0x74, 0xe6, 0x78, 0x30, 0x96, 0x0a, 0xe2, 0xf7, 0x26, 0x94, 0xd4, 0x2b, 0x15, 0xb1, 0xe9, 0xb4, - 0x8f, 0x85, 0x99, 0xe4, 0xc0, 0xd5, 0x5f, 0xf1, 0x0b, 0xa9, 0x98, 0x9d, 0xfd, 0x77, 0x0b, 0x46, - 0x85, 0x7c, 0x10, 0x57, 0x61, 0xc0, 0x09, 0x43, 0x77, 0xd3, 0x23, 0xf5, 0x76, 0x1a, 0xca, 0x54, - 0x35, 0xec, 0xa5, 0xd0, 0x8c, 0x28, 0x89, 0x15, 0x0f, 0x74, 0x8d, 0x3b, 0xdf, 0xed, 0x92, 0x76, - 0xea, 0xc9, 0x14, 0x37, 0x90, 0xee, 0x79, 0xbb, 0x04, 0x8b, 0xf2, 0xe8, 0x93, 0xdc, 0x3b, 0xf2, - 0xba, 0xe7, 0xdf, 0xf1, 0xae, 0xfa, 0xbe, 0x8c, 0xf6, 0xd1, 0x1d, 0xc3, 0x71, 0xe9, 0x13, 0xa9, - 0x8a, 0x63, 0x93, 0x5b, 0x77, 0x51, 0x71, 0x3f, 0x0b, 0x2c, 0xf6, 0xbf, 0xf9, 0x28, 0x3c, 0x44, - 0x04, 0x46, 0x45, 0x78, 0x41, 0x09, 0x13, 0x7d, 0x97, 0x79, 0x95, 0x33, 0x4b, 0xc7, 0x8a, 0xf4, - 0xeb, 0x26, 0x0b, 0x9c, 0xe4, 0x69, 0xff, 0x8c, 0x05, 0xec, 0x81, 0xec, 0x31, 0xc8, 0x23, 0x1f, - 0x31, 0xe5, 0x91, 0xc9, 0xbc, 0x4e, 0xce, 0x11, 0x45, 0x5e, 0xe4, 0x33, 0xab, 0x12, 0xf8, 0x77, - 0xf7, 0x84, 0x4b, 0x4b, 0xe7, 0xfb, 0x87, 0xfd, 0xdf, 0x2d, 0xbe, 0x89, 0xc5, 0xe1, 0x04, 0x3e, - 0x07, 0x03, 0x35, 0xa7, 0xe9, 0xd4, 0x78, 0x86, 0xaa, 0x5c, 0x8d, 0x9e, 0x51, 0x68, 0x7a, 0x4e, - 0x94, 0xe0, 0x1a, 0x2a, 0x19, 0xa6, 0x72, 0x40, 0x82, 0x3b, 0x6a, 0xa5, 0x54, 0x95, 0x53, 0xdb, - 0x30, 0x6c, 0x30, 0x7b, 0xa8, 0xea, 0x8c, 0xcf, 0xf1, 0x23, 0x56, 0x85, 0x55, 0xdd, 0x81, 0x71, - 0x4f, 0xfb, 0x4f, 0x0f, 0x14, 0x79, 0xb9, 0x7c, 0xbc, 0xd3, 0x21, 0xca, 0x4e, 0x1f, 0xed, 0xed, - 0x6d, 0x82, 0x0d, 0x4e, 0x73, 0xb6, 0x7f, 0xc2, 0x82, 0xd3, 0x3a, 0xa1, 0xf6, 0xbc, 0xa7, 0x93, - 0x91, 0x64, 0x1e, 0x06, 0xfc, 0x26, 0x09, 0x9c, 0xc8, 0x0f, 0xc4, 0xa9, 0x71, 0x49, 0x76, 0xfa, - 0x0d, 0x01, 0x3f, 0x10, 0xf9, 0x16, 0x24, 0x77, 0x09, 0xc7, 0xaa, 0x24, 0xbd, 0x7d, 0xb2, 0xce, - 0x08, 0xc5, 0x43, 0x2e, 0xb6, 0x07, 0x30, 0x7b, 0x7b, 0x88, 0x05, 0xc6, 0xfe, 0x33, 0x8b, 0x4f, - 0x2c, 0xbd, 0xe9, 0xe8, 0x6d, 0x18, 0xdb, 0x71, 0xa2, 0xda, 0xd6, 0xc2, 0xdd, 0x66, 0xc0, 0x4d, - 0x4e, 0xb2, 0x9f, 0x9e, 0xe9, 0xd4, 0x4f, 0xda, 0x47, 0xc6, 0x0e, 0x9f, 0x2b, 0x09, 0x66, 0x38, - 0xc5, 0x1e, 0xad, 0xc3, 0x20, 0x83, 0xb1, 0x37, 0x8a, 0x61, 0x3b, 0xd1, 0x20, 0xaf, 0x36, 0xe5, - 0xb2, 0xb0, 0x12, 0xf3, 0xc1, 0x3a, 0x53, 0xfb, 0xcb, 0x45, 0xbe, 0xda, 0x99, 0x28, 0xff, 0x14, - 0xf4, 0x37, 0xfd, 0xfa, 0xdc, 0xd2, 0x3c, 0x16, 0xa3, 0xa0, 0x8e, 0x91, 0x0a, 0x07, 0x63, 0x89, - 0x47, 0x97, 0x60, 0x40, 0xfc, 0x94, 0x26, 0x42, 0xb6, 0x37, 0x0b, 0xba, 0x10, 0x2b, 0x2c, 0x7a, - 0x1e, 0xa0, 0x19, 0xf8, 0xbb, 0x6e, 0x9d, 0xc5, 0x2c, 0x29, 0x9a, 0xde, 0x46, 0x15, 0x85, 0xc1, - 0x1a, 0x15, 0x7a, 0x15, 0x86, 0x5b, 0x5e, 0xc8, 0xc5, 0x11, 0x2d, 0x32, 0xb4, 0xf2, 0x83, 0xb9, - 0xa9, 0x23, 0xb1, 0x49, 0x8b, 0x66, 0xa0, 0x2f, 0x72, 0x98, 0xf7, 0x4c, 0x6f, 0xbe, 0x53, 0xf0, - 0x1a, 0xa5, 0xd0, 0x93, 0x21, 0xd1, 0x02, 0x58, 0x14, 0x44, 0x6f, 0xca, 0xe7, 0xc2, 0x7c, 0x63, - 0x17, 0xde, 0xf8, 0xdd, 0x1d, 0x02, 0xda, 0x63, 0x61, 0xe1, 0xe5, 0x6f, 0xf0, 0x42, 0xaf, 0x00, - 0x90, 0xbb, 0x11, 0x09, 0x3c, 0xa7, 0xa1, 0x7c, 0xde, 0x94, 0x5c, 0x30, 0xef, 0xaf, 0xfa, 0xd1, - 0xcd, 0x90, 0x2c, 0x28, 0x0a, 0xac, 0x51, 0xdb, 0xbf, 0x53, 0x02, 0x88, 0xe5, 0x76, 0x74, 0x2f, - 0xb5, 0x71, 0x3d, 0xdb, 0x5e, 0xd2, 0x3f, 0xba, 0x5d, 0x0b, 0x7d, 0x9f, 0x05, 0x83, 0x22, 0x34, - 0x0b, 0x1b, 0xa1, 0x42, 0xfb, 0x8d, 0xd3, 0x8c, 0x10, 0x43, 0x4b, 0xf0, 0x26, 0xbc, 0x20, 0x67, - 0xa8, 0x86, 0xe9, 0xd8, 0x0a, 0xbd, 0x62, 0xf4, 0x7e, 0x79, 0x55, 0x2c, 0x1a, 0x5d, 0xa9, 0xae, - 0x8a, 0x25, 0x76, 0x46, 0xe8, 0xb7, 0xc4, 0x9b, 0xc6, 0x2d, 0xb1, 0x27, 0xff, 0x3d, 0xa4, 0x21, - 0xbe, 0x76, 0xba, 0x20, 0xa2, 0x8a, 0x1e, 0x1b, 0xa1, 0x37, 0xff, 0x11, 0x9f, 0x76, 0x4f, 0xea, - 0x10, 0x17, 0xe1, 0x33, 0x30, 0x5a, 0x37, 0x85, 0x00, 0x31, 0x13, 0x9f, 0xcc, 0xe3, 0x9b, 0x90, - 0x19, 0xe2, 0x63, 0x3f, 0x81, 0xc0, 0x49, 0xc6, 0xa8, 0xc2, 0x43, 0x65, 0x2c, 0x79, 0x1b, 0xbe, - 0x78, 0x11, 0x62, 0xe7, 0x8e, 0xe5, 0x5e, 0x18, 0x91, 0x1d, 0x4a, 0x19, 0x9f, 0xee, 0xab, 0xa2, - 0x2c, 0x56, 0x5c, 0xd0, 0xeb, 0xd0, 0xc7, 0x5e, 0x71, 0x85, 0x93, 0x03, 0xf9, 0x1a, 0x67, 0x33, - 0x66, 0x60, 0xbc, 0x20, 0xd9, 0xdf, 0x10, 0x0b, 0x0e, 0xe8, 0x9a, 0x7c, 0x23, 0x19, 0x2e, 0x79, - 0x37, 0x43, 0xc2, 0xde, 0x48, 0x96, 0x66, 0x1f, 0x8f, 0x9f, 0x3f, 0x72, 0x78, 0x66, 0xca, 0x44, - 0xa3, 0x24, 0x95, 0xa2, 0xc4, 0x7f, 0x99, 0x89, 0x51, 0x44, 0x38, 0xca, 0x6c, 0x9e, 0x99, 0xad, - 0x31, 0xee, 0xce, 0x5b, 0x26, 0x0b, 0x9c, 0xe4, 0x49, 0x25, 0x52, 0xbe, 0xea, 0xc5, 0x9b, 0x92, - 0x4e, 0x7b, 0x07, 0xbf, 0x88, 0xb3, 0xd3, 0x88, 0x43, 0xb0, 0x28, 0x7f, 0xac, 0xe2, 0xc1, 0x94, - 0x07, 0x63, 0xc9, 0x25, 0xfa, 0x50, 0xc5, 0x91, 0x3f, 0xe9, 0x81, 0x11, 0x73, 0x4a, 0xa1, 0xcb, - 0x50, 0x12, 0x4c, 0x54, 0x36, 0x13, 0xb5, 0x4a, 0x56, 0x24, 0x02, 0xc7, 0x34, 0x2c, 0x89, 0x0d, - 0x2b, 0xae, 0x39, 0x11, 0xc7, 0x49, 0x6c, 0x14, 0x06, 0x6b, 0x54, 0xf4, 0x62, 0xb5, 0xee, 0xfb, - 0x91, 0x3a, 0x90, 0xd4, 0xbc, 0x9b, 0x65, 0x50, 0x2c, 0xb0, 0xf4, 0x20, 0xda, 0x26, 0x81, 0x47, - 0x1a, 0x66, 0x14, 0x71, 0x75, 0x10, 0x5d, 0xd7, 0x91, 0xd8, 0xa4, 0xa5, 0xc7, 0xa9, 0x1f, 0xb2, - 0x89, 0x2c, 0xae, 0x6f, 0xb1, 0x53, 0x76, 0x95, 0x3f, 0x2f, 0x97, 0x78, 0xf4, 0x71, 0x38, 0xad, - 0x22, 0x76, 0x61, 0x6e, 0xcd, 0x90, 0x35, 0xf6, 0x19, 0xda, 0x96, 0xd3, 0x73, 0xd9, 0x64, 0x38, - 0xaf, 0x3c, 0x7a, 0x0d, 0x46, 0x84, 0x88, 0x2f, 0x39, 0xf6, 0x9b, 0x1e, 0x46, 0xd7, 0x0d, 0x2c, - 0x4e, 0x50, 0xcb, 0x38, 0xe8, 0x4c, 0xca, 0x96, 0x1c, 0x06, 0xd2, 0x71, 0xd0, 0x75, 0x3c, 0x4e, - 0x95, 0x40, 0x33, 0x30, 0xca, 0x65, 0x30, 0xd7, 0xdb, 0xe4, 0x63, 0x22, 0x9e, 0x7c, 0xa9, 0x25, - 0x75, 0xc3, 0x44, 0xe3, 0x24, 0x3d, 0x7a, 0x19, 0x86, 0x9c, 0xa0, 0xb6, 0xe5, 0x46, 0xa4, 0x16, - 0xb5, 0x02, 0xfe, 0x16, 0x4c, 0x73, 0xd1, 0x9a, 0xd1, 0x70, 0xd8, 0xa0, 0xb4, 0xef, 0xc1, 0x44, - 0x46, 0xdc, 0x09, 0x3a, 0x71, 0x9c, 0xa6, 0x2b, 0xbf, 0x29, 0xe1, 0x07, 0x3d, 0x53, 0x59, 0x92, - 0x5f, 0xa3, 0x51, 0xd1, 0xd9, 0xc9, 0xe2, 0x53, 0x68, 0x89, 0x57, 0xd5, 0xec, 0x5c, 0x94, 0x08, - 0x1c, 0xd3, 0xd8, 0xff, 0xa9, 0x00, 0xa3, 0x19, 0xb6, 0x15, 0x96, 0xfc, 0x33, 0x71, 0x49, 0x89, - 0x73, 0x7d, 0x9a, 0x61, 0xf5, 0x0b, 0x87, 0x08, 0xab, 0x5f, 0xec, 0x14, 0x56, 0xbf, 0xe7, 0x9d, - 0x84, 0xd5, 0x37, 0x7b, 0xac, 0xb7, 0xab, 0x1e, 0xcb, 0x08, 0xc5, 0xdf, 0x77, 0xc8, 0x50, 0xfc, - 0x46, 0xa7, 0xf7, 0x77, 0xd1, 0xe9, 0x3f, 0x52, 0x80, 0xb1, 0xa4, 0x2b, 0xe9, 0x31, 0xe8, 0x6d, - 0x5f, 0x37, 0xf4, 0xb6, 0x97, 0xba, 0x79, 0xa2, 0x9b, 0xab, 0xc3, 0xc5, 0x09, 0x1d, 0xee, 0xd3, - 0x5d, 0x71, 0x6b, 0xaf, 0xcf, 0xfd, 0xc9, 0x02, 0x9c, 0xcc, 0x7c, 0x23, 0x7c, 0x0c, 0x7d, 0x73, - 0xc3, 0xe8, 0x9b, 0xe7, 0xba, 0x7e, 0xbe, 0x9c, 0xdb, 0x41, 0xb7, 0x13, 0x1d, 0x74, 0xb9, 0x7b, - 0x96, 0xed, 0x7b, 0xe9, 0xeb, 0x45, 0x38, 0x9f, 0x59, 0x2e, 0x56, 0x7b, 0x2e, 0x1a, 0x6a, 0xcf, - 0xe7, 0x13, 0x6a, 0x4f, 0xbb, 0x7d, 0xe9, 0xa3, 0xd1, 0x83, 0x8a, 0x67, 0xbc, 0x2c, 0x18, 0xc1, - 0x03, 0xea, 0x40, 0x8d, 0x67, 0xbc, 0x8a, 0x11, 0x36, 0xf9, 0x7e, 0x3b, 0xe9, 0x3e, 0x7f, 0xdb, - 0x82, 0x33, 0x99, 0x63, 0x73, 0x0c, 0xba, 0xae, 0x55, 0x53, 0xd7, 0xf5, 0x54, 0xd7, 0xb3, 0x35, - 0x47, 0xf9, 0xf5, 0xd3, 0xbd, 0x39, 0xdf, 0xc2, 0x6e, 0xf2, 0x37, 0x60, 0xd0, 0xa9, 0xd5, 0x48, - 0x18, 0xae, 0xf8, 0x75, 0x15, 0x81, 0xfb, 0x39, 0x76, 0xcf, 0x8a, 0xc1, 0x07, 0xfb, 0xe5, 0xa9, - 0x24, 0x8b, 0x18, 0x8d, 0x75, 0x0e, 0xe8, 0x93, 0x30, 0x10, 0x8a, 0x73, 0x53, 0x8c, 0xfd, 0x0b, - 0x5d, 0x76, 0x8e, 0xb3, 0x4e, 0x1a, 0x66, 0xa8, 0x27, 0xa5, 0xa9, 0x50, 0x2c, 0xcd, 0xb0, 0x30, - 0x85, 0x23, 0x0d, 0x0b, 0xf3, 0x3c, 0xc0, 0xae, 0xba, 0x0c, 0x24, 0xf5, 0x0f, 0xda, 0x35, 0x41, - 0xa3, 0x42, 0x1f, 0x85, 0xb1, 0x90, 0xc7, 0x42, 0x9c, 0x6b, 0x38, 0x21, 0x7b, 0x6d, 0x23, 0x66, - 0x21, 0x0b, 0x27, 0x55, 0x4d, 0xe0, 0x70, 0x8a, 0x1a, 0x2d, 0xca, 0x5a, 0x59, 0xe0, 0x46, 0x3e, - 0x31, 0x2f, 0xc6, 0x35, 0x8a, 0xd4, 0xe3, 0x27, 0x92, 0xdd, 0xcf, 0x3a, 0x5e, 0x2b, 0x89, 0x3e, - 0x09, 0x40, 0xa7, 0x8f, 0xd0, 0x43, 0xf4, 0xe7, 0x6f, 0x9e, 0x74, 0x57, 0xa9, 0x67, 0x3a, 0x37, - 0xb3, 0x97, 0xb7, 0xf3, 0x8a, 0x09, 0xd6, 0x18, 0x22, 0x07, 0x86, 0xe3, 0x7f, 0x71, 0x66, 0xde, - 0x4b, 0xb9, 0x35, 0x24, 0x99, 0x33, 0x95, 0xf7, 0xbc, 0xce, 0x02, 0x9b, 0x1c, 0xed, 0x7f, 0x37, - 0x00, 0x8f, 0xb4, 0xd9, 0x86, 0xd1, 0x8c, 0x69, 0xea, 0x7d, 0x26, 0x79, 0x7f, 0x9f, 0xca, 0x2c, - 0x6c, 0x5c, 0xe8, 0x13, 0xb3, 0xbd, 0xf0, 0x8e, 0x67, 0xfb, 0x0f, 0x59, 0x9a, 0x66, 0x85, 0x3b, - 0x95, 0x7e, 0xe4, 0x90, 0xc7, 0xcb, 0x11, 0xaa, 0x5a, 0x36, 0x32, 0xf4, 0x15, 0xcf, 0x77, 0xdd, - 0x9c, 0xee, 0x15, 0x18, 0x5f, 0xcd, 0x0e, 0x00, 0xcc, 0x55, 0x19, 0x57, 0x0f, 0xfb, 0xfd, 0xc7, - 0x15, 0x0c, 0xf8, 0xf7, 0x2d, 0x38, 0x93, 0x02, 0xf3, 0x36, 0x90, 0x50, 0xc4, 0xa8, 0x5a, 0x7d, - 0xc7, 0x8d, 0x97, 0x0c, 0xf9, 0x37, 0x5c, 0x13, 0xdf, 0x70, 0x26, 0x97, 0x2e, 0xd9, 0xf4, 0x1f, - 0xfc, 0xa3, 0xf2, 0x04, 0xab, 0xc0, 0x24, 0xc4, 0xf9, 0x4d, 0x3f, 0xde, 0x8b, 0xff, 0x37, 0x27, - 0xf6, 0xf1, 0xd4, 0x32, 0x9c, 0x6f, 0xdf, 0xd5, 0x87, 0x7a, 0x9e, 0xfc, 0x7b, 0x16, 0x9c, 0x6b, - 0x1b, 0x03, 0xe7, 0x5b, 0x50, 0xce, 0xb5, 0x3f, 0x6f, 0xc1, 0xa3, 0x99, 0x25, 0x0c, 0xef, 0xb8, - 0xcb, 0x50, 0xaa, 0x25, 0xf2, 0xa1, 0xc6, 0xd1, 0x20, 0x54, 0x2e, 0xd4, 0x98, 0xc6, 0x70, 0x82, - 0x2b, 0x74, 0x74, 0x82, 0xfb, 0x0d, 0x0b, 0x52, 0x67, 0xd5, 0x31, 0x08, 0x4d, 0x4b, 0xa6, 0xd0, - 0xf4, 0x78, 0x37, 0xbd, 0x99, 0x23, 0x2f, 0xfd, 0xc5, 0x28, 0x9c, 0xca, 0x79, 0x5d, 0xb8, 0x0b, - 0xe3, 0x9b, 0x35, 0x62, 0x3e, 0x27, 0x6f, 0x17, 0x66, 0xa9, 0xed, 0xdb, 0x73, 0x9e, 0x86, 0x36, - 0x45, 0x82, 0xd3, 0x55, 0xa0, 0xcf, 0x5b, 0x70, 0xc2, 0xb9, 0x13, 0x2e, 0x50, 0xe1, 0xd7, 0xad, - 0xcd, 0x36, 0xfc, 0xda, 0x36, 0x95, 0x2c, 0xe4, 0xb2, 0x7a, 0x31, 0x53, 0x21, 0x79, 0xbb, 0x9a, - 0xa2, 0x37, 0xaa, 0x67, 0x49, 0xc7, 0xb3, 0xa8, 0x70, 0x66, 0x5d, 0x08, 0x8b, 0xfc, 0x28, 0xf4, - 0x6a, 0xdd, 0x26, 0xe0, 0x41, 0xd6, 0x33, 0x50, 0x2e, 0xcd, 0x49, 0x0c, 0x56, 0x7c, 0xd0, 0xa7, - 0xa1, 0xb4, 0x29, 0xdf, 0x36, 0x67, 0x48, 0x8b, 0x71, 0x47, 0xb6, 0x7f, 0xf1, 0xcd, 0xbd, 0x0a, - 0x14, 0x11, 0x8e, 0x99, 0xa2, 0xd7, 0xa0, 0xe8, 0x6d, 0x84, 0xed, 0xf2, 0x76, 0x27, 0xdc, 0x47, - 0x79, 0x58, 0x91, 0xd5, 0xc5, 0x2a, 0xa6, 0x05, 0xd1, 0x35, 0x28, 0x06, 0xeb, 0x75, 0xa1, 0x4d, - 0xcf, 0x5c, 0xa4, 0x78, 0x76, 0x3e, 0xa7, 0x55, 0x8c, 0x13, 0x9e, 0x9d, 0xc7, 0x94, 0x05, 0xaa, - 0x40, 0x2f, 0x7b, 0x92, 0x27, 0x64, 0xb3, 0xcc, 0x5b, 0x68, 0x9b, 0xa7, 0xad, 0x3c, 0xf6, 0x08, - 0x23, 0xc0, 0x9c, 0x11, 0x5a, 0x83, 0xbe, 0x1a, 0xcb, 0xf1, 0x2c, 0x84, 0xb1, 0xf7, 0x67, 0xea, - 0xcd, 0xdb, 0x24, 0xbf, 0x16, 0x6a, 0x64, 0x46, 0x81, 0x05, 0x2f, 0xc6, 0x95, 0x34, 0xb7, 0x36, - 0x42, 0xa6, 0x77, 0xcb, 0xe3, 0xda, 0x26, 0xa7, 0xbb, 0xe0, 0xca, 0x28, 0xb0, 0xe0, 0x85, 0x5e, - 0x81, 0xc2, 0x46, 0x4d, 0x3c, 0xb7, 0xcb, 0x54, 0xa0, 0x9b, 0x91, 0x61, 0x66, 0xfb, 0xee, 0xef, - 0x97, 0x0b, 0x8b, 0x73, 0xb8, 0xb0, 0x51, 0x43, 0xab, 0xd0, 0xbf, 0xc1, 0x63, 0x49, 0x08, 0x1d, - 0xf9, 0x93, 0xd9, 0x61, 0x2e, 0x52, 0xe1, 0x26, 0xf8, 0xd3, 0x2d, 0x81, 0xc0, 0x92, 0x09, 0x4b, - 0xd7, 0xa1, 0x62, 0x62, 0x88, 0x90, 0x7c, 0xd3, 0x87, 0x8b, 0x63, 0xc2, 0x65, 0xe5, 0x38, 0xb2, - 0x06, 0xd6, 0x38, 0xd2, 0x59, 0xed, 0xdc, 0x6b, 0x05, 0x2c, 0x5e, 0xbb, 0x88, 0xdd, 0x94, 0x39, - 0xab, 0x67, 0x24, 0x51, 0xbb, 0x59, 0xad, 0x88, 0x70, 0xcc, 0x14, 0x6d, 0xc3, 0xf0, 0x6e, 0xd8, - 0xdc, 0x22, 0x72, 0x49, 0xb3, 0x50, 0x4e, 0x39, 0xb2, 0xde, 0x2d, 0x41, 0xe8, 0x06, 0x51, 0xcb, - 0x69, 0xa4, 0x76, 0x21, 0x26, 0x97, 0xdf, 0xd2, 0x99, 0x61, 0x93, 0x37, 0xed, 0xfe, 0xb7, 0x5b, - 0xfe, 0xfa, 0x5e, 0x44, 0x44, 0x24, 0xbd, 0xcc, 0xee, 0x7f, 0x83, 0x93, 0xa4, 0xbb, 0x5f, 0x20, - 0xb0, 0x64, 0x82, 0x6e, 0x89, 0xee, 0x61, 0xbb, 0xe7, 0x58, 0x7e, 0x98, 0xde, 0x19, 0x49, 0x94, - 0xd3, 0x29, 0x6c, 0xb7, 0x8c, 0x59, 0xb1, 0x5d, 0xb2, 0xb9, 0xe5, 0x47, 0xbe, 0x97, 0xd8, 0xa1, - 0xc7, 0xf3, 0x77, 0xc9, 0x4a, 0x06, 0x7d, 0x7a, 0x97, 0xcc, 0xa2, 0xc2, 0x99, 0x75, 0xa1, 0x3a, - 0x8c, 0x34, 0xfd, 0x20, 0xba, 0xe3, 0x07, 0x72, 0x7e, 0xa1, 0x36, 0x3a, 0x3e, 0x83, 0x52, 0xd4, - 0xc8, 0x82, 0x54, 0x9a, 0x18, 0x9c, 0xe0, 0x89, 0x3e, 0x06, 0xfd, 0x61, 0xcd, 0x69, 0x90, 0xa5, - 0x1b, 0x93, 0x13, 0xf9, 0xc7, 0x4f, 0x95, 0x93, 0xe4, 0xcc, 0x2e, 0x1e, 0x0a, 0x84, 0x93, 0x60, - 0xc9, 0x0e, 0x2d, 0x42, 0x2f, 0x4b, 0x83, 0xc9, 0xc2, 0x3e, 0xe6, 0x44, 0x1b, 0x4e, 0x39, 0xf3, - 0xf3, 0xbd, 0x89, 0x81, 0x31, 0x2f, 0x4e, 0xd7, 0x80, 0xb8, 0xea, 0xfa, 0xe1, 0xe4, 0xc9, 0xfc, - 0x35, 0x20, 0x6e, 0xc8, 0x37, 0xaa, 0xed, 0xd6, 0x80, 0x22, 0xc2, 0x31, 0x53, 0xba, 0x33, 0xd3, - 0xdd, 0xf4, 0x54, 0x1b, 0x2f, 0xb4, 0xdc, 0xbd, 0x94, 0xed, 0xcc, 0x74, 0x27, 0xa5, 0x2c, 0xec, - 0x3f, 0xee, 0x4f, 0xcb, 0x2c, 0x4c, 0x39, 0xf2, 0xbf, 0x5b, 0x29, 0xbb, 0xf9, 0x07, 0xba, 0xd5, - 0xd5, 0x1e, 0xe1, 0xb5, 0xee, 0xf3, 0x16, 0x9c, 0x6a, 0x66, 0x7e, 0x88, 0x10, 0x00, 0xba, 0x53, - 0xf9, 0xf2, 0x4f, 0x57, 0x21, 0x42, 0xb3, 0xf1, 0x38, 0xa7, 0xa6, 0xe4, 0xd5, 0xb9, 0xf8, 0x8e, - 0xaf, 0xce, 0x2b, 0x30, 0x50, 0xe3, 0xf7, 0x1c, 0x19, 0xda, 0xba, 0xab, 0x00, 0x77, 0x4c, 0x94, - 0x10, 0x17, 0xa4, 0x0d, 0xac, 0x58, 0xa0, 0x1f, 0xb6, 0xe0, 0x5c, 0xb2, 0xe9, 0x98, 0x30, 0xb4, - 0x88, 0x2b, 0xca, 0xf5, 0x32, 0x8b, 0xe2, 0xfb, 0x53, 0xf2, 0xbf, 0x41, 0x7c, 0xd0, 0x89, 0x00, - 0xb7, 0xaf, 0x0c, 0xcd, 0x67, 0x28, 0x86, 0xfa, 0x4c, 0x63, 0x58, 0x17, 0xca, 0xa1, 0x17, 0x61, - 0x68, 0xc7, 0x6f, 0x79, 0x91, 0x70, 0x5a, 0x13, 0x0e, 0x34, 0xcc, 0x71, 0x64, 0x45, 0x83, 0x63, - 0x83, 0x2a, 0xa1, 0x52, 0x1a, 0x78, 0x60, 0x95, 0xd2, 0x5b, 0x30, 0xe4, 0x69, 0x5e, 0xd6, 0x42, - 0x1e, 0xb8, 0x98, 0x1f, 0x13, 0x58, 0xf7, 0xc9, 0xe6, 0xad, 0xd4, 0x21, 0xd8, 0xe0, 0x76, 0xbc, - 0xde, 0x6c, 0x3f, 0x5f, 0xc8, 0x10, 0xea, 0xb9, 0x5a, 0xe9, 0xc3, 0xa6, 0x5a, 0xe9, 0x62, 0x52, - 0xad, 0x94, 0x32, 0x84, 0x18, 0x1a, 0xa5, 0xee, 0x53, 0x64, 0x75, 0x1d, 0x57, 0xf4, 0xbb, 0x2d, - 0x38, 0xcd, 0x34, 0xeb, 0xb4, 0x82, 0x77, 0xac, 0x4d, 0x7f, 0xe4, 0xfe, 0x7e, 0xf9, 0xf4, 0x72, - 0x36, 0x3b, 0x9c, 0x57, 0x8f, 0xdd, 0x80, 0x0b, 0x9d, 0x8e, 0x46, 0xe6, 0x41, 0x59, 0x57, 0xa6, - 0xf7, 0xd8, 0x83, 0xb2, 0xbe, 0x34, 0x8f, 0x19, 0xa6, 0xdb, 0xa8, 0x59, 0xf6, 0x7f, 0xb0, 0xa0, - 0x58, 0xf1, 0xeb, 0xc7, 0x70, 0xe9, 0xfe, 0x88, 0x71, 0xe9, 0x7e, 0x24, 0xfb, 0x50, 0xae, 0xe7, - 0x9a, 0x92, 0x16, 0x12, 0xa6, 0xa4, 0x73, 0x79, 0x0c, 0xda, 0x1b, 0x8e, 0x7e, 0xaa, 0x08, 0x83, - 0x15, 0xbf, 0xae, 0x9e, 0x2f, 0xfc, 0xe3, 0x07, 0x79, 0xbe, 0x90, 0x9b, 0xf4, 0x44, 0xe3, 0xcc, - 0x1c, 0x2f, 0xe5, 0xcb, 0xed, 0x6f, 0xb1, 0x57, 0x0c, 0xb7, 0x89, 0xbb, 0xb9, 0x15, 0x91, 0x7a, - 0xf2, 0x73, 0x8e, 0xef, 0x15, 0xc3, 0x1f, 0x17, 0x60, 0x34, 0x51, 0x3b, 0x6a, 0xc0, 0x70, 0x43, - 0x37, 0x54, 0x88, 0x79, 0xfa, 0x40, 0x36, 0x0e, 0xe1, 0x05, 0xae, 0x81, 0xb0, 0xc9, 0x1c, 0x4d, - 0x03, 0x28, 0xcb, 0xbd, 0x54, 0x57, 0xb3, 0x9b, 0x87, 0x32, 0xed, 0x87, 0x58, 0xa3, 0x40, 0x2f, - 0xc1, 0x60, 0xe4, 0x37, 0xfd, 0x86, 0xbf, 0xb9, 0x77, 0x9d, 0xc8, 0x80, 0x6a, 0xca, 0xb7, 0x73, - 0x2d, 0x46, 0x61, 0x9d, 0x0e, 0xdd, 0x85, 0x71, 0xc5, 0xa4, 0x7a, 0x04, 0xc6, 0x1b, 0xa6, 0xd9, - 0x58, 0x4d, 0x72, 0xc4, 0xe9, 0x4a, 0xec, 0x9f, 0x2d, 0xf2, 0x2e, 0xf6, 0x22, 0xf7, 0xbd, 0xd5, - 0xf0, 0xee, 0x5e, 0x0d, 0x5f, 0xb7, 0x60, 0x8c, 0xd6, 0xce, 0x1c, 0xd7, 0xa4, 0xa8, 0xa1, 0x22, - 0xa1, 0x5b, 0x6d, 0x22, 0xa1, 0x5f, 0xa4, 0xbb, 0x66, 0xdd, 0x6f, 0x45, 0x42, 0x7f, 0xa8, 0x6d, - 0x8b, 0x14, 0x8a, 0x05, 0x56, 0xd0, 0x91, 0x20, 0x10, 0x8f, 0x6d, 0x75, 0x3a, 0x12, 0x04, 0x58, - 0x60, 0x65, 0xa0, 0xf4, 0x9e, 0xec, 0x40, 0xe9, 0x3c, 0xde, 0xad, 0x70, 0x71, 0x12, 0x42, 0x9f, - 0x16, 0xef, 0x56, 0xfa, 0x3e, 0xc5, 0x34, 0xf6, 0x57, 0x8b, 0x30, 0x54, 0xf1, 0xeb, 0xb1, 0xd5, - 0xfe, 0x45, 0xc3, 0x6a, 0x7f, 0x21, 0x61, 0xb5, 0x1f, 0xd3, 0x69, 0xdf, 0xb3, 0xd1, 0x7f, 0xb3, - 0x6c, 0xf4, 0xbf, 0x6e, 0xb1, 0x51, 0x9b, 0x5f, 0xad, 0x72, 0x3f, 0x48, 0x74, 0x05, 0x06, 0xd9, - 0x06, 0xc3, 0x5e, 0x77, 0x4b, 0x53, 0x36, 0x4b, 0x5c, 0xb6, 0x1a, 0x83, 0xb1, 0x4e, 0x83, 0x2e, - 0xc1, 0x40, 0x48, 0x9c, 0xa0, 0xb6, 0xa5, 0x76, 0x57, 0x61, 0x77, 0xe6, 0x30, 0xac, 0xb0, 0xe8, - 0x8d, 0x38, 0xd4, 0x6a, 0x31, 0xff, 0xb5, 0xa8, 0xde, 0x1e, 0xbe, 0x44, 0xf2, 0xe3, 0xab, 0xda, - 0xb7, 0x01, 0xa5, 0xe9, 0xbb, 0x08, 0x06, 0x58, 0x36, 0x83, 0x01, 0x96, 0x52, 0x81, 0x00, 0xff, - 0xca, 0x82, 0x91, 0x8a, 0x5f, 0xa7, 0x4b, 0xf7, 0xdb, 0x69, 0x9d, 0xea, 0x71, 0xa6, 0xfb, 0xda, - 0xc4, 0x99, 0x7e, 0x0c, 0x7a, 0x2b, 0x7e, 0xbd, 0x43, 0xc0, 0xc2, 0xbf, 0x61, 0x41, 0x7f, 0xc5, - 0xaf, 0x1f, 0x83, 0x69, 0xe2, 0xc3, 0xa6, 0x69, 0xe2, 0x74, 0xce, 0xbc, 0xc9, 0xb1, 0x46, 0xfc, - 0xff, 0x3d, 0x30, 0x4c, 0xdb, 0xe9, 0x6f, 0xca, 0xa1, 0x34, 0xba, 0xcd, 0xea, 0xa2, 0xdb, 0xa8, - 0x14, 0xee, 0x37, 0x1a, 0xfe, 0x9d, 0xe4, 0xb0, 0x2e, 0x32, 0x28, 0x16, 0x58, 0xf4, 0x2c, 0x0c, - 0x34, 0x03, 0xb2, 0xeb, 0xfa, 0x42, 0xbc, 0xd5, 0x0c, 0x3d, 0x15, 0x01, 0xc7, 0x8a, 0x82, 0x5e, - 0x4d, 0x43, 0xd7, 0xa3, 0x47, 0x79, 0xcd, 0xf7, 0xea, 0x5c, 0x7b, 0x5f, 0x14, 0xc9, 0x50, 0x34, - 0x38, 0x36, 0xa8, 0xd0, 0x6d, 0x28, 0xb1, 0xff, 0x6c, 0xdb, 0x39, 0x7c, 0x1a, 0x66, 0x91, 0x1e, - 0x52, 0x30, 0xc0, 0x31, 0x2f, 0xf4, 0x3c, 0x40, 0x24, 0x13, 0x0a, 0x84, 0x22, 0x70, 0x9d, 0xba, - 0x0a, 0xa8, 0x54, 0x03, 0x21, 0xd6, 0xa8, 0xd0, 0x33, 0x50, 0x8a, 0x1c, 0xb7, 0xb1, 0xec, 0x7a, - 0xcc, 0xfe, 0x4b, 0xdb, 0x2f, 0xb2, 0x34, 0x0a, 0x20, 0x8e, 0xf1, 0x54, 0x14, 0x63, 0x41, 0x4d, - 0x78, 0x12, 0xfa, 0x01, 0x46, 0xcd, 0x44, 0xb1, 0x65, 0x05, 0xc5, 0x1a, 0x05, 0xda, 0x82, 0xb3, - 0xae, 0xc7, 0x12, 0x87, 0x90, 0xea, 0xb6, 0xdb, 0x5c, 0x5b, 0xae, 0xde, 0x22, 0x81, 0xbb, 0xb1, - 0x37, 0xeb, 0xd4, 0xb6, 0x89, 0x27, 0x13, 0xec, 0xca, 0xbc, 0xeb, 0x67, 0x97, 0xda, 0xd0, 0xe2, - 0xb6, 0x9c, 0xec, 0x17, 0xd8, 0x7c, 0xbf, 0x51, 0x45, 0x4f, 0x1b, 0x5b, 0xc7, 0x29, 0x7d, 0xeb, - 0x38, 0xd8, 0x2f, 0xf7, 0xdd, 0xa8, 0x6a, 0x31, 0x39, 0x5e, 0x86, 0x93, 0x15, 0xbf, 0x5e, 0xf1, - 0x83, 0x68, 0xd1, 0x0f, 0xee, 0x38, 0x41, 0x5d, 0x4e, 0xaf, 0xb2, 0x8c, 0x4a, 0x42, 0xf7, 0xcf, - 0x5e, 0xbe, 0xbb, 0x18, 0x11, 0x47, 0x5e, 0x60, 0x12, 0xdb, 0x21, 0xdf, 0xd2, 0xd5, 0x98, 0xec, - 0xa0, 0x52, 0xef, 0x5c, 0x75, 0x22, 0x82, 0x6e, 0xb0, 0x14, 0xfa, 0xf1, 0x31, 0x2a, 0x8a, 0x3f, - 0xa5, 0xa5, 0xd0, 0x8f, 0x91, 0x99, 0xe7, 0xae, 0x59, 0xde, 0xfe, 0x9c, 0xa8, 0x84, 0xeb, 0x01, - 0xb8, 0xbf, 0x62, 0x37, 0x39, 0xa8, 0x65, 0x6e, 0x8e, 0x42, 0x7e, 0x52, 0x07, 0x6e, 0x79, 0x6d, - 0x9b, 0x9b, 0xc3, 0xfe, 0x4e, 0x38, 0x95, 0xac, 0xbe, 0xeb, 0x44, 0xd8, 0x73, 0x30, 0x1e, 0xe8, - 0x05, 0xb5, 0x44, 0x67, 0x27, 0x79, 0x3e, 0x85, 0x04, 0x12, 0xa7, 0xe9, 0xed, 0x97, 0x60, 0x9c, - 0xde, 0x3d, 0x95, 0x20, 0xc7, 0x7a, 0xb9, 0x73, 0x78, 0x96, 0xff, 0xd8, 0xcb, 0x0e, 0xa2, 0x44, - 0xd6, 0x1b, 0xf4, 0x29, 0x18, 0x09, 0xc9, 0xb2, 0xeb, 0xb5, 0xee, 0x4a, 0xed, 0x53, 0x9b, 0x47, - 0xa4, 0xd5, 0x05, 0x9d, 0x92, 0xeb, 0xb0, 0x4d, 0x18, 0x4e, 0x70, 0x43, 0x3b, 0x30, 0x72, 0xc7, - 0xf5, 0xea, 0xfe, 0x9d, 0x50, 0xf2, 0x1f, 0xc8, 0x57, 0x65, 0xdf, 0xe6, 0x94, 0x89, 0x36, 0x1a, - 0xd5, 0xdd, 0x36, 0x98, 0xe1, 0x04, 0x73, 0xba, 0xd8, 0x83, 0x96, 0x37, 0x13, 0xde, 0x0c, 0x09, - 0x7f, 0x16, 0x28, 0x16, 0x3b, 0x96, 0x40, 0x1c, 0xe3, 0xe9, 0x62, 0x67, 0x7f, 0xae, 0x06, 0x7e, - 0x8b, 0xa7, 0x58, 0x11, 0x8b, 0x1d, 0x2b, 0x28, 0xd6, 0x28, 0xe8, 0x66, 0xc8, 0xfe, 0xad, 0xfa, - 0x1e, 0xf6, 0xfd, 0x48, 0x6e, 0x9f, 0x2c, 0x45, 0x98, 0x06, 0xc7, 0x06, 0x15, 0x5a, 0x04, 0x14, - 0xb6, 0x9a, 0xcd, 0x06, 0xf3, 0x4e, 0x73, 0x1a, 0x8c, 0x15, 0x77, 0xdb, 0x29, 0xf2, 0x10, 0xd1, - 0xd5, 0x14, 0x16, 0x67, 0x94, 0xa0, 0xe7, 0xe2, 0x86, 0x68, 0x6a, 0x2f, 0x6b, 0x2a, 0x37, 0x7b, - 0x55, 0x79, 0x3b, 0x25, 0x0e, 0x2d, 0x40, 0x7f, 0xb8, 0x17, 0xd6, 0xa2, 0x46, 0xd8, 0x2e, 0x21, - 0x5b, 0x95, 0x91, 0x68, 0xf9, 0x40, 0x79, 0x11, 0x2c, 0xcb, 0xa2, 0x1a, 0x4c, 0x08, 0x8e, 0x73, - 0x5b, 0x8e, 0xa7, 0xd2, 0x44, 0x71, 0x27, 0xfd, 0x2b, 0xf7, 0xf7, 0xcb, 0x13, 0xa2, 0x66, 0x1d, - 0x7d, 0xb0, 0x5f, 0xa6, 0x8b, 0x23, 0x03, 0x83, 0xb3, 0xb8, 0xf1, 0xc9, 0x57, 0xab, 0xf9, 0x3b, - 0xcd, 0x4a, 0xe0, 0x6f, 0xb8, 0x0d, 0xd2, 0xce, 0x74, 0x58, 0x35, 0x28, 0xc5, 0xe4, 0x33, 0x60, - 0x38, 0xc1, 0xcd, 0xfe, 0x1c, 0x93, 0x1d, 0xab, 0xee, 0xa6, 0xe7, 0x44, 0xad, 0x80, 0xa0, 0x1d, - 0x18, 0x6e, 0xb2, 0xdd, 0x45, 0x24, 0x3e, 0x11, 0x73, 0xfd, 0xc5, 0x2e, 0xd5, 0x4f, 0x77, 0x58, - 0xea, 0x36, 0xc3, 0xd5, 0xad, 0xa2, 0xb3, 0xc3, 0x26, 0x77, 0xfb, 0x5f, 0x9c, 0x61, 0xd2, 0x47, - 0x95, 0xeb, 0x94, 0xfa, 0xc5, 0x9b, 0x20, 0x71, 0x8d, 0x9d, 0xca, 0x57, 0xb0, 0xc6, 0xc3, 0x22, - 0xde, 0x15, 0x61, 0x59, 0x16, 0x7d, 0x12, 0x46, 0xe8, 0xad, 0x50, 0x49, 0x00, 0xe1, 0xe4, 0x89, - 0xfc, 0xd8, 0x2d, 0x8a, 0x4a, 0x4f, 0x8a, 0xa4, 0x17, 0xc6, 0x09, 0x66, 0xe8, 0x0d, 0xe6, 0x5a, - 0x26, 0x59, 0x17, 0xba, 0x61, 0xad, 0x7b, 0x91, 0x49, 0xb6, 0x1a, 0x13, 0xd4, 0x82, 0x89, 0x74, - 0xea, 0xc7, 0x70, 0xd2, 0xce, 0x17, 0xaf, 0xd3, 0xd9, 0x1b, 0xe3, 0xec, 0x35, 0x69, 0x5c, 0x88, - 0xb3, 0xf8, 0xa3, 0xe5, 0x64, 0x62, 0xbe, 0xa2, 0xa1, 0xf7, 0x4d, 0x25, 0xe7, 0x1b, 0x6e, 0x9b, - 0x93, 0x6f, 0x13, 0xce, 0x69, 0xb9, 0xcd, 0xae, 0x06, 0x0e, 0x73, 0xde, 0x70, 0xd9, 0x76, 0xaa, - 0xc9, 0x45, 0x8f, 0xde, 0xdf, 0x2f, 0x9f, 0x5b, 0x6b, 0x47, 0x88, 0xdb, 0xf3, 0x41, 0x37, 0xe0, - 0x24, 0x8f, 0x3c, 0x30, 0x4f, 0x9c, 0x7a, 0xc3, 0xf5, 0x94, 0xe0, 0xc5, 0x97, 0xfc, 0x99, 0xfb, - 0xfb, 0xe5, 0x93, 0x33, 0x59, 0x04, 0x38, 0xbb, 0x1c, 0xfa, 0x30, 0x94, 0xea, 0x5e, 0x28, 0xfa, - 0xa0, 0xcf, 0x48, 0x1f, 0x57, 0x9a, 0x5f, 0xad, 0xaa, 0xef, 0x8f, 0xff, 0xe0, 0xb8, 0x00, 0xda, - 0xe4, 0xb6, 0x01, 0xa5, 0x2d, 0xea, 0x4f, 0x45, 0x5e, 0x4b, 0x2a, 0x54, 0x8d, 0xb7, 0xc7, 0xdc, - 0x28, 0xa6, 0x9e, 0xe4, 0x18, 0xcf, 0x92, 0x0d, 0xc6, 0xe8, 0x75, 0x40, 0x22, 0x4d, 0xc1, 0x4c, - 0x8d, 0x65, 0xd5, 0x61, 0x47, 0xe3, 0x80, 0xf9, 0x1a, 0xb6, 0x9a, 0xa2, 0xc0, 0x19, 0xa5, 0xd0, - 0x35, 0xba, 0xab, 0xe8, 0x50, 0xb1, 0x6b, 0xa9, 0x24, 0xa5, 0xf3, 0xa4, 0x19, 0x10, 0xe6, 0x63, - 0x66, 0x72, 0xc4, 0x89, 0x72, 0xa8, 0x0e, 0x67, 0x9d, 0x56, 0xe4, 0x33, 0xb3, 0x8b, 0x49, 0xba, - 0xe6, 0x6f, 0x13, 0x8f, 0x59, 0x3c, 0x07, 0x66, 0x2f, 0x50, 0xc9, 0x6e, 0xa6, 0x0d, 0x1d, 0x6e, - 0xcb, 0x85, 0x4a, 0xe4, 0x2a, 0x2b, 0x39, 0x98, 0xf1, 0xe4, 0x32, 0x32, 0x93, 0xbf, 0x04, 0x83, - 0x5b, 0x7e, 0x18, 0xad, 0x92, 0xe8, 0x8e, 0x1f, 0x6c, 0x8b, 0xb8, 0xc8, 0x71, 0x2c, 0xfa, 0x18, - 0x85, 0x75, 0x3a, 0x7a, 0xe5, 0x66, 0xfe, 0x38, 0x4b, 0xf3, 0xcc, 0x15, 0x62, 0x20, 0xde, 0x63, - 0xae, 0x71, 0x30, 0x96, 0x78, 0x49, 0xba, 0x54, 0x99, 0x63, 0x6e, 0x0d, 0x09, 0xd2, 0xa5, 0xca, - 0x1c, 0x96, 0x78, 0x3a, 0x5d, 0xc3, 0x2d, 0x27, 0x20, 0x95, 0xc0, 0xaf, 0x91, 0x50, 0xcb, 0x80, - 0xf0, 0x08, 0x8f, 0xfa, 0x4c, 0xa7, 0x6b, 0x35, 0x8b, 0x00, 0x67, 0x97, 0x43, 0x24, 0x9d, 0xd7, - 0x6f, 0x24, 0xdf, 0x1e, 0x95, 0x96, 0x67, 0xba, 0x4c, 0xed, 0xe7, 0xc1, 0x98, 0xca, 0x28, 0xc8, - 0xe3, 0x3c, 0x87, 0x93, 0xa3, 0x6c, 0x6e, 0x77, 0x1f, 0x24, 0x5a, 0x59, 0xf8, 0x96, 0x12, 0x9c, - 0x70, 0x8a, 0xb7, 0x11, 0x32, 0x70, 0xac, 0x63, 0xc8, 0xc0, 0xcb, 0x50, 0x0a, 0x5b, 0xeb, 0x75, - 0x7f, 0xc7, 0x71, 0x3d, 0xe6, 0xd6, 0xa0, 0xdd, 0xfd, 0xaa, 0x12, 0x81, 0x63, 0x1a, 0xb4, 0x08, - 0x03, 0x8e, 0x34, 0xdf, 0xa1, 0xfc, 0x20, 0x51, 0xca, 0x68, 0xc7, 0xe3, 0xa6, 0x48, 0x83, 0x9d, - 0x2a, 0x8b, 0x5e, 0x85, 0x61, 0xf1, 0x72, 0x5e, 0x24, 0xe1, 0x9d, 0x30, 0x9f, 0x37, 0x56, 0x75, - 0x24, 0x36, 0x69, 0xd1, 0x4d, 0x18, 0x8c, 0xfc, 0x06, 0x7b, 0xa3, 0x47, 0xc5, 0xbc, 0x53, 0xf9, - 0xe1, 0x0e, 0xd7, 0x14, 0x99, 0xae, 0xb5, 0x56, 0x45, 0xb1, 0xce, 0x07, 0xad, 0xf1, 0xf9, 0xce, - 0xf2, 0x1d, 0x90, 0x50, 0x64, 0x71, 0x3d, 0x97, 0xe7, 0x93, 0xc6, 0xc8, 0xcc, 0xe5, 0x20, 0x4a, - 0x62, 0x9d, 0x0d, 0xba, 0x0a, 0xe3, 0xcd, 0xc0, 0xf5, 0xd9, 0x9c, 0x50, 0x96, 0xdb, 0x49, 0x33, - 0xbb, 0x59, 0x25, 0x49, 0x80, 0xd3, 0x65, 0x58, 0xe0, 0x03, 0x01, 0x9c, 0x3c, 0xc3, 0x33, 0xb4, - 0xf0, 0xab, 0x34, 0x87, 0x61, 0x85, 0x45, 0x2b, 0x6c, 0x27, 0xe6, 0x5a, 0xa0, 0xc9, 0xa9, 0xfc, - 0xb8, 0x54, 0xba, 0xb6, 0x88, 0x0b, 0xaf, 0xea, 0x2f, 0x8e, 0x39, 0xa0, 0xba, 0x96, 0x18, 0x95, - 0x5e, 0x01, 0xc2, 0xc9, 0xb3, 0x6d, 0x9c, 0x22, 0x13, 0xb7, 0xb2, 0x58, 0x20, 0x30, 0xc0, 0x21, - 0x4e, 0xf0, 0x44, 0x1f, 0x85, 0x31, 0x11, 0x4d, 0x33, 0xee, 0xa6, 0x73, 0xf1, 0xcb, 0x07, 0x9c, - 0xc0, 0xe1, 0x14, 0x35, 0xcf, 0x90, 0xe2, 0xac, 0x37, 0x88, 0xd8, 0xfa, 0x96, 0x5d, 0x6f, 0x3b, - 0x9c, 0x3c, 0xcf, 0xf6, 0x07, 0x91, 0x21, 0x25, 0x89, 0xc5, 0x19, 0x25, 0xd0, 0x1a, 0x8c, 0x35, - 0x03, 0x42, 0x76, 0x98, 0xa0, 0x2f, 0xce, 0xb3, 0x32, 0x8f, 0xfb, 0x41, 0x5b, 0x52, 0x49, 0xe0, - 0x0e, 0x32, 0x60, 0x38, 0xc5, 0x01, 0xdd, 0x81, 0x01, 0x7f, 0x97, 0x04, 0x5b, 0xc4, 0xa9, 0x4f, - 0x5e, 0x68, 0xf3, 0x12, 0x47, 0x1c, 0x6e, 0x37, 0x04, 0x6d, 0xc2, 0xdb, 0x43, 0x82, 0x3b, 0x7b, - 0x7b, 0xc8, 0xca, 0xd0, 0xff, 0x61, 0xc1, 0x19, 0x69, 0x9c, 0xa9, 0x36, 0x69, 0xaf, 0xcf, 0xf9, - 0x5e, 0x18, 0x05, 0x3c, 0x52, 0xc5, 0xa3, 0xf9, 0xd1, 0x1b, 0xd6, 0x72, 0x0a, 0x29, 0x45, 0xf4, - 0x99, 0x3c, 0x8a, 0x10, 0xe7, 0xd7, 0x48, 0xaf, 0xa6, 0x21, 0x89, 0xe4, 0x66, 0x34, 0x13, 0x2e, - 0xbe, 0x31, 0xbf, 0x3a, 0xf9, 0x18, 0x0f, 0xb3, 0x41, 0x17, 0x43, 0x35, 0x89, 0xc4, 0x69, 0x7a, - 0x74, 0x05, 0x0a, 0x7e, 0x38, 0xf9, 0x78, 0x9b, 0x5c, 0xba, 0x7e, 0xfd, 0x46, 0x95, 0x7b, 0xfd, - 0xdd, 0xa8, 0xe2, 0x82, 0x1f, 0xca, 0x2c, 0x25, 0xf4, 0x3e, 0x16, 0x4e, 0x3e, 0xc1, 0xd5, 0x96, - 0x32, 0x4b, 0x09, 0x03, 0xe2, 0x18, 0x8f, 0xb6, 0x60, 0x34, 0x34, 0xee, 0xbd, 0xe1, 0xe4, 0x45, - 0xd6, 0x53, 0x4f, 0xe4, 0x0d, 0x9a, 0x41, 0xad, 0xa5, 0x0f, 0x30, 0xb9, 0xe0, 0x24, 0x5b, 0xbe, - 0xba, 0xb4, 0x9b, 0x77, 0x38, 0xf9, 0x64, 0x87, 0xd5, 0xa5, 0x11, 0xeb, 0xab, 0x4b, 0xe7, 0x81, - 0x13, 0x3c, 0xa7, 0xbe, 0x03, 0xc6, 0x53, 0xe2, 0xd2, 0x61, 0x3c, 0xdc, 0xa7, 0xb6, 0x61, 0xd8, - 0x98, 0x92, 0x0f, 0xd5, 0xbb, 0xe2, 0xb7, 0x4b, 0x50, 0x52, 0x56, 0x6f, 0x74, 0xd9, 0x74, 0xa8, - 0x38, 0x93, 0x74, 0xa8, 0x18, 0xa8, 0xf8, 0x75, 0xc3, 0x87, 0x62, 0x2d, 0x23, 0x18, 0x63, 0xde, - 0x06, 0xd8, 0xfd, 0x23, 0x15, 0xcd, 0x94, 0x50, 0xec, 0xda, 0x33, 0xa3, 0xa7, 0xad, 0x75, 0xe2, - 0x2a, 0x8c, 0x7b, 0x3e, 0x93, 0xd1, 0x49, 0x5d, 0x0a, 0x60, 0x4c, 0xce, 0x2a, 0xe9, 0xd1, 0x8d, - 0x12, 0x04, 0x38, 0x5d, 0x86, 0x56, 0xc8, 0x05, 0xa5, 0xa4, 0x39, 0x84, 0xcb, 0x51, 0x58, 0x60, - 0xe9, 0xdd, 0x90, 0xff, 0x0a, 0x27, 0xc7, 0xf2, 0xef, 0x86, 0xbc, 0x50, 0x52, 0x18, 0x0b, 0xa5, - 0x30, 0xc6, 0xb4, 0xff, 0x4d, 0xbf, 0xbe, 0x54, 0x11, 0x62, 0xbe, 0x16, 0x49, 0xb8, 0xbe, 0x54, - 0xc1, 0x1c, 0x87, 0x66, 0xa0, 0x8f, 0xfd, 0x08, 0x27, 0x87, 0xf2, 0xa3, 0xe1, 0xb0, 0x12, 0x5a, - 0x96, 0x34, 0x56, 0x00, 0x8b, 0x82, 0x4c, 0xbb, 0x4b, 0xef, 0x46, 0x4c, 0xbb, 0xdb, 0xff, 0x80, - 0xda, 0x5d, 0xc9, 0x00, 0xc7, 0xbc, 0xd0, 0x5d, 0x38, 0x69, 0xdc, 0x47, 0xd5, 0xab, 0x1d, 0xc8, - 0x37, 0xfc, 0x26, 0x88, 0x67, 0xcf, 0x89, 0x46, 0x9f, 0x5c, 0xca, 0xe2, 0x84, 0xb3, 0x2b, 0x40, - 0x0d, 0x18, 0xaf, 0xa5, 0x6a, 0x1d, 0xe8, 0xbe, 0x56, 0x35, 0x2f, 0xd2, 0x35, 0xa6, 0x19, 0xa3, - 0x57, 0x61, 0xe0, 0x6d, 0x3f, 0x64, 0x47, 0xa4, 0xb8, 0x9a, 0xc8, 0x70, 0x0e, 0x03, 0x6f, 0xdc, - 0xa8, 0x32, 0xf8, 0xc1, 0x7e, 0x79, 0xb0, 0xe2, 0xd7, 0xe5, 0x5f, 0xac, 0x0a, 0xa0, 0xef, 0xb7, - 0x60, 0x2a, 0x7d, 0xe1, 0x55, 0x8d, 0x1e, 0xee, 0xbe, 0xd1, 0xb6, 0xa8, 0x74, 0x6a, 0x21, 0x97, - 0x1d, 0x6e, 0x53, 0x15, 0xfa, 0x10, 0x5d, 0x4f, 0xa1, 0x7b, 0x8f, 0x88, 0x14, 0xb3, 0x8f, 0xc6, - 0xeb, 0x89, 0x42, 0x0f, 0xf6, 0xcb, 0xa3, 0x7c, 0x67, 0x74, 0xef, 0xc9, 0xe7, 0x4d, 0xa2, 0x00, - 0xfa, 0x4e, 0x38, 0x19, 0xa4, 0x35, 0xa8, 0x44, 0x0a, 0xe1, 0x4f, 0x77, 0xb3, 0xcb, 0x26, 0x07, - 0x1c, 0x67, 0x31, 0xc4, 0xd9, 0xf5, 0xd8, 0xbf, 0x62, 0x31, 0xfd, 0xb6, 0x68, 0x16, 0x09, 0x5b, - 0x8d, 0xe3, 0x48, 0x6c, 0xbd, 0x60, 0xd8, 0x8e, 0x1f, 0xd8, 0xb1, 0xe8, 0x1f, 0x59, 0xcc, 0xb1, - 0xe8, 0x18, 0x5f, 0x31, 0xbd, 0x01, 0x03, 0x91, 0x4c, 0x38, 0xde, 0x26, 0x17, 0xb7, 0xd6, 0x28, - 0xe6, 0x5c, 0xa5, 0x2e, 0x39, 0x2a, 0xb7, 0xb8, 0x62, 0x63, 0xff, 0x7d, 0x3e, 0x02, 0x12, 0x73, - 0x0c, 0x26, 0xba, 0x79, 0xd3, 0x44, 0x57, 0xee, 0xf0, 0x05, 0x39, 0xa6, 0xba, 0xbf, 0x67, 0xb6, - 0x9b, 0x29, 0xf7, 0xde, 0xed, 0x1e, 0x6d, 0xf6, 0x17, 0x2c, 0x80, 0x38, 0xc8, 0x7c, 0x17, 0x29, - 0x25, 0x5f, 0xa6, 0xd7, 0x1a, 0x3f, 0xf2, 0x6b, 0x7e, 0x43, 0x18, 0x28, 0xce, 0xc6, 0x56, 0x42, - 0x0e, 0x3f, 0xd0, 0x7e, 0x63, 0x45, 0x8d, 0xca, 0x32, 0xa4, 0x65, 0x31, 0xb6, 0x5b, 0x1b, 0xe1, - 0x2c, 0xbf, 0x64, 0xc1, 0x89, 0x2c, 0x97, 0x78, 0x7a, 0x49, 0xe6, 0x6a, 0x4e, 0xe5, 0x6d, 0xa8, - 0x46, 0xf3, 0x96, 0x80, 0x63, 0x45, 0xd1, 0x75, 0xae, 0xce, 0xc3, 0x45, 0x77, 0xbf, 0x01, 0xc3, - 0x95, 0x80, 0x68, 0xf2, 0xc5, 0x6b, 0x3c, 0x4c, 0x0a, 0x6f, 0xcf, 0xb3, 0x87, 0x0e, 0x91, 0x62, - 0x7f, 0xb9, 0x00, 0x27, 0xb8, 0xd3, 0xce, 0xcc, 0xae, 0xef, 0xd6, 0x2b, 0x7e, 0x5d, 0x3c, 0x64, - 0x7c, 0x13, 0x86, 0x9a, 0x9a, 0x6e, 0xba, 0x5d, 0xa4, 0x62, 0x5d, 0x87, 0x1d, 0x6b, 0xd3, 0x74, - 0x28, 0x36, 0x78, 0xa1, 0x3a, 0x0c, 0x91, 0x5d, 0xb7, 0xa6, 0x3c, 0x3f, 0x0a, 0x87, 0x3e, 0xa4, - 0x55, 0x2d, 0x0b, 0x1a, 0x1f, 0x6c, 0x70, 0x7d, 0x08, 0x19, 0xf4, 0xed, 0x1f, 0xb5, 0xe0, 0x74, - 0x4e, 0x5c, 0x63, 0x5a, 0xdd, 0x1d, 0xe6, 0x1e, 0x25, 0xa6, 0xad, 0xaa, 0x8e, 0x3b, 0x4d, 0x61, - 0x81, 0x45, 0x1f, 0x03, 0xe0, 0x4e, 0x4f, 0xc4, 0xab, 0x75, 0x0c, 0x00, 0x6b, 0xc4, 0xae, 0xd4, - 0xc2, 0x10, 0xca, 0xf2, 0x58, 0xe3, 0x65, 0x7f, 0xa9, 0x07, 0x7a, 0x99, 0x93, 0x0d, 0xaa, 0x40, - 0xff, 0x16, 0xcf, 0x54, 0xd5, 0x76, 0xdc, 0x28, 0xad, 0x4c, 0x7e, 0x15, 0x8f, 0x9b, 0x06, 0xc5, - 0x92, 0x0d, 0x5a, 0x81, 0x09, 0x9e, 0x30, 0xac, 0x31, 0x4f, 0x1a, 0xce, 0x9e, 0x54, 0xfb, 0xf2, - 0x1c, 0xd8, 0x4a, 0xfd, 0xbd, 0x94, 0x26, 0xc1, 0x59, 0xe5, 0xd0, 0x6b, 0x30, 0x42, 0xaf, 0xe1, - 0x7e, 0x2b, 0x92, 0x9c, 0x78, 0xaa, 0x30, 0x75, 0x33, 0x59, 0x33, 0xb0, 0x38, 0x41, 0x8d, 0x5e, - 0x85, 0xe1, 0x66, 0x4a, 0xc1, 0xdd, 0x1b, 0x6b, 0x82, 0x4c, 0xa5, 0xb6, 0x49, 0xcb, 0xbc, 0xe2, + // 15095 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x70, 0x5c, 0xd9, + 0x75, 0x18, 0xac, 0xd7, 0x8d, 0xad, 0x0f, 0xf6, 0x0b, 0x92, 0x03, 0x62, 0x48, 0x36, 0xe7, 0xcd, + 0x0c, 0x87, 0xb3, 0x81, 0xe2, 0x2c, 0xd2, 0x68, 0x66, 0x34, 0x16, 0x56, 0x12, 0x43, 0x00, 0xec, + 0xb9, 0x0d, 0x92, 0xd2, 0x68, 0xa4, 0x4f, 0x0f, 0xdd, 0x17, 0xc0, 0x13, 0x1a, 0xef, 0xf5, 0xbc, + 0xf7, 0x1a, 0x24, 0xf8, 0x49, 0x65, 0x5b, 0xfe, 0x2c, 0x5b, 0xb2, 0xbf, 0xaf, 0x54, 0x5f, 0xf9, + 0x5b, 0x4a, 0x76, 0xb9, 0xbe, 0xb2, 0xfd, 0xc5, 0x76, 0x64, 0x27, 0x51, 0xe4, 0xd8, 0x8e, 0xe5, + 0x2d, 0x5b, 0xc5, 0x4e, 0xa5, 0x1c, 0xc7, 0x55, 0xb1, 0x5c, 0xe5, 0x0a, 0x6c, 0xd1, 0xa9, 0x72, + 0x5c, 0x95, 0xd8, 0xce, 0xf2, 0x23, 0x41, 0x9c, 0x38, 0x75, 0xd7, 0x77, 0xef, 0x5b, 0xba, 0x1b, + 0x1c, 0x10, 0x1a, 0xa9, 0xe6, 0x5f, 0xf7, 0x39, 0xe7, 0x9e, 0x7b, 0xdf, 0x5d, 0xcf, 0x3d, 0xe7, + 0xdc, 0x73, 0xe0, 0x95, 0xed, 0x97, 0xc2, 0x69, 0xd7, 0xbf, 0xb4, 0xdd, 0x5a, 0x27, 0x81, 0x47, + 0x22, 0x12, 0x5e, 0xda, 0x25, 0x5e, 0xdd, 0x0f, 0x2e, 0x09, 0x84, 0xd3, 0x74, 0x2f, 0xd5, 0xfc, + 0x80, 0x5c, 0xda, 0xbd, 0x7c, 0x69, 0x93, 0x78, 0x24, 0x70, 0x22, 0x52, 0x9f, 0x6e, 0x06, 0x7e, + 0xe4, 0x23, 0xc4, 0x69, 0xa6, 0x9d, 0xa6, 0x3b, 0x4d, 0x69, 0xa6, 0x77, 0x2f, 0x4f, 0x3d, 0xbb, + 0xe9, 0x46, 0x5b, 0xad, 0xf5, 0xe9, 0x9a, 0xbf, 0x73, 0x69, 0xd3, 0xdf, 0xf4, 0x2f, 0x31, 0xd2, + 0xf5, 0xd6, 0x06, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc5, 0xd4, 0x0b, 0x71, 0x35, 0x3b, 0x4e, + 0x6d, 0xcb, 0xf5, 0x48, 0xb0, 0x77, 0xa9, 0xb9, 0xbd, 0xc9, 0xea, 0x0d, 0x48, 0xe8, 0xb7, 0x82, + 0x1a, 0x49, 0x56, 0xdc, 0xb6, 0x54, 0x78, 0x69, 0x87, 0x44, 0x4e, 0x46, 0x73, 0xa7, 0x2e, 0xe5, + 0x95, 0x0a, 0x5a, 0x5e, 0xe4, 0xee, 0xa4, 0xab, 0xf9, 0x40, 0xa7, 0x02, 0x61, 0x6d, 0x8b, 0xec, + 0x38, 0xa9, 0x72, 0xcf, 0xe7, 0x95, 0x6b, 0x45, 0x6e, 0xe3, 0x92, 0xeb, 0x45, 0x61, 0x14, 0x24, + 0x0b, 0xd9, 0xdf, 0xb0, 0xe0, 0xfc, 0xcc, 0xad, 0xea, 0x42, 0xc3, 0x09, 0x23, 0xb7, 0x36, 0xdb, + 0xf0, 0x6b, 0xdb, 0xd5, 0xc8, 0x0f, 0xc8, 0x4d, 0xbf, 0xd1, 0xda, 0x21, 0x55, 0xd6, 0x11, 0xe8, + 0x19, 0x18, 0xd8, 0x65, 0xff, 0x97, 0xe6, 0x27, 0xad, 0xf3, 0xd6, 0xc5, 0xd2, 0xec, 0xd8, 0x6f, + 0xed, 0x97, 0xdf, 0x77, 0x6f, 0xbf, 0x3c, 0x70, 0x53, 0xc0, 0xb1, 0xa2, 0x40, 0x17, 0xa0, 0x6f, + 0x23, 0x5c, 0xdb, 0x6b, 0x92, 0xc9, 0x02, 0xa3, 0x1d, 0x11, 0xb4, 0x7d, 0x8b, 0x55, 0x0a, 0xc5, + 0x02, 0x8b, 0x2e, 0x41, 0xa9, 0xe9, 0x04, 0x91, 0x1b, 0xb9, 0xbe, 0x37, 0x59, 0x3c, 0x6f, 0x5d, + 0xec, 0x9d, 0x1d, 0x17, 0xa4, 0xa5, 0x8a, 0x44, 0xe0, 0x98, 0x86, 0x36, 0x23, 0x20, 0x4e, 0xfd, + 0xba, 0xd7, 0xd8, 0x9b, 0xec, 0x39, 0x6f, 0x5d, 0x1c, 0x88, 0x9b, 0x81, 0x05, 0x1c, 0x2b, 0x0a, + 0xfb, 0xcb, 0x05, 0x18, 0x98, 0xd9, 0xd8, 0x70, 0x3d, 0x37, 0xda, 0x43, 0x37, 0x61, 0xc8, 0xf3, + 0xeb, 0x44, 0xfe, 0x67, 0x5f, 0x31, 0xf8, 0xdc, 0xf9, 0xe9, 0xf4, 0x54, 0x9a, 0x5e, 0xd5, 0xe8, + 0x66, 0xc7, 0xee, 0xed, 0x97, 0x87, 0x74, 0x08, 0x36, 0xf8, 0x20, 0x0c, 0x83, 0x4d, 0xbf, 0xae, + 0xd8, 0x16, 0x18, 0xdb, 0x72, 0x16, 0xdb, 0x4a, 0x4c, 0x36, 0x3b, 0x7a, 0x6f, 0xbf, 0x3c, 0xa8, + 0x01, 0xb0, 0xce, 0x04, 0xad, 0xc3, 0x28, 0xfd, 0xeb, 0x45, 0xae, 0xe2, 0x5b, 0x64, 0x7c, 0x1f, + 0xcd, 0xe3, 0xab, 0x91, 0xce, 0x4e, 0xdc, 0xdb, 0x2f, 0x8f, 0x26, 0x80, 0x38, 0xc9, 0xd0, 0xbe, + 0x0b, 0x23, 0x33, 0x51, 0xe4, 0xd4, 0xb6, 0x48, 0x9d, 0x8f, 0x20, 0x7a, 0x01, 0x7a, 0x3c, 0x67, + 0x87, 0x88, 0xf1, 0x3d, 0x2f, 0x3a, 0xb6, 0x67, 0xd5, 0xd9, 0x21, 0x07, 0xfb, 0xe5, 0xb1, 0x1b, + 0x9e, 0xfb, 0x76, 0x4b, 0xcc, 0x0a, 0x0a, 0xc3, 0x8c, 0x1a, 0x3d, 0x07, 0x50, 0x27, 0xbb, 0x6e, + 0x8d, 0x54, 0x9c, 0x68, 0x4b, 0x8c, 0x37, 0x12, 0x65, 0x61, 0x5e, 0x61, 0xb0, 0x46, 0x65, 0xdf, + 0x81, 0xd2, 0xcc, 0xae, 0xef, 0xd6, 0x2b, 0x7e, 0x3d, 0x44, 0xdb, 0x30, 0xda, 0x0c, 0xc8, 0x06, + 0x09, 0x14, 0x68, 0xd2, 0x3a, 0x5f, 0xbc, 0x38, 0xf8, 0xdc, 0xc5, 0xcc, 0x8f, 0x35, 0x49, 0x17, + 0xbc, 0x28, 0xd8, 0x9b, 0x7d, 0x48, 0xd4, 0x37, 0x9a, 0xc0, 0xe2, 0x24, 0x67, 0xfb, 0x1f, 0x17, + 0xe0, 0xe4, 0xcc, 0xdd, 0x56, 0x40, 0xe6, 0xdd, 0x70, 0x3b, 0x39, 0xc3, 0xeb, 0x6e, 0xb8, 0xbd, + 0x1a, 0xf7, 0x80, 0x9a, 0x5a, 0xf3, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x16, 0xfa, 0xe9, 0xef, 0x1b, + 0x78, 0x49, 0x7c, 0xf2, 0x84, 0x20, 0x1e, 0x9c, 0x77, 0x22, 0x67, 0x9e, 0xa3, 0xb0, 0xa4, 0x41, + 0x2b, 0x30, 0x58, 0x63, 0x0b, 0x72, 0x73, 0xc5, 0xaf, 0x13, 0x36, 0x98, 0xa5, 0xd9, 0xa7, 0x29, + 0xf9, 0x5c, 0x0c, 0x3e, 0xd8, 0x2f, 0x4f, 0xf2, 0xb6, 0x09, 0x16, 0x1a, 0x0e, 0xeb, 0xe5, 0x91, + 0xad, 0xd6, 0x57, 0x0f, 0xe3, 0x04, 0x19, 0x6b, 0xeb, 0xa2, 0xb6, 0x54, 0x7a, 0xd9, 0x52, 0x19, + 0xca, 0x5e, 0x26, 0xe8, 0x32, 0xf4, 0x6c, 0xbb, 0x5e, 0x7d, 0xb2, 0x8f, 0xf1, 0x3a, 0x4b, 0xc7, + 0xfc, 0x9a, 0xeb, 0xd5, 0x0f, 0xf6, 0xcb, 0xe3, 0x46, 0x73, 0x28, 0x10, 0x33, 0x52, 0xfb, 0x3f, + 0x59, 0x50, 0x66, 0xb8, 0x45, 0xb7, 0x41, 0x2a, 0x24, 0x08, 0xdd, 0x30, 0x22, 0x5e, 0x64, 0x74, + 0xe8, 0x73, 0x00, 0x21, 0xa9, 0x05, 0x24, 0xd2, 0xba, 0x54, 0x4d, 0x8c, 0xaa, 0xc2, 0x60, 0x8d, + 0x8a, 0x6e, 0x08, 0xe1, 0x96, 0x13, 0xb0, 0xf9, 0x25, 0x3a, 0x56, 0x6d, 0x08, 0x55, 0x89, 0xc0, + 0x31, 0x8d, 0xb1, 0x21, 0x14, 0x3b, 0x6d, 0x08, 0xe8, 0xc3, 0x30, 0x1a, 0x57, 0x16, 0x36, 0x9d, + 0x9a, 0xec, 0x40, 0xb6, 0x64, 0xaa, 0x26, 0x0a, 0x27, 0x69, 0xed, 0xbf, 0x69, 0x89, 0xc9, 0x43, + 0xbf, 0xfa, 0x5d, 0xfe, 0xad, 0xf6, 0x2f, 0x5b, 0xd0, 0x3f, 0xeb, 0x7a, 0x75, 0xd7, 0xdb, 0x44, + 0x9f, 0x82, 0x01, 0x7a, 0x36, 0xd5, 0x9d, 0xc8, 0x11, 0xfb, 0xde, 0xfb, 0xb5, 0xb5, 0xa5, 0x8e, + 0x8a, 0xe9, 0xe6, 0xf6, 0x26, 0x05, 0x84, 0xd3, 0x94, 0x9a, 0xae, 0xb6, 0xeb, 0xeb, 0x9f, 0x26, + 0xb5, 0x68, 0x85, 0x44, 0x4e, 0xfc, 0x39, 0x31, 0x0c, 0x2b, 0xae, 0xe8, 0x1a, 0xf4, 0x45, 0x4e, + 0xb0, 0x49, 0x22, 0xb1, 0x01, 0x66, 0x6e, 0x54, 0xbc, 0x24, 0xa6, 0x2b, 0x92, 0x78, 0x35, 0x12, + 0x1f, 0x0b, 0x6b, 0xac, 0x28, 0x16, 0x2c, 0xec, 0xff, 0xde, 0x0f, 0xa7, 0xe7, 0xaa, 0x4b, 0x39, + 0xf3, 0xea, 0x02, 0xf4, 0xd5, 0x03, 0x77, 0x97, 0x04, 0xa2, 0x9f, 0x15, 0x97, 0x79, 0x06, 0xc5, + 0x02, 0x8b, 0x5e, 0x82, 0x21, 0x7e, 0x20, 0x5d, 0x75, 0xbc, 0x7a, 0x43, 0x76, 0xf1, 0x09, 0x41, + 0x3d, 0x74, 0x53, 0xc3, 0x61, 0x83, 0xf2, 0x90, 0x93, 0xea, 0x42, 0x62, 0x31, 0xe6, 0x1d, 0x76, + 0x5f, 0xb0, 0x60, 0x8c, 0x57, 0x33, 0x13, 0x45, 0x81, 0xbb, 0xde, 0x8a, 0x48, 0x38, 0xd9, 0xcb, + 0x76, 0xba, 0xb9, 0xac, 0xde, 0xca, 0xed, 0x81, 0xe9, 0x9b, 0x09, 0x2e, 0x7c, 0x13, 0x9c, 0x14, + 0xf5, 0x8e, 0x25, 0xd1, 0x38, 0x55, 0x2d, 0xfa, 0x3e, 0x0b, 0xa6, 0x6a, 0xbe, 0x17, 0x05, 0x7e, + 0xa3, 0x41, 0x82, 0x4a, 0x6b, 0xbd, 0xe1, 0x86, 0x5b, 0x7c, 0x9e, 0x62, 0xb2, 0xc1, 0x76, 0x82, + 0x9c, 0x31, 0x54, 0x44, 0x62, 0x0c, 0xcf, 0xdd, 0xdb, 0x2f, 0x4f, 0xcd, 0xe5, 0xb2, 0xc2, 0x6d, + 0xaa, 0x41, 0xdb, 0x80, 0xe8, 0x51, 0x5a, 0x8d, 0x9c, 0x4d, 0x12, 0x57, 0xde, 0xdf, 0x7d, 0xe5, + 0xa7, 0xee, 0xed, 0x97, 0xd1, 0x6a, 0x8a, 0x05, 0xce, 0x60, 0x8b, 0xde, 0x86, 0x13, 0x14, 0x9a, + 0xfa, 0xd6, 0x81, 0xee, 0xab, 0x9b, 0xbc, 0xb7, 0x5f, 0x3e, 0xb1, 0x9a, 0xc1, 0x04, 0x67, 0xb2, + 0x46, 0xdf, 0x63, 0xc1, 0xe9, 0xf8, 0xf3, 0x17, 0xee, 0x34, 0x1d, 0xaf, 0x1e, 0x57, 0x5c, 0xea, + 0xbe, 0x62, 0xba, 0x27, 0x9f, 0x9e, 0xcb, 0xe3, 0x84, 0xf3, 0x2b, 0x41, 0x1e, 0x4c, 0xd0, 0xa6, + 0x25, 0xeb, 0x86, 0xee, 0xeb, 0x7e, 0xe8, 0xde, 0x7e, 0x79, 0x62, 0x35, 0xcd, 0x03, 0x67, 0x31, + 0x9e, 0x9a, 0x83, 0x93, 0x99, 0xb3, 0x13, 0x8d, 0x41, 0x71, 0x9b, 0x70, 0xa9, 0xab, 0x84, 0xe9, + 0x4f, 0x74, 0x02, 0x7a, 0x77, 0x9d, 0x46, 0x4b, 0x2c, 0x4c, 0xcc, 0xff, 0xbc, 0x5c, 0x78, 0xc9, + 0xb2, 0xff, 0x49, 0x11, 0x46, 0xe7, 0xaa, 0x4b, 0xf7, 0xb5, 0xea, 0xf5, 0x63, 0xaf, 0xd0, 0xf6, + 0xd8, 0x8b, 0x0f, 0xd1, 0x62, 0xee, 0x21, 0xfa, 0xdd, 0x19, 0x4b, 0xb6, 0x87, 0x2d, 0xd9, 0x0f, + 0xe5, 0x2c, 0xd9, 0x23, 0x5e, 0xa8, 0xbb, 0x39, 0xb3, 0xb6, 0x97, 0x0d, 0x60, 0xa6, 0x84, 0xb4, + 0xec, 0xd7, 0x9c, 0x46, 0x72, 0xab, 0x3d, 0xe4, 0xd4, 0x3d, 0x9a, 0x71, 0xac, 0xc1, 0xd0, 0x9c, + 0xd3, 0x74, 0xd6, 0xdd, 0x86, 0x1b, 0xb9, 0x24, 0x44, 0x4f, 0x40, 0xd1, 0xa9, 0xd7, 0x99, 0x74, + 0x57, 0x9a, 0x3d, 0x79, 0x6f, 0xbf, 0x5c, 0x9c, 0xa9, 0x53, 0x31, 0x03, 0x14, 0xd5, 0x1e, 0xa6, + 0x14, 0xe8, 0x29, 0xe8, 0xa9, 0x07, 0x7e, 0x73, 0xb2, 0xc0, 0x28, 0xe9, 0x2a, 0xef, 0x99, 0x0f, + 0xfc, 0x66, 0x82, 0x94, 0xd1, 0xd8, 0xbf, 0x59, 0x80, 0x33, 0x73, 0xa4, 0xb9, 0xb5, 0x58, 0xcd, + 0x39, 0x2f, 0x2e, 0xc2, 0xc0, 0x8e, 0xef, 0xb9, 0x91, 0x1f, 0x84, 0xa2, 0x6a, 0x36, 0x23, 0x56, + 0x04, 0x0c, 0x2b, 0x2c, 0x3a, 0x0f, 0x3d, 0xcd, 0x58, 0x88, 0x1d, 0x92, 0x02, 0x30, 0x13, 0x5f, + 0x19, 0x86, 0x52, 0xb4, 0x42, 0x12, 0x88, 0x19, 0xa3, 0x28, 0x6e, 0x84, 0x24, 0xc0, 0x0c, 0x13, + 0x4b, 0x02, 0x54, 0x46, 0x10, 0x27, 0x42, 0x42, 0x12, 0xa0, 0x18, 0xac, 0x51, 0xa1, 0x0a, 0x94, + 0xc2, 0xc4, 0xc8, 0x76, 0xb5, 0x34, 0x87, 0x99, 0xa8, 0xa0, 0x46, 0x32, 0x66, 0x62, 0x9c, 0x60, + 0x7d, 0x1d, 0x45, 0x85, 0xaf, 0x17, 0x00, 0xf1, 0x2e, 0xfc, 0x36, 0xeb, 0xb8, 0x1b, 0xe9, 0x8e, + 0xeb, 0x7e, 0x49, 0x1c, 0x55, 0xef, 0xfd, 0x67, 0x0b, 0xce, 0xcc, 0xb9, 0x5e, 0x9d, 0x04, 0x39, + 0x13, 0xf0, 0xc1, 0xdc, 0x9d, 0x0f, 0x27, 0xa4, 0x18, 0x53, 0xac, 0xe7, 0x08, 0xa6, 0x98, 0xfd, + 0x17, 0x16, 0x20, 0xfe, 0xd9, 0xef, 0xba, 0x8f, 0xbd, 0x91, 0xfe, 0xd8, 0x23, 0x98, 0x16, 0xf6, + 0xdf, 0xb6, 0x60, 0x70, 0xae, 0xe1, 0xb8, 0x3b, 0xe2, 0x53, 0xe7, 0x60, 0x5c, 0x2a, 0x8a, 0x18, + 0x58, 0x93, 0xfd, 0xe9, 0xe6, 0x36, 0x8e, 0x93, 0x48, 0x9c, 0xa6, 0x47, 0x1f, 0x87, 0xd3, 0x06, + 0x70, 0x8d, 0xec, 0x34, 0x1b, 0x4e, 0xa4, 0xdf, 0x0a, 0xd8, 0xe9, 0x8f, 0xf3, 0x88, 0x70, 0x7e, + 0x79, 0x7b, 0x19, 0x46, 0xe6, 0x1a, 0x2e, 0xf1, 0xa2, 0xa5, 0xca, 0x9c, 0xef, 0x6d, 0xb8, 0x9b, + 0xe8, 0x65, 0x18, 0x89, 0xdc, 0x1d, 0xe2, 0xb7, 0xa2, 0x2a, 0xa9, 0xf9, 0x1e, 0xbb, 0x6b, 0x5b, + 0x17, 0x7b, 0x67, 0xd1, 0xbd, 0xfd, 0xf2, 0xc8, 0x9a, 0x81, 0xc1, 0x09, 0x4a, 0xfb, 0x0f, 0xe9, + 0x88, 0xfb, 0x3b, 0x4d, 0xdf, 0x23, 0x5e, 0x34, 0xe7, 0x7b, 0x75, 0xae, 0x93, 0x79, 0x19, 0x7a, + 0x22, 0x3a, 0x82, 0xfc, 0xcb, 0x2f, 0xc8, 0xa5, 0x4d, 0xc7, 0xed, 0x60, 0xbf, 0x7c, 0x2a, 0x5d, + 0x82, 0x8d, 0x2c, 0x2b, 0x83, 0x3e, 0x04, 0x7d, 0x61, 0xe4, 0x44, 0xad, 0x50, 0x7c, 0xea, 0x23, + 0x72, 0xfc, 0xab, 0x0c, 0x7a, 0xb0, 0x5f, 0x1e, 0x55, 0xc5, 0x38, 0x08, 0x8b, 0x02, 0xe8, 0x49, + 0xe8, 0xdf, 0x21, 0x61, 0xe8, 0x6c, 0xca, 0xf3, 0x7b, 0x54, 0x94, 0xed, 0x5f, 0xe1, 0x60, 0x2c, + 0xf1, 0xe8, 0x51, 0xe8, 0x25, 0x41, 0xe0, 0x07, 0x62, 0x57, 0x19, 0x16, 0x84, 0xbd, 0x0b, 0x14, + 0x88, 0x39, 0xce, 0xfe, 0x17, 0x16, 0x8c, 0xaa, 0xb6, 0xf2, 0xba, 0x8e, 0xe1, 0xde, 0xf4, 0x26, + 0x40, 0x4d, 0x7e, 0x60, 0xc8, 0xce, 0xbb, 0xc1, 0xe7, 0x2e, 0x64, 0x8a, 0x16, 0xa9, 0x6e, 0x8c, + 0x39, 0x2b, 0x50, 0x88, 0x35, 0x6e, 0xf6, 0xaf, 0x59, 0x30, 0x91, 0xf8, 0xa2, 0x65, 0x37, 0x8c, + 0xd0, 0x5b, 0xa9, 0xaf, 0x9a, 0xee, 0xee, 0xab, 0x68, 0x69, 0xf6, 0x4d, 0x6a, 0xf1, 0x49, 0x88, + 0xf6, 0x45, 0x57, 0xa1, 0xd7, 0x8d, 0xc8, 0x8e, 0xfc, 0x98, 0x47, 0xdb, 0x7e, 0x0c, 0x6f, 0x55, + 0x3c, 0x22, 0x4b, 0xb4, 0x24, 0xe6, 0x0c, 0xec, 0xdf, 0x2c, 0x42, 0x89, 0x4f, 0xdb, 0x15, 0xa7, + 0x79, 0x0c, 0x63, 0xf1, 0x34, 0x94, 0xdc, 0x9d, 0x9d, 0x56, 0xe4, 0xac, 0x8b, 0x03, 0x68, 0x80, + 0x6f, 0x06, 0x4b, 0x12, 0x88, 0x63, 0x3c, 0x5a, 0x82, 0x1e, 0xd6, 0x14, 0xfe, 0x95, 0x4f, 0x64, + 0x7f, 0xa5, 0x68, 0xfb, 0xf4, 0xbc, 0x13, 0x39, 0x5c, 0xf6, 0x53, 0x27, 0x1f, 0x05, 0x61, 0xc6, + 0x02, 0x39, 0x00, 0xeb, 0xae, 0xe7, 0x04, 0x7b, 0x14, 0x36, 0x59, 0x64, 0x0c, 0x9f, 0x6d, 0xcf, + 0x70, 0x56, 0xd1, 0x73, 0xb6, 0xea, 0xc3, 0x62, 0x04, 0xd6, 0x98, 0x4e, 0x7d, 0x10, 0x4a, 0x8a, + 0xf8, 0x30, 0x22, 0xdc, 0xd4, 0x87, 0x61, 0x34, 0x51, 0x57, 0xa7, 0xe2, 0x43, 0xba, 0x04, 0xf8, + 0x2b, 0x6c, 0xcb, 0x10, 0xad, 0x5e, 0xf0, 0x76, 0xc5, 0xce, 0x79, 0x17, 0x4e, 0x34, 0x32, 0xf6, + 0x5e, 0x31, 0xae, 0xdd, 0xef, 0xd5, 0x67, 0xc4, 0x67, 0x9f, 0xc8, 0xc2, 0xe2, 0xcc, 0x3a, 0xa8, + 0x54, 0xe3, 0x37, 0xe9, 0x02, 0x71, 0x1a, 0xfa, 0x05, 0xe1, 0xba, 0x80, 0x61, 0x85, 0xa5, 0xfb, + 0xdd, 0x09, 0xd5, 0xf8, 0x6b, 0x64, 0xaf, 0x4a, 0x1a, 0xa4, 0x16, 0xf9, 0xc1, 0xb7, 0xb4, 0xf9, + 0x67, 0x79, 0xef, 0xf3, 0xed, 0x72, 0x50, 0x30, 0x28, 0x5e, 0x23, 0x7b, 0x7c, 0x28, 0xf4, 0xaf, + 0x2b, 0xb6, 0xfd, 0xba, 0xaf, 0x5a, 0x30, 0xac, 0xbe, 0xee, 0x18, 0xf6, 0x85, 0x59, 0x73, 0x5f, + 0x38, 0xdb, 0x76, 0x82, 0xe7, 0xec, 0x08, 0x5f, 0x2f, 0xc0, 0x69, 0x45, 0x43, 0x6f, 0x33, 0xfc, + 0x8f, 0x98, 0x55, 0x97, 0xa0, 0xe4, 0x29, 0xbd, 0x9e, 0x65, 0x2a, 0xd4, 0x62, 0xad, 0x5e, 0x4c, + 0x43, 0x85, 0x52, 0x2f, 0x3e, 0x66, 0x87, 0x74, 0x85, 0xb7, 0x50, 0x6e, 0xcf, 0x42, 0xb1, 0xe5, + 0xd6, 0xc5, 0x01, 0xf3, 0x7e, 0xd9, 0xdb, 0x37, 0x96, 0xe6, 0x0f, 0xf6, 0xcb, 0x8f, 0xe4, 0x19, + 0x5b, 0xe8, 0xc9, 0x16, 0x4e, 0xdf, 0x58, 0x9a, 0xc7, 0xb4, 0x30, 0x9a, 0x81, 0x51, 0x79, 0x42, + 0xdf, 0xa4, 0x02, 0xa2, 0xef, 0x89, 0x73, 0x48, 0x69, 0xad, 0xb1, 0x89, 0xc6, 0x49, 0x7a, 0x34, + 0x0f, 0x63, 0xdb, 0xad, 0x75, 0xd2, 0x20, 0x11, 0xff, 0xe0, 0x6b, 0x84, 0xeb, 0x74, 0x4b, 0xf1, + 0x5d, 0xf2, 0x5a, 0x02, 0x8f, 0x53, 0x25, 0xec, 0xbf, 0x66, 0xe7, 0x81, 0xe8, 0xbd, 0x4a, 0xe0, + 0xd3, 0x89, 0x45, 0xb9, 0x7f, 0x2b, 0xa7, 0x73, 0x37, 0xb3, 0xe2, 0x1a, 0xd9, 0x5b, 0xf3, 0xe9, + 0x5d, 0x22, 0x7b, 0x56, 0x18, 0x73, 0xbe, 0xa7, 0xed, 0x9c, 0xff, 0x85, 0x02, 0x9c, 0x54, 0x3d, + 0x60, 0x88, 0xad, 0xdf, 0xee, 0x7d, 0x70, 0x19, 0x06, 0xeb, 0x64, 0xc3, 0x69, 0x35, 0x22, 0x65, + 0x60, 0xe8, 0xe5, 0x46, 0xa6, 0xf9, 0x18, 0x8c, 0x75, 0x9a, 0x43, 0x74, 0xdb, 0xcf, 0x0f, 0xb3, + 0x83, 0x38, 0x72, 0xe8, 0x1c, 0x57, 0xab, 0xc6, 0xca, 0x5d, 0x35, 0x8f, 0x42, 0xaf, 0xbb, 0x43, + 0x05, 0xb3, 0x82, 0x29, 0x6f, 0x2d, 0x51, 0x20, 0xe6, 0x38, 0xf4, 0x38, 0xf4, 0xd7, 0xfc, 0x9d, + 0x1d, 0xc7, 0xab, 0xb3, 0x23, 0xaf, 0x34, 0x3b, 0x48, 0x65, 0xb7, 0x39, 0x0e, 0xc2, 0x12, 0x87, + 0xce, 0x40, 0x8f, 0x13, 0x6c, 0x72, 0xad, 0x4b, 0x69, 0x76, 0x80, 0xd6, 0x34, 0x13, 0x6c, 0x86, + 0x98, 0x41, 0xe9, 0xa5, 0xf1, 0xb6, 0x1f, 0x6c, 0xbb, 0xde, 0xe6, 0xbc, 0x1b, 0x88, 0x25, 0xa1, + 0xce, 0xc2, 0x5b, 0x0a, 0x83, 0x35, 0x2a, 0xb4, 0x08, 0xbd, 0x4d, 0x3f, 0x88, 0xc2, 0xc9, 0x3e, + 0xd6, 0xdd, 0x8f, 0xe4, 0x6c, 0x44, 0xfc, 0x6b, 0x2b, 0x7e, 0x10, 0xc5, 0x1f, 0x40, 0xff, 0x85, + 0x98, 0x17, 0x47, 0xcb, 0xd0, 0x4f, 0xbc, 0xdd, 0xc5, 0xc0, 0xdf, 0x99, 0x9c, 0xc8, 0xe7, 0xb4, + 0xc0, 0x49, 0xf8, 0x34, 0x8b, 0x65, 0x54, 0x01, 0xc6, 0x92, 0x05, 0xfa, 0x10, 0x14, 0x89, 0xb7, + 0x3b, 0xd9, 0xcf, 0x38, 0x4d, 0xe5, 0x70, 0xba, 0xe9, 0x04, 0xf1, 0x9e, 0xbf, 0xe0, 0xed, 0x62, + 0x5a, 0x06, 0x7d, 0x0c, 0x4a, 0x72, 0xc3, 0x08, 0x85, 0x3a, 0x33, 0x73, 0xc2, 0xca, 0x6d, 0x06, + 0x93, 0xb7, 0x5b, 0x6e, 0x40, 0x76, 0x88, 0x17, 0x85, 0xf1, 0x0e, 0x29, 0xb1, 0x21, 0x8e, 0xb9, + 0xa1, 0x1a, 0x0c, 0x05, 0x24, 0x74, 0xef, 0x92, 0x8a, 0xdf, 0x70, 0x6b, 0x7b, 0x93, 0x0f, 0xb1, + 0xe6, 0x3d, 0xd9, 0xb6, 0xcb, 0xb0, 0x56, 0x20, 0x56, 0xb7, 0xeb, 0x50, 0x6c, 0x30, 0x45, 0x6f, + 0xc0, 0x70, 0x40, 0xc2, 0xc8, 0x09, 0x22, 0x51, 0xcb, 0xa4, 0x32, 0x8f, 0x0d, 0x63, 0x1d, 0xc1, + 0xaf, 0x13, 0x71, 0x35, 0x31, 0x06, 0x9b, 0x1c, 0xd0, 0xc7, 0xa4, 0xee, 0x7f, 0xc5, 0x6f, 0x79, + 0x51, 0x38, 0x59, 0x62, 0xed, 0xce, 0xb4, 0xca, 0xde, 0x8c, 0xe9, 0x92, 0xc6, 0x01, 0x5e, 0x18, + 0x1b, 0xac, 0xd0, 0x27, 0x60, 0x98, 0xff, 0xe7, 0xb6, 0xcd, 0x70, 0xf2, 0x24, 0xe3, 0x7d, 0x3e, + 0x9f, 0x37, 0x27, 0x9c, 0x3d, 0x29, 0x98, 0x0f, 0xeb, 0xd0, 0x10, 0x9b, 0xdc, 0x10, 0x86, 0xe1, + 0x86, 0xbb, 0x4b, 0x3c, 0x12, 0x86, 0x95, 0xc0, 0x5f, 0x27, 0x42, 0x55, 0x7b, 0x3a, 0xdb, 0x16, + 0xea, 0xaf, 0x93, 0xd9, 0x71, 0xca, 0x73, 0x59, 0x2f, 0x83, 0x4d, 0x16, 0xe8, 0x06, 0x8c, 0xd0, + 0xbb, 0xb1, 0x1b, 0x33, 0x1d, 0xec, 0xc4, 0x94, 0xdd, 0x07, 0xb1, 0x51, 0x08, 0x27, 0x98, 0xa0, + 0xeb, 0x30, 0xc4, 0xfa, 0xbc, 0xd5, 0xe4, 0x4c, 0x4f, 0x75, 0x62, 0xca, 0x4c, 0xe9, 0x55, 0xad, + 0x08, 0x36, 0x18, 0xa0, 0xd7, 0xa1, 0xd4, 0x70, 0x37, 0x48, 0x6d, 0xaf, 0xd6, 0x20, 0x93, 0x43, + 0x8c, 0x5b, 0xe6, 0x66, 0xb8, 0x2c, 0x89, 0xb8, 0x7c, 0xae, 0xfe, 0xe2, 0xb8, 0x38, 0xba, 0x09, + 0xa7, 0x22, 0x12, 0xec, 0xb8, 0x9e, 0x43, 0x37, 0x31, 0x71, 0x25, 0x64, 0x26, 0xea, 0x61, 0x36, + 0xbb, 0xce, 0x89, 0xd1, 0x38, 0xb5, 0x96, 0x49, 0x85, 0x73, 0x4a, 0xa3, 0x3b, 0x30, 0x99, 0x81, + 0xe1, 0xf3, 0xf6, 0x04, 0xe3, 0xfc, 0xaa, 0xe0, 0x3c, 0xb9, 0x96, 0x43, 0x77, 0xd0, 0x06, 0x87, + 0x73, 0xb9, 0xa3, 0xeb, 0x30, 0xca, 0x76, 0xce, 0x4a, 0xab, 0xd1, 0x10, 0x15, 0x8e, 0xb0, 0x0a, + 0x1f, 0x97, 0x72, 0xc4, 0x92, 0x89, 0x3e, 0xd8, 0x2f, 0x43, 0xfc, 0x0f, 0x27, 0x4b, 0xa3, 0x75, + 0x66, 0x0d, 0x6d, 0x05, 0x6e, 0xb4, 0x47, 0x57, 0x15, 0xb9, 0x13, 0x4d, 0x8e, 0xb6, 0xd5, 0x0c, + 0xe9, 0xa4, 0xca, 0x64, 0xaa, 0x03, 0x71, 0x92, 0x21, 0x3d, 0x0a, 0xc2, 0xa8, 0xee, 0x7a, 0x93, + 0x63, 0xfc, 0x3e, 0x25, 0x77, 0xd2, 0x2a, 0x05, 0x62, 0x8e, 0x63, 0x96, 0x50, 0xfa, 0xe3, 0x3a, + 0x3d, 0x71, 0xc7, 0x19, 0x61, 0x6c, 0x09, 0x95, 0x08, 0x1c, 0xd3, 0x50, 0x21, 0x38, 0x8a, 0xf6, + 0x26, 0x11, 0x23, 0x55, 0x1b, 0xe2, 0xda, 0xda, 0xc7, 0x30, 0x85, 0xdb, 0xeb, 0x30, 0xa2, 0xb6, + 0x09, 0xd6, 0x27, 0xa8, 0x0c, 0xbd, 0x4c, 0xec, 0x13, 0x7a, 0xcc, 0x12, 0x6d, 0x02, 0x13, 0x09, + 0x31, 0x87, 0xb3, 0x26, 0xb8, 0x77, 0xc9, 0xec, 0x5e, 0x44, 0xb8, 0x2e, 0xa2, 0xa8, 0x35, 0x41, + 0x22, 0x70, 0x4c, 0x63, 0xff, 0x0f, 0x2e, 0x3e, 0xc7, 0xa7, 0x44, 0x17, 0xe7, 0xe2, 0x33, 0x30, + 0xb0, 0xe5, 0x87, 0x11, 0xa5, 0x66, 0x75, 0xf4, 0xc6, 0x02, 0xf3, 0x55, 0x01, 0xc7, 0x8a, 0x02, + 0xbd, 0x02, 0xc3, 0x35, 0xbd, 0x02, 0x71, 0xa8, 0xab, 0x6d, 0xc4, 0xa8, 0x1d, 0x9b, 0xb4, 0xe8, + 0x25, 0x18, 0x60, 0xde, 0x3d, 0x35, 0xbf, 0x21, 0xa4, 0x4d, 0x29, 0x99, 0x0c, 0x54, 0x04, 0xfc, + 0x40, 0xfb, 0x8d, 0x15, 0x35, 0xba, 0x00, 0x7d, 0xb4, 0x09, 0x4b, 0x15, 0x71, 0x9c, 0x2a, 0x95, + 0xdc, 0x55, 0x06, 0xc5, 0x02, 0x6b, 0xff, 0x9a, 0xc5, 0x64, 0xa9, 0xf4, 0x9e, 0x8f, 0xae, 0xb2, + 0x43, 0x83, 0x9d, 0x20, 0x9a, 0x4a, 0xec, 0x31, 0xed, 0x24, 0x50, 0xb8, 0x83, 0xc4, 0x7f, 0x6c, + 0x94, 0x44, 0x6f, 0x26, 0x4f, 0x06, 0x2e, 0x50, 0xbc, 0x20, 0xbb, 0x20, 0x79, 0x3a, 0x3c, 0x1c, + 0x1f, 0x71, 0xb4, 0x3d, 0xed, 0x8e, 0x08, 0xfb, 0xff, 0x2c, 0x68, 0xb3, 0xa4, 0x1a, 0x39, 0x11, + 0x41, 0x15, 0xe8, 0xbf, 0xed, 0xb8, 0x91, 0xeb, 0x6d, 0x0a, 0xb9, 0xaf, 0xfd, 0x41, 0xc7, 0x0a, + 0xdd, 0xe2, 0x05, 0xb8, 0xf4, 0x22, 0xfe, 0x60, 0xc9, 0x86, 0x72, 0x0c, 0x5a, 0x9e, 0x47, 0x39, + 0x16, 0xba, 0xe5, 0x88, 0x79, 0x01, 0xce, 0x51, 0xfc, 0xc1, 0x92, 0x0d, 0x7a, 0x0b, 0x40, 0xee, + 0x10, 0xa4, 0x2e, 0xbc, 0x82, 0x9e, 0xe9, 0xcc, 0x74, 0x4d, 0x95, 0x99, 0x1d, 0xa1, 0xb2, 0x51, + 0xfc, 0x1f, 0x6b, 0xfc, 0xec, 0x48, 0x1b, 0x53, 0xbd, 0x31, 0xe8, 0xe3, 0x74, 0x89, 0x3a, 0x41, + 0x44, 0xea, 0x33, 0x91, 0xe8, 0x9c, 0xa7, 0xba, 0xbb, 0x1c, 0xae, 0xb9, 0x3b, 0x44, 0x5f, 0xce, + 0x82, 0x09, 0x8e, 0xf9, 0xd9, 0xbf, 0x54, 0x84, 0xc9, 0xbc, 0xe6, 0xd2, 0x45, 0x43, 0xee, 0xb8, + 0xd1, 0x1c, 0x15, 0x6b, 0x2d, 0x73, 0xd1, 0x2c, 0x08, 0x38, 0x56, 0x14, 0x74, 0xf6, 0x86, 0xee, + 0xa6, 0xbc, 0xdb, 0xf7, 0xc6, 0xb3, 0xb7, 0xca, 0xa0, 0x58, 0x60, 0x29, 0x5d, 0x40, 0x9c, 0x50, + 0xb8, 0x9d, 0x69, 0xb3, 0x1c, 0x33, 0x28, 0x16, 0x58, 0x5d, 0xcb, 0xd8, 0xd3, 0x41, 0xcb, 0x68, + 0x74, 0x51, 0xef, 0xd1, 0x76, 0x11, 0xfa, 0x24, 0xc0, 0x86, 0xeb, 0xb9, 0xe1, 0x16, 0xe3, 0xde, + 0x77, 0x68, 0xee, 0x4a, 0x28, 0x5e, 0x54, 0x5c, 0xb0, 0xc6, 0x11, 0xbd, 0x08, 0x83, 0x6a, 0x03, + 0x59, 0x9a, 0x67, 0x36, 0x78, 0xcd, 0xa7, 0x29, 0xde, 0x4d, 0xe7, 0xb1, 0x4e, 0x67, 0x7f, 0x3a, + 0x39, 0x5f, 0xc4, 0x0a, 0xd0, 0xfa, 0xd7, 0xea, 0xb6, 0x7f, 0x0b, 0xed, 0xfb, 0xd7, 0xfe, 0x66, + 0x1f, 0x8c, 0x1a, 0x95, 0xb5, 0xc2, 0x2e, 0xf6, 0xdc, 0x2b, 0xf4, 0x00, 0x72, 0x22, 0x22, 0xd6, + 0x9f, 0xdd, 0x79, 0xa9, 0xe8, 0x87, 0x14, 0x5d, 0x01, 0xbc, 0x3c, 0xfa, 0x24, 0x94, 0x1a, 0x4e, + 0xc8, 0x34, 0x96, 0x44, 0xac, 0xbb, 0x6e, 0x98, 0xc5, 0x17, 0x42, 0x27, 0x8c, 0xb4, 0x53, 0x9f, + 0xf3, 0x8e, 0x59, 0xd2, 0x93, 0x92, 0xca, 0x57, 0xd2, 0xaf, 0x51, 0x35, 0x82, 0x0a, 0x61, 0x7b, + 0x98, 0xe3, 0xd0, 0x4b, 0x6c, 0x6b, 0xa5, 0xb3, 0x62, 0x8e, 0x4a, 0xa3, 0x6c, 0x9a, 0xf5, 0x1a, + 0x42, 0xb6, 0xc2, 0x61, 0x83, 0x32, 0xbe, 0x93, 0xf5, 0xb5, 0xb9, 0x93, 0x3d, 0x09, 0xfd, 0xec, + 0x87, 0x9a, 0x01, 0x6a, 0x34, 0x96, 0x38, 0x18, 0x4b, 0x7c, 0x72, 0xc2, 0x0c, 0x74, 0x37, 0x61, + 0xe8, 0xad, 0x4f, 0x4c, 0x6a, 0xe6, 0xff, 0x30, 0xc0, 0x77, 0x39, 0x31, 0xe5, 0xb1, 0xc4, 0xa1, + 0x9f, 0xb6, 0x00, 0x39, 0x0d, 0x7a, 0x5b, 0xa6, 0x60, 0x75, 0xb9, 0x01, 0x26, 0x6a, 0xbf, 0xd2, + 0xb1, 0xdb, 0x5b, 0xe1, 0xf4, 0x4c, 0xaa, 0x34, 0xd7, 0x94, 0xbe, 0x2c, 0x9a, 0x88, 0xd2, 0x04, + 0xfa, 0x61, 0xb4, 0xec, 0x86, 0xd1, 0xe7, 0xfe, 0x28, 0x71, 0x38, 0x65, 0x34, 0x09, 0xdd, 0xd0, + 0x2f, 0x5f, 0x83, 0x87, 0xbc, 0x7c, 0x0d, 0xe7, 0x5d, 0xbc, 0xa6, 0x5a, 0xf0, 0x50, 0xce, 0x17, + 0x64, 0xe8, 0x5f, 0xe7, 0x75, 0xfd, 0x6b, 0x07, 0xad, 0xdd, 0xb4, 0xac, 0x63, 0xfa, 0x8d, 0x96, + 0xe3, 0x45, 0x6e, 0xb4, 0xa7, 0xeb, 0x6b, 0x9f, 0x82, 0x91, 0x79, 0x87, 0xec, 0xf8, 0xde, 0x82, + 0x57, 0x6f, 0xfa, 0xae, 0x17, 0xa1, 0x49, 0xe8, 0x61, 0xc2, 0x07, 0xdf, 0x7a, 0x7b, 0x68, 0xef, + 0x61, 0x06, 0xb1, 0x37, 0xe1, 0xe4, 0xbc, 0x7f, 0xdb, 0xbb, 0xed, 0x04, 0xf5, 0x99, 0xca, 0x92, + 0xa6, 0x4f, 0x5a, 0x95, 0xfa, 0x0c, 0x2b, 0xff, 0xb6, 0xa8, 0x95, 0xe4, 0xd7, 0xa1, 0x45, 0xb7, + 0x41, 0x72, 0xb4, 0x7e, 0xff, 0x4f, 0xc1, 0xa8, 0x29, 0xa6, 0x57, 0x76, 0x67, 0x2b, 0xd7, 0xee, + 0xfc, 0x06, 0x0c, 0x6c, 0xb8, 0xa4, 0x51, 0xc7, 0x64, 0x43, 0xf4, 0xce, 0x13, 0xf9, 0x9e, 0x69, + 0x8b, 0x94, 0x52, 0x6a, 0x79, 0xb9, 0x36, 0x64, 0x51, 0x14, 0xc6, 0x8a, 0x0d, 0xda, 0x86, 0x31, + 0xd9, 0x87, 0x12, 0x2b, 0xf6, 0x83, 0x27, 0xdb, 0x0d, 0xbc, 0xc9, 0xfc, 0xc4, 0xbd, 0xfd, 0xf2, + 0x18, 0x4e, 0xb0, 0xc1, 0x29, 0xc6, 0xe8, 0x0c, 0xf4, 0xec, 0xd0, 0x93, 0xaf, 0x87, 0x75, 0x3f, + 0x53, 0x7f, 0x30, 0x4d, 0x0e, 0x83, 0xda, 0x3f, 0x66, 0xc1, 0x43, 0xa9, 0x9e, 0x11, 0x1a, 0xad, + 0x23, 0x1e, 0x85, 0xa4, 0x86, 0xa9, 0xd0, 0x59, 0xc3, 0x64, 0xff, 0x9c, 0x05, 0x27, 0x16, 0x76, + 0x9a, 0xd1, 0xde, 0xbc, 0x6b, 0x1a, 0x89, 0x3f, 0x08, 0x7d, 0x3b, 0xa4, 0xee, 0xb6, 0x76, 0xc4, + 0xc8, 0x95, 0xe5, 0xe9, 0xb0, 0xc2, 0xa0, 0x07, 0xfb, 0xe5, 0xe1, 0x6a, 0xe4, 0x07, 0xce, 0x26, + 0xe1, 0x00, 0x2c, 0xc8, 0xd9, 0x19, 0xeb, 0xde, 0x25, 0xcb, 0xee, 0x8e, 0x1b, 0xdd, 0xdf, 0x6c, + 0x17, 0xf6, 0x5d, 0xc9, 0x04, 0xc7, 0xfc, 0xec, 0x6f, 0x58, 0x30, 0x2a, 0xe7, 0xfd, 0x4c, 0xbd, + 0x1e, 0x90, 0x30, 0x44, 0x53, 0x50, 0x70, 0x9b, 0xa2, 0x95, 0x20, 0x5a, 0x59, 0x58, 0xaa, 0xe0, + 0x82, 0xdb, 0x94, 0xe2, 0x3c, 0x3b, 0x80, 0x8a, 0xa6, 0xa9, 0xfb, 0xaa, 0x80, 0x63, 0x45, 0x81, + 0x2e, 0xc2, 0x80, 0xe7, 0xd7, 0xb9, 0x44, 0xcc, 0x45, 0x09, 0x36, 0xc1, 0x56, 0x05, 0x0c, 0x2b, + 0x2c, 0xaa, 0x40, 0x89, 0x3b, 0x42, 0xc6, 0x93, 0xb6, 0x2b, 0x77, 0x4a, 0xf6, 0x65, 0x6b, 0xb2, + 0x24, 0x8e, 0x99, 0xd8, 0xbf, 0x61, 0xc1, 0x90, 0xfc, 0xb2, 0x2e, 0xef, 0x2a, 0x74, 0x69, 0xc5, + 0xf7, 0x94, 0x78, 0x69, 0xd1, 0xbb, 0x06, 0xc3, 0x18, 0x57, 0x8c, 0xe2, 0xa1, 0xae, 0x18, 0x97, + 0x61, 0xd0, 0x69, 0x36, 0x2b, 0xe6, 0xfd, 0x84, 0x4d, 0xa5, 0x99, 0x18, 0x8c, 0x75, 0x1a, 0xfb, + 0x47, 0x0b, 0x30, 0x22, 0xbf, 0xa0, 0xda, 0x5a, 0x0f, 0x49, 0x84, 0xd6, 0xa0, 0xe4, 0xf0, 0x51, + 0x22, 0x72, 0x92, 0x3f, 0x9a, 0xad, 0x37, 0x33, 0x86, 0x34, 0x16, 0xb4, 0x66, 0x64, 0x69, 0x1c, + 0x33, 0x42, 0x0d, 0x18, 0xf7, 0xfc, 0x88, 0x1d, 0xba, 0x0a, 0xdf, 0xce, 0x94, 0x99, 0xe4, 0x7e, + 0x5a, 0x70, 0x1f, 0x5f, 0x4d, 0x72, 0xc1, 0x69, 0xc6, 0x68, 0x41, 0xea, 0x22, 0x8b, 0xf9, 0x4a, + 0x24, 0x7d, 0xe0, 0xb2, 0x55, 0x91, 0xf6, 0xaf, 0x5a, 0x50, 0x92, 0x64, 0xc7, 0x61, 0xb5, 0x5e, + 0x81, 0xfe, 0x90, 0x0d, 0x82, 0xec, 0x1a, 0xbb, 0x5d, 0xc3, 0xf9, 0x78, 0xc5, 0xb2, 0x04, 0xff, + 0x1f, 0x62, 0xc9, 0x83, 0x99, 0xa2, 0x54, 0xf3, 0xdf, 0x25, 0xa6, 0x28, 0xd5, 0x9e, 0x9c, 0x43, + 0xe9, 0x4f, 0x59, 0x9b, 0x35, 0xdd, 0x2e, 0x15, 0x79, 0x9b, 0x01, 0xd9, 0x70, 0xef, 0x24, 0x45, + 0xde, 0x0a, 0x83, 0x62, 0x81, 0x45, 0x6f, 0xc1, 0x50, 0x4d, 0xda, 0x20, 0xe2, 0x15, 0x7e, 0xa1, + 0xad, 0x3d, 0x4c, 0x99, 0x4e, 0xb9, 0x0e, 0x6d, 0x4e, 0x2b, 0x8f, 0x0d, 0x6e, 0xa6, 0xa3, 0x4f, + 0xb1, 0x93, 0xa3, 0x4f, 0xcc, 0x37, 0xdf, 0xed, 0xe5, 0xc7, 0x2d, 0xe8, 0xe3, 0xba, 0xe7, 0xee, + 0x54, 0xff, 0x9a, 0x25, 0x39, 0xee, 0xbb, 0x9b, 0x14, 0x28, 0x24, 0x0d, 0xb4, 0x02, 0x25, 0xf6, + 0x83, 0xe9, 0xce, 0x8b, 0xf9, 0xef, 0x70, 0x78, 0xad, 0x7a, 0x03, 0x6f, 0xca, 0x62, 0x38, 0xe6, + 0x60, 0xff, 0x48, 0x91, 0xee, 0x6e, 0x31, 0xa9, 0x71, 0xe8, 0x5b, 0x0f, 0xee, 0xd0, 0x2f, 0x3c, + 0xa8, 0x43, 0x7f, 0x13, 0x46, 0x6b, 0x9a, 0xdd, 0x39, 0x1e, 0xc9, 0x8b, 0x6d, 0x27, 0x89, 0x66, + 0xa2, 0xe6, 0xda, 0xb9, 0x39, 0x93, 0x09, 0x4e, 0x72, 0x45, 0x1f, 0x87, 0x21, 0x3e, 0xce, 0xa2, + 0x16, 0xee, 0x2b, 0xf5, 0x78, 0xfe, 0x7c, 0xd1, 0xab, 0xe0, 0xda, 0x5c, 0xad, 0x38, 0x36, 0x98, + 0xd9, 0x7f, 0x69, 0x01, 0x5a, 0x68, 0x6e, 0x91, 0x1d, 0x12, 0x38, 0x8d, 0xd8, 0x7c, 0xf4, 0x45, + 0x0b, 0x26, 0x49, 0x0a, 0x3c, 0xe7, 0xef, 0xec, 0x88, 0xcb, 0x62, 0x8e, 0x3e, 0x63, 0x21, 0xa7, + 0x8c, 0x7a, 0xa8, 0x34, 0x99, 0x47, 0x81, 0x73, 0xeb, 0x43, 0x2b, 0x30, 0xc1, 0x4f, 0x49, 0x85, + 0xd0, 0xfc, 0xae, 0x1e, 0x16, 0x8c, 0x27, 0xd6, 0xd2, 0x24, 0x38, 0xab, 0x9c, 0xfd, 0xab, 0xc3, + 0x90, 0xdb, 0x8a, 0xf7, 0xec, 0x66, 0xef, 0xd9, 0xcd, 0xde, 0xb3, 0x9b, 0xbd, 0x67, 0x37, 0x7b, + 0xcf, 0x6e, 0xf6, 0x9e, 0xdd, 0xec, 0x5d, 0x6a, 0x37, 0xfb, 0xbf, 0x2c, 0x38, 0xa9, 0x8e, 0x2f, + 0xe3, 0xc2, 0xfe, 0x19, 0x98, 0xe0, 0xcb, 0xcd, 0xf0, 0x31, 0x16, 0xc7, 0xf5, 0xe5, 0xcc, 0x99, + 0x9b, 0xf0, 0x85, 0x37, 0x0a, 0xf2, 0x47, 0x45, 0x19, 0x08, 0x9c, 0x55, 0x8d, 0xfd, 0x4b, 0x03, + 0xd0, 0xbb, 0xb0, 0x4b, 0xbc, 0xe8, 0x18, 0xae, 0x36, 0x35, 0x18, 0x71, 0xbd, 0x5d, 0xbf, 0xb1, + 0x4b, 0xea, 0x1c, 0x7f, 0x98, 0x1b, 0xf8, 0x29, 0xc1, 0x7a, 0x64, 0xc9, 0x60, 0x81, 0x13, 0x2c, + 0x1f, 0x84, 0xf5, 0xe1, 0x0a, 0xf4, 0xf1, 0xc3, 0x47, 0x98, 0x1e, 0x32, 0xf7, 0x6c, 0xd6, 0x89, + 0xe2, 0x48, 0x8d, 0x2d, 0x23, 0xfc, 0x70, 0x13, 0xc5, 0xd1, 0xa7, 0x61, 0x64, 0xc3, 0x0d, 0xc2, + 0x68, 0xcd, 0xdd, 0xa1, 0x47, 0xc3, 0x4e, 0xf3, 0x3e, 0xac, 0x0d, 0xaa, 0x1f, 0x16, 0x0d, 0x4e, + 0x38, 0xc1, 0x19, 0x6d, 0xc2, 0x70, 0xc3, 0xd1, 0xab, 0xea, 0x3f, 0x74, 0x55, 0xea, 0x74, 0x58, + 0xd6, 0x19, 0x61, 0x93, 0x2f, 0x5d, 0x4e, 0x35, 0xa6, 0x30, 0x1f, 0x60, 0xea, 0x0c, 0xb5, 0x9c, + 0xb8, 0xa6, 0x9c, 0xe3, 0xa8, 0x80, 0xc6, 0x1c, 0xd9, 0x4b, 0xa6, 0x80, 0xa6, 0xb9, 0xab, 0x7f, + 0x0a, 0x4a, 0x84, 0x76, 0x21, 0x65, 0x2c, 0x0e, 0x98, 0x4b, 0xdd, 0xb5, 0x75, 0xc5, 0xad, 0x05, + 0xbe, 0x69, 0xe7, 0x59, 0x90, 0x9c, 0x70, 0xcc, 0x14, 0xcd, 0x41, 0x5f, 0x48, 0x02, 0x57, 0xe9, + 0x92, 0xdb, 0x0c, 0x23, 0x23, 0xe3, 0xaf, 0xd6, 0xf8, 0x6f, 0x2c, 0x8a, 0xd2, 0xe9, 0xe5, 0x30, + 0x55, 0x2c, 0x3b, 0x0c, 0xb4, 0xe9, 0x35, 0xc3, 0xa0, 0x58, 0x60, 0xd1, 0xeb, 0xd0, 0x1f, 0x90, + 0x06, 0x33, 0x24, 0x0e, 0x77, 0x3f, 0xc9, 0xb9, 0x5d, 0x92, 0x97, 0xc3, 0x92, 0x01, 0xba, 0x06, + 0x28, 0x20, 0x54, 0xc0, 0x73, 0xbd, 0x4d, 0xe5, 0xde, 0x2d, 0x36, 0x5a, 0x25, 0x48, 0xe3, 0x98, + 0x42, 0x3e, 0x58, 0xc4, 0x19, 0xc5, 0xd0, 0x15, 0x18, 0x57, 0xd0, 0x25, 0x2f, 0x8c, 0x1c, 0xba, + 0xc1, 0x8d, 0x32, 0x5e, 0x4a, 0xbf, 0x82, 0x93, 0x04, 0x38, 0x5d, 0xc6, 0xfe, 0x59, 0x0b, 0x78, + 0x3f, 0x1f, 0x83, 0x56, 0xe1, 0x35, 0x53, 0xab, 0x70, 0x3a, 0x77, 0xe4, 0x72, 0x34, 0x0a, 0x3f, + 0x6b, 0xc1, 0xa0, 0x36, 0xb2, 0xf1, 0x9c, 0xb5, 0xda, 0xcc, 0xd9, 0x16, 0x8c, 0xd1, 0x99, 0x7e, + 0x7d, 0x3d, 0x24, 0xc1, 0x2e, 0xa9, 0xb3, 0x89, 0x59, 0xb8, 0xbf, 0x89, 0xa9, 0x5c, 0x49, 0x97, + 0x13, 0x0c, 0x71, 0xaa, 0x0a, 0xfb, 0x53, 0xb2, 0xa9, 0xca, 0xf3, 0xb6, 0xa6, 0xc6, 0x3c, 0xe1, + 0x79, 0xab, 0x46, 0x15, 0xc7, 0x34, 0x74, 0xa9, 0x6d, 0xf9, 0x61, 0x94, 0xf4, 0xbc, 0xbd, 0xea, + 0x87, 0x11, 0x66, 0x18, 0xfb, 0x79, 0x80, 0x85, 0x3b, 0xa4, 0xc6, 0x67, 0xac, 0x7e, 0xe9, 0xb1, + 0xf2, 0x2f, 0x3d, 0xf6, 0xef, 0x59, 0x30, 0xb2, 0x38, 0x67, 0x9c, 0x5c, 0xd3, 0x00, 0xfc, 0xa6, + 0x76, 0xeb, 0xd6, 0xaa, 0x74, 0xff, 0xe0, 0x16, 0x70, 0x05, 0xc5, 0x1a, 0x05, 0x3a, 0x0d, 0xc5, + 0x46, 0xcb, 0x13, 0x6a, 0xcf, 0x7e, 0x7a, 0x3c, 0x2e, 0xb7, 0x3c, 0x4c, 0x61, 0xda, 0x63, 0xa5, + 0x62, 0xd7, 0x8f, 0x95, 0x3a, 0x06, 0x29, 0x41, 0x65, 0xe8, 0xbd, 0x7d, 0xdb, 0xad, 0xf3, 0xa7, + 0xe0, 0xc2, 0x35, 0xe5, 0xd6, 0xad, 0xa5, 0xf9, 0x10, 0x73, 0xb8, 0xfd, 0xa5, 0x22, 0x4c, 0x2d, + 0x36, 0xc8, 0x9d, 0x77, 0xf8, 0x1c, 0xbe, 0xdb, 0xa7, 0x56, 0x87, 0x53, 0x20, 0x1d, 0xf6, 0x39, + 0x5d, 0xe7, 0xfe, 0xd8, 0x80, 0x7e, 0xee, 0x78, 0x2a, 0x1f, 0xc7, 0x67, 0x9a, 0xfb, 0xf2, 0x3b, + 0x64, 0x9a, 0x3b, 0xb0, 0x0a, 0x73, 0x9f, 0x3a, 0x30, 0x05, 0x14, 0x4b, 0xe6, 0x53, 0x2f, 0xc3, + 0x90, 0x4e, 0x79, 0xa8, 0x87, 0xad, 0xdf, 0x5b, 0x84, 0x31, 0xda, 0x82, 0x07, 0x3a, 0x10, 0x37, + 0xd2, 0x03, 0x71, 0xd4, 0x8f, 0x1b, 0x3b, 0x8f, 0xc6, 0x5b, 0xc9, 0xd1, 0xb8, 0x9c, 0x37, 0x1a, + 0xc7, 0x3d, 0x06, 0xdf, 0x67, 0xc1, 0xc4, 0x62, 0xc3, 0xaf, 0x6d, 0x27, 0x1e, 0x20, 0xbe, 0x08, + 0x83, 0x74, 0x3b, 0x0e, 0x8d, 0x58, 0x1c, 0x46, 0x74, 0x16, 0x81, 0xc2, 0x3a, 0x9d, 0x56, 0xec, + 0xc6, 0x8d, 0xa5, 0xf9, 0xac, 0xa0, 0x2e, 0x02, 0x85, 0x75, 0x3a, 0xfb, 0x77, 0x2c, 0x38, 0x7b, + 0x65, 0x6e, 0x21, 0x9e, 0x8a, 0xa9, 0xb8, 0x32, 0x17, 0xa0, 0xaf, 0x59, 0xd7, 0x9a, 0x12, 0xab, + 0x85, 0xe7, 0x59, 0x2b, 0x04, 0xf6, 0xdd, 0x12, 0x33, 0xe9, 0x06, 0xc0, 0x15, 0x5c, 0x99, 0x13, + 0xfb, 0xae, 0xb4, 0x02, 0x59, 0xb9, 0x56, 0xa0, 0xc7, 0xa1, 0x9f, 0x9e, 0x0b, 0x6e, 0x4d, 0xb6, + 0x9b, 0x1b, 0xf4, 0x39, 0x08, 0x4b, 0x9c, 0xfd, 0x33, 0x16, 0x4c, 0x5c, 0x71, 0x23, 0x7a, 0x68, + 0x27, 0x03, 0xa7, 0xd0, 0x53, 0x3b, 0x74, 0x23, 0x3f, 0xd8, 0x4b, 0x06, 0x4e, 0xc1, 0x0a, 0x83, + 0x35, 0x2a, 0xfe, 0x41, 0xbb, 0x2e, 0x7b, 0x49, 0x51, 0x30, 0xed, 0x6e, 0x58, 0xc0, 0xb1, 0xa2, + 0xa0, 0xfd, 0x55, 0x77, 0x03, 0xa6, 0xb2, 0xdc, 0x13, 0x1b, 0xb7, 0xea, 0xaf, 0x79, 0x89, 0xc0, + 0x31, 0x8d, 0xfd, 0xe7, 0x16, 0x94, 0xaf, 0x34, 0x5a, 0x61, 0x44, 0x82, 0x8d, 0x30, 0x67, 0xd3, + 0x7d, 0x1e, 0x4a, 0x44, 0x1a, 0x08, 0xe4, 0x93, 0x4f, 0x29, 0x88, 0x2a, 0xcb, 0x01, 0x8f, 0xdf, + 0xa2, 0xe8, 0xba, 0x78, 0x25, 0x7d, 0xb8, 0x67, 0xae, 0x8b, 0x80, 0x88, 0x5e, 0x97, 0x1e, 0xd0, + 0x86, 0x45, 0xc6, 0x58, 0x48, 0x61, 0x71, 0x46, 0x09, 0xfb, 0xc7, 0x2c, 0x38, 0xa9, 0x3e, 0xf8, + 0x5d, 0xf7, 0x99, 0xf6, 0xd7, 0x0a, 0x30, 0x7c, 0x75, 0x6d, 0xad, 0x72, 0x85, 0x44, 0xda, 0xac, + 0x6c, 0x6f, 0xf6, 0xc7, 0x9a, 0xf5, 0xb2, 0xdd, 0x1d, 0xb1, 0x15, 0xb9, 0x8d, 0x69, 0x1e, 0x17, + 0x6d, 0x7a, 0xc9, 0x8b, 0xae, 0x07, 0xd5, 0x28, 0x70, 0xbd, 0xcd, 0xcc, 0x99, 0x2e, 0x65, 0x96, + 0x62, 0x9e, 0xcc, 0x82, 0x9e, 0x87, 0x3e, 0x16, 0x98, 0x4d, 0x0e, 0xc2, 0xc3, 0xea, 0x8a, 0xc5, + 0xa0, 0x07, 0xfb, 0xe5, 0xd2, 0x0d, 0xbc, 0xc4, 0xff, 0x60, 0x41, 0x8a, 0x6e, 0xc0, 0xe0, 0x56, + 0x14, 0x35, 0xaf, 0x12, 0xa7, 0x4e, 0x02, 0xb9, 0xcb, 0x9e, 0xcb, 0xda, 0x65, 0x69, 0x27, 0x70, + 0xb2, 0x78, 0x63, 0x8a, 0x61, 0x21, 0xd6, 0xf9, 0xd8, 0x55, 0x80, 0x18, 0x77, 0x44, 0x86, 0x1b, + 0x7b, 0x0d, 0x4a, 0xf4, 0x73, 0x67, 0x1a, 0xae, 0xd3, 0xde, 0x34, 0xfe, 0x34, 0x94, 0xa4, 0xe1, + 0x3b, 0x14, 0x51, 0x1c, 0xd8, 0x89, 0x24, 0xed, 0xe2, 0x21, 0x8e, 0xf1, 0xf6, 0x63, 0x20, 0x7c, + 0x4b, 0xdb, 0xb1, 0xb4, 0x37, 0xe0, 0x04, 0x73, 0x92, 0x75, 0xa2, 0x2d, 0x63, 0x8e, 0x76, 0x9e, + 0x0c, 0xcf, 0x88, 0x7b, 0x1d, 0xff, 0xb2, 0x49, 0xed, 0x71, 0xf2, 0x90, 0xe4, 0x18, 0xdf, 0xf1, + 0xec, 0x3f, 0xeb, 0x81, 0x87, 0x97, 0xaa, 0xf9, 0xe1, 0x87, 0x5e, 0x82, 0x21, 0x2e, 0x2e, 0xd2, + 0xa9, 0xe1, 0x34, 0x44, 0xbd, 0x4a, 0x03, 0xba, 0xa6, 0xe1, 0xb0, 0x41, 0x89, 0xce, 0x42, 0xd1, + 0x7d, 0xdb, 0x4b, 0x3e, 0xdd, 0x5b, 0x7a, 0x63, 0x15, 0x53, 0x38, 0x45, 0x53, 0xc9, 0x93, 0x6f, + 0xe9, 0x0a, 0xad, 0xa4, 0xcf, 0xd7, 0x60, 0xc4, 0x0d, 0x6b, 0xa1, 0xbb, 0xe4, 0xd1, 0x75, 0xaa, + 0xad, 0x74, 0xa5, 0x73, 0xa0, 0x8d, 0x56, 0x58, 0x9c, 0xa0, 0xd6, 0xce, 0x97, 0xde, 0xae, 0xa5, + 0xd7, 0x8e, 0xc1, 0x0f, 0xe8, 0xf6, 0xdf, 0x64, 0x5f, 0x17, 0x32, 0x15, 0xbc, 0xd8, 0xfe, 0xf9, + 0x07, 0x87, 0x58, 0xe2, 0xe8, 0x85, 0xae, 0xb6, 0xe5, 0x34, 0x67, 0x5a, 0xd1, 0xd6, 0xbc, 0x1b, + 0xd6, 0xfc, 0x5d, 0x12, 0xec, 0xb1, 0xbb, 0xf8, 0x40, 0x7c, 0xa1, 0x53, 0x88, 0xb9, 0xab, 0x33, + 0x15, 0x4a, 0x89, 0xd3, 0x65, 0xd0, 0x0c, 0x8c, 0x4a, 0x60, 0x95, 0x84, 0xec, 0x08, 0x18, 0x64, + 0x6c, 0xd4, 0x63, 0x3a, 0x01, 0x56, 0x4c, 0x92, 0xf4, 0xa6, 0x80, 0x0b, 0x47, 0x21, 0xe0, 0x7e, + 0x10, 0x86, 0x5d, 0xcf, 0x8d, 0x5c, 0x27, 0xf2, 0xb9, 0xfd, 0x88, 0x5f, 0xbb, 0x99, 0x82, 0x79, + 0x49, 0x47, 0x60, 0x93, 0xce, 0xfe, 0x37, 0x3d, 0x30, 0xce, 0x86, 0xed, 0xbd, 0x19, 0xf6, 0x9d, + 0x34, 0xc3, 0x6e, 0xa4, 0x67, 0xd8, 0x51, 0x48, 0xee, 0xf7, 0x3d, 0xcd, 0x3e, 0x0d, 0x25, 0xf5, + 0x7e, 0x50, 0x3e, 0x20, 0xb6, 0x72, 0x1e, 0x10, 0x77, 0x3e, 0xbd, 0xa5, 0x4b, 0x5a, 0x31, 0xd3, + 0x25, 0xed, 0x2b, 0x16, 0xc4, 0x86, 0x05, 0xf4, 0x06, 0x94, 0x9a, 0x3e, 0xf3, 0x70, 0x0d, 0xa4, + 0xdb, 0xf8, 0x63, 0x6d, 0x2d, 0x13, 0x3c, 0x02, 0x5b, 0xc0, 0x7b, 0xa1, 0x22, 0x8b, 0xe2, 0x98, + 0x0b, 0xba, 0x06, 0xfd, 0xcd, 0x80, 0x54, 0x23, 0x16, 0x1e, 0xa8, 0x7b, 0x86, 0x7c, 0xd6, 0xf0, + 0x82, 0x58, 0x72, 0xb0, 0xff, 0x9d, 0x05, 0x63, 0x49, 0x52, 0xf4, 0x2a, 0xf4, 0x90, 0x3b, 0xa4, + 0x26, 0xda, 0x9b, 0x79, 0x14, 0xc7, 0xaa, 0x09, 0xde, 0x01, 0xf4, 0x3f, 0x66, 0xa5, 0xd0, 0x55, + 0xe8, 0xa7, 0xe7, 0xf0, 0x15, 0x15, 0x0a, 0xef, 0x91, 0xbc, 0xb3, 0x5c, 0x09, 0x34, 0xbc, 0x71, + 0x02, 0x84, 0x65, 0x71, 0xe6, 0x07, 0x56, 0x6b, 0x56, 0xe9, 0x15, 0x27, 0x6a, 0x77, 0x13, 0x5f, + 0x9b, 0xab, 0x70, 0x22, 0xc1, 0x8d, 0xfb, 0x81, 0x49, 0x20, 0x8e, 0x99, 0xd8, 0xbf, 0x60, 0x01, + 0x70, 0xb7, 0x37, 0xc7, 0xdb, 0x24, 0xc7, 0xa0, 0x4d, 0x9f, 0x87, 0x9e, 0xb0, 0x49, 0x6a, 0xed, + 0x9c, 0xaf, 0xe3, 0xf6, 0x54, 0x9b, 0xa4, 0x16, 0xcf, 0x38, 0xfa, 0x0f, 0xb3, 0xd2, 0xf6, 0xf7, + 0x03, 0x8c, 0xc4, 0x64, 0x4b, 0x11, 0xd9, 0x41, 0xcf, 0x1a, 0x41, 0x47, 0x4e, 0x27, 0x82, 0x8e, + 0x94, 0x18, 0xb5, 0xa6, 0xb8, 0xfd, 0x34, 0x14, 0x77, 0x9c, 0x3b, 0x42, 0x33, 0xf7, 0x74, 0xfb, + 0x66, 0x50, 0xfe, 0xd3, 0x2b, 0xce, 0x1d, 0x7e, 0x79, 0x7d, 0x5a, 0xae, 0x90, 0x15, 0xe7, 0x4e, + 0x47, 0x07, 0x61, 0x5a, 0x09, 0xab, 0xcb, 0xf5, 0x84, 0x47, 0x57, 0x57, 0x75, 0xb9, 0x5e, 0xb2, + 0x2e, 0xd7, 0xeb, 0xa2, 0x2e, 0xd7, 0x43, 0x77, 0xa1, 0x5f, 0x38, 0x5c, 0x8a, 0xb0, 0x64, 0x97, + 0xba, 0xa8, 0x4f, 0xf8, 0x6b, 0xf2, 0x3a, 0x2f, 0xc9, 0xcb, 0xb9, 0x80, 0x76, 0xac, 0x57, 0x56, + 0x88, 0xfe, 0x6f, 0x0b, 0x46, 0xc4, 0x6f, 0x4c, 0xde, 0x6e, 0x91, 0x30, 0x12, 0xc2, 0xeb, 0x07, + 0xba, 0x6f, 0x83, 0x28, 0xc8, 0x9b, 0xf2, 0x01, 0x79, 0xce, 0x98, 0xc8, 0x8e, 0x2d, 0x4a, 0xb4, + 0x02, 0xfd, 0x2d, 0x0b, 0x4e, 0xec, 0x38, 0x77, 0x78, 0x8d, 0x1c, 0x86, 0x9d, 0xc8, 0xf5, 0x85, + 0xe3, 0xc2, 0xab, 0xdd, 0x0d, 0x7f, 0xaa, 0x38, 0x6f, 0xa4, 0xb4, 0x52, 0x9e, 0xc8, 0x22, 0xe9, + 0xd8, 0xd4, 0xcc, 0x76, 0x4d, 0x6d, 0xc0, 0x80, 0x9c, 0x6f, 0x0f, 0xd2, 0xbb, 0x9b, 0xd5, 0x23, + 0xe6, 0xda, 0x03, 0xad, 0xe7, 0xd3, 0x30, 0xa4, 0xcf, 0xb1, 0x07, 0x5a, 0xd7, 0xdb, 0x30, 0x91, + 0x31, 0x97, 0x1e, 0x68, 0x95, 0xb7, 0xe1, 0x74, 0xee, 0xfc, 0x78, 0xa0, 0xde, 0xf9, 0x5f, 0xb3, + 0xf4, 0x7d, 0xf0, 0x18, 0x4c, 0x1a, 0x73, 0xa6, 0x49, 0xe3, 0x5c, 0xfb, 0x95, 0x93, 0x63, 0xd7, + 0x78, 0x4b, 0x6f, 0x34, 0xdd, 0xd5, 0xd1, 0xeb, 0xd0, 0xd7, 0xa0, 0x10, 0xe9, 0xb6, 0x6b, 0x77, + 0x5e, 0x91, 0xb1, 0x30, 0xc9, 0xe0, 0x21, 0x16, 0x1c, 0xec, 0x5f, 0xb6, 0xa0, 0xe7, 0x18, 0x7a, + 0x02, 0x9b, 0x3d, 0xf1, 0x6c, 0x2e, 0x6b, 0x11, 0xa1, 0x7d, 0x1a, 0x3b, 0xb7, 0x17, 0xee, 0x44, + 0xc4, 0x0b, 0xd9, 0x89, 0x9c, 0xd9, 0x31, 0xfb, 0x16, 0x4c, 0x2c, 0xfb, 0x4e, 0x7d, 0xd6, 0x69, + 0x38, 0x5e, 0x8d, 0x04, 0x4b, 0xde, 0xe6, 0xa1, 0x7c, 0xce, 0x0b, 0x1d, 0x7d, 0xce, 0x5f, 0x82, + 0x3e, 0xb7, 0xa9, 0x45, 0x9c, 0x3e, 0x4f, 0x3b, 0x70, 0xa9, 0x22, 0x82, 0x4d, 0x23, 0xa3, 0x72, + 0x06, 0xc5, 0x82, 0x9e, 0x8e, 0x3c, 0x77, 0xf6, 0xea, 0xc9, 0x1f, 0x79, 0x2a, 0x83, 0x27, 0x03, + 0x38, 0x19, 0x6e, 0xc9, 0x5b, 0x60, 0x54, 0x21, 0xde, 0x6c, 0x61, 0xe8, 0x77, 0xf9, 0x97, 0x8a, + 0xe1, 0x7f, 0x22, 0x5b, 0x36, 0x4e, 0x75, 0x8c, 0xf6, 0x1a, 0x89, 0x03, 0xb0, 0x64, 0x64, 0xbf, + 0x04, 0x99, 0x01, 0x37, 0x3a, 0xeb, 0x3d, 0xec, 0x8f, 0xc1, 0x38, 0x2b, 0x79, 0x48, 0x9d, 0x82, + 0x9d, 0xd0, 0xd6, 0x66, 0x04, 0x0f, 0xb5, 0xbf, 0x60, 0xc1, 0xe8, 0x6a, 0x22, 0xa6, 0xe2, 0x05, + 0x66, 0xdf, 0xcd, 0x30, 0x12, 0x54, 0x19, 0x14, 0x0b, 0xec, 0x91, 0x2b, 0xd1, 0xfe, 0xda, 0x82, + 0x38, 0x06, 0xce, 0x31, 0x08, 0x7e, 0x73, 0x86, 0xe0, 0x97, 0x29, 0x02, 0xab, 0xe6, 0xe4, 0xc9, + 0x7d, 0xe8, 0x9a, 0x8a, 0x0e, 0xd7, 0x46, 0xfa, 0x8d, 0xd9, 0xf0, 0xa9, 0x38, 0x62, 0x86, 0x90, + 0x93, 0xf1, 0xe2, 0xec, 0xdf, 0x2f, 0x00, 0x52, 0xb4, 0x5d, 0x47, 0xaf, 0x4b, 0x97, 0x38, 0x9a, + 0xe8, 0x75, 0xbb, 0x80, 0x98, 0x87, 0x42, 0xe0, 0x78, 0x21, 0x67, 0xeb, 0x0a, 0xb5, 0xe1, 0xe1, + 0xdc, 0x1f, 0xa6, 0xe4, 0x73, 0xb6, 0xe5, 0x14, 0x37, 0x9c, 0x51, 0x83, 0xe6, 0x79, 0xd2, 0xdb, + 0xad, 0xe7, 0x49, 0x5f, 0x87, 0x77, 0x99, 0x5f, 0xb5, 0x60, 0x58, 0x75, 0xd3, 0xbb, 0xc4, 0x7b, + 0x5f, 0xb5, 0x27, 0x67, 0xeb, 0xad, 0x68, 0x4d, 0x66, 0x47, 0xd2, 0x77, 0xb1, 0xf7, 0xb5, 0x4e, + 0xc3, 0xbd, 0x4b, 0x54, 0xb4, 0xd3, 0xb2, 0x78, 0x2f, 0x2b, 0xa0, 0x07, 0xfb, 0xe5, 0x61, 0xf5, + 0x8f, 0x47, 0x73, 0x8f, 0x8b, 0xd8, 0x3f, 0x45, 0x17, 0xbb, 0x39, 0x15, 0xd1, 0x8b, 0xd0, 0xdb, + 0xdc, 0x72, 0x42, 0x92, 0x78, 0xe5, 0xd4, 0x5b, 0xa1, 0xc0, 0x83, 0xfd, 0xf2, 0x88, 0x2a, 0xc0, + 0x20, 0x98, 0x53, 0x77, 0x1f, 0x13, 0x30, 0x3d, 0x39, 0x3b, 0xc6, 0x04, 0xfc, 0x4b, 0x0b, 0x7a, + 0x56, 0xe9, 0x06, 0xff, 0xe0, 0xb7, 0x80, 0xd7, 0x8c, 0x2d, 0xe0, 0x4c, 0x5e, 0xa2, 0x8d, 0xdc, + 0xd5, 0xbf, 0x98, 0x58, 0xfd, 0xe7, 0x72, 0x39, 0xb4, 0x5f, 0xf8, 0x3b, 0x30, 0xc8, 0xd2, 0x77, + 0x88, 0x17, 0x5d, 0xcf, 0x1b, 0x0b, 0xbe, 0x9c, 0x58, 0xf0, 0xa3, 0x1a, 0xa9, 0xb6, 0xd2, 0x9f, + 0x84, 0x7e, 0xf1, 0x44, 0x28, 0xf9, 0x4c, 0x59, 0xd0, 0x62, 0x89, 0xb7, 0x7f, 0xbc, 0x08, 0x46, + 0xba, 0x10, 0xf4, 0xab, 0x16, 0x4c, 0x07, 0xdc, 0x75, 0xb8, 0x3e, 0xdf, 0x0a, 0x5c, 0x6f, 0xb3, + 0x5a, 0xdb, 0x22, 0xf5, 0x56, 0xc3, 0xf5, 0x36, 0x97, 0x36, 0x3d, 0x5f, 0x81, 0x17, 0xee, 0x90, + 0x5a, 0x8b, 0x99, 0xf5, 0x3a, 0xe4, 0x26, 0x51, 0x2e, 0xf8, 0xcf, 0xdd, 0xdb, 0x2f, 0x4f, 0xe3, + 0x43, 0xf1, 0xc6, 0x87, 0x6c, 0x0b, 0xfa, 0x1d, 0x0b, 0x2e, 0xf1, 0x2c, 0x1a, 0xdd, 0xb7, 0xbf, + 0xcd, 0x3d, 0xbb, 0x22, 0x59, 0xc5, 0x4c, 0xd6, 0x48, 0xb0, 0x33, 0xfb, 0x41, 0xd1, 0xa1, 0x97, + 0x2a, 0x87, 0xab, 0x0b, 0x1f, 0xb6, 0x71, 0xf6, 0x3f, 0x28, 0xc2, 0xb0, 0x88, 0x1d, 0x27, 0xce, + 0x80, 0x17, 0x8d, 0x29, 0xf1, 0x48, 0x62, 0x4a, 0x8c, 0x1b, 0xc4, 0x47, 0xb3, 0xfd, 0x87, 0x30, + 0x4e, 0x37, 0xe7, 0xab, 0xc4, 0x09, 0xa2, 0x75, 0xe2, 0x70, 0x87, 0xb2, 0xe2, 0xa1, 0x77, 0x7f, + 0xa5, 0xd9, 0x5c, 0x4e, 0x32, 0xc3, 0x69, 0xfe, 0xdf, 0x49, 0x67, 0x8e, 0x07, 0x63, 0xa9, 0xf0, + 0x7f, 0x6f, 0x42, 0x49, 0xbd, 0x6f, 0x11, 0x9b, 0x4e, 0xfb, 0x28, 0x9a, 0x49, 0x0e, 0x5c, 0x71, + 0x16, 0xbf, 0xad, 0x8a, 0xd9, 0xd9, 0x7f, 0xa7, 0x60, 0x54, 0xc8, 0x07, 0x71, 0x15, 0x06, 0x9c, + 0x30, 0x74, 0x37, 0x3d, 0x52, 0x6f, 0xa7, 0xdb, 0x4c, 0x55, 0xc3, 0xde, 0x18, 0xcd, 0x88, 0x92, + 0x58, 0xf1, 0x40, 0x57, 0xb9, 0xdb, 0xde, 0x2e, 0x69, 0xa7, 0xd8, 0x4c, 0x71, 0x03, 0xe9, 0xd8, + 0xb7, 0x4b, 0xb0, 0x28, 0x8f, 0x3e, 0xc1, 0xfd, 0x2a, 0xaf, 0x79, 0xfe, 0x6d, 0xef, 0x8a, 0xef, + 0xcb, 0x38, 0x21, 0xdd, 0x31, 0x1c, 0x97, 0xde, 0x94, 0xaa, 0x38, 0x36, 0xb9, 0x75, 0x17, 0x4f, + 0xf7, 0x33, 0xc0, 0xb2, 0x06, 0x98, 0xcf, 0xc9, 0x43, 0x44, 0x60, 0x54, 0x04, 0x26, 0x94, 0x30, + 0xd1, 0x77, 0x99, 0x97, 0x40, 0xb3, 0x74, 0xac, 0x82, 0xbf, 0x66, 0xb2, 0xc0, 0x49, 0x9e, 0xf6, + 0x4f, 0x5b, 0xc0, 0x9e, 0xd6, 0x1e, 0x83, 0x3c, 0xf2, 0x61, 0x53, 0x1e, 0x99, 0xcc, 0xeb, 0xe4, + 0x1c, 0x51, 0xe4, 0x05, 0x3e, 0xb3, 0x2a, 0x81, 0x7f, 0x67, 0x4f, 0x38, 0xc3, 0x74, 0xbe, 0x7f, + 0xd8, 0xff, 0xcd, 0xe2, 0x9b, 0x58, 0x1c, 0x88, 0xe0, 0xb3, 0x30, 0x50, 0x73, 0x9a, 0x4e, 0x8d, + 0xe7, 0xb6, 0xca, 0xd5, 0x05, 0x1a, 0x85, 0xa6, 0xe7, 0x44, 0x09, 0xae, 0xdb, 0x92, 0x01, 0x2e, + 0x07, 0x24, 0xb8, 0xa3, 0x3e, 0x4b, 0x55, 0x39, 0xb5, 0x0d, 0xc3, 0x06, 0xb3, 0x07, 0xaa, 0x08, + 0xf9, 0x2c, 0x3f, 0x62, 0x55, 0x40, 0xd6, 0x1d, 0x18, 0xf7, 0xb4, 0xff, 0xf4, 0x40, 0x91, 0x97, + 0xcb, 0xc7, 0x3a, 0x1d, 0xa2, 0xec, 0xf4, 0xd1, 0x5e, 0xed, 0x26, 0xd8, 0xe0, 0x34, 0x67, 0xfb, + 0x27, 0x2c, 0x78, 0x48, 0x27, 0xd4, 0x1e, 0x06, 0x75, 0x32, 0xaf, 0xcc, 0xc3, 0x80, 0xdf, 0x24, + 0x81, 0x13, 0xf9, 0x81, 0x38, 0x35, 0x2e, 0xca, 0x4e, 0xbf, 0x2e, 0xe0, 0x07, 0x22, 0x53, 0x83, + 0xe4, 0x2e, 0xe1, 0x58, 0x95, 0xa4, 0xb7, 0x4f, 0xd6, 0x19, 0xa1, 0x78, 0x02, 0xc6, 0xf6, 0x00, + 0x66, 0xa9, 0x0f, 0xb1, 0xc0, 0xd8, 0x7f, 0x66, 0xf1, 0x89, 0xa5, 0x37, 0x1d, 0xbd, 0x0d, 0x63, + 0x3b, 0x4e, 0x54, 0xdb, 0x5a, 0xb8, 0xd3, 0x0c, 0xb8, 0xb1, 0x4a, 0xf6, 0xd3, 0xd3, 0x9d, 0xfa, + 0x49, 0xfb, 0xc8, 0xd8, 0x55, 0x74, 0x25, 0xc1, 0x0c, 0xa7, 0xd8, 0xa3, 0x75, 0x18, 0x64, 0x30, + 0xf6, 0xba, 0x31, 0x6c, 0x27, 0x1a, 0xe4, 0xd5, 0xa6, 0x9c, 0x1d, 0x56, 0x62, 0x3e, 0x58, 0x67, + 0x6a, 0x7f, 0xa5, 0xc8, 0x57, 0x3b, 0x13, 0xe5, 0x9f, 0x84, 0xfe, 0xa6, 0x5f, 0x9f, 0x5b, 0x9a, + 0xc7, 0x62, 0x14, 0xd4, 0x31, 0x52, 0xe1, 0x60, 0x2c, 0xf1, 0xe8, 0x22, 0x0c, 0x88, 0x9f, 0xd2, + 0xb8, 0xc8, 0xf6, 0x66, 0x41, 0x17, 0x62, 0x85, 0x45, 0xcf, 0x01, 0x34, 0x03, 0x7f, 0xd7, 0xad, + 0xb3, 0x68, 0x27, 0x45, 0xd3, 0x4f, 0xa9, 0xa2, 0x30, 0x58, 0xa3, 0x42, 0xaf, 0xc0, 0x70, 0xcb, + 0x0b, 0xb9, 0x38, 0xa2, 0xc5, 0x94, 0x56, 0x1e, 0x34, 0x37, 0x74, 0x24, 0x36, 0x69, 0xd1, 0x0c, + 0xf4, 0x45, 0x0e, 0xf3, 0xbb, 0xe9, 0xcd, 0x77, 0x27, 0x5e, 0xa3, 0x14, 0x7a, 0x1a, 0x25, 0x5a, + 0x00, 0x8b, 0x82, 0xe8, 0x4d, 0xf9, 0xd0, 0x98, 0x6f, 0xec, 0xc2, 0x8f, 0xbf, 0xbb, 0x43, 0x40, + 0x7b, 0x66, 0x2c, 0xde, 0x07, 0x18, 0xbc, 0xd0, 0xcb, 0x00, 0xe4, 0x4e, 0x44, 0x02, 0xcf, 0x69, + 0x28, 0x6f, 0x39, 0x25, 0x17, 0xcc, 0xfb, 0xab, 0x7e, 0x74, 0x23, 0x24, 0x0b, 0x8a, 0x02, 0x6b, + 0xd4, 0xf6, 0xef, 0x94, 0x00, 0x62, 0xb9, 0x1d, 0xdd, 0x4d, 0x6d, 0x5c, 0xcf, 0xb4, 0x97, 0xf4, + 0x8f, 0x6e, 0xd7, 0x42, 0x9f, 0xb7, 0x60, 0x50, 0x04, 0x75, 0x61, 0x23, 0x54, 0x68, 0xbf, 0x71, + 0x9a, 0xb1, 0x65, 0x68, 0x09, 0xde, 0x84, 0xe7, 0xe5, 0x0c, 0xd5, 0x30, 0x1d, 0x5b, 0xa1, 0x57, + 0x8c, 0xde, 0x2f, 0xaf, 0x8a, 0x45, 0xa3, 0x2b, 0xd5, 0x55, 0xb1, 0xc4, 0xce, 0x08, 0xfd, 0x96, + 0x78, 0xc3, 0xb8, 0x25, 0xf6, 0xe4, 0xbf, 0xa4, 0x34, 0xc4, 0xd7, 0x4e, 0x17, 0x44, 0x54, 0xd1, + 0xa3, 0x2a, 0xf4, 0xe6, 0x3f, 0xff, 0xd3, 0xee, 0x49, 0x1d, 0x22, 0x2a, 0x7c, 0x1a, 0x46, 0xeb, + 0xa6, 0x10, 0x20, 0x66, 0xe2, 0x13, 0x79, 0x7c, 0x13, 0x32, 0x43, 0x7c, 0xec, 0x27, 0x10, 0x38, + 0xc9, 0x18, 0x55, 0x78, 0x90, 0x8d, 0x25, 0x6f, 0xc3, 0x17, 0x6f, 0x49, 0xec, 0xdc, 0xb1, 0xdc, + 0x0b, 0x23, 0xb2, 0x43, 0x29, 0xe3, 0xd3, 0x7d, 0x55, 0x94, 0xc5, 0x8a, 0x0b, 0x7a, 0x1d, 0xfa, + 0xd8, 0xfb, 0xaf, 0x70, 0x72, 0x20, 0x5f, 0x57, 0x6d, 0x46, 0x1b, 0x8c, 0x17, 0x24, 0xfb, 0x1b, + 0x62, 0xc1, 0x01, 0x5d, 0x95, 0xaf, 0x2b, 0xc3, 0x25, 0xef, 0x46, 0x48, 0xd8, 0xeb, 0xca, 0xd2, + 0xec, 0x63, 0xf1, 0xc3, 0x49, 0x0e, 0xcf, 0x4c, 0xb6, 0x68, 0x94, 0xa4, 0x52, 0x94, 0xf8, 0x2f, + 0x73, 0x38, 0x8a, 0xd8, 0x48, 0x99, 0xcd, 0x33, 0xf3, 0x3c, 0xc6, 0xdd, 0x79, 0xd3, 0x64, 0x81, + 0x93, 0x3c, 0xa9, 0x44, 0xca, 0x57, 0xbd, 0x78, 0x8d, 0xd2, 0x69, 0xef, 0xe0, 0x17, 0x71, 0x76, + 0x1a, 0x71, 0x08, 0x16, 0xe5, 0x8f, 0x55, 0x3c, 0x98, 0xf2, 0x60, 0x2c, 0xb9, 0x44, 0x1f, 0xa8, + 0x38, 0xf2, 0x27, 0x3d, 0x30, 0x62, 0x4e, 0x29, 0x74, 0x09, 0x4a, 0x82, 0x89, 0xca, 0x83, 0xa2, + 0x56, 0xc9, 0x8a, 0x44, 0xe0, 0x98, 0x86, 0xa5, 0xbf, 0x61, 0xc5, 0x35, 0xf7, 0xe3, 0x38, 0xfd, + 0x8d, 0xc2, 0x60, 0x8d, 0x8a, 0x5e, 0xac, 0xd6, 0x7d, 0x3f, 0x52, 0x07, 0x92, 0x9a, 0x77, 0xb3, + 0x0c, 0x8a, 0x05, 0x96, 0x1e, 0x44, 0xdb, 0x24, 0xf0, 0x48, 0xc3, 0x8c, 0x3f, 0xae, 0x0e, 0xa2, + 0x6b, 0x3a, 0x12, 0x9b, 0xb4, 0xf4, 0x38, 0xf5, 0x43, 0x36, 0x91, 0xc5, 0xf5, 0x2d, 0x76, 0xe7, + 0xae, 0xf2, 0x87, 0xe9, 0x12, 0x8f, 0x3e, 0x06, 0x0f, 0xa9, 0x58, 0x5f, 0x98, 0xdb, 0x41, 0x64, + 0x8d, 0x7d, 0x86, 0xb6, 0xe5, 0xa1, 0xb9, 0x6c, 0x32, 0x9c, 0x57, 0x1e, 0xbd, 0x06, 0x23, 0x42, + 0xc4, 0x97, 0x1c, 0xfb, 0x4d, 0xdf, 0xa4, 0x6b, 0x06, 0x16, 0x27, 0xa8, 0x65, 0x04, 0x75, 0x26, + 0x65, 0x4b, 0x0e, 0x03, 0xe9, 0x08, 0xea, 0x3a, 0x1e, 0xa7, 0x4a, 0xa0, 0x19, 0x18, 0xe5, 0x32, + 0x98, 0xeb, 0x6d, 0xf2, 0x31, 0x11, 0x8f, 0xc5, 0xd4, 0x92, 0xba, 0x6e, 0xa2, 0x71, 0x92, 0x1e, + 0xbd, 0x04, 0x43, 0x4e, 0x50, 0xdb, 0x72, 0x23, 0x52, 0x8b, 0x5a, 0x01, 0x7f, 0x45, 0xa6, 0x39, + 0x77, 0xcd, 0x68, 0x38, 0x6c, 0x50, 0xda, 0x77, 0x61, 0x22, 0x23, 0x62, 0x05, 0x9d, 0x38, 0x4e, + 0xd3, 0x95, 0xdf, 0x94, 0xf0, 0xa0, 0x9e, 0xa9, 0x2c, 0xc9, 0xaf, 0xd1, 0xa8, 0xe8, 0xec, 0x64, + 0x91, 0x2d, 0xb4, 0x94, 0xad, 0x6a, 0x76, 0x2e, 0x4a, 0x04, 0x8e, 0x69, 0xec, 0xff, 0x58, 0x80, + 0xd1, 0x0c, 0xdb, 0x0a, 0x4b, 0x1b, 0x9a, 0xb8, 0xa4, 0xc4, 0x59, 0x42, 0xcd, 0x80, 0xfc, 0x85, + 0x43, 0x04, 0xe4, 0x2f, 0x76, 0x0a, 0xc8, 0xdf, 0xf3, 0x4e, 0x02, 0xf2, 0x9b, 0x3d, 0xd6, 0xdb, + 0x55, 0x8f, 0x65, 0x04, 0xf1, 0xef, 0x3b, 0x64, 0x10, 0x7f, 0xa3, 0xd3, 0xfb, 0xbb, 0xe8, 0xf4, + 0x1f, 0x29, 0xc0, 0x58, 0xd2, 0x09, 0xf5, 0x18, 0xf4, 0xb6, 0xaf, 0x1b, 0x7a, 0xdb, 0x8b, 0xdd, + 0x3c, 0xee, 0xcd, 0xd5, 0xe1, 0xe2, 0x84, 0x0e, 0xf7, 0xa9, 0xae, 0xb8, 0xb5, 0xd7, 0xe7, 0xfe, + 0x64, 0x01, 0x4e, 0x66, 0xbe, 0x2e, 0x3e, 0x86, 0xbe, 0xb9, 0x6e, 0xf4, 0xcd, 0xb3, 0x5d, 0x3f, + 0x7c, 0xce, 0xed, 0xa0, 0x5b, 0x89, 0x0e, 0xba, 0xd4, 0x3d, 0xcb, 0xf6, 0xbd, 0xf4, 0x8d, 0x22, + 0x9c, 0xcb, 0x2c, 0x17, 0xab, 0x3d, 0x17, 0x0d, 0xb5, 0xe7, 0x73, 0x09, 0xb5, 0xa7, 0xdd, 0xbe, + 0xf4, 0xd1, 0xe8, 0x41, 0xc5, 0x03, 0x60, 0x16, 0xc6, 0xe0, 0x3e, 0x75, 0xa0, 0xc6, 0x03, 0x60, + 0xc5, 0x08, 0x9b, 0x7c, 0xbf, 0x93, 0x74, 0x9f, 0xbf, 0x6d, 0xc1, 0xe9, 0xcc, 0xb1, 0x39, 0x06, + 0x5d, 0xd7, 0xaa, 0xa9, 0xeb, 0x7a, 0xb2, 0xeb, 0xd9, 0x9a, 0xa3, 0xfc, 0xfa, 0xb9, 0xde, 0x9c, + 0x6f, 0x61, 0x37, 0xf9, 0xeb, 0x30, 0xe8, 0xd4, 0x6a, 0x24, 0x0c, 0x57, 0xfc, 0xba, 0x8a, 0xdd, + 0xfd, 0x2c, 0xbb, 0x67, 0xc5, 0xe0, 0x83, 0xfd, 0xf2, 0x54, 0x92, 0x45, 0x8c, 0xc6, 0x3a, 0x07, + 0xf4, 0x09, 0x18, 0x08, 0xc5, 0xb9, 0x29, 0xc6, 0xfe, 0xf9, 0x2e, 0x3b, 0xc7, 0x59, 0x27, 0x0d, + 0x33, 0x48, 0x94, 0xd2, 0x54, 0x28, 0x96, 0xe8, 0x7f, 0xd1, 0x03, 0xca, 0xa4, 0xa5, 0xca, 0x44, + 0x78, 0x93, 0xfb, 0x08, 0x2b, 0xf3, 0x1c, 0xc0, 0xae, 0xba, 0x12, 0x24, 0xb5, 0x10, 0xda, 0x65, + 0x41, 0xa3, 0x42, 0x1f, 0x81, 0xb1, 0x90, 0xc7, 0x52, 0x9c, 0x6b, 0x38, 0x21, 0x7b, 0xad, 0x23, + 0xe6, 0x22, 0x0b, 0x47, 0x55, 0x4d, 0xe0, 0x70, 0x8a, 0x1a, 0x2d, 0xca, 0x5a, 0x99, 0x27, 0x09, + 0x9f, 0x9e, 0x17, 0xe2, 0x1a, 0x85, 0x37, 0xc9, 0x89, 0xe4, 0x20, 0xb0, 0xee, 0xd7, 0x4a, 0xa2, + 0x4f, 0x00, 0xd0, 0x49, 0x24, 0xb4, 0x11, 0xfd, 0xf9, 0x5b, 0x28, 0xdd, 0x5b, 0xea, 0x99, 0xce, + 0xd1, 0xec, 0xe5, 0xee, 0xbc, 0x62, 0x82, 0x35, 0x86, 0xc8, 0x81, 0xe1, 0xf8, 0x5f, 0x9c, 0xd9, + 0xf7, 0x62, 0x6e, 0x0d, 0x49, 0xe6, 0x4c, 0xf1, 0x3d, 0xaf, 0xb3, 0xc0, 0x26, 0x47, 0xfb, 0xdf, + 0x0e, 0xc0, 0xc3, 0x6d, 0x36, 0x63, 0x34, 0x63, 0x1a, 0x7c, 0x9f, 0x4e, 0xde, 0xe2, 0xa7, 0x32, + 0x0b, 0x1b, 0xd7, 0xfa, 0xc4, 0x9c, 0x2f, 0xbc, 0xe3, 0x39, 0xff, 0x43, 0x96, 0xa6, 0x5f, 0xe1, + 0x4e, 0xa9, 0x1f, 0x3e, 0xe4, 0x21, 0x73, 0x84, 0x0a, 0x97, 0x8d, 0x0c, 0xad, 0xc5, 0x73, 0x5d, + 0x37, 0xa7, 0x7b, 0x35, 0xc6, 0xd7, 0xb2, 0x03, 0x08, 0x73, 0x85, 0xc6, 0x95, 0xc3, 0x7e, 0xff, + 0x71, 0x05, 0x13, 0xfe, 0x7d, 0x0b, 0x4e, 0xa7, 0xc0, 0xbc, 0x0d, 0x24, 0x14, 0x31, 0xae, 0x56, + 0xdf, 0x71, 0xe3, 0x25, 0x43, 0xfe, 0x0d, 0x57, 0xc5, 0x37, 0x9c, 0xce, 0xa5, 0x4b, 0x36, 0xfd, + 0x8b, 0x7f, 0x54, 0x9e, 0x60, 0x15, 0x98, 0x84, 0x38, 0xbf, 0xe9, 0xc7, 0x7b, 0xfd, 0xff, 0xd6, + 0xc4, 0x4e, 0x9e, 0x5a, 0x86, 0x73, 0xed, 0xbb, 0xfa, 0x50, 0xcf, 0x9b, 0x7f, 0xcf, 0x82, 0xb3, + 0x6d, 0x63, 0xe8, 0x7c, 0x1b, 0x4a, 0xbb, 0xf6, 0xe7, 0x2c, 0x78, 0x24, 0xb3, 0x84, 0xe1, 0x23, + 0x77, 0x09, 0x4a, 0xb5, 0x44, 0x3e, 0xd5, 0x38, 0x9a, 0x84, 0xca, 0xa5, 0x1a, 0xd3, 0x18, 0xae, + 0x70, 0x85, 0x8e, 0xae, 0x70, 0xbf, 0x61, 0x41, 0xea, 0xac, 0x3a, 0x06, 0xd1, 0x69, 0xc9, 0x14, + 0x9d, 0x1e, 0xeb, 0xa6, 0x37, 0x73, 0xa4, 0xa6, 0xbf, 0x18, 0x85, 0x53, 0x39, 0xaf, 0x13, 0x77, + 0x61, 0x7c, 0xb3, 0x46, 0xcc, 0xe7, 0xe8, 0xed, 0xc2, 0x34, 0xb5, 0x7d, 0xbb, 0xce, 0xd3, 0xd8, + 0xa6, 0x48, 0x70, 0xba, 0x0a, 0xf4, 0x39, 0x0b, 0x4e, 0x38, 0xb7, 0xc3, 0x05, 0x2a, 0x02, 0xbb, + 0xb5, 0xd9, 0x86, 0x5f, 0xdb, 0xa6, 0x92, 0x85, 0x5c, 0x56, 0x2f, 0x64, 0xaa, 0x25, 0x6f, 0x55, + 0x53, 0xf4, 0x46, 0xf5, 0x2c, 0x69, 0x79, 0x16, 0x15, 0xce, 0xac, 0x0b, 0x61, 0x91, 0x5f, 0x85, + 0x5e, 0xb0, 0xdb, 0x04, 0x4c, 0xc8, 0x7a, 0x46, 0xca, 0x65, 0x3a, 0x89, 0xc1, 0x8a, 0x0f, 0xfa, + 0x14, 0x94, 0x36, 0xe5, 0xdb, 0xe8, 0x0c, 0x99, 0x31, 0xee, 0xc8, 0xf6, 0x2f, 0xc6, 0xb9, 0x6f, + 0x81, 0x22, 0xc2, 0x31, 0x53, 0xf4, 0x1a, 0x14, 0xbd, 0x8d, 0xb0, 0x5d, 0xde, 0xef, 0x84, 0x13, + 0x29, 0x0f, 0x4b, 0xb2, 0xba, 0x58, 0xc5, 0xb4, 0x20, 0xba, 0x0a, 0xc5, 0x60, 0xbd, 0x2e, 0x74, + 0xea, 0x99, 0x8b, 0x14, 0xcf, 0xce, 0xe7, 0xb4, 0x8a, 0x71, 0xc2, 0xb3, 0xf3, 0x98, 0xb2, 0x40, + 0x15, 0xe8, 0x65, 0x4f, 0xfa, 0x84, 0x6c, 0x96, 0x79, 0x17, 0x6d, 0xf3, 0x34, 0x96, 0xc7, 0x2e, + 0x61, 0x04, 0x98, 0x33, 0x42, 0x6b, 0xd0, 0x57, 0x63, 0x39, 0xa2, 0x85, 0x30, 0xf6, 0xfe, 0x4c, + 0xed, 0x79, 0x9b, 0xe4, 0xd9, 0x42, 0x99, 0xcc, 0x28, 0xb0, 0xe0, 0xc5, 0xb8, 0x92, 0xe6, 0xd6, + 0x46, 0xc8, 0xb4, 0x6f, 0x79, 0x5c, 0xdb, 0xe4, 0x84, 0x17, 0x5c, 0x19, 0x05, 0x16, 0xbc, 0xd0, + 0xcb, 0x50, 0xd8, 0xa8, 0x89, 0xe7, 0x7a, 0x99, 0x6a, 0x74, 0x33, 0xb2, 0xcc, 0x6c, 0xdf, 0xbd, + 0xfd, 0x72, 0x61, 0x71, 0x0e, 0x17, 0x36, 0x6a, 0x68, 0x15, 0xfa, 0x37, 0x78, 0x2c, 0x0a, 0xa1, + 0x29, 0x7f, 0x22, 0x3b, 0x4c, 0x46, 0x2a, 0x5c, 0x05, 0x7f, 0xfa, 0x25, 0x10, 0x58, 0x32, 0x61, + 0xe9, 0x3e, 0x54, 0x4c, 0x0d, 0x11, 0xd2, 0x6f, 0xfa, 0x70, 0x71, 0x50, 0xb8, 0xac, 0x1c, 0x47, + 0xe6, 0xc0, 0x1a, 0x47, 0x3a, 0xab, 0x9d, 0xbb, 0xad, 0x80, 0xc5, 0x7b, 0x17, 0xb1, 0x9f, 0x32, + 0x67, 0xf5, 0x8c, 0x24, 0x6a, 0x37, 0xab, 0x15, 0x11, 0x8e, 0x99, 0xa2, 0x6d, 0x18, 0xde, 0x0d, + 0x9b, 0x5b, 0x44, 0x2e, 0x69, 0x16, 0x0a, 0x2a, 0x47, 0xd6, 0xbb, 0x29, 0x08, 0xdd, 0x20, 0x6a, + 0x39, 0x8d, 0xd4, 0x2e, 0xc4, 0xe4, 0xf2, 0x9b, 0x3a, 0x33, 0x6c, 0xf2, 0xa6, 0xdd, 0xff, 0x76, + 0xcb, 0x5f, 0xdf, 0x8b, 0x88, 0x88, 0xc4, 0x97, 0xd9, 0xfd, 0x6f, 0x70, 0x92, 0x74, 0xf7, 0x0b, + 0x04, 0x96, 0x4c, 0xd0, 0x4d, 0xd1, 0x3d, 0x6c, 0xf7, 0x1c, 0xcb, 0x0f, 0xf3, 0x3b, 0x23, 0x89, + 0x72, 0x3a, 0x85, 0xed, 0x96, 0x31, 0x2b, 0xb6, 0x4b, 0x36, 0xb7, 0xfc, 0xc8, 0xf7, 0x12, 0x3b, + 0xf4, 0x78, 0xfe, 0x2e, 0x59, 0xc9, 0xa0, 0x4f, 0xef, 0x92, 0x59, 0x54, 0x38, 0xb3, 0x2e, 0x54, + 0x87, 0x91, 0xa6, 0x1f, 0x44, 0xb7, 0xfd, 0x40, 0xce, 0x2f, 0xd4, 0x46, 0xd3, 0x67, 0x50, 0x8a, + 0x1a, 0x59, 0x90, 0x4b, 0x13, 0x83, 0x13, 0x3c, 0xd1, 0x47, 0xa1, 0x3f, 0xac, 0x39, 0x0d, 0xb2, + 0x74, 0x7d, 0x72, 0x22, 0xff, 0xf8, 0xa9, 0x72, 0x92, 0x9c, 0xd9, 0xc5, 0x43, 0x89, 0x70, 0x12, + 0x2c, 0xd9, 0xa1, 0x45, 0xe8, 0x65, 0x69, 0x34, 0x59, 0xd8, 0xc8, 0x9c, 0x68, 0xc5, 0x29, 0x97, + 0x7e, 0xbe, 0x37, 0x31, 0x30, 0xe6, 0xc5, 0xe9, 0x1a, 0x10, 0x57, 0x5d, 0x3f, 0x9c, 0x3c, 0x99, + 0xbf, 0x06, 0xc4, 0x0d, 0xf9, 0x7a, 0xb5, 0xdd, 0x1a, 0x50, 0x44, 0x38, 0x66, 0x4a, 0x77, 0x66, + 0xba, 0x9b, 0x9e, 0x6a, 0xe3, 0x8b, 0x96, 0xbb, 0x97, 0xb2, 0x9d, 0x99, 0xee, 0xa4, 0x94, 0x85, + 0xfd, 0xc7, 0xfd, 0x69, 0x99, 0x85, 0xa9, 0x48, 0xfe, 0x37, 0x2b, 0x65, 0x3d, 0xff, 0x40, 0xb7, + 0x1a, 0xdb, 0x23, 0xbc, 0xd6, 0x7d, 0xce, 0x82, 0x53, 0xcd, 0xcc, 0x0f, 0x11, 0x02, 0x40, 0x77, + 0x8a, 0x5f, 0xfe, 0xe9, 0x2a, 0xc4, 0x68, 0x36, 0x1e, 0xe7, 0xd4, 0x94, 0xbc, 0x3a, 0x17, 0xdf, + 0xf1, 0xd5, 0x79, 0x05, 0x06, 0x6a, 0xfc, 0x9e, 0x23, 0x43, 0x63, 0x77, 0x15, 0x20, 0x8f, 0x89, + 0x12, 0xe2, 0x82, 0xb4, 0x81, 0x15, 0x0b, 0xf4, 0xc3, 0x16, 0x9c, 0x4d, 0x36, 0x1d, 0x13, 0x86, + 0x16, 0x71, 0x49, 0xb9, 0x5e, 0x66, 0x51, 0x7c, 0x7f, 0x4a, 0xfe, 0x37, 0x88, 0x0f, 0x3a, 0x11, + 0xe0, 0xf6, 0x95, 0xa1, 0xf9, 0x0c, 0xc5, 0x50, 0x9f, 0x69, 0x12, 0xeb, 0x42, 0x39, 0xf4, 0x02, + 0x0c, 0xed, 0xf8, 0x2d, 0x2f, 0x12, 0xae, 0x6b, 0xc2, 0x8d, 0x86, 0xb9, 0x8f, 0xac, 0x68, 0x70, + 0x6c, 0x50, 0x25, 0x54, 0x4a, 0x03, 0xf7, 0xad, 0x52, 0x7a, 0x0b, 0x86, 0x3c, 0xcd, 0xd7, 0x5a, + 0xc8, 0x03, 0x17, 0xf2, 0x95, 0x6e, 0xba, 0x67, 0x36, 0x6f, 0xa5, 0x0e, 0xc1, 0x06, 0xb7, 0xe3, + 0xf5, 0x69, 0xfb, 0xf9, 0x42, 0x86, 0x50, 0xcf, 0xd5, 0x4a, 0xaf, 0x9a, 0x6a, 0xa5, 0x0b, 0x49, + 0xb5, 0x52, 0xca, 0x1c, 0x62, 0x68, 0x94, 0xba, 0x4f, 0xb1, 0xd5, 0x75, 0x5c, 0xd2, 0xef, 0xb5, + 0xe0, 0x21, 0xa6, 0x5f, 0xa7, 0x15, 0xbc, 0x63, 0x9d, 0xfa, 0xc3, 0xf7, 0xf6, 0xcb, 0x0f, 0x2d, + 0x67, 0xb3, 0xc3, 0x79, 0xf5, 0xd8, 0x0d, 0x38, 0xdf, 0xe9, 0x68, 0x64, 0x7e, 0x94, 0x75, 0x65, + 0x80, 0x8f, 0xfd, 0x28, 0xeb, 0x4b, 0xf3, 0x98, 0x61, 0xba, 0x8d, 0xba, 0x65, 0xff, 0x7b, 0x0b, + 0x8a, 0x15, 0xbf, 0x7e, 0x0c, 0x97, 0xee, 0x0f, 0x1b, 0x97, 0xee, 0x87, 0xb3, 0x0f, 0xe5, 0x7a, + 0xae, 0x41, 0x69, 0x21, 0x61, 0x50, 0x3a, 0x9b, 0xc7, 0xa0, 0xbd, 0xf9, 0xe8, 0xa7, 0x8a, 0x30, + 0x58, 0xf1, 0xeb, 0xea, 0x11, 0xc3, 0x3f, 0xba, 0x9f, 0x47, 0x0c, 0xb9, 0x49, 0x53, 0x34, 0xce, + 0xcc, 0xfd, 0x52, 0xbe, 0xfc, 0xfe, 0x36, 0x7b, 0xcb, 0x70, 0x8b, 0xb8, 0x9b, 0x5b, 0x11, 0xa9, + 0x27, 0x3f, 0xe7, 0xf8, 0xde, 0x32, 0xfc, 0x71, 0x01, 0x46, 0x13, 0xb5, 0xa3, 0x06, 0x0c, 0x37, + 0x74, 0x73, 0x85, 0x98, 0xa7, 0xf7, 0x65, 0xe9, 0x10, 0xbe, 0xe0, 0x1a, 0x08, 0x9b, 0xcc, 0xd1, + 0x34, 0x80, 0xb2, 0xdf, 0x4b, 0x75, 0x35, 0xbb, 0x79, 0x28, 0x03, 0x7f, 0x88, 0x35, 0x0a, 0xf4, + 0x22, 0x0c, 0x46, 0x7e, 0xd3, 0x6f, 0xf8, 0x9b, 0x7b, 0xd7, 0x88, 0x0c, 0xc8, 0xa6, 0x3c, 0x3c, + 0xd7, 0x62, 0x14, 0xd6, 0xe9, 0xd0, 0x1d, 0x18, 0x57, 0x4c, 0xaa, 0x47, 0x60, 0xc2, 0x61, 0x9a, + 0x8d, 0xd5, 0x24, 0x47, 0x9c, 0xae, 0xc4, 0xfe, 0x99, 0x22, 0xef, 0x62, 0x2f, 0x72, 0xdf, 0x5b, + 0x0d, 0xef, 0xee, 0xd5, 0xf0, 0x0d, 0x0b, 0xc6, 0x68, 0xed, 0xcc, 0x7d, 0x4d, 0x8a, 0x1a, 0x2a, + 0x92, 0xba, 0xd5, 0x26, 0x92, 0xfa, 0x05, 0xba, 0x6b, 0xd6, 0xfd, 0x56, 0x24, 0xf4, 0x87, 0xda, + 0xb6, 0x48, 0xa1, 0x58, 0x60, 0x05, 0x1d, 0x09, 0x02, 0xf1, 0xe4, 0x56, 0xa7, 0x23, 0x41, 0x80, + 0x05, 0x56, 0x06, 0x5a, 0xef, 0xc9, 0x0e, 0xb4, 0xce, 0xe3, 0xe5, 0x0a, 0x47, 0x27, 0x21, 0xf4, + 0x69, 0xf1, 0x72, 0xa5, 0x07, 0x54, 0x4c, 0x63, 0x7f, 0xad, 0x08, 0x43, 0x15, 0xbf, 0x1e, 0xdb, + 0xee, 0x5f, 0x30, 0x6c, 0xf7, 0xe7, 0x13, 0xb6, 0xfb, 0x31, 0x9d, 0xf6, 0x3d, 0x4b, 0xfd, 0xb7, + 0xca, 0x52, 0xff, 0xeb, 0x16, 0x1b, 0xb5, 0xf9, 0xd5, 0x2a, 0xf7, 0x86, 0x44, 0x97, 0x61, 0x90, + 0x6d, 0x30, 0xec, 0x8d, 0xb7, 0x34, 0x68, 0xb3, 0xc4, 0x67, 0xab, 0x31, 0x18, 0xeb, 0x34, 0xe8, + 0x22, 0x0c, 0x84, 0xc4, 0x09, 0x6a, 0x5b, 0x6a, 0x77, 0x15, 0xd6, 0x67, 0x0e, 0xc3, 0x0a, 0x8b, + 0xde, 0x88, 0x43, 0xb5, 0x16, 0xf3, 0xdf, 0x8c, 0xea, 0xed, 0xe1, 0x4b, 0x24, 0x3f, 0x3e, 0xab, + 0x7d, 0x0b, 0x50, 0x9a, 0xbe, 0x8b, 0x60, 0x82, 0x65, 0x33, 0x98, 0x60, 0x29, 0x15, 0x48, 0xf0, + 0xaf, 0x2c, 0x18, 0xa9, 0xf8, 0x75, 0xba, 0x74, 0xbf, 0x93, 0xd6, 0xa9, 0x1e, 0xa7, 0xba, 0xaf, + 0x4d, 0x9c, 0xea, 0x47, 0xa1, 0xb7, 0xe2, 0xd7, 0x3b, 0x04, 0x3c, 0xfc, 0xff, 0x2d, 0xe8, 0xaf, + 0xf8, 0xf5, 0x63, 0x30, 0x4d, 0xbc, 0x6a, 0x9a, 0x26, 0x1e, 0xca, 0x99, 0x37, 0x39, 0xd6, 0x88, + 0xff, 0xaf, 0x07, 0x86, 0x69, 0x3b, 0xfd, 0x4d, 0x39, 0x94, 0x46, 0xb7, 0x59, 0x5d, 0x74, 0x1b, + 0x95, 0xc2, 0xfd, 0x46, 0xc3, 0xbf, 0x9d, 0x1c, 0xd6, 0x45, 0x06, 0xc5, 0x02, 0x8b, 0x9e, 0x81, + 0x81, 0x66, 0x40, 0x76, 0x5d, 0x5f, 0x88, 0xb7, 0x9a, 0xa1, 0xa7, 0x22, 0xe0, 0x58, 0x51, 0xd0, + 0xab, 0x69, 0xe8, 0x7a, 0xf4, 0x28, 0xaf, 0xf9, 0x5e, 0x9d, 0x6b, 0xef, 0x8b, 0x22, 0x99, 0x8a, + 0x06, 0xc7, 0x06, 0x15, 0xba, 0x05, 0x25, 0xf6, 0x9f, 0x6d, 0x3b, 0x87, 0x4f, 0xe3, 0x2c, 0xd2, + 0x4b, 0x0a, 0x06, 0x38, 0xe6, 0x85, 0x9e, 0x03, 0x88, 0x64, 0x42, 0x82, 0x50, 0x04, 0xbe, 0x53, + 0x57, 0x01, 0x95, 0xaa, 0x20, 0xc4, 0x1a, 0x15, 0x7a, 0x1a, 0x4a, 0x91, 0xe3, 0x36, 0x96, 0x5d, + 0x8f, 0xd9, 0x7f, 0x69, 0xfb, 0x45, 0x96, 0x47, 0x01, 0xc4, 0x31, 0x9e, 0x8a, 0x62, 0x2c, 0x28, + 0x0a, 0x4f, 0x62, 0x3f, 0xc0, 0xa8, 0x99, 0x28, 0xb6, 0xac, 0xa0, 0x58, 0xa3, 0x40, 0x5b, 0x70, + 0xc6, 0xf5, 0x58, 0xe2, 0x11, 0x52, 0xdd, 0x76, 0x9b, 0x6b, 0xcb, 0xd5, 0x9b, 0x24, 0x70, 0x37, + 0xf6, 0x66, 0x9d, 0xda, 0x36, 0xf1, 0x64, 0x82, 0x5e, 0x99, 0xb7, 0xfd, 0xcc, 0x52, 0x1b, 0x5a, + 0xdc, 0x96, 0x93, 0xfd, 0x3c, 0x9b, 0xef, 0xd7, 0xab, 0xe8, 0x29, 0x63, 0xeb, 0x38, 0xa5, 0x6f, + 0x1d, 0x07, 0xfb, 0xe5, 0xbe, 0xeb, 0x55, 0x2d, 0x32, 0xc7, 0x4b, 0x70, 0xb2, 0xe2, 0xd7, 0x2b, + 0x7e, 0x10, 0x2d, 0xfa, 0xc1, 0x6d, 0x27, 0xa8, 0xcb, 0xe9, 0x55, 0x96, 0xb1, 0x49, 0xe8, 0xfe, + 0xd9, 0xcb, 0x77, 0x17, 0x23, 0xee, 0xc8, 0xf3, 0x4c, 0x62, 0x3b, 0xe4, 0x8b, 0xba, 0x1a, 0x93, + 0x1d, 0x54, 0xea, 0x9e, 0x2b, 0x4e, 0x44, 0xd0, 0x75, 0x96, 0x82, 0x3f, 0x3e, 0x46, 0x45, 0xf1, + 0x27, 0xb5, 0x14, 0xfc, 0x31, 0x32, 0xf3, 0xdc, 0x35, 0xcb, 0xdb, 0x9f, 0x15, 0x95, 0x70, 0x3d, + 0x00, 0xf7, 0x5a, 0xec, 0x26, 0x87, 0xb5, 0xcc, 0xed, 0x51, 0xc8, 0x4f, 0x0a, 0xc1, 0x2d, 0xaf, + 0x6d, 0x73, 0x7b, 0xd8, 0xdf, 0x0d, 0xa7, 0x92, 0xd5, 0x77, 0x9d, 0x48, 0x7b, 0x0e, 0xc6, 0x03, + 0xbd, 0xa0, 0x96, 0x28, 0xed, 0x24, 0xcf, 0xc7, 0x90, 0x40, 0xe2, 0x34, 0xbd, 0xfd, 0x22, 0x8c, + 0xd3, 0xbb, 0xa7, 0x12, 0xe4, 0x58, 0x2f, 0x77, 0x0e, 0xd2, 0xf2, 0x1f, 0x7a, 0xd9, 0x41, 0x94, + 0xc8, 0x9a, 0x83, 0x3e, 0x09, 0x23, 0x21, 0x59, 0x76, 0xbd, 0xd6, 0x1d, 0xa9, 0x7d, 0x6a, 0xf3, + 0x94, 0xb4, 0xba, 0xa0, 0x53, 0x72, 0x1d, 0xb6, 0x09, 0xc3, 0x09, 0x6e, 0x68, 0x07, 0x46, 0x6e, + 0xbb, 0x5e, 0xdd, 0xbf, 0x1d, 0x4a, 0xfe, 0x03, 0xf9, 0xaa, 0xec, 0x5b, 0x9c, 0x32, 0xd1, 0x46, + 0xa3, 0xba, 0x5b, 0x06, 0x33, 0x9c, 0x60, 0x4e, 0x17, 0x7b, 0xd0, 0xf2, 0x66, 0xc2, 0x1b, 0x21, + 0xe1, 0x8f, 0x03, 0xc5, 0x62, 0xc7, 0x12, 0x88, 0x63, 0x3c, 0x5d, 0xec, 0xec, 0xcf, 0x95, 0xc0, + 0x6f, 0xf1, 0x14, 0x2d, 0x62, 0xb1, 0x63, 0x05, 0xc5, 0x1a, 0x05, 0xdd, 0x0c, 0xd9, 0xbf, 0x55, + 0xdf, 0xc3, 0xbe, 0x1f, 0xc9, 0xed, 0x93, 0xa5, 0x18, 0xd3, 0xe0, 0xd8, 0xa0, 0x42, 0x8b, 0x80, + 0xc2, 0x56, 0xb3, 0xd9, 0x60, 0xde, 0x69, 0x4e, 0x83, 0xb1, 0xe2, 0x6e, 0x3b, 0x45, 0x1e, 0x62, + 0xba, 0x9a, 0xc2, 0xe2, 0x8c, 0x12, 0xf4, 0x5c, 0xdc, 0x10, 0x4d, 0xed, 0x65, 0x4d, 0xe5, 0x66, + 0xaf, 0x2a, 0x6f, 0xa7, 0xc4, 0xa1, 0x05, 0xe8, 0x0f, 0xf7, 0xc2, 0x5a, 0xd4, 0x08, 0xdb, 0x25, + 0x74, 0xab, 0x32, 0x12, 0x2d, 0x9f, 0x28, 0x2f, 0x82, 0x65, 0x59, 0x54, 0x83, 0x09, 0xc1, 0x71, + 0x6e, 0xcb, 0xf1, 0x54, 0x9a, 0x29, 0xee, 0xaa, 0x7f, 0xf9, 0xde, 0x7e, 0x79, 0x42, 0xd4, 0xac, + 0xa3, 0x0f, 0xf6, 0xcb, 0x74, 0x71, 0x64, 0x60, 0x70, 0x16, 0x37, 0x3e, 0xf9, 0x6a, 0x35, 0x7f, + 0xa7, 0x59, 0x09, 0xfc, 0x0d, 0xb7, 0x41, 0xda, 0x99, 0x0e, 0xab, 0x06, 0xa5, 0x98, 0x7c, 0x06, + 0x0c, 0x27, 0xb8, 0xd9, 0x9f, 0x65, 0xb2, 0x63, 0xd5, 0xdd, 0xf4, 0x9c, 0xa8, 0x15, 0x10, 0xb4, + 0x03, 0xc3, 0x4d, 0xb6, 0xbb, 0x88, 0xc4, 0x29, 0x62, 0xae, 0xbf, 0xd0, 0xa5, 0xfa, 0xe9, 0x36, + 0x4b, 0xfd, 0x66, 0xb8, 0xba, 0x55, 0x74, 0x76, 0xd8, 0xe4, 0x6e, 0xff, 0xf3, 0xd3, 0x4c, 0xfa, + 0xa8, 0x72, 0x9d, 0x52, 0xbf, 0x78, 0x19, 0x24, 0xae, 0xb1, 0x53, 0xf9, 0x0a, 0xd6, 0x78, 0x58, + 0xc4, 0xeb, 0x22, 0x2c, 0xcb, 0xa2, 0x4f, 0xc0, 0x08, 0xbd, 0x15, 0x2a, 0x09, 0x20, 0x9c, 0x3c, + 0x91, 0x1f, 0xc1, 0x45, 0x51, 0xe9, 0x49, 0x95, 0xf4, 0xc2, 0x38, 0xc1, 0x0c, 0xbd, 0xc1, 0x5c, + 0xcb, 0x24, 0xeb, 0x42, 0x37, 0xac, 0x75, 0x2f, 0x32, 0xc9, 0x56, 0x63, 0x82, 0x5a, 0x30, 0x91, + 0x4e, 0x1d, 0x19, 0x4e, 0xda, 0xf9, 0xe2, 0x75, 0x3a, 0xfb, 0x63, 0x9c, 0xfd, 0x26, 0x8d, 0x0b, + 0x71, 0x16, 0x7f, 0xb4, 0x9c, 0x4c, 0xec, 0x57, 0x34, 0xf4, 0xbe, 0xa9, 0xe4, 0x7e, 0xc3, 0x6d, + 0x73, 0xfa, 0x6d, 0xc2, 0x59, 0x2d, 0x37, 0xda, 0x95, 0xc0, 0x61, 0xce, 0x1b, 0x2e, 0xdb, 0x4e, + 0x35, 0xb9, 0xe8, 0x91, 0x7b, 0xfb, 0xe5, 0xb3, 0x6b, 0xed, 0x08, 0x71, 0x7b, 0x3e, 0xe8, 0x3a, + 0x9c, 0xe4, 0xf1, 0x07, 0xe6, 0x89, 0x53, 0x6f, 0xb8, 0x9e, 0x12, 0xbc, 0xf8, 0x92, 0x3f, 0x7d, + 0x6f, 0xbf, 0x7c, 0x72, 0x26, 0x8b, 0x00, 0x67, 0x97, 0x43, 0xaf, 0x42, 0xa9, 0xee, 0x85, 0xa2, + 0x0f, 0xfa, 0x8c, 0xf4, 0x73, 0xa5, 0xf9, 0xd5, 0xaa, 0xfa, 0xfe, 0xf8, 0x0f, 0x8e, 0x0b, 0xa0, + 0x4d, 0x6e, 0x1b, 0x50, 0xda, 0xa2, 0xfe, 0x54, 0xe4, 0xb6, 0xa4, 0x42, 0xd5, 0x78, 0x81, 0xcc, + 0x8d, 0x62, 0xea, 0x61, 0x8e, 0xf1, 0x38, 0xd9, 0x60, 0x8c, 0x5e, 0x07, 0x24, 0xd2, 0x1c, 0xcc, + 0xd4, 0x58, 0x56, 0x1e, 0x76, 0x34, 0x0e, 0x98, 0x6f, 0x62, 0xab, 0x29, 0x0a, 0x9c, 0x51, 0x0a, + 0x5d, 0xa5, 0xbb, 0x8a, 0x0e, 0x15, 0xbb, 0x96, 0x4a, 0x72, 0x3a, 0x4f, 0x9a, 0x01, 0x61, 0x3e, + 0x66, 0x26, 0x47, 0x9c, 0x28, 0x87, 0xea, 0x70, 0xc6, 0x69, 0x45, 0x3e, 0x33, 0xbb, 0x98, 0xa4, + 0x6b, 0xfe, 0x36, 0xf1, 0x98, 0xc5, 0x73, 0x80, 0x45, 0x84, 0x3b, 0x33, 0xd3, 0x86, 0x0e, 0xb7, + 0xe5, 0x42, 0x25, 0x72, 0x95, 0xd5, 0x1c, 0xcc, 0x78, 0x74, 0x19, 0x99, 0xcd, 0x5f, 0x84, 0xc1, + 0x2d, 0x3f, 0x8c, 0x56, 0x49, 0x74, 0xdb, 0x0f, 0xb6, 0x45, 0x5c, 0xe5, 0x38, 0x96, 0x7d, 0x8c, + 0xc2, 0x3a, 0x1d, 0xbd, 0x72, 0x33, 0x7f, 0x9c, 0xa5, 0x79, 0xe6, 0x0a, 0x31, 0x10, 0xef, 0x31, + 0x57, 0x39, 0x18, 0x4b, 0xbc, 0x24, 0x5d, 0xaa, 0xcc, 0x31, 0xb7, 0x86, 0x04, 0xe9, 0x52, 0x65, + 0x0e, 0x4b, 0x3c, 0x9d, 0xae, 0xe1, 0x96, 0x13, 0x90, 0x4a, 0xe0, 0xd7, 0x48, 0xa8, 0x65, 0x50, + 0x78, 0x98, 0x47, 0x8d, 0xa6, 0xd3, 0xb5, 0x9a, 0x45, 0x80, 0xb3, 0xcb, 0x21, 0x92, 0xce, 0x0b, + 0x38, 0x92, 0x6f, 0x8f, 0x4a, 0xcb, 0x33, 0x5d, 0xa6, 0x06, 0xf4, 0x60, 0x4c, 0x65, 0x24, 0xe4, + 0x71, 0xa2, 0xc3, 0xc9, 0x51, 0x36, 0xb7, 0xbb, 0x0f, 0x32, 0xad, 0x2c, 0x7c, 0x4b, 0x09, 0x4e, + 0x38, 0xc5, 0xdb, 0x08, 0x39, 0x38, 0xd6, 0x31, 0xe4, 0xe0, 0x25, 0x28, 0x85, 0xad, 0xf5, 0xba, + 0xbf, 0xe3, 0xb8, 0x1e, 0x73, 0x6b, 0xd0, 0xee, 0x7e, 0x55, 0x89, 0xc0, 0x31, 0x0d, 0x5a, 0x84, + 0x01, 0x47, 0x9a, 0xef, 0x50, 0x7e, 0xa8, 0x28, 0x65, 0xb4, 0xe3, 0xd1, 0x53, 0xa4, 0xc1, 0x4e, + 0x95, 0x45, 0xaf, 0xc0, 0xb0, 0x78, 0x3f, 0x2f, 0x92, 0xf8, 0x4e, 0x98, 0x8f, 0x1c, 0xab, 0x3a, + 0x12, 0x9b, 0xb4, 0xe8, 0x06, 0x0c, 0x46, 0x7e, 0x83, 0xbd, 0xd4, 0xa3, 0x62, 0xde, 0xa9, 0xfc, + 0xa0, 0x87, 0x6b, 0x8a, 0x4c, 0xd7, 0x5a, 0xab, 0xa2, 0x58, 0xe7, 0x83, 0xd6, 0xf8, 0x7c, 0x67, + 0xf9, 0x12, 0x48, 0x28, 0xb2, 0xc0, 0x9e, 0xcd, 0xf3, 0x49, 0x63, 0x64, 0xe6, 0x72, 0x10, 0x25, + 0xb1, 0xce, 0x06, 0x5d, 0x81, 0xf1, 0x66, 0xe0, 0xfa, 0x6c, 0x4e, 0x28, 0xcb, 0xed, 0xa4, 0x99, + 0x1d, 0xad, 0x92, 0x24, 0xc0, 0xe9, 0x32, 0x2c, 0xfc, 0x81, 0x00, 0x4e, 0x9e, 0xe6, 0x19, 0x5e, + 0xf8, 0x55, 0x9a, 0xc3, 0xb0, 0xc2, 0xa2, 0x15, 0xb6, 0x13, 0x73, 0x2d, 0xd0, 0xe4, 0x54, 0x7e, + 0x74, 0x2a, 0x5d, 0x5b, 0xc4, 0x85, 0x57, 0xf5, 0x17, 0xc7, 0x1c, 0x50, 0x5d, 0x4b, 0xac, 0x4a, + 0xaf, 0x00, 0xe1, 0xe4, 0x99, 0x36, 0x4e, 0x91, 0x89, 0x5b, 0x59, 0x2c, 0x10, 0x18, 0xe0, 0x10, + 0x27, 0x78, 0xa2, 0x8f, 0xc0, 0x98, 0x88, 0xc6, 0x19, 0x77, 0xd3, 0xd9, 0xf8, 0xe5, 0x03, 0x4e, + 0xe0, 0x70, 0x8a, 0x9a, 0x67, 0x58, 0x71, 0xd6, 0x1b, 0x44, 0x6c, 0x7d, 0xcb, 0xae, 0xb7, 0x1d, + 0x4e, 0x9e, 0x63, 0xfb, 0x83, 0xc8, 0xb0, 0x92, 0xc4, 0xe2, 0x8c, 0x12, 0x68, 0x0d, 0xc6, 0x9a, + 0x01, 0x21, 0x3b, 0x4c, 0xd0, 0x17, 0xe7, 0x59, 0x99, 0x47, 0xff, 0xa0, 0x2d, 0xa9, 0x24, 0x70, + 0x07, 0x19, 0x30, 0x9c, 0xe2, 0x80, 0x6e, 0xc3, 0x80, 0xbf, 0x4b, 0x82, 0x2d, 0xe2, 0xd4, 0x27, + 0xcf, 0xb7, 0x79, 0x8f, 0x23, 0x0e, 0xb7, 0xeb, 0x82, 0x36, 0xe1, 0xed, 0x21, 0xc1, 0x9d, 0xbd, + 0x3d, 0x64, 0x65, 0xe8, 0x7f, 0xb7, 0xe0, 0xb4, 0x34, 0xce, 0x54, 0x9b, 0xb4, 0xd7, 0xe7, 0x7c, + 0x2f, 0x8c, 0x02, 0x1e, 0xaf, 0xe2, 0x91, 0xfc, 0x18, 0x0e, 0x6b, 0x39, 0x85, 0x94, 0x22, 0xfa, + 0x74, 0x1e, 0x45, 0x88, 0xf3, 0x6b, 0xa4, 0x57, 0xd3, 0x90, 0x44, 0x72, 0x33, 0x9a, 0x09, 0x17, + 0xdf, 0x98, 0x5f, 0x9d, 0x7c, 0x94, 0x07, 0xdb, 0xa0, 0x8b, 0xa1, 0x9a, 0x44, 0xe2, 0x34, 0x3d, + 0xba, 0x0c, 0x05, 0x3f, 0x9c, 0x7c, 0xac, 0x4d, 0x2e, 0x5e, 0xbf, 0x7e, 0xbd, 0xca, 0xbd, 0xfe, + 0xae, 0x57, 0x71, 0xc1, 0x0f, 0x65, 0x96, 0x13, 0x7a, 0x1f, 0x0b, 0x27, 0x1f, 0xe7, 0x6a, 0x4b, + 0x99, 0xe5, 0x84, 0x01, 0x71, 0x8c, 0x47, 0x5b, 0x30, 0x1a, 0x1a, 0xf7, 0xde, 0x70, 0xf2, 0x02, + 0xeb, 0xa9, 0xc7, 0xf3, 0x06, 0xcd, 0xa0, 0xd6, 0xd2, 0x0f, 0x98, 0x5c, 0x70, 0x92, 0x2d, 0x5f, + 0x5d, 0xda, 0xcd, 0x3b, 0x9c, 0x7c, 0xa2, 0xc3, 0xea, 0xd2, 0x88, 0xf5, 0xd5, 0xa5, 0xf3, 0xc0, + 0x09, 0x9e, 0x53, 0xdf, 0x05, 0xe3, 0x29, 0x71, 0xe9, 0x30, 0x1e, 0xee, 0x53, 0xdb, 0x30, 0x6c, + 0x4c, 0xc9, 0x07, 0xea, 0x5d, 0xf1, 0xdb, 0x25, 0x28, 0x29, 0xab, 0x37, 0xba, 0x64, 0x3a, 0x54, + 0x9c, 0x4e, 0x3a, 0x54, 0x0c, 0x54, 0xfc, 0xba, 0xe1, 0x43, 0xb1, 0x96, 0x11, 0x92, 0x31, 0x6f, + 0x03, 0xec, 0xfe, 0x91, 0x8a, 0x66, 0x4a, 0x28, 0x76, 0xed, 0x99, 0xd1, 0xd3, 0xd6, 0x3a, 0x71, + 0x05, 0xc6, 0x3d, 0x9f, 0xc9, 0xe8, 0xa4, 0x2e, 0x05, 0x30, 0x26, 0x67, 0x95, 0xf4, 0x18, 0x47, + 0x09, 0x02, 0x9c, 0x2e, 0x43, 0x2b, 0xe4, 0x82, 0x52, 0xd2, 0x1c, 0xc2, 0xe5, 0x28, 0x2c, 0xb0, + 0xf4, 0x6e, 0xc8, 0x7f, 0x85, 0x93, 0x63, 0xf9, 0x77, 0x43, 0x5e, 0x28, 0x29, 0x8c, 0x85, 0x52, + 0x18, 0x63, 0xda, 0xff, 0xa6, 0x5f, 0x5f, 0xaa, 0x08, 0x31, 0x5f, 0x8b, 0x27, 0x5c, 0x5f, 0xaa, + 0x60, 0x8e, 0x43, 0x33, 0xd0, 0xc7, 0x7e, 0x84, 0x93, 0x43, 0xf9, 0x31, 0x71, 0x58, 0x09, 0x2d, + 0xcb, 0x1a, 0x2b, 0x80, 0x45, 0x41, 0xa6, 0xdd, 0xa5, 0x77, 0x23, 0xa6, 0xdd, 0xed, 0xbf, 0x4f, + 0xed, 0xae, 0x64, 0x80, 0x63, 0x5e, 0xe8, 0x0e, 0x9c, 0x34, 0xee, 0xa3, 0xea, 0xd5, 0x0e, 0xe4, + 0x1b, 0x7e, 0x13, 0xc4, 0xb3, 0x67, 0x45, 0xa3, 0x4f, 0x2e, 0x65, 0x71, 0xc2, 0xd9, 0x15, 0xa0, + 0x06, 0x8c, 0xd7, 0x52, 0xb5, 0x0e, 0x74, 0x5f, 0xab, 0x9a, 0x17, 0xe9, 0x1a, 0xd3, 0x8c, 0xd1, + 0x2b, 0x30, 0xf0, 0xb6, 0x1f, 0xb2, 0x23, 0x52, 0x5c, 0x4d, 0x64, 0x50, 0x87, 0x81, 0x37, 0xae, + 0x57, 0x19, 0xfc, 0x60, 0xbf, 0x3c, 0x58, 0xf1, 0xeb, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x0f, 0x58, + 0x30, 0x95, 0xbe, 0xf0, 0xaa, 0x46, 0x0f, 0x77, 0xdf, 0x68, 0x5b, 0x54, 0x3a, 0xb5, 0x90, 0xcb, + 0x0e, 0xb7, 0xa9, 0x0a, 0x7d, 0x88, 0xae, 0xa7, 0xd0, 0xbd, 0x4b, 0x44, 0x8a, 0xda, 0x47, 0xe2, + 0xf5, 0x44, 0xa1, 0x07, 0xfb, 0xe5, 0x51, 0xbe, 0x33, 0xba, 0x77, 0xe5, 0xf3, 0x26, 0x51, 0x00, + 0x7d, 0x37, 0x9c, 0x0c, 0xd2, 0x1a, 0x54, 0x22, 0x85, 0xf0, 0xa7, 0xba, 0xd9, 0x65, 0x93, 0x03, + 0x8e, 0xb3, 0x18, 0xe2, 0xec, 0x7a, 0xec, 0x5f, 0xb1, 0x98, 0x7e, 0x5b, 0x34, 0x8b, 0x84, 0xad, + 0xc6, 0x71, 0x24, 0xc6, 0x5e, 0x30, 0x6c, 0xc7, 0xf7, 0xed, 0x58, 0xf4, 0x0f, 0x2d, 0xe6, 0x58, + 0x74, 0x8c, 0xaf, 0x98, 0xde, 0x80, 0x81, 0x48, 0x26, 0x2c, 0x6f, 0x93, 0xcb, 0x5b, 0x6b, 0x14, + 0x73, 0xae, 0x52, 0x97, 0x1c, 0x95, 0x9b, 0x5c, 0xb1, 0xb1, 0xff, 0x1e, 0x1f, 0x01, 0x89, 0x39, + 0x06, 0x13, 0xdd, 0xbc, 0x69, 0xa2, 0x2b, 0x77, 0xf8, 0x82, 0x1c, 0x53, 0xdd, 0xdf, 0x35, 0xdb, + 0xcd, 0x94, 0x7b, 0xef, 0x76, 0x8f, 0x36, 0xfb, 0x0b, 0x16, 0x40, 0x1c, 0x6a, 0xbe, 0x8b, 0x94, + 0x94, 0x2f, 0xd1, 0x6b, 0x8d, 0x1f, 0xf9, 0x35, 0xbf, 0x21, 0x0c, 0x14, 0x67, 0x62, 0x2b, 0x21, + 0x87, 0x1f, 0x68, 0xbf, 0xb1, 0xa2, 0x46, 0x65, 0x19, 0xd8, 0xb2, 0x18, 0xdb, 0xad, 0x8d, 0xa0, + 0x96, 0x5f, 0xb6, 0xe0, 0x44, 0x96, 0x4b, 0x3c, 0xbd, 0x24, 0x73, 0x35, 0xa7, 0xf2, 0x36, 0x54, + 0xa3, 0x79, 0x53, 0xc0, 0xb1, 0xa2, 0xe8, 0x3a, 0xd7, 0xe7, 0xe1, 0x62, 0xbc, 0x5f, 0x87, 0xe1, + 0x4a, 0x40, 0x34, 0xf9, 0xe2, 0x35, 0x1e, 0x2c, 0x85, 0xb7, 0xe7, 0x99, 0x43, 0x07, 0x4a, 0xb1, + 0xbf, 0x52, 0x80, 0x13, 0xdc, 0x69, 0x67, 0x66, 0xd7, 0x77, 0xeb, 0x15, 0xbf, 0x2e, 0x1e, 0x32, + 0xbe, 0x09, 0x43, 0x4d, 0x4d, 0x37, 0xdd, 0x2e, 0x5e, 0xb1, 0xae, 0xc3, 0x8e, 0xb5, 0x69, 0x3a, + 0x14, 0x1b, 0xbc, 0x50, 0x1d, 0x86, 0xc8, 0xae, 0x5b, 0x53, 0x9e, 0x1f, 0x85, 0x43, 0x1f, 0xd2, + 0xaa, 0x96, 0x05, 0x8d, 0x0f, 0x36, 0xb8, 0x3e, 0x80, 0x0c, 0xfc, 0xf6, 0x8f, 0x5a, 0xf0, 0x50, + 0x4e, 0x74, 0x63, 0x5a, 0xdd, 0x6d, 0xe6, 0x1e, 0x25, 0xa6, 0xad, 0xaa, 0x8e, 0x3b, 0x4d, 0x61, + 0x81, 0x45, 0x1f, 0x05, 0xe0, 0x4e, 0x4f, 0xc4, 0xab, 0x75, 0x0c, 0x03, 0x6b, 0x44, 0xb0, 0xd4, + 0x82, 0x11, 0xca, 0xf2, 0x58, 0xe3, 0x65, 0x7f, 0xb9, 0x07, 0x7a, 0x99, 0x93, 0x0d, 0xaa, 0x40, + 0xff, 0x16, 0xcf, 0x74, 0xd5, 0x76, 0xdc, 0x28, 0xad, 0x4c, 0x9e, 0x15, 0x8f, 0x9b, 0x06, 0xc5, + 0x92, 0x0d, 0x5a, 0x81, 0x09, 0x9e, 0x70, 0xac, 0x31, 0x4f, 0x1a, 0xce, 0x9e, 0x54, 0xfb, 0xf2, + 0x1c, 0xda, 0x4a, 0xfd, 0xbd, 0x94, 0x26, 0xc1, 0x59, 0xe5, 0xd0, 0x6b, 0x30, 0x42, 0xaf, 0xe1, + 0x7e, 0x2b, 0x92, 0x9c, 0x78, 0xaa, 0x31, 0x75, 0x33, 0x59, 0x33, 0xb0, 0x38, 0x41, 0x8d, 0x5e, + 0x81, 0xe1, 0x66, 0x4a, 0xc1, 0xdd, 0x1b, 0x6b, 0x82, 0x4c, 0xa5, 0xb6, 0x49, 0xcb, 0xbc, 0xe2, 0x5b, 0xec, 0x0d, 0xc0, 0xda, 0x56, 0x40, 0xc2, 0x2d, 0xbf, 0x51, 0x67, 0x12, 0x70, 0xaf, 0xe6, 0x15, 0x9f, 0xc0, 0xe3, 0x54, 0x09, 0xca, 0x65, 0xc3, 0x71, 0x1b, 0xad, 0x80, 0xc4, 0x5c, 0xfa, 0x4c, 0x2e, 0x8b, 0x09, 0x3c, 0x4e, 0x95, 0xe8, 0xac, 0xb9, 0xef, 0x3f, 0x1a, 0xcd, 0xbd, 0xfd, - 0xd3, 0x05, 0x30, 0x86, 0xf6, 0xdb, 0x37, 0x85, 0x19, 0xfd, 0xb2, 0xcd, 0xa0, 0x59, 0x13, 0x0e, - 0x65, 0x99, 0x5f, 0x16, 0xe7, 0x2f, 0xe6, 0x5f, 0x46, 0xff, 0x63, 0x56, 0x8a, 0xae, 0xf1, 0x93, - 0x95, 0xc0, 0xa7, 0x87, 0x9c, 0x0c, 0xa4, 0xa7, 0x1e, 0x9f, 0xf4, 0xcb, 0x20, 0x03, 0x6d, 0x42, - 0xce, 0x0a, 0xf7, 0x7c, 0xce, 0xc1, 0xf0, 0xbd, 0xaa, 0x8a, 0x68, 0x1f, 0x92, 0x0b, 0xba, 0x02, - 0x83, 0x22, 0x2f, 0x15, 0x7b, 0x23, 0xc1, 0x17, 0x13, 0xf3, 0x15, 0x9b, 0x8f, 0xc1, 0x58, 0xa7, - 0xb1, 0x7f, 0xa0, 0x00, 0x13, 0x19, 0x8f, 0xdc, 0xf8, 0x31, 0xb2, 0xe9, 0x86, 0x91, 0x4a, 0x91, - 0xac, 0x1d, 0x23, 0x1c, 0x8e, 0x15, 0x05, 0xdd, 0xab, 0xf8, 0x41, 0x95, 0x3c, 0x9c, 0xc4, 0x23, - 0x12, 0x81, 0x3d, 0x64, 0xb2, 0xe1, 0x0b, 0xd0, 0xd3, 0x0a, 0x89, 0x0c, 0x16, 0xad, 0x8e, 0x6d, - 0x66, 0xd6, 0x66, 0x18, 0x7a, 0x05, 0xdc, 0x54, 0x16, 0x62, 0xed, 0x0a, 0xc8, 0x6d, 0xc4, 0x1c, - 0x47, 0x1b, 0x17, 0x11, 0xcf, 0xf1, 0x22, 0x71, 0x51, 0x8c, 0xa3, 0x9e, 0x32, 0x28, 0x16, 0x58, - 0xfb, 0x8b, 0x45, 0x38, 0x93, 0xfb, 0xec, 0x95, 0x36, 0x7d, 0xc7, 0xf7, 0xdc, 0xc8, 0x57, 0x4e, - 0x78, 0x3c, 0xd2, 0x29, 0x69, 0x6e, 0xad, 0x08, 0x38, 0x56, 0x14, 0xe8, 0x22, 0xf4, 0x32, 0xa5, - 0x78, 0x2a, 0x59, 0xf4, 0xec, 0x3c, 0x0f, 0x7d, 0xc7, 0xd1, 0x5d, 0xe7, 0xf7, 0x7f, 0x8c, 0x4a, - 0x30, 0x7e, 0x23, 0x79, 0xa0, 0xd0, 0xe6, 0xfa, 0x7e, 0x03, 0x33, 0x24, 0x7a, 0x42, 0xf4, 0x57, - 0xc2, 0xeb, 0x0c, 0x3b, 0x75, 0x3f, 0xd4, 0x3a, 0xed, 0x29, 0xe8, 0xdf, 0x26, 0x7b, 0x81, 0xeb, - 0x6d, 0x26, 0xbd, 0x11, 0xaf, 0x73, 0x30, 0x96, 0x78, 0x33, 0x6f, 0x69, 0xff, 0x51, 0x27, 0xe6, - 0x1f, 0xe8, 0x28, 0x9e, 0xfc, 0x50, 0x11, 0x46, 0xf1, 0xec, 0xfc, 0x7b, 0x03, 0x71, 0x33, 0x3d, - 0x10, 0x47, 0x9d, 0x98, 0xbf, 0xf3, 0x68, 0xfc, 0xa2, 0x05, 0xa3, 0x2c, 0x3b, 0x96, 0x88, 0x59, - 0xe1, 0xfa, 0xde, 0x31, 0x5c, 0x05, 0x1e, 0x83, 0xde, 0x80, 0x56, 0x9a, 0xcc, 0x12, 0xcd, 0x5a, - 0x82, 0x39, 0x0e, 0x9d, 0x85, 0x1e, 0xd6, 0x04, 0x3a, 0x78, 0x43, 0x7c, 0x0b, 0x9e, 0x77, 0x22, - 0x07, 0x33, 0x28, 0x0b, 0xfc, 0x86, 0x49, 0xb3, 0xe1, 0xf2, 0x46, 0xc7, 0x2e, 0x0b, 0xef, 0x8e, - 0x80, 0x18, 0x99, 0x4d, 0x7b, 0x67, 0x81, 0xdf, 0xb2, 0x59, 0xb6, 0xbf, 0x66, 0xff, 0x79, 0x01, - 0xce, 0x67, 0x96, 0xeb, 0x3a, 0xf0, 0x5b, 0xfb, 0xd2, 0x0f, 0x33, 0xff, 0x51, 0xf1, 0x18, 0x7d, - 0xbd, 0x7b, 0xba, 0x95, 0xfe, 0x7b, 0xbb, 0x88, 0xc7, 0x96, 0xd9, 0x65, 0xef, 0x92, 0x78, 0x6c, - 0x99, 0x6d, 0xcb, 0x51, 0x13, 0xfc, 0x75, 0x21, 0xe7, 0x5b, 0x98, 0xc2, 0xe0, 0x12, 0xdd, 0x67, - 0x18, 0x32, 0x94, 0x97, 0x70, 0xbe, 0xc7, 0x70, 0x18, 0x56, 0x58, 0x34, 0x03, 0xa3, 0x3b, 0xae, - 0x47, 0x37, 0x9f, 0x3d, 0x53, 0x14, 0x57, 0xb6, 0x8c, 0x15, 0x13, 0x8d, 0x93, 0xf4, 0xc8, 0xd5, - 0x62, 0xb5, 0xf1, 0xaf, 0x7b, 0xf5, 0x50, 0xab, 0x6e, 0xda, 0x74, 0xe7, 0x50, 0xbd, 0x98, 0x11, - 0xb7, 0x6d, 0x45, 0xd3, 0x13, 0x15, 0xbb, 0xd7, 0x13, 0x0d, 0x65, 0xeb, 0x88, 0xa6, 0x5e, 0x85, - 0xe1, 0x07, 0xb6, 0x8d, 0xd8, 0x5f, 0x2f, 0xc2, 0x23, 0x6d, 0x96, 0x3d, 0xdf, 0xeb, 0x8d, 0x31, - 0xd0, 0xf6, 0xfa, 0xd4, 0x38, 0x54, 0xe0, 0xc4, 0x46, 0xab, 0xd1, 0xd8, 0x63, 0x4f, 0xa0, 0x48, - 0x5d, 0x52, 0x08, 0x99, 0x52, 0x2a, 0x47, 0x4e, 0x2c, 0x66, 0xd0, 0xe0, 0xcc, 0x92, 0xf4, 0x8a, - 0x45, 0x4f, 0x92, 0x3d, 0xc5, 0x2a, 0x71, 0xc5, 0xc2, 0x3a, 0x12, 0x9b, 0xb4, 0xe8, 0x2a, 0x8c, - 0x3b, 0xbb, 0x8e, 0xcb, 0x03, 0xde, 0x4b, 0x06, 0xfc, 0x8e, 0xa5, 0x74, 0xd1, 0x33, 0x49, 0x02, - 0x9c, 0x2e, 0x83, 0x5e, 0x07, 0xe4, 0xaf, 0xb3, 0x87, 0x12, 0xf5, 0xab, 0xc4, 0x13, 0x56, 0x77, - 0x36, 0x76, 0xc5, 0x78, 0x4b, 0xb8, 0x91, 0xa2, 0xc0, 0x19, 0xa5, 0x12, 0x81, 0xc9, 0xfa, 0xf2, - 0x03, 0x93, 0xb5, 0xdf, 0x17, 0x3b, 0xa6, 0xde, 0xba, 0x02, 0xc3, 0x87, 0x74, 0xff, 0xb5, 0xff, - 0x8d, 0x05, 0x4a, 0x41, 0x6c, 0x46, 0xfd, 0x7d, 0x95, 0xf9, 0x27, 0x73, 0xd5, 0xb6, 0x16, 0x2d, - 0xe9, 0xa4, 0xe6, 0x9f, 0x1c, 0x23, 0xb1, 0x49, 0xcb, 0xe7, 0x90, 0xe6, 0x57, 0x6c, 0xdc, 0x0a, - 0x44, 0x68, 0x42, 0x45, 0x81, 0x3e, 0x0e, 0xfd, 0x75, 0x77, 0xd7, 0x0d, 0x85, 0x72, 0xec, 0xd0, - 0xc6, 0xb8, 0x78, 0xeb, 0x9c, 0xe7, 0x6c, 0xb0, 0xe4, 0x67, 0xff, 0x50, 0x21, 0xee, 0x93, 0x37, - 0x5a, 0x7e, 0xe4, 0x1c, 0xc3, 0x49, 0x7e, 0xd5, 0x38, 0xc9, 0x9f, 0x68, 0x17, 0x9f, 0x91, 0x35, - 0x29, 0xf7, 0x04, 0xbf, 0x91, 0x38, 0xc1, 0x9f, 0xec, 0xcc, 0xaa, 0xfd, 0xc9, 0xfd, 0x0f, 0x2c, - 0x18, 0x37, 0xe8, 0x8f, 0xe1, 0x00, 0x59, 0x34, 0x0f, 0x90, 0x47, 0x3b, 0x7e, 0x43, 0xce, 0xc1, - 0xf1, 0xbd, 0xc5, 0x44, 0xdb, 0xd9, 0x81, 0xf1, 0x36, 0xf4, 0x6c, 0x39, 0x41, 0xbd, 0x5d, 0x3e, - 0x9a, 0x54, 0xa1, 0xe9, 0x6b, 0x4e, 0x20, 0x3c, 0x15, 0x9e, 0x95, 0xbd, 0x4e, 0x41, 0x1d, 0xbd, - 0x14, 0x58, 0x55, 0xe8, 0x65, 0xe8, 0x0b, 0x6b, 0x7e, 0x53, 0xbd, 0x99, 0xba, 0xc0, 0x3a, 0x9a, - 0x41, 0x0e, 0xf6, 0xcb, 0xc8, 0xac, 0x8e, 0x82, 0xb1, 0xa0, 0x47, 0x6f, 0xc2, 0x30, 0xfb, 0xa5, - 0xdc, 0x06, 0x8b, 0xf9, 0x1a, 0x8c, 0xaa, 0x4e, 0xc8, 0x7d, 0x6a, 0x0d, 0x10, 0x36, 0x59, 0x4d, - 0x6d, 0x42, 0x49, 0x7d, 0xd6, 0x43, 0xb5, 0x76, 0xff, 0xab, 0x22, 0x4c, 0x64, 0xcc, 0x39, 0x14, - 0x1a, 0x23, 0x71, 0xa5, 0xcb, 0xa9, 0xfa, 0x0e, 0xc7, 0x22, 0x64, 0x17, 0xa8, 0xba, 0x98, 0x5b, - 0x5d, 0x57, 0x7a, 0x33, 0x24, 0xc9, 0x4a, 0x29, 0xa8, 0x73, 0xa5, 0xb4, 0xb2, 0x63, 0xeb, 0x6a, - 0x5a, 0x91, 0x6a, 0xe9, 0x43, 0x1d, 0xd3, 0x5f, 0xef, 0x81, 0x13, 0x59, 0x21, 0x63, 0xd1, 0x67, - 0x13, 0xd9, 0x90, 0x5f, 0xec, 0x36, 0xd8, 0x2c, 0x4f, 0x91, 0x2c, 0xc2, 0x40, 0x4e, 0x9b, 0xf9, - 0x91, 0x3b, 0x76, 0xb3, 0xa8, 0x93, 0x05, 0xa0, 0x09, 0x78, 0x16, 0x6b, 0xb9, 0x7d, 0x7c, 0xa0, - 0xeb, 0x06, 0x88, 0xf4, 0xd7, 0x61, 0xc2, 0x25, 0x49, 0x82, 0x3b, 0xbb, 0x24, 0xc9, 0x9a, 0xd1, - 0x12, 0xf4, 0xd5, 0xb8, 0xaf, 0x4b, 0xb1, 0xf3, 0x16, 0xc6, 0x1d, 0x5d, 0xd4, 0x06, 0x2c, 0x1c, - 0x5c, 0x04, 0x83, 0x29, 0x17, 0x06, 0xb5, 0x8e, 0x79, 0xa8, 0x93, 0x67, 0x9b, 0x1e, 0x7c, 0x5a, - 0x17, 0x3c, 0xd4, 0x09, 0xf4, 0xa3, 0x16, 0x24, 0x1e, 0xbc, 0x28, 0xa5, 0x9c, 0x95, 0xab, 0x94, - 0xbb, 0x00, 0x3d, 0x81, 0xdf, 0x20, 0xc9, 0x0c, 0xc4, 0xd8, 0x6f, 0x10, 0xcc, 0x30, 0x94, 0x22, - 0x8a, 0x55, 0x2d, 0x43, 0xfa, 0x35, 0x52, 0x5c, 0x10, 0x1f, 0x83, 0xde, 0x06, 0xd9, 0x25, 0x8d, - 0x64, 0xa2, 0xb8, 0x65, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x62, 0x0f, 0x9c, 0x6b, 0x1b, 0x0d, 0x8a, - 0x5e, 0xc6, 0x36, 0x9d, 0x88, 0xdc, 0x71, 0xf6, 0x92, 0x19, 0x9d, 0xae, 0x72, 0x30, 0x96, 0x78, - 0xf6, 0xfc, 0x93, 0x27, 0x66, 0x48, 0xa8, 0x30, 0x45, 0x3e, 0x06, 0x81, 0x35, 0x55, 0x62, 0xc5, - 0xa3, 0x50, 0x89, 0x3d, 0x0f, 0x10, 0x86, 0x0d, 0xee, 0x16, 0x58, 0x17, 0xef, 0x4a, 0xe3, 0x04, - 0x1e, 0xd5, 0x65, 0x81, 0xc1, 0x1a, 0x15, 0x9a, 0x87, 0xb1, 0x66, 0xe0, 0x47, 0x5c, 0x23, 0x3c, - 0xcf, 0x3d, 0x67, 0x7b, 0xcd, 0x40, 0x3c, 0x95, 0x04, 0x1e, 0xa7, 0x4a, 0xa0, 0x97, 0x60, 0x50, - 0x04, 0xe7, 0xa9, 0xf8, 0x7e, 0x43, 0x28, 0xa1, 0x94, 0x33, 0x69, 0x35, 0x46, 0x61, 0x9d, 0x4e, - 0x2b, 0xc6, 0xd4, 0xcc, 0xfd, 0x99, 0xc5, 0xb8, 0xaa, 0x59, 0xa3, 0x4b, 0x44, 0xa2, 0x1e, 0xe8, - 0x2a, 0x12, 0x75, 0xac, 0x96, 0x2b, 0x75, 0x6d, 0xf5, 0x84, 0x8e, 0x8a, 0xac, 0xaf, 0xf4, 0xc0, - 0x84, 0x98, 0x38, 0x0f, 0x7b, 0xba, 0xdc, 0x4c, 0x4f, 0x97, 0xa3, 0x50, 0xdc, 0xbd, 0x37, 0x67, - 0x8e, 0x7b, 0xce, 0xfc, 0xb0, 0x05, 0xa6, 0xa4, 0x86, 0xfe, 0xb7, 0xdc, 0x94, 0x78, 0x2f, 0xe5, - 0x4a, 0x7e, 0x71, 0x94, 0xdf, 0x77, 0x96, 0x1c, 0xcf, 0xfe, 0xd7, 0x16, 0x3c, 0xda, 0x91, 0x23, - 0x5a, 0x80, 0x12, 0x13, 0x27, 0xb5, 0x8b, 0xde, 0x93, 0xca, 0xb3, 0x5e, 0x22, 0x72, 0xa4, 0xdb, - 0xb8, 0x24, 0x5a, 0x48, 0xe5, 0x1e, 0x7c, 0x2a, 0x23, 0xf7, 0xe0, 0x49, 0xa3, 0x7b, 0x1e, 0x30, - 0xf9, 0xe0, 0x0f, 0xd2, 0x13, 0xc7, 0x78, 0xd5, 0x86, 0x3e, 0x60, 0x28, 0x1d, 0xed, 0x84, 0xd2, - 0x11, 0x99, 0xd4, 0xda, 0x19, 0xf2, 0x51, 0x18, 0x63, 0x51, 0xfb, 0xd8, 0x3b, 0x0f, 0xf1, 0xde, - 0xae, 0x10, 0xfb, 0x72, 0x2f, 0x27, 0x70, 0x38, 0x45, 0x6d, 0xff, 0x69, 0x11, 0xfa, 0xf8, 0xf2, - 0x3b, 0x86, 0xeb, 0xe5, 0x33, 0x50, 0x72, 0x77, 0x76, 0x5a, 0x3c, 0x9d, 0x5c, 0x6f, 0xec, 0x19, - 0xbc, 0x24, 0x81, 0x38, 0xc6, 0xa3, 0x45, 0xa1, 0xef, 0x6e, 0x13, 0x18, 0x98, 0x37, 0x7c, 0x7a, - 0xde, 0x89, 0x1c, 0x2e, 0x2b, 0xa9, 0x73, 0x36, 0xd6, 0x8c, 0xa3, 0x4f, 0x01, 0x84, 0x51, 0xe0, - 0x7a, 0x9b, 0x14, 0x26, 0x62, 0xab, 0x3f, 0xdd, 0x86, 0x5b, 0x55, 0x11, 0x73, 0x9e, 0xf1, 0x9e, - 0xa3, 0x10, 0x58, 0xe3, 0x88, 0xa6, 0x8d, 0x93, 0x7e, 0x2a, 0x31, 0x76, 0xc0, 0xb9, 0xc6, 0x63, - 0x36, 0xf5, 0x41, 0x28, 0x29, 0xe6, 0x9d, 0xb4, 0x5f, 0x43, 0xba, 0x58, 0xf4, 0x11, 0x18, 0x4d, - 0xb4, 0xed, 0x50, 0xca, 0xb3, 0x5f, 0xb2, 0x60, 0x94, 0x37, 0x66, 0xc1, 0xdb, 0x15, 0xa7, 0xc1, - 0x3d, 0x38, 0xd1, 0xc8, 0xd8, 0x95, 0xc5, 0xf0, 0x77, 0xbf, 0x8b, 0x2b, 0x65, 0x59, 0x16, 0x16, - 0x67, 0xd6, 0x81, 0x2e, 0xd1, 0x15, 0x47, 0x77, 0x5d, 0xa7, 0x21, 0xe2, 0x1b, 0x0c, 0xf1, 0xd5, - 0xc6, 0x61, 0x58, 0x61, 0xed, 0x3f, 0xb0, 0x60, 0x9c, 0xb7, 0xfc, 0x3a, 0xd9, 0x53, 0x7b, 0xd3, - 0x37, 0xb3, 0xed, 0x22, 0x91, 0x69, 0x21, 0x27, 0x91, 0xa9, 0xfe, 0x69, 0xc5, 0xb6, 0x9f, 0xf6, - 0x65, 0x0b, 0xc4, 0x0c, 0x39, 0x06, 0x7d, 0xc6, 0x77, 0x98, 0xfa, 0x8c, 0xa9, 0xfc, 0x45, 0x90, - 0xa3, 0xc8, 0xf8, 0x2b, 0x0b, 0xc6, 0x38, 0x41, 0x6c, 0xab, 0xff, 0xa6, 0x8e, 0xc3, 0xac, 0xf9, - 0x45, 0x99, 0xce, 0x97, 0xd7, 0xc9, 0xde, 0x9a, 0x5f, 0x71, 0xa2, 0xad, 0xec, 0x8f, 0x32, 0x06, - 0xab, 0xa7, 0xed, 0x60, 0xd5, 0xe5, 0x02, 0x32, 0xf2, 0x7c, 0x75, 0x08, 0x10, 0x70, 0xd8, 0x3c, - 0x5f, 0xf6, 0x9f, 0x59, 0x80, 0x78, 0x35, 0x86, 0xe0, 0x46, 0xc5, 0x21, 0x06, 0xd5, 0x0e, 0xba, - 0x78, 0x6b, 0x52, 0x18, 0xac, 0x51, 0x1d, 0x49, 0xf7, 0x24, 0x1c, 0x2e, 0x8a, 0x9d, 0x1d, 0x2e, - 0x0e, 0xd1, 0xa3, 0xff, 0xac, 0x0f, 0x92, 0x2f, 0xfb, 0xd0, 0x2d, 0x18, 0xaa, 0x39, 0x4d, 0x67, - 0xdd, 0x6d, 0xb8, 0x91, 0x4b, 0xc2, 0x76, 0xde, 0x58, 0x73, 0x1a, 0x9d, 0x30, 0x91, 0x6b, 0x10, - 0x6c, 0xf0, 0x41, 0xd3, 0x00, 0xcd, 0xc0, 0xdd, 0x75, 0x1b, 0x64, 0x93, 0xa9, 0x5d, 0x58, 0x44, - 0x15, 0xee, 0x1a, 0x26, 0xa1, 0x58, 0xa3, 0xc8, 0x08, 0xa3, 0x50, 0x7c, 0xc8, 0x61, 0x14, 0xe0, - 0xd8, 0xc2, 0x28, 0xf4, 0x1c, 0x2a, 0x8c, 0xc2, 0xc0, 0xa1, 0xc3, 0x28, 0xf4, 0x76, 0x15, 0x46, - 0x01, 0xc3, 0x29, 0x29, 0x7b, 0xd2, 0xff, 0x8b, 0x6e, 0x83, 0x88, 0x0b, 0x07, 0x0f, 0x03, 0x33, - 0x75, 0x7f, 0xbf, 0x7c, 0x0a, 0x67, 0x52, 0xe0, 0x9c, 0x92, 0xe8, 0x63, 0x30, 0xe9, 0x34, 0x1a, - 0xfe, 0x1d, 0x35, 0xa8, 0x0b, 0x61, 0xcd, 0x69, 0x70, 0x13, 0x48, 0x3f, 0xe3, 0x7a, 0xf6, 0xfe, - 0x7e, 0x79, 0x72, 0x26, 0x87, 0x06, 0xe7, 0x96, 0x46, 0x1f, 0x86, 0x52, 0x33, 0xf0, 0x6b, 0x2b, - 0xda, 0xf3, 0xe3, 0xf3, 0xb4, 0x03, 0x2b, 0x12, 0x78, 0xb0, 0x5f, 0x1e, 0x56, 0x7f, 0xd8, 0x81, - 0x1f, 0x17, 0xc8, 0x88, 0x8b, 0x30, 0x78, 0xa4, 0x71, 0x11, 0xb6, 0x61, 0xa2, 0x4a, 0x02, 0xd7, - 0x69, 0xb8, 0xf7, 0xa8, 0xbc, 0x2c, 0xf7, 0xa7, 0x35, 0x28, 0x05, 0x89, 0x1d, 0xb9, 0xab, 0x60, - 0xbd, 0x5a, 0xc2, 0x25, 0xb9, 0x03, 0xc7, 0x8c, 0xec, 0xff, 0x66, 0x41, 0xbf, 0x78, 0xc9, 0x77, - 0x0c, 0x52, 0xe3, 0x8c, 0x61, 0x94, 0x28, 0x67, 0x77, 0x18, 0x6b, 0x4c, 0xae, 0x39, 0x62, 0x29, - 0x61, 0x8e, 0x78, 0xb4, 0x1d, 0x93, 0xf6, 0x86, 0x88, 0xff, 0xaf, 0x48, 0xa5, 0x77, 0xe3, 0x4d, - 0xf9, 0xc3, 0xef, 0x82, 0x55, 0xe8, 0x0f, 0xc5, 0x9b, 0xe6, 0x42, 0xfe, 0x6b, 0x90, 0xe4, 0x20, - 0xc6, 0x5e, 0x74, 0xe2, 0x15, 0xb3, 0x64, 0x92, 0xf9, 0x58, 0xba, 0xf8, 0x10, 0x1f, 0x4b, 0x77, - 0x7a, 0x75, 0xdf, 0x73, 0x14, 0xaf, 0xee, 0xed, 0xaf, 0xb1, 0x93, 0x53, 0x87, 0x1f, 0x83, 0x50, - 0x75, 0xd5, 0x3c, 0x63, 0xed, 0x36, 0x33, 0x4b, 0x34, 0x2a, 0x47, 0xb8, 0xfa, 0x05, 0x0b, 0xce, - 0x65, 0x7c, 0x95, 0x26, 0x69, 0x3d, 0x0b, 0x03, 0x4e, 0xab, 0xee, 0xaa, 0xb5, 0xac, 0x99, 0x26, - 0x67, 0x04, 0x1c, 0x2b, 0x0a, 0x34, 0x07, 0xe3, 0xe4, 0x6e, 0xd3, 0xe5, 0x86, 0x5c, 0xdd, 0xf9, - 0xb8, 0xc8, 0x9f, 0x7f, 0x2e, 0x24, 0x91, 0x38, 0x4d, 0xaf, 0x02, 0x44, 0x15, 0x73, 0x03, 0x44, - 0xfd, 0xbc, 0x05, 0x83, 0xea, 0x55, 0xef, 0x43, 0xef, 0xed, 0x8f, 0x9a, 0xbd, 0xfd, 0x48, 0x9b, - 0xde, 0xce, 0xe9, 0xe6, 0xdf, 0x2b, 0xa8, 0xf6, 0x56, 0xfc, 0x20, 0xea, 0x42, 0x82, 0x7b, 0xf0, - 0x87, 0x13, 0x57, 0x60, 0xd0, 0x69, 0x36, 0x25, 0x42, 0x7a, 0xc0, 0xb1, 0xd0, 0xeb, 0x31, 0x18, - 0xeb, 0x34, 0xea, 0x1d, 0x47, 0x31, 0xf7, 0x1d, 0x47, 0x1d, 0x20, 0x72, 0x82, 0x4d, 0x12, 0x51, - 0x98, 0x70, 0xd8, 0xcd, 0xdf, 0x6f, 0x5a, 0x91, 0xdb, 0x98, 0x76, 0xbd, 0x28, 0x8c, 0x82, 0xe9, - 0x25, 0x2f, 0xba, 0x11, 0xf0, 0x2b, 0xa4, 0x16, 0x62, 0x4d, 0xf1, 0xc2, 0x1a, 0x5f, 0x19, 0xc1, - 0x82, 0xd5, 0xd1, 0x6b, 0xba, 0x52, 0xac, 0x0a, 0x38, 0x56, 0x14, 0xf6, 0x07, 0xd9, 0xe9, 0xc3, - 0xfa, 0xf4, 0x70, 0xe1, 0xc5, 0x7e, 0x72, 0x48, 0x8d, 0x06, 0x33, 0x8a, 0xce, 0xeb, 0x41, 0xcc, - 0xda, 0x6f, 0xf6, 0xb4, 0x62, 0xfd, 0x45, 0x64, 0x1c, 0xe9, 0x0c, 0x7d, 0x22, 0xe5, 0x1e, 0xf3, - 0x5c, 0x87, 0x53, 0xe3, 0x10, 0x0e, 0x31, 0x2c, 0x0f, 0x13, 0xcb, 0x52, 0xb3, 0x54, 0x11, 0xeb, - 0x42, 0xcb, 0xc3, 0x24, 0x10, 0x38, 0xa6, 0xa1, 0xc2, 0x94, 0xfa, 0x13, 0x4e, 0xa2, 0x38, 0x16, - 0xb0, 0xa2, 0x0e, 0xb1, 0x46, 0x81, 0x2e, 0x0b, 0x85, 0x02, 0xb7, 0x0b, 0x3c, 0x92, 0x50, 0x28, - 0xc8, 0xee, 0xd2, 0xb4, 0x40, 0x57, 0x60, 0x90, 0xdc, 0x8d, 0x48, 0xe0, 0x39, 0x0d, 0x5a, 0x43, - 0x6f, 0x1c, 0x3f, 0x73, 0x21, 0x06, 0x63, 0x9d, 0x06, 0xad, 0xc1, 0x68, 0xc8, 0xf5, 0x6c, 0x2a, - 0x48, 0x3c, 0xd7, 0x57, 0x3e, 0xad, 0xde, 0x53, 0x9b, 0xe8, 0x03, 0x06, 0xe2, 0xbb, 0x93, 0x8c, - 0x32, 0x91, 0x64, 0x81, 0x5e, 0x83, 0x91, 0x86, 0xef, 0xd4, 0x67, 0x9d, 0x86, 0xe3, 0xd5, 0x58, - 0xff, 0x0c, 0x98, 0x89, 0xa8, 0x97, 0x0d, 0x2c, 0x4e, 0x50, 0x53, 0xe1, 0x4d, 0x87, 0x88, 0x30, - 0x6d, 0x8e, 0xb7, 0x49, 0x42, 0x91, 0x0f, 0x9e, 0x09, 0x6f, 0xcb, 0x39, 0x34, 0x38, 0xb7, 0x34, - 0x7a, 0x19, 0x86, 0xe4, 0xe7, 0x6b, 0x41, 0x59, 0xe2, 0x27, 0x31, 0x1a, 0x0e, 0x1b, 0x94, 0x28, - 0x84, 0x93, 0xf2, 0xff, 0x5a, 0xe0, 0x6c, 0x6c, 0xb8, 0x35, 0x11, 0xa9, 0x80, 0x3f, 0x1f, 0xfe, - 0x88, 0x7c, 0xab, 0xb8, 0x90, 0x45, 0x74, 0xb0, 0x5f, 0x3e, 0x2b, 0x7a, 0x2d, 0x13, 0x8f, 0xb3, - 0x79, 0xa3, 0x15, 0x98, 0xd8, 0x22, 0x4e, 0x23, 0xda, 0x9a, 0xdb, 0x22, 0xb5, 0x6d, 0xb9, 0xe0, - 0x58, 0x98, 0x17, 0xed, 0xe9, 0xc8, 0xb5, 0x34, 0x09, 0xce, 0x2a, 0x87, 0xde, 0x82, 0xc9, 0x66, - 0x6b, 0xbd, 0xe1, 0x86, 0x5b, 0xab, 0x7e, 0xc4, 0x9c, 0x90, 0x66, 0xea, 0xf5, 0x80, 0x84, 0xfc, - 0x75, 0x29, 0x3b, 0x7a, 0x65, 0x20, 0x9d, 0x4a, 0x0e, 0x1d, 0xce, 0xe5, 0x80, 0xee, 0xc1, 0xc9, - 0xc4, 0x44, 0x10, 0x11, 0x31, 0x46, 0xf2, 0x53, 0xc4, 0x54, 0xb3, 0x0a, 0x88, 0xe0, 0x32, 0x59, - 0x28, 0x9c, 0x5d, 0x05, 0x7a, 0x05, 0xc0, 0x6d, 0x2e, 0x3a, 0x3b, 0x6e, 0x83, 0x5e, 0x15, 0x27, - 0xd8, 0x1c, 0xa1, 0xd7, 0x06, 0x58, 0xaa, 0x48, 0x28, 0xdd, 0x9b, 0xc5, 0xbf, 0x3d, 0xac, 0x51, - 0xa3, 0x65, 0x18, 0x11, 0xff, 0xf6, 0xc4, 0x90, 0xf2, 0xc0, 0x2c, 0x8f, 0xb3, 0xa8, 0x5a, 0x15, - 0x1d, 0x73, 0x90, 0x82, 0xe0, 0x44, 0x59, 0xb4, 0x09, 0xe7, 0x64, 0xa2, 0x3f, 0x7d, 0x7e, 0xca, - 0x31, 0x08, 0x59, 0x5e, 0x96, 0x01, 0xfe, 0x2a, 0x65, 0xa6, 0x1d, 0x21, 0x6e, 0xcf, 0x87, 0x9e, - 0xeb, 0xfa, 0x34, 0xe7, 0x6f, 0x8e, 0x4f, 0xc6, 0x11, 0x07, 0x97, 0x93, 0x48, 0x9c, 0xa6, 0x47, - 0x3e, 0x9c, 0x74, 0xbd, 0xac, 0x59, 0x7d, 0x8a, 0x31, 0xfa, 0x10, 0x7f, 0x6e, 0xdd, 0x7e, 0x46, - 0x67, 0xe2, 0x71, 0x36, 0xdf, 0x77, 0xe6, 0xf7, 0xf7, 0xfb, 0x16, 0x2d, 0xad, 0x49, 0xe7, 0xe8, - 0xd3, 0x30, 0xa4, 0x7f, 0x94, 0x90, 0x34, 0x2e, 0x66, 0x0b, 0xaf, 0xda, 0x9e, 0xc0, 0x65, 0x7b, - 0xb5, 0xee, 0x75, 0x1c, 0x36, 0x38, 0xa2, 0x5a, 0x46, 0x6c, 0x83, 0xcb, 0xdd, 0x49, 0x32, 0xdd, - 0xbb, 0xbd, 0x11, 0xc8, 0x9e, 0xee, 0x68, 0x19, 0x06, 0x6a, 0x0d, 0x97, 0x78, 0xd1, 0x52, 0xa5, - 0x5d, 0xf4, 0xc6, 0x39, 0x41, 0x23, 0xd6, 0x8f, 0x48, 0xb1, 0xc2, 0x61, 0x58, 0x71, 0xb0, 0x7f, - 0xb3, 0x00, 0xe5, 0x0e, 0xf9, 0x7a, 0x12, 0x66, 0x28, 0xab, 0x2b, 0x33, 0xd4, 0x0c, 0x8c, 0xc6, - 0xff, 0x74, 0x0d, 0x97, 0xf2, 0x64, 0xbd, 0x65, 0xa2, 0x71, 0x92, 0xbe, 0xeb, 0x47, 0x09, 0xba, - 0x25, 0xab, 0xa7, 0xe3, 0xb3, 0x1a, 0xc3, 0x82, 0xdd, 0xdb, 0xfd, 0xb5, 0x37, 0xd7, 0x1a, 0x69, - 0x7f, 0xad, 0x00, 0x27, 0x55, 0x17, 0x7e, 0xfb, 0x76, 0xdc, 0xcd, 0x74, 0xc7, 0x1d, 0x81, 0x2d, - 0xd7, 0xbe, 0x01, 0x7d, 0x3c, 0x1c, 0x65, 0x17, 0xe2, 0xf6, 0x63, 0x66, 0x94, 0x6c, 0x25, 0xe1, - 0x19, 0x91, 0xb2, 0xbf, 0xdf, 0x82, 0xd1, 0xc4, 0xeb, 0x36, 0x84, 0xb5, 0x27, 0xd0, 0x0f, 0x22, - 0x12, 0x67, 0x09, 0xdb, 0x17, 0xa0, 0x67, 0xcb, 0x0f, 0xa3, 0xa4, 0xa3, 0xc7, 0x35, 0x3f, 0x8c, - 0x30, 0xc3, 0xd8, 0x7f, 0x68, 0x41, 0xef, 0x9a, 0xe3, 0x7a, 0x91, 0x34, 0x0a, 0x58, 0x39, 0x46, - 0x81, 0x6e, 0xbe, 0x0b, 0xbd, 0x04, 0x7d, 0x64, 0x63, 0x83, 0xd4, 0x22, 0x31, 0xaa, 0x32, 0x14, - 0x42, 0xdf, 0x02, 0x83, 0x52, 0xf9, 0x8f, 0x55, 0xc6, 0xff, 0x62, 0x41, 0x8c, 0x6e, 0x43, 0x29, - 0x72, 0x77, 0xc8, 0x4c, 0xbd, 0x2e, 0x4c, 0xe5, 0x0f, 0x10, 0xbf, 0x63, 0x4d, 0x32, 0xc0, 0x31, - 0x2f, 0xfb, 0x8b, 0x05, 0x80, 0x38, 0x8e, 0x57, 0xa7, 0x4f, 0x9c, 0x4d, 0x19, 0x51, 0x2f, 0x66, - 0x18, 0x51, 0x51, 0xcc, 0x30, 0xc3, 0x82, 0xaa, 0xba, 0xa9, 0xd8, 0x55, 0x37, 0xf5, 0x1c, 0xa6, - 0x9b, 0xe6, 0x60, 0x3c, 0x8e, 0x43, 0x66, 0x86, 0x61, 0x64, 0x47, 0xe7, 0x5a, 0x12, 0x89, 0xd3, - 0xf4, 0x36, 0x81, 0x0b, 0x2a, 0x1c, 0x93, 0x38, 0xd1, 0x98, 0x1f, 0xb8, 0x6e, 0x94, 0xee, 0xd0, - 0x4f, 0xb1, 0x95, 0xb8, 0x90, 0x6b, 0x25, 0xfe, 0x09, 0x0b, 0x4e, 0x24, 0xeb, 0x61, 0x8f, 0xa6, - 0xbf, 0x60, 0xc1, 0x49, 0x66, 0x2b, 0x67, 0xb5, 0xa6, 0x2d, 0xf3, 0x2f, 0xb6, 0x0d, 0x31, 0x95, - 0xd3, 0xe2, 0x38, 0xe6, 0xc6, 0x4a, 0x16, 0x6b, 0x9c, 0x5d, 0xa3, 0xfd, 0x5f, 0x7b, 0x60, 0x32, - 0x2f, 0x36, 0x15, 0x7b, 0x26, 0xe2, 0xdc, 0xad, 0x6e, 0x93, 0x3b, 0xc2, 0x19, 0x3f, 0x7e, 0x26, - 0xc2, 0xc1, 0x58, 0xe2, 0x93, 0xe9, 0x4f, 0x0a, 0x5d, 0xa6, 0x3f, 0xd9, 0x82, 0xf1, 0x3b, 0x5b, - 0xc4, 0xbb, 0xe9, 0x85, 0x4e, 0xe4, 0x86, 0x1b, 0x2e, 0xb3, 0x2b, 0xf3, 0x79, 0x23, 0x73, 0x50, - 0x8f, 0xdf, 0x4e, 0x12, 0x1c, 0xec, 0x97, 0xcf, 0x19, 0x80, 0xb8, 0xc9, 0x7c, 0x23, 0xc1, 0x69, - 0xa6, 0xe9, 0xec, 0x31, 0x3d, 0x0f, 0x39, 0x7b, 0xcc, 0x8e, 0x2b, 0xbc, 0x51, 0xe4, 0x1b, 0x00, - 0x76, 0x63, 0x5c, 0x51, 0x50, 0xac, 0x51, 0xa0, 0x4f, 0x02, 0xd2, 0x33, 0x74, 0x19, 0xa1, 0x41, - 0x9f, 0xbb, 0xbf, 0x5f, 0x46, 0xab, 0x29, 0xec, 0xc1, 0x7e, 0x79, 0x82, 0x42, 0x97, 0x3c, 0x7a, - 0xf3, 0x8c, 0xe3, 0xa9, 0x65, 0x30, 0x42, 0xb7, 0x61, 0x8c, 0x42, 0xd9, 0x8a, 0x92, 0x71, 0x47, - 0xf9, 0x6d, 0xf1, 0x99, 0xfb, 0xfb, 0xe5, 0xb1, 0xd5, 0x04, 0x2e, 0x8f, 0x75, 0x8a, 0x09, 0x7a, - 0x05, 0x46, 0xe2, 0x79, 0x75, 0x9d, 0xec, 0xf1, 0x00, 0x3d, 0x25, 0xae, 0xf0, 0x5e, 0x31, 0x30, - 0x38, 0x41, 0x69, 0x7f, 0xc1, 0x82, 0x33, 0xb9, 0x19, 0xf1, 0xd1, 0x25, 0x18, 0x70, 0x9a, 0x2e, - 0x37, 0x5f, 0x88, 0xa3, 0x86, 0xa9, 0xc9, 0x2a, 0x4b, 0xdc, 0x78, 0xa1, 0xb0, 0x74, 0x87, 0xdf, - 0x76, 0xbd, 0x7a, 0x72, 0x87, 0xbf, 0xee, 0x7a, 0x75, 0xcc, 0x30, 0xea, 0xc8, 0x2a, 0xe6, 0x3e, - 0x45, 0xf8, 0x0a, 0x5d, 0xab, 0x19, 0xb9, 0xf3, 0x8f, 0xb7, 0x19, 0xe8, 0x19, 0xdd, 0xd4, 0x28, - 0xbc, 0x0a, 0x73, 0xcd, 0x8c, 0xdf, 0x67, 0x81, 0x78, 0xba, 0xdc, 0xc5, 0x99, 0xfc, 0x26, 0x0c, - 0xed, 0xa6, 0xb3, 0x17, 0x5e, 0xc8, 0x7f, 0xcb, 0x2d, 0x22, 0xae, 0x2b, 0x41, 0xdb, 0xc8, 0x54, - 0x68, 0xf0, 0xb2, 0xeb, 0x20, 0xb0, 0xf3, 0x84, 0x19, 0x14, 0x3a, 0xb7, 0xe6, 0x79, 0x80, 0x3a, - 0xa3, 0x65, 0x29, 0x8d, 0x0b, 0xa6, 0xc4, 0x35, 0xaf, 0x30, 0x58, 0xa3, 0xb2, 0xff, 0x79, 0x01, - 0x06, 0x65, 0xb6, 0xbc, 0x96, 0xd7, 0x8d, 0xda, 0xef, 0x50, 0xe9, 0xb3, 0xd1, 0x65, 0x28, 0x31, - 0xbd, 0x74, 0x25, 0xd6, 0x96, 0x2a, 0xad, 0xd0, 0x8a, 0x44, 0xe0, 0x98, 0x86, 0xee, 0x8e, 0x61, - 0x6b, 0x9d, 0x91, 0x27, 0x1e, 0xda, 0x56, 0x39, 0x18, 0x4b, 0x3c, 0xfa, 0x18, 0x8c, 0xf1, 0x72, - 0x81, 0xdf, 0x74, 0x36, 0xb9, 0x2d, 0xab, 0x57, 0x45, 0x2f, 0x19, 0x5b, 0x49, 0xe0, 0x0e, 0xf6, - 0xcb, 0x27, 0x92, 0x30, 0x66, 0xa4, 0x4d, 0x71, 0x61, 0x2e, 0x6b, 0xbc, 0x12, 0xba, 0xab, 0xa7, - 0x3c, 0xdd, 0x62, 0x14, 0xd6, 0xe9, 0xec, 0x4f, 0x03, 0x4a, 0xe7, 0x0d, 0x44, 0xaf, 0x73, 0x97, - 0x67, 0x37, 0x20, 0xf5, 0x76, 0x46, 0x5b, 0x3d, 0x46, 0x87, 0x7c, 0x23, 0xc7, 0x4b, 0x61, 0x55, - 0xde, 0xfe, 0x3f, 0x8b, 0x30, 0x96, 0x8c, 0x0a, 0x80, 0xae, 0x41, 0x1f, 0x17, 0x29, 0x05, 0xfb, - 0x36, 0x3e, 0x41, 0x5a, 0x2c, 0x01, 0x76, 0xb8, 0x0a, 0xa9, 0x54, 0x94, 0x47, 0x6f, 0xc1, 0x60, - 0xdd, 0xbf, 0xe3, 0xdd, 0x71, 0x82, 0xfa, 0x4c, 0x65, 0x49, 0x4c, 0xe7, 0x4c, 0x45, 0xc5, 0x7c, - 0x4c, 0xa6, 0xc7, 0x27, 0x60, 0xf6, 0xef, 0x18, 0x85, 0x75, 0x76, 0x68, 0x8d, 0x25, 0xfa, 0xd8, - 0x70, 0x37, 0x57, 0x9c, 0x66, 0xbb, 0xf7, 0x2f, 0x73, 0x92, 0x48, 0xe3, 0x3c, 0x2c, 0xb2, 0x81, - 0x70, 0x04, 0x8e, 0x19, 0xa1, 0xcf, 0xc2, 0x44, 0x98, 0x63, 0x3a, 0xc9, 0x4b, 0x23, 0xdb, 0xce, - 0x9a, 0x30, 0x7b, 0xfa, 0xfe, 0x7e, 0x79, 0x22, 0xcb, 0xc8, 0x92, 0x55, 0x8d, 0xfd, 0xa5, 0x13, - 0x60, 0x2c, 0x62, 0x23, 0xab, 0xb8, 0x75, 0x44, 0x59, 0xc5, 0x31, 0x0c, 0x90, 0x9d, 0x66, 0xb4, - 0x37, 0xef, 0x06, 0x62, 0x4c, 0x32, 0x79, 0x2e, 0x08, 0x9a, 0x34, 0x4f, 0x89, 0xc1, 0x8a, 0x4f, - 0x76, 0xea, 0xf7, 0xe2, 0x37, 0x31, 0xf5, 0x7b, 0xcf, 0x31, 0xa6, 0x7e, 0x5f, 0x85, 0xfe, 0x4d, - 0x37, 0xc2, 0xa4, 0xe9, 0x8b, 0xcb, 0x5c, 0xe6, 0x3c, 0xbc, 0xca, 0x49, 0xd2, 0x49, 0x86, 0x05, - 0x02, 0x4b, 0x26, 0xe8, 0x75, 0xb5, 0x02, 0xfb, 0xf2, 0x15, 0x2e, 0x69, 0xe7, 0x95, 0xcc, 0x35, - 0x28, 0x12, 0xbc, 0xf7, 0x3f, 0x68, 0x82, 0xf7, 0x45, 0x99, 0x96, 0x7d, 0x20, 0xff, 0xb1, 0x1a, - 0xcb, 0xba, 0xde, 0x21, 0x19, 0xfb, 0x2d, 0x3d, 0x95, 0x7d, 0x29, 0x7f, 0x27, 0x50, 0x59, 0xea, - 0xbb, 0x4c, 0x60, 0xff, 0x7d, 0x16, 0x9c, 0x4c, 0xa6, 0x9a, 0x65, 0x6f, 0x2a, 0x84, 0x9f, 0xc7, - 0x4b, 0xdd, 0xe4, 0xfe, 0x65, 0x05, 0x8c, 0x0a, 0x99, 0x8e, 0x34, 0x93, 0x0c, 0x67, 0x57, 0x47, - 0x3b, 0x3a, 0x58, 0xaf, 0x0b, 0x7f, 0x83, 0xc7, 0x72, 0x32, 0xe1, 0xb7, 0xc9, 0x7f, 0xbf, 0x96, - 0x91, 0x75, 0xfd, 0xf1, 0xbc, 0xac, 0xeb, 0x5d, 0xe7, 0x5a, 0x7f, 0x5d, 0xe5, 0xc0, 0x1f, 0xce, - 0x9f, 0x4a, 0x3c, 0xc3, 0x7d, 0xc7, 0xcc, 0xf7, 0xaf, 0xab, 0xcc, 0xf7, 0x6d, 0x22, 0x8b, 0xf3, - 0xbc, 0xf6, 0x1d, 0xf3, 0xdd, 0x6b, 0x39, 0xeb, 0x47, 0x8f, 0x26, 0x67, 0xbd, 0x71, 0xd4, 0xf0, - 0xb4, 0xe9, 0xcf, 0x74, 0x38, 0x6a, 0x0c, 0xbe, 0xed, 0x0f, 0x1b, 0x9e, 0x9f, 0x7f, 0xfc, 0x81, - 0xf2, 0xf3, 0xdf, 0xd2, 0xf3, 0xdd, 0xa3, 0x0e, 0x09, 0xdd, 0x29, 0x51, 0x97, 0x59, 0xee, 0x6f, - 0xe9, 0x07, 0xe0, 0x44, 0x3e, 0x5f, 0x75, 0xce, 0xa5, 0xf9, 0x66, 0x1e, 0x81, 0xa9, 0xec, 0xf9, - 0x27, 0x8e, 0x27, 0x7b, 0xfe, 0xc9, 0x23, 0xcf, 0x9e, 0x7f, 0xea, 0x18, 0xb2, 0xe7, 0x9f, 0x3e, - 0xc6, 0xec, 0xf9, 0xb7, 0x98, 0x73, 0x14, 0x0f, 0x00, 0x25, 0x22, 0xa1, 0x3f, 0x95, 0x13, 0x3f, - 0x2d, 0x1d, 0x25, 0x8a, 0x7f, 0x9c, 0x42, 0xe1, 0x98, 0x55, 0x46, 0x56, 0xfe, 0xc9, 0x87, 0x90, - 0x95, 0x7f, 0x35, 0xce, 0xca, 0x7f, 0x26, 0x7f, 0xa8, 0x33, 0x9e, 0xd3, 0xe4, 0xe4, 0xe2, 0xbf, - 0xa5, 0xe7, 0xd0, 0x7f, 0xa4, 0x8d, 0x15, 0x2c, 0x4b, 0xa1, 0xdc, 0x26, 0x73, 0xfe, 0x6b, 0x3c, - 0x73, 0xfe, 0xd9, 0xfc, 0x9d, 0x3c, 0x79, 0xdc, 0x19, 0xf9, 0xf2, 0x69, 0xbb, 0x54, 0xf0, 0x57, - 0x16, 0xf3, 0x3d, 0xa7, 0x5d, 0x2a, 0x7a, 0x6c, 0xba, 0x5d, 0x0a, 0x85, 0x63, 0x56, 0xf6, 0x0f, - 0x14, 0xe0, 0x7c, 0xfb, 0xf5, 0x16, 0x6b, 0xc9, 0x2b, 0xb1, 0x43, 0x40, 0x42, 0x4b, 0xce, 0xef, - 0x6c, 0x31, 0x55, 0xd7, 0xf1, 0x20, 0xaf, 0xc2, 0xb8, 0x7a, 0x87, 0xd3, 0x70, 0x6b, 0x7b, 0xab, - 0xf1, 0x35, 0x59, 0x45, 0x4e, 0xa8, 0x26, 0x09, 0x70, 0xba, 0x0c, 0x9a, 0x81, 0x51, 0x03, 0xb8, - 0x34, 0x2f, 0xee, 0x66, 0x71, 0x94, 0x71, 0x13, 0x8d, 0x93, 0xf4, 0xf6, 0xcf, 0x59, 0x70, 0x3a, - 0x27, 0xe5, 0x6b, 0xd7, 0xe1, 0x0e, 0x37, 0x60, 0xb4, 0x69, 0x16, 0xed, 0x10, 0xa1, 0xd5, 0x48, - 0x2c, 0xab, 0xda, 0x9a, 0x40, 0xe0, 0x24, 0x53, 0xfb, 0x67, 0x0a, 0x70, 0xae, 0xad, 0x63, 0x29, - 0xc2, 0x70, 0x6a, 0x73, 0x27, 0x74, 0xe6, 0x02, 0x52, 0x27, 0x5e, 0xe4, 0x3a, 0x8d, 0x6a, 0x93, - 0xd4, 0x34, 0x3b, 0x07, 0xf3, 0xd0, 0xbc, 0xba, 0x52, 0x9d, 0x49, 0x53, 0xe0, 0x9c, 0x92, 0x68, - 0x11, 0x50, 0x1a, 0x23, 0x46, 0x98, 0x65, 0x0f, 0x48, 0xf3, 0xc3, 0x19, 0x25, 0xd0, 0x07, 0x61, - 0x58, 0x39, 0xac, 0x6a, 0x23, 0xce, 0x36, 0x76, 0xac, 0x23, 0xb0, 0x49, 0x87, 0xae, 0xf0, 0xf4, - 0x13, 0x22, 0x51, 0x89, 0x30, 0x8a, 0x8c, 0xca, 0xdc, 0x12, 0x02, 0x8c, 0x75, 0x9a, 0xd9, 0x97, - 0x7f, 0xeb, 0x1b, 0xe7, 0xdf, 0xf7, 0xbb, 0xdf, 0x38, 0xff, 0xbe, 0x3f, 0xf8, 0xc6, 0xf9, 0xf7, - 0x7d, 0xd7, 0xfd, 0xf3, 0xd6, 0x6f, 0xdd, 0x3f, 0x6f, 0xfd, 0xee, 0xfd, 0xf3, 0xd6, 0x1f, 0xdc, - 0x3f, 0x6f, 0xfd, 0xf1, 0xfd, 0xf3, 0xd6, 0x17, 0xff, 0xe4, 0xfc, 0xfb, 0xde, 0x44, 0x71, 0x00, - 0xd1, 0xcb, 0x74, 0x74, 0x2e, 0xef, 0x5e, 0xf9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x0b, - 0x0a, 0x3d, 0x91, 0x13, 0x01, 0x00, + 0x37, 0x0a, 0x60, 0x0c, 0xed, 0x77, 0x6e, 0x0a, 0x34, 0xfa, 0x65, 0x9b, 0x41, 0xb3, 0x26, 0x1c, + 0xca, 0x32, 0xbf, 0x2c, 0xce, 0x7f, 0xcc, 0xbf, 0x8c, 0xfe, 0xc7, 0xac, 0x14, 0x5d, 0xe3, 0x27, + 0x2b, 0x81, 0x4f, 0x0f, 0x39, 0x19, 0x4e, 0x4f, 0x3d, 0x3e, 0xe9, 0x97, 0x41, 0x06, 0xda, 0x04, + 0x9e, 0x15, 0xee, 0xf9, 0x9c, 0x83, 0xe1, 0x7b, 0x55, 0x15, 0xd1, 0x3e, 0x24, 0x17, 0x74, 0x19, + 0x06, 0x45, 0x5e, 0x2b, 0xf6, 0x46, 0x82, 0x2f, 0x26, 0xe6, 0x2b, 0x36, 0x1f, 0x83, 0xb1, 0x4e, + 0x63, 0xff, 0x60, 0x01, 0x26, 0x32, 0x1e, 0xb9, 0xf1, 0x63, 0x64, 0xd3, 0x0d, 0x23, 0x95, 0x62, + 0x59, 0x3b, 0x46, 0x38, 0x1c, 0x2b, 0x0a, 0xba, 0x57, 0xf1, 0x83, 0x2a, 0x79, 0x38, 0x89, 0x47, + 0x24, 0x02, 0x7b, 0xc8, 0x64, 0xc5, 0xe7, 0xa1, 0xa7, 0x15, 0x12, 0x19, 0x32, 0x5a, 0x1d, 0xdb, + 0xcc, 0xac, 0xcd, 0x30, 0xf4, 0x0a, 0xb8, 0xa9, 0x2c, 0xc4, 0xda, 0x15, 0x90, 0xdb, 0x88, 0x39, + 0x8e, 0x36, 0x2e, 0x22, 0x9e, 0xe3, 0x45, 0xe2, 0xa2, 0x18, 0xc7, 0x3e, 0x65, 0x50, 0x2c, 0xb0, + 0xf6, 0x97, 0x8a, 0x70, 0x3a, 0xf7, 0xd9, 0x2b, 0x6d, 0xfa, 0x8e, 0xef, 0xb9, 0x91, 0xaf, 0x9c, + 0xf0, 0x78, 0xbc, 0x53, 0xd2, 0xdc, 0x5a, 0x11, 0x70, 0xac, 0x28, 0xd0, 0x05, 0xe8, 0x65, 0x4a, + 0xf1, 0x54, 0xb2, 0xe9, 0xd9, 0x79, 0x1e, 0x00, 0x8f, 0xa3, 0xb5, 0x53, 0xbd, 0xd8, 0xf6, 0x54, + 0x7f, 0x94, 0x4a, 0x30, 0x7e, 0x23, 0x79, 0xa0, 0xd0, 0xe6, 0xfa, 0x7e, 0x03, 0x33, 0x24, 0x7a, + 0x5c, 0xf4, 0x57, 0xc2, 0xeb, 0x0c, 0x3b, 0x75, 0x3f, 0xd4, 0x3a, 0xed, 0x49, 0xe8, 0xdf, 0x26, + 0x7b, 0x81, 0xeb, 0x6d, 0x26, 0xbd, 0x11, 0xaf, 0x71, 0x30, 0x96, 0x78, 0x33, 0xef, 0x69, 0xff, + 0x51, 0x27, 0xf6, 0x1f, 0xe8, 0x28, 0x9e, 0xfc, 0x50, 0x11, 0x46, 0xf1, 0xec, 0xfc, 0x7b, 0x03, + 0x71, 0x23, 0x3d, 0x10, 0x47, 0x9d, 0xd8, 0xbf, 0xf3, 0x68, 0xfc, 0xa2, 0x05, 0xa3, 0x2c, 0xbb, + 0x96, 0x88, 0x59, 0xe1, 0xfa, 0xde, 0x31, 0x5c, 0x05, 0x1e, 0x85, 0xde, 0x80, 0x56, 0x9a, 0xcc, + 0x32, 0xcd, 0x5a, 0x82, 0x39, 0x0e, 0x9d, 0x81, 0x1e, 0xd6, 0x04, 0x3a, 0x78, 0x43, 0x7c, 0x0b, + 0x9e, 0x77, 0x22, 0x07, 0x33, 0x28, 0x0b, 0xff, 0x86, 0x49, 0xb3, 0xe1, 0xf2, 0x46, 0xc7, 0x2e, + 0x0b, 0xef, 0x8e, 0x80, 0x18, 0x99, 0x4d, 0x7b, 0x67, 0xe1, 0xdf, 0xb2, 0x59, 0xb6, 0xbf, 0x66, + 0xff, 0x79, 0x01, 0xce, 0x65, 0x96, 0xeb, 0x3a, 0xfc, 0x5b, 0xfb, 0xd2, 0x0f, 0x32, 0x0b, 0x52, + 0xf1, 0x18, 0x7d, 0xbd, 0x7b, 0xba, 0x95, 0xfe, 0x7b, 0xbb, 0x88, 0xca, 0x96, 0xd9, 0x65, 0xef, + 0x92, 0xa8, 0x6c, 0x99, 0x6d, 0xcb, 0x51, 0x13, 0xfc, 0x75, 0x21, 0xe7, 0x5b, 0x98, 0xc2, 0xe0, + 0x22, 0xdd, 0x67, 0x18, 0x32, 0x94, 0x97, 0x70, 0xbe, 0xc7, 0x70, 0x18, 0x56, 0x58, 0x34, 0x03, + 0xa3, 0x3b, 0xae, 0x47, 0x37, 0x9f, 0x3d, 0x53, 0x14, 0x57, 0xb6, 0x8c, 0x15, 0x13, 0x8d, 0x93, + 0xf4, 0xc8, 0xd5, 0x22, 0xb6, 0xf1, 0xaf, 0x7b, 0xe5, 0x50, 0xab, 0x6e, 0xda, 0x74, 0xe7, 0x50, + 0xbd, 0x98, 0x11, 0xbd, 0x6d, 0x45, 0xd3, 0x13, 0x15, 0xbb, 0xd7, 0x13, 0x0d, 0x65, 0xeb, 0x88, + 0xa6, 0x5e, 0x81, 0xe1, 0xfb, 0xb6, 0x8d, 0xd8, 0xdf, 0x28, 0xc2, 0xc3, 0x6d, 0x96, 0x3d, 0xdf, + 0xeb, 0x8d, 0x31, 0xd0, 0xf6, 0xfa, 0xd4, 0x38, 0x54, 0xe0, 0xc4, 0x46, 0xab, 0xd1, 0xd8, 0x63, + 0x4f, 0xa0, 0x48, 0x5d, 0x52, 0x08, 0x99, 0x52, 0x2a, 0x47, 0x4e, 0x2c, 0x66, 0xd0, 0xe0, 0xcc, + 0x92, 0xf4, 0x8a, 0x45, 0x4f, 0x92, 0x3d, 0xc5, 0x2a, 0x71, 0xc5, 0xc2, 0x3a, 0x12, 0x9b, 0xb4, + 0xe8, 0x0a, 0x8c, 0x3b, 0xbb, 0x8e, 0xcb, 0xc3, 0xde, 0x4b, 0x06, 0xfc, 0x8e, 0xa5, 0x74, 0xd1, + 0x33, 0x49, 0x02, 0x9c, 0x2e, 0x83, 0x5e, 0x07, 0xe4, 0xaf, 0xb3, 0x87, 0x12, 0xf5, 0x2b, 0xc4, + 0x13, 0x56, 0x77, 0x36, 0x76, 0xc5, 0x78, 0x4b, 0xb8, 0x9e, 0xa2, 0xc0, 0x19, 0xa5, 0x12, 0x81, + 0xc9, 0xfa, 0xf2, 0x03, 0x93, 0xb5, 0xdf, 0x17, 0x3b, 0x26, 0xe0, 0xba, 0x0c, 0xc3, 0x87, 0x74, + 0xff, 0xb5, 0xff, 0xb5, 0x05, 0x4a, 0x41, 0x6c, 0xc6, 0xfe, 0x7d, 0x85, 0xf9, 0x27, 0x73, 0xd5, + 0xb6, 0x16, 0x2d, 0xe9, 0xa4, 0xe6, 0x9f, 0x1c, 0x23, 0xb1, 0x49, 0xcb, 0xe7, 0x90, 0xe6, 0x57, + 0x6c, 0xdc, 0x0a, 0x44, 0x68, 0x42, 0x45, 0x81, 0x3e, 0x06, 0xfd, 0x75, 0x77, 0xd7, 0x0d, 0x85, + 0x72, 0xec, 0xd0, 0xc6, 0xb8, 0x78, 0xeb, 0x9c, 0xe7, 0x6c, 0xb0, 0xe4, 0x67, 0xff, 0x50, 0x21, + 0xee, 0x93, 0x37, 0x5a, 0x7e, 0xe4, 0x1c, 0xc3, 0x49, 0x7e, 0xc5, 0x38, 0xc9, 0x1f, 0xcf, 0x1e, + 0x68, 0xad, 0x49, 0xb9, 0x27, 0xf8, 0xf5, 0xc4, 0x09, 0xfe, 0x44, 0x67, 0x56, 0xed, 0x4f, 0xee, + 0xbf, 0x6f, 0xc1, 0xb8, 0x41, 0x7f, 0x0c, 0x07, 0xc8, 0xa2, 0x79, 0x80, 0x3c, 0xd2, 0xf1, 0x1b, + 0x72, 0x0e, 0x8e, 0xef, 0x2f, 0x26, 0xda, 0xce, 0x0e, 0x8c, 0xb7, 0xa1, 0x67, 0xcb, 0x09, 0xea, + 0xed, 0xb2, 0xd2, 0xa4, 0x0a, 0x4d, 0x5f, 0x75, 0x02, 0xe1, 0xa9, 0xf0, 0x8c, 0xec, 0x75, 0x0a, + 0xea, 0xe8, 0xa5, 0xc0, 0xaa, 0x42, 0x2f, 0x41, 0x5f, 0x58, 0xf3, 0x9b, 0xea, 0xcd, 0x14, 0x4b, + 0x7c, 0x5a, 0x65, 0x90, 0x83, 0xfd, 0x32, 0x32, 0xab, 0xa3, 0x60, 0x2c, 0xe8, 0xd1, 0x9b, 0x30, + 0xcc, 0x7e, 0x29, 0xb7, 0xc1, 0x62, 0xbe, 0x06, 0xa3, 0xaa, 0x13, 0x72, 0x9f, 0x5a, 0x03, 0x84, + 0x4d, 0x56, 0x53, 0x9b, 0x50, 0x52, 0x9f, 0xf5, 0x40, 0xad, 0xdd, 0xff, 0xb2, 0x08, 0x13, 0x19, + 0x73, 0x0e, 0x85, 0xc6, 0x48, 0x5c, 0xee, 0x72, 0xaa, 0xbe, 0xc3, 0xb1, 0x08, 0xd9, 0x05, 0xaa, + 0x2e, 0xe6, 0x56, 0xd7, 0x95, 0xde, 0x08, 0x49, 0xb2, 0x52, 0x0a, 0xea, 0x5c, 0x29, 0xad, 0xec, + 0xd8, 0xba, 0x9a, 0x56, 0xa4, 0x5a, 0xfa, 0x40, 0xc7, 0xf4, 0xd7, 0x7b, 0xe0, 0x44, 0x56, 0xc8, + 0x58, 0xf4, 0x99, 0x44, 0x36, 0xe5, 0x17, 0xda, 0xf5, 0xb0, 0x5e, 0x92, 0xa7, 0x58, 0x16, 0x61, + 0x20, 0xa7, 0xcd, 0xfc, 0xca, 0x1d, 0xbb, 0x59, 0xd4, 0xc9, 0x02, 0xd0, 0x04, 0x3c, 0x0b, 0xb6, + 0xdc, 0x3e, 0x3e, 0xd0, 0x75, 0x03, 0x44, 0xfa, 0xec, 0x30, 0xe1, 0x92, 0x24, 0xc1, 0x9d, 0x5d, + 0x92, 0x64, 0xcd, 0x68, 0x09, 0xfa, 0x6a, 0xdc, 0xd7, 0xa5, 0xd8, 0x79, 0x0b, 0xe3, 0x8e, 0x2e, + 0x6a, 0x03, 0x16, 0x0e, 0x2e, 0x82, 0xc1, 0x94, 0x0b, 0x83, 0x5a, 0xc7, 0x3c, 0xd0, 0xc9, 0xb3, + 0x4d, 0x0f, 0x3e, 0xad, 0x0b, 0x1e, 0xe8, 0x04, 0xfa, 0x51, 0x0b, 0x12, 0x0f, 0x5e, 0x94, 0x52, + 0xce, 0xca, 0x55, 0xca, 0x9d, 0x87, 0x9e, 0xc0, 0x6f, 0x90, 0x64, 0x1e, 0x62, 0xec, 0x37, 0x08, + 0x66, 0x18, 0x4a, 0x11, 0xc5, 0xaa, 0x96, 0x21, 0xfd, 0x1a, 0x29, 0x2e, 0x88, 0x8f, 0x42, 0x6f, + 0x83, 0xec, 0x92, 0x46, 0x32, 0x5d, 0xdc, 0x32, 0x05, 0x62, 0x8e, 0xb3, 0x7f, 0xb1, 0x07, 0xce, + 0xb6, 0x8d, 0x06, 0x45, 0x2f, 0x63, 0x9b, 0x4e, 0x44, 0x6e, 0x3b, 0x7b, 0xc9, 0xbc, 0x4e, 0x57, + 0x38, 0x18, 0x4b, 0x3c, 0x7b, 0xfe, 0xc9, 0xd3, 0x33, 0x24, 0x54, 0x98, 0x22, 0x2b, 0x83, 0xc0, + 0x9a, 0x2a, 0xb1, 0xe2, 0x51, 0xa8, 0xc4, 0x9e, 0x03, 0x08, 0xc3, 0x06, 0x77, 0x0b, 0xac, 0x8b, + 0x77, 0xa5, 0x71, 0x1a, 0x8f, 0xea, 0xb2, 0xc0, 0x60, 0x8d, 0x0a, 0xcd, 0xc3, 0x58, 0x33, 0xf0, + 0x23, 0xae, 0x11, 0x9e, 0xe7, 0x9e, 0xb3, 0xbd, 0x66, 0x20, 0x9e, 0x4a, 0x02, 0x8f, 0x53, 0x25, + 0xd0, 0x8b, 0x30, 0x28, 0x82, 0xf3, 0x54, 0x7c, 0xbf, 0x21, 0x94, 0x50, 0xca, 0x99, 0xb4, 0x1a, + 0xa3, 0xb0, 0x4e, 0xa7, 0x15, 0x63, 0x6a, 0xe6, 0xfe, 0xcc, 0x62, 0x5c, 0xd5, 0xac, 0xd1, 0x25, + 0x22, 0x51, 0x0f, 0x74, 0x15, 0x89, 0x3a, 0x56, 0xcb, 0x95, 0xba, 0xb6, 0x7a, 0x42, 0x47, 0x45, + 0xd6, 0x57, 0x7b, 0x60, 0x42, 0x4c, 0x9c, 0x07, 0x3d, 0x5d, 0x6e, 0xa4, 0xa7, 0xcb, 0x51, 0x28, + 0xee, 0xde, 0x9b, 0x33, 0xc7, 0x3d, 0x67, 0x7e, 0xd8, 0x02, 0x53, 0x52, 0x43, 0xff, 0x6b, 0x6e, + 0x62, 0xbc, 0x17, 0x73, 0x25, 0xbf, 0x38, 0xca, 0xef, 0x3b, 0x4b, 0x91, 0x67, 0xff, 0x2b, 0x0b, + 0x1e, 0xe9, 0xc8, 0x11, 0x2d, 0x40, 0x89, 0x89, 0x93, 0xda, 0x45, 0xef, 0x09, 0xe5, 0x59, 0x2f, + 0x11, 0x39, 0xd2, 0x6d, 0x5c, 0x12, 0x2d, 0xa4, 0x32, 0x10, 0x3e, 0x99, 0x91, 0x81, 0xf0, 0xa4, + 0xd1, 0x3d, 0xf7, 0x99, 0x82, 0xf0, 0x8b, 0xf4, 0xc4, 0x31, 0x5e, 0xb5, 0xa1, 0x0f, 0x18, 0x4a, + 0x47, 0x3b, 0xa1, 0x74, 0x44, 0x26, 0xb5, 0x76, 0x86, 0x7c, 0x04, 0xc6, 0x58, 0xd4, 0x3e, 0xf6, + 0xce, 0x43, 0xbc, 0xb7, 0x2b, 0xc4, 0xbe, 0xdc, 0xcb, 0x09, 0x1c, 0x4e, 0x51, 0xdb, 0x7f, 0x5a, + 0x84, 0x3e, 0xbe, 0xfc, 0x8e, 0xe1, 0x7a, 0xf9, 0x34, 0x94, 0xdc, 0x9d, 0x9d, 0x16, 0x4f, 0x2a, + 0xd7, 0x1b, 0x7b, 0x06, 0x2f, 0x49, 0x20, 0x8e, 0xf1, 0x68, 0x51, 0xe8, 0xbb, 0xdb, 0x04, 0x06, + 0xe6, 0x0d, 0x9f, 0x9e, 0x77, 0x22, 0x87, 0xcb, 0x4a, 0xea, 0x9c, 0x8d, 0x35, 0xe3, 0xe8, 0x93, + 0x00, 0x61, 0x14, 0xb8, 0xde, 0x26, 0x85, 0x89, 0xd8, 0xea, 0x4f, 0xb5, 0xe1, 0x56, 0x55, 0xc4, + 0x9c, 0x67, 0xbc, 0xe7, 0x28, 0x04, 0xd6, 0x38, 0xa2, 0x69, 0xe3, 0xa4, 0x9f, 0x4a, 0x8c, 0x1d, + 0x70, 0xae, 0xf1, 0x98, 0x4d, 0x7d, 0x10, 0x4a, 0x8a, 0x79, 0x27, 0xed, 0xd7, 0x90, 0x2e, 0x16, + 0x7d, 0x18, 0x46, 0x13, 0x6d, 0x3b, 0x94, 0xf2, 0xec, 0x97, 0x2c, 0x18, 0xe5, 0x8d, 0x59, 0xf0, + 0x76, 0xc5, 0x69, 0x70, 0x17, 0x4e, 0x34, 0x32, 0x76, 0x65, 0x31, 0xfc, 0xdd, 0xef, 0xe2, 0x4a, + 0x59, 0x96, 0x85, 0xc5, 0x99, 0x75, 0xa0, 0x8b, 0x74, 0xc5, 0xd1, 0x5d, 0xd7, 0x69, 0x88, 0xf8, + 0x06, 0x43, 0x7c, 0xb5, 0x71, 0x18, 0x56, 0x58, 0xfb, 0x0f, 0x2c, 0x18, 0xe7, 0x2d, 0xbf, 0x46, + 0xf6, 0xd4, 0xde, 0xf4, 0xad, 0x6c, 0xbb, 0x48, 0x67, 0x5a, 0xc8, 0x49, 0x67, 0xaa, 0x7f, 0x5a, + 0xb1, 0xed, 0xa7, 0x7d, 0xc5, 0x02, 0x31, 0x43, 0x8e, 0x41, 0x9f, 0xf1, 0x5d, 0xa6, 0x3e, 0x63, + 0x2a, 0x7f, 0x11, 0xe4, 0x28, 0x32, 0xfe, 0xca, 0x82, 0x31, 0x4e, 0x10, 0xdb, 0xea, 0xbf, 0xa5, + 0xe3, 0x30, 0x6b, 0x7e, 0x51, 0xa6, 0xf3, 0xe5, 0x35, 0xb2, 0xb7, 0xe6, 0x57, 0x9c, 0x68, 0x2b, + 0xfb, 0xa3, 0x8c, 0xc1, 0xea, 0x69, 0x3b, 0x58, 0x75, 0xb9, 0x80, 0x8c, 0x6c, 0x5f, 0x1d, 0x02, + 0x04, 0x1c, 0x36, 0xdb, 0x97, 0xfd, 0x67, 0x16, 0x20, 0x5e, 0x8d, 0x21, 0xb8, 0x51, 0x71, 0x88, + 0x41, 0xb5, 0x83, 0x2e, 0xde, 0x9a, 0x14, 0x06, 0x6b, 0x54, 0x47, 0xd2, 0x3d, 0x09, 0x87, 0x8b, + 0x62, 0x67, 0x87, 0x8b, 0x43, 0xf4, 0xe8, 0x3f, 0xed, 0x83, 0xe4, 0xcb, 0x3e, 0x74, 0x13, 0x86, + 0x6a, 0x4e, 0xd3, 0x59, 0x77, 0x1b, 0x6e, 0xe4, 0x92, 0xb0, 0x9d, 0x37, 0xd6, 0x9c, 0x46, 0x27, + 0x4c, 0xe4, 0x1a, 0x04, 0x1b, 0x7c, 0xd0, 0x34, 0x40, 0x33, 0x70, 0x77, 0xdd, 0x06, 0xd9, 0x64, + 0x6a, 0x17, 0x16, 0x51, 0x85, 0xbb, 0x86, 0x49, 0x28, 0xd6, 0x28, 0x32, 0xc2, 0x28, 0x14, 0x1f, + 0x70, 0x18, 0x05, 0x38, 0xb6, 0x30, 0x0a, 0x3d, 0x87, 0x0a, 0xa3, 0x30, 0x70, 0xe8, 0x30, 0x0a, + 0xbd, 0x5d, 0x85, 0x51, 0xc0, 0x70, 0x4a, 0xca, 0x9e, 0xf4, 0xff, 0xa2, 0xdb, 0x20, 0xe2, 0xc2, + 0xc1, 0xc3, 0xc0, 0x4c, 0xdd, 0xdb, 0x2f, 0x9f, 0xc2, 0x99, 0x14, 0x38, 0xa7, 0x24, 0xfa, 0x28, + 0x4c, 0x3a, 0x8d, 0x86, 0x7f, 0x5b, 0x0d, 0xea, 0x42, 0x58, 0x73, 0x1a, 0xdc, 0x04, 0xd2, 0xcf, + 0xb8, 0x9e, 0xb9, 0xb7, 0x5f, 0x9e, 0x9c, 0xc9, 0xa1, 0xc1, 0xb9, 0xa5, 0xd1, 0xab, 0x50, 0x6a, + 0x06, 0x7e, 0x6d, 0x45, 0x7b, 0x7e, 0x7c, 0x8e, 0x76, 0x60, 0x45, 0x02, 0x0f, 0xf6, 0xcb, 0xc3, + 0xea, 0x0f, 0x3b, 0xf0, 0xe3, 0x02, 0x19, 0x71, 0x11, 0x06, 0x8f, 0x34, 0x2e, 0xc2, 0x36, 0x4c, + 0x54, 0x49, 0xe0, 0x3a, 0x0d, 0xf7, 0x2e, 0x95, 0x97, 0xe5, 0xfe, 0xb4, 0x06, 0xa5, 0x20, 0xb1, + 0x23, 0x77, 0x15, 0xac, 0x57, 0x4b, 0xb8, 0x24, 0x77, 0xe0, 0x98, 0x91, 0xfd, 0x5f, 0x2d, 0xe8, + 0x17, 0x2f, 0xf9, 0x8e, 0x41, 0x6a, 0x9c, 0x31, 0x8c, 0x12, 0xe5, 0xec, 0x0e, 0x63, 0x8d, 0xc9, + 0x35, 0x47, 0x2c, 0x25, 0xcc, 0x11, 0x8f, 0xb4, 0x63, 0xd2, 0xde, 0x10, 0xf1, 0xff, 0x16, 0xa9, + 0xf4, 0x6e, 0xbc, 0x29, 0x7f, 0xf0, 0x5d, 0xb0, 0x0a, 0xfd, 0xa1, 0x78, 0xd3, 0x5c, 0xc8, 0x7f, + 0x0d, 0x92, 0x1c, 0xc4, 0xd8, 0x8b, 0x4e, 0xbc, 0x62, 0x96, 0x4c, 0x32, 0x1f, 0x4b, 0x17, 0x1f, + 0xe0, 0x63, 0xe9, 0x4e, 0xaf, 0xee, 0x7b, 0x8e, 0xe2, 0xd5, 0xbd, 0xfd, 0x75, 0x76, 0x72, 0xea, + 0xf0, 0x63, 0x10, 0xaa, 0xae, 0x98, 0x67, 0xac, 0xdd, 0x66, 0x66, 0x89, 0x46, 0xe5, 0x08, 0x57, + 0xbf, 0x60, 0xc1, 0xd9, 0x8c, 0xaf, 0xd2, 0x24, 0xad, 0x67, 0x60, 0xc0, 0x69, 0xd5, 0x5d, 0xb5, + 0x96, 0x35, 0xd3, 0xe4, 0x8c, 0x80, 0x63, 0x45, 0x81, 0xe6, 0x60, 0x9c, 0xdc, 0x69, 0xba, 0xdc, + 0x90, 0xab, 0x3b, 0x1f, 0x17, 0xf9, 0xf3, 0xcf, 0x85, 0x24, 0x12, 0xa7, 0xe9, 0x55, 0x80, 0xa8, + 0x62, 0x6e, 0x80, 0xa8, 0x9f, 0xb7, 0x60, 0x50, 0xbd, 0xea, 0x7d, 0xe0, 0xbd, 0xfd, 0x11, 0xb3, + 0xb7, 0x1f, 0x6e, 0xd3, 0xdb, 0x39, 0xdd, 0xfc, 0x7b, 0x05, 0xd5, 0xde, 0x8a, 0x1f, 0x44, 0x5d, + 0x48, 0x70, 0xf7, 0xff, 0x70, 0xe2, 0x32, 0x0c, 0x3a, 0xcd, 0xa6, 0x44, 0x48, 0x0f, 0x38, 0x16, + 0x7a, 0x3d, 0x06, 0x63, 0x9d, 0x46, 0xbd, 0xe3, 0x28, 0xe6, 0xbe, 0xe3, 0xa8, 0x03, 0x44, 0x4e, + 0xb0, 0x49, 0x22, 0x0a, 0x13, 0x0e, 0xbb, 0xf9, 0xfb, 0x4d, 0x2b, 0x72, 0x1b, 0xd3, 0xae, 0x17, + 0x85, 0x51, 0x30, 0xbd, 0xe4, 0x45, 0xd7, 0x03, 0x7e, 0x85, 0xd4, 0x42, 0xac, 0x29, 0x5e, 0x58, + 0xe3, 0x2b, 0x23, 0x58, 0xb0, 0x3a, 0x7a, 0x4d, 0x57, 0x8a, 0x55, 0x01, 0xc7, 0x8a, 0xc2, 0xfe, + 0x20, 0x3b, 0x7d, 0x58, 0x9f, 0x1e, 0x2e, 0xbc, 0xd8, 0x4f, 0x0e, 0xa9, 0xd1, 0x60, 0x46, 0xd1, + 0x79, 0x3d, 0x88, 0x59, 0xfb, 0xcd, 0x9e, 0x56, 0xac, 0xbf, 0x88, 0x8c, 0x23, 0x9d, 0xa1, 0x8f, + 0xa7, 0xdc, 0x63, 0x9e, 0xed, 0x70, 0x6a, 0x1c, 0xc2, 0x21, 0x86, 0xe5, 0x61, 0x62, 0x59, 0x6a, + 0x96, 0x2a, 0x62, 0x5d, 0x68, 0x79, 0x98, 0x04, 0x02, 0xc7, 0x34, 0x54, 0x98, 0x52, 0x7f, 0xc2, + 0x49, 0x14, 0xc7, 0x02, 0x56, 0xd4, 0x21, 0xd6, 0x28, 0xd0, 0x25, 0xa1, 0x50, 0xe0, 0x76, 0x81, + 0x87, 0x13, 0x0a, 0x05, 0xd9, 0x5d, 0x9a, 0x16, 0xe8, 0x32, 0x0c, 0x92, 0x3b, 0x11, 0x09, 0x3c, + 0xa7, 0x41, 0x6b, 0xe8, 0x8d, 0xe3, 0x67, 0x2e, 0xc4, 0x60, 0xac, 0xd3, 0xa0, 0x35, 0x18, 0x0d, + 0xb9, 0x9e, 0x4d, 0x05, 0x89, 0xe7, 0xfa, 0xca, 0xa7, 0xd4, 0x7b, 0x6a, 0x13, 0x7d, 0xc0, 0x40, + 0x7c, 0x77, 0x92, 0x51, 0x26, 0x92, 0x2c, 0xd0, 0x6b, 0x30, 0xd2, 0xf0, 0x9d, 0xfa, 0xac, 0xd3, + 0x70, 0xbc, 0x1a, 0xeb, 0x9f, 0x01, 0x33, 0x1d, 0xf5, 0xb2, 0x81, 0xc5, 0x09, 0x6a, 0x2a, 0xbc, + 0xe9, 0x10, 0x11, 0xa6, 0xcd, 0xf1, 0x36, 0x49, 0x28, 0xb2, 0xc2, 0x33, 0xe1, 0x6d, 0x39, 0x87, + 0x06, 0xe7, 0x96, 0x46, 0x2f, 0xc1, 0x90, 0xfc, 0x7c, 0x2d, 0x28, 0x4b, 0xfc, 0x24, 0x46, 0xc3, + 0x61, 0x83, 0x12, 0x85, 0x70, 0x52, 0xfe, 0x5f, 0x0b, 0x9c, 0x8d, 0x0d, 0xb7, 0x26, 0x22, 0x15, + 0xf0, 0xe7, 0xc3, 0x1f, 0x96, 0x6f, 0x15, 0x17, 0xb2, 0x88, 0x0e, 0xf6, 0xcb, 0x67, 0x44, 0xaf, + 0x65, 0xe2, 0x71, 0x36, 0x6f, 0xb4, 0x02, 0x13, 0x5b, 0xc4, 0x69, 0x44, 0x5b, 0x73, 0x5b, 0xa4, + 0xb6, 0x2d, 0x17, 0x1c, 0x0b, 0xf3, 0xa2, 0x3d, 0x1d, 0xb9, 0x9a, 0x26, 0xc1, 0x59, 0xe5, 0xd0, + 0x5b, 0x30, 0xd9, 0x6c, 0xad, 0x37, 0xdc, 0x70, 0x6b, 0xd5, 0x8f, 0x98, 0x13, 0xd2, 0x4c, 0xbd, + 0x1e, 0x90, 0x90, 0xbf, 0x2e, 0x65, 0x47, 0xaf, 0x0c, 0xa4, 0x53, 0xc9, 0xa1, 0xc3, 0xb9, 0x1c, + 0xd0, 0x5d, 0x38, 0x99, 0x98, 0x08, 0x22, 0x22, 0xc6, 0x48, 0x7e, 0x8a, 0x98, 0x6a, 0x56, 0x01, + 0x11, 0x5c, 0x26, 0x0b, 0x85, 0xb3, 0xab, 0x40, 0x2f, 0x03, 0xb8, 0xcd, 0x45, 0x67, 0xc7, 0x6d, + 0xd0, 0xab, 0xe2, 0x04, 0x9b, 0x23, 0xf4, 0xda, 0x00, 0x4b, 0x15, 0x09, 0xa5, 0x7b, 0xb3, 0xf8, + 0xb7, 0x87, 0x35, 0x6a, 0xb4, 0x0c, 0x23, 0xe2, 0xdf, 0x9e, 0x18, 0x52, 0x1e, 0x98, 0xe5, 0x31, + 0x16, 0x55, 0xab, 0xa2, 0x63, 0x0e, 0x52, 0x10, 0x9c, 0x28, 0x8b, 0x36, 0xe1, 0xac, 0x4c, 0xf4, + 0xa7, 0xcf, 0x4f, 0x39, 0x06, 0x21, 0xcb, 0xcb, 0x32, 0xc0, 0x5f, 0xa5, 0xcc, 0xb4, 0x23, 0xc4, + 0xed, 0xf9, 0xd0, 0x73, 0x5d, 0x9f, 0xe6, 0xfc, 0xcd, 0xf1, 0xc9, 0x38, 0xe2, 0xe0, 0x72, 0x12, + 0x89, 0xd3, 0xf4, 0xc8, 0x87, 0x93, 0xae, 0x97, 0x35, 0xab, 0x4f, 0x31, 0x46, 0x1f, 0xe2, 0xcf, + 0xad, 0xdb, 0xcf, 0xe8, 0x4c, 0x3c, 0xce, 0xe6, 0xfb, 0xce, 0xfc, 0xfe, 0x7e, 0xdf, 0xa2, 0xa5, + 0x35, 0xe9, 0x1c, 0x7d, 0x0a, 0x86, 0xf4, 0x8f, 0x12, 0x92, 0xc6, 0x85, 0x6c, 0xe1, 0x55, 0xdb, + 0x13, 0xb8, 0x6c, 0xaf, 0xd6, 0xbd, 0x8e, 0xc3, 0x06, 0x47, 0x54, 0xcb, 0x88, 0x6d, 0x70, 0xa9, + 0x3b, 0x49, 0xa6, 0x7b, 0xb7, 0x37, 0x02, 0xd9, 0xd3, 0x1d, 0x2d, 0xc3, 0x40, 0xad, 0xe1, 0x12, + 0x2f, 0x5a, 0xaa, 0xb4, 0x8b, 0xde, 0x38, 0x27, 0x68, 0xc4, 0xfa, 0x11, 0x29, 0x56, 0x38, 0x0c, + 0x2b, 0x0e, 0xf6, 0x6f, 0x16, 0xa0, 0xdc, 0x21, 0x5f, 0x4f, 0xc2, 0x0c, 0x65, 0x75, 0x65, 0x86, + 0x9a, 0x81, 0xd1, 0xf8, 0x9f, 0xae, 0xe1, 0x52, 0x9e, 0xac, 0x37, 0x4d, 0x34, 0x4e, 0xd2, 0x77, + 0xfd, 0x28, 0x41, 0xb7, 0x64, 0xf5, 0x74, 0x7c, 0x56, 0x63, 0x58, 0xb0, 0x7b, 0xbb, 0xbf, 0xf6, + 0xe6, 0x5a, 0x23, 0xed, 0xaf, 0x17, 0xe0, 0xa4, 0xea, 0xc2, 0xef, 0xdc, 0x8e, 0xbb, 0x91, 0xee, + 0xb8, 0x23, 0xb0, 0xe5, 0xda, 0xd7, 0xa1, 0x8f, 0x87, 0xa3, 0xec, 0x42, 0xdc, 0x7e, 0xd4, 0x8c, + 0x92, 0xad, 0x24, 0x3c, 0x23, 0x52, 0xf6, 0x0f, 0x58, 0x30, 0x9a, 0x78, 0xdd, 0x86, 0xb0, 0xf6, + 0x04, 0xfa, 0x7e, 0x44, 0xe2, 0x2c, 0x61, 0xfb, 0x3c, 0xf4, 0x6c, 0xf9, 0x61, 0x94, 0x74, 0xf4, + 0xb8, 0xea, 0x87, 0x11, 0x66, 0x18, 0xfb, 0x0f, 0x2d, 0xe8, 0x5d, 0x73, 0x5c, 0x2f, 0x92, 0x46, + 0x01, 0x2b, 0xc7, 0x28, 0xd0, 0xcd, 0x77, 0xa1, 0x17, 0xa1, 0x8f, 0x6c, 0x6c, 0x90, 0x5a, 0x24, + 0x46, 0x55, 0x86, 0x42, 0xe8, 0x5b, 0x60, 0x50, 0x2a, 0xff, 0xb1, 0xca, 0xf8, 0x5f, 0x2c, 0x88, + 0xd1, 0x2d, 0x28, 0x45, 0xee, 0x0e, 0x99, 0xa9, 0xd7, 0x85, 0xa9, 0xfc, 0x3e, 0xe2, 0x77, 0xac, + 0x49, 0x06, 0x38, 0xe6, 0x65, 0x7f, 0xa9, 0x00, 0x10, 0xc7, 0xf1, 0xea, 0xf4, 0x89, 0xb3, 0x29, + 0x23, 0xea, 0x85, 0x0c, 0x23, 0x2a, 0x8a, 0x19, 0x66, 0x58, 0x50, 0x55, 0x37, 0x15, 0xbb, 0xea, + 0xa6, 0x9e, 0xc3, 0x74, 0xd3, 0x1c, 0x8c, 0xc7, 0x71, 0xc8, 0xcc, 0x30, 0x8c, 0xec, 0xe8, 0x5c, + 0x4b, 0x22, 0x71, 0x9a, 0xde, 0x26, 0x70, 0x5e, 0x85, 0x63, 0x12, 0x27, 0x1a, 0xf3, 0x03, 0xd7, + 0x8d, 0xd2, 0x1d, 0xfa, 0x29, 0xb6, 0x12, 0x17, 0x72, 0xad, 0xc4, 0x3f, 0x61, 0xc1, 0x89, 0x64, + 0x3d, 0xec, 0xd1, 0xf4, 0x17, 0x2c, 0x38, 0xc9, 0x6c, 0xe5, 0xac, 0xd6, 0xb4, 0x65, 0xfe, 0x85, + 0xb6, 0x21, 0xa6, 0x72, 0x5a, 0x1c, 0xc7, 0xdc, 0x58, 0xc9, 0x62, 0x8d, 0xb3, 0x6b, 0xb4, 0xff, + 0x4b, 0x0f, 0x4c, 0xe6, 0xc5, 0xa6, 0x62, 0xcf, 0x44, 0x9c, 0x3b, 0xd5, 0x6d, 0x72, 0x5b, 0x38, + 0xe3, 0xc7, 0xcf, 0x44, 0x38, 0x18, 0x4b, 0x7c, 0x32, 0xfd, 0x49, 0xa1, 0xcb, 0xf4, 0x27, 0x5b, + 0x30, 0x7e, 0x7b, 0x8b, 0x78, 0x37, 0xbc, 0xd0, 0x89, 0xdc, 0x70, 0xc3, 0x65, 0x76, 0x65, 0x3e, + 0x6f, 0x64, 0x0e, 0xea, 0xf1, 0x5b, 0x49, 0x82, 0x83, 0xfd, 0xf2, 0x59, 0x03, 0x10, 0x37, 0x99, + 0x6f, 0x24, 0x38, 0xcd, 0x34, 0x9d, 0x3d, 0xa6, 0xe7, 0x01, 0x67, 0x8f, 0xd9, 0x71, 0x85, 0x37, + 0x8a, 0x7c, 0x03, 0xc0, 0x6e, 0x8c, 0x2b, 0x0a, 0x8a, 0x35, 0x0a, 0xf4, 0x09, 0x40, 0x7a, 0x86, + 0x2e, 0x23, 0x34, 0xe8, 0xb3, 0xf7, 0xf6, 0xcb, 0x68, 0x35, 0x85, 0x3d, 0xd8, 0x2f, 0x4f, 0x50, + 0xe8, 0x92, 0x47, 0x6f, 0x9e, 0x71, 0x3c, 0xb5, 0x0c, 0x46, 0xe8, 0x16, 0x8c, 0x51, 0x28, 0x5b, + 0x51, 0x32, 0xee, 0x28, 0xbf, 0x2d, 0x3e, 0x7d, 0x6f, 0xbf, 0x3c, 0xb6, 0x9a, 0xc0, 0xe5, 0xb1, + 0x4e, 0x31, 0x41, 0x2f, 0xc3, 0x48, 0x3c, 0xaf, 0xae, 0x91, 0x3d, 0x1e, 0xa0, 0xa7, 0xc4, 0x15, + 0xde, 0x2b, 0x06, 0x06, 0x27, 0x28, 0xed, 0x2f, 0x58, 0x70, 0x3a, 0x37, 0x23, 0x3e, 0xba, 0x08, + 0x03, 0x4e, 0xd3, 0xe5, 0xe6, 0x0b, 0x71, 0xd4, 0x30, 0x35, 0x59, 0x65, 0x89, 0x1b, 0x2f, 0x14, + 0x96, 0xee, 0xf0, 0xdb, 0xae, 0x57, 0x4f, 0xee, 0xf0, 0xd7, 0x5c, 0xaf, 0x8e, 0x19, 0x46, 0x1d, + 0x59, 0xc5, 0xdc, 0xa7, 0x08, 0x5f, 0xa5, 0x6b, 0x35, 0x23, 0x77, 0xfe, 0xf1, 0x36, 0x03, 0x3d, + 0xad, 0x9b, 0x1a, 0x85, 0x57, 0x61, 0xae, 0x99, 0xf1, 0xf3, 0x16, 0x88, 0xa7, 0xcb, 0x5d, 0x9c, + 0xc9, 0x6f, 0xc2, 0xd0, 0x6e, 0x3a, 0x7b, 0xe1, 0xf9, 0xfc, 0xb7, 0xdc, 0x22, 0xe2, 0xba, 0x12, + 0xb4, 0x8d, 0x4c, 0x85, 0x06, 0x2f, 0xbb, 0x0e, 0x02, 0x3b, 0x4f, 0x98, 0x41, 0xa1, 0x73, 0x6b, + 0x9e, 0x03, 0xa8, 0x33, 0x5a, 0x96, 0xd2, 0xb8, 0x60, 0x4a, 0x5c, 0xf3, 0x0a, 0x83, 0x35, 0x2a, + 0xfb, 0x9f, 0x15, 0x60, 0x50, 0x66, 0xcb, 0x6b, 0x79, 0xdd, 0xa8, 0xfd, 0x0e, 0x95, 0x3e, 0x1b, + 0x5d, 0x82, 0x12, 0xd3, 0x4b, 0x57, 0x62, 0x6d, 0xa9, 0xd2, 0x0a, 0xad, 0x48, 0x04, 0x8e, 0x69, + 0xe8, 0xee, 0x18, 0xb6, 0xd6, 0x19, 0x79, 0xe2, 0xa1, 0x6d, 0x95, 0x83, 0xb1, 0xc4, 0xa3, 0x8f, + 0xc2, 0x18, 0x2f, 0x17, 0xf8, 0x4d, 0x67, 0x93, 0xdb, 0xb2, 0x7a, 0x55, 0xf4, 0x92, 0xb1, 0x95, + 0x04, 0xee, 0x60, 0xbf, 0x7c, 0x22, 0x09, 0x63, 0x46, 0xda, 0x14, 0x17, 0xe6, 0xb2, 0xc6, 0x2b, + 0xa1, 0xbb, 0x7a, 0xca, 0xd3, 0x2d, 0x46, 0x61, 0x9d, 0xce, 0xfe, 0x14, 0xa0, 0x74, 0xde, 0x40, + 0xf4, 0x3a, 0x77, 0x79, 0x76, 0x03, 0x52, 0x6f, 0x67, 0xb4, 0xd5, 0x63, 0x74, 0xc8, 0x37, 0x72, + 0xbc, 0x14, 0x56, 0xe5, 0xed, 0xff, 0xa3, 0x08, 0x63, 0xc9, 0xa8, 0x00, 0xe8, 0x2a, 0xf4, 0x71, + 0x91, 0x52, 0xb0, 0x6f, 0xe3, 0x13, 0xa4, 0xc5, 0x12, 0x60, 0x87, 0xab, 0x90, 0x4a, 0x45, 0x79, + 0xf4, 0x16, 0x0c, 0xd6, 0xfd, 0xdb, 0xde, 0x6d, 0x27, 0xa8, 0xcf, 0x54, 0x96, 0xc4, 0x74, 0xce, + 0x54, 0x54, 0xcc, 0xc7, 0x64, 0x7a, 0x7c, 0x02, 0x66, 0xff, 0x8e, 0x51, 0x58, 0x67, 0x87, 0xd6, + 0x58, 0xa2, 0x8f, 0x0d, 0x77, 0x73, 0xc5, 0x69, 0xb6, 0x7b, 0xff, 0x32, 0x27, 0x89, 0x34, 0xce, + 0xc3, 0x22, 0x1b, 0x08, 0x47, 0xe0, 0x98, 0x11, 0xfa, 0x0c, 0x4c, 0x84, 0x39, 0xa6, 0x93, 0xbc, + 0x34, 0xb2, 0xed, 0xac, 0x09, 0xb3, 0x0f, 0xdd, 0xdb, 0x2f, 0x4f, 0x64, 0x19, 0x59, 0xb2, 0xaa, + 0xb1, 0x3f, 0xdf, 0x03, 0x53, 0x32, 0x5d, 0x66, 0x86, 0xb7, 0xfd, 0xe7, 0xac, 0x84, 0xbb, 0xfd, + 0xcb, 0xf9, 0x7b, 0xc3, 0x03, 0x73, 0xba, 0xff, 0x62, 0xda, 0xe9, 0xfe, 0xd5, 0x43, 0x36, 0xe3, + 0xc8, 0x5c, 0xef, 0xbf, 0x63, 0xfd, 0xe5, 0xbf, 0x7c, 0x02, 0x8c, 0xdd, 0xdc, 0x48, 0x2f, 0x6f, + 0x1d, 0x51, 0x7a, 0x79, 0x0c, 0x03, 0x64, 0xa7, 0x19, 0xed, 0xcd, 0xbb, 0x81, 0x68, 0x71, 0x26, + 0xcf, 0x05, 0x41, 0x93, 0xe6, 0x29, 0x31, 0x58, 0xf1, 0x41, 0xbb, 0x90, 0x4e, 0xd0, 0x2f, 0x56, + 0x67, 0xe6, 0xea, 0x49, 0x25, 0xf8, 0x37, 0x6a, 0x61, 0xf7, 0x85, 0x14, 0x09, 0x4e, 0x57, 0xc1, + 0xb2, 0x5b, 0x67, 0xe5, 0xe5, 0x17, 0x2b, 0x37, 0x53, 0x5c, 0xcf, 0xca, 0xee, 0x9f, 0xce, 0x6e, + 0x9d, 0x45, 0x85, 0x33, 0xeb, 0x42, 0xab, 0xd0, 0xbf, 0xe9, 0x46, 0x98, 0x34, 0x7d, 0x71, 0xab, + 0xcf, 0xdc, 0x90, 0xae, 0x70, 0x92, 0x74, 0xb6, 0x69, 0x81, 0xc0, 0x92, 0x09, 0x7a, 0x5d, 0x6d, + 0xc5, 0x7d, 0xf9, 0x9a, 0xb7, 0xb4, 0x17, 0x53, 0xe6, 0x66, 0x2c, 0x32, 0xfd, 0xf7, 0xdf, 0x6f, + 0xa6, 0xff, 0x45, 0x99, 0x9f, 0x7f, 0x20, 0xff, 0xd5, 0x22, 0x4b, 0xbf, 0xdf, 0x21, 0x2b, 0xff, + 0x4d, 0x28, 0x6d, 0x72, 0x2b, 0x8c, 0x4a, 0xa1, 0x9f, 0x79, 0x24, 0x5c, 0x91, 0x44, 0xe9, 0x7c, + 0xd7, 0x0a, 0x85, 0x63, 0x56, 0xe8, 0xf3, 0x16, 0x9c, 0x4c, 0xe6, 0x1c, 0x66, 0x8f, 0x6b, 0x84, + 0xc3, 0xcf, 0x8b, 0xdd, 0x24, 0x81, 0x66, 0x05, 0x8c, 0x0a, 0x99, 0xb2, 0x3c, 0x93, 0x0c, 0x67, + 0x57, 0x47, 0x3b, 0x3a, 0x58, 0xaf, 0x0b, 0xc7, 0x93, 0xcc, 0x8e, 0x4e, 0x04, 0x22, 0xe1, 0x1d, + 0x8d, 0x67, 0xe7, 0x31, 0x2d, 0x88, 0xd6, 0x32, 0xd2, 0xef, 0x3f, 0x96, 0x97, 0x7e, 0xbf, 0xeb, + 0xa4, 0xfb, 0xaf, 0x43, 0x5f, 0xcd, 0xf5, 0xea, 0x24, 0x10, 0x19, 0xf7, 0x33, 0xa7, 0xd2, 0x1c, + 0xa3, 0x48, 0x4f, 0x25, 0x0e, 0xc7, 0x82, 0x03, 0xe3, 0x45, 0x9a, 0x5b, 0x1b, 0x61, 0xbb, 0x10, + 0xf3, 0x73, 0xa4, 0xb9, 0x95, 0x98, 0x50, 0x9c, 0x17, 0x83, 0x63, 0xc1, 0x81, 0x2e, 0x99, 0x0d, + 0xba, 0x80, 0x48, 0xd0, 0x2e, 0x7b, 0xfe, 0x22, 0x27, 0x49, 0x2f, 0x19, 0x81, 0xc0, 0x92, 0x09, + 0xfa, 0xa4, 0x29, 0x73, 0xf0, 0xfc, 0xf9, 0x4f, 0x77, 0x90, 0x39, 0x0c, 0xbe, 0xed, 0xa5, 0x8e, + 0x97, 0xa1, 0xb0, 0x51, 0x13, 0x29, 0xf3, 0x33, 0x95, 0xc5, 0x8b, 0x73, 0x06, 0x37, 0x16, 0xb2, + 0x79, 0x71, 0x0e, 0x17, 0x36, 0x6a, 0x2a, 0xb3, 0xff, 0xa2, 0xdb, 0x90, 0x79, 0xef, 0xf3, 0x33, + 0xfb, 0x53, 0xa2, 0x9c, 0xcc, 0xfe, 0x14, 0x85, 0x63, 0x56, 0x94, 0x6f, 0x2c, 0x09, 0x4d, 0xe4, + 0xf3, 0x55, 0x02, 0x4f, 0x9a, 0x6f, 0xa6, 0x2c, 0xb4, 0x0d, 0xc3, 0xbb, 0x61, 0x73, 0x8b, 0xc8, + 0x5d, 0x51, 0x24, 0xbd, 0xcf, 0x7c, 0x99, 0x7e, 0x53, 0x10, 0xba, 0x41, 0xd4, 0x72, 0x1a, 0xa9, + 0x8d, 0x9c, 0xdd, 0xc6, 0x6f, 0xea, 0xcc, 0xb0, 0xc9, 0x9b, 0x4e, 0x84, 0xb7, 0x79, 0xf8, 0x28, + 0x91, 0x0f, 0x3f, 0x73, 0x22, 0x64, 0x44, 0x98, 0xe2, 0x13, 0x41, 0x20, 0xb0, 0x64, 0xa2, 0x3a, + 0x9b, 0x1d, 0x40, 0xa7, 0x3a, 0x74, 0x76, 0xaa, 0xbd, 0x71, 0x67, 0xb3, 0x03, 0x27, 0x66, 0xc5, + 0x0e, 0x9a, 0x66, 0x46, 0xee, 0xe7, 0xc9, 0x87, 0xf2, 0x0f, 0x9a, 0x4e, 0xb9, 0xa2, 0xf9, 0x41, + 0x93, 0x45, 0x85, 0x33, 0xeb, 0xa2, 0x1f, 0xd7, 0x94, 0x91, 0xc0, 0x44, 0x48, 0xfc, 0x27, 0x73, + 0x02, 0xe9, 0xa5, 0xc3, 0x85, 0xf1, 0x8f, 0x53, 0x28, 0x1c, 0xb3, 0x42, 0x75, 0x18, 0x69, 0x1a, + 0x11, 0x26, 0x59, 0x68, 0xff, 0x1c, 0xb9, 0x20, 0x2b, 0x16, 0x25, 0x57, 0x2a, 0x98, 0x18, 0x9c, + 0xe0, 0xc9, 0xfc, 0xac, 0xf8, 0xa3, 0x29, 0x16, 0xf9, 0x3f, 0x67, 0xa8, 0x33, 0xde, 0x55, 0xf1, + 0xa1, 0x16, 0x08, 0x2c, 0x99, 0xd0, 0xde, 0x10, 0x4f, 0x7d, 0xfc, 0x90, 0x25, 0xd0, 0xc8, 0x33, + 0x87, 0x66, 0x59, 0x16, 0x64, 0x58, 0x65, 0x81, 0xc2, 0x31, 0x2b, 0xba, 0x93, 0xd3, 0x03, 0xef, + 0x4c, 0xfe, 0x4e, 0x9e, 0x3c, 0xee, 0xd8, 0x4e, 0x4e, 0x0f, 0xbb, 0xa2, 0x38, 0xea, 0x54, 0x14, + 0x60, 0x16, 0xfc, 0x3f, 0xa7, 0x5d, 0x2a, 0x8c, 0x70, 0xba, 0x5d, 0x0a, 0x85, 0x63, 0x56, 0xf6, + 0x0f, 0x16, 0xe0, 0x5c, 0xfb, 0xf5, 0x16, 0x9b, 0x4b, 0x2a, 0xb1, 0x67, 0x48, 0xc2, 0x5c, 0xc2, + 0x2f, 0xef, 0x31, 0x55, 0xd7, 0x81, 0x41, 0xaf, 0xc0, 0xb8, 0x7a, 0x90, 0xd5, 0x70, 0x6b, 0x7b, + 0xab, 0xb1, 0xbe, 0x44, 0x85, 0xd0, 0xa8, 0x26, 0x09, 0x70, 0xba, 0x0c, 0x9a, 0x81, 0x51, 0x03, + 0xb8, 0x34, 0x2f, 0x2e, 0xe9, 0x71, 0xb8, 0x79, 0x13, 0x8d, 0x93, 0xf4, 0xf6, 0xcf, 0x5a, 0xf0, + 0x50, 0x4e, 0xee, 0xdf, 0xae, 0xe3, 0x5e, 0x6e, 0xc0, 0x68, 0xd3, 0x2c, 0xda, 0x21, 0x54, 0xaf, + 0x91, 0x61, 0x58, 0xb5, 0x35, 0x81, 0xc0, 0x49, 0xa6, 0xf6, 0x4f, 0x17, 0xe0, 0x6c, 0x5b, 0x0f, + 0x63, 0x84, 0xe1, 0xd4, 0xe6, 0x4e, 0xe8, 0xcc, 0x05, 0xa4, 0x4e, 0xbc, 0xc8, 0x75, 0x1a, 0xd5, + 0x26, 0xa9, 0x69, 0x06, 0x2f, 0xe6, 0xaa, 0x7b, 0x65, 0xa5, 0x3a, 0x93, 0xa6, 0xc0, 0x39, 0x25, + 0xd1, 0x22, 0xa0, 0x34, 0x46, 0x8c, 0x30, 0x4b, 0x23, 0x91, 0xe6, 0x87, 0x33, 0x4a, 0xa0, 0x0f, + 0xc2, 0xb0, 0xf2, 0x5c, 0xd6, 0x46, 0x9c, 0x6d, 0xec, 0x58, 0x47, 0x60, 0x93, 0x0e, 0x5d, 0xe6, + 0x79, 0x48, 0x44, 0xc6, 0x1a, 0x61, 0x1d, 0x1b, 0x95, 0x49, 0x46, 0x04, 0x18, 0xeb, 0x34, 0xb3, + 0x2f, 0xfd, 0xd6, 0x37, 0xcf, 0xbd, 0xef, 0x77, 0xbf, 0x79, 0xee, 0x7d, 0x7f, 0xf0, 0xcd, 0x73, + 0xef, 0xfb, 0x9e, 0x7b, 0xe7, 0xac, 0xdf, 0xba, 0x77, 0xce, 0xfa, 0xdd, 0x7b, 0xe7, 0xac, 0x3f, + 0xb8, 0x77, 0xce, 0xfa, 0xe3, 0x7b, 0xe7, 0xac, 0x2f, 0xfd, 0xc9, 0xb9, 0xf7, 0xbd, 0x89, 0xe2, + 0x48, 0xb2, 0x97, 0xe8, 0xe8, 0x5c, 0xda, 0xbd, 0xfc, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf4, + 0x14, 0xad, 0xc8, 0xda, 0x15, 0x01, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -12125,6 +12173,13 @@ func (m *LoadBalancerIngress) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x22 } } + if m.IPMode != nil { + i -= len(*m.IPMode) + copy(dAtA[i:], *m.IPMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.IPMode))) + i-- + dAtA[i] = 0x1a + } i -= len(m.Hostname) copy(dAtA[i:], m.Hostname) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) @@ -20001,6 +20056,87 @@ func (m *VolumeProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *VolumeResourceRequirements) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeResourceRequirements) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeResourceRequirements) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Requests) > 0 { + keysForRequests := make([]string, 0, len(m.Requests)) + for k := range m.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + for iNdEx := len(keysForRequests) - 1; iNdEx >= 0; iNdEx-- { + v := m.Requests[ResourceName(keysForRequests[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForRequests[iNdEx]) + copy(dAtA[i:], keysForRequests[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForRequests[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Limits) > 0 { + keysForLimits := make([]string, 0, len(m.Limits)) + for k := range m.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + for iNdEx := len(keysForLimits) - 1; iNdEx >= 0; iNdEx-- { + v := m.Limits[ResourceName(keysForLimits[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForLimits[iNdEx]) + copy(dAtA[i:], keysForLimits[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForLimits[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *VolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -22299,6 +22435,10 @@ func (m *LoadBalancerIngress) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Hostname) n += 1 + l + sovGenerated(uint64(l)) + if m.IPMode != nil { + l = len(*m.IPMode) + n += 1 + l + sovGenerated(uint64(l)) + } if len(m.Ports) > 0 { for _, e := range m.Ports { l = e.Size() @@ -25196,6 +25336,33 @@ func (m *VolumeProjection) Size() (n int) { return n } +func (m *VolumeResourceRequirements) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Limits) > 0 { + for k, v := range m.Limits { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Requests) > 0 { + for k, v := range m.Requests { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *VolumeSource) Size() (n int) { if m == nil { return 0 @@ -26716,6 +26883,7 @@ func (this *LoadBalancerIngress) String() string { s := strings.Join([]string{`&LoadBalancerIngress{`, `IP:` + fmt.Sprintf("%v", this.IP) + `,`, `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `IPMode:` + valueToStringGenerated(this.IPMode) + `,`, `Ports:` + repeatedStringForPorts + `,`, `}`, }, "") @@ -27206,7 +27374,7 @@ func (this *PersistentVolumeClaimSpec) String() string { } s := strings.Join([]string{`&PersistentVolumeClaimSpec{`, `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, - `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "VolumeResourceRequirements", "VolumeResourceRequirements", 1), `&`, ``, 1) + `,`, `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `StorageClassName:` + valueToStringGenerated(this.StorageClassName) + `,`, @@ -28914,6 +29082,37 @@ func (this *VolumeProjection) String() string { }, "") return s } +func (this *VolumeResourceRequirements) String() string { + if this == nil { + return "nil" + } + keysForLimits := make([]string, 0, len(this.Limits)) + for k := range this.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + mapStringForLimits := "ResourceList{" + for _, k := range keysForLimits { + mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) + } + mapStringForLimits += "}" + keysForRequests := make([]string, 0, len(this.Requests)) + for k := range this.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + mapStringForRequests := "ResourceList{" + for _, k := range keysForRequests { + mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) + } + mapStringForRequests += "}" + s := strings.Join([]string{`&VolumeResourceRequirements{`, + `Limits:` + mapStringForLimits + `,`, + `Requests:` + mapStringForRequests + `,`, + `}`, + }, "") + return s +} func (this *VolumeSource) String() string { if this == nil { return "nil" @@ -44323,6 +44522,39 @@ func (m *LoadBalancerIngress) Unmarshal(dAtA []byte) error { } m.Hostname = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IPMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := LoadBalancerIPMode(dAtA[iNdEx:postIndex]) + m.IPMode = &s + iNdEx = postIndex case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) @@ -69439,6 +69671,314 @@ func (m *VolumeProjection) Unmarshal(dAtA []byte) error { } return nil } +func (m *VolumeResourceRequirements) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeResourceRequirements: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeResourceRequirements: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Limits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Limits == nil { + m.Limits = make(ResourceList) + } + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Limits[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Requests == nil { + m.Requests = make(ResourceList) + } + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Requests[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *VolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto index 901e837313fa..8080ae98db9b 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/generated.proto @@ -2171,6 +2171,15 @@ message LoadBalancerIngress { // +optional optional string hostname = 2; + // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. + // Setting this to "VIP" indicates that traffic is delivered to the node with + // the destination set to the load-balancer's IP and port. + // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with + // the destination set to the node's IP and node port or the pod's IP and port. + // Service implementations may use this information to adjust traffic routing. + // +optional + optional string ipMode = 3; + // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +listType=atomic @@ -2816,7 +2825,7 @@ message PersistentVolumeClaimSpec { // status field of the claim. // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources // +optional - optional ResourceRequirements resources = 2; + optional VolumeResourceRequirements resources = 2; // volumeName is the binding reference to the PersistentVolume backing this claim. // +optional @@ -5962,6 +5971,21 @@ message VolumeProjection { optional ServiceAccountTokenProjection serviceAccountToken = 4; } +// VolumeResourceRequirements describes the storage resource requirements for a volume. +message VolumeResourceRequirements { + // Limits describes the maximum amount of compute resources allowed. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // +optional + map limits = 1; + + // Requests describes the minimum amount of compute resources required. + // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value. Requests cannot exceed Limits. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // +optional + map requests = 2; +} + // Represents the source of a volume to mount. // Only one of its members may be specified. message VolumeSource { diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go index 9e05c2235652..13bdb6da7528 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types.go @@ -486,7 +486,7 @@ type PersistentVolumeClaimSpec struct { // status field of the claim. // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources // +optional - Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"` + Resources VolumeResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"` // volumeName is the binding reference to the PersistentVolume backing this claim. // +optional VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,3,opt,name=volumeName"` @@ -2417,6 +2417,27 @@ type ResourceRequirements struct { Claims []ResourceClaim `json:"claims,omitempty" protobuf:"bytes,3,opt,name=claims"` } +// VolumeResourceRequirements describes the storage resource requirements for a volume. +type VolumeResourceRequirements struct { + // Limits describes the maximum amount of compute resources allowed. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // +optional + Limits ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"` + // Requests describes the minimum amount of compute resources required. + // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value. Requests cannot exceed Limits. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // +optional + Requests ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"` + + // Claims got added by accident when volumes shared the ResourceRequirements struct + // with containers. Stripping the field got added in 1.27 and was backported to 1.26. + // Starting with Kubernetes 1.28, this field is not part of the volume API anymore. + // + // Future extensions must not use "claims" or field number 3. + // Claims []ResourceClaim `json:"claims,omitempty" protobuf:"bytes,3,opt,name=claims"` +} + // ResourceClaim references one entry in PodSpec.ResourceClaims. type ResourceClaim struct { // Name must match the name of one entry in pod.spec.resourceClaims of @@ -4692,6 +4713,15 @@ type LoadBalancerIngress struct { // +optional Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"` + // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. + // Setting this to "VIP" indicates that traffic is delivered to the node with + // the destination set to the load-balancer's IP and port. + // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with + // the destination set to the node's IP and node port or the pod's IP and port. + // Service implementations may use this information to adjust traffic routing. + // +optional + IPMode *LoadBalancerIPMode `json:"ipMode,omitempty" protobuf:"bytes,3,opt,name=ipMode"` + // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +listType=atomic @@ -4709,6 +4739,8 @@ const ( IPv4Protocol IPFamily = "IPv4" // IPv6Protocol indicates that this IP is IPv6 protocol IPv6Protocol IPFamily = "IPv6" + // IPFamilyUnknown indicates that this IP is unknown protocol + IPFamilyUnknown IPFamily = "" ) // IPFamilyPolicy represents the dual-stack-ness requested or required by a Service @@ -7054,3 +7086,15 @@ type PortStatus struct { // +kubebuilder:validation:MaxLength=316 Error *string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"` } + +// LoadBalancerIPMode represents the mode of the LoadBalancer ingress IP +type LoadBalancerIPMode string + +const ( + // LoadBalancerIPModeVIP indicates that traffic is delivered to the node with + // the destination set to the load-balancer's IP and port. + LoadBalancerIPModeVIP LoadBalancerIPMode = "VIP" + // LoadBalancerIPModeProxy indicates that traffic is delivered to the node or pod with + // the destination set to the node's IP and port or the pod's IP and port. + LoadBalancerIPModeProxy LoadBalancerIPMode = "Proxy" +) diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index 9734d8b41eb5..b33dfafb07dd 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -988,6 +988,7 @@ var map_LoadBalancerIngress = map[string]string{ "": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", "ip": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", "hostname": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", + "ipMode": "IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. Setting this to \"VIP\" indicates that traffic is delivered to the node with the destination set to the load-balancer's IP and port. Setting this to \"Proxy\" indicates that traffic is delivered to the node or pod with the destination set to the node's IP and node port or the pod's IP and port. Service implementations may use this information to adjust traffic routing.", "ports": "Ports is a list of records of service ports If used, every port defined in the service should have an entry in it", } @@ -2572,6 +2573,16 @@ func (VolumeProjection) SwaggerDoc() map[string]string { return map_VolumeProjection } +var map_VolumeResourceRequirements = map[string]string{ + "": "VolumeResourceRequirements describes the storage resource requirements for a volume.", + "limits": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "requests": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", +} + +func (VolumeResourceRequirements) SwaggerDoc() map[string]string { + return map_VolumeResourceRequirements +} + var map_VolumeSource = map[string]string{ "": "Represents the source of a volume to mount. Only one of its members may be specified.", "hostPath": "hostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", diff --git a/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index d76f0bbbcf76..c1453c59cd0a 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -2228,6 +2228,11 @@ func (in *List) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) { *out = *in + if in.IPMode != nil { + in, out := &in.IPMode, &out.IPMode + *out = new(LoadBalancerIPMode) + **out = **in + } if in.Ports != nil { in, out := &in.Ports, &out.Ports *out = make([]PortStatus, len(*in)) @@ -6040,6 +6045,36 @@ func (in *VolumeProjection) DeepCopy() *VolumeProjection { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeResourceRequirements) DeepCopyInto(out *VolumeResourceRequirements) { + *out = *in + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeResourceRequirements. +func (in *VolumeResourceRequirements) DeepCopy() *VolumeResourceRequirements { + if in == nil { + return nil + } + out := new(VolumeResourceRequirements) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = *in diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go deleted file mode 100644 index a3d4d0c60757..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:protobuf-gen=package -// +k8s:openapi-gen=true -// +k8s:prerelease-lifecycle-gen=true - -// +groupName=flowcontrol.apiserver.k8s.io - -// Package v1alpha1 holds api types of version v1alpha1 for group "flowcontrol.apiserver.k8s.io". -package v1alpha1 // import "k8s.io/api/flowcontrol/v1alpha1" diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go deleted file mode 100644 index b54e1ceefbba..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.pb.go +++ /dev/null @@ -1,5664 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto - -package v1alpha1 - -import ( - fmt "fmt" - - io "io" - - proto "github.com/gogo/protobuf/proto" - - math "math" - math_bits "math/bits" - reflect "reflect" - strings "strings" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -func (m *ExemptPriorityLevelConfiguration) Reset() { *m = ExemptPriorityLevelConfiguration{} } -func (*ExemptPriorityLevelConfiguration) ProtoMessage() {} -func (*ExemptPriorityLevelConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{0} -} -func (m *ExemptPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ExemptPriorityLevelConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ExemptPriorityLevelConfiguration) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExemptPriorityLevelConfiguration.Merge(m, src) -} -func (m *ExemptPriorityLevelConfiguration) XXX_Size() int { - return m.Size() -} -func (m *ExemptPriorityLevelConfiguration) XXX_DiscardUnknown() { - xxx_messageInfo_ExemptPriorityLevelConfiguration.DiscardUnknown(m) -} - -var xxx_messageInfo_ExemptPriorityLevelConfiguration proto.InternalMessageInfo - -func (m *FlowDistinguisherMethod) Reset() { *m = FlowDistinguisherMethod{} } -func (*FlowDistinguisherMethod) ProtoMessage() {} -func (*FlowDistinguisherMethod) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{1} -} -func (m *FlowDistinguisherMethod) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowDistinguisherMethod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowDistinguisherMethod) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowDistinguisherMethod.Merge(m, src) -} -func (m *FlowDistinguisherMethod) XXX_Size() int { - return m.Size() -} -func (m *FlowDistinguisherMethod) XXX_DiscardUnknown() { - xxx_messageInfo_FlowDistinguisherMethod.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowDistinguisherMethod proto.InternalMessageInfo - -func (m *FlowSchema) Reset() { *m = FlowSchema{} } -func (*FlowSchema) ProtoMessage() {} -func (*FlowSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{2} -} -func (m *FlowSchema) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowSchema.Merge(m, src) -} -func (m *FlowSchema) XXX_Size() int { - return m.Size() -} -func (m *FlowSchema) XXX_DiscardUnknown() { - xxx_messageInfo_FlowSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowSchema proto.InternalMessageInfo - -func (m *FlowSchemaCondition) Reset() { *m = FlowSchemaCondition{} } -func (*FlowSchemaCondition) ProtoMessage() {} -func (*FlowSchemaCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{3} -} -func (m *FlowSchemaCondition) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowSchemaCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowSchemaCondition) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowSchemaCondition.Merge(m, src) -} -func (m *FlowSchemaCondition) XXX_Size() int { - return m.Size() -} -func (m *FlowSchemaCondition) XXX_DiscardUnknown() { - xxx_messageInfo_FlowSchemaCondition.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowSchemaCondition proto.InternalMessageInfo - -func (m *FlowSchemaList) Reset() { *m = FlowSchemaList{} } -func (*FlowSchemaList) ProtoMessage() {} -func (*FlowSchemaList) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{4} -} -func (m *FlowSchemaList) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowSchemaList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowSchemaList) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowSchemaList.Merge(m, src) -} -func (m *FlowSchemaList) XXX_Size() int { - return m.Size() -} -func (m *FlowSchemaList) XXX_DiscardUnknown() { - xxx_messageInfo_FlowSchemaList.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowSchemaList proto.InternalMessageInfo - -func (m *FlowSchemaSpec) Reset() { *m = FlowSchemaSpec{} } -func (*FlowSchemaSpec) ProtoMessage() {} -func (*FlowSchemaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{5} -} -func (m *FlowSchemaSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowSchemaSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowSchemaSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowSchemaSpec.Merge(m, src) -} -func (m *FlowSchemaSpec) XXX_Size() int { - return m.Size() -} -func (m *FlowSchemaSpec) XXX_DiscardUnknown() { - xxx_messageInfo_FlowSchemaSpec.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowSchemaSpec proto.InternalMessageInfo - -func (m *FlowSchemaStatus) Reset() { *m = FlowSchemaStatus{} } -func (*FlowSchemaStatus) ProtoMessage() {} -func (*FlowSchemaStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{6} -} -func (m *FlowSchemaStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FlowSchemaStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FlowSchemaStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_FlowSchemaStatus.Merge(m, src) -} -func (m *FlowSchemaStatus) XXX_Size() int { - return m.Size() -} -func (m *FlowSchemaStatus) XXX_DiscardUnknown() { - xxx_messageInfo_FlowSchemaStatus.DiscardUnknown(m) -} - -var xxx_messageInfo_FlowSchemaStatus proto.InternalMessageInfo - -func (m *GroupSubject) Reset() { *m = GroupSubject{} } -func (*GroupSubject) ProtoMessage() {} -func (*GroupSubject) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{7} -} -func (m *GroupSubject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GroupSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *GroupSubject) XXX_Merge(src proto.Message) { - xxx_messageInfo_GroupSubject.Merge(m, src) -} -func (m *GroupSubject) XXX_Size() int { - return m.Size() -} -func (m *GroupSubject) XXX_DiscardUnknown() { - xxx_messageInfo_GroupSubject.DiscardUnknown(m) -} - -var xxx_messageInfo_GroupSubject proto.InternalMessageInfo - -func (m *LimitResponse) Reset() { *m = LimitResponse{} } -func (*LimitResponse) ProtoMessage() {} -func (*LimitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{8} -} -func (m *LimitResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LimitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *LimitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_LimitResponse.Merge(m, src) -} -func (m *LimitResponse) XXX_Size() int { - return m.Size() -} -func (m *LimitResponse) XXX_DiscardUnknown() { - xxx_messageInfo_LimitResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_LimitResponse proto.InternalMessageInfo - -func (m *LimitedPriorityLevelConfiguration) Reset() { *m = LimitedPriorityLevelConfiguration{} } -func (*LimitedPriorityLevelConfiguration) ProtoMessage() {} -func (*LimitedPriorityLevelConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{9} -} -func (m *LimitedPriorityLevelConfiguration) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LimitedPriorityLevelConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *LimitedPriorityLevelConfiguration) XXX_Merge(src proto.Message) { - xxx_messageInfo_LimitedPriorityLevelConfiguration.Merge(m, src) -} -func (m *LimitedPriorityLevelConfiguration) XXX_Size() int { - return m.Size() -} -func (m *LimitedPriorityLevelConfiguration) XXX_DiscardUnknown() { - xxx_messageInfo_LimitedPriorityLevelConfiguration.DiscardUnknown(m) -} - -var xxx_messageInfo_LimitedPriorityLevelConfiguration proto.InternalMessageInfo - -func (m *NonResourcePolicyRule) Reset() { *m = NonResourcePolicyRule{} } -func (*NonResourcePolicyRule) ProtoMessage() {} -func (*NonResourcePolicyRule) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{10} -} -func (m *NonResourcePolicyRule) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NonResourcePolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *NonResourcePolicyRule) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonResourcePolicyRule.Merge(m, src) -} -func (m *NonResourcePolicyRule) XXX_Size() int { - return m.Size() -} -func (m *NonResourcePolicyRule) XXX_DiscardUnknown() { - xxx_messageInfo_NonResourcePolicyRule.DiscardUnknown(m) -} - -var xxx_messageInfo_NonResourcePolicyRule proto.InternalMessageInfo - -func (m *PolicyRulesWithSubjects) Reset() { *m = PolicyRulesWithSubjects{} } -func (*PolicyRulesWithSubjects) ProtoMessage() {} -func (*PolicyRulesWithSubjects) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{11} -} -func (m *PolicyRulesWithSubjects) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PolicyRulesWithSubjects) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PolicyRulesWithSubjects) XXX_Merge(src proto.Message) { - xxx_messageInfo_PolicyRulesWithSubjects.Merge(m, src) -} -func (m *PolicyRulesWithSubjects) XXX_Size() int { - return m.Size() -} -func (m *PolicyRulesWithSubjects) XXX_DiscardUnknown() { - xxx_messageInfo_PolicyRulesWithSubjects.DiscardUnknown(m) -} - -var xxx_messageInfo_PolicyRulesWithSubjects proto.InternalMessageInfo - -func (m *PriorityLevelConfiguration) Reset() { *m = PriorityLevelConfiguration{} } -func (*PriorityLevelConfiguration) ProtoMessage() {} -func (*PriorityLevelConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{12} -} -func (m *PriorityLevelConfiguration) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfiguration) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfiguration.Merge(m, src) -} -func (m *PriorityLevelConfiguration) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfiguration) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfiguration.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfiguration proto.InternalMessageInfo - -func (m *PriorityLevelConfigurationCondition) Reset() { *m = PriorityLevelConfigurationCondition{} } -func (*PriorityLevelConfigurationCondition) ProtoMessage() {} -func (*PriorityLevelConfigurationCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{13} -} -func (m *PriorityLevelConfigurationCondition) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfigurationCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfigurationCondition) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfigurationCondition.Merge(m, src) -} -func (m *PriorityLevelConfigurationCondition) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfigurationCondition) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfigurationCondition.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfigurationCondition proto.InternalMessageInfo - -func (m *PriorityLevelConfigurationList) Reset() { *m = PriorityLevelConfigurationList{} } -func (*PriorityLevelConfigurationList) ProtoMessage() {} -func (*PriorityLevelConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{14} -} -func (m *PriorityLevelConfigurationList) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfigurationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfigurationList) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfigurationList.Merge(m, src) -} -func (m *PriorityLevelConfigurationList) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfigurationList) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfigurationList.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfigurationList proto.InternalMessageInfo - -func (m *PriorityLevelConfigurationReference) Reset() { *m = PriorityLevelConfigurationReference{} } -func (*PriorityLevelConfigurationReference) ProtoMessage() {} -func (*PriorityLevelConfigurationReference) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{15} -} -func (m *PriorityLevelConfigurationReference) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfigurationReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfigurationReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfigurationReference.Merge(m, src) -} -func (m *PriorityLevelConfigurationReference) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfigurationReference) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfigurationReference.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfigurationReference proto.InternalMessageInfo - -func (m *PriorityLevelConfigurationSpec) Reset() { *m = PriorityLevelConfigurationSpec{} } -func (*PriorityLevelConfigurationSpec) ProtoMessage() {} -func (*PriorityLevelConfigurationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{16} -} -func (m *PriorityLevelConfigurationSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfigurationSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfigurationSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfigurationSpec.Merge(m, src) -} -func (m *PriorityLevelConfigurationSpec) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfigurationSpec) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfigurationSpec.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfigurationSpec proto.InternalMessageInfo - -func (m *PriorityLevelConfigurationStatus) Reset() { *m = PriorityLevelConfigurationStatus{} } -func (*PriorityLevelConfigurationStatus) ProtoMessage() {} -func (*PriorityLevelConfigurationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{17} -} -func (m *PriorityLevelConfigurationStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PriorityLevelConfigurationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PriorityLevelConfigurationStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_PriorityLevelConfigurationStatus.Merge(m, src) -} -func (m *PriorityLevelConfigurationStatus) XXX_Size() int { - return m.Size() -} -func (m *PriorityLevelConfigurationStatus) XXX_DiscardUnknown() { - xxx_messageInfo_PriorityLevelConfigurationStatus.DiscardUnknown(m) -} - -var xxx_messageInfo_PriorityLevelConfigurationStatus proto.InternalMessageInfo - -func (m *QueuingConfiguration) Reset() { *m = QueuingConfiguration{} } -func (*QueuingConfiguration) ProtoMessage() {} -func (*QueuingConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{18} -} -func (m *QueuingConfiguration) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueuingConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *QueuingConfiguration) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueuingConfiguration.Merge(m, src) -} -func (m *QueuingConfiguration) XXX_Size() int { - return m.Size() -} -func (m *QueuingConfiguration) XXX_DiscardUnknown() { - xxx_messageInfo_QueuingConfiguration.DiscardUnknown(m) -} - -var xxx_messageInfo_QueuingConfiguration proto.InternalMessageInfo - -func (m *ResourcePolicyRule) Reset() { *m = ResourcePolicyRule{} } -func (*ResourcePolicyRule) ProtoMessage() {} -func (*ResourcePolicyRule) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{19} -} -func (m *ResourcePolicyRule) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ResourcePolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ResourcePolicyRule) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourcePolicyRule.Merge(m, src) -} -func (m *ResourcePolicyRule) XXX_Size() int { - return m.Size() -} -func (m *ResourcePolicyRule) XXX_DiscardUnknown() { - xxx_messageInfo_ResourcePolicyRule.DiscardUnknown(m) -} - -var xxx_messageInfo_ResourcePolicyRule proto.InternalMessageInfo - -func (m *ServiceAccountSubject) Reset() { *m = ServiceAccountSubject{} } -func (*ServiceAccountSubject) ProtoMessage() {} -func (*ServiceAccountSubject) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{20} -} -func (m *ServiceAccountSubject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ServiceAccountSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ServiceAccountSubject) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceAccountSubject.Merge(m, src) -} -func (m *ServiceAccountSubject) XXX_Size() int { - return m.Size() -} -func (m *ServiceAccountSubject) XXX_DiscardUnknown() { - xxx_messageInfo_ServiceAccountSubject.DiscardUnknown(m) -} - -var xxx_messageInfo_ServiceAccountSubject proto.InternalMessageInfo - -func (m *Subject) Reset() { *m = Subject{} } -func (*Subject) ProtoMessage() {} -func (*Subject) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{21} -} -func (m *Subject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Subject) XXX_Merge(src proto.Message) { - xxx_messageInfo_Subject.Merge(m, src) -} -func (m *Subject) XXX_Size() int { - return m.Size() -} -func (m *Subject) XXX_DiscardUnknown() { - xxx_messageInfo_Subject.DiscardUnknown(m) -} - -var xxx_messageInfo_Subject proto.InternalMessageInfo - -func (m *UserSubject) Reset() { *m = UserSubject{} } -func (*UserSubject) ProtoMessage() {} -func (*UserSubject) Descriptor() ([]byte, []int) { - return fileDescriptor_45ba024d525b289b, []int{22} -} -func (m *UserSubject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UserSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *UserSubject) XXX_Merge(src proto.Message) { - xxx_messageInfo_UserSubject.Merge(m, src) -} -func (m *UserSubject) XXX_Size() int { - return m.Size() -} -func (m *UserSubject) XXX_DiscardUnknown() { - xxx_messageInfo_UserSubject.DiscardUnknown(m) -} - -var xxx_messageInfo_UserSubject proto.InternalMessageInfo - -func init() { - proto.RegisterType((*ExemptPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.ExemptPriorityLevelConfiguration") - proto.RegisterType((*FlowDistinguisherMethod)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowDistinguisherMethod") - proto.RegisterType((*FlowSchema)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchema") - proto.RegisterType((*FlowSchemaCondition)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaCondition") - proto.RegisterType((*FlowSchemaList)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaList") - proto.RegisterType((*FlowSchemaSpec)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaSpec") - proto.RegisterType((*FlowSchemaStatus)(nil), "k8s.io.api.flowcontrol.v1alpha1.FlowSchemaStatus") - proto.RegisterType((*GroupSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.GroupSubject") - proto.RegisterType((*LimitResponse)(nil), "k8s.io.api.flowcontrol.v1alpha1.LimitResponse") - proto.RegisterType((*LimitedPriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.LimitedPriorityLevelConfiguration") - proto.RegisterType((*NonResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1alpha1.NonResourcePolicyRule") - proto.RegisterType((*PolicyRulesWithSubjects)(nil), "k8s.io.api.flowcontrol.v1alpha1.PolicyRulesWithSubjects") - proto.RegisterType((*PriorityLevelConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfiguration") - proto.RegisterType((*PriorityLevelConfigurationCondition)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationCondition") - proto.RegisterType((*PriorityLevelConfigurationList)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationList") - proto.RegisterType((*PriorityLevelConfigurationReference)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationReference") - proto.RegisterType((*PriorityLevelConfigurationSpec)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationSpec") - proto.RegisterType((*PriorityLevelConfigurationStatus)(nil), "k8s.io.api.flowcontrol.v1alpha1.PriorityLevelConfigurationStatus") - proto.RegisterType((*QueuingConfiguration)(nil), "k8s.io.api.flowcontrol.v1alpha1.QueuingConfiguration") - proto.RegisterType((*ResourcePolicyRule)(nil), "k8s.io.api.flowcontrol.v1alpha1.ResourcePolicyRule") - proto.RegisterType((*ServiceAccountSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.ServiceAccountSubject") - proto.RegisterType((*Subject)(nil), "k8s.io.api.flowcontrol.v1alpha1.Subject") - proto.RegisterType((*UserSubject)(nil), "k8s.io.api.flowcontrol.v1alpha1.UserSubject") -} - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto", fileDescriptor_45ba024d525b289b) -} - -var fileDescriptor_45ba024d525b289b = []byte{ - // 1621 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4d, 0x6f, 0xdb, 0x46, - 0x1a, 0x36, 0x65, 0xc9, 0xb6, 0xc6, 0x9f, 0x19, 0xc7, 0xb0, 0xd6, 0x59, 0x48, 0x0e, 0x17, 0xd8, - 0x64, 0x37, 0x09, 0x15, 0x67, 0x93, 0x6c, 0x16, 0xc1, 0x22, 0x30, 0x93, 0x6c, 0xbe, 0x6c, 0xc7, - 0x1e, 0x27, 0xd9, 0x36, 0x48, 0x81, 0xd0, 0xd4, 0x58, 0x9a, 0x58, 0x22, 0xd9, 0x19, 0x52, 0x8e, - 0x8b, 0x1c, 0x0a, 0xf4, 0x0f, 0xf4, 0x07, 0xe4, 0xd8, 0x43, 0x6f, 0x05, 0x7a, 0xed, 0xa5, 0xc7, - 0xa0, 0xe8, 0x21, 0xc7, 0x9c, 0x84, 0x58, 0xbd, 0xf6, 0x07, 0xb4, 0x39, 0x14, 0xc5, 0x0c, 0x87, - 0xa4, 0x28, 0x89, 0xa2, 0x52, 0x03, 0x39, 0xf5, 0x66, 0xbe, 0x1f, 0xcf, 0x3b, 0xf3, 0xce, 0xfb, - 0xf1, 0xc8, 0xe0, 0xf6, 0xde, 0x15, 0xa6, 0x11, 0xbb, 0xbc, 0xe7, 0xed, 0x60, 0x6a, 0x61, 0x17, - 0xb3, 0x72, 0x13, 0x5b, 0x15, 0x9b, 0x96, 0xa5, 0xc2, 0x70, 0x48, 0x79, 0xb7, 0x6e, 0xef, 0x9b, - 0xb6, 0xe5, 0x52, 0xbb, 0x5e, 0x6e, 0xae, 0x18, 0x75, 0xa7, 0x66, 0xac, 0x94, 0xab, 0xd8, 0xc2, - 0xd4, 0x70, 0x71, 0x45, 0x73, 0xa8, 0xed, 0xda, 0xb0, 0xe4, 0x3b, 0x68, 0x86, 0x43, 0xb4, 0x0e, - 0x07, 0x2d, 0x70, 0x58, 0x3a, 0x57, 0x25, 0x6e, 0xcd, 0xdb, 0xd1, 0x4c, 0xbb, 0x51, 0xae, 0xda, - 0x55, 0xbb, 0x2c, 0xfc, 0x76, 0xbc, 0x5d, 0xf1, 0x25, 0x3e, 0xc4, 0x5f, 0x3e, 0xde, 0xd2, 0xc5, - 0xe8, 0x00, 0x0d, 0xc3, 0xac, 0x11, 0x0b, 0xd3, 0x83, 0xb2, 0xb3, 0x57, 0xe5, 0x02, 0x56, 0x6e, - 0x60, 0xd7, 0x28, 0x37, 0x7b, 0x4e, 0xb1, 0x54, 0x4e, 0xf2, 0xa2, 0x9e, 0xe5, 0x92, 0x06, 0xee, - 0x71, 0xb8, 0x9c, 0xe6, 0xc0, 0xcc, 0x1a, 0x6e, 0x18, 0xdd, 0x7e, 0xea, 0x77, 0x0a, 0x58, 0xbe, - 0xf9, 0x1c, 0x37, 0x1c, 0x77, 0x93, 0x12, 0x9b, 0x12, 0xf7, 0x60, 0x0d, 0x37, 0x71, 0xfd, 0xba, - 0x6d, 0xed, 0x92, 0xaa, 0x47, 0x0d, 0x97, 0xd8, 0x16, 0xfc, 0x08, 0x14, 0x2c, 0xbb, 0x41, 0x2c, - 0x83, 0xcb, 0x4d, 0x8f, 0x52, 0x6c, 0x99, 0x07, 0xdb, 0x35, 0x83, 0x62, 0x56, 0x50, 0x96, 0x95, - 0xd3, 0x39, 0xfd, 0xaf, 0xed, 0x56, 0xa9, 0xb0, 0x91, 0x60, 0x83, 0x12, 0xbd, 0xe1, 0x7f, 0xc1, - 0x6c, 0x1d, 0x5b, 0x15, 0x63, 0xa7, 0x8e, 0x37, 0x31, 0x35, 0xb1, 0xe5, 0x16, 0x32, 0x02, 0x70, - 0xbe, 0xdd, 0x2a, 0xcd, 0xae, 0xc5, 0x55, 0xa8, 0xdb, 0x56, 0x7d, 0x0c, 0x16, 0xff, 0x57, 0xb7, - 0xf7, 0x6f, 0x10, 0xe6, 0x12, 0xab, 0xea, 0x11, 0x56, 0xc3, 0x74, 0x1d, 0xbb, 0x35, 0xbb, 0x02, - 0xaf, 0x81, 0xac, 0x7b, 0xe0, 0x60, 0x71, 0xbe, 0xbc, 0x7e, 0xe6, 0x55, 0xab, 0x34, 0xd2, 0x6e, - 0x95, 0xb2, 0x0f, 0x0e, 0x1c, 0xfc, 0xae, 0x55, 0x3a, 0x91, 0xe0, 0xc6, 0xd5, 0x48, 0x38, 0xaa, - 0x2f, 0x33, 0x00, 0x70, 0xab, 0x6d, 0x91, 0x38, 0xf8, 0x14, 0x4c, 0xf0, 0xc7, 0xaa, 0x18, 0xae, - 0x21, 0x30, 0x27, 0x2f, 0x9c, 0xd7, 0xa2, 0x52, 0x09, 0x73, 0xae, 0x39, 0x7b, 0x55, 0x2e, 0x60, - 0x1a, 0xb7, 0xd6, 0x9a, 0x2b, 0xda, 0xfd, 0x9d, 0x67, 0xd8, 0x74, 0xd7, 0xb1, 0x6b, 0xe8, 0x50, - 0x9e, 0x02, 0x44, 0x32, 0x14, 0xa2, 0xc2, 0x2d, 0x90, 0x65, 0x0e, 0x36, 0x45, 0x02, 0x26, 0x2f, - 0x94, 0xb5, 0x94, 0x42, 0xd4, 0xa2, 0xc3, 0x6d, 0x3b, 0xd8, 0xd4, 0xa7, 0x82, 0x2b, 0xf2, 0x2f, - 0x24, 0xa0, 0xe0, 0xc7, 0x60, 0x8c, 0xb9, 0x86, 0xeb, 0xb1, 0xc2, 0xa8, 0x00, 0x5d, 0x79, 0x1f, - 0x50, 0xe1, 0xa8, 0xcf, 0x48, 0xd8, 0x31, 0xff, 0x1b, 0x49, 0x40, 0xf5, 0x4d, 0x06, 0xcc, 0x47, - 0xc6, 0xd7, 0x6d, 0xab, 0x42, 0x44, 0xad, 0x5c, 0x8d, 0xe5, 0xfd, 0x54, 0x57, 0xde, 0x17, 0xfb, - 0xb8, 0x44, 0x39, 0x87, 0xff, 0x09, 0xcf, 0x9b, 0x11, 0xee, 0x27, 0xe3, 0xc1, 0xdf, 0xb5, 0x4a, - 0xb3, 0xa1, 0x5b, 0xfc, 0x3c, 0xb0, 0x09, 0x60, 0xdd, 0x60, 0xee, 0x03, 0x6a, 0x58, 0xcc, 0x87, - 0x25, 0x0d, 0x2c, 0xaf, 0xfd, 0xcf, 0xe1, 0x5e, 0x8a, 0x7b, 0xe8, 0x4b, 0x32, 0x24, 0x5c, 0xeb, - 0x41, 0x43, 0x7d, 0x22, 0xc0, 0xbf, 0x83, 0x31, 0x8a, 0x0d, 0x66, 0x5b, 0x85, 0xac, 0x38, 0x72, - 0x98, 0x2f, 0x24, 0xa4, 0x48, 0x6a, 0xe1, 0x3f, 0xc0, 0x78, 0x03, 0x33, 0x66, 0x54, 0x71, 0x21, - 0x27, 0x0c, 0x67, 0xa5, 0xe1, 0xf8, 0xba, 0x2f, 0x46, 0x81, 0x5e, 0xfd, 0x5e, 0x01, 0x33, 0x51, - 0x9e, 0xd6, 0x08, 0x73, 0xe1, 0x93, 0x9e, 0xea, 0xd3, 0x86, 0xbb, 0x13, 0xf7, 0x16, 0xb5, 0x37, - 0x27, 0xc3, 0x4d, 0x04, 0x92, 0x8e, 0xca, 0xdb, 0x04, 0x39, 0xe2, 0xe2, 0x06, 0xcf, 0xfa, 0xe8, - 0xe9, 0xc9, 0x0b, 0x67, 0xde, 0xa3, 0x4a, 0xf4, 0x69, 0x89, 0x9b, 0xbb, 0xc3, 0x11, 0x90, 0x0f, - 0xa4, 0xfe, 0x3c, 0xda, 0x79, 0x05, 0x5e, 0x91, 0xf0, 0x6b, 0x05, 0x2c, 0x39, 0x89, 0x33, 0x46, - 0xde, 0xea, 0x46, 0x6a, 0xe8, 0xe4, 0x31, 0x85, 0xf0, 0x2e, 0xe6, 0xb3, 0x05, 0xeb, 0xaa, 0x3c, - 0xd3, 0xd2, 0x00, 0xe3, 0x01, 0x67, 0x81, 0x77, 0x01, 0x6c, 0x18, 0x2e, 0xcf, 0x69, 0x75, 0x93, - 0x62, 0x13, 0x57, 0x38, 0xaa, 0x1c, 0x4c, 0x61, 0x7d, 0xac, 0xf7, 0x58, 0xa0, 0x3e, 0x5e, 0xf0, - 0x0b, 0x05, 0xcc, 0x57, 0x7a, 0x07, 0x8d, 0xac, 0xcc, 0x2b, 0x43, 0xa5, 0xba, 0xcf, 0xa0, 0xd2, - 0x17, 0xdb, 0xad, 0xd2, 0x7c, 0x1f, 0x05, 0xea, 0x17, 0x0d, 0x7e, 0x02, 0x72, 0xd4, 0xab, 0x63, - 0x56, 0xc8, 0x8a, 0x17, 0x4e, 0x0f, 0xbb, 0x69, 0xd7, 0x89, 0x79, 0x80, 0xb8, 0xcf, 0xff, 0x89, - 0x5b, 0xdb, 0xf6, 0xc4, 0xc4, 0x62, 0xd1, 0x73, 0x0b, 0x15, 0xf2, 0x51, 0xd5, 0x17, 0x60, 0xae, - 0x7b, 0x70, 0xc0, 0x1a, 0x00, 0x66, 0xd0, 0xab, 0x7c, 0x4d, 0xf0, 0xb8, 0x17, 0xdf, 0xa3, 0xb2, - 0xc2, 0x46, 0x8f, 0xc6, 0x66, 0x28, 0x62, 0xa8, 0x03, 0x5b, 0x3d, 0x0f, 0xa6, 0x6e, 0x51, 0xdb, - 0x73, 0xe4, 0x21, 0xe1, 0x32, 0xc8, 0x5a, 0x46, 0x23, 0x18, 0x41, 0xe1, 0x5c, 0xdc, 0x30, 0x1a, - 0x18, 0x09, 0x8d, 0xfa, 0x95, 0x02, 0xa6, 0xd7, 0x48, 0x83, 0xb8, 0x08, 0x33, 0xc7, 0xb6, 0x18, - 0x86, 0x97, 0x62, 0x63, 0xeb, 0x64, 0xd7, 0xd8, 0x3a, 0x16, 0x33, 0xee, 0x18, 0x58, 0x4f, 0xc0, - 0xf8, 0xa7, 0x1e, 0xf6, 0x88, 0x55, 0x95, 0x63, 0xfb, 0x52, 0xea, 0x0d, 0xb7, 0x7c, 0xfb, 0x58, - 0xc5, 0xe9, 0x93, 0x7c, 0x10, 0x48, 0x0d, 0x0a, 0x20, 0xd5, 0xdf, 0x32, 0xe0, 0xa4, 0x88, 0x8c, - 0x2b, 0x03, 0xb6, 0xf3, 0x13, 0x50, 0x30, 0x18, 0xf3, 0x28, 0xae, 0x24, 0x6d, 0xe7, 0x65, 0x79, - 0x9d, 0xc2, 0x6a, 0x82, 0x1d, 0x4a, 0x44, 0x80, 0x7b, 0x60, 0xba, 0xde, 0x79, 0x79, 0x79, 0x4f, - 0x2d, 0xf5, 0x9e, 0xb1, 0x94, 0xe9, 0x0b, 0xf2, 0x08, 0xf1, 0xb4, 0xa3, 0x38, 0x76, 0x3f, 0x3a, - 0x30, 0x3a, 0x3c, 0x1d, 0x80, 0xf7, 0xc1, 0xc2, 0x8e, 0x4d, 0xa9, 0xbd, 0x4f, 0xac, 0xaa, 0x88, - 0x13, 0x80, 0x64, 0x05, 0xc8, 0x5f, 0xda, 0xad, 0xd2, 0x82, 0xde, 0xcf, 0x00, 0xf5, 0xf7, 0x53, - 0xf7, 0xc1, 0xc2, 0x06, 0x1f, 0x2c, 0xcc, 0xf6, 0xa8, 0x89, 0xa3, 0x9e, 0x80, 0x25, 0x90, 0x6b, - 0x62, 0xba, 0xe3, 0xd7, 0x75, 0x5e, 0xcf, 0xf3, 0x8e, 0x78, 0xc4, 0x05, 0xc8, 0x97, 0xf3, 0x9b, - 0x58, 0x91, 0xe7, 0x43, 0xb4, 0xc6, 0x0a, 0x63, 0xc2, 0x54, 0xdc, 0x64, 0x23, 0xae, 0x42, 0xdd, - 0xb6, 0xea, 0x61, 0x06, 0x2c, 0x26, 0xb4, 0x20, 0x7c, 0x04, 0x26, 0x98, 0xfc, 0x5b, 0xb6, 0xd5, - 0xe9, 0xd4, 0xc7, 0x90, 0xce, 0xd1, 0x16, 0x08, 0xd0, 0x50, 0x88, 0x05, 0x1d, 0x30, 0x4d, 0xe5, - 0x19, 0x44, 0x50, 0xb9, 0x0d, 0xfe, 0x95, 0x0a, 0xde, 0x9b, 0x9f, 0xe8, 0xb9, 0x51, 0x27, 0x22, - 0x8a, 0x07, 0x80, 0x2f, 0xc0, 0x5c, 0xc7, 0xc5, 0xfd, 0xa0, 0xa3, 0x22, 0xe8, 0xe5, 0xd4, 0xa0, - 0x7d, 0xdf, 0x45, 0x2f, 0xc8, 0xb8, 0x73, 0x1b, 0x5d, 0xb8, 0xa8, 0x27, 0x92, 0xfa, 0x63, 0x06, - 0x0c, 0x58, 0x10, 0x1f, 0x80, 0xf0, 0x19, 0x31, 0xc2, 0x77, 0xed, 0x08, 0xab, 0x2f, 0x91, 0x00, - 0x92, 0x2e, 0x02, 0xb8, 0x7a, 0x94, 0x20, 0x83, 0x09, 0xe1, 0x2f, 0x19, 0xf0, 0xb7, 0x64, 0xe7, - 0x88, 0x20, 0xde, 0x8b, 0x4d, 0xda, 0x7f, 0x77, 0x4d, 0xda, 0x53, 0x43, 0x40, 0xfc, 0x49, 0x18, - 0xbb, 0x08, 0xe3, 0x5b, 0x05, 0x14, 0x93, 0xf3, 0xf6, 0x01, 0x08, 0xe4, 0xd3, 0x38, 0x81, 0xbc, - 0x7a, 0x84, 0x2a, 0x4b, 0x20, 0x94, 0xb7, 0x06, 0x15, 0x57, 0xc8, 0xfc, 0x86, 0x58, 0xfd, 0xdf, - 0x64, 0x06, 0xe5, 0x4a, 0x30, 0xd5, 0x94, 0x9f, 0x30, 0x31, 0xef, 0x9b, 0x16, 0x5f, 0x40, 0x0d, - 0xbe, 0x43, 0xfc, 0x8a, 0x24, 0x60, 0xbc, 0xee, 0xaf, 0x6c, 0xd9, 0xd7, 0xfa, 0x70, 0x9b, 0x72, - 0xd0, 0x8a, 0xf7, 0xe9, 0x81, 0x34, 0x43, 0x01, 0x3e, 0xc4, 0x60, 0x0c, 0x8b, 0x9f, 0xee, 0x43, - 0x37, 0x77, 0xda, 0x2f, 0x7d, 0x1d, 0xf0, 0x42, 0xf4, 0xad, 0x90, 0x04, 0x57, 0x5f, 0x2a, 0x60, - 0x39, 0x6d, 0x2a, 0xc0, 0xe7, 0x7d, 0xd8, 0xde, 0x51, 0xc8, 0xfc, 0xf0, 0xec, 0xef, 0x5b, 0x05, - 0x1c, 0xef, 0xc7, 0xa9, 0x78, 0xa3, 0x71, 0x22, 0x15, 0xb2, 0xa0, 0xb0, 0xd1, 0xb6, 0x84, 0x14, - 0x49, 0x2d, 0x3c, 0x0b, 0x26, 0x6a, 0x86, 0x55, 0xd9, 0x26, 0x9f, 0x05, 0x1c, 0x3f, 0x2c, 0xf5, - 0xdb, 0x52, 0x8e, 0x42, 0x0b, 0x78, 0x03, 0xcc, 0x09, 0xbf, 0x35, 0x6c, 0x55, 0xdd, 0x9a, 0x78, - 0x13, 0xc9, 0x51, 0xc2, 0xdd, 0xb3, 0xd5, 0xa5, 0x47, 0x3d, 0x1e, 0xea, 0xaf, 0x0a, 0x80, 0x7f, - 0x84, 0x56, 0x9c, 0x01, 0x79, 0xc3, 0x21, 0x82, 0xed, 0xfa, 0xcd, 0x96, 0xd7, 0xa7, 0xdb, 0xad, - 0x52, 0x7e, 0x75, 0xf3, 0x8e, 0x2f, 0x44, 0x91, 0x9e, 0x1b, 0x07, 0xfb, 0xd6, 0xdf, 0xab, 0xd2, - 0x38, 0x08, 0xcc, 0x50, 0xa4, 0x87, 0x57, 0xc0, 0x94, 0x59, 0xf7, 0x98, 0x8b, 0xe9, 0xb6, 0x69, - 0x3b, 0x58, 0x0c, 0xa7, 0x09, 0xfd, 0xb8, 0xbc, 0xd3, 0xd4, 0xf5, 0x0e, 0x1d, 0x8a, 0x59, 0x42, - 0x0d, 0x00, 0xde, 0x59, 0xcc, 0x31, 0x78, 0x9c, 0x9c, 0x88, 0x33, 0xc3, 0x1f, 0x6c, 0x23, 0x94, - 0xa2, 0x0e, 0x0b, 0xf5, 0x19, 0x58, 0xd8, 0xc6, 0xb4, 0x49, 0x4c, 0xbc, 0x6a, 0x9a, 0xb6, 0x67, - 0xb9, 0x01, 0x6f, 0x2f, 0x83, 0x7c, 0x68, 0x26, 0x9b, 0xef, 0x98, 0x8c, 0x9f, 0x0f, 0xb1, 0x50, - 0x64, 0x13, 0x76, 0x7b, 0x26, 0xb1, 0xdb, 0x7f, 0xc8, 0x80, 0xf1, 0x08, 0x3e, 0xbb, 0x47, 0xac, - 0x8a, 0x44, 0x3e, 0x11, 0x58, 0xdf, 0x23, 0x56, 0xe5, 0x5d, 0xab, 0x34, 0x29, 0xcd, 0xf8, 0x27, - 0x12, 0x86, 0xf0, 0x2e, 0xc8, 0x7a, 0x0c, 0x53, 0xd9, 0xc7, 0x67, 0x53, 0xab, 0xf9, 0x21, 0xc3, - 0x34, 0x20, 0x5a, 0x13, 0x1c, 0x9a, 0x0b, 0x90, 0xc0, 0x80, 0x1b, 0x20, 0x57, 0xe5, 0xaf, 0x22, - 0x5b, 0xf5, 0x5c, 0x2a, 0x58, 0xe7, 0x2f, 0x1a, 0xbf, 0x10, 0x84, 0x04, 0xf9, 0x30, 0x90, 0x82, - 0x19, 0x16, 0x4b, 0xa2, 0x78, 0xb0, 0x61, 0x88, 0x53, 0xdf, 0xdc, 0xeb, 0xb0, 0xdd, 0x2a, 0xcd, - 0xc4, 0x55, 0xa8, 0x2b, 0x82, 0x5a, 0x06, 0x93, 0x1d, 0x57, 0x4c, 0x9f, 0xb5, 0xfa, 0xcd, 0x57, - 0x87, 0xc5, 0x91, 0xd7, 0x87, 0xc5, 0x91, 0x37, 0x87, 0xc5, 0x91, 0xcf, 0xdb, 0x45, 0xe5, 0x55, - 0xbb, 0xa8, 0xbc, 0x6e, 0x17, 0x95, 0x37, 0xed, 0xa2, 0xf2, 0xb6, 0x5d, 0x54, 0xbe, 0xfc, 0xa9, - 0x38, 0xf2, 0xb8, 0x94, 0xf2, 0x2f, 0xda, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x6c, 0x4e, - 0x4e, 0xdd, 0x15, 0x00, 0x00, -} - -func (m *ExemptPriorityLevelConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ExemptPriorityLevelConfiguration) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ExemptPriorityLevelConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LendablePercent != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.LendablePercent)) - i-- - dAtA[i] = 0x10 - } - if m.NominalConcurrencyShares != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.NominalConcurrencyShares)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *FlowDistinguisherMethod) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowDistinguisherMethod) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowDistinguisherMethod) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *FlowSchema) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowSchema) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowSchema) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *FlowSchemaCondition) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowSchemaCondition) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowSchemaCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x2a - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i-- - dAtA[i] = 0x22 - { - size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - i -= len(m.Status) - copy(dAtA[i:], m.Status) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i-- - dAtA[i] = 0x12 - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *FlowSchemaList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowSchemaList) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowSchemaList) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *FlowSchemaSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowSchemaSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowSchemaSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Rules) > 0 { - for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if m.DistinguisherMethod != nil { - { - size, err := m.DistinguisherMethod.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - i = encodeVarintGenerated(dAtA, i, uint64(m.MatchingPrecedence)) - i-- - dAtA[i] = 0x10 - { - size, err := m.PriorityLevelConfiguration.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *FlowSchemaStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FlowSchemaStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FlowSchemaStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Conditions) > 0 { - for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *GroupSubject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GroupSubject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GroupSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *LimitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LimitResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LimitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Queuing != nil { - { - size, err := m.Queuing.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *LimitedPriorityLevelConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LimitedPriorityLevelConfiguration) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LimitedPriorityLevelConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.BorrowingLimitPercent != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.BorrowingLimitPercent)) - i-- - dAtA[i] = 0x20 - } - if m.LendablePercent != nil { - i = encodeVarintGenerated(dAtA, i, uint64(*m.LendablePercent)) - i-- - dAtA[i] = 0x18 - } - { - size, err := m.LimitResponse.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - i = encodeVarintGenerated(dAtA, i, uint64(m.AssuredConcurrencyShares)) - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - -func (m *NonResourcePolicyRule) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *NonResourcePolicyRule) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NonResourcePolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NonResourceURLs) > 0 { - for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NonResourceURLs[iNdEx]) - copy(dAtA[i:], m.NonResourceURLs[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) - i-- - dAtA[i] = 0x32 - } - } - if len(m.Verbs) > 0 { - for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Verbs[iNdEx]) - copy(dAtA[i:], m.Verbs[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *PolicyRulesWithSubjects) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PolicyRulesWithSubjects) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PolicyRulesWithSubjects) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NonResourceRules) > 0 { - for iNdEx := len(m.NonResourceRules) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.NonResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.ResourceRules) > 0 { - for iNdEx := len(m.ResourceRules) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.Subjects) > 0 { - for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfiguration) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfigurationCondition) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfigurationCondition) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfigurationCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x2a - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i-- - dAtA[i] = 0x22 - { - size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - i -= len(m.Status) - copy(dAtA[i:], m.Status) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i-- - dAtA[i] = 0x12 - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfigurationList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfigurationList) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfigurationReference) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfigurationReference) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfigurationReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfigurationSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfigurationSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfigurationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Exempt != nil { - { - size, err := m.Exempt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Limited != nil { - { - size, err := m.Limited.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PriorityLevelConfigurationStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PriorityLevelConfigurationStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PriorityLevelConfigurationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Conditions) > 0 { - for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueuingConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueuingConfiguration) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueuingConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i = encodeVarintGenerated(dAtA, i, uint64(m.QueueLengthLimit)) - i-- - dAtA[i] = 0x18 - i = encodeVarintGenerated(dAtA, i, uint64(m.HandSize)) - i-- - dAtA[i] = 0x10 - i = encodeVarintGenerated(dAtA, i, uint64(m.Queues)) - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - -func (m *ResourcePolicyRule) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResourcePolicyRule) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResourcePolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Namespaces) > 0 { - for iNdEx := len(m.Namespaces) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Namespaces[iNdEx]) - copy(dAtA[i:], m.Namespaces[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespaces[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - i-- - if m.ClusterScope { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - if len(m.Resources) > 0 { - for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Resources[iNdEx]) - copy(dAtA[i:], m.Resources[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.APIGroups) > 0 { - for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.APIGroups[iNdEx]) - copy(dAtA[i:], m.APIGroups[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Verbs) > 0 { - for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Verbs[iNdEx]) - copy(dAtA[i:], m.Verbs[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ServiceAccountSubject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ServiceAccountSubject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ServiceAccountSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x12 - i -= len(m.Namespace) - copy(dAtA[i:], m.Namespace) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Subject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Subject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Subject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ServiceAccount != nil { - { - size, err := m.ServiceAccount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Group != nil { - { - size, err := m.Group.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.User != nil { - { - size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *UserSubject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UserSubject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UserSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *ExemptPriorityLevelConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NominalConcurrencyShares != nil { - n += 1 + sovGenerated(uint64(*m.NominalConcurrencyShares)) - } - if m.LendablePercent != nil { - n += 1 + sovGenerated(uint64(*m.LendablePercent)) - } - return n -} - -func (m *FlowDistinguisherMethod) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *FlowSchema) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *FlowSchemaCondition) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *FlowSchemaList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *FlowSchemaSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.PriorityLevelConfiguration.Size() - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.MatchingPrecedence)) - if m.DistinguisherMethod != nil { - l = m.DistinguisherMethod.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.Rules) > 0 { - for _, e := range m.Rules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *FlowSchemaStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *GroupSubject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *LimitResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - if m.Queuing != nil { - l = m.Queuing.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *LimitedPriorityLevelConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovGenerated(uint64(m.AssuredConcurrencyShares)) - l = m.LimitResponse.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.LendablePercent != nil { - n += 1 + sovGenerated(uint64(*m.LendablePercent)) - } - if m.BorrowingLimitPercent != nil { - n += 1 + sovGenerated(uint64(*m.BorrowingLimitPercent)) - } - return n -} - -func (m *NonResourcePolicyRule) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PolicyRulesWithSubjects) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Subjects) > 0 { - for _, e := range m.Subjects { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.ResourceRules) > 0 { - for _, e := range m.ResourceRules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.NonResourceRules) > 0 { - for _, e := range m.NonResourceRules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PriorityLevelConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PriorityLevelConfigurationCondition) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PriorityLevelConfigurationList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PriorityLevelConfigurationReference) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PriorityLevelConfigurationSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - if m.Limited != nil { - l = m.Limited.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Exempt != nil { - l = m.Exempt.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *PriorityLevelConfigurationStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *QueuingConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Queues)) - n += 1 + sovGenerated(uint64(m.HandSize)) - n += 1 + sovGenerated(uint64(m.QueueLengthLimit)) - return n -} - -func (m *ResourcePolicyRule) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Resources) > 0 { - for _, s := range m.Resources { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - n += 2 - if len(m.Namespaces) > 0 { - for _, s := range m.Namespaces { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *ServiceAccountSubject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Namespace) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *Subject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - n += 1 + l + sovGenerated(uint64(l)) - if m.User != nil { - l = m.User.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Group != nil { - l = m.Group.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ServiceAccount != nil { - l = m.ServiceAccount.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *UserSubject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *ExemptPriorityLevelConfiguration) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ExemptPriorityLevelConfiguration{`, - `NominalConcurrencyShares:` + valueToStringGenerated(this.NominalConcurrencyShares) + `,`, - `LendablePercent:` + valueToStringGenerated(this.LendablePercent) + `,`, - `}`, - }, "") - return s -} -func (this *FlowDistinguisherMethod) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&FlowDistinguisherMethod{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `}`, - }, "") - return s -} -func (this *FlowSchema) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&FlowSchema{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "FlowSchemaSpec", "FlowSchemaSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "FlowSchemaStatus", "FlowSchemaStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *FlowSchemaCondition) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&FlowSchemaCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *FlowSchemaList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]FlowSchema{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "FlowSchema", "FlowSchema", 1), `&`, ``, 1) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&FlowSchemaList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s -} -func (this *FlowSchemaSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForRules := "[]PolicyRulesWithSubjects{" - for _, f := range this.Rules { - repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRulesWithSubjects", "PolicyRulesWithSubjects", 1), `&`, ``, 1) + "," - } - repeatedStringForRules += "}" - s := strings.Join([]string{`&FlowSchemaSpec{`, - `PriorityLevelConfiguration:` + strings.Replace(strings.Replace(this.PriorityLevelConfiguration.String(), "PriorityLevelConfigurationReference", "PriorityLevelConfigurationReference", 1), `&`, ``, 1) + `,`, - `MatchingPrecedence:` + fmt.Sprintf("%v", this.MatchingPrecedence) + `,`, - `DistinguisherMethod:` + strings.Replace(this.DistinguisherMethod.String(), "FlowDistinguisherMethod", "FlowDistinguisherMethod", 1) + `,`, - `Rules:` + repeatedStringForRules + `,`, - `}`, - }, "") - return s -} -func (this *FlowSchemaStatus) String() string { - if this == nil { - return "nil" - } - repeatedStringForConditions := "[]FlowSchemaCondition{" - for _, f := range this.Conditions { - repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "FlowSchemaCondition", "FlowSchemaCondition", 1), `&`, ``, 1) + "," - } - repeatedStringForConditions += "}" - s := strings.Join([]string{`&FlowSchemaStatus{`, - `Conditions:` + repeatedStringForConditions + `,`, - `}`, - }, "") - return s -} -func (this *GroupSubject) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GroupSubject{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *LimitResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LimitResponse{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Queuing:` + strings.Replace(this.Queuing.String(), "QueuingConfiguration", "QueuingConfiguration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LimitedPriorityLevelConfiguration) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LimitedPriorityLevelConfiguration{`, - `AssuredConcurrencyShares:` + fmt.Sprintf("%v", this.AssuredConcurrencyShares) + `,`, - `LimitResponse:` + strings.Replace(strings.Replace(this.LimitResponse.String(), "LimitResponse", "LimitResponse", 1), `&`, ``, 1) + `,`, - `LendablePercent:` + valueToStringGenerated(this.LendablePercent) + `,`, - `BorrowingLimitPercent:` + valueToStringGenerated(this.BorrowingLimitPercent) + `,`, - `}`, - }, "") - return s -} -func (this *NonResourcePolicyRule) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NonResourcePolicyRule{`, - `Verbs:` + fmt.Sprintf("%v", this.Verbs) + `,`, - `NonResourceURLs:` + fmt.Sprintf("%v", this.NonResourceURLs) + `,`, - `}`, - }, "") - return s -} -func (this *PolicyRulesWithSubjects) String() string { - if this == nil { - return "nil" - } - repeatedStringForSubjects := "[]Subject{" - for _, f := range this.Subjects { - repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," - } - repeatedStringForSubjects += "}" - repeatedStringForResourceRules := "[]ResourcePolicyRule{" - for _, f := range this.ResourceRules { - repeatedStringForResourceRules += strings.Replace(strings.Replace(f.String(), "ResourcePolicyRule", "ResourcePolicyRule", 1), `&`, ``, 1) + "," - } - repeatedStringForResourceRules += "}" - repeatedStringForNonResourceRules := "[]NonResourcePolicyRule{" - for _, f := range this.NonResourceRules { - repeatedStringForNonResourceRules += strings.Replace(strings.Replace(f.String(), "NonResourcePolicyRule", "NonResourcePolicyRule", 1), `&`, ``, 1) + "," - } - repeatedStringForNonResourceRules += "}" - s := strings.Join([]string{`&PolicyRulesWithSubjects{`, - `Subjects:` + repeatedStringForSubjects + `,`, - `ResourceRules:` + repeatedStringForResourceRules + `,`, - `NonResourceRules:` + repeatedStringForNonResourceRules + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfiguration) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PriorityLevelConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PriorityLevelConfigurationSpec", "PriorityLevelConfigurationSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PriorityLevelConfigurationStatus", "PriorityLevelConfigurationStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfigurationCondition) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PriorityLevelConfigurationCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfigurationList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]PriorityLevelConfiguration{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PriorityLevelConfiguration", "PriorityLevelConfiguration", 1), `&`, ``, 1) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&PriorityLevelConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfigurationReference) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PriorityLevelConfigurationReference{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfigurationSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PriorityLevelConfigurationSpec{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Limited:` + strings.Replace(this.Limited.String(), "LimitedPriorityLevelConfiguration", "LimitedPriorityLevelConfiguration", 1) + `,`, - `Exempt:` + strings.Replace(this.Exempt.String(), "ExemptPriorityLevelConfiguration", "ExemptPriorityLevelConfiguration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *PriorityLevelConfigurationStatus) String() string { - if this == nil { - return "nil" - } - repeatedStringForConditions := "[]PriorityLevelConfigurationCondition{" - for _, f := range this.Conditions { - repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "PriorityLevelConfigurationCondition", "PriorityLevelConfigurationCondition", 1), `&`, ``, 1) + "," - } - repeatedStringForConditions += "}" - s := strings.Join([]string{`&PriorityLevelConfigurationStatus{`, - `Conditions:` + repeatedStringForConditions + `,`, - `}`, - }, "") - return s -} -func (this *QueuingConfiguration) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&QueuingConfiguration{`, - `Queues:` + fmt.Sprintf("%v", this.Queues) + `,`, - `HandSize:` + fmt.Sprintf("%v", this.HandSize) + `,`, - `QueueLengthLimit:` + fmt.Sprintf("%v", this.QueueLengthLimit) + `,`, - `}`, - }, "") - return s -} -func (this *ResourcePolicyRule) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ResourcePolicyRule{`, - `Verbs:` + fmt.Sprintf("%v", this.Verbs) + `,`, - `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, - `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, - `ClusterScope:` + fmt.Sprintf("%v", this.ClusterScope) + `,`, - `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceAccountSubject) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ServiceAccountSubject{`, - `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *Subject) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Subject{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `User:` + strings.Replace(this.User.String(), "UserSubject", "UserSubject", 1) + `,`, - `Group:` + strings.Replace(this.Group.String(), "GroupSubject", "GroupSubject", 1) + `,`, - `ServiceAccount:` + strings.Replace(this.ServiceAccount.String(), "ServiceAccountSubject", "ServiceAccountSubject", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UserSubject) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UserSubject{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *ExemptPriorityLevelConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ExemptPriorityLevelConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExemptPriorityLevelConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NominalConcurrencyShares", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.NominalConcurrencyShares = &v - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LendablePercent", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.LendablePercent = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowDistinguisherMethod) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowDistinguisherMethod: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowDistinguisherMethod: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = FlowDistinguisherMethodType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowSchema) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowSchema: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowSchema: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowSchemaCondition) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowSchemaCondition: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowSchemaCondition: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = FlowSchemaConditionType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Status = ConditionStatus(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Reason = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowSchemaList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowSchemaList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowSchemaList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, FlowSchema{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowSchemaSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowSchemaSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowSchemaSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PriorityLevelConfiguration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.PriorityLevelConfiguration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchingPrecedence", wireType) - } - m.MatchingPrecedence = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MatchingPrecedence |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DistinguisherMethod", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DistinguisherMethod == nil { - m.DistinguisherMethod = &FlowDistinguisherMethod{} - } - if err := m.DistinguisherMethod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Rules = append(m.Rules, PolicyRulesWithSubjects{}) - if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FlowSchemaStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FlowSchemaStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FlowSchemaStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Conditions = append(m.Conditions, FlowSchemaCondition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GroupSubject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GroupSubject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GroupSubject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LimitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LimitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LimitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = LimitResponseType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Queuing", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Queuing == nil { - m.Queuing = &QueuingConfiguration{} - } - if err := m.Queuing.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LimitedPriorityLevelConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LimitedPriorityLevelConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LimitedPriorityLevelConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AssuredConcurrencyShares", wireType) - } - m.AssuredConcurrencyShares = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.AssuredConcurrencyShares |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitResponse", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.LimitResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LendablePercent", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.LendablePercent = &v - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BorrowingLimitPercent", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.BorrowingLimitPercent = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NonResourcePolicyRule) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: NonResourcePolicyRule: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NonResourcePolicyRule: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Verbs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Verbs = append(m.Verbs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NonResourceURLs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NonResourceURLs = append(m.NonResourceURLs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PolicyRulesWithSubjects) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PolicyRulesWithSubjects: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PolicyRulesWithSubjects: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subjects", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Subjects = append(m.Subjects, Subject{}) - if err := m.Subjects[len(m.Subjects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceRules", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceRules = append(m.ResourceRules, ResourcePolicyRule{}) - if err := m.ResourceRules[len(m.ResourceRules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NonResourceRules", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NonResourceRules = append(m.NonResourceRules, NonResourcePolicyRule{}) - if err := m.NonResourceRules[len(m.NonResourceRules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfigurationCondition) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfigurationCondition: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfigurationCondition: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = PriorityLevelConfigurationConditionType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Status = ConditionStatus(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Reason = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfigurationList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfigurationList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, PriorityLevelConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfigurationReference) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfigurationReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfigurationReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfigurationSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfigurationSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfigurationSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = PriorityLevelEnablement(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Limited", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Limited == nil { - m.Limited = &LimitedPriorityLevelConfiguration{} - } - if err := m.Limited.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Exempt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Exempt == nil { - m.Exempt = &ExemptPriorityLevelConfiguration{} - } - if err := m.Exempt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PriorityLevelConfigurationStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PriorityLevelConfigurationStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PriorityLevelConfigurationStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Conditions = append(m.Conditions, PriorityLevelConfigurationCondition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueuingConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueuingConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueuingConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Queues", wireType) - } - m.Queues = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Queues |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HandSize", wireType) - } - m.HandSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HandSize |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field QueueLengthLimit", wireType) - } - m.QueueLengthLimit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.QueueLengthLimit |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResourcePolicyRule) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResourcePolicyRule: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResourcePolicyRule: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Verbs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Verbs = append(m.Verbs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterScope", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ClusterScope = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Namespaces = append(m.Namespaces, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServiceAccountSubject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ServiceAccountSubject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceAccountSubject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Namespace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Subject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Subject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Subject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = SubjectKind(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.User == nil { - m.User = &UserSubject{} - } - if err := m.User.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Group == nil { - m.Group = &GroupSubject{} - } - if err := m.Group.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ServiceAccount == nil { - m.ServiceAccount = &ServiceAccountSubject{} - } - if err := m.ServiceAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UserSubject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UserSubject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UserSubject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenerated(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGenerated - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenerated - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") -) diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto deleted file mode 100644 index 6509386f26f7..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/generated.proto +++ /dev/null @@ -1,511 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - -// This file was autogenerated by go-to-protobuf. Do not edit it manually! - -syntax = "proto2"; - -package k8s.io.api.flowcontrol.v1alpha1; - -import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; - -// Package-wide variables from generator "generated". -option go_package = "k8s.io/api/flowcontrol/v1alpha1"; - -// ExemptPriorityLevelConfiguration describes the configurable aspects -// of the handling of exempt requests. -// In the mandatory exempt configuration object the values in the fields -// here can be modified by authorized users, unlike the rest of the `spec`. -message ExemptPriorityLevelConfiguration { - // `nominalConcurrencyShares` (NCS) contributes to the computation of the - // NominalConcurrencyLimit (NominalCL) of this level. - // This is the number of execution seats nominally reserved for this priority level. - // This DOES NOT limit the dispatching from this priority level - // but affects the other priority levels through the borrowing mechanism. - // The server's concurrency limit (ServerCL) is divided among all the - // priority levels in proportion to their NCS values: - // - // NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) - // sum_ncs = sum[priority level k] NCS(k) - // - // Bigger numbers mean a larger nominal concurrency limit, - // at the expense of every other priority level. - // This field has a default value of zero. - // +optional - optional int32 nominalConcurrencyShares = 1; - - // `lendablePercent` prescribes the fraction of the level's NominalCL that - // can be borrowed by other priority levels. This value of this - // field must be between 0 and 100, inclusive, and it defaults to 0. - // The number of seats that other levels can borrow from this level, known - // as this level's LendableConcurrencyLimit (LendableCL), is defined as follows. - // - // LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 ) - // - // +optional - optional int32 lendablePercent = 2; -} - -// FlowDistinguisherMethod specifies the method of a flow distinguisher. -message FlowDistinguisherMethod { - // `type` is the type of flow distinguisher method - // The supported types are "ByUser" and "ByNamespace". - // Required. - optional string type = 1; -} - -// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with -// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher". -message FlowSchema { - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // `spec` is the specification of the desired behavior of a FlowSchema. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional FlowSchemaSpec spec = 2; - - // `status` is the current status of a FlowSchema. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional FlowSchemaStatus status = 3; -} - -// FlowSchemaCondition describes conditions for a FlowSchema. -message FlowSchemaCondition { - // `type` is the type of the condition. - // Required. - optional string type = 1; - - // `status` is the status of the condition. - // Can be True, False, Unknown. - // Required. - optional string status = 2; - - // `lastTransitionTime` is the last time the condition transitioned from one status to another. - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; - - // `reason` is a unique, one-word, CamelCase reason for the condition's last transition. - optional string reason = 4; - - // `message` is a human-readable message indicating details about last transition. - optional string message = 5; -} - -// FlowSchemaList is a list of FlowSchema objects. -message FlowSchemaList { - // `metadata` is the standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // `items` is a list of FlowSchemas. - repeated FlowSchema items = 2; -} - -// FlowSchemaSpec describes how the FlowSchema's specification looks like. -message FlowSchemaSpec { - // `priorityLevelConfiguration` should reference a PriorityLevelConfiguration in the cluster. If the reference cannot - // be resolved, the FlowSchema will be ignored and marked as invalid in its status. - // Required. - optional PriorityLevelConfigurationReference priorityLevelConfiguration = 1; - - // `matchingPrecedence` is used to choose among the FlowSchemas that match a given request. The chosen - // FlowSchema is among those with the numerically lowest (which we take to be logically highest) - // MatchingPrecedence. Each MatchingPrecedence value must be ranged in [1,10000]. - // Note that if the precedence is not specified, it will be set to 1000 as default. - // +optional - optional int32 matchingPrecedence = 2; - - // `distinguisherMethod` defines how to compute the flow distinguisher for requests that match this schema. - // `nil` specifies that the distinguisher is disabled and thus will always be the empty string. - // +optional - optional FlowDistinguisherMethod distinguisherMethod = 3; - - // `rules` describes which requests will match this flow schema. This FlowSchema matches a request if and only if - // at least one member of rules matches the request. - // if it is an empty slice, there will be no requests matching the FlowSchema. - // +listType=atomic - // +optional - repeated PolicyRulesWithSubjects rules = 4; -} - -// FlowSchemaStatus represents the current state of a FlowSchema. -message FlowSchemaStatus { - // `conditions` is a list of the current states of FlowSchema. - // +listType=map - // +listMapKey=type - // +optional - repeated FlowSchemaCondition conditions = 1; -} - -// GroupSubject holds detailed information for group-kind subject. -message GroupSubject { - // name is the user group that matches, or "*" to match all user groups. - // See https://github.com/kubernetes/apiserver/blob/master/pkg/authentication/user/user.go for some - // well-known group names. - // Required. - optional string name = 1; -} - -// LimitResponse defines how to handle requests that can not be executed right now. -// +union -message LimitResponse { - // `type` is "Queue" or "Reject". - // "Queue" means that requests that can not be executed upon arrival - // are held in a queue until they can be executed or a queuing limit - // is reached. - // "Reject" means that requests that can not be executed upon arrival - // are rejected. - // Required. - // +unionDiscriminator - optional string type = 1; - - // `queuing` holds the configuration parameters for queuing. - // This field may be non-empty only if `type` is `"Queue"`. - // +optional - optional QueuingConfiguration queuing = 2; -} - -// LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. -// It addresses two issues: -// - How are requests for this priority level limited? -// - What should be done with requests that exceed the limit? -message LimitedPriorityLevelConfiguration { - // `assuredConcurrencyShares` (ACS) configures the execution - // limit, which is a limit on the number of requests of this - // priority level that may be exeucting at a given time. ACS must - // be a positive number. The server's concurrency limit (SCL) is - // divided among the concurrency-controlled priority levels in - // proportion to their assured concurrency shares. This produces - // the assured concurrency value (ACV) --- the number of requests - // that may be executing at a time --- for each such priority - // level: - // - // ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) ) - // - // bigger numbers of ACS mean more reserved concurrent requests (at the - // expense of every other PL). - // This field has a default value of 30. - // +optional - optional int32 assuredConcurrencyShares = 1; - - // `limitResponse` indicates what to do with requests that can not be executed right now - optional LimitResponse limitResponse = 2; - - // `lendablePercent` prescribes the fraction of the level's NominalCL that - // can be borrowed by other priority levels. The value of this - // field must be between 0 and 100, inclusive, and it defaults to 0. - // The number of seats that other levels can borrow from this level, known - // as this level's LendableConcurrencyLimit (LendableCL), is defined as follows. - // - // LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 ) - // - // +optional - optional int32 lendablePercent = 3; - - // `borrowingLimitPercent`, if present, configures a limit on how many - // seats this priority level can borrow from other priority levels. - // The limit is known as this level's BorrowingConcurrencyLimit - // (BorrowingCL) and is a limit on the total number of seats that this - // level may borrow at any one time. - // This field holds the ratio of that limit to the level's nominal - // concurrency limit. When this field is non-nil, it must hold a - // non-negative integer and the limit is calculated as follows. - // - // BorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 ) - // - // The value of this field can be more than 100, implying that this - // priority level can borrow a number of seats that is greater than - // its own nominal concurrency limit (NominalCL). - // When this field is left `nil`, the limit is effectively infinite. - // +optional - optional int32 borrowingLimitPercent = 4; -} - -// NonResourcePolicyRule is a predicate that matches non-resource requests according to their verb and the -// target non-resource URL. A NonResourcePolicyRule matches a request if and only if both (a) at least one member -// of verbs matches the request and (b) at least one member of nonResourceURLs matches the request. -message NonResourcePolicyRule { - // `verbs` is a list of matching verbs and may not be empty. - // "*" matches all verbs. If it is present, it must be the only entry. - // +listType=set - // Required. - repeated string verbs = 1; - - // `nonResourceURLs` is a set of url prefixes that a user should have access to and may not be empty. - // For example: - // - "/healthz" is legal - // - "/hea*" is illegal - // - "/hea" is legal but matches nothing - // - "/hea/*" also matches nothing - // - "/healthz/*" matches all per-component health checks. - // "*" matches all non-resource urls. if it is present, it must be the only entry. - // +listType=set - // Required. - repeated string nonResourceURLs = 6; -} - -// PolicyRulesWithSubjects prescribes a test that applies to a request to an apiserver. The test considers the subject -// making the request, the verb being requested, and the resource to be acted upon. This PolicyRulesWithSubjects matches -// a request if and only if both (a) at least one member of subjects matches the request and (b) at least one member -// of resourceRules or nonResourceRules matches the request. -message PolicyRulesWithSubjects { - // subjects is the list of normal user, serviceaccount, or group that this rule cares about. - // There must be at least one member in this slice. - // A slice that includes both the system:authenticated and system:unauthenticated user groups matches every request. - // +listType=atomic - // Required. - repeated Subject subjects = 1; - - // `resourceRules` is a slice of ResourcePolicyRules that identify matching requests according to their verb and the - // target resource. - // At least one of `resourceRules` and `nonResourceRules` has to be non-empty. - // +listType=atomic - // +optional - repeated ResourcePolicyRule resourceRules = 2; - - // `nonResourceRules` is a list of NonResourcePolicyRules that identify matching requests according to their verb - // and the target non-resource URL. - // +listType=atomic - // +optional - repeated NonResourcePolicyRule nonResourceRules = 3; -} - -// PriorityLevelConfiguration represents the configuration of a priority level. -message PriorityLevelConfiguration { - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // `spec` is the specification of the desired behavior of a "request-priority". - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional PriorityLevelConfigurationSpec spec = 2; - - // `status` is the current status of a "request-priority". - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - optional PriorityLevelConfigurationStatus status = 3; -} - -// PriorityLevelConfigurationCondition defines the condition of priority level. -message PriorityLevelConfigurationCondition { - // `type` is the type of the condition. - // Required. - optional string type = 1; - - // `status` is the status of the condition. - // Can be True, False, Unknown. - // Required. - optional string status = 2; - - // `lastTransitionTime` is the last time the condition transitioned from one status to another. - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; - - // `reason` is a unique, one-word, CamelCase reason for the condition's last transition. - optional string reason = 4; - - // `message` is a human-readable message indicating details about last transition. - optional string message = 5; -} - -// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects. -message PriorityLevelConfigurationList { - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // `items` is a list of request-priorities. - repeated PriorityLevelConfiguration items = 2; -} - -// PriorityLevelConfigurationReference contains information that points to the "request-priority" being used. -message PriorityLevelConfigurationReference { - // `name` is the name of the priority level configuration being referenced - // Required. - optional string name = 1; -} - -// PriorityLevelConfigurationSpec specifies the configuration of a priority level. -// +union -message PriorityLevelConfigurationSpec { - // `type` indicates whether this priority level is subject to - // limitation on request execution. A value of `"Exempt"` means - // that requests of this priority level are not subject to a limit - // (and thus are never queued) and do not detract from the - // capacity made available to other priority levels. A value of - // `"Limited"` means that (a) requests of this priority level - // _are_ subject to limits and (b) some of the server's limited - // capacity is made available exclusively to this priority level. - // Required. - // +unionDiscriminator - optional string type = 1; - - // `limited` specifies how requests are handled for a Limited priority level. - // This field must be non-empty if and only if `type` is `"Limited"`. - // +optional - optional LimitedPriorityLevelConfiguration limited = 2; - - // `exempt` specifies how requests are handled for an exempt priority level. - // This field MUST be empty if `type` is `"Limited"`. - // This field MAY be non-empty if `type` is `"Exempt"`. - // If empty and `type` is `"Exempt"` then the default values - // for `ExemptPriorityLevelConfiguration` apply. - // +optional - optional ExemptPriorityLevelConfiguration exempt = 3; -} - -// PriorityLevelConfigurationStatus represents the current state of a "request-priority". -message PriorityLevelConfigurationStatus { - // `conditions` is the current state of "request-priority". - // +listType=map - // +listMapKey=type - // +optional - repeated PriorityLevelConfigurationCondition conditions = 1; -} - -// QueuingConfiguration holds the configuration parameters for queuing -message QueuingConfiguration { - // `queues` is the number of queues for this priority level. The - // queues exist independently at each apiserver. The value must be - // positive. Setting it to 1 effectively precludes - // shufflesharding and thus makes the distinguisher method of - // associated flow schemas irrelevant. This field has a default - // value of 64. - // +optional - optional int32 queues = 1; - - // `handSize` is a small positive number that configures the - // shuffle sharding of requests into queues. When enqueuing a request - // at this priority level the request's flow identifier (a string - // pair) is hashed and the hash value is used to shuffle the list - // of queues and deal a hand of the size specified here. The - // request is put into one of the shortest queues in that hand. - // `handSize` must be no larger than `queues`, and should be - // significantly smaller (so that a few heavy flows do not - // saturate most of the queues). See the user-facing - // documentation for more extensive guidance on setting this - // field. This field has a default value of 8. - // +optional - optional int32 handSize = 2; - - // `queueLengthLimit` is the maximum number of requests allowed to - // be waiting in a given queue of this priority level at a time; - // excess requests are rejected. This value must be positive. If - // not specified, it will be defaulted to 50. - // +optional - optional int32 queueLengthLimit = 3; -} - -// ResourcePolicyRule is a predicate that matches some resource -// requests, testing the request's verb and the target resource. A -// ResourcePolicyRule matches a resource request if and only if: (a) -// at least one member of verbs matches the request, (b) at least one -// member of apiGroups matches the request, (c) at least one member of -// resources matches the request, and (d) either (d1) the request does -// not specify a namespace (i.e., `Namespace==""`) and clusterScope is -// true or (d2) the request specifies a namespace and least one member -// of namespaces matches the request's namespace. -message ResourcePolicyRule { - // `verbs` is a list of matching verbs and may not be empty. - // "*" matches all verbs and, if present, must be the only entry. - // +listType=set - // Required. - repeated string verbs = 1; - - // `apiGroups` is a list of matching API groups and may not be empty. - // "*" matches all API groups and, if present, must be the only entry. - // +listType=set - // Required. - repeated string apiGroups = 2; - - // `resources` is a list of matching resources (i.e., lowercase - // and plural) with, if desired, subresource. For example, [ - // "services", "nodes/status" ]. This list may not be empty. - // "*" matches all resources and, if present, must be the only entry. - // Required. - // +listType=set - repeated string resources = 3; - - // `clusterScope` indicates whether to match requests that do not - // specify a namespace (which happens either because the resource - // is not namespaced or the request targets all namespaces). - // If this field is omitted or false then the `namespaces` field - // must contain a non-empty list. - // +optional - optional bool clusterScope = 4; - - // `namespaces` is a list of target namespaces that restricts - // matches. A request that specifies a target namespace matches - // only if either (a) this list contains that target namespace or - // (b) this list contains "*". Note that "*" matches any - // specified namespace but does not match a request that _does - // not specify_ a namespace (see the `clusterScope` field for - // that). - // This list may be empty, but only if `clusterScope` is true. - // +optional - // +listType=set - repeated string namespaces = 5; -} - -// ServiceAccountSubject holds detailed information for service-account-kind subject. -message ServiceAccountSubject { - // `namespace` is the namespace of matching ServiceAccount objects. - // Required. - optional string namespace = 1; - - // `name` is the name of matching ServiceAccount objects, or "*" to match regardless of name. - // Required. - optional string name = 2; -} - -// Subject matches the originator of a request, as identified by the request authentication system. There are three -// ways of matching an originator; by user, group, or service account. -// +union -message Subject { - // `kind` indicates which one of the other fields is non-empty. - // Required - // +unionDiscriminator - optional string kind = 1; - - // `user` matches based on username. - // +optional - optional UserSubject user = 2; - - // `group` matches based on user group name. - // +optional - optional GroupSubject group = 3; - - // `serviceAccount` matches ServiceAccounts. - // +optional - optional ServiceAccountSubject serviceAccount = 4; -} - -// UserSubject holds detailed information for user-kind subject. -message UserSubject { - // `name` is the username that matches, or "*" to match all usernames. - // Required. - optional string name = 1; -} - diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go deleted file mode 100644 index 0c8a9cc5657b..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/register.go +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the name of api group -const GroupName = "flowcontrol.apiserver.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} - -// Kind takes an unqualified kind and returns a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return SchemeGroupVersion.WithKind(kind).GroupKind() -} - -// Resource takes an unqualified resource and returns a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return SchemeGroupVersion.WithResource(resource).GroupResource() -} - -var ( - // SchemeBuilder installs the api group to a scheme - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - // AddToScheme adds api to a scheme - AddToScheme = SchemeBuilder.AddToScheme -) - -// Adds the list of known types to the given scheme. -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(SchemeGroupVersion, - &FlowSchema{}, - &FlowSchemaList{}, - &PriorityLevelConfiguration{}, - &PriorityLevelConfigurationList{}, - ) - metav1.AddToGroupVersion(scheme, SchemeGroupVersion) - return nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go deleted file mode 100644 index 161411ff3380..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types.go +++ /dev/null @@ -1,621 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// These are valid wildcards. -const ( - APIGroupAll = "*" - ResourceAll = "*" - VerbAll = "*" - NonResourceAll = "*" - NameAll = "*" - - NamespaceEvery = "*" // matches every particular namespace -) - -// System preset priority level names -const ( - PriorityLevelConfigurationNameExempt = "exempt" - PriorityLevelConfigurationNameCatchAll = "catch-all" - FlowSchemaNameExempt = "exempt" - FlowSchemaNameCatchAll = "catch-all" -) - -// Conditions -const ( - FlowSchemaConditionDangling = "Dangling" - - PriorityLevelConfigurationConditionConcurrencyShared = "ConcurrencyShared" -) - -// Constants used by api validation. -const ( - FlowSchemaMaxMatchingPrecedence int32 = 10000 -) - -// Constants for apiserver response headers. -const ( - ResponseHeaderMatchedPriorityLevelConfigurationUID = "X-Kubernetes-PF-PriorityLevel-UID" - ResponseHeaderMatchedFlowSchemaUID = "X-Kubernetes-PF-FlowSchema-UID" -) - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.18 -// +k8s:prerelease-lifecycle-gen:deprecated=1.20 -// +k8s:prerelease-lifecycle-gen:removed=1.21 -// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,FlowSchema - -// FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with -// similar attributes and is identified by a pair of strings: the name of the FlowSchema and a "flow distinguisher". -type FlowSchema struct { - metav1.TypeMeta `json:",inline"` - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // `spec` is the specification of the desired behavior of a FlowSchema. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Spec FlowSchemaSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // `status` is the current status of a FlowSchema. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Status FlowSchemaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.18 -// +k8s:prerelease-lifecycle-gen:deprecated=1.20 -// +k8s:prerelease-lifecycle-gen:removed=1.21 -// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,FlowSchemaList - -// FlowSchemaList is a list of FlowSchema objects. -type FlowSchemaList struct { - metav1.TypeMeta `json:",inline"` - // `metadata` is the standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // `items` is a list of FlowSchemas. - Items []FlowSchema `json:"items" protobuf:"bytes,2,rep,name=items"` -} - -// FlowSchemaSpec describes how the FlowSchema's specification looks like. -type FlowSchemaSpec struct { - // `priorityLevelConfiguration` should reference a PriorityLevelConfiguration in the cluster. If the reference cannot - // be resolved, the FlowSchema will be ignored and marked as invalid in its status. - // Required. - PriorityLevelConfiguration PriorityLevelConfigurationReference `json:"priorityLevelConfiguration" protobuf:"bytes,1,opt,name=priorityLevelConfiguration"` - // `matchingPrecedence` is used to choose among the FlowSchemas that match a given request. The chosen - // FlowSchema is among those with the numerically lowest (which we take to be logically highest) - // MatchingPrecedence. Each MatchingPrecedence value must be ranged in [1,10000]. - // Note that if the precedence is not specified, it will be set to 1000 as default. - // +optional - MatchingPrecedence int32 `json:"matchingPrecedence" protobuf:"varint,2,opt,name=matchingPrecedence"` - // `distinguisherMethod` defines how to compute the flow distinguisher for requests that match this schema. - // `nil` specifies that the distinguisher is disabled and thus will always be the empty string. - // +optional - DistinguisherMethod *FlowDistinguisherMethod `json:"distinguisherMethod,omitempty" protobuf:"bytes,3,opt,name=distinguisherMethod"` - // `rules` describes which requests will match this flow schema. This FlowSchema matches a request if and only if - // at least one member of rules matches the request. - // if it is an empty slice, there will be no requests matching the FlowSchema. - // +listType=atomic - // +optional - Rules []PolicyRulesWithSubjects `json:"rules,omitempty" protobuf:"bytes,4,rep,name=rules"` -} - -// FlowDistinguisherMethodType is the type of flow distinguisher method -type FlowDistinguisherMethodType string - -// These are valid flow-distinguisher methods. -const ( - // FlowDistinguisherMethodByUserType specifies that the flow distinguisher is the username in the request. - // This type is used to provide some insulation between users. - FlowDistinguisherMethodByUserType FlowDistinguisherMethodType = "ByUser" - - // FlowDistinguisherMethodByNamespaceType specifies that the flow distinguisher is the namespace of the - // object that the request acts upon. If the object is not namespaced, or if the request is a non-resource - // request, then the distinguisher will be the empty string. An example usage of this type is to provide - // some insulation between tenants in a situation where there are multiple tenants and each namespace - // is dedicated to a tenant. - FlowDistinguisherMethodByNamespaceType FlowDistinguisherMethodType = "ByNamespace" -) - -// FlowDistinguisherMethod specifies the method of a flow distinguisher. -type FlowDistinguisherMethod struct { - // `type` is the type of flow distinguisher method - // The supported types are "ByUser" and "ByNamespace". - // Required. - Type FlowDistinguisherMethodType `json:"type" protobuf:"bytes,1,opt,name=type"` -} - -// PriorityLevelConfigurationReference contains information that points to the "request-priority" being used. -type PriorityLevelConfigurationReference struct { - // `name` is the name of the priority level configuration being referenced - // Required. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` -} - -// PolicyRulesWithSubjects prescribes a test that applies to a request to an apiserver. The test considers the subject -// making the request, the verb being requested, and the resource to be acted upon. This PolicyRulesWithSubjects matches -// a request if and only if both (a) at least one member of subjects matches the request and (b) at least one member -// of resourceRules or nonResourceRules matches the request. -type PolicyRulesWithSubjects struct { - // subjects is the list of normal user, serviceaccount, or group that this rule cares about. - // There must be at least one member in this slice. - // A slice that includes both the system:authenticated and system:unauthenticated user groups matches every request. - // +listType=atomic - // Required. - Subjects []Subject `json:"subjects" protobuf:"bytes,1,rep,name=subjects"` - // `resourceRules` is a slice of ResourcePolicyRules that identify matching requests according to their verb and the - // target resource. - // At least one of `resourceRules` and `nonResourceRules` has to be non-empty. - // +listType=atomic - // +optional - ResourceRules []ResourcePolicyRule `json:"resourceRules,omitempty" protobuf:"bytes,2,opt,name=resourceRules"` - // `nonResourceRules` is a list of NonResourcePolicyRules that identify matching requests according to their verb - // and the target non-resource URL. - // +listType=atomic - // +optional - NonResourceRules []NonResourcePolicyRule `json:"nonResourceRules,omitempty" protobuf:"bytes,3,opt,name=nonResourceRules"` -} - -// Subject matches the originator of a request, as identified by the request authentication system. There are three -// ways of matching an originator; by user, group, or service account. -// +union -type Subject struct { - // `kind` indicates which one of the other fields is non-empty. - // Required - // +unionDiscriminator - Kind SubjectKind `json:"kind" protobuf:"bytes,1,opt,name=kind"` - // `user` matches based on username. - // +optional - User *UserSubject `json:"user,omitempty" protobuf:"bytes,2,opt,name=user"` - // `group` matches based on user group name. - // +optional - Group *GroupSubject `json:"group,omitempty" protobuf:"bytes,3,opt,name=group"` - // `serviceAccount` matches ServiceAccounts. - // +optional - ServiceAccount *ServiceAccountSubject `json:"serviceAccount,omitempty" protobuf:"bytes,4,opt,name=serviceAccount"` -} - -// SubjectKind is the kind of subject. -type SubjectKind string - -// Supported subject's kinds. -const ( - SubjectKindUser SubjectKind = "User" - SubjectKindGroup SubjectKind = "Group" - SubjectKindServiceAccount SubjectKind = "ServiceAccount" -) - -// UserSubject holds detailed information for user-kind subject. -type UserSubject struct { - // `name` is the username that matches, or "*" to match all usernames. - // Required. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` -} - -// GroupSubject holds detailed information for group-kind subject. -type GroupSubject struct { - // name is the user group that matches, or "*" to match all user groups. - // See https://github.com/kubernetes/apiserver/blob/master/pkg/authentication/user/user.go for some - // well-known group names. - // Required. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` -} - -// ServiceAccountSubject holds detailed information for service-account-kind subject. -type ServiceAccountSubject struct { - // `namespace` is the namespace of matching ServiceAccount objects. - // Required. - Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` - // `name` is the name of matching ServiceAccount objects, or "*" to match regardless of name. - // Required. - Name string `json:"name" protobuf:"bytes,2,opt,name=name"` -} - -// ResourcePolicyRule is a predicate that matches some resource -// requests, testing the request's verb and the target resource. A -// ResourcePolicyRule matches a resource request if and only if: (a) -// at least one member of verbs matches the request, (b) at least one -// member of apiGroups matches the request, (c) at least one member of -// resources matches the request, and (d) either (d1) the request does -// not specify a namespace (i.e., `Namespace==""`) and clusterScope is -// true or (d2) the request specifies a namespace and least one member -// of namespaces matches the request's namespace. -type ResourcePolicyRule struct { - // `verbs` is a list of matching verbs and may not be empty. - // "*" matches all verbs and, if present, must be the only entry. - // +listType=set - // Required. - Verbs []string `json:"verbs" protobuf:"bytes,1,rep,name=verbs"` - - // `apiGroups` is a list of matching API groups and may not be empty. - // "*" matches all API groups and, if present, must be the only entry. - // +listType=set - // Required. - APIGroups []string `json:"apiGroups" protobuf:"bytes,2,rep,name=apiGroups"` - - // `resources` is a list of matching resources (i.e., lowercase - // and plural) with, if desired, subresource. For example, [ - // "services", "nodes/status" ]. This list may not be empty. - // "*" matches all resources and, if present, must be the only entry. - // Required. - // +listType=set - Resources []string `json:"resources" protobuf:"bytes,3,rep,name=resources"` - - // `clusterScope` indicates whether to match requests that do not - // specify a namespace (which happens either because the resource - // is not namespaced or the request targets all namespaces). - // If this field is omitted or false then the `namespaces` field - // must contain a non-empty list. - // +optional - ClusterScope bool `json:"clusterScope,omitempty" protobuf:"varint,4,opt,name=clusterScope"` - - // `namespaces` is a list of target namespaces that restricts - // matches. A request that specifies a target namespace matches - // only if either (a) this list contains that target namespace or - // (b) this list contains "*". Note that "*" matches any - // specified namespace but does not match a request that _does - // not specify_ a namespace (see the `clusterScope` field for - // that). - // This list may be empty, but only if `clusterScope` is true. - // +optional - // +listType=set - Namespaces []string `json:"namespaces" protobuf:"bytes,5,rep,name=namespaces"` -} - -// NonResourcePolicyRule is a predicate that matches non-resource requests according to their verb and the -// target non-resource URL. A NonResourcePolicyRule matches a request if and only if both (a) at least one member -// of verbs matches the request and (b) at least one member of nonResourceURLs matches the request. -type NonResourcePolicyRule struct { - // `verbs` is a list of matching verbs and may not be empty. - // "*" matches all verbs. If it is present, it must be the only entry. - // +listType=set - // Required. - Verbs []string `json:"verbs" protobuf:"bytes,1,rep,name=verbs"` - // `nonResourceURLs` is a set of url prefixes that a user should have access to and may not be empty. - // For example: - // - "/healthz" is legal - // - "/hea*" is illegal - // - "/hea" is legal but matches nothing - // - "/hea/*" also matches nothing - // - "/healthz/*" matches all per-component health checks. - // "*" matches all non-resource urls. if it is present, it must be the only entry. - // +listType=set - // Required. - NonResourceURLs []string `json:"nonResourceURLs" protobuf:"bytes,6,rep,name=nonResourceURLs"` -} - -// FlowSchemaStatus represents the current state of a FlowSchema. -type FlowSchemaStatus struct { - // `conditions` is a list of the current states of FlowSchema. - // +listType=map - // +listMapKey=type - // +optional - Conditions []FlowSchemaCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"` -} - -// FlowSchemaCondition describes conditions for a FlowSchema. -type FlowSchemaCondition struct { - // `type` is the type of the condition. - // Required. - Type FlowSchemaConditionType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"` - // `status` is the status of the condition. - // Can be True, False, Unknown. - // Required. - Status ConditionStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` - // `lastTransitionTime` is the last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` - // `reason` is a unique, one-word, CamelCase reason for the condition's last transition. - Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` - // `message` is a human-readable message indicating details about last transition. - Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` -} - -// FlowSchemaConditionType is a valid value for FlowSchemaStatusCondition.Type -type FlowSchemaConditionType string - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.18 -// +k8s:prerelease-lifecycle-gen:deprecated=1.20 -// +k8s:prerelease-lifecycle-gen:removed=1.21 -// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,PriorityLevelConfiguration - -// PriorityLevelConfiguration represents the configuration of a priority level. -type PriorityLevelConfiguration struct { - metav1.TypeMeta `json:",inline"` - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // `spec` is the specification of the desired behavior of a "request-priority". - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Spec PriorityLevelConfigurationSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // `status` is the current status of a "request-priority". - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status - // +optional - Status PriorityLevelConfigurationStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.18 -// +k8s:prerelease-lifecycle-gen:deprecated=1.20 -// +k8s:prerelease-lifecycle-gen:removed=1.21 -// +k8s:prerelease-lifecycle-gen:replacement=flowcontrol.apiserver.k8s.io,v1beta3,PriorityLevelConfigurationList - -// PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects. -type PriorityLevelConfigurationList struct { - metav1.TypeMeta `json:",inline"` - // `metadata` is the standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // `items` is a list of request-priorities. - Items []PriorityLevelConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` -} - -// PriorityLevelConfigurationSpec specifies the configuration of a priority level. -// +union -type PriorityLevelConfigurationSpec struct { - // `type` indicates whether this priority level is subject to - // limitation on request execution. A value of `"Exempt"` means - // that requests of this priority level are not subject to a limit - // (and thus are never queued) and do not detract from the - // capacity made available to other priority levels. A value of - // `"Limited"` means that (a) requests of this priority level - // _are_ subject to limits and (b) some of the server's limited - // capacity is made available exclusively to this priority level. - // Required. - // +unionDiscriminator - Type PriorityLevelEnablement `json:"type" protobuf:"bytes,1,opt,name=type"` - - // `limited` specifies how requests are handled for a Limited priority level. - // This field must be non-empty if and only if `type` is `"Limited"`. - // +optional - Limited *LimitedPriorityLevelConfiguration `json:"limited,omitempty" protobuf:"bytes,2,opt,name=limited"` - - // `exempt` specifies how requests are handled for an exempt priority level. - // This field MUST be empty if `type` is `"Limited"`. - // This field MAY be non-empty if `type` is `"Exempt"`. - // If empty and `type` is `"Exempt"` then the default values - // for `ExemptPriorityLevelConfiguration` apply. - // +optional - Exempt *ExemptPriorityLevelConfiguration `json:"exempt,omitempty" protobuf:"bytes,3,opt,name=exempt"` -} - -// PriorityLevelEnablement indicates whether limits on execution are enabled for the priority level -type PriorityLevelEnablement string - -// Supported priority level enablement values. -const ( - // PriorityLevelEnablementExempt means that requests are not subject to limits - PriorityLevelEnablementExempt PriorityLevelEnablement = "Exempt" - - // PriorityLevelEnablementLimited means that requests are subject to limits - PriorityLevelEnablementLimited PriorityLevelEnablement = "Limited" -) - -// LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. -// It addresses two issues: -// - How are requests for this priority level limited? -// - What should be done with requests that exceed the limit? -type LimitedPriorityLevelConfiguration struct { - // `assuredConcurrencyShares` (ACS) configures the execution - // limit, which is a limit on the number of requests of this - // priority level that may be exeucting at a given time. ACS must - // be a positive number. The server's concurrency limit (SCL) is - // divided among the concurrency-controlled priority levels in - // proportion to their assured concurrency shares. This produces - // the assured concurrency value (ACV) --- the number of requests - // that may be executing at a time --- for each such priority - // level: - // - // ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) ) - // - // bigger numbers of ACS mean more reserved concurrent requests (at the - // expense of every other PL). - // This field has a default value of 30. - // +optional - AssuredConcurrencyShares int32 `json:"assuredConcurrencyShares" protobuf:"varint,1,opt,name=assuredConcurrencyShares"` - - // `limitResponse` indicates what to do with requests that can not be executed right now - LimitResponse LimitResponse `json:"limitResponse,omitempty" protobuf:"bytes,2,opt,name=limitResponse"` - - // `lendablePercent` prescribes the fraction of the level's NominalCL that - // can be borrowed by other priority levels. The value of this - // field must be between 0 and 100, inclusive, and it defaults to 0. - // The number of seats that other levels can borrow from this level, known - // as this level's LendableConcurrencyLimit (LendableCL), is defined as follows. - // - // LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 ) - // - // +optional - LendablePercent *int32 `json:"lendablePercent,omitempty" protobuf:"varint,3,opt,name=lendablePercent"` - - // `borrowingLimitPercent`, if present, configures a limit on how many - // seats this priority level can borrow from other priority levels. - // The limit is known as this level's BorrowingConcurrencyLimit - // (BorrowingCL) and is a limit on the total number of seats that this - // level may borrow at any one time. - // This field holds the ratio of that limit to the level's nominal - // concurrency limit. When this field is non-nil, it must hold a - // non-negative integer and the limit is calculated as follows. - // - // BorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 ) - // - // The value of this field can be more than 100, implying that this - // priority level can borrow a number of seats that is greater than - // its own nominal concurrency limit (NominalCL). - // When this field is left `nil`, the limit is effectively infinite. - // +optional - BorrowingLimitPercent *int32 `json:"borrowingLimitPercent,omitempty" protobuf:"varint,4,opt,name=borrowingLimitPercent"` -} - -// ExemptPriorityLevelConfiguration describes the configurable aspects -// of the handling of exempt requests. -// In the mandatory exempt configuration object the values in the fields -// here can be modified by authorized users, unlike the rest of the `spec`. -type ExemptPriorityLevelConfiguration struct { - // `nominalConcurrencyShares` (NCS) contributes to the computation of the - // NominalConcurrencyLimit (NominalCL) of this level. - // This is the number of execution seats nominally reserved for this priority level. - // This DOES NOT limit the dispatching from this priority level - // but affects the other priority levels through the borrowing mechanism. - // The server's concurrency limit (ServerCL) is divided among all the - // priority levels in proportion to their NCS values: - // - // NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) - // sum_ncs = sum[priority level k] NCS(k) - // - // Bigger numbers mean a larger nominal concurrency limit, - // at the expense of every other priority level. - // This field has a default value of zero. - // +optional - NominalConcurrencyShares *int32 `json:"nominalConcurrencyShares,omitempty" protobuf:"varint,1,opt,name=nominalConcurrencyShares"` - // `lendablePercent` prescribes the fraction of the level's NominalCL that - // can be borrowed by other priority levels. This value of this - // field must be between 0 and 100, inclusive, and it defaults to 0. - // The number of seats that other levels can borrow from this level, known - // as this level's LendableConcurrencyLimit (LendableCL), is defined as follows. - // - // LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 ) - // - // +optional - LendablePercent *int32 `json:"lendablePercent,omitempty" protobuf:"varint,2,opt,name=lendablePercent"` - // The `BorrowingCL` of an Exempt priority level is implicitly `ServerCL`. - // In other words, an exempt priority level - // has no meaningful limit on how much it borrows. - // There is no explicit representation of that here. -} - -// LimitResponse defines how to handle requests that can not be executed right now. -// +union -type LimitResponse struct { - // `type` is "Queue" or "Reject". - // "Queue" means that requests that can not be executed upon arrival - // are held in a queue until they can be executed or a queuing limit - // is reached. - // "Reject" means that requests that can not be executed upon arrival - // are rejected. - // Required. - // +unionDiscriminator - Type LimitResponseType `json:"type" protobuf:"bytes,1,opt,name=type"` - - // `queuing` holds the configuration parameters for queuing. - // This field may be non-empty only if `type` is `"Queue"`. - // +optional - Queuing *QueuingConfiguration `json:"queuing,omitempty" protobuf:"bytes,2,opt,name=queuing"` -} - -// LimitResponseType identifies how a Limited priority level handles a request that can not be executed right now -type LimitResponseType string - -// Supported limit responses. -const ( - // LimitResponseTypeQueue means that requests that can not be executed right now are queued until they can be executed or a queuing limit is hit - LimitResponseTypeQueue LimitResponseType = "Queue" - - // LimitResponseTypeReject means that requests that can not be executed right now are rejected - LimitResponseTypeReject LimitResponseType = "Reject" -) - -// QueuingConfiguration holds the configuration parameters for queuing -type QueuingConfiguration struct { - // `queues` is the number of queues for this priority level. The - // queues exist independently at each apiserver. The value must be - // positive. Setting it to 1 effectively precludes - // shufflesharding and thus makes the distinguisher method of - // associated flow schemas irrelevant. This field has a default - // value of 64. - // +optional - Queues int32 `json:"queues" protobuf:"varint,1,opt,name=queues"` - - // `handSize` is a small positive number that configures the - // shuffle sharding of requests into queues. When enqueuing a request - // at this priority level the request's flow identifier (a string - // pair) is hashed and the hash value is used to shuffle the list - // of queues and deal a hand of the size specified here. The - // request is put into one of the shortest queues in that hand. - // `handSize` must be no larger than `queues`, and should be - // significantly smaller (so that a few heavy flows do not - // saturate most of the queues). See the user-facing - // documentation for more extensive guidance on setting this - // field. This field has a default value of 8. - // +optional - HandSize int32 `json:"handSize" protobuf:"varint,2,opt,name=handSize"` - - // `queueLengthLimit` is the maximum number of requests allowed to - // be waiting in a given queue of this priority level at a time; - // excess requests are rejected. This value must be positive. If - // not specified, it will be defaulted to 50. - // +optional - QueueLengthLimit int32 `json:"queueLengthLimit" protobuf:"varint,3,opt,name=queueLengthLimit"` -} - -// PriorityLevelConfigurationConditionType is a valid value for PriorityLevelConfigurationStatusCondition.Type -type PriorityLevelConfigurationConditionType string - -// PriorityLevelConfigurationStatus represents the current state of a "request-priority". -type PriorityLevelConfigurationStatus struct { - // `conditions` is the current state of "request-priority". - // +listType=map - // +listMapKey=type - // +optional - Conditions []PriorityLevelConfigurationCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"` -} - -// PriorityLevelConfigurationCondition defines the condition of priority level. -type PriorityLevelConfigurationCondition struct { - // `type` is the type of the condition. - // Required. - Type PriorityLevelConfigurationConditionType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"` - // `status` is the status of the condition. - // Can be True, False, Unknown. - // Required. - Status ConditionStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` - // `lastTransitionTime` is the last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` - // `reason` is a unique, one-word, CamelCase reason for the condition's last transition. - Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` - // `message` is a human-readable message indicating details about last transition. - Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` -} - -// ConditionStatus is the status of the condition. -type ConditionStatus string - -// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. -// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes -// can't decide if a resource is in the condition or not. In the future, we could add other -// intermediate conditions, e.g. ConditionDegraded. -const ( - ConditionTrue ConditionStatus = "True" - ConditionFalse ConditionStatus = "False" - ConditionUnknown ConditionStatus = "Unknown" -) diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go deleted file mode 100644 index 1d0680c10856..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/types_swagger_doc_generated.go +++ /dev/null @@ -1,274 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -// This file contains a collection of methods that can be used from go-restful to -// generate Swagger API documentation for its models. Please read this PR for more -// information on the implementation: https://github.com/emicklei/go-restful/pull/215 -// -// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if -// they are on one line! For multiple line or blocks that you want to ignore use ---. -// Any context after a --- is ignored. -// -// Those methods can be generated by using hack/update-codegen.sh - -// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_ExemptPriorityLevelConfiguration = map[string]string{ - "": "ExemptPriorityLevelConfiguration describes the configurable aspects of the handling of exempt requests. In the mandatory exempt configuration object the values in the fields here can be modified by authorized users, unlike the rest of the `spec`.", - "nominalConcurrencyShares": "`nominalConcurrencyShares` (NCS) contributes to the computation of the NominalConcurrencyLimit (NominalCL) of this level. This is the number of execution seats nominally reserved for this priority level. This DOES NOT limit the dispatching from this priority level but affects the other priority levels through the borrowing mechanism. The server's concurrency limit (ServerCL) is divided among all the priority levels in proportion to their NCS values:\n\nNominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[priority level k] NCS(k)\n\nBigger numbers mean a larger nominal concurrency limit, at the expense of every other priority level. This field has a default value of zero.", - "lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. This value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )", -} - -func (ExemptPriorityLevelConfiguration) SwaggerDoc() map[string]string { - return map_ExemptPriorityLevelConfiguration -} - -var map_FlowDistinguisherMethod = map[string]string{ - "": "FlowDistinguisherMethod specifies the method of a flow distinguisher.", - "type": "`type` is the type of flow distinguisher method The supported types are \"ByUser\" and \"ByNamespace\". Required.", -} - -func (FlowDistinguisherMethod) SwaggerDoc() map[string]string { - return map_FlowDistinguisherMethod -} - -var map_FlowSchema = map[string]string{ - "": "FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with similar attributes and is identified by a pair of strings: the name of the FlowSchema and a \"flow distinguisher\".", - "metadata": "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "spec": "`spec` is the specification of the desired behavior of a FlowSchema. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - "status": "`status` is the current status of a FlowSchema. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", -} - -func (FlowSchema) SwaggerDoc() map[string]string { - return map_FlowSchema -} - -var map_FlowSchemaCondition = map[string]string{ - "": "FlowSchemaCondition describes conditions for a FlowSchema.", - "type": "`type` is the type of the condition. Required.", - "status": "`status` is the status of the condition. Can be True, False, Unknown. Required.", - "lastTransitionTime": "`lastTransitionTime` is the last time the condition transitioned from one status to another.", - "reason": "`reason` is a unique, one-word, CamelCase reason for the condition's last transition.", - "message": "`message` is a human-readable message indicating details about last transition.", -} - -func (FlowSchemaCondition) SwaggerDoc() map[string]string { - return map_FlowSchemaCondition -} - -var map_FlowSchemaList = map[string]string{ - "": "FlowSchemaList is a list of FlowSchema objects.", - "metadata": "`metadata` is the standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "items": "`items` is a list of FlowSchemas.", -} - -func (FlowSchemaList) SwaggerDoc() map[string]string { - return map_FlowSchemaList -} - -var map_FlowSchemaSpec = map[string]string{ - "": "FlowSchemaSpec describes how the FlowSchema's specification looks like.", - "priorityLevelConfiguration": "`priorityLevelConfiguration` should reference a PriorityLevelConfiguration in the cluster. If the reference cannot be resolved, the FlowSchema will be ignored and marked as invalid in its status. Required.", - "matchingPrecedence": "`matchingPrecedence` is used to choose among the FlowSchemas that match a given request. The chosen FlowSchema is among those with the numerically lowest (which we take to be logically highest) MatchingPrecedence. Each MatchingPrecedence value must be ranged in [1,10000]. Note that if the precedence is not specified, it will be set to 1000 as default.", - "distinguisherMethod": "`distinguisherMethod` defines how to compute the flow distinguisher for requests that match this schema. `nil` specifies that the distinguisher is disabled and thus will always be the empty string.", - "rules": "`rules` describes which requests will match this flow schema. This FlowSchema matches a request if and only if at least one member of rules matches the request. if it is an empty slice, there will be no requests matching the FlowSchema.", -} - -func (FlowSchemaSpec) SwaggerDoc() map[string]string { - return map_FlowSchemaSpec -} - -var map_FlowSchemaStatus = map[string]string{ - "": "FlowSchemaStatus represents the current state of a FlowSchema.", - "conditions": "`conditions` is a list of the current states of FlowSchema.", -} - -func (FlowSchemaStatus) SwaggerDoc() map[string]string { - return map_FlowSchemaStatus -} - -var map_GroupSubject = map[string]string{ - "": "GroupSubject holds detailed information for group-kind subject.", - "name": "name is the user group that matches, or \"*\" to match all user groups. See https://github.com/kubernetes/apiserver/blob/master/pkg/authentication/user/user.go for some well-known group names. Required.", -} - -func (GroupSubject) SwaggerDoc() map[string]string { - return map_GroupSubject -} - -var map_LimitResponse = map[string]string{ - "": "LimitResponse defines how to handle requests that can not be executed right now.", - "type": "`type` is \"Queue\" or \"Reject\". \"Queue\" means that requests that can not be executed upon arrival are held in a queue until they can be executed or a queuing limit is reached. \"Reject\" means that requests that can not be executed upon arrival are rejected. Required.", - "queuing": "`queuing` holds the configuration parameters for queuing. This field may be non-empty only if `type` is `\"Queue\"`.", -} - -func (LimitResponse) SwaggerDoc() map[string]string { - return map_LimitResponse -} - -var map_LimitedPriorityLevelConfiguration = map[string]string{ - "": "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n - How are requests for this priority level limited?\n - What should be done with requests that exceed the limit?", - "assuredConcurrencyShares": "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) ", - "limitResponse": "`limitResponse` indicates what to do with requests that can not be executed right now", - "lendablePercent": "`lendablePercent` prescribes the fraction of the level's NominalCL that can be borrowed by other priority levels. The value of this field must be between 0 and 100, inclusive, and it defaults to 0. The number of seats that other levels can borrow from this level, known as this level's LendableConcurrencyLimit (LendableCL), is defined as follows.\n\nLendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )", - "borrowingLimitPercent": "`borrowingLimitPercent`, if present, configures a limit on how many seats this priority level can borrow from other priority levels. The limit is known as this level's BorrowingConcurrencyLimit (BorrowingCL) and is a limit on the total number of seats that this level may borrow at any one time. This field holds the ratio of that limit to the level's nominal concurrency limit. When this field is non-nil, it must hold a non-negative integer and the limit is calculated as follows.\n\nBorrowingCL(i) = round( NominalCL(i) * borrowingLimitPercent(i)/100.0 )\n\nThe value of this field can be more than 100, implying that this priority level can borrow a number of seats that is greater than its own nominal concurrency limit (NominalCL). When this field is left `nil`, the limit is effectively infinite.", -} - -func (LimitedPriorityLevelConfiguration) SwaggerDoc() map[string]string { - return map_LimitedPriorityLevelConfiguration -} - -var map_NonResourcePolicyRule = map[string]string{ - "": "NonResourcePolicyRule is a predicate that matches non-resource requests according to their verb and the target non-resource URL. A NonResourcePolicyRule matches a request if and only if both (a) at least one member of verbs matches the request and (b) at least one member of nonResourceURLs matches the request.", - "verbs": "`verbs` is a list of matching verbs and may not be empty. \"*\" matches all verbs. If it is present, it must be the only entry. Required.", - "nonResourceURLs": "`nonResourceURLs` is a set of url prefixes that a user should have access to and may not be empty. For example:\n - \"/healthz\" is legal\n - \"/hea*\" is illegal\n - \"/hea\" is legal but matches nothing\n - \"/hea/*\" also matches nothing\n - \"/healthz/*\" matches all per-component health checks.\n\"*\" matches all non-resource urls. if it is present, it must be the only entry. Required.", -} - -func (NonResourcePolicyRule) SwaggerDoc() map[string]string { - return map_NonResourcePolicyRule -} - -var map_PolicyRulesWithSubjects = map[string]string{ - "": "PolicyRulesWithSubjects prescribes a test that applies to a request to an apiserver. The test considers the subject making the request, the verb being requested, and the resource to be acted upon. This PolicyRulesWithSubjects matches a request if and only if both (a) at least one member of subjects matches the request and (b) at least one member of resourceRules or nonResourceRules matches the request.", - "subjects": "subjects is the list of normal user, serviceaccount, or group that this rule cares about. There must be at least one member in this slice. A slice that includes both the system:authenticated and system:unauthenticated user groups matches every request. Required.", - "resourceRules": "`resourceRules` is a slice of ResourcePolicyRules that identify matching requests according to their verb and the target resource. At least one of `resourceRules` and `nonResourceRules` has to be non-empty.", - "nonResourceRules": "`nonResourceRules` is a list of NonResourcePolicyRules that identify matching requests according to their verb and the target non-resource URL.", -} - -func (PolicyRulesWithSubjects) SwaggerDoc() map[string]string { - return map_PolicyRulesWithSubjects -} - -var map_PriorityLevelConfiguration = map[string]string{ - "": "PriorityLevelConfiguration represents the configuration of a priority level.", - "metadata": "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "spec": "`spec` is the specification of the desired behavior of a \"request-priority\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - "status": "`status` is the current status of a \"request-priority\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", -} - -func (PriorityLevelConfiguration) SwaggerDoc() map[string]string { - return map_PriorityLevelConfiguration -} - -var map_PriorityLevelConfigurationCondition = map[string]string{ - "": "PriorityLevelConfigurationCondition defines the condition of priority level.", - "type": "`type` is the type of the condition. Required.", - "status": "`status` is the status of the condition. Can be True, False, Unknown. Required.", - "lastTransitionTime": "`lastTransitionTime` is the last time the condition transitioned from one status to another.", - "reason": "`reason` is a unique, one-word, CamelCase reason for the condition's last transition.", - "message": "`message` is a human-readable message indicating details about last transition.", -} - -func (PriorityLevelConfigurationCondition) SwaggerDoc() map[string]string { - return map_PriorityLevelConfigurationCondition -} - -var map_PriorityLevelConfigurationList = map[string]string{ - "": "PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.", - "metadata": "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "items": "`items` is a list of request-priorities.", -} - -func (PriorityLevelConfigurationList) SwaggerDoc() map[string]string { - return map_PriorityLevelConfigurationList -} - -var map_PriorityLevelConfigurationReference = map[string]string{ - "": "PriorityLevelConfigurationReference contains information that points to the \"request-priority\" being used.", - "name": "`name` is the name of the priority level configuration being referenced Required.", -} - -func (PriorityLevelConfigurationReference) SwaggerDoc() map[string]string { - return map_PriorityLevelConfigurationReference -} - -var map_PriorityLevelConfigurationSpec = map[string]string{ - "": "PriorityLevelConfigurationSpec specifies the configuration of a priority level.", - "type": "`type` indicates whether this priority level is subject to limitation on request execution. A value of `\"Exempt\"` means that requests of this priority level are not subject to a limit (and thus are never queued) and do not detract from the capacity made available to other priority levels. A value of `\"Limited\"` means that (a) requests of this priority level _are_ subject to limits and (b) some of the server's limited capacity is made available exclusively to this priority level. Required.", - "limited": "`limited` specifies how requests are handled for a Limited priority level. This field must be non-empty if and only if `type` is `\"Limited\"`.", - "exempt": "`exempt` specifies how requests are handled for an exempt priority level. This field MUST be empty if `type` is `\"Limited\"`. This field MAY be non-empty if `type` is `\"Exempt\"`. If empty and `type` is `\"Exempt\"` then the default values for `ExemptPriorityLevelConfiguration` apply.", -} - -func (PriorityLevelConfigurationSpec) SwaggerDoc() map[string]string { - return map_PriorityLevelConfigurationSpec -} - -var map_PriorityLevelConfigurationStatus = map[string]string{ - "": "PriorityLevelConfigurationStatus represents the current state of a \"request-priority\".", - "conditions": "`conditions` is the current state of \"request-priority\".", -} - -func (PriorityLevelConfigurationStatus) SwaggerDoc() map[string]string { - return map_PriorityLevelConfigurationStatus -} - -var map_QueuingConfiguration = map[string]string{ - "": "QueuingConfiguration holds the configuration parameters for queuing", - "queues": "`queues` is the number of queues for this priority level. The queues exist independently at each apiserver. The value must be positive. Setting it to 1 effectively precludes shufflesharding and thus makes the distinguisher method of associated flow schemas irrelevant. This field has a default value of 64.", - "handSize": "`handSize` is a small positive number that configures the shuffle sharding of requests into queues. When enqueuing a request at this priority level the request's flow identifier (a string pair) is hashed and the hash value is used to shuffle the list of queues and deal a hand of the size specified here. The request is put into one of the shortest queues in that hand. `handSize` must be no larger than `queues`, and should be significantly smaller (so that a few heavy flows do not saturate most of the queues). See the user-facing documentation for more extensive guidance on setting this field. This field has a default value of 8.", - "queueLengthLimit": "`queueLengthLimit` is the maximum number of requests allowed to be waiting in a given queue of this priority level at a time; excess requests are rejected. This value must be positive. If not specified, it will be defaulted to 50.", -} - -func (QueuingConfiguration) SwaggerDoc() map[string]string { - return map_QueuingConfiguration -} - -var map_ResourcePolicyRule = map[string]string{ - "": "ResourcePolicyRule is a predicate that matches some resource requests, testing the request's verb and the target resource. A ResourcePolicyRule matches a resource request if and only if: (a) at least one member of verbs matches the request, (b) at least one member of apiGroups matches the request, (c) at least one member of resources matches the request, and (d) either (d1) the request does not specify a namespace (i.e., `Namespace==\"\"`) and clusterScope is true or (d2) the request specifies a namespace and least one member of namespaces matches the request's namespace.", - "verbs": "`verbs` is a list of matching verbs and may not be empty. \"*\" matches all verbs and, if present, must be the only entry. Required.", - "apiGroups": "`apiGroups` is a list of matching API groups and may not be empty. \"*\" matches all API groups and, if present, must be the only entry. Required.", - "resources": "`resources` is a list of matching resources (i.e., lowercase and plural) with, if desired, subresource. For example, [ \"services\", \"nodes/status\" ]. This list may not be empty. \"*\" matches all resources and, if present, must be the only entry. Required.", - "clusterScope": "`clusterScope` indicates whether to match requests that do not specify a namespace (which happens either because the resource is not namespaced or the request targets all namespaces). If this field is omitted or false then the `namespaces` field must contain a non-empty list.", - "namespaces": "`namespaces` is a list of target namespaces that restricts matches. A request that specifies a target namespace matches only if either (a) this list contains that target namespace or (b) this list contains \"*\". Note that \"*\" matches any specified namespace but does not match a request that _does not specify_ a namespace (see the `clusterScope` field for that). This list may be empty, but only if `clusterScope` is true.", -} - -func (ResourcePolicyRule) SwaggerDoc() map[string]string { - return map_ResourcePolicyRule -} - -var map_ServiceAccountSubject = map[string]string{ - "": "ServiceAccountSubject holds detailed information for service-account-kind subject.", - "namespace": "`namespace` is the namespace of matching ServiceAccount objects. Required.", - "name": "`name` is the name of matching ServiceAccount objects, or \"*\" to match regardless of name. Required.", -} - -func (ServiceAccountSubject) SwaggerDoc() map[string]string { - return map_ServiceAccountSubject -} - -var map_Subject = map[string]string{ - "": "Subject matches the originator of a request, as identified by the request authentication system. There are three ways of matching an originator; by user, group, or service account.", - "kind": "`kind` indicates which one of the other fields is non-empty. Required", - "user": "`user` matches based on username.", - "group": "`group` matches based on user group name.", - "serviceAccount": "`serviceAccount` matches ServiceAccounts.", -} - -func (Subject) SwaggerDoc() map[string]string { - return map_Subject -} - -var map_UserSubject = map[string]string{ - "": "UserSubject holds detailed information for user-kind subject.", - "name": "`name` is the username that matches, or \"*\" to match all usernames. Required.", -} - -func (UserSubject) SwaggerDoc() map[string]string { - return map_UserSubject -} - -// AUTO-GENERATED FUNCTIONS END HERE diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index a5c9737aa5f9..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,583 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExemptPriorityLevelConfiguration) DeepCopyInto(out *ExemptPriorityLevelConfiguration) { - *out = *in - if in.NominalConcurrencyShares != nil { - in, out := &in.NominalConcurrencyShares, &out.NominalConcurrencyShares - *out = new(int32) - **out = **in - } - if in.LendablePercent != nil { - in, out := &in.LendablePercent, &out.LendablePercent - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExemptPriorityLevelConfiguration. -func (in *ExemptPriorityLevelConfiguration) DeepCopy() *ExemptPriorityLevelConfiguration { - if in == nil { - return nil - } - out := new(ExemptPriorityLevelConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowDistinguisherMethod) DeepCopyInto(out *FlowDistinguisherMethod) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowDistinguisherMethod. -func (in *FlowDistinguisherMethod) DeepCopy() *FlowDistinguisherMethod { - if in == nil { - return nil - } - out := new(FlowDistinguisherMethod) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowSchema) DeepCopyInto(out *FlowSchema) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowSchema. -func (in *FlowSchema) DeepCopy() *FlowSchema { - if in == nil { - return nil - } - out := new(FlowSchema) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *FlowSchema) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowSchemaCondition) DeepCopyInto(out *FlowSchemaCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowSchemaCondition. -func (in *FlowSchemaCondition) DeepCopy() *FlowSchemaCondition { - if in == nil { - return nil - } - out := new(FlowSchemaCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowSchemaList) DeepCopyInto(out *FlowSchemaList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]FlowSchema, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowSchemaList. -func (in *FlowSchemaList) DeepCopy() *FlowSchemaList { - if in == nil { - return nil - } - out := new(FlowSchemaList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *FlowSchemaList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowSchemaSpec) DeepCopyInto(out *FlowSchemaSpec) { - *out = *in - out.PriorityLevelConfiguration = in.PriorityLevelConfiguration - if in.DistinguisherMethod != nil { - in, out := &in.DistinguisherMethod, &out.DistinguisherMethod - *out = new(FlowDistinguisherMethod) - **out = **in - } - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]PolicyRulesWithSubjects, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowSchemaSpec. -func (in *FlowSchemaSpec) DeepCopy() *FlowSchemaSpec { - if in == nil { - return nil - } - out := new(FlowSchemaSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlowSchemaStatus) DeepCopyInto(out *FlowSchemaStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]FlowSchemaCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlowSchemaStatus. -func (in *FlowSchemaStatus) DeepCopy() *FlowSchemaStatus { - if in == nil { - return nil - } - out := new(FlowSchemaStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GroupSubject) DeepCopyInto(out *GroupSubject) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupSubject. -func (in *GroupSubject) DeepCopy() *GroupSubject { - if in == nil { - return nil - } - out := new(GroupSubject) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitResponse) DeepCopyInto(out *LimitResponse) { - *out = *in - if in.Queuing != nil { - in, out := &in.Queuing, &out.Queuing - *out = new(QueuingConfiguration) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitResponse. -func (in *LimitResponse) DeepCopy() *LimitResponse { - if in == nil { - return nil - } - out := new(LimitResponse) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitedPriorityLevelConfiguration) DeepCopyInto(out *LimitedPriorityLevelConfiguration) { - *out = *in - in.LimitResponse.DeepCopyInto(&out.LimitResponse) - if in.LendablePercent != nil { - in, out := &in.LendablePercent, &out.LendablePercent - *out = new(int32) - **out = **in - } - if in.BorrowingLimitPercent != nil { - in, out := &in.BorrowingLimitPercent, &out.BorrowingLimitPercent - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitedPriorityLevelConfiguration. -func (in *LimitedPriorityLevelConfiguration) DeepCopy() *LimitedPriorityLevelConfiguration { - if in == nil { - return nil - } - out := new(LimitedPriorityLevelConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NonResourcePolicyRule) DeepCopyInto(out *NonResourcePolicyRule) { - *out = *in - if in.Verbs != nil { - in, out := &in.Verbs, &out.Verbs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.NonResourceURLs != nil { - in, out := &in.NonResourceURLs, &out.NonResourceURLs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NonResourcePolicyRule. -func (in *NonResourcePolicyRule) DeepCopy() *NonResourcePolicyRule { - if in == nil { - return nil - } - out := new(NonResourcePolicyRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PolicyRulesWithSubjects) DeepCopyInto(out *PolicyRulesWithSubjects) { - *out = *in - if in.Subjects != nil { - in, out := &in.Subjects, &out.Subjects - *out = make([]Subject, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ResourceRules != nil { - in, out := &in.ResourceRules, &out.ResourceRules - *out = make([]ResourcePolicyRule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.NonResourceRules != nil { - in, out := &in.NonResourceRules, &out.NonResourceRules - *out = make([]NonResourcePolicyRule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyRulesWithSubjects. -func (in *PolicyRulesWithSubjects) DeepCopy() *PolicyRulesWithSubjects { - if in == nil { - return nil - } - out := new(PolicyRulesWithSubjects) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfiguration) DeepCopyInto(out *PriorityLevelConfiguration) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfiguration. -func (in *PriorityLevelConfiguration) DeepCopy() *PriorityLevelConfiguration { - if in == nil { - return nil - } - out := new(PriorityLevelConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PriorityLevelConfiguration) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfigurationCondition) DeepCopyInto(out *PriorityLevelConfigurationCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfigurationCondition. -func (in *PriorityLevelConfigurationCondition) DeepCopy() *PriorityLevelConfigurationCondition { - if in == nil { - return nil - } - out := new(PriorityLevelConfigurationCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfigurationList) DeepCopyInto(out *PriorityLevelConfigurationList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PriorityLevelConfiguration, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfigurationList. -func (in *PriorityLevelConfigurationList) DeepCopy() *PriorityLevelConfigurationList { - if in == nil { - return nil - } - out := new(PriorityLevelConfigurationList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PriorityLevelConfigurationList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfigurationReference) DeepCopyInto(out *PriorityLevelConfigurationReference) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfigurationReference. -func (in *PriorityLevelConfigurationReference) DeepCopy() *PriorityLevelConfigurationReference { - if in == nil { - return nil - } - out := new(PriorityLevelConfigurationReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfigurationSpec) DeepCopyInto(out *PriorityLevelConfigurationSpec) { - *out = *in - if in.Limited != nil { - in, out := &in.Limited, &out.Limited - *out = new(LimitedPriorityLevelConfiguration) - (*in).DeepCopyInto(*out) - } - if in.Exempt != nil { - in, out := &in.Exempt, &out.Exempt - *out = new(ExemptPriorityLevelConfiguration) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfigurationSpec. -func (in *PriorityLevelConfigurationSpec) DeepCopy() *PriorityLevelConfigurationSpec { - if in == nil { - return nil - } - out := new(PriorityLevelConfigurationSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PriorityLevelConfigurationStatus) DeepCopyInto(out *PriorityLevelConfigurationStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]PriorityLevelConfigurationCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityLevelConfigurationStatus. -func (in *PriorityLevelConfigurationStatus) DeepCopy() *PriorityLevelConfigurationStatus { - if in == nil { - return nil - } - out := new(PriorityLevelConfigurationStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *QueuingConfiguration) DeepCopyInto(out *QueuingConfiguration) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueuingConfiguration. -func (in *QueuingConfiguration) DeepCopy() *QueuingConfiguration { - if in == nil { - return nil - } - out := new(QueuingConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourcePolicyRule) DeepCopyInto(out *ResourcePolicyRule) { - *out = *in - if in.Verbs != nil { - in, out := &in.Verbs, &out.Verbs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.APIGroups != nil { - in, out := &in.APIGroups, &out.APIGroups - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Namespaces != nil { - in, out := &in.Namespaces, &out.Namespaces - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourcePolicyRule. -func (in *ResourcePolicyRule) DeepCopy() *ResourcePolicyRule { - if in == nil { - return nil - } - out := new(ResourcePolicyRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceAccountSubject) DeepCopyInto(out *ServiceAccountSubject) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountSubject. -func (in *ServiceAccountSubject) DeepCopy() *ServiceAccountSubject { - if in == nil { - return nil - } - out := new(ServiceAccountSubject) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Subject) DeepCopyInto(out *Subject) { - *out = *in - if in.User != nil { - in, out := &in.User, &out.User - *out = new(UserSubject) - **out = **in - } - if in.Group != nil { - in, out := &in.Group, &out.Group - *out = new(GroupSubject) - **out = **in - } - if in.ServiceAccount != nil { - in, out := &in.ServiceAccount, &out.ServiceAccount - *out = new(ServiceAccountSubject) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subject. -func (in *Subject) DeepCopy() *Subject { - if in == nil { - return nil - } - out := new(Subject) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UserSubject) DeepCopyInto(out *UserSubject) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserSubject. -func (in *UserSubject) DeepCopy() *UserSubject { - if in == nil { - return nil - } - out := new(UserSubject) - in.DeepCopyInto(out) - return out -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go b/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go deleted file mode 100644 index 2b6a3d3fd96c..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go +++ /dev/null @@ -1,122 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by prerelease-lifecycle-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - schema "k8s.io/apimachinery/pkg/runtime/schema" -) - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *FlowSchema) APILifecycleIntroduced() (major, minor int) { - return 1, 18 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *FlowSchema) APILifecycleDeprecated() (major, minor int) { - return 1, 20 -} - -// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. -// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. -func (in *FlowSchema) APILifecycleReplacement() schema.GroupVersionKind { - return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "FlowSchema"} -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *FlowSchema) APILifecycleRemoved() (major, minor int) { - return 1, 21 -} - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *FlowSchemaList) APILifecycleIntroduced() (major, minor int) { - return 1, 18 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *FlowSchemaList) APILifecycleDeprecated() (major, minor int) { - return 1, 20 -} - -// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. -// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. -func (in *FlowSchemaList) APILifecycleReplacement() schema.GroupVersionKind { - return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "FlowSchemaList"} -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *FlowSchemaList) APILifecycleRemoved() (major, minor int) { - return 1, 21 -} - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *PriorityLevelConfiguration) APILifecycleIntroduced() (major, minor int) { - return 1, 18 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *PriorityLevelConfiguration) APILifecycleDeprecated() (major, minor int) { - return 1, 20 -} - -// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. -// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. -func (in *PriorityLevelConfiguration) APILifecycleReplacement() schema.GroupVersionKind { - return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "PriorityLevelConfiguration"} -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *PriorityLevelConfiguration) APILifecycleRemoved() (major, minor int) { - return 1, 21 -} - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *PriorityLevelConfigurationList) APILifecycleIntroduced() (major, minor int) { - return 1, 18 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *PriorityLevelConfigurationList) APILifecycleDeprecated() (major, minor int) { - return 1, 20 -} - -// APILifecycleReplacement is an autogenerated function, returning the group, version, and kind that should be used instead of this deprecated type. -// It is controlled by "k8s:prerelease-lifecycle-gen:replacement=,," tags in types.go. -func (in *PriorityLevelConfigurationList) APILifecycleReplacement() schema.GroupVersionKind { - return schema.GroupVersionKind{Group: "flowcontrol.apiserver.k8s.io", Version: "v1beta3", Kind: "PriorityLevelConfigurationList"} -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *PriorityLevelConfigurationList) APILifecycleRemoved() (major, minor int) { - return 1, 21 -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1/doc.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1/doc.go index b46af58e43c4..177cdf523687 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1/doc.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1/doc.go @@ -19,6 +19,6 @@ limitations under the License. // +k8s:openapi-gen=true // Package policy is for any kind of policy object. Suitable examples, even if -// they aren't all here, are PodDisruptionBudget, PodSecurityPolicy, +// they aren't all here, are PodDisruptionBudget, // NetworkPolicy, etc. package v1 // import "k8s.io/api/policy/v1" diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/doc.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/doc.go index 9e9c7d13abc1..76da54b4c739 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/doc.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/doc.go @@ -20,6 +20,6 @@ limitations under the License. // +k8s:prerelease-lifecycle-gen=true // Package policy is for any kind of policy object. Suitable examples, even if -// they aren't all here, are PodDisruptionBudget, PodSecurityPolicy, +// they aren't all here, are PodDisruptionBudget, // NetworkPolicy, etc. package v1beta1 // import "k8s.io/api/policy/v1beta1" diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.pb.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.pb.go index 0b75d6415416..efba41b3fdad 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.pb.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.pb.go @@ -26,8 +26,6 @@ import ( proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - k8s_io_api_core_v1 "k8s.io/api/core/v1" - v11 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" math "math" @@ -49,94 +47,10 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -func (m *AllowedCSIDriver) Reset() { *m = AllowedCSIDriver{} } -func (*AllowedCSIDriver) ProtoMessage() {} -func (*AllowedCSIDriver) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{0} -} -func (m *AllowedCSIDriver) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AllowedCSIDriver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *AllowedCSIDriver) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllowedCSIDriver.Merge(m, src) -} -func (m *AllowedCSIDriver) XXX_Size() int { - return m.Size() -} -func (m *AllowedCSIDriver) XXX_DiscardUnknown() { - xxx_messageInfo_AllowedCSIDriver.DiscardUnknown(m) -} - -var xxx_messageInfo_AllowedCSIDriver proto.InternalMessageInfo - -func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } -func (*AllowedFlexVolume) ProtoMessage() {} -func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{1} -} -func (m *AllowedFlexVolume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AllowedFlexVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *AllowedFlexVolume) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllowedFlexVolume.Merge(m, src) -} -func (m *AllowedFlexVolume) XXX_Size() int { - return m.Size() -} -func (m *AllowedFlexVolume) XXX_DiscardUnknown() { - xxx_messageInfo_AllowedFlexVolume.DiscardUnknown(m) -} - -var xxx_messageInfo_AllowedFlexVolume proto.InternalMessageInfo - -func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } -func (*AllowedHostPath) ProtoMessage() {} -func (*AllowedHostPath) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{2} -} -func (m *AllowedHostPath) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AllowedHostPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *AllowedHostPath) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllowedHostPath.Merge(m, src) -} -func (m *AllowedHostPath) XXX_Size() int { - return m.Size() -} -func (m *AllowedHostPath) XXX_DiscardUnknown() { - xxx_messageInfo_AllowedHostPath.DiscardUnknown(m) -} - -var xxx_messageInfo_AllowedHostPath proto.InternalMessageInfo - func (m *Eviction) Reset() { *m = Eviction{} } func (*Eviction) ProtoMessage() {} func (*Eviction) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{3} + return fileDescriptor_014060e454a820dc, []int{0} } func (m *Eviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,94 +75,10 @@ func (m *Eviction) XXX_DiscardUnknown() { var xxx_messageInfo_Eviction proto.InternalMessageInfo -func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } -func (*FSGroupStrategyOptions) ProtoMessage() {} -func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{4} -} -func (m *FSGroupStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FSGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *FSGroupStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_FSGroupStrategyOptions.Merge(m, src) -} -func (m *FSGroupStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *FSGroupStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_FSGroupStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_FSGroupStrategyOptions proto.InternalMessageInfo - -func (m *HostPortRange) Reset() { *m = HostPortRange{} } -func (*HostPortRange) ProtoMessage() {} -func (*HostPortRange) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{5} -} -func (m *HostPortRange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HostPortRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *HostPortRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_HostPortRange.Merge(m, src) -} -func (m *HostPortRange) XXX_Size() int { - return m.Size() -} -func (m *HostPortRange) XXX_DiscardUnknown() { - xxx_messageInfo_HostPortRange.DiscardUnknown(m) -} - -var xxx_messageInfo_HostPortRange proto.InternalMessageInfo - -func (m *IDRange) Reset() { *m = IDRange{} } -func (*IDRange) ProtoMessage() {} -func (*IDRange) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{6} -} -func (m *IDRange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IDRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *IDRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_IDRange.Merge(m, src) -} -func (m *IDRange) XXX_Size() int { - return m.Size() -} -func (m *IDRange) XXX_DiscardUnknown() { - xxx_messageInfo_IDRange.DiscardUnknown(m) -} - -var xxx_messageInfo_IDRange proto.InternalMessageInfo - func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } func (*PodDisruptionBudget) ProtoMessage() {} func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{7} + return fileDescriptor_014060e454a820dc, []int{1} } func (m *PodDisruptionBudget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +106,7 @@ var xxx_messageInfo_PodDisruptionBudget proto.InternalMessageInfo func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } func (*PodDisruptionBudgetList) ProtoMessage() {} func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{8} + return fileDescriptor_014060e454a820dc, []int{2} } func (m *PodDisruptionBudgetList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +134,7 @@ var xxx_messageInfo_PodDisruptionBudgetList proto.InternalMessageInfo func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } func (*PodDisruptionBudgetSpec) ProtoMessage() {} func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{9} + return fileDescriptor_014060e454a820dc, []int{3} } func (m *PodDisruptionBudgetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,7 +162,7 @@ var xxx_messageInfo_PodDisruptionBudgetSpec proto.InternalMessageInfo func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } func (*PodDisruptionBudgetStatus) ProtoMessage() {} func (*PodDisruptionBudgetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{10} + return fileDescriptor_014060e454a820dc, []int{4} } func (m *PodDisruptionBudgetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,251 +187,13 @@ func (m *PodDisruptionBudgetStatus) XXX_DiscardUnknown() { var xxx_messageInfo_PodDisruptionBudgetStatus proto.InternalMessageInfo -func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } -func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{11} -} -func (m *PodSecurityPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PodSecurityPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PodSecurityPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_PodSecurityPolicy.Merge(m, src) -} -func (m *PodSecurityPolicy) XXX_Size() int { - return m.Size() -} -func (m *PodSecurityPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_PodSecurityPolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_PodSecurityPolicy proto.InternalMessageInfo - -func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } -func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{12} -} -func (m *PodSecurityPolicyList) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PodSecurityPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PodSecurityPolicyList) XXX_Merge(src proto.Message) { - xxx_messageInfo_PodSecurityPolicyList.Merge(m, src) -} -func (m *PodSecurityPolicyList) XXX_Size() int { - return m.Size() -} -func (m *PodSecurityPolicyList) XXX_DiscardUnknown() { - xxx_messageInfo_PodSecurityPolicyList.DiscardUnknown(m) -} - -var xxx_messageInfo_PodSecurityPolicyList proto.InternalMessageInfo - -func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } -func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{13} -} -func (m *PodSecurityPolicySpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PodSecurityPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PodSecurityPolicySpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_PodSecurityPolicySpec.Merge(m, src) -} -func (m *PodSecurityPolicySpec) XXX_Size() int { - return m.Size() -} -func (m *PodSecurityPolicySpec) XXX_DiscardUnknown() { - xxx_messageInfo_PodSecurityPolicySpec.DiscardUnknown(m) -} - -var xxx_messageInfo_PodSecurityPolicySpec proto.InternalMessageInfo - -func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } -func (*RunAsGroupStrategyOptions) ProtoMessage() {} -func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{14} -} -func (m *RunAsGroupStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RunAsGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RunAsGroupStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_RunAsGroupStrategyOptions.Merge(m, src) -} -func (m *RunAsGroupStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *RunAsGroupStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_RunAsGroupStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_RunAsGroupStrategyOptions proto.InternalMessageInfo - -func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } -func (*RunAsUserStrategyOptions) ProtoMessage() {} -func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{15} -} -func (m *RunAsUserStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RunAsUserStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RunAsUserStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_RunAsUserStrategyOptions.Merge(m, src) -} -func (m *RunAsUserStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *RunAsUserStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_RunAsUserStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_RunAsUserStrategyOptions proto.InternalMessageInfo - -func (m *RuntimeClassStrategyOptions) Reset() { *m = RuntimeClassStrategyOptions{} } -func (*RuntimeClassStrategyOptions) ProtoMessage() {} -func (*RuntimeClassStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{16} -} -func (m *RuntimeClassStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RuntimeClassStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RuntimeClassStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_RuntimeClassStrategyOptions.Merge(m, src) -} -func (m *RuntimeClassStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *RuntimeClassStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_RuntimeClassStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_RuntimeClassStrategyOptions proto.InternalMessageInfo - -func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } -func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{17} -} -func (m *SELinuxStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SELinuxStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *SELinuxStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_SELinuxStrategyOptions.Merge(m, src) -} -func (m *SELinuxStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *SELinuxStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_SELinuxStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_SELinuxStrategyOptions proto.InternalMessageInfo - -func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } -func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} -func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_014060e454a820dc, []int{18} -} -func (m *SupplementalGroupsStrategyOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SupplementalGroupsStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *SupplementalGroupsStrategyOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_SupplementalGroupsStrategyOptions.Merge(m, src) -} -func (m *SupplementalGroupsStrategyOptions) XXX_Size() int { - return m.Size() -} -func (m *SupplementalGroupsStrategyOptions) XXX_DiscardUnknown() { - xxx_messageInfo_SupplementalGroupsStrategyOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_SupplementalGroupsStrategyOptions proto.InternalMessageInfo - func init() { - proto.RegisterType((*AllowedCSIDriver)(nil), "k8s.io.api.policy.v1beta1.AllowedCSIDriver") - proto.RegisterType((*AllowedFlexVolume)(nil), "k8s.io.api.policy.v1beta1.AllowedFlexVolume") - proto.RegisterType((*AllowedHostPath)(nil), "k8s.io.api.policy.v1beta1.AllowedHostPath") proto.RegisterType((*Eviction)(nil), "k8s.io.api.policy.v1beta1.Eviction") - proto.RegisterType((*FSGroupStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.FSGroupStrategyOptions") - proto.RegisterType((*HostPortRange)(nil), "k8s.io.api.policy.v1beta1.HostPortRange") - proto.RegisterType((*IDRange)(nil), "k8s.io.api.policy.v1beta1.IDRange") proto.RegisterType((*PodDisruptionBudget)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudget") proto.RegisterType((*PodDisruptionBudgetList)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetList") proto.RegisterType((*PodDisruptionBudgetSpec)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetSpec") proto.RegisterType((*PodDisruptionBudgetStatus)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetStatus") proto.RegisterMapType((map[string]v1.Time)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetStatus.DisruptedPodsEntry") - proto.RegisterType((*PodSecurityPolicy)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicy") - proto.RegisterType((*PodSecurityPolicyList)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicyList") - proto.RegisterType((*PodSecurityPolicySpec)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicySpec") - proto.RegisterType((*RunAsGroupStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RunAsGroupStrategyOptions") - proto.RegisterType((*RunAsUserStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RunAsUserStrategyOptions") - proto.RegisterType((*RuntimeClassStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RuntimeClassStrategyOptions") - proto.RegisterType((*SELinuxStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SELinuxStrategyOptions") - proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SupplementalGroupsStrategyOptions") } func init() { @@ -609,132 +201,64 @@ func init() { } var fileDescriptor_014060e454a820dc = []byte{ - // 1946 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5b, 0x73, 0xdb, 0xc6, - 0x15, 0x16, 0x4c, 0x5d, 0xa8, 0xd5, 0xc5, 0xe2, 0xea, 0x62, 0x48, 0x69, 0x08, 0x07, 0x99, 0xe9, - 0xb8, 0x69, 0x0a, 0xc6, 0xb2, 0xe3, 0x7a, 0x9a, 0x5e, 0x2c, 0x88, 0x92, 0xad, 0x8c, 0x65, 0xb1, - 0x4b, 0x2b, 0xd3, 0x76, 0xdc, 0x4e, 0x97, 0xc0, 0x8a, 0x44, 0x04, 0x02, 0x28, 0x76, 0xc1, 0x88, - 0x6f, 0x79, 0xe8, 0x43, 0x1f, 0xfb, 0x07, 0x32, 0xfd, 0x01, 0x9d, 0x3e, 0xf5, 0x47, 0xd4, 0x99, - 0xe9, 0x74, 0xd2, 0xb7, 0x4c, 0x1f, 0x38, 0x35, 0xfb, 0x2f, 0xfc, 0xd4, 0xc1, 0x72, 0x01, 0x12, - 0x37, 0xd2, 0xce, 0x8c, 0xfd, 0x46, 0xec, 0xf9, 0xbe, 0xef, 0xec, 0x9e, 0xdd, 0x3d, 0x67, 0x77, - 0x09, 0xf4, 0xcb, 0xfb, 0x54, 0xb3, 0xdc, 0xda, 0x65, 0xd0, 0x22, 0xbe, 0x43, 0x18, 0xa1, 0xb5, - 0x1e, 0x71, 0x4c, 0xd7, 0xaf, 0x09, 0x03, 0xf6, 0xac, 0x9a, 0xe7, 0xda, 0x96, 0xd1, 0xaf, 0xf5, - 0x6e, 0xb7, 0x08, 0xc3, 0xb7, 0x6b, 0x6d, 0xe2, 0x10, 0x1f, 0x33, 0x62, 0x6a, 0x9e, 0xef, 0x32, - 0x17, 0xee, 0x8e, 0xa0, 0x1a, 0xf6, 0x2c, 0x6d, 0x04, 0xd5, 0x04, 0x74, 0xef, 0x47, 0x6d, 0x8b, - 0x75, 0x82, 0x96, 0x66, 0xb8, 0xdd, 0x5a, 0xdb, 0x6d, 0xbb, 0x35, 0xce, 0x68, 0x05, 0x17, 0xfc, - 0x8b, 0x7f, 0xf0, 0x5f, 0x23, 0xa5, 0x3d, 0x75, 0xc2, 0xa9, 0xe1, 0xfa, 0xa4, 0xd6, 0xcb, 0x78, - 0xdb, 0xbb, 0x3b, 0xc6, 0x74, 0xb1, 0xd1, 0xb1, 0x1c, 0xe2, 0xf7, 0x6b, 0xde, 0x65, 0x3b, 0x6c, - 0xa0, 0xb5, 0x2e, 0x61, 0x38, 0x8f, 0x55, 0x2b, 0x62, 0xf9, 0x81, 0xc3, 0xac, 0x2e, 0xc9, 0x10, - 0xee, 0xcd, 0x22, 0x50, 0xa3, 0x43, 0xba, 0x38, 0xc3, 0xbb, 0x53, 0xc4, 0x0b, 0x98, 0x65, 0xd7, - 0x2c, 0x87, 0x51, 0xe6, 0xa7, 0x49, 0xea, 0x5d, 0xb0, 0x71, 0x60, 0xdb, 0xee, 0x17, 0xc4, 0x3c, - 0x6c, 0x9e, 0xd4, 0x7d, 0xab, 0x47, 0x7c, 0x78, 0x13, 0xcc, 0x3b, 0xb8, 0x4b, 0x64, 0xe9, 0xa6, - 0x74, 0x6b, 0x59, 0x5f, 0x7d, 0x3e, 0x50, 0xe6, 0x86, 0x03, 0x65, 0xfe, 0x09, 0xee, 0x12, 0xc4, - 0x2d, 0xea, 0x27, 0xa0, 0x22, 0x58, 0xc7, 0x36, 0xb9, 0xfa, 0xcc, 0xb5, 0x83, 0x2e, 0x81, 0xdf, - 0x07, 0x8b, 0x26, 0x17, 0x10, 0xc4, 0x75, 0x41, 0x5c, 0x1c, 0xc9, 0x22, 0x61, 0x55, 0x29, 0xb8, - 0x2e, 0xc8, 0x8f, 0x5c, 0xca, 0x1a, 0x98, 0x75, 0xe0, 0x3e, 0x00, 0x1e, 0x66, 0x9d, 0x86, 0x4f, - 0x2e, 0xac, 0x2b, 0x41, 0x87, 0x82, 0x0e, 0x1a, 0xb1, 0x05, 0x4d, 0xa0, 0xe0, 0x87, 0xa0, 0xec, - 0x13, 0x6c, 0x9e, 0x39, 0x76, 0x5f, 0xbe, 0x76, 0x53, 0xba, 0x55, 0xd6, 0x37, 0x04, 0xa3, 0x8c, - 0x44, 0x3b, 0x8a, 0x11, 0xea, 0x7f, 0x24, 0x50, 0x3e, 0xea, 0x59, 0x06, 0xb3, 0x5c, 0x07, 0xfe, - 0x1e, 0x94, 0xc3, 0xd9, 0x32, 0x31, 0xc3, 0xdc, 0xd9, 0xca, 0xfe, 0x47, 0xda, 0x78, 0x25, 0xc5, - 0xc1, 0xd3, 0xbc, 0xcb, 0x76, 0xd8, 0x40, 0xb5, 0x10, 0xad, 0xf5, 0x6e, 0x6b, 0x67, 0xad, 0xcf, - 0x89, 0xc1, 0x4e, 0x09, 0xc3, 0xe3, 0xee, 0x8d, 0xdb, 0x50, 0xac, 0x0a, 0x6d, 0xb0, 0x66, 0x12, - 0x9b, 0x30, 0x72, 0xe6, 0x85, 0x1e, 0x29, 0xef, 0xe1, 0xca, 0xfe, 0x9d, 0x57, 0x73, 0x53, 0x9f, - 0xa4, 0xea, 0x95, 0xe1, 0x40, 0x59, 0x4b, 0x34, 0xa1, 0xa4, 0xb8, 0xfa, 0x95, 0x04, 0x76, 0x8e, - 0x9b, 0x0f, 0x7d, 0x37, 0xf0, 0x9a, 0x2c, 0x9c, 0xdd, 0x76, 0x5f, 0x98, 0xe0, 0x8f, 0xc1, 0xbc, - 0x1f, 0xd8, 0xd1, 0x5c, 0xbe, 0x1f, 0xcd, 0x25, 0x0a, 0x6c, 0xf2, 0x72, 0xa0, 0x6c, 0xa6, 0x58, - 0x4f, 0xfb, 0x1e, 0x41, 0x9c, 0x00, 0x3f, 0x05, 0x8b, 0x3e, 0x76, 0xda, 0x24, 0xec, 0x7a, 0xe9, - 0xd6, 0xca, 0xbe, 0xaa, 0x15, 0xee, 0x35, 0xed, 0xa4, 0x8e, 0x42, 0xe8, 0x78, 0xc6, 0xf9, 0x27, - 0x45, 0x42, 0x41, 0x3d, 0x05, 0x6b, 0x7c, 0xaa, 0x5d, 0x9f, 0x71, 0x0b, 0x7c, 0x17, 0x94, 0xba, - 0x96, 0xc3, 0x3b, 0xb5, 0xa0, 0xaf, 0x08, 0x56, 0xe9, 0xd4, 0x72, 0x50, 0xd8, 0xce, 0xcd, 0xf8, - 0x8a, 0xc7, 0x6c, 0xd2, 0x8c, 0xaf, 0x50, 0xd8, 0xae, 0x3e, 0x04, 0x4b, 0xc2, 0xe3, 0xa4, 0x50, - 0x69, 0xba, 0x50, 0x29, 0x47, 0xe8, 0xaf, 0xd7, 0xc0, 0x66, 0xc3, 0x35, 0xeb, 0x16, 0xf5, 0x03, - 0x1e, 0x2f, 0x3d, 0x30, 0xdb, 0x84, 0xbd, 0x85, 0xf5, 0xf1, 0x14, 0xcc, 0x53, 0x8f, 0x18, 0x62, - 0x59, 0xec, 0x4f, 0x89, 0x6d, 0x4e, 0xff, 0x9a, 0x1e, 0x31, 0xc6, 0xdb, 0x32, 0xfc, 0x42, 0x5c, - 0x0d, 0x3e, 0x03, 0x8b, 0x94, 0x61, 0x16, 0x50, 0xb9, 0xc4, 0x75, 0xef, 0xbe, 0xa6, 0x2e, 0xe7, - 0x8e, 0x67, 0x71, 0xf4, 0x8d, 0x84, 0xa6, 0xfa, 0x4f, 0x09, 0xdc, 0xc8, 0x61, 0x3d, 0xb6, 0x28, - 0x83, 0xcf, 0x32, 0x11, 0xd3, 0x5e, 0x2d, 0x62, 0x21, 0x9b, 0xc7, 0x2b, 0xde, 0xbc, 0x51, 0xcb, - 0x44, 0xb4, 0x9a, 0x60, 0xc1, 0x62, 0xa4, 0x1b, 0x2d, 0x45, 0xed, 0xf5, 0x86, 0xa5, 0xaf, 0x09, - 0xe9, 0x85, 0x93, 0x50, 0x04, 0x8d, 0xb4, 0xd4, 0x7f, 0x97, 0x72, 0x87, 0x13, 0x86, 0x13, 0x5e, - 0x80, 0xd5, 0xae, 0xe5, 0x1c, 0xf4, 0xb0, 0x65, 0xe3, 0x96, 0xd8, 0x3d, 0xd3, 0x16, 0x41, 0x98, - 0x61, 0xb5, 0x51, 0x86, 0xd5, 0x4e, 0x1c, 0x76, 0xe6, 0x37, 0x99, 0x6f, 0x39, 0x6d, 0x7d, 0x63, - 0x38, 0x50, 0x56, 0x4f, 0x27, 0x94, 0x50, 0x42, 0x17, 0xfe, 0x16, 0x94, 0x29, 0xb1, 0x89, 0xc1, - 0x5c, 0xff, 0xf5, 0x32, 0xc4, 0x63, 0xdc, 0x22, 0x76, 0x53, 0x50, 0xf5, 0xd5, 0x30, 0x6e, 0xd1, - 0x17, 0x8a, 0x25, 0xa1, 0x0d, 0xd6, 0xbb, 0xf8, 0xea, 0xdc, 0xc1, 0xf1, 0x40, 0x4a, 0xdf, 0x71, - 0x20, 0x70, 0x38, 0x50, 0xd6, 0x4f, 0x13, 0x5a, 0x28, 0xa5, 0x0d, 0xbf, 0x94, 0xc0, 0x5e, 0xe0, - 0x74, 0x08, 0xb6, 0x59, 0xa7, 0xdf, 0x70, 0xcd, 0x28, 0xdd, 0x36, 0xf8, 0x0c, 0xc9, 0xf3, 0x3c, - 0x03, 0x3d, 0x18, 0x0e, 0x94, 0xbd, 0xf3, 0x42, 0xd4, 0xcb, 0x81, 0x52, 0x2d, 0xb6, 0xf2, 0xf4, - 0x34, 0xc5, 0x87, 0xfa, 0x8f, 0x05, 0xb0, 0x5b, 0xb8, 0xb0, 0xe1, 0xa7, 0x00, 0xba, 0x2d, 0x4a, - 0xfc, 0x1e, 0x31, 0x1f, 0x8e, 0xca, 0xa0, 0xe5, 0x46, 0xb9, 0x63, 0x4f, 0xac, 0x11, 0x78, 0x96, - 0x41, 0xa0, 0x1c, 0x16, 0xfc, 0xa3, 0x04, 0xd6, 0xcc, 0x91, 0x1b, 0x62, 0x36, 0x5c, 0x33, 0x5a, - 0x9b, 0x0f, 0xbf, 0xcb, 0x96, 0xd3, 0xea, 0x93, 0x4a, 0x47, 0x0e, 0xf3, 0xfb, 0xfa, 0xb6, 0xe8, - 0xd0, 0x5a, 0xc2, 0x86, 0x92, 0x4e, 0xc3, 0x21, 0x99, 0xb1, 0x24, 0x15, 0x65, 0x95, 0xcf, 0xf2, - 0xc2, 0x78, 0x48, 0xf5, 0x0c, 0x02, 0xe5, 0xb0, 0xe0, 0xcf, 0xc1, 0xba, 0x11, 0xf8, 0x3e, 0x71, - 0xd8, 0xa3, 0x51, 0x7c, 0xf9, 0x94, 0x2d, 0xe8, 0x3b, 0x42, 0x67, 0xfd, 0x30, 0x61, 0x45, 0x29, - 0x74, 0xc8, 0x37, 0x09, 0xb5, 0x7c, 0x62, 0x46, 0xfc, 0x85, 0x24, 0xbf, 0x9e, 0xb0, 0xa2, 0x14, - 0x1a, 0xde, 0x07, 0xab, 0xe4, 0xca, 0x23, 0x46, 0x14, 0xd0, 0x45, 0xce, 0xde, 0x12, 0xec, 0xd5, - 0xa3, 0x09, 0x1b, 0x4a, 0x20, 0xa1, 0x01, 0x80, 0xe1, 0x3a, 0xa6, 0x35, 0x2a, 0xb5, 0x4b, 0x7c, - 0x22, 0x6a, 0xaf, 0xb6, 0x91, 0x0e, 0x23, 0xde, 0x38, 0x61, 0xc7, 0x4d, 0x14, 0x4d, 0xc8, 0xee, - 0xd9, 0x00, 0x66, 0xa7, 0x09, 0x6e, 0x80, 0xd2, 0x25, 0xe9, 0x8f, 0xca, 0x2b, 0x0a, 0x7f, 0xc2, - 0x07, 0x60, 0xa1, 0x87, 0xed, 0x80, 0x88, 0x0d, 0xfd, 0xc1, 0xab, 0xf5, 0xe3, 0xa9, 0xd5, 0x25, - 0x68, 0x44, 0xfc, 0xc9, 0xb5, 0xfb, 0x92, 0xfa, 0xb5, 0x04, 0x2a, 0x0d, 0xd7, 0x6c, 0x12, 0x23, - 0xf0, 0x2d, 0xd6, 0x1f, 0xad, 0xef, 0xb7, 0x50, 0x98, 0x50, 0xa2, 0x30, 0x7d, 0x34, 0x7d, 0x35, - 0x27, 0x7b, 0x57, 0x54, 0x96, 0xd4, 0xe7, 0x12, 0xd8, 0xce, 0xa0, 0xdf, 0x42, 0xd9, 0xf8, 0x65, - 0xb2, 0x6c, 0x7c, 0xf8, 0x3a, 0x83, 0x29, 0x28, 0x1a, 0x5f, 0x57, 0x72, 0x86, 0xc2, 0x4b, 0x46, - 0x78, 0x84, 0xf5, 0xad, 0x9e, 0x65, 0x93, 0x36, 0x31, 0xf9, 0x60, 0xca, 0x13, 0x47, 0xd8, 0xd8, - 0x82, 0x26, 0x50, 0x90, 0x82, 0x1d, 0x93, 0x5c, 0xe0, 0xc0, 0x66, 0x07, 0xa6, 0x79, 0x88, 0x3d, - 0xdc, 0xb2, 0x6c, 0x8b, 0x59, 0xe2, 0xcc, 0xb5, 0xac, 0x7f, 0x32, 0x1c, 0x28, 0x3b, 0xf5, 0x5c, - 0xc4, 0xcb, 0x81, 0xf2, 0x6e, 0xf6, 0xca, 0xa2, 0xc5, 0x90, 0x3e, 0x2a, 0x90, 0x86, 0x7d, 0x20, - 0xfb, 0xe4, 0x0f, 0x41, 0xb8, 0xf3, 0xea, 0xbe, 0xeb, 0x25, 0xdc, 0x96, 0xb8, 0xdb, 0x9f, 0x0d, - 0x07, 0x8a, 0x8c, 0x0a, 0x30, 0xb3, 0x1d, 0x17, 0xca, 0xc3, 0xcf, 0xc1, 0x26, 0x16, 0x97, 0x8d, - 0x49, 0xaf, 0xf3, 0xdc, 0xeb, 0xfd, 0xe1, 0x40, 0xd9, 0x3c, 0xc8, 0x9a, 0x67, 0x3b, 0xcc, 0x13, - 0x85, 0x35, 0xb0, 0xd4, 0xe3, 0xf7, 0x12, 0x2a, 0x2f, 0x70, 0xfd, 0xed, 0xe1, 0x40, 0x59, 0x1a, - 0x5d, 0x55, 0x42, 0xcd, 0xc5, 0xe3, 0x26, 0x2f, 0x27, 0x11, 0x0a, 0x7e, 0x0c, 0x56, 0x3a, 0x2e, - 0x65, 0x4f, 0x08, 0xfb, 0xc2, 0xf5, 0x2f, 0x79, 0xf6, 0x29, 0xeb, 0x9b, 0x62, 0x06, 0x57, 0x1e, - 0x8d, 0x4d, 0x68, 0x12, 0x07, 0x7f, 0x0d, 0x96, 0x3b, 0xe2, 0x6c, 0x1b, 0xa5, 0x9e, 0x5b, 0x53, - 0x16, 0x5a, 0xe2, 0x1c, 0xac, 0x57, 0x84, 0xfc, 0x72, 0xd4, 0x4c, 0xd1, 0x58, 0x0d, 0xfe, 0x00, - 0x2c, 0xf1, 0x8f, 0x93, 0xba, 0x5c, 0xe6, 0xbd, 0xb9, 0x2e, 0xe0, 0x4b, 0x8f, 0x46, 0xcd, 0x28, - 0xb2, 0x47, 0xd0, 0x93, 0xc6, 0xa1, 0xbc, 0x9c, 0x85, 0x9e, 0x34, 0x0e, 0x51, 0x64, 0x87, 0xcf, - 0xc0, 0x12, 0x25, 0x8f, 0x2d, 0x27, 0xb8, 0x92, 0x01, 0xdf, 0x72, 0xb7, 0xa7, 0x74, 0xb7, 0x79, - 0xc4, 0x91, 0xa9, 0x5b, 0xc5, 0x58, 0x5d, 0xd8, 0x51, 0x24, 0x09, 0x4d, 0xb0, 0xec, 0x07, 0xce, - 0x01, 0x3d, 0xa7, 0xc4, 0x97, 0x57, 0x32, 0x47, 0x9a, 0xb4, 0x3e, 0x8a, 0xb0, 0x69, 0x0f, 0x71, - 0x64, 0x62, 0x04, 0x1a, 0x0b, 0x43, 0x13, 0x00, 0xfe, 0xc1, 0x2f, 0x2f, 0xf2, 0xce, 0xcc, 0xc3, - 0x2e, 0x8a, 0xc1, 0x69, 0x3f, 0xeb, 0xe1, 0xf6, 0x1c, 0x9b, 0xd1, 0x84, 0x2e, 0xfc, 0x93, 0x04, - 0x20, 0x0d, 0x3c, 0xcf, 0x26, 0x5d, 0xe2, 0x30, 0x6c, 0xf3, 0x56, 0x2a, 0xaf, 0x72, 0x77, 0x3f, - 0x9d, 0x16, 0xb5, 0x0c, 0x29, 0xed, 0x36, 0xae, 0xcd, 0x59, 0x28, 0xca, 0xf1, 0x19, 0x4e, 0xda, - 0x85, 0x18, 0xed, 0xda, 0xcc, 0x49, 0xcb, 0xbf, 0x0a, 0x8e, 0x27, 0x4d, 0xd8, 0x51, 0x24, 0x09, - 0x3f, 0x03, 0x3b, 0xd1, 0x45, 0x19, 0xb9, 0x2e, 0x3b, 0xb6, 0x6c, 0x42, 0xfb, 0x94, 0x91, 0xae, - 0xbc, 0xce, 0x17, 0x53, 0x55, 0x30, 0x77, 0x50, 0x2e, 0x0a, 0x15, 0xb0, 0x61, 0x17, 0x28, 0x51, - 0x12, 0x0a, 0x77, 0x68, 0x9c, 0x05, 0x8f, 0xa8, 0x81, 0xed, 0xd1, 0xe9, 0xeb, 0x3a, 0x77, 0xf0, - 0xfe, 0x70, 0xa0, 0x28, 0xf5, 0xe9, 0x50, 0x34, 0x4b, 0x0b, 0xfe, 0x0a, 0xc8, 0xb8, 0xc8, 0xcf, - 0x06, 0xf7, 0xf3, 0xbd, 0x30, 0xb3, 0x15, 0x3a, 0x28, 0x64, 0x43, 0x0f, 0x6c, 0xe0, 0xe4, 0x93, - 0x05, 0x95, 0x2b, 0x7c, 0xaf, 0x7f, 0x30, 0x65, 0x1e, 0x52, 0xaf, 0x1c, 0xba, 0x2c, 0xc2, 0xb8, - 0x91, 0x32, 0x50, 0x94, 0x51, 0x87, 0x57, 0x00, 0xe2, 0xf4, 0x0b, 0x0b, 0x95, 0xe1, 0xcc, 0x42, - 0x96, 0x79, 0x96, 0x19, 0x2f, 0xb5, 0x8c, 0x89, 0xa2, 0x1c, 0x1f, 0x90, 0x81, 0x0a, 0x4e, 0xbd, - 0x08, 0x51, 0xf9, 0x06, 0x77, 0xfc, 0xc3, 0xd9, 0x8e, 0x63, 0x8e, 0xbe, 0x2b, 0xfc, 0x56, 0xd2, - 0x16, 0x8a, 0xb2, 0x0e, 0xe0, 0x63, 0xb0, 0x25, 0x1a, 0xcf, 0x1d, 0x8a, 0x2f, 0x48, 0xb3, 0x4f, - 0x0d, 0x66, 0x53, 0x79, 0x93, 0xe7, 0x6e, 0x79, 0x38, 0x50, 0xb6, 0x0e, 0x72, 0xec, 0x28, 0x97, - 0x05, 0x1f, 0x80, 0x8d, 0x0b, 0xd7, 0x6f, 0x59, 0xa6, 0x49, 0x9c, 0x48, 0x69, 0x8b, 0x2b, 0x6d, - 0x85, 0xf1, 0x3f, 0x4e, 0xd9, 0x50, 0x06, 0x0d, 0x29, 0xd8, 0x16, 0xca, 0x0d, 0xdf, 0x35, 0x4e, - 0xdd, 0xc0, 0x61, 0x61, 0xb9, 0xa0, 0xf2, 0x76, 0x5c, 0x22, 0xb7, 0x0f, 0xf2, 0x00, 0x2f, 0x07, - 0xca, 0xcd, 0x9c, 0x72, 0x95, 0x00, 0xa1, 0x7c, 0x6d, 0x68, 0x83, 0x55, 0xf1, 0xc6, 0x77, 0x68, - 0x63, 0x4a, 0x65, 0x99, 0x6f, 0xf5, 0x7b, 0xd3, 0x13, 0x5b, 0x0c, 0x4f, 0xef, 0x77, 0x7e, 0xf9, - 0x9c, 0x04, 0xa0, 0x84, 0xba, 0xfa, 0x17, 0x09, 0xec, 0x16, 0x26, 0x46, 0x78, 0x2f, 0xf1, 0x70, - 0xa4, 0xa6, 0x1e, 0x8e, 0x60, 0x96, 0xf8, 0x06, 0xde, 0x8d, 0xbe, 0x92, 0x80, 0x5c, 0x54, 0x21, - 0xe0, 0xc7, 0x89, 0x0e, 0xbe, 0x97, 0xea, 0x60, 0x25, 0xc3, 0x7b, 0x03, 0xfd, 0xfb, 0x97, 0x04, - 0xde, 0x99, 0x32, 0x03, 0x71, 0x42, 0x22, 0xe6, 0x24, 0xea, 0x09, 0x0e, 0xb7, 0xb2, 0xc4, 0xd7, - 0xd1, 0x38, 0x21, 0xe5, 0x60, 0x50, 0x21, 0x1b, 0x9e, 0x83, 0x1b, 0x22, 0x1b, 0xa6, 0x6d, 0xfc, - 0xe4, 0xbe, 0xac, 0xbf, 0x33, 0x1c, 0x28, 0x37, 0xea, 0xf9, 0x10, 0x54, 0xc4, 0x55, 0xff, 0x26, - 0x81, 0x9d, 0xfc, 0x92, 0x0f, 0xef, 0x24, 0xc2, 0xad, 0xa4, 0xc2, 0x7d, 0x3d, 0xc5, 0x12, 0xc1, - 0xfe, 0x1d, 0x58, 0x17, 0x07, 0x83, 0xe4, 0x3b, 0x68, 0x22, 0xe8, 0xe1, 0x16, 0x09, 0xcf, 0xf4, - 0x42, 0x22, 0x5a, 0xbe, 0xfc, 0xc9, 0x21, 0xd9, 0x86, 0x52, 0x6a, 0xea, 0xdf, 0x25, 0xf0, 0xde, - 0xcc, 0x62, 0x0b, 0xf5, 0x44, 0xd7, 0xb5, 0x54, 0xd7, 0xab, 0xc5, 0x02, 0x6f, 0xe6, 0x39, 0x54, - 0xff, 0xc5, 0xf3, 0x17, 0xd5, 0xb9, 0x6f, 0x5e, 0x54, 0xe7, 0xbe, 0x7d, 0x51, 0x9d, 0xfb, 0x72, - 0x58, 0x95, 0x9e, 0x0f, 0xab, 0xd2, 0x37, 0xc3, 0xaa, 0xf4, 0xed, 0xb0, 0x2a, 0xfd, 0x77, 0x58, - 0x95, 0xfe, 0xfc, 0xbf, 0xea, 0xdc, 0x6f, 0x76, 0x0b, 0xff, 0x06, 0xf9, 0x7f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xb4, 0x84, 0x53, 0xfb, 0x3b, 0x19, 0x00, 0x00, + // 857 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0xc7, 0x45, 0xcb, 0x72, 0x9d, 0xad, 0x24, 0xb8, 0xdb, 0x2f, 0x5b, 0x07, 0x2a, 0xd0, 0x29, + 0x28, 0xd0, 0x65, 0x9d, 0x04, 0x85, 0xd1, 0x43, 0x9b, 0x30, 0x32, 0xd2, 0x14, 0x31, 0x6c, 0xac, + 0x9c, 0x4b, 0x91, 0x02, 0x5d, 0x91, 0x13, 0x69, 0x2b, 0x92, 0x4b, 0x70, 0x97, 0x6c, 0x74, 0xcb, + 0xa1, 0x0f, 0xd0, 0xf7, 0xe8, 0x83, 0xd4, 0x87, 0x1e, 0xd2, 0x5b, 0xd0, 0x83, 0x50, 0xb3, 0x6f, + 0xd1, 0x53, 0xc1, 0x25, 0xf5, 0x41, 0x7d, 0x34, 0x4a, 0x0e, 0xb9, 0x71, 0x67, 0xe6, 0xff, 0x1b, + 0xce, 0xc7, 0x52, 0x42, 0xf6, 0xe8, 0x44, 0x12, 0x2e, 0xac, 0x51, 0xdc, 0x87, 0x28, 0x00, 0x05, + 0xd2, 0x4a, 0x20, 0x70, 0x45, 0x64, 0x15, 0x0e, 0x16, 0x72, 0x2b, 0x14, 0x1e, 0x77, 0xc6, 0x56, + 0x72, 0xdc, 0x07, 0xc5, 0x8e, 0xad, 0x01, 0x04, 0x10, 0x31, 0x05, 0x2e, 0x09, 0x23, 0xa1, 0x04, + 0x3e, 0xca, 0x43, 0x09, 0x0b, 0x39, 0xc9, 0x43, 0x49, 0x11, 0xda, 0xfa, 0x7c, 0xc0, 0xd5, 0x30, + 0xee, 0x13, 0x47, 0xf8, 0xd6, 0x40, 0x0c, 0x84, 0xa5, 0x15, 0xfd, 0xf8, 0x99, 0x3e, 0xe9, 0x83, + 0x7e, 0xca, 0x49, 0xad, 0xbb, 0xf3, 0xa4, 0x3e, 0x73, 0x86, 0x3c, 0x80, 0x68, 0x6c, 0x85, 0xa3, + 0x41, 0x66, 0x90, 0x96, 0x0f, 0x8a, 0x59, 0xc9, 0x4a, 0xfe, 0x96, 0xb5, 0x49, 0x15, 0xc5, 0x81, + 0xe2, 0x3e, 0xac, 0x08, 0xbe, 0x7c, 0x9d, 0x40, 0x3a, 0x43, 0xf0, 0xd9, 0x8a, 0xee, 0xce, 0x26, + 0x5d, 0xac, 0xb8, 0x67, 0xf1, 0x40, 0x49, 0x15, 0x2d, 0x8b, 0x3a, 0x7f, 0x19, 0x68, 0xff, 0x34, + 0xe1, 0x8e, 0xe2, 0x22, 0xc0, 0x3f, 0xa2, 0xfd, 0xac, 0x0a, 0x97, 0x29, 0x76, 0x68, 0xdc, 0x34, + 0x6e, 0xbd, 0x7f, 0xfb, 0x0b, 0x32, 0xef, 0xde, 0x0c, 0x4a, 0xc2, 0xd1, 0x20, 0x33, 0x48, 0x92, + 0x45, 0x93, 0xe4, 0x98, 0x9c, 0xf7, 0x7f, 0x02, 0x47, 0x9d, 0x81, 0x62, 0x36, 0xbe, 0x9a, 0xb4, + 0x2b, 0xe9, 0xa4, 0x8d, 0xe6, 0x36, 0x3a, 0xa3, 0x62, 0x0f, 0x35, 0x5c, 0xf0, 0x40, 0xc1, 0x79, + 0x98, 0x65, 0x94, 0x87, 0x3b, 0x3a, 0xcd, 0x9d, 0xed, 0xd2, 0x74, 0x17, 0xa5, 0xf6, 0x07, 0xe9, + 0xa4, 0xdd, 0x28, 0x99, 0x68, 0x19, 0xde, 0xf9, 0x6d, 0x07, 0x7d, 0x78, 0x21, 0xdc, 0x2e, 0x97, + 0x51, 0xac, 0x4d, 0x76, 0xec, 0x0e, 0x40, 0xbd, 0x83, 0x3a, 0x2f, 0xd1, 0xae, 0x0c, 0xc1, 0x29, + 0xca, 0xbb, 0x4d, 0x36, 0xee, 0x20, 0x59, 0xf3, 0x7e, 0xbd, 0x10, 0x1c, 0xbb, 0x5e, 0xf0, 0x77, + 0xb3, 0x13, 0xd5, 0x34, 0xfc, 0x14, 0xed, 0x49, 0xc5, 0x54, 0x2c, 0x0f, 0xab, 0x9a, 0x7b, 0xf7, + 0x0d, 0xb9, 0x5a, 0x6b, 0x37, 0x0b, 0xf2, 0x5e, 0x7e, 0xa6, 0x05, 0xb3, 0xf3, 0x87, 0x81, 0x3e, + 0x5d, 0xa3, 0x7a, 0xcc, 0xa5, 0xc2, 0x4f, 0x57, 0x3a, 0x46, 0xb6, 0xeb, 0x58, 0xa6, 0xd6, 0xfd, + 0x3a, 0x28, 0xb2, 0xee, 0x4f, 0x2d, 0x0b, 0xdd, 0xea, 0xa1, 0x1a, 0x57, 0xe0, 0x67, 0xdb, 0x50, + 0x5d, 0x42, 0x6f, 0x51, 0x96, 0xdd, 0x28, 0xd0, 0xb5, 0x47, 0x19, 0x84, 0xe6, 0xac, 0xce, 0x9f, + 0xd5, 0xb5, 0xe5, 0x64, 0xed, 0xc4, 0xcf, 0x50, 0xdd, 0xe7, 0xc1, 0xfd, 0x84, 0x71, 0x8f, 0xf5, + 0x3d, 0x78, 0xed, 0x12, 0x64, 0x37, 0x88, 0xe4, 0x37, 0x88, 0x3c, 0x0a, 0xd4, 0x79, 0xd4, 0x53, + 0x11, 0x0f, 0x06, 0xf6, 0x41, 0x3a, 0x69, 0xd7, 0xcf, 0x16, 0x48, 0xb4, 0xc4, 0xc5, 0x3f, 0xa0, + 0x7d, 0x09, 0x1e, 0x38, 0x4a, 0x44, 0x6f, 0xb6, 0xe9, 0x8f, 0x59, 0x1f, 0xbc, 0x5e, 0x21, 0xb5, + 0xeb, 0x59, 0xdf, 0xa6, 0x27, 0x3a, 0x43, 0x62, 0x0f, 0x35, 0x7d, 0xf6, 0xfc, 0x49, 0xc0, 0x66, + 0x85, 0x54, 0xdf, 0xb2, 0x10, 0x9c, 0x4e, 0xda, 0xcd, 0xb3, 0x12, 0x8b, 0x2e, 0xb1, 0xf1, 0x0b, + 0x03, 0xb5, 0xe2, 0x60, 0x08, 0xcc, 0x53, 0xc3, 0xf1, 0x85, 0x70, 0xa7, 0x9f, 0x8d, 0x0b, 0x3d, + 0xa1, 0xc3, 0xdd, 0x9b, 0xc6, 0xad, 0x1b, 0xf6, 0xbd, 0x74, 0xd2, 0x6e, 0x3d, 0xd9, 0x18, 0xf5, + 0xef, 0xa4, 0x6d, 0x6e, 0xf6, 0x5e, 0x8e, 0x43, 0xa0, 0xff, 0x93, 0xa3, 0xf3, 0x7b, 0x0d, 0x1d, + 0x6d, 0x5c, 0x6c, 0xfc, 0x1d, 0xc2, 0xa2, 0x2f, 0x21, 0x4a, 0xc0, 0x7d, 0x98, 0x7f, 0xe6, 0xb8, + 0x08, 0xf4, 0x6c, 0xab, 0x76, 0xab, 0xd8, 0x11, 0x7c, 0xbe, 0x12, 0x41, 0xd7, 0xa8, 0xf0, 0x2f, + 0x06, 0x6a, 0xb8, 0x79, 0x1a, 0x70, 0x2f, 0x84, 0x3b, 0xdd, 0xcd, 0x87, 0x6f, 0x73, 0xe5, 0x48, + 0x77, 0x91, 0x74, 0x1a, 0xa8, 0x68, 0x6c, 0x7f, 0x5c, 0xbc, 0x50, 0xa3, 0xe4, 0xa3, 0xe5, 0xa4, + 0x59, 0x49, 0xee, 0x0c, 0x29, 0xef, 0x7b, 0x9e, 0xf8, 0x19, 0x5c, 0x3d, 0xe5, 0xda, 0xbc, 0xa4, + 0xee, 0x4a, 0x04, 0x5d, 0xa3, 0xc2, 0x5f, 0xa3, 0xa6, 0x13, 0x47, 0x11, 0x04, 0xea, 0xdb, 0xbc, + 0xbf, 0x7a, 0x64, 0x35, 0xfb, 0x93, 0x82, 0xd3, 0x7c, 0x50, 0xf2, 0xd2, 0xa5, 0xe8, 0x4c, 0xef, + 0x82, 0xe4, 0x11, 0xb8, 0x53, 0x7d, 0xad, 0xac, 0xef, 0x96, 0xbc, 0x74, 0x29, 0x1a, 0x9f, 0xa0, + 0x3a, 0x3c, 0x0f, 0xc1, 0x99, 0x36, 0x74, 0x4f, 0xab, 0x3f, 0x2a, 0xd4, 0xf5, 0xd3, 0x05, 0x1f, + 0x2d, 0x45, 0x62, 0x07, 0x21, 0x47, 0x04, 0x2e, 0xcf, 0x7f, 0x32, 0xde, 0xd3, 0x83, 0xb0, 0xb6, + 0xbb, 0x48, 0x0f, 0xa6, 0xba, 0xf9, 0x07, 0x7b, 0x66, 0x92, 0x74, 0x01, 0xdb, 0xf2, 0x10, 0x5e, + 0x1d, 0x13, 0x3e, 0x40, 0xd5, 0x11, 0x8c, 0xf5, 0x12, 0xdd, 0xa0, 0xd9, 0x23, 0xbe, 0x87, 0x6a, + 0x09, 0xf3, 0x62, 0x28, 0x2e, 0xf4, 0x67, 0xdb, 0xbd, 0xc7, 0x25, 0xf7, 0x81, 0xe6, 0xc2, 0xaf, + 0x76, 0x4e, 0x0c, 0xfb, 0x9b, 0xab, 0x6b, 0xb3, 0xf2, 0xf2, 0xda, 0xac, 0xbc, 0xba, 0x36, 0x2b, + 0x2f, 0x52, 0xd3, 0xb8, 0x4a, 0x4d, 0xe3, 0x65, 0x6a, 0x1a, 0xaf, 0x52, 0xd3, 0xf8, 0x3b, 0x35, + 0x8d, 0x5f, 0xff, 0x31, 0x2b, 0xdf, 0x1f, 0x6d, 0xfc, 0x9b, 0xf3, 0x5f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x96, 0x9a, 0x3a, 0xb5, 0x1b, 0x09, 0x00, 0x00, } -func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { +func (m *Eviction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -744,104 +268,12 @@ func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AllowedCSIDriver) MarshalTo(dAtA []byte) (int, error) { +func (m *Eviction) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AllowedCSIDriver) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AllowedFlexVolume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AllowedFlexVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i -= len(m.Driver) - copy(dAtA[i:], m.Driver) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *AllowedHostPath) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AllowedHostPath) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AllowedHostPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - i -= len(m.PathPrefix) - copy(dAtA[i:], m.PathPrefix) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PathPrefix))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Eviction) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Eviction) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Eviction) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *Eviction) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -871,106 +303,6 @@ func (m *Eviction) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *FSGroupStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FSGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FSGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ranges) > 0 { - for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - i -= len(m.Rule) - copy(dAtA[i:], m.Rule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *HostPortRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HostPortRange) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *HostPortRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - i-- - dAtA[i] = 0x10 - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - -func (m *IDRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *IDRange) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IDRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - i-- - dAtA[i] = 0x10 - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - func (m *PodDisruptionBudget) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1218,3446 +550,247 @@ func (m *PodDisruptionBudgetStatus) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *PodSecurityPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ } - return dAtA[:n], nil -} - -func (m *PodSecurityPolicy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + dAtA[offset] = uint8(v) + return base } - -func (m *PodSecurityPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *Eviction) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.DeleteOptions != nil { + l = m.DeleteOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return n } -func (m *PodSecurityPolicyList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *PodDisruptionBudget) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *PodSecurityPolicyList) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (m *PodSecurityPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *PodDisruptionBudgetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return n } -func (m *PodSecurityPolicySpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *PodDisruptionBudgetSpec) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PodSecurityPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if m.RuntimeClass != nil { - { - size, err := m.RuntimeClass.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xc2 - } - if len(m.AllowedCSIDrivers) > 0 { - for iNdEx := len(m.AllowedCSIDrivers) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AllowedCSIDrivers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xba - } - } - if m.RunAsGroup != nil { - { - size, err := m.RunAsGroup.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xb2 - } - if len(m.AllowedProcMountTypes) > 0 { - for iNdEx := len(m.AllowedProcMountTypes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.AllowedProcMountTypes[iNdEx]) - copy(dAtA[i:], m.AllowedProcMountTypes[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedProcMountTypes[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xaa - } - } - if len(m.ForbiddenSysctls) > 0 { - for iNdEx := len(m.ForbiddenSysctls) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.ForbiddenSysctls[iNdEx]) - copy(dAtA[i:], m.ForbiddenSysctls[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ForbiddenSysctls[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xa2 - } - } - if len(m.AllowedUnsafeSysctls) > 0 { - for iNdEx := len(m.AllowedUnsafeSysctls) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.AllowedUnsafeSysctls[iNdEx]) - copy(dAtA[i:], m.AllowedUnsafeSysctls[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedUnsafeSysctls[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x9a - } - } - if len(m.AllowedFlexVolumes) > 0 { - for iNdEx := len(m.AllowedFlexVolumes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AllowedFlexVolumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x92 - } - } - if len(m.AllowedHostPaths) > 0 { - for iNdEx := len(m.AllowedHostPaths) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AllowedHostPaths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x8a - } + if m.MinAvailable != nil { + l = m.MinAvailable.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.AllowPrivilegeEscalation != nil { - i-- - if *m.AllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x80 + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.DefaultAllowPrivilegeEscalation != nil { - i-- - if *m.DefaultAllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x78 + if m.MaxUnavailable != nil { + l = m.MaxUnavailable.Size() + n += 1 + l + sovGenerated(uint64(l)) } - i-- - if m.ReadOnlyRootFilesystem { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.UnhealthyPodEvictionPolicy != nil { + l = len(*m.UnhealthyPodEvictionPolicy) + n += 1 + l + sovGenerated(uint64(l)) } - i-- - dAtA[i] = 0x70 - { - size, err := m.FSGroup.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + return n +} + +func (m *PodDisruptionBudgetStatus) Size() (n int) { + if m == nil { + return 0 } - i-- - dAtA[i] = 0x6a - { - size, err := m.SupplementalGroups.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + var l int + _ = l + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + if len(m.DisruptedPods) > 0 { + for k, v := range m.DisruptedPods { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0x62 - { - size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + n += 1 + sovGenerated(uint64(m.DisruptionsAllowed)) + n += 1 + sovGenerated(uint64(m.CurrentHealthy)) + n += 1 + sovGenerated(uint64(m.DesiredHealthy)) + n += 1 + sovGenerated(uint64(m.ExpectedPods)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0x5a - { - size, err := m.SELinux.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Eviction) String() string { + if this == nil { + return "nil" } - i-- - dAtA[i] = 0x52 - i-- - if m.HostIPC { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + s := strings.Join([]string{`&Eviction{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DeleteOptions:` + strings.Replace(fmt.Sprintf("%v", this.DeleteOptions), "DeleteOptions", "v1.DeleteOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudget) String() string { + if this == nil { + return "nil" } - i-- - dAtA[i] = 0x48 - i-- - if m.HostPID { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + s := strings.Join([]string{`&PodDisruptionBudget{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodDisruptionBudgetSpec", "PodDisruptionBudgetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodDisruptionBudgetStatus", "PodDisruptionBudgetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetList) String() string { + if this == nil { + return "nil" } - i-- - dAtA[i] = 0x40 - if len(m.HostPorts) > 0 { - for iNdEx := len(m.HostPorts) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.HostPorts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } + repeatedStringForItems := "[]PodDisruptionBudget{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + "," } - i-- - if m.HostNetwork { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + repeatedStringForItems += "}" + s := strings.Join([]string{`&PodDisruptionBudgetList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetSpec) String() string { + if this == nil { + return "nil" } - i-- - dAtA[i] = 0x30 - if len(m.Volumes) > 0 { - for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Volumes[iNdEx]) - copy(dAtA[i:], m.Volumes[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volumes[iNdEx]))) - i-- - dAtA[i] = 0x2a - } + s := strings.Join([]string{`&PodDisruptionBudgetSpec{`, + `MinAvailable:` + strings.Replace(fmt.Sprintf("%v", this.MinAvailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `UnhealthyPodEvictionPolicy:` + valueToStringGenerated(this.UnhealthyPodEvictionPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetStatus) String() string { + if this == nil { + return "nil" } - if len(m.AllowedCapabilities) > 0 { - for iNdEx := len(m.AllowedCapabilities) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.AllowedCapabilities[iNdEx]) - copy(dAtA[i:], m.AllowedCapabilities[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedCapabilities[iNdEx]))) - i-- - dAtA[i] = 0x22 - } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," } - if len(m.RequiredDropCapabilities) > 0 { - for iNdEx := len(m.RequiredDropCapabilities) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.RequiredDropCapabilities[iNdEx]) - copy(dAtA[i:], m.RequiredDropCapabilities[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RequiredDropCapabilities[iNdEx]))) - i-- - dAtA[i] = 0x1a - } + repeatedStringForConditions += "}" + keysForDisruptedPods := make([]string, 0, len(this.DisruptedPods)) + for k := range this.DisruptedPods { + keysForDisruptedPods = append(keysForDisruptedPods, k) } - if len(m.DefaultAddCapabilities) > 0 { - for iNdEx := len(m.DefaultAddCapabilities) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.DefaultAddCapabilities[iNdEx]) - copy(dAtA[i:], m.DefaultAddCapabilities[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DefaultAddCapabilities[iNdEx]))) - i-- - dAtA[i] = 0x12 - } + github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) + mapStringForDisruptedPods := "map[string]v1.Time{" + for _, k := range keysForDisruptedPods { + mapStringForDisruptedPods += fmt.Sprintf("%v: %v,", k, this.DisruptedPods[k]) } - i-- - if m.Privileged { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + mapStringForDisruptedPods += "}" + s := strings.Join([]string{`&PodDisruptionBudgetStatus{`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `DisruptedPods:` + mapStringForDisruptedPods + `,`, + `DisruptionsAllowed:` + fmt.Sprintf("%v", this.DisruptionsAllowed) + `,`, + `CurrentHealthy:` + fmt.Sprintf("%v", this.CurrentHealthy) + `,`, + `DesiredHealthy:` + fmt.Sprintf("%v", this.DesiredHealthy) + `,`, + `ExpectedPods:` + fmt.Sprintf("%v", this.ExpectedPods) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" } - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) } - -func (m *RunAsGroupStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RunAsGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RunAsGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ranges) > 0 { - for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - i -= len(m.Rule) - copy(dAtA[i:], m.Rule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *RunAsUserStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RunAsUserStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RunAsUserStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ranges) > 0 { - for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - i -= len(m.Rule) - copy(dAtA[i:], m.Rule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *RuntimeClassStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RuntimeClassStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RuntimeClassStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.DefaultRuntimeClassName != nil { - i -= len(*m.DefaultRuntimeClassName) - copy(dAtA[i:], *m.DefaultRuntimeClassName) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.DefaultRuntimeClassName))) - i-- - dAtA[i] = 0x12 - } - if len(m.AllowedRuntimeClassNames) > 0 { - for iNdEx := len(m.AllowedRuntimeClassNames) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.AllowedRuntimeClassNames[iNdEx]) - copy(dAtA[i:], m.AllowedRuntimeClassNames[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedRuntimeClassNames[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *SELinuxStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SELinuxStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SELinuxStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.SELinuxOptions != nil { - { - size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Rule) - copy(dAtA[i:], m.Rule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *SupplementalGroupsStrategyOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SupplementalGroupsStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SupplementalGroupsStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ranges) > 0 { - for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - i -= len(m.Rule) - copy(dAtA[i:], m.Rule) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *AllowedCSIDriver) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *AllowedFlexVolume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Driver) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *AllowedHostPath) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PathPrefix) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n -} - -func (m *Eviction) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.DeleteOptions != nil { - l = m.DeleteOptions.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *FSGroupStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Rule) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *HostPortRange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Min)) - n += 1 + sovGenerated(uint64(m.Max)) - return n -} - -func (m *IDRange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Min)) - n += 1 + sovGenerated(uint64(m.Max)) - return n -} - -func (m *PodDisruptionBudget) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PodDisruptionBudgetList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PodDisruptionBudgetSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.MinAvailable != nil { - l = m.MinAvailable.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Selector != nil { - l = m.Selector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.MaxUnavailable != nil { - l = m.MaxUnavailable.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.UnhealthyPodEvictionPolicy != nil { - l = len(*m.UnhealthyPodEvictionPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *PodDisruptionBudgetStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovGenerated(uint64(m.ObservedGeneration)) - if len(m.DisruptedPods) > 0 { - for k, v := range m.DisruptedPods { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - n += 1 + sovGenerated(uint64(m.DisruptionsAllowed)) - n += 1 + sovGenerated(uint64(m.CurrentHealthy)) - n += 1 + sovGenerated(uint64(m.DesiredHealthy)) - n += 1 + sovGenerated(uint64(m.ExpectedPods)) - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PodSecurityPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PodSecurityPolicyList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *PodSecurityPolicySpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - if len(m.DefaultAddCapabilities) > 0 { - for _, s := range m.DefaultAddCapabilities { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.RequiredDropCapabilities) > 0 { - for _, s := range m.RequiredDropCapabilities { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.AllowedCapabilities) > 0 { - for _, s := range m.AllowedCapabilities { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Volumes) > 0 { - for _, s := range m.Volumes { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - n += 2 - if len(m.HostPorts) > 0 { - for _, e := range m.HostPorts { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - n += 2 - n += 2 - l = m.SELinux.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.RunAsUser.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.SupplementalGroups.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.FSGroup.Size() - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if m.DefaultAllowPrivilegeEscalation != nil { - n += 2 - } - if m.AllowPrivilegeEscalation != nil { - n += 3 - } - if len(m.AllowedHostPaths) > 0 { - for _, e := range m.AllowedHostPaths { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - if len(m.AllowedFlexVolumes) > 0 { - for _, e := range m.AllowedFlexVolumes { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - if len(m.AllowedUnsafeSysctls) > 0 { - for _, s := range m.AllowedUnsafeSysctls { - l = len(s) - n += 2 + l + sovGenerated(uint64(l)) - } - } - if len(m.ForbiddenSysctls) > 0 { - for _, s := range m.ForbiddenSysctls { - l = len(s) - n += 2 + l + sovGenerated(uint64(l)) - } - } - if len(m.AllowedProcMountTypes) > 0 { - for _, s := range m.AllowedProcMountTypes { - l = len(s) - n += 2 + l + sovGenerated(uint64(l)) - } - } - if m.RunAsGroup != nil { - l = m.RunAsGroup.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if len(m.AllowedCSIDrivers) > 0 { - for _, e := range m.AllowedCSIDrivers { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - if m.RuntimeClass != nil { - l = m.RuntimeClass.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *RunAsGroupStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Rule) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *RunAsUserStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Rule) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *RuntimeClassStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.AllowedRuntimeClassNames) > 0 { - for _, s := range m.AllowedRuntimeClassNames { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.DefaultRuntimeClassName != nil { - l = len(*m.DefaultRuntimeClassName) - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *SELinuxStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Rule) - n += 1 + l + sovGenerated(uint64(l)) - if m.SELinuxOptions != nil { - l = m.SELinuxOptions.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - -func (m *SupplementalGroupsStrategyOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Rule) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Ranges) > 0 { - for _, e := range m.Ranges { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *AllowedCSIDriver) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AllowedCSIDriver{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *AllowedFlexVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AllowedFlexVolume{`, - `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, - `}`, - }, "") - return s -} -func (this *AllowedHostPath) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AllowedHostPath{`, - `PathPrefix:` + fmt.Sprintf("%v", this.PathPrefix) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *Eviction) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Eviction{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `DeleteOptions:` + strings.Replace(fmt.Sprintf("%v", this.DeleteOptions), "DeleteOptions", "v1.DeleteOptions", 1) + `,`, - `}`, - }, "") - return s -} -func (this *FSGroupStrategyOptions) String() string { - if this == nil { - return "nil" - } - repeatedStringForRanges := "[]IDRange{" - for _, f := range this.Ranges { - repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," - } - repeatedStringForRanges += "}" - s := strings.Join([]string{`&FSGroupStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + repeatedStringForRanges + `,`, - `}`, - }, "") - return s -} -func (this *HostPortRange) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HostPortRange{`, - `Min:` + fmt.Sprintf("%v", this.Min) + `,`, - `Max:` + fmt.Sprintf("%v", this.Max) + `,`, - `}`, - }, "") - return s -} -func (this *IDRange) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&IDRange{`, - `Min:` + fmt.Sprintf("%v", this.Min) + `,`, - `Max:` + fmt.Sprintf("%v", this.Max) + `,`, - `}`, - }, "") - return s -} -func (this *PodDisruptionBudget) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PodDisruptionBudget{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodDisruptionBudgetSpec", "PodDisruptionBudgetSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodDisruptionBudgetStatus", "PodDisruptionBudgetStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodDisruptionBudgetList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]PodDisruptionBudget{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&PodDisruptionBudgetList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s -} -func (this *PodDisruptionBudgetSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PodDisruptionBudgetSpec{`, - `MinAvailable:` + strings.Replace(fmt.Sprintf("%v", this.MinAvailable), "IntOrString", "intstr.IntOrString", 1) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, - `UnhealthyPodEvictionPolicy:` + valueToStringGenerated(this.UnhealthyPodEvictionPolicy) + `,`, - `}`, - }, "") - return s -} -func (this *PodDisruptionBudgetStatus) String() string { - if this == nil { - return "nil" - } - repeatedStringForConditions := "[]Condition{" - for _, f := range this.Conditions { - repeatedStringForConditions += fmt.Sprintf("%v", f) + "," - } - repeatedStringForConditions += "}" - keysForDisruptedPods := make([]string, 0, len(this.DisruptedPods)) - for k := range this.DisruptedPods { - keysForDisruptedPods = append(keysForDisruptedPods, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) - mapStringForDisruptedPods := "map[string]v1.Time{" - for _, k := range keysForDisruptedPods { - mapStringForDisruptedPods += fmt.Sprintf("%v: %v,", k, this.DisruptedPods[k]) - } - mapStringForDisruptedPods += "}" - s := strings.Join([]string{`&PodDisruptionBudgetStatus{`, - `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, - `DisruptedPods:` + mapStringForDisruptedPods + `,`, - `DisruptionsAllowed:` + fmt.Sprintf("%v", this.DisruptionsAllowed) + `,`, - `CurrentHealthy:` + fmt.Sprintf("%v", this.CurrentHealthy) + `,`, - `DesiredHealthy:` + fmt.Sprintf("%v", this.DesiredHealthy) + `,`, - `ExpectedPods:` + fmt.Sprintf("%v", this.ExpectedPods) + `,`, - `Conditions:` + repeatedStringForConditions + `,`, - `}`, - }, "") - return s -} -func (this *PodSecurityPolicy) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PodSecurityPolicy{`, - `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySpec", "PodSecurityPolicySpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodSecurityPolicyList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]PodSecurityPolicy{" - for _, f := range this.Items { - repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&PodSecurityPolicyList{`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + repeatedStringForItems + `,`, - `}`, - }, "") - return s -} -func (this *PodSecurityPolicySpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForHostPorts := "[]HostPortRange{" - for _, f := range this.HostPorts { - repeatedStringForHostPorts += strings.Replace(strings.Replace(f.String(), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + "," - } - repeatedStringForHostPorts += "}" - repeatedStringForAllowedHostPaths := "[]AllowedHostPath{" - for _, f := range this.AllowedHostPaths { - repeatedStringForAllowedHostPaths += strings.Replace(strings.Replace(f.String(), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + "," - } - repeatedStringForAllowedHostPaths += "}" - repeatedStringForAllowedFlexVolumes := "[]AllowedFlexVolume{" - for _, f := range this.AllowedFlexVolumes { - repeatedStringForAllowedFlexVolumes += strings.Replace(strings.Replace(f.String(), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + "," - } - repeatedStringForAllowedFlexVolumes += "}" - repeatedStringForAllowedCSIDrivers := "[]AllowedCSIDriver{" - for _, f := range this.AllowedCSIDrivers { - repeatedStringForAllowedCSIDrivers += strings.Replace(strings.Replace(f.String(), "AllowedCSIDriver", "AllowedCSIDriver", 1), `&`, ``, 1) + "," - } - repeatedStringForAllowedCSIDrivers += "}" - s := strings.Join([]string{`&PodSecurityPolicySpec{`, - `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, - `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, - `RequiredDropCapabilities:` + fmt.Sprintf("%v", this.RequiredDropCapabilities) + `,`, - `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, - `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, - `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, - `HostPorts:` + repeatedStringForHostPorts + `,`, - `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, - `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, - `SELinux:` + strings.Replace(strings.Replace(this.SELinux.String(), "SELinuxStrategyOptions", "SELinuxStrategyOptions", 1), `&`, ``, 1) + `,`, - `RunAsUser:` + strings.Replace(strings.Replace(this.RunAsUser.String(), "RunAsUserStrategyOptions", "RunAsUserStrategyOptions", 1), `&`, ``, 1) + `,`, - `SupplementalGroups:` + strings.Replace(strings.Replace(this.SupplementalGroups.String(), "SupplementalGroupsStrategyOptions", "SupplementalGroupsStrategyOptions", 1), `&`, ``, 1) + `,`, - `FSGroup:` + strings.Replace(strings.Replace(this.FSGroup.String(), "FSGroupStrategyOptions", "FSGroupStrategyOptions", 1), `&`, ``, 1) + `,`, - `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, - `DefaultAllowPrivilegeEscalation:` + valueToStringGenerated(this.DefaultAllowPrivilegeEscalation) + `,`, - `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, - `AllowedHostPaths:` + repeatedStringForAllowedHostPaths + `,`, - `AllowedFlexVolumes:` + repeatedStringForAllowedFlexVolumes + `,`, - `AllowedUnsafeSysctls:` + fmt.Sprintf("%v", this.AllowedUnsafeSysctls) + `,`, - `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, - `AllowedProcMountTypes:` + fmt.Sprintf("%v", this.AllowedProcMountTypes) + `,`, - `RunAsGroup:` + strings.Replace(this.RunAsGroup.String(), "RunAsGroupStrategyOptions", "RunAsGroupStrategyOptions", 1) + `,`, - `AllowedCSIDrivers:` + repeatedStringForAllowedCSIDrivers + `,`, - `RuntimeClass:` + strings.Replace(this.RuntimeClass.String(), "RuntimeClassStrategyOptions", "RuntimeClassStrategyOptions", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RunAsGroupStrategyOptions) String() string { - if this == nil { - return "nil" - } - repeatedStringForRanges := "[]IDRange{" - for _, f := range this.Ranges { - repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," - } - repeatedStringForRanges += "}" - s := strings.Join([]string{`&RunAsGroupStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + repeatedStringForRanges + `,`, - `}`, - }, "") - return s -} -func (this *RunAsUserStrategyOptions) String() string { - if this == nil { - return "nil" - } - repeatedStringForRanges := "[]IDRange{" - for _, f := range this.Ranges { - repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," - } - repeatedStringForRanges += "}" - s := strings.Join([]string{`&RunAsUserStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + repeatedStringForRanges + `,`, - `}`, - }, "") - return s -} -func (this *RuntimeClassStrategyOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RuntimeClassStrategyOptions{`, - `AllowedRuntimeClassNames:` + fmt.Sprintf("%v", this.AllowedRuntimeClassNames) + `,`, - `DefaultRuntimeClassName:` + valueToStringGenerated(this.DefaultRuntimeClassName) + `,`, - `}`, - }, "") - return s -} -func (this *SELinuxStrategyOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SELinuxStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "v11.SELinuxOptions", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SupplementalGroupsStrategyOptions) String() string { - if this == nil { - return "nil" - } - repeatedStringForRanges := "[]IDRange{" - for _, f := range this.Ranges { - repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," - } - repeatedStringForRanges += "}" - s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + repeatedStringForRanges + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllowedCSIDriver: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedCSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Driver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllowedHostPath: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedHostPath: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PathPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Eviction) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Eviction: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Eviction: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeleteOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DeleteOptions == nil { - m.DeleteOptions = &v1.DeleteOptions{} - } - if err := m.DeleteOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FSGroupStrategyOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FSGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Rule = FSGroupStrategyType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HostPortRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HostPortRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HostPortRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) - } - m.Min = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Min |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) - } - m.Max = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Max |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IDRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: IDRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IDRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) - } - m.Min = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Min |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) - } - m.Max = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Max |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudget: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudget: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, PodDisruptionBudget{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinAvailable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MinAvailable == nil { - m.MinAvailable = &intstr.IntOrString{} - } - if err := m.MinAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Selector == nil { - m.Selector = &v1.LabelSelector{} - } - if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxUnavailable == nil { - m.MaxUnavailable = &intstr.IntOrString{} - } - if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnhealthyPodEvictionPolicy", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := UnhealthyPodEvictionPolicyType(dAtA[iNdEx:postIndex]) - m.UnhealthyPodEvictionPolicy = &s - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) - } - m.ObservedGeneration = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ObservedGeneration |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DisruptedPods", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DisruptedPods == nil { - m.DisruptedPods = make(map[string]v1.Time) - } - var mapkey string - mapvalue := &v1.Time{} - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &v1.Time{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.DisruptedPods[mapkey] = *mapvalue - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DisruptionsAllowed", wireType) - } - m.DisruptionsAllowed = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DisruptionsAllowed |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CurrentHealthy", wireType) - } - m.CurrentHealthy = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CurrentHealthy |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredHealthy", wireType) - } - m.DesiredHealthy = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DesiredHealthy |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPods", wireType) - } - m.ExpectedPods = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ExpectedPods |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Conditions = append(m.Conditions, v1.Condition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicyList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicyList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicyList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, PodSecurityPolicy{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicySpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicySpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Privileged = bool(v != 0) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultAddCapabilities", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DefaultAddCapabilities = append(m.DefaultAddCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequiredDropCapabilities", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequiredDropCapabilities = append(m.RequiredDropCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedCapabilities", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowedCapabilities = append(m.AllowedCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Volumes = append(m.Volumes, FSType(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostNetwork", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HostNetwork = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostPorts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HostPorts = append(m.HostPorts, HostPortRange{}) - if err := m.HostPorts[len(m.HostPorts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostPID", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HostPID = bool(v != 0) - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostIPC", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HostIPC = bool(v != 0) - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SELinux", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SELinux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SupplementalGroups.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.FSGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyRootFilesystem", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnlyRootFilesystem = bool(v != 0) - case 15: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultAllowPrivilegeEscalation", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.DefaultAllowPrivilegeEscalation = &b - case 16: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegeEscalation", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } +func (m *Eviction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - b := bool(v != 0) - m.AllowPrivilegeEscalation = &b - case 17: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Eviction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Eviction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4684,14 +817,13 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedHostPaths = append(m.AllowedHostPaths, AllowedHostPath{}) - if err := m.AllowedHostPaths[len(m.AllowedHostPaths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 18: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DeleteOptions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4718,110 +850,66 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) - if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.DeleteOptions == nil { + m.DeleteOptions = &v1.DeleteOptions{} + } + if err := m.DeleteOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 19: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 20: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 21: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedProcMountTypes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - m.AllowedProcMountTypes = append(m.AllowedProcMountTypes, k8s_io_api_core_v1.ProcMountType(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 22: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodDisruptionBudget: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodDisruptionBudget: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4848,16 +936,13 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RunAsGroup == nil { - m.RunAsGroup = &RunAsGroupStrategyOptions{} - } - if err := m.RunAsGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 23: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedCSIDrivers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4884,14 +969,13 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedCSIDrivers = append(m.AllowedCSIDrivers, AllowedCSIDriver{}) - if err := m.AllowedCSIDrivers[len(m.AllowedCSIDrivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 24: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClass", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4918,10 +1002,7 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RuntimeClass == nil { - m.RuntimeClass = &RuntimeClassStrategyOptions{} - } - if err := m.RuntimeClass.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4946,7 +1027,7 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4969,17 +1050,17 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RunAsGroupStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RunAsGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4989,27 +1070,28 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Rule = RunAsGroupStrategy(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5036,8 +1118,8 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, PodDisruptionBudget{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5062,7 +1144,7 @@ func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5085,17 +1167,17 @@ func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MinAvailable", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5105,27 +1187,31 @@ func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Rule = RunAsUserStrategy(dAtA[iNdEx:postIndex]) + if m.MinAvailable == nil { + m.MinAvailable = &intstr.IntOrString{} + } + if err := m.MinAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5152,66 +1238,18 @@ func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RuntimeClassStrategyOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeClassStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedRuntimeClassNames", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5221,27 +1259,31 @@ func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedRuntimeClassNames = append(m.AllowedRuntimeClassNames, string(dAtA[iNdEx:postIndex])) + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultRuntimeClassName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UnhealthyPodEvictionPolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5269,8 +1311,8 @@ func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.DefaultRuntimeClassName = &s + s := UnhealthyPodEvictionPolicyType(dAtA[iNdEx:postIndex]) + m.UnhealthyPodEvictionPolicy = &s iNdEx = postIndex default: iNdEx = preIndex @@ -5293,7 +1335,7 @@ func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5316,17 +1358,17 @@ func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SELinuxStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SELinuxStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) } - var stringLen uint64 + m.ObservedGeneration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5336,27 +1378,14 @@ func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Rule = SELinuxStrategy(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SELinuxOptions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DisruptedPods", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5383,68 +1412,149 @@ func (m *SELinuxStrategyOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.SELinuxOptions == nil { - m.SELinuxOptions = &v11.SELinuxOptions{} + if m.DisruptedPods == nil { + m.DisruptedPods = make(map[string]v1.Time) } - if err := m.SELinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey string + mapvalue := &v1.Time{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &v1.Time{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.DisruptedPods[mapkey] = *mapvalue iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisruptionsAllowed", wireType) } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + m.DisruptionsAllowed = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DisruptionsAllowed |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { - return io.ErrUnexpectedEOF + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentHealthy", wireType) } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + m.CurrentHealthy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentHealthy |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SupplementalGroupsStrategyOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SupplementalGroupsStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredHealthy", wireType) } - var stringLen uint64 + m.DesiredHealthy = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5454,27 +1564,33 @@ func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.DesiredHealthy |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPods", wireType) } - if postIndex > l { - return io.ErrUnexpectedEOF + m.ExpectedPods = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpectedPods |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - m.Rule = SupplementalGroupsStrategyType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5501,8 +1617,8 @@ func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.proto index 16301c236afb..d1409913f1e2 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/generated.proto @@ -21,7 +21,6 @@ syntax = "proto2"; package k8s.io.api.policy.v1beta1; -import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -30,35 +29,6 @@ import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "k8s.io/api/policy/v1beta1"; -// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. -message AllowedCSIDriver { - // Name is the registered name of the CSI driver - optional string name = 1; -} - -// AllowedFlexVolume represents a single Flexvolume that is allowed to be used. -message AllowedFlexVolume { - // driver is the name of the Flexvolume driver. - optional string driver = 1; -} - -// AllowedHostPath defines the host volume conditions that will be enabled by a policy -// for pods to use. It requires the path prefix to be defined. -message AllowedHostPath { - // pathPrefix is the path prefix that the host volume must match. - // It does not support `*`. - // Trailing slashes are trimmed when validating the path prefix with a host path. - // - // Examples: - // `/foo` would allow `/foo`, `/foo/` and `/foo/bar` - // `/foo` would not allow `/food` or `/etc/foo` - optional string pathPrefix = 1; - - // when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly. - // +optional - optional bool readOnly = 2; -} - // Eviction evicts a pod from its node subject to certain policies and safety constraints. // This is a subresource of Pod. A request to cause such an eviction is // created by POSTing to .../pods//evictions. @@ -72,37 +42,6 @@ message Eviction { optional k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions deleteOptions = 2; } -// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. -message FSGroupStrategyOptions { - // rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - // +optional - optional string rule = 1; - - // ranges are the allowed ranges of fs groups. If you would like to force a single - // fs group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - repeated IDRange ranges = 2; -} - -// HostPortRange defines a range of host ports that will be enabled by a policy -// for pods to use. It requires both the start and end to be defined. -message HostPortRange { - // min is the start of the range, inclusive. - optional int32 min = 1; - - // max is the end of the range, inclusive. - optional int32 max = 2; -} - -// IDRange provides a min/max of an allowed range of IDs. -message IDRange { - // min is the start of the range, inclusive. - optional int64 min = 1; - - // max is the end of the range, inclusive. - optional int64 max = 2; -} - // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods message PodDisruptionBudget { // Standard object's metadata. @@ -238,219 +177,3 @@ message PodDisruptionBudgetStatus { repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7; } -// PodSecurityPolicy governs the ability to make requests that affect the Security Context -// that will be applied to a pod and container. -// Deprecated in 1.21. -message PodSecurityPolicy { - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // spec defines the policy enforced. - // +optional - optional PodSecurityPolicySpec spec = 2; -} - -// PodSecurityPolicyList is a list of PodSecurityPolicy objects. -message PodSecurityPolicyList { - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // items is a list of schema objects. - repeated PodSecurityPolicy items = 2; -} - -// PodSecurityPolicySpec defines the policy enforced. -message PodSecurityPolicySpec { - // privileged determines if a pod can request to be run as privileged. - // +optional - optional bool privileged = 1; - - // defaultAddCapabilities is the default set of capabilities that will be added to the container - // unless the pod spec specifically drops the capability. You may not list a capability in both - // defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly - // allowed, and need not be included in the allowedCapabilities list. - // +optional - repeated string defaultAddCapabilities = 2; - - // requiredDropCapabilities are the capabilities that will be dropped from the container. These - // are required to be dropped and cannot be added. - // +optional - repeated string requiredDropCapabilities = 3; - - // allowedCapabilities is a list of capabilities that can be requested to add to the container. - // Capabilities in this field may be added at the pod author's discretion. - // You must not list a capability in both allowedCapabilities and requiredDropCapabilities. - // +optional - repeated string allowedCapabilities = 4; - - // volumes is an allowlist of volume plugins. Empty indicates that - // no volumes may be used. To allow all volumes you may use '*'. - // +optional - repeated string volumes = 5; - - // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - // +optional - optional bool hostNetwork = 6; - - // hostPorts determines which host port ranges are allowed to be exposed. - // +optional - repeated HostPortRange hostPorts = 7; - - // hostPID determines if the policy allows the use of HostPID in the pod spec. - // +optional - optional bool hostPID = 8; - - // hostIPC determines if the policy allows the use of HostIPC in the pod spec. - // +optional - optional bool hostIPC = 9; - - // seLinux is the strategy that will dictate the allowable labels that may be set. - optional SELinuxStrategyOptions seLinux = 10; - - // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - optional RunAsUserStrategyOptions runAsUser = 11; - - // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. - // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the - // RunAsGroup feature gate to be enabled. - // +optional - optional RunAsGroupStrategyOptions runAsGroup = 22; - - // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - optional SupplementalGroupsStrategyOptions supplementalGroups = 12; - - // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext. - optional FSGroupStrategyOptions fsGroup = 13; - - // readOnlyRootFilesystem when set to true will force containers to run with a read only root file - // system. If the container specifically requests to run with a non-read only root file system - // the PSP should deny the pod. - // If set to false the container may run with a read only root file system if it wishes but it - // will not be forced to. - // +optional - optional bool readOnlyRootFilesystem = 14; - - // defaultAllowPrivilegeEscalation controls the default setting for whether a - // process can gain more privileges than its parent process. - // +optional - optional bool defaultAllowPrivilegeEscalation = 15; - - // allowPrivilegeEscalation determines if a pod can request to allow - // privilege escalation. If unspecified, defaults to true. - // +optional - optional bool allowPrivilegeEscalation = 16; - - // allowedHostPaths is an allowlist of host paths. Empty indicates - // that all host paths may be used. - // +optional - repeated AllowedHostPath allowedHostPaths = 17; - - // allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all - // Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes - // is allowed in the "volumes" field. - // +optional - repeated AllowedFlexVolume allowedFlexVolumes = 18; - - // AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. - // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. - // +optional - repeated AllowedCSIDriver allowedCSIDrivers = 23; - - // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. - // Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection. - // - // Examples: - // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. - // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. - // +optional - repeated string allowedUnsafeSysctls = 19; - - // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - // - // Examples: - // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. - // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. - // +optional - repeated string forbiddenSysctls = 20; - - // AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. - // Empty or nil indicates that only the DefaultProcMountType may be used. - // This requires the ProcMountType feature flag to be enabled. - // +optional - repeated string allowedProcMountTypes = 21; - - // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. - // If this field is omitted, the pod's runtimeClassName field is unrestricted. - // Enforcement of this field depends on the RuntimeClass feature gate being enabled. - // +optional - optional RuntimeClassStrategyOptions runtimeClass = 24; -} - -// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. -message RunAsGroupStrategyOptions { - // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. - optional string rule = 1; - - // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - repeated IDRange ranges = 2; -} - -// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. -message RunAsUserStrategyOptions { - // rule is the strategy that will dictate the allowable RunAsUser values that may be set. - optional string rule = 1; - - // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - repeated IDRange ranges = 2; -} - -// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses -// for a pod. -message RuntimeClassStrategyOptions { - // allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. - // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the - // list. An empty list requires the RuntimeClassName field to be unset. - repeated string allowedRuntimeClassNames = 1; - - // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. - // The default MUST be allowed by the allowedRuntimeClassNames list. - // A value of nil does not mutate the Pod. - // +optional - optional string defaultRuntimeClassName = 2; -} - -// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. -message SELinuxStrategyOptions { - // rule is the strategy that will dictate the allowable labels that may be set. - optional string rule = 1; - - // seLinuxOptions required to run as; required for MustRunAs - // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ - // +optional - optional k8s.io.api.core.v1.SELinuxOptions seLinuxOptions = 2; -} - -// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. -message SupplementalGroupsStrategyOptions { - // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - // +optional - optional string rule = 1; - - // ranges are the allowed ranges of supplemental groups. If you would like to force a single - // supplemental group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - repeated IDRange ranges = 2; -} - diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/register.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/register.go index b3efd6326b5e..d77f13040706 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/register.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/register.go @@ -46,8 +46,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, - &PodSecurityPolicy{}, - &PodSecurityPolicyList{}, &Eviction{}, ) // Add the watch version that applies diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types.go index 1e6b075e32d1..bc5f970d270f 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types.go @@ -17,7 +17,6 @@ limitations under the License. package v1beta1 import ( - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -228,373 +227,3 @@ type Eviction struct { // +optional DeleteOptions *metav1.DeleteOptions `json:"deleteOptions,omitempty" protobuf:"bytes,2,opt,name=deleteOptions"` } - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.10 -// +k8s:prerelease-lifecycle-gen:deprecated=1.21 -// +k8s:prerelease-lifecycle-gen:removed=1.25 - -// PodSecurityPolicy governs the ability to make requests that affect the Security Context -// that will be applied to a pod and container. -// Deprecated in 1.21. -type PodSecurityPolicy struct { - metav1.TypeMeta `json:",inline"` - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // spec defines the policy enforced. - // +optional - Spec PodSecurityPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` -} - -// PodSecurityPolicySpec defines the policy enforced. -type PodSecurityPolicySpec struct { - // privileged determines if a pod can request to be run as privileged. - // +optional - Privileged bool `json:"privileged,omitempty" protobuf:"varint,1,opt,name=privileged"` - // defaultAddCapabilities is the default set of capabilities that will be added to the container - // unless the pod spec specifically drops the capability. You may not list a capability in both - // defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly - // allowed, and need not be included in the allowedCapabilities list. - // +optional - DefaultAddCapabilities []v1.Capability `json:"defaultAddCapabilities,omitempty" protobuf:"bytes,2,rep,name=defaultAddCapabilities,casttype=k8s.io/api/core/v1.Capability"` - // requiredDropCapabilities are the capabilities that will be dropped from the container. These - // are required to be dropped and cannot be added. - // +optional - RequiredDropCapabilities []v1.Capability `json:"requiredDropCapabilities,omitempty" protobuf:"bytes,3,rep,name=requiredDropCapabilities,casttype=k8s.io/api/core/v1.Capability"` - // allowedCapabilities is a list of capabilities that can be requested to add to the container. - // Capabilities in this field may be added at the pod author's discretion. - // You must not list a capability in both allowedCapabilities and requiredDropCapabilities. - // +optional - AllowedCapabilities []v1.Capability `json:"allowedCapabilities,omitempty" protobuf:"bytes,4,rep,name=allowedCapabilities,casttype=k8s.io/api/core/v1.Capability"` - // volumes is an allowlist of volume plugins. Empty indicates that - // no volumes may be used. To allow all volumes you may use '*'. - // +optional - Volumes []FSType `json:"volumes,omitempty" protobuf:"bytes,5,rep,name=volumes,casttype=FSType"` - // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - // +optional - HostNetwork bool `json:"hostNetwork,omitempty" protobuf:"varint,6,opt,name=hostNetwork"` - // hostPorts determines which host port ranges are allowed to be exposed. - // +optional - HostPorts []HostPortRange `json:"hostPorts,omitempty" protobuf:"bytes,7,rep,name=hostPorts"` - // hostPID determines if the policy allows the use of HostPID in the pod spec. - // +optional - HostPID bool `json:"hostPID,omitempty" protobuf:"varint,8,opt,name=hostPID"` - // hostIPC determines if the policy allows the use of HostIPC in the pod spec. - // +optional - HostIPC bool `json:"hostIPC,omitempty" protobuf:"varint,9,opt,name=hostIPC"` - // seLinux is the strategy that will dictate the allowable labels that may be set. - SELinux SELinuxStrategyOptions `json:"seLinux" protobuf:"bytes,10,opt,name=seLinux"` - // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - RunAsUser RunAsUserStrategyOptions `json:"runAsUser" protobuf:"bytes,11,opt,name=runAsUser"` - // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. - // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the - // RunAsGroup feature gate to be enabled. - // +optional - RunAsGroup *RunAsGroupStrategyOptions `json:"runAsGroup,omitempty" protobuf:"bytes,22,opt,name=runAsGroup"` - // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups" protobuf:"bytes,12,opt,name=supplementalGroups"` - // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext. - FSGroup FSGroupStrategyOptions `json:"fsGroup" protobuf:"bytes,13,opt,name=fsGroup"` - // readOnlyRootFilesystem when set to true will force containers to run with a read only root file - // system. If the container specifically requests to run with a non-read only root file system - // the PSP should deny the pod. - // If set to false the container may run with a read only root file system if it wishes but it - // will not be forced to. - // +optional - ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"` - // defaultAllowPrivilegeEscalation controls the default setting for whether a - // process can gain more privileges than its parent process. - // +optional - DefaultAllowPrivilegeEscalation *bool `json:"defaultAllowPrivilegeEscalation,omitempty" protobuf:"varint,15,opt,name=defaultAllowPrivilegeEscalation"` - // allowPrivilegeEscalation determines if a pod can request to allow - // privilege escalation. If unspecified, defaults to true. - // +optional - AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,16,opt,name=allowPrivilegeEscalation"` - // allowedHostPaths is an allowlist of host paths. Empty indicates - // that all host paths may be used. - // +optional - AllowedHostPaths []AllowedHostPath `json:"allowedHostPaths,omitempty" protobuf:"bytes,17,rep,name=allowedHostPaths"` - // allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all - // Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes - // is allowed in the "volumes" field. - // +optional - AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"` - // AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. - // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. - // +optional - AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"` - // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. - // Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection. - // - // Examples: - // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. - // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. - // +optional - AllowedUnsafeSysctls []string `json:"allowedUnsafeSysctls,omitempty" protobuf:"bytes,19,rep,name=allowedUnsafeSysctls"` - // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - // - // Examples: - // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. - // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. - // +optional - ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty" protobuf:"bytes,20,rep,name=forbiddenSysctls"` - // AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. - // Empty or nil indicates that only the DefaultProcMountType may be used. - // This requires the ProcMountType feature flag to be enabled. - // +optional - AllowedProcMountTypes []v1.ProcMountType `json:"allowedProcMountTypes,omitempty" protobuf:"bytes,21,opt,name=allowedProcMountTypes"` - // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. - // If this field is omitted, the pod's runtimeClassName field is unrestricted. - // Enforcement of this field depends on the RuntimeClass feature gate being enabled. - // +optional - RuntimeClass *RuntimeClassStrategyOptions `json:"runtimeClass,omitempty" protobuf:"bytes,24,opt,name=runtimeClass"` -} - -// AllowedHostPath defines the host volume conditions that will be enabled by a policy -// for pods to use. It requires the path prefix to be defined. -type AllowedHostPath struct { - // pathPrefix is the path prefix that the host volume must match. - // It does not support `*`. - // Trailing slashes are trimmed when validating the path prefix with a host path. - // - // Examples: - // `/foo` would allow `/foo`, `/foo/` and `/foo/bar` - // `/foo` would not allow `/food` or `/etc/foo` - PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"` - - // when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly. - // +optional - ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` -} - -// AllowAllCapabilities can be used as a value for the PodSecurityPolicy.AllowAllCapabilities -// field and means that any capabilities are allowed to be requested. -var AllowAllCapabilities v1.Capability = "*" - -// FSType gives strong typing to different file systems that are used by volumes. -type FSType string - -const ( - AzureFile FSType = "azureFile" - Flocker FSType = "flocker" - FlexVolume FSType = "flexVolume" - HostPath FSType = "hostPath" - EmptyDir FSType = "emptyDir" - GCEPersistentDisk FSType = "gcePersistentDisk" - AWSElasticBlockStore FSType = "awsElasticBlockStore" - GitRepo FSType = "gitRepo" - Secret FSType = "secret" - NFS FSType = "nfs" - ISCSI FSType = "iscsi" - Glusterfs FSType = "glusterfs" - PersistentVolumeClaim FSType = "persistentVolumeClaim" - RBD FSType = "rbd" - Cinder FSType = "cinder" - CephFS FSType = "cephFS" - DownwardAPI FSType = "downwardAPI" - FC FSType = "fc" - ConfigMap FSType = "configMap" - VsphereVolume FSType = "vsphereVolume" - Quobyte FSType = "quobyte" - AzureDisk FSType = "azureDisk" - PhotonPersistentDisk FSType = "photonPersistentDisk" - StorageOS FSType = "storageos" - Projected FSType = "projected" - PortworxVolume FSType = "portworxVolume" - ScaleIO FSType = "scaleIO" - CSI FSType = "csi" - Ephemeral FSType = "ephemeral" - All FSType = "*" -) - -// AllowedFlexVolume represents a single Flexvolume that is allowed to be used. -type AllowedFlexVolume struct { - // driver is the name of the Flexvolume driver. - Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` -} - -// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. -type AllowedCSIDriver struct { - // Name is the registered name of the CSI driver - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` -} - -// HostPortRange defines a range of host ports that will be enabled by a policy -// for pods to use. It requires both the start and end to be defined. -type HostPortRange struct { - // min is the start of the range, inclusive. - Min int32 `json:"min" protobuf:"varint,1,opt,name=min"` - // max is the end of the range, inclusive. - Max int32 `json:"max" protobuf:"varint,2,opt,name=max"` -} - -// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. -type SELinuxStrategyOptions struct { - // rule is the strategy that will dictate the allowable labels that may be set. - Rule SELinuxStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=SELinuxStrategy"` - // seLinuxOptions required to run as; required for MustRunAs - // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ - // +optional - SELinuxOptions *v1.SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"` -} - -// SELinuxStrategy denotes strategy types for generating SELinux options for a -// Security Context. -type SELinuxStrategy string - -const ( - // SELinuxStrategyMustRunAs means that container must have SELinux labels of X applied. - SELinuxStrategyMustRunAs SELinuxStrategy = "MustRunAs" - // SELinuxStrategyRunAsAny means that container may make requests for any SELinux context labels. - SELinuxStrategyRunAsAny SELinuxStrategy = "RunAsAny" -) - -// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. -type RunAsUserStrategyOptions struct { - // rule is the strategy that will dictate the allowable RunAsUser values that may be set. - Rule RunAsUserStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsUserStrategy"` - // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` -} - -// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. -type RunAsGroupStrategyOptions struct { - // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. - Rule RunAsGroupStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsGroupStrategy"` - // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` -} - -// IDRange provides a min/max of an allowed range of IDs. -type IDRange struct { - // min is the start of the range, inclusive. - Min int64 `json:"min" protobuf:"varint,1,opt,name=min"` - // max is the end of the range, inclusive. - Max int64 `json:"max" protobuf:"varint,2,opt,name=max"` -} - -// RunAsUserStrategy denotes strategy types for generating RunAsUser values for a -// Security Context. -type RunAsUserStrategy string - -const ( - // RunAsUserStrategyMustRunAs means that container must run as a particular uid. - RunAsUserStrategyMustRunAs RunAsUserStrategy = "MustRunAs" - // RunAsUserStrategyMustRunAsNonRoot means that container must run as a non-root uid. - RunAsUserStrategyMustRunAsNonRoot RunAsUserStrategy = "MustRunAsNonRoot" - // RunAsUserStrategyRunAsAny means that container may make requests for any uid. - RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny" -) - -// RunAsGroupStrategy denotes strategy types for generating RunAsGroup values for a -// Security Context. -type RunAsGroupStrategy string - -const ( - // RunAsGroupStrategyMayRunAs means that container does not need to run with a particular gid. - // However, when RunAsGroup are specified, they have to fall in the defined range. - RunAsGroupStrategyMayRunAs RunAsGroupStrategy = "MayRunAs" - // RunAsGroupStrategyMustRunAs means that container must run as a particular gid. - RunAsGroupStrategyMustRunAs RunAsGroupStrategy = "MustRunAs" - // RunAsUserStrategyRunAsAny means that container may make requests for any gid. - RunAsGroupStrategyRunAsAny RunAsGroupStrategy = "RunAsAny" -) - -// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. -type FSGroupStrategyOptions struct { - // rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - // +optional - Rule FSGroupStrategyType `json:"rule,omitempty" protobuf:"bytes,1,opt,name=rule,casttype=FSGroupStrategyType"` - // ranges are the allowed ranges of fs groups. If you would like to force a single - // fs group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` -} - -// FSGroupStrategyType denotes strategy types for generating FSGroup values for a -// SecurityContext -type FSGroupStrategyType string - -const ( - // FSGroupStrategyMayRunAs means that container does not need to have FSGroup of X applied. - // However, when FSGroups are specified, they have to fall in the defined range. - FSGroupStrategyMayRunAs FSGroupStrategyType = "MayRunAs" - // FSGroupStrategyMustRunAs meant that container must have FSGroup of X applied. - FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs" - // FSGroupStrategyRunAsAny means that container may make requests for any FSGroup labels. - FSGroupStrategyRunAsAny FSGroupStrategyType = "RunAsAny" -) - -// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. -type SupplementalGroupsStrategyOptions struct { - // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - // +optional - Rule SupplementalGroupsStrategyType `json:"rule,omitempty" protobuf:"bytes,1,opt,name=rule,casttype=SupplementalGroupsStrategyType"` - // ranges are the allowed ranges of supplemental groups. If you would like to force a single - // supplemental group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` -} - -// SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental -// groups for a SecurityContext. -type SupplementalGroupsStrategyType string - -const ( - // SupplementalGroupsStrategyMayRunAs means that container does not need to run with a particular gid. - // However, when gids are specified, they have to fall in the defined range. - SupplementalGroupsStrategyMayRunAs SupplementalGroupsStrategyType = "MayRunAs" - // SupplementalGroupsStrategyMustRunAs means that container must run as a particular gid. - SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs" - // SupplementalGroupsStrategyRunAsAny means that container may make requests for any gid. - SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" -) - -// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses -// for a pod. -type RuntimeClassStrategyOptions struct { - // allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. - // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the - // list. An empty list requires the RuntimeClassName field to be unset. - AllowedRuntimeClassNames []string `json:"allowedRuntimeClassNames" protobuf:"bytes,1,rep,name=allowedRuntimeClassNames"` - // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. - // The default MUST be allowed by the allowedRuntimeClassNames list. - // A value of nil does not mutate the Pod. - // +optional - DefaultRuntimeClassName *string `json:"defaultRuntimeClassName,omitempty" protobuf:"bytes,2,opt,name=defaultRuntimeClassName"` -} - -// AllowAllRuntimeClassNames can be used as a value for the -// RuntimeClassStrategyOptions.AllowedRuntimeClassNames field and means that any RuntimeClassName is -// allowed. -const AllowAllRuntimeClassNames = "*" - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +k8s:prerelease-lifecycle-gen:introduced=1.10 -// +k8s:prerelease-lifecycle-gen:deprecated=1.21 -// +k8s:prerelease-lifecycle-gen:removed=1.25 - -// PodSecurityPolicyList is a list of PodSecurityPolicy objects. -type PodSecurityPolicyList struct { - metav1.TypeMeta `json:",inline"` - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - // +optional - metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // items is a list of schema objects. - Items []PodSecurityPolicy `json:"items" protobuf:"bytes,2,rep,name=items"` -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go index 266a9a853a8a..4a79d7594953 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go @@ -27,34 +27,6 @@ package v1beta1 // Those methods can be generated by using hack/update-codegen.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_AllowedCSIDriver = map[string]string{ - "": "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", - "name": "Name is the registered name of the CSI driver", -} - -func (AllowedCSIDriver) SwaggerDoc() map[string]string { - return map_AllowedCSIDriver -} - -var map_AllowedFlexVolume = map[string]string{ - "": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", - "driver": "driver is the name of the Flexvolume driver.", -} - -func (AllowedFlexVolume) SwaggerDoc() map[string]string { - return map_AllowedFlexVolume -} - -var map_AllowedHostPath = map[string]string{ - "": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.", - "pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", - "readOnly": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", -} - -func (AllowedHostPath) SwaggerDoc() map[string]string { - return map_AllowedHostPath -} - var map_Eviction = map[string]string{ "": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.", "metadata": "ObjectMeta describes the pod that is being evicted.", @@ -65,36 +37,6 @@ func (Eviction) SwaggerDoc() map[string]string { return map_Eviction } -var map_FSGroupStrategyOptions = map[string]string{ - "": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", - "rule": "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - "ranges": "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", -} - -func (FSGroupStrategyOptions) SwaggerDoc() map[string]string { - return map_FSGroupStrategyOptions -} - -var map_HostPortRange = map[string]string{ - "": "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.", - "min": "min is the start of the range, inclusive.", - "max": "max is the end of the range, inclusive.", -} - -func (HostPortRange) SwaggerDoc() map[string]string { - return map_HostPortRange -} - -var map_IDRange = map[string]string{ - "": "IDRange provides a min/max of an allowed range of IDs.", - "min": "min is the start of the range, inclusive.", - "max": "max is the end of the range, inclusive.", -} - -func (IDRange) SwaggerDoc() map[string]string { - return map_IDRange -} - var map_PodDisruptionBudget = map[string]string{ "": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", @@ -143,106 +85,4 @@ func (PodDisruptionBudgetStatus) SwaggerDoc() map[string]string { return map_PodDisruptionBudgetStatus } -var map_PodSecurityPolicy = map[string]string{ - "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated in 1.21.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "spec": "spec defines the policy enforced.", -} - -func (PodSecurityPolicy) SwaggerDoc() map[string]string { - return map_PodSecurityPolicy -} - -var map_PodSecurityPolicyList = map[string]string{ - "": "PodSecurityPolicyList is a list of PodSecurityPolicy objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "items": "items is a list of schema objects.", -} - -func (PodSecurityPolicyList) SwaggerDoc() map[string]string { - return map_PodSecurityPolicyList -} - -var map_PodSecurityPolicySpec = map[string]string{ - "": "PodSecurityPolicySpec defines the policy enforced.", - "privileged": "privileged determines if a pod can request to be run as privileged.", - "defaultAddCapabilities": "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", - "requiredDropCapabilities": "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - "allowedCapabilities": "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", - "volumes": "volumes is an allowlist of volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", - "hostNetwork": "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - "hostPorts": "hostPorts determines which host port ranges are allowed to be exposed.", - "hostPID": "hostPID determines if the policy allows the use of HostPID in the pod spec.", - "hostIPC": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - "seLinux": "seLinux is the strategy that will dictate the allowable labels that may be set.", - "runAsUser": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - "runAsGroup": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", - "supplementalGroups": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - "fsGroup": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - "readOnlyRootFilesystem": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - "defaultAllowPrivilegeEscalation": "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - "allowPrivilegeEscalation": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", - "allowedHostPaths": "allowedHostPaths is an allowlist of host paths. Empty indicates that all host paths may be used.", - "allowedFlexVolumes": "allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", - "allowedCSIDrivers": "AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes.", - "allowedUnsafeSysctls": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", - "forbiddenSysctls": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", - "allowedProcMountTypes": "AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", - "runtimeClass": "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.", -} - -func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { - return map_PodSecurityPolicySpec -} - -var map_RunAsGroupStrategyOptions = map[string]string{ - "": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.", - "rule": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", - "ranges": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", -} - -func (RunAsGroupStrategyOptions) SwaggerDoc() map[string]string { - return map_RunAsGroupStrategyOptions -} - -var map_RunAsUserStrategyOptions = map[string]string{ - "": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", - "rule": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - "ranges": "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", -} - -func (RunAsUserStrategyOptions) SwaggerDoc() map[string]string { - return map_RunAsUserStrategyOptions -} - -var map_RuntimeClassStrategyOptions = map[string]string{ - "": "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.", - "allowedRuntimeClassNames": "allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.", - "defaultRuntimeClassName": "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.", -} - -func (RuntimeClassStrategyOptions) SwaggerDoc() map[string]string { - return map_RuntimeClassStrategyOptions -} - -var map_SELinuxStrategyOptions = map[string]string{ - "": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.", - "rule": "rule is the strategy that will dictate the allowable labels that may be set.", - "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", -} - -func (SELinuxStrategyOptions) SwaggerDoc() map[string]string { - return map_SELinuxStrategyOptions -} - -var map_SupplementalGroupsStrategyOptions = map[string]string{ - "": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", - "rule": "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - "ranges": "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", -} - -func (SupplementalGroupsStrategyOptions) SwaggerDoc() map[string]string { - return map_SupplementalGroupsStrategyOptions -} - // AUTO-GENERATED FUNCTIONS END HERE diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go index 8602d1adcad0..51895ffdb9b7 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go @@ -22,60 +22,11 @@ limitations under the License. package v1beta1 import ( - corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. -func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { - if in == nil { - return nil - } - out := new(AllowedCSIDriver) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume. -func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume { - if in == nil { - return nil - } - out := new(AllowedFlexVolume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedHostPath) DeepCopyInto(out *AllowedHostPath) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedHostPath. -func (in *AllowedHostPath) DeepCopy() *AllowedHostPath { - if in == nil { - return nil - } - out := new(AllowedHostPath) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Eviction) DeepCopyInto(out *Eviction) { *out = *in @@ -107,59 +58,6 @@ func (in *Eviction) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FSGroupStrategyOptions) DeepCopyInto(out *FSGroupStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FSGroupStrategyOptions. -func (in *FSGroupStrategyOptions) DeepCopy() *FSGroupStrategyOptions { - if in == nil { - return nil - } - out := new(FSGroupStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HostPortRange) DeepCopyInto(out *HostPortRange) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostPortRange. -func (in *HostPortRange) DeepCopy() *HostPortRange { - if in == nil { - return nil - } - out := new(HostPortRange) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IDRange) DeepCopyInto(out *IDRange) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IDRange. -func (in *IDRange) DeepCopy() *IDRange { - if in == nil { - return nil - } - out := new(IDRange) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodDisruptionBudget) DeepCopyInto(out *PodDisruptionBudget) { *out = *in @@ -286,268 +184,3 @@ func (in *PodDisruptionBudgetStatus) DeepCopy() *PodDisruptionBudgetStatus { in.DeepCopyInto(out) return out } - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicy) DeepCopyInto(out *PodSecurityPolicy) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicy. -func (in *PodSecurityPolicy) DeepCopy() *PodSecurityPolicy { - if in == nil { - return nil - } - out := new(PodSecurityPolicy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodSecurityPolicy) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicyList) DeepCopyInto(out *PodSecurityPolicyList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PodSecurityPolicy, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyList. -func (in *PodSecurityPolicyList) DeepCopy() *PodSecurityPolicyList { - if in == nil { - return nil - } - out := new(PodSecurityPolicyList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodSecurityPolicyList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { - *out = *in - if in.DefaultAddCapabilities != nil { - in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]corev1.Capability, len(*in)) - copy(*out, *in) - } - if in.RequiredDropCapabilities != nil { - in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]corev1.Capability, len(*in)) - copy(*out, *in) - } - if in.AllowedCapabilities != nil { - in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]corev1.Capability, len(*in)) - copy(*out, *in) - } - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]FSType, len(*in)) - copy(*out, *in) - } - if in.HostPorts != nil { - in, out := &in.HostPorts, &out.HostPorts - *out = make([]HostPortRange, len(*in)) - copy(*out, *in) - } - in.SELinux.DeepCopyInto(&out.SELinux) - in.RunAsUser.DeepCopyInto(&out.RunAsUser) - if in.RunAsGroup != nil { - in, out := &in.RunAsGroup, &out.RunAsGroup - *out = new(RunAsGroupStrategyOptions) - (*in).DeepCopyInto(*out) - } - in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups) - in.FSGroup.DeepCopyInto(&out.FSGroup) - if in.DefaultAllowPrivilegeEscalation != nil { - in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation - *out = new(bool) - **out = **in - } - if in.AllowPrivilegeEscalation != nil { - in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation - *out = new(bool) - **out = **in - } - if in.AllowedHostPaths != nil { - in, out := &in.AllowedHostPaths, &out.AllowedHostPaths - *out = make([]AllowedHostPath, len(*in)) - copy(*out, *in) - } - if in.AllowedFlexVolumes != nil { - in, out := &in.AllowedFlexVolumes, &out.AllowedFlexVolumes - *out = make([]AllowedFlexVolume, len(*in)) - copy(*out, *in) - } - if in.AllowedCSIDrivers != nil { - in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers - *out = make([]AllowedCSIDriver, len(*in)) - copy(*out, *in) - } - if in.AllowedUnsafeSysctls != nil { - in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ForbiddenSysctls != nil { - in, out := &in.ForbiddenSysctls, &out.ForbiddenSysctls - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.AllowedProcMountTypes != nil { - in, out := &in.AllowedProcMountTypes, &out.AllowedProcMountTypes - *out = make([]corev1.ProcMountType, len(*in)) - copy(*out, *in) - } - if in.RuntimeClass != nil { - in, out := &in.RuntimeClass, &out.RuntimeClass - *out = new(RuntimeClassStrategyOptions) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySpec. -func (in *PodSecurityPolicySpec) DeepCopy() *PodSecurityPolicySpec { - if in == nil { - return nil - } - out := new(PodSecurityPolicySpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunAsGroupStrategyOptions) DeepCopyInto(out *RunAsGroupStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsGroupStrategyOptions. -func (in *RunAsGroupStrategyOptions) DeepCopy() *RunAsGroupStrategyOptions { - if in == nil { - return nil - } - out := new(RunAsGroupStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsUserStrategyOptions. -func (in *RunAsUserStrategyOptions) DeepCopy() *RunAsUserStrategyOptions { - if in == nil { - return nil - } - out := new(RunAsUserStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RuntimeClassStrategyOptions) DeepCopyInto(out *RuntimeClassStrategyOptions) { - *out = *in - if in.AllowedRuntimeClassNames != nil { - in, out := &in.AllowedRuntimeClassNames, &out.AllowedRuntimeClassNames - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.DefaultRuntimeClassName != nil { - in, out := &in.DefaultRuntimeClassName, &out.DefaultRuntimeClassName - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassStrategyOptions. -func (in *RuntimeClassStrategyOptions) DeepCopy() *RuntimeClassStrategyOptions { - if in == nil { - return nil - } - out := new(RuntimeClassStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SELinuxStrategyOptions) DeepCopyInto(out *SELinuxStrategyOptions) { - *out = *in - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(corev1.SELinuxOptions) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SELinuxStrategyOptions. -func (in *SELinuxStrategyOptions) DeepCopy() *SELinuxStrategyOptions { - if in == nil { - return nil - } - out := new(SELinuxStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SupplementalGroupsStrategyOptions) DeepCopyInto(out *SupplementalGroupsStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalGroupsStrategyOptions. -func (in *SupplementalGroupsStrategyOptions) DeepCopy() *SupplementalGroupsStrategyOptions { - if in == nil { - return nil - } - out := new(SupplementalGroupsStrategyOptions) - in.DeepCopyInto(out) - return out -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go index 612061d6cf71..765a71e47288 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go +++ b/cluster-autoscaler/vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go @@ -90,39 +90,3 @@ func (in *PodDisruptionBudgetList) APILifecycleReplacement() schema.GroupVersion func (in *PodDisruptionBudgetList) APILifecycleRemoved() (major, minor int) { return 1, 25 } - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *PodSecurityPolicy) APILifecycleIntroduced() (major, minor int) { - return 1, 10 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *PodSecurityPolicy) APILifecycleDeprecated() (major, minor int) { - return 1, 21 -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *PodSecurityPolicy) APILifecycleRemoved() (major, minor int) { - return 1, 25 -} - -// APILifecycleIntroduced is an autogenerated function, returning the release in which the API struct was introduced as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:introduced" tags in types.go. -func (in *PodSecurityPolicyList) APILifecycleIntroduced() (major, minor int) { - return 1, 10 -} - -// APILifecycleDeprecated is an autogenerated function, returning the release in which the API struct was or will be deprecated as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:deprecated" tags in types.go or "k8s:prerelease-lifecycle-gen:introduced" plus three minor. -func (in *PodSecurityPolicyList) APILifecycleDeprecated() (major, minor int) { - return 1, 21 -} - -// APILifecycleRemoved is an autogenerated function, returning the release in which the API is no longer served as int versions of major and minor for comparison. -// It is controlled by "k8s:prerelease-lifecycle-gen:removed" tags in types.go or "k8s:prerelease-lifecycle-gen:deprecated" plus three minor. -func (in *PodSecurityPolicyList) APILifecycleRemoved() (major, minor int) { - return 1, 25 -} diff --git a/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/generated.proto b/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/generated.proto index 02412398c431..f7748f9a1a2c 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/generated.proto +++ b/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/generated.proto @@ -107,7 +107,7 @@ message PodSchedulingContextSpec { // that suits all pending resources. This may get increased in the // future, but not reduced. // - // +listType=set + // +listType=atomic // +optional repeated string potentialNodes = 2; } @@ -208,7 +208,7 @@ message ResourceClaimSchedulingStatus { // PodSchedulingSpec.PotentialNodes. This may get increased in the // future, but not reduced. // - // +listType=set + // +listType=atomic // +optional repeated string unsuitableNodes = 2; } diff --git a/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/types.go b/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/types.go index 21936bfe3d1f..a614ff9dc1bd 100644 --- a/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/types.go +++ b/cluster-autoscaler/vendor/k8s.io/api/resource/v1alpha2/types.go @@ -248,7 +248,7 @@ type PodSchedulingContextSpec struct { // that suits all pending resources. This may get increased in the // future, but not reduced. // - // +listType=set + // +listType=atomic // +optional PotentialNodes []string `json:"potentialNodes,omitempty" protobuf:"bytes,2,opt,name=potentialNodes"` } @@ -283,7 +283,7 @@ type ResourceClaimSchedulingStatus struct { // PodSchedulingSpec.PotentialNodes. This may get increased in the // future, but not reduced. // - // +listType=set + // +listType=atomic // +optional UnsuitableNodes []string `json:"unsuitableNodes,omitempty" protobuf:"bytes,2,opt,name=unsuitableNodes"` } diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go index 2e33283ef221..0f58d66c094c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go @@ -173,7 +173,7 @@ func NestedStringMap(obj map[string]interface{}, fields ...string) (map[string]s if str, ok := v.(string); ok { strMap[k] = str } else { - return nil, false, fmt.Errorf("%v accessor error: contains non-string key in the map: %v is of the type %T, expected string", jsonPath(fields), v, v) + return nil, false, fmt.Errorf("%v accessor error: contains non-string value in the map under key %q: %v is of the type %T, expected string", jsonPath(fields), k, v, v) } } return strMap, true, nil diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/helper.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/helper.go index 7bd1a3a6a5b9..f46a24cc6c35 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/helper.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/helper.go @@ -257,3 +257,26 @@ func (d WithoutVersionDecoder) Decode(data []byte, defaults *schema.GroupVersion } return obj, gvk, err } + +type encoderWithAllocator struct { + encoder EncoderWithAllocator + memAllocator MemoryAllocator +} + +// NewEncoderWithAllocator returns a new encoder +func NewEncoderWithAllocator(e EncoderWithAllocator, a MemoryAllocator) Encoder { + return &encoderWithAllocator{ + encoder: e, + memAllocator: a, + } +} + +// Encode writes the provided object to the nested writer +func (e *encoderWithAllocator) Encode(obj Object, w io.Writer) error { + return e.encoder.EncodeWithAllocator(obj, w, e.memAllocator) +} + +// Identifier returns identifier of this encoder. +func (e *encoderWithAllocator) Identifier() Identifier { + return e.encoder.Identifier() +} diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go index 87b3fec3f2db..971c46d496a3 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming/streaming.go @@ -134,23 +134,3 @@ func (e *encoder) Encode(obj runtime.Object) error { e.buf.Reset() return err } - -type encoderWithAllocator struct { - writer io.Writer - encoder runtime.EncoderWithAllocator - memAllocator runtime.MemoryAllocator -} - -// NewEncoderWithAllocator returns a new streaming encoder -func NewEncoderWithAllocator(w io.Writer, e runtime.EncoderWithAllocator, a runtime.MemoryAllocator) Encoder { - return &encoderWithAllocator{ - writer: w, - encoder: e, - memAllocator: a, - } -} - -// Encode writes the provided object to the nested writer -func (e *encoderWithAllocator) Encode(obj runtime.Object) error { - return e.encoder.EncodeWithAllocator(obj, e.writer, e.memAllocator) -} diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/conn.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/conn.go index 09f54a49c74c..d153070cedf9 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/conn.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/conn.go @@ -21,14 +21,15 @@ import ( "fmt" "io" "net/http" - "regexp" "strings" "time" "golang.org/x/net/websocket" - "k8s.io/klog/v2" + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/klog/v2" ) // The Websocket subprotocol "channel.k8s.io" prepends each binary message with a byte indicating @@ -77,18 +78,13 @@ const ( ReadWriteChannel ) -var ( - // connectionUpgradeRegex matches any Connection header value that includes upgrade - connectionUpgradeRegex = regexp.MustCompile("(^|.*,\\s*)upgrade($|\\s*,)") -) - // IsWebSocketRequest returns true if the incoming request contains connection upgrade headers // for WebSockets. func IsWebSocketRequest(req *http.Request) bool { if !strings.EqualFold(req.Header.Get("Upgrade"), "websocket") { return false } - return connectionUpgradeRegex.MatchString(strings.ToLower(req.Header.Get("Connection"))) + return httpstream.IsUpgradeRequest(req) } // IgnoreReceives reads from a WebSocket until it is closed, then returns. If timeout is set, the @@ -239,10 +235,18 @@ func (conn *Conn) Close() error { return nil } +// protocolSupportsStreamClose returns true if the passed protocol +// supports the stream close signal (currently only V5 remotecommand); +// false otherwise. +func protocolSupportsStreamClose(protocol string) bool { + return protocol == remotecommand.StreamProtocolV5Name +} + // handle implements a websocket handler. func (conn *Conn) handle(ws *websocket.Conn) { defer conn.Close() conn.initialize(ws) + supportsStreamClose := protocolSupportsStreamClose(conn.selectedProtocol) for { conn.resetTimeout() @@ -256,6 +260,21 @@ func (conn *Conn) handle(ws *websocket.Conn) { if len(data) == 0 { continue } + if supportsStreamClose && data[0] == remotecommand.StreamClose { + if len(data) != 2 { + klog.Errorf("Single channel byte should follow stream close signal. Got %d bytes", len(data)-1) + break + } else { + channel := data[1] + if int(channel) >= len(conn.channels) { + klog.Errorf("Close is targeted for a channel %d that is not valid, possible protocol error", channel) + break + } + klog.V(4).Infof("Received half-close signal from client; close %d stream", channel) + conn.channels[channel].Close() // After first Close, other closes are noop. + } + continue + } channel := data[0] if conn.codec == base64Codec { channel = channel - '0' diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/doc.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/doc.go index a1aa1688bd94..3dd6f828b706 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/doc.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/httpstream/wsstream/doc.go @@ -16,6 +16,54 @@ limitations under the License. // Package wsstream contains utilities for streaming content over WebSockets. // The Conn type allows callers to multiplex multiple read/write channels over -// a single websocket. The Reader type allows an io.Reader to be copied over -// a websocket channel as binary content. +// a single websocket. +// +// "channel.k8s.io" +// +// The Websocket RemoteCommand subprotocol "channel.k8s.io" prepends each binary message with a +// byte indicating the channel number (zero indexed) the message was sent on. Messages in both +// directions should prefix their messages with this channel byte. Used for remote execution, +// the channel numbers are by convention defined to match the POSIX file-descriptors assigned +// to STDIN, STDOUT, and STDERR (0, 1, and 2). No other conversion is performed on the raw +// subprotocol - writes are sent as they are received by the server. +// +// Example client session: +// +// CONNECT http://server.com with subprotocol "channel.k8s.io" +// WRITE []byte{0, 102, 111, 111, 10} # send "foo\n" on channel 0 (STDIN) +// READ []byte{1, 10} # receive "\n" on channel 1 (STDOUT) +// CLOSE +// +// "v2.channel.k8s.io" +// +// The second Websocket subprotocol version "v2.channel.k8s.io" is the same as version 1, +// but it is the first "versioned" subprotocol. +// +// "v3.channel.k8s.io" +// +// The third version of the Websocket RemoteCommand subprotocol adds another channel +// for terminal resizing events. This channel is prepended with the byte '3', and it +// transmits two window sizes (encoding TerminalSize struct) with integers in the range +// (0,65536]. +// +// "v4.channel.k8s.io" +// +// The fourth version of the Websocket RemoteCommand subprotocol adds a channel for +// errors. This channel returns structured errors containing process exit codes. The +// error is "apierrors.StatusError{}". +// +// "v5.channel.k8s.io" +// +// The fifth version of the Websocket RemoteCommand subprotocol adds a CLOSE signal, +// which is sent as the first byte of the message. The second byte is the channel +// id. This CLOSE signal is handled by the websocket server by closing the stream, +// allowing the other streams to complete transmission if necessary, and gracefully +// shutdown the connection. +// +// Example client session: +// +// CONNECT http://server.com with subprotocol "v5.channel.k8s.io" +// WRITE []byte{0, 102, 111, 111, 10} # send "foo\n" on channel 0 (STDIN) +// WRITE []byte{255, 0} # send CLOSE signal (STDIN) +// CLOSE package wsstream // import "k8s.io/apimachinery/pkg/util/httpstream/wsstream" diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go index 0ea88156bef1..f358c794d102 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go @@ -72,14 +72,14 @@ func FromString(val string) IntOrString { return IntOrString{Type: String, StrVal: val} } -// Parse the given string and try to convert it to an integer before +// Parse the given string and try to convert it to an int32 integer before // setting it as a string value. func Parse(val string) IntOrString { - i, err := strconv.Atoi(val) + i, err := strconv.ParseInt(val, 10, 32) if err != nil { return FromString(val) } - return FromInt(i) + return FromInt32(int32(i)) } // UnmarshalJSON implements the json.Unmarshaller interface. diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/remotecommand/constants.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/remotecommand/constants.go index 237ebaef486d..ba153ee24fc7 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/remotecommand/constants.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/remotecommand/constants.go @@ -46,8 +46,22 @@ const ( // adds support for exit codes. StreamProtocolV4Name = "v4.channel.k8s.io" + // The subprotocol "v5.channel.k8s.io" is used for remote command + // attachment/execution. It is the 5th version of the subprotocol and + // adds support for a CLOSE signal. + StreamProtocolV5Name = "v5.channel.k8s.io" + NonZeroExitCodeReason = metav1.StatusReason("NonZeroExitCode") ExitCodeCauseType = metav1.CauseType("ExitCode") + + // RemoteCommand stream identifiers. The first three identifiers (for STDIN, + // STDOUT, STDERR) are the same as their file descriptors. + StreamStdIn = 0 + StreamStdOut = 1 + StreamStdErr = 2 + StreamErr = 3 + StreamResize = 4 + StreamClose = 255 ) var SupportedStreamingProtocols = []string{StreamProtocolV4Name, StreamProtocolV3Name, StreamProtocolV2Name, StreamProtocolV1Name} diff --git a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/version/version.go b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/version/version.go index 4c6195695336..2292ba13765f 100644 --- a/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/version/version.go +++ b/cluster-autoscaler/vendor/k8s.io/apimachinery/pkg/util/version/version.go @@ -18,6 +18,7 @@ package version import ( "bytes" + "errors" "fmt" "regexp" "strconv" @@ -85,6 +86,47 @@ func parse(str string, semver bool) (*Version, error) { return v, nil } +// HighestSupportedVersion returns the highest supported version +// This function assumes that the highest supported version must be v1.x. +func HighestSupportedVersion(versions []string) (*Version, error) { + if len(versions) == 0 { + return nil, errors.New("empty array for supported versions") + } + + var ( + highestSupportedVersion *Version + theErr error + ) + + for i := len(versions) - 1; i >= 0; i-- { + currentHighestVer, err := ParseGeneric(versions[i]) + if err != nil { + theErr = err + continue + } + + if currentHighestVer.Major() > 1 { + continue + } + + if highestSupportedVersion == nil || highestSupportedVersion.LessThan(currentHighestVer) { + highestSupportedVersion = currentHighestVer + } + } + + if highestSupportedVersion == nil { + return nil, fmt.Errorf( + "could not find a highest supported version from versions (%v) reported: %+v", + versions, theErr) + } + + if highestSupportedVersion.Major() != 1 { + return nil, fmt.Errorf("highest supported version reported is %v, must be v1.x", highestSupportedVersion) + } + + return highestSupportedVersion, nil +} + // ParseGeneric parses a "generic" version string. The version string must consist of two // or more dot-separated numeric fields (the first of which can't have leading zeroes), // followed by arbitrary uninterpreted data (which need not be separated from the final diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/config.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/config.go index 43613321b94f..c0b75a983154 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/config.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/config.go @@ -20,7 +20,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "os" "path" "path/filepath" @@ -60,7 +59,7 @@ func ReadAdmissionConfiguration(pluginNames []string, configFilePath string, con return configProvider{config: &apiserver.AdmissionConfiguration{}}, nil } // a file was provided, so we just read it. - data, err := ioutil.ReadFile(configFilePath) + data, err := os.ReadFile(configFilePath) if err != nil { return nil, fmt.Errorf("unable to read admission control configuration from %q [%v]", configFilePath, err) } @@ -141,7 +140,7 @@ func GetAdmissionPluginConfigurationFor(pluginCfg apiserver.AdmissionPluginConfi } // there is nothing nested, so we delegate to path if pluginCfg.Path != "" { - content, err := ioutil.ReadFile(pluginCfg.Path) + content, err := os.ReadFile(pluginCfg.Path) if err != nil { klog.Fatalf("Couldn't open admission plugin configuration %s: %#v", pluginCfg.Path, err) return nil, err diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config/kubeconfig.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config/kubeconfig.go index 78f5312a475e..7b845f1d19ab 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config/kubeconfig.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/config/kubeconfig.go @@ -19,7 +19,6 @@ package config import ( "fmt" "io" - "io/ioutil" "path" "k8s.io/apimachinery/pkg/runtime" @@ -47,7 +46,7 @@ func LoadConfig(configFile io.Reader) (string, error) { var kubeconfigFile string if configFile != nil { // we have a config so parse it. - data, err := ioutil.ReadAll(configFile) + data, err := io.ReadAll(configFile) if err != nil { return "", err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go index af237ae0c008..437e53dc93ce 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/dispatcher.go @@ -20,6 +20,7 @@ package mutating import ( "context" + "errors" "fmt" "time" @@ -168,13 +169,12 @@ func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr admission.Attrib if err != nil { switch err := err.(type) { case *webhookutil.ErrCallingWebhook: - if ctx.Err() == context.Canceled { - klog.Warningf("Context Canceled when calling webhook %v", hook.Name) - return err - } if !ignoreClientCallFailures { rejected = true - admissionmetrics.Metrics.ObserveWebhookRejection(ctx, hook.Name, "admit", string(versionedAttr.Attributes.GetOperation()), admissionmetrics.WebhookRejectionCallingWebhookError, int(err.Status.ErrStatus.Code)) + // Ignore context cancelled from webhook metrics + if !errors.Is(err.Reason, context.Canceled) { + admissionmetrics.Metrics.ObserveWebhookRejection(ctx, hook.Name, "admit", string(versionedAttr.Attributes.GetOperation()), admissionmetrics.WebhookRejectionCallingWebhookError, int(err.Status.ErrStatus.Code)) + } } admissionmetrics.Metrics.ObserveWebhook(ctx, hook.Name, time.Since(t), rejected, versionedAttr.Attributes, "admit", int(err.Status.ErrStatus.Code)) case *webhookutil.ErrWebhookRejection: @@ -203,10 +203,14 @@ func (a *mutatingDispatcher) Dispatch(ctx context.Context, attr admission.Attrib if callErr, ok := err.(*webhookutil.ErrCallingWebhook); ok { if ignoreClientCallFailures { - klog.Warningf("Failed calling webhook, failing open %v: %v", hook.Name, callErr) - admissionmetrics.Metrics.ObserveWebhookFailOpen(ctx, hook.Name, "admit") - annotator.addFailedOpenAnnotation() - + // Ignore context cancelled from webhook metrics + if errors.Is(callErr.Reason, context.Canceled) { + klog.Warningf("Context canceled when calling webhook %v", hook.Name) + } else { + klog.Warningf("Failed calling webhook, failing open %v: %v", hook.Name, callErr) + admissionmetrics.Metrics.ObserveWebhookFailOpen(ctx, hook.Name, "admit") + annotator.addFailedOpenAnnotation() + } utilruntime.HandleError(callErr) select { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go index af435649bd0a..1a633d241775 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/dispatcher.go @@ -18,6 +18,7 @@ package validating import ( "context" + "errors" "fmt" "sync" "time" @@ -173,13 +174,12 @@ func (d *validatingDispatcher) Dispatch(ctx context.Context, attr admission.Attr if err != nil { switch err := err.(type) { case *webhookutil.ErrCallingWebhook: - if ctx.Err() == context.Canceled { - klog.Warningf("Context Canceled when calling webhook %v", hook.Name) - return - } if !ignoreClientCallFailures { rejected = true - admissionmetrics.Metrics.ObserveWebhookRejection(ctx, hook.Name, "validating", string(versionedAttr.Attributes.GetOperation()), admissionmetrics.WebhookRejectionCallingWebhookError, int(err.Status.ErrStatus.Code)) + // Ignore context cancelled from webhook metrics + if !errors.Is(err.Reason, context.Canceled) { + admissionmetrics.Metrics.ObserveWebhookRejection(ctx, hook.Name, "validating", string(versionedAttr.Attributes.GetOperation()), admissionmetrics.WebhookRejectionCallingWebhookError, int(err.Status.ErrStatus.Code)) + } } admissionmetrics.Metrics.ObserveWebhook(ctx, hook.Name, time.Since(t), rejected, versionedAttr.Attributes, "validating", int(err.Status.ErrStatus.Code)) case *webhookutil.ErrWebhookRejection: @@ -198,12 +198,17 @@ func (d *validatingDispatcher) Dispatch(ctx context.Context, attr admission.Attr if callErr, ok := err.(*webhookutil.ErrCallingWebhook); ok { if ignoreClientCallFailures { - klog.Warningf("Failed calling webhook, failing open %v: %v", hook.Name, callErr) - admissionmetrics.Metrics.ObserveWebhookFailOpen(ctx, hook.Name, "validating") - key := fmt.Sprintf("%sround_0_index_%d", ValidatingAuditAnnotationFailedOpenKeyPrefix, idx) - value := hook.Name - if err := versionedAttr.Attributes.AddAnnotation(key, value); err != nil { - klog.Warningf("Failed to set admission audit annotation %s to %s for validating webhook %s: %v", key, value, hook.Name, err) + // Ignore context cancelled from webhook metrics + if errors.Is(callErr.Reason, context.Canceled) { + klog.Warningf("Context canceled when calling webhook %v", hook.Name) + } else { + klog.Warningf("Failed calling webhook, failing open %v: %v", hook.Name, callErr) + admissionmetrics.Metrics.ObserveWebhookFailOpen(ctx, hook.Name, "validating") + key := fmt.Sprintf("%sround_0_index_%d", ValidatingAuditAnnotationFailedOpenKeyPrefix, idx) + value := hook.Name + if err := versionedAttr.Attributes.AddAnnotation(key, value); err != nil { + klog.Warningf("Failed to set admission audit annotation %s to %s for validating webhook %s: %v", key, value, hook.Name, err) + } } utilruntime.HandleError(callErr) return diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugins.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugins.go index 1afb480dd7f3..10a435d4926d 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugins.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/admission/plugins.go @@ -20,7 +20,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "reflect" "sort" "strings" @@ -115,7 +114,7 @@ func splitStream(config io.Reader) (io.Reader, io.Reader, error) { return nil, nil, nil } - configBytes, err := ioutil.ReadAll(config) + configBytes, err := io.ReadAll(config) if err != nil { return nil, nil, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/register.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/register.go index 14ba08482ae2..d42852d93e64 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/register.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/register.go @@ -43,6 +43,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { ) scheme.AddKnownTypes(SchemeGroupVersion, &AdmissionConfiguration{}, + &AuthenticationConfiguration{}, + &AuthorizationConfiguration{}, &EgressSelectorConfiguration{}, &TracingConfiguration{}, ) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/types.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/types.go index dcb082e0953c..5d7bf39ecdff 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/types.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/types.go @@ -157,3 +157,161 @@ type TracingConfiguration struct { // Embed the component config tracing configuration struct tracingapi.TracingConfiguration } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AuthenticationConfiguration provides versioned configuration for authentication. +type AuthenticationConfiguration struct { + metav1.TypeMeta + + JWT []JWTAuthenticator +} + +// JWTAuthenticator provides the configuration for a single JWT authenticator. +type JWTAuthenticator struct { + Issuer Issuer + ClaimValidationRules []ClaimValidationRule + ClaimMappings ClaimMappings +} + +// Issuer provides the configuration for a external provider specific settings. +type Issuer struct { + URL string + CertificateAuthority string + Audiences []string +} + +// ClaimValidationRule provides the configuration for a single claim validation rule. +type ClaimValidationRule struct { + Claim string + RequiredValue string +} + +// ClaimMappings provides the configuration for claim mapping +type ClaimMappings struct { + Username PrefixedClaimOrExpression + Groups PrefixedClaimOrExpression +} + +// PrefixedClaimOrExpression provides the configuration for a single prefixed claim or expression. +type PrefixedClaimOrExpression struct { + Claim string + Prefix *string +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type AuthorizationConfiguration struct { + metav1.TypeMeta + + // Authorizers is an ordered list of authorizers to + // authorize requests against. + // This is similar to the --authorization-modes kube-apiserver flag + // Must be at least one. + Authorizers []AuthorizerConfiguration `json:"authorizers"` +} + +const ( + TypeWebhook AuthorizerType = "Webhook" + FailurePolicyNoOpinion string = "NoOpinion" + FailurePolicyDeny string = "Deny" + AuthorizationWebhookConnectionInfoTypeKubeConfig string = "KubeConfigFile" + AuthorizationWebhookConnectionInfoTypeInCluster string = "InClusterConfig" +) + +type AuthorizerType string + +type AuthorizerConfiguration struct { + // Type refers to the type of the authorizer + // "Webhook" is supported in the generic API server + // Other API servers may support additional authorizer + // types like Node, RBAC, ABAC, etc. + Type AuthorizerType + + // Webhook defines the configuration for a Webhook authorizer + // Must be defined when Type=Webhook + Webhook *WebhookConfiguration +} + +type WebhookConfiguration struct { + // Name used to describe the webhook + // This is explicitly used in monitoring machinery for metrics + // Note: Names must be DNS1123 labels like `mywebhookname` or + // subdomains like `webhookname.example.domain` + // Required, with no default + Name string + // The duration to cache 'authorized' responses from the webhook + // authorizer. + // Same as setting `--authorization-webhook-cache-authorized-ttl` flag + // Default: 5m0s + AuthorizedTTL metav1.Duration + // The duration to cache 'unauthorized' responses from the webhook + // authorizer. + // Same as setting `--authorization-webhook-cache-unauthorized-ttl` flag + // Default: 30s + UnauthorizedTTL metav1.Duration + // Timeout for the webhook request + // Maximum allowed value is 30s. + // Required, no default value. + Timeout metav1.Duration + // The API version of the authorization.k8s.io SubjectAccessReview to + // send to and expect from the webhook. + // Same as setting `--authorization-webhook-version` flag + // Valid values: v1beta1, v1 + // Required, no default value + SubjectAccessReviewVersion string + // MatchConditionSubjectAccessReviewVersion specifies the SubjectAccessReview + // version the CEL expressions are evaluated against + // Valid values: v1 + // Required, no default value + MatchConditionSubjectAccessReviewVersion string + // Controls the authorization decision when a webhook request fails to + // complete or returns a malformed response or errors evaluating + // matchConditions. + // Valid values: + // - NoOpinion: continue to subsequent authorizers to see if one of + // them allows the request + // - Deny: reject the request without consulting subsequent authorizers + // Required, with no default. + FailurePolicy string + + // ConnectionInfo defines how we talk to the webhook + ConnectionInfo WebhookConnectionInfo + + // matchConditions is a list of conditions that must be met for a request to be sent to this + // webhook. An empty list of matchConditions matches all requests. + // There are a maximum of 64 match conditions allowed. + // + // The exact matching logic is (in order): + // 1. If at least one matchCondition evaluates to FALSE, then the webhook is skipped. + // 2. If ALL matchConditions evaluate to TRUE, then the webhook is called. + // 3. If at least one matchCondition evaluates to an error (but none are FALSE): + // - If failurePolicy=Deny, then the webhook rejects the request + // - If failurePolicy=NoOpinion, then the error is ignored and the webhook is skipped + MatchConditions []WebhookMatchCondition +} + +type WebhookConnectionInfo struct { + // Controls how the webhook should communicate with the server. + // Valid values: + // - KubeConfig: use the file specified in kubeConfigFile to locate the + // server. + // - InClusterConfig: use the in-cluster configuration to call the + // SubjectAccessReview API hosted by kube-apiserver. This mode is not + // allowed for kube-apiserver. + Type string + + // Path to KubeConfigFile for connection info + // Required, if connectionInfo.Type is KubeConfig + KubeConfigFile *string +} + +type WebhookMatchCondition struct { + // expression represents the expression which will be evaluated by CEL. Must evaluate to bool. + // CEL expressions have access to the contents of the SubjectAccessReview in v1 version. + // If version specified by subjectAccessReviewVersion in the request variable is v1beta1, + // the contents would be converted to the v1 version before evaluating the CEL expression. + // + // Documentation on CEL: https://kubernetes.io/docs/reference/using-api/cel/ + Expression string +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/defaults.go similarity index 55% rename from cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go rename to cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/defaults.go index 3e74051681c0..a9af01fe76cd 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/expansion_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright The Kubernetes Authors. +Copyright 2023 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,14 +14,23 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Code generated by lister-gen. DO NOT EDIT. - package v1alpha1 -// FlowSchemaListerExpansion allows custom methods to be added to -// FlowSchemaLister. -type FlowSchemaListerExpansion interface{} +import ( + "time" + + "k8s.io/apimachinery/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return RegisterDefaults(scheme) +} -// PriorityLevelConfigurationListerExpansion allows custom methods to be added to -// PriorityLevelConfigurationLister. -type PriorityLevelConfigurationListerExpansion interface{} +func SetDefaults_WebhookConfiguration(obj *WebhookConfiguration) { + if obj.AuthorizedTTL.Duration == 0 { + obj.AuthorizedTTL.Duration = 5 * time.Minute + } + if obj.UnauthorizedTTL.Duration == 0 { + obj.UnauthorizedTTL.Duration = 30 * time.Second + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/register.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/register.go index e4e16c01ce44..7d68ac0c62ee 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/register.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/register.go @@ -43,7 +43,7 @@ func init() { // We only register manually written functions here. The registration of the // generated functions takes place in the generated files. The separation // makes the code compile even when the generated files are missing. - localSchemeBuilder.Register(addKnownTypes) + localSchemeBuilder.Register(addKnownTypes, addDefaultingFuncs) } // Adds the list of known types to the given scheme. @@ -53,6 +53,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &EgressSelectorConfiguration{}, ) scheme.AddKnownTypes(ConfigSchemeGroupVersion, + &AuthenticationConfiguration{}, + &AuthorizationConfiguration{}, &TracingConfiguration{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/types.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/types.go index b18d84d9d3c6..913c212ee277 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/types.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/types.go @@ -158,3 +158,231 @@ type TracingConfiguration struct { // Embed the component config tracing configuration struct tracingapi.TracingConfiguration `json:",inline"` } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AuthenticationConfiguration provides versioned configuration for authentication. +type AuthenticationConfiguration struct { + metav1.TypeMeta + + // jwt is a list of authenticator to authenticate Kubernetes users using + // JWT compliant tokens. The authenticator will attempt to parse a raw ID token, + // verify it's been signed by the configured issuer. The public key to verify the + // signature is discovered from the issuer's public endpoint using OIDC discovery. + // For an incoming token, each JWT authenticator will be attempted in + // the order in which it is specified in this list. Note however that + // other authenticators may run before or after the JWT authenticators. + // The specific position of JWT authenticators in relation to other + // authenticators is neither defined nor stable across releases. Since + // each JWT authenticator must have a unique issuer URL, at most one + // JWT authenticator will attempt to cryptographically validate the token. + JWT []JWTAuthenticator `json:"jwt"` +} + +// JWTAuthenticator provides the configuration for a single JWT authenticator. +type JWTAuthenticator struct { + // issuer contains the basic OIDC provider connection options. + // +required + Issuer Issuer `json:"issuer"` + + // claimValidationRules are rules that are applied to validate token claims to authenticate users. + // +optional + ClaimValidationRules []ClaimValidationRule `json:"claimValidationRules,omitempty"` + + // claimMappings points claims of a token to be treated as user attributes. + // +required + ClaimMappings ClaimMappings `json:"claimMappings"` +} + +// Issuer provides the configuration for a external provider specific settings. +type Issuer struct { + // url points to the issuer URL in a format https://url or https://url/path. + // This must match the "iss" claim in the presented JWT, and the issuer returned from discovery. + // Same value as the --oidc-issuer-url flag. + // Used to fetch discovery information unless overridden by discoveryURL. + // Required to be unique. + // Note that egress selection configuration is not used for this network connection. + // +required + URL string `json:"url"` + + // certificateAuthority contains PEM-encoded certificate authority certificates + // used to validate the connection when fetching discovery information. + // If unset, the system verifier is used. + // Same value as the content of the file referenced by the --oidc-ca-file flag. + // +optional + CertificateAuthority string `json:"certificateAuthority,omitempty"` + + // audiences is the set of acceptable audiences the JWT must be issued to. + // At least one of the entries must match the "aud" claim in presented JWTs. + // Same value as the --oidc-client-id flag (though this field supports an array). + // Required to be non-empty. + // +required + Audiences []string `json:"audiences"` +} + +// ClaimValidationRule provides the configuration for a single claim validation rule. +type ClaimValidationRule struct { + // claim is the name of a required claim. + // Same as --oidc-required-claim flag. + // Only string claim keys are supported. + // +required + Claim string `json:"claim"` + // requiredValue is the value of a required claim. + // Same as --oidc-required-claim flag. + // Only string claim values are supported. + // If claim is set and requiredValue is not set, the claim must be present with a value set to the empty string. + // +optional + RequiredValue string `json:"requiredValue"` +} + +// ClaimMappings provides the configuration for claim mapping +type ClaimMappings struct { + // username represents an option for the username attribute. + // The claim's value must be a singular string. + // Same as the --oidc-username-claim and --oidc-username-prefix flags. + // + // In the flag based approach, the --oidc-username-claim and --oidc-username-prefix are optional. If --oidc-username-claim is not set, + // the default value is "sub". For the authentication config, there is no defaulting for claim or prefix. The claim and prefix must be set explicitly. + // For claim, if --oidc-username-claim was not set with legacy flag approach, configure username.claim="sub" in the authentication config. + // For prefix: + // (1) --oidc-username-prefix="-", no prefix was added to the username. For the same behavior using authentication config, + // set username.prefix="" + // (2) --oidc-username-prefix="" and --oidc-username-claim != "email", prefix was "#". For the same + // behavior using authentication config, set username.prefix="#" + // (3) --oidc-username-prefix="". For the same behavior using authentication config, set username.prefix="" + // +required + Username PrefixedClaimOrExpression `json:"username"` + // groups represents an option for the groups attribute. + // The claim's value must be a string or string array claim. + // // If groups.claim is set, the prefix must be specified (and can be the empty string). + // +optional + Groups PrefixedClaimOrExpression `json:"groups,omitempty"` +} + +// PrefixedClaimOrExpression provides the configuration for a single prefixed claim or expression. +type PrefixedClaimOrExpression struct { + // claim is the JWT claim to use. + // +optional + Claim string `json:"claim"` + // prefix is prepended to claim's value to prevent clashes with existing names. + // +required + Prefix *string `json:"prefix"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type AuthorizationConfiguration struct { + metav1.TypeMeta + + // Authorizers is an ordered list of authorizers to + // authorize requests against. + // This is similar to the --authorization-modes kube-apiserver flag + // Must be at least one. + Authorizers []AuthorizerConfiguration `json:"authorizers"` +} + +const ( + TypeWebhook AuthorizerType = "Webhook" + FailurePolicyNoOpinion string = "NoOpinion" + FailurePolicyDeny string = "Deny" + AuthorizationWebhookConnectionInfoTypeKubeConfig string = "KubeConfigFile" + AuthorizationWebhookConnectionInfoTypeInCluster string = "InClusterConfig" +) + +type AuthorizerType string + +type AuthorizerConfiguration struct { + // Type refers to the type of the authorizer + // "Webhook" is supported in the generic API server + // Other API servers may support additional authorizer + // types like Node, RBAC, ABAC, etc. + Type string `json:"type"` + + // Webhook defines the configuration for a Webhook authorizer + // Must be defined when Type=Webhook + // Must not be defined when Type!=Webhook + Webhook *WebhookConfiguration `json:"webhook,omitempty"` +} + +type WebhookConfiguration struct { + // Name used to describe the webhook + // This is explicitly used in monitoring machinery for metrics + // Note: Names must be DNS1123 labels like `mywebhookname` or + // subdomains like `webhookname.example.domain` + // Required, with no default + Name string `json:"name"` + // The duration to cache 'authorized' responses from the webhook + // authorizer. + // Same as setting `--authorization-webhook-cache-authorized-ttl` flag + // Default: 5m0s + AuthorizedTTL metav1.Duration `json:"authorizedTTL"` + // The duration to cache 'unauthorized' responses from the webhook + // authorizer. + // Same as setting `--authorization-webhook-cache-unauthorized-ttl` flag + // Default: 30s + UnauthorizedTTL metav1.Duration `json:"unauthorizedTTL"` + // Timeout for the webhook request + // Maximum allowed value is 30s. + // Required, no default value. + Timeout metav1.Duration `json:"timeout"` + // The API version of the authorization.k8s.io SubjectAccessReview to + // send to and expect from the webhook. + // Same as setting `--authorization-webhook-version` flag + // Valid values: v1beta1, v1 + // Required, no default value + SubjectAccessReviewVersion string `json:"subjectAccessReviewVersion"` + // MatchConditionSubjectAccessReviewVersion specifies the SubjectAccessReview + // version the CEL expressions are evaluated against + // Valid values: v1 + // Required, no default value + MatchConditionSubjectAccessReviewVersion string `json:"matchConditionSubjectAccessReviewVersion"` + // Controls the authorization decision when a webhook request fails to + // complete or returns a malformed response or errors evaluating + // matchConditions. + // Valid values: + // - NoOpinion: continue to subsequent authorizers to see if one of + // them allows the request + // - Deny: reject the request without consulting subsequent authorizers + // Required, with no default. + FailurePolicy string `json:"failurePolicy"` + + // ConnectionInfo defines how we talk to the webhook + ConnectionInfo WebhookConnectionInfo `json:"connectionInfo"` + + // matchConditions is a list of conditions that must be met for a request to be sent to this + // webhook. An empty list of matchConditions matches all requests. + // There are a maximum of 64 match conditions allowed. + // + // The exact matching logic is (in order): + // 1. If at least one matchCondition evaluates to FALSE, then the webhook is skipped. + // 2. If ALL matchConditions evaluate to TRUE, then the webhook is called. + // 3. If at least one matchCondition evaluates to an error (but none are FALSE): + // - If failurePolicy=Deny, then the webhook rejects the request + // - If failurePolicy=NoOpinion, then the error is ignored and the webhook is skipped + MatchConditions []WebhookMatchCondition `json:"matchConditions"` +} + +type WebhookConnectionInfo struct { + // Controls how the webhook should communicate with the server. + // Valid values: + // - KubeConfig: use the file specified in kubeConfigFile to locate the + // server. + // - InClusterConfig: use the in-cluster configuration to call the + // SubjectAccessReview API hosted by kube-apiserver. This mode is not + // allowed for kube-apiserver. + Type string `json:"type"` + + // Path to KubeConfigFile for connection info + // Required, if connectionInfo.Type is KubeConfig + KubeConfigFile *string `json:"kubeConfigFile"` +} + +type WebhookMatchCondition struct { + // expression represents the expression which will be evaluated by CEL. Must evaluate to bool. + // CEL expressions have access to the contents of the SubjectAccessReview in v1 version. + // If version specified by subjectAccessReviewVersion in the request variable is v1beta1, + // the contents would be converted to the v1 version before evaluating the CEL expression. + // + // Documentation on CEL: https://kubernetes.io/docs/reference/using-api/cel/ + Expression string `json:"expression"` +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.conversion.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.conversion.go index 41b350c48e29..87b5346f5f84 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.conversion.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.conversion.go @@ -56,6 +56,56 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*AuthenticationConfiguration)(nil), (*apiserver.AuthenticationConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_AuthenticationConfiguration_To_apiserver_AuthenticationConfiguration(a.(*AuthenticationConfiguration), b.(*apiserver.AuthenticationConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.AuthenticationConfiguration)(nil), (*AuthenticationConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_AuthenticationConfiguration_To_v1alpha1_AuthenticationConfiguration(a.(*apiserver.AuthenticationConfiguration), b.(*AuthenticationConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*AuthorizationConfiguration)(nil), (*apiserver.AuthorizationConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_AuthorizationConfiguration_To_apiserver_AuthorizationConfiguration(a.(*AuthorizationConfiguration), b.(*apiserver.AuthorizationConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.AuthorizationConfiguration)(nil), (*AuthorizationConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_AuthorizationConfiguration_To_v1alpha1_AuthorizationConfiguration(a.(*apiserver.AuthorizationConfiguration), b.(*AuthorizationConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*AuthorizerConfiguration)(nil), (*apiserver.AuthorizerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_AuthorizerConfiguration_To_apiserver_AuthorizerConfiguration(a.(*AuthorizerConfiguration), b.(*apiserver.AuthorizerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.AuthorizerConfiguration)(nil), (*AuthorizerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_AuthorizerConfiguration_To_v1alpha1_AuthorizerConfiguration(a.(*apiserver.AuthorizerConfiguration), b.(*AuthorizerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ClaimMappings)(nil), (*apiserver.ClaimMappings)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings(a.(*ClaimMappings), b.(*apiserver.ClaimMappings), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.ClaimMappings)(nil), (*ClaimMappings)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings(a.(*apiserver.ClaimMappings), b.(*ClaimMappings), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ClaimValidationRule)(nil), (*apiserver.ClaimValidationRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ClaimValidationRule_To_apiserver_ClaimValidationRule(a.(*ClaimValidationRule), b.(*apiserver.ClaimValidationRule), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.ClaimValidationRule)(nil), (*ClaimValidationRule)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_ClaimValidationRule_To_v1alpha1_ClaimValidationRule(a.(*apiserver.ClaimValidationRule), b.(*ClaimValidationRule), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*Connection)(nil), (*apiserver.Connection)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_Connection_To_apiserver_Connection(a.(*Connection), b.(*apiserver.Connection), scope) }); err != nil { @@ -81,6 +131,36 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*Issuer)(nil), (*apiserver.Issuer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_Issuer_To_apiserver_Issuer(a.(*Issuer), b.(*apiserver.Issuer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.Issuer)(nil), (*Issuer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_Issuer_To_v1alpha1_Issuer(a.(*apiserver.Issuer), b.(*Issuer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*JWTAuthenticator)(nil), (*apiserver.JWTAuthenticator)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_JWTAuthenticator_To_apiserver_JWTAuthenticator(a.(*JWTAuthenticator), b.(*apiserver.JWTAuthenticator), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.JWTAuthenticator)(nil), (*JWTAuthenticator)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_JWTAuthenticator_To_v1alpha1_JWTAuthenticator(a.(*apiserver.JWTAuthenticator), b.(*JWTAuthenticator), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*PrefixedClaimOrExpression)(nil), (*apiserver.PrefixedClaimOrExpression)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(a.(*PrefixedClaimOrExpression), b.(*apiserver.PrefixedClaimOrExpression), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.PrefixedClaimOrExpression)(nil), (*PrefixedClaimOrExpression)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(a.(*apiserver.PrefixedClaimOrExpression), b.(*PrefixedClaimOrExpression), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*TCPTransport)(nil), (*apiserver.TCPTransport)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_TCPTransport_To_apiserver_TCPTransport(a.(*TCPTransport), b.(*apiserver.TCPTransport), scope) }); err != nil { @@ -131,6 +211,36 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*WebhookConfiguration)(nil), (*apiserver.WebhookConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_WebhookConfiguration_To_apiserver_WebhookConfiguration(a.(*WebhookConfiguration), b.(*apiserver.WebhookConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.WebhookConfiguration)(nil), (*WebhookConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_WebhookConfiguration_To_v1alpha1_WebhookConfiguration(a.(*apiserver.WebhookConfiguration), b.(*WebhookConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*WebhookConnectionInfo)(nil), (*apiserver.WebhookConnectionInfo)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo(a.(*WebhookConnectionInfo), b.(*apiserver.WebhookConnectionInfo), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.WebhookConnectionInfo)(nil), (*WebhookConnectionInfo)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo(a.(*apiserver.WebhookConnectionInfo), b.(*WebhookConnectionInfo), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*WebhookMatchCondition)(nil), (*apiserver.WebhookMatchCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_WebhookMatchCondition_To_apiserver_WebhookMatchCondition(a.(*WebhookMatchCondition), b.(*apiserver.WebhookMatchCondition), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*apiserver.WebhookMatchCondition)(nil), (*WebhookMatchCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_apiserver_WebhookMatchCondition_To_v1alpha1_WebhookMatchCondition(a.(*apiserver.WebhookMatchCondition), b.(*WebhookMatchCondition), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*EgressSelection)(nil), (*apiserver.EgressSelection)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_EgressSelection_To_apiserver_EgressSelection(a.(*EgressSelection), b.(*apiserver.EgressSelection), scope) }); err != nil { @@ -183,6 +293,120 @@ func Convert_apiserver_AdmissionPluginConfiguration_To_v1alpha1_AdmissionPluginC return autoConvert_apiserver_AdmissionPluginConfiguration_To_v1alpha1_AdmissionPluginConfiguration(in, out, s) } +func autoConvert_v1alpha1_AuthenticationConfiguration_To_apiserver_AuthenticationConfiguration(in *AuthenticationConfiguration, out *apiserver.AuthenticationConfiguration, s conversion.Scope) error { + out.JWT = *(*[]apiserver.JWTAuthenticator)(unsafe.Pointer(&in.JWT)) + return nil +} + +// Convert_v1alpha1_AuthenticationConfiguration_To_apiserver_AuthenticationConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_AuthenticationConfiguration_To_apiserver_AuthenticationConfiguration(in *AuthenticationConfiguration, out *apiserver.AuthenticationConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_AuthenticationConfiguration_To_apiserver_AuthenticationConfiguration(in, out, s) +} + +func autoConvert_apiserver_AuthenticationConfiguration_To_v1alpha1_AuthenticationConfiguration(in *apiserver.AuthenticationConfiguration, out *AuthenticationConfiguration, s conversion.Scope) error { + out.JWT = *(*[]JWTAuthenticator)(unsafe.Pointer(&in.JWT)) + return nil +} + +// Convert_apiserver_AuthenticationConfiguration_To_v1alpha1_AuthenticationConfiguration is an autogenerated conversion function. +func Convert_apiserver_AuthenticationConfiguration_To_v1alpha1_AuthenticationConfiguration(in *apiserver.AuthenticationConfiguration, out *AuthenticationConfiguration, s conversion.Scope) error { + return autoConvert_apiserver_AuthenticationConfiguration_To_v1alpha1_AuthenticationConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_AuthorizationConfiguration_To_apiserver_AuthorizationConfiguration(in *AuthorizationConfiguration, out *apiserver.AuthorizationConfiguration, s conversion.Scope) error { + out.Authorizers = *(*[]apiserver.AuthorizerConfiguration)(unsafe.Pointer(&in.Authorizers)) + return nil +} + +// Convert_v1alpha1_AuthorizationConfiguration_To_apiserver_AuthorizationConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_AuthorizationConfiguration_To_apiserver_AuthorizationConfiguration(in *AuthorizationConfiguration, out *apiserver.AuthorizationConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_AuthorizationConfiguration_To_apiserver_AuthorizationConfiguration(in, out, s) +} + +func autoConvert_apiserver_AuthorizationConfiguration_To_v1alpha1_AuthorizationConfiguration(in *apiserver.AuthorizationConfiguration, out *AuthorizationConfiguration, s conversion.Scope) error { + out.Authorizers = *(*[]AuthorizerConfiguration)(unsafe.Pointer(&in.Authorizers)) + return nil +} + +// Convert_apiserver_AuthorizationConfiguration_To_v1alpha1_AuthorizationConfiguration is an autogenerated conversion function. +func Convert_apiserver_AuthorizationConfiguration_To_v1alpha1_AuthorizationConfiguration(in *apiserver.AuthorizationConfiguration, out *AuthorizationConfiguration, s conversion.Scope) error { + return autoConvert_apiserver_AuthorizationConfiguration_To_v1alpha1_AuthorizationConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_AuthorizerConfiguration_To_apiserver_AuthorizerConfiguration(in *AuthorizerConfiguration, out *apiserver.AuthorizerConfiguration, s conversion.Scope) error { + out.Type = apiserver.AuthorizerType(in.Type) + out.Webhook = (*apiserver.WebhookConfiguration)(unsafe.Pointer(in.Webhook)) + return nil +} + +// Convert_v1alpha1_AuthorizerConfiguration_To_apiserver_AuthorizerConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_AuthorizerConfiguration_To_apiserver_AuthorizerConfiguration(in *AuthorizerConfiguration, out *apiserver.AuthorizerConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_AuthorizerConfiguration_To_apiserver_AuthorizerConfiguration(in, out, s) +} + +func autoConvert_apiserver_AuthorizerConfiguration_To_v1alpha1_AuthorizerConfiguration(in *apiserver.AuthorizerConfiguration, out *AuthorizerConfiguration, s conversion.Scope) error { + out.Type = string(in.Type) + out.Webhook = (*WebhookConfiguration)(unsafe.Pointer(in.Webhook)) + return nil +} + +// Convert_apiserver_AuthorizerConfiguration_To_v1alpha1_AuthorizerConfiguration is an autogenerated conversion function. +func Convert_apiserver_AuthorizerConfiguration_To_v1alpha1_AuthorizerConfiguration(in *apiserver.AuthorizerConfiguration, out *AuthorizerConfiguration, s conversion.Scope) error { + return autoConvert_apiserver_AuthorizerConfiguration_To_v1alpha1_AuthorizerConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings(in *ClaimMappings, out *apiserver.ClaimMappings, s conversion.Scope) error { + if err := Convert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(&in.Username, &out.Username, s); err != nil { + return err + } + if err := Convert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(&in.Groups, &out.Groups, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings is an autogenerated conversion function. +func Convert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings(in *ClaimMappings, out *apiserver.ClaimMappings, s conversion.Scope) error { + return autoConvert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings(in, out, s) +} + +func autoConvert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings(in *apiserver.ClaimMappings, out *ClaimMappings, s conversion.Scope) error { + if err := Convert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(&in.Username, &out.Username, s); err != nil { + return err + } + if err := Convert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(&in.Groups, &out.Groups, s); err != nil { + return err + } + return nil +} + +// Convert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings is an autogenerated conversion function. +func Convert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings(in *apiserver.ClaimMappings, out *ClaimMappings, s conversion.Scope) error { + return autoConvert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings(in, out, s) +} + +func autoConvert_v1alpha1_ClaimValidationRule_To_apiserver_ClaimValidationRule(in *ClaimValidationRule, out *apiserver.ClaimValidationRule, s conversion.Scope) error { + out.Claim = in.Claim + out.RequiredValue = in.RequiredValue + return nil +} + +// Convert_v1alpha1_ClaimValidationRule_To_apiserver_ClaimValidationRule is an autogenerated conversion function. +func Convert_v1alpha1_ClaimValidationRule_To_apiserver_ClaimValidationRule(in *ClaimValidationRule, out *apiserver.ClaimValidationRule, s conversion.Scope) error { + return autoConvert_v1alpha1_ClaimValidationRule_To_apiserver_ClaimValidationRule(in, out, s) +} + +func autoConvert_apiserver_ClaimValidationRule_To_v1alpha1_ClaimValidationRule(in *apiserver.ClaimValidationRule, out *ClaimValidationRule, s conversion.Scope) error { + out.Claim = in.Claim + out.RequiredValue = in.RequiredValue + return nil +} + +// Convert_apiserver_ClaimValidationRule_To_v1alpha1_ClaimValidationRule is an autogenerated conversion function. +func Convert_apiserver_ClaimValidationRule_To_v1alpha1_ClaimValidationRule(in *apiserver.ClaimValidationRule, out *ClaimValidationRule, s conversion.Scope) error { + return autoConvert_apiserver_ClaimValidationRule_To_v1alpha1_ClaimValidationRule(in, out, s) +} + func autoConvert_v1alpha1_Connection_To_apiserver_Connection(in *Connection, out *apiserver.Connection, s conversion.Scope) error { out.ProxyProtocol = apiserver.ProtocolType(in.ProxyProtocol) out.Transport = (*apiserver.Transport)(unsafe.Pointer(in.Transport)) @@ -266,6 +490,84 @@ func Convert_apiserver_EgressSelectorConfiguration_To_v1alpha1_EgressSelectorCon return autoConvert_apiserver_EgressSelectorConfiguration_To_v1alpha1_EgressSelectorConfiguration(in, out, s) } +func autoConvert_v1alpha1_Issuer_To_apiserver_Issuer(in *Issuer, out *apiserver.Issuer, s conversion.Scope) error { + out.URL = in.URL + out.CertificateAuthority = in.CertificateAuthority + out.Audiences = *(*[]string)(unsafe.Pointer(&in.Audiences)) + return nil +} + +// Convert_v1alpha1_Issuer_To_apiserver_Issuer is an autogenerated conversion function. +func Convert_v1alpha1_Issuer_To_apiserver_Issuer(in *Issuer, out *apiserver.Issuer, s conversion.Scope) error { + return autoConvert_v1alpha1_Issuer_To_apiserver_Issuer(in, out, s) +} + +func autoConvert_apiserver_Issuer_To_v1alpha1_Issuer(in *apiserver.Issuer, out *Issuer, s conversion.Scope) error { + out.URL = in.URL + out.CertificateAuthority = in.CertificateAuthority + out.Audiences = *(*[]string)(unsafe.Pointer(&in.Audiences)) + return nil +} + +// Convert_apiserver_Issuer_To_v1alpha1_Issuer is an autogenerated conversion function. +func Convert_apiserver_Issuer_To_v1alpha1_Issuer(in *apiserver.Issuer, out *Issuer, s conversion.Scope) error { + return autoConvert_apiserver_Issuer_To_v1alpha1_Issuer(in, out, s) +} + +func autoConvert_v1alpha1_JWTAuthenticator_To_apiserver_JWTAuthenticator(in *JWTAuthenticator, out *apiserver.JWTAuthenticator, s conversion.Scope) error { + if err := Convert_v1alpha1_Issuer_To_apiserver_Issuer(&in.Issuer, &out.Issuer, s); err != nil { + return err + } + out.ClaimValidationRules = *(*[]apiserver.ClaimValidationRule)(unsafe.Pointer(&in.ClaimValidationRules)) + if err := Convert_v1alpha1_ClaimMappings_To_apiserver_ClaimMappings(&in.ClaimMappings, &out.ClaimMappings, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha1_JWTAuthenticator_To_apiserver_JWTAuthenticator is an autogenerated conversion function. +func Convert_v1alpha1_JWTAuthenticator_To_apiserver_JWTAuthenticator(in *JWTAuthenticator, out *apiserver.JWTAuthenticator, s conversion.Scope) error { + return autoConvert_v1alpha1_JWTAuthenticator_To_apiserver_JWTAuthenticator(in, out, s) +} + +func autoConvert_apiserver_JWTAuthenticator_To_v1alpha1_JWTAuthenticator(in *apiserver.JWTAuthenticator, out *JWTAuthenticator, s conversion.Scope) error { + if err := Convert_apiserver_Issuer_To_v1alpha1_Issuer(&in.Issuer, &out.Issuer, s); err != nil { + return err + } + out.ClaimValidationRules = *(*[]ClaimValidationRule)(unsafe.Pointer(&in.ClaimValidationRules)) + if err := Convert_apiserver_ClaimMappings_To_v1alpha1_ClaimMappings(&in.ClaimMappings, &out.ClaimMappings, s); err != nil { + return err + } + return nil +} + +// Convert_apiserver_JWTAuthenticator_To_v1alpha1_JWTAuthenticator is an autogenerated conversion function. +func Convert_apiserver_JWTAuthenticator_To_v1alpha1_JWTAuthenticator(in *apiserver.JWTAuthenticator, out *JWTAuthenticator, s conversion.Scope) error { + return autoConvert_apiserver_JWTAuthenticator_To_v1alpha1_JWTAuthenticator(in, out, s) +} + +func autoConvert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(in *PrefixedClaimOrExpression, out *apiserver.PrefixedClaimOrExpression, s conversion.Scope) error { + out.Claim = in.Claim + out.Prefix = (*string)(unsafe.Pointer(in.Prefix)) + return nil +} + +// Convert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression is an autogenerated conversion function. +func Convert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(in *PrefixedClaimOrExpression, out *apiserver.PrefixedClaimOrExpression, s conversion.Scope) error { + return autoConvert_v1alpha1_PrefixedClaimOrExpression_To_apiserver_PrefixedClaimOrExpression(in, out, s) +} + +func autoConvert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(in *apiserver.PrefixedClaimOrExpression, out *PrefixedClaimOrExpression, s conversion.Scope) error { + out.Claim = in.Claim + out.Prefix = (*string)(unsafe.Pointer(in.Prefix)) + return nil +} + +// Convert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression is an autogenerated conversion function. +func Convert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(in *apiserver.PrefixedClaimOrExpression, out *PrefixedClaimOrExpression, s conversion.Scope) error { + return autoConvert_apiserver_PrefixedClaimOrExpression_To_v1alpha1_PrefixedClaimOrExpression(in, out, s) +} + func autoConvert_v1alpha1_TCPTransport_To_apiserver_TCPTransport(in *TCPTransport, out *apiserver.TCPTransport, s conversion.Scope) error { out.URL = in.URL out.TLSConfig = (*apiserver.TLSConfig)(unsafe.Pointer(in.TLSConfig)) @@ -373,3 +675,85 @@ func autoConvert_apiserver_UDSTransport_To_v1alpha1_UDSTransport(in *apiserver.U func Convert_apiserver_UDSTransport_To_v1alpha1_UDSTransport(in *apiserver.UDSTransport, out *UDSTransport, s conversion.Scope) error { return autoConvert_apiserver_UDSTransport_To_v1alpha1_UDSTransport(in, out, s) } + +func autoConvert_v1alpha1_WebhookConfiguration_To_apiserver_WebhookConfiguration(in *WebhookConfiguration, out *apiserver.WebhookConfiguration, s conversion.Scope) error { + out.Name = in.Name + out.AuthorizedTTL = in.AuthorizedTTL + out.UnauthorizedTTL = in.UnauthorizedTTL + out.Timeout = in.Timeout + out.SubjectAccessReviewVersion = in.SubjectAccessReviewVersion + out.MatchConditionSubjectAccessReviewVersion = in.MatchConditionSubjectAccessReviewVersion + out.FailurePolicy = in.FailurePolicy + if err := Convert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo(&in.ConnectionInfo, &out.ConnectionInfo, s); err != nil { + return err + } + out.MatchConditions = *(*[]apiserver.WebhookMatchCondition)(unsafe.Pointer(&in.MatchConditions)) + return nil +} + +// Convert_v1alpha1_WebhookConfiguration_To_apiserver_WebhookConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_WebhookConfiguration_To_apiserver_WebhookConfiguration(in *WebhookConfiguration, out *apiserver.WebhookConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_WebhookConfiguration_To_apiserver_WebhookConfiguration(in, out, s) +} + +func autoConvert_apiserver_WebhookConfiguration_To_v1alpha1_WebhookConfiguration(in *apiserver.WebhookConfiguration, out *WebhookConfiguration, s conversion.Scope) error { + out.Name = in.Name + out.AuthorizedTTL = in.AuthorizedTTL + out.UnauthorizedTTL = in.UnauthorizedTTL + out.Timeout = in.Timeout + out.SubjectAccessReviewVersion = in.SubjectAccessReviewVersion + out.MatchConditionSubjectAccessReviewVersion = in.MatchConditionSubjectAccessReviewVersion + out.FailurePolicy = in.FailurePolicy + if err := Convert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo(&in.ConnectionInfo, &out.ConnectionInfo, s); err != nil { + return err + } + out.MatchConditions = *(*[]WebhookMatchCondition)(unsafe.Pointer(&in.MatchConditions)) + return nil +} + +// Convert_apiserver_WebhookConfiguration_To_v1alpha1_WebhookConfiguration is an autogenerated conversion function. +func Convert_apiserver_WebhookConfiguration_To_v1alpha1_WebhookConfiguration(in *apiserver.WebhookConfiguration, out *WebhookConfiguration, s conversion.Scope) error { + return autoConvert_apiserver_WebhookConfiguration_To_v1alpha1_WebhookConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo(in *WebhookConnectionInfo, out *apiserver.WebhookConnectionInfo, s conversion.Scope) error { + out.Type = in.Type + out.KubeConfigFile = (*string)(unsafe.Pointer(in.KubeConfigFile)) + return nil +} + +// Convert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo is an autogenerated conversion function. +func Convert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo(in *WebhookConnectionInfo, out *apiserver.WebhookConnectionInfo, s conversion.Scope) error { + return autoConvert_v1alpha1_WebhookConnectionInfo_To_apiserver_WebhookConnectionInfo(in, out, s) +} + +func autoConvert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo(in *apiserver.WebhookConnectionInfo, out *WebhookConnectionInfo, s conversion.Scope) error { + out.Type = in.Type + out.KubeConfigFile = (*string)(unsafe.Pointer(in.KubeConfigFile)) + return nil +} + +// Convert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo is an autogenerated conversion function. +func Convert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo(in *apiserver.WebhookConnectionInfo, out *WebhookConnectionInfo, s conversion.Scope) error { + return autoConvert_apiserver_WebhookConnectionInfo_To_v1alpha1_WebhookConnectionInfo(in, out, s) +} + +func autoConvert_v1alpha1_WebhookMatchCondition_To_apiserver_WebhookMatchCondition(in *WebhookMatchCondition, out *apiserver.WebhookMatchCondition, s conversion.Scope) error { + out.Expression = in.Expression + return nil +} + +// Convert_v1alpha1_WebhookMatchCondition_To_apiserver_WebhookMatchCondition is an autogenerated conversion function. +func Convert_v1alpha1_WebhookMatchCondition_To_apiserver_WebhookMatchCondition(in *WebhookMatchCondition, out *apiserver.WebhookMatchCondition, s conversion.Scope) error { + return autoConvert_v1alpha1_WebhookMatchCondition_To_apiserver_WebhookMatchCondition(in, out, s) +} + +func autoConvert_apiserver_WebhookMatchCondition_To_v1alpha1_WebhookMatchCondition(in *apiserver.WebhookMatchCondition, out *WebhookMatchCondition, s conversion.Scope) error { + out.Expression = in.Expression + return nil +} + +// Convert_apiserver_WebhookMatchCondition_To_v1alpha1_WebhookMatchCondition is an autogenerated conversion function. +func Convert_apiserver_WebhookMatchCondition_To_v1alpha1_WebhookMatchCondition(in *apiserver.WebhookMatchCondition, out *WebhookMatchCondition, s conversion.Scope) error { + return autoConvert_apiserver_WebhookMatchCondition_To_v1alpha1_WebhookMatchCondition(in, out, s) +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.deepcopy.go index f8ac34035fd8..5121d05e7d3c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.deepcopy.go @@ -78,6 +78,125 @@ func (in *AdmissionPluginConfiguration) DeepCopy() *AdmissionPluginConfiguration return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationConfiguration) DeepCopyInto(out *AuthenticationConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.JWT != nil { + in, out := &in.JWT, &out.JWT + *out = make([]JWTAuthenticator, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationConfiguration. +func (in *AuthenticationConfiguration) DeepCopy() *AuthenticationConfiguration { + if in == nil { + return nil + } + out := new(AuthenticationConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuthenticationConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthorizationConfiguration) DeepCopyInto(out *AuthorizationConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.Authorizers != nil { + in, out := &in.Authorizers, &out.Authorizers + *out = make([]AuthorizerConfiguration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthorizationConfiguration. +func (in *AuthorizationConfiguration) DeepCopy() *AuthorizationConfiguration { + if in == nil { + return nil + } + out := new(AuthorizationConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuthorizationConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthorizerConfiguration) DeepCopyInto(out *AuthorizerConfiguration) { + *out = *in + if in.Webhook != nil { + in, out := &in.Webhook, &out.Webhook + *out = new(WebhookConfiguration) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthorizerConfiguration. +func (in *AuthorizerConfiguration) DeepCopy() *AuthorizerConfiguration { + if in == nil { + return nil + } + out := new(AuthorizerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClaimMappings) DeepCopyInto(out *ClaimMappings) { + *out = *in + in.Username.DeepCopyInto(&out.Username) + in.Groups.DeepCopyInto(&out.Groups) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClaimMappings. +func (in *ClaimMappings) DeepCopy() *ClaimMappings { + if in == nil { + return nil + } + out := new(ClaimMappings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClaimValidationRule) DeepCopyInto(out *ClaimValidationRule) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClaimValidationRule. +func (in *ClaimValidationRule) DeepCopy() *ClaimValidationRule { + if in == nil { + return nil + } + out := new(ClaimValidationRule) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Connection) DeepCopyInto(out *Connection) { *out = *in @@ -148,6 +267,71 @@ func (in *EgressSelectorConfiguration) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Issuer) DeepCopyInto(out *Issuer) { + *out = *in + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Issuer. +func (in *Issuer) DeepCopy() *Issuer { + if in == nil { + return nil + } + out := new(Issuer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *JWTAuthenticator) DeepCopyInto(out *JWTAuthenticator) { + *out = *in + in.Issuer.DeepCopyInto(&out.Issuer) + if in.ClaimValidationRules != nil { + in, out := &in.ClaimValidationRules, &out.ClaimValidationRules + *out = make([]ClaimValidationRule, len(*in)) + copy(*out, *in) + } + in.ClaimMappings.DeepCopyInto(&out.ClaimMappings) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JWTAuthenticator. +func (in *JWTAuthenticator) DeepCopy() *JWTAuthenticator { + if in == nil { + return nil + } + out := new(JWTAuthenticator) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PrefixedClaimOrExpression) DeepCopyInto(out *PrefixedClaimOrExpression) { + *out = *in + if in.Prefix != nil { + in, out := &in.Prefix, &out.Prefix + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrefixedClaimOrExpression. +func (in *PrefixedClaimOrExpression) DeepCopy() *PrefixedClaimOrExpression { + if in == nil { + return nil + } + out := new(PrefixedClaimOrExpression) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TCPTransport) DeepCopyInto(out *TCPTransport) { *out = *in @@ -252,3 +436,65 @@ func (in *UDSTransport) DeepCopy() *UDSTransport { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookConfiguration) DeepCopyInto(out *WebhookConfiguration) { + *out = *in + out.AuthorizedTTL = in.AuthorizedTTL + out.UnauthorizedTTL = in.UnauthorizedTTL + out.Timeout = in.Timeout + in.ConnectionInfo.DeepCopyInto(&out.ConnectionInfo) + if in.MatchConditions != nil { + in, out := &in.MatchConditions, &out.MatchConditions + *out = make([]WebhookMatchCondition, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookConfiguration. +func (in *WebhookConfiguration) DeepCopy() *WebhookConfiguration { + if in == nil { + return nil + } + out := new(WebhookConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookConnectionInfo) DeepCopyInto(out *WebhookConnectionInfo) { + *out = *in + if in.KubeConfigFile != nil { + in, out := &in.KubeConfigFile, &out.KubeConfigFile + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookConnectionInfo. +func (in *WebhookConnectionInfo) DeepCopy() *WebhookConnectionInfo { + if in == nil { + return nil + } + out := new(WebhookConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookMatchCondition) DeepCopyInto(out *WebhookMatchCondition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookMatchCondition. +func (in *WebhookMatchCondition) DeepCopy() *WebhookMatchCondition { + if in == nil { + return nil + } + out := new(WebhookMatchCondition) + in.DeepCopyInto(out) + return out +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.defaults.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.defaults.go index 5070cb91b90f..fc76be0fb8a2 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.defaults.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/v1alpha1/zz_generated.defaults.go @@ -29,5 +29,15 @@ import ( // Public to allow building arbitrary schemes. // All generated defaulters are covering - they call all nested defaulters. func RegisterDefaults(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&AuthorizationConfiguration{}, func(obj interface{}) { SetObjectDefaults_AuthorizationConfiguration(obj.(*AuthorizationConfiguration)) }) return nil } + +func SetObjectDefaults_AuthorizationConfiguration(in *AuthorizationConfiguration) { + for i := range in.Authorizers { + a := &in.Authorizers[i] + if a.Webhook != nil { + SetDefaults_WebhookConfiguration(a.Webhook) + } + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/zz_generated.deepcopy.go index 40c8b4a6e9ba..87b41f7ef6ba 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/apis/apiserver/zz_generated.deepcopy.go @@ -78,6 +78,125 @@ func (in *AdmissionPluginConfiguration) DeepCopy() *AdmissionPluginConfiguration return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationConfiguration) DeepCopyInto(out *AuthenticationConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.JWT != nil { + in, out := &in.JWT, &out.JWT + *out = make([]JWTAuthenticator, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationConfiguration. +func (in *AuthenticationConfiguration) DeepCopy() *AuthenticationConfiguration { + if in == nil { + return nil + } + out := new(AuthenticationConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuthenticationConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthorizationConfiguration) DeepCopyInto(out *AuthorizationConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.Authorizers != nil { + in, out := &in.Authorizers, &out.Authorizers + *out = make([]AuthorizerConfiguration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthorizationConfiguration. +func (in *AuthorizationConfiguration) DeepCopy() *AuthorizationConfiguration { + if in == nil { + return nil + } + out := new(AuthorizationConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuthorizationConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthorizerConfiguration) DeepCopyInto(out *AuthorizerConfiguration) { + *out = *in + if in.Webhook != nil { + in, out := &in.Webhook, &out.Webhook + *out = new(WebhookConfiguration) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthorizerConfiguration. +func (in *AuthorizerConfiguration) DeepCopy() *AuthorizerConfiguration { + if in == nil { + return nil + } + out := new(AuthorizerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClaimMappings) DeepCopyInto(out *ClaimMappings) { + *out = *in + in.Username.DeepCopyInto(&out.Username) + in.Groups.DeepCopyInto(&out.Groups) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClaimMappings. +func (in *ClaimMappings) DeepCopy() *ClaimMappings { + if in == nil { + return nil + } + out := new(ClaimMappings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClaimValidationRule) DeepCopyInto(out *ClaimValidationRule) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClaimValidationRule. +func (in *ClaimValidationRule) DeepCopy() *ClaimValidationRule { + if in == nil { + return nil + } + out := new(ClaimValidationRule) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Connection) DeepCopyInto(out *Connection) { *out = *in @@ -148,6 +267,71 @@ func (in *EgressSelectorConfiguration) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Issuer) DeepCopyInto(out *Issuer) { + *out = *in + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Issuer. +func (in *Issuer) DeepCopy() *Issuer { + if in == nil { + return nil + } + out := new(Issuer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *JWTAuthenticator) DeepCopyInto(out *JWTAuthenticator) { + *out = *in + in.Issuer.DeepCopyInto(&out.Issuer) + if in.ClaimValidationRules != nil { + in, out := &in.ClaimValidationRules, &out.ClaimValidationRules + *out = make([]ClaimValidationRule, len(*in)) + copy(*out, *in) + } + in.ClaimMappings.DeepCopyInto(&out.ClaimMappings) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JWTAuthenticator. +func (in *JWTAuthenticator) DeepCopy() *JWTAuthenticator { + if in == nil { + return nil + } + out := new(JWTAuthenticator) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PrefixedClaimOrExpression) DeepCopyInto(out *PrefixedClaimOrExpression) { + *out = *in + if in.Prefix != nil { + in, out := &in.Prefix, &out.Prefix + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrefixedClaimOrExpression. +func (in *PrefixedClaimOrExpression) DeepCopy() *PrefixedClaimOrExpression { + if in == nil { + return nil + } + out := new(PrefixedClaimOrExpression) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TCPTransport) DeepCopyInto(out *TCPTransport) { *out = *in @@ -252,3 +436,65 @@ func (in *UDSTransport) DeepCopy() *UDSTransport { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookConfiguration) DeepCopyInto(out *WebhookConfiguration) { + *out = *in + out.AuthorizedTTL = in.AuthorizedTTL + out.UnauthorizedTTL = in.UnauthorizedTTL + out.Timeout = in.Timeout + in.ConnectionInfo.DeepCopyInto(&out.ConnectionInfo) + if in.MatchConditions != nil { + in, out := &in.MatchConditions, &out.MatchConditions + *out = make([]WebhookMatchCondition, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookConfiguration. +func (in *WebhookConfiguration) DeepCopy() *WebhookConfiguration { + if in == nil { + return nil + } + out := new(WebhookConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookConnectionInfo) DeepCopyInto(out *WebhookConnectionInfo) { + *out = *in + if in.KubeConfigFile != nil { + in, out := &in.KubeConfigFile, &out.KubeConfigFile + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookConnectionInfo. +func (in *WebhookConnectionInfo) DeepCopy() *WebhookConnectionInfo { + if in == nil { + return nil + } + out := new(WebhookConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookMatchCondition) DeepCopyInto(out *WebhookMatchCondition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookMatchCondition. +func (in *WebhookMatchCondition) DeepCopy() *WebhookMatchCondition { + if in == nil { + return nil + } + out := new(WebhookMatchCondition) + in.DeepCopyInto(out) + return out +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go index 63010aadc2cc..d67c53547634 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go @@ -148,6 +148,33 @@ func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.R } } + /* + kubernetes mutual (2-way) x509 between client and apiserver: + + 1. apiserver sending its apiserver certificate along with its publickey to client + 2. client verifies the apiserver certificate sent against its cluster certificate authority data + 3. client sending its client certificate along with its public key to the apiserver + >4. apiserver verifies the client certificate sent against its cluster certificate authority data + + description: + here, with this function, + client certificate and pub key sent during the handshake process + are verified by apiserver against its cluster certificate authority data + + normal args related to this stage: + --client-ca-file string If set, any request presenting a client certificate signed by + one of the authorities in the client-ca-file is authenticated with an identity + corresponding to the CommonName of the client certificate. + + (retrievable from "kube-apiserver --help" command) + (suggested by @deads2k) + + see also: + - for the step 1, see: staging/src/k8s.io/apiserver/pkg/server/options/serving.go + - for the step 2, see: staging/src/k8s.io/client-go/transport/transport.go + - for the step 3, see: staging/src/k8s.io/client-go/transport/transport.go + */ + remaining := req.TLS.PeerCertificates[0].NotAfter.Sub(time.Now()) clientCertificateExpirationHistogram.WithContext(req.Context()).Observe(remaining.Seconds()) chains, err := req.TLS.PeerCertificates[0].Verify(optsCopy) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/environment/base.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/environment/base.go index ed0d3404116a..620d9e35e54f 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/environment/base.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/environment/base.go @@ -41,7 +41,7 @@ import ( // desirable because it means that CEL expressions are portable across a wider range // of Kubernetes versions. func DefaultCompatibilityVersion() *version.Version { - return version.MajorMinor(1, 27) + return version.MajorMinor(1, 28) } var baseOpts = []VersionedOptions{ @@ -57,7 +57,6 @@ var baseOpts = []VersionedOptions{ cel.EagerlyValidateDeclarations(true), cel.DefaultUTCTimeZone(true), - ext.Strings(ext.StringsVersion(0)), library.URLs(), library.Regex(), library.Lists(), @@ -81,7 +80,21 @@ var baseOpts = []VersionedOptions{ library.Quantity(), }, }, - // TODO: switch to ext.Strings version 2 once format() is fixed to work with HomogeneousAggregateLiterals. + + // String library + { + IntroducedVersion: version.MajorMinor(1, 0), + RemovedVersion: version.MajorMinor(1, 29), + EnvOptions: []cel.EnvOption{ + ext.Strings(ext.StringsVersion(0)), + }, + }, + { + IntroducedVersion: version.MajorMinor(1, 29), + EnvOptions: []cel.EnvOption{ + ext.Strings(ext.StringsVersion(2)), + }, + }, } // MustBaseEnvSet returns the common CEL base environments for Kubernetes for Version, or panics diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/lazy/lazy.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/lazy/lazy.go index 1742deb0a2f6..16183050d9b7 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/lazy/lazy.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/lazy/lazy.go @@ -35,7 +35,7 @@ var _ traits.Mapper = (*MapValue)(nil) // MapValue is a map that lazily evaluate its value when a field is first accessed. // The map value is not designed to be thread-safe. type MapValue struct { - typeValue *types.TypeValue + typeValue *types.Type // values are previously evaluated values obtained from callbacks values map[string]ref.Val diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/authz.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/authz.go index 00f0200e865d..df4bf0807148 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/authz.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/authz.go @@ -202,6 +202,10 @@ var authzLib = &authz{} type authz struct{} +func (*authz) LibraryName() string { + return "k8s.authz" +} + var authzLibraryDecls = map[string][]cel.FunctionOpt{ "path": { cel.MemberOverload("authorizer_path", []*cel.Type{AuthorizerType, cel.StringType}, PathCheckType, @@ -578,7 +582,7 @@ type decisionVal struct { // any object type that has receiver functions but does not expose any fields to // CEL. type receiverOnlyObjectVal struct { - typeValue *types.TypeValue + typeValue *types.Type } // receiverOnlyVal returns a receiverOnlyObjectVal for the given type. diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/cost.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/cost.go index 5201d187be2c..d18c138ec8f6 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/cost.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/cost.go @@ -101,8 +101,8 @@ func (l *CostEstimator) EstimateCallCost(function, overloadId string, target *ch // If the list contains strings or bytes, add the cost of traversing all the strings/bytes as a way // of estimating the additional comparison cost. if elNode := l.listElementNode(*target); elNode != nil { - t := elNode.Type().GetPrimitive() - if t == exprpb.Type_STRING || t == exprpb.Type_BYTES { + k := elNode.Type().Kind() + if k == types.StringKind || k == types.BytesKind { sz := l.sizeEstimate(elNode) elCost = elCost.Add(sz.MultiplyByCostFactor(common.StringTraversalCostFactor)) } @@ -126,13 +126,51 @@ func (l *CostEstimator) EstimateCallCost(function, overloadId string, target *ch sz := l.sizeEstimate(*target) toReplaceSz := l.sizeEstimate(args[0]) replaceWithSz := l.sizeEstimate(args[1]) - // smallest possible result: smallest input size composed of the largest possible substrings being replaced by smallest possible replacement - minSz := uint64(math.Ceil(float64(sz.Min)/float64(toReplaceSz.Max))) * replaceWithSz.Min - // largest possible result: largest input size composed of the smallest possible substrings being replaced by largest possible replacement - maxSz := uint64(math.Ceil(float64(sz.Max)/float64(toReplaceSz.Min))) * replaceWithSz.Max + + var replaceCount, retainedSz checker.SizeEstimate + // find the longest replacement: + if toReplaceSz.Min == 0 { + // if the string being replaced is empty, replace surrounds all characters in the input string with the replacement. + if sz.Max < math.MaxUint64 { + replaceCount.Max = sz.Max + 1 + } else { + replaceCount.Max = sz.Max + } + // Include the length of the longest possible original string length. + retainedSz.Max = sz.Max + } else if replaceWithSz.Max <= toReplaceSz.Min { + // If the replacement does not make the result longer, use the original string length. + replaceCount.Max = 0 + retainedSz.Max = sz.Max + } else { + // Replace the smallest possible substrings with the largest possible replacement + // as many times as possible. + replaceCount.Max = uint64(math.Ceil(float64(sz.Max) / float64(toReplaceSz.Min))) + } + + // find the shortest replacement: + if toReplaceSz.Max == 0 { + // if the string being replaced is empty, replace surrounds all characters in the input string with the replacement. + if sz.Min < math.MaxUint64 { + replaceCount.Min = sz.Min + 1 + } else { + replaceCount.Min = sz.Min + } + // Include the length of the shortest possible original string length. + retainedSz.Min = sz.Min + } else if toReplaceSz.Max <= replaceWithSz.Min { + // If the replacement does not make the result shorter, use the original string length. + replaceCount.Min = 0 + retainedSz.Min = sz.Min + } else { + // Replace the largest possible substrings being with the smallest possible replacement + // as many times as possible. + replaceCount.Min = uint64(math.Ceil(float64(sz.Min) / float64(toReplaceSz.Max))) + } + size := replaceCount.Multiply(replaceWithSz).Add(retainedSz) // cost is the traversal plus the construction of the result - return &checker.CallEstimate{CostEstimate: sz.MultiplyByCostFactor(2 * common.StringTraversalCostFactor), ResultSize: &checker.SizeEstimate{Min: minSz, Max: maxSz}} + return &checker.CallEstimate{CostEstimate: sz.MultiplyByCostFactor(2 * common.StringTraversalCostFactor), ResultSize: &size} } case "split": if target != nil { @@ -209,7 +247,8 @@ func (l *CostEstimator) sizeEstimate(t checker.AstNode) checker.SizeEstimate { } func (l *CostEstimator) listElementNode(list checker.AstNode) checker.AstNode { - if lt := list.Type().GetListType(); lt != nil { + if params := list.Type().Parameters(); len(params) > 0 { + lt := params[0] nodePath := list.Path() if nodePath != nil { // Provide path if we have it so that a OpenAPIv3 maxLength validation can be looked up, if it exists @@ -217,10 +256,10 @@ func (l *CostEstimator) listElementNode(list checker.AstNode) checker.AstNode { path := make([]string, len(nodePath)+1) copy(path, nodePath) path[len(nodePath)] = "@items" - return &itemsNode{path: path, t: lt.GetElemType(), expr: nil} + return &itemsNode{path: path, t: lt, expr: nil} } else { // Provide just the type if no path is available so that worst case size can be looked up based on type. - return &itemsNode{t: lt.GetElemType(), expr: nil} + return &itemsNode{t: lt, expr: nil} } } return nil @@ -235,7 +274,7 @@ func (l *CostEstimator) EstimateSize(element checker.AstNode) *checker.SizeEstim type itemsNode struct { path []string - t *exprpb.Type + t *types.Type expr *exprpb.Expr } @@ -243,7 +282,7 @@ func (i *itemsNode) Path() []string { return i.path } -func (i *itemsNode) Type() *exprpb.Type { +func (i *itemsNode) Type() *types.Type { return i.t } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/lists.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/lists.go index fe51dc87fdb2..327ec93d6e23 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/lists.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/lists.go @@ -95,6 +95,10 @@ var listsLib = &lists{} type lists struct{} +func (*lists) LibraryName() string { + return "k8s.lists" +} + var paramA = cel.TypeParamType("A") // CEL typeParams can be used to constraint to a specific trait (e.g. traits.ComparableType) if the 1st operand is the type to constrain. diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/quantity.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/quantity.go index 49e3dae7cdb6..b4ac91c8a725 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/quantity.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/quantity.go @@ -22,6 +22,7 @@ import ( "github.com/google/cel-go/cel" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" + "k8s.io/apimachinery/pkg/api/resource" apiservercel "k8s.io/apiserver/pkg/cel" ) @@ -141,6 +142,10 @@ var quantityLib = &quantity{} type quantity struct{} +func (*quantity) LibraryName() string { + return "k8s.quantity" +} + var quantityLibraryDecls = map[string][]cel.FunctionOpt{ "quantity": { cel.Overload("string_to_quantity", []*cel.Type{cel.StringType}, apiservercel.QuantityType, cel.UnaryBinding((stringToQuantity))), diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/regex.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/regex.go index 17fb3d44c970..147a40f9bd26 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/regex.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/regex.go @@ -51,6 +51,10 @@ var regexLib = ®ex{} type regex struct{} +func (*regex) LibraryName() string { + return "k8s.regex" +} + var regexLibraryDecls = map[string][]cel.FunctionOpt{ "find": { cel.MemberOverload("string_find_string", []*cel.Type{cel.StringType, cel.StringType}, cel.StringType, diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/test.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/test.go index 95446f63c6bd..dcbc058a1105 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/test.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/test.go @@ -37,6 +37,10 @@ type testLib struct { version uint32 } +func (*testLib) LibraryName() string { + return "k8s.test" +} + type TestOption func(*testLib) *testLib func TestVersion(version uint32) func(lib *testLib) *testLib { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/urls.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/urls.go index 7be054ece373..8f4ba85af7c8 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/urls.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/cel/library/urls.go @@ -112,6 +112,10 @@ var urlsLib = &urls{} type urls struct{} +func (*urls) LibraryName() string { + return "k8s.urls" +} + var urlLibraryDecls = map[string][]cel.FunctionOpt{ "url": { cel.Overload("string_to_url", []*cel.Type{cel.StringType}, apiservercel.URLType, diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/handler.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/handler.go index 61a7fd70de1e..254a223481d1 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/handler.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/handler.go @@ -229,7 +229,6 @@ func (rdm *resourceDiscoveryManager) AddGroupVersion(source Source, groupName st } func (rdm *resourceDiscoveryManager) addGroupVersionLocked(source Source, groupName string, value apidiscoveryv2beta1.APIVersionDiscovery) { - klog.Infof("Adding GroupVersion %s %s to ResourceManager", groupName, value.Version) if rdm.apiGroups == nil { rdm.apiGroups = make(map[groupKey]*apidiscoveryv2beta1.APIGroupDiscovery) @@ -273,6 +272,7 @@ func (rdm *resourceDiscoveryManager) addGroupVersionLocked(source Source, groupN } rdm.apiGroups[key] = group } + klog.Infof("Adding GroupVersion %s %s to ResourceManager", groupName, value.Version) gv := metav1.GroupVersion{Group: groupName, Version: value.Version} gvKey := groupVersionKey{ diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go index 4803975a7354..a6d293a15908 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go @@ -164,7 +164,7 @@ func WithImpersonation(handler http.Handler, a authorizer.Authorizer, s runtime. req = req.WithContext(request.WithUser(ctx, newUser)) oldUser, _ := request.UserFrom(ctx) - httplog.LogOf(req, w).Addf("%v is acting as %v", oldUser, newUser) + httplog.LogOf(req, w).Addf("%v is impersonating %v", userString(oldUser), userString(newUser)) ae := audit.AuditEventFrom(ctx) audit.LogImpersonatedUser(ae, newUser) @@ -183,6 +183,24 @@ func WithImpersonation(handler http.Handler, a authorizer.Authorizer, s runtime. }) } +func userString(u user.Info) string { + if u == nil { + return "" + } + b := strings.Builder{} + if name := u.GetName(); name == "" { + b.WriteString("") + } else { + b.WriteString(name) + } + if groups := u.GetGroups(); len(groups) > 0 { + b.WriteString("[") + b.WriteString(strings.Join(groups, ",")) + b.WriteString("]") + } + return b.String() +} + func unescapeExtraKey(encodedKey string) string { key, err := url.PathUnescape(encodedKey) // Decode %-encoded bytes. if err != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/helpers.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/helpers.go index 7f85563699de..2c2d3e4824b1 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/helpers.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/helpers.go @@ -77,6 +77,96 @@ func (lazy *lazyAccept) String() string { return "unknown" } +// lazyAPIGroup implements String() string and it will +// lazily get Group from request info. +type lazyAPIGroup struct { + req *http.Request +} + +func (lazy *lazyAPIGroup) String() string { + if lazy.req != nil { + ctx := lazy.req.Context() + requestInfo, ok := apirequest.RequestInfoFrom(ctx) + if ok { + return requestInfo.APIGroup + } + } + + return "unknown" +} + +// lazyAPIVersion implements String() string and it will +// lazily get Group from request info. +type lazyAPIVersion struct { + req *http.Request +} + +func (lazy *lazyAPIVersion) String() string { + if lazy.req != nil { + ctx := lazy.req.Context() + requestInfo, ok := apirequest.RequestInfoFrom(ctx) + if ok { + return requestInfo.APIVersion + } + } + + return "unknown" +} + +// lazyName implements String() string and it will +// lazily get Group from request info. +type lazyName struct { + req *http.Request +} + +func (lazy *lazyName) String() string { + if lazy.req != nil { + ctx := lazy.req.Context() + requestInfo, ok := apirequest.RequestInfoFrom(ctx) + if ok { + return requestInfo.Name + } + } + + return "unknown" +} + +// lazySubresource implements String() string and it will +// lazily get Group from request info. +type lazySubresource struct { + req *http.Request +} + +func (lazy *lazySubresource) String() string { + if lazy.req != nil { + ctx := lazy.req.Context() + requestInfo, ok := apirequest.RequestInfoFrom(ctx) + if ok { + return requestInfo.Subresource + } + } + + return "unknown" +} + +// lazyNamespace implements String() string and it will +// lazily get Group from request info. +type lazyNamespace struct { + req *http.Request +} + +func (lazy *lazyNamespace) String() string { + if lazy.req != nil { + ctx := lazy.req.Context() + requestInfo, ok := apirequest.RequestInfoFrom(ctx) + if ok { + return requestInfo.Namespace + } + } + + return "unknown" +} + // lazyAuditID implements Stringer interface to lazily retrieve // the audit ID associated with the request. type lazyAuditID struct { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go index 4780c59fd425..02111d9b0e79 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/response.go @@ -18,8 +18,11 @@ package handlers import ( "context" + "encoding/json" "fmt" + "io" "net/http" + "reflect" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -29,48 +32,119 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1beta1/validation" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" endpointsrequest "k8s.io/apiserver/pkg/endpoints/request" + + klog "k8s.io/klog/v2" ) -// transformObject takes the object as returned by storage and ensures it is in -// the client's desired form, as well as ensuring any API level fields like self-link -// are properly set. -func transformObject(ctx context.Context, obj runtime.Object, opts interface{}, mediaType negotiation.MediaTypeOptions, scope *RequestScope, req *http.Request) (runtime.Object, error) { +// watchEmbeddedEncoder performs encoding of the embedded object. +// +// NOTE: watchEmbeddedEncoder is NOT thread-safe. +type watchEmbeddedEncoder struct { + encoder runtime.Encoder + + ctx context.Context + + // target, if non-nil, configures transformation type. + // The other options are ignored if target is nil. + target *schema.GroupVersionKind + tableOptions *metav1.TableOptions + scope *RequestScope + + // identifier of the encoder, computed lazily + identifier runtime.Identifier +} + +func newWatchEmbeddedEncoder(ctx context.Context, encoder runtime.Encoder, target *schema.GroupVersionKind, tableOptions *metav1.TableOptions, scope *RequestScope) *watchEmbeddedEncoder { + return &watchEmbeddedEncoder{ + encoder: encoder, + ctx: ctx, + target: target, + tableOptions: tableOptions, + scope: scope, + } +} + +// Encode implements runtime.Encoder interface. +func (e *watchEmbeddedEncoder) Encode(obj runtime.Object, w io.Writer) error { if co, ok := obj.(runtime.CacheableObject); ok { - if mediaType.Convert != nil { - // Non-nil mediaType.Convert means that some conversion of the object - // has to happen. Currently conversion may potentially modify the - // object or assume something about it (e.g. asTable operates on - // reflection, which won't work for any wrapper). - // To ensure it will work correctly, let's operate on base objects - // and not cache it for now. - // - // TODO: Long-term, transformObject should be changed so that it - // implements runtime.Encoder interface. - return doTransformObject(ctx, co.GetObject(), opts, mediaType, scope, req) - } + return co.CacheEncode(e.Identifier(), e.doEncode, w) } - return doTransformObject(ctx, obj, opts, mediaType, scope, req) + return e.doEncode(obj, w) } -func doTransformObject(ctx context.Context, obj runtime.Object, opts interface{}, mediaType negotiation.MediaTypeOptions, scope *RequestScope, req *http.Request) (runtime.Object, error) { - if _, ok := obj.(*metav1.Status); ok { - return obj, nil +func (e *watchEmbeddedEncoder) doEncode(obj runtime.Object, w io.Writer) error { + result, err := doTransformObject(e.ctx, obj, e.tableOptions, e.target, e.scope) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failed to transform object %v: %v", reflect.TypeOf(obj), err)) + result = obj } - // ensure that for empty lists we don't return items. - // This is safe to modify without deep-copying the object, as - // List objects themselves are never cached. - if meta.IsListType(obj) && meta.LenList(obj) == 0 { - if err := meta.SetList(obj, []runtime.Object{}); err != nil { - return nil, err - } + // When we are tranforming to a table, use the original table options when + // we should print headers only on the first object - headers should be + // omitted on subsequent events. + if e.tableOptions != nil && !e.tableOptions.NoHeaders { + e.tableOptions.NoHeaders = true + // With options change, we should recompute the identifier. + // Clearing this will trigger lazy recompute when needed. + e.identifier = "" } - switch target := mediaType.Convert; { + return e.encoder.Encode(result, w) +} + +// Identifier implements runtime.Encoder interface. +func (e *watchEmbeddedEncoder) Identifier() runtime.Identifier { + if e.identifier == "" { + e.identifier = e.embeddedIdentifier() + } + return e.identifier +} + +type watchEmbeddedEncoderIdentifier struct { + Name string `json:"name,omitempty"` + Encoder string `json:"encoder,omitempty"` + Target string `json:"target,omitempty"` + Options metav1.TableOptions `json:"options,omitempty"` + NoHeaders bool `json:"noHeaders,omitempty"` +} + +func (e *watchEmbeddedEncoder) embeddedIdentifier() runtime.Identifier { + if e.target == nil { + // If no conversion is performed, we effective only use + // the embedded identifier. + return e.encoder.Identifier() + } + identifier := watchEmbeddedEncoderIdentifier{ + Name: "watch-embedded", + Encoder: string(e.encoder.Identifier()), + Target: e.target.String(), + } + if e.target.Kind == "Table" && e.tableOptions != nil { + identifier.Options = *e.tableOptions + identifier.NoHeaders = e.tableOptions.NoHeaders + } + + result, err := json.Marshal(identifier) + if err != nil { + klog.Fatalf("Failed marshaling identifier for watchEmbeddedEncoder: %v", err) + } + return runtime.Identifier(result) +} + +// doTransformResponseObject is used for handling all requests, including watch. +func doTransformObject(ctx context.Context, obj runtime.Object, opts interface{}, target *schema.GroupVersionKind, scope *RequestScope) (runtime.Object, error) { + if _, ok := obj.(*metav1.Status); ok { + return obj, nil + } + + switch { case target == nil: + // If we ever change that from a no-op, the identifier of + // the watchEmbeddedEncoder has to be adjusted accordingly. return obj, nil case target.Kind == "PartialObjectMetadata": @@ -128,6 +202,7 @@ func targetEncodingForTransform(scope *RequestScope, mediaType negotiation.Media // transformResponseObject takes an object loaded from storage and performs any necessary transformations. // Will write the complete response object. +// transformResponseObject is used only for handling non-streaming requests. func transformResponseObject(ctx context.Context, scope *RequestScope, req *http.Request, w http.ResponseWriter, statusCode int, mediaType negotiation.MediaTypeOptions, result runtime.Object) { options, err := optionsForTransform(mediaType, req) if err != nil { @@ -135,9 +210,19 @@ func transformResponseObject(ctx context.Context, scope *RequestScope, req *http return } + // ensure that for empty lists we don't return items. + // This is safe to modify without deep-copying the object, as + // List objects themselves are never cached. + if meta.IsListType(result) && meta.LenList(result) == 0 { + if err := meta.SetList(result, []runtime.Object{}); err != nil { + scope.err(err, w, req) + return + } + } + var obj runtime.Object do := func() { - obj, err = transformObject(ctx, result, options, mediaType, scope, req) + obj, err = doTransformObject(ctx, result, options, mediaType.Convert, scope) } endpointsrequest.TrackTransformResponseObjectLatency(ctx, do) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/trace_util.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/trace_util.go index 7d273d622488..760c9bf40b84 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/trace_util.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/trace_util.go @@ -27,6 +27,11 @@ func traceFields(req *http.Request) []attribute.KeyValue { attribute.Stringer("accept", &lazyAccept{req: req}), attribute.Stringer("audit-id", &lazyAuditID{req: req}), attribute.Stringer("client", &lazyClientIP{req: req}), + attribute.Stringer("api-group", &lazyAPIGroup{req: req}), + attribute.Stringer("api-version", &lazyAPIVersion{req: req}), + attribute.Stringer("name", &lazyName{req: req}), + attribute.Stringer("subresource", &lazySubresource{req: req}), + attribute.Stringer("namespace", &lazyNamespace{req: req}), attribute.String("protocol", req.Proto), attribute.Stringer("resource", &lazyResource{req: req}), attribute.Stringer("scope", &lazyScope{req: req}), diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go index 79cb11ca6001..d15819f11457 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/endpoints/handlers/watch.go @@ -19,9 +19,7 @@ package handlers import ( "bytes" "fmt" - "io" "net/http" - "reflect" "time" "golang.org/x/net/websocket" @@ -92,6 +90,8 @@ func serveWatch(watcher watch.Interface, scope *RequestScope, mediaTypeOptions n mediaType += ";stream=watch" } + ctx := req.Context() + // locate the appropriate embedded encoder based on the transform var embeddedEncoder runtime.Encoder contentKind, contentSerializer, transform := targetEncodingForTransform(scope, mediaTypeOptions, req) @@ -106,13 +106,41 @@ func serveWatch(watcher watch.Interface, scope *RequestScope, mediaTypeOptions n embeddedEncoder = scope.Serializer.EncoderForVersion(serializer.Serializer, contentKind.GroupVersion()) } + var memoryAllocator runtime.MemoryAllocator + + if encoderWithAllocator, supportsAllocator := embeddedEncoder.(runtime.EncoderWithAllocator); supportsAllocator { + // don't put the allocator inside the embeddedEncodeFn as that would allocate memory on every call. + // instead, we allocate the buffer for the entire watch session and release it when we close the connection. + memoryAllocator = runtime.AllocatorPool.Get().(*runtime.Allocator) + defer runtime.AllocatorPool.Put(memoryAllocator) + embeddedEncoder = runtime.NewEncoderWithAllocator(encoderWithAllocator, memoryAllocator) + } + var tableOptions *metav1.TableOptions + if options != nil { + if passedOptions, ok := options.(*metav1.TableOptions); ok { + tableOptions = passedOptions + } else { + scope.err(fmt.Errorf("unexpected options type: %T", options), w, req) + return + } + } + embeddedEncoder = newWatchEmbeddedEncoder(ctx, embeddedEncoder, mediaTypeOptions.Convert, tableOptions, scope) + + if encoderWithAllocator, supportsAllocator := encoder.(runtime.EncoderWithAllocator); supportsAllocator { + if memoryAllocator == nil { + // don't put the allocator inside the embeddedEncodeFn as that would allocate memory on every call. + // instead, we allocate the buffer for the entire watch session and release it when we close the connection. + memoryAllocator = runtime.AllocatorPool.Get().(*runtime.Allocator) + defer runtime.AllocatorPool.Put(memoryAllocator) + } + encoder = runtime.NewEncoderWithAllocator(encoderWithAllocator, memoryAllocator) + } + var serverShuttingDownCh <-chan struct{} if signals := apirequest.ServerShutdownSignalFrom(req.Context()); signals != nil { serverShuttingDownCh = signals.ShuttingDown() } - ctx := req.Context() - server := &WatchServer{ Watching: watcher, Scope: scope, @@ -123,21 +151,6 @@ func serveWatch(watcher watch.Interface, scope *RequestScope, mediaTypeOptions n Encoder: encoder, EmbeddedEncoder: embeddedEncoder, - Fixup: func(obj runtime.Object) runtime.Object { - result, err := transformObject(ctx, obj, options, mediaTypeOptions, scope, req) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to transform object %v: %v", reflect.TypeOf(obj), err)) - return obj - } - // When we are transformed to a table, use the table options as the state for whether we - // should print headers - on watch, we only want to print table headers on the first object - // and omit them on subsequent events. - if tableOptions, ok := options.(*metav1.TableOptions); ok { - tableOptions.NoHeaders = true - } - return result - }, - TimeoutFactory: &realTimeoutFactory{timeout}, ServerShuttingDownCh: serverShuttingDownCh, } @@ -160,8 +173,6 @@ type WatchServer struct { Encoder runtime.Encoder // used to encode the nested object in the watch stream EmbeddedEncoder runtime.Encoder - // used to correct the object before we send it to the serializer - Fixup func(runtime.Object) runtime.Object TimeoutFactory TimeoutFactory ServerShuttingDownCh <-chan struct{} @@ -196,15 +207,7 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { } var e streaming.Encoder - var memoryAllocator runtime.MemoryAllocator - - if encoder, supportsAllocator := s.Encoder.(runtime.EncoderWithAllocator); supportsAllocator { - memoryAllocator = runtime.AllocatorPool.Get().(*runtime.Allocator) - defer runtime.AllocatorPool.Put(memoryAllocator) - e = streaming.NewEncoderWithAllocator(framer, encoder, memoryAllocator) - } else { - e = streaming.NewEncoder(framer, s.Encoder) - } + e = streaming.NewEncoder(framer, s.Encoder) // ensure the connection times out timeoutCh, cleanup := s.TimeoutFactory.TimeoutCh() @@ -223,19 +226,6 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { ch := s.Watching.ResultChan() done := req.Context().Done() - embeddedEncodeFn := s.EmbeddedEncoder.Encode - if encoder, supportsAllocator := s.EmbeddedEncoder.(runtime.EncoderWithAllocator); supportsAllocator { - if memoryAllocator == nil { - // don't put the allocator inside the embeddedEncodeFn as that would allocate memory on every call. - // instead, we allocate the buffer for the entire watch session and release it when we close the connection. - memoryAllocator = runtime.AllocatorPool.Get().(*runtime.Allocator) - defer runtime.AllocatorPool.Put(memoryAllocator) - } - embeddedEncodeFn = func(obj runtime.Object, w io.Writer) error { - return encoder.EncodeWithAllocator(obj, w, memoryAllocator) - } - } - for { select { case <-s.ServerShuttingDownCh: @@ -258,10 +248,9 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { } metrics.WatchEvents.WithContext(req.Context()).WithLabelValues(kind.Group, kind.Version, kind.Kind).Inc() - obj := s.Fixup(event.Object) - if err := embeddedEncodeFn(obj, buf); err != nil { + if err := s.EmbeddedEncoder.Encode(event.Object, buf); err != nil { // unexpected error - utilruntime.HandleError(fmt.Errorf("unable to encode watch object %T: %v", obj, err)) + utilruntime.HandleError(fmt.Errorf("unable to encode watch object %T: %v", event.Object, err)) return } @@ -326,10 +315,10 @@ func (s *WatchServer) HandleWS(ws *websocket.Conn) { // End of results. return } - obj := s.Fixup(event.Object) - if err := s.EmbeddedEncoder.Encode(obj, buf); err != nil { + + if err := s.EmbeddedEncoder.Encode(event.Object, buf); err != nil { // unexpected error - utilruntime.HandleError(fmt.Errorf("unable to encode watch object %T: %v", obj, err)) + utilruntime.HandleError(fmt.Errorf("unable to encode watch object %T: %v", event.Object, err)) return } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go index f1d1879ec4b2..68b13d720ec4 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -54,6 +54,7 @@ const ( // owner: @smarterclayton // alpha: v1.8 // beta: v1.9 + // stable: 1.29 // // Allow API clients to retrieve resource lists in chunks rather than // all at once. @@ -153,6 +154,7 @@ const ( // owner: @caesarxuchao // alpha: v1.15 // beta: v1.16 + // stable: 1.29 // // Allow apiservers to show a count of remaining items in the response // to a chunking list request. @@ -196,6 +198,13 @@ const ( // document. StorageVersionHash featuregate.Feature = "StorageVersionHash" + // owner: @aramase, @enj, @nabokihms + // kep: https://kep.k8s.io/3331 + // alpha: v1.29 + // + // Enables Structured Authentication Configuration + StructuredAuthenticationConfiguration featuregate.Feature = "StructuredAuthenticationConfiguration" + // owner: @wojtek-t // alpha: v1.15 // beta: v1.16 @@ -238,7 +247,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS AdmissionWebhookMatchConditions: {Default: true, PreRelease: featuregate.Beta}, - APIListChunking: {Default: true, PreRelease: featuregate.Beta}, + APIListChunking: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32 APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta}, @@ -258,13 +267,13 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS KMSv2: {Default: true, PreRelease: featuregate.Beta}, - KMSv2KDF: {Default: false, PreRelease: featuregate.Beta}, // default and lock to true in 1.29, remove in 1.31 + KMSv2KDF: {Default: true, PreRelease: featuregate.Beta}, // lock to true in 1.29 once KMSv2 is GA, remove in 1.31 OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, OpenAPIV3: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 - RemainingItemCount: {Default: true, PreRelease: featuregate.Beta}, + RemainingItemCount: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32 RemoveSelfLink: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, @@ -276,6 +285,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS StorageVersionHash: {Default: true, PreRelease: featuregate.Beta}, + StructuredAuthenticationConfiguration: {Default: false, PreRelease: featuregate.Alpha}, + WatchBookmark: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, InPlacePodVerticalScaling: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go index 3983c92d0136..3c974f3981e8 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go @@ -44,7 +44,7 @@ func StorageWithCacher() generic.StorageDecorator { triggerFuncs storage.IndexerFuncs, indexers *cache.Indexers) (storage.Interface, factory.DestroyFunc, error) { - s, d, err := generic.NewRawStorage(storageConfig, newFunc) + s, d, err := generic.NewRawStorage(storageConfig, newFunc, newListFunc, resourcePrefix) if err != nil { return s, d, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go index 715aa1047730..4c2b2fc0ed55 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go @@ -47,12 +47,12 @@ func UndecoratedStorage( getAttrsFunc storage.AttrFunc, trigger storage.IndexerFuncs, indexers *cache.Indexers) (storage.Interface, factory.DestroyFunc, error) { - return NewRawStorage(config, newFunc) + return NewRawStorage(config, newFunc, newListFunc, resourcePrefix) } // NewRawStorage creates the low level kv storage. This is a work-around for current // two layer of same storage interface. // TODO: Once cacher is enabled on all registries (event registry is special), we will remove this method. -func NewRawStorage(config *storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, factory.DestroyFunc, error) { - return factory.Create(*config, newFunc) +func NewRawStorage(config *storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, factory.DestroyFunc, error) { + return factory.Create(*config, newFunc, newListFunc, resourcePrefix) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/config.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/config.go index d678f52dfb75..ebe788b1c504 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/config.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/config.go @@ -994,14 +994,10 @@ func installAPI(s *GenericAPIServer, c *Config) { if c.EnableMetrics { if c.EnableProfiling { routes.MetricsWithReset{}.Install(s.Handler.NonGoRestfulMux) - if utilfeature.DefaultFeatureGate.Enabled(features.ComponentSLIs) { - slis.SLIMetricsWithReset{}.Install(s.Handler.NonGoRestfulMux) - } + slis.SLIMetricsWithReset{}.Install(s.Handler.NonGoRestfulMux) } else { routes.DefaultMetrics{}.Install(s.Handler.NonGoRestfulMux) - if utilfeature.DefaultFeatureGate.Enabled(features.ComponentSLIs) { - slis.SLIMetrics{}.Install(s.Handler.NonGoRestfulMux) - } + slis.SLIMetrics{}.Install(s.Handler.NonGoRestfulMux) } } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_cafile_content.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_cafile_content.go index 6dbed6a650dd..75bc49e99314 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_cafile_content.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_cafile_content.go @@ -21,7 +21,7 @@ import ( "context" "crypto/x509" "fmt" - "io/ioutil" + "os" "sync/atomic" "time" @@ -98,7 +98,7 @@ func (c *DynamicFileCAContent) AddListener(listener Listener) { // loadCABundle determines the next set of content for the file. func (c *DynamicFileCAContent) loadCABundle() error { - caBundle, err := ioutil.ReadFile(c.filename) + caBundle, err := os.ReadFile(c.filename) if err != nil { return err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_serving_content.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_serving_content.go index 36c4d45868fd..62aef4992c56 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_serving_content.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/dynamiccertificates/dynamic_serving_content.go @@ -20,7 +20,7 @@ import ( "context" "crypto/tls" "fmt" - "io/ioutil" + "os" "sync/atomic" "time" @@ -80,11 +80,11 @@ func (c *DynamicCertKeyPairContent) AddListener(listener Listener) { // loadCertKeyPair determines the next set of content for the file. func (c *DynamicCertKeyPairContent) loadCertKeyPair() error { - cert, err := ioutil.ReadFile(c.certFile) + cert, err := os.ReadFile(c.certFile) if err != nil { return err } - key, err := ioutil.ReadFile(c.keyFile) + key, err := os.ReadFile(c.keyFile) if err != nil { return err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/config.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/config.go index 2df786e13f08..ce9a3691a965 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/config.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/config.go @@ -18,7 +18,7 @@ package egressselector import ( "fmt" - "io/ioutil" + "os" "strings" "k8s.io/apimachinery/pkg/runtime" @@ -51,7 +51,7 @@ func ReadEgressSelectorConfiguration(configFilePath string) (*apiserver.EgressSe return nil, nil } // a file was provided, so we just read it. - data, err := ioutil.ReadFile(configFilePath) + data, err := os.ReadFile(configFilePath) if err != nil { return nil, fmt.Errorf("unable to read egress selector configuration from %q [%v]", configFilePath, err) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go index 0936d6ef4e2f..a38ef6464982 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/egressselector/egress_selector.go @@ -22,10 +22,10 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "io/ioutil" "net" "net/http" "net/url" + "os" "strings" "time" @@ -277,7 +277,7 @@ func getTLSConfig(t *apiserver.TLSConfig) (*tls.Config, error) { } certPool := x509.NewCertPool() if caCert != "" { - certBytes, err := ioutil.ReadFile(caCert) + certBytes, err := os.ReadFile(caCert) if err != nil { return nil, fmt.Errorf("failed to read cert file %s, got %v", caCert, err) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go index 4d6248f834f3..a4b4c5899fd1 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go @@ -205,7 +205,6 @@ func StatusIsNot(statuses ...int) StacktracePred { func (rl *respLogger) Addf(format string, data ...interface{}) { rl.mutex.Lock() defer rl.mutex.Unlock() - rl.addedInfo.WriteString("\n") rl.addedInfo.WriteString(fmt.Sprintf(format, data...)) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go index 13819bf90c15..4af2f1faf870 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go @@ -43,12 +43,13 @@ import ( "k8s.io/apiserver/pkg/apis/config/validation" "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/server/healthz" + "k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics" storagevalue "k8s.io/apiserver/pkg/storage/value" aestransformer "k8s.io/apiserver/pkg/storage/value/encrypt/aes" "k8s.io/apiserver/pkg/storage/value/encrypt/envelope" envelopekmsv2 "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2" kmstypes "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/v2" - "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics" + envelopemetrics "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics" "k8s.io/apiserver/pkg/storage/value/encrypt/identity" "k8s.io/apiserver/pkg/storage/value/encrypt/secretbox" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -104,6 +105,18 @@ const ( kmsReloadHealthCheckName = "kms-providers" ) +var codecs serializer.CodecFactory + +func init() { + configScheme := runtime.NewScheme() + utilruntime.Must(apiserverconfig.AddToScheme(configScheme)) + utilruntime.Must(apiserverconfigv1.AddToScheme(configScheme)) + codecs = serializer.NewCodecFactory(configScheme) + envelopemetrics.RegisterMetrics() + storagevalue.RegisterMetrics() + metrics.RegisterMetrics() +} + type kmsPluginHealthzResponse struct { err error received time.Time @@ -124,6 +137,7 @@ type kmsv2PluginProbe struct { service kmsservice.Service lastResponse *kmsPluginHealthzResponse l *sync.Mutex + apiServerID string } type kmsHealthChecker []healthz.HealthChecker @@ -177,13 +191,13 @@ type EncryptionConfiguration struct { // It may launch multiple go routines whose lifecycle is controlled by ctx. // In case of an error, the caller is responsible for canceling ctx to clean up any go routines that may have been launched. // If reload is true, or KMS v2 plugins are used with no KMS v1 plugins, the returned slice of health checkers will always be of length 1. -func LoadEncryptionConfig(ctx context.Context, filepath string, reload bool) (*EncryptionConfiguration, error) { +func LoadEncryptionConfig(ctx context.Context, filepath string, reload bool, apiServerID string) (*EncryptionConfiguration, error) { config, contentHash, err := loadConfig(filepath, reload) if err != nil { return nil, fmt.Errorf("error while parsing file: %w", err) } - transformers, kmsHealthChecks, kmsUsed, err := getTransformerOverridesAndKMSPluginHealthzCheckers(ctx, config) + transformers, kmsHealthChecks, kmsUsed, err := getTransformerOverridesAndKMSPluginHealthzCheckers(ctx, config, apiServerID) if err != nil { return nil, fmt.Errorf("error while building transformers: %w", err) } @@ -208,9 +222,9 @@ func LoadEncryptionConfig(ctx context.Context, filepath string, reload bool) (*E // getTransformerOverridesAndKMSPluginHealthzCheckers creates the set of transformers and KMS healthz checks based on the given config. // It may launch multiple go routines whose lifecycle is controlled by ctx. // In case of an error, the caller is responsible for canceling ctx to clean up any go routines that may have been launched. -func getTransformerOverridesAndKMSPluginHealthzCheckers(ctx context.Context, config *apiserverconfig.EncryptionConfiguration) (map[schema.GroupResource]storagevalue.Transformer, []healthz.HealthChecker, *kmsState, error) { +func getTransformerOverridesAndKMSPluginHealthzCheckers(ctx context.Context, config *apiserverconfig.EncryptionConfiguration, apiServerID string) (map[schema.GroupResource]storagevalue.Transformer, []healthz.HealthChecker, *kmsState, error) { var kmsHealthChecks []healthz.HealthChecker - transformers, probes, kmsUsed, err := getTransformerOverridesAndKMSPluginProbes(ctx, config) + transformers, probes, kmsUsed, err := getTransformerOverridesAndKMSPluginProbes(ctx, config, apiServerID) if err != nil { return nil, nil, nil, err } @@ -229,7 +243,7 @@ type healthChecker interface { // getTransformerOverridesAndKMSPluginProbes creates the set of transformers and KMS probes based on the given config. // It may launch multiple go routines whose lifecycle is controlled by ctx. // In case of an error, the caller is responsible for canceling ctx to clean up any go routines that may have been launched. -func getTransformerOverridesAndKMSPluginProbes(ctx context.Context, config *apiserverconfig.EncryptionConfiguration) (map[schema.GroupResource]storagevalue.Transformer, []healthChecker, *kmsState, error) { +func getTransformerOverridesAndKMSPluginProbes(ctx context.Context, config *apiserverconfig.EncryptionConfiguration, apiServerID string) (map[schema.GroupResource]storagevalue.Transformer, []healthChecker, *kmsState, error) { resourceToPrefixTransformer := map[schema.GroupResource][]storagevalue.PrefixTransformer{} var probes []healthChecker var kmsUsed kmsState @@ -238,7 +252,7 @@ func getTransformerOverridesAndKMSPluginProbes(ctx context.Context, config *apis for _, resourceConfig := range config.Resources { resourceConfig := resourceConfig - transformers, p, used, err := prefixTransformersAndProbes(ctx, resourceConfig) + transformers, p, used, err := prefixTransformersAndProbes(ctx, resourceConfig, apiServerID) if err != nil { return nil, nil, nil, err } @@ -445,10 +459,10 @@ func (h *kmsv2PluginProbe) isKMSv2ProviderHealthyAndMaybeRotateDEK(ctx context.C } if errCode, err := envelopekmsv2.ValidateKeyID(response.KeyID); err != nil { - metrics.RecordInvalidKeyIDFromStatus(h.name, string(errCode)) + envelopemetrics.RecordInvalidKeyIDFromStatus(h.name, string(errCode)) errs = append(errs, fmt.Errorf("got invalid KMSv2 KeyID hash %q: %w", envelopekmsv2.GetHashIfNotEmpty(response.KeyID), err)) } else { - metrics.RecordKeyIDFromStatus(h.name, response.KeyID) + envelopemetrics.RecordKeyIDFromStatus(h.name, response.KeyID, h.apiServerID) // unconditionally append as we filter out nil errors below errs = append(errs, h.rotateDEKOnKeyIDChange(ctx, response.KeyID, string(uuid.NewUUID()))) } @@ -475,11 +489,6 @@ func loadConfig(filepath string, reload bool) (*apiserverconfig.EncryptionConfig return nil, "", fmt.Errorf("encryption provider configuration file %q is empty", filepath) } - scheme := runtime.NewScheme() - codecs := serializer.NewCodecFactory(scheme) - utilruntime.Must(apiserverconfig.AddToScheme(scheme)) - utilruntime.Must(apiserverconfigv1.AddToScheme(scheme)) - configObj, gvk, err := codecs.UniversalDecoder().Decode(data, nil, nil) if err != nil { return nil, "", fmt.Errorf("error decoding encryption provider configuration file %q: %w", filepath, err) @@ -495,7 +504,7 @@ func loadConfig(filepath string, reload bool) (*apiserverconfig.EncryptionConfig // prefixTransformersAndProbes creates the set of transformers and KMS probes based on the given resource config. // It may launch multiple go routines whose lifecycle is controlled by ctx. // In case of an error, the caller is responsible for canceling ctx to clean up any go routines that may have been launched. -func prefixTransformersAndProbes(ctx context.Context, config apiserverconfig.ResourceConfiguration) ([]storagevalue.PrefixTransformer, []healthChecker, *kmsState, error) { +func prefixTransformersAndProbes(ctx context.Context, config apiserverconfig.ResourceConfiguration, apiServerID string) ([]storagevalue.PrefixTransformer, []healthChecker, *kmsState, error) { var transformers []storagevalue.PrefixTransformer var probes []healthChecker var kmsUsed kmsState @@ -523,7 +532,7 @@ func prefixTransformersAndProbes(ctx context.Context, config apiserverconfig.Res transformer, transformerErr = secretboxPrefixTransformer(provider.Secretbox) case provider.KMS != nil: - transformer, probe, used, transformerErr = kmsPrefixTransformer(ctx, provider.KMS) + transformer, probe, used, transformerErr = kmsPrefixTransformer(ctx, provider.KMS, apiServerID) if transformerErr == nil { probes = append(probes, probe) kmsUsed.accumulate(used) @@ -682,7 +691,7 @@ func (s *kmsState) accumulate(other *kmsState) { // kmsPrefixTransformer creates a KMS transformer and probe based on the given KMS config. // It may launch multiple go routines whose lifecycle is controlled by ctx. // In case of an error, the caller is responsible for canceling ctx to clean up any go routines that may have been launched. -func kmsPrefixTransformer(ctx context.Context, config *apiserverconfig.KMSConfiguration) (storagevalue.PrefixTransformer, healthChecker, *kmsState, error) { +func kmsPrefixTransformer(ctx context.Context, config *apiserverconfig.KMSConfiguration, apiServerID string) (storagevalue.PrefixTransformer, healthChecker, *kmsState, error) { kmsName := config.Name switch config.APIVersion { case kmsAPIVersionV1: @@ -728,14 +737,14 @@ func kmsPrefixTransformer(ctx context.Context, config *apiserverconfig.KMSConfig service: envelopeService, l: &sync.Mutex{}, lastResponse: &kmsPluginHealthzResponse{}, + apiServerID: apiServerID, } // initialize state so that Load always works probe.state.Store(&envelopekmsv2.State{}) primeAndProbeKMSv2(ctx, probe, kmsName) - transformer := storagevalue.PrefixTransformer{ - Transformer: envelopekmsv2.NewEnvelopeTransformer(envelopeService, kmsName, probe.getCurrentState), + Transformer: envelopekmsv2.NewEnvelopeTransformer(envelopeService, kmsName, probe.getCurrentState, apiServerID), Prefix: []byte(kmsTransformerPrefixV2 + kmsName + ":"), } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/controller/controller.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/controller/controller.go index 94782ccbacd4..5bb90995b9ef 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/controller/controller.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/controller/controller.go @@ -50,6 +50,13 @@ type DynamicKMSEncryptionConfigContent struct { // dynamicTransformers updates the transformers when encryption config file changes. dynamicTransformers *encryptionconfig.DynamicTransformers + + // identity of the api server + apiServerID string +} + +func init() { + metrics.RegisterMetrics() } // NewDynamicEncryptionConfiguration returns controller that dynamically reacts to changes in encryption config file. @@ -57,6 +64,7 @@ func NewDynamicEncryptionConfiguration( name, filePath string, dynamicTransformers *encryptionconfig.DynamicTransformers, configContentHash string, + apiServerID string, ) *DynamicKMSEncryptionConfigContent { encryptionConfig := &DynamicKMSEncryptionConfigContent{ name: name, @@ -64,6 +72,7 @@ func NewDynamicEncryptionConfiguration( lastLoadedEncryptionConfigHash: configContentHash, dynamicTransformers: dynamicTransformers, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), name), + apiServerID: apiServerID, } encryptionConfig.queue.Add(workqueueKey) // to avoid missing any file changes that occur in between the initial load and Run @@ -172,11 +181,11 @@ func (d *DynamicKMSEncryptionConfigContent) processNextWorkItem(serverCtx contex } if updatedEffectiveConfig && err == nil { - metrics.RecordEncryptionConfigAutomaticReloadSuccess() + metrics.RecordEncryptionConfigAutomaticReloadSuccess(d.apiServerID) } if err != nil { - metrics.RecordEncryptionConfigAutomaticReloadFailure() + metrics.RecordEncryptionConfigAutomaticReloadFailure(d.apiServerID) utilruntime.HandleError(fmt.Errorf("error processing encryption config file %s: %v", d.filePath, err)) // add dummy item back to the queue to trigger file content processing. d.queue.AddRateLimited(key) @@ -224,7 +233,7 @@ func (d *DynamicKMSEncryptionConfigContent) processEncryptionConfig(ctx context. err error, ) { // this code path will only execute if reload=true. So passing true explicitly. - encryptionConfiguration, err = encryptionconfig.LoadEncryptionConfig(ctx, d.filePath, true) + encryptionConfiguration, err = encryptionconfig.LoadEncryptionConfig(ctx, d.filePath, true, d.apiServerID) if err != nil { return nil, false, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics/metrics.go index 799b584cf7aa..70414035fed3 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics/metrics.go @@ -17,6 +17,9 @@ limitations under the License. package metrics import ( + "crypto/sha256" + "fmt" + "hash" "sync" "k8s.io/component-base/metrics" @@ -29,24 +32,26 @@ const ( ) var ( - encryptionConfigAutomaticReloadFailureTotal = metrics.NewCounter( + encryptionConfigAutomaticReloadFailureTotal = metrics.NewCounterVec( &metrics.CounterOpts{ Namespace: namespace, Subsystem: subsystem, Name: "automatic_reload_failures_total", - Help: "Total number of failed automatic reloads of encryption configuration.", + Help: "Total number of failed automatic reloads of encryption configuration split by apiserver identity.", StabilityLevel: metrics.ALPHA, }, + []string{"apiserver_id_hash"}, ) - encryptionConfigAutomaticReloadSuccessTotal = metrics.NewCounter( + encryptionConfigAutomaticReloadSuccessTotal = metrics.NewCounterVec( &metrics.CounterOpts{ Namespace: namespace, Subsystem: subsystem, Name: "automatic_reload_success_total", - Help: "Total number of successful automatic reloads of encryption configuration.", + Help: "Total number of successful automatic reloads of encryption configuration split by apiserver identity.", StabilityLevel: metrics.ALPHA, }, + []string{"apiserver_id_hash"}, ) encryptionConfigAutomaticReloadLastTimestampSeconds = metrics.NewGaugeVec( @@ -54,33 +59,53 @@ var ( Namespace: namespace, Subsystem: subsystem, Name: "automatic_reload_last_timestamp_seconds", - Help: "Timestamp of the last successful or failed automatic reload of encryption configuration.", + Help: "Timestamp of the last successful or failed automatic reload of encryption configuration split by apiserver identity.", StabilityLevel: metrics.ALPHA, }, - []string{"status"}, + []string{"status", "apiserver_id_hash"}, ) ) var registerMetrics sync.Once +var hashPool *sync.Pool func RegisterMetrics() { registerMetrics.Do(func() { + hashPool = &sync.Pool{ + New: func() interface{} { + return sha256.New() + }, + } legacyregistry.MustRegister(encryptionConfigAutomaticReloadFailureTotal) legacyregistry.MustRegister(encryptionConfigAutomaticReloadSuccessTotal) legacyregistry.MustRegister(encryptionConfigAutomaticReloadLastTimestampSeconds) }) } -func RecordEncryptionConfigAutomaticReloadFailure() { - encryptionConfigAutomaticReloadFailureTotal.Inc() - recordEncryptionConfigAutomaticReloadTimestamp("failure") +func RecordEncryptionConfigAutomaticReloadFailure(apiServerID string) { + apiServerIDHash := getHash(apiServerID) + encryptionConfigAutomaticReloadFailureTotal.WithLabelValues(apiServerIDHash).Inc() + recordEncryptionConfigAutomaticReloadTimestamp("failure", apiServerIDHash) } -func RecordEncryptionConfigAutomaticReloadSuccess() { - encryptionConfigAutomaticReloadSuccessTotal.Inc() - recordEncryptionConfigAutomaticReloadTimestamp("success") +func RecordEncryptionConfigAutomaticReloadSuccess(apiServerID string) { + apiServerIDHash := getHash(apiServerID) + encryptionConfigAutomaticReloadSuccessTotal.WithLabelValues(apiServerIDHash).Inc() + recordEncryptionConfigAutomaticReloadTimestamp("success", apiServerIDHash) } -func recordEncryptionConfigAutomaticReloadTimestamp(result string) { - encryptionConfigAutomaticReloadLastTimestampSeconds.WithLabelValues(result).SetToCurrentTime() +func recordEncryptionConfigAutomaticReloadTimestamp(result, apiServerIDHash string) { + encryptionConfigAutomaticReloadLastTimestampSeconds.WithLabelValues(result, apiServerIDHash).SetToCurrentTime() +} + +func getHash(data string) string { + if len(data) == 0 { + return "" + } + h := hashPool.Get().(hash.Hash) + h.Reset() + h.Write([]byte(data)) + dataHash := fmt.Sprintf("sha256:%x", h.Sum(nil)) + hashPool.Put(h) + return dataHash } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/etcd.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/etcd.go index 57e9c1a9f138..d4f75ddd7218 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/etcd.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/etcd.go @@ -294,7 +294,7 @@ func (s *EtcdOptions) maybeApplyResourceTransformers(c *server.Config) (err erro } }() - encryptionConfiguration, err := encryptionconfig.LoadEncryptionConfig(ctxTransformers, s.EncryptionProviderConfigFilepath, s.EncryptionProviderConfigAutomaticReload) + encryptionConfiguration, err := encryptionconfig.LoadEncryptionConfig(ctxTransformers, s.EncryptionProviderConfigFilepath, s.EncryptionProviderConfigAutomaticReload, c.APIServerID) if err != nil { return err } @@ -318,6 +318,7 @@ func (s *EtcdOptions) maybeApplyResourceTransformers(c *server.Config) (err erro s.EncryptionProviderConfigFilepath, dynamicTransformers, encryptionConfiguration.EncryptionFileContentHash, + c.APIServerID, ) go dynamicEncryptionConfigController.Run(ctxServer) @@ -331,18 +332,23 @@ func (s *EtcdOptions) maybeApplyResourceTransformers(c *server.Config) (err erro c.ResourceTransformers = dynamicTransformers if !s.SkipHealthEndpoints { - c.AddHealthChecks(dynamicTransformers) + addHealthChecksWithoutLivez(c, dynamicTransformers) } } else { c.ResourceTransformers = encryptionconfig.StaticTransformers(encryptionConfiguration.Transformers) if !s.SkipHealthEndpoints { - c.AddHealthChecks(encryptionConfiguration.HealthChecks...) + addHealthChecksWithoutLivez(c, encryptionConfiguration.HealthChecks...) } } return nil } +func addHealthChecksWithoutLivez(c *server.Config, healthChecks ...healthz.HealthChecker) { + c.HealthzChecks = append(c.HealthzChecks, healthChecks...) + c.ReadyzChecks = append(c.ReadyzChecks, healthChecks...) +} + func (s *EtcdOptions) addEtcdHealthEndpoint(c *server.Config) error { healthCheck, err := storagefactory.CreateHealthCheck(s.StorageConfig, c.DrainedNotify()) if err != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/serving.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/serving.go index efda02ef7c9a..842ab7ee0d16 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/serving.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/options/serving.go @@ -260,7 +260,39 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error c := *config serverCertFile, serverKeyFile := s.ServerCert.CertKey.CertFile, s.ServerCert.CertKey.KeyFile - // load main cert + // load main cert *original description until 2023-08-18* + + /* + kubernetes mutual (2-way) x509 between client and apiserver: + + >1. apiserver sending its apiserver certificate along with its publickey to client + 2. client verifies the apiserver certificate sent against its cluster certificate authority data + 3. client sending its client certificate along with its public key to the apiserver + 4. apiserver verifies the client certificate sent against its cluster certificate authority data + + description: + here, with this block, + apiserver certificate and pub key data (along with priv key)get loaded into server.SecureServingInfo + for client to later in the step 2 verify the apiserver certificate during the handshake + when making a request + + normal args related to this stage: + --tls-cert-file string File containing the default x509 Certificate for HTTPS. + (CA cert, if any, concatenated after server cert). If HTTPS serving is enabled, and + --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate + and key are generated for the public address and saved to the directory specified by + --cert-dir + --tls-private-key-file string File containing the default x509 private key matching --tls-cert-file. + + (retrievable from "kube-apiserver --help" command) + (suggested by @deads2k) + + see also: + - for the step 2, see: staging/src/k8s.io/client-go/transport/transport.go + - for the step 3, see: staging/src/k8s.io/client-go/transport/transport.go + - for the step 4, see: staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go + */ + if len(serverCertFile) != 0 || len(serverKeyFile) != 0 { var err error c.Cert, err = dynamiccertificates.NewDynamicServingContentFromFiles("serving-cert", serverCertFile, serverKeyFile) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go index be4d0390d602..e5fde95921a8 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/server/storage/storage_factory.go @@ -19,15 +19,13 @@ package storage import ( "crypto/tls" "crypto/x509" - "io/ioutil" + "os" "strings" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/storage/storagebackend" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog/v2" ) @@ -156,7 +154,7 @@ func NewDefaultStorageFactory( resourceConfig APIResourceConfigSource, specialDefaultResourcePrefixes map[schema.GroupResource]string, ) *DefaultStorageFactory { - config.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) + config.Paging = true if len(defaultMediaType) == 0 { defaultMediaType = runtime.ContentTypeJSON } @@ -185,14 +183,6 @@ func (s *DefaultStorageFactory) SetEtcdPrefix(groupResource schema.GroupResource s.Overrides[groupResource] = overrides } -// SetDisableAPIListChunking allows a specific resource to disable paging at the storage layer, to prevent -// exposure of key names in continuations. This may be overridden by feature gates. -func (s *DefaultStorageFactory) SetDisableAPIListChunking(groupResource schema.GroupResource) { - overrides := s.Overrides[groupResource] - overrides.disablePaging = true - s.Overrides[groupResource] = overrides -} - // SetResourceEtcdPrefix sets the prefix for a resource, but not the base-dir. You'll end up in `etcdPrefix/resourceEtcdPrefix`. func (s *DefaultStorageFactory) SetResourceEtcdPrefix(groupResource schema.GroupResource, prefix string) { overrides := s.Overrides[groupResource] @@ -337,7 +327,7 @@ func backends(storageConfig storagebackend.Config, grOverrides map[schema.GroupR } } if len(storageConfig.Transport.TrustedCAFile) > 0 { - if caCert, err := ioutil.ReadFile(storageConfig.Transport.TrustedCAFile); err != nil { + if caCert, err := os.ReadFile(storageConfig.Transport.TrustedCAFile); err != nil { klog.Errorf("failed to read ca file while getting backends: %s", err) } else { caPool := x509.NewCertPool() diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go index 478d2151d9c4..595fd5036d0e 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go @@ -22,7 +22,6 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -177,7 +176,6 @@ func (c *cacheWatcher) add(event *watchCacheEvent, timer *time.Timer) bool { // This means that we couldn't send event to that watcher. // Since we don't want to block on it infinitely, // we simply terminate it. - klog.V(1).Infof("Forcing %v watcher close due to unresponsiveness: %v. len(c.input) = %v, len(c.result) = %v", c.groupResource.String(), c.identifier, len(c.input), len(c.result)) metrics.TerminatedWatchersCounter.WithLabelValues(c.groupResource.String()).Inc() // This means that we couldn't send event to that watcher. // Since we don't want to block on it infinitely, we simply terminate it. @@ -365,17 +363,10 @@ func (c *cacheWatcher) convertToWatchEvent(event *watchCacheEvent) *watch.Event if event.Type == watch.Bookmark { e := &watch.Event{Type: watch.Bookmark, Object: event.Object.DeepCopyObject()} if !c.wasBookmarkAfterRvSent() { - objMeta, err := meta.Accessor(e.Object) - if err != nil { + if err := storage.AnnotateInitialEventsEndBookmark(e.Object); err != nil { utilruntime.HandleError(fmt.Errorf("error while accessing object's metadata gr: %v, identifier: %v, obj: %#v, err: %v", c.groupResource, c.identifier, e.Object, err)) return nil } - objAnnotations := objMeta.GetAnnotations() - if objAnnotations == nil { - objAnnotations = map[string]string{} - } - objAnnotations["k8s.io/initial-events-end"] = "true" - objMeta.SetAnnotations(objAnnotations) } return e } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go index 0796f591d7f7..7248fe71768c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go @@ -21,7 +21,6 @@ import ( "fmt" "net/http" "reflect" - "strconv" "sync" "time" @@ -725,15 +724,14 @@ func shouldDelegateList(opts storage.ListOptions) bool { resourceVersion := opts.ResourceVersion pred := opts.Predicate match := opts.ResourceVersionMatch - pagingEnabled := utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) consistentListFromCacheEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConsistentListFromCache) // Serve consistent reads from storage if ConsistentListFromCache is disabled consistentReadFromStorage := resourceVersion == "" && !consistentListFromCacheEnabled // Watch cache doesn't support continuations, so serve them from etcd. - hasContinuation := pagingEnabled && len(pred.Continue) > 0 + hasContinuation := len(pred.Continue) > 0 // Serve paginated requests about revision "0" from watch cache to avoid overwhelming etcd. - hasLimit := pagingEnabled && pred.Limit > 0 && resourceVersion != "0" + hasLimit := pred.Limit > 0 && resourceVersion != "0" // Watch cache only supports ResourceVersionMatchNotOlderThan (default). unsupportedMatch := match != "" && match != metav1.ResourceVersionMatchNotOlderThan @@ -773,7 +771,7 @@ func (c *Cacher) GetList(ctx context.Context, key string, opts storage.ListOptio return c.storage.GetList(ctx, key, opts, listObj) } if listRV == 0 && utilfeature.DefaultFeatureGate.Enabled(features.ConsistentListFromCache) { - listRV, err = c.getCurrentResourceVersionFromStorage(ctx) + listRV, err = storage.GetCurrentResourceVersionFromStorage(ctx, c.storage, c.newListFunc, c.resourcePrefix, c.objectType.String()) if err != nil { return err } @@ -1249,42 +1247,6 @@ func (c *Cacher) LastSyncResourceVersion() (uint64, error) { return c.versioner.ParseResourceVersion(resourceVersion) } -// getCurrentResourceVersionFromStorage gets the current resource version from the underlying storage engine. -// this method issues an empty list request and reads only the ResourceVersion from the object metadata -func (c *Cacher) getCurrentResourceVersionFromStorage(ctx context.Context) (uint64, error) { - if c.newListFunc == nil { - return 0, fmt.Errorf("newListFunction wasn't provided for %v", c.objectType) - } - emptyList := c.newListFunc() - pred := storage.SelectionPredicate{ - Label: labels.Everything(), - Field: fields.Everything(), - Limit: 1, // just in case we actually hit something - } - - err := c.storage.GetList(ctx, c.resourcePrefix, storage.ListOptions{Predicate: pred}, emptyList) - if err != nil { - return 0, err - } - emptyListAccessor, err := meta.ListAccessor(emptyList) - if err != nil { - return 0, err - } - if emptyListAccessor == nil { - return 0, fmt.Errorf("unable to extract a list accessor from %T", emptyList) - } - - currentResourceVersion, err := strconv.Atoi(emptyListAccessor.GetResourceVersion()) - if err != nil { - return 0, err - } - - if currentResourceVersion == 0 { - return 0, fmt.Errorf("the current resource version must be greater than 0") - } - return uint64(currentResourceVersion), nil -} - // getBookmarkAfterResourceVersionLockedFunc returns a function that // spits a ResourceVersion after which the bookmark event will be delivered. // @@ -1318,7 +1280,7 @@ func (c *Cacher) getStartResourceVersionForWatchLockedFunc(ctx context.Context, func (c *Cacher) getCommonResourceVersionLockedFunc(ctx context.Context, parsedWatchResourceVersion uint64, opts storage.ListOptions) (func() uint64, error) { switch { case len(opts.ResourceVersion) == 0: - rv, err := c.getCurrentResourceVersionFromStorage(ctx) + rv, err := storage.GetCurrentResourceVersionFromStorage(ctx, c.storage, c.newListFunc, c.resourcePrefix, c.objectType.String()) if err != nil { return nil, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/event.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/event.go index 3e5bfb1c6331..e7644ddfae6c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/event.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/event.go @@ -30,6 +30,17 @@ type event struct { isDeleted bool isCreated bool isProgressNotify bool + // isInitialEventsEndBookmark helps us keep track + // of whether we have sent an annotated bookmark event. + // + // when this variable is set to true, + // a special annotation will be added + // to the bookmark event. + // + // note that we decided to extend the event + // struct field to eliminate contention + // between startWatching and processEvent + isInitialEventsEndBookmark bool } // parseKV converts a KeyValue retrieved from an initial sync() listing to a synthetic isCreated event. diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go index ac023d55d8c1..fadc87d53de2 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go @@ -69,7 +69,7 @@ var ( objectCounts = compbasemetrics.NewGaugeVec( &compbasemetrics.GaugeOpts{ Name: "apiserver_storage_objects", - Help: "Number of stored objects at the time of last check split by kind.", + Help: "Number of stored objects at the time of last check split by kind. In case of a fetching error, the value will be -1.", StabilityLevel: compbasemetrics.STABLE, }, []string{"resource"}, @@ -228,7 +228,7 @@ func UpdateEtcdDbSize(ep string, size int64) { // SetStorageMonitorGetter sets monitor getter to allow monitoring etcd stats. func SetStorageMonitorGetter(getter func() ([]Monitor, error)) { - storageMonitor.monitorGetter = getter + storageMonitor.setGetter(getter) } // UpdateLeaseObjectCount sets the etcd_lease_object_counts metric. @@ -258,9 +258,22 @@ type StorageMetrics struct { type monitorCollector struct { compbasemetrics.BaseStableCollector + mutex sync.Mutex monitorGetter func() ([]Monitor, error) } +func (m *monitorCollector) setGetter(monitorGetter func() ([]Monitor, error)) { + m.mutex.Lock() + defer m.mutex.Unlock() + m.monitorGetter = monitorGetter +} + +func (m *monitorCollector) getGetter() func() ([]Monitor, error) { + m.mutex.Lock() + defer m.mutex.Unlock() + return m.monitorGetter +} + // DescribeWithStability implements compbasemetrics.StableColletor func (c *monitorCollector) DescribeWithStability(ch chan<- *compbasemetrics.Desc) { ch <- storageSizeDescription @@ -268,7 +281,7 @@ func (c *monitorCollector) DescribeWithStability(ch chan<- *compbasemetrics.Desc // CollectWithStability implements compbasemetrics.StableColletor func (c *monitorCollector) CollectWithStability(ch chan<- compbasemetrics.Metric) { - monitors, err := c.monitorGetter() + monitors, err := c.getGetter()() if err != nil { return } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go index 7374152239ce..275b5d14fb95 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -32,19 +32,15 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" "k8s.io/apiserver/pkg/audit" - "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd3/metrics" "k8s.io/apiserver/pkg/storage/value" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/component-base/tracing" "k8s.io/klog/v2" ) @@ -100,11 +96,11 @@ type objState struct { } // New returns an etcd3 implementation of storage.Interface. -func New(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Object, prefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) storage.Interface { - return newStore(c, codec, newFunc, prefix, groupResource, transformer, pagingEnabled, leaseManagerConfig) +func New(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) storage.Interface { + return newStore(c, codec, newFunc, newListFunc, prefix, resourcePrefix, groupResource, transformer, pagingEnabled, leaseManagerConfig) } -func newStore(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Object, prefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) *store { +func newStore(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) *store { versioner := storage.APIObjectVersioner{} // for compatibility with etcd2 impl. // no-op for default prefix of '/registry'. @@ -114,7 +110,21 @@ func newStore(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Ob // Ensure the pathPrefix ends in "/" here to simplify key concatenation later. pathPrefix += "/" } - result := &store{ + + w := &watcher{ + client: c, + codec: codec, + newFunc: newFunc, + groupResource: groupResource, + versioner: versioner, + transformer: transformer, + } + if newFunc == nil { + w.objectType = "" + } else { + w.objectType = reflect.TypeOf(newFunc()).String() + } + s := &store{ client: c, codec: codec, versioner: versioner, @@ -123,10 +133,14 @@ func newStore(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Ob pathPrefix: pathPrefix, groupResource: groupResource, groupResourceString: groupResource.String(), - watcher: newWatcher(c, codec, groupResource, newFunc, versioner), + watcher: w, leaseManager: newDefaultLeaseManager(c, leaseManagerConfig), } - return result + + w.getCurrentStorageRV = func(ctx context.Context) (uint64, error) { + return storage.GetCurrentResourceVersionFromStorage(ctx, s, newListFunc, resourcePrefix, w.objectType) + } + return s } // Versioner implements storage.Interface.Versioner. @@ -594,17 +608,13 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption if err != nil { return err } - recursive := opts.Recursive - resourceVersion := opts.ResourceVersion - match := opts.ResourceVersionMatch - pred := opts.Predicate - ctx, span := tracing.Start(ctx, fmt.Sprintf("List(recursive=%v) etcd3", recursive), + ctx, span := tracing.Start(ctx, fmt.Sprintf("List(recursive=%v) etcd3", opts.Recursive), attribute.String("audit-id", audit.GetAuditIDTruncated(ctx)), attribute.String("key", key), - attribute.String("resourceVersion", resourceVersion), - attribute.String("resourceVersionMatch", string(match)), - attribute.Int("limit", int(pred.Limit)), - attribute.String("continue", pred.Continue)) + attribute.String("resourceVersion", opts.ResourceVersion), + attribute.String("resourceVersionMatch", string(opts.ResourceVersionMatch)), + attribute.Int("limit", int(opts.Predicate.Limit)), + attribute.String("continue", opts.Predicate.Continue)) defer span.End(500 * time.Millisecond) listPtr, err := meta.GetItemsPtr(listObj) if err != nil { @@ -619,17 +629,17 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption // get children "directories". e.g. if we have key "/a", "/a/b", "/ab", getting keys // with prefix "/a" will return all three, while with prefix "/a/" will return only // "/a/b" which is the correct answer. - if recursive && !strings.HasSuffix(preparedKey, "/") { + if opts.Recursive && !strings.HasSuffix(preparedKey, "/") { preparedKey += "/" } keyPrefix := preparedKey // set the appropriate clientv3 options to filter the returned data set var limitOption *clientv3.OpOption - limit := pred.Limit + limit := opts.Predicate.Limit var paging bool options := make([]clientv3.OpOption, 0, 4) - if s.pagingEnabled && pred.Limit > 0 { + if s.pagingEnabled && opts.Predicate.Limit > 0 { paging = true options = append(options, clientv3.WithLimit(limit)) limitOption = &options[len(options)-1] @@ -638,77 +648,54 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption newItemFunc := getNewItemFunc(listObj, v) var fromRV *uint64 - if len(resourceVersion) > 0 { - parsedRV, err := s.versioner.ParseResourceVersion(resourceVersion) + if len(opts.ResourceVersion) > 0 { + parsedRV, err := s.versioner.ParseResourceVersion(opts.ResourceVersion) if err != nil { return apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %v", err)) } fromRV = &parsedRV } - var returnedRV, continueRV, withRev int64 + var continueRV, withRev int64 var continueKey string switch { - case recursive && s.pagingEnabled && len(pred.Continue) > 0: - continueKey, continueRV, err = storage.DecodeContinue(pred.Continue, keyPrefix) + case opts.Recursive && s.pagingEnabled && len(opts.Predicate.Continue) > 0: + continueKey, continueRV, err = storage.DecodeContinue(opts.Predicate.Continue, keyPrefix) if err != nil { return apierrors.NewBadRequest(fmt.Sprintf("invalid continue token: %v", err)) } - if len(resourceVersion) > 0 && resourceVersion != "0" { + if len(opts.ResourceVersion) > 0 && opts.ResourceVersion != "0" { return apierrors.NewBadRequest("specifying resource version is not allowed when using continue") } - - rangeEnd := clientv3.GetPrefixRangeEnd(keyPrefix) - options = append(options, clientv3.WithRange(rangeEnd)) preparedKey = continueKey - // If continueRV > 0, the LIST request needs a specific resource version. // continueRV==0 is invalid. // If continueRV < 0, the request is for the latest resource version. if continueRV > 0 { withRev = continueRV - returnedRV = continueRV } - case recursive && s.pagingEnabled && pred.Limit > 0: + default: if fromRV != nil { - switch match { + switch opts.ResourceVersionMatch { case metav1.ResourceVersionMatchNotOlderThan: // The not older than constraint is checked after we get a response from etcd, // and returnedRV is then set to the revision we get from the etcd response. case metav1.ResourceVersionMatchExact: - returnedRV = int64(*fromRV) - withRev = returnedRV + withRev = int64(*fromRV) case "": // legacy case - if *fromRV > 0 { - returnedRV = int64(*fromRV) - withRev = returnedRV + if opts.Recursive && s.pagingEnabled && opts.Predicate.Limit > 0 && *fromRV > 0 { + withRev = int64(*fromRV) } default: - return fmt.Errorf("unknown ResourceVersionMatch value: %v", match) + return fmt.Errorf("unknown ResourceVersionMatch value: %v", opts.ResourceVersionMatch) } } + } + if opts.Recursive { rangeEnd := clientv3.GetPrefixRangeEnd(keyPrefix) options = append(options, clientv3.WithRange(rangeEnd)) - default: - if fromRV != nil { - switch match { - case metav1.ResourceVersionMatchNotOlderThan: - // The not older than constraint is checked after we get a response from etcd, - // and returnedRV is then set to the revision we get from the etcd response. - case metav1.ResourceVersionMatchExact: - returnedRV = int64(*fromRV) - withRev = returnedRV - case "": // legacy case - default: - return fmt.Errorf("unknown ResourceVersionMatch value: %v", match) - } - } - - if recursive { - options = append(options, clientv3.WithPrefix()) - } } if withRev != 0 { options = append(options, clientv3.WithRev(withRev)) @@ -728,7 +715,7 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption }() metricsOp := "get" - if recursive { + if opts.Recursive { metricsOp = "list" } @@ -737,10 +724,10 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption getResp, err = s.client.KV.Get(ctx, preparedKey, options...) metrics.RecordEtcdRequest(metricsOp, s.groupResourceString, err, startTime) if err != nil { - return interpretListError(err, len(pred.Continue) > 0, continueKey, keyPrefix) + return interpretListError(err, len(opts.Predicate.Continue) > 0, continueKey, keyPrefix) } numFetched += len(getResp.Kvs) - if err = s.validateMinimumResourceVersion(resourceVersion, uint64(getResp.Header.Revision)); err != nil { + if err = s.validateMinimumResourceVersion(opts.ResourceVersion, uint64(getResp.Header.Revision)); err != nil { return err } hasMore = getResp.More @@ -751,7 +738,7 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption // avoid small allocations for the result slice, since this can be called in many // different contexts and we don't know how significantly the result will be filtered - if pred.Empty() { + if opts.Predicate.Empty() { growSlice(v, len(getResp.Kvs)) } else { growSlice(v, 2048, len(getResp.Kvs)) @@ -759,7 +746,7 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption // take items from the response until the bucket is full, filtering as we go for i, kv := range getResp.Kvs { - if paging && int64(v.Len()) >= pred.Limit { + if paging && int64(v.Len()) >= opts.Predicate.Limit { hasMore = true break } @@ -770,7 +757,7 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption return storage.NewInternalErrorf("unable to transform key %q: %v", kv.Key, err) } - if err := appendListItem(v, data, uint64(kv.ModRevision), pred, s.codec, s.versioner, newItemFunc); err != nil { + if err := appendListItem(v, data, uint64(kv.ModRevision), opts.Predicate, s.codec, s.versioner, newItemFunc); err != nil { recordDecodeError(s.groupResourceString, string(kv.Key)) return err } @@ -780,17 +767,12 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption getResp.Kvs[i] = nil } - // indicate to the client which resource version was returned - if returnedRV == 0 { - returnedRV = getResp.Header.Revision - } - // no more results remain or we didn't request paging if !hasMore || !paging { break } // we're paging but we have filled our bucket - if int64(v.Len()) >= pred.Limit { + if int64(v.Len()) >= opts.Predicate.Limit { break } @@ -805,10 +787,15 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption } preparedKey = string(lastKey) + "\x00" if withRev == 0 { - withRev = returnedRV + withRev = getResp.Header.Revision options = append(options, clientv3.WithRev(withRev)) } } + // indicate to the client which resource version was returned + if withRev == 0 { + withRev = getResp.Header.Revision + } + if v.IsNil() { // Ensure that we never return a nil Items pointer in the result for consistency. v.Set(reflect.MakeSlice(v.Type(), 0, 0)) @@ -818,7 +805,7 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption // we never return a key that the client wouldn't be allowed to see if hasMore { // we want to start immediately after the last key - next, err := storage.EncodeContinue(string(lastKey)+"\x00", keyPrefix, returnedRV) + next, err := storage.EncodeContinue(string(lastKey)+"\x00", keyPrefix, withRev) if err != nil { return err } @@ -826,17 +813,15 @@ func (s *store) GetList(ctx context.Context, key string, opts storage.ListOption // getResp.Count counts in objects that do not match the pred. // Instead of returning inaccurate count for non-empty selectors, we return nil. // Only set remainingItemCount if the predicate is empty. - if utilfeature.DefaultFeatureGate.Enabled(features.RemainingItemCount) { - if pred.Empty() { - c := int64(getResp.Count - pred.Limit) - remainingItemCount = &c - } + if opts.Predicate.Empty() { + c := int64(getResp.Count - opts.Predicate.Limit) + remainingItemCount = &c } - return s.versioner.UpdateList(listObj, uint64(returnedRV), next, remainingItemCount) + return s.versioner.UpdateList(listObj, uint64(withRev), next, remainingItemCount) } // no continuation - return s.versioner.UpdateList(listObj, uint64(returnedRV), "", nil) + return s.versioner.UpdateList(listObj, uint64(withRev), "", nil) } // growSlice takes a slice value and grows its capacity up @@ -871,18 +856,7 @@ func growSlice(v reflect.Value, maxCapacity int, sizes ...int) { } // Watch implements storage.Interface.Watch. -// TODO(#115478): In order to graduate the WatchList feature to beta, the etcd3 implementation must/should also support it. func (s *store) Watch(ctx context.Context, key string, opts storage.ListOptions) (watch.Interface, error) { - // it is safe to skip SendInitialEvents if the request is backward compatible - // see https://github.com/kubernetes/kubernetes/blob/267eb25e60955fe8e438c6311412e7cf7d028acb/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go#L260 - compatibility := opts.Predicate.AllowWatchBookmarks == false && (opts.ResourceVersion == "" || opts.ResourceVersion == "0") - if opts.SendInitialEvents != nil && !compatibility { - return nil, apierrors.NewInvalid( - schema.GroupKind{Group: s.groupResource.Group, Kind: s.groupResource.Resource}, - "", - field.ErrorList{field.Forbidden(field.NewPath("sendInitialEvents"), "for watch is unsupported by an etcd cluster")}, - ) - } preparedKey, err := s.prepareKey(key) if err != nil { return nil, err @@ -891,7 +865,7 @@ func (s *store) Watch(ctx context.Context, key string, opts storage.ListOptions) if err != nil { return nil, err } - return s.watcher.Watch(s.watchContext(ctx), preparedKey, int64(rev), opts.Recursive, opts.ProgressNotify, s.transformer, opts.Predicate) + return s.watcher.Watch(s.watchContext(ctx), preparedKey, int64(rev), opts) } func (s *store) watchContext(ctx context.Context) context.Context { diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go index d4929bd9d82a..85acf44f86b3 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go @@ -18,27 +18,29 @@ package etcd3 import ( "context" + "errors" "fmt" "os" - "reflect" "strconv" "strings" "sync" + "time" + clientv3 "go.etcd.io/etcd/client/v3" grpccodes "google.golang.org/grpc/codes" grpcstatus "google.golang.org/grpc/status" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd3/metrics" "k8s.io/apiserver/pkg/storage/value" + utilfeature "k8s.io/apiserver/pkg/util/feature" utilflowcontrol "k8s.io/apiserver/pkg/util/flowcontrol" - - clientv3 "go.etcd.io/etcd/client/v3" - "k8s.io/klog/v2" ) @@ -48,6 +50,9 @@ const ( outgoingBufSize = 100 ) +// defaultWatcherMaxLimit is used to facilitate construction tests +var defaultWatcherMaxLimit int64 = maxLimit + // fatalOnDecodeError is used during testing to panic the server if watcher encounters a decoding error var fatalOnDecodeError = false @@ -63,18 +68,19 @@ func TestOnlySetFatalOnDecodeError(b bool) { } type watcher struct { - client *clientv3.Client - codec runtime.Codec - newFunc func() runtime.Object - objectType string - groupResource schema.GroupResource - versioner storage.Versioner + client *clientv3.Client + codec runtime.Codec + newFunc func() runtime.Object + objectType string + groupResource schema.GroupResource + versioner storage.Versioner + transformer value.Transformer + getCurrentStorageRV func(context.Context) (uint64, error) } // watchChan implements watch.Interface. type watchChan struct { watcher *watcher - transformer value.Transformer key string initialRev int64 recursive bool @@ -87,35 +93,26 @@ type watchChan struct { errChan chan error } -func newWatcher(client *clientv3.Client, codec runtime.Codec, groupResource schema.GroupResource, newFunc func() runtime.Object, versioner storage.Versioner) *watcher { - res := &watcher{ - client: client, - codec: codec, - groupResource: groupResource, - newFunc: newFunc, - versioner: versioner, - } - if newFunc == nil { - res.objectType = "" - } else { - res.objectType = reflect.TypeOf(newFunc()).String() - } - return res -} - // Watch watches on a key and returns a watch.Interface that transfers relevant notifications. // If rev is zero, it will return the existing object(s) and then start watching from // the maximum revision+1 from returned objects. // If rev is non-zero, it will watch events happened after given revision. -// If recursive is false, it watches on given key. -// If recursive is true, it watches any children and directories under the key, excluding the root key itself. -// pred must be non-nil. Only if pred matches the change, it will be returned. -func (w *watcher) Watch(ctx context.Context, key string, rev int64, recursive, progressNotify bool, transformer value.Transformer, pred storage.SelectionPredicate) (watch.Interface, error) { - if recursive && !strings.HasSuffix(key, "/") { +// If opts.Recursive is false, it watches on given key. +// If opts.Recursive is true, it watches any children and directories under the key, excluding the root key itself. +// pred must be non-nil. Only if opts.Predicate matches the change, it will be returned. +func (w *watcher) Watch(ctx context.Context, key string, rev int64, opts storage.ListOptions) (watch.Interface, error) { + if opts.Recursive && !strings.HasSuffix(key, "/") { key += "/" } - wc := w.createWatchChan(ctx, key, rev, recursive, progressNotify, transformer, pred) - go wc.run() + if opts.ProgressNotify && w.newFunc == nil { + return nil, apierrors.NewInternalError(errors.New("progressNotify for watch is unsupported by the etcd storage because no newFunc was provided")) + } + startWatchRV, err := w.getStartWatchResourceVersion(ctx, rev, opts) + if err != nil { + return nil, err + } + wc := w.createWatchChan(ctx, key, startWatchRV, opts.Recursive, opts.ProgressNotify, opts.Predicate) + go wc.run(isInitialEventsEndBookmarkRequired(opts), areInitialEventsRequired(rev, opts)) // For etcd watch we don't have an easy way to answer whether the watch // has already caught up. So in the initial version (given that watchcache @@ -127,10 +124,9 @@ func (w *watcher) Watch(ctx context.Context, key string, rev int64, recursive, p return wc, nil } -func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, recursive, progressNotify bool, transformer value.Transformer, pred storage.SelectionPredicate) *watchChan { +func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, recursive, progressNotify bool, pred storage.SelectionPredicate) *watchChan { wc := &watchChan{ watcher: w, - transformer: transformer, key: key, initialRev: rev, recursive: recursive, @@ -148,6 +144,62 @@ func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, re return wc } +// getStartWatchResourceVersion returns a ResourceVersion +// the watch will be started from. +// Depending on the input parameters the semantics of the returned ResourceVersion are: +// - start at Exact (return resourceVersion) +// - start at Most Recent (return an RV from etcd) +func (w *watcher) getStartWatchResourceVersion(ctx context.Context, resourceVersion int64, opts storage.ListOptions) (int64, error) { + if resourceVersion > 0 { + return resourceVersion, nil + } + if !utilfeature.DefaultFeatureGate.Enabled(features.WatchList) { + return 0, nil + } + if opts.SendInitialEvents == nil || *opts.SendInitialEvents { + // note that when opts.SendInitialEvents=true + // we will be issuing a consistent LIST request + // against etcd followed by the special bookmark event + return 0, nil + } + // at this point the clients is interested + // only in getting a stream of events + // starting at the MostRecent point in time (RV) + currentStorageRV, err := w.getCurrentStorageRV(ctx) + if err != nil { + return 0, err + } + // currentStorageRV is taken from resp.Header.Revision (int64) + // and cast to uint64, so it is safe to do reverse + // at some point we should unify the interface but that + // would require changing Versioner.UpdateList + return int64(currentStorageRV), nil +} + +// isInitialEventsEndBookmarkRequired since there is no way to directly set +// opts.ProgressNotify from the API and the etcd3 impl doesn't support +// notification for external clients we simply return initialEventsEndBookmarkRequired +// to only send the bookmark event after the initial list call. +// +// see: https://github.com/kubernetes/kubernetes/issues/120348 +func isInitialEventsEndBookmarkRequired(opts storage.ListOptions) bool { + if !utilfeature.DefaultFeatureGate.Enabled(features.WatchList) { + return false + } + return opts.SendInitialEvents != nil && *opts.SendInitialEvents && opts.Predicate.AllowWatchBookmarks +} + +// areInitialEventsRequired returns true if all events from the etcd should be returned. +func areInitialEventsRequired(resourceVersion int64, opts storage.ListOptions) bool { + if opts.SendInitialEvents == nil && resourceVersion == 0 { + return true // legacy case + } + if !utilfeature.DefaultFeatureGate.Enabled(features.WatchList) { + return false + } + return opts.SendInitialEvents != nil && *opts.SendInitialEvents +} + type etcdError interface { Code() grpccodes.Code Error() string @@ -173,9 +225,9 @@ func isCancelError(err error) bool { return false } -func (wc *watchChan) run() { +func (wc *watchChan) run(initialEventsEndBookmarkRequired, forceInitialEvents bool) { watchClosedCh := make(chan struct{}) - go wc.startWatching(watchClosedCh) + go wc.startWatching(watchClosedCh, initialEventsEndBookmarkRequired, forceInitialEvents) var resultChanWG sync.WaitGroup resultChanWG.Add(1) @@ -225,17 +277,58 @@ func (wc *watchChan) RequestWatchProgress() error { func (wc *watchChan) sync() error { opts := []clientv3.OpOption{} if wc.recursive { - opts = append(opts, clientv3.WithPrefix()) + opts = append(opts, clientv3.WithLimit(defaultWatcherMaxLimit)) + rangeEnd := clientv3.GetPrefixRangeEnd(wc.key) + opts = append(opts, clientv3.WithRange(rangeEnd)) } - getResp, err := wc.watcher.client.Get(wc.ctx, wc.key, opts...) - if err != nil { - return err + + var err error + var lastKey []byte + var withRev int64 + var getResp *clientv3.GetResponse + + metricsOp := "get" + if wc.recursive { + metricsOp = "list" } - wc.initialRev = getResp.Header.Revision - for _, kv := range getResp.Kvs { - wc.sendEvent(parseKV(kv)) + + preparedKey := wc.key + + for { + startTime := time.Now() + getResp, err = wc.watcher.client.KV.Get(wc.ctx, preparedKey, opts...) + metrics.RecordEtcdRequest(metricsOp, wc.watcher.groupResource.String(), err, startTime) + if err != nil { + return interpretListError(err, true, preparedKey, wc.key) + } + + if len(getResp.Kvs) == 0 && getResp.More { + return fmt.Errorf("no results were found, but etcd indicated there were more values remaining") + } + + // send items from the response until no more results + for i, kv := range getResp.Kvs { + lastKey = kv.Key + wc.sendEvent(parseKV(kv)) + // free kv early. Long lists can take O(seconds) to decode. + getResp.Kvs[i] = nil + } + + if withRev == 0 { + wc.initialRev = getResp.Header.Revision + } + + // no more results remain + if !getResp.More { + return nil + } + + preparedKey = string(lastKey) + "\x00" + if withRev == 0 { + withRev = getResp.Header.Revision + opts = append(opts, clientv3.WithRev(withRev)) + } } - return nil } func logWatchChannelErr(err error) { @@ -253,14 +346,44 @@ func logWatchChannelErr(err error) { // startWatching does: // - get current objects if initialRev=0; set initialRev to current rev // - watch on given key and send events to process. -func (wc *watchChan) startWatching(watchClosedCh chan struct{}) { - if wc.initialRev == 0 { +// +// initialEventsEndBookmarkSent helps us keep track +// of whether we have sent an annotated bookmark event. +// +// it's important to note that we don't +// need to track the actual RV because +// we only send the bookmark event +// after the initial list call. +// +// when this variable is set to false, +// it means we don't have any specific +// preferences for delivering bookmark events. +func (wc *watchChan) startWatching(watchClosedCh chan struct{}, initialEventsEndBookmarkRequired, forceInitialEvents bool) { + if wc.initialRev > 0 && forceInitialEvents { + currentStorageRV, err := wc.watcher.getCurrentStorageRV(wc.ctx) + if err != nil { + wc.sendError(err) + return + } + if uint64(wc.initialRev) > currentStorageRV { + wc.sendError(storage.NewTooLargeResourceVersionError(uint64(wc.initialRev), currentStorageRV, int(wait.Jitter(1*time.Second, 3).Seconds()))) + return + } + } + if forceInitialEvents { if err := wc.sync(); err != nil { klog.Errorf("failed to sync with latest state: %v", err) wc.sendError(err) return } } + if initialEventsEndBookmarkRequired { + wc.sendEvent(func() *event { + e := progressNotifyEvent(wc.initialRev) + e.isInitialEventsEndBookmark = true + return e + }()) + } opts := []clientv3.OpOption{clientv3.WithRev(wc.initialRev + 1), clientv3.WithPrevKV()} if wc.recursive { opts = append(opts, clientv3.WithPrefix()) @@ -352,14 +475,17 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { switch { case e.isProgressNotify: - if wc.watcher.newFunc == nil { - return nil - } object := wc.watcher.newFunc() if err := wc.watcher.versioner.UpdateObject(object, uint64(e.rev)); err != nil { klog.Errorf("failed to propagate object version: %v", err) return nil } + if e.isInitialEventsEndBookmark { + if err := storage.AnnotateInitialEventsEndBookmark(object); err != nil { + wc.sendError(fmt.Errorf("error while accessing object's metadata gr: %v, type: %v, obj: %#v, err: %v", wc.watcher.groupResource, wc.watcher.objectType, object, err)) + return nil + } + } res = &watch.Event{ Type: watch.Bookmark, Object: object, @@ -447,7 +573,7 @@ func (wc *watchChan) prepareObjs(e *event) (curObj runtime.Object, oldObj runtim } if !e.isDeleted { - data, _, err := wc.transformer.TransformFromStorage(wc.ctx, e.value, authenticatedDataString(e.key)) + data, _, err := wc.watcher.transformer.TransformFromStorage(wc.ctx, e.value, authenticatedDataString(e.key)) if err != nil { return nil, nil, err } @@ -462,7 +588,7 @@ func (wc *watchChan) prepareObjs(e *event) (curObj runtime.Object, oldObj runtim // we need the object only to compute whether it was filtered out // before). if len(e.prevValue) > 0 && (e.isDeleted || !wc.acceptAll()) { - data, _, err := wc.transformer.TransformFromStorage(wc.ctx, e.prevValue, authenticatedDataString(e.key)) + data, _, err := wc.watcher.transformer.TransformFromStorage(wc.ctx, e.prevValue, authenticatedDataString(e.key)) if err != nil { return nil, nil, err } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/interfaces.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/interfaces.go index 76123fde8643..5489660809d4 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/interfaces.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/interfaces.go @@ -282,6 +282,19 @@ type ListOptions struct { Recursive bool // ProgressNotify determines whether storage-originated bookmark (progress notify) events should // be delivered to the users. The option is ignored for non-watch requests. + // + // Firstly, note that this field is different from the Predicate.AllowWatchBookmarks field. + // Secondly, this field is intended for internal clients only such as the watch cache. + // + // This means that external clients do not have the ability to set this field directly. + // For example by setting the allowWatchBookmarks query parameter. + // + // The motivation for this approach is the fact that the frequency + // of bookmark events from a storage like etcd might be very high. + // As the number of watch requests increases, the server load would also increase. + // + // Furthermore, the server is not obligated to provide bookmark events at all, + // as described in https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/956-watch-bookmark#proposal ProgressNotify bool // SendInitialEvents, when set together with Watch option, // begin the watch stream with synthetic init events to build the diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index 5736abf63c4d..f52bba84cc38 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -157,10 +157,10 @@ func newETCD3Check(c storagebackend.Config, timeout time.Duration, stopCh <-chan var prober *etcd3ProberMonitor clientErr := fmt.Errorf("etcd client connection not yet established") - go wait.PollUntil(time.Second, func() (bool, error) { - newProber, err := newETCD3ProberMonitor(c) + go wait.PollImmediateUntil(time.Second, func() (bool, error) { lock.Lock() defer lock.Unlock() + newProber, err := newETCD3ProberMonitor(c) // Ensure that server is already not shutting down. select { case <-stopCh: @@ -419,7 +419,7 @@ func startCompactorOnce(c storagebackend.TransportConfig, interval time.Duration }, nil } -func newETCD3Storage(c storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, DestroyFunc, error) { +func newETCD3Storage(c storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, DestroyFunc, error) { stopCompactor, err := startCompactorOnce(c.Transport, c.CompactionInterval) if err != nil { return nil, nil, err @@ -454,7 +454,7 @@ func newETCD3Storage(c storagebackend.ConfigForResource, newFunc func() runtime. if transformer == nil { transformer = identity.NewEncryptCheckTransformer() } - return etcd3.New(client, c.Codec, newFunc, c.Prefix, c.GroupResource, transformer, c.Paging, c.LeaseManagerConfig), destroyFunc, nil + return etcd3.New(client, c.Codec, newFunc, newListFunc, c.Prefix, resourcePrefix, c.GroupResource, transformer, c.Paging, c.LeaseManagerConfig), destroyFunc, nil } // startDBSizeMonitorPerEndpoint starts a loop to monitor etcd database size and update the diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go index 1a60c92902cb..2bf3727e8a77 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go @@ -30,12 +30,12 @@ import ( type DestroyFunc func() // Create creates a storage backend based on given config. -func Create(c storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, DestroyFunc, error) { +func Create(c storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, DestroyFunc, error) { switch c.Type { case storagebackend.StorageTypeETCD2: return nil, nil, fmt.Errorf("%s is no longer a supported storage backend", c.Type) case storagebackend.StorageTypeUnset, storagebackend.StorageTypeETCD3: - return newETCD3Storage(c, newFunc) + return newETCD3Storage(c, newFunc, newListFunc, resourcePrefix) default: return nil, nil, fmt.Errorf("unknown storage type: %s", c.Type) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/util.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/util.go index 9da8d9713c1c..7b23c7a7af8c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/util.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/util.go @@ -17,11 +17,15 @@ limitations under the License. package storage import ( + "context" "fmt" + "strconv" "sync/atomic" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/validation/path" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" ) @@ -79,3 +83,61 @@ func (hwm *HighWaterMark) Update(current int64) bool { } } } + +// GetCurrentResourceVersionFromStorage gets the current resource version from the underlying storage engine. +// This method issues an empty list request and reads only the ResourceVersion from the object metadata +func GetCurrentResourceVersionFromStorage(ctx context.Context, storage Interface, newListFunc func() runtime.Object, resourcePrefix, objectType string) (uint64, error) { + if storage == nil { + return 0, fmt.Errorf("storage wasn't provided for %s", objectType) + } + if newListFunc == nil { + return 0, fmt.Errorf("newListFunction wasn't provided for %s", objectType) + } + emptyList := newListFunc() + pred := SelectionPredicate{ + Label: labels.Everything(), + Field: fields.Everything(), + Limit: 1, // just in case we actually hit something + } + + err := storage.GetList(ctx, resourcePrefix, ListOptions{Predicate: pred}, emptyList) + if err != nil { + return 0, err + } + emptyListAccessor, err := meta.ListAccessor(emptyList) + if err != nil { + return 0, err + } + if emptyListAccessor == nil { + return 0, fmt.Errorf("unable to extract a list accessor from %T", emptyList) + } + + currentResourceVersion, err := strconv.Atoi(emptyListAccessor.GetResourceVersion()) + if err != nil { + return 0, err + } + + if currentResourceVersion == 0 { + return 0, fmt.Errorf("the current resource version must be greater than 0") + } + return uint64(currentResourceVersion), nil +} + +// AnnotateInitialEventsEndBookmark adds a special annotation to the given object +// which indicates that the initial events have been sent. +// +// Note that this function assumes that the obj's annotation +// field is a reference type (i.e. a map). +func AnnotateInitialEventsEndBookmark(obj runtime.Object) error { + objMeta, err := meta.Accessor(obj) + if err != nil { + return err + } + objAnnotations := objMeta.GetAnnotations() + if objAnnotations == nil { + objAnnotations = map[string]string{} + } + objAnnotations["k8s.io/initial-events-end"] = "true" + objMeta.SetAnnotations(objAnnotations) + return nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/cache.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/cache.go index c677f54b5ba0..bc7f04b9c6b2 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/cache.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/cache.go @@ -26,6 +26,7 @@ import ( utilcache "k8s.io/apimachinery/pkg/util/cache" "k8s.io/apiserver/pkg/storage/value" + "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics" "k8s.io/utils/clock" ) @@ -38,10 +39,13 @@ type simpleCache struct { ttl time.Duration // hashPool is a per cache pool of hash.Hash (to avoid allocations from building the Hash) // SHA-256 is used to prevent collisions - hashPool *sync.Pool + hashPool *sync.Pool + providerName string + mu sync.Mutex // guards call to set + recordCacheSize func(providerName string, size int) // for unit tests } -func newSimpleCache(clock clock.Clock, ttl time.Duration) *simpleCache { +func newSimpleCache(clock clock.Clock, ttl time.Duration, providerName string) *simpleCache { cache := utilcache.NewExpiringWithClock(clock) cache.AllowExpiredGet = true // for a given key, the value (the decryptTransformer) is always the same return &simpleCache{ @@ -52,6 +56,8 @@ func newSimpleCache(clock clock.Clock, ttl time.Duration) *simpleCache { return sha256.New() }, }, + providerName: providerName, + recordCacheSize: metrics.RecordDekSourceCacheSize, } } @@ -66,6 +72,8 @@ func (c *simpleCache) get(key []byte) value.Read { // set caches the record for the key func (c *simpleCache) set(key []byte, transformer value.Read) { + c.mu.Lock() + defer c.mu.Unlock() if len(key) == 0 { panic("key must not be empty") } @@ -73,6 +81,8 @@ func (c *simpleCache) set(key []byte, transformer value.Read) { panic("transformer must not be nil") } c.cache.Set(c.keyFunc(key), transformer, c.ttl) + // Add metrics for cache size + c.recordCacheSize(c.providerName, c.cache.Len()) } // keyFunc generates a string key by hashing the inputs. diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go index 45d5db58b751..23de3717a180 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/kmsv2/envelope.go @@ -44,8 +44,6 @@ import ( "k8s.io/utils/clock" ) -// TODO integration test with old AES GCM data recorded and new KDF data recorded - func init() { value.RegisterMetrics() metrics.RegisterMetrics() @@ -112,22 +110,24 @@ type envelopeTransformer struct { stateFunc StateFunc // cache is a thread-safe expiring lru cache which caches decrypted DEKs indexed by their encrypted form. - cache *simpleCache + cache *simpleCache + apiServerID string } // NewEnvelopeTransformer returns a transformer which implements a KEK-DEK based envelope encryption scheme. // It uses envelopeService to encrypt and decrypt DEKs. Respective DEKs (in encrypted form) are prepended to // the data items they encrypt. -func NewEnvelopeTransformer(envelopeService kmsservice.Service, providerName string, stateFunc StateFunc) value.Transformer { - return newEnvelopeTransformerWithClock(envelopeService, providerName, stateFunc, cacheTTL, clock.RealClock{}) +func NewEnvelopeTransformer(envelopeService kmsservice.Service, providerName string, stateFunc StateFunc, apiServerID string) value.Transformer { + return newEnvelopeTransformerWithClock(envelopeService, providerName, stateFunc, apiServerID, cacheTTL, clock.RealClock{}) } -func newEnvelopeTransformerWithClock(envelopeService kmsservice.Service, providerName string, stateFunc StateFunc, cacheTTL time.Duration, clock clock.Clock) value.Transformer { +func newEnvelopeTransformerWithClock(envelopeService kmsservice.Service, providerName string, stateFunc StateFunc, apiServerID string, cacheTTL time.Duration, clock clock.Clock) value.Transformer { return &envelopeTransformer{ envelopeService: envelopeService, providerName: providerName, stateFunc: stateFunc, - cache: newSimpleCache(clock, cacheTTL), + cache: newSimpleCache(clock, cacheTTL, providerName), + apiServerID: apiServerID, } } @@ -180,7 +180,7 @@ func (t *envelopeTransformer) TransformFromStorage(ctx context.Context, data []b return nil, false, err } } - metrics.RecordKeyID(metrics.FromStorageLabel, t.providerName, encryptedObject.KeyID) + metrics.RecordKeyID(metrics.FromStorageLabel, t.providerName, encryptedObject.KeyID, t.apiServerID) out, stale, err := transformer.TransformFromStorage(ctx, encryptedObject.EncryptedData, dataCtx) if err != nil { @@ -208,7 +208,6 @@ func (t *envelopeTransformer) TransformToStorage(ctx context.Context, data []byt // this prevents a cache miss every time the DEK rotates // this has the side benefit of causing the cache to perform a GC // TODO see if we can do this inside the stateFunc control loop - // TODO(aramase): Add metrics for cache size. t.cache.set(state.CacheKey, state.Transformer) requestInfo := getRequestInfoFromContext(ctx) @@ -221,7 +220,7 @@ func (t *envelopeTransformer) TransformToStorage(ctx context.Context, data []byt return nil, err } - metrics.RecordKeyID(metrics.ToStorageLabel, t.providerName, state.EncryptedObject.KeyID) + metrics.RecordKeyID(metrics.ToStorageLabel, t.providerName, state.EncryptedObject.KeyID, t.apiServerID) encObjectCopy := state.EncryptedObject encObjectCopy.EncryptedData = result @@ -250,7 +249,6 @@ func (t *envelopeTransformer) addTransformerForDecryption(cacheKey []byte, key [ if err != nil { return nil, err } - // TODO(aramase): Add metrics for cache size. t.cache.set(cacheKey, transformer) return transformer, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics/metrics.go index ff3903805d6c..63723648c97f 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/metrics/metrics.go @@ -44,6 +44,7 @@ type metricLabels struct { transformationType string providerName string keyIDHash string + apiServerIDHash string } /* @@ -107,21 +108,21 @@ var ( // keyIDHashTotal is the number of times a keyID is used // e.g. apiserver_envelope_encryption_key_id_hash_total counter - // apiserver_envelope_encryption_key_id_hash_total{key_id_hash="sha256", + // apiserver_envelope_encryption_key_id_hash_total{apiserver_id_hash="sha256",key_id_hash="sha256", // provider_name="providerName",transformation_type="from_storage"} 1 KeyIDHashTotal = metrics.NewCounterVec( &metrics.CounterOpts{ Namespace: namespace, Subsystem: subsystem, Name: "key_id_hash_total", - Help: "Number of times a keyID is used split by transformation type and provider.", + Help: "Number of times a keyID is used split by transformation type, provider, and apiserver identity.", StabilityLevel: metrics.ALPHA, }, - []string{"transformation_type", "provider_name", "key_id_hash"}, + []string{"transformation_type", "provider_name", "key_id_hash", "apiserver_id_hash"}, ) // keyIDHashLastTimestampSeconds is the last time in seconds when a keyID was used - // e.g. apiserver_envelope_encryption_key_id_hash_last_timestamp_seconds{key_id_hash="sha256", provider_name="providerName",transformation_type="from_storage"} 1.674865558833728e+09 + // e.g. apiserver_envelope_encryption_key_id_hash_last_timestamp_seconds{apiserver_id_hash="sha256",key_id_hash="sha256", provider_name="providerName",transformation_type="from_storage"} 1.674865558833728e+09 KeyIDHashLastTimestampSeconds = metrics.NewGaugeVec( &metrics.GaugeOpts{ Namespace: namespace, @@ -130,11 +131,11 @@ var ( Help: "The last time in seconds when a keyID was used.", StabilityLevel: metrics.ALPHA, }, - []string{"transformation_type", "provider_name", "key_id_hash"}, + []string{"transformation_type", "provider_name", "key_id_hash", "apiserver_id_hash"}, ) // keyIDHashStatusLastTimestampSeconds is the last time in seconds when a keyID was returned by the Status RPC call. - // e.g. apiserver_envelope_encryption_key_id_hash_status_last_timestamp_seconds{key_id_hash="sha256", provider_name="providerName"} 1.674865558833728e+09 + // e.g. apiserver_envelope_encryption_key_id_hash_status_last_timestamp_seconds{apiserver_id_hash="sha256",key_id_hash="sha256", provider_name="providerName"} 1.674865558833728e+09 KeyIDHashStatusLastTimestampSeconds = metrics.NewGaugeVec( &metrics.GaugeOpts{ Namespace: namespace, @@ -143,7 +144,7 @@ var ( Help: "The last time in seconds when a keyID was returned by the Status RPC call.", StabilityLevel: metrics.ALPHA, }, - []string{"provider_name", "key_id_hash"}, + []string{"provider_name", "key_id_hash", "apiserver_id_hash"}, ) InvalidKeyIDFromStatusTotal = metrics.NewCounterVec( @@ -156,6 +157,17 @@ var ( }, []string{"provider_name", "error"}, ) + + DekSourceCacheSize = metrics.NewGaugeVec( + &metrics.GaugeOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "dek_source_cache_size", + Help: "Number of records in data encryption key (DEK) source cache. On a restart, this value is an approximation of the number of decrypt RPC calls the server will make to the KMS plugin.", + StabilityLevel: metrics.ALPHA, + }, + []string{"provider_name"}, + ) ) var registerMetricsFunc sync.Once @@ -171,19 +183,19 @@ func registerLRUMetrics() { keyIDHashTotalMetricLabels = lru.NewWithEvictionFunc(cacheSize, func(key lru.Key, _ interface{}) { item := key.(metricLabels) - if deleted := KeyIDHashTotal.DeleteLabelValues(item.transformationType, item.providerName, item.keyIDHash); deleted { + if deleted := KeyIDHashTotal.DeleteLabelValues(item.transformationType, item.providerName, item.keyIDHash, item.apiServerIDHash); deleted { klog.InfoS("Deleted keyIDHashTotalMetricLabels", "transformationType", item.transformationType, - "providerName", item.providerName, "keyIDHash", item.keyIDHash) + "providerName", item.providerName, "keyIDHash", item.keyIDHash, "apiServerIDHash", item.apiServerIDHash) } - if deleted := KeyIDHashLastTimestampSeconds.DeleteLabelValues(item.transformationType, item.providerName, item.keyIDHash); deleted { + if deleted := KeyIDHashLastTimestampSeconds.DeleteLabelValues(item.transformationType, item.providerName, item.keyIDHash, item.apiServerIDHash); deleted { klog.InfoS("Deleted keyIDHashLastTimestampSecondsMetricLabels", "transformationType", item.transformationType, - "providerName", item.providerName, "keyIDHash", item.keyIDHash) + "providerName", item.providerName, "keyIDHash", item.keyIDHash, "apiServerIDHash", item.apiServerIDHash) } }) keyIDHashStatusLastTimestampSecondsMetricLabels = lru.NewWithEvictionFunc(cacheSize, func(key lru.Key, _ interface{}) { item := key.(metricLabels) - if deleted := KeyIDHashStatusLastTimestampSeconds.DeleteLabelValues(item.providerName, item.keyIDHash); deleted { - klog.InfoS("Deleted keyIDHashStatusLastTimestampSecondsMetricLabels", "providerName", item.providerName, "keyIDHash", item.keyIDHash) + if deleted := KeyIDHashStatusLastTimestampSeconds.DeleteLabelValues(item.providerName, item.keyIDHash, item.apiServerIDHash); deleted { + klog.InfoS("Deleted keyIDHashStatusLastTimestampSecondsMetricLabels", "providerName", item.providerName, "keyIDHash", item.keyIDHash, "apiServerIDHash", item.apiServerIDHash) } }) } @@ -197,6 +209,7 @@ func RegisterMetrics() { } legacyregistry.MustRegister(dekCacheFillPercent) legacyregistry.MustRegister(dekCacheInterArrivals) + legacyregistry.MustRegister(DekSourceCacheSize) legacyregistry.MustRegister(KeyIDHashTotal) legacyregistry.MustRegister(KeyIDHashLastTimestampSeconds) legacyregistry.MustRegister(KeyIDHashStatusLastTimestampSeconds) @@ -206,22 +219,22 @@ func RegisterMetrics() { } // RecordKeyID records total count and last time in seconds when a KeyID was used for TransformFromStorage and TransformToStorage operations -func RecordKeyID(transformationType, providerName, keyID string) { +func RecordKeyID(transformationType, providerName, keyID, apiServerID string) { lockRecordKeyID.Lock() defer lockRecordKeyID.Unlock() - keyIDHash := addLabelToCache(keyIDHashTotalMetricLabels, transformationType, providerName, keyID) - KeyIDHashTotal.WithLabelValues(transformationType, providerName, keyIDHash).Inc() - KeyIDHashLastTimestampSeconds.WithLabelValues(transformationType, providerName, keyIDHash).SetToCurrentTime() + keyIDHash, apiServerIDHash := addLabelToCache(keyIDHashTotalMetricLabels, transformationType, providerName, keyID, apiServerID) + KeyIDHashTotal.WithLabelValues(transformationType, providerName, keyIDHash, apiServerIDHash).Inc() + KeyIDHashLastTimestampSeconds.WithLabelValues(transformationType, providerName, keyIDHash, apiServerIDHash).SetToCurrentTime() } // RecordKeyIDFromStatus records last time in seconds when a KeyID was returned by the Status RPC call. -func RecordKeyIDFromStatus(providerName, keyID string) { +func RecordKeyIDFromStatus(providerName, keyID, apiServerID string) { lockRecordKeyIDStatus.Lock() defer lockRecordKeyIDStatus.Unlock() - keyIDHash := addLabelToCache(keyIDHashStatusLastTimestampSecondsMetricLabels, "", providerName, keyID) - KeyIDHashStatusLastTimestampSeconds.WithLabelValues(providerName, keyIDHash).SetToCurrentTime() + keyIDHash, apiServerIDHash := addLabelToCache(keyIDHashStatusLastTimestampSecondsMetricLabels, "", providerName, keyID, apiServerID) + KeyIDHashStatusLastTimestampSeconds.WithLabelValues(providerName, keyIDHash, apiServerIDHash).SetToCurrentTime() } func RecordInvalidKeyIDFromStatus(providerName, errCode string) { @@ -255,6 +268,10 @@ func RecordDekCacheFillPercent(percent float64) { dekCacheFillPercent.Set(percent) } +func RecordDekSourceCacheSize(providerName string, size int) { + DekSourceCacheSize.WithLabelValues(providerName).Set(float64(size)) +} + // RecordKMSOperationLatency records the latency of KMS operation. func RecordKMSOperationLatency(providerName, methodName string, duration time.Duration, err error) { KMSOperationsLatencyMetric.WithLabelValues(providerName, methodName, getErrorCode(err)).Observe(duration.Seconds()) @@ -281,24 +298,25 @@ func getErrorCode(err error) string { } func getHash(data string) string { + if len(data) == 0 { + return "" + } h := hashPool.Get().(hash.Hash) h.Reset() h.Write([]byte(data)) - result := fmt.Sprintf("sha256:%x", h.Sum(nil)) + dataHash := fmt.Sprintf("sha256:%x", h.Sum(nil)) hashPool.Put(h) - return result + return dataHash } -func addLabelToCache(c *lru.Cache, transformationType, providerName, keyID string) string { - keyIDHash := "" - // only get hash if the keyID is not empty - if len(keyID) > 0 { - keyIDHash = getHash(keyID) - } +func addLabelToCache(c *lru.Cache, transformationType, providerName, keyID, apiServerID string) (string, string) { + keyIDHash := getHash(keyID) + apiServerIDHash := getHash(apiServerID) c.Add(metricLabels{ transformationType: transformationType, providerName: providerName, keyIDHash: keyIDHash, + apiServerIDHash: apiServerIDHash, }, nil) // value is irrelevant, this is a set and not a map - return keyIDHash + return keyIDHash, apiServerIDHash } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/apf_controller.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/apf_controller.go index 708bf2cdef0b..f2df57ccc224 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/apf_controller.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/apf_controller.go @@ -263,9 +263,15 @@ type seatDemandStats struct { } func (stats *seatDemandStats) update(obs fq.IntegratorResults) { + stats.highWatermark = obs.Max + if obs.Duration <= 0 { + return + } + if math.IsNaN(obs.Deviation) { + obs.Deviation = 0 + } stats.avg = obs.Average stats.stdDev = obs.Deviation - stats.highWatermark = obs.Max envelope := obs.Average + obs.Deviation stats.smoothed = math.Max(envelope, seatDemandSmoothingCoefficient*stats.smoothed+(1-seatDemandSmoothingCoefficient)*envelope) } diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/promise/promise.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/promise/promise.go index d3bda40aaa77..79d19d136fc0 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/promise/promise.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/promise/promise.go @@ -17,12 +17,13 @@ limitations under the License. package promise import ( + "context" "sync" ) // promise implements the WriteOnce interface. type promise struct { - doneCh <-chan struct{} + doneCtx context.Context doneVal interface{} setCh chan struct{} onceler sync.Once @@ -35,12 +36,12 @@ var _ WriteOnce = &promise{} // // If `initial` is non-nil then that value is Set at creation time. // -// If a `Get` is waiting soon after `doneCh` becomes selectable (which -// never happens for the nil channel) then `Set(doneVal)` effectively -// happens at that time. -func NewWriteOnce(initial interface{}, doneCh <-chan struct{}, doneVal interface{}) WriteOnce { +// If a `Get` is waiting soon after the channel associated with the +// `doneCtx` becomes selectable (which never happens for the nil +// channel) then `Set(doneVal)` effectively happens at that time. +func NewWriteOnce(initial interface{}, doneCtx context.Context, doneVal interface{}) WriteOnce { p := &promise{ - doneCh: doneCh, + doneCtx: doneCtx, doneVal: doneVal, setCh: make(chan struct{}), } @@ -53,7 +54,7 @@ func NewWriteOnce(initial interface{}, doneCh <-chan struct{}, doneVal interface func (p *promise) Get() interface{} { select { case <-p.setCh: - case <-p.doneCh: + case <-p.doneCtx.Done(): p.Set(p.doneVal) } return p.value diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go index aa54a9ccf1d1..99397ecbaa23 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/queueset/queueset.go @@ -53,7 +53,7 @@ type queueSetFactory struct { // - whose Set method is invoked with the queueSet locked, and // - whose Get method is invoked with the queueSet not locked. // The parameters are the same as for `promise.NewWriteOnce`. -type promiseFactory func(initial interface{}, doneCh <-chan struct{}, doneVal interface{}) promise.WriteOnce +type promiseFactory func(initial interface{}, doneCtx context.Context, doneVal interface{}) promise.WriteOnce // promiseFactoryFactory returns the promiseFactory to use for the given queueSet type promiseFactoryFactory func(*queueSet) promiseFactory @@ -448,6 +448,7 @@ func (req *request) wait() (bool, bool) { qs.totRequestsCancelled++ metrics.AddReject(req.ctx, qs.qCfg.Name, req.fsName, "cancelled") metrics.AddRequestsInQueues(req.ctx, qs.qCfg.Name, req.fsName, -1) + metrics.AddSeatsInQueues(req.ctx, qs.qCfg.Name, req.fsName, -req.MaxSeats()) req.NoteQueued(false) qs.reqsGaugePair.RequestsWaiting.Add(-1) qs.seatDemandIntegrator.Set(float64(qs.totSeatsInUse + qs.totSeatsWaiting)) @@ -583,7 +584,7 @@ func (qs *queueSet) timeoutOldRequestsAndRejectOrEnqueueLocked(ctx context.Conte fsName: fsName, flowDistinguisher: flowDistinguisher, ctx: ctx, - decision: qs.promiseFactory(nil, ctx.Done(), decisionCancel), + decision: qs.promiseFactory(nil, ctx, decisionCancel), arrivalTime: qs.clock.Now(), arrivalR: qs.currentR, queue: queue, @@ -652,6 +653,7 @@ func (qs *queueSet) removeTimedOutRequestsFromQueueToBoundLocked(queue *queue, f disqueueSeats += req.MaxSeats() req.NoteQueued(false) metrics.AddRequestsInQueues(req.ctx, qs.qCfg.Name, req.fsName, -1) + metrics.AddSeatsInQueues(req.ctx, qs.qCfg.Name, req.fsName, -req.MaxSeats()) } // we need to check if the next request has timed out. return true @@ -702,6 +704,7 @@ func (qs *queueSet) enqueueToBoundLocked(request *request) { qs.totRequestsWaiting++ qs.totSeatsWaiting += request.MaxSeats() metrics.AddRequestsInQueues(request.ctx, qs.qCfg.Name, request.fsName, 1) + metrics.AddSeatsInQueues(request.ctx, qs.qCfg.Name, request.fsName, request.MaxSeats()) request.NoteQueued(true) qs.reqsGaugePair.RequestsWaiting.Add(1) qs.seatDemandIntegrator.Set(float64(qs.totSeatsInUse + qs.totSeatsWaiting)) @@ -722,7 +725,7 @@ func (qs *queueSet) dispatchSansQueueLocked(ctx context.Context, workEstimate *f flowDistinguisher: flowDistinguisher, ctx: ctx, startTime: now, - decision: qs.promiseFactory(decisionExecute, ctx.Done(), decisionCancel), + decision: qs.promiseFactory(decisionExecute, ctx, decisionCancel), arrivalTime: now, arrivalR: qs.currentR, descr1: descr1, @@ -760,6 +763,7 @@ func (qs *queueSet) dispatchLocked() bool { qs.totRequestsWaiting-- qs.totSeatsWaiting -= request.MaxSeats() metrics.AddRequestsInQueues(request.ctx, qs.qCfg.Name, request.fsName, -1) + metrics.AddSeatsInQueues(request.ctx, qs.qCfg.Name, request.fsName, -request.MaxSeats()) request.NoteQueued(false) qs.reqsGaugePair.RequestsWaiting.Add(-1) defer qs.boundNextDispatchLocked(queue) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go index 54af4415cd0c..9fe7b15a050f 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/metrics/metrics.go @@ -210,6 +210,16 @@ var ( }, []string{priorityLevel, flowSchema}, ) + apiserverCurrentInqueueSeats = compbasemetrics.NewGaugeVec( + &compbasemetrics.GaugeOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "current_inqueue_seats", + Help: "Number of seats currently pending in queues of the API Priority and Fairness subsystem", + StabilityLevel: compbasemetrics.ALPHA, + }, + []string{priorityLevel, flowSchema}, + ) apiserverRequestQueueLength = compbasemetrics.NewHistogramVec( &compbasemetrics.HistogramOpts{ Namespace: namespace, @@ -455,6 +465,7 @@ var ( apiserverNextSBounds, apiserverNextDiscountedSBounds, apiserverCurrentInqueueRequests, + apiserverCurrentInqueueSeats, apiserverRequestQueueLength, apiserverRequestConcurrencyLimit, apiserverRequestConcurrencyInUse, @@ -518,6 +529,11 @@ func AddRequestsInQueues(ctx context.Context, priorityLevel, flowSchema string, apiserverCurrentInqueueRequests.WithLabelValues(priorityLevel, flowSchema).Add(float64(delta)) } +// AddSeatsInQueues adds the given delta to the gauge of the # of seats in the queues of the specified flowSchema and priorityLevel +func AddSeatsInQueues(ctx context.Context, priorityLevel, flowSchema string, delta int) { + apiserverCurrentInqueueSeats.WithLabelValues(priorityLevel, flowSchema).Add(float64(delta)) +} + // AddRequestsExecuting adds the given delta to the gauge of executing requests of the given flowSchema and priorityLevel func AddRequestsExecuting(ctx context.Context, priorityLevel, flowSchema string, delta int) { apiserverCurrentExecutingRequests.WithLabelValues(priorityLevel, flowSchema).Add(float64(delta)) diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/request/list_work_estimator.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/request/list_work_estimator.go index 8d20867d6dd3..6b941cb7fe1b 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/request/list_work_estimator.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/flowcontrol/request/list_work_estimator.go @@ -117,8 +117,7 @@ func (e *listWorkEstimator) estimate(r *http.Request, flowSchemaName, priorityLe } limit := numStored - if utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) && listOptions.Limit > 0 && - listOptions.Limit < numStored { + if listOptions.Limit > 0 && listOptions.Limit < numStored { limit = listOptions.Limit } @@ -165,15 +164,14 @@ func key(requestInfo *apirequest.RequestInfo) string { func shouldListFromStorage(query url.Values, opts *metav1.ListOptions) bool { resourceVersion := opts.ResourceVersion match := opts.ResourceVersionMatch - pagingEnabled := utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking) consistentListFromCacheEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConsistentListFromCache) // Serve consistent reads from storage if ConsistentListFromCache is disabled consistentReadFromStorage := resourceVersion == "" && !consistentListFromCacheEnabled // Watch cache doesn't support continuations, so serve them from etcd. - hasContinuation := pagingEnabled && len(opts.Continue) > 0 + hasContinuation := len(opts.Continue) > 0 // Serve paginated requests about revision "0" from watch cache to avoid overwhelming etcd. - hasLimit := pagingEnabled && opts.Limit > 0 && resourceVersion != "0" + hasLimit := opts.Limit > 0 && resourceVersion != "0" // Watch cache only supports ResourceVersionMatchNotOlderThan (default). unsupportedMatch := match != "" && match != metav1.ResourceVersionMatchNotOlderThan diff --git a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/webhook/authentication.go b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/webhook/authentication.go index 95e4060bd119..0816b45a102c 100644 --- a/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/webhook/authentication.go +++ b/cluster-autoscaler/vendor/k8s.io/apiserver/pkg/util/webhook/authentication.go @@ -18,9 +18,9 @@ package webhook import ( "fmt" - "io/ioutil" "net" "net/http" + "os" "strconv" "strings" "time" @@ -233,7 +233,7 @@ func restConfigFromKubeconfig(configAuthInfo *clientcmdapi.AuthInfo) (*rest.Conf config.BearerToken = configAuthInfo.Token config.BearerTokenFile = configAuthInfo.TokenFile } else if len(configAuthInfo.TokenFile) > 0 { - tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile) + tokenBytes, err := os.ReadFile(configAuthInfo.TokenFile) if err != nil { return nil, err } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go index 64d27bdad50e..a48dac681074 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/loadbalanceringress.go @@ -18,11 +18,16 @@ limitations under the License. package v1 +import ( + v1 "k8s.io/api/core/v1" +) + // LoadBalancerIngressApplyConfiguration represents an declarative configuration of the LoadBalancerIngress type for use // with apply. type LoadBalancerIngressApplyConfiguration struct { IP *string `json:"ip,omitempty"` Hostname *string `json:"hostname,omitempty"` + IPMode *v1.LoadBalancerIPMode `json:"ipMode,omitempty"` Ports []PortStatusApplyConfiguration `json:"ports,omitempty"` } @@ -48,6 +53,14 @@ func (b *LoadBalancerIngressApplyConfiguration) WithHostname(value string) *Load return b } +// WithIPMode sets the IPMode field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IPMode field is set to the value of the last call. +func (b *LoadBalancerIngressApplyConfiguration) WithIPMode(value v1.LoadBalancerIPMode) *LoadBalancerIngressApplyConfiguration { + b.IPMode = &value + return b +} + // WithPorts adds the given value to the Ports field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Ports field. diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumeclaimspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumeclaimspec.go index f324584aba27..d67c2ff561a9 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumeclaimspec.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/persistentvolumeclaimspec.go @@ -26,14 +26,14 @@ import ( // PersistentVolumeClaimSpecApplyConfiguration represents an declarative configuration of the PersistentVolumeClaimSpec type for use // with apply. type PersistentVolumeClaimSpecApplyConfiguration struct { - AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` - Selector *metav1.LabelSelectorApplyConfiguration `json:"selector,omitempty"` - Resources *ResourceRequirementsApplyConfiguration `json:"resources,omitempty"` - VolumeName *string `json:"volumeName,omitempty"` - StorageClassName *string `json:"storageClassName,omitempty"` - VolumeMode *v1.PersistentVolumeMode `json:"volumeMode,omitempty"` - DataSource *TypedLocalObjectReferenceApplyConfiguration `json:"dataSource,omitempty"` - DataSourceRef *TypedObjectReferenceApplyConfiguration `json:"dataSourceRef,omitempty"` + AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` + Selector *metav1.LabelSelectorApplyConfiguration `json:"selector,omitempty"` + Resources *VolumeResourceRequirementsApplyConfiguration `json:"resources,omitempty"` + VolumeName *string `json:"volumeName,omitempty"` + StorageClassName *string `json:"storageClassName,omitempty"` + VolumeMode *v1.PersistentVolumeMode `json:"volumeMode,omitempty"` + DataSource *TypedLocalObjectReferenceApplyConfiguration `json:"dataSource,omitempty"` + DataSourceRef *TypedObjectReferenceApplyConfiguration `json:"dataSourceRef,omitempty"` } // PersistentVolumeClaimSpecApplyConfiguration constructs an declarative configuration of the PersistentVolumeClaimSpec type for use with @@ -63,7 +63,7 @@ func (b *PersistentVolumeClaimSpecApplyConfiguration) WithSelector(value *metav1 // WithResources sets the Resources field in the declarative configuration to the given value // and returns the receiver, so that objects can be built by chaining "With" function invocations. // If called multiple times, the Resources field is set to the value of the last call. -func (b *PersistentVolumeClaimSpecApplyConfiguration) WithResources(value *ResourceRequirementsApplyConfiguration) *PersistentVolumeClaimSpecApplyConfiguration { +func (b *PersistentVolumeClaimSpecApplyConfiguration) WithResources(value *VolumeResourceRequirementsApplyConfiguration) *PersistentVolumeClaimSpecApplyConfiguration { b.Resources = value return b } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/volumeresourcerequirements.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/volumeresourcerequirements.go new file mode 100644 index 000000000000..89ad1da8b33a --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/core/v1/volumeresourcerequirements.go @@ -0,0 +1,52 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/core/v1" +) + +// VolumeResourceRequirementsApplyConfiguration represents an declarative configuration of the VolumeResourceRequirements type for use +// with apply. +type VolumeResourceRequirementsApplyConfiguration struct { + Limits *v1.ResourceList `json:"limits,omitempty"` + Requests *v1.ResourceList `json:"requests,omitempty"` +} + +// VolumeResourceRequirementsApplyConfiguration constructs an declarative configuration of the VolumeResourceRequirements type for use with +// apply. +func VolumeResourceRequirements() *VolumeResourceRequirementsApplyConfiguration { + return &VolumeResourceRequirementsApplyConfiguration{} +} + +// WithLimits sets the Limits field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Limits field is set to the value of the last call. +func (b *VolumeResourceRequirementsApplyConfiguration) WithLimits(value v1.ResourceList) *VolumeResourceRequirementsApplyConfiguration { + b.Limits = &value + return b +} + +// WithRequests sets the Requests field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Requests field is set to the value of the last call. +func (b *VolumeResourceRequirementsApplyConfiguration) WithRequests(value v1.ResourceList) *VolumeResourceRequirementsApplyConfiguration { + b.Requests = &value + return b +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/exemptprioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/exemptprioritylevelconfiguration.go deleted file mode 100644 index 3535d7478776..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/exemptprioritylevelconfiguration.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// ExemptPriorityLevelConfigurationApplyConfiguration represents an declarative configuration of the ExemptPriorityLevelConfiguration type for use -// with apply. -type ExemptPriorityLevelConfigurationApplyConfiguration struct { - NominalConcurrencyShares *int32 `json:"nominalConcurrencyShares,omitempty"` - LendablePercent *int32 `json:"lendablePercent,omitempty"` -} - -// ExemptPriorityLevelConfigurationApplyConfiguration constructs an declarative configuration of the ExemptPriorityLevelConfiguration type for use with -// apply. -func ExemptPriorityLevelConfiguration() *ExemptPriorityLevelConfigurationApplyConfiguration { - return &ExemptPriorityLevelConfigurationApplyConfiguration{} -} - -// WithNominalConcurrencyShares sets the NominalConcurrencyShares field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the NominalConcurrencyShares field is set to the value of the last call. -func (b *ExemptPriorityLevelConfigurationApplyConfiguration) WithNominalConcurrencyShares(value int32) *ExemptPriorityLevelConfigurationApplyConfiguration { - b.NominalConcurrencyShares = &value - return b -} - -// WithLendablePercent sets the LendablePercent field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LendablePercent field is set to the value of the last call. -func (b *ExemptPriorityLevelConfigurationApplyConfiguration) WithLendablePercent(value int32) *ExemptPriorityLevelConfigurationApplyConfiguration { - b.LendablePercent = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowdistinguishermethod.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowdistinguishermethod.go deleted file mode 100644 index 507f8e9abe78..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowdistinguishermethod.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" -) - -// FlowDistinguisherMethodApplyConfiguration represents an declarative configuration of the FlowDistinguisherMethod type for use -// with apply. -type FlowDistinguisherMethodApplyConfiguration struct { - Type *v1alpha1.FlowDistinguisherMethodType `json:"type,omitempty"` -} - -// FlowDistinguisherMethodApplyConfiguration constructs an declarative configuration of the FlowDistinguisherMethod type for use with -// apply. -func FlowDistinguisherMethod() *FlowDistinguisherMethodApplyConfiguration { - return &FlowDistinguisherMethodApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *FlowDistinguisherMethodApplyConfiguration) WithType(value v1alpha1.FlowDistinguisherMethodType) *FlowDistinguisherMethodApplyConfiguration { - b.Type = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschema.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschema.go deleted file mode 100644 index 20251d08bff3..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschema.go +++ /dev/null @@ -1,256 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - managedfields "k8s.io/apimachinery/pkg/util/managedfields" - internal "k8s.io/client-go/applyconfigurations/internal" - v1 "k8s.io/client-go/applyconfigurations/meta/v1" -) - -// FlowSchemaApplyConfiguration represents an declarative configuration of the FlowSchema type for use -// with apply. -type FlowSchemaApplyConfiguration struct { - v1.TypeMetaApplyConfiguration `json:",inline"` - *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` - Spec *FlowSchemaSpecApplyConfiguration `json:"spec,omitempty"` - Status *FlowSchemaStatusApplyConfiguration `json:"status,omitempty"` -} - -// FlowSchema constructs an declarative configuration of the FlowSchema type for use with -// apply. -func FlowSchema(name string) *FlowSchemaApplyConfiguration { - b := &FlowSchemaApplyConfiguration{} - b.WithName(name) - b.WithKind("FlowSchema") - b.WithAPIVersion("flowcontrol.apiserver.k8s.io/v1alpha1") - return b -} - -// ExtractFlowSchema extracts the applied configuration owned by fieldManager from -// flowSchema. If no managedFields are found in flowSchema for fieldManager, a -// FlowSchemaApplyConfiguration is returned with only the Name, Namespace (if applicable), -// APIVersion and Kind populated. It is possible that no managed fields were found for because other -// field managers have taken ownership of all the fields previously owned by fieldManager, or because -// the fieldManager never owned fields any fields. -// flowSchema must be a unmodified FlowSchema API object that was retrieved from the Kubernetes API. -// ExtractFlowSchema provides a way to perform a extract/modify-in-place/apply workflow. -// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously -// applied if another fieldManager has updated or force applied any of the previously applied fields. -// Experimental! -func ExtractFlowSchema(flowSchema *flowcontrolv1alpha1.FlowSchema, fieldManager string) (*FlowSchemaApplyConfiguration, error) { - return extractFlowSchema(flowSchema, fieldManager, "") -} - -// ExtractFlowSchemaStatus is the same as ExtractFlowSchema except -// that it extracts the status subresource applied configuration. -// Experimental! -func ExtractFlowSchemaStatus(flowSchema *flowcontrolv1alpha1.FlowSchema, fieldManager string) (*FlowSchemaApplyConfiguration, error) { - return extractFlowSchema(flowSchema, fieldManager, "status") -} - -func extractFlowSchema(flowSchema *flowcontrolv1alpha1.FlowSchema, fieldManager string, subresource string) (*FlowSchemaApplyConfiguration, error) { - b := &FlowSchemaApplyConfiguration{} - err := managedfields.ExtractInto(flowSchema, internal.Parser().Type("io.k8s.api.flowcontrol.v1alpha1.FlowSchema"), fieldManager, b, subresource) - if err != nil { - return nil, err - } - b.WithName(flowSchema.Name) - - b.WithKind("FlowSchema") - b.WithAPIVersion("flowcontrol.apiserver.k8s.io/v1alpha1") - return b, nil -} - -// WithKind sets the Kind field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Kind field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithKind(value string) *FlowSchemaApplyConfiguration { - b.Kind = &value - return b -} - -// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the APIVersion field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithAPIVersion(value string) *FlowSchemaApplyConfiguration { - b.APIVersion = &value - return b -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithName(value string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Name = &value - return b -} - -// WithGenerateName sets the GenerateName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the GenerateName field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithGenerateName(value string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.GenerateName = &value - return b -} - -// WithNamespace sets the Namespace field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Namespace field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithNamespace(value string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Namespace = &value - return b -} - -// WithUID sets the UID field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the UID field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithUID(value types.UID) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.UID = &value - return b -} - -// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ResourceVersion field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithResourceVersion(value string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.ResourceVersion = &value - return b -} - -// WithGeneration sets the Generation field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Generation field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithGeneration(value int64) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Generation = &value - return b -} - -// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the CreationTimestamp field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithCreationTimestamp(value metav1.Time) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.CreationTimestamp = &value - return b -} - -// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionTimestamp field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionTimestamp = &value - return b -} - -// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionGracePeriodSeconds = &value - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *FlowSchemaApplyConfiguration) WithLabels(entries map[string]string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *FlowSchemaApplyConfiguration) WithAnnotations(entries map[string]string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the OwnerReferences field. -func (b *FlowSchemaApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - if values[i] == nil { - panic("nil value passed to WithOwnerReferences") - } - b.OwnerReferences = append(b.OwnerReferences, *values[i]) - } - return b -} - -// WithFinalizers adds the given value to the Finalizers field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Finalizers field. -func (b *FlowSchemaApplyConfiguration) WithFinalizers(values ...string) *FlowSchemaApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - b.Finalizers = append(b.Finalizers, values[i]) - } - return b -} - -func (b *FlowSchemaApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { - if b.ObjectMetaApplyConfiguration == nil { - b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} - } -} - -// WithSpec sets the Spec field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Spec field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithSpec(value *FlowSchemaSpecApplyConfiguration) *FlowSchemaApplyConfiguration { - b.Spec = value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *FlowSchemaApplyConfiguration) WithStatus(value *FlowSchemaStatusApplyConfiguration) *FlowSchemaApplyConfiguration { - b.Status = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemacondition.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemacondition.go deleted file mode 100644 index 31f5dc13ed39..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemacondition.go +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// FlowSchemaConditionApplyConfiguration represents an declarative configuration of the FlowSchemaCondition type for use -// with apply. -type FlowSchemaConditionApplyConfiguration struct { - Type *v1alpha1.FlowSchemaConditionType `json:"type,omitempty"` - Status *v1alpha1.ConditionStatus `json:"status,omitempty"` - LastTransitionTime *v1.Time `json:"lastTransitionTime,omitempty"` - Reason *string `json:"reason,omitempty"` - Message *string `json:"message,omitempty"` -} - -// FlowSchemaConditionApplyConfiguration constructs an declarative configuration of the FlowSchemaCondition type for use with -// apply. -func FlowSchemaCondition() *FlowSchemaConditionApplyConfiguration { - return &FlowSchemaConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *FlowSchemaConditionApplyConfiguration) WithType(value v1alpha1.FlowSchemaConditionType) *FlowSchemaConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *FlowSchemaConditionApplyConfiguration) WithStatus(value v1alpha1.ConditionStatus) *FlowSchemaConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *FlowSchemaConditionApplyConfiguration) WithLastTransitionTime(value v1.Time) *FlowSchemaConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *FlowSchemaConditionApplyConfiguration) WithReason(value string) *FlowSchemaConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *FlowSchemaConditionApplyConfiguration) WithMessage(value string) *FlowSchemaConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemaspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemaspec.go deleted file mode 100644 index fd5fc0ae9aa3..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemaspec.go +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// FlowSchemaSpecApplyConfiguration represents an declarative configuration of the FlowSchemaSpec type for use -// with apply. -type FlowSchemaSpecApplyConfiguration struct { - PriorityLevelConfiguration *PriorityLevelConfigurationReferenceApplyConfiguration `json:"priorityLevelConfiguration,omitempty"` - MatchingPrecedence *int32 `json:"matchingPrecedence,omitempty"` - DistinguisherMethod *FlowDistinguisherMethodApplyConfiguration `json:"distinguisherMethod,omitempty"` - Rules []PolicyRulesWithSubjectsApplyConfiguration `json:"rules,omitempty"` -} - -// FlowSchemaSpecApplyConfiguration constructs an declarative configuration of the FlowSchemaSpec type for use with -// apply. -func FlowSchemaSpec() *FlowSchemaSpecApplyConfiguration { - return &FlowSchemaSpecApplyConfiguration{} -} - -// WithPriorityLevelConfiguration sets the PriorityLevelConfiguration field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the PriorityLevelConfiguration field is set to the value of the last call. -func (b *FlowSchemaSpecApplyConfiguration) WithPriorityLevelConfiguration(value *PriorityLevelConfigurationReferenceApplyConfiguration) *FlowSchemaSpecApplyConfiguration { - b.PriorityLevelConfiguration = value - return b -} - -// WithMatchingPrecedence sets the MatchingPrecedence field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the MatchingPrecedence field is set to the value of the last call. -func (b *FlowSchemaSpecApplyConfiguration) WithMatchingPrecedence(value int32) *FlowSchemaSpecApplyConfiguration { - b.MatchingPrecedence = &value - return b -} - -// WithDistinguisherMethod sets the DistinguisherMethod field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DistinguisherMethod field is set to the value of the last call. -func (b *FlowSchemaSpecApplyConfiguration) WithDistinguisherMethod(value *FlowDistinguisherMethodApplyConfiguration) *FlowSchemaSpecApplyConfiguration { - b.DistinguisherMethod = value - return b -} - -// WithRules adds the given value to the Rules field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Rules field. -func (b *FlowSchemaSpecApplyConfiguration) WithRules(values ...*PolicyRulesWithSubjectsApplyConfiguration) *FlowSchemaSpecApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithRules") - } - b.Rules = append(b.Rules, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemastatus.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemastatus.go deleted file mode 100644 index db2dacf13afc..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/flowschemastatus.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// FlowSchemaStatusApplyConfiguration represents an declarative configuration of the FlowSchemaStatus type for use -// with apply. -type FlowSchemaStatusApplyConfiguration struct { - Conditions []FlowSchemaConditionApplyConfiguration `json:"conditions,omitempty"` -} - -// FlowSchemaStatusApplyConfiguration constructs an declarative configuration of the FlowSchemaStatus type for use with -// apply. -func FlowSchemaStatus() *FlowSchemaStatusApplyConfiguration { - return &FlowSchemaStatusApplyConfiguration{} -} - -// WithConditions adds the given value to the Conditions field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *FlowSchemaStatusApplyConfiguration) WithConditions(values ...*FlowSchemaConditionApplyConfiguration) *FlowSchemaStatusApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithConditions") - } - b.Conditions = append(b.Conditions, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/groupsubject.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/groupsubject.go deleted file mode 100644 index 0421f3f59999..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/groupsubject.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// GroupSubjectApplyConfiguration represents an declarative configuration of the GroupSubject type for use -// with apply. -type GroupSubjectApplyConfiguration struct { - Name *string `json:"name,omitempty"` -} - -// GroupSubjectApplyConfiguration constructs an declarative configuration of the GroupSubject type for use with -// apply. -func GroupSubject() *GroupSubjectApplyConfiguration { - return &GroupSubjectApplyConfiguration{} -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *GroupSubjectApplyConfiguration) WithName(value string) *GroupSubjectApplyConfiguration { - b.Name = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitedprioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitedprioritylevelconfiguration.go deleted file mode 100644 index 10660e81aaf4..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitedprioritylevelconfiguration.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// LimitedPriorityLevelConfigurationApplyConfiguration represents an declarative configuration of the LimitedPriorityLevelConfiguration type for use -// with apply. -type LimitedPriorityLevelConfigurationApplyConfiguration struct { - AssuredConcurrencyShares *int32 `json:"assuredConcurrencyShares,omitempty"` - LimitResponse *LimitResponseApplyConfiguration `json:"limitResponse,omitempty"` - LendablePercent *int32 `json:"lendablePercent,omitempty"` - BorrowingLimitPercent *int32 `json:"borrowingLimitPercent,omitempty"` -} - -// LimitedPriorityLevelConfigurationApplyConfiguration constructs an declarative configuration of the LimitedPriorityLevelConfiguration type for use with -// apply. -func LimitedPriorityLevelConfiguration() *LimitedPriorityLevelConfigurationApplyConfiguration { - return &LimitedPriorityLevelConfigurationApplyConfiguration{} -} - -// WithAssuredConcurrencyShares sets the AssuredConcurrencyShares field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the AssuredConcurrencyShares field is set to the value of the last call. -func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithAssuredConcurrencyShares(value int32) *LimitedPriorityLevelConfigurationApplyConfiguration { - b.AssuredConcurrencyShares = &value - return b -} - -// WithLimitResponse sets the LimitResponse field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LimitResponse field is set to the value of the last call. -func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithLimitResponse(value *LimitResponseApplyConfiguration) *LimitedPriorityLevelConfigurationApplyConfiguration { - b.LimitResponse = value - return b -} - -// WithLendablePercent sets the LendablePercent field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LendablePercent field is set to the value of the last call. -func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithLendablePercent(value int32) *LimitedPriorityLevelConfigurationApplyConfiguration { - b.LendablePercent = &value - return b -} - -// WithBorrowingLimitPercent sets the BorrowingLimitPercent field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the BorrowingLimitPercent field is set to the value of the last call. -func (b *LimitedPriorityLevelConfigurationApplyConfiguration) WithBorrowingLimitPercent(value int32) *LimitedPriorityLevelConfigurationApplyConfiguration { - b.BorrowingLimitPercent = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitresponse.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitresponse.go deleted file mode 100644 index 5edaa025cdb6..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/limitresponse.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" -) - -// LimitResponseApplyConfiguration represents an declarative configuration of the LimitResponse type for use -// with apply. -type LimitResponseApplyConfiguration struct { - Type *v1alpha1.LimitResponseType `json:"type,omitempty"` - Queuing *QueuingConfigurationApplyConfiguration `json:"queuing,omitempty"` -} - -// LimitResponseApplyConfiguration constructs an declarative configuration of the LimitResponse type for use with -// apply. -func LimitResponse() *LimitResponseApplyConfiguration { - return &LimitResponseApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *LimitResponseApplyConfiguration) WithType(value v1alpha1.LimitResponseType) *LimitResponseApplyConfiguration { - b.Type = &value - return b -} - -// WithQueuing sets the Queuing field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Queuing field is set to the value of the last call. -func (b *LimitResponseApplyConfiguration) WithQueuing(value *QueuingConfigurationApplyConfiguration) *LimitResponseApplyConfiguration { - b.Queuing = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/nonresourcepolicyrule.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/nonresourcepolicyrule.go deleted file mode 100644 index b1f09f5304cf..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/nonresourcepolicyrule.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// NonResourcePolicyRuleApplyConfiguration represents an declarative configuration of the NonResourcePolicyRule type for use -// with apply. -type NonResourcePolicyRuleApplyConfiguration struct { - Verbs []string `json:"verbs,omitempty"` - NonResourceURLs []string `json:"nonResourceURLs,omitempty"` -} - -// NonResourcePolicyRuleApplyConfiguration constructs an declarative configuration of the NonResourcePolicyRule type for use with -// apply. -func NonResourcePolicyRule() *NonResourcePolicyRuleApplyConfiguration { - return &NonResourcePolicyRuleApplyConfiguration{} -} - -// WithVerbs adds the given value to the Verbs field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Verbs field. -func (b *NonResourcePolicyRuleApplyConfiguration) WithVerbs(values ...string) *NonResourcePolicyRuleApplyConfiguration { - for i := range values { - b.Verbs = append(b.Verbs, values[i]) - } - return b -} - -// WithNonResourceURLs adds the given value to the NonResourceURLs field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the NonResourceURLs field. -func (b *NonResourcePolicyRuleApplyConfiguration) WithNonResourceURLs(values ...string) *NonResourcePolicyRuleApplyConfiguration { - for i := range values { - b.NonResourceURLs = append(b.NonResourceURLs, values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/policyruleswithsubjects.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/policyruleswithsubjects.go deleted file mode 100644 index 841104064465..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/policyruleswithsubjects.go +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// PolicyRulesWithSubjectsApplyConfiguration represents an declarative configuration of the PolicyRulesWithSubjects type for use -// with apply. -type PolicyRulesWithSubjectsApplyConfiguration struct { - Subjects []SubjectApplyConfiguration `json:"subjects,omitempty"` - ResourceRules []ResourcePolicyRuleApplyConfiguration `json:"resourceRules,omitempty"` - NonResourceRules []NonResourcePolicyRuleApplyConfiguration `json:"nonResourceRules,omitempty"` -} - -// PolicyRulesWithSubjectsApplyConfiguration constructs an declarative configuration of the PolicyRulesWithSubjects type for use with -// apply. -func PolicyRulesWithSubjects() *PolicyRulesWithSubjectsApplyConfiguration { - return &PolicyRulesWithSubjectsApplyConfiguration{} -} - -// WithSubjects adds the given value to the Subjects field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Subjects field. -func (b *PolicyRulesWithSubjectsApplyConfiguration) WithSubjects(values ...*SubjectApplyConfiguration) *PolicyRulesWithSubjectsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithSubjects") - } - b.Subjects = append(b.Subjects, *values[i]) - } - return b -} - -// WithResourceRules adds the given value to the ResourceRules field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the ResourceRules field. -func (b *PolicyRulesWithSubjectsApplyConfiguration) WithResourceRules(values ...*ResourcePolicyRuleApplyConfiguration) *PolicyRulesWithSubjectsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithResourceRules") - } - b.ResourceRules = append(b.ResourceRules, *values[i]) - } - return b -} - -// WithNonResourceRules adds the given value to the NonResourceRules field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the NonResourceRules field. -func (b *PolicyRulesWithSubjectsApplyConfiguration) WithNonResourceRules(values ...*NonResourcePolicyRuleApplyConfiguration) *PolicyRulesWithSubjectsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithNonResourceRules") - } - b.NonResourceRules = append(b.NonResourceRules, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfiguration.go deleted file mode 100644 index a40db75dcb55..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfiguration.go +++ /dev/null @@ -1,256 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - managedfields "k8s.io/apimachinery/pkg/util/managedfields" - internal "k8s.io/client-go/applyconfigurations/internal" - v1 "k8s.io/client-go/applyconfigurations/meta/v1" -) - -// PriorityLevelConfigurationApplyConfiguration represents an declarative configuration of the PriorityLevelConfiguration type for use -// with apply. -type PriorityLevelConfigurationApplyConfiguration struct { - v1.TypeMetaApplyConfiguration `json:",inline"` - *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` - Spec *PriorityLevelConfigurationSpecApplyConfiguration `json:"spec,omitempty"` - Status *PriorityLevelConfigurationStatusApplyConfiguration `json:"status,omitempty"` -} - -// PriorityLevelConfiguration constructs an declarative configuration of the PriorityLevelConfiguration type for use with -// apply. -func PriorityLevelConfiguration(name string) *PriorityLevelConfigurationApplyConfiguration { - b := &PriorityLevelConfigurationApplyConfiguration{} - b.WithName(name) - b.WithKind("PriorityLevelConfiguration") - b.WithAPIVersion("flowcontrol.apiserver.k8s.io/v1alpha1") - return b -} - -// ExtractPriorityLevelConfiguration extracts the applied configuration owned by fieldManager from -// priorityLevelConfiguration. If no managedFields are found in priorityLevelConfiguration for fieldManager, a -// PriorityLevelConfigurationApplyConfiguration is returned with only the Name, Namespace (if applicable), -// APIVersion and Kind populated. It is possible that no managed fields were found for because other -// field managers have taken ownership of all the fields previously owned by fieldManager, or because -// the fieldManager never owned fields any fields. -// priorityLevelConfiguration must be a unmodified PriorityLevelConfiguration API object that was retrieved from the Kubernetes API. -// ExtractPriorityLevelConfiguration provides a way to perform a extract/modify-in-place/apply workflow. -// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously -// applied if another fieldManager has updated or force applied any of the previously applied fields. -// Experimental! -func ExtractPriorityLevelConfiguration(priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfiguration, fieldManager string) (*PriorityLevelConfigurationApplyConfiguration, error) { - return extractPriorityLevelConfiguration(priorityLevelConfiguration, fieldManager, "") -} - -// ExtractPriorityLevelConfigurationStatus is the same as ExtractPriorityLevelConfiguration except -// that it extracts the status subresource applied configuration. -// Experimental! -func ExtractPriorityLevelConfigurationStatus(priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfiguration, fieldManager string) (*PriorityLevelConfigurationApplyConfiguration, error) { - return extractPriorityLevelConfiguration(priorityLevelConfiguration, fieldManager, "status") -} - -func extractPriorityLevelConfiguration(priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfiguration, fieldManager string, subresource string) (*PriorityLevelConfigurationApplyConfiguration, error) { - b := &PriorityLevelConfigurationApplyConfiguration{} - err := managedfields.ExtractInto(priorityLevelConfiguration, internal.Parser().Type("io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfiguration"), fieldManager, b, subresource) - if err != nil { - return nil, err - } - b.WithName(priorityLevelConfiguration.Name) - - b.WithKind("PriorityLevelConfiguration") - b.WithAPIVersion("flowcontrol.apiserver.k8s.io/v1alpha1") - return b, nil -} - -// WithKind sets the Kind field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Kind field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithKind(value string) *PriorityLevelConfigurationApplyConfiguration { - b.Kind = &value - return b -} - -// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the APIVersion field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithAPIVersion(value string) *PriorityLevelConfigurationApplyConfiguration { - b.APIVersion = &value - return b -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithName(value string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Name = &value - return b -} - -// WithGenerateName sets the GenerateName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the GenerateName field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithGenerateName(value string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.GenerateName = &value - return b -} - -// WithNamespace sets the Namespace field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Namespace field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithNamespace(value string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Namespace = &value - return b -} - -// WithUID sets the UID field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the UID field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithUID(value types.UID) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.UID = &value - return b -} - -// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ResourceVersion field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithResourceVersion(value string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.ResourceVersion = &value - return b -} - -// WithGeneration sets the Generation field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Generation field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithGeneration(value int64) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Generation = &value - return b -} - -// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the CreationTimestamp field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithCreationTimestamp(value metav1.Time) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.CreationTimestamp = &value - return b -} - -// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionTimestamp field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionTimestamp = &value - return b -} - -// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionGracePeriodSeconds = &value - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *PriorityLevelConfigurationApplyConfiguration) WithLabels(entries map[string]string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *PriorityLevelConfigurationApplyConfiguration) WithAnnotations(entries map[string]string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the OwnerReferences field. -func (b *PriorityLevelConfigurationApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - if values[i] == nil { - panic("nil value passed to WithOwnerReferences") - } - b.OwnerReferences = append(b.OwnerReferences, *values[i]) - } - return b -} - -// WithFinalizers adds the given value to the Finalizers field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Finalizers field. -func (b *PriorityLevelConfigurationApplyConfiguration) WithFinalizers(values ...string) *PriorityLevelConfigurationApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - b.Finalizers = append(b.Finalizers, values[i]) - } - return b -} - -func (b *PriorityLevelConfigurationApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { - if b.ObjectMetaApplyConfiguration == nil { - b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} - } -} - -// WithSpec sets the Spec field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Spec field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithSpec(value *PriorityLevelConfigurationSpecApplyConfiguration) *PriorityLevelConfigurationApplyConfiguration { - b.Spec = value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *PriorityLevelConfigurationApplyConfiguration) WithStatus(value *PriorityLevelConfigurationStatusApplyConfiguration) *PriorityLevelConfigurationApplyConfiguration { - b.Status = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationcondition.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationcondition.go deleted file mode 100644 index bd91b80f21f2..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationcondition.go +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// PriorityLevelConfigurationConditionApplyConfiguration represents an declarative configuration of the PriorityLevelConfigurationCondition type for use -// with apply. -type PriorityLevelConfigurationConditionApplyConfiguration struct { - Type *v1alpha1.PriorityLevelConfigurationConditionType `json:"type,omitempty"` - Status *v1alpha1.ConditionStatus `json:"status,omitempty"` - LastTransitionTime *v1.Time `json:"lastTransitionTime,omitempty"` - Reason *string `json:"reason,omitempty"` - Message *string `json:"message,omitempty"` -} - -// PriorityLevelConfigurationConditionApplyConfiguration constructs an declarative configuration of the PriorityLevelConfigurationCondition type for use with -// apply. -func PriorityLevelConfigurationCondition() *PriorityLevelConfigurationConditionApplyConfiguration { - return &PriorityLevelConfigurationConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *PriorityLevelConfigurationConditionApplyConfiguration) WithType(value v1alpha1.PriorityLevelConfigurationConditionType) *PriorityLevelConfigurationConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *PriorityLevelConfigurationConditionApplyConfiguration) WithStatus(value v1alpha1.ConditionStatus) *PriorityLevelConfigurationConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *PriorityLevelConfigurationConditionApplyConfiguration) WithLastTransitionTime(value v1.Time) *PriorityLevelConfigurationConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *PriorityLevelConfigurationConditionApplyConfiguration) WithReason(value string) *PriorityLevelConfigurationConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *PriorityLevelConfigurationConditionApplyConfiguration) WithMessage(value string) *PriorityLevelConfigurationConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationreference.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationreference.go deleted file mode 100644 index b477c04df53a..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationreference.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// PriorityLevelConfigurationReferenceApplyConfiguration represents an declarative configuration of the PriorityLevelConfigurationReference type for use -// with apply. -type PriorityLevelConfigurationReferenceApplyConfiguration struct { - Name *string `json:"name,omitempty"` -} - -// PriorityLevelConfigurationReferenceApplyConfiguration constructs an declarative configuration of the PriorityLevelConfigurationReference type for use with -// apply. -func PriorityLevelConfigurationReference() *PriorityLevelConfigurationReferenceApplyConfiguration { - return &PriorityLevelConfigurationReferenceApplyConfiguration{} -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *PriorityLevelConfigurationReferenceApplyConfiguration) WithName(value string) *PriorityLevelConfigurationReferenceApplyConfiguration { - b.Name = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationspec.go deleted file mode 100644 index ade920a75562..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationspec.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" -) - -// PriorityLevelConfigurationSpecApplyConfiguration represents an declarative configuration of the PriorityLevelConfigurationSpec type for use -// with apply. -type PriorityLevelConfigurationSpecApplyConfiguration struct { - Type *v1alpha1.PriorityLevelEnablement `json:"type,omitempty"` - Limited *LimitedPriorityLevelConfigurationApplyConfiguration `json:"limited,omitempty"` - Exempt *ExemptPriorityLevelConfigurationApplyConfiguration `json:"exempt,omitempty"` -} - -// PriorityLevelConfigurationSpecApplyConfiguration constructs an declarative configuration of the PriorityLevelConfigurationSpec type for use with -// apply. -func PriorityLevelConfigurationSpec() *PriorityLevelConfigurationSpecApplyConfiguration { - return &PriorityLevelConfigurationSpecApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *PriorityLevelConfigurationSpecApplyConfiguration) WithType(value v1alpha1.PriorityLevelEnablement) *PriorityLevelConfigurationSpecApplyConfiguration { - b.Type = &value - return b -} - -// WithLimited sets the Limited field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Limited field is set to the value of the last call. -func (b *PriorityLevelConfigurationSpecApplyConfiguration) WithLimited(value *LimitedPriorityLevelConfigurationApplyConfiguration) *PriorityLevelConfigurationSpecApplyConfiguration { - b.Limited = value - return b -} - -// WithExempt sets the Exempt field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Exempt field is set to the value of the last call. -func (b *PriorityLevelConfigurationSpecApplyConfiguration) WithExempt(value *ExemptPriorityLevelConfigurationApplyConfiguration) *PriorityLevelConfigurationSpecApplyConfiguration { - b.Exempt = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationstatus.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationstatus.go deleted file mode 100644 index eb3ef3d61d11..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/prioritylevelconfigurationstatus.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// PriorityLevelConfigurationStatusApplyConfiguration represents an declarative configuration of the PriorityLevelConfigurationStatus type for use -// with apply. -type PriorityLevelConfigurationStatusApplyConfiguration struct { - Conditions []PriorityLevelConfigurationConditionApplyConfiguration `json:"conditions,omitempty"` -} - -// PriorityLevelConfigurationStatusApplyConfiguration constructs an declarative configuration of the PriorityLevelConfigurationStatus type for use with -// apply. -func PriorityLevelConfigurationStatus() *PriorityLevelConfigurationStatusApplyConfiguration { - return &PriorityLevelConfigurationStatusApplyConfiguration{} -} - -// WithConditions adds the given value to the Conditions field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *PriorityLevelConfigurationStatusApplyConfiguration) WithConditions(values ...*PriorityLevelConfigurationConditionApplyConfiguration) *PriorityLevelConfigurationStatusApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithConditions") - } - b.Conditions = append(b.Conditions, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/queuingconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/queuingconfiguration.go deleted file mode 100644 index 0fccc3f08be9..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/queuingconfiguration.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// QueuingConfigurationApplyConfiguration represents an declarative configuration of the QueuingConfiguration type for use -// with apply. -type QueuingConfigurationApplyConfiguration struct { - Queues *int32 `json:"queues,omitempty"` - HandSize *int32 `json:"handSize,omitempty"` - QueueLengthLimit *int32 `json:"queueLengthLimit,omitempty"` -} - -// QueuingConfigurationApplyConfiguration constructs an declarative configuration of the QueuingConfiguration type for use with -// apply. -func QueuingConfiguration() *QueuingConfigurationApplyConfiguration { - return &QueuingConfigurationApplyConfiguration{} -} - -// WithQueues sets the Queues field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Queues field is set to the value of the last call. -func (b *QueuingConfigurationApplyConfiguration) WithQueues(value int32) *QueuingConfigurationApplyConfiguration { - b.Queues = &value - return b -} - -// WithHandSize sets the HandSize field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the HandSize field is set to the value of the last call. -func (b *QueuingConfigurationApplyConfiguration) WithHandSize(value int32) *QueuingConfigurationApplyConfiguration { - b.HandSize = &value - return b -} - -// WithQueueLengthLimit sets the QueueLengthLimit field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the QueueLengthLimit field is set to the value of the last call. -func (b *QueuingConfigurationApplyConfiguration) WithQueueLengthLimit(value int32) *QueuingConfigurationApplyConfiguration { - b.QueueLengthLimit = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/resourcepolicyrule.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/resourcepolicyrule.go deleted file mode 100644 index d2c6f4eed6d4..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/resourcepolicyrule.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// ResourcePolicyRuleApplyConfiguration represents an declarative configuration of the ResourcePolicyRule type for use -// with apply. -type ResourcePolicyRuleApplyConfiguration struct { - Verbs []string `json:"verbs,omitempty"` - APIGroups []string `json:"apiGroups,omitempty"` - Resources []string `json:"resources,omitempty"` - ClusterScope *bool `json:"clusterScope,omitempty"` - Namespaces []string `json:"namespaces,omitempty"` -} - -// ResourcePolicyRuleApplyConfiguration constructs an declarative configuration of the ResourcePolicyRule type for use with -// apply. -func ResourcePolicyRule() *ResourcePolicyRuleApplyConfiguration { - return &ResourcePolicyRuleApplyConfiguration{} -} - -// WithVerbs adds the given value to the Verbs field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Verbs field. -func (b *ResourcePolicyRuleApplyConfiguration) WithVerbs(values ...string) *ResourcePolicyRuleApplyConfiguration { - for i := range values { - b.Verbs = append(b.Verbs, values[i]) - } - return b -} - -// WithAPIGroups adds the given value to the APIGroups field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the APIGroups field. -func (b *ResourcePolicyRuleApplyConfiguration) WithAPIGroups(values ...string) *ResourcePolicyRuleApplyConfiguration { - for i := range values { - b.APIGroups = append(b.APIGroups, values[i]) - } - return b -} - -// WithResources adds the given value to the Resources field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Resources field. -func (b *ResourcePolicyRuleApplyConfiguration) WithResources(values ...string) *ResourcePolicyRuleApplyConfiguration { - for i := range values { - b.Resources = append(b.Resources, values[i]) - } - return b -} - -// WithClusterScope sets the ClusterScope field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ClusterScope field is set to the value of the last call. -func (b *ResourcePolicyRuleApplyConfiguration) WithClusterScope(value bool) *ResourcePolicyRuleApplyConfiguration { - b.ClusterScope = &value - return b -} - -// WithNamespaces adds the given value to the Namespaces field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Namespaces field. -func (b *ResourcePolicyRuleApplyConfiguration) WithNamespaces(values ...string) *ResourcePolicyRuleApplyConfiguration { - for i := range values { - b.Namespaces = append(b.Namespaces, values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/serviceaccountsubject.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/serviceaccountsubject.go deleted file mode 100644 index 270b5225e144..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/serviceaccountsubject.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// ServiceAccountSubjectApplyConfiguration represents an declarative configuration of the ServiceAccountSubject type for use -// with apply. -type ServiceAccountSubjectApplyConfiguration struct { - Namespace *string `json:"namespace,omitempty"` - Name *string `json:"name,omitempty"` -} - -// ServiceAccountSubjectApplyConfiguration constructs an declarative configuration of the ServiceAccountSubject type for use with -// apply. -func ServiceAccountSubject() *ServiceAccountSubjectApplyConfiguration { - return &ServiceAccountSubjectApplyConfiguration{} -} - -// WithNamespace sets the Namespace field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Namespace field is set to the value of the last call. -func (b *ServiceAccountSubjectApplyConfiguration) WithNamespace(value string) *ServiceAccountSubjectApplyConfiguration { - b.Namespace = &value - return b -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *ServiceAccountSubjectApplyConfiguration) WithName(value string) *ServiceAccountSubjectApplyConfiguration { - b.Name = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/subject.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/subject.go deleted file mode 100644 index 83c09d644b2c..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/subject.go +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" -) - -// SubjectApplyConfiguration represents an declarative configuration of the Subject type for use -// with apply. -type SubjectApplyConfiguration struct { - Kind *v1alpha1.SubjectKind `json:"kind,omitempty"` - User *UserSubjectApplyConfiguration `json:"user,omitempty"` - Group *GroupSubjectApplyConfiguration `json:"group,omitempty"` - ServiceAccount *ServiceAccountSubjectApplyConfiguration `json:"serviceAccount,omitempty"` -} - -// SubjectApplyConfiguration constructs an declarative configuration of the Subject type for use with -// apply. -func Subject() *SubjectApplyConfiguration { - return &SubjectApplyConfiguration{} -} - -// WithKind sets the Kind field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Kind field is set to the value of the last call. -func (b *SubjectApplyConfiguration) WithKind(value v1alpha1.SubjectKind) *SubjectApplyConfiguration { - b.Kind = &value - return b -} - -// WithUser sets the User field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the User field is set to the value of the last call. -func (b *SubjectApplyConfiguration) WithUser(value *UserSubjectApplyConfiguration) *SubjectApplyConfiguration { - b.User = value - return b -} - -// WithGroup sets the Group field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Group field is set to the value of the last call. -func (b *SubjectApplyConfiguration) WithGroup(value *GroupSubjectApplyConfiguration) *SubjectApplyConfiguration { - b.Group = value - return b -} - -// WithServiceAccount sets the ServiceAccount field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ServiceAccount field is set to the value of the last call. -func (b *SubjectApplyConfiguration) WithServiceAccount(value *ServiceAccountSubjectApplyConfiguration) *SubjectApplyConfiguration { - b.ServiceAccount = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/usersubject.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/usersubject.go deleted file mode 100644 index a762c249e099..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1/usersubject.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1alpha1 - -// UserSubjectApplyConfiguration represents an declarative configuration of the UserSubject type for use -// with apply. -type UserSubjectApplyConfiguration struct { - Name *string `json:"name,omitempty"` -} - -// UserSubjectApplyConfiguration constructs an declarative configuration of the UserSubject type for use with -// apply. -func UserSubject() *UserSubjectApplyConfiguration { - return &UserSubjectApplyConfiguration{} -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *UserSubjectApplyConfiguration) WithName(value string) *UserSubjectApplyConfiguration { - b.Name = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go index 3ed553662f69..b05d08a4b431 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -5567,6 +5567,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: ip type: scalar: string + - name: ipMode + type: + scalar: string - name: ports type: list: @@ -6072,7 +6075,7 @@ var schemaYAML = typed.YAMLObject(`types: namedType: io.k8s.api.core.v1.TypedObjectReference - name: resources type: - namedType: io.k8s.api.core.v1.ResourceRequirements + namedType: io.k8s.api.core.v1.VolumeResourceRequirements default: {} - name: selector type: @@ -7891,6 +7894,19 @@ var schemaYAML = typed.YAMLObject(`types: - name: serviceAccountToken type: namedType: io.k8s.api.core.v1.ServiceAccountTokenProjection +- name: io.k8s.api.core.v1.VolumeResourceRequirements + map: + fields: + - name: limits + type: + map: + elementType: + namedType: io.k8s.apimachinery.pkg.api.resource.Quantity + - name: requests + type: + map: + elementType: + namedType: io.k8s.apimachinery.pkg.api.resource.Quantity - name: io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource map: fields: @@ -8879,334 +8895,6 @@ var schemaYAML = typed.YAMLObject(`types: - name: maxUnavailable type: namedType: io.k8s.apimachinery.pkg.util.intstr.IntOrString -- name: io.k8s.api.flowcontrol.v1alpha1.ExemptPriorityLevelConfiguration - map: - fields: - - name: lendablePercent - type: - scalar: numeric - - name: nominalConcurrencyShares - type: - scalar: numeric -- name: io.k8s.api.flowcontrol.v1alpha1.FlowDistinguisherMethod - map: - fields: - - name: type - type: - scalar: string - default: "" -- name: io.k8s.api.flowcontrol.v1alpha1.FlowSchema - map: - fields: - - name: apiVersion - type: - scalar: string - - name: kind - type: - scalar: string - - name: metadata - type: - namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta - default: {} - - name: spec - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaSpec - default: {} - - name: status - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaStatus - default: {} -- name: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaCondition - map: - fields: - - name: lastTransitionTime - type: - namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time - default: {} - - name: message - type: - scalar: string - - name: reason - type: - scalar: string - - name: status - type: - scalar: string - - name: type - type: - scalar: string -- name: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaSpec - map: - fields: - - name: distinguisherMethod - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.FlowDistinguisherMethod - - name: matchingPrecedence - type: - scalar: numeric - default: 0 - - name: priorityLevelConfiguration - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationReference - default: {} - - name: rules - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.PolicyRulesWithSubjects - elementRelationship: atomic -- name: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaStatus - map: - fields: - - name: conditions - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.FlowSchemaCondition - elementRelationship: associative - keys: - - type -- name: io.k8s.api.flowcontrol.v1alpha1.GroupSubject - map: - fields: - - name: name - type: - scalar: string - default: "" -- name: io.k8s.api.flowcontrol.v1alpha1.LimitResponse - map: - fields: - - name: queuing - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.QueuingConfiguration - - name: type - type: - scalar: string - default: "" - unions: - - discriminator: type - fields: - - fieldName: queuing - discriminatorValue: Queuing -- name: io.k8s.api.flowcontrol.v1alpha1.LimitedPriorityLevelConfiguration - map: - fields: - - name: assuredConcurrencyShares - type: - scalar: numeric - default: 0 - - name: borrowingLimitPercent - type: - scalar: numeric - - name: lendablePercent - type: - scalar: numeric - - name: limitResponse - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.LimitResponse - default: {} -- name: io.k8s.api.flowcontrol.v1alpha1.NonResourcePolicyRule - map: - fields: - - name: nonResourceURLs - type: - list: - elementType: - scalar: string - elementRelationship: associative - - name: verbs - type: - list: - elementType: - scalar: string - elementRelationship: associative -- name: io.k8s.api.flowcontrol.v1alpha1.PolicyRulesWithSubjects - map: - fields: - - name: nonResourceRules - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.NonResourcePolicyRule - elementRelationship: atomic - - name: resourceRules - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.ResourcePolicyRule - elementRelationship: atomic - - name: subjects - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.Subject - elementRelationship: atomic -- name: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfiguration - map: - fields: - - name: apiVersion - type: - scalar: string - - name: kind - type: - scalar: string - - name: metadata - type: - namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta - default: {} - - name: spec - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationSpec - default: {} - - name: status - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationStatus - default: {} -- name: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationCondition - map: - fields: - - name: lastTransitionTime - type: - namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time - default: {} - - name: message - type: - scalar: string - - name: reason - type: - scalar: string - - name: status - type: - scalar: string - - name: type - type: - scalar: string -- name: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationReference - map: - fields: - - name: name - type: - scalar: string - default: "" -- name: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationSpec - map: - fields: - - name: exempt - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.ExemptPriorityLevelConfiguration - - name: limited - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.LimitedPriorityLevelConfiguration - - name: type - type: - scalar: string - default: "" - unions: - - discriminator: type - fields: - - fieldName: exempt - discriminatorValue: Exempt - - fieldName: limited - discriminatorValue: Limited -- name: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationStatus - map: - fields: - - name: conditions - type: - list: - elementType: - namedType: io.k8s.api.flowcontrol.v1alpha1.PriorityLevelConfigurationCondition - elementRelationship: associative - keys: - - type -- name: io.k8s.api.flowcontrol.v1alpha1.QueuingConfiguration - map: - fields: - - name: handSize - type: - scalar: numeric - default: 0 - - name: queueLengthLimit - type: - scalar: numeric - default: 0 - - name: queues - type: - scalar: numeric - default: 0 -- name: io.k8s.api.flowcontrol.v1alpha1.ResourcePolicyRule - map: - fields: - - name: apiGroups - type: - list: - elementType: - scalar: string - elementRelationship: associative - - name: clusterScope - type: - scalar: boolean - - name: namespaces - type: - list: - elementType: - scalar: string - elementRelationship: associative - - name: resources - type: - list: - elementType: - scalar: string - elementRelationship: associative - - name: verbs - type: - list: - elementType: - scalar: string - elementRelationship: associative -- name: io.k8s.api.flowcontrol.v1alpha1.ServiceAccountSubject - map: - fields: - - name: name - type: - scalar: string - default: "" - - name: namespace - type: - scalar: string - default: "" -- name: io.k8s.api.flowcontrol.v1alpha1.Subject - map: - fields: - - name: group - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.GroupSubject - - name: kind - type: - scalar: string - default: "" - - name: serviceAccount - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.ServiceAccountSubject - - name: user - type: - namedType: io.k8s.api.flowcontrol.v1alpha1.UserSubject - unions: - - discriminator: kind - fields: - - fieldName: group - discriminatorValue: Group - - fieldName: serviceAccount - discriminatorValue: ServiceAccount - - fieldName: user - discriminatorValue: User -- name: io.k8s.api.flowcontrol.v1alpha1.UserSubject - map: - fields: - - name: name - type: - scalar: string - default: "" - name: io.k8s.api.flowcontrol.v1beta1.ExemptPriorityLevelConfiguration map: fields: @@ -11061,29 +10749,6 @@ var schemaYAML = typed.YAMLObject(`types: - name: observedGeneration type: scalar: numeric -- name: io.k8s.api.policy.v1beta1.AllowedCSIDriver - map: - fields: - - name: name - type: - scalar: string - default: "" -- name: io.k8s.api.policy.v1beta1.AllowedFlexVolume - map: - fields: - - name: driver - type: - scalar: string - default: "" -- name: io.k8s.api.policy.v1beta1.AllowedHostPath - map: - fields: - - name: pathPrefix - type: - scalar: string - - name: readOnly - type: - scalar: boolean - name: io.k8s.api.policy.v1beta1.Eviction map: fields: @@ -11100,40 +10765,6 @@ var schemaYAML = typed.YAMLObject(`types: type: namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta default: {} -- name: io.k8s.api.policy.v1beta1.FSGroupStrategyOptions - map: - fields: - - name: ranges - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.IDRange - elementRelationship: atomic - - name: rule - type: - scalar: string -- name: io.k8s.api.policy.v1beta1.HostPortRange - map: - fields: - - name: max - type: - scalar: numeric - default: 0 - - name: min - type: - scalar: numeric - default: 0 -- name: io.k8s.api.policy.v1beta1.IDRange - map: - fields: - - name: max - type: - scalar: numeric - default: 0 - - name: min - type: - scalar: numeric - default: 0 - name: io.k8s.api.policy.v1beta1.PodDisruptionBudget map: fields: @@ -11205,195 +10836,6 @@ var schemaYAML = typed.YAMLObject(`types: - name: observedGeneration type: scalar: numeric -- name: io.k8s.api.policy.v1beta1.PodSecurityPolicy - map: - fields: - - name: apiVersion - type: - scalar: string - - name: kind - type: - scalar: string - - name: metadata - type: - namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta - default: {} - - name: spec - type: - namedType: io.k8s.api.policy.v1beta1.PodSecurityPolicySpec - default: {} -- name: io.k8s.api.policy.v1beta1.PodSecurityPolicySpec - map: - fields: - - name: allowPrivilegeEscalation - type: - scalar: boolean - - name: allowedCSIDrivers - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.AllowedCSIDriver - elementRelationship: atomic - - name: allowedCapabilities - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: allowedFlexVolumes - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.AllowedFlexVolume - elementRelationship: atomic - - name: allowedHostPaths - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.AllowedHostPath - elementRelationship: atomic - - name: allowedProcMountTypes - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: allowedUnsafeSysctls - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: defaultAddCapabilities - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: defaultAllowPrivilegeEscalation - type: - scalar: boolean - - name: forbiddenSysctls - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: fsGroup - type: - namedType: io.k8s.api.policy.v1beta1.FSGroupStrategyOptions - default: {} - - name: hostIPC - type: - scalar: boolean - - name: hostNetwork - type: - scalar: boolean - - name: hostPID - type: - scalar: boolean - - name: hostPorts - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.HostPortRange - elementRelationship: atomic - - name: privileged - type: - scalar: boolean - - name: readOnlyRootFilesystem - type: - scalar: boolean - - name: requiredDropCapabilities - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: runAsGroup - type: - namedType: io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions - - name: runAsUser - type: - namedType: io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions - default: {} - - name: runtimeClass - type: - namedType: io.k8s.api.policy.v1beta1.RuntimeClassStrategyOptions - - name: seLinux - type: - namedType: io.k8s.api.policy.v1beta1.SELinuxStrategyOptions - default: {} - - name: supplementalGroups - type: - namedType: io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions - default: {} - - name: volumes - type: - list: - elementType: - scalar: string - elementRelationship: atomic -- name: io.k8s.api.policy.v1beta1.RunAsGroupStrategyOptions - map: - fields: - - name: ranges - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.IDRange - elementRelationship: atomic - - name: rule - type: - scalar: string - default: "" -- name: io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions - map: - fields: - - name: ranges - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.IDRange - elementRelationship: atomic - - name: rule - type: - scalar: string - default: "" -- name: io.k8s.api.policy.v1beta1.RuntimeClassStrategyOptions - map: - fields: - - name: allowedRuntimeClassNames - type: - list: - elementType: - scalar: string - elementRelationship: atomic - - name: defaultRuntimeClassName - type: - scalar: string -- name: io.k8s.api.policy.v1beta1.SELinuxStrategyOptions - map: - fields: - - name: rule - type: - scalar: string - default: "" - - name: seLinuxOptions - type: - namedType: io.k8s.api.core.v1.SELinuxOptions -- name: io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions - map: - fields: - - name: ranges - type: - list: - elementType: - namedType: io.k8s.api.policy.v1beta1.IDRange - elementRelationship: atomic - - name: rule - type: - scalar: string - name: io.k8s.api.rbac.v1.AggregationRule map: fields: @@ -11923,7 +11365,7 @@ var schemaYAML = typed.YAMLObject(`types: list: elementType: scalar: string - elementRelationship: associative + elementRelationship: atomic - name: selectedNode type: scalar: string @@ -12002,7 +11444,7 @@ var schemaYAML = typed.YAMLObject(`types: list: elementType: scalar: string - elementRelationship: associative + elementRelationship: atomic - name: io.k8s.api.resource.v1alpha2.ResourceClaimSpec map: fields: diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/meta/v1/unstructured.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/meta/v1/unstructured.go index 8a58d9e87055..a206bd326aeb 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/meta/v1/unstructured.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/meta/v1/unstructured.go @@ -125,7 +125,7 @@ func (e *extractor) extractUnstructured(object *unstructured.Unstructured, field return nil, fmt.Errorf("failed to fetch the objectType: %v", err) } result := &unstructured.Unstructured{} - err = managedfields.ExtractInto(object, *objectType, fieldManager, result, subresource) + err = managedfields.ExtractInto(object, *objectType, fieldManager, result, subresource) //nolint:forbidigo if err != nil { return nil, fmt.Errorf("failed calling ExtractInto for unstructured: %v", err) } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedcsidriver.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedcsidriver.go deleted file mode 100644 index 27b49bf15384..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedcsidriver.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// AllowedCSIDriverApplyConfiguration represents an declarative configuration of the AllowedCSIDriver type for use -// with apply. -type AllowedCSIDriverApplyConfiguration struct { - Name *string `json:"name,omitempty"` -} - -// AllowedCSIDriverApplyConfiguration constructs an declarative configuration of the AllowedCSIDriver type for use with -// apply. -func AllowedCSIDriver() *AllowedCSIDriverApplyConfiguration { - return &AllowedCSIDriverApplyConfiguration{} -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *AllowedCSIDriverApplyConfiguration) WithName(value string) *AllowedCSIDriverApplyConfiguration { - b.Name = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedflexvolume.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedflexvolume.go deleted file mode 100644 index 30c3724cfee9..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedflexvolume.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// AllowedFlexVolumeApplyConfiguration represents an declarative configuration of the AllowedFlexVolume type for use -// with apply. -type AllowedFlexVolumeApplyConfiguration struct { - Driver *string `json:"driver,omitempty"` -} - -// AllowedFlexVolumeApplyConfiguration constructs an declarative configuration of the AllowedFlexVolume type for use with -// apply. -func AllowedFlexVolume() *AllowedFlexVolumeApplyConfiguration { - return &AllowedFlexVolumeApplyConfiguration{} -} - -// WithDriver sets the Driver field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Driver field is set to the value of the last call. -func (b *AllowedFlexVolumeApplyConfiguration) WithDriver(value string) *AllowedFlexVolumeApplyConfiguration { - b.Driver = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedhostpath.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedhostpath.go deleted file mode 100644 index 493815d8d4a5..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/allowedhostpath.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// AllowedHostPathApplyConfiguration represents an declarative configuration of the AllowedHostPath type for use -// with apply. -type AllowedHostPathApplyConfiguration struct { - PathPrefix *string `json:"pathPrefix,omitempty"` - ReadOnly *bool `json:"readOnly,omitempty"` -} - -// AllowedHostPathApplyConfiguration constructs an declarative configuration of the AllowedHostPath type for use with -// apply. -func AllowedHostPath() *AllowedHostPathApplyConfiguration { - return &AllowedHostPathApplyConfiguration{} -} - -// WithPathPrefix sets the PathPrefix field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the PathPrefix field is set to the value of the last call. -func (b *AllowedHostPathApplyConfiguration) WithPathPrefix(value string) *AllowedHostPathApplyConfiguration { - b.PathPrefix = &value - return b -} - -// WithReadOnly sets the ReadOnly field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ReadOnly field is set to the value of the last call. -func (b *AllowedHostPathApplyConfiguration) WithReadOnly(value bool) *AllowedHostPathApplyConfiguration { - b.ReadOnly = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/fsgroupstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/fsgroupstrategyoptions.go deleted file mode 100644 index 06803b439dfd..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/fsgroupstrategyoptions.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" -) - -// FSGroupStrategyOptionsApplyConfiguration represents an declarative configuration of the FSGroupStrategyOptions type for use -// with apply. -type FSGroupStrategyOptionsApplyConfiguration struct { - Rule *v1beta1.FSGroupStrategyType `json:"rule,omitempty"` - Ranges []IDRangeApplyConfiguration `json:"ranges,omitempty"` -} - -// FSGroupStrategyOptionsApplyConfiguration constructs an declarative configuration of the FSGroupStrategyOptions type for use with -// apply. -func FSGroupStrategyOptions() *FSGroupStrategyOptionsApplyConfiguration { - return &FSGroupStrategyOptionsApplyConfiguration{} -} - -// WithRule sets the Rule field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Rule field is set to the value of the last call. -func (b *FSGroupStrategyOptionsApplyConfiguration) WithRule(value v1beta1.FSGroupStrategyType) *FSGroupStrategyOptionsApplyConfiguration { - b.Rule = &value - return b -} - -// WithRanges adds the given value to the Ranges field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Ranges field. -func (b *FSGroupStrategyOptionsApplyConfiguration) WithRanges(values ...*IDRangeApplyConfiguration) *FSGroupStrategyOptionsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithRanges") - } - b.Ranges = append(b.Ranges, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/hostportrange.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/hostportrange.go deleted file mode 100644 index 7c796881393f..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/hostportrange.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// HostPortRangeApplyConfiguration represents an declarative configuration of the HostPortRange type for use -// with apply. -type HostPortRangeApplyConfiguration struct { - Min *int32 `json:"min,omitempty"` - Max *int32 `json:"max,omitempty"` -} - -// HostPortRangeApplyConfiguration constructs an declarative configuration of the HostPortRange type for use with -// apply. -func HostPortRange() *HostPortRangeApplyConfiguration { - return &HostPortRangeApplyConfiguration{} -} - -// WithMin sets the Min field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Min field is set to the value of the last call. -func (b *HostPortRangeApplyConfiguration) WithMin(value int32) *HostPortRangeApplyConfiguration { - b.Min = &value - return b -} - -// WithMax sets the Max field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Max field is set to the value of the last call. -func (b *HostPortRangeApplyConfiguration) WithMax(value int32) *HostPortRangeApplyConfiguration { - b.Max = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/idrange.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/idrange.go deleted file mode 100644 index af46f76581ad..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/idrange.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// IDRangeApplyConfiguration represents an declarative configuration of the IDRange type for use -// with apply. -type IDRangeApplyConfiguration struct { - Min *int64 `json:"min,omitempty"` - Max *int64 `json:"max,omitempty"` -} - -// IDRangeApplyConfiguration constructs an declarative configuration of the IDRange type for use with -// apply. -func IDRange() *IDRangeApplyConfiguration { - return &IDRangeApplyConfiguration{} -} - -// WithMin sets the Min field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Min field is set to the value of the last call. -func (b *IDRangeApplyConfiguration) WithMin(value int64) *IDRangeApplyConfiguration { - b.Min = &value - return b -} - -// WithMax sets the Max field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Max field is set to the value of the last call. -func (b *IDRangeApplyConfiguration) WithMax(value int64) *IDRangeApplyConfiguration { - b.Max = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicy.go deleted file mode 100644 index 46cfc4de1ec0..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicy.go +++ /dev/null @@ -1,247 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - policyv1beta1 "k8s.io/api/policy/v1beta1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - managedfields "k8s.io/apimachinery/pkg/util/managedfields" - internal "k8s.io/client-go/applyconfigurations/internal" - v1 "k8s.io/client-go/applyconfigurations/meta/v1" -) - -// PodSecurityPolicyApplyConfiguration represents an declarative configuration of the PodSecurityPolicy type for use -// with apply. -type PodSecurityPolicyApplyConfiguration struct { - v1.TypeMetaApplyConfiguration `json:",inline"` - *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` - Spec *PodSecurityPolicySpecApplyConfiguration `json:"spec,omitempty"` -} - -// PodSecurityPolicy constructs an declarative configuration of the PodSecurityPolicy type for use with -// apply. -func PodSecurityPolicy(name string) *PodSecurityPolicyApplyConfiguration { - b := &PodSecurityPolicyApplyConfiguration{} - b.WithName(name) - b.WithKind("PodSecurityPolicy") - b.WithAPIVersion("policy/v1beta1") - return b -} - -// ExtractPodSecurityPolicy extracts the applied configuration owned by fieldManager from -// podSecurityPolicy. If no managedFields are found in podSecurityPolicy for fieldManager, a -// PodSecurityPolicyApplyConfiguration is returned with only the Name, Namespace (if applicable), -// APIVersion and Kind populated. It is possible that no managed fields were found for because other -// field managers have taken ownership of all the fields previously owned by fieldManager, or because -// the fieldManager never owned fields any fields. -// podSecurityPolicy must be a unmodified PodSecurityPolicy API object that was retrieved from the Kubernetes API. -// ExtractPodSecurityPolicy provides a way to perform a extract/modify-in-place/apply workflow. -// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously -// applied if another fieldManager has updated or force applied any of the previously applied fields. -// Experimental! -func ExtractPodSecurityPolicy(podSecurityPolicy *policyv1beta1.PodSecurityPolicy, fieldManager string) (*PodSecurityPolicyApplyConfiguration, error) { - return extractPodSecurityPolicy(podSecurityPolicy, fieldManager, "") -} - -// ExtractPodSecurityPolicyStatus is the same as ExtractPodSecurityPolicy except -// that it extracts the status subresource applied configuration. -// Experimental! -func ExtractPodSecurityPolicyStatus(podSecurityPolicy *policyv1beta1.PodSecurityPolicy, fieldManager string) (*PodSecurityPolicyApplyConfiguration, error) { - return extractPodSecurityPolicy(podSecurityPolicy, fieldManager, "status") -} - -func extractPodSecurityPolicy(podSecurityPolicy *policyv1beta1.PodSecurityPolicy, fieldManager string, subresource string) (*PodSecurityPolicyApplyConfiguration, error) { - b := &PodSecurityPolicyApplyConfiguration{} - err := managedfields.ExtractInto(podSecurityPolicy, internal.Parser().Type("io.k8s.api.policy.v1beta1.PodSecurityPolicy"), fieldManager, b, subresource) - if err != nil { - return nil, err - } - b.WithName(podSecurityPolicy.Name) - - b.WithKind("PodSecurityPolicy") - b.WithAPIVersion("policy/v1beta1") - return b, nil -} - -// WithKind sets the Kind field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Kind field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithKind(value string) *PodSecurityPolicyApplyConfiguration { - b.Kind = &value - return b -} - -// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the APIVersion field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithAPIVersion(value string) *PodSecurityPolicyApplyConfiguration { - b.APIVersion = &value - return b -} - -// WithName sets the Name field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Name field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithName(value string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Name = &value - return b -} - -// WithGenerateName sets the GenerateName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the GenerateName field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithGenerateName(value string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.GenerateName = &value - return b -} - -// WithNamespace sets the Namespace field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Namespace field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithNamespace(value string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Namespace = &value - return b -} - -// WithUID sets the UID field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the UID field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithUID(value types.UID) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.UID = &value - return b -} - -// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ResourceVersion field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithResourceVersion(value string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.ResourceVersion = &value - return b -} - -// WithGeneration sets the Generation field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Generation field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithGeneration(value int64) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.Generation = &value - return b -} - -// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the CreationTimestamp field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithCreationTimestamp(value metav1.Time) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.CreationTimestamp = &value - return b -} - -// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionTimestamp field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionTimestamp = &value - return b -} - -// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - b.DeletionGracePeriodSeconds = &value - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *PodSecurityPolicyApplyConfiguration) WithLabels(entries map[string]string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *PodSecurityPolicyApplyConfiguration) WithAnnotations(entries map[string]string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the OwnerReferences field. -func (b *PodSecurityPolicyApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - if values[i] == nil { - panic("nil value passed to WithOwnerReferences") - } - b.OwnerReferences = append(b.OwnerReferences, *values[i]) - } - return b -} - -// WithFinalizers adds the given value to the Finalizers field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Finalizers field. -func (b *PodSecurityPolicyApplyConfiguration) WithFinalizers(values ...string) *PodSecurityPolicyApplyConfiguration { - b.ensureObjectMetaApplyConfigurationExists() - for i := range values { - b.Finalizers = append(b.Finalizers, values[i]) - } - return b -} - -func (b *PodSecurityPolicyApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { - if b.ObjectMetaApplyConfiguration == nil { - b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} - } -} - -// WithSpec sets the Spec field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Spec field is set to the value of the last call. -func (b *PodSecurityPolicyApplyConfiguration) WithSpec(value *PodSecurityPolicySpecApplyConfiguration) *PodSecurityPolicyApplyConfiguration { - b.Spec = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicyspec.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicyspec.go deleted file mode 100644 index bf951cf56b65..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/podsecuritypolicyspec.go +++ /dev/null @@ -1,285 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1 "k8s.io/api/core/v1" - v1beta1 "k8s.io/api/policy/v1beta1" -) - -// PodSecurityPolicySpecApplyConfiguration represents an declarative configuration of the PodSecurityPolicySpec type for use -// with apply. -type PodSecurityPolicySpecApplyConfiguration struct { - Privileged *bool `json:"privileged,omitempty"` - DefaultAddCapabilities []v1.Capability `json:"defaultAddCapabilities,omitempty"` - RequiredDropCapabilities []v1.Capability `json:"requiredDropCapabilities,omitempty"` - AllowedCapabilities []v1.Capability `json:"allowedCapabilities,omitempty"` - Volumes []v1beta1.FSType `json:"volumes,omitempty"` - HostNetwork *bool `json:"hostNetwork,omitempty"` - HostPorts []HostPortRangeApplyConfiguration `json:"hostPorts,omitempty"` - HostPID *bool `json:"hostPID,omitempty"` - HostIPC *bool `json:"hostIPC,omitempty"` - SELinux *SELinuxStrategyOptionsApplyConfiguration `json:"seLinux,omitempty"` - RunAsUser *RunAsUserStrategyOptionsApplyConfiguration `json:"runAsUser,omitempty"` - RunAsGroup *RunAsGroupStrategyOptionsApplyConfiguration `json:"runAsGroup,omitempty"` - SupplementalGroups *SupplementalGroupsStrategyOptionsApplyConfiguration `json:"supplementalGroups,omitempty"` - FSGroup *FSGroupStrategyOptionsApplyConfiguration `json:"fsGroup,omitempty"` - ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty"` - DefaultAllowPrivilegeEscalation *bool `json:"defaultAllowPrivilegeEscalation,omitempty"` - AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty"` - AllowedHostPaths []AllowedHostPathApplyConfiguration `json:"allowedHostPaths,omitempty"` - AllowedFlexVolumes []AllowedFlexVolumeApplyConfiguration `json:"allowedFlexVolumes,omitempty"` - AllowedCSIDrivers []AllowedCSIDriverApplyConfiguration `json:"allowedCSIDrivers,omitempty"` - AllowedUnsafeSysctls []string `json:"allowedUnsafeSysctls,omitempty"` - ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty"` - AllowedProcMountTypes []v1.ProcMountType `json:"allowedProcMountTypes,omitempty"` - RuntimeClass *RuntimeClassStrategyOptionsApplyConfiguration `json:"runtimeClass,omitempty"` -} - -// PodSecurityPolicySpecApplyConfiguration constructs an declarative configuration of the PodSecurityPolicySpec type for use with -// apply. -func PodSecurityPolicySpec() *PodSecurityPolicySpecApplyConfiguration { - return &PodSecurityPolicySpecApplyConfiguration{} -} - -// WithPrivileged sets the Privileged field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Privileged field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithPrivileged(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.Privileged = &value - return b -} - -// WithDefaultAddCapabilities adds the given value to the DefaultAddCapabilities field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the DefaultAddCapabilities field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithDefaultAddCapabilities(values ...v1.Capability) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.DefaultAddCapabilities = append(b.DefaultAddCapabilities, values[i]) - } - return b -} - -// WithRequiredDropCapabilities adds the given value to the RequiredDropCapabilities field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the RequiredDropCapabilities field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithRequiredDropCapabilities(values ...v1.Capability) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.RequiredDropCapabilities = append(b.RequiredDropCapabilities, values[i]) - } - return b -} - -// WithAllowedCapabilities adds the given value to the AllowedCapabilities field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedCapabilities field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedCapabilities(values ...v1.Capability) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.AllowedCapabilities = append(b.AllowedCapabilities, values[i]) - } - return b -} - -// WithVolumes adds the given value to the Volumes field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Volumes field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithVolumes(values ...v1beta1.FSType) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.Volumes = append(b.Volumes, values[i]) - } - return b -} - -// WithHostNetwork sets the HostNetwork field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the HostNetwork field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithHostNetwork(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.HostNetwork = &value - return b -} - -// WithHostPorts adds the given value to the HostPorts field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the HostPorts field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithHostPorts(values ...*HostPortRangeApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithHostPorts") - } - b.HostPorts = append(b.HostPorts, *values[i]) - } - return b -} - -// WithHostPID sets the HostPID field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the HostPID field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithHostPID(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.HostPID = &value - return b -} - -// WithHostIPC sets the HostIPC field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the HostIPC field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithHostIPC(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.HostIPC = &value - return b -} - -// WithSELinux sets the SELinux field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SELinux field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithSELinux(value *SELinuxStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.SELinux = value - return b -} - -// WithRunAsUser sets the RunAsUser field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the RunAsUser field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithRunAsUser(value *RunAsUserStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.RunAsUser = value - return b -} - -// WithRunAsGroup sets the RunAsGroup field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the RunAsGroup field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithRunAsGroup(value *RunAsGroupStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.RunAsGroup = value - return b -} - -// WithSupplementalGroups sets the SupplementalGroups field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SupplementalGroups field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithSupplementalGroups(value *SupplementalGroupsStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.SupplementalGroups = value - return b -} - -// WithFSGroup sets the FSGroup field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the FSGroup field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithFSGroup(value *FSGroupStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.FSGroup = value - return b -} - -// WithReadOnlyRootFilesystem sets the ReadOnlyRootFilesystem field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ReadOnlyRootFilesystem field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithReadOnlyRootFilesystem(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.ReadOnlyRootFilesystem = &value - return b -} - -// WithDefaultAllowPrivilegeEscalation sets the DefaultAllowPrivilegeEscalation field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DefaultAllowPrivilegeEscalation field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithDefaultAllowPrivilegeEscalation(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.DefaultAllowPrivilegeEscalation = &value - return b -} - -// WithAllowPrivilegeEscalation sets the AllowPrivilegeEscalation field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the AllowPrivilegeEscalation field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowPrivilegeEscalation(value bool) *PodSecurityPolicySpecApplyConfiguration { - b.AllowPrivilegeEscalation = &value - return b -} - -// WithAllowedHostPaths adds the given value to the AllowedHostPaths field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedHostPaths field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedHostPaths(values ...*AllowedHostPathApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithAllowedHostPaths") - } - b.AllowedHostPaths = append(b.AllowedHostPaths, *values[i]) - } - return b -} - -// WithAllowedFlexVolumes adds the given value to the AllowedFlexVolumes field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedFlexVolumes field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedFlexVolumes(values ...*AllowedFlexVolumeApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithAllowedFlexVolumes") - } - b.AllowedFlexVolumes = append(b.AllowedFlexVolumes, *values[i]) - } - return b -} - -// WithAllowedCSIDrivers adds the given value to the AllowedCSIDrivers field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedCSIDrivers field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedCSIDrivers(values ...*AllowedCSIDriverApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithAllowedCSIDrivers") - } - b.AllowedCSIDrivers = append(b.AllowedCSIDrivers, *values[i]) - } - return b -} - -// WithAllowedUnsafeSysctls adds the given value to the AllowedUnsafeSysctls field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedUnsafeSysctls field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedUnsafeSysctls(values ...string) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.AllowedUnsafeSysctls = append(b.AllowedUnsafeSysctls, values[i]) - } - return b -} - -// WithForbiddenSysctls adds the given value to the ForbiddenSysctls field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the ForbiddenSysctls field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithForbiddenSysctls(values ...string) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.ForbiddenSysctls = append(b.ForbiddenSysctls, values[i]) - } - return b -} - -// WithAllowedProcMountTypes adds the given value to the AllowedProcMountTypes field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedProcMountTypes field. -func (b *PodSecurityPolicySpecApplyConfiguration) WithAllowedProcMountTypes(values ...v1.ProcMountType) *PodSecurityPolicySpecApplyConfiguration { - for i := range values { - b.AllowedProcMountTypes = append(b.AllowedProcMountTypes, values[i]) - } - return b -} - -// WithRuntimeClass sets the RuntimeClass field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the RuntimeClass field is set to the value of the last call. -func (b *PodSecurityPolicySpecApplyConfiguration) WithRuntimeClass(value *RuntimeClassStrategyOptionsApplyConfiguration) *PodSecurityPolicySpecApplyConfiguration { - b.RuntimeClass = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasgroupstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasgroupstrategyoptions.go deleted file mode 100644 index fcfcfbe6b924..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasgroupstrategyoptions.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" -) - -// RunAsGroupStrategyOptionsApplyConfiguration represents an declarative configuration of the RunAsGroupStrategyOptions type for use -// with apply. -type RunAsGroupStrategyOptionsApplyConfiguration struct { - Rule *v1beta1.RunAsGroupStrategy `json:"rule,omitempty"` - Ranges []IDRangeApplyConfiguration `json:"ranges,omitempty"` -} - -// RunAsGroupStrategyOptionsApplyConfiguration constructs an declarative configuration of the RunAsGroupStrategyOptions type for use with -// apply. -func RunAsGroupStrategyOptions() *RunAsGroupStrategyOptionsApplyConfiguration { - return &RunAsGroupStrategyOptionsApplyConfiguration{} -} - -// WithRule sets the Rule field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Rule field is set to the value of the last call. -func (b *RunAsGroupStrategyOptionsApplyConfiguration) WithRule(value v1beta1.RunAsGroupStrategy) *RunAsGroupStrategyOptionsApplyConfiguration { - b.Rule = &value - return b -} - -// WithRanges adds the given value to the Ranges field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Ranges field. -func (b *RunAsGroupStrategyOptionsApplyConfiguration) WithRanges(values ...*IDRangeApplyConfiguration) *RunAsGroupStrategyOptionsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithRanges") - } - b.Ranges = append(b.Ranges, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasuserstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasuserstrategyoptions.go deleted file mode 100644 index a6d6ee58e372..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runasuserstrategyoptions.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" -) - -// RunAsUserStrategyOptionsApplyConfiguration represents an declarative configuration of the RunAsUserStrategyOptions type for use -// with apply. -type RunAsUserStrategyOptionsApplyConfiguration struct { - Rule *v1beta1.RunAsUserStrategy `json:"rule,omitempty"` - Ranges []IDRangeApplyConfiguration `json:"ranges,omitempty"` -} - -// RunAsUserStrategyOptionsApplyConfiguration constructs an declarative configuration of the RunAsUserStrategyOptions type for use with -// apply. -func RunAsUserStrategyOptions() *RunAsUserStrategyOptionsApplyConfiguration { - return &RunAsUserStrategyOptionsApplyConfiguration{} -} - -// WithRule sets the Rule field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Rule field is set to the value of the last call. -func (b *RunAsUserStrategyOptionsApplyConfiguration) WithRule(value v1beta1.RunAsUserStrategy) *RunAsUserStrategyOptionsApplyConfiguration { - b.Rule = &value - return b -} - -// WithRanges adds the given value to the Ranges field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Ranges field. -func (b *RunAsUserStrategyOptionsApplyConfiguration) WithRanges(values ...*IDRangeApplyConfiguration) *RunAsUserStrategyOptionsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithRanges") - } - b.Ranges = append(b.Ranges, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runtimeclassstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runtimeclassstrategyoptions.go deleted file mode 100644 index c19a7ce61756..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/runtimeclassstrategyoptions.go +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -// RuntimeClassStrategyOptionsApplyConfiguration represents an declarative configuration of the RuntimeClassStrategyOptions type for use -// with apply. -type RuntimeClassStrategyOptionsApplyConfiguration struct { - AllowedRuntimeClassNames []string `json:"allowedRuntimeClassNames,omitempty"` - DefaultRuntimeClassName *string `json:"defaultRuntimeClassName,omitempty"` -} - -// RuntimeClassStrategyOptionsApplyConfiguration constructs an declarative configuration of the RuntimeClassStrategyOptions type for use with -// apply. -func RuntimeClassStrategyOptions() *RuntimeClassStrategyOptionsApplyConfiguration { - return &RuntimeClassStrategyOptionsApplyConfiguration{} -} - -// WithAllowedRuntimeClassNames adds the given value to the AllowedRuntimeClassNames field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the AllowedRuntimeClassNames field. -func (b *RuntimeClassStrategyOptionsApplyConfiguration) WithAllowedRuntimeClassNames(values ...string) *RuntimeClassStrategyOptionsApplyConfiguration { - for i := range values { - b.AllowedRuntimeClassNames = append(b.AllowedRuntimeClassNames, values[i]) - } - return b -} - -// WithDefaultRuntimeClassName sets the DefaultRuntimeClassName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DefaultRuntimeClassName field is set to the value of the last call. -func (b *RuntimeClassStrategyOptionsApplyConfiguration) WithDefaultRuntimeClassName(value string) *RuntimeClassStrategyOptionsApplyConfiguration { - b.DefaultRuntimeClassName = &value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/selinuxstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/selinuxstrategyoptions.go deleted file mode 100644 index de7ede618e9b..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/selinuxstrategyoptions.go +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" - v1 "k8s.io/client-go/applyconfigurations/core/v1" -) - -// SELinuxStrategyOptionsApplyConfiguration represents an declarative configuration of the SELinuxStrategyOptions type for use -// with apply. -type SELinuxStrategyOptionsApplyConfiguration struct { - Rule *v1beta1.SELinuxStrategy `json:"rule,omitempty"` - SELinuxOptions *v1.SELinuxOptionsApplyConfiguration `json:"seLinuxOptions,omitempty"` -} - -// SELinuxStrategyOptionsApplyConfiguration constructs an declarative configuration of the SELinuxStrategyOptions type for use with -// apply. -func SELinuxStrategyOptions() *SELinuxStrategyOptionsApplyConfiguration { - return &SELinuxStrategyOptionsApplyConfiguration{} -} - -// WithRule sets the Rule field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Rule field is set to the value of the last call. -func (b *SELinuxStrategyOptionsApplyConfiguration) WithRule(value v1beta1.SELinuxStrategy) *SELinuxStrategyOptionsApplyConfiguration { - b.Rule = &value - return b -} - -// WithSELinuxOptions sets the SELinuxOptions field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SELinuxOptions field is set to the value of the last call. -func (b *SELinuxStrategyOptionsApplyConfiguration) WithSELinuxOptions(value *v1.SELinuxOptionsApplyConfiguration) *SELinuxStrategyOptionsApplyConfiguration { - b.SELinuxOptions = value - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/supplementalgroupsstrategyoptions.go b/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/supplementalgroupsstrategyoptions.go deleted file mode 100644 index 9e4a9bb2ca3b..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/applyconfigurations/policy/v1beta1/supplementalgroupsstrategyoptions.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" -) - -// SupplementalGroupsStrategyOptionsApplyConfiguration represents an declarative configuration of the SupplementalGroupsStrategyOptions type for use -// with apply. -type SupplementalGroupsStrategyOptionsApplyConfiguration struct { - Rule *v1beta1.SupplementalGroupsStrategyType `json:"rule,omitempty"` - Ranges []IDRangeApplyConfiguration `json:"ranges,omitempty"` -} - -// SupplementalGroupsStrategyOptionsApplyConfiguration constructs an declarative configuration of the SupplementalGroupsStrategyOptions type for use with -// apply. -func SupplementalGroupsStrategyOptions() *SupplementalGroupsStrategyOptionsApplyConfiguration { - return &SupplementalGroupsStrategyOptionsApplyConfiguration{} -} - -// WithRule sets the Rule field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Rule field is set to the value of the last call. -func (b *SupplementalGroupsStrategyOptionsApplyConfiguration) WithRule(value v1beta1.SupplementalGroupsStrategyType) *SupplementalGroupsStrategyOptionsApplyConfiguration { - b.Rule = &value - return b -} - -// WithRanges adds the given value to the Ranges field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Ranges field. -func (b *SupplementalGroupsStrategyOptionsApplyConfiguration) WithRanges(values ...*IDRangeApplyConfiguration) *SupplementalGroupsStrategyOptionsApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithRanges") - } - b.Ranges = append(b.Ranges, *values[i]) - } - return b -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/discovery/discovery_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/discovery/discovery_client.go index a4f083a1ac3b..de10158c41d5 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/discovery/discovery_client.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/discovery/discovery_client.go @@ -19,6 +19,7 @@ package discovery import ( "context" "encoding/json" + goerrors "errors" "fmt" "mime" "net/http" @@ -67,6 +68,9 @@ const ( acceptDiscoveryFormats = AcceptV2Beta1 + "," + AcceptV1 ) +// Aggregated discovery content-type GVK. +var v2Beta1GVK = schema.GroupVersionKind{Group: "apidiscovery.k8s.io", Version: "v2beta1", Kind: "APIGroupDiscoveryList"} + // DiscoveryInterface holds the methods that discover server-supported API groups, // versions and resources. type DiscoveryInterface interface { @@ -260,16 +264,15 @@ func (d *DiscoveryClient) downloadLegacy() ( } var resourcesByGV map[schema.GroupVersion]*metav1.APIResourceList - // Switch on content-type server responded with: aggregated or unaggregated. - switch { - case isV2Beta1ContentType(responseContentType): + // Based on the content-type server responded with: aggregated or unaggregated. + if isGVK, _ := ContentTypeIsGVK(responseContentType, v2Beta1GVK); isGVK { var aggregatedDiscovery apidiscovery.APIGroupDiscoveryList err = json.Unmarshal(body, &aggregatedDiscovery) if err != nil { return nil, nil, nil, err } apiGroupList, resourcesByGV, failedGVs = SplitGroupsAndResources(aggregatedDiscovery) - default: + } else { // Default is unaggregated discovery v1. var v metav1.APIVersions err = json.Unmarshal(body, &v) @@ -313,16 +316,15 @@ func (d *DiscoveryClient) downloadAPIs() ( apiGroupList := &metav1.APIGroupList{} failedGVs := map[schema.GroupVersion]error{} var resourcesByGV map[schema.GroupVersion]*metav1.APIResourceList - // Switch on content-type server responded with: aggregated or unaggregated. - switch { - case isV2Beta1ContentType(responseContentType): + // Based on the content-type server responded with: aggregated or unaggregated. + if isGVK, _ := ContentTypeIsGVK(responseContentType, v2Beta1GVK); isGVK { var aggregatedDiscovery apidiscovery.APIGroupDiscoveryList err = json.Unmarshal(body, &aggregatedDiscovery) if err != nil { return nil, nil, nil, err } apiGroupList, resourcesByGV, failedGVs = SplitGroupsAndResources(aggregatedDiscovery) - default: + } else { // Default is unaggregated discovery v1. err = json.Unmarshal(body, apiGroupList) if err != nil { @@ -333,26 +335,29 @@ func (d *DiscoveryClient) downloadAPIs() ( return apiGroupList, resourcesByGV, failedGVs, nil } -// isV2Beta1ContentType checks of the content-type string is both -// "application/json" and contains the v2beta1 content-type params. +// ContentTypeIsGVK checks of the content-type string is both +// "application/json" and matches the provided GVK. An error +// is returned if the content type string is malformed. // NOTE: This function is resilient to the ordering of the // content-type parameters, as well as parameters added by // intermediaries such as proxies or gateways. Examples: // -// "application/json; g=apidiscovery.k8s.io;v=v2beta1;as=APIGroupDiscoveryList" = true -// "application/json; as=APIGroupDiscoveryList;v=v2beta1;g=apidiscovery.k8s.io" = true -// "application/json; as=APIGroupDiscoveryList;v=v2beta1;g=apidiscovery.k8s.io;charset=utf-8" = true -// "application/json" = false -// "application/json; charset=UTF-8" = false -func isV2Beta1ContentType(contentType string) bool { +// ("application/json; g=apidiscovery.k8s.io;v=v2beta1;as=APIGroupDiscoveryList", {apidiscovery.k8s.io, v2beta1, APIGroupDiscoveryList}) = (true, nil) +// ("application/json; as=APIGroupDiscoveryList;v=v2beta1;g=apidiscovery.k8s.io", {apidiscovery.k8s.io, v2beta1, APIGroupDiscoveryList}) = (true, nil) +// ("application/json; as=APIGroupDiscoveryList;v=v2beta1;g=apidiscovery.k8s.io;charset=utf-8", {apidiscovery.k8s.io, v2beta1, APIGroupDiscoveryList}) = (true, nil) +// ("application/json", any GVK) = (false, nil) +// ("application/json; charset=UTF-8", any GVK) = (false, nil) +// ("malformed content type string", any GVK) = (false, error) +func ContentTypeIsGVK(contentType string, gvk schema.GroupVersionKind) (bool, error) { base, params, err := mime.ParseMediaType(contentType) if err != nil { - return false + return false, err } - return runtime.ContentTypeJSON == base && - params["g"] == "apidiscovery.k8s.io" && - params["v"] == "v2beta1" && - params["as"] == "APIGroupDiscoveryList" + gvkMatch := runtime.ContentTypeJSON == base && + params["g"] == gvk.Group && + params["v"] == gvk.Version && + params["as"] == gvk.Kind + return gvkMatch, nil } // ServerGroups returns the supported groups, with information like supported versions and the @@ -422,6 +427,16 @@ func IsGroupDiscoveryFailedError(err error) bool { return err != nil && ok } +// GroupDiscoveryFailedErrorGroups returns true if the error is an ErrGroupDiscoveryFailed error, +// along with the map of group versions that failed discovery. +func GroupDiscoveryFailedErrorGroups(err error) (map[schema.GroupVersion]error, bool) { + var groupDiscoveryError *ErrGroupDiscoveryFailed + if err != nil && goerrors.As(err, &groupDiscoveryError) { + return groupDiscoveryError.Groups, true + } + return nil, false +} + func ServerGroupsAndResources(d DiscoveryInterface) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { var sgs *metav1.APIGroupList var resources []*metav1.APIResourceList @@ -633,16 +648,7 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { data, err := d.restClient.Get().AbsPath("/openapi/v2").SetHeader("Accept", openAPIV2mimePb).Do(context.TODO()).Raw() if err != nil { - if errors.IsForbidden(err) || errors.IsNotFound(err) || errors.IsNotAcceptable(err) { - // single endpoint not found/registered in old server, try to fetch old endpoint - // TODO: remove this when kubectl/client-go don't work with 1.9 server - data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do(context.TODO()).Raw() - if err != nil { - return nil, err - } - } else { - return nil, err - } + return nil, err } document := &openapi_v2.Document{} err = proto.Unmarshal(data, document) diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/factory.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/factory.go index 7dd0ae6353cc..9fc86441a192 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/factory.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/factory.go @@ -60,6 +60,7 @@ type sharedInformerFactory struct { lock sync.Mutex defaultResync time.Duration customResync map[reflect.Type]time.Duration + transform cache.TransformFunc informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -98,6 +99,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform cache.TransformFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -202,6 +211,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/interface.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/interface.go index 1d3ca09efc96..c24692dc9e79 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/interface.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/interface.go @@ -19,7 +19,6 @@ limitations under the License. package flowcontrol import ( - v1alpha1 "k8s.io/client-go/informers/flowcontrol/v1alpha1" v1beta1 "k8s.io/client-go/informers/flowcontrol/v1beta1" v1beta2 "k8s.io/client-go/informers/flowcontrol/v1beta2" v1beta3 "k8s.io/client-go/informers/flowcontrol/v1beta3" @@ -28,8 +27,6 @@ import ( // Interface provides access to each of this group's versions. type Interface interface { - // V1alpha1 provides access to shared informers for resources in V1alpha1. - V1alpha1() v1alpha1.Interface // V1beta1 provides access to shared informers for resources in V1beta1. V1beta1() v1beta1.Interface // V1beta2 provides access to shared informers for resources in V1beta2. @@ -49,11 +46,6 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} } -// V1alpha1 returns a new v1alpha1.Interface. -func (g *group) V1alpha1() v1alpha1.Interface { - return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions) -} - // V1beta1 returns a new v1beta1.Interface. func (g *group) V1beta1() v1beta1.Interface { return v1beta1.New(g.factory, g.namespace, g.tweakListOptions) diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go deleted file mode 100644 index 9a4a904481d8..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/flowschema.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - time "time" - - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" - kubernetes "k8s.io/client-go/kubernetes" - v1alpha1 "k8s.io/client-go/listers/flowcontrol/v1alpha1" - cache "k8s.io/client-go/tools/cache" -) - -// FlowSchemaInformer provides access to a shared informer and lister for -// FlowSchemas. -type FlowSchemaInformer interface { - Informer() cache.SharedIndexInformer - Lister() v1alpha1.FlowSchemaLister -} - -type flowSchemaInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// NewFlowSchemaInformer constructs a new informer for FlowSchema type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredFlowSchemaInformer(client, resyncPeriod, indexers, nil) -} - -// NewFilteredFlowSchemaInformer constructs a new informer for FlowSchema type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredFlowSchemaInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.FlowcontrolV1alpha1().FlowSchemas().List(context.TODO(), options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.FlowcontrolV1alpha1().FlowSchemas().Watch(context.TODO(), options) - }, - }, - &flowcontrolv1alpha1.FlowSchema{}, - resyncPeriod, - indexers, - ) -} - -func (f *flowSchemaInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredFlowSchemaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *flowSchemaInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&flowcontrolv1alpha1.FlowSchema{}, f.defaultInformer) -} - -func (f *flowSchemaInformer) Lister() v1alpha1.FlowSchemaLister { - return v1alpha1.NewFlowSchemaLister(f.Informer().GetIndexer()) -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go deleted file mode 100644 index 7097c0058bf2..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/interface.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" -) - -// Interface provides access to all the informers in this group version. -type Interface interface { - // FlowSchemas returns a FlowSchemaInformer. - FlowSchemas() FlowSchemaInformer - // PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer. - PriorityLevelConfigurations() PriorityLevelConfigurationInformer -} - -type version struct { - factory internalinterfaces.SharedInformerFactory - namespace string - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// New returns a new Interface. -func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { - return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} -} - -// FlowSchemas returns a FlowSchemaInformer. -func (v *version) FlowSchemas() FlowSchemaInformer { - return &flowSchemaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} -} - -// PriorityLevelConfigurations returns a PriorityLevelConfigurationInformer. -func (v *version) PriorityLevelConfigurations() PriorityLevelConfigurationInformer { - return &priorityLevelConfigurationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go deleted file mode 100644 index b81f5c9c36b6..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/flowcontrol/v1alpha1/prioritylevelconfiguration.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - time "time" - - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" - kubernetes "k8s.io/client-go/kubernetes" - v1alpha1 "k8s.io/client-go/listers/flowcontrol/v1alpha1" - cache "k8s.io/client-go/tools/cache" -) - -// PriorityLevelConfigurationInformer provides access to a shared informer and lister for -// PriorityLevelConfigurations. -type PriorityLevelConfigurationInformer interface { - Informer() cache.SharedIndexInformer - Lister() v1alpha1.PriorityLevelConfigurationLister -} - -type priorityLevelConfigurationInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// NewPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, indexers, nil) -} - -// NewFilteredPriorityLevelConfigurationInformer constructs a new informer for PriorityLevelConfiguration type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredPriorityLevelConfigurationInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.FlowcontrolV1alpha1().PriorityLevelConfigurations().List(context.TODO(), options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.FlowcontrolV1alpha1().PriorityLevelConfigurations().Watch(context.TODO(), options) - }, - }, - &flowcontrolv1alpha1.PriorityLevelConfiguration{}, - resyncPeriod, - indexers, - ) -} - -func (f *priorityLevelConfigurationInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredPriorityLevelConfigurationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *priorityLevelConfigurationInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&flowcontrolv1alpha1.PriorityLevelConfiguration{}, f.defaultInformer) -} - -func (f *priorityLevelConfigurationInformer) Lister() v1alpha1.PriorityLevelConfigurationLister { - return v1alpha1.NewPriorityLevelConfigurationLister(f.Informer().GetIndexer()) -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go index 5495239b29d5..8cff380f4a50 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/generic.go @@ -45,7 +45,6 @@ import ( eventsv1 "k8s.io/api/events/v1" eventsv1beta1 "k8s.io/api/events/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1" flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2" v1beta3 "k8s.io/api/flowcontrol/v1beta3" @@ -259,12 +258,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case extensionsv1beta1.SchemeGroupVersion.WithResource("replicasets"): return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().ReplicaSets().Informer()}, nil - // Group=flowcontrol.apiserver.k8s.io, Version=v1alpha1 - case flowcontrolv1alpha1.SchemeGroupVersion.WithResource("flowschemas"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1alpha1().FlowSchemas().Informer()}, nil - case flowcontrolv1alpha1.SchemeGroupVersion.WithResource("prioritylevelconfigurations"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1alpha1().PriorityLevelConfigurations().Informer()}, nil - // Group=flowcontrol.apiserver.k8s.io, Version=v1beta1 case flowcontrolv1beta1.SchemeGroupVersion.WithResource("flowschemas"): return &genericInformer{resource: resource.GroupResource(), informer: f.Flowcontrol().V1beta1().FlowSchemas().Informer()}, nil @@ -326,8 +319,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource // Group=policy, Version=v1beta1 case policyv1beta1.SchemeGroupVersion.WithResource("poddisruptionbudgets"): return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodDisruptionBudgets().Informer()}, nil - case policyv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Policy().V1beta1().PodSecurityPolicies().Informer()}, nil // Group=rbac.authorization.k8s.io, Version=v1 case rbacv1.SchemeGroupVersion.WithResource("clusterroles"): diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go index a6c1825d2782..055c8adc55d2 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/interface.go @@ -26,8 +26,6 @@ import ( type Interface interface { // PodDisruptionBudgets returns a PodDisruptionBudgetInformer. PodDisruptionBudgets() PodDisruptionBudgetInformer - // PodSecurityPolicies returns a PodSecurityPolicyInformer. - PodSecurityPolicies() PodSecurityPolicyInformer } type version struct { @@ -45,8 +43,3 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList func (v *version) PodDisruptionBudgets() PodDisruptionBudgetInformer { return &podDisruptionBudgetInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } - -// PodSecurityPolicies returns a PodSecurityPolicyInformer. -func (v *version) PodSecurityPolicies() PodSecurityPolicyInformer { - return &podSecurityPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go deleted file mode 100644 index b87d23434ef8..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/informers/policy/v1beta1/podsecuritypolicy.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1beta1 - -import ( - "context" - time "time" - - policyv1beta1 "k8s.io/api/policy/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" - kubernetes "k8s.io/client-go/kubernetes" - v1beta1 "k8s.io/client-go/listers/policy/v1beta1" - cache "k8s.io/client-go/tools/cache" -) - -// PodSecurityPolicyInformer provides access to a shared informer and lister for -// PodSecurityPolicies. -type PodSecurityPolicyInformer interface { - Informer() cache.SharedIndexInformer - Lister() v1beta1.PodSecurityPolicyLister -} - -type podSecurityPolicyInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc -} - -// NewPodSecurityPolicyInformer constructs a new informer for PodSecurityPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewPodSecurityPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredPodSecurityPolicyInformer(client, resyncPeriod, indexers, nil) -} - -// NewFilteredPodSecurityPolicyInformer constructs a new informer for PodSecurityPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredPodSecurityPolicyInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.PolicyV1beta1().PodSecurityPolicies().List(context.TODO(), options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.PolicyV1beta1().PodSecurityPolicies().Watch(context.TODO(), options) - }, - }, - &policyv1beta1.PodSecurityPolicy{}, - resyncPeriod, - indexers, - ) -} - -func (f *podSecurityPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredPodSecurityPolicyInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *podSecurityPolicyInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&policyv1beta1.PodSecurityPolicy{}, f.defaultInformer) -} - -func (f *podSecurityPolicyInformer) Lister() v1beta1.PodSecurityPolicyLister { - return v1beta1.NewPodSecurityPolicyLister(f.Informer().GetIndexer()) -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/clientset.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/clientset.go index 6345f2fb6260..e1515fe1a7ef 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/clientset.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/clientset.go @@ -52,7 +52,6 @@ import ( eventsv1 "k8s.io/client-go/kubernetes/typed/events/v1" eventsv1beta1 "k8s.io/client-go/kubernetes/typed/events/v1beta1" extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" - flowcontrolv1alpha1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1" flowcontrolv1beta1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1" flowcontrolv1beta2 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2" flowcontrolv1beta3 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3" @@ -109,7 +108,6 @@ type Interface interface { EventsV1() eventsv1.EventsV1Interface EventsV1beta1() eventsv1beta1.EventsV1beta1Interface ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface - FlowcontrolV1alpha1() flowcontrolv1alpha1.FlowcontrolV1alpha1Interface FlowcontrolV1beta1() flowcontrolv1beta1.FlowcontrolV1beta1Interface FlowcontrolV1beta2() flowcontrolv1beta2.FlowcontrolV1beta2Interface FlowcontrolV1beta3() flowcontrolv1beta3.FlowcontrolV1beta3Interface @@ -165,7 +163,6 @@ type Clientset struct { eventsV1 *eventsv1.EventsV1Client eventsV1beta1 *eventsv1beta1.EventsV1beta1Client extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client - flowcontrolV1alpha1 *flowcontrolv1alpha1.FlowcontrolV1alpha1Client flowcontrolV1beta1 *flowcontrolv1beta1.FlowcontrolV1beta1Client flowcontrolV1beta2 *flowcontrolv1beta2.FlowcontrolV1beta2Client flowcontrolV1beta3 *flowcontrolv1beta3.FlowcontrolV1beta3Client @@ -334,11 +331,6 @@ func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Inter return c.extensionsV1beta1 } -// FlowcontrolV1alpha1 retrieves the FlowcontrolV1alpha1Client -func (c *Clientset) FlowcontrolV1alpha1() flowcontrolv1alpha1.FlowcontrolV1alpha1Interface { - return c.flowcontrolV1alpha1 -} - // FlowcontrolV1beta1 retrieves the FlowcontrolV1beta1Client func (c *Clientset) FlowcontrolV1beta1() flowcontrolv1beta1.FlowcontrolV1beta1Interface { return c.flowcontrolV1beta1 @@ -604,10 +596,6 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, if err != nil { return nil, err } - cs.flowcontrolV1alpha1, err = flowcontrolv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) - if err != nil { - return nil, err - } cs.flowcontrolV1beta1, err = flowcontrolv1beta1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err @@ -742,7 +730,6 @@ func New(c rest.Interface) *Clientset { cs.eventsV1 = eventsv1.New(c) cs.eventsV1beta1 = eventsv1beta1.New(c) cs.extensionsV1beta1 = extensionsv1beta1.New(c) - cs.flowcontrolV1alpha1 = flowcontrolv1alpha1.New(c) cs.flowcontrolV1beta1 = flowcontrolv1beta1.New(c) cs.flowcontrolV1beta2 = flowcontrolv1beta2.New(c) cs.flowcontrolV1beta3 = flowcontrolv1beta3.New(c) diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go index 25de81caa8a0..a229e88f1ca5 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/clientset_generated.go @@ -82,8 +82,6 @@ import ( fakeeventsv1beta1 "k8s.io/client-go/kubernetes/typed/events/v1beta1/fake" extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" fakeextensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake" - flowcontrolv1alpha1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1" - fakeflowcontrolv1alpha1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake" flowcontrolv1beta1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1" fakeflowcontrolv1beta1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/fake" flowcontrolv1beta2 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2" @@ -324,11 +322,6 @@ func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Inter return &fakeextensionsv1beta1.FakeExtensionsV1beta1{Fake: &c.Fake} } -// FlowcontrolV1alpha1 retrieves the FlowcontrolV1alpha1Client -func (c *Clientset) FlowcontrolV1alpha1() flowcontrolv1alpha1.FlowcontrolV1alpha1Interface { - return &fakeflowcontrolv1alpha1.FakeFlowcontrolV1alpha1{Fake: &c.Fake} -} - // FlowcontrolV1beta1 retrieves the FlowcontrolV1beta1Client func (c *Clientset) FlowcontrolV1beta1() flowcontrolv1beta1.FlowcontrolV1beta1Interface { return &fakeflowcontrolv1beta1.FakeFlowcontrolV1beta1{Fake: &c.Fake} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/register.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/register.go index 00918418585a..615bf9a20f45 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/register.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/fake/register.go @@ -48,7 +48,6 @@ import ( eventsv1 "k8s.io/api/events/v1" eventsv1beta1 "k8s.io/api/events/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1" flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2" flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3" @@ -110,7 +109,6 @@ var localSchemeBuilder = runtime.SchemeBuilder{ eventsv1.AddToScheme, eventsv1beta1.AddToScheme, extensionsv1beta1.AddToScheme, - flowcontrolv1alpha1.AddToScheme, flowcontrolv1beta1.AddToScheme, flowcontrolv1beta2.AddToScheme, flowcontrolv1beta3.AddToScheme, diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/scheme/register.go index 64d3ce2a7b79..6e5e0da7ec07 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/scheme/register.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/scheme/register.go @@ -48,7 +48,6 @@ import ( eventsv1 "k8s.io/api/events/v1" eventsv1beta1 "k8s.io/api/events/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - flowcontrolv1alpha1 "k8s.io/api/flowcontrol/v1alpha1" flowcontrolv1beta1 "k8s.io/api/flowcontrol/v1beta1" flowcontrolv1beta2 "k8s.io/api/flowcontrol/v1beta2" flowcontrolv1beta3 "k8s.io/api/flowcontrol/v1beta3" @@ -110,7 +109,6 @@ var localSchemeBuilder = runtime.SchemeBuilder{ eventsv1.AddToScheme, eventsv1beta1.AddToScheme, extensionsv1beta1.AddToScheme, - flowcontrolv1alpha1.AddToScheme, flowcontrolv1beta1.AddToScheme, flowcontrolv1beta2.AddToScheme, flowcontrolv1beta3.AddToScheme, diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go deleted file mode 100644 index df51baa4d4c1..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated typed clients. -package v1alpha1 diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/doc.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/doc.go deleted file mode 100644 index 16f44399065e..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// Package fake has the automatically generated clients. -package fake diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowcontrol_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowcontrol_client.go deleted file mode 100644 index 72d5eff0c267..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowcontrol_client.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - v1alpha1 "k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1" - rest "k8s.io/client-go/rest" - testing "k8s.io/client-go/testing" -) - -type FakeFlowcontrolV1alpha1 struct { - *testing.Fake -} - -func (c *FakeFlowcontrolV1alpha1) FlowSchemas() v1alpha1.FlowSchemaInterface { - return &FakeFlowSchemas{c} -} - -func (c *FakeFlowcontrolV1alpha1) PriorityLevelConfigurations() v1alpha1.PriorityLevelConfigurationInterface { - return &FakePriorityLevelConfigurations{c} -} - -// RESTClient returns a RESTClient that is used to communicate -// with API server by this client implementation. -func (c *FakeFlowcontrolV1alpha1) RESTClient() rest.Interface { - var ret *rest.RESTClient - return ret -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowschema.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowschema.go deleted file mode 100644 index f3676388923b..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_flowschema.go +++ /dev/null @@ -1,178 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - "context" - json "encoding/json" - "fmt" - - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - flowcontrolv1alpha1 "k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1" - testing "k8s.io/client-go/testing" -) - -// FakeFlowSchemas implements FlowSchemaInterface -type FakeFlowSchemas struct { - Fake *FakeFlowcontrolV1alpha1 -} - -var flowschemasResource = v1alpha1.SchemeGroupVersion.WithResource("flowschemas") - -var flowschemasKind = v1alpha1.SchemeGroupVersion.WithKind("FlowSchema") - -// Get takes name of the flowSchema, and returns the corresponding flowSchema object, and an error if there is any. -func (c *FakeFlowSchemas) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.FlowSchema, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootGetAction(flowschemasResource, name), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// List takes label and field selectors, and returns the list of FlowSchemas that match those selectors. -func (c *FakeFlowSchemas) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.FlowSchemaList, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootListAction(flowschemasResource, flowschemasKind, opts), &v1alpha1.FlowSchemaList{}) - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1alpha1.FlowSchemaList{ListMeta: obj.(*v1alpha1.FlowSchemaList).ListMeta} - for _, item := range obj.(*v1alpha1.FlowSchemaList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested flowSchemas. -func (c *FakeFlowSchemas) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewRootWatchAction(flowschemasResource, opts)) -} - -// Create takes the representation of a flowSchema and creates it. Returns the server's representation of the flowSchema, and an error, if there is any. -func (c *FakeFlowSchemas) Create(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.CreateOptions) (result *v1alpha1.FlowSchema, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(flowschemasResource, flowSchema), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// Update takes the representation of a flowSchema and updates it. Returns the server's representation of the flowSchema, and an error, if there is any. -func (c *FakeFlowSchemas) Update(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (result *v1alpha1.FlowSchema, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(flowschemasResource, flowSchema), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeFlowSchemas) UpdateStatus(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (*v1alpha1.FlowSchema, error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(flowschemasResource, "status", flowSchema), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// Delete takes name of the flowSchema and deletes it. Returns an error if one occurs. -func (c *FakeFlowSchemas) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewRootDeleteActionWithOptions(flowschemasResource, name, opts), &v1alpha1.FlowSchema{}) - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakeFlowSchemas) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(flowschemasResource, listOpts) - - _, err := c.Fake.Invokes(action, &v1alpha1.FlowSchemaList{}) - return err -} - -// Patch applies the patch and returns the patched flowSchema. -func (c *FakeFlowSchemas) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.FlowSchema, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(flowschemasResource, name, pt, data, subresources...), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied flowSchema. -func (c *FakeFlowSchemas) Apply(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) { - if flowSchema == nil { - return nil, fmt.Errorf("flowSchema provided to Apply must not be nil") - } - data, err := json.Marshal(flowSchema) - if err != nil { - return nil, err - } - name := flowSchema.Name - if name == nil { - return nil, fmt.Errorf("flowSchema.Name must be provided to Apply") - } - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(flowschemasResource, *name, types.ApplyPatchType, data), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} - -// ApplyStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *FakeFlowSchemas) ApplyStatus(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) { - if flowSchema == nil { - return nil, fmt.Errorf("flowSchema provided to Apply must not be nil") - } - data, err := json.Marshal(flowSchema) - if err != nil { - return nil, err - } - name := flowSchema.Name - if name == nil { - return nil, fmt.Errorf("flowSchema.Name must be provided to Apply") - } - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(flowschemasResource, *name, types.ApplyPatchType, data, "status"), &v1alpha1.FlowSchema{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.FlowSchema), err -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_prioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_prioritylevelconfiguration.go deleted file mode 100644 index 6512c36f69b1..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake/fake_prioritylevelconfiguration.go +++ /dev/null @@ -1,178 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - "context" - json "encoding/json" - "fmt" - - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - flowcontrolv1alpha1 "k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1" - testing "k8s.io/client-go/testing" -) - -// FakePriorityLevelConfigurations implements PriorityLevelConfigurationInterface -type FakePriorityLevelConfigurations struct { - Fake *FakeFlowcontrolV1alpha1 -} - -var prioritylevelconfigurationsResource = v1alpha1.SchemeGroupVersion.WithResource("prioritylevelconfigurations") - -var prioritylevelconfigurationsKind = v1alpha1.SchemeGroupVersion.WithKind("PriorityLevelConfiguration") - -// Get takes name of the priorityLevelConfiguration, and returns the corresponding priorityLevelConfiguration object, and an error if there is any. -func (c *FakePriorityLevelConfigurations) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootGetAction(prioritylevelconfigurationsResource, name), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// List takes label and field selectors, and returns the list of PriorityLevelConfigurations that match those selectors. -func (c *FakePriorityLevelConfigurations) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.PriorityLevelConfigurationList, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootListAction(prioritylevelconfigurationsResource, prioritylevelconfigurationsKind, opts), &v1alpha1.PriorityLevelConfigurationList{}) - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1alpha1.PriorityLevelConfigurationList{ListMeta: obj.(*v1alpha1.PriorityLevelConfigurationList).ListMeta} - for _, item := range obj.(*v1alpha1.PriorityLevelConfigurationList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested priorityLevelConfigurations. -func (c *FakePriorityLevelConfigurations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewRootWatchAction(prioritylevelconfigurationsResource, opts)) -} - -// Create takes the representation of a priorityLevelConfiguration and creates it. Returns the server's representation of the priorityLevelConfiguration, and an error, if there is any. -func (c *FakePriorityLevelConfigurations) Create(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.CreateOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(prioritylevelconfigurationsResource, priorityLevelConfiguration), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// Update takes the representation of a priorityLevelConfiguration and updates it. Returns the server's representation of the priorityLevelConfiguration, and an error, if there is any. -func (c *FakePriorityLevelConfigurations) Update(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(prioritylevelconfigurationsResource, priorityLevelConfiguration), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakePriorityLevelConfigurations) UpdateStatus(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (*v1alpha1.PriorityLevelConfiguration, error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(prioritylevelconfigurationsResource, "status", priorityLevelConfiguration), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// Delete takes name of the priorityLevelConfiguration and deletes it. Returns an error if one occurs. -func (c *FakePriorityLevelConfigurations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewRootDeleteActionWithOptions(prioritylevelconfigurationsResource, name, opts), &v1alpha1.PriorityLevelConfiguration{}) - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakePriorityLevelConfigurations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(prioritylevelconfigurationsResource, listOpts) - - _, err := c.Fake.Invokes(action, &v1alpha1.PriorityLevelConfigurationList{}) - return err -} - -// Patch applies the patch and returns the patched priorityLevelConfiguration. -func (c *FakePriorityLevelConfigurations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.PriorityLevelConfiguration, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(prioritylevelconfigurationsResource, name, pt, data, subresources...), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied priorityLevelConfiguration. -func (c *FakePriorityLevelConfigurations) Apply(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - if priorityLevelConfiguration == nil { - return nil, fmt.Errorf("priorityLevelConfiguration provided to Apply must not be nil") - } - data, err := json.Marshal(priorityLevelConfiguration) - if err != nil { - return nil, err - } - name := priorityLevelConfiguration.Name - if name == nil { - return nil, fmt.Errorf("priorityLevelConfiguration.Name must be provided to Apply") - } - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(prioritylevelconfigurationsResource, *name, types.ApplyPatchType, data), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} - -// ApplyStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *FakePriorityLevelConfigurations) ApplyStatus(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - if priorityLevelConfiguration == nil { - return nil, fmt.Errorf("priorityLevelConfiguration provided to Apply must not be nil") - } - data, err := json.Marshal(priorityLevelConfiguration) - if err != nil { - return nil, err - } - name := priorityLevelConfiguration.Name - if name == nil { - return nil, fmt.Errorf("priorityLevelConfiguration.Name must be provided to Apply") - } - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(prioritylevelconfigurationsResource, *name, types.ApplyPatchType, data, "status"), &v1alpha1.PriorityLevelConfiguration{}) - if obj == nil { - return nil, err - } - return obj.(*v1alpha1.PriorityLevelConfiguration), err -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go deleted file mode 100644 index c6f2d940560a..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowcontrol_client.go +++ /dev/null @@ -1,112 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "net/http" - - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -type FlowcontrolV1alpha1Interface interface { - RESTClient() rest.Interface - FlowSchemasGetter - PriorityLevelConfigurationsGetter -} - -// FlowcontrolV1alpha1Client is used to interact with features provided by the flowcontrol.apiserver.k8s.io group. -type FlowcontrolV1alpha1Client struct { - restClient rest.Interface -} - -func (c *FlowcontrolV1alpha1Client) FlowSchemas() FlowSchemaInterface { - return newFlowSchemas(c) -} - -func (c *FlowcontrolV1alpha1Client) PriorityLevelConfigurations() PriorityLevelConfigurationInterface { - return newPriorityLevelConfigurations(c) -} - -// NewForConfig creates a new FlowcontrolV1alpha1Client for the given config. -// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), -// where httpClient was generated with rest.HTTPClientFor(c). -func NewForConfig(c *rest.Config) (*FlowcontrolV1alpha1Client, error) { - config := *c - if err := setConfigDefaults(&config); err != nil { - return nil, err - } - httpClient, err := rest.HTTPClientFor(&config) - if err != nil { - return nil, err - } - return NewForConfigAndClient(&config, httpClient) -} - -// NewForConfigAndClient creates a new FlowcontrolV1alpha1Client for the given config and http client. -// Note the http client provided takes precedence over the configured transport values. -func NewForConfigAndClient(c *rest.Config, h *http.Client) (*FlowcontrolV1alpha1Client, error) { - config := *c - if err := setConfigDefaults(&config); err != nil { - return nil, err - } - client, err := rest.RESTClientForConfigAndClient(&config, h) - if err != nil { - return nil, err - } - return &FlowcontrolV1alpha1Client{client}, nil -} - -// NewForConfigOrDie creates a new FlowcontrolV1alpha1Client for the given config and -// panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *FlowcontrolV1alpha1Client { - client, err := NewForConfig(c) - if err != nil { - panic(err) - } - return client -} - -// New creates a new FlowcontrolV1alpha1Client for the given RESTClient. -func New(c rest.Interface) *FlowcontrolV1alpha1Client { - return &FlowcontrolV1alpha1Client{c} -} - -func setConfigDefaults(config *rest.Config) error { - gv := v1alpha1.SchemeGroupVersion - config.GroupVersion = &gv - config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() - - if config.UserAgent == "" { - config.UserAgent = rest.DefaultKubernetesUserAgent() - } - - return nil -} - -// RESTClient returns a RESTClient that is used to communicate -// with API server by this client implementation. -func (c *FlowcontrolV1alpha1Client) RESTClient() rest.Interface { - if c == nil { - return nil - } - return c.restClient -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go deleted file mode 100644 index 95baf825191e..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/flowschema.go +++ /dev/null @@ -1,243 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - json "encoding/json" - "fmt" - "time" - - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - flowcontrolv1alpha1 "k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// FlowSchemasGetter has a method to return a FlowSchemaInterface. -// A group's client should implement this interface. -type FlowSchemasGetter interface { - FlowSchemas() FlowSchemaInterface -} - -// FlowSchemaInterface has methods to work with FlowSchema resources. -type FlowSchemaInterface interface { - Create(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.CreateOptions) (*v1alpha1.FlowSchema, error) - Update(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (*v1alpha1.FlowSchema, error) - UpdateStatus(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (*v1alpha1.FlowSchema, error) - Delete(ctx context.Context, name string, opts v1.DeleteOptions) error - DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error - Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.FlowSchema, error) - List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.FlowSchemaList, error) - Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.FlowSchema, err error) - Apply(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) - ApplyStatus(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) - FlowSchemaExpansion -} - -// flowSchemas implements FlowSchemaInterface -type flowSchemas struct { - client rest.Interface -} - -// newFlowSchemas returns a FlowSchemas -func newFlowSchemas(c *FlowcontrolV1alpha1Client) *flowSchemas { - return &flowSchemas{ - client: c.RESTClient(), - } -} - -// Get takes name of the flowSchema, and returns the corresponding flowSchema object, and an error if there is any. -func (c *flowSchemas) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.FlowSchema, err error) { - result = &v1alpha1.FlowSchema{} - err = c.client.Get(). - Resource("flowschemas"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of FlowSchemas that match those selectors. -func (c *flowSchemas) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.FlowSchemaList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.FlowSchemaList{} - err = c.client.Get(). - Resource("flowschemas"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested flowSchemas. -func (c *flowSchemas) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("flowschemas"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a flowSchema and creates it. Returns the server's representation of the flowSchema, and an error, if there is any. -func (c *flowSchemas) Create(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.CreateOptions) (result *v1alpha1.FlowSchema, err error) { - result = &v1alpha1.FlowSchema{} - err = c.client.Post(). - Resource("flowschemas"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(flowSchema). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a flowSchema and updates it. Returns the server's representation of the flowSchema, and an error, if there is any. -func (c *flowSchemas) Update(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (result *v1alpha1.FlowSchema, err error) { - result = &v1alpha1.FlowSchema{} - err = c.client.Put(). - Resource("flowschemas"). - Name(flowSchema.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(flowSchema). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *flowSchemas) UpdateStatus(ctx context.Context, flowSchema *v1alpha1.FlowSchema, opts v1.UpdateOptions) (result *v1alpha1.FlowSchema, err error) { - result = &v1alpha1.FlowSchema{} - err = c.client.Put(). - Resource("flowschemas"). - Name(flowSchema.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(flowSchema). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the flowSchema and deletes it. Returns an error if one occurs. -func (c *flowSchemas) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Resource("flowschemas"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *flowSchemas) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("flowschemas"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched flowSchema. -func (c *flowSchemas) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.FlowSchema, err error) { - result = &v1alpha1.FlowSchema{} - err = c.client.Patch(pt). - Resource("flowschemas"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied flowSchema. -func (c *flowSchemas) Apply(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) { - if flowSchema == nil { - return nil, fmt.Errorf("flowSchema provided to Apply must not be nil") - } - patchOpts := opts.ToPatchOptions() - data, err := json.Marshal(flowSchema) - if err != nil { - return nil, err - } - name := flowSchema.Name - if name == nil { - return nil, fmt.Errorf("flowSchema.Name must be provided to Apply") - } - result = &v1alpha1.FlowSchema{} - err = c.client.Patch(types.ApplyPatchType). - Resource("flowschemas"). - Name(*name). - VersionedParams(&patchOpts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} - -// ApplyStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *flowSchemas) ApplyStatus(ctx context.Context, flowSchema *flowcontrolv1alpha1.FlowSchemaApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.FlowSchema, err error) { - if flowSchema == nil { - return nil, fmt.Errorf("flowSchema provided to Apply must not be nil") - } - patchOpts := opts.ToPatchOptions() - data, err := json.Marshal(flowSchema) - if err != nil { - return nil, err - } - - name := flowSchema.Name - if name == nil { - return nil, fmt.Errorf("flowSchema.Name must be provided to Apply") - } - - result = &v1alpha1.FlowSchema{} - err = c.client.Patch(types.ApplyPatchType). - Resource("flowschemas"). - Name(*name). - SubResource("status"). - VersionedParams(&patchOpts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go deleted file mode 100644 index 065b5e6b42de..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/generated_expansion.go +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -type FlowSchemaExpansion interface{} - -type PriorityLevelConfigurationExpansion interface{} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go deleted file mode 100644 index 327b727c1820..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/prioritylevelconfiguration.go +++ /dev/null @@ -1,243 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - json "encoding/json" - "fmt" - "time" - - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - flowcontrolv1alpha1 "k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// PriorityLevelConfigurationsGetter has a method to return a PriorityLevelConfigurationInterface. -// A group's client should implement this interface. -type PriorityLevelConfigurationsGetter interface { - PriorityLevelConfigurations() PriorityLevelConfigurationInterface -} - -// PriorityLevelConfigurationInterface has methods to work with PriorityLevelConfiguration resources. -type PriorityLevelConfigurationInterface interface { - Create(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.CreateOptions) (*v1alpha1.PriorityLevelConfiguration, error) - Update(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (*v1alpha1.PriorityLevelConfiguration, error) - UpdateStatus(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (*v1alpha1.PriorityLevelConfiguration, error) - Delete(ctx context.Context, name string, opts v1.DeleteOptions) error - DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error - Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.PriorityLevelConfiguration, error) - List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.PriorityLevelConfigurationList, error) - Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.PriorityLevelConfiguration, err error) - Apply(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) - ApplyStatus(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) - PriorityLevelConfigurationExpansion -} - -// priorityLevelConfigurations implements PriorityLevelConfigurationInterface -type priorityLevelConfigurations struct { - client rest.Interface -} - -// newPriorityLevelConfigurations returns a PriorityLevelConfigurations -func newPriorityLevelConfigurations(c *FlowcontrolV1alpha1Client) *priorityLevelConfigurations { - return &priorityLevelConfigurations{ - client: c.RESTClient(), - } -} - -// Get takes name of the priorityLevelConfiguration, and returns the corresponding priorityLevelConfiguration object, and an error if there is any. -func (c *priorityLevelConfigurations) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Get(). - Resource("prioritylevelconfigurations"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of PriorityLevelConfigurations that match those selectors. -func (c *priorityLevelConfigurations) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.PriorityLevelConfigurationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.PriorityLevelConfigurationList{} - err = c.client.Get(). - Resource("prioritylevelconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested priorityLevelConfigurations. -func (c *priorityLevelConfigurations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("prioritylevelconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a priorityLevelConfiguration and creates it. Returns the server's representation of the priorityLevelConfiguration, and an error, if there is any. -func (c *priorityLevelConfigurations) Create(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.CreateOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Post(). - Resource("prioritylevelconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(priorityLevelConfiguration). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a priorityLevelConfiguration and updates it. Returns the server's representation of the priorityLevelConfiguration, and an error, if there is any. -func (c *priorityLevelConfigurations) Update(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Put(). - Resource("prioritylevelconfigurations"). - Name(priorityLevelConfiguration.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(priorityLevelConfiguration). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *priorityLevelConfigurations) UpdateStatus(ctx context.Context, priorityLevelConfiguration *v1alpha1.PriorityLevelConfiguration, opts v1.UpdateOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Put(). - Resource("prioritylevelconfigurations"). - Name(priorityLevelConfiguration.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(priorityLevelConfiguration). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the priorityLevelConfiguration and deletes it. Returns an error if one occurs. -func (c *priorityLevelConfigurations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Resource("prioritylevelconfigurations"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *priorityLevelConfigurations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("prioritylevelconfigurations"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched priorityLevelConfiguration. -func (c *priorityLevelConfigurations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.PriorityLevelConfiguration, err error) { - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Patch(pt). - Resource("prioritylevelconfigurations"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied priorityLevelConfiguration. -func (c *priorityLevelConfigurations) Apply(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - if priorityLevelConfiguration == nil { - return nil, fmt.Errorf("priorityLevelConfiguration provided to Apply must not be nil") - } - patchOpts := opts.ToPatchOptions() - data, err := json.Marshal(priorityLevelConfiguration) - if err != nil { - return nil, err - } - name := priorityLevelConfiguration.Name - if name == nil { - return nil, fmt.Errorf("priorityLevelConfiguration.Name must be provided to Apply") - } - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Patch(types.ApplyPatchType). - Resource("prioritylevelconfigurations"). - Name(*name). - VersionedParams(&patchOpts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} - -// ApplyStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). -func (c *priorityLevelConfigurations) ApplyStatus(ctx context.Context, priorityLevelConfiguration *flowcontrolv1alpha1.PriorityLevelConfigurationApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.PriorityLevelConfiguration, err error) { - if priorityLevelConfiguration == nil { - return nil, fmt.Errorf("priorityLevelConfiguration provided to Apply must not be nil") - } - patchOpts := opts.ToPatchOptions() - data, err := json.Marshal(priorityLevelConfiguration) - if err != nil { - return nil, err - } - - name := priorityLevelConfiguration.Name - if name == nil { - return nil, fmt.Errorf("priorityLevelConfiguration.Name must be provided to Apply") - } - - result = &v1alpha1.PriorityLevelConfiguration{} - err = c.client.Patch(types.ApplyPatchType). - Resource("prioritylevelconfigurations"). - Name(*name). - SubResource("status"). - VersionedParams(&patchOpts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go deleted file mode 100644 index ade1aab7f02f..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_podsecuritypolicy.go +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - "context" - json "encoding/json" - "fmt" - - v1beta1 "k8s.io/api/policy/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - policyv1beta1 "k8s.io/client-go/applyconfigurations/policy/v1beta1" - testing "k8s.io/client-go/testing" -) - -// FakePodSecurityPolicies implements PodSecurityPolicyInterface -type FakePodSecurityPolicies struct { - Fake *FakePolicyV1beta1 -} - -var podsecuritypoliciesResource = v1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies") - -var podsecuritypoliciesKind = v1beta1.SchemeGroupVersion.WithKind("PodSecurityPolicy") - -// Get takes name of the podSecurityPolicy, and returns the corresponding podSecurityPolicy object, and an error if there is any. -func (c *FakePodSecurityPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.PodSecurityPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootGetAction(podsecuritypoliciesResource, name), &v1beta1.PodSecurityPolicy{}) - if obj == nil { - return nil, err - } - return obj.(*v1beta1.PodSecurityPolicy), err -} - -// List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. -func (c *FakePodSecurityPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootListAction(podsecuritypoliciesResource, podsecuritypoliciesKind, opts), &v1beta1.PodSecurityPolicyList{}) - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1beta1.PodSecurityPolicyList{ListMeta: obj.(*v1beta1.PodSecurityPolicyList).ListMeta} - for _, item := range obj.(*v1beta1.PodSecurityPolicyList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested podSecurityPolicies. -func (c *FakePodSecurityPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewRootWatchAction(podsecuritypoliciesResource, opts)) -} - -// Create takes the representation of a podSecurityPolicy and creates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. -func (c *FakePodSecurityPolicies) Create(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.CreateOptions) (result *v1beta1.PodSecurityPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(podsecuritypoliciesResource, podSecurityPolicy), &v1beta1.PodSecurityPolicy{}) - if obj == nil { - return nil, err - } - return obj.(*v1beta1.PodSecurityPolicy), err -} - -// Update takes the representation of a podSecurityPolicy and updates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. -func (c *FakePodSecurityPolicies) Update(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.UpdateOptions) (result *v1beta1.PodSecurityPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(podsecuritypoliciesResource, podSecurityPolicy), &v1beta1.PodSecurityPolicy{}) - if obj == nil { - return nil, err - } - return obj.(*v1beta1.PodSecurityPolicy), err -} - -// Delete takes name of the podSecurityPolicy and deletes it. Returns an error if one occurs. -func (c *FakePodSecurityPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewRootDeleteActionWithOptions(podsecuritypoliciesResource, name, opts), &v1beta1.PodSecurityPolicy{}) - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakePodSecurityPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(podsecuritypoliciesResource, listOpts) - - _, err := c.Fake.Invokes(action, &v1beta1.PodSecurityPolicyList{}) - return err -} - -// Patch applies the patch and returns the patched podSecurityPolicy. -func (c *FakePodSecurityPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(podsecuritypoliciesResource, name, pt, data, subresources...), &v1beta1.PodSecurityPolicy{}) - if obj == nil { - return nil, err - } - return obj.(*v1beta1.PodSecurityPolicy), err -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied podSecurityPolicy. -func (c *FakePodSecurityPolicies) Apply(ctx context.Context, podSecurityPolicy *policyv1beta1.PodSecurityPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.PodSecurityPolicy, err error) { - if podSecurityPolicy == nil { - return nil, fmt.Errorf("podSecurityPolicy provided to Apply must not be nil") - } - data, err := json.Marshal(podSecurityPolicy) - if err != nil { - return nil, err - } - name := podSecurityPolicy.Name - if name == nil { - return nil, fmt.Errorf("podSecurityPolicy.Name must be provided to Apply") - } - obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(podsecuritypoliciesResource, *name, types.ApplyPatchType, data), &v1beta1.PodSecurityPolicy{}) - if obj == nil { - return nil, err - } - return obj.(*v1beta1.PodSecurityPolicy), err -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go index 9c780bf1f06a..90670b113f9e 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/fake_policy_client.go @@ -36,10 +36,6 @@ func (c *FakePolicyV1beta1) PodDisruptionBudgets(namespace string) v1beta1.PodDi return &FakePodDisruptionBudgets{c, namespace} } -func (c *FakePolicyV1beta1) PodSecurityPolicies() v1beta1.PodSecurityPolicyInterface { - return &FakePodSecurityPolicies{c} -} - // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. func (c *FakePolicyV1beta1) RESTClient() rest.Interface { diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go index 078c16d5cb11..6fce70c4eb8b 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/generated_expansion.go @@ -19,5 +19,3 @@ limitations under the License. package v1beta1 type PodDisruptionBudgetExpansion interface{} - -type PodSecurityPolicyExpansion interface{} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go deleted file mode 100644 index 944b61de47fd..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go +++ /dev/null @@ -1,197 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - "context" - json "encoding/json" - "fmt" - "time" - - v1beta1 "k8s.io/api/policy/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - policyv1beta1 "k8s.io/client-go/applyconfigurations/policy/v1beta1" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// PodSecurityPoliciesGetter has a method to return a PodSecurityPolicyInterface. -// A group's client should implement this interface. -type PodSecurityPoliciesGetter interface { - PodSecurityPolicies() PodSecurityPolicyInterface -} - -// PodSecurityPolicyInterface has methods to work with PodSecurityPolicy resources. -type PodSecurityPolicyInterface interface { - Create(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.CreateOptions) (*v1beta1.PodSecurityPolicy, error) - Update(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.UpdateOptions) (*v1beta1.PodSecurityPolicy, error) - Delete(ctx context.Context, name string, opts v1.DeleteOptions) error - DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error - Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.PodSecurityPolicy, error) - List(ctx context.Context, opts v1.ListOptions) (*v1beta1.PodSecurityPolicyList, error) - Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) - Apply(ctx context.Context, podSecurityPolicy *policyv1beta1.PodSecurityPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.PodSecurityPolicy, err error) - PodSecurityPolicyExpansion -} - -// podSecurityPolicies implements PodSecurityPolicyInterface -type podSecurityPolicies struct { - client rest.Interface -} - -// newPodSecurityPolicies returns a PodSecurityPolicies -func newPodSecurityPolicies(c *PolicyV1beta1Client) *podSecurityPolicies { - return &podSecurityPolicies{ - client: c.RESTClient(), - } -} - -// Get takes name of the podSecurityPolicy, and returns the corresponding podSecurityPolicy object, and an error if there is any. -func (c *podSecurityPolicies) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.PodSecurityPolicy, err error) { - result = &v1beta1.PodSecurityPolicy{} - err = c.client.Get(). - Resource("podsecuritypolicies"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. -func (c *podSecurityPolicies) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.PodSecurityPolicyList{} - err = c.client.Get(). - Resource("podsecuritypolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested podSecurityPolicies. -func (c *podSecurityPolicies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("podsecuritypolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a podSecurityPolicy and creates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. -func (c *podSecurityPolicies) Create(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.CreateOptions) (result *v1beta1.PodSecurityPolicy, err error) { - result = &v1beta1.PodSecurityPolicy{} - err = c.client.Post(). - Resource("podsecuritypolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(podSecurityPolicy). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a podSecurityPolicy and updates it. Returns the server's representation of the podSecurityPolicy, and an error, if there is any. -func (c *podSecurityPolicies) Update(ctx context.Context, podSecurityPolicy *v1beta1.PodSecurityPolicy, opts v1.UpdateOptions) (result *v1beta1.PodSecurityPolicy, err error) { - result = &v1beta1.PodSecurityPolicy{} - err = c.client.Put(). - Resource("podsecuritypolicies"). - Name(podSecurityPolicy.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(podSecurityPolicy). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the podSecurityPolicy and deletes it. Returns an error if one occurs. -func (c *podSecurityPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Resource("podsecuritypolicies"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *podSecurityPolicies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("podsecuritypolicies"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched podSecurityPolicy. -func (c *podSecurityPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.PodSecurityPolicy, err error) { - result = &v1beta1.PodSecurityPolicy{} - err = c.client.Patch(pt). - Resource("podsecuritypolicies"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} - -// Apply takes the given apply declarative configuration, applies it and returns the applied podSecurityPolicy. -func (c *podSecurityPolicies) Apply(ctx context.Context, podSecurityPolicy *policyv1beta1.PodSecurityPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.PodSecurityPolicy, err error) { - if podSecurityPolicy == nil { - return nil, fmt.Errorf("podSecurityPolicy provided to Apply must not be nil") - } - patchOpts := opts.ToPatchOptions() - data, err := json.Marshal(podSecurityPolicy) - if err != nil { - return nil, err - } - name := podSecurityPolicy.Name - if name == nil { - return nil, fmt.Errorf("podSecurityPolicy.Name must be provided to Apply") - } - result = &v1beta1.PodSecurityPolicy{} - err = c.client.Patch(types.ApplyPatchType). - Resource("podsecuritypolicies"). - Name(*name). - VersionedParams(&patchOpts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go index 5b65c9c0aa1f..fdb509321670 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go @@ -30,7 +30,6 @@ type PolicyV1beta1Interface interface { RESTClient() rest.Interface EvictionsGetter PodDisruptionBudgetsGetter - PodSecurityPoliciesGetter } // PolicyV1beta1Client is used to interact with features provided by the policy group. @@ -46,10 +45,6 @@ func (c *PolicyV1beta1Client) PodDisruptionBudgets(namespace string) PodDisrupti return newPodDisruptionBudgets(c, namespace) } -func (c *PolicyV1beta1Client) PodSecurityPolicies() PodSecurityPolicyInterface { - return newPodSecurityPolicies(c) -} - // NewForConfig creates a new PolicyV1beta1Client for the given config. // NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), // where httpClient was generated with rest.HTTPClientFor(c). diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go deleted file mode 100644 index c8a595cd29c8..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/flowschema.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// FlowSchemaLister helps list FlowSchemas. -// All objects returned here must be treated as read-only. -type FlowSchemaLister interface { - // List lists all FlowSchemas in the indexer. - // Objects returned here must be treated as read-only. - List(selector labels.Selector) (ret []*v1alpha1.FlowSchema, err error) - // Get retrieves the FlowSchema from the index for a given name. - // Objects returned here must be treated as read-only. - Get(name string) (*v1alpha1.FlowSchema, error) - FlowSchemaListerExpansion -} - -// flowSchemaLister implements the FlowSchemaLister interface. -type flowSchemaLister struct { - indexer cache.Indexer -} - -// NewFlowSchemaLister returns a new FlowSchemaLister. -func NewFlowSchemaLister(indexer cache.Indexer) FlowSchemaLister { - return &flowSchemaLister{indexer: indexer} -} - -// List lists all FlowSchemas in the indexer. -func (s *flowSchemaLister) List(selector labels.Selector) (ret []*v1alpha1.FlowSchema, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.FlowSchema)) - }) - return ret, err -} - -// Get retrieves the FlowSchema from the index for a given name. -func (s *flowSchemaLister) Get(name string) (*v1alpha1.FlowSchema, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("flowschema"), name) - } - return obj.(*v1alpha1.FlowSchema), nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go deleted file mode 100644 index daa4ff31d93e..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/flowcontrol/v1alpha1/prioritylevelconfiguration.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/flowcontrol/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// PriorityLevelConfigurationLister helps list PriorityLevelConfigurations. -// All objects returned here must be treated as read-only. -type PriorityLevelConfigurationLister interface { - // List lists all PriorityLevelConfigurations in the indexer. - // Objects returned here must be treated as read-only. - List(selector labels.Selector) (ret []*v1alpha1.PriorityLevelConfiguration, err error) - // Get retrieves the PriorityLevelConfiguration from the index for a given name. - // Objects returned here must be treated as read-only. - Get(name string) (*v1alpha1.PriorityLevelConfiguration, error) - PriorityLevelConfigurationListerExpansion -} - -// priorityLevelConfigurationLister implements the PriorityLevelConfigurationLister interface. -type priorityLevelConfigurationLister struct { - indexer cache.Indexer -} - -// NewPriorityLevelConfigurationLister returns a new PriorityLevelConfigurationLister. -func NewPriorityLevelConfigurationLister(indexer cache.Indexer) PriorityLevelConfigurationLister { - return &priorityLevelConfigurationLister{indexer: indexer} -} - -// List lists all PriorityLevelConfigurations in the indexer. -func (s *priorityLevelConfigurationLister) List(selector labels.Selector) (ret []*v1alpha1.PriorityLevelConfiguration, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.PriorityLevelConfiguration)) - }) - return ret, err -} - -// Get retrieves the PriorityLevelConfiguration from the index for a given name. -func (s *priorityLevelConfigurationLister) Get(name string) (*v1alpha1.PriorityLevelConfiguration, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("prioritylevelconfiguration"), name) - } - return obj.(*v1alpha1.PriorityLevelConfiguration), nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go index 9a005f20bb8c..eba5e2f72d61 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/expansion_generated.go @@ -25,7 +25,3 @@ type EvictionListerExpansion interface{} // EvictionNamespaceListerExpansion allows custom methods to be added to // EvictionNamespaceLister. type EvictionNamespaceListerExpansion interface{} - -// PodSecurityPolicyListerExpansion allows custom methods to be added to -// PodSecurityPolicyLister. -type PodSecurityPolicyListerExpansion interface{} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go b/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go deleted file mode 100644 index 7e73161b25ab..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/client-go/listers/policy/v1beta1/podsecuritypolicy.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/policy/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// PodSecurityPolicyLister helps list PodSecurityPolicies. -// All objects returned here must be treated as read-only. -type PodSecurityPolicyLister interface { - // List lists all PodSecurityPolicies in the indexer. - // Objects returned here must be treated as read-only. - List(selector labels.Selector) (ret []*v1beta1.PodSecurityPolicy, err error) - // Get retrieves the PodSecurityPolicy from the index for a given name. - // Objects returned here must be treated as read-only. - Get(name string) (*v1beta1.PodSecurityPolicy, error) - PodSecurityPolicyListerExpansion -} - -// podSecurityPolicyLister implements the PodSecurityPolicyLister interface. -type podSecurityPolicyLister struct { - indexer cache.Indexer -} - -// NewPodSecurityPolicyLister returns a new PodSecurityPolicyLister. -func NewPodSecurityPolicyLister(indexer cache.Indexer) PodSecurityPolicyLister { - return &podSecurityPolicyLister{indexer: indexer} -} - -// List lists all PodSecurityPolicies in the indexer. -func (s *podSecurityPolicyLister) List(selector labels.Selector) (ret []*v1beta1.PodSecurityPolicy, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.PodSecurityPolicy)) - }) - return ret, err -} - -// Get retrieves the PodSecurityPolicy from the index for a given name. -func (s *podSecurityPolicyLister) Get(name string) (*v1beta1.PodSecurityPolicy, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("podsecuritypolicy"), name) - } - return obj.(*v1beta1.PodSecurityPolicy), nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/reflector.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/reflector.go index 45eaff52853f..099eeabbdda3 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/reflector.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/reflector.go @@ -337,7 +337,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { if !apierrors.IsInvalid(err) { return err } - klog.Warning("the watch-list feature is not supported by the server, falling back to the previous LIST/WATCH semantic") + klog.Warning("The watch-list feature is not supported by the server, falling back to the previous LIST/WATCH semantics") fallbackToList = true // Ensure that we won't accidentally pass some garbage down the watch. w = nil @@ -351,6 +351,8 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { } } + klog.V(2).Infof("Caches populated for %v from %s", r.typeDescription, r.name) + resyncerrc := make(chan error, 1) cancelCh := make(chan struct{}) defer close(cancelCh) @@ -762,7 +764,7 @@ loop: } case watch.Bookmark: // A `Bookmark` means watch has synced here, just update the resourceVersion - if _, ok := meta.GetAnnotations()["k8s.io/initial-events-end"]; ok { + if meta.GetAnnotations()["k8s.io/initial-events-end"] == "true" { if exitOnInitialEventsEndBookmark != nil { *exitOnInitialEventsEndBookmark = true } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/shared_informer.go index be8694ddb620..b3f37431d5c9 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/shared_informer.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/cache/shared_informer.go @@ -334,11 +334,9 @@ func WaitForCacheSync(stopCh <-chan struct{}, cacheSyncs ...InformerSynced) bool }, stopCh) if err != nil { - klog.V(2).Infof("stop requested") return false } - klog.V(4).Infof("caches populated") return true } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go index 10744156b836..0fc2fd0a0cac 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go @@ -49,12 +49,12 @@ type InClusterConfig interface { Possible() bool } -// NewNonInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name +// NewNonInteractiveDeferredLoadingClientConfig creates a ClientConfig using the passed context name func NewNonInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides) ClientConfig { return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: &inClusterClientConfig{overrides: overrides}} } -// NewInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name and the fallback auth reader +// NewInteractiveDeferredLoadingClientConfig creates a ClientConfig using the passed context name and the fallback auth reader func NewInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides, fallbackReader io.Reader) ClientConfig { return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: &inClusterClientConfig{overrides: overrides}, fallbackReader: fallbackReader} } diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go index 662a3cb4ac77..1ae67729be34 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go @@ -18,17 +18,10 @@ package remotecommand import ( "context" - "fmt" "io" "net/http" - "net/url" - - "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/util/httpstream" - "k8s.io/apimachinery/pkg/util/remotecommand" - restclient "k8s.io/client-go/rest" - "k8s.io/client-go/transport/spdy" ) // StreamOptions holds information pertaining to the current streaming session: @@ -63,120 +56,3 @@ type streamCreator interface { type streamProtocolHandler interface { stream(conn streamCreator) error } - -// streamExecutor handles transporting standard shell streams over an httpstream connection. -type streamExecutor struct { - upgrader spdy.Upgrader - transport http.RoundTripper - - method string - url *url.URL - protocols []string -} - -// NewSPDYExecutor connects to the provided server and upgrades the connection to -// multiplexed bidirectional streams. -func NewSPDYExecutor(config *restclient.Config, method string, url *url.URL) (Executor, error) { - wrapper, upgradeRoundTripper, err := spdy.RoundTripperFor(config) - if err != nil { - return nil, err - } - return NewSPDYExecutorForTransports(wrapper, upgradeRoundTripper, method, url) -} - -// NewSPDYExecutorForTransports connects to the provided server using the given transport, -// upgrades the response using the given upgrader to multiplexed bidirectional streams. -func NewSPDYExecutorForTransports(transport http.RoundTripper, upgrader spdy.Upgrader, method string, url *url.URL) (Executor, error) { - return NewSPDYExecutorForProtocols( - transport, upgrader, method, url, - remotecommand.StreamProtocolV4Name, - remotecommand.StreamProtocolV3Name, - remotecommand.StreamProtocolV2Name, - remotecommand.StreamProtocolV1Name, - ) -} - -// NewSPDYExecutorForProtocols connects to the provided server and upgrades the connection to -// multiplexed bidirectional streams using only the provided protocols. Exposed for testing, most -// callers should use NewSPDYExecutor or NewSPDYExecutorForTransports. -func NewSPDYExecutorForProtocols(transport http.RoundTripper, upgrader spdy.Upgrader, method string, url *url.URL, protocols ...string) (Executor, error) { - return &streamExecutor{ - upgrader: upgrader, - transport: transport, - method: method, - url: url, - protocols: protocols, - }, nil -} - -// Stream opens a protocol streamer to the server and streams until a client closes -// the connection or the server disconnects. -func (e *streamExecutor) Stream(options StreamOptions) error { - return e.StreamWithContext(context.Background(), options) -} - -// newConnectionAndStream creates a new SPDY connection and a stream protocol handler upon it. -func (e *streamExecutor) newConnectionAndStream(ctx context.Context, options StreamOptions) (httpstream.Connection, streamProtocolHandler, error) { - req, err := http.NewRequestWithContext(ctx, e.method, e.url.String(), nil) - if err != nil { - return nil, nil, fmt.Errorf("error creating request: %v", err) - } - - conn, protocol, err := spdy.Negotiate( - e.upgrader, - &http.Client{Transport: e.transport}, - req, - e.protocols..., - ) - if err != nil { - return nil, nil, err - } - - var streamer streamProtocolHandler - - switch protocol { - case remotecommand.StreamProtocolV4Name: - streamer = newStreamProtocolV4(options) - case remotecommand.StreamProtocolV3Name: - streamer = newStreamProtocolV3(options) - case remotecommand.StreamProtocolV2Name: - streamer = newStreamProtocolV2(options) - case "": - klog.V(4).Infof("The server did not negotiate a streaming protocol version. Falling back to %s", remotecommand.StreamProtocolV1Name) - fallthrough - case remotecommand.StreamProtocolV1Name: - streamer = newStreamProtocolV1(options) - } - - return conn, streamer, nil -} - -// StreamWithContext opens a protocol streamer to the server and streams until a client closes -// the connection or the server disconnects or the context is done. -func (e *streamExecutor) StreamWithContext(ctx context.Context, options StreamOptions) error { - conn, streamer, err := e.newConnectionAndStream(ctx, options) - if err != nil { - return err - } - defer conn.Close() - - panicChan := make(chan any, 1) - errorChan := make(chan error, 1) - go func() { - defer func() { - if p := recover(); p != nil { - panicChan <- p - } - }() - errorChan <- streamer.stream(conn) - }() - - select { - case p := <-panicChan: - panic(p) - case err := <-errorChan: - return err - case <-ctx.Done(): - return ctx.Err() - } -} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/spdy.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/spdy.go new file mode 100644 index 000000000000..76ea946b5357 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/spdy.go @@ -0,0 +1,150 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package remotecommand + +import ( + "context" + "fmt" + "net/http" + "net/url" + + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/remotecommand" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/transport/spdy" + "k8s.io/klog/v2" +) + +// spdyStreamExecutor handles transporting standard shell streams over an httpstream connection. +type spdyStreamExecutor struct { + upgrader spdy.Upgrader + transport http.RoundTripper + + method string + url *url.URL + protocols []string +} + +// NewSPDYExecutor connects to the provided server and upgrades the connection to +// multiplexed bidirectional streams. +func NewSPDYExecutor(config *restclient.Config, method string, url *url.URL) (Executor, error) { + wrapper, upgradeRoundTripper, err := spdy.RoundTripperFor(config) + if err != nil { + return nil, err + } + return NewSPDYExecutorForTransports(wrapper, upgradeRoundTripper, method, url) +} + +// NewSPDYExecutorForTransports connects to the provided server using the given transport, +// upgrades the response using the given upgrader to multiplexed bidirectional streams. +func NewSPDYExecutorForTransports(transport http.RoundTripper, upgrader spdy.Upgrader, method string, url *url.URL) (Executor, error) { + return NewSPDYExecutorForProtocols( + transport, upgrader, method, url, + remotecommand.StreamProtocolV5Name, + remotecommand.StreamProtocolV4Name, + remotecommand.StreamProtocolV3Name, + remotecommand.StreamProtocolV2Name, + remotecommand.StreamProtocolV1Name, + ) +} + +// NewSPDYExecutorForProtocols connects to the provided server and upgrades the connection to +// multiplexed bidirectional streams using only the provided protocols. Exposed for testing, most +// callers should use NewSPDYExecutor or NewSPDYExecutorForTransports. +func NewSPDYExecutorForProtocols(transport http.RoundTripper, upgrader spdy.Upgrader, method string, url *url.URL, protocols ...string) (Executor, error) { + return &spdyStreamExecutor{ + upgrader: upgrader, + transport: transport, + method: method, + url: url, + protocols: protocols, + }, nil +} + +// Stream opens a protocol streamer to the server and streams until a client closes +// the connection or the server disconnects. +func (e *spdyStreamExecutor) Stream(options StreamOptions) error { + return e.StreamWithContext(context.Background(), options) +} + +// newConnectionAndStream creates a new SPDY connection and a stream protocol handler upon it. +func (e *spdyStreamExecutor) newConnectionAndStream(ctx context.Context, options StreamOptions) (httpstream.Connection, streamProtocolHandler, error) { + req, err := http.NewRequestWithContext(ctx, e.method, e.url.String(), nil) + if err != nil { + return nil, nil, fmt.Errorf("error creating request: %v", err) + } + + conn, protocol, err := spdy.Negotiate( + e.upgrader, + &http.Client{Transport: e.transport}, + req, + e.protocols..., + ) + if err != nil { + return nil, nil, err + } + + var streamer streamProtocolHandler + + switch protocol { + case remotecommand.StreamProtocolV5Name: + streamer = newStreamProtocolV5(options) + case remotecommand.StreamProtocolV4Name: + streamer = newStreamProtocolV4(options) + case remotecommand.StreamProtocolV3Name: + streamer = newStreamProtocolV3(options) + case remotecommand.StreamProtocolV2Name: + streamer = newStreamProtocolV2(options) + case "": + klog.V(4).Infof("The server did not negotiate a streaming protocol version. Falling back to %s", remotecommand.StreamProtocolV1Name) + fallthrough + case remotecommand.StreamProtocolV1Name: + streamer = newStreamProtocolV1(options) + } + + return conn, streamer, nil +} + +// StreamWithContext opens a protocol streamer to the server and streams until a client closes +// the connection or the server disconnects or the context is done. +func (e *spdyStreamExecutor) StreamWithContext(ctx context.Context, options StreamOptions) error { + conn, streamer, err := e.newConnectionAndStream(ctx, options) + if err != nil { + return err + } + defer conn.Close() + + panicChan := make(chan any, 1) + errorChan := make(chan error, 1) + go func() { + defer func() { + if p := recover(); p != nil { + panicChan <- p + } + }() + errorChan <- streamer.stream(conn) + }() + + select { + case p := <-panicChan: + panic(p) + case err := <-errorChan: + return err + case <-ctx.Done(): + return ctx.Err() + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/v5.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/v5.go new file mode 100644 index 000000000000..4da7bfb13990 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/v5.go @@ -0,0 +1,35 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package remotecommand + +// streamProtocolV5 add support for V5 of the remote command subprotocol. +// For the streamProtocolHandler, this version is the same as V4. +type streamProtocolV5 struct { + *streamProtocolV4 +} + +var _ streamProtocolHandler = &streamProtocolV5{} + +func newStreamProtocolV5(options StreamOptions) streamProtocolHandler { + return &streamProtocolV5{ + streamProtocolV4: newStreamProtocolV4(options).(*streamProtocolV4), + } +} + +func (p *streamProtocolV5) stream(conn streamCreator) error { + return p.streamProtocolV4.stream(conn) +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/websocket.go b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/websocket.go new file mode 100644 index 000000000000..9230027c0390 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/tools/remotecommand/websocket.go @@ -0,0 +1,485 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package remotecommand + +import ( + "context" + "fmt" + "io" + "net/http" + "sync" + "time" + + gwebsocket "github.com/gorilla/websocket" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/httpstream" + "k8s.io/apimachinery/pkg/util/remotecommand" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/transport/websocket" + "k8s.io/klog/v2" +) + +// writeDeadline defines the time that a write to the websocket connection +// must complete by, otherwise an i/o timeout occurs. The writeDeadline +// has nothing to do with a response from the other websocket connection +// endpoint; only that the message was successfully processed by the +// local websocket connection. The typical write deadline within the websocket +// library is one second. +const writeDeadline = 2 * time.Second + +var ( + _ Executor = &wsStreamExecutor{} + _ streamCreator = &wsStreamCreator{} + _ httpstream.Stream = &stream{} + + streamType2streamID = map[string]byte{ + v1.StreamTypeStdin: remotecommand.StreamStdIn, + v1.StreamTypeStdout: remotecommand.StreamStdOut, + v1.StreamTypeStderr: remotecommand.StreamStdErr, + v1.StreamTypeError: remotecommand.StreamErr, + v1.StreamTypeResize: remotecommand.StreamResize, + } +) + +const ( + // pingPeriod defines how often a heartbeat "ping" message is sent. + pingPeriod = 5 * time.Second + // pingReadDeadline defines the time waiting for a response heartbeat + // "pong" message before a timeout error occurs for websocket reading. + // This duration must always be greater than the "pingPeriod". By defining + // this deadline in terms of the ping period, we are essentially saying + // we can drop "X-1" (e.g. 3-1=2) pings before firing the timeout. + pingReadDeadline = (pingPeriod * 3) + (1 * time.Second) +) + +// wsStreamExecutor handles transporting standard shell streams over an httpstream connection. +type wsStreamExecutor struct { + transport http.RoundTripper + upgrader websocket.ConnectionHolder + method string + url string + // requested protocols in priority order (e.g. v5.channel.k8s.io before v4.channel.k8s.io). + protocols []string + // selected protocol from the handshake process; could be empty string if handshake fails. + negotiated string + // period defines how often a "ping" heartbeat message is sent to the other endpoint. + heartbeatPeriod time.Duration + // deadline defines the amount of time before "pong" response must be received. + heartbeatDeadline time.Duration +} + +// NewWebSocketExecutor allows to execute commands via a WebSocket connection. +func NewWebSocketExecutor(config *restclient.Config, method, url string) (Executor, error) { + transport, upgrader, err := websocket.RoundTripperFor(config) + if err != nil { + return nil, fmt.Errorf("error creating websocket transports: %v", err) + } + return &wsStreamExecutor{ + transport: transport, + upgrader: upgrader, + method: method, + url: url, + // Only supports V5 protocol for correct version skew functionality. + // Previous api servers will proxy upgrade requests to legacy websocket + // servers on container runtimes which support V1-V4. These legacy + // websocket servers will not handle the new CLOSE signal. + protocols: []string{remotecommand.StreamProtocolV5Name}, + heartbeatPeriod: pingPeriod, + heartbeatDeadline: pingReadDeadline, + }, nil +} + +// Deprecated: use StreamWithContext instead to avoid possible resource leaks. +// See https://github.com/kubernetes/kubernetes/pull/103177 for details. +func (e *wsStreamExecutor) Stream(options StreamOptions) error { + return e.StreamWithContext(context.Background(), options) +} + +// StreamWithContext upgrades an HTTPRequest to a WebSocket connection, and starts the various +// goroutines to implement the necessary streams over the connection. The "options" parameter +// defines which streams are requested. Returns an error if one occurred. This method is NOT +// safe to run concurrently with the same executor (because of the state stored in the upgrader). +func (e *wsStreamExecutor) StreamWithContext(ctx context.Context, options StreamOptions) error { + req, err := http.NewRequestWithContext(ctx, e.method, e.url, nil) + if err != nil { + return err + } + conn, err := websocket.Negotiate(e.transport, e.upgrader, req, e.protocols...) + if err != nil { + return err + } + if conn == nil { + panic(fmt.Errorf("websocket connection is nil")) + } + defer conn.Close() + e.negotiated = conn.Subprotocol() + klog.V(4).Infof("The subprotocol is %s", e.negotiated) + + var streamer streamProtocolHandler + switch e.negotiated { + case remotecommand.StreamProtocolV5Name: + streamer = newStreamProtocolV5(options) + case remotecommand.StreamProtocolV4Name: + streamer = newStreamProtocolV4(options) + case remotecommand.StreamProtocolV3Name: + streamer = newStreamProtocolV3(options) + case remotecommand.StreamProtocolV2Name: + streamer = newStreamProtocolV2(options) + case "": + klog.V(4).Infof("The server did not negotiate a streaming protocol version. Falling back to %s", remotecommand.StreamProtocolV1Name) + fallthrough + case remotecommand.StreamProtocolV1Name: + streamer = newStreamProtocolV1(options) + } + + panicChan := make(chan any, 1) + errorChan := make(chan error, 1) + go func() { + defer func() { + if p := recover(); p != nil { + panicChan <- p + } + }() + creator := newWSStreamCreator(conn) + go creator.readDemuxLoop( + e.upgrader.DataBufferSize(), + e.heartbeatPeriod, + e.heartbeatDeadline, + ) + errorChan <- streamer.stream(creator) + }() + + select { + case p := <-panicChan: + panic(p) + case err := <-errorChan: + return err + case <-ctx.Done(): + return ctx.Err() + } +} + +type wsStreamCreator struct { + conn *gwebsocket.Conn + connWriteLock sync.Mutex + streams map[byte]*stream + streamsMu sync.Mutex +} + +func newWSStreamCreator(conn *gwebsocket.Conn) *wsStreamCreator { + return &wsStreamCreator{ + conn: conn, + streams: map[byte]*stream{}, + } +} + +func (c *wsStreamCreator) getStream(id byte) *stream { + c.streamsMu.Lock() + defer c.streamsMu.Unlock() + return c.streams[id] +} + +func (c *wsStreamCreator) setStream(id byte, s *stream) { + c.streamsMu.Lock() + defer c.streamsMu.Unlock() + c.streams[id] = s +} + +// CreateStream uses id from passed headers to create a stream over "c.conn" connection. +// Returns a Stream structure or nil and an error if one occurred. +func (c *wsStreamCreator) CreateStream(headers http.Header) (httpstream.Stream, error) { + streamType := headers.Get(v1.StreamType) + id, ok := streamType2streamID[streamType] + if !ok { + return nil, fmt.Errorf("unknown stream type: %s", streamType) + } + if s := c.getStream(id); s != nil { + return nil, fmt.Errorf("duplicate stream for type %s", streamType) + } + reader, writer := io.Pipe() + s := &stream{ + headers: headers, + readPipe: reader, + writePipe: writer, + conn: c.conn, + connWriteLock: &c.connWriteLock, + id: id, + } + c.setStream(id, s) + return s, nil +} + +// readDemuxLoop is the reading processor for this endpoint of the websocket +// connection. This loop reads the connection, and demultiplexes the data +// into one of the individual stream pipes (by checking the stream id). This +// loop can *not* be run concurrently, because there can only be one websocket +// connection reader at a time (a read mutex would provide no benefit). +func (c *wsStreamCreator) readDemuxLoop(bufferSize int, period time.Duration, deadline time.Duration) { + // Initialize and start the ping/pong heartbeat. + h := newHeartbeat(c.conn, period, deadline) + // Set initial timeout for websocket connection reading. + if err := c.conn.SetReadDeadline(time.Now().Add(deadline)); err != nil { + klog.Errorf("Websocket initial setting read deadline failed %v", err) + return + } + go h.start() + // Buffer size must correspond to the same size allocated + // for the read buffer during websocket client creation. A + // difference can cause incomplete connection reads. + readBuffer := make([]byte, bufferSize) + for { + // NextReader() only returns data messages (BinaryMessage or Text + // Message). Even though this call will never return control frames + // such as ping, pong, or close, this call is necessary for these + // message types to be processed. There can only be one reader + // at a time, so this reader loop must *not* be run concurrently; + // there is no lock for reading. Calling "NextReader()" before the + // current reader has been processed will close the current reader. + // If the heartbeat read deadline times out, this "NextReader()" will + // return an i/o error, and error handling will clean up. + messageType, r, err := c.conn.NextReader() + if err != nil { + websocketErr, ok := err.(*gwebsocket.CloseError) + if ok && websocketErr.Code == gwebsocket.CloseNormalClosure { + err = nil // readers will get io.EOF as it's a normal closure + } else { + err = fmt.Errorf("next reader: %w", err) + } + c.closeAllStreamReaders(err) + return + } + // All remote command protocols send/receive only binary data messages. + if messageType != gwebsocket.BinaryMessage { + c.closeAllStreamReaders(fmt.Errorf("unexpected message type: %d", messageType)) + return + } + // It's ok to read just a single byte because the underlying library wraps the actual + // connection with a buffered reader anyway. + _, err = io.ReadFull(r, readBuffer[:1]) + if err != nil { + c.closeAllStreamReaders(fmt.Errorf("read stream id: %w", err)) + return + } + streamID := readBuffer[0] + s := c.getStream(streamID) + if s == nil { + klog.Errorf("Unknown stream id %d, discarding message", streamID) + continue + } + for { + nr, errRead := r.Read(readBuffer) + if nr > 0 { + // Write the data to the stream's pipe. This can block. + _, errWrite := s.writePipe.Write(readBuffer[:nr]) + if errWrite != nil { + // Pipe must have been closed by the stream user. + // Nothing to do, discard the message. + break + } + } + if errRead != nil { + if errRead == io.EOF { + break + } + c.closeAllStreamReaders(fmt.Errorf("read message: %w", err)) + return + } + } + } +} + +// closeAllStreamReaders closes readers in all streams. +// This unblocks all stream.Read() calls. +func (c *wsStreamCreator) closeAllStreamReaders(err error) { + c.streamsMu.Lock() + defer c.streamsMu.Unlock() + for _, s := range c.streams { + // Closing writePipe unblocks all readPipe.Read() callers and prevents any future writes. + _ = s.writePipe.CloseWithError(err) + } +} + +type stream struct { + headers http.Header + readPipe *io.PipeReader + writePipe *io.PipeWriter + // conn is used for writing directly into the connection. + // Is nil after Close() / Reset() to prevent future writes. + conn *gwebsocket.Conn + // connWriteLock protects conn against concurrent write operations. There must be a single writer and a single reader only. + // The mutex is shared across all streams because the underlying connection is shared. + connWriteLock *sync.Mutex + id byte +} + +func (s *stream) Read(p []byte) (n int, err error) { + return s.readPipe.Read(p) +} + +// Write writes directly to the underlying WebSocket connection. +func (s *stream) Write(p []byte) (n int, err error) { + klog.V(4).Infof("Write() on stream %d", s.id) + defer klog.V(4).Infof("Write() done on stream %d", s.id) + s.connWriteLock.Lock() + defer s.connWriteLock.Unlock() + if s.conn == nil { + return 0, fmt.Errorf("write on closed stream %d", s.id) + } + err = s.conn.SetWriteDeadline(time.Now().Add(writeDeadline)) + if err != nil { + klog.V(7).Infof("Websocket setting write deadline failed %v", err) + return 0, err + } + // Message writer buffers the message data, so we don't need to do that ourselves. + // Just write id and the data as two separate writes to avoid allocating an intermediate buffer. + w, err := s.conn.NextWriter(gwebsocket.BinaryMessage) + if err != nil { + return 0, err + } + defer func() { + if w != nil { + w.Close() + } + }() + _, err = w.Write([]byte{s.id}) + if err != nil { + return 0, err + } + n, err = w.Write(p) + if err != nil { + return n, err + } + err = w.Close() + w = nil + return n, err +} + +// Close half-closes the stream, indicating this side is finished with the stream. +func (s *stream) Close() error { + klog.V(4).Infof("Close() on stream %d", s.id) + defer klog.V(4).Infof("Close() done on stream %d", s.id) + s.connWriteLock.Lock() + defer s.connWriteLock.Unlock() + if s.conn == nil { + return fmt.Errorf("Close() on already closed stream %d", s.id) + } + // Communicate the CLOSE stream signal to the other websocket endpoint. + err := s.conn.WriteMessage(gwebsocket.BinaryMessage, []byte{remotecommand.StreamClose, s.id}) + s.conn = nil + return err +} + +func (s *stream) Reset() error { + klog.V(4).Infof("Reset() on stream %d", s.id) + defer klog.V(4).Infof("Reset() done on stream %d", s.id) + s.Close() + return s.writePipe.Close() +} + +func (s *stream) Headers() http.Header { + return s.headers +} + +func (s *stream) Identifier() uint32 { + return uint32(s.id) +} + +// heartbeat encasulates data necessary for the websocket ping/pong heartbeat. This +// heartbeat works by setting a read deadline on the websocket connection, then +// pushing this deadline into the future for every successful heartbeat. If the +// heartbeat "pong" fails to respond within the deadline, then the "NextReader()" call +// inside the "readDemuxLoop" will return an i/o error prompting a connection close +// and cleanup. +type heartbeat struct { + conn *gwebsocket.Conn + // period defines how often a "ping" heartbeat message is sent to the other endpoint + period time.Duration + // closing the "closer" channel will clean up the heartbeat timers + closer chan struct{} + // optional data to send with "ping" message + message []byte + // optionally received data message with "pong" message, same as sent with ping + pongMessage []byte +} + +// newHeartbeat creates heartbeat structure encapsulating fields necessary to +// run the websocket connection ping/pong mechanism and sets up handlers on +// the websocket connection. +func newHeartbeat(conn *gwebsocket.Conn, period time.Duration, deadline time.Duration) *heartbeat { + h := &heartbeat{ + conn: conn, + period: period, + closer: make(chan struct{}), + } + // Set up handler for receiving returned "pong" message from other endpoint + // by pushing the read deadline into the future. The "msg" received could + // be empty. + h.conn.SetPongHandler(func(msg string) error { + // Push the read deadline into the future. + klog.V(8).Infof("Pong message received (%s)--resetting read deadline", msg) + err := h.conn.SetReadDeadline(time.Now().Add(deadline)) + if err != nil { + klog.Errorf("Websocket setting read deadline failed %v", err) + return err + } + if len(msg) > 0 { + h.pongMessage = []byte(msg) + } + return nil + }) + // Set up handler to cleanup timers when this endpoint receives "Close" message. + closeHandler := h.conn.CloseHandler() + h.conn.SetCloseHandler(func(code int, text string) error { + close(h.closer) + return closeHandler(code, text) + }) + return h +} + +// setMessage is optional data sent with "ping" heartbeat. According to the websocket RFC +// this data sent with "ping" message should be returned in "pong" message. +func (h *heartbeat) setMessage(msg string) { + h.message = []byte(msg) +} + +// start the heartbeat by setting up necesssary handlers and looping by sending "ping" +// message every "period" until the "closer" channel is closed. +func (h *heartbeat) start() { + // Loop to continually send "ping" message through websocket connection every "period". + t := time.NewTicker(h.period) + defer t.Stop() + for { + select { + case <-h.closer: + klog.V(8).Infof("closed channel--returning") + return + case <-t.C: + // "WriteControl" does not need to be protected by a mutex. According to + // gorilla/websockets library docs: "The Close and WriteControl methods can + // be called concurrently with all other methods." + if err := h.conn.WriteControl(gwebsocket.PingMessage, h.message, time.Now().Add(writeDeadline)); err == nil { + klog.V(8).Infof("Websocket Ping succeeeded") + } else { + klog.Errorf("Websocket Ping failed: %v", err) + // Continue, in case this is a transient failure. + // c.conn.CloseChan above will tell us when the connection is + // actually closed. + } + } + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/transport/transport.go b/cluster-autoscaler/vendor/k8s.io/client-go/transport/transport.go index 78060719a987..4770331a0e1c 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/transport/transport.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/transport/transport.go @@ -96,6 +96,32 @@ func TLSConfigFor(c *Config) (*tls.Config, error) { } if c.HasCA() { + /* + kubernetes mutual (2-way) x509 between client and apiserver: + + 1. apiserver sending its apiserver certificate along with its publickey to client + >2. client verifies the apiserver certificate sent against its cluster certificate authority data + 3. client sending its client certificate along with its public key to the apiserver + 4. apiserver verifies the client certificate sent against its cluster certificate authority data + + description: + here, with this block, + cluster certificate authority data gets loaded into TLS before the handshake process + for client to later during the handshake verify the apiserver certificate + + normal args related to this stage: + --certificate-authority='': + Path to a cert file for the certificate authority + + (retrievable from "kubectl options" command) + (suggested by @deads2k) + + see also: + - for the step 1, see: staging/src/k8s.io/apiserver/pkg/server/options/serving.go + - for the step 3, see: a few lines below in this file + - for the step 4, see: staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go + */ + rootCAs, err := rootCertPool(c.TLS.CAData) if err != nil { return nil, fmt.Errorf("unable to load root certificates: %w", err) @@ -121,6 +147,35 @@ func TLSConfigFor(c *Config) (*tls.Config, error) { } if c.HasCertAuth() || c.HasCertCallback() { + + /* + kubernetes mutual (2-way) x509 between client and apiserver: + + 1. apiserver sending its apiserver certificate along with its publickey to client + 2. client verifies the apiserver certificate sent against its cluster certificate authority data + >3. client sending its client certificate along with its public key to the apiserver + 4. apiserver verifies the client certificate sent against its cluster certificate authority data + + description: + here, with this callback function, + client certificate and pub key get loaded into TLS during the handshake process + for apiserver to later in the step 4 verify the client certificate + + normal args related to this stage: + --client-certificate='': + Path to a client certificate file for TLS + --client-key='': + Path to a client key file for TLS + + (retrievable from "kubectl options" command) + (suggested by @deads2k) + + see also: + - for the step 1, see: staging/src/k8s.io/apiserver/pkg/server/options/serving.go + - for the step 2, see: a few lines above in this file + - for the step 4, see: staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go + */ + tlsConfig.GetClientCertificate = func(*tls.CertificateRequestInfo) (*tls.Certificate, error) { // Note: static key/cert data always take precedence over cert // callback. diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/transport/websocket/roundtripper.go b/cluster-autoscaler/vendor/k8s.io/client-go/transport/websocket/roundtripper.go new file mode 100644 index 000000000000..e2a4a8abccf8 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/client-go/transport/websocket/roundtripper.go @@ -0,0 +1,166 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package websocket + +import ( + "crypto/tls" + "fmt" + "net/http" + "net/url" + + gwebsocket "github.com/gorilla/websocket" + + "k8s.io/apimachinery/pkg/util/httpstream" + utilnet "k8s.io/apimachinery/pkg/util/net" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/transport" +) + +var ( + _ utilnet.TLSClientConfigHolder = &RoundTripper{} + _ http.RoundTripper = &RoundTripper{} +) + +// ConnectionHolder defines functions for structure providing +// access to the websocket connection. +type ConnectionHolder interface { + DataBufferSize() int + Connection() *gwebsocket.Conn +} + +// RoundTripper knows how to establish a connection to a remote WebSocket endpoint and make it available for use. +// RoundTripper must not be reused. +type RoundTripper struct { + // TLSConfig holds the TLS configuration settings to use when connecting + // to the remote server. + TLSConfig *tls.Config + + // Proxier specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxier func(req *http.Request) (*url.URL, error) + + // Conn holds the WebSocket connection after a round trip. + Conn *gwebsocket.Conn +} + +// Connection returns the stored websocket connection. +func (rt *RoundTripper) Connection() *gwebsocket.Conn { + return rt.Conn +} + +// DataBufferSize returns the size of buffers for the +// websocket connection. +func (rt *RoundTripper) DataBufferSize() int { + return 32 * 1024 +} + +// TLSClientConfig implements pkg/util/net.TLSClientConfigHolder. +func (rt *RoundTripper) TLSClientConfig() *tls.Config { + return rt.TLSConfig +} + +// RoundTrip connects to the remote websocket using the headers in the request and the TLS +// configuration from the config +func (rt *RoundTripper) RoundTrip(request *http.Request) (retResp *http.Response, retErr error) { + defer func() { + if request.Body != nil { + err := request.Body.Close() + if retErr == nil { + retErr = err + } + } + }() + + // set the protocol version directly on the dialer from the header + protocolVersions := request.Header[httpstream.HeaderProtocolVersion] + delete(request.Header, httpstream.HeaderProtocolVersion) + + dialer := gwebsocket.Dialer{ + Proxy: rt.Proxier, + TLSClientConfig: rt.TLSConfig, + Subprotocols: protocolVersions, + ReadBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for + WriteBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for + } + switch request.URL.Scheme { + case "https": + request.URL.Scheme = "wss" + case "http": + request.URL.Scheme = "ws" + default: + return nil, fmt.Errorf("unknown url scheme: %s", request.URL.Scheme) + } + wsConn, resp, err := dialer.DialContext(request.Context(), request.URL.String(), request.Header) + if err != nil { + if err != gwebsocket.ErrBadHandshake { + return nil, err + } + return nil, fmt.Errorf("unable to upgrade connection: %v", err) + } + + rt.Conn = wsConn + + return resp, nil +} + +// RoundTripperFor transforms the passed rest config into a wrapped roundtripper, as well +// as a pointer to the websocket RoundTripper. The websocket RoundTripper contains the +// websocket connection after RoundTrip() on the wrapper. Returns an error if there is +// a problem creating the round trippers. +func RoundTripperFor(config *restclient.Config) (http.RoundTripper, ConnectionHolder, error) { + transportCfg, err := config.TransportConfig() + if err != nil { + return nil, nil, err + } + tlsConfig, err := transport.TLSConfigFor(transportCfg) + if err != nil { + return nil, nil, err + } + proxy := config.Proxy + if proxy == nil { + proxy = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) + } + + upgradeRoundTripper := &RoundTripper{ + TLSConfig: tlsConfig, + Proxier: proxy, + } + wrapper, err := transport.HTTPWrappersForConfig(transportCfg, upgradeRoundTripper) + if err != nil { + return nil, nil, err + } + return wrapper, upgradeRoundTripper, nil +} + +// Negotiate opens a connection to a remote server and attempts to negotiate +// a WebSocket connection. Upon success, it returns the negotiated connection. +// The round tripper rt must use the WebSocket round tripper wsRt - see RoundTripperFor. +func Negotiate(rt http.RoundTripper, connectionInfo ConnectionHolder, req *http.Request, protocols ...string) (*gwebsocket.Conn, error) { + req.Header[httpstream.HeaderProtocolVersion] = protocols + resp, err := rt.RoundTrip(req) + if err != nil { + return nil, fmt.Errorf("error sending request: %v", err) + } + err = resp.Body.Close() + if err != nil { + connectionInfo.Connection().Close() + return nil, fmt.Errorf("error closing response body: %v", err) + } + return connectionInfo.Connection(), nil +} diff --git a/cluster-autoscaler/vendor/k8s.io/client-go/util/workqueue/queue.go b/cluster-autoscaler/vendor/k8s.io/client-go/util/workqueue/queue.go index 380c0645526c..a363d1afb4f5 100644 --- a/cluster-autoscaler/vendor/k8s.io/client-go/util/workqueue/queue.go +++ b/cluster-autoscaler/vendor/k8s.io/client-go/util/workqueue/queue.go @@ -238,8 +238,12 @@ func (q *Type) Done(item interface{}) { // ShutDown will cause q to ignore all new items added to it and // immediately instruct the worker goroutines to exit. func (q *Type) ShutDown() { - q.setDrain(false) - q.shutdown() + q.cond.L.Lock() + defer q.cond.L.Unlock() + + q.drain = false + q.shuttingDown = true + q.cond.Broadcast() } // ShutDownWithDrain will cause q to ignore all new items added to it. As soon @@ -252,53 +256,16 @@ func (q *Type) ShutDown() { // ShutDownWithDrain, as to force the queue shut down to terminate immediately // without waiting for the drainage. func (q *Type) ShutDownWithDrain() { - q.setDrain(true) - q.shutdown() - for q.isProcessing() && q.shouldDrain() { - q.waitForProcessing() - } -} - -// isProcessing indicates if there are still items on the work queue being -// processed. It's used to drain the work queue on an eventual shutdown. -func (q *Type) isProcessing() bool { - q.cond.L.Lock() - defer q.cond.L.Unlock() - return q.processing.len() != 0 -} - -// waitForProcessing waits for the worker goroutines to finish processing items -// and call Done on them. -func (q *Type) waitForProcessing() { - q.cond.L.Lock() - defer q.cond.L.Unlock() - // Ensure that we do not wait on a queue which is already empty, as that - // could result in waiting for Done to be called on items in an empty queue - // which has already been shut down, which will result in waiting - // indefinitely. - if q.processing.len() == 0 { - return - } - q.cond.Wait() -} - -func (q *Type) setDrain(shouldDrain bool) { - q.cond.L.Lock() - defer q.cond.L.Unlock() - q.drain = shouldDrain -} - -func (q *Type) shouldDrain() bool { q.cond.L.Lock() defer q.cond.L.Unlock() - return q.drain -} -func (q *Type) shutdown() { - q.cond.L.Lock() - defer q.cond.L.Unlock() + q.drain = true q.shuttingDown = true q.cond.Broadcast() + + for q.processing.len() != 0 && q.drain { + q.cond.Wait() + } } func (q *Type) ShuttingDown() bool { diff --git a/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/options.go b/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/options.go index 37aeb01e1c09..15be5a86c073 100644 --- a/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/options.go +++ b/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/options.go @@ -263,7 +263,7 @@ func (o *CloudControllerManagerOptions) Validate(allControllers []string, disabl if o.WebhookServing != nil { errors = append(errors, o.WebhookServing.Validate()...) - if o.WebhookServing.BindPort == o.SecureServing.BindPort { + if o.WebhookServing.BindPort == o.SecureServing.BindPort && o.WebhookServing.BindPort != 0 { errors = append(errors, fmt.Errorf("--webhook-secure-port cannot be the same value as --secure-port")) } } diff --git a/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/webhook.go b/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/webhook.go index 719a701025a0..346e4218d409 100644 --- a/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/webhook.go +++ b/cluster-autoscaler/vendor/k8s.io/cloud-provider/options/webhook.go @@ -122,7 +122,7 @@ func (o *WebhookServingOptions) AddFlags(fs *pflag.FlagSet) { "associated interface(s) must be reachable by the rest of the cluster, and by CLI/web "+ fmt.Sprintf("clients. If set to an unspecified address (0.0.0.0 or ::), all interfaces will be used. If unset, defaults to %v.", o.BindAddress)) - fs.IntVar(&o.BindPort, "webhook-secure-port", o.BindPort, fmt.Sprintf("Secure port to serve cloud provider webhooks. If unset, defaults to %d.", o.BindPort)) + fs.IntVar(&o.BindPort, "webhook-secure-port", o.BindPort, "Secure port to serve cloud provider webhooks. If 0, don't serve webhooks at all.") fs.StringVar(&o.ServerCert.CertDirectory, "webhook-cert-dir", o.ServerCert.CertDirectory, ""+ "The directory where the TLS certs are located. "+ diff --git a/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go b/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go index e363c7db2c55..fd436c3d37d0 100644 --- a/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go +++ b/cluster-autoscaler/vendor/k8s.io/cloud-provider/service/helpers/helper.go @@ -180,5 +180,8 @@ func ingressEqual(lhs, rhs *v1.LoadBalancerIngress) bool { if lhs.Hostname != rhs.Hostname { return false } + if lhs.IPMode != rhs.IPMode { + return false + } return true } diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go index f8ee7d070907..4875393913b9 100644 --- a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/factory.go @@ -75,6 +75,7 @@ func (g *factoryGenerator) GenerateType(c *generator.Context, t *types.Type, w i } m := map[string]interface{}{ "cacheSharedIndexInformer": c.Universe.Type(cacheSharedIndexInformer), + "cacheTransformFunc": c.Universe.Type(cacheTransformFunc), "groupVersions": g.groupVersions, "gvInterfaces": gvInterfaces, "gvNewFuncs": gvNewFuncs, @@ -109,6 +110,7 @@ type sharedInformerFactory struct { lock {{.syncMutex|raw}} defaultResync {{.timeDuration|raw}} customResync map[{{.reflectType|raw}}]{{.timeDuration|raw}} + transform {{.cacheTransformFunc|raw}} informers map[{{.reflectType|raw}}]{{.cacheSharedIndexInformer|raw}} // startedInformers is used for tracking which informers have been started. @@ -147,6 +149,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform {{.cacheTransformFunc|raw}}) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client {{.clientSetInterface|raw}}, defaultResync {{.timeDuration|raw}}) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -252,11 +262,11 @@ func (f *sharedInformerFactory) InformerFor(obj {{.runtimeObject|raw}}, newFunc } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer } - ` var sharedInformerFactoryInterface = ` diff --git a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go index 27d4bd51ab12..fc1f7786f663 100644 --- a/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go +++ b/cluster-autoscaler/vendor/k8s.io/code-generator/cmd/informer-gen/generators/types.go @@ -28,6 +28,7 @@ var ( cacheNewGenericLister = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "NewGenericLister"} cacheNewSharedIndexInformer = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "NewSharedIndexInformer"} cacheSharedIndexInformer = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "SharedIndexInformer"} + cacheTransformFunc = types.Name{Package: "k8s.io/client-go/tools/cache", Name: "TransformFunc"} listOptions = types.Name{Package: "k8s.io/kubernetes/pkg/apis/core", Name: "ListOptions"} reflectType = types.Name{Package: "reflect", Name: "Type"} runtimeObject = types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "Object"} diff --git a/cluster-autoscaler/vendor/k8s.io/component-base/metrics/buckets.go b/cluster-autoscaler/vendor/k8s.io/component-base/metrics/buckets.go index 48d3093e0cd9..27a57eb7f8b5 100644 --- a/cluster-autoscaler/vendor/k8s.io/component-base/metrics/buckets.go +++ b/cluster-autoscaler/vendor/k8s.io/component-base/metrics/buckets.go @@ -33,6 +33,16 @@ func ExponentialBuckets(start, factor float64, count int) []float64 { return prometheus.ExponentialBuckets(start, factor, count) } +// ExponentialBucketsRange creates 'count' buckets, where the lowest bucket is +// 'min' and the highest bucket is 'max'. The final +Inf bucket is not counted +// and not included in the returned slice. The returned slice is meant to be +// used for the Buckets field of HistogramOpts. +// +// The function panics if 'count' is 0 or negative, if 'min' is 0 or negative. +func ExponentialBucketsRange(min, max float64, count int) []float64 { + return prometheus.ExponentialBucketsRange(min, max, count) +} + // MergeBuckets merges buckets together func MergeBuckets(buckets ...[]float64) []float64 { result := make([]float64, 1) diff --git a/cluster-autoscaler/vendor/k8s.io/component-base/metrics/prometheus/slis/metrics.go b/cluster-autoscaler/vendor/k8s.io/component-base/metrics/prometheus/slis/metrics.go index 7907dfad12aa..3d464d12d75e 100644 --- a/cluster-autoscaler/vendor/k8s.io/component-base/metrics/prometheus/slis/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/component-base/metrics/prometheus/slis/metrics.go @@ -37,7 +37,7 @@ var ( Namespace: "kubernetes", Name: "healthcheck", Help: "This metric records the result of a single healthcheck.", - StabilityLevel: k8smetrics.BETA, + StabilityLevel: k8smetrics.STABLE, }, []string{"name", "type"}, ) @@ -48,7 +48,7 @@ var ( Namespace: "kubernetes", Name: "healthchecks_total", Help: "This metric records the results of all healthcheck.", - StabilityLevel: k8smetrics.BETA, + StabilityLevel: k8smetrics.STABLE, }, []string{"name", "type", "status"}, ) diff --git a/cluster-autoscaler/vendor/k8s.io/component-helpers/apimachinery/lease/controller.go b/cluster-autoscaler/vendor/k8s.io/component-helpers/apimachinery/lease/controller.go index 843eb36133ce..282eeea2426e 100644 --- a/cluster-autoscaler/vendor/k8s.io/component-helpers/apimachinery/lease/controller.go +++ b/cluster-autoscaler/vendor/k8s.io/component-helpers/apimachinery/lease/controller.go @@ -65,9 +65,8 @@ type controller struct { latestLease *coordinationv1.Lease // newLeasePostProcessFunc allows customizing a lease object (e.g. setting OwnerReference) - // before every time the lease is created/refreshed(updated). Note that an error will block - // a lease CREATE, causing the controller to retry next time, but an error won't block a - // lease UPDATE. + // before every time the lease is created/refreshed(updated). + // Note that an error will block the lease operation. newLeasePostProcessFunc ProcessLeaseFunc } @@ -184,17 +183,21 @@ func (c *controller) ensureLease(ctx context.Context) (*coordinationv1.Lease, bo // call this once you're sure the lease has been created func (c *controller) retryUpdateLease(ctx context.Context, base *coordinationv1.Lease) error { for i := 0; i < maxUpdateRetries; i++ { - leaseToUpdate, _ := c.newLease(base) - lease, err := c.leaseClient.Update(ctx, leaseToUpdate, metav1.UpdateOptions{}) - if err == nil { - c.latestLease = lease - return nil - } - klog.FromContext(ctx).Error(err, "Failed to update lease") - // OptimisticLockError requires getting the newer version of lease to proceed. - if apierrors.IsConflict(err) { - base, _ = c.backoffEnsureLease(ctx) - continue + leaseToUpdate, err := c.newLease(base) + if err != nil { + klog.FromContext(ctx).Error(err, "Failed to prepare lease") + } else { + lease, err := c.leaseClient.Update(ctx, leaseToUpdate, metav1.UpdateOptions{}) + if err == nil { + c.latestLease = lease + return nil + } + klog.FromContext(ctx).Error(err, "Failed to update lease") + // OptimisticLockError requires getting the newer version of lease to proceed. + if apierrors.IsConflict(err) { + base, _ = c.backoffEnsureLease(ctx) + continue + } } if i > 0 && c.onRepeatedHeartbeatFailure != nil { c.onRepeatedHeartbeatFailure() diff --git a/cluster-autoscaler/vendor/k8s.io/controller-manager/pkg/features/kube_features.go b/cluster-autoscaler/vendor/k8s.io/controller-manager/pkg/features/kube_features.go index 8864be325e15..ab5d83885fef 100644 --- a/cluster-autoscaler/vendor/k8s.io/controller-manager/pkg/features/kube_features.go +++ b/cluster-autoscaler/vendor/k8s.io/controller-manager/pkg/features/kube_features.go @@ -40,6 +40,7 @@ const ( // owner: @danwinship // alpha: v1.27 + // beta: v1.29 // // Enables dual-stack values in the // `alpha.kubernetes.io/provided-node-ip` annotation @@ -62,6 +63,6 @@ func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.Mutable // To add a new feature, define a key for it at k8s.io/api/pkg/features and add it here. var cloudPublicFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha}, - CloudDualStackNodeIPs: {Default: false, PreRelease: featuregate.Alpha}, + CloudDualStackNodeIPs: {Default: true, PreRelease: featuregate.Beta}, StableLoadBalancerNodeSet: {Default: true, PreRelease: featuregate.Beta}, } diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go b/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go index 93d863f0e20d..b81ceb93afb7 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/args/args.go @@ -32,7 +32,6 @@ import ( "k8s.io/gengo/generator" "k8s.io/gengo/namer" "k8s.io/gengo/parser" - "k8s.io/gengo/types" "github.com/spf13/pflag" ) @@ -155,24 +154,6 @@ func (g *GeneratorArgs) NewBuilder() (*parser.Builder, error) { return b, nil } -// InputIncludes returns true if the given package is a (sub) package of one of -// the InputDirs. -func (g *GeneratorArgs) InputIncludes(p *types.Package) bool { - for _, dir := range g.InputDirs { - d := dir - if strings.HasSuffix(d, "...") { - d = strings.TrimSuffix(d, "...") - } - if strings.HasPrefix(d, "./vendor/") { - d = strings.TrimPrefix(d, "./vendor/") - } - if strings.HasPrefix(p.Path, d) { - return true - } - } - return false -} - // DefaultSourceTree returns the /src directory of the first entry in $GOPATH. // If $GOPATH is empty, it returns "./". Useful as a default output location. func DefaultSourceTree() string { diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go index 03f9109c73a1..170f6d7f1627 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go @@ -173,19 +173,25 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat pkgNeedsGeneration := (ptagValue == tagValuePackage) if !pkgNeedsGeneration { // If the pkg-scoped tag did not exist, scan all types for one that - // explicitly wants generation. + // explicitly wants generation. Ensure all types that want generation + // can be copied. + var uncopyable []string for _, t := range pkg.Types { klog.V(5).Infof(" considering type %q", t.Name.String()) ttag := extractEnabledTypeTag(t) if ttag != nil && ttag.value == "true" { klog.V(5).Infof(" tag=true") if !copyableType(t) { - klog.Fatalf("Type %v requests deepcopy generation but is not copyable", t) + uncopyable = append(uncopyable, fmt.Sprintf("%v", t)) + } else { + pkgNeedsGeneration = true } - pkgNeedsGeneration = true - break } } + if len(uncopyable) > 0 { + klog.Fatalf("Types requested deepcopy generation but are not copyable: %s", + strings.Join(uncopyable, ", ")) + } } if pkgNeedsGeneration { diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go index 220ec7e0d8ad..e9ed41de36d3 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go @@ -23,6 +23,7 @@ import ( "io" "path/filepath" "reflect" + "regexp" "strconv" "strings" @@ -441,6 +442,8 @@ func newCallTreeForType(existingDefaulters, newDefaulters defaulterFuncMap) *cal } } +// resolveType follows pointers and aliases of `t` until reaching the first +// non-pointer type in `t's` herarchy func resolveTypeAndDepth(t *types.Type) (*types.Type, int) { var prev *types.Type depth := 0 @@ -456,6 +459,42 @@ func resolveTypeAndDepth(t *types.Type) (*types.Type, int) { return t, depth } +// getPointerElementPath follows pointers and aliases to returns all +// pointer elements in the path from the given type, to its base value type. +// +// Example: +// +// type MyString string +// type MyStringPointer *MyString +// type MyStringPointerPointer *MyStringPointer +// type MyStringAlias MyStringPointer +// type MyStringAliasPointer *MyStringAlias +// type MyStringAliasDoublePointer **MyStringAlias +// +// t | defaultPointerElementPath(t) +// ---------------------------|---------------------------------------- +// MyString | [] +// MyStringPointer | [MyString] +// MyStringPointerPointer | [MyStringPointer, MyString] +// MyStringAlias | [MyStringPointer, MyString] +// MyStringAliasPointer | [MyStringAlias, MyStringPointer, MyString] +// MyStringAliasDoublePointer | [*MyStringAlias, MyStringAlias, MyStringPointer, MyString] +func getPointerElementPath(t *types.Type) []*types.Type { + var path []*types.Type + for t != nil { + switch t.Kind { + case types.Alias: + t = t.Underlying + case types.Pointer: + t = t.Elem + path = append(path, t) + default: + t = nil + } + } + return path +} + // getNestedDefault returns the first default value when resolving alias types func getNestedDefault(t *types.Type) string { var prev *types.Type @@ -497,29 +536,57 @@ func mustEnforceDefault(t *types.Type, depth int, omitEmpty bool) (interface{}, } } -func populateDefaultValue(node *callNode, t *types.Type, tags string, commentLines []string) *callNode { +var refRE = regexp.MustCompile(`^ref\((?P[^"]+)\)$`) +var refREIdentIndex = refRE.SubexpIndex("reference") + +// ParseSymbolReference looks for strings that match one of the following: +// - ref(Ident) +// - ref(pkgpath.Ident) +// If the input string matches either of these, it will return the (optional) +// pkgpath, the Ident, and true. Otherwise it will return empty strings and +// false. +func ParseSymbolReference(s, sourcePackage string) (types.Name, bool) { + matches := refRE.FindStringSubmatch(s) + if len(matches) < refREIdentIndex || matches[refREIdentIndex] == "" { + return types.Name{}, false + } + + contents := matches[refREIdentIndex] + name := types.ParseFullyQualifiedName(contents) + if len(name.Package) == 0 { + name.Package = sourcePackage + } + return name, true +} + +func populateDefaultValue(node *callNode, t *types.Type, tags string, commentLines []string, commentPackage string) *callNode { defaultMap := extractDefaultTag(commentLines) var defaultString string if len(defaultMap) == 1 { defaultString = defaultMap[0] + } else if len(defaultMap) > 1 { + klog.Fatalf("Found more than one default tag for %v", t.Kind) } - t, depth := resolveTypeAndDepth(t) + baseT, depth := resolveTypeAndDepth(t) if depth > 0 && defaultString == "" { defaultString = getNestedDefault(t) } - if len(defaultMap) > 1 { - klog.Fatalf("Found more than one default tag for %v", t.Kind) - } else if len(defaultMap) == 0 { + + if len(defaultString) == 0 { return node } + var symbolReference types.Name var defaultValue interface{} - if err := json.Unmarshal([]byte(defaultString), &defaultValue); err != nil { + if id, ok := ParseSymbolReference(defaultString, commentPackage); ok { + symbolReference = id + defaultString = "" + } else if err := json.Unmarshal([]byte(defaultString), &defaultValue); err != nil { klog.Fatalf("Failed to unmarshal default: %v", err) } omitEmpty := strings.Contains(reflect.StructTag(tags).Get("json"), "omitempty") - if enforced, err := mustEnforceDefault(t, depth, omitEmpty); err != nil { + if enforced, err := mustEnforceDefault(baseT, depth, omitEmpty); err != nil { klog.Fatal(err) } else if enforced != nil { if defaultValue != nil { @@ -540,10 +607,11 @@ func populateDefaultValue(node *callNode, t *types.Type, tags string, commentLin node.markerOnly = true } - node.defaultIsPrimitive = t.IsPrimitive() - node.defaultType = t.String() - node.defaultValue = defaultString - node.defaultDepth = depth + node.defaultIsPrimitive = baseT.IsPrimitive() + node.defaultType = baseT + node.defaultTopLevelType = t + node.defaultValue.InlineConstant = defaultString + node.defaultValue.SymbolReference = symbolReference return node } @@ -619,7 +687,7 @@ func (c *callTreeForType) build(t *types.Type, root bool) *callNode { child.elem = true } parent.children = append(parent.children, *child) - } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines); member != nil { + } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines, t.Elem.Name.Package); member != nil { member.index = true parent.children = append(parent.children, *member) } @@ -627,7 +695,7 @@ func (c *callTreeForType) build(t *types.Type, root bool) *callNode { if child := c.build(t.Elem, false); child != nil { child.key = true parent.children = append(parent.children, *child) - } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines); member != nil { + } else if member := populateDefaultValue(nil, t.Elem, "", t.Elem.CommentLines, t.Elem.Name.Package); member != nil { member.key = true parent.children = append(parent.children, *member) } @@ -644,9 +712,9 @@ func (c *callTreeForType) build(t *types.Type, root bool) *callNode { } if child := c.build(field.Type, false); child != nil { child.field = name - populateDefaultValue(child, field.Type, field.Tags, field.CommentLines) + populateDefaultValue(child, field.Type, field.Tags, field.CommentLines, field.Type.Name.Package) parent.children = append(parent.children, *child) - } else if member := populateDefaultValue(nil, field.Type, field.Tags, field.CommentLines); member != nil { + } else if member := populateDefaultValue(nil, field.Type, field.Tags, field.CommentLines, t.Name.Package); member != nil { member.field = name parent.children = append(parent.children, *member) } @@ -690,7 +758,7 @@ func NewGenDefaulter(sanitizedName, typesPackage, outputPackage string, existing peerPackages: peerPkgs, newDefaulters: newDefaulters, existingDefaulters: existingDefaulters, - imports: generator.NewImportTracker(), + imports: generator.NewImportTrackerForPackage(outputPackage), typesForInit: make([]*types.Type, 0), } } @@ -766,6 +834,15 @@ func (g *genDefaulter) GenerateType(c *generator.Context, t *types.Type, w io.Wr } i := 0 callTree.VisitInOrder(func(ancestors []*callNode, current *callNode) { + if ref := ¤t.defaultValue.SymbolReference; len(ref.Name) > 0 { + // Ensure package for symbol is imported in output generation + g.imports.AddSymbol(*ref) + + // Rewrite the fully qualified name using the local package name + // from the imports + ref.Package = g.imports.LocalNameOf(ref.Package) + } + if len(current.call) == 0 { return } @@ -795,26 +872,26 @@ func (g *genDefaulter) generateDefaulter(inType *types.Type, callTree *callNode, // how in Go code an access would be performed. For example, if a defaulting function exists on a container // lifecycle hook, to invoke that defaulter correctly would require this Go code: // -// for i := range pod.Spec.Containers { -// o := &pod.Spec.Containers[i] -// if o.LifecycleHook != nil { -// SetDefaults_LifecycleHook(o.LifecycleHook) -// } -// } +// for i := range pod.Spec.Containers { +// o := &pod.Spec.Containers[i] +// if o.LifecycleHook != nil { +// SetDefaults_LifecycleHook(o.LifecycleHook) +// } +// } // // That would be represented by a call tree like: // -// callNode -// field: "Spec" -// children: -// - field: "Containers" -// children: -// - index: true -// children: -// - field: "LifecycleHook" -// elem: true -// call: -// - SetDefaults_LifecycleHook +// callNode +// field: "Spec" +// children: +// - field: "Containers" +// children: +// - index: true +// children: +// - field: "LifecycleHook" +// elem: true +// call: +// - SetDefaults_LifecycleHook // // which we can traverse to build that Go struct (you must call the field Spec, then Containers, then range over // that field, then check whether the LifecycleHook field is nil, before calling SetDefaults_LifecycleHook on @@ -836,7 +913,7 @@ type callNode struct { // defaultValue is the defaultValue of a callNode struct // Only primitive types and pointer types are eligible to have a default value - defaultValue string + defaultValue defaultValue // defaultIsPrimitive is used to determine how to assign the default value. // Primitive types will be directly assigned while complex types will use JSON unmarshalling @@ -845,21 +922,41 @@ type callNode struct { // markerOnly is true if the callNode exists solely to fill in a default value markerOnly bool - // defaultDepth is used to determine pointer level of the default value - // For example 1 corresponds to setting a default value and taking its pointer while - // 2 corresponds to setting a default value and taking its pointer's pointer - // 0 implies that no pointers are used - // This is used in situations where a field is a pointer to a primitive value rather than a primitive value itself. + // defaultType is the transitive underlying/element type of the node. + // The provided default value literal or reference is expected to be + // convertible to this type. // - // type A { - // +default="foo" - // Field *string - // } - defaultDepth int - - // defaultType is the type of the default value. + // e.g: + // node type = *string -> defaultType = string + // node type = StringPointerAlias -> defaultType = string // Only populated if defaultIsPrimitive is true - defaultType string + defaultType *types.Type + + // defaultTopLevelType is the final type the value should resolve to + // This is in constrast with default type, which resolves aliases and pointers. + defaultTopLevelType *types.Type +} + +type defaultValue struct { + // The value was written directly in the marker comment and + // has been parsed as JSON + InlineConstant string + // The name of the symbol relative to the parsed package path + // i.e. k8s.io/pkg.apis.v1.Foo if from another package or simply `Foo` + // if within the same package. + SymbolReference types.Name +} + +func (d defaultValue) IsEmpty() bool { + resolved := d.Resolved() + return resolved == "" +} + +func (d defaultValue) Resolved() string { + if len(d.InlineConstant) > 0 { + return d.InlineConstant + } + return d.SymbolReference.String() } // CallNodeVisitorFunc is a function for visiting a call tree. ancestors is the list of all parents @@ -929,15 +1026,14 @@ func getTypeZeroValue(t string) (interface{}, error) { } func (n *callNode) writeDefaulter(varName string, index string, isVarPointer bool, sw *generator.SnippetWriter) { - if n.defaultValue == "" { + if n.defaultValue.IsEmpty() { return } args := generator.Args{ - "defaultValue": n.defaultValue, + "defaultValue": n.defaultValue.Resolved(), "varName": varName, "index": index, - "varDepth": n.defaultDepth, - "varType": n.defaultType, + "varTopType": n.defaultTopLevelType, } variablePlaceholder := "" @@ -961,25 +1057,72 @@ func (n *callNode) writeDefaulter(varName string, index string, isVarPointer boo if n.defaultIsPrimitive { // If the default value is a primitive when the assigned type is a pointer // keep using the address-of operator on the primitive value until the types match - if n.defaultDepth > 0 { - sw.Do(fmt.Sprintf("if %s == nil {\n", variablePlaceholder), args) - sw.Do("var ptrVar$.varDepth$ $.varType$ = $.defaultValue$\n", args) - // We iterate until a depth of 1 instead of 0 because the following line - // `if $.varName$ == &ptrVar1` accounts for 1 level already - for i := n.defaultDepth; i > 1; i-- { - sw.Do("ptrVar$.ptri$ := &ptrVar$.i$\n", generator.Args{"i": fmt.Sprintf("%d", i), "ptri": fmt.Sprintf("%d", (i - 1))}) + if pointerPath := getPointerElementPath(n.defaultTopLevelType); len(pointerPath) > 0 { + // If the destination is a pointer, the last element in + // defaultDepth is the element type of the bottommost pointer: + // the base type of our default value. + destElemType := pointerPath[len(pointerPath)-1] + pointerArgs := args.WithArgs(generator.Args{ + "varDepth": len(pointerPath), + "baseElemType": destElemType, + }) + + sw.Do(fmt.Sprintf("if %s == nil {\n", variablePlaceholder), pointerArgs) + if len(n.defaultValue.InlineConstant) > 0 { + // If default value is a literal then it can be assigned via var stmt + sw.Do("var ptrVar$.varDepth$ $.baseElemType|raw$ = $.defaultValue$\n", pointerArgs) + } else { + // If default value is not a literal then it may need to be casted + // to the base type of the destination pointer + sw.Do("ptrVar$.varDepth$ := $.baseElemType|raw$($.defaultValue$)\n", pointerArgs) + } + + for i := len(pointerPath); i >= 1; i-- { + dest := fmt.Sprintf("ptrVar%d", i-1) + assignment := ":=" + if i == 1 { + // Last assignment is into the storage destination + dest = variablePlaceholder + assignment = "=" + } + + sourceType := "*" + destElemType.String() + if i == len(pointerPath) { + // Initial value is not a pointer + sourceType = destElemType.String() + } + destElemType = pointerPath[i-1] + + // Cannot include `dest` into args since its value may be + // `variablePlaceholder` which is a template, not a value + elementArgs := pointerArgs.WithArgs(generator.Args{ + "assignment": assignment, + "source": fmt.Sprintf("ptrVar%d", i), + "destElemType": destElemType, + }) + + // Skip cast if type is exact match + if destElemType.String() == sourceType { + sw.Do(fmt.Sprintf("%v $.assignment$ &$.source$\n", dest), elementArgs) + } else { + sw.Do(fmt.Sprintf("%v $.assignment$ (*$.destElemType|raw$)(&$.source$)\n", dest), elementArgs) + } } - sw.Do(fmt.Sprintf("%s = &ptrVar1", variablePlaceholder), args) } else { // For primitive types, nil checks cannot be used and the zero value must be determined - defaultZero, err := getTypeZeroValue(n.defaultType) + defaultZero, err := getTypeZeroValue(n.defaultType.String()) if err != nil { klog.Error(err) } args["defaultZero"] = defaultZero sw.Do(fmt.Sprintf("if %s == $.defaultZero$ {\n", variablePlaceholder), args) - sw.Do(fmt.Sprintf("%s = $.defaultValue$", variablePlaceholder), args) + + if len(n.defaultValue.InlineConstant) > 0 { + sw.Do(fmt.Sprintf("%s = $.defaultValue$", variablePlaceholder), args) + } else { + sw.Do(fmt.Sprintf("%s = $.varTopType|raw$($.defaultValue$)", variablePlaceholder), args) + } } } else { sw.Do(fmt.Sprintf("if %s == nil {\n", variablePlaceholder), args) @@ -1046,7 +1189,7 @@ func (n *callNode) WriteMethod(varName string, depth int, ancestors []*callNode, } sw.Do("}\n", nil) case n.key: - if n.defaultValue != "" { + if !n.defaultValue.IsEmpty() { // Map keys are typed and cannot share the same index variable as arrays and other maps index = index + "_" + ancestors[len(ancestors)-1].field vars["index"] = index diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go b/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go index 7232f5e6bf3c..d7eb20b85965 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go @@ -64,7 +64,7 @@ func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Pac } for _, p := range c.Universe { - if !arguments.InputIncludes(p) { + if !inputIncludes(arguments.InputDirs, p) { // Don't run on e.g. third party dependencies. continue } @@ -89,6 +89,30 @@ func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Pac return pkgs } +// inputIncludes returns true if the given package is a (sub) package of one of +// the InputDirs. +func inputIncludes(inputs []string, p *types.Package) bool { + // TODO: This does not handle conversion of local paths (./foo) into + // canonical packages (github.com/example/project/foo). + for _, input := range inputs { + // Normalize paths + input := strings.TrimSuffix(input, "/") + input = strings.TrimPrefix(input, "./vendor/") + seek := strings.TrimSuffix(p.Path, "/") + + if input == seek { + return true + } + if strings.HasSuffix(input, "...") { + input = strings.TrimSuffix(input, "...") + if strings.HasPrefix(seek+"/", input) { + return true + } + } + } + return false +} + // A single import restriction rule. type Rule struct { // All import paths that match this regexp... diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go b/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go index 60c899ac4649..99525c40ba02 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/generator/import_tracker.go @@ -26,15 +26,34 @@ import ( "k8s.io/gengo/types" ) -func NewImportTracker(typesToAdd ...*types.Type) namer.ImportTracker { - tracker := namer.NewDefaultImportTracker(types.Name{}) +// NewImportTrackerForPackage creates a new import tracker which is aware +// of a generator's output package. The tracker will not add import lines +// when symbols or types are added from the same package, and LocalNameOf +// will return empty string for the output package. +// +// e.g.: +// +// tracker := NewImportTrackerForPackage("bar.com/pkg/foo") +// tracker.AddSymbol(types.Name{"bar.com/pkg/foo.MyType"}) +// tracker.AddSymbol(types.Name{"bar.com/pkg/baz.MyType"}) +// tracker.AddSymbol(types.Name{"bar.com/pkg/baz/baz.MyType"}) +// +// tracker.LocalNameOf("bar.com/pkg/foo") -> "" +// tracker.LocalNameOf("bar.com/pkg/baz") -> "baz" +// tracker.LocalNameOf("bar.com/pkg/baz/baz") -> "bazbaz" +// tracker.ImportLines() -> {`baz "bar.com/pkg/baz"`, `bazbaz "bar.com/pkg/baz/baz"`} +func NewImportTrackerForPackage(local string, typesToAdd ...*types.Type) *namer.DefaultImportTracker { + tracker := namer.NewDefaultImportTracker(types.Name{Package: local}) tracker.IsInvalidType = func(*types.Type) bool { return false } tracker.LocalName = func(name types.Name) string { return golangTrackerLocalName(&tracker, name) } tracker.PrintImport = func(path, name string) string { return name + " \"" + path + "\"" } tracker.AddTypes(typesToAdd...) return &tracker +} +func NewImportTracker(typesToAdd ...*types.Type) *namer.DefaultImportTracker { + return NewImportTrackerForPackage("", typesToAdd...) } func golangTrackerLocalName(tracker namer.ImportTracker, t types.Name) string { diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go index 37094b2deb5a..2bf1d503f946 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/import_tracker.go @@ -55,6 +55,27 @@ func (tracker *DefaultImportTracker) AddTypes(types ...*types.Type) { tracker.AddType(t) } } +func (tracker *DefaultImportTracker) AddSymbol(symbol types.Name) { + if tracker.local.Package == symbol.Package { + return + } + + if len(symbol.Package) == 0 { + return + } + path := symbol.Path + if len(path) == 0 { + path = symbol.Package + } + if _, ok := tracker.pathToName[path]; ok { + return + } + + name := tracker.LocalName(symbol) + tracker.nameToPath[name] = path + tracker.pathToName[path] = name +} + func (tracker *DefaultImportTracker) AddType(t *types.Type) { if tracker.local.Package == t.Name.Package { return @@ -70,19 +91,7 @@ func (tracker *DefaultImportTracker) AddType(t *types.Type) { return } - if len(t.Name.Package) == 0 { - return - } - path := t.Name.Path - if len(path) == 0 { - path = t.Name.Package - } - if _, ok := tracker.pathToName[path]; ok { - return - } - name := tracker.LocalName(t.Name) - tracker.nameToPath[name] = path - tracker.pathToName[path] = name + tracker.AddSymbol(t.Name) } func (tracker *DefaultImportTracker) ImportLines() []string { diff --git a/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go b/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go index 6feb2d0c464b..a0f1a24abe94 100644 --- a/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go +++ b/cluster-autoscaler/vendor/k8s.io/gengo/namer/namer.go @@ -300,6 +300,7 @@ func (ns *NameStrategy) Name(t *types.Type) string { // import. You can implement yourself or use the one in the generation package. type ImportTracker interface { AddType(*types.Type) + AddSymbol(types.Name) LocalNameOf(packagePath string) string PathOf(localName string) (string, bool) ImportLines() []string diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/cached/cache.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/cached/cache.go index 76415b7830bf..a66fe8a0958c 100644 --- a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/cached/cache.go +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/cached/cache.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package cache provides a cache mechanism based on etags to lazily +// Package cached provides a cache mechanism based on etags to lazily // build, and/or cache results from expensive operation such that those // operations are not repeated unnecessarily. The operations can be // created as a tree, and replaced dynamically as needed. @@ -25,16 +25,18 @@ limitations under the License. // // This package uses a source/transform/sink model of caches to build // the dependency tree, and can be used as follows: -// - [NewSource]: A source cache that recomputes the content every time. -// - [NewStaticSource]: A source cache that always produces the +// - [Func]: A source cache that recomputes the content every time. +// - [Once]: A source cache that always produces the // same content, it is only called once. -// - [NewTransformer]: A cache that transforms data from one format to +// - [Transform]: A cache that transforms data from one format to // another. It's only refreshed when the source changes. -// - [NewMerger]: A cache that aggregates multiple caches into one. +// - [Merge]: A cache that aggregates multiple caches in a map into one. // It's only refreshed when the source changes. -// - [Replaceable]: A cache adapter that can be atomically -// replaced with a new one, and saves the previous results in case an -// error pops-up. +// - [MergeList]: A cache that aggregates multiple caches in a list into one. +// It's only refreshed when the source changes. +// - [Atomic]: A cache adapter that atomically replaces the source with a new one. +// - [LastSuccess]: A cache adapter that caches the last successful and returns +// it if the next call fails. It extends [Atomic]. // // # Etags // @@ -54,61 +56,45 @@ import ( "sync/atomic" ) -// Result is the content returned from a call to a cache. It can either -// be created with [NewResultOK] if the call was a success, or -// [NewResultErr] if the call resulted in an error. +// Value is wrapping a value behind a getter for lazy evaluation. +type Value[T any] interface { + Get() (value T, etag string, err error) +} + +// Result is wrapping T and error into a struct for cases where a tuple is more +// convenient or necessary in Golang. type Result[T any] struct { - Data T - Etag string - Err error + Value T + Etag string + Err error } -// NewResultOK creates a new [Result] for a successful operation. -func NewResultOK[T any](data T, etag string) Result[T] { - return Result[T]{ - Data: data, - Etag: etag, - } +func (r Result[T]) Get() (T, string, error) { + return r.Value, r.Etag, r.Err } -// NewResultErr creates a new [Result] when an error has happened. -func NewResultErr[T any](err error) Result[T] { - return Result[T]{ - Err: err, - } +// Func wraps a (thread-safe) function as a Value[T]. +func Func[T any](fn func() (T, string, error)) Value[T] { + return valueFunc[T](fn) } -// Result can be treated as a [Data] if necessary. -func (r Result[T]) Get() Result[T] { - return r +type valueFunc[T any] func() (T, string, error) + +func (c valueFunc[T]) Get() (T, string, error) { + return c() } -// Data is a cache that performs an action whose result data will be -// cached. It also returns an "etag" identifier to version the cache, so -// that the caller can know if they have the most recent version of the -// cache (and can decide to cache some operation based on that). -// -// The [NewMerger] and [NewTransformer] automatically handle -// that for you by checking if the etag is updated before calling the -// merging or transforming function. -type Data[T any] interface { - // Returns the cached data, as well as an "etag" to identify the - // version of the cache, or an error if something happened. - Get() Result[T] +// Static returns constant values. +func Static[T any](value T, etag string) Value[T] { + return Result[T]{Value: value, Etag: etag} } -// NewMerger creates a new merge cache, a cache that merges the result -// of other caches. The function only gets called if any of the -// dependency has changed. +// Merge merges a of cached values. The merge function only gets called if any of +// the dependency has changed. // // If any of the dependency returned an error before, or any of the // dependency returned an error this time, or if the mergeFn failed -// before, then the function is reran. -// -// The caches and results are mapped by K so that associated data can be -// retrieved. The map of dependencies can not be modified after -// creation, and a new merger should be created (and probably replaced -// using a [Replaceable]). +// before, then the function is run again. // // Note that this assumes there is no "partial" merge, the merge // function will remerge all the dependencies together everytime. Since @@ -118,18 +104,19 @@ type Data[T any] interface { // Also note that Golang map iteration is not stable. If the mergeFn // depends on the order iteration to be stable, it will need to // implement its own sorting or iteration order. -func NewMerger[K comparable, T, V any](mergeFn func(results map[K]Result[T]) Result[V], caches map[K]Data[T]) Data[V] { - listCaches := make([]Data[T], 0, len(caches)) - // maps from index to key +func Merge[K comparable, T, V any](mergeFn func(results map[K]Result[T]) (V, string, error), caches map[K]Value[T]) Value[V] { + list := make([]Value[T], 0, len(caches)) + + // map from index to key indexes := make(map[int]K, len(caches)) i := 0 for k := range caches { - listCaches = append(listCaches, caches[k]) + list = append(list, caches[k]) indexes[i] = k i++ } - return NewListMerger(func(results []Result[T]) Result[V] { + return MergeList(func(results []Result[T]) (V, string, error) { if len(results) != len(indexes) { panic(fmt.Errorf("invalid result length %d, expected %d", len(results), len(indexes))) } @@ -138,20 +125,11 @@ func NewMerger[K comparable, T, V any](mergeFn func(results map[K]Result[T]) Res m[indexes[i]] = results[i] } return mergeFn(m) - }, listCaches) -} - -type listMerger[T, V any] struct { - lock sync.Mutex - mergeFn func([]Result[T]) Result[V] - caches []Data[T] - cacheResults []Result[T] - result Result[V] + }, list) } -// NewListMerger creates a new merge cache that merges the results of -// other caches in list form. The function only gets called if any of -// the dependency has changed. +// MergeList merges a list of cached values. The function only gets called if +// any of the dependency has changed. // // The benefit of ListMerger over the basic Merger is that caches are // stored in an ordered list so the order of the cache will be @@ -165,31 +143,37 @@ type listMerger[T, V any] struct { // function will remerge all the dependencies together everytime. Since // the list of dependencies is constant, there is no way to save some // partial merge information either. -func NewListMerger[T, V any](mergeFn func(results []Result[T]) Result[V], caches []Data[T]) Data[V] { +func MergeList[T, V any](mergeFn func(results []Result[T]) (V, string, error), delegates []Value[T]) Value[V] { return &listMerger[T, V]{ - mergeFn: mergeFn, - caches: caches, + mergeFn: mergeFn, + delegates: delegates, } } +type listMerger[T, V any] struct { + lock sync.Mutex + mergeFn func([]Result[T]) (V, string, error) + delegates []Value[T] + cache []Result[T] + result Result[V] +} + func (c *listMerger[T, V]) prepareResultsLocked() []Result[T] { - cacheResults := make([]Result[T], len(c.caches)) + cacheResults := make([]Result[T], len(c.delegates)) ch := make(chan struct { int Result[T] - }, len(c.caches)) - for i := range c.caches { + }, len(c.delegates)) + for i := range c.delegates { go func(index int) { + value, etag, err := c.delegates[index].Get() ch <- struct { int Result[T] - }{ - index, - c.caches[index].Get(), - } + }{index, Result[T]{Value: value, Etag: etag, Err: err}} }(i) } - for i := 0; i < len(c.caches); i++ { + for i := 0; i < len(c.delegates); i++ { res := <-ch cacheResults[res.int] = res.Result } @@ -197,16 +181,16 @@ func (c *listMerger[T, V]) prepareResultsLocked() []Result[T] { } func (c *listMerger[T, V]) needsRunningLocked(results []Result[T]) bool { - if c.cacheResults == nil { + if c.cache == nil { return true } if c.result.Err != nil { return true } - if len(results) != len(c.cacheResults) { - panic(fmt.Errorf("invalid number of results: %v (expected %v)", len(results), len(c.cacheResults))) + if len(results) != len(c.cache) { + panic(fmt.Errorf("invalid number of results: %v (expected %v)", len(results), len(c.cache))) } - for i, oldResult := range c.cacheResults { + for i, oldResult := range c.cache { newResult := results[i] if newResult.Etag != oldResult.Etag || newResult.Err != nil || oldResult.Err != nil { return true @@ -215,98 +199,92 @@ func (c *listMerger[T, V]) needsRunningLocked(results []Result[T]) bool { return false } -func (c *listMerger[T, V]) Get() Result[V] { +func (c *listMerger[T, V]) Get() (V, string, error) { c.lock.Lock() defer c.lock.Unlock() cacheResults := c.prepareResultsLocked() if c.needsRunningLocked(cacheResults) { - c.cacheResults = cacheResults - c.result = c.mergeFn(c.cacheResults) + c.cache = cacheResults + c.result.Value, c.result.Etag, c.result.Err = c.mergeFn(c.cache) } - return c.result + return c.result.Value, c.result.Etag, c.result.Err } -// NewTransformer creates a new cache that transforms the result of -// another cache. The transformFn will only be called if the source -// cache has updated the output, otherwise, the cached result will be -// returned. +// Transform the result of another cached value. The transformFn will only be called +// if the source has updated, otherwise, the result will be returned. // // If the dependency returned an error before, or it returns an error // this time, or if the transformerFn failed before, the function is // reran. -func NewTransformer[T, V any](transformerFn func(Result[T]) Result[V], source Data[T]) Data[V] { - return NewListMerger(func(caches []Result[T]) Result[V] { - if len(caches) != 1 { - panic(fmt.Errorf("invalid cache for transformer cache: %v", caches)) +func Transform[T, V any](transformerFn func(T, string, error) (V, string, error), source Value[T]) Value[V] { + return MergeList(func(delegates []Result[T]) (V, string, error) { + if len(delegates) != 1 { + panic(fmt.Errorf("invalid cache for transformer cache: %v", delegates)) } - return transformerFn(caches[0]) - }, []Data[T]{source}) -} - -// NewSource creates a new cache that generates some data. This -// will always be called since we don't know the origin of the data and -// if it needs to be updated or not. sourceFn MUST be thread-safe. -func NewSource[T any](sourceFn func() Result[T]) Data[T] { - c := source[T](sourceFn) - return &c + return transformerFn(delegates[0].Value, delegates[0].Etag, delegates[0].Err) + }, []Value[T]{source}) } -type source[T any] func() Result[T] - -func (c *source[T]) Get() Result[T] { - return (*c)() -} - -// NewStaticSource creates a new cache that always generates the -// same data. This will only be called once (lazily). -func NewStaticSource[T any](staticFn func() Result[T]) Data[T] { - return &static[T]{ - fn: staticFn, +// Once calls Value[T].Get() lazily and only once, even in case of an error result. +func Once[T any](d Value[T]) Value[T] { + return &once[T]{ + data: d, } } -type static[T any] struct { +type once[T any] struct { once sync.Once - fn func() Result[T] + data Value[T] result Result[T] } -func (c *static[T]) Get() Result[T] { +func (c *once[T]) Get() (T, string, error) { c.once.Do(func() { - c.result = c.fn() + c.result.Value, c.result.Etag, c.result.Err = c.data.Get() }) - return c.result + return c.result.Value, c.result.Etag, c.result.Err } -// Replaceable is a cache that carries the result even when the cache is -// replaced. This is the type that should typically be stored in -// structs. -type Replaceable[T any] struct { - cache atomic.Pointer[Data[T]] - result atomic.Pointer[Result[T]] +// Replaceable extends the Value[T] interface with the ability to change the +// underlying Value[T] after construction. +type Replaceable[T any] interface { + Value[T] + Store(Value[T]) } -// Get retrieves the data from the underlying source. [Replaceable] -// implements the [Data] interface itself. This is a pass-through -// that calls the most recent underlying cache. If the cache fails but -// previously had returned a success, that success will be returned -// instead. If the cache fails but we never returned a success, that -// failure is returned. -func (c *Replaceable[T]) Get() Result[T] { - result := (*c.cache.Load()).Get() - - for { - cResult := c.result.Load() - if result.Err != nil && cResult != nil && cResult.Err == nil { - return *cResult - } - if c.result.CompareAndSwap(cResult, &result) { - return result +// Atomic wraps a Value[T] as an atomic value that can be replaced. It implements +// Replaceable[T]. +type Atomic[T any] struct { + value atomic.Pointer[Value[T]] +} + +var _ Replaceable[[]byte] = &Atomic[[]byte]{} + +func (x *Atomic[T]) Store(val Value[T]) { x.value.Store(&val) } +func (x *Atomic[T]) Get() (T, string, error) { return (*x.value.Load()).Get() } + +// LastSuccess calls Value[T].Get(), but hides errors by returning the last +// success if there has been any. +type LastSuccess[T any] struct { + Atomic[T] + success atomic.Pointer[Result[T]] +} + +var _ Replaceable[[]byte] = &LastSuccess[[]byte]{} + +func (c *LastSuccess[T]) Get() (T, string, error) { + success := c.success.Load() + value, etag, err := c.Atomic.Get() + if err == nil { + if success == nil { + c.success.CompareAndSwap(nil, &Result[T]{Value: value, Etag: etag, Err: err}) } + return value, etag, err + } + + if success != nil { + return success.Value, success.Etag, success.Err } -} -// Replace changes the cache. -func (c *Replaceable[T]) Replace(cache Data[T]) { - c.cache.Swap(&cache) + return value, etag, err } diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go index 4654bbe9c7ce..6b5c6997b859 100644 --- a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/generators/openapi.go @@ -26,6 +26,7 @@ import ( "sort" "strings" + defaultergen "k8s.io/gengo/examples/defaulter-gen/generators" "k8s.io/gengo/generator" "k8s.io/gengo/namer" "k8s.io/gengo/types" @@ -120,7 +121,7 @@ func newOpenAPIGen(sanitizedName string, targetPackage string) generator.Generat DefaultGen: generator.DefaultGen{ OptionalName: sanitizedName, }, - imports: generator.NewImportTracker(), + imports: generator.NewImportTrackerForPackage(targetPackage), targetPackage: targetPackage, } } @@ -553,16 +554,44 @@ func (g openAPITypeWriter) validatePatchTags(m *types.Member, parent *types.Type return nil } -func defaultFromComments(comments []string) (interface{}, error) { - tag, err := getSingleTagsValue(comments, tagDefault) +func defaultFromComments(comments []string, commentPath string, t *types.Type) (interface{}, *types.Name, error) { + var tag string + + for { + var err error + tag, err = getSingleTagsValue(comments, tagDefault) + if err != nil { + return nil, nil, err + } + + if t == nil || len(tag) > 0 { + break + } + + comments = t.CommentLines + commentPath = t.Name.Package + switch t.Kind { + case types.Pointer: + t = t.Elem + case types.Alias: + t = t.Underlying + default: + t = nil + } + } + if tag == "" { - return nil, err + return nil, nil, nil } + var i interface{} - if err := json.Unmarshal([]byte(tag), &i); err != nil { - return nil, fmt.Errorf("failed to unmarshal default: %v", err) + if id, ok := defaultergen.ParseSymbolReference(tag, commentPath); ok { + klog.Errorf("%v, %v", id, commentPath) + return nil, &id, nil + } else if err := json.Unmarshal([]byte(tag), &i); err != nil { + return nil, nil, fmt.Errorf("failed to unmarshal default: %v", err) } - return i, nil + return i, nil, nil } func mustEnforceDefault(t *types.Type, omitEmpty bool) (interface{}, error) { @@ -585,13 +614,12 @@ func mustEnforceDefault(t *types.Type, omitEmpty bool) (interface{}, error) { } } -func (g openAPITypeWriter) generateDefault(comments []string, t *types.Type, omitEmpty bool) error { - t = resolveAliasAndEmbeddedType(t) - def, err := defaultFromComments(comments) +func (g openAPITypeWriter) generateDefault(comments []string, t *types.Type, omitEmpty bool, commentOwningType *types.Type) error { + def, ref, err := defaultFromComments(comments, commentOwningType.Name.Package, t) if err != nil { return err } - if enforced, err := mustEnforceDefault(t, omitEmpty); err != nil { + if enforced, err := mustEnforceDefault(resolveAliasAndEmbeddedType(t), omitEmpty); err != nil { return err } else if enforced != nil { if def == nil { @@ -603,6 +631,8 @@ func (g openAPITypeWriter) generateDefault(comments []string, t *types.Type, omi } if def != nil { g.Do("Default: $.$,\n", fmt.Sprintf("%#v", def)) + } else if ref != nil { + g.Do("Default: $.|raw$,\n", &types.Type{Name: *ref}) } return nil } @@ -676,7 +706,7 @@ func (g openAPITypeWriter) generateProperty(m *types.Member, parent *types.Type) return nil } omitEmpty := strings.Contains(reflect.StructTag(m.Tags).Get("json"), "omitempty") - if err := g.generateDefault(m.CommentLines, m.Type, omitEmpty); err != nil { + if err := g.generateDefault(m.CommentLines, m.Type, omitEmpty, parent); err != nil { return fmt.Errorf("failed to generate default in %v: %v: %v", parent, m.Name, err) } t := resolveAliasAndPtrType(m.Type) @@ -762,7 +792,7 @@ func (g openAPITypeWriter) generateMapProperty(t *types.Type) error { g.Do("Type: []string{\"object\"},\n", nil) g.Do("AdditionalProperties: &spec.SchemaOrBool{\nAllows: true,\nSchema: &spec.Schema{\nSchemaProps: spec.SchemaProps{\n", nil) - if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false); err != nil { + if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false, t.Elem); err != nil { return err } typeString, format := openapi.OpenAPITypeFormat(elemType.String()) @@ -795,7 +825,7 @@ func (g openAPITypeWriter) generateSliceProperty(t *types.Type) error { elemType := resolveAliasAndPtrType(t.Elem) g.Do("Type: []string{\"array\"},\n", nil) g.Do("Items: &spec.SchemaOrArray{\nSchema: &spec.Schema{\nSchemaProps: spec.SchemaProps{\n", nil) - if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false); err != nil { + if err := g.generateDefault(t.Elem.CommentLines, t.Elem, false, t.Elem); err != nil { return err } typeString, format := openapi.OpenAPITypeFormat(elemType.String()) diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler/handler.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler/handler.go index 0eb3f2360d56..5fc629773459 100644 --- a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler/handler.go +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler/handler.go @@ -30,6 +30,7 @@ import ( openapi_v2 "github.com/google/gnostic-models/openapiv2" "github.com/google/uuid" "github.com/munnerz/goautoneg" + klog "k8s.io/klog/v2" "k8s.io/kube-openapi/pkg/builder" "k8s.io/kube-openapi/pkg/cached" @@ -59,52 +60,52 @@ type timedSpec struct { // OpenAPIService is the service responsible for serving OpenAPI spec. It has // the ability to safely change the spec while serving it. type OpenAPIService struct { - specCache cached.Replaceable[*spec.Swagger] - jsonCache cached.Data[timedSpec] - protoCache cached.Data[timedSpec] + specCache cached.LastSuccess[*spec.Swagger] + jsonCache cached.Value[timedSpec] + protoCache cached.Value[timedSpec] } // NewOpenAPIService builds an OpenAPIService starting with the given spec. func NewOpenAPIService(swagger *spec.Swagger) *OpenAPIService { - return NewOpenAPIServiceLazy(cached.NewResultOK(swagger, uuid.New().String())) + return NewOpenAPIServiceLazy(cached.Static(swagger, uuid.New().String())) } // NewOpenAPIServiceLazy builds an OpenAPIService from lazy spec. -func NewOpenAPIServiceLazy(swagger cached.Data[*spec.Swagger]) *OpenAPIService { +func NewOpenAPIServiceLazy(swagger cached.Value[*spec.Swagger]) *OpenAPIService { o := &OpenAPIService{} o.UpdateSpecLazy(swagger) - o.jsonCache = cached.NewTransformer[*spec.Swagger](func(result cached.Result[*spec.Swagger]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) + o.jsonCache = cached.Transform[*spec.Swagger](func(spec *spec.Swagger, etag string, err error) (timedSpec, string, error) { + if err != nil { + return timedSpec{}, "", err } - json, err := result.Data.MarshalJSON() + json, err := spec.MarshalJSON() if err != nil { - return cached.NewResultErr[timedSpec](err) + return timedSpec{}, "", err } - return cached.NewResultOK(timedSpec{spec: json, lastModified: time.Now()}, computeETag(json)) + return timedSpec{spec: json, lastModified: time.Now()}, computeETag(json), nil }, &o.specCache) - o.protoCache = cached.NewTransformer(func(result cached.Result[timedSpec]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) + o.protoCache = cached.Transform(func(ts timedSpec, etag string, err error) (timedSpec, string, error) { + if err != nil { + return timedSpec{}, "", err } - proto, err := ToProtoBinary(result.Data.spec) + proto, err := ToProtoBinary(ts.spec) if err != nil { - return cached.NewResultErr[timedSpec](err) + return timedSpec{}, "", err } // We can re-use the same etag as json because of the Vary header. - return cached.NewResultOK(timedSpec{spec: proto, lastModified: result.Data.lastModified}, result.Etag) + return timedSpec{spec: proto, lastModified: ts.lastModified}, etag, nil }, o.jsonCache) return o } func (o *OpenAPIService) UpdateSpec(swagger *spec.Swagger) error { - o.UpdateSpecLazy(cached.NewResultOK(swagger, uuid.New().String())) + o.UpdateSpecLazy(cached.Static(swagger, uuid.New().String())) return nil } -func (o *OpenAPIService) UpdateSpecLazy(swagger cached.Data[*spec.Swagger]) { - o.specCache.Replace(swagger) +func (o *OpenAPIService) UpdateSpecLazy(swagger cached.Value[*spec.Swagger]) { + o.specCache.Store(swagger) } func ToProtoBinary(json []byte) ([]byte, error) { @@ -130,7 +131,7 @@ func (o *OpenAPIService) RegisterOpenAPIVersionedService(servePath string, handl Type string SubType string ReturnedContentType string - GetDataAndEtag cached.Data[timedSpec] + GetDataAndEtag cached.Value[timedSpec] }{ {"application", subTypeJSON, "application/" + subTypeJSON, o.jsonCache}, {"application", subTypeProtobufDeprecated, "application/" + subTypeProtobuf, o.protoCache}, @@ -154,11 +155,11 @@ func (o *OpenAPIService) RegisterOpenAPIVersionedService(servePath string, handl continue } // serve the first matching media type in the sorted clause list - result := accepts.GetDataAndEtag.Get() - if result.Err != nil { - klog.Errorf("Error in OpenAPI handler: %s", result.Err) + ts, etag, err := accepts.GetDataAndEtag.Get() + if err != nil { + klog.Errorf("Error in OpenAPI handler: %s", err) // only return a 503 if we have no older cache data to serve - if result.Data.spec == nil { + if ts.spec == nil { w.WriteHeader(http.StatusServiceUnavailable) return } @@ -167,9 +168,9 @@ func (o *OpenAPIService) RegisterOpenAPIVersionedService(servePath string, handl w.Header().Set("Content-Type", accepts.ReturnedContentType) // ETag must be enclosed in double quotes: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag - w.Header().Set("Etag", strconv.Quote(result.Etag)) + w.Header().Set("Etag", strconv.Quote(etag)) // ServeContent will take care of caching using eTag. - http.ServeContent(w, r, servePath, result.Data.lastModified, bytes.NewReader(result.Data.spec)) + http.ServeContent(w, r, servePath, ts.lastModified, bytes.NewReader(ts.spec)) return } } diff --git a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go index 2263e2f32b75..fc45634887b1 100644 --- a/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go +++ b/cluster-autoscaler/vendor/k8s.io/kube-openapi/pkg/handler3/handler.go @@ -33,6 +33,7 @@ import ( openapi_v3 "github.com/google/gnostic-models/openapiv3" "github.com/google/uuid" "github.com/munnerz/goautoneg" + "k8s.io/klog/v2" "k8s.io/kube-openapi/pkg/cached" "k8s.io/kube-openapi/pkg/common" @@ -73,38 +74,38 @@ type timedSpec struct { // This type is protected by the lock on OpenAPIService. type openAPIV3Group struct { - specCache cached.Replaceable[*spec3.OpenAPI] - pbCache cached.Data[timedSpec] - jsonCache cached.Data[timedSpec] + specCache cached.LastSuccess[*spec3.OpenAPI] + pbCache cached.Value[timedSpec] + jsonCache cached.Value[timedSpec] } func newOpenAPIV3Group() *openAPIV3Group { o := &openAPIV3Group{} - o.jsonCache = cached.NewTransformer[*spec3.OpenAPI](func(result cached.Result[*spec3.OpenAPI]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) + o.jsonCache = cached.Transform[*spec3.OpenAPI](func(spec *spec3.OpenAPI, etag string, err error) (timedSpec, string, error) { + if err != nil { + return timedSpec{}, "", err } - json, err := json.Marshal(result.Data) + json, err := json.Marshal(spec) if err != nil { - return cached.NewResultErr[timedSpec](err) + return timedSpec{}, "", err } - return cached.NewResultOK(timedSpec{spec: json, lastModified: time.Now()}, computeETag(json)) + return timedSpec{spec: json, lastModified: time.Now()}, computeETag(json), nil }, &o.specCache) - o.pbCache = cached.NewTransformer(func(result cached.Result[timedSpec]) cached.Result[timedSpec] { - if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) + o.pbCache = cached.Transform(func(ts timedSpec, etag string, err error) (timedSpec, string, error) { + if err != nil { + return timedSpec{}, "", err } - proto, err := ToV3ProtoBinary(result.Data.spec) + proto, err := ToV3ProtoBinary(ts.spec) if err != nil { - return cached.NewResultErr[timedSpec](err) + return timedSpec{}, "", err } - return cached.NewResultOK(timedSpec{spec: proto, lastModified: result.Data.lastModified}, result.Etag) + return timedSpec{spec: proto, lastModified: ts.lastModified}, etag, nil }, o.jsonCache) return o } -func (o *openAPIV3Group) UpdateSpec(openapi cached.Data[*spec3.OpenAPI]) { - o.specCache.Replace(openapi) +func (o *openAPIV3Group) UpdateSpec(openapi cached.Value[*spec3.OpenAPI]) { + o.specCache.Store(openapi) } // OpenAPIService is the service responsible for serving OpenAPI spec. It has @@ -114,7 +115,7 @@ type OpenAPIService struct { mutex sync.Mutex v3Schema map[string]*openAPIV3Group - discoveryCache cached.Replaceable[timedSpec] + discoveryCache cached.LastSuccess[timedSpec] } func computeETag(data []byte) string { @@ -137,20 +138,20 @@ func NewOpenAPIService() *OpenAPIService { o := &OpenAPIService{} o.v3Schema = make(map[string]*openAPIV3Group) // We're not locked because we haven't shared the structure yet. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) + o.discoveryCache.Store(o.buildDiscoveryCacheLocked()) return o } -func (o *OpenAPIService) buildDiscoveryCacheLocked() cached.Data[timedSpec] { - caches := make(map[string]cached.Data[timedSpec], len(o.v3Schema)) +func (o *OpenAPIService) buildDiscoveryCacheLocked() cached.Value[timedSpec] { + caches := make(map[string]cached.Value[timedSpec], len(o.v3Schema)) for gvName, group := range o.v3Schema { caches[gvName] = group.jsonCache } - return cached.NewMerger(func(results map[string]cached.Result[timedSpec]) cached.Result[timedSpec] { + return cached.Merge(func(results map[string]cached.Result[timedSpec]) (timedSpec, string, error) { discovery := &OpenAPIV3Discovery{Paths: make(map[string]OpenAPIV3DiscoveryGroupVersion)} for gvName, result := range results { if result.Err != nil { - return cached.NewResultErr[timedSpec](result.Err) + return timedSpec{}, "", result.Err } discovery.Paths[gvName] = OpenAPIV3DiscoveryGroupVersion{ ServerRelativeURL: constructServerRelativeURL(gvName, result.Etag), @@ -158,9 +159,9 @@ func (o *OpenAPIService) buildDiscoveryCacheLocked() cached.Data[timedSpec] { } j, err := json.Marshal(discovery) if err != nil { - return cached.NewResultErr[timedSpec](err) + return timedSpec{}, "", err } - return cached.NewResultOK(timedSpec{spec: j, lastModified: time.Now()}, computeETag(j)) + return timedSpec{spec: j, lastModified: time.Now()}, computeETag(j), nil }, caches) } @@ -171,32 +172,32 @@ func (o *OpenAPIService) getSingleGroupBytes(getType string, group string) ([]by if !ok { return nil, "", time.Now(), fmt.Errorf("Cannot find CRD group %s", group) } - result := cached.Result[timedSpec]{} switch getType { case subTypeJSON: - result = v.jsonCache.Get() + ts, etag, err := v.jsonCache.Get() + return ts.spec, etag, ts.lastModified, err case subTypeProtobuf, subTypeProtobufDeprecated: - result = v.pbCache.Get() + ts, etag, err := v.pbCache.Get() + return ts.spec, etag, ts.lastModified, err default: return nil, "", time.Now(), fmt.Errorf("Invalid accept clause %s", getType) } - return result.Data.spec, result.Etag, result.Data.lastModified, result.Err } // UpdateGroupVersionLazy adds or updates an existing group with the new cached. -func (o *OpenAPIService) UpdateGroupVersionLazy(group string, openapi cached.Data[*spec3.OpenAPI]) { +func (o *OpenAPIService) UpdateGroupVersionLazy(group string, openapi cached.Value[*spec3.OpenAPI]) { o.mutex.Lock() defer o.mutex.Unlock() if _, ok := o.v3Schema[group]; !ok { o.v3Schema[group] = newOpenAPIV3Group() // Since there is a new item, we need to re-build the cache map. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) + o.discoveryCache.Store(o.buildDiscoveryCacheLocked()) } o.v3Schema[group].UpdateSpec(openapi) } func (o *OpenAPIService) UpdateGroupVersion(group string, openapi *spec3.OpenAPI) { - o.UpdateGroupVersionLazy(group, cached.NewResultOK(openapi, uuid.New().String())) + o.UpdateGroupVersionLazy(group, cached.Static(openapi, uuid.New().String())) } func (o *OpenAPIService) DeleteGroupVersion(group string) { @@ -204,19 +205,19 @@ func (o *OpenAPIService) DeleteGroupVersion(group string) { defer o.mutex.Unlock() delete(o.v3Schema, group) // Rebuild the merge cache map since the items have changed. - o.discoveryCache.Replace(o.buildDiscoveryCacheLocked()) + o.discoveryCache.Store(o.buildDiscoveryCacheLocked()) } func (o *OpenAPIService) HandleDiscovery(w http.ResponseWriter, r *http.Request) { - result := o.discoveryCache.Get() - if result.Err != nil { - klog.Errorf("Error serving discovery: %s", result.Err) + ts, etag, err := o.discoveryCache.Get() + if err != nil { + klog.Errorf("Error serving discovery: %s", err) w.WriteHeader(http.StatusInternalServerError) return } - w.Header().Set("Etag", strconv.Quote(result.Etag)) + w.Header().Set("Etag", strconv.Quote(etag)) w.Header().Set("Content-Type", "application/json") - http.ServeContent(w, r, "/openapi/v3", result.Data.lastModified, bytes.NewReader(result.Data.spec)) + http.ServeContent(w, r, "/openapi/v3", ts.lastModified, bytes.NewReader(ts.spec)) } func (o *OpenAPIService) HandleGroupVersion(w http.ResponseWriter, r *http.Request) { diff --git a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/doc.go b/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/doc.go deleted file mode 100644 index c791874d6115..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/doc.go +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:openapi-gen=true -// +groupName=kubescheduler.config.k8s.io - -package v1beta3 // import "k8s.io/kube-scheduler/config/v1beta3" diff --git a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/register.go b/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/register.go deleted file mode 100644 index 768f107b4e81..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/register.go +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the group name used in this package -const GroupName = "kubescheduler.config.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta3"} - -var ( - // SchemeBuilder is the scheme builder with scheme init functions to run for this API package - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - // AddToScheme is a global function that registers this API group & version to a scheme - AddToScheme = SchemeBuilder.AddToScheme -) - -// addKnownTypes registers known types to the given scheme -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(SchemeGroupVersion, - &KubeSchedulerConfiguration{}, - &DefaultPreemptionArgs{}, - &InterPodAffinityArgs{}, - &NodeResourcesBalancedAllocationArgs{}, - &NodeResourcesFitArgs{}, - &PodTopologySpreadArgs{}, - &VolumeBindingArgs{}, - &NodeAffinityArgs{}, - ) - return nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types.go b/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types.go deleted file mode 100644 index 45371c9d960d..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types.go +++ /dev/null @@ -1,377 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - "bytes" - "fmt" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" - "sigs.k8s.io/yaml" -) - -const ( - // SchedulerDefaultLockObjectNamespace defines default scheduler lock object namespace ("kube-system") - SchedulerDefaultLockObjectNamespace string = metav1.NamespaceSystem - - // SchedulerDefaultLockObjectName defines default scheduler lock object name ("kube-scheduler") - SchedulerDefaultLockObjectName = "kube-scheduler" - - // SchedulerDefaultProviderName defines the default provider names - SchedulerDefaultProviderName = "DefaultProvider" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// KubeSchedulerConfiguration configures a scheduler -type KubeSchedulerConfiguration struct { - metav1.TypeMeta `json:",inline"` - - // Parallelism defines the amount of parallelism in algorithms for scheduling a Pods. Must be greater than 0. Defaults to 16 - Parallelism *int32 `json:"parallelism,omitempty"` - - // LeaderElection defines the configuration of leader election client. - LeaderElection componentbaseconfigv1alpha1.LeaderElectionConfiguration `json:"leaderElection"` - - // ClientConnection specifies the kubeconfig file and client connection - // settings for the proxy server to use when communicating with the apiserver. - ClientConnection componentbaseconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` - - // DebuggingConfiguration holds configuration for Debugging related features - // TODO: We might wanna make this a substruct like Debugging componentbaseconfigv1alpha1.DebuggingConfiguration - componentbaseconfigv1alpha1.DebuggingConfiguration `json:",inline"` - - // PercentageOfNodesToScore is the percentage of all nodes that once found feasible - // for running a pod, the scheduler stops its search for more feasible nodes in - // the cluster. This helps improve scheduler's performance. Scheduler always tries to find - // at least "minFeasibleNodesToFind" feasible nodes no matter what the value of this flag is. - // Example: if the cluster size is 500 nodes and the value of this flag is 30, - // then scheduler stops finding further feasible nodes once it finds 150 feasible ones. - // When the value is 0, default percentage (5%--50% based on the size of the cluster) of the - // nodes will be scored. - PercentageOfNodesToScore *int32 `json:"percentageOfNodesToScore,omitempty"` - - // PodInitialBackoffSeconds is the initial backoff for unschedulable pods. - // If specified, it must be greater than 0. If this value is null, the default value (1s) - // will be used. - PodInitialBackoffSeconds *int64 `json:"podInitialBackoffSeconds,omitempty"` - - // PodMaxBackoffSeconds is the max backoff for unschedulable pods. - // If specified, it must be greater than podInitialBackoffSeconds. If this value is null, - // the default value (10s) will be used. - PodMaxBackoffSeconds *int64 `json:"podMaxBackoffSeconds,omitempty"` - - // Profiles are scheduling profiles that kube-scheduler supports. Pods can - // choose to be scheduled under a particular profile by setting its associated - // scheduler name. Pods that don't specify any scheduler name are scheduled - // with the "default-scheduler" profile, if present here. - // +listType=map - // +listMapKey=schedulerName - Profiles []KubeSchedulerProfile `json:"profiles,omitempty"` - - // Extenders are the list of scheduler extenders, each holding the values of how to communicate - // with the extender. These extenders are shared by all scheduler profiles. - // +listType=set - Extenders []Extender `json:"extenders,omitempty"` -} - -// DecodeNestedObjects decodes plugin args for known types. -func (c *KubeSchedulerConfiguration) DecodeNestedObjects(d runtime.Decoder) error { - var strictDecodingErrs []error - for i := range c.Profiles { - prof := &c.Profiles[i] - for j := range prof.PluginConfig { - err := prof.PluginConfig[j].decodeNestedObjects(d) - if err != nil { - decodingErr := fmt.Errorf("decoding .profiles[%d].pluginConfig[%d]: %w", i, j, err) - if runtime.IsStrictDecodingError(err) { - strictDecodingErrs = append(strictDecodingErrs, decodingErr) - } else { - return decodingErr - } - } - } - } - if len(strictDecodingErrs) > 0 { - return runtime.NewStrictDecodingError(strictDecodingErrs) - } - return nil -} - -// EncodeNestedObjects encodes plugin args. -func (c *KubeSchedulerConfiguration) EncodeNestedObjects(e runtime.Encoder) error { - for i := range c.Profiles { - prof := &c.Profiles[i] - for j := range prof.PluginConfig { - err := prof.PluginConfig[j].encodeNestedObjects(e) - if err != nil { - return fmt.Errorf("encoding .profiles[%d].pluginConfig[%d]: %w", i, j, err) - } - } - } - return nil -} - -// KubeSchedulerProfile is a scheduling profile. -type KubeSchedulerProfile struct { - // SchedulerName is the name of the scheduler associated to this profile. - // If SchedulerName matches with the pod's "spec.schedulerName", then the pod - // is scheduled with this profile. - SchedulerName *string `json:"schedulerName,omitempty"` - - // Plugins specify the set of plugins that should be enabled or disabled. - // Enabled plugins are the ones that should be enabled in addition to the - // default plugins. Disabled plugins are any of the default plugins that - // should be disabled. - // When no enabled or disabled plugin is specified for an extension point, - // default plugins for that extension point will be used if there is any. - // If a QueueSort plugin is specified, the same QueueSort Plugin and - // PluginConfig must be specified for all profiles. - Plugins *Plugins `json:"plugins,omitempty"` - - // PluginConfig is an optional set of custom plugin arguments for each plugin. - // Omitting config args for a plugin is equivalent to using the default config - // for that plugin. - // +listType=map - // +listMapKey=name - PluginConfig []PluginConfig `json:"pluginConfig,omitempty"` -} - -// Plugins include multiple extension points. When specified, the list of plugins for -// a particular extension point are the only ones enabled. If an extension point is -// omitted from the config, then the default set of plugins is used for that extension point. -// Enabled plugins are called in the order specified here, after default plugins. If they need to -// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order. -type Plugins struct { - // PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue. - PreEnqueue PluginSet `json:"preEnqueue,omitempty"` - - // QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue. - QueueSort PluginSet `json:"queueSort,omitempty"` - - // PreFilter is a list of plugins that should be invoked at "PreFilter" extension point of the scheduling framework. - PreFilter PluginSet `json:"preFilter,omitempty"` - - // Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod. - Filter PluginSet `json:"filter,omitempty"` - - // PostFilter is a list of plugins that are invoked after filtering phase, but only when no feasible nodes were found for the pod. - PostFilter PluginSet `json:"postFilter,omitempty"` - - // PreScore is a list of plugins that are invoked before scoring. - PreScore PluginSet `json:"preScore,omitempty"` - - // Score is a list of plugins that should be invoked when ranking nodes that have passed the filtering phase. - Score PluginSet `json:"score,omitempty"` - - // Reserve is a list of plugins invoked when reserving/unreserving resources - // after a node is assigned to run the pod. - Reserve PluginSet `json:"reserve,omitempty"` - - // Permit is a list of plugins that control binding of a Pod. These plugins can prevent or delay binding of a Pod. - Permit PluginSet `json:"permit,omitempty"` - - // PreBind is a list of plugins that should be invoked before a pod is bound. - PreBind PluginSet `json:"preBind,omitempty"` - - // Bind is a list of plugins that should be invoked at "Bind" extension point of the scheduling framework. - // The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success. - Bind PluginSet `json:"bind,omitempty"` - - // PostBind is a list of plugins that should be invoked after a pod is successfully bound. - PostBind PluginSet `json:"postBind,omitempty"` - - // MultiPoint is a simplified config section to enable plugins for all valid extension points. - // Plugins enabled through MultiPoint will automatically register for every individual extension - // point the plugin has implemented. Disabling a plugin through MultiPoint disables that behavior. - // The same is true for disabling "*" through MultiPoint (no default plugins will be automatically registered). - // Plugins can still be disabled through their individual extension points. - // - // In terms of precedence, plugin config follows this basic hierarchy - // 1. Specific extension points - // 2. Explicitly configured MultiPoint plugins - // 3. The set of default plugins, as MultiPoint plugins - // This implies that a higher precedence plugin will run first and overwrite any settings within MultiPoint. - // Explicitly user-configured plugins also take a higher precedence over default plugins. - // Within this hierarchy, an Enabled setting takes precedence over Disabled. For example, if a plugin is - // set in both `multiPoint.Enabled` and `multiPoint.Disabled`, the plugin will be enabled. Similarly, - // including `multiPoint.Disabled = '*'` and `multiPoint.Enabled = pluginA` will still register that specific - // plugin through MultiPoint. This follows the same behavior as all other extension point configurations. - MultiPoint PluginSet `json:"multiPoint,omitempty"` -} - -// PluginSet specifies enabled and disabled plugins for an extension point. -// If an array is empty, missing, or nil, default plugins at that extension point will be used. -type PluginSet struct { - // Enabled specifies plugins that should be enabled in addition to default plugins. - // If the default plugin is also configured in the scheduler config file, the weight of plugin will - // be overridden accordingly. - // These are called after default plugins and in the same order specified here. - // +listType=atomic - Enabled []Plugin `json:"enabled,omitempty"` - // Disabled specifies default plugins that should be disabled. - // When all default plugins need to be disabled, an array containing only one "*" should be provided. - // +listType=map - // +listMapKey=name - Disabled []Plugin `json:"disabled,omitempty"` -} - -// Plugin specifies a plugin name and its weight when applicable. Weight is used only for Score plugins. -type Plugin struct { - // Name defines the name of plugin - Name string `json:"name"` - // Weight defines the weight of plugin, only used for Score plugins. - Weight *int32 `json:"weight,omitempty"` -} - -// PluginConfig specifies arguments that should be passed to a plugin at the time of initialization. -// A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure. -// It is up to the plugin to process these Args. -type PluginConfig struct { - // Name defines the name of plugin being configured - Name string `json:"name"` - // Args defines the arguments passed to the plugins at the time of initialization. Args can have arbitrary structure. - Args runtime.RawExtension `json:"args,omitempty"` -} - -func (c *PluginConfig) decodeNestedObjects(d runtime.Decoder) error { - gvk := SchemeGroupVersion.WithKind(c.Name + "Args") - // dry-run to detect and skip out-of-tree plugin args. - if _, _, err := d.Decode(nil, &gvk, nil); runtime.IsNotRegisteredError(err) { - return nil - } - - var strictDecodingErr error - obj, parsedGvk, err := d.Decode(c.Args.Raw, &gvk, nil) - if err != nil { - decodingArgsErr := fmt.Errorf("decoding args for plugin %s: %w", c.Name, err) - if obj != nil && runtime.IsStrictDecodingError(err) { - strictDecodingErr = runtime.NewStrictDecodingError([]error{decodingArgsErr}) - } else { - return decodingArgsErr - } - } - if parsedGvk.GroupKind() != gvk.GroupKind() { - return fmt.Errorf("args for plugin %s were not of type %s, got %s", c.Name, gvk.GroupKind(), parsedGvk.GroupKind()) - } - c.Args.Object = obj - return strictDecodingErr -} - -func (c *PluginConfig) encodeNestedObjects(e runtime.Encoder) error { - if c.Args.Object == nil { - return nil - } - var buf bytes.Buffer - err := e.Encode(c.Args.Object, &buf) - if err != nil { - return err - } - // The encoder might be a YAML encoder, but the parent encoder expects - // JSON output, so we convert YAML back to JSON. - // This is a no-op if produces JSON. - json, err := yaml.YAMLToJSON(buf.Bytes()) - if err != nil { - return err - } - c.Args.Raw = json - return nil -} - -// Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, -// it is assumed that the extender chose not to provide that extension. -type Extender struct { - // URLPrefix at which the extender is available - URLPrefix string `json:"urlPrefix"` - // Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender. - FilterVerb string `json:"filterVerb,omitempty"` - // Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender. - PreemptVerb string `json:"preemptVerb,omitempty"` - // Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender. - PrioritizeVerb string `json:"prioritizeVerb,omitempty"` - // The numeric multiplier for the node scores that the prioritize call generates. - // The weight should be a positive integer - Weight int64 `json:"weight,omitempty"` - // Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. - // If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender - // can implement this function. - BindVerb string `json:"bindVerb,omitempty"` - // EnableHTTPS specifies whether https should be used to communicate with the extender - EnableHTTPS bool `json:"enableHTTPS,omitempty"` - // TLSConfig specifies the transport layer security config - TLSConfig *ExtenderTLSConfig `json:"tlsConfig,omitempty"` - // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize - // timeout is ignored, k8s/other extenders priorities are used to select the node. - HTTPTimeout metav1.Duration `json:"httpTimeout,omitempty"` - // NodeCacheCapable specifies that the extender is capable of caching node information, - // so the scheduler should only send minimal information about the eligible nodes - // assuming that the extender already cached full details of all nodes in the cluster - NodeCacheCapable bool `json:"nodeCacheCapable,omitempty"` - // ManagedResources is a list of extended resources that are managed by - // this extender. - // - A pod will be sent to the extender on the Filter, Prioritize and Bind - // (if the extender is the binder) phases iff the pod requests at least - // one of the extended resources in this list. If empty or unspecified, - // all pods will be sent to this extender. - // - If IgnoredByScheduler is set to true for a resource, kube-scheduler - // will skip checking the resource in predicates. - // +optional - // +listType=atomic - ManagedResources []ExtenderManagedResource `json:"managedResources,omitempty"` - // Ignorable specifies if the extender is ignorable, i.e. scheduling should not - // fail when the extender returns an error or is not reachable. - Ignorable bool `json:"ignorable,omitempty"` -} - -// ExtenderManagedResource describes the arguments of extended resources -// managed by an extender. -type ExtenderManagedResource struct { - // Name is the extended resource name. - Name string `json:"name"` - // IgnoredByScheduler indicates whether kube-scheduler should ignore this - // resource when applying predicates. - IgnoredByScheduler bool `json:"ignoredByScheduler,omitempty"` -} - -// ExtenderTLSConfig contains settings to enable TLS with extender -type ExtenderTLSConfig struct { - // Server should be accessed without verifying the TLS certificate. For testing only. - Insecure bool `json:"insecure,omitempty"` - // ServerName is passed to the server for SNI and is used in the client to check server - // certificates against. If ServerName is empty, the hostname used to contact the - // server is used. - ServerName string `json:"serverName,omitempty"` - - // Server requires TLS client certificate authentication - CertFile string `json:"certFile,omitempty"` - // Server requires TLS client certificate authentication - KeyFile string `json:"keyFile,omitempty"` - // Trusted root certificates for server - CAFile string `json:"caFile,omitempty"` - - // CertData holds PEM-encoded bytes (typically read from a client certificate file). - // CertData takes precedence over CertFile - CertData []byte `json:"certData,omitempty"` - // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). - // KeyData takes precedence over KeyFile - KeyData []byte `json:"keyData,omitempty"` - // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). - // CAData takes precedence over CAFile - CAData []byte `json:"caData,omitempty"` -} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go b/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go deleted file mode 100644 index acc0089c2d2e..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go +++ /dev/null @@ -1,229 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// DefaultPreemptionArgs holds arguments used to configure the -// DefaultPreemption plugin. -type DefaultPreemptionArgs struct { - metav1.TypeMeta `json:",inline"` - - // MinCandidateNodesPercentage is the minimum number of candidates to - // shortlist when dry running preemption as a percentage of number of nodes. - // Must be in the range [0, 100]. Defaults to 10% of the cluster size if - // unspecified. - MinCandidateNodesPercentage *int32 `json:"minCandidateNodesPercentage,omitempty"` - // MinCandidateNodesAbsolute is the absolute minimum number of candidates to - // shortlist. The likely number of candidates enumerated for dry running - // preemption is given by the formula: - // numCandidates = max(numNodes * minCandidateNodesPercentage, minCandidateNodesAbsolute) - // We say "likely" because there are other factors such as PDB violations - // that play a role in the number of candidates shortlisted. Must be at least - // 0 nodes. Defaults to 100 nodes if unspecified. - MinCandidateNodesAbsolute *int32 `json:"minCandidateNodesAbsolute,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InterPodAffinityArgs holds arguments used to configure the InterPodAffinity plugin. -type InterPodAffinityArgs struct { - metav1.TypeMeta `json:",inline"` - - // HardPodAffinityWeight is the scoring weight for existing pods with a - // matching hard affinity to the incoming pod. - HardPodAffinityWeight *int32 `json:"hardPodAffinityWeight,omitempty"` - - // IgnorePreferredTermsOfExistingPods configures the scheduler to ignore existing pods' preferred affinity - // rules when scoring candidate nodes, unless the incoming pod has inter-pod affinities. - IgnorePreferredTermsOfExistingPods bool `json:"ignorePreferredTermsOfExistingPods"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesFitArgs holds arguments used to configure the NodeResourcesFit plugin. -type NodeResourcesFitArgs struct { - metav1.TypeMeta `json:",inline"` - - // IgnoredResources is the list of resources that NodeResources fit filter - // should ignore. This doesn't apply to scoring. - // +listType=atomic - IgnoredResources []string `json:"ignoredResources,omitempty"` - // IgnoredResourceGroups defines the list of resource groups that NodeResources fit filter should ignore. - // e.g. if group is ["example.com"], it will ignore all resource names that begin - // with "example.com", such as "example.com/aaa" and "example.com/bbb". - // A resource group name can't contain '/'. This doesn't apply to scoring. - // +listType=atomic - IgnoredResourceGroups []string `json:"ignoredResourceGroups,omitempty"` - - // ScoringStrategy selects the node resource scoring strategy. - // The default strategy is LeastAllocated with an equal "cpu" and "memory" weight. - ScoringStrategy *ScoringStrategy `json:"scoringStrategy,omitempty"` -} - -// PodTopologySpreadConstraintsDefaulting defines how to set default constraints -// for the PodTopologySpread plugin. -type PodTopologySpreadConstraintsDefaulting string - -const ( - // SystemDefaulting instructs to use the kubernetes defined default. - SystemDefaulting PodTopologySpreadConstraintsDefaulting = "System" - // ListDefaulting instructs to use the config provided default. - ListDefaulting PodTopologySpreadConstraintsDefaulting = "List" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodTopologySpreadArgs holds arguments used to configure the PodTopologySpread plugin. -type PodTopologySpreadArgs struct { - metav1.TypeMeta `json:",inline"` - - // DefaultConstraints defines topology spread constraints to be applied to - // Pods that don't define any in `pod.spec.topologySpreadConstraints`. - // `.defaultConstraints[*].labelSelectors` must be empty, as they are - // deduced from the Pod's membership to Services, ReplicationControllers, - // ReplicaSets or StatefulSets. - // When not empty, .defaultingType must be "List". - // +optional - // +listType=atomic - DefaultConstraints []corev1.TopologySpreadConstraint `json:"defaultConstraints,omitempty"` - - // DefaultingType determines how .defaultConstraints are deduced. Can be one - // of "System" or "List". - // - // - "System": Use kubernetes defined constraints that spread Pods among - // Nodes and Zones. - // - "List": Use constraints defined in .defaultConstraints. - // - // Defaults to "System". - // +optional - DefaultingType PodTopologySpreadConstraintsDefaulting `json:"defaultingType,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesBalancedAllocationArgs holds arguments used to configure NodeResourcesBalancedAllocation plugin. -type NodeResourcesBalancedAllocationArgs struct { - metav1.TypeMeta `json:",inline"` - - // Resources to be managed, the default is "cpu" and "memory" if not specified. - // +listType=map - // +listMapKey=name - Resources []ResourceSpec `json:"resources,omitempty"` -} - -// UtilizationShapePoint represents single point of priority function shape. -type UtilizationShapePoint struct { - // Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100. - Utilization int32 `json:"utilization"` - // Score assigned to given utilization (y axis). Valid values are 0 to 10. - Score int32 `json:"score"` -} - -// ResourceSpec represents a single resource. -type ResourceSpec struct { - // Name of the resource. - Name string `json:"name"` - // Weight of the resource. - Weight int64 `json:"weight,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// VolumeBindingArgs holds arguments used to configure the VolumeBinding plugin. -type VolumeBindingArgs struct { - metav1.TypeMeta `json:",inline"` - - // BindTimeoutSeconds is the timeout in seconds in volume binding operation. - // Value must be non-negative integer. The value zero indicates no waiting. - // If this value is nil, the default value (600) will be used. - BindTimeoutSeconds *int64 `json:"bindTimeoutSeconds,omitempty"` - - // Shape specifies the points defining the score function shape, which is - // used to score nodes based on the utilization of statically provisioned - // PVs. The utilization is calculated by dividing the total requested - // storage of the pod by the total capacity of feasible PVs on each node. - // Each point contains utilization (ranges from 0 to 100) and its - // associated score (ranges from 0 to 10). You can turn the priority by - // specifying different scores for different utilization numbers. - // The default shape points are: - // 1) 0 for 0 utilization - // 2) 10 for 100 utilization - // All points must be sorted in increasing order by utilization. - // +featureGate=VolumeCapacityPriority - // +optional - // +listType=atomic - Shape []UtilizationShapePoint `json:"shape,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeAffinityArgs holds arguments to configure the NodeAffinity plugin. -type NodeAffinityArgs struct { - metav1.TypeMeta `json:",inline"` - - // AddedAffinity is applied to all Pods additionally to the NodeAffinity - // specified in the PodSpec. That is, Nodes need to satisfy AddedAffinity - // AND .spec.NodeAffinity. AddedAffinity is empty by default (all Nodes - // match). - // When AddedAffinity is used, some Pods with affinity requirements that match - // a specific Node (such as Daemonset Pods) might remain unschedulable. - // +optional - AddedAffinity *corev1.NodeAffinity `json:"addedAffinity,omitempty"` -} - -// ScoringStrategyType the type of scoring strategy used in NodeResourcesFit plugin. -type ScoringStrategyType string - -const ( - // LeastAllocated strategy prioritizes nodes with least allocated resources. - LeastAllocated ScoringStrategyType = "LeastAllocated" - // MostAllocated strategy prioritizes nodes with most allocated resources. - MostAllocated ScoringStrategyType = "MostAllocated" - // RequestedToCapacityRatio strategy allows specifying a custom shape function - // to score nodes based on the request to capacity ratio. - RequestedToCapacityRatio ScoringStrategyType = "RequestedToCapacityRatio" -) - -// ScoringStrategy define ScoringStrategyType for node resource plugin -type ScoringStrategy struct { - // Type selects which strategy to run. - Type ScoringStrategyType `json:"type,omitempty"` - - // Resources to consider when scoring. - // The default resource set includes "cpu" and "memory" with an equal weight. - // Allowed weights go from 1 to 100. - // Weight defaults to 1 if not specified or explicitly set to 0. - // +listType=map - // +listMapKey=topologyKey - Resources []ResourceSpec `json:"resources,omitempty"` - - // Arguments specific to RequestedToCapacityRatio strategy. - RequestedToCapacityRatio *RequestedToCapacityRatioParam `json:"requestedToCapacityRatio,omitempty"` -} - -// RequestedToCapacityRatioParam define RequestedToCapacityRatio parameters -type RequestedToCapacityRatioParam struct { - // Shape is a list of points defining the scoring function shape. - // +listType=atomic - Shape []UtilizationShapePoint `json:"shape,omitempty"` -} diff --git a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/zz_generated.deepcopy.go deleted file mode 100644 index 2b549d4990a5..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kube-scheduler/config/v1beta3/zz_generated.deepcopy.go +++ /dev/null @@ -1,604 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1beta3 - -import ( - v1 "k8s.io/api/core/v1" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DefaultPreemptionArgs) DeepCopyInto(out *DefaultPreemptionArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.MinCandidateNodesPercentage != nil { - in, out := &in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage - *out = new(int32) - **out = **in - } - if in.MinCandidateNodesAbsolute != nil { - in, out := &in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DefaultPreemptionArgs. -func (in *DefaultPreemptionArgs) DeepCopy() *DefaultPreemptionArgs { - if in == nil { - return nil - } - out := new(DefaultPreemptionArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DefaultPreemptionArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Extender) DeepCopyInto(out *Extender) { - *out = *in - if in.TLSConfig != nil { - in, out := &in.TLSConfig, &out.TLSConfig - *out = new(ExtenderTLSConfig) - (*in).DeepCopyInto(*out) - } - out.HTTPTimeout = in.HTTPTimeout - if in.ManagedResources != nil { - in, out := &in.ManagedResources, &out.ManagedResources - *out = make([]ExtenderManagedResource, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Extender. -func (in *Extender) DeepCopy() *Extender { - if in == nil { - return nil - } - out := new(Extender) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExtenderManagedResource) DeepCopyInto(out *ExtenderManagedResource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtenderManagedResource. -func (in *ExtenderManagedResource) DeepCopy() *ExtenderManagedResource { - if in == nil { - return nil - } - out := new(ExtenderManagedResource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExtenderTLSConfig) DeepCopyInto(out *ExtenderTLSConfig) { - *out = *in - if in.CertData != nil { - in, out := &in.CertData, &out.CertData - *out = make([]byte, len(*in)) - copy(*out, *in) - } - if in.KeyData != nil { - in, out := &in.KeyData, &out.KeyData - *out = make([]byte, len(*in)) - copy(*out, *in) - } - if in.CAData != nil { - in, out := &in.CAData, &out.CAData - *out = make([]byte, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtenderTLSConfig. -func (in *ExtenderTLSConfig) DeepCopy() *ExtenderTLSConfig { - if in == nil { - return nil - } - out := new(ExtenderTLSConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InterPodAffinityArgs) DeepCopyInto(out *InterPodAffinityArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.HardPodAffinityWeight != nil { - in, out := &in.HardPodAffinityWeight, &out.HardPodAffinityWeight - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterPodAffinityArgs. -func (in *InterPodAffinityArgs) DeepCopy() *InterPodAffinityArgs { - if in == nil { - return nil - } - out := new(InterPodAffinityArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InterPodAffinityArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KubeSchedulerConfiguration) DeepCopyInto(out *KubeSchedulerConfiguration) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Parallelism != nil { - in, out := &in.Parallelism, &out.Parallelism - *out = new(int32) - **out = **in - } - in.LeaderElection.DeepCopyInto(&out.LeaderElection) - out.ClientConnection = in.ClientConnection - in.DebuggingConfiguration.DeepCopyInto(&out.DebuggingConfiguration) - if in.PercentageOfNodesToScore != nil { - in, out := &in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore - *out = new(int32) - **out = **in - } - if in.PodInitialBackoffSeconds != nil { - in, out := &in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds - *out = new(int64) - **out = **in - } - if in.PodMaxBackoffSeconds != nil { - in, out := &in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds - *out = new(int64) - **out = **in - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]KubeSchedulerProfile, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Extenders != nil { - in, out := &in.Extenders, &out.Extenders - *out = make([]Extender, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeSchedulerConfiguration. -func (in *KubeSchedulerConfiguration) DeepCopy() *KubeSchedulerConfiguration { - if in == nil { - return nil - } - out := new(KubeSchedulerConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KubeSchedulerConfiguration) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KubeSchedulerProfile) DeepCopyInto(out *KubeSchedulerProfile) { - *out = *in - if in.SchedulerName != nil { - in, out := &in.SchedulerName, &out.SchedulerName - *out = new(string) - **out = **in - } - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(Plugins) - (*in).DeepCopyInto(*out) - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]PluginConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeSchedulerProfile. -func (in *KubeSchedulerProfile) DeepCopy() *KubeSchedulerProfile { - if in == nil { - return nil - } - out := new(KubeSchedulerProfile) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeAffinityArgs) DeepCopyInto(out *NodeAffinityArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.AddedAffinity != nil { - in, out := &in.AddedAffinity, &out.AddedAffinity - *out = new(v1.NodeAffinity) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeAffinityArgs. -func (in *NodeAffinityArgs) DeepCopy() *NodeAffinityArgs { - if in == nil { - return nil - } - out := new(NodeAffinityArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeAffinityArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopyInto(out *NodeResourcesBalancedAllocationArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesBalancedAllocationArgs. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopy() *NodeResourcesBalancedAllocationArgs { - if in == nil { - return nil - } - out := new(NodeResourcesBalancedAllocationArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesFitArgs) DeepCopyInto(out *NodeResourcesFitArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.IgnoredResources != nil { - in, out := &in.IgnoredResources, &out.IgnoredResources - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.IgnoredResourceGroups != nil { - in, out := &in.IgnoredResourceGroups, &out.IgnoredResourceGroups - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ScoringStrategy != nil { - in, out := &in.ScoringStrategy, &out.ScoringStrategy - *out = new(ScoringStrategy) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesFitArgs. -func (in *NodeResourcesFitArgs) DeepCopy() *NodeResourcesFitArgs { - if in == nil { - return nil - } - out := new(NodeResourcesFitArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesFitArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Plugin) DeepCopyInto(out *Plugin) { - *out = *in - if in.Weight != nil { - in, out := &in.Weight, &out.Weight - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Plugin. -func (in *Plugin) DeepCopy() *Plugin { - if in == nil { - return nil - } - out := new(Plugin) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PluginConfig) DeepCopyInto(out *PluginConfig) { - *out = *in - in.Args.DeepCopyInto(&out.Args) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginConfig. -func (in *PluginConfig) DeepCopy() *PluginConfig { - if in == nil { - return nil - } - out := new(PluginConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PluginSet) DeepCopyInto(out *PluginSet) { - *out = *in - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]Plugin, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]Plugin, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginSet. -func (in *PluginSet) DeepCopy() *PluginSet { - if in == nil { - return nil - } - out := new(PluginSet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Plugins) DeepCopyInto(out *Plugins) { - *out = *in - in.PreEnqueue.DeepCopyInto(&out.PreEnqueue) - in.QueueSort.DeepCopyInto(&out.QueueSort) - in.PreFilter.DeepCopyInto(&out.PreFilter) - in.Filter.DeepCopyInto(&out.Filter) - in.PostFilter.DeepCopyInto(&out.PostFilter) - in.PreScore.DeepCopyInto(&out.PreScore) - in.Score.DeepCopyInto(&out.Score) - in.Reserve.DeepCopyInto(&out.Reserve) - in.Permit.DeepCopyInto(&out.Permit) - in.PreBind.DeepCopyInto(&out.PreBind) - in.Bind.DeepCopyInto(&out.Bind) - in.PostBind.DeepCopyInto(&out.PostBind) - in.MultiPoint.DeepCopyInto(&out.MultiPoint) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Plugins. -func (in *Plugins) DeepCopy() *Plugins { - if in == nil { - return nil - } - out := new(Plugins) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodTopologySpreadArgs) DeepCopyInto(out *PodTopologySpreadArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.DefaultConstraints != nil { - in, out := &in.DefaultConstraints, &out.DefaultConstraints - *out = make([]v1.TopologySpreadConstraint, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTopologySpreadArgs. -func (in *PodTopologySpreadArgs) DeepCopy() *PodTopologySpreadArgs { - if in == nil { - return nil - } - out := new(PodTopologySpreadArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodTopologySpreadArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RequestedToCapacityRatioParam) DeepCopyInto(out *RequestedToCapacityRatioParam) { - *out = *in - if in.Shape != nil { - in, out := &in.Shape, &out.Shape - *out = make([]UtilizationShapePoint, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestedToCapacityRatioParam. -func (in *RequestedToCapacityRatioParam) DeepCopy() *RequestedToCapacityRatioParam { - if in == nil { - return nil - } - out := new(RequestedToCapacityRatioParam) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceSpec. -func (in *ResourceSpec) DeepCopy() *ResourceSpec { - if in == nil { - return nil - } - out := new(ResourceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ScoringStrategy) DeepCopyInto(out *ScoringStrategy) { - *out = *in - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - if in.RequestedToCapacityRatio != nil { - in, out := &in.RequestedToCapacityRatio, &out.RequestedToCapacityRatio - *out = new(RequestedToCapacityRatioParam) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScoringStrategy. -func (in *ScoringStrategy) DeepCopy() *ScoringStrategy { - if in == nil { - return nil - } - out := new(ScoringStrategy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UtilizationShapePoint) DeepCopyInto(out *UtilizationShapePoint) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UtilizationShapePoint. -func (in *UtilizationShapePoint) DeepCopy() *UtilizationShapePoint { - if in == nil { - return nil - } - out := new(UtilizationShapePoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeBindingArgs) DeepCopyInto(out *VolumeBindingArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.BindTimeoutSeconds != nil { - in, out := &in.BindTimeoutSeconds, &out.BindTimeoutSeconds - *out = new(int64) - **out = **in - } - if in.Shape != nil { - in, out := &in.Shape, &out.Shape - *out = make([]UtilizationShapePoint, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeBindingArgs. -func (in *VolumeBindingArgs) DeepCopy() *VolumeBindingArgs { - if in == nil { - return nil - } - out := new(VolumeBindingArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *VolumeBindingArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go b/cluster-autoscaler/vendor/k8s.io/kubelet/pkg/types/labels.go similarity index 100% rename from cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go rename to cluster-autoscaler/vendor/k8s.io/kubelet/pkg/types/labels.go diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go index 78b2d2c13947..e9c1af9470b3 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go @@ -201,6 +201,7 @@ is checked every 20 seconds (also configurable with a flag).`, if cleanFlagSet.Changed("pod-infra-container-image") { klog.InfoS("--pod-infra-container-image will not be pruned by the image garbage collector in kubelet and should also be set in the remote runtime") + _ = cmd.Flags().MarkDeprecated("pod-infra-container-image", "--pod-infra-container-image will be removed in 1.30. Image garbage collector will get sandbox image information from CRI.") } // load kubelet config file, if provided @@ -833,6 +834,10 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend kubeDeps.PodStartupLatencyTracker = kubeletutil.NewPodStartupLatencyTracker() } + if kubeDeps.NodeStartupLatencyTracker == nil { + kubeDeps.NodeStartupLatencyTracker = kubeletutil.NewNodeStartupLatencyTracker() + } + // TODO(vmarmol): Do this through container config. oomAdjuster := kubeDeps.OOMAdjuster if err := oomAdjuster.ApplyOOMScoreAdj(0, int(s.OOMScoreAdj)); err != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/util.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/util.go index c73d96a6c4d0..fefb13b2b682 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/util.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/service/util.go @@ -67,6 +67,13 @@ func GetLoadBalancerSourceRanges(service *api.Service) (utilnet.IPNetSet, error) return ipnets, nil } +// ExternallyAccessible checks if service is externally accessible. +func ExternallyAccessible(service *api.Service) bool { + return service.Spec.Type == api.ServiceTypeLoadBalancer || + service.Spec.Type == api.ServiceTypeNodePort || + (service.Spec.Type == api.ServiceTypeClusterIP && len(service.Spec.ExternalIPs) > 0) +} + // RequestsOnlyLocalTraffic checks if service requests OnlyLocal traffic. func RequestsOnlyLocalTraffic(service *api.Service) bool { if service.Spec.Type != api.ServiceTypeLoadBalancer && diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go index 683b8ed1f7d5..b051c4179281 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/api/v1/service/util.go @@ -67,10 +67,16 @@ func GetLoadBalancerSourceRanges(service *v1.Service) (utilnet.IPNetSet, error) return ipnets, nil } -// ExternalPolicyLocal checks if service has ETP = Local. +// ExternallyAccessible checks if service is externally accessible. +func ExternallyAccessible(service *v1.Service) bool { + return service.Spec.Type == v1.ServiceTypeLoadBalancer || + service.Spec.Type == v1.ServiceTypeNodePort || + (service.Spec.Type == v1.ServiceTypeClusterIP && len(service.Spec.ExternalIPs) > 0) +} + +// ExternalPolicyLocal checks if service is externally accessible and has ETP = Local. func ExternalPolicyLocal(service *v1.Service) bool { - if service.Spec.Type != v1.ServiceTypeLoadBalancer && - service.Spec.Type != v1.ServiceTypeNodePort { + if !ExternallyAccessible(service) { return false } return service.Spec.ExternalTrafficPolicy == v1.ServiceExternalTrafficPolicyLocal diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go index a3a8caf03eaf..cb5e6eb22e70 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go @@ -241,6 +241,7 @@ type PodFailurePolicyRule struct { // as a list of pod condition patterns. The requirement is satisfied if at // least one pattern matches an actual pod condition. At most 20 elements are allowed. // +listType=atomic + // +optional OnPodConditions []PodFailurePolicyOnPodConditionsPattern } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go index 75c68af621a2..e40b8bfa1047 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/types.go @@ -440,7 +440,7 @@ type PersistentVolumeClaimSpec struct { // that are lower than previous value but must still be higher than capacity recorded in the // status field of the claim. // +optional - Resources ResourceRequirements + Resources VolumeResourceRequirements // VolumeName is the binding reference to the PersistentVolume backing this // claim. When set to non-empty value Selector is not evaluated // +optional @@ -2282,6 +2282,18 @@ type ResourceRequirements struct { Claims []ResourceClaim } +// VolumeResourceRequirements describes the storage resource requirements for a volume. +type VolumeResourceRequirements struct { + // Limits describes the maximum amount of compute resources allowed. + // +optional + Limits ResourceList + // Requests describes the minimum amount of compute resources required. + // If Request is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value + // +optional + Requests ResourceList +} + // ResourceClaim references one entry in PodSpec.ResourceClaims. type ResourceClaim struct { // Name must match the name of one entry in pod.spec.resourceClaims of @@ -2617,12 +2629,6 @@ const ( PodReady PodConditionType = "Ready" // PodInitialized means that all init containers in the pod have started successfully. PodInitialized PodConditionType = "Initialized" - // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler - // can't schedule the pod right now, for example due to insufficient resources in the cluster. - PodReasonUnschedulable = "Unschedulable" - // PodReasonSchedulingGated reason in PodScheduled PodCondition means that the scheduler - // skips scheduling the pod because one or more scheduling gates are still present. - PodReasonSchedulingGated = "SchedulingGated" // ContainersReady indicates whether all containers in the pod are ready. ContainersReady PodConditionType = "ContainersReady" // DisruptionTarget indicates the pod is about to be terminated due to a @@ -4074,6 +4080,15 @@ type LoadBalancerIngress struct { // +optional Hostname string + // IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified. + // Setting this to "VIP" indicates that traffic is delivered to the node with + // the destination set to the load-balancer's IP and port. + // Setting this to "Proxy" indicates that traffic is delivered to the node or pod with + // the destination set to the node's IP and node port or the pod's IP and port. + // Service implementations may use this information to adjust traffic routing. + // +optional + IPMode *LoadBalancerIPMode + // Ports is a list of records of service ports // If used, every port defined in the service should have an entry in it // +optional @@ -6146,3 +6161,15 @@ type PortStatus struct { // +kubebuilder:validation:MaxLength=316 Error *string } + +// LoadBalancerIPMode represents the mode of the LoadBalancer ingress IP +type LoadBalancerIPMode string + +const ( + // LoadBalancerIPModeVIP indicates that traffic is delivered to the node with + // the destination set to the load-balancer's IP and port. + LoadBalancerIPModeVIP LoadBalancerIPMode = "VIP" + // LoadBalancerIPModeProxy indicates that traffic is delivered to the node or pod with + // the destination set to the node's IP and port or the pod's IP and port. + LoadBalancerIPModeProxy LoadBalancerIPMode = "Proxy" +) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go index 51337fe169cb..8b645ebf49dc 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/defaults.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/api/v1/service" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/util/parsers" "k8s.io/utils/pointer" @@ -122,11 +123,9 @@ func SetDefaults_Service(obj *v1.Service) { sp.TargetPort = intstr.FromInt32(sp.Port) } } - // Defaults ExternalTrafficPolicy field for NodePort / LoadBalancer service + // Defaults ExternalTrafficPolicy field for externally-accessible service // to Global for consistency. - if (obj.Spec.Type == v1.ServiceTypeNodePort || - obj.Spec.Type == v1.ServiceTypeLoadBalancer) && - obj.Spec.ExternalTrafficPolicy == "" { + if service.ExternallyAccessible(obj) && obj.Spec.ExternalTrafficPolicy == "" { obj.Spec.ExternalTrafficPolicy = v1.ServiceExternalTrafficPolicyCluster } @@ -142,6 +141,19 @@ func SetDefaults_Service(obj *v1.Service) { obj.Spec.AllocateLoadBalancerNodePorts = pointer.Bool(true) } } + + if obj.Spec.Type == v1.ServiceTypeLoadBalancer { + if utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) { + ipMode := v1.LoadBalancerIPModeVIP + + for i, ing := range obj.Status.LoadBalancer.Ingress { + if ing.IP != "" && ing.IPMode == nil { + obj.Status.LoadBalancer.Ingress[i].IPMode = &ipMode + } + } + } + } + } func SetDefaults_Pod(obj *v1.Pod) { // If limits are specified, but requests are not, default requests to limits diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go index 8a432e8d7057..e69a632041ca 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/v1/zz_generated.conversion.go @@ -2087,6 +2087,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.VolumeResourceRequirements)(nil), (*core.VolumeResourceRequirements)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements(a.(*v1.VolumeResourceRequirements), b.(*core.VolumeResourceRequirements), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.VolumeResourceRequirements)(nil), (*v1.VolumeResourceRequirements)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements(a.(*core.VolumeResourceRequirements), b.(*v1.VolumeResourceRequirements), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.VolumeSource)(nil), (*core.VolumeSource)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_VolumeSource_To_core_VolumeSource(a.(*v1.VolumeSource), b.(*core.VolumeSource), scope) }); err != nil { @@ -4478,6 +4488,7 @@ func Convert_core_List_To_v1_List(in *core.List, out *v1.List, s conversion.Scop func autoConvert_v1_LoadBalancerIngress_To_core_LoadBalancerIngress(in *v1.LoadBalancerIngress, out *core.LoadBalancerIngress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname + out.IPMode = (*core.LoadBalancerIPMode)(unsafe.Pointer(in.IPMode)) out.Ports = *(*[]core.PortStatus)(unsafe.Pointer(&in.Ports)) return nil } @@ -4490,6 +4501,7 @@ func Convert_v1_LoadBalancerIngress_To_core_LoadBalancerIngress(in *v1.LoadBalan func autoConvert_core_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *core.LoadBalancerIngress, out *v1.LoadBalancerIngress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname + out.IPMode = (*v1.LoadBalancerIPMode)(unsafe.Pointer(in.IPMode)) out.Ports = *(*[]v1.PortStatus)(unsafe.Pointer(&in.Ports)) return nil } @@ -5321,7 +5333,7 @@ func Convert_core_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList(in * func autoConvert_v1_PersistentVolumeClaimSpec_To_core_PersistentVolumeClaimSpec(in *v1.PersistentVolumeClaimSpec, out *core.PersistentVolumeClaimSpec, s conversion.Scope) error { out.AccessModes = *(*[]core.PersistentVolumeAccessMode)(unsafe.Pointer(&in.AccessModes)) out.Selector = (*metav1.LabelSelector)(unsafe.Pointer(in.Selector)) - if err := Convert_v1_ResourceRequirements_To_core_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + if err := Convert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements(&in.Resources, &out.Resources, s); err != nil { return err } out.VolumeName = in.VolumeName @@ -5340,7 +5352,7 @@ func Convert_v1_PersistentVolumeClaimSpec_To_core_PersistentVolumeClaimSpec(in * func autoConvert_core_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec(in *core.PersistentVolumeClaimSpec, out *v1.PersistentVolumeClaimSpec, s conversion.Scope) error { out.AccessModes = *(*[]v1.PersistentVolumeAccessMode)(unsafe.Pointer(&in.AccessModes)) out.Selector = (*metav1.LabelSelector)(unsafe.Pointer(in.Selector)) - if err := Convert_core_ResourceRequirements_To_v1_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + if err := Convert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements(&in.Resources, &out.Resources, s); err != nil { return err } out.VolumeName = in.VolumeName @@ -8465,6 +8477,28 @@ func Convert_core_VolumeProjection_To_v1_VolumeProjection(in *core.VolumeProject return autoConvert_core_VolumeProjection_To_v1_VolumeProjection(in, out, s) } +func autoConvert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements(in *v1.VolumeResourceRequirements, out *core.VolumeResourceRequirements, s conversion.Scope) error { + out.Limits = *(*core.ResourceList)(unsafe.Pointer(&in.Limits)) + out.Requests = *(*core.ResourceList)(unsafe.Pointer(&in.Requests)) + return nil +} + +// Convert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements is an autogenerated conversion function. +func Convert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements(in *v1.VolumeResourceRequirements, out *core.VolumeResourceRequirements, s conversion.Scope) error { + return autoConvert_v1_VolumeResourceRequirements_To_core_VolumeResourceRequirements(in, out, s) +} + +func autoConvert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements(in *core.VolumeResourceRequirements, out *v1.VolumeResourceRequirements, s conversion.Scope) error { + out.Limits = *(*v1.ResourceList)(unsafe.Pointer(&in.Limits)) + out.Requests = *(*v1.ResourceList)(unsafe.Pointer(&in.Requests)) + return nil +} + +// Convert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements is an autogenerated conversion function. +func Convert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements(in *core.VolumeResourceRequirements, out *v1.VolumeResourceRequirements, s conversion.Scope) error { + return autoConvert_core_VolumeResourceRequirements_To_v1_VolumeResourceRequirements(in, out, s) +} + func autoConvert_v1_VolumeSource_To_core_VolumeSource(in *v1.VolumeSource, out *core.VolumeSource, s conversion.Scope) error { out.HostPath = (*core.HostPathVolumeSource)(unsafe.Pointer(in.HostPath)) out.EmptyDir = (*core.EmptyDirVolumeSource)(unsafe.Pointer(in.EmptyDir)) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go index cd9cbbb8b7e2..ecf849b4e334 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/validation/validation.go @@ -2022,6 +2022,8 @@ type PersistentVolumeClaimSpecValidationOptions struct { EnableRecoverFromExpansionFailure bool // Allow to validate the label value of the label selector AllowInvalidLabelValueInSelector bool + // Allow to validate the API group of the data source and data source reference + AllowInvalidAPIGroupInDataSourceOrRef bool } func ValidationOptionsForPersistentVolumeClaim(pvc, oldPvc *core.PersistentVolumeClaim) PersistentVolumeClaimSpecValidationOptions { @@ -2034,6 +2036,10 @@ func ValidationOptionsForPersistentVolumeClaim(pvc, oldPvc *core.PersistentVolum // If there's no old PVC, use the options based solely on feature enablement return opts } + + // If the old object had an invalid API group in the data source or data source reference, continue to allow it in the new object + opts.AllowInvalidAPIGroupInDataSourceOrRef = allowInvalidAPIGroupInDataSourceOrRef(&oldPvc.Spec) + labelSelectorValidationOpts := unversionedvalidation.LabelSelectorValidationOptions{ AllowInvalidLabelValueInSelector: opts.AllowInvalidLabelValueInSelector, } @@ -2077,6 +2083,17 @@ func ValidationOptionsForPersistentVolumeClaimTemplate(claimTemplate, oldClaimTe return opts } +// allowInvalidAPIGroupInDataSourceOrRef returns true if the spec contains a data source or data source reference with an API group +func allowInvalidAPIGroupInDataSourceOrRef(spec *core.PersistentVolumeClaimSpec) bool { + if spec.DataSource != nil && spec.DataSource.APIGroup != nil { + return true + } + if spec.DataSourceRef != nil && spec.DataSourceRef.APIGroup != nil { + return true + } + return false +} + // ValidatePersistentVolumeClaim validates a PersistentVolumeClaim func ValidatePersistentVolumeClaim(pvc *core.PersistentVolumeClaim, opts PersistentVolumeClaimSpecValidationOptions) field.ErrorList { allErrs := ValidateObjectMeta(&pvc.ObjectMeta, true, ValidatePersistentVolumeName, field.NewPath("metadata")) @@ -2085,7 +2102,7 @@ func ValidatePersistentVolumeClaim(pvc *core.PersistentVolumeClaim, opts Persist } // validateDataSource validates a DataSource/DataSourceRef in a PersistentVolumeClaimSpec -func validateDataSource(dataSource *core.TypedLocalObjectReference, fldPath *field.Path) field.ErrorList { +func validateDataSource(dataSource *core.TypedLocalObjectReference, fldPath *field.Path, allowInvalidAPIGroupInDataSourceOrRef bool) field.ErrorList { allErrs := field.ErrorList{} if len(dataSource.Name) == 0 { @@ -2101,12 +2118,17 @@ func validateDataSource(dataSource *core.TypedLocalObjectReference, fldPath *fie if len(apiGroup) == 0 && dataSource.Kind != "PersistentVolumeClaim" { allErrs = append(allErrs, field.Invalid(fldPath, dataSource.Kind, "must be 'PersistentVolumeClaim' when referencing the default apiGroup")) } + if len(apiGroup) > 0 && !allowInvalidAPIGroupInDataSourceOrRef { + for _, errString := range validation.IsDNS1123Subdomain(apiGroup) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("apiGroup"), apiGroup, errString)) + } + } return allErrs } // validateDataSourceRef validates a DataSourceRef in a PersistentVolumeClaimSpec -func validateDataSourceRef(dataSourceRef *core.TypedObjectReference, fldPath *field.Path) field.ErrorList { +func validateDataSourceRef(dataSourceRef *core.TypedObjectReference, fldPath *field.Path, allowInvalidAPIGroupInDataSourceOrRef bool) field.ErrorList { allErrs := field.ErrorList{} if len(dataSourceRef.Name) == 0 { @@ -2122,6 +2144,11 @@ func validateDataSourceRef(dataSourceRef *core.TypedObjectReference, fldPath *fi if len(apiGroup) == 0 && dataSourceRef.Kind != "PersistentVolumeClaim" { allErrs = append(allErrs, field.Invalid(fldPath, dataSourceRef.Kind, "must be 'PersistentVolumeClaim' when referencing the default apiGroup")) } + if len(apiGroup) > 0 && !allowInvalidAPIGroupInDataSourceOrRef { + for _, errString := range validation.IsDNS1123Subdomain(apiGroup) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("apiGroup"), apiGroup, errString)) + } + } if dataSourceRef.Namespace != nil && len(*dataSourceRef.Namespace) > 0 { for _, msg := range ValidateNameFunc(ValidateNamespaceName)(*dataSourceRef.Namespace, false) { @@ -2185,10 +2212,10 @@ func ValidatePersistentVolumeClaimSpec(spec *core.PersistentVolumeClaimSpec, fld } if spec.DataSource != nil { - allErrs = append(allErrs, validateDataSource(spec.DataSource, fldPath.Child("dataSource"))...) + allErrs = append(allErrs, validateDataSource(spec.DataSource, fldPath.Child("dataSource"), opts.AllowInvalidAPIGroupInDataSourceOrRef)...) } if spec.DataSourceRef != nil { - allErrs = append(allErrs, validateDataSourceRef(spec.DataSourceRef, fldPath.Child("dataSourceRef"))...) + allErrs = append(allErrs, validateDataSourceRef(spec.DataSourceRef, fldPath.Child("dataSourceRef"), opts.AllowInvalidAPIGroupInDataSourceOrRef)...) } if spec.DataSourceRef != nil && spec.DataSourceRef.Namespace != nil && len(*spec.DataSourceRef.Namespace) > 0 { if spec.DataSource != nil { @@ -5332,10 +5359,6 @@ func validateServicePort(sp *core.ServicePort, requireName, isHeadlessService bo return allErrs } -func needsExternalTrafficPolicy(svc *core.Service) bool { - return svc.Spec.Type == core.ServiceTypeLoadBalancer || svc.Spec.Type == core.ServiceTypeNodePort -} - var validExternalTrafficPolicies = sets.NewString( string(core.ServiceExternalTrafficPolicyCluster), string(core.ServiceExternalTrafficPolicyLocal)) @@ -5345,10 +5368,10 @@ func validateServiceExternalTrafficPolicy(service *core.Service) field.ErrorList fldPath := field.NewPath("spec") - if !needsExternalTrafficPolicy(service) { + if !apiservice.ExternallyAccessible(service) { if service.Spec.ExternalTrafficPolicy != "" { allErrs = append(allErrs, field.Invalid(fldPath.Child("externalTrafficPolicy"), service.Spec.ExternalTrafficPolicy, - "may only be set when `type` is 'NodePort' or 'LoadBalancer'")) + "may only be set for externally-accessible services")) } } else { if service.Spec.ExternalTrafficPolicy == "" { @@ -5441,7 +5464,7 @@ func ValidateServiceUpdate(service, oldService *core.Service) field.ErrorList { // ValidateServiceStatusUpdate tests if required fields in the Service are set when updating status. func ValidateServiceStatusUpdate(service, oldService *core.Service) field.ErrorList { allErrs := ValidateObjectMetaUpdate(&service.ObjectMeta, &oldService.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateLoadBalancerStatus(&service.Status.LoadBalancer, field.NewPath("status", "loadBalancer"))...) + allErrs = append(allErrs, ValidateLoadBalancerStatus(&service.Status.LoadBalancer, field.NewPath("status", "loadBalancer"), &service.Spec)...) return allErrs } @@ -7048,22 +7071,42 @@ func ValidatePodLogOptions(opts *core.PodLogOptions) field.ErrorList { return allErrs } +var ( + supportedLoadBalancerIPMode = sets.NewString(string(core.LoadBalancerIPModeVIP), string(core.LoadBalancerIPModeProxy)) +) + // ValidateLoadBalancerStatus validates required fields on a LoadBalancerStatus -func ValidateLoadBalancerStatus(status *core.LoadBalancerStatus, fldPath *field.Path) field.ErrorList { +func ValidateLoadBalancerStatus(status *core.LoadBalancerStatus, fldPath *field.Path, spec *core.ServiceSpec) field.ErrorList { allErrs := field.ErrorList{} - for i, ingress := range status.Ingress { - idxPath := fldPath.Child("ingress").Index(i) - if len(ingress.IP) > 0 { - if isIP := (netutils.ParseIPSloppy(ingress.IP) != nil); !isIP { - allErrs = append(allErrs, field.Invalid(idxPath.Child("ip"), ingress.IP, "must be a valid IP address")) + ingrPath := fldPath.Child("ingress") + if !utilfeature.DefaultFeatureGate.Enabled(features.AllowServiceLBStatusOnNonLB) && spec.Type != core.ServiceTypeLoadBalancer && len(status.Ingress) != 0 { + allErrs = append(allErrs, field.Forbidden(ingrPath, "may only be used when `spec.type` is 'LoadBalancer'")) + } else { + for i, ingress := range status.Ingress { + idxPath := ingrPath.Index(i) + if len(ingress.IP) > 0 { + if isIP := (netutils.ParseIPSloppy(ingress.IP) != nil); !isIP { + allErrs = append(allErrs, field.Invalid(idxPath.Child("ip"), ingress.IP, "must be a valid IP address")) + } } - } - if len(ingress.Hostname) > 0 { - for _, msg := range validation.IsDNS1123Subdomain(ingress.Hostname) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, msg)) + + if utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) && ingress.IPMode == nil { + if len(ingress.IP) > 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("ipMode"), "must be specified when `ip` is set")) + } + } else if ingress.IPMode != nil && len(ingress.IP) == 0 { + allErrs = append(allErrs, field.Forbidden(idxPath.Child("ipMode"), "may not be specified when `ip` is not set")) + } else if ingress.IPMode != nil && !supportedLoadBalancerIPMode.Has(string(*ingress.IPMode)) { + allErrs = append(allErrs, field.NotSupported(idxPath.Child("ipMode"), ingress.IPMode, supportedLoadBalancerIPMode.List())) } - if isIP := (netutils.ParseIPSloppy(ingress.Hostname) != nil); isIP { - allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, "must be a DNS name, not an IP address")) + + if len(ingress.Hostname) > 0 { + for _, msg := range validation.IsDNS1123Subdomain(ingress.Hostname) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, msg)) + } + if isIP := (netutils.ParseIPSloppy(ingress.Hostname) != nil); isIP { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, "must be a DNS name, not an IP address")) + } } } } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go index 471fdbd6f398..cf8ba45cc950 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go @@ -2230,6 +2230,11 @@ func (in *List) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) { *out = *in + if in.IPMode != nil { + in, out := &in.IPMode, &out.IPMode + *out = new(LoadBalancerIPMode) + **out = **in + } if in.Ports != nil { in, out := &in.Ports, &out.Ports *out = make([]PortStatus, len(*in)) @@ -6025,6 +6030,36 @@ func (in *VolumeProjection) DeepCopy() *VolumeProjection { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeResourceRequirements) DeepCopyInto(out *VolumeResourceRequirements) { + *out = *in + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeResourceRequirements. +func (in *VolumeResourceRequirements) DeepCopy() *VolumeResourceRequirements { + if in == nil { + return nil + } + out := new(VolumeResourceRequirements) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = *in diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go index 1de340f662e3..6ead1f8023ef 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go @@ -50,8 +50,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, - &PodSecurityPolicy{}, - &PodSecurityPolicyList{}, &Eviction{}, ) return nil diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go index 583e7b335d70..7836008de2d3 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go @@ -19,7 +19,6 @@ package policy import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" - api "k8s.io/kubernetes/pkg/apis/core" ) // PodDisruptionBudgetSpec is a description of a PodDisruptionBudget. @@ -173,357 +172,3 @@ type Eviction struct { // +optional DeleteOptions *metav1.DeleteOptions } - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodSecurityPolicy governs the ability to make requests that affect the SecurityContext -// that will be applied to a pod and container. -type PodSecurityPolicy struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the policy enforced. - // +optional - Spec PodSecurityPolicySpec -} - -// PodSecurityPolicySpec defines the policy enforced. -type PodSecurityPolicySpec struct { - // Privileged determines if a pod can request to be run as privileged. - // +optional - Privileged bool - // DefaultAddCapabilities is the default set of capabilities that will be added to the container - // unless the pod spec specifically drops the capability. You may not list a capability in both - // DefaultAddCapabilities and RequiredDropCapabilities. Capabilities added here are implicitly - // allowed, and need not be included in the AllowedCapabilities list. - // +optional - DefaultAddCapabilities []api.Capability - // RequiredDropCapabilities are the capabilities that will be dropped from the container. These - // are required to be dropped and cannot be added. - // +optional - RequiredDropCapabilities []api.Capability - // AllowedCapabilities is a list of capabilities that can be requested to add to the container. - // Capabilities in this field may be added at the pod author's discretion. - // You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - // To allow all capabilities you may use '*'. - // +optional - AllowedCapabilities []api.Capability - // Volumes is an allowlist of volume plugins. Empty indicates that - // no volumes may be used. To allow all volumes you may use '*'. - // +optional - Volumes []FSType - // HostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - // +optional - HostNetwork bool - // HostPorts determines which host port ranges are allowed to be exposed. - // +optional - HostPorts []HostPortRange - // HostPID determines if the policy allows the use of HostPID in the pod spec. - // +optional - HostPID bool - // HostIPC determines if the policy allows the use of HostIPC in the pod spec. - // +optional - HostIPC bool - // SELinux is the strategy that will dictate the allowable labels that may be set. - SELinux SELinuxStrategyOptions - // RunAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. - RunAsUser RunAsUserStrategyOptions - // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. - // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the - // RunAsGroup feature gate to be enabled. - RunAsGroup *RunAsGroupStrategyOptions - // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - SupplementalGroups SupplementalGroupsStrategyOptions - // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. - FSGroup FSGroupStrategyOptions - // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file - // system. If the container specifically requests to run with a non-read only root file system - // the PSP should deny the pod. - // If set to false the container may run with a read only root file system if it wishes but it - // will not be forced to. - // +optional - ReadOnlyRootFilesystem bool - // DefaultAllowPrivilegeEscalation controls the default setting for whether a - // process can gain more privileges than its parent process. - // +optional - DefaultAllowPrivilegeEscalation *bool - // AllowPrivilegeEscalation determines if a pod can request to allow - // privilege escalation. If unspecified, defaults to true. - // +optional - AllowPrivilegeEscalation bool - // AllowedHostPaths is an allowlist of host paths. Empty indicates that all host paths may be used. - // +optional - AllowedHostPaths []AllowedHostPath - // AllowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all - // Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes - // is allowed in the "Volumes" field. - // +optional - AllowedFlexVolumes []AllowedFlexVolume - // AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. - // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. - // +optional - AllowedCSIDrivers []AllowedCSIDriver - // AllowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. - // Kubelet has to allowlist all unsafe sysctls explicitly to avoid rejection. - // - // Examples: - // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. - // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. - // +optional - AllowedUnsafeSysctls []string - // ForbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. - // Each entry is either a plain sysctl name or ends in "*" in which case it is considered - // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - // - // Examples: - // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. - // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. - // +optional - ForbiddenSysctls []string - // AllowedProcMountTypes is an allowlist of ProcMountTypes. - // Empty or nil indicates that only the DefaultProcMountType may be used. - // +optional - AllowedProcMountTypes []api.ProcMountType - // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. - // If this field is omitted, the pod's runtimeClassName field is unrestricted. - // Enforcement of this field depends on the RuntimeClass feature gate being enabled. - // +optional - RuntimeClass *RuntimeClassStrategyOptions -} - -// AllowedHostPath defines the host volume conditions that will be enabled by a policy -// for pods to use. It requires the path prefix to be defined. -type AllowedHostPath struct { - // PathPrefix is the path prefix that the host volume must match. - // PathPrefix does not support `*`. - // Trailing slashes are trimmed when validating the path prefix with a host path. - // - // Examples: - // `/foo` would allow `/foo`, `/foo/` and `/foo/bar` - // `/foo` would not allow `/food` or `/etc/foo` - PathPrefix string - - // when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly. - ReadOnly bool -} - -// HostPortRange defines a range of host ports that will be enabled by a policy -// for pods to use. It requires both the start and end to be defined. -type HostPortRange struct { - // Min is the start of the range, inclusive. - Min int32 - // Max is the end of the range, inclusive. - Max int32 -} - -// AllowAllCapabilities can be used as a value for the PodSecurityPolicy.AllowAllCapabilities -// field and means that any capabilities are allowed to be requested. -var AllowAllCapabilities api.Capability = "*" - -// FSType gives strong typing to different file systems that are used by volumes. -type FSType string - -// Exported FSTypes. -const ( - AzureFile FSType = "azureFile" - Flocker FSType = "flocker" - FlexVolume FSType = "flexVolume" - HostPath FSType = "hostPath" - EmptyDir FSType = "emptyDir" - GCEPersistentDisk FSType = "gcePersistentDisk" - AWSElasticBlockStore FSType = "awsElasticBlockStore" - GitRepo FSType = "gitRepo" - Secret FSType = "secret" - NFS FSType = "nfs" - ISCSI FSType = "iscsi" - Glusterfs FSType = "glusterfs" - PersistentVolumeClaim FSType = "persistentVolumeClaim" - RBD FSType = "rbd" - Cinder FSType = "cinder" - CephFS FSType = "cephFS" - DownwardAPI FSType = "downwardAPI" - FC FSType = "fc" - ConfigMap FSType = "configMap" - VsphereVolume FSType = "vsphereVolume" - Quobyte FSType = "quobyte" - AzureDisk FSType = "azureDisk" - PhotonPersistentDisk FSType = "photonPersistentDisk" - StorageOS FSType = "storageos" - Projected FSType = "projected" - PortworxVolume FSType = "portworxVolume" - ScaleIO FSType = "scaleIO" - CSI FSType = "csi" - Ephemeral FSType = "ephemeral" - All FSType = "*" -) - -// AllowedFlexVolume represents a single Flexvolume that is allowed to be used. -type AllowedFlexVolume struct { - // Driver is the name of the Flexvolume driver. - Driver string -} - -// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. -type AllowedCSIDriver struct { - // Name is the registered name of the CSI driver - Name string -} - -// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. -type SELinuxStrategyOptions struct { - // Rule is the strategy that will dictate the allowable labels that may be set. - Rule SELinuxStrategy - // SELinuxOptions required to run as; required for MustRunAs - // More info: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#selinux - // +optional - SELinuxOptions *api.SELinuxOptions -} - -// SELinuxStrategy denotes strategy types for generating SELinux options for a -// Security. -type SELinuxStrategy string - -const ( - // SELinuxStrategyMustRunAs means that container must have SELinux labels of X applied. - SELinuxStrategyMustRunAs SELinuxStrategy = "MustRunAs" - // SELinuxStrategyRunAsAny means that container may make requests for any SELinux context labels. - SELinuxStrategyRunAsAny SELinuxStrategy = "RunAsAny" -) - -// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. -type RunAsUserStrategyOptions struct { - // Rule is the strategy that will dictate the allowable RunAsUser values that may be set. - Rule RunAsUserStrategy - // Ranges are the allowed ranges of uids that may be used. If you would like to force a single uid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange -} - -// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. -type RunAsGroupStrategyOptions struct { - // Rule is the strategy that will dictate the allowable RunAsGroup values that may be set. - Rule RunAsGroupStrategy - // Ranges are the allowed ranges of gids that may be used. If you would like to force a single gid - // then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange -} - -// IDRange provides a min/max of an allowed range of IDs. -type IDRange struct { - // Min is the start of the range, inclusive. - Min int64 - // Max is the end of the range, inclusive. - Max int64 -} - -// RunAsUserStrategy denotes strategy types for generating RunAsUser values for a -// SecurityContext. -type RunAsUserStrategy string - -const ( - // RunAsUserStrategyMustRunAs means that container must run as a particular uid. - RunAsUserStrategyMustRunAs RunAsUserStrategy = "MustRunAs" - // RunAsUserStrategyMustRunAsNonRoot means that container must run as a non-root uid - RunAsUserStrategyMustRunAsNonRoot RunAsUserStrategy = "MustRunAsNonRoot" - // RunAsUserStrategyRunAsAny means that container may make requests for any uid. - RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny" -) - -// RunAsGroupStrategy denotes strategy types for generating RunAsGroup values for a -// SecurityContext. -type RunAsGroupStrategy string - -const ( - // RunAsGroupStrategyMayRunAs means that container does not need to run with a particular gid. - // However, when RunAsGroup are specified, they have to fall in the defined range. - RunAsGroupStrategyMayRunAs RunAsGroupStrategy = "MayRunAs" - // RunAsGroupStrategyMustRunAs means that container must run as a particular gid. - RunAsGroupStrategyMustRunAs RunAsGroupStrategy = "MustRunAs" - // RunAsGroupStrategyRunAsAny means that container may make requests for any gid. - RunAsGroupStrategyRunAsAny RunAsGroupStrategy = "RunAsAny" -) - -// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. -type FSGroupStrategyOptions struct { - // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext. - // +optional - Rule FSGroupStrategyType - // Ranges are the allowed ranges of fs groups. If you would like to force a single - // fs group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange -} - -// FSGroupStrategyType denotes strategy types for generating FSGroup values for a -// SecurityContext -type FSGroupStrategyType string - -const ( - // FSGroupStrategyMayRunAs means that container does not need to have FSGroup of X applied. - // However, when FSGroups are specified, they have to fall in the defined range. - FSGroupStrategyMayRunAs FSGroupStrategyType = "MayRunAs" - // FSGroupStrategyMustRunAs means that container must have FSGroup of X applied. - FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs" - // FSGroupStrategyRunAsAny means that container may make requests for any FSGroup labels. - FSGroupStrategyRunAsAny FSGroupStrategyType = "RunAsAny" -) - -// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. -type SupplementalGroupsStrategyOptions struct { - // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. - // +optional - Rule SupplementalGroupsStrategyType - // Ranges are the allowed ranges of supplemental groups. If you would like to force a single - // supplemental group then supply a single range with the same start and end. Required for MustRunAs. - // +optional - Ranges []IDRange -} - -// SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental -// groups for a SecurityContext. -type SupplementalGroupsStrategyType string - -const ( - // SupplementalGroupsStrategyMayRunAs means that container does not need to run with a particular gid. - // However, when gids are specified, they have to fall in the defined range. - SupplementalGroupsStrategyMayRunAs SupplementalGroupsStrategyType = "MayRunAs" - // SupplementalGroupsStrategyMustRunAs means that container must run as a particular gid. - SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs" - // SupplementalGroupsStrategyRunAsAny means that container may make requests for any gid. - SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" -) - -// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses -// for a pod. -type RuntimeClassStrategyOptions struct { - // allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. - // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the - // list. An empty list requires the RuntimeClassName field to be unset. - AllowedRuntimeClassNames []string - // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. - // The default MUST be allowed by the allowedRuntimeClassNames list. - // A value of nil does not mutate the Pod. - // +optional - DefaultRuntimeClassName *string -} - -// AllowAllRuntimeClassNames can be used as a value for the -// RuntimeClassStrategyOptions.allowedRuntimeClassNames field and means that any runtimeClassName is -// allowed. -const AllowAllRuntimeClassNames = "*" - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodSecurityPolicyList is a list of PodSecurityPolicy objects. -type PodSecurityPolicyList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []PodSecurityPolicy -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go index 8f2ad4ff4d36..e8611b349932 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/validation/validation.go @@ -17,33 +17,18 @@ limitations under the License. package validation import ( - "fmt" - "path/filepath" "regexp" - "strings" - v1 "k8s.io/api/core/v1" policyapiv1beta1 "k8s.io/api/policy/v1beta1" - apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" appsvalidation "k8s.io/kubernetes/pkg/apis/apps/validation" - "k8s.io/kubernetes/pkg/apis/core" apivalidation "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/apis/policy" ) -const ( - // AllowAny is the wildcard used to allow any profile. - seccompAllowAny = "*" - // DefaultProfileAnnotationKey specifies the default seccomp profile. - seccompDefaultProfileAnnotationKey = "seccomp.security.alpha.kubernetes.io/defaultProfileName" - // AllowedProfilesAnnotationKey specifies the allowed seccomp profiles. - seccompAllowedProfilesAnnotationKey = "seccomp.security.alpha.kubernetes.io/allowedProfileNames" -) - var supportedUnhealthyPodEvictionPolicies = sets.NewString( string(policy.IfHealthyBudget), string(policy.AlwaysAllow), @@ -107,312 +92,6 @@ func ValidatePodDisruptionBudgetStatusUpdate(status, oldStatus policy.PodDisrupt return allErrs } -// ValidatePodSecurityPolicyName can be used to check whether the given -// pod security policy name is valid. -// Prefix indicates this name will be used as part of generation, in which case -// trailing dashes are allowed. -var ValidatePodSecurityPolicyName = apimachineryvalidation.NameIsDNSSubdomain - -// ValidatePodSecurityPolicy validates a PodSecurityPolicy and returns an ErrorList -// with any errors. -func ValidatePodSecurityPolicy(psp *policy.PodSecurityPolicy) field.ErrorList { - allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&psp.ObjectMeta, false, ValidatePodSecurityPolicyName, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidatePodSecurityPolicySpecificAnnotations(psp.Annotations, field.NewPath("metadata").Child("annotations"))...) - allErrs = append(allErrs, ValidatePodSecurityPolicySpec(&psp.Spec, field.NewPath("spec"))...) - return allErrs -} - -// ValidatePodSecurityPolicySpec validates a PodSecurityPolicySpec and returns an ErrorList -// with any errors. -func ValidatePodSecurityPolicySpec(spec *policy.PodSecurityPolicySpec, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - allErrs = append(allErrs, validatePSPRunAsUser(fldPath.Child("runAsUser"), &spec.RunAsUser)...) - allErrs = append(allErrs, validatePSPRunAsGroup(fldPath.Child("runAsGroup"), spec.RunAsGroup)...) - allErrs = append(allErrs, validatePSPSELinux(fldPath.Child("seLinux"), &spec.SELinux)...) - allErrs = append(allErrs, validatePSPSupplementalGroup(fldPath.Child("supplementalGroups"), &spec.SupplementalGroups)...) - allErrs = append(allErrs, validatePSPFSGroup(fldPath.Child("fsGroup"), &spec.FSGroup)...) - allErrs = append(allErrs, validatePodSecurityPolicyVolumes(fldPath, spec.Volumes)...) - if len(spec.RequiredDropCapabilities) > 0 && hasCap(policy.AllowAllCapabilities, spec.AllowedCapabilities) { - allErrs = append(allErrs, field.Invalid(field.NewPath("requiredDropCapabilities"), spec.RequiredDropCapabilities, - "must be empty when all capabilities are allowed by a wildcard")) - } - allErrs = append(allErrs, validatePSPCapsAgainstDrops(spec.RequiredDropCapabilities, spec.DefaultAddCapabilities, field.NewPath("defaultAddCapabilities"))...) - allErrs = append(allErrs, validatePSPCapsAgainstDrops(spec.RequiredDropCapabilities, spec.AllowedCapabilities, field.NewPath("allowedCapabilities"))...) - allErrs = append(allErrs, validatePSPDefaultAllowPrivilegeEscalation(fldPath.Child("defaultAllowPrivilegeEscalation"), spec.DefaultAllowPrivilegeEscalation, spec.AllowPrivilegeEscalation)...) - allErrs = append(allErrs, validatePSPAllowedProcMountTypes(fldPath.Child("allowedProcMountTypes"), spec.AllowedProcMountTypes)...) - allErrs = append(allErrs, validatePSPAllowedHostPaths(fldPath.Child("allowedHostPaths"), spec.AllowedHostPaths)...) - allErrs = append(allErrs, validatePSPAllowedFlexVolumes(fldPath.Child("allowedFlexVolumes"), spec.AllowedFlexVolumes)...) - allErrs = append(allErrs, validatePSPAllowedCSIDrivers(fldPath.Child("allowedCSIDrivers"), spec.AllowedCSIDrivers)...) - allErrs = append(allErrs, validatePodSecurityPolicySysctls(fldPath.Child("allowedUnsafeSysctls"), spec.AllowedUnsafeSysctls)...) - allErrs = append(allErrs, validatePodSecurityPolicySysctls(fldPath.Child("forbiddenSysctls"), spec.ForbiddenSysctls)...) - allErrs = append(allErrs, validatePodSecurityPolicySysctlListsDoNotOverlap(fldPath.Child("allowedUnsafeSysctls"), fldPath.Child("forbiddenSysctls"), spec.AllowedUnsafeSysctls, spec.ForbiddenSysctls)...) - allErrs = append(allErrs, validateRuntimeClassStrategy(fldPath.Child("runtimeClass"), spec.RuntimeClass)...) - - return allErrs -} - -// ValidatePodSecurityPolicySpecificAnnotations validates annotations and returns an ErrorList -// with any errors. -func ValidatePodSecurityPolicySpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - if p := annotations[v1.AppArmorBetaDefaultProfileAnnotationKey]; p != "" { - if err := apivalidation.ValidateAppArmorProfileFormat(p); err != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Key(v1.AppArmorBetaDefaultProfileAnnotationKey), p, err.Error())) - } - } - if allowed := annotations[v1.AppArmorBetaAllowedProfilesAnnotationKey]; allowed != "" { - for _, p := range strings.Split(allowed, ",") { - if err := apivalidation.ValidateAppArmorProfileFormat(p); err != nil { - allErrs = append(allErrs, field.Invalid(fldPath.Key(v1.AppArmorBetaAllowedProfilesAnnotationKey), allowed, err.Error())) - } - } - } - - if p := annotations[seccompDefaultProfileAnnotationKey]; p != "" { - allErrs = append(allErrs, apivalidation.ValidateSeccompProfile(p, fldPath.Key(seccompDefaultProfileAnnotationKey))...) - } - if allowed := annotations[seccompAllowedProfilesAnnotationKey]; allowed != "" { - for _, p := range strings.Split(allowed, ",") { - if p == seccompAllowAny { - continue - } - allErrs = append(allErrs, apivalidation.ValidateSeccompProfile(p, fldPath.Key(seccompAllowedProfilesAnnotationKey))...) - } - } - return allErrs -} - -// validatePSPAllowedHostPaths makes sure all allowed host paths follow: -// 1. path prefix is required -// 2. path prefix does not have any element which is ".." -func validatePSPAllowedHostPaths(fldPath *field.Path, allowedHostPaths []policy.AllowedHostPath) field.ErrorList { - allErrs := field.ErrorList{} - - for i, target := range allowedHostPaths { - if target.PathPrefix == "" { - allErrs = append(allErrs, field.Required(fldPath.Index(i), "is required")) - break - } - parts := strings.Split(filepath.ToSlash(target.PathPrefix), "/") - for _, item := range parts { - if item == ".." { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i), target.PathPrefix, "must not contain '..'")) - break // even for `../../..`, one error is sufficient to make the point - } - } - } - - return allErrs -} - -func validatePSPAllowedFlexVolumes(fldPath *field.Path, flexVolumes []policy.AllowedFlexVolume) field.ErrorList { - allErrs := field.ErrorList{} - if len(flexVolumes) > 0 { - for idx, fv := range flexVolumes { - if len(fv.Driver) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("allowedFlexVolumes").Index(idx).Child("driver"), - "must specify a driver")) - } - } - } - return allErrs -} - -func validatePSPAllowedCSIDrivers(fldPath *field.Path, csiDrivers []policy.AllowedCSIDriver) field.ErrorList { - allErrs := field.ErrorList{} - if len(csiDrivers) > 0 { - for idx, csiDriver := range csiDrivers { - fieldPath := fldPath.Child("allowedCSIDriver").Index(idx).Child("name") - allErrs = append(allErrs, apivalidation.ValidateCSIDriverName(csiDriver.Name, fieldPath)...) - } - } - return allErrs -} - -// validatePSPSELinux validates the SELinux fields of PodSecurityPolicy. -func validatePSPSELinux(fldPath *field.Path, seLinux *policy.SELinuxStrategyOptions) field.ErrorList { - allErrs := field.ErrorList{} - - // ensure the selinux strategy has a valid rule - supportedSELinuxRules := sets.NewString( - string(policy.SELinuxStrategyMustRunAs), - string(policy.SELinuxStrategyRunAsAny), - ) - if !supportedSELinuxRules.Has(string(seLinux.Rule)) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("rule"), seLinux.Rule, supportedSELinuxRules.List())) - } - - return allErrs -} - -// validatePSPRunAsUser validates the RunAsUser fields of PodSecurityPolicy. -func validatePSPRunAsUser(fldPath *field.Path, runAsUser *policy.RunAsUserStrategyOptions) field.ErrorList { - allErrs := field.ErrorList{} - - // ensure the user strategy has a valid rule - supportedRunAsUserRules := sets.NewString( - string(policy.RunAsUserStrategyMustRunAs), - string(policy.RunAsUserStrategyMustRunAsNonRoot), - string(policy.RunAsUserStrategyRunAsAny), - ) - if !supportedRunAsUserRules.Has(string(runAsUser.Rule)) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("rule"), runAsUser.Rule, supportedRunAsUserRules.List())) - } - - // validate range settings - for idx, rng := range runAsUser.Ranges { - allErrs = append(allErrs, validateUserIDRange(fldPath.Child("ranges").Index(idx), rng)...) - } - - return allErrs -} - -// validatePSPRunAsGroup validates the RunAsGroup fields of PodSecurityPolicy. -func validatePSPRunAsGroup(fldPath *field.Path, runAsGroup *policy.RunAsGroupStrategyOptions) field.ErrorList { - var allErrs field.ErrorList - - if runAsGroup == nil { - return allErrs - } - - switch runAsGroup.Rule { - case policy.RunAsGroupStrategyRunAsAny: - if len(runAsGroup.Ranges) != 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("ranges"), runAsGroup.Ranges, "Ranges must be empty")) - } - case policy.RunAsGroupStrategyMustRunAs, policy.RunAsGroupStrategyMayRunAs: - if len(runAsGroup.Ranges) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("ranges"), runAsGroup.Ranges, "must provide at least one range")) - } - // validate range settings - for idx, rng := range runAsGroup.Ranges { - allErrs = append(allErrs, validateGroupIDRange(fldPath.Child("ranges").Index(idx), rng)...) - } - default: - supportedRunAsGroupRules := []string{ - string(policy.RunAsGroupStrategyMustRunAs), - string(policy.RunAsGroupStrategyRunAsAny), - string(policy.RunAsGroupStrategyMayRunAs), - } - allErrs = append(allErrs, field.NotSupported(fldPath.Child("rule"), runAsGroup.Rule, supportedRunAsGroupRules)) - } - return allErrs -} - -// validatePSPFSGroup validates the FSGroupStrategyOptions fields of the PodSecurityPolicy. -func validatePSPFSGroup(fldPath *field.Path, groupOptions *policy.FSGroupStrategyOptions) field.ErrorList { - allErrs := field.ErrorList{} - - supportedRules := sets.NewString( - string(policy.FSGroupStrategyMustRunAs), - string(policy.FSGroupStrategyMayRunAs), - string(policy.FSGroupStrategyRunAsAny), - ) - if !supportedRules.Has(string(groupOptions.Rule)) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("rule"), groupOptions.Rule, supportedRules.List())) - } - - for idx, rng := range groupOptions.Ranges { - allErrs = append(allErrs, validateGroupIDRange(fldPath.Child("ranges").Index(idx), rng)...) - } - return allErrs -} - -// validatePSPSupplementalGroup validates the SupplementalGroupsStrategyOptions fields of the PodSecurityPolicy. -func validatePSPSupplementalGroup(fldPath *field.Path, groupOptions *policy.SupplementalGroupsStrategyOptions) field.ErrorList { - allErrs := field.ErrorList{} - - supportedRules := sets.NewString( - string(policy.SupplementalGroupsStrategyRunAsAny), - string(policy.SupplementalGroupsStrategyMayRunAs), - string(policy.SupplementalGroupsStrategyMustRunAs), - ) - if !supportedRules.Has(string(groupOptions.Rule)) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("rule"), groupOptions.Rule, supportedRules.List())) - } - - for idx, rng := range groupOptions.Ranges { - allErrs = append(allErrs, validateGroupIDRange(fldPath.Child("ranges").Index(idx), rng)...) - } - return allErrs -} - -// validatePodSecurityPolicyVolumes validates the volume fields of PodSecurityPolicy. -func validatePodSecurityPolicyVolumes(fldPath *field.Path, volumes []policy.FSType) field.ErrorList { - allErrs := field.ErrorList{} - allowed := getAllFSTypesAsSet() - // add in the * value since that is a pseudo type that is not included by default - allowed.Insert(string(policy.All)) - for _, v := range volumes { - if !allowed.Has(string(v)) { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("volumes"), v, allowed.List())) - } - } - return allErrs -} - -// getAllFSTypesAsSet returns all actual volume types, regardless -// of feature gates. The special policy.All pseudo type is not included. -func getAllFSTypesAsSet() sets.String { - fstypes := sets.NewString() - fstypes.Insert( - string(policy.HostPath), - string(policy.AzureFile), - string(policy.Flocker), - string(policy.FlexVolume), - string(policy.EmptyDir), - string(policy.GCEPersistentDisk), - string(policy.AWSElasticBlockStore), - string(policy.GitRepo), - string(policy.Secret), - string(policy.NFS), - string(policy.ISCSI), - string(policy.Glusterfs), - string(policy.PersistentVolumeClaim), - string(policy.RBD), - string(policy.Cinder), - string(policy.CephFS), - string(policy.DownwardAPI), - string(policy.FC), - string(policy.ConfigMap), - string(policy.VsphereVolume), - string(policy.Quobyte), - string(policy.AzureDisk), - string(policy.PhotonPersistentDisk), - string(policy.StorageOS), - string(policy.Projected), - string(policy.PortworxVolume), - string(policy.ScaleIO), - string(policy.CSI), - string(policy.Ephemeral), - ) - return fstypes -} - -// validatePSPDefaultAllowPrivilegeEscalation validates the DefaultAllowPrivilegeEscalation field against the AllowPrivilegeEscalation field of a PodSecurityPolicy. -func validatePSPDefaultAllowPrivilegeEscalation(fldPath *field.Path, defaultAllowPrivilegeEscalation *bool, allowPrivilegeEscalation bool) field.ErrorList { - allErrs := field.ErrorList{} - if defaultAllowPrivilegeEscalation != nil && *defaultAllowPrivilegeEscalation && !allowPrivilegeEscalation { - allErrs = append(allErrs, field.Invalid(fldPath, defaultAllowPrivilegeEscalation, "Cannot set DefaultAllowPrivilegeEscalation to true without also setting AllowPrivilegeEscalation to true")) - } - - return allErrs -} - -// validatePSPAllowedProcMountTypes validates the DefaultAllowPrivilegeEscalation field against the AllowPrivilegeEscalation field of a PodSecurityPolicy. -func validatePSPAllowedProcMountTypes(fldPath *field.Path, allowedProcMountTypes []core.ProcMountType) field.ErrorList { - allErrs := field.ErrorList{} - for i, procMountType := range allowedProcMountTypes { - if err := apivalidation.ValidateProcMountType(fldPath.Index(i), procMountType); err != nil { - allErrs = append(allErrs, err) - } - } - return allErrs -} - const sysctlPatternSegmentFmt string = "([a-z0-9][-_a-z0-9]*)?[a-z0-9*]" // SysctlContainSlashPatternFmt is a regex that contains a slash used for matching valid sysctl patterns. @@ -432,171 +111,3 @@ func IsValidSysctlPattern(name string) bool { } return sysctlContainSlashPatternRegexp.MatchString(name) } - -func validatePodSecurityPolicySysctlListsDoNotOverlap(allowedSysctlsFldPath, forbiddenSysctlsFldPath *field.Path, allowedUnsafeSysctls, forbiddenSysctls []string) field.ErrorList { - allErrs := field.ErrorList{} - for i, allowedSysctl := range allowedUnsafeSysctls { - isAllowedSysctlPattern := false - allowedSysctlPrefix := "" - if strings.HasSuffix(allowedSysctl, "*") { - isAllowedSysctlPattern = true - allowedSysctlPrefix = strings.TrimSuffix(allowedSysctl, "*") - } - for j, forbiddenSysctl := range forbiddenSysctls { - isForbiddenSysctlPattern := false - forbiddenSysctlPrefix := "" - if strings.HasSuffix(forbiddenSysctl, "*") { - isForbiddenSysctlPattern = true - forbiddenSysctlPrefix = strings.TrimSuffix(forbiddenSysctl, "*") - } - switch { - case isAllowedSysctlPattern && isForbiddenSysctlPattern: - if strings.HasPrefix(allowedSysctlPrefix, forbiddenSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } else if strings.HasPrefix(forbiddenSysctlPrefix, allowedSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) - } - case isAllowedSysctlPattern: - if strings.HasPrefix(forbiddenSysctl, allowedSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) - } - case isForbiddenSysctlPattern: - if strings.HasPrefix(allowedSysctl, forbiddenSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } - default: - if allowedSysctl == forbiddenSysctl { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } - } - } - } - return allErrs -} - -// validatePodSecurityPolicySysctls validates the sysctls fields of PodSecurityPolicy. -func validatePodSecurityPolicySysctls(fldPath *field.Path, sysctls []string) field.ErrorList { - allErrs := field.ErrorList{} - - if len(sysctls) == 0 { - return allErrs - } - - coversAll := false - for i, s := range sysctls { - if len(s) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i), sysctls[i], "empty sysctl not allowed")) - } else if !IsValidSysctlPattern(string(s)) { - allErrs = append( - allErrs, - field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("must have at most %d characters and match regex %s", - apivalidation.SysctlMaxLength, - SysctlContainSlashPatternFmt, - )), - ) - } else if s[0] == '*' { - coversAll = true - } - } - - if coversAll && len(sysctls) > 1 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("items"), "if '*' is present, must not specify other sysctls")) - } - - return allErrs -} - -func validateUserIDRange(fldPath *field.Path, rng policy.IDRange) field.ErrorList { - return validateIDRanges(fldPath, rng.Min, rng.Max) -} - -func validateGroupIDRange(fldPath *field.Path, rng policy.IDRange) field.ErrorList { - return validateIDRanges(fldPath, rng.Min, rng.Max) -} - -// validateIDRanges ensures the range is valid. -func validateIDRanges(fldPath *field.Path, min, max int64) field.ErrorList { - allErrs := field.ErrorList{} - - // if 0 <= Min <= Max then we do not need to validate max. It is always greater than or - // equal to 0 and Min. - if min < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), min, "min cannot be negative")) - } - if max < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("max"), max, "max cannot be negative")) - } - if min > max { - allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), min, "min cannot be greater than max")) - } - - return allErrs -} - -// validatePSPCapsAgainstDrops ensures an allowed cap is not listed in the required drops. -func validatePSPCapsAgainstDrops(requiredDrops []core.Capability, capsToCheck []core.Capability, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if requiredDrops == nil { - return allErrs - } - for _, cap := range capsToCheck { - if hasCap(cap, requiredDrops) { - allErrs = append(allErrs, field.Invalid(fldPath, cap, - fmt.Sprintf("capability is listed in %s and requiredDropCapabilities", fldPath.String()))) - } - } - return allErrs -} - -// validateRuntimeClassStrategy ensures all the RuntimeClass restrictions are valid. -func validateRuntimeClassStrategy(fldPath *field.Path, rc *policy.RuntimeClassStrategyOptions) field.ErrorList { - if rc == nil { - return nil - } - - var allErrs field.ErrorList - - allowed := map[string]bool{} - for i, name := range rc.AllowedRuntimeClassNames { - if name != policy.AllowAllRuntimeClassNames { - allErrs = append(allErrs, apivalidation.ValidateRuntimeClassName(name, fldPath.Child("allowedRuntimeClassNames").Index(i))...) - } - if allowed[name] { - allErrs = append(allErrs, field.Duplicate(fldPath.Child("allowedRuntimeClassNames").Index(i), name)) - } - allowed[name] = true - } - - if rc.DefaultRuntimeClassName != nil { - allErrs = append(allErrs, apivalidation.ValidateRuntimeClassName(*rc.DefaultRuntimeClassName, fldPath.Child("defaultRuntimeClassName"))...) - if !allowed[*rc.DefaultRuntimeClassName] && !allowed[policy.AllowAllRuntimeClassNames] { - allErrs = append(allErrs, field.Required(fldPath.Child("allowedRuntimeClassNames"), - fmt.Sprintf("default %q must be allowed", *rc.DefaultRuntimeClassName))) - } - } - - if allowed[policy.AllowAllRuntimeClassNames] && len(rc.AllowedRuntimeClassNames) > 1 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("allowedRuntimeClassNames"), rc.AllowedRuntimeClassNames, "if '*' is present, must not specify other RuntimeClass names")) - } - - return allErrs -} - -// ValidatePodSecurityPolicyUpdate validates a PSP for updates. -func ValidatePodSecurityPolicyUpdate(old *policy.PodSecurityPolicy, new *policy.PodSecurityPolicy) field.ErrorList { - allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidatePodSecurityPolicySpecificAnnotations(new.Annotations, field.NewPath("metadata").Child("annotations"))...) - allErrs = append(allErrs, ValidatePodSecurityPolicySpec(&new.Spec, field.NewPath("spec"))...) - return allErrs -} - -// hasCap checks for needle in haystack. -func hasCap(needle core.Capability, haystack []core.Capability) bool { - for _, c := range haystack { - if needle == c { - return true - } - } - return false -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go index 972599147af1..95866569e851 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go @@ -25,57 +25,8 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" - core "k8s.io/kubernetes/pkg/apis/core" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. -func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { - if in == nil { - return nil - } - out := new(AllowedCSIDriver) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume. -func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume { - if in == nil { - return nil - } - out := new(AllowedFlexVolume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedHostPath) DeepCopyInto(out *AllowedHostPath) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedHostPath. -func (in *AllowedHostPath) DeepCopy() *AllowedHostPath { - if in == nil { - return nil - } - out := new(AllowedHostPath) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Eviction) DeepCopyInto(out *Eviction) { *out = *in @@ -107,59 +58,6 @@ func (in *Eviction) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FSGroupStrategyOptions) DeepCopyInto(out *FSGroupStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FSGroupStrategyOptions. -func (in *FSGroupStrategyOptions) DeepCopy() *FSGroupStrategyOptions { - if in == nil { - return nil - } - out := new(FSGroupStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HostPortRange) DeepCopyInto(out *HostPortRange) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostPortRange. -func (in *HostPortRange) DeepCopy() *HostPortRange { - if in == nil { - return nil - } - out := new(HostPortRange) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IDRange) DeepCopyInto(out *IDRange) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IDRange. -func (in *IDRange) DeepCopy() *IDRange { - if in == nil { - return nil - } - out := new(IDRange) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodDisruptionBudget) DeepCopyInto(out *PodDisruptionBudget) { *out = *in @@ -286,263 +184,3 @@ func (in *PodDisruptionBudgetStatus) DeepCopy() *PodDisruptionBudgetStatus { in.DeepCopyInto(out) return out } - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicy) DeepCopyInto(out *PodSecurityPolicy) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicy. -func (in *PodSecurityPolicy) DeepCopy() *PodSecurityPolicy { - if in == nil { - return nil - } - out := new(PodSecurityPolicy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodSecurityPolicy) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicyList) DeepCopyInto(out *PodSecurityPolicyList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PodSecurityPolicy, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyList. -func (in *PodSecurityPolicyList) DeepCopy() *PodSecurityPolicyList { - if in == nil { - return nil - } - out := new(PodSecurityPolicyList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodSecurityPolicyList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { - *out = *in - if in.DefaultAddCapabilities != nil { - in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]core.Capability, len(*in)) - copy(*out, *in) - } - if in.RequiredDropCapabilities != nil { - in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]core.Capability, len(*in)) - copy(*out, *in) - } - if in.AllowedCapabilities != nil { - in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]core.Capability, len(*in)) - copy(*out, *in) - } - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]FSType, len(*in)) - copy(*out, *in) - } - if in.HostPorts != nil { - in, out := &in.HostPorts, &out.HostPorts - *out = make([]HostPortRange, len(*in)) - copy(*out, *in) - } - in.SELinux.DeepCopyInto(&out.SELinux) - in.RunAsUser.DeepCopyInto(&out.RunAsUser) - if in.RunAsGroup != nil { - in, out := &in.RunAsGroup, &out.RunAsGroup - *out = new(RunAsGroupStrategyOptions) - (*in).DeepCopyInto(*out) - } - in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups) - in.FSGroup.DeepCopyInto(&out.FSGroup) - if in.DefaultAllowPrivilegeEscalation != nil { - in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation - *out = new(bool) - **out = **in - } - if in.AllowedHostPaths != nil { - in, out := &in.AllowedHostPaths, &out.AllowedHostPaths - *out = make([]AllowedHostPath, len(*in)) - copy(*out, *in) - } - if in.AllowedFlexVolumes != nil { - in, out := &in.AllowedFlexVolumes, &out.AllowedFlexVolumes - *out = make([]AllowedFlexVolume, len(*in)) - copy(*out, *in) - } - if in.AllowedCSIDrivers != nil { - in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers - *out = make([]AllowedCSIDriver, len(*in)) - copy(*out, *in) - } - if in.AllowedUnsafeSysctls != nil { - in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ForbiddenSysctls != nil { - in, out := &in.ForbiddenSysctls, &out.ForbiddenSysctls - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.AllowedProcMountTypes != nil { - in, out := &in.AllowedProcMountTypes, &out.AllowedProcMountTypes - *out = make([]core.ProcMountType, len(*in)) - copy(*out, *in) - } - if in.RuntimeClass != nil { - in, out := &in.RuntimeClass, &out.RuntimeClass - *out = new(RuntimeClassStrategyOptions) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySpec. -func (in *PodSecurityPolicySpec) DeepCopy() *PodSecurityPolicySpec { - if in == nil { - return nil - } - out := new(PodSecurityPolicySpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunAsGroupStrategyOptions) DeepCopyInto(out *RunAsGroupStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsGroupStrategyOptions. -func (in *RunAsGroupStrategyOptions) DeepCopy() *RunAsGroupStrategyOptions { - if in == nil { - return nil - } - out := new(RunAsGroupStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsUserStrategyOptions. -func (in *RunAsUserStrategyOptions) DeepCopy() *RunAsUserStrategyOptions { - if in == nil { - return nil - } - out := new(RunAsUserStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RuntimeClassStrategyOptions) DeepCopyInto(out *RuntimeClassStrategyOptions) { - *out = *in - if in.AllowedRuntimeClassNames != nil { - in, out := &in.AllowedRuntimeClassNames, &out.AllowedRuntimeClassNames - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.DefaultRuntimeClassName != nil { - in, out := &in.DefaultRuntimeClassName, &out.DefaultRuntimeClassName - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassStrategyOptions. -func (in *RuntimeClassStrategyOptions) DeepCopy() *RuntimeClassStrategyOptions { - if in == nil { - return nil - } - out := new(RuntimeClassStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SELinuxStrategyOptions) DeepCopyInto(out *SELinuxStrategyOptions) { - *out = *in - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(core.SELinuxOptions) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SELinuxStrategyOptions. -func (in *SELinuxStrategyOptions) DeepCopy() *SELinuxStrategyOptions { - if in == nil { - return nil - } - out := new(SELinuxStrategyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SupplementalGroupsStrategyOptions) DeepCopyInto(out *SupplementalGroupsStrategyOptions) { - *out = *in - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalGroupsStrategyOptions. -func (in *SupplementalGroupsStrategyOptions) DeepCopy() *SupplementalGroupsStrategyOptions { - if in == nil { - return nil - } - out := new(SupplementalGroupsStrategyOptions) - in.DeepCopyInto(out) - return out -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go index d7755da95d60..8ad023f242ff 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/controller/daemon/update.go @@ -47,7 +47,7 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae if err != nil { return fmt.Errorf("couldn't get node to daemon pod mapping for daemon set %q: %v", ds.Name, err) } - maxSurge, maxUnavailable, err := dsc.updatedDesiredNodeCounts(ctx, ds, nodeList, nodeToDaemonPods) + maxSurge, maxUnavailable, desiredNumberScheduled, err := dsc.updatedDesiredNodeCounts(ctx, ds, nodeList, nodeToDaemonPods) if err != nil { return fmt.Errorf("couldn't get unavailable numbers: %v", err) } @@ -140,10 +140,12 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae // * An old available pod is deleted if a new pod is available // * No more than maxSurge new pods are created for old available pods at any one time // - var oldPodsToDelete []string + var oldPodsToDelete []string // these pods are already updated or unavailable on sunsetted node + var shouldNotRunPodsToDelete []string // candidate pods to be deleted on sunsetted nodes var candidateNewNodes []string var allowedNewNodes []string var numSurge int + var numAvailable int for nodeName, pods := range nodeToDaemonPods { newPod, oldPod, ok := findUpdatedPodsOnNode(ds, pods, hash) @@ -153,6 +155,18 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae numSurge++ continue } + + // first count availability for all the nodes (even the ones that we are sunsetting due to scheduling constraints) + if oldPod != nil { + if podutil.IsPodAvailable(oldPod, ds.Spec.MinReadySeconds, metav1.Time{Time: now}) { + numAvailable++ + } + } else if newPod != nil { + if podutil.IsPodAvailable(newPod, ds.Spec.MinReadySeconds, metav1.Time{Time: now}) { + numAvailable++ + } + } + switch { case oldPod == nil: // we don't need to do anything to this node, the manage loop will handle it @@ -160,6 +174,15 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae // this is a surge candidate switch { case !podutil.IsPodAvailable(oldPod, ds.Spec.MinReadySeconds, metav1.Time{Time: now}): + node, err := dsc.nodeLister.Get(nodeName) + if err != nil { + return fmt.Errorf("couldn't get node for nodeName %q: %v", nodeName, err) + } + if shouldRun, _ := NodeShouldRunDaemonPod(node, ds); !shouldRun { + logger.V(5).Info("DaemonSet pod on node is not available and does not match scheduling constraints, remove old pod", "daemonset", klog.KObj(ds), "node", nodeName, "oldPod", klog.KObj(oldPod)) + oldPodsToDelete = append(oldPodsToDelete, oldPod.Name) + continue + } // the old pod isn't available, allow it to become a replacement logger.V(5).Info("Pod on node is out of date and not available, allowing replacement", "daemonset", klog.KObj(ds), "pod", klog.KObj(oldPod), "node", klog.KRef("", nodeName)) // record the replacement @@ -167,10 +190,19 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae allowedNewNodes = make([]string, 0, len(nodeToDaemonPods)) } allowedNewNodes = append(allowedNewNodes, nodeName) - case numSurge >= maxSurge: - // no point considering any other candidates - continue default: + node, err := dsc.nodeLister.Get(nodeName) + if err != nil { + return fmt.Errorf("couldn't get node for nodeName %q: %v", nodeName, err) + } + if shouldRun, _ := NodeShouldRunDaemonPod(node, ds); !shouldRun { + shouldNotRunPodsToDelete = append(shouldNotRunPodsToDelete, oldPod.Name) + continue + } + if numSurge >= maxSurge { + // no point considering any other candidates + continue + } logger.V(5).Info("DaemonSet pod on node is out of date, this is a surge candidate", "daemonset", klog.KObj(ds), "pod", klog.KObj(oldPod), "node", klog.KRef("", nodeName)) // record the candidate if candidateNewNodes == nil { @@ -194,6 +226,27 @@ func (dsc *DaemonSetsController) rollingUpdate(ctx context.Context, ds *apps.Dae // use any of the candidates we can, including the allowedNewNodes logger.V(5).Info("DaemonSet allowing replacements", "daemonset", klog.KObj(ds), "replacements", len(allowedNewNodes), "maxSurge", maxSurge, "numSurge", numSurge, "candidates", len(candidateNewNodes)) remainingSurge := maxSurge - numSurge + + // With maxSurge, the application owner expects 100% availability. + // When the scheduling constraint change from node A to node B, we do not want the application to stay + // without any available pods. Only delete a pod on node A when a pod on node B becomes available. + if deletablePodsNumber := numAvailable - desiredNumberScheduled; deletablePodsNumber > 0 { + if shouldNotRunPodsToDeleteNumber := len(shouldNotRunPodsToDelete); deletablePodsNumber > shouldNotRunPodsToDeleteNumber { + deletablePodsNumber = shouldNotRunPodsToDeleteNumber + } + for _, podToDeleteName := range shouldNotRunPodsToDelete[:deletablePodsNumber] { + podToDelete, err := dsc.podLister.Pods(ds.Namespace).Get(podToDeleteName) + if err != nil { + if errors.IsNotFound(err) { + continue + } + return fmt.Errorf("couldn't get pod which should be deleted due to scheduling constraints %q: %v", podToDeleteName, err) + } + logger.V(5).Info("DaemonSet pod on node should be deleted due to scheduling constraints", "daemonset", klog.KObj(ds), "pod", klog.KObj(podToDelete), "node", podToDelete.Spec.NodeName) + oldPodsToDelete = append(oldPodsToDelete, podToDeleteName) + } + } + if remainingSurge < 0 { remainingSurge = 0 } @@ -525,9 +578,9 @@ func (dsc *DaemonSetsController) snapshot(ctx context.Context, ds *apps.DaemonSe return history, err } -// updatedDesiredNodeCounts calculates the true number of allowed unavailable or surge pods and +// updatedDesiredNodeCounts calculates the true number of allowed surge, unavailable or desired scheduled pods and // updates the nodeToDaemonPods array to include an empty array for every node that is not scheduled. -func (dsc *DaemonSetsController) updatedDesiredNodeCounts(ctx context.Context, ds *apps.DaemonSet, nodeList []*v1.Node, nodeToDaemonPods map[string][]*v1.Pod) (int, int, error) { +func (dsc *DaemonSetsController) updatedDesiredNodeCounts(ctx context.Context, ds *apps.DaemonSet, nodeList []*v1.Node, nodeToDaemonPods map[string][]*v1.Pod) (int, int, int, error) { var desiredNumberScheduled int logger := klog.FromContext(ctx) for i := range nodeList { @@ -545,12 +598,12 @@ func (dsc *DaemonSetsController) updatedDesiredNodeCounts(ctx context.Context, d maxUnavailable, err := util.UnavailableCount(ds, desiredNumberScheduled) if err != nil { - return -1, -1, fmt.Errorf("invalid value for MaxUnavailable: %v", err) + return -1, -1, -1, fmt.Errorf("invalid value for MaxUnavailable: %v", err) } maxSurge, err := util.SurgeCount(ds, desiredNumberScheduled) if err != nil { - return -1, -1, fmt.Errorf("invalid value for MaxSurge: %v", err) + return -1, -1, -1, fmt.Errorf("invalid value for MaxSurge: %v", err) } // if the daemonset returned with an impossible configuration, obey the default of unavailable=1 (in the @@ -560,7 +613,7 @@ func (dsc *DaemonSetsController) updatedDesiredNodeCounts(ctx context.Context, d maxUnavailable = 1 } logger.V(5).Info("DaemonSet with maxSurge and maxUnavailable", "daemonset", klog.KObj(ds), "maxSurge", maxSurge, "maxUnavailable", maxUnavailable) - return maxSurge, maxUnavailable, nil + return maxSurge, maxUnavailable, desiredNumberScheduled, nil } type historiesByRevision []*apps.ControllerRevision diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index 8b27be3f3078..2548fe6f2b2a 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -44,6 +44,13 @@ const ( // Enable usage of Provision of PVCs from snapshots in other namespaces CrossNamespaceVolumeDataSource featuregate.Feature = "CrossNamespaceVolumeDataSource" + // owner: @thockin + // deprecated: v1.29 + // + // Enables Service.status.ingress.loadBanace to be set on + // services of types other than LoadBalancer. + AllowServiceLBStatusOnNonLB featuregate.Feature = "AllowServiceLBStatusOnNonLB" + // owner: @bswartz // alpha: v1.18 // beta: v1.24 @@ -65,6 +72,7 @@ const ( // owner: @danwinship // alpha: v1.27 + // beta: v1.29 // // Enables dual-stack --node-ip in kubelet with external cloud providers CloudDualStackNodeIPs featuregate.Feature = "CloudDualStackNodeIPs" @@ -221,12 +229,14 @@ const ( // owner: @andrewsykim // alpha: v1.22 + // beta: v1.29 // // Disable any functionality in kube-apiserver, kube-controller-manager and kubelet related to the `--cloud-provider` component flag. DisableCloudProviders featuregate.Feature = "DisableCloudProviders" // owner: @andrewsykim // alpha: v1.23 + // beta: v1.29 // // Disable in-tree functionality in kubelet to authenticate to cloud provider container registries for image pull credentials. DisableKubeletCloudCredentialProviders featuregate.Feature = "DisableKubeletCloudCredentialProviders" @@ -787,6 +797,7 @@ const ( // kep: http://kep.k8s.io/3682 // alpha: v1.27 // beta: v1.28 + // stable: v1.29 // // Subdivide the NodePort range for dynamic and static port allocation. ServiceNodePortStaticSubrange featuregate.Feature = "ServiceNodePortStaticSubrange" @@ -934,6 +945,12 @@ const ( // // Enables In-Place Pod Vertical Scaling InPlacePodVerticalScaling featuregate.Feature = "InPlacePodVerticalScaling" + + // owner: @Sh4d1,@RyanAoh + // kep: http://kep.k8s.io/1860 + // alpha: v1.29 + // LoadBalancerIPMode enables the IPMode field in the LoadBalancerIngress status of a Service + LoadBalancerIPMode featuregate.Feature = "LoadBalancerIPMode" ) func init() { @@ -949,13 +966,15 @@ func init() { var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ CrossNamespaceVolumeDataSource: {Default: false, PreRelease: featuregate.Alpha}, + AllowServiceLBStatusOnNonLB: {Default: false, PreRelease: featuregate.Deprecated}, // remove after 1.29 + AnyVolumeDataSource: {Default: true, PreRelease: featuregate.Beta}, // on by default in 1.24 APISelfSubjectReview: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.28; remove in 1.30 AppArmor: {Default: true, PreRelease: featuregate.Beta}, - CloudDualStackNodeIPs: {Default: false, PreRelease: featuregate.Alpha}, + CloudDualStackNodeIPs: {Default: true, PreRelease: featuregate.Beta}, ClusterTrustBundle: {Default: false, PreRelease: featuregate.Alpha}, @@ -995,9 +1014,9 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS DefaultHostNetworkHostPortsInPodTemplates: {Default: false, PreRelease: featuregate.Deprecated}, - DisableCloudProviders: {Default: false, PreRelease: featuregate.Alpha}, + DisableCloudProviders: {Default: true, PreRelease: featuregate.Beta}, - DisableKubeletCloudCredentialProviders: {Default: false, PreRelease: featuregate.Alpha}, + DisableKubeletCloudCredentialProviders: {Default: true, PreRelease: featuregate.Beta}, DevicePluginCDIDevices: {Default: false, PreRelease: featuregate.Alpha}, @@ -1143,7 +1162,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS SecurityContextDeny: {Default: false, PreRelease: featuregate.Alpha}, - ServiceNodePortStaticSubrange: {Default: true, PreRelease: featuregate.Beta}, + ServiceNodePortStaticSubrange: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.29; remove in 1.31 SidecarContainers: {Default: false, PreRelease: featuregate.Alpha}, @@ -1185,6 +1204,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS PodIndexLabel: {Default: true, PreRelease: featuregate.Beta}, + LoadBalancerIPMode: {Default: false, PreRelease: featuregate.Alpha}, + // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: @@ -1192,7 +1213,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS genericfeatures.AggregatedDiscoveryEndpoint: {Default: true, PreRelease: featuregate.Beta}, - genericfeatures.APIListChunking: {Default: true, PreRelease: featuregate.Beta}, + genericfeatures.APIListChunking: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.32 genericfeatures.APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta}, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/client.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/client.go index a18dcba2172e..e3a1e96756ca 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/client.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/client.go @@ -18,15 +18,11 @@ package plugin import ( "context" - "errors" "fmt" - "io" - "net" "time" "google.golang.org/grpc" grpccodes "google.golang.org/grpc/codes" - "google.golang.org/grpc/credentials/insecure" grpcstatus "google.golang.org/grpc/status" "k8s.io/klog/v2" @@ -36,39 +32,10 @@ import ( const PluginClientTimeout = 45 * time.Second -// Strongly typed address. -type draAddr string - // draPluginClient encapsulates all dra plugin methods. type draPluginClient struct { - pluginName string - addr draAddr - nodeClientCreator nodeClientCreator -} - -var _ drapb.NodeClient = &draPluginClient{} - -type nodeClientCreator func(addr draAddr) ( - nodeClient drapb.NodeClient, - nodeClientOld drapbv1alpha2.NodeClient, - closer io.Closer, - err error, -) - -// newNodeClient creates a new NodeClient with the internally used gRPC -// connection set up. It also returns a closer which must be called to close -// the gRPC connection when the NodeClient is not used anymore. -// This is the default implementation for the nodeClientCreator, used in -// newDRAPluginClient. -func newNodeClient(addr draAddr) (nodeClient drapb.NodeClient, nodeClientOld drapbv1alpha2.NodeClient, closer io.Closer, err error) { - var conn *grpc.ClientConn - - conn, err = newGrpcConn(addr) - if err != nil { - return nil, nil, nil, err - } - - return drapb.NewNodeClient(conn), drapbv1alpha2.NewNodeClient(conn), conn, nil + pluginName string + plugin *Plugin } func NewDRAPluginClient(pluginName string) (drapb.NodeClient, error) { @@ -82,9 +49,8 @@ func NewDRAPluginClient(pluginName string) (drapb.NodeClient, error) { } return &draPluginClient{ - pluginName: pluginName, - addr: draAddr(existingPlugin.endpoint), - nodeClientCreator: newNodeClient, + pluginName: pluginName, + plugin: existingPlugin, }, nil } @@ -97,15 +63,12 @@ func (r *draPluginClient) NodePrepareResources( logger.V(4).Info(log("calling NodePrepareResources rpc"), "request", req) defer logger.V(4).Info(log("done calling NodePrepareResources rpc"), "response", resp, "err", err) - if r.nodeClientCreator == nil { - return nil, errors.New("failed to call NodePrepareResources. nodeClientCreator is nil") - } - - nodeClient, nodeClientOld, closer, err := r.nodeClientCreator(r.addr) + conn, err := r.plugin.getOrCreateGRPCConn() if err != nil { return nil, err } - defer closer.Close() + nodeClient := drapb.NewNodeClient(conn) + nodeClientOld := drapbv1alpha2.NewNodeClient(conn) ctx, cancel := context.WithTimeout(ctx, PluginClientTimeout) defer cancel() @@ -150,15 +113,12 @@ func (r *draPluginClient) NodeUnprepareResources( logger.V(4).Info(log("calling NodeUnprepareResource rpc"), "request", req) defer logger.V(4).Info(log("done calling NodeUnprepareResources rpc"), "response", resp, "err", err) - if r.nodeClientCreator == nil { - return nil, errors.New("failed to call NodeUnprepareResources. nodeClientCreator is nil") - } - - nodeClient, nodeClientOld, closer, err := r.nodeClientCreator(r.addr) + conn, err := r.plugin.getOrCreateGRPCConn() if err != nil { return nil, err } - defer closer.Close() + nodeClient := drapb.NewNodeClient(conn) + nodeClientOld := drapbv1alpha2.NewNodeClient(conn) ctx, cancel := context.WithTimeout(ctx, PluginClientTimeout) defer cancel() @@ -191,16 +151,3 @@ func (r *draPluginClient) NodeUnprepareResources( return } - -func newGrpcConn(addr draAddr) (*grpc.ClientConn, error) { - network := "unix" - klog.V(4).InfoS(log("creating new gRPC connection"), "protocol", network, "endpoint", addr) - - return grpc.Dial( - string(addr), - grpc.WithTransportCredentials(insecure.NewCredentials()), - grpc.WithContextDialer(func(ctx context.Context, target string) (net.Conn, error) { - return (&net.Dialer{}).DialContext(ctx, network, target) - }), - ) -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugin.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugin.go index 0f2a1ff4cb45..e9da2dd4ad7f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugin.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugin.go @@ -54,6 +54,7 @@ func (h *RegistrationHandler) RegisterPlugin(pluginName string, endpoint string, // Storing endpoint of newly registered DRA Plugin into the map, where plugin name will be the key // all other DRA components will be able to get the actual socket of DRA plugins by its name. draPlugins.Set(pluginName, &Plugin{ + conn: nil, endpoint: endpoint, highestSupportedVersion: highestSupportedVersion, }) @@ -61,47 +62,6 @@ func (h *RegistrationHandler) RegisterPlugin(pluginName string, endpoint string, return nil } -// Return the highest supported version. -func highestSupportedVersion(versions []string) (*utilversion.Version, error) { - if len(versions) == 0 { - return nil, errors.New(log("DRA plugin reporting empty array for supported versions")) - } - - var highestSupportedVersion *utilversion.Version - - var theErr error - - for i := len(versions) - 1; i >= 0; i-- { - currentHighestVer, err := utilversion.ParseGeneric(versions[i]) - if err != nil { - theErr = err - - continue - } - - if currentHighestVer.Major() > 1 { - // DRA currently only has version 1.x - continue - } - - if highestSupportedVersion == nil || highestSupportedVersion.LessThan(currentHighestVer) { - highestSupportedVersion = currentHighestVer - } - } - - if highestSupportedVersion == nil { - return nil, fmt.Errorf( - "could not find a highest supported version from versions (%v) reported by this plugin: %+v", - versions, theErr) - } - - if highestSupportedVersion.Major() != 1 { - return nil, fmt.Errorf("highest supported version reported by plugin is %v, must be v1.x", highestSupportedVersion) - } - - return highestSupportedVersion, nil -} - func (h *RegistrationHandler) validateVersions( callerName string, pluginName string, @@ -118,7 +78,7 @@ func (h *RegistrationHandler) validateVersions( } // Validate version - newPluginHighestVersion, err := highestSupportedVersion(versions) + newPluginHighestVersion, err := utilversion.HighestSupportedVersion(versions) if err != nil { return nil, errors.New( log( diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugins_store.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugins_store.go index 90adb702ac71..32f750af80d0 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugins_store.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin/plugins_store.go @@ -17,18 +17,60 @@ limitations under the License. package plugin import ( + "context" + "errors" + "net" "sync" + "time" + "google.golang.org/grpc" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/credentials/insecure" utilversion "k8s.io/apimachinery/pkg/util/version" + "k8s.io/klog/v2" ) // Plugin is a description of a DRA Plugin, defined by an endpoint // and the highest DRA version supported. type Plugin struct { + sync.RWMutex + conn *grpc.ClientConn endpoint string highestSupportedVersion *utilversion.Version } +func (p *Plugin) getOrCreateGRPCConn() (*grpc.ClientConn, error) { + p.Lock() + defer p.Unlock() + + if p.conn != nil { + return p.conn, nil + } + + network := "unix" + klog.V(4).InfoS(log("creating new gRPC connection"), "protocol", network, "endpoint", p.endpoint) + conn, err := grpc.Dial( + p.endpoint, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer(func(ctx context.Context, target string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, target) + }), + ) + if err != nil { + return nil, err + } + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + if ok := conn.WaitForStateChange(ctx, connectivity.Connecting); !ok { + return nil, errors.New("timed out waiting for gRPC connection to be ready") + } + + p.conn = conn + return p.conn, nil +} + // PluginsStore holds a list of DRA Plugins. type PluginsStore struct { sync.RWMutex diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_gc_manager.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_gc_manager.go index 451dfb083902..52aa0d0ceeac 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_gc_manager.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/images/image_gc_manager.go @@ -106,9 +106,6 @@ type realImageGCManager struct { // imageCache is the cache of latest image list. imageCache imageCache - // sandbox image exempted from GC - sandboxImage string - // tracer for recording spans tracer trace.Tracer } @@ -160,7 +157,7 @@ type imageRecord struct { } // NewImageGCManager instantiates a new ImageGCManager object. -func NewImageGCManager(runtime container.Runtime, statsProvider StatsProvider, recorder record.EventRecorder, nodeRef *v1.ObjectReference, policy ImageGCPolicy, sandboxImage string, tracerProvider trace.TracerProvider) (ImageGCManager, error) { +func NewImageGCManager(runtime container.Runtime, statsProvider StatsProvider, recorder record.EventRecorder, nodeRef *v1.ObjectReference, policy ImageGCPolicy, tracerProvider trace.TracerProvider) (ImageGCManager, error) { // Validate policy. if policy.HighThresholdPercent < 0 || policy.HighThresholdPercent > 100 { return nil, fmt.Errorf("invalid HighThresholdPercent %d, must be in range [0-100]", policy.HighThresholdPercent) @@ -180,7 +177,6 @@ func NewImageGCManager(runtime container.Runtime, statsProvider StatsProvider, r recorder: recorder, nodeRef: nodeRef, initialized: false, - sandboxImage: sandboxImage, tracer: tracer, } @@ -223,12 +219,6 @@ func (im *realImageGCManager) GetImageList() ([]container.Image, error) { func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.Time) (sets.String, error) { imagesInUse := sets.NewString() - // Always consider the container runtime pod sandbox image in use - imageRef, err := im.runtime.GetImageRef(ctx, container.ImageSpec{Image: im.sandboxImage}) - if err == nil && imageRef != "" { - imagesInUse.Insert(imageRef) - } - images, err := im.runtime.ListImages(ctx) if err != nil { return imagesInUse, err diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go index e8918472ee8d..e6040d1b2565 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go @@ -204,7 +204,7 @@ const ( ) var ( - // ContainerLogsDir can be overwrited for testing usage + // ContainerLogsDir can be overwritten for testing usage ContainerLogsDir = DefaultContainerLogsDir etcHostsPath = getContainerEtcHostsPath() ) @@ -248,29 +248,30 @@ type Dependencies struct { Options []Option // Injected Dependencies - Auth server.AuthInterface - CAdvisorInterface cadvisor.Interface - Cloud cloudprovider.Interface - ContainerManager cm.ContainerManager - EventClient v1core.EventsGetter - HeartbeatClient clientset.Interface - OnHeartbeatFailure func() - KubeClient clientset.Interface - Mounter mount.Interface - HostUtil hostutil.HostUtils - OOMAdjuster *oom.OOMAdjuster - OSInterface kubecontainer.OSInterface - PodConfig *config.PodConfig - ProbeManager prober.Manager - Recorder record.EventRecorder - Subpather subpath.Interface - TracerProvider trace.TracerProvider - VolumePlugins []volume.VolumePlugin - DynamicPluginProber volume.DynamicPluginProber - TLSOptions *server.TLSOptions - RemoteRuntimeService internalapi.RuntimeService - RemoteImageService internalapi.ImageManagerService - PodStartupLatencyTracker util.PodStartupLatencyTracker + Auth server.AuthInterface + CAdvisorInterface cadvisor.Interface + Cloud cloudprovider.Interface + ContainerManager cm.ContainerManager + EventClient v1core.EventsGetter + HeartbeatClient clientset.Interface + OnHeartbeatFailure func() + KubeClient clientset.Interface + Mounter mount.Interface + HostUtil hostutil.HostUtils + OOMAdjuster *oom.OOMAdjuster + OSInterface kubecontainer.OSInterface + PodConfig *config.PodConfig + ProbeManager prober.Manager + Recorder record.EventRecorder + Subpather subpath.Interface + TracerProvider trace.TracerProvider + VolumePlugins []volume.VolumePlugin + DynamicPluginProber volume.DynamicPluginProber + TLSOptions *server.TLSOptions + RemoteRuntimeService internalapi.RuntimeService + RemoteImageService internalapi.ImageManagerService + PodStartupLatencyTracker util.PodStartupLatencyTracker + NodeStartupLatencyTracker util.NodeStartupLatencyTracker // remove it after cadvisor.UsingLegacyCadvisorStats dropped. useLegacyCadvisorStats bool } @@ -552,6 +553,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, keepTerminatedPodVolumes: keepTerminatedPodVolumes, nodeStatusMaxImages: nodeStatusMaxImages, tracer: tracer, + nodeStartupLatencyTracker: kubeDeps.NodeStartupLatencyTracker, } if klet.cloud != nil { @@ -747,7 +749,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, klet.containerDeletor = newPodContainerDeletor(klet.containerRuntime, integer.IntMax(containerGCPolicy.MaxPerPodContainer, minDeadContainerInPod)) // setup imageManager - imageManager, err := images.NewImageGCManager(klet.containerRuntime, klet.StatsProvider, kubeDeps.Recorder, nodeRef, imageGCPolicy, crOptions.PodSandboxImage, kubeDeps.TracerProvider) + imageManager, err := images.NewImageGCManager(klet.containerRuntime, klet.StatsProvider, kubeDeps.Recorder, nodeRef, imageGCPolicy, kubeDeps.TracerProvider) if err != nil { return nil, fmt.Errorf("failed to initialize image manager: %v", err) } @@ -1293,6 +1295,9 @@ type Kubelet struct { // OpenTelemetry Tracer tracer trace.Tracer + + // Track node startup latencies + nodeStartupLatencyTracker util.NodeStartupLatencyTracker } // ListPodStats is delegated to StatsProvider, which implements stats.Provider interface @@ -2235,7 +2240,7 @@ func (kl *Kubelet) deletePod(pod *v1.Pod) error { } // rejectPod records an event about the pod with the given reason and message, -// and updates the pod to the failed phase in the status manage. +// and updates the pod to the failed phase in the status manager. func (kl *Kubelet) rejectPod(pod *v1.Pod, reason, message string) { kl.recorder.Eventf(pod, v1.EventTypeWarning, reason, message) kl.statusManager.SetPodStatus(pod, v1.PodStatus{ diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go index d598c55b79a9..7723abc64b29 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status.go @@ -52,6 +52,9 @@ func (kl *Kubelet) registerWithAPIServer() { if kl.registrationCompleted { return } + + kl.nodeStartupLatencyTracker.RecordAttemptRegisterNode() + step := 100 * time.Millisecond for { @@ -85,6 +88,7 @@ func (kl *Kubelet) registerWithAPIServer() { func (kl *Kubelet) tryRegisterWithAPIServer(node *v1.Node) bool { _, err := kl.kubeClient.CoreV1().Nodes().Create(context.TODO(), node, metav1.CreateOptions{}) if err == nil { + kl.nodeStartupLatencyTracker.RecordRegisteredNewNode() return true } @@ -633,6 +637,12 @@ func (kl *Kubelet) patchNodeStatus(originalNode, node *v1.Node) (*v1.Node, error } kl.lastStatusReportTime = kl.clock.Now() kl.setLastObservedNodeAddresses(updatedNode.Status.Addresses) + + readyIdx, readyCondition := nodeutil.GetNodeCondition(&updatedNode.Status, v1.NodeReady) + if readyIdx >= 0 && readyCondition.Status == v1.ConditionTrue { + kl.nodeStartupLatencyTracker.RecordNodeReady() + } + return updatedNode, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go index 03d8dc987b2d..d92454fd785a 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go @@ -477,7 +477,7 @@ func (kl *Kubelet) GenerateRunContainerOptions(ctx context.Context, pod *v1.Pod, if err != nil { return nil, nil, err } - // nodename will be equals to hostname if SetHostnameAsFQDN is nil or false. If SetHostnameFQDN + // nodename will be equal to hostname if SetHostnameAsFQDN is nil or false. If SetHostnameFQDN // is true and hostDomainName is defined, nodename will be the FQDN (hostname.hostDomainName) nodename, err := util.GetNodenameForKernel(hostname, hostDomainName, pod.Spec.SetHostnameAsFQDN) if err != nil { @@ -981,7 +981,7 @@ func (kl *Kubelet) isAdmittedPodTerminal(pod *v1.Pod) bool { return true } // a pod that has been marked terminal within the Kubelet is considered - // inactive (may have been rejected by Kubelet admision) + // inactive (may have been rejected by Kubelet admission) if status, ok := kl.statusManager.GetPodStatus(pod.UID); ok { if status.Phase == v1.PodSucceeded || status.Phase == v1.PodFailed { return true diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go index eb25241cc118..85203f463180 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -48,6 +48,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + kubelettypes "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/features" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/cri/remote" @@ -549,7 +550,7 @@ func (m *kubeGenericRuntimeManager) convertToKubeContainerStatus(status *runtime func (m *kubeGenericRuntimeManager) getPodContainerStatuses(ctx context.Context, uid kubetypes.UID, name, namespace string) ([]*kubecontainer.Status, error) { // Select all containers of the given pod. containers, err := m.runtimeService.ListContainers(ctx, &runtimeapi.ContainerFilter{ - LabelSelector: map[string]string{types.KubernetesPodUIDLabel: string(uid)}, + LabelSelector: map[string]string{kubelettypes.KubernetesPodUIDLabel: string(uid)}, }) if err != nil { klog.ErrorS(err, "ListContainers error") @@ -849,6 +850,63 @@ func (m *kubeGenericRuntimeManager) purgeInitContainers(ctx context.Context, pod } } +// findNextInitContainerToRun returns the status of the last failed container, the +// index of next init container to start, or done if there are no further init containers. +// Status is only returned if an init container is failed, in which case next will +// point to the current container. +func findNextInitContainerToRun(pod *v1.Pod, podStatus *kubecontainer.PodStatus) (status *kubecontainer.Status, next *v1.Container, done bool) { + if len(pod.Spec.InitContainers) == 0 { + return nil, nil, true + } + + // If any of the main containers have status and are Running, then all init containers must + // have been executed at some point in the past. However, they could have been removed + // from the container runtime now, and if we proceed, it would appear as if they + // never ran and will re-execute improperly. + for i := range pod.Spec.Containers { + container := &pod.Spec.Containers[i] + status := podStatus.FindContainerStatusByName(container.Name) + if status != nil && status.State == kubecontainer.ContainerStateRunning { + return nil, nil, true + } + } + + // If there are failed containers, return the status of the last failed one. + for i := len(pod.Spec.InitContainers) - 1; i >= 0; i-- { + container := &pod.Spec.InitContainers[i] + status := podStatus.FindContainerStatusByName(container.Name) + if status != nil && isInitContainerFailed(status) { + return status, container, false + } + } + + // There are no failed containers now. + for i := len(pod.Spec.InitContainers) - 1; i >= 0; i-- { + container := &pod.Spec.InitContainers[i] + status := podStatus.FindContainerStatusByName(container.Name) + if status == nil { + continue + } + + // container is still running, return not done. + if status.State == kubecontainer.ContainerStateRunning { + return nil, nil, false + } + + if status.State == kubecontainer.ContainerStateExited { + // all init containers successful + if i == (len(pod.Spec.InitContainers) - 1) { + return nil, nil, true + } + + // all containers up to i successful, go to i+1 + return nil, &pod.Spec.InitContainers[i+1], false + } + } + + return nil, &pod.Spec.InitContainers[0], false +} + // hasAnyRegularContainerCreated returns true if any regular container has been // created, which indicates all init containers have been initialized. func hasAnyRegularContainerCreated(pod *v1.Pod, podStatus *kubecontainer.PodStatus) bool { @@ -878,6 +936,10 @@ func hasAnyRegularContainerCreated(pod *v1.Pod, podStatus *kubecontainer.PodStat // - Start the first init container that has not been started. // - Restart all restartable init containers that have started but are not running. // - Kill the restartable init containers that are not alive or started. +// +// Note that this is a function for the SidecarContainers feature. +// Please sync with the findNextInitContainerToRun function if any changes are +// made, as either this or that function will be called. func (m *kubeGenericRuntimeManager) computeInitContainerActions(pod *v1.Pod, podStatus *kubecontainer.PodStatus, changes *podActions) bool { if len(pod.Spec.InitContainers) == 0 { return true diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go index 7ae26947701e..bb7795e476a5 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_image.go @@ -111,6 +111,7 @@ func (m *kubeGenericRuntimeManager) ListImages(ctx context.Context) ([]kubeconta RepoTags: img.RepoTags, RepoDigests: img.RepoDigests, Spec: toKubeContainerImageSpec(img), + Pinned: img.Pinned, }) } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go index c8e76d41f286..9854b207fd0c 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -492,9 +492,13 @@ type podActions struct { // The attempt number of creating sandboxes for the pod. Attempt uint32 + // The next init container to start. + NextInitContainerToStart *v1.Container // InitContainersToStart keeps a list of indexes for the init containers to // start, where the index is the index of the specific init container in the // pod spec (pod.Spec.InitContainers). + // NOTE: This is a field for SidecarContainers feature. Either this or + // NextInitContainerToStart will be set. InitContainersToStart []int // ContainersToStart keeps a list of indexes for the containers to start, // where the index is the index of the specific container in the pod spec ( @@ -514,6 +518,11 @@ type podActions struct { UpdatePodResources bool } +func (p podActions) String() string { + return fmt.Sprintf("KillPod: %t, CreateSandbox: %t, UpdatePodResources: %t, Attempt: %d, InitContainersToStart: %v, ContainersToStart: %v, EphemeralContainersToStart: %v,ContainersToUpdate: %v, ContainersToKill: %v", + p.KillPod, p.CreateSandbox, p.UpdatePodResources, p.Attempt, p.InitContainersToStart, p.ContainersToStart, p.EphemeralContainersToStart, p.ContainersToUpdate, p.ContainersToKill) +} + func containerChanged(container *v1.Container, containerStatus *kubecontainer.Status) (uint64, uint64, bool) { expectedHash := kubecontainer.HashContainer(container) return expectedHash, containerStatus.Hash, containerStatus.Hash != expectedHash @@ -849,21 +858,34 @@ func (m *kubeGenericRuntimeManager) computePodActions(ctx context.Context, pod * containersToStart = append(containersToStart, idx) } - // If there is any regular container, it means all init containers have - // been initialized. - hasInitialized := hasAnyRegularContainerCreated(pod, podStatus) // We should not create a sandbox, and just kill the pod if initialization // is done and there is no container to start. - if hasInitialized && len(containersToStart) == 0 { - changes.CreateSandbox = false - return changes + if len(containersToStart) == 0 { + hasInitialized := false + if !utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + _, _, hasInitialized = findNextInitContainerToRun(pod, podStatus) + } else { + // If there is any regular container, it means all init containers have + // been initialized. + hasInitialized = hasAnyRegularContainerCreated(pod, podStatus) + } + + if hasInitialized { + changes.CreateSandbox = false + return changes + } } // If we are creating a pod sandbox, we should restart from the initial // state. if len(pod.Spec.InitContainers) != 0 { // Pod has init containers, return the first one. - changes.InitContainersToStart = []int{0} + if !utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + changes.NextInitContainerToStart = &pod.Spec.InitContainers[0] + } else { + changes.InitContainersToStart = []int{0} + } + return changes } changes.ContainersToStart = containersToStart @@ -880,11 +902,39 @@ func (m *kubeGenericRuntimeManager) computePodActions(ctx context.Context, pod * } } - hasInitialized := m.computeInitContainerActions(pod, podStatus, &changes) - if changes.KillPod || !hasInitialized { - // Initialization failed or still in progress. Skip inspecting non-init - // containers. - return changes + // Check initialization progress. + if !utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + initLastStatus, next, done := findNextInitContainerToRun(pod, podStatus) + if !done { + if next != nil { + initFailed := initLastStatus != nil && isInitContainerFailed(initLastStatus) + if initFailed && !shouldRestartOnFailure(pod) { + changes.KillPod = true + } else { + // Always try to stop containers in unknown state first. + if initLastStatus != nil && initLastStatus.State == kubecontainer.ContainerStateUnknown { + changes.ContainersToKill[initLastStatus.ID] = containerToKillInfo{ + name: next.Name, + container: next, + message: fmt.Sprintf("Init container is in %q state, try killing it before restart", + initLastStatus.State), + reason: reasonUnknown, + } + } + changes.NextInitContainerToStart = next + } + } + // Initialization failed or still in progress. Skip inspecting non-init + // containers. + return changes + } + } else { + hasInitialized := m.computeInitContainerActions(pod, podStatus, &changes) + if changes.KillPod || !hasInitialized { + // Initialization failed or still in progress. Skip inspecting non-init + // containers. + return changes + } } if isInPlacePodVerticalScalingAllowed(pod) { @@ -980,9 +1030,11 @@ func (m *kubeGenericRuntimeManager) computePodActions(ctx context.Context, pod * if keepCount == 0 && len(changes.ContainersToStart) == 0 { changes.KillPod = true - // To prevent the restartable init containers to keep pod alive, we should - // not restart them. - changes.InitContainersToStart = nil + if utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + // To prevent the restartable init containers to keep pod alive, we should + // not restart them. + changes.InitContainersToStart = nil + } } return changes @@ -1222,21 +1274,34 @@ func (m *kubeGenericRuntimeManager) SyncPod(ctx context.Context, pod *v1.Pod, po start(ctx, "ephemeral container", metrics.EphemeralContainer, ephemeralContainerStartSpec(&pod.Spec.EphemeralContainers[idx])) } - // Step 6: start init containers. - for _, idx := range podContainerChanges.InitContainersToStart { - container := &pod.Spec.InitContainers[idx] - // Start the next init container. - if err := start(ctx, "init container", metrics.InitContainer, containerStartSpec(container)); err != nil { - if types.IsRestartableInitContainer(container) { - klog.V(4).InfoS("Failed to start the restartable init container for the pod, skipping", "initContainerName", container.Name, "pod", klog.KObj(pod)) - continue + if !utilfeature.DefaultFeatureGate.Enabled(features.SidecarContainers) { + // Step 6: start the init container. + if container := podContainerChanges.NextInitContainerToStart; container != nil { + // Start the next init container. + if err := start(ctx, "init container", metrics.InitContainer, containerStartSpec(container)); err != nil { + return } - klog.V(4).InfoS("Failed to initialize the pod, as the init container failed to start, aborting", "initContainerName", container.Name, "pod", klog.KObj(pod)) - return + + // Successfully started the container; clear the entry in the failure + klog.V(4).InfoS("Completed init container for pod", "containerName", container.Name, "pod", klog.KObj(pod)) } + } else { + // Step 6: start init containers. + for _, idx := range podContainerChanges.InitContainersToStart { + container := &pod.Spec.InitContainers[idx] + // Start the next init container. + if err := start(ctx, "init container", metrics.InitContainer, containerStartSpec(container)); err != nil { + if types.IsRestartableInitContainer(container) { + klog.V(4).InfoS("Failed to start the restartable init container for the pod, skipping", "initContainerName", container.Name, "pod", klog.KObj(pod)) + continue + } + klog.V(4).InfoS("Failed to initialize the pod, as the init container failed to start, aborting", "initContainerName", container.Name, "pod", klog.KObj(pod)) + return + } - // Successfully started the container; clear the entry in the failure - klog.V(4).InfoS("Completed init container for pod", "containerName", container.Name, "pod", klog.KObj(pod)) + // Successfully started the container; clear the entry in the failure + klog.V(4).InfoS("Completed init container for pod", "containerName", container.Name, "pod", klog.KObj(pod)) + } } // Step 7: For containers in podContainerChanges.ContainersToUpdate[CPU,Memory] list, invoke UpdateContainerResources diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go index a22a362dbd3a..c954b2d9208e 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go @@ -28,10 +28,10 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" + "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/features" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" runtimeutil "k8s.io/kubernetes/pkg/kubelet/kuberuntime/util" - "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util" "k8s.io/kubernetes/pkg/kubelet/util/format" netutils "k8s.io/utils/net" diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go index ae1ac604862e..ef319eed868b 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/labels.go @@ -24,9 +24,9 @@ import ( kubetypes "k8s.io/apimachinery/pkg/types" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog/v2" + "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/features" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - "k8s.io/kubernetes/pkg/kubelet/types" ) const ( diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/resource_metrics.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/resource_metrics.go index 1b80b29c96a5..36d29be4f6ff 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/resource_metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/collectors/resource_metrics.go @@ -31,14 +31,14 @@ var ( "Cumulative cpu time consumed by the node in core-seconds", nil, nil, - metrics.ALPHA, + metrics.STABLE, "") nodeMemoryUsageDesc = metrics.NewDesc("node_memory_working_set_bytes", "Current working set of the node in bytes", nil, nil, - metrics.ALPHA, + metrics.STABLE, "") nodeSwapUsageDesc = metrics.NewDesc("node_swap_usage_bytes", @@ -52,14 +52,14 @@ var ( "Cumulative cpu time consumed by the container in core-seconds", []string{"container", "pod", "namespace"}, nil, - metrics.ALPHA, + metrics.STABLE, "") containerMemoryUsageDesc = metrics.NewDesc("container_memory_working_set_bytes", "Current working set of the container in bytes", []string{"container", "pod", "namespace"}, nil, - metrics.ALPHA, + metrics.STABLE, "") containerSwapUsageDesc = metrics.NewDesc("container_swap_usage_bytes", @@ -73,14 +73,14 @@ var ( "Cumulative cpu time consumed by the pod in core-seconds", []string{"pod", "namespace"}, nil, - metrics.ALPHA, + metrics.STABLE, "") podMemoryUsageDesc = metrics.NewDesc("pod_memory_working_set_bytes", "Current working set of the pod in bytes", []string{"pod", "namespace"}, nil, - metrics.ALPHA, + metrics.STABLE, "") podSwapUsageDesc = metrics.NewDesc("pod_swap_usage_bytes", @@ -95,13 +95,20 @@ var ( nil, nil, metrics.ALPHA, + "1.29.0") + + resourceScrapeErrorResultDesc = metrics.NewDesc("resource_scrape_error", + "1 if there was an error while getting container metrics, 0 otherwise", + nil, + nil, + metrics.STABLE, "") containerStartTimeDesc = metrics.NewDesc("container_start_time_seconds", "Start time of the container since unix epoch in seconds", []string{"container", "pod", "namespace"}, nil, - metrics.ALPHA, + metrics.STABLE, "") ) @@ -134,6 +141,7 @@ func (rc *resourceMetricsCollector) DescribeWithStability(ch chan<- *metrics.Des ch <- podMemoryUsageDesc ch <- podSwapUsageDesc ch <- resourceScrapeResultDesc + ch <- resourceScrapeErrorResultDesc } // CollectWithStability implements metrics.StableCollector @@ -145,6 +153,7 @@ func (rc *resourceMetricsCollector) CollectWithStability(ch chan<- metrics.Metri var errorCount float64 defer func() { ch <- metrics.NewLazyConstMetric(resourceScrapeResultDesc, metrics.GaugeValue, errorCount) + ch <- metrics.NewLazyConstMetric(resourceScrapeErrorResultDesc, metrics.GaugeValue, errorCount) }() statsSummary, err := rc.provider.GetCPUAndMemoryStats(ctx) if err != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go index 0897b59eb219..cd80e63c5f72 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/metrics/metrics.go @@ -33,6 +33,11 @@ const ( KubeletSubsystem = "kubelet" NodeNameKey = "node_name" NodeLabelKey = "node" + NodeStartupPreKubeletKey = "node_startup_pre_kubelet_duration_seconds" + NodeStartupPreRegistrationKey = "node_startup_pre_registration_duration_seconds" + NodeStartupRegistrationKey = "node_startup_registration_duration_seconds" + NodeStartupPostRegistrationKey = "node_startup_post_registration_duration_seconds" + NodeStartupKey = "node_startup_duration_seconds" PodWorkerDurationKey = "pod_worker_duration_seconds" PodStartDurationKey = "pod_start_duration_seconds" PodStartSLIDurationKey = "pod_start_sli_duration_seconds" @@ -736,6 +741,51 @@ var ( StabilityLevel: metrics.ALPHA, }, ) + + NodeStartupPreKubeletDuration = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeStartupPreKubeletKey, + Help: "Duration in seconds of node startup before kubelet starts.", + StabilityLevel: metrics.ALPHA, + }, + ) + + NodeStartupPreRegistrationDuration = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeStartupPreRegistrationKey, + Help: "Duration in seconds of node startup before registration.", + StabilityLevel: metrics.ALPHA, + }, + ) + + NodeStartupRegistrationDuration = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeStartupRegistrationKey, + Help: "Duration in seconds of node startup during registration.", + StabilityLevel: metrics.ALPHA, + }, + ) + + NodeStartupPostRegistrationDuration = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeStartupPostRegistrationKey, + Help: "Duration in seconds of node startup after registration.", + StabilityLevel: metrics.ALPHA, + }, + ) + + NodeStartupDuration = metrics.NewGauge( + &metrics.GaugeOpts{ + Subsystem: KubeletSubsystem, + Name: NodeStartupKey, + Help: "Duration in seconds of node startup in total.", + StabilityLevel: metrics.ALPHA, + }, + ) ) var registerMetrics sync.Once @@ -748,6 +798,11 @@ func Register(collectors ...metrics.StableCollector) { legacyregistry.MustRegister(PodWorkerDuration) legacyregistry.MustRegister(PodStartDuration) legacyregistry.MustRegister(PodStartSLIDuration) + legacyregistry.MustRegister(NodeStartupPreKubeletDuration) + legacyregistry.MustRegister(NodeStartupPreRegistrationDuration) + legacyregistry.MustRegister(NodeStartupRegistrationDuration) + legacyregistry.MustRegister(NodeStartupPostRegistrationDuration) + legacyregistry.MustRegister(NodeStartupDuration) legacyregistry.MustRegister(CgroupManagerDuration) legacyregistry.MustRegister(PodWorkerStartDuration) legacyregistry.MustRegister(PodStatusSyncDuration) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/systemd/inhibit_linux.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/systemd/inhibit_linux.go index 2ef961660abc..270177bc2b71 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/systemd/inhibit_linux.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/nodeshutdown/systemd/inhibit_linux.go @@ -133,7 +133,7 @@ func (bus *DBusCon) ReloadLogindConf() error { return nil } -// MonitorShutdown detects the a node shutdown by watching for "PrepareForShutdown" logind events. +// MonitorShutdown detects the node shutdown by watching for "PrepareForShutdown" logind events. // see https://www.freedesktop.org/wiki/Software/systemd/inhibit/ for more details. func (bus *DBusCon) MonitorShutdown() (<-chan bool, error) { err := bus.SystemBus.AddMatchSignal(dbus.WithMatchInterface(logindInterface), dbus.WithMatchMember("PrepareForShutdown"), dbus.WithMatchObjectPath("/org/freedesktop/login1")) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/pluginmanager/operationexecutor/operation_executor.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/pluginmanager/operationexecutor/operation_executor.go index b6e6019a46fa..37c993ded577 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/pluginmanager/operationexecutor/operation_executor.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/pluginmanager/operationexecutor/operation_executor.go @@ -43,7 +43,7 @@ import ( // errors are simply logged and the goroutine is terminated without updating // actualStateOfWorld. type OperationExecutor interface { - // RegisterPlugin registers the given plugin using the a handler in the plugin handler map. + // RegisterPlugin registers the given plugin using a handler in the plugin handler map. // It then updates the actual state of the world to reflect that. RegisterPlugin(socketPath string, timestamp time.Time, pluginHandlers map[string]cache.PluginHandler, actualStateOfWorld ActualStateOfWorldUpdater) error diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/runonce.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/runonce.go index b11442ae902c..448df4448690 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/runonce.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/runonce.go @@ -111,7 +111,7 @@ func (kl *Kubelet) runOnce(ctx context.Context, pods []*v1.Pod, retryDelay time. return results, err } -// runPod runs a single pod and wait until all containers are running. +// runPod runs a single pod and waits until all containers are running. func (kl *Kubelet) runPod(ctx context.Context, pod *v1.Pod, retryDelay time.Duration) error { var isTerminal bool delay := retryDelay diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go index 8e21d3fa50ab..f66505ff8832 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go @@ -72,6 +72,7 @@ import ( "k8s.io/kubelet/pkg/cri/streaming" "k8s.io/kubelet/pkg/cri/streaming/portforward" remotecommandserver "k8s.io/kubelet/pkg/cri/streaming/remotecommand" + kubelettypes "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/v1/validation" @@ -83,7 +84,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/prober" servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics" "k8s.io/kubernetes/pkg/kubelet/server/stats" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util" ) @@ -377,9 +377,8 @@ func (s *Server) InstallDefaultHandlers() { healthz.NamedCheck("syncloop", s.syncLoopHealthCheck), ) - if utilfeature.DefaultFeatureGate.Enabled(metricsfeatures.ComponentSLIs) { - slis.SLIMetricsWithReset{}.Install(s.restfulCont) - } + slis.SLIMetricsWithReset{}.Install(s.restfulCont) + s.addMetricsBucketMatcher("pods") ws := new(restful.WebService) ws. diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go index cf900550532d..f6251e1a7f44 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cadvisor_stats_provider.go @@ -29,13 +29,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1" + kubetypes "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/leaky" "k8s.io/kubernetes/pkg/kubelet/server/stats" "k8s.io/kubernetes/pkg/kubelet/status" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) // cadvisorStatsProvider implements the containerStatsProvider interface by diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go index ad4c3e3b7e9b..d02cee4f5602 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go @@ -36,9 +36,9 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1" + kubetypes "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/server/stats" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/utils/clock" ) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go index e43c58744811..0c359f2b3fdb 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go @@ -533,7 +533,7 @@ func hasPodInitialized(pod *v1.Pod) bool { // initializedContainers returns all status except for suffix of containers that are in Waiting // state, which is the set of containers that have attempted to start at least once. If all containers -// are Watiing, the first container is always returned. +// are Waiting, the first container is always returned. func initializedContainers(containers []v1.ContainerStatus) []v1.ContainerStatus { for i := len(containers) - 1; i >= 0; i-- { if containers[i].State.Waiting == nil || containers[i].LastTerminationState.Terminated != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go index 160f9ca0d295..c8f934812515 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/manager/cache_based_manager.go @@ -224,21 +224,29 @@ func (c *cacheBasedManager) RegisterPod(pod *v1.Pod) { names := c.getReferencedObjects(pod) c.lock.Lock() defer c.lock.Unlock() - for name := range names { - c.objectStore.AddReference(pod.Namespace, name, pod.UID) - } var prev *v1.Pod key := objectKey{namespace: pod.Namespace, name: pod.Name, uid: pod.UID} prev = c.registeredPods[key] c.registeredPods[key] = pod - if prev != nil { - for name := range c.getReferencedObjects(prev) { - // On an update, the .Add() call above will have re-incremented the - // ref count of any existing object, so any objects that are in both - // names and prev need to have their ref counts decremented. Any that - // are only in prev need to be completely removed. This unconditional - // call takes care of both cases. - c.objectStore.DeleteReference(prev.Namespace, name, prev.UID) + // To minimize unnecessary API requests to the API server for the configmap/secret get API + // only invoke AddReference the first time RegisterPod is called for a pod. + if prev == nil { + for name := range names { + c.objectStore.AddReference(pod.Namespace, name, pod.UID) + } + } else { + prevNames := c.getReferencedObjects(prev) + // Add new references + for name := range names { + if !prevNames.Has(name) { + c.objectStore.AddReference(pod.Namespace, name, pod.UID) + } + } + // Remove dropped references + for prevName := range prevNames { + if !names.Has(prevName) { + c.objectStore.DeleteReference(pod.Namespace, prevName, pod.UID) + } } } } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/node_startup_latency_tracker.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/node_startup_latency_tracker.go new file mode 100644 index 000000000000..815e4e81eaf9 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/util/node_startup_latency_tracker.go @@ -0,0 +1,103 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "sync" + "time" + + "k8s.io/kubernetes/pkg/kubelet/metrics" + "k8s.io/utils/clock" +) + +type NodeStartupLatencyTracker interface { + // This function may be called across Kubelet restart. + RecordAttemptRegisterNode() + // This function should not be called across Kubelet restart. + RecordRegisteredNewNode() + // This function may be called across Kubelet restart. + RecordNodeReady() +} + +type basicNodeStartupLatencyTracker struct { + lock sync.Mutex + + bootTime time.Time + kubeletStartTime time.Time + firstRegistrationAttemptTime time.Time + firstRegisteredNewNodeTime time.Time + firstNodeReadyTime time.Time + + // For testability + clock clock.Clock +} + +func NewNodeStartupLatencyTracker() NodeStartupLatencyTracker { + bootTime, err := GetBootTime() + if err != nil { + bootTime = time.Time{} + } + return &basicNodeStartupLatencyTracker{ + bootTime: bootTime, + kubeletStartTime: time.Now(), + clock: clock.RealClock{}, + } +} + +func (n *basicNodeStartupLatencyTracker) RecordAttemptRegisterNode() { + n.lock.Lock() + defer n.lock.Unlock() + + if !n.firstRegistrationAttemptTime.IsZero() { + return + } + + n.firstRegistrationAttemptTime = n.clock.Now() +} + +func (n *basicNodeStartupLatencyTracker) RecordRegisteredNewNode() { + n.lock.Lock() + defer n.lock.Unlock() + + if n.firstRegistrationAttemptTime.IsZero() || !n.firstRegisteredNewNodeTime.IsZero() { + return + } + + n.firstRegisteredNewNodeTime = n.clock.Now() + + if !n.bootTime.IsZero() { + metrics.NodeStartupPreKubeletDuration.Set(n.kubeletStartTime.Sub(n.bootTime).Seconds()) + } + metrics.NodeStartupPreRegistrationDuration.Set(n.firstRegistrationAttemptTime.Sub(n.kubeletStartTime).Seconds()) + metrics.NodeStartupRegistrationDuration.Set(n.firstRegisteredNewNodeTime.Sub(n.firstRegistrationAttemptTime).Seconds()) +} + +func (n *basicNodeStartupLatencyTracker) RecordNodeReady() { + n.lock.Lock() + defer n.lock.Unlock() + + if n.firstRegisteredNewNodeTime.IsZero() || !n.firstNodeReadyTime.IsZero() { + return + } + + n.firstNodeReadyTime = n.clock.Now() + + metrics.NodeStartupPostRegistrationDuration.Set(n.firstNodeReadyTime.Sub(n.firstRegisteredNewNodeTime).Seconds()) + if !n.bootTime.IsZero() { + metrics.NodeStartupDuration.Set(n.firstNodeReadyTime.Sub(n.bootTime).Seconds()) + } +} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go index 57e534d9a0e4..584ce9bff0d8 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go @@ -23,6 +23,7 @@ import ( "path/filepath" "time" + "github.com/go-logr/logr" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -37,6 +38,12 @@ import ( utilstrings "k8s.io/utils/strings" ) +// these interfaces are necessary to keep the structures private +// and at the same time log them correctly in structured logs. +var _ logr.Marshaler = podVolume{} +var _ logr.Marshaler = reconstructedVolume{} +var _ logr.Marshaler = globalVolumeInfo{} + type podVolume struct { podName volumetypes.UniquePodName volumeSpecName string @@ -45,6 +52,22 @@ type podVolume struct { volumeMode v1.PersistentVolumeMode } +func (p podVolume) MarshalLog() interface{} { + return struct { + PodName string `json:"podName"` + VolumeSpecName string `json:"volumeSpecName"` + VolumePath string `json:"volumePath"` + PluginName string `json:"pluginName"` + VolumeMode string `json:"volumeMode"` + }{ + PodName: string(p.podName), + VolumeSpecName: p.volumeSpecName, + VolumePath: p.volumePath, + PluginName: p.pluginName, + VolumeMode: string(p.volumeMode), + } +} + type reconstructedVolume struct { volumeName v1.UniqueVolumeName podName volumetypes.UniquePodName @@ -59,6 +82,28 @@ type reconstructedVolume struct { seLinuxMountContext string } +func (rv reconstructedVolume) MarshalLog() interface{} { + return struct { + VolumeName string `json:"volumeName"` + PodName string `json:"podName"` + VolumeSpecName string `json:"volumeSpecName"` + OuterVolumeSpecName string `json:"outerVolumeSpecName"` + PodUID string `json:"podUID"` + VolumeGIDValue string `json:"volumeGIDValue"` + DevicePath string `json:"devicePath"` + SeLinuxMountContext string `json:"seLinuxMountContext"` + }{ + VolumeName: string(rv.volumeName), + PodName: string(rv.podName), + VolumeSpecName: rv.volumeSpec.Name(), + OuterVolumeSpecName: rv.outerVolumeSpecName, + PodUID: string(rv.pod.UID), + VolumeGIDValue: rv.volumeGidValue, + DevicePath: rv.devicePath, + SeLinuxMountContext: rv.seLinuxMountContext, + } +} + // globalVolumeInfo stores reconstructed volume information // for each pod that was using that volume. type globalVolumeInfo struct { @@ -71,6 +116,25 @@ type globalVolumeInfo struct { podVolumes map[volumetypes.UniquePodName]*reconstructedVolume } +func (gvi globalVolumeInfo) MarshalLog() interface{} { + podVolumes := make(map[volumetypes.UniquePodName]v1.UniqueVolumeName) + for podName, volume := range gvi.podVolumes { + podVolumes[podName] = volume.volumeName + } + + return struct { + VolumeName string `json:"volumeName"` + VolumeSpecName string `json:"volumeSpecName"` + DevicePath string `json:"devicePath"` + PodVolumes map[volumetypes.UniquePodName]v1.UniqueVolumeName `json:"podVolumes"` + }{ + VolumeName: string(gvi.volumeName), + VolumeSpecName: gvi.volumeSpec.Name(), + DevicePath: gvi.devicePath, + PodVolumes: podVolumes, + } +} + func (rc *reconciler) updateLastSyncTime() { rc.timeOfLastSyncLock.Lock() defer rc.timeOfLastSyncLock.Unlock() @@ -181,7 +245,9 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { } } } - klog.V(4).InfoS("Get volumes from pod directory", "path", podDir, "volumes", volumes) + for _, volume := range volumes { + klog.V(4).InfoS("Get volume from pod directory", "path", podDir, "volume", volume) + } return volumes, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubemark/hollow_kubelet.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubemark/hollow_kubelet.go index 29ba3d4e1b96..74db6c95c37e 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubemark/hollow_kubelet.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/kubemark/hollow_kubelet.go @@ -97,24 +97,25 @@ func NewHollowKubelet( runtimeService internalapi.RuntimeService, containerManager cm.ContainerManager) *HollowKubelet { d := &kubelet.Dependencies{ - KubeClient: client, - HeartbeatClient: heartbeatClient, - ProbeManager: probetest.FakeManager{}, - RemoteRuntimeService: runtimeService, - RemoteImageService: imageService, - CAdvisorInterface: cadvisorInterface, - Cloud: nil, - OSInterface: &containertest.FakeOS{}, - ContainerManager: containerManager, - VolumePlugins: volumePlugins(), - TLSOptions: nil, - OOMAdjuster: oom.NewFakeOOMAdjuster(), - Mounter: &mount.FakeMounter{}, - Subpather: &subpath.FakeSubpath{}, - HostUtil: hostutil.NewFakeHostUtil(nil), - PodStartupLatencyTracker: kubeletutil.NewPodStartupLatencyTracker(), - TracerProvider: trace.NewNoopTracerProvider(), - Recorder: &record.FakeRecorder{}, // With real recorder we attempt to read /dev/kmsg. + KubeClient: client, + HeartbeatClient: heartbeatClient, + ProbeManager: probetest.FakeManager{}, + RemoteRuntimeService: runtimeService, + RemoteImageService: imageService, + CAdvisorInterface: cadvisorInterface, + Cloud: nil, + OSInterface: &containertest.FakeOS{}, + ContainerManager: containerManager, + VolumePlugins: volumePlugins(), + TLSOptions: nil, + OOMAdjuster: oom.NewFakeOOMAdjuster(), + Mounter: &mount.FakeMounter{}, + Subpather: &subpath.FakeSubpath{}, + HostUtil: hostutil.NewFakeHostUtil(nil), + PodStartupLatencyTracker: kubeletutil.NewPodStartupLatencyTracker(), + NodeStartupLatencyTracker: kubeletutil.NewNodeStartupLatencyTracker(), + TracerProvider: trace.NewNoopTracerProvider(), + Recorder: &record.FakeRecorder{}, // With real recorder we attempt to read /dev/kmsg. } return &HollowKubelet{ diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go index ab5dc7df8976..b3b55dab978d 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/conntrack/cleanup.go @@ -50,7 +50,7 @@ func deleteStaleServiceConntrackEntries(isIPv6 bool, exec utilexec.Interface, sv for _, extIP := range svcInfo.ExternalIPStrings() { conntrackCleanupServiceIPs.Insert(extIP) } - for _, lbIP := range svcInfo.LoadBalancerIPStrings() { + for _, lbIP := range svcInfo.LoadBalancerVIPStrings() { conntrackCleanupServiceIPs.Insert(lbIP) } nodePort := svcInfo.NodePort() @@ -100,7 +100,7 @@ func deleteStaleEndpointConntrackEntries(exec utilexec.Interface, svcPortMap pro klog.ErrorS(err, "Failed to delete endpoint connections for externalIP", "servicePortName", epSvcPair.ServicePortName, "externalIP", extIP) } } - for _, lbIP := range svcInfo.LoadBalancerIPStrings() { + for _, lbIP := range svcInfo.LoadBalancerVIPStrings() { err := ClearEntriesForNAT(exec, lbIP, endpointIP, v1.ProtocolUDP) if err != nil { klog.ErrorS(err, "Failed to delete endpoint connections for LoadBalancerIP", "servicePortName", epSvcPair.ServicePortName, "loadBalancerIP", lbIP) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go index fd1e9485cdb6..47976dbf0949 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go @@ -117,13 +117,6 @@ func (info *BaseEndpointInfo) Port() (int, error) { return proxyutil.PortPart(info.Endpoint) } -// Equal is part of proxy.Endpoint interface. -func (info *BaseEndpointInfo) Equal(other Endpoint) bool { - return info.String() == other.String() && - info.GetIsLocal() == other.GetIsLocal() && - info.IsReady() == other.IsReady() -} - // GetNodeName returns the NodeName for this endpoint. func (info *BaseEndpointInfo) GetNodeName() string { return info.NodeName @@ -414,18 +407,18 @@ func detectStaleConntrackEntries(oldEndpointsMap, newEndpointsMap EndpointsMap, } for _, ep := range epList { - // If the old endpoint wasn't Ready then there can't be stale + // If the old endpoint wasn't Serving then there can't be stale // conntrack entries since there was no traffic sent to it. - if !ep.IsReady() { + if !ep.IsServing() { continue } deleted := true // Check if the endpoint has changed, including if it went from - // ready to not ready. If it did change stale entries for the old + // serving to not serving. If it did change stale entries for the old // endpoint have to be cleared. for i := range newEndpointsMap[svcPortName] { - if newEndpointsMap[svcPortName][i].Equal(ep) { + if newEndpointsMap[svcPortName][i].String() == ep.String() { deleted = false break } @@ -446,21 +439,21 @@ func detectStaleConntrackEntries(oldEndpointsMap, newEndpointsMap EndpointsMap, continue } - epReady := 0 + epServing := 0 for _, ep := range epList { - if ep.IsReady() { - epReady++ + if ep.IsServing() { + epServing++ } } - oldEpReady := 0 + oldEpServing := 0 for _, ep := range oldEndpointsMap[svcPortName] { - if ep.IsReady() { - oldEpReady++ + if ep.IsServing() { + oldEpServing++ } } - if epReady > 0 && oldEpReady == 0 { + if epServing > 0 && oldEpServing == 0 { *newlyActiveUDPServices = append(*newlyActiveUDPServices, svcPortName) } } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go index 0a7e37810e5b..87ede823c60a 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go @@ -201,7 +201,6 @@ var ipsetWithIptablesChain = []struct { // In IPVS proxy mode, the following flags need to be set const ( - sysctlBridgeCallIPTables = "net/bridge/bridge-nf-call-iptables" sysctlVSConnTrack = "net/ipv4/vs/conntrack" sysctlConnReuse = "net/ipv4/vs/conn_reuse_mode" sysctlExpireNoDestConn = "net/ipv4/vs/expire_nodest_conn" @@ -330,13 +329,6 @@ func NewProxier(ipFamily v1.IPFamily, nodePortAddressStrings []string, kernelHandler KernelHandler, ) (*Proxier, error) { - // Proxy needs br_netfilter and bridge-nf-call-iptables=1 when containers - // are connected to a Linux bridge (but not SDN bridges). Until most - // plugins handle this, log when config is missing - if val, err := sysctl.GetSysctl(sysctlBridgeCallIPTables); err == nil && val != 1 { - klog.InfoS("Missing br-netfilter module or unset sysctl br-nf-call-iptables, proxy may not work as intended") - } - // Set the conntrack sysctl we need for if err := proxyutil.EnsureSysctl(sysctl, sysctlVSConnTrack, 1); err != nil { return nil, err @@ -1172,7 +1164,7 @@ func (proxier *Proxier) syncProxyRules() { } // Capture load-balancer ingress. - for _, ingress := range svcInfo.LoadBalancerIPStrings() { + for _, ingress := range svcInfo.LoadBalancerVIPStrings() { // ipset call entry = &utilipset.Entry{ IP: ingress, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/node.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/node.go index 7cd24f6d4fcd..6ae87fdcac66 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/node.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/node.go @@ -57,7 +57,7 @@ func (n *NodePodCIDRHandler) OnNodeAdd(node *v1.Node) { if !reflect.DeepEqual(n.podCIDRs, podCIDRs) { klog.ErrorS(nil, "Using NodeCIDR LocalDetector mode, current PodCIDRs are different than previous PodCIDRs, restarting", "node", klog.KObj(node), "newPodCIDRs", podCIDRs, "oldPodCIDRs", n.podCIDRs) - panic("Current Node PodCIDRs are different than previous PodCIDRs, restarting") + klog.FlushAndExit(klog.ExitFlushTimeout, 1) } } @@ -75,7 +75,7 @@ func (n *NodePodCIDRHandler) OnNodeUpdate(_, node *v1.Node) { if !reflect.DeepEqual(n.podCIDRs, podCIDRs) { klog.ErrorS(nil, "Using NodeCIDR LocalDetector mode, current PodCIDRs are different than previous PodCIDRs, restarting", "node", klog.KObj(node), "newPodCIDRs", podCIDRs, "oldPODCIDRs", n.podCIDRs) - panic("Current Node PodCIDRs are different than previous PodCIDRs, restarting") + klog.FlushAndExit(klog.ExitFlushTimeout, 1) } } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go index 279191f57b25..1ffa982f327d 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/service.go @@ -44,7 +44,7 @@ type BaseServicePortInfo struct { port int protocol v1.Protocol nodePort int - loadBalancerStatus v1.LoadBalancerStatus + loadBalancerVIPs []string sessionAffinityType v1.ServiceAffinity stickyMaxAgeSeconds int externalIPs []string @@ -108,13 +108,9 @@ func (bsvcPortInfo *BaseServicePortInfo) ExternalIPStrings() []string { return bsvcPortInfo.externalIPs } -// LoadBalancerIPStrings is part of ServicePort interface. -func (bsvcPortInfo *BaseServicePortInfo) LoadBalancerIPStrings() []string { - var ips []string - for _, ing := range bsvcPortInfo.loadBalancerStatus.Ingress { - ips = append(ips, ing.IP) - } - return ips +// LoadBalancerVIPStrings is part of ServicePort interface. +func (bsvcPortInfo *BaseServicePortInfo) LoadBalancerVIPStrings() []string { + return bsvcPortInfo.loadBalancerVIPs } // ExternalPolicyLocal is part of ServicePort interface. @@ -139,7 +135,7 @@ func (bsvcPortInfo *BaseServicePortInfo) HintsAnnotation() string { // ExternallyAccessible is part of ServicePort interface. func (bsvcPortInfo *BaseServicePortInfo) ExternallyAccessible() bool { - return bsvcPortInfo.nodePort != 0 || len(bsvcPortInfo.loadBalancerStatus.Ingress) != 0 || len(bsvcPortInfo.externalIPs) != 0 + return bsvcPortInfo.nodePort != 0 || len(bsvcPortInfo.loadBalancerVIPs) != 0 || len(bsvcPortInfo.externalIPs) != 0 } // UsesClusterEndpoints is part of ServicePort interface. @@ -211,26 +207,34 @@ func (sct *ServiceChangeTracker) newBaseServiceInfo(port *v1.ServicePort, servic "ipFamily", sct.ipFamily, "loadBalancerSourceRanges", strings.Join(cidrs, ", "), "service", klog.KObj(service)) } - // Obtain Load Balancer Ingress IPs - var ips []string + // Obtain Load Balancer Ingress + var invalidIPs []string for _, ing := range service.Status.LoadBalancer.Ingress { - if ing.IP != "" { - ips = append(ips, ing.IP) + if ing.IP == "" { + continue } - } - - if len(ips) > 0 { - ipFamilyMap = proxyutil.MapIPsByIPFamily(ips) - if ipList, ok := ipFamilyMap[proxyutil.OtherIPFamily(sct.ipFamily)]; ok && len(ipList) > 0 { - klog.V(4).InfoS("Service change tracker ignored the following load balancer ingress IPs for given Service as they don't match the IP Family", - "ipFamily", sct.ipFamily, "loadBalancerIngressIps", strings.Join(ipList, ", "), "service", klog.KObj(service)) + // proxy mode load balancers do not need to track the IPs in the service cache + // and they can also implement IP family translation, so no need to check if + // the status ingress.IP and the ClusterIP belong to the same family. + if !proxyutil.IsVIPMode(ing) { + klog.V(4).InfoS("Service change tracker ignored the following load balancer ingress IP for given Service as it using Proxy mode", + "ipFamily", sct.ipFamily, "loadBalancerIngressIP", ing.IP, "service", klog.KObj(service)) + continue } - // Create the LoadBalancerStatus with the filtered IPs - for _, ip := range ipFamilyMap[sct.ipFamily] { - info.loadBalancerStatus.Ingress = append(info.loadBalancerStatus.Ingress, v1.LoadBalancerIngress{IP: ip}) + + // kube-proxy does not implement IP family translation, skip addresses with + // different IP family + if ipFamily := proxyutil.GetIPFamilyFromIP(ing.IP); ipFamily == sct.ipFamily { + info.loadBalancerVIPs = append(info.loadBalancerVIPs, ing.IP) + } else { + invalidIPs = append(invalidIPs, ing.IP) } } + if len(invalidIPs) > 0 { + klog.V(4).InfoS("Service change tracker ignored the following load balancer ingress IPs for given Service as they don't match the IP Family", + "ipFamily", sct.ipFamily, "loadBalancerIngressIPs", strings.Join(invalidIPs, ", "), "service", klog.KObj(service)) + } if apiservice.NeedsHealthCheck(service) { p := service.Spec.HealthCheckNodePort diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go index 7c9d19ab8183..4e2d23ed3301 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/types.go @@ -73,8 +73,8 @@ type ServicePort interface { StickyMaxAgeSeconds() int // ExternalIPStrings returns service ExternalIPs as a string array. ExternalIPStrings() []string - // LoadBalancerIPStrings returns service LoadBalancerIPs as a string array. - LoadBalancerIPStrings() []string + // LoadBalancerVIPStrings returns service LoadBalancerIPs which are VIP mode as a string array. + LoadBalancerVIPStrings() []string // Protocol returns service protocol. Protocol() v1.Protocol // LoadBalancerSourceRanges returns service LoadBalancerSourceRanges if present empty array if not @@ -131,8 +131,6 @@ type Endpoint interface { IP() string // Port returns the Port part of the endpoint. Port() (int, error) - // Equal checks if two endpoints are equal. - Equal(Endpoint) bool // GetNodeName returns the node name for the endpoint GetNodeName() string // GetZone returns the zone for the endpoint diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go index 3f56bb6dbf5e..807bced0b564 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/proxy/util/utils.go @@ -27,9 +27,11 @@ import ( "k8s.io/apimachinery/pkg/types" utilrand "k8s.io/apimachinery/pkg/util/rand" "k8s.io/apimachinery/pkg/util/sets" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/events" utilsysctl "k8s.io/component-helpers/node/util/sysctl" helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + "k8s.io/kubernetes/pkg/features" netutils "k8s.io/utils/net" "k8s.io/klog/v2" @@ -182,7 +184,7 @@ func MapIPsByIPFamily(ipStrings []string) map[v1.IPFamily][]string { ipFamilyMap := map[v1.IPFamily][]string{} for _, ip := range ipStrings { // Handle only the valid IPs - if ipFamily := getIPFamilyFromIP(ip); ipFamily != "" { + if ipFamily := GetIPFamilyFromIP(ip); ipFamily != v1.IPFamilyUnknown { ipFamilyMap[ipFamily] = append(ipFamilyMap[ipFamily], ip) } else { // this function is called in multiple places. All of which @@ -204,7 +206,7 @@ func MapCIDRsByIPFamily(cidrStrings []string) map[v1.IPFamily][]string { ipFamilyMap := map[v1.IPFamily][]string{} for _, cidr := range cidrStrings { // Handle only the valid CIDRs - if ipFamily := getIPFamilyFromCIDR(cidr); ipFamily != "" { + if ipFamily := getIPFamilyFromCIDR(cidr); ipFamily != v1.IPFamilyUnknown { ipFamilyMap[ipFamily] = append(ipFamilyMap[ipFamily], cidr) } else { klog.ErrorS(nil, "Skipping invalid CIDR", "cidr", cidr) @@ -213,29 +215,26 @@ func MapCIDRsByIPFamily(cidrStrings []string) map[v1.IPFamily][]string { return ipFamilyMap } -// Returns the IP family of ipStr, or "" if ipStr can't be parsed as an IP -func getIPFamilyFromIP(ipStr string) v1.IPFamily { - netIP := netutils.ParseIPSloppy(ipStr) - if netIP == nil { - return "" - } - - if netutils.IsIPv6(netIP) { - return v1.IPv6Protocol - } - return v1.IPv4Protocol +// GetIPFamilyFromIP Returns the IP family of ipStr, or IPFamilyUnknown if ipStr can't be parsed as an IP +func GetIPFamilyFromIP(ipStr string) v1.IPFamily { + return convertToV1IPFamily(netutils.IPFamilyOfString(ipStr)) } -// Returns the IP family of cidrStr, or "" if cidrStr can't be parsed as a CIDR +// Returns the IP family of cidrStr, or IPFamilyUnknown if cidrStr can't be parsed as a CIDR func getIPFamilyFromCIDR(cidrStr string) v1.IPFamily { - _, netCIDR, err := netutils.ParseCIDRSloppy(cidrStr) - if err != nil { - return "" - } - if netutils.IsIPv6CIDR(netCIDR) { + return convertToV1IPFamily(netutils.IPFamilyOfCIDRString(cidrStr)) +} + +// Convert netutils.IPFamily to v1.IPFamily +func convertToV1IPFamily(ipFamily netutils.IPFamily) v1.IPFamily { + switch ipFamily { + case netutils.IPv4: + return v1.IPv4Protocol + case netutils.IPv6: return v1.IPv6Protocol } - return v1.IPv4Protocol + + return v1.IPFamilyUnknown } // OtherIPFamily returns the other ip family @@ -331,3 +330,13 @@ func RevertPorts(replacementPortsMap, originalPortsMap map[netutils.LocalPort]ne } } } + +func IsVIPMode(ing v1.LoadBalancerIngress) bool { + if !utilfeature.DefaultFeatureGate.Enabled(features.LoadBalancerIPMode) { + return true // backwards compat + } + if ing.IPMode == nil { + return true + } + return *ing.IPMode == v1.LoadBalancerIPModeVIP +} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/scheme/scheme.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/scheme/scheme.go index 9121eff657c1..366f776bf2d5 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/scheme/scheme.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/scheme/scheme.go @@ -22,7 +22,6 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" config "k8s.io/kubernetes/pkg/scheduler/apis/config" configv1 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1" - configv1beta3 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3" ) var ( @@ -40,10 +39,8 @@ func init() { // AddToScheme builds the kubescheduler scheme using all known versions of the kubescheduler api. func AddToScheme(scheme *runtime.Scheme) { utilruntime.Must(config.AddToScheme(scheme)) - utilruntime.Must(configv1beta3.AddToScheme(scheme)) utilruntime.Must(configv1.AddToScheme(scheme)) utilruntime.Must(scheme.SetVersionPriority( configv1.SchemeGroupVersion, - configv1beta3.SchemeGroupVersion, )) } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go index a87a8d1d6b46..142ecb08ef49 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/types.go @@ -26,10 +26,6 @@ import ( ) const ( - // SchedulerPolicyConfigMapKey defines the key of the element in the - // scheduler's policy ConfigMap that contains scheduler's policy config. - SchedulerPolicyConfigMapKey = "policy.cfg" - // DefaultKubeSchedulerPort is the default port for the scheduler status server. // May be overridden by a flag at startup. DefaultKubeSchedulerPort = 10259 diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/default_plugins.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/default_plugins.go index a7d5a602619d..509cb57a2741 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/default_plugins.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/default_plugins.go @@ -23,7 +23,7 @@ import ( v1 "k8s.io/kube-scheduler/config/v1" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) // getDefaultPlugins returns the default set of plugins. @@ -34,10 +34,10 @@ func getDefaultPlugins() *v1.Plugins { {Name: names.PrioritySort}, {Name: names.NodeUnschedulable}, {Name: names.NodeName}, - {Name: names.TaintToleration, Weight: pointer.Int32(3)}, - {Name: names.NodeAffinity, Weight: pointer.Int32(2)}, + {Name: names.TaintToleration, Weight: ptr.To[int32](3)}, + {Name: names.NodeAffinity, Weight: ptr.To[int32](2)}, {Name: names.NodePorts}, - {Name: names.NodeResourcesFit, Weight: pointer.Int32(1)}, + {Name: names.NodeResourcesFit, Weight: ptr.To[int32](1)}, {Name: names.VolumeRestrictions}, {Name: names.EBSLimits}, {Name: names.GCEPDLimits}, @@ -45,11 +45,11 @@ func getDefaultPlugins() *v1.Plugins { {Name: names.AzureDiskLimits}, {Name: names.VolumeBinding}, {Name: names.VolumeZone}, - {Name: names.PodTopologySpread, Weight: pointer.Int32(2)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32(2)}, + {Name: names.PodTopologySpread, Weight: ptr.To[int32](2)}, + {Name: names.InterPodAffinity, Weight: ptr.To[int32](2)}, {Name: names.DefaultPreemption}, - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32(1)}, + {Name: names.NodeResourcesBalancedAllocation, Weight: ptr.To[int32](1)}, + {Name: names.ImageLocality, Weight: ptr.To[int32](1)}, {Name: names.DefaultBinder}, }, }, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/defaults.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/defaults.go index 6746f23a9620..c3775adcfe2c 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/defaults.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1/defaults.go @@ -26,7 +26,7 @@ import ( configv1 "k8s.io/kube-scheduler/config/v1" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) var defaultResourceSpec = []configv1.ResourceSpec{ @@ -105,7 +105,7 @@ func setDefaults_KubeSchedulerProfile(logger klog.Logger, prof *configv1.KubeSch func SetDefaults_KubeSchedulerConfiguration(obj *configv1.KubeSchedulerConfiguration) { logger := klog.TODO() // called by generated code that doesn't pass a logger. See #115724 if obj.Parallelism == nil { - obj.Parallelism = pointer.Int32(16) + obj.Parallelism = ptr.To[int32](16) } if len(obj.Profiles) == 0 { @@ -114,7 +114,7 @@ func SetDefaults_KubeSchedulerConfiguration(obj *configv1.KubeSchedulerConfigura // Only apply a default scheduler name when there is a single profile. // Validation will ensure that every profile has a non-empty unique name. if len(obj.Profiles) == 1 && obj.Profiles[0].SchedulerName == nil { - obj.Profiles[0].SchedulerName = pointer.String(v1.DefaultSchedulerName) + obj.Profiles[0].SchedulerName = ptr.To(v1.DefaultSchedulerName) } // Add the default set of plugins and apply the configuration. @@ -124,7 +124,7 @@ func SetDefaults_KubeSchedulerConfiguration(obj *configv1.KubeSchedulerConfigura } if obj.PercentageOfNodesToScore == nil { - obj.PercentageOfNodesToScore = pointer.Int32(config.DefaultPercentageOfNodesToScore) + obj.PercentageOfNodesToScore = ptr.To[int32](config.DefaultPercentageOfNodesToScore) } if len(obj.LeaderElection.ResourceLock) == 0 { @@ -155,42 +155,42 @@ func SetDefaults_KubeSchedulerConfiguration(obj *configv1.KubeSchedulerConfigura componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) if obj.PodInitialBackoffSeconds == nil { - obj.PodInitialBackoffSeconds = pointer.Int64(1) + obj.PodInitialBackoffSeconds = ptr.To[int64](1) } if obj.PodMaxBackoffSeconds == nil { - obj.PodMaxBackoffSeconds = pointer.Int64(10) + obj.PodMaxBackoffSeconds = ptr.To[int64](10) } // Enable profiling by default in the scheduler if obj.EnableProfiling == nil { - obj.EnableProfiling = pointer.Bool(true) + obj.EnableProfiling = ptr.To(true) } // Enable contention profiling by default if profiling is enabled if *obj.EnableProfiling && obj.EnableContentionProfiling == nil { - obj.EnableContentionProfiling = pointer.Bool(true) + obj.EnableContentionProfiling = ptr.To(true) } } func SetDefaults_DefaultPreemptionArgs(obj *configv1.DefaultPreemptionArgs) { if obj.MinCandidateNodesPercentage == nil { - obj.MinCandidateNodesPercentage = pointer.Int32(10) + obj.MinCandidateNodesPercentage = ptr.To[int32](10) } if obj.MinCandidateNodesAbsolute == nil { - obj.MinCandidateNodesAbsolute = pointer.Int32(100) + obj.MinCandidateNodesAbsolute = ptr.To[int32](100) } } func SetDefaults_InterPodAffinityArgs(obj *configv1.InterPodAffinityArgs) { if obj.HardPodAffinityWeight == nil { - obj.HardPodAffinityWeight = pointer.Int32(1) + obj.HardPodAffinityWeight = ptr.To[int32](1) } } func SetDefaults_VolumeBindingArgs(obj *configv1.VolumeBindingArgs) { if obj.BindTimeoutSeconds == nil { - obj.BindTimeoutSeconds = pointer.Int64(600) + obj.BindTimeoutSeconds = ptr.To[int64](600) } if len(obj.Shape) == 0 && feature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) { obj.Shape = []configv1.UtilizationShapePoint{ diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/conversion.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/conversion.go deleted file mode 100644 index bbb8ff4f264b..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/conversion.go +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - "fmt" - "sync" - - "k8s.io/apimachinery/pkg/conversion" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kube-scheduler/config/v1beta3" - "k8s.io/kubernetes/pkg/scheduler/apis/config" -) - -var ( - // pluginArgConversionScheme is a scheme with internal and v1beta3 registered, - // used for defaulting/converting typed PluginConfig Args. - // Access via getPluginArgConversionScheme() - pluginArgConversionScheme *runtime.Scheme - initPluginArgConversionScheme sync.Once -) - -func GetPluginArgConversionScheme() *runtime.Scheme { - initPluginArgConversionScheme.Do(func() { - // set up the scheme used for plugin arg conversion - pluginArgConversionScheme = runtime.NewScheme() - utilruntime.Must(AddToScheme(pluginArgConversionScheme)) - utilruntime.Must(config.AddToScheme(pluginArgConversionScheme)) - }) - return pluginArgConversionScheme -} - -func Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := autoConvert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in, out, s); err != nil { - return err - } - return convertToInternalPluginConfigArgs(out) -} - -// convertToInternalPluginConfigArgs converts PluginConfig#Args into internal -// types using a scheme, after applying defaults. -func convertToInternalPluginConfigArgs(out *config.KubeSchedulerConfiguration) error { - scheme := GetPluginArgConversionScheme() - for i := range out.Profiles { - prof := &out.Profiles[i] - for j := range prof.PluginConfig { - args := prof.PluginConfig[j].Args - if args == nil { - continue - } - if _, isUnknown := args.(*runtime.Unknown); isUnknown { - continue - } - internalArgs, err := scheme.ConvertToVersion(args, config.SchemeGroupVersion) - if err != nil { - return fmt.Errorf("converting .Profiles[%d].PluginConfig[%d].Args into internal type: %w", i, j, err) - } - prof.PluginConfig[j].Args = internalArgs - } - } - return nil -} - -func Convert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta3.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := autoConvert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in, out, s); err != nil { - return err - } - return convertToExternalPluginConfigArgs(out) -} - -// convertToExternalPluginConfigArgs converts PluginConfig#Args into -// external (versioned) types using a scheme. -func convertToExternalPluginConfigArgs(out *v1beta3.KubeSchedulerConfiguration) error { - scheme := GetPluginArgConversionScheme() - for i := range out.Profiles { - for j := range out.Profiles[i].PluginConfig { - args := out.Profiles[i].PluginConfig[j].Args - if args.Object == nil { - continue - } - if _, isUnknown := args.Object.(*runtime.Unknown); isUnknown { - continue - } - externalArgs, err := scheme.ConvertToVersion(args.Object, SchemeGroupVersion) - if err != nil { - return err - } - out.Profiles[i].PluginConfig[j].Args.Object = externalArgs - } - } - return nil -} - -// Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile called auto coversion by -// ignoring per profile PercentageOfNodesToScore. -func Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error { - return autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in, out, s) -} - -// Convert_config_Plugins_To_v1beta3_Plugins is an autogenerated conversion function. -func Convert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error { - return autoConvert_config_Plugins_To_v1beta3_Plugins(in, out, s) -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/default_plugins.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/default_plugins.go deleted file mode 100644 index 41d1a2aa8e3a..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/default_plugins.go +++ /dev/null @@ -1,144 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - "k8s.io/apimachinery/pkg/util/sets" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/klog/v2" - "k8s.io/kube-scheduler/config/v1beta3" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" - "k8s.io/utils/pointer" -) - -// getDefaultPlugins returns the default set of plugins. -func getDefaultPlugins() *v1beta3.Plugins { - plugins := &v1beta3.Plugins{ - MultiPoint: v1beta3.PluginSet{ - Enabled: []v1beta3.Plugin{ - {Name: names.PrioritySort}, - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration, Weight: pointer.Int32(3)}, - {Name: names.NodeAffinity, Weight: pointer.Int32(2)}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit, Weight: pointer.Int32(1)}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread, Weight: pointer.Int32(2)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32(2)}, - {Name: names.DefaultPreemption}, - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32(1)}, - {Name: names.DefaultBinder}, - }, - }, - } - applyFeatureGates(plugins) - - return plugins -} - -func applyFeatureGates(config *v1beta3.Plugins) { - if utilfeature.DefaultFeatureGate.Enabled(features.PodSchedulingReadiness) { - config.MultiPoint.Enabled = append(config.MultiPoint.Enabled, v1beta3.Plugin{Name: names.SchedulingGates}) - } -} - -// mergePlugins merges the custom set into the given default one, handling disabled sets. -func mergePlugins(defaultPlugins, customPlugins *v1beta3.Plugins) *v1beta3.Plugins { - if customPlugins == nil { - return defaultPlugins - } - - defaultPlugins.MultiPoint = mergePluginSet(defaultPlugins.MultiPoint, customPlugins.MultiPoint) - defaultPlugins.QueueSort = mergePluginSet(defaultPlugins.QueueSort, customPlugins.QueueSort) - defaultPlugins.PreFilter = mergePluginSet(defaultPlugins.PreFilter, customPlugins.PreFilter) - defaultPlugins.Filter = mergePluginSet(defaultPlugins.Filter, customPlugins.Filter) - defaultPlugins.PostFilter = mergePluginSet(defaultPlugins.PostFilter, customPlugins.PostFilter) - defaultPlugins.PreScore = mergePluginSet(defaultPlugins.PreScore, customPlugins.PreScore) - defaultPlugins.Score = mergePluginSet(defaultPlugins.Score, customPlugins.Score) - defaultPlugins.Reserve = mergePluginSet(defaultPlugins.Reserve, customPlugins.Reserve) - defaultPlugins.Permit = mergePluginSet(defaultPlugins.Permit, customPlugins.Permit) - defaultPlugins.PreBind = mergePluginSet(defaultPlugins.PreBind, customPlugins.PreBind) - defaultPlugins.Bind = mergePluginSet(defaultPlugins.Bind, customPlugins.Bind) - defaultPlugins.PostBind = mergePluginSet(defaultPlugins.PostBind, customPlugins.PostBind) - return defaultPlugins -} - -type pluginIndex struct { - index int - plugin v1beta3.Plugin -} - -func mergePluginSet(defaultPluginSet, customPluginSet v1beta3.PluginSet) v1beta3.PluginSet { - disabledPlugins := sets.New[string]() - enabledCustomPlugins := make(map[string]pluginIndex) - // replacedPluginIndex is a set of index of plugins, which have replaced the default plugins. - replacedPluginIndex := sets.NewInt() - var disabled []v1beta3.Plugin - for _, disabledPlugin := range customPluginSet.Disabled { - // if the user is manually disabling any (or all, with "*") default plugins for an extension point, - // we need to track that so that the MultiPoint extension logic in the framework can know to skip - // inserting unspecified default plugins to this point. - disabled = append(disabled, v1beta3.Plugin{Name: disabledPlugin.Name}) - disabledPlugins.Insert(disabledPlugin.Name) - } - - // With MultiPoint, we may now have some disabledPlugins in the default registry - // For example, we enable PluginX with Filter+Score through MultiPoint but disable its Score plugin by default. - for _, disabledPlugin := range defaultPluginSet.Disabled { - disabled = append(disabled, v1beta3.Plugin{Name: disabledPlugin.Name}) - disabledPlugins.Insert(disabledPlugin.Name) - } - - for index, enabledPlugin := range customPluginSet.Enabled { - enabledCustomPlugins[enabledPlugin.Name] = pluginIndex{index, enabledPlugin} - } - var enabledPlugins []v1beta3.Plugin - if !disabledPlugins.Has("*") { - for _, defaultEnabledPlugin := range defaultPluginSet.Enabled { - if disabledPlugins.Has(defaultEnabledPlugin.Name) { - continue - } - // The default plugin is explicitly re-configured, update the default plugin accordingly. - if customPlugin, ok := enabledCustomPlugins[defaultEnabledPlugin.Name]; ok { - klog.InfoS("Default plugin is explicitly re-configured; overriding", "plugin", defaultEnabledPlugin.Name) - // Update the default plugin in place to preserve order. - defaultEnabledPlugin = customPlugin.plugin - replacedPluginIndex.Insert(customPlugin.index) - } - enabledPlugins = append(enabledPlugins, defaultEnabledPlugin) - } - } - - // Append all the custom plugins which haven't replaced any default plugins. - // Note: duplicated custom plugins will still be appended here. - // If so, the instantiation of scheduler framework will detect it and abort. - for index, plugin := range customPluginSet.Enabled { - if !replacedPluginIndex.Has(index) { - enabledPlugins = append(enabledPlugins, plugin) - } - } - return v1beta3.PluginSet{Enabled: enabledPlugins, Disabled: disabled} -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/defaults.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/defaults.go deleted file mode 100644 index 374bcb5474e2..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/defaults.go +++ /dev/null @@ -1,242 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/util/feature" - componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" - "k8s.io/kube-scheduler/config/v1beta3" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/utils/pointer" -) - -var defaultResourceSpec = []v1beta3.ResourceSpec{ - {Name: string(v1.ResourceCPU), Weight: 1}, - {Name: string(v1.ResourceMemory), Weight: 1}, -} - -func addDefaultingFuncs(scheme *runtime.Scheme) error { - return RegisterDefaults(scheme) -} - -func pluginsNames(p *v1beta3.Plugins) []string { - if p == nil { - return nil - } - extensions := []v1beta3.PluginSet{ - p.MultiPoint, - p.PreFilter, - p.Filter, - p.PostFilter, - p.Reserve, - p.PreScore, - p.Score, - p.PreBind, - p.Bind, - p.PostBind, - p.Permit, - p.QueueSort, - } - n := sets.New[string]() - for _, e := range extensions { - for _, pg := range e.Enabled { - n.Insert(pg.Name) - } - } - return sets.List(n) -} - -func setDefaults_KubeSchedulerProfile(prof *v1beta3.KubeSchedulerProfile) { - // Set default plugins. - prof.Plugins = mergePlugins(getDefaultPlugins(), prof.Plugins) - // Set default plugin configs. - scheme := GetPluginArgConversionScheme() - existingConfigs := sets.New[string]() - for j := range prof.PluginConfig { - existingConfigs.Insert(prof.PluginConfig[j].Name) - args := prof.PluginConfig[j].Args.Object - if _, isUnknown := args.(*runtime.Unknown); isUnknown { - continue - } - scheme.Default(args) - } - - // Append default configs for plugins that didn't have one explicitly set. - for _, name := range pluginsNames(prof.Plugins) { - if existingConfigs.Has(name) { - continue - } - gvk := v1beta3.SchemeGroupVersion.WithKind(name + "Args") - args, err := scheme.New(gvk) - if err != nil { - // This plugin is out-of-tree or doesn't require configuration. - continue - } - scheme.Default(args) - args.GetObjectKind().SetGroupVersionKind(gvk) - prof.PluginConfig = append(prof.PluginConfig, v1beta3.PluginConfig{ - Name: name, - Args: runtime.RawExtension{Object: args}, - }) - } -} - -// SetDefaults_KubeSchedulerConfiguration sets additional defaults -func SetDefaults_KubeSchedulerConfiguration(obj *v1beta3.KubeSchedulerConfiguration) { - if obj.Parallelism == nil { - obj.Parallelism = pointer.Int32(16) - } - - if len(obj.Profiles) == 0 { - obj.Profiles = append(obj.Profiles, v1beta3.KubeSchedulerProfile{}) - } - // Only apply a default scheduler name when there is a single profile. - // Validation will ensure that every profile has a non-empty unique name. - if len(obj.Profiles) == 1 && obj.Profiles[0].SchedulerName == nil { - obj.Profiles[0].SchedulerName = pointer.String(v1.DefaultSchedulerName) - } - - // Add the default set of plugins and apply the configuration. - for i := range obj.Profiles { - prof := &obj.Profiles[i] - setDefaults_KubeSchedulerProfile(prof) - } - - if obj.PercentageOfNodesToScore == nil { - percentageOfNodesToScore := int32(config.DefaultPercentageOfNodesToScore) - obj.PercentageOfNodesToScore = &percentageOfNodesToScore - } - - if len(obj.LeaderElection.ResourceLock) == 0 { - // Use lease-based leader election to reduce cost. - // We migrated for EndpointsLease lock in 1.17 and starting in 1.20 we - // migrated to Lease lock. - obj.LeaderElection.ResourceLock = "leases" - } - if len(obj.LeaderElection.ResourceNamespace) == 0 { - obj.LeaderElection.ResourceNamespace = v1beta3.SchedulerDefaultLockObjectNamespace - } - if len(obj.LeaderElection.ResourceName) == 0 { - obj.LeaderElection.ResourceName = v1beta3.SchedulerDefaultLockObjectName - } - - if len(obj.ClientConnection.ContentType) == 0 { - obj.ClientConnection.ContentType = "application/vnd.kubernetes.protobuf" - } - // Scheduler has an opinion about QPS/Burst, setting specific defaults for itself, instead of generic settings. - if obj.ClientConnection.QPS == 0.0 { - obj.ClientConnection.QPS = 50.0 - } - if obj.ClientConnection.Burst == 0 { - obj.ClientConnection.Burst = 100 - } - - // Use the default LeaderElectionConfiguration options - componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) - - if obj.PodInitialBackoffSeconds == nil { - obj.PodInitialBackoffSeconds = pointer.Int64(1) - } - - if obj.PodMaxBackoffSeconds == nil { - obj.PodMaxBackoffSeconds = pointer.Int64(10) - } - - // Enable profiling by default in the scheduler - if obj.EnableProfiling == nil { - obj.EnableProfiling = pointer.Bool(true) - } - - // Enable contention profiling by default if profiling is enabled - if *obj.EnableProfiling && obj.EnableContentionProfiling == nil { - obj.EnableContentionProfiling = pointer.Bool(true) - } -} - -func SetDefaults_DefaultPreemptionArgs(obj *v1beta3.DefaultPreemptionArgs) { - if obj.MinCandidateNodesPercentage == nil { - obj.MinCandidateNodesPercentage = pointer.Int32(10) - } - if obj.MinCandidateNodesAbsolute == nil { - obj.MinCandidateNodesAbsolute = pointer.Int32(100) - } -} - -func SetDefaults_InterPodAffinityArgs(obj *v1beta3.InterPodAffinityArgs) { - if obj.HardPodAffinityWeight == nil { - obj.HardPodAffinityWeight = pointer.Int32(1) - } -} - -func SetDefaults_VolumeBindingArgs(obj *v1beta3.VolumeBindingArgs) { - if obj.BindTimeoutSeconds == nil { - obj.BindTimeoutSeconds = pointer.Int64(600) - } - if len(obj.Shape) == 0 && feature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) { - obj.Shape = []v1beta3.UtilizationShapePoint{ - { - Utilization: 0, - Score: 0, - }, - { - Utilization: 100, - Score: int32(config.MaxCustomPriorityScore), - }, - } - } -} - -func SetDefaults_NodeResourcesBalancedAllocationArgs(obj *v1beta3.NodeResourcesBalancedAllocationArgs) { - if len(obj.Resources) == 0 { - obj.Resources = defaultResourceSpec - return - } - // If the weight is not set or it is explicitly set to 0, then apply the default weight(1) instead. - for i := range obj.Resources { - if obj.Resources[i].Weight == 0 { - obj.Resources[i].Weight = 1 - } - } -} - -func SetDefaults_PodTopologySpreadArgs(obj *v1beta3.PodTopologySpreadArgs) { - if obj.DefaultingType == "" { - obj.DefaultingType = v1beta3.SystemDefaulting - } -} - -func SetDefaults_NodeResourcesFitArgs(obj *v1beta3.NodeResourcesFitArgs) { - if obj.ScoringStrategy == nil { - obj.ScoringStrategy = &v1beta3.ScoringStrategy{ - Type: v1beta3.ScoringStrategyType(config.LeastAllocated), - Resources: defaultResourceSpec, - } - } - if len(obj.ScoringStrategy.Resources) == 0 { - // If no resources specified, use the default set. - obj.ScoringStrategy.Resources = append(obj.ScoringStrategy.Resources, defaultResourceSpec...) - } - for i := range obj.ScoringStrategy.Resources { - if obj.ScoringStrategy.Resources[i].Weight == 0 { - obj.ScoringStrategy.Resources[i].Weight = 1 - } - } -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/doc.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/doc.go deleted file mode 100644 index e9976588f134..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/doc.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:conversion-gen=k8s.io/kubernetes/pkg/scheduler/apis/config -// +k8s:conversion-gen-external-types=k8s.io/kube-scheduler/config/v1beta3 -// +k8s:defaulter-gen=TypeMeta -// +k8s:defaulter-gen-input=k8s.io/kube-scheduler/config/v1beta3 -// +groupName=kubescheduler.config.k8s.io - -package v1beta3 // import "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3" diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/register.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/register.go deleted file mode 100644 index 2af0952e6f70..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/register.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta3 - -import ( - "k8s.io/kube-scheduler/config/v1beta3" -) - -// GroupName is the group name used in this package -const GroupName = v1beta3.GroupName - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = v1beta3.SchemeGroupVersion - -var ( - // localSchemeBuilder extends the SchemeBuilder instance with the external types. In this package, - // defaulting and conversion init funcs are registered as well. - localSchemeBuilder = &v1beta3.SchemeBuilder - // AddToScheme is a global function that registers this API group & version to a scheme - AddToScheme = localSchemeBuilder.AddToScheme -) - -func init() { - // We only register manually written functions here. The registration of the - // generated functions takes place in the generated files. The separation - // makes the code compile even when the generated files are missing. - localSchemeBuilder.Register(addDefaultingFuncs) -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go deleted file mode 100644 index a12860fe77b3..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.conversion.go +++ /dev/null @@ -1,936 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by conversion-gen. DO NOT EDIT. - -package v1beta3 - -import ( - unsafe "unsafe" - - corev1 "k8s.io/api/core/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - conversion "k8s.io/apimachinery/pkg/conversion" - runtime "k8s.io/apimachinery/pkg/runtime" - v1alpha1 "k8s.io/component-base/config/v1alpha1" - v1beta3 "k8s.io/kube-scheduler/config/v1beta3" - config "k8s.io/kubernetes/pkg/scheduler/apis/config" -) - -func init() { - localSchemeBuilder.Register(RegisterConversions) -} - -// RegisterConversions adds conversion functions to the given scheme. -// Public to allow building arbitrary schemes. -func RegisterConversions(s *runtime.Scheme) error { - if err := s.AddGeneratedConversionFunc((*v1beta3.DefaultPreemptionArgs)(nil), (*config.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(a.(*v1beta3.DefaultPreemptionArgs), b.(*config.DefaultPreemptionArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.DefaultPreemptionArgs)(nil), (*v1beta3.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(a.(*config.DefaultPreemptionArgs), b.(*v1beta3.DefaultPreemptionArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.Extender)(nil), (*config.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_Extender_To_config_Extender(a.(*v1beta3.Extender), b.(*config.Extender), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.Extender)(nil), (*v1beta3.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Extender_To_v1beta3_Extender(a.(*config.Extender), b.(*v1beta3.Extender), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.ExtenderManagedResource)(nil), (*config.ExtenderManagedResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_ExtenderManagedResource_To_config_ExtenderManagedResource(a.(*v1beta3.ExtenderManagedResource), b.(*config.ExtenderManagedResource), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ExtenderManagedResource)(nil), (*v1beta3.ExtenderManagedResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ExtenderManagedResource_To_v1beta3_ExtenderManagedResource(a.(*config.ExtenderManagedResource), b.(*v1beta3.ExtenderManagedResource), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.ExtenderTLSConfig)(nil), (*config.ExtenderTLSConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_ExtenderTLSConfig_To_config_ExtenderTLSConfig(a.(*v1beta3.ExtenderTLSConfig), b.(*config.ExtenderTLSConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ExtenderTLSConfig)(nil), (*v1beta3.ExtenderTLSConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ExtenderTLSConfig_To_v1beta3_ExtenderTLSConfig(a.(*config.ExtenderTLSConfig), b.(*v1beta3.ExtenderTLSConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.InterPodAffinityArgs)(nil), (*config.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(a.(*v1beta3.InterPodAffinityArgs), b.(*config.InterPodAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.InterPodAffinityArgs)(nil), (*v1beta3.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(a.(*config.InterPodAffinityArgs), b.(*v1beta3.InterPodAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.KubeSchedulerProfile)(nil), (*config.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(a.(*v1beta3.KubeSchedulerProfile), b.(*config.KubeSchedulerProfile), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.NodeAffinityArgs)(nil), (*config.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(a.(*v1beta3.NodeAffinityArgs), b.(*config.NodeAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeAffinityArgs)(nil), (*v1beta3.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(a.(*config.NodeAffinityArgs), b.(*v1beta3.NodeAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.NodeResourcesBalancedAllocationArgs)(nil), (*config.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(a.(*v1beta3.NodeResourcesBalancedAllocationArgs), b.(*config.NodeResourcesBalancedAllocationArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesBalancedAllocationArgs)(nil), (*v1beta3.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(a.(*config.NodeResourcesBalancedAllocationArgs), b.(*v1beta3.NodeResourcesBalancedAllocationArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.NodeResourcesFitArgs)(nil), (*config.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(a.(*v1beta3.NodeResourcesFitArgs), b.(*config.NodeResourcesFitArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesFitArgs)(nil), (*v1beta3.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(a.(*config.NodeResourcesFitArgs), b.(*v1beta3.NodeResourcesFitArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.Plugin)(nil), (*config.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_Plugin_To_config_Plugin(a.(*v1beta3.Plugin), b.(*config.Plugin), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.Plugin)(nil), (*v1beta3.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Plugin_To_v1beta3_Plugin(a.(*config.Plugin), b.(*v1beta3.Plugin), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.PluginConfig)(nil), (*config.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_PluginConfig_To_config_PluginConfig(a.(*v1beta3.PluginConfig), b.(*config.PluginConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PluginConfig)(nil), (*v1beta3.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PluginConfig_To_v1beta3_PluginConfig(a.(*config.PluginConfig), b.(*v1beta3.PluginConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.PluginSet)(nil), (*config.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_PluginSet_To_config_PluginSet(a.(*v1beta3.PluginSet), b.(*config.PluginSet), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PluginSet)(nil), (*v1beta3.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PluginSet_To_v1beta3_PluginSet(a.(*config.PluginSet), b.(*v1beta3.PluginSet), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.Plugins)(nil), (*config.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_Plugins_To_config_Plugins(a.(*v1beta3.Plugins), b.(*config.Plugins), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta3.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PodTopologySpreadArgs)(nil), (*v1beta3.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(a.(*config.PodTopologySpreadArgs), b.(*v1beta3.PodTopologySpreadArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.RequestedToCapacityRatioParam)(nil), (*config.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(a.(*v1beta3.RequestedToCapacityRatioParam), b.(*config.RequestedToCapacityRatioParam), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.RequestedToCapacityRatioParam)(nil), (*v1beta3.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(a.(*config.RequestedToCapacityRatioParam), b.(*v1beta3.RequestedToCapacityRatioParam), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.ResourceSpec)(nil), (*config.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_ResourceSpec_To_config_ResourceSpec(a.(*v1beta3.ResourceSpec), b.(*config.ResourceSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ResourceSpec)(nil), (*v1beta3.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ResourceSpec_To_v1beta3_ResourceSpec(a.(*config.ResourceSpec), b.(*v1beta3.ResourceSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.ScoringStrategy)(nil), (*config.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(a.(*v1beta3.ScoringStrategy), b.(*config.ScoringStrategy), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ScoringStrategy)(nil), (*v1beta3.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(a.(*config.ScoringStrategy), b.(*v1beta3.ScoringStrategy), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.UtilizationShapePoint)(nil), (*config.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(a.(*v1beta3.UtilizationShapePoint), b.(*config.UtilizationShapePoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.UtilizationShapePoint)(nil), (*v1beta3.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(a.(*config.UtilizationShapePoint), b.(*v1beta3.UtilizationShapePoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta3.VolumeBindingArgs)(nil), (*config.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(a.(*v1beta3.VolumeBindingArgs), b.(*config.VolumeBindingArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.VolumeBindingArgs)(nil), (*v1beta3.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(a.(*config.VolumeBindingArgs), b.(*v1beta3.VolumeBindingArgs), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.KubeSchedulerConfiguration)(nil), (*v1beta3.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(a.(*config.KubeSchedulerConfiguration), b.(*v1beta3.KubeSchedulerConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.KubeSchedulerProfile)(nil), (*v1beta3.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(a.(*config.KubeSchedulerProfile), b.(*v1beta3.KubeSchedulerProfile), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.Plugins)(nil), (*v1beta3.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Plugins_To_v1beta3_Plugins(a.(*config.Plugins), b.(*v1beta3.Plugins), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*v1beta3.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta3.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope) - }); err != nil { - return err - } - return nil -} - -func autoConvert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs is an autogenerated conversion function. -func Convert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error { - return autoConvert_v1beta3_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in, out, s) -} - -func autoConvert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta3.DefaultPreemptionArgs, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil { - return err - } - if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil { - return err - } - return nil -} - -// Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs is an autogenerated conversion function. -func Convert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta3.DefaultPreemptionArgs, s conversion.Scope) error { - return autoConvert_config_DefaultPreemptionArgs_To_v1beta3_DefaultPreemptionArgs(in, out, s) -} - -func autoConvert_v1beta3_Extender_To_config_Extender(in *v1beta3.Extender, out *config.Extender, s conversion.Scope) error { - out.URLPrefix = in.URLPrefix - out.FilterVerb = in.FilterVerb - out.PreemptVerb = in.PreemptVerb - out.PrioritizeVerb = in.PrioritizeVerb - out.Weight = in.Weight - out.BindVerb = in.BindVerb - out.EnableHTTPS = in.EnableHTTPS - out.TLSConfig = (*config.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig)) - out.HTTPTimeout = in.HTTPTimeout - out.NodeCacheCapable = in.NodeCacheCapable - out.ManagedResources = *(*[]config.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources)) - out.Ignorable = in.Ignorable - return nil -} - -// Convert_v1beta3_Extender_To_config_Extender is an autogenerated conversion function. -func Convert_v1beta3_Extender_To_config_Extender(in *v1beta3.Extender, out *config.Extender, s conversion.Scope) error { - return autoConvert_v1beta3_Extender_To_config_Extender(in, out, s) -} - -func autoConvert_config_Extender_To_v1beta3_Extender(in *config.Extender, out *v1beta3.Extender, s conversion.Scope) error { - out.URLPrefix = in.URLPrefix - out.FilterVerb = in.FilterVerb - out.PreemptVerb = in.PreemptVerb - out.PrioritizeVerb = in.PrioritizeVerb - out.Weight = in.Weight - out.BindVerb = in.BindVerb - out.EnableHTTPS = in.EnableHTTPS - out.TLSConfig = (*v1beta3.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig)) - out.HTTPTimeout = in.HTTPTimeout - out.NodeCacheCapable = in.NodeCacheCapable - out.ManagedResources = *(*[]v1beta3.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources)) - out.Ignorable = in.Ignorable - return nil -} - -// Convert_config_Extender_To_v1beta3_Extender is an autogenerated conversion function. -func Convert_config_Extender_To_v1beta3_Extender(in *config.Extender, out *v1beta3.Extender, s conversion.Scope) error { - return autoConvert_config_Extender_To_v1beta3_Extender(in, out, s) -} - -func autoConvert_v1beta3_ExtenderManagedResource_To_config_ExtenderManagedResource(in *v1beta3.ExtenderManagedResource, out *config.ExtenderManagedResource, s conversion.Scope) error { - out.Name = in.Name - out.IgnoredByScheduler = in.IgnoredByScheduler - return nil -} - -// Convert_v1beta3_ExtenderManagedResource_To_config_ExtenderManagedResource is an autogenerated conversion function. -func Convert_v1beta3_ExtenderManagedResource_To_config_ExtenderManagedResource(in *v1beta3.ExtenderManagedResource, out *config.ExtenderManagedResource, s conversion.Scope) error { - return autoConvert_v1beta3_ExtenderManagedResource_To_config_ExtenderManagedResource(in, out, s) -} - -func autoConvert_config_ExtenderManagedResource_To_v1beta3_ExtenderManagedResource(in *config.ExtenderManagedResource, out *v1beta3.ExtenderManagedResource, s conversion.Scope) error { - out.Name = in.Name - out.IgnoredByScheduler = in.IgnoredByScheduler - return nil -} - -// Convert_config_ExtenderManagedResource_To_v1beta3_ExtenderManagedResource is an autogenerated conversion function. -func Convert_config_ExtenderManagedResource_To_v1beta3_ExtenderManagedResource(in *config.ExtenderManagedResource, out *v1beta3.ExtenderManagedResource, s conversion.Scope) error { - return autoConvert_config_ExtenderManagedResource_To_v1beta3_ExtenderManagedResource(in, out, s) -} - -func autoConvert_v1beta3_ExtenderTLSConfig_To_config_ExtenderTLSConfig(in *v1beta3.ExtenderTLSConfig, out *config.ExtenderTLSConfig, s conversion.Scope) error { - out.Insecure = in.Insecure - out.ServerName = in.ServerName - out.CertFile = in.CertFile - out.KeyFile = in.KeyFile - out.CAFile = in.CAFile - out.CertData = *(*[]byte)(unsafe.Pointer(&in.CertData)) - out.KeyData = *(*[]byte)(unsafe.Pointer(&in.KeyData)) - out.CAData = *(*[]byte)(unsafe.Pointer(&in.CAData)) - return nil -} - -// Convert_v1beta3_ExtenderTLSConfig_To_config_ExtenderTLSConfig is an autogenerated conversion function. -func Convert_v1beta3_ExtenderTLSConfig_To_config_ExtenderTLSConfig(in *v1beta3.ExtenderTLSConfig, out *config.ExtenderTLSConfig, s conversion.Scope) error { - return autoConvert_v1beta3_ExtenderTLSConfig_To_config_ExtenderTLSConfig(in, out, s) -} - -func autoConvert_config_ExtenderTLSConfig_To_v1beta3_ExtenderTLSConfig(in *config.ExtenderTLSConfig, out *v1beta3.ExtenderTLSConfig, s conversion.Scope) error { - out.Insecure = in.Insecure - out.ServerName = in.ServerName - out.CertFile = in.CertFile - out.KeyFile = in.KeyFile - out.CAFile = in.CAFile - out.CertData = *(*[]byte)(unsafe.Pointer(&in.CertData)) - out.KeyData = *(*[]byte)(unsafe.Pointer(&in.KeyData)) - out.CAData = *(*[]byte)(unsafe.Pointer(&in.CAData)) - return nil -} - -// Convert_config_ExtenderTLSConfig_To_v1beta3_ExtenderTLSConfig is an autogenerated conversion function. -func Convert_config_ExtenderTLSConfig_To_v1beta3_ExtenderTLSConfig(in *config.ExtenderTLSConfig, out *v1beta3.ExtenderTLSConfig, s conversion.Scope) error { - return autoConvert_config_ExtenderTLSConfig_To_v1beta3_ExtenderTLSConfig(in, out, s) -} - -func autoConvert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil { - return err - } - out.IgnorePreferredTermsOfExistingPods = in.IgnorePreferredTermsOfExistingPods - return nil -} - -// Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs is an autogenerated conversion function. -func Convert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error { - return autoConvert_v1beta3_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in, out, s) -} - -func autoConvert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta3.InterPodAffinityArgs, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil { - return err - } - out.IgnorePreferredTermsOfExistingPods = in.IgnorePreferredTermsOfExistingPods - return nil -} - -// Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs is an autogenerated conversion function. -func Convert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta3.InterPodAffinityArgs, s conversion.Scope) error { - return autoConvert_config_InterPodAffinityArgs_To_v1beta3_InterPodAffinityArgs(in, out, s) -} - -func autoConvert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.Parallelism, &out.Parallelism, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { - return err - } - out.PercentageOfNodesToScore = (*int32)(unsafe.Pointer(in.PercentageOfNodesToScore)) - if err := v1.Convert_Pointer_int64_To_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int64_To_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil { - return err - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]config.KubeSchedulerProfile, len(*in)) - for i := range *in { - if err := Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Profiles = nil - } - out.Extenders = *(*[]config.Extender)(unsafe.Pointer(&in.Extenders)) - return nil -} - -func autoConvert_config_KubeSchedulerConfiguration_To_v1beta3_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta3.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.Parallelism, &out.Parallelism, s); err != nil { - return err - } - if err := v1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - if err := v1alpha1.Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { - return err - } - // WARNING: in.HealthzBindAddress requires manual conversion: does not exist in peer-type - // WARNING: in.MetricsBindAddress requires manual conversion: does not exist in peer-type - if err := v1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { - return err - } - out.PercentageOfNodesToScore = (*int32)(unsafe.Pointer(in.PercentageOfNodesToScore)) - if err := v1.Convert_int64_To_Pointer_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil { - return err - } - if err := v1.Convert_int64_To_Pointer_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil { - return err - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]v1beta3.KubeSchedulerProfile, len(*in)) - for i := range *in { - if err := Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Profiles = nil - } - out.Extenders = *(*[]v1beta3.Extender)(unsafe.Pointer(&in.Extenders)) - // WARNING: in.DelayCacheUntilActive requires manual conversion: does not exist in peer-type - return nil -} - -func autoConvert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta3.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error { - if err := v1.Convert_Pointer_string_To_string(&in.SchedulerName, &out.SchedulerName, s); err != nil { - return err - } - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(config.Plugins) - if err := Convert_v1beta3_Plugins_To_config_Plugins(*in, *out, s); err != nil { - return err - } - } else { - out.Plugins = nil - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]config.PluginConfig, len(*in)) - for i := range *in { - if err := Convert_v1beta3_PluginConfig_To_config_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.PluginConfig = nil - } - return nil -} - -// Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile is an autogenerated conversion function. -func Convert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta3.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error { - return autoConvert_v1beta3_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in, out, s) -} - -func autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error { - if err := v1.Convert_string_To_Pointer_string(&in.SchedulerName, &out.SchedulerName, s); err != nil { - return err - } - // WARNING: in.PercentageOfNodesToScore requires manual conversion: does not exist in peer-type - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(v1beta3.Plugins) - if err := Convert_config_Plugins_To_v1beta3_Plugins(*in, *out, s); err != nil { - return err - } - } else { - out.Plugins = nil - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]v1beta3.PluginConfig, len(*in)) - for i := range *in { - if err := Convert_config_PluginConfig_To_v1beta3_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.PluginConfig = nil - } - return nil -} - -func autoConvert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta3.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error { - out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity)) - return nil -} - -// Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs is an autogenerated conversion function. -func Convert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta3.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error { - return autoConvert_v1beta3_NodeAffinityArgs_To_config_NodeAffinityArgs(in, out, s) -} - -func autoConvert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta3.NodeAffinityArgs, s conversion.Scope) error { - out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity)) - return nil -} - -// Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs is an autogenerated conversion function. -func Convert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta3.NodeAffinityArgs, s conversion.Scope) error { - return autoConvert_config_NodeAffinityArgs_To_v1beta3_NodeAffinityArgs(in, out, s) -} - -func autoConvert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function. -func Convert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - return autoConvert_v1beta3_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta3.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - out.Resources = *(*[]v1beta3.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta3.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta3_NodeResourcesBalancedAllocationArgs(in, out, s) -} - -func autoConvert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error { - out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources)) - out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups)) - out.ScoringStrategy = (*config.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy)) - return nil -} - -// Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs is an autogenerated conversion function. -func Convert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error { - return autoConvert_v1beta3_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta3.NodeResourcesFitArgs, s conversion.Scope) error { - out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources)) - out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups)) - out.ScoringStrategy = (*v1beta3.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy)) - return nil -} - -// Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta3.NodeResourcesFitArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesFitArgs_To_v1beta3_NodeResourcesFitArgs(in, out, s) -} - -func autoConvert_v1beta3_Plugin_To_config_Plugin(in *v1beta3.Plugin, out *config.Plugin, s conversion.Scope) error { - out.Name = in.Name - if err := v1.Convert_Pointer_int32_To_int32(&in.Weight, &out.Weight, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta3_Plugin_To_config_Plugin is an autogenerated conversion function. -func Convert_v1beta3_Plugin_To_config_Plugin(in *v1beta3.Plugin, out *config.Plugin, s conversion.Scope) error { - return autoConvert_v1beta3_Plugin_To_config_Plugin(in, out, s) -} - -func autoConvert_config_Plugin_To_v1beta3_Plugin(in *config.Plugin, out *v1beta3.Plugin, s conversion.Scope) error { - out.Name = in.Name - if err := v1.Convert_int32_To_Pointer_int32(&in.Weight, &out.Weight, s); err != nil { - return err - } - return nil -} - -// Convert_config_Plugin_To_v1beta3_Plugin is an autogenerated conversion function. -func Convert_config_Plugin_To_v1beta3_Plugin(in *config.Plugin, out *v1beta3.Plugin, s conversion.Scope) error { - return autoConvert_config_Plugin_To_v1beta3_Plugin(in, out, s) -} - -func autoConvert_v1beta3_PluginConfig_To_config_PluginConfig(in *v1beta3.PluginConfig, out *config.PluginConfig, s conversion.Scope) error { - out.Name = in.Name - if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&in.Args, &out.Args, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta3_PluginConfig_To_config_PluginConfig is an autogenerated conversion function. -func Convert_v1beta3_PluginConfig_To_config_PluginConfig(in *v1beta3.PluginConfig, out *config.PluginConfig, s conversion.Scope) error { - return autoConvert_v1beta3_PluginConfig_To_config_PluginConfig(in, out, s) -} - -func autoConvert_config_PluginConfig_To_v1beta3_PluginConfig(in *config.PluginConfig, out *v1beta3.PluginConfig, s conversion.Scope) error { - out.Name = in.Name - if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&in.Args, &out.Args, s); err != nil { - return err - } - return nil -} - -// Convert_config_PluginConfig_To_v1beta3_PluginConfig is an autogenerated conversion function. -func Convert_config_PluginConfig_To_v1beta3_PluginConfig(in *config.PluginConfig, out *v1beta3.PluginConfig, s conversion.Scope) error { - return autoConvert_config_PluginConfig_To_v1beta3_PluginConfig(in, out, s) -} - -func autoConvert_v1beta3_PluginSet_To_config_PluginSet(in *v1beta3.PluginSet, out *config.PluginSet, s conversion.Scope) error { - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]config.Plugin, len(*in)) - for i := range *in { - if err := Convert_v1beta3_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Enabled = nil - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]config.Plugin, len(*in)) - for i := range *in { - if err := Convert_v1beta3_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Disabled = nil - } - return nil -} - -// Convert_v1beta3_PluginSet_To_config_PluginSet is an autogenerated conversion function. -func Convert_v1beta3_PluginSet_To_config_PluginSet(in *v1beta3.PluginSet, out *config.PluginSet, s conversion.Scope) error { - return autoConvert_v1beta3_PluginSet_To_config_PluginSet(in, out, s) -} - -func autoConvert_config_PluginSet_To_v1beta3_PluginSet(in *config.PluginSet, out *v1beta3.PluginSet, s conversion.Scope) error { - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]v1beta3.Plugin, len(*in)) - for i := range *in { - if err := Convert_config_Plugin_To_v1beta3_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Enabled = nil - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]v1beta3.Plugin, len(*in)) - for i := range *in { - if err := Convert_config_Plugin_To_v1beta3_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Disabled = nil - } - return nil -} - -// Convert_config_PluginSet_To_v1beta3_PluginSet is an autogenerated conversion function. -func Convert_config_PluginSet_To_v1beta3_PluginSet(in *config.PluginSet, out *v1beta3.PluginSet, s conversion.Scope) error { - return autoConvert_config_PluginSet_To_v1beta3_PluginSet(in, out, s) -} - -func autoConvert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error { - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreFilter, &out.PreFilter, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Filter, &out.Filter, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PostFilter, &out.PostFilter, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreScore, &out.PreScore, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Score, &out.Score, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Reserve, &out.Reserve, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Permit, &out.Permit, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreBind, &out.PreBind, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.Bind, &out.Bind, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PostBind, &out.PostBind, s); err != nil { - return err - } - if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.MultiPoint, &out.MultiPoint, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta3_Plugins_To_config_Plugins is an autogenerated conversion function. -func Convert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error { - return autoConvert_v1beta3_Plugins_To_config_Plugins(in, out, s) -} - -func autoConvert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error { - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreFilter, &out.PreFilter, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Filter, &out.Filter, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PostFilter, &out.PostFilter, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreScore, &out.PreScore, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Score, &out.Score, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Reserve, &out.Reserve, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Permit, &out.Permit, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreBind, &out.PreBind, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.Bind, &out.Bind, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PostBind, &out.PostBind, s); err != nil { - return err - } - if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.MultiPoint, &out.MultiPoint, s); err != nil { - return err - } - return nil -} - -func autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error { - out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints)) - out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType) - return nil -} - -// Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs is an autogenerated conversion function. -func Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error { - return autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in, out, s) -} - -func autoConvert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta3.PodTopologySpreadArgs, s conversion.Scope) error { - out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints)) - out.DefaultingType = v1beta3.PodTopologySpreadConstraintsDefaulting(in.DefaultingType) - return nil -} - -// Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs is an autogenerated conversion function. -func Convert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta3.PodTopologySpreadArgs, s conversion.Scope) error { - return autoConvert_config_PodTopologySpreadArgs_To_v1beta3_PodTopologySpreadArgs(in, out, s) -} - -func autoConvert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta3.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error { - out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam is an autogenerated conversion function. -func Convert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta3.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error { - return autoConvert_v1beta3_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in, out, s) -} - -func autoConvert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta3.RequestedToCapacityRatioParam, s conversion.Scope) error { - out.Shape = *(*[]v1beta3.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam is an autogenerated conversion function. -func Convert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta3.RequestedToCapacityRatioParam, s conversion.Scope) error { - return autoConvert_config_RequestedToCapacityRatioParam_To_v1beta3_RequestedToCapacityRatioParam(in, out, s) -} - -func autoConvert_v1beta3_ResourceSpec_To_config_ResourceSpec(in *v1beta3.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error { - out.Name = in.Name - out.Weight = in.Weight - return nil -} - -// Convert_v1beta3_ResourceSpec_To_config_ResourceSpec is an autogenerated conversion function. -func Convert_v1beta3_ResourceSpec_To_config_ResourceSpec(in *v1beta3.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error { - return autoConvert_v1beta3_ResourceSpec_To_config_ResourceSpec(in, out, s) -} - -func autoConvert_config_ResourceSpec_To_v1beta3_ResourceSpec(in *config.ResourceSpec, out *v1beta3.ResourceSpec, s conversion.Scope) error { - out.Name = in.Name - out.Weight = in.Weight - return nil -} - -// Convert_config_ResourceSpec_To_v1beta3_ResourceSpec is an autogenerated conversion function. -func Convert_config_ResourceSpec_To_v1beta3_ResourceSpec(in *config.ResourceSpec, out *v1beta3.ResourceSpec, s conversion.Scope) error { - return autoConvert_config_ResourceSpec_To_v1beta3_ResourceSpec(in, out, s) -} - -func autoConvert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in *v1beta3.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error { - out.Type = config.ScoringStrategyType(in.Type) - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - out.RequestedToCapacityRatio = (*config.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio)) - return nil -} - -// Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy is an autogenerated conversion function. -func Convert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in *v1beta3.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error { - return autoConvert_v1beta3_ScoringStrategy_To_config_ScoringStrategy(in, out, s) -} - -func autoConvert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in *config.ScoringStrategy, out *v1beta3.ScoringStrategy, s conversion.Scope) error { - out.Type = v1beta3.ScoringStrategyType(in.Type) - out.Resources = *(*[]v1beta3.ResourceSpec)(unsafe.Pointer(&in.Resources)) - out.RequestedToCapacityRatio = (*v1beta3.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio)) - return nil -} - -// Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy is an autogenerated conversion function. -func Convert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in *config.ScoringStrategy, out *v1beta3.ScoringStrategy, s conversion.Scope) error { - return autoConvert_config_ScoringStrategy_To_v1beta3_ScoringStrategy(in, out, s) -} - -func autoConvert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta3.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error { - out.Utilization = in.Utilization - out.Score = in.Score - return nil -} - -// Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint is an autogenerated conversion function. -func Convert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta3.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error { - return autoConvert_v1beta3_UtilizationShapePoint_To_config_UtilizationShapePoint(in, out, s) -} - -func autoConvert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta3.UtilizationShapePoint, s conversion.Scope) error { - out.Utilization = in.Utilization - out.Score = in.Score - return nil -} - -// Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint is an autogenerated conversion function. -func Convert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta3.UtilizationShapePoint, s conversion.Scope) error { - return autoConvert_config_UtilizationShapePoint_To_v1beta3_UtilizationShapePoint(in, out, s) -} - -func autoConvert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int64_To_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil { - return err - } - out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs is an autogenerated conversion function. -func Convert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error { - return autoConvert_v1beta3_VolumeBindingArgs_To_config_VolumeBindingArgs(in, out, s) -} - -func autoConvert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta3.VolumeBindingArgs, s conversion.Scope) error { - if err := v1.Convert_int64_To_Pointer_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil { - return err - } - out.Shape = *(*[]v1beta3.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs is an autogenerated conversion function. -func Convert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta3.VolumeBindingArgs, s conversion.Scope) error { - return autoConvert_config_VolumeBindingArgs_To_v1beta3_VolumeBindingArgs(in, out, s) -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go deleted file mode 100644 index e735e37dbb1f..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.deepcopy.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1beta3 diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go deleted file mode 100644 index 3c28679f62f0..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3/zz_generated.defaults.go +++ /dev/null @@ -1,73 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by defaulter-gen. DO NOT EDIT. - -package v1beta3 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" - v1beta3 "k8s.io/kube-scheduler/config/v1beta3" -) - -// RegisterDefaults adds defaulters functions to the given scheme. -// Public to allow building arbitrary schemes. -// All generated defaulters are covering - they call all nested defaulters. -func RegisterDefaults(scheme *runtime.Scheme) error { - scheme.AddTypeDefaultingFunc(&v1beta3.DefaultPreemptionArgs{}, func(obj interface{}) { SetObjectDefaults_DefaultPreemptionArgs(obj.(*v1beta3.DefaultPreemptionArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta3.InterPodAffinityArgs{}, func(obj interface{}) { SetObjectDefaults_InterPodAffinityArgs(obj.(*v1beta3.InterPodAffinityArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta3.KubeSchedulerConfiguration{}, func(obj interface{}) { - SetObjectDefaults_KubeSchedulerConfiguration(obj.(*v1beta3.KubeSchedulerConfiguration)) - }) - scheme.AddTypeDefaultingFunc(&v1beta3.NodeResourcesBalancedAllocationArgs{}, func(obj interface{}) { - SetObjectDefaults_NodeResourcesBalancedAllocationArgs(obj.(*v1beta3.NodeResourcesBalancedAllocationArgs)) - }) - scheme.AddTypeDefaultingFunc(&v1beta3.NodeResourcesFitArgs{}, func(obj interface{}) { SetObjectDefaults_NodeResourcesFitArgs(obj.(*v1beta3.NodeResourcesFitArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta3.PodTopologySpreadArgs{}, func(obj interface{}) { SetObjectDefaults_PodTopologySpreadArgs(obj.(*v1beta3.PodTopologySpreadArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta3.VolumeBindingArgs{}, func(obj interface{}) { SetObjectDefaults_VolumeBindingArgs(obj.(*v1beta3.VolumeBindingArgs)) }) - return nil -} - -func SetObjectDefaults_DefaultPreemptionArgs(in *v1beta3.DefaultPreemptionArgs) { - SetDefaults_DefaultPreemptionArgs(in) -} - -func SetObjectDefaults_InterPodAffinityArgs(in *v1beta3.InterPodAffinityArgs) { - SetDefaults_InterPodAffinityArgs(in) -} - -func SetObjectDefaults_KubeSchedulerConfiguration(in *v1beta3.KubeSchedulerConfiguration) { - SetDefaults_KubeSchedulerConfiguration(in) -} - -func SetObjectDefaults_NodeResourcesBalancedAllocationArgs(in *v1beta3.NodeResourcesBalancedAllocationArgs) { - SetDefaults_NodeResourcesBalancedAllocationArgs(in) -} - -func SetObjectDefaults_NodeResourcesFitArgs(in *v1beta3.NodeResourcesFitArgs) { - SetDefaults_NodeResourcesFitArgs(in) -} - -func SetObjectDefaults_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs) { - SetDefaults_PodTopologySpreadArgs(in) -} - -func SetObjectDefaults_VolumeBindingArgs(in *v1beta3.VolumeBindingArgs) { - SetDefaults_VolumeBindingArgs(in) -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go index d6153ed5d9d7..4d6d977c1778 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/apis/config/validation/validation.go @@ -33,7 +33,6 @@ import ( componentbasevalidation "k8s.io/component-base/config/validation" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3" ) // ValidateKubeSchedulerConfiguration ensures validation of the KubeSchedulerConfiguration struct @@ -141,13 +140,9 @@ type invalidPlugins struct { // Remember to add an entry to that list when creating a new component config // version (even if the list of invalid plugins is empty). var invalidPluginsByVersion = []invalidPlugins{ - { - schemeGroupVersion: v1beta3.SchemeGroupVersion.String(), - plugins: []string{}, - }, { schemeGroupVersion: v1.SchemeGroupVersion.String(), - plugins: []string{"SelectorSpread"}, + plugins: []string{}, }, } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go index 5d1fe0dde47e..9d60a9b7d0ff 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go @@ -447,8 +447,8 @@ func addAllEventHandlers( ); err != nil { return err } + handlers = append(handlers, handlerRegistration) } - handlers = append(handlers, handlerRegistration) case framework.ResourceClaim: if utilfeature.DefaultFeatureGate.Enabled(features.DynamicResourceAllocation) { if handlerRegistration, err = informerFactory.Resource().V1alpha2().ResourceClaims().Informer().AddEventHandler( @@ -456,8 +456,17 @@ func addAllEventHandlers( ); err != nil { return err } + handlers = append(handlers, handlerRegistration) + } + case framework.ResourceClass: + if utilfeature.DefaultFeatureGate.Enabled(features.DynamicResourceAllocation) { + if handlerRegistration, err = informerFactory.Resource().V1alpha2().ResourceClasses().Informer().AddEventHandler( + buildEvtResHandler(at, framework.ResourceClass, "ResourceClass"), + ); err != nil { + return err + } + handlers = append(handlers, handlerRegistration) } - handlers = append(handlers, handlerRegistration) case framework.StorageClass: if at&framework.Add != 0 { if handlerRegistration, err = informerFactory.Storage().V1().StorageClasses().Informer().AddEventHandler( diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go index ead881874819..aa1ed6a69437 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go @@ -38,7 +38,7 @@ type DefaultBinder struct { var _ framework.BindPlugin = &DefaultBinder{} // New creates a DefaultBinder. -func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, handle framework.Handle) (framework.Plugin, error) { return &DefaultBinder{handle: handle}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go index a2d20968d110..d77080ee3ea2 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go @@ -63,7 +63,7 @@ func (pl *DefaultPreemption) Name() string { } // New initializes a new plugin and returns it. -func New(dpArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, dpArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { args, ok := dpArgs.(*config.DefaultPreemptionArgs) if !ok { return nil, fmt.Errorf("got args of type %T, want *DefaultPreemptionArgs", dpArgs) @@ -97,8 +97,9 @@ func (pl *DefaultPreemption) PostFilter(ctx context.Context, state *framework.Cy } result, status := pe.Preempt(ctx, pod, m) - if status.Message() != "" { - return result, framework.NewStatus(status.Code(), "preemption: "+status.Message()) + msg := status.Message() + if len(msg) > 0 { + return result, framework.NewStatus(status.Code(), "preemption: "+msg) } return result, status } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources.go index 471c6e2bb596..e090129daaf2 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources.go @@ -31,10 +31,10 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/kubernetes" resourcev1alpha2listers "k8s.io/client-go/listers/resource/v1alpha2" - corev1helpers "k8s.io/component-helpers/scheduling/corev1" "k8s.io/component-helpers/scheduling/corev1/nodeaffinity" "k8s.io/dynamic-resource-allocation/resourceclaim" "k8s.io/klog/v2" @@ -42,6 +42,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" schedutil "k8s.io/kubernetes/pkg/scheduler/util" + "k8s.io/utils/ptr" ) const ( @@ -55,6 +56,9 @@ const ( // framework.CycleState, in the later phases we don't need to call Write method // to update the value type stateData struct { + // preScored is true if PreScore was invoked. + preScored bool + // A copy of all claims for the Pod (i.e. 1:1 match with // pod.Spec.ResourceClaims), initially with the status from the start // of the scheduling cycle. Each claim instance is read-only because it @@ -64,11 +68,6 @@ type stateData struct { // Empty if the Pod has no claims. claims []*resourcev1alpha2.ResourceClaim - // The AvailableOnNodes node filters of the claims converted from the - // v1 API to nodeaffinity.NodeSelector by PreFilter for repeated - // evaluation in Filter. Nil for claims which don't have it. - availableOnNodes []*nodeaffinity.NodeSelector - // The indices of all claims that: // - are allocated // - use delayed allocation @@ -78,19 +77,24 @@ type stateData struct { // protected by the mutex. Used by PostFilter. unavailableClaims sets.Int - // A pointer to the PodSchedulingContext object for the pod, if one exists. - // Gets set on demand. - // - // Conceptually, this object belongs into the scheduler framework - // where it might get shared by different plugins. But in practice, - // it is currently only used by dynamic provisioning and thus - // managed entirely here. - schedulingCtx *resourcev1alpha2.PodSchedulingContext - - // podSchedulingDirty is true if the current copy was locally modified. - podSchedulingDirty bool + // podSchedulingState keeps track of the PodSchedulingContext + // (if one exists) and the changes made to it. + podSchedulingState podSchedulingState mutex sync.Mutex + + informationsForClaim []informationForClaim +} + +type informationForClaim struct { + // The availableOnNode node filter of the claim converted from the + // v1 API to nodeaffinity.NodeSelector by PreFilter for repeated + // evaluation in Filter. Nil for claim which don't have it. + availableOnNode *nodeaffinity.NodeSelector + // The status of the claim got from the + // schedulingCtx by PreFilter for repeated + // evaluation in Filter. Nil for claim which don't have it. + status *resourcev1alpha2.ResourceClaimSchedulingStatus } func (d *stateData) Clone() framework.StateData { @@ -116,91 +120,108 @@ func (d *stateData) updateClaimStatus(ctx context.Context, clientset kubernetes. return nil } -// initializePodSchedulingContext can be called concurrently. It returns an existing PodSchedulingContext -// object if there is one already, retrieves one if not, or as a last resort creates -// one from scratch. -func (d *stateData) initializePodSchedulingContexts(ctx context.Context, pod *v1.Pod, podSchedulingContextLister resourcev1alpha2listers.PodSchedulingContextLister) (*resourcev1alpha2.PodSchedulingContext, error) { - // TODO (#113701): check if this mutex locking can be avoided by calling initializePodSchedulingContext during PreFilter. - d.mutex.Lock() - defer d.mutex.Unlock() +type podSchedulingState struct { + // A pointer to the PodSchedulingContext object for the pod, if one exists + // in the API server. + // + // Conceptually, this object belongs into the scheduler framework + // where it might get shared by different plugins. But in practice, + // it is currently only used by dynamic provisioning and thus + // managed entirely here. + schedulingCtx *resourcev1alpha2.PodSchedulingContext - if d.schedulingCtx != nil { - return d.schedulingCtx, nil - } + // selectedNode is set if (and only if) a node has been selected. + selectedNode *string + + // potentialNodes is set if (and only if) the potential nodes field + // needs to be updated or set. + potentialNodes *[]string +} +func (p *podSchedulingState) isDirty() bool { + return p.selectedNode != nil || + p.potentialNodes != nil +} + +// init checks whether there is already a PodSchedulingContext object. +// Must not be called concurrently, +func (p *podSchedulingState) init(ctx context.Context, pod *v1.Pod, podSchedulingContextLister resourcev1alpha2listers.PodSchedulingContextLister) error { schedulingCtx, err := podSchedulingContextLister.PodSchedulingContexts(pod.Namespace).Get(pod.Name) switch { case apierrors.IsNotFound(err): - controller := true - schedulingCtx = &resourcev1alpha2.PodSchedulingContext{ - ObjectMeta: metav1.ObjectMeta{ - Name: pod.Name, - Namespace: pod.Namespace, - OwnerReferences: []metav1.OwnerReference{ - { - APIVersion: "v1", - Kind: "Pod", - Name: pod.Name, - UID: pod.UID, - Controller: &controller, - }, - }, - }, - } - err = nil + return nil case err != nil: - return nil, err + return err default: // We have an object, but it might be obsolete. if !metav1.IsControlledBy(schedulingCtx, pod) { - return nil, fmt.Errorf("PodSchedulingContext object with UID %s is not owned by Pod %s/%s", schedulingCtx.UID, pod.Namespace, pod.Name) + return fmt.Errorf("PodSchedulingContext object with UID %s is not owned by Pod %s/%s", schedulingCtx.UID, pod.Namespace, pod.Name) } } - d.schedulingCtx = schedulingCtx - return schedulingCtx, err + p.schedulingCtx = schedulingCtx + return nil } -// publishPodSchedulingContext creates or updates the PodSchedulingContext object. -func (d *stateData) publishPodSchedulingContexts(ctx context.Context, clientset kubernetes.Interface, schedulingCtx *resourcev1alpha2.PodSchedulingContext) error { - d.mutex.Lock() - defer d.mutex.Unlock() +// publish creates or updates the PodSchedulingContext object, if necessary. +// Must not be called concurrently. +func (p *podSchedulingState) publish(ctx context.Context, pod *v1.Pod, clientset kubernetes.Interface) error { + if !p.isDirty() { + return nil + } var err error logger := klog.FromContext(ctx) - msg := "Updating PodSchedulingContext" - if schedulingCtx.UID == "" { - msg = "Creating PodSchedulingContext" - } - if loggerV := logger.V(6); loggerV.Enabled() { - // At a high enough log level, dump the entire object. - loggerV.Info(msg, "podSchedulingCtxDump", klog.Format(schedulingCtx)) - } else { - logger.V(5).Info(msg, "podSchedulingCtx", klog.KObj(schedulingCtx)) - } - if schedulingCtx.UID == "" { - schedulingCtx, err = clientset.ResourceV1alpha2().PodSchedulingContexts(schedulingCtx.Namespace).Create(ctx, schedulingCtx, metav1.CreateOptions{}) + if p.schedulingCtx != nil { + // Update it. + schedulingCtx := p.schedulingCtx.DeepCopy() + if p.selectedNode != nil { + schedulingCtx.Spec.SelectedNode = *p.selectedNode + } + if p.potentialNodes != nil { + schedulingCtx.Spec.PotentialNodes = *p.potentialNodes + } + if loggerV := logger.V(6); loggerV.Enabled() { + // At a high enough log level, dump the entire object. + loggerV.Info("Updating PodSchedulingContext", "podSchedulingCtx", klog.KObj(schedulingCtx), "podSchedulingCtxObject", klog.Format(schedulingCtx)) + } else { + logger.V(5).Info("Updating PodSchedulingContext", "podSchedulingCtx", klog.KObj(schedulingCtx)) + } + _, err = clientset.ResourceV1alpha2().PodSchedulingContexts(schedulingCtx.Namespace).Update(ctx, schedulingCtx, metav1.UpdateOptions{}) } else { - // TODO (#113700): patch here to avoid racing with drivers which update the status. - schedulingCtx, err = clientset.ResourceV1alpha2().PodSchedulingContexts(schedulingCtx.Namespace).Update(ctx, schedulingCtx, metav1.UpdateOptions{}) + // Create it. + schedulingCtx := &resourcev1alpha2.PodSchedulingContext{ + ObjectMeta: metav1.ObjectMeta{ + Name: pod.Name, + Namespace: pod.Namespace, + OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(pod, schema.GroupVersionKind{Version: "v1", Kind: "Pod"})}, + }, + } + if p.selectedNode != nil { + schedulingCtx.Spec.SelectedNode = *p.selectedNode + } + if p.potentialNodes != nil { + schedulingCtx.Spec.PotentialNodes = *p.potentialNodes + } + if loggerV := logger.V(6); loggerV.Enabled() { + // At a high enough log level, dump the entire object. + loggerV.Info("Creating PodSchedulingContext", "podSchedulingCtx", klog.KObj(schedulingCtx), "podSchedulingCtxObject", klog.Format(schedulingCtx)) + } else { + logger.V(5).Info("Creating PodSchedulingContext", "podSchedulingCtx", klog.KObj(schedulingCtx)) + } + _, err = clientset.ResourceV1alpha2().PodSchedulingContexts(schedulingCtx.Namespace).Create(ctx, schedulingCtx, metav1.CreateOptions{}) } if err != nil { return err } - d.schedulingCtx = schedulingCtx - d.podSchedulingDirty = false + p.potentialNodes = nil + p.selectedNode = nil return nil } -// storePodSchedulingContext replaces the pod schedulingCtx object in the state. -func (d *stateData) storePodSchedulingContexts(schedulingCtx *resourcev1alpha2.PodSchedulingContext) { - d.mutex.Lock() - defer d.mutex.Unlock() - - d.schedulingCtx = schedulingCtx - d.podSchedulingDirty = true -} - func statusForClaim(schedulingCtx *resourcev1alpha2.PodSchedulingContext, podClaimName string) *resourcev1alpha2.ResourceClaimSchedulingStatus { + if schedulingCtx == nil { + return nil + } for _, status := range schedulingCtx.Status.ResourceClaims { if status.Name == podClaimName { return &status @@ -220,7 +241,7 @@ type dynamicResources struct { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { if !fts.EnableDynamicResourceAllocation { // Disabled, won't do anything. return &dynamicResources{}, nil @@ -265,6 +286,8 @@ func (pl *dynamicResources) EventsToRegister() []framework.ClusterEventWithHint // A resource might depend on node labels for topology filtering. // A new or updated node may make pods schedulable. {Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.UpdateNodeLabel}}, + // A pod might be waiting for a class to get created or modified. + {Event: framework.ClusterEvent{Resource: framework.ResourceClass, ActionType: framework.Add | framework.Update}}, } return events } @@ -283,17 +306,16 @@ func (pl *dynamicResources) PreEnqueue(ctx context.Context, pod *v1.Pod) (status // an informer. It checks whether that change made a previously unschedulable // pod schedulable. It errs on the side of letting a pod scheduling attempt // happen. -func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint { +func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (framework.QueueingHint, error) { if newObj == nil { // Deletes don't make a pod schedulable. - return framework.QueueSkip + return framework.QueueSkip, nil } - _, modifiedClaim, err := schedutil.As[*resourcev1alpha2.ResourceClaim](nil, newObj) + originalClaim, modifiedClaim, err := schedutil.As[*resourcev1alpha2.ResourceClaim](oldObj, newObj) if err != nil { // Shouldn't happen. - logger.Error(err, "unexpected new object in isSchedulableAfterClaimChange") - return framework.QueueAfterBackoff + return framework.QueueAfterBackoff, fmt.Errorf("unexpected object in isSchedulableAfterClaimChange: %w", err) } usesClaim := false @@ -306,30 +328,24 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, po // foreachPodResourceClaim only returns errors for "not // schedulable". logger.V(4).Info("pod is not schedulable", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim), "reason", err.Error()) - return framework.QueueSkip + return framework.QueueSkip, nil } if !usesClaim { // This was not the claim the pod was waiting for. logger.V(6).Info("unrelated claim got modified", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim)) - return framework.QueueSkip + return framework.QueueSkip, nil } - if oldObj == nil { + if originalClaim == nil { logger.V(4).Info("claim for pod got created", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim)) - return framework.QueueImmediately + return framework.QueueImmediately, nil } // Modifications may or may not be relevant. If the entire // status is as before, then something else must have changed // and we don't care. What happens in practice is that the // resource driver adds the finalizer. - originalClaim, ok := oldObj.(*resourcev1alpha2.ResourceClaim) - if !ok { - // Shouldn't happen. - logger.Error(nil, "unexpected old object in isSchedulableAfterClaimAddOrUpdate", "obj", oldObj) - return framework.QueueAfterBackoff - } if apiequality.Semantic.DeepEqual(&originalClaim.Status, &modifiedClaim.Status) { if loggerV := logger.V(7); loggerV.Enabled() { // Log more information. @@ -337,11 +353,11 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, po } else { logger.V(6).Info("claim for pod got modified where the pod doesn't care", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim)) } - return framework.QueueSkip + return framework.QueueSkip, nil } logger.V(4).Info("status of claim for pod got updated", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim)) - return framework.QueueImmediately + return framework.QueueImmediately, nil } // isSchedulableAfterPodSchedulingContextChange is invoked for all @@ -349,25 +365,24 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, po // change made a previously unschedulable pod schedulable (updated) or a new // attempt is needed to re-create the object (deleted). It errs on the side of // letting a pod scheduling attempt happen. -func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint { +func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (framework.QueueingHint, error) { // Deleted? That can happen because we ourselves delete the PodSchedulingContext while // working on the pod. This can be ignored. if oldObj != nil && newObj == nil { logger.V(4).Info("PodSchedulingContext got deleted") - return framework.QueueSkip + return framework.QueueSkip, nil } oldPodScheduling, newPodScheduling, err := schedutil.As[*resourcev1alpha2.PodSchedulingContext](oldObj, newObj) if err != nil { // Shouldn't happen. - logger.Error(nil, "isSchedulableAfterPodSchedulingChange") - return framework.QueueAfterBackoff + return framework.QueueAfterBackoff, fmt.Errorf("unexpected object in isSchedulableAfterPodSchedulingContextChange: %w", err) } podScheduling := newPodScheduling // Never nil because deletes are handled above. if podScheduling.Name != pod.Name || podScheduling.Namespace != pod.Namespace { logger.V(7).Info("PodSchedulingContext for unrelated pod got modified", "pod", klog.KObj(pod), "podScheduling", klog.KObj(podScheduling)) - return framework.QueueSkip + return framework.QueueSkip, nil } // If the drivers have provided information about all @@ -387,7 +402,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger // foreachPodResourceClaim only returns errors for "not // schedulable". logger.V(4).Info("pod is not schedulable, keep waiting", "pod", klog.KObj(pod), "reason", err.Error()) - return framework.QueueSkip + return framework.QueueSkip, nil } // Some driver responses missing? @@ -401,14 +416,14 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger } else { logger.V(5).Info("PodSchedulingContext with missing resource claim information, keep waiting", "pod", klog.KObj(pod)) } - return framework.QueueSkip + return framework.QueueSkip, nil } if oldPodScheduling == nil /* create */ || len(oldPodScheduling.Status.ResourceClaims) < len(podScheduling.Status.ResourceClaims) /* new information and not incomplete (checked above) */ { // This definitely is new information for the scheduler. Try again immediately. logger.V(4).Info("PodSchedulingContext for pod has all required information, schedule immediately", "pod", klog.KObj(pod)) - return framework.QueueImmediately + return framework.QueueImmediately, nil } // The other situation where the scheduler needs to do @@ -433,7 +448,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger for _, claimStatus := range podScheduling.Status.ResourceClaims { if sliceContains(claimStatus.UnsuitableNodes, podScheduling.Spec.SelectedNode) { logger.V(5).Info("PodSchedulingContext has unsuitable selected node, schedule immediately", "pod", klog.KObj(pod), "selectedNode", podScheduling.Spec.SelectedNode, "podResourceName", claimStatus.Name) - return framework.QueueImmediately + return framework.QueueImmediately, nil } } } @@ -443,7 +458,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger !apiequality.Semantic.DeepEqual(&oldPodScheduling.Spec, &podScheduling.Spec) && apiequality.Semantic.DeepEqual(&oldPodScheduling.Status, &podScheduling.Status) { logger.V(5).Info("PodSchedulingContext has only the scheduler spec changes, ignore the update", "pod", klog.KObj(pod)) - return framework.QueueSkip + return framework.QueueSkip, nil } // Once we get here, all changes which are known to require special responses @@ -456,7 +471,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger } else { logger.V(5).Info("PodSchedulingContext for pod with unknown changes, maybe schedule", "pod", klog.KObj(pod)) } - return framework.QueueAfterBackoff + return framework.QueueAfterBackoff, nil } @@ -555,7 +570,12 @@ func (pl *dynamicResources) PreFilter(ctx context.Context, state *framework.Cycl return nil, framework.NewStatus(framework.Skip) } - s.availableOnNodes = make([]*nodeaffinity.NodeSelector, len(claims)) + // Fetch s.podSchedulingState.schedulingCtx, it's going to be needed when checking claims. + if err := s.podSchedulingState.init(ctx, pod, pl.podSchedulingContextLister); err != nil { + return nil, statusError(logger, err) + } + + s.informationsForClaim = make([]informationForClaim, len(claims)) for index, claim := range claims { if claim.Spec.AllocationMode == resourcev1alpha2.AllocationModeImmediate && claim.Status.Allocation == nil { @@ -578,7 +598,34 @@ func (pl *dynamicResources) PreFilter(ctx context.Context, state *framework.Cycl if err != nil { return nil, statusError(logger, err) } - s.availableOnNodes[index] = nodeSelector + s.informationsForClaim[index].availableOnNode = nodeSelector + } + if claim.Status.Allocation == nil && + claim.Spec.AllocationMode == resourcev1alpha2.AllocationModeWaitForFirstConsumer { + // The ResourceClass might have a node filter. This is + // useful for trimming the initial set of potential + // nodes before we ask the driver(s) for information + // about the specific pod. + class, err := pl.classLister.Get(claim.Spec.ResourceClassName) + if err != nil { + // If the class cannot be retrieved, allocation cannot proceed. + if apierrors.IsNotFound(err) { + // Here we mark the pod as "unschedulable", so it'll sleep in + // the unscheduleable queue until a ResourceClass event occurs. + return nil, statusUnschedulable(logger, fmt.Sprintf("resource class %s does not exist", claim.Spec.ResourceClassName)) + } + // Other error, retry with backoff. + return nil, statusError(logger, fmt.Errorf("look up resource class: %v", err)) + } + if class.SuitableNodes != nil { + selector, err := nodeaffinity.NewNodeSelector(class.SuitableNodes) + if err != nil { + return nil, statusError(logger, err) + } + s.informationsForClaim[index].availableOnNode = selector + } + // Now we need information from drivers. + s.informationsForClaim[index].status = statusForClaim(s.podSchedulingState.schedulingCtx, pod.Spec.ResourceClaims[index].Name) } } @@ -633,7 +680,7 @@ func (pl *dynamicResources) Filter(ctx context.Context, cs *framework.CycleState logger.V(10).Info("filtering based on resource claims of the pod", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclaim", klog.KObj(claim)) switch { case claim.Status.Allocation != nil: - if nodeSelector := state.availableOnNodes[index]; nodeSelector != nil { + if nodeSelector := state.informationsForClaim[index].availableOnNode; nodeSelector != nil { if !nodeSelector.Match(node) { logger.V(5).Info("AvailableOnNodes does not match", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclaim", klog.KObj(claim)) unavailableClaims = append(unavailableClaims, index) @@ -643,33 +690,12 @@ func (pl *dynamicResources) Filter(ctx context.Context, cs *framework.CycleState // We shouldn't get here. PreFilter already checked this. return statusUnschedulable(logger, "resourceclaim must be reallocated", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclaim", klog.KObj(claim)) case claim.Spec.AllocationMode == resourcev1alpha2.AllocationModeWaitForFirstConsumer: - // The ResourceClass might have a node filter. This is - // useful for trimming the initial set of potential - // nodes before we ask the driver(s) for information - // about the specific pod. - class, err := pl.classLister.Get(claim.Spec.ResourceClassName) - if err != nil { - // If the class does not exist, then allocation cannot proceed. - return statusError(logger, fmt.Errorf("look up resource class: %v", err)) - } - if class.SuitableNodes != nil { - // TODO (#113700): parse class.SuitableNodes once in PreFilter, reuse result. - matches, err := corev1helpers.MatchNodeSelectorTerms(node, class.SuitableNodes) - if err != nil { - return statusError(logger, fmt.Errorf("potential node filter: %v", err)) - } - if !matches { - return statusUnschedulable(logger, "excluded by resource class node filter", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclass", klog.KObj(class)) + if selector := state.informationsForClaim[index].availableOnNode; selector != nil { + if matches := selector.Match(node); !matches { + return statusUnschedulable(logger, "excluded by resource class node filter", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclassName", claim.Spec.ResourceClassName) } } - - // Now we need information from drivers. - schedulingCtx, err := state.initializePodSchedulingContexts(ctx, pod, pl.podSchedulingContextLister) - if err != nil { - return statusError(logger, err) - } - status := statusForClaim(schedulingCtx, pod.Spec.ResourceClaims[index].Name) - if status != nil { + if status := state.informationsForClaim[index].status; status != nil { for _, unsuitableNode := range status.UnsuitableNodes { if node.Name == unsuitableNode { return statusUnschedulable(logger, "resourceclaim cannot be allocated for the node (unsuitable)", "pod", klog.KObj(pod), "node", klog.KObj(node), "resourceclaim", klog.KObj(claim), "unsuitablenodes", status.UnsuitableNodes) @@ -729,6 +755,19 @@ func (pl *dynamicResources) PostFilter(ctx context.Context, cs *framework.CycleS claim := state.claims[index] if len(claim.Status.ReservedFor) == 0 || len(claim.Status.ReservedFor) == 1 && claim.Status.ReservedFor[0].UID == pod.UID { + // Before we tell a driver to deallocate a claim, we + // have to stop telling it to allocate. Otherwise, + // depending on timing, it will deallocate the claim, + // see a PodSchedulingContext with selected node, and + // allocate again for that same node. + if state.podSchedulingState.schedulingCtx != nil && + state.podSchedulingState.schedulingCtx.Spec.SelectedNode != "" { + state.podSchedulingState.selectedNode = ptr.To("") + if err := state.podSchedulingState.publish(ctx, pod, pl.clientset); err != nil { + return nil, statusError(logger, err) + } + } + claim := state.claims[index].DeepCopy() claim.Status.DeallocationRequested = true claim.Status.ReservedFor = nil @@ -753,64 +792,71 @@ func (pl *dynamicResources) PreScore(ctx context.Context, cs *framework.CycleSta if err != nil { return statusError(klog.FromContext(ctx), err) } + defer func() { + state.preScored = true + }() if len(state.claims) == 0 { return nil } logger := klog.FromContext(ctx) - schedulingCtx, err := state.initializePodSchedulingContexts(ctx, pod, pl.podSchedulingContextLister) - if err != nil { - return statusError(logger, err) - } pending := false for _, claim := range state.claims { if claim.Status.Allocation == nil { pending = true } } - if pending && !haveAllNodes(schedulingCtx.Spec.PotentialNodes, nodes) { - // Remember the potential nodes. The object will get created or - // updated in Reserve. This is both an optimization and - // covers the case that PreScore doesn't get called when there - // is only a single node. - logger.V(5).Info("remembering potential nodes", "pod", klog.KObj(pod), "potentialnodes", klog.KObjSlice(nodes)) - schedulingCtx = schedulingCtx.DeepCopy() - numNodes := len(nodes) - if numNodes > resourcev1alpha2.PodSchedulingNodeListMaxSize { - numNodes = resourcev1alpha2.PodSchedulingNodeListMaxSize + if !pending { + logger.V(5).Info("no pending claims", "pod", klog.KObj(pod)) + return nil + } + if haveAllPotentialNodes(state.podSchedulingState.schedulingCtx, nodes) { + logger.V(5).Info("all potential nodes already set", "pod", klog.KObj(pod), "potentialnodes", klog.KObjSlice(nodes)) + return nil + } + + // Remember the potential nodes. The object will get created or + // updated in Reserve. This is both an optimization and + // covers the case that PreScore doesn't get called when there + // is only a single node. + logger.V(5).Info("remembering potential nodes", "pod", klog.KObj(pod), "potentialnodes", klog.KObjSlice(nodes)) + numNodes := len(nodes) + if numNodes > resourcev1alpha2.PodSchedulingNodeListMaxSize { + numNodes = resourcev1alpha2.PodSchedulingNodeListMaxSize + } + potentialNodes := make([]string, 0, numNodes) + if numNodes == len(nodes) { + // Copy all node names. + for _, node := range nodes { + potentialNodes = append(potentialNodes, node.Name) } - schedulingCtx.Spec.PotentialNodes = make([]string, 0, numNodes) - if numNodes == len(nodes) { - // Copy all node names. - for _, node := range nodes { - schedulingCtx.Spec.PotentialNodes = append(schedulingCtx.Spec.PotentialNodes, node.Name) - } - } else { - // Select a random subset of the nodes to comply with - // the PotentialNodes length limit. Randomization is - // done for us by Go which iterates over map entries - // randomly. - nodeNames := map[string]struct{}{} - for _, node := range nodes { - nodeNames[node.Name] = struct{}{} - } - for nodeName := range nodeNames { - if len(schedulingCtx.Spec.PotentialNodes) >= resourcev1alpha2.PodSchedulingNodeListMaxSize { - break - } - schedulingCtx.Spec.PotentialNodes = append(schedulingCtx.Spec.PotentialNodes, nodeName) + } else { + // Select a random subset of the nodes to comply with + // the PotentialNodes length limit. Randomization is + // done for us by Go which iterates over map entries + // randomly. + nodeNames := map[string]struct{}{} + for _, node := range nodes { + nodeNames[node.Name] = struct{}{} + } + for nodeName := range nodeNames { + if len(potentialNodes) >= resourcev1alpha2.PodSchedulingNodeListMaxSize { + break } + potentialNodes = append(potentialNodes, nodeName) } - sort.Strings(schedulingCtx.Spec.PotentialNodes) - state.storePodSchedulingContexts(schedulingCtx) } - logger.V(5).Info("all potential nodes already set", "pod", klog.KObj(pod), "potentialnodes", klog.KObjSlice(nodes)) + sort.Strings(potentialNodes) + state.podSchedulingState.potentialNodes = &potentialNodes return nil } -func haveAllNodes(nodeNames []string, nodes []*v1.Node) bool { +func haveAllPotentialNodes(schedulingCtx *resourcev1alpha2.PodSchedulingContext, nodes []*v1.Node) bool { + if schedulingCtx == nil { + return false + } for _, node := range nodes { - if !haveNode(nodeNames, node.Name) { + if !haveNode(schedulingCtx.Spec.PotentialNodes, node.Name) { return false } } @@ -842,10 +888,6 @@ func (pl *dynamicResources) Reserve(ctx context.Context, cs *framework.CycleStat numDelayedAllocationPending := 0 numClaimsWithStatusInfo := 0 logger := klog.FromContext(ctx) - schedulingCtx, err := state.initializePodSchedulingContexts(ctx, pod, pl.podSchedulingContextLister) - if err != nil { - return statusError(logger, err) - } for index, claim := range state.claims { if claim.Status.Allocation != nil { // Allocated, but perhaps not reserved yet. @@ -875,7 +917,7 @@ func (pl *dynamicResources) Reserve(ctx context.Context, cs *framework.CycleStat // Did the driver provide information that steered node // selection towards a node that it can support? - if statusForClaim(schedulingCtx, pod.Spec.ResourceClaims[index].Name) != nil { + if statusForClaim(state.podSchedulingState.schedulingCtx, pod.Spec.ResourceClaims[index].Name) != nil { numClaimsWithStatusInfo++ } } @@ -886,16 +928,19 @@ func (pl *dynamicResources) Reserve(ctx context.Context, cs *framework.CycleStat return nil } - podSchedulingDirty := state.podSchedulingDirty - if len(schedulingCtx.Spec.PotentialNodes) == 0 { - // PreScore was not called, probably because there was - // only one candidate. We need to ask whether that - // node is suitable, otherwise the scheduler will pick - // it forever even when it cannot satisfy the claim. - schedulingCtx = schedulingCtx.DeepCopy() - schedulingCtx.Spec.PotentialNodes = []string{nodeName} - logger.V(5).Info("asking for information about single potential node", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) - podSchedulingDirty = true + if !state.preScored { + // There was only one candidate that passed the Filters and + // therefore PreScore was not called. + // + // We need to ask whether that node is suitable, otherwise the + // scheduler will pick it forever even when it cannot satisfy + // the claim. + if state.podSchedulingState.schedulingCtx == nil || + !containsNode(state.podSchedulingState.schedulingCtx.Spec.PotentialNodes, nodeName) { + potentialNodes := []string{nodeName} + state.podSchedulingState.potentialNodes = &potentialNodes + logger.V(5).Info("asking for information about single potential node", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) + } } // When there is only one pending resource, we can go ahead with @@ -903,26 +948,26 @@ func (pl *dynamicResources) Reserve(ctx context.Context, cs *framework.CycleStat // the driver yet. Otherwise we wait for information before blindly // making a decision that might have to be reversed later. if numDelayedAllocationPending == 1 || numClaimsWithStatusInfo == numDelayedAllocationPending { - schedulingCtx = schedulingCtx.DeepCopy() // TODO: can we increase the chance that the scheduler picks // the same node as before when allocation is on-going, // assuming that that node still fits the pod? Picking a // different node may lead to some claims being allocated for // one node and others for another, which then would have to be // resolved with deallocation. - schedulingCtx.Spec.SelectedNode = nodeName - logger.V(5).Info("start allocation", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) - if err := state.publishPodSchedulingContexts(ctx, pl.clientset, schedulingCtx); err != nil { - return statusError(logger, err) + if state.podSchedulingState.schedulingCtx == nil || + state.podSchedulingState.schedulingCtx.Spec.SelectedNode != nodeName { + state.podSchedulingState.selectedNode = &nodeName + logger.V(5).Info("start allocation", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) + if err := state.podSchedulingState.publish(ctx, pod, pl.clientset); err != nil { + return statusError(logger, err) + } + return statusUnschedulable(logger, "waiting for resource driver to allocate resource", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) } - return statusUnschedulable(logger, "waiting for resource driver to allocate resource", "pod", klog.KObj(pod), "node", klog.ObjectRef{Name: nodeName}) } // May have been modified earlier in PreScore or above. - if podSchedulingDirty { - if err := state.publishPodSchedulingContexts(ctx, pl.clientset, schedulingCtx); err != nil { - return statusError(logger, err) - } + if err := state.podSchedulingState.publish(ctx, pod, pl.clientset); err != nil { + return statusError(logger, err) } // More than one pending claim and not enough information about all of them. @@ -935,6 +980,15 @@ func (pl *dynamicResources) Reserve(ctx context.Context, cs *framework.CycleStat return statusUnschedulable(logger, "waiting for resource driver to provide information", "pod", klog.KObj(pod)) } +func containsNode(hay []string, needle string) bool { + for _, node := range hay { + if node == needle { + return true + } + } + return false +} + // Unreserve clears the ReservedFor field for all claims. // It's idempotent, and does nothing if no state found for the given pod. func (pl *dynamicResources) Unreserve(ctx context.Context, cs *framework.CycleState, pod *v1.Pod, nodeName string) { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality/image_locality.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality/image_locality.go index 9eeab05b260b..bdf3c6c62134 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality/image_locality.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality/image_locality.go @@ -74,7 +74,7 @@ func (pl *ImageLocality) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &ImageLocality{handle: h}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go index b7131eaf48fe..6f6c3c8feb6d 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go @@ -17,6 +17,7 @@ limitations under the License. package interpodaffinity import ( + "context" "fmt" "k8s.io/apimachinery/pkg/labels" @@ -69,7 +70,7 @@ func (pl *InterPodAffinity) EventsToRegister() []framework.ClusterEventWithHint } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { if h.SnapshotSharedLister() == nil { return nil, fmt.Errorf("SnapshotSharedlister is nil") } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/names/names.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/names/names.go index 3741f0a100a5..4d54867509a6 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/names/names.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/names/names.go @@ -36,7 +36,6 @@ const ( GCEPDLimits = "GCEPDLimits" PodTopologySpread = "PodTopologySpread" SchedulingGates = "SchedulingGates" - SelectorSpread = "SelectorSpread" TaintToleration = "TaintToleration" VolumeBinding = "VolumeBinding" VolumeRestrictions = "VolumeRestrictions" diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go index d9d431f9aebe..ca8263d0685f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go @@ -243,7 +243,7 @@ func (pl *NodeAffinity) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { args, err := getArgs(plArgs) if err != nil { return nil, err diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename/node_name.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename/node_name.go index 7adea806cb78..ad222e4cf046 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename/node_name.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename/node_name.go @@ -67,6 +67,6 @@ func Fits(pod *v1.Pod, nodeInfo *framework.NodeInfo) bool { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodeName{}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports/node_ports.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports/node_ports.go index 515aab09eebc..656c87495b2b 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports/node_ports.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports/node_ports.go @@ -149,6 +149,6 @@ func fitsPorts(wantPorts []*v1.ContainerPort, nodeInfo *framework.NodeInfo) bool } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodePorts{}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go index f375be2d42f6..288fa0d7ff33 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go @@ -114,7 +114,7 @@ func (ba *BalancedAllocation) ScoreExtensions() framework.ScoreExtensions { } // NewBalancedAllocation initializes a new plugin and returns it. -func NewBalancedAllocation(baArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewBalancedAllocation(_ context.Context, baArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { args, ok := baArgs.(*config.NodeResourcesBalancedAllocationArgs) if !ok { return nil, fmt.Errorf("want args to be of type NodeResourcesBalancedAllocationArgs, got %T", baArgs) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/fit.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/fit.go index 04e9bcbf7578..ba09fa8628ad 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/fit.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources/fit.go @@ -145,7 +145,7 @@ func (f *Fit) Name() string { } // NewFit initializes a new plugin and returns it. -func NewFit(plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewFit(_ context.Context, plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { args, ok := plArgs.(*config.NodeResourcesFitArgs) if !ok { return nil, fmt.Errorf("want args to be of type NodeResourcesFitArgs, got %T", plArgs) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go index 1ba667ed75ab..f437405711eb 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go @@ -22,8 +22,10 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" v1helper "k8s.io/component-helpers/scheduling/corev1" + "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" + "k8s.io/kubernetes/pkg/scheduler/util" ) // NodeUnschedulable plugin filters nodes that set node.Spec.Unschedulable=true unless @@ -48,10 +50,34 @@ const ( // failed by this plugin schedulable. func (pl *NodeUnschedulable) EventsToRegister() []framework.ClusterEventWithHint { return []framework.ClusterEventWithHint{ - {Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.UpdateNodeTaint}}, + {Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.UpdateNodeTaint}, QueueingHintFn: pl.isSchedulableAfterNodeChange}, } } +// isSchedulableAfterNodeChange is invoked for all node events reported by +// an informer. It checks whether that change made a previously unschedulable +// pod schedulable. +func (pl *NodeUnschedulable) isSchedulableAfterNodeChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (framework.QueueingHint, error) { + originalNode, modifiedNode, err := util.As[*v1.Node](oldObj, newObj) + if err != nil { + logger.Error(err, "unexpected objects in isSchedulableAfterNodeChange", "oldObj", oldObj, "newObj", newObj) + return framework.QueueAfterBackoff, err + } + + originalNodeSchedulable, modifiedNodeSchedulable := false, !modifiedNode.Spec.Unschedulable + if originalNode != nil { + originalNodeSchedulable = !originalNode.Spec.Unschedulable + } + + if !originalNodeSchedulable && modifiedNodeSchedulable { + logger.V(4).Info("node was created or updated, pod may be schedulable now", "pod", klog.KObj(pod), "node", klog.KObj(modifiedNode)) + return framework.QueueAfterBackoff, nil + } + + logger.V(4).Info("node was created or updated, but it doesn't make this pod schedulable", "pod", klog.KObj(pod), "node", klog.KObj(modifiedNode)) + return framework.QueueSkip, nil +} + // Name returns name of the plugin. It is used in logs, etc. func (pl *NodeUnschedulable) Name() string { return Name @@ -61,18 +87,23 @@ func (pl *NodeUnschedulable) Name() string { func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { node := nodeInfo.Node() + if !node.Spec.Unschedulable { + return nil + } + // If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`. podToleratesUnschedulable := v1helper.TolerationsTolerateTaint(pod.Spec.Tolerations, &v1.Taint{ Key: v1.TaintNodeUnschedulable, Effect: v1.TaintEffectNoSchedule, }) - if node.Spec.Unschedulable && !podToleratesUnschedulable { + if !podToleratesUnschedulable { return framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonUnschedulable) } + return nil } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodeUnschedulable{}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go index e26401d39c2b..5db408b33ce7 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go @@ -110,15 +110,17 @@ func (pl *CSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod *v node := nodeInfo.Node() + logger := klog.FromContext(ctx) + // If CSINode doesn't exist, the predicate may read the limits from Node object csiNode, err := pl.csiNodeLister.Get(node.Name) if err != nil { // TODO: return the error once CSINode is created by default (2 releases) - klog.V(5).InfoS("Could not get a CSINode object for the node", "node", klog.KObj(node), "err", err) + logger.V(5).Info("Could not get a CSINode object for the node", "node", klog.KObj(node), "err", err) } newVolumes := make(map[string]string) - if err := pl.filterAttachableVolumes(pod, csiNode, true /* new pod */, newVolumes); err != nil { + if err := pl.filterAttachableVolumes(logger, pod, csiNode, true /* new pod */, newVolumes); err != nil { return framework.AsStatus(err) } @@ -135,7 +137,7 @@ func (pl *CSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod *v attachedVolumes := make(map[string]string) for _, existingPod := range nodeInfo.Pods { - if err := pl.filterAttachableVolumes(existingPod.Pod, csiNode, false /* existing pod */, attachedVolumes); err != nil { + if err := pl.filterAttachableVolumes(logger, existingPod.Pod, csiNode, false /* existing pod */, attachedVolumes); err != nil { return framework.AsStatus(err) } } @@ -156,7 +158,7 @@ func (pl *CSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod *v maxVolumeLimit, ok := nodeVolumeLimits[v1.ResourceName(volumeLimitKey)] if ok { currentVolumeCount := attachedVolumeCount[volumeLimitKey] - klog.V(5).InfoS("Found plugin volume limits", "node", node.Name, "volumeLimitKey", volumeLimitKey, + logger.V(5).Info("Found plugin volume limits", "node", node.Name, "volumeLimitKey", volumeLimitKey, "maxLimits", maxVolumeLimit, "currentVolumeCount", currentVolumeCount, "newVolumeCount", count, "pod", klog.KObj(pod)) if currentVolumeCount+count > int(maxVolumeLimit) { @@ -169,7 +171,7 @@ func (pl *CSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod *v } func (pl *CSILimits) filterAttachableVolumes( - pod *v1.Pod, csiNode *storagev1.CSINode, newPod bool, result map[string]string) error { + logger klog.Logger, pod *v1.Pod, csiNode *storagev1.CSINode, newPod bool, result map[string]string) error { for _, vol := range pod.Spec.Volumes { pvcName := "" isEphemeral := false @@ -190,7 +192,7 @@ func (pl *CSILimits) filterAttachableVolumes( // - If the volume is migratable and CSI migration is enabled, need to count it // as well. // - If the volume is not migratable, it will be count in non_csi filter. - if err := pl.checkAttachableInlineVolume(&vol, csiNode, pod, result); err != nil { + if err := pl.checkAttachableInlineVolume(logger, &vol, csiNode, pod, result); err != nil { return err } @@ -212,7 +214,7 @@ func (pl *CSILimits) filterAttachableVolumes( } // If the PVC is invalid, we don't count the volume because // there's no guarantee that it belongs to the running predicate. - klog.V(5).InfoS("Unable to look up PVC info", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName)) + logger.V(5).Info("Unable to look up PVC info", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName)) continue } @@ -223,9 +225,9 @@ func (pl *CSILimits) filterAttachableVolumes( } } - driverName, volumeHandle := pl.getCSIDriverInfo(csiNode, pvc) + driverName, volumeHandle := pl.getCSIDriverInfo(logger, csiNode, pvc) if driverName == "" || volumeHandle == "" { - klog.V(5).InfoS("Could not find a CSI driver name or volume handle, not counting volume") + logger.V(5).Info("Could not find a CSI driver name or volume handle, not counting volume") continue } @@ -238,7 +240,7 @@ func (pl *CSILimits) filterAttachableVolumes( // checkAttachableInlineVolume takes an inline volume and add to the result map if the // volume is migratable and CSI migration for this plugin has been enabled. -func (pl *CSILimits) checkAttachableInlineVolume(vol *v1.Volume, csiNode *storagev1.CSINode, +func (pl *CSILimits) checkAttachableInlineVolume(logger klog.Logger, vol *v1.Volume, csiNode *storagev1.CSINode, pod *v1.Pod, result map[string]string) error { if !pl.translator.IsInlineMigratable(vol) { return nil @@ -253,7 +255,7 @@ func (pl *CSILimits) checkAttachableInlineVolume(vol *v1.Volume, csiNode *storag if csiNode != nil { csiNodeName = csiNode.Name } - klog.V(5).InfoS("CSI Migration is not enabled for provisioner", "provisioner", inTreeProvisionerName, + logger.V(5).Info("CSI Migration is not enabled for provisioner", "provisioner", inTreeProvisionerName, "pod", klog.KObj(pod), "csiNode", csiNodeName) return nil } @@ -280,21 +282,21 @@ func (pl *CSILimits) checkAttachableInlineVolume(vol *v1.Volume, csiNode *storag // getCSIDriverInfo returns the CSI driver name and volume ID of a given PVC. // If the PVC is from a migrated in-tree plugin, this function will return // the information of the CSI driver that the plugin has been migrated to. -func (pl *CSILimits) getCSIDriverInfo(csiNode *storagev1.CSINode, pvc *v1.PersistentVolumeClaim) (string, string) { +func (pl *CSILimits) getCSIDriverInfo(logger klog.Logger, csiNode *storagev1.CSINode, pvc *v1.PersistentVolumeClaim) (string, string) { pvName := pvc.Spec.VolumeName if pvName == "" { - klog.V(5).InfoS("Persistent volume had no name for claim", "PVC", klog.KObj(pvc)) - return pl.getCSIDriverInfoFromSC(csiNode, pvc) + logger.V(5).Info("Persistent volume had no name for claim", "PVC", klog.KObj(pvc)) + return pl.getCSIDriverInfoFromSC(logger, csiNode, pvc) } pv, err := pl.pvLister.Get(pvName) if err != nil { - klog.V(5).InfoS("Unable to look up PV info for PVC and PV", "PVC", klog.KObj(pvc), "PV", klog.KRef("", pvName)) + logger.V(5).Info("Unable to look up PV info for PVC and PV", "PVC", klog.KObj(pvc), "PV", klog.KRef("", pvName)) // If we can't fetch PV associated with PVC, may be it got deleted // or PVC was prebound to a PVC that hasn't been created yet. // fallback to using StorageClass for volume counting - return pl.getCSIDriverInfoFromSC(csiNode, pvc) + return pl.getCSIDriverInfoFromSC(logger, csiNode, pvc) } csiSource := pv.Spec.PersistentVolumeSource.CSI @@ -306,23 +308,23 @@ func (pl *CSILimits) getCSIDriverInfo(csiNode *storagev1.CSINode, pvc *v1.Persis pluginName, err := pl.translator.GetInTreePluginNameFromSpec(pv, nil) if err != nil { - klog.V(5).InfoS("Unable to look up plugin name from PV spec", "err", err) + logger.V(5).Info("Unable to look up plugin name from PV spec", "err", err) return "", "" } if !isCSIMigrationOn(csiNode, pluginName) { - klog.V(5).InfoS("CSI Migration of plugin is not enabled", "plugin", pluginName) + logger.V(5).Info("CSI Migration of plugin is not enabled", "plugin", pluginName) return "", "" } csiPV, err := pl.translator.TranslateInTreePVToCSI(pv) if err != nil { - klog.V(5).InfoS("Unable to translate in-tree volume to CSI", "err", err) + logger.V(5).Info("Unable to translate in-tree volume to CSI", "err", err) return "", "" } if csiPV.Spec.PersistentVolumeSource.CSI == nil { - klog.V(5).InfoS("Unable to get a valid volume source for translated PV", "PV", pvName) + logger.V(5).Info("Unable to get a valid volume source for translated PV", "PV", pvName) return "", "" } @@ -333,7 +335,7 @@ func (pl *CSILimits) getCSIDriverInfo(csiNode *storagev1.CSINode, pvc *v1.Persis } // getCSIDriverInfoFromSC returns the CSI driver name and a random volume ID of a given PVC's StorageClass. -func (pl *CSILimits) getCSIDriverInfoFromSC(csiNode *storagev1.CSINode, pvc *v1.PersistentVolumeClaim) (string, string) { +func (pl *CSILimits) getCSIDriverInfoFromSC(logger klog.Logger, csiNode *storagev1.CSINode, pvc *v1.PersistentVolumeClaim) (string, string) { namespace := pvc.Namespace pvcName := pvc.Name scName := storagehelpers.GetPersistentVolumeClaimClass(pvc) @@ -341,13 +343,13 @@ func (pl *CSILimits) getCSIDriverInfoFromSC(csiNode *storagev1.CSINode, pvc *v1. // If StorageClass is not set or not found, then PVC must be using immediate binding mode // and hence it must be bound before scheduling. So it is safe to not count it. if scName == "" { - klog.V(5).InfoS("PVC has no StorageClass", "PVC", klog.KObj(pvc)) + logger.V(5).Info("PVC has no StorageClass", "PVC", klog.KObj(pvc)) return "", "" } storageClass, err := pl.scLister.Get(scName) if err != nil { - klog.V(5).InfoS("Could not get StorageClass for PVC", "PVC", klog.KObj(pvc), "err", err) + logger.V(5).Info("Could not get StorageClass for PVC", "PVC", klog.KObj(pvc), "err", err) return "", "" } @@ -359,13 +361,13 @@ func (pl *CSILimits) getCSIDriverInfoFromSC(csiNode *storagev1.CSINode, pvc *v1. provisioner := storageClass.Provisioner if pl.translator.IsMigratableIntreePluginByName(provisioner) { if !isCSIMigrationOn(csiNode, provisioner) { - klog.V(5).InfoS("CSI Migration of provisioner is not enabled", "provisioner", provisioner) + logger.V(5).Info("CSI Migration of provisioner is not enabled", "provisioner", provisioner) return "", "" } driverName, err := pl.translator.GetCSINameFromInTreeName(provisioner) if err != nil { - klog.V(5).InfoS("Unable to look up driver name from provisioner name", "provisioner", provisioner, "err", err) + logger.V(5).Info("Unable to look up driver name from provisioner name", "provisioner", provisioner, "err", err) return "", "" } return driverName, volumeHandle @@ -375,7 +377,7 @@ func (pl *CSILimits) getCSIDriverInfoFromSC(csiNode *storagev1.CSINode, pvc *v1. } // NewCSI initializes a new plugin and returns it. -func NewCSI(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewCSI(_ context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go index 763c6f45ddd7..150b21dbe3eb 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go @@ -70,36 +70,36 @@ const ( const AzureDiskName = names.AzureDiskLimits // NewAzureDisk returns function that initializes a new plugin and returns it. -func NewAzureDisk(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewAzureDisk(ctx context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() - return newNonCSILimitsWithInformerFactory(azureDiskVolumeFilterType, informerFactory, fts), nil + return newNonCSILimitsWithInformerFactory(ctx, azureDiskVolumeFilterType, informerFactory, fts), nil } // CinderName is the name of the plugin used in the plugin registry and configurations. const CinderName = names.CinderLimits // NewCinder returns function that initializes a new plugin and returns it. -func NewCinder(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewCinder(ctx context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() - return newNonCSILimitsWithInformerFactory(cinderVolumeFilterType, informerFactory, fts), nil + return newNonCSILimitsWithInformerFactory(ctx, cinderVolumeFilterType, informerFactory, fts), nil } // EBSName is the name of the plugin used in the plugin registry and configurations. const EBSName = names.EBSLimits // NewEBS returns function that initializes a new plugin and returns it. -func NewEBS(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewEBS(ctx context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() - return newNonCSILimitsWithInformerFactory(ebsVolumeFilterType, informerFactory, fts), nil + return newNonCSILimitsWithInformerFactory(ctx, ebsVolumeFilterType, informerFactory, fts), nil } // GCEPDName is the name of the plugin used in the plugin registry and configurations. const GCEPDName = names.GCEPDLimits // NewGCEPD returns function that initializes a new plugin and returns it. -func NewGCEPD(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func NewGCEPD(ctx context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() - return newNonCSILimitsWithInformerFactory(gcePDVolumeFilterType, informerFactory, fts), nil + return newNonCSILimitsWithInformerFactory(ctx, gcePDVolumeFilterType, informerFactory, fts), nil } // nonCSILimits contains information to check the max number of volumes for a plugin. @@ -125,6 +125,7 @@ var _ framework.EnqueueExtensions = &nonCSILimits{} // newNonCSILimitsWithInformerFactory returns a plugin with filter name and informer factory. func newNonCSILimitsWithInformerFactory( + ctx context.Context, filterName string, informerFactory informers.SharedInformerFactory, fts feature.Features, @@ -134,7 +135,7 @@ func newNonCSILimitsWithInformerFactory( csiNodesLister := informerFactory.Storage().V1().CSINodes().Lister() scLister := informerFactory.Storage().V1().StorageClasses().Lister() - return newNonCSILimits(filterName, csiNodesLister, scLister, pvLister, pvcLister, fts) + return newNonCSILimits(ctx, filterName, csiNodesLister, scLister, pvLister, pvcLister, fts) } // newNonCSILimits creates a plugin which evaluates whether a pod can fit based on the @@ -148,6 +149,7 @@ func newNonCSILimitsWithInformerFactory( // types, counts the number of unique volumes, and rejects the new pod if it would place the total count over // the maximum. func newNonCSILimits( + ctx context.Context, filterName string, csiNodeLister storagelisters.CSINodeLister, scLister storagelisters.StorageClassLister, @@ -155,6 +157,7 @@ func newNonCSILimits( pvcLister corelisters.PersistentVolumeClaimLister, fts feature.Features, ) framework.Plugin { + logger := klog.FromContext(ctx) var filter VolumeFilter var volumeLimitKey v1.ResourceName var name string @@ -177,14 +180,14 @@ func newNonCSILimits( filter = cinderVolumeFilter volumeLimitKey = v1.ResourceName(volumeutil.CinderVolumeLimitKey) default: - klog.ErrorS(errors.New("wrong filterName"), "Cannot create nonCSILimits plugin") + logger.Error(errors.New("wrong filterName"), "Cannot create nonCSILimits plugin") return nil } pl := &nonCSILimits{ name: name, filter: filter, volumeLimitKey: volumeLimitKey, - maxVolumeFunc: getMaxVolumeFunc(filterName), + maxVolumeFunc: getMaxVolumeFunc(logger, filterName), csiNodeLister: csiNodeLister, pvLister: pvLister, pvcLister: pvcLister, @@ -238,8 +241,9 @@ func (pl *nonCSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod return nil } + logger := klog.FromContext(ctx) newVolumes := sets.New[string]() - if err := pl.filterVolumes(pod, true /* new pod */, newVolumes); err != nil { + if err := pl.filterVolumes(logger, pod, true /* new pod */, newVolumes); err != nil { return framework.AsStatus(err) } @@ -257,7 +261,7 @@ func (pl *nonCSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod if err != nil { // we don't fail here because the CSINode object is only necessary // for determining whether the migration is enabled or not - klog.V(5).InfoS("Could not get a CSINode object for the node", "node", klog.KObj(node), "err", err) + logger.V(5).Info("Could not get a CSINode object for the node", "node", klog.KObj(node), "err", err) } } @@ -269,7 +273,7 @@ func (pl *nonCSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod // count unique volumes existingVolumes := sets.New[string]() for _, existingPod := range nodeInfo.Pods { - if err := pl.filterVolumes(existingPod.Pod, false /* existing pod */, existingVolumes); err != nil { + if err := pl.filterVolumes(logger, existingPod.Pod, false /* existing pod */, existingVolumes); err != nil { return framework.AsStatus(err) } } @@ -293,7 +297,7 @@ func (pl *nonCSILimits) Filter(ctx context.Context, _ *framework.CycleState, pod return nil } -func (pl *nonCSILimits) filterVolumes(pod *v1.Pod, newPod bool, filteredVolumes sets.Set[string]) error { +func (pl *nonCSILimits) filterVolumes(logger klog.Logger, pod *v1.Pod, newPod bool, filteredVolumes sets.Set[string]) error { volumes := pod.Spec.Volumes for i := range volumes { vol := &volumes[i] @@ -336,7 +340,7 @@ func (pl *nonCSILimits) filterVolumes(pod *v1.Pod, newPod bool, filteredVolumes } // If the PVC is invalid, we don't count the volume because // there's no guarantee that it belongs to the running predicate. - klog.V(4).InfoS("Unable to look up PVC info, assuming PVC doesn't match predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName), "err", err) + logger.V(4).Info("Unable to look up PVC info, assuming PVC doesn't match predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName), "err", err) continue } @@ -354,7 +358,7 @@ func (pl *nonCSILimits) filterVolumes(pod *v1.Pod, newPod bool, filteredVolumes // original PV where it was bound to, so we count the volume if // it belongs to the running predicate. if pl.matchProvisioner(pvc) { - klog.V(4).InfoS("PVC is not bound, assuming PVC matches predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName)) + logger.V(4).Info("PVC is not bound, assuming PVC matches predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName)) filteredVolumes.Insert(pvID) } continue @@ -365,7 +369,7 @@ func (pl *nonCSILimits) filterVolumes(pod *v1.Pod, newPod bool, filteredVolumes // If the PV is invalid and PVC belongs to the running predicate, // log the error and count the PV towards the PV limit. if pl.matchProvisioner(pvc) { - klog.V(4).InfoS("Unable to look up PV, assuming PV matches predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName), "PV", klog.KRef("", pvName), "err", err) + logger.V(4).Info("Unable to look up PV, assuming PV matches predicate when counting limits", "pod", klog.KObj(pod), "PVC", klog.KRef(pod.Namespace, pvcName), "PV", klog.KRef("", pvName), "err", err) filteredVolumes.Insert(pvID) } continue @@ -394,12 +398,12 @@ func (pl *nonCSILimits) matchProvisioner(pvc *v1.PersistentVolumeClaim) bool { } // getMaxVolLimitFromEnv checks the max PD volumes environment variable, otherwise returning a default value. -func getMaxVolLimitFromEnv() int { +func getMaxVolLimitFromEnv(logger klog.Logger) int { if rawMaxVols := os.Getenv(KubeMaxPDVols); rawMaxVols != "" { if parsedMaxVols, err := strconv.Atoi(rawMaxVols); err != nil { - klog.ErrorS(err, "Unable to parse maximum PD volumes value, using default") + logger.Error(err, "Unable to parse maximum PD volumes value, using default") } else if parsedMaxVols <= 0 { - klog.ErrorS(errors.New("maximum PD volumes is negative"), "Unable to parse maximum PD volumes value, using default") + logger.Error(errors.New("maximum PD volumes is negative"), "Unable to parse maximum PD volumes value, using default") } else { return parsedMaxVols } @@ -520,9 +524,9 @@ var cinderVolumeFilter = VolumeFilter{ }, } -func getMaxVolumeFunc(filterName string) func(node *v1.Node) int { +func getMaxVolumeFunc(logger klog.Logger, filterName string) func(node *v1.Node) int { return func(node *v1.Node) int { - maxVolumesFromEnv := getMaxVolLimitFromEnv() + maxVolumesFromEnv := getMaxVolLimitFromEnv(logger) if maxVolumesFromEnv > 0 { return maxVolumesFromEnv } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go index 17803e4ee0f5..982da6875a20 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go @@ -17,6 +17,7 @@ limitations under the License. package podtopologyspread import ( + "context" "fmt" v1 "k8s.io/api/core/v1" @@ -82,7 +83,7 @@ func (pl *PodTopologySpread) Name() string { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, plArgs runtime.Object, h framework.Handle, fts feature.Features) (framework.Plugin, error) { if h.SnapshotSharedLister() == nil { return nil, fmt.Errorf("SnapshotSharedlister is nil") } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort/priority_sort.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort/priority_sort.go index 43eaa74bd2a5..1a6cfde41402 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort/priority_sort.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort/priority_sort.go @@ -17,6 +17,7 @@ limitations under the License. package queuesort import ( + "context" "k8s.io/apimachinery/pkg/runtime" corev1helpers "k8s.io/component-helpers/scheduling/corev1" "k8s.io/kubernetes/pkg/scheduler/framework" @@ -46,6 +47,6 @@ func (pl *PrioritySort) Less(pInfo1, pInfo2 *framework.QueuedPodInfo) bool { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, handle framework.Handle) (framework.Plugin, error) { return &PrioritySort{}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/registry.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/registry.go index 718e9eb1d8ed..c5b8cc680882 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/registry.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/registry.go @@ -34,7 +34,6 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions" @@ -61,7 +60,6 @@ func NewInTreeRegistry() runtime.Registry { registry := runtime.Registry{ dynamicresources.Name: runtime.FactoryAdapter(fts, dynamicresources.New), - selectorspread.Name: selectorspread.New, imagelocality.Name: imagelocality.New, tainttoleration.Name: tainttoleration.New, nodename.Name: nodename.New, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates/scheduling_gates.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates/scheduling_gates.go index 5c0678cb0d84..1b13e0dd5032 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates/scheduling_gates.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates/scheduling_gates.go @@ -62,6 +62,6 @@ func (pl *SchedulingGates) EventsToRegister() []framework.ClusterEventWithHint { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, _ framework.Handle, fts feature.Features) (framework.Plugin, error) { return &SchedulingGates{enablePodSchedulingReadiness: fts.EnablePodSchedulingReadiness}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go deleted file mode 100644 index c50e0bfaf89f..000000000000 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go +++ /dev/null @@ -1,234 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package selectorspread - -import ( - "context" - "fmt" - - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - appslisters "k8s.io/client-go/listers/apps/v1" - corelisters "k8s.io/client-go/listers/core/v1" - utilnode "k8s.io/component-helpers/node/topology" - "k8s.io/kubernetes/pkg/scheduler/framework" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" -) - -// SelectorSpread is a plugin that calculates selector spread priority. -type SelectorSpread struct { - sharedLister framework.SharedLister - services corelisters.ServiceLister - replicationControllers corelisters.ReplicationControllerLister - replicaSets appslisters.ReplicaSetLister - statefulSets appslisters.StatefulSetLister -} - -var _ framework.PreScorePlugin = &SelectorSpread{} -var _ framework.ScorePlugin = &SelectorSpread{} - -const ( - // Name is the name of the plugin used in the plugin registry and configurations. - Name = names.SelectorSpread - // preScoreStateKey is the key in CycleState to SelectorSpread pre-computed data for Scoring. - preScoreStateKey = "PreScore" + Name - - // When zone information is present, give 2/3 of the weighting to zone spreading, 1/3 to node spreading - // TODO: Any way to justify this weighting? - zoneWeighting float64 = 2.0 / 3.0 -) - -// Name returns name of the plugin. It is used in logs, etc. -func (pl *SelectorSpread) Name() string { - return Name -} - -// preScoreState computed at PreScore and used at Score. -type preScoreState struct { - selector labels.Selector -} - -// Clone implements the mandatory Clone interface. We don't really copy the data since -// there is no need for that. -func (s *preScoreState) Clone() framework.StateData { - return s -} - -// skipSelectorSpread returns true if the pod's TopologySpreadConstraints are specified. -// Note that this doesn't take into account default constraints defined for -// the PodTopologySpread plugin. -func skipSelectorSpread(pod *v1.Pod) bool { - return len(pod.Spec.TopologySpreadConstraints) != 0 -} - -// Score invoked at the Score extension point. -// The "score" returned in this function is the matching number of pods on the `nodeName`, -// it is normalized later. -func (pl *SelectorSpread) Score(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) { - if skipSelectorSpread(pod) { - return 0, nil - } - - c, err := state.Read(preScoreStateKey) - if err != nil { - return 0, framework.AsStatus(fmt.Errorf("reading %q from cycleState: %w", preScoreStateKey, err)) - } - - s, ok := c.(*preScoreState) - if !ok { - return 0, framework.AsStatus(fmt.Errorf("cannot convert saved state to selectorspread.preScoreState")) - } - - nodeInfo, err := pl.sharedLister.NodeInfos().Get(nodeName) - if err != nil { - return 0, framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", nodeName, err)) - } - - count := countMatchingPods(pod.Namespace, s.selector, nodeInfo) - return int64(count), nil -} - -// NormalizeScore invoked after scoring all nodes. -// For this plugin, it calculates the score of each node -// based on the number of existing matching pods on the node -// where zone information is included on the nodes, it favors nodes -// in zones with fewer existing matching pods. -func (pl *SelectorSpread) NormalizeScore(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scores framework.NodeScoreList) *framework.Status { - if skipSelectorSpread(pod) { - return nil - } - - countsByZone := make(map[string]int64, 10) - maxCountByZone := int64(0) - maxCountByNodeName := int64(0) - - for i := range scores { - if scores[i].Score > maxCountByNodeName { - maxCountByNodeName = scores[i].Score - } - nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name) - if err != nil { - return framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", scores[i].Name, err)) - } - zoneID := utilnode.GetZoneKey(nodeInfo.Node()) - if zoneID == "" { - continue - } - countsByZone[zoneID] += scores[i].Score - } - - for zoneID := range countsByZone { - if countsByZone[zoneID] > maxCountByZone { - maxCountByZone = countsByZone[zoneID] - } - } - - haveZones := len(countsByZone) != 0 - - maxCountByNodeNameFloat64 := float64(maxCountByNodeName) - maxCountByZoneFloat64 := float64(maxCountByZone) - MaxNodeScoreFloat64 := float64(framework.MaxNodeScore) - - for i := range scores { - // initializing to the default/max node score of maxPriority - fScore := MaxNodeScoreFloat64 - if maxCountByNodeName > 0 { - fScore = MaxNodeScoreFloat64 * (float64(maxCountByNodeName-scores[i].Score) / maxCountByNodeNameFloat64) - } - // If there is zone information present, incorporate it - if haveZones { - nodeInfo, err := pl.sharedLister.NodeInfos().Get(scores[i].Name) - if err != nil { - return framework.AsStatus(fmt.Errorf("getting node %q from Snapshot: %w", scores[i].Name, err)) - } - - zoneID := utilnode.GetZoneKey(nodeInfo.Node()) - if zoneID != "" { - zoneScore := MaxNodeScoreFloat64 - if maxCountByZone > 0 { - zoneScore = MaxNodeScoreFloat64 * (float64(maxCountByZone-countsByZone[zoneID]) / maxCountByZoneFloat64) - } - fScore = (fScore * (1.0 - zoneWeighting)) + (zoneWeighting * zoneScore) - } - } - scores[i].Score = int64(fScore) - } - return nil -} - -// ScoreExtensions of the Score plugin. -func (pl *SelectorSpread) ScoreExtensions() framework.ScoreExtensions { - return pl -} - -// PreScore builds and writes cycle state used by Score and NormalizeScore. -func (pl *SelectorSpread) PreScore(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodes []*v1.Node) *framework.Status { - if skipSelectorSpread(pod) { - return nil - } - selector := helper.DefaultSelector( - pod, - pl.services, - pl.replicationControllers, - pl.replicaSets, - pl.statefulSets, - ) - state := &preScoreState{ - selector: selector, - } - cycleState.Write(preScoreStateKey, state) - return nil -} - -// New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { - sharedLister := handle.SnapshotSharedLister() - if sharedLister == nil { - return nil, fmt.Errorf("SnapshotSharedLister is nil") - } - sharedInformerFactory := handle.SharedInformerFactory() - if sharedInformerFactory == nil { - return nil, fmt.Errorf("SharedInformerFactory is nil") - } - return &SelectorSpread{ - sharedLister: sharedLister, - services: sharedInformerFactory.Core().V1().Services().Lister(), - replicationControllers: sharedInformerFactory.Core().V1().ReplicationControllers().Lister(), - replicaSets: sharedInformerFactory.Apps().V1().ReplicaSets().Lister(), - statefulSets: sharedInformerFactory.Apps().V1().StatefulSets().Lister(), - }, nil -} - -// countMatchingPods counts pods based on namespace and matching all selectors -func countMatchingPods(namespace string, selector labels.Selector, nodeInfo *framework.NodeInfo) int { - if len(nodeInfo.Pods) == 0 || selector.Empty() { - return 0 - } - count := 0 - for _, p := range nodeInfo.Pods { - // Ignore pods being deleted for spreading purposes - // Similar to how it is done for SelectorSpreadPriority - if namespace == p.Pod.Namespace && p.Pod.DeletionTimestamp == nil { - if selector.Matches(labels.Set(p.Pod.Labels)) { - count++ - } - } - } - return count -} diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go index 9d1bbe85caf6..edec5bd1b0a8 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go @@ -164,6 +164,6 @@ func (pl *TaintToleration) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &TaintToleration{handle: h}, nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/binder.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/binder.go index b8afe554ca81..d035b16721be 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/binder.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/binder.go @@ -523,7 +523,7 @@ func (b *volumeBinder) BindPodVolumes(ctx context.Context, assumedPod *v1.Pod, p return err } - err = wait.Poll(time.Second, b.bindTimeout, func() (bool, error) { + err = wait.PollUntilContextTimeout(ctx, time.Second, b.bindTimeout, false, func(ctx context.Context) (bool, error) { b, err := b.checkBindings(assumedPod, bindings, claimsToProvision) return b, err }) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/test_utils.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/test_utils.go index d58e36679994..a1c968d76fc6 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/test_utils.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/test_utils.go @@ -23,7 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/component-helpers/storage/volume" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) type nodeBuilder struct { @@ -115,7 +115,7 @@ func makePVC(name string, storageClassName string) pvcBuilder { Namespace: v1.NamespaceDefault, }, Spec: v1.PersistentVolumeClaimSpec{ - StorageClassName: pointer.String(storageClassName), + StorageClassName: ptr.To(storageClassName), }, }} } @@ -127,7 +127,7 @@ func (pvcb pvcBuilder) withBoundPV(pvName string) pvcBuilder { } func (pvcb pvcBuilder) withRequestStorage(request resource.Quantity) pvcBuilder { - pvcb.PersistentVolumeClaim.Spec.Resources = v1.ResourceRequirements{ + pvcb.PersistentVolumeClaim.Spec.Resources = v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceName(v1.ResourceStorage): request, }, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go index 66756b7af134..c54e4b89e3e7 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go @@ -361,7 +361,7 @@ func (pl *VolumeBinding) Unreserve(ctx context.Context, cs *framework.CycleState } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) { args, ok := plArgs.(*config.VolumeBindingArgs) if !ok { return nil, fmt.Errorf("want args to be of type VolumeBindingArgs, got %T", plArgs) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go index cfe883bd83f5..f0d25013b079 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go @@ -348,7 +348,7 @@ func (pl *VolumeRestrictions) EventsToRegister() []framework.ClusterEventWithHin } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, handle framework.Handle, fts feature.Features) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() sharedLister := handle.SnapshotSharedLister() diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone/volume_zone.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone/volume_zone.go index b0504ea7f786..c1893aa63cc7 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone/volume_zone.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone/volume_zone.go @@ -83,6 +83,16 @@ var topologyLabels = []string{ v1.LabelTopologyRegion, } +func translateToGALabel(label string) string { + if label == v1.LabelFailureDomainBetaRegion { + return v1.LabelTopologyRegion + } + if label == v1.LabelFailureDomainBetaZone { + return v1.LabelTopologyZone + } + return label +} + // Name returns name of the plugin. It is used in logs, etc. func (pl *VolumeZone) Name() string { return Name @@ -227,6 +237,10 @@ func (pl *VolumeZone) Filter(ctx context.Context, cs *framework.CycleState, pod for _, pvTopology := range podPVTopologies { v, ok := node.Labels[pvTopology.key] + if !ok { + // if we can't match the beta label, try to match pv's beta label with node's ga label + v, ok = node.Labels[translateToGALabel(pvTopology.key)] + } if !ok || !pvTopology.values.Has(v) { logger.V(10).Info("Won't schedule pod onto node due to volume (mismatch on label key)", "pod", klog.KObj(pod), "node", klog.KObj(node), "PV", klog.KRef("", pvTopology.pvName), "PVLabelKey", pvTopology.key) return framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonConflict) @@ -276,7 +290,7 @@ func (pl *VolumeZone) EventsToRegister() []framework.ClusterEventWithHint { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { +func New(_ context.Context, _ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/preemption/preemption.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/preemption/preemption.go index 15d8a34f39b2..d37443964554 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/preemption/preemption.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/preemption/preemption.go @@ -385,7 +385,7 @@ func (ev *Evaluator) prepareCandidate(ctx context.Context, c Candidate, pod *v1. klog.V(2).InfoS("Preemptor Pod preempted victim Pod", "preemptor", klog.KObj(pod), "victim", klog.KObj(victim), "node", c.Name()) } - fh.EventRecorder().Eventf(victim, pod, v1.EventTypeNormal, "Preempted", "Preempting", "Preempted by a pod on node %v", c.Name()) + fh.EventRecorder().Eventf(victim, pod, v1.EventTypeNormal, "Preempted", "Preempting", "Preempted by pod %v on node %v", pod.UID, c.Name()) } fh.Parallelizer().Until(ctx, len(c.Victims().Pods), preemptPod, ev.PluginName) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/framework.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/framework.go index f83b3d454721..4d4588ef5b8b 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/framework.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/framework.go @@ -302,7 +302,7 @@ func NewFramework(ctx context.Context, r Registry, profile *config.KubeScheduler Args: args, }) } - p, err := factory(args, f) + p, err := factory(ctx, args, f) if err != nil { return nil, fmt.Errorf("initializing plugin %q: %w", name, err) } @@ -632,12 +632,13 @@ func (f *frameworkImpl) QueueSortFunc() framework.LessFunc { // If a non-success status is returned, then the scheduling cycle is aborted. func (f *frameworkImpl) RunPreFilterPlugins(ctx context.Context, state *framework.CycleState, pod *v1.Pod) (_ *framework.PreFilterResult, status *framework.Status) { startTime := time.Now() + skipPlugins := sets.New[string]() defer func() { + state.SkipFilterPlugins = skipPlugins metrics.FrameworkExtensionPointDuration.WithLabelValues(metrics.PreFilter, status.Code().String(), f.profileName).Observe(metrics.SinceInSeconds(startTime)) }() var result *framework.PreFilterResult var pluginsWithNodes []string - skipPlugins := sets.New[string]() logger := klog.FromContext(ctx) logger = klog.LoggerWithName(logger, "PreFilter") // TODO(knelasevero): Remove duplicated keys from log entry calls @@ -671,7 +672,6 @@ func (f *frameworkImpl) RunPreFilterPlugins(ctx context.Context, state *framewor return nil, framework.NewStatus(framework.Unschedulable, msg) } } - state.SkipFilterPlugins = skipPlugins return result, nil } @@ -969,10 +969,11 @@ func (f *frameworkImpl) RunPreScorePlugins( nodes []*v1.Node, ) (status *framework.Status) { startTime := time.Now() + skipPlugins := sets.New[string]() defer func() { + state.SkipScorePlugins = skipPlugins metrics.FrameworkExtensionPointDuration.WithLabelValues(metrics.PreScore, status.Code().String(), f.profileName).Observe(metrics.SinceInSeconds(startTime)) }() - skipPlugins := sets.New[string]() logger := klog.FromContext(ctx) logger = klog.LoggerWithName(logger, "PreScore") // TODO(knelasevero): Remove duplicated keys from log entry calls @@ -991,7 +992,6 @@ func (f *frameworkImpl) RunPreScorePlugins( return framework.AsStatus(fmt.Errorf("running PreScore plugin %q: %w", pl.Name(), status.AsError())) } } - state.SkipScorePlugins = skipPlugins return nil } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/registry.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/registry.go index b0b1d855751a..b6fca3c29cd1 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/registry.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/runtime/registry.go @@ -17,6 +17,7 @@ limitations under the License. package runtime import ( + "context" "fmt" "k8s.io/apimachinery/pkg/runtime" @@ -27,16 +28,16 @@ import ( ) // PluginFactory is a function that builds a plugin. -type PluginFactory = func(configuration runtime.Object, f framework.Handle) (framework.Plugin, error) +type PluginFactory = func(ctx context.Context, configuration runtime.Object, f framework.Handle) (framework.Plugin, error) // PluginFactoryWithFts is a function that builds a plugin with certain feature gates. -type PluginFactoryWithFts func(runtime.Object, framework.Handle, plfeature.Features) (framework.Plugin, error) +type PluginFactoryWithFts func(context.Context, runtime.Object, framework.Handle, plfeature.Features) (framework.Plugin, error) // FactoryAdapter can be used to inject feature gates for a plugin that needs // them when the caller expects the older PluginFactory method. func FactoryAdapter(fts plfeature.Features, withFts PluginFactoryWithFts) PluginFactory { - return func(plArgs runtime.Object, fh framework.Handle) (framework.Plugin, error) { - return withFts(plArgs, fh, fts) + return func(ctx context.Context, plArgs runtime.Object, fh framework.Handle) (framework.Plugin, error) { + return withFts(ctx, plArgs, fh, fts) } } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/types.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/types.go index 64b83eb33a32..c72698900554 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/types.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/framework/types.go @@ -71,6 +71,7 @@ const ( PersistentVolumeClaim GVK = "PersistentVolumeClaim" PodSchedulingContext GVK = "PodSchedulingContext" ResourceClaim GVK = "ResourceClaim" + ResourceClass GVK = "ResourceClass" StorageClass GVK = "storage.k8s.io/StorageClass" CSINode GVK = "storage.k8s.io/CSINode" CSIDriver GVK = "storage.k8s.io/CSIDriver" @@ -91,13 +92,15 @@ type ClusterEventWithHint struct { // QueueingHintFn returns a hint that signals whether the event can make a Pod, // which was rejected by this plugin in the past scheduling cycle, schedulable or not. // It's called before a Pod gets moved from unschedulableQ to backoffQ or activeQ. +// If it returns an error, we'll take the returned QueueingHint as `QueueAfterBackoff` at the caller whatever we returned here so that +// we can prevent the Pod from stucking in the unschedulable pod pool. // // - `pod`: the Pod to be enqueued, which is rejected by this plugin in the past. // - `oldObj` `newObj`: the object involved in that event. // - For example, the given event is "Node deleted", the `oldObj` will be that deleted Node. // - `oldObj` is nil if the event is add event. // - `newObj` is nil if the event is delete event. -type QueueingHintFn func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) QueueingHint +type QueueingHintFn func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (QueueingHint, error) type QueueingHint int @@ -177,6 +180,7 @@ type QueuedPodInfo struct { // latency for a pod. InitialAttemptTimestamp *time.Time // If a Pod failed in a scheduling cycle, record the plugin names it failed by. + // It's registered only when the Pod is rejected in PreFilter, Filter, Reserve, or Permit (WaitOnPermit). UnschedulablePlugins sets.Set[string] // Whether the Pod is scheduling gated (by PreEnqueuePlugins) or not. Gated bool @@ -306,44 +310,54 @@ type FitError struct { const ( // NoNodeAvailableMsg is used to format message when no nodes available. NoNodeAvailableMsg = "0/%v nodes are available" - // SeparatorFormat is used to separate PreFilterMsg, FilterMsg and PostFilterMsg. - SeparatorFormat = " %v." ) // Error returns detailed information of why the pod failed to fit on each node. // A message format is "0/X nodes are available: . . ." func (f *FitError) Error() string { - reasons := make(map[string]int) - for _, status := range f.Diagnosis.NodeToStatusMap { - for _, reason := range status.Reasons() { - reasons[reason]++ - } - } - reasonMsg := fmt.Sprintf(NoNodeAvailableMsg+":", f.NumAllNodes) - // Add the messages from PreFilter plugins to reasonMsg. preFilterMsg := f.Diagnosis.PreFilterMsg if preFilterMsg != "" { - reasonMsg += fmt.Sprintf(SeparatorFormat, preFilterMsg) - } - sortReasonsHistogram := func() []string { - var reasonStrings []string - for k, v := range reasons { - reasonStrings = append(reasonStrings, fmt.Sprintf("%v %v", v, k)) + // PreFilter plugin returns unschedulable. + // Add the messages from PreFilter plugins to reasonMsg. + reasonMsg += fmt.Sprintf(" %v.", preFilterMsg) + } + + if preFilterMsg == "" { + // the scheduling cycle went through PreFilter extension point successfully. + // + // When the prefilter plugin returns unschedulable, + // the scheduling framework inserts the same unschedulable status to all nodes in NodeToStatusMap. + // So, we shouldn't add the message from NodeToStatusMap when the PreFilter failed. + // Otherwise, we will have duplicated reasons in the error message. + reasons := make(map[string]int) + for _, status := range f.Diagnosis.NodeToStatusMap { + for _, reason := range status.Reasons() { + reasons[reason]++ + } + } + + sortReasonsHistogram := func() []string { + var reasonStrings []string + for k, v := range reasons { + reasonStrings = append(reasonStrings, fmt.Sprintf("%v %v", v, k)) + } + sort.Strings(reasonStrings) + return reasonStrings + } + sortedFilterMsg := sortReasonsHistogram() + if len(sortedFilterMsg) != 0 { + reasonMsg += fmt.Sprintf(" %v.", strings.Join(sortedFilterMsg, ", ")) } - sort.Strings(reasonStrings) - return reasonStrings - } - sortedFilterMsg := sortReasonsHistogram() - if len(sortedFilterMsg) != 0 { - reasonMsg += fmt.Sprintf(SeparatorFormat, strings.Join(sortedFilterMsg, ", ")) } + // Add the messages from PostFilter plugins to reasonMsg. + // We can add this message regardless of whether the scheduling cycle fails at PreFilter or Filter + // since we may run PostFilter (if enabled) in both cases. postFilterMsg := f.Diagnosis.PostFilterMsg if postFilterMsg != "" { - reasonMsg += fmt.Sprintf(SeparatorFormat, postFilterMsg) + reasonMsg += fmt.Sprintf(" %v", postFilterMsg) } - return reasonMsg } @@ -705,21 +719,27 @@ func podWithRequiredAntiAffinity(p *v1.Pod) bool { len(affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution) != 0 } -func removeFromSlice(s []*PodInfo, k string) []*PodInfo { +func removeFromSlice(s []*PodInfo, k string) ([]*PodInfo, bool) { + var removed bool for i := range s { - k2, err := GetPodKey(s[i].Pod) + tmpKey, err := GetPodKey(s[i].Pod) if err != nil { klog.ErrorS(err, "Cannot get pod key", "pod", klog.KObj(s[i].Pod)) continue } - if k == k2 { + if k == tmpKey { // delete the element s[i] = s[len(s)-1] s = s[:len(s)-1] + removed = true break } } - return s + // resets the slices to nil so that we can do DeepEqual in unit tests. + if len(s) == 0 { + return nil, removed + } + return s, removed } // RemovePod subtracts pod information from this NodeInfo. @@ -729,27 +749,16 @@ func (n *NodeInfo) RemovePod(pod *v1.Pod) error { return err } if podWithAffinity(pod) { - n.PodsWithAffinity = removeFromSlice(n.PodsWithAffinity, k) + n.PodsWithAffinity, _ = removeFromSlice(n.PodsWithAffinity, k) } if podWithRequiredAntiAffinity(pod) { - n.PodsWithRequiredAntiAffinity = removeFromSlice(n.PodsWithRequiredAntiAffinity, k) + n.PodsWithRequiredAntiAffinity, _ = removeFromSlice(n.PodsWithRequiredAntiAffinity, k) } - for i := range n.Pods { - k2, err := GetPodKey(n.Pods[i].Pod) - if err != nil { - klog.ErrorS(err, "Cannot get pod key", "pod", klog.KObj(n.Pods[i].Pod)) - continue - } - if k == k2 { - // delete the element - n.Pods[i] = n.Pods[len(n.Pods)-1] - n.Pods = n.Pods[:len(n.Pods)-1] - - n.update(pod, -1) - n.resetSlicesIfEmpty() - return nil - } + var removed bool + if n.Pods, removed = removeFromSlice(n.Pods, k); removed { + n.update(pod, -1) + return nil } return fmt.Errorf("no corresponding pod %s in pods of node %s", pod.Name, n.node.Name) } @@ -777,19 +786,6 @@ func (n *NodeInfo) update(pod *v1.Pod, sign int64) { n.Generation = nextGeneration() } -// resets the slices to nil so that we can do DeepEqual in unit tests. -func (n *NodeInfo) resetSlicesIfEmpty() { - if len(n.PodsWithAffinity) == 0 { - n.PodsWithAffinity = nil - } - if len(n.PodsWithRequiredAntiAffinity) == 0 { - n.PodsWithRequiredAntiAffinity = nil - } - if len(n.Pods) == 0 { - n.Pods = nil - } -} - func max(a, b int64) int64 { if a >= b { return a diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go index ba3c00edd214..0c265bcf6933 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue.go @@ -165,9 +165,26 @@ type PriorityQueue struct { // inFlightPods holds the UID of all pods which have been popped out for which Done // hasn't been called yet - in other words, all pods that are currently being // processed (being scheduled, in permit, or in the binding cycle). - inFlightPods map[types.UID]inFlightPod - // receivedEvents holds the events received by the scheduling queue. - receivedEvents *list.List + // + // The values in the map are the entry of each pod in the inFlightEvents list. + // The value of that entry is the *v1.Pod at the time that scheduling of that + // pod started, which can be useful for logging or debugging. + inFlightPods map[types.UID]*list.Element + + // inFlightEvents holds the events received by the scheduling queue + // (entry value is clusterEvent) together with in-flight pods (entry + // value is *v1.Pod). Entries get added at the end while the mutex is + // locked, so they get serialized. + // + // The pod entries are added in Pop and used to track which events + // occurred after the pod scheduling attempt for that pod started. + // They get removed when the scheduling attempt is done, at which + // point all events that occurred in the meantime are processed. + // + // After removal of a pod, events at the start of the list are no + // longer needed because all of the other in-flight pods started + // later. Those events can be removed. + inFlightEvents *list.List // activeQ is heap structure that scheduler actively looks at to find pods to // schedule. Head of heap is the highest priority pod. @@ -212,11 +229,6 @@ type QueueingHintFunction struct { QueueingHintFn framework.QueueingHintFn } -type inFlightPod struct { - // previousEvent is the latest observed event when the pod is popped. - previousEvent *list.Element -} - // clusterEvent has the event and involved objects. type clusterEvent struct { event framework.ClusterEvent @@ -224,11 +236,6 @@ type clusterEvent struct { oldObj interface{} // newObj is the object that involved this event. newObj interface{} - - // inFlightPodsNum is the counter of pods referring to this cluster event. - // It is initialized with the number of Pods being scheduled when the event is received, - // and is decremented when the scheduling for those Pods are Done(). - inFlightPodsNum int } type priorityQueueOptions struct { @@ -364,8 +371,8 @@ func NewPriorityQueue( podMaxInUnschedulablePodsDuration: options.podMaxInUnschedulablePodsDuration, activeQ: heap.NewWithRecorder(podInfoKeyFunc, comp, metrics.NewActivePodsRecorder()), unschedulablePods: newUnschedulablePods(metrics.NewUnschedulablePodsRecorder(), metrics.NewGatedPodsRecorder()), - inFlightPods: make(map[types.UID]inFlightPod), - receivedEvents: list.New(), + inFlightPods: make(map[types.UID]*list.Element), + inFlightEvents: list.New(), preEnqueuePluginMap: options.preEnqueuePluginMap, queueingHintMap: options.queueingHintMap, metricsRecorder: options.metricsRecorder, @@ -426,7 +433,20 @@ func (p *PriorityQueue) isPodWorthRequeuing(logger klog.Logger, pInfo *framework continue } - switch h := hintfn.QueueingHintFn(logger, pod, oldObj, newObj); h { + h, err := hintfn.QueueingHintFn(logger, pod, oldObj, newObj) + if err != nil { + // If the QueueingHintFn returned an error, we should treat the event as QueueAfterBackoff so that we can prevent + // the Pod from stucking in the unschedulable pod pool. + oldObjMeta, newObjMeta, asErr := util.As[klog.KMetadata](oldObj, newObj) + if asErr != nil { + logger.Error(err, "QueueingHintFn returns error", "event", event, "plugin", hintfn.PluginName, "pod", klog.KObj(pod)) + } else { + logger.Error(err, "QueueingHintFn returns error", "event", event, "plugin", hintfn.PluginName, "pod", klog.KObj(pod), "oldObj", klog.KObj(oldObjMeta), "newObj", klog.KObj(newObjMeta)) + } + h = framework.QueueAfterBackoff + } + + switch h { case framework.QueueSkip: continue case framework.QueueImmediately: @@ -606,37 +626,42 @@ func (p *PriorityQueue) SchedulingCycle() int64 { // determineSchedulingHintForInFlightPod looks at the unschedulable plugins of the given Pod // and determines the scheduling hint for this Pod while checking the events that happened during in-flight. -func (p *PriorityQueue) determineSchedulingHintForInFlightPod(logger klog.Logger, pInfo *framework.QueuedPodInfo, podSchedulingCycle int64) framework.QueueingHint { - if len(pInfo.UnschedulablePlugins) == 0 { - // When there is no unschedulable plugin, we cannot have a guess which event makes this Pod schedulable. - // Here, we use the latest requestCycle so that this Pod won't be stuck in the unschedulable pod pool for a long time. - if p.receivedEvents.Len() != 0 { +func (p *PriorityQueue) determineSchedulingHintForInFlightPod(logger klog.Logger, pInfo *framework.QueuedPodInfo) framework.QueueingHint { + logger.V(5).Info("Checking events for in-flight pod", "pod", klog.KObj(pInfo.Pod), "unschedulablePlugins", pInfo.UnschedulablePlugins, "inFlightEventsSize", p.inFlightEvents.Len(), "inFlightPodsSize", len(p.inFlightPods)) + + // AddUnschedulableIfNotPresent is called with the Pod at the end of scheduling or binding. + // So, given pInfo should have been Pop()ed before, + // we can assume pInfo must be recorded in inFlightPods and thus inFlightEvents. + inFlightPod, ok := p.inFlightPods[pInfo.Pod.UID] + if !ok { + // This can happen while updating a pod. In that case pInfo.UnschedulablePlugins should + // be empty. If it is not, we may have a problem. + if len(pInfo.UnschedulablePlugins) != 0 { + logger.Error(nil, "In flight Pod isn't found in the scheduling queue. If you see this error log, it's likely a bug in the scheduler.", "pod", klog.KObj(pInfo.Pod)) + return framework.QueueAfterBackoff + } + if p.inFlightEvents.Len() > len(p.inFlightPods) { return framework.QueueAfterBackoff } return framework.QueueSkip } - inFlightPod, ok := p.inFlightPods[pInfo.Pod.UID] - if !ok { - // It shouldn't reach here unless there is a bug somewhere. - // But, set podSchedulingCycle to moveRequestCycle - // so that this Pod won't stuck in the unschedulable pod pool. - logger.Error(nil, "In flight Pod isn't found in the scheduling queue. If you see this error log, it's likely a bug in the scheduler.", "pod", klog.KObj(pInfo.Pod)) + if len(pInfo.UnschedulablePlugins) == 0 { + // No unschedulable plugins are associated with this Pod. + // Meaning something unusual (a temporal failure on kube-apiserver, etc) happened and this Pod gets moved back to the queue. + // In this case, we should retry scheduling it because this Pod may not be retried until the next flush. return framework.QueueAfterBackoff } - // AddUnschedulableIfNotPresent is called with the Pod at the end of scheduling or binding. - // So, given pInfo should have been Pop()ed before, - // we can assume pInfo must be recorded in inFlightPods. // check if there is an event that makes this Pod schedulable based on pInfo.UnschedulablePlugins. - event := p.receivedEvents.Front() - if inFlightPod.previousEvent != nil { - // only check events that happened after the Pod was popped. - event = inFlightPod.previousEvent.Next() - } schedulingHint := framework.QueueSkip - for ; event != nil; event = event.Next() { - e := event.Value.(*clusterEvent) + for event := inFlightPod.Next(); event != nil; event = event.Next() { + e, ok := event.Value.(*clusterEvent) + if !ok { + // Must be another pod. Can be ignored. + continue + } + logger.V(5).Info("Checking event for in-flight pod", "pod", klog.KObj(pInfo.Pod), "event", e.event.Label) hint := p.isPodWorthRequeuing(logger, pInfo, e.event, e.oldObj, e.newObj) if hint == framework.QueueSkip { @@ -673,7 +698,13 @@ func (p *PriorityQueue) addUnschedulableWithoutQueueingHint(logger klog.Logger, for plugin := range pInfo.UnschedulablePlugins { metrics.UnschedulableReason(plugin, pInfo.Pod.Spec.SchedulerName).Inc() } - if p.moveRequestCycle >= podSchedulingCycle { + if p.moveRequestCycle >= podSchedulingCycle || len(pInfo.UnschedulablePlugins) == 0 { + // Two cases to move a Pod to the active/backoff queue: + // - The Pod is rejected by some plugins, but a move request is received after this Pod's scheduling cycle is started. + // In this case, the received event may be make Pod schedulable and we should retry scheduling it. + // - No unschedulable plugins are associated with this Pod, + // meaning something unusual (a temporal failure on kube-apiserver, etc) happened and this Pod gets moved back to the queue. + // In this case, we should retry scheduling it because this Pod may not be retried until the next flush. if err := p.podBackoffQ.Add(pInfo); err != nil { return fmt.Errorf("error adding pod %v to the backoff queue: %v", klog.KObj(pod), err) } @@ -726,12 +757,12 @@ func (p *PriorityQueue) AddUnschedulableIfNotPresent(logger klog.Logger, pInfo * metrics.UnschedulableReason(plugin, pInfo.Pod.Spec.SchedulerName).Inc() } - // Based on isPodWorthRequeuing(), we check whether this Pod may change its scheduling result by any of events that happened during scheduling. - schedulingHint := p.determineSchedulingHintForInFlightPod(logger, pInfo, podSchedulingCycle) + // We check whether this Pod may change its scheduling result by any of events that happened during scheduling. + schedulingHint := p.determineSchedulingHintForInFlightPod(logger, pInfo) // In this case, we try to requeue this Pod to activeQ/backoffQ. queue := p.requeuePodViaQueueingHint(logger, pInfo, schedulingHint, ScheduleAttemptFailure) - logger.V(6).Info("Pod moved to an internal scheduling queue", "pod", klog.KObj(pod), "event", ScheduleAttemptFailure, "queue", queue, "schedulingCycle", podSchedulingCycle) + logger.V(3).Info("Pod moved to an internal scheduling queue", "pod", klog.KObj(pod), "event", ScheduleAttemptFailure, "queue", queue, "schedulingCycle", podSchedulingCycle, "hint", schedulingHint) if queue == activeQ { // When the Pod is moved to activeQ, need to let p.cond know so that the Pod will be pop()ed out. p.cond.Broadcast() @@ -816,16 +847,16 @@ func (p *PriorityQueue) Pop() (*framework.QueuedPodInfo, error) { pInfo := obj.(*framework.QueuedPodInfo) pInfo.Attempts++ p.schedulingCycle++ - // In flight, no move request yet. + // In flight, no concurrent events yet. if p.isSchedulingQueueHintEnabled { - p.inFlightPods[pInfo.Pod.UID] = inFlightPod{ - previousEvent: p.receivedEvents.Back(), - } + p.inFlightPods[pInfo.Pod.UID] = p.inFlightEvents.PushBack(pInfo.Pod) } + // Update metrics and reset the set of unschedulable plugins for the next attempt. for plugin := range pInfo.UnschedulablePlugins { metrics.UnschedulableReason(plugin, pInfo.Pod.Spec.SchedulerName).Dec() } + pInfo.UnschedulablePlugins.Clear() return pInfo, nil } @@ -842,7 +873,7 @@ func (p *PriorityQueue) Done(pod types.UID) { func (p *PriorityQueue) done(pod types.UID) { if !p.isSchedulingQueueHintEnabled { // do nothing if schedulingQueueHint is disabled. - // In that case, we don't have inFlightPods and receivedEvents. + // In that case, we don't have inFlightPods and inFlightEvents. return } inFlightPod, ok := p.inFlightPods[pod] @@ -852,35 +883,25 @@ func (p *PriorityQueue) done(pod types.UID) { } delete(p.inFlightPods, pod) - // remove events which is only referred from this Pod - // so that the receivedEvents map doesn't grow infinitely. - - // Find the event that we should start. - // case1. If the previousEvent is nil, it means no receivedEvents when this Pod's scheduling started. - // We start from the first event in the receivedEvents. - // case2. If the previousEvent is not nil, but the inFlightPodsNum is 0, - // this previousEvent is removed from the list already. - // We start from the first event in the receivedEvents. - event := p.receivedEvents.Front() - if inFlightPod.previousEvent != nil && inFlightPod.previousEvent.Value.(*clusterEvent).inFlightPodsNum != 0 { - // case3. If the previousEvent is not nil, and the inFlightPodsNum is not 0, - // we can start from the next event of the previousEvent. - event = inFlightPod.previousEvent.Next() - } - - for event != nil { - e := event.Value.(*clusterEvent) - // decrement inFlightPodsNum on events that happened after the Pod is popped. - e.inFlightPodsNum-- - if e.inFlightPodsNum <= 0 { - // remove the event from the list if no Pod refers to it. - eventToDelete := event - // we need to take next event before removal. - event = event.Next() - p.receivedEvents.Remove(eventToDelete) - continue + // Remove the pod from the list. + p.inFlightEvents.Remove(inFlightPod) + + // Remove events which are only referred to by this Pod + // so that the inFlightEvents list doesn't grow infinitely. + // If the pod was at the head of the list, then all + // events between it and the next pod are no longer needed + // and can be removed. + for { + e := p.inFlightEvents.Front() + if e == nil { + // Empty list. + break + } + if _, ok := e.Value.(*clusterEvent); !ok { + // A pod, must stop pruning. + break } - event = event.Next() + p.inFlightEvents.Remove(e) } } @@ -1106,16 +1127,15 @@ func (p *PriorityQueue) movePodsToActiveOrBackoffQueue(logger klog.Logger, podIn p.moveRequestCycle = p.schedulingCycle - // (no need to check the feature gate because there is always no p.inFlightPods when the feature is disabled.) - if len(p.inFlightPods) != 0 { + if p.isSchedulingQueueHintEnabled && len(p.inFlightPods) != 0 { + logger.V(5).Info("Event received while pods are in flight", "event", event.Label, "numPods", len(p.inFlightPods)) // AddUnschedulableIfNotPresent might get called for in-flight Pods later, and in // AddUnschedulableIfNotPresent we need to know whether events were // observed while scheduling them. - p.receivedEvents.PushBack(&clusterEvent{ - event: event, - inFlightPodsNum: len(p.inFlightPods), - oldObj: oldObj, - newObj: newObj, + p.inFlightEvents.PushBack(&clusterEvent{ + event: event, + oldObj: oldObj, + newObj: newObj, }) } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go index c76e1a28d642..d4871e70d7f8 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/metrics/metrics.go @@ -113,14 +113,29 @@ var ( Help: "Number of running goroutines split by the work they do such as binding.", StabilityLevel: metrics.ALPHA, }, []string{"operation"}) + + // PodSchedulingDuration is deprecated as of Kubernetes v1.28, and will be removed + // in v1.31. Please use PodSchedulingSLIDuration instead. PodSchedulingDuration = metrics.NewHistogramVec( &metrics.HistogramOpts{ Subsystem: SchedulerSubsystem, Name: "pod_scheduling_duration_seconds", Help: "E2e latency for a pod being scheduled which may include multiple scheduling attempts.", // Start with 10ms with the last bucket being [~88m, Inf). + Buckets: metrics.ExponentialBuckets(0.01, 2, 20), + StabilityLevel: metrics.STABLE, + DeprecatedVersion: "1.28.0", + }, + []string{"attempts"}) + + PodSchedulingSLIDuration = metrics.NewHistogramVec( + &metrics.HistogramOpts{ + Subsystem: SchedulerSubsystem, + Name: "pod_scheduling_sli_duration_seconds", + Help: "E2e latency for a pod being scheduled, from the time the pod enters the scheduling queue an d might involve multiple scheduling attempts.", + // Start with 10ms with the last bucket being [~88m, Inf). Buckets: metrics.ExponentialBuckets(0.01, 2, 20), - StabilityLevel: metrics.STABLE, + StabilityLevel: metrics.BETA, }, []string{"attempts"}) @@ -206,6 +221,7 @@ var ( PreemptionAttempts, pendingPods, PodSchedulingDuration, + PodSchedulingSLIDuration, PodSchedulingAttempts, FrameworkExtensionPointDuration, PluginExecutionDuration, diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go index 525e1af86320..89a4e0ae1c1b 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/schedule_one.go @@ -269,6 +269,17 @@ func (sched *Scheduler) bindingCycle( // Run "permit" plugins. if status := fwk.WaitOnPermit(ctx, assumedPod); !status.IsSuccess() { + if status.IsUnschedulable() { + fitErr := &framework.FitError{ + NumAllNodes: 1, + Pod: assumedPodInfo.Pod, + Diagnosis: framework.Diagnosis{ + NodeToStatusMap: framework.NodeToStatusMap{scheduleResult.SuggestedHost: status}, + UnschedulablePlugins: sets.New(status.FailedPlugin()), + }, + } + return framework.NewStatus(status.Code()).WithError(fitErr) + } return status } @@ -288,6 +299,7 @@ func (sched *Scheduler) bindingCycle( metrics.PodSchedulingAttempts.Observe(float64(assumedPodInfo.Attempts)) if assumedPodInfo.InitialAttemptTimestamp != nil { metrics.PodSchedulingDuration.WithLabelValues(getAttemptsLabel(assumedPodInfo)).Observe(metrics.SinceInSeconds(*assumedPodInfo.InitialAttemptTimestamp)) + metrics.PodSchedulingSLIDuration.WithLabelValues(getAttemptsLabel(assumedPodInfo)).Observe(metrics.SinceInSeconds(*assumedPodInfo.InitialAttemptTimestamp)) } // Run "postbind" plugins. fwk.RunPostBindPlugins(ctx, state, assumedPod, scheduleResult.SuggestedHost) @@ -437,6 +449,12 @@ func (sched *Scheduler) findNodesThatFitPod(ctx context.Context, fwk framework.F if !s.IsUnschedulable() { return nil, diagnosis, s.AsError() } + // All nodes in NodeToStatusMap will have the same status so that they can be handled in the preemption. + // Some non trivial refactoring is needed to avoid this copy. + for _, n := range allNodes { + diagnosis.NodeToStatusMap[n.Node().Name] = s + } + // Record the messages from PreFilter in Diagnosis.PreFilterMsg. msg := s.Message() diagnosis.PreFilterMsg = msg diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go index 60d345af046d..635335855d5f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/scheduler.go @@ -23,6 +23,7 @@ import ( "time" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -363,8 +364,8 @@ func New(ctx context.Context, // defaultQueueingHintFn is the default queueing hint function. // It always returns QueueAfterBackoff as the queueing hint. -var defaultQueueingHintFn = func(_ klog.Logger, _ *v1.Pod, _, _ interface{}) framework.QueueingHint { - return framework.QueueAfterBackoff +var defaultQueueingHintFn = func(_ klog.Logger, _ *v1.Pod, _, _ interface{}) (framework.QueueingHint, error) { + return framework.QueueAfterBackoff, nil } func buildQueueingHintMap(es []framework.EnqueueExtensions) internalqueue.QueueingHintMap { @@ -498,5 +499,16 @@ func newPodInformer(cs clientset.Interface, resyncPeriod time.Duration) cache.Sh tweakListOptions := func(options *metav1.ListOptions) { options.FieldSelector = selector } - return coreinformers.NewFilteredPodInformer(cs, metav1.NamespaceAll, resyncPeriod, cache.Indexers{}, tweakListOptions) + informer := coreinformers.NewFilteredPodInformer(cs, metav1.NamespaceAll, resyncPeriod, cache.Indexers{}, tweakListOptions) + + // Dropping `.metadata.managedFields` to improve memory usage. + // The Extract workflow (i.e. `ExtractPod`) should be unused. + trim := func(obj interface{}) (interface{}, error) { + if accessor, err := meta.Accessor(obj); err == nil { + accessor.SetManagedFields(nil) + } + return obj, nil + } + informer.SetTransform(trim) + return informer } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/util/utils.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/util/utils.go index 967c248355d8..e14b4e77453c 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/util/utils.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/scheduler/util/utils.go @@ -25,7 +25,6 @@ import ( v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/net" @@ -167,7 +166,7 @@ func IsScalarResourceName(name v1.ResourceName) bool { // nil objects are allowed and will be converted to nil. // For oldObj, cache.DeletedFinalStateUnknown is handled and the // object stored in it will be converted instead. -func As[T runtime.Object](oldObj, newobj interface{}) (T, T, error) { +func As[T any](oldObj, newobj interface{}) (T, T, error) { var oldTyped T var newTyped T var ok bool diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go index 75130a8628c9..80a5f32a877f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go @@ -23,7 +23,7 @@ import ( // Import the crypto/sha512 algorithm for the docker image parser to work with 384 and 512 sha hashes _ "crypto/sha512" - dockerref "github.com/docker/distribution/reference" + dockerref "github.com/distribution/reference" ) // ParseImageName parses a docker image string into three parts: repo, tag and digest. diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go index ef3c98258ac8..a390deec6d1f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher.go @@ -287,7 +287,9 @@ func (c *csiAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMo if c.csiClient == nil { c.csiClient, err = newCsiDriverClient(csiDriverName(csiSource.Driver)) if err != nil { - return errors.New(log("attacher.MountDevice failed to create newCsiDriverClient: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return volumetypes.NewTransientOperationFailure(log("attacher.MountDevice failed to create newCsiDriverClient: %v", err)) } } csi := c.csiClient @@ -607,7 +609,9 @@ func (c *csiAttacher) UnmountDevice(deviceMountPath string) error { if c.csiClient == nil { c.csiClient, err = newCsiDriverClient(csiDriverName(driverName)) if err != nil { - return errors.New(log("attacher.UnmountDevice failed to create newCsiDriverClient: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return volumetypes.NewTransientOperationFailure(log("attacher.UnmountDevice failed to create newCsiDriverClient: %v", err)) } } csi := c.csiClient diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go index 3e68b7bb27a6..fa2570b42c1f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_block.go @@ -319,7 +319,9 @@ func (m *csiBlockMapper) SetUpDevice() (string, error) { csiClient, err := m.csiClientGetter.Get() if err != nil { - return "", errors.New(log("blockMapper.SetUpDevice failed to get CSI client: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return "", volumetypes.NewTransientOperationFailure(log("blockMapper.SetUpDevice failed to get CSI client: %v", err)) } // Call NodeStageVolume @@ -379,7 +381,9 @@ func (m *csiBlockMapper) MapPodDevice() (string, error) { csiClient, err := m.csiClientGetter.Get() if err != nil { - return "", errors.New(log("blockMapper.MapPodDevice failed to get CSI client: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return "", volumetypes.NewTransientOperationFailure(log("blockMapper.MapPodDevice failed to get CSI client: %v", err)) } // Call NodePublishVolume @@ -444,7 +448,9 @@ func (m *csiBlockMapper) TearDownDevice(globalMapPath, devicePath string) error csiClient, err := m.csiClientGetter.Get() if err != nil { - return errors.New(log("blockMapper.TearDownDevice failed to get CSI client: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return volumetypes.NewTransientOperationFailure(log("blockMapper.TearDownDevice failed to get CSI client: %v", err)) } // Call NodeUnstageVolume @@ -506,7 +512,9 @@ func (m *csiBlockMapper) UnmapPodDevice() error { csiClient, err := m.csiClientGetter.Get() if err != nil { - return errors.New(log("blockMapper.UnmapPodDevice failed to get CSI client: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return volumetypes.NewTransientOperationFailure(log("blockMapper.UnmapPodDevice failed to get CSI client: %v", err)) } ctx, cancel := createCSIOperationContext(m.spec, csiTimeout) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go index b61e2fd2813b..1703e5447834 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go @@ -26,6 +26,7 @@ import ( servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics" "k8s.io/kubernetes/pkg/volume" volumeutil "k8s.io/kubernetes/pkg/volume/util" + volumetypes "k8s.io/kubernetes/pkg/volume/util/types" ) var _ volume.MetricsProvider = &metricsCsi{} @@ -60,7 +61,9 @@ func (mc *metricsCsi) GetMetrics() (*volume.Metrics, error) { // Get CSI client csiClient, err := mc.csiClientGetter.Get() if err != nil { - return nil, err + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return nil, volumetypes.NewTransientOperationFailure(err.Error()) } // Check whether "GET_VOLUME_STATS" is set volumeStatsSet, err := csiClient.NodeSupportsVolumeStats(ctx) diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go index 468f882b8845..a1afdfa21737 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go @@ -105,6 +105,8 @@ func (c *csiMountMgr) SetUpAt(dir string, mounterArgs volume.MounterArgs) error csi, err := c.csiClientGetter.Get() if err != nil { + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 return volumetypes.NewTransientOperationFailure(log("mounter.SetUpAt failed to get CSI client: %v", err)) } @@ -419,7 +421,9 @@ func (c *csiMountMgr) TearDownAt(dir string) error { volID := c.volumeID csi, err := c.csiClientGetter.Get() if err != nil { - return errors.New(log("Unmounter.TearDownAt failed to get CSI client: %v", err)) + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return volumetypes.NewTransientOperationFailure(log("Unmounter.TearDownAt failed to get CSI client: %v", err)) } // Could not get spec info on whether this is a migrated operation because c.spec is nil diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go index 2556517276e6..ec3e62cf623f 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go @@ -157,7 +157,12 @@ func (h *RegistrationHandler) validateVersions(callerName, pluginName string, en } // Validate version - newDriverHighestVersion, err := highestSupportedVersion(versions) + // CSI currently only has version 0.x and 1.x (see https://github.com/container-storage-interface/spec/releases). + // Therefore any driver claiming version 2.x+ is ignored as an unsupported versions. + // Future 1.x versions of CSI are supposed to be backwards compatible so this version of Kubernetes will work with any 1.x driver + // (or 0.x), but it may not work with 2.x drivers (because 2.x does not have to be backwards compatible with 1.x). + // CSI v0.x is no longer supported as of Kubernetes v1.17 in accordance with deprecation policy set out in Kubernetes v1.13. + newDriverHighestVersion, err := utilversion.HighestSupportedVersion(versions) if err != nil { return nil, errors.New(log("%s for CSI driver %q failed. None of the versions specified %q are supported. err=%v", callerName, pluginName, versions, err)) } @@ -858,44 +863,6 @@ func unregisterDriver(driverName string) error { return nil } -// Return the highest supported version -func highestSupportedVersion(versions []string) (*utilversion.Version, error) { - if len(versions) == 0 { - return nil, errors.New(log("CSI driver reporting empty array for supported versions")) - } - - var highestSupportedVersion *utilversion.Version - var theErr error - for i := len(versions) - 1; i >= 0; i-- { - currentHighestVer, err := utilversion.ParseGeneric(versions[i]) - if err != nil { - theErr = err - continue - } - if currentHighestVer.Major() > 1 { - // CSI currently only has version 0.x and 1.x (see https://github.com/container-storage-interface/spec/releases). - // Therefore any driver claiming version 2.x+ is ignored as an unsupported versions. - // Future 1.x versions of CSI are supposed to be backwards compatible so this version of Kubernetes will work with any 1.x driver - // (or 0.x), but it may not work with 2.x drivers (because 2.x does not have to be backwards compatible with 1.x). - continue - } - if highestSupportedVersion == nil || highestSupportedVersion.LessThan(currentHighestVer) { - highestSupportedVersion = currentHighestVer - } - } - - if highestSupportedVersion == nil { - return nil, fmt.Errorf("could not find a highest supported version from versions (%v) reported by this driver: %v", versions, theErr) - } - - if highestSupportedVersion.Major() != 1 { - // CSI v0.x is no longer supported as of Kubernetes v1.17 in - // accordance with deprecation policy set out in Kubernetes v1.13 - return nil, fmt.Errorf("highest supported version reported by driver is %v, must be v1.x", highestSupportedVersion) - } - return highestSupportedVersion, nil -} - // waitForAPIServerForever waits forever to get a CSINode instance as a proxy // for a healthy APIServer func waitForAPIServerForever(client clientset.Interface, nodeName types.NodeName) error { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go index 206eac9a1fa7..262b4774f439 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/csi/expander.go @@ -46,7 +46,9 @@ func (c *csiPlugin) NodeExpand(resizeOptions volume.NodeResizeOptions) (bool, er csClient, err := newCsiDriverClient(csiDriverName(csiSource.Driver)) if err != nil { - return false, err + // Treat the absence of the CSI driver as a transient error + // See https://github.com/kubernetes/kubernetes/issues/120268 + return false, volumetypes.NewTransientOperationFailure(err.Error()) } fsVolume, err := util.CheckVolumeModeFilesystem(resizeOptions.VolumeSpec) if err != nil { diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/plugins.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/plugins.go index 0b7b4e87e1cb..14cee160a630 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/plugins.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/plugins.go @@ -1057,7 +1057,7 @@ func NewPersistentVolumeRecyclerPodTemplate() *v1.Pod { Containers: []v1.Container{ { Name: "pv-recycler", - Image: "registry.k8s.io/debian-base:v2.0.0", + Image: "registry.k8s.io/build-image/debian-base:bookworm-v1.0.0", Command: []string{"/bin/sh"}, Args: []string{"-c", "test -e /scrub && find /scrub -mindepth 1 -delete && test -z \"$(ls -A /scrub)\" || exit 1"}, VolumeMounts: []v1.VolumeMount{ diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go index 7d40ce590fe3..bf02de632fb9 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_windows.go @@ -76,8 +76,10 @@ func getUpperPath(path string) string { // Check whether a directory/file is a link type or not // LinkType could be SymbolicLink, Junction, or HardLink func isLinkPath(path string) (bool, error) { - cmd := fmt.Sprintf("(Get-Item -LiteralPath %q).LinkType", path) - output, err := exec.Command("powershell", "/c", cmd).CombinedOutput() + cmd := exec.Command("powershell", "/c", "$ErrorActionPreference = 'Stop'; (Get-Item -Force -LiteralPath $env:linkpath).LinkType") + cmd.Env = append(os.Environ(), fmt.Sprintf("linkpath=%s", path)) + klog.V(8).Infof("Executing command: %q", cmd.String()) + output, err := cmd.CombinedOutput() if err != nil { return false, err } @@ -115,8 +117,10 @@ func evalSymlink(path string) (string, error) { } // This command will give the target path of a given symlink // The -Force parameter will allow Get-Item to also evaluate hidden folders, like AppData. - cmd := fmt.Sprintf("(Get-Item -Force -LiteralPath %q).Target", upperpath) - output, err := exec.Command("powershell", "/c", cmd).CombinedOutput() + cmd := exec.Command("powershell", "/c", "$ErrorActionPreference = 'Stop'; (Get-Item -Force -LiteralPath $env:linkpath).Target") + cmd.Env = append(os.Environ(), fmt.Sprintf("linkpath=%s", upperpath)) + klog.V(8).Infof("Executing command: %q", cmd.String()) + output, err := cmd.CombinedOutput() if err != nil { return "", err } diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/util.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/util.go index 05415215b16e..601dc6460134 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/util.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/pkg/volume/util/util.go @@ -709,11 +709,15 @@ func HasMountRefs(mountPath string, mountRefs []string) bool { func WriteVolumeCache(deviceMountPath string, exec utilexec.Interface) error { // If runtime os is windows, execute Write-VolumeCache powershell command on the disk if runtime.GOOS == "windows" { - cmd := fmt.Sprintf("Get-Volume -FilePath %s | Write-Volumecache", deviceMountPath) - output, err := exec.Command("powershell", "/c", cmd).CombinedOutput() - klog.Infof("command (%q) execeuted: %v, output: %q", cmd, err, string(output)) + cmdString := "Get-Volume -FilePath $env:mountpath | Write-Volumecache" + cmd := exec.Command("powershell", "/c", cmdString) + env := append(os.Environ(), fmt.Sprintf("mountpath=%s", deviceMountPath)) + cmd.SetEnv(env) + klog.V(8).Infof("Executing command: %q", cmdString) + output, err := cmd.CombinedOutput() + klog.Infof("command (%q) execeuted: %v, output: %q", cmdString, err, string(output)) if err != nil { - return fmt.Errorf("command (%q) failed: %v, output: %q", cmd, err, string(output)) + return fmt.Errorf("command (%q) failed: %v, output: %q", cmdString, err, string(output)) } } // For linux runtime, it skips because unmount will automatically flush disk data diff --git a/cluster-autoscaler/vendor/k8s.io/kubernetes/test/utils/runners.go b/cluster-autoscaler/vendor/k8s.io/kubernetes/test/utils/runners.go index 3cbc8a7bba20..cfc2bc116340 100644 --- a/cluster-autoscaler/vendor/k8s.io/kubernetes/test/utils/runners.go +++ b/cluster-autoscaler/vendor/k8s.io/kubernetes/test/utils/runners.go @@ -1502,7 +1502,7 @@ func makeUnboundPersistentVolumeClaim(storageClass string) *v1.PersistentVolumeC Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany}, StorageClassName: &storageClass, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceName(v1.ResourceStorage): resource.MustParse("1Gi"), }, diff --git a/cluster-autoscaler/vendor/k8s.io/mount-utils/mount_windows.go b/cluster-autoscaler/vendor/k8s.io/mount-utils/mount_windows.go index e5a03ecff839..02a963b1b1fc 100644 --- a/cluster-autoscaler/vendor/k8s.io/mount-utils/mount_windows.go +++ b/cluster-autoscaler/vendor/k8s.io/mount-utils/mount_windows.go @@ -287,14 +287,20 @@ func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target fstype = "NTFS" } - // format disk if it is unformatted(raw) - formatOptionsUnwrapped := "" if len(formatOptions) > 0 { - formatOptionsUnwrapped = " " + strings.Join(formatOptions, " ") + return fmt.Errorf("diskMount: formatOptions are not supported on Windows") } - cmd := fmt.Sprintf("Get-Disk -Number %s | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle GPT -PassThru"+ - " | New-Partition -UseMaximumSize | Format-Volume -FileSystem %s -Confirm:$false%s", source, fstype, formatOptionsUnwrapped) - if output, err := mounter.Exec.Command("powershell", "/c", cmd).CombinedOutput(); err != nil { + + cmdString := "Get-Disk -Number $env:source | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle GPT -PassThru" + + " | New-Partition -UseMaximumSize | Format-Volume -FileSystem $env:fstype -Confirm:$false" + cmd := mounter.Exec.Command("powershell", "/c", cmdString) + env := append(os.Environ(), + fmt.Sprintf("source=%s", source), + fmt.Sprintf("fstype=%s", fstype), + ) + cmd.SetEnv(env) + klog.V(8).Infof("Executing command: %q", cmdString) + if output, err := cmd.CombinedOutput(); err != nil { return fmt.Errorf("diskMount: format disk failed, error: %v, output: %q", err, string(output)) } klog.V(4).Infof("diskMount: Disk successfully formatted, disk: %q, fstype: %q", source, fstype) @@ -310,8 +316,10 @@ func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target // ListVolumesOnDisk - returns back list of volumes(volumeIDs) in the disk (requested in diskID). func ListVolumesOnDisk(diskID string) (volumeIDs []string, err error) { // If a Disk has multiple volumes, Get-Volume may not return items in the same order. - cmd := fmt.Sprintf("(Get-Disk -DeviceId %s | Get-Partition | Get-Volume | Sort-Object -Property UniqueId).UniqueId", diskID) - output, err := exec.Command("powershell", "/c", cmd).CombinedOutput() + cmd := exec.Command("powershell", "/c", "(Get-Disk -DeviceId $env:diskID | Get-Partition | Get-Volume | Sort-Object -Property UniqueId).UniqueId") + cmd.Env = append(os.Environ(), fmt.Sprintf("diskID=%s", diskID)) + klog.V(8).Infof("Executing command: %q", cmd.String()) + output, err := cmd.CombinedOutput() klog.V(4).Infof("ListVolumesOnDisk id from %s: %s", diskID, string(output)) if err != nil { return []string{}, fmt.Errorf("error list volumes on disk. cmd: %s, output: %s, error: %v", cmd, string(output), err) diff --git a/cluster-autoscaler/vendor/k8s.io/utils/pointer/pointer.go b/cluster-autoscaler/vendor/k8s.io/utils/pointer/pointer.go index b8103223adc0..b673a642576c 100644 --- a/cluster-autoscaler/vendor/k8s.io/utils/pointer/pointer.go +++ b/cluster-autoscaler/vendor/k8s.io/utils/pointer/pointer.go @@ -14,12 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Deprecated: Use functions in k8s.io/utils/ptr instead: ptr.To to obtain +// a pointer, ptr.Deref to dereference a pointer, ptr.Equal to compare +// dereferenced pointers. package pointer import ( - "fmt" - "reflect" "time" + + "k8s.io/utils/ptr" ) // AllPtrFieldsNil tests whether all pointer fields in a struct are nil. This is useful when, @@ -28,383 +31,219 @@ import ( // // This function is only valid for structs and pointers to structs. Any other // type will cause a panic. Passing a typed nil pointer will return true. -func AllPtrFieldsNil(obj interface{}) bool { - v := reflect.ValueOf(obj) - if !v.IsValid() { - panic(fmt.Sprintf("reflect.ValueOf() produced a non-valid Value for %#v", obj)) - } - if v.Kind() == reflect.Ptr { - if v.IsNil() { - return true - } - v = v.Elem() - } - for i := 0; i < v.NumField(); i++ { - if v.Field(i).Kind() == reflect.Ptr && !v.Field(i).IsNil() { - return false - } - } - return true -} - -// Int returns a pointer to an int -func Int(i int) *int { - return &i -} +// +// Deprecated: Use ptr.AllPtrFieldsNil instead. +var AllPtrFieldsNil = ptr.AllPtrFieldsNil + +// Int returns a pointer to an int. +var Int = ptr.To[int] // IntPtr is a function variable referring to Int. // -// Deprecated: Use Int instead. +// Deprecated: Use ptr.To instead. var IntPtr = Int // for back-compat // IntDeref dereferences the int ptr and returns it if not nil, or else // returns def. -func IntDeref(ptr *int, def int) int { - if ptr != nil { - return *ptr - } - return def -} +var IntDeref = ptr.Deref[int] // IntPtrDerefOr is a function variable referring to IntDeref. // -// Deprecated: Use IntDeref instead. +// Deprecated: Use ptr.Deref instead. var IntPtrDerefOr = IntDeref // for back-compat // Int32 returns a pointer to an int32. -func Int32(i int32) *int32 { - return &i -} +var Int32 = ptr.To[int32] // Int32Ptr is a function variable referring to Int32. // -// Deprecated: Use Int32 instead. +// Deprecated: Use ptr.To instead. var Int32Ptr = Int32 // for back-compat // Int32Deref dereferences the int32 ptr and returns it if not nil, or else // returns def. -func Int32Deref(ptr *int32, def int32) int32 { - if ptr != nil { - return *ptr - } - return def -} +var Int32Deref = ptr.Deref[int32] // Int32PtrDerefOr is a function variable referring to Int32Deref. // -// Deprecated: Use Int32Deref instead. +// Deprecated: Use ptr.Deref instead. var Int32PtrDerefOr = Int32Deref // for back-compat // Int32Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Int32Equal(a, b *int32) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Int32Equal = ptr.Equal[int32] // Uint returns a pointer to an uint -func Uint(i uint) *uint { - return &i -} +var Uint = ptr.To[uint] // UintPtr is a function variable referring to Uint. // -// Deprecated: Use Uint instead. +// Deprecated: Use ptr.To instead. var UintPtr = Uint // for back-compat // UintDeref dereferences the uint ptr and returns it if not nil, or else // returns def. -func UintDeref(ptr *uint, def uint) uint { - if ptr != nil { - return *ptr - } - return def -} +var UintDeref = ptr.Deref[uint] // UintPtrDerefOr is a function variable referring to UintDeref. // -// Deprecated: Use UintDeref instead. +// Deprecated: Use ptr.Deref instead. var UintPtrDerefOr = UintDeref // for back-compat // Uint32 returns a pointer to an uint32. -func Uint32(i uint32) *uint32 { - return &i -} +var Uint32 = ptr.To[uint32] // Uint32Ptr is a function variable referring to Uint32. // -// Deprecated: Use Uint32 instead. +// Deprecated: Use ptr.To instead. var Uint32Ptr = Uint32 // for back-compat // Uint32Deref dereferences the uint32 ptr and returns it if not nil, or else // returns def. -func Uint32Deref(ptr *uint32, def uint32) uint32 { - if ptr != nil { - return *ptr - } - return def -} +var Uint32Deref = ptr.Deref[uint32] // Uint32PtrDerefOr is a function variable referring to Uint32Deref. // -// Deprecated: Use Uint32Deref instead. +// Deprecated: Use ptr.Deref instead. var Uint32PtrDerefOr = Uint32Deref // for back-compat // Uint32Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Uint32Equal(a, b *uint32) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Uint32Equal = ptr.Equal[uint32] // Int64 returns a pointer to an int64. -func Int64(i int64) *int64 { - return &i -} +var Int64 = ptr.To[int64] // Int64Ptr is a function variable referring to Int64. // -// Deprecated: Use Int64 instead. +// Deprecated: Use ptr.To instead. var Int64Ptr = Int64 // for back-compat // Int64Deref dereferences the int64 ptr and returns it if not nil, or else // returns def. -func Int64Deref(ptr *int64, def int64) int64 { - if ptr != nil { - return *ptr - } - return def -} +var Int64Deref = ptr.Deref[int64] // Int64PtrDerefOr is a function variable referring to Int64Deref. // -// Deprecated: Use Int64Deref instead. +// Deprecated: Use ptr.Deref instead. var Int64PtrDerefOr = Int64Deref // for back-compat // Int64Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Int64Equal(a, b *int64) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Int64Equal = ptr.Equal[int64] // Uint64 returns a pointer to an uint64. -func Uint64(i uint64) *uint64 { - return &i -} +var Uint64 = ptr.To[uint64] // Uint64Ptr is a function variable referring to Uint64. // -// Deprecated: Use Uint64 instead. +// Deprecated: Use ptr.To instead. var Uint64Ptr = Uint64 // for back-compat // Uint64Deref dereferences the uint64 ptr and returns it if not nil, or else // returns def. -func Uint64Deref(ptr *uint64, def uint64) uint64 { - if ptr != nil { - return *ptr - } - return def -} +var Uint64Deref = ptr.Deref[uint64] // Uint64PtrDerefOr is a function variable referring to Uint64Deref. // -// Deprecated: Use Uint64Deref instead. +// Deprecated: Use ptr.Deref instead. var Uint64PtrDerefOr = Uint64Deref // for back-compat // Uint64Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Uint64Equal(a, b *uint64) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Uint64Equal = ptr.Equal[uint64] // Bool returns a pointer to a bool. -func Bool(b bool) *bool { - return &b -} +var Bool = ptr.To[bool] // BoolPtr is a function variable referring to Bool. // -// Deprecated: Use Bool instead. +// Deprecated: Use ptr.To instead. var BoolPtr = Bool // for back-compat // BoolDeref dereferences the bool ptr and returns it if not nil, or else // returns def. -func BoolDeref(ptr *bool, def bool) bool { - if ptr != nil { - return *ptr - } - return def -} +var BoolDeref = ptr.Deref[bool] // BoolPtrDerefOr is a function variable referring to BoolDeref. // -// Deprecated: Use BoolDeref instead. +// Deprecated: Use ptr.Deref instead. var BoolPtrDerefOr = BoolDeref // for back-compat // BoolEqual returns true if both arguments are nil or both arguments // dereference to the same value. -func BoolEqual(a, b *bool) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var BoolEqual = ptr.Equal[bool] // String returns a pointer to a string. -func String(s string) *string { - return &s -} +var String = ptr.To[string] // StringPtr is a function variable referring to String. // -// Deprecated: Use String instead. +// Deprecated: Use ptr.To instead. var StringPtr = String // for back-compat // StringDeref dereferences the string ptr and returns it if not nil, or else // returns def. -func StringDeref(ptr *string, def string) string { - if ptr != nil { - return *ptr - } - return def -} +var StringDeref = ptr.Deref[string] // StringPtrDerefOr is a function variable referring to StringDeref. // -// Deprecated: Use StringDeref instead. +// Deprecated: Use ptr.Deref instead. var StringPtrDerefOr = StringDeref // for back-compat // StringEqual returns true if both arguments are nil or both arguments // dereference to the same value. -func StringEqual(a, b *string) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var StringEqual = ptr.Equal[string] // Float32 returns a pointer to a float32. -func Float32(i float32) *float32 { - return &i -} +var Float32 = ptr.To[float32] // Float32Ptr is a function variable referring to Float32. // -// Deprecated: Use Float32 instead. +// Deprecated: Use ptr.To instead. var Float32Ptr = Float32 // Float32Deref dereferences the float32 ptr and returns it if not nil, or else // returns def. -func Float32Deref(ptr *float32, def float32) float32 { - if ptr != nil { - return *ptr - } - return def -} +var Float32Deref = ptr.Deref[float32] // Float32PtrDerefOr is a function variable referring to Float32Deref. // -// Deprecated: Use Float32Deref instead. +// Deprecated: Use ptr.Deref instead. var Float32PtrDerefOr = Float32Deref // for back-compat // Float32Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Float32Equal(a, b *float32) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Float32Equal = ptr.Equal[float32] // Float64 returns a pointer to a float64. -func Float64(i float64) *float64 { - return &i -} +var Float64 = ptr.To[float64] // Float64Ptr is a function variable referring to Float64. // -// Deprecated: Use Float64 instead. +// Deprecated: Use ptr.To instead. var Float64Ptr = Float64 // Float64Deref dereferences the float64 ptr and returns it if not nil, or else // returns def. -func Float64Deref(ptr *float64, def float64) float64 { - if ptr != nil { - return *ptr - } - return def -} +var Float64Deref = ptr.Deref[float64] // Float64PtrDerefOr is a function variable referring to Float64Deref. // -// Deprecated: Use Float64Deref instead. +// Deprecated: Use ptr.Deref instead. var Float64PtrDerefOr = Float64Deref // for back-compat // Float64Equal returns true if both arguments are nil or both arguments // dereference to the same value. -func Float64Equal(a, b *float64) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var Float64Equal = ptr.Equal[float64] // Duration returns a pointer to a time.Duration. -func Duration(d time.Duration) *time.Duration { - return &d -} +var Duration = ptr.To[time.Duration] // DurationDeref dereferences the time.Duration ptr and returns it if not nil, or else // returns def. -func DurationDeref(ptr *time.Duration, def time.Duration) time.Duration { - if ptr != nil { - return *ptr - } - return def -} +var DurationDeref = ptr.Deref[time.Duration] // DurationEqual returns true if both arguments are nil or both arguments // dereference to the same value. -func DurationEqual(a, b *time.Duration) bool { - if (a == nil) != (b == nil) { - return false - } - if a == nil { - return true - } - return *a == *b -} +var DurationEqual = ptr.Equal[time.Duration] diff --git a/cluster-autoscaler/vendor/k8s.io/utils/ptr/OWNERS b/cluster-autoscaler/vendor/k8s.io/utils/ptr/OWNERS new file mode 100644 index 000000000000..0d6392752af2 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/utils/ptr/OWNERS @@ -0,0 +1,10 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- apelisse +- stewart-yu +- thockin +reviewers: +- apelisse +- stewart-yu +- thockin diff --git a/cluster-autoscaler/vendor/k8s.io/utils/ptr/README.md b/cluster-autoscaler/vendor/k8s.io/utils/ptr/README.md new file mode 100644 index 000000000000..2ca8073dc737 --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/utils/ptr/README.md @@ -0,0 +1,3 @@ +# Pointer + +This package provides some functions for pointer-based operations. diff --git a/cluster-autoscaler/vendor/k8s.io/utils/ptr/ptr.go b/cluster-autoscaler/vendor/k8s.io/utils/ptr/ptr.go new file mode 100644 index 000000000000..659ed3b9e2df --- /dev/null +++ b/cluster-autoscaler/vendor/k8s.io/utils/ptr/ptr.go @@ -0,0 +1,73 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package ptr + +import ( + "fmt" + "reflect" +) + +// AllPtrFieldsNil tests whether all pointer fields in a struct are nil. This is useful when, +// for example, an API struct is handled by plugins which need to distinguish +// "no plugin accepted this spec" from "this spec is empty". +// +// This function is only valid for structs and pointers to structs. Any other +// type will cause a panic. Passing a typed nil pointer will return true. +func AllPtrFieldsNil(obj interface{}) bool { + v := reflect.ValueOf(obj) + if !v.IsValid() { + panic(fmt.Sprintf("reflect.ValueOf() produced a non-valid Value for %#v", obj)) + } + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return true + } + v = v.Elem() + } + for i := 0; i < v.NumField(); i++ { + if v.Field(i).Kind() == reflect.Ptr && !v.Field(i).IsNil() { + return false + } + } + return true +} + +// To returns a pointer to the given value. +func To[T any](v T) *T { + return &v +} + +// Deref dereferences ptr and returns the value it points to if no nil, or else +// returns def. +func Deref[T any](ptr *T, def T) T { + if ptr != nil { + return *ptr + } + return def +} + +// Equal returns true if both arguments are nil or both arguments +// dereference to the same value. +func Equal[T comparable](a, b *T) bool { + if (a == nil) != (b == nil) { + return false + } + if a == nil { + return true + } + return *a == *b +} diff --git a/cluster-autoscaler/vendor/modules.txt b/cluster-autoscaler/vendor/modules.txt index e0d22fc0b65e..ac951aebf8d8 100644 --- a/cluster-autoscaler/vendor/modules.txt +++ b/cluster-autoscaler/vendor/modules.txt @@ -8,7 +8,6 @@ cloud.google.com/go/compute/metadata ## explicit github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute -github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-03-01/compute github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice @@ -216,10 +215,11 @@ github.com/digitalocean/godo # github.com/dimchansky/utfbom v1.1.1 ## explicit github.com/dimchansky/utfbom +# github.com/distribution/reference v0.5.0 +## explicit; go 1.20 +github.com/distribution/reference # github.com/docker/distribution v2.8.2+incompatible ## explicit -github.com/docker/distribution/digestset -github.com/docker/distribution/reference # github.com/docker/go-units v0.5.0 ## explicit github.com/docker/go-units @@ -344,17 +344,21 @@ github.com/google/cadvisor/utils/sysfs github.com/google/cadvisor/utils/sysinfo github.com/google/cadvisor/version github.com/google/cadvisor/watcher -# github.com/google/cel-go v0.16.0 +# github.com/google/cel-go v0.17.6 ## explicit; go 1.18 github.com/google/cel-go/cel github.com/google/cel-go/checker github.com/google/cel-go/checker/decls github.com/google/cel-go/common +github.com/google/cel-go/common/ast github.com/google/cel-go/common/containers github.com/google/cel-go/common/debug +github.com/google/cel-go/common/decls +github.com/google/cel-go/common/functions github.com/google/cel-go/common/operators github.com/google/cel-go/common/overloads github.com/google/cel-go/common/runes +github.com/google/cel-go/common/stdlib github.com/google/cel-go/common/types github.com/google/cel-go/common/types/pb github.com/google/cel-go/common/types/ref @@ -402,6 +406,9 @@ github.com/googleapis/gax-go/v2 github.com/googleapis/gax-go/v2/apierror github.com/googleapis/gax-go/v2/apierror/internal/proto github.com/googleapis/gax-go/v2/internal +# github.com/gorilla/websocket v1.5.0 +## explicit; go 1.12 +github.com/gorilla/websocket # github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 ## explicit github.com/grpc-ecosystem/go-grpc-prometheus @@ -519,7 +526,7 @@ github.com/onsi/gomega/types # github.com/opencontainers/go-digest v1.0.0 ## explicit; go 1.13 github.com/opencontainers/go-digest -# github.com/opencontainers/runc v1.1.7 +# github.com/opencontainers/runc v1.1.9 ## explicit; go 1.17 github.com/opencontainers/runc/libcontainer github.com/opencontainers/runc/libcontainer/apparmor @@ -549,11 +556,10 @@ github.com/opencontainers/runc/types # github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78 ## explicit github.com/opencontainers/runtime-spec/specs-go -# github.com/opencontainers/selinux v1.10.0 -## explicit; go 1.13 +# github.com/opencontainers/selinux v1.11.0 +## explicit; go 1.19 github.com/opencontainers/selinux/go-selinux github.com/opencontainers/selinux/go-selinux/label -github.com/opencontainers/selinux/pkg/pwalk github.com/opencontainers/selinux/pkg/pwalkdir # github.com/pkg/errors v0.9.1 ## explicit @@ -622,8 +628,8 @@ github.com/vishvananda/netlink/nl # github.com/vishvananda/netns v0.0.4 ## explicit; go 1.17 github.com/vishvananda/netns -# github.com/vmware/govmomi v0.30.0 -## explicit; go 1.17 +# github.com/vmware/govmomi v0.30.6 +## explicit; go 1.19 github.com/vmware/govmomi/find github.com/vmware/govmomi/history github.com/vmware/govmomi/internal @@ -772,7 +778,7 @@ go.uber.org/zap/internal/color go.uber.org/zap/internal/exit go.uber.org/zap/zapcore go.uber.org/zap/zapgrpc -# golang.org/x/crypto v0.12.0 +# golang.org/x/crypto v0.13.0 ## explicit; go 1.17 golang.org/x/crypto/cryptobyte golang.org/x/crypto/cryptobyte/asn1 @@ -792,7 +798,7 @@ golang.org/x/exp/slices golang.org/x/mod/internal/lazyregexp golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.13.0 +# golang.org/x/net v0.15.0 ## explicit; go 1.17 golang.org/x/net/bpf golang.org/x/net/context @@ -821,7 +827,7 @@ golang.org/x/oauth2/jwt # golang.org/x/sync v0.3.0 ## explicit; go 1.17 golang.org/x/sync/singleflight -# golang.org/x/sys v0.11.0 +# golang.org/x/sys v0.12.0 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -831,10 +837,10 @@ golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry golang.org/x/sys/windows/svc -# golang.org/x/term v0.11.0 +# golang.org/x/term v0.12.0 ## explicit; go 1.17 golang.org/x/term -# golang.org/x/text v0.12.0 +# golang.org/x/text v0.13.0 ## explicit; go 1.17 golang.org/x/text/encoding golang.org/x/text/encoding/charmap @@ -990,7 +996,7 @@ google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/protobuf v1.30.0 +# google.golang.org/protobuf v1.31.0 ## explicit; go 1.11 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext @@ -1050,7 +1056,7 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/api v0.28.0 => k8s.io/api v0.28.0 +# k8s.io/api v0.29.0-alpha.1 => k8s.io/api v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -1084,7 +1090,6 @@ k8s.io/api/discovery/v1beta1 k8s.io/api/events/v1 k8s.io/api/events/v1beta1 k8s.io/api/extensions/v1beta1 -k8s.io/api/flowcontrol/v1alpha1 k8s.io/api/flowcontrol/v1beta1 k8s.io/api/flowcontrol/v1beta2 k8s.io/api/flowcontrol/v1beta3 @@ -1106,10 +1111,10 @@ k8s.io/api/scheduling/v1beta1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.28.0 +# k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/apiextensions-apiserver/pkg/features -# k8s.io/apimachinery v0.28.0 => k8s.io/apimachinery v0.28.0 +# k8s.io/apimachinery v0.29.0-alpha.1 => k8s.io/apimachinery v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -1172,7 +1177,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.28.0 => k8s.io/apiserver v0.28.0 +# k8s.io/apiserver v0.29.0-alpha.1 => k8s.io/apiserver v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/cel @@ -1317,7 +1322,7 @@ k8s.io/apiserver/plugin/pkg/audit/truncate k8s.io/apiserver/plugin/pkg/audit/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook -# k8s.io/client-go v0.28.0 => k8s.io/client-go v0.28.0 +# k8s.io/client-go v0.29.0-alpha.1 => k8s.io/client-go v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1alpha1 @@ -1343,7 +1348,6 @@ k8s.io/client-go/applyconfigurations/discovery/v1beta1 k8s.io/client-go/applyconfigurations/events/v1 k8s.io/client-go/applyconfigurations/events/v1beta1 k8s.io/client-go/applyconfigurations/extensions/v1beta1 -k8s.io/client-go/applyconfigurations/flowcontrol/v1alpha1 k8s.io/client-go/applyconfigurations/flowcontrol/v1beta1 k8s.io/client-go/applyconfigurations/flowcontrol/v1beta2 k8s.io/client-go/applyconfigurations/flowcontrol/v1beta3 @@ -1411,7 +1415,6 @@ k8s.io/client-go/informers/events/v1beta1 k8s.io/client-go/informers/extensions k8s.io/client-go/informers/extensions/v1beta1 k8s.io/client-go/informers/flowcontrol -k8s.io/client-go/informers/flowcontrol/v1alpha1 k8s.io/client-go/informers/flowcontrol/v1beta1 k8s.io/client-go/informers/flowcontrol/v1beta2 k8s.io/client-go/informers/flowcontrol/v1beta3 @@ -1502,8 +1505,6 @@ k8s.io/client-go/kubernetes/typed/events/v1beta1 k8s.io/client-go/kubernetes/typed/events/v1beta1/fake k8s.io/client-go/kubernetes/typed/extensions/v1beta1 k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake -k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1 -k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1/fake k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1 k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/fake k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2 @@ -1570,7 +1571,6 @@ k8s.io/client-go/listers/discovery/v1beta1 k8s.io/client-go/listers/events/v1 k8s.io/client-go/listers/events/v1beta1 k8s.io/client-go/listers/extensions/v1beta1 -k8s.io/client-go/listers/flowcontrol/v1alpha1 k8s.io/client-go/listers/flowcontrol/v1beta1 k8s.io/client-go/listers/flowcontrol/v1beta2 k8s.io/client-go/listers/flowcontrol/v1beta3 @@ -1633,6 +1633,7 @@ k8s.io/client-go/tools/remotecommand k8s.io/client-go/tools/watch k8s.io/client-go/transport k8s.io/client-go/transport/spdy +k8s.io/client-go/transport/websocket k8s.io/client-go/util/cert k8s.io/client-go/util/certificate k8s.io/client-go/util/certificate/csr @@ -1643,7 +1644,7 @@ k8s.io/client-go/util/homedir k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/cloud-provider v0.28.0 => k8s.io/cloud-provider v0.28.0 +# k8s.io/cloud-provider v0.29.0-alpha.1 => k8s.io/cloud-provider v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/cloud-provider k8s.io/cloud-provider/api @@ -1666,7 +1667,7 @@ k8s.io/cloud-provider/volume/helpers # k8s.io/cloud-provider-aws v1.27.0 ## explicit; go 1.20 k8s.io/cloud-provider-aws/pkg/providers/v1 -# k8s.io/code-generator v0.28.0 => k8s.io/code-generator v0.28.0 +# k8s.io/code-generator v0.29.0-alpha.1 => k8s.io/code-generator v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/code-generator k8s.io/code-generator/cmd/applyconfiguration-gen @@ -1704,7 +1705,7 @@ k8s.io/code-generator/cmd/set-gen k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/util k8s.io/code-generator/third_party/forked/golang/reflect -# k8s.io/component-base v0.28.0 => k8s.io/component-base v0.28.0 +# k8s.io/component-base v0.29.0-alpha.1 => k8s.io/component-base v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/component-base/cli/flag k8s.io/component-base/codec @@ -1734,7 +1735,7 @@ k8s.io/component-base/tracing k8s.io/component-base/tracing/api/v1 k8s.io/component-base/version k8s.io/component-base/version/verflag -# k8s.io/component-helpers v0.28.0 => k8s.io/component-helpers v0.28.0 +# k8s.io/component-helpers v0.29.0-alpha.1 => k8s.io/component-helpers v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/component-helpers/apimachinery/lease k8s.io/component-helpers/node/topology @@ -1744,7 +1745,7 @@ k8s.io/component-helpers/scheduling/corev1 k8s.io/component-helpers/scheduling/corev1/nodeaffinity k8s.io/component-helpers/storage/ephemeral k8s.io/component-helpers/storage/volume -# k8s.io/controller-manager v0.28.0 => k8s.io/controller-manager v0.28.0 +# k8s.io/controller-manager v0.29.0-alpha.1 => k8s.io/controller-manager v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/controller-manager/config k8s.io/controller-manager/config/v1 @@ -1756,19 +1757,19 @@ k8s.io/controller-manager/pkg/features k8s.io/controller-manager/pkg/features/register k8s.io/controller-manager/pkg/leadermigration/config k8s.io/controller-manager/pkg/leadermigration/options -# k8s.io/cri-api v0.28.0 => k8s.io/cri-api v0.28.0 +# k8s.io/cri-api v0.29.0-alpha.1 => k8s.io/cri-api v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/cri-api/pkg/apis k8s.io/cri-api/pkg/apis/runtime/v1 k8s.io/cri-api/pkg/errors -# k8s.io/csi-translation-lib v0.27.0 => k8s.io/csi-translation-lib v0.28.0 +# k8s.io/csi-translation-lib v0.27.0 => k8s.io/csi-translation-lib v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/csi-translation-lib k8s.io/csi-translation-lib/plugins -# k8s.io/dynamic-resource-allocation v0.0.0 => k8s.io/dynamic-resource-allocation v0.28.0 +# k8s.io/dynamic-resource-allocation v0.0.0 => k8s.io/dynamic-resource-allocation v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/dynamic-resource-allocation/resourceclaim -# k8s.io/gengo v0.0.0-20220902162205-c0856e24416d +# k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 ## explicit; go 1.13 k8s.io/gengo/args k8s.io/gengo/examples/deepcopy-gen/generators @@ -1788,13 +1789,13 @@ k8s.io/klog/v2/internal/clock k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity -# k8s.io/kms v0.28.0 => k8s.io/kms v0.28.0 +# k8s.io/kms v0.29.0-alpha.1 => k8s.io/kms v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/kms/apis/v1beta1 k8s.io/kms/apis/v2 k8s.io/kms/pkg/service k8s.io/kms/pkg/util -# k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 +# k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f ## explicit; go 1.19 k8s.io/kube-openapi/cmd/openapi-gen/args k8s.io/kube-openapi/pkg/builder @@ -1820,15 +1821,14 @@ k8s.io/kube-openapi/pkg/validation/errors k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson -# k8s.io/kube-scheduler v0.0.0 => k8s.io/kube-scheduler v0.28.0 +# k8s.io/kube-scheduler v0.0.0 => k8s.io/kube-scheduler v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/kube-scheduler/config/v1 -k8s.io/kube-scheduler/config/v1beta3 k8s.io/kube-scheduler/extender/v1 -# k8s.io/kubectl v0.0.0 => k8s.io/kubectl v0.28.0 +# k8s.io/kubectl v0.0.0 => k8s.io/kubectl v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/kubectl/pkg/scale -# k8s.io/kubelet v0.28.0 => k8s.io/kubelet v0.28.0 +# k8s.io/kubelet v0.29.0-alpha.1 => k8s.io/kubelet v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/kubelet/config/v1 k8s.io/kubelet/config/v1alpha1 @@ -1849,7 +1849,8 @@ k8s.io/kubelet/pkg/apis/stats/v1alpha1 k8s.io/kubelet/pkg/cri/streaming k8s.io/kubelet/pkg/cri/streaming/portforward k8s.io/kubelet/pkg/cri/streaming/remotecommand -# k8s.io/kubernetes v1.28.0 +k8s.io/kubelet/pkg/types +# k8s.io/kubernetes v1.29.0-alpha.1 ## explicit; go 1.20 k8s.io/kubernetes/cmd/kubelet/app k8s.io/kubernetes/cmd/kubelet/app/options @@ -2015,7 +2016,6 @@ k8s.io/kubernetes/pkg/scheduler/apis/config k8s.io/kubernetes/pkg/scheduler/apis/config/latest k8s.io/kubernetes/pkg/scheduler/apis/config/scheme k8s.io/kubernetes/pkg/scheduler/apis/config/v1 -k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta3 k8s.io/kubernetes/pkg/scheduler/apis/config/validation k8s.io/kubernetes/pkg/scheduler/framework k8s.io/kubernetes/pkg/scheduler/framework/parallelize @@ -2037,7 +2037,6 @@ k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates -k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding/metrics @@ -2108,7 +2107,7 @@ k8s.io/kubernetes/pkg/volume/vsphere_volume k8s.io/kubernetes/pkg/windows/service k8s.io/kubernetes/test/utils k8s.io/kubernetes/third_party/forked/golang/expansion -# k8s.io/legacy-cloud-providers v0.0.0 => k8s.io/legacy-cloud-providers v0.28.0 +# k8s.io/legacy-cloud-providers v0.0.0 => k8s.io/legacy-cloud-providers v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/legacy-cloud-providers/azure k8s.io/legacy-cloud-providers/azure/auth @@ -2150,10 +2149,10 @@ k8s.io/legacy-cloud-providers/gce/gcpcredential k8s.io/legacy-cloud-providers/vsphere k8s.io/legacy-cloud-providers/vsphere/vclib k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers -# k8s.io/mount-utils v0.26.0-alpha.0 => k8s.io/mount-utils v0.28.0 +# k8s.io/mount-utils v0.26.0-alpha.0 => k8s.io/mount-utils v0.29.0-alpha.1 ## explicit; go 1.20 k8s.io/mount-utils -# k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 +# k8s.io/utils v0.0.0-20230726121419-3b25d923346b ## explicit; go 1.18 k8s.io/utils/buffer k8s.io/utils/clock @@ -2171,11 +2170,12 @@ k8s.io/utils/net k8s.io/utils/nsenter k8s.io/utils/path k8s.io/utils/pointer +k8s.io/utils/ptr k8s.io/utils/strings k8s.io/utils/strings/slices k8s.io/utils/trace -# sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 -## explicit; go 1.17 +# sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 +## explicit; go 1.20 sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics @@ -2237,7 +2237,7 @@ sigs.k8s.io/cloud-provider-azure/pkg/version ## explicit; go 1.18 sigs.k8s.io/json sigs.k8s.io/json/internal/golang/encoding/json -# sigs.k8s.io/structured-merge-diff/v4 v4.2.3 +# sigs.k8s.io/structured-merge-diff/v4 v4.3.0 ## explicit; go 1.13 sigs.k8s.io/structured-merge-diff/v4/fieldpath sigs.k8s.io/structured-merge-diff/v4/merge @@ -2250,34 +2250,33 @@ sigs.k8s.io/yaml # github.com/aws/aws-sdk-go/service/eks => github.com/aws/aws-sdk-go/service/eks v1.38.49 # github.com/digitalocean/godo => github.com/digitalocean/godo v1.27.0 # github.com/rancher/go-rancher => github.com/rancher/go-rancher v0.1.0 -# k8s.io/api => k8s.io/api v0.28.0 -# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.0 -# k8s.io/apimachinery => k8s.io/apimachinery v0.28.0 -# k8s.io/apiserver => k8s.io/apiserver v0.28.0 -# k8s.io/cli-runtime => k8s.io/cli-runtime v0.28.0 -# k8s.io/client-go => k8s.io/client-go v0.28.0 -# k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.0 -# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.28.0 -# k8s.io/code-generator => k8s.io/code-generator v0.28.0 -# k8s.io/component-base => k8s.io/component-base v0.28.0 -# k8s.io/component-helpers => k8s.io/component-helpers v0.28.0 -# k8s.io/controller-manager => k8s.io/controller-manager v0.28.0 -# k8s.io/cri-api => k8s.io/cri-api v0.28.0 -# k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.0 -# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.28.0 -# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.28.0 -# k8s.io/kube-proxy => k8s.io/kube-proxy v0.28.0 -# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.0 -# k8s.io/kubectl => k8s.io/kubectl v0.28.0 -# k8s.io/kubelet => k8s.io/kubelet v0.28.0 -# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.28.0 -# k8s.io/metrics => k8s.io/metrics v0.28.0 -# k8s.io/mount-utils => k8s.io/mount-utils v0.28.0 -# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.28.0 -# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.28.0 -# k8s.io/sample-controller => k8s.io/sample-controller v0.28.0 -# k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.28.0 -# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.0 -# k8s.io/kms => k8s.io/kms v0.28.0 -# k8s.io/noderesourcetopology-api => k8s.io/noderesourcetopology-api v0.27.0 -# k8s.io/endpointslice => k8s.io/endpointslice v0.28.0 +# k8s.io/api => k8s.io/api v0.29.0-alpha.1 +# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.29.0-alpha.1 +# k8s.io/apimachinery => k8s.io/apimachinery v0.29.0-alpha.1 +# k8s.io/apiserver => k8s.io/apiserver v0.29.0-alpha.1 +# k8s.io/cli-runtime => k8s.io/cli-runtime v0.29.0-alpha.1 +# k8s.io/client-go => k8s.io/client-go v0.29.0-alpha.1 +# k8s.io/cloud-provider => k8s.io/cloud-provider v0.29.0-alpha.1 +# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.29.0-alpha.1 +# k8s.io/code-generator => k8s.io/code-generator v0.29.0-alpha.1 +# k8s.io/component-base => k8s.io/component-base v0.29.0-alpha.1 +# k8s.io/component-helpers => k8s.io/component-helpers v0.29.0-alpha.1 +# k8s.io/controller-manager => k8s.io/controller-manager v0.29.0-alpha.1 +# k8s.io/cri-api => k8s.io/cri-api v0.29.0-alpha.1 +# k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.29.0-alpha.1 +# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.29.0-alpha.1 +# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.29.0-alpha.1 +# k8s.io/kube-proxy => k8s.io/kube-proxy v0.29.0-alpha.1 +# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.29.0-alpha.1 +# k8s.io/kubectl => k8s.io/kubectl v0.29.0-alpha.1 +# k8s.io/kubelet => k8s.io/kubelet v0.29.0-alpha.1 +# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.29.0-alpha.1 +# k8s.io/metrics => k8s.io/metrics v0.29.0-alpha.1 +# k8s.io/mount-utils => k8s.io/mount-utils v0.29.0-alpha.1 +# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.29.0-alpha.1 +# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.29.0-alpha.1 +# k8s.io/sample-controller => k8s.io/sample-controller v0.29.0-alpha.1 +# k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.29.0-alpha.1 +# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.29.0-alpha.1 +# k8s.io/kms => k8s.io/kms v0.29.0-alpha.1 +# k8s.io/endpointslice => k8s.io/endpointslice v0.29.0-alpha.1 diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/client.go b/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/client.go index 541e6a5aa148..845a38c11dfd 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/client.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/client.go @@ -120,7 +120,7 @@ type grpcTunnel struct { stream client.ProxyService_ProxyClient sendLock sync.Mutex recvLock sync.Mutex - clientConn clientConn + grpcConn clientConn pendingDial pendingDialManager conns connectionManager @@ -197,7 +197,7 @@ func CreateSingleUseGrpcTunnelWithContext(createCtx, tunnelCtx context.Context, func newUnstartedTunnel(stream client.ProxyService_ProxyClient, c clientConn) *grpcTunnel { t := grpcTunnel{ stream: stream, - clientConn: c, + grpcConn: c, pendingDial: pendingDialManager{pendingDials: make(map[int64]pendingDial)}, conns: connectionManager{conns: make(map[int64]*conn)}, readTimeoutSeconds: 10, @@ -238,7 +238,7 @@ func (t *grpcTunnel) closeMetric() { func (t *grpcTunnel) serve(tunnelCtx context.Context) { defer func() { - t.clientConn.Close() + t.grpcConn.Close() // A connection in t.conns after serve() returns means // we never received a CLOSE_RSP for it, so we need to @@ -278,7 +278,7 @@ func (t *grpcTunnel) serve(tunnelCtx context.Context) { // 2. grpcTunnel.DialContext() returned early due to a dial timeout or the client canceling the context // // In either scenario, we should return here and close the tunnel as it is no longer needed. - kvs := []interface{}{"dialID", resp.Random, "connectID", resp.ConnectID} + kvs := []interface{}{"dialID", resp.Random, "connectionID", resp.ConnectID} if resp.Error != "" { kvs = append(kvs, "error", resp.Error) } @@ -349,14 +349,7 @@ func (t *grpcTunnel) serve(tunnelCtx context.Context) { if !ok { klog.ErrorS(nil, "Connection not recognized", "connectionID", resp.ConnectID, "packetType", "DATA") - t.Send(&client.Packet{ - Type: client.PacketType_CLOSE_REQ, - Payload: &client.Packet_CloseRequest{ - CloseRequest: &client.CloseRequest{ - ConnectID: resp.ConnectID, - }, - }, - }) + t.sendCloseRequest(resp.ConnectID) continue } timer := time.NewTimer((time.Duration)(t.readTimeoutSeconds) * time.Second) @@ -448,9 +441,8 @@ func (t *grpcTunnel) dialContext(requestCtx context.Context, protocol, address s klog.V(5).Infoln("DIAL_REQ sent to proxy server") c := &conn{ - tunnel: t, - random: random, - closeTunnel: t.closeTunnel, + tunnel: t, + random: random, } select { @@ -464,11 +456,17 @@ func (t *grpcTunnel) dialContext(requestCtx context.Context, protocol, address s t.conns.add(res.connid, c) case <-time.After(30 * time.Second): klog.V(5).InfoS("Timed out waiting for DialResp", "dialID", random) - go t.closeDial(random) + go func() { + defer t.closeTunnel() + t.sendDialClose(random) + }() return nil, &dialFailure{"dial timeout, backstop", metrics.DialFailureTimeout} case <-requestCtx.Done(): klog.V(5).InfoS("Context canceled waiting for DialResp", "ctxErr", requestCtx.Err(), "dialID", random) - go t.closeDial(random) + go func() { + defer t.closeTunnel() + t.sendDialClose(random) + }() return nil, &dialFailure{"dial timeout, context", metrics.DialFailureContext} case <-t.done: klog.V(5).InfoS("Tunnel closed while waiting for DialResp", "dialID", random) @@ -483,7 +481,21 @@ func (t *grpcTunnel) Done() <-chan struct{} { } // Send a best-effort DIAL_CLS request for the given dial ID. -func (t *grpcTunnel) closeDial(dialID int64) { + +func (t *grpcTunnel) sendCloseRequest(connID int64) error { + req := &client.Packet{ + Type: client.PacketType_CLOSE_REQ, + Payload: &client.Packet_CloseRequest{ + CloseRequest: &client.CloseRequest{ + ConnectID: connID, + }, + }, + } + klog.V(5).InfoS("[tracing] send req", "type", req.Type) + return t.Send(req) +} + +func (t *grpcTunnel) sendDialClose(dialID int64) error { req := &client.Packet{ Type: client.PacketType_DIAL_CLS, Payload: &client.Packet_CloseDial{ @@ -492,15 +504,13 @@ func (t *grpcTunnel) closeDial(dialID int64) { }, }, } - if err := t.Send(req); err != nil { - klog.V(5).InfoS("Failed to send DIAL_CLS", "err", err, "dialID", dialID) - } - t.closeTunnel() + klog.V(5).InfoS("[tracing] send req", "type", req.Type) + return t.Send(req) } func (t *grpcTunnel) closeTunnel() { atomic.StoreUint32(&t.closing, 1) - t.clientConn.Close() + t.grpcConn.Close() } func (t *grpcTunnel) isClosing() bool { diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/conn.go b/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/conn.go index f4d3f788652d..013515617ba1 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/conn.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/conn.go @@ -20,6 +20,7 @@ import ( "errors" "io" "net" + "sync/atomic" "time" "k8s.io/klog/v2" @@ -31,25 +32,31 @@ import ( // successful delivery of CLOSE_REQ. const CloseTimeout = 10 * time.Second +var errConnTunnelClosed = errors.New("tunnel closed") var errConnCloseTimeout = errors.New("close timeout") // conn is an implementation of net.Conn, where the data is transported // over an established tunnel defined by a gRPC service ProxyService. type conn struct { - tunnel *grpcTunnel - connID int64 - random int64 - readCh chan []byte + tunnel *grpcTunnel + // connID is set when a successful DIAL_RSP is received + connID int64 + // random (dialID) is always initialized + random int64 + readCh chan []byte + // On receiving CLOSE_RSP, closeCh will be sent any error message and closed. closeCh chan string rdata []byte - // closeTunnel is an optional callback to close the underlying grpc connection. - closeTunnel func() + // closing is an atomic bool represented as a 0 or 1, and set to true when the connection is being closed. + // closing should only be accessed through atomic methods. + // TODO: switch this to an atomic.Bool once the client is exclusively buit with go1.19+ + closing uint32 } var _ net.Conn = &conn{} -// Write sends the data thru the connection over proxy service +// Write sends the data through the connection over proxy service func (c *conn) Write(data []byte) (n int, err error) { req := &client.Packet{ Type: client.PacketType_DATA, @@ -116,40 +123,23 @@ func (c *conn) SetWriteDeadline(t time.Time) error { return errors.New("not implemented") } -// Close closes the connection. It also sends CLOSE_REQ packet over -// proxy service to notify remote to drop the connection. +// Close closes the connection, sends best-effort close signal to proxy +// service, and frees resources. func (c *conn) Close() error { - klog.V(4).Infoln("closing connection") - if c.closeTunnel != nil { - defer c.closeTunnel() + old := atomic.SwapUint32(&c.closing, 1) + if old != 0 { + // prevent duplicate messages + return nil } + klog.V(4).Infoln("closing connection", "dialID", c.random, "connectionID", c.connID) + + defer c.tunnel.closeTunnel() - var req *client.Packet if c.connID != 0 { - req = &client.Packet{ - Type: client.PacketType_CLOSE_REQ, - Payload: &client.Packet_CloseRequest{ - CloseRequest: &client.CloseRequest{ - ConnectID: c.connID, - }, - }, - } + c.tunnel.sendCloseRequest(c.connID) } else { // Never received a DIAL response so no connection ID. - req = &client.Packet{ - Type: client.PacketType_DIAL_CLS, - Payload: &client.Packet_CloseDial{ - CloseDial: &client.CloseDial{ - Random: c.random, - }, - }, - } - } - - klog.V(5).InfoS("[tracing] send req", "type", req.Type) - - if err := c.tunnel.Send(req); err != nil { - return err + c.tunnel.sendDialClose(c.random) } select { @@ -158,6 +148,8 @@ func (c *conn) Close() error { return errors.New(errMsg) } return nil + case <-c.tunnel.Done(): + return errConnTunnelClosed case <-time.After(CloseTimeout): } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/conflict.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/conflict.go index 75a492d8ea85..f1aa258609e4 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/conflict.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/conflict.go @@ -112,7 +112,7 @@ func ConflictsFromManagers(sets fieldpath.ManagedFields) Conflicts { set.Set().Iterate(func(p fieldpath.Path) { conflicts = append(conflicts, Conflict{ Manager: manager, - Path: p, + Path: p.Copy(), }) }) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go index 1b23dcbd5eff..e1540841d8c1 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go @@ -18,6 +18,7 @@ import ( "sigs.k8s.io/structured-merge-diff/v4/fieldpath" "sigs.k8s.io/structured-merge-diff/v4/typed" + "sigs.k8s.io/structured-merge-diff/v4/value" ) // Converter is an interface to the conversion logic. The converter @@ -27,17 +28,50 @@ type Converter interface { IsMissingVersionError(error) bool } +// UpdateBuilder allows you to create a new Updater by exposing all of +// the options and setting them once. +type UpdaterBuilder struct { + Converter Converter + IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set + + EnableUnions bool + + // Stop comparing the new object with old object after applying. + // This was initially used to avoid spurious etcd update, but + // since that's vastly inefficient, we've come-up with a better + // way of doing that. Create this flag to stop it. + // Comparing has become more expensive too now that we're not using + // `Compare` but `value.Equals` so this gives an option to avoid it. + ReturnInputOnNoop bool +} + +func (u *UpdaterBuilder) BuildUpdater() *Updater { + return &Updater{ + Converter: u.Converter, + IgnoredFields: u.IgnoredFields, + enableUnions: u.EnableUnions, + returnInputOnNoop: u.ReturnInputOnNoop, + } +} + // Updater is the object used to compute updated FieldSets and also // merge the object on Apply. type Updater struct { - Converter Converter + // Deprecated: This will eventually become private. + Converter Converter + + // Deprecated: This will eventually become private. IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set enableUnions bool + + returnInputOnNoop bool } // EnableUnionFeature turns on union handling. It is disabled by default until the // feature is complete. +// +// Deprecated: Use the builder instead. func (s *Updater) EnableUnionFeature() { s.enableUnions = true } @@ -157,8 +191,7 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp // Apply should be called when Apply is run, given the current object as // well as the configuration that is applied. This will merge the object -// and return it. If the object hasn't changed, nil is returned (the -// managers can still have changed though). +// and return it. func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, manager string, force bool) (*typed.TypedValue, fieldpath.ManagedFields, error) { var err error managers, err = s.reconcileManagedFieldsWithSchemaChanges(liveObject, managers) @@ -200,11 +233,11 @@ func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fiel if err != nil { return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to prune fields: %v", err) } - managers, compare, err := s.update(liveObject, newObject, version, managers, manager, force) + managers, _, err = s.update(liveObject, newObject, version, managers, manager, force) if err != nil { return nil, fieldpath.ManagedFields{}, err } - if compare.IsSame() { + if !s.returnInputOnNoop && value.EqualsUsing(value.NewFreelistAllocator(), liveObject.AsValue(), newObject.AsValue()) { newObject = nil } return newObject, managers, nil @@ -218,7 +251,8 @@ func (s *Updater) prune(merged *typed.TypedValue, managers fieldpath.ManagedFiel if lastSet == nil || lastSet.Set().Empty() { return merged, nil } - convertedMerged, err := s.Converter.Convert(merged, lastSet.APIVersion()) + version := lastSet.APIVersion() + convertedMerged, err := s.Converter.Convert(merged, version) if err != nil { if s.Converter.IsMissingVersionError(err) { return merged, nil @@ -228,7 +262,7 @@ func (s *Updater) prune(merged *typed.TypedValue, managers fieldpath.ManagedFiel sc, tr := convertedMerged.Schema(), convertedMerged.TypeRef() pruned := convertedMerged.RemoveItems(lastSet.Set().EnsureNamedFieldsAreMembers(sc, tr)) - pruned, err = s.addBackOwnedItems(convertedMerged, pruned, managers, applyingManager) + pruned, err = s.addBackOwnedItems(convertedMerged, pruned, version, managers, applyingManager) if err != nil { return nil, fmt.Errorf("failed add back owned items: %v", err) } @@ -241,7 +275,7 @@ func (s *Updater) prune(merged *typed.TypedValue, managers fieldpath.ManagedFiel // addBackOwnedItems adds back any fields, list and map items that were removed by prune, // but other appliers or updaters (or the current applier's new config) claim to own. -func (s *Updater) addBackOwnedItems(merged, pruned *typed.TypedValue, managedFields fieldpath.ManagedFields, applyingManager string) (*typed.TypedValue, error) { +func (s *Updater) addBackOwnedItems(merged, pruned *typed.TypedValue, prunedVersion fieldpath.APIVersion, managedFields fieldpath.ManagedFields, applyingManager string) (*typed.TypedValue, error) { var err error managedAtVersion := map[fieldpath.APIVersion]*fieldpath.Set{} for _, managerSet := range managedFields { @@ -252,7 +286,6 @@ func (s *Updater) addBackOwnedItems(merged, pruned *typed.TypedValue, managedFie } // Add back owned items at pruned version first to avoid conversion failure // caused by pruned fields which are required for conversion. - prunedVersion := fieldpath.APIVersion(*pruned.TypeRef().NamedType) if managed, ok := managedAtVersion[prunedVersion]; ok { merged, pruned, err = s.addBackOwnedItemsForVersion(merged, pruned, prunedVersion, managed) if err != nil { diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/elements.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/elements.go index 7e5dc7582744..5d3707a5b50c 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/elements.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/elements.go @@ -73,7 +73,7 @@ type Atom struct { } // Scalar (AKA "primitive") represents a type which has a single value which is -// either numeric, string, or boolean. +// either numeric, string, or boolean, or untyped for any of them. // // TODO: split numeric into float/int? Something even more fine-grained? type Scalar string @@ -82,6 +82,7 @@ const ( Numeric = Scalar("numeric") String = Scalar("string") Boolean = Scalar("boolean") + Untyped = Scalar("untyped") ) // ElementRelationship is an enum of the different possible relationships diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go index 7d64d1308ceb..e4c5caa2aa5a 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go @@ -110,7 +110,7 @@ var SchemaSchemaYAML = `types: scalar: string - name: deduceInvalidDiscriminator type: - scalar: bool + scalar: boolean - name: fields type: list: diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go index 913644083076..09209ec82a41 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go @@ -113,11 +113,12 @@ func (w *mergingWalker) doLeaf() { w.rule(w) } -func (w *mergingWalker) doScalar(t *schema.Scalar) (errs ValidationErrors) { - errs = append(errs, validateScalar(t, w.lhs, "lhs: ")...) - errs = append(errs, validateScalar(t, w.rhs, "rhs: ")...) - if len(errs) > 0 { - return errs +func (w *mergingWalker) doScalar(t *schema.Scalar) ValidationErrors { + // Make sure at least one side is a valid scalar. + lerrs := validateScalar(t, w.lhs, "lhs: ") + rerrs := validateScalar(t, w.rhs, "rhs: ") + if len(lerrs) > 0 && len(rerrs) > 0 { + return append(lerrs, rerrs...) } // All scalars are leaf fields. diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go index d63a97fe20a2..6411bd51a944 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go @@ -45,6 +45,10 @@ func AsTyped(v value.Value, s *schema.Schema, typeRef schema.TypeRef) (*TypedVal // conforms to the schema, for cases where that has already been checked or // where you're going to call a method that validates as a side-effect (like // ToFieldSet). +// +// Deprecated: This function was initially created because validation +// was expensive. Now that this has been solved, objects should always +// be created as validated, using `AsTyped`. func AsTypedUnvalidated(v value.Value, s *schema.Schema, typeRef schema.TypeRef) *TypedValue { tv := &TypedValue{ value: v, @@ -125,12 +129,13 @@ func (tv TypedValue) Compare(rhs *TypedValue) (c *Comparison, err error) { Modified: fieldpath.NewSet(), Added: fieldpath.NewSet(), } + a := value.NewFreelistAllocator() _, err = merge(&tv, rhs, func(w *mergingWalker) { if w.lhs == nil { c.Added.Insert(w.path) } else if w.rhs == nil { c.Removed.Insert(w.path) - } else if !value.Equals(w.rhs, w.lhs) { + } else if !value.EqualsUsing(a, w.rhs, w.lhs) { // TODO: Equality is not sufficient for this. // Need to implement equality check on the value type. c.Modified.Insert(w.path) diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go index 378d30219c49..edddbafa42d4 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go @@ -102,6 +102,12 @@ func validateScalar(t *schema.Scalar, v value.Value, prefix string) (errs Valida if !v.IsBool() { return errorf("%vexpected boolean, got %v", prefix, v) } + case schema.Untyped: + if !v.IsFloat() && !v.IsInt() && !v.IsString() && !v.IsBool() { + return errorf("%vexpected any scalar, got %v", prefix, v) + } + default: + return errorf("%vunexpected scalar type in schema: %v", prefix, *t) } return nil } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go index dc8b8c72006c..c38402b99a31 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapreflect.go @@ -136,7 +136,7 @@ func (r mapReflect) EqualsUsing(a Allocator, m Map) bool { if !ok { return false } - return Equals(vr.mustReuse(lhsVal, entry, nil, nil), value) + return EqualsUsing(a, vr.mustReuse(lhsVal, entry, nil, nil), value) }) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go index d8e208628def..c3ae00b180e6 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/mapunstructured.go @@ -88,12 +88,12 @@ func (m mapUnstructuredInterface) EqualsUsing(a Allocator, other Map) bool { } vv := a.allocValueUnstructured() defer a.Free(vv) - return other.Iterate(func(key string, value Value) bool { + return other.IterateUsing(a, func(key string, value Value) bool { lhsVal, ok := m[key] if !ok { return false } - return Equals(vv.reuse(lhsVal), value) + return EqualsUsing(a, vv.reuse(lhsVal), value) }) } @@ -168,12 +168,12 @@ func (m mapUnstructuredString) EqualsUsing(a Allocator, other Map) bool { } vv := a.allocValueUnstructured() defer a.Free(vv) - return other.Iterate(func(key string, value Value) bool { + return other.IterateUsing(a, func(key string, value Value) bool { lhsVal, ok := m[key] if !ok { return false } - return Equals(vv.reuse(lhsVal), value) + return EqualsUsing(a, vv.reuse(lhsVal), value) }) } diff --git a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go index a5a467c0f00c..f0d58d42cb57 100644 --- a/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go +++ b/cluster-autoscaler/vendor/sigs.k8s.io/structured-merge-diff/v4/value/reflectcache.go @@ -154,7 +154,9 @@ func buildStructCacheEntry(t reflect.Type, infos map[string]*FieldCacheEntry, fi if field.Type.Kind() == reflect.Ptr { e = field.Type.Elem() } - buildStructCacheEntry(e, infos, append(fieldPath, field.Index)) + if e.Kind() == reflect.Struct { + buildStructCacheEntry(e, infos, append(fieldPath, field.Index)) + } continue } info := &FieldCacheEntry{JsonName: jsonName, isOmitEmpty: isOmitempty, fieldPath: append(fieldPath, field.Index), fieldType: field.Type} From 96958f868a57225437076e6cb24d24967a747367 Mon Sep 17 00:00:00 2001 From: mikutas <23391543+mikutas@users.noreply.github.com> Date: Thu, 28 Sep 2023 13:16:36 +0900 Subject: [PATCH 073/125] Fix multiple run of informers created in fetcher.go --- .../pkg/utils/limitrange/limit_range_calculator.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go b/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go index 77dc394979cc..27d5954e66b8 100644 --- a/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go +++ b/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" ) // LimitRangeCalculator calculates limit range items that has the same effect as all limit range items present in the cluster. @@ -55,12 +56,12 @@ func NewLimitsRangeCalculator(f informers.SharedInformerFactory) (*limitsChecker } limitRangeLister := f.Core().V1().LimitRanges().Lister() stopCh := make(chan struct{}) - f.Start(stopCh) - for _, ok := range f.WaitForCacheSync(stopCh) { - if !ok { - if !f.Core().V1().LimitRanges().Informer().HasSynced() { - return nil, fmt.Errorf("informer did not sync") - } + informer := f.Core().V1().LimitRanges().Informer() + go informer.Run(stopCh) + ok := cache.WaitForCacheSync(stopCh, informer.HasSynced) + if !ok { + if !f.Core().V1().LimitRanges().Informer().HasSynced() { + return nil, fmt.Errorf("informer did not sync") } } return &limitsChecker{limitRangeLister}, nil From 1ef9e8ba3e4ccc8926fa31f569515958f31aa129 Mon Sep 17 00:00:00 2001 From: Guy Templeton Date: Thu, 28 Sep 2023 12:53:28 +0100 Subject: [PATCH 074/125] CA - Update CAPI Cloudprovider PR labeling to existing label --- cluster-autoscaler/cloudprovider/clusterapi/OWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/clusterapi/OWNERS b/cluster-autoscaler/cloudprovider/clusterapi/OWNERS index 58e6cb8cd6ca..81227a26bc1b 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/OWNERS +++ b/cluster-autoscaler/cloudprovider/clusterapi/OWNERS @@ -14,4 +14,4 @@ reviewers: - shysank labels: -- area/provider/clusterapi +- area/provider/cluster-api From 74d1f7f349887b4950a264b7d77efa6d100424bb Mon Sep 17 00:00:00 2001 From: Eric Lin Date: Wed, 27 Sep 2023 13:48:45 +0000 Subject: [PATCH 075/125] Trim managedFields in shared informer factory Signed-off-by: Eric Lin --- cluster-autoscaler/main.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 680990a07956..8405969f5a9b 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -35,6 +35,7 @@ import ( "github.com/spf13/pflag" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" @@ -444,7 +445,15 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter kubeClientConfig.Burst = autoscalingOptions.KubeClientBurst kubeClientConfig.QPS = float32(autoscalingOptions.KubeClientQPS) kubeClient := createKubeClient(kubeClientConfig) - informerFactory := informers.NewSharedInformerFactory(kubeClient, 0) + + // Informer transform to trim ManagedFields for memory efficiency. + trim := func(obj interface{}) (interface{}, error) { + if accessor, err := meta.Accessor(obj); err == nil { + accessor.SetManagedFields(nil) + } + return obj, nil + } + informerFactory := informers.NewSharedInformerFactoryWithOptions(kubeClient, 0, informers.WithTransform(trim)) eventsKubeClient := createKubeClient(getKubeConfig()) From b9c0d91da7d1107f8ee05f08bf304a5a470011c3 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Fri, 29 Sep 2023 14:33:46 +0200 Subject: [PATCH 076/125] fix log initialization InitLogs unconditionally disables contextual logging, while ValidateAndApply checks the feature gate for that. InitLogs must come first, otherwise --feature-gates=ContextualLogging=true doesn't work. --- cluster-autoscaler/main.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 61caae6f5f52..edf55091c3f5 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -569,12 +569,11 @@ func main() { featureGate.AddFlag(pflag.CommandLine) kube_flag.InitFlags() + logs.InitLogs() if err := logsapi.ValidateAndApply(loggingConfig, featureGate); err != nil { klog.Fatalf("Failed to validate and apply logging configuration: %v", err) } - logs.InitLogs() - healthCheck := metrics.NewHealthCheck(*maxInactivityTimeFlag, *maxFailingTimeFlag) klog.V(1).Infof("Cluster Autoscaler %s", version.ClusterAutoscalerVersion) From af638733e18329c3cbb59010fee55bdb67a13cf3 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Wed, 27 Sep 2023 06:08:26 +0000 Subject: [PATCH 077/125] Extract drainability rules into packages --- .../core/scaledown/actuation/actuator.go | 11 ++-- .../core/scaledown/actuation/drain.go | 3 +- .../core/scaledown/legacy/legacy.go | 6 +- .../core/scaledown/planner/planner.go | 6 +- .../core/scaledown/planner/planner_test.go | 4 +- cluster-autoscaler/simulator/cluster.go | 10 +-- cluster-autoscaler/simulator/cluster_test.go | 3 +- cluster-autoscaler/simulator/drain.go | 44 ++++++------- cluster-autoscaler/simulator/drain_test.go | 26 ++++---- .../simulator/drainability/context.go | 26 ++++++++ .../{mirror.go => rules/mirror/rule.go} | 24 ++++---- .../mirror/rule_test.go} | 16 ++--- .../simulator/drainability/rules/rules.go | 61 +++++++++++++++++++ .../drainability/{rule.go => status.go} | 16 ----- 14 files changed, 165 insertions(+), 91 deletions(-) create mode 100644 cluster-autoscaler/simulator/drainability/context.go rename cluster-autoscaler/simulator/drainability/{mirror.go => rules/mirror/rule.go} (58%) rename cluster-autoscaler/simulator/drainability/{mirror_test.go => rules/mirror/rule_test.go} (79%) create mode 100644 cluster-autoscaler/simulator/drainability/rules/rules.go rename cluster-autoscaler/simulator/drainability/{rule.go => status.go} (86%) diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator.go b/cluster-autoscaler/core/scaledown/actuation/actuator.go index 247f04767f39..fa491d5eb9a6 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator.go @@ -21,7 +21,6 @@ import ( "time" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" @@ -30,6 +29,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/budgets" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/deletiontracker" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/status" "k8s.io/autoscaler/cluster-autoscaler/core/utils" "k8s.io/autoscaler/cluster-autoscaler/metrics" @@ -223,7 +223,7 @@ func (a *Actuator) deleteAsyncDrain(NodeGroupViews []*budgets.NodeGroupView) (re } func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider.NodeGroup, drain bool, batchSize int) { - var pdbs []*policyv1.PodDisruptionBudget + var remainingPdbTracker pdb.RemainingPdbTracker var registry kube_util.ListerRegistry if len(nodes) == 0 { @@ -246,7 +246,7 @@ func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider } if drain { - pdbs, err = a.ctx.PodDisruptionBudgetLister().List() + pdbs, err := a.ctx.PodDisruptionBudgetLister().List() if err != nil { klog.Errorf("Scale-down: couldn't fetch pod disruption budgets, err: %v", err) nodeDeleteResult := status.NodeDeleteResult{ResultType: status.NodeDeleteErrorInternal, Err: errors.NewAutoscalerError(errors.InternalError, "podDisruptionBudgetLister.List returned error %v", err)} @@ -255,7 +255,8 @@ func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider } return } - + remainingPdbTracker = pdb.NewBasicRemainingPdbTracker() + remainingPdbTracker.SetPdbs(pdbs) registry = a.ctx.ListerRegistry } @@ -272,7 +273,7 @@ func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider continue } - podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, a.deleteOptions, registry, pdbs, time.Now()) + podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, a.deleteOptions, registry, remainingPdbTracker, time.Now()) if err != nil { klog.Errorf("Scale-down: couldn't delete node %q, err: %v", node.Name, err) nodeDeleteResult := status.NodeDeleteResult{ResultType: status.NodeDeleteErrorInternal, Err: errors.NewAutoscalerError(errors.InternalError, "GetPodsToMove for %q returned error: %v", node.Name, err)} diff --git a/cluster-autoscaler/core/scaledown/actuation/drain.go b/cluster-autoscaler/core/scaledown/actuation/drain.go index e479abe34a99..97a4541da354 100644 --- a/cluster-autoscaler/core/scaledown/actuation/drain.go +++ b/cluster-autoscaler/core/scaledown/actuation/drain.go @@ -23,7 +23,6 @@ import ( "time" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" policyv1beta1 "k8s.io/api/policy/v1beta1" kube_errors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -177,7 +176,7 @@ func (e Evictor) DrainNodeWithPods(ctx *acontext.AutoscalingContext, node *apiv1 // EvictDaemonSetPods creates eviction objects for all DaemonSet pods on the node. func (e Evictor) EvictDaemonSetPods(ctx *acontext.AutoscalingContext, nodeInfo *framework.NodeInfo, timeNow time.Time) error { nodeToDelete := nodeInfo.Node() - _, daemonSetPods, _, err := simulator.GetPodsToMove(nodeInfo, e.deleteOptions, nil, []*policyv1.PodDisruptionBudget{}, timeNow) + _, daemonSetPods, _, err := simulator.GetPodsToMove(nodeInfo, e.deleteOptions, nil, nil, timeNow) if err != nil { return fmt.Errorf("failed to get DaemonSet pods for %s (error: %v)", nodeToDelete.Name, err) } diff --git a/cluster-autoscaler/core/scaledown/legacy/legacy.go b/cluster-autoscaler/core/scaledown/legacy/legacy.go index 65dba06f7f4c..268f874651dd 100644 --- a/cluster-autoscaler/core/scaledown/legacy/legacy.go +++ b/cluster-autoscaler/core/scaledown/legacy/legacy.go @@ -147,7 +147,7 @@ func (sd *ScaleDown) UpdateUnneededNodes( currentCandidates, destinations, timestamp, - sd.context.RemainingPdbTracker.GetPdbs()) + sd.context.RemainingPdbTracker) additionalCandidatesCount := sd.context.ScaleDownNonEmptyCandidatesCount - len(nodesToRemove) if additionalCandidatesCount > len(currentNonCandidates) { @@ -169,7 +169,7 @@ func (sd *ScaleDown) UpdateUnneededNodes( currentNonCandidates[:additionalCandidatesPoolSize], destinations, timestamp, - sd.context.RemainingPdbTracker.GetPdbs()) + sd.context.RemainingPdbTracker) if len(additionalNodesToRemove) > additionalCandidatesCount { additionalNodesToRemove = additionalNodesToRemove[:additionalCandidatesCount] } @@ -317,7 +317,7 @@ func (sd *ScaleDown) NodesToDelete(currentTime time.Time) (_, drain []*apiv1.Nod candidateNames, allNodeNames, time.Now(), - sd.context.RemainingPdbTracker.GetPdbs()) + sd.context.RemainingPdbTracker) findNodesToRemoveDuration = time.Now().Sub(findNodesToRemoveStart) for _, unremovableNode := range unremovable { diff --git a/cluster-autoscaler/core/scaledown/planner/planner.go b/cluster-autoscaler/core/scaledown/planner/planner.go index 0cd4002c4af3..bca5e00ff738 100644 --- a/cluster-autoscaler/core/scaledown/planner/planner.go +++ b/cluster-autoscaler/core/scaledown/planner/planner.go @@ -22,11 +22,11 @@ import ( "time" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/context" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/eligibility" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/resource" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/unneeded" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/unremovable" @@ -47,7 +47,7 @@ type eligibilityChecker interface { type removalSimulator interface { DropOldHints() - SimulateNodeRemoval(node string, podDestinations map[string]bool, timestamp time.Time, pdbs []*policyv1.PodDisruptionBudget) (*simulator.NodeToBeRemoved, *simulator.UnremovableNode) + SimulateNodeRemoval(node string, podDestinations map[string]bool, timestamp time.Time, remainingPdbTracker pdb.RemainingPdbTracker) (*simulator.NodeToBeRemoved, *simulator.UnremovableNode) } // controllerReplicasCalculator calculates a number of target and expected replicas for a given controller. @@ -276,7 +276,7 @@ func (p *Planner) categorizeNodes(podDestinations map[string]bool, scaleDownCand klog.V(4).Infof("%d out of %d nodes skipped in scale down simulation: there are already %d unneeded nodes so no point in looking for more.", len(currentlyUnneededNodeNames)-i, len(currentlyUnneededNodeNames), len(removableList)) break } - removable, unremovable := p.rs.SimulateNodeRemoval(node, podDestinations, p.latestUpdate, p.context.RemainingPdbTracker.GetPdbs()) + removable, unremovable := p.rs.SimulateNodeRemoval(node, podDestinations, p.latestUpdate, p.context.RemainingPdbTracker) if removable != nil { _, inParallel, _ := p.context.RemainingPdbTracker.CanRemovePods(removable.PodsToReschedule) if !inParallel { diff --git a/cluster-autoscaler/core/scaledown/planner/planner_test.go b/cluster-autoscaler/core/scaledown/planner/planner_test.go index d3c14a61b733..2fcf5cc866b3 100644 --- a/cluster-autoscaler/core/scaledown/planner/planner_test.go +++ b/cluster-autoscaler/core/scaledown/planner/planner_test.go @@ -24,7 +24,6 @@ import ( "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" @@ -32,6 +31,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/context" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/deletiontracker" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/status" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/unremovable" . "k8s.io/autoscaler/cluster-autoscaler/core/test" @@ -901,7 +901,7 @@ type fakeRemovalSimulator struct { func (r *fakeRemovalSimulator) DropOldHints() {} -func (r *fakeRemovalSimulator) SimulateNodeRemoval(name string, _ map[string]bool, _ time.Time, _ []*policyv1.PodDisruptionBudget) (*simulator.NodeToBeRemoved, *simulator.UnremovableNode) { +func (r *fakeRemovalSimulator) SimulateNodeRemoval(name string, _ map[string]bool, _ time.Time, _ pdb.RemainingPdbTracker) (*simulator.NodeToBeRemoved, *simulator.UnremovableNode) { time.Sleep(r.sleep) node := &apiv1.Node{} for _, n := range r.nodes { diff --git a/cluster-autoscaler/simulator/cluster.go b/cluster-autoscaler/simulator/cluster.go index 23ccd037e2fa..1af916b64bf9 100644 --- a/cluster-autoscaler/simulator/cluster.go +++ b/cluster-autoscaler/simulator/cluster.go @@ -20,6 +20,7 @@ import ( "fmt" "time" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/simulator/scheduling" @@ -29,7 +30,6 @@ import ( schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" klog "k8s.io/klog/v2" ) @@ -117,7 +117,7 @@ func (r *RemovalSimulator) FindNodesToRemove( candidates []string, destinations []string, timestamp time.Time, - pdbs []*policyv1.PodDisruptionBudget, + remainingPdbTracker pdb.RemainingPdbTracker, ) (nodesToRemove []NodeToBeRemoved, unremovableNodes []*UnremovableNode) { result := make([]NodeToBeRemoved, 0) unremovable := make([]*UnremovableNode, 0) @@ -128,7 +128,7 @@ func (r *RemovalSimulator) FindNodesToRemove( } for _, nodeName := range candidates { - rn, urn := r.SimulateNodeRemoval(nodeName, destinationMap, timestamp, pdbs) + rn, urn := r.SimulateNodeRemoval(nodeName, destinationMap, timestamp, remainingPdbTracker) if rn != nil { result = append(result, *rn) } else if urn != nil { @@ -146,7 +146,7 @@ func (r *RemovalSimulator) SimulateNodeRemoval( nodeName string, destinationMap map[string]bool, timestamp time.Time, - pdbs []*policyv1.PodDisruptionBudget, + remainingPdbTracker pdb.RemainingPdbTracker, ) (*NodeToBeRemoved, *UnremovableNode) { nodeInfo, err := r.clusterSnapshot.NodeInfos().Get(nodeName) if err != nil { @@ -159,7 +159,7 @@ func (r *RemovalSimulator) SimulateNodeRemoval( return nil, &UnremovableNode{Node: nodeInfo.Node(), Reason: UnexpectedError} } - podsToRemove, daemonSetPods, blockingPod, err := GetPodsToMove(nodeInfo, r.deleteOptions, r.listers, pdbs, timestamp) + podsToRemove, daemonSetPods, blockingPod, err := GetPodsToMove(nodeInfo, r.deleteOptions, r.listers, remainingPdbTracker, timestamp) if err != nil { klog.V(2).Infof("node %s cannot be removed: %v", nodeName, err) if blockingPod != nil { diff --git a/cluster-autoscaler/simulator/cluster_test.go b/cluster-autoscaler/simulator/cluster_test.go index 9a8b745466be..8c141eef56cf 100644 --- a/cluster-autoscaler/simulator/cluster_test.go +++ b/cluster-autoscaler/simulator/cluster_test.go @@ -30,7 +30,6 @@ import ( "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/kubelet/types" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" @@ -207,7 +206,7 @@ func TestFindNodesToRemove(t *testing.T) { } clustersnapshot.InitializeClusterSnapshotOrDie(t, clusterSnapshot, test.allNodes, test.pods) r := NewRemovalSimulator(registry, clusterSnapshot, predicateChecker, tracker, testDeleteOptions(), false) - toRemove, unremovable := r.FindNodesToRemove(test.candidates, destinations, time.Now(), []*policyv1.PodDisruptionBudget{}) + toRemove, unremovable := r.FindNodesToRemove(test.candidates, destinations, time.Now(), nil) fmt.Printf("Test scenario: %s, found len(toRemove)=%v, expected len(test.toRemove)=%v\n", test.name, len(toRemove), len(test.toRemove)) assert.Equal(t, toRemove, test.toRemove) assert.Equal(t, unremovable, test.unremovable) diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 21edf94c1a0c..55090023debf 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -25,7 +25,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/autoscaler/cluster-autoscaler/config" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" @@ -44,7 +46,7 @@ type NodeDeleteOptions struct { // to allow their pods deletion in scale down MinReplicaCount int // DrainabilityRules contain a list of checks that are used to verify whether a pod can be drained from node. - DrainabilityRules []drainability.Rule + DrainabilityRules rules.Rules } // NewNodeDeleteOptions returns new node delete options extracted from autoscaling options @@ -54,7 +56,7 @@ func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { SkipNodesWithLocalStorage: opts.SkipNodesWithLocalStorage, MinReplicaCount: opts.MinReplicaCount, SkipNodesWithCustomControllerPods: opts.SkipNodesWithCustomControllerPods, - DrainabilityRules: drainability.DefaultRules(), + DrainabilityRules: rules.Default(), } } @@ -67,16 +69,22 @@ func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { // still exist. // TODO(x13n): Rewrite GetPodsForDeletionOnNodeDrain into a set of DrainabilityRules. func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions NodeDeleteOptions, listers kube_util.ListerRegistry, - pdbs []*policyv1.PodDisruptionBudget, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { + remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { var drainPods, drainDs []*apiv1.Pod drainabilityRules := deleteOptions.DrainabilityRules if drainabilityRules == nil { - drainabilityRules = drainability.DefaultRules() + drainabilityRules = rules.Default() + } + if remainingPdbTracker == nil { + remainingPdbTracker = pdb.NewBasicRemainingPdbTracker() + } + drainCtx := &drainability.DrainContext{ + RemainingPdbTracker: remainingPdbTracker, } for _, podInfo := range nodeInfo.Pods { pod := podInfo.Pod - d := drainabilityStatus(pod, drainabilityRules) - switch d.Outcome { + status := drainabilityRules.Drainable(drainCtx, pod) + switch status.Outcome { case drainability.UndefinedOutcome: pods = append(pods, podInfo.Pod) case drainability.DrainOk: @@ -86,15 +94,18 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions NodeDele drainPods = append(drainPods, pod) } case drainability.BlockDrain: - blockingPod = &drain.BlockingPod{pod, d.BlockingReason} - err = d.Error + blockingPod = &drain.BlockingPod{ + Pod: pod, + Reason: status.BlockingReason, + } + err = status.Error return - case drainability.SkipDrain: } } + pods, daemonSetPods, blockingPod, err = drain.GetPodsForDeletionOnNodeDrain( pods, - pdbs, + remainingPdbTracker.GetPdbs(), deleteOptions.SkipNodesWithSystemPods, deleteOptions.SkipNodesWithLocalStorage, deleteOptions.SkipNodesWithCustomControllerPods, @@ -106,7 +117,7 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions NodeDele if err != nil { return pods, daemonSetPods, blockingPod, err } - if pdbBlockingPod, err := checkPdbs(pods, pdbs); err != nil { + if pdbBlockingPod, err := checkPdbs(pods, remainingPdbTracker.GetPdbs()); err != nil { return []*apiv1.Pod{}, []*apiv1.Pod{}, pdbBlockingPod, err } @@ -131,14 +142,3 @@ func checkPdbs(pods []*apiv1.Pod, pdbs []*policyv1.PodDisruptionBudget) (*drain. } return nil, nil } - -func drainabilityStatus(pod *apiv1.Pod, dr []drainability.Rule) drainability.Status { - for _, f := range dr { - if d := f.Drainable(pod); d.Outcome != drainability.UndefinedOutcome { - return d - } - } - return drainability.Status{ - Outcome: drainability.UndefinedOutcome, - } -} diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index 02ad0ba372c1..32f4d64caadc 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -25,7 +25,9 @@ import ( policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" "k8s.io/kubernetes/pkg/kubelet/types" @@ -179,7 +181,7 @@ func TestGetPodsToMove(t *testing.T) { desc string pods []*apiv1.Pod pdbs []*policyv1.PodDisruptionBudget - rules []drainability.Rule + rules []rules.Rule wantPods []*apiv1.Pod wantDs []*apiv1.Pod wantBlocking *drain.BlockingPod @@ -256,19 +258,19 @@ func TestGetPodsToMove(t *testing.T) { { desc: "Rule allows", pods: []*apiv1.Pod{unreplicatedPod}, - rules: []drainability.Rule{alwaysDrain{}}, + rules: []rules.Rule{alwaysDrain{}}, wantPods: []*apiv1.Pod{unreplicatedPod}, }, { desc: "Second rule allows", pods: []*apiv1.Pod{unreplicatedPod}, - rules: []drainability.Rule{cantDecide{}, alwaysDrain{}}, + rules: []rules.Rule{cantDecide{}, alwaysDrain{}}, wantPods: []*apiv1.Pod{unreplicatedPod}, }, { desc: "Rule blocks", pods: []*apiv1.Pod{rsPod}, - rules: []drainability.Rule{neverDrain{}}, + rules: []rules.Rule{neverDrain{}}, wantErr: true, wantBlocking: &drain.BlockingPod{ Pod: rsPod, @@ -278,7 +280,7 @@ func TestGetPodsToMove(t *testing.T) { { desc: "Second rule blocks", pods: []*apiv1.Pod{rsPod}, - rules: []drainability.Rule{cantDecide{}, neverDrain{}}, + rules: []rules.Rule{cantDecide{}, neverDrain{}}, wantErr: true, wantBlocking: &drain.BlockingPod{ Pod: rsPod, @@ -288,7 +290,7 @@ func TestGetPodsToMove(t *testing.T) { { desc: "Undecisive rule fallback to default logic: Unreplicated pod", pods: []*apiv1.Pod{unreplicatedPod}, - rules: []drainability.Rule{cantDecide{}}, + rules: []rules.Rule{cantDecide{}}, wantErr: true, wantBlocking: &drain.BlockingPod{ Pod: unreplicatedPod, @@ -298,7 +300,7 @@ func TestGetPodsToMove(t *testing.T) { { desc: "Undecisive rule fallback to default logic: Replicated pod", pods: []*apiv1.Pod{rsPod}, - rules: []drainability.Rule{cantDecide{}}, + rules: []rules.Rule{cantDecide{}}, wantPods: []*apiv1.Pod{rsPod}, }, } @@ -311,7 +313,9 @@ func TestGetPodsToMove(t *testing.T) { SkipNodesWithCustomControllerPods: true, DrainabilityRules: tc.rules, } - p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, nil, tc.pdbs, testTime) + tracker := pdb.NewBasicRemainingPdbTracker() + tracker.SetPdbs(tc.pdbs) + p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, nil, tracker, testTime) if tc.wantErr { assert.Error(t, err) } else { @@ -326,18 +330,18 @@ func TestGetPodsToMove(t *testing.T) { type alwaysDrain struct{} -func (a alwaysDrain) Drainable(*apiv1.Pod) drainability.Status { +func (a alwaysDrain) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewDrainableStatus() } type neverDrain struct{} -func (n neverDrain) Drainable(*apiv1.Pod) drainability.Status { +func (n neverDrain) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewBlockedStatus(drain.UnexpectedError, fmt.Errorf("nope")) } type cantDecide struct{} -func (c cantDecide) Drainable(*apiv1.Pod) drainability.Status { +func (c cantDecide) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/context.go b/cluster-autoscaler/simulator/drainability/context.go new file mode 100644 index 000000000000..c2a341a84f8d --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/context.go @@ -0,0 +1,26 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package drainability + +import ( + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" +) + +// DrainContext contains parameters for drainability rules. +type DrainContext struct { + RemainingPdbTracker pdb.RemainingPdbTracker +} diff --git a/cluster-autoscaler/simulator/drainability/mirror.go b/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go similarity index 58% rename from cluster-autoscaler/simulator/drainability/mirror.go rename to cluster-autoscaler/simulator/drainability/rules/mirror/rule.go index 668c3993220b..549fd6c9fbfa 100644 --- a/cluster-autoscaler/simulator/drainability/mirror.go +++ b/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go @@ -14,26 +14,26 @@ See the License for the specific language governing permissions and limitations under the License. */ -package drainability +package mirror import ( - "k8s.io/autoscaler/cluster-autoscaler/utils/pod" - apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) -// MirrorPodRule is a drainability rule on how to handle mirror pods. -type MirrorPodRule struct{} +// Rule is a drainability rule on how to handle mirror pods. +type Rule struct{} -// NewMirrorPodRule creates a new MirrorPodRule. -func NewMirrorPodRule() *MirrorPodRule { - return &MirrorPodRule{} +// New creates a new Rule. +func New() *Rule { + return &Rule{} } // Drainable decides what to do with mirror pods on node drain. -func (m *MirrorPodRule) Drainable(p *apiv1.Pod) Status { - if pod.IsMirrorPod(p) { - return NewSkipStatus() +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if pod_util.IsMirrorPod(pod) { + return drainability.NewSkipStatus() } - return NewUndefinedStatus() + return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/mirror_test.go b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go similarity index 79% rename from cluster-autoscaler/simulator/drainability/mirror_test.go rename to cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go index 961b3d925eae..e05613daaedd 100644 --- a/cluster-autoscaler/simulator/drainability/mirror_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go @@ -14,21 +14,22 @@ See the License for the specific language governing permissions and limitations under the License. */ -package drainability +package mirror import ( "testing" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/kubernetes/pkg/kubelet/types" ) -func TestMirrorPodRule(t *testing.T) { +func TestRule(t *testing.T) { testCases := []struct { desc string pod *apiv1.Pod - want Status + want drainability.Status }{ { desc: "non mirror pod", @@ -38,7 +39,7 @@ func TestMirrorPodRule(t *testing.T) { Namespace: "ns", }, }, - want: NewUndefinedStatus(), + want: drainability.NewUndefinedStatus(), }, { desc: "mirror pod", @@ -51,15 +52,14 @@ func TestMirrorPodRule(t *testing.T) { }, }, }, - want: NewSkipStatus(), + want: drainability.NewSkipStatus(), }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - m := NewMirrorPodRule() - got := m.Drainable(tc.pod) + got := New().Drainable(nil, tc.pod) if tc.want != got { - t.Errorf("MirrorPodRule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) } }) } diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go new file mode 100644 index 000000000000..1733a2b8dac5 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -0,0 +1,61 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rules + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/mirror" +) + +// Rule determines whether a given pod can be drained or not. +type Rule interface { + // Drainable determines whether a given pod is drainable according to + // the specific Rule. + // + // DrainContext cannot be nil. + Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status +} + +// Default returns the default list of Rules. +func Default() Rules { + return []Rule{ + mirror.New(), + } +} + +// Rules defines operations on a collections of rules. +type Rules []Rule + +// Drainable determines whether a given pod is drainable according to the +// specified set of rules. +func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drainCtx == nil { + drainCtx = &drainability.DrainContext{} + } + if drainCtx.RemainingPdbTracker == nil { + drainCtx.RemainingPdbTracker = pdb.NewBasicRemainingPdbTracker() + } + + for _, r := range rs { + if d := r.Drainable(drainCtx, pod); d.Outcome != drainability.UndefinedOutcome { + return d + } + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rule.go b/cluster-autoscaler/simulator/drainability/status.go similarity index 86% rename from cluster-autoscaler/simulator/drainability/rule.go rename to cluster-autoscaler/simulator/drainability/status.go index f84b33b60edd..d73f346bead2 100644 --- a/cluster-autoscaler/simulator/drainability/rule.go +++ b/cluster-autoscaler/simulator/drainability/status.go @@ -18,8 +18,6 @@ package drainability import ( "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - - apiv1 "k8s.io/api/core/v1" ) // OutcomeType identifies the action that should be taken when it comes to @@ -79,17 +77,3 @@ func NewSkipStatus() Status { func NewUndefinedStatus() Status { return Status{} } - -// Rule determines whether a given pod can be drained or not. -type Rule interface { - // Drainable determines whether a given pod is drainable according to - // the specific Rule. - Drainable(*apiv1.Pod) Status -} - -// DefaultRules returns the default list of Rules. -func DefaultRules() []Rule { - return []Rule{ - NewMirrorPodRule(), - } -} From a68b748fd7d7e008065c383faedfdd1d63ffb5a9 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Thu, 28 Sep 2023 23:48:26 +0000 Subject: [PATCH 078/125] Refactor NodeDeleteOptions for use in drainability rules --- cluster-autoscaler/core/autoscaler.go | 10 ++-- .../core/scaledown/actuation/actuator.go | 12 +++-- .../core/scaledown/actuation/drain.go | 10 ++-- .../core/scaledown/legacy/legacy.go | 6 ++- .../core/scaledown/legacy/legacy_test.go | 8 ++-- .../core/scaledown/planner/planner.go | 6 ++- .../core/scaledown/planner/planner_test.go | 13 ++--- cluster-autoscaler/core/static_autoscaler.go | 11 +++-- .../core/static_autoscaler_test.go | 25 +++++----- cluster-autoscaler/main.go | 16 +++---- .../empty_candidates_sorting.go | 15 ++++-- .../empty_candidates_sorting_test.go | 31 ++++++------ cluster-autoscaler/simulator/cluster.go | 12 +++-- cluster-autoscaler/simulator/cluster_test.go | 10 ++-- cluster-autoscaler/simulator/drain.go | 33 ++----------- cluster-autoscaler/simulator/drain_test.go | 7 ++- .../simulator/drainability/context.go | 2 + .../simulator/options/nodedelete.go | 48 +++++++++++++++++++ 18 files changed, 164 insertions(+), 111 deletions(-) create mode 100644 cluster-autoscaler/simulator/options/nodedelete.go diff --git a/cluster-autoscaler/core/autoscaler.go b/cluster-autoscaler/core/autoscaler.go index 4fd81f3e7436..29d4b841b8ba 100644 --- a/cluster-autoscaler/core/autoscaler.go +++ b/cluster-autoscaler/core/autoscaler.go @@ -31,8 +31,9 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/expander" "k8s.io/autoscaler/cluster-autoscaler/expander/factory" ca_processors "k8s.io/autoscaler/cluster-autoscaler/processors" - "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/utils/backoff" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" @@ -57,7 +58,8 @@ type AutoscalerOptions struct { DebuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter RemainingPdbTracker pdb.RemainingPdbTracker ScaleUpOrchestrator scaleup.Orchestrator - DeleteOptions simulator.NodeDeleteOptions + DeleteOptions options.NodeDeleteOptions + DrainabilityRules rules.Rules } // Autoscaler is the main component of CA which scales up/down node groups according to its configuration @@ -90,7 +92,9 @@ func NewAutoscaler(opts AutoscalerOptions) (Autoscaler, errors.AutoscalerError) opts.DebuggingSnapshotter, opts.RemainingPdbTracker, opts.ScaleUpOrchestrator, - opts.DeleteOptions), nil + opts.DeleteOptions, + opts.DrainabilityRules, + ), nil } // Initialize default options if not provided. diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator.go b/cluster-autoscaler/core/scaledown/actuation/actuator.go index fa491d5eb9a6..d2f4315ea0e4 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator.go @@ -35,6 +35,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/metrics" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/utilization" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" @@ -47,7 +49,8 @@ type Actuator struct { clusterState *clusterstate.ClusterStateRegistry nodeDeletionTracker *deletiontracker.NodeDeletionTracker nodeDeletionScheduler *GroupDeletionScheduler - deleteOptions simulator.NodeDeleteOptions + deleteOptions options.NodeDeleteOptions + drainabilityRules rules.Rules // TODO: Move budget processor to scaledown planner, potentially merge into PostFilteringScaleDownNodeProcessor // This is a larger change to the code structure which impacts some existing actuator unit tests // as well as Cluster Autoscaler implementations that may override ScaleDownSetProcessor @@ -64,15 +67,16 @@ type actuatorNodeGroupConfigGetter interface { } // NewActuator returns a new instance of Actuator. -func NewActuator(ctx *context.AutoscalingContext, csr *clusterstate.ClusterStateRegistry, ndt *deletiontracker.NodeDeletionTracker, deleteOptions simulator.NodeDeleteOptions, configGetter actuatorNodeGroupConfigGetter) *Actuator { +func NewActuator(ctx *context.AutoscalingContext, csr *clusterstate.ClusterStateRegistry, ndt *deletiontracker.NodeDeletionTracker, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, configGetter actuatorNodeGroupConfigGetter) *Actuator { ndb := NewNodeDeletionBatcher(ctx, csr, ndt, ctx.NodeDeletionBatcherInterval) return &Actuator{ ctx: ctx, clusterState: csr, nodeDeletionTracker: ndt, - nodeDeletionScheduler: NewGroupDeletionScheduler(ctx, ndt, ndb, NewDefaultEvictor(deleteOptions, ndt)), + nodeDeletionScheduler: NewGroupDeletionScheduler(ctx, ndt, ndb, NewDefaultEvictor(deleteOptions, drainabilityRules, ndt)), budgetProcessor: budgets.NewScaleDownBudgetProcessor(ctx), deleteOptions: deleteOptions, + drainabilityRules: drainabilityRules, configGetter: configGetter, nodeDeleteDelayAfterTaint: ctx.NodeDeleteDelayAfterTaint, } @@ -273,7 +277,7 @@ func (a *Actuator) deleteNodesAsync(nodes []*apiv1.Node, nodeGroup cloudprovider continue } - podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, a.deleteOptions, registry, remainingPdbTracker, time.Now()) + podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, a.deleteOptions, a.drainabilityRules, registry, remainingPdbTracker, time.Now()) if err != nil { klog.Errorf("Scale-down: couldn't delete node %q, err: %v", node.Name, err) nodeDeleteResult := status.NodeDeleteResult{ResultType: status.NodeDeleteErrorInternal, Err: errors.NewAutoscalerError(errors.InternalError, "GetPodsToMove for %q returned error: %v", node.Name, err)} diff --git a/cluster-autoscaler/core/scaledown/actuation/drain.go b/cluster-autoscaler/core/scaledown/actuation/drain.go index 97a4541da354..456d29045d2e 100644 --- a/cluster-autoscaler/core/scaledown/actuation/drain.go +++ b/cluster-autoscaler/core/scaledown/actuation/drain.go @@ -32,6 +32,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/status" "k8s.io/autoscaler/cluster-autoscaler/metrics" "k8s.io/autoscaler/cluster-autoscaler/simulator" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/daemonset" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" @@ -61,11 +63,12 @@ type Evictor struct { DsEvictionEmptyNodeTimeout time.Duration PodEvictionHeadroom time.Duration evictionRegister evictionRegister - deleteOptions simulator.NodeDeleteOptions + deleteOptions options.NodeDeleteOptions + drainabilityRules rules.Rules } // NewDefaultEvictor returns an instance of Evictor using the default parameters. -func NewDefaultEvictor(deleteOptions simulator.NodeDeleteOptions, evictionRegister evictionRegister) Evictor { +func NewDefaultEvictor(deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, evictionRegister evictionRegister) Evictor { return Evictor{ EvictionRetryTime: DefaultEvictionRetryTime, DsEvictionRetryTime: DefaultDsEvictionRetryTime, @@ -73,6 +76,7 @@ func NewDefaultEvictor(deleteOptions simulator.NodeDeleteOptions, evictionRegist PodEvictionHeadroom: DefaultPodEvictionHeadroom, evictionRegister: evictionRegister, deleteOptions: deleteOptions, + drainabilityRules: drainabilityRules, } } @@ -176,7 +180,7 @@ func (e Evictor) DrainNodeWithPods(ctx *acontext.AutoscalingContext, node *apiv1 // EvictDaemonSetPods creates eviction objects for all DaemonSet pods on the node. func (e Evictor) EvictDaemonSetPods(ctx *acontext.AutoscalingContext, nodeInfo *framework.NodeInfo, timeNow time.Time) error { nodeToDelete := nodeInfo.Node() - _, daemonSetPods, _, err := simulator.GetPodsToMove(nodeInfo, e.deleteOptions, nil, nil, timeNow) + _, daemonSetPods, _, err := simulator.GetPodsToMove(nodeInfo, e.deleteOptions, e.drainabilityRules, nil, nil, timeNow) if err != nil { return fmt.Errorf("failed to get DaemonSet pods for %s (error: %v)", nodeToDelete.Name, err) } diff --git a/cluster-autoscaler/core/scaledown/legacy/legacy.go b/cluster-autoscaler/core/scaledown/legacy/legacy.go index 268f874651dd..2cdd0ec168f3 100644 --- a/cluster-autoscaler/core/scaledown/legacy/legacy.go +++ b/cluster-autoscaler/core/scaledown/legacy/legacy.go @@ -32,6 +32,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/metrics" "k8s.io/autoscaler/cluster-autoscaler/processors" "k8s.io/autoscaler/cluster-autoscaler/simulator" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/utilization" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" @@ -55,9 +57,9 @@ type ScaleDown struct { } // NewScaleDown builds new ScaleDown object. -func NewScaleDown(context *context.AutoscalingContext, processors *processors.AutoscalingProcessors, ndt *deletiontracker.NodeDeletionTracker, deleteOptions simulator.NodeDeleteOptions) *ScaleDown { +func NewScaleDown(context *context.AutoscalingContext, processors *processors.AutoscalingProcessors, ndt *deletiontracker.NodeDeletionTracker, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules) *ScaleDown { usageTracker := simulator.NewUsageTracker() - removalSimulator := simulator.NewRemovalSimulator(context.ListerRegistry, context.ClusterSnapshot, context.PredicateChecker, usageTracker, deleteOptions, false) + removalSimulator := simulator.NewRemovalSimulator(context.ListerRegistry, context.ClusterSnapshot, context.PredicateChecker, usageTracker, deleteOptions, drainabilityRules, false) unremovableNodes := unremovable.NewNodes() resourceLimitsFinder := resource.NewLimitsFinder(processors.CustomResourcesProcessor) return &ScaleDown{ diff --git a/cluster-autoscaler/core/scaledown/legacy/legacy_test.go b/cluster-autoscaler/core/scaledown/legacy/legacy_test.go index be6d7565d4b3..1ba61e250dfd 100644 --- a/cluster-autoscaler/core/scaledown/legacy/legacy_test.go +++ b/cluster-autoscaler/core/scaledown/legacy/legacy_test.go @@ -25,6 +25,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/processors/nodegroupconfig" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" autoscaler_errors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" appsv1 "k8s.io/api/apps/v1" @@ -1287,14 +1288,13 @@ func newWrapperForTesting(ctx *context.AutoscalingContext, clusterStateRegistry if ndt == nil { ndt = deletiontracker.NewNodeDeletionTracker(0 * time.Second) } - deleteOptions := simulator.NodeDeleteOptions{ + deleteOptions := options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, - MinReplicaCount: 0, SkipNodesWithCustomControllerPods: true, } processors := NewTestProcessors(ctx) - sd := NewScaleDown(ctx, processors, ndt, deleteOptions) - actuator := actuation.NewActuator(ctx, clusterStateRegistry, ndt, deleteOptions, processors.NodeGroupConfigProcessor) + sd := NewScaleDown(ctx, processors, ndt, deleteOptions, nil) + actuator := actuation.NewActuator(ctx, clusterStateRegistry, ndt, deleteOptions, nil, processors.NodeGroupConfigProcessor) return NewScaleDownWrapper(sd, actuator) } diff --git a/cluster-autoscaler/core/scaledown/planner/planner.go b/cluster-autoscaler/core/scaledown/planner/planner.go index bca5e00ff738..032d93c4f09c 100644 --- a/cluster-autoscaler/core/scaledown/planner/planner.go +++ b/cluster-autoscaler/core/scaledown/planner/planner.go @@ -34,6 +34,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/processors/nodes" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/scheduling" "k8s.io/autoscaler/cluster-autoscaler/simulator/utilization" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" @@ -77,7 +79,7 @@ type Planner struct { } // New creates a new Planner object. -func New(context *context.AutoscalingContext, processors *processors.AutoscalingProcessors, deleteOptions simulator.NodeDeleteOptions) *Planner { +func New(context *context.AutoscalingContext, processors *processors.AutoscalingProcessors, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules) *Planner { resourceLimitsFinder := resource.NewLimitsFinder(processors.CustomResourcesProcessor) minUpdateInterval := context.AutoscalingOptions.NodeGroupDefaults.ScaleDownUnneededTime if minUpdateInterval == 0*time.Nanosecond { @@ -87,7 +89,7 @@ func New(context *context.AutoscalingContext, processors *processors.Autoscaling context: context, unremovableNodes: unremovable.NewNodes(), unneededNodes: unneeded.NewNodes(processors.NodeGroupConfigProcessor, resourceLimitsFinder), - rs: simulator.NewRemovalSimulator(context.ListerRegistry, context.ClusterSnapshot, context.PredicateChecker, simulator.NewUsageTracker(), deleteOptions, true), + rs: simulator.NewRemovalSimulator(context.ListerRegistry, context.ClusterSnapshot, context.PredicateChecker, simulator.NewUsageTracker(), deleteOptions, drainabilityRules, true), actuationInjector: scheduling.NewHintingSimulator(context.PredicateChecker), eligibilityChecker: eligibility.NewChecker(processors.NodeGroupConfigProcessor), nodeUtilizationMap: make(map[string]utilization.Info), diff --git a/cluster-autoscaler/core/scaledown/planner/planner_test.go b/cluster-autoscaler/core/scaledown/planner/planner_test.go index 2fcf5cc866b3..e92eb1ab4223 100644 --- a/cluster-autoscaler/core/scaledown/planner/planner_test.go +++ b/cluster-autoscaler/core/scaledown/planner/planner_test.go @@ -37,6 +37,7 @@ import ( . "k8s.io/autoscaler/cluster-autoscaler/core/test" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/utilization" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" "k8s.io/autoscaler/cluster-autoscaler/utils/taints" @@ -492,8 +493,8 @@ func TestUpdateClusterState(t *testing.T) { }, &fake.Clientset{}, registry, provider, nil, nil) assert.NoError(t, err) clustersnapshot.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, tc.nodes, tc.pods) - deleteOptions := simulator.NodeDeleteOptions{} - p := New(&context, NewTestProcessors(&context), deleteOptions) + deleteOptions := options.NodeDeleteOptions{} + p := New(&context, NewTestProcessors(&context), deleteOptions, nil) p.eligibilityChecker = &fakeEligibilityChecker{eligible: asMap(tc.eligible)} if tc.isSimulationTimeout { context.AutoscalingOptions.ScaleDownSimulationTimeout = 1 * time.Second @@ -611,8 +612,8 @@ func TestUpdateClusterStatUnneededNodesLimit(t *testing.T) { }, &fake.Clientset{}, nil, provider, nil, nil) assert.NoError(t, err) clustersnapshot.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, nodes, nil) - deleteOptions := simulator.NodeDeleteOptions{} - p := New(&context, NewTestProcessors(&context), deleteOptions) + deleteOptions := options.NodeDeleteOptions{} + p := New(&context, NewTestProcessors(&context), deleteOptions, nil) p.eligibilityChecker = &fakeEligibilityChecker{eligible: asMap(nodeNames(nodes))} p.minUpdateInterval = tc.updateInterval p.unneededNodes.Update(previouslyUnneeded, time.Now()) @@ -779,8 +780,8 @@ func TestNodesToDelete(t *testing.T) { }, &fake.Clientset{}, nil, provider, nil, nil) assert.NoError(t, err) clustersnapshot.InitializeClusterSnapshotOrDie(t, context.ClusterSnapshot, allNodes, nil) - deleteOptions := simulator.NodeDeleteOptions{} - p := New(&context, NewTestProcessors(&context), deleteOptions) + deleteOptions := options.NodeDeleteOptions{} + p := New(&context, NewTestProcessors(&context), deleteOptions, nil) p.latestUpdate = time.Now() p.actuationStatus = deletiontracker.NewNodeDeletionTracker(0 * time.Second) p.unneededNodes.Update(allRemovables, time.Now().Add(-1*time.Hour)) diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index e31a63fc7007..68b870786d02 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -51,6 +51,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/processors/status" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/utils/backoff" caerrors "k8s.io/autoscaler/cluster-autoscaler/utils/errors" @@ -142,7 +144,8 @@ func NewStaticAutoscaler( debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter, remainingPdbTracker pdb.RemainingPdbTracker, scaleUpOrchestrator scaleup.Orchestrator, - deleteOptions simulator.NodeDeleteOptions) *StaticAutoscaler { + deleteOptions options.NodeDeleteOptions, + drainabilityRules rules.Rules) *StaticAutoscaler { clusterStateConfig := clusterstate.ClusterStateRegistryConfig{ MaxTotalUnreadyPercentage: opts.MaxTotalUnreadyPercentage, @@ -169,14 +172,14 @@ func NewStaticAutoscaler( // TODO: Populate the ScaleDownActuator/Planner fields in AutoscalingContext // during the struct creation rather than here. ndt := deletiontracker.NewNodeDeletionTracker(0 * time.Second) - scaleDown := legacy.NewScaleDown(autoscalingContext, processors, ndt, deleteOptions) - actuator := actuation.NewActuator(autoscalingContext, clusterStateRegistry, ndt, deleteOptions, processors.NodeGroupConfigProcessor) + scaleDown := legacy.NewScaleDown(autoscalingContext, processors, ndt, deleteOptions, drainabilityRules) + actuator := actuation.NewActuator(autoscalingContext, clusterStateRegistry, ndt, deleteOptions, drainabilityRules, processors.NodeGroupConfigProcessor) autoscalingContext.ScaleDownActuator = actuator var scaleDownPlanner scaledown.Planner var scaleDownActuator scaledown.Actuator if opts.ParallelDrain { - scaleDownPlanner = planner.New(autoscalingContext, processors, deleteOptions) + scaleDownPlanner = planner.New(autoscalingContext, processors, deleteOptions, drainabilityRules) scaleDownActuator = actuator } else { // TODO: Remove the wrapper once the legacy implementation becomes obsolete. diff --git a/cluster-autoscaler/core/static_autoscaler_test.go b/cluster-autoscaler/core/static_autoscaler_test.go index ace16dde111e..1a6fc141ec46 100644 --- a/cluster-autoscaler/core/static_autoscaler_test.go +++ b/cluster-autoscaler/core/static_autoscaler_test.go @@ -45,6 +45,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/processors/nodegroupconfig" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/utilization" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" @@ -149,9 +151,9 @@ func (m *onNodeGroupDeleteMock) Delete(id string) error { return args.Error(0) } -func setUpScaleDownActuator(ctx *context.AutoscalingContext, options config.AutoscalingOptions) { - deleteOptions := simulator.NewNodeDeleteOptions(options) - ctx.ScaleDownActuator = actuation.NewActuator(ctx, nil, deletiontracker.NewNodeDeletionTracker(0*time.Second), deleteOptions, NewTestProcessors(ctx).NodeGroupConfigProcessor) +func setUpScaleDownActuator(ctx *context.AutoscalingContext, autoscalingOptions config.AutoscalingOptions) { + deleteOptions := options.NewNodeDeleteOptions(autoscalingOptions) + ctx.ScaleDownActuator = actuation.NewActuator(ctx, nil, deletiontracker.NewNodeDeletionTracker(0*time.Second), deleteOptions, rules.Default(), NewTestProcessors(ctx).NodeGroupConfigProcessor) } func TestStaticAutoscalerRunOnce(t *testing.T) { @@ -1447,11 +1449,11 @@ func TestStaticAutoscalerUpcomingScaleDownCandidates(t *testing.T) { kubernetes.NewTestPodLister(nil), kubernetes.NewTestPodDisruptionBudgetLister(nil), daemonSetLister, nil, nil, nil, nil) - // Create context with minimal options that guarantee we reach the tested logic. - // We're only testing the input to UpdateClusterState which should be called whenever scale-down is enabled, other options shouldn't matter. - options := config.AutoscalingOptions{ScaleDownEnabled: true} + // Create context with minimal autoscalingOptions that guarantee we reach the tested logic. + // We're only testing the input to UpdateClusterState which should be called whenever scale-down is enabled, other autoscalingOptions shouldn't matter. + autoscalingOptions := config.AutoscalingOptions{ScaleDownEnabled: true} processorCallbacks := newStaticAutoscalerProcessorCallbacks() - ctx, err := NewScaleTestAutoscalingContext(options, &fake.Clientset{}, listerRegistry, provider, processorCallbacks, nil) + ctx, err := NewScaleTestAutoscalingContext(autoscalingOptions, &fake.Clientset{}, listerRegistry, provider, processorCallbacks, nil) assert.NoError(t, err) // Create CSR with unhealthy cluster protection effectively disabled, to guarantee we reach the tested logic. @@ -1459,7 +1461,7 @@ func TestStaticAutoscalerUpcomingScaleDownCandidates(t *testing.T) { csr := clusterstate.NewClusterStateRegistry(provider, csrConfig, ctx.LogRecorder, NewBackoff(), nodegroupconfig.NewDefaultNodeGroupConfigProcessor(config.NodeGroupAutoscalingOptions{MaxNodeProvisionTime: 15 * time.Minute})) // Setting the Actuator is necessary for testing any scale-down logic, it shouldn't have anything to do in this test. - actuator := actuation.NewActuator(&ctx, csr, deletiontracker.NewNodeDeletionTracker(0*time.Second), simulator.NodeDeleteOptions{}, NewTestProcessors(&ctx).NodeGroupConfigProcessor) + actuator := actuation.NewActuator(&ctx, csr, deletiontracker.NewNodeDeletionTracker(0*time.Second), options.NodeDeleteOptions{}, nil, NewTestProcessors(&ctx).NodeGroupConfigProcessor) ctx.ScaleDownActuator = actuator // Fake planner that keeps track of the scale-down candidates passed to UpdateClusterState. @@ -1847,15 +1849,14 @@ func newScaleDownPlannerAndActuator(t *testing.T, ctx *context.AutoscalingContex ctx.MaxDrainParallelism = 1 ctx.NodeDeletionBatcherInterval = 0 * time.Second ctx.NodeDeleteDelayAfterTaint = 1 * time.Second - deleteOptions := simulator.NodeDeleteOptions{ + deleteOptions := options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, - MinReplicaCount: 0, SkipNodesWithCustomControllerPods: true, } ndt := deletiontracker.NewNodeDeletionTracker(0 * time.Second) - sd := legacy.NewScaleDown(ctx, p, ndt, deleteOptions) - actuator := actuation.NewActuator(ctx, cs, ndt, deleteOptions, p.NodeGroupConfigProcessor) + sd := legacy.NewScaleDown(ctx, p, ndt, deleteOptions, nil) + actuator := actuation.NewActuator(ctx, cs, ndt, deleteOptions, nil, p.NodeGroupConfigProcessor) wrapper := legacy.NewScaleDownWrapper(sd, actuator) return wrapper, wrapper } diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 9e021b8963c3..6855ca1c6c49 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -29,10 +29,6 @@ import ( "syscall" "time" - "k8s.io/autoscaler/cluster-autoscaler/debuggingsnapshot" - "k8s.io/autoscaler/cluster-autoscaler/simulator" - "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" - "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/api/meta" @@ -45,6 +41,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/core" "k8s.io/autoscaler/cluster-autoscaler/core/podlistprocessor" + "k8s.io/autoscaler/cluster-autoscaler/debuggingsnapshot" "k8s.io/autoscaler/cluster-autoscaler/estimator" "k8s.io/autoscaler/cluster-autoscaler/expander" "k8s.io/autoscaler/cluster-autoscaler/metrics" @@ -55,6 +52,9 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/processors/scaledowncandidates/emptycandidates" "k8s.io/autoscaler/cluster-autoscaler/processors/scaledowncandidates/previouscandidates" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" scheduler_util "k8s.io/autoscaler/cluster-autoscaler/utils/scheduler" @@ -68,7 +68,7 @@ import ( "k8s.io/client-go/tools/leaderelection/resourcelock" kube_flag "k8s.io/component-base/cli/flag" componentbaseconfig "k8s.io/component-base/config" - "k8s.io/component-base/config/options" + componentopts "k8s.io/component-base/config/options" "k8s.io/component-base/logs" logsapi "k8s.io/component-base/logs/api/v1" _ "k8s.io/component-base/logs/json/register" @@ -461,7 +461,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter if err != nil { return nil, err } - deleteOptions := simulator.NewNodeDeleteOptions(autoscalingOptions) + deleteOptions := options.NewNodeDeleteOptions(autoscalingOptions) opts := core.AutoscalerOptions{ AutoscalingOptions: autoscalingOptions, @@ -481,7 +481,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter if autoscalingOptions.ParallelDrain { sdCandidatesSorting := previouscandidates.NewPreviousCandidates() scaleDownCandidatesComparers = []scaledowncandidates.CandidatesComparer{ - emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions), + emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions, rules.Default()), sdCandidatesSorting, } opts.Processors.ScaleDownCandidatesNotifier.Register(sdCandidatesSorting) @@ -575,7 +575,7 @@ func main() { leaderElection := defaultLeaderElectionConfiguration() leaderElection.LeaderElect = true - options.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine) + componentopts.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine) featureGate := utilfeature.DefaultMutableFeatureGate loggingConfig := logsapi.NewLoggingConfiguration() diff --git a/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting.go b/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting.go index 38dbeec3071a..8ad745648c2a 100644 --- a/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting.go +++ b/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting.go @@ -22,6 +22,8 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" ) @@ -45,12 +47,17 @@ func NewNodeInfoGetter(c clustersnapshot.ClusterSnapshot) *nodeInfoGetterImpl { // EmptySorting is sorting scale down candidates so that empty nodes appear first. type EmptySorting struct { nodeInfoGetter - deleteOptions simulator.NodeDeleteOptions + deleteOptions options.NodeDeleteOptions + drainabilityRules rules.Rules } // NewEmptySortingProcessor return EmptySorting struct. -func NewEmptySortingProcessor(n nodeInfoGetter, deleteOptions simulator.NodeDeleteOptions) *EmptySorting { - return &EmptySorting{n, deleteOptions} +func NewEmptySortingProcessor(n nodeInfoGetter, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules) *EmptySorting { + return &EmptySorting{ + nodeInfoGetter: n, + deleteOptions: deleteOptions, + drainabilityRules: drainabilityRules, + } } // ScaleDownEarlierThan return true if node1 is empty and node2 isn't. @@ -66,7 +73,7 @@ func (p *EmptySorting) isNodeEmpty(node *apiv1.Node) bool { if err != nil { return false } - podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, p.deleteOptions, nil, nil, time.Now()) + podsToRemove, _, _, err := simulator.GetPodsToMove(nodeInfo, p.deleteOptions, p.drainabilityRules, nil, nil, time.Now()) if err == nil && len(podsToRemove) == 0 { return true } diff --git a/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting_test.go b/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting_test.go index 4aedcd7ea15c..469ddcd81382 100644 --- a/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting_test.go +++ b/cluster-autoscaler/processors/scaledowncandidates/emptycandidates/empty_candidates_sorting_test.go @@ -21,7 +21,7 @@ import ( "testing" v1 "k8s.io/api/core/v1" - "k8s.io/autoscaler/cluster-autoscaler/simulator" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" ) @@ -62,13 +62,15 @@ func TestScaleDownEarlierThan(t *testing.T) { niGetter := testNodeInfoGetter{map[string]*schedulerframework.NodeInfo{nodeEmptyName: niEmpty, nodeNonEmptyName: niNonEmpty, nodeEmptyName2: niEmpty2}} - deleteOptions := simulator.NodeDeleteOptions{ + deleteOptions := options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, - MinReplicaCount: 0, SkipNodesWithCustomControllerPods: true, } - p := EmptySorting{&niGetter, deleteOptions} + p := EmptySorting{ + nodeInfoGetter: &niGetter, + deleteOptions: deleteOptions, + } tests := []struct { name string @@ -95,22 +97,19 @@ func TestScaleDownEarlierThan(t *testing.T) { wantEarlier: true, }, { - name: "Non-empty node is not earlier that node without nodeInfo", - node1: nodeNonEmpty, - node2: noNodeInfoNode, - wantEarlier: false, + name: "Non-empty node is not earlier that node without nodeInfo", + node1: nodeNonEmpty, + node2: noNodeInfoNode, }, { - name: "Node without nodeInfo is not earlier that non-empty node", - node1: noNodeInfoNode, - node2: nodeNonEmpty, - wantEarlier: false, + name: "Node without nodeInfo is not earlier that non-empty node", + node1: noNodeInfoNode, + node2: nodeNonEmpty, }, { - name: "Empty node is not earlier that another empty node", - node1: nodeEmpty, - node2: nodeEmpty2, - wantEarlier: false, + name: "Empty node is not earlier that another empty node", + node1: nodeEmpty, + node2: nodeEmpty2, }, } for _, test := range tests { diff --git a/cluster-autoscaler/simulator/cluster.go b/cluster-autoscaler/simulator/cluster.go index 1af916b64bf9..2bb77b7aace8 100644 --- a/cluster-autoscaler/simulator/cluster.go +++ b/cluster-autoscaler/simulator/cluster.go @@ -22,6 +22,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/simulator/scheduling" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" @@ -95,19 +97,21 @@ type RemovalSimulator struct { clusterSnapshot clustersnapshot.ClusterSnapshot usageTracker *UsageTracker canPersist bool - deleteOptions NodeDeleteOptions + deleteOptions options.NodeDeleteOptions + drainabilityRules rules.Rules schedulingSimulator *scheduling.HintingSimulator } // NewRemovalSimulator returns a new RemovalSimulator. func NewRemovalSimulator(listers kube_util.ListerRegistry, clusterSnapshot clustersnapshot.ClusterSnapshot, predicateChecker predicatechecker.PredicateChecker, - usageTracker *UsageTracker, deleteOptions NodeDeleteOptions, persistSuccessfulSimulations bool) *RemovalSimulator { + usageTracker *UsageTracker, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, persistSuccessfulSimulations bool) *RemovalSimulator { return &RemovalSimulator{ listers: listers, clusterSnapshot: clusterSnapshot, usageTracker: usageTracker, canPersist: persistSuccessfulSimulations, deleteOptions: deleteOptions, + drainabilityRules: drainabilityRules, schedulingSimulator: scheduling.NewHintingSimulator(predicateChecker), } } @@ -159,7 +163,7 @@ func (r *RemovalSimulator) SimulateNodeRemoval( return nil, &UnremovableNode{Node: nodeInfo.Node(), Reason: UnexpectedError} } - podsToRemove, daemonSetPods, blockingPod, err := GetPodsToMove(nodeInfo, r.deleteOptions, r.listers, remainingPdbTracker, timestamp) + podsToRemove, daemonSetPods, blockingPod, err := GetPodsToMove(nodeInfo, r.deleteOptions, r.drainabilityRules, r.listers, remainingPdbTracker, timestamp) if err != nil { klog.V(2).Infof("node %s cannot be removed: %v", nodeName, err) if blockingPod != nil { @@ -193,7 +197,7 @@ func (r *RemovalSimulator) FindEmptyNodesToRemove(candidates []string, timestamp continue } // Should block on all pods - podsToRemove, _, _, err := GetPodsToMove(nodeInfo, r.deleteOptions, nil, nil, timestamp) + podsToRemove, _, _, err := GetPodsToMove(nodeInfo, r.deleteOptions, r.drainabilityRules, nil, nil, timestamp) if err == nil && len(podsToRemove) == 0 { result = append(result, node) } diff --git a/cluster-autoscaler/simulator/cluster_test.go b/cluster-autoscaler/simulator/cluster_test.go index 8c141eef56cf..136e0d47d2a9 100644 --- a/cluster-autoscaler/simulator/cluster_test.go +++ b/cluster-autoscaler/simulator/cluster_test.go @@ -22,6 +22,7 @@ import ( "time" "k8s.io/autoscaler/cluster-autoscaler/simulator/clustersnapshot" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/simulator/predicatechecker" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" @@ -58,7 +59,7 @@ func TestFindEmptyNodes(t *testing.T) { clusterSnapshot := clustersnapshot.NewBasicClusterSnapshot() clustersnapshot.InitializeClusterSnapshotOrDie(t, clusterSnapshot, []*apiv1.Node{nodes[0], nodes[1], nodes[2], nodes[3]}, []*apiv1.Pod{pod1, pod2}) testTime := time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) - r := NewRemovalSimulator(nil, clusterSnapshot, nil, nil, testDeleteOptions(), false) + r := NewRemovalSimulator(nil, clusterSnapshot, nil, nil, testDeleteOptions(), nil, false) emptyNodes := r.FindEmptyNodesToRemove(nodeNames, testTime) assert.Equal(t, []string{nodeNames[0], nodeNames[2], nodeNames[3]}, emptyNodes) } @@ -205,7 +206,7 @@ func TestFindNodesToRemove(t *testing.T) { destinations = append(destinations, node.Name) } clustersnapshot.InitializeClusterSnapshotOrDie(t, clusterSnapshot, test.allNodes, test.pods) - r := NewRemovalSimulator(registry, clusterSnapshot, predicateChecker, tracker, testDeleteOptions(), false) + r := NewRemovalSimulator(registry, clusterSnapshot, predicateChecker, tracker, testDeleteOptions(), nil, false) toRemove, unremovable := r.FindNodesToRemove(test.candidates, destinations, time.Now(), nil) fmt.Printf("Test scenario: %s, found len(toRemove)=%v, expected len(test.toRemove)=%v\n", test.name, len(toRemove), len(test.toRemove)) assert.Equal(t, toRemove, test.toRemove) @@ -214,11 +215,10 @@ func TestFindNodesToRemove(t *testing.T) { } } -func testDeleteOptions() NodeDeleteOptions { - return NodeDeleteOptions{ +func testDeleteOptions() options.NodeDeleteOptions { + return options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, - MinReplicaCount: 0, SkipNodesWithCustomControllerPods: true, } } diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 55090023debf..a5d37bbc397a 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -24,42 +24,16 @@ import ( policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" ) -// NodeDeleteOptions contains various options to customize how draining will behave -type NodeDeleteOptions struct { - // SkipNodesWithSystemPods tells if nodes with pods from kube-system should be deleted (except for DaemonSet or mirror pods) - SkipNodesWithSystemPods bool - // SkipNodesWithLocalStorage tells if nodes with pods with local storage, e.g. EmptyDir or HostPath, should be deleted - SkipNodesWithLocalStorage bool - // SkipNodesWithCustomControllerPods tells if nodes with custom-controller owned pods should be skipped from deletion (skip if 'true') - SkipNodesWithCustomControllerPods bool - // MinReplicaCount controls the minimum number of replicas that a replica set or replication controller should have - // to allow their pods deletion in scale down - MinReplicaCount int - // DrainabilityRules contain a list of checks that are used to verify whether a pod can be drained from node. - DrainabilityRules rules.Rules -} - -// NewNodeDeleteOptions returns new node delete options extracted from autoscaling options -func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { - return NodeDeleteOptions{ - SkipNodesWithSystemPods: opts.SkipNodesWithSystemPods, - SkipNodesWithLocalStorage: opts.SkipNodesWithLocalStorage, - MinReplicaCount: opts.MinReplicaCount, - SkipNodesWithCustomControllerPods: opts.SkipNodesWithCustomControllerPods, - DrainabilityRules: rules.Default(), - } -} - // GetPodsToMove returns a list of pods that should be moved elsewhere // and a list of DaemonSet pods that should be evicted if the node // is drained. Raises error if there is an unreplicated pod. @@ -68,10 +42,8 @@ func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { // If listers is not nil it checks whether RC, DS, Jobs and RS that created these pods // still exist. // TODO(x13n): Rewrite GetPodsForDeletionOnNodeDrain into a set of DrainabilityRules. -func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions NodeDeleteOptions, listers kube_util.ListerRegistry, - remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { +func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, listers kube_util.ListerRegistry, remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { var drainPods, drainDs []*apiv1.Pod - drainabilityRules := deleteOptions.DrainabilityRules if drainabilityRules == nil { drainabilityRules = rules.Default() } @@ -80,6 +52,7 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions NodeDele } drainCtx := &drainability.DrainContext{ RemainingPdbTracker: remainingPdbTracker, + DeleteOptions: deleteOptions, } for _, podInfo := range nodeInfo.Pods { pod := podInfo.Pod diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index 32f4d64caadc..5e4611a9e104 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -28,6 +28,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" "k8s.io/kubernetes/pkg/kubelet/types" @@ -306,16 +307,14 @@ func TestGetPodsToMove(t *testing.T) { } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - deleteOptions := NodeDeleteOptions{ + deleteOptions := options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, - MinReplicaCount: 0, SkipNodesWithCustomControllerPods: true, - DrainabilityRules: tc.rules, } tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(tc.pdbs) - p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, nil, tracker, testTime) + p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, tc.rules, nil, tracker, testTime) if tc.wantErr { assert.Error(t, err) } else { diff --git a/cluster-autoscaler/simulator/drainability/context.go b/cluster-autoscaler/simulator/drainability/context.go index c2a341a84f8d..84a4ec4c454f 100644 --- a/cluster-autoscaler/simulator/drainability/context.go +++ b/cluster-autoscaler/simulator/drainability/context.go @@ -18,9 +18,11 @@ package drainability import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" ) // DrainContext contains parameters for drainability rules. type DrainContext struct { RemainingPdbTracker pdb.RemainingPdbTracker + DeleteOptions options.NodeDeleteOptions } diff --git a/cluster-autoscaler/simulator/options/nodedelete.go b/cluster-autoscaler/simulator/options/nodedelete.go new file mode 100644 index 000000000000..947095d6eb78 --- /dev/null +++ b/cluster-autoscaler/simulator/options/nodedelete.go @@ -0,0 +1,48 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package options + +import ( + "k8s.io/autoscaler/cluster-autoscaler/config" +) + +// NodeDeleteOptions contains various options to customize how draining will behave +type NodeDeleteOptions struct { + // SkipNodesWithSystemPods is true if nodes with kube-system pods should be + // deleted (except for DaemonSet or mirror pods). + SkipNodesWithSystemPods bool + // SkipNodesWithLocalStorage is true if nodes with pods using local storage + // (e.g. EmptyDir or HostPath) should be deleted. + SkipNodesWithLocalStorage bool + // SkipNodesWithCustomControllerPods is true if nodes with + // custom-controller-owned pods should be skipped. + SkipNodesWithCustomControllerPods bool + // MinReplicaCount determines the minimum number of replicas that a replica + // set or replication controller should have to allow pod deletion during + // scale down. + MinReplicaCount int +} + +// NewNodeDeleteOptions returns new node delete options extracted from autoscaling options. +func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { + return NodeDeleteOptions{ + SkipNodesWithSystemPods: opts.SkipNodesWithSystemPods, + SkipNodesWithLocalStorage: opts.SkipNodesWithLocalStorage, + MinReplicaCount: opts.MinReplicaCount, + SkipNodesWithCustomControllerPods: opts.SkipNodesWithCustomControllerPods, + } +} From 9ea5a36dc988a04c0c2b7feed3853ecaca4a3d48 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Fri, 29 Sep 2023 17:47:46 +0000 Subject: [PATCH 079/125] Replace old pdb check with remainingPdbTracker --- cluster-autoscaler/simulator/drain.go | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index a5d37bbc397a..7d8e5c449655 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -21,9 +21,6 @@ import ( "time" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" @@ -90,28 +87,10 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. if err != nil { return pods, daemonSetPods, blockingPod, err } - if pdbBlockingPod, err := checkPdbs(pods, remainingPdbTracker.GetPdbs()); err != nil { - return []*apiv1.Pod{}, []*apiv1.Pod{}, pdbBlockingPod, err + if canRemove, _, blockingPodInfo := remainingPdbTracker.CanRemovePods(pods); !canRemove { + pod := blockingPodInfo.Pod + return []*apiv1.Pod{}, []*apiv1.Pod{}, blockingPodInfo, fmt.Errorf("not enough pod disruption budget to move %s/%s", pod.Namespace, pod.Name) } return pods, daemonSetPods, nil, nil } - -func checkPdbs(pods []*apiv1.Pod, pdbs []*policyv1.PodDisruptionBudget) (*drain.BlockingPod, error) { - // TODO: remove it after deprecating legacy scale down. - // RemainingPdbTracker.CanRemovePods() to replace this function. - for _, pdb := range pdbs { - selector, err := metav1.LabelSelectorAsSelector(pdb.Spec.Selector) - if err != nil { - return nil, err - } - for _, pod := range pods { - if pod.Namespace == pdb.Namespace && selector.Matches(labels.Set(pod.Labels)) { - if pdb.Status.DisruptionsAllowed < 1 { - return &drain.BlockingPod{Pod: pod, Reason: drain.NotEnoughPdb}, fmt.Errorf("not enough pod disruption budget to move %s/%s", pod.Namespace, pod.Name) - } - } - } - } - return nil, nil -} From ad98cb321a9989288512ac86cdcc5c0533239f21 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Sat, 30 Sep 2023 20:41:37 +0200 Subject: [PATCH 080/125] autoscaler: fix premature end of binpacking When PermissionToAddNode gets called without actually adding a new node, the node counter in the thresholdBasedEstimationLimiter gets out of sync with the actual number of new nodes. This can happen when the "is the last node empty" check triggers. The solution used here is to rearrange the checks so that PermissionToAddNode is followed by adding a new node. Alternatively, it might also be possible to pass the current number of nodes as parameter. --- .../estimator/binpacking_estimator.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/cluster-autoscaler/estimator/binpacking_estimator.go b/cluster-autoscaler/estimator/binpacking_estimator.go index 2f7760cbe0a0..86a26de22550 100644 --- a/cluster-autoscaler/estimator/binpacking_estimator.go +++ b/cluster-autoscaler/estimator/binpacking_estimator.go @@ -106,12 +106,6 @@ func (e *BinpackingNodeEstimator) Estimate( } if !found { - // Stop binpacking if we reach the limit of nodes we can add. - // We return the result of the binpacking that we already performed. - if !e.limiter.PermissionToAddNode() { - break - } - // If the last node we've added is empty and the pod couldn't schedule on it, it wouldn't be able to schedule // on a new node either. There is no point adding more nodes to snapshot in such case, especially because of // performance cost each extra node adds to future FitsAnyNodeMatching calls. @@ -119,6 +113,16 @@ func (e *BinpackingNodeEstimator) Estimate( continue } + // Stop binpacking if we reach the limit of nodes we can add. + // We return the result of the binpacking that we already performed. + // + // The thresholdBasedEstimationLimiter implementation assumes that for + // each call that returns true, one node gets added. Therefore this + // must be the last check right before really adding a node. + if !e.limiter.PermissionToAddNode() { + break + } + // Add new node newNodeName, err := e.addNewNodeToSnapshot(nodeTemplate, newNodeNameIndex) if err != nil { From fd6e03fdfcf8c3c54dcadadaf4481ef61be44614 Mon Sep 17 00:00:00 2001 From: Tom Wanielista Date: Mon, 2 Oct 2023 16:09:46 -0700 Subject: [PATCH 081/125] aws: check for all possible Terminated states It's possible that an EC2 instance is in the Terminated state for multiple autoscaler loops, so to avoid trying to terminate it more than once and causing the bug seen for this initial fix, we include this check as well. Also, make the log more verbose and write out what state we found the instance in. --- .../cloudprovider/aws/auto_scaling_groups.go | 3 +- .../aws/aws_cloud_provider_test.go | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/aws/auto_scaling_groups.go b/cluster-autoscaler/cloudprovider/aws/auto_scaling_groups.go index a2a83fc52bae..244fe120800e 100644 --- a/cluster-autoscaler/cloudprovider/aws/auto_scaling_groups.go +++ b/cluster-autoscaler/cloudprovider/aws/auto_scaling_groups.go @@ -323,10 +323,11 @@ func (m *asgCache) DeleteInstances(instances []*AwsInstanceRef) error { } if lifecycle != nil && + *lifecycle == autoscaling.LifecycleStateTerminated || *lifecycle == autoscaling.LifecycleStateTerminating || *lifecycle == autoscaling.LifecycleStateTerminatingWait || *lifecycle == autoscaling.LifecycleStateTerminatingProceed { - klog.V(2).Infof("instance %s is already terminating, will skip instead", instance.Name) + klog.V(2).Infof("instance %s is already terminating in state %s, will skip instead", instance.Name, *lifecycle) continue } diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index 10f4cc87cab9..4ca1bf2d1567 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -504,6 +504,54 @@ func TestDeleteNodesTerminatingInstances(t *testing.T) { assert.Equal(t, 2, newSize) } +func TestDeleteNodesTerminatedInstances(t *testing.T) { + a := &autoScalingMock{} + provider := testProvider(t, newTestAwsManagerWithAsgs(t, a, nil, []string{"1:5:test-asg"})) + asgs := provider.NodeGroups() + + a.On("TerminateInstanceInAutoScalingGroup", &autoscaling.TerminateInstanceInAutoScalingGroupInput{ + InstanceId: aws.String("test-instance-id"), + ShouldDecrementDesiredCapacity: aws.Bool(true), + }).Return(&autoscaling.TerminateInstanceInAutoScalingGroupOutput{ + Activity: &autoscaling.Activity{Description: aws.String("Deleted instance")}, + }) + + // Look up the current number of instances... + var expectedInstancesCount int64 = 2 + a.On("DescribeAutoScalingGroupsPages", + &autoscaling.DescribeAutoScalingGroupsInput{ + AutoScalingGroupNames: aws.StringSlice([]string{"test-asg"}), + MaxRecords: aws.Int64(maxRecordsReturnedByAPI), + }, + mock.AnythingOfType("func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool"), + ).Run(func(args mock.Arguments) { + fn := args.Get(1).(func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool) + fn(testSetASGInstanceLifecycle(testNamedDescribeAutoScalingGroupsOutput("test-asg", expectedInstancesCount, "test-instance-id", "second-test-instance-id"), autoscaling.LifecycleStateTerminated), false) + // we expect the instance count to be 1 after the call to DeleteNodes + expectedInstancesCount = 1 + }).Return(nil) + + provider.Refresh() + + initialSize, err := asgs[0].TargetSize() + assert.NoError(t, err) + assert.Equal(t, 2, initialSize) + + node := &apiv1.Node{ + Spec: apiv1.NodeSpec{ + ProviderID: "aws:///us-east-1a/test-instance-id", + }, + } + err = asgs[0].DeleteNodes([]*apiv1.Node{node}) + assert.NoError(t, err) + a.AssertNumberOfCalls(t, "TerminateInstanceInAutoScalingGroup", 0) // instances which are terminating don't need to be terminated again + a.AssertNumberOfCalls(t, "DescribeAutoScalingGroupsPages", 1) + + newSize, err := asgs[0].TargetSize() + assert.NoError(t, err) + assert.Equal(t, 2, newSize) +} + func TestDeleteNodesWithPlaceholder(t *testing.T) { a := &autoScalingMock{} provider := testProvider(t, newTestAwsManagerWithAsgs(t, a, nil, []string{"1:5:test-asg"})) From ce8122075b17003b80b720671298a1e643c903ce Mon Sep 17 00:00:00 2001 From: Tom Wanielista Date: Tue, 3 Oct 2023 10:21:25 -0700 Subject: [PATCH 082/125] clean up tests --- .../aws/aws_cloud_provider_test.go | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index 4ca1bf2d1567..7142cc89e7ef 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -516,8 +516,7 @@ func TestDeleteNodesTerminatedInstances(t *testing.T) { Activity: &autoscaling.Activity{Description: aws.String("Deleted instance")}, }) - // Look up the current number of instances... - var expectedInstancesCount int64 = 2 + expectedInstancesCount := 2 a.On("DescribeAutoScalingGroupsPages", &autoscaling.DescribeAutoScalingGroupsInput{ AutoScalingGroupNames: aws.StringSlice([]string{"test-asg"}), @@ -526,17 +525,18 @@ func TestDeleteNodesTerminatedInstances(t *testing.T) { mock.AnythingOfType("func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool"), ).Run(func(args mock.Arguments) { fn := args.Get(1).(func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool) - fn(testSetASGInstanceLifecycle(testNamedDescribeAutoScalingGroupsOutput("test-asg", expectedInstancesCount, "test-instance-id", "second-test-instance-id"), autoscaling.LifecycleStateTerminated), false) - // we expect the instance count to be 1 after the call to DeleteNodes - expectedInstancesCount = 1 + fn(testSetASGInstanceLifecycle(testNamedDescribeAutoScalingGroupsOutput("test-asg", int64(expectedInstancesCount), "test-instance-id", "second-test-instance-id"), autoscaling.LifecycleStateTerminated), false) }).Return(nil) + // load ASG state into cache provider.Refresh() initialSize, err := asgs[0].TargetSize() assert.NoError(t, err) - assert.Equal(t, 2, initialSize) + assert.Equal(t, expectedInstancesCount, initialSize) + // try deleting a node, but all of them are already in a + // Terminated state, so we should see no calls to Terminate. node := &apiv1.Node{ Spec: apiv1.NodeSpec{ ProviderID: "aws:///us-east-1a/test-instance-id", @@ -544,12 +544,17 @@ func TestDeleteNodesTerminatedInstances(t *testing.T) { } err = asgs[0].DeleteNodes([]*apiv1.Node{node}) assert.NoError(t, err) - a.AssertNumberOfCalls(t, "TerminateInstanceInAutoScalingGroup", 0) // instances which are terminating don't need to be terminated again + // we expect no calls to TerminateInstanceInAutoScalingGroup, + // because the Node we tried to Delete was already terminating. + a.AssertNumberOfCalls(t, "TerminateInstanceInAutoScalingGroup", 0) a.AssertNumberOfCalls(t, "DescribeAutoScalingGroupsPages", 1) newSize, err := asgs[0].TargetSize() assert.NoError(t, err) - assert.Equal(t, 2, newSize) + // we expect TargetSize to stay the same, even though there are + // two instances in Terminated state - TargetSize was already + // adjusted for them in a previous loop. + assert.Equal(t, initialSize, newSize) } func TestDeleteNodesWithPlaceholder(t *testing.T) { From 7523da5487e33a0acb9ee1e624a7ee7ab4a3cfad Mon Sep 17 00:00:00 2001 From: Jatin Bedi <61214448+jatinbedi@users.noreply.github.com> Date: Tue, 3 Oct 2023 13:19:51 -0700 Subject: [PATCH 083/125] Update CA_with_AWS_IAM_OIDC.md --- cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md b/cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md index d788266e8587..9c7f6c060a90 100644 --- a/cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md +++ b/cluster-autoscaler/cloudprovider/aws/CA_with_AWS_IAM_OIDC.md @@ -42,7 +42,7 @@ Edit the OIDC provider suffix and change it from :aud to :sub. Replace sts.amazonaws.com to your service account ID. - Update trust policy to finish. -D) Set up [Cluster Autoscaler Auto-Discovery] using the [tutorial] . +D) Set up [Cluster Autoscaler Auto-Discovery] using the [tutorial](README.md#auto-discovery-setup) . - Open the Amazon EC2 console, and then choose EKS worker node Auto Scaling Groups from the navigation pane. - In the "Add/Edit Auto Scaling Group Tags" window, please make sure you enter the following tags by replacing 'awsExampleClusterName' with the name of your EKS cluster. Then, choose "Save". @@ -174,7 +174,6 @@ I1025 13:48:42.975037 1 scale_up.go:529] Final scale-up plan: [{eksctl-xxx [IAM OIDC]: [IAM policy]: [documentation]: - [tutorial]: From 72ebe77f1bd70ccc06a7ff8e524cc550c569aa5e Mon Sep 17 00:00:00 2001 From: Kevin Bates Date: Wed, 4 Oct 2023 07:13:18 -0700 Subject: [PATCH 084/125] Clarify simulation for removal log statement --- cluster-autoscaler/simulator/cluster.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/simulator/cluster.go b/cluster-autoscaler/simulator/cluster.go index 2bb77b7aace8..038042f663bc 100644 --- a/cluster-autoscaler/simulator/cluster.go +++ b/cluster-autoscaler/simulator/cluster.go @@ -156,7 +156,7 @@ func (r *RemovalSimulator) SimulateNodeRemoval( if err != nil { klog.Errorf("Can't retrieve node %s from snapshot, err: %v", nodeName, err) } - klog.V(2).Infof("%s for removal", nodeName) + klog.V(2).Infof("Simulating node %s for removal", nodeName) if _, found := destinationMap[nodeName]; !found { klog.V(2).Infof("nodeInfo for %s not found", nodeName) From 81a4721f513a6e1919d6c080e60ce5f9754648d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Wr=C3=B3blewski?= Date: Fri, 6 Oct 2023 13:24:14 +0000 Subject: [PATCH 085/125] Extend BinpackingLimiter interface --- .../core/scaleup/orchestrator/orchestrator.go | 3 +++ cluster-autoscaler/core/test/common.go | 9 ++++++--- .../processors/binpacking/binpacking_limiter.go | 11 ++++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cluster-autoscaler/core/scaleup/orchestrator/orchestrator.go b/cluster-autoscaler/core/scaleup/orchestrator/orchestrator.go index a9d5ed1e9592..542e45c2d540 100644 --- a/cluster-autoscaler/core/scaleup/orchestrator/orchestrator.go +++ b/cluster-autoscaler/core/scaleup/orchestrator/orchestrator.go @@ -164,6 +164,9 @@ func (o *ScaleUpOrchestrator) ScaleUp( } } + // Finalize binpacking limiter. + o.processors.BinpackingLimiter.FinalizeBinpacking(o.autoscalingContext, options) + if len(options) == 0 { klog.V(1).Info("No expansion options") return &status.ScaleUpStatus{ diff --git a/cluster-autoscaler/core/test/common.go b/cluster-autoscaler/core/test/common.go index 78247b927927..35c582f5d127 100644 --- a/cluster-autoscaler/core/test/common.go +++ b/cluster-autoscaler/core/test/common.go @@ -357,14 +357,17 @@ func (p *MockBinpackingLimiter) InitBinpacking(context *context.AutoscalingConte p.requiredExpansionOptions = 1 } +// MarkProcessed is here to satisfy the interface. +func (p *MockBinpackingLimiter) MarkProcessed(context *context.AutoscalingContext, nodegroupId string) { +} + // StopBinpacking stops the binpacking early, if we already have requiredExpansionOptions i.e. 1. func (p *MockBinpackingLimiter) StopBinpacking(context *context.AutoscalingContext, evaluatedOptions []expander.Option) bool { return len(evaluatedOptions) == p.requiredExpansionOptions } -// MarkProcessed is here to satisfy the interface. -func (p *MockBinpackingLimiter) MarkProcessed(context *context.AutoscalingContext, nodegroupId string) { - +// FinalizeBinpacking is here to satisfy the interface. +func (p *MockBinpackingLimiter) FinalizeBinpacking(context *context.AutoscalingContext, finalOptions []expander.Option) { } // NewBackoff creates a new backoff object diff --git a/cluster-autoscaler/processors/binpacking/binpacking_limiter.go b/cluster-autoscaler/processors/binpacking/binpacking_limiter.go index 3b3ab61ba3f1..e1396ecf79c7 100644 --- a/cluster-autoscaler/processors/binpacking/binpacking_limiter.go +++ b/cluster-autoscaler/processors/binpacking/binpacking_limiter.go @@ -25,8 +25,9 @@ import ( // BinpackingLimiter processes expansion options to stop binpacking early. type BinpackingLimiter interface { InitBinpacking(context *context.AutoscalingContext, nodeGroups []cloudprovider.NodeGroup) - StopBinpacking(context *context.AutoscalingContext, evaluatedOptions []expander.Option) bool MarkProcessed(context *context.AutoscalingContext, nodegroupId string) + StopBinpacking(context *context.AutoscalingContext, evaluatedOptions []expander.Option) bool + FinalizeBinpacking(context *context.AutoscalingContext, finalOptions []expander.Option) } // NoOpBinpackingLimiter returns true without processing expansion options. @@ -42,11 +43,15 @@ func NewDefaultBinpackingLimiter() BinpackingLimiter { func (p *NoOpBinpackingLimiter) InitBinpacking(context *context.AutoscalingContext, nodeGroups []cloudprovider.NodeGroup) { } +// MarkProcessed marks the nodegroup as processed. +func (p *NoOpBinpackingLimiter) MarkProcessed(context *context.AutoscalingContext, nodegroupId string) { +} + // StopBinpacking is used to make decsions on the evaluated expansion options. func (p *NoOpBinpackingLimiter) StopBinpacking(context *context.AutoscalingContext, evaluatedOptions []expander.Option) bool { return false } -// MarkProcessed marks the nodegroup as processed. -func (p *NoOpBinpackingLimiter) MarkProcessed(context *context.AutoscalingContext, nodegroupId string) { +// FinalizeBinpacking is called to finalize the BinpackingLimiter. +func (p *NoOpBinpackingLimiter) FinalizeBinpacking(context *context.AutoscalingContext, finalOptions []expander.Option) { } From 077f450ca07abdc70f16f72dbe1566bb2f014af6 Mon Sep 17 00:00:00 2001 From: Kevin Bates Date: Fri, 6 Oct 2023 07:50:30 -0700 Subject: [PATCH 086/125] Alter message slightly, per review --- cluster-autoscaler/simulator/cluster.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/simulator/cluster.go b/cluster-autoscaler/simulator/cluster.go index 038042f663bc..1c3e5bf10a3a 100644 --- a/cluster-autoscaler/simulator/cluster.go +++ b/cluster-autoscaler/simulator/cluster.go @@ -156,7 +156,7 @@ func (r *RemovalSimulator) SimulateNodeRemoval( if err != nil { klog.Errorf("Can't retrieve node %s from snapshot, err: %v", nodeName, err) } - klog.V(2).Infof("Simulating node %s for removal", nodeName) + klog.V(2).Infof("Simulating node %s removal", nodeName) if _, found := destinationMap[nodeName]; !found { klog.V(2).Infof("nodeInfo for %s not found", nodeName) From 0423b14b8ace149c4a72aa1db01696bd12fd198a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:16:23 +0000 Subject: [PATCH 087/125] Bump golang from 1.21.1 to 1.21.2 in /vertical-pod-autoscaler/builder Bumps golang from 1.21.1 to 1.21.2. --- updated-dependencies: - dependency-name: golang dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- vertical-pod-autoscaler/builder/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertical-pod-autoscaler/builder/Dockerfile b/vertical-pod-autoscaler/builder/Dockerfile index 453d43acbada..17e54c420d5c 100644 --- a/vertical-pod-autoscaler/builder/Dockerfile +++ b/vertical-pod-autoscaler/builder/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.21.1 +FROM golang:1.21.2 LABEL maintainer="Beata Skiba " ENV GOPATH /gopath/ From 5d0fac97de441c6d998445b0e9f9d0044304b655 Mon Sep 17 00:00:00 2001 From: Jerry Chan Date: Sun, 13 Aug 2023 19:56:27 +0800 Subject: [PATCH 088/125] feat(tencentcloud): remove dependency on tke interface --- .../cloudprovider/tencentcloud/README.md | 68 +- .../tencentcloud/client/client.go | 74 + .../tencentcloud/metrics/metrics.go | 4 +- .../tencentcloud-sdk-go/as/doc.go | 17 + .../{tencentcloud => }/as/v20180419/client.go | 1230 +- .../{tencentcloud => }/as/v20180419/errors.go | 68 +- .../{tencentcloud => }/as/v20180419/models.go | 2771 +++- .../common/circuit_breaker.go | 2 +- .../common/circuit_breaker_test.go | 71 + .../{tencentcloud => }/common/client.go | 232 +- .../tencentcloud-sdk-go/common/client_test.go | 224 + .../{tencentcloud => }/common/clienttoken.go | 2 +- .../common/clienttoken_test.go | 59 + .../common/common_client.go | 8 +- .../{tencentcloud => }/common/credentials.go | 2 +- .../common/cvm_role_credential.go | 2 +- .../common/cvm_role_provider.go | 4 +- .../{tencentcloud => }/common/env_provider.go | 4 +- .../common/env_provider_test.go | 66 + .../common/errors/errors.go | 2 +- .../common/http/common_request.go | 24 +- .../common/http/common_request_test.go | 198 + .../common/http/common_response.go | 2 +- .../{tencentcloud => }/common/http/request.go | 34 +- .../common/http/request_test.go | 51 + .../common/http/response.go | 4 +- .../{tencentcloud => }/common/ini.go | 4 +- .../tencentcloud-sdk-go/common/ini_test.go | 78 + .../tencentcloud-sdk-go/common/log.go | 26 + .../{tencentcloud => }/common/netretry.go | 9 +- .../common/netretry_test.go | 33 + .../common/oidc_role_arn_provider.go | 151 + .../common/profile/client_profile.go | 2 +- .../common/profile/client_profile_test.go | 49 + .../common/profile/http_profile.go | 3 +- .../common/profile_provider.go | 4 +- .../{tencentcloud => }/common/provider.go | 4 +- .../common/provider_chain.go | 4 +- .../common/ratelimitretry.go | 55 +- .../common/regions/regions.go | 6 +- .../common/role_arn_credential.go | 4 +- .../common/role_arn_provider.go | 10 +- .../{tencentcloud => }/common/section.go | 2 +- .../common/section_test.go | 101 + .../{tencentcloud => }/common/sign.go | 12 +- .../common/testdata_invalid.ini | 0 .../common/testdata_valid.ini | 2 +- .../{tencentcloud => }/common/types.go | 2 +- .../tencentcloud-sdk-go/common/types_test.go | 37 + .../{tencentcloud => }/common/value.go | 4 +- .../tencentcloud-sdk-go/common/value_test.go | 198 + .../tencentcloud-sdk-go/cvm/doc.go | 17 + .../cvm/v20170312/client.go | 2986 +++- .../cvm/v20170312/errors.go | 273 +- .../cvm/v20170312/models.go | 4890 +++++- .../tencentcloud/as/LICENSE | 201 - .../tencentcloud/common/LICENSE | 201 - .../tencentcloud/cvm/LICENSE | 201 - .../tencentcloud/tke/LICENSE | 201 - .../tencentcloud/tke/v20180525/client.go | 6616 -------- .../tencentcloud/tke/v20180525/errors.go | 336 - .../tencentcloud/tke/v20180525/models.go | 8078 ---------- .../tencentcloud/vpc/LICENSE | 201 - .../tencentcloud-sdk-go/vpc/doc.go | 17 + .../vpc/v20170312/client.go | 9345 ++++++++--- .../vpc/v20170312/errors.go | 449 +- .../vpc/v20170312/models.go | 13263 +++++++++++++--- .../tencentcloud_auto_scaling_group.go | 5 +- .../tencentcloud/tencentcloud_cache.go | 30 +- .../tencentcloud_cloud_provider.go | 2 +- .../tencentcloud/tencentcloud_manager.go | 338 +- .../tencentcloud/tencentcloud_mock_service.go | 49 - .../tencentcloud/tencentcloud_profiles.go | 28 +- .../tencentcloud/tencentcloud_service.go | 570 +- .../cloudprovider/tencentcloud/utils.go | 2 +- 75 files changed, 30073 insertions(+), 24249 deletions(-) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/client/client.go create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/doc.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/as/v20180419/client.go (82%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/as/v20180419/errors.go (85%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/as/v20180419/models.go (56%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/circuit_breaker.go (99%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/client.go (64%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/clienttoken.go (97%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/common_client.go (90%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/credentials.go (97%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/cvm_role_credential.go (97%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/cvm_role_provider.go (96%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/env_provider.go (94%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/errors/errors.go (97%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/http/common_request.go (86%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/http/common_response.go (96%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/http/request.go (91%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/http/response.go (97%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/ini.go (96%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini_test.go create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/log.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/netretry.go (91%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry_test.go create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/oidc_role_arn_provider.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/profile/client_profile.go (97%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/profile/http_profile.go (94%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/profile_provider.go (97%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/provider.go (93%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/provider_chain.go (94%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/ratelimitretry.go (61%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/regions/regions.go (92%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/role_arn_credential.go (95%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/role_arn_provider.go (93%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/section.go (96%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/sign.go (92%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/testdata_invalid.ini (100%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/testdata_valid.ini (79%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/types.go (98%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types_test.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/common/value.go (95%) create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value_test.go create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/doc.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/cvm/v20170312/client.go (74%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/cvm/v20170312/errors.go (71%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/cvm/v20170312/models.go (52%) delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/LICENSE delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/LICENSE delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/LICENSE delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/LICENSE delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/client.go delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/errors.go delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/models.go delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/LICENSE create mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/doc.go rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/vpc/v20170312/client.go (65%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/vpc/v20170312/errors.go (56%) rename cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/{tencentcloud => }/vpc/v20170312/models.go (54%) delete mode 100644 cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_mock_service.go diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/README.md b/cluster-autoscaler/cloudprovider/tencentcloud/README.md index ebaa0d86b836..6ae685a6c41f 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/README.md +++ b/cluster-autoscaler/cloudprovider/tencentcloud/README.md @@ -20,15 +20,15 @@ The following policy provides the minimum privileges necessary for Cluster Autos { "effect": "allow", "action": [ - "tke:DeleteClusterInstances", - "tke:DescribeClusterAsGroups", "as:ModifyAutoScalingGroup", "as:RemoveInstances", - "as:StopAutoScalingInstances", "as:DescribeAutoScalingGroups", "as:DescribeAutoScalingInstances", "as:DescribeLaunchConfigurations", - "as:DescribeAutoScalingActivities" + "as:DescribeAutoScalingActivities", + "cvm:DescribeZones", + "cvm:DescribeInstanceTypeConfigs", + "vpc:DescribeSubnets" ], "resource": [ "*" @@ -72,8 +72,6 @@ env: key: tencentcloud_secret_key - name: REGION value: YOUR_TENCENCLOUD_REGION - - name: REGION_NAME - value: YOUR_TENCENCLOUD_REGION_NAME - name: CLUSTER_ID value: YOUR_TKE_CLUSTER_ID ``` @@ -124,10 +122,6 @@ spec: key: tencentcloud_secret_key - name: REGION value: YOUR_TENCENCLOUD_REGION - - name: REGION_NAME - value: YOUR_TENCENCLOUD_REGION_NAME - - name: CLUSTER_ID - value: YOUR_TKE_CLUSTER_ID image: ccr.ccs.tencentyun.com/tkeimages/cluster-autoscaler:v1.18.4-49692187a imagePullPolicy: Always name: cluster-autoscaler @@ -143,25 +137,9 @@ spec: name: tz-config hostAliases: - hostnames: - - cbs.api.qcloud.com - - cvm.api.qcloud.com - - lb.api.qcloud.com - - tag.api.qcloud.com - - snapshot.api.qcloud.com - - monitor.api.qcloud.com - - scaling.api.qcloud.com - - ccs.api.qcloud.com - ip: 169.254.0.28 - - hostnames: - - tke.internal.tencentcloudapi.com - - clb.internal.tencentcloudapi.com - - cvm.internal.tencentcloudapi.com - - tag.internal.tencentcloudapi.com - as.tencentcloudapi.com - - cbs.tencentcloudapi.com - cvm.tencentcloudapi.com - vpc.tencentcloudapi.com - - tke.tencentcloudapi.com ip: 169.254.0.95 restartPolicy: Always serviceAccount: kube-admin @@ -176,6 +154,40 @@ spec: name: tz-config ``` -### Auto-Discovery Setup +### Scaling up from 0 nodes + +When scaling up from 0 nodes, the Cluster Autoscaler reads ASG tags to derive information about the specifications of the nodes +i.e labels and taints in that ASG. Note that it does not actually apply these labels or taints - this is done by an AWS generated +user data script. It gives the Cluster Autoscaler information about whether pending pods will be able to be scheduled should a new node +be spun up for a particular ASG with the asumption the ASG tags accurately reflect the labels/taint actually applied. + +The following is only required if scaling up from 0 nodes. The Cluster Autoscaler will require the label tag +on the ASG should a deployment have a NodeSelector, else no scaling will occur as the Cluster Autoscaler does not realise +the ASG has that particular label. The tag is of the format +`k8s.io/cluster-autoscaler/node-template/label/`: `` or `tencentcloud:`: `` is +the name of the label and the value of each tag specifies the label value. + +Example tags: + +- `k8s.io/cluster-autoscaler/node-template/label/foo`: `bar` +- `tencentcloud:foo`:`bar` + +The following is only required if scaling up from 0 nodes. The Cluster Autoscaler will require the taint tag +on the ASG, else tainted nodes may get spun up that cannot actually have the pending pods run on it. The tag is of the format +`k8s.io/cluster-autoscaler/node-template/taint/`:`` is +the name of the taint and the value of each tag specifies the taint value and effect with the format `:`. + +Example tags: + +- `k8s.io/cluster-autoscaler/node-template/taint/dedicated`: `true:NoSchedule` + +From version 1.14, Cluster Autoscaler can also determine the resources provided +by each Auto Scaling Group via tags. The tag is of the format +`k8s.io/cluster-autoscaler/node-template/resources/`. +`` is the name of the resource, such as `ephemeral-storage`. The +value of each tag specifies the amount of resource provided. The units are +identical to the units used in the `resources` field of a Pod specification. + +Example tags: -Auto Discovery is not supported in TencentCloud currently. \ No newline at end of file +- `k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage`: `100G` \ No newline at end of file diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/client/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/client/client.go new file mode 100644 index 000000000000..9441bb66173c --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/client/client.go @@ -0,0 +1,74 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package client + +import ( + "context" + "encoding/json" + "time" + + "github.com/pkg/errors" + "k8s.io/klog/v2" + + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/metrics" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" +) + +// Client defined a tencentcloud client +type Client interface { + Send(ctx context.Context, req tchttp.Request, res tchttp.Response) error +} + +// NewClient new a Client +func NewClient(credential common.CredentialIface, region string, cpf *profile.ClientProfile) Client { + c := &client{} + c.Init(region). + WithCredential(credential). + WithProfile(cpf) + return c +} + +type client struct { + common.Client +} + +// Send a http request +func (c *client) Send(ctx context.Context, req tchttp.Request, resp tchttp.Response) error { + if req == nil || resp == nil { + return errors.New("req & resp are not allowed to be empty") + } + if c.GetCredential() == nil { + return errors.New("Send require credential") + } + + start := time.Now() + err := c.Client.Send(req, resp) + + // 上报指标 + duration := time.Since(start) + metrics.RegisterCloudAPIInvoked(req.GetService(), req.GetAction(), err) + + // 打印日志 + responseBytes, _ := json.Marshal(resp) + requestBytes, _ := json.Marshal(req) + klog.V(4).Infof("\"invoke cloud api\" Host=%s Service=%s Action=%s Duration=%s Request=%s Response=%s", + req.GetDomain(), req.GetService(), req.GetAction(), duration.String(), string(requestBytes), string(responseBytes)) + + return err +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/metrics/metrics.go b/cluster-autoscaler/cloudprovider/tencentcloud/metrics/metrics.go index 2eb0a69325a2..5df6e23f58da 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/metrics/metrics.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/metrics/metrics.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ limitations under the License. package metrics import ( - tencent_errors "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tencent_errors "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" k8smetrics "k8s.io/component-base/metrics" "k8s.io/component-base/metrics/legacyregistry" ) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/doc.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/doc.go new file mode 100644 index 000000000000..f0f00fec6d03 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package doc diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/client.go similarity index 82% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/client.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/client.go index 2fa456110d6f..f0e6adf77ef5 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/client.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,10 +18,11 @@ package v20180419 import ( "context" + "errors" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) const APIVersion = "2018-04-19" @@ -50,6 +51,7 @@ func NewAttachInstancesRequest() (request *AttachInstancesRequest) { request = &AttachInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "AttachInstances") return @@ -65,11 +67,17 @@ func NewAttachInstancesResponse() (response *AttachInstancesResponse) { // AttachInstances // 本接口(AttachInstances)用于将 CVM 实例添加到伸缩组。 // +// * 仅支持添加处于`RUNNING`(运行中)或`STOPPED`(已关机)状态的 CVM 实例 +// +// * 添加的 CVM 实例需要和伸缩组 VPC 网络一致 +// // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -79,26 +87,28 @@ func NewAttachInstancesResponse() (response *AttachInstancesResponse) { // RESOURCENOTFOUND_INSTANCESNOTFOUND = "ResourceNotFound.InstancesNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_CVMVPCINCONSISTENT = "ResourceUnavailable.CvmVpcInconsistent" +// RESOURCEUNAVAILABLE_INSTANCECANNOTATTACH = "ResourceUnavailable.InstanceCannotAttach" +// RESOURCEUNAVAILABLE_INSTANCEINOPERATION = "ResourceUnavailable.InstanceInOperation" // RESOURCEUNAVAILABLE_INSTANCESALREADYINAUTOSCALINGGROUP = "ResourceUnavailable.InstancesAlreadyInAutoScalingGroup" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) AttachInstances(request *AttachInstancesRequest) (response *AttachInstancesResponse, err error) { - if request == nil { - request = NewAttachInstancesRequest() - } - - response = NewAttachInstancesResponse() - err = c.Send(request, response) - return + return c.AttachInstancesWithContext(context.Background(), request) } // AttachInstances // 本接口(AttachInstances)用于将 CVM 实例添加到伸缩组。 // +// * 仅支持添加处于`RUNNING`(运行中)或`STOPPED`(已关机)状态的 CVM 实例 +// +// * 添加的 CVM 实例需要和伸缩组 VPC 网络一致 +// // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -108,12 +118,19 @@ func (c *Client) AttachInstances(request *AttachInstancesRequest) (response *Att // RESOURCENOTFOUND_INSTANCESNOTFOUND = "ResourceNotFound.InstancesNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_CVMVPCINCONSISTENT = "ResourceUnavailable.CvmVpcInconsistent" +// RESOURCEUNAVAILABLE_INSTANCECANNOTATTACH = "ResourceUnavailable.InstanceCannotAttach" +// RESOURCEUNAVAILABLE_INSTANCEINOPERATION = "ResourceUnavailable.InstanceInOperation" // RESOURCEUNAVAILABLE_INSTANCESALREADYINAUTOSCALINGGROUP = "ResourceUnavailable.InstancesAlreadyInAutoScalingGroup" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) AttachInstancesWithContext(ctx context.Context, request *AttachInstancesRequest) (response *AttachInstancesResponse, err error) { if request == nil { request = NewAttachInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AttachInstances require credential") + } + request.SetContext(ctx) response = NewAttachInstancesResponse() @@ -125,6 +142,7 @@ func NewAttachLoadBalancersRequest() (request *AttachLoadBalancersRequest) { request = &AttachLoadBalancersRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "AttachLoadBalancers") return @@ -143,14 +161,19 @@ func NewAttachLoadBalancersResponse() (response *AttachLoadBalancersResponse) { // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLLBERROR = "InternalError.CallLbError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" +// INVALIDPARAMETERVALUE_DUPLICATEDFORWARDLB = "InvalidParameterValue.DuplicatedForwardLb" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // LIMITEXCEEDED_AFTERATTACHLBLIMITEXCEEDED = "LimitExceeded.AfterAttachLbLimitExceeded" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" @@ -164,13 +187,7 @@ func NewAttachLoadBalancersResponse() (response *AttachLoadBalancersResponse) { // RESOURCEUNAVAILABLE_LBVPCINCONSISTENT = "ResourceUnavailable.LbVpcInconsistent" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) AttachLoadBalancers(request *AttachLoadBalancersRequest) (response *AttachLoadBalancersResponse, err error) { - if request == nil { - request = NewAttachLoadBalancersRequest() - } - - response = NewAttachLoadBalancersResponse() - err = c.Send(request, response) - return + return c.AttachLoadBalancersWithContext(context.Background(), request) } // AttachLoadBalancers @@ -179,14 +196,19 @@ func (c *Client) AttachLoadBalancers(request *AttachLoadBalancersRequest) (respo // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLLBERROR = "InternalError.CallLbError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" +// INVALIDPARAMETERVALUE_DUPLICATEDFORWARDLB = "InvalidParameterValue.DuplicatedForwardLb" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // LIMITEXCEEDED_AFTERATTACHLBLIMITEXCEEDED = "LimitExceeded.AfterAttachLbLimitExceeded" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" @@ -203,6 +225,11 @@ func (c *Client) AttachLoadBalancersWithContext(ctx context.Context, request *At if request == nil { request = NewAttachLoadBalancersRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AttachLoadBalancers require credential") + } + request.SetContext(ctx) response = NewAttachLoadBalancersResponse() @@ -214,6 +241,7 @@ func NewClearLaunchConfigurationAttributesRequest() (request *ClearLaunchConfigu request = &ClearLaunchConfigurationAttributesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ClearLaunchConfigurationAttributes") return @@ -231,15 +259,10 @@ func NewClearLaunchConfigurationAttributesResponse() (response *ClearLaunchConfi // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" func (c *Client) ClearLaunchConfigurationAttributes(request *ClearLaunchConfigurationAttributesRequest) (response *ClearLaunchConfigurationAttributesResponse, err error) { - if request == nil { - request = NewClearLaunchConfigurationAttributesRequest() - } - - response = NewClearLaunchConfigurationAttributesResponse() - err = c.Send(request, response) - return + return c.ClearLaunchConfigurationAttributesWithContext(context.Background(), request) } // ClearLaunchConfigurationAttributes @@ -247,11 +270,17 @@ func (c *Client) ClearLaunchConfigurationAttributes(request *ClearLaunchConfigur // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" func (c *Client) ClearLaunchConfigurationAttributesWithContext(ctx context.Context, request *ClearLaunchConfigurationAttributesRequest) (response *ClearLaunchConfigurationAttributesResponse, err error) { if request == nil { request = NewClearLaunchConfigurationAttributesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ClearLaunchConfigurationAttributes require credential") + } + request.SetContext(ctx) response = NewClearLaunchConfigurationAttributesResponse() @@ -263,6 +292,7 @@ func NewCompleteLifecycleActionRequest() (request *CompleteLifecycleActionReques request = &CompleteLifecycleActionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CompleteLifecycleAction") return @@ -284,21 +314,18 @@ func NewCompleteLifecycleActionResponse() (response *CompleteLifecycleActionResp // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // RESOURCENOTFOUND_LIFECYCLEHOOKINSTANCENOTFOUND = "ResourceNotFound.LifecycleHookInstanceNotFound" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" +// RESOURCENOTFOUND_LIFECYCLEHOOKTOKENNOTFOUND = "ResourceNotFound.LifecycleHookTokenNotFound" // RESOURCEUNAVAILABLE_LIFECYCLEACTIONRESULTHASSET = "ResourceUnavailable.LifecycleActionResultHasSet" func (c *Client) CompleteLifecycleAction(request *CompleteLifecycleActionRequest) (response *CompleteLifecycleActionResponse, err error) { - if request == nil { - request = NewCompleteLifecycleActionRequest() - } - - response = NewCompleteLifecycleActionResponse() - err = c.Send(request, response) - return + return c.CompleteLifecycleActionWithContext(context.Background(), request) } // CompleteLifecycleAction @@ -310,17 +337,25 @@ func (c *Client) CompleteLifecycleAction(request *CompleteLifecycleActionRequest // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // RESOURCENOTFOUND_LIFECYCLEHOOKINSTANCENOTFOUND = "ResourceNotFound.LifecycleHookInstanceNotFound" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" +// RESOURCENOTFOUND_LIFECYCLEHOOKTOKENNOTFOUND = "ResourceNotFound.LifecycleHookTokenNotFound" // RESOURCEUNAVAILABLE_LIFECYCLEACTIONRESULTHASSET = "ResourceUnavailable.LifecycleActionResultHasSet" func (c *Client) CompleteLifecycleActionWithContext(ctx context.Context, request *CompleteLifecycleActionRequest) (response *CompleteLifecycleActionResponse, err error) { if request == nil { request = NewCompleteLifecycleActionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CompleteLifecycleAction require credential") + } + request.SetContext(ctx) response = NewCompleteLifecycleActionResponse() @@ -332,6 +367,7 @@ func NewCreateAutoScalingGroupRequest() (request *CreateAutoScalingGroupRequest) request = &CreateAutoScalingGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateAutoScalingGroup") return @@ -355,6 +391,7 @@ func NewCreateAutoScalingGroupResponse() (response *CreateAutoScalingGroupRespon // INTERNALERROR_CALLTVPCERROR = "InternalError.CallTvpcError" // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" @@ -369,11 +406,13 @@ func NewCreateAutoScalingGroupResponse() (response *CreateAutoScalingGroupRespon // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNOTFOUND = "InvalidParameterValue.LaunchConfigurationNotFound" // INVALIDPARAMETERVALUE_LBPROJECTINCONSISTENT = "InvalidParameterValue.LbProjectInconsistent" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_LISTENERTARGETTYPENOTSUPPORTED = "InvalidParameterValue.ListenerTargetTypeNotSupported" // INVALIDPARAMETERVALUE_ONLYVPC = "InvalidParameterValue.OnlyVpc" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SIZE = "InvalidParameterValue.Size" // INVALIDPARAMETERVALUE_SUBNETIDS = "InvalidParameterValue.SubnetIds" +// INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONEMISMATCHREGION = "InvalidParameterValue.ZoneMismatchRegion" // LIMITEXCEEDED = "LimitExceeded" @@ -390,13 +429,7 @@ func NewCreateAutoScalingGroupResponse() (response *CreateAutoScalingGroupRespon // RESOURCEUNAVAILABLE_PROJECTINCONSISTENT = "ResourceUnavailable.ProjectInconsistent" // RESOURCEUNAVAILABLE_ZONEUNAVAILABLE = "ResourceUnavailable.ZoneUnavailable" func (c *Client) CreateAutoScalingGroup(request *CreateAutoScalingGroupRequest) (response *CreateAutoScalingGroupResponse, err error) { - if request == nil { - request = NewCreateAutoScalingGroupRequest() - } - - response = NewCreateAutoScalingGroupResponse() - err = c.Send(request, response) - return + return c.CreateAutoScalingGroupWithContext(context.Background(), request) } // CreateAutoScalingGroup @@ -410,6 +443,7 @@ func (c *Client) CreateAutoScalingGroup(request *CreateAutoScalingGroupRequest) // INTERNALERROR_CALLTVPCERROR = "InternalError.CallTvpcError" // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" @@ -424,11 +458,13 @@ func (c *Client) CreateAutoScalingGroup(request *CreateAutoScalingGroupRequest) // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNOTFOUND = "InvalidParameterValue.LaunchConfigurationNotFound" // INVALIDPARAMETERVALUE_LBPROJECTINCONSISTENT = "InvalidParameterValue.LbProjectInconsistent" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_LISTENERTARGETTYPENOTSUPPORTED = "InvalidParameterValue.ListenerTargetTypeNotSupported" // INVALIDPARAMETERVALUE_ONLYVPC = "InvalidParameterValue.OnlyVpc" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SIZE = "InvalidParameterValue.Size" // INVALIDPARAMETERVALUE_SUBNETIDS = "InvalidParameterValue.SubnetIds" +// INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONEMISMATCHREGION = "InvalidParameterValue.ZoneMismatchRegion" // LIMITEXCEEDED = "LimitExceeded" @@ -448,6 +484,11 @@ func (c *Client) CreateAutoScalingGroupWithContext(ctx context.Context, request if request == nil { request = NewCreateAutoScalingGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAutoScalingGroup require credential") + } + request.SetContext(ctx) response = NewCreateAutoScalingGroupResponse() @@ -459,6 +500,7 @@ func NewCreateAutoScalingGroupFromInstanceRequest() (request *CreateAutoScalingG request = &CreateAutoScalingGroupFromInstanceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateAutoScalingGroupFromInstance") return @@ -482,7 +524,10 @@ func NewCreateAutoScalingGroupFromInstanceResponse() (response *CreateAutoScalin // CALLCVMERROR = "CallCvmError" // INTERNALERROR = "InternalError" // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" +// INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_CVMERROR = "InvalidParameterValue.CvmError" // INVALIDPARAMETERVALUE_DUPLICATEDSUBNET = "InvalidParameterValue.DuplicatedSubnet" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" @@ -493,6 +538,7 @@ func NewCreateAutoScalingGroupFromInstanceResponse() (response *CreateAutoScalin // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED_AUTOSCALINGGROUPLIMITEXCEEDED = "LimitExceeded.AutoScalingGroupLimitExceeded" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" +// LIMITEXCEEDED_LAUNCHCONFIGURATIONQUOTANOTENOUGH = "LimitExceeded.LaunchConfigurationQuotaNotEnough" // LIMITEXCEEDED_MAXSIZELIMITEXCEEDED = "LimitExceeded.MaxSizeLimitExceeded" // LIMITEXCEEDED_MINSIZELIMITEXCEEDED = "LimitExceeded.MinSizeLimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -501,13 +547,7 @@ func NewCreateAutoScalingGroupFromInstanceResponse() (response *CreateAutoScalin // RESOURCEUNAVAILABLE_PROJECTINCONSISTENT = "ResourceUnavailable.ProjectInconsistent" // RESOURCEUNAVAILABLE_STOPPEDINSTANCENOTALLOWATTACH = "ResourceUnavailable.StoppedInstanceNotAllowAttach" func (c *Client) CreateAutoScalingGroupFromInstance(request *CreateAutoScalingGroupFromInstanceRequest) (response *CreateAutoScalingGroupFromInstanceResponse, err error) { - if request == nil { - request = NewCreateAutoScalingGroupFromInstanceRequest() - } - - response = NewCreateAutoScalingGroupFromInstanceResponse() - err = c.Send(request, response) - return + return c.CreateAutoScalingGroupFromInstanceWithContext(context.Background(), request) } // CreateAutoScalingGroupFromInstance @@ -521,7 +561,10 @@ func (c *Client) CreateAutoScalingGroupFromInstance(request *CreateAutoScalingGr // CALLCVMERROR = "CallCvmError" // INTERNALERROR = "InternalError" // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" +// INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_CVMERROR = "InvalidParameterValue.CvmError" // INVALIDPARAMETERVALUE_DUPLICATEDSUBNET = "InvalidParameterValue.DuplicatedSubnet" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" @@ -532,6 +575,7 @@ func (c *Client) CreateAutoScalingGroupFromInstance(request *CreateAutoScalingGr // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED_AUTOSCALINGGROUPLIMITEXCEEDED = "LimitExceeded.AutoScalingGroupLimitExceeded" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" +// LIMITEXCEEDED_LAUNCHCONFIGURATIONQUOTANOTENOUGH = "LimitExceeded.LaunchConfigurationQuotaNotEnough" // LIMITEXCEEDED_MAXSIZELIMITEXCEEDED = "LimitExceeded.MaxSizeLimitExceeded" // LIMITEXCEEDED_MINSIZELIMITEXCEEDED = "LimitExceeded.MinSizeLimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -543,6 +587,11 @@ func (c *Client) CreateAutoScalingGroupFromInstanceWithContext(ctx context.Conte if request == nil { request = NewCreateAutoScalingGroupFromInstanceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAutoScalingGroupFromInstance require credential") + } + request.SetContext(ctx) response = NewCreateAutoScalingGroupFromInstanceResponse() @@ -554,6 +603,7 @@ func NewCreateLaunchConfigurationRequest() (request *CreateLaunchConfigurationRe request = &CreateLaunchConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateLaunchConfiguration") return @@ -575,21 +625,31 @@ func NewCreateLaunchConfigurationResponse() (response *CreateLaunchConfiguration // // 可能返回的错误码: // +// INTERNALERROR_CALLSTSERROR = "InternalError.CallStsError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_HOSTNAMEUNAVAILABLE = "InvalidParameter.HostNameUnavailable" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_INSTANCENAMEILLEGAL = "InvalidParameterValue.InstanceNameIllegal" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" +// INVALIDPARAMETERVALUE_INVALIDDISASTERRECOVERGROUPID = "InvalidParameterValue.InvalidDisasterRecoverGroupId" +// INVALIDPARAMETERVALUE_INVALIDHPCCLUSTERID = "InvalidParameterValue.InvalidHpcClusterId" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATION = "InvalidParameterValue.InvalidLaunchConfiguration" +// INVALIDPARAMETERVALUE_INVALIDSECURITYGROUPID = "InvalidParameterValue.InvalidSecurityGroupId" // INVALIDPARAMETERVALUE_INVALIDSNAPSHOTID = "InvalidParameterValue.InvalidSnapshotId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" @@ -600,14 +660,11 @@ func NewCreateLaunchConfigurationResponse() (response *CreateLaunchConfiguration // LIMITEXCEEDED_LAUNCHCONFIGURATIONQUOTANOTENOUGH = "LimitExceeded.LaunchConfigurationQuotaNotEnough" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSTANCEMARKETOPTIONS = "MissingParameter.InstanceMarketOptions" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" +// RESOURCENOTFOUND_DISASTERRECOVERGROUPNOTFOUND = "ResourceNotFound.DisasterRecoverGroupNotFound" +// UNAUTHORIZEDOPERATION_AUTOSCALINGROLEUNAUTHORIZED = "UnauthorizedOperation.AutoScalingRoleUnauthorized" func (c *Client) CreateLaunchConfiguration(request *CreateLaunchConfigurationRequest) (response *CreateLaunchConfigurationResponse, err error) { - if request == nil { - request = NewCreateLaunchConfigurationRequest() - } - - response = NewCreateLaunchConfigurationResponse() - err = c.Send(request, response) - return + return c.CreateLaunchConfigurationWithContext(context.Background(), request) } // CreateLaunchConfiguration @@ -619,21 +676,31 @@ func (c *Client) CreateLaunchConfiguration(request *CreateLaunchConfigurationReq // // 可能返回的错误码: // +// INTERNALERROR_CALLSTSERROR = "InternalError.CallStsError" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_HOSTNAMEUNAVAILABLE = "InvalidParameter.HostNameUnavailable" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_INSTANCENAMEILLEGAL = "InvalidParameterValue.InstanceNameIllegal" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" +// INVALIDPARAMETERVALUE_INVALIDDISASTERRECOVERGROUPID = "InvalidParameterValue.InvalidDisasterRecoverGroupId" +// INVALIDPARAMETERVALUE_INVALIDHPCCLUSTERID = "InvalidParameterValue.InvalidHpcClusterId" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATION = "InvalidParameterValue.InvalidLaunchConfiguration" +// INVALIDPARAMETERVALUE_INVALIDSECURITYGROUPID = "InvalidParameterValue.InvalidSecurityGroupId" // INVALIDPARAMETERVALUE_INVALIDSNAPSHOTID = "InvalidParameterValue.InvalidSnapshotId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" @@ -644,10 +711,18 @@ func (c *Client) CreateLaunchConfiguration(request *CreateLaunchConfigurationReq // LIMITEXCEEDED_LAUNCHCONFIGURATIONQUOTANOTENOUGH = "LimitExceeded.LaunchConfigurationQuotaNotEnough" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSTANCEMARKETOPTIONS = "MissingParameter.InstanceMarketOptions" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" +// RESOURCENOTFOUND_DISASTERRECOVERGROUPNOTFOUND = "ResourceNotFound.DisasterRecoverGroupNotFound" +// UNAUTHORIZEDOPERATION_AUTOSCALINGROLEUNAUTHORIZED = "UnauthorizedOperation.AutoScalingRoleUnauthorized" func (c *Client) CreateLaunchConfigurationWithContext(ctx context.Context, request *CreateLaunchConfigurationRequest) (response *CreateLaunchConfigurationResponse, err error) { if request == nil { request = NewCreateLaunchConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateLaunchConfiguration require credential") + } + request.SetContext(ctx) response = NewCreateLaunchConfigurationResponse() @@ -659,6 +734,7 @@ func NewCreateLifecycleHookRequest() (request *CreateLifecycleHookRequest) { request = &CreateLifecycleHookRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateLifecycleHook") return @@ -674,9 +750,11 @@ func NewCreateLifecycleHookResponse() (response *CreateLifecycleHookResponse) { // CreateLifecycleHook // 本接口(CreateLifecycleHook)用于创建生命周期挂钩。 // -// * 您可以为生命周期挂钩配置消息通知,弹性伸缩会通知您的CMQ消息队列,通知内容形如: +// * 您可以为生命周期挂钩配置消息通知或执行自动化助手命令。 // -// “` +// 如果您配置了通知消息,弹性伸缩会通知您的TDMQ消息队列,通知内容形如: +// +// ``` // // { // @@ -704,13 +782,16 @@ func NewCreateLifecycleHookResponse() (response *CreateLifecycleHookResponse) { // // } // -// “` +// ``` // // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INTERNALERROR_CALLCMQERROR = "InternalError.CallCmqError" +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" // INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" @@ -721,26 +802,23 @@ func NewCreateLifecycleHookResponse() (response *CreateLifecycleHookResponse) { // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_CMQQUEUENOTFOUND = "ResourceNotFound.CmqQueueNotFound" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" // RESOURCENOTFOUND_TDMQCMQQUEUENOTFOUND = "ResourceNotFound.TDMQCMQQueueNotFound" // RESOURCENOTFOUND_TDMQCMQTOPICNOTFOUND = "ResourceNotFound.TDMQCMQTopicNotFound" // RESOURCEUNAVAILABLE_CMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.CmqTopicHasNoSubscriber" // RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" func (c *Client) CreateLifecycleHook(request *CreateLifecycleHookRequest) (response *CreateLifecycleHookResponse, err error) { - if request == nil { - request = NewCreateLifecycleHookRequest() - } - - response = NewCreateLifecycleHookResponse() - err = c.Send(request, response) - return + return c.CreateLifecycleHookWithContext(context.Background(), request) } // CreateLifecycleHook // 本接口(CreateLifecycleHook)用于创建生命周期挂钩。 // -// * 您可以为生命周期挂钩配置消息通知,弹性伸缩会通知您的CMQ消息队列,通知内容形如: +// * 您可以为生命周期挂钩配置消息通知或执行自动化助手命令。 +// +// 如果您配置了通知消息,弹性伸缩会通知您的TDMQ消息队列,通知内容形如: // -// “` +// ``` // // { // @@ -768,13 +846,16 @@ func (c *Client) CreateLifecycleHook(request *CreateLifecycleHookRequest) (respo // // } // -// “` +// ``` // // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INTERNALERROR_CALLCMQERROR = "InternalError.CallCmqError" +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" // INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" @@ -785,6 +866,7 @@ func (c *Client) CreateLifecycleHook(request *CreateLifecycleHookRequest) (respo // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_CMQQUEUENOTFOUND = "ResourceNotFound.CmqQueueNotFound" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" // RESOURCENOTFOUND_TDMQCMQQUEUENOTFOUND = "ResourceNotFound.TDMQCMQQueueNotFound" // RESOURCENOTFOUND_TDMQCMQTOPICNOTFOUND = "ResourceNotFound.TDMQCMQTopicNotFound" // RESOURCEUNAVAILABLE_CMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.CmqTopicHasNoSubscriber" @@ -793,6 +875,11 @@ func (c *Client) CreateLifecycleHookWithContext(ctx context.Context, request *Cr if request == nil { request = NewCreateLifecycleHookRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateLifecycleHook require credential") + } + request.SetContext(ctx) response = NewCreateLifecycleHookResponse() @@ -804,6 +891,7 @@ func NewCreateNotificationConfigurationRequest() (request *CreateNotificationCon request = &CreateNotificationConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateNotificationConfiguration") return @@ -821,7 +909,7 @@ func NewCreateNotificationConfigurationResponse() (response *CreateNotificationC // // 通知到 CMQ 主题或队列时,消息内容如下: // -// “` +// ``` // // { // @@ -871,13 +959,15 @@ func NewCreateNotificationConfigurationResponse() (response *CreateNotificationC // // } // -// “` +// ``` // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CONFLICTNOTIFICATIONTARGET = "InvalidParameterValue.ConflictNotificationTarget" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // LIMITEXCEEDED = "LimitExceeded" // LIMITEXCEEDED_QUOTANOTENOUGH = "LimitExceeded.QuotaNotEnough" @@ -889,13 +979,7 @@ func NewCreateNotificationConfigurationResponse() (response *CreateNotificationC // RESOURCEUNAVAILABLE_CMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.CmqTopicHasNoSubscriber" // RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" func (c *Client) CreateNotificationConfiguration(request *CreateNotificationConfigurationRequest) (response *CreateNotificationConfigurationResponse, err error) { - if request == nil { - request = NewCreateNotificationConfigurationRequest() - } - - response = NewCreateNotificationConfigurationResponse() - err = c.Send(request, response) - return + return c.CreateNotificationConfigurationWithContext(context.Background(), request) } // CreateNotificationConfiguration @@ -903,7 +987,7 @@ func (c *Client) CreateNotificationConfiguration(request *CreateNotificationConf // // 通知到 CMQ 主题或队列时,消息内容如下: // -// “` +// ``` // // { // @@ -953,13 +1037,15 @@ func (c *Client) CreateNotificationConfiguration(request *CreateNotificationConf // // } // -// “` +// ``` // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CONFLICTNOTIFICATIONTARGET = "InvalidParameterValue.ConflictNotificationTarget" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // LIMITEXCEEDED = "LimitExceeded" // LIMITEXCEEDED_QUOTANOTENOUGH = "LimitExceeded.QuotaNotEnough" @@ -974,6 +1060,11 @@ func (c *Client) CreateNotificationConfigurationWithContext(ctx context.Context, if request == nil { request = NewCreateNotificationConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNotificationConfiguration require credential") + } + request.SetContext(ctx) response = NewCreateNotificationConfigurationResponse() @@ -985,6 +1076,7 @@ func NewCreateScalingPolicyRequest() (request *CreateScalingPolicyRequest) { request = &CreateScalingPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateScalingPolicy") return @@ -1002,7 +1094,10 @@ func NewCreateScalingPolicyResponse() (response *CreateScalingPolicyResponse) { // // 可能返回的错误码: // +// INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_CALLNOTIFICATIONERROR = "InternalError.CallNotificationError" +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -1012,15 +1107,10 @@ func NewCreateScalingPolicyResponse() (response *CreateScalingPolicyResponse) { // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // LIMITEXCEEDED_QUOTANOTENOUGH = "LimitExceeded.QuotaNotEnough" +// LIMITEXCEEDED_TARGETTRACKINGSCALINGPOLICY = "LimitExceeded.TargetTrackingScalingPolicy" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) CreateScalingPolicy(request *CreateScalingPolicyRequest) (response *CreateScalingPolicyResponse, err error) { - if request == nil { - request = NewCreateScalingPolicyRequest() - } - - response = NewCreateScalingPolicyResponse() - err = c.Send(request, response) - return + return c.CreateScalingPolicyWithContext(context.Background(), request) } // CreateScalingPolicy @@ -1028,7 +1118,10 @@ func (c *Client) CreateScalingPolicy(request *CreateScalingPolicyRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_CALLNOTIFICATIONERROR = "InternalError.CallNotificationError" +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -1038,11 +1131,17 @@ func (c *Client) CreateScalingPolicy(request *CreateScalingPolicyRequest) (respo // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // LIMITEXCEEDED_QUOTANOTENOUGH = "LimitExceeded.QuotaNotEnough" +// LIMITEXCEEDED_TARGETTRACKINGSCALINGPOLICY = "LimitExceeded.TargetTrackingScalingPolicy" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) CreateScalingPolicyWithContext(ctx context.Context, request *CreateScalingPolicyRequest) (response *CreateScalingPolicyResponse, err error) { if request == nil { request = NewCreateScalingPolicyRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateScalingPolicy require credential") + } + request.SetContext(ctx) response = NewCreateScalingPolicyResponse() @@ -1054,6 +1153,7 @@ func NewCreateScheduledActionRequest() (request *CreateScheduledActionRequest) { request = &CreateScheduledActionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "CreateScheduledAction") return @@ -1072,6 +1172,7 @@ func NewCreateScheduledActionResponse() (response *CreateScheduledActionResponse // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CRONEXPRESSIONILLEGAL = "InvalidParameterValue.CronExpressionIllegal" // INVALIDPARAMETERVALUE_ENDTIMEBEFORESTARTTIME = "InvalidParameterValue.EndTimeBeforeStartTime" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" @@ -1089,13 +1190,7 @@ func NewCreateScheduledActionResponse() (response *CreateScheduledActionResponse // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) CreateScheduledAction(request *CreateScheduledActionRequest) (response *CreateScheduledActionResponse, err error) { - if request == nil { - request = NewCreateScheduledActionRequest() - } - - response = NewCreateScheduledActionResponse() - err = c.Send(request, response) - return + return c.CreateScheduledActionWithContext(context.Background(), request) } // CreateScheduledAction @@ -1104,6 +1199,7 @@ func (c *Client) CreateScheduledAction(request *CreateScheduledActionRequest) (r // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CRONEXPRESSIONILLEGAL = "InvalidParameterValue.CronExpressionIllegal" // INVALIDPARAMETERVALUE_ENDTIMEBEFORESTARTTIME = "InvalidParameterValue.EndTimeBeforeStartTime" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" @@ -1124,6 +1220,11 @@ func (c *Client) CreateScheduledActionWithContext(ctx context.Context, request * if request == nil { request = NewCreateScheduledActionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateScheduledAction require credential") + } + request.SetContext(ctx) response = NewCreateScheduledActionResponse() @@ -1135,6 +1236,7 @@ func NewDeleteAutoScalingGroupRequest() (request *DeleteAutoScalingGroupRequest) request = &DeleteAutoScalingGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteAutoScalingGroup") return @@ -1148,7 +1250,7 @@ func NewDeleteAutoScalingGroupResponse() (response *DeleteAutoScalingGroupRespon } // DeleteAutoScalingGroup -// 本接口(DeleteAutoScalingGroup)用于删除指定伸缩组,删除前提是伸缩组内无实例且当前未在执行伸缩活动。 +// 本接口(DeleteAutoScalingGroup)用于删除指定伸缩组,删除前提是伸缩组内无运行中(IN_SERVICE)状态的实例且当前未在执行伸缩活动。删除伸缩组后,创建失败(CREATION_FAILED)、中止失败(TERMINATION_FAILED)、解绑失败(DETACH_FAILED)等非运行中状态的实例不会被销毁。 // // 可能返回的错误码: // @@ -1156,23 +1258,19 @@ func NewDeleteAutoScalingGroupResponse() (response *DeleteAutoScalingGroupRespon // INTERNALERROR_CALLERROR = "InternalError.CallError" // INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_CALLTAGERROR = "InternalError.CallTagError" +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCEINUSE_ACTIVITYINPROGRESS = "ResourceInUse.ActivityInProgress" // RESOURCEINUSE_INSTANCEINGROUP = "ResourceInUse.InstanceInGroup" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) DeleteAutoScalingGroup(request *DeleteAutoScalingGroupRequest) (response *DeleteAutoScalingGroupResponse, err error) { - if request == nil { - request = NewDeleteAutoScalingGroupRequest() - } - - response = NewDeleteAutoScalingGroupResponse() - err = c.Send(request, response) - return + return c.DeleteAutoScalingGroupWithContext(context.Background(), request) } // DeleteAutoScalingGroup -// 本接口(DeleteAutoScalingGroup)用于删除指定伸缩组,删除前提是伸缩组内无实例且当前未在执行伸缩活动。 +// 本接口(DeleteAutoScalingGroup)用于删除指定伸缩组,删除前提是伸缩组内无运行中(IN_SERVICE)状态的实例且当前未在执行伸缩活动。删除伸缩组后,创建失败(CREATION_FAILED)、中止失败(TERMINATION_FAILED)、解绑失败(DETACH_FAILED)等非运行中状态的实例不会被销毁。 // // 可能返回的错误码: // @@ -1180,6 +1278,8 @@ func (c *Client) DeleteAutoScalingGroup(request *DeleteAutoScalingGroupRequest) // INTERNALERROR_CALLERROR = "InternalError.CallError" // INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_CALLTAGERROR = "InternalError.CallTagError" +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCEINUSE_ACTIVITYINPROGRESS = "ResourceInUse.ActivityInProgress" @@ -1189,6 +1289,11 @@ func (c *Client) DeleteAutoScalingGroupWithContext(ctx context.Context, request if request == nil { request = NewDeleteAutoScalingGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteAutoScalingGroup require credential") + } + request.SetContext(ctx) response = NewDeleteAutoScalingGroupResponse() @@ -1200,6 +1305,7 @@ func NewDeleteLaunchConfigurationRequest() (request *DeleteLaunchConfigurationRe request = &DeleteLaunchConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteLaunchConfiguration") return @@ -1219,17 +1325,12 @@ func NewDeleteLaunchConfigurationResponse() (response *DeleteLaunchConfiguration // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" // RESOURCEINUSE_LAUNCHCONFIGURATIONIDINUSE = "ResourceInUse.LaunchConfigurationIdInUse" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" func (c *Client) DeleteLaunchConfiguration(request *DeleteLaunchConfigurationRequest) (response *DeleteLaunchConfigurationResponse, err error) { - if request == nil { - request = NewDeleteLaunchConfigurationRequest() - } - - response = NewDeleteLaunchConfigurationResponse() - err = c.Send(request, response) - return + return c.DeleteLaunchConfigurationWithContext(context.Background(), request) } // DeleteLaunchConfiguration @@ -1239,6 +1340,7 @@ func (c *Client) DeleteLaunchConfiguration(request *DeleteLaunchConfigurationReq // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" // RESOURCEINUSE_LAUNCHCONFIGURATIONIDINUSE = "ResourceInUse.LaunchConfigurationIdInUse" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" @@ -1246,6 +1348,11 @@ func (c *Client) DeleteLaunchConfigurationWithContext(ctx context.Context, reque if request == nil { request = NewDeleteLaunchConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteLaunchConfiguration require credential") + } + request.SetContext(ctx) response = NewDeleteLaunchConfigurationResponse() @@ -1257,6 +1364,7 @@ func NewDeleteLifecycleHookRequest() (request *DeleteLifecycleHookRequest) { request = &DeleteLifecycleHookRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteLifecycleHook") return @@ -1276,17 +1384,12 @@ func NewDeleteLifecycleHookResponse() (response *DeleteLifecycleHookResponse) { // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" func (c *Client) DeleteLifecycleHook(request *DeleteLifecycleHookRequest) (response *DeleteLifecycleHookResponse, err error) { - if request == nil { - request = NewDeleteLifecycleHookRequest() - } - - response = NewDeleteLifecycleHookResponse() - err = c.Send(request, response) - return + return c.DeleteLifecycleHookWithContext(context.Background(), request) } // DeleteLifecycleHook @@ -1296,6 +1399,7 @@ func (c *Client) DeleteLifecycleHook(request *DeleteLifecycleHookRequest) (respo // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" @@ -1303,6 +1407,11 @@ func (c *Client) DeleteLifecycleHookWithContext(ctx context.Context, request *De if request == nil { request = NewDeleteLifecycleHookRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteLifecycleHook require credential") + } + request.SetContext(ctx) response = NewDeleteLifecycleHookResponse() @@ -1314,6 +1423,7 @@ func NewDeleteNotificationConfigurationRequest() (request *DeleteNotificationCon request = &DeleteNotificationConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteNotificationConfiguration") return @@ -1331,16 +1441,11 @@ func NewDeleteNotificationConfigurationResponse() (response *DeleteNotificationC // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" // RESOURCENOTFOUND_AUTOSCALINGNOTIFICATIONNOTFOUND = "ResourceNotFound.AutoScalingNotificationNotFound" func (c *Client) DeleteNotificationConfiguration(request *DeleteNotificationConfigurationRequest) (response *DeleteNotificationConfigurationResponse, err error) { - if request == nil { - request = NewDeleteNotificationConfigurationRequest() - } - - response = NewDeleteNotificationConfigurationResponse() - err = c.Send(request, response) - return + return c.DeleteNotificationConfigurationWithContext(context.Background(), request) } // DeleteNotificationConfiguration @@ -1348,12 +1453,18 @@ func (c *Client) DeleteNotificationConfiguration(request *DeleteNotificationConf // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" // RESOURCENOTFOUND_AUTOSCALINGNOTIFICATIONNOTFOUND = "ResourceNotFound.AutoScalingNotificationNotFound" func (c *Client) DeleteNotificationConfigurationWithContext(ctx context.Context, request *DeleteNotificationConfigurationRequest) (response *DeleteNotificationConfigurationResponse, err error) { if request == nil { request = NewDeleteNotificationConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNotificationConfiguration require credential") + } + request.SetContext(ctx) response = NewDeleteNotificationConfigurationResponse() @@ -1365,6 +1476,7 @@ func NewDeleteScalingPolicyRequest() (request *DeleteScalingPolicyRequest) { request = &DeleteScalingPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteScalingPolicy") return @@ -1382,16 +1494,12 @@ func NewDeleteScalingPolicyResponse() (response *DeleteScalingPolicyResponse) { // // 可能返回的错误码: // +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" func (c *Client) DeleteScalingPolicy(request *DeleteScalingPolicyRequest) (response *DeleteScalingPolicyResponse, err error) { - if request == nil { - request = NewDeleteScalingPolicyRequest() - } - - response = NewDeleteScalingPolicyResponse() - err = c.Send(request, response) - return + return c.DeleteScalingPolicyWithContext(context.Background(), request) } // DeleteScalingPolicy @@ -1399,12 +1507,19 @@ func (c *Client) DeleteScalingPolicy(request *DeleteScalingPolicyRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" func (c *Client) DeleteScalingPolicyWithContext(ctx context.Context, request *DeleteScalingPolicyRequest) (response *DeleteScalingPolicyResponse, err error) { if request == nil { request = NewDeleteScalingPolicyRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteScalingPolicy require credential") + } + request.SetContext(ctx) response = NewDeleteScalingPolicyResponse() @@ -1416,6 +1531,7 @@ func NewDeleteScheduledActionRequest() (request *DeleteScheduledActionRequest) { request = &DeleteScheduledActionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DeleteScheduledAction") return @@ -1433,16 +1549,11 @@ func NewDeleteScheduledActionResponse() (response *DeleteScheduledActionResponse // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" // RESOURCENOTFOUND_SCHEDULEDACTIONNOTFOUND = "ResourceNotFound.ScheduledActionNotFound" func (c *Client) DeleteScheduledAction(request *DeleteScheduledActionRequest) (response *DeleteScheduledActionResponse, err error) { - if request == nil { - request = NewDeleteScheduledActionRequest() - } - - response = NewDeleteScheduledActionResponse() - err = c.Send(request, response) - return + return c.DeleteScheduledActionWithContext(context.Background(), request) } // DeleteScheduledAction @@ -1450,12 +1561,18 @@ func (c *Client) DeleteScheduledAction(request *DeleteScheduledActionRequest) (r // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" // RESOURCENOTFOUND_SCHEDULEDACTIONNOTFOUND = "ResourceNotFound.ScheduledActionNotFound" func (c *Client) DeleteScheduledActionWithContext(ctx context.Context, request *DeleteScheduledActionRequest) (response *DeleteScheduledActionResponse, err error) { if request == nil { request = NewDeleteScheduledActionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteScheduledAction require credential") + } + request.SetContext(ctx) response = NewDeleteScheduledActionResponse() @@ -1467,6 +1584,7 @@ func NewDescribeAccountLimitsRequest() (request *DescribeAccountLimitsRequest) { request = &DescribeAccountLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAccountLimits") return @@ -1485,14 +1603,9 @@ func NewDescribeAccountLimitsResponse() (response *DescribeAccountLimitsResponse // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" func (c *Client) DescribeAccountLimits(request *DescribeAccountLimitsRequest) (response *DescribeAccountLimitsResponse, err error) { - if request == nil { - request = NewDescribeAccountLimitsRequest() - } - - response = NewDescribeAccountLimitsResponse() - err = c.Send(request, response) - return + return c.DescribeAccountLimitsWithContext(context.Background(), request) } // DescribeAccountLimits @@ -1501,10 +1614,16 @@ func (c *Client) DescribeAccountLimits(request *DescribeAccountLimitsRequest) (r // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" func (c *Client) DescribeAccountLimitsWithContext(ctx context.Context, request *DescribeAccountLimitsRequest) (response *DescribeAccountLimitsResponse, err error) { if request == nil { request = NewDescribeAccountLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAccountLimits require credential") + } + request.SetContext(ctx) response = NewDescribeAccountLimitsResponse() @@ -1516,6 +1635,7 @@ func NewDescribeAutoScalingActivitiesRequest() (request *DescribeAutoScalingActi request = &DescribeAutoScalingActivitiesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAutoScalingActivities") return @@ -1534,6 +1654,7 @@ func NewDescribeAutoScalingActivitiesResponse() (response *DescribeAutoScalingAc // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDACTIVITYID = "InvalidParameterValue.InvalidActivityId" @@ -1542,13 +1663,7 @@ func NewDescribeAutoScalingActivitiesResponse() (response *DescribeAutoScalingAc // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" func (c *Client) DescribeAutoScalingActivities(request *DescribeAutoScalingActivitiesRequest) (response *DescribeAutoScalingActivitiesResponse, err error) { - if request == nil { - request = NewDescribeAutoScalingActivitiesRequest() - } - - response = NewDescribeAutoScalingActivitiesResponse() - err = c.Send(request, response) - return + return c.DescribeAutoScalingActivitiesWithContext(context.Background(), request) } // DescribeAutoScalingActivities @@ -1557,6 +1672,7 @@ func (c *Client) DescribeAutoScalingActivities(request *DescribeAutoScalingActiv // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDACTIVITYID = "InvalidParameterValue.InvalidActivityId" @@ -1568,6 +1684,11 @@ func (c *Client) DescribeAutoScalingActivitiesWithContext(ctx context.Context, r if request == nil { request = NewDescribeAutoScalingActivitiesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAutoScalingActivities require credential") + } + request.SetContext(ctx) response = NewDescribeAutoScalingActivitiesResponse() @@ -1579,6 +1700,7 @@ func NewDescribeAutoScalingAdvicesRequest() (request *DescribeAutoScalingAdvices request = &DescribeAutoScalingAdvicesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAutoScalingAdvices") return @@ -1597,15 +1719,10 @@ func NewDescribeAutoScalingAdvicesResponse() (response *DescribeAutoScalingAdvic // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeAutoScalingAdvices(request *DescribeAutoScalingAdvicesRequest) (response *DescribeAutoScalingAdvicesResponse, err error) { - if request == nil { - request = NewDescribeAutoScalingAdvicesRequest() - } - - response = NewDescribeAutoScalingAdvicesResponse() - err = c.Send(request, response) - return + return c.DescribeAutoScalingAdvicesWithContext(context.Background(), request) } // DescribeAutoScalingAdvices @@ -1614,11 +1731,17 @@ func (c *Client) DescribeAutoScalingAdvices(request *DescribeAutoScalingAdvicesR // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeAutoScalingAdvicesWithContext(ctx context.Context, request *DescribeAutoScalingAdvicesRequest) (response *DescribeAutoScalingAdvicesResponse, err error) { if request == nil { request = NewDescribeAutoScalingAdvicesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAutoScalingAdvices require credential") + } + request.SetContext(ctx) response = NewDescribeAutoScalingAdvicesResponse() @@ -1630,6 +1753,7 @@ func NewDescribeAutoScalingGroupLastActivitiesRequest() (request *DescribeAutoSc request = &DescribeAutoScalingGroupLastActivitiesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAutoScalingGroupLastActivities") return @@ -1648,16 +1772,11 @@ func NewDescribeAutoScalingGroupLastActivitiesResponse() (response *DescribeAuto // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_NORESOURCEPERMISSION = "InvalidParameterValue.NoResourcePermission" func (c *Client) DescribeAutoScalingGroupLastActivities(request *DescribeAutoScalingGroupLastActivitiesRequest) (response *DescribeAutoScalingGroupLastActivitiesResponse, err error) { - if request == nil { - request = NewDescribeAutoScalingGroupLastActivitiesRequest() - } - - response = NewDescribeAutoScalingGroupLastActivitiesResponse() - err = c.Send(request, response) - return + return c.DescribeAutoScalingGroupLastActivitiesWithContext(context.Background(), request) } // DescribeAutoScalingGroupLastActivities @@ -1666,12 +1785,18 @@ func (c *Client) DescribeAutoScalingGroupLastActivities(request *DescribeAutoSca // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_NORESOURCEPERMISSION = "InvalidParameterValue.NoResourcePermission" func (c *Client) DescribeAutoScalingGroupLastActivitiesWithContext(ctx context.Context, request *DescribeAutoScalingGroupLastActivitiesRequest) (response *DescribeAutoScalingGroupLastActivitiesResponse, err error) { if request == nil { request = NewDescribeAutoScalingGroupLastActivitiesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAutoScalingGroupLastActivities require credential") + } + request.SetContext(ctx) response = NewDescribeAutoScalingGroupLastActivitiesResponse() @@ -1683,6 +1808,7 @@ func NewDescribeAutoScalingGroupsRequest() (request *DescribeAutoScalingGroupsRe request = &DescribeAutoScalingGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAutoScalingGroups") return @@ -1704,6 +1830,7 @@ func NewDescribeAutoScalingGroupsResponse() (response *DescribeAutoScalingGroups // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" @@ -1713,14 +1840,10 @@ func NewDescribeAutoScalingGroupsResponse() (response *DescribeAutoScalingGroups // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAutoScalingGroups(request *DescribeAutoScalingGroupsRequest) (response *DescribeAutoScalingGroupsResponse, err error) { - if request == nil { - request = NewDescribeAutoScalingGroupsRequest() - } - - response = NewDescribeAutoScalingGroupsResponse() - err = c.Send(request, response) - return + return c.DescribeAutoScalingGroupsWithContext(context.Background(), request) } // DescribeAutoScalingGroups @@ -1732,6 +1855,7 @@ func (c *Client) DescribeAutoScalingGroups(request *DescribeAutoScalingGroupsReq // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" @@ -1741,10 +1865,17 @@ func (c *Client) DescribeAutoScalingGroups(request *DescribeAutoScalingGroupsReq // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAutoScalingGroupsWithContext(ctx context.Context, request *DescribeAutoScalingGroupsRequest) (response *DescribeAutoScalingGroupsResponse, err error) { if request == nil { request = NewDescribeAutoScalingGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAutoScalingGroups require credential") + } + request.SetContext(ctx) response = NewDescribeAutoScalingGroupsResponse() @@ -1756,6 +1887,7 @@ func NewDescribeAutoScalingInstancesRequest() (request *DescribeAutoScalingInsta request = &DescribeAutoScalingInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeAutoScalingInstances") return @@ -1778,20 +1910,16 @@ func NewDescribeAutoScalingInstancesResponse() (response *DescribeAutoScalingIns // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" func (c *Client) DescribeAutoScalingInstances(request *DescribeAutoScalingInstancesRequest) (response *DescribeAutoScalingInstancesResponse, err error) { - if request == nil { - request = NewDescribeAutoScalingInstancesRequest() - } - - response = NewDescribeAutoScalingInstancesResponse() - err = c.Send(request, response) - return + return c.DescribeAutoScalingInstancesWithContext(context.Background(), request) } // DescribeAutoScalingInstances @@ -1804,16 +1932,23 @@ func (c *Client) DescribeAutoScalingInstances(request *DescribeAutoScalingInstan // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" func (c *Client) DescribeAutoScalingInstancesWithContext(ctx context.Context, request *DescribeAutoScalingInstancesRequest) (response *DescribeAutoScalingInstancesResponse, err error) { if request == nil { request = NewDescribeAutoScalingInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAutoScalingInstances require credential") + } + request.SetContext(ctx) response = NewDescribeAutoScalingInstancesResponse() @@ -1825,6 +1960,7 @@ func NewDescribeLaunchConfigurationsRequest() (request *DescribeLaunchConfigurat request = &DescribeLaunchConfigurationsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeLaunchConfigurations") return @@ -1848,18 +1984,16 @@ func NewDescribeLaunchConfigurationsResponse() (response *DescribeLaunchConfigur // // INVALIDLAUNCHCONFIGURATION = "InvalidLaunchConfiguration" // INVALIDLAUNCHCONFIGURATIONID = "InvalidLaunchConfigurationId" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeLaunchConfigurations(request *DescribeLaunchConfigurationsRequest) (response *DescribeLaunchConfigurationsResponse, err error) { - if request == nil { - request = NewDescribeLaunchConfigurationsRequest() - } - - response = NewDescribeLaunchConfigurationsResponse() - err = c.Send(request, response) - return + return c.DescribeLaunchConfigurationsWithContext(context.Background(), request) } // DescribeLaunchConfigurations @@ -1873,14 +2007,23 @@ func (c *Client) DescribeLaunchConfigurations(request *DescribeLaunchConfigurati // // INVALIDLAUNCHCONFIGURATION = "InvalidLaunchConfiguration" // INVALIDLAUNCHCONFIGURATIONID = "InvalidLaunchConfigurationId" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_FILTERVALUESTOOLONG = "LimitExceeded.FilterValuesTooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeLaunchConfigurationsWithContext(ctx context.Context, request *DescribeLaunchConfigurationsRequest) (response *DescribeLaunchConfigurationsResponse, err error) { if request == nil { request = NewDescribeLaunchConfigurationsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeLaunchConfigurations require credential") + } + request.SetContext(ctx) response = NewDescribeLaunchConfigurationsResponse() @@ -1892,6 +2035,7 @@ func NewDescribeLifecycleHooksRequest() (request *DescribeLifecycleHooksRequest) request = &DescribeLifecycleHooksRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeLifecycleHooks") return @@ -1915,19 +2059,14 @@ func NewDescribeLifecycleHooksResponse() (response *DescribeLifecycleHooksRespon // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeLifecycleHooks(request *DescribeLifecycleHooksRequest) (response *DescribeLifecycleHooksResponse, err error) { - if request == nil { - request = NewDescribeLifecycleHooksRequest() - } - - response = NewDescribeLifecycleHooksResponse() - err = c.Send(request, response) - return + return c.DescribeLifecycleHooksWithContext(context.Background(), request) } // DescribeLifecycleHooks @@ -1941,6 +2080,7 @@ func (c *Client) DescribeLifecycleHooks(request *DescribeLifecycleHooksRequest) // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" @@ -1950,6 +2090,11 @@ func (c *Client) DescribeLifecycleHooksWithContext(ctx context.Context, request if request == nil { request = NewDescribeLifecycleHooksRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeLifecycleHooks require credential") + } + request.SetContext(ctx) response = NewDescribeLifecycleHooksResponse() @@ -1961,6 +2106,7 @@ func NewDescribeNotificationConfigurationsRequest() (request *DescribeNotificati request = &DescribeNotificationConfigurationsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeNotificationConfigurations") return @@ -1982,18 +2128,13 @@ func NewDescribeNotificationConfigurationsResponse() (response *DescribeNotifica // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" func (c *Client) DescribeNotificationConfigurations(request *DescribeNotificationConfigurationsRequest) (response *DescribeNotificationConfigurationsResponse, err error) { - if request == nil { - request = NewDescribeNotificationConfigurationsRequest() - } - - response = NewDescribeNotificationConfigurationsResponse() - err = c.Send(request, response) - return + return c.DescribeNotificationConfigurationsWithContext(context.Background(), request) } // DescribeNotificationConfigurations @@ -2005,6 +2146,7 @@ func (c *Client) DescribeNotificationConfigurations(request *DescribeNotificatio // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" @@ -2013,70 +2155,14 @@ func (c *Client) DescribeNotificationConfigurationsWithContext(ctx context.Conte if request == nil { request = NewDescribeNotificationConfigurationsRequest() } - request.SetContext(ctx) - - response = NewDescribeNotificationConfigurationsResponse() - err = c.Send(request, response) - return -} - -func NewDescribePaiInstancesRequest() (request *DescribePaiInstancesRequest) { - request = &DescribePaiInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("as", APIVersion, "DescribePaiInstances") - - return -} - -func NewDescribePaiInstancesResponse() (response *DescribePaiInstancesResponse) { - response = &DescribePaiInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} -// DescribePaiInstances -// 本接口(DescribePaiInstances)用于查询PAI实例信息。 -// -// * 可以根据实例ID、实例域名等信息来查询PAI实例的详细信息。过滤信息详细请见过滤器`Filter`。 -// -// * 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的PAI实例。 -// -// 可能返回的错误码: -// -// INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" -// INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -func (c *Client) DescribePaiInstances(request *DescribePaiInstancesRequest) (response *DescribePaiInstancesResponse, err error) { - if request == nil { - request = NewDescribePaiInstancesRequest() + if c.GetCredential() == nil { + return nil, errors.New("DescribeNotificationConfigurations require credential") } - response = NewDescribePaiInstancesResponse() - err = c.Send(request, response) - return -} - -// DescribePaiInstances -// 本接口(DescribePaiInstances)用于查询PAI实例信息。 -// -// * 可以根据实例ID、实例域名等信息来查询PAI实例的详细信息。过滤信息详细请见过滤器`Filter`。 -// -// * 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的PAI实例。 -// -// 可能返回的错误码: -// -// INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" -// INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -func (c *Client) DescribePaiInstancesWithContext(ctx context.Context, request *DescribePaiInstancesRequest) (response *DescribePaiInstancesResponse, err error) { - if request == nil { - request = NewDescribePaiInstancesRequest() - } request.SetContext(ctx) - response = NewDescribePaiInstancesResponse() + response = NewDescribeNotificationConfigurationsResponse() err = c.Send(request, response) return } @@ -2085,6 +2171,7 @@ func NewDescribeScalingPoliciesRequest() (request *DescribeScalingPoliciesReques request = &DescribeScalingPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeScalingPolicies") return @@ -2104,19 +2191,14 @@ func NewDescribeScalingPoliciesResponse() (response *DescribeScalingPoliciesResp // // INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" // INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) DescribeScalingPolicies(request *DescribeScalingPoliciesRequest) (response *DescribeScalingPoliciesResponse, err error) { - if request == nil { - request = NewDescribeScalingPoliciesRequest() - } - - response = NewDescribeScalingPoliciesResponse() - err = c.Send(request, response) - return + return c.DescribeScalingPoliciesWithContext(context.Background(), request) } // DescribeScalingPolicies @@ -2126,6 +2208,7 @@ func (c *Client) DescribeScalingPolicies(request *DescribeScalingPoliciesRequest // // INTERNALERROR_CALLMONITORERROR = "InternalError.CallMonitorError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" @@ -2135,6 +2218,11 @@ func (c *Client) DescribeScalingPoliciesWithContext(ctx context.Context, request if request == nil { request = NewDescribeScalingPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeScalingPolicies require credential") + } + request.SetContext(ctx) response = NewDescribeScalingPoliciesResponse() @@ -2146,6 +2234,7 @@ func NewDescribeScheduledActionsRequest() (request *DescribeScheduledActionsRequ request = &DescribeScheduledActionsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DescribeScheduledActions") return @@ -2168,6 +2257,7 @@ func NewDescribeScheduledActionsResponse() (response *DescribeScheduledActionsRe // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" @@ -2175,13 +2265,7 @@ func NewDescribeScheduledActionsResponse() (response *DescribeScheduledActionsRe // INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" // RESOURCENOTFOUND_SCHEDULEDACTIONNOTFOUND = "ResourceNotFound.ScheduledActionNotFound" func (c *Client) DescribeScheduledActions(request *DescribeScheduledActionsRequest) (response *DescribeScheduledActionsResponse, err error) { - if request == nil { - request = NewDescribeScheduledActionsRequest() - } - - response = NewDescribeScheduledActionsResponse() - err = c.Send(request, response) - return + return c.DescribeScheduledActionsWithContext(context.Background(), request) } // DescribeScheduledActions @@ -2194,6 +2278,7 @@ func (c *Client) DescribeScheduledActions(request *DescribeScheduledActionsReque // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" @@ -2204,6 +2289,11 @@ func (c *Client) DescribeScheduledActionsWithContext(ctx context.Context, reques if request == nil { request = NewDescribeScheduledActionsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeScheduledActions require credential") + } + request.SetContext(ctx) response = NewDescribeScheduledActionsResponse() @@ -2215,6 +2305,7 @@ func NewDetachInstancesRequest() (request *DetachInstancesRequest) { request = &DetachInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DetachInstances") return @@ -2240,6 +2331,7 @@ func NewDetachInstancesResponse() (response *DetachInstancesResponse) { // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -2251,13 +2343,7 @@ func NewDetachInstancesResponse() (response *DetachInstancesResponse) { // RESOURCEUNAVAILABLE_INSTANCEINOPERATION = "ResourceUnavailable.InstanceInOperation" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) DetachInstances(request *DetachInstancesRequest) (response *DetachInstancesResponse, err error) { - if request == nil { - request = NewDetachInstancesRequest() - } - - response = NewDetachInstancesResponse() - err = c.Send(request, response) - return + return c.DetachInstancesWithContext(context.Background(), request) } // DetachInstances @@ -2273,6 +2359,7 @@ func (c *Client) DetachInstances(request *DetachInstancesRequest) (response *Det // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -2287,6 +2374,11 @@ func (c *Client) DetachInstancesWithContext(ctx context.Context, request *Detach if request == nil { request = NewDetachInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DetachInstances require credential") + } + request.SetContext(ctx) response = NewDetachInstancesResponse() @@ -2298,6 +2390,7 @@ func NewDetachLoadBalancersRequest() (request *DetachLoadBalancersRequest) { request = &DetachLoadBalancersRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DetachLoadBalancers") return @@ -2317,6 +2410,7 @@ func NewDetachLoadBalancersResponse() (response *DetachLoadBalancersResponse) { // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_LOADBALANCERNOTINAUTOSCALINGGROUP = "InvalidParameter.LoadBalancerNotInAutoScalingGroup" @@ -2330,6 +2424,7 @@ func NewDetachLoadBalancersResponse() (response *DetachLoadBalancersResponse) { // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" // RESOURCENOTFOUND_LOADBALANCERNOTFOUND = "ResourceNotFound.LoadBalancerNotFound" +// RESOURCENOTFOUND_LOADBALANCERNOTINAUTOSCALINGGROUP = "ResourceNotFound.LoadBalancerNotInAutoScalingGroup" // RESOURCENOTFOUND_LOCATIONNOTFOUND = "ResourceNotFound.LocationNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_LBBACKENDREGIONINCONSISTENT = "ResourceUnavailable.LbBackendRegionInconsistent" @@ -2337,13 +2432,7 @@ func NewDetachLoadBalancersResponse() (response *DetachLoadBalancersResponse) { // RESOURCEUNAVAILABLE_LBVPCINCONSISTENT = "ResourceUnavailable.LbVpcInconsistent" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) DetachLoadBalancers(request *DetachLoadBalancersRequest) (response *DetachLoadBalancersResponse, err error) { - if request == nil { - request = NewDetachLoadBalancersRequest() - } - - response = NewDetachLoadBalancersResponse() - err = c.Send(request, response) - return + return c.DetachLoadBalancersWithContext(context.Background(), request) } // DetachLoadBalancers @@ -2353,6 +2442,7 @@ func (c *Client) DetachLoadBalancers(request *DetachLoadBalancersRequest) (respo // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_LOADBALANCERNOTINAUTOSCALINGGROUP = "InvalidParameter.LoadBalancerNotInAutoScalingGroup" @@ -2366,6 +2456,7 @@ func (c *Client) DetachLoadBalancers(request *DetachLoadBalancersRequest) (respo // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" // RESOURCENOTFOUND_LOADBALANCERNOTFOUND = "ResourceNotFound.LoadBalancerNotFound" +// RESOURCENOTFOUND_LOADBALANCERNOTINAUTOSCALINGGROUP = "ResourceNotFound.LoadBalancerNotInAutoScalingGroup" // RESOURCENOTFOUND_LOCATIONNOTFOUND = "ResourceNotFound.LocationNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_LBBACKENDREGIONINCONSISTENT = "ResourceUnavailable.LbBackendRegionInconsistent" @@ -2376,6 +2467,11 @@ func (c *Client) DetachLoadBalancersWithContext(ctx context.Context, request *De if request == nil { request = NewDetachLoadBalancersRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DetachLoadBalancers require credential") + } + request.SetContext(ctx) response = NewDetachLoadBalancersResponse() @@ -2387,6 +2483,7 @@ func NewDisableAutoScalingGroupRequest() (request *DisableAutoScalingGroupReques request = &DisableAutoScalingGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "DisableAutoScalingGroup") return @@ -2402,33 +2499,86 @@ func NewDisableAutoScalingGroupResponse() (response *DisableAutoScalingGroupResp // DisableAutoScalingGroup // 本接口(DisableAutoScalingGroup)用于停用指定伸缩组。 // +// * 停用伸缩组后,自动触发的伸缩活动不再进行,包括: +// +// - 告警策略触发的伸缩活动 +// +// - 匹配期望实例数的伸缩活动 +// +// - 不健康实例替换活动 +// +// - 定时任务 +// +// * 停用伸缩组后,手动触发的伸缩活动允许进行,包括: +// +// - 指定数量扩容实例(ScaleOutInstances) +// +// - 指定数量缩容实例(ScaleInInstances) +// +// - 从伸缩组中移出 CVM 实例(DetachInstances) +// +// - 从伸缩组中删除 CVM 实例(RemoveInstances) +// +// - 添加 CVM 实例到伸缩组(AttachInstances) +// +// - 关闭伸缩组内 CVM 实例(StopAutoScalingInstances) +// +// - 开启伸缩组内 CVM 实例(StartAutoScalingInstances) +// // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) DisableAutoScalingGroup(request *DisableAutoScalingGroupRequest) (response *DisableAutoScalingGroupResponse, err error) { - if request == nil { - request = NewDisableAutoScalingGroupRequest() - } - - response = NewDisableAutoScalingGroupResponse() - err = c.Send(request, response) - return + return c.DisableAutoScalingGroupWithContext(context.Background(), request) } // DisableAutoScalingGroup // 本接口(DisableAutoScalingGroup)用于停用指定伸缩组。 // +// * 停用伸缩组后,自动触发的伸缩活动不再进行,包括: +// +// - 告警策略触发的伸缩活动 +// +// - 匹配期望实例数的伸缩活动 +// +// - 不健康实例替换活动 +// +// - 定时任务 +// +// * 停用伸缩组后,手动触发的伸缩活动允许进行,包括: +// +// - 指定数量扩容实例(ScaleOutInstances) +// +// - 指定数量缩容实例(ScaleInInstances) +// +// - 从伸缩组中移出 CVM 实例(DetachInstances) +// +// - 从伸缩组中删除 CVM 实例(RemoveInstances) +// +// - 添加 CVM 实例到伸缩组(AttachInstances) +// +// - 关闭伸缩组内 CVM 实例(StopAutoScalingInstances) +// +// - 开启伸缩组内 CVM 实例(StartAutoScalingInstances) +// // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) DisableAutoScalingGroupWithContext(ctx context.Context, request *DisableAutoScalingGroupRequest) (response *DisableAutoScalingGroupResponse, err error) { if request == nil { request = NewDisableAutoScalingGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisableAutoScalingGroup require credential") + } + request.SetContext(ctx) response = NewDisableAutoScalingGroupResponse() @@ -2440,6 +2590,7 @@ func NewEnableAutoScalingGroupRequest() (request *EnableAutoScalingGroupRequest) request = &EnableAutoScalingGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "EnableAutoScalingGroup") return @@ -2458,16 +2609,11 @@ func NewEnableAutoScalingGroupResponse() (response *EnableAutoScalingGroupRespon // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) EnableAutoScalingGroup(request *EnableAutoScalingGroupRequest) (response *EnableAutoScalingGroupResponse, err error) { - if request == nil { - request = NewEnableAutoScalingGroupRequest() - } - - response = NewEnableAutoScalingGroupResponse() - err = c.Send(request, response) - return + return c.EnableAutoScalingGroupWithContext(context.Background(), request) } // EnableAutoScalingGroup @@ -2476,12 +2622,18 @@ func (c *Client) EnableAutoScalingGroup(request *EnableAutoScalingGroupRequest) // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" func (c *Client) EnableAutoScalingGroupWithContext(ctx context.Context, request *EnableAutoScalingGroupRequest) (response *EnableAutoScalingGroupResponse, err error) { if request == nil { request = NewEnableAutoScalingGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("EnableAutoScalingGroup require credential") + } + request.SetContext(ctx) response = NewEnableAutoScalingGroupResponse() @@ -2493,6 +2645,7 @@ func NewExecuteScalingPolicyRequest() (request *ExecuteScalingPolicyRequest) { request = &ExecuteScalingPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ExecuteScalingPolicy") return @@ -2512,24 +2665,22 @@ func NewExecuteScalingPolicyResponse() (response *ExecuteScalingPolicyResponse) // // * 伸缩策略所属伸缩组处于伸缩活动时,会拒绝执行伸缩策略。 // +// * 本接口不支持执行目标追踪策略。 +// // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" +// INVALIDPARAMETERVALUE_TARGETTRACKINGSCALINGPOLICY = "InvalidParameterValue.TargetTrackingScalingPolicy" // RESOURCEINUSE_AUTOSCALINGGROUPNOTACTIVE = "ResourceInUse.AutoScalingGroupNotActive" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPABNORMALSTATUS = "ResourceUnavailable.AutoScalingGroupAbnormalStatus" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" func (c *Client) ExecuteScalingPolicy(request *ExecuteScalingPolicyRequest) (response *ExecuteScalingPolicyResponse, err error) { - if request == nil { - request = NewExecuteScalingPolicyRequest() - } - - response = NewExecuteScalingPolicyResponse() - err = c.Send(request, response) - return + return c.ExecuteScalingPolicyWithContext(context.Background(), request) } // ExecuteScalingPolicy @@ -2539,11 +2690,15 @@ func (c *Client) ExecuteScalingPolicy(request *ExecuteScalingPolicyRequest) (res // // * 伸缩策略所属伸缩组处于伸缩活动时,会拒绝执行伸缩策略。 // +// * 本接口不支持执行目标追踪策略。 +// // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" +// INVALIDPARAMETERVALUE_TARGETTRACKINGSCALINGPOLICY = "InvalidParameterValue.TargetTrackingScalingPolicy" // RESOURCEINUSE_AUTOSCALINGGROUPNOTACTIVE = "ResourceInUse.AutoScalingGroupNotActive" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" @@ -2553,6 +2708,11 @@ func (c *Client) ExecuteScalingPolicyWithContext(ctx context.Context, request *E if request == nil { request = NewExecuteScalingPolicyRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ExecuteScalingPolicy require credential") + } + request.SetContext(ctx) response = NewExecuteScalingPolicyResponse() @@ -2564,6 +2724,7 @@ func NewModifyAutoScalingGroupRequest() (request *ModifyAutoScalingGroupRequest) request = &ModifyAutoScalingGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyAutoScalingGroup") return @@ -2583,6 +2744,7 @@ func NewModifyAutoScalingGroupResponse() (response *ModifyAutoScalingGroupRespon // // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" @@ -2607,16 +2769,11 @@ func NewModifyAutoScalingGroupResponse() (response *ModifyAutoScalingGroupRespon // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" +// RESOURCEUNAVAILABLE_FORBIDDENMODIFYVPC = "ResourceUnavailable.ForbiddenModifyVpc" // RESOURCEUNAVAILABLE_LAUNCHCONFIGURATIONSTATUSABNORMAL = "ResourceUnavailable.LaunchConfigurationStatusAbnormal" // RESOURCEUNAVAILABLE_PROJECTINCONSISTENT = "ResourceUnavailable.ProjectInconsistent" func (c *Client) ModifyAutoScalingGroup(request *ModifyAutoScalingGroupRequest) (response *ModifyAutoScalingGroupResponse, err error) { - if request == nil { - request = NewModifyAutoScalingGroupRequest() - } - - response = NewModifyAutoScalingGroupResponse() - err = c.Send(request, response) - return + return c.ModifyAutoScalingGroupWithContext(context.Background(), request) } // ModifyAutoScalingGroup @@ -2626,6 +2783,7 @@ func (c *Client) ModifyAutoScalingGroup(request *ModifyAutoScalingGroupRequest) // // INTERNALERROR_CALLVPCERROR = "InternalError.CallVpcError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" @@ -2650,12 +2808,18 @@ func (c *Client) ModifyAutoScalingGroup(request *ModifyAutoScalingGroupRequest) // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" +// RESOURCEUNAVAILABLE_FORBIDDENMODIFYVPC = "ResourceUnavailable.ForbiddenModifyVpc" // RESOURCEUNAVAILABLE_LAUNCHCONFIGURATIONSTATUSABNORMAL = "ResourceUnavailable.LaunchConfigurationStatusAbnormal" // RESOURCEUNAVAILABLE_PROJECTINCONSISTENT = "ResourceUnavailable.ProjectInconsistent" func (c *Client) ModifyAutoScalingGroupWithContext(ctx context.Context, request *ModifyAutoScalingGroupRequest) (response *ModifyAutoScalingGroupResponse, err error) { if request == nil { request = NewModifyAutoScalingGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAutoScalingGroup require credential") + } + request.SetContext(ctx) response = NewModifyAutoScalingGroupResponse() @@ -2667,6 +2831,7 @@ func NewModifyDesiredCapacityRequest() (request *ModifyDesiredCapacityRequest) { request = &ModifyDesiredCapacityRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyDesiredCapacity") return @@ -2685,20 +2850,17 @@ func NewModifyDesiredCapacityResponse() (response *ModifyDesiredCapacityResponse // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SIZE = "InvalidParameterValue.Size" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPABNORMALSTATUS = "ResourceUnavailable.AutoScalingGroupAbnormalStatus" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPDISABLED = "ResourceUnavailable.AutoScalingGroupDisabled" func (c *Client) ModifyDesiredCapacity(request *ModifyDesiredCapacityRequest) (response *ModifyDesiredCapacityResponse, err error) { - if request == nil { - request = NewModifyDesiredCapacityRequest() - } - - response = NewModifyDesiredCapacityResponse() - err = c.Send(request, response) - return + return c.ModifyDesiredCapacityWithContext(context.Background(), request) } // ModifyDesiredCapacity @@ -2707,7 +2869,10 @@ func (c *Client) ModifyDesiredCapacity(request *ModifyDesiredCapacityRequest) (r // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SIZE = "InvalidParameterValue.Size" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" @@ -2717,6 +2882,11 @@ func (c *Client) ModifyDesiredCapacityWithContext(ctx context.Context, request * if request == nil { request = NewModifyDesiredCapacityRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyDesiredCapacity require credential") + } + request.SetContext(ctx) response = NewModifyDesiredCapacityResponse() @@ -2728,6 +2898,7 @@ func NewModifyLaunchConfigurationAttributesRequest() (request *ModifyLaunchConfi request = &ModifyLaunchConfigurationAttributesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyLaunchConfigurationAttributes") return @@ -2749,34 +2920,43 @@ func NewModifyLaunchConfigurationAttributesResponse() (response *ModifyLaunchCon // // 可能返回的错误码: // +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_HOSTNAMEUNAVAILABLE = "InvalidParameter.HostNameUnavailable" +// INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_IMAGENOTFOUND = "InvalidParameterValue.ImageNotFound" // INVALIDPARAMETERVALUE_INSTANCENAMEILLEGAL = "InvalidParameterValue.InstanceNameIllegal" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" +// INVALIDPARAMETERVALUE_INVALIDDISASTERRECOVERGROUPID = "InvalidParameterValue.InvalidDisasterRecoverGroupId" +// INVALIDPARAMETERVALUE_INVALIDHPCCLUSTERID = "InvalidParameterValue.InvalidHpcClusterId" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" +// INVALIDPARAMETERVALUE_INVALIDSECURITYGROUPID = "InvalidParameterValue.InvalidSecurityGroupId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" -// INVALIDPARAMETERVALUE_USERDATAFORMATERROR = "InvalidParameterValue.UserDataFormatError" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INVALIDPARAMETERVALUE_TOOSHORT = "InvalidParameterValue.TooShort" +// INVALIDPARAMETERVALUE_USERDATAFORMATERROR = "InvalidParameterValue.UserDataFormatError" // INVALIDPARAMETERVALUE_USERDATASIZEEXCEEDED = "InvalidParameterValue.UserDataSizeExceeded" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" +// RESOURCENOTFOUND_DISASTERRECOVERGROUPNOTFOUND = "ResourceNotFound.DisasterRecoverGroupNotFound" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" func (c *Client) ModifyLaunchConfigurationAttributes(request *ModifyLaunchConfigurationAttributesRequest) (response *ModifyLaunchConfigurationAttributesResponse, err error) { - if request == nil { - request = NewModifyLaunchConfigurationAttributesRequest() - } - - response = NewModifyLaunchConfigurationAttributesResponse() - err = c.Send(request, response) - return + return c.ModifyLaunchConfigurationAttributesWithContext(context.Background(), request) } // ModifyLaunchConfigurationAttributes @@ -2788,30 +2968,50 @@ func (c *Client) ModifyLaunchConfigurationAttributes(request *ModifyLaunchConfig // // 可能返回的错误码: // +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_HOSTNAMEUNAVAILABLE = "InvalidParameter.HostNameUnavailable" +// INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_IMAGENOTFOUND = "InvalidParameterValue.ImageNotFound" // INVALIDPARAMETERVALUE_INSTANCENAMEILLEGAL = "InvalidParameterValue.InstanceNameIllegal" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" +// INVALIDPARAMETERVALUE_INVALIDDISASTERRECOVERGROUPID = "InvalidParameterValue.InvalidDisasterRecoverGroupId" +// INVALIDPARAMETERVALUE_INVALIDHPCCLUSTERID = "InvalidParameterValue.InvalidHpcClusterId" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" +// INVALIDPARAMETERVALUE_INVALIDSECURITYGROUPID = "InvalidParameterValue.InvalidSecurityGroupId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INVALIDPARAMETERVALUE_TOOSHORT = "InvalidParameterValue.TooShort" // INVALIDPARAMETERVALUE_USERDATAFORMATERROR = "InvalidParameterValue.UserDataFormatError" // INVALIDPARAMETERVALUE_USERDATASIZEEXCEEDED = "InvalidParameterValue.UserDataSizeExceeded" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" +// RESOURCENOTFOUND_DISASTERRECOVERGROUPNOTFOUND = "ResourceNotFound.DisasterRecoverGroupNotFound" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" func (c *Client) ModifyLaunchConfigurationAttributesWithContext(ctx context.Context, request *ModifyLaunchConfigurationAttributesRequest) (response *ModifyLaunchConfigurationAttributesResponse, err error) { if request == nil { request = NewModifyLaunchConfigurationAttributesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLaunchConfigurationAttributes require credential") + } + request.SetContext(ctx) response = NewModifyLaunchConfigurationAttributesResponse() @@ -2819,10 +3019,80 @@ func (c *Client) ModifyLaunchConfigurationAttributesWithContext(ctx context.Cont return } +func NewModifyLifecycleHookRequest() (request *ModifyLifecycleHookRequest) { + request = &ModifyLifecycleHookRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("as", APIVersion, "ModifyLifecycleHook") + + return +} + +func NewModifyLifecycleHookResponse() (response *ModifyLifecycleHookResponse) { + response = &ModifyLifecycleHookResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifyLifecycleHook +// 此接口用于修改生命周期挂钩。 +// +// 可能返回的错误码: +// +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND_CMQQUEUENOTFOUND = "ResourceNotFound.CmqQueueNotFound" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" +// RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" +// RESOURCENOTFOUND_TDMQCMQQUEUENOTFOUND = "ResourceNotFound.TDMQCMQQueueNotFound" +// RESOURCENOTFOUND_TDMQCMQTOPICNOTFOUND = "ResourceNotFound.TDMQCMQTopicNotFound" +// RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" +func (c *Client) ModifyLifecycleHook(request *ModifyLifecycleHookRequest) (response *ModifyLifecycleHookResponse, err error) { + return c.ModifyLifecycleHookWithContext(context.Background(), request) +} + +// ModifyLifecycleHook +// 此接口用于修改生命周期挂钩。 +// +// 可能返回的错误码: +// +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND_CMQQUEUENOTFOUND = "ResourceNotFound.CmqQueueNotFound" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" +// RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" +// RESOURCENOTFOUND_TDMQCMQQUEUENOTFOUND = "ResourceNotFound.TDMQCMQQueueNotFound" +// RESOURCENOTFOUND_TDMQCMQTOPICNOTFOUND = "ResourceNotFound.TDMQCMQTopicNotFound" +// RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" +func (c *Client) ModifyLifecycleHookWithContext(ctx context.Context, request *ModifyLifecycleHookRequest) (response *ModifyLifecycleHookResponse, err error) { + if request == nil { + request = NewModifyLifecycleHookRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLifecycleHook require credential") + } + + request.SetContext(ctx) + + response = NewModifyLifecycleHookResponse() + err = c.Send(request, response) + return +} + func NewModifyLoadBalancerTargetAttributesRequest() (request *ModifyLoadBalancerTargetAttributesRequest) { request = &ModifyLoadBalancerTargetAttributesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyLoadBalancerTargetAttributes") return @@ -2842,6 +3112,7 @@ func NewModifyLoadBalancerTargetAttributesResponse() (response *ModifyLoadBalanc // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_LOADBALANCERNOTINAUTOSCALINGGROUP = "InvalidParameter.LoadBalancerNotInAutoScalingGroup" @@ -2849,12 +3120,15 @@ func NewModifyLoadBalancerTargetAttributesResponse() (response *ModifyLoadBalanc // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // LIMITEXCEEDED_AFTERATTACHLBLIMITEXCEEDED = "LimitExceeded.AfterAttachLbLimitExceeded" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" // RESOURCENOTFOUND_LOADBALANCERNOTFOUND = "ResourceNotFound.LoadBalancerNotFound" +// RESOURCENOTFOUND_LOADBALANCERNOTINAUTOSCALINGGROUP = "ResourceNotFound.LoadBalancerNotInAutoScalingGroup" // RESOURCENOTFOUND_LOCATIONNOTFOUND = "ResourceNotFound.LocationNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_LBBACKENDREGIONINCONSISTENT = "ResourceUnavailable.LbBackendRegionInconsistent" @@ -2862,13 +3136,7 @@ func NewModifyLoadBalancerTargetAttributesResponse() (response *ModifyLoadBalanc // RESOURCEUNAVAILABLE_LBVPCINCONSISTENT = "ResourceUnavailable.LbVpcInconsistent" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) ModifyLoadBalancerTargetAttributes(request *ModifyLoadBalancerTargetAttributesRequest) (response *ModifyLoadBalancerTargetAttributesResponse, err error) { - if request == nil { - request = NewModifyLoadBalancerTargetAttributesRequest() - } - - response = NewModifyLoadBalancerTargetAttributesResponse() - err = c.Send(request, response) - return + return c.ModifyLoadBalancerTargetAttributesWithContext(context.Background(), request) } // ModifyLoadBalancerTargetAttributes @@ -2878,6 +3146,7 @@ func (c *Client) ModifyLoadBalancerTargetAttributes(request *ModifyLoadBalancerT // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETER_LOADBALANCERNOTINAUTOSCALINGGROUP = "InvalidParameter.LoadBalancerNotInAutoScalingGroup" @@ -2885,12 +3154,15 @@ func (c *Client) ModifyLoadBalancerTargetAttributes(request *ModifyLoadBalancerT // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // LIMITEXCEEDED_AFTERATTACHLBLIMITEXCEEDED = "LimitExceeded.AfterAttachLbLimitExceeded" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" // RESOURCENOTFOUND_LOADBALANCERNOTFOUND = "ResourceNotFound.LoadBalancerNotFound" +// RESOURCENOTFOUND_LOADBALANCERNOTINAUTOSCALINGGROUP = "ResourceNotFound.LoadBalancerNotInAutoScalingGroup" // RESOURCENOTFOUND_LOCATIONNOTFOUND = "ResourceNotFound.LocationNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_LBBACKENDREGIONINCONSISTENT = "ResourceUnavailable.LbBackendRegionInconsistent" @@ -2901,6 +3173,11 @@ func (c *Client) ModifyLoadBalancerTargetAttributesWithContext(ctx context.Conte if request == nil { request = NewModifyLoadBalancerTargetAttributesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLoadBalancerTargetAttributes require credential") + } + request.SetContext(ctx) response = NewModifyLoadBalancerTargetAttributesResponse() @@ -2912,6 +3189,7 @@ func NewModifyLoadBalancersRequest() (request *ModifyLoadBalancersRequest) { request = &ModifyLoadBalancersRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyLoadBalancers") return @@ -2936,15 +3214,20 @@ func NewModifyLoadBalancersResponse() (response *ModifyLoadBalancersResponse) { // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLLBERROR = "InternalError.CallLbError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" +// INVALIDPARAMETERVALUE_DUPLICATEDFORWARDLB = "InvalidParameterValue.DuplicatedForwardLb" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" // INVALIDPARAMETERVALUE_LBPROJECTINCONSISTENT = "InvalidParameterValue.LbProjectInconsistent" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" @@ -2955,13 +3238,7 @@ func NewModifyLoadBalancersResponse() (response *ModifyLoadBalancersResponse) { // RESOURCEUNAVAILABLE_LBVPCINCONSISTENT = "ResourceUnavailable.LbVpcInconsistent" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) ModifyLoadBalancers(request *ModifyLoadBalancersRequest) (response *ModifyLoadBalancersResponse, err error) { - if request == nil { - request = NewModifyLoadBalancersRequest() - } - - response = NewModifyLoadBalancersResponse() - err = c.Send(request, response) - return + return c.ModifyLoadBalancersWithContext(context.Background(), request) } // ModifyLoadBalancers @@ -2976,15 +3253,20 @@ func (c *Client) ModifyLoadBalancers(request *ModifyLoadBalancersRequest) (respo // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLLBERROR = "InternalError.CallLbError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INSCENARIO = "InvalidParameter.InScenario" // INVALIDPARAMETERVALUE_CLASSICLB = "InvalidParameterValue.ClassicLb" +// INVALIDPARAMETERVALUE_DUPLICATEDFORWARDLB = "InvalidParameterValue.DuplicatedForwardLb" // INVALIDPARAMETERVALUE_FORWARDLB = "InvalidParameterValue.ForwardLb" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" // INVALIDPARAMETERVALUE_LBPROJECTINCONSISTENT = "InvalidParameterValue.LbProjectInconsistent" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" // MISSINGPARAMETER_INSCENARIO = "MissingParameter.InScenario" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" @@ -2998,6 +3280,11 @@ func (c *Client) ModifyLoadBalancersWithContext(ctx context.Context, request *Mo if request == nil { request = NewModifyLoadBalancersRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLoadBalancers require credential") + } + request.SetContext(ctx) response = NewModifyLoadBalancersResponse() @@ -3009,6 +3296,7 @@ func NewModifyNotificationConfigurationRequest() (request *ModifyNotificationCon request = &ModifyNotificationConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyNotificationConfiguration") return @@ -3028,6 +3316,7 @@ func NewModifyNotificationConfigurationResponse() (response *ModifyNotificationC // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CONFLICTNOTIFICATIONTARGET = "InvalidParameterValue.ConflictNotificationTarget" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" @@ -3038,13 +3327,7 @@ func NewModifyNotificationConfigurationResponse() (response *ModifyNotificationC // RESOURCENOTFOUND_TDMQCMQTOPICNOTFOUND = "ResourceNotFound.TDMQCMQTopicNotFound" // RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" func (c *Client) ModifyNotificationConfiguration(request *ModifyNotificationConfigurationRequest) (response *ModifyNotificationConfigurationResponse, err error) { - if request == nil { - request = NewModifyNotificationConfigurationRequest() - } - - response = NewModifyNotificationConfigurationResponse() - err = c.Send(request, response) - return + return c.ModifyNotificationConfigurationWithContext(context.Background(), request) } // ModifyNotificationConfiguration @@ -3054,6 +3337,7 @@ func (c *Client) ModifyNotificationConfiguration(request *ModifyNotificationConf // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CONFLICTNOTIFICATIONTARGET = "InvalidParameterValue.ConflictNotificationTarget" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGNOTIFICATIONID = "InvalidParameterValue.InvalidAutoScalingNotificationId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" @@ -3067,6 +3351,11 @@ func (c *Client) ModifyNotificationConfigurationWithContext(ctx context.Context, if request == nil { request = NewModifyNotificationConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNotificationConfiguration require credential") + } + request.SetContext(ctx) response = NewModifyNotificationConfigurationResponse() @@ -3078,6 +3367,7 @@ func NewModifyScalingPolicyRequest() (request *ModifyScalingPolicyRequest) { request = &ModifyScalingPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyScalingPolicy") return @@ -3095,20 +3385,18 @@ func NewModifyScalingPolicyResponse() (response *ModifyScalingPolicyResponse) { // // 可能返回的错误码: // +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SCALINGPOLICYNAMEDUPLICATE = "InvalidParameterValue.ScalingPolicyNameDuplicate" +// INVALIDPARAMETERVALUE_THRESHOLDOUTOFRANGE = "InvalidParameterValue.ThresholdOutOfRange" +// INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" func (c *Client) ModifyScalingPolicy(request *ModifyScalingPolicyRequest) (response *ModifyScalingPolicyResponse, err error) { - if request == nil { - request = NewModifyScalingPolicyRequest() - } - - response = NewModifyScalingPolicyResponse() - err = c.Send(request, response) - return + return c.ModifyScalingPolicyWithContext(context.Background(), request) } // ModifyScalingPolicy @@ -3116,16 +3404,25 @@ func (c *Client) ModifyScalingPolicy(request *ModifyScalingPolicyRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGPOLICYID = "InvalidParameterValue.InvalidAutoScalingPolicyId" // INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SCALINGPOLICYNAMEDUPLICATE = "InvalidParameterValue.ScalingPolicyNameDuplicate" +// INVALIDPARAMETERVALUE_THRESHOLDOUTOFRANGE = "InvalidParameterValue.ThresholdOutOfRange" +// INVALIDPARAMETERVALUE_USERGROUPIDNOTFOUND = "InvalidParameterValue.UserGroupIdNotFound" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_SCALINGPOLICYNOTFOUND = "ResourceNotFound.ScalingPolicyNotFound" func (c *Client) ModifyScalingPolicyWithContext(ctx context.Context, request *ModifyScalingPolicyRequest) (response *ModifyScalingPolicyResponse, err error) { if request == nil { request = NewModifyScalingPolicyRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyScalingPolicy require credential") + } + request.SetContext(ctx) response = NewModifyScalingPolicyResponse() @@ -3137,6 +3434,7 @@ func NewModifyScheduledActionRequest() (request *ModifyScheduledActionRequest) { request = &ModifyScheduledActionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ModifyScheduledAction") return @@ -3155,6 +3453,7 @@ func NewModifyScheduledActionResponse() (response *ModifyScheduledActionResponse // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CRONEXPRESSIONILLEGAL = "InvalidParameterValue.CronExpressionIllegal" // INVALIDPARAMETERVALUE_ENDTIMEBEFORESTARTTIME = "InvalidParameterValue.EndTimeBeforeStartTime" // INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" @@ -3170,13 +3469,7 @@ func NewModifyScheduledActionResponse() (response *ModifyScheduledActionResponse // LIMITEXCEEDED_SCHEDULEDACTIONLIMITEXCEEDED = "LimitExceeded.ScheduledActionLimitExceeded" // RESOURCENOTFOUND_SCHEDULEDACTIONNOTFOUND = "ResourceNotFound.ScheduledActionNotFound" func (c *Client) ModifyScheduledAction(request *ModifyScheduledActionRequest) (response *ModifyScheduledActionResponse, err error) { - if request == nil { - request = NewModifyScheduledActionRequest() - } - - response = NewModifyScheduledActionResponse() - err = c.Send(request, response) - return + return c.ModifyScheduledActionWithContext(context.Background(), request) } // ModifyScheduledAction @@ -3185,6 +3478,7 @@ func (c *Client) ModifyScheduledAction(request *ModifyScheduledActionRequest) (r // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_CRONEXPRESSIONILLEGAL = "InvalidParameterValue.CronExpressionIllegal" // INVALIDPARAMETERVALUE_ENDTIMEBEFORESTARTTIME = "InvalidParameterValue.EndTimeBeforeStartTime" // INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" @@ -3203,58 +3497,14 @@ func (c *Client) ModifyScheduledActionWithContext(ctx context.Context, request * if request == nil { request = NewModifyScheduledActionRequest() } - request.SetContext(ctx) - - response = NewModifyScheduledActionResponse() - err = c.Send(request, response) - return -} - -func NewPreviewPaiDomainNameRequest() (request *PreviewPaiDomainNameRequest) { - request = &PreviewPaiDomainNameRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("as", APIVersion, "PreviewPaiDomainName") - - return -} - -func NewPreviewPaiDomainNameResponse() (response *PreviewPaiDomainNameResponse) { - response = &PreviewPaiDomainNameResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} -// PreviewPaiDomainName -// 本接口(PreviewPaiDomainName)用于预览PAI实例域名。 -// -// 可能返回的错误码: -// -// INVALIDPARAMETERVALUE_INVALIDPAIDOMAINNAMETYPE = "InvalidParameterValue.InvalidPaiDomainNameType" -func (c *Client) PreviewPaiDomainName(request *PreviewPaiDomainNameRequest) (response *PreviewPaiDomainNameResponse, err error) { - if request == nil { - request = NewPreviewPaiDomainNameRequest() + if c.GetCredential() == nil { + return nil, errors.New("ModifyScheduledAction require credential") } - response = NewPreviewPaiDomainNameResponse() - err = c.Send(request, response) - return -} - -// PreviewPaiDomainName -// 本接口(PreviewPaiDomainName)用于预览PAI实例域名。 -// -// 可能返回的错误码: -// -// INVALIDPARAMETERVALUE_INVALIDPAIDOMAINNAMETYPE = "InvalidParameterValue.InvalidPaiDomainNameType" -func (c *Client) PreviewPaiDomainNameWithContext(ctx context.Context, request *PreviewPaiDomainNameRequest) (response *PreviewPaiDomainNameResponse, err error) { - if request == nil { - request = NewPreviewPaiDomainNameRequest() - } request.SetContext(ctx) - response = NewPreviewPaiDomainNameResponse() + response = NewModifyScheduledActionResponse() err = c.Send(request, response) return } @@ -3263,6 +3513,7 @@ func NewRemoveInstancesRequest() (request *RemoveInstancesRequest) { request = &RemoveInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "RemoveInstances") return @@ -3287,6 +3538,7 @@ func NewRemoveInstancesResponse() (response *RemoveInstancesResponse) { // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -3297,13 +3549,7 @@ func NewRemoveInstancesResponse() (response *RemoveInstancesResponse) { // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_INSTANCEINOPERATION = "ResourceUnavailable.InstanceInOperation" func (c *Client) RemoveInstances(request *RemoveInstancesRequest) (response *RemoveInstancesResponse, err error) { - if request == nil { - request = NewRemoveInstancesRequest() - } - - response = NewRemoveInstancesResponse() - err = c.Send(request, response) - return + return c.RemoveInstancesWithContext(context.Background(), request) } // RemoveInstances @@ -3318,6 +3564,7 @@ func (c *Client) RemoveInstances(request *RemoveInstancesRequest) (response *Rem // 可能返回的错误码: // // INTERNALERROR = "InternalError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -3331,6 +3578,11 @@ func (c *Client) RemoveInstancesWithContext(ctx context.Context, request *Remove if request == nil { request = NewRemoveInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RemoveInstances require credential") + } + request.SetContext(ctx) response = NewRemoveInstancesResponse() @@ -3342,6 +3594,7 @@ func NewScaleInInstancesRequest() (request *ScaleInInstancesRequest) { request = &ScaleInInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ScaleInInstances") return @@ -3359,6 +3612,8 @@ func NewScaleInInstancesResponse() (response *ScaleInInstancesResponse) { // // * 伸缩组需要未处于活动中 // +// * 伸缩组处于停用状态时,该接口也会生效,可参考[停用伸缩组](https://cloud.tencent.com/document/api/377/20435)文档查看伸缩组停用状态的影响范围 +// // * 根据伸缩组的`TerminationPolicies`策略,选择被缩容的实例,可参考[缩容处理](https://cloud.tencent.com/document/product/377/8563) // // * 接口只会选择`IN_SERVICE`实例缩容,如果需要缩容其他状态实例,可以使用 [DetachInstances](https://cloud.tencent.com/document/api/377/20436) 或 [RemoveInstances](https://cloud.tencent.com/document/api/377/20431) 接口 @@ -3369,6 +3624,7 @@ func NewScaleInInstancesResponse() (response *ScaleInInstancesResponse) { // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // MISSINGPARAMETER = "MissingParameter" @@ -3376,13 +3632,7 @@ func NewScaleInInstancesResponse() (response *ScaleInInstancesResponse) { // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" func (c *Client) ScaleInInstances(request *ScaleInInstancesRequest) (response *ScaleInInstancesResponse, err error) { - if request == nil { - request = NewScaleInInstancesRequest() - } - - response = NewScaleInInstancesResponse() - err = c.Send(request, response) - return + return c.ScaleInInstancesWithContext(context.Background(), request) } // ScaleInInstances @@ -3390,6 +3640,8 @@ func (c *Client) ScaleInInstances(request *ScaleInInstancesRequest) (response *S // // * 伸缩组需要未处于活动中 // +// * 伸缩组处于停用状态时,该接口也会生效,可参考[停用伸缩组](https://cloud.tencent.com/document/api/377/20435)文档查看伸缩组停用状态的影响范围 +// // * 根据伸缩组的`TerminationPolicies`策略,选择被缩容的实例,可参考[缩容处理](https://cloud.tencent.com/document/product/377/8563) // // * 接口只会选择`IN_SERVICE`实例缩容,如果需要缩容其他状态实例,可以使用 [DetachInstances](https://cloud.tencent.com/document/api/377/20436) 或 [RemoveInstances](https://cloud.tencent.com/document/api/377/20431) 接口 @@ -3400,6 +3652,7 @@ func (c *Client) ScaleInInstances(request *ScaleInInstancesRequest) (response *S // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // MISSINGPARAMETER = "MissingParameter" @@ -3410,6 +3663,11 @@ func (c *Client) ScaleInInstancesWithContext(ctx context.Context, request *Scale if request == nil { request = NewScaleInInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ScaleInInstances require credential") + } + request.SetContext(ctx) response = NewScaleInInstancesResponse() @@ -3421,6 +3679,7 @@ func NewScaleOutInstancesRequest() (request *ScaleOutInstancesRequest) { request = &ScaleOutInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "ScaleOutInstances") return @@ -3438,12 +3697,17 @@ func NewScaleOutInstancesResponse() (response *ScaleOutInstancesResponse) { // // * 伸缩组需要未处于活动中 // +// * 伸缩组处于停用状态时,该接口也会生效,可参考[停用伸缩组](https://cloud.tencent.com/document/api/377/20435)文档查看伸缩组停用状态的影响范围 +// // * 接口会增加期望实例数,新的期望实例数需要小于等于最大实例数 // // * 扩容如果失败或者部分成功,最后期望实例数只会增加实际成功的实例数量 // +// * 竞价混合模式中一次扩容可能触发多个伸缩活动,该接口仅返回第一个伸缩活动的 ActivityId +// // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" @@ -3451,13 +3715,7 @@ func NewScaleOutInstancesResponse() (response *ScaleOutInstancesResponse) { // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" func (c *Client) ScaleOutInstances(request *ScaleOutInstancesRequest) (response *ScaleOutInstancesResponse, err error) { - if request == nil { - request = NewScaleOutInstancesRequest() - } - - response = NewScaleOutInstancesResponse() - err = c.Send(request, response) - return + return c.ScaleOutInstancesWithContext(context.Background(), request) } // ScaleOutInstances @@ -3465,12 +3723,17 @@ func (c *Client) ScaleOutInstances(request *ScaleOutInstancesRequest) (response // // * 伸缩组需要未处于活动中 // +// * 伸缩组处于停用状态时,该接口也会生效,可参考[停用伸缩组](https://cloud.tencent.com/document/api/377/20435)文档查看伸缩组停用状态的影响范围 +// // * 接口会增加期望实例数,新的期望实例数需要小于等于最大实例数 // // * 扩容如果失败或者部分成功,最后期望实例数只会增加实际成功的实例数量 // +// * 竞价混合模式中一次扩容可能触发多个伸缩活动,该接口仅返回第一个伸缩活动的 ActivityId +// // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED_DESIREDCAPACITYLIMITEXCEEDED = "LimitExceeded.DesiredCapacityLimitExceeded" @@ -3481,6 +3744,11 @@ func (c *Client) ScaleOutInstancesWithContext(ctx context.Context, request *Scal if request == nil { request = NewScaleOutInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ScaleOutInstances require credential") + } + request.SetContext(ctx) response = NewScaleOutInstancesResponse() @@ -3492,6 +3760,7 @@ func NewSetInstancesProtectionRequest() (request *SetInstancesProtectionRequest) request = &SetInstancesProtectionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "SetInstancesProtection") return @@ -3511,18 +3780,14 @@ func NewSetInstancesProtectionResponse() (response *SetInstancesProtectionRespon // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_INSTANCESNOTINAUTOSCALINGGROUP = "ResourceNotFound.InstancesNotInAutoScalingGroup" func (c *Client) SetInstancesProtection(request *SetInstancesProtectionRequest) (response *SetInstancesProtectionResponse, err error) { - if request == nil { - request = NewSetInstancesProtectionRequest() - } - - response = NewSetInstancesProtectionResponse() - err = c.Send(request, response) - return + return c.SetInstancesProtectionWithContext(context.Background(), request) } // SetInstancesProtection @@ -3532,14 +3797,21 @@ func (c *Client) SetInstancesProtection(request *SetInstancesProtectionRequest) // // 可能返回的错误码: // +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCENOTFOUND_AUTOSCALINGGROUPNOTFOUND = "ResourceNotFound.AutoScalingGroupNotFound" // RESOURCENOTFOUND_INSTANCESNOTINAUTOSCALINGGROUP = "ResourceNotFound.InstancesNotInAutoScalingGroup" func (c *Client) SetInstancesProtectionWithContext(ctx context.Context, request *SetInstancesProtectionRequest) (response *SetInstancesProtectionResponse, err error) { if request == nil { request = NewSetInstancesProtectionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("SetInstancesProtection require credential") + } + request.SetContext(ctx) response = NewSetInstancesProtectionResponse() @@ -3551,6 +3823,7 @@ func NewStartAutoScalingInstancesRequest() (request *StartAutoScalingInstancesRe request = &StartAutoScalingInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "StartAutoScalingInstances") return @@ -3573,6 +3846,7 @@ func NewStartAutoScalingInstancesResponse() (response *StartAutoScalingInstances // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // RESOURCEINSUFFICIENT_AUTOSCALINGGROUPABOVEMAXSIZE = "ResourceInsufficient.AutoScalingGroupAboveMaxSize" @@ -3582,13 +3856,7 @@ func NewStartAutoScalingInstancesResponse() (response *StartAutoScalingInstances // RESOURCEUNAVAILABLE_AUTOSCALINGGROUPINACTIVITY = "ResourceUnavailable.AutoScalingGroupInActivity" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) StartAutoScalingInstances(request *StartAutoScalingInstancesRequest) (response *StartAutoScalingInstancesResponse, err error) { - if request == nil { - request = NewStartAutoScalingInstancesRequest() - } - - response = NewStartAutoScalingInstancesResponse() - err = c.Send(request, response) - return + return c.StartAutoScalingInstancesWithContext(context.Background(), request) } // StartAutoScalingInstances @@ -3601,6 +3869,7 @@ func (c *Client) StartAutoScalingInstances(request *StartAutoScalingInstancesReq // 可能返回的错误码: // // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // RESOURCEINSUFFICIENT_AUTOSCALINGGROUPABOVEMAXSIZE = "ResourceInsufficient.AutoScalingGroupAboveMaxSize" @@ -3613,6 +3882,11 @@ func (c *Client) StartAutoScalingInstancesWithContext(ctx context.Context, reque if request == nil { request = NewStartAutoScalingInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("StartAutoScalingInstances require credential") + } + request.SetContext(ctx) response = NewStartAutoScalingInstancesResponse() @@ -3624,6 +3898,7 @@ func NewStopAutoScalingInstancesRequest() (request *StopAutoScalingInstancesRequ request = &StopAutoScalingInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "StopAutoScalingInstances") return @@ -3651,7 +3926,9 @@ func NewStopAutoScalingInstancesResponse() (response *StopAutoScalingInstancesRe // // CALLCVMERROR = "CallCvmError" // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // RESOURCEINSUFFICIENT_AUTOSCALINGGROUPBELOWMINSIZE = "ResourceInsufficient.AutoScalingGroupBelowMinSize" @@ -3663,13 +3940,7 @@ func NewStopAutoScalingInstancesResponse() (response *StopAutoScalingInstancesRe // RESOURCEUNAVAILABLE_INSTANCENOTSUPPORTSTOPCHARGING = "ResourceUnavailable.InstanceNotSupportStopCharging" // RESOURCEUNAVAILABLE_LOADBALANCERINOPERATION = "ResourceUnavailable.LoadBalancerInOperation" func (c *Client) StopAutoScalingInstances(request *StopAutoScalingInstancesRequest) (response *StopAutoScalingInstancesResponse, err error) { - if request == nil { - request = NewStopAutoScalingInstancesRequest() - } - - response = NewStopAutoScalingInstancesResponse() - err = c.Send(request, response) - return + return c.StopAutoScalingInstancesWithContext(context.Background(), request) } // StopAutoScalingInstances @@ -3687,7 +3958,9 @@ func (c *Client) StopAutoScalingInstances(request *StopAutoScalingInstancesReque // // CALLCVMERROR = "CallCvmError" // FAILEDOPERATION_NOACTIVITYTOGENERATE = "FailedOperation.NoActivityToGenerate" +// INTERNALERROR_CALLEEERROR = "InternalError.CalleeError" // INTERNALERROR_REQUESTERROR = "InternalError.RequestError" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETERVALUE_INVALIDAUTOSCALINGGROUPID = "InvalidParameterValue.InvalidAutoScalingGroupId" // INVALIDPARAMETERVALUE_INVALIDINSTANCEID = "InvalidParameterValue.InvalidInstanceId" // RESOURCEINSUFFICIENT_AUTOSCALINGGROUPBELOWMINSIZE = "ResourceInsufficient.AutoScalingGroupBelowMinSize" @@ -3702,6 +3975,11 @@ func (c *Client) StopAutoScalingInstancesWithContext(ctx context.Context, reques if request == nil { request = NewStopAutoScalingInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("StopAutoScalingInstances require credential") + } + request.SetContext(ctx) response = NewStopAutoScalingInstancesResponse() @@ -3713,6 +3991,7 @@ func NewUpgradeLaunchConfigurationRequest() (request *UpgradeLaunchConfiguration request = &UpgradeLaunchConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "UpgradeLaunchConfiguration") return @@ -3737,34 +4016,34 @@ func NewUpgradeLaunchConfigurationResponse() (response *UpgradeLaunchConfigurati // CALLCVMERROR = "CallCvmError" // INTERNALERROR = "InternalError" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_CVMERROR = "InvalidParameterValue.CvmError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_USERDATAFORMATERROR = "InvalidParameterValue.UserDataFormatError" // INVALIDPARAMETERVALUE_USERDATASIZEEXCEEDED = "InvalidParameterValue.UserDataSizeExceeded" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" func (c *Client) UpgradeLaunchConfiguration(request *UpgradeLaunchConfigurationRequest) (response *UpgradeLaunchConfigurationResponse, err error) { - if request == nil { - request = NewUpgradeLaunchConfigurationRequest() - } - - response = NewUpgradeLaunchConfigurationResponse() - err = c.Send(request, response) - return + return c.UpgradeLaunchConfigurationWithContext(context.Background(), request) } // UpgradeLaunchConfiguration @@ -3779,30 +4058,41 @@ func (c *Client) UpgradeLaunchConfiguration(request *UpgradeLaunchConfigurationR // CALLCVMERROR = "CallCvmError" // INTERNALERROR = "InternalError" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETER_INVALIDCOMBINATION = "InvalidParameter.InvalidCombination" // INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" +// INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" // INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" // INVALIDPARAMETERVALUE_CVMCONFIGURATIONERROR = "InvalidParameterValue.CvmConfigurationError" // INVALIDPARAMETERVALUE_CVMERROR = "InvalidParameterValue.CvmError" // INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" +// INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTED = "InvalidParameterValue.InstanceTypeNotSupported" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDINSTANCETYPE = "InvalidParameterValue.InvalidInstanceType" // INVALIDPARAMETERVALUE_INVALIDLAUNCHCONFIGURATIONID = "InvalidParameterValue.InvalidLaunchConfigurationId" // INVALIDPARAMETERVALUE_LAUNCHCONFIGURATIONNAMEDUPLICATED = "InvalidParameterValue.LaunchConfigurationNameDuplicated" +// INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" // INVALIDPARAMETERVALUE_NOTSTRINGTYPEFLOAT = "InvalidParameterValue.NotStringTypeFloat" // INVALIDPARAMETERVALUE_PROJECTIDNOTFOUND = "InvalidParameterValue.ProjectIdNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_USERDATAFORMATERROR = "InvalidParameterValue.UserDataFormatError" // INVALIDPARAMETERVALUE_USERDATASIZEEXCEEDED = "InvalidParameterValue.UserDataSizeExceeded" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" // RESOURCENOTFOUND_LAUNCHCONFIGURATIONIDNOTFOUND = "ResourceNotFound.LaunchConfigurationIdNotFound" func (c *Client) UpgradeLaunchConfigurationWithContext(ctx context.Context, request *UpgradeLaunchConfigurationRequest) (response *UpgradeLaunchConfigurationResponse, err error) { if request == nil { request = NewUpgradeLaunchConfigurationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UpgradeLaunchConfiguration require credential") + } + request.SetContext(ctx) response = NewUpgradeLaunchConfigurationResponse() @@ -3814,6 +4104,7 @@ func NewUpgradeLifecycleHookRequest() (request *UpgradeLifecycleHookRequest) { request = &UpgradeLifecycleHookRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("as", APIVersion, "UpgradeLifecycleHook") return @@ -3836,23 +4127,21 @@ func NewUpgradeLifecycleHookResponse() (response *UpgradeLifecycleHookResponse) // INTERNALERROR = "InternalError" // INTERNALERROR_CALLCMQERROR = "InternalError.CallCmqError" // INTERNALERROR_CALLSTSERROR = "InternalError.CallStsError" +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // INVALIDPARAMETERVALUE_LIFECYCLEHOOKNAMEDUPLICATED = "InvalidParameterValue.LifecycleHookNameDuplicated" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" // RESOURCEUNAVAILABLE_CMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.CmqTopicHasNoSubscriber" +// RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" func (c *Client) UpgradeLifecycleHook(request *UpgradeLifecycleHookRequest) (response *UpgradeLifecycleHookResponse, err error) { - if request == nil { - request = NewUpgradeLifecycleHookRequest() - } - - response = NewUpgradeLifecycleHookResponse() - err = c.Send(request, response) - return + return c.UpgradeLifecycleHookWithContext(context.Background(), request) } // UpgradeLifecycleHook @@ -3865,19 +4154,28 @@ func (c *Client) UpgradeLifecycleHook(request *UpgradeLifecycleHookRequest) (res // INTERNALERROR = "InternalError" // INTERNALERROR_CALLCMQERROR = "InternalError.CallCmqError" // INTERNALERROR_CALLSTSERROR = "InternalError.CallStsError" +// INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" // INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_FILTER = "InvalidParameterValue.Filter" // INVALIDPARAMETERVALUE_INVALIDLIFECYCLEHOOKID = "InvalidParameterValue.InvalidLifecycleHookId" // INVALIDPARAMETERVALUE_LIFECYCLEHOOKNAMEDUPLICATED = "InvalidParameterValue.LifecycleHookNameDuplicated" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" // RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" // RESOURCEUNAVAILABLE_CMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.CmqTopicHasNoSubscriber" +// RESOURCEUNAVAILABLE_TDMQCMQTOPICHASNOSUBSCRIBER = "ResourceUnavailable.TDMQCMQTopicHasNoSubscriber" func (c *Client) UpgradeLifecycleHookWithContext(ctx context.Context, request *UpgradeLifecycleHookRequest) (response *UpgradeLifecycleHookResponse, err error) { if request == nil { request = NewUpgradeLifecycleHookRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UpgradeLifecycleHook require credential") + } + request.SetContext(ctx) response = NewUpgradeLifecycleHookResponse() diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/errors.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/errors.go similarity index 85% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/errors.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/errors.go index 602d64be807f..172cce3d2b58 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/errors.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,6 +49,9 @@ const ( // STS 接口调用失败。 INTERNALERROR_CALLSTSERROR = "InternalError.CallStsError" + // TAT 接口调用失败。 + INTERNALERROR_CALLTATERROR = "InternalError.CallTATError" + // Tag 接口调用失败。 INTERNALERROR_CALLTAGERROR = "InternalError.CallTagError" @@ -76,6 +79,9 @@ const ( // 参数错误。 INVALIDPARAMETER = "InvalidParameter" + // 无效的Action请求。 + INVALIDPARAMETER_ACTIONNOTFOUND = "InvalidParameter.ActionNotFound" + // 参数冲突,指定的多个参数冲突,不能同时存在。 INVALIDPARAMETER_CONFLICT = "InvalidParameter.Conflict" @@ -94,6 +100,9 @@ const ( // 参数缺失,两种参数之中必须指定其中一个。 INVALIDPARAMETER_MUSTONEPARAMETER = "InvalidParameter.MustOneParameter" + // 该参数已废弃。 + INVALIDPARAMETER_PARAMETERDEPRECATED = "InvalidParameter.ParameterDeprecated" + // 部分参数存在互斥应该删掉。 INVALIDPARAMETER_PARAMETERMUSTBEDELETED = "InvalidParameter.ParameterMustBeDeleted" @@ -103,6 +112,9 @@ const ( // 参数取值错误。 INVALIDPARAMETERVALUE = "InvalidParameterValue" + // 当前账户不支持带宽包ID参数。 + INVALIDPARAMETERVALUE_ACCOUNTNOTSUPPORTBANDWIDTHPACKAGEID = "InvalidParameterValue.AccountNotSupportBandwidthPackageId" + // 指定的基础容量过大,需小于等于最大实例数。 INVALIDPARAMETERVALUE_BASECAPACITYTOOLARGE = "InvalidParameterValue.BaseCapacityTooLarge" @@ -142,6 +154,9 @@ const ( // 主机名不合法。 INVALIDPARAMETERVALUE_HOSTNAMEILLEGAL = "InvalidParameterValue.HostNameIllegal" + // 指定的IPv6公网带宽计费模式不合法。 + INVALIDPARAMETERVALUE_IPV6INTERNETCHARGETYPE = "InvalidParameterValue.IPv6InternetChargeType" + // 指定的镜像不存在。 INVALIDPARAMETERVALUE_IMAGENOTFOUND = "InvalidParameterValue.ImageNotFound" @@ -166,9 +181,15 @@ const ( // 为CLB指定的地域不合法。 INVALIDPARAMETERVALUE_INVALIDCLBREGION = "InvalidParameterValue.InvalidClbRegion" + // 指定的置放群组ID格式不正确。 + INVALIDPARAMETERVALUE_INVALIDDISASTERRECOVERGROUPID = "InvalidParameterValue.InvalidDisasterRecoverGroupId" + // 过滤条件无效。 INVALIDPARAMETERVALUE_INVALIDFILTER = "InvalidParameterValue.InvalidFilter" + // 高性能计算集群ID无效。 + INVALIDPARAMETERVALUE_INVALIDHPCCLUSTERID = "InvalidParameterValue.InvalidHpcClusterId" + // 镜像ID无效。 INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" @@ -190,15 +211,15 @@ const ( // 指定的通知组 ID 不是数值字符串格式。 INVALIDPARAMETERVALUE_INVALIDNOTIFICATIONUSERGROUPID = "InvalidParameterValue.InvalidNotificationUserGroupId" - // 指定的PAI域名类型不支持。 - INVALIDPARAMETERVALUE_INVALIDPAIDOMAINNAMETYPE = "InvalidParameterValue.InvalidPaiDomainNameType" - // 定时任务ID无效。 INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONID = "InvalidParameterValue.InvalidScheduledActionId" // 定时任务名称包含无效字符。 INVALIDPARAMETERVALUE_INVALIDSCHEDULEDACTIONNAMEINCLUDEILLEGALCHAR = "InvalidParameterValue.InvalidScheduledActionNameIncludeIllegalChar" + // 安全组ID无效。 + INVALIDPARAMETERVALUE_INVALIDSECURITYGROUPID = "InvalidParameterValue.InvalidSecurityGroupId" + // 快照ID无效。 INVALIDPARAMETERVALUE_INVALIDSNAPSHOTID = "InvalidParameterValue.InvalidSnapshotId" @@ -220,6 +241,12 @@ const ( // 取值超出限制。 INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" + // 不支持目标组类型的监听器。 + INVALIDPARAMETERVALUE_LISTENERTARGETTYPENOTSUPPORTED = "InvalidParameterValue.ListenerTargetTypeNotSupported" + + // 当前账户在带宽包模式中必须填写带宽包ID参数。 + INVALIDPARAMETERVALUE_MISSINGBANDWIDTHPACKAGEID = "InvalidParameterValue.MissingBandwidthPackageId" + // 无资源权限。 INVALIDPARAMETERVALUE_NORESOURCEPERMISSION = "InvalidParameterValue.NoResourcePermission" @@ -253,6 +280,9 @@ const ( // 负载均衡器四层监听器的后端端口重复。 INVALIDPARAMETERVALUE_TARGETPORTDUPLICATED = "InvalidParameterValue.TargetPortDuplicated" + // 不支持执行目标追踪策略。 + INVALIDPARAMETERVALUE_TARGETTRACKINGSCALINGPOLICY = "InvalidParameterValue.TargetTrackingScalingPolicy" + // 指定的阈值不在有效范围。 INVALIDPARAMETERVALUE_THRESHOLDOUTOFRANGE = "InvalidParameterValue.ThresholdOutOfRange" @@ -310,6 +340,9 @@ const ( // 定时任务数量超过限制。 LIMITEXCEEDED_SCHEDULEDACTIONLIMITEXCEEDED = "LimitExceeded.ScheduledActionLimitExceeded" + // 每个伸缩组限制创建一个目标追踪策略。 + LIMITEXCEEDED_TARGETTRACKINGSCALINGPOLICY = "LimitExceeded.TargetTrackingScalingPolicy" + // 缺少参数错误。 MISSINGPARAMETER = "MissingParameter" @@ -349,9 +382,18 @@ const ( // 通知不存在。 RESOURCENOTFOUND_AUTOSCALINGNOTIFICATIONNOTFOUND = "ResourceNotFound.AutoScalingNotificationNotFound" + // 指定的带宽包ID不存在。 + RESOURCENOTFOUND_BANDWIDTHPACKAGEIDNOTFOUND = "ResourceNotFound.BandwidthPackageIdNotFound" + // 指定的 CMQ queue 不存在。 RESOURCENOTFOUND_CMQQUEUENOTFOUND = "ResourceNotFound.CmqQueueNotFound" + // 命令不存在。 + RESOURCENOTFOUND_COMMANDNOTFOUND = "ResourceNotFound.CommandNotFound" + + // 指定的置放群组ID不存在。 + RESOURCENOTFOUND_DISASTERRECOVERGROUPNOTFOUND = "ResourceNotFound.DisasterRecoverGroupNotFound" + // 指定的实例不存在。 RESOURCENOTFOUND_INSTANCESNOTFOUND = "ResourceNotFound.InstancesNotFound" @@ -367,12 +409,18 @@ const ( // 无法找到指定生命周期挂钩。 RESOURCENOTFOUND_LIFECYCLEHOOKNOTFOUND = "ResourceNotFound.LifecycleHookNotFound" + // 指定的生命周期挂钩Token不存在。 + RESOURCENOTFOUND_LIFECYCLEHOOKTOKENNOTFOUND = "ResourceNotFound.LifecycleHookTokenNotFound" + // 指定的Listener不存在。 RESOURCENOTFOUND_LISTENERNOTFOUND = "ResourceNotFound.ListenerNotFound" // 找不到指定负载均衡器。 RESOURCENOTFOUND_LOADBALANCERNOTFOUND = "ResourceNotFound.LoadBalancerNotFound" + // 指定的负载均衡器在当前伸缩组中没有找到。 + RESOURCENOTFOUND_LOADBALANCERNOTINAUTOSCALINGGROUP = "ResourceNotFound.LoadBalancerNotInAutoScalingGroup" + // 指定的Location不存在。 RESOURCENOTFOUND_LOCATIONNOTFOUND = "ResourceNotFound.LocationNotFound" @@ -403,6 +451,12 @@ const ( // 实例和伸缩组Vpc不一致。 RESOURCEUNAVAILABLE_CVMVPCINCONSISTENT = "ResourceUnavailable.CvmVpcInconsistent" + // 绑定负载均衡器的伸缩组禁止修改Vpc。 + RESOURCEUNAVAILABLE_FORBIDDENMODIFYVPC = "ResourceUnavailable.ForbiddenModifyVpc" + + // 实例无法添加至伸缩组。 + RESOURCEUNAVAILABLE_INSTANCECANNOTATTACH = "ResourceUnavailable.InstanceCannotAttach" + // 指定的实例正在活动中。 RESOURCEUNAVAILABLE_INSTANCEINOPERATION = "ResourceUnavailable.InstanceInOperation" @@ -441,4 +495,10 @@ const ( // 指定的可用区不可用。 RESOURCEUNAVAILABLE_ZONEUNAVAILABLE = "ResourceUnavailable.ZoneUnavailable" + + // 未授权弹性伸缩预设服务角色AS_QCSRole,请前往弹性伸缩控制台进行授权。 + UNAUTHORIZEDOPERATION_AUTOSCALINGROLEUNAUTHORIZED = "UnauthorizedOperation.AutoScalingRoleUnauthorized" + + // 操作不支持。 + UNSUPPORTEDOPERATION = "UnsupportedOperation" ) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/models.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/models.go similarity index 56% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/models.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/models.go index b0cccbd2f9e3..6ca27dbfabdf 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419/models.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419/models.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,12 +19,11 @@ package v20180419 import ( "encoding/json" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" ) type Activity struct { - // 伸缩组ID。 AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` @@ -35,6 +34,7 @@ type Activity struct { //
  • SCALE_OUT:扩容活动
  • SCALE_IN:缩容活动
  • ATTACH_INSTANCES:添加实例
  • REMOVE_INSTANCES:销毁实例
  • DETACH_INSTANCES:移出实例
  • TERMINATE_INSTANCES_UNEXPECTEDLY:实例在CVM控制台被销毁
  • REPLACE_UNHEALTHY_INSTANCE:替换不健康实例 //
  • START_INSTANCES:开启实例 //
  • STOP_INSTANCES:关闭实例 + //
  • INVOKE_COMMAND:执行命令 ActivityType *string `json:"ActivityType,omitempty" name:"ActivityType"` // 伸缩活动状态。取值如下:
    @@ -64,7 +64,9 @@ type Activity struct { // 伸缩活动创建时间。 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - // 伸缩活动相关实例信息集合。 + // 该参数已废弃,请勿使用。 + // + // Deprecated: ActivityRelatedInstanceSet is deprecated. ActivityRelatedInstanceSet []*ActivtyRelatedInstance `json:"ActivityRelatedInstanceSet,omitempty" name:"ActivityRelatedInstanceSet"` // 伸缩活动状态简要描述。 @@ -75,10 +77,15 @@ type Activity struct { // 伸缩活动状态详细描述。 DetailedStatusMessageSet []*DetailedStatusMessage `json:"DetailedStatusMessageSet,omitempty" name:"DetailedStatusMessageSet"` + + // 执行命令结果。 + InvocationResultSet []*InvocationResult `json:"InvocationResultSet,omitempty" name:"InvocationResultSet"` + + // 伸缩活动相关实例信息集合。 + RelatedInstanceSet []*RelatedInstance `json:"RelatedInstanceSet,omitempty" name:"RelatedInstanceSet"` } type ActivtyRelatedInstance struct { - // 实例ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -91,7 +98,6 @@ type ActivtyRelatedInstance struct { } type Advice struct { - // 问题描述。 Problem *string `json:"Problem,omitempty" name:"Problem"` @@ -100,6 +106,20 @@ type Advice struct { // 建议解决方案。 Solution *string `json:"Solution,omitempty" name:"Solution"` + + // 伸缩建议警告级别。取值范围:
    + //
  • WARNING:警告级别
    + //
  • CRITICAL:严重级别
    + Level *string `json:"Level,omitempty" name:"Level"` +} + +// Predefined struct for user +type AttachInstancesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // CVM实例ID列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` } type AttachInstancesRequest struct { @@ -132,16 +152,18 @@ func (r *AttachInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AttachInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AttachInstancesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AttachInstancesResponse struct { + *tchttp.BaseResponse + Response *AttachInstancesResponseParams `json:"Response"` } func (r *AttachInstancesResponse) ToJsonString() string { @@ -155,6 +177,18 @@ func (r *AttachInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachLoadBalancersRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 传统型负载均衡器ID列表,每个伸缩组绑定传统型负载均衡器数量上限为20,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` + + // 应用型负载均衡器列表,每个伸缩组绑定应用型负载均衡器数量上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` +} + type AttachLoadBalancersRequest struct { *tchttp.BaseRequest @@ -164,7 +198,7 @@ type AttachLoadBalancersRequest struct { // 传统型负载均衡器ID列表,每个伸缩组绑定传统型负载均衡器数量上限为20,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` - // 应用型负载均衡器列表,每个伸缩组绑定应用型负载均衡器数量上限为50,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + // 应用型负载均衡器列表,每个伸缩组绑定应用型负载均衡器数量上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` } @@ -189,16 +223,18 @@ func (r *AttachLoadBalancersRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AttachLoadBalancersResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AttachLoadBalancersResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AttachLoadBalancersResponse struct { + *tchttp.BaseResponse + Response *AttachLoadBalancersResponseParams `json:"Response"` } func (r *AttachLoadBalancersResponse) ToJsonString() string { @@ -213,23 +249,37 @@ func (r *AttachLoadBalancersResponse) FromJsonString(s string) error { } type AutoScalingAdvice struct { - // 伸缩组ID。 AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + // 伸缩组警告级别。取值范围:
    + //
  • NORMAL:正常
    + //
  • WARNING:警告级别
    + //
  • CRITICAL:严重级别
    + Level *string `json:"Level,omitempty" name:"Level"` + // 伸缩组配置建议集合。 Advices []*Advice `json:"Advices,omitempty" name:"Advices"` } type AutoScalingGroup struct { - // 伸缩组ID AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` // 伸缩组名称 AutoScalingGroupName *string `json:"AutoScalingGroupName,omitempty" name:"AutoScalingGroupName"` - // 伸缩组当前状态。取值范围:
  • NORMAL:正常
  • CVM_ABNORMAL:启动配置异常
  • LB_ABNORMAL:负载均衡器异常
  • VPC_ABNORMAL:VPC网络异常
  • INSUFFICIENT_BALANCE:余额不足
  • LB_BACKEND_REGION_NOT_MATCH:CLB实例后端地域与AS服务所在地域不匹配
    + // 伸缩组当前状态。取值范围:
    + //
  • NORMAL:正常
    + //
  • CVM_ABNORMAL:启动配置异常
    + //
  • LB_ABNORMAL:负载均衡器异常
    + //
  • LB_LISTENER_ABNORMAL:负载均衡器监听器异常
    + //
  • LB_LOCATION_ABNORMAL:负载均衡器监听器转发配置异常
    + //
  • VPC_ABNORMAL:VPC网络异常
    + //
  • SUBNET_ABNORMAL:VPC子网异常
    + //
  • INSUFFICIENT_BALANCE:余额不足
    + //
  • LB_BACKEND_REGION_NOT_MATCH:CLB实例后端地域与AS服务所在地域不匹配
    + //
  • LB_BACKEND_VPC_NOT_MATCH:CLB实例VPC与伸缩组VPC不匹配 AutoScalingGroupStatus *string `json:"AutoScalingGroupStatus,omitempty" name:"AutoScalingGroupStatus"` // 创建时间,采用UTC标准计时 @@ -325,7 +375,6 @@ type AutoScalingGroup struct { } type AutoScalingGroupAbstract struct { - // 伸缩组ID。 AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` @@ -334,7 +383,6 @@ type AutoScalingGroupAbstract struct { } type AutoScalingNotification struct { - // 伸缩组ID。 AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` @@ -357,6 +405,28 @@ type AutoScalingNotification struct { TopicName *string `json:"TopicName,omitempty" name:"TopicName"` } +// Predefined struct for user +type ClearLaunchConfigurationAttributesRequestParams struct { + // 启动配置ID。 + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 是否清空数据盘信息,非必填,默认为 false。 + // 填 true 代表清空“数据盘”信息,清空后基于此新创建的云主机将不含有任何数据盘。 + ClearDataDisks *bool `json:"ClearDataDisks,omitempty" name:"ClearDataDisks"` + + // 是否清空云服务器主机名相关设置信息,非必填,默认为 false。 + // 填 true 代表清空主机名设置信息,清空后基于此新创建的云主机将不设置主机名。 + ClearHostNameSettings *bool `json:"ClearHostNameSettings,omitempty" name:"ClearHostNameSettings"` + + // 是否清空云服务器实例名相关设置信息,非必填,默认为 false。 + // 填 true 代表清空主机名设置信息,清空后基于此新创建的云主机将按照“as-{{ 伸缩组AutoScalingGroupName }}”进行设置。 + ClearInstanceNameSettings *bool `json:"ClearInstanceNameSettings,omitempty" name:"ClearInstanceNameSettings"` + + // 是否清空置放群组信息,非必填,默认为 false。 + // 填 true 代表清空置放群组信息,清空后基于此新创建的云主机将不指定任何置放群组。 + ClearDisasterRecoverGroupIds *bool `json:"ClearDisasterRecoverGroupIds,omitempty" name:"ClearDisasterRecoverGroupIds"` +} + type ClearLaunchConfigurationAttributesRequest struct { *tchttp.BaseRequest @@ -374,6 +444,10 @@ type ClearLaunchConfigurationAttributesRequest struct { // 是否清空云服务器实例名相关设置信息,非必填,默认为 false。 // 填 true 代表清空主机名设置信息,清空后基于此新创建的云主机将按照“as-{{ 伸缩组AutoScalingGroupName }}”进行设置。 ClearInstanceNameSettings *bool `json:"ClearInstanceNameSettings,omitempty" name:"ClearInstanceNameSettings"` + + // 是否清空置放群组信息,非必填,默认为 false。 + // 填 true 代表清空置放群组信息,清空后基于此新创建的云主机将不指定任何置放群组。 + ClearDisasterRecoverGroupIds *bool `json:"ClearDisasterRecoverGroupIds,omitempty" name:"ClearDisasterRecoverGroupIds"` } func (r *ClearLaunchConfigurationAttributesRequest) ToJsonString() string { @@ -392,19 +466,22 @@ func (r *ClearLaunchConfigurationAttributesRequest) FromJsonString(s string) err delete(f, "ClearDataDisks") delete(f, "ClearHostNameSettings") delete(f, "ClearInstanceNameSettings") + delete(f, "ClearDisasterRecoverGroupIds") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ClearLaunchConfigurationAttributesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ClearLaunchConfigurationAttributesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ClearLaunchConfigurationAttributesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ClearLaunchConfigurationAttributesResponseParams `json:"Response"` } func (r *ClearLaunchConfigurationAttributesResponse) ToJsonString() string { @@ -418,6 +495,21 @@ func (r *ClearLaunchConfigurationAttributesResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CompleteLifecycleActionRequestParams struct { + // 生命周期挂钩ID + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` + + // 生命周期动作的结果,取值范围为“CONTINUE”或“ABANDON” + LifecycleActionResult *string `json:"LifecycleActionResult,omitempty" name:"LifecycleActionResult"` + + // 实例ID,“InstanceId”和“LifecycleActionToken”必须填充其中一个 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // “InstanceId”和“LifecycleActionToken”必须填充其中一个 + LifecycleActionToken *string `json:"LifecycleActionToken,omitempty" name:"LifecycleActionToken"` +} + type CompleteLifecycleActionRequest struct { *tchttp.BaseRequest @@ -456,13 +548,15 @@ func (r *CompleteLifecycleActionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CompleteLifecycleActionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CompleteLifecycleActionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CompleteLifecycleActionResponseParams `json:"Response"` } func (r *CompleteLifecycleActionResponse) ToJsonString() string { @@ -476,6 +570,27 @@ func (r *CompleteLifecycleActionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateAutoScalingGroupFromInstanceRequestParams struct { + // 伸缩组名称,在您账号中必须唯一。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超55个字节。 + AutoScalingGroupName *string `json:"AutoScalingGroupName,omitempty" name:"AutoScalingGroupName"` + + // 实例ID + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 最小实例数,取值范围为0-2000。 + MinSize *int64 `json:"MinSize,omitempty" name:"MinSize"` + + // 最大实例数,取值范围为0-2000。 + MaxSize *int64 `json:"MaxSize,omitempty" name:"MaxSize"` + + // 期望实例数,大小介于最小实例数和最大实例数之间。 + DesiredCapacity *int64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 是否继承实例标签,默认值为False + InheritInstanceTag *bool `json:"InheritInstanceTag,omitempty" name:"InheritInstanceTag"` +} + type CreateAutoScalingGroupFromInstanceRequest struct { *tchttp.BaseRequest @@ -522,16 +637,18 @@ func (r *CreateAutoScalingGroupFromInstanceRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type CreateAutoScalingGroupFromInstanceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAutoScalingGroupFromInstanceResponseParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAutoScalingGroupFromInstanceResponse struct { + *tchttp.BaseResponse + Response *CreateAutoScalingGroupFromInstanceResponseParams `json:"Response"` } func (r *CreateAutoScalingGroupFromInstanceResponse) ToJsonString() string { @@ -545,6 +662,105 @@ func (r *CreateAutoScalingGroupFromInstanceResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateAutoScalingGroupRequestParams struct { + // 伸缩组名称,在您账号中必须唯一。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超55个字节。 + AutoScalingGroupName *string `json:"AutoScalingGroupName,omitempty" name:"AutoScalingGroupName"` + + // 启动配置ID + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 最大实例数,取值范围为0-2000。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` + + // 最小实例数,取值范围为0-2000。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // VPC ID,基础网络则填空字符串 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 默认冷却时间,单位秒,默认值为300 + DefaultCooldown *uint64 `json:"DefaultCooldown,omitempty" name:"DefaultCooldown"` + + // 期望实例数,大小介于最小实例数和最大实例数之间 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 传统负载均衡器ID列表,目前长度上限为20,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` + + // 伸缩组内实例所属项目ID。不填为默认项目。 + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 应用型负载均衡器列表,目前长度上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` + + // 子网ID列表,VPC场景下必须指定子网。多个子网以填写顺序为优先级,依次进行尝试,直至可以成功创建实例。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` + + // 销毁策略,目前长度上限为1。取值包括 OLDEST_INSTANCE 和 NEWEST_INSTANCE,默认取值为 OLDEST_INSTANCE。 + //
  • OLDEST_INSTANCE 优先销毁伸缩组中最旧的实例。 + //
  • NEWEST_INSTANCE,优先销毁伸缩组中最新的实例。 + TerminationPolicies []*string `json:"TerminationPolicies,omitempty" name:"TerminationPolicies"` + + // 可用区列表,基础网络场景下必须指定可用区。多个可用区以填写顺序为优先级,依次进行尝试,直至可以成功创建实例。 + Zones []*string `json:"Zones,omitempty" name:"Zones"` + + // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。部分成功的伸缩活动判定为一次失败活动。 + //
  • IMMEDIATE_RETRY,立即重试,在较短时间内快速重试,连续失败超过一定次数(5次)后不再重试。 + //
  • INCREMENTAL_INTERVALS,间隔递增重试,随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。 + //
  • NO_RETRY,不进行重试,直到再次收到用户调用或者告警信息后才会重试。 + RetryPolicy *string `json:"RetryPolicy,omitempty" name:"RetryPolicy"` + + // 可用区校验策略,取值包括 ALL 和 ANY,默认取值为ANY。 + //
  • ALL,所有可用区(Zone)或子网(SubnetId)都可用则通过校验,否则校验报错。 + //
  • ANY,存在任何一个可用区(Zone)或子网(SubnetId)可用则通过校验,否则校验报错。 + // + // 可用区或子网不可用的常见原因包括该可用区CVM实例类型售罄、该可用区CBS云盘售罄、该可用区配额不足、该子网IP不足等。 + // 如果 Zones/SubnetIds 中可用区或者子网不存在,则无论 ZonesCheckPolicy 采用何种取值,都会校验报错。 + ZonesCheckPolicy *string `json:"ZonesCheckPolicy,omitempty" name:"ZonesCheckPolicy"` + + // 标签描述列表。通过指定该参数可以支持绑定标签到伸缩组。同时绑定标签到相应的资源实例。每个伸缩组最多支持30个标签。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 服务设置,包括云监控不健康替换等服务设置。 + ServiceSettings *ServiceSettings `json:"ServiceSettings,omitempty" name:"ServiceSettings"` + + // 实例具有IPv6地址数量的配置,取值包括 0、1,默认值为0。 + Ipv6AddressCount *int64 `json:"Ipv6AddressCount,omitempty" name:"Ipv6AddressCount"` + + // 多可用区/子网策略,取值包括 PRIORITY 和 EQUALITY,默认为 PRIORITY。 + //
  • PRIORITY,按照可用区/子网列表的顺序,作为优先级来尝试创建实例,如果优先级最高的可用区/子网可以创建成功,则总在该可用区/子网创建。 + //
  • EQUALITY:扩容出的实例会打散到多个可用区/子网,保证扩容后的各个可用区/子网实例数相对均衡。 + // + // 与本策略相关的注意点: + //
  • 当伸缩组为基础网络时,本策略适用于多可用区;当伸缩组为VPC网络时,本策略适用于多子网,此时不再考虑可用区因素,例如四个子网ABCD,其中ABC处于可用区1,D处于可用区2,此时考虑子网ABCD进行排序,而不考虑可用区1、2。 + //
  • 本策略适用于多可用区/子网,不适用于启动配置的多机型。多机型按照优先级策略进行选择。 + //
  • 按照 PRIORITY 策略创建实例时,先保证多机型的策略,后保证多可用区/子网的策略。例如多机型A、B,多子网1、2、3,会按照A1、A2、A3、B1、B2、B3 进行尝试,如果A1售罄,会尝试A2(而非B1)。 + MultiZoneSubnetPolicy *string `json:"MultiZoneSubnetPolicy,omitempty" name:"MultiZoneSubnetPolicy"` + + // 伸缩组实例健康检查类型,取值如下:
  • CVM:根据实例网络状态判断实例是否处于不健康状态,不健康的网络状态即发生实例 PING 不可达事件,详细判断标准可参考[实例健康检查](https://cloud.tencent.com/document/product/377/8553)
  • CLB:根据 CLB 的健康检查状态判断实例是否处于不健康状态,CLB健康检查原理可参考[健康检查](https://cloud.tencent.com/document/product/214/6097)
    如果选择了`CLB`类型,伸缩组将同时检查实例网络状态与CLB健康检查状态,如果出现实例网络状态不健康,实例将被标记为 UNHEALTHY 状态;如果出现 CLB 健康检查状态异常,实例将被标记为CLB_UNHEALTHY 状态,如果两个异常状态同时出现,实例`HealthStatus`字段将返回 UNHEALTHY|CLB_UNHEALTHY。默认值:CLB + HealthCheckType *string `json:"HealthCheckType,omitempty" name:"HealthCheckType"` + + // CLB健康检查宽限期,当扩容的实例进入`IN_SERVICE`后,在宽限期时间范围内将不会被标记为不健康`CLB_UNHEALTHY`。
    默认值:0。取值范围[0, 7200],单位:秒。 + LoadBalancerHealthCheckGracePeriod *uint64 `json:"LoadBalancerHealthCheckGracePeriod,omitempty" name:"LoadBalancerHealthCheckGracePeriod"` + + // 实例分配策略,取值包括 LAUNCH_CONFIGURATION 和 SPOT_MIXED,默认取 LAUNCH_CONFIGURATION。 + //
  • LAUNCH_CONFIGURATION,代表传统的按照启动配置模式。 + //
  • SPOT_MIXED,代表竞价混合模式。目前仅支持启动配置为按量计费模式时使用混合模式,混合模式下,伸缩组将根据设定扩容按量或竞价机型。使用混合模式时,关联的启动配置的计费类型不可被修改。 + InstanceAllocationPolicy *string `json:"InstanceAllocationPolicy,omitempty" name:"InstanceAllocationPolicy"` + + // 竞价混合模式下,各计费类型实例的分配策略。 + // 仅当 InstanceAllocationPolicy 取 SPOT_MIXED 时可用。 + SpotMixedAllocationPolicy *SpotMixedAllocationPolicy `json:"SpotMixedAllocationPolicy,omitempty" name:"SpotMixedAllocationPolicy"` + + // 容量重平衡功能,仅对伸缩组内的竞价实例有效。取值范围: + //
  • TRUE,开启该功能,当伸缩组内的竞价实例即将被竞价实例服务自动回收前,AS 主动发起竞价实例销毁流程,如果有配置过缩容 hook,则销毁前 hook 会生效。销毁流程启动后,AS 会异步开启一个扩容活动,用于补齐期望实例数。 + //
  • FALSE,不开启该功能,则 AS 等待竞价实例被销毁后才会去扩容补齐伸缩组期望实例数。 + // + // 默认取 FALSE。 + CapacityRebalance *bool `json:"CapacityRebalance,omitempty" name:"CapacityRebalance"` +} + type CreateAutoScalingGroupRequest struct { *tchttp.BaseRequest @@ -575,7 +791,7 @@ type CreateAutoScalingGroupRequest struct { // 伸缩组内实例所属项目ID。不填为默认项目。 ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` - // 应用型负载均衡器列表,目前长度上限为50,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + // 应用型负载均衡器列表,目前长度上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` // 子网ID列表,VPC场景下必须指定子网。多个子网以填写顺序为优先级,依次进行尝试,直至可以成功创建实例。 @@ -589,7 +805,7 @@ type CreateAutoScalingGroupRequest struct { // 可用区列表,基础网络场景下必须指定可用区。多个可用区以填写顺序为优先级,依次进行尝试,直至可以成功创建实例。 Zones []*string `json:"Zones,omitempty" name:"Zones"` - // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。 + // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。部分成功的伸缩活动判定为一次失败活动。 //
  • IMMEDIATE_RETRY,立即重试,在较短时间内快速重试,连续失败超过一定次数(5次)后不再重试。 //
  • INCREMENTAL_INTERVALS,间隔递增重试,随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。 //
  • NO_RETRY,不进行重试,直到再次收到用户调用或者告警信息后才会重试。 @@ -687,16 +903,18 @@ func (r *CreateAutoScalingGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateAutoScalingGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAutoScalingGroupResponseParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAutoScalingGroupResponse struct { + *tchttp.BaseResponse + Response *CreateAutoScalingGroupResponseParams `json:"Response"` } func (r *CreateAutoScalingGroupResponse) ToJsonString() string { @@ -710,9 +928,8 @@ func (r *CreateAutoScalingGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateLaunchConfigurationRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type CreateLaunchConfigurationRequestParams struct { // 启动配置显示名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。 LaunchConfigurationName *string `json:"LaunchConfigurationName,omitempty" name:"LaunchConfigurationName"` @@ -761,6 +978,9 @@ type CreateLaunchConfigurationRequest struct { // `InstanceType`和`InstanceTypes`参数互斥,二者必填一个且只能填写一个。 InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` + // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + // 实例类型校验策略,取值包括 ALL 和 ANY,默认取值为ANY。 //
  • ALL,所有实例类型(InstanceType)都可用则通过校验,否则校验报错。 //
  • ANY,存在任何一个实例类型(InstanceType)可用则通过校验,否则校验报错。 @@ -772,8 +992,8 @@ type CreateLaunchConfigurationRequest struct { // 标签列表。通过指定该参数,可以为扩容的实例绑定标签。最多支持指定10个标签。 InstanceTags []*InstanceTag `json:"InstanceTags,omitempty" name:"InstanceTags"` - // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 - CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + // 标签描述列表。通过指定该参数可以支持绑定标签到启动配置。每个启动配置最多支持30个标签。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` // 云服务器主机名(HostName)的相关设置。 HostNameSettings *HostNameSettings `json:"HostNameSettings,omitempty" name:"HostNameSettings"` @@ -789,57 +1009,167 @@ type CreateLaunchConfigurationRequest struct { //
  • ORIGINAL:使用设置的云盘类型 //
  • AUTOMATIC:自动选择当前可用的云盘类型 DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` -} -func (r *CreateLaunchConfigurationRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} + // 高性能计算集群ID。
    + // 注意:此字段默认为空。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateLaunchConfigurationRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "LaunchConfigurationName") - delete(f, "ImageId") - delete(f, "ProjectId") - delete(f, "InstanceType") - delete(f, "SystemDisk") - delete(f, "DataDisks") - delete(f, "InternetAccessible") - delete(f, "LoginSettings") - delete(f, "SecurityGroupIds") - delete(f, "EnhancedService") - delete(f, "UserData") - delete(f, "InstanceChargeType") - delete(f, "InstanceMarketOptions") - delete(f, "InstanceTypes") - delete(f, "InstanceTypesCheckPolicy") - delete(f, "InstanceTags") - delete(f, "CamRoleName") - delete(f, "HostNameSettings") - delete(f, "InstanceNameSettings") - delete(f, "InstanceChargePrepaid") - delete(f, "DiskTypePolicy") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateLaunchConfigurationRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` } -type CreateLaunchConfigurationResponse struct { - *tchttp.BaseResponse - Response *struct { +type CreateLaunchConfigurationRequest struct { + *tchttp.BaseRequest + + // 启动配置显示名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。 + LaunchConfigurationName *string `json:"LaunchConfigurationName,omitempty" name:"LaunchConfigurationName"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-8toqc6s3`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 启动配置所属项目ID。不填为默认项目。 + // 注意:伸缩组内实例所属项目ID取伸缩组项目ID,与这里取值无关。 + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可通过调用接口 [DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749) 来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。 + // `InstanceType`和`InstanceTypes`参数互斥,二者必填一个且只能填写一个。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘,最多支持指定11块数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` - // 当通过本接口来创建启动配置时会返回该参数,表示启动配置ID。 - LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的`SecurityGroupId`字段来获取。若不指定该参数,则默认不绑定安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 经过 Base64 编码后的自定义数据,最大长度不超过16KB。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 实例计费类型,CVM默认值按照POSTPAID_BY_HOUR处理。 + //
  • POSTPAID_BY_HOUR:按小时后付费 + //
  • SPOTPAID:竞价付费 + //
  • PREPAID:预付费,即包年包月 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费则该参数必传。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 实例机型列表,不同实例机型指定了不同的资源规格,最多支持10种实例机型。 + // `InstanceType`和`InstanceTypes`参数互斥,二者必填一个且只能填写一个。 + InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` + + // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 实例类型校验策略,取值包括 ALL 和 ANY,默认取值为ANY。 + //
  • ALL,所有实例类型(InstanceType)都可用则通过校验,否则校验报错。 + //
  • ANY,存在任何一个实例类型(InstanceType)可用则通过校验,否则校验报错。 + // + // 实例类型不可用的常见原因包括该实例类型售罄、对应云盘售罄等。 + // 如果 InstanceTypes 中一款机型不存在或者已下线,则无论 InstanceTypesCheckPolicy 采用何种取值,都会校验报错。 + InstanceTypesCheckPolicy *string `json:"InstanceTypesCheckPolicy,omitempty" name:"InstanceTypesCheckPolicy"` + + // 标签列表。通过指定该参数,可以为扩容的实例绑定标签。最多支持指定10个标签。 + InstanceTags []*InstanceTag `json:"InstanceTags,omitempty" name:"InstanceTags"` + + // 标签描述列表。通过指定该参数可以支持绑定标签到启动配置。每个启动配置最多支持30个标签。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 云服务器主机名(HostName)的相关设置。 + HostNameSettings *HostNameSettings `json:"HostNameSettings,omitempty" name:"HostNameSettings"` + + // 云服务器实例名(InstanceName)的相关设置。 + // 如果用户在启动配置中设置此字段,则伸缩组创建出的实例 InstanceName 参照此字段进行设置,并传递给 CVM;如果用户未在启动配置中设置此字段,则伸缩组创建出的实例 InstanceName 按照“as-{{ 伸缩组AutoScalingGroupName }}”进行设置,并传递给 CVM。 + InstanceNameSettings *InstanceNameSettings `json:"InstanceNameSettings,omitempty" name:"InstanceNameSettings"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 云盘类型选择策略,默认取值 ORIGINAL,取值范围: + //
  • ORIGINAL:使用设置的云盘类型 + //
  • AUTOMATIC:自动选择当前可用的云盘类型 + DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` + + // 高性能计算集群ID。
    + // 注意:此字段默认为空。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` +} + +func (r *CreateLaunchConfigurationRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateLaunchConfigurationRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "LaunchConfigurationName") + delete(f, "ImageId") + delete(f, "ProjectId") + delete(f, "InstanceType") + delete(f, "SystemDisk") + delete(f, "DataDisks") + delete(f, "InternetAccessible") + delete(f, "LoginSettings") + delete(f, "SecurityGroupIds") + delete(f, "EnhancedService") + delete(f, "UserData") + delete(f, "InstanceChargeType") + delete(f, "InstanceMarketOptions") + delete(f, "InstanceTypes") + delete(f, "CamRoleName") + delete(f, "InstanceTypesCheckPolicy") + delete(f, "InstanceTags") + delete(f, "Tags") + delete(f, "HostNameSettings") + delete(f, "InstanceNameSettings") + delete(f, "InstanceChargePrepaid") + delete(f, "DiskTypePolicy") + delete(f, "HpcClusterId") + delete(f, "IPv6InternetAccessible") + delete(f, "DisasterRecoverGroupIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateLaunchConfigurationRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateLaunchConfigurationResponseParams struct { + // 当通过本接口来创建启动配置时会返回该参数,表示启动配置ID。 + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateLaunchConfigurationResponse struct { + *tchttp.BaseResponse + Response *CreateLaunchConfigurationResponseParams `json:"Response"` } func (r *CreateLaunchConfigurationResponse) ToJsonString() string { @@ -853,6 +1183,36 @@ func (r *CreateLaunchConfigurationResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateLifecycleHookRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 生命周期挂钩名称。名称仅支持中文、英文、数字、下划线(_)、短横线(-)、小数点(.),最大长度不能超128个字节。 + LifecycleHookName *string `json:"LifecycleHookName,omitempty" name:"LifecycleHookName"` + + // 进行生命周期挂钩的场景,取值范围包括 INSTANCE_LAUNCHING 和 INSTANCE_TERMINATING + LifecycleTransition *string `json:"LifecycleTransition,omitempty" name:"LifecycleTransition"` + + // 定义伸缩组在生命周期挂钩超时的情况下应采取的操作,取值范围是 CONTINUE 或 ABANDON,默认值为 CONTINUE + DefaultResult *string `json:"DefaultResult,omitempty" name:"DefaultResult"` + + // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从30到7200秒,默认值为300秒 + HeartbeatTimeout *int64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` + + // 弹性伸缩向通知目标发送的附加信息,配置通知时使用,默认值为空字符串""。最大长度不能超过1024个字节。 + NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` + + // 通知目标。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` + + // 进行生命周期挂钩的场景类型,取值范围包括NORMAL 和 EXTENSION。说明:设置为EXTENSION值,在AttachInstances、DetachInstances、RemoveInstaces接口时会触发生命周期挂钩操作,值为NORMAL则不会在这些接口中触发生命周期挂钩。 + LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 远程命令执行对象。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` +} + type CreateLifecycleHookRequest struct { *tchttp.BaseRequest @@ -871,14 +1231,17 @@ type CreateLifecycleHookRequest struct { // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从30到7200秒,默认值为300秒 HeartbeatTimeout *int64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` - // 弹性伸缩向通知目标发送的附加信息,默认值为空字符串""。最大长度不能超过1024个字节。 + // 弹性伸缩向通知目标发送的附加信息,配置通知时使用,默认值为空字符串""。最大长度不能超过1024个字节。 NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` - // 通知目标 + // 通知目标。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` // 进行生命周期挂钩的场景类型,取值范围包括NORMAL 和 EXTENSION。说明:设置为EXTENSION值,在AttachInstances、DetachInstances、RemoveInstaces接口时会触发生命周期挂钩操作,值为NORMAL则不会在这些接口中触发生命周期挂钩。 LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 远程命令执行对象。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` } func (r *CreateLifecycleHookRequest) ToJsonString() string { @@ -901,22 +1264,25 @@ func (r *CreateLifecycleHookRequest) FromJsonString(s string) error { delete(f, "NotificationMetadata") delete(f, "NotificationTarget") delete(f, "LifecycleTransitionType") + delete(f, "LifecycleCommand") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateLifecycleHookRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateLifecycleHookResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateLifecycleHookResponseParams struct { + // 生命周期挂钩ID + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` - // 生命周期挂钩ID - LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateLifecycleHookResponse struct { + *tchttp.BaseResponse + Response *CreateLifecycleHookResponseParams `json:"Response"` } func (r *CreateLifecycleHookResponse) ToJsonString() string { @@ -930,6 +1296,40 @@ func (r *CreateLifecycleHookResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNotificationConfigurationRequestParams struct { + // 伸缩组ID。 + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 通知类型,即为需要订阅的通知类型集合,取值范围如下: + //
  • SCALE_OUT_SUCCESSFUL:扩容成功
  • + //
  • SCALE_OUT_FAILED:扩容失败
  • + //
  • SCALE_IN_SUCCESSFUL:缩容成功
  • + //
  • SCALE_IN_FAILED:缩容失败
  • + //
  • REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL:替换不健康子机成功
  • + //
  • REPLACE_UNHEALTHY_INSTANCE_FAILED:替换不健康子机失败
  • + NotificationTypes []*string `json:"NotificationTypes,omitempty" name:"NotificationTypes"` + + // 通知组ID,即为用户组ID集合,用户组ID可以通过[ListGroups](https://cloud.tencent.com/document/product/598/34589)查询。 + NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` + + // 通知接收端类型,取值如下 + //
  • USER_GROUP:用户组 + //
  • CMQ_QUEUE:CMQ 队列 + //
  • CMQ_TOPIC:CMQ 主题 + //
  • TDMQ_CMQ_TOPIC:TDMQ CMQ 主题 + //
  • TDMQ_CMQ_QUEUE:TDMQ CMQ 队列 + // + // 默认值为:`USER_GROUP`。 + TargetType *string `json:"TargetType,omitempty" name:"TargetType"` + + // CMQ 队列名称,如 TargetType 取值为 `CMQ_QUEUE` 或 `TDMQ_CMQ_QUEUE` 时,该字段必填。 + QueueName *string `json:"QueueName,omitempty" name:"QueueName"` + + // CMQ 主题名称,如 TargetType 取值为 `CMQ_TOPIC` 或 `TDMQ_CMQ_TOPIC` 时,该字段必填。 + TopicName *string `json:"TopicName,omitempty" name:"TopicName"` +} + type CreateNotificationConfigurationRequest struct { *tchttp.BaseRequest @@ -989,16 +1389,18 @@ func (r *CreateNotificationConfigurationRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type CreateNotificationConfigurationResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateNotificationConfigurationResponseParams struct { + // 通知ID。 + AutoScalingNotificationId *string `json:"AutoScalingNotificationId,omitempty" name:"AutoScalingNotificationId"` - // 通知ID。 - AutoScalingNotificationId *string `json:"AutoScalingNotificationId,omitempty" name:"AutoScalingNotificationId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateNotificationConfigurationResponse struct { + *tchttp.BaseResponse + Response *CreateNotificationConfigurationResponseParams `json:"Response"` } func (r *CreateNotificationConfigurationResponse) ToJsonString() string { @@ -1012,6 +1414,46 @@ func (r *CreateNotificationConfigurationResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateScalingPolicyRequestParams struct { + // 伸缩组ID。 + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 告警触发策略名称。 + ScalingPolicyName *string `json:"ScalingPolicyName,omitempty" name:"ScalingPolicyName"` + + // 告警触发策略类型,默认类型为SIMPLE。取值范围:
  • SIMPLE:简单策略
  • TARGET_TRACKING:目标追踪策略
  • + ScalingPolicyType *string `json:"ScalingPolicyType,omitempty" name:"ScalingPolicyType"` + + // 告警触发后,期望实例数修改方式,仅适用于简单策略。取值范围:
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • + AdjustmentType *string `json:"AdjustmentType,omitempty" name:"AdjustmentType"` + + // 告警触发后,期望实例数的调整值,仅适用于简单策略。
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 + AdjustmentValue *int64 `json:"AdjustmentValue,omitempty" name:"AdjustmentValue"` + + // 冷却时间,单位为秒,仅适用于简单策略。默认冷却时间300秒。 + Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` + + // 告警监控指标,仅适用于简单策略。 + MetricAlarm *MetricAlarm `json:"MetricAlarm,omitempty" name:"MetricAlarm"` + + // 预定义监控项,仅适用于目标追踪策略。取值范围:
  • ASG_AVG_CPU_UTILIZATION:平均CPU使用率
  • ASG_AVG_LAN_TRAFFIC_OUT:平均内网出带宽
  • ASG_AVG_LAN_TRAFFIC_IN:平均内网入带宽
  • ASG_AVG_WAN_TRAFFIC_OUT:平均外网出带宽
  • ASG_AVG_WAN_TRAFFIC_IN:平均外网出带宽
  • + PredefinedMetricType *string `json:"PredefinedMetricType,omitempty" name:"PredefinedMetricType"` + + // 目标值,仅适用于目标追踪策略。
  • ASG_AVG_CPU_UTILIZATION:[1, 100),单位:%
  • ASG_AVG_LAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_LAN_TRAFFIC_IN:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_IN:>0,单位:Mbps
  • + TargetValue *uint64 `json:"TargetValue,omitempty" name:"TargetValue"` + + // 实例预热时间,单位为秒,仅适用于目标追踪策略。取值范围为0-3600,默认预热时间300秒。 + EstimatedInstanceWarmup *uint64 `json:"EstimatedInstanceWarmup,omitempty" name:"EstimatedInstanceWarmup"` + + // 是否禁用缩容,仅适用于目标追踪策略,默认值为 false。取值范围:
  • true:目标追踪策略仅触发扩容
  • false:目标追踪策略触发扩容和缩容
  • + DisableScaleIn *bool `json:"DisableScaleIn,omitempty" name:"DisableScaleIn"` + + // 此参数已不再生效,请使用[创建通知](https://cloud.tencent.com/document/api/377/33185)。 + // 通知组ID,即为用户组ID集合。 + NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` +} + type CreateScalingPolicyRequest struct { *tchttp.BaseRequest @@ -1021,19 +1463,35 @@ type CreateScalingPolicyRequest struct { // 告警触发策略名称。 ScalingPolicyName *string `json:"ScalingPolicyName,omitempty" name:"ScalingPolicyName"` - // 告警触发后,期望实例数修改方式。取值 :
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • + // 告警触发策略类型,默认类型为SIMPLE。取值范围:
  • SIMPLE:简单策略
  • TARGET_TRACKING:目标追踪策略
  • + ScalingPolicyType *string `json:"ScalingPolicyType,omitempty" name:"ScalingPolicyType"` + + // 告警触发后,期望实例数修改方式,仅适用于简单策略。取值范围:
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • AdjustmentType *string `json:"AdjustmentType,omitempty" name:"AdjustmentType"` - // 告警触发后,期望实例数的调整值。取值:
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 + // 告警触发后,期望实例数的调整值,仅适用于简单策略。
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 AdjustmentValue *int64 `json:"AdjustmentValue,omitempty" name:"AdjustmentValue"` - // 告警监控指标。 + // 冷却时间,单位为秒,仅适用于简单策略。默认冷却时间300秒。 + Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` + + // 告警监控指标,仅适用于简单策略。 MetricAlarm *MetricAlarm `json:"MetricAlarm,omitempty" name:"MetricAlarm"` - // 冷却时间,单位为秒。默认冷却时间300秒。 - Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` + // 预定义监控项,仅适用于目标追踪策略。取值范围:
  • ASG_AVG_CPU_UTILIZATION:平均CPU使用率
  • ASG_AVG_LAN_TRAFFIC_OUT:平均内网出带宽
  • ASG_AVG_LAN_TRAFFIC_IN:平均内网入带宽
  • ASG_AVG_WAN_TRAFFIC_OUT:平均外网出带宽
  • ASG_AVG_WAN_TRAFFIC_IN:平均外网出带宽
  • + PredefinedMetricType *string `json:"PredefinedMetricType,omitempty" name:"PredefinedMetricType"` - // 通知组ID,即为用户组ID集合,用户组ID可以通过[ListGroups](https://cloud.tencent.com/document/product/598/34589)查询。 + // 目标值,仅适用于目标追踪策略。
  • ASG_AVG_CPU_UTILIZATION:[1, 100),单位:%
  • ASG_AVG_LAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_LAN_TRAFFIC_IN:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_IN:>0,单位:Mbps
  • + TargetValue *uint64 `json:"TargetValue,omitempty" name:"TargetValue"` + + // 实例预热时间,单位为秒,仅适用于目标追踪策略。取值范围为0-3600,默认预热时间300秒。 + EstimatedInstanceWarmup *uint64 `json:"EstimatedInstanceWarmup,omitempty" name:"EstimatedInstanceWarmup"` + + // 是否禁用缩容,仅适用于目标追踪策略,默认值为 false。取值范围:
  • true:目标追踪策略仅触发扩容
  • false:目标追踪策略触发扩容和缩容
  • + DisableScaleIn *bool `json:"DisableScaleIn,omitempty" name:"DisableScaleIn"` + + // 此参数已不再生效,请使用[创建通知](https://cloud.tencent.com/document/api/377/33185)。 + // 通知组ID,即为用户组ID集合。 NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` } @@ -1051,10 +1509,15 @@ func (r *CreateScalingPolicyRequest) FromJsonString(s string) error { } delete(f, "AutoScalingGroupId") delete(f, "ScalingPolicyName") + delete(f, "ScalingPolicyType") delete(f, "AdjustmentType") delete(f, "AdjustmentValue") - delete(f, "MetricAlarm") delete(f, "Cooldown") + delete(f, "MetricAlarm") + delete(f, "PredefinedMetricType") + delete(f, "TargetValue") + delete(f, "EstimatedInstanceWarmup") + delete(f, "DisableScaleIn") delete(f, "NotificationUserGroupIds") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateScalingPolicyRequest has unknown keys!", "") @@ -1062,16 +1525,18 @@ func (r *CreateScalingPolicyRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateScalingPolicyResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateScalingPolicyResponseParams struct { + // 告警触发策略ID。 + AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` - // 告警触发策略ID。 - AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateScalingPolicyResponse struct { + *tchttp.BaseResponse + Response *CreateScalingPolicyResponseParams `json:"Response"` } func (r *CreateScalingPolicyResponse) ToJsonString() string { @@ -1085,6 +1550,33 @@ func (r *CreateScalingPolicyResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateScheduledActionRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 定时任务名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。同一伸缩组下必须唯一。 + ScheduledActionName *string `json:"ScheduledActionName,omitempty" name:"ScheduledActionName"` + + // 当定时任务触发时,设置的伸缩组最大实例数。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` + + // 当定时任务触发时,设置的伸缩组最小实例数。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // 当定时任务触发时,设置的伸缩组期望实例数。 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 定时任务的首次触发时间,取值为`北京时间`(UTC+8),按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ss+08:00`。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 定时任务的结束时间,取值为`北京时间`(UTC+8),按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ss+08:00`。

    此参数与`Recurrence`需要同时指定,到达结束时间之后,定时任务将不再生效。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 定时任务的重复方式。为标准 Cron 格式

    此参数与`EndTime`需要同时指定。 + Recurrence *string `json:"Recurrence,omitempty" name:"Recurrence"` +} + type CreateScheduledActionRequest struct { *tchttp.BaseRequest @@ -1139,16 +1631,18 @@ func (r *CreateScheduledActionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateScheduledActionResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateScheduledActionResponseParams struct { + // 定时任务ID + ScheduledActionId *string `json:"ScheduledActionId,omitempty" name:"ScheduledActionId"` - // 定时任务ID - ScheduledActionId *string `json:"ScheduledActionId,omitempty" name:"ScheduledActionId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateScheduledActionResponse struct { + *tchttp.BaseResponse + Response *CreateScheduledActionResponseParams `json:"Response"` } func (r *CreateScheduledActionResponse) ToJsonString() string { @@ -1163,8 +1657,7 @@ func (r *CreateScheduledActionResponse) FromJsonString(s string) error { } type DataDisk struct { - - // 数据盘类型。数据盘类型限制详见[云硬盘类型](https://cloud.tencent.com/document/product/362/2353)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘

    默认取值与系统盘类型(SystemDisk.DiskType)保持一致。 + // 数据盘类型。数据盘类型限制详见[云硬盘类型](https://cloud.tencent.com/document/product/362/2353)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_HSSD:增强型SSD云硬盘
  • CLOUD_TSSD:极速型SSD云硬盘

    默认取值与系统盘类型(SystemDisk.DiskType)保持一致。 // 注意:此字段可能返回 null,表示取不到有效值。 DiskType *string `json:"DiskType,omitempty" name:"DiskType"` @@ -1175,6 +1668,25 @@ type DataDisk struct { // 数据盘快照 ID,类似 `snap-l8psqwnt`。 // 注意:此字段可能返回 null,表示取不到有效值。 SnapshotId *string `json:"SnapshotId,omitempty" name:"SnapshotId"` + + // 数据盘是否随子机销毁。取值范围:
  • TRUE:子机销毁时,销毁数据盘,只支持按小时后付费云盘
  • FALSE:子机销毁时,保留数据盘 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeleteWithInstance *bool `json:"DeleteWithInstance,omitempty" name:"DeleteWithInstance"` + + // 数据盘是否加密。取值范围:
  • TRUE:加密
  • FALSE:不加密 + // 注意:此字段可能返回 null,表示取不到有效值。 + Encrypt *bool `json:"Encrypt,omitempty" name:"Encrypt"` + + // 云硬盘性能,单位:MB/s。使用此参数可给云硬盘购买额外的性能,功能介绍和类型限制详见:[增强型 SSD 云硬盘额外性能说明](https://cloud.tencent.com/document/product/362/51896#.E5.A2.9E.E5.BC.BA.E5.9E.8B-ssd-.E4.BA.91.E7.A1.AC.E7.9B.98.E9.A2.9D.E5.A4.96.E6.80.A7.E8.83.BD)。 + // 当前仅支持极速型云盘(CLOUD_TSSD)和增强型SSD云硬盘(CLOUD_HSSD)且 需容量 > 460GB。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ThroughputPerformance *uint64 `json:"ThroughputPerformance,omitempty" name:"ThroughputPerformance"` +} + +// Predefined struct for user +type DeleteAutoScalingGroupRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` } type DeleteAutoScalingGroupRequest struct { @@ -1203,13 +1715,15 @@ func (r *DeleteAutoScalingGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAutoScalingGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteAutoScalingGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteAutoScalingGroupResponseParams `json:"Response"` } func (r *DeleteAutoScalingGroupResponse) ToJsonString() string { @@ -1223,6 +1737,12 @@ func (r *DeleteAutoScalingGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchConfigurationRequestParams struct { + // 需要删除的启动配置ID。 + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` +} + type DeleteLaunchConfigurationRequest struct { *tchttp.BaseRequest @@ -1249,13 +1769,15 @@ func (r *DeleteLaunchConfigurationRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchConfigurationResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteLaunchConfigurationResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteLaunchConfigurationResponseParams `json:"Response"` } func (r *DeleteLaunchConfigurationResponse) ToJsonString() string { @@ -1269,6 +1791,12 @@ func (r *DeleteLaunchConfigurationResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLifecycleHookRequestParams struct { + // 生命周期挂钩ID + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` +} + type DeleteLifecycleHookRequest struct { *tchttp.BaseRequest @@ -1295,13 +1823,15 @@ func (r *DeleteLifecycleHookRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLifecycleHookResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteLifecycleHookResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteLifecycleHookResponseParams `json:"Response"` } func (r *DeleteLifecycleHookResponse) ToJsonString() string { @@ -1315,6 +1845,12 @@ func (r *DeleteLifecycleHookResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNotificationConfigurationRequestParams struct { + // 待删除的通知ID。 + AutoScalingNotificationId *string `json:"AutoScalingNotificationId,omitempty" name:"AutoScalingNotificationId"` +} + type DeleteNotificationConfigurationRequest struct { *tchttp.BaseRequest @@ -1341,13 +1877,15 @@ func (r *DeleteNotificationConfigurationRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNotificationConfigurationResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNotificationConfigurationResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNotificationConfigurationResponseParams `json:"Response"` } func (r *DeleteNotificationConfigurationResponse) ToJsonString() string { @@ -1361,6 +1899,12 @@ func (r *DeleteNotificationConfigurationResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteScalingPolicyRequestParams struct { + // 待删除的告警策略ID。 + AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` +} + type DeleteScalingPolicyRequest struct { *tchttp.BaseRequest @@ -1387,13 +1931,15 @@ func (r *DeleteScalingPolicyRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteScalingPolicyResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteScalingPolicyResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteScalingPolicyResponseParams `json:"Response"` } func (r *DeleteScalingPolicyResponse) ToJsonString() string { @@ -1407,6 +1953,12 @@ func (r *DeleteScalingPolicyResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteScheduledActionRequestParams struct { + // 待删除的定时任务ID。 + ScheduledActionId *string `json:"ScheduledActionId,omitempty" name:"ScheduledActionId"` +} + type DeleteScheduledActionRequest struct { *tchttp.BaseRequest @@ -1433,13 +1985,15 @@ func (r *DeleteScheduledActionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteScheduledActionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteScheduledActionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteScheduledActionResponseParams `json:"Response"` } func (r *DeleteScheduledActionResponse) ToJsonString() string { @@ -1453,6 +2007,10 @@ func (r *DeleteScheduledActionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAccountLimitsRequestParams struct { +} + type DescribeAccountLimitsRequest struct { *tchttp.BaseRequest } @@ -1469,31 +2027,34 @@ func (r *DescribeAccountLimitsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeAccountLimitsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeAccountLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAccountLimitsResponseParams struct { + // 用户账户被允许创建的启动配置最大数量 + MaxNumberOfLaunchConfigurations *int64 `json:"MaxNumberOfLaunchConfigurations,omitempty" name:"MaxNumberOfLaunchConfigurations"` - // 用户账户被允许创建的启动配置最大数量 - MaxNumberOfLaunchConfigurations *int64 `json:"MaxNumberOfLaunchConfigurations,omitempty" name:"MaxNumberOfLaunchConfigurations"` + // 用户账户启动配置的当前数量 + NumberOfLaunchConfigurations *int64 `json:"NumberOfLaunchConfigurations,omitempty" name:"NumberOfLaunchConfigurations"` - // 用户账户启动配置的当前数量 - NumberOfLaunchConfigurations *int64 `json:"NumberOfLaunchConfigurations,omitempty" name:"NumberOfLaunchConfigurations"` + // 用户账户被允许创建的伸缩组最大数量 + MaxNumberOfAutoScalingGroups *int64 `json:"MaxNumberOfAutoScalingGroups,omitempty" name:"MaxNumberOfAutoScalingGroups"` - // 用户账户被允许创建的伸缩组最大数量 - MaxNumberOfAutoScalingGroups *int64 `json:"MaxNumberOfAutoScalingGroups,omitempty" name:"MaxNumberOfAutoScalingGroups"` + // 用户账户伸缩组的当前数量 + NumberOfAutoScalingGroups *int64 `json:"NumberOfAutoScalingGroups,omitempty" name:"NumberOfAutoScalingGroups"` - // 用户账户伸缩组的当前数量 - NumberOfAutoScalingGroups *int64 `json:"NumberOfAutoScalingGroups,omitempty" name:"NumberOfAutoScalingGroups"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAccountLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeAccountLimitsResponseParams `json:"Response"` } func (r *DescribeAccountLimitsResponse) ToJsonString() string { @@ -1507,6 +2068,32 @@ func (r *DescribeAccountLimitsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAutoScalingActivitiesRequestParams struct { + // 按照一个或者多个伸缩活动ID查询。伸缩活动ID形如:`asa-5l2ejpfo`。每次请求的上限为100。参数不支持同时指定`ActivityIds`和`Filters`。 + ActivityIds []*string `json:"ActivityIds,omitempty" name:"ActivityIds"` + + // 过滤条件。 + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + //
  • activity-status-code - String - 是否必填:否 -(过滤条件)按照伸缩活动状态过滤。(INIT:初始化中|RUNNING:运行中|SUCCESSFUL:活动成功|PARTIALLY_SUCCESSFUL:活动部分成功|FAILED:活动失败|CANCELLED:活动取消)
  • + //
  • activity-type - String - 是否必填:否 -(过滤条件)按照伸缩活动类型过滤。(SCALE_OUT:扩容活动|SCALE_IN:缩容活动|ATTACH_INSTANCES:添加实例|REMOVE_INSTANCES:销毁实例|DETACH_INSTANCES:移出实例|TERMINATE_INSTANCES_UNEXPECTEDLY:实例在CVM控制台被销毁|REPLACE_UNHEALTHY_INSTANCE:替换不健康实例|UPDATE_LOAD_BALANCERS:更新负载均衡器)
  • + //
  • activity-id - String - 是否必填:否 -(过滤条件)按照伸缩活动ID过滤。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`ActivityIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 伸缩活动最早的开始时间,如果指定了ActivityIds,此参数将被忽略。取值为`UTC`时间,按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ssZ`。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 伸缩活动最晚的结束时间,如果指定了ActivityIds,此参数将被忽略。取值为`UTC`时间,按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ssZ`。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + type DescribeAutoScalingActivitiesRequest struct { *tchttp.BaseRequest @@ -1558,19 +2145,21 @@ func (r *DescribeAutoScalingActivitiesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAutoScalingActivitiesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAutoScalingActivitiesResponseParams struct { + // 符合条件的伸缩活动数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的伸缩活动数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 符合条件的伸缩活动信息集合。 + ActivitySet []*Activity `json:"ActivitySet,omitempty" name:"ActivitySet"` - // 符合条件的伸缩活动信息集合。 - ActivitySet []*Activity `json:"ActivitySet,omitempty" name:"ActivitySet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAutoScalingActivitiesResponse struct { + *tchttp.BaseResponse + Response *DescribeAutoScalingActivitiesResponseParams `json:"Response"` } func (r *DescribeAutoScalingActivitiesResponse) ToJsonString() string { @@ -1584,6 +2173,12 @@ func (r *DescribeAutoScalingActivitiesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAutoScalingAdvicesRequestParams struct { + // 待查询的伸缩组列表,上限100。 + AutoScalingGroupIds []*string `json:"AutoScalingGroupIds,omitempty" name:"AutoScalingGroupIds"` +} + type DescribeAutoScalingAdvicesRequest struct { *tchttp.BaseRequest @@ -1610,16 +2205,18 @@ func (r *DescribeAutoScalingAdvicesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAutoScalingAdvicesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAutoScalingAdvicesResponseParams struct { + // 伸缩组配置建议集合。 + AutoScalingAdviceSet []*AutoScalingAdvice `json:"AutoScalingAdviceSet,omitempty" name:"AutoScalingAdviceSet"` - // 伸缩组配置建议集合。 - AutoScalingAdviceSet []*AutoScalingAdvice `json:"AutoScalingAdviceSet,omitempty" name:"AutoScalingAdviceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAutoScalingAdvicesResponse struct { + *tchttp.BaseResponse + Response *DescribeAutoScalingAdvicesResponseParams `json:"Response"` } func (r *DescribeAutoScalingAdvicesResponse) ToJsonString() string { @@ -1633,6 +2230,12 @@ func (r *DescribeAutoScalingAdvicesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAutoScalingGroupLastActivitiesRequestParams struct { + // 伸缩组ID列表 + AutoScalingGroupIds []*string `json:"AutoScalingGroupIds,omitempty" name:"AutoScalingGroupIds"` +} + type DescribeAutoScalingGroupLastActivitiesRequest struct { *tchttp.BaseRequest @@ -1659,16 +2262,18 @@ func (r *DescribeAutoScalingGroupLastActivitiesRequest) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } -type DescribeAutoScalingGroupLastActivitiesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAutoScalingGroupLastActivitiesResponseParams struct { + // 符合条件的伸缩活动信息集合。说明:伸缩组伸缩活动不存在的则不返回,如传50个伸缩组ID,返回45条数据,说明其中有5个伸缩组伸缩活动不存在。 + ActivitySet []*Activity `json:"ActivitySet,omitempty" name:"ActivitySet"` - // 符合条件的伸缩活动信息集合。说明:伸缩组伸缩活动不存在的则不返回,如传50个伸缩组ID,返回45条数据,说明其中有5个伸缩组伸缩活动不存在。 - ActivitySet []*Activity `json:"ActivitySet,omitempty" name:"ActivitySet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAutoScalingGroupLastActivitiesResponse struct { + *tchttp.BaseResponse + Response *DescribeAutoScalingGroupLastActivitiesResponseParams `json:"Response"` } func (r *DescribeAutoScalingGroupLastActivitiesResponse) ToJsonString() string { @@ -1682,6 +2287,29 @@ func (r *DescribeAutoScalingGroupLastActivitiesResponse) FromJsonString(s string return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAutoScalingGroupsRequestParams struct { + // 按照一个或者多个伸缩组ID查询。伸缩组ID形如:`asg-nkdwoui0`。每次请求的上限为100。参数不支持同时指定`AutoScalingGroupIds`和`Filters`。 + AutoScalingGroupIds []*string `json:"AutoScalingGroupIds,omitempty" name:"AutoScalingGroupIds"` + + // 过滤条件。 + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + //
  • auto-scaling-group-name - String - 是否必填:否 -(过滤条件)按照伸缩组名称过滤。
  • + //
  • vague-auto-scaling-group-name - String - 是否必填:否 -(过滤条件)按照伸缩组名称模糊搜索。
  • + //
  • launch-configuration-id - String - 是否必填:否 -(过滤条件)按照启动配置ID过滤。
  • + //
  • tag-key - String - 是否必填:否 -(过滤条件)按照标签键进行过滤。
  • + //
  • tag-value - String - 是否必填:否 -(过滤条件)按照标签值进行过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 -(过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AutoScalingGroupIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` +} + type DescribeAutoScalingGroupsRequest struct { *tchttp.BaseRequest @@ -1728,19 +2356,21 @@ func (r *DescribeAutoScalingGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAutoScalingGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAutoScalingGroupsResponseParams struct { + // 伸缩组详细信息列表。 + AutoScalingGroupSet []*AutoScalingGroup `json:"AutoScalingGroupSet,omitempty" name:"AutoScalingGroupSet"` - // 伸缩组详细信息列表。 - AutoScalingGroupSet []*AutoScalingGroup `json:"AutoScalingGroupSet,omitempty" name:"AutoScalingGroupSet"` + // 符合条件的伸缩组数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的伸缩组数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAutoScalingGroupsResponse struct { + *tchttp.BaseResponse + Response *DescribeAutoScalingGroupsResponseParams `json:"Response"` } func (r *DescribeAutoScalingGroupsResponse) ToJsonString() string { @@ -1754,10 +2384,28 @@ func (r *DescribeAutoScalingGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAutoScalingInstancesRequestParams struct { + // 待查询云服务器(CVM)的实例ID。每次请求的上限为100。参数不支持同时指定InstanceIds和Filters。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 过滤条件。 + //
  • instance-id - String - 是否必填:否 -(过滤条件)按照实例ID过滤。
  • + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`InstanceIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeAutoScalingInstancesRequest struct { *tchttp.BaseRequest - // 待查询云服务器(CVM)的实例ID。参数不支持同时指定InstanceIds和Filters。 + // 待查询云服务器(CVM)的实例ID。每次请求的上限为100。参数不支持同时指定InstanceIds和Filters。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` // 过滤条件。 @@ -1769,7 +2417,7 @@ type DescribeAutoScalingInstancesRequest struct { // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 Offset *int64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量,默认为20,最大值为2000。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 Limit *int64 `json:"Limit,omitempty" name:"Limit"` } @@ -1795,19 +2443,21 @@ func (r *DescribeAutoScalingInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAutoScalingInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAutoScalingInstancesResponseParams struct { + // 实例详细信息列表。 + AutoScalingInstanceSet []*Instance `json:"AutoScalingInstanceSet,omitempty" name:"AutoScalingInstanceSet"` - // 实例详细信息列表。 - AutoScalingInstanceSet []*Instance `json:"AutoScalingInstanceSet,omitempty" name:"AutoScalingInstanceSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAutoScalingInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeAutoScalingInstancesResponseParams `json:"Response"` } func (r *DescribeAutoScalingInstancesResponse) ToJsonString() string { @@ -1821,6 +2471,29 @@ func (r *DescribeAutoScalingInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeLaunchConfigurationsRequestParams struct { + // 按照一个或者多个启动配置ID查询。启动配置ID形如:`asc-ouy1ax38`。每次请求的上限为100。参数不支持同时指定`LaunchConfigurationIds`和`Filters` + LaunchConfigurationIds []*string `json:"LaunchConfigurationIds,omitempty" name:"LaunchConfigurationIds"` + + // 过滤条件。 + //
  • launch-configuration-id - String - 是否必填:否 -(过滤条件)按照启动配置ID过滤。
  • + //
  • launch-configuration-name - String - 是否必填:否 -(过滤条件)按照启动配置名称过滤。
  • + //
  • vague-launch-configuration-name - String - 是否必填:否 -(过滤条件)按照启动配置名称模糊搜索。
  • + //
  • tag-key - String - 是否必填:否 -(过滤条件)按照标签键进行过滤。
  • + //
  • tag-value - String - 是否必填:否 -(过滤条件)按照标签值进行过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 -(过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例3 + //
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`LaunchConfigurationIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` +} + type DescribeLaunchConfigurationsRequest struct { *tchttp.BaseRequest @@ -1831,6 +2504,10 @@ type DescribeLaunchConfigurationsRequest struct { //
  • launch-configuration-id - String - 是否必填:否 -(过滤条件)按照启动配置ID过滤。
  • //
  • launch-configuration-name - String - 是否必填:否 -(过滤条件)按照启动配置名称过滤。
  • //
  • vague-launch-configuration-name - String - 是否必填:否 -(过滤条件)按照启动配置名称模糊搜索。
  • + //
  • tag-key - String - 是否必填:否 -(过滤条件)按照标签键进行过滤。
  • + //
  • tag-value - String - 是否必填:否 -(过滤条件)按照标签值进行过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 -(过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例3 + //
  • // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`LaunchConfigurationIds`和`Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` @@ -1863,19 +2540,21 @@ func (r *DescribeLaunchConfigurationsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeLaunchConfigurationsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeLaunchConfigurationsResponseParams struct { + // 符合条件的启动配置数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的启动配置数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 启动配置详细信息列表。 + LaunchConfigurationSet []*LaunchConfiguration `json:"LaunchConfigurationSet,omitempty" name:"LaunchConfigurationSet"` - // 启动配置详细信息列表。 - LaunchConfigurationSet []*LaunchConfiguration `json:"LaunchConfigurationSet,omitempty" name:"LaunchConfigurationSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeLaunchConfigurationsResponse struct { + *tchttp.BaseResponse + Response *DescribeLaunchConfigurationsResponseParams `json:"Response"` } func (r *DescribeLaunchConfigurationsResponse) ToJsonString() string { @@ -1889,6 +2568,25 @@ func (r *DescribeLaunchConfigurationsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeLifecycleHooksRequestParams struct { + // 按照一个或者多个生命周期挂钩ID查询。生命周期挂钩ID形如:`ash-8azjzxcl`。每次请求的上限为100。参数不支持同时指定`LifecycleHookIds`和`Filters`。 + LifecycleHookIds []*string `json:"LifecycleHookIds,omitempty" name:"LifecycleHookIds"` + + // 过滤条件。 + //
  • lifecycle-hook-id - String - 是否必填:否 -(过滤条件)按照生命周期挂钩ID过滤。
  • + //
  • lifecycle-hook-name - String - 是否必填:否 -(过滤条件)按照生命周期挂钩名称过滤。
  • + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`LifecycleHookIds `和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` +} + type DescribeLifecycleHooksRequest struct { *tchttp.BaseRequest @@ -1931,19 +2629,21 @@ func (r *DescribeLifecycleHooksRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeLifecycleHooksResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeLifecycleHooksResponseParams struct { + // 生命周期挂钩数组 + LifecycleHookSet []*LifecycleHook `json:"LifecycleHookSet,omitempty" name:"LifecycleHookSet"` - // 生命周期挂钩数组 - LifecycleHookSet []*LifecycleHook `json:"LifecycleHookSet,omitempty" name:"LifecycleHookSet"` + // 总体数量 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 总体数量 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeLifecycleHooksResponse struct { + *tchttp.BaseResponse + Response *DescribeLifecycleHooksResponseParams `json:"Response"` } func (r *DescribeLifecycleHooksResponse) ToJsonString() string { @@ -1957,6 +2657,24 @@ func (r *DescribeLifecycleHooksResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNotificationConfigurationsRequestParams struct { + // 按照一个或者多个通知ID查询。实例ID形如:asn-2sestqbr。每次请求的实例的上限为100。参数不支持同时指定`AutoScalingNotificationIds`和`Filters`。 + AutoScalingNotificationIds []*string `json:"AutoScalingNotificationIds,omitempty" name:"AutoScalingNotificationIds"` + + // 过滤条件。 + //
  • auto-scaling-notification-id - String - 是否必填:否 -(过滤条件)按照通知ID过滤。
  • + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AutoScalingNotificationIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` +} + type DescribeNotificationConfigurationsRequest struct { *tchttp.BaseRequest @@ -1998,19 +2716,21 @@ func (r *DescribeNotificationConfigurationsRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type DescribeNotificationConfigurationsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNotificationConfigurationsResponseParams struct { + // 符合条件的通知数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的通知数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 弹性伸缩事件通知详细信息列表。 + AutoScalingNotificationSet []*AutoScalingNotification `json:"AutoScalingNotificationSet,omitempty" name:"AutoScalingNotificationSet"` - // 弹性伸缩事件通知详细信息列表。 - AutoScalingNotificationSet []*AutoScalingNotification `json:"AutoScalingNotificationSet,omitempty" name:"AutoScalingNotificationSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNotificationConfigurationsResponse struct { + *tchttp.BaseResponse + Response *DescribeNotificationConfigurationsResponseParams `json:"Response"` } func (r *DescribeNotificationConfigurationsResponse) ToJsonString() string { @@ -2024,70 +2744,26 @@ func (r *DescribeNotificationConfigurationsResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } -type DescribePaiInstancesRequest struct { - *tchttp.BaseRequest - - // 依据PAI实例的实例ID进行查询。 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +// Predefined struct for user +type DescribeScalingPoliciesRequestParams struct { + // 按照一个或者多个告警策略ID查询。告警策略ID形如:asp-i9vkg894。每次请求的实例的上限为100。参数不支持同时指定`AutoScalingPolicyIds`和`Filters`。 + AutoScalingPolicyIds []*string `json:"AutoScalingPolicyIds,omitempty" name:"AutoScalingPolicyIds"` // 过滤条件。 + //
  • auto-scaling-policy-id - String - 是否必填:否 -(过滤条件)按照告警策略ID过滤。
  • + //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • + //
  • scaling-policy-name - String - 是否必填:否 -(过滤条件)按照告警策略名称过滤。
  • + //
  • scaling-policy-type - String - 是否必填:否 -(过滤条件)按照告警策略类型过滤,取值范围为SIMPLE,TARGET_TRACKING。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AutoScalingPolicyIds`和`Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 返回数量,默认为20,最大值为100。 + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 偏移量,默认为0。 + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` } -func (r *DescribePaiInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePaiInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceIds") - delete(f, "Filters") - delete(f, "Limit") - delete(f, "Offset") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePaiInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePaiInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 符合条件的PAI实例数量 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // PAI实例详细信息 - PaiInstanceSet []*PaiInstance `json:"PaiInstanceSet,omitempty" name:"PaiInstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePaiInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePaiInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - type DescribeScalingPoliciesRequest struct { *tchttp.BaseRequest @@ -2098,6 +2774,7 @@ type DescribeScalingPoliciesRequest struct { //
  • auto-scaling-policy-id - String - 是否必填:否 -(过滤条件)按照告警策略ID过滤。
  • //
  • auto-scaling-group-id - String - 是否必填:否 -(过滤条件)按照伸缩组ID过滤。
  • //
  • scaling-policy-name - String - 是否必填:否 -(过滤条件)按照告警策略名称过滤。
  • + //
  • scaling-policy-type - String - 是否必填:否 -(过滤条件)按照告警策略类型过滤,取值范围为SIMPLE,TARGET_TRACKING。
  • // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AutoScalingPolicyIds`和`Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` @@ -2130,19 +2807,21 @@ func (r *DescribeScalingPoliciesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeScalingPoliciesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeScalingPoliciesResponseParams struct { + // 弹性伸缩告警触发策略详细信息列表。 + ScalingPolicySet []*ScalingPolicy `json:"ScalingPolicySet,omitempty" name:"ScalingPolicySet"` - // 弹性伸缩告警触发策略详细信息列表。 - ScalingPolicySet []*ScalingPolicy `json:"ScalingPolicySet,omitempty" name:"ScalingPolicySet"` + // 符合条件的通知数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的通知数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeScalingPoliciesResponse struct { + *tchttp.BaseResponse + Response *DescribeScalingPoliciesResponseParams `json:"Response"` } func (r *DescribeScalingPoliciesResponse) ToJsonString() string { @@ -2156,6 +2835,24 @@ func (r *DescribeScalingPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeScheduledActionsRequestParams struct { + // 按照一个或者多个定时任务ID查询。实例ID形如:asst-am691zxo。每次请求的实例的上限为100。参数不支持同时指定ScheduledActionIds和Filters。 + ScheduledActionIds []*string `json:"ScheduledActionIds,omitempty" name:"ScheduledActionIds"` + + // 过滤条件。 + //
  • scheduled-action-id - String - 是否必填:否 -(过滤条件)按照定时任务ID过滤。
  • + //
  • scheduled-action-name - String - 是否必填:否 - (过滤条件) 按照定时任务名称过滤。
  • + //
  • auto-scaling-group-id - String - 是否必填:否 - (过滤条件) 按照伸缩组ID过滤。
  • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeScheduledActionsRequest struct { *tchttp.BaseRequest @@ -2197,19 +2894,21 @@ func (r *DescribeScheduledActionsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeScheduledActionsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeScheduledActionsResponseParams struct { + // 符合条件的定时任务数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的定时任务数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 定时任务详细信息列表。 + ScheduledActionSet []*ScheduledAction `json:"ScheduledActionSet,omitempty" name:"ScheduledActionSet"` - // 定时任务详细信息列表。 - ScheduledActionSet []*ScheduledAction `json:"ScheduledActionSet,omitempty" name:"ScheduledActionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeScheduledActionsResponse struct { + *tchttp.BaseResponse + Response *DescribeScheduledActionsResponseParams `json:"Response"` } func (r *DescribeScheduledActionsResponse) ToJsonString() string { @@ -2223,6 +2922,15 @@ func (r *DescribeScheduledActionsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachInstancesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // CVM实例ID列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type DetachInstancesRequest struct { *tchttp.BaseRequest @@ -2253,16 +2961,18 @@ func (r *DetachInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DetachInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DetachInstancesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DetachInstancesResponse struct { + *tchttp.BaseResponse + Response *DetachInstancesResponseParams `json:"Response"` } func (r *DetachInstancesResponse) ToJsonString() string { @@ -2276,6 +2986,18 @@ func (r *DetachInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachLoadBalancersRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 传统负载均衡器ID列表,列表长度上限为20,LoadBalancerIds 和 ForwardLoadBalancerIdentifications 二者同时最多只能指定一个 + LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` + + // 应用型负载均衡器标识信息列表,列表长度上限为100,LoadBalancerIds 和 ForwardLoadBalancerIdentifications二者同时最多只能指定一个 + ForwardLoadBalancerIdentifications []*ForwardLoadBalancerIdentification `json:"ForwardLoadBalancerIdentifications,omitempty" name:"ForwardLoadBalancerIdentifications"` +} + type DetachLoadBalancersRequest struct { *tchttp.BaseRequest @@ -2285,7 +3007,7 @@ type DetachLoadBalancersRequest struct { // 传统负载均衡器ID列表,列表长度上限为20,LoadBalancerIds 和 ForwardLoadBalancerIdentifications 二者同时最多只能指定一个 LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` - // 应用型负载均衡器标识信息列表,列表长度上限为50,LoadBalancerIds 和 ForwardLoadBalancerIdentifications二者同时最多只能指定一个 + // 应用型负载均衡器标识信息列表,列表长度上限为100,LoadBalancerIds 和 ForwardLoadBalancerIdentifications二者同时最多只能指定一个 ForwardLoadBalancerIdentifications []*ForwardLoadBalancerIdentification `json:"ForwardLoadBalancerIdentifications,omitempty" name:"ForwardLoadBalancerIdentifications"` } @@ -2310,16 +3032,18 @@ func (r *DetachLoadBalancersRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DetachLoadBalancersResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DetachLoadBalancersResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DetachLoadBalancersResponse struct { + *tchttp.BaseResponse + Response *DetachLoadBalancersResponseParams `json:"Response"` } func (r *DetachLoadBalancersResponse) ToJsonString() string { @@ -2334,7 +3058,6 @@ func (r *DetachLoadBalancersResponse) FromJsonString(s string) error { } type DetailedStatusMessage struct { - // 错误类型。 Code *string `json:"Code,omitempty" name:"Code"` @@ -2357,6 +3080,12 @@ type DetailedStatusMessage struct { InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` } +// Predefined struct for user +type DisableAutoScalingGroupRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` +} + type DisableAutoScalingGroupRequest struct { *tchttp.BaseRequest @@ -2383,13 +3112,15 @@ func (r *DisableAutoScalingGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableAutoScalingGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisableAutoScalingGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisableAutoScalingGroupResponseParams `json:"Response"` } func (r *DisableAutoScalingGroupResponse) ToJsonString() string { @@ -2403,6 +3134,12 @@ func (r *DisableAutoScalingGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableAutoScalingGroupRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` +} + type EnableAutoScalingGroupRequest struct { *tchttp.BaseRequest @@ -2429,13 +3166,15 @@ func (r *EnableAutoScalingGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableAutoScalingGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type EnableAutoScalingGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *EnableAutoScalingGroupResponseParams `json:"Response"` } func (r *EnableAutoScalingGroupResponse) ToJsonString() string { @@ -2450,18 +3189,37 @@ func (r *EnableAutoScalingGroupResponse) FromJsonString(s string) error { } type EnhancedService struct { - // 开启云安全服务。若不指定该参数,则默认开启云安全服务。 SecurityService *RunSecurityServiceEnabled `json:"SecurityService,omitempty" name:"SecurityService"` // 开启云监控服务。若不指定该参数,则默认开启云监控服务。 MonitorService *RunMonitorServiceEnabled `json:"MonitorService,omitempty" name:"MonitorService"` + + // 该参数已废弃,查询时会返回空值,请勿使用。 + // + // Deprecated: AutomationService is deprecated. + AutomationService []*RunAutomationServiceEnabled `json:"AutomationService,omitempty" name:"AutomationService"` + + // 开启自动化助手服务。若不指定该参数,则默认逻辑与CVM保持一致。注意:此字段可能返回 null,表示取不到有效值。 + AutomationToolsService *RunAutomationServiceEnabled `json:"AutomationToolsService,omitempty" name:"AutomationToolsService"` +} + +// Predefined struct for user +type ExecuteScalingPolicyRequestParams struct { + // 告警伸缩策略ID,不支持目标追踪策略。 + AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` + + // 是否检查伸缩组活动处于冷却时间内,默认值为false + HonorCooldown *bool `json:"HonorCooldown,omitempty" name:"HonorCooldown"` + + // 执行伸缩策略的触发来源,取值包括 API 和 CLOUD_MONITOR,默认值为 API。CLOUD_MONITOR 专门供云监控触发调用。 + TriggerSource *string `json:"TriggerSource,omitempty" name:"TriggerSource"` } type ExecuteScalingPolicyRequest struct { *tchttp.BaseRequest - // 告警伸缩策略ID + // 告警伸缩策略ID,不支持目标追踪策略。 AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` // 是否检查伸缩组活动处于冷却时间内,默认值为false @@ -2492,16 +3250,18 @@ func (r *ExecuteScalingPolicyRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ExecuteScalingPolicyResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ExecuteScalingPolicyResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ExecuteScalingPolicyResponse struct { + *tchttp.BaseResponse + Response *ExecuteScalingPolicyResponseParams `json:"Response"` } func (r *ExecuteScalingPolicyResponse) ToJsonString() string { @@ -2516,7 +3276,6 @@ func (r *ExecuteScalingPolicyResponse) FromJsonString(s string) error { } type Filter struct { - // 需要过滤的字段。 Name *string `json:"Name,omitempty" name:"Name"` @@ -2525,7 +3284,6 @@ type Filter struct { } type ForwardLoadBalancer struct { - // 负载均衡器ID LoadBalancerId *string `json:"LoadBalancerId,omitempty" name:"LoadBalancerId"` @@ -2543,7 +3301,6 @@ type ForwardLoadBalancer struct { } type ForwardLoadBalancerIdentification struct { - // 负载均衡器ID LoadBalancerId *string `json:"LoadBalancerId,omitempty" name:"LoadBalancerId"` @@ -2555,7 +3312,6 @@ type ForwardLoadBalancerIdentification struct { } type HostNameSettings struct { - // 云服务器的主机名。 //
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。 //
  • 不支持 Windows 实例。 @@ -2570,8 +3326,23 @@ type HostNameSettings struct { HostNameStyle *string `json:"HostNameStyle,omitempty" name:"HostNameStyle"` } -type Instance struct { +type IPv6InternetAccessible struct { + // 网络计费模式。取值包括TRAFFIC_POSTPAID_BY_HOUR、BANDWIDTH_PACKAGE,默认取值为TRAFFIC_POSTPAID_BY_HOUR。查看当前账户类型可参考[账户类型说明](https://cloud.tencent.com/document/product/1199/49090#judge)。 + //
  • IPv6对标准账户类型支持TRAFFIC_POSTPAID_BY_HOUR。 + //
  • IPv6对传统账户类型支持BANDWIDTH_PACKAGE。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + // 公网出带宽上限,单位:Mbps。
    默认值:0,此时不为IPv6分配公网带宽。不同机型、可用区、计费模式的带宽上限范围不一致,具体限制详见[公网带宽上限](https://cloud.tencent.com/document/product/213/12523)。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 带宽包ID。可通过[DescribeBandwidthPackages](https://cloud.tencent.com/document/api/215/19209)接口返回值中的`BandwidthPackageId`获取。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` +} + +type Instance struct { // 实例ID InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -2591,13 +3362,19 @@ type Instance struct { //
  • TERMINATING:中止中 //
  • TERMINATION_FAILED:中止失败 //
  • ATTACHING:绑定中 + //
  • ATTACH_FAILED:绑定失败 //
  • DETACHING:解绑中 - //
  • ATTACHING_LB:绑定LB中
  • DETACHING_LB:解绑LB中 + //
  • DETACH_FAILED:解绑失败 + //
  • ATTACHING_LB:绑定LB中 + //
  • DETACHING_LB:解绑LB中 + //
  • MODIFYING_LB:修改LB中 //
  • STARTING:开机中 //
  • START_FAILED:开机失败 //
  • STOPPING:关机中 //
  • STOP_FAILED:关机失败 //
  • STOPPED:已关机 + //
  • IN_LAUNCHING_HOOK:扩容生命周期挂钩中 + //
  • IN_TERMINATING_HOOK:缩容生命周期挂钩中 LifeCycleState *string `json:"LifeCycleState,omitempty" name:"LifeCycleState"` // 健康状态,取值包括HEALTHY和UNHEALTHY @@ -2623,10 +3400,20 @@ type Instance struct { // 伸缩组名称 AutoScalingGroupName *string `json:"AutoScalingGroupName,omitempty" name:"AutoScalingGroupName"` + + // 预热状态,取值如下: + //
  • WAITING_ENTER_WARMUP:等待进入预热 + //
  • NO_NEED_WARMUP:无需预热 + //
  • IN_WARMUP:预热中 + //
  • AFTER_WARMUP:完成预热 + WarmupStatus *string `json:"WarmupStatus,omitempty" name:"WarmupStatus"` + + // 置放群组id,仅支持指定一个。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` } type InstanceChargePrepaid struct { - // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36。 Period *int64 `json:"Period,omitempty" name:"Period"` @@ -2635,7 +3422,6 @@ type InstanceChargePrepaid struct { } type InstanceMarketOptionsRequest struct { - // 竞价相关选项 SpotOptions *SpotMarketOptions `json:"SpotOptions,omitempty" name:"SpotOptions"` @@ -2645,7 +3431,6 @@ type InstanceMarketOptionsRequest struct { } type InstanceNameSettings struct { - // 云服务器的实例名。 // // 点号(.)和短横线(-)不能作为 InstanceName 的首尾字符,不能连续使用。 @@ -2661,7 +3446,6 @@ type InstanceNameSettings struct { } type InstanceTag struct { - // 标签键 Key *string `json:"Key,omitempty" name:"Key"` @@ -2670,7 +3454,6 @@ type InstanceTag struct { } type InternetAccessible struct { - // 网络计费类型。取值范围:
  • BANDWIDTH_PREPAID:预付费按带宽结算
  • TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
  • BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
  • BANDWIDTH_PACKAGE:带宽包用户
    默认取值:TRAFFIC_POSTPAID_BY_HOUR。 // 注意:此字段可能返回 null,表示取不到有效值。 InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` @@ -2688,8 +3471,33 @@ type InternetAccessible struct { BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` } -type LaunchConfiguration struct { +type InvocationResult struct { + // 实例ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 执行活动ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InvocationId *string `json:"InvocationId,omitempty" name:"InvocationId"` + + // 执行任务ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InvocationTaskId *string `json:"InvocationTaskId,omitempty" name:"InvocationTaskId"` + + // 命令ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CommandId *string `json:"CommandId,omitempty" name:"CommandId"` + + // 执行任务状态。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TaskStatus *string `json:"TaskStatus,omitempty" name:"TaskStatus"` + + // 执行异常信息。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ErrorMessage *string `json:"ErrorMessage,omitempty" name:"ErrorMessage"` +} +type LaunchConfiguration struct { // 实例所属项目ID。 ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` @@ -2748,9 +3556,13 @@ type LaunchConfiguration struct { // 实例机型列表。 InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` - // 标签列表。 + // 实例标签列表。扩容出来的实例会自动带上标签,最多支持10个标签。 InstanceTags []*InstanceTag `json:"InstanceTags,omitempty" name:"InstanceTags"` + // 标签列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + // 版本号。 VersionNumber *int64 `json:"VersionNumber,omitempty" name:"VersionNumber"` @@ -2776,28 +3588,66 @@ type LaunchConfiguration struct { //
  • ORIGINAL:使用设置的云盘类型 //
  • AUTOMATIC:自动选择当前可用区下可用的云盘类型 DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` + + // 高性能计算集群ID。
    + // 注意:此字段默认为空。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // IPv6公网带宽相关信息设置。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` } type LifecycleActionResultInfo struct { - // 生命周期挂钩标识。 LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` // 实例标识。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - // 通知的结果,表示通知CMQ是否成功。 + // 执行活动ID。可通过TAT的[查询执行活动](https://cloud.tencent.com/document/api/1340/52679)API查询具体的执行结果。 + InvocationId *string `json:"InvocationId,omitempty" name:"InvocationId"` + + // 命令调用的结果,表示执行TAT命令是否成功。
    + //
  • SUCCESSFUL 命令调用成功,不代表命令执行成功,执行的具体情况可根据InvocationId进行查询
  • + //
  • FAILED 命令调用失败
  • + //
  • NONE
  • + InvokeCommandResult *string `json:"InvokeCommandResult,omitempty" name:"InvokeCommandResult"` + + // 通知的结果,表示通知CMQ/TDMQ是否成功。
    + //
  • SUCCESSFUL 通知成功
  • + //
  • FAILED 通知失败
  • + //
  • NONE
  • NotificationResult *string `json:"NotificationResult,omitempty" name:"NotificationResult"` // 生命周期挂钩动作的执行结果,取值包括 CONTINUE、ABANDON。 LifecycleActionResult *string `json:"LifecycleActionResult,omitempty" name:"LifecycleActionResult"` - // 结果的原因。 + // 结果的原因。
    + //
  • HEARTBEAT_TIMEOUT 由于心跳超时,结果根据DefaultResult设置。
  • + //
  • NOTIFICATION_FAILURE 由于发送通知失败,结果根据DefaultResult设置。
  • + //
  • CALL_INTERFACE 调用了接口CompleteLifecycleAction设置结果。
  • + //
  • ANOTHER_ACTION_ABANDON 另一个生命周期操作的结果已设置为“ABANDON”。
  • + //
  • COMMAND_CALL_FAILURE 由于命令调用失败,结果根据DefaultResult设置。
  • + //
  • COMMAND_EXEC_FINISH 命令执行完成。
  • + //
  • COMMAND_EXEC_FAILURE 由于命令执行失败,结果根据DefaultResult设置。
  • + //
  • COMMAND_EXEC_RESULT_CHECK_FAILURE 由于命令结果检查失败,结果根据DefaultResult设置。
  • ResultReason *string `json:"ResultReason,omitempty" name:"ResultReason"` } -type LifecycleHook struct { +type LifecycleCommand struct { + // 远程命令ID。若选择执行命令,则此项必填。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CommandId *string `json:"CommandId,omitempty" name:"CommandId"` + + // 自定义参数。字段类型为 json encoded string。如:{"varA": "222"}。 + // key为自定义参数名称,value为该参数的默认取值。kv均为字符串型。 + // 如果未提供该参数取值,将使用 Command 的 DefaultParameters 进行替换。 + // 自定义参数最多20个。自定义参数名称需符合以下规范:字符数目上限64,可选范围【a-zA-Z0-9-_】。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Parameters *string `json:"Parameters,omitempty" name:"Parameters"` +} +type LifecycleHook struct { // 生命周期挂钩ID LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` @@ -2827,30 +3677,29 @@ type LifecycleHook struct { // 生命周期挂钩适用场景 LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 远程命令执行对象 + // 注意:此字段可能返回 null,表示取不到有效值。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` } type LimitedLoginSettings struct { - // 密钥ID列表。 KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` } type LoginSettings struct { - // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
  • Linux实例密码必须8到16位,至少包括两项[a-z,A-Z]、[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
  • Windows实例密码必须12到16位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = { } [ ] : ; ' , . ? /]中的特殊符号。

    若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。 - // 注意:此字段可能返回 null,表示取不到有效值。 Password *string `json:"Password,omitempty" name:"Password"` // 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例;KeyId可通过接口DescribeKeyPairs获取,密钥与密码不能同时指定,同时Windows操作系统不支持指定密钥。当前仅支持购买的时候指定一个密钥。 KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` // 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。取值范围:
  • TRUE:表示保持镜像的登录设置
  • FALSE:表示不保持镜像的登录设置

    默认取值:FALSE。 - // 注意:此字段可能返回 null,表示取不到有效值。 KeepImageLogin *bool `json:"KeepImageLogin,omitempty" name:"KeepImageLogin"` } type MetricAlarm struct { - // 比较运算符,可选值:
  • GREATER_THAN:大于
  • GREATER_THAN_OR_EQUAL_TO:大于或等于
  • LESS_THAN:小于
  • LESS_THAN_OR_EQUAL_TO:小于或等于
  • EQUAL_TO:等于
  • NOT_EQUAL_TO:不等于
  • ComparisonOperator *string `json:"ComparisonOperator,omitempty" name:"ComparisonOperator"` @@ -2868,6 +3717,102 @@ type MetricAlarm struct { // 统计类型,可选字段如下:
  • AVERAGE:平均值
  • MAXIMUM:最大值
  • MINIMUM:最小值

  • 默认取值:AVERAGE Statistic *string `json:"Statistic,omitempty" name:"Statistic"` + + // 精确告警阈值,本参数不作为入参输入,仅用作查询接口出参:
  • CPU_UTILIZATION:(0, 100],单位:%
  • MEM_UTILIZATION:(0, 100],单位:%
  • LAN_TRAFFIC_OUT:>0,单位:Mbps
  • LAN_TRAFFIC_IN:>0,单位:Mbps
  • WAN_TRAFFIC_OUT:>0,单位:Mbps
  • WAN_TRAFFIC_IN:>0,单位:Mbps
  • + PreciseThreshold *float64 `json:"PreciseThreshold,omitempty" name:"PreciseThreshold"` +} + +// Predefined struct for user +type ModifyAutoScalingGroupRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 伸缩组名称,在您账号中必须唯一。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超55个字节。 + AutoScalingGroupName *string `json:"AutoScalingGroupName,omitempty" name:"AutoScalingGroupName"` + + // 默认冷却时间,单位秒,默认值为300 + DefaultCooldown *uint64 `json:"DefaultCooldown,omitempty" name:"DefaultCooldown"` + + // 期望实例数,大小介于最小实例数和最大实例数之间 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 启动配置ID + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 最大实例数,取值范围为0-2000。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` + + // 最小实例数,取值范围为0-2000。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // 项目ID + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 子网ID列表 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` + + // 销毁策略,目前长度上限为1。取值包括 OLDEST_INSTANCE 和 NEWEST_INSTANCE。 + //
  • OLDEST_INSTANCE 优先销毁伸缩组中最旧的实例。 + //
  • NEWEST_INSTANCE,优先销毁伸缩组中最新的实例。 + TerminationPolicies []*string `json:"TerminationPolicies,omitempty" name:"TerminationPolicies"` + + // VPC ID,基础网络则填空字符串。修改为具体VPC ID时,需指定相应的SubnetIds;修改为基础网络时,需指定相应的Zones。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 可用区列表 + Zones []*string `json:"Zones,omitempty" name:"Zones"` + + // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。部分成功的伸缩活动判定为一次失败活动。 + //
  • + // IMMEDIATE_RETRY,立即重试,在较短时间内快速重试,连续失败超过一定次数(5次)后不再重试。 + //
  • + // INCREMENTAL_INTERVALS,间隔递增重试,随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。 + //
  • NO_RETRY,不进行重试,直到再次收到用户调用或者告警信息后才会重试。 + RetryPolicy *string `json:"RetryPolicy,omitempty" name:"RetryPolicy"` + + // 可用区校验策略,取值包括 ALL 和 ANY,默认取值为ANY。在伸缩组实际变更资源相关字段时(启动配置、可用区、子网)发挥作用。 + //
  • ALL,所有可用区(Zone)或子网(SubnetId)都可用则通过校验,否则校验报错。 + //
  • ANY,存在任何一个可用区(Zone)或子网(SubnetId)可用则通过校验,否则校验报错。 + // + // 可用区或子网不可用的常见原因包括该可用区CVM实例类型售罄、该可用区CBS云盘售罄、该可用区配额不足、该子网IP不足等。 + // 如果 Zones/SubnetIds 中可用区或者子网不存在,则无论 ZonesCheckPolicy 采用何种取值,都会校验报错。 + ZonesCheckPolicy *string `json:"ZonesCheckPolicy,omitempty" name:"ZonesCheckPolicy"` + + // 服务设置,包括云监控不健康替换等服务设置。 + ServiceSettings *ServiceSettings `json:"ServiceSettings,omitempty" name:"ServiceSettings"` + + // 实例具有IPv6地址数量的配置,取值包括0、1。 + Ipv6AddressCount *int64 `json:"Ipv6AddressCount,omitempty" name:"Ipv6AddressCount"` + + // 多可用区/子网策略,取值包括 PRIORITY 和 EQUALITY,默认为 PRIORITY。 + //
  • PRIORITY,按照可用区/子网列表的顺序,作为优先级来尝试创建实例,如果优先级最高的可用区/子网可以创建成功,则总在该可用区/子网创建。 + //
  • EQUALITY:扩容出的实例会打散到多个可用区/子网,保证扩容后的各个可用区/子网实例数相对均衡。 + // + // 与本策略相关的注意点: + //
  • 当伸缩组为基础网络时,本策略适用于多可用区;当伸缩组为VPC网络时,本策略适用于多子网,此时不再考虑可用区因素,例如四个子网ABCD,其中ABC处于可用区1,D处于可用区2,此时考虑子网ABCD进行排序,而不考虑可用区1、2。 + //
  • 本策略适用于多可用区/子网,不适用于启动配置的多机型。多机型按照优先级策略进行选择。 + //
  • 按照 PRIORITY 策略创建实例时,先保证多机型的策略,后保证多可用区/子网的策略。例如多机型A、B,多子网1、2、3,会按照A1、A2、A3、B1、B2、B3 进行尝试,如果A1售罄,会尝试A2(而非B1)。 + MultiZoneSubnetPolicy *string `json:"MultiZoneSubnetPolicy,omitempty" name:"MultiZoneSubnetPolicy"` + + // 伸缩组实例健康检查类型,取值如下:
  • CVM:根据实例网络状态判断实例是否处于不健康状态,不健康的网络状态即发生实例 PING 不可达事件,详细判断标准可参考[实例健康检查](https://cloud.tencent.com/document/product/377/8553)
  • CLB:根据 CLB 的健康检查状态判断实例是否处于不健康状态,CLB健康检查原理可参考[健康检查](https://cloud.tencent.com/document/product/214/6097) + HealthCheckType *string `json:"HealthCheckType,omitempty" name:"HealthCheckType"` + + // CLB健康检查宽限期。 + LoadBalancerHealthCheckGracePeriod *uint64 `json:"LoadBalancerHealthCheckGracePeriod,omitempty" name:"LoadBalancerHealthCheckGracePeriod"` + + // 实例分配策略,取值包括 LAUNCH_CONFIGURATION 和 SPOT_MIXED。 + //
  • LAUNCH_CONFIGURATION,代表传统的按照启动配置模式。 + //
  • SPOT_MIXED,代表竞价混合模式。目前仅支持启动配置为按量计费模式时使用混合模式,混合模式下,伸缩组将根据设定扩容按量或竞价机型。使用混合模式时,关联的启动配置的计费类型不可被修改。 + InstanceAllocationPolicy *string `json:"InstanceAllocationPolicy,omitempty" name:"InstanceAllocationPolicy"` + + // 竞价混合模式下,各计费类型实例的分配策略。 + // 仅当 InstanceAllocationPolicy 取 SPOT_MIXED 时可用。 + SpotMixedAllocationPolicy *SpotMixedAllocationPolicy `json:"SpotMixedAllocationPolicy,omitempty" name:"SpotMixedAllocationPolicy"` + + // 容量重平衡功能,仅对伸缩组内的竞价实例有效。取值范围: + //
  • TRUE,开启该功能,当伸缩组内的竞价实例即将被竞价实例服务自动回收前,AS 主动发起竞价实例销毁流程,如果有配置过缩容 hook,则销毁前 hook 会生效。销毁流程启动后,AS 会异步开启一个扩容活动,用于补齐期望实例数。 + //
  • FALSE,不开启该功能,则 AS 等待竞价实例被销毁后才会去扩容补齐伸缩组期望实例数。 + CapacityRebalance *bool `json:"CapacityRebalance,omitempty" name:"CapacityRebalance"` } type ModifyAutoScalingGroupRequest struct { @@ -2911,9 +3856,11 @@ type ModifyAutoScalingGroupRequest struct { // 可用区列表 Zones []*string `json:"Zones,omitempty" name:"Zones"` - // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。 - //
  • IMMEDIATE_RETRY,立即重试,在较短时间内快速重试,连续失败超过一定次数(5次)后不再重试。 - //
  • INCREMENTAL_INTERVALS,间隔递增重试,随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。 + // 重试策略,取值包括 IMMEDIATE_RETRY、 INCREMENTAL_INTERVALS、NO_RETRY,默认取值为 IMMEDIATE_RETRY。部分成功的伸缩活动判定为一次失败活动。 + //
  • + // IMMEDIATE_RETRY,立即重试,在较短时间内快速重试,连续失败超过一定次数(5次)后不再重试。 + //
  • + // INCREMENTAL_INTERVALS,间隔递增重试,随着连续失败次数的增加,重试间隔逐渐增大,重试间隔从秒级到1天不等。 //
  • NO_RETRY,不进行重试,直到再次收到用户调用或者告警信息后才会重试。 RetryPolicy *string `json:"RetryPolicy,omitempty" name:"RetryPolicy"` @@ -3002,13 +3949,15 @@ func (r *ModifyAutoScalingGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAutoScalingGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyAutoScalingGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyAutoScalingGroupResponseParams `json:"Response"` } func (r *ModifyAutoScalingGroupResponse) ToJsonString() string { @@ -3016,60 +3965,177 @@ func (r *ModifyAutoScalingGroupResponse) ToJsonString() string { return string(b) } -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyAutoScalingGroupResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyAutoScalingGroupResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyDesiredCapacityRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 期望实例数 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 最小实例数,取值范围为0-2000。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // 最大实例数,取值范围为0-2000。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` +} + +type ModifyDesiredCapacityRequest struct { + *tchttp.BaseRequest + + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 期望实例数 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 最小实例数,取值范围为0-2000。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // 最大实例数,取值范围为0-2000。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` +} + +func (r *ModifyDesiredCapacityRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyDesiredCapacityRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "AutoScalingGroupId") + delete(f, "DesiredCapacity") + delete(f, "MinSize") + delete(f, "MaxSize") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyDesiredCapacityRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyDesiredCapacityResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyDesiredCapacityResponse struct { + *tchttp.BaseResponse + Response *ModifyDesiredCapacityResponseParams `json:"Response"` +} + +func (r *ModifyDesiredCapacityResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyDesiredCapacityResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyLaunchConfigurationAttributesRequestParams struct { + // 启动配置ID + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-8toqc6s3`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例类型列表,不同实例机型指定了不同的资源规格,最多支持10种实例机型。 + // InstanceType 指定单一实例类型,通过设置 InstanceTypes可以指定多实例类型,并使原有的InstanceType失效。 + InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` + + // 实例类型校验策略,在实际修改 InstanceTypes 时发挥作用,取值包括 ALL 和 ANY,默认取值为ANY。 + //
  • ALL,所有实例类型(InstanceType)都可用则通过校验,否则校验报错。 + //
  • ANY,存在任何一个实例类型(InstanceType)可用则通过校验,否则校验报错。 + // + // 实例类型不可用的常见原因包括该实例类型售罄、对应云盘售罄等。 + // 如果 InstanceTypes 中一款机型不存在或者已下线,则无论 InstanceTypesCheckPolicy 采用何种取值,都会校验报错。 + InstanceTypesCheckPolicy *string `json:"InstanceTypesCheckPolicy,omitempty" name:"InstanceTypesCheckPolicy"` + + // 启动配置显示名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。 + LaunchConfigurationName *string `json:"LaunchConfigurationName,omitempty" name:"LaunchConfigurationName"` + + // 经过 Base64 编码后的自定义数据,最大长度不超过16KB。如果要清空UserData,则指定其为空字符串。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的`SecurityGroupId`字段来获取。 + // 若指定该参数,请至少提供一个安全组,列表顺序有先后。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 公网带宽相关信息设置。 + // 当公网出带宽上限为0Mbps时,不支持修改为开通分配公网IP;相应的,当前为开通分配公网IP时,修改的公网出带宽上限值必须大于0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 实例计费类型。具体取值范围如下: + //
  • POSTPAID_BY_HOUR:按小时后付费 + //
  • SPOTPAID:竞价付费 + //
  • PREPAID:预付费,即包年包月 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。 + // 若修改实例的付费模式为预付费,则该参数必传;从预付费修改为其他付费模式时,本字段原信息会自动丢弃。 + // 当新增该字段时,必须传递购买实例的时长,其它未传递字段会设置为默认值。 + // 当修改本字段时,当前付费模式必须为预付费。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例的市场相关选项,如竞价实例相关参数。 + // 若修改实例的付费模式为竞价付费,则该参数必传;从竞价付费修改为其他付费模式时,本字段原信息会自动丢弃。 + // 当新增该字段时,必须传递竞价相关选项下的竞价出价,其它未传递字段会设置为默认值。 + // 当修改本字段时,当前付费模式必须为竞价付费。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 云盘类型选择策略,取值范围: + //
  • ORIGINAL:使用设置的云盘类型。 + //
  • AUTOMATIC:自动选择当前可用的云盘类型。 + DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` -type ModifyDesiredCapacityRequest struct { - *tchttp.BaseRequest + // 实例系统盘配置信息。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + // 实例数据盘配置信息。 + // 最多支持指定11块数据盘。采取整体修改,因此请提供修改后的全部值。 + // 数据盘类型默认与系统盘类型保持一致。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` - // 期望实例数 - DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` -} + // 云服务器主机名(HostName)的相关设置。 + // 不支持windows实例设置主机名。 + // 新增该属性时,必须传递云服务器的主机名,其它未传递字段会设置为默认值。 + HostNameSettings *HostNameSettings `json:"HostNameSettings,omitempty" name:"HostNameSettings"` -func (r *ModifyDesiredCapacityRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} + // 云服务器(InstanceName)实例名的相关设置。 + // 如果用户在启动配置中设置此字段,则伸缩组创建出的实例 InstanceName 参照此字段进行设置,并传递给 CVM;如果用户未在启动配置中设置此字段,则伸缩组创建出的实例 InstanceName 按照“as-{{ 伸缩组AutoScalingGroupName }}”进行设置,并传递给 CVM。 + // 新增该属性时,必须传递云服务器的实例名称,其它未传递字段会设置为默认值。 + InstanceNameSettings *InstanceNameSettings `json:"InstanceNameSettings,omitempty" name:"InstanceNameSettings"` -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyDesiredCapacityRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "AutoScalingGroupId") - delete(f, "DesiredCapacity") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyDesiredCapacityRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` -type ModifyDesiredCapacityResponse struct { - *tchttp.BaseResponse - Response *struct { + // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} + // 高性能计算集群ID。
    + // 注意:此字段默认为空。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` -func (r *ModifyDesiredCapacityResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyDesiredCapacityResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` } type ModifyLaunchConfigurationAttributesRequest struct { @@ -3153,6 +4219,16 @@ type ModifyLaunchConfigurationAttributesRequest struct { // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 高性能计算集群ID。
    + // 注意:此字段默认为空。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` } func (r *ModifyLaunchConfigurationAttributesRequest) ToJsonString() string { @@ -3185,19 +4261,24 @@ func (r *ModifyLaunchConfigurationAttributesRequest) FromJsonString(s string) er delete(f, "InstanceNameSettings") delete(f, "EnhancedService") delete(f, "CamRoleName") + delete(f, "HpcClusterId") + delete(f, "IPv6InternetAccessible") + delete(f, "DisasterRecoverGroupIds") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyLaunchConfigurationAttributesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLaunchConfigurationAttributesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyLaunchConfigurationAttributesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyLaunchConfigurationAttributesResponseParams `json:"Response"` } func (r *ModifyLaunchConfigurationAttributesResponse) ToJsonString() string { @@ -3211,13 +4292,140 @@ func (r *ModifyLaunchConfigurationAttributesResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLifecycleHookRequestParams struct { + // 生命周期挂钩ID。 + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` + + // 生命周期挂钩名称。 + LifecycleHookName *string `json:"LifecycleHookName,omitempty" name:"LifecycleHookName"` + + // 进入生命周期挂钩场景,取值包括: + //
  • INSTANCE_LAUNCHING:实例启动后 + //
  • INSTANCE_TERMINATING:实例销毁前 + LifecycleTransition *string `json:"LifecycleTransition,omitempty" name:"LifecycleTransition"` + + // 定义伸缩组在生命周期挂钩超时的情况下应采取的操作,取值包括: + //
  • CONTINUE: 超时后继续伸缩活动 + //
  • ABANDON:超时后终止伸缩活动 + DefaultResult *string `json:"DefaultResult,omitempty" name:"DefaultResult"` + + // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从 30 到 7200 秒。 + HeartbeatTimeout *uint64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` + + // 弹性伸缩向通知目标发送的附加信息。 + NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` + + // 进行生命周期挂钩的场景类型,取值范围包括`NORMAL`和 `EXTENSION`。说明:设置为`EXTENSION`值,在AttachInstances、DetachInstances、RemoveInstances 接口时会触发生命周期挂钩操作,值为`NORMAL`则不会在这些接口中触发生命周期挂钩。 + LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 通知目标信息。 + NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` + + // 远程命令执行对象。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` +} + +type ModifyLifecycleHookRequest struct { + *tchttp.BaseRequest + + // 生命周期挂钩ID。 + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` + + // 生命周期挂钩名称。 + LifecycleHookName *string `json:"LifecycleHookName,omitempty" name:"LifecycleHookName"` + + // 进入生命周期挂钩场景,取值包括: + //
  • INSTANCE_LAUNCHING:实例启动后 + //
  • INSTANCE_TERMINATING:实例销毁前 + LifecycleTransition *string `json:"LifecycleTransition,omitempty" name:"LifecycleTransition"` + + // 定义伸缩组在生命周期挂钩超时的情况下应采取的操作,取值包括: + //
  • CONTINUE: 超时后继续伸缩活动 + //
  • ABANDON:超时后终止伸缩活动 + DefaultResult *string `json:"DefaultResult,omitempty" name:"DefaultResult"` + + // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从 30 到 7200 秒。 + HeartbeatTimeout *uint64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` + + // 弹性伸缩向通知目标发送的附加信息。 + NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` + + // 进行生命周期挂钩的场景类型,取值范围包括`NORMAL`和 `EXTENSION`。说明:设置为`EXTENSION`值,在AttachInstances、DetachInstances、RemoveInstances 接口时会触发生命周期挂钩操作,值为`NORMAL`则不会在这些接口中触发生命周期挂钩。 + LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 通知目标信息。 + NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` + + // 远程命令执行对象。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` +} + +func (r *ModifyLifecycleHookRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyLifecycleHookRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "LifecycleHookId") + delete(f, "LifecycleHookName") + delete(f, "LifecycleTransition") + delete(f, "DefaultResult") + delete(f, "HeartbeatTimeout") + delete(f, "NotificationMetadata") + delete(f, "LifecycleTransitionType") + delete(f, "NotificationTarget") + delete(f, "LifecycleCommand") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyLifecycleHookRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyLifecycleHookResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyLifecycleHookResponse struct { + *tchttp.BaseResponse + Response *ModifyLifecycleHookResponseParams `json:"Response"` +} + +func (r *ModifyLifecycleHookResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyLifecycleHookResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyLoadBalancerTargetAttributesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 需修改目标规则属性的应用型负载均衡器列表,列表长度上限为100 + ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` +} + type ModifyLoadBalancerTargetAttributesRequest struct { *tchttp.BaseRequest // 伸缩组ID AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - // 需修改目标规则属性的应用型负载均衡器列表,列表长度上限为50 + // 需修改目标规则属性的应用型负载均衡器列表,列表长度上限为100 ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` } @@ -3241,16 +4449,18 @@ func (r *ModifyLoadBalancerTargetAttributesRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type ModifyLoadBalancerTargetAttributesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyLoadBalancerTargetAttributesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyLoadBalancerTargetAttributesResponse struct { + *tchttp.BaseResponse + Response *ModifyLoadBalancerTargetAttributesResponseParams `json:"Response"` } func (r *ModifyLoadBalancerTargetAttributesResponse) ToJsonString() string { @@ -3264,6 +4474,23 @@ func (r *ModifyLoadBalancerTargetAttributesResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLoadBalancersRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 传统负载均衡器ID列表,目前长度上限为20,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` + + // 应用型负载均衡器列表,目前长度上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` + + // 负载均衡器校验策略,取值包括 ALL 和 DIFF,默认取值为 ALL。 + //
  • ALL,所有负载均衡器都合法则通过校验,否则校验报错。 + //
  • DIFF,仅校验负载均衡器参数中实际变化的部分,如果合法则通过校验,否则校验报错。 + LoadBalancersCheckPolicy *string `json:"LoadBalancersCheckPolicy,omitempty" name:"LoadBalancersCheckPolicy"` +} + type ModifyLoadBalancersRequest struct { *tchttp.BaseRequest @@ -3273,7 +4500,7 @@ type ModifyLoadBalancersRequest struct { // 传统负载均衡器ID列表,目前长度上限为20,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 LoadBalancerIds []*string `json:"LoadBalancerIds,omitempty" name:"LoadBalancerIds"` - // 应用型负载均衡器列表,目前长度上限为50,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 + // 应用型负载均衡器列表,目前长度上限为100,LoadBalancerIds 和 ForwardLoadBalancers 二者同时最多只能指定一个 ForwardLoadBalancers []*ForwardLoadBalancer `json:"ForwardLoadBalancers,omitempty" name:"ForwardLoadBalancers"` // 负载均衡器校验策略,取值包括 ALL 和 DIFF,默认取值为 ALL。 @@ -3304,16 +4531,18 @@ func (r *ModifyLoadBalancersRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ModifyLoadBalancersResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyLoadBalancersResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyLoadBalancersResponse struct { + *tchttp.BaseResponse + Response *ModifyLoadBalancersResponseParams `json:"Response"` } func (r *ModifyLoadBalancersResponse) ToJsonString() string { @@ -3327,6 +4556,30 @@ func (r *ModifyLoadBalancersResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNotificationConfigurationRequestParams struct { + // 待修改的通知ID。 + AutoScalingNotificationId *string `json:"AutoScalingNotificationId,omitempty" name:"AutoScalingNotificationId"` + + // 通知类型,即为需要订阅的通知类型集合,取值范围如下: + //
  • SCALE_OUT_SUCCESSFUL:扩容成功
  • + //
  • SCALE_OUT_FAILED:扩容失败
  • + //
  • SCALE_IN_SUCCESSFUL:缩容成功
  • + //
  • SCALE_IN_FAILED:缩容失败
  • + //
  • REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL:替换不健康子机成功
  • + //
  • REPLACE_UNHEALTHY_INSTANCE_FAILED:替换不健康子机失败
  • + NotificationTypes []*string `json:"NotificationTypes,omitempty" name:"NotificationTypes"` + + // 通知组ID,即为用户组ID集合,用户组ID可以通过[ListGroups](https://cloud.tencent.com/document/product/598/34589)查询。 + NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` + + // CMQ 队列或 TDMQ CMQ 队列名。 + QueueName *string `json:"QueueName,omitempty" name:"QueueName"` + + // CMQ 主题或 TDMQ CMQ 主题名。 + TopicName *string `json:"TopicName,omitempty" name:"TopicName"` +} + type ModifyNotificationConfigurationRequest struct { *tchttp.BaseRequest @@ -3375,13 +4628,15 @@ func (r *ModifyNotificationConfigurationRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNotificationConfigurationResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNotificationConfigurationResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNotificationConfigurationResponseParams `json:"Response"` } func (r *ModifyNotificationConfigurationResponse) ToJsonString() string { @@ -3395,6 +4650,43 @@ func (r *ModifyNotificationConfigurationResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyScalingPolicyRequestParams struct { + // 告警策略ID。 + AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` + + // 告警策略名称。 + ScalingPolicyName *string `json:"ScalingPolicyName,omitempty" name:"ScalingPolicyName"` + + // 告警触发后,期望实例数修改方式,仅适用于简单策略。取值范围:
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • + AdjustmentType *string `json:"AdjustmentType,omitempty" name:"AdjustmentType"` + + // 告警触发后,期望实例数的调整值,仅适用于简单策略。
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 + AdjustmentValue *int64 `json:"AdjustmentValue,omitempty" name:"AdjustmentValue"` + + // 冷却时间,仅适用于简单策略,单位为秒。 + Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` + + // 告警监控指标,仅适用于简单策略。 + MetricAlarm *MetricAlarm `json:"MetricAlarm,omitempty" name:"MetricAlarm"` + + // 预定义监控项,仅适用于目标追踪策略。取值范围:
  • ASG_AVG_CPU_UTILIZATION:平均CPU使用率
  • ASG_AVG_LAN_TRAFFIC_OUT:平均内网出带宽
  • ASG_AVG_LAN_TRAFFIC_IN:平均内网入带宽
  • ASG_AVG_WAN_TRAFFIC_OUT:平均外网出带宽
  • ASG_AVG_WAN_TRAFFIC_IN:平均外网出带宽
  • + PredefinedMetricType *string `json:"PredefinedMetricType,omitempty" name:"PredefinedMetricType"` + + // 目标值,仅适用于目标追踪策略。
  • ASG_AVG_CPU_UTILIZATION:[1, 100),单位:%
  • ASG_AVG_LAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_LAN_TRAFFIC_IN:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_IN:>0,单位:Mbps
  • + TargetValue *uint64 `json:"TargetValue,omitempty" name:"TargetValue"` + + // 实例预热时间,单位为秒,仅适用于目标追踪策略。取值范围为0-3600。 + EstimatedInstanceWarmup *uint64 `json:"EstimatedInstanceWarmup,omitempty" name:"EstimatedInstanceWarmup"` + + // 是否禁用缩容,仅适用于目标追踪策略。取值范围:
  • true:目标追踪策略仅触发扩容
  • false:目标追踪策略触发扩容和缩容
  • + DisableScaleIn *bool `json:"DisableScaleIn,omitempty" name:"DisableScaleIn"` + + // 此参数已不再生效,请使用[创建通知](https://cloud.tencent.com/document/api/377/33185)。 + // 通知组ID,即为用户组ID集合。 + NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` +} + type ModifyScalingPolicyRequest struct { *tchttp.BaseRequest @@ -3404,20 +4696,32 @@ type ModifyScalingPolicyRequest struct { // 告警策略名称。 ScalingPolicyName *string `json:"ScalingPolicyName,omitempty" name:"ScalingPolicyName"` - // 告警触发后,期望实例数修改方式。取值 :
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • + // 告警触发后,期望实例数修改方式,仅适用于简单策略。取值范围:
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • AdjustmentType *string `json:"AdjustmentType,omitempty" name:"AdjustmentType"` - // 告警触发后,期望实例数的调整值。取值:
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 + // 告警触发后,期望实例数的调整值,仅适用于简单策略。
  • 当 AdjustmentType 为 CHANGE_IN_CAPACITY 时,AdjustmentValue 为正数表示告警触发后增加实例,为负数表示告警触发后减少实例
  • 当 AdjustmentType 为 EXACT_CAPACITY 时,AdjustmentValue 的值即为告警触发后新的期望实例数,需要大于或等于0
  • 当 AdjustmentType 为 PERCENT_CHANGE_IN_CAPACITY 时,AdjusmentValue 为正数表示告警触发后按百分比增加实例,为负数表示告警触发后按百分比减少实例,单位是:%。 AdjustmentValue *int64 `json:"AdjustmentValue,omitempty" name:"AdjustmentValue"` - // 冷却时间,单位为秒。 + // 冷却时间,仅适用于简单策略,单位为秒。 Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` - // 告警监控指标。 + // 告警监控指标,仅适用于简单策略。 MetricAlarm *MetricAlarm `json:"MetricAlarm,omitempty" name:"MetricAlarm"` - // 通知组ID,即为用户组ID集合,用户组ID可以通过[ListGroups](https://cloud.tencent.com/document/product/598/34589)查询。 - // 如果需要清空通知用户组,需要在列表中传入特定字符串 "NULL"。 + // 预定义监控项,仅适用于目标追踪策略。取值范围:
  • ASG_AVG_CPU_UTILIZATION:平均CPU使用率
  • ASG_AVG_LAN_TRAFFIC_OUT:平均内网出带宽
  • ASG_AVG_LAN_TRAFFIC_IN:平均内网入带宽
  • ASG_AVG_WAN_TRAFFIC_OUT:平均外网出带宽
  • ASG_AVG_WAN_TRAFFIC_IN:平均外网出带宽
  • + PredefinedMetricType *string `json:"PredefinedMetricType,omitempty" name:"PredefinedMetricType"` + + // 目标值,仅适用于目标追踪策略。
  • ASG_AVG_CPU_UTILIZATION:[1, 100),单位:%
  • ASG_AVG_LAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_LAN_TRAFFIC_IN:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_IN:>0,单位:Mbps
  • + TargetValue *uint64 `json:"TargetValue,omitempty" name:"TargetValue"` + + // 实例预热时间,单位为秒,仅适用于目标追踪策略。取值范围为0-3600。 + EstimatedInstanceWarmup *uint64 `json:"EstimatedInstanceWarmup,omitempty" name:"EstimatedInstanceWarmup"` + + // 是否禁用缩容,仅适用于目标追踪策略。取值范围:
  • true:目标追踪策略仅触发扩容
  • false:目标追踪策略触发扩容和缩容
  • + DisableScaleIn *bool `json:"DisableScaleIn,omitempty" name:"DisableScaleIn"` + + // 此参数已不再生效,请使用[创建通知](https://cloud.tencent.com/document/api/377/33185)。 + // 通知组ID,即为用户组ID集合。 NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` } @@ -3439,6 +4743,10 @@ func (r *ModifyScalingPolicyRequest) FromJsonString(s string) error { delete(f, "AdjustmentValue") delete(f, "Cooldown") delete(f, "MetricAlarm") + delete(f, "PredefinedMetricType") + delete(f, "TargetValue") + delete(f, "EstimatedInstanceWarmup") + delete(f, "DisableScaleIn") delete(f, "NotificationUserGroupIds") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyScalingPolicyRequest has unknown keys!", "") @@ -3446,13 +4754,15 @@ func (r *ModifyScalingPolicyRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyScalingPolicyResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyScalingPolicyResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyScalingPolicyResponseParams `json:"Response"` } func (r *ModifyScalingPolicyResponse) ToJsonString() string { @@ -3466,6 +4776,33 @@ func (r *ModifyScalingPolicyResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyScheduledActionRequestParams struct { + // 待修改的定时任务ID + ScheduledActionId *string `json:"ScheduledActionId,omitempty" name:"ScheduledActionId"` + + // 定时任务名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。同一伸缩组下必须唯一。 + ScheduledActionName *string `json:"ScheduledActionName,omitempty" name:"ScheduledActionName"` + + // 当定时任务触发时,设置的伸缩组最大实例数。 + MaxSize *uint64 `json:"MaxSize,omitempty" name:"MaxSize"` + + // 当定时任务触发时,设置的伸缩组最小实例数。 + MinSize *uint64 `json:"MinSize,omitempty" name:"MinSize"` + + // 当定时任务触发时,设置的伸缩组期望实例数。 + DesiredCapacity *uint64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` + + // 定时任务的首次触发时间,取值为`北京时间`(UTC+8),按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ss+08:00`。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 定时任务的结束时间,取值为`北京时间`(UTC+8),按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ss+08:00`。
    此参数与`Recurrence`需要同时指定,到达结束时间之后,定时任务将不再生效。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 定时任务的重复方式。为标准 Cron 格式
    此参数与`EndTime`需要同时指定。 + Recurrence *string `json:"Recurrence,omitempty" name:"Recurrence"` +} + type ModifyScheduledActionRequest struct { *tchttp.BaseRequest @@ -3520,13 +4857,15 @@ func (r *ModifyScheduledActionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyScheduledActionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyScheduledActionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyScheduledActionResponseParams `json:"Response"` } func (r *ModifyScheduledActionResponse) ToJsonString() string { @@ -3541,7 +4880,6 @@ func (r *ModifyScheduledActionResponse) FromJsonString(s string) error { } type NotificationTarget struct { - // 目标类型,取值范围包括`CMQ_QUEUE`、`CMQ_TOPIC`、`TDMQ_CMQ_QUEUE`、`TDMQ_CMQ_TOPIC`。 //
  • CMQ_QUEUE,指腾讯云消息队列-队列模型。
  • //
  • CMQ_TOPIC,指腾讯云消息队列-主题模型。
  • @@ -3556,65 +4894,25 @@ type NotificationTarget struct { TopicName *string `json:"TopicName,omitempty" name:"TopicName"` } -type PaiInstance struct { - - // 实例ID +type RelatedInstance struct { + // 实例ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - // 实例域名 - DomainName *string `json:"DomainName,omitempty" name:"DomainName"` - - // PAI管理页面URL - PaiMateUrl *string `json:"PaiMateUrl,omitempty" name:"PaiMateUrl"` -} - -type PreviewPaiDomainNameRequest struct { - *tchttp.BaseRequest - - // 域名类型 - DomainNameType *string `json:"DomainNameType,omitempty" name:"DomainNameType"` -} - -func (r *PreviewPaiDomainNameRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *PreviewPaiDomainNameRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "DomainNameType") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "PreviewPaiDomainNameRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type PreviewPaiDomainNameResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 可用的PAI域名 - DomainName *string `json:"DomainName,omitempty" name:"DomainName"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + // 实例在伸缩活动中的状态。取值如下: + // INIT:初始化中 + // RUNNING:实例操作中 + // SUCCESSFUL:活动成功 + // FAILED:活动失败 + InstanceStatus *string `json:"InstanceStatus,omitempty" name:"InstanceStatus"` } -func (r *PreviewPaiDomainNameResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} +// Predefined struct for user +type RemoveInstancesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *PreviewPaiDomainNameResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) + // CVM实例ID列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` } type RemoveInstancesRequest struct { @@ -3647,16 +4945,18 @@ func (r *RemoveInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type RemoveInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type RemoveInstancesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type RemoveInstancesResponse struct { + *tchttp.BaseResponse + Response *RemoveInstancesResponseParams `json:"Response"` } func (r *RemoveInstancesResponse) ToJsonString() string { @@ -3670,20 +4970,33 @@ func (r *RemoveInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type RunMonitorServiceEnabled struct { +type RunAutomationServiceEnabled struct { + // 是否开启[自动化助手](https://cloud.tencent.com/document/product/1340)服务。取值范围:
  • TRUE:表示开启自动化助手服务
  • FALSE:表示不开启自动化助手服务 + // 注意:此字段可能返回 null,表示取不到有效值。 + Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` +} +type RunMonitorServiceEnabled struct { // 是否开启[云监控](https://cloud.tencent.com/document/product/248)服务。取值范围:
  • TRUE:表示开启云监控服务
  • FALSE:表示不开启云监控服务

    默认取值:TRUE。 // 注意:此字段可能返回 null,表示取不到有效值。 Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` } type RunSecurityServiceEnabled struct { - // 是否开启[云安全](https://cloud.tencent.com/document/product/296)服务。取值范围:
  • TRUE:表示开启云安全服务
  • FALSE:表示不开启云安全服务

    默认取值:TRUE。 // 注意:此字段可能返回 null,表示取不到有效值。 Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` } +// Predefined struct for user +type ScaleInInstancesRequestParams struct { + // 伸缩组ID。 + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 希望缩容的实例数量。 + ScaleInNumber *uint64 `json:"ScaleInNumber,omitempty" name:"ScaleInNumber"` +} + type ScaleInInstancesRequest struct { *tchttp.BaseRequest @@ -3714,16 +5027,18 @@ func (r *ScaleInInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ScaleInInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ScaleInInstancesResponseParams struct { + // 伸缩活动ID。 + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID。 - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ScaleInInstancesResponse struct { + *tchttp.BaseResponse + Response *ScaleInInstancesResponseParams `json:"Response"` } func (r *ScaleInInstancesResponse) ToJsonString() string { @@ -3737,6 +5052,15 @@ func (r *ScaleInInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ScaleOutInstancesRequestParams struct { + // 伸缩组ID。 + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 希望扩容的实例数量。 + ScaleOutNumber *uint64 `json:"ScaleOutNumber,omitempty" name:"ScaleOutNumber"` +} + type ScaleOutInstancesRequest struct { *tchttp.BaseRequest @@ -3767,16 +5091,18 @@ func (r *ScaleOutInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ScaleOutInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ScaleOutInstancesResponseParams struct { + // 伸缩活动ID。 + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID。 - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ScaleOutInstancesResponse struct { + *tchttp.BaseResponse + Response *ScaleOutInstancesResponseParams `json:"Response"` } func (r *ScaleOutInstancesResponse) ToJsonString() string { @@ -3791,34 +5117,57 @@ func (r *ScaleOutInstancesResponse) FromJsonString(s string) error { } type ScalingPolicy struct { - // 伸缩组ID。 AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` // 告警触发策略ID。 AutoScalingPolicyId *string `json:"AutoScalingPolicyId,omitempty" name:"AutoScalingPolicyId"` + // 告警触发策略类型。取值: + // - SIMPLE:简单策略 + // - TARGET_TRACKING:目标追踪策略 + ScalingPolicyType *string `json:"ScalingPolicyType,omitempty" name:"ScalingPolicyType"` + // 告警触发策略名称。 ScalingPolicyName *string `json:"ScalingPolicyName,omitempty" name:"ScalingPolicyName"` - // 告警触发后,期望实例数修改方式。取值 :
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • + // 告警触发后,期望实例数修改方式,仅适用于简单策略。取值范围:
  • CHANGE_IN_CAPACITY:增加或减少若干期望实例数
  • EXACT_CAPACITY:调整至指定期望实例数
  • PERCENT_CHANGE_IN_CAPACITY:按百分比调整期望实例数
  • AdjustmentType *string `json:"AdjustmentType,omitempty" name:"AdjustmentType"` - // 告警触发后,期望实例数的调整值。 + // 告警触发后,期望实例数的调整值,仅适用于简单策略。 AdjustmentValue *int64 `json:"AdjustmentValue,omitempty" name:"AdjustmentValue"` - // 冷却时间。 + // 冷却时间,仅适用于简单策略。 Cooldown *uint64 `json:"Cooldown,omitempty" name:"Cooldown"` - // 告警监控指标。 + // 简单告警触发策略告警监控指标,仅适用于简单策略。 MetricAlarm *MetricAlarm `json:"MetricAlarm,omitempty" name:"MetricAlarm"` + // 预定义监控项,仅适用于目标追踪策略。取值范围:
  • ASG_AVG_CPU_UTILIZATION:平均CPU使用率
  • ASG_AVG_LAN_TRAFFIC_OUT:平均内网出带宽
  • ASG_AVG_LAN_TRAFFIC_IN:平均内网入带宽
  • ASG_AVG_WAN_TRAFFIC_OUT:平均外网出带宽
  • ASG_AVG_WAN_TRAFFIC_IN:平均外网出带宽
  • + // 注意:此字段可能返回 null,表示取不到有效值。 + PredefinedMetricType *string `json:"PredefinedMetricType,omitempty" name:"PredefinedMetricType"` + + // 目标值,仅适用于目标追踪策略。
  • ASG_AVG_CPU_UTILIZATION:[1, 100),单位:%
  • ASG_AVG_LAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_LAN_TRAFFIC_IN:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_OUT:>0,单位:Mbps
  • ASG_AVG_WAN_TRAFFIC_IN:>0,单位:Mbps
  • + // 注意:此字段可能返回 null,表示取不到有效值。 + TargetValue *uint64 `json:"TargetValue,omitempty" name:"TargetValue"` + + // 实例预热时间,单位为秒,仅适用于目标追踪策略。取值范围为0-3600。 + // 注意:此字段可能返回 null,表示取不到有效值。 + EstimatedInstanceWarmup *uint64 `json:"EstimatedInstanceWarmup,omitempty" name:"EstimatedInstanceWarmup"` + + // 是否禁用缩容,仅适用于目标追踪策略。取值范围:
  • true:目标追踪策略仅触发扩容
  • false:目标追踪策略触发扩容和缩容
  • + // 注意:此字段可能返回 null,表示取不到有效值。 + DisableScaleIn *bool `json:"DisableScaleIn,omitempty" name:"DisableScaleIn"` + + // 告警监控指标列表,仅适用于目标追踪策略。 + // 注意:此字段可能返回 null,表示取不到有效值。 + MetricAlarms []*MetricAlarm `json:"MetricAlarms,omitempty" name:"MetricAlarms"` + // 通知组ID,即为用户组ID集合。 NotificationUserGroupIds []*string `json:"NotificationUserGroupIds,omitempty" name:"NotificationUserGroupIds"` } type ScheduledAction struct { - // 定时任务ID。 ScheduledActionId *string `json:"ScheduledActionId,omitempty" name:"ScheduledActionId"` @@ -3848,10 +5197,12 @@ type ScheduledAction struct { // 定时任务的创建时间。取值为`UTC`时间,按照`ISO8601`标准,格式:`YYYY-MM-DDThh:mm:ssZ`。 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 定时任务的执行类型。取值范围:
  • CRONTAB:代表定时任务为重复执行。
  • ONCE:代表定时任务为单次执行。 + ScheduledType *string `json:"ScheduledType,omitempty" name:"ScheduledType"` } type ServiceSettings struct { - // 开启监控不健康替换服务。若开启则对于云监控标记为不健康的实例,弹性伸缩服务会进行替换。若不指定该参数,则默认为 False。 ReplaceMonitorUnhealthy *bool `json:"ReplaceMonitorUnhealthy,omitempty" name:"ReplaceMonitorUnhealthy"` @@ -3865,6 +5216,18 @@ type ServiceSettings struct { ReplaceLoadBalancerUnhealthy *bool `json:"ReplaceLoadBalancerUnhealthy,omitempty" name:"ReplaceLoadBalancerUnhealthy"` } +// Predefined struct for user +type SetInstancesProtectionRequestParams struct { + // 伸缩组ID。 + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 实例ID。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例是否需要设置保护。 + ProtectedFromScaleIn *bool `json:"ProtectedFromScaleIn,omitempty" name:"ProtectedFromScaleIn"` +} + type SetInstancesProtectionRequest struct { *tchttp.BaseRequest @@ -3899,13 +5262,15 @@ func (r *SetInstancesProtectionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type SetInstancesProtectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type SetInstancesProtectionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *SetInstancesProtectionResponseParams `json:"Response"` } func (r *SetInstancesProtectionResponse) ToJsonString() string { @@ -3920,7 +5285,6 @@ func (r *SetInstancesProtectionResponse) FromJsonString(s string) error { } type SpotMarketOptions struct { - // 竞价出价,例如“1.05” MaxPrice *string `json:"MaxPrice,omitempty" name:"MaxPrice"` @@ -3930,7 +5294,6 @@ type SpotMarketOptions struct { } type SpotMixedAllocationPolicy struct { - // 混合模式下,基础容量的大小,基础容量部分固定为按量计费实例。默认值 0,最大不可超过伸缩组的最大实例数。 // 注意:此字段可能返回 null,表示取不到有效值。 BaseCapacity *uint64 `json:"BaseCapacity,omitempty" name:"BaseCapacity"` @@ -3955,6 +5318,15 @@ type SpotMixedAllocationPolicy struct { CompensateWithBaseInstance *bool `json:"CompensateWithBaseInstance,omitempty" name:"CompensateWithBaseInstance"` } +// Predefined struct for user +type StartAutoScalingInstancesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 待开启的CVM实例ID列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type StartAutoScalingInstancesRequest struct { *tchttp.BaseRequest @@ -3985,16 +5357,18 @@ func (r *StartAutoScalingInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type StartAutoScalingInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type StartAutoScalingInstancesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type StartAutoScalingInstancesResponse struct { + *tchttp.BaseResponse + Response *StartAutoScalingInstancesResponseParams `json:"Response"` } func (r *StartAutoScalingInstancesResponse) ToJsonString() string { @@ -4008,6 +5382,21 @@ func (r *StartAutoScalingInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type StopAutoScalingInstancesRequestParams struct { + // 伸缩组ID + AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` + + // 待关闭的CVM实例ID列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 关闭的实例是否收费,取值为: + // KEEP_CHARGING:关机继续收费 + // STOP_CHARGING:关机停止收费 + // 默认为 KEEP_CHARGING + StoppedMode *string `json:"StoppedMode,omitempty" name:"StoppedMode"` +} + type StopAutoScalingInstancesRequest struct { *tchttp.BaseRequest @@ -4045,16 +5434,18 @@ func (r *StopAutoScalingInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type StopAutoScalingInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type StopAutoScalingInstancesResponseParams struct { + // 伸缩活动ID + ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` - // 伸缩活动ID - ActivityId *string `json:"ActivityId,omitempty" name:"ActivityId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type StopAutoScalingInstancesResponse struct { + *tchttp.BaseResponse + Response *StopAutoScalingInstancesResponseParams `json:"Response"` } func (r *StopAutoScalingInstancesResponse) ToJsonString() string { @@ -4069,7 +5460,6 @@ func (r *StopAutoScalingInstancesResponse) FromJsonString(s string) error { } type SystemDisk struct { - // 系统盘类型。系统盘类型限制详见[云硬盘类型](https://cloud.tencent.com/document/product/362/2353)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘

    默认取值:CLOUD_PREMIUM。 // 注意:此字段可能返回 null,表示取不到有效值。 DiskType *string `json:"DiskType,omitempty" name:"DiskType"` @@ -4080,7 +5470,6 @@ type SystemDisk struct { } type Tag struct { - // 标签键 Key *string `json:"Key,omitempty" name:"Key"` @@ -4093,7 +5482,6 @@ type Tag struct { } type TargetAttribute struct { - // 端口 Port *uint64 `json:"Port,omitempty" name:"Port"` @@ -4101,6 +5489,85 @@ type TargetAttribute struct { Weight *uint64 `json:"Weight,omitempty" name:"Weight"` } +// Predefined struct for user +type UpgradeLaunchConfigurationRequestParams struct { + // 启动配置ID。 + LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-8toqc6s3`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例机型列表,不同实例机型指定了不同的资源规格,最多支持5种实例机型。 + InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` + + // 启动配置显示名称。名称仅支持中文、英文、数字、下划线、分隔符"-"、小数点,最大长度不能超60个字节。 + LaunchConfigurationName *string `json:"LaunchConfigurationName,omitempty" name:"LaunchConfigurationName"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘,最多支持指定11块数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 实例计费类型,CVM默认值按照POSTPAID_BY_HOUR处理。 + //
  • POSTPAID_BY_HOUR:按小时后付费 + //
  • SPOTPAID:竞价付费 + //
  • PREPAID:预付费,即包年包月 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费则该参数必传。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 实例类型校验策略,取值包括 ALL 和 ANY,默认取值为ANY。 + //
  • ALL,所有实例类型(InstanceType)都可用则通过校验,否则校验报错。 + //
  • ANY,存在任何一个实例类型(InstanceType)可用则通过校验,否则校验报错。 + // + // 实例类型不可用的常见原因包括该实例类型售罄、对应云盘售罄等。 + // 如果 InstanceTypes 中一款机型不存在或者已下线,则无论 InstanceTypesCheckPolicy 采用何种取值,都会校验报错。 + InstanceTypesCheckPolicy *string `json:"InstanceTypesCheckPolicy,omitempty" name:"InstanceTypesCheckPolicy"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 该参数已失效,请勿使用。升级启动配置接口无法修改或覆盖 LoginSettings 参数,升级后 LoginSettings 不会发生变化。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属项目ID。不填为默认项目。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的`SecurityGroupId`字段来获取。若不指定该参数,则默认不绑定安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 经过 Base64 编码后的自定义数据,最大长度不超过16KB。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 标签列表。通过指定该参数,可以为扩容的实例绑定标签。最多支持指定10个标签。 + InstanceTags []*InstanceTag `json:"InstanceTags,omitempty" name:"InstanceTags"` + + // CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 云服务器主机名(HostName)的相关设置。 + HostNameSettings *HostNameSettings `json:"HostNameSettings,omitempty" name:"HostNameSettings"` + + // 云服务器实例名(InstanceName)的相关设置。 + InstanceNameSettings *InstanceNameSettings `json:"InstanceNameSettings,omitempty" name:"InstanceNameSettings"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 云盘类型选择策略,取值范围: + //
  • ORIGINAL:使用设置的云盘类型 + //
  • AUTOMATIC:自动选择当前可用的云盘类型 + DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` + + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` +} + type UpgradeLaunchConfigurationRequest struct { *tchttp.BaseRequest @@ -4142,7 +5609,7 @@ type UpgradeLaunchConfigurationRequest struct { // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` - // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + // 该参数已失效,请勿使用。升级启动配置接口无法修改或覆盖 LoginSettings 参数,升级后 LoginSettings 不会发生变化。 LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` // 实例所属项目ID。不填为默认项目。 @@ -4176,6 +5643,9 @@ type UpgradeLaunchConfigurationRequest struct { //
  • ORIGINAL:使用设置的云盘类型 //
  • AUTOMATIC:自动选择当前可用的云盘类型 DiskTypePolicy *string `json:"DiskTypePolicy,omitempty" name:"DiskTypePolicy"` + + // IPv6公网带宽相关信息设置。若新建实例包含IPv6地址,该参数可为新建实例的IPv6地址分配公网带宽。关联启动配置的伸缩组Ipv6AddressCount参数为0时,该参数不会生效。 + IPv6InternetAccessible *IPv6InternetAccessible `json:"IPv6InternetAccessible,omitempty" name:"IPv6InternetAccessible"` } func (r *UpgradeLaunchConfigurationRequest) ToJsonString() string { @@ -4211,19 +5681,22 @@ func (r *UpgradeLaunchConfigurationRequest) FromJsonString(s string) error { delete(f, "InstanceNameSettings") delete(f, "InstanceChargePrepaid") delete(f, "DiskTypePolicy") + delete(f, "IPv6InternetAccessible") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpgradeLaunchConfigurationRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UpgradeLaunchConfigurationResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UpgradeLaunchConfigurationResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UpgradeLaunchConfigurationResponseParams `json:"Response"` } func (r *UpgradeLaunchConfigurationResponse) ToJsonString() string { @@ -4237,6 +5710,36 @@ func (r *UpgradeLaunchConfigurationResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UpgradeLifecycleHookRequestParams struct { + // 生命周期挂钩ID + LifecycleHookId *string `json:"LifecycleHookId,omitempty" name:"LifecycleHookId"` + + // 生命周期挂钩名称 + LifecycleHookName *string `json:"LifecycleHookName,omitempty" name:"LifecycleHookName"` + + // 进行生命周期挂钩的场景,取值范围包括“INSTANCE_LAUNCHING”和“INSTANCE_TERMINATING” + LifecycleTransition *string `json:"LifecycleTransition,omitempty" name:"LifecycleTransition"` + + // 定义伸缩组在生命周期挂钩超时的情况下应采取的操作,取值范围是“CONTINUE”或“ABANDON”,默认值为“CONTINUE” + DefaultResult *string `json:"DefaultResult,omitempty" name:"DefaultResult"` + + // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从30到7200秒,默认值为300秒 + HeartbeatTimeout *int64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` + + // 弹性伸缩向通知目标发送的附加信息,配置通知时使用,默认值为空字符串"" + NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` + + // 通知目标。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` + + // 进行生命周期挂钩的场景类型,取值范围包括NORMAL 和 EXTENSION。说明:设置为EXTENSION值,在AttachInstances、DetachInstances、RemoveInstaces接口时会触发生命周期挂钩操作,值为NORMAL则不会在这些接口中触发生命周期挂钩。 + LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 远程命令执行对象。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` +} + type UpgradeLifecycleHookRequest struct { *tchttp.BaseRequest @@ -4255,14 +5758,17 @@ type UpgradeLifecycleHookRequest struct { // 生命周期挂钩超时之前可以经过的最长时间(以秒为单位),范围从30到7200秒,默认值为300秒 HeartbeatTimeout *int64 `json:"HeartbeatTimeout,omitempty" name:"HeartbeatTimeout"` - // 弹性伸缩向通知目标发送的附加信息,默认值为空字符串"" + // 弹性伸缩向通知目标发送的附加信息,配置通知时使用,默认值为空字符串"" NotificationMetadata *string `json:"NotificationMetadata,omitempty" name:"NotificationMetadata"` - // 通知目标 + // 通知目标。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 NotificationTarget *NotificationTarget `json:"NotificationTarget,omitempty" name:"NotificationTarget"` // 进行生命周期挂钩的场景类型,取值范围包括NORMAL 和 EXTENSION。说明:设置为EXTENSION值,在AttachInstances、DetachInstances、RemoveInstaces接口时会触发生命周期挂钩操作,值为NORMAL则不会在这些接口中触发生命周期挂钩。 LifecycleTransitionType *string `json:"LifecycleTransitionType,omitempty" name:"LifecycleTransitionType"` + + // 远程命令执行对象。NotificationTarget和LifecycleCommand参数互斥,二者不可同时指定。 + LifecycleCommand *LifecycleCommand `json:"LifecycleCommand,omitempty" name:"LifecycleCommand"` } func (r *UpgradeLifecycleHookRequest) ToJsonString() string { @@ -4285,19 +5791,22 @@ func (r *UpgradeLifecycleHookRequest) FromJsonString(s string) error { delete(f, "NotificationMetadata") delete(f, "NotificationTarget") delete(f, "LifecycleTransitionType") + delete(f, "LifecycleCommand") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpgradeLifecycleHookRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UpgradeLifecycleHookResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UpgradeLifecycleHookResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UpgradeLifecycleHookResponseParams `json:"Response"` } func (r *UpgradeLifecycleHookResponse) ToJsonString() string { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/circuit_breaker.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker.go similarity index 99% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/circuit_breaker.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker.go index 15dffad2ac9d..4d9e3a205f18 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/circuit_breaker.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker_test.go new file mode 100644 index 000000000000..8cac543c915b --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/circuit_breaker_test.go @@ -0,0 +1,71 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import "testing" + +func Test_checkDomain(t *testing.T) { + type args struct { + endpoint string + } + tests := []struct { + name string + args args + want bool + }{ + {"valid endpoint", args{endpoint: "cvm.tencentcloudapi.com"}, true}, + {"valid endpoint", args{endpoint: "cvm.ap-beijing.tencentcloudapi.com"}, true}, + {"invalid endpoint", args{endpoint: "cvm.tencentcloud.com"}, false}, + {"invalid endpoint", args{endpoint: "cvm.com"}, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := checkEndpoint(tt.args.endpoint); got != tt.want { + t.Errorf("checkEndpoint() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_renewUrl(t *testing.T) { + type args struct { + oldDomain string + region string + } + tests := []struct { + name string + args args + want string + }{ + {"success3", args{ + oldDomain: "cvm.tencentcloudapi.com", + region: "ap-beijing", + }, "cvm.ap-beijing.tencentcloudapi.com"}, + {"success4", args{ + oldDomain: "cvm.ap-beijing.tencentcloudapi.com", + region: "ap-shanghai", + }, "cvm.ap-shanghai.tencentcloudapi.com", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := renewUrl(tt.args.oldDomain, tt.args.region); got != tt.want { + t.Errorf("renewUrl() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client.go similarity index 64% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client.go index 5b6ed6f77faf..7f554f99734e 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,19 +23,24 @@ import ( "log" "net/http" "net/http/httputil" + "net/url" + "os" + "regexp" "strconv" "strings" "time" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) const ( octetStream = "application/octet-stream" ) +var DefaultHttpClient *http.Client + type Client struct { region string httpClient *http.Client @@ -46,6 +51,8 @@ type Client struct { unsignedPayload bool debug bool rb *circuitBreaker + logger Logger + requestClient string } func (c *Client) Send(request tchttp.Request, response tchttp.Response) (err error) { @@ -69,14 +76,17 @@ func (c *Client) Send(request tchttp.Request, response tchttp.Response) (err err request.SetHttpMethod(c.httpProfile.ReqMethod) } - tchttp.CompleteCommonParams(request, c.GetRegion()) + tchttp.CompleteCommonParams(request, c.GetRegion(), c.requestClient) // reflect to inject client if field ClientToken exists and retry feature is enabled if c.profile.NetworkFailureMaxRetries > 0 || c.profile.RateLimitExceededMaxRetries > 0 { safeInjectClientToken(request) } - if c.profile.DisableRegionBreaker == true || c.rb == nil { + if request.GetSkipSign() { + // Some APIs can skip signature. + return c.sendWithoutSignature(request, response) + } else if c.profile.DisableRegionBreaker == true || c.rb == nil { return c.sendWithSignature(request, response) } else { return c.sendWithRegionBreaker(request, response) @@ -118,6 +128,124 @@ func (c *Client) sendWithSignature(request tchttp.Request, response tchttp.Respo } } +func (c *Client) sendWithoutSignature(request tchttp.Request, response tchttp.Response) error { + headers := map[string]string{ + "Host": request.GetDomain(), + "X-TC-Action": request.GetAction(), + "X-TC-Version": request.GetVersion(), + "X-TC-Timestamp": request.GetParams()["Timestamp"], + "X-TC-RequestClient": request.GetParams()["RequestClient"], + "X-TC-Language": c.profile.Language, + "Authorization": "SKIP", + } + if c.region != "" { + headers["X-TC-Region"] = c.region + } + if c.credential != nil && c.credential.GetToken() != "" { + headers["X-TC-Token"] = c.credential.GetToken() + } + if request.GetHttpMethod() == "GET" { + headers["Content-Type"] = "application/x-www-form-urlencoded" + } else { + headers["Content-Type"] = "application/json" + } + isOctetStream := false + cr := &tchttp.CommonRequest{} + ok := false + var octetStreamBody []byte + if cr, ok = request.(*tchttp.CommonRequest); ok { + if cr.IsOctetStream() { + isOctetStream = true + // custom headers must contain Content-Type : application/octet-stream + // todo:the custom header may overwrite headers + for k, v := range cr.GetHeader() { + headers[k] = v + } + octetStreamBody = cr.GetOctetStreamBody() + } + } + + for k, v := range request.GetHeader() { + switch k { + case "X-TC-Action", "X-TC-Version", "X-TC-Timestamp", "X-TC-RequestClient", + "X-TC-Language", "Content-Type", "X-TC-Region", "X-TC-Token": + c.logger.Printf("Skip header \"%s\": can not specify built-in header", k) + default: + headers[k] = v + } + } + + if !isOctetStream && request.GetContentType() == octetStream { + isOctetStream = true + b, _ := json.Marshal(request) + var m map[string]string + _ = json.Unmarshal(b, &m) + for k, v := range m { + key := "X-" + strings.ToUpper(request.GetService()) + "-" + k + headers[key] = v + } + + headers["Content-Type"] = octetStream + octetStreamBody = request.GetBody() + } + // start signature v3 process + + // build canonical request string + httpRequestMethod := request.GetHttpMethod() + canonicalQueryString := "" + if httpRequestMethod == "GET" { + err := tchttp.ConstructParams(request) + if err != nil { + return err + } + params := make(map[string]string) + for key, value := range request.GetParams() { + params[key] = value + } + delete(params, "Action") + delete(params, "Version") + delete(params, "Nonce") + delete(params, "Region") + delete(params, "RequestClient") + delete(params, "Timestamp") + canonicalQueryString = tchttp.GetUrlQueriesEncoded(params) + } + requestPayload := "" + if httpRequestMethod == "POST" { + if isOctetStream { + // todo Conversion comparison between string and []byte affects performance much + requestPayload = string(octetStreamBody) + } else { + b, err := json.Marshal(request) + if err != nil { + return err + } + requestPayload = string(b) + } + } + if c.unsignedPayload { + headers["X-TC-Content-SHA256"] = "UNSIGNED-PAYLOAD" + } + + url := request.GetScheme() + "://" + request.GetDomain() + request.GetPath() + if canonicalQueryString != "" { + url = url + "?" + canonicalQueryString + } + httpRequest, err := http.NewRequestWithContext(request.GetContext(), httpRequestMethod, url, strings.NewReader(requestPayload)) + if err != nil { + return err + } + for k, v := range headers { + httpRequest.Header[k] = []string{v} + } + httpResponse, err := c.sendWithRateLimitRetry(httpRequest, isRetryable(request)) + if err != nil { + return err + } + err = tchttp.ParseFromHttpResponse(httpResponse, response) + return err +} + func (c *Client) sendWithSignatureV1(request tchttp.Request, response tchttp.Response) (err error) { // TODO: not an elegant way, it should be done in common params, but finally it need to refactor request.GetParams()["Language"] = c.profile.Language @@ -136,6 +264,11 @@ func (c *Client) sendWithSignatureV1(request tchttp.Request, response tchttp.Res if request.GetHttpMethod() == "POST" { httpRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded") } + + for k, v := range request.GetHeader() { + httpRequest.Header.Set(k, v) + } + httpResponse, err := c.sendWithRateLimitRetry(httpRequest, isRetryable(request)) if err != nil { return err @@ -180,6 +313,16 @@ func (c *Client) sendWithSignatureV3(request tchttp.Request, response tchttp.Res } } + for k, v := range request.GetHeader() { + switch k { + case "X-TC-Action", "X-TC-Version", "X-TC-Timestamp", "X-TC-RequestClient", + "X-TC-Language", "X-TC-Region", "X-TC-Token": + c.logger.Printf("Skip header \"%s\": can not specify built-in header", k) + default: + headers[k] = v + } + } + if !isOctetStream && request.GetContentType() == octetStream { isOctetStream = true b, _ := json.Marshal(request) @@ -301,16 +444,26 @@ func (c *Client) sendWithSignatureV3(request tchttp.Request, response tchttp.Res // send http request func (c *Client) sendHttp(request *http.Request) (response *http.Response, err error) { - if c.debug { + if c.debug && request != nil { outBytes, err := httputil.DumpRequest(request, true) if err != nil { - log.Printf("[ERROR] dump request failed because %s", err) - return nil, err + c.logger.Printf("[ERROR] dump request failed: %s", err) + } else { + c.logger.Printf("[DEBUG] http request: %s", outBytes) } - log.Printf("[DEBUG] http request = %s", outBytes) } response, err = c.httpClient.Do(request) + + if c.debug && response != nil { + out, err := httputil.DumpResponse(response, true) + if err != nil { + c.logger.Printf("[ERROR] dump response failed: %s", err) + } else { + c.logger.Printf("[DEBUG] http response: %s", out) + } + } + return response, err } @@ -319,11 +472,24 @@ func (c *Client) GetRegion() string { } func (c *Client) Init(region string) *Client { - c.httpClient = &http.Client{} + + if DefaultHttpClient == nil { + // try not to modify http.DefaultTransport if possible + // since we could possibly modify Transport.Proxy + transport := http.DefaultTransport + if ht, ok := transport.(*http.Transport); ok { + transport = ht.Clone() + } + + c.httpClient = &http.Client{Transport: transport} + } else { + c.httpClient = DefaultHttpClient + } + c.region = region c.signMethod = "TC3-HMAC-SHA256" c.debug = false - log.SetFlags(log.LstdFlags | log.Lshortfile) + c.logger = log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile) return c } @@ -337,6 +503,32 @@ func (c *Client) WithCredential(cred CredentialIface) *Client { return c } +func (c *Client) WithRequestClient(rc string) *Client { + const reRequestClient = "^[0-9a-zA-Z-_ ,;.]+$" + + if len(rc) > 128 { + c.logger.Printf("the length of RequestClient should be within 128 characters, it will be truncated") + rc = rc[:128] + } + + match, err := regexp.MatchString(reRequestClient, rc) + if err != nil { + c.logger.Printf("regexp is wrong: %s", reRequestClient) + return c + } + if !match { + c.logger.Printf("RequestClient not match the regexp: %s, ignored", reRequestClient) + return c + } + + c.requestClient = rc + return c +} + +func (c *Client) GetCredential() CredentialIface { + return c.credential +} + func (c *Client) WithProfile(clientProfile *profile.ClientProfile) *Client { c.profile = clientProfile if c.profile.DisableRegionBreaker == false { @@ -347,6 +539,22 @@ func (c *Client) WithProfile(clientProfile *profile.ClientProfile) *Client { c.httpProfile = clientProfile.HttpProfile c.debug = clientProfile.Debug c.httpClient.Timeout = time.Duration(c.httpProfile.ReqTimeout) * time.Second + if c.httpProfile.Proxy != "" { + u, err := url.Parse(c.httpProfile.Proxy) + if err != nil { + panic(err) + } + + if c.httpClient.Transport == nil { + c.logger.Printf("trying to set proxy when httpClient.Transport is nil") + } + + if _, ok := c.httpClient.Transport.(*http.Transport); ok { + c.httpClient.Transport.(*http.Transport).Proxy = http.ProxyURL(u) + } else { + c.logger.Printf("setting proxy while httpClient.Transport is not a http.Transport is not supported") + } + } return c } diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client_test.go new file mode 100644 index 000000000000..532d7a4f9a8d --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/client_test.go @@ -0,0 +1,224 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "bytes" + "io/ioutil" + "net/http" + "testing" + + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/regions" +) + +type requestWithClientToken struct { + tchttp.CommonRequest + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` +} + +func newTestRequest() *requestWithClientToken { + var testRequest = &requestWithClientToken{ + CommonRequest: *tchttp.NewCommonRequest("cvm", "2017-03-12", "RunInstances"), + ClientToken: nil, + } + return testRequest +} + +type retryErr struct{} + +func (r retryErr) Error() string { return "retry error" } +func (r retryErr) Timeout() bool { return true } +func (r retryErr) Temporary() bool { return true } + +var ( + successResp = `{"Response": {"RequestId": ""}}` + rateLimitResp = `{"Response": {"RequestId": "", "Error": {"Code": "RequestLimitExceeded"}}}` +) + +type mockRT struct { + NetworkFailures int + RateLimitFailures int + + NetworkTries int + RateLimitTries int +} + +func (s *mockRT) RoundTrip(request *http.Request) (*http.Response, error) { + if s.NetworkTries < s.NetworkFailures { + s.NetworkTries++ + return nil, retryErr{} + } + + if s.RateLimitTries < s.RateLimitFailures { + s.RateLimitTries++ + return &http.Response{StatusCode: 200, Body: ioutil.NopCloser(bytes.NewBufferString(rateLimitResp))}, nil + } + + return &http.Response{StatusCode: 200, Body: ioutil.NopCloser(bytes.NewBufferString(successResp))}, nil +} + +type testCase struct { + msg string + prof *profile.ClientProfile + request tchttp.Request + response tchttp.Response + specific mockRT + expected mockRT + success bool +} + +func TestNormalSucceedRequest(t *testing.T) { + test(t, testCase{ + prof: profile.NewClientProfile(), + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{}, + expected: mockRT{}, + success: true, + }) +} + +func TestNetworkFailedButSucceedAfterRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.NetworkFailureMaxRetries = 1 + prof.NetworkFailureRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{NetworkFailures: 1}, + expected: mockRT{NetworkTries: 1}, + success: true, + }) +} + +func TestNetworkFailedAndShouldNotRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.NetworkFailureMaxRetries = 1 + prof.NetworkFailureRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: tchttp.NewCommonRequest("cvm", "2017-03-12", "DescribeInstances"), + response: tchttp.NewCommonResponse(), + specific: mockRT{NetworkFailures: 2}, + expected: mockRT{NetworkTries: 1}, + success: false, + }) +} + +func TestNetworkFailedAfterRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.NetworkFailureMaxRetries = 1 + prof.NetworkFailureRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{NetworkFailures: 2}, + expected: mockRT{NetworkTries: 2}, + success: false, + }) +} + +func TestRateLimitButSucceedAfterRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.RateLimitExceededMaxRetries = 1 + prof.RateLimitExceededRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{RateLimitFailures: 1}, + expected: mockRT{RateLimitTries: 1}, + success: true, + }) +} + +func TestRateLimitExceededAfterRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.RateLimitExceededMaxRetries = 1 + prof.RateLimitExceededRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{RateLimitFailures: 3}, + expected: mockRT{RateLimitTries: 2}, + success: false, + }) +} + +func TestBothFailuresOccurredButSucceedAfterRetry(t *testing.T) { + prof := profile.NewClientProfile() + prof.NetworkFailureMaxRetries = 1 + prof.NetworkFailureRetryDuration = profile.ConstantDurationFunc(0) + prof.RateLimitExceededMaxRetries = 1 + prof.RateLimitExceededRetryDuration = profile.ConstantDurationFunc(0) + + test(t, testCase{ + prof: prof, + request: newTestRequest(), + response: tchttp.NewCommonResponse(), + specific: mockRT{RateLimitFailures: 1, NetworkFailures: 1}, + expected: mockRT{RateLimitTries: 1, NetworkTries: 1}, + success: true, + }) +} + +func test(t *testing.T, tc testCase) { + credential := NewCredential("", "") + client := NewCommonClient(credential, regions.Guangzhou, tc.prof) + + client.WithHttpTransport(&tc.specific) + + err := client.Send(tc.request, tc.response) + if tc.success != (err == nil) { + t.Fatalf("unexpected failed on request: %+v", err) + } + + if tc.expected.RateLimitTries != tc.specific.RateLimitTries { + t.Fatalf("unexpected rate limit retry, expected %d, got %d", + tc.expected.RateLimitTries, tc.specific.RateLimitTries) + } + + if tc.expected.NetworkTries != tc.specific.NetworkTries { + t.Fatalf("unexpected network failure retry, expected %d, got %d", + tc.expected.NetworkTries, tc.specific.NetworkTries) + } +} + +func TestClient_withRegionBreaker(t *testing.T) { + cpf := profile.NewClientProfile() + //cpf.Debug =true + cpf.DisableRegionBreaker = false + cpf.BackupEndpoint = "" + c := (&Client{}).Init("") + c.WithProfile(cpf) + if c.rb.backupEndpoint != "ap-guangzhou.tencentcloudapi.com" { + t.Errorf("want %s ,got %s", "ap-beijing", c.rb.backupEndpoint) + } + if c.rb.maxFailNum != defaultMaxFailNum { + t.Errorf("want %d ,got %d", defaultMaxFailNum, c.rb.maxFailNum) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/clienttoken.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/clienttoken.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken.go index aa6bf0fa6f2f..e1839634903b 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/clienttoken.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken_test.go new file mode 100644 index 000000000000..f0423efcc1e1 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/clienttoken_test.go @@ -0,0 +1,59 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "testing" +) + +type injectable struct { + ClientToken *string +} + +type uninjectable struct { +} + +func TestSafeInjectClientToken(t *testing.T) { + defer func() { + if e := recover(); e != nil { + t.Fatalf("panic on injecting client token: %+v", e) + } + }() + + injectableVal := new(injectable) + safeInjectClientToken(injectableVal) + if injectableVal.ClientToken == nil || len(*injectableVal.ClientToken) == 0 { + t.Fatalf("no client token injected: %+v", injectableVal) + } + + uninjectableVal := new(uninjectable) + safeInjectClientToken(uninjectableVal) +} + +var ( + exists = make(map[string]struct{}) +) + +func BenchmarkGenerateClientToken(b *testing.B) { + for i := 0; i < b.N; i++ { + token := randomClientToken() + if _, conflict := exists[token]; conflict { + b.Fatalf("conflict with generated token: %s, %d", token, i) + } + exists[token] = struct{}{} + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/common_client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/common_client.go similarity index 90% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/common_client.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/common_client.go index 5ce9549d7ff0..0e0c1681dffa 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/common_client.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/common_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,9 +17,9 @@ limitations under the License. package common import ( - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) func NewCommonClient(cred CredentialIface, region string, clientProfile *profile.ClientProfile) (c *Client) { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/credentials.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/credentials.go index 7385dba1ff35..4badafb284ca 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/credentials.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_credential.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_credential.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_credential.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_credential.go index 2f4bced772f4..89603ab1e964 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_credential.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_credential.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_provider.go similarity index 96% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_provider.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_provider.go index 7b5196eba5ed..77c712762c1b 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/cvm_role_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/cvm_role_provider.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,7 +23,7 @@ import ( "net/http" "time" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) const ( diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/env_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider.go similarity index 94% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/env_provider.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider.go index 46937e385e90..d156d206f4f1 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/env_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package common import ( "os" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) type EnvProvider struct { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider_test.go new file mode 100644 index 000000000000..4c4b3bf03485 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/env_provider_test.go @@ -0,0 +1,66 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "os" + "reflect" + "testing" +) + +func TestEnvProvider_GetCredential(t *testing.T) { + type fields struct { + secretIdENV string + secretKeyENV string + } + tests := []struct { + name string + fields fields + want CredentialIface + wantErr bool + }{ + {"valid env", fields{ + secretIdENV: "TENCENTCLOUD_SECRET_ID_test", + secretKeyENV: "TENCENTCLOUD_SECRET_KEY_test", + }, + &Credential{ + SecretId: "xxxxxx", + SecretKey: "xxxxxx", + Token: "", + }, + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + os.Setenv(tt.fields.secretIdENV, tt.want.GetSecretId()) + os.Setenv(tt.fields.secretKeyENV, tt.want.GetSecretKey()) + p := &EnvProvider{ + secretIdENV: tt.fields.secretIdENV, + secretKeyENV: tt.fields.secretKeyENV, + } + got, err := p.GetCredential() + if (err != nil) != tt.wantErr { + t.Errorf("GetCredential() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("GetCredential() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors/errors.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors/errors.go index 313626c7925d..55ad9afca4f8 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_request.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request.go similarity index 86% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_request.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request.go index ffa08b0d6118..8f25f56722d3 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_request.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import ( "encoding/json" "fmt" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) const ( @@ -31,8 +31,6 @@ type actionParameters map[string]interface{} type CommonRequest struct { *BaseRequest - // custom header, may be overwritten - header map[string]string actionParameters } @@ -55,12 +53,12 @@ func (cr *CommonRequest) SetActionParameters(data interface{}) error { switch data.(type) { case []byte: if err := json.Unmarshal(data.([]byte), &cr.actionParameters); err != nil { - msg := fmt.Sprintf("Fail to parse contents %s to json, because: %s", data.([]byte), err) + msg := fmt.Sprintf("Fail to parse contents %s to json,because: %s", data.([]byte), err) return tcerr.NewTencentCloudSDKError("ClientError.ParseJsonError", msg, "") } case string: if err := json.Unmarshal([]byte(data.(string)), &cr.actionParameters); err != nil { - msg := fmt.Sprintf("Fail to parse contents %s to json, because: %s", data.(string), err) + msg := fmt.Sprintf("Fail to parse contents %s to json,because: %s", data.(string), err) return tcerr.NewTencentCloudSDKError("ClientError.ParseJsonError", msg, "") } case map[string]interface{}: @@ -73,7 +71,7 @@ func (cr *CommonRequest) SetActionParameters(data interface{}) error { } func (cr *CommonRequest) IsOctetStream() bool { - v, ok := cr.header["Content-Type"] + v, ok := cr.GetHeader()["Content-Type"] if !ok || v != octetStream { return false } @@ -92,11 +90,17 @@ func (cr *CommonRequest) SetHeader(header map[string]string) { if header == nil { return } - cr.header = header + if cr.BaseRequest == nil { + cr.BaseRequest = &BaseRequest{} + } + cr.BaseRequest.SetHeader(header) } func (cr *CommonRequest) GetHeader() map[string]string { - return cr.header + if cr.BaseRequest == nil { + return nil + } + return cr.BaseRequest.GetHeader() } // SetOctetStreamParameters set request body to your data, and set head Content-Type to application/octet-stream @@ -107,7 +111,7 @@ func (cr *CommonRequest) SetOctetStreamParameters(header map[string]string, body header = map[string]string{} } header["Content-Type"] = octetStream - cr.header = header + cr.SetHeader(header) parameter["OctetStreamBody"] = body cr.actionParameters = parameter } diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request_test.go new file mode 100644 index 000000000000..b7bbb5f35a81 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_request_test.go @@ -0,0 +1,198 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "encoding/json" + "testing" + + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" +) + +func TestCommonRequest_SetActionParameters(t *testing.T) { + defer func() { + if e := recover(); e != nil { + t.Fatalf("panic on SetActionParameters: %+v", e) + } + }() + testCase := []struct { + data interface{} + errCode string + }{ + {[]byte("{\"a\":\"1\"}"), ""}, + {"{\"a\":\"1\"}", ""}, + {map[string]interface{}{"a": "1"}, ""}, + {[]byte("{\"a\":\"1\""), "ClientError.ParseJsonError"}, + {123, "ClientError.InvalidParameter"}, + } + cr := &CommonRequest{} + for _, tc := range testCase { + err := cr.SetActionParameters(tc.data) + if err != nil { + if te, ok := err.(*tcerr.TencentCloudSDKError); ok { + if te.GetCode() != tc.errCode { + t.Fatalf("SetActionParameters failed: expected %+v, got %+v", tc.errCode, te.GetCode()) + } + } else { + t.Fatalf("SetActionParameters failed: expected %+v, got %T", "TencentCloudSDKError", err) + } + } else { + if tc.errCode != "" { + t.Fatalf("SetActionParameters failed: expected %+v, got %+v", tc.errCode, "") + } + } + } +} + +func TestCommonRequest_JSONMarshal(t *testing.T) { + crn := NewCommonRequest("cvm", "2017-03-12", "DescribeInstances") + _ = crn.SetActionParameters(map[string]interface{}{ + "a": 1, + "b": map[string]interface{}{ + "b1": 2, + "b2": "b2", + }, + }) + + bytes, err := json.MarshalIndent(crn, "", "\t") + if err != nil || len(bytes) == 0 { + t.Fatal(err) + } +} + +func TestCommonRequest_IsOctetStream(t *testing.T) { + defer func() { + if e := recover(); e != nil { + t.Fatalf("panic on IsOctetStream: %+v", e) + } + }() + cr1 := &CommonRequest{ + BaseRequest: &BaseRequest{ + header: map[string]string{ + "Content-Type": "text/plain", + }, + }} + cr2 := &CommonRequest{ + BaseRequest: &BaseRequest{ + header: map[string]string{ + "Content-Type": octetStream, + }, + }, + actionParameters: map[string]interface{}{ + "octetstreambody": []byte{}, + }, + } + cr3 := &CommonRequest{ + BaseRequest: &BaseRequest{ + header: map[string]string{ + "Content-Type": octetStream, + }, + }, + actionParameters: map[string]interface{}{ + "OctetStreamBody": []string{}, + }, + } + cr4 := &CommonRequest{ + BaseRequest: &BaseRequest{ + header: map[string]string{ + "Content-Type": octetStream, + }, + }, + actionParameters: map[string]interface{}{ + "OctetStreamBody": []byte{}, + }, + } + + testCase := map[*CommonRequest]bool{ + cr1: false, + cr2: false, + cr3: false, + cr4: true, + } + for cr, expected := range testCase { + if val := cr.IsOctetStream(); val != expected { + t.Fatalf("IsOctetStream failed: expected %+v, got %+v", expected, val) + } + } +} + +func TestCommonRequest_SetOctetStreamParameters(t *testing.T) { + defer func() { + if e := recover(); e != nil { + t.Fatalf("panic on SetOctetStreamParameters: %+v", e) + } + }() + type param struct { + header map[string]string + body []byte + } + p1 := ¶m{ + header: map[string]string{ + "Content-Type": "text/plain", + }, + body: []byte{}, + } + p2 := ¶m{ + header: map[string]string{ + "Content-Type": octetStream, + }, + body: []byte{}, + } + testCase := map[*param]bool{ + p1: true, + p2: true, + } + cr := &CommonRequest{} + for p, wanted := range testCase { + cr.SetOctetStreamParameters(p.header, p.body) + if val := cr.IsOctetStream(); val != wanted { + t.Fatalf("SetOctetStreamParameters failed: expected %+v, got %+v", wanted, val) + } + } +} + +func TestCommonRequest_Header(t *testing.T) { + r := &CommonRequest{} + + const ( + traceKey = "X-TC-TraceId" + traceVal = "ffe0c072-8a5d-4e17-8887-a8a60252abca" + ) + + if r.GetHeader() != nil { + t.Fatal("default header MUST be nil") + } + + r.SetHeader(nil) + if r.GetHeader() != nil { + t.Fatal("SetHeader(nil) MUST not replace nil map with empty map") + } + + r.SetHeader(map[string]string{traceKey: traceVal}) + if r.GetHeader()[traceKey] != traceVal { + t.Fatal("SetHeader failed") + } + + r.SetHeader(nil) + if r.GetHeader() == nil { + t.Fatal("SetHeader(nil) MUST not overwrite existing header (for backward compatibility)") + } + + if r.GetHeader()[traceKey] != traceVal { + t.Fatal("SetHeader(nil) MUST not overwrite existing header (for backward compatibility)") + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_response.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_response.go similarity index 96% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_response.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_response.go index 0c8698f88d42..9dfeb23cdb41 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/common_response.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/common_response.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request.go similarity index 91% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request.go index c2f4f08e73ad..a61b9b449cc2 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -55,6 +55,8 @@ type Request interface { GetVersion() string GetContentType() string GetContext() context.Context + GetHeader() map[string]string + GetSkipSign() bool SetScheme(string) SetRootDomain(string) SetDomain(string) @@ -63,6 +65,8 @@ type Request interface { SetContentType(string) SetBody([]byte) SetContext(context.Context) + SetHeader(header map[string]string) + SetSkipSign(skip bool) } type BaseRequest struct { @@ -72,8 +76,10 @@ type BaseRequest struct { rootDomain string domain string path string + skipSign bool params map[string]string formParams map[string]string + header map[string]string service string version string @@ -204,6 +210,25 @@ func (r *BaseRequest) SetContext(ctx context.Context) { r.context = ctx } +func (r *BaseRequest) GetHeader() map[string]string { + return r.header +} + +func (r *BaseRequest) SetHeader(header map[string]string) { + if header == nil { + return + } + r.header = header +} + +func (r *BaseRequest) GetSkipSign() bool { + return r.skipSign +} + +func (r *BaseRequest) SetSkipSign(skip bool) { + r.skipSign = skip +} + func GetUrlQueriesEncoded(params map[string]string) string { values := url.Values{} for key, value := range params { @@ -247,7 +272,7 @@ func GetServiceDomain(service string) (domain string) { return } -func CompleteCommonParams(request Request, region string) { +func CompleteCommonParams(request Request, region string, requestClient string) { params := request.GetParams() params["Region"] = region if request.GetVersion() != "" { @@ -256,7 +281,10 @@ func CompleteCommonParams(request Request, region string) { params["Action"] = request.GetAction() params["Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10) params["Nonce"] = strconv.Itoa(rand.Int()) - params["RequestClient"] = "SDK_GO_1.0.335" + params["RequestClient"] = "SDK_GO_1.0.721" + if requestClient != "" { + params["RequestClient"] += ": " + requestClient + } } func ConstructParams(req Request) (err error) { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request_test.go new file mode 100644 index 000000000000..aa847d577e0d --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/request_test.go @@ -0,0 +1,51 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import "testing" + +func TestBaseRequest_Header(t *testing.T) { + r := &BaseRequest{} + + const ( + traceKey = "X-TC-TraceId" + traceVal = "ffe0c072-8a5d-4e17-8887-a8a60252abca" + ) + + if r.GetHeader() != nil { + t.Fatal("default header MUST be nil") + } + + r.SetHeader(nil) + if r.GetHeader() != nil { + t.Fatal("SetHeader(nil) MUST not replace nil map with empty map") + } + + r.SetHeader(map[string]string{traceKey: traceVal}) + if r.GetHeader()[traceKey] != traceVal { + t.Fatal("SetHeader failed") + } + + r.SetHeader(nil) + if r.GetHeader() == nil { + t.Fatal("SetHeader(nil) MUST not overwrite existing header (for backward compatibility)") + } + + if r.GetHeader()[traceKey] != traceVal { + t.Fatal("SetHeader(nil) MUST not overwrite existing header (for backward compatibility)") + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/response.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/response.go index 1b0e982cdd19..83d56ee295d1 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http/response.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import ( //"log" "net/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) type Response interface { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ini.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini.go similarity index 96% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ini.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini.go index fbdb7f9229c7..df04e4d1fb6d 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ini.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import ( "io/ioutil" "strings" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) var ( diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini_test.go new file mode 100644 index 000000000000..cd01fde3d797 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ini_test.go @@ -0,0 +1,78 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "testing" +) + +func Test_openFile(t *testing.T) { + type args struct { + path string + } + tests := []struct { + name string + args args + wantData []byte + wantErr bool + }{ + { + "invalid path", args{path: "./testdata"}, []byte{}, true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := openFile(tt.args.path) + if (err != nil) != tt.wantErr { + t.Errorf("openFile() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} + +func Test_parse(t *testing.T) { + type args struct { + path string + } + tests := []struct { + name string + args args + want *sections + wantErr bool + }{ + {"valid ini", args{path: "./testdata_valid.ini"}, nil, false}, + {"invalid ini", args{"./testdata_invalid.ini"}, nil, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parse(tt.args.path) + if (err != nil) != tt.wantErr { + t.Errorf("parse() error = %v, wantErr %v", err, tt.wantErr) + return + } + if err == nil { + if got.section("default").key("key1").string() == "" { + t.Errorf("parse() error:not get default.key1 value") + } + if _, e := got.section("custom").key("customKey2").bool(); e != nil { + t.Errorf("parse() error:not get custom.customKey2 value") + } + } + }) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/log.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/log.go new file mode 100644 index 000000000000..12a2384eaa6d --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/log.go @@ -0,0 +1,26 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +type Logger interface { + Printf(format string, args ...interface{}) +} + +func (c *Client) WithLogger(logger Logger) *Client { + c.logger = logger + return c +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/netretry.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry.go similarity index 91% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/netretry.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry.go index f5ff9ac62503..719376f919ba 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/netretry.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,14 +18,13 @@ package common import ( "fmt" - "log" "net" "net/http" "reflect" "time" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) const ( @@ -49,7 +48,7 @@ func (c *Client) sendWithNetworkFailureRetry(req *http.Request, retryable bool) if err, ok := err.(net.Error); ok && (err.Timeout() || err.Temporary()) { duration := durationFunc(idx) if c.debug { - log.Printf(tplNetworkFailureRetry, idx, maxRetries, duration.Seconds(), err.Error()) + c.logger.Printf(tplNetworkFailureRetry, idx, maxRetries, duration.Seconds(), err.Error()) } time.Sleep(duration) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry_test.go new file mode 100644 index 000000000000..769556376c4a --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/netretry_test.go @@ -0,0 +1,33 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "testing" +) + +func TestIsRetryable(t *testing.T) { + examples := map[interface{}]bool{ + new(injectable): true, + new(uninjectable): false, + } + for msg, expected := range examples { + if val := isRetryable(msg); val != expected { + t.Fatalf("retryable failed: expected %+v, got %+v", expected, val) + } + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/oidc_role_arn_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/oidc_role_arn_provider.go new file mode 100644 index 000000000000..27809fab4c87 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/oidc_role_arn_provider.go @@ -0,0 +1,151 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "encoding/json" + "errors" + "io/ioutil" + "os" + "strconv" + "time" + + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" +) + +type OIDCRoleArnProvider struct { + region string + providerId string + webIdentityToken string + roleArn string + roleSessionName string + durationSeconds int64 +} + +type oidcStsRsp struct { + Response struct { + Credentials struct { + Token string `json:"Token"` + TmpSecretId string `json:"TmpSecretId"` + TmpSecretKey string `json:"TmpSecretKey"` + } `json:"Credentials"` + ExpiredTime int `json:"ExpiredTime"` + Expiration time.Time `json:"Expiration"` + RequestId string `json:"RequestId"` + } `json:"Response"` +} + +func NewOIDCRoleArnProvider(region, providerId, webIdentityToken, roleArn, roleSessionName string, durationSeconds int64) *OIDCRoleArnProvider { + return &OIDCRoleArnProvider{ + region: region, + providerId: providerId, + webIdentityToken: webIdentityToken, + roleArn: roleArn, + roleSessionName: roleSessionName, + durationSeconds: durationSeconds, + } +} + +// DefaultTkeOIDCRoleArnProvider returns a OIDCRoleArnProvider with some default options: +// 1. providerId will be environment var TKE_PROVIDER_ID +// 2. webIdentityToken will be the content of file specified by env TKE_WEB_IDENTITY_TOKEN_FILE +// 3. roleArn will be env TKE_ROLE_ARN +// 4. roleSessionName will be "tencentcloud-go-sdk-" + timestamp +// 5. durationSeconds will be 7200s +func DefaultTkeOIDCRoleArnProvider() (*OIDCRoleArnProvider, error) { + reg := os.Getenv("TKE_REGION") + if reg == "" { + return nil, errors.New("env TKE_REGION not exist") + } + + providerId := os.Getenv("TKE_PROVIDER_ID") + if providerId == "" { + return nil, errors.New("env TKE_PROVIDER_ID not exist") + } + + tokenFile := os.Getenv("TKE_WEB_IDENTITY_TOKEN_FILE") + if tokenFile == "" { + return nil, errors.New("env TKE_WEB_IDENTITY_TOKEN_FILE not exist") + } + tokenBytes, err := ioutil.ReadFile(tokenFile) + if err != nil { + return nil, err + } + + roleArn := os.Getenv("TKE_ROLE_ARN") + if roleArn == "" { + return nil, errors.New("env TKE_ROLE_ARN not exist") + } + + sessionName := defaultSessionName + strconv.FormatInt(time.Now().UnixNano()/1000, 10) + + return NewOIDCRoleArnProvider(reg, providerId, string(tokenBytes), roleArn, sessionName, defaultDurationSeconds), nil +} + +func (r *OIDCRoleArnProvider) GetCredential() (CredentialIface, error) { + const ( + service = "sts" + version = "2018-08-13" + action = "AssumeRoleWithWebIdentity" + ) + if r.durationSeconds > 43200 || r.durationSeconds <= 0 { + return nil, tcerr.NewTencentCloudSDKError(creErr, "AssumeRoleWithWebIdentity durationSeconds should be in the range of 0~43200s", "") + } + cpf := profile.NewClientProfile() + cpf.HttpProfile.Endpoint = endpoint + cpf.HttpProfile.ReqMethod = "POST" + + client := NewCommonClient(nil, r.region, cpf) + request := tchttp.NewCommonRequest(service, version, action) + request.SetSkipSign(true) + + params := map[string]interface{}{ + "ProviderId": r.providerId, + "WebIdentityToken": r.webIdentityToken, + "RoleArn": r.roleArn, + "RoleSessionName": r.roleSessionName, + "DurationSeconds": r.durationSeconds, + } + err := request.SetActionParameters(params) + if err != nil { + return nil, err + } + + response := tchttp.NewCommonResponse() + err = client.Send(request, response) + if err != nil { + return nil, err + } + rspSt := new(oidcStsRsp) + + if err = json.Unmarshal(response.GetBody(), rspSt); err != nil { + return nil, tcerr.NewTencentCloudSDKError(creErr, err.Error(), "") + } + + return &RoleArnCredential{ + roleArn: r.roleArn, + roleSessionName: r.roleSessionName, + durationSeconds: r.durationSeconds, + expiredTime: int64(rspSt.Response.ExpiredTime), + token: rspSt.Response.Credentials.Token, + tmpSecretId: rspSt.Response.Credentials.TmpSecretId, + tmpSecretKey: rspSt.Response.Credentials.TmpSecretKey, + source: r, + }, nil +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile.go index 113068ccda6e..565244f43937 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile_test.go new file mode 100644 index 000000000000..60849f00a175 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/client_profile_test.go @@ -0,0 +1,49 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package profile + +import ( + "math/rand" + "testing" + "time" +) + +func TestExponentialBackoff(t *testing.T) { + expected := []time.Duration{ + 1 * time.Second, + 2 * time.Second, + 4 * time.Second, + 8 * time.Second, + 16 * time.Second, + 32 * time.Second, + 64 * time.Second, + 128 * time.Second, + } + for i := 0; i < len(expected); i++ { + if ExponentialBackoff(i) != expected[i] { + t.Fatalf("unexpected retry time, %+v expected, got %+v", expected[i], ExponentialBackoff(i)) + } + } +} + +func TestConstantDurationFunc(t *testing.T) { + wanted := time.Duration(rand.Int()%100) * time.Second + actual := ConstantDurationFunc(wanted)(rand.Int()) + if actual != wanted { + t.Fatalf("unexpected retry time, %+v expected, got %+v", wanted, actual) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/http_profile.go similarity index 94% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/http_profile.go index 9acd6833324e..69987ebd4bb3 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile/http_profile.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ type HttpProfile struct { Endpoint string // Deprecated, use Scheme instead Protocol string + Proxy string } func NewHttpProfile() *HttpProfile { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile_provider.go similarity index 97% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile_provider.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile_provider.go index db27925ece47..40b184723ebc 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile_provider.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import ( "path/filepath" "runtime" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) const ( diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider.go similarity index 93% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider.go index fc8a53884f78..5c2946a080d2 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ limitations under the License. package common -import tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +import tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" var ( envNotSet = tcerr.NewTencentCloudSDKError(creErr, "could not find environmental variable", "") diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider_chain.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider_chain.go similarity index 94% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider_chain.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider_chain.go index cedf5eac6db4..e1e1cee13e6e 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/provider_chain.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/provider_chain.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ limitations under the License. package common import ( - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) type ProviderChain struct { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ratelimitretry.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ratelimitretry.go similarity index 61% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ratelimitretry.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ratelimitretry.go index 3bae90fce6cc..f112ccfe6659 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ratelimitretry.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/ratelimitretry.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,14 +18,16 @@ package common import ( "bytes" + "compress/flate" + "compress/gzip" + "fmt" "io" "io/ioutil" - "log" "net/http" "time" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" ) const ( @@ -45,14 +47,17 @@ func (c *Client) sendWithRateLimitRetry(req *http.Request, retryable bool) (resp return } - resp.Body, shadow = shadowRead(resp.Body) + shadow, err = shadowRead(resp) + if err != nil { + return resp, err + } err = tchttp.ParseErrorFromHTTPResponse(shadow) // should not sleep on last request if err, ok := err.(*errors.TencentCloudSDKError); ok && err.Code == codeLimitExceeded && idx < maxRetries { duration := durationFunc(idx) if c.debug { - log.Printf(tplRateLimitRetry, idx, maxRetries, duration.Seconds(), err.Error()) + c.logger.Printf(tplRateLimitRetry, idx, maxRetries, duration.Seconds(), err.Error()) } time.Sleep(duration) @@ -65,10 +70,40 @@ func (c *Client) sendWithRateLimitRetry(req *http.Request, retryable bool) (resp return resp, err } -func shadowRead(reader io.ReadCloser) (io.ReadCloser, []byte) { - val, err := ioutil.ReadAll(reader) +func shadowRead(resp *http.Response) ([]byte, error) { + var reader io.ReadCloser + var err error + var val []byte + + enc := resp.Header.Get("Content-Encoding") + switch enc { + case "": + reader = resp.Body + case "deflate": + reader = flate.NewReader(resp.Body) + case "gzip": + reader, err = gzip.NewReader(resp.Body) + if err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("Content-Encoding not support: %s", enc) + } + + val, err = ioutil.ReadAll(reader) if err != nil { - return reader, nil + return nil, err } - return ioutil.NopCloser(bytes.NewBuffer(val)), val + + err = resp.Body.Close() + if err != nil { + return nil, err + } + + resp.Body = ioutil.NopCloser(bytes.NewReader(val)) + + // delete the header in case the caller mistake the body being encoded + delete(resp.Header, "Content-Encoding") + + return val, nil } diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions/regions.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/regions/regions.go similarity index 92% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions/regions.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/regions/regions.go index 56f76296816e..b231e7e631ba 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions/regions.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/regions/regions.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -31,6 +31,8 @@ const ( GuangzhouOpen = "ap-guangzhou-open" // 中国香港 HongKong = "ap-hongkong" + // 雅加达 + Jakarta = "ap-jakarta" // 孟买 Mumbai = "ap-mumbai" // 首尔 @@ -57,4 +59,6 @@ const ( SiliconValley = "na-siliconvalley" // 多伦多 Toronto = "na-toronto" + // 圣保罗 + SaoPaulo = "sa-saopaulo" ) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_credential.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_credential.go similarity index 95% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_credential.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_credential.go index 8d17301d5157..97a66296bdf5 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_credential.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_credential.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ type RoleArnCredential struct { token string tmpSecretId string tmpSecretKey string - source *RoleArnProvider + source Provider } func (c *RoleArnCredential) GetSecretId() string { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_provider.go similarity index 93% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_provider.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_provider.go index 3c5e3b4d5ce2..f3569dbaeee0 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/role_arn_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/role_arn_provider.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,10 +21,10 @@ import ( "strconv" "time" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/regions" ) const ( diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/section.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section.go similarity index 96% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/section.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section.go index 2ebfc05c99a1..fbcd2d36eccb 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/section.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section_test.go new file mode 100644 index 000000000000..1d64db4cc618 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/section_test.go @@ -0,0 +1,101 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "reflect" + "testing" +) + +func Test_section_key(t *testing.T) { + type fields struct { + content map[string]*value + } + type args struct { + name string + } + tests := []struct { + name string + fields fields + args args + want *value + }{ + { + "contain key", + fields{content: map[string]*value{ + "key1": {raw: "value1"}, + }, + }, + args{name: "key1"}, &value{raw: "value1"}, + }, + { + "not contain key", + fields{content: map[string]*value{}}, + args{name: "notkey"}, + &value{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + s := §ion{ + content: tt.fields.content, + } + if got := s.key(tt.args.name); !reflect.DeepEqual(got, tt.want) { + t.Errorf("key() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_sections_section(t *testing.T) { + type fields struct { + contains map[string]*section + } + type args struct { + name string + } + tests := []struct { + name string + fields fields + args args + want *section + }{ + { + "contain key", + fields{contains: map[string]*section{ + "default": {content: map[string]*value{"key1": {raw: "value1"}}}}, + }, + args{name: "default"}, §ion{content: map[string]*value{"key1": {raw: "value1"}}}, + }, + { + "not contain key", + fields{contains: map[string]*section{}}, + args{name: "notkey"}, + §ion{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ss := sections{ + contains: tt.fields.contains, + } + if got := ss.section(tt.args.name); !reflect.DeepEqual(got, tt.want) { + t.Errorf("section() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/sign.go similarity index 92% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/sign.go index 44c5be0c6bec..7ad5906190d9 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/sign.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,9 +23,10 @@ import ( "crypto/sha256" "encoding/base64" "encoding/hex" + "hash" "sort" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" ) const ( @@ -34,9 +35,12 @@ const ( ) func Sign(s, secretKey, method string) string { - hashed := hmac.New(sha1.New, []byte(secretKey)) - if method == SHA256 { + var hashed hash.Hash + switch method { + case SHA256: hashed = hmac.New(sha256.New, []byte(secretKey)) + default: + hashed = hmac.New(sha1.New, []byte(secretKey)) } hashed.Write([]byte(s)) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/testdata_invalid.ini b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/testdata_invalid.ini similarity index 100% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/testdata_invalid.ini rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/testdata_invalid.ini diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/testdata_valid.ini b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/testdata_valid.ini similarity index 79% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/testdata_valid.ini rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/testdata_valid.ini index b120ba194d4d..40a6dd3a8c46 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/testdata_valid.ini +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/testdata_valid.ini @@ -1,4 +1,4 @@ -app=tencentcloud-sdk-go +app=tencentcloud-sdk-go-go # default [default] diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types.go similarity index 98% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types.go index 65d51155781e..d49468d769a1 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types_test.go new file mode 100644 index 000000000000..79c92691fea6 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/types_test.go @@ -0,0 +1,37 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "testing" +) + +func TestStringPtrsValues(t *testing.T) { + vals := []string{"a", "b", "c", "d"} + ptrs := StringPtrs(vals) + for i := 0; i < len(vals); i++ { + if *ptrs[i] != vals[i] { + t.Errorf("[ERROR] value %s != ptr value %s", vals[i], *ptrs[i]) + } + } + newVals := StringValues(ptrs) + for i := 0; i < len(vals); i++ { + if newVals[i] != vals[i] { + t.Errorf("[ERROR] new val %s != val %s", newVals[i], vals[i]) + } + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/value.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value.go similarity index 95% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/value.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value.go index b0fa73abc9b1..acdc1534b55b 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/value.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import ( "fmt" "strconv" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" ) type value struct { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value_test.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value_test.go new file mode 100644 index 000000000000..f72777b76ae4 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/value_test.go @@ -0,0 +1,198 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import "testing" + +func Test_value_String(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want string + }{ + {"valid", fields{"valid string"}, "valid string"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + if got := v.string(); got != tt.want { + t.Errorf("String() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_value_bool(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want bool + wantErr bool + }{ + {"valid Bool", fields{raw: "true"}, true, false}, + {"valid Bool", fields{raw: "y"}, true, false}, + {"invalid Bool", fields{raw: "TrUe"}, false, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + got, err := v.bool() + if (err != nil) != tt.wantErr { + t.Errorf("Bool() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("Bool() got = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_value_float32(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want float32 + wantErr bool + }{ + {"valid Float32", fields{raw: "1.23"}, 1.23, false}, + {"valid Float32", fields{raw: "0.33333"}, 0.33333, false}, + {"invalid Float32", fields{raw: "1.23.23"}, 0, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + got, err := v.float32() + if (err != nil) != tt.wantErr { + t.Errorf("Float32() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("Float32() got = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_value_float64(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want float64 + wantErr bool + }{ + {"valid Float64", fields{raw: "1.23"}, 1.23, false}, + {"valid Float64", fields{raw: "0.33333"}, 0.33333, false}, + {"invalid Float64", fields{raw: "1.23.23"}, 0, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + got, err := v.float64() + if (err != nil) != tt.wantErr { + t.Errorf("Float64() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("Float64() got = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_value_int(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want int + wantErr bool + }{ + {"valid int", fields{raw: "1"}, 1, false}, + {"valid int", fields{raw: "99887766"}, 99887766, false}, + {"invalid int", fields{raw: "1987a"}, 0, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + got, err := v.int() + if (err != nil) != tt.wantErr { + t.Errorf("int() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("int() got = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_value_int64(t *testing.T) { + type fields struct { + raw string + } + tests := []struct { + name string + fields fields + want int64 + wantErr bool + }{ + // TODO: Add test cases. + {"valid int", fields{raw: "1"}, 1, false}, + {"valid int", fields{raw: "99887766"}, 99887766, false}, + {"invalid int", fields{raw: "1987a"}, 0, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := &value{ + raw: tt.fields.raw, + } + got, err := v.int64() + if (err != nil) != tt.wantErr { + t.Errorf("int64() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("int64() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/doc.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/doc.go new file mode 100644 index 000000000000..f0f00fec6d03 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package doc diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/client.go similarity index 74% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/client.go index a1543aad2c00..33c8e144f15f 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,10 +18,11 @@ package v20170312 import ( "context" + "errors" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) const APIVersion = "2017-03-12" @@ -50,6 +51,7 @@ func NewAllocateHostsRequest() (request *AllocateHostsRequest) { request = &AllocateHostsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "AllocateHosts") return @@ -71,6 +73,7 @@ func NewAllocateHostsResponse() (response *AllocateHostsResponse) { // // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" @@ -78,13 +81,7 @@ func NewAllocateHostsResponse() (response *AllocateHostsResponse) { // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // RESOURCEINSUFFICIENT_ZONESOLDOUTFORSPECIFIEDINSTANCE = "ResourceInsufficient.ZoneSoldOutForSpecifiedInstance" func (c *Client) AllocateHosts(request *AllocateHostsRequest) (response *AllocateHostsResponse, err error) { - if request == nil { - request = NewAllocateHostsRequest() - } - - response = NewAllocateHostsResponse() - err = c.Send(request, response) - return + return c.AllocateHostsWithContext(context.Background(), request) } // AllocateHosts @@ -96,6 +93,7 @@ func (c *Client) AllocateHosts(request *AllocateHostsRequest) (response *Allocat // // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" @@ -106,6 +104,11 @@ func (c *Client) AllocateHostsWithContext(ctx context.Context, request *Allocate if request == nil { request = NewAllocateHostsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AllocateHosts require credential") + } + request.SetContext(ctx) response = NewAllocateHostsResponse() @@ -117,6 +120,7 @@ func NewAssociateInstancesKeyPairsRequest() (request *AssociateInstancesKeyPairs request = &AssociateInstancesKeyPairsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "AssociateInstancesKeyPairs") return @@ -149,28 +153,30 @@ func NewAssociateInstancesKeyPairsResponse() (response *AssociateInstancesKeyPai // INVALIDKEYPAIRID_MALFORMED = "InvalidKeyPairId.Malformed" // INVALIDKEYPAIRID_NOTFOUND = "InvalidKeyPairId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_KEYPAIRNOTSUPPORTED = "InvalidParameterValue.KeyPairNotSupported" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" +// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" // UNSUPPORTEDOPERATION_INSTANCEOSWINDOWS = "UnsupportedOperation.InstanceOsWindows" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) AssociateInstancesKeyPairs(request *AssociateInstancesKeyPairsRequest) (response *AssociateInstancesKeyPairsResponse, err error) { - if request == nil { - request = NewAssociateInstancesKeyPairsRequest() - } - - response = NewAssociateInstancesKeyPairsResponse() - err = c.Send(request, response) - return + return c.AssociateInstancesKeyPairsWithContext(context.Background(), request) } // AssociateInstancesKeyPairs @@ -193,24 +199,37 @@ func (c *Client) AssociateInstancesKeyPairs(request *AssociateInstancesKeyPairsR // INVALIDKEYPAIRID_MALFORMED = "InvalidKeyPairId.Malformed" // INVALIDKEYPAIRID_NOTFOUND = "InvalidKeyPairId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_KEYPAIRNOTSUPPORTED = "InvalidParameterValue.KeyPairNotSupported" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" +// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" // UNSUPPORTEDOPERATION_INSTANCEOSWINDOWS = "UnsupportedOperation.InstanceOsWindows" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) AssociateInstancesKeyPairsWithContext(ctx context.Context, request *AssociateInstancesKeyPairsRequest) (response *AssociateInstancesKeyPairsResponse, err error) { if request == nil { request = NewAssociateInstancesKeyPairsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateInstancesKeyPairs require credential") + } + request.SetContext(ctx) response = NewAssociateInstancesKeyPairsResponse() @@ -222,6 +241,7 @@ func NewAssociateSecurityGroupsRequest() (request *AssociateSecurityGroupsReques request = &AssociateSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "AssociateSecurityGroups") return @@ -244,6 +264,7 @@ func NewAssociateSecurityGroupsResponse() (response *AssociateSecurityGroupsResp // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" @@ -256,13 +277,7 @@ func NewAssociateSecurityGroupsResponse() (response *AssociateSecurityGroupsResp // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" func (c *Client) AssociateSecurityGroups(request *AssociateSecurityGroupsRequest) (response *AssociateSecurityGroupsResponse, err error) { - if request == nil { - request = NewAssociateSecurityGroupsRequest() - } - - response = NewAssociateSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.AssociateSecurityGroupsWithContext(context.Background(), request) } // AssociateSecurityGroups @@ -275,6 +290,7 @@ func (c *Client) AssociateSecurityGroups(request *AssociateSecurityGroupsRequest // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" @@ -290,6 +306,11 @@ func (c *Client) AssociateSecurityGroupsWithContext(ctx context.Context, request if request == nil { request = NewAssociateSecurityGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateSecurityGroups require credential") + } + request.SetContext(ctx) response = NewAssociateSecurityGroupsResponse() @@ -297,10 +318,155 @@ func (c *Client) AssociateSecurityGroupsWithContext(ctx context.Context, request return } +func NewConfigureChcAssistVpcRequest() (request *ConfigureChcAssistVpcRequest) { + request = &ConfigureChcAssistVpcRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "ConfigureChcAssistVpc") + + return +} + +func NewConfigureChcAssistVpcResponse() (response *ConfigureChcAssistVpcResponse) { + response = &ConfigureChcAssistVpcResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ConfigureChcAssistVpc +// 配置CHC物理服务器的带外和部署网络。传入带外网络和部署网络信息 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_AMOUNTNOTEQUAL = "InvalidParameterValue.AmountNotEqual" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// LIMITEXCEEDED_VPCSUBNETNUM = "LimitExceeded.VpcSubnetNum" +// VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" +// VPCIPISUSED = "VpcIpIsUsed" +func (c *Client) ConfigureChcAssistVpc(request *ConfigureChcAssistVpcRequest) (response *ConfigureChcAssistVpcResponse, err error) { + return c.ConfigureChcAssistVpcWithContext(context.Background(), request) +} + +// ConfigureChcAssistVpc +// 配置CHC物理服务器的带外和部署网络。传入带外网络和部署网络信息 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_AMOUNTNOTEQUAL = "InvalidParameterValue.AmountNotEqual" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// LIMITEXCEEDED_VPCSUBNETNUM = "LimitExceeded.VpcSubnetNum" +// VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" +// VPCIPISUSED = "VpcIpIsUsed" +func (c *Client) ConfigureChcAssistVpcWithContext(ctx context.Context, request *ConfigureChcAssistVpcRequest) (response *ConfigureChcAssistVpcResponse, err error) { + if request == nil { + request = NewConfigureChcAssistVpcRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ConfigureChcAssistVpc require credential") + } + + request.SetContext(ctx) + + response = NewConfigureChcAssistVpcResponse() + err = c.Send(request, response) + return +} + +func NewConfigureChcDeployVpcRequest() (request *ConfigureChcDeployVpcRequest) { + request = &ConfigureChcDeployVpcRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "ConfigureChcDeployVpc") + + return +} + +func NewConfigureChcDeployVpcResponse() (response *ConfigureChcDeployVpcResponse) { + response = &ConfigureChcDeployVpcResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ConfigureChcDeployVpc +// 配置CHC物理服务器部署网络 +// +// 可能返回的错误码: +// +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_AMOUNTNOTEQUAL = "InvalidParameterValue.AmountNotEqual" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_DEPLOYVPCALREADYEXISTS = "InvalidParameterValue.DeployVpcAlreadyExists" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" +// VPCIPISUSED = "VpcIpIsUsed" +func (c *Client) ConfigureChcDeployVpc(request *ConfigureChcDeployVpcRequest) (response *ConfigureChcDeployVpcResponse, err error) { + return c.ConfigureChcDeployVpcWithContext(context.Background(), request) +} + +// ConfigureChcDeployVpc +// 配置CHC物理服务器部署网络 +// +// 可能返回的错误码: +// +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_AMOUNTNOTEQUAL = "InvalidParameterValue.AmountNotEqual" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_DEPLOYVPCALREADYEXISTS = "InvalidParameterValue.DeployVpcAlreadyExists" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" +// VPCIPISUSED = "VpcIpIsUsed" +func (c *Client) ConfigureChcDeployVpcWithContext(ctx context.Context, request *ConfigureChcDeployVpcRequest) (response *ConfigureChcDeployVpcResponse, err error) { + if request == nil { + request = NewConfigureChcDeployVpcRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ConfigureChcDeployVpc require credential") + } + + request.SetContext(ctx) + + response = NewConfigureChcDeployVpcResponse() + err = c.Send(request, response) + return +} + func NewCreateDisasterRecoverGroupRequest() (request *CreateDisasterRecoverGroupRequest) { request = &CreateDisasterRecoverGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "CreateDisasterRecoverGroup") return @@ -318,16 +484,12 @@ func NewCreateDisasterRecoverGroupResponse() (response *CreateDisasterRecoverGro // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// RESOURCEINSUFFICIENT_INSUFFICIENTGROUPQUOTA = "ResourceInsufficient.InsufficientGroupQuota" func (c *Client) CreateDisasterRecoverGroup(request *CreateDisasterRecoverGroupRequest) (response *CreateDisasterRecoverGroupResponse, err error) { - if request == nil { - request = NewCreateDisasterRecoverGroupRequest() - } - - response = NewCreateDisasterRecoverGroupResponse() - err = c.Send(request, response) - return + return c.CreateDisasterRecoverGroupWithContext(context.Background(), request) } // CreateDisasterRecoverGroup @@ -335,12 +497,19 @@ func (c *Client) CreateDisasterRecoverGroup(request *CreateDisasterRecoverGroupR // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// RESOURCEINSUFFICIENT_INSUFFICIENTGROUPQUOTA = "ResourceInsufficient.InsufficientGroupQuota" func (c *Client) CreateDisasterRecoverGroupWithContext(ctx context.Context, request *CreateDisasterRecoverGroupRequest) (response *CreateDisasterRecoverGroupResponse, err error) { if request == nil { request = NewCreateDisasterRecoverGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDisasterRecoverGroup require credential") + } + request.SetContext(ctx) response = NewCreateDisasterRecoverGroupResponse() @@ -348,10 +517,66 @@ func (c *Client) CreateDisasterRecoverGroupWithContext(ctx context.Context, requ return } +func NewCreateHpcClusterRequest() (request *CreateHpcClusterRequest) { + request = &CreateHpcClusterRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "CreateHpcCluster") + + return +} + +func NewCreateHpcClusterResponse() (response *CreateHpcClusterResponse) { + response = &CreateHpcClusterResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// CreateHpcCluster +// 创建高性能计算集群 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// LIMITEXCEEDED_HPCCLUSTERQUOTA = "LimitExceeded.HpcClusterQuota" +// UNSUPPORTEDOPERATION_INSUFFICIENTCLUSTERQUOTA = "UnsupportedOperation.InsufficientClusterQuota" +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" +func (c *Client) CreateHpcCluster(request *CreateHpcClusterRequest) (response *CreateHpcClusterResponse, err error) { + return c.CreateHpcClusterWithContext(context.Background(), request) +} + +// CreateHpcCluster +// 创建高性能计算集群 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// LIMITEXCEEDED_HPCCLUSTERQUOTA = "LimitExceeded.HpcClusterQuota" +// UNSUPPORTEDOPERATION_INSUFFICIENTCLUSTERQUOTA = "UnsupportedOperation.InsufficientClusterQuota" +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" +func (c *Client) CreateHpcClusterWithContext(ctx context.Context, request *CreateHpcClusterRequest) (response *CreateHpcClusterResponse, err error) { + if request == nil { + request = NewCreateHpcClusterRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateHpcCluster require credential") + } + + request.SetContext(ctx) + + response = NewCreateHpcClusterResponse() + err = c.Send(request, response) + return +} + func NewCreateImageRequest() (request *CreateImageRequest) { request = &CreateImageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "CreateImage") return @@ -386,29 +611,40 @@ func NewCreateImageResponse() (response *CreateImageResponse) { // INVALIDPARAMETER_SYSTEMSNAPSHOTNOTFOUND = "InvalidParameter.SystemSnapshotNotFound" // INVALIDPARAMETER_VALUETOOLARGE = "InvalidParameter.ValueTooLarge" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDINSTANCETYPE = "InvalidParameterValue.PreheatNotSupportedInstanceType" +// INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDZONE = "InvalidParameterValue.PreheatNotSupportedZone" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_PREHEATIMAGESNAPSHOTOUTOFQUOTA = "LimitExceeded.PreheatImageSnapshotOutOfQuota" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINUSE_DISKROLLBACKING = "ResourceInUse.DiskRollbacking" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEUNAVAILABLE_SNAPSHOTCREATING = "ResourceUnavailable.SnapshotCreating" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDDISKFASTROLLBACK = "UnsupportedOperation.InvalidDiskFastRollback" // UNSUPPORTEDOPERATION_NOTSUPPORTINSTANCEIMAGE = "UnsupportedOperation.NotSupportInstanceImage" +// UNSUPPORTEDOPERATION_PREHEATIMAGE = "UnsupportedOperation.PreheatImage" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) CreateImage(request *CreateImageRequest) (response *CreateImageResponse, err error) { - if request == nil { - request = NewCreateImageRequest() - } - - response = NewCreateImageResponse() - err = c.Send(request, response) - return + return c.CreateImageWithContext(context.Background(), request) } // CreateImage @@ -433,25 +669,47 @@ func (c *Client) CreateImage(request *CreateImageRequest) (response *CreateImage // INVALIDPARAMETER_SYSTEMSNAPSHOTNOTFOUND = "InvalidParameter.SystemSnapshotNotFound" // INVALIDPARAMETER_VALUETOOLARGE = "InvalidParameter.ValueTooLarge" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDINSTANCETYPE = "InvalidParameterValue.PreheatNotSupportedInstanceType" +// INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDZONE = "InvalidParameterValue.PreheatNotSupportedZone" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_PREHEATIMAGESNAPSHOTOUTOFQUOTA = "LimitExceeded.PreheatImageSnapshotOutOfQuota" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINUSE_DISKROLLBACKING = "ResourceInUse.DiskRollbacking" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEUNAVAILABLE_SNAPSHOTCREATING = "ResourceUnavailable.SnapshotCreating" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDDISKFASTROLLBACK = "UnsupportedOperation.InvalidDiskFastRollback" // UNSUPPORTEDOPERATION_NOTSUPPORTINSTANCEIMAGE = "UnsupportedOperation.NotSupportInstanceImage" +// UNSUPPORTEDOPERATION_PREHEATIMAGE = "UnsupportedOperation.PreheatImage" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) CreateImageWithContext(ctx context.Context, request *CreateImageRequest) (response *CreateImageResponse, err error) { if request == nil { request = NewCreateImageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateImage require credential") + } + request.SetContext(ctx) response = NewCreateImageResponse() @@ -463,6 +721,7 @@ func NewCreateKeyPairRequest() (request *CreateKeyPairRequest) { request = &CreateKeyPairRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "CreateKeyPair") return @@ -496,15 +755,10 @@ func NewCreateKeyPairResponse() (response *CreateKeyPairResponse) { // INVALIDKEYPAIRNAMETOOLONG = "InvalidKeyPairNameTooLong" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" +// LIMITEXCEEDED_TAGRESOURCEQUOTA = "LimitExceeded.TagResourceQuota" // MISSINGPARAMETER = "MissingParameter" func (c *Client) CreateKeyPair(request *CreateKeyPairRequest) (response *CreateKeyPairResponse, err error) { - if request == nil { - request = NewCreateKeyPairRequest() - } - - response = NewCreateKeyPairResponse() - err = c.Send(request, response) - return + return c.CreateKeyPairWithContext(context.Background(), request) } // CreateKeyPair @@ -528,11 +782,17 @@ func (c *Client) CreateKeyPair(request *CreateKeyPairRequest) (response *CreateK // INVALIDKEYPAIRNAMETOOLONG = "InvalidKeyPairNameTooLong" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" +// LIMITEXCEEDED_TAGRESOURCEQUOTA = "LimitExceeded.TagResourceQuota" // MISSINGPARAMETER = "MissingParameter" func (c *Client) CreateKeyPairWithContext(ctx context.Context, request *CreateKeyPairRequest) (response *CreateKeyPairResponse, err error) { if request == nil { request = NewCreateKeyPairRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateKeyPair require credential") + } + request.SetContext(ctx) response = NewCreateKeyPairResponse() @@ -544,6 +804,7 @@ func NewCreateLaunchTemplateRequest() (request *CreateLaunchTemplateRequest) { request = &CreateLaunchTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "CreateLaunchTemplate") return @@ -569,6 +830,9 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" +// FAILEDOPERATION_NOAVAILABLEIPADDRESSCOUNTINSUBNET = "FailedOperation.NoAvailableIpAddressCountInSubnet" +// FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" +// FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_TAGKEYRESERVED = "FailedOperation.TagKeyReserved" // INSTANCESQUOTALIMITEXCEEDED = "InstancesQuotaLimitExceeded" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" @@ -581,6 +845,7 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_INVALIDIPFORMAT = "InvalidParameter.InvalidIpFormat" // INVALIDPARAMETER_LACKCORECOUNTORTHREADPERCORE = "InvalidParameter.LackCoreCountOrThreadPerCore" // INVALIDPARAMETER_PASSWORDNOTSUPPORTED = "InvalidParameter.PasswordNotSupported" @@ -594,11 +859,16 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTOFFERING = "InvalidParameterValue.InsufficientOffering" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATEDESCRIPTION = "InvalidParameterValue.InvalidLaunchTemplateDescription" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATEVERSIONDESCRIPTION = "InvalidParameterValue.InvalidLaunchTemplateVersionDescription" +// INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" @@ -606,6 +876,8 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" // INVALIDPARAMETERVALUE_SUBNETNOTEXIST = "InvalidParameterValue.SubnetNotExist" // INVALIDPARAMETERVALUE_THREADPERCOREVALUE = "InvalidParameterValue.ThreadPerCoreValue" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDNOTEXIST = "InvalidParameterValue.VpcIdNotExist" // INVALIDPARAMETERVALUE_VPCIDZONEIDNOTMATCH = "InvalidParameterValue.VpcIdZoneIdNotMatch" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" @@ -623,6 +895,7 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_DPDKINSTANCETYPEREQUIREDVPC = "MissingParameter.DPDKInstanceTypeRequiredVPC" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" +// RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" @@ -642,14 +915,8 @@ func NewCreateLaunchTemplateResponse() (response *CreateLaunchTemplateResponse) // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (response *CreateLaunchTemplateResponse, err error) { - if request == nil { - request = NewCreateLaunchTemplateRequest() - } - - response = NewCreateLaunchTemplateResponse() - err = c.Send(request, response) - return -} + return c.CreateLaunchTemplateWithContext(context.Background(), request) +} // CreateLaunchTemplate // 本接口(CreateLaunchTemplate)用于创建实例启动模板。 @@ -664,6 +931,9 @@ func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (res // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" +// FAILEDOPERATION_NOAVAILABLEIPADDRESSCOUNTINSUBNET = "FailedOperation.NoAvailableIpAddressCountInSubnet" +// FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" +// FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_TAGKEYRESERVED = "FailedOperation.TagKeyReserved" // INSTANCESQUOTALIMITEXCEEDED = "InstancesQuotaLimitExceeded" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" @@ -676,6 +946,7 @@ func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (res // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_INVALIDIPFORMAT = "InvalidParameter.InvalidIpFormat" // INVALIDPARAMETER_LACKCORECOUNTORTHREADPERCORE = "InvalidParameter.LackCoreCountOrThreadPerCore" // INVALIDPARAMETER_PASSWORDNOTSUPPORTED = "InvalidParameter.PasswordNotSupported" @@ -689,11 +960,16 @@ func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (res // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTOFFERING = "InvalidParameterValue.InsufficientOffering" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATEDESCRIPTION = "InvalidParameterValue.InvalidLaunchTemplateDescription" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATEVERSIONDESCRIPTION = "InvalidParameterValue.InvalidLaunchTemplateVersionDescription" +// INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" @@ -701,6 +977,8 @@ func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (res // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" // INVALIDPARAMETERVALUE_SUBNETNOTEXIST = "InvalidParameterValue.SubnetNotExist" // INVALIDPARAMETERVALUE_THREADPERCOREVALUE = "InvalidParameterValue.ThreadPerCoreValue" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDNOTEXIST = "InvalidParameterValue.VpcIdNotExist" // INVALIDPARAMETERVALUE_VPCIDZONEIDNOTMATCH = "InvalidParameterValue.VpcIdZoneIdNotMatch" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" @@ -718,6 +996,7 @@ func (c *Client) CreateLaunchTemplate(request *CreateLaunchTemplateRequest) (res // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_DPDKINSTANCETYPEREQUIREDVPC = "MissingParameter.DPDKInstanceTypeRequiredVPC" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" +// RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" @@ -740,6 +1019,11 @@ func (c *Client) CreateLaunchTemplateWithContext(ctx context.Context, request *C if request == nil { request = NewCreateLaunchTemplateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateLaunchTemplate require credential") + } + request.SetContext(ctx) response = NewCreateLaunchTemplateResponse() @@ -751,6 +1035,7 @@ func NewCreateLaunchTemplateVersionRequest() (request *CreateLaunchTemplateVersi request = &CreateLaunchTemplateVersionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "CreateLaunchTemplateVersion") return @@ -842,13 +1127,7 @@ func NewCreateLaunchTemplateVersionResponse() (response *CreateLaunchTemplateVer // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" func (c *Client) CreateLaunchTemplateVersion(request *CreateLaunchTemplateVersionRequest) (response *CreateLaunchTemplateVersionResponse, err error) { - if request == nil { - request = NewCreateLaunchTemplateVersionRequest() - } - - response = NewCreateLaunchTemplateVersionResponse() - err = c.Send(request, response) - return + return c.CreateLaunchTemplateVersionWithContext(context.Background(), request) } // CreateLaunchTemplateVersion @@ -933,6 +1212,11 @@ func (c *Client) CreateLaunchTemplateVersionWithContext(ctx context.Context, req if request == nil { request = NewCreateLaunchTemplateVersionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateLaunchTemplateVersion require credential") + } + request.SetContext(ctx) response = NewCreateLaunchTemplateVersionResponse() @@ -944,6 +1228,7 @@ func NewDeleteDisasterRecoverGroupsRequest() (request *DeleteDisasterRecoverGrou request = &DeleteDisasterRecoverGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteDisasterRecoverGroups") return @@ -962,17 +1247,12 @@ func NewDeleteDisasterRecoverGroupsResponse() (response *DeleteDisasterRecoverGr // 可能返回的错误码: // // FAILEDOPERATION_PLACEMENTSETNOTEMPTY = "FailedOperation.PlacementSetNotEmpty" +// INVALIDPARAMETERVALUE_DISASTERRECOVERGROUPIDMALFORMED = "InvalidParameterValue.DisasterRecoverGroupIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" // RESOURCENOTFOUND_INVALIDPLACEMENTSET = "ResourceNotFound.InvalidPlacementSet" func (c *Client) DeleteDisasterRecoverGroups(request *DeleteDisasterRecoverGroupsRequest) (response *DeleteDisasterRecoverGroupsResponse, err error) { - if request == nil { - request = NewDeleteDisasterRecoverGroupsRequest() - } - - response = NewDeleteDisasterRecoverGroupsResponse() - err = c.Send(request, response) - return + return c.DeleteDisasterRecoverGroupsWithContext(context.Background(), request) } // DeleteDisasterRecoverGroups @@ -981,6 +1261,7 @@ func (c *Client) DeleteDisasterRecoverGroups(request *DeleteDisasterRecoverGroup // 可能返回的错误码: // // FAILEDOPERATION_PLACEMENTSETNOTEMPTY = "FailedOperation.PlacementSetNotEmpty" +// INVALIDPARAMETERVALUE_DISASTERRECOVERGROUPIDMALFORMED = "InvalidParameterValue.DisasterRecoverGroupIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" // RESOURCENOTFOUND_INVALIDPLACEMENTSET = "ResourceNotFound.InvalidPlacementSet" @@ -988,6 +1269,11 @@ func (c *Client) DeleteDisasterRecoverGroupsWithContext(ctx context.Context, req if request == nil { request = NewDeleteDisasterRecoverGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteDisasterRecoverGroups require credential") + } + request.SetContext(ctx) response = NewDeleteDisasterRecoverGroupsResponse() @@ -995,10 +1281,62 @@ func (c *Client) DeleteDisasterRecoverGroupsWithContext(ctx context.Context, req return } +func NewDeleteHpcClustersRequest() (request *DeleteHpcClustersRequest) { + request = &DeleteHpcClustersRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "DeleteHpcClusters") + + return +} + +func NewDeleteHpcClustersResponse() (response *DeleteHpcClustersResponse) { + response = &DeleteHpcClustersResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteHpcClusters +// 当高性能计算集群为空, 即集群内没有任何设备时候, 可以删除该集群。 +// +// 可能返回的错误码: +// +// RESOURCEINUSE_HPCCLUSTER = "ResourceInUse.HpcCluster" +// RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" +func (c *Client) DeleteHpcClusters(request *DeleteHpcClustersRequest) (response *DeleteHpcClustersResponse, err error) { + return c.DeleteHpcClustersWithContext(context.Background(), request) +} + +// DeleteHpcClusters +// 当高性能计算集群为空, 即集群内没有任何设备时候, 可以删除该集群。 +// +// 可能返回的错误码: +// +// RESOURCEINUSE_HPCCLUSTER = "ResourceInUse.HpcCluster" +// RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" +func (c *Client) DeleteHpcClustersWithContext(ctx context.Context, request *DeleteHpcClustersRequest) (response *DeleteHpcClustersResponse, err error) { + if request == nil { + request = NewDeleteHpcClustersRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteHpcClusters require credential") + } + + request.SetContext(ctx) + + response = NewDeleteHpcClustersResponse() + err = c.Send(request, response) + return +} + func NewDeleteImagesRequest() (request *DeleteImagesRequest) { request = &DeleteImagesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteImages") return @@ -1026,17 +1364,13 @@ func NewDeleteImagesResponse() (response *DeleteImagesResponse) { // INVALIDIMAGEID_INCORRECTSTATE = "InvalidImageId.IncorrectState" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDISSHARED = "InvalidParameterValue.InvalidImageIdIsShared" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" func (c *Client) DeleteImages(request *DeleteImagesRequest) (response *DeleteImagesResponse, err error) { - if request == nil { - request = NewDeleteImagesRequest() - } - - response = NewDeleteImagesResponse() - err = c.Send(request, response) - return + return c.DeleteImagesWithContext(context.Background(), request) } // DeleteImages @@ -1054,13 +1388,20 @@ func (c *Client) DeleteImages(request *DeleteImagesRequest) (response *DeleteIma // INVALIDIMAGEID_INCORRECTSTATE = "InvalidImageId.IncorrectState" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDISSHARED = "InvalidParameterValue.InvalidImageIdIsShared" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" func (c *Client) DeleteImagesWithContext(ctx context.Context, request *DeleteImagesRequest) (response *DeleteImagesResponse, err error) { if request == nil { request = NewDeleteImagesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteImages require credential") + } + request.SetContext(ctx) response = NewDeleteImagesResponse() @@ -1072,6 +1413,7 @@ func NewDeleteKeyPairsRequest() (request *DeleteKeyPairsRequest) { request = &DeleteKeyPairsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteKeyPairs") return @@ -1102,13 +1444,7 @@ func NewDeleteKeyPairsResponse() (response *DeleteKeyPairsResponse) { // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" func (c *Client) DeleteKeyPairs(request *DeleteKeyPairsRequest) (response *DeleteKeyPairsResponse, err error) { - if request == nil { - request = NewDeleteKeyPairsRequest() - } - - response = NewDeleteKeyPairsResponse() - err = c.Send(request, response) - return + return c.DeleteKeyPairsWithContext(context.Background(), request) } // DeleteKeyPairs @@ -1132,6 +1468,11 @@ func (c *Client) DeleteKeyPairsWithContext(ctx context.Context, request *DeleteK if request == nil { request = NewDeleteKeyPairsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteKeyPairs require credential") + } + request.SetContext(ctx) response = NewDeleteKeyPairsResponse() @@ -1143,6 +1484,7 @@ func NewDeleteLaunchTemplateRequest() (request *DeleteLaunchTemplateRequest) { request = &DeleteLaunchTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteLaunchTemplate") return @@ -1168,13 +1510,7 @@ func NewDeleteLaunchTemplateResponse() (response *DeleteLaunchTemplateResponse) // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdNotExisted" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATENOTFOUND = "InvalidParameterValue.LaunchTemplateNotFound" func (c *Client) DeleteLaunchTemplate(request *DeleteLaunchTemplateRequest) (response *DeleteLaunchTemplateResponse, err error) { - if request == nil { - request = NewDeleteLaunchTemplateRequest() - } - - response = NewDeleteLaunchTemplateResponse() - err = c.Send(request, response) - return + return c.DeleteLaunchTemplateWithContext(context.Background(), request) } // DeleteLaunchTemplate @@ -1193,6 +1529,11 @@ func (c *Client) DeleteLaunchTemplateWithContext(ctx context.Context, request *D if request == nil { request = NewDeleteLaunchTemplateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteLaunchTemplate require credential") + } + request.SetContext(ctx) response = NewDeleteLaunchTemplateResponse() @@ -1204,6 +1545,7 @@ func NewDeleteLaunchTemplateVersionsRequest() (request *DeleteLaunchTemplateVers request = &DeleteLaunchTemplateVersionsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteLaunchTemplateVersions") return @@ -1232,13 +1574,7 @@ func NewDeleteLaunchTemplateVersionsResponse() (response *DeleteLaunchTemplateVe // MISSINGPARAMETER = "MissingParameter" // UNKNOWNPARAMETER = "UnknownParameter" func (c *Client) DeleteLaunchTemplateVersions(request *DeleteLaunchTemplateVersionsRequest) (response *DeleteLaunchTemplateVersionsResponse, err error) { - if request == nil { - request = NewDeleteLaunchTemplateVersionsRequest() - } - - response = NewDeleteLaunchTemplateVersionsResponse() - err = c.Send(request, response) - return + return c.DeleteLaunchTemplateVersionsWithContext(context.Background(), request) } // DeleteLaunchTemplateVersions @@ -1260,6 +1596,11 @@ func (c *Client) DeleteLaunchTemplateVersionsWithContext(ctx context.Context, re if request == nil { request = NewDeleteLaunchTemplateVersionsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteLaunchTemplateVersions require credential") + } + request.SetContext(ctx) response = NewDeleteLaunchTemplateVersionsResponse() @@ -1271,6 +1612,7 @@ func NewDescribeAccountQuotaRequest() (request *DescribeAccountQuotaRequest) { request = &DescribeAccountQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeAccountQuota") return @@ -1289,33 +1631,172 @@ func NewDescribeAccountQuotaResponse() (response *DescribeAccountQuotaResponse) // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAccountQuota(request *DescribeAccountQuotaRequest) (response *DescribeAccountQuotaResponse, err error) { + return c.DescribeAccountQuotaWithContext(context.Background(), request) +} + +// DescribeAccountQuota +// 本接口(DescribeAccountQuota)用于查询用户配额详情。 +// +// 可能返回的错误码: +// +// INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DescribeAccountQuotaWithContext(ctx context.Context, request *DescribeAccountQuotaRequest) (response *DescribeAccountQuotaResponse, err error) { if request == nil { request = NewDescribeAccountQuotaRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DescribeAccountQuota require credential") + } + + request.SetContext(ctx) + response = NewDescribeAccountQuotaResponse() err = c.Send(request, response) return } -// DescribeAccountQuota -// 本接口(DescribeAccountQuota)用于查询用户配额详情。 +func NewDescribeChcDeniedActionsRequest() (request *DescribeChcDeniedActionsRequest) { + request = &DescribeChcDeniedActionsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "DescribeChcDeniedActions") + + return +} + +func NewDescribeChcDeniedActionsResponse() (response *DescribeChcDeniedActionsResponse) { + response = &DescribeChcDeniedActionsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeChcDeniedActions +// 查询CHC物理服务器禁止做的操作,返回给用户 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) DescribeChcDeniedActions(request *DescribeChcDeniedActionsRequest) (response *DescribeChcDeniedActionsResponse, err error) { + return c.DescribeChcDeniedActionsWithContext(context.Background(), request) +} + +// DescribeChcDeniedActions +// 查询CHC物理服务器禁止做的操作,返回给用户 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) DescribeChcDeniedActionsWithContext(ctx context.Context, request *DescribeChcDeniedActionsRequest) (response *DescribeChcDeniedActionsResponse, err error) { + if request == nil { + request = NewDescribeChcDeniedActionsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeChcDeniedActions require credential") + } + + request.SetContext(ctx) + + response = NewDescribeChcDeniedActionsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeChcHostsRequest() (request *DescribeChcHostsRequest) { + request = &DescribeChcHostsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "DescribeChcHosts") + + return +} + +func NewDescribeChcHostsResponse() (response *DescribeChcHostsResponse) { + response = &DescribeChcHostsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeChcHosts +// 本接口 (DescribeChcHosts) 用于查询一个或多个CHC物理服务器详细信息。 +// +// * 可以根据实例`ID`、实例名称或者设备类型等信息来查询实例的详细信息。过滤信息详细请见过滤器`Filter`。 +// +// * 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的实例。 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDPARAMETER_ATMOSTONE = "InvalidParameter.AtMostOne" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" +// INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeChcHosts(request *DescribeChcHostsRequest) (response *DescribeChcHostsResponse, err error) { + return c.DescribeChcHostsWithContext(context.Background(), request) +} + +// DescribeChcHosts +// 本接口 (DescribeChcHosts) 用于查询一个或多个CHC物理服务器详细信息。 +// +// * 可以根据实例`ID`、实例名称或者设备类型等信息来查询实例的详细信息。过滤信息详细请见过滤器`Filter`。 +// +// * 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的实例。 // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDPARAMETER_ATMOSTONE = "InvalidParameter.AtMostOne" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" +// INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -func (c *Client) DescribeAccountQuotaWithContext(ctx context.Context, request *DescribeAccountQuotaRequest) (response *DescribeAccountQuotaResponse, err error) { +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeChcHostsWithContext(ctx context.Context, request *DescribeChcHostsRequest) (response *DescribeChcHostsResponse, err error) { if request == nil { - request = NewDescribeAccountQuotaRequest() + request = NewDescribeChcHostsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeChcHosts require credential") + } + request.SetContext(ctx) - response = NewDescribeAccountQuotaResponse() + response = NewDescribeChcHostsResponse() err = c.Send(request, response) return } @@ -1324,6 +1805,7 @@ func NewDescribeDisasterRecoverGroupQuotaRequest() (request *DescribeDisasterRec request = &DescribeDisasterRecoverGroupQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeDisasterRecoverGroupQuota") return @@ -1341,17 +1823,22 @@ func NewDescribeDisasterRecoverGroupQuotaResponse() (response *DescribeDisasterR // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDPARAMETER_ATMOSTONE = "InvalidParameter.AtMostOne" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" +// INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeDisasterRecoverGroupQuota(request *DescribeDisasterRecoverGroupQuotaRequest) (response *DescribeDisasterRecoverGroupQuotaResponse, err error) { - if request == nil { - request = NewDescribeDisasterRecoverGroupQuotaRequest() - } - - response = NewDescribeDisasterRecoverGroupQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeDisasterRecoverGroupQuotaWithContext(context.Background(), request) } // DescribeDisasterRecoverGroupQuota @@ -1359,13 +1846,29 @@ func (c *Client) DescribeDisasterRecoverGroupQuota(request *DescribeDisasterReco // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDPARAMETER_ATMOSTONE = "InvalidParameter.AtMostOne" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" +// INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" +// INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeDisasterRecoverGroupQuotaWithContext(ctx context.Context, request *DescribeDisasterRecoverGroupQuotaRequest) (response *DescribeDisasterRecoverGroupQuotaResponse, err error) { if request == nil { request = NewDescribeDisasterRecoverGroupQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDisasterRecoverGroupQuota require credential") + } + request.SetContext(ctx) response = NewDescribeDisasterRecoverGroupQuotaResponse() @@ -1377,6 +1880,7 @@ func NewDescribeDisasterRecoverGroupsRequest() (request *DescribeDisasterRecover request = &DescribeDisasterRecoverGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeDisasterRecoverGroups") return @@ -1394,17 +1898,10 @@ func NewDescribeDisasterRecoverGroupsResponse() (response *DescribeDisasterRecov // // 可能返回的错误码: // -// INVALIDFILTER = "InvalidFilter" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// INVALIDPARAMETERVALUE_DISASTERRECOVERGROUPIDMALFORMED = "InvalidParameterValue.DisasterRecoverGroupIdMalformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeDisasterRecoverGroups(request *DescribeDisasterRecoverGroupsRequest) (response *DescribeDisasterRecoverGroupsResponse, err error) { - if request == nil { - request = NewDescribeDisasterRecoverGroupsRequest() - } - - response = NewDescribeDisasterRecoverGroupsResponse() - err = c.Send(request, response) - return + return c.DescribeDisasterRecoverGroupsWithContext(context.Background(), request) } // DescribeDisasterRecoverGroups @@ -1412,13 +1909,17 @@ func (c *Client) DescribeDisasterRecoverGroups(request *DescribeDisasterRecoverG // // 可能返回的错误码: // -// INVALIDFILTER = "InvalidFilter" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// INVALIDPARAMETERVALUE_DISASTERRECOVERGROUPIDMALFORMED = "InvalidParameterValue.DisasterRecoverGroupIdMalformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeDisasterRecoverGroupsWithContext(ctx context.Context, request *DescribeDisasterRecoverGroupsRequest) (response *DescribeDisasterRecoverGroupsResponse, err error) { if request == nil { request = NewDescribeDisasterRecoverGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDisasterRecoverGroups require credential") + } + request.SetContext(ctx) response = NewDescribeDisasterRecoverGroupsResponse() @@ -1430,6 +1931,7 @@ func NewDescribeHostsRequest() (request *DescribeHostsRequest) { request = &DescribeHostsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeHosts") return @@ -1448,37 +1950,91 @@ func NewDescribeHostsResponse() (response *DescribeHostsResponse) { // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeHosts(request *DescribeHostsRequest) (response *DescribeHostsResponse, err error) { + return c.DescribeHostsWithContext(context.Background(), request) +} + +// DescribeHosts +// 本接口 (DescribeHosts) 用于获取一个或多个CDH实例的详细信息。 +// +// 可能返回的错误码: +// +// INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DescribeHostsWithContext(ctx context.Context, request *DescribeHostsRequest) (response *DescribeHostsResponse, err error) { if request == nil { request = NewDescribeHostsRequest() } - response = NewDescribeHostsResponse() - err = c.Send(request, response) + if c.GetCredential() == nil { + return nil, errors.New("DescribeHosts require credential") + } + + request.SetContext(ctx) + + response = NewDescribeHostsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeHpcClustersRequest() (request *DescribeHpcClustersRequest) { + request = &DescribeHpcClustersRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "DescribeHpcClusters") + + return +} + +func NewDescribeHpcClustersResponse() (response *DescribeHpcClustersResponse) { + response = &DescribeHpcClustersResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } return } -// DescribeHosts -// 本接口 (DescribeHosts) 用于获取一个或多个CDH实例的详细信息。 +// DescribeHpcClusters +// 查询高性能集群信息 // // 可能返回的错误码: // -// INVALIDFILTER = "InvalidFilter" -// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" -// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -func (c *Client) DescribeHostsWithContext(ctx context.Context, request *DescribeHostsRequest) (response *DescribeHostsResponse, err error) { +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" +func (c *Client) DescribeHpcClusters(request *DescribeHpcClustersRequest) (response *DescribeHpcClustersResponse, err error) { + return c.DescribeHpcClustersWithContext(context.Background(), request) +} + +// DescribeHpcClusters +// 查询高性能集群信息 +// +// 可能返回的错误码: +// +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" +func (c *Client) DescribeHpcClustersWithContext(ctx context.Context, request *DescribeHpcClustersRequest) (response *DescribeHpcClustersResponse, err error) { if request == nil { - request = NewDescribeHostsRequest() + request = NewDescribeHpcClustersRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeHpcClusters require credential") } + request.SetContext(ctx) - response = NewDescribeHostsResponse() + response = NewDescribeHpcClustersResponse() err = c.Send(request, response) return } @@ -1487,6 +2043,7 @@ func NewDescribeImageQuotaRequest() (request *DescribeImageQuotaRequest) { request = &DescribeImageQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImageQuota") return @@ -1500,39 +2057,32 @@ func NewDescribeImageQuotaResponse() (response *DescribeImageQuotaResponse) { } // DescribeImageQuota -// 本接口(DescribeImageQuota)用于查询用户帐号的镜像配额。 +// 本接口(DescribeImageQuota)用于查询用户账号的镜像配额。 // // 可能返回的错误码: // -// INVALIDFILTER = "InvalidFilter" -// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" -// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" func (c *Client) DescribeImageQuota(request *DescribeImageQuotaRequest) (response *DescribeImageQuotaResponse, err error) { - if request == nil { - request = NewDescribeImageQuotaRequest() - } - - response = NewDescribeImageQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeImageQuotaWithContext(context.Background(), request) } // DescribeImageQuota -// 本接口(DescribeImageQuota)用于查询用户帐号的镜像配额。 +// 本接口(DescribeImageQuota)用于查询用户账号的镜像配额。 // // 可能返回的错误码: // -// INVALIDFILTER = "InvalidFilter" -// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" -// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" func (c *Client) DescribeImageQuotaWithContext(ctx context.Context, request *DescribeImageQuotaRequest) (response *DescribeImageQuotaResponse, err error) { if request == nil { request = NewDescribeImageQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeImageQuota require credential") + } + request.SetContext(ctx) response = NewDescribeImageQuotaResponse() @@ -1544,6 +2094,7 @@ func NewDescribeImageSharePermissionRequest() (request *DescribeImageSharePermis request = &DescribeImageSharePermissionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImageSharePermission") return @@ -1565,16 +2116,11 @@ func NewDescribeImageSharePermissionResponse() (response *DescribeImageSharePerm // INVALIDACCOUNTIS_YOURSELF = "InvalidAccountIs.YourSelf" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // OVERQUOTA = "OverQuota" // UNAUTHORIZEDOPERATION_IMAGENOTBELONGTOACCOUNT = "UnauthorizedOperation.ImageNotBelongToAccount" func (c *Client) DescribeImageSharePermission(request *DescribeImageSharePermissionRequest) (response *DescribeImageSharePermissionResponse, err error) { - if request == nil { - request = NewDescribeImageSharePermissionRequest() - } - - response = NewDescribeImageSharePermissionResponse() - err = c.Send(request, response) - return + return c.DescribeImageSharePermissionWithContext(context.Background(), request) } // DescribeImageSharePermission @@ -1586,12 +2132,18 @@ func (c *Client) DescribeImageSharePermission(request *DescribeImageSharePermiss // INVALIDACCOUNTIS_YOURSELF = "InvalidAccountIs.YourSelf" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // OVERQUOTA = "OverQuota" // UNAUTHORIZEDOPERATION_IMAGENOTBELONGTOACCOUNT = "UnauthorizedOperation.ImageNotBelongToAccount" func (c *Client) DescribeImageSharePermissionWithContext(ctx context.Context, request *DescribeImageSharePermissionRequest) (response *DescribeImageSharePermissionResponse, err error) { if request == nil { request = NewDescribeImageSharePermissionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeImageSharePermission require credential") + } + request.SetContext(ctx) response = NewDescribeImageSharePermissionResponse() @@ -1603,6 +2155,7 @@ func NewDescribeImagesRequest() (request *DescribeImagesRequest) { request = &DescribeImagesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImages") return @@ -1624,23 +2177,26 @@ func NewDescribeImagesResponse() (response *DescribeImagesResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INVALIDPARAMETERCOEXISTIMAGEIDSFILTERS = "InvalidParameter.InvalidParameterCoexistImageIdsFilters" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUELIMIT = "InvalidParameterValue.InvalidParameterValueLimit" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_PERMISSIONDENIED = "UnauthorizedOperation.PermissionDenied" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeImages(request *DescribeImagesRequest) (response *DescribeImagesResponse, err error) { - if request == nil { - request = NewDescribeImagesRequest() - } - - response = NewDescribeImagesResponse() - err = c.Send(request, response) - return + return c.DescribeImagesWithContext(context.Background(), request) } // DescribeImages @@ -1652,19 +2208,33 @@ func (c *Client) DescribeImages(request *DescribeImagesRequest) (response *Descr // // 可能返回的错误码: // +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INVALIDPARAMETERCOEXISTIMAGEIDSFILTERS = "InvalidParameter.InvalidParameterCoexistImageIdsFilters" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUELIMIT = "InvalidParameterValue.InvalidParameterValueLimit" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_PERMISSIONDENIED = "UnauthorizedOperation.PermissionDenied" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeImagesWithContext(ctx context.Context, request *DescribeImagesRequest) (response *DescribeImagesResponse, err error) { if request == nil { request = NewDescribeImagesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeImages require credential") + } + request.SetContext(ctx) response = NewDescribeImagesResponse() @@ -1676,6 +2246,7 @@ func NewDescribeImportImageOsRequest() (request *DescribeImportImageOsRequest) { request = &DescribeImportImageOsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImportImageOs") return @@ -1693,23 +2264,26 @@ func NewDescribeImportImageOsResponse() (response *DescribeImportImageOsResponse // // 可能返回的错误码: // +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INVALIDPARAMETERCOEXISTIMAGEIDSFILTERS = "InvalidParameter.InvalidParameterCoexistImageIdsFilters" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUELIMIT = "InvalidParameterValue.InvalidParameterValueLimit" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_PERMISSIONDENIED = "UnauthorizedOperation.PermissionDenied" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeImportImageOs(request *DescribeImportImageOsRequest) (response *DescribeImportImageOsResponse, err error) { - if request == nil { - request = NewDescribeImportImageOsRequest() - } - - response = NewDescribeImportImageOsResponse() - err = c.Send(request, response) - return + return c.DescribeImportImageOsWithContext(context.Background(), request) } // DescribeImportImageOs @@ -1717,19 +2291,33 @@ func (c *Client) DescribeImportImageOs(request *DescribeImportImageOsRequest) (r // // 可能返回的错误码: // +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INVALIDPARAMETERCOEXISTIMAGEIDSFILTERS = "InvalidParameter.InvalidParameterCoexistImageIdsFilters" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUELIMIT = "InvalidParameterValue.InvalidParameterValueLimit" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_PERMISSIONDENIED = "UnauthorizedOperation.PermissionDenied" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeImportImageOsWithContext(ctx context.Context, request *DescribeImportImageOsRequest) (response *DescribeImportImageOsResponse, err error) { if request == nil { request = NewDescribeImportImageOsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeImportImageOs require credential") + } + request.SetContext(ctx) response = NewDescribeImportImageOsResponse() @@ -1741,6 +2329,7 @@ func NewDescribeInstanceFamilyConfigsRequest() (request *DescribeInstanceFamilyC request = &DescribeInstanceFamilyConfigsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceFamilyConfigs") return @@ -1762,13 +2351,7 @@ func NewDescribeInstanceFamilyConfigsResponse() (response *DescribeInstanceFamil // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" func (c *Client) DescribeInstanceFamilyConfigs(request *DescribeInstanceFamilyConfigsRequest) (response *DescribeInstanceFamilyConfigsResponse, err error) { - if request == nil { - request = NewDescribeInstanceFamilyConfigsRequest() - } - - response = NewDescribeInstanceFamilyConfigsResponse() - err = c.Send(request, response) - return + return c.DescribeInstanceFamilyConfigsWithContext(context.Background(), request) } // DescribeInstanceFamilyConfigs @@ -1783,6 +2366,11 @@ func (c *Client) DescribeInstanceFamilyConfigsWithContext(ctx context.Context, r if request == nil { request = NewDescribeInstanceFamilyConfigsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstanceFamilyConfigs require credential") + } + request.SetContext(ctx) response = NewDescribeInstanceFamilyConfigsResponse() @@ -1794,6 +2382,7 @@ func NewDescribeInstanceInternetBandwidthConfigsRequest() (request *DescribeInst request = &DescribeInstanceInternetBandwidthConfigsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceInternetBandwidthConfigs") return @@ -1820,15 +2409,11 @@ func NewDescribeInstanceInternetBandwidthConfigsResponse() (response *DescribeIn // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeInstanceInternetBandwidthConfigs(request *DescribeInstanceInternetBandwidthConfigsRequest) (response *DescribeInstanceInternetBandwidthConfigsResponse, err error) { - if request == nil { - request = NewDescribeInstanceInternetBandwidthConfigsRequest() - } - - response = NewDescribeInstanceInternetBandwidthConfigsResponse() - err = c.Send(request, response) - return + return c.DescribeInstanceInternetBandwidthConfigsWithContext(context.Background(), request) } // DescribeInstanceInternetBandwidthConfigs @@ -1845,11 +2430,18 @@ func (c *Client) DescribeInstanceInternetBandwidthConfigs(request *DescribeInsta // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeInstanceInternetBandwidthConfigsWithContext(ctx context.Context, request *DescribeInstanceInternetBandwidthConfigsRequest) (response *DescribeInstanceInternetBandwidthConfigsResponse, err error) { if request == nil { request = NewDescribeInstanceInternetBandwidthConfigsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstanceInternetBandwidthConfigs require credential") + } + request.SetContext(ctx) response = NewDescribeInstanceInternetBandwidthConfigsResponse() @@ -1861,6 +2453,7 @@ func NewDescribeInstanceTypeConfigsRequest() (request *DescribeInstanceTypeConfi request = &DescribeInstanceTypeConfigsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceTypeConfigs") return @@ -1876,7 +2469,7 @@ func NewDescribeInstanceTypeConfigsResponse() (response *DescribeInstanceTypeCon // DescribeInstanceTypeConfigs // 本接口 (DescribeInstanceTypeConfigs) 用于查询实例机型配置。 // -// * 可以根据`zone`、`instance-family`来查询实例机型配置。过滤条件详见过滤器[`Filter`](https://cloud.tencent.com/document/api/213/15753#Filter)。 +// * 可以根据`zone`、`instance-family`、`instance-type`来查询实例机型配置。过滤条件详见过滤器[`Filter`](https://cloud.tencent.com/document/api/213/15753#Filter)。 // // * 如果参数为空,返回指定地域的所有实例机型配置。 // @@ -1887,21 +2480,19 @@ func NewDescribeInstanceTypeConfigsResponse() (response *DescribeInstanceTypeCon // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstanceTypeConfigs(request *DescribeInstanceTypeConfigsRequest) (response *DescribeInstanceTypeConfigsResponse, err error) { - if request == nil { - request = NewDescribeInstanceTypeConfigsRequest() - } - - response = NewDescribeInstanceTypeConfigsResponse() - err = c.Send(request, response) - return + return c.DescribeInstanceTypeConfigsWithContext(context.Background(), request) } // DescribeInstanceTypeConfigs // 本接口 (DescribeInstanceTypeConfigs) 用于查询实例机型配置。 // -// * 可以根据`zone`、`instance-family`来查询实例机型配置。过滤条件详见过滤器[`Filter`](https://cloud.tencent.com/document/api/213/15753#Filter)。 +// * 可以根据`zone`、`instance-family`、`instance-type`来查询实例机型配置。过滤条件详见过滤器[`Filter`](https://cloud.tencent.com/document/api/213/15753#Filter)。 // // * 如果参数为空,返回指定地域的所有实例机型配置。 // @@ -1912,11 +2503,20 @@ func (c *Client) DescribeInstanceTypeConfigs(request *DescribeInstanceTypeConfig // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstanceTypeConfigsWithContext(ctx context.Context, request *DescribeInstanceTypeConfigsRequest) (response *DescribeInstanceTypeConfigsResponse, err error) { if request == nil { request = NewDescribeInstanceTypeConfigsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstanceTypeConfigs require credential") + } + request.SetContext(ctx) response = NewDescribeInstanceTypeConfigsResponse() @@ -1928,6 +2528,7 @@ func NewDescribeInstanceVncUrlRequest() (request *DescribeInstanceVncUrlRequest) request = &DescribeInstanceVncUrlRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceVncUrl") return @@ -1951,17 +2552,17 @@ func NewDescribeInstanceVncUrlResponse() (response *DescribeInstanceVncUrlRespon // // * 如果连接断开,每分钟内重新连接的次数不能超过 30 次。 // -// * 获取到 `InstanceVncUrl` 后,您需要在链接 末尾加上参数 `InstanceVncUrl=xxxx` 。 +// 获取到 `InstanceVncUrl` 后,您需要在链接 `https://img.qcloud.com/qcloud/app/active_vnc/index.html?` 末尾加上参数 `InstanceVncUrl=xxxx`。 // // - 参数 `InstanceVncUrl` :调用接口成功后会返回的 `InstanceVncUrl` 的值。 // // 最后组成的 URL 格式如下: // -// “` +// ``` // // https://img.qcloud.com/qcloud/app/active_vnc/index.html?InstanceVncUrl=wss%3A%2F%2Fbjvnc.qcloud.com%3A26789%2Fvnc%3Fs%3DaHpjWnRVMFNhYmxKdDM5MjRHNlVTSVQwajNUSW0wb2tBbmFtREFCTmFrcy8vUUNPMG0wSHZNOUUxRm5PMmUzWmFDcWlOdDJIbUJxSTZDL0RXcHZxYnZZMmRkWWZWcEZia2lyb09XMzdKNmM9 // -// “` +// ``` // // 可能返回的错误码: // @@ -1969,9 +2570,12 @@ func NewDescribeInstanceVncUrlResponse() (response *DescribeInstanceVncUrlRespon // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCESTATE = "InvalidInstanceState" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" @@ -1987,13 +2591,7 @@ func NewDescribeInstanceVncUrlResponse() (response *DescribeInstanceVncUrlRespon // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) DescribeInstanceVncUrl(request *DescribeInstanceVncUrlRequest) (response *DescribeInstanceVncUrlResponse, err error) { - if request == nil { - request = NewDescribeInstanceVncUrlRequest() - } - - response = NewDescribeInstanceVncUrlResponse() - err = c.Send(request, response) - return + return c.DescribeInstanceVncUrlWithContext(context.Background(), request) } // DescribeInstanceVncUrl @@ -2007,17 +2605,17 @@ func (c *Client) DescribeInstanceVncUrl(request *DescribeInstanceVncUrlRequest) // // * 如果连接断开,每分钟内重新连接的次数不能超过 30 次。 // -// * 获取到 `InstanceVncUrl` 后,您需要在链接 末尾加上参数 `InstanceVncUrl=xxxx` 。 +// 获取到 `InstanceVncUrl` 后,您需要在链接 `https://img.qcloud.com/qcloud/app/active_vnc/index.html?` 末尾加上参数 `InstanceVncUrl=xxxx`。 // // - 参数 `InstanceVncUrl` :调用接口成功后会返回的 `InstanceVncUrl` 的值。 // // 最后组成的 URL 格式如下: // -// “` +// ``` // // https://img.qcloud.com/qcloud/app/active_vnc/index.html?InstanceVncUrl=wss%3A%2F%2Fbjvnc.qcloud.com%3A26789%2Fvnc%3Fs%3DaHpjWnRVMFNhYmxKdDM5MjRHNlVTSVQwajNUSW0wb2tBbmFtREFCTmFrcy8vUUNPMG0wSHZNOUUxRm5PMmUzWmFDcWlOdDJIbUJxSTZDL0RXcHZxYnZZMmRkWWZWcEZia2lyb09XMzdKNmM9 // -// “` +// ``` // // 可能返回的错误码: // @@ -2025,9 +2623,12 @@ func (c *Client) DescribeInstanceVncUrl(request *DescribeInstanceVncUrlRequest) // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCESTATE = "InvalidInstanceState" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" @@ -2046,6 +2647,11 @@ func (c *Client) DescribeInstanceVncUrlWithContext(ctx context.Context, request if request == nil { request = NewDescribeInstanceVncUrlRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstanceVncUrl require credential") + } + request.SetContext(ctx) response = NewDescribeInstanceVncUrlResponse() @@ -2057,6 +2663,7 @@ func NewDescribeInstancesRequest() (request *DescribeInstancesRequest) { request = &DescribeInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstances") return @@ -2092,26 +2699,24 @@ func NewDescribeInstancesResponse() (response *DescribeInstancesResponse) { // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" // INVALIDPARAMETERVALUE_IPV6ADDRESSMALFORMED = "InvalidParameterValue.IPv6AddressMalformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDVAGUENAME = "InvalidParameterValue.InvalidVagueName" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" // INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_UUIDMALFORMED = "InvalidParameterValue.UuidMalformed" // INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstances(request *DescribeInstancesRequest) (response *DescribeInstancesResponse, err error) { - if request == nil { - request = NewDescribeInstancesRequest() - } - - response = NewDescribeInstancesResponse() - err = c.Send(request, response) - return + return c.DescribeInstancesWithContext(context.Background(), request) } // DescribeInstances @@ -2137,22 +2742,31 @@ func (c *Client) DescribeInstances(request *DescribeInstancesRequest) (response // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" // INVALIDPARAMETERVALUE_IPV6ADDRESSMALFORMED = "InvalidParameterValue.IPv6AddressMalformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDVAGUENAME = "InvalidParameterValue.InvalidVagueName" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" // INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_UUIDMALFORMED = "InvalidParameterValue.UuidMalformed" // INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstancesWithContext(ctx context.Context, request *DescribeInstancesRequest) (response *DescribeInstancesResponse, err error) { if request == nil { request = NewDescribeInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstances require credential") + } + request.SetContext(ctx) response = NewDescribeInstancesResponse() @@ -2164,6 +2778,7 @@ func NewDescribeInstancesModificationRequest() (request *DescribeInstancesModifi request = &DescribeInstancesModificationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstancesModification") return @@ -2182,19 +2797,16 @@ func NewDescribeInstancesModificationResponse() (response *DescribeInstancesModi // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" func (c *Client) DescribeInstancesModification(request *DescribeInstancesModificationRequest) (response *DescribeInstancesModificationResponse, err error) { - if request == nil { - request = NewDescribeInstancesModificationRequest() - } - - response = NewDescribeInstancesModificationResponse() - err = c.Send(request, response) - return + return c.DescribeInstancesModificationWithContext(context.Background(), request) } // DescribeInstancesModification @@ -2203,15 +2815,23 @@ func (c *Client) DescribeInstancesModification(request *DescribeInstancesModific // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" func (c *Client) DescribeInstancesModificationWithContext(ctx context.Context, request *DescribeInstancesModificationRequest) (response *DescribeInstancesModificationResponse, err error) { if request == nil { request = NewDescribeInstancesModificationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstancesModification require credential") + } + request.SetContext(ctx) response = NewDescribeInstancesModificationResponse() @@ -2223,6 +2843,7 @@ func NewDescribeInstancesOperationLimitRequest() (request *DescribeInstancesOper request = &DescribeInstancesOperationLimitRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstancesOperationLimit") return @@ -2244,14 +2865,10 @@ func NewDescribeInstancesOperationLimitResponse() (response *DescribeInstancesOp // // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeInstancesOperationLimit(request *DescribeInstancesOperationLimitRequest) (response *DescribeInstancesOperationLimitResponse, err error) { - if request == nil { - request = NewDescribeInstancesOperationLimitRequest() - } - - response = NewDescribeInstancesOperationLimitResponse() - err = c.Send(request, response) - return + return c.DescribeInstancesOperationLimitWithContext(context.Background(), request) } // DescribeInstancesOperationLimit @@ -2263,10 +2880,17 @@ func (c *Client) DescribeInstancesOperationLimit(request *DescribeInstancesOpera // // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeInstancesOperationLimitWithContext(ctx context.Context, request *DescribeInstancesOperationLimitRequest) (response *DescribeInstancesOperationLimitResponse, err error) { if request == nil { request = NewDescribeInstancesOperationLimitRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstancesOperationLimit require credential") + } + request.SetContext(ctx) response = NewDescribeInstancesOperationLimitResponse() @@ -2278,6 +2902,7 @@ func NewDescribeInstancesStatusRequest() (request *DescribeInstancesStatusReques request = &DescribeInstancesStatusRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstancesStatus") return @@ -2300,18 +2925,15 @@ func NewDescribeInstancesStatusResponse() (response *DescribeInstancesStatusResp // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDFILTER = "InvalidFilter" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstancesStatus(request *DescribeInstancesStatusRequest) (response *DescribeInstancesStatusResponse, err error) { - if request == nil { - request = NewDescribeInstancesStatusRequest() - } - - response = NewDescribeInstancesStatusResponse() - err = c.Send(request, response) - return + return c.DescribeInstancesStatusWithContext(context.Background(), request) } // DescribeInstancesStatus @@ -2324,14 +2946,22 @@ func (c *Client) DescribeInstancesStatus(request *DescribeInstancesStatusRequest // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDFILTER = "InvalidFilter" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInstancesStatusWithContext(ctx context.Context, request *DescribeInstancesStatusRequest) (response *DescribeInstancesStatusResponse, err error) { if request == nil { request = NewDescribeInstancesStatusRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInstancesStatus require credential") + } + request.SetContext(ctx) response = NewDescribeInstancesStatusResponse() @@ -2343,6 +2973,7 @@ func NewDescribeInternetChargeTypeConfigsRequest() (request *DescribeInternetCha request = &DescribeInternetChargeTypeConfigsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInternetChargeTypeConfigs") return @@ -2361,18 +2992,15 @@ func NewDescribeInternetChargeTypeConfigsResponse() (response *DescribeInternetC // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDFILTER = "InvalidFilter" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInternetChargeTypeConfigs(request *DescribeInternetChargeTypeConfigsRequest) (response *DescribeInternetChargeTypeConfigsResponse, err error) { - if request == nil { - request = NewDescribeInternetChargeTypeConfigsRequest() - } - - response = NewDescribeInternetChargeTypeConfigsResponse() - err = c.Send(request, response) - return + return c.DescribeInternetChargeTypeConfigsWithContext(context.Background(), request) } // DescribeInternetChargeTypeConfigs @@ -2381,14 +3009,22 @@ func (c *Client) DescribeInternetChargeTypeConfigs(request *DescribeInternetChar // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDFILTER = "InvalidFilter" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeInternetChargeTypeConfigsWithContext(ctx context.Context, request *DescribeInternetChargeTypeConfigsRequest) (response *DescribeInternetChargeTypeConfigsResponse, err error) { if request == nil { request = NewDescribeInternetChargeTypeConfigsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeInternetChargeTypeConfigs require credential") + } + request.SetContext(ctx) response = NewDescribeInternetChargeTypeConfigsResponse() @@ -2400,6 +3036,7 @@ func NewDescribeKeyPairsRequest() (request *DescribeKeyPairsRequest) { request = &DescribeKeyPairsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeKeyPairs") return @@ -2429,14 +3066,10 @@ func NewDescribeKeyPairsResponse() (response *DescribeKeyPairsResponse) { // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" // INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeKeyPairs(request *DescribeKeyPairsRequest) (response *DescribeKeyPairsResponse, err error) { - if request == nil { - request = NewDescribeKeyPairsRequest() - } - - response = NewDescribeKeyPairsResponse() - err = c.Send(request, response) - return + return c.DescribeKeyPairsWithContext(context.Background(), request) } // DescribeKeyPairs @@ -2456,10 +3089,17 @@ func (c *Client) DescribeKeyPairs(request *DescribeKeyPairsRequest) (response *D // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUELIMIT = "InvalidParameterValueLimit" // INVALIDPARAMETERVALUEOFFSET = "InvalidParameterValueOffset" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeKeyPairsWithContext(ctx context.Context, request *DescribeKeyPairsRequest) (response *DescribeKeyPairsResponse, err error) { if request == nil { request = NewDescribeKeyPairsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeKeyPairs require credential") + } + request.SetContext(ctx) response = NewDescribeKeyPairsResponse() @@ -2471,6 +3111,7 @@ func NewDescribeLaunchTemplateVersionsRequest() (request *DescribeLaunchTemplate request = &DescribeLaunchTemplateVersionsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeLaunchTemplateVersions") return @@ -2507,13 +3148,7 @@ func NewDescribeLaunchTemplateVersionsResponse() (response *DescribeLaunchTempla // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeLaunchTemplateVersions(request *DescribeLaunchTemplateVersionsRequest) (response *DescribeLaunchTemplateVersionsResponse, err error) { - if request == nil { - request = NewDescribeLaunchTemplateVersionsRequest() - } - - response = NewDescribeLaunchTemplateVersionsResponse() - err = c.Send(request, response) - return + return c.DescribeLaunchTemplateVersionsWithContext(context.Background(), request) } // DescribeLaunchTemplateVersions @@ -2543,6 +3178,11 @@ func (c *Client) DescribeLaunchTemplateVersionsWithContext(ctx context.Context, if request == nil { request = NewDescribeLaunchTemplateVersionsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeLaunchTemplateVersions require credential") + } + request.SetContext(ctx) response = NewDescribeLaunchTemplateVersionsResponse() @@ -2554,6 +3194,7 @@ func NewDescribeLaunchTemplatesRequest() (request *DescribeLaunchTemplatesReques request = &DescribeLaunchTemplatesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeLaunchTemplates") return @@ -2571,6 +3212,8 @@ func NewDescribeLaunchTemplatesResponse() (response *DescribeLaunchTemplatesResp // // 可能返回的错误码: // +// INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" @@ -2581,13 +3224,7 @@ func NewDescribeLaunchTemplatesResponse() (response *DescribeLaunchTemplatesResp // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeLaunchTemplates(request *DescribeLaunchTemplatesRequest) (response *DescribeLaunchTemplatesResponse, err error) { - if request == nil { - request = NewDescribeLaunchTemplatesRequest() - } - - response = NewDescribeLaunchTemplatesResponse() - err = c.Send(request, response) - return + return c.DescribeLaunchTemplatesWithContext(context.Background(), request) } // DescribeLaunchTemplates @@ -2595,6 +3232,8 @@ func (c *Client) DescribeLaunchTemplates(request *DescribeLaunchTemplatesRequest // // 可能返回的错误码: // +// INVALIDFILTER = "InvalidFilter" +// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" @@ -2608,6 +3247,11 @@ func (c *Client) DescribeLaunchTemplatesWithContext(ctx context.Context, request if request == nil { request = NewDescribeLaunchTemplatesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeLaunchTemplates require credential") + } + request.SetContext(ctx) response = NewDescribeLaunchTemplatesResponse() @@ -2619,6 +3263,7 @@ func NewDescribeRegionsRequest() (request *DescribeRegionsRequest) { request = &DescribeRegionsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeRegions") return @@ -2632,47 +3277,30 @@ func NewDescribeRegionsResponse() (response *DescribeRegionsResponse) { } // DescribeRegions -// 本接口(DescribeRegions)用于查询地域信息。因平台策略原因,该接口暂时停止更新,为确保您正常调用,可切换至新链接:https://cloud.tencent.com/document/product/1278/55255。 +// 本接口(DescribeRegions)用于查询地域信息。因平台策略原因,该接口暂时停止更新,为确保您正常调用,可切换至新链接:https://cloud.tencent.com/document/product/1596/77930。 // // 可能返回的错误码: // -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdNotExisted" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDVERNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdVerNotExisted" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATENOTFOUND = "InvalidParameterValue.LaunchTemplateNotFound" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEVERSION = "InvalidParameterValue.LaunchTemplateVersion" -// UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeRegions(request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { - if request == nil { - request = NewDescribeRegionsRequest() - } - - response = NewDescribeRegionsResponse() - err = c.Send(request, response) - return + return c.DescribeRegionsWithContext(context.Background(), request) } // DescribeRegions -// 本接口(DescribeRegions)用于查询地域信息。因平台策略原因,该接口暂时停止更新,为确保您正常调用,可切换至新链接:https://cloud.tencent.com/document/product/1278/55255。 +// 本接口(DescribeRegions)用于查询地域信息。因平台策略原因,该接口暂时停止更新,为确保您正常调用,可切换至新链接:https://cloud.tencent.com/document/product/1596/77930。 // // 可能返回的错误码: // -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATENAME = "InvalidParameterValue.InvalidLaunchTemplateName" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdNotExisted" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDVERNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdVerNotExisted" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATENOTFOUND = "InvalidParameterValue.LaunchTemplateNotFound" -// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEVERSION = "InvalidParameterValue.LaunchTemplateVersion" -// UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeRegionsWithContext(ctx context.Context, request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { if request == nil { request = NewDescribeRegionsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeRegions require credential") + } + request.SetContext(ctx) response = NewDescribeRegionsResponse() @@ -2684,6 +3312,7 @@ func NewDescribeReservedInstancesRequest() (request *DescribeReservedInstancesRe request = &DescribeReservedInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeReservedInstances") return @@ -2704,19 +3333,14 @@ func NewDescribeReservedInstancesResponse() (response *DescribeReservedInstances // INTERNALSERVERERROR = "InternalServerError" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNSUPPORTEDOPERATION_INVALIDPERMISSIONNONINTERNATIONALACCOUNT = "UnsupportedOperation.InvalidPermissionNonInternationalAccount" // UNSUPPORTEDOPERATION_RESERVEDINSTANCEINVISIBLEFORUSER = "UnsupportedOperation.ReservedInstanceInvisibleForUser" func (c *Client) DescribeReservedInstances(request *DescribeReservedInstancesRequest) (response *DescribeReservedInstancesResponse, err error) { - if request == nil { - request = NewDescribeReservedInstancesRequest() - } - - response = NewDescribeReservedInstancesResponse() - err = c.Send(request, response) - return + return c.DescribeReservedInstancesWithContext(context.Background(), request) } // DescribeReservedInstances @@ -2727,6 +3351,7 @@ func (c *Client) DescribeReservedInstances(request *DescribeReservedInstancesReq // INTERNALSERVERERROR = "InternalServerError" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -2736,6 +3361,11 @@ func (c *Client) DescribeReservedInstancesWithContext(ctx context.Context, reque if request == nil { request = NewDescribeReservedInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeReservedInstances require credential") + } + request.SetContext(ctx) response = NewDescribeReservedInstancesResponse() @@ -2747,6 +3377,7 @@ func NewDescribeReservedInstancesConfigInfosRequest() (request *DescribeReserved request = &DescribeReservedInstancesConfigInfosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeReservedInstancesConfigInfos") return @@ -2769,13 +3400,7 @@ func NewDescribeReservedInstancesConfigInfosResponse() (response *DescribeReserv // UNSUPPORTEDOPERATION_INVALIDPERMISSIONNONINTERNATIONALACCOUNT = "UnsupportedOperation.InvalidPermissionNonInternationalAccount" // UNSUPPORTEDOPERATION_RESERVEDINSTANCEINVISIBLEFORUSER = "UnsupportedOperation.ReservedInstanceInvisibleForUser" func (c *Client) DescribeReservedInstancesConfigInfos(request *DescribeReservedInstancesConfigInfosRequest) (response *DescribeReservedInstancesConfigInfosResponse, err error) { - if request == nil { - request = NewDescribeReservedInstancesConfigInfosRequest() - } - - response = NewDescribeReservedInstancesConfigInfosResponse() - err = c.Send(request, response) - return + return c.DescribeReservedInstancesConfigInfosWithContext(context.Background(), request) } // DescribeReservedInstancesConfigInfos @@ -2791,6 +3416,11 @@ func (c *Client) DescribeReservedInstancesConfigInfosWithContext(ctx context.Con if request == nil { request = NewDescribeReservedInstancesConfigInfosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeReservedInstancesConfigInfos require credential") + } + request.SetContext(ctx) response = NewDescribeReservedInstancesConfigInfosResponse() @@ -2802,6 +3432,7 @@ func NewDescribeReservedInstancesOfferingsRequest() (request *DescribeReservedIn request = &DescribeReservedInstancesOfferingsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeReservedInstancesOfferings") return @@ -2822,19 +3453,14 @@ func NewDescribeReservedInstancesOfferingsResponse() (response *DescribeReserved // INTERNALSERVERERROR = "InternalServerError" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // UNSUPPORTEDOPERATION_INVALIDPERMISSIONNONINTERNATIONALACCOUNT = "UnsupportedOperation.InvalidPermissionNonInternationalAccount" // UNSUPPORTEDOPERATION_RESERVEDINSTANCEINVISIBLEFORUSER = "UnsupportedOperation.ReservedInstanceInvisibleForUser" func (c *Client) DescribeReservedInstancesOfferings(request *DescribeReservedInstancesOfferingsRequest) (response *DescribeReservedInstancesOfferingsResponse, err error) { - if request == nil { - request = NewDescribeReservedInstancesOfferingsRequest() - } - - response = NewDescribeReservedInstancesOfferingsResponse() - err = c.Send(request, response) - return + return c.DescribeReservedInstancesOfferingsWithContext(context.Background(), request) } // DescribeReservedInstancesOfferings @@ -2845,6 +3471,7 @@ func (c *Client) DescribeReservedInstancesOfferings(request *DescribeReservedIns // INTERNALSERVERERROR = "InternalServerError" // INVALIDFILTER = "InvalidFilter" // INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -2854,6 +3481,11 @@ func (c *Client) DescribeReservedInstancesOfferingsWithContext(ctx context.Conte if request == nil { request = NewDescribeReservedInstancesOfferingsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeReservedInstancesOfferings require credential") + } + request.SetContext(ctx) response = NewDescribeReservedInstancesOfferingsResponse() @@ -2861,10 +3493,70 @@ func (c *Client) DescribeReservedInstancesOfferingsWithContext(ctx context.Conte return } +func NewDescribeTaskInfoRequest() (request *DescribeTaskInfoRequest) { + request = &DescribeTaskInfoRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "DescribeTaskInfo") + + return +} + +func NewDescribeTaskInfoResponse() (response *DescribeTaskInfoResponse) { + response = &DescribeTaskInfoResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeTaskInfo +// 本接口 (DescribeTaskInfo) 用于查询云服务器维修任务列表及详细信息。 +// +// - 可以根据实例ID、实例名称或任务状态等信息来查询维修任务列表。过滤信息详情可参考入参说明。 +// +// - 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的维修任务列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +func (c *Client) DescribeTaskInfo(request *DescribeTaskInfoRequest) (response *DescribeTaskInfoResponse, err error) { + return c.DescribeTaskInfoWithContext(context.Background(), request) +} + +// DescribeTaskInfo +// 本接口 (DescribeTaskInfo) 用于查询云服务器维修任务列表及详细信息。 +// +// - 可以根据实例ID、实例名称或任务状态等信息来查询维修任务列表。过滤信息详情可参考入参说明。 +// +// - 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的维修任务列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +func (c *Client) DescribeTaskInfoWithContext(ctx context.Context, request *DescribeTaskInfoRequest) (response *DescribeTaskInfoResponse, err error) { + if request == nil { + request = NewDescribeTaskInfoRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeTaskInfo require credential") + } + + request.SetContext(ctx) + + response = NewDescribeTaskInfoResponse() + err = c.Send(request, response) + return +} + func NewDescribeZoneInstanceConfigInfosRequest() (request *DescribeZoneInstanceConfigInfosRequest) { request = &DescribeZoneInstanceConfigInfosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeZoneInstanceConfigInfos") return @@ -2887,20 +3579,16 @@ func NewDescribeZoneInstanceConfigInfosResponse() (response *DescribeZoneInstanc // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeZoneInstanceConfigInfos(request *DescribeZoneInstanceConfigInfosRequest) (response *DescribeZoneInstanceConfigInfosResponse, err error) { - if request == nil { - request = NewDescribeZoneInstanceConfigInfosRequest() - } - - response = NewDescribeZoneInstanceConfigInfosResponse() - err = c.Send(request, response) - return + return c.DescribeZoneInstanceConfigInfosWithContext(context.Background(), request) } // DescribeZoneInstanceConfigInfos @@ -2913,16 +3601,23 @@ func (c *Client) DescribeZoneInstanceConfigInfos(request *DescribeZoneInstanceCo // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeZoneInstanceConfigInfosWithContext(ctx context.Context, request *DescribeZoneInstanceConfigInfosRequest) (response *DescribeZoneInstanceConfigInfosResponse, err error) { if request == nil { request = NewDescribeZoneInstanceConfigInfosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeZoneInstanceConfigInfos require credential") + } + request.SetContext(ctx) response = NewDescribeZoneInstanceConfigInfosResponse() @@ -2934,6 +3629,7 @@ func NewDescribeZonesRequest() (request *DescribeZonesRequest) { request = &DescribeZonesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeZones") return @@ -2952,24 +3648,10 @@ func NewDescribeZonesResponse() (response *DescribeZonesResponse) { // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" -// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" -// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" -// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" -// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" -// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" -// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" -// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -// RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeZones(request *DescribeZonesRequest) (response *DescribeZonesResponse, err error) { - if request == nil { - request = NewDescribeZonesRequest() - } - - response = NewDescribeZonesResponse() - err = c.Send(request, response) - return + return c.DescribeZonesWithContext(context.Background(), request) } // DescribeZones @@ -2978,20 +3660,17 @@ func (c *Client) DescribeZones(request *DescribeZonesRequest) (response *Describ // 可能返回的错误码: // // INVALIDFILTER = "InvalidFilter" -// INVALIDFILTERVALUE_LIMITEXCEEDED = "InvalidFilterValue.LimitExceeded" -// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" -// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" -// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" -// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" -// INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" -// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" -// RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeZonesWithContext(ctx context.Context, request *DescribeZonesRequest) (response *DescribeZonesResponse, err error) { if request == nil { request = NewDescribeZonesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeZones require credential") + } + request.SetContext(ctx) response = NewDescribeZonesResponse() @@ -3003,6 +3682,7 @@ func NewDisassociateInstancesKeyPairsRequest() (request *DisassociateInstancesKe request = &DisassociateInstancesKeyPairsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DisassociateInstancesKeyPairs") return @@ -3035,25 +3715,26 @@ func NewDisassociateInstancesKeyPairsResponse() (response *DisassociateInstances // INVALIDKEYPAIRID_MALFORMED = "InvalidKeyPairId.Malformed" // INVALIDKEYPAIRID_NOTFOUND = "InvalidKeyPairId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCEOSWINDOWS = "UnsupportedOperation.InstanceOsWindows" // UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) DisassociateInstancesKeyPairs(request *DisassociateInstancesKeyPairsRequest) (response *DisassociateInstancesKeyPairsResponse, err error) { - if request == nil { - request = NewDisassociateInstancesKeyPairsRequest() - } - - response = NewDisassociateInstancesKeyPairsResponse() - err = c.Send(request, response) - return + return c.DisassociateInstancesKeyPairsWithContext(context.Background(), request) } // DisassociateInstancesKeyPairs @@ -3076,14 +3757,21 @@ func (c *Client) DisassociateInstancesKeyPairs(request *DisassociateInstancesKey // INVALIDKEYPAIRID_MALFORMED = "InvalidKeyPairId.Malformed" // INVALIDKEYPAIRID_NOTFOUND = "InvalidKeyPairId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCEOSWINDOWS = "UnsupportedOperation.InstanceOsWindows" // UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" @@ -3091,6 +3779,11 @@ func (c *Client) DisassociateInstancesKeyPairsWithContext(ctx context.Context, r if request == nil { request = NewDisassociateInstancesKeyPairsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateInstancesKeyPairs require credential") + } + request.SetContext(ctx) response = NewDisassociateInstancesKeyPairsResponse() @@ -3102,6 +3795,7 @@ func NewDisassociateSecurityGroupsRequest() (request *DisassociateSecurityGroups request = &DisassociateSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "DisassociateSecurityGroups") return @@ -3124,20 +3818,16 @@ func NewDisassociateSecurityGroupsResponse() (response *DisassociateSecurityGrou // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // SECGROUPACTIONFAILURE = "SecGroupActionFailure" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DisassociateSecurityGroups(request *DisassociateSecurityGroupsRequest) (response *DisassociateSecurityGroupsResponse, err error) { - if request == nil { - request = NewDisassociateSecurityGroupsRequest() - } - - response = NewDisassociateSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.DisassociateSecurityGroupsWithContext(context.Background(), request) } // DisassociateSecurityGroups @@ -3150,19 +3840,117 @@ func (c *Client) DisassociateSecurityGroups(request *DisassociateSecurityGroupsR // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" +// INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" +// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" +// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// SECGROUPACTIONFAILURE = "SecGroupActionFailure" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DisassociateSecurityGroupsWithContext(ctx context.Context, request *DisassociateSecurityGroupsRequest) (response *DisassociateSecurityGroupsResponse, err error) { + if request == nil { + request = NewDisassociateSecurityGroupsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateSecurityGroups require credential") + } + + request.SetContext(ctx) + + response = NewDisassociateSecurityGroupsResponse() + err = c.Send(request, response) + return +} + +func NewExportImagesRequest() (request *ExportImagesRequest) { + request = &ExportImagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "ExportImages") + + return +} + +func NewExportImagesResponse() (response *ExportImagesResponse) { + response = &ExportImagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ExportImages +// 提供导出自定义镜像到指定COS存储桶的能力 +// +// 可能返回的错误码: +// +// AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" +// INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" +// INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETER_IMAGEIDSSNAPSHOTIDSMUSTONE = "InvalidParameter.ImageIdsSnapshotIdsMustOne" +// INVALIDPARAMETER_SNAPSHOTNOTFOUND = "InvalidParameter.SnapshotNotFound" +// INVALIDPARAMETERVALUE_BUCKETNOTFOUND = "InvalidParameterValue.BucketNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDBUCKETPERMISSIONFOREXPORT = "InvalidParameterValue.InvalidBucketPermissionForExport" +// INVALIDPARAMETERVALUE_INVALIDFILENAMEPREFIXLIST = "InvalidParameterValue.InvalidFileNamePrefixList" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" +// INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// LIMITEXCEEDED_EXPORTIMAGETASKLIMITEXCEEDED = "LimitExceeded.ExportImageTaskLimitExceeded" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" +// UNSUPPORTEDOPERATION_IMAGETOOLARGEEXPORTUNSUPPORTED = "UnsupportedOperation.ImageTooLargeExportUnsupported" +// UNSUPPORTEDOPERATION_MARKETIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.MarketImageExportUnsupported" +// UNSUPPORTEDOPERATION_PUBLICIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.PublicImageExportUnsupported" +// UNSUPPORTEDOPERATION_REDHATIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.RedHatImageExportUnsupported" +// UNSUPPORTEDOPERATION_SHAREDIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.SharedImageExportUnsupported" +// UNSUPPORTEDOPERATION_WINDOWSIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.WindowsImageExportUnsupported" +func (c *Client) ExportImages(request *ExportImagesRequest) (response *ExportImagesResponse, err error) { + return c.ExportImagesWithContext(context.Background(), request) +} + +// ExportImages +// 提供导出自定义镜像到指定COS存储桶的能力 +// +// 可能返回的错误码: +// +// AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" +// INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" +// INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDPARAMETER_IMAGEIDSSNAPSHOTIDSMUSTONE = "InvalidParameter.ImageIdsSnapshotIdsMustOne" +// INVALIDPARAMETER_SNAPSHOTNOTFOUND = "InvalidParameter.SnapshotNotFound" +// INVALIDPARAMETERVALUE_BUCKETNOTFOUND = "InvalidParameterValue.BucketNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDBUCKETPERMISSIONFOREXPORT = "InvalidParameterValue.InvalidBucketPermissionForExport" +// INVALIDPARAMETERVALUE_INVALIDFILENAMEPREFIXLIST = "InvalidParameterValue.InvalidFileNamePrefixList" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" +// INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" -// INVALIDSGID_MALFORMED = "InvalidSgId.Malformed" -// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" -// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" -// SECGROUPACTIONFAILURE = "SecGroupActionFailure" -func (c *Client) DisassociateSecurityGroupsWithContext(ctx context.Context, request *DisassociateSecurityGroupsRequest) (response *DisassociateSecurityGroupsResponse, err error) { +// INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// LIMITEXCEEDED_EXPORTIMAGETASKLIMITEXCEEDED = "LimitExceeded.ExportImageTaskLimitExceeded" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" +// UNSUPPORTEDOPERATION_IMAGETOOLARGEEXPORTUNSUPPORTED = "UnsupportedOperation.ImageTooLargeExportUnsupported" +// UNSUPPORTEDOPERATION_MARKETIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.MarketImageExportUnsupported" +// UNSUPPORTEDOPERATION_PUBLICIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.PublicImageExportUnsupported" +// UNSUPPORTEDOPERATION_REDHATIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.RedHatImageExportUnsupported" +// UNSUPPORTEDOPERATION_SHAREDIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.SharedImageExportUnsupported" +// UNSUPPORTEDOPERATION_WINDOWSIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.WindowsImageExportUnsupported" +func (c *Client) ExportImagesWithContext(ctx context.Context, request *ExportImagesRequest) (response *ExportImagesResponse, err error) { if request == nil { - request = NewDisassociateSecurityGroupsRequest() + request = NewExportImagesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ExportImages require credential") } + request.SetContext(ctx) - response = NewDisassociateSecurityGroupsResponse() + response = NewExportImagesResponse() err = c.Send(request, response) return } @@ -3171,6 +3959,7 @@ func NewImportImageRequest() (request *ImportImageRequest) { request = &ImportImageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ImportImage") return @@ -3193,16 +3982,15 @@ func NewImportImageResponse() (response *ImportImageResponse) { // INVALIDIMAGEOSTYPE_UNSUPPORTED = "InvalidImageOsType.Unsupported" // INVALIDIMAGEOSVERSION_UNSUPPORTED = "InvalidImageOsVersion.Unsupported" // INVALIDPARAMETER_INVALIDPARAMETERURLERROR = "InvalidParameter.InvalidParameterUrlError" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDBOOTMODE = "InvalidParameterValue.InvalidBootMode" +// INVALIDPARAMETERVALUE_INVALIDLICENSETYPE = "InvalidParameterValue.InvalidLicenseType" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// OPERATIONDENIED_INNERUSERPROHIBITACTION = "OperationDenied.InnerUserProhibitAction" // REGIONABILITYLIMIT_UNSUPPORTEDTOIMPORTIMAGE = "RegionAbilityLimit.UnsupportedToImportImage" func (c *Client) ImportImage(request *ImportImageRequest) (response *ImportImageResponse, err error) { - if request == nil { - request = NewImportImageRequest() - } - - response = NewImportImageResponse() - err = c.Send(request, response) - return + return c.ImportImageWithContext(context.Background(), request) } // ImportImage @@ -3215,12 +4003,22 @@ func (c *Client) ImportImage(request *ImportImageRequest) (response *ImportImage // INVALIDIMAGEOSTYPE_UNSUPPORTED = "InvalidImageOsType.Unsupported" // INVALIDIMAGEOSVERSION_UNSUPPORTED = "InvalidImageOsVersion.Unsupported" // INVALIDPARAMETER_INVALIDPARAMETERURLERROR = "InvalidParameter.InvalidParameterUrlError" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDBOOTMODE = "InvalidParameterValue.InvalidBootMode" +// INVALIDPARAMETERVALUE_INVALIDLICENSETYPE = "InvalidParameterValue.InvalidLicenseType" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// OPERATIONDENIED_INNERUSERPROHIBITACTION = "OperationDenied.InnerUserProhibitAction" // REGIONABILITYLIMIT_UNSUPPORTEDTOIMPORTIMAGE = "RegionAbilityLimit.UnsupportedToImportImage" func (c *Client) ImportImageWithContext(ctx context.Context, request *ImportImageRequest) (response *ImportImageResponse, err error) { if request == nil { request = NewImportImageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ImportImage require credential") + } + request.SetContext(ctx) response = NewImportImageResponse() @@ -3232,6 +4030,7 @@ func NewImportKeyPairRequest() (request *ImportKeyPairRequest) { request = &ImportKeyPairRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ImportKeyPair") return @@ -3265,15 +4064,10 @@ func NewImportKeyPairResponse() (response *ImportKeyPairResponse) { // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // INVALIDPUBLICKEY_DUPLICATE = "InvalidPublicKey.Duplicate" // INVALIDPUBLICKEY_MALFORMED = "InvalidPublicKey.Malformed" +// LIMITEXCEEDED_TAGRESOURCEQUOTA = "LimitExceeded.TagResourceQuota" // MISSINGPARAMETER = "MissingParameter" func (c *Client) ImportKeyPair(request *ImportKeyPairRequest) (response *ImportKeyPairResponse, err error) { - if request == nil { - request = NewImportKeyPairRequest() - } - - response = NewImportKeyPairResponse() - err = c.Send(request, response) - return + return c.ImportKeyPairWithContext(context.Background(), request) } // ImportKeyPair @@ -3297,11 +4091,17 @@ func (c *Client) ImportKeyPair(request *ImportKeyPairRequest) (response *ImportK // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // INVALIDPUBLICKEY_DUPLICATE = "InvalidPublicKey.Duplicate" // INVALIDPUBLICKEY_MALFORMED = "InvalidPublicKey.Malformed" +// LIMITEXCEEDED_TAGRESOURCEQUOTA = "LimitExceeded.TagResourceQuota" // MISSINGPARAMETER = "MissingParameter" func (c *Client) ImportKeyPairWithContext(ctx context.Context, request *ImportKeyPairRequest) (response *ImportKeyPairResponse, err error) { if request == nil { request = NewImportKeyPairRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ImportKeyPair require credential") + } + request.SetContext(ctx) response = NewImportKeyPairResponse() @@ -3313,6 +4113,7 @@ func NewInquirePricePurchaseReservedInstancesOfferingRequest() (request *Inquire request = &InquirePricePurchaseReservedInstancesOfferingRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquirePricePurchaseReservedInstancesOffering") return @@ -3334,13 +4135,7 @@ func NewInquirePricePurchaseReservedInstancesOfferingResponse() (response *Inqui // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION_INVALIDPERMISSIONNONINTERNATIONALACCOUNT = "UnsupportedOperation.InvalidPermissionNonInternationalAccount" func (c *Client) InquirePricePurchaseReservedInstancesOffering(request *InquirePricePurchaseReservedInstancesOfferingRequest) (response *InquirePricePurchaseReservedInstancesOfferingResponse, err error) { - if request == nil { - request = NewInquirePricePurchaseReservedInstancesOfferingRequest() - } - - response = NewInquirePricePurchaseReservedInstancesOfferingResponse() - err = c.Send(request, response) - return + return c.InquirePricePurchaseReservedInstancesOfferingWithContext(context.Background(), request) } // InquirePricePurchaseReservedInstancesOffering @@ -3355,6 +4150,11 @@ func (c *Client) InquirePricePurchaseReservedInstancesOfferingWithContext(ctx co if request == nil { request = NewInquirePricePurchaseReservedInstancesOfferingRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquirePricePurchaseReservedInstancesOffering require credential") + } + request.SetContext(ctx) response = NewInquirePricePurchaseReservedInstancesOfferingResponse() @@ -3366,6 +4166,7 @@ func NewInquiryPriceModifyInstancesChargeTypeRequest() (request *InquiryPriceMod request = &InquiryPriceModifyInstancesChargeTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceModifyInstancesChargeType") return @@ -3387,7 +4188,9 @@ func NewInquiryPriceModifyInstancesChargeTypeResponse() (response *InquiryPriceM // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" +// FAILEDOPERATION_INQUIRYREFUNDPRICEFAILED = "FailedOperation.InquiryRefundPriceFailed" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" @@ -3395,19 +4198,19 @@ func NewInquiryPriceModifyInstancesChargeTypeResponse() (response *InquiryPriceM // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDINSTANCETYPEUNDERWRITE = "InvalidParameterValue.InvalidInstanceTypeUnderwrite" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" func (c *Client) InquiryPriceModifyInstancesChargeType(request *InquiryPriceModifyInstancesChargeTypeRequest) (response *InquiryPriceModifyInstancesChargeTypeResponse, err error) { - if request == nil { - request = NewInquiryPriceModifyInstancesChargeTypeRequest() - } - - response = NewInquiryPriceModifyInstancesChargeTypeResponse() - err = c.Send(request, response) - return + return c.InquiryPriceModifyInstancesChargeTypeWithContext(context.Background(), request) } // InquiryPriceModifyInstancesChargeType @@ -3419,7 +4222,9 @@ func (c *Client) InquiryPriceModifyInstancesChargeType(request *InquiryPriceModi // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" +// FAILEDOPERATION_INQUIRYREFUNDPRICEFAILED = "FailedOperation.InquiryRefundPriceFailed" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" @@ -3427,15 +4232,26 @@ func (c *Client) InquiryPriceModifyInstancesChargeType(request *InquiryPriceModi // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDINSTANCETYPEUNDERWRITE = "InvalidParameterValue.InvalidInstanceTypeUnderwrite" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" +// LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" func (c *Client) InquiryPriceModifyInstancesChargeTypeWithContext(ctx context.Context, request *InquiryPriceModifyInstancesChargeTypeRequest) (response *InquiryPriceModifyInstancesChargeTypeResponse, err error) { if request == nil { request = NewInquiryPriceModifyInstancesChargeTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceModifyInstancesChargeType require credential") + } + request.SetContext(ctx) response = NewInquiryPriceModifyInstancesChargeTypeResponse() @@ -3443,10 +4259,70 @@ func (c *Client) InquiryPriceModifyInstancesChargeTypeWithContext(ctx context.Co return } +func NewInquiryPriceRenewHostsRequest() (request *InquiryPriceRenewHostsRequest) { + request = &InquiryPriceRenewHostsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceRenewHosts") + + return +} + +func NewInquiryPriceRenewHostsResponse() (response *InquiryPriceRenewHostsResponse) { + response = &InquiryPriceRenewHostsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// InquiryPriceRenewHosts +// 本接口 (InquiryPriceRenewHosts) 用于续费包年包月`CDH`实例询价。 +// +// * 只支持查询包年包月`CDH`实例的续费价格。 +// +// 可能返回的错误码: +// +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" +// INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDPERIOD = "InvalidPeriod" +func (c *Client) InquiryPriceRenewHosts(request *InquiryPriceRenewHostsRequest) (response *InquiryPriceRenewHostsResponse, err error) { + return c.InquiryPriceRenewHostsWithContext(context.Background(), request) +} + +// InquiryPriceRenewHosts +// 本接口 (InquiryPriceRenewHosts) 用于续费包年包月`CDH`实例询价。 +// +// * 只支持查询包年包月`CDH`实例的续费价格。 +// +// 可能返回的错误码: +// +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" +// INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDPERIOD = "InvalidPeriod" +func (c *Client) InquiryPriceRenewHostsWithContext(ctx context.Context, request *InquiryPriceRenewHostsRequest) (response *InquiryPriceRenewHostsResponse, err error) { + if request == nil { + request = NewInquiryPriceRenewHostsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceRenewHosts require credential") + } + + request.SetContext(ctx) + + response = NewInquiryPriceRenewHostsResponse() + err = c.Send(request, response) + return +} + func NewInquiryPriceRenewInstancesRequest() (request *InquiryPriceRenewInstancesRequest) { request = &InquiryPriceRenewInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceRenewInstances") return @@ -3474,20 +4350,18 @@ func NewInquiryPriceRenewInstancesResponse() (response *InquiryPriceRenewInstanc // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOTSUPPORTEDMIXPRICINGMODEL = "InvalidParameterValue.InstanceNotSupportedMixPricingModel" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERIOD = "InvalidPeriod" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INVALIDDISKBACKUPQUOTA = "UnsupportedOperation.InvalidDiskBackupQuota" func (c *Client) InquiryPriceRenewInstances(request *InquiryPriceRenewInstancesRequest) (response *InquiryPriceRenewInstancesResponse, err error) { - if request == nil { - request = NewInquiryPriceRenewInstancesRequest() - } - - response = NewInquiryPriceRenewInstancesResponse() - err = c.Send(request, response) - return + return c.InquiryPriceRenewInstancesWithContext(context.Background(), request) } // InquiryPriceRenewInstances @@ -3505,16 +4379,25 @@ func (c *Client) InquiryPriceRenewInstances(request *InquiryPriceRenewInstancesR // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOTSUPPORTEDMIXPRICINGMODEL = "InvalidParameterValue.InstanceNotSupportedMixPricingModel" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERIOD = "InvalidPeriod" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INVALIDDISKBACKUPQUOTA = "UnsupportedOperation.InvalidDiskBackupQuota" func (c *Client) InquiryPriceRenewInstancesWithContext(ctx context.Context, request *InquiryPriceRenewInstancesRequest) (response *InquiryPriceRenewInstancesResponse, err error) { if request == nil { request = NewInquiryPriceRenewInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceRenewInstances require credential") + } + request.SetContext(ctx) response = NewInquiryPriceRenewInstancesResponse() @@ -3526,6 +4409,7 @@ func NewInquiryPriceResetInstanceRequest() (request *InquiryPriceResetInstanceRe request = &InquiryPriceResetInstanceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstance") return @@ -3558,19 +4442,21 @@ func NewInquiryPriceResetInstanceResponse() (response *InquiryPriceResetInstance // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDFORRETSETINSTANCE = "InvalidParameterValue.InvalidImageIdForRetsetInstance" // INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION_INVALIDIMAGELICENSETYPEFORRESET = "UnsupportedOperation.InvalidImageLicenseTypeForReset" +// UNSUPPORTEDOPERATION_MODIFYENCRYPTIONNOTSUPPORTED = "UnsupportedOperation.ModifyEncryptionNotSupported" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" func (c *Client) InquiryPriceResetInstance(request *InquiryPriceResetInstanceRequest) (response *InquiryPriceResetInstanceResponse, err error) { - if request == nil { - request = NewInquiryPriceResetInstanceRequest() - } - - response = NewInquiryPriceResetInstanceResponse() - err = c.Send(request, response) - return + return c.InquiryPriceResetInstanceWithContext(context.Background(), request) } // InquiryPriceResetInstance @@ -3593,15 +4479,28 @@ func (c *Client) InquiryPriceResetInstance(request *InquiryPriceResetInstanceReq // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDFORRETSETINSTANCE = "InvalidParameterValue.InvalidImageIdForRetsetInstance" // INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION_INVALIDIMAGELICENSETYPEFORRESET = "UnsupportedOperation.InvalidImageLicenseTypeForReset" +// UNSUPPORTEDOPERATION_MODIFYENCRYPTIONNOTSUPPORTED = "UnsupportedOperation.ModifyEncryptionNotSupported" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" func (c *Client) InquiryPriceResetInstanceWithContext(ctx context.Context, request *InquiryPriceResetInstanceRequest) (response *InquiryPriceResetInstanceResponse, err error) { if request == nil { request = NewInquiryPriceResetInstanceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceResetInstance require credential") + } + request.SetContext(ctx) response = NewInquiryPriceResetInstanceResponse() @@ -3613,6 +4512,7 @@ func NewInquiryPriceResetInstancesInternetMaxBandwidthRequest() (request *Inquir request = &InquiryPriceResetInstancesInternetMaxBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstancesInternetMaxBandwidth") return @@ -3654,17 +4554,15 @@ func NewInquiryPriceResetInstancesInternetMaxBandwidthResponse() (response *Inqu // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERMISSION = "InvalidPermission" // MISSINGPARAMETER = "MissingParameter" +// UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" func (c *Client) InquiryPriceResetInstancesInternetMaxBandwidth(request *InquiryPriceResetInstancesInternetMaxBandwidthRequest) (response *InquiryPriceResetInstancesInternetMaxBandwidthResponse, err error) { - if request == nil { - request = NewInquiryPriceResetInstancesInternetMaxBandwidthRequest() - } - - response = NewInquiryPriceResetInstancesInternetMaxBandwidthResponse() - err = c.Send(request, response) - return + return c.InquiryPriceResetInstancesInternetMaxBandwidthWithContext(context.Background(), request) } // InquiryPriceResetInstancesInternetMaxBandwidth @@ -3696,13 +4594,22 @@ func (c *Client) InquiryPriceResetInstancesInternetMaxBandwidth(request *Inquiry // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERMISSION = "InvalidPermission" // MISSINGPARAMETER = "MissingParameter" +// UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" func (c *Client) InquiryPriceResetInstancesInternetMaxBandwidthWithContext(ctx context.Context, request *InquiryPriceResetInstancesInternetMaxBandwidthRequest) (response *InquiryPriceResetInstancesInternetMaxBandwidthResponse, err error) { if request == nil { request = NewInquiryPriceResetInstancesInternetMaxBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceResetInstancesInternetMaxBandwidth require credential") + } + request.SetContext(ctx) response = NewInquiryPriceResetInstancesInternetMaxBandwidthResponse() @@ -3714,6 +4621,7 @@ func NewInquiryPriceResetInstancesTypeRequest() (request *InquiryPriceResetInsta request = &InquiryPriceResetInstancesTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstancesType") return @@ -3733,8 +4641,6 @@ func NewInquiryPriceResetInstancesTypeResponse() (response *InquiryPriceResetIns // // * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口调整机型询价。 // -// * 对于包年包月实例,使用该接口会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/555/20253)接口查询账户余额。 -// // 可能返回的错误码: // // FAILEDOPERATION_INQUIRYREFUNDPRICEFAILED = "FailedOperation.InquiryRefundPriceFailed" @@ -3742,29 +4648,42 @@ func NewInquiryPriceResetInstancesTypeResponse() (response *InquiryPriceResetIns // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" +// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BASICNETWORKINSTANCEFAMILY = "InvalidParameterValue.BasicNetworkInstanceFamily" +// INVALIDPARAMETERVALUE_GPUINSTANCEFAMILY = "InvalidParameterValue.GPUInstanceFamily" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDINSTANCESOURCE = "InvalidParameterValue.InvalidInstanceSource" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" +// INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_EIPNUMLIMIT = "LimitExceeded.EipNumLimit" +// LIMITEXCEEDED_ENINUMLIMIT = "LimitExceeded.EniNumLimit" // LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// RESOURCEINSUFFICIENT_SPECIFIEDINSTANCETYPE = "ResourceInsufficient.SpecifiedInstanceType" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION_HETEROGENEOUSCHANGEINSTANCEFAMILY = "UnsupportedOperation.HeterogeneousChangeInstanceFamily" // UNSUPPORTEDOPERATION_LOCALDATADISKCHANGEINSTANCEFAMILY = "UnsupportedOperation.LocalDataDiskChangeInstanceFamily" -// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOSA3 = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToSA3" +// UNSUPPORTEDOPERATION_ORIGINALINSTANCETYPEINVALID = "UnsupportedOperation.OriginalInstanceTypeInvalid" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGINGSAMEFAMILY = "UnsupportedOperation.StoppedModeStopChargingSameFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDARMCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedARMChangeInstanceFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOARM = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToARM" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCETOTHISINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceToThisInstanceFamily" func (c *Client) InquiryPriceResetInstancesType(request *InquiryPriceResetInstancesTypeRequest) (response *InquiryPriceResetInstancesTypeResponse, err error) { - if request == nil { - request = NewInquiryPriceResetInstancesTypeRequest() - } - - response = NewInquiryPriceResetInstancesTypeResponse() - err = c.Send(request, response) - return + return c.InquiryPriceResetInstancesTypeWithContext(context.Background(), request) } // InquiryPriceResetInstancesType @@ -3774,8 +4693,6 @@ func (c *Client) InquiryPriceResetInstancesType(request *InquiryPriceResetInstan // // * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口调整机型询价。 // -// * 对于包年包月实例,使用该接口会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/555/20253)接口查询账户余额。 -// // 可能返回的错误码: // // FAILEDOPERATION_INQUIRYREFUNDPRICEFAILED = "FailedOperation.InquiryRefundPriceFailed" @@ -3783,25 +4700,49 @@ func (c *Client) InquiryPriceResetInstancesType(request *InquiryPriceResetInstan // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" +// INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BASICNETWORKINSTANCEFAMILY = "InvalidParameterValue.BasicNetworkInstanceFamily" +// INVALIDPARAMETERVALUE_GPUINSTANCEFAMILY = "InvalidParameterValue.GPUInstanceFamily" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDINSTANCESOURCE = "InvalidParameterValue.InvalidInstanceSource" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" +// INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" +// INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_EIPNUMLIMIT = "LimitExceeded.EipNumLimit" +// LIMITEXCEEDED_ENINUMLIMIT = "LimitExceeded.EniNumLimit" // LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" +// RESOURCEINSUFFICIENT_SPECIFIEDINSTANCETYPE = "ResourceInsufficient.SpecifiedInstanceType" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNSUPPORTEDOPERATION_HETEROGENEOUSCHANGEINSTANCEFAMILY = "UnsupportedOperation.HeterogeneousChangeInstanceFamily" // UNSUPPORTEDOPERATION_LOCALDATADISKCHANGEINSTANCEFAMILY = "UnsupportedOperation.LocalDataDiskChangeInstanceFamily" -// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOSA3 = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToSA3" +// UNSUPPORTEDOPERATION_ORIGINALINSTANCETYPEINVALID = "UnsupportedOperation.OriginalInstanceTypeInvalid" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGINGSAMEFAMILY = "UnsupportedOperation.StoppedModeStopChargingSameFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDARMCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedARMChangeInstanceFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOARM = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToARM" +// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCETOTHISINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceToThisInstanceFamily" func (c *Client) InquiryPriceResetInstancesTypeWithContext(ctx context.Context, request *InquiryPriceResetInstancesTypeRequest) (response *InquiryPriceResetInstancesTypeResponse, err error) { if request == nil { request = NewInquiryPriceResetInstancesTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceResetInstancesType require credential") + } + request.SetContext(ctx) response = NewInquiryPriceResetInstancesTypeResponse() @@ -3813,6 +4754,7 @@ func NewInquiryPriceResizeInstanceDisksRequest() (request *InquiryPriceResizeIns request = &InquiryPriceResizeInstanceDisksRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResizeInstanceDisks") return @@ -3842,19 +4784,18 @@ func NewInquiryPriceResizeInstanceDisksResponse() (response *InquiryPriceResizeI // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_ATLEASTONE = "MissingParameter.AtLeastOne" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" +// UNSUPPORTEDOPERATION_LOCALDISKMIGRATINGTOCLOUDDISK = "UnsupportedOperation.LocalDiskMigratingToCloudDisk" func (c *Client) InquiryPriceResizeInstanceDisks(request *InquiryPriceResizeInstanceDisksRequest) (response *InquiryPriceResizeInstanceDisksResponse, err error) { - if request == nil { - request = NewInquiryPriceResizeInstanceDisksRequest() - } - - response = NewInquiryPriceResizeInstanceDisksResponse() - err = c.Send(request, response) - return + return c.InquiryPriceResizeInstanceDisksWithContext(context.Background(), request) } // InquiryPriceResizeInstanceDisks @@ -3874,15 +4815,25 @@ func (c *Client) InquiryPriceResizeInstanceDisks(request *InquiryPriceResizeInst // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_ATLEASTONE = "MissingParameter.AtLeastOne" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" +// UNSUPPORTEDOPERATION_LOCALDISKMIGRATINGTOCLOUDDISK = "UnsupportedOperation.LocalDiskMigratingToCloudDisk" func (c *Client) InquiryPriceResizeInstanceDisksWithContext(ctx context.Context, request *InquiryPriceResizeInstanceDisksRequest) (response *InquiryPriceResizeInstanceDisksResponse, err error) { if request == nil { request = NewInquiryPriceResizeInstanceDisksRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceResizeInstanceDisks require credential") + } + request.SetContext(ctx) response = NewInquiryPriceResizeInstanceDisksResponse() @@ -3894,6 +4845,7 @@ func NewInquiryPriceRunInstancesRequest() (request *InquiryPriceRunInstancesRequ request = &InquiryPriceRunInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceRunInstances") return @@ -3914,6 +4866,8 @@ func NewInquiryPriceRunInstancesResponse() (response *InquiryPriceRunInstancesRe // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" +// FAILEDOPERATION_ILLEGALTAGVALUE = "FailedOperation.IllegalTagValue" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" // FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_TAGKEYRESERVED = "FailedOperation.TagKeyReserved" @@ -3928,29 +4882,38 @@ func NewInquiryPriceRunInstancesResponse() (response *InquiryPriceRunInstancesRe // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_SNAPSHOTNOTFOUND = "InvalidParameter.SnapshotNotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDNOTFOUND = "InvalidParameterValue.BandwidthPackageIdNotFound" // INVALIDPARAMETERVALUE_CLOUDSSDDATADISKSIZETOOSMALL = "InvalidParameterValue.CloudSsdDataDiskSizeTooSmall" +// INVALIDPARAMETERVALUE_DUPLICATETAGS = "InvalidParameterValue.DuplicateTags" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTHPCCLUSTER = "InvalidParameterValue.InstanceTypeNotSupportHpcCluster" // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // LIMITEXCEEDED_DISASTERRECOVERGROUP = "LimitExceeded.DisasterRecoverGroup" +// LIMITEXCEEDED_INSTANCEENINUMLIMIT = "LimitExceeded.InstanceEniNumLimit" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" @@ -3959,19 +4922,18 @@ func NewInquiryPriceRunInstancesResponse() (response *InquiryPriceRunInstancesRe // RESOURCENOTFOUND_NODEFAULTCBS = "ResourceNotFound.NoDefaultCbs" // RESOURCENOTFOUND_NODEFAULTCBSWITHREASON = "ResourceNotFound.NoDefaultCbsWithReason" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" +// UNSUPPORTEDOPERATION_INVALIDREGIONDISKENCRYPT = "UnsupportedOperation.InvalidRegionDiskEncrypt" // UNSUPPORTEDOPERATION_NOINSTANCETYPESUPPORTSPOT = "UnsupportedOperation.NoInstanceTypeSupportSpot" +// UNSUPPORTEDOPERATION_NOTSUPPORTIMPORTINSTANCESACTIONTIMER = "UnsupportedOperation.NotSupportImportInstancesActionTimer" // UNSUPPORTEDOPERATION_ONLYFORPREPAIDACCOUNT = "UnsupportedOperation.OnlyForPrepaidAccount" +// UNSUPPORTEDOPERATION_SPOTUNSUPPORTEDREGION = "UnsupportedOperation.SpotUnsupportedRegion" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" // UNSUPPORTEDOPERATION_UNSUPPORTEDINTERNATIONALUSER = "UnsupportedOperation.UnsupportedInternationalUser" func (c *Client) InquiryPriceRunInstances(request *InquiryPriceRunInstancesRequest) (response *InquiryPriceRunInstancesResponse, err error) { - if request == nil { - request = NewInquiryPriceRunInstancesRequest() - } - - response = NewInquiryPriceRunInstancesResponse() - err = c.Send(request, response) - return + return c.InquiryPriceRunInstancesWithContext(context.Background(), request) } // InquiryPriceRunInstances @@ -3982,6 +4944,8 @@ func (c *Client) InquiryPriceRunInstances(request *InquiryPriceRunInstancesReque // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" +// FAILEDOPERATION_ILLEGALTAGVALUE = "FailedOperation.IllegalTagValue" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" // FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_TAGKEYRESERVED = "FailedOperation.TagKeyReserved" @@ -3996,29 +4960,38 @@ func (c *Client) InquiryPriceRunInstances(request *InquiryPriceRunInstancesReque // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_SNAPSHOTNOTFOUND = "InvalidParameter.SnapshotNotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDNOTFOUND = "InvalidParameterValue.BandwidthPackageIdNotFound" // INVALIDPARAMETERVALUE_CLOUDSSDDATADISKSIZETOOSMALL = "InvalidParameterValue.CloudSsdDataDiskSizeTooSmall" +// INVALIDPARAMETERVALUE_DUPLICATETAGS = "InvalidParameterValue.DuplicateTags" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTHPCCLUSTER = "InvalidParameterValue.InstanceTypeNotSupportHpcCluster" // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" +// INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" +// INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" // LIMITEXCEEDED_DISASTERRECOVERGROUP = "LimitExceeded.DisasterRecoverGroup" +// LIMITEXCEEDED_INSTANCEENINUMLIMIT = "LimitExceeded.InstanceEniNumLimit" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" @@ -4027,15 +5000,25 @@ func (c *Client) InquiryPriceRunInstances(request *InquiryPriceRunInstancesReque // RESOURCENOTFOUND_NODEFAULTCBS = "ResourceNotFound.NoDefaultCbs" // RESOURCENOTFOUND_NODEFAULTCBSWITHREASON = "ResourceNotFound.NoDefaultCbsWithReason" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" +// UNSUPPORTEDOPERATION_INVALIDREGIONDISKENCRYPT = "UnsupportedOperation.InvalidRegionDiskEncrypt" // UNSUPPORTEDOPERATION_NOINSTANCETYPESUPPORTSPOT = "UnsupportedOperation.NoInstanceTypeSupportSpot" +// UNSUPPORTEDOPERATION_NOTSUPPORTIMPORTINSTANCESACTIONTIMER = "UnsupportedOperation.NotSupportImportInstancesActionTimer" // UNSUPPORTEDOPERATION_ONLYFORPREPAIDACCOUNT = "UnsupportedOperation.OnlyForPrepaidAccount" +// UNSUPPORTEDOPERATION_SPOTUNSUPPORTEDREGION = "UnsupportedOperation.SpotUnsupportedRegion" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" // UNSUPPORTEDOPERATION_UNSUPPORTEDINTERNATIONALUSER = "UnsupportedOperation.UnsupportedInternationalUser" func (c *Client) InquiryPriceRunInstancesWithContext(ctx context.Context, request *InquiryPriceRunInstancesRequest) (response *InquiryPriceRunInstancesResponse, err error) { if request == nil { request = NewInquiryPriceRunInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceRunInstances require credential") + } + request.SetContext(ctx) response = NewInquiryPriceRunInstancesResponse() @@ -4047,6 +5030,7 @@ func NewInquiryPriceTerminateInstancesRequest() (request *InquiryPriceTerminateI request = &InquiryPriceTerminateInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceTerminateInstances") return @@ -4064,7 +5048,9 @@ func NewInquiryPriceTerminateInstancesResponse() (response *InquiryPriceTerminat // // * 查询退还实例可以返还的费用。 // -// * 支持批量操作,每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定[错误码](#4.-.E9.94.99.E8.AF.AF.E7.A0.81)返回。 +// * 在退还包年包月实例时,使用ReleasePrepaidDataDisks参数,会在返回值中包含退还挂载的包年包月数据盘返还的费用。 +// +// * 支持批量操作,每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定错误码返回。 // // 可能返回的错误码: // @@ -4077,18 +5063,15 @@ func NewInquiryPriceTerminateInstancesResponse() (response *InquiryPriceTerminat // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCENOTSUPPORTEDPREPAIDINSTANCE = "InvalidInstanceNotSupportedPrepaidInstance" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // UNSUPPORTEDOPERATION_INSTANCEMIXEDPRICINGMODEL = "UnsupportedOperation.InstanceMixedPricingModel" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" func (c *Client) InquiryPriceTerminateInstances(request *InquiryPriceTerminateInstancesRequest) (response *InquiryPriceTerminateInstancesResponse, err error) { - if request == nil { - request = NewInquiryPriceTerminateInstancesRequest() - } - - response = NewInquiryPriceTerminateInstancesResponse() - err = c.Send(request, response) - return + return c.InquiryPriceTerminateInstancesWithContext(context.Background(), request) } // InquiryPriceTerminateInstances @@ -4096,7 +5079,9 @@ func (c *Client) InquiryPriceTerminateInstances(request *InquiryPriceTerminateIn // // * 查询退还实例可以返还的费用。 // -// * 支持批量操作,每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定[错误码](#4.-.E9.94.99.E8.AF.AF.E7.A0.81)返回。 +// * 在退还包年包月实例时,使用ReleasePrepaidDataDisks参数,会在返回值中包含退还挂载的包年包月数据盘返还的费用。 +// +// * 支持批量操作,每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定错误码返回。 // // 可能返回的错误码: // @@ -4109,14 +5094,22 @@ func (c *Client) InquiryPriceTerminateInstances(request *InquiryPriceTerminateIn // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCENOTSUPPORTEDPREPAIDINSTANCE = "InvalidInstanceNotSupportedPrepaidInstance" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // UNSUPPORTEDOPERATION_INSTANCEMIXEDPRICINGMODEL = "UnsupportedOperation.InstanceMixedPricingModel" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" func (c *Client) InquiryPriceTerminateInstancesWithContext(ctx context.Context, request *InquiryPriceTerminateInstancesRequest) (response *InquiryPriceTerminateInstancesResponse, err error) { if request == nil { request = NewInquiryPriceTerminateInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceTerminateInstances require credential") + } + request.SetContext(ctx) response = NewInquiryPriceTerminateInstancesResponse() @@ -4124,10 +5117,76 @@ func (c *Client) InquiryPriceTerminateInstancesWithContext(ctx context.Context, return } +func NewModifyChcAttributeRequest() (request *ModifyChcAttributeRequest) { + request = &ModifyChcAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "ModifyChcAttribute") + + return +} + +func NewModifyChcAttributeResponse() (response *ModifyChcAttributeResponse) { + response = &ModifyChcAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifyChcAttribute +// 修改CHC物理服务器的属性 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_CHCNETWORKEMPTY = "InvalidParameterValue.ChcNetworkEmpty" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" +// INVALIDPASSWORD = "InvalidPassword" +func (c *Client) ModifyChcAttribute(request *ModifyChcAttributeRequest) (response *ModifyChcAttributeResponse, err error) { + return c.ModifyChcAttributeWithContext(context.Background(), request) +} + +// ModifyChcAttribute +// 修改CHC物理服务器的属性 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_CHCNETWORKEMPTY = "InvalidParameterValue.ChcNetworkEmpty" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" +// INVALIDPASSWORD = "InvalidPassword" +func (c *Client) ModifyChcAttributeWithContext(ctx context.Context, request *ModifyChcAttributeRequest) (response *ModifyChcAttributeResponse, err error) { + if request == nil { + request = NewModifyChcAttributeRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyChcAttribute require credential") + } + + request.SetContext(ctx) + + response = NewModifyChcAttributeResponse() + err = c.Send(request, response) + return +} + func NewModifyDisasterRecoverGroupAttributeRequest() (request *ModifyDisasterRecoverGroupAttributeRequest) { request = &ModifyDisasterRecoverGroupAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyDisasterRecoverGroupAttribute") return @@ -4145,16 +5204,11 @@ func NewModifyDisasterRecoverGroupAttributeResponse() (response *ModifyDisasterR // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" // RESOURCENOTFOUND_INVALIDPLACEMENTSET = "ResourceNotFound.InvalidPlacementSet" func (c *Client) ModifyDisasterRecoverGroupAttribute(request *ModifyDisasterRecoverGroupAttributeRequest) (response *ModifyDisasterRecoverGroupAttributeResponse, err error) { - if request == nil { - request = NewModifyDisasterRecoverGroupAttributeRequest() - } - - response = NewModifyDisasterRecoverGroupAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyDisasterRecoverGroupAttributeWithContext(context.Background(), request) } // ModifyDisasterRecoverGroupAttribute @@ -4162,12 +5216,18 @@ func (c *Client) ModifyDisasterRecoverGroupAttribute(request *ModifyDisasterReco // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" // RESOURCENOTFOUND_INVALIDPLACEMENTSET = "ResourceNotFound.InvalidPlacementSet" func (c *Client) ModifyDisasterRecoverGroupAttributeWithContext(ctx context.Context, request *ModifyDisasterRecoverGroupAttributeRequest) (response *ModifyDisasterRecoverGroupAttributeResponse, err error) { if request == nil { request = NewModifyDisasterRecoverGroupAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyDisasterRecoverGroupAttribute require credential") + } + request.SetContext(ctx) response = NewModifyDisasterRecoverGroupAttributeResponse() @@ -4179,6 +5239,7 @@ func NewModifyHostsAttributeRequest() (request *ModifyHostsAttributeRequest) { request = &ModifyHostsAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyHostsAttribute") return @@ -4199,14 +5260,9 @@ func NewModifyHostsAttributeResponse() (response *ModifyHostsAttributeResponse) // INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" func (c *Client) ModifyHostsAttribute(request *ModifyHostsAttributeRequest) (response *ModifyHostsAttributeResponse, err error) { - if request == nil { - request = NewModifyHostsAttributeRequest() - } - - response = NewModifyHostsAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyHostsAttributeWithContext(context.Background(), request) } // ModifyHostsAttribute @@ -4217,10 +5273,16 @@ func (c *Client) ModifyHostsAttribute(request *ModifyHostsAttributeRequest) (res // INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" func (c *Client) ModifyHostsAttributeWithContext(ctx context.Context, request *ModifyHostsAttributeRequest) (response *ModifyHostsAttributeResponse, err error) { if request == nil { request = NewModifyHostsAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyHostsAttribute require credential") + } + request.SetContext(ctx) response = NewModifyHostsAttributeResponse() @@ -4228,10 +5290,62 @@ func (c *Client) ModifyHostsAttributeWithContext(ctx context.Context, request *M return } +func NewModifyHpcClusterAttributeRequest() (request *ModifyHpcClusterAttributeRequest) { + request = &ModifyHpcClusterAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "ModifyHpcClusterAttribute") + + return +} + +func NewModifyHpcClusterAttributeResponse() (response *ModifyHpcClusterAttributeResponse) { + response = &ModifyHpcClusterAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifyHpcClusterAttribute +// 修改高性能计算集群属性。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" +func (c *Client) ModifyHpcClusterAttribute(request *ModifyHpcClusterAttributeRequest) (response *ModifyHpcClusterAttributeResponse, err error) { + return c.ModifyHpcClusterAttributeWithContext(context.Background(), request) +} + +// ModifyHpcClusterAttribute +// 修改高性能计算集群属性。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// RESOURCENOTFOUND_HPCCLUSTER = "ResourceNotFound.HpcCluster" +func (c *Client) ModifyHpcClusterAttributeWithContext(ctx context.Context, request *ModifyHpcClusterAttributeRequest) (response *ModifyHpcClusterAttributeResponse, err error) { + if request == nil { + request = NewModifyHpcClusterAttributeRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyHpcClusterAttribute require credential") + } + + request.SetContext(ctx) + + response = NewModifyHpcClusterAttributeResponse() + err = c.Send(request, response) + return +} + func NewModifyImageAttributeRequest() (request *ModifyImageAttributeRequest) { request = &ModifyImageAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyImageAttribute") return @@ -4255,16 +5369,11 @@ func NewModifyImageAttributeResponse() (response *ModifyImageAttributeResponse) // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" // INVALIDIMAGENAME_DUPLICATE = "InvalidImageName.Duplicate" -// INVALIDPARAMETER_VALUETOOLARGE = "InvalidParameter.ValueTooLarge" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" func (c *Client) ModifyImageAttribute(request *ModifyImageAttributeRequest) (response *ModifyImageAttributeResponse, err error) { - if request == nil { - request = NewModifyImageAttributeRequest() - } - - response = NewModifyImageAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyImageAttributeWithContext(context.Background(), request) } // ModifyImageAttribute @@ -4278,12 +5387,18 @@ func (c *Client) ModifyImageAttribute(request *ModifyImageAttributeRequest) (res // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" // INVALIDIMAGENAME_DUPLICATE = "InvalidImageName.Duplicate" -// INVALIDPARAMETER_VALUETOOLARGE = "InvalidParameter.ValueTooLarge" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" func (c *Client) ModifyImageAttributeWithContext(ctx context.Context, request *ModifyImageAttributeRequest) (response *ModifyImageAttributeResponse, err error) { if request == nil { request = NewModifyImageAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyImageAttribute require credential") + } + request.SetContext(ctx) response = NewModifyImageAttributeResponse() @@ -4295,6 +5410,7 @@ func NewModifyImageSharePermissionRequest() (request *ModifyImageSharePermission request = &ModifyImageSharePermissionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyImageSharePermission") return @@ -4322,6 +5438,7 @@ func NewModifyImageSharePermissionResponse() (response *ModifyImageSharePermissi // // FAILEDOPERATION_ACCOUNTALREADYEXISTS = "FailedOperation.AccountAlreadyExists" // FAILEDOPERATION_ACCOUNTISYOURSELF = "FailedOperation.AccountIsYourSelf" +// FAILEDOPERATION_BYOLIMAGESHAREFAILED = "FailedOperation.BYOLImageShareFailed" // FAILEDOPERATION_NOTMASTERACCOUNT = "FailedOperation.NotMasterAccount" // FAILEDOPERATION_QIMAGESHAREFAILED = "FailedOperation.QImageShareFailed" // FAILEDOPERATION_RIMAGESHAREFAILED = "FailedOperation.RImageShareFailed" @@ -4330,19 +5447,15 @@ func NewModifyImageSharePermissionResponse() (response *ModifyImageSharePermissi // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // OVERQUOTA = "OverQuota" // UNAUTHORIZEDOPERATION_IMAGENOTBELONGTOACCOUNT = "UnauthorizedOperation.ImageNotBelongToAccount" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" func (c *Client) ModifyImageSharePermission(request *ModifyImageSharePermissionRequest) (response *ModifyImageSharePermissionResponse, err error) { - if request == nil { - request = NewModifyImageSharePermissionRequest() - } - - response = NewModifyImageSharePermissionResponse() - err = c.Send(request, response) - return + return c.ModifyImageSharePermissionWithContext(context.Background(), request) } // ModifyImageSharePermission @@ -4360,6 +5473,7 @@ func (c *Client) ModifyImageSharePermission(request *ModifyImageSharePermissionR // // FAILEDOPERATION_ACCOUNTALREADYEXISTS = "FailedOperation.AccountAlreadyExists" // FAILEDOPERATION_ACCOUNTISYOURSELF = "FailedOperation.AccountIsYourSelf" +// FAILEDOPERATION_BYOLIMAGESHAREFAILED = "FailedOperation.BYOLImageShareFailed" // FAILEDOPERATION_NOTMASTERACCOUNT = "FailedOperation.NotMasterAccount" // FAILEDOPERATION_QIMAGESHAREFAILED = "FailedOperation.QImageShareFailed" // FAILEDOPERATION_RIMAGESHAREFAILED = "FailedOperation.RImageShareFailed" @@ -4368,15 +5482,22 @@ func (c *Client) ModifyImageSharePermission(request *ModifyImageSharePermissionR // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // OVERQUOTA = "OverQuota" // UNAUTHORIZEDOPERATION_IMAGENOTBELONGTOACCOUNT = "UnauthorizedOperation.ImageNotBelongToAccount" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" func (c *Client) ModifyImageSharePermissionWithContext(ctx context.Context, request *ModifyImageSharePermissionRequest) (response *ModifyImageSharePermissionResponse, err error) { if request == nil { request = NewModifyImageSharePermissionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyImageSharePermission require credential") + } + request.SetContext(ctx) response = NewModifyImageSharePermissionResponse() @@ -4388,6 +5509,7 @@ func NewModifyInstanceDiskTypeRequest() (request *ModifyInstanceDiskTypeRequest) request = &ModifyInstanceDiskTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstanceDiskType") return @@ -4409,28 +5531,37 @@ func NewModifyInstanceDiskTypeResponse() (response *ModifyInstanceDiskTypeRespon // // * 不支持竞价实例类型。 // +// * 若实例同时存在本地系统盘和本地数据盘,需同时调整系统盘和数据盘的介质类型,不支持单独针对本地系统盘或本地数据盘修改介质类型。 +// // * 修改前请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 // // 可能返回的错误码: // // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" +// INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_INVALIDCLOUDDISKSOLDOUT = "InvalidParameter.InvalidCloudDiskSoldOut" // INVALIDPARAMETER_INVALIDINSTANCENOTSUPPORTED = "InvalidParameter.InvalidInstanceNotSupported" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LOCALDISKSIZERANGE = "InvalidParameterValue.LocalDiskSizeRange" // INVALIDPERMISSION = "InvalidPermission" // MISSINGPARAMETER = "MissingParameter" +// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" +// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// UNSUPPORTEDOPERATION_EDGEZONENOTSUPPORTCLOUDDISK = "UnsupportedOperation.EdgeZoneNotSupportCloudDisk" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ModifyInstanceDiskType(request *ModifyInstanceDiskTypeRequest) (response *ModifyInstanceDiskTypeResponse, err error) { - if request == nil { - request = NewModifyInstanceDiskTypeRequest() - } - - response = NewModifyInstanceDiskTypeResponse() - err = c.Send(request, response) - return + return c.ModifyInstanceDiskTypeWithContext(context.Background(), request) } // ModifyInstanceDiskType @@ -4442,24 +5573,44 @@ func (c *Client) ModifyInstanceDiskType(request *ModifyInstanceDiskTypeRequest) // // * 不支持竞价实例类型。 // +// * 若实例同时存在本地系统盘和本地数据盘,需同时调整系统盘和数据盘的介质类型,不支持单独针对本地系统盘或本地数据盘修改介质类型。 +// // * 修改前请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 // // 可能返回的错误码: // // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" +// INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" +// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_INVALIDCLOUDDISKSOLDOUT = "InvalidParameter.InvalidCloudDiskSoldOut" // INVALIDPARAMETER_INVALIDINSTANCENOTSUPPORTED = "InvalidParameter.InvalidInstanceNotSupported" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LOCALDISKSIZERANGE = "InvalidParameterValue.LocalDiskSizeRange" // INVALIDPERMISSION = "InvalidPermission" // MISSINGPARAMETER = "MissingParameter" +// MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" +// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// UNSUPPORTEDOPERATION_EDGEZONENOTSUPPORTCLOUDDISK = "UnsupportedOperation.EdgeZoneNotSupportCloudDisk" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ModifyInstanceDiskTypeWithContext(ctx context.Context, request *ModifyInstanceDiskTypeRequest) (response *ModifyInstanceDiskTypeResponse, err error) { if request == nil { request = NewModifyInstanceDiskTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstanceDiskType require credential") + } + request.SetContext(ctx) response = NewModifyInstanceDiskTypeResponse() @@ -4471,6 +5622,7 @@ func NewModifyInstancesAttributeRequest() (request *ModifyInstancesAttributeRequ request = &ModifyInstancesAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesAttribute") return @@ -4507,18 +5659,25 @@ func NewModifyInstancesAttributeResponse() (response *ModifyInstancesAttributeRe // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDPARAMETER_HOSTNAMEILLEGAL = "InvalidParameter.HostNameIllegal" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_CAMROLENAMEMALFORMED = "InvalidParameterValue.CamRoleNameMalformed" +// INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // LIMITEXCEEDED_ASSOCIATEUSGLIMITEXCEEDED = "LimitExceeded.AssociateUSGLimitExceeded" // LIMITEXCEEDED_CVMSVIFSPERSECGROUPLIMITEXCEEDED = "LimitExceeded.CvmsVifsPerSecGroupLimitExceeded" +// LIMITEXCEEDED_SINGLEUSGQUOTA = "LimitExceeded.SingleUSGQuota" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -4529,15 +5688,10 @@ func NewModifyInstancesAttributeResponse() (response *ModifyInstancesAttributeRe // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDINSTANCENOTSUPPORTEDPROTECTEDINSTANCE = "UnsupportedOperation.InvalidInstanceNotSupportedProtectedInstance" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ModifyInstancesAttribute(request *ModifyInstancesAttributeRequest) (response *ModifyInstancesAttributeResponse, err error) { - if request == nil { - request = NewModifyInstancesAttributeRequest() - } - - response = NewModifyInstancesAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyInstancesAttributeWithContext(context.Background(), request) } // ModifyInstancesAttribute @@ -4564,18 +5718,25 @@ func (c *Client) ModifyInstancesAttribute(request *ModifyInstancesAttributeReque // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDPARAMETER_HOSTNAMEILLEGAL = "InvalidParameter.HostNameIllegal" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_CAMROLENAMEMALFORMED = "InvalidParameterValue.CamRoleNameMalformed" +// INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupId.NotFound" // LIMITEXCEEDED_ASSOCIATEUSGLIMITEXCEEDED = "LimitExceeded.AssociateUSGLimitExceeded" // LIMITEXCEEDED_CVMSVIFSPERSECGROUPLIMITEXCEEDED = "LimitExceeded.CvmsVifsPerSecGroupLimitExceeded" +// LIMITEXCEEDED_SINGLEUSGQUOTA = "LimitExceeded.SingleUSGQuota" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -4586,11 +5747,17 @@ func (c *Client) ModifyInstancesAttribute(request *ModifyInstancesAttributeReque // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDINSTANCENOTSUPPORTEDPROTECTEDINSTANCE = "UnsupportedOperation.InvalidInstanceNotSupportedProtectedInstance" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ModifyInstancesAttributeWithContext(ctx context.Context, request *ModifyInstancesAttributeRequest) (response *ModifyInstancesAttributeResponse, err error) { if request == nil { request = NewModifyInstancesAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstancesAttribute require credential") + } + request.SetContext(ctx) response = NewModifyInstancesAttributeResponse() @@ -4602,6 +5769,7 @@ func NewModifyInstancesChargeTypeRequest() (request *ModifyInstancesChargeTypeRe request = &ModifyInstancesChargeTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesChargeType") return @@ -4617,14 +5785,15 @@ func NewModifyInstancesChargeTypeResponse() (response *ModifyInstancesChargeType // ModifyInstancesChargeType // 本接口 (ModifyInstancesChargeType) 用于切换实例的计费模式。 // -// * 只支持从 `POSTPAID_BY_HOUR` 计费模式切换为`PREPAID`计费模式。 -// // * 关机不收费的实例、`BC1`和`BS1`机型族的实例、设置定时销毁的实例不支持该操作。 // // * 实例操作结果可以通过调用 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728#.E7.A4.BA.E4.BE.8B3-.E6.9F.A5.E8.AF.A2.E5.AE.9E.E4.BE.8B.E7.9A.84.E6.9C.80.E6.96.B0.E6.93.8D.E4.BD.9C.E6.83.85.E5.86.B5) 接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" +// FAILEDOPERATION_PROMOTIONALPERIORESTRICTION = "FailedOperation.PromotionalPerioRestriction" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" @@ -4634,36 +5803,43 @@ func NewModifyInstancesChargeTypeResponse() (response *ModifyInstancesChargeType // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // LIMITEXCEEDED_INSTANCEQUOTA = "LimitExceeded.InstanceQuota" +// LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" +// UNSUPPORTEDOPERATION_UNDERWRITEDISCOUNTGREATERTHANPREPAIDDISCOUNT = "UnsupportedOperation.UnderwriteDiscountGreaterThanPrepaidDiscount" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" func (c *Client) ModifyInstancesChargeType(request *ModifyInstancesChargeTypeRequest) (response *ModifyInstancesChargeTypeResponse, err error) { - if request == nil { - request = NewModifyInstancesChargeTypeRequest() - } - - response = NewModifyInstancesChargeTypeResponse() - err = c.Send(request, response) - return + return c.ModifyInstancesChargeTypeWithContext(context.Background(), request) } // ModifyInstancesChargeType // 本接口 (ModifyInstancesChargeType) 用于切换实例的计费模式。 // -// * 只支持从 `POSTPAID_BY_HOUR` 计费模式切换为`PREPAID`计费模式。 -// // * 关机不收费的实例、`BC1`和`BS1`机型族的实例、设置定时销毁的实例不支持该操作。 // // * 实例操作结果可以通过调用 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728#.E7.A4.BA.E4.BE.8B3-.E6.9F.A5.E8.AF.A2.E5.AE.9E.E4.BE.8B.E7.9A.84.E6.9C.80.E6.96.B0.E6.93.8D.E4.BD.9C.E6.83.85.E5.86.B5) 接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 // // 可能返回的错误码: // +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" +// FAILEDOPERATION_PROMOTIONALPERIORESTRICTION = "FailedOperation.PromotionalPerioRestriction" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" @@ -4673,19 +5849,36 @@ func (c *Client) ModifyInstancesChargeType(request *ModifyInstancesChargeTypeReq // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // LIMITEXCEEDED_INSTANCEQUOTA = "LimitExceeded.InstanceQuota" +// LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" +// UNSUPPORTEDOPERATION_UNDERWRITEDISCOUNTGREATERTHANPREPAIDDISCOUNT = "UnsupportedOperation.UnderwriteDiscountGreaterThanPrepaidDiscount" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" func (c *Client) ModifyInstancesChargeTypeWithContext(ctx context.Context, request *ModifyInstancesChargeTypeRequest) (response *ModifyInstancesChargeTypeResponse, err error) { if request == nil { request = NewModifyInstancesChargeTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstancesChargeType require credential") + } + request.SetContext(ctx) response = NewModifyInstancesChargeTypeResponse() @@ -4697,6 +5890,7 @@ func NewModifyInstancesProjectRequest() (request *ModifyInstancesProjectRequest) request = &ModifyInstancesProjectRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesProject") return @@ -4716,8 +5910,6 @@ func NewModifyInstancesProjectResponse() (response *ModifyInstancesProjectRespon // // * 绑定负载均衡的实例不支持修改实例所属项目,请先使用[`DeregisterInstancesFromLoadBalancer`](https://cloud.tencent.com/document/api/214/1258)接口解绑负载均衡。 // -// [^_^]: # ( 修改实例所属项目会自动解关联实例原来关联的安全组,修改完成后可使用[`ModifyInstancesAttribute`](https://cloud.tencent.com/document/api/213/15739)接口关联安全组。) -// // * 支持批量操作。每次请求批量实例的上限为100。 // // * 实例操作结果可以通过调用 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728#.E7.A4.BA.E4.BE.8B3-.E6.9F.A5.E8.AF.A2.E5.AE.9E.E4.BE.8B.E7.9A.84.E6.9C.80.E6.96.B0.E6.93.8D.E4.BD.9C.E6.83.85.E5.86.B5) 接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 @@ -4729,6 +5921,7 @@ func NewModifyInstancesProjectResponse() (response *ModifyInstancesProjectRespon // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // MISSINGPARAMETER = "MissingParameter" @@ -4736,13 +5929,7 @@ func NewModifyInstancesProjectResponse() (response *ModifyInstancesProjectRespon // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" func (c *Client) ModifyInstancesProject(request *ModifyInstancesProjectRequest) (response *ModifyInstancesProjectResponse, err error) { - if request == nil { - request = NewModifyInstancesProjectRequest() - } - - response = NewModifyInstancesProjectResponse() - err = c.Send(request, response) - return + return c.ModifyInstancesProjectWithContext(context.Background(), request) } // ModifyInstancesProject @@ -4752,8 +5939,6 @@ func (c *Client) ModifyInstancesProject(request *ModifyInstancesProjectRequest) // // * 绑定负载均衡的实例不支持修改实例所属项目,请先使用[`DeregisterInstancesFromLoadBalancer`](https://cloud.tencent.com/document/api/214/1258)接口解绑负载均衡。 // -// [^_^]: # ( 修改实例所属项目会自动解关联实例原来关联的安全组,修改完成后可使用[`ModifyInstancesAttribute`](https://cloud.tencent.com/document/api/213/15739)接口关联安全组。) -// // * 支持批量操作。每次请求批量实例的上限为100。 // // * 实例操作结果可以通过调用 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728#.E7.A4.BA.E4.BE.8B3-.E6.9F.A5.E8.AF.A2.E5.AE.9E.E4.BE.8B.E7.9A.84.E6.9C.80.E6.96.B0.E6.93.8D.E4.BD.9C.E6.83.85.E5.86.B5) 接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 @@ -4765,6 +5950,7 @@ func (c *Client) ModifyInstancesProject(request *ModifyInstancesProjectRequest) // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPROJECTID_NOTFOUND = "InvalidProjectId.NotFound" // MISSINGPARAMETER = "MissingParameter" @@ -4775,6 +5961,11 @@ func (c *Client) ModifyInstancesProjectWithContext(ctx context.Context, request if request == nil { request = NewModifyInstancesProjectRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstancesProject require credential") + } + request.SetContext(ctx) response = NewModifyInstancesProjectResponse() @@ -4786,6 +5977,7 @@ func NewModifyInstancesRenewFlagRequest() (request *ModifyInstancesRenewFlagRequ request = &ModifyInstancesRenewFlagRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesRenewFlag") return @@ -4815,27 +6007,27 @@ func NewModifyInstancesRenewFlagResponse() (response *ModifyInstancesRenewFlagRe // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" func (c *Client) ModifyInstancesRenewFlag(request *ModifyInstancesRenewFlagRequest) (response *ModifyInstancesRenewFlagResponse, err error) { - if request == nil { - request = NewModifyInstancesRenewFlagRequest() - } - - response = NewModifyInstancesRenewFlagResponse() - err = c.Send(request, response) - return + return c.ModifyInstancesRenewFlagWithContext(context.Background(), request) } // ModifyInstancesRenewFlag @@ -4855,23 +6047,34 @@ func (c *Client) ModifyInstancesRenewFlag(request *ModifyInstancesRenewFlagReque // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" func (c *Client) ModifyInstancesRenewFlagWithContext(ctx context.Context, request *ModifyInstancesRenewFlagRequest) (response *ModifyInstancesRenewFlagResponse, err error) { if request == nil { request = NewModifyInstancesRenewFlagRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstancesRenewFlag require credential") + } + request.SetContext(ctx) response = NewModifyInstancesRenewFlagResponse() @@ -4883,6 +6086,7 @@ func NewModifyInstancesVpcAttributeRequest() (request *ModifyInstancesVpcAttribu request = &ModifyInstancesVpcAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesVpcAttribute") return @@ -4896,7 +6100,7 @@ func NewModifyInstancesVpcAttributeResponse() (response *ModifyInstancesVpcAttri } // ModifyInstancesVpcAttribute -// 本接口(ModifyInstancesVpcAttribute)用于修改实例vpc属性,如私有网络ip。 +// 本接口(ModifyInstancesVpcAttribute)用于修改实例vpc属性,如私有网络IP。 // // * 此操作默认会关闭实例,完成后再启动。 // @@ -4912,16 +6116,25 @@ func NewModifyInstancesVpcAttributeResponse() (response *ModifyInstancesVpcAttri // INVALIDINSTANCESTATE = "InvalidInstanceState" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_EDGEZONEINSTANCE = "UnsupportedOperation.EdgeZoneInstance" +// UNSUPPORTEDOPERATION_ELASTICNETWORKINTERFACE = "UnsupportedOperation.ElasticNetworkInterface" // UNSUPPORTEDOPERATION_IPV6NOTSUPPORTVPCMIGRATE = "UnsupportedOperation.IPv6NotSupportVpcMigrate" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" // UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -4933,21 +6146,17 @@ func NewModifyInstancesVpcAttributeResponse() (response *ModifyInstancesVpcAttri // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_MODIFYVPCWITHCLB = "UnsupportedOperation.ModifyVPCWithCLB" +// UNSUPPORTEDOPERATION_MODIFYVPCWITHCLASSLINK = "UnsupportedOperation.ModifyVPCWithClassLink" +// UNSUPPORTEDOPERATION_NOVPCNETWORK = "UnsupportedOperation.NoVpcNetwork" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" func (c *Client) ModifyInstancesVpcAttribute(request *ModifyInstancesVpcAttributeRequest) (response *ModifyInstancesVpcAttributeResponse, err error) { - if request == nil { - request = NewModifyInstancesVpcAttributeRequest() - } - - response = NewModifyInstancesVpcAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyInstancesVpcAttributeWithContext(context.Background(), request) } // ModifyInstancesVpcAttribute -// 本接口(ModifyInstancesVpcAttribute)用于修改实例vpc属性,如私有网络ip。 +// 本接口(ModifyInstancesVpcAttribute)用于修改实例vpc属性,如私有网络IP。 // // * 此操作默认会关闭实例,完成后再启动。 // @@ -4963,16 +6172,25 @@ func (c *Client) ModifyInstancesVpcAttribute(request *ModifyInstancesVpcAttribut // INVALIDINSTANCESTATE = "InvalidInstanceState" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" +// INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_EDGEZONEINSTANCE = "UnsupportedOperation.EdgeZoneInstance" +// UNSUPPORTEDOPERATION_ELASTICNETWORKINTERFACE = "UnsupportedOperation.ElasticNetworkInterface" // UNSUPPORTEDOPERATION_IPV6NOTSUPPORTVPCMIGRATE = "UnsupportedOperation.IPv6NotSupportVpcMigrate" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" // UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -4984,6 +6202,8 @@ func (c *Client) ModifyInstancesVpcAttribute(request *ModifyInstancesVpcAttribut // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_MODIFYVPCWITHCLB = "UnsupportedOperation.ModifyVPCWithCLB" +// UNSUPPORTEDOPERATION_MODIFYVPCWITHCLASSLINK = "UnsupportedOperation.ModifyVPCWithClassLink" +// UNSUPPORTEDOPERATION_NOVPCNETWORK = "UnsupportedOperation.NoVpcNetwork" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" @@ -4991,6 +6211,11 @@ func (c *Client) ModifyInstancesVpcAttributeWithContext(ctx context.Context, req if request == nil { request = NewModifyInstancesVpcAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyInstancesVpcAttribute require credential") + } + request.SetContext(ctx) response = NewModifyInstancesVpcAttributeResponse() @@ -5002,6 +6227,7 @@ func NewModifyKeyPairAttributeRequest() (request *ModifyKeyPairAttributeRequest) request = &ModifyKeyPairAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyKeyPairAttribute") return @@ -5033,13 +6259,7 @@ func NewModifyKeyPairAttributeResponse() (response *ModifyKeyPairAttributeRespon // INVALIDPARAMETERVALUE = "InvalidParameterValue" // MISSINGPARAMETER = "MissingParameter" func (c *Client) ModifyKeyPairAttribute(request *ModifyKeyPairAttributeRequest) (response *ModifyKeyPairAttributeResponse, err error) { - if request == nil { - request = NewModifyKeyPairAttributeRequest() - } - - response = NewModifyKeyPairAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyKeyPairAttributeWithContext(context.Background(), request) } // ModifyKeyPairAttribute @@ -5064,6 +6284,11 @@ func (c *Client) ModifyKeyPairAttributeWithContext(ctx context.Context, request if request == nil { request = NewModifyKeyPairAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyKeyPairAttribute require credential") + } + request.SetContext(ctx) response = NewModifyKeyPairAttributeResponse() @@ -5075,6 +6300,7 @@ func NewModifyLaunchTemplateDefaultVersionRequest() (request *ModifyLaunchTempla request = &ModifyLaunchTemplateDefaultVersionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyLaunchTemplateDefaultVersion") return @@ -5103,13 +6329,7 @@ func NewModifyLaunchTemplateDefaultVersionResponse() (response *ModifyLaunchTemp // MISSINGPARAMETER = "MissingParameter" // UNKNOWNPARAMETER = "UnknownParameter" func (c *Client) ModifyLaunchTemplateDefaultVersion(request *ModifyLaunchTemplateDefaultVersionRequest) (response *ModifyLaunchTemplateDefaultVersionResponse, err error) { - if request == nil { - request = NewModifyLaunchTemplateDefaultVersionRequest() - } - - response = NewModifyLaunchTemplateDefaultVersionResponse() - err = c.Send(request, response) - return + return c.ModifyLaunchTemplateDefaultVersionWithContext(context.Background(), request) } // ModifyLaunchTemplateDefaultVersion @@ -5131,6 +6351,11 @@ func (c *Client) ModifyLaunchTemplateDefaultVersionWithContext(ctx context.Conte if request == nil { request = NewModifyLaunchTemplateDefaultVersionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLaunchTemplateDefaultVersion require credential") + } + request.SetContext(ctx) response = NewModifyLaunchTemplateDefaultVersionResponse() @@ -5142,6 +6367,7 @@ func NewProgramFpgaImageRequest() (request *ProgramFpgaImageRequest) { request = &ProgramFpgaImageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ProgramFpgaImage") return @@ -5163,17 +6389,15 @@ func NewProgramFpgaImageResponse() (response *ProgramFpgaImageResponse) { // // 可能返回的错误码: // +// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_NOTFPGAINSTANCE = "UnsupportedOperation.NotFpgaInstance" func (c *Client) ProgramFpgaImage(request *ProgramFpgaImageRequest) (response *ProgramFpgaImageResponse, err error) { - if request == nil { - request = NewProgramFpgaImageRequest() - } - - response = NewProgramFpgaImageResponse() - err = c.Send(request, response) - return + return c.ProgramFpgaImageWithContext(context.Background(), request) } // ProgramFpgaImage @@ -5185,13 +6409,22 @@ func (c *Client) ProgramFpgaImage(request *ProgramFpgaImageRequest) (response *P // // 可能返回的错误码: // +// INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_NOTFPGAINSTANCE = "UnsupportedOperation.NotFpgaInstance" func (c *Client) ProgramFpgaImageWithContext(ctx context.Context, request *ProgramFpgaImageRequest) (response *ProgramFpgaImageResponse, err error) { if request == nil { request = NewProgramFpgaImageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ProgramFpgaImage require credential") + } + request.SetContext(ctx) response = NewProgramFpgaImageResponse() @@ -5203,6 +6436,7 @@ func NewPurchaseReservedInstancesOfferingRequest() (request *PurchaseReservedIns request = &PurchaseReservedInstancesOfferingRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "PurchaseReservedInstancesOffering") return @@ -5229,13 +6463,7 @@ func NewPurchaseReservedInstancesOfferingResponse() (response *PurchaseReservedI // UNSUPPORTEDOPERATION_RESERVEDINSTANCEINVISIBLEFORUSER = "UnsupportedOperation.ReservedInstanceInvisibleForUser" // UNSUPPORTEDOPERATION_RESERVEDINSTANCEOUTOFQUATA = "UnsupportedOperation.ReservedInstanceOutofQuata" func (c *Client) PurchaseReservedInstancesOffering(request *PurchaseReservedInstancesOfferingRequest) (response *PurchaseReservedInstancesOfferingResponse, err error) { - if request == nil { - request = NewPurchaseReservedInstancesOfferingRequest() - } - - response = NewPurchaseReservedInstancesOfferingResponse() - err = c.Send(request, response) - return + return c.PurchaseReservedInstancesOfferingWithContext(context.Background(), request) } // PurchaseReservedInstancesOffering @@ -5255,6 +6483,11 @@ func (c *Client) PurchaseReservedInstancesOfferingWithContext(ctx context.Contex if request == nil { request = NewPurchaseReservedInstancesOfferingRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("PurchaseReservedInstancesOffering require credential") + } + request.SetContext(ctx) response = NewPurchaseReservedInstancesOfferingResponse() @@ -5266,6 +6499,7 @@ func NewRebootInstancesRequest() (request *RebootInstancesRequest) { request = &RebootInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "RebootInstances") return @@ -5299,16 +6533,20 @@ func NewRebootInstancesResponse() (response *RebootInstancesResponse) { // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -5320,13 +6558,7 @@ func NewRebootInstancesResponse() (response *RebootInstancesResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) RebootInstances(request *RebootInstancesRequest) (response *RebootInstancesResponse, err error) { - if request == nil { - request = NewRebootInstancesRequest() - } - - response = NewRebootInstancesResponse() - err = c.Send(request, response) - return + return c.RebootInstancesWithContext(context.Background(), request) } // RebootInstances @@ -5350,16 +6582,20 @@ func (c *Client) RebootInstances(request *RebootInstancesRequest) (response *Reb // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -5374,6 +6610,11 @@ func (c *Client) RebootInstancesWithContext(ctx context.Context, request *Reboot if request == nil { request = NewRebootInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RebootInstances require credential") + } + request.SetContext(ctx) response = NewRebootInstancesResponse() @@ -5381,10 +6622,123 @@ func (c *Client) RebootInstancesWithContext(ctx context.Context, request *Reboot return } +func NewRemoveChcAssistVpcRequest() (request *RemoveChcAssistVpcRequest) { + request = &RemoveChcAssistVpcRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "RemoveChcAssistVpc") + + return +} + +func NewRemoveChcAssistVpcResponse() (response *RemoveChcAssistVpcResponse) { + response = &RemoveChcAssistVpcResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// RemoveChcAssistVpc +// 清理CHC物理服务器的带外网络和部署网络 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) RemoveChcAssistVpc(request *RemoveChcAssistVpcRequest) (response *RemoveChcAssistVpcResponse, err error) { + return c.RemoveChcAssistVpcWithContext(context.Background(), request) +} + +// RemoveChcAssistVpc +// 清理CHC物理服务器的带外网络和部署网络 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) RemoveChcAssistVpcWithContext(ctx context.Context, request *RemoveChcAssistVpcRequest) (response *RemoveChcAssistVpcResponse, err error) { + if request == nil { + request = NewRemoveChcAssistVpcRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("RemoveChcAssistVpc require credential") + } + + request.SetContext(ctx) + + response = NewRemoveChcAssistVpcResponse() + err = c.Send(request, response) + return +} + +func NewRemoveChcDeployVpcRequest() (request *RemoveChcDeployVpcRequest) { + request = &RemoveChcDeployVpcRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "RemoveChcDeployVpc") + + return +} + +func NewRemoveChcDeployVpcResponse() (response *RemoveChcDeployVpcResponse) { + response = &RemoveChcDeployVpcResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// RemoveChcDeployVpc +// 清理CHC物理服务器的部署网络 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) RemoveChcDeployVpc(request *RemoveChcDeployVpcRequest) (response *RemoveChcDeployVpcResponse, err error) { + return c.RemoveChcDeployVpcWithContext(context.Background(), request) +} + +// RemoveChcDeployVpc +// 清理CHC物理服务器的部署网络 +// +// 可能返回的错误码: +// +// ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" +// INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" +func (c *Client) RemoveChcDeployVpcWithContext(ctx context.Context, request *RemoveChcDeployVpcRequest) (response *RemoveChcDeployVpcResponse, err error) { + if request == nil { + request = NewRemoveChcDeployVpcRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("RemoveChcDeployVpc require credential") + } + + request.SetContext(ctx) + + response = NewRemoveChcDeployVpcResponse() + err = c.Send(request, response) + return +} + func NewRenewHostsRequest() (request *RenewHostsRequest) { request = &RenewHostsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "RenewHosts") return @@ -5406,20 +6760,16 @@ func NewRenewHostsResponse() (response *RenewHostsResponse) { // // 可能返回的错误码: // +// INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" // INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" func (c *Client) RenewHosts(request *RenewHostsRequest) (response *RenewHostsResponse, err error) { - if request == nil { - request = NewRenewHostsRequest() - } - - response = NewRenewHostsResponse() - err = c.Send(request, response) - return + return c.RenewHostsWithContext(context.Background(), request) } // RenewHosts @@ -5431,16 +6781,23 @@ func (c *Client) RenewHosts(request *RenewHostsRequest) (response *RenewHostsRes // // 可能返回的错误码: // +// INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" // INVALIDACCOUNT_UNPAIDORDER = "InvalidAccount.UnpaidOrder" // INVALIDHOST_NOTSUPPORTED = "InvalidHost.NotSupported" // INVALIDHOSTID_MALFORMED = "InvalidHostId.Malformed" // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" func (c *Client) RenewHostsWithContext(ctx context.Context, request *RenewHostsRequest) (response *RenewHostsResponse, err error) { if request == nil { request = NewRenewHostsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RenewHosts require credential") + } + request.SetContext(ctx) response = NewRenewHostsResponse() @@ -5452,6 +6809,7 @@ func NewRenewInstancesRequest() (request *RenewInstancesRequest) { request = &RenewInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "RenewInstances") return @@ -5484,23 +6842,22 @@ func NewRenewInstancesResponse() (response *RenewInstancesResponse) { // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOTSUPPORTEDMIXPRICINGMODEL = "InvalidParameterValue.InstanceNotSupportedMixPricingModel" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" func (c *Client) RenewInstances(request *RenewInstancesRequest) (response *RenewInstancesResponse, err error) { - if request == nil { - request = NewRenewInstancesRequest() - } - - response = NewRenewInstancesResponse() - err = c.Send(request, response) - return + return c.RenewInstancesWithContext(context.Background(), request) } // RenewInstances @@ -5523,22 +6880,99 @@ func (c *Client) RenewInstances(request *RenewInstancesRequest) (response *Renew // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOTSUPPORTEDMIXPRICINGMODEL = "InvalidParameterValue.InstanceNotSupportedMixPricingModel" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPERIOD = "InvalidPeriod" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" func (c *Client) RenewInstancesWithContext(ctx context.Context, request *RenewInstancesRequest) (response *RenewInstancesResponse, err error) { if request == nil { - request = NewRenewInstancesRequest() + request = NewRenewInstancesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("RenewInstances require credential") + } + + request.SetContext(ctx) + + response = NewRenewInstancesResponse() + err = c.Send(request, response) + return +} + +func NewRepairTaskControlRequest() (request *RepairTaskControlRequest) { + request = &RepairTaskControlRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("cvm", APIVersion, "RepairTaskControl") + + return +} + +func NewRepairTaskControlResponse() (response *RepairTaskControlResponse) { + response = &RepairTaskControlResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// RepairTaskControl +// 本接口(RepairTaskControl)用于对待授权状态的维修任务进行授权操作。 +// +// - 仅当任务状态处于`待授权`状态时,可通过此接口对待授权的维修任务进行授权。 +// +// - 调用时需指定产品类型、实例ID、维修任务ID、操作类型。 +// +// - 可授权立即处理,或提前预约计划维护时间之前的指定时间进行处理(预约时间需晚于当前时间至少5分钟,且在48小时之内)。 +// +// - 针对不同类型的维修任务,提供的可选授权处理策略可参见 [维修任务类型与处理策略](https://cloud.tencent.com/document/product/213/67789)。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +func (c *Client) RepairTaskControl(request *RepairTaskControlRequest) (response *RepairTaskControlResponse, err error) { + return c.RepairTaskControlWithContext(context.Background(), request) +} + +// RepairTaskControl +// 本接口(RepairTaskControl)用于对待授权状态的维修任务进行授权操作。 +// +// - 仅当任务状态处于`待授权`状态时,可通过此接口对待授权的维修任务进行授权。 +// +// - 调用时需指定产品类型、实例ID、维修任务ID、操作类型。 +// +// - 可授权立即处理,或提前预约计划维护时间之前的指定时间进行处理(预约时间需晚于当前时间至少5分钟,且在48小时之内)。 +// +// - 针对不同类型的维修任务,提供的可选授权处理策略可参见 [维修任务类型与处理策略](https://cloud.tencent.com/document/product/213/67789)。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +func (c *Client) RepairTaskControlWithContext(ctx context.Context, request *RepairTaskControlRequest) (response *RepairTaskControlResponse, err error) { + if request == nil { + request = NewRepairTaskControlRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RepairTaskControl require credential") + } + request.SetContext(ctx) - response = NewRenewInstancesResponse() + response = NewRepairTaskControlResponse() err = c.Send(request, response) return } @@ -5547,6 +6981,7 @@ func NewResetInstanceRequest() (request *ResetInstanceRequest) { request = &ResetInstanceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstance") return @@ -5578,6 +7013,7 @@ func NewResetInstanceResponse() (response *ResetInstanceResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" @@ -5587,23 +7023,34 @@ func NewResetInstanceResponse() (response *ResetInstanceResponse) { // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_HOSTNAMEILLEGAL = "InvalidParameter.HostNameIllegal" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_PARAMETERCONFLICT = "InvalidParameter.ParameterConflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" +// INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDFORRETSETINSTANCE = "InvalidParameterValue.InvalidImageIdForRetsetInstance" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" +// INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_KEYPAIRNOTFOUND = "InvalidParameterValue.KeyPairNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPASSWORD = "InvalidPassword" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_CHCINSTALLCLOUDIMAGEWITHOUTDEPLOYNETWORK = "OperationDenied.ChcInstallCloudImageWithoutDeployNetwork" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" @@ -5611,6 +7058,7 @@ func NewResetInstanceResponse() (response *ResetInstanceResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" @@ -5622,17 +7070,13 @@ func NewResetInstanceResponse() (response *ResetInstanceResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDIMAGELICENSETYPEFORRESET = "UnsupportedOperation.InvalidImageLicenseTypeForReset" // UNSUPPORTEDOPERATION_KEYPAIRUNSUPPORTEDWINDOWS = "UnsupportedOperation.KeyPairUnsupportedWindows" +// UNSUPPORTEDOPERATION_MODIFYENCRYPTIONNOTSUPPORTED = "UnsupportedOperation.ModifyEncryptionNotSupported" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetInstanceResponse, err error) { - if request == nil { - request = NewResetInstanceRequest() - } - - response = NewResetInstanceResponse() - err = c.Send(request, response) - return + return c.ResetInstanceWithContext(context.Background(), request) } // ResetInstance @@ -5654,6 +7098,7 @@ func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetIn // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_INSUFFICIENTBALANCE = "InvalidAccount.InsufficientBalance" @@ -5663,23 +7108,34 @@ func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetIn // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER_HOSTNAMEILLEGAL = "InvalidParameter.HostNameIllegal" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_PARAMETERCONFLICT = "InvalidParameter.ParameterConflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" +// INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" +// INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" +// INVALIDPARAMETERVALUE_INVALIDIMAGEIDFORRETSETINSTANCE = "InvalidParameterValue.InvalidImageIdForRetsetInstance" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" // INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" +// INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_KEYPAIRNOTFOUND = "InvalidParameterValue.KeyPairNotFound" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPASSWORD = "InvalidPassword" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_CHCINSTALLCLOUDIMAGEWITHOUTDEPLOYNETWORK = "OperationDenied.ChcInstallCloudImageWithoutDeployNetwork" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" @@ -5687,6 +7143,7 @@ func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetIn // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" @@ -5698,13 +7155,20 @@ func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetIn // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDIMAGELICENSETYPEFORRESET = "UnsupportedOperation.InvalidImageLicenseTypeForReset" // UNSUPPORTEDOPERATION_KEYPAIRUNSUPPORTEDWINDOWS = "UnsupportedOperation.KeyPairUnsupportedWindows" +// UNSUPPORTEDOPERATION_MODIFYENCRYPTIONNOTSUPPORTED = "UnsupportedOperation.ModifyEncryptionNotSupported" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResetInstanceWithContext(ctx context.Context, request *ResetInstanceRequest) (response *ResetInstanceResponse, err error) { if request == nil { request = NewResetInstanceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetInstance require credential") + } + request.SetContext(ctx) response = NewResetInstanceResponse() @@ -5716,6 +7180,7 @@ func NewResetInstancesInternetMaxBandwidthRequest() (request *ResetInstancesInte request = &ResetInstancesInternetMaxBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesInternetMaxBandwidth") return @@ -5758,6 +7223,8 @@ func NewResetInstancesInternetMaxBandwidthResponse() (response *ResetInstancesIn // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERMISSION = "InvalidPermission" @@ -5765,22 +7232,21 @@ func NewResetInstancesInternetMaxBandwidthResponse() (response *ResetInstancesIn // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResetInstancesInternetMaxBandwidth(request *ResetInstancesInternetMaxBandwidthRequest) (response *ResetInstancesInternetMaxBandwidthResponse, err error) { - if request == nil { - request = NewResetInstancesInternetMaxBandwidthRequest() - } - - response = NewResetInstancesInternetMaxBandwidthResponse() - err = c.Send(request, response) - return + return c.ResetInstancesInternetMaxBandwidthWithContext(context.Background(), request) } // ResetInstancesInternetMaxBandwidth @@ -5813,6 +7279,8 @@ func (c *Client) ResetInstancesInternetMaxBandwidth(request *ResetInstancesInter // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPERMISSION = "InvalidPermission" @@ -5820,11 +7288,16 @@ func (c *Client) ResetInstancesInternetMaxBandwidth(request *ResetInstancesInter // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" @@ -5832,6 +7305,11 @@ func (c *Client) ResetInstancesInternetMaxBandwidthWithContext(ctx context.Conte if request == nil { request = NewResetInstancesInternetMaxBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetInstancesInternetMaxBandwidth require credential") + } + request.SetContext(ctx) response = NewResetInstancesInternetMaxBandwidthResponse() @@ -5843,6 +7321,7 @@ func NewResetInstancesPasswordRequest() (request *ResetInstancesPasswordRequest) request = &ResetInstancesPasswordRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesPassword") return @@ -5858,7 +7337,7 @@ func NewResetInstancesPasswordResponse() (response *ResetInstancesPasswordRespon // ResetInstancesPassword // 本接口 (ResetInstancesPassword) 用于将实例操作系统的密码重置为用户指定的密码。 // -// *如果是修改系统管理云密码:实例的操作系统不同,管理员帐号也会不一样(`Windows`为`Administrator`,`Ubuntu`为`ubuntu`,其它系统为`root`)。 +// *如果是修改系统管理云密码:实例的操作系统不同,管理员账号也会不一样(`Windows`为`Administrator`,`Ubuntu`为`ubuntu`,其它系统为`root`)。 // // * 重置处于运行中状态的实例密码,需要设置关机参数`ForceStop`为`TRUE`。如果没有显式指定强制关机参数,则只有处于关机状态的实例才允许执行重置密码操作。 // @@ -5873,16 +7352,19 @@ func NewResetInstancesPasswordResponse() (response *ResetInstancesPasswordRespon // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// INVALIDPASSWORD = "InvalidPassword" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -5890,23 +7372,19 @@ func NewResetInstancesPasswordResponse() (response *ResetInstancesPasswordRespon // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResetInstancesPassword(request *ResetInstancesPasswordRequest) (response *ResetInstancesPasswordResponse, err error) { - if request == nil { - request = NewResetInstancesPasswordRequest() - } - - response = NewResetInstancesPasswordResponse() - err = c.Send(request, response) - return + return c.ResetInstancesPasswordWithContext(context.Background(), request) } // ResetInstancesPassword // 本接口 (ResetInstancesPassword) 用于将实例操作系统的密码重置为用户指定的密码。 // -// *如果是修改系统管理云密码:实例的操作系统不同,管理员帐号也会不一样(`Windows`为`Administrator`,`Ubuntu`为`ubuntu`,其它系统为`root`)。 +// *如果是修改系统管理云密码:实例的操作系统不同,管理员账号也会不一样(`Windows`为`Administrator`,`Ubuntu`为`ubuntu`,其它系统为`root`)。 // // * 重置处于运行中状态的实例密码,需要设置关机参数`ForceStop`为`TRUE`。如果没有显式指定强制关机参数,则只有处于关机状态的实例才允许执行重置密码操作。 // @@ -5921,16 +7399,19 @@ func (c *Client) ResetInstancesPassword(request *ResetInstancesPasswordRequest) // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// INVALIDPASSWORD = "InvalidPassword" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -5938,13 +7419,20 @@ func (c *Client) ResetInstancesPassword(request *ResetInstancesPasswordRequest) // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" // UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResetInstancesPasswordWithContext(ctx context.Context, request *ResetInstancesPasswordRequest) (response *ResetInstancesPasswordResponse, err error) { if request == nil { request = NewResetInstancesPasswordRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetInstancesPassword require credential") + } + request.SetContext(ctx) response = NewResetInstancesPasswordResponse() @@ -5956,6 +7444,7 @@ func NewResetInstancesTypeRequest() (request *ResetInstancesTypeRequest) { request = &ResetInstancesTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesType") return @@ -5979,6 +7468,7 @@ func NewResetInstancesTypeResponse() (response *ResetInstancesTypeResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" // FAILEDOPERATION_PROMOTIONALPERIORESTRICTION = "FailedOperation.PromotionalPerioRestriction" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" @@ -5990,23 +7480,39 @@ func NewResetInstancesTypeResponse() (response *ResetInstancesTypeResponse) { // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_HOSTIDSTATUSNOTSUPPORT = "InvalidParameter.HostIdStatusNotSupport" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BASICNETWORKINSTANCEFAMILY = "InvalidParameterValue.BasicNetworkInstanceFamily" // INVALIDPARAMETERVALUE_GPUINSTANCEFAMILY = "InvalidParameterValue.GPUInstanceFamily" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDGPUFAMILYCHANGE = "InvalidParameterValue.InvalidGPUFamilyChange" +// INVALIDPARAMETERVALUE_INVALIDINSTANCESOURCE = "InvalidParameterValue.InvalidInstanceSource" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_EIPNUMLIMIT = "LimitExceeded.EipNumLimit" // LIMITEXCEEDED_ENINUMLIMIT = "LimitExceeded.EniNumLimit" // LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // LIMITEXCEEDED_SPOTQUOTA = "LimitExceeded.SpotQuota" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEINSUFFICIENT_SPECIFIEDINSTANCETYPE = "ResourceInsufficient.SpecifiedInstanceType" +// RESOURCENOTFOUND_INVALIDZONEINSTANCETYPE = "ResourceNotFound.InvalidZoneInstanceType" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" // RESOURCESSOLDOUT_AVAILABLEZONE = "ResourcesSoldOut.AvailableZone" // RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_DISKSNAPCREATETIMETOOOLD = "UnsupportedOperation.DiskSnapCreateTimeTooOld" +// UNSUPPORTEDOPERATION_HETEROGENEOUSCHANGEINSTANCEFAMILY = "UnsupportedOperation.HeterogeneousChangeInstanceFamily" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" @@ -6014,21 +7520,22 @@ func NewResetInstancesTypeResponse() (response *ResetInstancesTypeResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDINSTANCEWITHSWAPDISK = "UnsupportedOperation.InvalidInstanceWithSwapDisk" +// UNSUPPORTEDOPERATION_LOCALDATADISKCHANGEINSTANCEFAMILY = "UnsupportedOperation.LocalDataDiskChangeInstanceFamily" +// UNSUPPORTEDOPERATION_LOCALDISKMIGRATINGTOCLOUDDISK = "UnsupportedOperation.LocalDiskMigratingToCloudDisk" // UNSUPPORTEDOPERATION_NOINSTANCETYPESUPPORTSPOT = "UnsupportedOperation.NoInstanceTypeSupportSpot" +// UNSUPPORTEDOPERATION_ORIGINALINSTANCETYPEINVALID = "UnsupportedOperation.OriginalInstanceTypeInvalid" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGINGSAMEFAMILY = "UnsupportedOperation.StoppedModeStopChargingSameFamily" +// UNSUPPORTEDOPERATION_SYSTEMDISKTYPE = "UnsupportedOperation.SystemDiskType" +// UNSUPPORTEDOPERATION_UNSUPPORTEDARMCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedARMChangeInstanceFamily" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOARM = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToARM" -// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOSA3 = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToSA3" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCETOTHISINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceToThisInstanceFamily" func (c *Client) ResetInstancesType(request *ResetInstancesTypeRequest) (response *ResetInstancesTypeResponse, err error) { - if request == nil { - request = NewResetInstancesTypeRequest() - } - - response = NewResetInstancesTypeResponse() - err = c.Send(request, response) - return + return c.ResetInstancesTypeWithContext(context.Background(), request) } // ResetInstancesType @@ -6042,6 +7549,7 @@ func (c *Client) ResetInstancesType(request *ResetInstancesTypeRequest) (respons // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" // FAILEDOPERATION_PROMOTIONALPERIORESTRICTION = "FailedOperation.PromotionalPerioRestriction" // INTERNALERROR_TRADEUNKNOWNERROR = "InternalError.TradeUnknownError" // INTERNALSERVERERROR = "InternalServerError" @@ -6053,23 +7561,39 @@ func (c *Client) ResetInstancesType(request *ResetInstancesTypeRequest) (respons // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_HOSTIDSTATUSNOTSUPPORT = "InvalidParameter.HostIdStatusNotSupport" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_BASICNETWORKINSTANCEFAMILY = "InvalidParameterValue.BasicNetworkInstanceFamily" // INVALIDPARAMETERVALUE_GPUINSTANCEFAMILY = "InvalidParameterValue.GPUInstanceFamily" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" +// INVALIDPARAMETERVALUE_INVALIDGPUFAMILYCHANGE = "InvalidParameterValue.InvalidGPUFamilyChange" +// INVALIDPARAMETERVALUE_INVALIDINSTANCESOURCE = "InvalidParameterValue.InvalidInstanceSource" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" +// INVALIDPERIOD = "InvalidPeriod" // INVALIDPERMISSION = "InvalidPermission" // INVALIDZONE_MISMATCHREGION = "InvalidZone.MismatchRegion" +// LIMITEXCEEDED_EIPNUMLIMIT = "LimitExceeded.EipNumLimit" // LIMITEXCEEDED_ENINUMLIMIT = "LimitExceeded.EniNumLimit" // LIMITEXCEEDED_INSTANCETYPEBANDWIDTH = "LimitExceeded.InstanceTypeBandwidth" // LIMITEXCEEDED_SPOTQUOTA = "LimitExceeded.SpotQuota" // MISSINGPARAMETER = "MissingParameter" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" +// RESOURCEINSUFFICIENT_CLOUDDISKUNAVAILABLE = "ResourceInsufficient.CloudDiskUnavailable" // RESOURCEINSUFFICIENT_SPECIFIEDINSTANCETYPE = "ResourceInsufficient.SpecifiedInstanceType" +// RESOURCENOTFOUND_INVALIDZONEINSTANCETYPE = "ResourceNotFound.InvalidZoneInstanceType" // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" // RESOURCESSOLDOUT_AVAILABLEZONE = "ResourcesSoldOut.AvailableZone" // RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_DISKSNAPCREATETIMETOOOLD = "UnsupportedOperation.DiskSnapCreateTimeTooOld" +// UNSUPPORTEDOPERATION_HETEROGENEOUSCHANGEINSTANCEFAMILY = "UnsupportedOperation.HeterogeneousChangeInstanceFamily" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" @@ -6077,17 +7601,29 @@ func (c *Client) ResetInstancesType(request *ResetInstancesTypeRequest) (respons // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDINSTANCEWITHSWAPDISK = "UnsupportedOperation.InvalidInstanceWithSwapDisk" +// UNSUPPORTEDOPERATION_LOCALDATADISKCHANGEINSTANCEFAMILY = "UnsupportedOperation.LocalDataDiskChangeInstanceFamily" +// UNSUPPORTEDOPERATION_LOCALDISKMIGRATINGTOCLOUDDISK = "UnsupportedOperation.LocalDiskMigratingToCloudDisk" // UNSUPPORTEDOPERATION_NOINSTANCETYPESUPPORTSPOT = "UnsupportedOperation.NoInstanceTypeSupportSpot" +// UNSUPPORTEDOPERATION_ORIGINALINSTANCETYPEINVALID = "UnsupportedOperation.OriginalInstanceTypeInvalid" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" +// UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGINGSAMEFAMILY = "UnsupportedOperation.StoppedModeStopChargingSameFamily" +// UNSUPPORTEDOPERATION_SYSTEMDISKTYPE = "UnsupportedOperation.SystemDiskType" +// UNSUPPORTEDOPERATION_UNSUPPORTEDARMCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedARMChangeInstanceFamily" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOARM = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToARM" -// UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOSA3 = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToSA3" // UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCETOTHISINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceToThisInstanceFamily" func (c *Client) ResetInstancesTypeWithContext(ctx context.Context, request *ResetInstancesTypeRequest) (response *ResetInstancesTypeResponse, err error) { if request == nil { request = NewResetInstancesTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetInstancesType require credential") + } + request.SetContext(ctx) response = NewResetInstancesTypeResponse() @@ -6099,6 +7635,7 @@ func NewResizeInstanceDisksRequest() (request *ResizeInstanceDisksRequest) { request = &ResizeInstanceDisksRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "ResizeInstanceDisks") return @@ -6135,24 +7672,29 @@ func NewResizeInstanceDisksResponse() (response *ResizeInstanceDisksResponse) { // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_CDHONLYLOCALDATADISKRESIZE = "InvalidParameterValue.CdhOnlyLocalDataDiskResize" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_ATLEASTONE = "MissingParameter.AtLeastOne" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDDATADISK = "UnsupportedOperation.InvalidDataDisk" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResizeInstanceDisks(request *ResizeInstanceDisksRequest) (response *ResizeInstanceDisksResponse, err error) { - if request == nil { - request = NewResizeInstanceDisksRequest() - } - - response = NewResizeInstanceDisksResponse() - err = c.Send(request, response) - return + return c.ResizeInstanceDisksWithContext(context.Background(), request) } // ResizeInstanceDisks @@ -6179,20 +7721,36 @@ func (c *Client) ResizeInstanceDisks(request *ResizeInstanceDisksRequest) (respo // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_CDHONLYLOCALDATADISKRESIZE = "InvalidParameterValue.CdhOnlyLocalDataDiskResize" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_ATLEASTONE = "MissingParameter.AtLeastOne" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" +// UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" +// UNSUPPORTEDOPERATION_INSTANCESTATERESCUEMODE = "UnsupportedOperation.InstanceStateRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATERUNNING = "UnsupportedOperation.InstanceStateRunning" +// UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" +// UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" +// UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INVALIDDATADISK = "UnsupportedOperation.InvalidDataDisk" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) ResizeInstanceDisksWithContext(ctx context.Context, request *ResizeInstanceDisksRequest) (response *ResizeInstanceDisksResponse, err error) { if request == nil { request = NewResizeInstanceDisksRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResizeInstanceDisks require credential") + } + request.SetContext(ctx) response = NewResizeInstanceDisksResponse() @@ -6204,6 +7762,7 @@ func NewRunInstancesRequest() (request *RunInstancesRequest) { request = &RunInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "RunInstances") return @@ -6227,16 +7786,18 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // // * 本接口允许购买的实例数量遵循[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664),所创建的实例和官网入口创建的实例共用配额。 // -// * 本接口为异步接口,当创建实例请求下发成功后会返回一个实例`ID`列表和一个`RequestId`,此时创建实例操作并未立即完成。在此期间实例的状态将会处于“PENDING”,实例创建结果可以通过调用 [DescribeInstancesStatus](https://cloud.tencent.com/document/product/213/15738) 接口查询,如果实例状态(InstanceState)由“PENDING”变为“RUNNING”,则代表实例创建成功,“LAUNCH_FAILED”代表实例创建失败。 +// * 本接口为异步接口,当创建实例请求下发成功后会返回一个实例`ID`列表和一个`RequestId`,此时创建实例操作并未立即完成。在此期间实例的状态将会处于“PENDING”,实例创建结果可以通过调用 [DescribeInstancesStatus](https://cloud.tencent.com/document/product/213/15738) 接口查询,如果实例状态(InstanceState)由“PENDING(创建中)”变为“RUNNING(运行中)”,则代表实例创建成功,“LAUNCH_FAILED”代表实例创建失败。 // // 可能返回的错误码: // // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // FAILEDOPERATION_ILLEGALTAGVALUE = "FailedOperation.IllegalTagValue" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" // FAILEDOPERATION_NOAVAILABLEIPADDRESSCOUNTINSUBNET = "FailedOperation.NoAvailableIpAddressCountInSubnet" +// FAILEDOPERATION_PROMOTIONALREGIONRESTRICTION = "FailedOperation.PromotionalRegionRestriction" // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_SNAPSHOTSIZELESSTHANDATASIZE = "FailedOperation.SnapshotSizeLessThanDataSize" @@ -6249,10 +7810,13 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" +// INVALIDPARAMETER_CDCNOTSUPPORTED = "InvalidParameter.CdcNotSupported" // INVALIDPARAMETER_HOSTIDSTATUSNOTSUPPORT = "InvalidParameter.HostIdStatusNotSupport" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_INVALIDIPFORMAT = "InvalidParameter.InvalidIpFormat" // INVALIDPARAMETER_LACKCORECOUNTORTHREADPERCORE = "InvalidParameter.LackCoreCountOrThreadPerCore" // INVALIDPARAMETER_PARAMETERCONFLICT = "InvalidParameter.ParameterConflict" @@ -6264,14 +7828,19 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" // INVALIDPARAMETERVALUE_CLOUDSSDDATADISKSIZETOOSMALL = "InvalidParameterValue.CloudSsdDataDiskSizeTooSmall" // INVALIDPARAMETERVALUE_CORECOUNTVALUE = "InvalidParameterValue.CoreCountValue" +// INVALIDPARAMETERVALUE_DEDICATEDCLUSTERNOTSUPPORTEDCHARGETYPE = "InvalidParameterValue.DedicatedClusterNotSupportedChargeType" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_DUPLICATETAGS = "InvalidParameterValue.DuplicateTags" +// INVALIDPARAMETERVALUE_HPCCLUSTERIDZONEIDNOTMATCH = "InvalidParameterValue.HpcClusterIdZoneIdNotMatch" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" // INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTHPCCLUSTER = "InvalidParameterValue.InstanceTypeNotSupportHpcCluster" // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTOFFERING = "InvalidParameterValue.InsufficientOffering" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" @@ -6282,19 +7851,25 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_KEYPAIRNOTFOUND = "InvalidParameterValue.KeyPairNotFound" +// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdNotExisted" +// INVALIDPARAMETERVALUE_LAUNCHTEMPLATENOTFOUND = "InvalidParameterValue.LaunchTemplateNotFound" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEVERSION = "InvalidParameterValue.LaunchTemplateVersion" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_NOTCDCSUBNET = "InvalidParameterValue.NotCdcSubnet" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" // INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" // INVALIDPARAMETERVALUE_SUBNETNOTEXIST = "InvalidParameterValue.SubnetNotExist" // INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" // INVALIDPARAMETERVALUE_THREADPERCOREVALUE = "InvalidParameterValue.ThreadPerCoreValue" +// INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" // INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // INVALIDPARAMETERVALUE_VPCIDNOTEXIST = "InvalidParameterValue.VpcIdNotExist" // INVALIDPARAMETERVALUE_VPCIDZONEIDNOTMATCH = "InvalidParameterValue.VpcIdZoneIdNotMatch" +// INVALIDPARAMETERVALUE_VPCNOTSUPPORTIPV6ADDRESS = "InvalidParameterValue.VpcNotSupportIpv6Address" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" // INVALIDPERIOD = "InvalidPeriod" @@ -6305,8 +7880,10 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // LIMITEXCEEDED_CVMSVIFSPERSECGROUPLIMITEXCEEDED = "LimitExceeded.CvmsVifsPerSecGroupLimitExceeded" // LIMITEXCEEDED_DISASTERRECOVERGROUP = "LimitExceeded.DisasterRecoverGroup" // LIMITEXCEEDED_IPV6ADDRESSNUM = "LimitExceeded.IPv6AddressNum" +// LIMITEXCEEDED_INSTANCEENINUMLIMIT = "LimitExceeded.InstanceEniNumLimit" // LIMITEXCEEDED_INSTANCEQUOTA = "LimitExceeded.InstanceQuota" // LIMITEXCEEDED_PREPAYQUOTA = "LimitExceeded.PrepayQuota" +// LIMITEXCEEDED_PREPAYUNDERWRITEQUOTA = "LimitExceeded.PrepayUnderwriteQuota" // LIMITEXCEEDED_SINGLEUSGQUOTA = "LimitExceeded.SingleUSGQuota" // LIMITEXCEEDED_SPOTQUOTA = "LimitExceeded.SpotQuota" // LIMITEXCEEDED_USERSPOTQUOTA = "LimitExceeded.UserSpotQuota" @@ -6314,6 +7891,7 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_DPDKINSTANCETYPEREQUIREDVPC = "MissingParameter.DPDKInstanceTypeRequiredVPC" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" +// OPERATIONDENIED_ACCOUNTNOTSUPPORTED = "OperationDenied.AccountNotSupported" // OPERATIONDENIED_CHCINSTALLCLOUDIMAGEWITHOUTDEPLOYNETWORK = "OperationDenied.ChcInstallCloudImageWithoutDeployNetwork" // RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" @@ -6326,7 +7904,9 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" // RESOURCESSOLDOUT_EIPINSUFFICIENT = "ResourcesSoldOut.EipInsufficient" // RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// UNSUPPORTEDOPERATION_HIBERNATIONOSVERSION = "UnsupportedOperation.HibernationOsVersion" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" // UNSUPPORTEDOPERATION_INVALIDREGIONDISKENCRYPT = "UnsupportedOperation.InvalidRegionDiskEncrypt" @@ -6335,17 +7915,13 @@ func NewRunInstancesResponse() (response *RunInstancesResponse) { // UNSUPPORTEDOPERATION_NOTSUPPORTIMPORTINSTANCESACTIONTIMER = "UnsupportedOperation.NotSupportImportInstancesActionTimer" // UNSUPPORTEDOPERATION_ONLYFORPREPAIDACCOUNT = "UnsupportedOperation.OnlyForPrepaidAccount" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" +// UNSUPPORTEDOPERATION_SPOTUNSUPPORTEDREGION = "UnsupportedOperation.SpotUnsupportedRegion" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" // UNSUPPORTEDOPERATION_UNSUPPORTEDINTERNATIONALUSER = "UnsupportedOperation.UnsupportedInternationalUser" // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstancesResponse, err error) { - if request == nil { - request = NewRunInstancesRequest() - } - - response = NewRunInstancesResponse() - err = c.Send(request, response) - return + return c.RunInstancesWithContext(context.Background(), request) } // RunInstances @@ -6359,16 +7935,18 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // // * 本接口允许购买的实例数量遵循[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664),所创建的实例和官网入口创建的实例共用配额。 // -// * 本接口为异步接口,当创建实例请求下发成功后会返回一个实例`ID`列表和一个`RequestId`,此时创建实例操作并未立即完成。在此期间实例的状态将会处于“PENDING”,实例创建结果可以通过调用 [DescribeInstancesStatus](https://cloud.tencent.com/document/product/213/15738) 接口查询,如果实例状态(InstanceState)由“PENDING”变为“RUNNING”,则代表实例创建成功,“LAUNCH_FAILED”代表实例创建失败。 +// * 本接口为异步接口,当创建实例请求下发成功后会返回一个实例`ID`列表和一个`RequestId`,此时创建实例操作并未立即完成。在此期间实例的状态将会处于“PENDING”,实例创建结果可以通过调用 [DescribeInstancesStatus](https://cloud.tencent.com/document/product/213/15738) 接口查询,如果实例状态(InstanceState)由“PENDING(创建中)”变为“RUNNING(运行中)”,则代表实例创建成功,“LAUNCH_FAILED”代表实例创建失败。 // // 可能返回的错误码: // // ACCOUNTQUALIFICATIONRESTRICTIONS = "AccountQualificationRestrictions" // AUTHFAILURE_CAMROLENAMEAUTHENTICATEFAILED = "AuthFailure.CamRoleNameAuthenticateFailed" // FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" +// FAILEDOPERATION_ILLEGALTAGKEY = "FailedOperation.IllegalTagKey" // FAILEDOPERATION_ILLEGALTAGVALUE = "FailedOperation.IllegalTagValue" // FAILEDOPERATION_INQUIRYPRICEFAILED = "FailedOperation.InquiryPriceFailed" // FAILEDOPERATION_NOAVAILABLEIPADDRESSCOUNTINSUBNET = "FailedOperation.NoAvailableIpAddressCountInSubnet" +// FAILEDOPERATION_PROMOTIONALREGIONRESTRICTION = "FailedOperation.PromotionalRegionRestriction" // FAILEDOPERATION_SECURITYGROUPACTIONFAILED = "FailedOperation.SecurityGroupActionFailed" // FAILEDOPERATION_SNAPSHOTSIZELARGERTHANDATASIZE = "FailedOperation.SnapshotSizeLargerThanDataSize" // FAILEDOPERATION_SNAPSHOTSIZELESSTHANDATASIZE = "FailedOperation.SnapshotSizeLessThanDataSize" @@ -6381,10 +7959,13 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // INVALIDHOSTID_NOTFOUND = "InvalidHostId.NotFound" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" // INVALIDIMAGEID_NOTFOUND = "InvalidImageId.NotFound" +// INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCENAME_TOOLONG = "InvalidInstanceName.TooLong" // INVALIDINSTANCETYPE_MALFORMED = "InvalidInstanceType.Malformed" +// INVALIDPARAMETER_CDCNOTSUPPORTED = "InvalidParameter.CdcNotSupported" // INVALIDPARAMETER_HOSTIDSTATUSNOTSUPPORT = "InvalidParameter.HostIdStatusNotSupport" // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" +// INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" // INVALIDPARAMETER_INVALIDIPFORMAT = "InvalidParameter.InvalidIpFormat" // INVALIDPARAMETER_LACKCORECOUNTORTHREADPERCORE = "InvalidParameter.LackCoreCountOrThreadPerCore" // INVALIDPARAMETER_PARAMETERCONFLICT = "InvalidParameter.ParameterConflict" @@ -6396,14 +7977,19 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" // INVALIDPARAMETERVALUE_CLOUDSSDDATADISKSIZETOOSMALL = "InvalidParameterValue.CloudSsdDataDiskSizeTooSmall" // INVALIDPARAMETERVALUE_CORECOUNTVALUE = "InvalidParameterValue.CoreCountValue" +// INVALIDPARAMETERVALUE_DEDICATEDCLUSTERNOTSUPPORTEDCHARGETYPE = "InvalidParameterValue.DedicatedClusterNotSupportedChargeType" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_DUPLICATETAGS = "InvalidParameterValue.DuplicateTags" +// INVALIDPARAMETERVALUE_HPCCLUSTERIDZONEIDNOTMATCH = "InvalidParameterValue.HpcClusterIdZoneIdNotMatch" // INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" // INVALIDPARAMETERVALUE_ILLEGALHOSTNAME = "InvalidParameterValue.IllegalHostName" +// INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" // INVALIDPARAMETERVALUE_INSTANCETYPENOTFOUND = "InvalidParameterValue.InstanceTypeNotFound" // INVALIDPARAMETERVALUE_INSTANCETYPENOTSUPPORTHPCCLUSTER = "InvalidParameterValue.InstanceTypeNotSupportHpcCluster" // INVALIDPARAMETERVALUE_INSTANCETYPEREQUIREDHPCCLUSTER = "InvalidParameterValue.InstanceTypeRequiredHpcCluster" // INVALIDPARAMETERVALUE_INSUFFICIENTOFFERING = "InvalidParameterValue.InsufficientOffering" // INVALIDPARAMETERVALUE_INSUFFICIENTPRICE = "InvalidParameterValue.InsufficientPrice" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" // INVALIDPARAMETERVALUE_INVALIDIMAGEFORMAT = "InvalidParameterValue.InvalidImageFormat" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" @@ -6414,19 +8000,25 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" // INVALIDPARAMETERVALUE_INVALIDUSERDATAFORMAT = "InvalidParameterValue.InvalidUserDataFormat" // INVALIDPARAMETERVALUE_KEYPAIRNOTFOUND = "InvalidParameterValue.KeyPairNotFound" +// INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDMALFORMED = "InvalidParameterValue.LaunchTemplateIdMalformed" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEIDNOTEXISTED = "InvalidParameterValue.LaunchTemplateIdNotExisted" +// INVALIDPARAMETERVALUE_LAUNCHTEMPLATENOTFOUND = "InvalidParameterValue.LaunchTemplateNotFound" // INVALIDPARAMETERVALUE_LAUNCHTEMPLATEVERSION = "InvalidParameterValue.LaunchTemplateVersion" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" +// INVALIDPARAMETERVALUE_NOTCDCSUBNET = "InvalidParameterValue.NotCdcSubnet" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_SNAPSHOTIDMALFORMED = "InvalidParameterValue.SnapshotIdMalformed" // INVALIDPARAMETERVALUE_SUBNETIDMALFORMED = "InvalidParameterValue.SubnetIdMalformed" // INVALIDPARAMETERVALUE_SUBNETNOTEXIST = "InvalidParameterValue.SubnetNotExist" // INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" +// INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" // INVALIDPARAMETERVALUE_THREADPERCOREVALUE = "InvalidParameterValue.ThreadPerCoreValue" +// INVALIDPARAMETERVALUE_TOOLARGE = "InvalidParameterValue.TooLarge" // INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" // INVALIDPARAMETERVALUE_VPCIDNOTEXIST = "InvalidParameterValue.VpcIdNotExist" // INVALIDPARAMETERVALUE_VPCIDZONEIDNOTMATCH = "InvalidParameterValue.VpcIdZoneIdNotMatch" +// INVALIDPARAMETERVALUE_VPCNOTSUPPORTIPV6ADDRESS = "InvalidParameterValue.VpcNotSupportIpv6Address" // INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // INVALIDPASSWORD = "InvalidPassword" // INVALIDPERIOD = "InvalidPeriod" @@ -6437,8 +8029,10 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // LIMITEXCEEDED_CVMSVIFSPERSECGROUPLIMITEXCEEDED = "LimitExceeded.CvmsVifsPerSecGroupLimitExceeded" // LIMITEXCEEDED_DISASTERRECOVERGROUP = "LimitExceeded.DisasterRecoverGroup" // LIMITEXCEEDED_IPV6ADDRESSNUM = "LimitExceeded.IPv6AddressNum" +// LIMITEXCEEDED_INSTANCEENINUMLIMIT = "LimitExceeded.InstanceEniNumLimit" // LIMITEXCEEDED_INSTANCEQUOTA = "LimitExceeded.InstanceQuota" // LIMITEXCEEDED_PREPAYQUOTA = "LimitExceeded.PrepayQuota" +// LIMITEXCEEDED_PREPAYUNDERWRITEQUOTA = "LimitExceeded.PrepayUnderwriteQuota" // LIMITEXCEEDED_SINGLEUSGQUOTA = "LimitExceeded.SingleUSGQuota" // LIMITEXCEEDED_SPOTQUOTA = "LimitExceeded.SpotQuota" // LIMITEXCEEDED_USERSPOTQUOTA = "LimitExceeded.UserSpotQuota" @@ -6446,6 +8040,7 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // MISSINGPARAMETER = "MissingParameter" // MISSINGPARAMETER_DPDKINSTANCETYPEREQUIREDVPC = "MissingParameter.DPDKInstanceTypeRequiredVPC" // MISSINGPARAMETER_MONITORSERVICE = "MissingParameter.MonitorService" +// OPERATIONDENIED_ACCOUNTNOTSUPPORTED = "OperationDenied.AccountNotSupported" // OPERATIONDENIED_CHCINSTALLCLOUDIMAGEWITHOUTDEPLOYNETWORK = "OperationDenied.ChcInstallCloudImageWithoutDeployNetwork" // RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" // RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT = "ResourceInsufficient.CloudDiskSoldOut" @@ -6458,7 +8053,9 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // RESOURCEUNAVAILABLE_INSTANCETYPE = "ResourceUnavailable.InstanceType" // RESOURCESSOLDOUT_EIPINSUFFICIENT = "ResourcesSoldOut.EipInsufficient" // RESOURCESSOLDOUT_SPECIFIEDINSTANCETYPE = "ResourcesSoldOut.SpecifiedInstanceType" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// UNSUPPORTEDOPERATION_HIBERNATIONOSVERSION = "UnsupportedOperation.HibernationOsVersion" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" // UNSUPPORTEDOPERATION_INVALIDREGIONDISKENCRYPT = "UnsupportedOperation.InvalidRegionDiskEncrypt" @@ -6467,6 +8064,8 @@ func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstan // UNSUPPORTEDOPERATION_NOTSUPPORTIMPORTINSTANCESACTIONTIMER = "UnsupportedOperation.NotSupportImportInstancesActionTimer" // UNSUPPORTEDOPERATION_ONLYFORPREPAIDACCOUNT = "UnsupportedOperation.OnlyForPrepaidAccount" // UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" +// UNSUPPORTEDOPERATION_SPOTUNSUPPORTEDREGION = "UnsupportedOperation.SpotUnsupportedRegion" +// UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" // UNSUPPORTEDOPERATION_UNSUPPORTEDINTERNATIONALUSER = "UnsupportedOperation.UnsupportedInternationalUser" // VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" // VPCIPISUSED = "VpcIpIsUsed" @@ -6474,6 +8073,11 @@ func (c *Client) RunInstancesWithContext(ctx context.Context, request *RunInstan if request == nil { request = NewRunInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RunInstances require credential") + } + request.SetContext(ctx) response = NewRunInstancesResponse() @@ -6485,6 +8089,7 @@ func NewStartInstancesRequest() (request *StartInstancesRequest) { request = &StartInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "StartInstances") return @@ -6515,10 +8120,12 @@ func NewStartInstancesResponse() (response *StartInstancesResponse) { // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" @@ -6531,17 +8138,12 @@ func NewStartInstancesResponse() (response *StartInstancesResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" func (c *Client) StartInstances(request *StartInstancesRequest) (response *StartInstancesResponse, err error) { - if request == nil { - request = NewStartInstancesRequest() - } - - response = NewStartInstancesResponse() - err = c.Send(request, response) - return + return c.StartInstancesWithContext(context.Background(), request) } // StartInstances @@ -6562,10 +8164,12 @@ func (c *Client) StartInstances(request *StartInstancesRequest) (response *Start // INVALIDINSTANCEID_MALFORMED = "InvalidInstanceId.Malformed" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" @@ -6578,6 +8182,7 @@ func (c *Client) StartInstances(request *StartInstancesRequest) (response *Start // UNSUPPORTEDOPERATION_INSTANCESTATESERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATESHUTDOWN = "UnsupportedOperation.InstanceStateShutdown" // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" +// UNSUPPORTEDOPERATION_INSTANCESTATESTOPPED = "UnsupportedOperation.InstanceStateStopped" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" @@ -6585,6 +8190,11 @@ func (c *Client) StartInstancesWithContext(ctx context.Context, request *StartIn if request == nil { request = NewStartInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("StartInstances require credential") + } + request.SetContext(ctx) response = NewStartInstancesResponse() @@ -6596,6 +8206,7 @@ func NewStopInstancesRequest() (request *StopInstancesRequest) { request = &StopInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "StopInstances") return @@ -6629,16 +8240,23 @@ func NewStopInstancesResponse() (response *StopInstancesResponse) { // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_HIBERNATIONFORNORMALINSTANCE = "UnsupportedOperation.HibernationForNormalInstance" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -6652,13 +8270,7 @@ func NewStopInstancesResponse() (response *StopInstancesResponse) { // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" // UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" func (c *Client) StopInstances(request *StopInstancesRequest) (response *StopInstancesResponse, err error) { - if request == nil { - request = NewStopInstancesRequest() - } - - response = NewStopInstancesResponse() - err = c.Send(request, response) - return + return c.StopInstancesWithContext(context.Background(), request) } // StopInstances @@ -6682,16 +8294,23 @@ func (c *Client) StopInstances(request *StopInstancesRequest) (response *StopIns // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERCOMBINATION = "InvalidParameterCombination" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION_HIBERNATIONFORNORMALINSTANCE = "UnsupportedOperation.HibernationForNormalInstance" +// UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATECORRUPTED = "UnsupportedOperation.InstanceStateCorrupted" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" +// UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" @@ -6708,6 +8327,11 @@ func (c *Client) StopInstancesWithContext(ctx context.Context, request *StopInst if request == nil { request = NewStopInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("StopInstances require credential") + } + request.SetContext(ctx) response = NewStopInstancesResponse() @@ -6719,6 +8343,7 @@ func NewSyncImagesRequest() (request *SyncImagesRequest) { request = &SyncImagesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "SyncImages") return @@ -6738,10 +8363,11 @@ func NewSyncImagesResponse() (response *SyncImagesResponse) { // // * 该接口支持多个同步地域。 // -// * 单个帐号在每个地域最多支持存在10个自定义镜像。 +// * 单个账号在每个地域最多支持存在10个自定义镜像。 // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDIMAGESTATE = "FailedOperation.InvalidImageState" // IMAGEQUOTALIMITEXCEEDED = "ImageQuotaLimitExceeded" // INVALIDIMAGEID_INCORRECTSTATE = "InvalidImageId.IncorrectState" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" @@ -6751,18 +8377,14 @@ func NewSyncImagesResponse() (response *SyncImagesResponse) { // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" +// INVALIDPARAMETERVALUE_INVALIDREGION = "InvalidParameterValue.InvalidRegion" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" // INVALIDREGION_UNAVAILABLE = "InvalidRegion.Unavailable" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" func (c *Client) SyncImages(request *SyncImagesRequest) (response *SyncImagesResponse, err error) { - if request == nil { - request = NewSyncImagesRequest() - } - - response = NewSyncImagesResponse() - err = c.Send(request, response) - return + return c.SyncImagesWithContext(context.Background(), request) } // SyncImages @@ -6772,10 +8394,11 @@ func (c *Client) SyncImages(request *SyncImagesRequest) (response *SyncImagesRes // // * 该接口支持多个同步地域。 // -// * 单个帐号在每个地域最多支持存在10个自定义镜像。 +// * 单个账号在每个地域最多支持存在10个自定义镜像。 // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDIMAGESTATE = "FailedOperation.InvalidImageState" // IMAGEQUOTALIMITEXCEEDED = "ImageQuotaLimitExceeded" // INVALIDIMAGEID_INCORRECTSTATE = "InvalidImageId.IncorrectState" // INVALIDIMAGEID_MALFORMED = "InvalidImageId.Malformed" @@ -6785,14 +8408,21 @@ func (c *Client) SyncImages(request *SyncImagesRequest) (response *SyncImagesRes // INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" // INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" // INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" +// INVALIDPARAMETERVALUE_INVALIDREGION = "InvalidParameterValue.InvalidRegion" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDREGION_NOTFOUND = "InvalidRegion.NotFound" // INVALIDREGION_UNAVAILABLE = "InvalidRegion.Unavailable" +// UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" func (c *Client) SyncImagesWithContext(ctx context.Context, request *SyncImagesRequest) (response *SyncImagesResponse, err error) { if request == nil { request = NewSyncImagesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("SyncImages require credential") + } + request.SetContext(ctx) response = NewSyncImagesResponse() @@ -6804,6 +8434,7 @@ func NewTerminateInstancesRequest() (request *TerminateInstancesRequest) { request = &TerminateInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("cvm", APIVersion, "TerminateInstances") return @@ -6823,10 +8454,14 @@ func NewTerminateInstancesResponse() (response *TerminateInstancesResponse) { // // * 按量计费的实例通过本接口可直接退还;包年包月实例如符合[退还规则](https://cloud.tencent.com/document/product/213/9711),也可通过本接口主动退还。 // -// * 包年包月实例首次调用本接口,实例将被移至回收站,再次调用本接口,实例将被销毁,且不可恢复。按量计费实例调用本接口将被直接销毁 +// * 包年包月实例首次调用本接口,实例将被移至回收站,再次调用本接口,实例将被销毁,且不可恢复。按量计费实例调用本接口将被直接销毁。 +// +// * 包年包月实例首次调用本接口,入参中包含ReleasePrepaidDataDisks时,包年包月数据盘同时也会被移至回收站。 // // * 支持批量操作,每次请求批量实例的上限为100。 // +// * 批量操作时,所有实例的付费类型必须一致。 +// // 可能返回的错误码: // // FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" @@ -6839,38 +8474,42 @@ func NewTerminateInstancesResponse() (response *TerminateInstancesResponse) { // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCENOTSUPPORTEDPREPAIDINSTANCE = "InvalidInstanceNotSupportedPrepaidInstance" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_NOTSUPPORTED = "InvalidParameterValue.NotSupported" // LIMITEXCEEDED_USERRETURNQUOTA = "LimitExceeded.UserReturnQuota" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" // UNSUPPORTEDOPERATION_INSTANCEMIXEDPRICINGMODEL = "UnsupportedOperation.InstanceMixedPricingModel" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" +// UNSUPPORTEDOPERATION_INSTANCESTATELAUNCHFAILED = "UnsupportedOperation.InstanceStateLaunchFailed" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INSTANCESPROTECTED = "UnsupportedOperation.InstancesProtected" +// UNSUPPORTEDOPERATION_REDHATINSTANCETERMINATEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceTerminateUnsupported" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_USERLIMITOPERATIONEXCEEDQUOTA = "UnsupportedOperation.UserLimitOperationExceedQuota" func (c *Client) TerminateInstances(request *TerminateInstancesRequest) (response *TerminateInstancesResponse, err error) { - if request == nil { - request = NewTerminateInstancesRequest() - } - - response = NewTerminateInstancesResponse() - err = c.Send(request, response) - return + return c.TerminateInstancesWithContext(context.Background(), request) } // TerminateInstances @@ -6880,10 +8519,14 @@ func (c *Client) TerminateInstances(request *TerminateInstancesRequest) (respons // // * 按量计费的实例通过本接口可直接退还;包年包月实例如符合[退还规则](https://cloud.tencent.com/document/product/213/9711),也可通过本接口主动退还。 // -// * 包年包月实例首次调用本接口,实例将被移至回收站,再次调用本接口,实例将被销毁,且不可恢复。按量计费实例调用本接口将被直接销毁 +// * 包年包月实例首次调用本接口,实例将被移至回收站,再次调用本接口,实例将被销毁,且不可恢复。按量计费实例调用本接口将被直接销毁。 +// +// * 包年包月实例首次调用本接口,入参中包含ReleasePrepaidDataDisks时,包年包月数据盘同时也会被移至回收站。 // // * 支持批量操作,每次请求批量实例的上限为100。 // +// * 批量操作时,所有实例的付费类型必须一致。 +// // 可能返回的错误码: // // FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" @@ -6896,27 +8539,37 @@ func (c *Client) TerminateInstances(request *TerminateInstancesRequest) (respons // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDINSTANCENOTSUPPORTEDPREPAIDINSTANCE = "InvalidInstanceNotSupportedPrepaidInstance" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_NOTSUPPORTED = "InvalidParameterValue.NotSupported" // LIMITEXCEEDED_USERRETURNQUOTA = "LimitExceeded.UserReturnQuota" // MISSINGPARAMETER = "MissingParameter" // MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" // OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" +// UNAUTHORIZEDOPERATION_INVALIDTOKEN = "UnauthorizedOperation.InvalidToken" // UNAUTHORIZEDOPERATION_MFAEXPIRED = "UnauthorizedOperation.MFAExpired" // UNAUTHORIZEDOPERATION_MFANOTFOUND = "UnauthorizedOperation.MFANotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" // UNSUPPORTEDOPERATION_INSTANCEMIXEDPRICINGMODEL = "UnsupportedOperation.InstanceMixedPricingModel" +// UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" // UNSUPPORTEDOPERATION_INSTANCESTATEENTERRESCUEMODE = "UnsupportedOperation.InstanceStateEnterRescueMode" +// UNSUPPORTEDOPERATION_INSTANCESTATEENTERSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateEnterServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITRESCUEMODE = "UnsupportedOperation.InstanceStateExitRescueMode" // UNSUPPORTEDOPERATION_INSTANCESTATEEXITSERVICELIVEMIGRATE = "UnsupportedOperation.InstanceStateExitServiceLiveMigrate" // UNSUPPORTEDOPERATION_INSTANCESTATEFREEZING = "UnsupportedOperation.InstanceStateFreezing" // UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" +// UNSUPPORTEDOPERATION_INSTANCESTATELAUNCHFAILED = "UnsupportedOperation.InstanceStateLaunchFailed" // UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" // UNSUPPORTEDOPERATION_INSTANCESTATEREBOOTING = "UnsupportedOperation.InstanceStateRebooting" // UNSUPPORTEDOPERATION_INSTANCESTATESTARTING = "UnsupportedOperation.InstanceStateStarting" // UNSUPPORTEDOPERATION_INSTANCESTATESTOPPING = "UnsupportedOperation.InstanceStateStopping" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATED = "UnsupportedOperation.InstanceStateTerminated" // UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" +// UNSUPPORTEDOPERATION_INSTANCESPROTECTED = "UnsupportedOperation.InstancesProtected" +// UNSUPPORTEDOPERATION_REDHATINSTANCETERMINATEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceTerminateUnsupported" +// UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" // UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" // UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" // UNSUPPORTEDOPERATION_USERLIMITOPERATIONEXCEEDQUOTA = "UnsupportedOperation.UserLimitOperationExceedQuota" @@ -6924,6 +8577,11 @@ func (c *Client) TerminateInstancesWithContext(ctx context.Context, request *Ter if request == nil { request = NewTerminateInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("TerminateInstances require credential") + } + request.SetContext(ctx) response = NewTerminateInstancesResponse() diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/errors.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/errors.go similarity index 71% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/errors.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/errors.go index 49ff21b13100..72af281dabf3 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/errors.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -34,6 +34,9 @@ const ( // 账号为当前用户 FAILEDOPERATION_ACCOUNTISYOURSELF = "FailedOperation.AccountIsYourSelf" + // 自带许可镜像暂时不支持共享。 + FAILEDOPERATION_BYOLIMAGESHAREFAILED = "FailedOperation.BYOLImageShareFailed" + // 未找到指定的容灾组 FAILEDOPERATION_DISASTERRECOVERGROUPNOTFOUND = "FailedOperation.DisasterRecoverGroupNotFound" @@ -49,6 +52,9 @@ const ( // 查询退换价格失败,找不到付款订单,请检查设备 `ins-xxxxxxx` 是否已过期。 FAILEDOPERATION_INQUIRYREFUNDPRICEFAILED = "FailedOperation.InquiryRefundPriceFailed" + // 镜像状态繁忙,请稍后重试。 + FAILEDOPERATION_INVALIDIMAGESTATE = "FailedOperation.InvalidImageState" + // 请求不支持`EMR`的实例`ins-xxxxxxxx`。 FAILEDOPERATION_INVALIDINSTANCEAPPLICATIONROLEEMR = "FailedOperation.InvalidInstanceApplicationRoleEmr" @@ -67,6 +73,9 @@ const ( // 促销期内购买的实例不允许调整配置或计费模式。 FAILEDOPERATION_PROMOTIONALPERIORESTRICTION = "FailedOperation.PromotionalPerioRestriction" + // 暂无法在此国家/地区提供该服务。 + FAILEDOPERATION_PROMOTIONALREGIONRESTRICTION = "FailedOperation.PromotionalRegionRestriction" + // 镜像共享失败。 FAILEDOPERATION_QIMAGESHAREFAILED = "FailedOperation.QImageShareFailed" @@ -205,6 +214,12 @@ const ( // 参数错误。 INVALIDPARAMETER = "InvalidParameter" + // 最多指定一个参数。 + INVALIDPARAMETER_ATMOSTONE = "InvalidParameter.AtMostOne" + + // 不支持参数CdcId。 + INVALIDPARAMETER_CDCNOTSUPPORTED = "InvalidParameter.CdcNotSupported" + // DataDiskIds不应该传入RootDisk的Id。 INVALIDPARAMETER_DATADISKIDCONTAINSROOTDISK = "InvalidParameter.DataDiskIdContainsRootDisk" @@ -220,9 +235,15 @@ const ( // 指定的hostName不符合规范。 INVALIDPARAMETER_HOSTNAMEILLEGAL = "InvalidParameter.HostNameIllegal" + // 参数ImageIds和SnapshotIds必须有且仅有一个。 + INVALIDPARAMETER_IMAGEIDSSNAPSHOTIDSMUSTONE = "InvalidParameter.ImageIdsSnapshotIdsMustOne" + // 当前接口不支持实例镜像。 INVALIDPARAMETER_INSTANCEIMAGENOTSUPPORT = "InvalidParameter.InstanceImageNotSupport" + // 不支持设置公网带宽相关信息。 + INVALIDPARAMETER_INTERNETACCESSIBLENOTSUPPORTED = "InvalidParameter.InternetAccessibleNotSupported" + // 云盘资源售罄。 INVALIDPARAMETER_INVALIDCLOUDDISKSOLDOUT = "InvalidParameter.InvalidCloudDiskSoldOut" @@ -247,10 +268,10 @@ const ( // 本地数据盘不支持创建实例镜像。 INVALIDPARAMETER_LOCALDATADISKNOTSUPPORT = "InvalidParameter.LocalDataDiskNotSupport" - // 不支持同时指定密钥登陆和保持镜像登陆方式。 + // 不支持同时指定密钥登录和保持镜像登录方式。 INVALIDPARAMETER_PARAMETERCONFLICT = "InvalidParameter.ParameterConflict" - // 不支持设置登陆密码。 + // 不支持设置登录密码。 INVALIDPARAMETER_PASSWORDNOTSUPPORTED = "InvalidParameter.PasswordNotSupported" // 指定的快照不存在。 @@ -277,27 +298,60 @@ const ( // 参数取值错误。 INVALIDPARAMETERVALUE = "InvalidParameterValue" + // 入参数目不相等。 + INVALIDPARAMETERVALUE_AMOUNTNOTEQUAL = "InvalidParameterValue.AmountNotEqual" + // 共享带宽包ID不合要求,请提供规范的共享带宽包ID,类似bwp-xxxxxxxx,字母x代表小写字符或者数字。 INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // 请确认指定的带宽包是否存在。 INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDNOTFOUND = "InvalidParameterValue.BandwidthPackageIdNotFound" + // 实例为基础网络实例,目标实例规格仅支持私有网络,不支持调整。 + INVALIDPARAMETERVALUE_BASICNETWORKINSTANCEFAMILY = "InvalidParameterValue.BasicNetworkInstanceFamily" + + // 请确认存储桶是否存在。 + INVALIDPARAMETERVALUE_BUCKETNOTFOUND = "InvalidParameterValue.BucketNotFound" + + // CamRoleName不合要求,只允许包含英文字母、数字或者 +=,.@_- 字符。 + INVALIDPARAMETERVALUE_CAMROLENAMEMALFORMED = "InvalidParameterValue.CamRoleNameMalformed" + + // CDH磁盘扩容只支持LOCAL_BASIC和LOCAL_SSD。 + INVALIDPARAMETERVALUE_CDHONLYLOCALDATADISKRESIZE = "InvalidParameterValue.CdhOnlyLocalDataDiskResize" + // 找不到对应的CHC物理服务器。 INVALIDPARAMETERVALUE_CHCHOSTSNOTFOUND = "InvalidParameterValue.ChcHostsNotFound" + // 该CHC未配置任何网络。 + INVALIDPARAMETERVALUE_CHCNETWORKEMPTY = "InvalidParameterValue.ChcNetworkEmpty" + // SSD云硬盘为数据盘时,购买大小不得小于100GB INVALIDPARAMETERVALUE_CLOUDSSDDATADISKSIZETOOSMALL = "InvalidParameterValue.CloudSsdDataDiskSizeTooSmall" // 核心计数不合法。 INVALIDPARAMETERVALUE_CORECOUNTVALUE = "InvalidParameterValue.CoreCountValue" + // CDC不支持指定的计费模式。 + INVALIDPARAMETERVALUE_DEDICATEDCLUSTERNOTSUPPORTEDCHARGETYPE = "InvalidParameterValue.DedicatedClusterNotSupportedChargeType" + + // 已经存在部署VPC。 + INVALIDPARAMETERVALUE_DEPLOYVPCALREADYEXISTS = "InvalidParameterValue.DeployVpcAlreadyExists" + + // 置放群组ID格式错误。 + INVALIDPARAMETERVALUE_DISASTERRECOVERGROUPIDMALFORMED = "InvalidParameterValue.DisasterRecoverGroupIdMalformed" + // 参数值重复。 INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" + // 重复标签。 + INVALIDPARAMETERVALUE_DUPLICATETAGS = "InvalidParameterValue.DuplicateTags" + // 非GPU实例不允许转为GPU实例。 INVALIDPARAMETERVALUE_GPUINSTANCEFAMILY = "InvalidParameterValue.GPUInstanceFamily" + // 您的高性能计算集群已经绑定其他可用区,不能购买当前可用区机器。 + INVALIDPARAMETERVALUE_HPCCLUSTERIDZONEIDNOTMATCH = "InvalidParameterValue.HpcClusterIdZoneIdNotMatch" + // IP格式非法。 INVALIDPARAMETERVALUE_IPADDRESSMALFORMED = "InvalidParameterValue.IPAddressMalformed" @@ -310,6 +364,9 @@ const ( // 传参格式不对。 INVALIDPARAMETERVALUE_INCORRECTFORMAT = "InvalidParameterValue.IncorrectFormat" + // 实例ID不合要求,请提供规范的实例ID,类似ins-xxxxxxxx,字母x代表小写字符或数字。 + INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" + // 不支持操作不同计费方式的实例。 INVALIDPARAMETERVALUE_INSTANCENOTSUPPORTEDMIXPRICINGMODEL = "InvalidParameterValue.InstanceNotSupportedMixPricingModel" @@ -331,6 +388,18 @@ const ( // 无效的appid。 INVALIDPARAMETERVALUE_INVALIDAPPIDFORMAT = "InvalidParameterValue.InvalidAppIdFormat" + // 不支持指定的启动模式。 + INVALIDPARAMETERVALUE_INVALIDBOOTMODE = "InvalidParameterValue.InvalidBootMode" + + // 请检查存储桶的写入权限是否已放通。 + INVALIDPARAMETERVALUE_INVALIDBUCKETPERMISSIONFOREXPORT = "InvalidParameterValue.InvalidBucketPermissionForExport" + + // 参数 FileNamePrefixList 的长度与 ImageIds 或 SnapshotIds 不匹配。 + INVALIDPARAMETERVALUE_INVALIDFILENAMEPREFIXLIST = "InvalidParameterValue.InvalidFileNamePrefixList" + + // 不支持转为非GPU或其他类型GPU实例。 + INVALIDPARAMETERVALUE_INVALIDGPUFAMILYCHANGE = "InvalidParameterValue.InvalidGPUFamilyChange" + // 镜像ID不支持指定的实例机型。 INVALIDPARAMETERVALUE_INVALIDIMAGEFORGIVENINSTANCETYPE = "InvalidParameterValue.InvalidImageForGivenInstanceType" @@ -340,12 +409,24 @@ const ( // 镜像不允许执行该操作 INVALIDPARAMETERVALUE_INVALIDIMAGEID = "InvalidParameterValue.InvalidImageId" + // 镜像无法用于重装当前实例。 + INVALIDPARAMETERVALUE_INVALIDIMAGEIDFORRETSETINSTANCE = "InvalidParameterValue.InvalidImageIdForRetsetInstance" + + // 指定的镜像ID为共享镜像。 + INVALIDPARAMETERVALUE_INVALIDIMAGEIDISSHARED = "InvalidParameterValue.InvalidImageIdIsShared" + // 当前地域不支持指定镜像所包含的操作系统。 INVALIDPARAMETERVALUE_INVALIDIMAGEOSNAME = "InvalidParameterValue.InvalidImageOsName" // 镜像被其他操作占用,请检查,并稍后重试。 INVALIDPARAMETERVALUE_INVALIDIMAGESTATE = "InvalidParameterValue.InvalidImageState" + // 该实例配置来自免费升配活动,暂不支持3个月内进行降配。 + INVALIDPARAMETERVALUE_INVALIDINSTANCESOURCE = "InvalidParameterValue.InvalidInstanceSource" + + // 指定机型不支持包销付费模式。 + INVALIDPARAMETERVALUE_INVALIDINSTANCETYPEUNDERWRITE = "InvalidParameterValue.InvalidInstanceTypeUnderwrite" + // IP地址不符合规范 INVALIDPARAMETERVALUE_INVALIDIPFORMAT = "InvalidParameterValue.InvalidIpFormat" @@ -358,12 +439,18 @@ const ( // 实例启动模板描述格式错误。 INVALIDPARAMETERVALUE_INVALIDLAUNCHTEMPLATEVERSIONDESCRIPTION = "InvalidParameterValue.InvalidLaunchTemplateVersionDescription" + // 许可证类型不可用。 + INVALIDPARAMETERVALUE_INVALIDLICENSETYPE = "InvalidParameterValue.InvalidLicenseType" + // 参数值错误。 INVALIDPARAMETERVALUE_INVALIDPARAMETERVALUELIMIT = "InvalidParameterValue.InvalidParameterValueLimit" // 无效密码。指定的密码不符合密码复杂度限制。例如密码长度不符合限制等。 INVALIDPARAMETERVALUE_INVALIDPASSWORD = "InvalidParameterValue.InvalidPassword" + // Region ID不可用。 + INVALIDPARAMETERVALUE_INVALIDREGION = "InvalidParameterValue.InvalidRegion" + // 时间格式不合法。 INVALIDPARAMETERVALUE_INVALIDTIMEFORMAT = "InvalidParameterValue.InvalidTimeFormat" @@ -409,9 +496,21 @@ const ( // 参数值必须为开启DHCP的VPC INVALIDPARAMETERVALUE_MUSTDHCPENABLEDVPC = "InvalidParameterValue.MustDhcpEnabledVpc" + // 子网不属于该cdc集群。 + INVALIDPARAMETERVALUE_NOTCDCSUBNET = "InvalidParameterValue.NotCdcSubnet" + + // 输入参数值不能为空。 + INVALIDPARAMETERVALUE_NOTEMPTY = "InvalidParameterValue.NotEmpty" + // 不支持的操作。 INVALIDPARAMETERVALUE_NOTSUPPORTED = "InvalidParameterValue.NotSupported" + // 该机型不支持预热 + INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDINSTANCETYPE = "InvalidParameterValue.PreheatNotSupportedInstanceType" + + // 该可用区目前不支持预热功能 + INVALIDPARAMETERVALUE_PREHEATNOTSUPPORTEDZONE = "InvalidParameterValue.PreheatNotSupportedZone" + // 无效参数值。参数值取值范围不合法。 INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" @@ -427,6 +526,9 @@ const ( // 指定的标签不存在。 INVALIDPARAMETERVALUE_TAGKEYNOTFOUND = "InvalidParameterValue.TagKeyNotFound" + // 标签配额超限。 + INVALIDPARAMETERVALUE_TAGQUOTALIMITEXCEEDED = "InvalidParameterValue.TagQuotaLimitExceeded" + // 每核心线程数不合法。 INVALIDPARAMETERVALUE_THREADPERCOREVALUE = "InvalidParameterValue.ThreadPerCoreValue" @@ -436,6 +538,9 @@ const ( // 无效参数值。参数值太长。 INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" + // uuid不合要求。 + INVALIDPARAMETERVALUE_UUIDMALFORMED = "InvalidParameterValue.UuidMalformed" + // VPC ID`xxx`不合要求,请提供规范的Vpc ID, 类似vpc-xxxxxxxx,字母x代表小写字符或者数字。 INVALIDPARAMETERVALUE_VPCIDMALFORMED = "InvalidParameterValue.VpcIdMalformed" @@ -445,6 +550,9 @@ const ( // VPC网络与实例不在同一可用区 INVALIDPARAMETERVALUE_VPCIDZONEIDNOTMATCH = "InvalidParameterValue.VpcIdZoneIdNotMatch" + // 该VPC不支持ipv6。 + INVALIDPARAMETERVALUE_VPCNOTSUPPORTIPV6ADDRESS = "InvalidParameterValue.VpcNotSupportIpv6Address" + // 请求不支持该可用区 INVALIDPARAMETERVALUE_ZONENOTSUPPORTED = "InvalidParameterValue.ZoneNotSupported" @@ -496,12 +604,24 @@ const ( // 指定置放群组配额不足。 LIMITEXCEEDED_DISASTERRECOVERGROUP = "LimitExceeded.DisasterRecoverGroup" + // 特定实例包含的某个ENI的EIP数量已超过目标实例类型的EIP允许的最大值,请删除部分EIP后重试。 + LIMITEXCEEDED_EIPNUMLIMIT = "LimitExceeded.EipNumLimit" + // 特定实例当前ENI数量已超过目标实例类型的ENI允许的最大值,需删除部分ENI后重试。 LIMITEXCEEDED_ENINUMLIMIT = "LimitExceeded.EniNumLimit" + // 正在运行中的镜像导出任务已达上限,请等待已有任务完成后,再次发起重试。 + LIMITEXCEEDED_EXPORTIMAGETASKLIMITEXCEEDED = "LimitExceeded.ExportImageTaskLimitExceeded" + + // 已达创建高性能计算集群数的上限。 + LIMITEXCEEDED_HPCCLUSTERQUOTA = "LimitExceeded.HpcClusterQuota" + // IP数量超过网卡上限。 LIMITEXCEEDED_IPV6ADDRESSNUM = "LimitExceeded.IPv6AddressNum" + // 实例指定的弹性网卡数目超过了实例弹性网卡数目配额。 + LIMITEXCEEDED_INSTANCEENINUMLIMIT = "LimitExceeded.InstanceEniNumLimit" + // 当前配额不足够生产指定数量的实例 LIMITEXCEEDED_INSTANCEQUOTA = "LimitExceeded.InstanceQuota" @@ -514,15 +634,24 @@ const ( // 实例启动模板版本数量超限。 LIMITEXCEEDED_LAUNCHTEMPLATEVERSIONQUOTA = "LimitExceeded.LaunchTemplateVersionQuota" + // 您在该可用区的预热额度已达上限,建议取消不再使用的快照预热 + LIMITEXCEEDED_PREHEATIMAGESNAPSHOTOUTOFQUOTA = "LimitExceeded.PreheatImageSnapshotOutOfQuota" + // 预付费实例已购买数量已达到最大配额,请提升配额后重试。 LIMITEXCEEDED_PREPAYQUOTA = "LimitExceeded.PrepayQuota" + // 包销付费实例已购买数量已达到最大配额。 + LIMITEXCEEDED_PREPAYUNDERWRITEQUOTA = "LimitExceeded.PrepayUnderwriteQuota" + // 安全组限额不足 LIMITEXCEEDED_SINGLEUSGQUOTA = "LimitExceeded.SingleUSGQuota" // 竞价实例类型配额不足 LIMITEXCEEDED_SPOTQUOTA = "LimitExceeded.SpotQuota" + // 标签绑定的资源数量已达到配额限制。 + LIMITEXCEEDED_TAGRESOURCEQUOTA = "LimitExceeded.TagResourceQuota" + // 退还失败,退还配额已达上限。 LIMITEXCEEDED_USERRETURNQUOTA = "LimitExceeded.UserReturnQuota" @@ -547,9 +676,15 @@ const ( // 同样的任务正在运行。 MUTEXOPERATION_TASKRUNNING = "MutexOperation.TaskRunning" + // 不支持该账户的操作。 + OPERATIONDENIED_ACCOUNTNOTSUPPORTED = "OperationDenied.AccountNotSupported" + // 不允许未配置部署网络的CHC安装云上镜像。 OPERATIONDENIED_CHCINSTALLCLOUDIMAGEWITHOUTDEPLOYNETWORK = "OperationDenied.ChcInstallCloudImageWithoutDeployNetwork" + // 禁止管控账号操作。 + OPERATIONDENIED_INNERUSERPROHIBITACTION = "OperationDenied.InnerUserProhibitAction" + // 实例正在执行其他操作,请稍后再试。 OPERATIONDENIED_INSTANCEOPERATIONINPROGRESS = "OperationDenied.InstanceOperationInProgress" @@ -562,6 +697,12 @@ const ( // 资源被占用。 RESOURCEINUSE = "ResourceInUse" + // 磁盘回滚正在执行中,请稍后再试。 + RESOURCEINUSE_DISKROLLBACKING = "ResourceInUse.DiskRollbacking" + + // 高性能计算集群使用中。 + RESOURCEINUSE_HPCCLUSTER = "ResourceInUse.HpcCluster" + // 该可用区已售罄 RESOURCEINSUFFICIENT_AVAILABILITYZONESOLDOUT = "ResourceInsufficient.AvailabilityZoneSoldOut" @@ -574,6 +715,9 @@ const ( // 实例个数超过容灾组的配额 RESOURCEINSUFFICIENT_DISASTERRECOVERGROUPCVMQUOTA = "ResourceInsufficient.DisasterRecoverGroupCvmQuota" + // 安全组资源配额不足。 + RESOURCEINSUFFICIENT_INSUFFICIENTGROUPQUOTA = "ResourceInsufficient.InsufficientGroupQuota" + // 指定的实例类型库存不足。 RESOURCEINSUFFICIENT_SPECIFIEDINSTANCETYPE = "ResourceInsufficient.SpecifiedInstanceType" @@ -586,6 +730,9 @@ const ( // 指定的置放群组不存在。 RESOURCENOTFOUND_INVALIDPLACEMENTSET = "ResourceNotFound.InvalidPlacementSet" + // 可用区不支持此机型。 + RESOURCENOTFOUND_INVALIDZONEINSTANCETYPE = "ResourceNotFound.InvalidZoneInstanceType" + // 无可用的缺省类型的CBS资源。 RESOURCENOTFOUND_NODEFAULTCBS = "ResourceNotFound.NoDefaultCbs" @@ -637,18 +784,51 @@ const ( // 指定的实例付费模式或者网络付费模式不支持共享带宽包 UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" + // 实例创建快照的时间距今不到24小时。 + UNSUPPORTEDOPERATION_DISKSNAPCREATETIMETOOOLD = "UnsupportedOperation.DiskSnapCreateTimeTooOld" + + // 边缘可用区实例不支持此项操作。 + UNSUPPORTEDOPERATION_EDGEZONEINSTANCE = "UnsupportedOperation.EdgeZoneInstance" + + // 所选择的边缘可用区不支持云盘操作。 + UNSUPPORTEDOPERATION_EDGEZONENOTSUPPORTCLOUDDISK = "UnsupportedOperation.EdgeZoneNotSupportCloudDisk" + + // 云服务器绑定了弹性网卡,请解绑弹性网卡后再切换私有网络。 + UNSUPPORTEDOPERATION_ELASTICNETWORKINTERFACE = "UnsupportedOperation.ElasticNetworkInterface" + + // 不支持加密镜像。 + UNSUPPORTEDOPERATION_ENCRYPTEDIMAGESNOTSUPPORTED = "UnsupportedOperation.EncryptedImagesNotSupported" + + // 异构机型不支持跨机型调整。 + UNSUPPORTEDOPERATION_HETEROGENEOUSCHANGEINSTANCEFAMILY = "UnsupportedOperation.HeterogeneousChangeInstanceFamily" + + // 不支持未开启休眠功能的实例。 + UNSUPPORTEDOPERATION_HIBERNATIONFORNORMALINSTANCE = "UnsupportedOperation.HibernationForNormalInstance" + + // 当前的镜像不支持休眠。 + UNSUPPORTEDOPERATION_HIBERNATIONOSVERSION = "UnsupportedOperation.HibernationOsVersion" + // IPv6实例不支持VPC迁移 UNSUPPORTEDOPERATION_IPV6NOTSUPPORTVPCMIGRATE = "UnsupportedOperation.IPv6NotSupportVpcMigrate" + // 镜像大小超出限制,不支持导出。 + UNSUPPORTEDOPERATION_IMAGETOOLARGEEXPORTUNSUPPORTED = "UnsupportedOperation.ImageTooLargeExportUnsupported" + // 请求不支持该实例计费模式 UNSUPPORTEDOPERATION_INSTANCECHARGETYPE = "UnsupportedOperation.InstanceChargeType" // 不支持混合付费模式。 UNSUPPORTEDOPERATION_INSTANCEMIXEDPRICINGMODEL = "UnsupportedOperation.InstanceMixedPricingModel" + // 中心可用区和边缘可用区实例不能混用批量操作。 + UNSUPPORTEDOPERATION_INSTANCEMIXEDZONETYPE = "UnsupportedOperation.InstanceMixedZoneType" + // 请求不支持操作系统为`Xserver windows2012cndatacenterx86_64`的实例`ins-xxxxxx` 。 UNSUPPORTEDOPERATION_INSTANCEOSWINDOWS = "UnsupportedOperation.InstanceOsWindows" + // 当前实例为重装系统失败状态,不支持此操作;推荐您再次重装系统,也可以销毁/退还实例或提交工单 + UNSUPPORTEDOPERATION_INSTANCEREINSTALLFAILED = "UnsupportedOperation.InstanceReinstallFailed" + // 该子机处于封禁状态,请联系相关人员处理。 UNSUPPORTEDOPERATION_INSTANCESTATEBANNING = "UnsupportedOperation.InstanceStateBanning" @@ -673,6 +853,9 @@ const ( // 请求不支持正在隔离状态的实例。 UNSUPPORTEDOPERATION_INSTANCESTATEISOLATING = "UnsupportedOperation.InstanceStateIsolating" + // 不支持操作创建失败的实例。 + UNSUPPORTEDOPERATION_INSTANCESTATELAUNCHFAILED = "UnsupportedOperation.InstanceStateLaunchFailed" + // 请求不支持创建未完成的实例 UNSUPPORTEDOPERATION_INSTANCESTATEPENDING = "UnsupportedOperation.InstanceStatePending" @@ -706,27 +889,69 @@ const ( // 请求不支持正在销毁的实例 UNSUPPORTEDOPERATION_INSTANCESTATETERMINATING = "UnsupportedOperation.InstanceStateTerminating" + // 不支持已启用销毁保护的实例,请先到设置实例销毁保护,关闭实例销毁保护,然后重试。 + UNSUPPORTEDOPERATION_INSTANCESPROTECTED = "UnsupportedOperation.InstancesProtected" + + // 用户创建高性能集群配额已达上限。 + UNSUPPORTEDOPERATION_INSUFFICIENTCLUSTERQUOTA = "UnsupportedOperation.InsufficientClusterQuota" + + // 不支持调整数据盘。 + UNSUPPORTEDOPERATION_INVALIDDATADISK = "UnsupportedOperation.InvalidDataDisk" + // 不支持指定的磁盘 UNSUPPORTEDOPERATION_INVALIDDISK = "UnsupportedOperation.InvalidDisk" + // 不支持带有云硬盘备份点。 + UNSUPPORTEDOPERATION_INVALIDDISKBACKUPQUOTA = "UnsupportedOperation.InvalidDiskBackupQuota" + + // 不支持极速回滚。 + UNSUPPORTEDOPERATION_INVALIDDISKFASTROLLBACK = "UnsupportedOperation.InvalidDiskFastRollback" + + // 镜像许可类型与实例不符,请选择其他镜像。 + UNSUPPORTEDOPERATION_INVALIDIMAGELICENSETYPEFORRESET = "UnsupportedOperation.InvalidImageLicenseTypeForReset" + + // 不支持已经设置了释放时间的实例,请在实例详情页撤销实例定时销毁后再试。 + UNSUPPORTEDOPERATION_INVALIDINSTANCENOTSUPPORTEDPROTECTEDINSTANCE = "UnsupportedOperation.InvalidInstanceNotSupportedProtectedInstance" + + // 不支持有swap盘的实例。 + UNSUPPORTEDOPERATION_INVALIDINSTANCEWITHSWAPDISK = "UnsupportedOperation.InvalidInstanceWithSwapDisk" + // 当前操作只支持国际版用户。 UNSUPPORTEDOPERATION_INVALIDPERMISSIONNONINTERNATIONALACCOUNT = "UnsupportedOperation.InvalidPermissionNonInternationalAccount" // 指定的地域不支持加密盘。 UNSUPPORTEDOPERATION_INVALIDREGIONDISKENCRYPT = "UnsupportedOperation.InvalidRegionDiskEncrypt" + // 该可用区不可售卖。 + UNSUPPORTEDOPERATION_INVALIDZONE = "UnsupportedOperation.InvalidZone" + // 密钥不支持Windows操作系统 UNSUPPORTEDOPERATION_KEYPAIRUNSUPPORTEDWINDOWS = "UnsupportedOperation.KeyPairUnsupportedWindows" // 机型数据盘全为本地盘不支持跨机型调整。 UNSUPPORTEDOPERATION_LOCALDATADISKCHANGEINSTANCEFAMILY = "UnsupportedOperation.LocalDataDiskChangeInstanceFamily" + // 不支持正在本地盘转云盘的磁盘,请稍后发起请求。 + UNSUPPORTEDOPERATION_LOCALDISKMIGRATINGTOCLOUDDISK = "UnsupportedOperation.LocalDiskMigratingToCloudDisk" + + // 从市场镜像创建的自定义镜像不支持导出。 + UNSUPPORTEDOPERATION_MARKETIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.MarketImageExportUnsupported" + + // 不支持修改系统盘的加密属性,例如使用非加密镜像重装加密系统盘。 + UNSUPPORTEDOPERATION_MODIFYENCRYPTIONNOTSUPPORTED = "UnsupportedOperation.ModifyEncryptionNotSupported" + // 绑定负载均衡的实例,不支持修改vpc属性。 UNSUPPORTEDOPERATION_MODIFYVPCWITHCLB = "UnsupportedOperation.ModifyVPCWithCLB" + // 实例基础网络已互通VPC网络,请自行解除关联,再进行切换VPC。 + UNSUPPORTEDOPERATION_MODIFYVPCWITHCLASSLINK = "UnsupportedOperation.ModifyVPCWithClassLink" + // 该实例类型不支持竞价计费 UNSUPPORTEDOPERATION_NOINSTANCETYPESUPPORTSPOT = "UnsupportedOperation.NoInstanceTypeSupportSpot" + // 不支持物理网络的实例。 + UNSUPPORTEDOPERATION_NOVPCNETWORK = "UnsupportedOperation.NoVpcNetwork" + // 当前实例不是FPGA机型。 UNSUPPORTEDOPERATION_NOTFPGAINSTANCE = "UnsupportedOperation.NotFpgaInstance" @@ -739,9 +964,27 @@ const ( // 该操作仅支持预付费账户 UNSUPPORTEDOPERATION_ONLYFORPREPAIDACCOUNT = "UnsupportedOperation.OnlyForPrepaidAccount" + // 无效的原机型。 + UNSUPPORTEDOPERATION_ORIGINALINSTANCETYPEINVALID = "UnsupportedOperation.OriginalInstanceTypeInvalid" + + // 您的账户不支持镜像预热 + UNSUPPORTEDOPERATION_PREHEATIMAGE = "UnsupportedOperation.PreheatImage" + + // 公共镜像或市场镜像不支持导出。 + UNSUPPORTEDOPERATION_PUBLICIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.PublicImageExportUnsupported" + // 当前镜像不支持对该实例的重装操作。 UNSUPPORTEDOPERATION_RAWLOCALDISKINSREINSTALLTOQCOW2 = "UnsupportedOperation.RawLocalDiskInsReinstalltoQcow2" + // RedHat镜像不支持导出。 + UNSUPPORTEDOPERATION_REDHATIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.RedHatImageExportUnsupported" + + // 实例使用商业操作系统,不支持退还。 + UNSUPPORTEDOPERATION_REDHATINSTANCETERMINATEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceTerminateUnsupported" + + // 请求不支持操作系统为RedHat的实例。 + UNSUPPORTEDOPERATION_REDHATINSTANCEUNSUPPORTED = "UnsupportedOperation.RedHatInstanceUnsupported" + // 不支持该地域 UNSUPPORTEDOPERATION_REGION = "UnsupportedOperation.Region" @@ -751,24 +994,39 @@ const ( // 用户预留实例计费配额已达上限。 UNSUPPORTEDOPERATION_RESERVEDINSTANCEOUTOFQUATA = "UnsupportedOperation.ReservedInstanceOutofQuata" + // 共享镜像不支持导出。 + UNSUPPORTEDOPERATION_SHAREDIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.SharedImageExportUnsupported" + // 请求不支持特殊机型的实例 UNSUPPORTEDOPERATION_SPECIALINSTANCETYPE = "UnsupportedOperation.SpecialInstanceType" + // 该地域不支持竞价实例。 + UNSUPPORTEDOPERATION_SPOTUNSUPPORTEDREGION = "UnsupportedOperation.SpotUnsupportedRegion" + // 不支持关机不收费特性 UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGING = "UnsupportedOperation.StoppedModeStopCharging" + // 不支持关机不收费机器做同类型变配操作。 + UNSUPPORTEDOPERATION_STOPPEDMODESTOPCHARGINGSAMEFAMILY = "UnsupportedOperation.StoppedModeStopChargingSameFamily" + + // 请求不支持该类型系统盘。 + UNSUPPORTEDOPERATION_SYSTEMDISKTYPE = "UnsupportedOperation.SystemDiskType" + + // 包月转包销,不支持包销折扣高于现有包年包月折扣。 + UNSUPPORTEDOPERATION_UNDERWRITEDISCOUNTGREATERTHANPREPAIDDISCOUNT = "UnsupportedOperation.UnderwriteDiscountGreaterThanPrepaidDiscount" + // 该机型为包销机型,RenewFlag的值只允许设置为NOTIFY_AND_AUTO_RENEW。 UNSUPPORTEDOPERATION_UNDERWRITINGINSTANCETYPEONLYSUPPORTAUTORENEW = "UnsupportedOperation.UnderwritingInstanceTypeOnlySupportAutoRenew" + // 当前实例不允许变配到非ARM机型。 + UNSUPPORTEDOPERATION_UNSUPPORTEDARMCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedARMChangeInstanceFamily" + // 指定机型不支持跨机型调整配置。 UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceFamily" // 非ARM机型不支持调整到ARM机型。 UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOARM = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToARM" - // 目标机型是SA3, 不支持变配。 - UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCEFAMILYTOSA3 = "UnsupportedOperation.UnsupportedChangeInstanceFamilyToSA3" - // 不支持实例变配到此类型机型。 UNSUPPORTEDOPERATION_UNSUPPORTEDCHANGEINSTANCETOTHISINSTANCEFAMILY = "UnsupportedOperation.UnsupportedChangeInstanceToThisInstanceFamily" @@ -778,6 +1036,9 @@ const ( // 用户限额操作的配额不足。 UNSUPPORTEDOPERATION_USERLIMITOPERATIONEXCEEDQUOTA = "UnsupportedOperation.UserLimitOperationExceedQuota" + // Windows镜像不支持导出。 + UNSUPPORTEDOPERATION_WINDOWSIMAGEEXPORTUNSUPPORTED = "UnsupportedOperation.WindowsImageExportUnsupported" + // 私有网络ip不在子网内。 VPCADDRNOTINSUBNET = "VpcAddrNotInSubNet" diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/models.go similarity index 52% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/models.go index 7c7b208a36ed..2d457186e910 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312/models.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,12 +19,11 @@ package v20170312 import ( "encoding/json" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" ) type AccountQuota struct { - // 后付费配额列表 PostPaidQuotaSet []*PostPaidQuota `json:"PostPaidQuotaSet,omitempty" name:"PostPaidQuotaSet"` @@ -42,7 +41,6 @@ type AccountQuota struct { } type AccountQuotaOverview struct { - // 地域 Region *string `json:"Region,omitempty" name:"Region"` @@ -51,15 +49,41 @@ type AccountQuotaOverview struct { } type ActionTimer struct { + // 定时器动作,目前仅支持销毁一个值:TerminateInstances。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TimerAction *string `json:"TimerAction,omitempty" name:"TimerAction"` + + // 执行时间,按照ISO8601标准表示,并且使用UTC时间。格式为 YYYY-MM-DDThh:mm:ssZ。例如 2018-05-29T11:26:40Z,执行时间必须大于当前时间5分钟。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ActionTime *string `json:"ActionTime,omitempty" name:"ActionTime"` // 扩展数据 + // 注意:此字段可能返回 null,表示取不到有效值。 Externals *Externals `json:"Externals,omitempty" name:"Externals"` +} - // 定时器名称,目前仅支持销毁一个值:TerminateInstances。 - TimerAction *string `json:"TimerAction,omitempty" name:"TimerAction"` +// Predefined struct for user +type AllocateHostsRequestParams struct { + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` - // 执行时间,格式形如:2018-5-29 11:26:40,执行时间必须大于当前时间5分钟。 - ActionTime *string `json:"ActionTime,omitempty" name:"ActionTime"` + // 用于保证请求幂等性的字符串。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` + + // 实例计费类型。目前仅支持:PREPAID(预付费,即包年包月模式),默认为:'PREPAID'。 + HostChargeType *string `json:"HostChargeType,omitempty" name:"HostChargeType"` + + // CDH实例机型,默认为:'HS1'。 + HostType *string `json:"HostType,omitempty" name:"HostType"` + + // 购买CDH实例数量,默认为:1。 + HostCount *uint64 `json:"HostCount,omitempty" name:"HostCount"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` } type AllocateHostsRequest struct { @@ -112,16 +136,18 @@ func (r *AllocateHostsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AllocateHostsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AllocateHostsResponseParams struct { + // 新创建云子机的实例ID列表。 + HostIdSet []*string `json:"HostIdSet,omitempty" name:"HostIdSet"` - // 新创建云子机的实例id列表。 - HostIdSet []*string `json:"HostIdSet,omitempty" name:"HostIdSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AllocateHostsResponse struct { + *tchttp.BaseResponse + Response *AllocateHostsResponseParams `json:"Response"` } func (r *AllocateHostsResponse) ToJsonString() string { @@ -135,6 +161,18 @@ func (r *AllocateHostsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateInstancesKeyPairsRequestParams struct { + // 一个或多个待操作的实例ID,每次请求批量实例的上限为100。
    可以通过以下方式获取可用的实例ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询实例ID。
  • 通过调用接口 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) ,取返回信息中的`InstanceId`获取实例ID。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 一个或多个待操作的密钥对ID,每次请求批量密钥对的上限为100。密钥对ID形如:`skey-3glfot13`。
    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的`KeyId`获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再绑定密钥。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机。
  • FALSE:表示在正常关机失败后不进行强制关机。
    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + type AssociateInstancesKeyPairsRequest struct { *tchttp.BaseRequest @@ -169,13 +207,15 @@ func (r *AssociateInstancesKeyPairsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateInstancesKeyPairsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateInstancesKeyPairsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateInstancesKeyPairsResponseParams `json:"Response"` } func (r *AssociateInstancesKeyPairsResponse) ToJsonString() string { @@ -189,6 +229,15 @@ func (r *AssociateInstancesKeyPairsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateSecurityGroupsRequestParams struct { + // 要绑定的`安全组ID`,类似sg-efil73jd,只支持绑定单个安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 被绑定的`实例ID`,类似ins-lesecurk,支持指定多个实例,每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type AssociateSecurityGroupsRequest struct { *tchttp.BaseRequest @@ -219,13 +268,15 @@ func (r *AssociateSecurityGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateSecurityGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateSecurityGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateSecurityGroupsResponseParams `json:"Response"` } func (r *AssociateSecurityGroupsResponse) ToJsonString() string { @@ -240,7 +291,6 @@ func (r *AssociateSecurityGroupsResponse) FromJsonString(s string) error { } type ChargePrepaid struct { - // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36。 Period *uint64 `json:"Period,omitempty" name:"Period"` @@ -248,225 +298,715 @@ type ChargePrepaid struct { RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` } -type CreateDisasterRecoverGroupRequest struct { +type ChcDeployExtraConfig struct { +} + +type ChcHost struct { + // CHC物理服务器ID。 + ChcId *string `json:"ChcId,omitempty" name:"ChcId"` + + // 实例名称。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 服务器序列号。 + SerialNumber *string `json:"SerialNumber,omitempty" name:"SerialNumber"` + + // CHC的状态
    + //
      + //
    • INIT: 设备已录入。还未配置带外和部署网络
    • + //
    • READY: 已配置带外和部署网络
    • + //
    • PREPARED: 可分配云主机
    • + //
    • ONLINE: 已分配云主机
    • + //
    • OPERATING: 设备操作中,如正在配置带外网络等。
    • + //
    • CLEAR_NETWORK_FAILED: 清理带外和部署网络失败
    • + //
    + InstanceState *string `json:"InstanceState,omitempty" name:"InstanceState"` + + // 设备类型。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeviceType *string `json:"DeviceType,omitempty" name:"DeviceType"` + + // 所属可用区 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 带外网络。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BmcVirtualPrivateCloud *VirtualPrivateCloud `json:"BmcVirtualPrivateCloud,omitempty" name:"BmcVirtualPrivateCloud"` + + // 带外网络Ip。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BmcIp *string `json:"BmcIp,omitempty" name:"BmcIp"` + + // 带外网络安全组Id。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BmcSecurityGroupIds []*string `json:"BmcSecurityGroupIds,omitempty" name:"BmcSecurityGroupIds"` + + // 部署网络。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeployVirtualPrivateCloud *VirtualPrivateCloud `json:"DeployVirtualPrivateCloud,omitempty" name:"DeployVirtualPrivateCloud"` + + // 部署网络Ip。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeployIp *string `json:"DeployIp,omitempty" name:"DeployIp"` + + // 部署网络安全组Id。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeploySecurityGroupIds []*string `json:"DeploySecurityGroupIds,omitempty" name:"DeploySecurityGroupIds"` + + // 关联的云主机Id。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CvmInstanceId *string `json:"CvmInstanceId,omitempty" name:"CvmInstanceId"` + + // 服务器导入的时间。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 机型的硬件描述,分别为CPU核数,内存容量和磁盘容量 + // 注意:此字段可能返回 null,表示取不到有效值。 + HardwareDescription *string `json:"HardwareDescription,omitempty" name:"HardwareDescription"` + + // CHC物理服务器的CPU核数 + // 注意:此字段可能返回 null,表示取不到有效值。 + CPU *int64 `json:"CPU,omitempty" name:"CPU"` + + // CHC物理服务器的内存大小,单位为GB + // 注意:此字段可能返回 null,表示取不到有效值。 + Memory *int64 `json:"Memory,omitempty" name:"Memory"` + + // CHC物理服务器的磁盘信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + Disk *string `json:"Disk,omitempty" name:"Disk"` + + // 带外网络下分配的MAC地址 + // 注意:此字段可能返回 null,表示取不到有效值。 + BmcMAC *string `json:"BmcMAC,omitempty" name:"BmcMAC"` + + // 部署网络下分配的MAC地址 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeployMAC *string `json:"DeployMAC,omitempty" name:"DeployMAC"` + + // 设备托管类型。 + // HOSTING: 托管 + // TENANT: 租赁 + // 注意:此字段可能返回 null,表示取不到有效值。 + TenantType *string `json:"TenantType,omitempty" name:"TenantType"` + + // chc dhcp选项,用于minios调试 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeployExtraConfig *ChcDeployExtraConfig `json:"DeployExtraConfig,omitempty" name:"DeployExtraConfig"` +} + +type ChcHostDeniedActions struct { + // CHC物理服务器的实例id + ChcId *string `json:"ChcId,omitempty" name:"ChcId"` + + // CHC物理服务器的状态 + State *string `json:"State,omitempty" name:"State"` + + // 当前CHC物理服务器禁止做的操作 + DenyActions []*string `json:"DenyActions,omitempty" name:"DenyActions"` +} + +// Predefined struct for user +type ConfigureChcAssistVpcRequestParams struct { + // CHC物理服务器的实例Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + // 带外网络信息。 + BmcVirtualPrivateCloud *VirtualPrivateCloud `json:"BmcVirtualPrivateCloud,omitempty" name:"BmcVirtualPrivateCloud"` + + // 带外网络的安全组列表 + BmcSecurityGroupIds []*string `json:"BmcSecurityGroupIds,omitempty" name:"BmcSecurityGroupIds"` + + // 部署网络信息。 + DeployVirtualPrivateCloud *VirtualPrivateCloud `json:"DeployVirtualPrivateCloud,omitempty" name:"DeployVirtualPrivateCloud"` + + // 部署网络的安全组列表 + DeploySecurityGroupIds []*string `json:"DeploySecurityGroupIds,omitempty" name:"DeploySecurityGroupIds"` +} + +type ConfigureChcAssistVpcRequest struct { *tchttp.BaseRequest - // 分散置放群组名称,长度1-60个字符,支持中、英文。 - Name *string `json:"Name,omitempty" name:"Name"` + // CHC物理服务器的实例Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` - // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 - Type *string `json:"Type,omitempty" name:"Type"` + // 带外网络信息。 + BmcVirtualPrivateCloud *VirtualPrivateCloud `json:"BmcVirtualPrivateCloud,omitempty" name:"BmcVirtualPrivateCloud"` - // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 - ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + // 带外网络的安全组列表 + BmcSecurityGroupIds []*string `json:"BmcSecurityGroupIds,omitempty" name:"BmcSecurityGroupIds"` + + // 部署网络信息。 + DeployVirtualPrivateCloud *VirtualPrivateCloud `json:"DeployVirtualPrivateCloud,omitempty" name:"DeployVirtualPrivateCloud"` + + // 部署网络的安全组列表 + DeploySecurityGroupIds []*string `json:"DeploySecurityGroupIds,omitempty" name:"DeploySecurityGroupIds"` } -func (r *CreateDisasterRecoverGroupRequest) ToJsonString() string { +func (r *ConfigureChcAssistVpcRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateDisasterRecoverGroupRequest) FromJsonString(s string) error { +func (r *ConfigureChcAssistVpcRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } - delete(f, "Name") - delete(f, "Type") - delete(f, "ClientToken") + delete(f, "ChcIds") + delete(f, "BmcVirtualPrivateCloud") + delete(f, "BmcSecurityGroupIds") + delete(f, "DeployVirtualPrivateCloud") + delete(f, "DeploySecurityGroupIds") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateDisasterRecoverGroupRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ConfigureChcAssistVpcRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateDisasterRecoverGroupResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 分散置放群组ID列表。 - DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` - - // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 - Type *string `json:"Type,omitempty" name:"Type"` - - // 分散置放群组名称,长度1-60个字符,支持中、英文。 - Name *string `json:"Name,omitempty" name:"Name"` - - // 置放群组内可容纳的云服务器数量。 - CvmQuotaTotal *int64 `json:"CvmQuotaTotal,omitempty" name:"CvmQuotaTotal"` - - // 置放群组内已有的云服务器数量。 - CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` - - // 置放群组创建时间。 - CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` +// Predefined struct for user +type ConfigureChcAssistVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ConfigureChcAssistVpcResponse struct { + *tchttp.BaseResponse + Response *ConfigureChcAssistVpcResponseParams `json:"Response"` } -func (r *CreateDisasterRecoverGroupResponse) ToJsonString() string { +func (r *ConfigureChcAssistVpcResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateDisasterRecoverGroupResponse) FromJsonString(s string) error { +func (r *ConfigureChcAssistVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateImageRequest struct { - *tchttp.BaseRequest - - // 镜像名称 - ImageName *string `json:"ImageName,omitempty" name:"ImageName"` - - // 需要制作镜像的实例ID。基于实例创建镜像时,为必填参数。 - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +// Predefined struct for user +type ConfigureChcDeployVpcRequestParams struct { + // CHC物理服务器的实例Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` - // 镜像描述 - ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` - - // 是否执行强制关机以制作镜像。 - // 取值范围:
  • TRUE:表示关机之后制作镜像
  • FALSE:表示开机状态制作镜像

    默认取值:FALSE。

    开机状态制作镜像,可能导致部分数据未备份,影响数据安全。 - ForcePoweroff *string `json:"ForcePoweroff,omitempty" name:"ForcePoweroff"` + // 部署网络信息。 + DeployVirtualPrivateCloud *VirtualPrivateCloud `json:"DeployVirtualPrivateCloud,omitempty" name:"DeployVirtualPrivateCloud"` - // 创建Windows镜像时是否启用Sysprep。 - // 取值范围:TRUE或FALSE,默认取值为FALSE。 - // - // 关于Sysprep的详情请参考[链接](https://cloud.tencent.com/document/product/213/43498)。 - Sysprep *string `json:"Sysprep,omitempty" name:"Sysprep"` + // 部署网络的安全组列表。 + DeploySecurityGroupIds []*string `json:"DeploySecurityGroupIds,omitempty" name:"DeploySecurityGroupIds"` +} - // 基于实例创建整机镜像时,指定包含在镜像里的数据盘Id - DataDiskIds []*string `json:"DataDiskIds,omitempty" name:"DataDiskIds"` +type ConfigureChcDeployVpcRequest struct { + *tchttp.BaseRequest - // 基于快照创建镜像,指定快照ID,必须包含一个系统盘快照。不可与InstanceId同时传入。 - SnapshotIds []*string `json:"SnapshotIds,omitempty" name:"SnapshotIds"` + // CHC物理服务器的实例Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` - // 检测本次请求的是否成功,但不会对操作的资源产生任何影响 - DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + // 部署网络信息。 + DeployVirtualPrivateCloud *VirtualPrivateCloud `json:"DeployVirtualPrivateCloud,omitempty" name:"DeployVirtualPrivateCloud"` - // 标签描述列表。通过指定该参数可以同时绑定标签到自定义镜像。 - TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + // 部署网络的安全组列表。 + DeploySecurityGroupIds []*string `json:"DeploySecurityGroupIds,omitempty" name:"DeploySecurityGroupIds"` } -func (r *CreateImageRequest) ToJsonString() string { +func (r *ConfigureChcDeployVpcRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateImageRequest) FromJsonString(s string) error { +func (r *ConfigureChcDeployVpcRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } - delete(f, "ImageName") - delete(f, "InstanceId") - delete(f, "ImageDescription") - delete(f, "ForcePoweroff") - delete(f, "Sysprep") - delete(f, "DataDiskIds") - delete(f, "SnapshotIds") - delete(f, "DryRun") - delete(f, "TagSpecification") + delete(f, "ChcIds") + delete(f, "DeployVirtualPrivateCloud") + delete(f, "DeploySecurityGroupIds") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateImageRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ConfigureChcDeployVpcRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateImageResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 镜像ID - // 注意:此字段可能返回 null,表示取不到有效值。 - ImageId *string `json:"ImageId,omitempty" name:"ImageId"` +// Predefined struct for user +type ConfigureChcDeployVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ConfigureChcDeployVpcResponse struct { + *tchttp.BaseResponse + Response *ConfigureChcDeployVpcResponseParams `json:"Response"` } -func (r *CreateImageResponse) ToJsonString() string { +func (r *ConfigureChcDeployVpcResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateImageResponse) FromJsonString(s string) error { +func (r *ConfigureChcDeployVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateKeyPairRequest struct { +// Predefined struct for user +type CreateDisasterRecoverGroupRequestParams struct { + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` +} + +type CreateDisasterRecoverGroupRequest struct { *tchttp.BaseRequest - // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 - KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` - // 密钥对创建后所属的项目ID。 - // 可以通过以下方式获取项目ID: - //
  • 通过项目列表查询项目ID。 - //
  • 通过调用接口DescribeProject,取返回信息中的`projectId `获取项目ID。 - ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` } -func (r *CreateKeyPairRequest) ToJsonString() string { +func (r *CreateDisasterRecoverGroupRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateKeyPairRequest) FromJsonString(s string) error { +func (r *CreateDisasterRecoverGroupRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } - delete(f, "KeyName") - delete(f, "ProjectId") + delete(f, "Name") + delete(f, "Type") + delete(f, "ClientToken") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateKeyPairRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateDisasterRecoverGroupRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateKeyPairResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateDisasterRecoverGroupResponseParams struct { + // 分散置放群组ID列表。 + DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` + + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 置放群组内可容纳的云服务器数量。 + CvmQuotaTotal *int64 `json:"CvmQuotaTotal,omitempty" name:"CvmQuotaTotal"` + + // 置放群组内已有的云服务器数量。 + CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` - // 密钥对信息。 - KeyPair *KeyPair `json:"KeyPair,omitempty" name:"KeyPair"` + // 置放群组创建时间。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` } -func (r *CreateKeyPairResponse) ToJsonString() string { +type CreateDisasterRecoverGroupResponse struct { + *tchttp.BaseResponse + Response *CreateDisasterRecoverGroupResponseParams `json:"Response"` +} + +func (r *CreateDisasterRecoverGroupResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *CreateKeyPairResponse) FromJsonString(s string) error { +func (r *CreateDisasterRecoverGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateLaunchTemplateRequest struct { - *tchttp.BaseRequest +// Predefined struct for user +type CreateHpcClusterRequestParams struct { + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` - // 实例启动模板名称。长度为2~128个英文或中文字符。 - LaunchTemplateName *string `json:"LaunchTemplateName,omitempty" name:"LaunchTemplateName"` + // 高性能计算集群名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 高性能计算集群备注。 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +type CreateHpcClusterRequest struct { + *tchttp.BaseRequest + + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 高性能计算集群名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 高性能计算集群备注。 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +func (r *CreateHpcClusterRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateHpcClusterRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Zone") + delete(f, "Name") + delete(f, "Remark") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateHpcClusterRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateHpcClusterResponseParams struct { + // 高性能计算集群信息。 + // 注意:此字段可能返回 null,表示取不到有效值。 + HpcClusterSet []*HpcClusterInfo `json:"HpcClusterSet,omitempty" name:"HpcClusterSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateHpcClusterResponse struct { + *tchttp.BaseResponse + Response *CreateHpcClusterResponseParams `json:"Response"` +} + +func (r *CreateHpcClusterResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateHpcClusterResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateImageRequestParams struct { + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 需要制作镜像的实例ID。基于实例创建镜像时,为必填参数。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 是否执行强制关机以制作镜像。 + // 取值范围:
  • TRUE:表示关机之后制作镜像
  • FALSE:表示开机状态制作镜像

    默认取值:FALSE。

    开机状态制作镜像,可能导致部分数据未备份,影响数据安全。 + ForcePoweroff *string `json:"ForcePoweroff,omitempty" name:"ForcePoweroff"` + + // 创建Windows镜像时是否启用Sysprep。 + // 取值范围:TRUE或FALSE,默认取值为FALSE。 + // + // 关于Sysprep的详情请参考[链接](https://cloud.tencent.com/document/product/213/43498)。 + Sysprep *string `json:"Sysprep,omitempty" name:"Sysprep"` + + // 基于实例创建整机镜像时,指定包含在镜像里的数据盘ID + DataDiskIds []*string `json:"DataDiskIds,omitempty" name:"DataDiskIds"` + + // 基于快照创建镜像,指定快照ID,必须包含一个系统盘快照。不可与InstanceId同时传入。 + SnapshotIds []*string `json:"SnapshotIds,omitempty" name:"SnapshotIds"` + + // 检测本次请求的是否成功,但不会对操作的资源产生任何影响 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到自定义镜像。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` +} + +type CreateImageRequest struct { + *tchttp.BaseRequest + + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 需要制作镜像的实例ID。基于实例创建镜像时,为必填参数。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 是否执行强制关机以制作镜像。 + // 取值范围:
  • TRUE:表示关机之后制作镜像
  • FALSE:表示开机状态制作镜像

    默认取值:FALSE。

    开机状态制作镜像,可能导致部分数据未备份,影响数据安全。 + ForcePoweroff *string `json:"ForcePoweroff,omitempty" name:"ForcePoweroff"` + + // 创建Windows镜像时是否启用Sysprep。 + // 取值范围:TRUE或FALSE,默认取值为FALSE。 + // + // 关于Sysprep的详情请参考[链接](https://cloud.tencent.com/document/product/213/43498)。 + Sysprep *string `json:"Sysprep,omitempty" name:"Sysprep"` + + // 基于实例创建整机镜像时,指定包含在镜像里的数据盘ID + DataDiskIds []*string `json:"DataDiskIds,omitempty" name:"DataDiskIds"` + + // 基于快照创建镜像,指定快照ID,必须包含一个系统盘快照。不可与InstanceId同时传入。 + SnapshotIds []*string `json:"SnapshotIds,omitempty" name:"SnapshotIds"` + + // 检测本次请求的是否成功,但不会对操作的资源产生任何影响 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到自定义镜像。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` +} + +func (r *CreateImageRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateImageRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ImageName") + delete(f, "InstanceId") + delete(f, "ImageDescription") + delete(f, "ForcePoweroff") + delete(f, "Sysprep") + delete(f, "DataDiskIds") + delete(f, "SnapshotIds") + delete(f, "DryRun") + delete(f, "TagSpecification") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateImageRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateImageResponseParams struct { + // 镜像ID + // 注意:此字段可能返回 null,表示取不到有效值。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateImageResponse struct { + *tchttp.BaseResponse + Response *CreateImageResponseParams `json:"Response"` +} + +func (r *CreateImageResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateImageResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateKeyPairRequestParams struct { + // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对创建后所属的项目ID。 + // 可以通过以下方式获取项目ID: + //
  • 通过项目列表查询项目ID。 + //
  • 通过调用接口DescribeProject,取返回信息中的`projectId `获取项目ID。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到密钥对。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` +} + +type CreateKeyPairRequest struct { + *tchttp.BaseRequest + + // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对创建后所属的项目ID。 + // 可以通过以下方式获取项目ID: + //
  • 通过项目列表查询项目ID。 + //
  • 通过调用接口DescribeProject,取返回信息中的`projectId `获取项目ID。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到密钥对。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` +} + +func (r *CreateKeyPairRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateKeyPairRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "KeyName") + delete(f, "ProjectId") + delete(f, "TagSpecification") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateKeyPairRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateKeyPairResponseParams struct { + // 密钥对信息。 + KeyPair *KeyPair `json:"KeyPair,omitempty" name:"KeyPair"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateKeyPairResponse struct { + *tchttp.BaseResponse + Response *CreateKeyPairResponseParams `json:"Response"` +} + +func (r *CreateKeyPairResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateKeyPairResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateLaunchTemplateRequestParams struct { + // 实例启动模板名称。长度为2~128个英文或中文字符。 + LaunchTemplateName *string `json:"LaunchTemplateName,omitempty" name:"LaunchTemplateName"` + + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,传入InstanceType获取当前机型支持的镜像列表,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例启动模板版本描述。长度为2~256个英文或中文字符。 + LaunchTemplateVersionDescription *string `json:"LaunchTemplateVersionDescription,omitempty" name:"LaunchTemplateVersionDescription"` + + // 实例机型。不同实例机型指定了不同的资源规格。 + //
  • 对于付费模式为PREPAID或POSTPAID\_BY\_HOUR的实例创建,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例规格](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则系统将根据当前地域的资源售卖情况动态指定默认机型。
  • 对于付费模式为CDHPAID的实例创建,该参数以"CDH_"为前缀,根据CPU和内存配置生成,具体形式为:CDH_XCXG,例如对于创建CPU为1核,内存为1G大小的专用宿主机的实例,该参数应该为CDH_1C1G。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定21块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含20块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络IP,即表示每个实例的主网卡IP;同时,InstanceCount参数必须与私有网络IP的个数一致且不能大于20。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。包年包月实例取值范围:[1,300],按量计费实例取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。
  • 最多支持60个字符(包含模式串)。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认公共镜像开启云监控、云安全服务;自定义镜像与镜像市场镜像默认不开启云监控,云安全服务,而使用镜像里保留的服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。 + ActionTimer *ActionTimer `json:"ActionTimer,omitempty" name:"ActionTimer"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云服务器实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费则该参数必传。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 是否只预检此次请求。 + // true:发送检查请求,不会创建实例。检查项包括是否填写了必需参数,请求格式,业务限制和云服务器库存。 + // 如果检查不通过,则返回对应错误码; + // 如果检查通过,则返回RequestId. + // false(默认):发送正常请求,通过检查后直接创建实例。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // CAM角色名称。可通过[`DescribeRoleList`](https://cloud.tencent.com/document/product/598/13887)接口返回值中的`roleName`获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 高性能计算集群ID。若创建的实例为高性能计算实例,需指定实例放置的集群,否则不可指定。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • CDHPAID:独享子机(基于专用宿主机创建,宿主机部分的资源不收费)
  • SPOTPAID:竞价付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` +} + +type CreateLaunchTemplateRequest struct { + *tchttp.BaseRequest + + // 实例启动模板名称。长度为2~128个英文或中文字符。 + LaunchTemplateName *string `json:"LaunchTemplateName,omitempty" name:"LaunchTemplateName"` // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` @@ -547,6 +1087,9 @@ type CreateLaunchTemplateRequest struct { // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` } func (r *CreateLaunchTemplateRequest) ToJsonString() string { @@ -587,22 +1130,25 @@ func (r *CreateLaunchTemplateRequest) FromJsonString(s string) error { delete(f, "HpcClusterId") delete(f, "InstanceChargeType") delete(f, "InstanceChargePrepaid") + delete(f, "DisableApiTermination") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateLaunchTemplateRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateLaunchTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateLaunchTemplateResponseParams struct { + // 当通过本接口来创建实例启动模板时会返回该参数,表示创建成功的实例启动模板`ID`。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` - // 当通过本接口来创建实例启动模板时会返回该参数,表示创建成功的实例启动模板`ID`。 - LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateLaunchTemplateResponse struct { + *tchttp.BaseResponse + Response *CreateLaunchTemplateResponseParams `json:"Response"` } func (r *CreateLaunchTemplateResponse) ToJsonString() string { @@ -616,6 +1162,98 @@ func (r *CreateLaunchTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateLaunchTemplateVersionRequestParams struct { + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 启动模板ID,新版本将基于该实例启动模板ID创建。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` + + // 若给定,新实例启动模板将基于给定的版本号创建。若未指定则使用默认版本。 + LaunchTemplateVersion *int64 `json:"LaunchTemplateVersion,omitempty" name:"LaunchTemplateVersion"` + + // 实例启动模板版本描述。长度为2~256个英文或中文字符。 + LaunchTemplateVersionDescription *string `json:"LaunchTemplateVersionDescription,omitempty" name:"LaunchTemplateVersionDescription"` + + // 实例机型。不同实例机型指定了不同的资源规格。 + //
  • 对于付费模式为PREPAID或POSTPAID\_BY\_HOUR的实例创建,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例规格](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则系统将根据当前地域的资源售卖情况动态指定默认机型。
  • 对于付费模式为CDHPAID的实例创建,该参数以"CDH_"为前缀,根据CPU和内存配置生成,具体形式为:CDH_XCXG,例如对于创建CPU为1核,内存为1G大小的专用宿主机的实例,该参数应该为CDH_1C1G。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,传入InstanceType获取当前机型支持的镜像列表,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定21块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含20块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络IP,即表示每个实例的主网卡IP;同时,InstanceCount参数必须与私有网络IP的个数一致且不能大于20。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。包年包月实例取值范围:[1,300],按量计费实例取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。
  • 最多支持60个字符(包含模式串)。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认公共镜像开启云监控、云安全服务;自定义镜像与镜像市场镜像默认不开启云监控,云安全服务,而使用镜像里保留的服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。 + ActionTimer *ActionTimer `json:"ActionTimer,omitempty" name:"ActionTimer"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云服务器实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费则该参数必传。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 是否只预检此次请求。 + // true:发送检查请求,不会创建实例。检查项包括是否填写了必需参数,请求格式,业务限制和云服务器库存。 + // 如果检查不通过,则返回对应错误码; + // 如果检查通过,则返回RequestId. + // false(默认):发送正常请求,通过检查后直接创建实例。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // CAM角色名称。可通过[`DescribeRoleList`](https://cloud.tencent.com/document/product/598/13887)接口返回值中的`roleName`获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 高性能计算集群ID。若创建的实例为高性能计算实例,需指定实例放置的集群,否则不可指定。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • CDHPAID:独享子机(基于专用宿主机创建,宿主机部分的资源不收费)
  • SPOTPAID:竞价付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` +} + type CreateLaunchTemplateVersionRequest struct { *tchttp.BaseRequest @@ -704,6 +1342,9 @@ type CreateLaunchTemplateVersionRequest struct { // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` } func (r *CreateLaunchTemplateVersionRequest) ToJsonString() string { @@ -745,22 +1386,25 @@ func (r *CreateLaunchTemplateVersionRequest) FromJsonString(s string) error { delete(f, "HpcClusterId") delete(f, "InstanceChargeType") delete(f, "InstanceChargePrepaid") + delete(f, "DisableApiTermination") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateLaunchTemplateVersionRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateLaunchTemplateVersionResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateLaunchTemplateVersionResponseParams struct { + // 新创建的实例启动模板版本号。 + LaunchTemplateVersionNumber *int64 `json:"LaunchTemplateVersionNumber,omitempty" name:"LaunchTemplateVersionNumber"` - // 新创建的实例启动模板版本号。 - LaunchTemplateVersionNumber *int64 `json:"LaunchTemplateVersionNumber,omitempty" name:"LaunchTemplateVersionNumber"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateLaunchTemplateVersionResponse struct { + *tchttp.BaseResponse + Response *CreateLaunchTemplateVersionResponseParams `json:"Response"` } func (r *CreateLaunchTemplateVersionResponse) ToJsonString() string { @@ -775,14 +1419,14 @@ func (r *CreateLaunchTemplateVersionResponse) FromJsonString(s string) error { } type DataDisk struct { - // 数据盘大小,单位:GB。最小调整步长为10G,不同数据盘类型取值范围不同,具体限制详见:[存储概述](https://cloud.tencent.com/document/product/213/4952)。默认值为0,表示不购买数据盘。更多限制详见产品文档。 DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` - // 数据盘类型。数据盘类型限制详见[存储概述](https://cloud.tencent.com/document/product/213/4952)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • LOCAL_NVME:本地NVME硬盘,与InstanceType强相关,不支持指定
  • LOCAL_PRO:本地HDD硬盘,与InstanceType强相关,不支持指定
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_HSSD:增强型SSD云硬盘
  • CLOUD_TSSD:极速型SSD云硬盘

    默认取值:LOCAL_BASIC。

    该参数对`ResizeInstanceDisk`接口无效。 + // 数据盘类型。数据盘类型限制详见[存储概述](https://cloud.tencent.com/document/product/213/4952)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • LOCAL_NVME:本地NVME硬盘,与InstanceType强相关,不支持指定
  • LOCAL_PRO:本地HDD硬盘,与InstanceType强相关,不支持指定
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_HSSD:增强型SSD云硬盘
  • CLOUD_TSSD:极速型SSD云硬盘
  • CLOUD_BSSD:通用型SSD云硬盘

    默认取值:LOCAL_BASIC。

    该参数对`ResizeInstanceDisk`接口无效。 DiskType *string `json:"DiskType,omitempty" name:"DiskType"` // 数据盘ID。LOCAL_BASIC 和 LOCAL_SSD 类型没有ID,暂时不支持该参数。 + // 该参数目前仅用于`DescribeInstances`等查询类接口的返回参数,不可用于`RunInstances`等写接口的入参。 DiskId *string `json:"DiskId,omitempty" name:"DiskId"` // 数据盘是否随子机销毁。取值范围: @@ -820,6 +1464,12 @@ type DataDisk struct { CdcId *string `json:"CdcId,omitempty" name:"CdcId"` } +// Predefined struct for user +type DeleteDisasterRecoverGroupsRequestParams struct { + // 分散置放群组ID列表,可通过[DescribeDisasterRecoverGroups](https://cloud.tencent.com/document/api/213/17810)接口获取。每次请求允许操作的分散置放群组数量上限是100。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` +} + type DeleteDisasterRecoverGroupsRequest struct { *tchttp.BaseRequest @@ -846,13 +1496,15 @@ func (r *DeleteDisasterRecoverGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDisasterRecoverGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteDisasterRecoverGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteDisasterRecoverGroupsResponseParams `json:"Response"` } func (r *DeleteDisasterRecoverGroupsResponse) ToJsonString() string { @@ -866,11 +1518,83 @@ func (r *DeleteDisasterRecoverGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteHpcClustersRequestParams struct { + // 高性能计算集群ID列表。 + HpcClusterIds []*string `json:"HpcClusterIds,omitempty" name:"HpcClusterIds"` +} + +type DeleteHpcClustersRequest struct { + *tchttp.BaseRequest + + // 高性能计算集群ID列表。 + HpcClusterIds []*string `json:"HpcClusterIds,omitempty" name:"HpcClusterIds"` +} + +func (r *DeleteHpcClustersRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteHpcClustersRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "HpcClusterIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteHpcClustersRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteHpcClustersResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteHpcClustersResponse struct { + *tchttp.BaseResponse + Response *DeleteHpcClustersResponseParams `json:"Response"` +} + +func (r *DeleteHpcClustersResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteHpcClustersResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteImagesRequestParams struct { + // 准备删除的镜像Id列表 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 是否删除镜像关联的快照 + DeleteBindedSnap *bool `json:"DeleteBindedSnap,omitempty" name:"DeleteBindedSnap"` + + // 检测是否支持删除镜像 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + type DeleteImagesRequest struct { *tchttp.BaseRequest // 准备删除的镜像Id列表 ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 是否删除镜像关联的快照 + DeleteBindedSnap *bool `json:"DeleteBindedSnap,omitempty" name:"DeleteBindedSnap"` + + // 检测是否支持删除镜像 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` } func (r *DeleteImagesRequest) ToJsonString() string { @@ -886,19 +1610,23 @@ func (r *DeleteImagesRequest) FromJsonString(s string) error { return err } delete(f, "ImageIds") + delete(f, "DeleteBindedSnap") + delete(f, "DryRun") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteImagesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteImagesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteImagesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteImagesResponseParams `json:"Response"` } func (r *DeleteImagesResponse) ToJsonString() string { @@ -912,6 +1640,12 @@ func (r *DeleteImagesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteKeyPairsRequestParams struct { + // 一个或多个待操作的密钥对ID。每次请求批量密钥对的上限为100。
    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的 `KeyId` 获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` +} + type DeleteKeyPairsRequest struct { *tchttp.BaseRequest @@ -938,13 +1672,15 @@ func (r *DeleteKeyPairsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteKeyPairsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteKeyPairsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteKeyPairsResponseParams `json:"Response"` } func (r *DeleteKeyPairsResponse) ToJsonString() string { @@ -958,6 +1694,12 @@ func (r *DeleteKeyPairsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchTemplateRequestParams struct { + // 启动模板ID。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` +} + type DeleteLaunchTemplateRequest struct { *tchttp.BaseRequest @@ -984,13 +1726,15 @@ func (r *DeleteLaunchTemplateRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchTemplateResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteLaunchTemplateResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteLaunchTemplateResponseParams `json:"Response"` } func (r *DeleteLaunchTemplateResponse) ToJsonString() string { @@ -1004,6 +1748,15 @@ func (r *DeleteLaunchTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchTemplateVersionsRequestParams struct { + // 启动模板ID。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` + + // 实例启动模板版本列表。 + LaunchTemplateVersions []*int64 `json:"LaunchTemplateVersions,omitempty" name:"LaunchTemplateVersions"` +} + type DeleteLaunchTemplateVersionsRequest struct { *tchttp.BaseRequest @@ -1034,13 +1787,15 @@ func (r *DeleteLaunchTemplateVersionsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLaunchTemplateVersionsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteLaunchTemplateVersionsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteLaunchTemplateVersionsResponseParams `json:"Response"` } func (r *DeleteLaunchTemplateVersionsResponse) ToJsonString() string { @@ -1054,6 +1809,15 @@ func (r *DeleteLaunchTemplateVersionsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAccountQuotaRequestParams struct { + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • quota-type
  • + //

    按照【配额类型】进行过滤。配额类型形如:PostPaidQuotaSet。

    类型:String

    必选:否

    可选项:PostPaidQuotaSet,DisasterRecoverGroupQuotaSet,PrePaidQuotaSet,SpotPaidQuotaSet

    + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeAccountQuotaRequest struct { *tchttp.BaseRequest @@ -1083,19 +1847,21 @@ func (r *DescribeAccountQuotaRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAccountQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAccountQuotaResponseParams struct { + // 用户appid + AppId *uint64 `json:"AppId,omitempty" name:"AppId"` - // 用户appid - AppId *string `json:"AppId,omitempty" name:"AppId"` + // 配额数据 + AccountQuotaOverview *AccountQuotaOverview `json:"AccountQuotaOverview,omitempty" name:"AccountQuotaOverview"` - // 配额数据 - AccountQuotaOverview *AccountQuotaOverview `json:"AccountQuotaOverview,omitempty" name:"AccountQuotaOverview"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAccountQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeAccountQuotaResponseParams `json:"Response"` } func (r *DescribeAccountQuotaResponse) ToJsonString() string { @@ -1109,6 +1875,170 @@ func (r *DescribeAccountQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeChcDeniedActionsRequestParams struct { + // CHC物理服务器实例id + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +type DescribeChcDeniedActionsRequest struct { + *tchttp.BaseRequest + + // CHC物理服务器实例id + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +func (r *DescribeChcDeniedActionsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeChcDeniedActionsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ChcIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeChcDeniedActionsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeChcDeniedActionsResponseParams struct { + // CHC实例禁止操作信息 + ChcHostDeniedActionSet []*ChcHostDeniedActions `json:"ChcHostDeniedActionSet,omitempty" name:"ChcHostDeniedActionSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeChcDeniedActionsResponse struct { + *tchttp.BaseResponse + Response *DescribeChcDeniedActionsResponseParams `json:"Response"` +} + +func (r *DescribeChcDeniedActionsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeChcDeniedActionsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeChcHostsRequestParams struct { + // CHC物理服务器实例ID。每次请求的实例的上限为100。参数不支持同时指定`ChcIds`和`Filters`。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • instance-name
  • + //

    按照【实例名称】进行过滤。

    类型:String

    必选:否

    + //
  • instance-state
  • + //

    按照【实例状态】进行过滤。状态类型详见[实例状态表](https://cloud.tencent.com/document/api/213/15753#InstanceStatus)

    类型:String

    必选:否

    + //
  • device-type
  • + //

    按照【设备类型】进行过滤。

    类型:String

    必选:否

    + //
  • vpc-id
  • + //

    按照【私有网络唯一ID】进行过滤。

    类型:String

    必选:否

    + //
  • subnet-id
  • + //

    按照【私有子网唯一ID】进行过滤。

    类型:String

    必选:否

    + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeChcHostsRequest struct { + *tchttp.BaseRequest + + // CHC物理服务器实例ID。每次请求的实例的上限为100。参数不支持同时指定`ChcIds`和`Filters`。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • instance-name
  • + //

    按照【实例名称】进行过滤。

    类型:String

    必选:否

    + //
  • instance-state
  • + //

    按照【实例状态】进行过滤。状态类型详见[实例状态表](https://cloud.tencent.com/document/api/213/15753#InstanceStatus)

    类型:String

    必选:否

    + //
  • device-type
  • + //

    按照【设备类型】进行过滤。

    类型:String

    必选:否

    + //
  • vpc-id
  • + //

    按照【私有网络唯一ID】进行过滤。

    类型:String

    必选:否

    + //
  • subnet-id
  • + //

    按照【私有子网唯一ID】进行过滤。

    类型:String

    必选:否

    + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeChcHostsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeChcHostsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ChcIds") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeChcHostsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeChcHostsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 返回的实例列表 + ChcHostSet []*ChcHost `json:"ChcHostSet,omitempty" name:"ChcHostSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeChcHostsResponse struct { + *tchttp.BaseResponse + Response *DescribeChcHostsResponseParams `json:"Response"` +} + +func (r *DescribeChcHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeChcHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeDisasterRecoverGroupQuotaRequestParams struct { +} + type DescribeDisasterRecoverGroupQuotaRequest struct { *tchttp.BaseRequest } @@ -1125,34 +2055,37 @@ func (r *DescribeDisasterRecoverGroupQuotaRequest) FromJsonString(s string) erro if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeDisasterRecoverGroupQuotaRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeDisasterRecoverGroupQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeDisasterRecoverGroupQuotaResponseParams struct { + // 可创建置放群组数量的上限。 + GroupQuota *int64 `json:"GroupQuota,omitempty" name:"GroupQuota"` - // 可创建置放群组数量的上限。 - GroupQuota *int64 `json:"GroupQuota,omitempty" name:"GroupQuota"` + // 当前用户已经创建的置放群组数量。 + CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` - // 当前用户已经创建的置放群组数量。 - CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` + // 物理机类型容灾组内实例的配额数。 + CvmInHostGroupQuota *int64 `json:"CvmInHostGroupQuota,omitempty" name:"CvmInHostGroupQuota"` - // 物理机类型容灾组内实例的配额数。 - CvmInHostGroupQuota *int64 `json:"CvmInHostGroupQuota,omitempty" name:"CvmInHostGroupQuota"` + // 交换机类型容灾组内实例的配额数。 + CvmInSwGroupQuota *int64 `json:"CvmInSwGroupQuota,omitempty" name:"CvmInSwGroupQuota"` - // 交换机类型容灾组内实例的配额数。 - CvmInSwGroupQuota *int64 `json:"CvmInSwGroupQuota,omitempty" name:"CvmInSwGroupQuota"` + // 机架类型容灾组内实例的配额数。 + CvmInRackGroupQuota *int64 `json:"CvmInRackGroupQuota,omitempty" name:"CvmInRackGroupQuota"` - // 机架类型容灾组内实例的配额数。 - CvmInRackGroupQuota *int64 `json:"CvmInRackGroupQuota,omitempty" name:"CvmInRackGroupQuota"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeDisasterRecoverGroupQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeDisasterRecoverGroupQuotaResponseParams `json:"Response"` } func (r *DescribeDisasterRecoverGroupQuotaResponse) ToJsonString() string { @@ -1166,6 +2099,21 @@ func (r *DescribeDisasterRecoverGroupQuotaResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeDisasterRecoverGroupsRequestParams struct { + // 分散置放群组ID列表。每次请求允许操作的分散置放群组数量上限是100。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` + + // 分散置放群组名称,支持模糊匹配。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeDisasterRecoverGroupsRequest struct { *tchttp.BaseRequest @@ -1204,19 +2152,21 @@ func (r *DescribeDisasterRecoverGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeDisasterRecoverGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeDisasterRecoverGroupsResponseParams struct { + // 分散置放群组信息列表。 + DisasterRecoverGroupSet []*DisasterRecoverGroup `json:"DisasterRecoverGroupSet,omitempty" name:"DisasterRecoverGroupSet"` - // 分散置放群组信息列表。 - DisasterRecoverGroupSet []*DisasterRecoverGroup `json:"DisasterRecoverGroupSet,omitempty" name:"DisasterRecoverGroupSet"` + // 用户置放群组总量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 用户置放群组总量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeDisasterRecoverGroupsResponse struct { + *tchttp.BaseResponse + Response *DescribeDisasterRecoverGroupsResponseParams `json:"Response"` } func (r *DescribeDisasterRecoverGroupsResponse) ToJsonString() string { @@ -1230,6 +2180,28 @@ func (r *DescribeDisasterRecoverGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeHostsRequestParams struct { + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • project-id
  • + //

    按照【项目ID】进行过滤,可通过调用[DescribeProject](https://cloud.tencent.com/document/api/378/4400)查询已创建的项目列表或登录[控制台](https://console.cloud.tencent.com/cvm/index)进行查看;也可以调用[AddProject](https://cloud.tencent.com/document/api/378/4398)创建新的项目。项目ID形如:1002189。

    类型:Integer

    必选:否

    + //
  • host-id
  • + //

    按照【[CDH](https://cloud.tencent.com/document/product/416) ID】进行过滤。[CDH](https://cloud.tencent.com/document/product/416) ID形如:host-xxxxxxxx。

    类型:String

    必选:否

    + //
  • host-name
  • + //

    按照【CDH实例名称】进行过滤。

    类型:String

    必选:否

    + //
  • host-state
  • + //

    按照【CDH实例状态】进行过滤。(PENDING:创建中 | LAUNCH_FAILURE:创建失败 | RUNNING:运行中 | EXPIRED:已过期)

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeHostsRequest struct { *tchttp.BaseRequest @@ -1274,32 +2246,126 @@ func (r *DescribeHostsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeHostsResponseParams struct { + // 符合查询条件的cdh实例总数 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // cdh实例详细信息列表 + HostSet []*HostItem `json:"HostSet,omitempty" name:"HostSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DescribeHostsResponse struct { *tchttp.BaseResponse - Response *struct { + Response *DescribeHostsResponseParams `json:"Response"` +} + +func (r *DescribeHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeHpcClustersRequestParams struct { + // 高性能计算集群ID数组。 + HpcClusterIds []*string `json:"HpcClusterIds,omitempty" name:"HpcClusterIds"` + + // 高性能计算集群名称。 + Name *string `json:"Name,omitempty" name:"Name"` - // 符合查询条件的cdh实例总数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` - // cdh实例详细信息列表 - HostSet []*HostItem `json:"HostSet,omitempty" name:"HostSet"` + // 偏移量, 默认值0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + // 本次请求量, 默认值20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } -func (r *DescribeHostsResponse) ToJsonString() string { +type DescribeHpcClustersRequest struct { + *tchttp.BaseRequest + + // 高性能计算集群ID数组。 + HpcClusterIds []*string `json:"HpcClusterIds,omitempty" name:"HpcClusterIds"` + + // 高性能计算集群名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 偏移量, 默认值0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 本次请求量, 默认值20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeHpcClustersRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeHpcClustersRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "HpcClusterIds") + delete(f, "Name") + delete(f, "Zone") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeHpcClustersRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeHpcClustersResponseParams struct { + // 高性能计算集群信息。 + HpcClusterSet []*HpcClusterInfo `json:"HpcClusterSet,omitempty" name:"HpcClusterSet"` + + // 高性能计算集群总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeHpcClustersResponse struct { + *tchttp.BaseResponse + Response *DescribeHpcClustersResponseParams `json:"Response"` +} + +func (r *DescribeHpcClustersResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeHostsResponse) FromJsonString(s string) error { +func (r *DescribeHpcClustersResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeImageQuotaRequestParams struct { +} + type DescribeImageQuotaRequest struct { *tchttp.BaseRequest } @@ -1316,22 +2382,25 @@ func (r *DescribeImageQuotaRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeImageQuotaRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeImageQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeImageQuotaResponseParams struct { + // 账户的镜像配额 + ImageNumQuota *int64 `json:"ImageNumQuota,omitempty" name:"ImageNumQuota"` - // 账户的镜像配额 - ImageNumQuota *int64 `json:"ImageNumQuota,omitempty" name:"ImageNumQuota"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeImageQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeImageQuotaResponseParams `json:"Response"` } func (r *DescribeImageQuotaResponse) ToJsonString() string { @@ -1345,6 +2414,12 @@ func (r *DescribeImageQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeImageSharePermissionRequestParams struct { + // 需要共享的镜像Id + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` +} + type DescribeImageSharePermissionRequest struct { *tchttp.BaseRequest @@ -1371,16 +2446,18 @@ func (r *DescribeImageSharePermissionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeImageSharePermissionResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeImageSharePermissionResponseParams struct { + // 镜像共享信息 + SharePermissionSet []*SharePermission `json:"SharePermissionSet,omitempty" name:"SharePermissionSet"` - // 镜像共享信息 - SharePermissionSet []*SharePermission `json:"SharePermissionSet,omitempty" name:"SharePermissionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeImageSharePermissionResponse struct { + *tchttp.BaseResponse + Response *DescribeImageSharePermissionResponseParams `json:"Response"` } func (r *DescribeImageSharePermissionResponse) ToJsonString() string { @@ -1394,6 +2471,39 @@ func (r *DescribeImageSharePermissionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeImagesRequestParams struct { + // 镜像ID列表 。镜像ID如:`img-gvbnzy6f`。array型参数的格式可以参考[API简介](https://cloud.tencent.com/document/api/213/15688)。镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 过滤条件,每次请求的`Filters`的上限为10,`Filters.Values`的上限为5。参数不可以同时指定`ImageIds`和`Filters`。详细的过滤条件如下: + // + //
  • image-id
  • + //

    按照【镜像ID】进行过滤。

    类型:String

    必选:否

    + //
  • image-type
  • + //

    按照【镜像类型】进行过滤。

    类型:String

    必选:否

    可选项:

    PRIVATE_IMAGE: 私有镜像 (本账户创建的镜像)

    PUBLIC_IMAGE: 公共镜像 (腾讯云官方镜像)

    SHARED_IMAGE: 共享镜像(其他账户共享给本账户的镜像)

    + //
  • image-name
  • + //

    按照【镜像名称】进行过滤。

    类型:String

    必选:否

    + //
  • platform
  • + //

    按照【镜像平台】进行过滤,如CentOS。

    类型:String

    必选:否

    + //
  • tag-key
  • + //

    按照【标签键】进行过滤。

    类型:String

    必选:否

    + //
  • tag-value
  • + //

    按照【标签值】进行过滤。

    类型:String

    必选:否

    + //
  • tag:tag-key
  • + //

    按照【标签键值对】进行过滤。tag-key使用具体的标签键进行替换。

    类型:String

    必选:否

    + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于Offset详见[API简介](/document/api/213/568#.E8.BE.93.E5.85.A5.E5.8F.82.E6.95.B0.E4.B8.8E.E8.BF.94.E5.9B.9E.E5.8F.82.E6.95.B0.E9.87.8A.E4.B9.89)。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 数量限制,默认为20,最大值为100。关于Limit详见[API简介](/document/api/213/568#.E8.BE.93.E5.85.A5.E5.8F.82.E6.95.B0.E4.B8.8E.E8.BF.94.E5.9B.9E.E5.8F.82.E6.95.B0.E9.87.8A.E4.B9.89)。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 实例类型,如 `S1.SMALL1` + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` +} + type DescribeImagesRequest struct { *tchttp.BaseRequest @@ -1412,6 +2522,8 @@ type DescribeImagesRequest struct { //

    按照【镜像平台】进行过滤,如CentOS。

    类型:String

    必选:否

    //
  • tag-key
  • //

    按照【标签键】进行过滤。

    类型:String

    必选:否

    + //
  • tag-value
  • + //

    按照【标签值】进行过滤。

    类型:String

    必选:否

    //
  • tag:tag-key
  • //

    按照【标签键值对】进行过滤。tag-key使用具体的标签键进行替换。

    类型:String

    必选:否

    Filters []*Filter `json:"Filters,omitempty" name:"Filters"` @@ -1449,19 +2561,21 @@ func (r *DescribeImagesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeImagesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeImagesResponseParams struct { + // 一个关于镜像详细信息的结构体,主要包括镜像的主要状态与属性。 + ImageSet []*Image `json:"ImageSet,omitempty" name:"ImageSet"` - // 一个关于镜像详细信息的结构体,主要包括镜像的主要状态与属性。 - ImageSet []*Image `json:"ImageSet,omitempty" name:"ImageSet"` + // 符合要求的镜像数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合要求的镜像数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeImagesResponse struct { + *tchttp.BaseResponse + Response *DescribeImagesResponseParams `json:"Response"` } func (r *DescribeImagesResponse) ToJsonString() string { @@ -1475,6 +2589,10 @@ func (r *DescribeImagesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeImportImageOsRequestParams struct { +} + type DescribeImportImageOsRequest struct { *tchttp.BaseRequest } @@ -1491,25 +2609,28 @@ func (r *DescribeImportImageOsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeImportImageOsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeImportImageOsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeImportImageOsResponseParams struct { + // 支持的导入镜像的操作系统类型。 + ImportImageOsListSupported *ImageOsList `json:"ImportImageOsListSupported,omitempty" name:"ImportImageOsListSupported"` - // 支持的导入镜像的操作系统类型。 - ImportImageOsListSupported *ImageOsList `json:"ImportImageOsListSupported,omitempty" name:"ImportImageOsListSupported"` + // 支持的导入镜像的操作系统版本。 + ImportImageOsVersionSet []*OsVersion `json:"ImportImageOsVersionSet,omitempty" name:"ImportImageOsVersionSet"` - // 支持的导入镜像的操作系统版本。 - ImportImageOsVersionSet []*OsVersion `json:"ImportImageOsVersionSet,omitempty" name:"ImportImageOsVersionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeImportImageOsResponse struct { + *tchttp.BaseResponse + Response *DescribeImportImageOsResponseParams `json:"Response"` } func (r *DescribeImportImageOsResponse) ToJsonString() string { @@ -1523,6 +2644,10 @@ func (r *DescribeImportImageOsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstanceFamilyConfigsRequestParams struct { +} + type DescribeInstanceFamilyConfigsRequest struct { *tchttp.BaseRequest } @@ -1539,22 +2664,25 @@ func (r *DescribeInstanceFamilyConfigsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeInstanceFamilyConfigsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeInstanceFamilyConfigsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstanceFamilyConfigsResponseParams struct { + // 实例机型组配置的列表信息 + InstanceFamilyConfigSet []*InstanceFamilyConfig `json:"InstanceFamilyConfigSet,omitempty" name:"InstanceFamilyConfigSet"` - // 实例机型组配置的列表信息 - InstanceFamilyConfigSet []*InstanceFamilyConfig `json:"InstanceFamilyConfigSet,omitempty" name:"InstanceFamilyConfigSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstanceFamilyConfigsResponse struct { + *tchttp.BaseResponse + Response *DescribeInstanceFamilyConfigsResponseParams `json:"Response"` } func (r *DescribeInstanceFamilyConfigsResponse) ToJsonString() string { @@ -1568,6 +2696,12 @@ func (r *DescribeInstanceFamilyConfigsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstanceInternetBandwidthConfigsRequestParams struct { + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type DescribeInstanceInternetBandwidthConfigsRequest struct { *tchttp.BaseRequest @@ -1594,16 +2728,18 @@ func (r *DescribeInstanceInternetBandwidthConfigsRequest) FromJsonString(s strin return json.Unmarshal([]byte(s), &r) } -type DescribeInstanceInternetBandwidthConfigsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstanceInternetBandwidthConfigsResponseParams struct { + // 带宽配置信息列表。 + InternetBandwidthConfigSet []*InternetBandwidthConfig `json:"InternetBandwidthConfigSet,omitempty" name:"InternetBandwidthConfigSet"` - // 带宽配置信息列表。 - InternetBandwidthConfigSet []*InternetBandwidthConfig `json:"InternetBandwidthConfigSet,omitempty" name:"InternetBandwidthConfigSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstanceInternetBandwidthConfigsResponse struct { + *tchttp.BaseResponse + Response *DescribeInstanceInternetBandwidthConfigsResponseParams `json:"Response"` } func (r *DescribeInstanceInternetBandwidthConfigsResponse) ToJsonString() string { @@ -1617,13 +2753,27 @@ func (r *DescribeInstanceInternetBandwidthConfigsResponse) FromJsonString(s stri return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstanceTypeConfigsRequestParams struct { + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • instance-family
  • + //

    按照【实例机型系列】进行过滤。实例机型系列形如:S1、I1、M1等。

    类型:String

    必选:否

    + //
  • instance-type
  • + //

    按照【实例类型】进行过滤。实例类型形如:S5.12XLARGE128、S5.12XLARGE96等。

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为1。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeInstanceTypeConfigsRequest struct { *tchttp.BaseRequest //
  • zone
  • //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    //
  • instance-family
  • - //

    按照【实例机型系列】进行过滤。实例机型系列形如:S1、I1、M1等。

    类型:Integer

    必选:否

    + //

    按照【实例机型系列】进行过滤。实例机型系列形如:S1、I1、M1等。

    类型:String

    必选:否

    + //
  • instance-type
  • + //

    按照【实例类型】进行过滤。实例类型形如:S5.12XLARGE128、S5.12XLARGE96等。

    类型:String

    必选:否

    // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为1。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` } @@ -1647,16 +2797,18 @@ func (r *DescribeInstanceTypeConfigsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeInstanceTypeConfigsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstanceTypeConfigsResponseParams struct { + // 实例机型配置列表。 + InstanceTypeConfigSet []*InstanceTypeConfig `json:"InstanceTypeConfigSet,omitempty" name:"InstanceTypeConfigSet"` - // 实例机型配置列表。 - InstanceTypeConfigSet []*InstanceTypeConfig `json:"InstanceTypeConfigSet,omitempty" name:"InstanceTypeConfigSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstanceTypeConfigsResponse struct { + *tchttp.BaseResponse + Response *DescribeInstanceTypeConfigsResponseParams `json:"Response"` } func (r *DescribeInstanceTypeConfigsResponse) ToJsonString() string { @@ -1670,6 +2822,12 @@ func (r *DescribeInstanceTypeConfigsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstanceVncUrlRequestParams struct { + // 一个操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type DescribeInstanceVncUrlRequest struct { *tchttp.BaseRequest @@ -1696,16 +2854,18 @@ func (r *DescribeInstanceVncUrlRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeInstanceVncUrlResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstanceVncUrlResponseParams struct { + // 实例的管理终端地址。 + InstanceVncUrl *string `json:"InstanceVncUrl,omitempty" name:"InstanceVncUrl"` - // 实例的管理终端地址。 - InstanceVncUrl *string `json:"InstanceVncUrl,omitempty" name:"InstanceVncUrl"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstanceVncUrlResponse struct { + *tchttp.BaseResponse + Response *DescribeInstanceVncUrlResponseParams `json:"Response"` } func (r *DescribeInstanceVncUrlResponse) ToJsonString() string { @@ -1719,6 +2879,17 @@ func (r *DescribeInstanceVncUrlResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstancesModificationRequestParams struct { + // 一个或多个待查询的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为20。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + //
  • status
  • + //

    按照【配置规格状态】进行过滤。配置规格状态形如:SELL、UNAVAILABLE。

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为2。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeInstancesModificationRequest struct { *tchttp.BaseRequest @@ -1751,19 +2922,21 @@ func (r *DescribeInstancesModificationRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeInstancesModificationResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstancesModificationResponseParams struct { + // 实例调整的机型配置的数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 实例调整的机型配置的数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 实例支持调整的机型配置列表。 + InstanceTypeConfigStatusSet []*InstanceTypeConfigStatus `json:"InstanceTypeConfigStatusSet,omitempty" name:"InstanceTypeConfigStatusSet"` - // 实例支持调整的机型配置列表。 - InstanceTypeConfigStatusSet []*InstanceTypeConfigStatus `json:"InstanceTypeConfigStatusSet,omitempty" name:"InstanceTypeConfigStatusSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstancesModificationResponse struct { + *tchttp.BaseResponse + Response *DescribeInstancesModificationResponseParams `json:"Response"` } func (r *DescribeInstancesModificationResponse) ToJsonString() string { @@ -1777,6 +2950,16 @@ func (r *DescribeInstancesModificationResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstancesOperationLimitRequestParams struct { + // 按照一个或者多个实例ID查询,可通过[DescribeInstances](https://cloud.tencent.com/document/api/213/15728)API返回值中的InstanceId获取。实例ID形如:ins-xxxxxxxx。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的ids.N一节)。每次请求的实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例操作。 + //
  • INSTANCE_DEGRADE:实例降配操作
  • + Operation *string `json:"Operation,omitempty" name:"Operation"` +} + type DescribeInstancesOperationLimitRequest struct { *tchttp.BaseRequest @@ -1808,16 +2991,18 @@ func (r *DescribeInstancesOperationLimitRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeInstancesOperationLimitResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstancesOperationLimitResponseParams struct { + // 该参数表示调整配置操作(降配)限制次数查询。 + InstanceOperationLimitSet []*OperationCountLimit `json:"InstanceOperationLimitSet,omitempty" name:"InstanceOperationLimitSet"` - // 该参数表示调整配置操作(降配)限制次数查询。 - InstanceOperationLimitSet []*OperationCountLimit `json:"InstanceOperationLimitSet,omitempty" name:"InstanceOperationLimitSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstancesOperationLimitResponse struct { + *tchttp.BaseResponse + Response *DescribeInstancesOperationLimitResponseParams `json:"Response"` } func (r *DescribeInstancesOperationLimitResponse) ToJsonString() string { @@ -1831,47 +3016,34 @@ func (r *DescribeInstancesOperationLimitResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstancesRequestParams struct { + // 按照一个或者多个实例ID查询。实例ID例如:`ins-xxxxxxxx`。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`ids.N`一节)。每次请求的实例的上限为100。参数不支持同时指定`InstanceIds`和`Filters`。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + //
  • zone
  • 按照【可用区】进行过滤。可用区例如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

  • project-id
  • 按照【项目ID】进行过滤,可通过调用[DescribeProjects](https://cloud.tencent.com/document/api/651/78725)查询已创建的项目列表或登录[控制台](https://console.cloud.tencent.com/cvm/index)进行查看;也可以调用[AddProject](https://cloud.tencent.com/document/api/651/81952)创建新的项目。项目ID例如:1002189。

    类型:Integer

    必选:否

  • host-id
  • 按照【[CDH](https://cloud.tencent.com/document/product/416) ID】进行过滤。[CDH](https://cloud.tencent.com/document/product/416) ID例如:host-xxxxxxxx。

    类型:String

    必选:否

  • dedicated-cluster-id
  • 按照【[CDC](https://cloud.tencent.com/document/product/1346) ID】进行过滤。[CDC](https://cloud.tencent.com/document/product/1346) ID例如:cluster-xxxxxxx。

    类型:String

    必选:否

  • vpc-id
  • 按照【VPC ID】进行过滤。VPC ID例如:vpc-xxxxxxxx。

    类型:String

    必选:否

  • subnet-id
  • 按照【子网ID】进行过滤。子网ID例如:subnet-xxxxxxxx。

    类型:String

    必选:否

  • instance-id
  • 按照【实例ID】进行过滤。实例ID例如:ins-xxxxxxxx。

    类型:String

    必选:否

  • uuid
  • 按照【实例UUID】进行过滤。实例UUID例如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。

    类型:String

    必选:否

  • security-group-id
  • 按照【安全组ID】进行过滤。安全组ID例如: sg-8jlk3f3r。

    类型:String

    必选:否

  • instance-name
  • 按照【实例名称】进行过滤。

    类型:String

    必选:否

  • instance-charge-type
  • 按照【实例计费模式】进行过滤。(PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 | CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对[CDH](https://cloud.tencent.com/document/product/416)计费,不对[CDH](https://cloud.tencent.com/document/product/416)上的实例计费。)

    类型:String

    必选:否

  • instance-state
  • 按照【实例状态】进行过滤。状态类型详见[实例状态表](https://cloud.tencent.com/document/api/213/15753#InstanceStatus)

    类型:String

    必选:否

  • private-ip-address
  • 按照【实例主网卡的内网IP】进行过滤。

    类型:String

    必选:否

  • public-ip-address
  • 按照【实例主网卡的公网IP】进行过滤,包含实例创建时自动分配的IP和实例创建后手动绑定的弹性IP。

    类型:String

    必选:否

  • ipv6-address
  • 按照【实例的IPv6地址】进行过滤。

    类型:String

    必选:否

  • tag-key
  • 按照【标签键】进行过滤。

    类型:String

    必选:否

  • tag-value
  • 按照【标签值】进行过滤。

    类型:String

    必选:否

  • tag:tag-key
  • 按照【标签键值对】进行过滤。tag-key使用具体的标签键进行替换。使用请参考示例2。

    类型:String

    必选:否

  • creation-start-time
  • 按照【实例创建起始时间】进行过滤。例如:2023-06-01 00:00:00。 + //

    类型:String

    必选:否

    + //
  • creation-end-time
  • 按照【实例创建截止时间】进行过滤。例如:2023-06-01 00:00:00。 + //

    类型:String

    必选:否

    每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`InstanceIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeInstancesRequest struct { *tchttp.BaseRequest - // 按照一个或者多个实例ID查询。实例ID形如:`ins-xxxxxxxx`。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`ids.N`一节)。每次请求的实例的上限为100。参数不支持同时指定`InstanceIds`和`Filters`。 + // 按照一个或者多个实例ID查询。实例ID例如:`ins-xxxxxxxx`。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`ids.N`一节)。每次请求的实例的上限为100。参数不支持同时指定`InstanceIds`和`Filters`。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - //
  • zone
  • - //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    - //
  • project-id
  • - //

    按照【项目ID】进行过滤,可通过调用[DescribeProject](https://cloud.tencent.com/document/api/378/4400)查询已创建的项目列表或登录[控制台](https://console.cloud.tencent.com/cvm/index)进行查看;也可以调用[AddProject](https://cloud.tencent.com/document/api/378/4398)创建新的项目。项目ID形如:1002189。

    类型:Integer

    必选:否

    - //
  • host-id
  • - //

    按照【[CDH](https://cloud.tencent.com/document/product/416) ID】进行过滤。[CDH](https://cloud.tencent.com/document/product/416) ID形如:host-xxxxxxxx。

    类型:String

    必选:否

    - //
  • vpc-id
  • - //

    按照【VPC ID】进行过滤。VPC ID形如:vpc-xxxxxxxx。

    类型:String

    必选:否

    - //
  • subnet-id
  • - //

    按照【子网ID】进行过滤。子网ID形如:subnet-xxxxxxxx。

    类型:String

    必选:否

    - //
  • instance-id
  • - //

    按照【实例ID】进行过滤。实例ID形如:ins-xxxxxxxx。

    类型:String

    必选:否

    - //
  • uuid
  • - //

    按照【实例UUID】进行过滤。实例UUID形如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。

    类型:String

    必选:否

    - //
  • security-group-id
  • - //

    按照【安全组ID】进行过滤。安全组ID形如: sg-8jlk3f3r。

    类型:String

    必选:否

    - //
  • instance-name
  • - //

    按照【实例名称】进行过滤。

    类型:String

    必选:否

    - //
  • instance-charge-type
  • - //

    按照【实例计费模式】进行过滤。(PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 | CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对[CDH](https://cloud.tencent.com/document/product/416)计费,不对[CDH](https://cloud.tencent.com/document/product/416)上的实例计费。)

    类型:String

    必选:否

    - //
  • instance-state
  • - //

    按照【实例状态】进行过滤。状态类型详见[实例状态表](https://cloud.tencent.com/document/api/213/15753#InstanceStatus)

    类型:String

    必选:否

    - //
  • private-ip-address
  • - //

    按照【实例主网卡的内网IP】进行过滤。

    类型:String

    必选:否

    - //
  • public-ip-address
  • - //

    按照【实例主网卡的公网IP】进行过滤,包含实例创建时自动分配的IP和实例创建后手动绑定的弹性IP。

    类型:String

    必选:否

    - //
  • ipv6-address
  • - //

    按照【实例的IPv6地址】进行过滤。

    类型:String

    必选:否

    - //
  • tag-key
  • - //

    按照【标签键】进行过滤。

    类型:String

    必选:否

    - //
  • tag-value
  • - //

    按照【标签值】进行过滤。

    类型:String

    必选:否

    - //
  • tag:tag-key
  • - //

    按照【标签键值对】进行过滤。tag-key使用具体的标签键进行替换。使用请参考示例2。

    类型:String

    必选:否

    - // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`InstanceIds`和`Filters`。 + //
  • zone
  • 按照【可用区】进行过滤。可用区例如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

  • project-id
  • 按照【项目ID】进行过滤,可通过调用[DescribeProjects](https://cloud.tencent.com/document/api/651/78725)查询已创建的项目列表或登录[控制台](https://console.cloud.tencent.com/cvm/index)进行查看;也可以调用[AddProject](https://cloud.tencent.com/document/api/651/81952)创建新的项目。项目ID例如:1002189。

    类型:Integer

    必选:否

  • host-id
  • 按照【[CDH](https://cloud.tencent.com/document/product/416) ID】进行过滤。[CDH](https://cloud.tencent.com/document/product/416) ID例如:host-xxxxxxxx。

    类型:String

    必选:否

  • dedicated-cluster-id
  • 按照【[CDC](https://cloud.tencent.com/document/product/1346) ID】进行过滤。[CDC](https://cloud.tencent.com/document/product/1346) ID例如:cluster-xxxxxxx。

    类型:String

    必选:否

  • vpc-id
  • 按照【VPC ID】进行过滤。VPC ID例如:vpc-xxxxxxxx。

    类型:String

    必选:否

  • subnet-id
  • 按照【子网ID】进行过滤。子网ID例如:subnet-xxxxxxxx。

    类型:String

    必选:否

  • instance-id
  • 按照【实例ID】进行过滤。实例ID例如:ins-xxxxxxxx。

    类型:String

    必选:否

  • uuid
  • 按照【实例UUID】进行过滤。实例UUID例如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。

    类型:String

    必选:否

  • security-group-id
  • 按照【安全组ID】进行过滤。安全组ID例如: sg-8jlk3f3r。

    类型:String

    必选:否

  • instance-name
  • 按照【实例名称】进行过滤。

    类型:String

    必选:否

  • instance-charge-type
  • 按照【实例计费模式】进行过滤。(PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 | CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对[CDH](https://cloud.tencent.com/document/product/416)计费,不对[CDH](https://cloud.tencent.com/document/product/416)上的实例计费。)

    类型:String

    必选:否

  • instance-state
  • 按照【实例状态】进行过滤。状态类型详见[实例状态表](https://cloud.tencent.com/document/api/213/15753#InstanceStatus)

    类型:String

    必选:否

  • private-ip-address
  • 按照【实例主网卡的内网IP】进行过滤。

    类型:String

    必选:否

  • public-ip-address
  • 按照【实例主网卡的公网IP】进行过滤,包含实例创建时自动分配的IP和实例创建后手动绑定的弹性IP。

    类型:String

    必选:否

  • ipv6-address
  • 按照【实例的IPv6地址】进行过滤。

    类型:String

    必选:否

  • tag-key
  • 按照【标签键】进行过滤。

    类型:String

    必选:否

  • tag-value
  • 按照【标签值】进行过滤。

    类型:String

    必选:否

  • tag:tag-key
  • 按照【标签键值对】进行过滤。tag-key使用具体的标签键进行替换。使用请参考示例2。

    类型:String

    必选:否

  • creation-start-time
  • 按照【实例创建起始时间】进行过滤。例如:2023-06-01 00:00:00。 + //

    类型:String

    必选:否

    + //
  • creation-end-time
  • 按照【实例创建截止时间】进行过滤。例如:2023-06-01 00:00:00。 + //

    类型:String

    必选:否

    每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`InstanceIds`和`Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 @@ -1903,19 +3075,21 @@ func (r *DescribeInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstancesResponseParams struct { + // 符合条件的实例数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 实例详细信息列表。 + InstanceSet []*Instance `json:"InstanceSet,omitempty" name:"InstanceSet"` - // 实例详细信息列表。 - InstanceSet []*Instance `json:"InstanceSet,omitempty" name:"InstanceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeInstancesResponseParams `json:"Response"` } func (r *DescribeInstancesResponse) ToJsonString() string { @@ -1929,6 +3103,18 @@ func (r *DescribeInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInstancesStatusRequestParams struct { + // 按照一个或者多个实例ID查询。实例ID形如:`ins-11112222`。此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`ids.N`一节)。每次请求的实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeInstancesStatusRequest struct { *tchttp.BaseRequest @@ -1963,19 +3149,21 @@ func (r *DescribeInstancesStatusRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeInstancesStatusResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInstancesStatusResponseParams struct { + // 符合条件的实例状态数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例状态数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // [实例状态](https://cloud.tencent.com/document/api/213/15753#InstanceStatus) 列表。 + InstanceStatusSet []*InstanceStatus `json:"InstanceStatusSet,omitempty" name:"InstanceStatusSet"` - // [实例状态](https://cloud.tencent.com/document/api/213/15753#InstanceStatus) 列表。 - InstanceStatusSet []*InstanceStatus `json:"InstanceStatusSet,omitempty" name:"InstanceStatusSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInstancesStatusResponse struct { + *tchttp.BaseResponse + Response *DescribeInstancesStatusResponseParams `json:"Response"` } func (r *DescribeInstancesStatusResponse) ToJsonString() string { @@ -1989,6 +3177,10 @@ func (r *DescribeInstancesStatusResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeInternetChargeTypeConfigsRequestParams struct { +} + type DescribeInternetChargeTypeConfigsRequest struct { *tchttp.BaseRequest } @@ -2005,22 +3197,25 @@ func (r *DescribeInternetChargeTypeConfigsRequest) FromJsonString(s string) erro if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeInternetChargeTypeConfigsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeInternetChargeTypeConfigsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeInternetChargeTypeConfigsResponseParams struct { + // 网络计费类型配置。 + InternetChargeTypeConfigSet []*InternetChargeTypeConfig `json:"InternetChargeTypeConfigSet,omitempty" name:"InternetChargeTypeConfigSet"` - // 网络计费类型配置。 - InternetChargeTypeConfigSet []*InternetChargeTypeConfig `json:"InternetChargeTypeConfigSet,omitempty" name:"InternetChargeTypeConfigSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeInternetChargeTypeConfigsResponse struct { + *tchttp.BaseResponse + Response *DescribeInternetChargeTypeConfigsResponseParams `json:"Response"` } func (r *DescribeInternetChargeTypeConfigsResponse) ToJsonString() string { @@ -2034,6 +3229,27 @@ func (r *DescribeInternetChargeTypeConfigsResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeKeyPairsRequestParams struct { + // 密钥对ID,密钥对ID形如:`skey-11112222`(此接口支持同时传入多个ID进行过滤。此参数的具体格式可参考 API [简介](https://cloud.tencent.com/document/api/213/15688)的 `id.N` 一节)。参数不支持同时指定 `KeyIds` 和 `Filters`。密钥对ID可以通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` + + // 过滤条件。 + //
  • project-id - Integer - 是否必填:否 -(过滤条件)按照项目ID过滤。可以通过[项目列表](https://console.cloud.tencent.com/project)查询项目ID,或者调用接口 [DescribeProject](https://cloud.tencent.com/document/api/378/4400),取返回信息中的projectId获取项目ID。
  • + //
  • key-name - String - 是否必填:否 -(过滤条件)按照密钥对名称过滤。
  • + //
  • tag-key - String - 是否必填:否 -(过滤条件)按照标签键过滤。
  • + //
  • tag-value - String - 是否必填:否 -(过滤条件)按照标签值过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 -(过滤条件)按照标签键值对过滤。tag-key使用具体的标签键进行替换。
  • + // 参数不支持同时指定 `KeyIds` 和 `Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于 `Offset` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。返回数量,默认为20,最大值为100。关于 `Limit` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于 `Limit` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeKeyPairsRequest struct { *tchttp.BaseRequest @@ -2042,7 +3258,11 @@ type DescribeKeyPairsRequest struct { // 过滤条件。 //
  • project-id - Integer - 是否必填:否 -(过滤条件)按照项目ID过滤。可以通过[项目列表](https://console.cloud.tencent.com/project)查询项目ID,或者调用接口 [DescribeProject](https://cloud.tencent.com/document/api/378/4400),取返回信息中的projectId获取项目ID。
  • - //
  • key-name - String - 是否必填:否 -(过滤条件)按照密钥对名称过滤。
  • 参数不支持同时指定 `KeyIds` 和 `Filters`。 + //
  • key-name - String - 是否必填:否 -(过滤条件)按照密钥对名称过滤。
  • + //
  • tag-key - String - 是否必填:否 -(过滤条件)按照标签键过滤。
  • + //
  • tag-value - String - 是否必填:否 -(过滤条件)按照标签值过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 -(过滤条件)按照标签键值对过滤。tag-key使用具体的标签键进行替换。
  • + // 参数不支持同时指定 `KeyIds` 和 `Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。关于 `Offset` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。返回数量,默认为20,最大值为100。关于 `Limit` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 @@ -2074,19 +3294,21 @@ func (r *DescribeKeyPairsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeKeyPairsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeKeyPairsResponseParams struct { + // 符合条件的密钥对数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的密钥对数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 密钥对详细信息列表。 + KeyPairSet []*KeyPair `json:"KeyPairSet,omitempty" name:"KeyPairSet"` - // 密钥对详细信息列表。 - KeyPairSet []*KeyPair `json:"KeyPairSet,omitempty" name:"KeyPairSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeKeyPairsResponse struct { + *tchttp.BaseResponse + Response *DescribeKeyPairsResponseParams `json:"Response"` } func (r *DescribeKeyPairsResponse) ToJsonString() string { @@ -2100,6 +3322,30 @@ func (r *DescribeKeyPairsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeLaunchTemplateVersionsRequestParams struct { + // 启动模板ID。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` + + // 实例启动模板列表。 + LaunchTemplateVersions []*uint64 `json:"LaunchTemplateVersions,omitempty" name:"LaunchTemplateVersions"` + + // 通过范围指定版本时的最小版本号,默认为0。 + MinVersion *uint64 `json:"MinVersion,omitempty" name:"MinVersion"` + + // 过范围指定版本时的最大版本号,默认为30。 + MaxVersion *uint64 `json:"MaxVersion,omitempty" name:"MaxVersion"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 是否查询默认版本。该参数不可与LaunchTemplateVersions同时指定。 + DefaultVersion *bool `json:"DefaultVersion,omitempty" name:"DefaultVersion"` +} + type DescribeLaunchTemplateVersionsRequest struct { *tchttp.BaseRequest @@ -2150,19 +3396,21 @@ func (r *DescribeLaunchTemplateVersionsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeLaunchTemplateVersionsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeLaunchTemplateVersionsResponseParams struct { + // 实例启动模板总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 实例启动模板总数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 实例启动模板版本集合。 + LaunchTemplateVersionSet []*LaunchTemplateVersionInfo `json:"LaunchTemplateVersionSet,omitempty" name:"LaunchTemplateVersionSet"` - // 实例启动模板版本集合。 - LaunchTemplateVersionSet []*LaunchTemplateVersionInfo `json:"LaunchTemplateVersionSet,omitempty" name:"LaunchTemplateVersionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeLaunchTemplateVersionsResponse struct { + *tchttp.BaseResponse + Response *DescribeLaunchTemplateVersionsResponseParams `json:"Response"` } func (r *DescribeLaunchTemplateVersionsResponse) ToJsonString() string { @@ -2176,13 +3424,29 @@ func (r *DescribeLaunchTemplateVersionsResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeLaunchTemplatesRequestParams struct { + // 启动模板ID,一个或者多个启动模板ID。若未指定,则显示用户所有模板。 + LaunchTemplateIds []*string `json:"LaunchTemplateIds,omitempty" name:"LaunchTemplateIds"` + + //

    按照【LaunchTemplateName】进行过滤。

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`LaunchTemplateIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeLaunchTemplatesRequest struct { *tchttp.BaseRequest // 启动模板ID,一个或者多个启动模板ID。若未指定,则显示用户所有模板。 LaunchTemplateIds []*string `json:"LaunchTemplateIds,omitempty" name:"LaunchTemplateIds"` - //

    按照【LaunchTemplateNames】进行过滤。

    类型:String

    必选:否

    + //

    按照【LaunchTemplateName】进行过滤。

    类型:String

    必选:否

    // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`LaunchTemplateIds`和`Filters`。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` @@ -2215,21 +3479,23 @@ func (r *DescribeLaunchTemplatesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeLaunchTemplatesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeLaunchTemplatesResponseParams struct { + // 符合条件的实例模板数量。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例模板数量。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 实例详细信息列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + LaunchTemplateSet []*LaunchTemplateInfo `json:"LaunchTemplateSet,omitempty" name:"LaunchTemplateSet"` - // 实例详细信息列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - LaunchTemplateSet []*LaunchTemplateInfo `json:"LaunchTemplateSet,omitempty" name:"LaunchTemplateSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeLaunchTemplatesResponse struct { + *tchttp.BaseResponse + Response *DescribeLaunchTemplatesResponseParams `json:"Response"` } func (r *DescribeLaunchTemplatesResponse) ToJsonString() string { @@ -2243,6 +3509,10 @@ func (r *DescribeLaunchTemplatesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeRegionsRequestParams struct { +} + type DescribeRegionsRequest struct { *tchttp.BaseRequest } @@ -2259,25 +3529,28 @@ func (r *DescribeRegionsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeRegionsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeRegionsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeRegionsResponseParams struct { + // 地域数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 地域数量 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 地域列表信息。 + RegionSet []*RegionInfo `json:"RegionSet,omitempty" name:"RegionSet"` - // 地域列表信息 - RegionSet []*RegionInfo `json:"RegionSet,omitempty" name:"RegionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeRegionsResponse struct { + *tchttp.BaseResponse + Response *DescribeRegionsResponseParams `json:"Response"` } func (r *DescribeRegionsResponse) ToJsonString() string { @@ -2291,6 +3564,29 @@ func (r *DescribeRegionsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeReservedInstancesConfigInfosRequestParams struct { + // zone + // 按照预留实例计费可购买的可用区进行过滤。形如:ap-guangzhou-1。 + // 类型:String + // 必选:否 + // 可选项:各地域可用区列表 + // + // product-description + // 按照预留实例计费的平台描述(即操作系统)进行过滤。形如:linux。 + // 类型:String + // 必选:否 + // 可选项:linux + // + // duration + // 按照预留实例计费有效期,即预留实例计费购买时长进行过滤。形如:31536000。 + // 类型:Integer + // 计量单位:秒 + // 必选:否 + // 可选项:31536000 (1年) + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeReservedInstancesConfigInfosRequest struct { *tchttp.BaseRequest @@ -2334,16 +3630,18 @@ func (r *DescribeReservedInstancesConfigInfosRequest) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } -type DescribeReservedInstancesConfigInfosResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeReservedInstancesConfigInfosResponseParams struct { + // 预留实例静态配置信息列表。 + ReservedInstanceConfigInfos []*ReservedInstanceConfigInfoItem `json:"ReservedInstanceConfigInfos,omitempty" name:"ReservedInstanceConfigInfos"` - // 预留实例静态配置信息列表。 - ReservedInstanceConfigInfos []*ReservedInstanceConfigInfoItem `json:"ReservedInstanceConfigInfos,omitempty" name:"ReservedInstanceConfigInfos"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeReservedInstancesConfigInfosResponse struct { + *tchttp.BaseResponse + Response *DescribeReservedInstancesConfigInfosResponseParams `json:"Response"` } func (r *DescribeReservedInstancesConfigInfosResponse) ToJsonString() string { @@ -2357,6 +3655,43 @@ func (r *DescribeReservedInstancesConfigInfosResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeReservedInstancesOfferingsRequestParams struct { + // 试运行, 默认为 false。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 以最大有效期作为过滤参数。 + // 计量单位: 秒 + // 默认为 94608000。 + MaxDuration *int64 `json:"MaxDuration,omitempty" name:"MaxDuration"` + + // 以最小有效期作为过滤参数。 + // 计量单位: 秒 + // 默认为 2592000。 + MinDuration *int64 `json:"MinDuration,omitempty" name:"MinDuration"` + + //
  • zone
  • + //

    按照预留实例计费可购买的【可用区】进行过滤。形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • duration
  • + //

    按照预留实例计费【有效期】即预留实例计费购买时长进行过滤。形如:31536000。

    类型:Integer

    计量单位:秒

    必选:否

    可选项:31536000 (1年) | 94608000(3年)

    + //
  • instance-type
  • + //

    按照【预留实例计费类型】进行过滤。形如:S3.MEDIUM4。

    类型:String

    必选:否

    可选项:预留实例计费类型列表

    + //
  • offering-type
  • + //

    按照【付款类型】进行过滤。形如:All Upfront (预付全部费用)。

    类型:String

    必选:否

    可选项:All Upfront (预付全部费用)

    + //
  • product-description
  • + //

    按照预留实例计费的【平台描述】(即操作系统)进行过滤。形如:linux。

    类型:String

    必选:否

    可选项:linux

    + //
  • reserved-instances-offering-id
  • + //

    按照【预留实例计费配置ID】进行过滤。形如:650c138f-ae7e-4750-952a-96841d6e9fc1。

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeReservedInstancesOfferingsRequest struct { *tchttp.BaseRequest @@ -2419,19 +3754,21 @@ func (r *DescribeReservedInstancesOfferingsRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type DescribeReservedInstancesOfferingsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeReservedInstancesOfferingsResponseParams struct { + // 符合条件的预留实例计费数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的预留实例计费数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 符合条件的预留实例计费列表。 + ReservedInstancesOfferingsSet []*ReservedInstancesOffering `json:"ReservedInstancesOfferingsSet,omitempty" name:"ReservedInstancesOfferingsSet"` - // 符合条件的预留实例计费列表。 - ReservedInstancesOfferingsSet []*ReservedInstancesOffering `json:"ReservedInstancesOfferingsSet,omitempty" name:"ReservedInstancesOfferingsSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeReservedInstancesOfferingsResponse struct { + *tchttp.BaseResponse + Response *DescribeReservedInstancesOfferingsResponseParams `json:"Response"` } func (r *DescribeReservedInstancesOfferingsResponse) ToJsonString() string { @@ -2445,6 +3782,38 @@ func (r *DescribeReservedInstancesOfferingsResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeReservedInstancesRequestParams struct { + // 试运行。默认为 false。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + //
  • zone
  • + //

    按照预留实例计费可购买的【可用区】进行过滤。形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • duration
  • + //

    按照预留实例计费【有效期】即预留实例计费购买时长进行过滤。形如:31536000。

    类型:Integer

    计量单位:秒

    必选:否

    可选项:31536000 (1年) | 94608000(3年)

    + //
  • instance-type
  • + //

    按照【预留实例规格】进行过滤。形如:S3.MEDIUM4。

    类型:String

    必选:否

    可选项:预留实例规格列表

    + //
  • instance-family
  • + //

    按照【预留实例类型】进行过滤。形如:S3。

    类型:String

    必选:否

    可选项:预留实例类型列表

    + //
  • offering-type
  • + //
  • offering-type
  • + //

    按照【付款类型】进行过滤。形如:All Upfront (全预付)。

    类型:String

    必选:否

    可选项:All Upfront (全预付) | Partial Upfront (部分预付) | No Upfront (零预付)

    + //
  • product-description
  • + //

    按照预留实例计费的【平台描述】(即操作系统)进行过滤。形如:linux。

    类型:String

    必选:否

    可选项:linux

    + //
  • reserved-instances-id
  • + //

    按照已购买【预留实例计费ID】进行过滤。形如:650c138f-ae7e-4750-952a-96841d6e9fc1。

    类型:String

    必选:否

    + //
  • state
  • + //

    按照已购买【预留实例计费状态】进行过滤。形如:active。

    类型:String

    必选:否

    可选项:active (已创建) | pending (等待被创建) | retired (过期)

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeReservedInstancesRequest struct { *tchttp.BaseRequest @@ -2500,19 +3869,21 @@ func (r *DescribeReservedInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeReservedInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeReservedInstancesResponseParams struct { + // 符合条件的预留实例计费数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的预留实例计费数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 符合条件的预留实例计费列表。 + ReservedInstancesSet []*ReservedInstances `json:"ReservedInstancesSet,omitempty" name:"ReservedInstancesSet"` - // 符合条件的预留实例计费列表。 - ReservedInstancesSet []*ReservedInstances `json:"ReservedInstancesSet,omitempty" name:"ReservedInstancesSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeReservedInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeReservedInstancesResponseParams `json:"Response"` } func (r *DescribeReservedInstancesResponse) ToJsonString() string { @@ -2526,6 +3897,238 @@ func (r *DescribeReservedInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeTaskInfoRequestParams struct { + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 按照指定的产品类型查询,支持取值: + // + // - `CVM`:云服务器 + // - `CDH`:专用宿主机 + // - `CPM2.0`:裸金属云服务器 + // + // 未传入或为空时,默认查询全部产品类型。 + Product *string `json:"Product,omitempty" name:"Product"` + + // 按照一个或多个任务状态ID进行过滤。 + // `TaskStatus`(任务状态ID)与任务状态中文名的对应关系如下: + // + // - `1`:待授权 + // - `2`:处理中 + // - `3`:已结束 + // - `4`:已预约 + // - `5`:已取消 + // - `6`:已避免 + // + // 各任务状态的具体含义,可参考 [任务状态](https://cloud.tencent.com/document/product/213/67789#.E4.BB.BB.E5.8A.A1.E7.8A.B6.E6.80.81)。 + TaskStatus []*int64 `json:"TaskStatus,omitempty" name:"TaskStatus"` + + // 按照一个或多个任务类型ID进行过滤。 + // + // `TaskTypeId`(任务类型ID)与任务类型中文名的对应关系如下: + // + // - `101`:实例运行隐患 + // - `102`:实例运行异常 + // - `103`:实例硬盘异常 + // - `104`:实例网络连接异常 + // - `105`:实例运行预警 + // - `106`:实例硬盘预警 + // - `107`:实例维护升级 + // + // 各任务类型的具体含义,可参考 [维修任务分类](https://cloud.tencent.com/document/product/213/67789#.E7.BB.B4.E4.BF.AE.E4.BB.BB.E5.8A.A1.E5.88.86.E7.B1.BB)。 + TaskTypeIds []*int64 `json:"TaskTypeIds,omitempty" name:"TaskTypeIds"` + + // 按照一个或者多个任务ID查询。任务ID形如:`rep-xxxxxxxx`。 + TaskIds []*string `json:"TaskIds,omitempty" name:"TaskIds"` + + // 按照一个或者多个实例ID查询。实例ID形如:`ins-xxxxxxxx`。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 按照一个或者多个实例名称查询。 + Aliases []*string `json:"Aliases,omitempty" name:"Aliases"` + + // 时间查询区间的起始位置,会根据任务创建时间`CreateTime`进行过滤。未传入时默认为当天`00:00:00`。 + StartDate *string `json:"StartDate,omitempty" name:"StartDate"` + + // 时间查询区间的终止位置,会根据任务创建时间`CreateTime`进行过滤。未传入时默认为当前时刻。 + EndDate *string `json:"EndDate,omitempty" name:"EndDate"` + + // 指定返回维修任务列表的排序字段,目前支持: + // + // - `CreateTime`:任务创建时间 + // - `AuthTime`:任务授权时间 + // - `EndTime`:任务结束时间 + // + // 未传入时或为空时,默认按`CreateTime`字段进行排序。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方式,目前支持: + // + // - `0`:升序(默认) + // - `1`:降序 + // + // 未传入或为空时,默认按升序排序。 + Order *int64 `json:"Order,omitempty" name:"Order"` +} + +type DescribeTaskInfoRequest struct { + *tchttp.BaseRequest + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 按照指定的产品类型查询,支持取值: + // + // - `CVM`:云服务器 + // - `CDH`:专用宿主机 + // - `CPM2.0`:裸金属云服务器 + // + // 未传入或为空时,默认查询全部产品类型。 + Product *string `json:"Product,omitempty" name:"Product"` + + // 按照一个或多个任务状态ID进行过滤。 + // `TaskStatus`(任务状态ID)与任务状态中文名的对应关系如下: + // + // - `1`:待授权 + // - `2`:处理中 + // - `3`:已结束 + // - `4`:已预约 + // - `5`:已取消 + // - `6`:已避免 + // + // 各任务状态的具体含义,可参考 [任务状态](https://cloud.tencent.com/document/product/213/67789#.E4.BB.BB.E5.8A.A1.E7.8A.B6.E6.80.81)。 + TaskStatus []*int64 `json:"TaskStatus,omitempty" name:"TaskStatus"` + + // 按照一个或多个任务类型ID进行过滤。 + // + // `TaskTypeId`(任务类型ID)与任务类型中文名的对应关系如下: + // + // - `101`:实例运行隐患 + // - `102`:实例运行异常 + // - `103`:实例硬盘异常 + // - `104`:实例网络连接异常 + // - `105`:实例运行预警 + // - `106`:实例硬盘预警 + // - `107`:实例维护升级 + // + // 各任务类型的具体含义,可参考 [维修任务分类](https://cloud.tencent.com/document/product/213/67789#.E7.BB.B4.E4.BF.AE.E4.BB.BB.E5.8A.A1.E5.88.86.E7.B1.BB)。 + TaskTypeIds []*int64 `json:"TaskTypeIds,omitempty" name:"TaskTypeIds"` + + // 按照一个或者多个任务ID查询。任务ID形如:`rep-xxxxxxxx`。 + TaskIds []*string `json:"TaskIds,omitempty" name:"TaskIds"` + + // 按照一个或者多个实例ID查询。实例ID形如:`ins-xxxxxxxx`。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 按照一个或者多个实例名称查询。 + Aliases []*string `json:"Aliases,omitempty" name:"Aliases"` + + // 时间查询区间的起始位置,会根据任务创建时间`CreateTime`进行过滤。未传入时默认为当天`00:00:00`。 + StartDate *string `json:"StartDate,omitempty" name:"StartDate"` + + // 时间查询区间的终止位置,会根据任务创建时间`CreateTime`进行过滤。未传入时默认为当前时刻。 + EndDate *string `json:"EndDate,omitempty" name:"EndDate"` + + // 指定返回维修任务列表的排序字段,目前支持: + // + // - `CreateTime`:任务创建时间 + // - `AuthTime`:任务授权时间 + // - `EndTime`:任务结束时间 + // + // 未传入时或为空时,默认按`CreateTime`字段进行排序。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方式,目前支持: + // + // - `0`:升序(默认) + // - `1`:降序 + // + // 未传入或为空时,默认按升序排序。 + Order *int64 `json:"Order,omitempty" name:"Order"` +} + +func (r *DescribeTaskInfoRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTaskInfoRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Limit") + delete(f, "Offset") + delete(f, "Product") + delete(f, "TaskStatus") + delete(f, "TaskTypeIds") + delete(f, "TaskIds") + delete(f, "InstanceIds") + delete(f, "Aliases") + delete(f, "StartDate") + delete(f, "EndDate") + delete(f, "OrderField") + delete(f, "Order") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeTaskInfoRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTaskInfoResponseParams struct { + // 查询返回的维修任务总数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 查询返回的维修任务列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + RepairTaskInfoSet []*RepairTaskInfo `json:"RepairTaskInfoSet,omitempty" name:"RepairTaskInfoSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeTaskInfoResponse struct { + *tchttp.BaseResponse + Response *DescribeTaskInfoResponseParams `json:"Response"` +} + +func (r *DescribeTaskInfoResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTaskInfoResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeZoneInstanceConfigInfosRequestParams struct { + //
  • zone
  • + //

    按照【可用区】进行过滤。可用区形如:ap-guangzhou-1。

    类型:String

    必选:否

    可选项:可用区列表

    + //
  • instance-family
  • + //

    按照【实例机型系列】进行过滤。实例机型系列形如:S1、I1、M1等。

    类型:String

    必选:否

    + //
  • instance-type
  • + //

    按照【实例机型】进行过滤。不同实例机型指定了不同的资源规格,具体取值可通过调用接口 [DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/product/213/15749) 来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则默认机型为S1.SMALL1。

    类型:String

    必选:否

    + //
  • instance-charge-type
  • + //

    按照【实例计费模式】进行过滤。(PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 )

    类型:String

    必选:否

    + //
  • sort-keys
  • + //

    按关键字进行排序,格式为排序字段加排序方式,中间用冒号分隔。 例如: 按cpu数逆序排序 "cpu:desc", 按mem大小顺序排序 "mem:asc"

    类型:String

    必选:否

    + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为100。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeZoneInstanceConfigInfosRequest struct { *tchttp.BaseRequest @@ -2537,6 +4140,8 @@ type DescribeZoneInstanceConfigInfosRequest struct { //

    按照【实例机型】进行过滤。不同实例机型指定了不同的资源规格,具体取值可通过调用接口 [DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/product/213/15749) 来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则默认机型为S1.SMALL1。

    类型:String

    必选:否

    //
  • instance-charge-type
  • //

    按照【实例计费模式】进行过滤。(PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 )

    类型:String

    必选:否

    + //
  • sort-keys
  • + //

    按关键字进行排序,格式为排序字段加排序方式,中间用冒号分隔。 例如: 按cpu数逆序排序 "cpu:desc", 按mem大小顺序排序 "mem:asc"

    类型:String

    必选:否

    // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为100。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` } @@ -2560,16 +4165,18 @@ func (r *DescribeZoneInstanceConfigInfosRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeZoneInstanceConfigInfosResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeZoneInstanceConfigInfosResponseParams struct { + // 可用区机型配置列表。 + InstanceTypeQuotaSet []*InstanceTypeQuotaItem `json:"InstanceTypeQuotaSet,omitempty" name:"InstanceTypeQuotaSet"` - // 可用区机型配置列表。 - InstanceTypeQuotaSet []*InstanceTypeQuotaItem `json:"InstanceTypeQuotaSet,omitempty" name:"InstanceTypeQuotaSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeZoneInstanceConfigInfosResponse struct { + *tchttp.BaseResponse + Response *DescribeZoneInstanceConfigInfosResponseParams `json:"Response"` } func (r *DescribeZoneInstanceConfigInfosResponse) ToJsonString() string { @@ -2583,6 +4190,10 @@ func (r *DescribeZoneInstanceConfigInfosResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeZonesRequestParams struct { +} + type DescribeZonesRequest struct { *tchttp.BaseRequest } @@ -2599,25 +4210,28 @@ func (r *DescribeZonesRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeZonesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeZonesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeZonesResponseParams struct { + // 可用区数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 可用区数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 可用区列表信息。 + ZoneSet []*ZoneInfo `json:"ZoneSet,omitempty" name:"ZoneSet"` - // 可用区列表信息。 - ZoneSet []*ZoneInfo `json:"ZoneSet,omitempty" name:"ZoneSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeZonesResponse struct { + *tchttp.BaseResponse + Response *DescribeZonesResponseParams `json:"Response"` } func (r *DescribeZonesResponse) ToJsonString() string { @@ -2631,6 +4245,18 @@ func (r *DescribeZonesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateInstancesKeyPairsRequestParams struct { + // 一个或多个待操作的实例ID,每次请求批量实例的上限为100。

    可以通过以下方式获取可用的实例ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询实例ID。
  • 通过调用接口 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) ,取返回信息中的 `InstanceId` 获取实例ID。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 密钥对ID列表,每次请求批量密钥对的上限为100。密钥对ID形如:`skey-11112222`。

    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的 `KeyId` 获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再解绑密钥。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机。
  • FALSE:表示在正常关机失败后不进行强制关机。

    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + type DisassociateInstancesKeyPairsRequest struct { *tchttp.BaseRequest @@ -2665,13 +4291,15 @@ func (r *DisassociateInstancesKeyPairsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateInstancesKeyPairsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateInstancesKeyPairsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateInstancesKeyPairsResponseParams `json:"Response"` } func (r *DisassociateInstancesKeyPairsResponse) ToJsonString() string { @@ -2685,6 +4313,15 @@ func (r *DisassociateInstancesKeyPairsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateSecurityGroupsRequestParams struct { + // 要解绑的`安全组ID`,类似sg-efil73jd,只支持解绑单个安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 被解绑的`实例ID`,类似ins-lesecurk,支持指定多个实例 。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type DisassociateSecurityGroupsRequest struct { *tchttp.BaseRequest @@ -2715,13 +4352,15 @@ func (r *DisassociateSecurityGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateSecurityGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateSecurityGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateSecurityGroupsResponseParams `json:"Response"` } func (r *DisassociateSecurityGroupsResponse) ToJsonString() string { @@ -2736,7 +4375,6 @@ func (r *DisassociateSecurityGroupsResponse) FromJsonString(s string) error { } type DisasterRecoverGroup struct { - // 分散置放群组id。 DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` @@ -2762,7 +4400,6 @@ type DisasterRecoverGroup struct { } type DisasterRecoverGroupQuota struct { - // 可创建置放群组数量的上限。 GroupQuota *int64 `json:"GroupQuota,omitempty" name:"GroupQuota"` @@ -2780,19 +4417,119 @@ type DisasterRecoverGroupQuota struct { } type EnhancedService struct { - // 开启云安全服务。若不指定该参数,则默认开启云安全服务。 SecurityService *RunSecurityServiceEnabled `json:"SecurityService,omitempty" name:"SecurityService"` // 开启云监控服务。若不指定该参数,则默认开启云监控服务。 MonitorService *RunMonitorServiceEnabled `json:"MonitorService,omitempty" name:"MonitorService"` - // 开启云自动化助手服务。若不指定该参数,则默认不开启云自动化助手服务。 + // 开启云自动化助手服务(TencentCloud Automation Tools,TAT)。若不指定该参数,则公共镜像默认开启云自动化助手服务,其他镜像默认不开启云自动化助手服务。 AutomationService *RunAutomationServiceEnabled `json:"AutomationService,omitempty" name:"AutomationService"` } -type Externals struct { +// Predefined struct for user +type ExportImagesRequestParams struct { + // COS存储桶名称 + BucketName *string `json:"BucketName,omitempty" name:"BucketName"` + + // 镜像ID列表 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 镜像文件导出格式。取值范围:RAW,QCOW2,VHD,VMDK。默认为RAW + ExportFormat *string `json:"ExportFormat,omitempty" name:"ExportFormat"` + + // 导出文件的名称前缀列表 + FileNamePrefixList []*string `json:"FileNamePrefixList,omitempty" name:"FileNamePrefixList"` + + // 是否只导出系统盘 + OnlyExportRootDisk *bool `json:"OnlyExportRootDisk,omitempty" name:"OnlyExportRootDisk"` + + // 检测镜像是否支持导出 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 角色名称。默认为CVM_QcsRole,发起请求前请确认是否存在该角色,以及是否已正确配置COS写入权限。 + RoleName *string `json:"RoleName,omitempty" name:"RoleName"` +} + +type ExportImagesRequest struct { + *tchttp.BaseRequest + + // COS存储桶名称 + BucketName *string `json:"BucketName,omitempty" name:"BucketName"` + + // 镜像ID列表 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 镜像文件导出格式。取值范围:RAW,QCOW2,VHD,VMDK。默认为RAW + ExportFormat *string `json:"ExportFormat,omitempty" name:"ExportFormat"` + + // 导出文件的名称前缀列表 + FileNamePrefixList []*string `json:"FileNamePrefixList,omitempty" name:"FileNamePrefixList"` + + // 是否只导出系统盘 + OnlyExportRootDisk *bool `json:"OnlyExportRootDisk,omitempty" name:"OnlyExportRootDisk"` + + // 检测镜像是否支持导出 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 角色名称。默认为CVM_QcsRole,发起请求前请确认是否存在该角色,以及是否已正确配置COS写入权限。 + RoleName *string `json:"RoleName,omitempty" name:"RoleName"` +} + +func (r *ExportImagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ExportImagesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "BucketName") + delete(f, "ImageIds") + delete(f, "ExportFormat") + delete(f, "FileNamePrefixList") + delete(f, "OnlyExportRootDisk") + delete(f, "DryRun") + delete(f, "RoleName") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ExportImagesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ExportImagesResponseParams struct { + // 导出镜像任务ID + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 导出镜像的COS文件名列表 + CosPaths []*string `json:"CosPaths,omitempty" name:"CosPaths"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ExportImagesResponse struct { + *tchttp.BaseResponse + Response *ExportImagesResponseParams `json:"Response"` +} + +func (r *ExportImagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ExportImagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} +type Externals struct { // 释放地址 // 注意:此字段可能返回 null,表示取不到有效值。 ReleaseAddress *bool `json:"ReleaseAddress,omitempty" name:"ReleaseAddress"` @@ -2807,7 +4544,6 @@ type Externals struct { } type Filter struct { - // 需要过滤的字段。 Name *string `json:"Name,omitempty" name:"Name"` @@ -2815,42 +4551,55 @@ type Filter struct { Values []*string `json:"Values,omitempty" name:"Values"` } -type HostItem struct { +type GPUInfo struct { + // 实例GPU个数。值小于1代表VGPU类型,大于1代表GPU直通类型。 + // 注意:此字段可能返回 null,表示取不到有效值。 + GPUCount *float64 `json:"GPUCount,omitempty" name:"GPUCount"` + + // 实例GPU地址。 + // 注意:此字段可能返回 null,表示取不到有效值。 + GPUId []*string `json:"GPUId,omitempty" name:"GPUId"` + + // 实例GPU类型。 + // 注意:此字段可能返回 null,表示取不到有效值。 + GPUType *string `json:"GPUType,omitempty" name:"GPUType"` +} - // cdh实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 +type HostItem struct { + // 专用宿主机实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` - // cdh实例id + // 专用宿主机实例ID HostId *string `json:"HostId,omitempty" name:"HostId"` - // cdh实例类型 + // 专用宿主机实例类型 HostType *string `json:"HostType,omitempty" name:"HostType"` - // cdh实例名称 + // 专用宿主机实例名称 HostName *string `json:"HostName,omitempty" name:"HostName"` - // cdh实例付费模式 + // 专用宿主机实例付费模式 HostChargeType *string `json:"HostChargeType,omitempty" name:"HostChargeType"` - // cdh实例自动续费标记 + // 专用宿主机实例自动续费标记 RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` - // cdh实例创建时间 + // 专用宿主机实例创建时间 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - // cdh实例过期时间 + // 专用宿主机实例过期时间 ExpiredTime *string `json:"ExpiredTime,omitempty" name:"ExpiredTime"` - // cdh实例上已创建云子机的实例id列表 + // 专用宿主机实例上已创建云子机的实例id列表 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - // cdh实例状态 + // 专用宿主机实例状态 HostState *string `json:"HostState,omitempty" name:"HostState"` - // cdh实例ip + // 专用宿主机实例IP HostIp *string `json:"HostIp,omitempty" name:"HostIp"` - // cdh实例资源信息 + // 专用宿主机实例资源信息 HostResource *HostResource `json:"HostResource,omitempty" name:"HostResource"` // 专用宿主机所属的围笼ID。该字段仅对金融专区围笼内的专用宿主机有效。 @@ -2858,32 +4607,71 @@ type HostItem struct { CageId *string `json:"CageId,omitempty" name:"CageId"` } -type HostResource struct { +type HostPriceInfo struct { + // 描述了cdh实例相关的价格信息 + HostPrice *ItemPrice `json:"HostPrice,omitempty" name:"HostPrice"` +} - // cdh实例总cpu核数 +type HostResource struct { + // 专用宿主机实例总CPU核数 CpuTotal *uint64 `json:"CpuTotal,omitempty" name:"CpuTotal"` - // cdh实例可用cpu核数 + // 专用宿主机实例可用CPU核数 CpuAvailable *uint64 `json:"CpuAvailable,omitempty" name:"CpuAvailable"` - // cdh实例总内存大小(单位为:GiB) + // 专用宿主机实例总内存大小(单位为:GiB) MemTotal *float64 `json:"MemTotal,omitempty" name:"MemTotal"` - // cdh实例可用内存大小(单位为:GiB) + // 专用宿主机实例可用内存大小(单位为:GiB) MemAvailable *float64 `json:"MemAvailable,omitempty" name:"MemAvailable"` - // cdh实例总磁盘大小(单位为:GiB) + // 专用宿主机实例总磁盘大小(单位为:GiB) DiskTotal *uint64 `json:"DiskTotal,omitempty" name:"DiskTotal"` - // cdh实例可用磁盘大小(单位为:GiB) + // 专用宿主机实例可用磁盘大小(单位为:GiB) DiskAvailable *uint64 `json:"DiskAvailable,omitempty" name:"DiskAvailable"` - // cdh实例磁盘类型 + // 专用宿主机实例磁盘类型 DiskType *string `json:"DiskType,omitempty" name:"DiskType"` + + // 专用宿主机实例总GPU卡数 + GpuTotal *uint64 `json:"GpuTotal,omitempty" name:"GpuTotal"` + + // 专用宿主机实例可用GPU卡数 + GpuAvailable *uint64 `json:"GpuAvailable,omitempty" name:"GpuAvailable"` } -type Image struct { +type HpcClusterInfo struct { + // 高性能计算集群ID + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 高性能计算集群名 + // 注意:此字段可能返回 null,表示取不到有效值。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 高性能计算集群备注 + // 注意:此字段可能返回 null,表示取不到有效值。 + Remark *string `json:"Remark,omitempty" name:"Remark"` + + // 集群下设备容量 + CvmQuotaTotal *uint64 `json:"CvmQuotaTotal,omitempty" name:"CvmQuotaTotal"` + // 集群所在可用区 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 集群当前已有设备量 + CurrentNum *uint64 `json:"CurrentNum,omitempty" name:"CurrentNum"` + + // 集群创建时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 集群内实例ID列表 + // 注意:此字段可能返回 null,表示取不到有效值。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + +type Image struct { // 镜像ID ImageId *string `json:"ImageId,omitempty" name:"ImageId"` @@ -2918,7 +4706,7 @@ type Image struct { // IMPORTFAILED-导入失败 ImageState *string `json:"ImageState,omitempty" name:"ImageState"` - // 镜像来源平台 + // 镜像来源平台,包括如TencentOS、 CentOS、 Windows、 Ubuntu、 Debian、Fedora等。 Platform *string `json:"Platform,omitempty" name:"Platform"` // 镜像创建者 @@ -2938,21 +4726,26 @@ type Image struct { // 镜像关联的快照信息 // 注意:此字段可能返回 null,表示取不到有效值。 SnapshotSet []*Snapshot `json:"SnapshotSet,omitempty" name:"SnapshotSet"` + + // 镜像关联的标签列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 镜像许可类型 + LicenseType *string `json:"LicenseType,omitempty" name:"LicenseType"` } type ImageOsList struct { - - // 支持的windows操作系统。 + // 支持的Windows操作系统。 // 注意:此字段可能返回 null,表示取不到有效值。 Windows []*string `json:"Windows,omitempty" name:"Windows"` - // 支持的linux操作系统 + // 支持的Linux操作系统 // 注意:此字段可能返回 null,表示取不到有效值。 Linux []*string `json:"Linux,omitempty" name:"Linux"` } type ImageQuota struct { - // 已使用配额 UsedQuota *uint64 `json:"UsedQuota,omitempty" name:"UsedQuota"` @@ -2960,6 +4753,45 @@ type ImageQuota struct { TotalQuota *uint64 `json:"TotalQuota,omitempty" name:"TotalQuota"` } +// Predefined struct for user +type ImportImageRequestParams struct { + // 导入镜像的操作系统架构,`x86_64` 或 `i386` + Architecture *string `json:"Architecture,omitempty" name:"Architecture"` + + // 导入镜像的操作系统类型,通过`DescribeImportImageOs`获取 + OsType *string `json:"OsType,omitempty" name:"OsType"` + + // 导入镜像的操作系统版本,通过`DescribeImportImageOs`获取 + OsVersion *string `json:"OsVersion,omitempty" name:"OsVersion"` + + // 导入镜像存放的cos地址 + ImageUrl *string `json:"ImageUrl,omitempty" name:"ImageUrl"` + + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 只检查参数,不执行任务 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 是否强制导入,参考[强制导入镜像](https://cloud.tencent.com/document/product/213/12849) + Force *bool `json:"Force,omitempty" name:"Force"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到自定义镜像。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 导入镜像后,激活操作系统采用的许可证类型。 + // 可选项: + // TencentCloud: 腾讯云官方许可 + // BYOL: 自带许可(Bring Your Own License) + LicenseType *string `json:"LicenseType,omitempty" name:"LicenseType"` + + // 启动模式 + BootMode *string `json:"BootMode,omitempty" name:"BootMode"` +} + type ImportImageRequest struct { *tchttp.BaseRequest @@ -2989,6 +4821,15 @@ type ImportImageRequest struct { // 标签描述列表。通过指定该参数可以同时绑定标签到自定义镜像。 TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 导入镜像后,激活操作系统采用的许可证类型。 + // 可选项: + // TencentCloud: 腾讯云官方许可 + // BYOL: 自带许可(Bring Your Own License) + LicenseType *string `json:"LicenseType,omitempty" name:"LicenseType"` + + // 启动模式 + BootMode *string `json:"BootMode,omitempty" name:"BootMode"` } func (r *ImportImageRequest) ToJsonString() string { @@ -3012,19 +4853,23 @@ func (r *ImportImageRequest) FromJsonString(s string) error { delete(f, "DryRun") delete(f, "Force") delete(f, "TagSpecification") + delete(f, "LicenseType") + delete(f, "BootMode") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ImportImageRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ImportImageResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ImportImageResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ImportImageResponseParams `json:"Response"` } func (r *ImportImageResponse) ToJsonString() string { @@ -3038,6 +4883,23 @@ func (r *ImportImageResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ImportKeyPairRequestParams struct { + // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对创建后所属的[项目](https://cloud.tencent.com/document/product/378/10861)ID。

    可以通过以下方式获取项目ID:
  • 通过[项目列表](https://console.cloud.tencent.com/project)查询项目ID。
  • 通过调用接口 [DescribeProject](https://cloud.tencent.com/document/api/378/4400),取返回信息中的 `projectId ` 获取项目ID。 + // + // 如果是默认项目,直接填0就可以。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 密钥对的公钥内容,`OpenSSH RSA` 格式。 + PublicKey *string `json:"PublicKey,omitempty" name:"PublicKey"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到密钥对。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` +} + type ImportKeyPairRequest struct { *tchttp.BaseRequest @@ -3051,6 +4913,9 @@ type ImportKeyPairRequest struct { // 密钥对的公钥内容,`OpenSSH RSA` 格式。 PublicKey *string `json:"PublicKey,omitempty" name:"PublicKey"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到密钥对。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` } func (r *ImportKeyPairRequest) ToJsonString() string { @@ -3068,22 +4933,25 @@ func (r *ImportKeyPairRequest) FromJsonString(s string) error { delete(f, "KeyName") delete(f, "ProjectId") delete(f, "PublicKey") + delete(f, "TagSpecification") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ImportKeyPairRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type ImportKeyPairResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ImportKeyPairResponseParams struct { + // 密钥对ID。 + KeyId *string `json:"KeyId,omitempty" name:"KeyId"` - // 密钥对ID。 - KeyId *string `json:"KeyId,omitempty" name:"KeyId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ImportKeyPairResponse struct { + *tchttp.BaseResponse + Response *ImportKeyPairResponseParams `json:"Response"` } func (r *ImportKeyPairResponse) ToJsonString() string { @@ -3097,6 +4965,24 @@ func (r *ImportKeyPairResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquirePricePurchaseReservedInstancesOfferingRequestParams struct { + // 购买预留实例计费数量 + InstanceCount *uint64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 预留实例计费配置ID + ReservedInstancesOfferingId *string `json:"ReservedInstancesOfferingId,omitempty" name:"ReservedInstancesOfferingId"` + + // 试运行 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 预留实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 最多支持60个字符(包含模式串)。
  • + ReservedInstanceName *string `json:"ReservedInstanceName,omitempty" name:"ReservedInstanceName"` +} + type InquirePricePurchaseReservedInstancesOfferingRequest struct { *tchttp.BaseRequest @@ -3139,16 +5025,18 @@ func (r *InquirePricePurchaseReservedInstancesOfferingRequest) FromJsonString(s return json.Unmarshal([]byte(s), &r) } -type InquirePricePurchaseReservedInstancesOfferingResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquirePricePurchaseReservedInstancesOfferingResponseParams struct { + // 该参数表示对应配置预留实例的价格。 + Price *ReservedInstancePrice `json:"Price,omitempty" name:"Price"` - // 该参数表示对应配置预留实例的价格。 - Price *ReservedInstancePrice `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquirePricePurchaseReservedInstancesOfferingResponse struct { + *tchttp.BaseResponse + Response *InquirePricePurchaseReservedInstancesOfferingResponseParams `json:"Response"` } func (r *InquirePricePurchaseReservedInstancesOfferingResponse) ToJsonString() string { @@ -3162,17 +5050,35 @@ func (r *InquirePricePurchaseReservedInstancesOfferingResponse) FromJsonString(s return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceModifyInstancesChargeTypeRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。
  • POSTPAID_BY_HOUR:后付费,即按量付费。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否同时切换弹性数据云盘计费模式。取值范围:
  • TRUE:表示切换弹性数据云盘计费模式
  • FALSE:表示不切换弹性数据云盘计费模式

    默认取值:FALSE。 + ModifyPortableDataDisk *bool `json:"ModifyPortableDataDisk,omitempty" name:"ModifyPortableDataDisk"` +} + type InquiryPriceModifyInstancesChargeTypeRequest struct { *tchttp.BaseRequest // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。 + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。
  • POSTPAID_BY_HOUR:后付费,即按量付费。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` - // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否同时切换弹性数据云盘计费模式。取值范围:
  • TRUE:表示切换弹性数据云盘计费模式
  • FALSE:表示不切换弹性数据云盘计费模式

    默认取值:FALSE。 + ModifyPortableDataDisk *bool `json:"ModifyPortableDataDisk,omitempty" name:"ModifyPortableDataDisk"` } func (r *InquiryPriceModifyInstancesChargeTypeRequest) ToJsonString() string { @@ -3190,22 +5096,25 @@ func (r *InquiryPriceModifyInstancesChargeTypeRequest) FromJsonString(s string) delete(f, "InstanceIds") delete(f, "InstanceChargeType") delete(f, "InstanceChargePrepaid") + delete(f, "ModifyPortableDataDisk") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "InquiryPriceModifyInstancesChargeTypeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type InquiryPriceModifyInstancesChargeTypeResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceModifyInstancesChargeTypeResponseParams struct { + // 该参数表示对应配置实例转换计费模式的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示对应配置实例转换计费模式的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceModifyInstancesChargeTypeResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceModifyInstancesChargeTypeResponseParams `json:"Response"` } func (r *InquiryPriceModifyInstancesChargeTypeResponse) ToJsonString() string { @@ -3219,6 +5128,92 @@ func (r *InquiryPriceModifyInstancesChargeTypeResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceRenewHostsRequestParams struct { + // 一个或多个待操作的`CDH`实例`ID`。可通过[`DescribeHosts`](https://cloud.tencent.com/document/api/213/16474)接口返回值中的`HostId`获取。每次请求批量实例的上限为100。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` + + // 试运行,测试使用,不执行具体逻辑。取值范围:
  • TRUE:跳过执行逻辑
  • FALSE:执行逻辑

    默认取值:FALSE。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + +type InquiryPriceRenewHostsRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的`CDH`实例`ID`。可通过[`DescribeHosts`](https://cloud.tencent.com/document/api/213/16474)接口返回值中的`HostId`获取。每次请求批量实例的上限为100。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` + + // 试运行,测试使用,不执行具体逻辑。取值范围:
  • TRUE:跳过执行逻辑
  • FALSE:执行逻辑

    默认取值:FALSE。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + +func (r *InquiryPriceRenewHostsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *InquiryPriceRenewHostsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "HostIds") + delete(f, "HostChargePrepaid") + delete(f, "DryRun") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "InquiryPriceRenewHostsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type InquiryPriceRenewHostsResponseParams struct { + // CDH实例续费价格信息 + Price *HostPriceInfo `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type InquiryPriceRenewHostsResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceRenewHostsResponseParams `json:"Response"` +} + +func (r *InquiryPriceRenewHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *InquiryPriceRenewHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type InquiryPriceRenewInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 试运行,测试使用,不执行具体逻辑。取值范围:
  • TRUE:跳过执行逻辑
  • FALSE:执行逻辑

    默认取值:FALSE。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 是否续费弹性数据盘。取值范围:
  • TRUE:表示续费包年包月实例同时续费其挂载的弹性数据盘
  • FALSE:表示续费包年包月实例同时不再续费其挂载的弹性数据盘

    默认取值:TRUE。 + RenewPortableDataDisk *bool `json:"RenewPortableDataDisk,omitempty" name:"RenewPortableDataDisk"` +} + type InquiryPriceRenewInstancesRequest struct { *tchttp.BaseRequest @@ -3257,16 +5252,18 @@ func (r *InquiryPriceRenewInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceRenewInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceRenewInstancesResponseParams struct { + // 该参数表示对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示对应配置实例的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceRenewInstancesResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceRenewInstancesResponseParams `json:"Response"` } func (r *InquiryPriceRenewInstancesResponse) ToJsonString() string { @@ -3280,6 +5277,24 @@ func (r *InquiryPriceRenewInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceResetInstanceRequestParams struct { + // 实例ID。可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 指定有效的[镜像](/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。系统盘为云盘的实例可以通过该参数指定重装后的系统盘大小来实现对系统盘的扩容操作,若不指定则默认系统盘大小保持不变。系统盘大小只支持扩容不支持缩容;重装只支持修改系统盘的大小,不能修改系统盘的类型。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` +} + type InquiryPriceResetInstanceRequest struct { *tchttp.BaseRequest @@ -3322,16 +5337,18 @@ func (r *InquiryPriceResetInstanceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceResetInstanceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceResetInstanceResponseParams struct { + // 该参数表示重装成对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示重装成对应配置实例的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceResetInstanceResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceResetInstanceResponseParams `json:"Response"` } func (r *InquiryPriceResetInstanceResponse) ToJsonString() string { @@ -3345,6 +5362,21 @@ func (r *InquiryPriceResetInstanceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceResetInstancesInternetMaxBandwidthRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。当调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽时,只支持一个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 公网出带宽配置。不同机型带宽上限范围不一致,具体限制详见带宽限制对账表。暂时只支持`InternetMaxBandwidthOut`参数。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 带宽生效的起始时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。起始时间不能早于当前时间。如果起始时间是今天则新设置的带宽立即生效。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 带宽生效的终止时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。新设置的带宽的有效期包含终止时间此日期。终止时间不能晚于包年包月实例的到期时间。实例的到期时间可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`ExpiredTime`获取。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + type InquiryPriceResetInstancesInternetMaxBandwidthRequest struct { *tchttp.BaseRequest @@ -3383,16 +5415,18 @@ func (r *InquiryPriceResetInstancesInternetMaxBandwidthRequest) FromJsonString(s return json.Unmarshal([]byte(s), &r) } -type InquiryPriceResetInstancesInternetMaxBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceResetInstancesInternetMaxBandwidthResponseParams struct { + // 该参数表示带宽调整为对应大小之后的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示带宽调整为对应大小之后的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceResetInstancesInternetMaxBandwidthResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceResetInstancesInternetMaxBandwidthResponseParams `json:"Response"` } func (r *InquiryPriceResetInstancesInternetMaxBandwidthResponse) ToJsonString() string { @@ -3406,6 +5440,15 @@ func (r *InquiryPriceResetInstancesInternetMaxBandwidthResponse) FromJsonString( return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceResetInstancesTypeRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。本接口每次请求批量实例的上限为1。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可参见附表[实例资源规格](https://cloud.tencent.com/document/product/213/11518)对照表,也可以调用查询[实例资源规格列表](https://cloud.tencent.com/document/product/213/15749)接口获得最新的规格表。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` +} + type InquiryPriceResetInstancesTypeRequest struct { *tchttp.BaseRequest @@ -3436,16 +5479,18 @@ func (r *InquiryPriceResetInstancesTypeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceResetInstancesTypeResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceResetInstancesTypeResponseParams struct { + // 该参数表示调整成对应机型实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示调整成对应机型实例的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceResetInstancesTypeResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceResetInstancesTypeResponseParams `json:"Response"` } func (r *InquiryPriceResetInstancesTypeResponse) ToJsonString() string { @@ -3459,6 +5504,18 @@ func (r *InquiryPriceResetInstancesTypeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceResizeInstanceDisksRequestParams struct { + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 待扩容的数据盘配置信息。只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性),且[数据盘类型](https://cloud.tencent.com/document/product/213/15753#DataDisk)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。数据盘容量单位:GB。最小扩容步长:10G。关于数据盘类型的选择请参考硬盘产品简介。可选数据盘类型受到实例类型`InstanceType`限制。另外允许扩容的最大容量也因数据盘类型的不同而有所差异。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + type InquiryPriceResizeInstanceDisksRequest struct { *tchttp.BaseRequest @@ -3493,16 +5550,18 @@ func (r *InquiryPriceResizeInstanceDisksRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type InquiryPriceResizeInstanceDisksResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceResizeInstanceDisksResponseParams struct { + // 该参数表示磁盘扩容成对应配置的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示磁盘扩容成对应配置的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceResizeInstanceDisksResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceResizeInstanceDisksResponseParams `json:"Response"` } func (r *InquiryPriceResizeInstanceDisksResponse) ToJsonString() string { @@ -3516,13 +5575,77 @@ func (r *InquiryPriceResizeInstanceDisksResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceRunInstancesRequestParams struct { + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + // 注:如果您不指定LaunchTemplate参数,则Placement为必选参数。若同时传递Placement和LaunchTemplate,则默认覆盖LaunchTemplate中对应的Placement的值。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + // 注:如果您不指定LaunchTemplate参数,则ImageId为必选参数。若同时传递ImageId和LaunchTemplate,则默认覆盖LaunchTemplate中对应的ImageId的值。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • SPOTPAID:竞价付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例规格](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则默认机型为S1.SMALL1。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定21块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含20块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络IP,那么InstanceCount参数只能为1。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。
  • 最多支持60个字符(包含模式串)。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则默认不绑定安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 30],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云服务器实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 实例的市场相关选项,如竞价实例相关参数 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 高性能计算集群ID。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` +} + type InquiryPriceRunInstancesRequest struct { *tchttp.BaseRequest // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + // 注:如果您不指定LaunchTemplate参数,则Placement为必选参数。若同时传递Placement和LaunchTemplate,则默认覆盖LaunchTemplate中对应的Placement的值。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + // 注:如果您不指定LaunchTemplate参数,则ImageId为必选参数。若同时传递ImageId和LaunchTemplate,则默认覆盖LaunchTemplate中对应的ImageId的值。 ImageId *string `json:"ImageId,omitempty" name:"ImageId"` // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • SPOTPAID:竞价付费
    默认值:POSTPAID_BY_HOUR。 @@ -3564,7 +5687,7 @@ type InquiryPriceRunInstancesRequest struct { // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` - // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 30],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 30],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 HostName *string `json:"HostName,omitempty" name:"HostName"` // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云服务器实例。 @@ -3614,16 +5737,18 @@ func (r *InquiryPriceRunInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceRunInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceRunInstancesResponseParams struct { + // 该参数表示对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 该参数表示对应配置实例的价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceRunInstancesResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceRunInstancesResponseParams `json:"Response"` } func (r *InquiryPriceRunInstancesResponse) ToJsonString() string { @@ -3637,6 +5762,12 @@ func (r *InquiryPriceRunInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceTerminateInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type InquiryPriceTerminateInstancesRequest struct { *tchttp.BaseRequest @@ -3663,16 +5794,18 @@ func (r *InquiryPriceTerminateInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceTerminateInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceTerminateInstancesResponseParams struct { + // 退款详情。 + InstanceRefundsSet []*InstanceRefund `json:"InstanceRefundsSet,omitempty" name:"InstanceRefundsSet"` - // 退款详情。 - InstanceRefundsSet []*InstanceRefund `json:"InstanceRefundsSet,omitempty" name:"InstanceRefundsSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceTerminateInstancesResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceTerminateInstancesResponseParams `json:"Response"` } func (r *InquiryPriceTerminateInstancesResponse) ToJsonString() string { @@ -3687,7 +5820,6 @@ func (r *InquiryPriceTerminateInstancesResponse) FromJsonString(s string) error } type Instance struct { - // 实例所在的位置。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` @@ -3709,7 +5841,7 @@ type Instance struct { // 实例名称。 InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` - // 实例计费模式。取值范围:
  • `PREPAID`:表示预付费,即包年包月
  • `POSTPAID_BY_HOUR`:表示后付费,即按量计费
  • `CDHPAID`:`CDH`付费,即只对`CDH`计费,不对`CDH`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 + // 实例计费模式。取值范围:
  • `PREPAID`:表示预付费,即包年包月
  • `POSTPAID_BY_HOUR`:表示后付费,即按量计费
  • `CDHPAID`:`专用宿主机`付费,即只对`专用宿主机`计费,不对`专用宿主机`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` // 实例系统盘信息。 @@ -3798,22 +5930,46 @@ type Instance struct { // 注意:此字段可能返回 null,表示取不到有效值。 RdmaIpAddresses []*string `json:"RdmaIpAddresses,omitempty" name:"RdmaIpAddresses"` + // 实例所在的专用集群`ID`。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DedicatedClusterId *string `json:"DedicatedClusterId,omitempty" name:"DedicatedClusterId"` + // 实例隔离类型。取值范围:
  • ARREAR:表示欠费隔离
  • EXPIRE:表示到期隔离
  • MANMADE:表示主动退还隔离
  • NOTISOLATED:表示未隔离
  • // 注意:此字段可能返回 null,表示取不到有效值。 IsolatedSource *string `json:"IsolatedSource,omitempty" name:"IsolatedSource"` + + // GPU信息。如果是gpu类型子机,该值会返回GPU信息,如果是其他类型子机则不返回。 + // 注意:此字段可能返回 null,表示取不到有效值。 + GPUInfo *GPUInfo `json:"GPUInfo,omitempty" name:"GPUInfo"` + + // 实例的操作系统许可类型,默认为TencentCloud + LicenseType *string `json:"LicenseType,omitempty" name:"LicenseType"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` + + // 默认登录用户。 + DefaultLoginUser *string `json:"DefaultLoginUser,omitempty" name:"DefaultLoginUser"` + + // 默认登录端口。 + DefaultLoginPort *int64 `json:"DefaultLoginPort,omitempty" name:"DefaultLoginPort"` + + // 实例的最新操作错误信息。 + // 注意:此字段可能返回 null,表示取不到有效值。 + LatestOperationErrorMsg *string `json:"LatestOperationErrorMsg,omitempty" name:"LatestOperationErrorMsg"` } type InstanceChargePrepaid struct { - // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60。 + // 注意:此字段可能返回 null,表示取不到有效值。 Period *int64 `json:"Period,omitempty" name:"Period"` // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    默认取值:NOTIFY_AND_MANUAL_RENEW。若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + // 注意:此字段可能返回 null,表示取不到有效值。 RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` } type InstanceFamilyConfig struct { - // 机型族名称的中文全称。 InstanceFamilyName *string `json:"InstanceFamilyName,omitempty" name:"InstanceFamilyName"` @@ -3822,16 +5978,16 @@ type InstanceFamilyConfig struct { } type InstanceMarketOptionsRequest struct { - // 竞价相关选项 + // 注意:此字段可能返回 null,表示取不到有效值。 SpotOptions *SpotMarketOptions `json:"SpotOptions,omitempty" name:"SpotOptions"` // 市场选项类型,当前只支持取值:spot + // 注意:此字段可能返回 null,表示取不到有效值。 MarketType *string `json:"MarketType,omitempty" name:"MarketType"` } type InstanceRefund struct { - // 实例Id。 // 注意:此字段可能返回 null,表示取不到有效值。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -3846,7 +6002,6 @@ type InstanceRefund struct { } type InstanceStatus struct { - // 实例`ID`。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -3855,7 +6010,6 @@ type InstanceStatus struct { } type InstanceTypeConfig struct { - // 可用区。 Zone *string `json:"Zone,omitempty" name:"Zone"` @@ -3876,10 +6030,12 @@ type InstanceTypeConfig struct { // FPGA核数,单位:核。 FPGA *int64 `json:"FPGA,omitempty" name:"FPGA"` + + // 实例机型映射的物理GPU卡数,单位:卡。vGPU卡型小于1,直通卡型大于等于1。vGPU是通过分片虚拟化技术,将物理GPU卡重新划分,同一块GPU卡经虚拟化分割后可分配至不同的实例使用。直通卡型会将GPU设备直接挂载给实例使用。 + GpuCount *float64 `json:"GpuCount,omitempty" name:"GpuCount"` } type InstanceTypeConfigStatus struct { - // 状态描述 Status *string `json:"Status,omitempty" name:"Status"` @@ -3892,14 +6048,13 @@ type InstanceTypeConfigStatus struct { } type InstanceTypeQuotaItem struct { - // 可用区。 Zone *string `json:"Zone,omitempty" name:"Zone"` // 实例机型。 InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` - // 实例计费模式。取值范围:
  • PREPAID:表示预付费,即包年包月
  • POSTPAID_BY_HOUR:表示后付费,即按量计费
  • CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对CDH计费,不对CDH上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 + // 实例计费模式。取值范围:
  • PREPAID:表示预付费,即包年包月
  • POSTPAID_BY_HOUR:表示后付费,即按量计费
  • CDHPAID:表示[专用宿主机](https://cloud.tencent.com/document/product/416)付费,即只对`专用宿主机`计费,不对`专用宿主机`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` // 网卡类型,例如:25代表25G网卡 @@ -3954,11 +6109,16 @@ type InstanceTypeQuotaItem struct { // 实例备注信息。 Remark *string `json:"Remark,omitempty" name:"Remark"` + + // 实例机型映射的物理GPU卡数,单位:卡。vGPU卡型小于1,直通卡型大于等于1。vGPU是通过分片虚拟化技术,将物理GPU卡重新划分,同一块GPU卡经虚拟化分割后可分配至不同的实例使用。直通卡型会将GPU设备直接挂载给实例使用。 + GpuCount *float64 `json:"GpuCount,omitempty" name:"GpuCount"` + + // 实例的CPU主频信息 + Frequency *string `json:"Frequency,omitempty" name:"Frequency"` } type InternetAccessible struct { - - // 网络计费类型。取值范围:
  • BANDWIDTH_PREPAID:预付费按带宽结算
  • TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
  • BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
  • BANDWIDTH_PACKAGE:带宽包用户
    默认取值:非带宽包用户默认与子机付费类型保持一致。 + // 网络计费类型。取值范围:
  • BANDWIDTH_PREPAID:预付费按带宽结算
  • TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
  • BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
  • BANDWIDTH_PACKAGE:带宽包用户
    默认取值:非带宽包用户默认与子机付费类型保持一致,比如子机付费类型为预付费,网络计费类型默认为预付费;子机付费类型为后付费,网络计费类型默认为后付费。 InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` // 公网出带宽上限,单位:Mbps。默认值:0Mbps。不同机型带宽上限范围不一致,具体限制详见[购买网络带宽](https://cloud.tencent.com/document/product/213/12523)。 @@ -3972,7 +6132,6 @@ type InternetAccessible struct { } type InternetBandwidthConfig struct { - // 开始时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 StartTime *string `json:"StartTime,omitempty" name:"StartTime"` @@ -3984,7 +6143,6 @@ type InternetBandwidthConfig struct { } type InternetChargeTypeConfig struct { - // 网络计费模式。 InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` @@ -3993,7 +6151,6 @@ type InternetChargeTypeConfig struct { } type ItemPrice struct { - // 后续合计费用的原价,后付费模式使用,单位:元。
  • 如返回了其他时间区间项,如UnitPriceSecondStep,则本项代表时间区间在(0, 96)小时;若未返回其他时间区间项,则本项代表全时段,即(0, ∞)小时 // 注意:此字段可能返回 null,表示取不到有效值。 UnitPrice *float64 `json:"UnitPrice,omitempty" name:"UnitPrice"` @@ -4081,7 +6238,6 @@ type ItemPrice struct { } type KeyPair struct { - // 密钥对的`ID`,是密钥对的唯一标识。 KeyId *string `json:"KeyId,omitempty" name:"KeyId"` @@ -4105,10 +6261,13 @@ type KeyPair struct { // 创建时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 密钥关联的标签列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` } type LaunchTemplate struct { - // 实例启动模板ID,通过该参数可使用实例模板中的预设参数创建实例。 LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` @@ -4117,7 +6276,6 @@ type LaunchTemplate struct { } type LaunchTemplateInfo struct { - // 实例启动模版本号。 // 注意:此字段可能返回 null,表示取不到有效值。 LatestVersionNumber *uint64 `json:"LatestVersionNumber,omitempty" name:"LatestVersionNumber"` @@ -4148,7 +6306,6 @@ type LaunchTemplateInfo struct { } type LaunchTemplateVersionData struct { - // 实例所在的位置。 // 注意:此字段可能返回 null,表示取不到有效值。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` @@ -4161,7 +6318,7 @@ type LaunchTemplateVersionData struct { // 注意:此字段可能返回 null,表示取不到有效值。 InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` - // 实例计费模式。取值范围:
  • `PREPAID`:表示预付费,即包年包月
  • `POSTPAID_BY_HOUR`:表示后付费,即按量计费
  • `CDHPAID`:`CDH`付费,即只对`CDH`计费,不对`CDH`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 + // 实例计费模式。取值范围:
  • `PREPAID`:表示预付费,即包年包月
  • `POSTPAID_BY_HOUR`:表示后付费,即按量计费
  • `CDHPAID`:`专用宿主机`付费,即只对`专用宿主机`计费,不对`专用宿主机`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 // 注意:此字段可能返回 null,表示取不到有效值。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` @@ -4213,7 +6370,7 @@ type LaunchTemplateVersionData struct { // 注意:此字段可能返回 null,表示取不到有效值。 UserData *string `json:"UserData,omitempty" name:"UserData"` - // 置放群组id,仅支持指定一个。 + // 置放群组ID,仅支持指定一个。 // 注意:此字段可能返回 null,表示取不到有效值。 DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` @@ -4240,10 +6397,18 @@ type LaunchTemplateVersionData struct { // 标签描述列表。通过指定该参数可以同时绑定标签到相应的云服务器、云硬盘实例。 // 注意:此字段可能返回 null,表示取不到有效值。 TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围: + // + // TRUE:表示开启实例保护,不允许通过api接口删除实例 + // FALSE:表示关闭实例保护,允许通过api接口删除实例 + // + // 默认取值:FALSE。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` } type LaunchTemplateVersionInfo struct { - // 实例启动模板版本号。 // 注意:此字段可能返回 null,表示取不到有效值。 LaunchTemplateVersion *uint64 `json:"LaunchTemplateVersion,omitempty" name:"LaunchTemplateVersion"` @@ -4269,7 +6434,6 @@ type LaunchTemplateVersionInfo struct { } type LocalDiskType struct { - // 本地磁盘类型。 Type *string `json:"Type,omitempty" name:"Type"` @@ -4286,19 +6450,116 @@ type LocalDiskType struct { Required *string `json:"Required,omitempty" name:"Required"` } -type LoginSettings struct { - - // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
  • Linux实例密码必须8到30位,至少包括两项[a-z],[A-Z]、[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
  • Windows实例密码必须12到30位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? /]中的特殊符号。

    若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。 - // 注意:此字段可能返回 null,表示取不到有效值。 - Password *string `json:"Password,omitempty" name:"Password"` - - // 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例;KeyId可通过接口[DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699)获取,密钥与密码不能同时指定,同时Windows操作系统不支持指定密钥。当前仅支持购买的时候指定一个密钥。 - // 注意:此字段可能返回 null,表示取不到有效值。 - KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` +type LoginSettings struct { + // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
  • Linux实例密码必须8到30位,至少包括两项[a-z],[A-Z]、[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
  • Windows实例密码必须12到30位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? /]中的特殊符号。

    若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Password *string `json:"Password,omitempty" name:"Password"` + + // 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例;KeyId可通过接口[DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699)获取,密钥与密码不能同时指定,同时Windows操作系统不支持指定密钥。 + // 注意:此字段可能返回 null,表示取不到有效值。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` + + // 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。取值范围:
  • TRUE:表示保持镜像的登录设置
  • FALSE:表示不保持镜像的登录设置

    默认取值:FALSE。 + // 注意:此字段可能返回 null,表示取不到有效值。 + KeepImageLogin *string `json:"KeepImageLogin,omitempty" name:"KeepImageLogin"` +} + +// Predefined struct for user +type ModifyChcAttributeRequestParams struct { + // CHC物理服务器ID。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + // CHC物理服务器名称 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 服务器类型 + DeviceType *string `json:"DeviceType,omitempty" name:"DeviceType"` + + // 合法字符为字母,数字, 横线和下划线 + BmcUser *string `json:"BmcUser,omitempty" name:"BmcUser"` + + // 密码8-16位字符, 允许数字,字母, 和特殊字符()`~!@#$%^&*-+=_|{}[]:;'<>,.?/ + Password *string `json:"Password,omitempty" name:"Password"` + + // bmc网络的安全组列表 + BmcSecurityGroupIds []*string `json:"BmcSecurityGroupIds,omitempty" name:"BmcSecurityGroupIds"` +} + +type ModifyChcAttributeRequest struct { + *tchttp.BaseRequest + + // CHC物理服务器ID。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + // CHC物理服务器名称 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 服务器类型 + DeviceType *string `json:"DeviceType,omitempty" name:"DeviceType"` + + // 合法字符为字母,数字, 横线和下划线 + BmcUser *string `json:"BmcUser,omitempty" name:"BmcUser"` + + // 密码8-16位字符, 允许数字,字母, 和特殊字符()`~!@#$%^&*-+=_|{}[]:;'<>,.?/ + Password *string `json:"Password,omitempty" name:"Password"` + + // bmc网络的安全组列表 + BmcSecurityGroupIds []*string `json:"BmcSecurityGroupIds,omitempty" name:"BmcSecurityGroupIds"` +} + +func (r *ModifyChcAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyChcAttributeRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ChcIds") + delete(f, "InstanceName") + delete(f, "DeviceType") + delete(f, "BmcUser") + delete(f, "Password") + delete(f, "BmcSecurityGroupIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyChcAttributeRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyChcAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyChcAttributeResponse struct { + *tchttp.BaseResponse + Response *ModifyChcAttributeResponseParams `json:"Response"` +} + +func (r *ModifyChcAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyChcAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyDisasterRecoverGroupAttributeRequestParams struct { + // 分散置放群组ID,可使用[DescribeDisasterRecoverGroups](https://cloud.tencent.com/document/api/213/17810)接口获取。 + DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` - // 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。取值范围:
  • TRUE:表示保持镜像的登录设置
  • FALSE:表示不保持镜像的登录设置

    默认取值:FALSE。 - // 注意:此字段可能返回 null,表示取不到有效值。 - KeepImageLogin *string `json:"KeepImageLogin,omitempty" name:"KeepImageLogin"` + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` } type ModifyDisasterRecoverGroupAttributeRequest struct { @@ -4331,13 +6592,15 @@ func (r *ModifyDisasterRecoverGroupAttributeRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyDisasterRecoverGroupAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyDisasterRecoverGroupAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyDisasterRecoverGroupAttributeResponseParams `json:"Response"` } func (r *ModifyDisasterRecoverGroupAttributeResponse) ToJsonString() string { @@ -4351,6 +6614,21 @@ func (r *ModifyDisasterRecoverGroupAttributeResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyHostsAttributeRequestParams struct { + // 一个或多个待操作的CDH实例ID。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds"` + + // CDH实例显示名称。可任意命名,但不得超过60个字符。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` + + // 项目ID。项目可以使用[AddProject](https://cloud.tencent.com/doc/api/403/4398)接口创建。可通过[`DescribeProject`](https://cloud.tencent.com/document/product/378/4400) API返回值中的`projectId`获取。后续使用[DescribeHosts](https://cloud.tencent.com/document/api/213/16474)接口查询实例时,项目ID可用于过滤结果。 + ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` +} + type ModifyHostsAttributeRequest struct { *tchttp.BaseRequest @@ -4389,13 +6667,15 @@ func (r *ModifyHostsAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyHostsAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyHostsAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyHostsAttributeResponseParams `json:"Response"` } func (r *ModifyHostsAttributeResponse) ToJsonString() string { @@ -4409,13 +6689,93 @@ func (r *ModifyHostsAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyHpcClusterAttributeRequestParams struct { + // 高性能计算集群ID。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 高性能计算集群新名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 高性能计算集群新备注。 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +type ModifyHpcClusterAttributeRequest struct { + *tchttp.BaseRequest + + // 高性能计算集群ID。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 高性能计算集群新名称。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 高性能计算集群新备注。 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +func (r *ModifyHpcClusterAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyHpcClusterAttributeRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "HpcClusterId") + delete(f, "Name") + delete(f, "Remark") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyHpcClusterAttributeRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyHpcClusterAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyHpcClusterAttributeResponse struct { + *tchttp.BaseResponse + Response *ModifyHpcClusterAttributeResponseParams `json:"Response"` +} + +func (r *ModifyHpcClusterAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyHpcClusterAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyImageAttributeRequestParams struct { + // 镜像ID,形如`img-gvbnzy6f`。镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 设置新的镜像名称;必须满足下列限制:
  • 不得超过60个字符。
  • 镜像名称不能与已有镜像重复。 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 设置新的镜像描述;必须满足下列限制:
  • 不得超过60个字符。 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` +} + type ModifyImageAttributeRequest struct { *tchttp.BaseRequest // 镜像ID,形如`img-gvbnzy6f`。镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。 ImageId *string `json:"ImageId,omitempty" name:"ImageId"` - // 设置新的镜像名称;必须满足下列限制:
  • 不得超过20个字符。
  • 镜像名称不能与已有镜像重复。 + // 设置新的镜像名称;必须满足下列限制:
  • 不得超过60个字符。
  • 镜像名称不能与已有镜像重复。 ImageName *string `json:"ImageName,omitempty" name:"ImageName"` // 设置新的镜像描述;必须满足下列限制:
  • 不得超过60个字符。 @@ -4443,13 +6803,15 @@ func (r *ModifyImageAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyImageAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyImageAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyImageAttributeResponseParams `json:"Response"` } func (r *ModifyImageAttributeResponse) ToJsonString() string { @@ -4463,6 +6825,18 @@ func (r *ModifyImageAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyImageSharePermissionRequestParams struct { + // 镜像ID,形如`img-gvbnzy6f`。镜像Id可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。
    镜像ID必须指定为状态为`NORMAL`的镜像。镜像状态请参考[镜像数据表](https://cloud.tencent.com/document/product/213/15753#Image)。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 接收分享镜像的账号Id列表,array型参数的格式可以参考[API简介](/document/api/213/568)。帐号ID不同于QQ号,查询用户帐号ID请查看[帐号信息](https://console.cloud.tencent.com/developer)中的帐号ID栏。 + AccountIds []*string `json:"AccountIds,omitempty" name:"AccountIds"` + + // 操作,包括 `SHARE`,`CANCEL`。其中`SHARE`代表分享操作,`CANCEL`代表取消分享操作。 + Permission *string `json:"Permission,omitempty" name:"Permission"` +} + type ModifyImageSharePermissionRequest struct { *tchttp.BaseRequest @@ -4497,13 +6871,15 @@ func (r *ModifyImageSharePermissionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyImageSharePermissionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyImageSharePermissionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyImageSharePermissionResponseParams `json:"Response"` } func (r *ModifyImageSharePermissionResponse) ToJsonString() string { @@ -4517,6 +6893,18 @@ func (r *ModifyImageSharePermissionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstanceDiskTypeRequestParams struct { + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 实例数据盘配置信息,只需要指定要转换的目标云硬盘的介质类型,指定DiskType的值,当前只支持一个数据盘转化。只支持CDHPAID类型实例指定CdcId参数。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 实例系统盘配置信息,只需要指定要转换的目标云硬盘的介质类型,指定DiskType的值。只支持CDHPAID类型实例指定CdcId参数。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` +} + type ModifyInstanceDiskTypeRequest struct { *tchttp.BaseRequest @@ -4551,13 +6939,15 @@ func (r *ModifyInstanceDiskTypeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstanceDiskTypeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstanceDiskTypeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstanceDiskTypeResponseParams `json:"Response"` } func (r *ModifyInstanceDiskTypeResponse) ToJsonString() string { @@ -4571,6 +6961,33 @@ func (r *ModifyInstanceDiskTypeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesAttributeRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例名称。可任意命名,但不得超过60个字符。 + // 必须指定InstanceName与SecurityGroups的其中一个,但不能同时设置 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 指定实例的安全组Id列表,子机将重新关联指定列表的安全组,原本关联的安全组会被解绑。必须指定SecurityGroups与InstanceName的其中一个,但不能同时设置 + SecurityGroups []*string `json:"SecurityGroups,omitempty" name:"SecurityGroups"` + + // 给实例绑定用户角色,传空值为解绑操作 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 实例的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` + + // 角色类别,与CamRoleName搭配使用,该值可从CAM DescribeRoleList, GetRole接口返回RoleType字段获取,当前只接受user、system和service_linked三种类别。 + // 举例:一般CamRoleName中包含“LinkedRoleIn”(如TKE_QCSLinkedRoleInPrometheusService)时,DescribeRoleList和GetRole返回的RoleType为service_linked,则本参数也需要传递service_linked。 + // 该参数默认值为user,若CameRoleName为非service_linked类型,本参数可不传递。 + CamRoleType *string `json:"CamRoleType,omitempty" name:"CamRoleType"` +} + type ModifyInstancesAttributeRequest struct { *tchttp.BaseRequest @@ -4583,6 +7000,20 @@ type ModifyInstancesAttributeRequest struct { // 指定实例的安全组Id列表,子机将重新关联指定列表的安全组,原本关联的安全组会被解绑。必须指定SecurityGroups与InstanceName的其中一个,但不能同时设置 SecurityGroups []*string `json:"SecurityGroups,omitempty" name:"SecurityGroups"` + + // 给实例绑定用户角色,传空值为解绑操作 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 实例的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` + + // 角色类别,与CamRoleName搭配使用,该值可从CAM DescribeRoleList, GetRole接口返回RoleType字段获取,当前只接受user、system和service_linked三种类别。 + // 举例:一般CamRoleName中包含“LinkedRoleIn”(如TKE_QCSLinkedRoleInPrometheusService)时,DescribeRoleList和GetRole返回的RoleType为service_linked,则本参数也需要传递service_linked。 + // 该参数默认值为user,若CameRoleName为非service_linked类型,本参数可不传递。 + CamRoleType *string `json:"CamRoleType,omitempty" name:"CamRoleType"` } func (r *ModifyInstancesAttributeRequest) ToJsonString() string { @@ -4600,19 +7031,25 @@ func (r *ModifyInstancesAttributeRequest) FromJsonString(s string) error { delete(f, "InstanceIds") delete(f, "InstanceName") delete(f, "SecurityGroups") + delete(f, "CamRoleName") + delete(f, "HostName") + delete(f, "DisableApiTermination") + delete(f, "CamRoleType") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyInstancesAttributeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstancesAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstancesAttributeResponseParams `json:"Response"` } func (r *ModifyInstancesAttributeResponse) ToJsonString() string { @@ -4626,17 +7063,35 @@ func (r *ModifyInstancesAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesChargeTypeRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为30。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。
  • POSTPAID_BY_HOUR:后付费,即按量付费。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否同时切换弹性数据云盘计费模式。取值范围:
  • TRUE:表示切换弹性数据云盘计费模式
  • FALSE:表示不切换弹性数据云盘计费模式

    默认取值:FALSE。 + ModifyPortableDataDisk *bool `json:"ModifyPortableDataDisk,omitempty" name:"ModifyPortableDataDisk"` +} + type ModifyInstancesChargeTypeRequest struct { *tchttp.BaseRequest - // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为30。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。 + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。
  • POSTPAID_BY_HOUR:后付费,即按量付费。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否同时切换弹性数据云盘计费模式。取值范围:
  • TRUE:表示切换弹性数据云盘计费模式
  • FALSE:表示不切换弹性数据云盘计费模式

    默认取值:FALSE。 + ModifyPortableDataDisk *bool `json:"ModifyPortableDataDisk,omitempty" name:"ModifyPortableDataDisk"` } func (r *ModifyInstancesChargeTypeRequest) ToJsonString() string { @@ -4654,19 +7109,22 @@ func (r *ModifyInstancesChargeTypeRequest) FromJsonString(s string) error { delete(f, "InstanceIds") delete(f, "InstanceChargeType") delete(f, "InstanceChargePrepaid") + delete(f, "ModifyPortableDataDisk") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyInstancesChargeTypeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesChargeTypeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstancesChargeTypeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstancesChargeTypeResponseParams `json:"Response"` } func (r *ModifyInstancesChargeTypeResponse) ToJsonString() string { @@ -4680,13 +7138,22 @@ func (r *ModifyInstancesChargeTypeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesProjectRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 项目ID。项目可以使用[AddProject](https://cloud.tencent.com/document/product/651/81952)接口创建。可通过[`DescribeProject`](https://cloud.tencent.com/document/product/378/4400) API返回值中的`projectId`获取。后续使用[DescribeInstances](https://cloud.tencent.com/document/api/213/15728)接口查询实例时,项目ID可用于过滤结果。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` +} + type ModifyInstancesProjectRequest struct { *tchttp.BaseRequest // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - // 项目ID。项目可以使用[AddProject](https://cloud.tencent.com/doc/api/403/4398)接口创建。可通过[`DescribeProject`](https://cloud.tencent.com/document/product/378/4400) API返回值中的`projectId`获取。后续使用[DescribeInstances](https://cloud.tencent.com/document/api/213/15728)接口查询实例时,项目ID可用于过滤结果。 + // 项目ID。项目可以使用[AddProject](https://cloud.tencent.com/document/product/651/81952)接口创建。可通过[`DescribeProject`](https://cloud.tencent.com/document/product/378/4400) API返回值中的`projectId`获取。后续使用[DescribeInstances](https://cloud.tencent.com/document/api/213/15728)接口查询实例时,项目ID可用于过滤结果。 ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` } @@ -4710,13 +7177,15 @@ func (r *ModifyInstancesProjectRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesProjectResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstancesProjectResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstancesProjectResponseParams `json:"Response"` } func (r *ModifyInstancesProjectResponse) ToJsonString() string { @@ -4730,6 +7199,15 @@ func (r *ModifyInstancesProjectResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesRenewFlagRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` +} + type ModifyInstancesRenewFlagRequest struct { *tchttp.BaseRequest @@ -4760,13 +7238,15 @@ func (r *ModifyInstancesRenewFlagRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesRenewFlagResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstancesRenewFlagResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstancesRenewFlagResponseParams `json:"Response"` } func (r *ModifyInstancesRenewFlagResponse) ToJsonString() string { @@ -4780,6 +7260,21 @@ func (r *ModifyInstancesRenewFlagResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesVpcAttributeRequestParams struct { + // 待操作的实例ID数组。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 私有网络相关信息配置,通过该参数指定私有网络的ID,子网ID,私有网络ip等信息。
  • 当指定私有网络ID和子网ID(子网必须在实例所在的可用区)与指定实例所在私有网络不一致时,会将实例迁移至指定的私有网络的子网下。
  • 可通过`PrivateIpAddresses`指定私有网络子网IP,若需指定则所有已指定的实例均需要指定子网IP,此时`InstanceIds`与`PrivateIpAddresses`一一对应。
  • 不指定`PrivateIpAddresses`时随机分配私有网络子网IP。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 是否对运行中的实例选择强制关机。默认为TRUE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` + + // 是否保留主机名。默认为FALSE。 + ReserveHostName *bool `json:"ReserveHostName,omitempty" name:"ReserveHostName"` +} + type ModifyInstancesVpcAttributeRequest struct { *tchttp.BaseRequest @@ -4818,13 +7313,15 @@ func (r *ModifyInstancesVpcAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyInstancesVpcAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyInstancesVpcAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyInstancesVpcAttributeResponseParams `json:"Response"` } func (r *ModifyInstancesVpcAttributeResponse) ToJsonString() string { @@ -4838,6 +7335,18 @@ func (r *ModifyInstancesVpcAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyKeyPairAttributeRequestParams struct { + // 密钥对ID,密钥对ID形如:`skey-xxxxxxxx`。

    可以通过以下方式获取可用的密钥 ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥 ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/9403) ,取返回信息中的 `KeyId` 获取密钥对 ID。 + KeyId *string `json:"KeyId,omitempty" name:"KeyId"` + + // 修改后的密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 修改后的密钥对描述信息。可任意命名,但不得超过60个字符。 + Description *string `json:"Description,omitempty" name:"Description"` +} + type ModifyKeyPairAttributeRequest struct { *tchttp.BaseRequest @@ -4872,13 +7381,15 @@ func (r *ModifyKeyPairAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyKeyPairAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyKeyPairAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyKeyPairAttributeResponseParams `json:"Response"` } func (r *ModifyKeyPairAttributeResponse) ToJsonString() string { @@ -4892,6 +7403,15 @@ func (r *ModifyKeyPairAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLaunchTemplateDefaultVersionRequestParams struct { + // 启动模板ID。 + LaunchTemplateId *string `json:"LaunchTemplateId,omitempty" name:"LaunchTemplateId"` + + // 待设置的默认版本号。 + DefaultVersion *int64 `json:"DefaultVersion,omitempty" name:"DefaultVersion"` +} + type ModifyLaunchTemplateDefaultVersionRequest struct { *tchttp.BaseRequest @@ -4922,13 +7442,15 @@ func (r *ModifyLaunchTemplateDefaultVersionRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLaunchTemplateDefaultVersionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyLaunchTemplateDefaultVersionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyLaunchTemplateDefaultVersionResponseParams `json:"Response"` } func (r *ModifyLaunchTemplateDefaultVersionResponse) ToJsonString() string { @@ -4943,7 +7465,6 @@ func (r *ModifyLaunchTemplateDefaultVersionResponse) FromJsonString(s string) er } type OperationCountLimit struct { - // 实例操作。取值范围:
  • `INSTANCE_DEGRADE`:降配操作
  • `INTERNET_CHARGE_TYPE_CHANGE`:修改网络带宽计费模式 Operation *string `json:"Operation,omitempty" name:"Operation"` @@ -4958,7 +7479,6 @@ type OperationCountLimit struct { } type OsVersion struct { - // 操作系统类型 OsName *string `json:"OsName,omitempty" name:"OsName"` @@ -4970,17 +7490,16 @@ type OsVersion struct { } type Placement struct { - // 实例所属的可用区ID。该参数可以通过调用 [DescribeZones](https://cloud.tencent.com/document/product/213/15707) 的返回值中的Zone字段来获取。 Zone *string `json:"Zone,omitempty" name:"Zone"` - // 实例所属项目ID。该参数可以通过调用 [DescribeProject](/document/api/378/4400) 的返回值中的 projectId 字段来获取。不填为默认项目。 + // 实例所属项目ID。该参数可以通过调用 [DescribeProject](https://cloud.tencent.com/document/api/651/78725) 的返回值中的 projectId 字段来获取。不填为默认项目。 ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` // 实例所属的专用宿主机ID列表,仅用于入参。如果您有购买专用宿主机并且指定了该参数,则您购买的实例就会随机的部署在这些专用宿主机上。 HostIds []*string `json:"HostIds,omitempty" name:"HostIds"` - // 指定母机ip生产子机 + // 指定母机IP生产子机 HostIps []*string `json:"HostIps,omitempty" name:"HostIps"` // 实例所属的专用宿主机ID,仅用于出参。 @@ -4988,7 +7507,6 @@ type Placement struct { } type PostPaidQuota struct { - // 累计已使用配额 UsedQuota *uint64 `json:"UsedQuota,omitempty" name:"UsedQuota"` @@ -5003,7 +7521,6 @@ type PostPaidQuota struct { } type PrePaidQuota struct { - // 当月已使用配额 UsedQuota *uint64 `json:"UsedQuota,omitempty" name:"UsedQuota"` @@ -5021,7 +7538,6 @@ type PrePaidQuota struct { } type Price struct { - // 描述了实例价格。 InstancePrice *ItemPrice `json:"InstancePrice,omitempty" name:"InstancePrice"` @@ -5029,6 +7545,21 @@ type Price struct { BandwidthPrice *ItemPrice `json:"BandwidthPrice,omitempty" name:"BandwidthPrice"` } +// Predefined struct for user +type ProgramFpgaImageRequestParams struct { + // 实例的ID信息。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // FPGA镜像文件的COS URL地址。 + FPGAUrl *string `json:"FPGAUrl,omitempty" name:"FPGAUrl"` + + // 实例上FPGA卡的DBDF号,不填默认烧录FPGA镜像到实例所拥有的所有FPGA卡。 + DBDFs []*string `json:"DBDFs,omitempty" name:"DBDFs"` + + // 试运行,不会执行实际的烧录动作,默认为False。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + type ProgramFpgaImageRequest struct { *tchttp.BaseRequest @@ -5067,13 +7598,15 @@ func (r *ProgramFpgaImageRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ProgramFpgaImageResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ProgramFpgaImageResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ProgramFpgaImageResponseParams `json:"Response"` } func (r *ProgramFpgaImageResponse) ToJsonString() string { @@ -5087,6 +7620,24 @@ func (r *ProgramFpgaImageResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type PurchaseReservedInstancesOfferingRequestParams struct { + // 购买预留实例计费数量 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 预留实例计费配置ID + ReservedInstancesOfferingId *string `json:"ReservedInstancesOfferingId,omitempty" name:"ReservedInstancesOfferingId"` + + // 试运行 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 预留实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 最多支持60个字符(包含模式串)。
  • + ReservedInstanceName *string `json:"ReservedInstanceName,omitempty" name:"ReservedInstanceName"` +} + type PurchaseReservedInstancesOfferingRequest struct { *tchttp.BaseRequest @@ -5129,16 +7680,18 @@ func (r *PurchaseReservedInstancesOfferingRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } -type PurchaseReservedInstancesOfferingResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type PurchaseReservedInstancesOfferingResponseParams struct { + // 已购买预留实例计费ID + ReservedInstanceId *string `json:"ReservedInstanceId,omitempty" name:"ReservedInstanceId"` - // 已购买预留实例计费ID - ReservedInstanceId *string `json:"ReservedInstanceId,omitempty" name:"ReservedInstanceId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type PurchaseReservedInstancesOfferingResponse struct { + *tchttp.BaseResponse + Response *PurchaseReservedInstancesOfferingResponseParams `json:"Response"` } func (r *PurchaseReservedInstancesOfferingResponse) ToJsonString() string { @@ -5152,6 +7705,18 @@ func (r *PurchaseReservedInstancesOfferingResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RebootInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 本参数已弃用,推荐使用StopType,不可以与参数StopType同时使用。表示是否在正常重启失败后选择强制重启实例。取值范围:
  • TRUE:表示在正常重启失败后进行强制重启
  • FALSE:表示在正常重启失败后不进行强制重启

    默认取值:FALSE。 + ForceReboot *bool `json:"ForceReboot,omitempty" name:"ForceReboot"` + + // 关机类型。取值范围:
  • SOFT:表示软关机
  • HARD:表示硬关机
  • SOFT_FIRST:表示优先软关机,失败再执行硬关机

    默认取值:SOFT。 + StopType *string `json:"StopType,omitempty" name:"StopType"` +} + type RebootInstancesRequest struct { *tchttp.BaseRequest @@ -5186,13 +7751,15 @@ func (r *RebootInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RebootInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RebootInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RebootInstancesResponseParams `json:"Response"` } func (r *RebootInstancesResponse) ToJsonString() string { @@ -5207,7 +7774,6 @@ func (r *RebootInstancesResponse) FromJsonString(s string) error { } type RegionInfo struct { - // 地域名称,例如,ap-guangzhou Region *string `json:"Region,omitempty" name:"Region"` @@ -5218,6 +7784,123 @@ type RegionInfo struct { RegionState *string `json:"RegionState,omitempty" name:"RegionState"` } +// Predefined struct for user +type RemoveChcAssistVpcRequestParams struct { + // CHC物理服务器Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +type RemoveChcAssistVpcRequest struct { + *tchttp.BaseRequest + + // CHC物理服务器Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +func (r *RemoveChcAssistVpcRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RemoveChcAssistVpcRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ChcIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RemoveChcAssistVpcRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RemoveChcAssistVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type RemoveChcAssistVpcResponse struct { + *tchttp.BaseResponse + Response *RemoveChcAssistVpcResponseParams `json:"Response"` +} + +func (r *RemoveChcAssistVpcResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RemoveChcAssistVpcResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RemoveChcDeployVpcRequestParams struct { + // CHC物理服务器Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +type RemoveChcDeployVpcRequest struct { + *tchttp.BaseRequest + + // CHC物理服务器Id。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` +} + +func (r *RemoveChcDeployVpcRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RemoveChcDeployVpcRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ChcIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RemoveChcDeployVpcRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RemoveChcDeployVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type RemoveChcDeployVpcResponse struct { + *tchttp.BaseResponse + Response *RemoveChcDeployVpcResponseParams `json:"Response"` +} + +func (r *RemoveChcDeployVpcResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RemoveChcDeployVpcResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RenewHostsRequestParams struct { + // 一个或多个待操作的CDH实例ID。每次请求的CDH实例的上限为100。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` +} + type RenewHostsRequest struct { *tchttp.BaseRequest @@ -5248,13 +7931,15 @@ func (r *RenewHostsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewHostsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RenewHostsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RenewHostsResponseParams `json:"Response"` } func (r *RenewHostsResponse) ToJsonString() string { @@ -5268,6 +7953,19 @@ func (r *RenewHostsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + // 包年包月实例该参数为必传参数。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否续费弹性数据盘。取值范围:
  • TRUE:表示续费包年包月实例同时续费其挂载的弹性数据盘
  • FALSE:表示续费包年包月实例同时不再续费其挂载的弹性数据盘

    默认取值:TRUE。 + RenewPortableDataDisk *bool `json:"RenewPortableDataDisk,omitempty" name:"RenewPortableDataDisk"` +} + type RenewInstancesRequest struct { *tchttp.BaseRequest @@ -5303,13 +8001,15 @@ func (r *RenewInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RenewInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RenewInstancesResponseParams `json:"Response"` } func (r *RenewInstancesResponse) ToJsonString() string { @@ -5323,8 +8023,237 @@ func (r *RenewInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ReservedInstanceConfigInfoItem struct { +// Predefined struct for user +type RepairTaskControlRequestParams struct { + // 待授权任务实例对应的产品类型,支持取值: + // + // - `CVM`:云服务器 + // - `CDH`:专用宿主机 + // - `CPM2.0`:裸金属云服务器 + Product *string `json:"Product,omitempty" name:"Product"` + + // 指定待操作的实例ID列表,仅允许对列表中的实例ID相关的维修任务发起授权。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 维修任务ID。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + + // 操作类型,当前只支持传入`AuthorizeRepair`。 + Operate *string `json:"Operate,omitempty" name:"Operate"` + + // 预约授权时间,形如`2023-01-01 12:00:00`。预约时间需晚于当前时间至少5分钟,且在48小时之内。 + OrderAuthTime *string `json:"OrderAuthTime,omitempty" name:"OrderAuthTime"` + + // 附加的授权处理策略。 + TaskSubMethod *string `json:"TaskSubMethod,omitempty" name:"TaskSubMethod"` +} + +type RepairTaskControlRequest struct { + *tchttp.BaseRequest + + // 待授权任务实例对应的产品类型,支持取值: + // + // - `CVM`:云服务器 + // - `CDH`:专用宿主机 + // - `CPM2.0`:裸金属云服务器 + Product *string `json:"Product,omitempty" name:"Product"` + + // 指定待操作的实例ID列表,仅允许对列表中的实例ID相关的维修任务发起授权。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 维修任务ID。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + + // 操作类型,当前只支持传入`AuthorizeRepair`。 + Operate *string `json:"Operate,omitempty" name:"Operate"` + + // 预约授权时间,形如`2023-01-01 12:00:00`。预约时间需晚于当前时间至少5分钟,且在48小时之内。 + OrderAuthTime *string `json:"OrderAuthTime,omitempty" name:"OrderAuthTime"` + + // 附加的授权处理策略。 + TaskSubMethod *string `json:"TaskSubMethod,omitempty" name:"TaskSubMethod"` +} + +func (r *RepairTaskControlRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RepairTaskControlRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Product") + delete(f, "InstanceIds") + delete(f, "TaskId") + delete(f, "Operate") + delete(f, "OrderAuthTime") + delete(f, "TaskSubMethod") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RepairTaskControlRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RepairTaskControlResponseParams struct { + // 已完成授权的维修任务ID。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type RepairTaskControlResponse struct { + *tchttp.BaseResponse + Response *RepairTaskControlResponseParams `json:"Response"` +} + +func (r *RepairTaskControlResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RepairTaskControlResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RepairTaskInfo struct { + // 维修任务ID + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + + // 实例ID + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 实例名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + Alias *string `json:"Alias,omitempty" name:"Alias"` + + // 任务类型ID,与任务类型中文名的对应关系如下: + // + // - `101`:实例运行隐患 + // - `102`:实例运行异常 + // - `103`:实例硬盘异常 + // - `104`:实例网络连接异常 + // - `105`:实例运行预警 + // - `106`:实例硬盘预警 + // - `107`:实例维护升级 + // + // 各任务类型的具体含义,可参考 [维修任务分类](https://cloud.tencent.com/document/product/213/67789#.E7.BB.B4.E4.BF.AE.E4.BB.BB.E5.8A.A1.E5.88.86.E7.B1.BB)。 + TaskTypeId *uint64 `json:"TaskTypeId,omitempty" name:"TaskTypeId"` + + // 任务类型中文名 + TaskTypeName *string `json:"TaskTypeName,omitempty" name:"TaskTypeName"` + + // 任务状态ID,与任务状态中文名的对应关系如下: + // + // - `1`:待授权 + // - `2`:处理中 + // - `3`:已结束 + // - `4`:已预约 + // - `5`:已取消 + // - `6`:已避免 + // + // 各任务状态的具体含义,可参考 [任务状态](https://cloud.tencent.com/document/product/213/67789#.E4.BB.BB.E5.8A.A1.E7.8A.B6.E6.80.81)。 + TaskStatus *uint64 `json:"TaskStatus,omitempty" name:"TaskStatus"` + + // 设备状态ID,与设备状态中文名的对应关系如下: + // + // - `1`:故障中 + // - `2`:处理中 + // - `3`:正常 + // - `4`:已预约 + // - `5`:已取消 + // - `6`:已避免 + DeviceStatus *uint64 `json:"DeviceStatus,omitempty" name:"DeviceStatus"` + + // 操作状态ID,与操作状态中文名的对应关系如下: + // + // - `1`:未授权 + // - `2`:已授权 + // - `3`:已处理 + // - `4`:已预约 + // - `5`:已取消 + // - `6`:已避免 + OperateStatus *uint64 `json:"OperateStatus,omitempty" name:"OperateStatus"` + + // 任务创建时间 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 任务授权时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + AuthTime *string `json:"AuthTime,omitempty" name:"AuthTime"` + + // 任务结束时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 任务详情 + // 注意:此字段可能返回 null,表示取不到有效值。 + TaskDetail *string `json:"TaskDetail,omitempty" name:"TaskDetail"` + + // 可用区 + // 注意:此字段可能返回 null,表示取不到有效值。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 地域 + // 注意:此字段可能返回 null,表示取不到有效值。 + Region *string `json:"Region,omitempty" name:"Region"` + + // 所在私有网络ID + // 注意:此字段可能返回 null,表示取不到有效值。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 所在私有网络名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + VpcName *string `json:"VpcName,omitempty" name:"VpcName"` + + // 所在子网ID + // 注意:此字段可能返回 null,表示取不到有效值。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 所在子网名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + SubnetName *string `json:"SubnetName,omitempty" name:"SubnetName"` + // 实例公网IP + // 注意:此字段可能返回 null,表示取不到有效值。 + WanIp *string `json:"WanIp,omitempty" name:"WanIp"` + + // 实例内网IP + // 注意:此字段可能返回 null,表示取不到有效值。 + LanIp *string `json:"LanIp,omitempty" name:"LanIp"` + + // 产品类型,支持取值: + // + // - `CVM`:云服务器 + // - `CDH`:专用宿主机 + // - `CPM2.0`:裸金属云服务器 + // 注意:此字段可能返回 null,表示取不到有效值。 + Product *string `json:"Product,omitempty" name:"Product"` + + // 任务子类型 + // 注意:此字段可能返回 null,表示取不到有效值。 + TaskSubType *string `json:"TaskSubType,omitempty" name:"TaskSubType"` + + // 任务授权类型 + AuthType *uint64 `json:"AuthType,omitempty" name:"AuthType"` + + // 授权渠道,支持取值: + // + // - `Waiting_auth`:待授权 + // - `Customer_auth`:客户操作授权 + // - `System_mandatory_auth`:系统默认授权 + // - `Pre_policy_auth`:预置策略授权 + AuthSource *string `json:"AuthSource,omitempty" name:"AuthSource"` +} + +type ReservedInstanceConfigInfoItem struct { // 实例规格。 Type *string `json:"Type,omitempty" name:"Type"` @@ -5339,7 +8268,6 @@ type ReservedInstanceConfigInfoItem struct { } type ReservedInstanceFamilyItem struct { - // 实例族。 InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` @@ -5351,7 +8279,6 @@ type ReservedInstanceFamilyItem struct { } type ReservedInstancePrice struct { - // 预支合计费用的原价,单位:元。 OriginalFixedPrice *float64 `json:"OriginalFixedPrice,omitempty" name:"OriginalFixedPrice"` @@ -5366,7 +8293,6 @@ type ReservedInstancePrice struct { } type ReservedInstancePriceItem struct { - // 付费类型,如:"All Upfront","Partial Upfront","No Upfront" OfferingType *string `json:"OfferingType,omitempty" name:"OfferingType"` @@ -5386,13 +8312,12 @@ type ReservedInstancePriceItem struct { // 计量单位:秒 Duration *uint64 `json:"Duration,omitempty" name:"Duration"` - // 预留实例计费的平台描述(即操作系统)。形如:linux。 - // 返回项: linux 。 + // 预留实例计费的平台描述(即操作系统)。形如:Linux。 + // 返回项: Linux 。 ProductDescription *string `json:"ProductDescription,omitempty" name:"ProductDescription"` } type ReservedInstanceTypeItem struct { - // 实例类型。 InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` @@ -5437,8 +8362,7 @@ type ReservedInstanceTypeItem struct { } type ReservedInstances struct { - - // 已购买的预留实例计费ID。形如:650c138f-ae7e-4750-952a-96841d6e9fc1。 + // (此字段已废弃,建议使用字段:ReservedInstanceId)已购买的预留实例计费ID。形如:ri-rtbh4han。 ReservedInstancesId *string `json:"ReservedInstancesId,omitempty" name:"ReservedInstancesId"` // 预留实例计费的规格。形如:S3.MEDIUM4。 @@ -5481,10 +8405,15 @@ type ReservedInstances struct { // 预留实例计费的类型。形如:S3。 // 返回项:预留实例计费类型列表 InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` + + // 已购买的预留实例计费ID。形如:ri-rtbh4han。 + ReservedInstanceId *string `json:"ReservedInstanceId,omitempty" name:"ReservedInstanceId"` + + // 预留实例显示名称。形如:riname-01 + ReservedInstanceName *string `json:"ReservedInstanceName,omitempty" name:"ReservedInstanceName"` } type ReservedInstancesOffering struct { - // 预留实例计费可购买的可用区。形如:ap-guangzhou-1。 // 返回项:可用区列表 Zone *string `json:"Zone,omitempty" name:"Zone"` @@ -5512,14 +8441,39 @@ type ReservedInstancesOffering struct { // 可购买的预留实例计费配置ID。形如:650c138f-ae7e-4750-952a-96841d6e9fc1。 ReservedInstancesOfferingId *string `json:"ReservedInstancesOfferingId,omitempty" name:"ReservedInstancesOfferingId"` - // 预留实例计费的平台描述(即操作系统)。形如:linux。 - // 返回项: linux 。 - ProductDescription *string `json:"ProductDescription,omitempty" name:"ProductDescription"` + // 预留实例计费的平台描述(即操作系统)。形如:linux。 + // 返回项: linux 。 + ProductDescription *string `json:"ProductDescription,omitempty" name:"ProductDescription"` + + // 扣除预付费之后的使用价格 (按小时计费)。形如:0.0。 + // 目前,因为只支持 All Upfront 付款类型,所以默认为 0元/小时。 + // 计量单位:元/小时,货币单位与 currencyCode 一致,目前支持 USD(美元) + UsagePrice *float64 `json:"UsagePrice,omitempty" name:"UsagePrice"` +} + +// Predefined struct for user +type ResetInstanceRequestParams struct { + // 实例ID。可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + //
    默认取值:默认使用当前镜像。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。系统盘为云盘的实例可以通过该参数指定重装后的系统盘大小来实现对系统盘的扩容操作。系统盘大小只支持扩容不支持缩容;重装只支持修改系统盘的大小,不能修改系统盘的类型。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` - // 扣除预付费之后的使用价格 (按小时计费)。形如:0.0。 - // 目前,因为只支持 All Upfront 付款类型,所以默认为 0元/小时。 - // 计量单位:元/小时,货币单位与 currencyCode 一致,目前支持 USD(美元) - UsagePrice *float64 `json:"UsagePrice,omitempty" name:"UsagePrice"` + // 重装系统时,可以指定修改实例的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` } type ResetInstanceRequest struct { @@ -5541,8 +8495,11 @@ type ResetInstanceRequest struct { // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` - // 重装系统时,可以指定修改实例的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + // 重装系统时,可以指定修改实例的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` } func (r *ResetInstanceRequest) ToJsonString() string { @@ -5563,19 +8520,22 @@ func (r *ResetInstanceRequest) FromJsonString(s string) error { delete(f, "LoginSettings") delete(f, "EnhancedService") delete(f, "HostName") + delete(f, "UserData") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ResetInstanceRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstanceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetInstanceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetInstanceResponseParams `json:"Response"` } func (r *ResetInstanceResponse) ToJsonString() string { @@ -5589,6 +8549,21 @@ func (r *ResetInstanceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesInternetMaxBandwidthRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的 `InstanceId` 获取。 每次请求批量实例的上限为100。当调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽时,只支持一个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 公网出带宽配置。不同机型带宽上限范围不一致,具体限制详见带宽限制对账表。暂时只支持 `InternetMaxBandwidthOut` 参数。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 带宽生效的起始时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。起始时间不能早于当前时间。如果起始时间是今天则新设置的带宽立即生效。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 带宽生效的终止时间。格式: `YYYY-MM-DD` ,例如:`2016-10-30` 。新设置的带宽的有效期包含终止时间此日期。终止时间不能晚于包年包月实例的到期时间。实例的到期时间可通过 [`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`ExpiredTime`获取。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + type ResetInstancesInternetMaxBandwidthRequest struct { *tchttp.BaseRequest @@ -5627,13 +8602,15 @@ func (r *ResetInstancesInternetMaxBandwidthRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesInternetMaxBandwidthResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetInstancesInternetMaxBandwidthResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetInstancesInternetMaxBandwidthResponseParams `json:"Response"` } func (r *ResetInstancesInternetMaxBandwidthResponse) ToJsonString() string { @@ -5647,6 +8624,23 @@ func (r *ResetInstancesInternetMaxBandwidthResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesPasswordRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下: + // Linux 实例密码必须8-30位,推荐使用12位以上密码,不能以“/”开头,至少包含以下字符中的三种不同字符,字符种类:
  • 小写字母:[a-z]
  • 大写字母:[A-Z]
  • 数字:0-9
  • 特殊字符: ()\`\~!@#$%^&\*-+=\_|{}[]:;'<>,.?/ + // Windows 实例密码必须12\~30位,不能以“/”开头且不包括用户名,至少包含以下字符中的三种不同字符
  • 小写字母:[a-z]
  • 大写字母:[A-Z]
  • 数字: 0-9
  • 特殊字符:()\`\~!@#$%^&\*-+=\_|{}[]:;' <>,.?/
  • 如果实例即包含 `Linux` 实例又包含 `Windows` 实例,则密码复杂度限制按照 `Windows` 实例的限制。 + Password *string `json:"Password,omitempty" name:"Password"` + + // 待重置密码的实例操作系统的用户名。不得超过64个字符。 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + type ResetInstancesPasswordRequest struct { *tchttp.BaseRequest @@ -5687,13 +8681,15 @@ func (r *ResetInstancesPasswordRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesPasswordResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetInstancesPasswordResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetInstancesPasswordResponseParams `json:"Response"` } func (r *ResetInstancesPasswordResponse) ToJsonString() string { @@ -5707,6 +8703,18 @@ func (r *ResetInstancesPasswordResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesTypeRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。本接口目前仅支持每次操作1个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可通过调用接口[`DescribeInstanceTypeConfigs`](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + type ResetInstancesTypeRequest struct { *tchttp.BaseRequest @@ -5741,13 +8749,15 @@ func (r *ResetInstancesTypeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetInstancesTypeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetInstancesTypeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetInstancesTypeResponseParams `json:"Response"` } func (r *ResetInstancesTypeResponse) ToJsonString() string { @@ -5761,6 +8771,24 @@ func (r *ResetInstancesTypeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResizeInstanceDisksRequestParams struct { + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 待扩容的数据盘配置信息。只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性),且[数据盘类型](/document/api/213/9452#block_device)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。数据盘容量单位:GB。最小扩容步长:10G。关于数据盘类型的选择请参考[硬盘产品简介](https://cloud.tencent.com/document/product/362/2353)。可选数据盘类型受到实例类型`InstanceType`限制。另外允许扩容的最大容量也因数据盘类型的不同而有所差异。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` + + // 待扩容的系统盘配置信息。只支持扩容云盘。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 扩容云盘的方式是否为在线扩容。 + ResizeOnline *bool `json:"ResizeOnline,omitempty" name:"ResizeOnline"` +} + type ResizeInstanceDisksRequest struct { *tchttp.BaseRequest @@ -5803,13 +8831,15 @@ func (r *ResizeInstanceDisksRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResizeInstanceDisksResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResizeInstanceDisksResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResizeInstanceDisksResponseParams `json:"Response"` } func (r *ResizeInstanceDisksResponse) ToJsonString() string { @@ -5824,11 +8854,104 @@ func (r *ResizeInstanceDisksResponse) FromJsonString(s string) error { } type RunAutomationServiceEnabled struct { - // 是否开启云自动化助手。取值范围:
  • TRUE:表示开启云自动化助手服务
  • FALSE:表示不开启云自动化助手服务

    默认取值:FALSE。 Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` } +// Predefined struct for user +type RunInstancesRequestParams struct { + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • CDHPAID:独享子机(基于专用宿主机创建,宿主机部分的资源不收费)
  • SPOTPAID:竞价付费
  • CDCPAID:专用集群付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 + // 注:如果您不指定LaunchTemplate参数,则Placement为必选参数。若同时传递Placement和LaunchTemplate,则默认覆盖LaunchTemplate中对应的Placement的值。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 实例机型。不同实例机型指定了不同的资源规格。 + //
  • 对于付费模式为PREPAID或POSTPAID\_BY\_HOUR的实例创建,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例规格](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则系统将根据当前地域的资源售卖情况动态指定默认机型。
  • 对于付费模式为CDHPAID的实例创建,该参数以"CDH_"为前缀,根据CPU和内存配置生成,具体形式为:CDH_XCXG,例如对于创建CPU为1核,内存为1G大小的专用宿主机的实例,该参数应该为CDH_1C1G。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,传入InstanceType获取当前机型支持的镜像列表,取返回信息中的`ImageId`字段。
  • + // 注:如果您不指定LaunchTemplate参数,则ImageId为必选参数。若同时传递ImageId和LaunchTemplate,则默认覆盖LaunchTemplate中对应的ImageId的值。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定21块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含20块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若在此参数中指定了私有网络IP,即表示每个实例的主网卡IP;同时,InstanceCount参数必须与私有网络IP的个数一致且不能大于20。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。包年包月实例取值范围:[1,500],按量计费实例取值范围:[1,500]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。
  • 最多支持60个字符(包含模式串)。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认公共镜像开启云监控、云安全服务;自定义镜像与镜像市场镜像默认不开启云监控,云安全服务,而使用镜像里保留的服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 实例主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server{R:3}`,购买1台时,实例主机名为`server3`;购买2台时,实例主机名分别为`server3`,`server4`。支持指定多个模式串`{R:x}`。

  • 购买多台实例,如果不指定模式串,则在实例主机名添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server`,购买2台时,实例主机名分别为`server1`,`server2`。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。 + ActionTimer *ActionTimer `json:"ActionTimer,omitempty" name:"ActionTimer"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的云服务器、云硬盘实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费但没有传递该参数时,默认按当前固定折扣价格出价。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 是否只预检此次请求。 + // true:发送检查请求,不会创建实例。检查项包括是否填写了必需参数,请求格式,业务限制和云服务器库存。 + // 如果检查不通过,则返回对应错误码; + // 如果检查通过,则返回RequestId. + // false(默认):发送正常请求,通过检查后直接创建实例 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // CAM角色名称。可通过[`DescribeRoleList`](https://cloud.tencent.com/document/product/598/13887)接口返回值中的`roleName`获取。 + CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` + + // 高性能计算集群ID。若创建的实例为高性能计算实例,需指定实例放置的集群,否则不可指定。 + HpcClusterId *string `json:"HpcClusterId,omitempty" name:"HpcClusterId"` + + // 实例启动模板。 + LaunchTemplate *LaunchTemplate `json:"LaunchTemplate,omitempty" name:"LaunchTemplate"` + + // 指定专用集群创建。 + DedicatedClusterId *string `json:"DedicatedClusterId,omitempty" name:"DedicatedClusterId"` + + // 指定CHC物理服务器来创建CHC云主机。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` +} + type RunInstancesRequest struct { *tchttp.BaseRequest @@ -5839,8 +8962,7 @@ type RunInstancesRequest struct { InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 - // 注:本数据结构中的Zone为必填参数。 - // 如果您不指定LaunchTemplate参数,则Placement为必选参数。若同时传递该参数和LaunchTemplate,则默认覆盖LaunchTemplate中对应的值。 + // 注:如果您不指定LaunchTemplate参数,则Placement为必选参数。若同时传递Placement和LaunchTemplate,则默认覆盖LaunchTemplate中对应的Placement的值。 Placement *Placement `json:"Placement,omitempty" name:"Placement"` // 实例机型。不同实例机型指定了不同的资源规格。 @@ -5848,7 +8970,7 @@ type RunInstancesRequest struct { InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,传入InstanceType获取当前机型支持的镜像列表,取返回信息中的`ImageId`字段。
  • - // 如果您不指定LaunchTemplate参数,则ImageId为必选参数。若同时传递该参数和LaunchTemplate,则默认覆盖LaunchTemplate中对应的值。 + // 注:如果您不指定LaunchTemplate参数,则ImageId为必选参数。若同时传递ImageId和LaunchTemplate,则默认覆盖LaunchTemplate中对应的ImageId的值。 ImageId *string `json:"ImageId,omitempty" name:"ImageId"` // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 @@ -5857,13 +8979,13 @@ type RunInstancesRequest struct { // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定21块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含20块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` - // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络IP,即表示每个实例的主网卡IP;同时,InstanceCount参数必须与私有网络IP的个数一致且不能大于20。 + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若在此参数中指定了私有网络IP,即表示每个实例的主网卡IP;同时,InstanceCount参数必须与私有网络IP的个数一致且不能大于20。 VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` - // 购买实例数量。包年包月实例取值范围:[1,300],按量计费实例取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + // 购买实例数量。包年包月实例取值范围:[1,500],按量计费实例取值范围:[1,500]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。
  • 最多支持60个字符(包含模式串)。 @@ -5881,7 +9003,7 @@ type RunInstancesRequest struct { // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。 ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` - // 实例主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server{R:3}`,购买1台时,实例主机名为`server3`;购买2台时,实例主机名分别为`server3`,`server4`。支持指定多个模式串`{R:x}`。

  • 购买多台实例,如果不指定模式串,则在实例主机名添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server`,购买2台时,实例主机名分别为`server1`,`server2`。 + // 实例主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:主机名名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:主机名字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server{R:3}`,购买1台时,实例主机名为`server3`;购买2台时,实例主机名分别为`server3`,`server4`。支持指定多个模式串`{R:x}`。

  • 购买多台实例,如果不指定模式串,则在实例主机名添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server`,购买2台时,实例主机名分别为`server1`,`server2`。 HostName *string `json:"HostName,omitempty" name:"HostName"` // 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。 @@ -5914,6 +9036,15 @@ type RunInstancesRequest struct { // 实例启动模板。 LaunchTemplate *LaunchTemplate `json:"LaunchTemplate,omitempty" name:"LaunchTemplate"` + + // 指定专用集群创建。 + DedicatedClusterId *string `json:"DedicatedClusterId,omitempty" name:"DedicatedClusterId"` + + // 指定CHC物理服务器来创建CHC云主机。 + ChcIds []*string `json:"ChcIds,omitempty" name:"ChcIds"` + + // 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
  • TRUE:表示开启实例保护,不允许通过api接口删除实例
  • FALSE:表示关闭实例保护,允许通过api接口删除实例

    默认取值:FALSE。 + DisableApiTermination *bool `json:"DisableApiTermination,omitempty" name:"DisableApiTermination"` } func (r *RunInstancesRequest) ToJsonString() string { @@ -5953,22 +9084,27 @@ func (r *RunInstancesRequest) FromJsonString(s string) error { delete(f, "CamRoleName") delete(f, "HpcClusterId") delete(f, "LaunchTemplate") + delete(f, "DedicatedClusterId") + delete(f, "ChcIds") + delete(f, "DisableApiTermination") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RunInstancesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type RunInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type RunInstancesResponseParams struct { + // 当通过本接口来创建实例时会返回该参数,表示一个或多个实例`ID`。返回实例`ID`列表并不代表实例创建成功,可根据 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口查询返回的InstancesSet中对应实例的`ID`的状态来判断创建是否完成;如果实例状态由“PENDING(创建中)”变为“RUNNING(运行中)”,则为创建成功。 + InstanceIdSet []*string `json:"InstanceIdSet,omitempty" name:"InstanceIdSet"` - // 当通过本接口来创建实例时会返回该参数,表示一个或多个实例`ID`。返回实例`ID`列表并不代表实例创建成功,可根据 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口查询返回的InstancesSet中对应实例的`ID`的状态来判断创建是否完成;如果实例状态由“准备中”变为“正在运行”,则为创建成功。 - InstanceIdSet []*string `json:"InstanceIdSet,omitempty" name:"InstanceIdSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type RunInstancesResponse struct { + *tchttp.BaseResponse + Response *RunInstancesResponseParams `json:"Response"` } func (r *RunInstancesResponse) ToJsonString() string { @@ -5983,19 +9119,16 @@ func (r *RunInstancesResponse) FromJsonString(s string) error { } type RunMonitorServiceEnabled struct { - // 是否开启[云监控](/document/product/248)服务。取值范围:
  • TRUE:表示开启云监控服务
  • FALSE:表示不开启云监控服务

    默认取值:TRUE。 Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` } type RunSecurityServiceEnabled struct { - // 是否开启[云安全](/document/product/296)服务。取值范围:
  • TRUE:表示开启云安全服务
  • FALSE:表示不开启云安全服务

    默认取值:TRUE。 Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` } type SharePermission struct { - // 镜像分享时间 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` @@ -6004,7 +9137,6 @@ type SharePermission struct { } type Snapshot struct { - // 快照Id。 SnapshotId *string `json:"SnapshotId,omitempty" name:"SnapshotId"` @@ -6018,7 +9150,6 @@ type Snapshot struct { } type SpotMarketOptions struct { - // 竞价出价 MaxPrice *string `json:"MaxPrice,omitempty" name:"MaxPrice"` @@ -6027,7 +9158,6 @@ type SpotMarketOptions struct { } type SpotPaidQuota struct { - // 已使用配额,单位:vCPU核心数 UsedQuota *uint64 `json:"UsedQuota,omitempty" name:"UsedQuota"` @@ -6041,6 +9171,12 @@ type SpotPaidQuota struct { Zone *string `json:"Zone,omitempty" name:"Zone"` } +// Predefined struct for user +type StartInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type StartInstancesRequest struct { *tchttp.BaseRequest @@ -6067,13 +9203,15 @@ func (r *StartInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type StartInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type StartInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *StartInstancesResponseParams `json:"Response"` } func (r *StartInstancesResponse) ToJsonString() string { @@ -6087,6 +9225,23 @@ func (r *StartInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type StopInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 本参数已弃用,推荐使用StopType,不可以与参数StopType同时使用。表示是否在正常关闭失败后选择强制关闭实例。取值范围:
  • TRUE:表示在正常关闭失败后进行强制关闭
  • FALSE:表示在正常关闭失败后不进行强制关闭

    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` + + // 实例的关闭模式。取值范围:
  • SOFT_FIRST:表示在正常关闭失败后进行强制关闭
  • HARD:直接强制关闭
  • SOFT:仅软关机
    默认取值:SOFT。 + StopType *string `json:"StopType,omitempty" name:"StopType"` + + // 按量计费实例关机收费模式。 + // 取值范围:
  • KEEP_CHARGING:关机继续收费
  • STOP_CHARGING:关机停止收费
    默认取值:KEEP_CHARGING。 + // 该参数只针对部分按量计费云硬盘实例生效,详情参考[按量计费实例关机不收费说明](https://cloud.tencent.com/document/product/213/19918) + StoppedMode *string `json:"StoppedMode,omitempty" name:"StoppedMode"` +} + type StopInstancesRequest struct { *tchttp.BaseRequest @@ -6127,13 +9282,15 @@ func (r *StopInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type StopInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type StopInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *StopInstancesResponseParams `json:"Response"` } func (r *StopInstancesResponse) ToJsonString() string { @@ -6148,7 +9305,6 @@ func (r *StopInstancesResponse) FromJsonString(s string) error { } type StorageBlock struct { - // HDD本地存储类型,值为:LOCAL_PRO. // 注意:此字段可能返回 null,表示取不到有效值。 Type *string `json:"Type,omitempty" name:"Type"` @@ -6162,14 +9318,49 @@ type StorageBlock struct { MaxSize *int64 `json:"MaxSize,omitempty" name:"MaxSize"` } +type SyncImage struct { + // 镜像ID + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 地域 + Region *string `json:"Region,omitempty" name:"Region"` +} + +// Predefined struct for user +type SyncImagesRequestParams struct { + // 镜像ID列表 ,镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。
    镜像ID必须满足限制:
  • 镜像ID对应的镜像状态必须为`NORMAL`。
    镜像状态请参考[镜像数据表](https://cloud.tencent.com/document/product/213/15753#Image)。 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` + + // 目的同步地域列表,必须满足如下限制:
  • 必须是一个合法的Region。
  • 如果是自定义镜像,则目标同步地域不能为源地域。
  • 如果是共享镜像,则目的同步地域仅支持源地域,表示将共享镜像复制为源地域的自定义镜像。
  • 暂不支持部分地域同步。
    具体地域参数请参考[Region](https://cloud.tencent.com/document/product/213/6091)。 + DestinationRegions []*string `json:"DestinationRegions,omitempty" name:"DestinationRegions"` + + // 检测是否支持发起同步镜像。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 目标镜像名称。 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 是否需要返回目的地域的镜像ID。 + ImageSetRequired *bool `json:"ImageSetRequired,omitempty" name:"ImageSetRequired"` +} + type SyncImagesRequest struct { *tchttp.BaseRequest // 镜像ID列表 ,镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。
    镜像ID必须满足限制:
  • 镜像ID对应的镜像状态必须为`NORMAL`。
    镜像状态请参考[镜像数据表](https://cloud.tencent.com/document/product/213/15753#Image)。 ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds"` - // 目的同步地域列表;必须满足限制:
  • 不能为源地域,
  • 必须是一个合法的Region。
  • 暂不支持部分地域同步。
    具体地域参数请参考[Region](https://cloud.tencent.com/document/product/213/6091)。 + // 目的同步地域列表,必须满足如下限制:
  • 必须是一个合法的Region。
  • 如果是自定义镜像,则目标同步地域不能为源地域。
  • 如果是共享镜像,则目的同步地域仅支持源地域,表示将共享镜像复制为源地域的自定义镜像。
  • 暂不支持部分地域同步。
    具体地域参数请参考[Region](https://cloud.tencent.com/document/product/213/6091)。 DestinationRegions []*string `json:"DestinationRegions,omitempty" name:"DestinationRegions"` + + // 检测是否支持发起同步镜像。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 目标镜像名称。 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 是否需要返回目的地域的镜像ID。 + ImageSetRequired *bool `json:"ImageSetRequired,omitempty" name:"ImageSetRequired"` } func (r *SyncImagesRequest) ToJsonString() string { @@ -6186,19 +9377,27 @@ func (r *SyncImagesRequest) FromJsonString(s string) error { } delete(f, "ImageIds") delete(f, "DestinationRegions") + delete(f, "DryRun") + delete(f, "ImageName") + delete(f, "ImageSetRequired") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "SyncImagesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type SyncImagesResponseParams struct { + // 目的地域的镜像ID信息。 + ImageSet []*SyncImage `json:"ImageSet,omitempty" name:"ImageSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type SyncImagesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *SyncImagesResponseParams `json:"Response"` } func (r *SyncImagesResponse) ToJsonString() string { @@ -6213,22 +9412,22 @@ func (r *SyncImagesResponse) FromJsonString(s string) error { } type SystemDisk struct { - - // 系统盘类型。系统盘类型限制详见[存储概述](https://cloud.tencent.com/document/product/213/4952)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_PREMIUM:高性能云硬盘

    默认取值:当前有库存的硬盘类型。 + // 系统盘类型。系统盘类型限制详见[存储概述](https://cloud.tencent.com/document/product/213/4952)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_BSSD:通用性SSD云硬盘

    默认取值:当前有库存的硬盘类型。 DiskType *string `json:"DiskType,omitempty" name:"DiskType"` // 系统盘ID。LOCAL_BASIC 和 LOCAL_SSD 类型没有ID。暂时不支持该参数。 + // 该参数目前仅用于`DescribeInstances`等查询类接口的返回参数,不可用于`RunInstances`等写接口的入参。 DiskId *string `json:"DiskId,omitempty" name:"DiskId"` // 系统盘大小,单位:GB。默认值为 50 DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` // 所属的独享集群ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` } type Tag struct { - // 标签键 Key *string `json:"Key,omitempty" name:"Key"` @@ -6237,19 +9436,32 @@ type Tag struct { } type TagSpecification struct { - - // 标签绑定的资源类型,云服务器为“instance”,专用宿主机为“host” + // 标签绑定的资源类型,云服务器为“instance”,专用宿主机为“host”,镜像为“image”,密钥为“keypair” + // 注意:此字段可能返回 null,表示取不到有效值。 ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` // 标签对列表 + // 注意:此字段可能返回 null,表示取不到有效值。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` } +// Predefined struct for user +type TerminateInstancesRequestParams struct { + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 释放实例挂载的包年包月数据盘。 + ReleasePrepaidDataDisks *bool `json:"ReleasePrepaidDataDisks,omitempty" name:"ReleasePrepaidDataDisks"` +} + type TerminateInstancesRequest struct { *tchttp.BaseRequest // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` + + // 释放实例挂载的包年包月数据盘。 + ReleasePrepaidDataDisks *bool `json:"ReleasePrepaidDataDisks,omitempty" name:"ReleasePrepaidDataDisks"` } func (r *TerminateInstancesRequest) ToJsonString() string { @@ -6265,19 +9477,22 @@ func (r *TerminateInstancesRequest) FromJsonString(s string) error { return err } delete(f, "InstanceIds") + delete(f, "ReleasePrepaidDataDisks") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "TerminateInstancesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type TerminateInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type TerminateInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *TerminateInstancesResponseParams `json:"Response"` } func (r *TerminateInstancesResponse) ToJsonString() string { @@ -6292,7 +9507,6 @@ func (r *TerminateInstancesResponse) FromJsonString(s string) error { } type VirtualPrivateCloud struct { - // 私有网络ID,形如`vpc-xxx`。有效的VpcId可通过登录[控制台](https://console.cloud.tencent.com/vpc/vpc?rid=1)查询;也可以调用接口 [DescribeVpcEx](/document/api/215/1372) ,从接口返回中的`unVpcId`字段获取。若在创建子机时VpcId与SubnetId同时传入`DEFAULT`,则强制使用默认vpc网络。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -6310,7 +9524,6 @@ type VirtualPrivateCloud struct { } type ZoneInfo struct { - // 可用区名称,例如,ap-guangzhou-3 // 全网可用区名称如下: //
  • ap-chongqing-1
  • @@ -6335,6 +9548,7 @@ type ZoneInfo struct { //
  • ap-singapore-1
  • //
  • ap-singapore-2
  • //
  • ap-singapore-3
  • + //
  • ap-singapore-4
  • //
  • ap-shanghai-fsi-1
  • //
  • ap-shanghai-fsi-2
  • //
  • ap-shanghai-fsi-3
  • @@ -6345,6 +9559,7 @@ type ZoneInfo struct { //
  • ap-shanghai-3
  • //
  • ap-shanghai-4
  • //
  • ap-shanghai-5
  • + //
  • ap-shanghai-8
  • //
  • ap-mumbai-1
  • //
  • ap-mumbai-2
  • //
  • eu-moscow-1
  • @@ -6364,7 +9579,10 @@ type ZoneInfo struct { //
  • na-ashburn-2
  • //
  • ap-nanjing-1
  • //
  • ap-nanjing-2
  • + //
  • ap-nanjing-3
  • //
  • sa-saopaulo-1
  • + //
  • ap-jakarta-1
  • + //
  • ap-jakarta-2
  • Zone *string `json:"Zone,omitempty" name:"Zone"` // 可用区描述,例如,广州三区 diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/LICENSE b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/LICENSE deleted file mode 100644 index efc75a2253ea..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2017-2018 Tencent Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/LICENSE b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/LICENSE deleted file mode 100644 index efc75a2253ea..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2017-2018 Tencent Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/LICENSE b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/LICENSE deleted file mode 100644 index efc75a2253ea..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2017-2018 Tencent Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/LICENSE b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/LICENSE deleted file mode 100644 index efc75a2253ea..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2017-2018 Tencent Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/client.go deleted file mode 100644 index 6c908290020d..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/client.go +++ /dev/null @@ -1,6616 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v20180525 - -import ( - "context" - - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" -) - -const APIVersion = "2018-05-25" - -type Client struct { - common.Client -} - -// Deprecated -func NewClientWithSecretId(secretId, secretKey, region string) (client *Client, err error) { - cpf := profile.NewClientProfile() - client = &Client{} - client.Init(region).WithSecretId(secretId, secretKey).WithProfile(cpf) - return -} - -func NewClient(credential common.CredentialIface, region string, clientProfile *profile.ClientProfile) (client *Client, err error) { - client = &Client{} - client.Init(region). - WithCredential(credential). - WithProfile(clientProfile) - return -} - -func NewAcquireClusterAdminRoleRequest() (request *AcquireClusterAdminRoleRequest) { - request = &AcquireClusterAdminRoleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "AcquireClusterAdminRole") - - return -} - -func NewAcquireClusterAdminRoleResponse() (response *AcquireClusterAdminRoleResponse) { - response = &AcquireClusterAdminRoleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// AcquireClusterAdminRole -// 通过此接口,可以获取集群的tke:admin的ClusterRole,即管理员角色,可以用于CAM侧高权限的用户,通过CAM策略给予子账户此接口权限,进而可以通过此接口直接获取到kubernetes集群内的管理员角色。 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESGETOPERATIONERROR = "InternalError.KubernetesGetOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) AcquireClusterAdminRole(request *AcquireClusterAdminRoleRequest) (response *AcquireClusterAdminRoleResponse, err error) { - if request == nil { - request = NewAcquireClusterAdminRoleRequest() - } - - response = NewAcquireClusterAdminRoleResponse() - err = c.Send(request, response) - return -} - -// AcquireClusterAdminRole -// 通过此接口,可以获取集群的tke:admin的ClusterRole,即管理员角色,可以用于CAM侧高权限的用户,通过CAM策略给予子账户此接口权限,进而可以通过此接口直接获取到kubernetes集群内的管理员角色。 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESGETOPERATIONERROR = "InternalError.KubernetesGetOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) AcquireClusterAdminRoleWithContext(ctx context.Context, request *AcquireClusterAdminRoleRequest) (response *AcquireClusterAdminRoleResponse, err error) { - if request == nil { - request = NewAcquireClusterAdminRoleRequest() - } - request.SetContext(ctx) - - response = NewAcquireClusterAdminRoleResponse() - err = c.Send(request, response) - return -} - -func NewAddClusterCIDRRequest() (request *AddClusterCIDRRequest) { - request = &AddClusterCIDRRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "AddClusterCIDR") - - return -} - -func NewAddClusterCIDRResponse() (response *AddClusterCIDRResponse) { - response = &AddClusterCIDRResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// AddClusterCIDR -// 给GR集群增加可用的ClusterCIDR -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRMASKSIZEOUTOFRANGE = "InvalidParameter.CIDRMaskSizeOutOfRange" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERCLUSTER = "InvalidParameter.CidrConflictWithOtherCluster" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCCIDR = "InvalidParameter.CidrConflictWithVpcCidr" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCGLOBALROUTE = "InvalidParameter.CidrConflictWithVpcGlobalRoute" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddClusterCIDR(request *AddClusterCIDRRequest) (response *AddClusterCIDRResponse, err error) { - if request == nil { - request = NewAddClusterCIDRRequest() - } - - response = NewAddClusterCIDRResponse() - err = c.Send(request, response) - return -} - -// AddClusterCIDR -// 给GR集群增加可用的ClusterCIDR -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRMASKSIZEOUTOFRANGE = "InvalidParameter.CIDRMaskSizeOutOfRange" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERCLUSTER = "InvalidParameter.CidrConflictWithOtherCluster" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCCIDR = "InvalidParameter.CidrConflictWithVpcCidr" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCGLOBALROUTE = "InvalidParameter.CidrConflictWithVpcGlobalRoute" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddClusterCIDRWithContext(ctx context.Context, request *AddClusterCIDRRequest) (response *AddClusterCIDRResponse, err error) { - if request == nil { - request = NewAddClusterCIDRRequest() - } - request.SetContext(ctx) - - response = NewAddClusterCIDRResponse() - err = c.Send(request, response) - return -} - -func NewAddExistedInstancesRequest() (request *AddExistedInstancesRequest) { - request = &AddExistedInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "AddExistedInstances") - - return -} - -func NewAddExistedInstancesResponse() (response *AddExistedInstancesResponse) { - response = &AddExistedInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// AddExistedInstances -// 添加已经存在的实例到集群 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) AddExistedInstances(request *AddExistedInstancesRequest) (response *AddExistedInstancesResponse, err error) { - if request == nil { - request = NewAddExistedInstancesRequest() - } - - response = NewAddExistedInstancesResponse() - err = c.Send(request, response) - return -} - -// AddExistedInstances -// 添加已经存在的实例到集群 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) AddExistedInstancesWithContext(ctx context.Context, request *AddExistedInstancesRequest) (response *AddExistedInstancesResponse, err error) { - if request == nil { - request = NewAddExistedInstancesRequest() - } - request.SetContext(ctx) - - response = NewAddExistedInstancesResponse() - err = c.Send(request, response) - return -} - -func NewAddNodeToNodePoolRequest() (request *AddNodeToNodePoolRequest) { - request = &AddNodeToNodePoolRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "AddNodeToNodePool") - - return -} - -func NewAddNodeToNodePoolResponse() (response *AddNodeToNodePoolResponse) { - response = &AddNodeToNodePoolResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// AddNodeToNodePool -// 将集群内节点移入节点池 -// -// 可能返回的错误码: -// -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddNodeToNodePool(request *AddNodeToNodePoolRequest) (response *AddNodeToNodePoolResponse, err error) { - if request == nil { - request = NewAddNodeToNodePoolRequest() - } - - response = NewAddNodeToNodePoolResponse() - err = c.Send(request, response) - return -} - -// AddNodeToNodePool -// 将集群内节点移入节点池 -// -// 可能返回的错误码: -// -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddNodeToNodePoolWithContext(ctx context.Context, request *AddNodeToNodePoolRequest) (response *AddNodeToNodePoolResponse, err error) { - if request == nil { - request = NewAddNodeToNodePoolRequest() - } - request.SetContext(ctx) - - response = NewAddNodeToNodePoolResponse() - err = c.Send(request, response) - return -} - -func NewAddVpcCniSubnetsRequest() (request *AddVpcCniSubnetsRequest) { - request = &AddVpcCniSubnetsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "AddVpcCniSubnets") - - return -} - -func NewAddVpcCniSubnetsResponse() (response *AddVpcCniSubnetsResponse) { - response = &AddVpcCniSubnetsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// AddVpcCniSubnets -// 针对VPC-CNI模式的集群,增加集群容器网络可使用的子网 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddVpcCniSubnets(request *AddVpcCniSubnetsRequest) (response *AddVpcCniSubnetsResponse, err error) { - if request == nil { - request = NewAddVpcCniSubnetsRequest() - } - - response = NewAddVpcCniSubnetsResponse() - err = c.Send(request, response) - return -} - -// AddVpcCniSubnets -// 针对VPC-CNI模式的集群,增加集群容器网络可使用的子网 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) AddVpcCniSubnetsWithContext(ctx context.Context, request *AddVpcCniSubnetsRequest) (response *AddVpcCniSubnetsResponse, err error) { - if request == nil { - request = NewAddVpcCniSubnetsRequest() - } - request.SetContext(ctx) - - response = NewAddVpcCniSubnetsResponse() - err = c.Send(request, response) - return -} - -func NewCheckInstancesUpgradeAbleRequest() (request *CheckInstancesUpgradeAbleRequest) { - request = &CheckInstancesUpgradeAbleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CheckInstancesUpgradeAble") - - return -} - -func NewCheckInstancesUpgradeAbleResponse() (response *CheckInstancesUpgradeAbleResponse) { - response = &CheckInstancesUpgradeAbleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CheckInstancesUpgradeAble -// 检查给定节点列表中哪些是可升级的 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) CheckInstancesUpgradeAble(request *CheckInstancesUpgradeAbleRequest) (response *CheckInstancesUpgradeAbleResponse, err error) { - if request == nil { - request = NewCheckInstancesUpgradeAbleRequest() - } - - response = NewCheckInstancesUpgradeAbleResponse() - err = c.Send(request, response) - return -} - -// CheckInstancesUpgradeAble -// 检查给定节点列表中哪些是可升级的 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) CheckInstancesUpgradeAbleWithContext(ctx context.Context, request *CheckInstancesUpgradeAbleRequest) (response *CheckInstancesUpgradeAbleResponse, err error) { - if request == nil { - request = NewCheckInstancesUpgradeAbleRequest() - } - request.SetContext(ctx) - - response = NewCheckInstancesUpgradeAbleResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterRequest() (request *CreateClusterRequest) { - request = &CreateClusterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateCluster") - - return -} - -func NewCreateClusterResponse() (response *CreateClusterResponse) { - response = &CreateClusterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateCluster -// 创建集群 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTCOMMON = "InternalError.AccountCommon" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CIDRCONFLICTWITHOTHERCLUSTER = "InternalError.CidrConflictWithOtherCluster" -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDRCONFLICTWITHVPCCIDR = "InternalError.CidrConflictWithVpcCidr" -// INTERNALERROR_CIDRCONFLICTWITHVPCGLOBALROUTE = "InternalError.CidrConflictWithVpcGlobalRoute" -// INTERNALERROR_CIDRINVALI = "InternalError.CidrInvali" -// INTERNALERROR_CIDRMASKSIZEOUTOFRANGE = "InternalError.CidrMaskSizeOutOfRange" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_CREATEMASTERFAILED = "InternalError.CreateMasterFailed" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNUMBERNOTMATCH = "InternalError.CvmNumberNotMatch" -// INTERNALERROR_CVMSTATUS = "InternalError.CvmStatus" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAUSGLIMIT = "InternalError.QuotaUSGLimit" -// INTERNALERROR_TASKCREATEFAILED = "InternalError.TaskCreateFailed" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRMASKSIZEOUTOFRANGE = "InvalidParameter.CIDRMaskSizeOutOfRange" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERCLUSTER = "InvalidParameter.CidrConflictWithOtherCluster" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCCIDR = "InvalidParameter.CidrConflictWithVpcCidr" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCGLOBALROUTE = "InvalidParameter.CidrConflictWithVpcGlobalRoute" -// INVALIDPARAMETER_CIDRINVALID = "InvalidParameter.CidrInvalid" -// INVALIDPARAMETER_INVALIDPRIVATENETWORKCIDR = "InvalidParameter.InvalidPrivateNetworkCIDR" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) CreateCluster(request *CreateClusterRequest) (response *CreateClusterResponse, err error) { - if request == nil { - request = NewCreateClusterRequest() - } - - response = NewCreateClusterResponse() - err = c.Send(request, response) - return -} - -// CreateCluster -// 创建集群 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTCOMMON = "InternalError.AccountCommon" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CIDRCONFLICTWITHOTHERCLUSTER = "InternalError.CidrConflictWithOtherCluster" -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDRCONFLICTWITHVPCCIDR = "InternalError.CidrConflictWithVpcCidr" -// INTERNALERROR_CIDRCONFLICTWITHVPCGLOBALROUTE = "InternalError.CidrConflictWithVpcGlobalRoute" -// INTERNALERROR_CIDRINVALI = "InternalError.CidrInvali" -// INTERNALERROR_CIDRMASKSIZEOUTOFRANGE = "InternalError.CidrMaskSizeOutOfRange" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_CREATEMASTERFAILED = "InternalError.CreateMasterFailed" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNUMBERNOTMATCH = "InternalError.CvmNumberNotMatch" -// INTERNALERROR_CVMSTATUS = "InternalError.CvmStatus" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAUSGLIMIT = "InternalError.QuotaUSGLimit" -// INTERNALERROR_TASKCREATEFAILED = "InternalError.TaskCreateFailed" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRMASKSIZEOUTOFRANGE = "InvalidParameter.CIDRMaskSizeOutOfRange" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERCLUSTER = "InvalidParameter.CidrConflictWithOtherCluster" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCCIDR = "InvalidParameter.CidrConflictWithVpcCidr" -// INVALIDPARAMETER_CIDRCONFLICTWITHVPCGLOBALROUTE = "InvalidParameter.CidrConflictWithVpcGlobalRoute" -// INVALIDPARAMETER_CIDRINVALID = "InvalidParameter.CidrInvalid" -// INVALIDPARAMETER_INVALIDPRIVATENETWORKCIDR = "InvalidParameter.InvalidPrivateNetworkCIDR" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) CreateClusterWithContext(ctx context.Context, request *CreateClusterRequest) (response *CreateClusterResponse, err error) { - if request == nil { - request = NewCreateClusterRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterAsGroupRequest() (request *CreateClusterAsGroupRequest) { - request = &CreateClusterAsGroupRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterAsGroup") - - return -} - -func NewCreateClusterAsGroupResponse() (response *CreateClusterAsGroupResponse) { - response = &CreateClusterAsGroupResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterAsGroup -// 为已经存在的集群创建伸缩组 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterAsGroup(request *CreateClusterAsGroupRequest) (response *CreateClusterAsGroupResponse, err error) { - if request == nil { - request = NewCreateClusterAsGroupRequest() - } - - response = NewCreateClusterAsGroupResponse() - err = c.Send(request, response) - return -} - -// CreateClusterAsGroup -// 为已经存在的集群创建伸缩组 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterAsGroupWithContext(ctx context.Context, request *CreateClusterAsGroupRequest) (response *CreateClusterAsGroupResponse, err error) { - if request == nil { - request = NewCreateClusterAsGroupRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterAsGroupResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterEndpointRequest() (request *CreateClusterEndpointRequest) { - request = &CreateClusterEndpointRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterEndpoint") - - return -} - -func NewCreateClusterEndpointResponse() (response *CreateClusterEndpointResponse) { - response = &CreateClusterEndpointResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterEndpoint -// 创建集群访问端口(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_EMPTYCLUSTERNOTSUPPORT = "InternalError.EmptyClusterNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterEndpoint(request *CreateClusterEndpointRequest) (response *CreateClusterEndpointResponse, err error) { - if request == nil { - request = NewCreateClusterEndpointRequest() - } - - response = NewCreateClusterEndpointResponse() - err = c.Send(request, response) - return -} - -// CreateClusterEndpoint -// 创建集群访问端口(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_EMPTYCLUSTERNOTSUPPORT = "InternalError.EmptyClusterNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterEndpointWithContext(ctx context.Context, request *CreateClusterEndpointRequest) (response *CreateClusterEndpointResponse, err error) { - if request == nil { - request = NewCreateClusterEndpointRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterEndpointResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterEndpointVipRequest() (request *CreateClusterEndpointVipRequest) { - request = &CreateClusterEndpointVipRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterEndpointVip") - - return -} - -func NewCreateClusterEndpointVipResponse() (response *CreateClusterEndpointVipResponse) { - response = &CreateClusterEndpointVipResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterEndpointVip -// 创建托管集群外网访问端口(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterEndpointVip(request *CreateClusterEndpointVipRequest) (response *CreateClusterEndpointVipResponse, err error) { - if request == nil { - request = NewCreateClusterEndpointVipRequest() - } - - response = NewCreateClusterEndpointVipResponse() - err = c.Send(request, response) - return -} - -// CreateClusterEndpointVip -// 创建托管集群外网访问端口(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterEndpointVipWithContext(ctx context.Context, request *CreateClusterEndpointVipRequest) (response *CreateClusterEndpointVipResponse, err error) { - if request == nil { - request = NewCreateClusterEndpointVipRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterEndpointVipResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterInstancesRequest() (request *CreateClusterInstancesRequest) { - request = &CreateClusterInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterInstances") - - return -} - -func NewCreateClusterInstancesResponse() (response *CreateClusterInstancesResponse) { - response = &CreateClusterInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterInstances -// 扩展(新建)集群节点 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTCOMMON = "InternalError.AccountCommon" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCPEERNOTFOUND = "InternalError.VpcPeerNotFound" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterInstances(request *CreateClusterInstancesRequest) (response *CreateClusterInstancesResponse, err error) { - if request == nil { - request = NewCreateClusterInstancesRequest() - } - - response = NewCreateClusterInstancesResponse() - err = c.Send(request, response) - return -} - -// CreateClusterInstances -// 扩展(新建)集群节点 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTCOMMON = "InternalError.AccountCommon" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCPEERNOTFOUND = "InternalError.VpcPeerNotFound" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateClusterInstancesWithContext(ctx context.Context, request *CreateClusterInstancesRequest) (response *CreateClusterInstancesResponse, err error) { - if request == nil { - request = NewCreateClusterInstancesRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterInstancesResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterNodePoolRequest() (request *CreateClusterNodePoolRequest) { - request = &CreateClusterNodePoolRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterNodePool") - - return -} - -func NewCreateClusterNodePoolResponse() (response *CreateClusterNodePoolResponse) { - response = &CreateClusterNodePoolResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterNodePool -// 创建节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ASASGNOTEXIST = "ResourceNotFound.AsAsgNotExist" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) CreateClusterNodePool(request *CreateClusterNodePoolRequest) (response *CreateClusterNodePoolResponse, err error) { - if request == nil { - request = NewCreateClusterNodePoolRequest() - } - - response = NewCreateClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -// CreateClusterNodePool -// 创建节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ASASGNOTEXIST = "ResourceNotFound.AsAsgNotExist" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) CreateClusterNodePoolWithContext(ctx context.Context, request *CreateClusterNodePoolRequest) (response *CreateClusterNodePoolResponse, err error) { - if request == nil { - request = NewCreateClusterNodePoolRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterNodePoolFromExistingAsgRequest() (request *CreateClusterNodePoolFromExistingAsgRequest) { - request = &CreateClusterNodePoolFromExistingAsgRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterNodePoolFromExistingAsg") - - return -} - -func NewCreateClusterNodePoolFromExistingAsgResponse() (response *CreateClusterNodePoolFromExistingAsgResponse) { - response = &CreateClusterNodePoolFromExistingAsgResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterNodePoolFromExistingAsg -// 从伸缩组创建节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) CreateClusterNodePoolFromExistingAsg(request *CreateClusterNodePoolFromExistingAsgRequest) (response *CreateClusterNodePoolFromExistingAsgResponse, err error) { - if request == nil { - request = NewCreateClusterNodePoolFromExistingAsgRequest() - } - - response = NewCreateClusterNodePoolFromExistingAsgResponse() - err = c.Send(request, response) - return -} - -// CreateClusterNodePoolFromExistingAsg -// 从伸缩组创建节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) CreateClusterNodePoolFromExistingAsgWithContext(ctx context.Context, request *CreateClusterNodePoolFromExistingAsgRequest) (response *CreateClusterNodePoolFromExistingAsgResponse, err error) { - if request == nil { - request = NewCreateClusterNodePoolFromExistingAsgRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterNodePoolFromExistingAsgResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterRouteRequest() (request *CreateClusterRouteRequest) { - request = &CreateClusterRouteRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterRoute") - - return -} - -func NewCreateClusterRouteResponse() (response *CreateClusterRouteResponse) { - response = &CreateClusterRouteResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterRoute -// 创建集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDROUTOFROUTETABLE = "InternalError.CidrOutOfRouteTable" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_GATEWAYALREADYASSOCIATEDCIDR = "InternalError.GatewayAlreadyAssociatedCidr" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_ROUTETABLENOTFOUND = "InternalError.RouteTableNotFound" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDROUTOFROUTETABLE = "InvalidParameter.CidrOutOfRouteTable" -// INVALIDPARAMETER_GATEWAYALREADYASSOCIATEDCIDR = "InvalidParameter.GatewayAlreadyAssociatedCidr" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ROUTETABLENOTFOUND = "ResourceNotFound.RouteTableNotFound" -func (c *Client) CreateClusterRoute(request *CreateClusterRouteRequest) (response *CreateClusterRouteResponse, err error) { - if request == nil { - request = NewCreateClusterRouteRequest() - } - - response = NewCreateClusterRouteResponse() - err = c.Send(request, response) - return -} - -// CreateClusterRoute -// 创建集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDROUTOFROUTETABLE = "InternalError.CidrOutOfRouteTable" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_GATEWAYALREADYASSOCIATEDCIDR = "InternalError.GatewayAlreadyAssociatedCidr" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_ROUTETABLENOTFOUND = "InternalError.RouteTableNotFound" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_CIDROUTOFROUTETABLE = "InvalidParameter.CidrOutOfRouteTable" -// INVALIDPARAMETER_GATEWAYALREADYASSOCIATEDCIDR = "InvalidParameter.GatewayAlreadyAssociatedCidr" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ROUTETABLENOTFOUND = "ResourceNotFound.RouteTableNotFound" -func (c *Client) CreateClusterRouteWithContext(ctx context.Context, request *CreateClusterRouteRequest) (response *CreateClusterRouteResponse, err error) { - if request == nil { - request = NewCreateClusterRouteRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterRouteResponse() - err = c.Send(request, response) - return -} - -func NewCreateClusterRouteTableRequest() (request *CreateClusterRouteTableRequest) { - request = &CreateClusterRouteTableRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateClusterRouteTable") - - return -} - -func NewCreateClusterRouteTableResponse() (response *CreateClusterRouteTableResponse) { - response = &CreateClusterRouteTableResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateClusterRouteTable -// 创建集群路由表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CIDRCONFLICTWITHOTHERCLUSTER = "InternalError.CidrConflictWithOtherCluster" -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDRCONFLICTWITHVPCCIDR = "InternalError.CidrConflictWithVpcCidr" -// INTERNALERROR_CIDRCONFLICTWITHVPCGLOBALROUTE = "InternalError.CidrConflictWithVpcGlobalRoute" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INTERNALERROR_RESOURCEEXISTALREADY = "InternalError.ResourceExistAlready" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) CreateClusterRouteTable(request *CreateClusterRouteTableRequest) (response *CreateClusterRouteTableResponse, err error) { - if request == nil { - request = NewCreateClusterRouteTableRequest() - } - - response = NewCreateClusterRouteTableResponse() - err = c.Send(request, response) - return -} - -// CreateClusterRouteTable -// 创建集群路由表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CIDRCONFLICTWITHOTHERCLUSTER = "InternalError.CidrConflictWithOtherCluster" -// INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" -// INTERNALERROR_CIDRCONFLICTWITHVPCCIDR = "InternalError.CidrConflictWithVpcCidr" -// INTERNALERROR_CIDRCONFLICTWITHVPCGLOBALROUTE = "InternalError.CidrConflictWithVpcGlobalRoute" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INTERNALERROR_RESOURCEEXISTALREADY = "InternalError.ResourceExistAlready" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) CreateClusterRouteTableWithContext(ctx context.Context, request *CreateClusterRouteTableRequest) (response *CreateClusterRouteTableResponse, err error) { - if request == nil { - request = NewCreateClusterRouteTableRequest() - } - request.SetContext(ctx) - - response = NewCreateClusterRouteTableResponse() - err = c.Send(request, response) - return -} - -func NewCreateEKSClusterRequest() (request *CreateEKSClusterRequest) { - request = &CreateEKSClusterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateEKSCluster") - - return -} - -func NewCreateEKSClusterResponse() (response *CreateEKSClusterResponse) { - response = &CreateEKSClusterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateEKSCluster -// 创建弹性集群 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateEKSCluster(request *CreateEKSClusterRequest) (response *CreateEKSClusterResponse, err error) { - if request == nil { - request = NewCreateEKSClusterRequest() - } - - response = NewCreateEKSClusterResponse() - err = c.Send(request, response) - return -} - -// CreateEKSCluster -// 创建弹性集群 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) CreateEKSClusterWithContext(ctx context.Context, request *CreateEKSClusterRequest) (response *CreateEKSClusterResponse, err error) { - if request == nil { - request = NewCreateEKSClusterRequest() - } - request.SetContext(ctx) - - response = NewCreateEKSClusterResponse() - err = c.Send(request, response) - return -} - -func NewCreateEKSContainerInstancesRequest() (request *CreateEKSContainerInstancesRequest) { - request = &CreateEKSContainerInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreateEKSContainerInstances") - - return -} - -func NewCreateEKSContainerInstancesResponse() (response *CreateEKSContainerInstancesResponse) { - response = &CreateEKSContainerInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreateEKSContainerInstances -// 创建容器实例 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CMDTIMEOUT = "InternalError.CmdTimeout" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) CreateEKSContainerInstances(request *CreateEKSContainerInstancesRequest) (response *CreateEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewCreateEKSContainerInstancesRequest() - } - - response = NewCreateEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -// CreateEKSContainerInstances -// 创建容器实例 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CMDTIMEOUT = "InternalError.CmdTimeout" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) CreateEKSContainerInstancesWithContext(ctx context.Context, request *CreateEKSContainerInstancesRequest) (response *CreateEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewCreateEKSContainerInstancesRequest() - } - request.SetContext(ctx) - - response = NewCreateEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -func NewCreatePrometheusAlertRuleRequest() (request *CreatePrometheusAlertRuleRequest) { - request = &CreatePrometheusAlertRuleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreatePrometheusAlertRule") - - return -} - -func NewCreatePrometheusAlertRuleResponse() (response *CreatePrometheusAlertRuleResponse) { - response = &CreatePrometheusAlertRuleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreatePrometheusAlertRule -// 创建告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) CreatePrometheusAlertRule(request *CreatePrometheusAlertRuleRequest) (response *CreatePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewCreatePrometheusAlertRuleRequest() - } - - response = NewCreatePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -// CreatePrometheusAlertRule -// 创建告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) CreatePrometheusAlertRuleWithContext(ctx context.Context, request *CreatePrometheusAlertRuleRequest) (response *CreatePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewCreatePrometheusAlertRuleRequest() - } - request.SetContext(ctx) - - response = NewCreatePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -func NewCreatePrometheusDashboardRequest() (request *CreatePrometheusDashboardRequest) { - request = &CreatePrometheusDashboardRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreatePrometheusDashboard") - - return -} - -func NewCreatePrometheusDashboardResponse() (response *CreatePrometheusDashboardResponse) { - response = &CreatePrometheusDashboardResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreatePrometheusDashboard -// 创建grafana监控面板 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) CreatePrometheusDashboard(request *CreatePrometheusDashboardRequest) (response *CreatePrometheusDashboardResponse, err error) { - if request == nil { - request = NewCreatePrometheusDashboardRequest() - } - - response = NewCreatePrometheusDashboardResponse() - err = c.Send(request, response) - return -} - -// CreatePrometheusDashboard -// 创建grafana监控面板 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) CreatePrometheusDashboardWithContext(ctx context.Context, request *CreatePrometheusDashboardRequest) (response *CreatePrometheusDashboardResponse, err error) { - if request == nil { - request = NewCreatePrometheusDashboardRequest() - } - request.SetContext(ctx) - - response = NewCreatePrometheusDashboardResponse() - err = c.Send(request, response) - return -} - -func NewCreatePrometheusTemplateRequest() (request *CreatePrometheusTemplateRequest) { - request = &CreatePrometheusTemplateRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "CreatePrometheusTemplate") - - return -} - -func NewCreatePrometheusTemplateResponse() (response *CreatePrometheusTemplateResponse) { - response = &CreatePrometheusTemplateResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// CreatePrometheusTemplate -// 创建一个云原生Prometheus模板实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) CreatePrometheusTemplate(request *CreatePrometheusTemplateRequest) (response *CreatePrometheusTemplateResponse, err error) { - if request == nil { - request = NewCreatePrometheusTemplateRequest() - } - - response = NewCreatePrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -// CreatePrometheusTemplate -// 创建一个云原生Prometheus模板实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) CreatePrometheusTemplateWithContext(ctx context.Context, request *CreatePrometheusTemplateRequest) (response *CreatePrometheusTemplateResponse, err error) { - if request == nil { - request = NewCreatePrometheusTemplateRequest() - } - request.SetContext(ctx) - - response = NewCreatePrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterRequest() (request *DeleteClusterRequest) { - request = &DeleteClusterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteCluster") - - return -} - -func NewDeleteClusterResponse() (response *DeleteClusterResponse) { - response = &DeleteClusterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteCluster -// 删除集群(YUNAPI V3版本) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED_CLUSTERINDELETIONPROTECTION = "OperationDenied.ClusterInDeletionProtection" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -func (c *Client) DeleteCluster(request *DeleteClusterRequest) (response *DeleteClusterResponse, err error) { - if request == nil { - request = NewDeleteClusterRequest() - } - - response = NewDeleteClusterResponse() - err = c.Send(request, response) - return -} - -// DeleteCluster -// 删除集群(YUNAPI V3版本) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED_CLUSTERINDELETIONPROTECTION = "OperationDenied.ClusterInDeletionProtection" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -func (c *Client) DeleteClusterWithContext(ctx context.Context, request *DeleteClusterRequest) (response *DeleteClusterResponse, err error) { - if request == nil { - request = NewDeleteClusterRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterAsGroupsRequest() (request *DeleteClusterAsGroupsRequest) { - request = &DeleteClusterAsGroupsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterAsGroups") - - return -} - -func NewDeleteClusterAsGroupsResponse() (response *DeleteClusterAsGroupsResponse) { - response = &DeleteClusterAsGroupsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterAsGroups -// 删除集群伸缩组 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNKNOWNPARAMETER = "UnknownParameter" -func (c *Client) DeleteClusterAsGroups(request *DeleteClusterAsGroupsRequest) (response *DeleteClusterAsGroupsResponse, err error) { - if request == nil { - request = NewDeleteClusterAsGroupsRequest() - } - - response = NewDeleteClusterAsGroupsResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterAsGroups -// 删除集群伸缩组 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNKNOWNPARAMETER = "UnknownParameter" -func (c *Client) DeleteClusterAsGroupsWithContext(ctx context.Context, request *DeleteClusterAsGroupsRequest) (response *DeleteClusterAsGroupsResponse, err error) { - if request == nil { - request = NewDeleteClusterAsGroupsRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterAsGroupsResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterEndpointRequest() (request *DeleteClusterEndpointRequest) { - request = &DeleteClusterEndpointRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterEndpoint") - - return -} - -func NewDeleteClusterEndpointResponse() (response *DeleteClusterEndpointResponse) { - response = &DeleteClusterEndpointResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterEndpoint -// 删除集群访问端口(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteClusterEndpoint(request *DeleteClusterEndpointRequest) (response *DeleteClusterEndpointResponse, err error) { - if request == nil { - request = NewDeleteClusterEndpointRequest() - } - - response = NewDeleteClusterEndpointResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterEndpoint -// 删除集群访问端口(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteClusterEndpointWithContext(ctx context.Context, request *DeleteClusterEndpointRequest) (response *DeleteClusterEndpointResponse, err error) { - if request == nil { - request = NewDeleteClusterEndpointRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterEndpointResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterEndpointVipRequest() (request *DeleteClusterEndpointVipRequest) { - request = &DeleteClusterEndpointVipRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterEndpointVip") - - return -} - -func NewDeleteClusterEndpointVipResponse() (response *DeleteClusterEndpointVipResponse) { - response = &DeleteClusterEndpointVipResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterEndpointVip -// 删除托管集群外网访问端口(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteClusterEndpointVip(request *DeleteClusterEndpointVipRequest) (response *DeleteClusterEndpointVipResponse, err error) { - if request == nil { - request = NewDeleteClusterEndpointVipRequest() - } - - response = NewDeleteClusterEndpointVipResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterEndpointVip -// 删除托管集群外网访问端口(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteClusterEndpointVipWithContext(ctx context.Context, request *DeleteClusterEndpointVipRequest) (response *DeleteClusterEndpointVipResponse, err error) { - if request == nil { - request = NewDeleteClusterEndpointVipRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterEndpointVipResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterInstancesRequest() (request *DeleteClusterInstancesRequest) { - request = &DeleteClusterInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterInstances") - - return -} - -func NewDeleteClusterInstancesResponse() (response *DeleteClusterInstancesResponse) { - response = &DeleteClusterInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterInstances -// 删除集群中的实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) DeleteClusterInstances(request *DeleteClusterInstancesRequest) (response *DeleteClusterInstancesResponse, err error) { - if request == nil { - request = NewDeleteClusterInstancesRequest() - } - - response = NewDeleteClusterInstancesResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterInstances -// 删除集群中的实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -func (c *Client) DeleteClusterInstancesWithContext(ctx context.Context, request *DeleteClusterInstancesRequest) (response *DeleteClusterInstancesResponse, err error) { - if request == nil { - request = NewDeleteClusterInstancesRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterNodePoolRequest() (request *DeleteClusterNodePoolRequest) { - request = &DeleteClusterNodePoolRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterNodePool") - - return -} - -func NewDeleteClusterNodePoolResponse() (response *DeleteClusterNodePoolResponse) { - response = &DeleteClusterNodePoolResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterNodePool -// 删除节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DeleteClusterNodePool(request *DeleteClusterNodePoolRequest) (response *DeleteClusterNodePoolResponse, err error) { - if request == nil { - request = NewDeleteClusterNodePoolRequest() - } - - response = NewDeleteClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterNodePool -// 删除节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DeleteClusterNodePoolWithContext(ctx context.Context, request *DeleteClusterNodePoolRequest) (response *DeleteClusterNodePoolResponse, err error) { - if request == nil { - request = NewDeleteClusterNodePoolRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterRouteRequest() (request *DeleteClusterRouteRequest) { - request = &DeleteClusterRouteRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterRoute") - - return -} - -func NewDeleteClusterRouteResponse() (response *DeleteClusterRouteResponse) { - response = &DeleteClusterRouteResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterRoute -// 删除集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_ROUTETABLENOTFOUND = "InternalError.RouteTableNotFound" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DeleteClusterRoute(request *DeleteClusterRouteRequest) (response *DeleteClusterRouteResponse, err error) { - if request == nil { - request = NewDeleteClusterRouteRequest() - } - - response = NewDeleteClusterRouteResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterRoute -// 删除集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_ROUTETABLENOTFOUND = "InternalError.RouteTableNotFound" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DeleteClusterRouteWithContext(ctx context.Context, request *DeleteClusterRouteRequest) (response *DeleteClusterRouteResponse, err error) { - if request == nil { - request = NewDeleteClusterRouteRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterRouteResponse() - err = c.Send(request, response) - return -} - -func NewDeleteClusterRouteTableRequest() (request *DeleteClusterRouteTableRequest) { - request = &DeleteClusterRouteTableRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteClusterRouteTable") - - return -} - -func NewDeleteClusterRouteTableResponse() (response *DeleteClusterRouteTableResponse) { - response = &DeleteClusterRouteTableResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteClusterRouteTable -// 删除集群路由表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_ROUTETABLENOTEMPTY = "InternalError.RouteTableNotEmpty" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -func (c *Client) DeleteClusterRouteTable(request *DeleteClusterRouteTableRequest) (response *DeleteClusterRouteTableResponse, err error) { - if request == nil { - request = NewDeleteClusterRouteTableRequest() - } - - response = NewDeleteClusterRouteTableResponse() - err = c.Send(request, response) - return -} - -// DeleteClusterRouteTable -// 删除集群路由表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_ROUTETABLENOTEMPTY = "InternalError.RouteTableNotEmpty" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -func (c *Client) DeleteClusterRouteTableWithContext(ctx context.Context, request *DeleteClusterRouteTableRequest) (response *DeleteClusterRouteTableResponse, err error) { - if request == nil { - request = NewDeleteClusterRouteTableRequest() - } - request.SetContext(ctx) - - response = NewDeleteClusterRouteTableResponse() - err = c.Send(request, response) - return -} - -func NewDeleteEKSClusterRequest() (request *DeleteEKSClusterRequest) { - request = &DeleteEKSClusterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteEKSCluster") - - return -} - -func NewDeleteEKSClusterResponse() (response *DeleteEKSClusterResponse) { - response = &DeleteEKSClusterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteEKSCluster -// 删除弹性集群(yunapiv3) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteEKSCluster(request *DeleteEKSClusterRequest) (response *DeleteEKSClusterResponse, err error) { - if request == nil { - request = NewDeleteEKSClusterRequest() - } - - response = NewDeleteEKSClusterResponse() - err = c.Send(request, response) - return -} - -// DeleteEKSCluster -// 删除弹性集群(yunapiv3) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteEKSClusterWithContext(ctx context.Context, request *DeleteEKSClusterRequest) (response *DeleteEKSClusterResponse, err error) { - if request == nil { - request = NewDeleteEKSClusterRequest() - } - request.SetContext(ctx) - - response = NewDeleteEKSClusterResponse() - err = c.Send(request, response) - return -} - -func NewDeleteEKSContainerInstancesRequest() (request *DeleteEKSContainerInstancesRequest) { - request = &DeleteEKSContainerInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeleteEKSContainerInstances") - - return -} - -func NewDeleteEKSContainerInstancesResponse() (response *DeleteEKSContainerInstancesResponse) { - response = &DeleteEKSContainerInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeleteEKSContainerInstances -// 删除容器实例,可批量删除 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CONTAINERNOTFOUND = "InternalError.ContainerNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteEKSContainerInstances(request *DeleteEKSContainerInstancesRequest) (response *DeleteEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewDeleteEKSContainerInstancesRequest() - } - - response = NewDeleteEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -// DeleteEKSContainerInstances -// 删除容器实例,可批量删除 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CONTAINERNOTFOUND = "InternalError.ContainerNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DeleteEKSContainerInstancesWithContext(ctx context.Context, request *DeleteEKSContainerInstancesRequest) (response *DeleteEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewDeleteEKSContainerInstancesRequest() - } - request.SetContext(ctx) - - response = NewDeleteEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDeletePrometheusAlertRuleRequest() (request *DeletePrometheusAlertRuleRequest) { - request = &DeletePrometheusAlertRuleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeletePrometheusAlertRule") - - return -} - -func NewDeletePrometheusAlertRuleResponse() (response *DeletePrometheusAlertRuleResponse) { - response = &DeletePrometheusAlertRuleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeletePrometheusAlertRule -// 删除告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DeletePrometheusAlertRule(request *DeletePrometheusAlertRuleRequest) (response *DeletePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewDeletePrometheusAlertRuleRequest() - } - - response = NewDeletePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -// DeletePrometheusAlertRule -// 删除告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DeletePrometheusAlertRuleWithContext(ctx context.Context, request *DeletePrometheusAlertRuleRequest) (response *DeletePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewDeletePrometheusAlertRuleRequest() - } - request.SetContext(ctx) - - response = NewDeletePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -func NewDeletePrometheusTemplateRequest() (request *DeletePrometheusTemplateRequest) { - request = &DeletePrometheusTemplateRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeletePrometheusTemplate") - - return -} - -func NewDeletePrometheusTemplateResponse() (response *DeletePrometheusTemplateResponse) { - response = &DeletePrometheusTemplateResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeletePrometheusTemplate -// 删除一个云原生Prometheus配置模板 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DeletePrometheusTemplate(request *DeletePrometheusTemplateRequest) (response *DeletePrometheusTemplateResponse, err error) { - if request == nil { - request = NewDeletePrometheusTemplateRequest() - } - - response = NewDeletePrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -// DeletePrometheusTemplate -// 删除一个云原生Prometheus配置模板 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DeletePrometheusTemplateWithContext(ctx context.Context, request *DeletePrometheusTemplateRequest) (response *DeletePrometheusTemplateResponse, err error) { - if request == nil { - request = NewDeletePrometheusTemplateRequest() - } - request.SetContext(ctx) - - response = NewDeletePrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -func NewDeletePrometheusTemplateSyncRequest() (request *DeletePrometheusTemplateSyncRequest) { - request = &DeletePrometheusTemplateSyncRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DeletePrometheusTemplateSync") - - return -} - -func NewDeletePrometheusTemplateSyncResponse() (response *DeletePrometheusTemplateSyncResponse) { - response = &DeletePrometheusTemplateSyncResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DeletePrometheusTemplateSync -// 取消模板同步,这将会删除目标中该模板所生产的配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DeletePrometheusTemplateSync(request *DeletePrometheusTemplateSyncRequest) (response *DeletePrometheusTemplateSyncResponse, err error) { - if request == nil { - request = NewDeletePrometheusTemplateSyncRequest() - } - - response = NewDeletePrometheusTemplateSyncResponse() - err = c.Send(request, response) - return -} - -// DeletePrometheusTemplateSync -// 取消模板同步,这将会删除目标中该模板所生产的配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DeletePrometheusTemplateSyncWithContext(ctx context.Context, request *DeletePrometheusTemplateSyncRequest) (response *DeletePrometheusTemplateSyncResponse, err error) { - if request == nil { - request = NewDeletePrometheusTemplateSyncRequest() - } - request.SetContext(ctx) - - response = NewDeletePrometheusTemplateSyncResponse() - err = c.Send(request, response) - return -} - -func NewDescribeAvailableClusterVersionRequest() (request *DescribeAvailableClusterVersionRequest) { - request = &DescribeAvailableClusterVersionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeAvailableClusterVersion") - - return -} - -func NewDescribeAvailableClusterVersionResponse() (response *DescribeAvailableClusterVersionResponse) { - response = &DescribeAvailableClusterVersionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeAvailableClusterVersion -// 获取集群可以升级的所有版本 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeAvailableClusterVersion(request *DescribeAvailableClusterVersionRequest) (response *DescribeAvailableClusterVersionResponse, err error) { - if request == nil { - request = NewDescribeAvailableClusterVersionRequest() - } - - response = NewDescribeAvailableClusterVersionResponse() - err = c.Send(request, response) - return -} - -// DescribeAvailableClusterVersion -// 获取集群可以升级的所有版本 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeAvailableClusterVersionWithContext(ctx context.Context, request *DescribeAvailableClusterVersionRequest) (response *DescribeAvailableClusterVersionResponse, err error) { - if request == nil { - request = NewDescribeAvailableClusterVersionRequest() - } - request.SetContext(ctx) - - response = NewDescribeAvailableClusterVersionResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterAsGroupOptionRequest() (request *DescribeClusterAsGroupOptionRequest) { - request = &DescribeClusterAsGroupOptionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterAsGroupOption") - - return -} - -func NewDescribeClusterAsGroupOptionResponse() (response *DescribeClusterAsGroupOptionResponse) { - response = &DescribeClusterAsGroupOptionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterAsGroupOption -// 集群弹性伸缩配置 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterAsGroupOption(request *DescribeClusterAsGroupOptionRequest) (response *DescribeClusterAsGroupOptionResponse, err error) { - if request == nil { - request = NewDescribeClusterAsGroupOptionRequest() - } - - response = NewDescribeClusterAsGroupOptionResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterAsGroupOption -// 集群弹性伸缩配置 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterAsGroupOptionWithContext(ctx context.Context, request *DescribeClusterAsGroupOptionRequest) (response *DescribeClusterAsGroupOptionResponse, err error) { - if request == nil { - request = NewDescribeClusterAsGroupOptionRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterAsGroupOptionResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterAsGroupsRequest() (request *DescribeClusterAsGroupsRequest) { - request = &DescribeClusterAsGroupsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterAsGroups") - - return -} - -func NewDescribeClusterAsGroupsResponse() (response *DescribeClusterAsGroupsResponse) { - response = &DescribeClusterAsGroupsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterAsGroups -// 集群关联的伸缩组列表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PODNOTFOUND = "InternalError.PodNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCPEERNOTFOUND = "InternalError.VpcPeerNotFound" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -func (c *Client) DescribeClusterAsGroups(request *DescribeClusterAsGroupsRequest) (response *DescribeClusterAsGroupsResponse, err error) { - if request == nil { - request = NewDescribeClusterAsGroupsRequest() - } - - response = NewDescribeClusterAsGroupsResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterAsGroups -// 集群关联的伸缩组列表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PODNOTFOUND = "InternalError.PodNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCPEERNOTFOUND = "InternalError.VpcPeerNotFound" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -func (c *Client) DescribeClusterAsGroupsWithContext(ctx context.Context, request *DescribeClusterAsGroupsRequest) (response *DescribeClusterAsGroupsResponse, err error) { - if request == nil { - request = NewDescribeClusterAsGroupsRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterAsGroupsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterAuthenticationOptionsRequest() (request *DescribeClusterAuthenticationOptionsRequest) { - request = &DescribeClusterAuthenticationOptionsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterAuthenticationOptions") - - return -} - -func NewDescribeClusterAuthenticationOptionsResponse() (response *DescribeClusterAuthenticationOptionsResponse) { - response = &DescribeClusterAuthenticationOptionsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterAuthenticationOptions -// 查看集群认证配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) DescribeClusterAuthenticationOptions(request *DescribeClusterAuthenticationOptionsRequest) (response *DescribeClusterAuthenticationOptionsResponse, err error) { - if request == nil { - request = NewDescribeClusterAuthenticationOptionsRequest() - } - - response = NewDescribeClusterAuthenticationOptionsResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterAuthenticationOptions -// 查看集群认证配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) DescribeClusterAuthenticationOptionsWithContext(ctx context.Context, request *DescribeClusterAuthenticationOptionsRequest) (response *DescribeClusterAuthenticationOptionsResponse, err error) { - if request == nil { - request = NewDescribeClusterAuthenticationOptionsRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterAuthenticationOptionsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterCommonNamesRequest() (request *DescribeClusterCommonNamesRequest) { - request = &DescribeClusterCommonNamesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterCommonNames") - - return -} - -func NewDescribeClusterCommonNamesResponse() (response *DescribeClusterCommonNamesResponse) { - response = &DescribeClusterCommonNamesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterCommonNames -// 获取指定子账户在RBAC授权模式中对应kube-apiserver客户端证书的CommonName字段,如果没有客户端证书,将会签发一个,此接口有最大传入子账户数量上限,当前为50 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) DescribeClusterCommonNames(request *DescribeClusterCommonNamesRequest) (response *DescribeClusterCommonNamesResponse, err error) { - if request == nil { - request = NewDescribeClusterCommonNamesRequest() - } - - response = NewDescribeClusterCommonNamesResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterCommonNames -// 获取指定子账户在RBAC授权模式中对应kube-apiserver客户端证书的CommonName字段,如果没有客户端证书,将会签发一个,此接口有最大传入子账户数量上限,当前为50 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) DescribeClusterCommonNamesWithContext(ctx context.Context, request *DescribeClusterCommonNamesRequest) (response *DescribeClusterCommonNamesResponse, err error) { - if request == nil { - request = NewDescribeClusterCommonNamesRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterCommonNamesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterControllersRequest() (request *DescribeClusterControllersRequest) { - request = &DescribeClusterControllersRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterControllers") - - return -} - -func NewDescribeClusterControllersResponse() (response *DescribeClusterControllersResponse) { - response = &DescribeClusterControllersResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterControllers -// 用于查询Kubernetes的各个原生控制器是否开启 -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DescribeClusterControllers(request *DescribeClusterControllersRequest) (response *DescribeClusterControllersResponse, err error) { - if request == nil { - request = NewDescribeClusterControllersRequest() - } - - response = NewDescribeClusterControllersResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterControllers -// 用于查询Kubernetes的各个原生控制器是否开启 -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DescribeClusterControllersWithContext(ctx context.Context, request *DescribeClusterControllersRequest) (response *DescribeClusterControllersResponse, err error) { - if request == nil { - request = NewDescribeClusterControllersRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterControllersResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterEndpointStatusRequest() (request *DescribeClusterEndpointStatusRequest) { - request = &DescribeClusterEndpointStatusRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterEndpointStatus") - - return -} - -func NewDescribeClusterEndpointStatusResponse() (response *DescribeClusterEndpointStatusResponse) { - response = &DescribeClusterEndpointStatusResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterEndpointStatus -// 查询集群访问端口状态(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_KUBERNETESINTERNAL = "InternalError.KubernetesInternal" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterEndpointStatus(request *DescribeClusterEndpointStatusRequest) (response *DescribeClusterEndpointStatusResponse, err error) { - if request == nil { - request = NewDescribeClusterEndpointStatusRequest() - } - - response = NewDescribeClusterEndpointStatusResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterEndpointStatus -// 查询集群访问端口状态(独立集群开启内网/外网访问,托管集群支持开启内网访问) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_KUBERNETESINTERNAL = "InternalError.KubernetesInternal" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterEndpointStatusWithContext(ctx context.Context, request *DescribeClusterEndpointStatusRequest) (response *DescribeClusterEndpointStatusResponse, err error) { - if request == nil { - request = NewDescribeClusterEndpointStatusRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterEndpointStatusResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterEndpointVipStatusRequest() (request *DescribeClusterEndpointVipStatusRequest) { - request = &DescribeClusterEndpointVipStatusRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterEndpointVipStatus") - - return -} - -func NewDescribeClusterEndpointVipStatusResponse() (response *DescribeClusterEndpointVipStatusResponse) { - response = &DescribeClusterEndpointVipStatusResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterEndpointVipStatus -// 查询集群开启端口流程状态(仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterEndpointVipStatus(request *DescribeClusterEndpointVipStatusRequest) (response *DescribeClusterEndpointVipStatusResponse, err error) { - if request == nil { - request = NewDescribeClusterEndpointVipStatusRequest() - } - - response = NewDescribeClusterEndpointVipStatusResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterEndpointVipStatus -// 查询集群开启端口流程状态(仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" -// INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterEndpointVipStatusWithContext(ctx context.Context, request *DescribeClusterEndpointVipStatusRequest) (response *DescribeClusterEndpointVipStatusResponse, err error) { - if request == nil { - request = NewDescribeClusterEndpointVipStatusRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterEndpointVipStatusResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterInstancesRequest() (request *DescribeClusterInstancesRequest) { - request = &DescribeClusterInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterInstances") - - return -} - -func NewDescribeClusterInstancesResponse() (response *DescribeClusterInstancesResponse) { - response = &DescribeClusterInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterInstances -// -// 查询集群下节点实例信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) DescribeClusterInstances(request *DescribeClusterInstancesRequest) (response *DescribeClusterInstancesResponse, err error) { - if request == nil { - request = NewDescribeClusterInstancesRequest() - } - - response = NewDescribeClusterInstancesResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterInstances -// -// 查询集群下节点实例信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) DescribeClusterInstancesWithContext(ctx context.Context, request *DescribeClusterInstancesRequest) (response *DescribeClusterInstancesResponse, err error) { - if request == nil { - request = NewDescribeClusterInstancesRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterKubeconfigRequest() (request *DescribeClusterKubeconfigRequest) { - request = &DescribeClusterKubeconfigRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterKubeconfig") - - return -} - -func NewDescribeClusterKubeconfigResponse() (response *DescribeClusterKubeconfigResponse) { - response = &DescribeClusterKubeconfigResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterKubeconfig -// 获取集群的kubeconfig文件,不同子账户获取自己的kubeconfig文件,该文件中有每个子账户自己的kube-apiserver的客户端证书,默认首次调此接口时候创建客户端证书,时效20年,未授予任何权限,如果是集群所有者或者主账户,则默认是cluster-admin权限。 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESDELETEOPERATIONERROR = "InternalError.KubernetesDeleteOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERNETESRESOURCENOTFOUND = "ResourceNotFound.KubernetesResourceNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeClusterKubeconfig(request *DescribeClusterKubeconfigRequest) (response *DescribeClusterKubeconfigResponse, err error) { - if request == nil { - request = NewDescribeClusterKubeconfigRequest() - } - - response = NewDescribeClusterKubeconfigResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterKubeconfig -// 获取集群的kubeconfig文件,不同子账户获取自己的kubeconfig文件,该文件中有每个子账户自己的kube-apiserver的客户端证书,默认首次调此接口时候创建客户端证书,时效20年,未授予任何权限,如果是集群所有者或者主账户,则默认是cluster-admin权限。 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESDELETEOPERATIONERROR = "InternalError.KubernetesDeleteOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERNETESRESOURCENOTFOUND = "ResourceNotFound.KubernetesResourceNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeClusterKubeconfigWithContext(ctx context.Context, request *DescribeClusterKubeconfigRequest) (response *DescribeClusterKubeconfigResponse, err error) { - if request == nil { - request = NewDescribeClusterKubeconfigRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterKubeconfigResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterNodePoolDetailRequest() (request *DescribeClusterNodePoolDetailRequest) { - request = &DescribeClusterNodePoolDetailRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterNodePoolDetail") - - return -} - -func NewDescribeClusterNodePoolDetailResponse() (response *DescribeClusterNodePoolDetailResponse) { - response = &DescribeClusterNodePoolDetailResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterNodePoolDetail -// 查询节点池详情 -// -// 可能返回的错误码: -// -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeClusterNodePoolDetail(request *DescribeClusterNodePoolDetailRequest) (response *DescribeClusterNodePoolDetailResponse, err error) { - if request == nil { - request = NewDescribeClusterNodePoolDetailRequest() - } - - response = NewDescribeClusterNodePoolDetailResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterNodePoolDetail -// 查询节点池详情 -// -// 可能返回的错误码: -// -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeClusterNodePoolDetailWithContext(ctx context.Context, request *DescribeClusterNodePoolDetailRequest) (response *DescribeClusterNodePoolDetailResponse, err error) { - if request == nil { - request = NewDescribeClusterNodePoolDetailRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterNodePoolDetailResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterNodePoolsRequest() (request *DescribeClusterNodePoolsRequest) { - request = &DescribeClusterNodePoolsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterNodePools") - - return -} - -func NewDescribeClusterNodePoolsResponse() (response *DescribeClusterNodePoolsResponse) { - response = &DescribeClusterNodePoolsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterNodePools -// 查询节点池列表 -// -// 可能返回的错误码: -// -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeClusterNodePools(request *DescribeClusterNodePoolsRequest) (response *DescribeClusterNodePoolsResponse, err error) { - if request == nil { - request = NewDescribeClusterNodePoolsRequest() - } - - response = NewDescribeClusterNodePoolsResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterNodePools -// 查询节点池列表 -// -// 可能返回的错误码: -// -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -func (c *Client) DescribeClusterNodePoolsWithContext(ctx context.Context, request *DescribeClusterNodePoolsRequest) (response *DescribeClusterNodePoolsResponse, err error) { - if request == nil { - request = NewDescribeClusterNodePoolsRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterNodePoolsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterRouteTablesRequest() (request *DescribeClusterRouteTablesRequest) { - request = &DescribeClusterRouteTablesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterRouteTables") - - return -} - -func NewDescribeClusterRouteTablesResponse() (response *DescribeClusterRouteTablesResponse) { - response = &DescribeClusterRouteTablesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterRouteTables -// 查询集群路由表 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -func (c *Client) DescribeClusterRouteTables(request *DescribeClusterRouteTablesRequest) (response *DescribeClusterRouteTablesResponse, err error) { - if request == nil { - request = NewDescribeClusterRouteTablesRequest() - } - - response = NewDescribeClusterRouteTablesResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterRouteTables -// 查询集群路由表 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -func (c *Client) DescribeClusterRouteTablesWithContext(ctx context.Context, request *DescribeClusterRouteTablesRequest) (response *DescribeClusterRouteTablesResponse, err error) { - if request == nil { - request = NewDescribeClusterRouteTablesRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterRouteTablesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterRoutesRequest() (request *DescribeClusterRoutesRequest) { - request = &DescribeClusterRoutesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterRoutes") - - return -} - -func NewDescribeClusterRoutesResponse() (response *DescribeClusterRoutesResponse) { - response = &DescribeClusterRoutesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterRoutes -// 查询集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeClusterRoutes(request *DescribeClusterRoutesRequest) (response *DescribeClusterRoutesResponse, err error) { - if request == nil { - request = NewDescribeClusterRoutesRequest() - } - - response = NewDescribeClusterRoutesResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterRoutes -// 查询集群路由 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeClusterRoutesWithContext(ctx context.Context, request *DescribeClusterRoutesRequest) (response *DescribeClusterRoutesResponse, err error) { - if request == nil { - request = NewDescribeClusterRoutesRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterRoutesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClusterSecurityRequest() (request *DescribeClusterSecurityRequest) { - request = &DescribeClusterSecurityRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusterSecurity") - - return -} - -func NewDescribeClusterSecurityResponse() (response *DescribeClusterSecurityResponse) { - response = &DescribeClusterSecurityResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusterSecurity -// 集群的密钥信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_COMPONENTCLIENTHTTP = "InternalError.ComponentClientHttp" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_LBCOMMON = "InternalError.LbCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_CIDRINVALID = "InvalidParameter.CidrInvalid" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERESOURCENOTFOUND = "ResourceNotFound.KubeResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterSecurity(request *DescribeClusterSecurityRequest) (response *DescribeClusterSecurityResponse, err error) { - if request == nil { - request = NewDescribeClusterSecurityRequest() - } - - response = NewDescribeClusterSecurityResponse() - err = c.Send(request, response) - return -} - -// DescribeClusterSecurity -// 集群的密钥信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_COMPONENTCLIENTHTTP = "InternalError.ComponentClientHttp" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_LBCOMMON = "InternalError.LbCommon" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_CIDRINVALID = "InvalidParameter.CidrInvalid" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERESOURCENOTFOUND = "ResourceNotFound.KubeResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeClusterSecurityWithContext(ctx context.Context, request *DescribeClusterSecurityRequest) (response *DescribeClusterSecurityResponse, err error) { - if request == nil { - request = NewDescribeClusterSecurityRequest() - } - request.SetContext(ctx) - - response = NewDescribeClusterSecurityResponse() - err = c.Send(request, response) - return -} - -func NewDescribeClustersRequest() (request *DescribeClustersRequest) { - request = &DescribeClustersRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeClusters") - - return -} - -func NewDescribeClustersResponse() (response *DescribeClustersResponse) { - response = &DescribeClustersResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeClusters -// 查询集群列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeClusters(request *DescribeClustersRequest) (response *DescribeClustersResponse, err error) { - if request == nil { - request = NewDescribeClustersRequest() - } - - response = NewDescribeClustersResponse() - err = c.Send(request, response) - return -} - -// DescribeClusters -// 查询集群列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" -// INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" -// INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeClustersWithContext(ctx context.Context, request *DescribeClustersRequest) (response *DescribeClustersResponse, err error) { - if request == nil { - request = NewDescribeClustersRequest() - } - request.SetContext(ctx) - - response = NewDescribeClustersResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEKSClusterCredentialRequest() (request *DescribeEKSClusterCredentialRequest) { - request = &DescribeEKSClusterCredentialRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEKSClusterCredential") - - return -} - -func NewDescribeEKSClusterCredentialResponse() (response *DescribeEKSClusterCredentialResponse) { - response = &DescribeEKSClusterCredentialResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEKSClusterCredential -// 获取弹性容器集群的接入认证信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSClusterCredential(request *DescribeEKSClusterCredentialRequest) (response *DescribeEKSClusterCredentialResponse, err error) { - if request == nil { - request = NewDescribeEKSClusterCredentialRequest() - } - - response = NewDescribeEKSClusterCredentialResponse() - err = c.Send(request, response) - return -} - -// DescribeEKSClusterCredential -// 获取弹性容器集群的接入认证信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSClusterCredentialWithContext(ctx context.Context, request *DescribeEKSClusterCredentialRequest) (response *DescribeEKSClusterCredentialResponse, err error) { - if request == nil { - request = NewDescribeEKSClusterCredentialRequest() - } - request.SetContext(ctx) - - response = NewDescribeEKSClusterCredentialResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEKSClustersRequest() (request *DescribeEKSClustersRequest) { - request = &DescribeEKSClustersRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEKSClusters") - - return -} - -func NewDescribeEKSClustersResponse() (response *DescribeEKSClustersResponse) { - response = &DescribeEKSClustersResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEKSClusters -// 查询弹性集群列表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSClusters(request *DescribeEKSClustersRequest) (response *DescribeEKSClustersResponse, err error) { - if request == nil { - request = NewDescribeEKSClustersRequest() - } - - response = NewDescribeEKSClustersResponse() - err = c.Send(request, response) - return -} - -// DescribeEKSClusters -// 查询弹性集群列表 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSClustersWithContext(ctx context.Context, request *DescribeEKSClustersRequest) (response *DescribeEKSClustersResponse, err error) { - if request == nil { - request = NewDescribeEKSClustersRequest() - } - request.SetContext(ctx) - - response = NewDescribeEKSClustersResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEKSContainerInstanceEventRequest() (request *DescribeEKSContainerInstanceEventRequest) { - request = &DescribeEKSContainerInstanceEventRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEKSContainerInstanceEvent") - - return -} - -func NewDescribeEKSContainerInstanceEventResponse() (response *DescribeEKSContainerInstanceEventResponse) { - response = &DescribeEKSContainerInstanceEventResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEKSContainerInstanceEvent -// 查询容器实例的事件 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCEINSUFFICIENT = "ResourceInsufficient" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// RESOURCESSOLDOUT = "ResourcesSoldOut" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSContainerInstanceEvent(request *DescribeEKSContainerInstanceEventRequest) (response *DescribeEKSContainerInstanceEventResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstanceEventRequest() - } - - response = NewDescribeEKSContainerInstanceEventResponse() - err = c.Send(request, response) - return -} - -// DescribeEKSContainerInstanceEvent -// 查询容器实例的事件 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// RESOURCEINSUFFICIENT = "ResourceInsufficient" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// RESOURCESSOLDOUT = "ResourcesSoldOut" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeEKSContainerInstanceEventWithContext(ctx context.Context, request *DescribeEKSContainerInstanceEventRequest) (response *DescribeEKSContainerInstanceEventResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstanceEventRequest() - } - request.SetContext(ctx) - - response = NewDescribeEKSContainerInstanceEventResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEKSContainerInstanceRegionsRequest() (request *DescribeEKSContainerInstanceRegionsRequest) { - request = &DescribeEKSContainerInstanceRegionsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEKSContainerInstanceRegions") - - return -} - -func NewDescribeEKSContainerInstanceRegionsResponse() (response *DescribeEKSContainerInstanceRegionsResponse) { - response = &DescribeEKSContainerInstanceRegionsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEKSContainerInstanceRegions -// 查询容器实例支持的地域 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeEKSContainerInstanceRegions(request *DescribeEKSContainerInstanceRegionsRequest) (response *DescribeEKSContainerInstanceRegionsResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstanceRegionsRequest() - } - - response = NewDescribeEKSContainerInstanceRegionsResponse() - err = c.Send(request, response) - return -} - -// DescribeEKSContainerInstanceRegions -// 查询容器实例支持的地域 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeEKSContainerInstanceRegionsWithContext(ctx context.Context, request *DescribeEKSContainerInstanceRegionsRequest) (response *DescribeEKSContainerInstanceRegionsResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstanceRegionsRequest() - } - request.SetContext(ctx) - - response = NewDescribeEKSContainerInstanceRegionsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEKSContainerInstancesRequest() (request *DescribeEKSContainerInstancesRequest) { - request = &DescribeEKSContainerInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEKSContainerInstances") - - return -} - -func NewDescribeEKSContainerInstancesResponse() (response *DescribeEKSContainerInstancesResponse) { - response = &DescribeEKSContainerInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEKSContainerInstances -// 查询容器实例 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// FAILEDOPERATION_RBACFORBIDDEN = "FailedOperation.RBACForbidden" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeEKSContainerInstances(request *DescribeEKSContainerInstancesRequest) (response *DescribeEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstancesRequest() - } - - response = NewDescribeEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -// DescribeEKSContainerInstances -// 查询容器实例 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// FAILEDOPERATION_RBACFORBIDDEN = "FailedOperation.RBACForbidden" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeEKSContainerInstancesWithContext(ctx context.Context, request *DescribeEKSContainerInstancesRequest) (response *DescribeEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewDescribeEKSContainerInstancesRequest() - } - request.SetContext(ctx) - - response = NewDescribeEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEksContainerInstanceLogRequest() (request *DescribeEksContainerInstanceLogRequest) { - request = &DescribeEksContainerInstanceLogRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEksContainerInstanceLog") - - return -} - -func NewDescribeEksContainerInstanceLogResponse() (response *DescribeEksContainerInstanceLogResponse) { - response = &DescribeEksContainerInstanceLogResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEksContainerInstanceLog -// 查询容器实例中容器日志 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CONTAINERNOTFOUND = "InternalError.ContainerNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE_EKSCONTAINERSTATUS = "ResourceUnavailable.EksContainerStatus" -func (c *Client) DescribeEksContainerInstanceLog(request *DescribeEksContainerInstanceLogRequest) (response *DescribeEksContainerInstanceLogResponse, err error) { - if request == nil { - request = NewDescribeEksContainerInstanceLogRequest() - } - - response = NewDescribeEksContainerInstanceLogResponse() - err = c.Send(request, response) - return -} - -// DescribeEksContainerInstanceLog -// 查询容器实例中容器日志 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CONTAINERNOTFOUND = "InternalError.ContainerNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE_EKSCONTAINERSTATUS = "ResourceUnavailable.EksContainerStatus" -func (c *Client) DescribeEksContainerInstanceLogWithContext(ctx context.Context, request *DescribeEksContainerInstanceLogRequest) (response *DescribeEksContainerInstanceLogResponse, err error) { - if request == nil { - request = NewDescribeEksContainerInstanceLogRequest() - } - request.SetContext(ctx) - - response = NewDescribeEksContainerInstanceLogResponse() - err = c.Send(request, response) - return -} - -func NewDescribeEnableVpcCniProgressRequest() (request *DescribeEnableVpcCniProgressRequest) { - request = &DescribeEnableVpcCniProgressRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeEnableVpcCniProgress") - - return -} - -func NewDescribeEnableVpcCniProgressResponse() (response *DescribeEnableVpcCniProgressResponse) { - response = &DescribeEnableVpcCniProgressResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeEnableVpcCniProgress -// 本接口用于查询开启vpc-cni模式的任务进度 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribeEnableVpcCniProgress(request *DescribeEnableVpcCniProgressRequest) (response *DescribeEnableVpcCniProgressResponse, err error) { - if request == nil { - request = NewDescribeEnableVpcCniProgressRequest() - } - - response = NewDescribeEnableVpcCniProgressResponse() - err = c.Send(request, response) - return -} - -// DescribeEnableVpcCniProgress -// 本接口用于查询开启vpc-cni模式的任务进度 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribeEnableVpcCniProgressWithContext(ctx context.Context, request *DescribeEnableVpcCniProgressRequest) (response *DescribeEnableVpcCniProgressResponse, err error) { - if request == nil { - request = NewDescribeEnableVpcCniProgressRequest() - } - request.SetContext(ctx) - - response = NewDescribeEnableVpcCniProgressResponse() - err = c.Send(request, response) - return -} - -func NewDescribeExistedInstancesRequest() (request *DescribeExistedInstancesRequest) { - request = &DescribeExistedInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeExistedInstances") - - return -} - -func NewDescribeExistedInstancesResponse() (response *DescribeExistedInstancesResponse) { - response = &DescribeExistedInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeExistedInstances -// 查询已经存在的节点,判断是否可以加入集群 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CREATEMASTERFAILED = "InternalError.CreateMasterFailed" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeExistedInstances(request *DescribeExistedInstancesRequest) (response *DescribeExistedInstancesResponse, err error) { - if request == nil { - request = NewDescribeExistedInstancesRequest() - } - - response = NewDescribeExistedInstancesResponse() - err = c.Send(request, response) - return -} - -// DescribeExistedInstances -// 查询已经存在的节点,判断是否可以加入集群 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CREATEMASTERFAILED = "InternalError.CreateMasterFailed" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeExistedInstancesWithContext(ctx context.Context, request *DescribeExistedInstancesRequest) (response *DescribeExistedInstancesResponse, err error) { - if request == nil { - request = NewDescribeExistedInstancesRequest() - } - request.SetContext(ctx) - - response = NewDescribeExistedInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeExternalClusterSpecRequest() (request *DescribeExternalClusterSpecRequest) { - request = &DescribeExternalClusterSpecRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeExternalClusterSpec") - - return -} - -func NewDescribeExternalClusterSpecResponse() (response *DescribeExternalClusterSpecResponse) { - response = &DescribeExternalClusterSpecResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeExternalClusterSpec -// 获取导入第三方集群YAML定义 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESDELETEOPERATIONERROR = "InternalError.KubernetesDeleteOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERNETESRESOURCENOTFOUND = "ResourceNotFound.KubernetesResourceNotFound" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeExternalClusterSpec(request *DescribeExternalClusterSpecRequest) (response *DescribeExternalClusterSpecResponse, err error) { - if request == nil { - request = NewDescribeExternalClusterSpecRequest() - } - - response = NewDescribeExternalClusterSpecResponse() - err = c.Send(request, response) - return -} - -// DescribeExternalClusterSpec -// 获取导入第三方集群YAML定义 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" -// INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" -// INTERNALERROR_KUBERNETESDELETEOPERATIONERROR = "InternalError.KubernetesDeleteOperationError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// RESOURCENOTFOUND_KUBERNETESRESOURCENOTFOUND = "ResourceNotFound.KubernetesResourceNotFound" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -// UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" -func (c *Client) DescribeExternalClusterSpecWithContext(ctx context.Context, request *DescribeExternalClusterSpecRequest) (response *DescribeExternalClusterSpecResponse, err error) { - if request == nil { - request = NewDescribeExternalClusterSpecRequest() - } - request.SetContext(ctx) - - response = NewDescribeExternalClusterSpecResponse() - err = c.Send(request, response) - return -} - -func NewDescribeImagesRequest() (request *DescribeImagesRequest) { - request = &DescribeImagesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeImages") - - return -} - -func NewDescribeImagesResponse() (response *DescribeImagesResponse) { - response = &DescribeImagesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeImages -// 获取镜像信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeImages(request *DescribeImagesRequest) (response *DescribeImagesResponse, err error) { - if request == nil { - request = NewDescribeImagesRequest() - } - - response = NewDescribeImagesResponse() - err = c.Send(request, response) - return -} - -// DescribeImages -// 获取镜像信息 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeImagesWithContext(ctx context.Context, request *DescribeImagesRequest) (response *DescribeImagesResponse, err error) { - if request == nil { - request = NewDescribeImagesRequest() - } - request.SetContext(ctx) - - response = NewDescribeImagesResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusAgentInstancesRequest() (request *DescribePrometheusAgentInstancesRequest) { - request = &DescribePrometheusAgentInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusAgentInstances") - - return -} - -func NewDescribePrometheusAgentInstancesResponse() (response *DescribePrometheusAgentInstancesResponse) { - response = &DescribePrometheusAgentInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusAgentInstances -// 获取关联目标集群的实例列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribePrometheusAgentInstances(request *DescribePrometheusAgentInstancesRequest) (response *DescribePrometheusAgentInstancesResponse, err error) { - if request == nil { - request = NewDescribePrometheusAgentInstancesRequest() - } - - response = NewDescribePrometheusAgentInstancesResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusAgentInstances -// 获取关联目标集群的实例列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribePrometheusAgentInstancesWithContext(ctx context.Context, request *DescribePrometheusAgentInstancesRequest) (response *DescribePrometheusAgentInstancesResponse, err error) { - if request == nil { - request = NewDescribePrometheusAgentInstancesRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusAgentInstancesResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusAgentsRequest() (request *DescribePrometheusAgentsRequest) { - request = &DescribePrometheusAgentsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusAgents") - - return -} - -func NewDescribePrometheusAgentsResponse() (response *DescribePrometheusAgentsResponse) { - response = &DescribePrometheusAgentsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusAgents -// 获取被关联集群列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DescribePrometheusAgents(request *DescribePrometheusAgentsRequest) (response *DescribePrometheusAgentsResponse, err error) { - if request == nil { - request = NewDescribePrometheusAgentsRequest() - } - - response = NewDescribePrometheusAgentsResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusAgents -// 获取被关联集群列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DescribePrometheusAgentsWithContext(ctx context.Context, request *DescribePrometheusAgentsRequest) (response *DescribePrometheusAgentsResponse, err error) { - if request == nil { - request = NewDescribePrometheusAgentsRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusAgentsResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusAlertHistoryRequest() (request *DescribePrometheusAlertHistoryRequest) { - request = &DescribePrometheusAlertHistoryRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusAlertHistory") - - return -} - -func NewDescribePrometheusAlertHistoryResponse() (response *DescribePrometheusAlertHistoryResponse) { - response = &DescribePrometheusAlertHistoryResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusAlertHistory -// 获取告警历史 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusAlertHistory(request *DescribePrometheusAlertHistoryRequest) (response *DescribePrometheusAlertHistoryResponse, err error) { - if request == nil { - request = NewDescribePrometheusAlertHistoryRequest() - } - - response = NewDescribePrometheusAlertHistoryResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusAlertHistory -// 获取告警历史 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusAlertHistoryWithContext(ctx context.Context, request *DescribePrometheusAlertHistoryRequest) (response *DescribePrometheusAlertHistoryResponse, err error) { - if request == nil { - request = NewDescribePrometheusAlertHistoryRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusAlertHistoryResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusAlertRuleRequest() (request *DescribePrometheusAlertRuleRequest) { - request = &DescribePrometheusAlertRuleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusAlertRule") - - return -} - -func NewDescribePrometheusAlertRuleResponse() (response *DescribePrometheusAlertRuleResponse) { - response = &DescribePrometheusAlertRuleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusAlertRule -// 获取告警规则列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusAlertRule(request *DescribePrometheusAlertRuleRequest) (response *DescribePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewDescribePrometheusAlertRuleRequest() - } - - response = NewDescribePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusAlertRule -// 获取告警规则列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusAlertRuleWithContext(ctx context.Context, request *DescribePrometheusAlertRuleRequest) (response *DescribePrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewDescribePrometheusAlertRuleRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusInstanceRequest() (request *DescribePrometheusInstanceRequest) { - request = &DescribePrometheusInstanceRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusInstance") - - return -} - -func NewDescribePrometheusInstanceResponse() (response *DescribePrometheusInstanceResponse) { - response = &DescribePrometheusInstanceResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusInstance -// 获取实例详细信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusInstance(request *DescribePrometheusInstanceRequest) (response *DescribePrometheusInstanceResponse, err error) { - if request == nil { - request = NewDescribePrometheusInstanceRequest() - } - - response = NewDescribePrometheusInstanceResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusInstance -// 获取实例详细信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusInstanceWithContext(ctx context.Context, request *DescribePrometheusInstanceRequest) (response *DescribePrometheusInstanceResponse, err error) { - if request == nil { - request = NewDescribePrometheusInstanceRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusInstanceResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusOverviewsRequest() (request *DescribePrometheusOverviewsRequest) { - request = &DescribePrometheusOverviewsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusOverviews") - - return -} - -func NewDescribePrometheusOverviewsResponse() (response *DescribePrometheusOverviewsResponse) { - response = &DescribePrometheusOverviewsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusOverviews -// 获取实例列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribePrometheusOverviews(request *DescribePrometheusOverviewsRequest) (response *DescribePrometheusOverviewsResponse, err error) { - if request == nil { - request = NewDescribePrometheusOverviewsRequest() - } - - response = NewDescribePrometheusOverviewsResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusOverviews -// 获取实例列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribePrometheusOverviewsWithContext(ctx context.Context, request *DescribePrometheusOverviewsRequest) (response *DescribePrometheusOverviewsResponse, err error) { - if request == nil { - request = NewDescribePrometheusOverviewsRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusOverviewsResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusTargetsRequest() (request *DescribePrometheusTargetsRequest) { - request = &DescribePrometheusTargetsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusTargets") - - return -} - -func NewDescribePrometheusTargetsResponse() (response *DescribePrometheusTargetsResponse) { - response = &DescribePrometheusTargetsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusTargets -// 获取targets信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PROMCLUSTERNOTFOUND = "InvalidParameter.PromClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusTargets(request *DescribePrometheusTargetsRequest) (response *DescribePrometheusTargetsResponse, err error) { - if request == nil { - request = NewDescribePrometheusTargetsRequest() - } - - response = NewDescribePrometheusTargetsResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusTargets -// 获取targets信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PROMCLUSTERNOTFOUND = "InvalidParameter.PromClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -func (c *Client) DescribePrometheusTargetsWithContext(ctx context.Context, request *DescribePrometheusTargetsRequest) (response *DescribePrometheusTargetsResponse, err error) { - if request == nil { - request = NewDescribePrometheusTargetsRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusTargetsResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusTemplateSyncRequest() (request *DescribePrometheusTemplateSyncRequest) { - request = &DescribePrometheusTemplateSyncRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusTemplateSync") - - return -} - -func NewDescribePrometheusTemplateSyncResponse() (response *DescribePrometheusTemplateSyncResponse) { - response = &DescribePrometheusTemplateSyncResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusTemplateSync -// 获取模板同步信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DescribePrometheusTemplateSync(request *DescribePrometheusTemplateSyncRequest) (response *DescribePrometheusTemplateSyncResponse, err error) { - if request == nil { - request = NewDescribePrometheusTemplateSyncRequest() - } - - response = NewDescribePrometheusTemplateSyncResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusTemplateSync -// 获取模板同步信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) DescribePrometheusTemplateSyncWithContext(ctx context.Context, request *DescribePrometheusTemplateSyncRequest) (response *DescribePrometheusTemplateSyncResponse, err error) { - if request == nil { - request = NewDescribePrometheusTemplateSyncRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusTemplateSyncResponse() - err = c.Send(request, response) - return -} - -func NewDescribePrometheusTemplatesRequest() (request *DescribePrometheusTemplatesRequest) { - request = &DescribePrometheusTemplatesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribePrometheusTemplates") - - return -} - -func NewDescribePrometheusTemplatesResponse() (response *DescribePrometheusTemplatesResponse) { - response = &DescribePrometheusTemplatesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribePrometheusTemplates -// 拉取模板列表,默认模板将总是在最前面 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribePrometheusTemplates(request *DescribePrometheusTemplatesRequest) (response *DescribePrometheusTemplatesResponse, err error) { - if request == nil { - request = NewDescribePrometheusTemplatesRequest() - } - - response = NewDescribePrometheusTemplatesResponse() - err = c.Send(request, response) - return -} - -// DescribePrometheusTemplates -// 拉取模板列表,默认模板将总是在最前面 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -func (c *Client) DescribePrometheusTemplatesWithContext(ctx context.Context, request *DescribePrometheusTemplatesRequest) (response *DescribePrometheusTemplatesResponse, err error) { - if request == nil { - request = NewDescribePrometheusTemplatesRequest() - } - request.SetContext(ctx) - - response = NewDescribePrometheusTemplatesResponse() - err = c.Send(request, response) - return -} - -func NewDescribeRegionsRequest() (request *DescribeRegionsRequest) { - request = &DescribeRegionsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeRegions") - - return -} - -func NewDescribeRegionsResponse() (response *DescribeRegionsResponse) { - response = &DescribeRegionsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeRegions -// 获取容器服务支持的所有地域 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeRegions(request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { - if request == nil { - request = NewDescribeRegionsRequest() - } - - response = NewDescribeRegionsResponse() - err = c.Send(request, response) - return -} - -// DescribeRegions -// 获取容器服务支持的所有地域 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeRegionsWithContext(ctx context.Context, request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { - if request == nil { - request = NewDescribeRegionsRequest() - } - request.SetContext(ctx) - - response = NewDescribeRegionsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeRouteTableConflictsRequest() (request *DescribeRouteTableConflictsRequest) { - request = &DescribeRouteTableConflictsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeRouteTableConflicts") - - return -} - -func NewDescribeRouteTableConflictsResponse() (response *DescribeRouteTableConflictsResponse) { - response = &DescribeRouteTableConflictsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeRouteTableConflicts -// 查询路由表冲突列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CIDRMASKSIZEOUTOFRANGE = "InternalError.CidrMaskSizeOutOfRange" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeRouteTableConflicts(request *DescribeRouteTableConflictsRequest) (response *DescribeRouteTableConflictsResponse, err error) { - if request == nil { - request = NewDescribeRouteTableConflictsRequest() - } - - response = NewDescribeRouteTableConflictsResponse() - err = c.Send(request, response) - return -} - -// DescribeRouteTableConflicts -// 查询路由表冲突列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CIDRMASKSIZEOUTOFRANGE = "InternalError.CidrMaskSizeOutOfRange" -// INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) DescribeRouteTableConflictsWithContext(ctx context.Context, request *DescribeRouteTableConflictsRequest) (response *DescribeRouteTableConflictsResponse, err error) { - if request == nil { - request = NewDescribeRouteTableConflictsRequest() - } - request.SetContext(ctx) - - response = NewDescribeRouteTableConflictsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeVersionsRequest() (request *DescribeVersionsRequest) { - request = &DescribeVersionsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeVersions") - - return -} - -func NewDescribeVersionsResponse() (response *DescribeVersionsResponse) { - response = &DescribeVersionsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeVersions -// 获取集群版本信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeVersions(request *DescribeVersionsRequest) (response *DescribeVersionsResponse, err error) { - if request == nil { - request = NewDescribeVersionsRequest() - } - - response = NewDescribeVersionsResponse() - err = c.Send(request, response) - return -} - -// DescribeVersions -// 获取集群版本信息 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeVersionsWithContext(ctx context.Context, request *DescribeVersionsRequest) (response *DescribeVersionsResponse, err error) { - if request == nil { - request = NewDescribeVersionsRequest() - } - request.SetContext(ctx) - - response = NewDescribeVersionsResponse() - err = c.Send(request, response) - return -} - -func NewDescribeVpcCniPodLimitsRequest() (request *DescribeVpcCniPodLimitsRequest) { - request = &DescribeVpcCniPodLimitsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DescribeVpcCniPodLimits") - - return -} - -func NewDescribeVpcCniPodLimitsResponse() (response *DescribeVpcCniPodLimitsResponse) { - response = &DescribeVpcCniPodLimitsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DescribeVpcCniPodLimits -// 本接口查询当前用户和地域在指定可用区下的机型可支持的最大 TKE VPC-CNI 网络模式的 Pod 数量 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeVpcCniPodLimits(request *DescribeVpcCniPodLimitsRequest) (response *DescribeVpcCniPodLimitsResponse, err error) { - if request == nil { - request = NewDescribeVpcCniPodLimitsRequest() - } - - response = NewDescribeVpcCniPodLimitsResponse() - err = c.Send(request, response) - return -} - -// DescribeVpcCniPodLimits -// 本接口查询当前用户和地域在指定可用区下的机型可支持的最大 TKE VPC-CNI 网络模式的 Pod 数量 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) DescribeVpcCniPodLimitsWithContext(ctx context.Context, request *DescribeVpcCniPodLimitsRequest) (response *DescribeVpcCniPodLimitsResponse, err error) { - if request == nil { - request = NewDescribeVpcCniPodLimitsRequest() - } - request.SetContext(ctx) - - response = NewDescribeVpcCniPodLimitsResponse() - err = c.Send(request, response) - return -} - -func NewDisableClusterDeletionProtectionRequest() (request *DisableClusterDeletionProtectionRequest) { - request = &DisableClusterDeletionProtectionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DisableClusterDeletionProtection") - - return -} - -func NewDisableClusterDeletionProtectionResponse() (response *DisableClusterDeletionProtectionResponse) { - response = &DisableClusterDeletionProtectionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DisableClusterDeletionProtection -// 关闭集群删除保护 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DisableClusterDeletionProtection(request *DisableClusterDeletionProtectionRequest) (response *DisableClusterDeletionProtectionResponse, err error) { - if request == nil { - request = NewDisableClusterDeletionProtectionRequest() - } - - response = NewDisableClusterDeletionProtectionResponse() - err = c.Send(request, response) - return -} - -// DisableClusterDeletionProtection -// 关闭集群删除保护 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DisableClusterDeletionProtectionWithContext(ctx context.Context, request *DisableClusterDeletionProtectionRequest) (response *DisableClusterDeletionProtectionResponse, err error) { - if request == nil { - request = NewDisableClusterDeletionProtectionRequest() - } - request.SetContext(ctx) - - response = NewDisableClusterDeletionProtectionResponse() - err = c.Send(request, response) - return -} - -func NewDisableVpcCniNetworkTypeRequest() (request *DisableVpcCniNetworkTypeRequest) { - request = &DisableVpcCniNetworkTypeRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "DisableVpcCniNetworkType") - - return -} - -func NewDisableVpcCniNetworkTypeResponse() (response *DisableVpcCniNetworkTypeResponse) { - response = &DisableVpcCniNetworkTypeResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// DisableVpcCniNetworkType -// 提供给附加了VPC-CNI能力的Global-Route集群关闭VPC-CNI -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DisableVpcCniNetworkType(request *DisableVpcCniNetworkTypeRequest) (response *DisableVpcCniNetworkTypeResponse, err error) { - if request == nil { - request = NewDisableVpcCniNetworkTypeRequest() - } - - response = NewDisableVpcCniNetworkTypeResponse() - err = c.Send(request, response) - return -} - -// DisableVpcCniNetworkType -// 提供给附加了VPC-CNI能力的Global-Route集群关闭VPC-CNI -// -// 可能返回的错误码: -// -// INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" -// INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) DisableVpcCniNetworkTypeWithContext(ctx context.Context, request *DisableVpcCniNetworkTypeRequest) (response *DisableVpcCniNetworkTypeResponse, err error) { - if request == nil { - request = NewDisableVpcCniNetworkTypeRequest() - } - request.SetContext(ctx) - - response = NewDisableVpcCniNetworkTypeResponse() - err = c.Send(request, response) - return -} - -func NewEnableClusterDeletionProtectionRequest() (request *EnableClusterDeletionProtectionRequest) { - request = &EnableClusterDeletionProtectionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "EnableClusterDeletionProtection") - - return -} - -func NewEnableClusterDeletionProtectionResponse() (response *EnableClusterDeletionProtectionResponse) { - response = &EnableClusterDeletionProtectionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// EnableClusterDeletionProtection -// 启用集群删除保护 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) EnableClusterDeletionProtection(request *EnableClusterDeletionProtectionRequest) (response *EnableClusterDeletionProtectionResponse, err error) { - if request == nil { - request = NewEnableClusterDeletionProtectionRequest() - } - - response = NewEnableClusterDeletionProtectionResponse() - err = c.Send(request, response) - return -} - -// EnableClusterDeletionProtection -// 启用集群删除保护 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) EnableClusterDeletionProtectionWithContext(ctx context.Context, request *EnableClusterDeletionProtectionRequest) (response *EnableClusterDeletionProtectionResponse, err error) { - if request == nil { - request = NewEnableClusterDeletionProtectionRequest() - } - request.SetContext(ctx) - - response = NewEnableClusterDeletionProtectionResponse() - err = c.Send(request, response) - return -} - -func NewEnableVpcCniNetworkTypeRequest() (request *EnableVpcCniNetworkTypeRequest) { - request = &EnableVpcCniNetworkTypeRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "EnableVpcCniNetworkType") - - return -} - -func NewEnableVpcCniNetworkTypeResponse() (response *EnableVpcCniNetworkTypeResponse) { - response = &EnableVpcCniNetworkTypeResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// EnableVpcCniNetworkType -// GR集群可以通过本接口附加vpc-cni容器网络插件,开启vpc-cni容器网络能力 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) EnableVpcCniNetworkType(request *EnableVpcCniNetworkTypeRequest) (response *EnableVpcCniNetworkTypeResponse, err error) { - if request == nil { - request = NewEnableVpcCniNetworkTypeRequest() - } - - response = NewEnableVpcCniNetworkTypeResponse() - err = c.Send(request, response) - return -} - -// EnableVpcCniNetworkType -// GR集群可以通过本接口附加vpc-cni容器网络插件,开启vpc-cni容器网络能力 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) EnableVpcCniNetworkTypeWithContext(ctx context.Context, request *EnableVpcCniNetworkTypeRequest) (response *EnableVpcCniNetworkTypeResponse, err error) { - if request == nil { - request = NewEnableVpcCniNetworkTypeRequest() - } - request.SetContext(ctx) - - response = NewEnableVpcCniNetworkTypeResponse() - err = c.Send(request, response) - return -} - -func NewForwardApplicationRequestV3Request() (request *ForwardApplicationRequestV3Request) { - request = &ForwardApplicationRequestV3Request{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ForwardApplicationRequestV3") - - return -} - -func NewForwardApplicationRequestV3Response() (response *ForwardApplicationRequestV3Response) { - response = &ForwardApplicationRequestV3Response{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ForwardApplicationRequestV3 -// 操作TKE集群的addon -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// FAILEDOPERATION_RBACFORBIDDEN = "FailedOperation.RBACForbidden" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) ForwardApplicationRequestV3(request *ForwardApplicationRequestV3Request) (response *ForwardApplicationRequestV3Response, err error) { - if request == nil { - request = NewForwardApplicationRequestV3Request() - } - - response = NewForwardApplicationRequestV3Response() - err = c.Send(request, response) - return -} - -// ForwardApplicationRequestV3 -// 操作TKE集群的addon -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// FAILEDOPERATION_RBACFORBIDDEN = "FailedOperation.RBACForbidden" -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -func (c *Client) ForwardApplicationRequestV3WithContext(ctx context.Context, request *ForwardApplicationRequestV3Request) (response *ForwardApplicationRequestV3Response, err error) { - if request == nil { - request = NewForwardApplicationRequestV3Request() - } - request.SetContext(ctx) - - response = NewForwardApplicationRequestV3Response() - err = c.Send(request, response) - return -} - -func NewGetTkeAppChartListRequest() (request *GetTkeAppChartListRequest) { - request = &GetTkeAppChartListRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "GetTkeAppChartList") - - return -} - -func NewGetTkeAppChartListResponse() (response *GetTkeAppChartListResponse) { - response = &GetTkeAppChartListResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// GetTkeAppChartList -// 获取TKE支持的App列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) GetTkeAppChartList(request *GetTkeAppChartListRequest) (response *GetTkeAppChartListResponse, err error) { - if request == nil { - request = NewGetTkeAppChartListRequest() - } - - response = NewGetTkeAppChartListResponse() - err = c.Send(request, response) - return -} - -// GetTkeAppChartList -// 获取TKE支持的App列表 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -func (c *Client) GetTkeAppChartListWithContext(ctx context.Context, request *GetTkeAppChartListRequest) (response *GetTkeAppChartListResponse, err error) { - if request == nil { - request = NewGetTkeAppChartListRequest() - } - request.SetContext(ctx) - - response = NewGetTkeAppChartListResponse() - err = c.Send(request, response) - return -} - -func NewGetUpgradeInstanceProgressRequest() (request *GetUpgradeInstanceProgressRequest) { - request = &GetUpgradeInstanceProgressRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "GetUpgradeInstanceProgress") - - return -} - -func NewGetUpgradeInstanceProgressResponse() (response *GetUpgradeInstanceProgressResponse) { - response = &GetUpgradeInstanceProgressResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// GetUpgradeInstanceProgress -// 获得节点升级当前的进度 -// -// 可能返回的错误码: -// -// INTERNALERROR_TASKNOTFOUND = "InternalError.TaskNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) GetUpgradeInstanceProgress(request *GetUpgradeInstanceProgressRequest) (response *GetUpgradeInstanceProgressResponse, err error) { - if request == nil { - request = NewGetUpgradeInstanceProgressRequest() - } - - response = NewGetUpgradeInstanceProgressResponse() - err = c.Send(request, response) - return -} - -// GetUpgradeInstanceProgress -// 获得节点升级当前的进度 -// -// 可能返回的错误码: -// -// INTERNALERROR_TASKNOTFOUND = "InternalError.TaskNotFound" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) GetUpgradeInstanceProgressWithContext(ctx context.Context, request *GetUpgradeInstanceProgressRequest) (response *GetUpgradeInstanceProgressResponse, err error) { - if request == nil { - request = NewGetUpgradeInstanceProgressRequest() - } - request.SetContext(ctx) - - response = NewGetUpgradeInstanceProgressResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterAsGroupAttributeRequest() (request *ModifyClusterAsGroupAttributeRequest) { - request = &ModifyClusterAsGroupAttributeRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterAsGroupAttribute") - - return -} - -func NewModifyClusterAsGroupAttributeResponse() (response *ModifyClusterAsGroupAttributeResponse) { - response = &ModifyClusterAsGroupAttributeResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterAsGroupAttribute -// 修改集群伸缩组属性 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_CIDROUTOFROUTETABLE = "InvalidParameter.CidrOutOfRouteTable" -// INVALIDPARAMETER_GATEWAYALREADYASSOCIATEDCIDR = "InvalidParameter.GatewayAlreadyAssociatedCidr" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterAsGroupAttribute(request *ModifyClusterAsGroupAttributeRequest) (response *ModifyClusterAsGroupAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAsGroupAttributeRequest() - } - - response = NewModifyClusterAsGroupAttributeResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterAsGroupAttribute -// 修改集群伸缩组属性 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" -// INVALIDPARAMETER_CIDROUTOFROUTETABLE = "InvalidParameter.CidrOutOfRouteTable" -// INVALIDPARAMETER_GATEWAYALREADYASSOCIATEDCIDR = "InvalidParameter.GatewayAlreadyAssociatedCidr" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterAsGroupAttributeWithContext(ctx context.Context, request *ModifyClusterAsGroupAttributeRequest) (response *ModifyClusterAsGroupAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAsGroupAttributeRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterAsGroupAttributeResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterAsGroupOptionAttributeRequest() (request *ModifyClusterAsGroupOptionAttributeRequest) { - request = &ModifyClusterAsGroupOptionAttributeRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterAsGroupOptionAttribute") - - return -} - -func NewModifyClusterAsGroupOptionAttributeResponse() (response *ModifyClusterAsGroupOptionAttributeResponse) { - response = &ModifyClusterAsGroupOptionAttributeResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterAsGroupOptionAttribute -// 修改集群弹性伸缩属性 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterAsGroupOptionAttribute(request *ModifyClusterAsGroupOptionAttributeRequest) (response *ModifyClusterAsGroupOptionAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAsGroupOptionAttributeRequest() - } - - response = NewModifyClusterAsGroupOptionAttributeResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterAsGroupOptionAttribute -// 修改集群弹性伸缩属性 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ASCOMMON = "InternalError.AsCommon" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" -// INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" -// INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterAsGroupOptionAttributeWithContext(ctx context.Context, request *ModifyClusterAsGroupOptionAttributeRequest) (response *ModifyClusterAsGroupOptionAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAsGroupOptionAttributeRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterAsGroupOptionAttributeResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterAttributeRequest() (request *ModifyClusterAttributeRequest) { - request = &ModifyClusterAttributeRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterAttribute") - - return -} - -func NewModifyClusterAttributeResponse() (response *ModifyClusterAttributeResponse) { - response = &ModifyClusterAttributeResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterAttribute -// 修改集群属性 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -func (c *Client) ModifyClusterAttribute(request *ModifyClusterAttributeRequest) (response *ModifyClusterAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAttributeRequest() - } - - response = NewModifyClusterAttributeResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterAttribute -// 修改集群属性 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -func (c *Client) ModifyClusterAttributeWithContext(ctx context.Context, request *ModifyClusterAttributeRequest) (response *ModifyClusterAttributeResponse, err error) { - if request == nil { - request = NewModifyClusterAttributeRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterAttributeResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterAuthenticationOptionsRequest() (request *ModifyClusterAuthenticationOptionsRequest) { - request = &ModifyClusterAuthenticationOptionsRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterAuthenticationOptions") - - return -} - -func NewModifyClusterAuthenticationOptionsResponse() (response *ModifyClusterAuthenticationOptionsResponse) { - response = &ModifyClusterAuthenticationOptionsResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterAuthenticationOptions -// 修改集群认证配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) ModifyClusterAuthenticationOptions(request *ModifyClusterAuthenticationOptionsRequest) (response *ModifyClusterAuthenticationOptionsResponse, err error) { - if request == nil { - request = NewModifyClusterAuthenticationOptionsRequest() - } - - response = NewModifyClusterAuthenticationOptionsResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterAuthenticationOptions -// 修改集群认证配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER = "InvalidParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) ModifyClusterAuthenticationOptionsWithContext(ctx context.Context, request *ModifyClusterAuthenticationOptionsRequest) (response *ModifyClusterAuthenticationOptionsResponse, err error) { - if request == nil { - request = NewModifyClusterAuthenticationOptionsRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterAuthenticationOptionsResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterEndpointSPRequest() (request *ModifyClusterEndpointSPRequest) { - request = &ModifyClusterEndpointSPRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterEndpointSP") - - return -} - -func NewModifyClusterEndpointSPResponse() (response *ModifyClusterEndpointSPResponse) { - response = &ModifyClusterEndpointSPResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterEndpointSP -// 修改托管集群外网端口的安全策略(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCUNEXPECTEDERROR = "InternalError.VPCUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterEndpointSP(request *ModifyClusterEndpointSPRequest) (response *ModifyClusterEndpointSPResponse, err error) { - if request == nil { - request = NewModifyClusterEndpointSPRequest() - } - - response = NewModifyClusterEndpointSPResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterEndpointSP -// 修改托管集群外网端口的安全策略(老的方式,仅支持托管集群外网端口) -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INTERNALERROR_VPCUNEXPECTEDERROR = "InternalError.VPCUnexpectedError" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// OPERATIONDENIED = "OperationDenied" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) ModifyClusterEndpointSPWithContext(ctx context.Context, request *ModifyClusterEndpointSPRequest) (response *ModifyClusterEndpointSPResponse, err error) { - if request == nil { - request = NewModifyClusterEndpointSPRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterEndpointSPResponse() - err = c.Send(request, response) - return -} - -func NewModifyClusterNodePoolRequest() (request *ModifyClusterNodePoolRequest) { - request = &ModifyClusterNodePoolRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyClusterNodePool") - - return -} - -func NewModifyClusterNodePoolResponse() (response *ModifyClusterNodePoolResponse) { - response = &ModifyClusterNodePoolResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyClusterNodePool -// 编辑节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// OPERATIONDENIED = "OperationDenied" -// UNSUPPORTEDOPERATION_CAENABLEFAILED = "UnsupportedOperation.CaEnableFailed" -func (c *Client) ModifyClusterNodePool(request *ModifyClusterNodePoolRequest) (response *ModifyClusterNodePoolResponse, err error) { - if request == nil { - request = NewModifyClusterNodePoolRequest() - } - - response = NewModifyClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -// ModifyClusterNodePool -// 编辑节点池 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// OPERATIONDENIED = "OperationDenied" -// UNSUPPORTEDOPERATION_CAENABLEFAILED = "UnsupportedOperation.CaEnableFailed" -func (c *Client) ModifyClusterNodePoolWithContext(ctx context.Context, request *ModifyClusterNodePoolRequest) (response *ModifyClusterNodePoolResponse, err error) { - if request == nil { - request = NewModifyClusterNodePoolRequest() - } - request.SetContext(ctx) - - response = NewModifyClusterNodePoolResponse() - err = c.Send(request, response) - return -} - -func NewModifyNodePoolDesiredCapacityAboutAsgRequest() (request *ModifyNodePoolDesiredCapacityAboutAsgRequest) { - request = &ModifyNodePoolDesiredCapacityAboutAsgRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyNodePoolDesiredCapacityAboutAsg") - - return -} - -func NewModifyNodePoolDesiredCapacityAboutAsgResponse() (response *ModifyNodePoolDesiredCapacityAboutAsgResponse) { - response = &ModifyNodePoolDesiredCapacityAboutAsgResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyNodePoolDesiredCapacityAboutAsg -// 修改节点池关联伸缩组的期望实例数 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ASASGNOTEXIST = "ResourceNotFound.AsAsgNotExist" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// UNKNOWNPARAMETER = "UnknownParameter" -func (c *Client) ModifyNodePoolDesiredCapacityAboutAsg(request *ModifyNodePoolDesiredCapacityAboutAsgRequest) (response *ModifyNodePoolDesiredCapacityAboutAsgResponse, err error) { - if request == nil { - request = NewModifyNodePoolDesiredCapacityAboutAsgRequest() - } - - response = NewModifyNodePoolDesiredCapacityAboutAsgResponse() - err = c.Send(request, response) - return -} - -// ModifyNodePoolDesiredCapacityAboutAsg -// 修改节点池关联伸缩组的期望实例数 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND_ASASGNOTEXIST = "ResourceNotFound.AsAsgNotExist" -// RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" -// UNKNOWNPARAMETER = "UnknownParameter" -func (c *Client) ModifyNodePoolDesiredCapacityAboutAsgWithContext(ctx context.Context, request *ModifyNodePoolDesiredCapacityAboutAsgRequest) (response *ModifyNodePoolDesiredCapacityAboutAsgResponse, err error) { - if request == nil { - request = NewModifyNodePoolDesiredCapacityAboutAsgRequest() - } - request.SetContext(ctx) - - response = NewModifyNodePoolDesiredCapacityAboutAsgResponse() - err = c.Send(request, response) - return -} - -func NewModifyNodePoolInstanceTypesRequest() (request *ModifyNodePoolInstanceTypesRequest) { - request = &ModifyNodePoolInstanceTypesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyNodePoolInstanceTypes") - - return -} - -func NewModifyNodePoolInstanceTypesResponse() (response *ModifyNodePoolInstanceTypesResponse) { - response = &ModifyNodePoolInstanceTypesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyNodePoolInstanceTypes -// 修改节点池的机型配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) ModifyNodePoolInstanceTypes(request *ModifyNodePoolInstanceTypesRequest) (response *ModifyNodePoolInstanceTypesResponse, err error) { - if request == nil { - request = NewModifyNodePoolInstanceTypesRequest() - } - - response = NewModifyNodePoolInstanceTypesResponse() - err = c.Send(request, response) - return -} - -// ModifyNodePoolInstanceTypes -// 修改节点池的机型配置 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) ModifyNodePoolInstanceTypesWithContext(ctx context.Context, request *ModifyNodePoolInstanceTypesRequest) (response *ModifyNodePoolInstanceTypesResponse, err error) { - if request == nil { - request = NewModifyNodePoolInstanceTypesRequest() - } - request.SetContext(ctx) - - response = NewModifyNodePoolInstanceTypesResponse() - err = c.Send(request, response) - return -} - -func NewModifyPrometheusAlertRuleRequest() (request *ModifyPrometheusAlertRuleRequest) { - request = &ModifyPrometheusAlertRuleRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyPrometheusAlertRule") - - return -} - -func NewModifyPrometheusAlertRuleResponse() (response *ModifyPrometheusAlertRuleResponse) { - response = &ModifyPrometheusAlertRuleResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyPrometheusAlertRule -// 修改告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) ModifyPrometheusAlertRule(request *ModifyPrometheusAlertRuleRequest) (response *ModifyPrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewModifyPrometheusAlertRuleRequest() - } - - response = NewModifyPrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -// ModifyPrometheusAlertRule -// 修改告警规则 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) ModifyPrometheusAlertRuleWithContext(ctx context.Context, request *ModifyPrometheusAlertRuleRequest) (response *ModifyPrometheusAlertRuleResponse, err error) { - if request == nil { - request = NewModifyPrometheusAlertRuleRequest() - } - request.SetContext(ctx) - - response = NewModifyPrometheusAlertRuleResponse() - err = c.Send(request, response) - return -} - -func NewModifyPrometheusTemplateRequest() (request *ModifyPrometheusTemplateRequest) { - request = &ModifyPrometheusTemplateRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ModifyPrometheusTemplate") - - return -} - -func NewModifyPrometheusTemplateResponse() (response *ModifyPrometheusTemplateResponse) { - response = &ModifyPrometheusTemplateResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ModifyPrometheusTemplate -// 修改模板内容 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) ModifyPrometheusTemplate(request *ModifyPrometheusTemplateRequest) (response *ModifyPrometheusTemplateResponse, err error) { - if request == nil { - request = NewModifyPrometheusTemplateRequest() - } - - response = NewModifyPrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -// ModifyPrometheusTemplate -// 修改模板内容 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) ModifyPrometheusTemplateWithContext(ctx context.Context, request *ModifyPrometheusTemplateRequest) (response *ModifyPrometheusTemplateResponse, err error) { - if request == nil { - request = NewModifyPrometheusTemplateRequest() - } - request.SetContext(ctx) - - response = NewModifyPrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -func NewRemoveNodeFromNodePoolRequest() (request *RemoveNodeFromNodePoolRequest) { - request = &RemoveNodeFromNodePoolRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "RemoveNodeFromNodePool") - - return -} - -func NewRemoveNodeFromNodePoolResponse() (response *RemoveNodeFromNodePoolResponse) { - response = &RemoveNodeFromNodePoolResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// RemoveNodeFromNodePool -// 移出节点池节点,但保留在集群内 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) RemoveNodeFromNodePool(request *RemoveNodeFromNodePoolRequest) (response *RemoveNodeFromNodePoolResponse, err error) { - if request == nil { - request = NewRemoveNodeFromNodePoolRequest() - } - - response = NewRemoveNodeFromNodePoolResponse() - err = c.Send(request, response) - return -} - -// RemoveNodeFromNodePool -// 移出节点池节点,但保留在集群内 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) RemoveNodeFromNodePoolWithContext(ctx context.Context, request *RemoveNodeFromNodePoolRequest) (response *RemoveNodeFromNodePoolResponse, err error) { - if request == nil { - request = NewRemoveNodeFromNodePoolRequest() - } - request.SetContext(ctx) - - response = NewRemoveNodeFromNodePoolResponse() - err = c.Send(request, response) - return -} - -func NewRestartEKSContainerInstancesRequest() (request *RestartEKSContainerInstancesRequest) { - request = &RestartEKSContainerInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "RestartEKSContainerInstances") - - return -} - -func NewRestartEKSContainerInstancesResponse() (response *RestartEKSContainerInstancesResponse) { - response = &RestartEKSContainerInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// RestartEKSContainerInstances -// 重启弹性容器实例,支持批量操作 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) RestartEKSContainerInstances(request *RestartEKSContainerInstancesRequest) (response *RestartEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewRestartEKSContainerInstancesRequest() - } - - response = NewRestartEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -// RestartEKSContainerInstances -// 重启弹性容器实例,支持批量操作 -// -// 可能返回的错误码: -// -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) RestartEKSContainerInstancesWithContext(ctx context.Context, request *RestartEKSContainerInstancesRequest) (response *RestartEKSContainerInstancesResponse, err error) { - if request == nil { - request = NewRestartEKSContainerInstancesRequest() - } - request.SetContext(ctx) - - response = NewRestartEKSContainerInstancesResponse() - err = c.Send(request, response) - return -} - -func NewScaleInClusterMasterRequest() (request *ScaleInClusterMasterRequest) { - request = &ScaleInClusterMasterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ScaleInClusterMaster") - - return -} - -func NewScaleInClusterMasterResponse() (response *ScaleInClusterMasterResponse) { - response = &ScaleInClusterMasterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ScaleInClusterMaster -// 缩容独立集群master节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// OPERATIONDENIED = "OperationDenied" -func (c *Client) ScaleInClusterMaster(request *ScaleInClusterMasterRequest) (response *ScaleInClusterMasterResponse, err error) { - if request == nil { - request = NewScaleInClusterMasterRequest() - } - - response = NewScaleInClusterMasterResponse() - err = c.Send(request, response) - return -} - -// ScaleInClusterMaster -// 缩容独立集群master节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// OPERATIONDENIED = "OperationDenied" -func (c *Client) ScaleInClusterMasterWithContext(ctx context.Context, request *ScaleInClusterMasterRequest) (response *ScaleInClusterMasterResponse, err error) { - if request == nil { - request = NewScaleInClusterMasterRequest() - } - request.SetContext(ctx) - - response = NewScaleInClusterMasterResponse() - err = c.Send(request, response) - return -} - -func NewScaleOutClusterMasterRequest() (request *ScaleOutClusterMasterRequest) { - request = &ScaleOutClusterMasterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "ScaleOutClusterMaster") - - return -} - -func NewScaleOutClusterMasterResponse() (response *ScaleOutClusterMasterResponse) { - response = &ScaleOutClusterMasterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// ScaleOutClusterMaster -// 扩容独立集群master节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// OPERATIONDENIED = "OperationDenied" -func (c *Client) ScaleOutClusterMaster(request *ScaleOutClusterMasterRequest) (response *ScaleOutClusterMasterResponse, err error) { - if request == nil { - request = NewScaleOutClusterMasterRequest() - } - - response = NewScaleOutClusterMasterResponse() - err = c.Send(request, response) - return -} - -// ScaleOutClusterMaster -// 扩容独立集群master节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// OPERATIONDENIED = "OperationDenied" -func (c *Client) ScaleOutClusterMasterWithContext(ctx context.Context, request *ScaleOutClusterMasterRequest) (response *ScaleOutClusterMasterResponse, err error) { - if request == nil { - request = NewScaleOutClusterMasterRequest() - } - request.SetContext(ctx) - - response = NewScaleOutClusterMasterResponse() - err = c.Send(request, response) - return -} - -func NewSetNodePoolNodeProtectionRequest() (request *SetNodePoolNodeProtectionRequest) { - request = &SetNodePoolNodeProtectionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "SetNodePoolNodeProtection") - - return -} - -func NewSetNodePoolNodeProtectionResponse() (response *SetNodePoolNodeProtectionResponse) { - response = &SetNodePoolNodeProtectionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// SetNodePoolNodeProtection -// 仅能设置节点池中处于伸缩组的节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) SetNodePoolNodeProtection(request *SetNodePoolNodeProtectionRequest) (response *SetNodePoolNodeProtectionResponse, err error) { - if request == nil { - request = NewSetNodePoolNodeProtectionRequest() - } - - response = NewSetNodePoolNodeProtectionResponse() - err = c.Send(request, response) - return -} - -// SetNodePoolNodeProtection -// 仅能设置节点池中处于伸缩组的节点 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -func (c *Client) SetNodePoolNodeProtectionWithContext(ctx context.Context, request *SetNodePoolNodeProtectionRequest) (response *SetNodePoolNodeProtectionResponse, err error) { - if request == nil { - request = NewSetNodePoolNodeProtectionRequest() - } - request.SetContext(ctx) - - response = NewSetNodePoolNodeProtectionResponse() - err = c.Send(request, response) - return -} - -func NewSyncPrometheusTemplateRequest() (request *SyncPrometheusTemplateRequest) { - request = &SyncPrometheusTemplateRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "SyncPrometheusTemplate") - - return -} - -func NewSyncPrometheusTemplateResponse() (response *SyncPrometheusTemplateResponse) { - response = &SyncPrometheusTemplateResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// SyncPrometheusTemplate -// 同步模板到实例或者集群 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMCLUSTERNOTFOUND = "InvalidParameter.PromClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) SyncPrometheusTemplate(request *SyncPrometheusTemplateRequest) (response *SyncPrometheusTemplateResponse, err error) { - if request == nil { - request = NewSyncPrometheusTemplateRequest() - } - - response = NewSyncPrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -// SyncPrometheusTemplate -// 同步模板到实例或者集群 -// -// 可能返回的错误码: -// -// INTERNALERROR_DB = "InternalError.Db" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// INVALIDPARAMETER_PROMCLUSTERNOTFOUND = "InvalidParameter.PromClusterNotFound" -// INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" -// INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" -func (c *Client) SyncPrometheusTemplateWithContext(ctx context.Context, request *SyncPrometheusTemplateRequest) (response *SyncPrometheusTemplateResponse, err error) { - if request == nil { - request = NewSyncPrometheusTemplateRequest() - } - request.SetContext(ctx) - - response = NewSyncPrometheusTemplateResponse() - err = c.Send(request, response) - return -} - -func NewUpdateClusterVersionRequest() (request *UpdateClusterVersionRequest) { - request = &UpdateClusterVersionRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "UpdateClusterVersion") - - return -} - -func NewUpdateClusterVersionResponse() (response *UpdateClusterVersionResponse) { - response = &UpdateClusterVersionResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// UpdateClusterVersion -// 升级集群 Master 组件到指定版本 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CLUSTERUPGRADENODEVERSION = "InternalError.ClusterUpgradeNodeVersion" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) UpdateClusterVersion(request *UpdateClusterVersionRequest) (response *UpdateClusterVersionResponse, err error) { - if request == nil { - request = NewUpdateClusterVersionRequest() - } - - response = NewUpdateClusterVersionResponse() - err = c.Send(request, response) - return -} - -// UpdateClusterVersion -// 升级集群 Master 组件到指定版本 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INTERNALERROR_CLUSTERUPGRADENODEVERSION = "InternalError.ClusterUpgradeNodeVersion" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" -// INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) UpdateClusterVersionWithContext(ctx context.Context, request *UpdateClusterVersionRequest) (response *UpdateClusterVersionResponse, err error) { - if request == nil { - request = NewUpdateClusterVersionRequest() - } - request.SetContext(ctx) - - response = NewUpdateClusterVersionResponse() - err = c.Send(request, response) - return -} - -func NewUpdateEKSClusterRequest() (request *UpdateEKSClusterRequest) { - request = &UpdateEKSClusterRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "UpdateEKSCluster") - - return -} - -func NewUpdateEKSClusterResponse() (response *UpdateEKSClusterResponse) { - response = &UpdateEKSClusterResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// UpdateEKSCluster -// 修改弹性集群名称等属性 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) UpdateEKSCluster(request *UpdateEKSClusterRequest) (response *UpdateEKSClusterResponse, err error) { - if request == nil { - request = NewUpdateEKSClusterRequest() - } - - response = NewUpdateEKSClusterResponse() - err = c.Send(request, response) - return -} - -// UpdateEKSCluster -// 修改弹性集群名称等属性 -// -// 可能返回的错误码: -// -// FAILEDOPERATION = "FailedOperation" -// INTERNALERROR = "InternalError" -// INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" -// INVALIDPARAMETER = "InvalidParameter" -// LIMITEXCEEDED = "LimitExceeded" -// MISSINGPARAMETER = "MissingParameter" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" -// UNKNOWNPARAMETER = "UnknownParameter" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) UpdateEKSClusterWithContext(ctx context.Context, request *UpdateEKSClusterRequest) (response *UpdateEKSClusterResponse, err error) { - if request == nil { - request = NewUpdateEKSClusterRequest() - } - request.SetContext(ctx) - - response = NewUpdateEKSClusterResponse() - err = c.Send(request, response) - return -} - -func NewUpdateEKSContainerInstanceRequest() (request *UpdateEKSContainerInstanceRequest) { - request = &UpdateEKSContainerInstanceRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "UpdateEKSContainerInstance") - - return -} - -func NewUpdateEKSContainerInstanceResponse() (response *UpdateEKSContainerInstanceResponse) { - response = &UpdateEKSContainerInstanceResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// UpdateEKSContainerInstance -// 更新容器实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) UpdateEKSContainerInstance(request *UpdateEKSContainerInstanceRequest) (response *UpdateEKSContainerInstanceResponse, err error) { - if request == nil { - request = NewUpdateEKSContainerInstanceRequest() - } - - response = NewUpdateEKSContainerInstanceResponse() - err = c.Send(request, response) - return -} - -// UpdateEKSContainerInstance -// 更新容器实例 -// -// 可能返回的错误码: -// -// INTERNALERROR = "InternalError" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) UpdateEKSContainerInstanceWithContext(ctx context.Context, request *UpdateEKSContainerInstanceRequest) (response *UpdateEKSContainerInstanceResponse, err error) { - if request == nil { - request = NewUpdateEKSContainerInstanceRequest() - } - request.SetContext(ctx) - - response = NewUpdateEKSContainerInstanceResponse() - err = c.Send(request, response) - return -} - -func NewUpgradeClusterInstancesRequest() (request *UpgradeClusterInstancesRequest) { - request = &UpgradeClusterInstancesRequest{ - BaseRequest: &tchttp.BaseRequest{}, - } - request.Init().WithApiInfo("tke", APIVersion, "UpgradeClusterInstances") - - return -} - -func NewUpgradeClusterInstancesResponse() (response *UpgradeClusterInstancesResponse) { - response = &UpgradeClusterInstancesResponse{ - BaseResponse: &tchttp.BaseResponse{}, - } - return -} - -// UpgradeClusterInstances -// 给集群的一批work节点进行升级 -// -// 可能返回的错误码: -// -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_TASKLIFESTATEERROR = "InternalError.TaskLifeStateError" -// INTERNALERROR_TASKNOTFOUND = "InternalError.TaskNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) UpgradeClusterInstances(request *UpgradeClusterInstancesRequest) (response *UpgradeClusterInstancesResponse, err error) { - if request == nil { - request = NewUpgradeClusterInstancesRequest() - } - - response = NewUpgradeClusterInstancesResponse() - err = c.Send(request, response) - return -} - -// UpgradeClusterInstances -// 给集群的一批work节点进行升级 -// -// 可能返回的错误码: -// -// INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" -// INTERNALERROR_PARAM = "InternalError.Param" -// INTERNALERROR_TASKLIFESTATEERROR = "InternalError.TaskLifeStateError" -// INTERNALERROR_TASKNOTFOUND = "InternalError.TaskNotFound" -// INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" -// INVALIDPARAMETER_PARAM = "InvalidParameter.Param" -// RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" -func (c *Client) UpgradeClusterInstancesWithContext(ctx context.Context, request *UpgradeClusterInstancesRequest) (response *UpgradeClusterInstancesResponse, err error) { - if request == nil { - request = NewUpgradeClusterInstancesRequest() - } - request.SetContext(ctx) - - response = NewUpgradeClusterInstancesResponse() - err = c.Send(request, response) - return -} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/errors.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/errors.go deleted file mode 100644 index 303637474b79..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/errors.go +++ /dev/null @@ -1,336 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v20180525 - -const ( - // 此产品的特有错误码 - - // 操作失败。 - FAILEDOPERATION = "FailedOperation" - - // 子账户RBAC权限不足。 - FAILEDOPERATION_RBACFORBIDDEN = "FailedOperation.RBACForbidden" - - // 内部错误。 - INTERNALERROR = "InternalError" - - // 获取用户认证信息失败。 - INTERNALERROR_ACCOUNTCOMMON = "InternalError.AccountCommon" - - // 账户未通过认证。 - INTERNALERROR_ACCOUNTUSERNOTAUTHENTICATED = "InternalError.AccountUserNotAuthenticated" - - // 伸缩组资源创建报错。 - INTERNALERROR_ASCOMMON = "InternalError.AsCommon" - - // 没有权限。 - INTERNALERROR_CAMNOAUTH = "InternalError.CamNoAuth" - - // CIDR和其他集群CIDR冲突。 - INTERNALERROR_CIDRCONFLICTWITHOTHERCLUSTER = "InternalError.CidrConflictWithOtherCluster" - - // CIDR和其他路由冲突。 - INTERNALERROR_CIDRCONFLICTWITHOTHERROUTE = "InternalError.CidrConflictWithOtherRoute" - - // CIDR和vpc冲突。 - INTERNALERROR_CIDRCONFLICTWITHVPCCIDR = "InternalError.CidrConflictWithVpcCidr" - - // CIDR和全局路由冲突。 - INTERNALERROR_CIDRCONFLICTWITHVPCGLOBALROUTE = "InternalError.CidrConflictWithVpcGlobalRoute" - - // CIDR无效。 - INTERNALERROR_CIDRINVALI = "InternalError.CidrInvali" - - // CIDR掩码无效。 - INTERNALERROR_CIDRMASKSIZEOUTOFRANGE = "InternalError.CidrMaskSizeOutOfRange" - - // CIDR不在路由表之内。 - INTERNALERROR_CIDROUTOFROUTETABLE = "InternalError.CidrOutOfRouteTable" - - // 集群未找到。 - INTERNALERROR_CLUSTERNOTFOUND = "InternalError.ClusterNotFound" - - // 集群状态错误。 - INTERNALERROR_CLUSTERSTATE = "InternalError.ClusterState" - - // 集群节点版本过低。 - INTERNALERROR_CLUSTERUPGRADENODEVERSION = "InternalError.ClusterUpgradeNodeVersion" - - // 执行命令超时。 - INTERNALERROR_CMDTIMEOUT = "InternalError.CmdTimeout" - - // 内部HTTP客户端错误。 - INTERNALERROR_COMPONENTCLIENTHTTP = "InternalError.ComponentClientHttp" - - // 请求(http请求)其他云服务失败。 - INTERNALERROR_COMPONENTCLINETHTTP = "InternalError.ComponentClinetHttp" - - // 容器未找到。 - INTERNALERROR_CONTAINERNOTFOUND = "InternalError.ContainerNotFound" - - // 创建集群失败。 - INTERNALERROR_CREATEMASTERFAILED = "InternalError.CreateMasterFailed" - - // cvm创建节点报错。 - INTERNALERROR_CVMCOMMON = "InternalError.CvmCommon" - - // cvm不存在。 - INTERNALERROR_CVMNOTFOUND = "InternalError.CvmNotFound" - - // 存在云服务器在CVM侧查询不到。 - INTERNALERROR_CVMNUMBERNOTMATCH = "InternalError.CvmNumberNotMatch" - - // cvm状态不正常。 - INTERNALERROR_CVMSTATUS = "InternalError.CvmStatus" - - // db错误。 - INTERNALERROR_DB = "InternalError.Db" - - // DB错误。 - INTERNALERROR_DBAFFECTIVEDROWS = "InternalError.DbAffectivedRows" - - // 记录未找到。 - INTERNALERROR_DBRECORDNOTFOUND = "InternalError.DbRecordNotFound" - - // 获得当前安全组总数失败。 - INTERNALERROR_DFWGETUSGCOUNT = "InternalError.DfwGetUSGCount" - - // 获得安全组配额失败。 - INTERNALERROR_DFWGETUSGQUOTA = "InternalError.DfwGetUSGQuota" - - // 不支持空集群。 - INTERNALERROR_EMPTYCLUSTERNOTSUPPORT = "InternalError.EmptyClusterNotSupport" - - // 下一跳地址已关联CIDR。 - INTERNALERROR_GATEWAYALREADYASSOCIATEDCIDR = "InternalError.GatewayAlreadyAssociatedCidr" - - // 镜像未找到。 - INTERNALERROR_IMAGEIDNOTFOUND = "InternalError.ImageIdNotFound" - - // 初始化master失败。 - INTERNALERROR_INITMASTERFAILED = "InternalError.InitMasterFailed" - - // 无效CIDR。 - INTERNALERROR_INVALIDPRIVATENETWORKCIDR = "InternalError.InvalidPrivateNetworkCidr" - - // 连接用户Kubernetes集群失败。 - INTERNALERROR_KUBECLIENTCONNECTION = "InternalError.KubeClientConnection" - - // 创建集群Client出错。 - INTERNALERROR_KUBECLIENTCREATE = "InternalError.KubeClientCreate" - - // KubernetesAPI错误。 - INTERNALERROR_KUBECOMMON = "InternalError.KubeCommon" - - // kubernetes client建立失败。 - INTERNALERROR_KUBERNETESCLIENTBUILDERROR = "InternalError.KubernetesClientBuildError" - - // 创建Kubernetes资源失败。 - INTERNALERROR_KUBERNETESCREATEOPERATIONERROR = "InternalError.KubernetesCreateOperationError" - - // 删除Kubernetes资源失败。 - INTERNALERROR_KUBERNETESDELETEOPERATIONERROR = "InternalError.KubernetesDeleteOperationError" - - // 获取Kubernetes资源失败。 - INTERNALERROR_KUBERNETESGETOPERATIONERROR = "InternalError.KubernetesGetOperationError" - - // Kubernetes未知错误。 - INTERNALERROR_KUBERNETESINTERNAL = "InternalError.KubernetesInternal" - - // 底层调用CLB未知错误。 - INTERNALERROR_LBCOMMON = "InternalError.LbCommon" - - // 镜像OS不支持。 - INTERNALERROR_OSNOTSUPPORT = "InternalError.OsNotSupport" - - // Param。 - INTERNALERROR_PARAM = "InternalError.Param" - - // Pod未找到。 - INTERNALERROR_PODNOTFOUND = "InternalError.PodNotFound" - - // 集群不支持当前操作。 - INTERNALERROR_PUBLICCLUSTEROPNOTSUPPORT = "InternalError.PublicClusterOpNotSupport" - - // 超过配额限制。 - INTERNALERROR_QUOTAMAXCLSLIMIT = "InternalError.QuotaMaxClsLimit" - - // 超过配额限制。 - INTERNALERROR_QUOTAMAXNODLIMIT = "InternalError.QuotaMaxNodLimit" - - // 超过配额限制。 - INTERNALERROR_QUOTAMAXRTLIMIT = "InternalError.QuotaMaxRtLimit" - - // 安全组配额不足。 - INTERNALERROR_QUOTAUSGLIMIT = "InternalError.QuotaUSGLimit" - - // 资源已存在。 - INTERNALERROR_RESOURCEEXISTALREADY = "InternalError.ResourceExistAlready" - - // 路由表非空。 - INTERNALERROR_ROUTETABLENOTEMPTY = "InternalError.RouteTableNotEmpty" - - // 路由表不存在。 - INTERNALERROR_ROUTETABLENOTFOUND = "InternalError.RouteTableNotFound" - - // 创建任务失败。 - INTERNALERROR_TASKCREATEFAILED = "InternalError.TaskCreateFailed" - - // 任务当前所处状态不支持此操作。 - INTERNALERROR_TASKLIFESTATEERROR = "InternalError.TaskLifeStateError" - - // 任务未找到。 - INTERNALERROR_TASKNOTFOUND = "InternalError.TaskNotFound" - - // 内部错误。 - INTERNALERROR_UNEXCEPTEDINTERNAL = "InternalError.UnexceptedInternal" - - // 未知的内部错误。 - INTERNALERROR_UNEXPECTEDINTERNAL = "InternalError.UnexpectedInternal" - - // VPC未知错误。 - INTERNALERROR_VPCUNEXPECTEDERROR = "InternalError.VPCUnexpectedError" - - // VPC报错。 - INTERNALERROR_VPCCOMMON = "InternalError.VpcCommon" - - // 对等连接不存在。 - INTERNALERROR_VPCPEERNOTFOUND = "InternalError.VpcPeerNotFound" - - // 未发现vpc记录。 - INTERNALERROR_VPCRECODRNOTFOUND = "InternalError.VpcRecodrNotFound" - - // 白名单未知错误。 - INTERNALERROR_WHITELISTUNEXPECTEDERROR = "InternalError.WhitelistUnexpectedError" - - // 参数错误。 - INVALIDPARAMETER = "InvalidParameter" - - // 弹性伸缩组创建参数错误。 - INVALIDPARAMETER_ASCOMMONERROR = "InvalidParameter.AsCommonError" - - // CIDR掩码超出范围(集群CIDR范围 最小值: 10 最大值: 24)。 - INVALIDPARAMETER_CIDRMASKSIZEOUTOFRANGE = "InvalidParameter.CIDRMaskSizeOutOfRange" - - // CIDR和其他集群CIDR冲突。 - INVALIDPARAMETER_CIDRCONFLICTWITHOTHERCLUSTER = "InvalidParameter.CidrConflictWithOtherCluster" - - // 创建的路由与已存在的其他路由产生冲突。 - INVALIDPARAMETER_CIDRCONFLICTWITHOTHERROUTE = "InvalidParameter.CidrConflictWithOtherRoute" - - // CIDR和vpc的CIDR冲突。 - INVALIDPARAMETER_CIDRCONFLICTWITHVPCCIDR = "InvalidParameter.CidrConflictWithVpcCidr" - - // 创建的路由与VPC下已存在的全局路由产生冲突。 - INVALIDPARAMETER_CIDRCONFLICTWITHVPCGLOBALROUTE = "InvalidParameter.CidrConflictWithVpcGlobalRoute" - - // 参数错误,CIDR不符合规范。 - INVALIDPARAMETER_CIDRINVALID = "InvalidParameter.CidrInvalid" - - // CIDR不在路由表之内。 - INVALIDPARAMETER_CIDROUTOFROUTETABLE = "InvalidParameter.CidrOutOfRouteTable" - - // 集群ID不存在。 - INVALIDPARAMETER_CLUSTERNOTFOUND = "InvalidParameter.ClusterNotFound" - - // 下一跳地址已关联CIDR。 - INVALIDPARAMETER_GATEWAYALREADYASSOCIATEDCIDR = "InvalidParameter.GatewayAlreadyAssociatedCidr" - - // 无效的私有CIDR网段。 - INVALIDPARAMETER_INVALIDPRIVATENETWORKCIDR = "InvalidParameter.InvalidPrivateNetworkCIDR" - - // 参数错误。 - INVALIDPARAMETER_PARAM = "InvalidParameter.Param" - - // Prometheus未关联本集群。 - INVALIDPARAMETER_PROMCLUSTERNOTFOUND = "InvalidParameter.PromClusterNotFound" - - // Prometheus实例不存在。 - INVALIDPARAMETER_PROMINSTANCENOTFOUND = "InvalidParameter.PromInstanceNotFound" - - // 资源未找到。 - INVALIDPARAMETER_RESOURCENOTFOUND = "InvalidParameter.ResourceNotFound" - - // 路由表非空。 - INVALIDPARAMETER_ROUTETABLENOTEMPTY = "InvalidParameter.RouteTableNotEmpty" - - // 超过配额限制。 - LIMITEXCEEDED = "LimitExceeded" - - // 缺少参数错误。 - MISSINGPARAMETER = "MissingParameter" - - // 操作被拒绝。 - OPERATIONDENIED = "OperationDenied" - - // 集群处于删除保护中,禁止删除。 - OPERATIONDENIED_CLUSTERINDELETIONPROTECTION = "OperationDenied.ClusterInDeletionProtection" - - // 资源被占用。 - RESOURCEINUSE = "ResourceInUse" - - // 资源不足。 - RESOURCEINSUFFICIENT = "ResourceInsufficient" - - // 资源不存在。 - RESOURCENOTFOUND = "ResourceNotFound" - - // 伸缩组不存在。 - RESOURCENOTFOUND_ASASGNOTEXIST = "ResourceNotFound.AsAsgNotExist" - - // 集群不存在。 - RESOURCENOTFOUND_CLUSTERNOTFOUND = "ResourceNotFound.ClusterNotFound" - - // 用户Kubernetes集群中未找到指定资源。 - RESOURCENOTFOUND_KUBERESOURCENOTFOUND = "ResourceNotFound.KubeResourceNotFound" - - // 未找到该kubernetes资源。 - RESOURCENOTFOUND_KUBERNETESRESOURCENOTFOUND = "ResourceNotFound.KubernetesResourceNotFound" - - // 找不到对应路由表。 - RESOURCENOTFOUND_ROUTETABLENOTFOUND = "ResourceNotFound.RouteTableNotFound" - - // 资源不可用。 - RESOURCEUNAVAILABLE = "ResourceUnavailable" - - // 集群状态不支持该操作。 - RESOURCEUNAVAILABLE_CLUSTERSTATE = "ResourceUnavailable.ClusterState" - - // Eks Container Instance状态不支持改操作。 - RESOURCEUNAVAILABLE_EKSCONTAINERSTATUS = "ResourceUnavailable.EksContainerStatus" - - // 资源售罄。 - RESOURCESSOLDOUT = "ResourcesSoldOut" - - // 未授权操作。 - UNAUTHORIZEDOPERATION = "UnauthorizedOperation" - - // 无该接口CAM权限。 - UNAUTHORIZEDOPERATION_CAMNOAUTH = "UnauthorizedOperation.CamNoAuth" - - // 未知参数错误。 - UNKNOWNPARAMETER = "UnknownParameter" - - // 操作不支持。 - UNSUPPORTEDOPERATION = "UnsupportedOperation" - - // AS伸缩关闭导致无法开启CA。 - UNSUPPORTEDOPERATION_CAENABLEFAILED = "UnsupportedOperation.CaEnableFailed" - - // 非白名单用户。 - UNSUPPORTEDOPERATION_NOTINWHITELIST = "UnsupportedOperation.NotInWhitelist" -) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/models.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/models.go deleted file mode 100644 index 18602f7e13b4..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525/models.go +++ /dev/null @@ -1,8078 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v20180525 - -import ( - "encoding/json" - - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" -) - -type AcquireClusterAdminRoleRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *AcquireClusterAdminRoleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AcquireClusterAdminRoleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AcquireClusterAdminRoleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type AcquireClusterAdminRoleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *AcquireClusterAdminRoleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AcquireClusterAdminRoleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type AddClusterCIDRRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 增加的ClusterCIDR - ClusterCIDRs []*string `json:"ClusterCIDRs,omitempty" name:"ClusterCIDRs"` - - // 是否忽略ClusterCIDR与VPC路由表的冲突 - IgnoreClusterCIDRConflict *bool `json:"IgnoreClusterCIDRConflict,omitempty" name:"IgnoreClusterCIDRConflict"` -} - -func (r *AddClusterCIDRRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddClusterCIDRRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ClusterCIDRs") - delete(f, "IgnoreClusterCIDRConflict") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AddClusterCIDRRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type AddClusterCIDRResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *AddClusterCIDRResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddClusterCIDRResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type AddExistedInstancesRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 实例列表,不支持竞价实例 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 实例额外需要设置参数信息(默认值) - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 - EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` - - // 节点登录信息(目前仅支持使用Password或者单个KeyIds) - LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` - - // 重装系统时,可以指定修改实例的HostName(集群为HostName模式时,此参数必传,规则名称除不支持大写字符外与[CVM创建实例](https://cloud.tencent.com/document/product/213/15730)接口HostName一致) - HostName *string `json:"HostName,omitempty" name:"HostName"` - - // 实例所属安全组。该参数可以通过调用 DescribeSecurityGroups 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。(目前仅支持设置单个sgId) - SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` - - // 节点池选项 - NodePool *NodePoolOption `json:"NodePool,omitempty" name:"NodePool"` - - // 校验规则相关选项,可配置跳过某些校验规则。目前支持GlobalRouteCIDRCheck(跳过GlobalRouter的相关校验),VpcCniCIDRCheck(跳过VpcCni相关校验) - SkipValidateOptions []*string `json:"SkipValidateOptions,omitempty" name:"SkipValidateOptions"` - - // 参数InstanceAdvancedSettingsOverride数组用于定制化地配置各台instance,与InstanceIds顺序对应。当传入InstanceAdvancedSettingsOverrides数组时,将覆盖默认参数InstanceAdvancedSettings;当没有传入参数InstanceAdvancedSettingsOverrides时,InstanceAdvancedSettings参数对每台instance生效。 - // - // 参数InstanceAdvancedSettingsOverride数组的长度应与InstanceIds数组一致;当长度大于InstanceIds数组长度时将报错;当长度小于InstanceIds数组时,没有对应配置的instace将使用默认配置。 - InstanceAdvancedSettingsOverrides []*InstanceAdvancedSettings `json:"InstanceAdvancedSettingsOverrides,omitempty" name:"InstanceAdvancedSettingsOverrides"` -} - -func (r *AddExistedInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddExistedInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "InstanceIds") - delete(f, "InstanceAdvancedSettings") - delete(f, "EnhancedService") - delete(f, "LoginSettings") - delete(f, "HostName") - delete(f, "SecurityGroupIds") - delete(f, "NodePool") - delete(f, "SkipValidateOptions") - delete(f, "InstanceAdvancedSettingsOverrides") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AddExistedInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type AddExistedInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 失败的节点ID - // 注意:此字段可能返回 null,表示取不到有效值。 - FailedInstanceIds []*string `json:"FailedInstanceIds,omitempty" name:"FailedInstanceIds"` - - // 成功的节点ID - // 注意:此字段可能返回 null,表示取不到有效值。 - SuccInstanceIds []*string `json:"SuccInstanceIds,omitempty" name:"SuccInstanceIds"` - - // 超时未返回出来节点的ID(可能失败,也可能成功) - // 注意:此字段可能返回 null,表示取不到有效值。 - TimeoutInstanceIds []*string `json:"TimeoutInstanceIds,omitempty" name:"TimeoutInstanceIds"` - - // 失败的节点的失败原因 - // 注意:此字段可能返回 null,表示取不到有效值。 - FailedReasons []*string `json:"FailedReasons,omitempty" name:"FailedReasons"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *AddExistedInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddExistedInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type AddNodeToNodePoolRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 节点id - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` -} - -func (r *AddNodeToNodePoolRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddNodeToNodePoolRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "InstanceIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AddNodeToNodePoolRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type AddNodeToNodePoolResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *AddNodeToNodePoolResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddNodeToNodePoolResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type AddVpcCniSubnetsRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 为集群容器网络增加的子网列表 - SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` - - // 集群所属的VPC的ID - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` -} - -func (r *AddVpcCniSubnetsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddVpcCniSubnetsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "SubnetIds") - delete(f, "VpcId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AddVpcCniSubnetsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type AddVpcCniSubnetsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *AddVpcCniSubnetsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *AddVpcCniSubnetsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type AppChart struct { - - // chart名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // chart的标签 - // 注意:此字段可能返回 null,表示取不到有效值。 - Label *string `json:"Label,omitempty" name:"Label"` - - // chart的版本 - LatestVersion *string `json:"LatestVersion,omitempty" name:"LatestVersion"` -} - -type AutoScalingGroupRange struct { - - // 伸缩组最小实例数 - MinSize *int64 `json:"MinSize,omitempty" name:"MinSize"` - - // 伸缩组最大实例数 - MaxSize *int64 `json:"MaxSize,omitempty" name:"MaxSize"` -} - -type AutoscalingAdded struct { - - // 正在加入中的节点数量 - Joining *int64 `json:"Joining,omitempty" name:"Joining"` - - // 初始化中的节点数量 - Initializing *int64 `json:"Initializing,omitempty" name:"Initializing"` - - // 正常的节点数量 - Normal *int64 `json:"Normal,omitempty" name:"Normal"` - - // 节点总数 - Total *int64 `json:"Total,omitempty" name:"Total"` -} - -type Capabilities struct { - - // 启用安全能力项列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Add []*string `json:"Add,omitempty" name:"Add"` - - // 禁用安全能力向列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Drop []*string `json:"Drop,omitempty" name:"Drop"` -} - -type CbsVolume struct { - - // cbs volume 数据卷名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 腾讯云cbs盘Id - CbsDiskId *string `json:"CbsDiskId,omitempty" name:"CbsDiskId"` -} - -type CheckInstancesUpgradeAbleRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点列表,空为全部节点 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 升级类型 - UpgradeType *string `json:"UpgradeType,omitempty" name:"UpgradeType"` - - // 分页Offset - Offset *int64 `json:"Offset,omitempty" name:"Offset"` - - // 分页Limit - Limit *int64 `json:"Limit,omitempty" name:"Limit"` - - // 过滤 - Filter []*Filter `json:"Filter,omitempty" name:"Filter"` -} - -func (r *CheckInstancesUpgradeAbleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CheckInstancesUpgradeAbleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "InstanceIds") - delete(f, "UpgradeType") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "Filter") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CheckInstancesUpgradeAbleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CheckInstancesUpgradeAbleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群master当前小版本 - ClusterVersion *string `json:"ClusterVersion,omitempty" name:"ClusterVersion"` - - // 集群master对应的大版本目前最新小版本 - LatestVersion *string `json:"LatestVersion,omitempty" name:"LatestVersion"` - - // 可升级节点列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - UpgradeAbleInstances []*UpgradeAbleInstancesItem `json:"UpgradeAbleInstances,omitempty" name:"UpgradeAbleInstances"` - - // 总数 - // 注意:此字段可能返回 null,表示取不到有效值。 - Total *int64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CheckInstancesUpgradeAbleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CheckInstancesUpgradeAbleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type Cluster struct { - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 集群描述 - ClusterDescription *string `json:"ClusterDescription,omitempty" name:"ClusterDescription"` - - // 集群版本(默认值为1.10.5) - ClusterVersion *string `json:"ClusterVersion,omitempty" name:"ClusterVersion"` - - // 集群系统。centos7.2x86_64 或者 ubuntu16.04.1 LTSx86_64,默认取值为ubuntu16.04.1 LTSx86_64 - ClusterOs *string `json:"ClusterOs,omitempty" name:"ClusterOs"` - - // 集群类型,托管集群:MANAGED_CLUSTER,独立集群:INDEPENDENT_CLUSTER。 - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` - - // 集群网络相关参数 - ClusterNetworkSettings *ClusterNetworkSettings `json:"ClusterNetworkSettings,omitempty" name:"ClusterNetworkSettings"` - - // 集群当前node数量 - ClusterNodeNum *uint64 `json:"ClusterNodeNum,omitempty" name:"ClusterNodeNum"` - - // 集群所属的项目ID - ProjectId *uint64 `json:"ProjectId,omitempty" name:"ProjectId"` - - // 标签描述列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` - - // 集群状态 (Running 运行中 Creating 创建中 Abnormal 异常 ) - ClusterStatus *string `json:"ClusterStatus,omitempty" name:"ClusterStatus"` - - // 集群属性(包括集群不同属性的MAP,属性字段包括NodeNameType (lan-ip模式和hostname 模式,默认无lan-ip模式)) - // 注意:此字段可能返回 null,表示取不到有效值。 - Property *string `json:"Property,omitempty" name:"Property"` - - // 集群当前master数量 - ClusterMaterNodeNum *uint64 `json:"ClusterMaterNodeNum,omitempty" name:"ClusterMaterNodeNum"` - - // 集群使用镜像id - // 注意:此字段可能返回 null,表示取不到有效值。 - ImageId *string `json:"ImageId,omitempty" name:"ImageId"` - - // OsCustomizeType 系统定制类型 - // 注意:此字段可能返回 null,表示取不到有效值。 - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` - - // 集群运行环境docker或container - // 注意:此字段可能返回 null,表示取不到有效值。 - ContainerRuntime *string `json:"ContainerRuntime,omitempty" name:"ContainerRuntime"` - - // 创建时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - - // 删除保护开关 - // 注意:此字段可能返回 null,表示取不到有效值。 - DeletionProtection *bool `json:"DeletionProtection,omitempty" name:"DeletionProtection"` - - // 集群是否开启第三方节点支持 - // 注意:此字段可能返回 null,表示取不到有效值。 - EnableExternalNode *bool `json:"EnableExternalNode,omitempty" name:"EnableExternalNode"` -} - -type ClusterAdvancedSettings struct { - - // 是否启用IPVS - IPVS *bool `json:"IPVS,omitempty" name:"IPVS"` - - // 是否启用集群节点自动扩缩容(创建集群流程不支持开启此功能) - AsEnabled *bool `json:"AsEnabled,omitempty" name:"AsEnabled"` - - // 集群使用的runtime类型,包括"docker"和"containerd"两种类型,默认为"docker" - ContainerRuntime *string `json:"ContainerRuntime,omitempty" name:"ContainerRuntime"` - - // 集群中节点NodeName类型(包括 hostname,lan-ip两种形式,默认为lan-ip。如果开启了hostname模式,创建节点时需要设置HostName参数,并且InstanceName需要和HostName一致) - NodeNameType *string `json:"NodeNameType,omitempty" name:"NodeNameType"` - - // 集群自定义参数 - ExtraArgs *ClusterExtraArgs `json:"ExtraArgs,omitempty" name:"ExtraArgs"` - - // 集群网络类型(包括GR(全局路由)和VPC-CNI两种模式,默认为GR。 - NetworkType *string `json:"NetworkType,omitempty" name:"NetworkType"` - - // 集群VPC-CNI模式是否为非固定IP,默认: FALSE 固定IP。 - IsNonStaticIpMode *bool `json:"IsNonStaticIpMode,omitempty" name:"IsNonStaticIpMode"` - - // 是否启用集群删除保护 - DeletionProtection *bool `json:"DeletionProtection,omitempty" name:"DeletionProtection"` - - // 集群的网络代理模型,目前tke集群支持的网络代理模式有三种:iptables,ipvs,ipvs-bpf,此参数仅在使用ipvs-bpf模式时使用,三种网络模式的参数设置关系如下: - // iptables模式:IPVS和KubeProxyMode都不设置 - // ipvs模式: 设置IPVS为true, KubeProxyMode不设置 - // ipvs-bpf模式: 设置KubeProxyMode为kube-proxy-bpf - // 使用ipvs-bpf的网络模式需要满足以下条件: - // 1. 集群版本必须为1.14及以上; - // 2. 系统镜像必须是: Tencent Linux 2.4; - KubeProxyMode *string `json:"KubeProxyMode,omitempty" name:"KubeProxyMode"` - - // 是否开启审计开关 - AuditEnabled *bool `json:"AuditEnabled,omitempty" name:"AuditEnabled"` - - // 审计日志上传到的logset日志集 - AuditLogsetId *string `json:"AuditLogsetId,omitempty" name:"AuditLogsetId"` - - // 审计日志上传到的topic - AuditLogTopicId *string `json:"AuditLogTopicId,omitempty" name:"AuditLogTopicId"` - - // 区分共享网卡多IP模式和独立网卡模式,共享网卡多 IP 模式填写"tke-route-eni",独立网卡模式填写"tke-direct-eni",默认为共享网卡模式 - VpcCniType *string `json:"VpcCniType,omitempty" name:"VpcCniType"` - - // 运行时版本 - RuntimeVersion *string `json:"RuntimeVersion,omitempty" name:"RuntimeVersion"` - - // 是否开节点podCIDR大小的自定义模式 - EnableCustomizedPodCIDR *bool `json:"EnableCustomizedPodCIDR,omitempty" name:"EnableCustomizedPodCIDR"` - - // 自定义模式下的基础pod数量 - BasePodNumber *int64 `json:"BasePodNumber,omitempty" name:"BasePodNumber"` - - // 启用 CiliumMode 的模式,空值表示不启用,“clusterIP” 表示启用 Cilium 支持 ClusterIP - CiliumMode *string `json:"CiliumMode,omitempty" name:"CiliumMode"` -} - -type ClusterAsGroup struct { - - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - - // 伸缩组状态(开启 enabled 开启中 enabling 关闭 disabled 关闭中 disabling 更新中 updating 删除中 deleting 开启缩容中 scaleDownEnabling 关闭缩容中 scaleDownDisabling) - Status *string `json:"Status,omitempty" name:"Status"` - - // 节点是否设置成不可调度 - // 注意:此字段可能返回 null,表示取不到有效值。 - IsUnschedulable *bool `json:"IsUnschedulable,omitempty" name:"IsUnschedulable"` - - // 伸缩组的label列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // 创建时间 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` -} - -type ClusterAsGroupAttribute struct { - - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - - // 是否开启 - AutoScalingGroupEnabled *bool `json:"AutoScalingGroupEnabled,omitempty" name:"AutoScalingGroupEnabled"` - - // 伸缩组最大最小实例数 - AutoScalingGroupRange *AutoScalingGroupRange `json:"AutoScalingGroupRange,omitempty" name:"AutoScalingGroupRange"` -} - -type ClusterAsGroupOption struct { - - // 是否开启缩容 - // 注意:此字段可能返回 null,表示取不到有效值。 - IsScaleDownEnabled *bool `json:"IsScaleDownEnabled,omitempty" name:"IsScaleDownEnabled"` - - // 多伸缩组情况下扩容选择算法(random 随机选择,most-pods 最多类型的Pod least-waste 最少的资源浪费,默认为random) - // 注意:此字段可能返回 null,表示取不到有效值。 - Expander *string `json:"Expander,omitempty" name:"Expander"` - - // 最大并发缩容数 - // 注意:此字段可能返回 null,表示取不到有效值。 - MaxEmptyBulkDelete *int64 `json:"MaxEmptyBulkDelete,omitempty" name:"MaxEmptyBulkDelete"` - - // 集群扩容后多少分钟开始判断缩容(默认为10分钟) - // 注意:此字段可能返回 null,表示取不到有效值。 - ScaleDownDelay *int64 `json:"ScaleDownDelay,omitempty" name:"ScaleDownDelay"` - - // 节点连续空闲多少分钟后被缩容(默认为 10分钟) - // 注意:此字段可能返回 null,表示取不到有效值。 - ScaleDownUnneededTime *int64 `json:"ScaleDownUnneededTime,omitempty" name:"ScaleDownUnneededTime"` - - // 节点资源使用量低于多少(百分比)时认为空闲(默认: 50(百分比)) - // 注意:此字段可能返回 null,表示取不到有效值。 - ScaleDownUtilizationThreshold *int64 `json:"ScaleDownUtilizationThreshold,omitempty" name:"ScaleDownUtilizationThreshold"` - - // 含有本地存储Pod的节点是否不缩容(默认: FALSE) - // 注意:此字段可能返回 null,表示取不到有效值。 - SkipNodesWithLocalStorage *bool `json:"SkipNodesWithLocalStorage,omitempty" name:"SkipNodesWithLocalStorage"` - - // 含有kube-system namespace下非DaemonSet管理的Pod的节点是否不缩容 (默认: FALSE) - // 注意:此字段可能返回 null,表示取不到有效值。 - SkipNodesWithSystemPods *bool `json:"SkipNodesWithSystemPods,omitempty" name:"SkipNodesWithSystemPods"` - - // 计算资源使用量时是否默认忽略DaemonSet的实例(默认值: False,不忽略) - // 注意:此字段可能返回 null,表示取不到有效值。 - IgnoreDaemonSetsUtilization *bool `json:"IgnoreDaemonSetsUtilization,omitempty" name:"IgnoreDaemonSetsUtilization"` - - // CA做健康性判断的个数,默认3,即超过OkTotalUnreadyCount个数后,CA会进行健康性判断。 - // 注意:此字段可能返回 null,表示取不到有效值。 - OkTotalUnreadyCount *int64 `json:"OkTotalUnreadyCount,omitempty" name:"OkTotalUnreadyCount"` - - // 未就绪节点的最大百分比,此后CA会停止操作 - // 注意:此字段可能返回 null,表示取不到有效值。 - MaxTotalUnreadyPercentage *int64 `json:"MaxTotalUnreadyPercentage,omitempty" name:"MaxTotalUnreadyPercentage"` - - // 表示未准备就绪的节点在有资格进行缩减之前应该停留多长时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - ScaleDownUnreadyTime *int64 `json:"ScaleDownUnreadyTime,omitempty" name:"ScaleDownUnreadyTime"` - - // CA删除未在Kubernetes中注册的节点之前等待的时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - UnregisteredNodeRemovalTime *int64 `json:"UnregisteredNodeRemovalTime,omitempty" name:"UnregisteredNodeRemovalTime"` -} - -type ClusterBasicSettings struct { - - // 集群系统。centos7.2x86_64 或者 ubuntu16.04.1 LTSx86_64,默认取值为ubuntu16.04.1 LTSx86_64 - ClusterOs *string `json:"ClusterOs,omitempty" name:"ClusterOs"` - - // 集群版本,默认值为1.10.5 - ClusterVersion *string `json:"ClusterVersion,omitempty" name:"ClusterVersion"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 集群描述 - ClusterDescription *string `json:"ClusterDescription,omitempty" name:"ClusterDescription"` - - // 私有网络ID,形如vpc-xxx。创建托管空集群时必传。 - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 集群内新增资源所属项目ID。 - ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` - - // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到集群实例。 - TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` - - // 容器的镜像版本,"DOCKER_CUSTOMIZE"(容器定制版),"GENERAL"(普通版本,默认值) - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` - - // 是否开启节点的默认安全组(默认: 否,Aphla特性) - NeedWorkSecurityGroup *bool `json:"NeedWorkSecurityGroup,omitempty" name:"NeedWorkSecurityGroup"` - - // 当选择Cilium Overlay网络插件时,TKE会从该子网获取2个IP用来创建内网负载均衡 - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` -} - -type ClusterCIDRSettings struct { - - // 用于分配集群容器和服务 IP 的 CIDR,不得与 VPC CIDR 冲突,也不得与同 VPC 内其他集群 CIDR 冲突。且网段范围必须在内网网段内,例如:10.1.0.0/14, 192.168.0.1/18,172.16.0.0/16。 - ClusterCIDR *string `json:"ClusterCIDR,omitempty" name:"ClusterCIDR"` - - // 是否忽略 ClusterCIDR 冲突错误, 默认不忽略 - IgnoreClusterCIDRConflict *bool `json:"IgnoreClusterCIDRConflict,omitempty" name:"IgnoreClusterCIDRConflict"` - - // 集群中每个Node上最大的Pod数量。取值范围4~256。不为2的幂值时会向上取最接近的2的幂值。 - MaxNodePodNum *uint64 `json:"MaxNodePodNum,omitempty" name:"MaxNodePodNum"` - - // 集群最大的service数量。取值范围32~32768,不为2的幂值时会向上取最接近的2的幂值。默认值256 - MaxClusterServiceNum *uint64 `json:"MaxClusterServiceNum,omitempty" name:"MaxClusterServiceNum"` - - // 用于分配集群服务 IP 的 CIDR,不得与 VPC CIDR 冲突,也不得与同 VPC 内其他集群 CIDR 冲突。且网段范围必须在内网网段内,例如:10.1.0.0/14, 192.168.0.1/18,172.16.0.0/16。 - ServiceCIDR *string `json:"ServiceCIDR,omitempty" name:"ServiceCIDR"` - - // VPC-CNI网络模式下,弹性网卡的子网Id。 - EniSubnetIds []*string `json:"EniSubnetIds,omitempty" name:"EniSubnetIds"` - - // VPC-CNI网络模式下,弹性网卡IP的回收时间,取值范围[300,15768000) - ClaimExpiredSeconds *int64 `json:"ClaimExpiredSeconds,omitempty" name:"ClaimExpiredSeconds"` -} - -type ClusterCredential struct { - - // CA 根证书 - CACert *string `json:"CACert,omitempty" name:"CACert"` - - // 认证用的Token - Token *string `json:"Token,omitempty" name:"Token"` -} - -type ClusterExtraArgs struct { - - // kube-apiserver自定义参数,参数格式为["k1=v1", "k1=v2"], 例如["max-requests-inflight=500","feature-gates=PodShareProcessNamespace=true,DynamicKubeletConfig=true"] - // 注意:此字段可能返回 null,表示取不到有效值。 - KubeAPIServer []*string `json:"KubeAPIServer,omitempty" name:"KubeAPIServer"` - - // kube-controller-manager自定义参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - KubeControllerManager []*string `json:"KubeControllerManager,omitempty" name:"KubeControllerManager"` - - // kube-scheduler自定义参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - KubeScheduler []*string `json:"KubeScheduler,omitempty" name:"KubeScheduler"` - - // etcd自定义参数,只支持独立集群 - // 注意:此字段可能返回 null,表示取不到有效值。 - Etcd []*string `json:"Etcd,omitempty" name:"Etcd"` -} - -type ClusterInternalLB struct { - - // 是否开启内网访问LB - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` - - // 内网访问LB关联的子网Id - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` -} - -type ClusterNetworkSettings struct { - - // 用于分配集群容器和服务 IP 的 CIDR,不得与 VPC CIDR 冲突,也不得与同 VPC 内其他集群 CIDR 冲突 - ClusterCIDR *string `json:"ClusterCIDR,omitempty" name:"ClusterCIDR"` - - // 是否忽略 ClusterCIDR 冲突错误, 默认不忽略 - IgnoreClusterCIDRConflict *bool `json:"IgnoreClusterCIDRConflict,omitempty" name:"IgnoreClusterCIDRConflict"` - - // 集群中每个Node上最大的Pod数量(默认为256) - MaxNodePodNum *uint64 `json:"MaxNodePodNum,omitempty" name:"MaxNodePodNum"` - - // 集群最大的service数量(默认为256) - MaxClusterServiceNum *uint64 `json:"MaxClusterServiceNum,omitempty" name:"MaxClusterServiceNum"` - - // 是否启用IPVS(默认不开启) - Ipvs *bool `json:"Ipvs,omitempty" name:"Ipvs"` - - // 集群的VPCID(如果创建空集群,为必传值,否则自动设置为和集群的节点保持一致) - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 网络插件是否启用CNI(默认开启) - Cni *bool `json:"Cni,omitempty" name:"Cni"` - - // service的网络模式,当前参数只适用于ipvs+bpf模式 - // 注意:此字段可能返回 null,表示取不到有效值。 - KubeProxyMode *string `json:"KubeProxyMode,omitempty" name:"KubeProxyMode"` - - // 用于分配service的IP range,不得与 VPC CIDR 冲突,也不得与同 VPC 内其他集群 CIDR 冲突 - // 注意:此字段可能返回 null,表示取不到有效值。 - ServiceCIDR *string `json:"ServiceCIDR,omitempty" name:"ServiceCIDR"` - - // 集群关联的容器子网 - // 注意:此字段可能返回 null,表示取不到有效值。 - Subnets []*string `json:"Subnets,omitempty" name:"Subnets"` -} - -type ClusterPublicLB struct { - - // 是否开启公网访问LB - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` - - // 允许访问的来源CIDR列表 - AllowFromCidrs []*string `json:"AllowFromCidrs,omitempty" name:"AllowFromCidrs"` - - // 安全策略放通单个IP或CIDR(例如: "192.168.1.0/24",默认为拒绝所有) - SecurityPolicies []*string `json:"SecurityPolicies,omitempty" name:"SecurityPolicies"` - - // 外网访问相关的扩展参数,格式为json - ExtraParam *string `json:"ExtraParam,omitempty" name:"ExtraParam"` - - // 新内外网功能,需要传递安全组 - SecurityGroup *string `json:"SecurityGroup,omitempty" name:"SecurityGroup"` -} - -type ClusterVersion struct { - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群主版本号列表,例如1.18.4 - Versions []*string `json:"Versions,omitempty" name:"Versions"` -} - -type CommonName struct { - - // 子账户UIN - SubaccountUin *string `json:"SubaccountUin,omitempty" name:"SubaccountUin"` - - // 子账户客户端证书中的CommonName字段 - CN *string `json:"CN,omitempty" name:"CN"` -} - -type Container struct { - - // 镜像 - Image *string `json:"Image,omitempty" name:"Image"` - - // 容器名 - Name *string `json:"Name,omitempty" name:"Name"` - - // 容器启动命令 - Commands []*string `json:"Commands,omitempty" name:"Commands"` - - // 容器启动参数 - Args []*string `json:"Args,omitempty" name:"Args"` - - // 容器内操作系统的环境变量 - EnvironmentVars []*EnvironmentVariable `json:"EnvironmentVars,omitempty" name:"EnvironmentVars"` - - // CPU,制改容器最多可使用的核数,该值不可超过容器实例的总核数。单位:核。 - Cpu *float64 `json:"Cpu,omitempty" name:"Cpu"` - - // 内存,限制该容器最多可使用的内存值,该值不可超过容器实例的总内存值。单位:GiB - Memory *float64 `json:"Memory,omitempty" name:"Memory"` - - // 数据卷挂载信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - VolumeMounts []*VolumeMount `json:"VolumeMounts,omitempty" name:"VolumeMounts"` - - // 当前状态 - // 注意:此字段可能返回 null,表示取不到有效值。 - CurrentState *ContainerState `json:"CurrentState,omitempty" name:"CurrentState"` - - // 重启次数 - // 注意:此字段可能返回 null,表示取不到有效值。 - RestartCount *uint64 `json:"RestartCount,omitempty" name:"RestartCount"` - - // 容器工作目录 - // 注意:此字段可能返回 null,表示取不到有效值。 - WorkingDir *string `json:"WorkingDir,omitempty" name:"WorkingDir"` - - // 存活探针 - // 注意:此字段可能返回 null,表示取不到有效值。 - LivenessProbe *LivenessOrReadinessProbe `json:"LivenessProbe,omitempty" name:"LivenessProbe"` - - // 就绪探针 - // 注意:此字段可能返回 null,表示取不到有效值。 - ReadinessProbe *LivenessOrReadinessProbe `json:"ReadinessProbe,omitempty" name:"ReadinessProbe"` - - // Gpu限制 - // 注意:此字段可能返回 null,表示取不到有效值。 - GpuLimit *uint64 `json:"GpuLimit,omitempty" name:"GpuLimit"` -} - -type ContainerState struct { - - // 容器运行开始时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - StartTime *string `json:"StartTime,omitempty" name:"StartTime"` - - // 容器状态:created, running, exited, unknown - State *string `json:"State,omitempty" name:"State"` - - // 容器运行结束时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - FinishTime *string `json:"FinishTime,omitempty" name:"FinishTime"` - - // 容器运行退出码 - // 注意:此字段可能返回 null,表示取不到有效值。 - ExitCode *int64 `json:"ExitCode,omitempty" name:"ExitCode"` - - // 容器状态 Reason - // 注意:此字段可能返回 null,表示取不到有效值。 - Reason *string `json:"Reason,omitempty" name:"Reason"` - - // 容器状态信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Message *string `json:"Message,omitempty" name:"Message"` - - // 容器重启次数 - // 注意:此字段可能返回 null,表示取不到有效值。 - RestartCount *int64 `json:"RestartCount,omitempty" name:"RestartCount"` -} - -type ControllerStatus struct { - - // 控制器的名字 - Name *string `json:"Name,omitempty" name:"Name"` - - // 控制器是否开启 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` -} - -type CreateClusterAsGroupRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 伸缩组创建透传参数,json化字符串格式,详见[伸缩组创建实例](https://cloud.tencent.com/document/api/377/20440)接口。LaunchConfigurationId由LaunchConfigurePara参数创建,不支持填写 - AutoScalingGroupPara *string `json:"AutoScalingGroupPara,omitempty" name:"AutoScalingGroupPara"` - - // 启动配置创建透传参数,json化字符串格式,详见[创建启动配置](https://cloud.tencent.com/document/api/377/20447)接口。另外ImageId参数由于集群维度已经有的ImageId信息,这个字段不需要填写。UserData字段设置通过UserScript设置,这个字段不需要填写。 - LaunchConfigurePara *string `json:"LaunchConfigurePara,omitempty" name:"LaunchConfigurePara"` - - // 节点高级配置信息 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 节点Label数组 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` -} - -func (r *CreateClusterAsGroupRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterAsGroupRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "AutoScalingGroupPara") - delete(f, "LaunchConfigurePara") - delete(f, "InstanceAdvancedSettings") - delete(f, "Labels") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterAsGroupRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterAsGroupResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 启动配置ID - LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` - - // 伸缩组ID - AutoScalingGroupId *string `json:"AutoScalingGroupId,omitempty" name:"AutoScalingGroupId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterAsGroupResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterAsGroupResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterEndpointRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群端口所在的子网ID (仅在开启非外网访问时需要填,必须为集群所在VPC内的子网) - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` - - // 是否为外网访问(TRUE 外网访问 FALSE 内网访问,默认值: FALSE) - IsExtranet *bool `json:"IsExtranet,omitempty" name:"IsExtranet"` -} - -func (r *CreateClusterEndpointRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterEndpointRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "SubnetId") - delete(f, "IsExtranet") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterEndpointRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterEndpointResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterEndpointResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterEndpointResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterEndpointVipRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 安全策略放通单个IP或CIDR(例如: "192.168.1.0/24",默认为拒绝所有) - SecurityPolicies []*string `json:"SecurityPolicies,omitempty" name:"SecurityPolicies"` -} - -func (r *CreateClusterEndpointVipRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterEndpointVipRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "SecurityPolicies") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterEndpointVipRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterEndpointVipResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 请求任务的FlowId - RequestFlowId *int64 `json:"RequestFlowId,omitempty" name:"RequestFlowId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterEndpointVipResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterEndpointVipResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterInstancesRequest struct { - *tchttp.BaseRequest - - // 集群 ID,请填写 查询集群列表 接口中返回的 clusterId 字段 - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // CVM创建透传参数,json化字符串格式,如需要保证扩展集群节点请求幂等性需要在此参数添加ClientToken字段,详见[CVM创建实例](https://cloud.tencent.com/document/product/213/15730)接口。 - RunInstancePara *string `json:"RunInstancePara,omitempty" name:"RunInstancePara"` - - // 实例额外需要设置参数信息 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 校验规则相关选项,可配置跳过某些校验规则。目前支持GlobalRouteCIDRCheck(跳过GlobalRouter的相关校验),VpcCniCIDRCheck(跳过VpcCni相关校验) - SkipValidateOptions []*string `json:"SkipValidateOptions,omitempty" name:"SkipValidateOptions"` -} - -func (r *CreateClusterInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "RunInstancePara") - delete(f, "InstanceAdvancedSettings") - delete(f, "SkipValidateOptions") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 节点实例ID - InstanceIdSet []*string `json:"InstanceIdSet,omitempty" name:"InstanceIdSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterNodePoolFromExistingAsgRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 伸缩组ID - AutoscalingGroupId *string `json:"AutoscalingGroupId,omitempty" name:"AutoscalingGroupId"` -} - -func (r *CreateClusterNodePoolFromExistingAsgRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterNodePoolFromExistingAsgRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "AutoscalingGroupId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterNodePoolFromExistingAsgRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterNodePoolFromExistingAsgResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 节点池ID - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterNodePoolFromExistingAsgResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterNodePoolFromExistingAsgResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterNodePoolRequest struct { - *tchttp.BaseRequest - - // cluster id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // AutoScalingGroupPara AS组参数 - AutoScalingGroupPara *string `json:"AutoScalingGroupPara,omitempty" name:"AutoScalingGroupPara"` - - // LaunchConfigurePara 运行参数 - LaunchConfigurePara *string `json:"LaunchConfigurePara,omitempty" name:"LaunchConfigurePara"` - - // InstanceAdvancedSettings 示例参数 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 是否启用自动伸缩 - EnableAutoscale *bool `json:"EnableAutoscale,omitempty" name:"EnableAutoscale"` - - // 节点池名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // Labels标签 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // Taints互斥 - Taints []*Taint `json:"Taints,omitempty" name:"Taints"` - - // 节点池os - NodePoolOs *string `json:"NodePoolOs,omitempty" name:"NodePoolOs"` - - // 容器的镜像版本,"DOCKER_CUSTOMIZE"(容器定制版),"GENERAL"(普通版本,默认值) - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` - - // 资源标签 - Tags []*Tag `json:"Tags,omitempty" name:"Tags"` -} - -func (r *CreateClusterNodePoolRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterNodePoolRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "AutoScalingGroupPara") - delete(f, "LaunchConfigurePara") - delete(f, "InstanceAdvancedSettings") - delete(f, "EnableAutoscale") - delete(f, "Name") - delete(f, "Labels") - delete(f, "Taints") - delete(f, "NodePoolOs") - delete(f, "OsCustomizeType") - delete(f, "Tags") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterNodePoolRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterNodePoolResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterNodePoolResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterNodePoolResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterRequest struct { - *tchttp.BaseRequest - - // 集群容器网络配置信息 - ClusterCIDRSettings *ClusterCIDRSettings `json:"ClusterCIDRSettings,omitempty" name:"ClusterCIDRSettings"` - - // 集群类型,托管集群:MANAGED_CLUSTER,独立集群:INDEPENDENT_CLUSTER。 - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` - - // CVM创建透传参数,json化字符串格式,详见[CVM创建实例](https://cloud.tencent.com/document/product/213/15730)接口。总机型(包括地域)数量不超过10个,相同机型(地域)购买多台机器可以通过设置参数中RunInstances中InstanceCount来实现。 - RunInstancesForNode []*RunInstancesForNode `json:"RunInstancesForNode,omitempty" name:"RunInstancesForNode"` - - // 集群的基本配置信息 - ClusterBasicSettings *ClusterBasicSettings `json:"ClusterBasicSettings,omitempty" name:"ClusterBasicSettings"` - - // 集群高级配置信息 - ClusterAdvancedSettings *ClusterAdvancedSettings `json:"ClusterAdvancedSettings,omitempty" name:"ClusterAdvancedSettings"` - - // 节点高级配置信息 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 已存在实例的配置信息。所有实例必须在同一个VPC中,最大数量不超过100,不支持添加竞价实例。 - ExistedInstancesForNode []*ExistedInstancesForNode `json:"ExistedInstancesForNode,omitempty" name:"ExistedInstancesForNode"` - - // CVM类型和其对应的数据盘挂载配置信息 - InstanceDataDiskMountSettings []*InstanceDataDiskMountSetting `json:"InstanceDataDiskMountSettings,omitempty" name:"InstanceDataDiskMountSettings"` - - // 需要安装的扩展组件信息 - ExtensionAddons []*ExtensionAddon `json:"ExtensionAddons,omitempty" name:"ExtensionAddons"` -} - -func (r *CreateClusterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterCIDRSettings") - delete(f, "ClusterType") - delete(f, "RunInstancesForNode") - delete(f, "ClusterBasicSettings") - delete(f, "ClusterAdvancedSettings") - delete(f, "InstanceAdvancedSettings") - delete(f, "ExistedInstancesForNode") - delete(f, "InstanceDataDiskMountSettings") - delete(f, "ExtensionAddons") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterRouteRequest struct { - *tchttp.BaseRequest - - // 路由表名称。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 目的端CIDR。 - DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` - - // 下一跳地址。 - GatewayIp *string `json:"GatewayIp,omitempty" name:"GatewayIp"` -} - -func (r *CreateClusterRouteRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterRouteRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableName") - delete(f, "DestinationCidrBlock") - delete(f, "GatewayIp") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterRouteRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterRouteResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterRouteResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterRouteResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterRouteTableRequest struct { - *tchttp.BaseRequest - - // 路由表名称 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 路由表CIDR - RouteTableCidrBlock *string `json:"RouteTableCidrBlock,omitempty" name:"RouteTableCidrBlock"` - - // 路由表绑定的VPC - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 是否忽略CIDR冲突 - IgnoreClusterCidrConflict *int64 `json:"IgnoreClusterCidrConflict,omitempty" name:"IgnoreClusterCidrConflict"` -} - -func (r *CreateClusterRouteTableRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterRouteTableRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableName") - delete(f, "RouteTableCidrBlock") - delete(f, "VpcId") - delete(f, "IgnoreClusterCidrConflict") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateClusterRouteTableRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateClusterRouteTableResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateClusterRouteTableResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateClusterRouteTableResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateEKSClusterRequest struct { - *tchttp.BaseRequest - - // k8s版本号。可为1.14.4, 1.12.8。 - K8SVersion *string `json:"K8SVersion,omitempty" name:"K8SVersion"` - - // vpc 的Id - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 子网Id 列表 - SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` - - // 集群描述信息 - ClusterDesc *string `json:"ClusterDesc,omitempty" name:"ClusterDesc"` - - // Serivce 所在子网Id - ServiceSubnetId *string `json:"ServiceSubnetId,omitempty" name:"ServiceSubnetId"` - - // 集群自定义的Dns服务器信息 - DnsServers []*DnsServerConf `json:"DnsServers,omitempty" name:"DnsServers"` - - // 扩展参数。须是map[string]string 的json 格式。 - ExtraParam *string `json:"ExtraParam,omitempty" name:"ExtraParam"` - - // 是否在用户集群内开启Dns。默认为true - EnableVpcCoreDNS *bool `json:"EnableVpcCoreDNS,omitempty" name:"EnableVpcCoreDNS"` - - // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到集群实例。 - TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` -} - -func (r *CreateEKSClusterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateEKSClusterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "K8SVersion") - delete(f, "VpcId") - delete(f, "ClusterName") - delete(f, "SubnetIds") - delete(f, "ClusterDesc") - delete(f, "ServiceSubnetId") - delete(f, "DnsServers") - delete(f, "ExtraParam") - delete(f, "EnableVpcCoreDNS") - delete(f, "TagSpecification") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateEKSClusterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateEKSClusterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 弹性集群Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateEKSClusterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateEKSClusterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreateEKSContainerInstancesRequest struct { - *tchttp.BaseRequest - - // 容器组 - Containers []*Container `json:"Containers,omitempty" name:"Containers"` - - // EKS Container Instance容器实例名称 - EksCiName *string `json:"EksCiName,omitempty" name:"EksCiName"` - - // 指定新创建实例所属于的安全组Id - SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` - - // 实例所属子网Id - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` - - // 实例所属VPC的Id - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 内存,单位:GiB。可参考[资源规格](https://cloud.tencent.com/document/product/457/39808)文档 - Memory *float64 `json:"Memory,omitempty" name:"Memory"` - - // CPU,单位:核。可参考[资源规格](https://cloud.tencent.com/document/product/457/39808)文档 - Cpu *float64 `json:"Cpu,omitempty" name:"Cpu"` - - // 实例重启策略: Always(总是重启)、Never(从不重启)、OnFailure(失败时重启),默认:Always。 - RestartPolicy *string `json:"RestartPolicy,omitempty" name:"RestartPolicy"` - - // 镜像仓库凭证数组 - ImageRegistryCredentials []*ImageRegistryCredential `json:"ImageRegistryCredentials,omitempty" name:"ImageRegistryCredentials"` - - // 数据卷,包含NfsVolume数组和CbsVolume数组 - EksCiVolume *EksCiVolume `json:"EksCiVolume,omitempty" name:"EksCiVolume"` - - // 实例副本数,默认为1 - Replicas *int64 `json:"Replicas,omitempty" name:"Replicas"` - - // Init 容器 - InitContainers []*Container `json:"InitContainers,omitempty" name:"InitContainers"` - - // 自定义DNS配置 - DnsConfig *DNSConfig `json:"DnsConfig,omitempty" name:"DnsConfig"` - - // 用来绑定容器实例的已有EIP的列表。如传值,需要保证数值和Replicas相等。 - // 另外此参数和AutoCreateEipAttribute互斥。 - ExistedEipIds []*string `json:"ExistedEipIds,omitempty" name:"ExistedEipIds"` - - // 自动创建EIP的可选参数。若传此参数,则会自动创建EIP。 - // 另外此参数和ExistedEipIds互斥 - AutoCreateEipAttribute *EipAttribute `json:"AutoCreateEipAttribute,omitempty" name:"AutoCreateEipAttribute"` - - // 是否为容器实例自动创建EIP,默认为false。若传true,则此参数和ExistedEipIds互斥 - AutoCreateEip *bool `json:"AutoCreateEip,omitempty" name:"AutoCreateEip"` - - // Pod 所需的 CPU 资源型号,如果不填写则默认不强制指定 CPU 类型。目前支持型号如下: - // intel - // amd - // - 支持优先级顺序写法,如 “amd,intel” 表示优先创建 amd 资源 Pod,如果所选地域可用区 amd 资源不足,则会创建 intel 资源 Pod。 - CpuType *string `json:"CpuType,omitempty" name:"CpuType"` - - // 容器实例所需的 GPU 资源型号,目前支持型号如下: - // 1/4\*V100 - // 1/2\*V100 - // V100 - // 1/4\*T4 - // 1/2\*T4 - // T4 - GpuType *string `json:"GpuType,omitempty" name:"GpuType"` - - // Pod 所需的 GPU 数量,如填写,请确保为支持的规格。默认单位为卡,无需再次注明。 - GpuCount *uint64 `json:"GpuCount,omitempty" name:"GpuCount"` - - // 为容器实例关联 CAM 角色,value 填写 CAM 角色名称,容器实例可获取该 CAM 角色包含的权限策略,方便 容器实例 内的程序进行如购买资源、读写存储等云资源操作。 - CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` -} - -func (r *CreateEKSContainerInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateEKSContainerInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Containers") - delete(f, "EksCiName") - delete(f, "SecurityGroupIds") - delete(f, "SubnetId") - delete(f, "VpcId") - delete(f, "Memory") - delete(f, "Cpu") - delete(f, "RestartPolicy") - delete(f, "ImageRegistryCredentials") - delete(f, "EksCiVolume") - delete(f, "Replicas") - delete(f, "InitContainers") - delete(f, "DnsConfig") - delete(f, "ExistedEipIds") - delete(f, "AutoCreateEipAttribute") - delete(f, "AutoCreateEip") - delete(f, "CpuType") - delete(f, "GpuType") - delete(f, "GpuCount") - delete(f, "CamRoleName") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateEKSContainerInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreateEKSContainerInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // EKS Container Instance Id集合,格式为eksci-xxx,是容器实例的唯一标识。 - EksCiIds []*string `json:"EksCiIds,omitempty" name:"EksCiIds"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreateEKSContainerInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateEKSContainerInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusAlertRuleRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 告警配置 - AlertRule *PrometheusAlertRuleDetail `json:"AlertRule,omitempty" name:"AlertRule"` -} - -func (r *CreatePrometheusAlertRuleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusAlertRuleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "AlertRule") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreatePrometheusAlertRuleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusAlertRuleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 告警id - Id *string `json:"Id,omitempty" name:"Id"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreatePrometheusAlertRuleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusAlertRuleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusDashboardRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 面板组名称 - DashboardName *string `json:"DashboardName,omitempty" name:"DashboardName"` - - // 面板列表 - // 每一项是一个grafana dashboard的json定义 - Contents []*string `json:"Contents,omitempty" name:"Contents"` -} - -func (r *CreatePrometheusDashboardRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusDashboardRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "DashboardName") - delete(f, "Contents") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreatePrometheusDashboardRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusDashboardResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreatePrometheusDashboardResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusDashboardResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusTemplateRequest struct { - *tchttp.BaseRequest - - // 模板设置 - Template *PrometheusTemplate `json:"Template,omitempty" name:"Template"` -} - -func (r *CreatePrometheusTemplateRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusTemplateRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Template") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreatePrometheusTemplateRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type CreatePrometheusTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 模板Id - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *CreatePrometheusTemplateResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreatePrometheusTemplateResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DNSConfig struct { - - // DNS 服务器IP地址列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Nameservers []*string `json:"Nameservers,omitempty" name:"Nameservers"` - - // DNS搜索域列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Searches []*string `json:"Searches,omitempty" name:"Searches"` - - // 对象选项列表,每个对象由name和value(可选)构成 - // 注意:此字段可能返回 null,表示取不到有效值。 - Options []*DNSConfigOption `json:"Options,omitempty" name:"Options"` -} - -type DNSConfigOption struct { - - // 配置项名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - Name *string `json:"Name,omitempty" name:"Name"` - - // 项值 - // 注意:此字段可能返回 null,表示取不到有效值。 - Value *string `json:"Value,omitempty" name:"Value"` -} - -type DataDisk struct { - - // 云盘类型 - // 注意:此字段可能返回 null,表示取不到有效值。 - DiskType *string `json:"DiskType,omitempty" name:"DiskType"` - - // 文件系统(ext3/ext4/xfs) - // 注意:此字段可能返回 null,表示取不到有效值。 - FileSystem *string `json:"FileSystem,omitempty" name:"FileSystem"` - - // 云盘大小(G) - // 注意:此字段可能返回 null,表示取不到有效值。 - DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` - - // 是否自动化格式盘并挂载 - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoFormatAndMount *bool `json:"AutoFormatAndMount,omitempty" name:"AutoFormatAndMount"` - - // 挂载目录 - // 注意:此字段可能返回 null,表示取不到有效值。 - MountTarget *string `json:"MountTarget,omitempty" name:"MountTarget"` - - // 挂载设备名或分区名 - // 注意:此字段可能返回 null,表示取不到有效值。 - DiskPartition *string `json:"DiskPartition,omitempty" name:"DiskPartition"` -} - -type DeleteClusterAsGroupsRequest struct { - *tchttp.BaseRequest - - // 集群ID,通过[DescribeClusters](https://cloud.tencent.com/document/api/457/31862)接口获取。 - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群伸缩组ID的列表 - AutoScalingGroupIds []*string `json:"AutoScalingGroupIds,omitempty" name:"AutoScalingGroupIds"` - - // 是否保留伸缩组中的节点(默认值: false(不保留)) - KeepInstance *bool `json:"KeepInstance,omitempty" name:"KeepInstance"` -} - -func (r *DeleteClusterAsGroupsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterAsGroupsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "AutoScalingGroupIds") - delete(f, "KeepInstance") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterAsGroupsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterAsGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterAsGroupsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterAsGroupsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterEndpointRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 是否为外网访问(TRUE 外网访问 FALSE 内网访问,默认值: FALSE) - IsExtranet *bool `json:"IsExtranet,omitempty" name:"IsExtranet"` -} - -func (r *DeleteClusterEndpointRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterEndpointRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "IsExtranet") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterEndpointRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterEndpointResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterEndpointResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterEndpointResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterEndpointVipRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DeleteClusterEndpointVipRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterEndpointVipRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterEndpointVipRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterEndpointVipResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterEndpointVipResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterEndpointVipResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterInstancesRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 主机InstanceId列表 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 集群实例删除时的策略:terminate(销毁实例,仅支持按量计费云主机实例) retain (仅移除,保留实例) - InstanceDeleteMode *string `json:"InstanceDeleteMode,omitempty" name:"InstanceDeleteMode"` - - // 是否强制删除(当节点在初始化时,可以指定参数为TRUE) - ForceDelete *bool `json:"ForceDelete,omitempty" name:"ForceDelete"` -} - -func (r *DeleteClusterInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "InstanceIds") - delete(f, "InstanceDeleteMode") - delete(f, "ForceDelete") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 删除成功的实例ID列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - SuccInstanceIds []*string `json:"SuccInstanceIds,omitempty" name:"SuccInstanceIds"` - - // 删除失败的实例ID列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - FailedInstanceIds []*string `json:"FailedInstanceIds,omitempty" name:"FailedInstanceIds"` - - // 未匹配到的实例ID列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - NotFoundInstanceIds []*string `json:"NotFoundInstanceIds,omitempty" name:"NotFoundInstanceIds"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterNodePoolRequest struct { - *tchttp.BaseRequest - - // 节点池对应的 ClusterId - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 需要删除的节点池 Id 列表 - NodePoolIds []*string `json:"NodePoolIds,omitempty" name:"NodePoolIds"` - - // 删除节点池时是否保留节点池内节点(节点仍然会被移出集群,但对应的实例不会被销毁) - KeepInstance *bool `json:"KeepInstance,omitempty" name:"KeepInstance"` -} - -func (r *DeleteClusterNodePoolRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterNodePoolRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolIds") - delete(f, "KeepInstance") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterNodePoolRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterNodePoolResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterNodePoolResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterNodePoolResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群实例删除时的策略:terminate(销毁实例,仅支持按量计费云主机实例) retain (仅移除,保留实例) - InstanceDeleteMode *string `json:"InstanceDeleteMode,omitempty" name:"InstanceDeleteMode"` - - // 集群删除时资源的删除策略,目前支持CBS(默认保留CBS) - ResourceDeleteOptions []*ResourceDeleteOption `json:"ResourceDeleteOptions,omitempty" name:"ResourceDeleteOptions"` -} - -func (r *DeleteClusterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "InstanceDeleteMode") - delete(f, "ResourceDeleteOptions") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterRouteRequest struct { - *tchttp.BaseRequest - - // 路由表名称。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 下一跳地址。 - GatewayIp *string `json:"GatewayIp,omitempty" name:"GatewayIp"` - - // 目的端CIDR。 - DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` -} - -func (r *DeleteClusterRouteRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterRouteRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableName") - delete(f, "GatewayIp") - delete(f, "DestinationCidrBlock") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterRouteRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterRouteResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterRouteResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterRouteResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterRouteTableRequest struct { - *tchttp.BaseRequest - - // 路由表名称 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` -} - -func (r *DeleteClusterRouteTableRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterRouteTableRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableName") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteClusterRouteTableRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteClusterRouteTableResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteClusterRouteTableResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteClusterRouteTableResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteEKSClusterRequest struct { - *tchttp.BaseRequest - - // 弹性集群Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DeleteEKSClusterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteEKSClusterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteEKSClusterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteEKSClusterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteEKSClusterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteEKSClusterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeleteEKSContainerInstancesRequest struct { - *tchttp.BaseRequest - - // 需要删除的EksCi的Id。 最大数量不超过20 - EksCiIds []*string `json:"EksCiIds,omitempty" name:"EksCiIds"` - - // 是否释放为EksCi自动创建的Eip - ReleaseAutoCreatedEip *bool `json:"ReleaseAutoCreatedEip,omitempty" name:"ReleaseAutoCreatedEip"` -} - -func (r *DeleteEKSContainerInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteEKSContainerInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "EksCiIds") - delete(f, "ReleaseAutoCreatedEip") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteEKSContainerInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeleteEKSContainerInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeleteEKSContainerInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeleteEKSContainerInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusAlertRuleRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 告警规则id列表 - AlertIds []*string `json:"AlertIds,omitempty" name:"AlertIds"` -} - -func (r *DeletePrometheusAlertRuleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusAlertRuleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "AlertIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeletePrometheusAlertRuleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusAlertRuleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeletePrometheusAlertRuleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusAlertRuleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusTemplateRequest struct { - *tchttp.BaseRequest - - // 模板id - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` -} - -func (r *DeletePrometheusTemplateRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusTemplateRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "TemplateId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeletePrometheusTemplateRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeletePrometheusTemplateResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusTemplateResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusTemplateSyncRequest struct { - *tchttp.BaseRequest - - // 模板id - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 取消同步的对象列表 - Targets []*PrometheusTemplateSyncTarget `json:"Targets,omitempty" name:"Targets"` -} - -func (r *DeletePrometheusTemplateSyncRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusTemplateSyncRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "TemplateId") - delete(f, "Targets") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeletePrometheusTemplateSyncRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DeletePrometheusTemplateSyncResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DeletePrometheusTemplateSyncResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DeletePrometheusTemplateSyncResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeAvailableClusterVersionRequest struct { - *tchttp.BaseRequest - - // 集群 Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群 Id 列表 - ClusterIds []*string `json:"ClusterIds,omitempty" name:"ClusterIds"` -} - -func (r *DescribeAvailableClusterVersionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeAvailableClusterVersionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ClusterIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeAvailableClusterVersionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeAvailableClusterVersionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 可升级的集群版本号 - // 注意:此字段可能返回 null,表示取不到有效值。 - Versions []*string `json:"Versions,omitempty" name:"Versions"` - - // 集群信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Clusters []*ClusterVersion `json:"Clusters,omitempty" name:"Clusters"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeAvailableClusterVersionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeAvailableClusterVersionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAsGroupOptionRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterAsGroupOptionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAsGroupOptionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterAsGroupOptionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAsGroupOptionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群弹性伸缩属性 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterAsGroupOption *ClusterAsGroupOption `json:"ClusterAsGroupOption,omitempty" name:"ClusterAsGroupOption"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterAsGroupOptionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAsGroupOptionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAsGroupsRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 伸缩组ID列表,如果为空,表示拉取集群关联的所有伸缩组。 - AutoScalingGroupIds []*string `json:"AutoScalingGroupIds,omitempty" name:"AutoScalingGroupIds"` - - // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Offset *int64 `json:"Offset,omitempty" name:"Offset"` - - // 返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Limit *int64 `json:"Limit,omitempty" name:"Limit"` -} - -func (r *DescribeClusterAsGroupsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAsGroupsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "AutoScalingGroupIds") - delete(f, "Offset") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterAsGroupsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAsGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群关联的伸缩组总数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群关联的伸缩组列表 - ClusterAsGroupSet []*ClusterAsGroup `json:"ClusterAsGroupSet,omitempty" name:"ClusterAsGroupSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterAsGroupsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAsGroupsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAuthenticationOptionsRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterAuthenticationOptionsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAuthenticationOptionsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterAuthenticationOptionsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterAuthenticationOptionsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // ServiceAccount认证配置 - // 注意:此字段可能返回 null,表示取不到有效值。 - ServiceAccounts *ServiceAccountAuthenticationOptions `json:"ServiceAccounts,omitempty" name:"ServiceAccounts"` - - // 最近一次修改操作结果,返回值可能为:Updating,Success,Failed,TimeOut - // 注意:此字段可能返回 null,表示取不到有效值。 - LatestOperationState *string `json:"LatestOperationState,omitempty" name:"LatestOperationState"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterAuthenticationOptionsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterAuthenticationOptionsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterCommonNamesRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 子账户列表,不可超出最大值50 - SubaccountUins []*string `json:"SubaccountUins,omitempty" name:"SubaccountUins"` - - // 角色ID列表,不可超出最大值50 - RoleIds []*string `json:"RoleIds,omitempty" name:"RoleIds"` -} - -func (r *DescribeClusterCommonNamesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterCommonNamesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "SubaccountUins") - delete(f, "RoleIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterCommonNamesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterCommonNamesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 子账户Uin与其客户端证书的CN字段映射 - CommonNames []*CommonName `json:"CommonNames,omitempty" name:"CommonNames"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterCommonNamesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterCommonNamesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterControllersRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterControllersRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterControllersRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterControllersRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterControllersResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 描述集群中各个控制器的状态 - ControllerStatusSet []*ControllerStatus `json:"ControllerStatusSet,omitempty" name:"ControllerStatusSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterControllersResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterControllersResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterEndpointStatusRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 是否为外网访问(TRUE 外网访问 FALSE 内网访问,默认值: FALSE) - IsExtranet *bool `json:"IsExtranet,omitempty" name:"IsExtranet"` -} - -func (r *DescribeClusterEndpointStatusRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterEndpointStatusRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "IsExtranet") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterEndpointStatusRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterEndpointStatusResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 查询集群访问端口状态(Created 开启成功,Creating 开启中,NotFound 未开启) - // 注意:此字段可能返回 null,表示取不到有效值。 - Status *string `json:"Status,omitempty" name:"Status"` - - // 开启访问入口失败信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - ErrorMsg *string `json:"ErrorMsg,omitempty" name:"ErrorMsg"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterEndpointStatusResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterEndpointStatusResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterEndpointVipStatusRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterEndpointVipStatusRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterEndpointVipStatusRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterEndpointVipStatusRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterEndpointVipStatusResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 端口操作状态 (Creating 创建中 CreateFailed 创建失败 Created 创建完成 Deleting 删除中 DeletedFailed 删除失败 Deleted 已删除 NotFound 未发现操作 ) - Status *string `json:"Status,omitempty" name:"Status"` - - // 操作失败的原因 - // 注意:此字段可能返回 null,表示取不到有效值。 - ErrorMsg *string `json:"ErrorMsg,omitempty" name:"ErrorMsg"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterEndpointVipStatusResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterEndpointVipStatusResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterInstancesRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Offset *int64 `json:"Offset,omitempty" name:"Offset"` - - // 返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Limit *int64 `json:"Limit,omitempty" name:"Limit"` - - // 需要获取的节点实例Id列表。如果为空,表示拉取集群下所有节点实例。 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 节点角色, MASTER, WORKER, ETCD, MASTER_ETCD,ALL, 默认为WORKER。默认为WORKER类型。 - InstanceRole *string `json:"InstanceRole,omitempty" name:"InstanceRole"` - - // 过滤条件列表;Name的可选值为nodepool-id、nodepool-instance-type;Name为nodepool-id表示根据节点池id过滤机器,Value的值为具体的节点池id,Name为nodepool-instance-type表示节点加入节点池的方式,Value的值为MANUALLY_ADDED(手动加入节点池)、AUTOSCALING_ADDED(伸缩组扩容方式加入节点池)、ALL(手动加入节点池 和 伸缩组扩容方式加入节点池) - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribeClusterInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "InstanceIds") - delete(f, "InstanceRole") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群中实例总数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群中实例列表 - InstanceSet []*Instance `json:"InstanceSet,omitempty" name:"InstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterKubeconfigRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 默认false 获取内网,是否获取外网访问的kubeconfig - IsExtranet *bool `json:"IsExtranet,omitempty" name:"IsExtranet"` -} - -func (r *DescribeClusterKubeconfigRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterKubeconfigRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "IsExtranet") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterKubeconfigRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterKubeconfigResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 子账户kubeconfig文件,可用于直接访问集群kube-apiserver - Kubeconfig *string `json:"Kubeconfig,omitempty" name:"Kubeconfig"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterKubeconfigResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterKubeconfigResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterNodePoolDetailRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` -} - -func (r *DescribeClusterNodePoolDetailRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterNodePoolDetailRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterNodePoolDetailRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterNodePoolDetailResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 节点池详情 - NodePool *NodePool `json:"NodePool,omitempty" name:"NodePool"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterNodePoolDetailResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterNodePoolDetailResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterNodePoolsRequest struct { - *tchttp.BaseRequest - - // ClusterId(集群id) - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterNodePoolsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterNodePoolsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterNodePoolsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterNodePoolsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // NodePools(节点池列表) - // 注意:此字段可能返回 null,表示取不到有效值。 - NodePoolSet []*NodePool `json:"NodePoolSet,omitempty" name:"NodePoolSet"` - - // 资源总数 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterNodePoolsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterNodePoolsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterRouteTablesRequest struct { - *tchttp.BaseRequest -} - -func (r *DescribeClusterRouteTablesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterRouteTablesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterRouteTablesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterRouteTablesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 符合条件的实例数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群路由表对象。 - RouteTableSet []*RouteTableInfo `json:"RouteTableSet,omitempty" name:"RouteTableSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterRouteTablesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterRouteTablesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterRoutesRequest struct { - *tchttp.BaseRequest - - // 路由表名称。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 过滤条件,当前只支持按照单个条件GatewayIP进行过滤(可选) - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribeClusterRoutesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterRoutesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableName") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterRoutesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 符合条件的实例数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群路由对象。 - RouteSet []*RouteInfo `json:"RouteSet,omitempty" name:"RouteSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterRoutesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterRoutesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterSecurityRequest struct { - *tchttp.BaseRequest - - // 集群 ID,请填写 查询集群列表 接口中返回的 clusterId 字段 - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeClusterSecurityRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterSecurityRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClusterSecurityRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClusterSecurityResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群的账号名称 - UserName *string `json:"UserName,omitempty" name:"UserName"` - - // 集群的访问密码 - Password *string `json:"Password,omitempty" name:"Password"` - - // 集群访问CA证书 - CertificationAuthority *string `json:"CertificationAuthority,omitempty" name:"CertificationAuthority"` - - // 集群访问的地址 - ClusterExternalEndpoint *string `json:"ClusterExternalEndpoint,omitempty" name:"ClusterExternalEndpoint"` - - // 集群访问的域名 - Domain *string `json:"Domain,omitempty" name:"Domain"` - - // 集群Endpoint地址 - PgwEndpoint *string `json:"PgwEndpoint,omitempty" name:"PgwEndpoint"` - - // 集群访问策略组 - // 注意:此字段可能返回 null,表示取不到有效值。 - SecurityPolicy []*string `json:"SecurityPolicy,omitempty" name:"SecurityPolicy"` - - // 集群Kubeconfig文件 - // 注意:此字段可能返回 null,表示取不到有效值。 - Kubeconfig *string `json:"Kubeconfig,omitempty" name:"Kubeconfig"` - - // 集群JnsGw的访问地址 - // 注意:此字段可能返回 null,表示取不到有效值。 - JnsGwEndpoint *string `json:"JnsGwEndpoint,omitempty" name:"JnsGwEndpoint"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClusterSecurityResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClusterSecurityResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClustersRequest struct { - *tchttp.BaseRequest - - // 集群ID列表(为空时, - // 表示获取账号下所有集群) - ClusterIds []*string `json:"ClusterIds,omitempty" name:"ClusterIds"` - - // 偏移量,默认0 - Offset *int64 `json:"Offset,omitempty" name:"Offset"` - - // 最大输出条数,默认20,最大为100 - Limit *int64 `json:"Limit,omitempty" name:"Limit"` - - // · ClusterName - // 按照【集群名】进行过滤。 - // 类型:String - // 必选:否 - // - // · Tags - // 按照【标签键值对】进行过滤。 - // 类型:String - // 必选:否 - // - // · vpc-id - // 按照【VPC】进行过滤。 - // 类型:String - // 必选:否 - // - // · tag-key - // 按照【标签键】进行过滤。 - // 类型:String - // 必选:否 - // - // · tag-value - // 按照【标签值】进行过滤。 - // 类型:String - // 必选:否 - // - // · tag:tag-key - // 按照【标签键值对】进行过滤。 - // 类型:String - // 必选:否 - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - - // 集群类型,例如:MANAGED_CLUSTER - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` -} - -func (r *DescribeClustersRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClustersRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterIds") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "Filters") - delete(f, "ClusterType") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeClustersRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeClustersResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群总个数 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群信息列表 - Clusters []*Cluster `json:"Clusters,omitempty" name:"Clusters"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeClustersResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeClustersResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSClusterCredentialRequest struct { - *tchttp.BaseRequest - - // 集群Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeEKSClusterCredentialRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSClusterCredentialRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEKSClusterCredentialRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSClusterCredentialResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群的接入地址信息 - Addresses []*IPAddress `json:"Addresses,omitempty" name:"Addresses"` - - // 集群的认证信息 - Credential *ClusterCredential `json:"Credential,omitempty" name:"Credential"` - - // 集群的公网访问信息 - PublicLB *ClusterPublicLB `json:"PublicLB,omitempty" name:"PublicLB"` - - // 集群的内网访问信息 - InternalLB *ClusterInternalLB `json:"InternalLB,omitempty" name:"InternalLB"` - - // 标记是否新的内外网功能 - ProxyLB *bool `json:"ProxyLB,omitempty" name:"ProxyLB"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEKSClusterCredentialResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSClusterCredentialResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSClustersRequest struct { - *tchttp.BaseRequest - - // 集群ID列表(为空时, - // 表示获取账号下所有集群) - ClusterIds []*string `json:"ClusterIds,omitempty" name:"ClusterIds"` - - // 偏移量,默认0 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 最大输出条数,默认20 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - - // 过滤条件,当前只支持按照单个条件ClusterName进行过滤 - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribeEKSClustersRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSClustersRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterIds") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEKSClustersRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSClustersResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群总个数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 集群信息列表 - Clusters []*EksCluster `json:"Clusters,omitempty" name:"Clusters"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEKSClustersResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSClustersResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstanceEventRequest struct { - *tchttp.BaseRequest - - // 容器实例id - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // 最大事件数量。默认为50,最大取值100。 - Limit *int64 `json:"Limit,omitempty" name:"Limit"` -} - -func (r *DescribeEKSContainerInstanceEventRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstanceEventRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "EksCiId") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEKSContainerInstanceEventRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstanceEventResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 事件集合 - Events []*Event `json:"Events,omitempty" name:"Events"` - - // 容器实例id - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEKSContainerInstanceEventResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstanceEventResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstanceRegionsRequest struct { - *tchttp.BaseRequest -} - -func (r *DescribeEKSContainerInstanceRegionsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstanceRegionsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEKSContainerInstanceRegionsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstanceRegionsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // EKS Container Instance支持的地域信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Regions []*EksCiRegionInfo `json:"Regions,omitempty" name:"Regions"` - - // 总数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEKSContainerInstanceRegionsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstanceRegionsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstancesRequest struct { - *tchttp.BaseRequest - - // 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - - // 偏移量,默认0 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 过滤条件,可条件: - // (1)实例名称 - // KeyName: eks-ci-name - // 类型:String - // - // (2)实例状态 - // KeyName: status - // 类型:String - // 可选值:"Pending", "Running", "Succeeded", "Failed" - // - // (3)内网ip - // KeyName: private-ip - // 类型:String - // - // (4)EIP地址 - // KeyName: eip-address - // 类型:String - // - // (5)VpcId - // KeyName: vpc-id - // 类型:String - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - - // 容器实例 ID 数组 - EksCiIds []*string `json:"EksCiIds,omitempty" name:"EksCiIds"` -} - -func (r *DescribeEKSContainerInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Limit") - delete(f, "Offset") - delete(f, "Filters") - delete(f, "EksCiIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEKSContainerInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEKSContainerInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 容器组总数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 容器组列表 - EksCis []*EksCi `json:"EksCis,omitempty" name:"EksCis"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEKSContainerInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEKSContainerInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEksContainerInstanceLogRequest struct { - *tchttp.BaseRequest - - // Eks Container Instance Id,即容器实例Id - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // 容器名称,单容器的实例可选填。如果为多容器实例,请指定容器名称。 - ContainerName *string `json:"ContainerName,omitempty" name:"ContainerName"` - - // 返回最新日志行数,默认500,最大2000。日志内容最大返回 1M 数据。 - Tail *uint64 `json:"Tail,omitempty" name:"Tail"` - - // UTC时间,RFC3339标准 - StartTime *string `json:"StartTime,omitempty" name:"StartTime"` - - // 是否是查上一个容器(如果容器退出重启了) - Previous *bool `json:"Previous,omitempty" name:"Previous"` - - // 查询最近多少秒内的日志 - SinceSeconds *uint64 `json:"SinceSeconds,omitempty" name:"SinceSeconds"` - - // 日志总大小限制 - LimitBytes *uint64 `json:"LimitBytes,omitempty" name:"LimitBytes"` -} - -func (r *DescribeEksContainerInstanceLogRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEksContainerInstanceLogRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "EksCiId") - delete(f, "ContainerName") - delete(f, "Tail") - delete(f, "StartTime") - delete(f, "Previous") - delete(f, "SinceSeconds") - delete(f, "LimitBytes") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEksContainerInstanceLogRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEksContainerInstanceLogResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 容器名称 - ContainerName *string `json:"ContainerName,omitempty" name:"ContainerName"` - - // 日志内容 - LogContent *string `json:"LogContent,omitempty" name:"LogContent"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEksContainerInstanceLogResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEksContainerInstanceLogResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEnableVpcCniProgressRequest struct { - *tchttp.BaseRequest - - // 开启vpc-cni的集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribeEnableVpcCniProgressRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEnableVpcCniProgressRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeEnableVpcCniProgressRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeEnableVpcCniProgressResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 任务进度的描述:Running/Succeed/Failed - Status *string `json:"Status,omitempty" name:"Status"` - - // 当任务进度为Failed时,对任务状态的进一步描述,例如IPAMD组件安装失败 - // 注意:此字段可能返回 null,表示取不到有效值。 - ErrorMessage *string `json:"ErrorMessage,omitempty" name:"ErrorMessage"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeEnableVpcCniProgressResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeEnableVpcCniProgressResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeExistedInstancesRequest struct { - *tchttp.BaseRequest - - // 集群 ID,请填写查询集群列表 接口中返回的 ClusterId 字段(仅通过ClusterId获取需要过滤条件中的VPCID。节点状态比较时会使用该地域下所有集群中的节点进行比较。参数不支持同时指定InstanceIds和ClusterId。 - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 按照一个或者多个实例ID查询。实例ID形如:ins-xxxxxxxx。(此参数的具体格式可参考API简介的id.N一节)。每次请求的实例的上限为100。参数不支持同时指定InstanceIds和Filters。 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 过滤条件,字段和详见[CVM查询实例](https://cloud.tencent.com/document/api/213/15728)如果设置了ClusterId,会附加集群的VPCID作为查询字段,在此情况下如果在Filter中指定了"vpc-id"作为过滤字段,指定的VPCID必须与集群的VPCID相同。 - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - - // 实例IP进行过滤(同时支持内网IP和外网IP) - VagueIpAddress *string `json:"VagueIpAddress,omitempty" name:"VagueIpAddress"` - - // 实例名称进行过滤 - VagueInstanceName *string `json:"VagueInstanceName,omitempty" name:"VagueInstanceName"` - - // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - - // 根据多个实例IP进行过滤 - IpAddresses []*string `json:"IpAddresses,omitempty" name:"IpAddresses"` -} - -func (r *DescribeExistedInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeExistedInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "InstanceIds") - delete(f, "Filters") - delete(f, "VagueIpAddress") - delete(f, "VagueInstanceName") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "IpAddresses") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeExistedInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeExistedInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 已经存在的实例信息数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - ExistedInstanceSet []*ExistedInstance `json:"ExistedInstanceSet,omitempty" name:"ExistedInstanceSet"` - - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeExistedInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeExistedInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeExternalClusterSpecRequest struct { - *tchttp.BaseRequest - - // 注册集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 默认false 获取内网,是否获取外网版注册命令 - IsExtranet *bool `json:"IsExtranet,omitempty" name:"IsExtranet"` - - // 默认false 不刷新有效时间 ,true刷新有效时间 - IsRefreshExpirationTime *bool `json:"IsRefreshExpirationTime,omitempty" name:"IsRefreshExpirationTime"` -} - -func (r *DescribeExternalClusterSpecRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeExternalClusterSpecRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "IsExtranet") - delete(f, "IsRefreshExpirationTime") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeExternalClusterSpecRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeExternalClusterSpecResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 导入第三方集群YAML定义 - Spec *string `json:"Spec,omitempty" name:"Spec"` - - // agent.yaml文件过期时间字符串,时区UTC - Expiration *string `json:"Expiration,omitempty" name:"Expiration"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeExternalClusterSpecResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeExternalClusterSpecResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeImagesRequest struct { - *tchttp.BaseRequest -} - -func (r *DescribeImagesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeImagesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeImagesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeImagesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 镜像数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 镜像信息列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - ImageInstanceSet []*ImageInstance `json:"ImageInstanceSet,omitempty" name:"ImageInstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeImagesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeImagesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAgentInstancesRequest struct { - *tchttp.BaseRequest - - // 集群id - // 可以是tke, eks, edge的集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DescribePrometheusAgentInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAgentInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusAgentInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAgentInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 关联该集群的实例列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Instances []*string `json:"Instances,omitempty" name:"Instances"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusAgentInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAgentInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAgentsRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 用于分页 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 用于分页 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` -} - -func (r *DescribePrometheusAgentsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAgentsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "Offset") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusAgentsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAgentsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 被关联集群信息 - Agents []*PrometheusAgentOverview `json:"Agents,omitempty" name:"Agents"` - - // 被关联集群总量 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusAgentsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAgentsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAlertHistoryRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 告警名称 - RuleName *string `json:"RuleName,omitempty" name:"RuleName"` - - // 开始时间 - StartTime *string `json:"StartTime,omitempty" name:"StartTime"` - - // 结束时间 - EndTime *string `json:"EndTime,omitempty" name:"EndTime"` - - // label集合 - Labels *string `json:"Labels,omitempty" name:"Labels"` - - // 分片 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 分片 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` -} - -func (r *DescribePrometheusAlertHistoryRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAlertHistoryRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "RuleName") - delete(f, "StartTime") - delete(f, "EndTime") - delete(f, "Labels") - delete(f, "Offset") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusAlertHistoryRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAlertHistoryResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 告警历史 - Items []*PrometheusAlertHistoryItem `json:"Items,omitempty" name:"Items"` - - // 总数 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusAlertHistoryResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAlertHistoryResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAlertRuleRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 分页 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 分页 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - - // 过滤 - // 支持ID,Name - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribePrometheusAlertRuleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAlertRuleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "Offset") - delete(f, "Limit") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusAlertRuleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusAlertRuleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 告警详情 - AlertRules []*PrometheusAlertRuleDetail `json:"AlertRules,omitempty" name:"AlertRules"` - - // 总数 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusAlertRuleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusAlertRuleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusInstanceRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` -} - -func (r *DescribePrometheusInstanceRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusInstanceRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusInstanceRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusInstanceResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 实例名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 私有网络id - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 子网id - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` - - // cos桶名称 - COSBucket *string `json:"COSBucket,omitempty" name:"COSBucket"` - - // 数据查询地址 - QueryAddress *string `json:"QueryAddress,omitempty" name:"QueryAddress"` - - // 实例中grafana相关的信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Grafana *PrometheusGrafanaInfo `json:"Grafana,omitempty" name:"Grafana"` - - // 用户自定义alertmanager - // 注意:此字段可能返回 null,表示取不到有效值。 - AlertManagerUrl *string `json:"AlertManagerUrl,omitempty" name:"AlertManagerUrl"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusInstanceResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusInstanceResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusOverviewsRequest struct { - *tchttp.BaseRequest - - // 用于分页 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 用于分页 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - - // 过滤实例,目前支持: - // ID: 通过实例ID来过滤 - // Name: 通过实例名称来过滤 - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribePrometheusOverviewsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusOverviewsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Offset") - delete(f, "Limit") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusOverviewsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusOverviewsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 实例列表 - Instances []*PrometheusInstanceOverview `json:"Instances,omitempty" name:"Instances"` - - // 实例总数 - // 注意:此字段可能返回 null,表示取不到有效值。 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusOverviewsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusOverviewsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTargetsRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 集群类型 - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 过滤条件,当前支持 - // Name=state - // Value=up, down, unknown - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` -} - -func (r *DescribePrometheusTargetsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTargetsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "ClusterType") - delete(f, "ClusterId") - delete(f, "Filters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusTargetsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTargetsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 所有Job的targets信息 - Jobs []*PrometheusJobTargets `json:"Jobs,omitempty" name:"Jobs"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusTargetsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTargetsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTemplateSyncRequest struct { - *tchttp.BaseRequest - - // 模板ID - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` -} - -func (r *DescribePrometheusTemplateSyncRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTemplateSyncRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "TemplateId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusTemplateSyncRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTemplateSyncResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 同步目标详情 - Targets []*PrometheusTemplateSyncTarget `json:"Targets,omitempty" name:"Targets"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusTemplateSyncResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTemplateSyncResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTemplatesRequest struct { - *tchttp.BaseRequest - - // 模糊过滤条件,支持 - // Level 按模板级别过滤 - // Name 按名称过滤 - // Describe 按描述过滤 - // ID 按templateId过滤 - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - - // 分页偏移 - Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - - // 总数限制 - Limit *uint64 `json:"Limit,omitempty" name:"Limit"` -} - -func (r *DescribePrometheusTemplatesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTemplatesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Filters") - delete(f, "Offset") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribePrometheusTemplatesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribePrometheusTemplatesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 模板列表 - Templates []*PrometheusTemplate `json:"Templates,omitempty" name:"Templates"` - - // 总数 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribePrometheusTemplatesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribePrometheusTemplatesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeRegionsRequest struct { - *tchttp.BaseRequest -} - -func (r *DescribeRegionsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeRegionsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeRegionsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeRegionsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 地域的数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 地域列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - RegionInstanceSet []*RegionInstance `json:"RegionInstanceSet,omitempty" name:"RegionInstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeRegionsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeRegionsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeRouteTableConflictsRequest struct { - *tchttp.BaseRequest - - // 路由表CIDR - RouteTableCidrBlock *string `json:"RouteTableCidrBlock,omitempty" name:"RouteTableCidrBlock"` - - // 路由表绑定的VPC - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` -} - -func (r *DescribeRouteTableConflictsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeRouteTableConflictsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "RouteTableCidrBlock") - delete(f, "VpcId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeRouteTableConflictsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeRouteTableConflictsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 路由表是否冲突。 - HasConflict *bool `json:"HasConflict,omitempty" name:"HasConflict"` - - // 路由表冲突列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - RouteTableConflictSet []*RouteTableConflict `json:"RouteTableConflictSet,omitempty" name:"RouteTableConflictSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeRouteTableConflictsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeRouteTableConflictsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeVersionsRequest struct { - *tchttp.BaseRequest -} - -func (r *DescribeVersionsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeVersionsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVersionsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeVersionsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 版本数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 版本列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - VersionInstanceSet []*VersionInstance `json:"VersionInstanceSet,omitempty" name:"VersionInstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeVersionsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeVersionsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DescribeVpcCniPodLimitsRequest struct { - *tchttp.BaseRequest - - // 查询的机型所在可用区,如:ap-guangzhou-3,默认为空,即不按可用区过滤信息 - Zone *string `json:"Zone,omitempty" name:"Zone"` - - // 查询的实例机型系列信息,如:S5,默认为空,即不按机型系列过滤信息 - InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` - - // 查询的实例机型信息,如:S5.LARGE8,默认为空,即不按机型过滤信息 - InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` -} - -func (r *DescribeVpcCniPodLimitsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeVpcCniPodLimitsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Zone") - delete(f, "InstanceFamily") - delete(f, "InstanceType") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpcCniPodLimitsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DescribeVpcCniPodLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 机型数据数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - - // 机型信息及其可支持的最大VPC-CNI模式Pod数量信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - PodLimitsInstanceSet []*PodLimitsInstance `json:"PodLimitsInstanceSet,omitempty" name:"PodLimitsInstanceSet"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DescribeVpcCniPodLimitsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeVpcCniPodLimitsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DisableClusterDeletionProtectionRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DisableClusterDeletionProtectionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DisableClusterDeletionProtectionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DisableClusterDeletionProtectionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DisableClusterDeletionProtectionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DisableClusterDeletionProtectionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DisableClusterDeletionProtectionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DisableVpcCniNetworkTypeRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *DisableVpcCniNetworkTypeRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DisableVpcCniNetworkTypeRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DisableVpcCniNetworkTypeRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type DisableVpcCniNetworkTypeResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *DisableVpcCniNetworkTypeResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DisableVpcCniNetworkTypeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type DnsServerConf struct { - - // 域名。空字符串表示所有域名。 - Domain *string `json:"Domain,omitempty" name:"Domain"` - - // dns 服务器地址列表。地址格式 ip:port - DnsServers []*string `json:"DnsServers,omitempty" name:"DnsServers"` -} - -type EipAttribute struct { - - // 容器实例删除后,EIP是否释放。 - // Never表示不释放,其他任意值(包括空字符串)表示释放。 - DeletePolicy *string `json:"DeletePolicy,omitempty" name:"DeletePolicy"` - - // EIP线路类型。默认值:BGP。 - // 已开通静态单线IP白名单的用户,可选值: - // CMCC:中国移动 - // CTCC:中国电信 - // CUCC:中国联通 - // 注意:仅部分地域支持静态单线IP。 - // 注意:此字段可能返回 null,表示取不到有效值。 - InternetServiceProvider *string `json:"InternetServiceProvider,omitempty" name:"InternetServiceProvider"` - - // EIP出带宽上限,单位:Mbps。 - // 注意:此字段可能返回 null,表示取不到有效值。 - InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` -} - -type EksCi struct { - - // EKS Cotainer Instance Id - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // EKS Cotainer Instance Name - EksCiName *string `json:"EksCiName,omitempty" name:"EksCiName"` - - // 内存大小 - Memory *float64 `json:"Memory,omitempty" name:"Memory"` - - // CPU大小 - Cpu *float64 `json:"Cpu,omitempty" name:"Cpu"` - - // 安全组ID - SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` - - // 容器组的重启策略 - // 注意:此字段可能返回 null,表示取不到有效值。 - RestartPolicy *string `json:"RestartPolicy,omitempty" name:"RestartPolicy"` - - // 返回容器组创建状态:Pending,Running,Succeeded,Failed。其中: - // Failed (运行失败)指的容器组退出,RestartPolilcy为Never, 有容器exitCode非0; - // Succeeded(运行成功)指的是容器组退出了,RestartPolicy为Never或onFailure,所有容器exitCode都为0; - // Failed和Succeeded这两种状态都会停止运行,停止计费。 - // Pending是创建中,Running是 运行中。 - // 注意:此字段可能返回 null,表示取不到有效值。 - Status *string `json:"Status,omitempty" name:"Status"` - - // 接到请求后的系统创建时间。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CreationTime *string `json:"CreationTime,omitempty" name:"CreationTime"` - - // 容器全部成功退出后的时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - SucceededTime *string `json:"SucceededTime,omitempty" name:"SucceededTime"` - - // 容器列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Containers []*Container `json:"Containers,omitempty" name:"Containers"` - - // 数据卷信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - EksCiVolume *EksCiVolume `json:"EksCiVolume,omitempty" name:"EksCiVolume"` - - // 容器组运行的安全上下文 - // 注意:此字段可能返回 null,表示取不到有效值。 - SecurityContext *SecurityContext `json:"SecurityContext,omitempty" name:"SecurityContext"` - - // 内网ip地址 - // 注意:此字段可能返回 null,表示取不到有效值。 - PrivateIp *string `json:"PrivateIp,omitempty" name:"PrivateIp"` - - // 容器实例绑定的Eip地址,注意可能为空 - // 注意:此字段可能返回 null,表示取不到有效值。 - EipAddress *string `json:"EipAddress,omitempty" name:"EipAddress"` - - // GPU类型。如无使用GPU则不返回 - // 注意:此字段可能返回 null,表示取不到有效值。 - GpuType *string `json:"GpuType,omitempty" name:"GpuType"` - - // CPU类型 - // 注意:此字段可能返回 null,表示取不到有效值。 - CpuType *string `json:"CpuType,omitempty" name:"CpuType"` - - // GPU卡数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - GpuCount *uint64 `json:"GpuCount,omitempty" name:"GpuCount"` - - // 实例所属VPC的Id - // 注意:此字段可能返回 null,表示取不到有效值。 - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 实例所属子网Id - // 注意:此字段可能返回 null,表示取不到有效值。 - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` - - // 初始化容器列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - InitContainers []*Container `json:"InitContainers,omitempty" name:"InitContainers"` - - // 为容器实例关联 CAM 角色,value 填写 CAM 角色名称,容器实例可获取该 CAM 角色包含的权限策略,方便 容器实例 内的程序进行如购买资源、读写存储等云资源操作。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CamRoleName *string `json:"CamRoleName,omitempty" name:"CamRoleName"` - - // 自动为用户创建的EipId - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoCreatedEipId *string `json:"AutoCreatedEipId,omitempty" name:"AutoCreatedEipId"` - - // 容器状态是否持久化 - // 注意:此字段可能返回 null,表示取不到有效值。 - PersistStatus *bool `json:"PersistStatus,omitempty" name:"PersistStatus"` -} - -type EksCiRegionInfo struct { - - // 地域别名,形如gz - Alias *string `json:"Alias,omitempty" name:"Alias"` - - // 地域名,形如ap-guangzhou - RegionName *string `json:"RegionName,omitempty" name:"RegionName"` - - // 地域ID - RegionId *uint64 `json:"RegionId,omitempty" name:"RegionId"` -} - -type EksCiVolume struct { - - // Cbs Volume - // 注意:此字段可能返回 null,表示取不到有效值。 - CbsVolumes []*CbsVolume `json:"CbsVolumes,omitempty" name:"CbsVolumes"` - - // Nfs Volume - // 注意:此字段可能返回 null,表示取不到有效值。 - NfsVolumes []*NfsVolume `json:"NfsVolumes,omitempty" name:"NfsVolumes"` -} - -type EksCluster struct { - - // 集群Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // Vpc Id - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 子网列表 - SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` - - // k8s 版本号 - K8SVersion *string `json:"K8SVersion,omitempty" name:"K8SVersion"` - - // 集群状态(running运行中,initializing 初始化中,failed异常) - Status *string `json:"Status,omitempty" name:"Status"` - - // 集群描述信息 - ClusterDesc *string `json:"ClusterDesc,omitempty" name:"ClusterDesc"` - - // 集群创建时间 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - - // Service 子网Id - ServiceSubnetId *string `json:"ServiceSubnetId,omitempty" name:"ServiceSubnetId"` - - // 集群的自定义dns 服务器信息 - DnsServers []*DnsServerConf `json:"DnsServers,omitempty" name:"DnsServers"` - - // 将来删除集群时是否要删除cbs。默认为 FALSE - NeedDeleteCbs *bool `json:"NeedDeleteCbs,omitempty" name:"NeedDeleteCbs"` - - // 是否在用户集群内开启Dns。默认为TRUE - EnableVpcCoreDNS *bool `json:"EnableVpcCoreDNS,omitempty" name:"EnableVpcCoreDNS"` - - // 标签描述列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification"` -} - -type EnableClusterDeletionProtectionRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` -} - -func (r *EnableClusterDeletionProtectionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *EnableClusterDeletionProtectionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "EnableClusterDeletionProtectionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type EnableClusterDeletionProtectionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *EnableClusterDeletionProtectionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *EnableClusterDeletionProtectionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type EnableVpcCniNetworkTypeRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 开启vpc-cni的模式,tke-route-eni开启的是策略路由模式,tke-direct-eni开启的是独立网卡模式 - VpcCniType *string `json:"VpcCniType,omitempty" name:"VpcCniType"` - - // 是否开启固定IP模式 - EnableStaticIp *bool `json:"EnableStaticIp,omitempty" name:"EnableStaticIp"` - - // 使用的容器子网 - Subnets []*string `json:"Subnets,omitempty" name:"Subnets"` - - // 在固定IP模式下,Pod销毁后退还IP的时间,传参必须大于300;不传默认IP永不销毁。 - ExpiredSeconds *uint64 `json:"ExpiredSeconds,omitempty" name:"ExpiredSeconds"` -} - -func (r *EnableVpcCniNetworkTypeRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *EnableVpcCniNetworkTypeRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "VpcCniType") - delete(f, "EnableStaticIp") - delete(f, "Subnets") - delete(f, "ExpiredSeconds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "EnableVpcCniNetworkTypeRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type EnableVpcCniNetworkTypeResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *EnableVpcCniNetworkTypeResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *EnableVpcCniNetworkTypeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type EnhancedService struct { - - // 开启云安全服务。若不指定该参数,则默认开启云安全服务。 - SecurityService *RunSecurityServiceEnabled `json:"SecurityService,omitempty" name:"SecurityService"` - - // 开启云监控服务。若不指定该参数,则默认开启云监控服务。 - MonitorService *RunMonitorServiceEnabled `json:"MonitorService,omitempty" name:"MonitorService"` - - // 开启云自动化助手服务。若不指定该参数,则默认不开启云自动化助手服务。 - AutomationService *RunAutomationServiceEnabled `json:"AutomationService,omitempty" name:"AutomationService"` -} - -type EnvironmentVariable struct { - - // key - Name *string `json:"Name,omitempty" name:"Name"` - - // val - Value *string `json:"Value,omitempty" name:"Value"` -} - -type Event struct { - - // pod名称 - PodName *string `json:"PodName,omitempty" name:"PodName"` - - // 事件原因内容 - Reason *string `json:"Reason,omitempty" name:"Reason"` - - // 事件类型 - Type *string `json:"Type,omitempty" name:"Type"` - - // 事件出现次数 - Count *int64 `json:"Count,omitempty" name:"Count"` - - // 事件第一次出现时间 - FirstTimestamp *string `json:"FirstTimestamp,omitempty" name:"FirstTimestamp"` - - // 事件最后一次出现时间 - LastTimestamp *string `json:"LastTimestamp,omitempty" name:"LastTimestamp"` - - // 事件内容 - Message *string `json:"Message,omitempty" name:"Message"` -} - -type Exec struct { - - // 容器内检测的命令 - // 注意:此字段可能返回 null,表示取不到有效值。 - Commands []*string `json:"Commands,omitempty" name:"Commands"` -} - -type ExistedInstance struct { - - // 实例是否支持加入集群(TRUE 可以加入 FALSE 不能加入)。 - // 注意:此字段可能返回 null,表示取不到有效值。 - Usable *bool `json:"Usable,omitempty" name:"Usable"` - - // 实例不支持加入的原因。 - // 注意:此字段可能返回 null,表示取不到有效值。 - UnusableReason *string `json:"UnusableReason,omitempty" name:"UnusableReason"` - - // 实例已经所在的集群ID。 - // 注意:此字段可能返回 null,表示取不到有效值。 - AlreadyInCluster *string `json:"AlreadyInCluster,omitempty" name:"AlreadyInCluster"` - - // 实例ID形如:ins-xxxxxxxx。 - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 实例名称。 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` - - // 实例主网卡的内网IP列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PrivateIpAddresses []*string `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` - - // 实例主网卡的公网IP列表。 - // 注意:此字段可能返回 null,表示取不到有效值。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` - - // 创建时间。按照ISO8601标准表示,并且使用UTC时间。格式为:YYYY-MM-DDThh:mm:ssZ。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - - // 实例的CPU核数,单位:核。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CPU *uint64 `json:"CPU,omitempty" name:"CPU"` - - // 实例内存容量,单位:GB。 - // 注意:此字段可能返回 null,表示取不到有效值。 - Memory *uint64 `json:"Memory,omitempty" name:"Memory"` - - // 操作系统名称。 - // 注意:此字段可能返回 null,表示取不到有效值。 - OsName *string `json:"OsName,omitempty" name:"OsName"` - - // 实例机型。 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` - - // 伸缩组ID - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoscalingGroupId *string `json:"AutoscalingGroupId,omitempty" name:"AutoscalingGroupId"` - - // 实例计费模式。取值范围: PREPAID:表示预付费,即包年包月 POSTPAID_BY_HOUR:表示后付费,即按量计费 CDHPAID:CDH付费,即只对CDH计费,不对CDH上的实例计费。 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` -} - -type ExistedInstancesForNode struct { - - // 节点角色,取值:MASTER_ETCD, WORKER。MASTER_ETCD只有在创建 INDEPENDENT_CLUSTER 独立集群时需要指定。MASTER_ETCD节点数量为3~7,建议为奇数。MASTER_ETCD最小配置为4C8G。 - NodeRole *string `json:"NodeRole,omitempty" name:"NodeRole"` - - // 已存在实例的重装参数 - ExistedInstancesPara *ExistedInstancesPara `json:"ExistedInstancesPara,omitempty" name:"ExistedInstancesPara"` - - // 节点高级设置,会覆盖集群级别设置的InstanceAdvancedSettings(当前只对节点自定义参数ExtraArgs生效) - InstanceAdvancedSettingsOverride *InstanceAdvancedSettings `json:"InstanceAdvancedSettingsOverride,omitempty" name:"InstanceAdvancedSettingsOverride"` - - // 自定义模式集群,可指定每个节点的pod数量 - DesiredPodNumbers []*int64 `json:"DesiredPodNumbers,omitempty" name:"DesiredPodNumbers"` -} - -type ExistedInstancesPara struct { - - // 集群ID - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 实例额外需要设置参数信息 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 - EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` - - // 节点登录信息(目前仅支持使用Password或者单个KeyIds) - LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` - - // 实例所属安全组。该参数可以通过调用 DescribeSecurityGroups 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。 - SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` - - // 重装系统时,可以指定修改实例的HostName(集群为HostName模式时,此参数必传,规则名称除不支持大写字符外与[CVM创建实例](https://cloud.tencent.com/document/product/213/15730)接口HostName一致) - HostName *string `json:"HostName,omitempty" name:"HostName"` -} - -type ExtensionAddon struct { - - // 扩展组件名称 - AddonName *string `json:"AddonName,omitempty" name:"AddonName"` - - // 扩展组件信息(扩展组件资源对象的json字符串描述) - AddonParam *string `json:"AddonParam,omitempty" name:"AddonParam"` -} - -type Filter struct { - - // 需要过滤的字段。 - Name *string `json:"Name,omitempty" name:"Name"` - - // 字段的过滤值。 - Values []*string `json:"Values,omitempty" name:"Values"` -} - -type ForwardApplicationRequestV3Request struct { - *tchttp.BaseRequest - - // 请求集群addon的访问 - Method *string `json:"Method,omitempty" name:"Method"` - - // 请求集群addon的路径 - Path *string `json:"Path,omitempty" name:"Path"` - - // 请求集群addon后允许接收的数据格式 - Accept *string `json:"Accept,omitempty" name:"Accept"` - - // 请求集群addon的数据格式 - ContentType *string `json:"ContentType,omitempty" name:"ContentType"` - - // 请求集群addon的数据 - RequestBody *string `json:"RequestBody,omitempty" name:"RequestBody"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 是否编码请求内容 - EncodedBody *string `json:"EncodedBody,omitempty" name:"EncodedBody"` -} - -func (r *ForwardApplicationRequestV3Request) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ForwardApplicationRequestV3Request) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Method") - delete(f, "Path") - delete(f, "Accept") - delete(f, "ContentType") - delete(f, "RequestBody") - delete(f, "ClusterName") - delete(f, "EncodedBody") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ForwardApplicationRequestV3Request has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ForwardApplicationRequestV3Response struct { - *tchttp.BaseResponse - Response *struct { - - // 请求集群addon后返回的数据 - ResponseBody *string `json:"ResponseBody,omitempty" name:"ResponseBody"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ForwardApplicationRequestV3Response) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ForwardApplicationRequestV3Response) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type GetTkeAppChartListRequest struct { - *tchttp.BaseRequest - - // app类型,取值log,scheduler,network,storage,monitor,dns,image,other,invisible - Kind *string `json:"Kind,omitempty" name:"Kind"` - - // app支持的操作系统,取值arm32、arm64、amd64 - Arch *string `json:"Arch,omitempty" name:"Arch"` - - // 集群类型,取值tke、eks - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` -} - -func (r *GetTkeAppChartListRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *GetTkeAppChartListRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "Kind") - delete(f, "Arch") - delete(f, "ClusterType") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "GetTkeAppChartListRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type GetTkeAppChartListResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 所支持的chart列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - AppCharts []*AppChart `json:"AppCharts,omitempty" name:"AppCharts"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *GetTkeAppChartListResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *GetTkeAppChartListResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type GetUpgradeInstanceProgressRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 最多获取多少个节点的进度 - Limit *int64 `json:"Limit,omitempty" name:"Limit"` - - // 从第几个节点开始获取进度 - Offset *int64 `json:"Offset,omitempty" name:"Offset"` -} - -func (r *GetUpgradeInstanceProgressRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *GetUpgradeInstanceProgressRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "Limit") - delete(f, "Offset") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "GetUpgradeInstanceProgressRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type GetUpgradeInstanceProgressResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 升级节点总数 - Total *int64 `json:"Total,omitempty" name:"Total"` - - // 已升级节点总数 - Done *int64 `json:"Done,omitempty" name:"Done"` - - // 升级任务生命周期 - // process 运行中 - // paused 已停止 - // pauing 正在停止 - // done 已完成 - // timeout 已超时 - // aborted 已取消 - LifeState *string `json:"LifeState,omitempty" name:"LifeState"` - - // 各节点升级进度详情 - Instances []*InstanceUpgradeProgressItem `json:"Instances,omitempty" name:"Instances"` - - // 集群当前状态 - ClusterStatus *InstanceUpgradeClusterStatus `json:"ClusterStatus,omitempty" name:"ClusterStatus"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *GetUpgradeInstanceProgressResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *GetUpgradeInstanceProgressResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type HttpGet struct { - - // HttpGet检测的路径 - // 注意:此字段可能返回 null,表示取不到有效值。 - Path *string `json:"Path,omitempty" name:"Path"` - - // HttpGet检测的端口号 - // 注意:此字段可能返回 null,表示取不到有效值。 - Port *int64 `json:"Port,omitempty" name:"Port"` - - // HTTP or HTTPS - // 注意:此字段可能返回 null,表示取不到有效值。 - Scheme *string `json:"Scheme,omitempty" name:"Scheme"` -} - -type IPAddress struct { - - // Ip 地址的类型。可为 advertise, public 等 - Type *string `json:"Type,omitempty" name:"Type"` - - // Ip 地址 - Ip *string `json:"Ip,omitempty" name:"Ip"` - - // 网络端口 - Port *uint64 `json:"Port,omitempty" name:"Port"` -} - -type ImageInstance struct { - - // 镜像别名 - // 注意:此字段可能返回 null,表示取不到有效值。 - Alias *string `json:"Alias,omitempty" name:"Alias"` - - // 操作系统名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - OsName *string `json:"OsName,omitempty" name:"OsName"` - - // 镜像ID - // 注意:此字段可能返回 null,表示取不到有效值。 - ImageId *string `json:"ImageId,omitempty" name:"ImageId"` - - // 容器的镜像版本,"DOCKER_CUSTOMIZE"(容器定制版),"GENERAL"(普通版本,默认值) - // 注意:此字段可能返回 null,表示取不到有效值。 - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` -} - -type ImageRegistryCredential struct { - - // 镜像仓库地址 - Server *string `json:"Server,omitempty" name:"Server"` - - // 用户名 - Username *string `json:"Username,omitempty" name:"Username"` - - // 密码 - Password *string `json:"Password,omitempty" name:"Password"` - - // ImageRegistryCredential的名字 - Name *string `json:"Name,omitempty" name:"Name"` -} - -type Instance struct { - - // 实例ID - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 节点角色, MASTER, WORKER, ETCD, MASTER_ETCD,ALL, 默认为WORKER - InstanceRole *string `json:"InstanceRole,omitempty" name:"InstanceRole"` - - // 实例异常(或者处于初始化中)的原因 - FailedReason *string `json:"FailedReason,omitempty" name:"FailedReason"` - - // 实例的状态(running 运行中,initializing 初始化中,failed 异常) - InstanceState *string `json:"InstanceState,omitempty" name:"InstanceState"` - - // 实例是否封锁状态 - // 注意:此字段可能返回 null,表示取不到有效值。 - DrainStatus *string `json:"DrainStatus,omitempty" name:"DrainStatus"` - - // 节点配置 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 添加时间 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - - // 节点内网IP - // 注意:此字段可能返回 null,表示取不到有效值。 - LanIP *string `json:"LanIP,omitempty" name:"LanIP"` - - // 资源池ID - // 注意:此字段可能返回 null,表示取不到有效值。 - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 自动伸缩组ID - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoscalingGroupId *string `json:"AutoscalingGroupId,omitempty" name:"AutoscalingGroupId"` -} - -type InstanceAdvancedSettings struct { - - // 数据盘挂载点, 默认不挂载数据盘. 已格式化的 ext3,ext4,xfs 文件系统的数据盘将直接挂载,其他文件系统或未格式化的数据盘将自动格式化为ext4 (tlinux系统格式化成xfs)并挂载,请注意备份数据! 无数据盘或有多块数据盘的云主机此设置不生效。 - // 注意,注意,多盘场景请使用下方的DataDisks数据结构,设置对应的云盘类型、云盘大小、挂载路径、是否格式化等信息。 - // 注意:此字段可能返回 null,表示取不到有效值。 - MountTarget *string `json:"MountTarget,omitempty" name:"MountTarget"` - - // dockerd --graph 指定值, 默认为 /var/lib/docker - // 注意:此字段可能返回 null,表示取不到有效值。 - DockerGraphPath *string `json:"DockerGraphPath,omitempty" name:"DockerGraphPath"` - - // base64 编码的用户脚本, 此脚本会在 k8s 组件运行后执行, 需要用户保证脚本的可重入及重试逻辑, 脚本及其生成的日志文件可在节点的 /data/ccs_userscript/ 路径查看, 如果要求节点需要在进行初始化完成后才可加入调度, 可配合 unschedulable 参数使用, 在 userScript 最后初始化完成后, 添加 kubectl uncordon nodename --kubeconfig=/root/.kube/config 命令使节点加入调度 - // 注意:此字段可能返回 null,表示取不到有效值。 - UserScript *string `json:"UserScript,omitempty" name:"UserScript"` - - // 设置加入的节点是否参与调度,默认值为0,表示参与调度;非0表示不参与调度, 待节点初始化完成之后, 可执行kubectl uncordon nodename使node加入调度. - Unschedulable *int64 `json:"Unschedulable,omitempty" name:"Unschedulable"` - - // 节点Label数组 - // 注意:此字段可能返回 null,表示取不到有效值。 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // 多盘数据盘挂载信息:新建节点时请确保购买CVM的参数传递了购买多个数据盘的信息,如CreateClusterInstances API的RunInstancesPara下的DataDisks也需要设置购买多个数据盘, 具体可以参考CreateClusterInstances接口的添加集群节点(多块数据盘)样例;添加已有节点时,请确保填写的分区信息在节点上真实存在 - // 注意:此字段可能返回 null,表示取不到有效值。 - DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` - - // 节点相关的自定义参数信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - ExtraArgs *InstanceExtraArgs `json:"ExtraArgs,omitempty" name:"ExtraArgs"` - - // 该节点属于podCIDR大小自定义模式时,可指定节点上运行的pod数量上限 - // 注意:此字段可能返回 null,表示取不到有效值。 - DesiredPodNumber *int64 `json:"DesiredPodNumber,omitempty" name:"DesiredPodNumber"` - - // base64 编码的用户脚本,在初始化节点之前执行,目前只对添加已有节点生效 - // 注意:此字段可能返回 null,表示取不到有效值。 - PreStartUserScript *string `json:"PreStartUserScript,omitempty" name:"PreStartUserScript"` -} - -type InstanceDataDiskMountSetting struct { - - // CVM实例类型 - InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` - - // 数据盘挂载信息 - DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks"` - - // CVM实例所属可用区 - Zone *string `json:"Zone,omitempty" name:"Zone"` -} - -type InstanceExtraArgs struct { - - // kubelet自定义参数,参数格式为["k1=v1", "k1=v2"], 例如["root-dir=/var/lib/kubelet","feature-gates=PodShareProcessNamespace=true,DynamicKubeletConfig=true"] - // 注意:此字段可能返回 null,表示取不到有效值。 - Kubelet []*string `json:"Kubelet,omitempty" name:"Kubelet"` -} - -type InstanceUpgradeClusterStatus struct { - - // pod总数 - PodTotal *int64 `json:"PodTotal,omitempty" name:"PodTotal"` - - // NotReady pod总数 - NotReadyPod *int64 `json:"NotReadyPod,omitempty" name:"NotReadyPod"` -} - -type InstanceUpgradePreCheckResult struct { - - // 检查是否通过 - CheckPass *bool `json:"CheckPass,omitempty" name:"CheckPass"` - - // 检查项数组 - Items []*InstanceUpgradePreCheckResultItem `json:"Items,omitempty" name:"Items"` - - // 本节点独立pod列表 - SinglePods []*string `json:"SinglePods,omitempty" name:"SinglePods"` -} - -type InstanceUpgradePreCheckResultItem struct { - - // 工作负载的命名空间 - Namespace *string `json:"Namespace,omitempty" name:"Namespace"` - - // 工作负载类型 - WorkLoadKind *string `json:"WorkLoadKind,omitempty" name:"WorkLoadKind"` - - // 工作负载名称 - WorkLoadName *string `json:"WorkLoadName,omitempty" name:"WorkLoadName"` - - // 驱逐节点前工作负载running的pod数目 - Before *uint64 `json:"Before,omitempty" name:"Before"` - - // 驱逐节点后工作负载running的pod数目 - After *uint64 `json:"After,omitempty" name:"After"` - - // 工作负载在本节点上的pod列表 - Pods []*string `json:"Pods,omitempty" name:"Pods"` -} - -type InstanceUpgradeProgressItem struct { - - // 节点instanceID - InstanceID *string `json:"InstanceID,omitempty" name:"InstanceID"` - - // 任务生命周期 - // process 运行中 - // paused 已停止 - // pauing 正在停止 - // done 已完成 - // timeout 已超时 - // aborted 已取消 - // pending 还未开始 - LifeState *string `json:"LifeState,omitempty" name:"LifeState"` - - // 升级开始时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - StartAt *string `json:"StartAt,omitempty" name:"StartAt"` - - // 升级结束时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - EndAt *string `json:"EndAt,omitempty" name:"EndAt"` - - // 升级前检查结果 - CheckResult *InstanceUpgradePreCheckResult `json:"CheckResult,omitempty" name:"CheckResult"` - - // 升级步骤详情 - Detail []*TaskStepInfo `json:"Detail,omitempty" name:"Detail"` -} - -type Label struct { - - // map表中的Name - Name *string `json:"Name,omitempty" name:"Name"` - - // map表中的Value - Value *string `json:"Value,omitempty" name:"Value"` -} - -type LivenessOrReadinessProbe struct { - - // 探针参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - Probe *Probe `json:"Probe,omitempty" name:"Probe"` - - // HttpGet检测参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - HttpGet *HttpGet `json:"HttpGet,omitempty" name:"HttpGet"` - - // 容器内检测命令参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - Exec *Exec `json:"Exec,omitempty" name:"Exec"` - - // TcpSocket检测的端口参数 - // 注意:此字段可能返回 null,表示取不到有效值。 - TcpSocket *TcpSocket `json:"TcpSocket,omitempty" name:"TcpSocket"` -} - -type LoginSettings struct { - - // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
  • Linux实例密码必须8到30位,至少包括两项[a-z],[A-Z]、[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
  • Windows实例密码必须12到30位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) \` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? /]中的特殊符号。

    若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。 - // 注意:此字段可能返回 null,表示取不到有效值。 - Password *string `json:"Password,omitempty" name:"Password"` - - // 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例;KeyId可通过接口[DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699)获取,密钥与密码不能同时指定,同时Windows操作系统不支持指定密钥。当前仅支持购买的时候指定一个密钥。 - // 注意:此字段可能返回 null,表示取不到有效值。 - KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds"` - - // 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。取值范围:
  • TRUE:表示保持镜像的登录设置
  • FALSE:表示不保持镜像的登录设置

    默认取值:FALSE。 - // 注意:此字段可能返回 null,表示取不到有效值。 - KeepImageLogin *string `json:"KeepImageLogin,omitempty" name:"KeepImageLogin"` -} - -type ManuallyAdded struct { - - // 加入中的节点数量 - Joining *int64 `json:"Joining,omitempty" name:"Joining"` - - // 初始化中的节点数量 - Initializing *int64 `json:"Initializing,omitempty" name:"Initializing"` - - // 正常的节点数量 - Normal *int64 `json:"Normal,omitempty" name:"Normal"` - - // 节点总数 - Total *int64 `json:"Total,omitempty" name:"Total"` -} - -type ModifyClusterAsGroupAttributeRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群关联的伸缩组属性 - ClusterAsGroupAttribute *ClusterAsGroupAttribute `json:"ClusterAsGroupAttribute,omitempty" name:"ClusterAsGroupAttribute"` -} - -func (r *ModifyClusterAsGroupAttributeRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAsGroupAttributeRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ClusterAsGroupAttribute") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterAsGroupAttributeRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAsGroupAttributeResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterAsGroupAttributeResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAsGroupAttributeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAsGroupOptionAttributeRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群弹性伸缩属性 - ClusterAsGroupOption *ClusterAsGroupOption `json:"ClusterAsGroupOption,omitempty" name:"ClusterAsGroupOption"` -} - -func (r *ModifyClusterAsGroupOptionAttributeRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAsGroupOptionAttributeRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ClusterAsGroupOption") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterAsGroupOptionAttributeRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAsGroupOptionAttributeResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterAsGroupOptionAttributeResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAsGroupOptionAttributeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAttributeRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 集群所属项目 - ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 集群描述 - ClusterDesc *string `json:"ClusterDesc,omitempty" name:"ClusterDesc"` -} - -func (r *ModifyClusterAttributeRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAttributeRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ProjectId") - delete(f, "ClusterName") - delete(f, "ClusterDesc") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterAttributeRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAttributeResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 集群所属项目 - // 注意:此字段可能返回 null,表示取不到有效值。 - ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` - - // 集群名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 集群描述 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterDesc *string `json:"ClusterDesc,omitempty" name:"ClusterDesc"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterAttributeResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAttributeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAuthenticationOptionsRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // ServiceAccount认证配置 - ServiceAccounts *ServiceAccountAuthenticationOptions `json:"ServiceAccounts,omitempty" name:"ServiceAccounts"` -} - -func (r *ModifyClusterAuthenticationOptionsRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAuthenticationOptionsRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ServiceAccounts") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterAuthenticationOptionsRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterAuthenticationOptionsResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterAuthenticationOptionsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterAuthenticationOptionsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterEndpointSPRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 安全策略放通单个IP或CIDR(例如: "192.168.1.0/24",默认为拒绝所有) - SecurityPolicies []*string `json:"SecurityPolicies,omitempty" name:"SecurityPolicies"` -} - -func (r *ModifyClusterEndpointSPRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterEndpointSPRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "SecurityPolicies") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterEndpointSPRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterEndpointSPResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterEndpointSPResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterEndpointSPResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterNodePoolRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池ID - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 最大节点数 - MaxNodesNum *int64 `json:"MaxNodesNum,omitempty" name:"MaxNodesNum"` - - // 最小节点数 - MinNodesNum *int64 `json:"MinNodesNum,omitempty" name:"MinNodesNum"` - - // 标签 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // 污点 - Taints []*Taint `json:"Taints,omitempty" name:"Taints"` - - // 是否开启伸缩 - EnableAutoscale *bool `json:"EnableAutoscale,omitempty" name:"EnableAutoscale"` - - // 操作系统名称 - OsName *string `json:"OsName,omitempty" name:"OsName"` - - // 镜像版本,"DOCKER_CUSTOMIZE"(容器定制版),"GENERAL"(普通版本,默认值) - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` - - // 节点自定义参数 - ExtraArgs *InstanceExtraArgs `json:"ExtraArgs,omitempty" name:"ExtraArgs"` - - // 资源标签 - Tags []*Tag `json:"Tags,omitempty" name:"Tags"` - - // 设置加入的节点是否参与调度,默认值为0,表示参与调度;非0表示不参与调度, 待节点初始化完成之后, 可执行kubectl uncordon nodename使node加入调度. - Unschedulable *int64 `json:"Unschedulable,omitempty" name:"Unschedulable"` -} - -func (r *ModifyClusterNodePoolRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterNodePoolRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "Name") - delete(f, "MaxNodesNum") - delete(f, "MinNodesNum") - delete(f, "Labels") - delete(f, "Taints") - delete(f, "EnableAutoscale") - delete(f, "OsName") - delete(f, "OsCustomizeType") - delete(f, "ExtraArgs") - delete(f, "Tags") - delete(f, "Unschedulable") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyClusterNodePoolRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyClusterNodePoolResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyClusterNodePoolResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyClusterNodePoolResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyNodePoolDesiredCapacityAboutAsgRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 节点池所关联的伸缩组的期望实例数 - DesiredCapacity *int64 `json:"DesiredCapacity,omitempty" name:"DesiredCapacity"` -} - -func (r *ModifyNodePoolDesiredCapacityAboutAsgRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyNodePoolDesiredCapacityAboutAsgRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "DesiredCapacity") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNodePoolDesiredCapacityAboutAsgRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyNodePoolDesiredCapacityAboutAsgResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyNodePoolDesiredCapacityAboutAsgResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyNodePoolDesiredCapacityAboutAsgResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyNodePoolInstanceTypesRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 机型列表 - InstanceTypes []*string `json:"InstanceTypes,omitempty" name:"InstanceTypes"` -} - -func (r *ModifyNodePoolInstanceTypesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyNodePoolInstanceTypesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "InstanceTypes") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNodePoolInstanceTypesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyNodePoolInstanceTypesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyNodePoolInstanceTypesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyNodePoolInstanceTypesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyPrometheusAlertRuleRequest struct { - *tchttp.BaseRequest - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 告警配置 - AlertRule *PrometheusAlertRuleDetail `json:"AlertRule,omitempty" name:"AlertRule"` -} - -func (r *ModifyPrometheusAlertRuleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyPrometheusAlertRuleRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "InstanceId") - delete(f, "AlertRule") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyPrometheusAlertRuleRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyPrometheusAlertRuleResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyPrometheusAlertRuleResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyPrometheusAlertRuleResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ModifyPrometheusTemplateRequest struct { - *tchttp.BaseRequest - - // 模板ID - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 修改内容 - Template *PrometheusTemplateModify `json:"Template,omitempty" name:"Template"` -} - -func (r *ModifyPrometheusTemplateRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyPrometheusTemplateRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "TemplateId") - delete(f, "Template") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyPrometheusTemplateRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ModifyPrometheusTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ModifyPrometheusTemplateResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyPrometheusTemplateResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type NfsVolume struct { - - // nfs volume 数据卷名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // NFS 服务器地址 - Server *string `json:"Server,omitempty" name:"Server"` - - // NFS 数据卷路径 - Path *string `json:"Path,omitempty" name:"Path"` - - // 默认为 False - ReadOnly *bool `json:"ReadOnly,omitempty" name:"ReadOnly"` -} - -type NodeCountSummary struct { - - // 手动管理的节点 - // 注意:此字段可能返回 null,表示取不到有效值。 - ManuallyAdded *ManuallyAdded `json:"ManuallyAdded,omitempty" name:"ManuallyAdded"` - - // 自动管理的节点 - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoscalingAdded *AutoscalingAdded `json:"AutoscalingAdded,omitempty" name:"AutoscalingAdded"` -} - -type NodePool struct { - - // NodePoolId 资源池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // Name 资源池名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // ClusterInstanceId 集群实例id - ClusterInstanceId *string `json:"ClusterInstanceId,omitempty" name:"ClusterInstanceId"` - - // LifeState 状态,当前节点池生命周期状态包括:creating,normal,updating,deleting,deleted - LifeState *string `json:"LifeState,omitempty" name:"LifeState"` - - // LaunchConfigurationId 配置 - LaunchConfigurationId *string `json:"LaunchConfigurationId,omitempty" name:"LaunchConfigurationId"` - - // AutoscalingGroupId 分组id - AutoscalingGroupId *string `json:"AutoscalingGroupId,omitempty" name:"AutoscalingGroupId"` - - // Labels 标签 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // Taints 污点标记 - Taints []*Taint `json:"Taints,omitempty" name:"Taints"` - - // NodeCountSummary 节点列表 - NodeCountSummary *NodeCountSummary `json:"NodeCountSummary,omitempty" name:"NodeCountSummary"` - - // 状态信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoscalingGroupStatus *string `json:"AutoscalingGroupStatus,omitempty" name:"AutoscalingGroupStatus"` - - // 最大节点数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - MaxNodesNum *int64 `json:"MaxNodesNum,omitempty" name:"MaxNodesNum"` - - // 最小节点数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - MinNodesNum *int64 `json:"MinNodesNum,omitempty" name:"MinNodesNum"` - - // 期望的节点数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - DesiredNodesNum *int64 `json:"DesiredNodesNum,omitempty" name:"DesiredNodesNum"` - - // 节点池osName - // 注意:此字段可能返回 null,表示取不到有效值。 - NodePoolOs *string `json:"NodePoolOs,omitempty" name:"NodePoolOs"` - - // 容器的镜像版本,"DOCKER_CUSTOMIZE"(容器定制版),"GENERAL"(普通版本,默认值) - // 注意:此字段可能返回 null,表示取不到有效值。 - OsCustomizeType *string `json:"OsCustomizeType,omitempty" name:"OsCustomizeType"` - - // 镜像id - // 注意:此字段可能返回 null,表示取不到有效值。 - ImageId *string `json:"ImageId,omitempty" name:"ImageId"` - - // 集群属于节点podCIDR大小自定义模式时,节点池需要带上pod数量属性 - // 注意:此字段可能返回 null,表示取不到有效值。 - DesiredPodNum *int64 `json:"DesiredPodNum,omitempty" name:"DesiredPodNum"` - - // 用户自定义脚本 - // 注意:此字段可能返回 null,表示取不到有效值。 - UserScript *string `json:"UserScript,omitempty" name:"UserScript"` - - // 资源标签 - // 注意:此字段可能返回 null,表示取不到有效值。 - Tags []*Tag `json:"Tags,omitempty" name:"Tags"` -} - -type NodePoolOption struct { - - // 是否加入节点池 - AddToNodePool *bool `json:"AddToNodePool,omitempty" name:"AddToNodePool"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 是否继承节点池相关配置 - InheritConfigurationFromNodePool *bool `json:"InheritConfigurationFromNodePool,omitempty" name:"InheritConfigurationFromNodePool"` -} - -type PodLimitsByType struct { - - // TKE共享网卡非固定IP模式可支持的Pod数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TKERouteENINonStaticIP *int64 `json:"TKERouteENINonStaticIP,omitempty" name:"TKERouteENINonStaticIP"` - - // TKE共享网卡固定IP模式可支持的Pod数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TKERouteENIStaticIP *int64 `json:"TKERouteENIStaticIP,omitempty" name:"TKERouteENIStaticIP"` - - // TKE独立网卡模式可支持的Pod数量 - // 注意:此字段可能返回 null,表示取不到有效值。 - TKEDirectENI *int64 `json:"TKEDirectENI,omitempty" name:"TKEDirectENI"` -} - -type PodLimitsInstance struct { - - // 机型所在可用区 - // 注意:此字段可能返回 null,表示取不到有效值。 - Zone *string `json:"Zone,omitempty" name:"Zone"` - - // 机型所属机型族 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` - - // 实例机型名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` - - // 机型可支持的最大VPC-CNI模式Pod数量信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - PodLimits *PodLimitsByType `json:"PodLimits,omitempty" name:"PodLimits"` -} - -type Probe struct { - - // Number of seconds after the container has started before liveness probes are initiated. - // 注意:此字段可能返回 null,表示取不到有效值。 - InitialDelaySeconds *int64 `json:"InitialDelaySeconds,omitempty" name:"InitialDelaySeconds"` - - // Number of seconds after which the probe times out. - // Defaults to 1 second. Minimum value is 1. - // 注意:此字段可能返回 null,表示取不到有效值。 - TimeoutSeconds *int64 `json:"TimeoutSeconds,omitempty" name:"TimeoutSeconds"` - - // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. - // 注意:此字段可能返回 null,表示取不到有效值。 - PeriodSeconds *int64 `json:"PeriodSeconds,omitempty" name:"PeriodSeconds"` - - // Minimum consecutive successes for the probe to be considered successful after having failed.Defaults to 1. Must be 1 for liveness. Minimum value is 1. - // 注意:此字段可能返回 null,表示取不到有效值。 - SuccessThreshold *int64 `json:"SuccessThreshold,omitempty" name:"SuccessThreshold"` - - // Minimum consecutive failures for the probe to be considered failed after having succeeded.Defaults to 3. Minimum value is 1. - // 注意:此字段可能返回 null,表示取不到有效值。 - FailureThreshold *int64 `json:"FailureThreshold,omitempty" name:"FailureThreshold"` -} - -type PrometheusAgentOverview struct { - - // 集群类型 - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // agent状态 - // normal = 正常 - // abnormal = 异常 - Status *string `json:"Status,omitempty" name:"Status"` - - // 集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 额外labels - // 本集群的所有指标都会带上这几个label - // 注意:此字段可能返回 null,表示取不到有效值。 - ExternalLabels []*Label `json:"ExternalLabels,omitempty" name:"ExternalLabels"` -} - -type PrometheusAlertHistoryItem struct { - - // 告警名称 - RuleName *string `json:"RuleName,omitempty" name:"RuleName"` - - // 告警开始时间 - StartTime *string `json:"StartTime,omitempty" name:"StartTime"` - - // 告警内容 - Content *string `json:"Content,omitempty" name:"Content"` - - // 告警状态 - // 注意:此字段可能返回 null,表示取不到有效值。 - State *string `json:"State,omitempty" name:"State"` - - // 触发的规则名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - RuleItem *string `json:"RuleItem,omitempty" name:"RuleItem"` - - // 告警渠道的id - // 注意:此字段可能返回 null,表示取不到有效值。 - TopicId *string `json:"TopicId,omitempty" name:"TopicId"` - - // 告警渠道的名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - TopicName *string `json:"TopicName,omitempty" name:"TopicName"` -} - -type PrometheusAlertRule struct { - - // 规则名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // prometheus语句 - Rule *string `json:"Rule,omitempty" name:"Rule"` - - // 额外标签 - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // 告警发送模板 - Template *string `json:"Template,omitempty" name:"Template"` - - // 持续时间 - For *string `json:"For,omitempty" name:"For"` - - // 该条规则的描述信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Describe *string `json:"Describe,omitempty" name:"Describe"` - - // 参考prometheus rule中的annotations - // 注意:此字段可能返回 null,表示取不到有效值。 - Annotations []*Label `json:"Annotations,omitempty" name:"Annotations"` - - // 告警规则状态 - // 注意:此字段可能返回 null,表示取不到有效值。 - RuleState *int64 `json:"RuleState,omitempty" name:"RuleState"` -} - -type PrometheusAlertRuleDetail struct { - - // 规则名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 规则列表 - Rules []*PrometheusAlertRule `json:"Rules,omitempty" name:"Rules"` - - // 最后修改时间 - UpdatedAt *string `json:"UpdatedAt,omitempty" name:"UpdatedAt"` - - // 告警渠道 - Notification *PrometheusNotification `json:"Notification,omitempty" name:"Notification"` - - // 告警 id - Id *string `json:"Id,omitempty" name:"Id"` - - // 如果该告警来至模板下发,则TemplateId为模板id - // 注意:此字段可能返回 null,表示取不到有效值。 - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 计算周期 - // 注意:此字段可能返回 null,表示取不到有效值。 - Interval *string `json:"Interval,omitempty" name:"Interval"` -} - -type PrometheusConfigItem struct { - - // 名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 配置内容 - Config *string `json:"Config,omitempty" name:"Config"` - - // 用于出参,如果该配置来至模板,则为模板id - // 注意:此字段可能返回 null,表示取不到有效值。 - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` -} - -type PrometheusGrafanaInfo struct { - - // 是否启用 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` - - // 域名,只有开启外网访问才有效果 - Domain *string `json:"Domain,omitempty" name:"Domain"` - - // 内网地址,或者外网地址 - Address *string `json:"Address,omitempty" name:"Address"` - - // 是否开启了外网访问 - // close = 未开启外网访问 - // opening = 正在开启外网访问 - // open = 已开启外网访问 - Internet *string `json:"Internet,omitempty" name:"Internet"` - - // grafana管理员用户名 - AdminUser *string `json:"AdminUser,omitempty" name:"AdminUser"` -} - -type PrometheusInstanceOverview struct { - - // 实例id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 实例名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 实例vpcId - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - - // 实例子网Id - SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` - - // 实例当前的状态 - // prepare_env = 初始化环境 - // install_suit = 安装组件 - // running = 运行中 - Status *string `json:"Status,omitempty" name:"Status"` - - // COS桶存储 - COSBucket *string `json:"COSBucket,omitempty" name:"COSBucket"` - - // grafana默认地址,如果开启外网访问得为域名,否则为内网地址 - // 注意:此字段可能返回 null,表示取不到有效值。 - GrafanaURL *string `json:"GrafanaURL,omitempty" name:"GrafanaURL"` - - // 关联集群总数 - // 注意:此字段可能返回 null,表示取不到有效值。 - BoundTotal *uint64 `json:"BoundTotal,omitempty" name:"BoundTotal"` - - // 运行正常的集群数 - // 注意:此字段可能返回 null,表示取不到有效值。 - BoundNormal *uint64 `json:"BoundNormal,omitempty" name:"BoundNormal"` -} - -type PrometheusJobTargets struct { - - // 该Job的targets列表 - Targets []*PrometheusTarget `json:"Targets,omitempty" name:"Targets"` - - // job的名称 - JobName *string `json:"JobName,omitempty" name:"JobName"` - - // targets总数 - Total *uint64 `json:"Total,omitempty" name:"Total"` - - // 健康的target总数 - Up *uint64 `json:"Up,omitempty" name:"Up"` -} - -type PrometheusNotification struct { - - // 是否启用 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` - - // 收敛时间 - RepeatInterval *string `json:"RepeatInterval,omitempty" name:"RepeatInterval"` - - // 生效起始时间 - TimeRangeStart *string `json:"TimeRangeStart,omitempty" name:"TimeRangeStart"` - - // 生效结束时间 - TimeRangeEnd *string `json:"TimeRangeEnd,omitempty" name:"TimeRangeEnd"` - - // 告警通知方式。目前有SMS、EMAIL、CALL、WECHAT方式。 - // 分别代表:短信、邮件、电话、微信 - // 注意:此字段可能返回 null,表示取不到有效值。 - NotifyWay []*string `json:"NotifyWay,omitempty" name:"NotifyWay"` - - // 告警接收组(用户组) - // 注意:此字段可能返回 null,表示取不到有效值。 - ReceiverGroups []*uint64 `json:"ReceiverGroups,omitempty" name:"ReceiverGroups"` - - // 电话告警顺序。 - // 注:NotifyWay选择CALL,采用该参数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PhoneNotifyOrder []*uint64 `json:"PhoneNotifyOrder,omitempty" name:"PhoneNotifyOrder"` - - // 电话告警次数。 - // 注:NotifyWay选择CALL,采用该参数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PhoneCircleTimes *int64 `json:"PhoneCircleTimes,omitempty" name:"PhoneCircleTimes"` - - // 电话告警轮内间隔。单位:秒 - // 注:NotifyWay选择CALL,采用该参数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PhoneInnerInterval *int64 `json:"PhoneInnerInterval,omitempty" name:"PhoneInnerInterval"` - - // 电话告警轮外间隔。单位:秒 - // 注:NotifyWay选择CALL,采用该参数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PhoneCircleInterval *int64 `json:"PhoneCircleInterval,omitempty" name:"PhoneCircleInterval"` - - // 电话告警触达通知 - // 注:NotifyWay选择CALL,采用该参数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - PhoneArriveNotice *bool `json:"PhoneArriveNotice,omitempty" name:"PhoneArriveNotice"` - - // 通道类型,默认为amp,支持以下 - // amp - // webhook - // 注意:此字段可能返回 null,表示取不到有效值。 - Type *string `json:"Type,omitempty" name:"Type"` - - // 如果Type为webhook, 则该字段为必填项 - // 注意:此字段可能返回 null,表示取不到有效值。 - WebHook *string `json:"WebHook,omitempty" name:"WebHook"` -} - -type PrometheusTarget struct { - - // 抓取目标的URL - Url *string `json:"Url,omitempty" name:"Url"` - - // target当前状态,当前支持 - // up = 健康 - // down = 不健康 - // unknown = 未知 - State *string `json:"State,omitempty" name:"State"` - - // target的元label - Labels []*Label `json:"Labels,omitempty" name:"Labels"` - - // 上一次抓取的时间 - LastScrape *string `json:"LastScrape,omitempty" name:"LastScrape"` - - // 上一次抓取的耗时,单位是s - ScrapeDuration *float64 `json:"ScrapeDuration,omitempty" name:"ScrapeDuration"` - - // 上一次抓取如果错误,该字段存储错误信息 - Error *string `json:"Error,omitempty" name:"Error"` -} - -type PrometheusTemplate struct { - - // 模板名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 模板维度,支持以下类型 - // instance 实例级别 - // cluster 集群级别 - Level *string `json:"Level,omitempty" name:"Level"` - - // 模板描述 - // 注意:此字段可能返回 null,表示取不到有效值。 - Describe *string `json:"Describe,omitempty" name:"Describe"` - - // 当Level为instance时有效, - // 模板中的告警配置列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - AlertRules []*PrometheusAlertRule `json:"AlertRules,omitempty" name:"AlertRules"` - - // 当Level为instance时有效, - // 模板中的聚合规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - RecordRules []*PrometheusConfigItem `json:"RecordRules,omitempty" name:"RecordRules"` - - // 当Level为cluster时有效, - // 模板中的ServiceMonitor规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - ServiceMonitors []*PrometheusConfigItem `json:"ServiceMonitors,omitempty" name:"ServiceMonitors"` - - // 当Level为cluster时有效, - // 模板中的PodMonitors规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - PodMonitors []*PrometheusConfigItem `json:"PodMonitors,omitempty" name:"PodMonitors"` - - // 当Level为cluster时有效, - // 模板中的RawJobs规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - RawJobs []*PrometheusConfigItem `json:"RawJobs,omitempty" name:"RawJobs"` - - // 模板的ID, 用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 最近更新时间,用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` - - // 当前版本,用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - Version *string `json:"Version,omitempty" name:"Version"` - - // 是否系统提供的默认模板,用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - IsDefault *bool `json:"IsDefault,omitempty" name:"IsDefault"` - - // 当Level为instance时有效, - // 模板中的告警配置列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - AlertDetailRules []*PrometheusAlertRuleDetail `json:"AlertDetailRules,omitempty" name:"AlertDetailRules"` -} - -type PrometheusTemplateModify struct { - - // 修改名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 修改描述 - // 注意:此字段可能返回 null,表示取不到有效值。 - Describe *string `json:"Describe,omitempty" name:"Describe"` - - // 修改内容,只有当模板类型是Alert时生效 - // 注意:此字段可能返回 null,表示取不到有效值。 - AlertRules []*PrometheusAlertRule `json:"AlertRules,omitempty" name:"AlertRules"` - - // 当Level为instance时有效, - // 模板中的聚合规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - RecordRules []*PrometheusConfigItem `json:"RecordRules,omitempty" name:"RecordRules"` - - // 当Level为cluster时有效, - // 模板中的ServiceMonitor规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - ServiceMonitors []*PrometheusConfigItem `json:"ServiceMonitors,omitempty" name:"ServiceMonitors"` - - // 当Level为cluster时有效, - // 模板中的PodMonitors规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - PodMonitors []*PrometheusConfigItem `json:"PodMonitors,omitempty" name:"PodMonitors"` - - // 当Level为cluster时有效, - // 模板中的RawJobs规则列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - RawJobs []*PrometheusConfigItem `json:"RawJobs,omitempty" name:"RawJobs"` - - // 修改内容,只有当模板类型是Alert时生效 - // 注意:此字段可能返回 null,表示取不到有效值。 - AlertDetailRules []*PrometheusAlertRuleDetail `json:"AlertDetailRules,omitempty" name:"AlertDetailRules"` -} - -type PrometheusTemplateSyncTarget struct { - - // 目标所在地域 - Region *string `json:"Region,omitempty" name:"Region"` - - // 目标实例 - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 集群id,只有当采集模板的Level为cluster的时候需要 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 最后一次同步时间, 用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - SyncTime *string `json:"SyncTime,omitempty" name:"SyncTime"` - - // 当前使用的模板版本,用于出参 - // 注意:此字段可能返回 null,表示取不到有效值。 - Version *string `json:"Version,omitempty" name:"Version"` - - // 集群类型,只有当采集模板的Level为cluster的时候需要 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterType *string `json:"ClusterType,omitempty" name:"ClusterType"` - - // 用于出参,实例名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` - - // 用于出参,集群名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` -} - -type RegionInstance struct { - - // 地域名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - RegionName *string `json:"RegionName,omitempty" name:"RegionName"` - - // 地域ID - // 注意:此字段可能返回 null,表示取不到有效值。 - RegionId *int64 `json:"RegionId,omitempty" name:"RegionId"` - - // 地域状态 - // 注意:此字段可能返回 null,表示取不到有效值。 - Status *string `json:"Status,omitempty" name:"Status"` - - // 地域特性开关(按照JSON的形式返回所有属性) - // 注意:此字段可能返回 null,表示取不到有效值。 - FeatureGates *string `json:"FeatureGates,omitempty" name:"FeatureGates"` - - // 地域简称 - // 注意:此字段可能返回 null,表示取不到有效值。 - Alias *string `json:"Alias,omitempty" name:"Alias"` - - // 地域白名单 - // 注意:此字段可能返回 null,表示取不到有效值。 - Remark *string `json:"Remark,omitempty" name:"Remark"` -} - -type RemoveNodeFromNodePoolRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 节点id列表,一次最多支持100台 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` -} - -func (r *RemoveNodeFromNodePoolRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *RemoveNodeFromNodePoolRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "InstanceIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RemoveNodeFromNodePoolRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type RemoveNodeFromNodePoolResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *RemoveNodeFromNodePoolResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *RemoveNodeFromNodePoolResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ResourceDeleteOption struct { - - // 资源类型,例如CBS - ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` - - // 集群删除时资源的删除模式:terminate(销毁),retain (保留) - DeleteMode *string `json:"DeleteMode,omitempty" name:"DeleteMode"` -} - -type RestartEKSContainerInstancesRequest struct { - *tchttp.BaseRequest - - // EKS instance ids - EksCiIds []*string `json:"EksCiIds,omitempty" name:"EksCiIds"` -} - -func (r *RestartEKSContainerInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *RestartEKSContainerInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "EksCiIds") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RestartEKSContainerInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type RestartEKSContainerInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *RestartEKSContainerInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *RestartEKSContainerInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type RouteInfo struct { - - // 路由表名称。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 目的端CIDR。 - DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` - - // 下一跳地址。 - GatewayIp *string `json:"GatewayIp,omitempty" name:"GatewayIp"` -} - -type RouteTableConflict struct { - - // 路由表类型。 - RouteTableType *string `json:"RouteTableType,omitempty" name:"RouteTableType"` - - // 路由表CIDR。 - // 注意:此字段可能返回 null,表示取不到有效值。 - RouteTableCidrBlock *string `json:"RouteTableCidrBlock,omitempty" name:"RouteTableCidrBlock"` - - // 路由表名称。 - // 注意:此字段可能返回 null,表示取不到有效值。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 路由表ID。 - // 注意:此字段可能返回 null,表示取不到有效值。 - RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` -} - -type RouteTableInfo struct { - - // 路由表名称。 - RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` - - // 路由表CIDR。 - RouteTableCidrBlock *string `json:"RouteTableCidrBlock,omitempty" name:"RouteTableCidrBlock"` - - // VPC实例ID。 - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` -} - -type RunAutomationServiceEnabled struct { - - // 是否开启云自动化助手。取值范围:
  • TRUE:表示开启云自动化助手服务
  • FALSE:表示不开启云自动化助手服务

    默认取值:FALSE。 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` -} - -type RunInstancesForNode struct { - - // 节点角色,取值:MASTER_ETCD, WORKER。MASTER_ETCD只有在创建 INDEPENDENT_CLUSTER 独立集群时需要指定。MASTER_ETCD节点数量为3~7,建议为奇数。MASTER_ETCD节点最小配置为4C8G。 - NodeRole *string `json:"NodeRole,omitempty" name:"NodeRole"` - - // CVM创建透传参数,json化字符串格式,详见[CVM创建实例](https://cloud.tencent.com/document/product/213/15730)接口,传入公共参数外的其他参数即可,其中ImageId会替换为TKE集群OS对应的镜像。 - RunInstancesPara []*string `json:"RunInstancesPara,omitempty" name:"RunInstancesPara"` - - // 节点高级设置,该参数会覆盖集群级别设置的InstanceAdvancedSettings,和上边的RunInstancesPara按照顺序一一对应(当前只对节点自定义参数ExtraArgs生效)。 - InstanceAdvancedSettingsOverrides []*InstanceAdvancedSettings `json:"InstanceAdvancedSettingsOverrides,omitempty" name:"InstanceAdvancedSettingsOverrides"` -} - -type RunMonitorServiceEnabled struct { - - // 是否开启[云监控](/document/product/248)服务。取值范围:
  • TRUE:表示开启云监控服务
  • FALSE:表示不开启云监控服务

    默认取值:TRUE。 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` -} - -type RunSecurityServiceEnabled struct { - - // 是否开启[云安全](/document/product/296)服务。取值范围:
  • TRUE:表示开启云安全服务
  • FALSE:表示不开启云安全服务

    默认取值:TRUE。 - Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` -} - -type ScaleInClusterMasterRequest struct { - *tchttp.BaseRequest - - // 集群实例ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // master缩容选项 - ScaleInMasters []*ScaleInMaster `json:"ScaleInMasters,omitempty" name:"ScaleInMasters"` -} - -func (r *ScaleInClusterMasterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ScaleInClusterMasterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ScaleInMasters") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ScaleInClusterMasterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ScaleInClusterMasterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ScaleInClusterMasterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ScaleInClusterMasterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type ScaleInMaster struct { - - // 实例ID - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 缩容的实例角色:MASTER,ETCD,MASTER_ETCD - NodeRole *string `json:"NodeRole,omitempty" name:"NodeRole"` - - // 实例的保留模式 - InstanceDeleteMode *string `json:"InstanceDeleteMode,omitempty" name:"InstanceDeleteMode"` -} - -type ScaleOutClusterMasterRequest struct { - *tchttp.BaseRequest - - // 集群实例ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 新建节点参数 - RunInstancesForNode []*RunInstancesForNode `json:"RunInstancesForNode,omitempty" name:"RunInstancesForNode"` - - // 添加已有节点相关参数 - ExistedInstancesForNode []*ExistedInstancesForNode `json:"ExistedInstancesForNode,omitempty" name:"ExistedInstancesForNode"` - - // 实例高级设置 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 集群master组件自定义参数 - ExtraArgs *ClusterExtraArgs `json:"ExtraArgs,omitempty" name:"ExtraArgs"` -} - -func (r *ScaleOutClusterMasterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ScaleOutClusterMasterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "RunInstancesForNode") - delete(f, "ExistedInstancesForNode") - delete(f, "InstanceAdvancedSettings") - delete(f, "ExtraArgs") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ScaleOutClusterMasterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type ScaleOutClusterMasterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *ScaleOutClusterMasterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ScaleOutClusterMasterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type SecurityContext struct { - - // 安全能力清单 - // 注意:此字段可能返回 null,表示取不到有效值。 - Capabilities *Capabilities `json:"Capabilities,omitempty" name:"Capabilities"` -} - -type ServiceAccountAuthenticationOptions struct { - - // service-account-issuer - // 注意:此字段可能返回 null,表示取不到有效值。 - Issuer *string `json:"Issuer,omitempty" name:"Issuer"` - - // service-account-jwks-uri - // 注意:此字段可能返回 null,表示取不到有效值。 - JWKSURI *string `json:"JWKSURI,omitempty" name:"JWKSURI"` - - // 如果为true,则会自动创建允许匿名用户访问'/.well-known/openid-configuration'和/openid/v1/jwks的rbac规则 - // 注意:此字段可能返回 null,表示取不到有效值。 - AutoCreateDiscoveryAnonymousAuth *bool `json:"AutoCreateDiscoveryAnonymousAuth,omitempty" name:"AutoCreateDiscoveryAnonymousAuth"` -} - -type SetNodePoolNodeProtectionRequest struct { - *tchttp.BaseRequest - - // 集群id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 节点池id - NodePoolId *string `json:"NodePoolId,omitempty" name:"NodePoolId"` - - // 节点id - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 节点是否需要移出保护 - ProtectedFromScaleIn *bool `json:"ProtectedFromScaleIn,omitempty" name:"ProtectedFromScaleIn"` -} - -func (r *SetNodePoolNodeProtectionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *SetNodePoolNodeProtectionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "NodePoolId") - delete(f, "InstanceIds") - delete(f, "ProtectedFromScaleIn") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "SetNodePoolNodeProtectionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type SetNodePoolNodeProtectionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 成功设置的节点id - // 注意:此字段可能返回 null,表示取不到有效值。 - SucceedInstanceIds []*string `json:"SucceedInstanceIds,omitempty" name:"SucceedInstanceIds"` - - // 没有成功设置的节点id - // 注意:此字段可能返回 null,表示取不到有效值。 - FailedInstanceIds []*string `json:"FailedInstanceIds,omitempty" name:"FailedInstanceIds"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *SetNodePoolNodeProtectionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *SetNodePoolNodeProtectionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type SyncPrometheusTemplateRequest struct { - *tchttp.BaseRequest - - // 实例id - TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` - - // 同步目标 - Targets []*PrometheusTemplateSyncTarget `json:"Targets,omitempty" name:"Targets"` -} - -func (r *SyncPrometheusTemplateRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *SyncPrometheusTemplateRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "TemplateId") - delete(f, "Targets") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "SyncPrometheusTemplateRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type SyncPrometheusTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *SyncPrometheusTemplateResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *SyncPrometheusTemplateResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type Tag struct { - - // 标签键 - Key *string `json:"Key,omitempty" name:"Key"` - - // 标签值 - Value *string `json:"Value,omitempty" name:"Value"` -} - -type TagSpecification struct { - - // 标签绑定的资源类型,当前支持类型:"cluster" - // 注意:此字段可能返回 null,表示取不到有效值。 - ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` - - // 标签对列表 - // 注意:此字段可能返回 null,表示取不到有效值。 - Tags []*Tag `json:"Tags,omitempty" name:"Tags"` -} - -type Taint struct { - - // Key - Key *string `json:"Key,omitempty" name:"Key"` - - // Value - Value *string `json:"Value,omitempty" name:"Value"` - - // Effect - Effect *string `json:"Effect,omitempty" name:"Effect"` -} - -type TaskStepInfo struct { - - // 步骤名称 - Step *string `json:"Step,omitempty" name:"Step"` - - // 生命周期 - // pending : 步骤未开始 - // running: 步骤执行中 - // success: 步骤成功完成 - // failed: 步骤失败 - LifeState *string `json:"LifeState,omitempty" name:"LifeState"` - - // 步骤开始时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - StartAt *string `json:"StartAt,omitempty" name:"StartAt"` - - // 步骤结束时间 - // 注意:此字段可能返回 null,表示取不到有效值。 - EndAt *string `json:"EndAt,omitempty" name:"EndAt"` - - // 若步骤生命周期为failed,则此字段显示错误信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - FailedMsg *string `json:"FailedMsg,omitempty" name:"FailedMsg"` -} - -type TcpSocket struct { - - // TcpSocket检测的端口 - // 注意:此字段可能返回 null,表示取不到有效值。 - Port *uint64 `json:"Port,omitempty" name:"Port"` -} - -type UpdateClusterVersionRequest struct { - *tchttp.BaseRequest - - // 集群 Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 需要升级到的版本 - DstVersion *string `json:"DstVersion,omitempty" name:"DstVersion"` - - // 集群自定义参数 - ExtraArgs *ClusterExtraArgs `json:"ExtraArgs,omitempty" name:"ExtraArgs"` - - // 可容忍的最大不可用pod数目 - MaxNotReadyPercent *float64 `json:"MaxNotReadyPercent,omitempty" name:"MaxNotReadyPercent"` - - // 是否跳过预检查阶段 - SkipPreCheck *bool `json:"SkipPreCheck,omitempty" name:"SkipPreCheck"` -} - -func (r *UpdateClusterVersionRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateClusterVersionRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "DstVersion") - delete(f, "ExtraArgs") - delete(f, "MaxNotReadyPercent") - delete(f, "SkipPreCheck") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpdateClusterVersionRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type UpdateClusterVersionResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *UpdateClusterVersionResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateClusterVersionResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type UpdateEKSClusterRequest struct { - *tchttp.BaseRequest - - // 弹性集群Id - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // 弹性集群名称 - ClusterName *string `json:"ClusterName,omitempty" name:"ClusterName"` - - // 弹性集群描述信息 - ClusterDesc *string `json:"ClusterDesc,omitempty" name:"ClusterDesc"` - - // 子网Id 列表 - SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` - - // 弹性容器集群公网访问LB信息 - PublicLB *ClusterPublicLB `json:"PublicLB,omitempty" name:"PublicLB"` - - // 弹性容器集群内网访问LB信息 - InternalLB *ClusterInternalLB `json:"InternalLB,omitempty" name:"InternalLB"` - - // Service 子网Id - ServiceSubnetId *string `json:"ServiceSubnetId,omitempty" name:"ServiceSubnetId"` - - // 集群自定义的dns 服务器信息 - DnsServers []*DnsServerConf `json:"DnsServers,omitempty" name:"DnsServers"` - - // 是否清空自定义dns 服务器设置。为1 表示 是。其他表示 否。 - ClearDnsServer *string `json:"ClearDnsServer,omitempty" name:"ClearDnsServer"` - - // 将来删除集群时是否要删除cbs。默认为 FALSE - NeedDeleteCbs *bool `json:"NeedDeleteCbs,omitempty" name:"NeedDeleteCbs"` - - // 标记是否是新的内外网。默认为false - ProxyLB *bool `json:"ProxyLB,omitempty" name:"ProxyLB"` - - // 扩展参数。须是map[string]string 的json 格式。 - ExtraParam *string `json:"ExtraParam,omitempty" name:"ExtraParam"` -} - -func (r *UpdateEKSClusterRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateEKSClusterRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "ClusterName") - delete(f, "ClusterDesc") - delete(f, "SubnetIds") - delete(f, "PublicLB") - delete(f, "InternalLB") - delete(f, "ServiceSubnetId") - delete(f, "DnsServers") - delete(f, "ClearDnsServer") - delete(f, "NeedDeleteCbs") - delete(f, "ProxyLB") - delete(f, "ExtraParam") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpdateEKSClusterRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type UpdateEKSClusterResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *UpdateEKSClusterResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateEKSClusterResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type UpdateEKSContainerInstanceRequest struct { - *tchttp.BaseRequest - - // 容器实例 ID - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // 实例重启策略: Always(总是重启)、Never(从不重启)、OnFailure(失败时重启) - RestartPolicy *string `json:"RestartPolicy,omitempty" name:"RestartPolicy"` - - // 数据卷,包含NfsVolume数组和CbsVolume数组 - EksCiVolume *EksCiVolume `json:"EksCiVolume,omitempty" name:"EksCiVolume"` - - // 容器组 - Containers []*Container `json:"Containers,omitempty" name:"Containers"` - - // Init 容器组 - InitContainers []*Container `json:"InitContainers,omitempty" name:"InitContainers"` - - // 容器实例名称 - Name *string `json:"Name,omitempty" name:"Name"` - - // 镜像仓库凭证数组 - ImageRegistryCredentials []*ImageRegistryCredential `json:"ImageRegistryCredentials,omitempty" name:"ImageRegistryCredentials"` -} - -func (r *UpdateEKSContainerInstanceRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateEKSContainerInstanceRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "EksCiId") - delete(f, "RestartPolicy") - delete(f, "EksCiVolume") - delete(f, "Containers") - delete(f, "InitContainers") - delete(f, "Name") - delete(f, "ImageRegistryCredentials") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpdateEKSContainerInstanceRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type UpdateEKSContainerInstanceResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 容器实例 ID - // 注意:此字段可能返回 null,表示取不到有效值。 - EksCiId *string `json:"EksCiId,omitempty" name:"EksCiId"` - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *UpdateEKSContainerInstanceResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpdateEKSContainerInstanceResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type UpgradeAbleInstancesItem struct { - - // 节点Id - InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - - // 节点的当前版本 - Version *string `json:"Version,omitempty" name:"Version"` - - // 当前版本的最新小版本 - // 注意:此字段可能返回 null,表示取不到有效值。 - LatestVersion *string `json:"LatestVersion,omitempty" name:"LatestVersion"` -} - -type UpgradeClusterInstancesRequest struct { - *tchttp.BaseRequest - - // 集群ID - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - - // create 表示开始一次升级任务 - // pause 表示停止任务 - // resume表示继续任务 - // abort表示终止任务 - Operation *string `json:"Operation,omitempty" name:"Operation"` - - // 升级类型,只有Operation是create需要设置 - // reset 大版本重装升级 - // hot 小版本热升级 - // major 大版本原地升级 - UpgradeType *string `json:"UpgradeType,omitempty" name:"UpgradeType"` - - // 需要升级的节点列表 - InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` - - // 当节点重新加入集群时候所使用的参数,参考添加已有节点接口 - ResetParam *UpgradeNodeResetParam `json:"ResetParam,omitempty" name:"ResetParam"` - - // 是否忽略节点升级前检查 - SkipPreCheck *bool `json:"SkipPreCheck,omitempty" name:"SkipPreCheck"` - - // 最大可容忍的不可用Pod比例 - MaxNotReadyPercent *float64 `json:"MaxNotReadyPercent,omitempty" name:"MaxNotReadyPercent"` -} - -func (r *UpgradeClusterInstancesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpgradeClusterInstancesRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ClusterId") - delete(f, "Operation") - delete(f, "UpgradeType") - delete(f, "InstanceIds") - delete(f, "ResetParam") - delete(f, "SkipPreCheck") - delete(f, "MaxNotReadyPercent") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UpgradeClusterInstancesRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) -} - -type UpgradeClusterInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} - -func (r *UpgradeClusterInstancesResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} - -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *UpgradeClusterInstancesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} - -type UpgradeNodeResetParam struct { - - // 实例额外需要设置参数信息 - InstanceAdvancedSettings *InstanceAdvancedSettings `json:"InstanceAdvancedSettings,omitempty" name:"InstanceAdvancedSettings"` - - // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 - EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` - - // 节点登录信息(目前仅支持使用Password或者单个KeyIds) - LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` - - // 实例所属安全组。该参数可以通过调用 DescribeSecurityGroups 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。(目前仅支持设置单个sgId) - SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` -} - -type VersionInstance struct { - - // 版本名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - Name *string `json:"Name,omitempty" name:"Name"` - - // 版本信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Version *string `json:"Version,omitempty" name:"Version"` - - // Remark - // 注意:此字段可能返回 null,表示取不到有效值。 - Remark *string `json:"Remark,omitempty" name:"Remark"` -} - -type VolumeMount struct { - - // volume名称 - // 注意:此字段可能返回 null,表示取不到有效值。 - Name *string `json:"Name,omitempty" name:"Name"` - - // 挂载路径 - // 注意:此字段可能返回 null,表示取不到有效值。 - MountPath *string `json:"MountPath,omitempty" name:"MountPath"` - - // 是否只读 - // 注意:此字段可能返回 null,表示取不到有效值。 - ReadOnly *bool `json:"ReadOnly,omitempty" name:"ReadOnly"` - - // 子路径 - // 注意:此字段可能返回 null,表示取不到有效值。 - SubPath *string `json:"SubPath,omitempty" name:"SubPath"` - - // 传播挂载方式 - // 注意:此字段可能返回 null,表示取不到有效值。 - MountPropagation *string `json:"MountPropagation,omitempty" name:"MountPropagation"` - - // 子路径表达式 - // 注意:此字段可能返回 null,表示取不到有效值。 - SubPathExpr *string `json:"SubPathExpr,omitempty" name:"SubPathExpr"` -} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/LICENSE b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/LICENSE deleted file mode 100644 index efc75a2253ea..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2017-2018 Tencent Ltd. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/doc.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/doc.go new file mode 100644 index 000000000000..f0f00fec6d03 --- /dev/null +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package doc diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/client.go similarity index 65% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/client.go index 892bd2ea16e0..7ad28a4080f0 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,10 +18,11 @@ package v20170312 import ( "context" + "errors" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" ) const APIVersion = "2017-03-12" @@ -50,6 +51,7 @@ func NewAcceptAttachCcnInstancesRequest() (request *AcceptAttachCcnInstancesRequ request = &AcceptAttachCcnInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AcceptAttachCcnInstances") return @@ -77,15 +79,10 @@ func NewAcceptAttachCcnInstancesResponse() (response *AcceptAttachCcnInstancesRe // UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState" // UNSUPPORTEDOPERATION_ISNOTFINANCEACCOUNT = "UnsupportedOperation.IsNotFinanceAccount" // UNSUPPORTEDOPERATION_NOTPENDINGCCNINSTANCE = "UnsupportedOperation.NotPendingCcnInstance" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" // UNSUPPORTEDOPERATION_UNABLECROSSFINANCE = "UnsupportedOperation.UnableCrossFinance" func (c *Client) AcceptAttachCcnInstances(request *AcceptAttachCcnInstancesRequest) (response *AcceptAttachCcnInstancesResponse, err error) { - if request == nil { - request = NewAcceptAttachCcnInstancesRequest() - } - - response = NewAcceptAttachCcnInstancesResponse() - err = c.Send(request, response) - return + return c.AcceptAttachCcnInstancesWithContext(context.Background(), request) } // AcceptAttachCcnInstances @@ -103,11 +100,17 @@ func (c *Client) AcceptAttachCcnInstances(request *AcceptAttachCcnInstancesReque // UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState" // UNSUPPORTEDOPERATION_ISNOTFINANCEACCOUNT = "UnsupportedOperation.IsNotFinanceAccount" // UNSUPPORTEDOPERATION_NOTPENDINGCCNINSTANCE = "UnsupportedOperation.NotPendingCcnInstance" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" // UNSUPPORTEDOPERATION_UNABLECROSSFINANCE = "UnsupportedOperation.UnableCrossFinance" func (c *Client) AcceptAttachCcnInstancesWithContext(ctx context.Context, request *AcceptAttachCcnInstancesRequest) (response *AcceptAttachCcnInstancesResponse, err error) { if request == nil { request = NewAcceptAttachCcnInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AcceptAttachCcnInstances require credential") + } + request.SetContext(ctx) response = NewAcceptAttachCcnInstancesResponse() @@ -115,10 +118,70 @@ func (c *Client) AcceptAttachCcnInstancesWithContext(ctx context.Context, reques return } +func NewAcceptVpcPeeringConnectionRequest() (request *AcceptVpcPeeringConnectionRequest) { + request = &AcceptVpcPeeringConnectionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "AcceptVpcPeeringConnection") + + return +} + +func NewAcceptVpcPeeringConnectionResponse() (response *AcceptVpcPeeringConnectionResponse) { + response = &AcceptVpcPeeringConnectionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// AcceptVpcPeeringConnection +// 本接口(AcceptVpcPeeringConnection)用于接受对等连接请求。 +// +// 可能返回的错误码: +// +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_VPCPEERINVALIDSTATECHANGE = "UnsupportedOperation.VpcPeerInvalidStateChange" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) AcceptVpcPeeringConnection(request *AcceptVpcPeeringConnectionRequest) (response *AcceptVpcPeeringConnectionResponse, err error) { + return c.AcceptVpcPeeringConnectionWithContext(context.Background(), request) +} + +// AcceptVpcPeeringConnection +// 本接口(AcceptVpcPeeringConnection)用于接受对等连接请求。 +// +// 可能返回的错误码: +// +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_VPCPEERINVALIDSTATECHANGE = "UnsupportedOperation.VpcPeerInvalidStateChange" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) AcceptVpcPeeringConnectionWithContext(ctx context.Context, request *AcceptVpcPeeringConnectionRequest) (response *AcceptVpcPeeringConnectionResponse, err error) { + if request == nil { + request = NewAcceptVpcPeeringConnectionRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("AcceptVpcPeeringConnection require credential") + } + + request.SetContext(ctx) + + response = NewAcceptVpcPeeringConnectionResponse() + err = c.Send(request, response) + return +} + func NewAddBandwidthPackageResourcesRequest() (request *AddBandwidthPackageResourcesRequest) { request = &AddBandwidthPackageResourcesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AddBandwidthPackageResources") return @@ -137,24 +200,22 @@ func NewAddBandwidthPackageResourcesResponse() (response *AddBandwidthPackageRes // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RESOURCEALREADYEXISTED = "InvalidParameterValue.ResourceAlreadyExisted" // INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" // INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" // MISSINGPARAMETER = "MissingParameter" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDRESOURCEINTERNETCHARGETYPE = "UnsupportedOperation.InvalidResourceInternetChargeType" // UNSUPPORTEDOPERATION_INVALIDRESOURCEPROTOCOL = "UnsupportedOperation.InvalidResourceProtocol" func (c *Client) AddBandwidthPackageResources(request *AddBandwidthPackageResourcesRequest) (response *AddBandwidthPackageResourcesResponse, err error) { - if request == nil { - request = NewAddBandwidthPackageResourcesRequest() - } - - response = NewAddBandwidthPackageResourcesResponse() - err = c.Send(request, response) - return + return c.AddBandwidthPackageResourcesWithContext(context.Background(), request) } // AddBandwidthPackageResources @@ -163,11 +224,15 @@ func (c *Client) AddBandwidthPackageResources(request *AddBandwidthPackageResour // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RESOURCEALREADYEXISTED = "InvalidParameterValue.ResourceAlreadyExisted" // INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" // INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" // MISSINGPARAMETER = "MissingParameter" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" @@ -177,6 +242,11 @@ func (c *Client) AddBandwidthPackageResourcesWithContext(ctx context.Context, re if request == nil { request = NewAddBandwidthPackageResourcesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AddBandwidthPackageResources require credential") + } + request.SetContext(ctx) response = NewAddBandwidthPackageResourcesResponse() @@ -188,6 +258,7 @@ func NewAddIp6RulesRequest() (request *AddIp6RulesRequest) { request = &AddIp6RulesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AddIp6Rules") return @@ -211,15 +282,10 @@ func NewAddIp6RulesResponse() (response *AddIp6RulesResponse) { // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IPV6RULEIDEXISTED = "InvalidParameterValue.IPv6RuleIdExisted" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) AddIp6Rules(request *AddIp6RulesRequest) (response *AddIp6RulesResponse, err error) { - if request == nil { - request = NewAddIp6RulesRequest() - } - - response = NewAddIp6RulesResponse() - err = c.Send(request, response) - return + return c.AddIp6RulesWithContext(context.Background(), request) } // AddIp6Rules @@ -233,11 +299,17 @@ func (c *Client) AddIp6Rules(request *AddIp6RulesRequest) (response *AddIp6Rules // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IPV6RULEIDEXISTED = "InvalidParameterValue.IPv6RuleIdExisted" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) AddIp6RulesWithContext(ctx context.Context, request *AddIp6RulesRequest) (response *AddIp6RulesResponse, err error) { if request == nil { request = NewAddIp6RulesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AddIp6Rules require credential") + } + request.SetContext(ctx) response = NewAddIp6RulesResponse() @@ -249,6 +321,7 @@ func NewAddTemplateMemberRequest() (request *AddTemplateMemberRequest) { request = &AddTemplateMemberRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AddTemplateMember") return @@ -262,7 +335,7 @@ func NewAddTemplateMemberResponse() (response *AddTemplateMemberResponse) { } // AddTemplateMember -// 增加模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 增加模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -270,19 +343,15 @@ func NewAddTemplateMemberResponse() (response *AddTemplateMemberResponse) { // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) AddTemplateMember(request *AddTemplateMemberRequest) (response *AddTemplateMemberResponse, err error) { - if request == nil { - request = NewAddTemplateMemberRequest() - } - - response = NewAddTemplateMemberResponse() - err = c.Send(request, response) - return + return c.AddTemplateMemberWithContext(context.Background(), request) } // AddTemplateMember -// 增加模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 增加模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -290,11 +359,18 @@ func (c *Client) AddTemplateMember(request *AddTemplateMemberRequest) (response // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) AddTemplateMemberWithContext(ctx context.Context, request *AddTemplateMemberRequest) (response *AddTemplateMemberResponse, err error) { if request == nil { request = NewAddTemplateMemberRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AddTemplateMember require credential") + } + request.SetContext(ctx) response = NewAddTemplateMemberResponse() @@ -302,10 +378,98 @@ func (c *Client) AddTemplateMemberWithContext(ctx context.Context, request *AddT return } +func NewAdjustPublicAddressRequest() (request *AdjustPublicAddressRequest) { + request = &AdjustPublicAddressRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "AdjustPublicAddress") + + return +} + +func NewAdjustPublicAddressResponse() (response *AdjustPublicAddressResponse) { + response = &AdjustPublicAddressResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// AdjustPublicAddress +// 本接口 (AdjustPublicAddress) 用于更换IP地址,支持更换CVM实例的普通公网IP和包月带宽的EIP。 +// +// 可能返回的错误码: +// +// INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" +// INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_ADDRESSATTACKED = "InvalidParameterValue.AddressAttacked" +// INVALIDPARAMETERVALUE_ADDRESSIPNOTAVAILABLE = "InvalidParameterValue.AddressIpNotAvailable" +// INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" +// INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// INVALIDPARAMETERVALUE_UNAVAILABLEZONE = "InvalidParameterValue.UnavailableZone" +// LIMITEXCEEDED_CHANGEADDRESSQUOTA = "LimitExceeded.ChangeAddressQuota" +// LIMITEXCEEDED_DAILYCHANGEADDRESSQUOTA = "LimitExceeded.DailyChangeAddressQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" +// RESOURCEINSUFFICIENT = "ResourceInsufficient" +// UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" +// UNSUPPORTEDOPERATION_ISPNOTSUPPORTED = "UnsupportedOperation.IspNotSupported" +func (c *Client) AdjustPublicAddress(request *AdjustPublicAddressRequest) (response *AdjustPublicAddressResponse, err error) { + return c.AdjustPublicAddressWithContext(context.Background(), request) +} + +// AdjustPublicAddress +// 本接口 (AdjustPublicAddress) 用于更换IP地址,支持更换CVM实例的普通公网IP和包月带宽的EIP。 +// +// 可能返回的错误码: +// +// INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" +// INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_ADDRESSATTACKED = "InvalidParameterValue.AddressAttacked" +// INVALIDPARAMETERVALUE_ADDRESSIPNOTAVAILABLE = "InvalidParameterValue.AddressIpNotAvailable" +// INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" +// INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" +// INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// INVALIDPARAMETERVALUE_UNAVAILABLEZONE = "InvalidParameterValue.UnavailableZone" +// LIMITEXCEEDED_CHANGEADDRESSQUOTA = "LimitExceeded.ChangeAddressQuota" +// LIMITEXCEEDED_DAILYCHANGEADDRESSQUOTA = "LimitExceeded.DailyChangeAddressQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" +// RESOURCEINSUFFICIENT = "ResourceInsufficient" +// UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" +// UNSUPPORTEDOPERATION_ISPNOTSUPPORTED = "UnsupportedOperation.IspNotSupported" +func (c *Client) AdjustPublicAddressWithContext(ctx context.Context, request *AdjustPublicAddressRequest) (response *AdjustPublicAddressResponse, err error) { + if request == nil { + request = NewAdjustPublicAddressRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("AdjustPublicAddress require credential") + } + + request.SetContext(ctx) + + response = NewAdjustPublicAddressResponse() + err = c.Send(request, response) + return +} + func NewAllocateAddressesRequest() (request *AllocateAddressesRequest) { request = &AllocateAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AllocateAddresses") return @@ -331,33 +495,42 @@ func NewAllocateAddressesResponse() (response *AllocateAddressesResponse) { // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// FAILEDOPERATION_INVALIDREGION = "FailedOperation.InvalidRegion" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" +// INVALIDPARAMETERVALUE_ADDRESSATTACKED = "InvalidParameterValue.AddressAttacked" // INVALIDPARAMETERVALUE_ADDRESSIPNOTAVAILABLE = "InvalidParameterValue.AddressIpNotAvailable" // INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_BANDWIDTHTOOSMALL = "InvalidParameterValue.BandwidthTooSmall" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDDEDICATEDCLUSTERID = "InvalidParameterValue.InvalidDedicatedClusterId" // INVALIDPARAMETERVALUE_INVALIDTAG = "InvalidParameterValue.InvalidTag" // INVALIDPARAMETERVALUE_MIXEDADDRESSIPSETTYPE = "InvalidParameterValue.MixedAddressIpSetType" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" // INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" // INVALIDPARAMETERVALUE_UNAVAILABLEZONE = "InvalidParameterValue.UnavailableZone" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" +// LIMITEXCEEDED_BANDWIDTHPACKAGERESOURCEQUOTA = "LimitExceeded.BandwidthPackageResourceQuota" +// LIMITEXCEEDED_MONTHLYADDRESSRECOVERYQUOTA = "LimitExceeded.MonthlyAddressRecoveryQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// UNAUTHORIZEDOPERATION_ANYCASTEIP = "UnauthorizedOperation.AnycastEip" +// UNAUTHORIZEDOPERATION_INVALIDACCOUNT = "UnauthorizedOperation.InvalidAccount" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" +// UNSUPPORTEDOPERATION_OFFLINECHARGETYPE = "UnsupportedOperation.OfflineChargeType" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" func (c *Client) AllocateAddresses(request *AllocateAddressesRequest) (response *AllocateAddressesResponse, err error) { - if request == nil { - request = NewAllocateAddressesRequest() - } - - response = NewAllocateAddressesResponse() - err = c.Send(request, response) - return + return c.AllocateAddressesWithContext(context.Background(), request) } // AllocateAddresses @@ -373,29 +546,49 @@ func (c *Client) AllocateAddresses(request *AllocateAddressesRequest) (response // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// FAILEDOPERATION_INVALIDREGION = "FailedOperation.InvalidRegion" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" +// INVALIDPARAMETERVALUE_ADDRESSATTACKED = "InvalidParameterValue.AddressAttacked" // INVALIDPARAMETERVALUE_ADDRESSIPNOTAVAILABLE = "InvalidParameterValue.AddressIpNotAvailable" // INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_BANDWIDTHTOOSMALL = "InvalidParameterValue.BandwidthTooSmall" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INVALIDDEDICATEDCLUSTERID = "InvalidParameterValue.InvalidDedicatedClusterId" // INVALIDPARAMETERVALUE_INVALIDTAG = "InvalidParameterValue.InvalidTag" // INVALIDPARAMETERVALUE_MIXEDADDRESSIPSETTYPE = "InvalidParameterValue.MixedAddressIpSetType" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" // INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" // INVALIDPARAMETERVALUE_UNAVAILABLEZONE = "InvalidParameterValue.UnavailableZone" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" +// LIMITEXCEEDED_BANDWIDTHPACKAGERESOURCEQUOTA = "LimitExceeded.BandwidthPackageResourceQuota" +// LIMITEXCEEDED_MONTHLYADDRESSRECOVERYQUOTA = "LimitExceeded.MonthlyAddressRecoveryQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// UNAUTHORIZEDOPERATION_ANYCASTEIP = "UnauthorizedOperation.AnycastEip" +// UNAUTHORIZEDOPERATION_INVALIDACCOUNT = "UnauthorizedOperation.InvalidAccount" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" +// UNSUPPORTEDOPERATION_OFFLINECHARGETYPE = "UnsupportedOperation.OfflineChargeType" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" func (c *Client) AllocateAddressesWithContext(ctx context.Context, request *AllocateAddressesRequest) (response *AllocateAddressesResponse, err error) { if request == nil { request = NewAllocateAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AllocateAddresses require credential") + } + request.SetContext(ctx) response = NewAllocateAddressesResponse() @@ -407,6 +600,7 @@ func NewAllocateIp6AddressesBandwidthRequest() (request *AllocateIp6AddressesBan request = &AllocateIp6AddressesBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AllocateIp6AddressesBandwidth") return @@ -424,24 +618,24 @@ func NewAllocateIp6AddressesBandwidthResponse() (response *AllocateIp6AddressesB // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_ADDRESSIPNOTFOUND = "InvalidParameterValue.AddressIpNotFound" // INVALIDPARAMETERVALUE_ADDRESSIPNOTINVPC = "InvalidParameterValue.AddressIpNotInVpc" // INVALIDPARAMETERVALUE_ADDRESSPUBLISHED = "InvalidParameterValue.AddressPublished" +// INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" func (c *Client) AllocateIp6AddressesBandwidth(request *AllocateIp6AddressesBandwidthRequest) (response *AllocateIp6AddressesBandwidthResponse, err error) { - if request == nil { - request = NewAllocateIp6AddressesBandwidthRequest() - } - - response = NewAllocateIp6AddressesBandwidthResponse() - err = c.Send(request, response) - return + return c.AllocateIp6AddressesBandwidthWithContext(context.Background(), request) } // AllocateIp6AddressesBandwidth @@ -449,20 +643,31 @@ func (c *Client) AllocateIp6AddressesBandwidth(request *AllocateIp6AddressesBand // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_ADDRESSIPNOTFOUND = "InvalidParameterValue.AddressIpNotFound" // INVALIDPARAMETERVALUE_ADDRESSIPNOTINVPC = "InvalidParameterValue.AddressIpNotInVpc" // INVALIDPARAMETERVALUE_ADDRESSPUBLISHED = "InvalidParameterValue.AddressPublished" +// INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" +// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" func (c *Client) AllocateIp6AddressesBandwidthWithContext(ctx context.Context, request *AllocateIp6AddressesBandwidthRequest) (response *AllocateIp6AddressesBandwidthResponse, err error) { if request == nil { request = NewAllocateIp6AddressesBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AllocateIp6AddressesBandwidth require credential") + } + request.SetContext(ctx) response = NewAllocateIp6AddressesBandwidthResponse() @@ -474,6 +679,7 @@ func NewAssignIpv6AddressesRequest() (request *AssignIpv6AddressesRequest) { request = &AssignIpv6AddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssignIpv6Addresses") return @@ -501,10 +707,16 @@ func NewAssignIpv6AddressesResponse() (response *AssignIpv6AddressesResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // LIMITEXCEEDED_ADDRESS = "LimitExceeded.Address" // MISSINGPARAMETER = "MissingParameter" +// RESOURCEINUSE = "ResourceInUse" // RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" @@ -512,13 +724,7 @@ func NewAssignIpv6AddressesResponse() (response *AssignIpv6AddressesResponse) { // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_UNASSIGNCIDRBLOCK = "UnsupportedOperation.UnassignCidrBlock" func (c *Client) AssignIpv6Addresses(request *AssignIpv6AddressesRequest) (response *AssignIpv6AddressesResponse, err error) { - if request == nil { - request = NewAssignIpv6AddressesRequest() - } - - response = NewAssignIpv6AddressesResponse() - err = c.Send(request, response) - return + return c.AssignIpv6AddressesWithContext(context.Background(), request) } // AssignIpv6Addresses @@ -536,10 +742,16 @@ func (c *Client) AssignIpv6Addresses(request *AssignIpv6AddressesRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // LIMITEXCEEDED_ADDRESS = "LimitExceeded.Address" // MISSINGPARAMETER = "MissingParameter" +// RESOURCEINUSE = "ResourceInUse" // RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" @@ -550,6 +762,11 @@ func (c *Client) AssignIpv6AddressesWithContext(ctx context.Context, request *As if request == nil { request = NewAssignIpv6AddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssignIpv6Addresses require credential") + } + request.SetContext(ctx) response = NewAssignIpv6AddressesResponse() @@ -561,6 +778,7 @@ func NewAssignIpv6CidrBlockRequest() (request *AssignIpv6CidrBlockRequest) { request = &AssignIpv6CidrBlockRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssignIpv6CidrBlock") return @@ -578,7 +796,7 @@ func NewAssignIpv6CidrBlockResponse() (response *AssignIpv6CidrBlockResponse) { // // * 使用本接口前,您需要已有VPC实例,如果没有可通过接口CreateVpc创建。 // -// * 每个VPC只能申请一个IPv6网段 +// * 每个VPC只能申请一个IPv6网段。 // // 可能返回的错误码: // @@ -588,13 +806,7 @@ func NewAssignIpv6CidrBlockResponse() (response *AssignIpv6CidrBlockResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) AssignIpv6CidrBlock(request *AssignIpv6CidrBlockRequest) (response *AssignIpv6CidrBlockResponse, err error) { - if request == nil { - request = NewAssignIpv6CidrBlockRequest() - } - - response = NewAssignIpv6CidrBlockResponse() - err = c.Send(request, response) - return + return c.AssignIpv6CidrBlockWithContext(context.Background(), request) } // AssignIpv6CidrBlock @@ -602,7 +814,7 @@ func (c *Client) AssignIpv6CidrBlock(request *AssignIpv6CidrBlockRequest) (respo // // * 使用本接口前,您需要已有VPC实例,如果没有可通过接口CreateVpc创建。 // -// * 每个VPC只能申请一个IPv6网段 +// * 每个VPC只能申请一个IPv6网段。 // // 可能返回的错误码: // @@ -615,6 +827,11 @@ func (c *Client) AssignIpv6CidrBlockWithContext(ctx context.Context, request *As if request == nil { request = NewAssignIpv6CidrBlockRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssignIpv6CidrBlock require credential") + } + request.SetContext(ctx) response = NewAssignIpv6CidrBlockResponse() @@ -626,6 +843,7 @@ func NewAssignIpv6SubnetCidrBlockRequest() (request *AssignIpv6SubnetCidrBlockRe request = &AssignIpv6SubnetCidrBlockRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssignIpv6SubnetCidrBlock") return @@ -655,13 +873,7 @@ func NewAssignIpv6SubnetCidrBlockResponse() (response *AssignIpv6SubnetCidrBlock // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) AssignIpv6SubnetCidrBlock(request *AssignIpv6SubnetCidrBlockRequest) (response *AssignIpv6SubnetCidrBlockResponse, err error) { - if request == nil { - request = NewAssignIpv6SubnetCidrBlockRequest() - } - - response = NewAssignIpv6SubnetCidrBlockResponse() - err = c.Send(request, response) - return + return c.AssignIpv6SubnetCidrBlockWithContext(context.Background(), request) } // AssignIpv6SubnetCidrBlock @@ -684,6 +896,11 @@ func (c *Client) AssignIpv6SubnetCidrBlockWithContext(ctx context.Context, reque if request == nil { request = NewAssignIpv6SubnetCidrBlockRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssignIpv6SubnetCidrBlock require credential") + } + request.SetContext(ctx) response = NewAssignIpv6SubnetCidrBlockResponse() @@ -695,6 +912,7 @@ func NewAssignPrivateIpAddressesRequest() (request *AssignPrivateIpAddressesRequ request = &AssignPrivateIpAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssignPrivateIpAddresses") return @@ -722,26 +940,25 @@ func NewAssignPrivateIpAddressesResponse() (response *AssignPrivateIpAddressesRe // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" +// MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" func (c *Client) AssignPrivateIpAddresses(request *AssignPrivateIpAddressesRequest) (response *AssignPrivateIpAddressesResponse, err error) { - if request == nil { - request = NewAssignPrivateIpAddressesRequest() - } - - response = NewAssignPrivateIpAddressesResponse() - err = c.Send(request, response) - return + return c.AssignPrivateIpAddressesWithContext(context.Background(), request) } // AssignPrivateIpAddresses @@ -759,13 +976,18 @@ func (c *Client) AssignPrivateIpAddresses(request *AssignPrivateIpAddressesReque // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" +// MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" @@ -775,6 +997,11 @@ func (c *Client) AssignPrivateIpAddressesWithContext(ctx context.Context, reques if request == nil { request = NewAssignPrivateIpAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssignPrivateIpAddresses require credential") + } + request.SetContext(ctx) response = NewAssignPrivateIpAddressesResponse() @@ -786,6 +1013,7 @@ func NewAssociateAddressRequest() (request *AssociateAddressRequest) { request = &AssociateAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateAddress") return @@ -807,6 +1035,8 @@ func NewAssociateAddressResponse() (response *AssociateAddressResponse) { // // * 将 EIP 绑定到指定网卡的内网 IP上(非主网卡的主内网IP),则必须先解绑该 EIP,才能再绑定新的。 // +// * 将 EIP 绑定到内网型CLB实例的功能处于内测阶段,如需使用,请提交内测申请。 +// // * 将 EIP 绑定到NAT网关,请使用接口[AssociateNatGatewayAddress](https://cloud.tencent.com/document/product/215/36722) // // * EIP 如果欠费或被封堵,则不能被绑定。 @@ -816,6 +1046,7 @@ func NewAssociateAddressResponse() (response *AssociateAddressResponse) { // 可能返回的错误码: // // FAILEDOPERATION_ADDRESSENIINFONOTFOUND = "FailedOperation.AddressEniInfoNotFound" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" @@ -828,7 +1059,9 @@ func NewAssociateAddressResponse() (response *AssociateAddressResponse) { // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" // INVALIDPARAMETERVALUE_INSTANCEDOESNOTSUPPORTANYCAST = "InvalidParameterValue.InstanceDoesNotSupportAnycast" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" // INVALIDPARAMETERVALUE_INSTANCEHASWANIP = "InvalidParameterValue.InstanceHasWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_INSTANCENORMALPUBLICIPBLOCKED = "InvalidParameterValue.InstanceNormalPublicIpBlocked" // INVALIDPARAMETERVALUE_INSTANCENOTMATCHASSOCIATEENI = "InvalidParameterValue.InstanceNotMatchAssociateEni" @@ -839,8 +1072,12 @@ func NewAssociateAddressResponse() (response *AssociateAddressResponse) { // INVALIDPARAMETERVALUE_NETWORKINTERFACENOTFOUND = "InvalidParameterValue.NetworkInterfaceNotFound" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" // INVALIDPRIVATEIPADDRESS_ALREADYBINDEIP = "InvalidPrivateIpAddress.AlreadyBindEip" +// LIMITEXCEEDED_INSTANCEADDRESSQUOTA = "LimitExceeded.InstanceAddressQuota" // MISSINGPARAMETER = "MissingParameter" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" +// UNSUPPORTEDOPERATION_ADDRESSIPNOTSUPPORTINSTANCE = "UnsupportedOperation.AddressIpNotSupportInstance" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INCORRECTADDRESSRESOURCETYPE = "UnsupportedOperation.IncorrectAddressResourceType" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" @@ -848,13 +1085,7 @@ func NewAssociateAddressResponse() (response *AssociateAddressResponse) { // UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" // UNSUPPORTEDOPERATION_ISPNOTSUPPORTED = "UnsupportedOperation.IspNotSupported" func (c *Client) AssociateAddress(request *AssociateAddressRequest) (response *AssociateAddressResponse, err error) { - if request == nil { - request = NewAssociateAddressRequest() - } - - response = NewAssociateAddressResponse() - err = c.Send(request, response) - return + return c.AssociateAddressWithContext(context.Background(), request) } // AssociateAddress @@ -866,6 +1097,8 @@ func (c *Client) AssociateAddress(request *AssociateAddressRequest) (response *A // // * 将 EIP 绑定到指定网卡的内网 IP上(非主网卡的主内网IP),则必须先解绑该 EIP,才能再绑定新的。 // +// * 将 EIP 绑定到内网型CLB实例的功能处于内测阶段,如需使用,请提交内测申请。 +// // * 将 EIP 绑定到NAT网关,请使用接口[AssociateNatGatewayAddress](https://cloud.tencent.com/document/product/215/36722) // // * EIP 如果欠费或被封堵,则不能被绑定。 @@ -875,6 +1108,7 @@ func (c *Client) AssociateAddress(request *AssociateAddressRequest) (response *A // 可能返回的错误码: // // FAILEDOPERATION_ADDRESSENIINFONOTFOUND = "FailedOperation.AddressEniInfoNotFound" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" @@ -887,7 +1121,9 @@ func (c *Client) AssociateAddress(request *AssociateAddressRequest) (response *A // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" // INVALIDPARAMETERVALUE_INSTANCEDOESNOTSUPPORTANYCAST = "InvalidParameterValue.InstanceDoesNotSupportAnycast" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" // INVALIDPARAMETERVALUE_INSTANCEHASWANIP = "InvalidParameterValue.InstanceHasWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_INSTANCENORMALPUBLICIPBLOCKED = "InvalidParameterValue.InstanceNormalPublicIpBlocked" // INVALIDPARAMETERVALUE_INSTANCENOTMATCHASSOCIATEENI = "InvalidParameterValue.InstanceNotMatchAssociateEni" @@ -898,8 +1134,12 @@ func (c *Client) AssociateAddress(request *AssociateAddressRequest) (response *A // INVALIDPARAMETERVALUE_NETWORKINTERFACENOTFOUND = "InvalidParameterValue.NetworkInterfaceNotFound" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" // INVALIDPRIVATEIPADDRESS_ALREADYBINDEIP = "InvalidPrivateIpAddress.AlreadyBindEip" +// LIMITEXCEEDED_INSTANCEADDRESSQUOTA = "LimitExceeded.InstanceAddressQuota" // MISSINGPARAMETER = "MissingParameter" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" +// UNSUPPORTEDOPERATION_ADDRESSIPNOTSUPPORTINSTANCE = "UnsupportedOperation.AddressIpNotSupportInstance" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INCORRECTADDRESSRESOURCETYPE = "UnsupportedOperation.IncorrectAddressResourceType" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" @@ -910,6 +1150,11 @@ func (c *Client) AssociateAddressWithContext(ctx context.Context, request *Assoc if request == nil { request = NewAssociateAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateAddress require credential") + } + request.SetContext(ctx) response = NewAssociateAddressResponse() @@ -921,6 +1166,7 @@ func NewAssociateDhcpIpWithAddressIpRequest() (request *AssociateDhcpIpWithAddre request = &AssociateDhcpIpWithAddressIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateDhcpIpWithAddressIp") return @@ -942,18 +1188,15 @@ func NewAssociateDhcpIpWithAddressIpResponse() (response *AssociateDhcpIpWithAdd // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_BINDEIP = "UnsupportedOperation.BindEIP" +// UNSUPPORTEDOPERATION_UNSUPPORTEDBINDLOCALZONEEIP = "UnsupportedOperation.UnsupportedBindLocalZoneEIP" func (c *Client) AssociateDhcpIpWithAddressIp(request *AssociateDhcpIpWithAddressIpRequest) (response *AssociateDhcpIpWithAddressIpResponse, err error) { - if request == nil { - request = NewAssociateDhcpIpWithAddressIpRequest() - } - - response = NewAssociateDhcpIpWithAddressIpResponse() - err = c.Send(request, response) - return + return c.AssociateDhcpIpWithAddressIpWithContext(context.Background(), request) } // AssociateDhcpIpWithAddressIp @@ -965,14 +1208,22 @@ func (c *Client) AssociateDhcpIpWithAddressIp(request *AssociateDhcpIpWithAddres // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_BINDEIP = "UnsupportedOperation.BindEIP" +// UNSUPPORTEDOPERATION_UNSUPPORTEDBINDLOCALZONEEIP = "UnsupportedOperation.UnsupportedBindLocalZoneEIP" func (c *Client) AssociateDhcpIpWithAddressIpWithContext(ctx context.Context, request *AssociateDhcpIpWithAddressIpRequest) (response *AssociateDhcpIpWithAddressIpResponse, err error) { if request == nil { request = NewAssociateDhcpIpWithAddressIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateDhcpIpWithAddressIp require credential") + } + request.SetContext(ctx) response = NewAssociateDhcpIpWithAddressIpResponse() @@ -984,6 +1235,7 @@ func NewAssociateDirectConnectGatewayNatGatewayRequest() (request *AssociateDire request = &AssociateDirectConnectGatewayNatGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateDirectConnectGatewayNatGateway") return @@ -1009,13 +1261,7 @@ func NewAssociateDirectConnectGatewayNatGatewayResponse() (response *AssociateDi // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) AssociateDirectConnectGatewayNatGateway(request *AssociateDirectConnectGatewayNatGatewayRequest) (response *AssociateDirectConnectGatewayNatGatewayResponse, err error) { - if request == nil { - request = NewAssociateDirectConnectGatewayNatGatewayRequest() - } - - response = NewAssociateDirectConnectGatewayNatGatewayResponse() - err = c.Send(request, response) - return + return c.AssociateDirectConnectGatewayNatGatewayWithContext(context.Background(), request) } // AssociateDirectConnectGatewayNatGateway @@ -1034,6 +1280,11 @@ func (c *Client) AssociateDirectConnectGatewayNatGatewayWithContext(ctx context. if request == nil { request = NewAssociateDirectConnectGatewayNatGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateDirectConnectGatewayNatGateway require credential") + } + request.SetContext(ctx) response = NewAssociateDirectConnectGatewayNatGatewayResponse() @@ -1045,6 +1296,7 @@ func NewAssociateNatGatewayAddressRequest() (request *AssociateNatGatewayAddress request = &AssociateNatGatewayAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateNatGatewayAddress") return @@ -1062,25 +1314,23 @@ func NewAssociateNatGatewayAddressResponse() (response *AssociateNatGatewayAddre // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETERVALUE_EIPBRANDWIDTHOUTINVALID = "InvalidParameterValue.EIPBrandWidthOutInvalid" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" // LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" // LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" +// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" func (c *Client) AssociateNatGatewayAddress(request *AssociateNatGatewayAddressRequest) (response *AssociateNatGatewayAddressResponse, err error) { - if request == nil { - request = NewAssociateNatGatewayAddressRequest() - } - - response = NewAssociateNatGatewayAddressResponse() - err = c.Send(request, response) - return + return c.AssociateNatGatewayAddressWithContext(context.Background(), request) } // AssociateNatGatewayAddress @@ -1088,21 +1338,30 @@ func (c *Client) AssociateNatGatewayAddress(request *AssociateNatGatewayAddressR // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETERVALUE_EIPBRANDWIDTHOUTINVALID = "InvalidParameterValue.EIPBrandWidthOutInvalid" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" // LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" // LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" // RESOURCEINUSE = "ResourceInUse" +// RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" +// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" func (c *Client) AssociateNatGatewayAddressWithContext(ctx context.Context, request *AssociateNatGatewayAddressRequest) (response *AssociateNatGatewayAddressResponse, err error) { if request == nil { request = NewAssociateNatGatewayAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateNatGatewayAddress require credential") + } + request.SetContext(ctx) response = NewAssociateNatGatewayAddressResponse() @@ -1114,6 +1373,7 @@ func NewAssociateNetworkAclSubnetsRequest() (request *AssociateNetworkAclSubnets request = &AssociateNetworkAclSubnetsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateNetworkAclSubnets") return @@ -1127,7 +1387,7 @@ func NewAssociateNetworkAclSubnetsResponse() (response *AssociateNetworkAclSubne } // AssociateNetworkAclSubnets -// 本接口(AssociateNetworkAclSubnets)用于网络ACL关联vpc下的子网。 +// 本接口(AssociateNetworkAclSubnets)用于网络ACL关联VPC下的子网。 // // 可能返回的错误码: // @@ -1135,19 +1395,14 @@ func NewAssociateNetworkAclSubnetsResponse() (response *AssociateNetworkAclSubne // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) AssociateNetworkAclSubnets(request *AssociateNetworkAclSubnetsRequest) (response *AssociateNetworkAclSubnetsResponse, err error) { - if request == nil { - request = NewAssociateNetworkAclSubnetsRequest() - } - - response = NewAssociateNetworkAclSubnetsResponse() - err = c.Send(request, response) - return + return c.AssociateNetworkAclSubnetsWithContext(context.Background(), request) } // AssociateNetworkAclSubnets -// 本接口(AssociateNetworkAclSubnets)用于网络ACL关联vpc下的子网。 +// 本接口(AssociateNetworkAclSubnets)用于网络ACL关联VPC下的子网。 // // 可能返回的错误码: // @@ -1155,11 +1410,17 @@ func (c *Client) AssociateNetworkAclSubnets(request *AssociateNetworkAclSubnetsR // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) AssociateNetworkAclSubnetsWithContext(ctx context.Context, request *AssociateNetworkAclSubnetsRequest) (response *AssociateNetworkAclSubnetsResponse, err error) { if request == nil { request = NewAssociateNetworkAclSubnetsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateNetworkAclSubnets require credential") + } + request.SetContext(ctx) response = NewAssociateNetworkAclSubnetsResponse() @@ -1171,6 +1432,7 @@ func NewAssociateNetworkInterfaceSecurityGroupsRequest() (request *AssociateNetw request = &AssociateNetworkInterfaceSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AssociateNetworkInterfaceSecurityGroups") return @@ -1194,13 +1456,7 @@ func NewAssociateNetworkInterfaceSecurityGroupsResponse() (response *AssociateNe // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) AssociateNetworkInterfaceSecurityGroups(request *AssociateNetworkInterfaceSecurityGroupsRequest) (response *AssociateNetworkInterfaceSecurityGroupsResponse, err error) { - if request == nil { - request = NewAssociateNetworkInterfaceSecurityGroupsRequest() - } - - response = NewAssociateNetworkInterfaceSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.AssociateNetworkInterfaceSecurityGroupsWithContext(context.Background(), request) } // AssociateNetworkInterfaceSecurityGroups @@ -1217,6 +1473,11 @@ func (c *Client) AssociateNetworkInterfaceSecurityGroupsWithContext(ctx context. if request == nil { request = NewAssociateNetworkInterfaceSecurityGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AssociateNetworkInterfaceSecurityGroups require credential") + } + request.SetContext(ctx) response = NewAssociateNetworkInterfaceSecurityGroupsResponse() @@ -1228,6 +1489,7 @@ func NewAttachCcnInstancesRequest() (request *AttachCcnInstancesRequest) { request = &AttachCcnInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AttachCcnInstances") return @@ -1243,7 +1505,7 @@ func NewAttachCcnInstancesResponse() (response *AttachCcnInstancesResponse) { // AttachCcnInstances // 本接口(AttachCcnInstances)用于将网络实例加载到云联网实例中,网络实例包括VPC和专线网关。
    // -// 每个云联网能够关联的网络实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 +// 每个云联网能够关联的网络实例个数是有限的,详情请参考产品文档。如果需要扩充请联系在线客服。 // // 可能返回的错误码: // @@ -1253,31 +1515,33 @@ func NewAttachCcnInstancesResponse() (response *AttachCcnInstancesResponse) { // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_CURRENTINSTANCEATTACHEDCCNINSTANCES = "LimitExceeded.CurrentInstanceAttachedCcnInstances" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" // UNSUPPORTEDOPERATION_CCNATTACHED = "UnsupportedOperation.CcnAttached" +// UNSUPPORTEDOPERATION_CCNCROSSACCOUNT = "UnsupportedOperation.CcnCrossAccount" +// UNSUPPORTEDOPERATION_CCNORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.CcnOrdinaryAccountRefuseAttach" // UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist" // UNSUPPORTEDOPERATION_INSTANCEANDRTBNOTMATCH = "UnsupportedOperation.InstanceAndRtbNotMatch" +// UNSUPPORTEDOPERATION_INSTANCECDCIDNOTMATCHCCNCDCID = "UnsupportedOperation.InstanceCdcIdNotMatchCcnCdcId" +// UNSUPPORTEDOPERATION_INSTANCEORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.InstanceOrdinaryAccountRefuseAttach" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_ISNOTFINANCEACCOUNT = "UnsupportedOperation.IsNotFinanceAccount" +// UNSUPPORTEDOPERATION_MULTIPLEVPCNOTSUPPORTATTACHACCOUNTHASIPV6 = "UnsupportedOperation.MultipleVpcNotSupportAttachAccountHasIpv6" +// UNSUPPORTEDOPERATION_NOTSUPPORTATTACHEDGEANDCROSSBORDERINSTANCE = "UnsupportedOperation.NotSupportAttachEdgeAndCrossBorderInstance" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" // UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" // UNSUPPORTEDOPERATION_UNABLECROSSFINANCE = "UnsupportedOperation.UnableCrossFinance" func (c *Client) AttachCcnInstances(request *AttachCcnInstancesRequest) (response *AttachCcnInstancesResponse, err error) { - if request == nil { - request = NewAttachCcnInstancesRequest() - } - - response = NewAttachCcnInstancesResponse() - err = c.Send(request, response) - return + return c.AttachCcnInstancesWithContext(context.Background(), request) } // AttachCcnInstances // 本接口(AttachCcnInstances)用于将网络实例加载到云联网实例中,网络实例包括VPC和专线网关。
    // -// 每个云联网能够关联的网络实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 +// 每个云联网能够关联的网络实例个数是有限的,详情请参考产品文档。如果需要扩充请联系在线客服。 // // 可能返回的错误码: // @@ -1287,14 +1551,22 @@ func (c *Client) AttachCcnInstances(request *AttachCcnInstancesRequest) (respons // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_CURRENTINSTANCEATTACHEDCCNINSTANCES = "LimitExceeded.CurrentInstanceAttachedCcnInstances" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" // UNSUPPORTEDOPERATION_CCNATTACHED = "UnsupportedOperation.CcnAttached" +// UNSUPPORTEDOPERATION_CCNCROSSACCOUNT = "UnsupportedOperation.CcnCrossAccount" +// UNSUPPORTEDOPERATION_CCNORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.CcnOrdinaryAccountRefuseAttach" // UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist" // UNSUPPORTEDOPERATION_INSTANCEANDRTBNOTMATCH = "UnsupportedOperation.InstanceAndRtbNotMatch" +// UNSUPPORTEDOPERATION_INSTANCECDCIDNOTMATCHCCNCDCID = "UnsupportedOperation.InstanceCdcIdNotMatchCcnCdcId" +// UNSUPPORTEDOPERATION_INSTANCEORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.InstanceOrdinaryAccountRefuseAttach" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_ISNOTFINANCEACCOUNT = "UnsupportedOperation.IsNotFinanceAccount" +// UNSUPPORTEDOPERATION_MULTIPLEVPCNOTSUPPORTATTACHACCOUNTHASIPV6 = "UnsupportedOperation.MultipleVpcNotSupportAttachAccountHasIpv6" +// UNSUPPORTEDOPERATION_NOTSUPPORTATTACHEDGEANDCROSSBORDERINSTANCE = "UnsupportedOperation.NotSupportAttachEdgeAndCrossBorderInstance" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" // UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" // UNSUPPORTEDOPERATION_UNABLECROSSFINANCE = "UnsupportedOperation.UnableCrossFinance" @@ -1302,6 +1574,11 @@ func (c *Client) AttachCcnInstancesWithContext(ctx context.Context, request *Att if request == nil { request = NewAttachCcnInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AttachCcnInstances require credential") + } + request.SetContext(ctx) response = NewAttachCcnInstancesResponse() @@ -1313,6 +1590,7 @@ func NewAttachClassicLinkVpcRequest() (request *AttachClassicLinkVpcRequest) { request = &AttachClassicLinkVpcRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AttachClassicLinkVpc") return @@ -1346,13 +1624,7 @@ func NewAttachClassicLinkVpcResponse() (response *AttachClassicLinkVpcResponse) // UNSUPPORTEDOPERATION_CIDRUNSUPPORTEDCLASSICLINK = "UnsupportedOperation.CIDRUnSupportedClassicLink" // UNSUPPORTEDOPERATION_CLASSICINSTANCEIDALREADYEXISTS = "UnsupportedOperation.ClassicInstanceIdAlreadyExists" func (c *Client) AttachClassicLinkVpc(request *AttachClassicLinkVpcRequest) (response *AttachClassicLinkVpcResponse, err error) { - if request == nil { - request = NewAttachClassicLinkVpcRequest() - } - - response = NewAttachClassicLinkVpcResponse() - err = c.Send(request, response) - return + return c.AttachClassicLinkVpcWithContext(context.Background(), request) } // AttachClassicLinkVpc @@ -1379,6 +1651,11 @@ func (c *Client) AttachClassicLinkVpcWithContext(ctx context.Context, request *A if request == nil { request = NewAttachClassicLinkVpcRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AttachClassicLinkVpc require credential") + } + request.SetContext(ctx) response = NewAttachClassicLinkVpcResponse() @@ -1390,6 +1667,7 @@ func NewAttachNetworkInterfaceRequest() (request *AttachNetworkInterfaceRequest) request = &AttachNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AttachNetworkInterface") return @@ -1405,6 +1683,8 @@ func NewAttachNetworkInterfaceResponse() (response *AttachNetworkInterfaceRespon // AttachNetworkInterface // 本接口(AttachNetworkInterface)用于弹性网卡绑定云服务器。 // +// * 一个弹性网卡请至少绑定一个安全组,如需绑定请参见弹性网卡绑定安全组。 +// // * 一个云服务器可以绑定多个弹性网卡,但只能绑定一个主网卡。更多限制信息详见弹性网卡使用限制。 // // * 一个弹性网卡只能同时绑定一个云服务器。 @@ -1417,28 +1697,27 @@ func NewAttachNetworkInterfaceResponse() (response *AttachNetworkInterfaceRespon // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTALREADYEXISTS = "UnsupportedOperation.AttachmentAlreadyExists" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_RESOURCEISINVALIDSTATE = "UnsupportedOperation.ResourceIsInvalidState" // UNSUPPORTEDOPERATION_UNSUPPORTEDINSTANCEFAMILY = "UnsupportedOperation.UnsupportedInstanceFamily" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" // UNSUPPORTEDOPERATION_ZONEMISMATCH = "UnsupportedOperation.ZoneMismatch" func (c *Client) AttachNetworkInterface(request *AttachNetworkInterfaceRequest) (response *AttachNetworkInterfaceResponse, err error) { - if request == nil { - request = NewAttachNetworkInterfaceRequest() - } - - response = NewAttachNetworkInterfaceResponse() - err = c.Send(request, response) - return + return c.AttachNetworkInterfaceWithContext(context.Background(), request) } // AttachNetworkInterface // 本接口(AttachNetworkInterface)用于弹性网卡绑定云服务器。 // +// * 一个弹性网卡请至少绑定一个安全组,如需绑定请参见弹性网卡绑定安全组。 +// // * 一个云服务器可以绑定多个弹性网卡,但只能绑定一个主网卡。更多限制信息详见弹性网卡使用限制。 // // * 一个弹性网卡只能同时绑定一个云服务器。 @@ -1451,12 +1730,15 @@ func (c *Client) AttachNetworkInterface(request *AttachNetworkInterfaceRequest) // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTALREADYEXISTS = "UnsupportedOperation.AttachmentAlreadyExists" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_RESOURCEISINVALIDSTATE = "UnsupportedOperation.ResourceIsInvalidState" // UNSUPPORTEDOPERATION_UNSUPPORTEDINSTANCEFAMILY = "UnsupportedOperation.UnsupportedInstanceFamily" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" // UNSUPPORTEDOPERATION_ZONEMISMATCH = "UnsupportedOperation.ZoneMismatch" @@ -1464,6 +1746,11 @@ func (c *Client) AttachNetworkInterfaceWithContext(ctx context.Context, request if request == nil { request = NewAttachNetworkInterfaceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AttachNetworkInterface require credential") + } + request.SetContext(ctx) response = NewAttachNetworkInterfaceResponse() @@ -1471,10 +1758,74 @@ func (c *Client) AttachNetworkInterfaceWithContext(ctx context.Context, request return } +func NewAttachSnapshotInstancesRequest() (request *AttachSnapshotInstancesRequest) { + request = &AttachSnapshotInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "AttachSnapshotInstances") + + return +} + +func NewAttachSnapshotInstancesResponse() (response *AttachSnapshotInstancesResponse) { + response = &AttachSnapshotInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// AttachSnapshotInstances +// 本接口(AttachSnapshotInstances)用于快照策略关联实例。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ATTACHEDSNAPSHOTPOLICYEXCEEDED = "LimitExceeded.AttachedSnapshotPolicyExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTATTACHED = "UnsupportedOperation.SnapshotAttached" +// UNSUPPORTEDOPERATION_SNAPSHOTINSTANCEREGIONDIFF = "UnsupportedOperation.SnapshotInstanceRegionDiff" +func (c *Client) AttachSnapshotInstances(request *AttachSnapshotInstancesRequest) (response *AttachSnapshotInstancesResponse, err error) { + return c.AttachSnapshotInstancesWithContext(context.Background(), request) +} + +// AttachSnapshotInstances +// 本接口(AttachSnapshotInstances)用于快照策略关联实例。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_ATTACHEDSNAPSHOTPOLICYEXCEEDED = "LimitExceeded.AttachedSnapshotPolicyExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTATTACHED = "UnsupportedOperation.SnapshotAttached" +// UNSUPPORTEDOPERATION_SNAPSHOTINSTANCEREGIONDIFF = "UnsupportedOperation.SnapshotInstanceRegionDiff" +func (c *Client) AttachSnapshotInstancesWithContext(ctx context.Context, request *AttachSnapshotInstancesRequest) (response *AttachSnapshotInstancesResponse, err error) { + if request == nil { + request = NewAttachSnapshotInstancesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("AttachSnapshotInstances require credential") + } + + request.SetContext(ctx) + + response = NewAttachSnapshotInstancesResponse() + err = c.Send(request, response) + return +} + func NewAuditCrossBorderComplianceRequest() (request *AuditCrossBorderComplianceRequest) { request = &AuditCrossBorderComplianceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "AuditCrossBorderCompliance") return @@ -1499,13 +1850,7 @@ func NewAuditCrossBorderComplianceResponse() (response *AuditCrossBorderComplian // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) AuditCrossBorderCompliance(request *AuditCrossBorderComplianceRequest) (response *AuditCrossBorderComplianceResponse, err error) { - if request == nil { - request = NewAuditCrossBorderComplianceRequest() - } - - response = NewAuditCrossBorderComplianceResponse() - err = c.Send(request, response) - return + return c.AuditCrossBorderComplianceWithContext(context.Background(), request) } // AuditCrossBorderCompliance @@ -1523,6 +1868,11 @@ func (c *Client) AuditCrossBorderComplianceWithContext(ctx context.Context, requ if request == nil { request = NewAuditCrossBorderComplianceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("AuditCrossBorderCompliance require credential") + } + request.SetContext(ctx) response = NewAuditCrossBorderComplianceResponse() @@ -1534,6 +1884,7 @@ func NewCheckAssistantCidrRequest() (request *CheckAssistantCidrRequest) { request = &CheckAssistantCidrRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CheckAssistantCidr") return @@ -1547,7 +1898,7 @@ func NewCheckAssistantCidrResponse() (response *CheckAssistantCidrResponse) { } // CheckAssistantCidr -// 本接口(CheckAssistantCidr)用于检查辅助CIDR是否与存量路由、对等连接(对端VPC的CIDR)等资源存在冲突。如果存在重叠,则返回重叠的资源。(接口灰度中,如需使用请提工单。) +// 本接口(CheckAssistantCidr)用于检查辅助CIDR是否与存量路由、对等连接(对端VPC的CIDR)等资源存在冲突。如果存在重叠,则返回重叠的资源。 // // * 检测辅助CIDR是否与当前VPC的主CIDR和辅助CIDR存在重叠。 // @@ -1565,17 +1916,11 @@ func NewCheckAssistantCidrResponse() (response *CheckAssistantCidrResponse) { // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CheckAssistantCidr(request *CheckAssistantCidrRequest) (response *CheckAssistantCidrResponse, err error) { - if request == nil { - request = NewCheckAssistantCidrRequest() - } - - response = NewCheckAssistantCidrResponse() - err = c.Send(request, response) - return + return c.CheckAssistantCidrWithContext(context.Background(), request) } // CheckAssistantCidr -// 本接口(CheckAssistantCidr)用于检查辅助CIDR是否与存量路由、对等连接(对端VPC的CIDR)等资源存在冲突。如果存在重叠,则返回重叠的资源。(接口灰度中,如需使用请提工单。) +// 本接口(CheckAssistantCidr)用于检查辅助CIDR是否与存量路由、对等连接(对端VPC的CIDR)等资源存在冲突。如果存在重叠,则返回重叠的资源。 // // * 检测辅助CIDR是否与当前VPC的主CIDR和辅助CIDR存在重叠。 // @@ -1596,6 +1941,11 @@ func (c *Client) CheckAssistantCidrWithContext(ctx context.Context, request *Che if request == nil { request = NewCheckAssistantCidrRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CheckAssistantCidr require credential") + } + request.SetContext(ctx) response = NewCheckAssistantCidrResponse() @@ -1607,6 +1957,7 @@ func NewCheckDefaultSubnetRequest() (request *CheckDefaultSubnetRequest) { request = &CheckDefaultSubnetRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CheckDefaultSubnet") return @@ -1627,13 +1978,7 @@ func NewCheckDefaultSubnetResponse() (response *CheckDefaultSubnetResponse) { // RESOURCEINSUFFICIENT_CIDRBLOCK = "ResourceInsufficient.CidrBlock" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CheckDefaultSubnet(request *CheckDefaultSubnetRequest) (response *CheckDefaultSubnetResponse, err error) { - if request == nil { - request = NewCheckDefaultSubnetRequest() - } - - response = NewCheckDefaultSubnetResponse() - err = c.Send(request, response) - return + return c.CheckDefaultSubnetWithContext(context.Background(), request) } // CheckDefaultSubnet @@ -1647,6 +1992,11 @@ func (c *Client) CheckDefaultSubnetWithContext(ctx context.Context, request *Che if request == nil { request = NewCheckDefaultSubnetRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CheckDefaultSubnet require credential") + } + request.SetContext(ctx) response = NewCheckDefaultSubnetResponse() @@ -1658,6 +2008,7 @@ func NewCheckNetDetectStateRequest() (request *CheckNetDetectStateRequest) { request = &CheckNetDetectStateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CheckNetDetectState") return @@ -1671,10 +2022,11 @@ func NewCheckNetDetectStateResponse() (response *CheckNetDetectStateResponse) { } // CheckNetDetectState -// 本接口(CheckNetDetectState)用于验证网络探测。 +// 本接口(CheckNetDetectState)用于验证网络探测。 // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" @@ -1682,28 +2034,25 @@ func NewCheckNetDetectStateResponse() (response *CheckNetDetectStateResponse) { // INVALIDPARAMETERVALUE_NETDETECTINVPC = "InvalidParameterValue.NetDetectInVpc" // INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CheckNetDetectState(request *CheckNetDetectStateRequest) (response *CheckNetDetectStateResponse, err error) { - if request == nil { - request = NewCheckNetDetectStateRequest() - } - - response = NewCheckNetDetectStateResponse() - err = c.Send(request, response) - return + return c.CheckNetDetectStateWithContext(context.Background(), request) } // CheckNetDetectState -// 本接口(CheckNetDetectState)用于验证网络探测。 +// 本接口(CheckNetDetectState)用于验证网络探测。 // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" @@ -1711,10 +2060,12 @@ func (c *Client) CheckNetDetectState(request *CheckNetDetectStateRequest) (respo // INVALIDPARAMETERVALUE_NETDETECTINVPC = "InvalidParameterValue.NetDetectInVpc" // INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" @@ -1722,6 +2073,11 @@ func (c *Client) CheckNetDetectStateWithContext(ctx context.Context, request *Ch if request == nil { request = NewCheckNetDetectStateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CheckNetDetectState require credential") + } + request.SetContext(ctx) response = NewCheckNetDetectStateResponse() @@ -1733,6 +2089,7 @@ func NewCloneSecurityGroupRequest() (request *CloneSecurityGroupRequest) { request = &CloneSecurityGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CloneSecurityGroup") return @@ -1756,13 +2113,7 @@ func NewCloneSecurityGroupResponse() (response *CloneSecurityGroupResponse) { // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CloneSecurityGroup(request *CloneSecurityGroupRequest) (response *CloneSecurityGroupResponse, err error) { - if request == nil { - request = NewCloneSecurityGroupRequest() - } - - response = NewCloneSecurityGroupResponse() - err = c.Send(request, response) - return + return c.CloneSecurityGroupWithContext(context.Background(), request) } // CloneSecurityGroup @@ -1779,6 +2130,11 @@ func (c *Client) CloneSecurityGroupWithContext(ctx context.Context, request *Clo if request == nil { request = NewCloneSecurityGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CloneSecurityGroup require credential") + } + request.SetContext(ctx) response = NewCloneSecurityGroupResponse() @@ -1790,6 +2146,7 @@ func NewCreateAddressTemplateRequest() (request *CreateAddressTemplateRequest) { request = &CreateAddressTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateAddressTemplate") return @@ -1803,32 +2160,32 @@ func NewCreateAddressTemplateResponse() (response *CreateAddressTemplateResponse } // CreateAddressTemplate -// 本接口(CreateAddressTemplate)用于创建IP地址模版 +// 本接口(CreateAddressTemplate)用于创建IP地址模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) CreateAddressTemplate(request *CreateAddressTemplateRequest) (response *CreateAddressTemplateResponse, err error) { - if request == nil { - request = NewCreateAddressTemplateRequest() - } - - response = NewCreateAddressTemplateResponse() - err = c.Send(request, response) - return + return c.CreateAddressTemplateWithContext(context.Background(), request) } // CreateAddressTemplate -// 本接口(CreateAddressTemplate)用于创建IP地址模版 +// 本接口(CreateAddressTemplate)用于创建IP地址模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" @@ -1836,6 +2193,11 @@ func (c *Client) CreateAddressTemplateWithContext(ctx context.Context, request * if request == nil { request = NewCreateAddressTemplateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAddressTemplate require credential") + } + request.SetContext(ctx) response = NewCreateAddressTemplateResponse() @@ -1847,6 +2209,7 @@ func NewCreateAddressTemplateGroupRequest() (request *CreateAddressTemplateGroup request = &CreateAddressTemplateGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateAddressTemplateGroup") return @@ -1860,7 +2223,7 @@ func NewCreateAddressTemplateGroupResponse() (response *CreateAddressTemplateGro } // CreateAddressTemplateGroup -// 本接口(CreateAddressTemplateGroup)用于创建IP地址模版集合 +// 本接口(CreateAddressTemplateGroup)用于创建IP地址模板集合。 // // 可能返回的错误码: // @@ -1869,17 +2232,11 @@ func NewCreateAddressTemplateGroupResponse() (response *CreateAddressTemplateGro // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) CreateAddressTemplateGroup(request *CreateAddressTemplateGroupRequest) (response *CreateAddressTemplateGroupResponse, err error) { - if request == nil { - request = NewCreateAddressTemplateGroupRequest() - } - - response = NewCreateAddressTemplateGroupResponse() - err = c.Send(request, response) - return + return c.CreateAddressTemplateGroupWithContext(context.Background(), request) } // CreateAddressTemplateGroup -// 本接口(CreateAddressTemplateGroup)用于创建IP地址模版集合 +// 本接口(CreateAddressTemplateGroup)用于创建IP地址模板集合。 // // 可能返回的错误码: // @@ -1891,6 +2248,11 @@ func (c *Client) CreateAddressTemplateGroupWithContext(ctx context.Context, requ if request == nil { request = NewCreateAddressTemplateGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAddressTemplateGroup require credential") + } + request.SetContext(ctx) response = NewCreateAddressTemplateGroupResponse() @@ -1902,6 +2264,7 @@ func NewCreateAndAttachNetworkInterfaceRequest() (request *CreateAndAttachNetwor request = &CreateAndAttachNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateAndAttachNetworkInterface") return @@ -1933,26 +2296,46 @@ func NewCreateAndAttachNetworkInterfaceResponse() (response *CreateAndAttachNetw // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // UNSUPPORTEDOPERATION_UNSUPPORTEDINSTANCEFAMILY = "UnsupportedOperation.UnsupportedInstanceFamily" func (c *Client) CreateAndAttachNetworkInterface(request *CreateAndAttachNetworkInterfaceRequest) (response *CreateAndAttachNetworkInterfaceResponse, err error) { - if request == nil { - request = NewCreateAndAttachNetworkInterfaceRequest() - } - - response = NewCreateAndAttachNetworkInterfaceResponse() - err = c.Send(request, response) - return + return c.CreateAndAttachNetworkInterfaceWithContext(context.Background(), request) } // CreateAndAttachNetworkInterface @@ -1974,22 +2357,53 @@ func (c *Client) CreateAndAttachNetworkInterface(request *CreateAndAttachNetwork // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // UNSUPPORTEDOPERATION_UNSUPPORTEDINSTANCEFAMILY = "UnsupportedOperation.UnsupportedInstanceFamily" func (c *Client) CreateAndAttachNetworkInterfaceWithContext(ctx context.Context, request *CreateAndAttachNetworkInterfaceRequest) (response *CreateAndAttachNetworkInterfaceResponse, err error) { if request == nil { request = NewCreateAndAttachNetworkInterfaceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAndAttachNetworkInterface require credential") + } + request.SetContext(ctx) response = NewCreateAndAttachNetworkInterfaceResponse() @@ -2001,6 +2415,7 @@ func NewCreateAssistantCidrRequest() (request *CreateAssistantCidrRequest) { request = &CreateAssistantCidrRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateAssistantCidr") return @@ -2014,7 +2429,7 @@ func NewCreateAssistantCidrResponse() (response *CreateAssistantCidrResponse) { } // CreateAssistantCidr -// 本接口(CreateAssistantCidr)用于批量创建辅助CIDR。(接口灰度中,如需使用请提工单。) +// 本接口(CreateAssistantCidr)用于批量创建辅助CIDR。 // // 可能返回的错误码: // @@ -2025,20 +2440,15 @@ func NewCreateAssistantCidrResponse() (response *CreateAssistantCidrResponse) { // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" // INVALIDPARAMETERVALUE_SUBNETOVERLAPASSISTCIDR = "InvalidParameterValue.SubnetOverlapAssistCidr" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateAssistantCidr(request *CreateAssistantCidrRequest) (response *CreateAssistantCidrResponse, err error) { - if request == nil { - request = NewCreateAssistantCidrRequest() - } - - response = NewCreateAssistantCidrResponse() - err = c.Send(request, response) - return + return c.CreateAssistantCidrWithContext(context.Background(), request) } // CreateAssistantCidr -// 本接口(CreateAssistantCidr)用于批量创建辅助CIDR。(接口灰度中,如需使用请提工单。) +// 本接口(CreateAssistantCidr)用于批量创建辅助CIDR。 // // 可能返回的错误码: // @@ -2049,12 +2459,18 @@ func (c *Client) CreateAssistantCidr(request *CreateAssistantCidrRequest) (respo // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" // INVALIDPARAMETERVALUE_SUBNETOVERLAPASSISTCIDR = "InvalidParameterValue.SubnetOverlapAssistCidr" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateAssistantCidrWithContext(ctx context.Context, request *CreateAssistantCidrRequest) (response *CreateAssistantCidrResponse, err error) { if request == nil { request = NewCreateAssistantCidrRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateAssistantCidr require credential") + } + request.SetContext(ctx) response = NewCreateAssistantCidrResponse() @@ -2066,6 +2482,7 @@ func NewCreateBandwidthPackageRequest() (request *CreateBandwidthPackageRequest) request = &CreateBandwidthPackageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateBandwidthPackage") return @@ -2083,23 +2500,23 @@ func NewCreateBandwidthPackageResponse() (response *CreateBandwidthPackageRespon // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACCOUNTNOTSUPPORTED = "UnsupportedOperation.AccountNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDRESOURCEINTERNETCHARGETYPE = "UnsupportedOperation.InvalidResourceInternetChargeType" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDPURCHASECENTEREGRESSRESOURCE = "UnsupportedOperation.NotSupportedPurchaseCenterEgressResource" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" func (c *Client) CreateBandwidthPackage(request *CreateBandwidthPackageRequest) (response *CreateBandwidthPackageResponse, err error) { - if request == nil { - request = NewCreateBandwidthPackageRequest() - } - - response = NewCreateBandwidthPackageResponse() - err = c.Send(request, response) - return + return c.CreateBandwidthPackageWithContext(context.Background(), request) } // CreateBandwidthPackage @@ -2107,19 +2524,30 @@ func (c *Client) CreateBandwidthPackage(request *CreateBandwidthPackageRequest) // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACCOUNTNOTSUPPORTED = "UnsupportedOperation.AccountNotSupported" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDRESOURCEINTERNETCHARGETYPE = "UnsupportedOperation.InvalidResourceInternetChargeType" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDPURCHASECENTEREGRESSRESOURCE = "UnsupportedOperation.NotSupportedPurchaseCenterEgressResource" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" func (c *Client) CreateBandwidthPackageWithContext(ctx context.Context, request *CreateBandwidthPackageRequest) (response *CreateBandwidthPackageResponse, err error) { if request == nil { request = NewCreateBandwidthPackageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateBandwidthPackage require credential") + } + request.SetContext(ctx) response = NewCreateBandwidthPackageResponse() @@ -2131,6 +2559,7 @@ func NewCreateCcnRequest() (request *CreateCcnRequest) { request = &CreateCcnRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateCcn") return @@ -2148,7 +2577,7 @@ func NewCreateCcnResponse() (response *CreateCcnResponse) { // // * 创建云联网同时可以绑定标签, 应答里的标签列表代表添加成功的标签。 // -// 每个账号能创建的云联网实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 +// * 每个账号能创建的云联网实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 // // 可能返回的错误码: // @@ -2156,21 +2585,39 @@ func NewCreateCcnResponse() (response *CreateCcnResponse) { // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_PREPAIDCCNONLYSUPPORTINTERREGIONLIMIT = "UnsupportedOperation.PrepaidCcnOnlySupportInterRegionLimit" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // UNSUPPORTEDOPERATION_USERANDCCNCHARGETYPENOTMATCH = "UnsupportedOperation.UserAndCcnChargeTypeNotMatch" func (c *Client) CreateCcn(request *CreateCcnRequest) (response *CreateCcnResponse, err error) { - if request == nil { - request = NewCreateCcnRequest() - } - - response = NewCreateCcnResponse() - err = c.Send(request, response) - return + return c.CreateCcnWithContext(context.Background(), request) } // CreateCcn @@ -2178,7 +2625,7 @@ func (c *Client) CreateCcn(request *CreateCcnRequest) (response *CreateCcnRespon // // * 创建云联网同时可以绑定标签, 应答里的标签列表代表添加成功的标签。 // -// 每个账号能创建的云联网实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 +// * 每个账号能创建的云联网实例个数是有限的,详请参考产品文档。如果需要扩充请联系在线客服。 // // 可能返回的错误码: // @@ -2186,17 +2633,46 @@ func (c *Client) CreateCcn(request *CreateCcnRequest) (response *CreateCcnRespon // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_PREPAIDCCNONLYSUPPORTINTERREGIONLIMIT = "UnsupportedOperation.PrepaidCcnOnlySupportInterRegionLimit" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // UNSUPPORTEDOPERATION_USERANDCCNCHARGETYPENOTMATCH = "UnsupportedOperation.UserAndCcnChargeTypeNotMatch" func (c *Client) CreateCcnWithContext(ctx context.Context, request *CreateCcnRequest) (response *CreateCcnResponse, err error) { if request == nil { request = NewCreateCcnRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateCcn require credential") + } + request.SetContext(ctx) response = NewCreateCcnResponse() @@ -2208,6 +2684,7 @@ func NewCreateCustomerGatewayRequest() (request *CreateCustomerGatewayRequest) { request = &CreateCustomerGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateCustomerGateway") return @@ -2226,17 +2703,34 @@ func NewCreateCustomerGatewayResponse() (response *CreateCustomerGatewayResponse // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // VPCLIMITEXCEEDED = "VpcLimitExceeded" func (c *Client) CreateCustomerGateway(request *CreateCustomerGatewayRequest) (response *CreateCustomerGatewayResponse, err error) { - if request == nil { - request = NewCreateCustomerGatewayRequest() - } - - response = NewCreateCustomerGatewayResponse() - err = c.Send(request, response) - return + return c.CreateCustomerGatewayWithContext(context.Background(), request) } // CreateCustomerGateway @@ -2245,13 +2739,41 @@ func (c *Client) CreateCustomerGateway(request *CreateCustomerGatewayRequest) (r // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" // VPCLIMITEXCEEDED = "VpcLimitExceeded" func (c *Client) CreateCustomerGatewayWithContext(ctx context.Context, request *CreateCustomerGatewayRequest) (response *CreateCustomerGatewayResponse, err error) { if request == nil { request = NewCreateCustomerGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateCustomerGateway require credential") + } + request.SetContext(ctx) response = NewCreateCustomerGatewayResponse() @@ -2263,6 +2785,7 @@ func NewCreateDefaultSecurityGroupRequest() (request *CreateDefaultSecurityGroup request = &CreateDefaultSecurityGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateDefaultSecurityGroup") return @@ -2290,13 +2813,7 @@ func NewCreateDefaultSecurityGroupResponse() (response *CreateDefaultSecurityGro // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateDefaultSecurityGroup(request *CreateDefaultSecurityGroupRequest) (response *CreateDefaultSecurityGroupResponse, err error) { - if request == nil { - request = NewCreateDefaultSecurityGroupRequest() - } - - response = NewCreateDefaultSecurityGroupResponse() - err = c.Send(request, response) - return + return c.CreateDefaultSecurityGroupWithContext(context.Background(), request) } // CreateDefaultSecurityGroup @@ -2317,6 +2834,11 @@ func (c *Client) CreateDefaultSecurityGroupWithContext(ctx context.Context, requ if request == nil { request = NewCreateDefaultSecurityGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDefaultSecurityGroup require credential") + } + request.SetContext(ctx) response = NewCreateDefaultSecurityGroupResponse() @@ -2328,6 +2850,7 @@ func NewCreateDefaultVpcRequest() (request *CreateDefaultVpcRequest) { request = &CreateDefaultVpcRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateDefaultVpc") return @@ -2351,22 +2874,18 @@ func NewCreateDefaultVpcResponse() (response *CreateDefaultVpcResponse) { // // * 只支持VPC,返回默认VPC信息 // -// 您也可以通过 Force 参数,强制返回默认VPC +// 您也可以通过 Force 参数,强制返回默认VPC。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" // LIMITEXCEEDED = "LimitExceeded" // RESOURCEINSUFFICIENT_CIDRBLOCK = "ResourceInsufficient.CidrBlock" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" func (c *Client) CreateDefaultVpc(request *CreateDefaultVpcRequest) (response *CreateDefaultVpcResponse, err error) { - if request == nil { - request = NewCreateDefaultVpcRequest() - } - - response = NewCreateDefaultVpcResponse() - err = c.Send(request, response) - return + return c.CreateDefaultVpcWithContext(context.Background(), request) } // CreateDefaultVpc @@ -2380,18 +2899,25 @@ func (c *Client) CreateDefaultVpc(request *CreateDefaultVpcRequest) (response *C // // * 只支持VPC,返回默认VPC信息 // -// 您也可以通过 Force 参数,强制返回默认VPC +// 您也可以通过 Force 参数,强制返回默认VPC。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" // LIMITEXCEEDED = "LimitExceeded" // RESOURCEINSUFFICIENT_CIDRBLOCK = "ResourceInsufficient.CidrBlock" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" func (c *Client) CreateDefaultVpcWithContext(ctx context.Context, request *CreateDefaultVpcRequest) (response *CreateDefaultVpcResponse, err error) { if request == nil { request = NewCreateDefaultVpcRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDefaultVpc require credential") + } + request.SetContext(ctx) response = NewCreateDefaultVpcResponse() @@ -2403,6 +2929,7 @@ func NewCreateDhcpIpRequest() (request *CreateDhcpIpRequest) { request = &CreateDhcpIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateDhcpIp") return @@ -2416,45 +2943,50 @@ func NewCreateDhcpIpResponse() (response *CreateDhcpIpResponse) { } // CreateDhcpIp -// 本接口(CreateDhcpIp)用于创建DhcpIp +// 本接口(CreateDhcpIp)用于创建DhcpIp。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateDhcpIp(request *CreateDhcpIpRequest) (response *CreateDhcpIpResponse, err error) { - if request == nil { - request = NewCreateDhcpIpRequest() - } - - response = NewCreateDhcpIpResponse() - err = c.Send(request, response) - return + return c.CreateDhcpIpWithContext(context.Background(), request) } // CreateDhcpIp -// 本接口(CreateDhcpIp)用于创建DhcpIp +// 本接口(CreateDhcpIp)用于创建DhcpIp。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateDhcpIpWithContext(ctx context.Context, request *CreateDhcpIpRequest) (response *CreateDhcpIpResponse, err error) { if request == nil { request = NewCreateDhcpIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDhcpIp require credential") + } + request.SetContext(ctx) response = NewCreateDhcpIpResponse() @@ -2466,6 +2998,7 @@ func NewCreateDirectConnectGatewayRequest() (request *CreateDirectConnectGateway request = &CreateDirectConnectGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateDirectConnectGateway") return @@ -2487,15 +3020,12 @@ func NewCreateDirectConnectGatewayResponse() (response *CreateDirectConnectGatew // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist" // UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" func (c *Client) CreateDirectConnectGateway(request *CreateDirectConnectGatewayRequest) (response *CreateDirectConnectGatewayResponse, err error) { - if request == nil { - request = NewCreateDirectConnectGatewayRequest() - } - - response = NewCreateDirectConnectGatewayResponse() - err = c.Send(request, response) - return + return c.CreateDirectConnectGatewayWithContext(context.Background(), request) } // CreateDirectConnectGateway @@ -2507,11 +3037,19 @@ func (c *Client) CreateDirectConnectGateway(request *CreateDirectConnectGatewayR // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist" // UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" func (c *Client) CreateDirectConnectGatewayWithContext(ctx context.Context, request *CreateDirectConnectGatewayRequest) (response *CreateDirectConnectGatewayResponse, err error) { if request == nil { request = NewCreateDirectConnectGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDirectConnectGateway require credential") + } + request.SetContext(ctx) response = NewCreateDirectConnectGatewayResponse() @@ -2523,6 +3061,7 @@ func NewCreateDirectConnectGatewayCcnRoutesRequest() (request *CreateDirectConne request = &CreateDirectConnectGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateDirectConnectGatewayCcnRoutes") return @@ -2544,13 +3083,7 @@ func NewCreateDirectConnectGatewayCcnRoutesResponse() (response *CreateDirectCon // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) CreateDirectConnectGatewayCcnRoutes(request *CreateDirectConnectGatewayCcnRoutesRequest) (response *CreateDirectConnectGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewCreateDirectConnectGatewayCcnRoutesRequest() - } - - response = NewCreateDirectConnectGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.CreateDirectConnectGatewayCcnRoutesWithContext(context.Background(), request) } // CreateDirectConnectGatewayCcnRoutes @@ -2565,6 +3098,11 @@ func (c *Client) CreateDirectConnectGatewayCcnRoutesWithContext(ctx context.Cont if request == nil { request = NewCreateDirectConnectGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateDirectConnectGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewCreateDirectConnectGatewayCcnRoutesResponse() @@ -2576,6 +3114,7 @@ func NewCreateFlowLogRequest() (request *CreateFlowLogRequest) { request = &CreateFlowLogRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateFlowLog") return @@ -2589,43 +3128,100 @@ func NewCreateFlowLogResponse() (response *CreateFlowLogResponse) { } // CreateFlowLog -// 本接口(CreateFlowLog)用于创建流日志 +// 本接口(CreateFlowLog)用于创建网络流日志。 // // 可能返回的错误码: // +// INTERNALERROR_CREATECKAFKAROUTEERROR = "InternalError.CreateCkafkaRouteError" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_DPDKNATFLOWLOGONLYSUPPORTALLTRAFFICTYPE = "UnsupportedOperation.DpdkNatFlowLogOnlySupportAllTrafficType" +// UNSUPPORTEDOPERATION_FLOWLOGINSTANCEEXISTED = "UnsupportedOperation.FlowLogInstanceExisted" +// UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTKOINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportKoInstanceEni" +// UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTNULLINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportNullInstanceEni" +// UNSUPPORTEDOPERATION_ONLYSUPPORTPROFESSIONKAFKA = "UnsupportedOperation.OnlySupportProfessionKafka" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateFlowLog(request *CreateFlowLogRequest) (response *CreateFlowLogResponse, err error) { - if request == nil { - request = NewCreateFlowLogRequest() - } - - response = NewCreateFlowLogResponse() - err = c.Send(request, response) - return + return c.CreateFlowLogWithContext(context.Background(), request) } // CreateFlowLog -// 本接口(CreateFlowLog)用于创建流日志 +// 本接口(CreateFlowLog)用于创建网络流日志。 // // 可能返回的错误码: // +// INTERNALERROR_CREATECKAFKAROUTEERROR = "InternalError.CreateCkafkaRouteError" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_DPDKNATFLOWLOGONLYSUPPORTALLTRAFFICTYPE = "UnsupportedOperation.DpdkNatFlowLogOnlySupportAllTrafficType" +// UNSUPPORTEDOPERATION_FLOWLOGINSTANCEEXISTED = "UnsupportedOperation.FlowLogInstanceExisted" +// UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTKOINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportKoInstanceEni" +// UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTNULLINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportNullInstanceEni" +// UNSUPPORTEDOPERATION_ONLYSUPPORTPROFESSIONKAFKA = "UnsupportedOperation.OnlySupportProfessionKafka" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateFlowLogWithContext(ctx context.Context, request *CreateFlowLogRequest) (response *CreateFlowLogResponse, err error) { if request == nil { request = NewCreateFlowLogRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateFlowLog require credential") + } + request.SetContext(ctx) response = NewCreateFlowLogResponse() @@ -2637,6 +3233,7 @@ func NewCreateHaVipRequest() (request *CreateHaVipRequest) { request = &CreateHaVipRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateHaVip") return @@ -2650,7 +3247,7 @@ func NewCreateHaVipResponse() (response *CreateHaVipResponse) { } // CreateHaVip -// 本接口(CreateHaVip)用于创建高可用虚拟IP(HAVIP) +// 本接口(CreateHaVip)用于创建高可用虚拟IP(HAVIP)。 // // 可能返回的错误码: // @@ -2659,22 +3256,20 @@ func NewCreateHaVipResponse() (response *CreateHaVipResponse) { // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_INVALIDBUSINESS = "InvalidParameterValue.InvalidBusiness" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SUBNETNOTEXISTS = "UnsupportedOperation.SubnetNotExists" func (c *Client) CreateHaVip(request *CreateHaVipRequest) (response *CreateHaVipResponse, err error) { - if request == nil { - request = NewCreateHaVipRequest() - } - - response = NewCreateHaVipResponse() - err = c.Send(request, response) - return + return c.CreateHaVipWithContext(context.Background(), request) } // CreateHaVip -// 本接口(CreateHaVip)用于创建高可用虚拟IP(HAVIP) +// 本接口(CreateHaVip)用于创建高可用虚拟IP(HAVIP)。 // // 可能返回的错误码: // @@ -2683,14 +3278,23 @@ func (c *Client) CreateHaVip(request *CreateHaVipRequest) (response *CreateHaVip // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_INVALIDBUSINESS = "InvalidParameterValue.InvalidBusiness" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SUBNETNOTEXISTS = "UnsupportedOperation.SubnetNotExists" func (c *Client) CreateHaVipWithContext(ctx context.Context, request *CreateHaVipRequest) (response *CreateHaVipResponse, err error) { if request == nil { request = NewCreateHaVipRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateHaVip require credential") + } + request.SetContext(ctx) response = NewCreateHaVipResponse() @@ -2702,6 +3306,7 @@ func NewCreateIp6TranslatorsRequest() (request *CreateIp6TranslatorsRequest) { request = &CreateIp6TranslatorsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateIp6Translators") return @@ -2724,13 +3329,7 @@ func NewCreateIp6TranslatorsResponse() (response *CreateIp6TranslatorsResponse) // INTERNALSERVERERROR = "InternalServerError" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" func (c *Client) CreateIp6Translators(request *CreateIp6TranslatorsRequest) (response *CreateIp6TranslatorsResponse, err error) { - if request == nil { - request = NewCreateIp6TranslatorsRequest() - } - - response = NewCreateIp6TranslatorsResponse() - err = c.Send(request, response) - return + return c.CreateIp6TranslatorsWithContext(context.Background(), request) } // CreateIp6Translators @@ -2746,6 +3345,11 @@ func (c *Client) CreateIp6TranslatorsWithContext(ctx context.Context, request *C if request == nil { request = NewCreateIp6TranslatorsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateIp6Translators require credential") + } + request.SetContext(ctx) response = NewCreateIp6TranslatorsResponse() @@ -2757,6 +3361,7 @@ func NewCreateLocalGatewayRequest() (request *CreateLocalGatewayRequest) { request = &CreateLocalGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateLocalGateway") return @@ -2770,7 +3375,7 @@ func NewCreateLocalGatewayResponse() (response *CreateLocalGatewayResponse) { } // CreateLocalGateway -// 该接口用于创建用于CDC的本地网关。 +// 本接口(CreateLocalGateway)用于创建用于CDC的本地网关。 // // 可能返回的错误码: // @@ -2782,17 +3387,11 @@ func NewCreateLocalGatewayResponse() (response *CreateLocalGatewayResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_LOCALGATEWAYALREADYEXISTS = "UnsupportedOperation.LocalGatewayAlreadyExists" func (c *Client) CreateLocalGateway(request *CreateLocalGatewayRequest) (response *CreateLocalGatewayResponse, err error) { - if request == nil { - request = NewCreateLocalGatewayRequest() - } - - response = NewCreateLocalGatewayResponse() - err = c.Send(request, response) - return + return c.CreateLocalGatewayWithContext(context.Background(), request) } // CreateLocalGateway -// 该接口用于创建用于CDC的本地网关。 +// 本接口(CreateLocalGateway)用于创建用于CDC的本地网关。 // // 可能返回的错误码: // @@ -2807,6 +3406,11 @@ func (c *Client) CreateLocalGatewayWithContext(ctx context.Context, request *Cre if request == nil { request = NewCreateLocalGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateLocalGateway require credential") + } + request.SetContext(ctx) response = NewCreateLocalGatewayResponse() @@ -2818,6 +3422,7 @@ func NewCreateNatGatewayRequest() (request *CreateNatGatewayRequest) { request = &CreateNatGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNatGateway") return @@ -2838,37 +3443,58 @@ func NewCreateNatGatewayResponse() (response *CreateNatGatewayResponse) { // 可能返回的错误码: // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSSTATE = "InvalidAddressState" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_EIPBRANDWIDTHOUTINVALID = "InvalidParameterValue.EIPBrandWidthOutInvalid" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" // INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" // LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" // LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" +// LIMITEXCEEDED_NATGATEWAYLIMITEXCEEDED = "LimitExceeded.NatGatewayLimitExceeded" // LIMITEXCEEDED_NATGATEWAYPERVPCLIMITEXCEEDED = "LimitExceeded.NatGatewayPerVpcLimitExceeded" // LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_NATGATEWAYHADEIPUNASSOCIATE = "UnsupportedOperation.NatGatewayHadEipUnassociate" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateNatGateway(request *CreateNatGatewayRequest) (response *CreateNatGatewayResponse, err error) { - if request == nil { - request = NewCreateNatGatewayRequest() - } - - response = NewCreateNatGatewayResponse() - err = c.Send(request, response) - return + return c.CreateNatGatewayWithContext(context.Background(), request) } // CreateNatGateway @@ -2879,33 +3505,65 @@ func (c *Client) CreateNatGateway(request *CreateNatGatewayRequest) (response *C // 可能返回的错误码: // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSSTATE = "InvalidAddressState" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_EIPBRANDWIDTHOUTINVALID = "InvalidParameterValue.EIPBrandWidthOutInvalid" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" // INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" // LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" // LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" +// LIMITEXCEEDED_NATGATEWAYLIMITEXCEEDED = "LimitExceeded.NatGatewayLimitExceeded" // LIMITEXCEEDED_NATGATEWAYPERVPCLIMITEXCEEDED = "LimitExceeded.NatGatewayPerVpcLimitExceeded" // LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_NATGATEWAYHADEIPUNASSOCIATE = "UnsupportedOperation.NatGatewayHadEipUnassociate" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateNatGatewayWithContext(ctx context.Context, request *CreateNatGatewayRequest) (response *CreateNatGatewayResponse, err error) { if request == nil { request = NewCreateNatGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNatGateway require credential") + } + request.SetContext(ctx) response = NewCreateNatGatewayResponse() @@ -2917,6 +3575,7 @@ func NewCreateNatGatewayDestinationIpPortTranslationNatRuleRequest() (request *C request = &CreateNatGatewayDestinationIpPortTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNatGatewayDestinationIpPortTranslationNatRule") return @@ -2934,38 +3593,16 @@ func NewCreateNatGatewayDestinationIpPortTranslationNatRuleResponse() (response // // 可能返回的错误码: // -// ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" -// INVALIDADDRESSSTATE = "InvalidAddressState" -// INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEEXISTED = "InvalidParameterValue.NatGatewayDnatRuleExisted" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEPIPNEEDVM = "InvalidParameterValue.NatGatewayDnatRulePipNeedVm" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEREPEATED = "InvalidParameterValue.NatGatewayDnatRuleRepeated" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" -// INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" -// LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" -// LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" -// LIMITEXCEEDED_NATGATEWAYPERVPCLIMITEXCEEDED = "LimitExceeded.NatGatewayPerVpcLimitExceeded" -// LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" -// RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" -// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" +// UNSUPPORTEDOPERATION_NATGATEWAYEIPNOTEXISTS = "UnsupportedOperation.NatGatewayEipNotExists" func (c *Client) CreateNatGatewayDestinationIpPortTranslationNatRule(request *CreateNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *CreateNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { - if request == nil { - request = NewCreateNatGatewayDestinationIpPortTranslationNatRuleRequest() - } - - response = NewCreateNatGatewayDestinationIpPortTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.CreateNatGatewayDestinationIpPortTranslationNatRuleWithContext(context.Background(), request) } // CreateNatGatewayDestinationIpPortTranslationNatRule @@ -2973,34 +3610,23 @@ func (c *Client) CreateNatGatewayDestinationIpPortTranslationNatRule(request *Cr // // 可能返回的错误码: // -// ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" -// INVALIDADDRESSSTATE = "InvalidAddressState" -// INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEEXISTED = "InvalidParameterValue.NatGatewayDnatRuleExisted" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEPIPNEEDVM = "InvalidParameterValue.NatGatewayDnatRulePipNeedVm" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEREPEATED = "InvalidParameterValue.NatGatewayDnatRuleRepeated" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" -// INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" -// LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" -// LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" -// LIMITEXCEEDED_NATGATEWAYPERVPCLIMITEXCEEDED = "LimitExceeded.NatGatewayPerVpcLimitExceeded" -// LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" -// RESOURCEINUSE_ADDRESS = "ResourceInUse.Address" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" -// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTBGPIP = "UnsupportedOperation.PublicIpAddressIsNotBGPIp" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSISNOTEXISTED = "UnsupportedOperation.PublicIpAddressIsNotExisted" -// UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" +// UNSUPPORTEDOPERATION_NATGATEWAYEIPNOTEXISTS = "UnsupportedOperation.NatGatewayEipNotExists" func (c *Client) CreateNatGatewayDestinationIpPortTranslationNatRuleWithContext(ctx context.Context, request *CreateNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *CreateNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { if request == nil { request = NewCreateNatGatewayDestinationIpPortTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNatGatewayDestinationIpPortTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewCreateNatGatewayDestinationIpPortTranslationNatRuleResponse() @@ -3012,6 +3638,7 @@ func NewCreateNatGatewaySourceIpTranslationNatRuleRequest() (request *CreateNatG request = &CreateNatGatewaySourceIpTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNatGatewaySourceIpTranslationNatRule") return @@ -3033,18 +3660,18 @@ func NewCreateNatGatewaySourceIpTranslationNatRuleResponse() (response *CreateNa // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_NATSNATRULEEXISTS = "InvalidParameterValue.NatSnatRuleExists" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" // UNKNOWNPARAMETER = "UnknownParameter" +// UNSUPPORTEDOPERATION_NATGATEWAYEIPNOTEXISTS = "UnsupportedOperation.NatGatewayEipNotExists" +// UNSUPPORTEDOPERATION_NATGATEWAYRULEPIPEXISTS = "UnsupportedOperation.NatGatewayRulePipExists" +// UNSUPPORTEDOPERATION_NATGATEWAYSNATPIPNEEDVM = "UnsupportedOperation.NatGatewaySnatPipNeedVm" // UNSUPPORTEDOPERATION_NATGATEWAYTYPENOTSUPPORTSNAT = "UnsupportedOperation.NatGatewayTypeNotSupportSNAT" +// UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) CreateNatGatewaySourceIpTranslationNatRule(request *CreateNatGatewaySourceIpTranslationNatRuleRequest) (response *CreateNatGatewaySourceIpTranslationNatRuleResponse, err error) { - if request == nil { - request = NewCreateNatGatewaySourceIpTranslationNatRuleRequest() - } - - response = NewCreateNatGatewaySourceIpTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.CreateNatGatewaySourceIpTranslationNatRuleWithContext(context.Background(), request) } // CreateNatGatewaySourceIpTranslationNatRule @@ -3056,14 +3683,25 @@ func (c *Client) CreateNatGatewaySourceIpTranslationNatRule(request *CreateNatGa // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_NATSNATRULEEXISTS = "InvalidParameterValue.NatSnatRuleExists" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" // UNKNOWNPARAMETER = "UnknownParameter" +// UNSUPPORTEDOPERATION_NATGATEWAYEIPNOTEXISTS = "UnsupportedOperation.NatGatewayEipNotExists" +// UNSUPPORTEDOPERATION_NATGATEWAYRULEPIPEXISTS = "UnsupportedOperation.NatGatewayRulePipExists" +// UNSUPPORTEDOPERATION_NATGATEWAYSNATPIPNEEDVM = "UnsupportedOperation.NatGatewaySnatPipNeedVm" // UNSUPPORTEDOPERATION_NATGATEWAYTYPENOTSUPPORTSNAT = "UnsupportedOperation.NatGatewayTypeNotSupportSNAT" +// UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) CreateNatGatewaySourceIpTranslationNatRuleWithContext(ctx context.Context, request *CreateNatGatewaySourceIpTranslationNatRuleRequest) (response *CreateNatGatewaySourceIpTranslationNatRuleResponse, err error) { if request == nil { request = NewCreateNatGatewaySourceIpTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNatGatewaySourceIpTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewCreateNatGatewaySourceIpTranslationNatRuleResponse() @@ -3075,6 +3713,7 @@ func NewCreateNetDetectRequest() (request *CreateNetDetectRequest) { request = &CreateNetDetectRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNetDetect") return @@ -3088,10 +3727,11 @@ func NewCreateNetDetectResponse() (response *CreateNetDetectResponse) { } // CreateNetDetect -// 本接口(CreateNetDetect)用于创建网络探测。 +// 本接口(CreateNetDetect)用于创建网络探测。 // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" @@ -3099,28 +3739,25 @@ func NewCreateNetDetectResponse() (response *CreateNetDetectResponse) { // INVALIDPARAMETERVALUE_NETDETECTINVPC = "InvalidParameterValue.NetDetectInVpc" // INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CreateNetDetect(request *CreateNetDetectRequest) (response *CreateNetDetectResponse, err error) { - if request == nil { - request = NewCreateNetDetectRequest() - } - - response = NewCreateNetDetectResponse() - err = c.Send(request, response) - return + return c.CreateNetDetectWithContext(context.Background(), request) } // CreateNetDetect -// 本接口(CreateNetDetect)用于创建网络探测。 +// 本接口(CreateNetDetect)用于创建网络探测。 // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" @@ -3128,10 +3765,12 @@ func (c *Client) CreateNetDetect(request *CreateNetDetectRequest) (response *Cre // INVALIDPARAMETERVALUE_NETDETECTINVPC = "InvalidParameterValue.NetDetectInVpc" // INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" @@ -3139,9 +3778,14 @@ func (c *Client) CreateNetDetectWithContext(ctx context.Context, request *Create if request == nil { request = NewCreateNetDetectRequest() } - request.SetContext(ctx) - response = NewCreateNetDetectResponse() + if c.GetCredential() == nil { + return nil, errors.New("CreateNetDetect require credential") + } + + request.SetContext(ctx) + + response = NewCreateNetDetectResponse() err = c.Send(request, response) return } @@ -3150,6 +3794,7 @@ func NewCreateNetworkAclRequest() (request *CreateNetworkAclRequest) { request = &CreateNetworkAclRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNetworkAcl") return @@ -3170,39 +3815,155 @@ func NewCreateNetworkAclResponse() (response *CreateNetworkAclResponse) { // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateNetworkAcl(request *CreateNetworkAclRequest) (response *CreateNetworkAclResponse, err error) { + return c.CreateNetworkAclWithContext(context.Background(), request) +} + +// CreateNetworkAcl +// 本接口(CreateNetworkAcl)用于创建新的网络ACL。 +// +// * 新建的网络ACL的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用ModifyNetworkAclEntries将网络ACL的规则设置为需要的规则。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" +func (c *Client) CreateNetworkAclWithContext(ctx context.Context, request *CreateNetworkAclRequest) (response *CreateNetworkAclResponse, err error) { if request == nil { request = NewCreateNetworkAclRequest() } + if c.GetCredential() == nil { + return nil, errors.New("CreateNetworkAcl require credential") + } + + request.SetContext(ctx) + response = NewCreateNetworkAclResponse() err = c.Send(request, response) return } -// CreateNetworkAcl -// 本接口(CreateNetworkAcl)用于创建新的网络ACL。 +func NewCreateNetworkAclQuintupleEntriesRequest() (request *CreateNetworkAclQuintupleEntriesRequest) { + request = &CreateNetworkAclQuintupleEntriesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "CreateNetworkAclQuintupleEntries") + + return +} + +func NewCreateNetworkAclQuintupleEntriesResponse() (response *CreateNetworkAclQuintupleEntriesResponse) { + response = &CreateNetworkAclQuintupleEntriesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// CreateNetworkAclQuintupleEntries +// 本接口(CreateNetworkAclQuintupleEntries)用于增量网络ACL五元组的入站规则和出站规则。 // -// * 新建的网络ACL的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用ModifyNetworkAclEntries将网络ACL的规则设置为需要的规则。 +// 可能返回的错误码: +// +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) CreateNetworkAclQuintupleEntries(request *CreateNetworkAclQuintupleEntriesRequest) (response *CreateNetworkAclQuintupleEntriesResponse, err error) { + return c.CreateNetworkAclQuintupleEntriesWithContext(context.Background(), request) +} + +// CreateNetworkAclQuintupleEntries +// 本接口(CreateNetworkAclQuintupleEntries)用于增量网络ACL五元组的入站规则和出站规则。 // // 可能返回的错误码: // +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) CreateNetworkAclWithContext(ctx context.Context, request *CreateNetworkAclRequest) (response *CreateNetworkAclResponse, err error) { +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) CreateNetworkAclQuintupleEntriesWithContext(ctx context.Context, request *CreateNetworkAclQuintupleEntriesRequest) (response *CreateNetworkAclQuintupleEntriesResponse, err error) { if request == nil { - request = NewCreateNetworkAclRequest() + request = NewCreateNetworkAclQuintupleEntriesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNetworkAclQuintupleEntries require credential") } + request.SetContext(ctx) - response = NewCreateNetworkAclResponse() + response = NewCreateNetworkAclQuintupleEntriesResponse() err = c.Send(request, response) return } @@ -3211,6 +3972,7 @@ func NewCreateNetworkInterfaceRequest() (request *CreateNetworkInterfaceRequest) request = &CreateNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateNetworkInterface") return @@ -3242,26 +4004,47 @@ func NewCreateNetworkInterfaceResponse() (response *CreateNetworkInterfaceRespon // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateNetworkInterface(request *CreateNetworkInterfaceRequest) (response *CreateNetworkInterfaceResponse, err error) { - if request == nil { - request = NewCreateNetworkInterfaceRequest() - } - - response = NewCreateNetworkInterfaceResponse() - err = c.Send(request, response) - return + return c.CreateNetworkInterfaceWithContext(context.Background(), request) } // CreateNetworkInterface @@ -3283,22 +4066,54 @@ func (c *Client) CreateNetworkInterface(request *CreateNetworkInterfaceRequest) // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_RESERVED = "InvalidParameterValue.Reserved" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateNetworkInterfaceWithContext(ctx context.Context, request *CreateNetworkInterfaceRequest) (response *CreateNetworkInterfaceResponse, err error) { if request == nil { request = NewCreateNetworkInterfaceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateNetworkInterface require credential") + } + request.SetContext(ctx) response = NewCreateNetworkInterfaceResponse() @@ -3310,6 +4125,7 @@ func NewCreateRouteTableRequest() (request *CreateRouteTableRequest) { request = &CreateRouteTableRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateRouteTable") return @@ -3332,20 +4148,38 @@ func NewCreateRouteTableResponse() (response *CreateRouteTableResponse) { // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateRouteTable(request *CreateRouteTableRequest) (response *CreateRouteTableResponse, err error) { - if request == nil { - request = NewCreateRouteTableRequest() - } - - response = NewCreateRouteTableResponse() - err = c.Send(request, response) - return + return c.CreateRouteTableWithContext(context.Background(), request) } // CreateRouteTable @@ -3358,16 +4192,45 @@ func (c *Client) CreateRouteTable(request *CreateRouteTableRequest) (response *C // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateRouteTableWithContext(ctx context.Context, request *CreateRouteTableRequest) (response *CreateRouteTableResponse, err error) { if request == nil { request = NewCreateRouteTableRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateRouteTable require credential") + } + request.SetContext(ctx) response = NewCreateRouteTableResponse() @@ -3379,6 +4242,7 @@ func NewCreateRoutesRequest() (request *CreateRoutesRequest) { request = &CreateRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateRoutes") return @@ -3392,7 +4256,7 @@ func NewCreateRoutesResponse() (response *CreateRoutesResponse) { } // CreateRoutes -// 本接口(CreateRoutes)用于创建路由策略。 +// 本接口(CreateRoutes)用于创建路由策略。 // // * 向指定路由表批量新增路由策略。 // @@ -3415,17 +4279,11 @@ func NewCreateRoutesResponse() (response *CreateRoutesResponse) { // UNSUPPORTEDOPERATION_NORMALSUBNETNOTSUPPORTLOCALGATEWAY = "UnsupportedOperation.NormalSubnetNotSupportLocalGateway" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) CreateRoutes(request *CreateRoutesRequest) (response *CreateRoutesResponse, err error) { - if request == nil { - request = NewCreateRoutesRequest() - } - - response = NewCreateRoutesResponse() - err = c.Send(request, response) - return + return c.CreateRoutesWithContext(context.Background(), request) } // CreateRoutes -// 本接口(CreateRoutes)用于创建路由策略。 +// 本接口(CreateRoutes)用于创建路由策略。 // // * 向指定路由表批量新增路由策略。 // @@ -3451,6 +4309,11 @@ func (c *Client) CreateRoutesWithContext(ctx context.Context, request *CreateRou if request == nil { request = NewCreateRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateRoutes require credential") + } + request.SetContext(ctx) response = NewCreateRoutesResponse() @@ -3462,6 +4325,7 @@ func NewCreateSecurityGroupRequest() (request *CreateSecurityGroupRequest) { request = &CreateSecurityGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateSecurityGroup") return @@ -3486,20 +4350,38 @@ func NewCreateSecurityGroupResponse() (response *CreateSecurityGroupResponse) { // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSecurityGroup(request *CreateSecurityGroupRequest) (response *CreateSecurityGroupResponse, err error) { - if request == nil { - request = NewCreateSecurityGroupRequest() - } - - response = NewCreateSecurityGroupResponse() - err = c.Send(request, response) - return + return c.CreateSecurityGroupWithContext(context.Background(), request) } // CreateSecurityGroup @@ -3514,16 +4396,45 @@ func (c *Client) CreateSecurityGroup(request *CreateSecurityGroupRequest) (respo // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSecurityGroupWithContext(ctx context.Context, request *CreateSecurityGroupRequest) (response *CreateSecurityGroupResponse, err error) { if request == nil { request = NewCreateSecurityGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateSecurityGroup require credential") + } + request.SetContext(ctx) response = NewCreateSecurityGroupResponse() @@ -3535,6 +4446,7 @@ func NewCreateSecurityGroupPoliciesRequest() (request *CreateSecurityGroupPolici request = &CreateSecurityGroupPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateSecurityGroupPolicies") return @@ -3570,35 +4482,38 @@ func NewCreateSecurityGroupPoliciesResponse() (response *CreateSecurityGroupPoli // //
  • Action 字段只允许输入 ACCEPT 或 DROP。
  • // -//
  • CidrBlock, Ipv6CidrBlock, SecurityGroupId, AddressTemplate 四者是排他关系,不允许同时输入,Protocol + Port 和 ServiceTemplate 二者是排他关系,不允许同时输入。
  • +//
  • CidrBlock, Ipv6CidrBlock, SecurityGroupId, AddressTemplate 四者是排他关系,不允许同时输入,Protocol + Port 和 ServiceTemplate 二者是排他关系,不允许同时输入。IPv6CidrBlock和ICMP是排他关系,如需使用,请输入ICMPV6。
  • // -//
  • 一次请求中只能创建单个方向的规则, 如果需要指定索引(PolicyIndex)参数, 多条规则的索引必须一致。
  • +//
  • 一次请求中只能创建单个方向的规则, 如果需要指定索引(PolicyIndex)参数, 多条规则的索引必须一致。如想在规则最前面插入一条,则填0即可,如果想在最后追加,该字段可不填。
  • // // // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // LIMITEXCEEDED_SECURITYGROUPPOLICYSET = "LimitExceeded.SecurityGroupPolicySet" // RESOURCENOTFOUND = "ResourceNotFound" // UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" // UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) CreateSecurityGroupPolicies(request *CreateSecurityGroupPoliciesRequest) (response *CreateSecurityGroupPoliciesResponse, err error) { - if request == nil { - request = NewCreateSecurityGroupPoliciesRequest() - } - - response = NewCreateSecurityGroupPoliciesResponse() - err = c.Send(request, response) - return + return c.CreateSecurityGroupPoliciesWithContext(context.Background(), request) } // CreateSecurityGroupPolicies @@ -3624,31 +4539,45 @@ func (c *Client) CreateSecurityGroupPolicies(request *CreateSecurityGroupPolicie // //
  • Action 字段只允许输入 ACCEPT 或 DROP。
  • // -//
  • CidrBlock, Ipv6CidrBlock, SecurityGroupId, AddressTemplate 四者是排他关系,不允许同时输入,Protocol + Port 和 ServiceTemplate 二者是排他关系,不允许同时输入。
  • +//
  • CidrBlock, Ipv6CidrBlock, SecurityGroupId, AddressTemplate 四者是排他关系,不允许同时输入,Protocol + Port 和 ServiceTemplate 二者是排他关系,不允许同时输入。IPv6CidrBlock和ICMP是排他关系,如需使用,请输入ICMPV6。
  • // -//
  • 一次请求中只能创建单个方向的规则, 如果需要指定索引(PolicyIndex)参数, 多条规则的索引必须一致。
  • +//
  • 一次请求中只能创建单个方向的规则, 如果需要指定索引(PolicyIndex)参数, 多条规则的索引必须一致。如想在规则最前面插入一条,则填0即可,如果想在最后追加,该字段可不填。
  • // // // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // LIMITEXCEEDED_SECURITYGROUPPOLICYSET = "LimitExceeded.SecurityGroupPolicySet" // RESOURCENOTFOUND = "ResourceNotFound" // UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" // UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) CreateSecurityGroupPoliciesWithContext(ctx context.Context, request *CreateSecurityGroupPoliciesRequest) (response *CreateSecurityGroupPoliciesResponse, err error) { if request == nil { request = NewCreateSecurityGroupPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateSecurityGroupPolicies require credential") + } + request.SetContext(ctx) response = NewCreateSecurityGroupPoliciesResponse() @@ -3660,6 +4589,7 @@ func NewCreateSecurityGroupWithPoliciesRequest() (request *CreateSecurityGroupWi request = &CreateSecurityGroupWithPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateSecurityGroupWithPolicies") return @@ -3677,7 +4607,9 @@ func NewCreateSecurityGroupWithPoliciesResponse() (response *CreateSecurityGroup // // * 每个账户下每个地域的每个项目的安全组数量限制。 // -// * 新建的安全组的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用CreateSecurityGroupPolicies将安全组的规则设置为需要的规则。 +// * 新建的安全组的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用CreateSecurityGroupPolicies +// +// 将安全组的规则设置为需要的规则。 // // 安全组规则说明: // @@ -3691,7 +4623,7 @@ func NewCreateSecurityGroupWithPoliciesResponse() (response *CreateSecurityGroup // // * SecurityGroupId字段允许输入与待修改的安全组位于相同项目中的安全组ID,包括这个安全组ID本身,代表安全组下所有云服务器的内网IP。使用这个字段时,这条规则用来匹配网络报文的过程中会随着被使用的这个ID所关联的云服务器变化而变化,不需要重新修改。 // -// * Port字段允许输入一个单独端口号,或者用减号分隔的两个端口号代表端口范围,例如80或8000-8010。只有当Protocol字段是TCP或UDP时,Port字段才被接受,即Protocol字段不是TCP或UDP时,Protocol和Port排他关系,不允许同时输入,否则会接口报错。 +// * Port字段允许输入一个单独端口号,或者用减号分隔的两个端口号代表端口范围,例如80或8000-8010。只有当Protocol字段是TCP或UDP时,Port字段才被接受,即Protocol字段不是TCP或UDP时,Protocol和Port是排他关系,不允许同时输入,否则会接口报错。 // // * Action字段只允许输入ACCEPT或DROP。 // @@ -3701,21 +4633,24 @@ func NewCreateSecurityGroupWithPoliciesResponse() (response *CreateSecurityGroup // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) CreateSecurityGroupWithPolicies(request *CreateSecurityGroupWithPoliciesRequest) (response *CreateSecurityGroupWithPoliciesResponse, err error) { - if request == nil { - request = NewCreateSecurityGroupWithPoliciesRequest() - } - - response = NewCreateSecurityGroupWithPoliciesResponse() - err = c.Send(request, response) - return + return c.CreateSecurityGroupWithPoliciesWithContext(context.Background(), request) } // CreateSecurityGroupWithPolicies @@ -3723,7 +4658,9 @@ func (c *Client) CreateSecurityGroupWithPolicies(request *CreateSecurityGroupWit // // * 每个账户下每个地域的每个项目的安全组数量限制。 // -// * 新建的安全组的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用CreateSecurityGroupPolicies将安全组的规则设置为需要的规则。 +// * 新建的安全组的入站和出站规则默认都是全部拒绝,在创建后通常您需要再调用CreateSecurityGroupPolicies +// +// 将安全组的规则设置为需要的规则。 // // 安全组规则说明: // @@ -3737,7 +4674,7 @@ func (c *Client) CreateSecurityGroupWithPolicies(request *CreateSecurityGroupWit // // * SecurityGroupId字段允许输入与待修改的安全组位于相同项目中的安全组ID,包括这个安全组ID本身,代表安全组下所有云服务器的内网IP。使用这个字段时,这条规则用来匹配网络报文的过程中会随着被使用的这个ID所关联的云服务器变化而变化,不需要重新修改。 // -// * Port字段允许输入一个单独端口号,或者用减号分隔的两个端口号代表端口范围,例如80或8000-8010。只有当Protocol字段是TCP或UDP时,Port字段才被接受,即Protocol字段不是TCP或UDP时,Protocol和Port排他关系,不允许同时输入,否则会接口报错。 +// * Port字段允许输入一个单独端口号,或者用减号分隔的两个端口号代表端口范围,例如80或8000-8010。只有当Protocol字段是TCP或UDP时,Port字段才被接受,即Protocol字段不是TCP或UDP时,Protocol和Port是排他关系,不允许同时输入,否则会接口报错。 // // * Action字段只允许输入ACCEPT或DROP。 // @@ -3747,17 +4684,31 @@ func (c *Client) CreateSecurityGroupWithPolicies(request *CreateSecurityGroupWit // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) CreateSecurityGroupWithPoliciesWithContext(ctx context.Context, request *CreateSecurityGroupWithPoliciesRequest) (response *CreateSecurityGroupWithPoliciesResponse, err error) { if request == nil { request = NewCreateSecurityGroupWithPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateSecurityGroupWithPolicies require credential") + } + request.SetContext(ctx) response = NewCreateSecurityGroupWithPoliciesResponse() @@ -3769,6 +4720,7 @@ func NewCreateServiceTemplateRequest() (request *CreateServiceTemplateRequest) { request = &CreateServiceTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateServiceTemplate") return @@ -3782,35 +4734,40 @@ func NewCreateServiceTemplateResponse() (response *CreateServiceTemplateResponse } // CreateServiceTemplate -// 本接口(CreateServiceTemplate)用于创建协议端口模板 +// 本接口(CreateServiceTemplate)用于创建协议端口模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) CreateServiceTemplate(request *CreateServiceTemplateRequest) (response *CreateServiceTemplateResponse, err error) { - if request == nil { - request = NewCreateServiceTemplateRequest() - } - - response = NewCreateServiceTemplateResponse() - err = c.Send(request, response) - return + return c.CreateServiceTemplateWithContext(context.Background(), request) } // CreateServiceTemplate -// 本接口(CreateServiceTemplate)用于创建协议端口模板 +// 本接口(CreateServiceTemplate)用于创建协议端口模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" func (c *Client) CreateServiceTemplateWithContext(ctx context.Context, request *CreateServiceTemplateRequest) (response *CreateServiceTemplateResponse, err error) { if request == nil { request = NewCreateServiceTemplateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateServiceTemplate require credential") + } + request.SetContext(ctx) response = NewCreateServiceTemplateResponse() @@ -3822,6 +4779,7 @@ func NewCreateServiceTemplateGroupRequest() (request *CreateServiceTemplateGroup request = &CreateServiceTemplateGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateServiceTemplateGroup") return @@ -3835,7 +4793,7 @@ func NewCreateServiceTemplateGroupResponse() (response *CreateServiceTemplateGro } // CreateServiceTemplateGroup -// 本接口(CreateServiceTemplateGroup)用于创建协议端口模板集合 +// 本接口(CreateServiceTemplateGroup)用于创建协议端口模板集合。 // // 可能返回的错误码: // @@ -3845,32 +4803,94 @@ func NewCreateServiceTemplateGroupResponse() (response *CreateServiceTemplateGro // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) CreateServiceTemplateGroup(request *CreateServiceTemplateGroupRequest) (response *CreateServiceTemplateGroupResponse, err error) { + return c.CreateServiceTemplateGroupWithContext(context.Background(), request) +} + +// CreateServiceTemplateGroup +// 本接口(CreateServiceTemplateGroup)用于创建协议端口模板集合。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) CreateServiceTemplateGroupWithContext(ctx context.Context, request *CreateServiceTemplateGroupRequest) (response *CreateServiceTemplateGroupResponse, err error) { if request == nil { request = NewCreateServiceTemplateGroupRequest() } + if c.GetCredential() == nil { + return nil, errors.New("CreateServiceTemplateGroup require credential") + } + + request.SetContext(ctx) + response = NewCreateServiceTemplateGroupResponse() err = c.Send(request, response) return } -// CreateServiceTemplateGroup -// 本接口(CreateServiceTemplateGroup)用于创建协议端口模板集合 +func NewCreateSnapshotPoliciesRequest() (request *CreateSnapshotPoliciesRequest) { + request = &CreateSnapshotPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "CreateSnapshotPolicies") + + return +} + +func NewCreateSnapshotPoliciesResponse() (response *CreateSnapshotPoliciesResponse) { + response = &CreateSnapshotPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// CreateSnapshotPolicies +// 本接口(CreateSnapshotPolicies)用于创建快照策略。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" -func (c *Client) CreateServiceTemplateGroupWithContext(ctx context.Context, request *CreateServiceTemplateGroupRequest) (response *CreateServiceTemplateGroupResponse, err error) { +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) CreateSnapshotPolicies(request *CreateSnapshotPoliciesRequest) (response *CreateSnapshotPoliciesResponse, err error) { + return c.CreateSnapshotPoliciesWithContext(context.Background(), request) +} + +// CreateSnapshotPolicies +// 本接口(CreateSnapshotPolicies)用于创建快照策略。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) CreateSnapshotPoliciesWithContext(ctx context.Context, request *CreateSnapshotPoliciesRequest) (response *CreateSnapshotPoliciesResponse, err error) { if request == nil { - request = NewCreateServiceTemplateGroupRequest() + request = NewCreateSnapshotPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateSnapshotPolicies require credential") } + request.SetContext(ctx) - response = NewCreateServiceTemplateGroupResponse() + response = NewCreateSnapshotPoliciesResponse() err = c.Send(request, response) return } @@ -3879,6 +4899,7 @@ func NewCreateSubnetRequest() (request *CreateSubnetRequest) { request = &CreateSubnetRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateSubnet") return @@ -3892,7 +4913,7 @@ func NewCreateSubnetResponse() (response *CreateSubnetResponse) { } // CreateSubnet -// 本接口(CreateSubnet)用于创建子网。 +// 本接口(CreateSubnet)用于创建子网。 // // * 创建子网前必须创建好 VPC。 // @@ -3908,32 +4929,53 @@ func NewCreateSubnetResponse() (response *CreateSubnetResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONECONFLICT = "InvalidParameterValue.ZoneConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DCGATEWAYSNOTFOUNDINVPC = "UnsupportedOperation.DcGatewaysNotFoundInVpc" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSubnet(request *CreateSubnetRequest) (response *CreateSubnetResponse, err error) { - if request == nil { - request = NewCreateSubnetRequest() - } - - response = NewCreateSubnetResponse() - err = c.Send(request, response) - return + return c.CreateSubnetWithContext(context.Background(), request) } // CreateSubnet -// 本接口(CreateSubnet)用于创建子网。 +// 本接口(CreateSubnet)用于创建子网。 // // * 创建子网前必须创建好 VPC。 // @@ -3949,27 +4991,59 @@ func (c *Client) CreateSubnet(request *CreateSubnetRequest) (response *CreateSub // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONECONFLICT = "InvalidParameterValue.ZoneConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DCGATEWAYSNOTFOUNDINVPC = "UnsupportedOperation.DcGatewaysNotFoundInVpc" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSubnetWithContext(ctx context.Context, request *CreateSubnetRequest) (response *CreateSubnetResponse, err error) { if request == nil { request = NewCreateSubnetRequest() } - request.SetContext(ctx) - response = NewCreateSubnetResponse() + if c.GetCredential() == nil { + return nil, errors.New("CreateSubnet require credential") + } + + request.SetContext(ctx) + + response = NewCreateSubnetResponse() err = c.Send(request, response) return } @@ -3978,6 +5052,7 @@ func NewCreateSubnetsRequest() (request *CreateSubnetsRequest) { request = &CreateSubnetsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateSubnets") return @@ -3991,7 +5066,7 @@ func NewCreateSubnetsResponse() (response *CreateSubnetsResponse) { } // CreateSubnets -// 本接口(CreateSubnets)用于批量创建子网。 +// 本接口(CreateSubnets)用于批量创建子网。 // // * 创建子网前必须创建好 VPC。 // @@ -4012,25 +5087,42 @@ func NewCreateSubnetsResponse() (response *CreateSubnetsResponse) { // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONECONFLICT = "InvalidParameterValue.ZoneConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DCGATEWAYSNOTFOUNDINVPC = "UnsupportedOperation.DcGatewaysNotFoundInVpc" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSubnets(request *CreateSubnetsRequest) (response *CreateSubnetsResponse, err error) { - if request == nil { - request = NewCreateSubnetsRequest() - } - - response = NewCreateSubnetsResponse() - err = c.Send(request, response) - return + return c.CreateSubnetsWithContext(context.Background(), request) } // CreateSubnets -// 本接口(CreateSubnets)用于批量创建子网。 +// 本接口(CreateSubnets)用于批量创建子网。 // // * 创建子网前必须创建好 VPC。 // @@ -4051,17 +5143,45 @@ func (c *Client) CreateSubnets(request *CreateSubnetsRequest) (response *CreateS // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" // INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_ZONECONFLICT = "InvalidParameterValue.ZoneConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DCGATEWAYSNOTFOUNDINVPC = "UnsupportedOperation.DcGatewaysNotFoundInVpc" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateSubnetsWithContext(ctx context.Context, request *CreateSubnetsRequest) (response *CreateSubnetsResponse, err error) { if request == nil { request = NewCreateSubnetsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateSubnets require credential") + } + request.SetContext(ctx) response = NewCreateSubnetsResponse() @@ -4069,10 +5189,68 @@ func (c *Client) CreateSubnetsWithContext(ctx context.Context, request *CreateSu return } +func NewCreateTrafficPackagesRequest() (request *CreateTrafficPackagesRequest) { + request = &CreateTrafficPackagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "CreateTrafficPackages") + + return +} + +func NewCreateTrafficPackagesResponse() (response *CreateTrafficPackagesResponse) { + response = &CreateTrafficPackagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// CreateTrafficPackages +// 本接口 (CreateTrafficPackages) 用于创建共享流量包。 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// LIMITEXCEEDED_TRAFFICPACKAGEQUOTA = "LimitExceeded.TrafficPackageQuota" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" +func (c *Client) CreateTrafficPackages(request *CreateTrafficPackagesRequest) (response *CreateTrafficPackagesResponse, err error) { + return c.CreateTrafficPackagesWithContext(context.Background(), request) +} + +// CreateTrafficPackages +// 本接口 (CreateTrafficPackages) 用于创建共享流量包。 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// LIMITEXCEEDED_TRAFFICPACKAGEQUOTA = "LimitExceeded.TrafficPackageQuota" +// UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" +func (c *Client) CreateTrafficPackagesWithContext(ctx context.Context, request *CreateTrafficPackagesRequest) (response *CreateTrafficPackagesResponse, err error) { + if request == nil { + request = NewCreateTrafficPackagesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateTrafficPackages require credential") + } + + request.SetContext(ctx) + + response = NewCreateTrafficPackagesResponse() + err = c.Send(request, response) + return +} + func NewCreateVpcRequest() (request *CreateVpcRequest) { request = &CreateVpcRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpc") return @@ -4086,9 +5264,9 @@ func NewCreateVpcResponse() (response *CreateVpcResponse) { } // CreateVpc -// 本接口(CreateVpc)用于创建私有网络(VPC)。 +// 本接口(CreateVpc)用于创建私有网络(VPC)。 // -// * 用户可以创建的最小网段子网掩码为28(有16个IP地址),最大网段子网掩码为16(65,536个IP地址),如果需要规划VPC网段请参见[网络规划](https://cloud.tencent.com/document/product/215/30313)。 +// * 用户可以创建的最小网段子网掩码为28(有16个IP地址),10.0.0.0/12,172.16.0.0/12最大网段子网掩码为12(1,048,576个IP地址),192.168.0.0/16最大网段子网掩码为16(65,536个IP地址)如果需要规划VPC网段请参见[网络规划](https://cloud.tencent.com/document/product/215/30313)。 // // * 同一个地域能创建的VPC资源个数也是有限制的,详见 VPC使用限制,如果需要申请更多资源,请提交[工单申请](https://console.cloud.tencent.com/workorder/category)。 // @@ -4099,25 +5277,46 @@ func NewCreateVpcResponse() (response *CreateVpcResponse) { // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_ENABLEMULTICAST = "UnsupportedOperation.EnableMulticast" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateVpc(request *CreateVpcRequest) (response *CreateVpcResponse, err error) { - if request == nil { - request = NewCreateVpcRequest() - } - - response = NewCreateVpcResponse() - err = c.Send(request, response) - return + return c.CreateVpcWithContext(context.Background(), request) } // CreateVpc -// 本接口(CreateVpc)用于创建私有网络(VPC)。 +// 本接口(CreateVpc)用于创建私有网络(VPC)。 // -// * 用户可以创建的最小网段子网掩码为28(有16个IP地址),最大网段子网掩码为16(65,536个IP地址),如果需要规划VPC网段请参见[网络规划](https://cloud.tencent.com/document/product/215/30313)。 +// * 用户可以创建的最小网段子网掩码为28(有16个IP地址),10.0.0.0/12,172.16.0.0/12最大网段子网掩码为12(1,048,576个IP地址),192.168.0.0/16最大网段子网掩码为16(65,536个IP地址)如果需要规划VPC网段请参见[网络规划](https://cloud.tencent.com/document/product/215/30313)。 // // * 同一个地域能创建的VPC资源个数也是有限制的,详见 VPC使用限制,如果需要申请更多资源,请提交[工单申请](https://console.cloud.tencent.com/workorder/category)。 // @@ -4128,15 +5327,47 @@ func (c *Client) CreateVpc(request *CreateVpcRequest) (response *CreateVpcRespon // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINSUFFICIENT = "ResourceInsufficient" // RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_ENABLEMULTICAST = "UnsupportedOperation.EnableMulticast" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateVpcWithContext(ctx context.Context, request *CreateVpcRequest) (response *CreateVpcResponse, err error) { if request == nil { request = NewCreateVpcRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpc require credential") + } + request.SetContext(ctx) response = NewCreateVpcResponse() @@ -4148,6 +5379,7 @@ func NewCreateVpcEndPointRequest() (request *CreateVpcEndPointRequest) { request = &CreateVpcEndPointRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpcEndPoint") return @@ -4161,7 +5393,7 @@ func NewCreateVpcEndPointResponse() (response *CreateVpcEndPointResponse) { } // CreateVpcEndPoint -// 创建终端节点。 +// 本接口(CreateVpcEndPoint)用于创建终端节点。 // // 可能返回的错误码: // @@ -4174,24 +5406,22 @@ func NewCreateVpcEndPointResponse() (response *CreateVpcEndPointResponse) { // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // RESOURCEUNAVAILABLE = "ResourceUnavailable" // RESOURCEUNAVAILABLE_SERVICEWHITELISTNOTADDED = "ResourceUnavailable.ServiceWhiteListNotAdded" +// UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION_ENDPOINTSERVICE = "UnsupportedOperation.EndPointService" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" +// UNSUPPORTEDOPERATION_SNATSUBNET = "UnsupportedOperation.SnatSubnet" // UNSUPPORTEDOPERATION_SPECIALENDPOINTSERVICE = "UnsupportedOperation.SpecialEndPointService" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CreateVpcEndPoint(request *CreateVpcEndPointRequest) (response *CreateVpcEndPointResponse, err error) { - if request == nil { - request = NewCreateVpcEndPointRequest() - } - - response = NewCreateVpcEndPointResponse() - err = c.Send(request, response) - return + return c.CreateVpcEndPointWithContext(context.Background(), request) } // CreateVpcEndPoint -// 创建终端节点。 +// 本接口(CreateVpcEndPoint)用于创建终端节点。 // // 可能返回的错误码: // @@ -4204,16 +5434,25 @@ func (c *Client) CreateVpcEndPoint(request *CreateVpcEndPointRequest) (response // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCEINSUFFICIENT = "ResourceInsufficient" +// RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" // RESOURCENOTFOUND = "ResourceNotFound" // RESOURCEUNAVAILABLE = "ResourceUnavailable" // RESOURCEUNAVAILABLE_SERVICEWHITELISTNOTADDED = "ResourceUnavailable.ServiceWhiteListNotAdded" +// UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // UNSUPPORTEDOPERATION_ENDPOINTSERVICE = "UnsupportedOperation.EndPointService" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" +// UNSUPPORTEDOPERATION_SNATSUBNET = "UnsupportedOperation.SnatSubnet" // UNSUPPORTEDOPERATION_SPECIALENDPOINTSERVICE = "UnsupportedOperation.SpecialEndPointService" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CreateVpcEndPointWithContext(ctx context.Context, request *CreateVpcEndPointRequest) (response *CreateVpcEndPointResponse, err error) { if request == nil { request = NewCreateVpcEndPointRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpcEndPoint require credential") + } + request.SetContext(ctx) response = NewCreateVpcEndPointResponse() @@ -4225,6 +5464,7 @@ func NewCreateVpcEndPointServiceRequest() (request *CreateVpcEndPointServiceRequ request = &CreateVpcEndPointServiceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpcEndPointService") return @@ -4238,10 +5478,11 @@ func NewCreateVpcEndPointServiceResponse() (response *CreateVpcEndPointServiceRe } // CreateVpcEndPointService -// 创建终端节点服务。 +// 本接口(CreateVpcEndPointService)用于创建终端节点服务。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" @@ -4250,22 +5491,21 @@ func NewCreateVpcEndPointServiceResponse() (response *CreateVpcEndPointServiceRe // RESOURCENOTFOUND = "ResourceNotFound" // RESOURCEUNAVAILABLE = "ResourceUnavailable" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch" +// UNSUPPORTEDOPERATION_NOTMATCHTARGETSERVICE = "UnsupportedOperation.NotMatchTargetService" +// UNSUPPORTEDOPERATION_RESOURCEISINVALIDSTATE = "UnsupportedOperation.ResourceIsInvalidState" +// UNSUPPORTEDOPERATION_ROLENOTFOUND = "UnsupportedOperation.RoleNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CreateVpcEndPointService(request *CreateVpcEndPointServiceRequest) (response *CreateVpcEndPointServiceResponse, err error) { - if request == nil { - request = NewCreateVpcEndPointServiceRequest() - } - - response = NewCreateVpcEndPointServiceResponse() - err = c.Send(request, response) - return + return c.CreateVpcEndPointServiceWithContext(context.Background(), request) } // CreateVpcEndPointService -// 创建终端节点服务。 +// 本接口(CreateVpcEndPointService)用于创建终端节点服务。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" @@ -4274,11 +5514,20 @@ func (c *Client) CreateVpcEndPointService(request *CreateVpcEndPointServiceReque // RESOURCENOTFOUND = "ResourceNotFound" // RESOURCEUNAVAILABLE = "ResourceUnavailable" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch" +// UNSUPPORTEDOPERATION_NOTMATCHTARGETSERVICE = "UnsupportedOperation.NotMatchTargetService" +// UNSUPPORTEDOPERATION_RESOURCEISINVALIDSTATE = "UnsupportedOperation.ResourceIsInvalidState" +// UNSUPPORTEDOPERATION_ROLENOTFOUND = "UnsupportedOperation.RoleNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) CreateVpcEndPointServiceWithContext(ctx context.Context, request *CreateVpcEndPointServiceRequest) (response *CreateVpcEndPointServiceResponse, err error) { if request == nil { request = NewCreateVpcEndPointServiceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpcEndPointService require credential") + } + request.SetContext(ctx) response = NewCreateVpcEndPointServiceResponse() @@ -4290,6 +5539,7 @@ func NewCreateVpcEndPointServiceWhiteListRequest() (request *CreateVpcEndPointSe request = &CreateVpcEndPointServiceWhiteListRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpcEndPointServiceWhiteList") return @@ -4303,40 +5553,120 @@ func NewCreateVpcEndPointServiceWhiteListResponse() (response *CreateVpcEndPoint } // CreateVpcEndPointServiceWhiteList -// 创建终端服务白名单。 +// 本接口(CreateVpcEndPointServiceWhiteList)创建终端服务白名单。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" func (c *Client) CreateVpcEndPointServiceWhiteList(request *CreateVpcEndPointServiceWhiteListRequest) (response *CreateVpcEndPointServiceWhiteListResponse, err error) { + return c.CreateVpcEndPointServiceWhiteListWithContext(context.Background(), request) +} + +// CreateVpcEndPointServiceWhiteList +// 本接口(CreateVpcEndPointServiceWhiteList)创建终端服务白名单。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) CreateVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *CreateVpcEndPointServiceWhiteListRequest) (response *CreateVpcEndPointServiceWhiteListResponse, err error) { if request == nil { request = NewCreateVpcEndPointServiceWhiteListRequest() } + if c.GetCredential() == nil { + return nil, errors.New("CreateVpcEndPointServiceWhiteList require credential") + } + + request.SetContext(ctx) + response = NewCreateVpcEndPointServiceWhiteListResponse() err = c.Send(request, response) return } -// CreateVpcEndPointServiceWhiteList -// 创建终端服务白名单。 +func NewCreateVpcPeeringConnectionRequest() (request *CreateVpcPeeringConnectionRequest) { + request = &CreateVpcPeeringConnectionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpcPeeringConnection") + + return +} + +func NewCreateVpcPeeringConnectionResponse() (response *CreateVpcPeeringConnectionResponse) { + response = &CreateVpcPeeringConnectionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// CreateVpcPeeringConnection +// 本接口(CreateVpcPeeringConnection)用于创建私有网络对等连接。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_DUPLICATEREGION = "InvalidParameterValue.DuplicateRegion" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_VPCPEERAVALIMITEXCEEDED = "LimitExceeded.VpcPeerAvaLimitExceeded" +// LIMITEXCEEDED_VPCPEERTOTALLIMITEXCEEDED = "LimitExceeded.VpcPeerTotalLimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" -func (c *Client) CreateVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *CreateVpcEndPointServiceWhiteListRequest) (response *CreateVpcEndPointServiceWhiteListResponse, err error) { +// UNAUTHORIZEDOPERATION_VPCPEERCIDRCONFLICT = "UnauthorizedOperation.VpcPeerCidrConflict" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" +// UNSUPPORTEDOPERATION_VPCPEERALREADYEXIST = "UnsupportedOperation.VpcPeerAlreadyExist" +// UNSUPPORTEDOPERATION_VPCPEERCIDRCONFLICT = "UnsupportedOperation.VpcPeerCidrConflict" +func (c *Client) CreateVpcPeeringConnection(request *CreateVpcPeeringConnectionRequest) (response *CreateVpcPeeringConnectionResponse, err error) { + return c.CreateVpcPeeringConnectionWithContext(context.Background(), request) +} + +// CreateVpcPeeringConnection +// 本接口(CreateVpcPeeringConnection)用于创建私有网络对等连接。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_DUPLICATEREGION = "InvalidParameterValue.DuplicateRegion" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_VPCPEERAVALIMITEXCEEDED = "LimitExceeded.VpcPeerAvaLimitExceeded" +// LIMITEXCEEDED_VPCPEERTOTALLIMITEXCEEDED = "LimitExceeded.VpcPeerTotalLimitExceeded" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION_VPCPEERCIDRCONFLICT = "UnauthorizedOperation.VpcPeerCidrConflict" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" +// UNSUPPORTEDOPERATION_VPCPEERALREADYEXIST = "UnsupportedOperation.VpcPeerAlreadyExist" +// UNSUPPORTEDOPERATION_VPCPEERCIDRCONFLICT = "UnsupportedOperation.VpcPeerCidrConflict" +func (c *Client) CreateVpcPeeringConnectionWithContext(ctx context.Context, request *CreateVpcPeeringConnectionRequest) (response *CreateVpcPeeringConnectionResponse, err error) { if request == nil { - request = NewCreateVpcEndPointServiceWhiteListRequest() + request = NewCreateVpcPeeringConnectionRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpcPeeringConnection require credential") } + request.SetContext(ctx) - response = NewCreateVpcEndPointServiceWhiteListResponse() + response = NewCreateVpcPeeringConnectionResponse() err = c.Send(request, response) return } @@ -4345,6 +5675,7 @@ func NewCreateVpnConnectionRequest() (request *CreateVpnConnectionRequest) { request = &CreateVpnConnectionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpnConnection") return @@ -4367,24 +5698,42 @@ func NewCreateVpnConnectionResponse() (response *CreateVpnConnectionResponse) { // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" // INVALIDPARAMETERVALUE_VPNCONNHEALTHCHECKIPCONFLICT = "InvalidParameterValue.VpnConnHealthCheckIpConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateVpnConnection(request *CreateVpnConnectionRequest) (response *CreateVpnConnectionResponse, err error) { - if request == nil { - request = NewCreateVpnConnectionRequest() - } - - response = NewCreateVpnConnectionResponse() - err = c.Send(request, response) - return + return c.CreateVpnConnectionWithContext(context.Background(), request) } // CreateVpnConnection @@ -4397,20 +5746,49 @@ func (c *Client) CreateVpnConnection(request *CreateVpnConnectionRequest) (respo // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" // INVALIDPARAMETERVALUE_VPNCONNHEALTHCHECKIPCONFLICT = "InvalidParameterValue.VpnConnHealthCheckIpConflict" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" func (c *Client) CreateVpnConnectionWithContext(ctx context.Context, request *CreateVpnConnectionRequest) (response *CreateVpnConnectionResponse, err error) { if request == nil { request = NewCreateVpnConnectionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpnConnection require credential") + } + request.SetContext(ctx) response = NewCreateVpnConnectionResponse() @@ -4422,6 +5800,7 @@ func NewCreateVpnGatewayRequest() (request *CreateVpnGatewayRequest) { request = &CreateVpnGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpnGateway") return @@ -4440,23 +5819,43 @@ func NewCreateVpnGatewayResponse() (response *CreateVpnGatewayResponse) { // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" // INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" // INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" +// UNSUPPORTEDOPERATION_VPNGWVPCIDMUSTHAVE = "UnsupportedOperation.VpnGwVpcIdMustHave" func (c *Client) CreateVpnGateway(request *CreateVpnGatewayRequest) (response *CreateVpnGatewayResponse, err error) { - if request == nil { - request = NewCreateVpnGatewayRequest() - } - - response = NewCreateVpnGatewayResponse() - err = c.Send(request, response) - return + return c.CreateVpnGatewayWithContext(context.Background(), request) } // CreateVpnGateway @@ -4465,19 +5864,50 @@ func (c *Client) CreateVpnGateway(request *CreateVpnGatewayRequest) (response *C // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" +// INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" +// INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" +// INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" +// INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" +// INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" +// INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" +// INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" +// INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" +// INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" +// INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" +// INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" // INVALIDVPCID_MALFORMED = "InvalidVpcId.Malformed" // INVALIDVPCID_NOTFOUND = "InvalidVpcId.NotFound" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" +// LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" +// LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" +// LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" +// LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" +// LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" +// UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" +// UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" +// UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" +// UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" +// UNSUPPORTEDOPERATION_VPNGWVPCIDMUSTHAVE = "UnsupportedOperation.VpnGwVpcIdMustHave" func (c *Client) CreateVpnGatewayWithContext(ctx context.Context, request *CreateVpnGatewayRequest) (response *CreateVpnGatewayResponse, err error) { if request == nil { request = NewCreateVpnGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpnGateway require credential") + } + request.SetContext(ctx) response = NewCreateVpnGatewayResponse() @@ -4489,6 +5919,7 @@ func NewCreateVpnGatewayRoutesRequest() (request *CreateVpnGatewayRoutesRequest) request = &CreateVpnGatewayRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpnGatewayRoutes") return @@ -4508,6 +5939,7 @@ func NewCreateVpnGatewayRoutesResponse() (response *CreateVpnGatewayRoutesRespon // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -4515,13 +5947,7 @@ func NewCreateVpnGatewayRoutesResponse() (response *CreateVpnGatewayRoutesRespon // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) CreateVpnGatewayRoutes(request *CreateVpnGatewayRoutesRequest) (response *CreateVpnGatewayRoutesResponse, err error) { - if request == nil { - request = NewCreateVpnGatewayRoutesRequest() - } - - response = NewCreateVpnGatewayRoutesResponse() - err = c.Send(request, response) - return + return c.CreateVpnGatewayRoutesWithContext(context.Background(), request) } // CreateVpnGatewayRoutes @@ -4531,6 +5957,7 @@ func (c *Client) CreateVpnGatewayRoutes(request *CreateVpnGatewayRoutesRequest) // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -4541,6 +5968,11 @@ func (c *Client) CreateVpnGatewayRoutesWithContext(ctx context.Context, request if request == nil { request = NewCreateVpnGatewayRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpnGatewayRoutes require credential") + } + request.SetContext(ctx) response = NewCreateVpnGatewayRoutesResponse() @@ -4548,95 +5980,210 @@ func (c *Client) CreateVpnGatewayRoutesWithContext(ctx context.Context, request return } -func NewDeleteAddressTemplateRequest() (request *DeleteAddressTemplateRequest) { - request = &DeleteAddressTemplateRequest{ +func NewCreateVpnGatewaySslClientRequest() (request *CreateVpnGatewaySslClientRequest) { + request = &CreateVpnGatewaySslClientRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DeleteAddressTemplate") + + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpnGatewaySslClient") return } -func NewDeleteAddressTemplateResponse() (response *DeleteAddressTemplateResponse) { - response = &DeleteAddressTemplateResponse{ +func NewCreateVpnGatewaySslClientResponse() (response *CreateVpnGatewaySslClientResponse) { + response = &CreateVpnGatewaySslClientResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DeleteAddressTemplate -// 本接口(DeleteAddressTemplate)用于删除IP地址模板 +// CreateVpnGatewaySslClient +// 创建SSL-VPN-CLIENT // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" -func (c *Client) DeleteAddressTemplate(request *DeleteAddressTemplateRequest) (response *DeleteAddressTemplateResponse, err error) { - if request == nil { - request = NewDeleteAddressTemplateRequest() - } - - response = NewDeleteAddressTemplateResponse() - err = c.Send(request, response) - return +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +func (c *Client) CreateVpnGatewaySslClient(request *CreateVpnGatewaySslClientRequest) (response *CreateVpnGatewaySslClientResponse, err error) { + return c.CreateVpnGatewaySslClientWithContext(context.Background(), request) } -// DeleteAddressTemplate -// 本接口(DeleteAddressTemplate)用于删除IP地址模板 +// CreateVpnGatewaySslClient +// 创建SSL-VPN-CLIENT // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" -func (c *Client) DeleteAddressTemplateWithContext(ctx context.Context, request *DeleteAddressTemplateRequest) (response *DeleteAddressTemplateResponse, err error) { +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" +func (c *Client) CreateVpnGatewaySslClientWithContext(ctx context.Context, request *CreateVpnGatewaySslClientRequest) (response *CreateVpnGatewaySslClientResponse, err error) { if request == nil { - request = NewDeleteAddressTemplateRequest() + request = NewCreateVpnGatewaySslClientRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("CreateVpnGatewaySslClient require credential") } + request.SetContext(ctx) - response = NewDeleteAddressTemplateResponse() + response = NewCreateVpnGatewaySslClientResponse() err = c.Send(request, response) return } -func NewDeleteAddressTemplateGroupRequest() (request *DeleteAddressTemplateGroupRequest) { - request = &DeleteAddressTemplateGroupRequest{ +func NewCreateVpnGatewaySslServerRequest() (request *CreateVpnGatewaySslServerRequest) { + request = &CreateVpnGatewaySslServerRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DeleteAddressTemplateGroup") + + request.Init().WithApiInfo("vpc", APIVersion, "CreateVpnGatewaySslServer") return } -func NewDeleteAddressTemplateGroupResponse() (response *DeleteAddressTemplateGroupResponse) { - response = &DeleteAddressTemplateGroupResponse{ +func NewCreateVpnGatewaySslServerResponse() (response *CreateVpnGatewaySslServerResponse) { + response = &CreateVpnGatewaySslServerResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DeleteAddressTemplateGroup -// 本接口(DeleteAddressTemplateGroup)用于删除IP地址模板集合 +// CreateVpnGatewaySslServer +// 本接口(CreateVpnGatewaySslServer)用于创建SSL-VPN Server端。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_CIDRNOTINSSLVPNVPC = "InvalidParameterValue.CidrNotInSslVpnVpc" +// INVALIDPARAMETERVALUE_SSLCCNVPNSERVERCIDRCONFLICT = "InvalidParameterValue.SslCcnVpnServerCidrConflict" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" -func (c *Client) DeleteAddressTemplateGroup(request *DeleteAddressTemplateGroupRequest) (response *DeleteAddressTemplateGroupResponse, err error) { - if request == nil { - request = NewDeleteAddressTemplateGroupRequest() +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) CreateVpnGatewaySslServer(request *CreateVpnGatewaySslServerRequest) (response *CreateVpnGatewaySslServerResponse, err error) { + return c.CreateVpnGatewaySslServerWithContext(context.Background(), request) +} + +// CreateVpnGatewaySslServer +// 本接口(CreateVpnGatewaySslServer)用于创建SSL-VPN Server端。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_CIDRNOTINSSLVPNVPC = "InvalidParameterValue.CidrNotInSslVpnVpc" +// INVALIDPARAMETERVALUE_SSLCCNVPNSERVERCIDRCONFLICT = "InvalidParameterValue.SslCcnVpnServerCidrConflict" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) CreateVpnGatewaySslServerWithContext(ctx context.Context, request *CreateVpnGatewaySslServerRequest) (response *CreateVpnGatewaySslServerResponse, err error) { + if request == nil { + request = NewCreateVpnGatewaySslServerRequest() } - response = NewDeleteAddressTemplateGroupResponse() + if c.GetCredential() == nil { + return nil, errors.New("CreateVpnGatewaySslServer require credential") + } + + request.SetContext(ctx) + + response = NewCreateVpnGatewaySslServerResponse() + err = c.Send(request, response) + return +} + +func NewDeleteAddressTemplateRequest() (request *DeleteAddressTemplateRequest) { + request = &DeleteAddressTemplateRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteAddressTemplate") + + return +} + +func NewDeleteAddressTemplateResponse() (response *DeleteAddressTemplateResponse) { + response = &DeleteAddressTemplateResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteAddressTemplate +// 本接口(DeleteAddressTemplate)用于删除IP地址模板。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) DeleteAddressTemplate(request *DeleteAddressTemplateRequest) (response *DeleteAddressTemplateResponse, err error) { + return c.DeleteAddressTemplateWithContext(context.Background(), request) +} + +// DeleteAddressTemplate +// 本接口(DeleteAddressTemplate)用于删除IP地址模板。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) DeleteAddressTemplateWithContext(ctx context.Context, request *DeleteAddressTemplateRequest) (response *DeleteAddressTemplateResponse, err error) { + if request == nil { + request = NewDeleteAddressTemplateRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteAddressTemplate require credential") + } + + request.SetContext(ctx) + + response = NewDeleteAddressTemplateResponse() err = c.Send(request, response) return } +func NewDeleteAddressTemplateGroupRequest() (request *DeleteAddressTemplateGroupRequest) { + request = &DeleteAddressTemplateGroupRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteAddressTemplateGroup") + + return +} + +func NewDeleteAddressTemplateGroupResponse() (response *DeleteAddressTemplateGroupResponse) { + response = &DeleteAddressTemplateGroupResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteAddressTemplateGroup +// 本接口(DeleteAddressTemplateGroup)用于删除IP地址模板集合。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) DeleteAddressTemplateGroup(request *DeleteAddressTemplateGroupRequest) (response *DeleteAddressTemplateGroupResponse, err error) { + return c.DeleteAddressTemplateGroupWithContext(context.Background(), request) +} + // DeleteAddressTemplateGroup -// 本接口(DeleteAddressTemplateGroup)用于删除IP地址模板集合 +// 本接口(DeleteAddressTemplateGroup)用于删除IP地址模板集合。 // // 可能返回的错误码: // @@ -4647,6 +6194,11 @@ func (c *Client) DeleteAddressTemplateGroupWithContext(ctx context.Context, requ if request == nil { request = NewDeleteAddressTemplateGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteAddressTemplateGroup require credential") + } + request.SetContext(ctx) response = NewDeleteAddressTemplateGroupResponse() @@ -4658,6 +6210,7 @@ func NewDeleteAssistantCidrRequest() (request *DeleteAssistantCidrRequest) { request = &DeleteAssistantCidrRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteAssistantCidr") return @@ -4671,7 +6224,7 @@ func NewDeleteAssistantCidrResponse() (response *DeleteAssistantCidrResponse) { } // DeleteAssistantCidr -// 本接口(DeleteAssistantCidr)用于删除辅助CIDR。(接口灰度中,如需使用请提工单。) +// 本接口(DeleteAssistantCidr)用于删除辅助CIDR。 // // 可能返回的错误码: // @@ -4682,17 +6235,11 @@ func NewDeleteAssistantCidrResponse() (response *DeleteAssistantCidrResponse) { // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteAssistantCidr(request *DeleteAssistantCidrRequest) (response *DeleteAssistantCidrResponse, err error) { - if request == nil { - request = NewDeleteAssistantCidrRequest() - } - - response = NewDeleteAssistantCidrResponse() - err = c.Send(request, response) - return + return c.DeleteAssistantCidrWithContext(context.Background(), request) } // DeleteAssistantCidr -// 本接口(DeleteAssistantCidr)用于删除辅助CIDR。(接口灰度中,如需使用请提工单。) +// 本接口(DeleteAssistantCidr)用于删除辅助CIDR。 // // 可能返回的错误码: // @@ -4706,6 +6253,11 @@ func (c *Client) DeleteAssistantCidrWithContext(ctx context.Context, request *De if request == nil { request = NewDeleteAssistantCidrRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteAssistantCidr require credential") + } + request.SetContext(ctx) response = NewDeleteAssistantCidrResponse() @@ -4717,6 +6269,7 @@ func NewDeleteBandwidthPackageRequest() (request *DeleteBandwidthPackageRequest) request = &DeleteBandwidthPackageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteBandwidthPackage") return @@ -4734,20 +6287,18 @@ func NewDeleteBandwidthPackageResponse() (response *DeleteBandwidthPackageRespon // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDREGION = "FailedOperation.InvalidRegion" // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEINUSE = "InvalidParameterValue.BandwidthPackageInUse" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" +// INVALIDPARAMETERVALUE_STOPCHARGINGINSTANCEINUSE = "InvalidParameterValue.StopChargingInstanceInUse" +// LIMITEXCEEDED_ACCOUNTRETURNQUOTA = "LimitExceeded.AccountReturnQuota" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INVALIDADDRESSSTATE = "UnsupportedOperation.InvalidAddressState" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) DeleteBandwidthPackage(request *DeleteBandwidthPackageRequest) (response *DeleteBandwidthPackageResponse, err error) { - if request == nil { - request = NewDeleteBandwidthPackageRequest() - } - - response = NewDeleteBandwidthPackageResponse() - err = c.Send(request, response) - return + return c.DeleteBandwidthPackageWithContext(context.Background(), request) } // DeleteBandwidthPackage @@ -4755,16 +6306,25 @@ func (c *Client) DeleteBandwidthPackage(request *DeleteBandwidthPackageRequest) // // 可能返回的错误码: // +// FAILEDOPERATION_INVALIDREGION = "FailedOperation.InvalidRegion" // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEINUSE = "InvalidParameterValue.BandwidthPackageInUse" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" +// INVALIDPARAMETERVALUE_STOPCHARGINGINSTANCEINUSE = "InvalidParameterValue.StopChargingInstanceInUse" +// LIMITEXCEEDED_ACCOUNTRETURNQUOTA = "LimitExceeded.AccountReturnQuota" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INVALIDADDRESSSTATE = "UnsupportedOperation.InvalidAddressState" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) DeleteBandwidthPackageWithContext(ctx context.Context, request *DeleteBandwidthPackageRequest) (response *DeleteBandwidthPackageResponse, err error) { if request == nil { request = NewDeleteBandwidthPackageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteBandwidthPackage require credential") + } + request.SetContext(ctx) response = NewDeleteBandwidthPackageResponse() @@ -4776,6 +6336,7 @@ func NewDeleteCcnRequest() (request *DeleteCcnRequest) { request = &DeleteCcnRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteCcn") return @@ -4799,19 +6360,15 @@ func NewDeleteCcnResponse() (response *DeleteCcnResponse) { // // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_BANDWIDTHNOTEXPIRED = "UnsupportedOperation.BandwidthNotExpired" // UNSUPPORTEDOPERATION_CCNHASFLOWLOG = "UnsupportedOperation.CcnHasFlowLog" func (c *Client) DeleteCcn(request *DeleteCcnRequest) (response *DeleteCcnResponse, err error) { - if request == nil { - request = NewDeleteCcnRequest() - } - - response = NewDeleteCcnResponse() - err = c.Send(request, response) - return + return c.DeleteCcnWithContext(context.Background(), request) } // DeleteCcn @@ -4825,15 +6382,22 @@ func (c *Client) DeleteCcn(request *DeleteCcnRequest) (response *DeleteCcnRespon // // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_BANDWIDTHNOTEXPIRED = "UnsupportedOperation.BandwidthNotExpired" // UNSUPPORTEDOPERATION_CCNHASFLOWLOG = "UnsupportedOperation.CcnHasFlowLog" func (c *Client) DeleteCcnWithContext(ctx context.Context, request *DeleteCcnRequest) (response *DeleteCcnResponse, err error) { if request == nil { request = NewDeleteCcnRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteCcn require credential") + } + request.SetContext(ctx) response = NewDeleteCcnResponse() @@ -4845,6 +6409,7 @@ func NewDeleteCustomerGatewayRequest() (request *DeleteCustomerGatewayRequest) { request = &DeleteCustomerGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteCustomerGateway") return @@ -4865,14 +6430,9 @@ func NewDeleteCustomerGatewayResponse() (response *DeleteCustomerGatewayResponse // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteCustomerGateway(request *DeleteCustomerGatewayRequest) (response *DeleteCustomerGatewayResponse, err error) { - if request == nil { - request = NewDeleteCustomerGatewayRequest() - } - - response = NewDeleteCustomerGatewayResponse() - err = c.Send(request, response) - return + return c.DeleteCustomerGatewayWithContext(context.Background(), request) } // DeleteCustomerGateway @@ -4883,10 +6443,16 @@ func (c *Client) DeleteCustomerGateway(request *DeleteCustomerGatewayRequest) (r // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteCustomerGatewayWithContext(ctx context.Context, request *DeleteCustomerGatewayRequest) (response *DeleteCustomerGatewayResponse, err error) { if request == nil { request = NewDeleteCustomerGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteCustomerGateway require credential") + } + request.SetContext(ctx) response = NewDeleteCustomerGatewayResponse() @@ -4898,6 +6464,7 @@ func NewDeleteDhcpIpRequest() (request *DeleteDhcpIpRequest) { request = &DeleteDhcpIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteDhcpIp") return @@ -4924,13 +6491,7 @@ func NewDeleteDhcpIpResponse() (response *DeleteDhcpIpResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DeleteDhcpIp(request *DeleteDhcpIpRequest) (response *DeleteDhcpIpResponse, err error) { - if request == nil { - request = NewDeleteDhcpIpRequest() - } - - response = NewDeleteDhcpIpResponse() - err = c.Send(request, response) - return + return c.DeleteDhcpIpWithContext(context.Background(), request) } // DeleteDhcpIp @@ -4950,6 +6511,11 @@ func (c *Client) DeleteDhcpIpWithContext(ctx context.Context, request *DeleteDhc if request == nil { request = NewDeleteDhcpIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteDhcpIp require credential") + } + request.SetContext(ctx) response = NewDeleteDhcpIpResponse() @@ -4961,6 +6527,7 @@ func NewDeleteDirectConnectGatewayRequest() (request *DeleteDirectConnectGateway request = &DeleteDirectConnectGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteDirectConnectGateway") return @@ -4986,16 +6553,14 @@ func NewDeleteDirectConnectGatewayResponse() (response *DeleteDirectConnectGatew // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_DCGATEWAYNATRULEEXISTS = "UnsupportedOperation.DCGatewayNatRuleExists" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteDirectConnectGateway(request *DeleteDirectConnectGatewayRequest) (response *DeleteDirectConnectGatewayResponse, err error) { - if request == nil { - request = NewDeleteDirectConnectGatewayRequest() - } - - response = NewDeleteDirectConnectGatewayResponse() - err = c.Send(request, response) - return + return c.DeleteDirectConnectGatewayWithContext(context.Background(), request) } // DeleteDirectConnectGateway @@ -5011,12 +6576,21 @@ func (c *Client) DeleteDirectConnectGateway(request *DeleteDirectConnectGatewayR // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_DCGATEWAYNATRULEEXISTS = "UnsupportedOperation.DCGatewayNatRuleExists" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteDirectConnectGatewayWithContext(ctx context.Context, request *DeleteDirectConnectGatewayRequest) (response *DeleteDirectConnectGatewayResponse, err error) { if request == nil { request = NewDeleteDirectConnectGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteDirectConnectGateway require credential") + } + request.SetContext(ctx) response = NewDeleteDirectConnectGatewayResponse() @@ -5028,6 +6602,7 @@ func NewDeleteDirectConnectGatewayCcnRoutesRequest() (request *DeleteDirectConne request = &DeleteDirectConnectGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteDirectConnectGatewayCcnRoutes") return @@ -5048,13 +6623,7 @@ func NewDeleteDirectConnectGatewayCcnRoutesResponse() (response *DeleteDirectCon // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteDirectConnectGatewayCcnRoutes(request *DeleteDirectConnectGatewayCcnRoutesRequest) (response *DeleteDirectConnectGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewDeleteDirectConnectGatewayCcnRoutesRequest() - } - - response = NewDeleteDirectConnectGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.DeleteDirectConnectGatewayCcnRoutesWithContext(context.Background(), request) } // DeleteDirectConnectGatewayCcnRoutes @@ -5068,6 +6637,11 @@ func (c *Client) DeleteDirectConnectGatewayCcnRoutesWithContext(ctx context.Cont if request == nil { request = NewDeleteDirectConnectGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteDirectConnectGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewDeleteDirectConnectGatewayCcnRoutesResponse() @@ -5079,6 +6653,7 @@ func NewDeleteFlowLogRequest() (request *DeleteFlowLogRequest) { request = &DeleteFlowLogRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteFlowLog") return @@ -5092,7 +6667,7 @@ func NewDeleteFlowLogResponse() (response *DeleteFlowLogResponse) { } // DeleteFlowLog -// 本接口(DeleteFlowLog)用于删除流日志 +// 本接口(DeleteFlowLog)用于删除流日志。 // // 可能返回的错误码: // @@ -5100,17 +6675,11 @@ func NewDeleteFlowLogResponse() (response *DeleteFlowLogResponse) { // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteFlowLog(request *DeleteFlowLogRequest) (response *DeleteFlowLogResponse, err error) { - if request == nil { - request = NewDeleteFlowLogRequest() - } - - response = NewDeleteFlowLogResponse() - err = c.Send(request, response) - return + return c.DeleteFlowLogWithContext(context.Background(), request) } // DeleteFlowLog -// 本接口(DeleteFlowLog)用于删除流日志 +// 本接口(DeleteFlowLog)用于删除流日志。 // // 可能返回的错误码: // @@ -5121,6 +6690,11 @@ func (c *Client) DeleteFlowLogWithContext(ctx context.Context, request *DeleteFl if request == nil { request = NewDeleteFlowLogRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteFlowLog require credential") + } + request.SetContext(ctx) response = NewDeleteFlowLogResponse() @@ -5132,6 +6706,7 @@ func NewDeleteHaVipRequest() (request *DeleteHaVipRequest) { request = &DeleteHaVipRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteHaVip") return @@ -5157,13 +6732,7 @@ func NewDeleteHaVipResponse() (response *DeleteHaVipResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DeleteHaVip(request *DeleteHaVipRequest) (response *DeleteHaVipResponse, err error) { - if request == nil { - request = NewDeleteHaVipRequest() - } - - response = NewDeleteHaVipResponse() - err = c.Send(request, response) - return + return c.DeleteHaVipWithContext(context.Background(), request) } // DeleteHaVip @@ -5182,6 +6751,11 @@ func (c *Client) DeleteHaVipWithContext(ctx context.Context, request *DeleteHaVi if request == nil { request = NewDeleteHaVipRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteHaVip require credential") + } + request.SetContext(ctx) response = NewDeleteHaVipResponse() @@ -5193,6 +6767,7 @@ func NewDeleteIp6TranslatorsRequest() (request *DeleteIp6TranslatorsRequest) { request = &DeleteIp6TranslatorsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteIp6Translators") return @@ -5214,14 +6789,9 @@ func NewDeleteIp6TranslatorsResponse() (response *DeleteIp6TranslatorsResponse) // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IP6TRANSLATORNOTFOUND = "InvalidParameterValue.Ip6TranslatorNotFound" func (c *Client) DeleteIp6Translators(request *DeleteIp6TranslatorsRequest) (response *DeleteIp6TranslatorsResponse, err error) { - if request == nil { - request = NewDeleteIp6TranslatorsRequest() - } - - response = NewDeleteIp6TranslatorsResponse() - err = c.Send(request, response) - return + return c.DeleteIp6TranslatorsWithContext(context.Background(), request) } // DeleteIp6Translators @@ -5233,10 +6803,16 @@ func (c *Client) DeleteIp6Translators(request *DeleteIp6TranslatorsRequest) (res // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IP6TRANSLATORNOTFOUND = "InvalidParameterValue.Ip6TranslatorNotFound" func (c *Client) DeleteIp6TranslatorsWithContext(ctx context.Context, request *DeleteIp6TranslatorsRequest) (response *DeleteIp6TranslatorsResponse, err error) { if request == nil { request = NewDeleteIp6TranslatorsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteIp6Translators require credential") + } + request.SetContext(ctx) response = NewDeleteIp6TranslatorsResponse() @@ -5248,6 +6824,7 @@ func NewDeleteLocalGatewayRequest() (request *DeleteLocalGatewayRequest) { request = &DeleteLocalGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteLocalGateway") return @@ -5261,7 +6838,7 @@ func NewDeleteLocalGatewayResponse() (response *DeleteLocalGatewayResponse) { } // DeleteLocalGateway -// 该接口用于删除CDC的本地网关。 +// 本接口(DeleteLocalGateway)用于删除CDC的本地网关。 // // 可能返回的错误码: // @@ -5272,17 +6849,11 @@ func NewDeleteLocalGatewayResponse() (response *DeleteLocalGatewayResponse) { // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteLocalGateway(request *DeleteLocalGatewayRequest) (response *DeleteLocalGatewayResponse, err error) { - if request == nil { - request = NewDeleteLocalGatewayRequest() - } - - response = NewDeleteLocalGatewayResponse() - err = c.Send(request, response) - return + return c.DeleteLocalGatewayWithContext(context.Background(), request) } // DeleteLocalGateway -// 该接口用于删除CDC的本地网关。 +// 本接口(DeleteLocalGateway)用于删除CDC的本地网关。 // // 可能返回的错误码: // @@ -5296,6 +6867,11 @@ func (c *Client) DeleteLocalGatewayWithContext(ctx context.Context, request *Del if request == nil { request = NewDeleteLocalGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteLocalGateway require credential") + } + request.SetContext(ctx) response = NewDeleteLocalGatewayResponse() @@ -5307,6 +6883,7 @@ func NewDeleteNatGatewayRequest() (request *DeleteNatGatewayRequest) { request = &DeleteNatGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNatGateway") return @@ -5331,13 +6908,7 @@ func NewDeleteNatGatewayResponse() (response *DeleteNatGatewayResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteNatGateway(request *DeleteNatGatewayRequest) (response *DeleteNatGatewayResponse, err error) { - if request == nil { - request = NewDeleteNatGatewayRequest() - } - - response = NewDeleteNatGatewayResponse() - err = c.Send(request, response) - return + return c.DeleteNatGatewayWithContext(context.Background(), request) } // DeleteNatGateway @@ -5355,6 +6926,11 @@ func (c *Client) DeleteNatGatewayWithContext(ctx context.Context, request *Delet if request == nil { request = NewDeleteNatGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNatGateway require credential") + } + request.SetContext(ctx) response = NewDeleteNatGatewayResponse() @@ -5366,6 +6942,7 @@ func NewDeleteNatGatewayDestinationIpPortTranslationNatRuleRequest() (request *D request = &DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNatGatewayDestinationIpPortTranslationNatRule") return @@ -5383,18 +6960,10 @@ func NewDeleteNatGatewayDestinationIpPortTranslationNatRuleResponse() (response // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCEINUSE = "ResourceInUse" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULENOTEXISTS = "InvalidParameterValue.NatGatewayDnatRuleNotExists" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteNatGatewayDestinationIpPortTranslationNatRule(request *DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { - if request == nil { - request = NewDeleteNatGatewayDestinationIpPortTranslationNatRuleRequest() - } - - response = NewDeleteNatGatewayDestinationIpPortTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.DeleteNatGatewayDestinationIpPortTranslationNatRuleWithContext(context.Background(), request) } // DeleteNatGatewayDestinationIpPortTranslationNatRule @@ -5402,14 +6971,17 @@ func (c *Client) DeleteNatGatewayDestinationIpPortTranslationNatRule(request *De // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCEINUSE = "ResourceInUse" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULENOTEXISTS = "InvalidParameterValue.NatGatewayDnatRuleNotExists" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteNatGatewayDestinationIpPortTranslationNatRuleWithContext(ctx context.Context, request *DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { if request == nil { request = NewDeleteNatGatewayDestinationIpPortTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNatGatewayDestinationIpPortTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewDeleteNatGatewayDestinationIpPortTranslationNatRuleResponse() @@ -5421,6 +6993,7 @@ func NewDeleteNatGatewaySourceIpTranslationNatRuleRequest() (request *DeleteNatG request = &DeleteNatGatewaySourceIpTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNatGatewaySourceIpTranslationNatRule") return @@ -5441,14 +7014,11 @@ func NewDeleteNatGatewaySourceIpTranslationNatRuleResponse() (response *DeleteNa // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NATGATEWAYSNATRULENOTEXISTS = "InvalidParameterValue.NatGatewaySnatRuleNotExists" +// RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteNatGatewaySourceIpTranslationNatRule(request *DeleteNatGatewaySourceIpTranslationNatRuleRequest) (response *DeleteNatGatewaySourceIpTranslationNatRuleResponse, err error) { - if request == nil { - request = NewDeleteNatGatewaySourceIpTranslationNatRuleRequest() - } - - response = NewDeleteNatGatewaySourceIpTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.DeleteNatGatewaySourceIpTranslationNatRuleWithContext(context.Background(), request) } // DeleteNatGatewaySourceIpTranslationNatRule @@ -5459,10 +7029,18 @@ func (c *Client) DeleteNatGatewaySourceIpTranslationNatRule(request *DeleteNatGa // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NATGATEWAYSNATRULENOTEXISTS = "InvalidParameterValue.NatGatewaySnatRuleNotExists" +// RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteNatGatewaySourceIpTranslationNatRuleWithContext(ctx context.Context, request *DeleteNatGatewaySourceIpTranslationNatRuleRequest) (response *DeleteNatGatewaySourceIpTranslationNatRuleResponse, err error) { if request == nil { request = NewDeleteNatGatewaySourceIpTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNatGatewaySourceIpTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewDeleteNatGatewaySourceIpTranslationNatRuleResponse() @@ -5474,6 +7052,7 @@ func NewDeleteNetDetectRequest() (request *DeleteNetDetectRequest) { request = &DeleteNetDetectRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNetDetect") return @@ -5487,35 +7066,36 @@ func NewDeleteNetDetectResponse() (response *DeleteNetDetectResponse) { } // DeleteNetDetect -// 本接口(DeleteNetDetect)用于删除网络探测实例。 +// 本接口(DeleteNetDetect)用于删除网络探测实例。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteNetDetect(request *DeleteNetDetectRequest) (response *DeleteNetDetectResponse, err error) { - if request == nil { - request = NewDeleteNetDetectRequest() - } - - response = NewDeleteNetDetectResponse() - err = c.Send(request, response) - return + return c.DeleteNetDetectWithContext(context.Background(), request) } // DeleteNetDetect -// 本接口(DeleteNetDetect)用于删除网络探测实例。 +// 本接口(DeleteNetDetect)用于删除网络探测实例。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteNetDetectWithContext(ctx context.Context, request *DeleteNetDetectRequest) (response *DeleteNetDetectResponse, err error) { if request == nil { request = NewDeleteNetDetectRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNetDetect require credential") + } + request.SetContext(ctx) response = NewDeleteNetDetectResponse() @@ -5527,6 +7107,7 @@ func NewDeleteNetworkAclRequest() (request *DeleteNetworkAclRequest) { request = &DeleteNetworkAclRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNetworkAcl") return @@ -5547,31 +7128,97 @@ func NewDeleteNetworkAclResponse() (response *DeleteNetworkAclResponse) { // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteNetworkAcl(request *DeleteNetworkAclRequest) (response *DeleteNetworkAclResponse, err error) { + return c.DeleteNetworkAclWithContext(context.Background(), request) +} + +// DeleteNetworkAcl +// 本接口(DeleteNetworkAcl)用于删除网络ACL。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCEINUSE = "ResourceInUse" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" +func (c *Client) DeleteNetworkAclWithContext(ctx context.Context, request *DeleteNetworkAclRequest) (response *DeleteNetworkAclResponse, err error) { if request == nil { request = NewDeleteNetworkAclRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DeleteNetworkAcl require credential") + } + + request.SetContext(ctx) + response = NewDeleteNetworkAclResponse() err = c.Send(request, response) return } -// DeleteNetworkAcl -// 本接口(DeleteNetworkAcl)用于删除网络ACL。 +func NewDeleteNetworkAclQuintupleEntriesRequest() (request *DeleteNetworkAclQuintupleEntriesRequest) { + request = &DeleteNetworkAclQuintupleEntriesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNetworkAclQuintupleEntries") + + return +} + +func NewDeleteNetworkAclQuintupleEntriesResponse() (response *DeleteNetworkAclQuintupleEntriesResponse) { + response = &DeleteNetworkAclQuintupleEntriesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteNetworkAclQuintupleEntries +// 本接口(DeleteNetworkAclQuintupleEntries)用于删除网络ACL五元组指定的入站规则和出站规则(但不是全量删除该ACL下的所有条目)。在NetworkAclQuintupleEntrySet参数中:NetworkAclQuintupleEntry需要提供NetworkAclQuintupleEntryId。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCEINUSE = "ResourceInUse" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DeleteNetworkAclWithContext(ctx context.Context, request *DeleteNetworkAclRequest) (response *DeleteNetworkAclResponse, err error) { +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) DeleteNetworkAclQuintupleEntries(request *DeleteNetworkAclQuintupleEntriesRequest) (response *DeleteNetworkAclQuintupleEntriesResponse, err error) { + return c.DeleteNetworkAclQuintupleEntriesWithContext(context.Background(), request) +} + +// DeleteNetworkAclQuintupleEntries +// 本接口(DeleteNetworkAclQuintupleEntries)用于删除网络ACL五元组指定的入站规则和出站规则(但不是全量删除该ACL下的所有条目)。在NetworkAclQuintupleEntrySet参数中:NetworkAclQuintupleEntry需要提供NetworkAclQuintupleEntryId。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) DeleteNetworkAclQuintupleEntriesWithContext(ctx context.Context, request *DeleteNetworkAclQuintupleEntriesRequest) (response *DeleteNetworkAclQuintupleEntriesResponse, err error) { if request == nil { - request = NewDeleteNetworkAclRequest() + request = NewDeleteNetworkAclQuintupleEntriesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNetworkAclQuintupleEntries require credential") + } + request.SetContext(ctx) - response = NewDeleteNetworkAclResponse() + response = NewDeleteNetworkAclQuintupleEntriesResponse() err = c.Send(request, response) return } @@ -5580,6 +7227,7 @@ func NewDeleteNetworkInterfaceRequest() (request *DeleteNetworkInterfaceRequest) request = &DeleteNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteNetworkInterface") return @@ -5604,18 +7252,13 @@ func NewDeleteNetworkInterfaceResponse() (response *DeleteNetworkInterfaceRespon // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) DeleteNetworkInterface(request *DeleteNetworkInterfaceRequest) (response *DeleteNetworkInterfaceResponse, err error) { - if request == nil { - request = NewDeleteNetworkInterfaceRequest() - } - - response = NewDeleteNetworkInterfaceResponse() - err = c.Send(request, response) - return + return c.DeleteNetworkInterfaceWithContext(context.Background(), request) } // DeleteNetworkInterface @@ -5630,6 +7273,7 @@ func (c *Client) DeleteNetworkInterface(request *DeleteNetworkInterfaceRequest) // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" @@ -5638,6 +7282,11 @@ func (c *Client) DeleteNetworkInterfaceWithContext(ctx context.Context, request if request == nil { request = NewDeleteNetworkInterfaceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteNetworkInterface require credential") + } + request.SetContext(ctx) response = NewDeleteNetworkInterfaceResponse() @@ -5649,6 +7298,7 @@ func NewDeleteRouteTableRequest() (request *DeleteRouteTableRequest) { request = &DeleteRouteTableRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteRouteTable") return @@ -5662,33 +7312,40 @@ func NewDeleteRouteTableResponse() (response *DeleteRouteTableResponse) { } // DeleteRouteTable -// 删除路由表 +// 本接口(DeleteRouteTable)用于删除路由表。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_DELDEFAULTROUTE = "UnsupportedOperation.DelDefaultRoute" +// UNSUPPORTEDOPERATION_DELROUTEWITHSUBNET = "UnsupportedOperation.DelRouteWithSubnet" +// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultRouteTable" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteRouteTable(request *DeleteRouteTableRequest) (response *DeleteRouteTableResponse, err error) { - if request == nil { - request = NewDeleteRouteTableRequest() - } - - response = NewDeleteRouteTableResponse() - err = c.Send(request, response) - return + return c.DeleteRouteTableWithContext(context.Background(), request) } // DeleteRouteTable -// 删除路由表 +// 本接口(DeleteRouteTable)用于删除路由表。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_DELDEFAULTROUTE = "UnsupportedOperation.DelDefaultRoute" +// UNSUPPORTEDOPERATION_DELROUTEWITHSUBNET = "UnsupportedOperation.DelRouteWithSubnet" +// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultRouteTable" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteRouteTableWithContext(ctx context.Context, request *DeleteRouteTableRequest) (response *DeleteRouteTableResponse, err error) { if request == nil { request = NewDeleteRouteTableRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteRouteTable require credential") + } + request.SetContext(ctx) response = NewDeleteRouteTableResponse() @@ -5700,6 +7357,7 @@ func NewDeleteRoutesRequest() (request *DeleteRoutesRequest) { request = &DeleteRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteRoutes") return @@ -5724,13 +7382,7 @@ func NewDeleteRoutesResponse() (response *DeleteRoutesResponse) { // UNSUPPORTEDOPERATION_DISABLEDNOTIFYCCN = "UnsupportedOperation.DisabledNotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) DeleteRoutes(request *DeleteRoutesRequest) (response *DeleteRoutesResponse, err error) { - if request == nil { - request = NewDeleteRoutesRequest() - } - - response = NewDeleteRoutesResponse() - err = c.Send(request, response) - return + return c.DeleteRoutesWithContext(context.Background(), request) } // DeleteRoutes @@ -5748,6 +7400,11 @@ func (c *Client) DeleteRoutesWithContext(ctx context.Context, request *DeleteRou if request == nil { request = NewDeleteRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteRoutes require credential") + } + request.SetContext(ctx) response = NewDeleteRoutesResponse() @@ -5759,6 +7416,7 @@ func NewDeleteSecurityGroupRequest() (request *DeleteSecurityGroupRequest) { request = &DeleteSecurityGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteSecurityGroup") return @@ -5782,20 +7440,21 @@ func NewDeleteSecurityGroupResponse() (response *DeleteSecurityGroupResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDSECURITYGROUPID_MALFORMED = "InvalidSecurityGroupID.Malformed" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupID.NotFound" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) DeleteSecurityGroup(request *DeleteSecurityGroupRequest) (response *DeleteSecurityGroupResponse, err error) { - if request == nil { - request = NewDeleteSecurityGroupRequest() - } - - response = NewDeleteSecurityGroupResponse() - err = c.Send(request, response) - return + return c.DeleteSecurityGroupWithContext(context.Background(), request) } // DeleteSecurityGroup @@ -5809,16 +7468,28 @@ func (c *Client) DeleteSecurityGroup(request *DeleteSecurityGroupRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDSECURITYGROUPID_MALFORMED = "InvalidSecurityGroupID.Malformed" // INVALIDSECURITYGROUPID_NOTFOUND = "InvalidSecurityGroupID.NotFound" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) DeleteSecurityGroupWithContext(ctx context.Context, request *DeleteSecurityGroupRequest) (response *DeleteSecurityGroupResponse, err error) { if request == nil { request = NewDeleteSecurityGroupRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteSecurityGroup require credential") + } + request.SetContext(ctx) response = NewDeleteSecurityGroupResponse() @@ -5830,6 +7501,7 @@ func NewDeleteSecurityGroupPoliciesRequest() (request *DeleteSecurityGroupPolici request = &DeleteSecurityGroupPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteSecurityGroupPolicies") return @@ -5849,19 +7521,21 @@ func NewDeleteSecurityGroupPoliciesResponse() (response *DeleteSecurityGroupPoli // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) DeleteSecurityGroupPolicies(request *DeleteSecurityGroupPoliciesRequest) (response *DeleteSecurityGroupPoliciesResponse, err error) { - if request == nil { - request = NewDeleteSecurityGroupPoliciesRequest() - } - - response = NewDeleteSecurityGroupPoliciesResponse() - err = c.Send(request, response) - return + return c.DeleteSecurityGroupPoliciesWithContext(context.Background(), request) } // DeleteSecurityGroupPolicies @@ -5871,15 +7545,28 @@ func (c *Client) DeleteSecurityGroupPolicies(request *DeleteSecurityGroupPolicie // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) DeleteSecurityGroupPoliciesWithContext(ctx context.Context, request *DeleteSecurityGroupPoliciesRequest) (response *DeleteSecurityGroupPoliciesResponse, err error) { if request == nil { request = NewDeleteSecurityGroupPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteSecurityGroupPolicies require credential") + } + request.SetContext(ctx) response = NewDeleteSecurityGroupPoliciesResponse() @@ -5891,6 +7578,7 @@ func NewDeleteServiceTemplateRequest() (request *DeleteServiceTemplateRequest) { request = &DeleteServiceTemplateRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteServiceTemplate") return @@ -5904,7 +7592,7 @@ func NewDeleteServiceTemplateResponse() (response *DeleteServiceTemplateResponse } // DeleteServiceTemplate -// 本接口(DeleteServiceTemplate)用于删除协议端口模板 +// 本接口(DeleteServiceTemplate)用于删除协议端口模板。 // // 可能返回的错误码: // @@ -5912,17 +7600,11 @@ func NewDeleteServiceTemplateResponse() (response *DeleteServiceTemplateResponse // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteServiceTemplate(request *DeleteServiceTemplateRequest) (response *DeleteServiceTemplateResponse, err error) { - if request == nil { - request = NewDeleteServiceTemplateRequest() - } - - response = NewDeleteServiceTemplateResponse() - err = c.Send(request, response) - return + return c.DeleteServiceTemplateWithContext(context.Background(), request) } // DeleteServiceTemplate -// 本接口(DeleteServiceTemplate)用于删除协议端口模板 +// 本接口(DeleteServiceTemplate)用于删除协议端口模板。 // // 可能返回的错误码: // @@ -5933,6 +7615,11 @@ func (c *Client) DeleteServiceTemplateWithContext(ctx context.Context, request * if request == nil { request = NewDeleteServiceTemplateRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteServiceTemplate require credential") + } + request.SetContext(ctx) response = NewDeleteServiceTemplateResponse() @@ -5944,6 +7631,7 @@ func NewDeleteServiceTemplateGroupRequest() (request *DeleteServiceTemplateGroup request = &DeleteServiceTemplateGroupRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteServiceTemplateGroup") return @@ -5957,7 +7645,7 @@ func NewDeleteServiceTemplateGroupResponse() (response *DeleteServiceTemplateGro } // DeleteServiceTemplateGroup -// 本接口(DeleteServiceTemplateGroup)用于删除协议端口模板集合 +// 本接口(DeleteServiceTemplateGroup)用于删除协议端口模板集合。 // // 可能返回的错误码: // @@ -5965,30 +7653,80 @@ func NewDeleteServiceTemplateGroupResponse() (response *DeleteServiceTemplateGro // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteServiceTemplateGroup(request *DeleteServiceTemplateGroupRequest) (response *DeleteServiceTemplateGroupResponse, err error) { + return c.DeleteServiceTemplateGroupWithContext(context.Background(), request) +} + +// DeleteServiceTemplateGroup +// 本接口(DeleteServiceTemplateGroup)用于删除协议端口模板集合。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) DeleteServiceTemplateGroupWithContext(ctx context.Context, request *DeleteServiceTemplateGroupRequest) (response *DeleteServiceTemplateGroupResponse, err error) { if request == nil { request = NewDeleteServiceTemplateGroupRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DeleteServiceTemplateGroup require credential") + } + + request.SetContext(ctx) + response = NewDeleteServiceTemplateGroupResponse() err = c.Send(request, response) return } -// DeleteServiceTemplateGroup -// 本接口(DeleteServiceTemplateGroup)用于删除协议端口模板集合 +func NewDeleteSnapshotPoliciesRequest() (request *DeleteSnapshotPoliciesRequest) { + request = &DeleteSnapshotPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteSnapshotPolicies") + + return +} + +func NewDeleteSnapshotPoliciesResponse() (response *DeleteSnapshotPoliciesResponse) { + response = &DeleteSnapshotPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteSnapshotPolicies +// 本接口(DeleteSnapshotPolicies)用于删除快照策略。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" -func (c *Client) DeleteServiceTemplateGroupWithContext(ctx context.Context, request *DeleteServiceTemplateGroupRequest) (response *DeleteServiceTemplateGroupResponse, err error) { +func (c *Client) DeleteSnapshotPolicies(request *DeleteSnapshotPoliciesRequest) (response *DeleteSnapshotPoliciesResponse, err error) { + return c.DeleteSnapshotPoliciesWithContext(context.Background(), request) +} + +// DeleteSnapshotPolicies +// 本接口(DeleteSnapshotPolicies)用于删除快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DeleteSnapshotPoliciesWithContext(ctx context.Context, request *DeleteSnapshotPoliciesRequest) (response *DeleteSnapshotPoliciesResponse, err error) { if request == nil { - request = NewDeleteServiceTemplateGroupRequest() + request = NewDeleteSnapshotPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteSnapshotPolicies require credential") } + request.SetContext(ctx) - response = NewDeleteServiceTemplateGroupResponse() + response = NewDeleteSnapshotPoliciesResponse() err = c.Send(request, response) return } @@ -5997,6 +7735,7 @@ func NewDeleteSubnetRequest() (request *DeleteSubnetRequest) { request = &DeleteSubnetRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteSubnet") return @@ -6010,39 +7749,42 @@ func NewDeleteSubnetResponse() (response *DeleteSubnetResponse) { } // DeleteSubnet -// 本接口(DeleteSubnet)用于用于删除子网(Subnet)。 +// 本接口(DeleteSubnet)用于删除子网(Subnet)。 // -// * 删除子网前,请清理该子网下所有资源,包括云服务器、负载均衡、云数据、noSql、弹性网卡等资源。 +// * 删除子网前,请清理该子网下所有资源,包括云服务器、负载均衡、云数据、NoSQL、弹性网卡等资源。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_NATGATEWAYSNATRULENOTEXISTS = "UnsupportedOperation.NatGatewaySnatRuleNotExists" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteSubnet(request *DeleteSubnetRequest) (response *DeleteSubnetResponse, err error) { - if request == nil { - request = NewDeleteSubnetRequest() - } - - response = NewDeleteSubnetResponse() - err = c.Send(request, response) - return + return c.DeleteSubnetWithContext(context.Background(), request) } // DeleteSubnet -// 本接口(DeleteSubnet)用于用于删除子网(Subnet)。 +// 本接口(DeleteSubnet)用于删除子网(Subnet)。 // -// * 删除子网前,请清理该子网下所有资源,包括云服务器、负载均衡、云数据、noSql、弹性网卡等资源。 +// * 删除子网前,请清理该子网下所有资源,包括云服务器、负载均衡、云数据、NoSQL、弹性网卡等资源。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_NATGATEWAYSNATRULENOTEXISTS = "UnsupportedOperation.NatGatewaySnatRuleNotExists" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) DeleteSubnetWithContext(ctx context.Context, request *DeleteSubnetRequest) (response *DeleteSubnetResponse, err error) { if request == nil { request = NewDeleteSubnetRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteSubnet require credential") + } + request.SetContext(ctx) response = NewDeleteSubnetResponse() @@ -6054,6 +7796,7 @@ func NewDeleteTemplateMemberRequest() (request *DeleteTemplateMemberRequest) { request = &DeleteTemplateMemberRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteTemplateMember") return @@ -6067,7 +7810,7 @@ func NewDeleteTemplateMemberResponse() (response *DeleteTemplateMemberResponse) } // DeleteTemplateMember -// 删除模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 删除模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -6075,18 +7818,13 @@ func NewDeleteTemplateMemberResponse() (response *DeleteTemplateMemberResponse) // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteTemplateMember(request *DeleteTemplateMemberRequest) (response *DeleteTemplateMemberResponse, err error) { - if request == nil { - request = NewDeleteTemplateMemberRequest() - } - - response = NewDeleteTemplateMemberResponse() - err = c.Send(request, response) - return + return c.DeleteTemplateMemberWithContext(context.Background(), request) } // DeleteTemplateMember -// 删除模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 删除模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -6094,10 +7832,16 @@ func (c *Client) DeleteTemplateMember(request *DeleteTemplateMemberRequest) (res // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteTemplateMemberWithContext(ctx context.Context, request *DeleteTemplateMemberRequest) (response *DeleteTemplateMemberResponse, err error) { if request == nil { request = NewDeleteTemplateMemberRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteTemplateMember require credential") + } + request.SetContext(ctx) response = NewDeleteTemplateMemberResponse() @@ -6105,10 +7849,64 @@ func (c *Client) DeleteTemplateMemberWithContext(ctx context.Context, request *D return } +func NewDeleteTrafficPackagesRequest() (request *DeleteTrafficPackagesRequest) { + request = &DeleteTrafficPackagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteTrafficPackages") + + return +} + +func NewDeleteTrafficPackagesResponse() (response *DeleteTrafficPackagesResponse) { + response = &DeleteTrafficPackagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteTrafficPackages +// 删除共享带宽包(仅非活动状态的流量包可删除)。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTFOUND = "InvalidParameterValue.TrafficPackageNotFound" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTSUPPORTED = "InvalidParameterValue.TrafficPackageNotSupported" +func (c *Client) DeleteTrafficPackages(request *DeleteTrafficPackagesRequest) (response *DeleteTrafficPackagesResponse, err error) { + return c.DeleteTrafficPackagesWithContext(context.Background(), request) +} + +// DeleteTrafficPackages +// 删除共享带宽包(仅非活动状态的流量包可删除)。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTFOUND = "InvalidParameterValue.TrafficPackageNotFound" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTSUPPORTED = "InvalidParameterValue.TrafficPackageNotSupported" +func (c *Client) DeleteTrafficPackagesWithContext(ctx context.Context, request *DeleteTrafficPackagesRequest) (response *DeleteTrafficPackagesResponse, err error) { + if request == nil { + request = NewDeleteTrafficPackagesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteTrafficPackages require credential") + } + + request.SetContext(ctx) + + response = NewDeleteTrafficPackagesResponse() + err = c.Send(request, response) + return +} + func NewDeleteVpcRequest() (request *DeleteVpcRequest) { request = &DeleteVpcRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpc") return @@ -6130,19 +7928,18 @@ func NewDeleteVpcResponse() (response *DeleteVpcResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteVpc(request *DeleteVpcRequest) (response *DeleteVpcResponse, err error) { - if request == nil { - request = NewDeleteVpcRequest() - } - - response = NewDeleteVpcResponse() - err = c.Send(request, response) - return -} + return c.DeleteVpcWithContext(context.Background(), request) +} // DeleteVpc // 本接口(DeleteVpc)用于删除私有网络。 @@ -6153,14 +7950,24 @@ func (c *Client) DeleteVpc(request *DeleteVpcRequest) (response *DeleteVpcRespon // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" +// UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" func (c *Client) DeleteVpcWithContext(ctx context.Context, request *DeleteVpcRequest) (response *DeleteVpcResponse, err error) { if request == nil { request = NewDeleteVpcRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpc require credential") + } + request.SetContext(ctx) response = NewDeleteVpcResponse() @@ -6172,6 +7979,7 @@ func NewDeleteVpcEndPointRequest() (request *DeleteVpcEndPointRequest) { request = &DeleteVpcEndPointRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpcEndPoint") return @@ -6185,7 +7993,7 @@ func NewDeleteVpcEndPointResponse() (response *DeleteVpcEndPointResponse) { } // DeleteVpcEndPoint -// 删除终端节点。 +// 本接口(DeleteVpcEndPoint)用于删除终端节点。 // // 可能返回的错误码: // @@ -6194,17 +8002,11 @@ func NewDeleteVpcEndPointResponse() (response *DeleteVpcEndPointResponse) { // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteVpcEndPoint(request *DeleteVpcEndPointRequest) (response *DeleteVpcEndPointResponse, err error) { - if request == nil { - request = NewDeleteVpcEndPointRequest() - } - - response = NewDeleteVpcEndPointResponse() - err = c.Send(request, response) - return + return c.DeleteVpcEndPointWithContext(context.Background(), request) } // DeleteVpcEndPoint -// 删除终端节点。 +// 本接口(DeleteVpcEndPoint)用于删除终端节点。 // // 可能返回的错误码: // @@ -6216,6 +8018,11 @@ func (c *Client) DeleteVpcEndPointWithContext(ctx context.Context, request *Dele if request == nil { request = NewDeleteVpcEndPointRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpcEndPoint require credential") + } + request.SetContext(ctx) response = NewDeleteVpcEndPointResponse() @@ -6227,6 +8034,7 @@ func NewDeleteVpcEndPointServiceRequest() (request *DeleteVpcEndPointServiceRequ request = &DeleteVpcEndPointServiceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpcEndPointService") return @@ -6240,7 +8048,7 @@ func NewDeleteVpcEndPointServiceResponse() (response *DeleteVpcEndPointServiceRe } // DeleteVpcEndPointService -// 删除终端节点服务。 +// 本接口(DeleteVpcEndPointService)用于删除终端节点服务。 // // 可能返回的错误码: // @@ -6249,17 +8057,11 @@ func NewDeleteVpcEndPointServiceResponse() (response *DeleteVpcEndPointServiceRe // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteVpcEndPointService(request *DeleteVpcEndPointServiceRequest) (response *DeleteVpcEndPointServiceResponse, err error) { - if request == nil { - request = NewDeleteVpcEndPointServiceRequest() - } - - response = NewDeleteVpcEndPointServiceResponse() - err = c.Send(request, response) - return + return c.DeleteVpcEndPointServiceWithContext(context.Background(), request) } // DeleteVpcEndPointService -// 删除终端节点服务。 +// 本接口(DeleteVpcEndPointService)用于删除终端节点服务。 // // 可能返回的错误码: // @@ -6271,6 +8073,11 @@ func (c *Client) DeleteVpcEndPointServiceWithContext(ctx context.Context, reques if request == nil { request = NewDeleteVpcEndPointServiceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpcEndPointService require credential") + } + request.SetContext(ctx) response = NewDeleteVpcEndPointServiceResponse() @@ -6282,6 +8089,7 @@ func NewDeleteVpcEndPointServiceWhiteListRequest() (request *DeleteVpcEndPointSe request = &DeleteVpcEndPointServiceWhiteListRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpcEndPointServiceWhiteList") return @@ -6295,38 +8103,98 @@ func NewDeleteVpcEndPointServiceWhiteListResponse() (response *DeleteVpcEndPoint } // DeleteVpcEndPointServiceWhiteList -// 删除终端节点服务白名单。 +// 本接口(DeleteVpcEndPointServiceWhiteList)用于删除终端节点服务白名单。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" func (c *Client) DeleteVpcEndPointServiceWhiteList(request *DeleteVpcEndPointServiceWhiteListRequest) (response *DeleteVpcEndPointServiceWhiteListResponse, err error) { + return c.DeleteVpcEndPointServiceWhiteListWithContext(context.Background(), request) +} + +// DeleteVpcEndPointServiceWhiteList +// 本接口(DeleteVpcEndPointServiceWhiteList)用于删除终端节点服务白名单。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) DeleteVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *DeleteVpcEndPointServiceWhiteListRequest) (response *DeleteVpcEndPointServiceWhiteListResponse, err error) { if request == nil { request = NewDeleteVpcEndPointServiceWhiteListRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpcEndPointServiceWhiteList require credential") + } + + request.SetContext(ctx) + response = NewDeleteVpcEndPointServiceWhiteListResponse() err = c.Send(request, response) return } -// DeleteVpcEndPointServiceWhiteList -// 删除终端节点服务白名单。 +func NewDeleteVpcPeeringConnectionRequest() (request *DeleteVpcPeeringConnectionRequest) { + request = &DeleteVpcPeeringConnectionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpcPeeringConnection") + + return +} + +func NewDeleteVpcPeeringConnectionResponse() (response *DeleteVpcPeeringConnectionResponse) { + response = &DeleteVpcPeeringConnectionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteVpcPeeringConnection +// 本接口(DeleteVpcPeeringConnection)用于删除私有网络对等连接。 // // 可能返回的错误码: // -// MISSINGPARAMETER = "MissingParameter" +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" -func (c *Client) DeleteVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *DeleteVpcEndPointServiceWhiteListRequest) (response *DeleteVpcEndPointServiceWhiteListResponse, err error) { +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEVPCBMPEER = "UnsupportedOperation.NotSupportDeleteVpcBmPeer" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) DeleteVpcPeeringConnection(request *DeleteVpcPeeringConnectionRequest) (response *DeleteVpcPeeringConnectionResponse, err error) { + return c.DeleteVpcPeeringConnectionWithContext(context.Background(), request) +} + +// DeleteVpcPeeringConnection +// 本接口(DeleteVpcPeeringConnection)用于删除私有网络对等连接。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEVPCBMPEER = "UnsupportedOperation.NotSupportDeleteVpcBmPeer" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) DeleteVpcPeeringConnectionWithContext(ctx context.Context, request *DeleteVpcPeeringConnectionRequest) (response *DeleteVpcPeeringConnectionResponse, err error) { if request == nil { - request = NewDeleteVpcEndPointServiceWhiteListRequest() + request = NewDeleteVpcPeeringConnectionRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpcPeeringConnection require credential") } + request.SetContext(ctx) - response = NewDeleteVpcEndPointServiceWhiteListResponse() + response = NewDeleteVpcPeeringConnectionResponse() err = c.Send(request, response) return } @@ -6335,6 +8203,7 @@ func NewDeleteVpnConnectionRequest() (request *DeleteVpnConnectionRequest) { request = &DeleteVpnConnectionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpnConnection") return @@ -6348,37 +8217,38 @@ func NewDeleteVpnConnectionResponse() (response *DeleteVpnConnectionResponse) { } // DeleteVpnConnection -// 本接口(DeleteVpnConnection)用于删除VPN通道。 +// 本接口(DeleteVpnConnection)用于删除VPN通道。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_DELETEVPNCONNINVALIDSTATE = "UnsupportedOperation.DeleteVpnConnInvalidState" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteVpnConnection(request *DeleteVpnConnectionRequest) (response *DeleteVpnConnectionResponse, err error) { - if request == nil { - request = NewDeleteVpnConnectionRequest() - } - - response = NewDeleteVpnConnectionResponse() - err = c.Send(request, response) - return + return c.DeleteVpnConnectionWithContext(context.Background(), request) } // DeleteVpnConnection -// 本接口(DeleteVpnConnection)用于删除VPN通道。 +// 本接口(DeleteVpnConnection)用于删除VPN通道。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_DELETEVPNCONNINVALIDSTATE = "UnsupportedOperation.DeleteVpnConnInvalidState" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DeleteVpnConnectionWithContext(ctx context.Context, request *DeleteVpnConnectionRequest) (response *DeleteVpnConnectionResponse, err error) { if request == nil { request = NewDeleteVpnConnectionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpnConnection require credential") + } + request.SetContext(ctx) response = NewDeleteVpnConnectionResponse() @@ -6390,6 +8260,7 @@ func NewDeleteVpnGatewayRequest() (request *DeleteVpnGatewayRequest) { request = &DeleteVpnGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpnGateway") return @@ -6413,13 +8284,7 @@ func NewDeleteVpnGatewayResponse() (response *DeleteVpnGatewayResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DeleteVpnGateway(request *DeleteVpnGatewayRequest) (response *DeleteVpnGatewayResponse, err error) { - if request == nil { - request = NewDeleteVpnGatewayRequest() - } - - response = NewDeleteVpnGatewayResponse() - err = c.Send(request, response) - return + return c.DeleteVpnGatewayWithContext(context.Background(), request) } // DeleteVpnGateway @@ -6436,6 +8301,11 @@ func (c *Client) DeleteVpnGatewayWithContext(ctx context.Context, request *Delet if request == nil { request = NewDeleteVpnGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpnGateway require credential") + } + request.SetContext(ctx) response = NewDeleteVpnGatewayResponse() @@ -6447,6 +8317,7 @@ func NewDeleteVpnGatewayRoutesRequest() (request *DeleteVpnGatewayRoutesRequest) request = &DeleteVpnGatewayRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpnGatewayRoutes") return @@ -6460,38 +8331,151 @@ func NewDeleteVpnGatewayRoutesResponse() (response *DeleteVpnGatewayRoutesRespon } // DeleteVpnGatewayRoutes -// 本接口(DeleteVpnGatewayCcnRoutes)用于删除VPN网关路由 +// 本接口(DeleteVpnGatewayRoutes)用于删除VPN网关路由 // // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DeleteVpnGatewayRoutes(request *DeleteVpnGatewayRoutesRequest) (response *DeleteVpnGatewayRoutesResponse, err error) { + return c.DeleteVpnGatewayRoutesWithContext(context.Background(), request) +} + +// DeleteVpnGatewayRoutes +// 本接口(DeleteVpnGatewayRoutes)用于删除VPN网关路由 +// +// 可能返回的错误码: +// +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DeleteVpnGatewayRoutesWithContext(ctx context.Context, request *DeleteVpnGatewayRoutesRequest) (response *DeleteVpnGatewayRoutesResponse, err error) { if request == nil { request = NewDeleteVpnGatewayRoutesRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpnGatewayRoutes require credential") + } + + request.SetContext(ctx) + response = NewDeleteVpnGatewayRoutesResponse() err = c.Send(request, response) return } -// DeleteVpnGatewayRoutes -// 本接口(DeleteVpnGatewayCcnRoutes)用于删除VPN网关路由 +func NewDeleteVpnGatewaySslClientRequest() (request *DeleteVpnGatewaySslClientRequest) { + request = &DeleteVpnGatewaySslClientRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpnGatewaySslClient") + + return +} + +func NewDeleteVpnGatewaySslClientResponse() (response *DeleteVpnGatewaySslClientResponse) { + response = &DeleteVpnGatewaySslClientResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteVpnGatewaySslClient +// 本接口(DeleteVpnGatewaySslClient)用于删除SSL-VPN-CLIENT。 // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" +// INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DeleteVpnGatewayRoutesWithContext(ctx context.Context, request *DeleteVpnGatewayRoutesRequest) (response *DeleteVpnGatewayRoutesResponse, err error) { +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DeleteVpnGatewaySslClient(request *DeleteVpnGatewaySslClientRequest) (response *DeleteVpnGatewaySslClientResponse, err error) { + return c.DeleteVpnGatewaySslClientWithContext(context.Background(), request) +} + +// DeleteVpnGatewaySslClient +// 本接口(DeleteVpnGatewaySslClient)用于删除SSL-VPN-CLIENT。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DeleteVpnGatewaySslClientWithContext(ctx context.Context, request *DeleteVpnGatewaySslClientRequest) (response *DeleteVpnGatewaySslClientResponse, err error) { if request == nil { - request = NewDeleteVpnGatewayRoutesRequest() + request = NewDeleteVpnGatewaySslClientRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpnGatewaySslClient require credential") } + request.SetContext(ctx) - response = NewDeleteVpnGatewayRoutesResponse() + response = NewDeleteVpnGatewaySslClientResponse() + err = c.Send(request, response) + return +} + +func NewDeleteVpnGatewaySslServerRequest() (request *DeleteVpnGatewaySslServerRequest) { + request = &DeleteVpnGatewaySslServerRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DeleteVpnGatewaySslServer") + + return +} + +func NewDeleteVpnGatewaySslServerResponse() (response *DeleteVpnGatewaySslServerResponse) { + response = &DeleteVpnGatewaySslServerResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DeleteVpnGatewaySslServer +// 删除SSL-VPN-SERVER 实例 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DeleteVpnGatewaySslServer(request *DeleteVpnGatewaySslServerRequest) (response *DeleteVpnGatewaySslServerResponse, err error) { + return c.DeleteVpnGatewaySslServerWithContext(context.Background(), request) +} + +// DeleteVpnGatewaySslServer +// 删除SSL-VPN-SERVER 实例 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DeleteVpnGatewaySslServerWithContext(ctx context.Context, request *DeleteVpnGatewaySslServerRequest) (response *DeleteVpnGatewaySslServerResponse, err error) { + if request == nil { + request = NewDeleteVpnGatewaySslServerRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DeleteVpnGatewaySslServer require credential") + } + + request.SetContext(ctx) + + response = NewDeleteVpnGatewaySslServerResponse() err = c.Send(request, response) return } @@ -6500,6 +8484,7 @@ func NewDescribeAccountAttributesRequest() (request *DescribeAccountAttributesRe request = &DescribeAccountAttributesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAccountAttributes") return @@ -6517,17 +8502,9 @@ func NewDescribeAccountAttributesResponse() (response *DescribeAccountAttributes // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// RESOURCENOTFOUND = "ResourceNotFound" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" func (c *Client) DescribeAccountAttributes(request *DescribeAccountAttributesRequest) (response *DescribeAccountAttributesResponse, err error) { - if request == nil { - request = NewDescribeAccountAttributesRequest() - } - - response = NewDescribeAccountAttributesResponse() - err = c.Send(request, response) - return + return c.DescribeAccountAttributesWithContext(context.Background(), request) } // DescribeAccountAttributes @@ -6535,13 +8512,16 @@ func (c *Client) DescribeAccountAttributes(request *DescribeAccountAttributesReq // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// RESOURCENOTFOUND = "ResourceNotFound" +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" func (c *Client) DescribeAccountAttributesWithContext(ctx context.Context, request *DescribeAccountAttributesRequest) (response *DescribeAccountAttributesResponse, err error) { if request == nil { request = NewDescribeAccountAttributesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAccountAttributes require credential") + } + request.SetContext(ctx) response = NewDescribeAccountAttributesResponse() @@ -6553,6 +8533,7 @@ func NewDescribeAddressQuotaRequest() (request *DescribeAddressQuotaRequest) { request = &DescribeAddressQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAddressQuota") return @@ -6571,14 +8552,9 @@ func NewDescribeAddressQuotaResponse() (response *DescribeAddressQuotaResponse) // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddressQuota(request *DescribeAddressQuotaRequest) (response *DescribeAddressQuotaResponse, err error) { - if request == nil { - request = NewDescribeAddressQuotaRequest() - } - - response = NewDescribeAddressQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeAddressQuotaWithContext(context.Background(), request) } // DescribeAddressQuota @@ -6587,10 +8563,16 @@ func (c *Client) DescribeAddressQuota(request *DescribeAddressQuotaRequest) (res // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddressQuotaWithContext(ctx context.Context, request *DescribeAddressQuotaRequest) (response *DescribeAddressQuotaResponse, err error) { if request == nil { request = NewDescribeAddressQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAddressQuota require credential") + } + request.SetContext(ctx) response = NewDescribeAddressQuotaResponse() @@ -6602,6 +8584,7 @@ func NewDescribeAddressTemplateGroupsRequest() (request *DescribeAddressTemplate request = &DescribeAddressTemplateGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAddressTemplateGroups") return @@ -6615,7 +8598,7 @@ func NewDescribeAddressTemplateGroupsResponse() (response *DescribeAddressTempla } // DescribeAddressTemplateGroups -// 本接口(DescribeAddressTemplateGroups)用于查询IP地址模板集合 +// 本接口(DescribeAddressTemplateGroups)用于查询IP地址模板集合。 // // 可能返回的错误码: // @@ -6623,17 +8606,11 @@ func NewDescribeAddressTemplateGroupsResponse() (response *DescribeAddressTempla // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeAddressTemplateGroups(request *DescribeAddressTemplateGroupsRequest) (response *DescribeAddressTemplateGroupsResponse, err error) { - if request == nil { - request = NewDescribeAddressTemplateGroupsRequest() - } - - response = NewDescribeAddressTemplateGroupsResponse() - err = c.Send(request, response) - return + return c.DescribeAddressTemplateGroupsWithContext(context.Background(), request) } // DescribeAddressTemplateGroups -// 本接口(DescribeAddressTemplateGroups)用于查询IP地址模板集合 +// 本接口(DescribeAddressTemplateGroups)用于查询IP地址模板集合。 // // 可能返回的错误码: // @@ -6644,6 +8621,11 @@ func (c *Client) DescribeAddressTemplateGroupsWithContext(ctx context.Context, r if request == nil { request = NewDescribeAddressTemplateGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAddressTemplateGroups require credential") + } + request.SetContext(ctx) response = NewDescribeAddressTemplateGroupsResponse() @@ -6655,6 +8637,7 @@ func NewDescribeAddressTemplatesRequest() (request *DescribeAddressTemplatesRequ request = &DescribeAddressTemplatesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAddressTemplates") return @@ -6668,7 +8651,7 @@ func NewDescribeAddressTemplatesResponse() (response *DescribeAddressTemplatesRe } // DescribeAddressTemplates -// 本接口(DescribeAddressTemplates)用于查询IP地址模板 +// 本接口(DescribeAddressTemplates)用于查询IP地址模板。 // // 可能返回的错误码: // @@ -6676,18 +8659,13 @@ func NewDescribeAddressTemplatesResponse() (response *DescribeAddressTemplatesRe // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddressTemplates(request *DescribeAddressTemplatesRequest) (response *DescribeAddressTemplatesResponse, err error) { - if request == nil { - request = NewDescribeAddressTemplatesRequest() - } - - response = NewDescribeAddressTemplatesResponse() - err = c.Send(request, response) - return + return c.DescribeAddressTemplatesWithContext(context.Background(), request) } // DescribeAddressTemplates -// 本接口(DescribeAddressTemplates)用于查询IP地址模板 +// 本接口(DescribeAddressTemplates)用于查询IP地址模板。 // // 可能返回的错误码: // @@ -6695,10 +8673,16 @@ func (c *Client) DescribeAddressTemplates(request *DescribeAddressTemplatesReque // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddressTemplatesWithContext(ctx context.Context, request *DescribeAddressTemplatesRequest) (response *DescribeAddressTemplatesResponse, err error) { if request == nil { request = NewDescribeAddressTemplatesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAddressTemplates require credential") + } + request.SetContext(ctx) response = NewDescribeAddressTemplatesResponse() @@ -6710,6 +8694,7 @@ func NewDescribeAddressesRequest() (request *DescribeAddressesRequest) { request = &DescribeAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAddresses") return @@ -6733,14 +8718,12 @@ func NewDescribeAddressesResponse() (response *DescribeAddressesResponse) { // INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_NETWORKINTERFACEIDMALFORMED = "InvalidParameterValue.NetworkInterfaceIdMalformed" +// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" +// LIMITEXCEEDED_NUMBEROFFILTERS = "LimitExceeded.NumberOfFilters" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddresses(request *DescribeAddressesRequest) (response *DescribeAddressesResponse, err error) { - if request == nil { - request = NewDescribeAddressesRequest() - } - - response = NewDescribeAddressesResponse() - err = c.Send(request, response) - return + return c.DescribeAddressesWithContext(context.Background(), request) } // DescribeAddresses @@ -6754,11 +8737,20 @@ func (c *Client) DescribeAddresses(request *DescribeAddressesRequest) (response // INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_NETWORKINTERFACEIDMALFORMED = "InvalidParameterValue.NetworkInterfaceIdMalformed" +// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" +// LIMITEXCEEDED_NUMBEROFFILTERS = "LimitExceeded.NumberOfFilters" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeAddressesWithContext(ctx context.Context, request *DescribeAddressesRequest) (response *DescribeAddressesResponse, err error) { if request == nil { request = NewDescribeAddressesRequest() } - request.SetContext(ctx) + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAddresses require credential") + } + + request.SetContext(ctx) response = NewDescribeAddressesResponse() err = c.Send(request, response) @@ -6769,6 +8761,7 @@ func NewDescribeAssistantCidrRequest() (request *DescribeAssistantCidrRequest) { request = &DescribeAssistantCidrRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeAssistantCidr") return @@ -6782,29 +8775,25 @@ func NewDescribeAssistantCidrResponse() (response *DescribeAssistantCidrResponse } // DescribeAssistantCidr -// 本接口(DescribeAssistantCidr)用于查询辅助CIDR列表。(接口灰度中,如需使用请提工单。) +// 本接口(DescribeAssistantCidr)用于查询辅助CIDR列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeAssistantCidr(request *DescribeAssistantCidrRequest) (response *DescribeAssistantCidrResponse, err error) { - if request == nil { - request = NewDescribeAssistantCidrRequest() - } - - response = NewDescribeAssistantCidrResponse() - err = c.Send(request, response) - return + return c.DescribeAssistantCidrWithContext(context.Background(), request) } // DescribeAssistantCidr -// 本接口(DescribeAssistantCidr)用于查询辅助CIDR列表。(接口灰度中,如需使用请提工单。) +// 本接口(DescribeAssistantCidr)用于查询辅助CIDR列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" @@ -6813,6 +8802,11 @@ func (c *Client) DescribeAssistantCidrWithContext(ctx context.Context, request * if request == nil { request = NewDescribeAssistantCidrRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeAssistantCidr require credential") + } + request.SetContext(ctx) response = NewDescribeAssistantCidrResponse() @@ -6824,6 +8818,7 @@ func NewDescribeBandwidthPackageBillUsageRequest() (request *DescribeBandwidthPa request = &DescribeBandwidthPackageBillUsageRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeBandwidthPackageBillUsage") return @@ -6845,13 +8840,7 @@ func NewDescribeBandwidthPackageBillUsageResponse() (response *DescribeBandwidth // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" func (c *Client) DescribeBandwidthPackageBillUsage(request *DescribeBandwidthPackageBillUsageRequest) (response *DescribeBandwidthPackageBillUsageResponse, err error) { - if request == nil { - request = NewDescribeBandwidthPackageBillUsageRequest() - } - - response = NewDescribeBandwidthPackageBillUsageResponse() - err = c.Send(request, response) - return + return c.DescribeBandwidthPackageBillUsageWithContext(context.Background(), request) } // DescribeBandwidthPackageBillUsage @@ -6866,6 +8855,11 @@ func (c *Client) DescribeBandwidthPackageBillUsageWithContext(ctx context.Contex if request == nil { request = NewDescribeBandwidthPackageBillUsageRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeBandwidthPackageBillUsage require credential") + } + request.SetContext(ctx) response = NewDescribeBandwidthPackageBillUsageResponse() @@ -6877,6 +8871,7 @@ func NewDescribeBandwidthPackageQuotaRequest() (request *DescribeBandwidthPackag request = &DescribeBandwidthPackageQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeBandwidthPackageQuota") return @@ -6894,17 +8889,9 @@ func NewDescribeBandwidthPackageQuotaResponse() (response *DescribeBandwidthPack // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" -// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" -// UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" func (c *Client) DescribeBandwidthPackageQuota(request *DescribeBandwidthPackageQuotaRequest) (response *DescribeBandwidthPackageQuotaResponse, err error) { - if request == nil { - request = NewDescribeBandwidthPackageQuotaRequest() - } - - response = NewDescribeBandwidthPackageQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeBandwidthPackageQuotaWithContext(context.Background(), request) } // DescribeBandwidthPackageQuota @@ -6912,13 +8899,16 @@ func (c *Client) DescribeBandwidthPackageQuota(request *DescribeBandwidthPackage // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" -// INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" -// UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" +// INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" func (c *Client) DescribeBandwidthPackageQuotaWithContext(ctx context.Context, request *DescribeBandwidthPackageQuotaRequest) (response *DescribeBandwidthPackageQuotaResponse, err error) { if request == nil { request = NewDescribeBandwidthPackageQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeBandwidthPackageQuota require credential") + } + request.SetContext(ctx) response = NewDescribeBandwidthPackageQuotaResponse() @@ -6930,6 +8920,7 @@ func NewDescribeBandwidthPackageResourcesRequest() (request *DescribeBandwidthPa request = &DescribeBandwidthPackageResourcesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeBandwidthPackageResources") return @@ -6948,17 +8939,12 @@ func NewDescribeBandwidthPackageResourcesResponse() (response *DescribeBandwidth // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" -// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" +// INVALIDPARAMETERVALUE_ILLEGAL = "InvalidParameterValue.Illegal" func (c *Client) DescribeBandwidthPackageResources(request *DescribeBandwidthPackageResourcesRequest) (response *DescribeBandwidthPackageResourcesResponse, err error) { - if request == nil { - request = NewDescribeBandwidthPackageResourcesRequest() - } - - response = NewDescribeBandwidthPackageResourcesResponse() - err = c.Send(request, response) - return + return c.DescribeBandwidthPackageResourcesWithContext(context.Background(), request) } // DescribeBandwidthPackageResources @@ -6967,13 +8953,19 @@ func (c *Client) DescribeBandwidthPackageResources(request *DescribeBandwidthPac // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" -// INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" +// INVALIDPARAMETERVALUE_ILLEGAL = "InvalidParameterValue.Illegal" func (c *Client) DescribeBandwidthPackageResourcesWithContext(ctx context.Context, request *DescribeBandwidthPackageResourcesRequest) (response *DescribeBandwidthPackageResourcesResponse, err error) { if request == nil { request = NewDescribeBandwidthPackageResourcesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeBandwidthPackageResources require credential") + } + request.SetContext(ctx) response = NewDescribeBandwidthPackageResourcesResponse() @@ -6985,6 +8977,7 @@ func NewDescribeBandwidthPackagesRequest() (request *DescribeBandwidthPackagesRe request = &DescribeBandwidthPackagesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeBandwidthPackages") return @@ -7002,17 +8995,13 @@ func NewDescribeBandwidthPackagesResponse() (response *DescribeBandwidthPackages // // 可能返回的错误码: // +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_INVALIDBANDWIDTHPACKAGECHARGETYPE = "InvalidParameterValue.InvalidBandwidthPackageChargeType" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeBandwidthPackages(request *DescribeBandwidthPackagesRequest) (response *DescribeBandwidthPackagesResponse, err error) { - if request == nil { - request = NewDescribeBandwidthPackagesRequest() - } - - response = NewDescribeBandwidthPackagesResponse() - err = c.Send(request, response) - return + return c.DescribeBandwidthPackagesWithContext(context.Background(), request) } // DescribeBandwidthPackages @@ -7020,13 +9009,20 @@ func (c *Client) DescribeBandwidthPackages(request *DescribeBandwidthPackagesReq // // 可能返回的错误码: // +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_INVALIDBANDWIDTHPACKAGECHARGETYPE = "InvalidParameterValue.InvalidBandwidthPackageChargeType" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeBandwidthPackagesWithContext(ctx context.Context, request *DescribeBandwidthPackagesRequest) (response *DescribeBandwidthPackagesResponse, err error) { if request == nil { request = NewDescribeBandwidthPackagesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeBandwidthPackages require credential") + } + request.SetContext(ctx) response = NewDescribeBandwidthPackagesResponse() @@ -7038,6 +9034,7 @@ func NewDescribeCcnAttachedInstancesRequest() (request *DescribeCcnAttachedInsta request = &DescribeCcnAttachedInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnAttachedInstances") return @@ -7061,15 +9058,10 @@ func NewDescribeCcnAttachedInstancesResponse() (response *DescribeCcnAttachedIns // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" func (c *Client) DescribeCcnAttachedInstances(request *DescribeCcnAttachedInstancesRequest) (response *DescribeCcnAttachedInstancesResponse, err error) { - if request == nil { - request = NewDescribeCcnAttachedInstancesRequest() - } - - response = NewDescribeCcnAttachedInstancesResponse() - err = c.Send(request, response) - return + return c.DescribeCcnAttachedInstancesWithContext(context.Background(), request) } // DescribeCcnAttachedInstances @@ -7083,11 +9075,17 @@ func (c *Client) DescribeCcnAttachedInstances(request *DescribeCcnAttachedInstan // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" func (c *Client) DescribeCcnAttachedInstancesWithContext(ctx context.Context, request *DescribeCcnAttachedInstancesRequest) (response *DescribeCcnAttachedInstancesResponse, err error) { if request == nil { request = NewDescribeCcnAttachedInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCcnAttachedInstances require credential") + } + request.SetContext(ctx) response = NewDescribeCcnAttachedInstancesResponse() @@ -7099,6 +9097,7 @@ func NewDescribeCcnRegionBandwidthLimitsRequest() (request *DescribeCcnRegionBan request = &DescribeCcnRegionBandwidthLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRegionBandwidthLimits") return @@ -7112,31 +9111,32 @@ func NewDescribeCcnRegionBandwidthLimitsResponse() (response *DescribeCcnRegionB } // DescribeCcnRegionBandwidthLimits -// 本接口(DescribeCcnRegionBandwidthLimits)用于查询云联网各地域出带宽上限,该接口只返回已关联网络实例包含的地域 +// 本接口(DescribeCcnRegionBandwidthLimits)用于查询云联网各地域出带宽上限,该接口只返回已关联网络实例包含的地域。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeCcnRegionBandwidthLimits(request *DescribeCcnRegionBandwidthLimitsRequest) (response *DescribeCcnRegionBandwidthLimitsResponse, err error) { - if request == nil { - request = NewDescribeCcnRegionBandwidthLimitsRequest() - } - - response = NewDescribeCcnRegionBandwidthLimitsResponse() - err = c.Send(request, response) - return + return c.DescribeCcnRegionBandwidthLimitsWithContext(context.Background(), request) } // DescribeCcnRegionBandwidthLimits -// 本接口(DescribeCcnRegionBandwidthLimits)用于查询云联网各地域出带宽上限,该接口只返回已关联网络实例包含的地域 +// 本接口(DescribeCcnRegionBandwidthLimits)用于查询云联网各地域出带宽上限,该接口只返回已关联网络实例包含的地域。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeCcnRegionBandwidthLimitsWithContext(ctx context.Context, request *DescribeCcnRegionBandwidthLimitsRequest) (response *DescribeCcnRegionBandwidthLimitsResponse, err error) { if request == nil { request = NewDescribeCcnRegionBandwidthLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCcnRegionBandwidthLimits require credential") + } + request.SetContext(ctx) response = NewDescribeCcnRegionBandwidthLimitsResponse() @@ -7148,6 +9148,7 @@ func NewDescribeCcnRoutesRequest() (request *DescribeCcnRoutesRequest) { request = &DescribeCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRoutes") return @@ -7161,7 +9162,7 @@ func NewDescribeCcnRoutesResponse() (response *DescribeCcnRoutesResponse) { } // DescribeCcnRoutes -// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由 +// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。 // // 可能返回的错误码: // @@ -7169,18 +9170,13 @@ func NewDescribeCcnRoutesResponse() (response *DescribeCcnRoutesResponse) { // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" func (c *Client) DescribeCcnRoutes(request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) { - if request == nil { - request = NewDescribeCcnRoutesRequest() - } - - response = NewDescribeCcnRoutesResponse() - err = c.Send(request, response) - return + return c.DescribeCcnRoutesWithContext(context.Background(), request) } // DescribeCcnRoutes -// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由 +// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。 // // 可能返回的错误码: // @@ -7188,10 +9184,16 @@ func (c *Client) DescribeCcnRoutes(request *DescribeCcnRoutesRequest) (response // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" func (c *Client) DescribeCcnRoutesWithContext(ctx context.Context, request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) { if request == nil { request = NewDescribeCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCcnRoutes require credential") + } + request.SetContext(ctx) response = NewDescribeCcnRoutesResponse() @@ -7203,6 +9205,7 @@ func NewDescribeCcnsRequest() (request *DescribeCcnsRequest) { request = &DescribeCcnsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcns") return @@ -7222,6 +9225,7 @@ func NewDescribeCcnsResponse() (response *DescribeCcnsResponse) { // // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -7229,14 +9233,9 @@ func NewDescribeCcnsResponse() (response *DescribeCcnsResponse) { // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeCcns(request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) { - if request == nil { - request = NewDescribeCcnsRequest() - } - - response = NewDescribeCcnsResponse() - err = c.Send(request, response) - return + return c.DescribeCcnsWithContext(context.Background(), request) } // DescribeCcns @@ -7246,6 +9245,7 @@ func (c *Client) DescribeCcns(request *DescribeCcnsRequest) (response *DescribeC // // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" @@ -7253,10 +9253,16 @@ func (c *Client) DescribeCcns(request *DescribeCcnsRequest) (response *DescribeC // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeCcnsWithContext(ctx context.Context, request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) { if request == nil { request = NewDescribeCcnsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCcns require credential") + } + request.SetContext(ctx) response = NewDescribeCcnsResponse() @@ -7268,6 +9274,7 @@ func NewDescribeClassicLinkInstancesRequest() (request *DescribeClassicLinkInsta request = &DescribeClassicLinkInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeClassicLinkInstances") return @@ -7281,7 +9288,7 @@ func NewDescribeClassicLinkInstancesResponse() (response *DescribeClassicLinkIns } // DescribeClassicLinkInstances -// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。 +// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。 // // 可能返回的错误码: // @@ -7289,30 +9296,102 @@ func NewDescribeClassicLinkInstancesResponse() (response *DescribeClassicLinkIns // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeClassicLinkInstances(request *DescribeClassicLinkInstancesRequest) (response *DescribeClassicLinkInstancesResponse, err error) { + return c.DescribeClassicLinkInstancesWithContext(context.Background(), request) +} + +// DescribeClassicLinkInstances +// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +func (c *Client) DescribeClassicLinkInstancesWithContext(ctx context.Context, request *DescribeClassicLinkInstancesRequest) (response *DescribeClassicLinkInstancesResponse, err error) { if request == nil { request = NewDescribeClassicLinkInstancesRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DescribeClassicLinkInstances require credential") + } + + request.SetContext(ctx) + response = NewDescribeClassicLinkInstancesResponse() err = c.Send(request, response) return } -// DescribeClassicLinkInstances -// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。 +func NewDescribeCrossBorderCcnRegionBandwidthLimitsRequest() (request *DescribeCrossBorderCcnRegionBandwidthLimitsRequest) { + request = &DescribeCrossBorderCcnRegionBandwidthLimitsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCrossBorderCcnRegionBandwidthLimits") + + return +} + +func NewDescribeCrossBorderCcnRegionBandwidthLimitsResponse() (response *DescribeCrossBorderCcnRegionBandwidthLimitsResponse) { + response = &DescribeCrossBorderCcnRegionBandwidthLimitsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeCrossBorderCcnRegionBandwidthLimits +// 本接口(DescribeCrossBorderCcnRegionBandwidthLimits)用于获取要锁定的限速实例列表。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(DescribeTenantCcns) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) DescribeCrossBorderCcnRegionBandwidthLimits(request *DescribeCrossBorderCcnRegionBandwidthLimitsRequest) (response *DescribeCrossBorderCcnRegionBandwidthLimitsResponse, err error) { + return c.DescribeCrossBorderCcnRegionBandwidthLimitsWithContext(context.Background(), request) +} + +// DescribeCrossBorderCcnRegionBandwidthLimits +// 本接口(DescribeCrossBorderCcnRegionBandwidthLimits)用于获取要锁定的限速实例列表。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(DescribeTenantCcns) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -func (c *Client) DescribeClassicLinkInstancesWithContext(ctx context.Context, request *DescribeClassicLinkInstancesRequest) (response *DescribeClassicLinkInstancesResponse, err error) { +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) DescribeCrossBorderCcnRegionBandwidthLimitsWithContext(ctx context.Context, request *DescribeCrossBorderCcnRegionBandwidthLimitsRequest) (response *DescribeCrossBorderCcnRegionBandwidthLimitsResponse, err error) { if request == nil { - request = NewDescribeClassicLinkInstancesRequest() + request = NewDescribeCrossBorderCcnRegionBandwidthLimitsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCrossBorderCcnRegionBandwidthLimits require credential") } + request.SetContext(ctx) - response = NewDescribeClassicLinkInstancesResponse() + response = NewDescribeCrossBorderCcnRegionBandwidthLimitsResponse() err = c.Send(request, response) return } @@ -7321,6 +9400,7 @@ func NewDescribeCrossBorderComplianceRequest() (request *DescribeCrossBorderComp request = &DescribeCrossBorderComplianceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCrossBorderCompliance") return @@ -7341,15 +9421,10 @@ func NewDescribeCrossBorderComplianceResponse() (response *DescribeCrossBorderCo // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeCrossBorderCompliance(request *DescribeCrossBorderComplianceRequest) (response *DescribeCrossBorderComplianceResponse, err error) { - if request == nil { - request = NewDescribeCrossBorderComplianceRequest() - } - - response = NewDescribeCrossBorderComplianceResponse() - err = c.Send(request, response) - return + return c.DescribeCrossBorderComplianceWithContext(context.Background(), request) } // DescribeCrossBorderCompliance @@ -7360,11 +9435,17 @@ func (c *Client) DescribeCrossBorderCompliance(request *DescribeCrossBorderCompl // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeCrossBorderComplianceWithContext(ctx context.Context, request *DescribeCrossBorderComplianceRequest) (response *DescribeCrossBorderComplianceResponse, err error) { if request == nil { request = NewDescribeCrossBorderComplianceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCrossBorderCompliance require credential") + } + request.SetContext(ctx) response = NewDescribeCrossBorderComplianceResponse() @@ -7372,101 +9453,204 @@ func (c *Client) DescribeCrossBorderComplianceWithContext(ctx context.Context, r return } -func NewDescribeCustomerGatewayVendorsRequest() (request *DescribeCustomerGatewayVendorsRequest) { - request = &DescribeCustomerGatewayVendorsRequest{ +func NewDescribeCrossBorderFlowMonitorRequest() (request *DescribeCrossBorderFlowMonitorRequest) { + request = &DescribeCrossBorderFlowMonitorRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeCustomerGatewayVendors") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCrossBorderFlowMonitor") return } -func NewDescribeCustomerGatewayVendorsResponse() (response *DescribeCustomerGatewayVendorsResponse) { - response = &DescribeCustomerGatewayVendorsResponse{ +func NewDescribeCrossBorderFlowMonitorResponse() (response *DescribeCrossBorderFlowMonitorResponse) { + response = &DescribeCrossBorderFlowMonitorResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeCustomerGatewayVendors -// 本接口(DescribeCustomerGatewayVendors)用于查询可支持的对端网关厂商信息。 +// DescribeCrossBorderFlowMonitor +// 本接口(DescribeCrossBorderFlowMonitor)用于查询跨境带宽监控数据,该接口目前只提供给服务商联通使用。 // // 可能返回的错误码: // +// INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -func (c *Client) DescribeCustomerGatewayVendors(request *DescribeCustomerGatewayVendorsRequest) (response *DescribeCustomerGatewayVendorsResponse, err error) { - if request == nil { - request = NewDescribeCustomerGatewayVendorsRequest() - } - - response = NewDescribeCustomerGatewayVendorsResponse() - err = c.Send(request, response) - return +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_CCNINSTANCEACCOUNTNOTAPPROVEDBYUNICOM = "UnsupportedOperation.CcnInstanceAccountNotApprovedByUnicom" +// UNSUPPORTEDOPERATION_CURRENTACCOUNTISNOTUNICOMACCOUNT = "UnsupportedOperation.CurrentAccountIsNotUnicomAccount" +// UNSUPPORTEDOPERATION_CURRENTQUERYREGIONISNOTCROSSBORDER = "UnsupportedOperation.CurrentQueryRegionIsNotCrossBorder" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" +func (c *Client) DescribeCrossBorderFlowMonitor(request *DescribeCrossBorderFlowMonitorRequest) (response *DescribeCrossBorderFlowMonitorResponse, err error) { + return c.DescribeCrossBorderFlowMonitorWithContext(context.Background(), request) } -// DescribeCustomerGatewayVendors -// 本接口(DescribeCustomerGatewayVendors)用于查询可支持的对端网关厂商信息。 +// DescribeCrossBorderFlowMonitor +// 本接口(DescribeCrossBorderFlowMonitor)用于查询跨境带宽监控数据,该接口目前只提供给服务商联通使用。 // // 可能返回的错误码: // +// INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -func (c *Client) DescribeCustomerGatewayVendorsWithContext(ctx context.Context, request *DescribeCustomerGatewayVendorsRequest) (response *DescribeCustomerGatewayVendorsResponse, err error) { +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_CCNINSTANCEACCOUNTNOTAPPROVEDBYUNICOM = "UnsupportedOperation.CcnInstanceAccountNotApprovedByUnicom" +// UNSUPPORTEDOPERATION_CURRENTACCOUNTISNOTUNICOMACCOUNT = "UnsupportedOperation.CurrentAccountIsNotUnicomAccount" +// UNSUPPORTEDOPERATION_CURRENTQUERYREGIONISNOTCROSSBORDER = "UnsupportedOperation.CurrentQueryRegionIsNotCrossBorder" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" +func (c *Client) DescribeCrossBorderFlowMonitorWithContext(ctx context.Context, request *DescribeCrossBorderFlowMonitorRequest) (response *DescribeCrossBorderFlowMonitorResponse, err error) { if request == nil { - request = NewDescribeCustomerGatewayVendorsRequest() + request = NewDescribeCrossBorderFlowMonitorRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCrossBorderFlowMonitor require credential") } + request.SetContext(ctx) - response = NewDescribeCustomerGatewayVendorsResponse() + response = NewDescribeCrossBorderFlowMonitorResponse() err = c.Send(request, response) return } -func NewDescribeCustomerGatewaysRequest() (request *DescribeCustomerGatewaysRequest) { - request = &DescribeCustomerGatewaysRequest{ +func NewDescribeCustomerGatewayVendorsRequest() (request *DescribeCustomerGatewayVendorsRequest) { + request = &DescribeCustomerGatewayVendorsRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeCustomerGateways") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCustomerGatewayVendors") return } -func NewDescribeCustomerGatewaysResponse() (response *DescribeCustomerGatewaysResponse) { - response = &DescribeCustomerGatewaysResponse{ - BaseResponse: &tchttp.BaseResponse{}, +func NewDescribeCustomerGatewayVendorsResponse() (response *DescribeCustomerGatewayVendorsResponse) { + response = &DescribeCustomerGatewayVendorsResponse{ + BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeCustomerGateways -// 本接口(DescribeCustomerGateways)用于查询对端网关列表。 +// DescribeCustomerGatewayVendors +// 本接口(DescribeCustomerGatewayVendors)用于查询可支持的对端网关厂商信息。 // // 可能返回的错误码: // +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeCustomerGateways(request *DescribeCustomerGatewaysRequest) (response *DescribeCustomerGatewaysResponse, err error) { +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_CCNINSTANCEACCOUNTNOTAPPROVEDBYUNICOM = "UnsupportedOperation.CcnInstanceAccountNotApprovedByUnicom" +// UNSUPPORTEDOPERATION_CURRENTACCOUNTISNOTUNICOMACCOUNT = "UnsupportedOperation.CurrentAccountIsNotUnicomAccount" +// UNSUPPORTEDOPERATION_CURRENTQUERYREGIONISNOTCROSSBORDER = "UnsupportedOperation.CurrentQueryRegionIsNotCrossBorder" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" +func (c *Client) DescribeCustomerGatewayVendors(request *DescribeCustomerGatewayVendorsRequest) (response *DescribeCustomerGatewayVendorsResponse, err error) { + return c.DescribeCustomerGatewayVendorsWithContext(context.Background(), request) +} + +// DescribeCustomerGatewayVendors +// 本接口(DescribeCustomerGatewayVendors)用于查询可支持的对端网关厂商信息。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_CCNINSTANCEACCOUNTNOTAPPROVEDBYUNICOM = "UnsupportedOperation.CcnInstanceAccountNotApprovedByUnicom" +// UNSUPPORTEDOPERATION_CURRENTACCOUNTISNOTUNICOMACCOUNT = "UnsupportedOperation.CurrentAccountIsNotUnicomAccount" +// UNSUPPORTEDOPERATION_CURRENTQUERYREGIONISNOTCROSSBORDER = "UnsupportedOperation.CurrentQueryRegionIsNotCrossBorder" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +// UNSUPPORTEDOPERATION_UNABLECROSSBORDER = "UnsupportedOperation.UnableCrossBorder" +func (c *Client) DescribeCustomerGatewayVendorsWithContext(ctx context.Context, request *DescribeCustomerGatewayVendorsRequest) (response *DescribeCustomerGatewayVendorsResponse, err error) { if request == nil { - request = NewDescribeCustomerGatewaysRequest() + request = NewDescribeCustomerGatewayVendorsRequest() } - response = NewDescribeCustomerGatewaysResponse() + if c.GetCredential() == nil { + return nil, errors.New("DescribeCustomerGatewayVendors require credential") + } + + request.SetContext(ctx) + + response = NewDescribeCustomerGatewayVendorsResponse() err = c.Send(request, response) return } +func NewDescribeCustomerGatewaysRequest() (request *DescribeCustomerGatewaysRequest) { + request = &DescribeCustomerGatewaysRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeCustomerGateways") + + return +} + +func NewDescribeCustomerGatewaysResponse() (response *DescribeCustomerGatewaysResponse) { + response = &DescribeCustomerGatewaysResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeCustomerGateways +// 本接口(DescribeCustomerGateways)用于查询对端网关列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeCustomerGateways(request *DescribeCustomerGatewaysRequest) (response *DescribeCustomerGatewaysResponse, err error) { + return c.DescribeCustomerGatewaysWithContext(context.Background(), request) +} + // DescribeCustomerGateways // 本接口(DescribeCustomerGateways)用于查询对端网关列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeCustomerGatewaysWithContext(ctx context.Context, request *DescribeCustomerGatewaysRequest) (response *DescribeCustomerGatewaysResponse, err error) { if request == nil { request = NewDescribeCustomerGatewaysRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeCustomerGateways require credential") + } + request.SetContext(ctx) response = NewDescribeCustomerGatewaysResponse() @@ -7478,6 +9662,7 @@ func NewDescribeDhcpIpsRequest() (request *DescribeDhcpIpsRequest) { request = &DescribeDhcpIpsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeDhcpIps") return @@ -7496,18 +9681,14 @@ func NewDescribeDhcpIpsResponse() (response *DescribeDhcpIpsResponse) { // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeDhcpIps(request *DescribeDhcpIpsRequest) (response *DescribeDhcpIpsResponse, err error) { - if request == nil { - request = NewDescribeDhcpIpsRequest() - } - - response = NewDescribeDhcpIpsResponse() - err = c.Send(request, response) - return + return c.DescribeDhcpIpsWithContext(context.Background(), request) } // DescribeDhcpIps @@ -7516,6 +9697,8 @@ func (c *Client) DescribeDhcpIps(request *DescribeDhcpIpsRequest) (response *Des // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" @@ -7524,6 +9707,11 @@ func (c *Client) DescribeDhcpIpsWithContext(ctx context.Context, request *Descri if request == nil { request = NewDescribeDhcpIpsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDhcpIps require credential") + } + request.SetContext(ctx) response = NewDescribeDhcpIpsResponse() @@ -7535,6 +9723,7 @@ func NewDescribeDirectConnectGatewayCcnRoutesRequest() (request *DescribeDirectC request = &DescribeDirectConnectGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeDirectConnectGatewayCcnRoutes") return @@ -7553,15 +9742,10 @@ func NewDescribeDirectConnectGatewayCcnRoutesResponse() (response *DescribeDirec // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeDirectConnectGatewayCcnRoutes(request *DescribeDirectConnectGatewayCcnRoutesRequest) (response *DescribeDirectConnectGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewDescribeDirectConnectGatewayCcnRoutesRequest() - } - - response = NewDescribeDirectConnectGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.DescribeDirectConnectGatewayCcnRoutesWithContext(context.Background(), request) } // DescribeDirectConnectGatewayCcnRoutes @@ -7570,11 +9754,17 @@ func (c *Client) DescribeDirectConnectGatewayCcnRoutes(request *DescribeDirectCo // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeDirectConnectGatewayCcnRoutesWithContext(ctx context.Context, request *DescribeDirectConnectGatewayCcnRoutesRequest) (response *DescribeDirectConnectGatewayCcnRoutesResponse, err error) { if request == nil { request = NewDescribeDirectConnectGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDirectConnectGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewDescribeDirectConnectGatewayCcnRoutesResponse() @@ -7586,6 +9776,7 @@ func NewDescribeDirectConnectGatewaysRequest() (request *DescribeDirectConnectGa request = &DescribeDirectConnectGatewaysRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeDirectConnectGateways") return @@ -7603,6 +9794,7 @@ func NewDescribeDirectConnectGatewaysResponse() (response *DescribeDirectConnect // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" @@ -7610,14 +9802,9 @@ func NewDescribeDirectConnectGatewaysResponse() (response *DescribeDirectConnect // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeDirectConnectGateways(request *DescribeDirectConnectGatewaysRequest) (response *DescribeDirectConnectGatewaysResponse, err error) { - if request == nil { - request = NewDescribeDirectConnectGatewaysRequest() - } - - response = NewDescribeDirectConnectGatewaysResponse() - err = c.Send(request, response) - return + return c.DescribeDirectConnectGatewaysWithContext(context.Background(), request) } // DescribeDirectConnectGateways @@ -7625,6 +9812,7 @@ func (c *Client) DescribeDirectConnectGateways(request *DescribeDirectConnectGat // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" @@ -7632,10 +9820,16 @@ func (c *Client) DescribeDirectConnectGateways(request *DescribeDirectConnectGat // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeDirectConnectGatewaysWithContext(ctx context.Context, request *DescribeDirectConnectGatewaysRequest) (response *DescribeDirectConnectGatewaysResponse, err error) { if request == nil { request = NewDescribeDirectConnectGatewaysRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeDirectConnectGateways require credential") + } + request.SetContext(ctx) response = NewDescribeDirectConnectGatewaysResponse() @@ -7647,6 +9841,7 @@ func NewDescribeFlowLogRequest() (request *DescribeFlowLogRequest) { request = &DescribeFlowLogRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeFlowLog") return @@ -7660,33 +9855,34 @@ func NewDescribeFlowLogResponse() (response *DescribeFlowLogResponse) { } // DescribeFlowLog -// 本接口(DescribeFlowLog)用于查询流日志实例信息 +// 本接口(DescribeFlowLog)用于查询流日志实例信息。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeFlowLog(request *DescribeFlowLogRequest) (response *DescribeFlowLogResponse, err error) { - if request == nil { - request = NewDescribeFlowLogRequest() - } - - response = NewDescribeFlowLogResponse() - err = c.Send(request, response) - return + return c.DescribeFlowLogWithContext(context.Background(), request) } // DescribeFlowLog -// 本接口(DescribeFlowLog)用于查询流日志实例信息 +// 本接口(DescribeFlowLog)用于查询流日志实例信息。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeFlowLogWithContext(ctx context.Context, request *DescribeFlowLogRequest) (response *DescribeFlowLogResponse, err error) { if request == nil { request = NewDescribeFlowLogRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeFlowLog require credential") + } + request.SetContext(ctx) response = NewDescribeFlowLogResponse() @@ -7698,6 +9894,7 @@ func NewDescribeFlowLogsRequest() (request *DescribeFlowLogsRequest) { request = &DescribeFlowLogsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeFlowLogs") return @@ -7711,35 +9908,36 @@ func NewDescribeFlowLogsResponse() (response *DescribeFlowLogsResponse) { } // DescribeFlowLogs -// 本接口(DescribeFlowLogs)用于查询获取流日志集合 +// 本接口(DescribeFlowLogs)用于查询获取流日志集合。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeFlowLogs(request *DescribeFlowLogsRequest) (response *DescribeFlowLogsResponse, err error) { - if request == nil { - request = NewDescribeFlowLogsRequest() - } - - response = NewDescribeFlowLogsResponse() - err = c.Send(request, response) - return + return c.DescribeFlowLogsWithContext(context.Background(), request) } // DescribeFlowLogs -// 本接口(DescribeFlowLogs)用于查询获取流日志集合 +// 本接口(DescribeFlowLogs)用于查询获取流日志集合。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeFlowLogsWithContext(ctx context.Context, request *DescribeFlowLogsRequest) (response *DescribeFlowLogsResponse, err error) { if request == nil { request = NewDescribeFlowLogsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeFlowLogs require credential") + } + request.SetContext(ctx) response = NewDescribeFlowLogsResponse() @@ -7751,6 +9949,7 @@ func NewDescribeGatewayFlowMonitorDetailRequest() (request *DescribeGatewayFlowM request = &DescribeGatewayFlowMonitorDetailRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeGatewayFlowMonitorDetail") return @@ -7772,17 +9971,12 @@ func NewDescribeGatewayFlowMonitorDetailResponse() (response *DescribeGatewayFlo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeGatewayFlowMonitorDetail(request *DescribeGatewayFlowMonitorDetailRequest) (response *DescribeGatewayFlowMonitorDetailResponse, err error) { - if request == nil { - request = NewDescribeGatewayFlowMonitorDetailRequest() - } - - response = NewDescribeGatewayFlowMonitorDetailResponse() - err = c.Send(request, response) - return + return c.DescribeGatewayFlowMonitorDetailWithContext(context.Background(), request) } // DescribeGatewayFlowMonitorDetail @@ -7794,6 +9988,7 @@ func (c *Client) DescribeGatewayFlowMonitorDetail(request *DescribeGatewayFlowMo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION = "UnsupportedOperation" @@ -7801,6 +9996,11 @@ func (c *Client) DescribeGatewayFlowMonitorDetailWithContext(ctx context.Context if request == nil { request = NewDescribeGatewayFlowMonitorDetailRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeGatewayFlowMonitorDetail require credential") + } + request.SetContext(ctx) response = NewDescribeGatewayFlowMonitorDetailResponse() @@ -7812,6 +10012,7 @@ func NewDescribeGatewayFlowQosRequest() (request *DescribeGatewayFlowQosRequest) request = &DescribeGatewayFlowQosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeGatewayFlowQos") return @@ -7830,16 +10031,12 @@ func NewDescribeGatewayFlowQosResponse() (response *DescribeGatewayFlowQosRespon // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) DescribeGatewayFlowQos(request *DescribeGatewayFlowQosRequest) (response *DescribeGatewayFlowQosResponse, err error) { - if request == nil { - request = NewDescribeGatewayFlowQosRequest() - } - - response = NewDescribeGatewayFlowQosResponse() - err = c.Send(request, response) - return + return c.DescribeGatewayFlowQosWithContext(context.Background(), request) } // DescribeGatewayFlowQos @@ -7848,12 +10045,19 @@ func (c *Client) DescribeGatewayFlowQos(request *DescribeGatewayFlowQosRequest) // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) DescribeGatewayFlowQosWithContext(ctx context.Context, request *DescribeGatewayFlowQosRequest) (response *DescribeGatewayFlowQosResponse, err error) { if request == nil { request = NewDescribeGatewayFlowQosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeGatewayFlowQos require credential") + } + request.SetContext(ctx) response = NewDescribeGatewayFlowQosResponse() @@ -7865,6 +10069,7 @@ func NewDescribeHaVipsRequest() (request *DescribeHaVipsRequest) { request = &DescribeHaVipsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeHaVips") return @@ -7882,18 +10087,15 @@ func NewDescribeHaVipsResponse() (response *DescribeHaVipsResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" func (c *Client) DescribeHaVips(request *DescribeHaVipsRequest) (response *DescribeHaVipsResponse, err error) { - if request == nil { - request = NewDescribeHaVipsRequest() - } - - response = NewDescribeHaVipsResponse() - err = c.Send(request, response) - return + return c.DescribeHaVipsWithContext(context.Background(), request) } // DescribeHaVips @@ -7901,14 +10103,22 @@ func (c *Client) DescribeHaVips(request *DescribeHaVipsRequest) (response *Descr // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" func (c *Client) DescribeHaVipsWithContext(ctx context.Context, request *DescribeHaVipsRequest) (response *DescribeHaVipsResponse, err error) { if request == nil { request = NewDescribeHaVipsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeHaVips require credential") + } + request.SetContext(ctx) response = NewDescribeHaVipsResponse() @@ -7920,6 +10130,7 @@ func NewDescribeIp6AddressesRequest() (request *DescribeIp6AddressesRequest) { request = &DescribeIp6AddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeIp6Addresses") return @@ -7941,18 +10152,14 @@ func NewDescribeIp6AddressesResponse() (response *DescribeIp6AddressesResponse) // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ADDRESSIPNOTPUBLIC = "InvalidParameterValue.AddressIpNotPublic" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_NETWORKINTERFACEIDMALFORMED = "InvalidParameterValue.NetworkInterfaceIdMalformed" func (c *Client) DescribeIp6Addresses(request *DescribeIp6AddressesRequest) (response *DescribeIp6AddressesResponse, err error) { - if request == nil { - request = NewDescribeIp6AddressesRequest() - } - - response = NewDescribeIp6AddressesResponse() - err = c.Send(request, response) - return + return c.DescribeIp6AddressesWithContext(context.Background(), request) } // DescribeIp6Addresses @@ -7964,7 +10171,9 @@ func (c *Client) DescribeIp6Addresses(request *DescribeIp6AddressesRequest) (res // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_ADDRESSIPNOTPUBLIC = "InvalidParameterValue.AddressIpNotPublic" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_NETWORKINTERFACEIDMALFORMED = "InvalidParameterValue.NetworkInterfaceIdMalformed" @@ -7972,6 +10181,11 @@ func (c *Client) DescribeIp6AddressesWithContext(ctx context.Context, request *D if request == nil { request = NewDescribeIp6AddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeIp6Addresses require credential") + } + request.SetContext(ctx) response = NewDescribeIp6AddressesResponse() @@ -7983,6 +10197,7 @@ func NewDescribeIp6TranslatorQuotaRequest() (request *DescribeIp6TranslatorQuota request = &DescribeIp6TranslatorQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeIp6TranslatorQuota") return @@ -8002,13 +10217,7 @@ func NewDescribeIp6TranslatorQuotaResponse() (response *DescribeIp6TranslatorQuo // // INTERNALSERVERERROR = "InternalServerError" func (c *Client) DescribeIp6TranslatorQuota(request *DescribeIp6TranslatorQuotaRequest) (response *DescribeIp6TranslatorQuotaResponse, err error) { - if request == nil { - request = NewDescribeIp6TranslatorQuotaRequest() - } - - response = NewDescribeIp6TranslatorQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeIp6TranslatorQuotaWithContext(context.Background(), request) } // DescribeIp6TranslatorQuota @@ -8021,6 +10230,11 @@ func (c *Client) DescribeIp6TranslatorQuotaWithContext(ctx context.Context, requ if request == nil { request = NewDescribeIp6TranslatorQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeIp6TranslatorQuota require credential") + } + request.SetContext(ctx) response = NewDescribeIp6TranslatorQuotaResponse() @@ -8032,6 +10246,7 @@ func NewDescribeIp6TranslatorsRequest() (request *DescribeIp6TranslatorsRequest) request = &DescribeIp6TranslatorsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeIp6Translators") return @@ -8054,13 +10269,7 @@ func NewDescribeIp6TranslatorsResponse() (response *DescribeIp6TranslatorsRespon // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" func (c *Client) DescribeIp6Translators(request *DescribeIp6TranslatorsRequest) (response *DescribeIp6TranslatorsResponse, err error) { - if request == nil { - request = NewDescribeIp6TranslatorsRequest() - } - - response = NewDescribeIp6TranslatorsResponse() - err = c.Send(request, response) - return + return c.DescribeIp6TranslatorsWithContext(context.Background(), request) } // DescribeIp6Translators @@ -8076,6 +10285,11 @@ func (c *Client) DescribeIp6TranslatorsWithContext(ctx context.Context, request if request == nil { request = NewDescribeIp6TranslatorsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeIp6Translators require credential") + } + request.SetContext(ctx) response = NewDescribeIp6TranslatorsResponse() @@ -8087,6 +10301,7 @@ func NewDescribeIpGeolocationDatabaseUrlRequest() (request *DescribeIpGeolocatio request = &DescribeIpGeolocationDatabaseUrlRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeIpGeolocationDatabaseUrl") return @@ -8102,6 +10317,8 @@ func NewDescribeIpGeolocationDatabaseUrlResponse() (response *DescribeIpGeolocat // DescribeIpGeolocationDatabaseUrl // 本接口(DescribeIpGeolocationDatabaseUrl)用于获取IP地理位置库下载链接。 // +// 本接口即将下线,仅供存量用户使用,暂停新增用户。 +// // 可能返回的错误码: // // AUTHFAILURE = "AuthFailure" @@ -8110,18 +10327,14 @@ func NewDescribeIpGeolocationDatabaseUrlResponse() (response *DescribeIpGeolocat // INVALIDPARAMETERCONFLICT = "InvalidParameterConflict" // INVALIDPARAMETERVALUE = "InvalidParameterValue" func (c *Client) DescribeIpGeolocationDatabaseUrl(request *DescribeIpGeolocationDatabaseUrlRequest) (response *DescribeIpGeolocationDatabaseUrlResponse, err error) { - if request == nil { - request = NewDescribeIpGeolocationDatabaseUrlRequest() - } - - response = NewDescribeIpGeolocationDatabaseUrlResponse() - err = c.Send(request, response) - return + return c.DescribeIpGeolocationDatabaseUrlWithContext(context.Background(), request) } // DescribeIpGeolocationDatabaseUrl // 本接口(DescribeIpGeolocationDatabaseUrl)用于获取IP地理位置库下载链接。 // +// 本接口即将下线,仅供存量用户使用,暂停新增用户。 +// // 可能返回的错误码: // // AUTHFAILURE = "AuthFailure" @@ -8133,6 +10346,11 @@ func (c *Client) DescribeIpGeolocationDatabaseUrlWithContext(ctx context.Context if request == nil { request = NewDescribeIpGeolocationDatabaseUrlRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeIpGeolocationDatabaseUrl require credential") + } + request.SetContext(ctx) response = NewDescribeIpGeolocationDatabaseUrlResponse() @@ -8144,6 +10362,7 @@ func NewDescribeIpGeolocationInfosRequest() (request *DescribeIpGeolocationInfos request = &DescribeIpGeolocationInfosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeIpGeolocationInfos") return @@ -8159,7 +10378,7 @@ func NewDescribeIpGeolocationInfosResponse() (response *DescribeIpGeolocationInf // DescribeIpGeolocationInfos // 本接口(DescribeIpGeolocationInfos)用于查询IP地址信息,包括地理位置信息和网络信息。 // -// 本接口目前处于内测中,如需使用,请提交 [工单申请](https://console.cloud.tencent.com/workorder/category?level1_id=6&level2_id=660&source=0&data_title=%E5%BC%B9%E6%80%A7%E5%85%AC%E7%BD%91%20EIP&level3_id=662&queue=96&scene_code=16400&step=2)。 +// 本接口即将下线,仅供存量客户使用,暂停新增用户。 // // 可能返回的错误码: // @@ -8170,19 +10389,13 @@ func NewDescribeIpGeolocationInfosResponse() (response *DescribeIpGeolocationInf // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // MISSINGPARAMETER = "MissingParameter" func (c *Client) DescribeIpGeolocationInfos(request *DescribeIpGeolocationInfosRequest) (response *DescribeIpGeolocationInfosResponse, err error) { - if request == nil { - request = NewDescribeIpGeolocationInfosRequest() - } - - response = NewDescribeIpGeolocationInfosResponse() - err = c.Send(request, response) - return + return c.DescribeIpGeolocationInfosWithContext(context.Background(), request) } // DescribeIpGeolocationInfos // 本接口(DescribeIpGeolocationInfos)用于查询IP地址信息,包括地理位置信息和网络信息。 // -// 本接口目前处于内测中,如需使用,请提交 [工单申请](https://console.cloud.tencent.com/workorder/category?level1_id=6&level2_id=660&source=0&data_title=%E5%BC%B9%E6%80%A7%E5%85%AC%E7%BD%91%20EIP&level3_id=662&queue=96&scene_code=16400&step=2)。 +// 本接口即将下线,仅供存量客户使用,暂停新增用户。 // // 可能返回的错误码: // @@ -8196,6 +10409,11 @@ func (c *Client) DescribeIpGeolocationInfosWithContext(ctx context.Context, requ if request == nil { request = NewDescribeIpGeolocationInfosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeIpGeolocationInfos require credential") + } + request.SetContext(ctx) response = NewDescribeIpGeolocationInfosResponse() @@ -8207,6 +10425,7 @@ func NewDescribeLocalGatewayRequest() (request *DescribeLocalGatewayRequest) { request = &DescribeLocalGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeLocalGateway") return @@ -8220,7 +10439,7 @@ func NewDescribeLocalGatewayResponse() (response *DescribeLocalGatewayResponse) } // DescribeLocalGateway -// 该接口用于查询CDC的本地网关。 +// 本接口(DescribeLocalGateway)用于查询CDC的本地网关。 // // 可能返回的错误码: // @@ -8231,17 +10450,11 @@ func NewDescribeLocalGatewayResponse() (response *DescribeLocalGatewayResponse) // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeLocalGateway(request *DescribeLocalGatewayRequest) (response *DescribeLocalGatewayResponse, err error) { - if request == nil { - request = NewDescribeLocalGatewayRequest() - } - - response = NewDescribeLocalGatewayResponse() - err = c.Send(request, response) - return + return c.DescribeLocalGatewayWithContext(context.Background(), request) } // DescribeLocalGateway -// 该接口用于查询CDC的本地网关。 +// 本接口(DescribeLocalGateway)用于查询CDC的本地网关。 // // 可能返回的错误码: // @@ -8255,6 +10468,11 @@ func (c *Client) DescribeLocalGatewayWithContext(ctx context.Context, request *D if request == nil { request = NewDescribeLocalGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeLocalGateway require credential") + } + request.SetContext(ctx) response = NewDescribeLocalGatewayResponse() @@ -8266,6 +10484,7 @@ func NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() (request request = &DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNatGatewayDestinationIpPortTranslationNatRules") return @@ -8291,15 +10510,10 @@ func NewDescribeNatGatewayDestinationIpPortTranslationNatRulesResponse() (respon // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" func (c *Client) DescribeNatGatewayDestinationIpPortTranslationNatRules(request *DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest) (response *DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse, err error) { - if request == nil { - request = NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() - } - - response = NewDescribeNatGatewayDestinationIpPortTranslationNatRulesResponse() - err = c.Send(request, response) - return + return c.DescribeNatGatewayDestinationIpPortTranslationNatRulesWithContext(context.Background(), request) } // DescribeNatGatewayDestinationIpPortTranslationNatRules @@ -8315,11 +10529,17 @@ func (c *Client) DescribeNatGatewayDestinationIpPortTranslationNatRules(request // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" func (c *Client) DescribeNatGatewayDestinationIpPortTranslationNatRulesWithContext(ctx context.Context, request *DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest) (response *DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse, err error) { if request == nil { request = NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNatGatewayDestinationIpPortTranslationNatRules require credential") + } + request.SetContext(ctx) response = NewDescribeNatGatewayDestinationIpPortTranslationNatRulesResponse() @@ -8331,6 +10551,7 @@ func NewDescribeNatGatewayDirectConnectGatewayRouteRequest() (request *DescribeN request = &DescribeNatGatewayDirectConnectGatewayRouteRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNatGatewayDirectConnectGatewayRoute") return @@ -8350,16 +10571,11 @@ func NewDescribeNatGatewayDirectConnectGatewayRouteResponse() (response *Describ // // INTERNALERROR = "InternalError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" func (c *Client) DescribeNatGatewayDirectConnectGatewayRoute(request *DescribeNatGatewayDirectConnectGatewayRouteRequest) (response *DescribeNatGatewayDirectConnectGatewayRouteResponse, err error) { - if request == nil { - request = NewDescribeNatGatewayDirectConnectGatewayRouteRequest() - } - - response = NewDescribeNatGatewayDirectConnectGatewayRouteResponse() - err = c.Send(request, response) - return + return c.DescribeNatGatewayDirectConnectGatewayRouteWithContext(context.Background(), request) } // DescribeNatGatewayDirectConnectGatewayRoute @@ -8369,12 +10585,18 @@ func (c *Client) DescribeNatGatewayDirectConnectGatewayRoute(request *DescribeNa // // INTERNALERROR = "InternalError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" func (c *Client) DescribeNatGatewayDirectConnectGatewayRouteWithContext(ctx context.Context, request *DescribeNatGatewayDirectConnectGatewayRouteRequest) (response *DescribeNatGatewayDirectConnectGatewayRouteResponse, err error) { if request == nil { request = NewDescribeNatGatewayDirectConnectGatewayRouteRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNatGatewayDirectConnectGatewayRoute require credential") + } + request.SetContext(ctx) response = NewDescribeNatGatewayDirectConnectGatewayRouteResponse() @@ -8386,6 +10608,7 @@ func NewDescribeNatGatewaySourceIpTranslationNatRulesRequest() (request *Describ request = &DescribeNatGatewaySourceIpTranslationNatRulesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNatGatewaySourceIpTranslationNatRules") return @@ -8407,17 +10630,14 @@ func NewDescribeNatGatewaySourceIpTranslationNatRulesResponse() (response *Descr // INTERNALSERVERERROR = "InternalServerError" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNatGatewaySourceIpTranslationNatRules(request *DescribeNatGatewaySourceIpTranslationNatRulesRequest) (response *DescribeNatGatewaySourceIpTranslationNatRulesResponse, err error) { - if request == nil { - request = NewDescribeNatGatewaySourceIpTranslationNatRulesRequest() - } - - response = NewDescribeNatGatewaySourceIpTranslationNatRulesResponse() - err = c.Send(request, response) - return + return c.DescribeNatGatewaySourceIpTranslationNatRulesWithContext(context.Background(), request) } // DescribeNatGatewaySourceIpTranslationNatRules @@ -8429,13 +10649,21 @@ func (c *Client) DescribeNatGatewaySourceIpTranslationNatRules(request *Describe // INTERNALSERVERERROR = "InternalServerError" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNatGatewaySourceIpTranslationNatRulesWithContext(ctx context.Context, request *DescribeNatGatewaySourceIpTranslationNatRulesRequest) (response *DescribeNatGatewaySourceIpTranslationNatRulesResponse, err error) { if request == nil { request = NewDescribeNatGatewaySourceIpTranslationNatRulesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNatGatewaySourceIpTranslationNatRules require credential") + } + request.SetContext(ctx) response = NewDescribeNatGatewaySourceIpTranslationNatRulesResponse() @@ -8447,6 +10675,7 @@ func NewDescribeNatGatewaysRequest() (request *DescribeNatGatewaysRequest) { request = &DescribeNatGatewaysRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNatGateways") return @@ -8464,18 +10693,19 @@ func NewDescribeNatGatewaysResponse() (response *DescribeNatGatewaysResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" func (c *Client) DescribeNatGateways(request *DescribeNatGatewaysRequest) (response *DescribeNatGatewaysResponse, err error) { - if request == nil { - request = NewDescribeNatGatewaysRequest() - } - - response = NewDescribeNatGatewaysResponse() - err = c.Send(request, response) - return + return c.DescribeNatGatewaysWithContext(context.Background(), request) } // DescribeNatGateways @@ -8483,14 +10713,26 @@ func (c *Client) DescribeNatGateways(request *DescribeNatGatewaysRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" func (c *Client) DescribeNatGatewaysWithContext(ctx context.Context, request *DescribeNatGatewaysRequest) (response *DescribeNatGatewaysResponse, err error) { if request == nil { request = NewDescribeNatGatewaysRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNatGateways require credential") + } + request.SetContext(ctx) response = NewDescribeNatGatewaysResponse() @@ -8502,6 +10744,7 @@ func NewDescribeNetDetectStatesRequest() (request *DescribeNetDetectStatesReques request = &DescribeNetDetectStatesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetDetectStates") return @@ -8519,21 +10762,17 @@ func NewDescribeNetDetectStatesResponse() (response *DescribeNetDetectStatesResp // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNetDetectStates(request *DescribeNetDetectStatesRequest) (response *DescribeNetDetectStatesResponse, err error) { - if request == nil { - request = NewDescribeNetDetectStatesRequest() - } - - response = NewDescribeNetDetectStatesResponse() - err = c.Send(request, response) - return + return c.DescribeNetDetectStatesWithContext(context.Background(), request) } // DescribeNetDetectStates @@ -8541,17 +10780,24 @@ func (c *Client) DescribeNetDetectStates(request *DescribeNetDetectStatesRequest // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_RESOURCENOTFOUND = "InvalidParameterValue.ResourceNotFound" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNetDetectStatesWithContext(ctx context.Context, request *DescribeNetDetectStatesRequest) (response *DescribeNetDetectStatesResponse, err error) { if request == nil { request = NewDescribeNetDetectStatesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetDetectStates require credential") + } + request.SetContext(ctx) response = NewDescribeNetDetectStatesResponse() @@ -8563,6 +10809,7 @@ func NewDescribeNetDetectsRequest() (request *DescribeNetDetectsRequest) { request = &DescribeNetDetectsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetDetects") return @@ -8581,37 +10828,166 @@ func NewDescribeNetDetectsResponse() (response *DescribeNetDetectsResponse) { // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNetDetects(request *DescribeNetDetectsRequest) (response *DescribeNetDetectsResponse, err error) { + return c.DescribeNetDetectsWithContext(context.Background(), request) +} + +// DescribeNetDetects +// 本接口(DescribeNetDetects)用于查询网络探测列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeNetDetectsWithContext(ctx context.Context, request *DescribeNetDetectsRequest) (response *DescribeNetDetectsResponse, err error) { if request == nil { request = NewDescribeNetDetectsRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetDetects require credential") + } + + request.SetContext(ctx) + response = NewDescribeNetDetectsResponse() err = c.Send(request, response) return } -// DescribeNetDetects -// 本接口(DescribeNetDetects)用于查询网络探测列表。 +func NewDescribeNetworkAccountTypeRequest() (request *DescribeNetworkAccountTypeRequest) { + request = &DescribeNetworkAccountTypeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetworkAccountType") + + return +} + +func NewDescribeNetworkAccountTypeResponse() (response *DescribeNetworkAccountTypeResponse) { + response = &DescribeNetworkAccountTypeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeNetworkAccountType +// 判断用户在网络侧的用户类型,如标准(带宽上移),传统(非上移)。 // // 可能返回的错误码: // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeNetDetectsWithContext(ctx context.Context, request *DescribeNetDetectsRequest) (response *DescribeNetDetectsResponse, err error) { +func (c *Client) DescribeNetworkAccountType(request *DescribeNetworkAccountTypeRequest) (response *DescribeNetworkAccountTypeResponse, err error) { + return c.DescribeNetworkAccountTypeWithContext(context.Background(), request) +} + +// DescribeNetworkAccountType +// 判断用户在网络侧的用户类型,如标准(带宽上移),传统(非上移)。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeNetworkAccountTypeWithContext(ctx context.Context, request *DescribeNetworkAccountTypeRequest) (response *DescribeNetworkAccountTypeResponse, err error) { if request == nil { - request = NewDescribeNetDetectsRequest() + request = NewDescribeNetworkAccountTypeRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetworkAccountType require credential") } + request.SetContext(ctx) - response = NewDescribeNetDetectsResponse() + response = NewDescribeNetworkAccountTypeResponse() + err = c.Send(request, response) + return +} + +func NewDescribeNetworkAclQuintupleEntriesRequest() (request *DescribeNetworkAclQuintupleEntriesRequest) { + request = &DescribeNetworkAclQuintupleEntriesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetworkAclQuintupleEntries") + + return +} + +func NewDescribeNetworkAclQuintupleEntriesResponse() (response *DescribeNetworkAclQuintupleEntriesResponse) { + response = &DescribeNetworkAclQuintupleEntriesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeNetworkAclQuintupleEntries +// 本接口(DescribeNetworkAclQuintupleEntries)查询入方向或出方向网络ACL五元组条目列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" +func (c *Client) DescribeNetworkAclQuintupleEntries(request *DescribeNetworkAclQuintupleEntriesRequest) (response *DescribeNetworkAclQuintupleEntriesResponse, err error) { + return c.DescribeNetworkAclQuintupleEntriesWithContext(context.Background(), request) +} + +// DescribeNetworkAclQuintupleEntries +// 本接口(DescribeNetworkAclQuintupleEntries)查询入方向或出方向网络ACL五元组条目列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" +func (c *Client) DescribeNetworkAclQuintupleEntriesWithContext(ctx context.Context, request *DescribeNetworkAclQuintupleEntriesRequest) (response *DescribeNetworkAclQuintupleEntriesResponse, err error) { + if request == nil { + request = NewDescribeNetworkAclQuintupleEntriesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetworkAclQuintupleEntries require credential") + } + + request.SetContext(ctx) + + response = NewDescribeNetworkAclQuintupleEntriesResponse() err = c.Send(request, response) return } @@ -8620,6 +10996,7 @@ func NewDescribeNetworkAclsRequest() (request *DescribeNetworkAclsRequest) { request = &DescribeNetworkAclsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetworkAcls") return @@ -8637,21 +11014,17 @@ func NewDescribeNetworkAclsResponse() (response *DescribeNetworkAclsResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" func (c *Client) DescribeNetworkAcls(request *DescribeNetworkAclsRequest) (response *DescribeNetworkAclsResponse, err error) { - if request == nil { - request = NewDescribeNetworkAclsRequest() - } - - response = NewDescribeNetworkAclsResponse() - err = c.Send(request, response) - return + return c.DescribeNetworkAclsWithContext(context.Background(), request) } // DescribeNetworkAcls @@ -8659,17 +11032,24 @@ func (c *Client) DescribeNetworkAcls(request *DescribeNetworkAclsRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" func (c *Client) DescribeNetworkAclsWithContext(ctx context.Context, request *DescribeNetworkAclsRequest) (response *DescribeNetworkAclsResponse, err error) { if request == nil { request = NewDescribeNetworkAclsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetworkAcls require credential") + } + request.SetContext(ctx) response = NewDescribeNetworkAclsResponse() @@ -8681,6 +11061,7 @@ func NewDescribeNetworkInterfaceLimitRequest() (request *DescribeNetworkInterfac request = &DescribeNetworkInterfaceLimitRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetworkInterfaceLimit") return @@ -8694,29 +11075,25 @@ func NewDescribeNetworkInterfaceLimitResponse() (response *DescribeNetworkInterf } // DescribeNetworkInterfaceLimit -// 本接口(DescribeNetworkInterfaceLimit)根据CVM实例ID或弹性网卡ID查询弹性网卡配额,返回该CVM实例或弹性网卡能绑定的弹性网卡配额,以及弹性网卡可以分配的IP配额 +// 本接口(DescribeNetworkInterfaceLimit)根据CVM实例ID或弹性网卡ID查询弹性网卡配额,返回该CVM实例或弹性网卡能绑定的弹性网卡配额,以及弹性网卡可以分配的IP配额。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeNetworkInterfaceLimit(request *DescribeNetworkInterfaceLimitRequest) (response *DescribeNetworkInterfaceLimitResponse, err error) { - if request == nil { - request = NewDescribeNetworkInterfaceLimitRequest() - } - - response = NewDescribeNetworkInterfaceLimitResponse() - err = c.Send(request, response) - return + return c.DescribeNetworkInterfaceLimitWithContext(context.Background(), request) } // DescribeNetworkInterfaceLimit -// 本接口(DescribeNetworkInterfaceLimit)根据CVM实例ID或弹性网卡ID查询弹性网卡配额,返回该CVM实例或弹性网卡能绑定的弹性网卡配额,以及弹性网卡可以分配的IP配额 +// 本接口(DescribeNetworkInterfaceLimit)根据CVM实例ID或弹性网卡ID查询弹性网卡配额,返回该CVM实例或弹性网卡能绑定的弹性网卡配额,以及弹性网卡可以分配的IP配额。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INTERNALSERVERERROR = "InternalServerError" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" @@ -8725,6 +11102,11 @@ func (c *Client) DescribeNetworkInterfaceLimitWithContext(ctx context.Context, r if request == nil { request = NewDescribeNetworkInterfaceLimitRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetworkInterfaceLimit require credential") + } + request.SetContext(ctx) response = NewDescribeNetworkInterfaceLimitResponse() @@ -8736,6 +11118,7 @@ func NewDescribeNetworkInterfacesRequest() (request *DescribeNetworkInterfacesRe request = &DescribeNetworkInterfacesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeNetworkInterfaces") return @@ -8753,6 +11136,7 @@ func NewDescribeNetworkInterfacesResponse() (response *DescribeNetworkInterfaces // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" @@ -8760,15 +11144,11 @@ func NewDescribeNetworkInterfacesResponse() (response *DescribeNetworkInterfaces // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeNetworkInterfaces(request *DescribeNetworkInterfacesRequest) (response *DescribeNetworkInterfacesResponse, err error) { - if request == nil { - request = NewDescribeNetworkInterfacesRequest() - } - - response = NewDescribeNetworkInterfacesResponse() - err = c.Send(request, response) - return + return c.DescribeNetworkInterfacesWithContext(context.Background(), request) } // DescribeNetworkInterfaces @@ -8776,6 +11156,7 @@ func (c *Client) DescribeNetworkInterfaces(request *DescribeNetworkInterfacesReq // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" @@ -8783,11 +11164,18 @@ func (c *Client) DescribeNetworkInterfaces(request *DescribeNetworkInterfacesReq // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeNetworkInterfacesWithContext(ctx context.Context, request *DescribeNetworkInterfacesRequest) (response *DescribeNetworkInterfacesResponse, err error) { if request == nil { request = NewDescribeNetworkInterfacesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeNetworkInterfaces require credential") + } + request.SetContext(ctx) response = NewDescribeNetworkInterfacesResponse() @@ -8799,6 +11187,7 @@ func NewDescribeProductQuotaRequest() (request *DescribeProductQuotaRequest) { request = &DescribeProductQuotaRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeProductQuota") return @@ -8812,33 +11201,34 @@ func NewDescribeProductQuotaResponse() (response *DescribeProductQuotaResponse) } // DescribeProductQuota -// 本接口用于查询网络产品的配额信息 +// 本接口(DescribeProductQuota)用于查询网络产品的配额信息。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" func (c *Client) DescribeProductQuota(request *DescribeProductQuotaRequest) (response *DescribeProductQuotaResponse, err error) { - if request == nil { - request = NewDescribeProductQuotaRequest() - } - - response = NewDescribeProductQuotaResponse() - err = c.Send(request, response) - return + return c.DescribeProductQuotaWithContext(context.Background(), request) } // DescribeProductQuota -// 本接口用于查询网络产品的配额信息 +// 本接口(DescribeProductQuota)用于查询网络产品的配额信息。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" func (c *Client) DescribeProductQuotaWithContext(ctx context.Context, request *DescribeProductQuotaRequest) (response *DescribeProductQuotaResponse, err error) { if request == nil { request = NewDescribeProductQuotaRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeProductQuota require credential") + } + request.SetContext(ctx) response = NewDescribeProductQuotaResponse() @@ -8850,6 +11240,7 @@ func NewDescribeRouteConflictsRequest() (request *DescribeRouteConflictsRequest) request = &DescribeRouteConflictsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeRouteConflicts") return @@ -8863,31 +11254,32 @@ func NewDescribeRouteConflictsResponse() (response *DescribeRouteConflictsRespon } // DescribeRouteConflicts -// 本接口(DescribeRouteConflicts)用于查询自定义路由策略与云联网路由策略冲突列表 +// 本接口(DescribeRouteConflicts)用于查询自定义路由策略与云联网路由策略冲突列表。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeRouteConflicts(request *DescribeRouteConflictsRequest) (response *DescribeRouteConflictsResponse, err error) { - if request == nil { - request = NewDescribeRouteConflictsRequest() - } - - response = NewDescribeRouteConflictsResponse() - err = c.Send(request, response) - return + return c.DescribeRouteConflictsWithContext(context.Background(), request) } // DescribeRouteConflicts -// 本接口(DescribeRouteConflicts)用于查询自定义路由策略与云联网路由策略冲突列表 +// 本接口(DescribeRouteConflicts)用于查询自定义路由策略与云联网路由策略冲突列表。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeRouteConflictsWithContext(ctx context.Context, request *DescribeRouteConflictsRequest) (response *DescribeRouteConflictsResponse, err error) { if request == nil { request = NewDescribeRouteConflictsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeRouteConflicts require credential") + } + request.SetContext(ctx) response = NewDescribeRouteConflictsResponse() @@ -8899,6 +11291,7 @@ func NewDescribeRouteTablesRequest() (request *DescribeRouteTablesRequest) { request = &DescribeRouteTablesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeRouteTables") return @@ -8912,11 +11305,11 @@ func NewDescribeRouteTablesResponse() (response *DescribeRouteTablesResponse) { } // DescribeRouteTables -// -// 本接口(DescribeRouteTables)用于查询路由表。 +// 本接口(DescribeRouteTables)用于查询路由表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" @@ -8924,22 +11317,17 @@ func NewDescribeRouteTablesResponse() (response *DescribeRouteTablesResponse) { // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeRouteTables(request *DescribeRouteTablesRequest) (response *DescribeRouteTablesResponse, err error) { - if request == nil { - request = NewDescribeRouteTablesRequest() - } - - response = NewDescribeRouteTablesResponse() - err = c.Send(request, response) - return + return c.DescribeRouteTablesWithContext(context.Background(), request) } // DescribeRouteTables -// -// 本接口(DescribeRouteTables)用于查询路由表。 +// 本接口(DescribeRouteTables)用于查询路由表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" @@ -8947,13 +11335,19 @@ func (c *Client) DescribeRouteTables(request *DescribeRouteTablesRequest) (respo // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeRouteTablesWithContext(ctx context.Context, request *DescribeRouteTablesRequest) (response *DescribeRouteTablesResponse, err error) { if request == nil { request = NewDescribeRouteTablesRequest() } - request.SetContext(ctx) - response = NewDescribeRouteTablesResponse() + if c.GetCredential() == nil { + return nil, errors.New("DescribeRouteTables require credential") + } + + request.SetContext(ctx) + + response = NewDescribeRouteTablesResponse() err = c.Send(request, response) return } @@ -8962,6 +11356,7 @@ func NewDescribeSecurityGroupAssociationStatisticsRequest() (request *DescribeSe request = &DescribeSecurityGroupAssociationStatisticsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSecurityGroupAssociationStatistics") return @@ -8982,14 +11377,9 @@ func NewDescribeSecurityGroupAssociationStatisticsResponse() (response *Describe // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupAssociationStatistics(request *DescribeSecurityGroupAssociationStatisticsRequest) (response *DescribeSecurityGroupAssociationStatisticsResponse, err error) { - if request == nil { - request = NewDescribeSecurityGroupAssociationStatisticsRequest() - } - - response = NewDescribeSecurityGroupAssociationStatisticsResponse() - err = c.Send(request, response) - return + return c.DescribeSecurityGroupAssociationStatisticsWithContext(context.Background(), request) } // DescribeSecurityGroupAssociationStatistics @@ -9000,10 +11390,16 @@ func (c *Client) DescribeSecurityGroupAssociationStatistics(request *DescribeSec // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupAssociationStatisticsWithContext(ctx context.Context, request *DescribeSecurityGroupAssociationStatisticsRequest) (response *DescribeSecurityGroupAssociationStatisticsResponse, err error) { if request == nil { request = NewDescribeSecurityGroupAssociationStatisticsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSecurityGroupAssociationStatistics require credential") + } + request.SetContext(ctx) response = NewDescribeSecurityGroupAssociationStatisticsResponse() @@ -9015,6 +11411,7 @@ func NewDescribeSecurityGroupLimitsRequest() (request *DescribeSecurityGroupLimi request = &DescribeSecurityGroupLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSecurityGroupLimits") return @@ -9032,17 +11429,9 @@ func NewDescribeSecurityGroupLimitsResponse() (response *DescribeSecurityGroupLi // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupLimits(request *DescribeSecurityGroupLimitsRequest) (response *DescribeSecurityGroupLimitsResponse, err error) { - if request == nil { - request = NewDescribeSecurityGroupLimitsRequest() - } - - response = NewDescribeSecurityGroupLimitsResponse() - err = c.Send(request, response) - return + return c.DescribeSecurityGroupLimitsWithContext(context.Background(), request) } // DescribeSecurityGroupLimits @@ -9050,13 +11439,16 @@ func (c *Client) DescribeSecurityGroupLimits(request *DescribeSecurityGroupLimit // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupLimitsWithContext(ctx context.Context, request *DescribeSecurityGroupLimitsRequest) (response *DescribeSecurityGroupLimitsResponse, err error) { if request == nil { request = NewDescribeSecurityGroupLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSecurityGroupLimits require credential") + } + request.SetContext(ctx) response = NewDescribeSecurityGroupLimitsResponse() @@ -9068,6 +11460,7 @@ func NewDescribeSecurityGroupPoliciesRequest() (request *DescribeSecurityGroupPo request = &DescribeSecurityGroupPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSecurityGroupPolicies") return @@ -9085,17 +11478,16 @@ func NewDescribeSecurityGroupPoliciesResponse() (response *DescribeSecurityGroup // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupPolicies(request *DescribeSecurityGroupPoliciesRequest) (response *DescribeSecurityGroupPoliciesResponse, err error) { - if request == nil { - request = NewDescribeSecurityGroupPoliciesRequest() - } - - response = NewDescribeSecurityGroupPoliciesResponse() - err = c.Send(request, response) - return + return c.DescribeSecurityGroupPoliciesWithContext(context.Background(), request) } // DescribeSecurityGroupPolicies @@ -9103,13 +11495,23 @@ func (c *Client) DescribeSecurityGroupPolicies(request *DescribeSecurityGroupPol // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupPoliciesWithContext(ctx context.Context, request *DescribeSecurityGroupPoliciesRequest) (response *DescribeSecurityGroupPoliciesResponse, err error) { if request == nil { request = NewDescribeSecurityGroupPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSecurityGroupPolicies require credential") + } + request.SetContext(ctx) response = NewDescribeSecurityGroupPoliciesResponse() @@ -9121,6 +11523,7 @@ func NewDescribeSecurityGroupReferencesRequest() (request *DescribeSecurityGroup request = &DescribeSecurityGroupReferencesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSecurityGroupReferences") return @@ -9138,17 +11541,12 @@ func NewDescribeSecurityGroupReferencesResponse() (response *DescribeSecurityGro // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeSecurityGroupReferences(request *DescribeSecurityGroupReferencesRequest) (response *DescribeSecurityGroupReferencesResponse, err error) { - if request == nil { - request = NewDescribeSecurityGroupReferencesRequest() - } - - response = NewDescribeSecurityGroupReferencesResponse() - err = c.Send(request, response) - return + return c.DescribeSecurityGroupReferencesWithContext(context.Background(), request) } // DescribeSecurityGroupReferences @@ -9156,6 +11554,7 @@ func (c *Client) DescribeSecurityGroupReferences(request *DescribeSecurityGroupR // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" @@ -9163,6 +11562,11 @@ func (c *Client) DescribeSecurityGroupReferencesWithContext(ctx context.Context, if request == nil { request = NewDescribeSecurityGroupReferencesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSecurityGroupReferences require credential") + } + request.SetContext(ctx) response = NewDescribeSecurityGroupReferencesResponse() @@ -9174,6 +11578,7 @@ func NewDescribeSecurityGroupsRequest() (request *DescribeSecurityGroupsRequest) request = &DescribeSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSecurityGroups") return @@ -9199,14 +11604,9 @@ func NewDescribeSecurityGroupsResponse() (response *DescribeSecurityGroupsRespon // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroups(request *DescribeSecurityGroupsRequest) (response *DescribeSecurityGroupsResponse, err error) { - if request == nil { - request = NewDescribeSecurityGroupsRequest() - } - - response = NewDescribeSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.DescribeSecurityGroupsWithContext(context.Background(), request) } // DescribeSecurityGroups @@ -9222,10 +11622,16 @@ func (c *Client) DescribeSecurityGroups(request *DescribeSecurityGroupsRequest) // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeSecurityGroupsWithContext(ctx context.Context, request *DescribeSecurityGroupsRequest) (response *DescribeSecurityGroupsResponse, err error) { if request == nil { request = NewDescribeSecurityGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSecurityGroups require credential") + } + request.SetContext(ctx) response = NewDescribeSecurityGroupsResponse() @@ -9237,6 +11643,7 @@ func NewDescribeServiceTemplateGroupsRequest() (request *DescribeServiceTemplate request = &DescribeServiceTemplateGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeServiceTemplateGroups") return @@ -9250,7 +11657,7 @@ func NewDescribeServiceTemplateGroupsResponse() (response *DescribeServiceTempla } // DescribeServiceTemplateGroups -// 本接口(DescribeServiceTemplateGroups)用于查询协议端口模板集合 +// 本接口(DescribeServiceTemplateGroups)用于查询协议端口模板集合。 // // 可能返回的错误码: // @@ -9258,17 +11665,11 @@ func NewDescribeServiceTemplateGroupsResponse() (response *DescribeServiceTempla // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeServiceTemplateGroups(request *DescribeServiceTemplateGroupsRequest) (response *DescribeServiceTemplateGroupsResponse, err error) { - if request == nil { - request = NewDescribeServiceTemplateGroupsRequest() - } - - response = NewDescribeServiceTemplateGroupsResponse() - err = c.Send(request, response) - return + return c.DescribeServiceTemplateGroupsWithContext(context.Background(), request) } // DescribeServiceTemplateGroups -// 本接口(DescribeServiceTemplateGroups)用于查询协议端口模板集合 +// 本接口(DescribeServiceTemplateGroups)用于查询协议端口模板集合。 // // 可能返回的错误码: // @@ -9279,6 +11680,11 @@ func (c *Client) DescribeServiceTemplateGroupsWithContext(ctx context.Context, r if request == nil { request = NewDescribeServiceTemplateGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeServiceTemplateGroups require credential") + } + request.SetContext(ctx) response = NewDescribeServiceTemplateGroupsResponse() @@ -9290,6 +11696,7 @@ func NewDescribeServiceTemplatesRequest() (request *DescribeServiceTemplatesRequ request = &DescribeServiceTemplatesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeServiceTemplates") return @@ -9303,24 +11710,18 @@ func NewDescribeServiceTemplatesResponse() (response *DescribeServiceTemplatesRe } // DescribeServiceTemplates -// 本接口(DescribeServiceTemplates)用于查询协议端口模板 +// 本接口(DescribeServiceTemplates)用于查询协议端口模板。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) DescribeServiceTemplates(request *DescribeServiceTemplatesRequest) (response *DescribeServiceTemplatesResponse, err error) { - if request == nil { - request = NewDescribeServiceTemplatesRequest() - } - - response = NewDescribeServiceTemplatesResponse() - err = c.Send(request, response) - return + return c.DescribeServiceTemplatesWithContext(context.Background(), request) } // DescribeServiceTemplates -// 本接口(DescribeServiceTemplates)用于查询协议端口模板 +// 本接口(DescribeServiceTemplates)用于查询协议端口模板。 // // 可能返回的错误码: // @@ -9330,6 +11731,11 @@ func (c *Client) DescribeServiceTemplatesWithContext(ctx context.Context, reques if request == nil { request = NewDescribeServiceTemplatesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeServiceTemplates require credential") + } + request.SetContext(ctx) response = NewDescribeServiceTemplatesResponse() @@ -9337,273 +11743,791 @@ func (c *Client) DescribeServiceTemplatesWithContext(ctx context.Context, reques return } -func NewDescribeSubnetsRequest() (request *DescribeSubnetsRequest) { - request = &DescribeSubnetsRequest{ +func NewDescribeSgSnapshotFileContentRequest() (request *DescribeSgSnapshotFileContentRequest) { + request = &DescribeSgSnapshotFileContentRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeSubnets") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSgSnapshotFileContent") return } -func NewDescribeSubnetsResponse() (response *DescribeSubnetsResponse) { - response = &DescribeSubnetsResponse{ +func NewDescribeSgSnapshotFileContentResponse() (response *DescribeSgSnapshotFileContentResponse) { + response = &DescribeSgSnapshotFileContentResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeSubnets -// 本接口(DescribeSubnets)用于查询子网列表。 +// DescribeSgSnapshotFileContent +// 本接口(DescribeSgSnapshotFileContent)用于查询安全组快照文件内容。 // // 可能返回的错误码: // -// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" -// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" -// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" -// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" -// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeSubnets(request *DescribeSubnetsRequest) (response *DescribeSubnetsResponse, err error) { - if request == nil { - request = NewDescribeSubnetsRequest() - } - - response = NewDescribeSubnetsResponse() - err = c.Send(request, response) - return +// UNSUPPORTEDOPERATION_SNAPSHOTFILEFAILED = "UnsupportedOperation.SnapshotFileFailed" +// UNSUPPORTEDOPERATION_SNAPSHOTFILENOEXIST = "UnsupportedOperation.SnapshotFileNoExist" +// UNSUPPORTEDOPERATION_SNAPSHOTFILEPROCESSING = "UnsupportedOperation.SnapshotFileProcessing" +func (c *Client) DescribeSgSnapshotFileContent(request *DescribeSgSnapshotFileContentRequest) (response *DescribeSgSnapshotFileContentResponse, err error) { + return c.DescribeSgSnapshotFileContentWithContext(context.Background(), request) } -// DescribeSubnets -// 本接口(DescribeSubnets)用于查询子网列表。 +// DescribeSgSnapshotFileContent +// 本接口(DescribeSgSnapshotFileContent)用于查询安全组快照文件内容。 // // 可能返回的错误码: // -// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" -// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" -// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" -// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" -// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeSubnetsWithContext(ctx context.Context, request *DescribeSubnetsRequest) (response *DescribeSubnetsResponse, err error) { +// UNSUPPORTEDOPERATION_SNAPSHOTFILEFAILED = "UnsupportedOperation.SnapshotFileFailed" +// UNSUPPORTEDOPERATION_SNAPSHOTFILENOEXIST = "UnsupportedOperation.SnapshotFileNoExist" +// UNSUPPORTEDOPERATION_SNAPSHOTFILEPROCESSING = "UnsupportedOperation.SnapshotFileProcessing" +func (c *Client) DescribeSgSnapshotFileContentWithContext(ctx context.Context, request *DescribeSgSnapshotFileContentRequest) (response *DescribeSgSnapshotFileContentResponse, err error) { if request == nil { - request = NewDescribeSubnetsRequest() + request = NewDescribeSgSnapshotFileContentRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSgSnapshotFileContent require credential") } + request.SetContext(ctx) - response = NewDescribeSubnetsResponse() + response = NewDescribeSgSnapshotFileContentResponse() err = c.Send(request, response) return } -func NewDescribeTaskResultRequest() (request *DescribeTaskResultRequest) { - request = &DescribeTaskResultRequest{ +func NewDescribeSnapshotAttachedInstancesRequest() (request *DescribeSnapshotAttachedInstancesRequest) { + request = &DescribeSnapshotAttachedInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeTaskResult") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSnapshotAttachedInstances") return } -func NewDescribeTaskResultResponse() (response *DescribeTaskResultResponse) { - response = &DescribeTaskResultResponse{ +func NewDescribeSnapshotAttachedInstancesResponse() (response *DescribeSnapshotAttachedInstancesResponse) { + response = &DescribeSnapshotAttachedInstancesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeTaskResult -// 查询EIP异步任务执行结果 +// DescribeSnapshotAttachedInstances +// 本接口(DescribeSnapshotAttachedInstances)用于查询快照策略关联实例列表。 // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -func (c *Client) DescribeTaskResult(request *DescribeTaskResultRequest) (response *DescribeTaskResultResponse, err error) { - if request == nil { - request = NewDescribeTaskResultRequest() - } - - response = NewDescribeTaskResultResponse() - err = c.Send(request, response) - return +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeSnapshotAttachedInstances(request *DescribeSnapshotAttachedInstancesRequest) (response *DescribeSnapshotAttachedInstancesResponse, err error) { + return c.DescribeSnapshotAttachedInstancesWithContext(context.Background(), request) } -// DescribeTaskResult -// 查询EIP异步任务执行结果 +// DescribeSnapshotAttachedInstances +// 本接口(DescribeSnapshotAttachedInstances)用于查询快照策略关联实例列表。 // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -func (c *Client) DescribeTaskResultWithContext(ctx context.Context, request *DescribeTaskResultRequest) (response *DescribeTaskResultResponse, err error) { +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeSnapshotAttachedInstancesWithContext(ctx context.Context, request *DescribeSnapshotAttachedInstancesRequest) (response *DescribeSnapshotAttachedInstancesResponse, err error) { if request == nil { - request = NewDescribeTaskResultRequest() + request = NewDescribeSnapshotAttachedInstancesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSnapshotAttachedInstances require credential") } + request.SetContext(ctx) - response = NewDescribeTaskResultResponse() + response = NewDescribeSnapshotAttachedInstancesResponse() err = c.Send(request, response) return } -func NewDescribeTemplateLimitsRequest() (request *DescribeTemplateLimitsRequest) { - request = &DescribeTemplateLimitsRequest{ +func NewDescribeSnapshotFilesRequest() (request *DescribeSnapshotFilesRequest) { + request = &DescribeSnapshotFilesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeTemplateLimits") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSnapshotFiles") return } -func NewDescribeTemplateLimitsResponse() (response *DescribeTemplateLimitsResponse) { - response = &DescribeTemplateLimitsResponse{ +func NewDescribeSnapshotFilesResponse() (response *DescribeSnapshotFilesResponse) { + response = &DescribeSnapshotFilesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeTemplateLimits -// 本接口(DescribeTemplateLimits)用于查询参数模板配额列表。 +// DescribeSnapshotFiles +// 本接口(DescribeSnapshotFiles)用于查询快照文件。 // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -func (c *Client) DescribeTemplateLimits(request *DescribeTemplateLimitsRequest) (response *DescribeTemplateLimitsResponse, err error) { - if request == nil { - request = NewDescribeTemplateLimitsRequest() - } - - response = NewDescribeTemplateLimitsResponse() - err = c.Send(request, response) - return +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTNOTATTACHED = "UnsupportedOperation.SnapshotNotAttached" +func (c *Client) DescribeSnapshotFiles(request *DescribeSnapshotFilesRequest) (response *DescribeSnapshotFilesResponse, err error) { + return c.DescribeSnapshotFilesWithContext(context.Background(), request) } -// DescribeTemplateLimits -// 本接口(DescribeTemplateLimits)用于查询参数模板配额列表。 +// DescribeSnapshotFiles +// 本接口(DescribeSnapshotFiles)用于查询快照文件。 // // 可能返回的错误码: // -// INTERNALSERVERERROR = "InternalServerError" -// INVALIDPARAMETER = "InvalidParameter" -// MISSINGPARAMETER = "MissingParameter" -func (c *Client) DescribeTemplateLimitsWithContext(ctx context.Context, request *DescribeTemplateLimitsRequest) (response *DescribeTemplateLimitsResponse, err error) { +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTNOTATTACHED = "UnsupportedOperation.SnapshotNotAttached" +func (c *Client) DescribeSnapshotFilesWithContext(ctx context.Context, request *DescribeSnapshotFilesRequest) (response *DescribeSnapshotFilesResponse, err error) { if request == nil { - request = NewDescribeTemplateLimitsRequest() + request = NewDescribeSnapshotFilesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSnapshotFiles require credential") } + request.SetContext(ctx) - response = NewDescribeTemplateLimitsResponse() + response = NewDescribeSnapshotFilesResponse() err = c.Send(request, response) return } -func NewDescribeVpcEndPointRequest() (request *DescribeVpcEndPointRequest) { - request = &DescribeVpcEndPointRequest{ +func NewDescribeSnapshotPoliciesRequest() (request *DescribeSnapshotPoliciesRequest) { + request = &DescribeSnapshotPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcEndPoint") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSnapshotPolicies") return } -func NewDescribeVpcEndPointResponse() (response *DescribeVpcEndPointResponse) { - response = &DescribeVpcEndPointResponse{ +func NewDescribeSnapshotPoliciesResponse() (response *DescribeSnapshotPoliciesResponse) { + response = &DescribeSnapshotPoliciesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeVpcEndPoint -// 查询终端节点列表。 +// DescribeSnapshotPolicies +// 本接口(DescribeSnapshotPolicies)用于查询快照策略。 // // 可能返回的错误码: // -// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCENOTFOUND_SVCNOTEXIST = "ResourceNotFound.SvcNotExist" -func (c *Client) DescribeVpcEndPoint(request *DescribeVpcEndPointRequest) (response *DescribeVpcEndPointResponse, err error) { - if request == nil { - request = NewDescribeVpcEndPointRequest() - } - - response = NewDescribeVpcEndPointResponse() - err = c.Send(request, response) - return +func (c *Client) DescribeSnapshotPolicies(request *DescribeSnapshotPoliciesRequest) (response *DescribeSnapshotPoliciesResponse, err error) { + return c.DescribeSnapshotPoliciesWithContext(context.Background(), request) } -// DescribeVpcEndPoint -// 查询终端节点列表。 +// DescribeSnapshotPolicies +// 本接口(DescribeSnapshotPolicies)用于查询快照策略。 // // 可能返回的错误码: // -// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" -// RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCENOTFOUND_SVCNOTEXIST = "ResourceNotFound.SvcNotExist" -func (c *Client) DescribeVpcEndPointWithContext(ctx context.Context, request *DescribeVpcEndPointRequest) (response *DescribeVpcEndPointResponse, err error) { +func (c *Client) DescribeSnapshotPoliciesWithContext(ctx context.Context, request *DescribeSnapshotPoliciesRequest) (response *DescribeSnapshotPoliciesResponse, err error) { if request == nil { - request = NewDescribeVpcEndPointRequest() + request = NewDescribeSnapshotPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSnapshotPolicies require credential") + } + request.SetContext(ctx) - response = NewDescribeVpcEndPointResponse() + response = NewDescribeSnapshotPoliciesResponse() err = c.Send(request, response) return } -func NewDescribeVpcEndPointServiceRequest() (request *DescribeVpcEndPointServiceRequest) { - request = &DescribeVpcEndPointServiceRequest{ +func NewDescribeSpecificTrafficPackageUsedDetailsRequest() (request *DescribeSpecificTrafficPackageUsedDetailsRequest) { + request = &DescribeSpecificTrafficPackageUsedDetailsRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcEndPointService") + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSpecificTrafficPackageUsedDetails") return } -func NewDescribeVpcEndPointServiceResponse() (response *DescribeVpcEndPointServiceResponse) { - response = &DescribeVpcEndPointServiceResponse{ +func NewDescribeSpecificTrafficPackageUsedDetailsResponse() (response *DescribeSpecificTrafficPackageUsedDetailsResponse) { + response = &DescribeSpecificTrafficPackageUsedDetailsResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DescribeVpcEndPointService -// 查询终端节点服务列表。 +// DescribeSpecificTrafficPackageUsedDetails +// 本接口 (DescribeSpecificTrafficPackageUsedDetails) 用于查询指定 共享流量包 的用量明细。 // // 可能返回的错误码: // -// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" -// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" -// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEID = "InvalidParameterValue.TrafficPackageId" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTFOUND = "InvalidParameterValue.TrafficPackageNotFound" +func (c *Client) DescribeSpecificTrafficPackageUsedDetails(request *DescribeSpecificTrafficPackageUsedDetailsRequest) (response *DescribeSpecificTrafficPackageUsedDetailsResponse, err error) { + return c.DescribeSpecificTrafficPackageUsedDetailsWithContext(context.Background(), request) +} + +// DescribeSpecificTrafficPackageUsedDetails +// 本接口 (DescribeSpecificTrafficPackageUsedDetails) 用于查询指定 共享流量包 的用量明细。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEID = "InvalidParameterValue.TrafficPackageId" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTFOUND = "InvalidParameterValue.TrafficPackageNotFound" +func (c *Client) DescribeSpecificTrafficPackageUsedDetailsWithContext(ctx context.Context, request *DescribeSpecificTrafficPackageUsedDetailsRequest) (response *DescribeSpecificTrafficPackageUsedDetailsResponse, err error) { + if request == nil { + request = NewDescribeSpecificTrafficPackageUsedDetailsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSpecificTrafficPackageUsedDetails require credential") + } + + request.SetContext(ctx) + + response = NewDescribeSpecificTrafficPackageUsedDetailsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeSubnetResourceDashboardRequest() (request *DescribeSubnetResourceDashboardRequest) { + request = &DescribeSubnetResourceDashboardRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSubnetResourceDashboard") + + return +} + +func NewDescribeSubnetResourceDashboardResponse() (response *DescribeSubnetResourceDashboardResponse) { + response = &DescribeSubnetResourceDashboardResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeSubnetResourceDashboard +// 本接口(DescribeSubnetResourceDashboard)用于查看Subnet资源信息。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeSubnetResourceDashboard(request *DescribeSubnetResourceDashboardRequest) (response *DescribeSubnetResourceDashboardResponse, err error) { + return c.DescribeSubnetResourceDashboardWithContext(context.Background(), request) +} + +// DescribeSubnetResourceDashboard +// 本接口(DescribeSubnetResourceDashboard)用于查看Subnet资源信息。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeSubnetResourceDashboardWithContext(ctx context.Context, request *DescribeSubnetResourceDashboardRequest) (response *DescribeSubnetResourceDashboardResponse, err error) { + if request == nil { + request = NewDescribeSubnetResourceDashboardRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSubnetResourceDashboard require credential") + } + + request.SetContext(ctx) + + response = NewDescribeSubnetResourceDashboardResponse() + err = c.Send(request, response) + return +} + +func NewDescribeSubnetsRequest() (request *DescribeSubnetsRequest) { + request = &DescribeSubnetsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeSubnets") + + return +} + +func NewDescribeSubnetsResponse() (response *DescribeSubnetsResponse) { + response = &DescribeSubnetsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeSubnets +// 本接口(DescribeSubnets)用于查询子网列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) DescribeSubnets(request *DescribeSubnetsRequest) (response *DescribeSubnetsResponse, err error) { + return c.DescribeSubnetsWithContext(context.Background(), request) +} + +// DescribeSubnets +// 本接口(DescribeSubnets)用于查询子网列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) DescribeSubnetsWithContext(ctx context.Context, request *DescribeSubnetsRequest) (response *DescribeSubnetsResponse, err error) { + if request == nil { + request = NewDescribeSubnetsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeSubnets require credential") + } + + request.SetContext(ctx) + + response = NewDescribeSubnetsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeTaskResultRequest() (request *DescribeTaskResultRequest) { + request = &DescribeTaskResultRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeTaskResult") + + return +} + +func NewDescribeTaskResultResponse() (response *DescribeTaskResultResponse) { + response = &DescribeTaskResultResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeTaskResult +// 查询EIP异步任务执行结果 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeTaskResult(request *DescribeTaskResultRequest) (response *DescribeTaskResultResponse, err error) { + return c.DescribeTaskResultWithContext(context.Background(), request) +} + +// DescribeTaskResult +// 查询EIP异步任务执行结果 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeTaskResultWithContext(ctx context.Context, request *DescribeTaskResultRequest) (response *DescribeTaskResultResponse, err error) { + if request == nil { + request = NewDescribeTaskResultRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeTaskResult require credential") + } + + request.SetContext(ctx) + + response = NewDescribeTaskResultResponse() + err = c.Send(request, response) + return +} + +func NewDescribeTemplateLimitsRequest() (request *DescribeTemplateLimitsRequest) { + request = &DescribeTemplateLimitsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeTemplateLimits") + + return +} + +func NewDescribeTemplateLimitsResponse() (response *DescribeTemplateLimitsResponse) { + response = &DescribeTemplateLimitsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeTemplateLimits +// 本接口(DescribeTemplateLimits)用于查询参数模板配额列表。 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeTemplateLimits(request *DescribeTemplateLimitsRequest) (response *DescribeTemplateLimitsResponse, err error) { + return c.DescribeTemplateLimitsWithContext(context.Background(), request) +} + +// DescribeTemplateLimits +// 本接口(DescribeTemplateLimits)用于查询参数模板配额列表。 +// +// 可能返回的错误码: +// +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// MISSINGPARAMETER = "MissingParameter" +func (c *Client) DescribeTemplateLimitsWithContext(ctx context.Context, request *DescribeTemplateLimitsRequest) (response *DescribeTemplateLimitsResponse, err error) { + if request == nil { + request = NewDescribeTemplateLimitsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeTemplateLimits require credential") + } + + request.SetContext(ctx) + + response = NewDescribeTemplateLimitsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeTenantCcnsRequest() (request *DescribeTenantCcnsRequest) { + request = &DescribeTenantCcnsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeTenantCcns") + + return +} + +func NewDescribeTenantCcnsResponse() (response *DescribeTenantCcnsResponse) { + response = &DescribeTenantCcnsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeTenantCcns +// 本接口(DescribeTenantCcns)用于获取要锁定的云联网实例列表。 +// +// 该接口一般用来封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间封禁, 只能按更粗的云联网实例粒度封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度封禁(DescribeCrossBorderCcnRegionBandwidthLimits) +// +// 如有需要, 可以封禁任意云联网实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) DescribeTenantCcns(request *DescribeTenantCcnsRequest) (response *DescribeTenantCcnsResponse, err error) { + return c.DescribeTenantCcnsWithContext(context.Background(), request) +} + +// DescribeTenantCcns +// 本接口(DescribeTenantCcns)用于获取要锁定的云联网实例列表。 +// +// 该接口一般用来封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间封禁, 只能按更粗的云联网实例粒度封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度封禁(DescribeCrossBorderCcnRegionBandwidthLimits) +// +// 如有需要, 可以封禁任意云联网实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) DescribeTenantCcnsWithContext(ctx context.Context, request *DescribeTenantCcnsRequest) (response *DescribeTenantCcnsResponse, err error) { + if request == nil { + request = NewDescribeTenantCcnsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeTenantCcns require credential") + } + + request.SetContext(ctx) + + response = NewDescribeTenantCcnsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeTrafficPackagesRequest() (request *DescribeTrafficPackagesRequest) { + request = &DescribeTrafficPackagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeTrafficPackages") + + return +} + +func NewDescribeTrafficPackagesResponse() (response *DescribeTrafficPackagesResponse) { + response = &DescribeTrafficPackagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeTrafficPackages +// 本接口 (DescribeTrafficPackages) 用于查询共享流量包详细信息,包括共享流量包唯一标识ID,名称,流量使用信息等 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +func (c *Client) DescribeTrafficPackages(request *DescribeTrafficPackagesRequest) (response *DescribeTrafficPackagesResponse, err error) { + return c.DescribeTrafficPackagesWithContext(context.Background(), request) +} + +// DescribeTrafficPackages +// 本接口 (DescribeTrafficPackages) 用于查询共享流量包详细信息,包括共享流量包唯一标识ID,名称,流量使用信息等 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter" +// INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" +func (c *Client) DescribeTrafficPackagesWithContext(ctx context.Context, request *DescribeTrafficPackagesRequest) (response *DescribeTrafficPackagesResponse, err error) { + if request == nil { + request = NewDescribeTrafficPackagesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeTrafficPackages require credential") + } + + request.SetContext(ctx) + + response = NewDescribeTrafficPackagesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeUsedIpAddressRequest() (request *DescribeUsedIpAddressRequest) { + request = &DescribeUsedIpAddressRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeUsedIpAddress") + + return +} + +func NewDescribeUsedIpAddressResponse() (response *DescribeUsedIpAddressResponse) { + response = &DescribeUsedIpAddressResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeUsedIpAddress +// 本接口(DescribeUsedIpAddress)用于查询Subnet或者Vpc内的ip的使用情况, +// +// 如ip被占用,返回占用ip的资源类别与id;如未被占用,返回空值 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" +func (c *Client) DescribeUsedIpAddress(request *DescribeUsedIpAddressRequest) (response *DescribeUsedIpAddressResponse, err error) { + return c.DescribeUsedIpAddressWithContext(context.Background(), request) +} + +// DescribeUsedIpAddress +// 本接口(DescribeUsedIpAddress)用于查询Subnet或者Vpc内的ip的使用情况, +// +// 如ip被占用,返回占用ip的资源类别与id;如未被占用,返回空值 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" +func (c *Client) DescribeUsedIpAddressWithContext(ctx context.Context, request *DescribeUsedIpAddressRequest) (response *DescribeUsedIpAddressResponse, err error) { + if request == nil { + request = NewDescribeUsedIpAddressRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeUsedIpAddress require credential") + } + + request.SetContext(ctx) + + response = NewDescribeUsedIpAddressResponse() + err = c.Send(request, response) + return +} + +func NewDescribeVpcEndPointRequest() (request *DescribeVpcEndPointRequest) { + request = &DescribeVpcEndPointRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcEndPoint") + + return +} + +func NewDescribeVpcEndPointResponse() (response *DescribeVpcEndPointResponse) { + response = &DescribeVpcEndPointResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeVpcEndPoint +// 本接口(DescribeVpcEndPoint)用于查询终端节点列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeVpcEndPointService(request *DescribeVpcEndPointServiceRequest) (response *DescribeVpcEndPointServiceResponse, err error) { +// RESOURCENOTFOUND_SVCNOTEXIST = "ResourceNotFound.SvcNotExist" +func (c *Client) DescribeVpcEndPoint(request *DescribeVpcEndPointRequest) (response *DescribeVpcEndPointResponse, err error) { + return c.DescribeVpcEndPointWithContext(context.Background(), request) +} + +// DescribeVpcEndPoint +// 本接口(DescribeVpcEndPoint)用于查询终端节点列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// RESOURCENOTFOUND_SVCNOTEXIST = "ResourceNotFound.SvcNotExist" +func (c *Client) DescribeVpcEndPointWithContext(ctx context.Context, request *DescribeVpcEndPointRequest) (response *DescribeVpcEndPointResponse, err error) { if request == nil { - request = NewDescribeVpcEndPointServiceRequest() + request = NewDescribeVpcEndPointRequest() } - response = NewDescribeVpcEndPointServiceResponse() + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcEndPoint require credential") + } + + request.SetContext(ctx) + + response = NewDescribeVpcEndPointResponse() err = c.Send(request, response) return } +func NewDescribeVpcEndPointServiceRequest() (request *DescribeVpcEndPointServiceRequest) { + request = &DescribeVpcEndPointServiceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcEndPointService") + + return +} + +func NewDescribeVpcEndPointServiceResponse() (response *DescribeVpcEndPointServiceResponse) { + response = &DescribeVpcEndPointServiceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeVpcEndPointService +// 查询终端节点服务列表。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch" +// UNSUPPORTEDOPERATION_ROLENOTFOUND = "UnsupportedOperation.RoleNotFound" +func (c *Client) DescribeVpcEndPointService(request *DescribeVpcEndPointServiceRequest) (response *DescribeVpcEndPointServiceResponse, err error) { + return c.DescribeVpcEndPointServiceWithContext(context.Background(), request) +} + // DescribeVpcEndPointService // 查询终端节点服务列表。 // @@ -9611,14 +12535,23 @@ func (c *Client) DescribeVpcEndPointService(request *DescribeVpcEndPointServiceR // // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch" +// UNSUPPORTEDOPERATION_ROLENOTFOUND = "UnsupportedOperation.RoleNotFound" func (c *Client) DescribeVpcEndPointServiceWithContext(ctx context.Context, request *DescribeVpcEndPointServiceRequest) (response *DescribeVpcEndPointServiceResponse, err error) { if request == nil { request = NewDescribeVpcEndPointServiceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcEndPointService require credential") + } + request.SetContext(ctx) response = NewDescribeVpcEndPointServiceResponse() @@ -9630,6 +12563,7 @@ func NewDescribeVpcEndPointServiceWhiteListRequest() (request *DescribeVpcEndPoi request = &DescribeVpcEndPointServiceWhiteListRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcEndPointServiceWhiteList") return @@ -9643,33 +12577,36 @@ func NewDescribeVpcEndPointServiceWhiteListResponse() (response *DescribeVpcEndP } // DescribeVpcEndPointServiceWhiteList -// 查询终端节点服务的服务白名单列表。 +// 本接口(DescribeVpcEndPointServiceWhiteList)用于查询终端节点服务的服务白名单列表。 // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" func (c *Client) DescribeVpcEndPointServiceWhiteList(request *DescribeVpcEndPointServiceWhiteListRequest) (response *DescribeVpcEndPointServiceWhiteListResponse, err error) { - if request == nil { - request = NewDescribeVpcEndPointServiceWhiteListRequest() - } - - response = NewDescribeVpcEndPointServiceWhiteListResponse() - err = c.Send(request, response) - return + return c.DescribeVpcEndPointServiceWhiteListWithContext(context.Background(), request) } // DescribeVpcEndPointServiceWhiteList -// 查询终端节点服务的服务白名单列表。 +// 本接口(DescribeVpcEndPointServiceWhiteList)用于查询终端节点服务的服务白名单列表。 // // 可能返回的错误码: // +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" func (c *Client) DescribeVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *DescribeVpcEndPointServiceWhiteListRequest) (response *DescribeVpcEndPointServiceWhiteListResponse, err error) { if request == nil { request = NewDescribeVpcEndPointServiceWhiteListRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcEndPointServiceWhiteList require credential") + } + request.SetContext(ctx) response = NewDescribeVpcEndPointServiceWhiteListResponse() @@ -9681,6 +12618,7 @@ func NewDescribeVpcInstancesRequest() (request *DescribeVpcInstancesRequest) { request = &DescribeVpcInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcInstances") return @@ -9694,32 +12632,26 @@ func NewDescribeVpcInstancesResponse() (response *DescribeVpcInstancesResponse) } // DescribeVpcInstances -// -// 本接口(DescribeVpcInstances)用于查询VPC下的云主机实例列表。 +// 本接口(DescribeVpcInstances)用于查询VPC下的云主机实例列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpcInstances(request *DescribeVpcInstancesRequest) (response *DescribeVpcInstancesResponse, err error) { - if request == nil { - request = NewDescribeVpcInstancesRequest() - } - - response = NewDescribeVpcInstancesResponse() - err = c.Send(request, response) - return + return c.DescribeVpcInstancesWithContext(context.Background(), request) } // DescribeVpcInstances -// -// 本接口(DescribeVpcInstances)用于查询VPC下的云主机实例列表。 +// 本接口(DescribeVpcInstances)用于查询VPC下的云主机实例列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" @@ -9729,6 +12661,11 @@ func (c *Client) DescribeVpcInstancesWithContext(ctx context.Context, request *D if request == nil { request = NewDescribeVpcInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcInstances require credential") + } + request.SetContext(ctx) response = NewDescribeVpcInstancesResponse() @@ -9740,6 +12677,7 @@ func NewDescribeVpcIpv6AddressesRequest() (request *DescribeVpcIpv6AddressesRequ request = &DescribeVpcIpv6AddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcIpv6Addresses") return @@ -9760,15 +12698,10 @@ func NewDescribeVpcIpv6AddressesResponse() (response *DescribeVpcIpv6AddressesRe // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpcIpv6Addresses(request *DescribeVpcIpv6AddressesRequest) (response *DescribeVpcIpv6AddressesResponse, err error) { - if request == nil { - request = NewDescribeVpcIpv6AddressesRequest() - } - - response = NewDescribeVpcIpv6AddressesResponse() - err = c.Send(request, response) - return + return c.DescribeVpcIpv6AddressesWithContext(context.Background(), request) } // DescribeVpcIpv6Addresses @@ -9779,11 +12712,17 @@ func (c *Client) DescribeVpcIpv6Addresses(request *DescribeVpcIpv6AddressesReque // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpcIpv6AddressesWithContext(ctx context.Context, request *DescribeVpcIpv6AddressesRequest) (response *DescribeVpcIpv6AddressesResponse, err error) { if request == nil { request = NewDescribeVpcIpv6AddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcIpv6Addresses require credential") + } + request.SetContext(ctx) response = NewDescribeVpcIpv6AddressesResponse() @@ -9795,6 +12734,7 @@ func NewDescribeVpcLimitsRequest() (request *DescribeVpcLimitsRequest) { request = &DescribeVpcLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcLimits") return @@ -9808,147 +12748,156 @@ func NewDescribeVpcLimitsResponse() (response *DescribeVpcLimitsResponse) { } // DescribeVpcLimits -// 获取私有网络配额,部分私有网络的配额有地域属性。 +// 本接口(DescribeVpcLimits)用于获取私有网络配额,部分私有网络的配额有地域属性。 // // LimitTypes取值范围: // -// * appid-max-vpcs (每个开发商每个地域可创建的VPC数) +// * appid-max-vpcs (每个开发商每个地域可创建的VPC数)。 +// +// * vpc-max-subnets(每个VPC可创建的子网数)。 // -// * vpc-max-subnets(每个VPC可创建的子网数) +// * vpc-max-route-tables(每个VPC可创建的路由表数)。 // -// * vpc-max-route-tables(每个VPC可创建的路由表数) +// * route-table-max-policies(每个路由表可添加的策略数)。 // -// * route-table-max-policies(每个路由表可添加的策略数) +// * vpc-max-vpn-gateways(每个VPC可创建的VPN网关数)。 // -// * vpc-max-vpn-gateways(每个VPC可创建的VPN网关数) +// * appid-max-custom-gateways(每个开发商可创建的对端网关数)。 // -// * appid-max-custom-gateways(每个开发商可创建的对端网关数) +// * appid-max-vpn-connections(每个开发商可创建的VPN通道数)。 // -// * appid-max-vpn-connections(每个开发商可创建的VPN通道数) +// * custom-gateway-max-vpn-connections(每个对端网关可创建的VPN通道数)。 // -// * custom-gateway-max-vpn-connections(每个对端网关可创建的VPN通道数) +// * vpn-gateway-max-custom-gateways(每个VPNGW可以创建的通道数)。 // -// * vpn-gateway-max-custom-gateways(每个VPNGW可以创建的通道数) +// * vpc-max-network-acls(每个VPC可创建的网络ACL数)。 // -// * vpc-max-network-acls(每个VPC可创建的网络ACL数) +// * network-acl-max-inbound-policies(每个网络ACL可添加的入站规则数)。 // -// * network-acl-max-inbound-policies(每个网络ACL可添加的入站规则数) +// * network-acl-max-outbound-policies(每个网络ACL可添加的出站规则数)。 // -// * network-acl-max-outbound-policies(每个网络ACL可添加的出站规则数) +// * vpc-max-vpcpeers(每个VPC可创建的对等连接数)。 // -// * vpc-max-vpcpeers(每个VPC可创建的对等连接数) +// * vpc-max-available-vpcpeers(每个VPC可创建的有效对等连接数)。 // -// * vpc-max-available-vpcpeers(每个VPC可创建的有效对等连接数) +// * vpc-max-basic-network-interconnections(每个VPC可创建的基础网络云主机与VPC互通数)。 // -// * vpc-max-basic-network-interconnections(每个VPC可创建的基础网络云主机与VPC互通数) +// * direct-connection-max-snats(每个专线网关可创建的SNAT数)。 // -// * direct-connection-max-snats(每个专线网关可创建的SNAT数) +// * direct-connection-max-dnats(每个专线网关可创建的DNAT数)。 // -// * direct-connection-max-dnats(每个专线网关可创建的DNAT数) +// * direct-connection-max-snapts(每个专线网关可创建的SNAPT数)。 // -// * direct-connection-max-snapts(每个专线网关可创建的SNAPT数) +// * direct-connection-max-dnapts(每个专线网关可创建的DNAPT数)。 // -// * direct-connection-max-dnapts(每个专线网关可创建的DNAPT数) +// * vpc-max-nat-gateways(每个VPC可创建的NAT网关数)。 // -// * vpc-max-nat-gateways(每个VPC可创建的NAT网关数) +// * nat-gateway-max-eips(每个NAT可以购买的外网IP数量)。 // -// * nat-gateway-max-eips(每个NAT可以购买的外网IP数量) +// * vpc-max-enis(每个VPC可创建弹性网卡数)。 // -// * vpc-max-enis(每个VPC可创建弹性网卡数) +// * vpc-max-havips(每个VPC可创建HAVIP数)。 // -// * vpc-max-havips(每个VPC可创建HAVIP数) +// * eni-max-private-ips(每个ENI可以绑定的内网IP数(ENI未绑定子机))。 // -// * eni-max-private-ips(每个ENI可以绑定的内网IP数(ENI未绑定子机)) +// * nat-gateway-max-dnapts(每个NAT网关可创建的DNAPT数)。 // -// * nat-gateway-max-dnapts(每个NAT网关可创建的DNAPT数) +// * vpc-max-ipv6s(每个VPC可分配的IPv6地址数)。 // -// * vpc-max-ipv6s(每个VPC可分配的IPv6地址数) +// * eni-max-ipv6s(每个ENI可分配的IPv6地址数)。 // -// * eni-max-ipv6s(每个ENI可分配的IPv6地址数) +// * vpc-max-assistant_cidrs(每个VPC可分配的辅助CIDR数)。 // -// * vpc-max-assistant_cidrs(每个VPC可分配的辅助CIDR数) +// * appid-max-end-point-services (每个开发商每个地域可创建的终端节点服务个数)。 +// +// * appid-max-end-point-service-white-lists (每个开发商每个地域可创建的终端节点服务白名单个数)。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeVpcLimits(request *DescribeVpcLimitsRequest) (response *DescribeVpcLimitsResponse, err error) { - if request == nil { - request = NewDescribeVpcLimitsRequest() - } - - response = NewDescribeVpcLimitsResponse() - err = c.Send(request, response) - return + return c.DescribeVpcLimitsWithContext(context.Background(), request) } // DescribeVpcLimits -// 获取私有网络配额,部分私有网络的配额有地域属性。 +// 本接口(DescribeVpcLimits)用于获取私有网络配额,部分私有网络的配额有地域属性。 // // LimitTypes取值范围: // -// * appid-max-vpcs (每个开发商每个地域可创建的VPC数) +// * appid-max-vpcs (每个开发商每个地域可创建的VPC数)。 +// +// * vpc-max-subnets(每个VPC可创建的子网数)。 // -// * vpc-max-subnets(每个VPC可创建的子网数) +// * vpc-max-route-tables(每个VPC可创建的路由表数)。 // -// * vpc-max-route-tables(每个VPC可创建的路由表数) +// * route-table-max-policies(每个路由表可添加的策略数)。 // -// * route-table-max-policies(每个路由表可添加的策略数) +// * vpc-max-vpn-gateways(每个VPC可创建的VPN网关数)。 // -// * vpc-max-vpn-gateways(每个VPC可创建的VPN网关数) +// * appid-max-custom-gateways(每个开发商可创建的对端网关数)。 // -// * appid-max-custom-gateways(每个开发商可创建的对端网关数) +// * appid-max-vpn-connections(每个开发商可创建的VPN通道数)。 // -// * appid-max-vpn-connections(每个开发商可创建的VPN通道数) +// * custom-gateway-max-vpn-connections(每个对端网关可创建的VPN通道数)。 // -// * custom-gateway-max-vpn-connections(每个对端网关可创建的VPN通道数) +// * vpn-gateway-max-custom-gateways(每个VPNGW可以创建的通道数)。 // -// * vpn-gateway-max-custom-gateways(每个VPNGW可以创建的通道数) +// * vpc-max-network-acls(每个VPC可创建的网络ACL数)。 // -// * vpc-max-network-acls(每个VPC可创建的网络ACL数) +// * network-acl-max-inbound-policies(每个网络ACL可添加的入站规则数)。 // -// * network-acl-max-inbound-policies(每个网络ACL可添加的入站规则数) +// * network-acl-max-outbound-policies(每个网络ACL可添加的出站规则数)。 // -// * network-acl-max-outbound-policies(每个网络ACL可添加的出站规则数) +// * vpc-max-vpcpeers(每个VPC可创建的对等连接数)。 // -// * vpc-max-vpcpeers(每个VPC可创建的对等连接数) +// * vpc-max-available-vpcpeers(每个VPC可创建的有效对等连接数)。 // -// * vpc-max-available-vpcpeers(每个VPC可创建的有效对等连接数) +// * vpc-max-basic-network-interconnections(每个VPC可创建的基础网络云主机与VPC互通数)。 // -// * vpc-max-basic-network-interconnections(每个VPC可创建的基础网络云主机与VPC互通数) +// * direct-connection-max-snats(每个专线网关可创建的SNAT数)。 // -// * direct-connection-max-snats(每个专线网关可创建的SNAT数) +// * direct-connection-max-dnats(每个专线网关可创建的DNAT数)。 // -// * direct-connection-max-dnats(每个专线网关可创建的DNAT数) +// * direct-connection-max-snapts(每个专线网关可创建的SNAPT数)。 // -// * direct-connection-max-snapts(每个专线网关可创建的SNAPT数) +// * direct-connection-max-dnapts(每个专线网关可创建的DNAPT数)。 // -// * direct-connection-max-dnapts(每个专线网关可创建的DNAPT数) +// * vpc-max-nat-gateways(每个VPC可创建的NAT网关数)。 // -// * vpc-max-nat-gateways(每个VPC可创建的NAT网关数) +// * nat-gateway-max-eips(每个NAT可以购买的外网IP数量)。 // -// * nat-gateway-max-eips(每个NAT可以购买的外网IP数量) +// * vpc-max-enis(每个VPC可创建弹性网卡数)。 // -// * vpc-max-enis(每个VPC可创建弹性网卡数) +// * vpc-max-havips(每个VPC可创建HAVIP数)。 // -// * vpc-max-havips(每个VPC可创建HAVIP数) +// * eni-max-private-ips(每个ENI可以绑定的内网IP数(ENI未绑定子机))。 // -// * eni-max-private-ips(每个ENI可以绑定的内网IP数(ENI未绑定子机)) +// * nat-gateway-max-dnapts(每个NAT网关可创建的DNAPT数)。 // -// * nat-gateway-max-dnapts(每个NAT网关可创建的DNAPT数) +// * vpc-max-ipv6s(每个VPC可分配的IPv6地址数)。 // -// * vpc-max-ipv6s(每个VPC可分配的IPv6地址数) +// * eni-max-ipv6s(每个ENI可分配的IPv6地址数)。 // -// * eni-max-ipv6s(每个ENI可分配的IPv6地址数) +// * vpc-max-assistant_cidrs(每个VPC可分配的辅助CIDR数)。 // -// * vpc-max-assistant_cidrs(每个VPC可分配的辅助CIDR数) +// * appid-max-end-point-services (每个开发商每个地域可创建的终端节点服务个数)。 +// +// * appid-max-end-point-service-white-lists (每个开发商每个地域可创建的终端节点服务白名单个数)。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" func (c *Client) DescribeVpcLimitsWithContext(ctx context.Context, request *DescribeVpcLimitsRequest) (response *DescribeVpcLimitsResponse, err error) { if request == nil { request = NewDescribeVpcLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcLimits require credential") + } + request.SetContext(ctx) response = NewDescribeVpcLimitsResponse() @@ -9956,10 +12905,82 @@ func (c *Client) DescribeVpcLimitsWithContext(ctx context.Context, request *Desc return } +func NewDescribeVpcPeeringConnectionsRequest() (request *DescribeVpcPeeringConnectionsRequest) { + request = &DescribeVpcPeeringConnectionsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcPeeringConnections") + + return +} + +func NewDescribeVpcPeeringConnectionsResponse() (response *DescribeVpcPeeringConnectionsResponse) { + response = &DescribeVpcPeeringConnectionsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeVpcPeeringConnections +// 查询私有网络对等连接。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER = "UnknownParameter" +func (c *Client) DescribeVpcPeeringConnections(request *DescribeVpcPeeringConnectionsRequest) (response *DescribeVpcPeeringConnectionsResponse, err error) { + return c.DescribeVpcPeeringConnectionsWithContext(context.Background(), request) +} + +// DescribeVpcPeeringConnections +// 查询私有网络对等连接。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER = "UnknownParameter" +func (c *Client) DescribeVpcPeeringConnectionsWithContext(ctx context.Context, request *DescribeVpcPeeringConnectionsRequest) (response *DescribeVpcPeeringConnectionsResponse, err error) { + if request == nil { + request = NewDescribeVpcPeeringConnectionsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcPeeringConnections require credential") + } + + request.SetContext(ctx) + + response = NewDescribeVpcPeeringConnectionsResponse() + err = c.Send(request, response) + return +} + func NewDescribeVpcPrivateIpAddressesRequest() (request *DescribeVpcPrivateIpAddressesRequest) { request = &DescribeVpcPrivateIpAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcPrivateIpAddresses") return @@ -9979,18 +13000,13 @@ func NewDescribeVpcPrivateIpAddressesResponse() (response *DescribeVpcPrivateIpA // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpcPrivateIpAddresses(request *DescribeVpcPrivateIpAddressesRequest) (response *DescribeVpcPrivateIpAddressesResponse, err error) { - if request == nil { - request = NewDescribeVpcPrivateIpAddressesRequest() - } - - response = NewDescribeVpcPrivateIpAddressesResponse() - err = c.Send(request, response) - return + return c.DescribeVpcPrivateIpAddressesWithContext(context.Background(), request) } // DescribeVpcPrivateIpAddresses @@ -10000,6 +13016,7 @@ func (c *Client) DescribeVpcPrivateIpAddresses(request *DescribeVpcPrivateIpAddr // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" @@ -10008,6 +13025,11 @@ func (c *Client) DescribeVpcPrivateIpAddressesWithContext(ctx context.Context, r if request == nil { request = NewDescribeVpcPrivateIpAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcPrivateIpAddresses require credential") + } + request.SetContext(ctx) response = NewDescribeVpcPrivateIpAddressesResponse() @@ -10019,6 +13041,7 @@ func NewDescribeVpcResourceDashboardRequest() (request *DescribeVpcResourceDashb request = &DescribeVpcResourceDashboardRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcResourceDashboard") return @@ -10040,13 +13063,7 @@ func NewDescribeVpcResourceDashboardResponse() (response *DescribeVpcResourceDas // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpcResourceDashboard(request *DescribeVpcResourceDashboardRequest) (response *DescribeVpcResourceDashboardResponse, err error) { - if request == nil { - request = NewDescribeVpcResourceDashboardRequest() - } - - response = NewDescribeVpcResourceDashboardResponse() - err = c.Send(request, response) - return + return c.DescribeVpcResourceDashboardWithContext(context.Background(), request) } // DescribeVpcResourceDashboard @@ -10061,6 +13078,11 @@ func (c *Client) DescribeVpcResourceDashboardWithContext(ctx context.Context, re if request == nil { request = NewDescribeVpcResourceDashboardRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcResourceDashboard require credential") + } + request.SetContext(ctx) response = NewDescribeVpcResourceDashboardResponse() @@ -10072,6 +13094,7 @@ func NewDescribeVpcTaskResultRequest() (request *DescribeVpcTaskResultRequest) { request = &DescribeVpcTaskResultRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcTaskResult") return @@ -10089,18 +13112,13 @@ func NewDescribeVpcTaskResultResponse() (response *DescribeVpcTaskResultResponse // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpcTaskResult(request *DescribeVpcTaskResultRequest) (response *DescribeVpcTaskResultResponse, err error) { - if request == nil { - request = NewDescribeVpcTaskResultRequest() - } - - response = NewDescribeVpcTaskResultResponse() - err = c.Send(request, response) - return + return c.DescribeVpcTaskResultWithContext(context.Background(), request) } // DescribeVpcTaskResult @@ -10108,6 +13126,7 @@ func (c *Client) DescribeVpcTaskResult(request *DescribeVpcTaskResultRequest) (r // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" @@ -10116,6 +13135,11 @@ func (c *Client) DescribeVpcTaskResultWithContext(ctx context.Context, request * if request == nil { request = NewDescribeVpcTaskResultRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcTaskResult require credential") + } + request.SetContext(ctx) response = NewDescribeVpcTaskResultResponse() @@ -10127,6 +13151,7 @@ func NewDescribeVpcsRequest() (request *DescribeVpcsRequest) { request = &DescribeVpcsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpcs") return @@ -10144,21 +13169,18 @@ func NewDescribeVpcsResponse() (response *DescribeVpcsResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DescribeVpcs(request *DescribeVpcsRequest) (response *DescribeVpcsResponse, err error) { - if request == nil { - request = NewDescribeVpcsRequest() - } - - response = NewDescribeVpcsResponse() - err = c.Send(request, response) - return +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DescribeVpcs(request *DescribeVpcsRequest) (response *DescribeVpcsResponse, err error) { + return c.DescribeVpcsWithContext(context.Background(), request) } // DescribeVpcs @@ -10166,17 +13188,25 @@ func (c *Client) DescribeVpcs(request *DescribeVpcsRequest) (response *DescribeV // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpcsWithContext(ctx context.Context, request *DescribeVpcsRequest) (response *DescribeVpcsResponse, err error) { if request == nil { request = NewDescribeVpcsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpcs require credential") + } + request.SetContext(ctx) response = NewDescribeVpcsResponse() @@ -10188,6 +13218,7 @@ func NewDescribeVpnConnectionsRequest() (request *DescribeVpnConnectionsRequest) request = &DescribeVpnConnectionsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnConnections") return @@ -10201,39 +13232,42 @@ func NewDescribeVpnConnectionsResponse() (response *DescribeVpnConnectionsRespon } // DescribeVpnConnections -// -// 本接口(DescribeVpnConnections)查询VPN通道列表。 +// 本接口(DescribeVpnConnections)用于查询VPN通道列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpnConnections(request *DescribeVpnConnectionsRequest) (response *DescribeVpnConnectionsResponse, err error) { - if request == nil { - request = NewDescribeVpnConnectionsRequest() - } - - response = NewDescribeVpnConnectionsResponse() - err = c.Send(request, response) - return + return c.DescribeVpnConnectionsWithContext(context.Background(), request) } // DescribeVpnConnections -// -// 本接口(DescribeVpnConnections)查询VPN通道列表。 +// 本接口(DescribeVpnConnections)用于查询VPN通道列表。 // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpnConnectionsWithContext(ctx context.Context, request *DescribeVpnConnectionsRequest) (response *DescribeVpnConnectionsResponse, err error) { if request == nil { request = NewDescribeVpnConnectionsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnConnections require credential") + } + request.SetContext(ctx) response = NewDescribeVpnConnectionsResponse() @@ -10245,6 +13279,7 @@ func NewDescribeVpnGatewayCcnRoutesRequest() (request *DescribeVpnGatewayCcnRout request = &DescribeVpnGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnGatewayCcnRoutes") return @@ -10258,35 +13293,36 @@ func NewDescribeVpnGatewayCcnRoutesResponse() (response *DescribeVpnGatewayCcnRo } // DescribeVpnGatewayCcnRoutes -// 本接口(DescribeVpnGatewayCcnRoutes)用于查询VPN网关云联网路由 +// 本接口(DescribeVpnGatewayCcnRoutes)用于查询VPN网关云联网路由。 // // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpnGatewayCcnRoutes(request *DescribeVpnGatewayCcnRoutesRequest) (response *DescribeVpnGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewDescribeVpnGatewayCcnRoutesRequest() - } - - response = NewDescribeVpnGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.DescribeVpnGatewayCcnRoutesWithContext(context.Background(), request) } // DescribeVpnGatewayCcnRoutes -// 本接口(DescribeVpnGatewayCcnRoutes)用于查询VPN网关云联网路由 +// 本接口(DescribeVpnGatewayCcnRoutes)用于查询VPN网关云联网路由。 // // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DescribeVpnGatewayCcnRoutesWithContext(ctx context.Context, request *DescribeVpnGatewayCcnRoutesRequest) (response *DescribeVpnGatewayCcnRoutesResponse, err error) { if request == nil { request = NewDescribeVpnGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewDescribeVpnGatewayCcnRoutesResponse() @@ -10298,6 +13334,7 @@ func NewDescribeVpnGatewayRoutesRequest() (request *DescribeVpnGatewayRoutesRequ request = &DescribeVpnGatewayRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnGatewayRoutes") return @@ -10311,36 +13348,32 @@ func NewDescribeVpnGatewayRoutesResponse() (response *DescribeVpnGatewayRoutesRe } // DescribeVpnGatewayRoutes -// 查询路由型VPN网关的目的路由 +// 本接口(DescribeVpnGatewayRoutes)用于查询VPN网关路由。 // // 可能返回的错误码: // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpnGatewayRoutes(request *DescribeVpnGatewayRoutesRequest) (response *DescribeVpnGatewayRoutesResponse, err error) { - if request == nil { - request = NewDescribeVpnGatewayRoutesRequest() - } - - response = NewDescribeVpnGatewayRoutesResponse() - err = c.Send(request, response) - return + return c.DescribeVpnGatewayRoutesWithContext(context.Background(), request) } // DescribeVpnGatewayRoutes -// 查询路由型VPN网关的目的路由 +// 本接口(DescribeVpnGatewayRoutes)用于查询VPN网关路由。 // // 可能返回的错误码: // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" @@ -10350,6 +13383,11 @@ func (c *Client) DescribeVpnGatewayRoutesWithContext(ctx context.Context, reques if request == nil { request = NewDescribeVpnGatewayRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnGatewayRoutes require credential") + } + request.SetContext(ctx) response = NewDescribeVpnGatewayRoutesResponse() @@ -10357,10 +13395,127 @@ func (c *Client) DescribeVpnGatewayRoutesWithContext(ctx context.Context, reques return } +func NewDescribeVpnGatewaySslClientsRequest() (request *DescribeVpnGatewaySslClientsRequest) { + request = &DescribeVpnGatewaySslClientsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnGatewaySslClients") + + return +} + +func NewDescribeVpnGatewaySslClientsResponse() (response *DescribeVpnGatewaySslClientsResponse) { + response = &DescribeVpnGatewaySslClientsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeVpnGatewaySslClients +// 本接口(DescribeVpnGatewaySslClients)用于查询SSL-VPN-CLIENT 列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DescribeVpnGatewaySslClients(request *DescribeVpnGatewaySslClientsRequest) (response *DescribeVpnGatewaySslClientsResponse, err error) { + return c.DescribeVpnGatewaySslClientsWithContext(context.Background(), request) +} + +// DescribeVpnGatewaySslClients +// 本接口(DescribeVpnGatewaySslClients)用于查询SSL-VPN-CLIENT 列表。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) DescribeVpnGatewaySslClientsWithContext(ctx context.Context, request *DescribeVpnGatewaySslClientsRequest) (response *DescribeVpnGatewaySslClientsResponse, err error) { + if request == nil { + request = NewDescribeVpnGatewaySslClientsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnGatewaySslClients require credential") + } + + request.SetContext(ctx) + + response = NewDescribeVpnGatewaySslClientsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeVpnGatewaySslServersRequest() (request *DescribeVpnGatewaySslServersRequest) { + request = &DescribeVpnGatewaySslServersRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnGatewaySslServers") + + return +} + +func NewDescribeVpnGatewaySslServersResponse() (response *DescribeVpnGatewaySslServersResponse) { + response = &DescribeVpnGatewaySslServersResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DescribeVpnGatewaySslServers +// 本接口(DescribeVpnGatewaySslServers)用于查询SSL-VPN SERVER 列表信息。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeVpnGatewaySslServers(request *DescribeVpnGatewaySslServersRequest) (response *DescribeVpnGatewaySslServersResponse, err error) { + return c.DescribeVpnGatewaySslServersWithContext(context.Background(), request) +} + +// DescribeVpnGatewaySslServers +// 本接口(DescribeVpnGatewaySslServers)用于查询SSL-VPN SERVER 列表信息。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DescribeVpnGatewaySslServersWithContext(ctx context.Context, request *DescribeVpnGatewaySslServersRequest) (response *DescribeVpnGatewaySslServersResponse, err error) { + if request == nil { + request = NewDescribeVpnGatewaySslServersRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnGatewaySslServers require credential") + } + + request.SetContext(ctx) + + response = NewDescribeVpnGatewaySslServersResponse() + err = c.Send(request, response) + return +} + func NewDescribeVpnGatewaysRequest() (request *DescribeVpnGatewaysRequest) { request = &DescribeVpnGatewaysRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DescribeVpnGateways") return @@ -10378,22 +13533,20 @@ func NewDescribeVpnGatewaysResponse() (response *DescribeVpnGatewaysResponse) { // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDVPNGATEWAYID_MALFORMED = "InvalidVpnGatewayId.Malformed" // INVALIDVPNGATEWAYID_NOTFOUND = "InvalidVpnGatewayId.NotFound" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpnGateways(request *DescribeVpnGatewaysRequest) (response *DescribeVpnGatewaysResponse, err error) { - if request == nil { - request = NewDescribeVpnGatewaysRequest() - } - - response = NewDescribeVpnGatewaysResponse() - err = c.Send(request, response) - return + return c.DescribeVpnGatewaysWithContext(context.Background(), request) } // DescribeVpnGateways @@ -10401,18 +13554,27 @@ func (c *Client) DescribeVpnGateways(request *DescribeVpnGatewaysRequest) (respo // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict" // INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDVPNGATEWAYID_MALFORMED = "InvalidVpnGatewayId.Malformed" // INVALIDVPNGATEWAYID_NOTFOUND = "InvalidVpnGatewayId.NotFound" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DescribeVpnGatewaysWithContext(ctx context.Context, request *DescribeVpnGatewaysRequest) (response *DescribeVpnGatewaysResponse, err error) { if request == nil { request = NewDescribeVpnGatewaysRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DescribeVpnGateways require credential") + } + request.SetContext(ctx) response = NewDescribeVpnGatewaysResponse() @@ -10424,6 +13586,7 @@ func NewDetachCcnInstancesRequest() (request *DetachCcnInstancesRequest) { request = &DetachCcnInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DetachCcnInstances") return @@ -10444,19 +13607,15 @@ func NewDetachCcnInstancesResponse() (response *DetachCcnInstancesResponse) { // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) DetachCcnInstances(request *DetachCcnInstancesRequest) (response *DetachCcnInstancesResponse, err error) { - if request == nil { - request = NewDetachCcnInstancesRequest() - } - - response = NewDetachCcnInstancesResponse() - err = c.Send(request, response) - return + return c.DetachCcnInstancesWithContext(context.Background(), request) } // DetachCcnInstances @@ -10467,7 +13626,9 @@ func (c *Client) DetachCcnInstances(request *DetachCcnInstancesRequest) (respons // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" @@ -10476,6 +13637,11 @@ func (c *Client) DetachCcnInstancesWithContext(ctx context.Context, request *Det if request == nil { request = NewDetachCcnInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DetachCcnInstances require credential") + } + request.SetContext(ctx) response = NewDetachCcnInstancesResponse() @@ -10487,6 +13653,7 @@ func NewDetachClassicLinkVpcRequest() (request *DetachClassicLinkVpcRequest) { request = &DetachClassicLinkVpcRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DetachClassicLinkVpc") return @@ -10511,13 +13678,7 @@ func NewDetachClassicLinkVpcResponse() (response *DetachClassicLinkVpcResponse) // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DetachClassicLinkVpc(request *DetachClassicLinkVpcRequest) (response *DetachClassicLinkVpcResponse, err error) { - if request == nil { - request = NewDetachClassicLinkVpcRequest() - } - - response = NewDetachClassicLinkVpcResponse() - err = c.Send(request, response) - return + return c.DetachClassicLinkVpcWithContext(context.Background(), request) } // DetachClassicLinkVpc @@ -10535,6 +13696,11 @@ func (c *Client) DetachClassicLinkVpcWithContext(ctx context.Context, request *D if request == nil { request = NewDetachClassicLinkVpcRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DetachClassicLinkVpc require credential") + } + request.SetContext(ctx) response = NewDetachClassicLinkVpcResponse() @@ -10546,6 +13712,7 @@ func NewDetachNetworkInterfaceRequest() (request *DetachNetworkInterfaceRequest) request = &DetachNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DetachNetworkInterface") return @@ -10565,91 +13732,206 @@ func NewDetachNetworkInterfaceResponse() (response *DetachNetworkInterfaceRespon // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) DetachNetworkInterface(request *DetachNetworkInterfaceRequest) (response *DetachNetworkInterfaceResponse, err error) { + return c.DetachNetworkInterfaceWithContext(context.Background(), request) +} + +// DetachNetworkInterface +// 本接口(DetachNetworkInterface)用于弹性网卡解绑云服务器。 +// +// 本接口是异步完成,如需查询异步任务执行结果,请使用本接口返回的`RequestId`轮询`DescribeVpcTaskResult`接口。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +func (c *Client) DetachNetworkInterfaceWithContext(ctx context.Context, request *DetachNetworkInterfaceRequest) (response *DetachNetworkInterfaceResponse, err error) { if request == nil { request = NewDetachNetworkInterfaceRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DetachNetworkInterface require credential") + } + + request.SetContext(ctx) + response = NewDetachNetworkInterfaceResponse() err = c.Send(request, response) return } -// DetachNetworkInterface -// 本接口(DetachNetworkInterface)用于弹性网卡解绑云服务器。 +func NewDetachSnapshotInstancesRequest() (request *DetachSnapshotInstancesRequest) { + request = &DetachSnapshotInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DetachSnapshotInstances") + + return +} + +func NewDetachSnapshotInstancesResponse() (response *DetachSnapshotInstancesResponse) { + response = &DetachSnapshotInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DetachSnapshotInstances +// 本接口(DetachSnapshotInstances)用于快照策略解关联实例。 // -// 本接口是异步完成,如需查询异步任务执行结果,请使用本接口返回的`RequestId`轮询`DescribeVpcTaskResult`接口。 +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTINSTANCEREGIONDIFF = "UnsupportedOperation.SnapshotInstanceRegionDiff" +// UNSUPPORTEDOPERATION_SNAPSHOTNOTATTACHED = "UnsupportedOperation.SnapshotNotAttached" +func (c *Client) DetachSnapshotInstances(request *DetachSnapshotInstancesRequest) (response *DetachSnapshotInstancesResponse, err error) { + return c.DetachSnapshotInstancesWithContext(context.Background(), request) +} + +// DetachSnapshotInstances +// 本接口(DetachSnapshotInstances)用于快照策略解关联实例。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTINSTANCEREGIONDIFF = "UnsupportedOperation.SnapshotInstanceRegionDiff" +// UNSUPPORTEDOPERATION_SNAPSHOTNOTATTACHED = "UnsupportedOperation.SnapshotNotAttached" +func (c *Client) DetachSnapshotInstancesWithContext(ctx context.Context, request *DetachSnapshotInstancesRequest) (response *DetachSnapshotInstancesResponse, err error) { + if request == nil { + request = NewDetachSnapshotInstancesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DetachSnapshotInstances require credential") + } + + request.SetContext(ctx) + + response = NewDetachSnapshotInstancesResponse() + err = c.Send(request, response) + return +} + +func NewDisableCcnRoutesRequest() (request *DisableCcnRoutesRequest) { + request = &DisableCcnRoutesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DisableCcnRoutes") + + return +} + +func NewDisableCcnRoutesResponse() (response *DisableCcnRoutesResponse) { + response = &DisableCcnRoutesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DisableCcnRoutes +// 本接口(DisableCcnRoutes)用于禁用已经启用的云联网(CCN)路由。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DisableCcnRoutes(request *DisableCcnRoutesRequest) (response *DisableCcnRoutesResponse, err error) { + return c.DisableCcnRoutesWithContext(context.Background(), request) +} + +// DisableCcnRoutes +// 本接口(DisableCcnRoutes)用于禁用已经启用的云联网(CCN)路由。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" -func (c *Client) DetachNetworkInterfaceWithContext(ctx context.Context, request *DetachNetworkInterfaceRequest) (response *DetachNetworkInterfaceResponse, err error) { +func (c *Client) DisableCcnRoutesWithContext(ctx context.Context, request *DisableCcnRoutesRequest) (response *DisableCcnRoutesResponse, err error) { if request == nil { - request = NewDetachNetworkInterfaceRequest() + request = NewDisableCcnRoutesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DisableCcnRoutes require credential") } + request.SetContext(ctx) - response = NewDetachNetworkInterfaceResponse() + response = NewDisableCcnRoutesResponse() err = c.Send(request, response) return } -func NewDisableCcnRoutesRequest() (request *DisableCcnRoutesRequest) { - request = &DisableCcnRoutesRequest{ +func NewDisableFlowLogsRequest() (request *DisableFlowLogsRequest) { + request = &DisableFlowLogsRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "DisableCcnRoutes") + + request.Init().WithApiInfo("vpc", APIVersion, "DisableFlowLogs") return } -func NewDisableCcnRoutesResponse() (response *DisableCcnRoutesResponse) { - response = &DisableCcnRoutesResponse{ +func NewDisableFlowLogsResponse() (response *DisableFlowLogsResponse) { + response = &DisableFlowLogsResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// DisableCcnRoutes -// 本接口(DisableCcnRoutes)用于禁用已经启用的云联网(CCN)路由 +// DisableFlowLogs +// 本接口(DisableFlowLogs)用于停止流日志。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DisableCcnRoutes(request *DisableCcnRoutesRequest) (response *DisableCcnRoutesResponse, err error) { - if request == nil { - request = NewDisableCcnRoutesRequest() - } - - response = NewDisableCcnRoutesResponse() - err = c.Send(request, response) - return +func (c *Client) DisableFlowLogs(request *DisableFlowLogsRequest) (response *DisableFlowLogsResponse, err error) { + return c.DisableFlowLogsWithContext(context.Background(), request) } -// DisableCcnRoutes -// 本接口(DisableCcnRoutes)用于禁用已经启用的云联网(CCN)路由 +// DisableFlowLogs +// 本接口(DisableFlowLogs)用于停止流日志。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DisableCcnRoutesWithContext(ctx context.Context, request *DisableCcnRoutesRequest) (response *DisableCcnRoutesResponse, err error) { +func (c *Client) DisableFlowLogsWithContext(ctx context.Context, request *DisableFlowLogsRequest) (response *DisableFlowLogsResponse, err error) { if request == nil { - request = NewDisableCcnRoutesRequest() + request = NewDisableFlowLogsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DisableFlowLogs require credential") } + request.SetContext(ctx) - response = NewDisableCcnRoutesResponse() + response = NewDisableFlowLogsResponse() err = c.Send(request, response) return } @@ -10658,6 +13940,7 @@ func NewDisableGatewayFlowMonitorRequest() (request *DisableGatewayFlowMonitorRe request = &DisableGatewayFlowMonitorRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisableGatewayFlowMonitor") return @@ -10679,13 +13962,7 @@ func NewDisableGatewayFlowMonitorResponse() (response *DisableGatewayFlowMonitor // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) DisableGatewayFlowMonitor(request *DisableGatewayFlowMonitorRequest) (response *DisableGatewayFlowMonitorResponse, err error) { - if request == nil { - request = NewDisableGatewayFlowMonitorRequest() - } - - response = NewDisableGatewayFlowMonitorResponse() - err = c.Send(request, response) - return + return c.DisableGatewayFlowMonitorWithContext(context.Background(), request) } // DisableGatewayFlowMonitor @@ -10700,6 +13977,11 @@ func (c *Client) DisableGatewayFlowMonitorWithContext(ctx context.Context, reque if request == nil { request = NewDisableGatewayFlowMonitorRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisableGatewayFlowMonitor require credential") + } + request.SetContext(ctx) response = NewDisableGatewayFlowMonitorResponse() @@ -10711,6 +13993,7 @@ func NewDisableRoutesRequest() (request *DisableRoutesRequest) { request = &DisableRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisableRoutes") return @@ -10737,13 +14020,7 @@ func NewDisableRoutesResponse() (response *DisableRoutesResponse) { // UNSUPPORTEDOPERATION_DISABLEDNOTIFYCCN = "UnsupportedOperation.DisabledNotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) DisableRoutes(request *DisableRoutesRequest) (response *DisableRoutesResponse, err error) { - if request == nil { - request = NewDisableRoutesRequest() - } - - response = NewDisableRoutesResponse() - err = c.Send(request, response) - return + return c.DisableRoutesWithContext(context.Background(), request) } // DisableRoutes @@ -10763,6 +14040,11 @@ func (c *Client) DisableRoutesWithContext(ctx context.Context, request *DisableR if request == nil { request = NewDisableRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisableRoutes require credential") + } + request.SetContext(ctx) response = NewDisableRoutesResponse() @@ -10770,10 +14052,117 @@ func (c *Client) DisableRoutesWithContext(ctx context.Context, request *DisableR return } +func NewDisableSnapshotPoliciesRequest() (request *DisableSnapshotPoliciesRequest) { + request = &DisableSnapshotPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DisableSnapshotPolicies") + + return +} + +func NewDisableSnapshotPoliciesResponse() (response *DisableSnapshotPoliciesResponse) { + response = &DisableSnapshotPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DisableSnapshotPolicies +// 本接口(DisableSnapshotPolicies)用于停用快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DisableSnapshotPolicies(request *DisableSnapshotPoliciesRequest) (response *DisableSnapshotPoliciesResponse, err error) { + return c.DisableSnapshotPoliciesWithContext(context.Background(), request) +} + +// DisableSnapshotPolicies +// 本接口(DisableSnapshotPolicies)用于停用快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DisableSnapshotPoliciesWithContext(ctx context.Context, request *DisableSnapshotPoliciesRequest) (response *DisableSnapshotPoliciesResponse, err error) { + if request == nil { + request = NewDisableSnapshotPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DisableSnapshotPolicies require credential") + } + + request.SetContext(ctx) + + response = NewDisableSnapshotPoliciesResponse() + err = c.Send(request, response) + return +} + +func NewDisableVpnGatewaySslClientCertRequest() (request *DisableVpnGatewaySslClientCertRequest) { + request = &DisableVpnGatewaySslClientCertRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DisableVpnGatewaySslClientCert") + + return +} + +func NewDisableVpnGatewaySslClientCertResponse() (response *DisableVpnGatewaySslClientCertResponse) { + response = &DisableVpnGatewaySslClientCertResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DisableVpnGatewaySslClientCert +// 禁用SSL-VPN-CLIENT 证书 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DisableVpnGatewaySslClientCert(request *DisableVpnGatewaySslClientCertRequest) (response *DisableVpnGatewaySslClientCertResponse, err error) { + return c.DisableVpnGatewaySslClientCertWithContext(context.Background(), request) +} + +// DisableVpnGatewaySslClientCert +// 禁用SSL-VPN-CLIENT 证书 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DisableVpnGatewaySslClientCertWithContext(ctx context.Context, request *DisableVpnGatewaySslClientCertRequest) (response *DisableVpnGatewaySslClientCertResponse, err error) { + if request == nil { + request = NewDisableVpnGatewaySslClientCertRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DisableVpnGatewaySslClientCert require credential") + } + + request.SetContext(ctx) + + response = NewDisableVpnGatewaySslClientCertResponse() + err = c.Send(request, response) + return +} + func NewDisassociateAddressRequest() (request *DisassociateAddressRequest) { request = &DisassociateAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateAddress") return @@ -10801,6 +14190,8 @@ func NewDisassociateAddressResponse() (response *DisassociateAddressResponse) { // // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" // FAILEDOPERATION_ADDRESSENIINFONOTFOUND = "FailedOperation.AddressEniInfoNotFound" +// FAILEDOPERATION_MASTERENINOTFOUND = "FailedOperation.MasterEniNotFound" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDADDRESSIDSTATUS_NOTPERMIT = "InvalidAddressIdStatus.NotPermit" @@ -10809,19 +14200,16 @@ func NewDisassociateAddressResponse() (response *DisassociateAddressResponse) { // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_ONLYSUPPORTEDFORMASTERNETWORKCARD = "InvalidParameterValue.OnlySupportedForMasterNetworkCard" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" func (c *Client) DisassociateAddress(request *DisassociateAddressRequest) (response *DisassociateAddressResponse, err error) { - if request == nil { - request = NewDisassociateAddressRequest() - } - - response = NewDisassociateAddressResponse() - err = c.Send(request, response) - return + return c.DisassociateAddressWithContext(context.Background(), request) } // DisassociateAddress @@ -10839,6 +14227,8 @@ func (c *Client) DisassociateAddress(request *DisassociateAddressRequest) (respo // // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" // FAILEDOPERATION_ADDRESSENIINFONOTFOUND = "FailedOperation.AddressEniInfoNotFound" +// FAILEDOPERATION_MASTERENINOTFOUND = "FailedOperation.MasterEniNotFound" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDADDRESSIDSTATUS_NOTPERMIT = "InvalidAddressIdStatus.NotPermit" @@ -10847,15 +14237,23 @@ func (c *Client) DisassociateAddress(request *DisassociateAddressRequest) (respo // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_ONLYSUPPORTEDFORMASTERNETWORKCARD = "InvalidParameterValue.OnlySupportedForMasterNetworkCard" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" func (c *Client) DisassociateAddressWithContext(ctx context.Context, request *DisassociateAddressRequest) (response *DisassociateAddressResponse, err error) { if request == nil { request = NewDisassociateAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateAddress require credential") + } + request.SetContext(ctx) response = NewDisassociateAddressResponse() @@ -10867,6 +14265,7 @@ func NewDisassociateDhcpIpWithAddressIpRequest() (request *DisassociateDhcpIpWit request = &DisassociateDhcpIpWithAddressIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateDhcpIpWithAddressIp") return @@ -10893,13 +14292,7 @@ func NewDisassociateDhcpIpWithAddressIpResponse() (response *DisassociateDhcpIpW // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) DisassociateDhcpIpWithAddressIp(request *DisassociateDhcpIpWithAddressIpRequest) (response *DisassociateDhcpIpWithAddressIpResponse, err error) { - if request == nil { - request = NewDisassociateDhcpIpWithAddressIpRequest() - } - - response = NewDisassociateDhcpIpWithAddressIpResponse() - err = c.Send(request, response) - return + return c.DisassociateDhcpIpWithAddressIpWithContext(context.Background(), request) } // DisassociateDhcpIpWithAddressIp @@ -10919,6 +14312,11 @@ func (c *Client) DisassociateDhcpIpWithAddressIpWithContext(ctx context.Context, if request == nil { request = NewDisassociateDhcpIpWithAddressIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateDhcpIpWithAddressIp require credential") + } + request.SetContext(ctx) response = NewDisassociateDhcpIpWithAddressIpResponse() @@ -10930,6 +14328,7 @@ func NewDisassociateDirectConnectGatewayNatGatewayRequest() (request *Disassocia request = &DisassociateDirectConnectGatewayNatGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateDirectConnectGatewayNatGateway") return @@ -10953,13 +14352,7 @@ func NewDisassociateDirectConnectGatewayNatGatewayResponse() (response *Disassoc // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DisassociateDirectConnectGatewayNatGateway(request *DisassociateDirectConnectGatewayNatGatewayRequest) (response *DisassociateDirectConnectGatewayNatGatewayResponse, err error) { - if request == nil { - request = NewDisassociateDirectConnectGatewayNatGatewayRequest() - } - - response = NewDisassociateDirectConnectGatewayNatGatewayResponse() - err = c.Send(request, response) - return + return c.DisassociateDirectConnectGatewayNatGatewayWithContext(context.Background(), request) } // DisassociateDirectConnectGatewayNatGateway @@ -10976,6 +14369,11 @@ func (c *Client) DisassociateDirectConnectGatewayNatGatewayWithContext(ctx conte if request == nil { request = NewDisassociateDirectConnectGatewayNatGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateDirectConnectGatewayNatGateway require credential") + } + request.SetContext(ctx) response = NewDisassociateDirectConnectGatewayNatGatewayResponse() @@ -10987,6 +14385,7 @@ func NewDisassociateNatGatewayAddressRequest() (request *DisassociateNatGatewayA request = &DisassociateNatGatewayAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateNatGatewayAddress") return @@ -11009,13 +14408,7 @@ func NewDisassociateNatGatewayAddressResponse() (response *DisassociateNatGatewa // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_PUBLICIPADDRESSDISASSOCIATE = "UnsupportedOperation.PublicIpAddressDisassociate" func (c *Client) DisassociateNatGatewayAddress(request *DisassociateNatGatewayAddressRequest) (response *DisassociateNatGatewayAddressResponse, err error) { - if request == nil { - request = NewDisassociateNatGatewayAddressRequest() - } - - response = NewDisassociateNatGatewayAddressResponse() - err = c.Send(request, response) - return + return c.DisassociateNatGatewayAddressWithContext(context.Background(), request) } // DisassociateNatGatewayAddress @@ -11031,6 +14424,11 @@ func (c *Client) DisassociateNatGatewayAddressWithContext(ctx context.Context, r if request == nil { request = NewDisassociateNatGatewayAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateNatGatewayAddress require credential") + } + request.SetContext(ctx) response = NewDisassociateNatGatewayAddressResponse() @@ -11042,6 +14440,7 @@ func NewDisassociateNetworkAclSubnetsRequest() (request *DisassociateNetworkAclS request = &DisassociateNetworkAclSubnetsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateNetworkAclSubnets") return @@ -11055,7 +14454,7 @@ func NewDisassociateNetworkAclSubnetsResponse() (response *DisassociateNetworkAc } // DisassociateNetworkAclSubnets -// 本接口(DisassociateNetworkAclSubnets)用于网络ACL解关联vpc下的子网。 +// 本接口(DisassociateNetworkAclSubnets)用于网络ACL解关联VPC下的子网。 // // 可能返回的错误码: // @@ -11064,17 +14463,11 @@ func NewDisassociateNetworkAclSubnetsResponse() (response *DisassociateNetworkAc // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) DisassociateNetworkAclSubnets(request *DisassociateNetworkAclSubnetsRequest) (response *DisassociateNetworkAclSubnetsResponse, err error) { - if request == nil { - request = NewDisassociateNetworkAclSubnetsRequest() - } - - response = NewDisassociateNetworkAclSubnetsResponse() - err = c.Send(request, response) - return + return c.DisassociateNetworkAclSubnetsWithContext(context.Background(), request) } // DisassociateNetworkAclSubnets -// 本接口(DisassociateNetworkAclSubnets)用于网络ACL解关联vpc下的子网。 +// 本接口(DisassociateNetworkAclSubnets)用于网络ACL解关联VPC下的子网。 // // 可能返回的错误码: // @@ -11086,6 +14479,11 @@ func (c *Client) DisassociateNetworkAclSubnetsWithContext(ctx context.Context, r if request == nil { request = NewDisassociateNetworkAclSubnetsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateNetworkAclSubnets require credential") + } + request.SetContext(ctx) response = NewDisassociateNetworkAclSubnetsResponse() @@ -11097,6 +14495,7 @@ func NewDisassociateNetworkInterfaceSecurityGroupsRequest() (request *Disassocia request = &DisassociateNetworkInterfaceSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateNetworkInterfaceSecurityGroups") return @@ -11114,17 +14513,12 @@ func NewDisassociateNetworkInterfaceSecurityGroupsResponse() (response *Disassoc // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) DisassociateNetworkInterfaceSecurityGroups(request *DisassociateNetworkInterfaceSecurityGroupsRequest) (response *DisassociateNetworkInterfaceSecurityGroupsResponse, err error) { - if request == nil { - request = NewDisassociateNetworkInterfaceSecurityGroupsRequest() - } - - response = NewDisassociateNetworkInterfaceSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.DisassociateNetworkInterfaceSecurityGroupsWithContext(context.Background(), request) } // DisassociateNetworkInterfaceSecurityGroups @@ -11132,6 +14526,7 @@ func (c *Client) DisassociateNetworkInterfaceSecurityGroups(request *Disassociat // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" @@ -11139,6 +14534,11 @@ func (c *Client) DisassociateNetworkInterfaceSecurityGroupsWithContext(ctx conte if request == nil { request = NewDisassociateNetworkInterfaceSecurityGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateNetworkInterfaceSecurityGroups require credential") + } + request.SetContext(ctx) response = NewDisassociateNetworkInterfaceSecurityGroupsResponse() @@ -11150,6 +14550,7 @@ func NewDisassociateVpcEndPointSecurityGroupsRequest() (request *DisassociateVpc request = &DisassociateVpcEndPointSecurityGroupsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DisassociateVpcEndPointSecurityGroups") return @@ -11163,7 +14564,7 @@ func NewDisassociateVpcEndPointSecurityGroupsResponse() (response *DisassociateV } // DisassociateVpcEndPointSecurityGroups -// 终端节点解绑安全组。 +// 本接口(DisassociateVpcEndPointSecurityGroups)用于终端节点解绑安全组。 // // 可能返回的错误码: // @@ -11172,17 +14573,11 @@ func NewDisassociateVpcEndPointSecurityGroupsResponse() (response *DisassociateV // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DisassociateVpcEndPointSecurityGroups(request *DisassociateVpcEndPointSecurityGroupsRequest) (response *DisassociateVpcEndPointSecurityGroupsResponse, err error) { - if request == nil { - request = NewDisassociateVpcEndPointSecurityGroupsRequest() - } - - response = NewDisassociateVpcEndPointSecurityGroupsResponse() - err = c.Send(request, response) - return + return c.DisassociateVpcEndPointSecurityGroupsWithContext(context.Background(), request) } // DisassociateVpcEndPointSecurityGroups -// 终端节点解绑安全组。 +// 本接口(DisassociateVpcEndPointSecurityGroups)用于终端节点解绑安全组。 // // 可能返回的错误码: // @@ -11194,6 +14589,11 @@ func (c *Client) DisassociateVpcEndPointSecurityGroupsWithContext(ctx context.Co if request == nil { request = NewDisassociateVpcEndPointSecurityGroupsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("DisassociateVpcEndPointSecurityGroups require credential") + } + request.SetContext(ctx) response = NewDisassociateVpcEndPointSecurityGroupsResponse() @@ -11205,6 +14605,7 @@ func NewDownloadCustomerGatewayConfigurationRequest() (request *DownloadCustomer request = &DownloadCustomerGatewayConfigurationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "DownloadCustomerGatewayConfiguration") return @@ -11218,36 +14619,94 @@ func NewDownloadCustomerGatewayConfigurationResponse() (response *DownloadCustom } // DownloadCustomerGatewayConfiguration -// 本接口(DownloadCustomerGatewayConfiguration)用于下载VPN通道配置。 +// 本接口(DownloadCustomerGatewayConfiguration)用于下载VPN通道配置。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) DownloadCustomerGatewayConfiguration(request *DownloadCustomerGatewayConfigurationRequest) (response *DownloadCustomerGatewayConfigurationResponse, err error) { + return c.DownloadCustomerGatewayConfigurationWithContext(context.Background(), request) +} + +// DownloadCustomerGatewayConfiguration +// 本接口(DownloadCustomerGatewayConfiguration)用于下载VPN通道配置。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) DownloadCustomerGatewayConfigurationWithContext(ctx context.Context, request *DownloadCustomerGatewayConfigurationRequest) (response *DownloadCustomerGatewayConfigurationResponse, err error) { if request == nil { request = NewDownloadCustomerGatewayConfigurationRequest() } + if c.GetCredential() == nil { + return nil, errors.New("DownloadCustomerGatewayConfiguration require credential") + } + + request.SetContext(ctx) + response = NewDownloadCustomerGatewayConfigurationResponse() err = c.Send(request, response) return } -// DownloadCustomerGatewayConfiguration -// 本接口(DownloadCustomerGatewayConfiguration)用于下载VPN通道配置。 +func NewDownloadVpnGatewaySslClientCertRequest() (request *DownloadVpnGatewaySslClientCertRequest) { + request = &DownloadVpnGatewaySslClientCertRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "DownloadVpnGatewaySslClientCert") + + return +} + +func NewDownloadVpnGatewaySslClientCertResponse() (response *DownloadVpnGatewaySslClientCertResponse) { + response = &DownloadVpnGatewaySslClientCertResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// DownloadVpnGatewaySslClientCert +// 本接口(DownloadVpnGatewaySslClientCert)用于下载SSL-VPN-CLIENT 客户端证书。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) DownloadCustomerGatewayConfigurationWithContext(ctx context.Context, request *DownloadCustomerGatewayConfigurationRequest) (response *DownloadCustomerGatewayConfigurationResponse, err error) { +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SSLCLIENTCERTDISABLEUNSUPPORTEDDOWNLOADSSLCLIENTCERT = "UnsupportedOperation.SSLClientCertDisableUnsupportedDownloadSSLClientCert" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DownloadVpnGatewaySslClientCert(request *DownloadVpnGatewaySslClientCertRequest) (response *DownloadVpnGatewaySslClientCertResponse, err error) { + return c.DownloadVpnGatewaySslClientCertWithContext(context.Background(), request) +} + +// DownloadVpnGatewaySslClientCert +// 本接口(DownloadVpnGatewaySslClientCert)用于下载SSL-VPN-CLIENT 客户端证书。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SSLCLIENTCERTDISABLEUNSUPPORTEDDOWNLOADSSLCLIENTCERT = "UnsupportedOperation.SSLClientCertDisableUnsupportedDownloadSSLClientCert" +// UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" +func (c *Client) DownloadVpnGatewaySslClientCertWithContext(ctx context.Context, request *DownloadVpnGatewaySslClientCertRequest) (response *DownloadVpnGatewaySslClientCertResponse, err error) { if request == nil { - request = NewDownloadCustomerGatewayConfigurationRequest() + request = NewDownloadVpnGatewaySslClientCertRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("DownloadVpnGatewaySslClientCert require credential") } + request.SetContext(ctx) - response = NewDownloadCustomerGatewayConfigurationResponse() + response = NewDownloadVpnGatewaySslClientCertResponse() err = c.Send(request, response) return } @@ -11256,6 +14715,7 @@ func NewEnableCcnRoutesRequest() (request *EnableCcnRoutesRequest) { request = &EnableCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "EnableCcnRoutes") return @@ -11275,16 +14735,11 @@ func NewEnableCcnRoutesResponse() (response *EnableCcnRoutesResponse) { // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" func (c *Client) EnableCcnRoutes(request *EnableCcnRoutesRequest) (response *EnableCcnRoutesResponse, err error) { - if request == nil { - request = NewEnableCcnRoutesRequest() - } - - response = NewEnableCcnRoutesResponse() - err = c.Send(request, response) - return + return c.EnableCcnRoutesWithContext(context.Background(), request) } // EnableCcnRoutes @@ -11294,12 +14749,18 @@ func (c *Client) EnableCcnRoutes(request *EnableCcnRoutesRequest) (response *Ena // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" func (c *Client) EnableCcnRoutesWithContext(ctx context.Context, request *EnableCcnRoutesRequest) (response *EnableCcnRoutesResponse, err error) { if request == nil { request = NewEnableCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("EnableCcnRoutes require credential") + } + request.SetContext(ctx) response = NewEnableCcnRoutesResponse() @@ -11307,10 +14768,64 @@ func (c *Client) EnableCcnRoutesWithContext(ctx context.Context, request *Enable return } +func NewEnableFlowLogsRequest() (request *EnableFlowLogsRequest) { + request = &EnableFlowLogsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "EnableFlowLogs") + + return +} + +func NewEnableFlowLogsResponse() (response *EnableFlowLogsResponse) { + response = &EnableFlowLogsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// EnableFlowLogs +// 本接口(EnableFlowLogs)用于启动流日志。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) EnableFlowLogs(request *EnableFlowLogsRequest) (response *EnableFlowLogsResponse, err error) { + return c.EnableFlowLogsWithContext(context.Background(), request) +} + +// EnableFlowLogs +// 本接口(EnableFlowLogs)用于启动流日志。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) EnableFlowLogsWithContext(ctx context.Context, request *EnableFlowLogsRequest) (response *EnableFlowLogsResponse, err error) { + if request == nil { + request = NewEnableFlowLogsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("EnableFlowLogs require credential") + } + + request.SetContext(ctx) + + response = NewEnableFlowLogsResponse() + err = c.Send(request, response) + return +} + func NewEnableGatewayFlowMonitorRequest() (request *EnableGatewayFlowMonitorRequest) { request = &EnableGatewayFlowMonitorRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "EnableGatewayFlowMonitor") return @@ -11332,13 +14847,7 @@ func NewEnableGatewayFlowMonitorResponse() (response *EnableGatewayFlowMonitorRe // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) EnableGatewayFlowMonitor(request *EnableGatewayFlowMonitorRequest) (response *EnableGatewayFlowMonitorResponse, err error) { - if request == nil { - request = NewEnableGatewayFlowMonitorRequest() - } - - response = NewEnableGatewayFlowMonitorResponse() - err = c.Send(request, response) - return + return c.EnableGatewayFlowMonitorWithContext(context.Background(), request) } // EnableGatewayFlowMonitor @@ -11353,6 +14862,11 @@ func (c *Client) EnableGatewayFlowMonitorWithContext(ctx context.Context, reques if request == nil { request = NewEnableGatewayFlowMonitorRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("EnableGatewayFlowMonitor require credential") + } + request.SetContext(ctx) response = NewEnableGatewayFlowMonitorResponse() @@ -11364,6 +14878,7 @@ func NewEnableRoutesRequest() (request *EnableRoutesRequest) { request = &EnableRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "EnableRoutes") return @@ -11396,13 +14911,7 @@ func NewEnableRoutesResponse() (response *EnableRoutesResponse) { // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) EnableRoutes(request *EnableRoutesRequest) (response *EnableRoutesResponse, err error) { - if request == nil { - request = NewEnableRoutesRequest() - } - - response = NewEnableRoutesResponse() - err = c.Send(request, response) - return + return c.EnableRoutesWithContext(context.Background(), request) } // EnableRoutes @@ -11428,6 +14937,11 @@ func (c *Client) EnableRoutesWithContext(ctx context.Context, request *EnableRou if request == nil { request = NewEnableRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("EnableRoutes require credential") + } + request.SetContext(ctx) response = NewEnableRoutesResponse() @@ -11435,10 +14949,62 @@ func (c *Client) EnableRoutesWithContext(ctx context.Context, request *EnableRou return } +func NewEnableSnapshotPoliciesRequest() (request *EnableSnapshotPoliciesRequest) { + request = &EnableSnapshotPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "EnableSnapshotPolicies") + + return +} + +func NewEnableSnapshotPoliciesResponse() (response *EnableSnapshotPoliciesResponse) { + response = &EnableSnapshotPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// EnableSnapshotPolicies +// 本接口(EnableSnapshotPolicies)用于启用快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) EnableSnapshotPolicies(request *EnableSnapshotPoliciesRequest) (response *EnableSnapshotPoliciesResponse, err error) { + return c.EnableSnapshotPoliciesWithContext(context.Background(), request) +} + +// EnableSnapshotPolicies +// 本接口(EnableSnapshotPolicies)用于启用快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) EnableSnapshotPoliciesWithContext(ctx context.Context, request *EnableSnapshotPoliciesRequest) (response *EnableSnapshotPoliciesResponse, err error) { + if request == nil { + request = NewEnableSnapshotPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("EnableSnapshotPolicies require credential") + } + + request.SetContext(ctx) + + response = NewEnableSnapshotPoliciesResponse() + err = c.Send(request, response) + return +} + func NewEnableVpcEndPointConnectRequest() (request *EnableVpcEndPointConnectRequest) { request = &EnableVpcEndPointConnectRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "EnableVpcEndPointConnect") return @@ -11452,7 +15018,7 @@ func NewEnableVpcEndPointConnectResponse() (response *EnableVpcEndPointConnectRe } // EnableVpcEndPointConnect -// 是否接受终端节点连接请求。 +// 本接口(EnableVpcEndPointConnect)用于是否接受终端节点连接请求。 // // 可能返回的错误码: // @@ -11461,31 +15027,136 @@ func NewEnableVpcEndPointConnectResponse() (response *EnableVpcEndPointConnectRe // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) EnableVpcEndPointConnect(request *EnableVpcEndPointConnectRequest) (response *EnableVpcEndPointConnectResponse, err error) { + return c.EnableVpcEndPointConnectWithContext(context.Background(), request) +} + +// EnableVpcEndPointConnect +// 本接口(EnableVpcEndPointConnect)用于是否接受终端节点连接请求。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) EnableVpcEndPointConnectWithContext(ctx context.Context, request *EnableVpcEndPointConnectRequest) (response *EnableVpcEndPointConnectResponse, err error) { if request == nil { request = NewEnableVpcEndPointConnectRequest() } + if c.GetCredential() == nil { + return nil, errors.New("EnableVpcEndPointConnect require credential") + } + + request.SetContext(ctx) + response = NewEnableVpcEndPointConnectResponse() err = c.Send(request, response) return } -// EnableVpcEndPointConnect -// 是否接受终端节点连接请求。 +func NewEnableVpnGatewaySslClientCertRequest() (request *EnableVpnGatewaySslClientCertRequest) { + request = &EnableVpnGatewaySslClientCertRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "EnableVpnGatewaySslClientCert") + + return +} + +func NewEnableVpnGatewaySslClientCertResponse() (response *EnableVpnGatewaySslClientCertResponse) { + response = &EnableVpnGatewaySslClientCertResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// EnableVpnGatewaySslClientCert +// 本接口(EnableVpnGatewaySslClientCert)用于启用SSL-VPN-CLIENT 证书。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// MISSINGPARAMETER = "MissingParameter" +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) EnableVpcEndPointConnectWithContext(ctx context.Context, request *EnableVpcEndPointConnectRequest) (response *EnableVpcEndPointConnectResponse, err error) { +func (c *Client) EnableVpnGatewaySslClientCert(request *EnableVpnGatewaySslClientCertRequest) (response *EnableVpnGatewaySslClientCertResponse, err error) { + return c.EnableVpnGatewaySslClientCertWithContext(context.Background(), request) +} + +// EnableVpnGatewaySslClientCert +// 本接口(EnableVpnGatewaySslClientCert)用于启用SSL-VPN-CLIENT 证书。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) EnableVpnGatewaySslClientCertWithContext(ctx context.Context, request *EnableVpnGatewaySslClientCertRequest) (response *EnableVpnGatewaySslClientCertResponse, err error) { if request == nil { - request = NewEnableVpcEndPointConnectRequest() + request = NewEnableVpnGatewaySslClientCertRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("EnableVpnGatewaySslClientCert require credential") + } + request.SetContext(ctx) - response = NewEnableVpcEndPointConnectResponse() + response = NewEnableVpnGatewaySslClientCertResponse() + err = c.Send(request, response) + return +} + +func NewGenerateVpnConnectionDefaultHealthCheckIpRequest() (request *GenerateVpnConnectionDefaultHealthCheckIpRequest) { + request = &GenerateVpnConnectionDefaultHealthCheckIpRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "GenerateVpnConnectionDefaultHealthCheckIp") + + return +} + +func NewGenerateVpnConnectionDefaultHealthCheckIpResponse() (response *GenerateVpnConnectionDefaultHealthCheckIpResponse) { + response = &GenerateVpnConnectionDefaultHealthCheckIpResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// GenerateVpnConnectionDefaultHealthCheckIp +// 本接口(GenerateVpnConnectionDefaultHealthCheckIp)用于获取一对VPN通道健康检查地址。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) GenerateVpnConnectionDefaultHealthCheckIp(request *GenerateVpnConnectionDefaultHealthCheckIpRequest) (response *GenerateVpnConnectionDefaultHealthCheckIpResponse, err error) { + return c.GenerateVpnConnectionDefaultHealthCheckIpWithContext(context.Background(), request) +} + +// GenerateVpnConnectionDefaultHealthCheckIp +// 本接口(GenerateVpnConnectionDefaultHealthCheckIp)用于获取一对VPN通道健康检查地址。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) GenerateVpnConnectionDefaultHealthCheckIpWithContext(ctx context.Context, request *GenerateVpnConnectionDefaultHealthCheckIpRequest) (response *GenerateVpnConnectionDefaultHealthCheckIpResponse, err error) { + if request == nil { + request = NewGenerateVpnConnectionDefaultHealthCheckIpRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("GenerateVpnConnectionDefaultHealthCheckIp require credential") + } + + request.SetContext(ctx) + + response = NewGenerateVpnConnectionDefaultHealthCheckIpResponse() err = c.Send(request, response) return } @@ -11494,6 +15165,7 @@ func NewGetCcnRegionBandwidthLimitsRequest() (request *GetCcnRegionBandwidthLimi request = &GetCcnRegionBandwidthLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "GetCcnRegionBandwidthLimits") return @@ -11512,16 +15184,12 @@ func NewGetCcnRegionBandwidthLimitsResponse() (response *GetCcnRegionBandwidthLi // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) GetCcnRegionBandwidthLimits(request *GetCcnRegionBandwidthLimitsRequest) (response *GetCcnRegionBandwidthLimitsResponse, err error) { - if request == nil { - request = NewGetCcnRegionBandwidthLimitsRequest() - } - - response = NewGetCcnRegionBandwidthLimitsResponse() - err = c.Send(request, response) - return + return c.GetCcnRegionBandwidthLimitsWithContext(context.Background(), request) } // GetCcnRegionBandwidthLimits @@ -11530,12 +15198,19 @@ func (c *Client) GetCcnRegionBandwidthLimits(request *GetCcnRegionBandwidthLimit // 可能返回的错误码: // // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) GetCcnRegionBandwidthLimitsWithContext(ctx context.Context, request *GetCcnRegionBandwidthLimitsRequest) (response *GetCcnRegionBandwidthLimitsResponse, err error) { if request == nil { request = NewGetCcnRegionBandwidthLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("GetCcnRegionBandwidthLimits require credential") + } + request.SetContext(ctx) response = NewGetCcnRegionBandwidthLimitsResponse() @@ -11547,6 +15222,7 @@ func NewHaVipAssociateAddressIpRequest() (request *HaVipAssociateAddressIpReques request = &HaVipAssociateAddressIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "HaVipAssociateAddressIp") return @@ -11566,18 +15242,15 @@ func NewHaVipAssociateAddressIpResponse() (response *HaVipAssociateAddressIpResp // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_BINDEIP = "UnsupportedOperation.BindEIP" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +// UNSUPPORTEDOPERATION_UNSUPPORTEDBINDLOCALZONEEIP = "UnsupportedOperation.UnsupportedBindLocalZoneEIP" func (c *Client) HaVipAssociateAddressIp(request *HaVipAssociateAddressIpRequest) (response *HaVipAssociateAddressIpResponse, err error) { - if request == nil { - request = NewHaVipAssociateAddressIpRequest() - } - - response = NewHaVipAssociateAddressIpResponse() - err = c.Send(request, response) - return + return c.HaVipAssociateAddressIpWithContext(context.Background(), request) } // HaVipAssociateAddressIp @@ -11587,14 +15260,22 @@ func (c *Client) HaVipAssociateAddressIp(request *HaVipAssociateAddressIpRequest // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_BINDEIP = "UnsupportedOperation.BindEIP" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +// UNSUPPORTEDOPERATION_UNSUPPORTEDBINDLOCALZONEEIP = "UnsupportedOperation.UnsupportedBindLocalZoneEIP" func (c *Client) HaVipAssociateAddressIpWithContext(ctx context.Context, request *HaVipAssociateAddressIpRequest) (response *HaVipAssociateAddressIpResponse, err error) { if request == nil { request = NewHaVipAssociateAddressIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("HaVipAssociateAddressIp require credential") + } + request.SetContext(ctx) response = NewHaVipAssociateAddressIpResponse() @@ -11606,6 +15287,7 @@ func NewHaVipDisassociateAddressIpRequest() (request *HaVipDisassociateAddressIp request = &HaVipDisassociateAddressIpRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "HaVipDisassociateAddressIp") return @@ -11631,13 +15313,7 @@ func NewHaVipDisassociateAddressIpResponse() (response *HaVipDisassociateAddress // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) HaVipDisassociateAddressIp(request *HaVipDisassociateAddressIpRequest) (response *HaVipDisassociateAddressIpResponse, err error) { - if request == nil { - request = NewHaVipDisassociateAddressIpRequest() - } - - response = NewHaVipDisassociateAddressIpResponse() - err = c.Send(request, response) - return + return c.HaVipDisassociateAddressIpWithContext(context.Background(), request) } // HaVipDisassociateAddressIp @@ -11656,6 +15332,11 @@ func (c *Client) HaVipDisassociateAddressIpWithContext(ctx context.Context, requ if request == nil { request = NewHaVipDisassociateAddressIpRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("HaVipDisassociateAddressIp require credential") + } + request.SetContext(ctx) response = NewHaVipDisassociateAddressIpResponse() @@ -11667,6 +15348,7 @@ func NewInquirePriceCreateDirectConnectGatewayRequest() (request *InquirePriceCr request = &InquirePriceCreateDirectConnectGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "InquirePriceCreateDirectConnectGateway") return @@ -11690,13 +15372,7 @@ func NewInquirePriceCreateDirectConnectGatewayResponse() (response *InquirePrice // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) InquirePriceCreateDirectConnectGateway(request *InquirePriceCreateDirectConnectGatewayRequest) (response *InquirePriceCreateDirectConnectGatewayResponse, err error) { - if request == nil { - request = NewInquirePriceCreateDirectConnectGatewayRequest() - } - - response = NewInquirePriceCreateDirectConnectGatewayResponse() - err = c.Send(request, response) - return + return c.InquirePriceCreateDirectConnectGatewayWithContext(context.Background(), request) } // InquirePriceCreateDirectConnectGateway @@ -11713,6 +15389,11 @@ func (c *Client) InquirePriceCreateDirectConnectGatewayWithContext(ctx context.C if request == nil { request = NewInquirePriceCreateDirectConnectGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquirePriceCreateDirectConnectGateway require credential") + } + request.SetContext(ctx) response = NewInquirePriceCreateDirectConnectGatewayResponse() @@ -11724,6 +15405,7 @@ func NewInquiryPriceCreateVpnGatewayRequest() (request *InquiryPriceCreateVpnGat request = &InquiryPriceCreateVpnGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "InquiryPriceCreateVpnGateway") return @@ -11742,14 +15424,9 @@ func NewInquiryPriceCreateVpnGatewayResponse() (response *InquiryPriceCreateVpnG // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) InquiryPriceCreateVpnGateway(request *InquiryPriceCreateVpnGatewayRequest) (response *InquiryPriceCreateVpnGatewayResponse, err error) { - if request == nil { - request = NewInquiryPriceCreateVpnGatewayRequest() - } - - response = NewInquiryPriceCreateVpnGatewayResponse() - err = c.Send(request, response) - return + return c.InquiryPriceCreateVpnGatewayWithContext(context.Background(), request) } // InquiryPriceCreateVpnGateway @@ -11758,10 +15435,16 @@ func (c *Client) InquiryPriceCreateVpnGateway(request *InquiryPriceCreateVpnGate // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) InquiryPriceCreateVpnGatewayWithContext(ctx context.Context, request *InquiryPriceCreateVpnGatewayRequest) (response *InquiryPriceCreateVpnGatewayResponse, err error) { if request == nil { request = NewInquiryPriceCreateVpnGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceCreateVpnGateway require credential") + } + request.SetContext(ctx) response = NewInquiryPriceCreateVpnGatewayResponse() @@ -11773,6 +15456,7 @@ func NewInquiryPriceRenewVpnGatewayRequest() (request *InquiryPriceRenewVpnGatew request = &InquiryPriceRenewVpnGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "InquiryPriceRenewVpnGateway") return @@ -11794,13 +15478,7 @@ func NewInquiryPriceRenewVpnGatewayResponse() (response *InquiryPriceRenewVpnGat // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) InquiryPriceRenewVpnGateway(request *InquiryPriceRenewVpnGatewayRequest) (response *InquiryPriceRenewVpnGatewayResponse, err error) { - if request == nil { - request = NewInquiryPriceRenewVpnGatewayRequest() - } - - response = NewInquiryPriceRenewVpnGatewayResponse() - err = c.Send(request, response) - return + return c.InquiryPriceRenewVpnGatewayWithContext(context.Background(), request) } // InquiryPriceRenewVpnGateway @@ -11815,6 +15493,11 @@ func (c *Client) InquiryPriceRenewVpnGatewayWithContext(ctx context.Context, req if request == nil { request = NewInquiryPriceRenewVpnGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceRenewVpnGateway require credential") + } + request.SetContext(ctx) response = NewInquiryPriceRenewVpnGatewayResponse() @@ -11826,6 +15509,7 @@ func NewInquiryPriceResetVpnGatewayInternetMaxBandwidthRequest() (request *Inqui request = &InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "InquiryPriceResetVpnGatewayInternetMaxBandwidth") return @@ -11847,30 +15531,155 @@ func NewInquiryPriceResetVpnGatewayInternetMaxBandwidthResponse() (response *Inq // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) InquiryPriceResetVpnGatewayInternetMaxBandwidth(request *InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest) (response *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse, err error) { + return c.InquiryPriceResetVpnGatewayInternetMaxBandwidthWithContext(context.Background(), request) +} + +// InquiryPriceResetVpnGatewayInternetMaxBandwidth +// 本接口(InquiryPriceResetVpnGatewayInternetMaxBandwidth)调整VPN网关带宽上限询价。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) InquiryPriceResetVpnGatewayInternetMaxBandwidthWithContext(ctx context.Context, request *InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest) (response *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse, err error) { if request == nil { request = NewInquiryPriceResetVpnGatewayInternetMaxBandwidthRequest() } + if c.GetCredential() == nil { + return nil, errors.New("InquiryPriceResetVpnGatewayInternetMaxBandwidth require credential") + } + + request.SetContext(ctx) + response = NewInquiryPriceResetVpnGatewayInternetMaxBandwidthResponse() err = c.Send(request, response) return } -// InquiryPriceResetVpnGatewayInternetMaxBandwidth -// 本接口(InquiryPriceResetVpnGatewayInternetMaxBandwidth)调整VPN网关带宽上限询价。 +func NewLockCcnBandwidthsRequest() (request *LockCcnBandwidthsRequest) { + request = &LockCcnBandwidthsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "LockCcnBandwidths") + + return +} + +func NewLockCcnBandwidthsResponse() (response *LockCcnBandwidthsResponse) { + response = &LockCcnBandwidthsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// LockCcnBandwidths +// 本接口(LockCcnBandwidths)用户锁定云联网限速实例。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(LockCcns)。 +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" -func (c *Client) InquiryPriceResetVpnGatewayInternetMaxBandwidthWithContext(ctx context.Context, request *InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest) (response *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse, err error) { +func (c *Client) LockCcnBandwidths(request *LockCcnBandwidthsRequest) (response *LockCcnBandwidthsResponse, err error) { + return c.LockCcnBandwidthsWithContext(context.Background(), request) +} + +// LockCcnBandwidths +// 本接口(LockCcnBandwidths)用户锁定云联网限速实例。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(LockCcns)。 +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) LockCcnBandwidthsWithContext(ctx context.Context, request *LockCcnBandwidthsRequest) (response *LockCcnBandwidthsResponse, err error) { if request == nil { - request = NewInquiryPriceResetVpnGatewayInternetMaxBandwidthRequest() + request = NewLockCcnBandwidthsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("LockCcnBandwidths require credential") } + request.SetContext(ctx) - response = NewInquiryPriceResetVpnGatewayInternetMaxBandwidthResponse() + response = NewLockCcnBandwidthsResponse() + err = c.Send(request, response) + return +} + +func NewLockCcnsRequest() (request *LockCcnsRequest) { + request = &LockCcnsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "LockCcns") + + return +} + +func NewLockCcnsResponse() (response *LockCcnsResponse) { + response = &LockCcnsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// LockCcns +// 本接口(LockCcns)用于锁定云联网实例 +// +// 该接口一般用来封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间封禁, 只能按更粗的云联网实例粒度封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度封禁(LockCcnBandwidths) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) LockCcns(request *LockCcnsRequest) (response *LockCcnsResponse, err error) { + return c.LockCcnsWithContext(context.Background(), request) +} + +// LockCcns +// 本接口(LockCcns)用于锁定云联网实例 +// +// 该接口一般用来封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间封禁, 只能按更粗的云联网实例粒度封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度封禁(LockCcnBandwidths) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) LockCcnsWithContext(ctx context.Context, request *LockCcnsRequest) (response *LockCcnsResponse, err error) { + if request == nil { + request = NewLockCcnsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("LockCcns require credential") + } + + request.SetContext(ctx) + + response = NewLockCcnsResponse() err = c.Send(request, response) return } @@ -11879,6 +15688,7 @@ func NewMigrateNetworkInterfaceRequest() (request *MigrateNetworkInterfaceReques request = &MigrateNetworkInterfaceRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "MigrateNetworkInterface") return @@ -11901,15 +15711,10 @@ func NewMigrateNetworkInterfaceResponse() (response *MigrateNetworkInterfaceResp // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) MigrateNetworkInterface(request *MigrateNetworkInterfaceRequest) (response *MigrateNetworkInterfaceResponse, err error) { - if request == nil { - request = NewMigrateNetworkInterfaceRequest() - } - - response = NewMigrateNetworkInterfaceResponse() - err = c.Send(request, response) - return + return c.MigrateNetworkInterfaceWithContext(context.Background(), request) } // MigrateNetworkInterface @@ -11922,11 +15727,17 @@ func (c *Client) MigrateNetworkInterface(request *MigrateNetworkInterfaceRequest // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) MigrateNetworkInterfaceWithContext(ctx context.Context, request *MigrateNetworkInterfaceRequest) (response *MigrateNetworkInterfaceResponse, err error) { if request == nil { request = NewMigrateNetworkInterfaceRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("MigrateNetworkInterface require credential") + } + request.SetContext(ctx) response = NewMigrateNetworkInterfaceResponse() @@ -11938,6 +15749,7 @@ func NewMigratePrivateIpAddressRequest() (request *MigratePrivateIpAddressReques request = &MigratePrivateIpAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "MigratePrivateIpAddress") return @@ -11951,8 +15763,7 @@ func NewMigratePrivateIpAddressResponse() (response *MigratePrivateIpAddressResp } // MigratePrivateIpAddress -// -// 本接口(MigratePrivateIpAddress)用于弹性网卡内网IP迁移。 +// 本接口(MigratePrivateIpAddress)用于弹性网卡内网IP迁移。 // // * 该接口用于将一个内网IP从一个弹性网卡上迁移到另外一个弹性网卡,主IP地址不支持迁移。 // @@ -11962,6 +15773,8 @@ func NewMigratePrivateIpAddressResponse() (response *MigratePrivateIpAddressResp // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_ATTACHMENTNOTFOUND = "UnauthorizedOperation.AttachmentNotFound" // UNAUTHORIZEDOPERATION_PRIMARYIP = "UnauthorizedOperation.PrimaryIp" @@ -11969,18 +15782,11 @@ func NewMigratePrivateIpAddressResponse() (response *MigratePrivateIpAddressResp // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" // UNSUPPORTEDOPERATION_PRIMARYIP = "UnsupportedOperation.PrimaryIp" func (c *Client) MigratePrivateIpAddress(request *MigratePrivateIpAddressRequest) (response *MigratePrivateIpAddressResponse, err error) { - if request == nil { - request = NewMigratePrivateIpAddressRequest() - } - - response = NewMigratePrivateIpAddressResponse() - err = c.Send(request, response) - return + return c.MigratePrivateIpAddressWithContext(context.Background(), request) } // MigratePrivateIpAddress -// -// 本接口(MigratePrivateIpAddress)用于弹性网卡内网IP迁移。 +// 本接口(MigratePrivateIpAddress)用于弹性网卡内网IP迁移。 // // * 该接口用于将一个内网IP从一个弹性网卡上迁移到另外一个弹性网卡,主IP地址不支持迁移。 // @@ -11990,6 +15796,8 @@ func (c *Client) MigratePrivateIpAddress(request *MigratePrivateIpAddressRequest // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION_ATTACHMENTNOTFOUND = "UnauthorizedOperation.AttachmentNotFound" // UNAUTHORIZEDOPERATION_PRIMARYIP = "UnauthorizedOperation.PrimaryIp" @@ -12000,6 +15808,11 @@ func (c *Client) MigratePrivateIpAddressWithContext(ctx context.Context, request if request == nil { request = NewMigratePrivateIpAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("MigratePrivateIpAddress require credential") + } + request.SetContext(ctx) response = NewMigratePrivateIpAddressResponse() @@ -12011,6 +15824,7 @@ func NewModifyAddressAttributeRequest() (request *ModifyAddressAttributeRequest) request = &ModifyAddressAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAddressAttribute") return @@ -12033,16 +15847,14 @@ func NewModifyAddressAttributeResponse() (response *ModifyAddressAttributeRespon // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_RESOURCENOTEXISTED = "InvalidParameterValue.ResourceNotExisted" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INCORRECTADDRESSRESOURCETYPE = "UnsupportedOperation.IncorrectAddressResourceType" +// UNSUPPORTEDOPERATION_MODIFYADDRESSATTRIBUTE = "UnsupportedOperation.ModifyAddressAttribute" func (c *Client) ModifyAddressAttribute(request *ModifyAddressAttributeRequest) (response *ModifyAddressAttributeResponse, err error) { - if request == nil { - request = NewModifyAddressAttributeRequest() - } - - response = NewModifyAddressAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyAddressAttributeWithContext(context.Background(), request) } // ModifyAddressAttribute @@ -12055,12 +15867,21 @@ func (c *Client) ModifyAddressAttribute(request *ModifyAddressAttributeRequest) // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_RESOURCENOTEXISTED = "InvalidParameterValue.ResourceNotExisted" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_INCORRECTADDRESSRESOURCETYPE = "UnsupportedOperation.IncorrectAddressResourceType" +// UNSUPPORTEDOPERATION_MODIFYADDRESSATTRIBUTE = "UnsupportedOperation.ModifyAddressAttribute" func (c *Client) ModifyAddressAttributeWithContext(ctx context.Context, request *ModifyAddressAttributeRequest) (response *ModifyAddressAttributeResponse, err error) { if request == nil { request = NewModifyAddressAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAddressAttribute require credential") + } + request.SetContext(ctx) response = NewModifyAddressAttributeResponse() @@ -12072,6 +15893,7 @@ func NewModifyAddressInternetChargeTypeRequest() (request *ModifyAddressInternet request = &ModifyAddressInternetChargeTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAddressInternetChargeType") return @@ -12093,6 +15915,7 @@ func NewModifyAddressInternetChargeTypeResponse() (response *ModifyAddressIntern // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" @@ -12106,17 +15929,16 @@ func NewModifyAddressInternetChargeTypeResponse() (response *ModifyAddressIntern // INVALIDPARAMETERVALUE_INTERNETCHARGETYPENOTCHANGED = "InvalidParameterValue.InternetChargeTypeNotChanged" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_MODIFYADDRESSINTERNETCHARGETYPEQUOTA = "LimitExceeded.ModifyAddressInternetChargeTypeQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" // UNSUPPORTEDOPERATION_NATNOTSUPPORTED = "UnsupportedOperation.NatNotSupported" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ModifyAddressInternetChargeType(request *ModifyAddressInternetChargeTypeRequest) (response *ModifyAddressInternetChargeTypeResponse, err error) { - if request == nil { - request = NewModifyAddressInternetChargeTypeRequest() - } - - response = NewModifyAddressInternetChargeTypeResponse() - err = c.Send(request, response) - return + return c.ModifyAddressInternetChargeTypeWithContext(context.Background(), request) } // ModifyAddressInternetChargeType @@ -12128,6 +15950,7 @@ func (c *Client) ModifyAddressInternetChargeType(request *ModifyAddressInternetC // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INTERNALSERVERERROR = "InternalServerError" // INVALIDACCOUNT_NOTSUPPORTED = "InvalidAccount.NotSupported" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" @@ -12141,13 +15964,23 @@ func (c *Client) ModifyAddressInternetChargeType(request *ModifyAddressInternetC // INVALIDPARAMETERVALUE_INTERNETCHARGETYPENOTCHANGED = "InvalidParameterValue.InternetChargeTypeNotChanged" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // LIMITEXCEEDED = "LimitExceeded" +// LIMITEXCEEDED_MODIFYADDRESSINTERNETCHARGETYPEQUOTA = "LimitExceeded.ModifyAddressInternetChargeTypeQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INVALIDACTION = "UnsupportedOperation.InvalidAction" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" // UNSUPPORTEDOPERATION_NATNOTSUPPORTED = "UnsupportedOperation.NatNotSupported" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ModifyAddressInternetChargeTypeWithContext(ctx context.Context, request *ModifyAddressInternetChargeTypeRequest) (response *ModifyAddressInternetChargeTypeResponse, err error) { if request == nil { request = NewModifyAddressInternetChargeTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAddressInternetChargeType require credential") + } + request.SetContext(ctx) response = NewModifyAddressInternetChargeTypeResponse() @@ -12159,6 +15992,7 @@ func NewModifyAddressTemplateAttributeRequest() (request *ModifyAddressTemplateA request = &ModifyAddressTemplateAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAddressTemplateAttribute") return @@ -12172,34 +16006,34 @@ func NewModifyAddressTemplateAttributeResponse() (response *ModifyAddressTemplat } // ModifyAddressTemplateAttribute -// 本接口(ModifyAddressTemplateAttribute)用于修改IP地址模板 +// 本接口(ModifyAddressTemplateAttribute)用于修改IP地址模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyAddressTemplateAttribute(request *ModifyAddressTemplateAttributeRequest) (response *ModifyAddressTemplateAttributeResponse, err error) { - if request == nil { - request = NewModifyAddressTemplateAttributeRequest() - } - - response = NewModifyAddressTemplateAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyAddressTemplateAttributeWithContext(context.Background(), request) } // ModifyAddressTemplateAttribute -// 本接口(ModifyAddressTemplateAttribute)用于修改IP地址模板 +// 本接口(ModifyAddressTemplateAttribute)用于修改IP地址模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" @@ -12207,6 +16041,11 @@ func (c *Client) ModifyAddressTemplateAttributeWithContext(ctx context.Context, if request == nil { request = NewModifyAddressTemplateAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAddressTemplateAttribute require credential") + } + request.SetContext(ctx) response = NewModifyAddressTemplateAttributeResponse() @@ -12218,6 +16057,7 @@ func NewModifyAddressTemplateGroupAttributeRequest() (request *ModifyAddressTemp request = &ModifyAddressTemplateGroupAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAddressTemplateGroupAttribute") return @@ -12231,33 +16071,29 @@ func NewModifyAddressTemplateGroupAttributeResponse() (response *ModifyAddressTe } // ModifyAddressTemplateGroupAttribute -// 本接口(ModifyAddressTemplateGroupAttribute)用于修改IP地址模板集合 +// 本接口(ModifyAddressTemplateGroupAttribute)用于修改IP地址模板集合。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyAddressTemplateGroupAttribute(request *ModifyAddressTemplateGroupAttributeRequest) (response *ModifyAddressTemplateGroupAttributeResponse, err error) { - if request == nil { - request = NewModifyAddressTemplateGroupAttributeRequest() - } - - response = NewModifyAddressTemplateGroupAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyAddressTemplateGroupAttributeWithContext(context.Background(), request) } // ModifyAddressTemplateGroupAttribute -// 本接口(ModifyAddressTemplateGroupAttribute)用于修改IP地址模板集合 +// 本接口(ModifyAddressTemplateGroupAttribute)用于修改IP地址模板集合。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" @@ -12266,6 +16102,11 @@ func (c *Client) ModifyAddressTemplateGroupAttributeWithContext(ctx context.Cont if request == nil { request = NewModifyAddressTemplateGroupAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAddressTemplateGroupAttribute require credential") + } + request.SetContext(ctx) response = NewModifyAddressTemplateGroupAttributeResponse() @@ -12277,6 +16118,7 @@ func NewModifyAddressesBandwidthRequest() (request *ModifyAddressesBandwidthRequ request = &ModifyAddressesBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAddressesBandwidth") return @@ -12301,23 +16143,21 @@ func NewModifyAddressesBandwidthResponse() (response *ModifyAddressesBandwidthRe // INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" // INVALIDPARAMETERVALUE_BANDWIDTHTOOSMALL = "InvalidParameterValue.BandwidthTooSmall" // INVALIDPARAMETERVALUE_INCONSISTENTINSTANCEINTERNETCHARGETYPE = "InvalidParameterValue.InconsistentInstanceInternetChargeType" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOCALCIP = "InvalidParameterValue.InstanceNoCalcIP" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RESOURCEEXPIRED = "InvalidParameterValue.ResourceExpired" // INVALIDPARAMETERVALUE_RESOURCENOTEXISTED = "InvalidParameterValue.ResourceNotExisted" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ModifyAddressesBandwidth(request *ModifyAddressesBandwidthRequest) (response *ModifyAddressesBandwidthResponse, err error) { - if request == nil { - request = NewModifyAddressesBandwidthRequest() - } - - response = NewModifyAddressesBandwidthResponse() - err = c.Send(request, response) - return + return c.ModifyAddressesBandwidthWithContext(context.Background(), request) } // ModifyAddressesBandwidth @@ -12332,19 +16172,28 @@ func (c *Client) ModifyAddressesBandwidth(request *ModifyAddressesBandwidthReque // INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" // INVALIDPARAMETERVALUE_BANDWIDTHTOOSMALL = "InvalidParameterValue.BandwidthTooSmall" // INVALIDPARAMETERVALUE_INCONSISTENTINSTANCEINTERNETCHARGETYPE = "InvalidParameterValue.InconsistentInstanceInternetChargeType" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOCALCIP = "InvalidParameterValue.InstanceNoCalcIP" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_RESOURCEEXPIRED = "InvalidParameterValue.ResourceExpired" // INVALIDPARAMETERVALUE_RESOURCENOTEXISTED = "InvalidParameterValue.ResourceNotExisted" // INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ModifyAddressesBandwidthWithContext(ctx context.Context, request *ModifyAddressesBandwidthRequest) (response *ModifyAddressesBandwidthResponse, err error) { if request == nil { request = NewModifyAddressesBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAddressesBandwidth require credential") + } + request.SetContext(ctx) response = NewModifyAddressesBandwidthResponse() @@ -12356,6 +16205,7 @@ func NewModifyAssistantCidrRequest() (request *ModifyAssistantCidrRequest) { request = &ModifyAssistantCidrRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyAssistantCidr") return @@ -12369,7 +16219,7 @@ func NewModifyAssistantCidrResponse() (response *ModifyAssistantCidrResponse) { } // ModifyAssistantCidr -// 本接口(ModifyAssistantCidr)用于批量修改辅助CIDR,支持新增和删除。(接口灰度中,如需使用请提工单。) +// 本接口(ModifyAssistantCidr)用于批量修改辅助CIDR,支持新增和删除。 // // 可能返回的错误码: // @@ -12385,17 +16235,11 @@ func NewModifyAssistantCidrResponse() (response *ModifyAssistantCidrResponse) { // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ModifyAssistantCidr(request *ModifyAssistantCidrRequest) (response *ModifyAssistantCidrResponse, err error) { - if request == nil { - request = NewModifyAssistantCidrRequest() - } - - response = NewModifyAssistantCidrResponse() - err = c.Send(request, response) - return + return c.ModifyAssistantCidrWithContext(context.Background(), request) } // ModifyAssistantCidr -// 本接口(ModifyAssistantCidr)用于批量修改辅助CIDR,支持新增和删除。(接口灰度中,如需使用请提工单。) +// 本接口(ModifyAssistantCidr)用于批量修改辅助CIDR,支持新增和删除。 // // 可能返回的错误码: // @@ -12414,6 +16258,11 @@ func (c *Client) ModifyAssistantCidrWithContext(ctx context.Context, request *Mo if request == nil { request = NewModifyAssistantCidrRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyAssistantCidr require credential") + } + request.SetContext(ctx) response = NewModifyAssistantCidrResponse() @@ -12425,6 +16274,7 @@ func NewModifyBandwidthPackageAttributeRequest() (request *ModifyBandwidthPackag request = &ModifyBandwidthPackageAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyBandwidthPackageAttribute") return @@ -12447,13 +16297,7 @@ func NewModifyBandwidthPackageAttributeResponse() (response *ModifyBandwidthPack // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_INVALIDBANDWIDTHPACKAGECHARGETYPE = "InvalidParameterValue.InvalidBandwidthPackageChargeType" func (c *Client) ModifyBandwidthPackageAttribute(request *ModifyBandwidthPackageAttributeRequest) (response *ModifyBandwidthPackageAttributeResponse, err error) { - if request == nil { - request = NewModifyBandwidthPackageAttributeRequest() - } - - response = NewModifyBandwidthPackageAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyBandwidthPackageAttributeWithContext(context.Background(), request) } // ModifyBandwidthPackageAttribute @@ -12469,6 +16313,11 @@ func (c *Client) ModifyBandwidthPackageAttributeWithContext(ctx context.Context, if request == nil { request = NewModifyBandwidthPackageAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyBandwidthPackageAttribute require credential") + } + request.SetContext(ctx) response = NewModifyBandwidthPackageAttributeResponse() @@ -12480,6 +16329,7 @@ func NewModifyCcnAttachedInstancesAttributeRequest() (request *ModifyCcnAttached request = &ModifyCcnAttachedInstancesAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyCcnAttachedInstancesAttribute") return @@ -12504,13 +16354,7 @@ func NewModifyCcnAttachedInstancesAttributeResponse() (response *ModifyCcnAttach // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ModifyCcnAttachedInstancesAttribute(request *ModifyCcnAttachedInstancesAttributeRequest) (response *ModifyCcnAttachedInstancesAttributeResponse, err error) { - if request == nil { - request = NewModifyCcnAttachedInstancesAttributeRequest() - } - - response = NewModifyCcnAttachedInstancesAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyCcnAttachedInstancesAttributeWithContext(context.Background(), request) } // ModifyCcnAttachedInstancesAttribute @@ -12528,6 +16372,11 @@ func (c *Client) ModifyCcnAttachedInstancesAttributeWithContext(ctx context.Cont if request == nil { request = NewModifyCcnAttachedInstancesAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyCcnAttachedInstancesAttribute require credential") + } + request.SetContext(ctx) response = NewModifyCcnAttachedInstancesAttributeResponse() @@ -12539,6 +16388,7 @@ func NewModifyCcnAttributeRequest() (request *ModifyCcnAttributeRequest) { request = &ModifyCcnAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyCcnAttribute") return @@ -12557,15 +16407,10 @@ func NewModifyCcnAttributeResponse() (response *ModifyCcnAttributeResponse) { // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyCcnAttribute(request *ModifyCcnAttributeRequest) (response *ModifyCcnAttributeResponse, err error) { - if request == nil { - request = NewModifyCcnAttributeRequest() - } - - response = NewModifyCcnAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyCcnAttributeWithContext(context.Background(), request) } // ModifyCcnAttribute @@ -12574,11 +16419,17 @@ func (c *Client) ModifyCcnAttribute(request *ModifyCcnAttributeRequest) (respons // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyCcnAttributeWithContext(ctx context.Context, request *ModifyCcnAttributeRequest) (response *ModifyCcnAttributeResponse, err error) { if request == nil { request = NewModifyCcnAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyCcnAttribute require credential") + } + request.SetContext(ctx) response = NewModifyCcnAttributeResponse() @@ -12590,6 +16441,7 @@ func NewModifyCcnRegionBandwidthLimitsTypeRequest() (request *ModifyCcnRegionBan request = &ModifyCcnRegionBandwidthLimitsTypeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyCcnRegionBandwidthLimitsType") return @@ -12611,15 +16463,10 @@ func NewModifyCcnRegionBandwidthLimitsTypeResponse() (response *ModifyCcnRegionB // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_NOTLOCKEDINSTANCEOPERATION = "UnsupportedOperation.NotLockedInstanceOperation" // UNSUPPORTEDOPERATION_NOTPOSTPAIDCCNOPERATION = "UnsupportedOperation.NotPostpaidCcnOperation" func (c *Client) ModifyCcnRegionBandwidthLimitsType(request *ModifyCcnRegionBandwidthLimitsTypeRequest) (response *ModifyCcnRegionBandwidthLimitsTypeResponse, err error) { - if request == nil { - request = NewModifyCcnRegionBandwidthLimitsTypeRequest() - } - - response = NewModifyCcnRegionBandwidthLimitsTypeResponse() - err = c.Send(request, response) - return + return c.ModifyCcnRegionBandwidthLimitsTypeWithContext(context.Background(), request) } // ModifyCcnRegionBandwidthLimitsType @@ -12631,11 +16478,17 @@ func (c *Client) ModifyCcnRegionBandwidthLimitsType(request *ModifyCcnRegionBand // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_NOTLOCKEDINSTANCEOPERATION = "UnsupportedOperation.NotLockedInstanceOperation" // UNSUPPORTEDOPERATION_NOTPOSTPAIDCCNOPERATION = "UnsupportedOperation.NotPostpaidCcnOperation" func (c *Client) ModifyCcnRegionBandwidthLimitsTypeWithContext(ctx context.Context, request *ModifyCcnRegionBandwidthLimitsTypeRequest) (response *ModifyCcnRegionBandwidthLimitsTypeResponse, err error) { if request == nil { request = NewModifyCcnRegionBandwidthLimitsTypeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyCcnRegionBandwidthLimitsType require credential") + } + request.SetContext(ctx) response = NewModifyCcnRegionBandwidthLimitsTypeResponse() @@ -12647,6 +16500,7 @@ func NewModifyCustomerGatewayAttributeRequest() (request *ModifyCustomerGatewayA request = &ModifyCustomerGatewayAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyCustomerGatewayAttribute") return @@ -12668,13 +16522,7 @@ func NewModifyCustomerGatewayAttributeResponse() (response *ModifyCustomerGatewa // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyCustomerGatewayAttribute(request *ModifyCustomerGatewayAttributeRequest) (response *ModifyCustomerGatewayAttributeResponse, err error) { - if request == nil { - request = NewModifyCustomerGatewayAttributeRequest() - } - - response = NewModifyCustomerGatewayAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyCustomerGatewayAttributeWithContext(context.Background(), request) } // ModifyCustomerGatewayAttribute @@ -12689,6 +16537,11 @@ func (c *Client) ModifyCustomerGatewayAttributeWithContext(ctx context.Context, if request == nil { request = NewModifyCustomerGatewayAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyCustomerGatewayAttribute require credential") + } + request.SetContext(ctx) response = NewModifyCustomerGatewayAttributeResponse() @@ -12700,6 +16553,7 @@ func NewModifyDhcpIpAttributeRequest() (request *ModifyDhcpIpAttributeRequest) { request = &ModifyDhcpIpAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyDhcpIpAttribute") return @@ -12722,13 +16576,7 @@ func NewModifyDhcpIpAttributeResponse() (response *ModifyDhcpIpAttributeResponse // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyDhcpIpAttribute(request *ModifyDhcpIpAttributeRequest) (response *ModifyDhcpIpAttributeResponse, err error) { - if request == nil { - request = NewModifyDhcpIpAttributeRequest() - } - - response = NewModifyDhcpIpAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyDhcpIpAttributeWithContext(context.Background(), request) } // ModifyDhcpIpAttribute @@ -12744,6 +16592,11 @@ func (c *Client) ModifyDhcpIpAttributeWithContext(ctx context.Context, request * if request == nil { request = NewModifyDhcpIpAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyDhcpIpAttribute require credential") + } + request.SetContext(ctx) response = NewModifyDhcpIpAttributeResponse() @@ -12755,6 +16608,7 @@ func NewModifyDirectConnectGatewayAttributeRequest() (request *ModifyDirectConne request = &ModifyDirectConnectGatewayAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyDirectConnectGatewayAttribute") return @@ -12777,15 +16631,10 @@ func NewModifyDirectConnectGatewayAttributeResponse() (response *ModifyDirectCon // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DIRECTCONNECTGATEWAYISUPDATINGCOMMUNITY = "UnsupportedOperation.DirectConnectGatewayIsUpdatingCommunity" func (c *Client) ModifyDirectConnectGatewayAttribute(request *ModifyDirectConnectGatewayAttributeRequest) (response *ModifyDirectConnectGatewayAttributeResponse, err error) { - if request == nil { - request = NewModifyDirectConnectGatewayAttributeRequest() - } - - response = NewModifyDirectConnectGatewayAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyDirectConnectGatewayAttributeWithContext(context.Background(), request) } // ModifyDirectConnectGatewayAttribute @@ -12798,11 +16647,17 @@ func (c *Client) ModifyDirectConnectGatewayAttribute(request *ModifyDirectConnec // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" // UNSUPPORTEDOPERATION_DIRECTCONNECTGATEWAYISUPDATINGCOMMUNITY = "UnsupportedOperation.DirectConnectGatewayIsUpdatingCommunity" func (c *Client) ModifyDirectConnectGatewayAttributeWithContext(ctx context.Context, request *ModifyDirectConnectGatewayAttributeRequest) (response *ModifyDirectConnectGatewayAttributeResponse, err error) { if request == nil { request = NewModifyDirectConnectGatewayAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyDirectConnectGatewayAttribute require credential") + } + request.SetContext(ctx) response = NewModifyDirectConnectGatewayAttributeResponse() @@ -12814,6 +16669,7 @@ func NewModifyFlowLogAttributeRequest() (request *ModifyFlowLogAttributeRequest) request = &ModifyFlowLogAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyFlowLogAttribute") return @@ -12827,7 +16683,7 @@ func NewModifyFlowLogAttributeResponse() (response *ModifyFlowLogAttributeRespon } // ModifyFlowLogAttribute -// 本接口(ModifyFlowLogAttribute)用于修改流日志属性 +// 本接口(ModifyFlowLogAttribute)用于修改流日志属性。 // // 可能返回的错误码: // @@ -12835,17 +16691,11 @@ func NewModifyFlowLogAttributeResponse() (response *ModifyFlowLogAttributeRespon // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) ModifyFlowLogAttribute(request *ModifyFlowLogAttributeRequest) (response *ModifyFlowLogAttributeResponse, err error) { - if request == nil { - request = NewModifyFlowLogAttributeRequest() - } - - response = NewModifyFlowLogAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyFlowLogAttributeWithContext(context.Background(), request) } // ModifyFlowLogAttribute -// 本接口(ModifyFlowLogAttribute)用于修改流日志属性 +// 本接口(ModifyFlowLogAttribute)用于修改流日志属性。 // // 可能返回的错误码: // @@ -12856,6 +16706,11 @@ func (c *Client) ModifyFlowLogAttributeWithContext(ctx context.Context, request if request == nil { request = NewModifyFlowLogAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyFlowLogAttribute require credential") + } + request.SetContext(ctx) response = NewModifyFlowLogAttributeResponse() @@ -12867,6 +16722,7 @@ func NewModifyGatewayFlowQosRequest() (request *ModifyGatewayFlowQosRequest) { request = &ModifyGatewayFlowQosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyGatewayFlowQos") return @@ -12885,16 +16741,11 @@ func NewModifyGatewayFlowQosResponse() (response *ModifyGatewayFlowQosResponse) // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyGatewayFlowQos(request *ModifyGatewayFlowQosRequest) (response *ModifyGatewayFlowQosResponse, err error) { - if request == nil { - request = NewModifyGatewayFlowQosRequest() - } - - response = NewModifyGatewayFlowQosResponse() - err = c.Send(request, response) - return + return c.ModifyGatewayFlowQosWithContext(context.Background(), request) } // ModifyGatewayFlowQos @@ -12903,12 +16754,18 @@ func (c *Client) ModifyGatewayFlowQos(request *ModifyGatewayFlowQosRequest) (res // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyGatewayFlowQosWithContext(ctx context.Context, request *ModifyGatewayFlowQosRequest) (response *ModifyGatewayFlowQosResponse, err error) { if request == nil { request = NewModifyGatewayFlowQosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyGatewayFlowQos require credential") + } + request.SetContext(ctx) response = NewModifyGatewayFlowQosResponse() @@ -12920,6 +16777,7 @@ func NewModifyHaVipAttributeRequest() (request *ModifyHaVipAttributeRequest) { request = &ModifyHaVipAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyHaVipAttribute") return @@ -12933,7 +16791,7 @@ func NewModifyHaVipAttributeResponse() (response *ModifyHaVipAttributeResponse) } // ModifyHaVipAttribute -// 本接口(ModifyHaVipAttribute)用于修改高可用虚拟IP(HAVIP)属性 +// 本接口(ModifyHaVipAttribute)用于修改高可用虚拟IP(HAVIP)属性。 // // 可能返回的错误码: // @@ -12942,18 +16800,13 @@ func NewModifyHaVipAttributeResponse() (response *ModifyHaVipAttributeResponse) // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ModifyHaVipAttribute(request *ModifyHaVipAttributeRequest) (response *ModifyHaVipAttributeResponse, err error) { - if request == nil { - request = NewModifyHaVipAttributeRequest() - } - - response = NewModifyHaVipAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyHaVipAttributeWithContext(context.Background(), request) } // ModifyHaVipAttribute -// 本接口(ModifyHaVipAttribute)用于修改高可用虚拟IP(HAVIP)属性 +// 本接口(ModifyHaVipAttribute)用于修改高可用虚拟IP(HAVIP)属性。 // // 可能返回的错误码: // @@ -12962,10 +16815,16 @@ func (c *Client) ModifyHaVipAttribute(request *ModifyHaVipAttributeRequest) (res // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ModifyHaVipAttributeWithContext(ctx context.Context, request *ModifyHaVipAttributeRequest) (response *ModifyHaVipAttributeResponse, err error) { if request == nil { request = NewModifyHaVipAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyHaVipAttribute require credential") + } + request.SetContext(ctx) response = NewModifyHaVipAttributeResponse() @@ -12977,6 +16836,7 @@ func NewModifyIp6AddressesBandwidthRequest() (request *ModifyIp6AddressesBandwid request = &ModifyIp6AddressesBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyIp6AddressesBandwidth") return @@ -13003,20 +16863,16 @@ func NewModifyIp6AddressesBandwidthResponse() (response *ModifyIp6AddressesBandw // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSIPNOTFOUND = "InvalidParameterValue.AddressIpNotFound" +// INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSIPINARREAR = "UnsupportedOperation.AddressIpInArrear" // UNSUPPORTEDOPERATION_ADDRESSIPINTERNETCHARGETYPENOTPERMIT = "UnsupportedOperation.AddressIpInternetChargeTypeNotPermit" // UNSUPPORTEDOPERATION_ADDRESSIPNOTSUPPORTINSTANCE = "UnsupportedOperation.AddressIpNotSupportInstance" // UNSUPPORTEDOPERATION_ADDRESSIPSTATUSNOTPERMIT = "UnsupportedOperation.AddressIpStatusNotPermit" func (c *Client) ModifyIp6AddressesBandwidth(request *ModifyIp6AddressesBandwidthRequest) (response *ModifyIp6AddressesBandwidthResponse, err error) { - if request == nil { - request = NewModifyIp6AddressesBandwidthRequest() - } - - response = NewModifyIp6AddressesBandwidthResponse() - err = c.Send(request, response) - return + return c.ModifyIp6AddressesBandwidthWithContext(context.Background(), request) } // ModifyIp6AddressesBandwidth @@ -13033,8 +16889,10 @@ func (c *Client) ModifyIp6AddressesBandwidth(request *ModifyIp6AddressesBandwidt // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSIPNOTFOUND = "InvalidParameterValue.AddressIpNotFound" +// INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSIPINARREAR = "UnsupportedOperation.AddressIpInArrear" // UNSUPPORTEDOPERATION_ADDRESSIPINTERNETCHARGETYPENOTPERMIT = "UnsupportedOperation.AddressIpInternetChargeTypeNotPermit" // UNSUPPORTEDOPERATION_ADDRESSIPNOTSUPPORTINSTANCE = "UnsupportedOperation.AddressIpNotSupportInstance" @@ -13043,6 +16901,11 @@ func (c *Client) ModifyIp6AddressesBandwidthWithContext(ctx context.Context, req if request == nil { request = NewModifyIp6AddressesBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyIp6AddressesBandwidth require credential") + } + request.SetContext(ctx) response = NewModifyIp6AddressesBandwidthResponse() @@ -13054,6 +16917,7 @@ func NewModifyIp6RuleRequest() (request *ModifyIp6RuleRequest) { request = &ModifyIp6RuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyIp6Rule") return @@ -13074,15 +16938,10 @@ func NewModifyIp6RuleResponse() (response *ModifyIp6RuleResponse) { // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_IPV6RULENOTCHANGE = "InvalidParameterValue.IPv6RuleNotChange" +// INVALIDPARAMETERVALUE_IP6RULENOTFOUND = "InvalidParameterValue.Ip6RuleNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) ModifyIp6Rule(request *ModifyIp6RuleRequest) (response *ModifyIp6RuleResponse, err error) { - if request == nil { - request = NewModifyIp6RuleRequest() - } - - response = NewModifyIp6RuleResponse() - err = c.Send(request, response) - return + return c.ModifyIp6RuleWithContext(context.Background(), request) } // ModifyIp6Rule @@ -13093,11 +16952,17 @@ func (c *Client) ModifyIp6Rule(request *ModifyIp6RuleRequest) (response *ModifyI // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE_IPV6RULENOTCHANGE = "InvalidParameterValue.IPv6RuleNotChange" +// INVALIDPARAMETERVALUE_IP6RULENOTFOUND = "InvalidParameterValue.Ip6RuleNotFound" // INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" func (c *Client) ModifyIp6RuleWithContext(ctx context.Context, request *ModifyIp6RuleRequest) (response *ModifyIp6RuleResponse, err error) { if request == nil { request = NewModifyIp6RuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyIp6Rule require credential") + } + request.SetContext(ctx) response = NewModifyIp6RuleResponse() @@ -13109,6 +16974,7 @@ func NewModifyIp6TranslatorRequest() (request *ModifyIp6TranslatorRequest) { request = &ModifyIp6TranslatorRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyIp6Translator") return @@ -13129,13 +16995,7 @@ func NewModifyIp6TranslatorResponse() (response *ModifyIp6TranslatorResponse) { // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" func (c *Client) ModifyIp6Translator(request *ModifyIp6TranslatorRequest) (response *ModifyIp6TranslatorResponse, err error) { - if request == nil { - request = NewModifyIp6TranslatorRequest() - } - - response = NewModifyIp6TranslatorResponse() - err = c.Send(request, response) - return + return c.ModifyIp6TranslatorWithContext(context.Background(), request) } // ModifyIp6Translator @@ -13149,6 +17009,11 @@ func (c *Client) ModifyIp6TranslatorWithContext(ctx context.Context, request *Mo if request == nil { request = NewModifyIp6TranslatorRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyIp6Translator require credential") + } + request.SetContext(ctx) response = NewModifyIp6TranslatorResponse() @@ -13160,6 +17025,7 @@ func NewModifyIpv6AddressesAttributeRequest() (request *ModifyIpv6AddressesAttri request = &ModifyIpv6AddressesAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyIpv6AddressesAttribute") return @@ -13178,17 +17044,12 @@ func NewModifyIpv6AddressesAttributeResponse() (response *ModifyIpv6AddressesAtt // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyIpv6AddressesAttribute(request *ModifyIpv6AddressesAttributeRequest) (response *ModifyIpv6AddressesAttributeResponse, err error) { - if request == nil { - request = NewModifyIpv6AddressesAttributeRequest() - } - - response = NewModifyIpv6AddressesAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyIpv6AddressesAttributeWithContext(context.Background(), request) } // ModifyIpv6AddressesAttribute @@ -13197,6 +17058,7 @@ func (c *Client) ModifyIpv6AddressesAttribute(request *ModifyIpv6AddressesAttrib // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" @@ -13204,6 +17066,11 @@ func (c *Client) ModifyIpv6AddressesAttributeWithContext(ctx context.Context, re if request == nil { request = NewModifyIpv6AddressesAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyIpv6AddressesAttribute require credential") + } + request.SetContext(ctx) response = NewModifyIpv6AddressesAttributeResponse() @@ -13215,6 +17082,7 @@ func NewModifyLocalGatewayRequest() (request *ModifyLocalGatewayRequest) { request = &ModifyLocalGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyLocalGateway") return @@ -13228,7 +17096,7 @@ func NewModifyLocalGatewayResponse() (response *ModifyLocalGatewayResponse) { } // ModifyLocalGateway -// 该接口用于修改CDC的本地网关。 +// 本接口(ModifyLocalGateway)用于修改CDC的本地网关。 // // 可能返回的错误码: // @@ -13239,17 +17107,11 @@ func NewModifyLocalGatewayResponse() (response *ModifyLocalGatewayResponse) { // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyLocalGateway(request *ModifyLocalGatewayRequest) (response *ModifyLocalGatewayResponse, err error) { - if request == nil { - request = NewModifyLocalGatewayRequest() - } - - response = NewModifyLocalGatewayResponse() - err = c.Send(request, response) - return + return c.ModifyLocalGatewayWithContext(context.Background(), request) } // ModifyLocalGateway -// 该接口用于修改CDC的本地网关。 +// 本接口(ModifyLocalGateway)用于修改CDC的本地网关。 // // 可能返回的错误码: // @@ -13263,6 +17125,11 @@ func (c *Client) ModifyLocalGatewayWithContext(ctx context.Context, request *Mod if request == nil { request = NewModifyLocalGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyLocalGateway require credential") + } + request.SetContext(ctx) response = NewModifyLocalGatewayResponse() @@ -13274,6 +17141,7 @@ func NewModifyNatGatewayAttributeRequest() (request *ModifyNatGatewayAttributeRe request = &ModifyNatGatewayAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNatGatewayAttribute") return @@ -13297,13 +17165,7 @@ func NewModifyNatGatewayAttributeResponse() (response *ModifyNatGatewayAttribute // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ModifyNatGatewayAttribute(request *ModifyNatGatewayAttributeRequest) (response *ModifyNatGatewayAttributeResponse, err error) { - if request == nil { - request = NewModifyNatGatewayAttributeRequest() - } - - response = NewModifyNatGatewayAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyNatGatewayAttributeWithContext(context.Background(), request) } // ModifyNatGatewayAttribute @@ -13320,6 +17182,11 @@ func (c *Client) ModifyNatGatewayAttributeWithContext(ctx context.Context, reque if request == nil { request = NewModifyNatGatewayAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNatGatewayAttribute require credential") + } + request.SetContext(ctx) response = NewModifyNatGatewayAttributeResponse() @@ -13331,6 +17198,7 @@ func NewModifyNatGatewayDestinationIpPortTranslationNatRuleRequest() (request *M request = &ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNatGatewayDestinationIpPortTranslationNatRule") return @@ -13348,19 +17216,12 @@ func NewModifyNatGatewayDestinationIpPortTranslationNatRuleResponse() (response // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULENOTEXISTS = "InvalidParameterValue.NatGatewayDnatRuleNotExists" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEPIPNEEDVM = "InvalidParameterValue.NatGatewayDnatRulePipNeedVm" +// UNSUPPORTEDOPERATION_NATGATEWAYRULEPIPEXISTS = "UnsupportedOperation.NatGatewayRulePipExists" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" func (c *Client) ModifyNatGatewayDestinationIpPortTranslationNatRule(request *ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { - if request == nil { - request = NewModifyNatGatewayDestinationIpPortTranslationNatRuleRequest() - } - - response = NewModifyNatGatewayDestinationIpPortTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.ModifyNatGatewayDestinationIpPortTranslationNatRuleWithContext(context.Background(), request) } // ModifyNatGatewayDestinationIpPortTranslationNatRule @@ -13368,15 +17229,19 @@ func (c *Client) ModifyNatGatewayDestinationIpPortTranslationNatRule(request *Mo // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" -// RESOURCEINUSE = "ResourceInUse" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULENOTEXISTS = "InvalidParameterValue.NatGatewayDnatRuleNotExists" +// INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEPIPNEEDVM = "InvalidParameterValue.NatGatewayDnatRulePipNeedVm" +// UNSUPPORTEDOPERATION_NATGATEWAYRULEPIPEXISTS = "UnsupportedOperation.NatGatewayRulePipExists" +// UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" func (c *Client) ModifyNatGatewayDestinationIpPortTranslationNatRuleWithContext(ctx context.Context, request *ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest) (response *ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse, err error) { if request == nil { request = NewModifyNatGatewayDestinationIpPortTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNatGatewayDestinationIpPortTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewModifyNatGatewayDestinationIpPortTranslationNatRuleResponse() @@ -13388,6 +17253,7 @@ func NewModifyNatGatewaySourceIpTranslationNatRuleRequest() (request *ModifyNatG request = &ModifyNatGatewaySourceIpTranslationNatRuleRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNatGatewaySourceIpTranslationNatRule") return @@ -13409,16 +17275,12 @@ func NewModifyNatGatewaySourceIpTranslationNatRuleResponse() (response *ModifyNa // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NATGATEWAYSNATRULENOTEXISTS = "InvalidParameterValue.NatGatewaySnatRuleNotExists" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) ModifyNatGatewaySourceIpTranslationNatRule(request *ModifyNatGatewaySourceIpTranslationNatRuleRequest) (response *ModifyNatGatewaySourceIpTranslationNatRuleResponse, err error) { - if request == nil { - request = NewModifyNatGatewaySourceIpTranslationNatRuleRequest() - } - - response = NewModifyNatGatewaySourceIpTranslationNatRuleResponse() - err = c.Send(request, response) - return + return c.ModifyNatGatewaySourceIpTranslationNatRuleWithContext(context.Background(), request) } // ModifyNatGatewaySourceIpTranslationNatRule @@ -13430,12 +17292,19 @@ func (c *Client) ModifyNatGatewaySourceIpTranslationNatRule(request *ModifyNatGa // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NATGATEWAYSNATRULENOTEXISTS = "InvalidParameterValue.NatGatewaySnatRuleNotExists" // MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_UNBINDEIP = "UnsupportedOperation.UnbindEIP" func (c *Client) ModifyNatGatewaySourceIpTranslationNatRuleWithContext(ctx context.Context, request *ModifyNatGatewaySourceIpTranslationNatRuleRequest) (response *ModifyNatGatewaySourceIpTranslationNatRuleResponse, err error) { if request == nil { request = NewModifyNatGatewaySourceIpTranslationNatRuleRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNatGatewaySourceIpTranslationNatRule require credential") + } + request.SetContext(ctx) response = NewModifyNatGatewaySourceIpTranslationNatRuleResponse() @@ -13447,6 +17316,7 @@ func NewModifyNetDetectRequest() (request *ModifyNetDetectRequest) { request = &ModifyNetDetectRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetDetect") return @@ -13464,23 +17334,19 @@ func NewModifyNetDetectResponse() (response *ModifyNetDetectResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" func (c *Client) ModifyNetDetect(request *ModifyNetDetectRequest) (response *ModifyNetDetectResponse, err error) { - if request == nil { - request = NewModifyNetDetectRequest() - } - - response = NewModifyNetDetectResponse() - err = c.Send(request, response) - return + return c.ModifyNetDetectWithContext(context.Background(), request) } // ModifyNetDetect @@ -13488,10 +17354,12 @@ func (c *Client) ModifyNetDetect(request *ModifyNetDetectRequest) (response *Mod // // 可能返回的错误码: // +// FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_NETDETECTNOTFOUNDIP = "InvalidParameterValue.NetDetectNotFoundIp" // INVALIDPARAMETERVALUE_NETDETECTSAMEIP = "InvalidParameterValue.NetDetectSameIp" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" @@ -13501,6 +17369,11 @@ func (c *Client) ModifyNetDetectWithContext(ctx context.Context, request *Modify if request == nil { request = NewModifyNetDetectRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetDetect require credential") + } + request.SetContext(ctx) response = NewModifyNetDetectResponse() @@ -13512,6 +17385,7 @@ func NewModifyNetworkAclAttributeRequest() (request *ModifyNetworkAclAttributeRe request = &ModifyNetworkAclAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkAclAttribute") return @@ -13534,57 +17408,126 @@ func NewModifyNetworkAclAttributeResponse() (response *ModifyNetworkAclAttribute // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyNetworkAclAttribute(request *ModifyNetworkAclAttributeRequest) (response *ModifyNetworkAclAttributeResponse, err error) { + return c.ModifyNetworkAclAttributeWithContext(context.Background(), request) +} + +// ModifyNetworkAclAttribute +// 本接口(ModifyNetworkAclAttribute)用于修改网络ACL属性。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) ModifyNetworkAclAttributeWithContext(ctx context.Context, request *ModifyNetworkAclAttributeRequest) (response *ModifyNetworkAclAttributeResponse, err error) { if request == nil { request = NewModifyNetworkAclAttributeRequest() } + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetworkAclAttribute require credential") + } + + request.SetContext(ctx) + response = NewModifyNetworkAclAttributeResponse() err = c.Send(request, response) return } -// ModifyNetworkAclAttribute -// 本接口(ModifyNetworkAclAttribute)用于修改网络ACL属性。 +func NewModifyNetworkAclEntriesRequest() (request *ModifyNetworkAclEntriesRequest) { + request = &ModifyNetworkAclEntriesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkAclEntries") + + return +} + +func NewModifyNetworkAclEntriesResponse() (response *ModifyNetworkAclEntriesResponse) { + response = &ModifyNetworkAclEntriesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifyNetworkAclEntries +// 本接口(ModifyNetworkAclEntries)用于修改(包括添加和删除)网络ACL的入站规则和出站规则。在NetworkAclEntrySet参数中: +// +// * 若同时传入入站规则和出站规则,则重置原有的入站规则和出站规则,并分别导入传入的规则。 +// +// * 若仅传入入站规则,则仅重置原有的入站规则,并导入传入的规则,不影响原有的出站规则(若仅传入出站规则,处理方式类似入站方向)。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) ModifyNetworkAclEntries(request *ModifyNetworkAclEntriesRequest) (response *ModifyNetworkAclEntriesResponse, err error) { + return c.ModifyNetworkAclEntriesWithContext(context.Background(), request) +} + +// ModifyNetworkAclEntries +// 本接口(ModifyNetworkAclEntries)用于修改(包括添加和删除)网络ACL的入站规则和出站规则。在NetworkAclEntrySet参数中: +// +// * 若同时传入入站规则和出站规则,则重置原有的入站规则和出站规则,并分别导入传入的规则。 +// +// * 若仅传入入站规则,则仅重置原有的入站规则,并导入传入的规则,不影响原有的出站规则(若仅传入出站规则,处理方式类似入站方向)。 // // 可能返回的错误码: // +// INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) ModifyNetworkAclAttributeWithContext(ctx context.Context, request *ModifyNetworkAclAttributeRequest) (response *ModifyNetworkAclAttributeResponse, err error) { +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) ModifyNetworkAclEntriesWithContext(ctx context.Context, request *ModifyNetworkAclEntriesRequest) (response *ModifyNetworkAclEntriesResponse, err error) { if request == nil { - request = NewModifyNetworkAclAttributeRequest() + request = NewModifyNetworkAclEntriesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetworkAclEntries require credential") } + request.SetContext(ctx) - response = NewModifyNetworkAclAttributeResponse() + response = NewModifyNetworkAclEntriesResponse() err = c.Send(request, response) return } -func NewModifyNetworkAclEntriesRequest() (request *ModifyNetworkAclEntriesRequest) { - request = &ModifyNetworkAclEntriesRequest{ +func NewModifyNetworkAclQuintupleEntriesRequest() (request *ModifyNetworkAclQuintupleEntriesRequest) { + request = &ModifyNetworkAclQuintupleEntriesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkAclEntries") + + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkAclQuintupleEntries") return } -func NewModifyNetworkAclEntriesResponse() (response *ModifyNetworkAclEntriesResponse) { - response = &ModifyNetworkAclEntriesResponse{ +func NewModifyNetworkAclQuintupleEntriesResponse() (response *ModifyNetworkAclQuintupleEntriesResponse) { + response = &ModifyNetworkAclQuintupleEntriesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// ModifyNetworkAclEntries -// 本接口(ModifyNetworkAclEntries)用于修改(包括添加和删除)网络ACL的入站规则和出站规则。在NetworkAclEntrySet参数中: -// -// * 若同时传入入站规则和出站规则,则重置原有的入站规则和出站规则,并分别导入传入的规则。 -// -// * 若仅传入入站规则,则仅重置原有的入站规则,并导入传入的规则,不影响原有的出站规则(若仅传入出站规则,处理方式类似入站方向)。 +// ModifyNetworkAclQuintupleEntries +// 本接口(ModifyNetworkAclQuintupleEntries)用于修改网络ACL五元组的入站规则和出站规则。在NetworkAclQuintupleEntrySet参数中:NetworkAclQuintupleEntry需要提供NetworkAclQuintupleEntryId。 // // 可能返回的错误码: // @@ -13595,22 +17538,13 @@ func NewModifyNetworkAclEntriesResponse() (response *ModifyNetworkAclEntriesResp // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) ModifyNetworkAclEntries(request *ModifyNetworkAclEntriesRequest) (response *ModifyNetworkAclEntriesResponse, err error) { - if request == nil { - request = NewModifyNetworkAclEntriesRequest() - } - - response = NewModifyNetworkAclEntriesResponse() - err = c.Send(request, response) - return +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) ModifyNetworkAclQuintupleEntries(request *ModifyNetworkAclQuintupleEntriesRequest) (response *ModifyNetworkAclQuintupleEntriesResponse, err error) { + return c.ModifyNetworkAclQuintupleEntriesWithContext(context.Background(), request) } -// ModifyNetworkAclEntries -// 本接口(ModifyNetworkAclEntries)用于修改(包括添加和删除)网络ACL的入站规则和出站规则。在NetworkAclEntrySet参数中: -// -// * 若同时传入入站规则和出站规则,则重置原有的入站规则和出站规则,并分别导入传入的规则。 -// -// * 若仅传入入站规则,则仅重置原有的入站规则,并导入传入的规则,不影响原有的出站规则(若仅传入出站规则,处理方式类似入站方向)。 +// ModifyNetworkAclQuintupleEntries +// 本接口(ModifyNetworkAclQuintupleEntries)用于修改网络ACL五元组的入站规则和出站规则。在NetworkAclQuintupleEntrySet参数中:NetworkAclQuintupleEntry需要提供NetworkAclQuintupleEntryId。 // // 可能返回的错误码: // @@ -13621,13 +17555,19 @@ func (c *Client) ModifyNetworkAclEntries(request *ModifyNetworkAclEntriesRequest // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) ModifyNetworkAclEntriesWithContext(ctx context.Context, request *ModifyNetworkAclEntriesRequest) (response *ModifyNetworkAclEntriesResponse, err error) { +// UNSUPPORTEDOPERATION_APPIDMISMATCH = "UnsupportedOperation.AppIdMismatch" +func (c *Client) ModifyNetworkAclQuintupleEntriesWithContext(ctx context.Context, request *ModifyNetworkAclQuintupleEntriesRequest) (response *ModifyNetworkAclQuintupleEntriesResponse, err error) { if request == nil { - request = NewModifyNetworkAclEntriesRequest() + request = NewModifyNetworkAclQuintupleEntriesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetworkAclQuintupleEntries require credential") + } + request.SetContext(ctx) - response = NewModifyNetworkAclEntriesResponse() + response = NewModifyNetworkAclQuintupleEntriesResponse() err = c.Send(request, response) return } @@ -13636,6 +17576,7 @@ func NewModifyNetworkInterfaceAttributeRequest() (request *ModifyNetworkInterfac request = &ModifyNetworkInterfaceAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkInterfaceAttribute") return @@ -13658,14 +17599,9 @@ func NewModifyNetworkInterfaceAttributeResponse() (response *ModifyNetworkInterf // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SUBENINOTSUPPORTTRUNKING = "UnsupportedOperation.SubEniNotSupportTrunking" func (c *Client) ModifyNetworkInterfaceAttribute(request *ModifyNetworkInterfaceAttributeRequest) (response *ModifyNetworkInterfaceAttributeResponse, err error) { - if request == nil { - request = NewModifyNetworkInterfaceAttributeRequest() - } - - response = NewModifyNetworkInterfaceAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyNetworkInterfaceAttributeWithContext(context.Background(), request) } // ModifyNetworkInterfaceAttribute @@ -13678,10 +17614,16 @@ func (c *Client) ModifyNetworkInterfaceAttribute(request *ModifyNetworkInterface // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_SUBENINOTSUPPORTTRUNKING = "UnsupportedOperation.SubEniNotSupportTrunking" func (c *Client) ModifyNetworkInterfaceAttributeWithContext(ctx context.Context, request *ModifyNetworkInterfaceAttributeRequest) (response *ModifyNetworkInterfaceAttributeResponse, err error) { if request == nil { request = NewModifyNetworkInterfaceAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetworkInterfaceAttribute require credential") + } + request.SetContext(ctx) response = NewModifyNetworkInterfaceAttributeResponse() @@ -13693,6 +17635,7 @@ func NewModifyNetworkInterfaceQosRequest() (request *ModifyNetworkInterfaceQosRe request = &ModifyNetworkInterfaceQosRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyNetworkInterfaceQos") return @@ -13706,37 +17649,40 @@ func NewModifyNetworkInterfaceQosResponse() (response *ModifyNetworkInterfaceQos } // ModifyNetworkInterfaceQos -// 修改弹性网卡服务质量 +// 本接口(ModifyNetworkInterfaceQos)用于修改弹性网卡服务质量。 // // 可能返回的错误码: // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyNetworkInterfaceQos(request *ModifyNetworkInterfaceQosRequest) (response *ModifyNetworkInterfaceQosResponse, err error) { - if request == nil { - request = NewModifyNetworkInterfaceQosRequest() - } - - response = NewModifyNetworkInterfaceQosResponse() - err = c.Send(request, response) - return + return c.ModifyNetworkInterfaceQosWithContext(context.Background(), request) } // ModifyNetworkInterfaceQos -// 修改弹性网卡服务质量 +// 本接口(ModifyNetworkInterfaceQos)用于修改弹性网卡服务质量。 // // 可能返回的错误码: // // INTERNALERROR = "InternalError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyNetworkInterfaceQosWithContext(ctx context.Context, request *ModifyNetworkInterfaceQosRequest) (response *ModifyNetworkInterfaceQosResponse, err error) { if request == nil { request = NewModifyNetworkInterfaceQosRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyNetworkInterfaceQos require credential") + } + request.SetContext(ctx) response = NewModifyNetworkInterfaceQosResponse() @@ -13748,6 +17694,7 @@ func NewModifyPrivateIpAddressesAttributeRequest() (request *ModifyPrivateIpAddr request = &ModifyPrivateIpAddressesAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyPrivateIpAddressesAttribute") return @@ -13766,16 +17713,11 @@ func NewModifyPrivateIpAddressesAttributeResponse() (response *ModifyPrivateIpAd // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyPrivateIpAddressesAttribute(request *ModifyPrivateIpAddressesAttributeRequest) (response *ModifyPrivateIpAddressesAttributeResponse, err error) { - if request == nil { - request = NewModifyPrivateIpAddressesAttributeRequest() - } - - response = NewModifyPrivateIpAddressesAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyPrivateIpAddressesAttributeWithContext(context.Background(), request) } // ModifyPrivateIpAddressesAttribute @@ -13784,12 +17726,18 @@ func (c *Client) ModifyPrivateIpAddressesAttribute(request *ModifyPrivateIpAddre // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyPrivateIpAddressesAttributeWithContext(ctx context.Context, request *ModifyPrivateIpAddressesAttributeRequest) (response *ModifyPrivateIpAddressesAttributeResponse, err error) { if request == nil { request = NewModifyPrivateIpAddressesAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyPrivateIpAddressesAttribute require credential") + } + request.SetContext(ctx) response = NewModifyPrivateIpAddressesAttributeResponse() @@ -13801,6 +17749,7 @@ func NewModifyRouteTableAttributeRequest() (request *ModifyRouteTableAttributeRe request = &ModifyRouteTableAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyRouteTableAttribute") return @@ -13821,13 +17770,7 @@ func NewModifyRouteTableAttributeResponse() (response *ModifyRouteTableAttribute // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyRouteTableAttribute(request *ModifyRouteTableAttributeRequest) (response *ModifyRouteTableAttributeResponse, err error) { - if request == nil { - request = NewModifyRouteTableAttributeRequest() - } - - response = NewModifyRouteTableAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyRouteTableAttributeWithContext(context.Background(), request) } // ModifyRouteTableAttribute @@ -13841,6 +17784,11 @@ func (c *Client) ModifyRouteTableAttributeWithContext(ctx context.Context, reque if request == nil { request = NewModifyRouteTableAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyRouteTableAttribute require credential") + } + request.SetContext(ctx) response = NewModifyRouteTableAttributeResponse() @@ -13852,6 +17800,7 @@ func NewModifySecurityGroupAttributeRequest() (request *ModifySecurityGroupAttri request = &ModifySecurityGroupAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifySecurityGroupAttribute") return @@ -13874,13 +17823,7 @@ func NewModifySecurityGroupAttributeResponse() (response *ModifySecurityGroupAtt // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifySecurityGroupAttribute(request *ModifySecurityGroupAttributeRequest) (response *ModifySecurityGroupAttributeResponse, err error) { - if request == nil { - request = NewModifySecurityGroupAttributeRequest() - } - - response = NewModifySecurityGroupAttributeResponse() - err = c.Send(request, response) - return + return c.ModifySecurityGroupAttributeWithContext(context.Background(), request) } // ModifySecurityGroupAttribute @@ -13896,6 +17839,11 @@ func (c *Client) ModifySecurityGroupAttributeWithContext(ctx context.Context, re if request == nil { request = NewModifySecurityGroupAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifySecurityGroupAttribute require credential") + } + request.SetContext(ctx) response = NewModifySecurityGroupAttributeResponse() @@ -13907,6 +17855,7 @@ func NewModifySecurityGroupPoliciesRequest() (request *ModifySecurityGroupPolici request = &ModifySecurityGroupPoliciesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifySecurityGroupPolicies") return @@ -13952,21 +17901,23 @@ func NewModifySecurityGroupPoliciesResponse() (response *ModifySecurityGroupPoli // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) ModifySecurityGroupPolicies(request *ModifySecurityGroupPoliciesRequest) (response *ModifySecurityGroupPoliciesResponse, err error) { - if request == nil { - request = NewModifySecurityGroupPoliciesRequest() - } - - response = NewModifySecurityGroupPoliciesResponse() - err = c.Send(request, response) - return + return c.ModifySecurityGroupPoliciesWithContext(context.Background(), request) } // ModifySecurityGroupPolicies @@ -14002,17 +17953,30 @@ func (c *Client) ModifySecurityGroupPolicies(request *ModifySecurityGroupPolicie // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" func (c *Client) ModifySecurityGroupPoliciesWithContext(ctx context.Context, request *ModifySecurityGroupPoliciesRequest) (response *ModifySecurityGroupPoliciesResponse, err error) { if request == nil { request = NewModifySecurityGroupPoliciesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifySecurityGroupPolicies require credential") + } + request.SetContext(ctx) response = NewModifySecurityGroupPoliciesResponse() @@ -14024,6 +17988,7 @@ func NewModifyServiceTemplateAttributeRequest() (request *ModifyServiceTemplateA request = &ModifyServiceTemplateAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyServiceTemplateAttribute") return @@ -14037,32 +18002,30 @@ func NewModifyServiceTemplateAttributeResponse() (response *ModifyServiceTemplat } // ModifyServiceTemplateAttribute -// 本接口(ModifyServiceTemplateAttribute)用于修改协议端口模板 +// 本接口(ModifyServiceTemplateAttribute)用于修改协议端口模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyServiceTemplateAttribute(request *ModifyServiceTemplateAttributeRequest) (response *ModifyServiceTemplateAttributeResponse, err error) { - if request == nil { - request = NewModifyServiceTemplateAttributeRequest() - } - - response = NewModifyServiceTemplateAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyServiceTemplateAttributeWithContext(context.Background(), request) } // ModifyServiceTemplateAttribute -// 本接口(ModifyServiceTemplateAttribute)用于修改协议端口模板 +// 本接口(ModifyServiceTemplateAttribute)用于修改协议端口模板。 // // 可能返回的错误码: // +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" @@ -14070,6 +18033,11 @@ func (c *Client) ModifyServiceTemplateAttributeWithContext(ctx context.Context, if request == nil { request = NewModifyServiceTemplateAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyServiceTemplateAttribute require credential") + } + request.SetContext(ctx) response = NewModifyServiceTemplateAttributeResponse() @@ -14081,6 +18049,7 @@ func NewModifyServiceTemplateGroupAttributeRequest() (request *ModifyServiceTemp request = &ModifyServiceTemplateGroupAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyServiceTemplateGroupAttribute") return @@ -14101,31 +18070,87 @@ func NewModifyServiceTemplateGroupAttributeResponse() (response *ModifyServiceTe // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyServiceTemplateGroupAttribute(request *ModifyServiceTemplateGroupAttributeRequest) (response *ModifyServiceTemplateGroupAttributeResponse, err error) { + return c.ModifyServiceTemplateGroupAttributeWithContext(context.Background(), request) +} + +// ModifyServiceTemplateGroupAttribute +// 本接口(ModifyServiceTemplateGroupAttribute)用于修改协议端口模板集合。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" +func (c *Client) ModifyServiceTemplateGroupAttributeWithContext(ctx context.Context, request *ModifyServiceTemplateGroupAttributeRequest) (response *ModifyServiceTemplateGroupAttributeResponse, err error) { if request == nil { request = NewModifyServiceTemplateGroupAttributeRequest() } + if c.GetCredential() == nil { + return nil, errors.New("ModifyServiceTemplateGroupAttribute require credential") + } + + request.SetContext(ctx) + response = NewModifyServiceTemplateGroupAttributeResponse() err = c.Send(request, response) return } -// ModifyServiceTemplateGroupAttribute -// 本接口(ModifyServiceTemplateGroupAttribute)用于修改协议端口模板集合。 +func NewModifySnapshotPoliciesRequest() (request *ModifySnapshotPoliciesRequest) { + request = &ModifySnapshotPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ModifySnapshotPolicies") + + return +} + +func NewModifySnapshotPoliciesResponse() (response *ModifySnapshotPoliciesResponse) { + response = &ModifySnapshotPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifySnapshotPolicies +// 本接口(ModifySnapshotPolicies)用于修改快照策略。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// LIMITEXCEEDED = "LimitExceeded" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) ModifyServiceTemplateGroupAttributeWithContext(ctx context.Context, request *ModifyServiceTemplateGroupAttributeRequest) (response *ModifyServiceTemplateGroupAttributeResponse, err error) { +// UNSUPPORTEDOPERATION_SNAPSHOTBACKUPTYPEMODIFY = "UnsupportedOperation.SnapshotBackupTypeModify" +func (c *Client) ModifySnapshotPolicies(request *ModifySnapshotPoliciesRequest) (response *ModifySnapshotPoliciesResponse, err error) { + return c.ModifySnapshotPoliciesWithContext(context.Background(), request) +} + +// ModifySnapshotPolicies +// 本接口(ModifySnapshotPolicies)用于修改快照策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_SNAPSHOTBACKUPTYPEMODIFY = "UnsupportedOperation.SnapshotBackupTypeModify" +func (c *Client) ModifySnapshotPoliciesWithContext(ctx context.Context, request *ModifySnapshotPoliciesRequest) (response *ModifySnapshotPoliciesResponse, err error) { if request == nil { - request = NewModifyServiceTemplateGroupAttributeRequest() + request = NewModifySnapshotPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ModifySnapshotPolicies require credential") } + request.SetContext(ctx) - response = NewModifyServiceTemplateGroupAttributeResponse() + response = NewModifySnapshotPoliciesResponse() err = c.Send(request, response) return } @@ -14134,6 +18159,7 @@ func NewModifySubnetAttributeRequest() (request *ModifySubnetAttributeRequest) { request = &ModifySubnetAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifySubnetAttribute") return @@ -14151,16 +18177,12 @@ func NewModifySubnetAttributeResponse() (response *ModifySubnetAttributeResponse // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifySubnetAttribute(request *ModifySubnetAttributeRequest) (response *ModifySubnetAttributeResponse, err error) { - if request == nil { - request = NewModifySubnetAttributeRequest() - } - - response = NewModifySubnetAttributeResponse() - err = c.Send(request, response) - return + return c.ModifySubnetAttributeWithContext(context.Background(), request) } // ModifySubnetAttribute @@ -14168,12 +18190,19 @@ func (c *Client) ModifySubnetAttribute(request *ModifySubnetAttributeRequest) (r // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifySubnetAttributeWithContext(ctx context.Context, request *ModifySubnetAttributeRequest) (response *ModifySubnetAttributeResponse, err error) { if request == nil { request = NewModifySubnetAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifySubnetAttribute require credential") + } + request.SetContext(ctx) response = NewModifySubnetAttributeResponse() @@ -14185,6 +18214,7 @@ func NewModifyTemplateMemberRequest() (request *ModifyTemplateMemberRequest) { request = &ModifyTemplateMemberRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyTemplateMember") return @@ -14198,7 +18228,7 @@ func NewModifyTemplateMemberResponse() (response *ModifyTemplateMemberResponse) } // ModifyTemplateMember -// 修改模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 修改模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -14206,18 +18236,13 @@ func NewModifyTemplateMemberResponse() (response *ModifyTemplateMemberResponse) // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyTemplateMember(request *ModifyTemplateMemberRequest) (response *ModifyTemplateMemberResponse, err error) { - if request == nil { - request = NewModifyTemplateMemberRequest() - } - - response = NewModifyTemplateMemberResponse() - err = c.Send(request, response) - return + return c.ModifyTemplateMemberWithContext(context.Background(), request) } // ModifyTemplateMember -// 修改模版对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 +// 修改模板对象中的IP地址、协议端口、IP地址组、协议端口组。当前仅支持北京、泰国、北美地域请求。 // // 可能返回的错误码: // @@ -14225,10 +18250,16 @@ func (c *Client) ModifyTemplateMember(request *ModifyTemplateMemberRequest) (res // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) ModifyTemplateMemberWithContext(ctx context.Context, request *ModifyTemplateMemberRequest) (response *ModifyTemplateMemberResponse, err error) { if request == nil { request = NewModifyTemplateMemberRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyTemplateMember require credential") + } + request.SetContext(ctx) response = NewModifyTemplateMemberResponse() @@ -14240,6 +18271,7 @@ func NewModifyVpcAttributeRequest() (request *ModifyVpcAttributeRequest) { request = &ModifyVpcAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpcAttribute") return @@ -14257,18 +18289,16 @@ func NewModifyVpcAttributeResponse() (response *ModifyVpcAttributeResponse) { // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_ENABLEMULTICAST = "UnsupportedOperation.EnableMulticast" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDUPDATECCNROUTEPUBLISH = "UnsupportedOperation.NotSupportedUpdateCcnRoutePublish" func (c *Client) ModifyVpcAttribute(request *ModifyVpcAttributeRequest) (response *ModifyVpcAttributeResponse, err error) { - if request == nil { - request = NewModifyVpcAttributeRequest() - } - - response = NewModifyVpcAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyVpcAttributeWithContext(context.Background(), request) } // ModifyVpcAttribute @@ -14276,14 +18306,23 @@ func (c *Client) ModifyVpcAttribute(request *ModifyVpcAttributeRequest) (respons // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION_ENABLEMULTICAST = "UnsupportedOperation.EnableMulticast" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDUPDATECCNROUTEPUBLISH = "UnsupportedOperation.NotSupportedUpdateCcnRoutePublish" func (c *Client) ModifyVpcAttributeWithContext(ctx context.Context, request *ModifyVpcAttributeRequest) (response *ModifyVpcAttributeResponse, err error) { if request == nil { request = NewModifyVpcAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpcAttribute require credential") + } + request.SetContext(ctx) response = NewModifyVpcAttributeResponse() @@ -14295,6 +18334,7 @@ func NewModifyVpcEndPointAttributeRequest() (request *ModifyVpcEndPointAttribute request = &ModifyVpcEndPointAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpcEndPointAttribute") return @@ -14308,11 +18348,12 @@ func NewModifyVpcEndPointAttributeResponse() (response *ModifyVpcEndPointAttribu } // ModifyVpcEndPointAttribute -// 修改终端节点属性。 +// 本接口(ModifyVpcEndPointAttribute)用于修改终端节点属性。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -14321,21 +18362,16 @@ func NewModifyVpcEndPointAttributeResponse() (response *ModifyVpcEndPointAttribu // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_SPECIALENDPOINTSERVICE = "UnsupportedOperation.SpecialEndPointService" func (c *Client) ModifyVpcEndPointAttribute(request *ModifyVpcEndPointAttributeRequest) (response *ModifyVpcEndPointAttributeResponse, err error) { - if request == nil { - request = NewModifyVpcEndPointAttributeRequest() - } - - response = NewModifyVpcEndPointAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyVpcEndPointAttributeWithContext(context.Background(), request) } // ModifyVpcEndPointAttribute -// 修改终端节点属性。 +// 本接口(ModifyVpcEndPointAttribute)用于修改终端节点属性。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // MISSINGPARAMETER = "MissingParameter" @@ -14347,6 +18383,11 @@ func (c *Client) ModifyVpcEndPointAttributeWithContext(ctx context.Context, requ if request == nil { request = NewModifyVpcEndPointAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpcEndPointAttribute require credential") + } + request.SetContext(ctx) response = NewModifyVpcEndPointAttributeResponse() @@ -14358,6 +18399,7 @@ func NewModifyVpcEndPointServiceAttributeRequest() (request *ModifyVpcEndPointSe request = &ModifyVpcEndPointServiceAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpcEndPointServiceAttribute") return @@ -14375,20 +18417,16 @@ func NewModifyVpcEndPointServiceAttributeResponse() (response *ModifyVpcEndPoint // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" -// RESOURCEUNAVAILABLE = "ResourceUnavailable" -// UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" -func (c *Client) ModifyVpcEndPointServiceAttribute(request *ModifyVpcEndPointServiceAttributeRequest) (response *ModifyVpcEndPointServiceAttributeResponse, err error) { - if request == nil { - request = NewModifyVpcEndPointServiceAttributeRequest() - } - - response = NewModifyVpcEndPointServiceAttributeResponse() - err = c.Send(request, response) - return +// RESOURCEUNAVAILABLE = "ResourceUnavailable" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" +func (c *Client) ModifyVpcEndPointServiceAttribute(request *ModifyVpcEndPointServiceAttributeRequest) (response *ModifyVpcEndPointServiceAttributeResponse, err error) { + return c.ModifyVpcEndPointServiceAttributeWithContext(context.Background(), request) } // ModifyVpcEndPointServiceAttribute @@ -14396,16 +18434,23 @@ func (c *Client) ModifyVpcEndPointServiceAttribute(request *ModifyVpcEndPointSer // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // MISSINGPARAMETER = "MissingParameter" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" // RESOURCEUNAVAILABLE = "ResourceUnavailable" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) ModifyVpcEndPointServiceAttributeWithContext(ctx context.Context, request *ModifyVpcEndPointServiceAttributeRequest) (response *ModifyVpcEndPointServiceAttributeResponse, err error) { if request == nil { request = NewModifyVpcEndPointServiceAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpcEndPointServiceAttribute require credential") + } + request.SetContext(ctx) response = NewModifyVpcEndPointServiceAttributeResponse() @@ -14417,6 +18462,7 @@ func NewModifyVpcEndPointServiceWhiteListRequest() (request *ModifyVpcEndPointSe request = &ModifyVpcEndPointServiceWhiteListRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpcEndPointServiceWhiteList") return @@ -14430,40 +18476,120 @@ func NewModifyVpcEndPointServiceWhiteListResponse() (response *ModifyVpcEndPoint } // ModifyVpcEndPointServiceWhiteList -// 修改终端节点服务白名单属性。 +// 本接口(ModifyVpcEndPointServiceWhiteList)用于修改终端节点服务白名单属性。 // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" func (c *Client) ModifyVpcEndPointServiceWhiteList(request *ModifyVpcEndPointServiceWhiteListRequest) (response *ModifyVpcEndPointServiceWhiteListResponse, err error) { + return c.ModifyVpcEndPointServiceWhiteListWithContext(context.Background(), request) +} + +// ModifyVpcEndPointServiceWhiteList +// 本接口(ModifyVpcEndPointServiceWhiteList)用于修改终端节点服务白名单属性。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) ModifyVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *ModifyVpcEndPointServiceWhiteListRequest) (response *ModifyVpcEndPointServiceWhiteListResponse, err error) { if request == nil { request = NewModifyVpcEndPointServiceWhiteListRequest() } + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpcEndPointServiceWhiteList require credential") + } + + request.SetContext(ctx) + response = NewModifyVpcEndPointServiceWhiteListResponse() err = c.Send(request, response) return } -// ModifyVpcEndPointServiceWhiteList -// 修改终端节点服务白名单属性。 +func NewModifyVpcPeeringConnectionRequest() (request *ModifyVpcPeeringConnectionRequest) { + request = &ModifyVpcPeeringConnectionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpcPeeringConnection") + + return +} + +func NewModifyVpcPeeringConnectionResponse() (response *ModifyVpcPeeringConnectionResponse) { + response = &ModifyVpcPeeringConnectionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ModifyVpcPeeringConnection +// 本接口(ModifyVpcPeeringConnection)用于修改私有网络对等连接属性。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_DUPLICATEREGION = "InvalidParameterValue.DuplicateRegion" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_VPCPEERAVALIMITEXCEEDED = "LimitExceeded.VpcPeerAvaLimitExceeded" +// LIMITEXCEEDED_VPCPEERTOTALLIMITEXCEEDED = "LimitExceeded.VpcPeerTotalLimitExceeded" // MISSINGPARAMETER = "MissingParameter" // RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" -func (c *Client) ModifyVpcEndPointServiceWhiteListWithContext(ctx context.Context, request *ModifyVpcEndPointServiceWhiteListRequest) (response *ModifyVpcEndPointServiceWhiteListResponse, err error) { +// UNAUTHORIZEDOPERATION_VPCPEERCIDRCONFLICT = "UnauthorizedOperation.VpcPeerCidrConflict" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" +// UNSUPPORTEDOPERATION_VPCPEERALREADYEXIST = "UnsupportedOperation.VpcPeerAlreadyExist" +// UNSUPPORTEDOPERATION_VPCPEERCIDRCONFLICT = "UnsupportedOperation.VpcPeerCidrConflict" +func (c *Client) ModifyVpcPeeringConnection(request *ModifyVpcPeeringConnectionRequest) (response *ModifyVpcPeeringConnectionResponse, err error) { + return c.ModifyVpcPeeringConnectionWithContext(context.Background(), request) +} + +// ModifyVpcPeeringConnection +// 本接口(ModifyVpcPeeringConnection)用于修改私有网络对等连接属性。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" +// INVALIDPARAMETERVALUE_DUPLICATEREGION = "InvalidParameterValue.DuplicateRegion" +// INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_VPCPEERAVALIMITEXCEEDED = "LimitExceeded.VpcPeerAvaLimitExceeded" +// LIMITEXCEEDED_VPCPEERTOTALLIMITEXCEEDED = "LimitExceeded.VpcPeerTotalLimitExceeded" +// MISSINGPARAMETER = "MissingParameter" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNAUTHORIZEDOPERATION_VPCPEERCIDRCONFLICT = "UnauthorizedOperation.VpcPeerCidrConflict" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" +// UNSUPPORTEDOPERATION_VPCPEERALREADYEXIST = "UnsupportedOperation.VpcPeerAlreadyExist" +// UNSUPPORTEDOPERATION_VPCPEERCIDRCONFLICT = "UnsupportedOperation.VpcPeerCidrConflict" +func (c *Client) ModifyVpcPeeringConnectionWithContext(ctx context.Context, request *ModifyVpcPeeringConnectionRequest) (response *ModifyVpcPeeringConnectionResponse, err error) { if request == nil { - request = NewModifyVpcEndPointServiceWhiteListRequest() + request = NewModifyVpcPeeringConnectionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpcPeeringConnection require credential") + } + request.SetContext(ctx) - response = NewModifyVpcEndPointServiceWhiteListResponse() + response = NewModifyVpcPeeringConnectionResponse() err = c.Send(request, response) return } @@ -14472,6 +18598,7 @@ func NewModifyVpnConnectionAttributeRequest() (request *ModifyVpnConnectionAttri request = &ModifyVpnConnectionAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpnConnectionAttribute") return @@ -14491,15 +18618,12 @@ func NewModifyVpnConnectionAttributeResponse() (response *ModifyVpnConnectionAtt // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" +// INVALIDPARAMETERVALUE_VPNCONNHEALTHCHECKIPCONFLICT = "InvalidParameterValue.VpnConnHealthCheckIpConflict" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_VPNCONNINVALIDSTATE = "UnsupportedOperation.VpnConnInvalidState" func (c *Client) ModifyVpnConnectionAttribute(request *ModifyVpnConnectionAttributeRequest) (response *ModifyVpnConnectionAttributeResponse, err error) { - if request == nil { - request = NewModifyVpnConnectionAttributeRequest() - } - - response = NewModifyVpnConnectionAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyVpnConnectionAttributeWithContext(context.Background(), request) } // ModifyVpnConnectionAttribute @@ -14509,11 +18633,19 @@ func (c *Client) ModifyVpnConnectionAttribute(request *ModifyVpnConnectionAttrib // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_VPNCONNCIDRCONFLICT = "InvalidParameterValue.VpnConnCidrConflict" +// INVALIDPARAMETERVALUE_VPNCONNHEALTHCHECKIPCONFLICT = "InvalidParameterValue.VpnConnHealthCheckIpConflict" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_VPNCONNINVALIDSTATE = "UnsupportedOperation.VpnConnInvalidState" func (c *Client) ModifyVpnConnectionAttributeWithContext(ctx context.Context, request *ModifyVpnConnectionAttributeRequest) (response *ModifyVpnConnectionAttributeResponse, err error) { if request == nil { request = NewModifyVpnConnectionAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpnConnectionAttribute require credential") + } + request.SetContext(ctx) response = NewModifyVpnConnectionAttributeResponse() @@ -14525,6 +18657,7 @@ func NewModifyVpnGatewayAttributeRequest() (request *ModifyVpnGatewayAttributeRe request = &ModifyVpnGatewayAttributeRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpnGatewayAttribute") return @@ -14545,14 +18678,9 @@ func NewModifyVpnGatewayAttributeResponse() (response *ModifyVpnGatewayAttribute // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyVpnGatewayAttribute(request *ModifyVpnGatewayAttributeRequest) (response *ModifyVpnGatewayAttributeResponse, err error) { - if request == nil { - request = NewModifyVpnGatewayAttributeRequest() - } - - response = NewModifyVpnGatewayAttributeResponse() - err = c.Send(request, response) - return + return c.ModifyVpnGatewayAttributeWithContext(context.Background(), request) } // ModifyVpnGatewayAttribute @@ -14563,10 +18691,16 @@ func (c *Client) ModifyVpnGatewayAttribute(request *ModifyVpnGatewayAttributeReq // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" func (c *Client) ModifyVpnGatewayAttributeWithContext(ctx context.Context, request *ModifyVpnGatewayAttributeRequest) (response *ModifyVpnGatewayAttributeResponse, err error) { if request == nil { request = NewModifyVpnGatewayAttributeRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpnGatewayAttribute require credential") + } + request.SetContext(ctx) response = NewModifyVpnGatewayAttributeResponse() @@ -14578,6 +18712,7 @@ func NewModifyVpnGatewayCcnRoutesRequest() (request *ModifyVpnGatewayCcnRoutesRe request = &ModifyVpnGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpnGatewayCcnRoutes") return @@ -14591,24 +18726,18 @@ func NewModifyVpnGatewayCcnRoutesResponse() (response *ModifyVpnGatewayCcnRoutes } // ModifyVpnGatewayCcnRoutes -// 本接口(ModifyVpnGatewayCcnRoutes)用于修改VPN网关云联网路由 +// 本接口(ModifyVpnGatewayCcnRoutes)用于修改VPN网关云联网路由。 // // 可能返回的错误码: // // INTERNALSERVERERROR = "InternalServerError" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ModifyVpnGatewayCcnRoutes(request *ModifyVpnGatewayCcnRoutesRequest) (response *ModifyVpnGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewModifyVpnGatewayCcnRoutesRequest() - } - - response = NewModifyVpnGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.ModifyVpnGatewayCcnRoutesWithContext(context.Background(), request) } // ModifyVpnGatewayCcnRoutes -// 本接口(ModifyVpnGatewayCcnRoutes)用于修改VPN网关云联网路由 +// 本接口(ModifyVpnGatewayCcnRoutes)用于修改VPN网关云联网路由。 // // 可能返回的错误码: // @@ -14618,6 +18747,11 @@ func (c *Client) ModifyVpnGatewayCcnRoutesWithContext(ctx context.Context, reque if request == nil { request = NewModifyVpnGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpnGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewModifyVpnGatewayCcnRoutesResponse() @@ -14629,6 +18763,7 @@ func NewModifyVpnGatewayRoutesRequest() (request *ModifyVpnGatewayRoutesRequest) request = &ModifyVpnGatewayRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ModifyVpnGatewayRoutes") return @@ -14642,7 +18777,7 @@ func NewModifyVpnGatewayRoutesResponse() (response *ModifyVpnGatewayRoutesRespon } // ModifyVpnGatewayRoutes -// 修改VPN路由是否启用 +// 本接口(ModifyVpnGatewayRoutes)用于修改VPN路由是否启用。 // // 可能返回的错误码: // @@ -14652,18 +18787,13 @@ func NewModifyVpnGatewayRoutesResponse() (response *ModifyVpnGatewayRoutesRespon // RESOURCEUNAVAILABLE = "ResourceUnavailable" // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) ModifyVpnGatewayRoutes(request *ModifyVpnGatewayRoutesRequest) (response *ModifyVpnGatewayRoutesResponse, err error) { - if request == nil { - request = NewModifyVpnGatewayRoutesRequest() - } - - response = NewModifyVpnGatewayRoutesResponse() - err = c.Send(request, response) - return + return c.ModifyVpnGatewayRoutesWithContext(context.Background(), request) } // ModifyVpnGatewayRoutes -// 修改VPN路由是否启用 +// 本接口(ModifyVpnGatewayRoutes)用于修改VPN路由是否启用。 // // 可能返回的错误码: // @@ -14673,10 +18803,16 @@ func (c *Client) ModifyVpnGatewayRoutes(request *ModifyVpnGatewayRoutesRequest) // RESOURCEUNAVAILABLE = "ResourceUnavailable" // UNKNOWNPARAMETER = "UnknownParameter" // UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" func (c *Client) ModifyVpnGatewayRoutesWithContext(ctx context.Context, request *ModifyVpnGatewayRoutesRequest) (response *ModifyVpnGatewayRoutesResponse, err error) { if request == nil { request = NewModifyVpnGatewayRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ModifyVpnGatewayRoutes require credential") + } + request.SetContext(ctx) response = NewModifyVpnGatewayRoutesResponse() @@ -14688,6 +18824,7 @@ func NewNotifyRoutesRequest() (request *NotifyRoutesRequest) { request = &NotifyRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "NotifyRoutes") return @@ -14701,7 +18838,7 @@ func NewNotifyRoutesResponse() (response *NotifyRoutesResponse) { } // NotifyRoutes -// 路由表列表页操作增加“发布到云联网”,用于发布路由到云联网。 +// 本接口(NotifyRoutes)用于路由表列表页操作增加“发布到云联网”,发布路由到云联网。 // // 可能返回的错误码: // @@ -14711,21 +18848,18 @@ func NewNotifyRoutesResponse() (response *NotifyRoutesResponse) { // INVALIDROUTEID_NOTFOUND = "InvalidRouteId.NotFound" // INVALIDROUTETABLEID_MALFORMED = "InvalidRouteTableId.Malformed" // INVALIDROUTETABLEID_NOTFOUND = "InvalidRouteTableId.NotFound" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_ASSOCIATEDVPCOFCCNHADNATROUTE = "UnsupportedOperation.AssociatedVpcOfCcnHadNatRoute" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" +// UNSUPPORTEDOPERATION_INVALIDSTATUSNOTIFYCCN = "UnsupportedOperation.InvalidStatusNotifyCcn" // UNSUPPORTEDOPERATION_NOTIFYCCN = "UnsupportedOperation.NotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) NotifyRoutes(request *NotifyRoutesRequest) (response *NotifyRoutesResponse, err error) { - if request == nil { - request = NewNotifyRoutesRequest() - } - - response = NewNotifyRoutesResponse() - err = c.Send(request, response) - return + return c.NotifyRoutesWithContext(context.Background(), request) } // NotifyRoutes -// 路由表列表页操作增加“发布到云联网”,用于发布路由到云联网。 +// 本接口(NotifyRoutes)用于路由表列表页操作增加“发布到云联网”,发布路由到云联网。 // // 可能返回的错误码: // @@ -14735,13 +18869,21 @@ func (c *Client) NotifyRoutes(request *NotifyRoutesRequest) (response *NotifyRou // INVALIDROUTEID_NOTFOUND = "InvalidRouteId.NotFound" // INVALIDROUTETABLEID_MALFORMED = "InvalidRouteTableId.Malformed" // INVALIDROUTETABLEID_NOTFOUND = "InvalidRouteTableId.NotFound" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_ASSOCIATEDVPCOFCCNHADNATROUTE = "UnsupportedOperation.AssociatedVpcOfCcnHadNatRoute" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" +// UNSUPPORTEDOPERATION_INVALIDSTATUSNOTIFYCCN = "UnsupportedOperation.InvalidStatusNotifyCcn" // UNSUPPORTEDOPERATION_NOTIFYCCN = "UnsupportedOperation.NotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) NotifyRoutesWithContext(ctx context.Context, request *NotifyRoutesRequest) (response *NotifyRoutesResponse, err error) { if request == nil { request = NewNotifyRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("NotifyRoutes require credential") + } + request.SetContext(ctx) response = NewNotifyRoutesResponse() @@ -14753,6 +18895,7 @@ func NewRefreshDirectConnectGatewayRouteToNatGatewayRequest() (request *RefreshD request = &RefreshDirectConnectGatewayRouteToNatGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RefreshDirectConnectGatewayRouteToNatGateway") return @@ -14775,13 +18918,7 @@ func NewRefreshDirectConnectGatewayRouteToNatGatewayResponse() (response *Refres // RESOURCENOTFOUND = "ResourceNotFound" // UNAUTHORIZEDOPERATION = "UnauthorizedOperation" func (c *Client) RefreshDirectConnectGatewayRouteToNatGateway(request *RefreshDirectConnectGatewayRouteToNatGatewayRequest) (response *RefreshDirectConnectGatewayRouteToNatGatewayResponse, err error) { - if request == nil { - request = NewRefreshDirectConnectGatewayRouteToNatGatewayRequest() - } - - response = NewRefreshDirectConnectGatewayRouteToNatGatewayResponse() - err = c.Send(request, response) - return + return c.RefreshDirectConnectGatewayRouteToNatGatewayWithContext(context.Background(), request) } // RefreshDirectConnectGatewayRouteToNatGateway @@ -14797,6 +18934,11 @@ func (c *Client) RefreshDirectConnectGatewayRouteToNatGatewayWithContext(ctx con if request == nil { request = NewRefreshDirectConnectGatewayRouteToNatGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RefreshDirectConnectGatewayRouteToNatGateway require credential") + } + request.SetContext(ctx) response = NewRefreshDirectConnectGatewayRouteToNatGatewayResponse() @@ -14808,6 +18950,7 @@ func NewRejectAttachCcnInstancesRequest() (request *RejectAttachCcnInstancesRequ request = &RejectAttachCcnInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RejectAttachCcnInstances") return @@ -14828,18 +18971,13 @@ func NewRejectAttachCcnInstancesResponse() (response *RejectAttachCcnInstancesRe // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" // UNSUPPORTEDOPERATION_NOTPENDINGCCNINSTANCE = "UnsupportedOperation.NotPendingCcnInstance" func (c *Client) RejectAttachCcnInstances(request *RejectAttachCcnInstancesRequest) (response *RejectAttachCcnInstancesResponse, err error) { - if request == nil { - request = NewRejectAttachCcnInstancesRequest() - } - - response = NewRejectAttachCcnInstancesResponse() - err = c.Send(request, response) - return + return c.RejectAttachCcnInstancesWithContext(context.Background(), request) } // RejectAttachCcnInstances @@ -14850,6 +18988,7 @@ func (c *Client) RejectAttachCcnInstances(request *RejectAttachCcnInstancesReque // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" @@ -14858,6 +18997,11 @@ func (c *Client) RejectAttachCcnInstancesWithContext(ctx context.Context, reques if request == nil { request = NewRejectAttachCcnInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RejectAttachCcnInstances require credential") + } + request.SetContext(ctx) response = NewRejectAttachCcnInstancesResponse() @@ -14865,10 +19009,68 @@ func (c *Client) RejectAttachCcnInstancesWithContext(ctx context.Context, reques return } +func NewRejectVpcPeeringConnectionRequest() (request *RejectVpcPeeringConnectionRequest) { + request = &RejectVpcPeeringConnectionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "RejectVpcPeeringConnection") + + return +} + +func NewRejectVpcPeeringConnectionResponse() (response *RejectVpcPeeringConnectionResponse) { + response = &RejectVpcPeeringConnectionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// RejectVpcPeeringConnection +// 本接口(RejectVpcPeeringConnection)用于驳回对等连接请求。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_VPCPEERINVALIDSTATECHANGE = "UnsupportedOperation.VpcPeerInvalidStateChange" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) RejectVpcPeeringConnection(request *RejectVpcPeeringConnectionRequest) (response *RejectVpcPeeringConnectionResponse, err error) { + return c.RejectVpcPeeringConnectionWithContext(context.Background(), request) +} + +// RejectVpcPeeringConnection +// 本接口(RejectVpcPeeringConnection)用于驳回对等连接请求。 +// +// 可能返回的错误码: +// +// INTERNALERROR = "InternalError" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_VPCPEERINVALIDSTATECHANGE = "UnsupportedOperation.VpcPeerInvalidStateChange" +// UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" +func (c *Client) RejectVpcPeeringConnectionWithContext(ctx context.Context, request *RejectVpcPeeringConnectionRequest) (response *RejectVpcPeeringConnectionResponse, err error) { + if request == nil { + request = NewRejectVpcPeeringConnectionRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("RejectVpcPeeringConnection require credential") + } + + request.SetContext(ctx) + + response = NewRejectVpcPeeringConnectionResponse() + err = c.Send(request, response) + return +} + func NewReleaseAddressesRequest() (request *ReleaseAddressesRequest) { request = &ReleaseAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReleaseAddresses") return @@ -14890,22 +19092,20 @@ func NewReleaseAddressesResponse() (response *ReleaseAddressesResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDADDRESSSTATE = "InvalidAddressState" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSINTERNETCHARGETYPECONFLICT = "InvalidParameterValue.AddressInternetChargeTypeConflict" -// INVALIDPARAMETERVALUE_ADDRESSNOTEIP = "InvalidParameterValue.AddressNotEIP" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_ADDRESSTYPECONFLICT = "InvalidParameterValue.AddressTypeConflict" +// LIMITEXCEEDED_ACCOUNTRETURNQUOTA = "LimitExceeded.AccountReturnQuota" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ReleaseAddresses(request *ReleaseAddressesRequest) (response *ReleaseAddressesResponse, err error) { - if request == nil { - request = NewReleaseAddressesRequest() - } - - response = NewReleaseAddressesResponse() - err = c.Send(request, response) - return + return c.ReleaseAddressesWithContext(context.Background(), request) } // ReleaseAddresses @@ -14917,18 +19117,27 @@ func (c *Client) ReleaseAddresses(request *ReleaseAddressesRequest) (response *R // // 可能返回的错误码: // +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" // INVALIDADDRESSSTATE = "InvalidAddressState" // INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" // INVALIDPARAMETERVALUE_ADDRESSINTERNETCHARGETYPECONFLICT = "InvalidParameterValue.AddressInternetChargeTypeConflict" -// INVALIDPARAMETERVALUE_ADDRESSNOTEIP = "InvalidParameterValue.AddressNotEIP" // INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// INVALIDPARAMETERVALUE_ADDRESSTYPECONFLICT = "InvalidParameterValue.AddressTypeConflict" +// LIMITEXCEEDED_ACCOUNTRETURNQUOTA = "LimitExceeded.AccountReturnQuota" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ReleaseAddressesWithContext(ctx context.Context, request *ReleaseAddressesRequest) (response *ReleaseAddressesResponse, err error) { if request == nil { request = NewReleaseAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReleaseAddresses require credential") + } + request.SetContext(ctx) response = NewReleaseAddressesResponse() @@ -14940,6 +19149,7 @@ func NewReleaseIp6AddressesBandwidthRequest() (request *ReleaseIp6AddressesBandw request = &ReleaseIp6AddressesBandwidthRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReleaseIp6AddressesBandwidth") return @@ -14966,14 +19176,9 @@ func NewReleaseIp6AddressesBandwidthResponse() (response *ReleaseIp6AddressesBan // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" func (c *Client) ReleaseIp6AddressesBandwidth(request *ReleaseIp6AddressesBandwidthRequest) (response *ReleaseIp6AddressesBandwidthResponse, err error) { - if request == nil { - request = NewReleaseIp6AddressesBandwidthRequest() - } - - response = NewReleaseIp6AddressesBandwidthResponse() - err = c.Send(request, response) - return + return c.ReleaseIp6AddressesBandwidthWithContext(context.Background(), request) } // ReleaseIp6AddressesBandwidth @@ -14990,10 +19195,16 @@ func (c *Client) ReleaseIp6AddressesBandwidth(request *ReleaseIp6AddressesBandwi // INVALIDPARAMETERVALUE_INVALIDIPV6 = "InvalidParameterValue.InvalidIpv6" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" func (c *Client) ReleaseIp6AddressesBandwidthWithContext(ctx context.Context, request *ReleaseIp6AddressesBandwidthRequest) (response *ReleaseIp6AddressesBandwidthResponse, err error) { if request == nil { request = NewReleaseIp6AddressesBandwidthRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReleaseIp6AddressesBandwidth require credential") + } + request.SetContext(ctx) response = NewReleaseIp6AddressesBandwidthResponse() @@ -15005,6 +19216,7 @@ func NewRemoveBandwidthPackageResourcesRequest() (request *RemoveBandwidthPackag request = &RemoveBandwidthPackageResourcesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RemoveBandwidthPackageResources") return @@ -15022,6 +19234,8 @@ func NewRemoveBandwidthPackageResourcesResponse() (response *RemoveBandwidthPack // // 可能返回的错误码: // +// FAILEDOPERATION_IPTYPENOTPERMIT = "FailedOperation.IpTypeNotPermit" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" @@ -15030,13 +19244,7 @@ func NewRemoveBandwidthPackageResourcesResponse() (response *RemoveBandwidthPack // UNSUPPORTEDOPERATION_BANDWIDTHPACKAGEIDNOTSUPPORTED = "UnsupportedOperation.BandwidthPackageIdNotSupported" // UNSUPPORTEDOPERATION_INVALIDRESOURCEPROTOCOL = "UnsupportedOperation.InvalidResourceProtocol" func (c *Client) RemoveBandwidthPackageResources(request *RemoveBandwidthPackageResourcesRequest) (response *RemoveBandwidthPackageResourcesResponse, err error) { - if request == nil { - request = NewRemoveBandwidthPackageResourcesRequest() - } - - response = NewRemoveBandwidthPackageResourcesResponse() - err = c.Send(request, response) - return + return c.RemoveBandwidthPackageResourcesWithContext(context.Background(), request) } // RemoveBandwidthPackageResources @@ -15044,6 +19252,8 @@ func (c *Client) RemoveBandwidthPackageResources(request *RemoveBandwidthPackage // // 可能返回的错误码: // +// FAILEDOPERATION_IPTYPENOTPERMIT = "FailedOperation.IpTypeNotPermit" +// INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGEIDMALFORMED = "InvalidParameterValue.BandwidthPackageIdMalformed" // INVALIDPARAMETERVALUE_BANDWIDTHPACKAGENOTFOUND = "InvalidParameterValue.BandwidthPackageNotFound" // INVALIDPARAMETERVALUE_RESOURCEIDMALFORMED = "InvalidParameterValue.ResourceIdMalformed" @@ -15055,6 +19265,11 @@ func (c *Client) RemoveBandwidthPackageResourcesWithContext(ctx context.Context, if request == nil { request = NewRemoveBandwidthPackageResourcesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RemoveBandwidthPackageResources require credential") + } + request.SetContext(ctx) response = NewRemoveBandwidthPackageResourcesResponse() @@ -15066,6 +19281,7 @@ func NewRemoveIp6RulesRequest() (request *RemoveIp6RulesRequest) { request = &RemoveIp6RulesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RemoveIp6Rules") return @@ -15087,14 +19303,10 @@ func NewRemoveIp6RulesResponse() (response *RemoveIp6RulesResponse) { // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IP6RULENOTFOUND = "InvalidParameterValue.Ip6RuleNotFound" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" func (c *Client) RemoveIp6Rules(request *RemoveIp6RulesRequest) (response *RemoveIp6RulesResponse, err error) { - if request == nil { - request = NewRemoveIp6RulesRequest() - } - - response = NewRemoveIp6RulesResponse() - err = c.Send(request, response) - return + return c.RemoveIp6RulesWithContext(context.Background(), request) } // RemoveIp6Rules @@ -15106,10 +19318,17 @@ func (c *Client) RemoveIp6Rules(request *RemoveIp6RulesRequest) (response *Remov // // INTERNALSERVERERROR = "InternalServerError" // INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE_IP6RULENOTFOUND = "InvalidParameterValue.Ip6RuleNotFound" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" func (c *Client) RemoveIp6RulesWithContext(ctx context.Context, request *RemoveIp6RulesRequest) (response *RemoveIp6RulesResponse, err error) { if request == nil { request = NewRemoveIp6RulesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RemoveIp6Rules require credential") + } + request.SetContext(ctx) response = NewRemoveIp6RulesResponse() @@ -15121,6 +19340,7 @@ func NewRenewAddressesRequest() (request *RenewAddressesRequest) { request = &RenewAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RenewAddresses") return @@ -15138,15 +19358,14 @@ func NewRenewAddressesResponse() (response *RenewAddressesResponse) { // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" +// INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" +// INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) RenewAddresses(request *RenewAddressesRequest) (response *RenewAddressesResponse, err error) { - if request == nil { - request = NewRenewAddressesRequest() - } - - response = NewRenewAddressesResponse() - err = c.Send(request, response) - return + return c.RenewAddressesWithContext(context.Background(), request) } // RenewAddresses @@ -15154,11 +19373,21 @@ func (c *Client) RenewAddresses(request *RenewAddressesRequest) (response *Renew // // 可能返回的错误码: // +// FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" // INVALIDADDRESSID_NOTFOUND = "InvalidAddressId.NotFound" +// INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" +// INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" +// UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" +// UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) RenewAddressesWithContext(ctx context.Context, request *RenewAddressesRequest) (response *RenewAddressesResponse, err error) { if request == nil { request = NewRenewAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RenewAddresses require credential") + } + request.SetContext(ctx) response = NewRenewAddressesResponse() @@ -15170,6 +19399,7 @@ func NewRenewVpnGatewayRequest() (request *RenewVpnGatewayRequest) { request = &RenewVpnGatewayRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "RenewVpnGateway") return @@ -15189,14 +19419,9 @@ func NewRenewVpnGatewayResponse() (response *RenewVpnGatewayResponse) { // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" func (c *Client) RenewVpnGateway(request *RenewVpnGatewayRequest) (response *RenewVpnGatewayResponse, err error) { - if request == nil { - request = NewRenewVpnGatewayRequest() - } - - response = NewRenewVpnGatewayResponse() - err = c.Send(request, response) - return + return c.RenewVpnGatewayWithContext(context.Background(), request) } // RenewVpnGateway @@ -15206,10 +19431,16 @@ func (c *Client) RenewVpnGateway(request *RenewVpnGatewayRequest) (response *Ren // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" func (c *Client) RenewVpnGatewayWithContext(ctx context.Context, request *RenewVpnGatewayRequest) (response *RenewVpnGatewayResponse, err error) { if request == nil { request = NewRenewVpnGatewayRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("RenewVpnGateway require credential") + } + request.SetContext(ctx) response = NewRenewVpnGatewayResponse() @@ -15221,6 +19452,7 @@ func NewReplaceDirectConnectGatewayCcnRoutesRequest() (request *ReplaceDirectCon request = &ReplaceDirectConnectGatewayCcnRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReplaceDirectConnectGatewayCcnRoutes") return @@ -15239,15 +19471,10 @@ func NewReplaceDirectConnectGatewayCcnRoutesResponse() (response *ReplaceDirectC // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ReplaceDirectConnectGatewayCcnRoutes(request *ReplaceDirectConnectGatewayCcnRoutesRequest) (response *ReplaceDirectConnectGatewayCcnRoutesResponse, err error) { - if request == nil { - request = NewReplaceDirectConnectGatewayCcnRoutesRequest() - } - - response = NewReplaceDirectConnectGatewayCcnRoutesResponse() - err = c.Send(request, response) - return + return c.ReplaceDirectConnectGatewayCcnRoutesWithContext(context.Background(), request) } // ReplaceDirectConnectGatewayCcnRoutes @@ -15256,11 +19483,17 @@ func (c *Client) ReplaceDirectConnectGatewayCcnRoutes(request *ReplaceDirectConn // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) ReplaceDirectConnectGatewayCcnRoutesWithContext(ctx context.Context, request *ReplaceDirectConnectGatewayCcnRoutesRequest) (response *ReplaceDirectConnectGatewayCcnRoutesResponse, err error) { if request == nil { request = NewReplaceDirectConnectGatewayCcnRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReplaceDirectConnectGatewayCcnRoutes require credential") + } + request.SetContext(ctx) response = NewReplaceDirectConnectGatewayCcnRoutesResponse() @@ -15272,6 +19505,7 @@ func NewReplaceRouteTableAssociationRequest() (request *ReplaceRouteTableAssocia request = &ReplaceRouteTableAssociationRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReplaceRouteTableAssociation") return @@ -15285,7 +19519,7 @@ func NewReplaceRouteTableAssociationResponse() (response *ReplaceRouteTableAssoc } // ReplaceRouteTableAssociation -// 本接口(ReplaceRouteTableAssociation)用于修改子网(Subnet)关联的路由表(RouteTable)。 +// 本接口(ReplaceRouteTableAssociation)用于修改子网(Subnet)关联的路由表(RouteTable)。 // // * 一个子网只能关联一个路由表。 // @@ -15295,17 +19529,11 @@ func NewReplaceRouteTableAssociationResponse() (response *ReplaceRouteTableAssoc // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" func (c *Client) ReplaceRouteTableAssociation(request *ReplaceRouteTableAssociationRequest) (response *ReplaceRouteTableAssociationResponse, err error) { - if request == nil { - request = NewReplaceRouteTableAssociationRequest() - } - - response = NewReplaceRouteTableAssociationResponse() - err = c.Send(request, response) - return + return c.ReplaceRouteTableAssociationWithContext(context.Background(), request) } // ReplaceRouteTableAssociation -// 本接口(ReplaceRouteTableAssociation)用于修改子网(Subnet)关联的路由表(RouteTable)。 +// 本接口(ReplaceRouteTableAssociation)用于修改子网(Subnet)关联的路由表(RouteTable)。 // // * 一个子网只能关联一个路由表。 // @@ -15318,6 +19546,11 @@ func (c *Client) ReplaceRouteTableAssociationWithContext(ctx context.Context, re if request == nil { request = NewReplaceRouteTableAssociationRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReplaceRouteTableAssociation require credential") + } + request.SetContext(ctx) response = NewReplaceRouteTableAssociationResponse() @@ -15329,6 +19562,7 @@ func NewReplaceRoutesRequest() (request *ReplaceRoutesRequest) { request = &ReplaceRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReplaceRoutes") return @@ -15359,15 +19593,10 @@ func NewReplaceRoutesResponse() (response *ReplaceRoutesResponse) { // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" // UNSUPPORTEDOPERATION_NORMALSUBNETNOTSUPPORTLOCALGATEWAY = "UnsupportedOperation.NormalSubnetNotSupportLocalGateway" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) ReplaceRoutes(request *ReplaceRoutesRequest) (response *ReplaceRoutesResponse, err error) { - if request == nil { - request = NewReplaceRoutesRequest() - } - - response = NewReplaceRoutesResponse() - err = c.Send(request, response) - return + return c.ReplaceRoutesWithContext(context.Background(), request) } // ReplaceRoutes @@ -15388,11 +19617,17 @@ func (c *Client) ReplaceRoutes(request *ReplaceRoutesRequest) (response *Replace // UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" // UNSUPPORTEDOPERATION_NORMALSUBNETNOTSUPPORTLOCALGATEWAY = "UnsupportedOperation.NormalSubnetNotSupportLocalGateway" +// UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) ReplaceRoutesWithContext(ctx context.Context, request *ReplaceRoutesRequest) (response *ReplaceRoutesResponse, err error) { if request == nil { request = NewReplaceRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReplaceRoutes require credential") + } + request.SetContext(ctx) response = NewReplaceRoutesResponse() @@ -15400,10 +19635,100 @@ func (c *Client) ReplaceRoutesWithContext(ctx context.Context, request *ReplaceR return } +func NewReplaceSecurityGroupPoliciesRequest() (request *ReplaceSecurityGroupPoliciesRequest) { + request = &ReplaceSecurityGroupPoliciesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ReplaceSecurityGroupPolicies") + + return +} + +func NewReplaceSecurityGroupPoliciesResponse() (response *ReplaceSecurityGroupPoliciesResponse) { + response = &ReplaceSecurityGroupPoliciesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ReplaceSecurityGroupPolicies +// 本接口(ReplaceSecurityGroupPolicies)用于批量修改安全组规则(SecurityGroupPolicy)。 +// +// 单个请求中只能替换单个方向的一条或多条规则, 必须要指定索引(PolicyIndex)。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" +// UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" +// UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" +// UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" +func (c *Client) ReplaceSecurityGroupPolicies(request *ReplaceSecurityGroupPoliciesRequest) (response *ReplaceSecurityGroupPoliciesResponse, err error) { + return c.ReplaceSecurityGroupPoliciesWithContext(context.Background(), request) +} + +// ReplaceSecurityGroupPolicies +// 本接口(ReplaceSecurityGroupPolicies)用于批量修改安全组规则(SecurityGroupPolicy)。 +// +// 单个请求中只能替换单个方向的一条或多条规则, 必须要指定索引(PolicyIndex)。 +// +// 可能返回的错误码: +// +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" +// LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" +// UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" +// UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" +// UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" +func (c *Client) ReplaceSecurityGroupPoliciesWithContext(ctx context.Context, request *ReplaceSecurityGroupPoliciesRequest) (response *ReplaceSecurityGroupPoliciesResponse, err error) { + if request == nil { + request = NewReplaceSecurityGroupPoliciesRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ReplaceSecurityGroupPolicies require credential") + } + + request.SetContext(ctx) + + response = NewReplaceSecurityGroupPoliciesResponse() + err = c.Send(request, response) + return +} + func NewReplaceSecurityGroupPolicyRequest() (request *ReplaceSecurityGroupPolicyRequest) { request = &ReplaceSecurityGroupPolicyRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ReplaceSecurityGroupPolicy") return @@ -15423,24 +19748,28 @@ func NewReplaceSecurityGroupPolicyResponse() (response *ReplaceSecurityGroupPoli // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" // UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) ReplaceSecurityGroupPolicy(request *ReplaceSecurityGroupPolicyRequest) (response *ReplaceSecurityGroupPolicyResponse, err error) { - if request == nil { - request = NewReplaceSecurityGroupPolicyRequest() - } - - response = NewReplaceSecurityGroupPolicyResponse() - err = c.Send(request, response) - return + return c.ReplaceSecurityGroupPolicyWithContext(context.Background(), request) } // ReplaceSecurityGroupPolicy @@ -15450,20 +19779,35 @@ func (c *Client) ReplaceSecurityGroupPolicy(request *ReplaceSecurityGroupPolicyR // // 可能返回的错误码: // +// INTERNALERROR_MODULEERROR = "InternalError.ModuleError" // INVALIDPARAMETER = "InvalidParameter" // INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" // INVALIDPARAMETERVALUE = "InvalidParameterValue" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" +// INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" +// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" // INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // LIMITEXCEEDED = "LimitExceeded" // RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" +// UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" // UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" // UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" +// UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" // UNSUPPORTEDOPERATION_VERSIONMISMATCH = "UnsupportedOperation.VersionMismatch" func (c *Client) ReplaceSecurityGroupPolicyWithContext(ctx context.Context, request *ReplaceSecurityGroupPolicyRequest) (response *ReplaceSecurityGroupPolicyResponse, err error) { if request == nil { request = NewReplaceSecurityGroupPolicyRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReplaceSecurityGroupPolicy require credential") + } + request.SetContext(ctx) response = NewReplaceSecurityGroupPolicyResponse() @@ -15475,6 +19819,7 @@ func NewResetAttachCcnInstancesRequest() (request *ResetAttachCcnInstancesReques request = &ResetAttachCcnInstancesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ResetAttachCcnInstances") return @@ -15492,16 +19837,11 @@ func NewResetAttachCcnInstancesResponse() (response *ResetAttachCcnInstancesResp // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ResetAttachCcnInstances(request *ResetAttachCcnInstancesRequest) (response *ResetAttachCcnInstancesResponse, err error) { - if request == nil { - request = NewResetAttachCcnInstancesRequest() - } - - response = NewResetAttachCcnInstancesResponse() - err = c.Send(request, response) - return + return c.ResetAttachCcnInstancesWithContext(context.Background(), request) } // ResetAttachCcnInstances @@ -15509,12 +19849,18 @@ func (c *Client) ResetAttachCcnInstances(request *ResetAttachCcnInstancesRequest // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" func (c *Client) ResetAttachCcnInstancesWithContext(ctx context.Context, request *ResetAttachCcnInstancesRequest) (response *ResetAttachCcnInstancesResponse, err error) { if request == nil { request = NewResetAttachCcnInstancesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetAttachCcnInstances require credential") + } + request.SetContext(ctx) response = NewResetAttachCcnInstancesResponse() @@ -15526,6 +19872,7 @@ func NewResetNatGatewayConnectionRequest() (request *ResetNatGatewayConnectionRe request = &ResetNatGatewayConnectionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ResetNatGatewayConnection") return @@ -15544,15 +19891,12 @@ func NewResetNatGatewayConnectionResponse() (response *ResetNatGatewayConnection // 可能返回的错误码: // // RESOURCEINUSE = "ResourceInUse" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ResetNatGatewayConnection(request *ResetNatGatewayConnectionRequest) (response *ResetNatGatewayConnectionResponse, err error) { - if request == nil { - request = NewResetNatGatewayConnectionRequest() - } - - response = NewResetNatGatewayConnectionResponse() - err = c.Send(request, response) - return + return c.ResetNatGatewayConnectionWithContext(context.Background(), request) } // ResetNatGatewayConnection @@ -15561,11 +19905,19 @@ func (c *Client) ResetNatGatewayConnection(request *ResetNatGatewayConnectionReq // 可能返回的错误码: // // RESOURCEINUSE = "ResourceInUse" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INSUFFICIENTFUNDS = "UnsupportedOperation.InsufficientFunds" // UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" func (c *Client) ResetNatGatewayConnectionWithContext(ctx context.Context, request *ResetNatGatewayConnectionRequest) (response *ResetNatGatewayConnectionResponse, err error) { if request == nil { request = NewResetNatGatewayConnectionRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetNatGatewayConnection require credential") + } + request.SetContext(ctx) response = NewResetNatGatewayConnectionResponse() @@ -15577,6 +19929,7 @@ func NewResetRoutesRequest() (request *ResetRoutesRequest) { request = &ResetRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ResetRoutes") return @@ -15599,19 +19952,17 @@ func NewResetRoutesResponse() (response *ResetRoutesResponse) { // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_CIDRNOTINPEERVPC = "InvalidParameterValue.CidrNotInPeerVpc" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) ResetRoutes(request *ResetRoutesRequest) (response *ResetRoutesResponse, err error) { - if request == nil { - request = NewResetRoutesRequest() - } - - response = NewResetRoutesResponse() - err = c.Send(request, response) - return + return c.ResetRoutesWithContext(context.Background(), request) } // ResetRoutes @@ -15624,8 +19975,12 @@ func (c *Client) ResetRoutes(request *ResetRoutesRequest) (response *ResetRoutes // INVALIDPARAMETERVALUE = "InvalidParameterValue" // INVALIDPARAMETERVALUE_CIDRNOTINPEERVPC = "InvalidParameterValue.CidrNotInPeerVpc" // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" // INVALIDPARAMETERVALUE_VPCCIDRCONFLICT = "InvalidParameterValue.VpcCidrConflict" // LIMITEXCEEDED = "LimitExceeded" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNKNOWNPARAMETER_WITHGUESS = "UnknownParameter.WithGuess" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ECMP = "UnsupportedOperation.Ecmp" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" @@ -15633,6 +19988,11 @@ func (c *Client) ResetRoutesWithContext(ctx context.Context, request *ResetRoute if request == nil { request = NewResetRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ResetRoutes require credential") + } + request.SetContext(ctx) response = NewResetRoutesResponse() @@ -15644,6 +20004,7 @@ func NewResetVpnConnectionRequest() (request *ResetVpnConnectionRequest) { request = &ResetVpnConnectionRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "ResetVpnConnection") return @@ -15657,91 +20018,204 @@ func NewResetVpnConnectionResponse() (response *ResetVpnConnectionResponse) { } // ResetVpnConnection -// 本接口(ResetVpnConnection)用于重置VPN通道。 +// 本接口(ResetVpnConnection)用于重置VPN通道。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_VPNCONNINVALIDSTATE = "UnsupportedOperation.VpnConnInvalidState" func (c *Client) ResetVpnConnection(request *ResetVpnConnectionRequest) (response *ResetVpnConnectionResponse, err error) { + return c.ResetVpnConnectionWithContext(context.Background(), request) +} + +// ResetVpnConnection +// 本接口(ResetVpnConnection)用于重置VPN通道。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +// UNSUPPORTEDOPERATION_VPNCONNINVALIDSTATE = "UnsupportedOperation.VpnConnInvalidState" +func (c *Client) ResetVpnConnectionWithContext(ctx context.Context, request *ResetVpnConnectionRequest) (response *ResetVpnConnectionResponse, err error) { if request == nil { request = NewResetVpnConnectionRequest() } + if c.GetCredential() == nil { + return nil, errors.New("ResetVpnConnection require credential") + } + + request.SetContext(ctx) + response = NewResetVpnConnectionResponse() err = c.Send(request, response) return } -// ResetVpnConnection -// 本接口(ResetVpnConnection)用于重置VPN通道。 +func NewResetVpnGatewayInternetMaxBandwidthRequest() (request *ResetVpnGatewayInternetMaxBandwidthRequest) { + request = &ResetVpnGatewayInternetMaxBandwidthRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ResetVpnGatewayInternetMaxBandwidth") + + return +} + +func NewResetVpnGatewayInternetMaxBandwidthResponse() (response *ResetVpnGatewayInternetMaxBandwidthResponse) { + response = &ResetVpnGatewayInternetMaxBandwidthResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ResetVpnGatewayInternetMaxBandwidth +// 本接口(ResetVpnGatewayInternetMaxBandwidth)用于调整VPN网关带宽上限。VPN网关带宽目前仅支持部分带宽范围内升降配,如【5,100】Mbps和【200,1000】Mbps,在各自带宽范围内可提升配额,跨范围提升配额和降配暂不支持,如果是包年包月VPN网关需要在有效期内。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +func (c *Client) ResetVpnGatewayInternetMaxBandwidth(request *ResetVpnGatewayInternetMaxBandwidthRequest) (response *ResetVpnGatewayInternetMaxBandwidthResponse, err error) { + return c.ResetVpnGatewayInternetMaxBandwidthWithContext(context.Background(), request) +} + +// ResetVpnGatewayInternetMaxBandwidth +// 本接口(ResetVpnGatewayInternetMaxBandwidth)用于调整VPN网关带宽上限。VPN网关带宽目前仅支持部分带宽范围内升降配,如【5,100】Mbps和【200,1000】Mbps,在各自带宽范围内可提升配额,跨范围提升配额和降配暂不支持,如果是包年包月VPN网关需要在有效期内。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" +func (c *Client) ResetVpnGatewayInternetMaxBandwidthWithContext(ctx context.Context, request *ResetVpnGatewayInternetMaxBandwidthRequest) (response *ResetVpnGatewayInternetMaxBandwidthResponse, err error) { + if request == nil { + request = NewResetVpnGatewayInternetMaxBandwidthRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ResetVpnGatewayInternetMaxBandwidth require credential") + } + + request.SetContext(ctx) + + response = NewResetVpnGatewayInternetMaxBandwidthResponse() + err = c.Send(request, response) + return +} + +func NewResumeSnapshotInstanceRequest() (request *ResumeSnapshotInstanceRequest) { + request = &ResumeSnapshotInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "ResumeSnapshotInstance") + + return +} + +func NewResumeSnapshotInstanceResponse() (response *ResumeSnapshotInstanceResponse) { + response = &ResumeSnapshotInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// ResumeSnapshotInstance +// 本接口(ResumeSnapshotInstance)用于根据备份内容恢复安全组策略。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +func (c *Client) ResumeSnapshotInstance(request *ResumeSnapshotInstanceRequest) (response *ResumeSnapshotInstanceResponse, err error) { + return c.ResumeSnapshotInstanceWithContext(context.Background(), request) +} + +// ResumeSnapshotInstance +// 本接口(ResumeSnapshotInstance)用于根据备份内容恢复安全组策略。 // // 可能返回的错误码: // // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCENOTFOUND = "ResourceNotFound" -func (c *Client) ResetVpnConnectionWithContext(ctx context.Context, request *ResetVpnConnectionRequest) (response *ResetVpnConnectionResponse, err error) { +func (c *Client) ResumeSnapshotInstanceWithContext(ctx context.Context, request *ResumeSnapshotInstanceRequest) (response *ResumeSnapshotInstanceResponse, err error) { if request == nil { - request = NewResetVpnConnectionRequest() + request = NewResumeSnapshotInstanceRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("ResumeSnapshotInstance require credential") } + request.SetContext(ctx) - response = NewResetVpnConnectionResponse() + response = NewResumeSnapshotInstanceResponse() err = c.Send(request, response) return } -func NewResetVpnGatewayInternetMaxBandwidthRequest() (request *ResetVpnGatewayInternetMaxBandwidthRequest) { - request = &ResetVpnGatewayInternetMaxBandwidthRequest{ +func NewReturnNormalAddressesRequest() (request *ReturnNormalAddressesRequest) { + request = &ReturnNormalAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } - request.Init().WithApiInfo("vpc", APIVersion, "ResetVpnGatewayInternetMaxBandwidth") + + request.Init().WithApiInfo("vpc", APIVersion, "ReturnNormalAddresses") return } -func NewResetVpnGatewayInternetMaxBandwidthResponse() (response *ResetVpnGatewayInternetMaxBandwidthResponse) { - response = &ResetVpnGatewayInternetMaxBandwidthResponse{ +func NewReturnNormalAddressesResponse() (response *ReturnNormalAddressesResponse) { + response = &ReturnNormalAddressesResponse{ BaseResponse: &tchttp.BaseResponse{}, } return } -// ResetVpnGatewayInternetMaxBandwidth -// 本接口(ResetVpnGatewayInternetMaxBandwidth)调整VPN网关带宽上限。目前支持升级配置,如果是包年包月VPN网关需要在有效期内。 +// ReturnNormalAddresses +// 本接口(ReturnNormalAddresses)用于解绑并释放普通公网IP。 +// +// 为完善公网IP的访问管理功能,此接口于2022年12月15日升级优化鉴权功能,升级后子用户调用此接口需向主账号申请CAM策略授权,否则可能调用失败。您可以提前为子账号配置操作授权,详情见[授权指南](https://cloud.tencent.com/document/product/598/34545)。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" -func (c *Client) ResetVpnGatewayInternetMaxBandwidth(request *ResetVpnGatewayInternetMaxBandwidthRequest) (response *ResetVpnGatewayInternetMaxBandwidthResponse, err error) { - if request == nil { - request = NewResetVpnGatewayInternetMaxBandwidthRequest() - } - - response = NewResetVpnGatewayInternetMaxBandwidthResponse() - err = c.Send(request, response) - return +// INVALIDPARAMETERVALUE_ADDRESSIPSNOTFOUND = "InvalidParameterValue.AddressIpsNotFound" +// INVALIDPARAMETERVALUE_ILLEGAL = "InvalidParameterValue.Illegal" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDADDRESSIPSCHARGETYPE = "UnsupportedOperation.NotSupportedAddressIpsChargeType" +func (c *Client) ReturnNormalAddresses(request *ReturnNormalAddressesRequest) (response *ReturnNormalAddressesResponse, err error) { + return c.ReturnNormalAddressesWithContext(context.Background(), request) } -// ResetVpnGatewayInternetMaxBandwidth -// 本接口(ResetVpnGatewayInternetMaxBandwidth)调整VPN网关带宽上限。目前支持升级配置,如果是包年包月VPN网关需要在有效期内。 +// ReturnNormalAddresses +// 本接口(ReturnNormalAddresses)用于解绑并释放普通公网IP。 +// +// 为完善公网IP的访问管理功能,此接口于2022年12月15日升级优化鉴权功能,升级后子用户调用此接口需向主账号申请CAM策略授权,否则可能调用失败。您可以提前为子账号配置操作授权,详情见[授权指南](https://cloud.tencent.com/document/product/598/34545)。 // // 可能返回的错误码: // -// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" -// RESOURCENOTFOUND = "ResourceNotFound" -// UNSUPPORTEDOPERATION = "UnsupportedOperation" -// UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" -func (c *Client) ResetVpnGatewayInternetMaxBandwidthWithContext(ctx context.Context, request *ResetVpnGatewayInternetMaxBandwidthRequest) (response *ResetVpnGatewayInternetMaxBandwidthResponse, err error) { +// INVALIDPARAMETERVALUE_ADDRESSIPSNOTFOUND = "InvalidParameterValue.AddressIpsNotFound" +// INVALIDPARAMETERVALUE_ILLEGAL = "InvalidParameterValue.Illegal" +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// UNSUPPORTEDOPERATION_NOTSUPPORTEDADDRESSIPSCHARGETYPE = "UnsupportedOperation.NotSupportedAddressIpsChargeType" +func (c *Client) ReturnNormalAddressesWithContext(ctx context.Context, request *ReturnNormalAddressesRequest) (response *ReturnNormalAddressesResponse, err error) { if request == nil { - request = NewResetVpnGatewayInternetMaxBandwidthRequest() + request = NewReturnNormalAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("ReturnNormalAddresses require credential") + } + request.SetContext(ctx) - response = NewResetVpnGatewayInternetMaxBandwidthResponse() + response = NewReturnNormalAddressesResponse() err = c.Send(request, response) return } @@ -15750,6 +20224,7 @@ func NewSetCcnRegionBandwidthLimitsRequest() (request *SetCcnRegionBandwidthLimi request = &SetCcnRegionBandwidthLimitsRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "SetCcnRegionBandwidthLimits") return @@ -15771,13 +20246,7 @@ func NewSetCcnRegionBandwidthLimitsResponse() (response *SetCcnRegionBandwidthLi // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_NOTPOSTPAIDCCNOPERATION = "UnsupportedOperation.NotPostpaidCcnOperation" func (c *Client) SetCcnRegionBandwidthLimits(request *SetCcnRegionBandwidthLimitsRequest) (response *SetCcnRegionBandwidthLimitsResponse, err error) { - if request == nil { - request = NewSetCcnRegionBandwidthLimitsRequest() - } - - response = NewSetCcnRegionBandwidthLimitsResponse() - err = c.Send(request, response) - return + return c.SetCcnRegionBandwidthLimitsWithContext(context.Background(), request) } // SetCcnRegionBandwidthLimits @@ -15792,6 +20261,11 @@ func (c *Client) SetCcnRegionBandwidthLimitsWithContext(ctx context.Context, req if request == nil { request = NewSetCcnRegionBandwidthLimitsRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("SetCcnRegionBandwidthLimits require credential") + } + request.SetContext(ctx) response = NewSetCcnRegionBandwidthLimitsResponse() @@ -15799,10 +20273,68 @@ func (c *Client) SetCcnRegionBandwidthLimitsWithContext(ctx context.Context, req return } +func NewSetVpnGatewaysRenewFlagRequest() (request *SetVpnGatewaysRenewFlagRequest) { + request = &SetVpnGatewaysRenewFlagRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "SetVpnGatewaysRenewFlag") + + return +} + +func NewSetVpnGatewaysRenewFlagResponse() (response *SetVpnGatewaysRenewFlagResponse) { + response = &SetVpnGatewaysRenewFlagResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// SetVpnGatewaysRenewFlag +// 本接口(SetVpnGatewaysRenewFlag)用于设置VPNGW续费标记。 +// +// 可能返回的错误码: +// +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) SetVpnGatewaysRenewFlag(request *SetVpnGatewaysRenewFlagRequest) (response *SetVpnGatewaysRenewFlagResponse, err error) { + return c.SetVpnGatewaysRenewFlagWithContext(context.Background(), request) +} + +// SetVpnGatewaysRenewFlag +// 本接口(SetVpnGatewaysRenewFlag)用于设置VPNGW续费标记。 +// +// 可能返回的错误码: +// +// INTERNALSERVERERROR = "InternalServerError" +// INVALIDPARAMETER = "InvalidParameter" +// INVALIDPARAMETERVALUE = "InvalidParameterValue" +// UNAUTHORIZEDOPERATION = "UnauthorizedOperation" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) SetVpnGatewaysRenewFlagWithContext(ctx context.Context, request *SetVpnGatewaysRenewFlagRequest) (response *SetVpnGatewaysRenewFlagResponse, err error) { + if request == nil { + request = NewSetVpnGatewaysRenewFlagRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("SetVpnGatewaysRenewFlag require credential") + } + + request.SetContext(ctx) + + response = NewSetVpnGatewaysRenewFlagResponse() + err = c.Send(request, response) + return +} + func NewTransformAddressRequest() (request *TransformAddressRequest) { request = &TransformAddressRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "TransformAddress") return @@ -15824,22 +20356,22 @@ func NewTransformAddressResponse() (response *TransformAddressResponse) { // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_ALREADYBINDEIP = "InvalidInstanceId.AlreadyBindEip" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_INVALIDINSTANCESTATE = "InvalidParameterValue.InvalidInstanceState" +// LIMITEXCEEDED_MONTHLYADDRESSRECOVERYQUOTA = "LimitExceeded.MonthlyAddressRecoveryQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" func (c *Client) TransformAddress(request *TransformAddressRequest) (response *TransformAddressResponse, err error) { - if request == nil { - request = NewTransformAddressRequest() - } - - response = NewTransformAddressResponse() - err = c.Send(request, response) - return + return c.TransformAddressWithContext(context.Background(), request) } // TransformAddress @@ -15851,18 +20383,29 @@ func (c *Client) TransformAddress(request *TransformAddressRequest) (response *T // // ADDRESSQUOTALIMITEXCEEDED = "AddressQuotaLimitExceeded" // ADDRESSQUOTALIMITEXCEEDED_DAILYALLOCATE = "AddressQuotaLimitExceeded.DailyAllocate" +// FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" // INVALIDADDRESSID_BLOCKED = "InvalidAddressId.Blocked" // INVALIDINSTANCE_NOTSUPPORTED = "InvalidInstance.NotSupported" // INVALIDINSTANCEID_ALREADYBINDEIP = "InvalidInstanceId.AlreadyBindEip" // INVALIDINSTANCEID_NOTFOUND = "InvalidInstanceId.NotFound" +// INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" +// INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" // INVALIDPARAMETERVALUE_INSTANCENOWANIP = "InvalidParameterValue.InstanceNoWanIP" // INVALIDPARAMETERVALUE_INVALIDINSTANCESTATE = "InvalidParameterValue.InvalidInstanceState" +// LIMITEXCEEDED_MONTHLYADDRESSRECOVERYQUOTA = "LimitExceeded.MonthlyAddressRecoveryQuota" +// OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" +// OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" // UNSUPPORTEDOPERATION_ADDRESSSTATUSNOTPERMIT = "UnsupportedOperation.AddressStatusNotPermit" // UNSUPPORTEDOPERATION_INVALIDADDRESSINTERNETCHARGETYPE = "UnsupportedOperation.InvalidAddressInternetChargeType" func (c *Client) TransformAddressWithContext(ctx context.Context, request *TransformAddressRequest) (response *TransformAddressResponse, err error) { if request == nil { request = NewTransformAddressRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("TransformAddress require credential") + } + request.SetContext(ctx) response = NewTransformAddressResponse() @@ -15874,6 +20417,7 @@ func NewUnassignIpv6AddressesRequest() (request *UnassignIpv6AddressesRequest) { request = &UnassignIpv6AddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "UnassignIpv6Addresses") return @@ -15901,13 +20445,7 @@ func NewUnassignIpv6AddressesResponse() (response *UnassignIpv6AddressesResponse // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) UnassignIpv6Addresses(request *UnassignIpv6AddressesRequest) (response *UnassignIpv6AddressesResponse, err error) { - if request == nil { - request = NewUnassignIpv6AddressesRequest() - } - - response = NewUnassignIpv6AddressesResponse() - err = c.Send(request, response) - return + return c.UnassignIpv6AddressesWithContext(context.Background(), request) } // UnassignIpv6Addresses @@ -15928,6 +20466,11 @@ func (c *Client) UnassignIpv6AddressesWithContext(ctx context.Context, request * if request == nil { request = NewUnassignIpv6AddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UnassignIpv6Addresses require credential") + } + request.SetContext(ctx) response = NewUnassignIpv6AddressesResponse() @@ -15939,6 +20482,7 @@ func NewUnassignIpv6CidrBlockRequest() (request *UnassignIpv6CidrBlockRequest) { request = &UnassignIpv6CidrBlockRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "UnassignIpv6CidrBlock") return @@ -15958,16 +20502,11 @@ func NewUnassignIpv6CidrBlockResponse() (response *UnassignIpv6CidrBlockResponse // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) UnassignIpv6CidrBlock(request *UnassignIpv6CidrBlockRequest) (response *UnassignIpv6CidrBlockResponse, err error) { - if request == nil { - request = NewUnassignIpv6CidrBlockRequest() - } - - response = NewUnassignIpv6CidrBlockResponse() - err = c.Send(request, response) - return + return c.UnassignIpv6CidrBlockWithContext(context.Background(), request) } // UnassignIpv6CidrBlock @@ -15977,12 +20516,18 @@ func (c *Client) UnassignIpv6CidrBlock(request *UnassignIpv6CidrBlockRequest) (r // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) UnassignIpv6CidrBlockWithContext(ctx context.Context, request *UnassignIpv6CidrBlockRequest) (response *UnassignIpv6CidrBlockResponse, err error) { if request == nil { request = NewUnassignIpv6CidrBlockRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UnassignIpv6CidrBlock require credential") + } + request.SetContext(ctx) response = NewUnassignIpv6CidrBlockResponse() @@ -15994,6 +20539,7 @@ func NewUnassignIpv6SubnetCidrBlockRequest() (request *UnassignIpv6SubnetCidrBlo request = &UnassignIpv6SubnetCidrBlockRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "UnassignIpv6SubnetCidrBlock") return @@ -16014,16 +20560,11 @@ func NewUnassignIpv6SubnetCidrBlockResponse() (response *UnassignIpv6SubnetCidrB // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) UnassignIpv6SubnetCidrBlock(request *UnassignIpv6SubnetCidrBlockRequest) (response *UnassignIpv6SubnetCidrBlockResponse, err error) { - if request == nil { - request = NewUnassignIpv6SubnetCidrBlockRequest() - } - - response = NewUnassignIpv6SubnetCidrBlockResponse() - err = c.Send(request, response) - return + return c.UnassignIpv6SubnetCidrBlockWithContext(context.Background(), request) } // UnassignIpv6SubnetCidrBlock @@ -16034,12 +20575,18 @@ func (c *Client) UnassignIpv6SubnetCidrBlock(request *UnassignIpv6SubnetCidrBloc // 可能返回的错误码: // // INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" // RESOURCEINUSE = "ResourceInUse" // RESOURCENOTFOUND = "ResourceNotFound" func (c *Client) UnassignIpv6SubnetCidrBlockWithContext(ctx context.Context, request *UnassignIpv6SubnetCidrBlockRequest) (response *UnassignIpv6SubnetCidrBlockResponse, err error) { if request == nil { request = NewUnassignIpv6SubnetCidrBlockRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UnassignIpv6SubnetCidrBlock require credential") + } + request.SetContext(ctx) response = NewUnassignIpv6SubnetCidrBlockResponse() @@ -16051,6 +20598,7 @@ func NewUnassignPrivateIpAddressesRequest() (request *UnassignPrivateIpAddresses request = &UnassignPrivateIpAddressesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "UnassignPrivateIpAddresses") return @@ -16072,21 +20620,17 @@ func NewUnassignPrivateIpAddressesResponse() (response *UnassignPrivateIpAddress // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" // UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" // UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" func (c *Client) UnassignPrivateIpAddresses(request *UnassignPrivateIpAddressesRequest) (response *UnassignPrivateIpAddressesResponse, err error) { - if request == nil { - request = NewUnassignPrivateIpAddressesRequest() - } - - response = NewUnassignPrivateIpAddressesResponse() - err = c.Send(request, response) - return + return c.UnassignPrivateIpAddressesWithContext(context.Background(), request) } // UnassignPrivateIpAddresses @@ -16098,8 +20642,10 @@ func (c *Client) UnassignPrivateIpAddresses(request *UnassignPrivateIpAddressesR // // 可能返回的错误码: // +// INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" // INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" // INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" // RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION = "UnsupportedOperation" // UNSUPPORTEDOPERATION_ATTACHMENTNOTFOUND = "UnsupportedOperation.AttachmentNotFound" @@ -16109,6 +20655,11 @@ func (c *Client) UnassignPrivateIpAddressesWithContext(ctx context.Context, requ if request == nil { request = NewUnassignPrivateIpAddressesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("UnassignPrivateIpAddresses require credential") + } + request.SetContext(ctx) response = NewUnassignPrivateIpAddressesResponse() @@ -16116,10 +20667,139 @@ func (c *Client) UnassignPrivateIpAddressesWithContext(ctx context.Context, requ return } +func NewUnlockCcnBandwidthsRequest() (request *UnlockCcnBandwidthsRequest) { + request = &UnlockCcnBandwidthsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "UnlockCcnBandwidths") + + return +} + +func NewUnlockCcnBandwidthsResponse() (response *UnlockCcnBandwidthsResponse) { + response = &UnlockCcnBandwidthsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// UnlockCcnBandwidths +// 本接口(UnlockCcnBandwidths)用户解锁云联网限速实例。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(SecurityUnlockCcns)。 +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) UnlockCcnBandwidths(request *UnlockCcnBandwidthsRequest) (response *UnlockCcnBandwidthsResponse, err error) { + return c.UnlockCcnBandwidthsWithContext(context.Background(), request) +} + +// UnlockCcnBandwidths +// 本接口(UnlockCcnBandwidths)用户解锁云联网限速实例。 +// +// 该接口一般用来封禁地域间限速的云联网实例下的限速实例, 目前联通内部运营系统通过云API调用, 如果是出口限速, 一般使用更粗的云联网实例粒度封禁(SecurityUnlockCcns)。 +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统。 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +// UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" +func (c *Client) UnlockCcnBandwidthsWithContext(ctx context.Context, request *UnlockCcnBandwidthsRequest) (response *UnlockCcnBandwidthsResponse, err error) { + if request == nil { + request = NewUnlockCcnBandwidthsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("UnlockCcnBandwidths require credential") + } + + request.SetContext(ctx) + + response = NewUnlockCcnBandwidthsResponse() + err = c.Send(request, response) + return +} + +func NewUnlockCcnsRequest() (request *UnlockCcnsRequest) { + request = &UnlockCcnsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + + request.Init().WithApiInfo("vpc", APIVersion, "UnlockCcns") + + return +} + +func NewUnlockCcnsResponse() (response *UnlockCcnsResponse) { + response = &UnlockCcnsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// UnlockCcns +// 本接口(UnlockCcns)用于解锁云联网实例 +// +// 该接口一般用来解封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间解封禁, 只能按更粗的云联网实例粒度解封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度解封禁(UnlockCcnBandwidths) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) UnlockCcns(request *UnlockCcnsRequest) (response *UnlockCcnsResponse, err error) { + return c.UnlockCcnsWithContext(context.Background(), request) +} + +// UnlockCcns +// 本接口(UnlockCcns)用于解锁云联网实例 +// +// 该接口一般用来解封禁出口限速的云联网实例, 目前联通内部运营系统通过云API调用, 因为出口限速无法按地域间解封禁, 只能按更粗的云联网实例粒度解封禁, 如果是地域间限速, 一般可以通过更细的限速实例粒度解封禁(UnlockCcnBandwidths) +// +// 如有需要, 可以封禁任意限速实例, 可接入到内部运营系统 +// +// 可能返回的错误码: +// +// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded" +// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" +// RESOURCENOTFOUND = "ResourceNotFound" +// UNSUPPORTEDOPERATION = "UnsupportedOperation" +func (c *Client) UnlockCcnsWithContext(ctx context.Context, request *UnlockCcnsRequest) (response *UnlockCcnsResponse, err error) { + if request == nil { + request = NewUnlockCcnsRequest() + } + + if c.GetCredential() == nil { + return nil, errors.New("UnlockCcns require credential") + } + + request.SetContext(ctx) + + response = NewUnlockCcnsResponse() + err = c.Send(request, response) + return +} + func NewWithdrawNotifyRoutesRequest() (request *WithdrawNotifyRoutesRequest) { request = &WithdrawNotifyRoutesRequest{ BaseRequest: &tchttp.BaseRequest{}, } + request.Init().WithApiInfo("vpc", APIVersion, "WithdrawNotifyRoutes") return @@ -16133,7 +20813,7 @@ func NewWithdrawNotifyRoutesResponse() (response *WithdrawNotifyRoutesResponse) } // WithdrawNotifyRoutes -// 路由表列表页操作增加“从云联网撤销”,用于撤销已发布到云联网的路由。 +// 本接口(WithdrawNotifyRoutes)用于撤销已发布到云联网的路由。路由表列表页操作增加“从云联网撤销”。 // // 可能返回的错误码: // @@ -16143,20 +20823,15 @@ func NewWithdrawNotifyRoutesResponse() (response *WithdrawNotifyRoutesResponse) // INVALIDROUTEID_NOTFOUND = "InvalidRouteId.NotFound" // INVALIDROUTETABLEID_MALFORMED = "InvalidRouteTableId.Malformed" // INVALIDROUTETABLEID_NOTFOUND = "InvalidRouteTableId.NotFound" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_NOTIFYCCN = "UnsupportedOperation.NotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) WithdrawNotifyRoutes(request *WithdrawNotifyRoutesRequest) (response *WithdrawNotifyRoutesResponse, err error) { - if request == nil { - request = NewWithdrawNotifyRoutesRequest() - } - - response = NewWithdrawNotifyRoutesResponse() - err = c.Send(request, response) - return + return c.WithdrawNotifyRoutesWithContext(context.Background(), request) } // WithdrawNotifyRoutes -// 路由表列表页操作增加“从云联网撤销”,用于撤销已发布到云联网的路由。 +// 本接口(WithdrawNotifyRoutes)用于撤销已发布到云联网的路由。路由表列表页操作增加“从云联网撤销”。 // // 可能返回的错误码: // @@ -16166,12 +20841,18 @@ func (c *Client) WithdrawNotifyRoutes(request *WithdrawNotifyRoutesRequest) (res // INVALIDROUTEID_NOTFOUND = "InvalidRouteId.NotFound" // INVALIDROUTETABLEID_MALFORMED = "InvalidRouteTableId.Malformed" // INVALIDROUTETABLEID_NOTFOUND = "InvalidRouteTableId.NotFound" +// RESOURCENOTFOUND = "ResourceNotFound" // UNSUPPORTEDOPERATION_NOTIFYCCN = "UnsupportedOperation.NotifyCcn" // UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" func (c *Client) WithdrawNotifyRoutesWithContext(ctx context.Context, request *WithdrawNotifyRoutesRequest) (response *WithdrawNotifyRoutesResponse, err error) { if request == nil { request = NewWithdrawNotifyRoutesRequest() } + + if c.GetCredential() == nil { + return nil, errors.New("WithdrawNotifyRoutes require credential") + } + request.SetContext(ctx) response = NewWithdrawNotifyRoutesResponse() diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/errors.go similarity index 56% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/errors.go index 6de3eefd77a7..41cf3286966a 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -31,9 +31,33 @@ const ( // 地址没有弹性网卡信息。 FAILEDOPERATION_ADDRESSENIINFONOTFOUND = "FailedOperation.AddressEniInfoNotFound" + // 账户余额不足。 + FAILEDOPERATION_BALANCEINSUFFICIENT = "FailedOperation.BalanceInsufficient" + + // 不支持的地域。 + FAILEDOPERATION_INVALIDREGION = "FailedOperation.InvalidRegion" + + // 不支持的IP类型。 + FAILEDOPERATION_IPTYPENOTPERMIT = "FailedOperation.IpTypeNotPermit" + + // 未找到实例的主网卡。 + FAILEDOPERATION_MASTERENINOTFOUND = "FailedOperation.MasterEniNotFound" + + // 网络探测超时,请稍后重试。 + FAILEDOPERATION_NETDETECTTIMEOUT = "FailedOperation.NetDetectTimeOut" + + // 任务执行失败。 + FAILEDOPERATION_TASKFAILED = "FailedOperation.TaskFailed" + // 内部错误。 INTERNALERROR = "InternalError" + // 创建Ckafka路由失败,请稍后重试。 + INTERNALERROR_CREATECKAFKAROUTEERROR = "InternalError.CreateCkafkaRouteError" + + // 内部模块错误。 + INTERNALERROR_MODULEERROR = "InternalError.ModuleError" + // 操作内部错误。 INTERNALSERVERERROR = "InternalServerError" @@ -70,6 +94,9 @@ const ( // 参数错误。 INVALIDPARAMETER = "InvalidParameter" + // ACL ID与ACL类型不匹配。 + INVALIDPARAMETER_ACLTYPEMISMATCH = "InvalidParameter.AclTypeMismatch" + // 参数不支持同时指定。 INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist" @@ -97,6 +124,9 @@ const ( // 参数取值错误。 INVALIDPARAMETERVALUE = "InvalidParameterValue" + // 被攻击的IP地址。 + INVALIDPARAMETERVALUE_ADDRESSATTACKED = "InvalidParameterValue.AddressAttacked" + // 该地址ID不合法。 INVALIDPARAMETERVALUE_ADDRESSIDMALFORMED = "InvalidParameterValue.AddressIdMalformed" @@ -112,21 +142,27 @@ const ( // VPC中不存在此IP地址。 INVALIDPARAMETERVALUE_ADDRESSIPNOTINVPC = "InvalidParameterValue.AddressIpNotInVpc" + // 此IPv6地址未发布。 + INVALIDPARAMETERVALUE_ADDRESSIPNOTPUBLIC = "InvalidParameterValue.AddressIpNotPublic" + + // 未查询到该地址。 + INVALIDPARAMETERVALUE_ADDRESSIPSNOTFOUND = "InvalidParameterValue.AddressIpsNotFound" + // 该地址不可与此实例申请。 INVALIDPARAMETERVALUE_ADDRESSNOTAPPLICABLE = "InvalidParameterValue.AddressNotApplicable" // 该地址不是CalcIP。 INVALIDPARAMETERVALUE_ADDRESSNOTCALCIP = "InvalidParameterValue.AddressNotCalcIP" - // 该地址不是EIP。 - INVALIDPARAMETERVALUE_ADDRESSNOTEIP = "InvalidParameterValue.AddressNotEIP" - // 未找到该地址。 INVALIDPARAMETERVALUE_ADDRESSNOTFOUND = "InvalidParameterValue.AddressNotFound" // 该IPv6地址已经发布。 INVALIDPARAMETERVALUE_ADDRESSPUBLISHED = "InvalidParameterValue.AddressPublished" + // 当前IP地址类型不正确。 + INVALIDPARAMETERVALUE_ADDRESSTYPECONFLICT = "InvalidParameterValue.AddressTypeConflict" + // 带宽超出限制。 INVALIDPARAMETERVALUE_BANDWIDTHOUTOFRANGE = "InvalidParameterValue.BandwidthOutOfRange" @@ -148,27 +184,51 @@ const ( // 目的网段不在对端VPC的CIDR范围内。 INVALIDPARAMETERVALUE_CIDRNOTINPEERVPC = "InvalidParameterValue.CidrNotInPeerVpc" + // 指定CIDR不在SSL-VPN所属私有网络CIDR内。 + INVALIDPARAMETERVALUE_CIDRNOTINSSLVPNVPC = "InvalidParameterValue.CidrNotInSslVpnVpc" + // 非法入参组合。 INVALIDPARAMETERVALUE_COMBINATION = "InvalidParameterValue.Combination" // 入参重复。 INVALIDPARAMETERVALUE_DUPLICATE = "InvalidParameterValue.Duplicate" + // 参数值存在重复。 + INVALIDPARAMETERVALUE_DUPLICATEPARA = "InvalidParameterValue.DuplicatePara" + + // 本端地域和端地域重复。 + INVALIDPARAMETERVALUE_DUPLICATEREGION = "InvalidParameterValue.DuplicateRegion" + + // 值超过上限。 + INVALIDPARAMETERVALUE_EIPBRANDWIDTHOUTINVALID = "InvalidParameterValue.EIPBrandWidthOutInvalid" + // 缺少参数。 INVALIDPARAMETERVALUE_EMPTY = "InvalidParameterValue.Empty" + // IPv6转换实例ID已经存在。 + INVALIDPARAMETERVALUE_IPV6RULEIDEXISTED = "InvalidParameterValue.IPv6RuleIdExisted" + // IPv6规则没有更改。 INVALIDPARAMETERVALUE_IPV6RULENOTCHANGE = "InvalidParameterValue.IPv6RuleNotChange" + // 资源格式错误 + INVALIDPARAMETERVALUE_ILLEGAL = "InvalidParameterValue.Illegal" + // 该实例的计费方式与其他实例不同。 INVALIDPARAMETERVALUE_INCONSISTENTINSTANCEINTERNETCHARGETYPE = "InvalidParameterValue.InconsistentInstanceInternetChargeType" // 该实例不支持AnycastEIP。 INVALIDPARAMETERVALUE_INSTANCEDOESNOTSUPPORTANYCAST = "InvalidParameterValue.InstanceDoesNotSupportAnycast" + // 实例不存在公网IP。 + INVALIDPARAMETERVALUE_INSTANCEHASNOWANIP = "InvalidParameterValue.InstanceHasNoWanIP" + // 该实例已有WanIP。 INVALIDPARAMETERVALUE_INSTANCEHASWANIP = "InvalidParameterValue.InstanceHasWanIP" + // 实例ID错误。 + INVALIDPARAMETERVALUE_INSTANCEIDMALFORMED = "InvalidParameterValue.InstanceIdMalformed" + // 该实例没有CalcIP,无法完成请求。 INVALIDPARAMETERVALUE_INSTANCENOCALCIP = "InvalidParameterValue.InstanceNoCalcIP" @@ -205,6 +265,12 @@ const ( // 该Tag不合法。 INVALIDPARAMETERVALUE_INVALIDTAG = "InvalidParameterValue.InvalidTag" + // 未查询到该IPv6规则。 + INVALIDPARAMETERVALUE_IP6RULENOTFOUND = "InvalidParameterValue.Ip6RuleNotFound" + + // 未查询到该IPv6翻译器。 + INVALIDPARAMETERVALUE_IP6TRANSLATORNOTFOUND = "InvalidParameterValue.Ip6TranslatorNotFound" + // 负载均衡实例已经绑定了EIP。 INVALIDPARAMETERVALUE_LBALREADYBINDEIP = "InvalidParameterValue.LBAlreadyBindEip" @@ -214,12 +280,39 @@ const ( // 入参格式不合法。 INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed" + // 指定审批单号和资源不匹配。 + INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONIDMISMATCH = "InvalidParameterValue.MemberApprovalApplicationIdMismatch" + + // 流程服务审批单未审批。 + INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONNOTAPPROVED = "InvalidParameterValue.MemberApprovalApplicationNotApproved" + + // 流程服务审批单被拒绝。 + INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONREJECTED = "InvalidParameterValue.MemberApprovalApplicationRejected" + + // 该请求需要走BPAAS流程服务审批,当前发起审批中。 + INVALIDPARAMETERVALUE_MEMBERAPPROVALAPPLICATIONSTARTED = "InvalidParameterValue.MemberApprovalApplicationStarted" + // 缺少绑定的实例。 INVALIDPARAMETERVALUE_MISSINGASSOCIATEENTITY = "InvalidParameterValue.MissingAssociateEntity" // 集群类型不同的IP不可在同一请求中。 INVALIDPARAMETERVALUE_MIXEDADDRESSIPSETTYPE = "InvalidParameterValue.MixedAddressIpSetType" + // NAT网关的DNAT转换规则已存在。 + INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEEXISTED = "InvalidParameterValue.NatGatewayDnatRuleExisted" + + // NAT网关的DNAT转换规则不存在。 + INVALIDPARAMETERVALUE_NATGATEWAYDNATRULENOTEXISTS = "InvalidParameterValue.NatGatewayDnatRuleNotExists" + + // DNAT转换规则的内网IP需为虚拟机上网卡所用的IP。 + INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEPIPNEEDVM = "InvalidParameterValue.NatGatewayDnatRulePipNeedVm" + + // 新增NAT网关的DNAT转换规则已重复。 + INVALIDPARAMETERVALUE_NATGATEWAYDNATRULEREPEATED = "InvalidParameterValue.NatGatewayDnatRuleRepeated" + + // NAT网关的SNAT转换规则不存在。 + INVALIDPARAMETERVALUE_NATGATEWAYSNATRULENOTEXISTS = "InvalidParameterValue.NatGatewaySnatRuleNotExists" + // NAT网关的SNAT规则已经存在。 INVALIDPARAMETERVALUE_NATSNATRULEEXISTS = "InvalidParameterValue.NatSnatRuleExists" @@ -241,6 +334,9 @@ const ( // 该操作仅对主网卡支持。 INVALIDPARAMETERVALUE_ONLYSUPPORTEDFORMASTERNETWORKCARD = "InvalidParameterValue.OnlySupportedForMasterNetworkCard" + // 参数值格式不匹配。 + INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch" + // 参数值不在指定范围。 INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range" @@ -265,21 +361,75 @@ const ( // 该资源不支持此操作。 INVALIDPARAMETERVALUE_RESOURCENOTSUPPORT = "InvalidParameterValue.ResourceNotSupport" + // SSL-VPN-SERVER 云端网段和SSL-VPN-SERVER 客户端网段重叠。 + INVALIDPARAMETERVALUE_SSLCCNVPNSERVERCIDRCONFLICT = "InvalidParameterValue.SslCcnVpnServerCidrConflict" + + // 存在关机的主机还在使用当前资源,无法操作。 + INVALIDPARAMETERVALUE_STOPCHARGINGINSTANCEINUSE = "InvalidParameterValue.StopChargingInstanceInUse" + // 子网CIDR冲突。 INVALIDPARAMETERVALUE_SUBNETCONFLICT = "InvalidParameterValue.SubnetConflict" + // CIDR与同一个私有网络内的另一个子网发生重叠。 + INVALIDPARAMETERVALUE_SUBNETOVERLAP = "InvalidParameterValue.SubnetOverlap" + // 子网与辅助Cidr网段重叠。 INVALIDPARAMETERVALUE_SUBNETOVERLAPASSISTCIDR = "InvalidParameterValue.SubnetOverlapAssistCidr" // 子网CIDR不合法。 INVALIDPARAMETERVALUE_SUBNETRANGE = "InvalidParameterValue.SubnetRange" + // 标签键重复。 + INVALIDPARAMETERVALUE_TAGDUPLICATEKEY = "InvalidParameterValue.TagDuplicateKey" + + // 重复的标签资源类型。 + INVALIDPARAMETERVALUE_TAGDUPLICATERESOURCETYPE = "InvalidParameterValue.TagDuplicateResourceType" + + // 标签键无效。 + INVALIDPARAMETERVALUE_TAGINVALIDKEY = "InvalidParameterValue.TagInvalidKey" + + // 标签键长度无效。 + INVALIDPARAMETERVALUE_TAGINVALIDKEYLEN = "InvalidParameterValue.TagInvalidKeyLen" + + // 标签值无效。 + INVALIDPARAMETERVALUE_TAGINVALIDVAL = "InvalidParameterValue.TagInvalidVal" + + // 标签键不存在。 + INVALIDPARAMETERVALUE_TAGKEYNOTEXISTS = "InvalidParameterValue.TagKeyNotExists" + + // 标签没有分配配额。 + INVALIDPARAMETERVALUE_TAGNOTALLOCATEDQUOTA = "InvalidParameterValue.TagNotAllocatedQuota" + // 该标签和值不存在。 INVALIDPARAMETERVALUE_TAGNOTEXISTED = "InvalidParameterValue.TagNotExisted" + // 不支持的标签。 + INVALIDPARAMETERVALUE_TAGNOTSUPPORTTAG = "InvalidParameterValue.TagNotSupportTag" + + // '标签资源格式错误。 + INVALIDPARAMETERVALUE_TAGRESOURCEFORMATERROR = "InvalidParameterValue.TagResourceFormatError" + + // 标签时间戳超配。 + INVALIDPARAMETERVALUE_TAGTIMESTAMPEXCEEDED = "InvalidParameterValue.TagTimestampExceeded" + + // 标签值不存在。 + INVALIDPARAMETERVALUE_TAGVALNOTEXISTS = "InvalidParameterValue.TagValNotExists" + // 无效参数值。参数值太长。 INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong" + // 流量包ID格式错误。 + INVALIDPARAMETERVALUE_TRAFFICPACKAGEID = "InvalidParameterValue.TrafficPackageId" + + // 该流量包ID不合法。 + INVALIDPARAMETERVALUE_TRAFFICPACKAGEIDMALFORMED = "InvalidParameterValue.TrafficPackageIdMalformed" + + // 未查询到此流量包。 + INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTFOUND = "InvalidParameterValue.TrafficPackageNotFound" + + // 指定的流量包不支持此操作 + INVALIDPARAMETERVALUE_TRAFFICPACKAGENOTSUPPORTED = "InvalidParameterValue.TrafficPackageNotSupported" + // 该可用区不可用。 INVALIDPARAMETERVALUE_UNAVAILABLEZONE = "InvalidParameterValue.UnavailableZone" @@ -331,21 +481,60 @@ const ( // 超过配额限制。 LIMITEXCEEDED = "LimitExceeded" + // 账号退还配额超过限制。 + LIMITEXCEEDED_ACCOUNTRETURNQUOTA = "LimitExceeded.AccountReturnQuota" + + // 接口请求次数超过限频。 + LIMITEXCEEDED_ACTIONLIMITED = "LimitExceeded.ActionLimited" + // 分配IP地址数量达到上限。 LIMITEXCEEDED_ADDRESS = "LimitExceeded.Address" // 租户申请的弹性IP超过上限。 LIMITEXCEEDED_ADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.AddressQuotaLimitExceeded" + // 实例关联快照策略数量达到上限。 + LIMITEXCEEDED_ATTACHEDSNAPSHOTPOLICYEXCEEDED = "LimitExceeded.AttachedSnapshotPolicyExceeded" + + // 带宽包配额超过限制。 + LIMITEXCEEDED_BANDWIDTHPACKAGEQUOTA = "LimitExceeded.BandwidthPackageQuota" + + // 当前带宽包加入资源上限。 + LIMITEXCEEDED_BANDWIDTHPACKAGERESOURCEQUOTA = "LimitExceeded.BandwidthPackageResourceQuota" + + // 超过更换IP配额。 + LIMITEXCEEDED_CHANGEADDRESSQUOTA = "LimitExceeded.ChangeAddressQuota" + // VPC分配网段数量达到上限。 LIMITEXCEEDED_CIDRBLOCK = "LimitExceeded.CidrBlock" + // 当前实例关联的云联网数量达到上限。 + LIMITEXCEEDED_CURRENTINSTANCEATTACHEDCCNINSTANCES = "LimitExceeded.CurrentInstanceAttachedCcnInstances" + // 租户每天申请的弹性IP超过上限。 LIMITEXCEEDED_DAILYALLOCATEADDRESSQUOTALIMITEXCEEDED = "LimitExceeded.DailyAllocateAddressQuotaLimitExceeded" + // 超过每日更换IP配额。 + LIMITEXCEEDED_DAILYCHANGEADDRESSQUOTA = "LimitExceeded.DailyChangeAddressQuota" + + // 实例绑定的弹性IP超过配额。 + LIMITEXCEEDED_INSTANCEADDRESSQUOTA = "LimitExceeded.InstanceAddressQuota" + + // 修改地址网络计费模式配额超过限制。 + LIMITEXCEEDED_MODIFYADDRESSINTERNETCHARGETYPEQUOTA = "LimitExceeded.ModifyAddressInternetChargeTypeQuota" + + // 每月地址找回配额超过限制。 + LIMITEXCEEDED_MONTHLYADDRESSRECOVERYQUOTA = "LimitExceeded.MonthlyAddressRecoveryQuota" + + // NAT网关数量已达到上限。 + LIMITEXCEEDED_NATGATEWAYLIMITEXCEEDED = "LimitExceeded.NatGatewayLimitExceeded" + // 私有网络创建的NAT网关超过上限。 LIMITEXCEEDED_NATGATEWAYPERVPCLIMITEXCEEDED = "LimitExceeded.NatGatewayPerVpcLimitExceeded" + // 过滤参数名称超过限制。 + LIMITEXCEEDED_NUMBEROFFILTERS = "LimitExceeded.NumberOfFilters" + // NAT网关绑定的弹性IP超过上限。 LIMITEXCEEDED_PUBLICIPADDRESSPERNATGATEWAYLIMITEXCEEDED = "LimitExceeded.PublicIpAddressPerNatGatewayLimitExceeded" @@ -355,9 +544,42 @@ const ( // 子网分配子网段数量达到上限。 LIMITEXCEEDED_SUBNETCIDRBLOCK = "LimitExceeded.SubnetCidrBlock" + // 标签键已达到上限。 + LIMITEXCEEDED_TAGKEYEXCEEDED = "LimitExceeded.TagKeyExceeded" + + // 每个资源的标签键已达到上限。 + LIMITEXCEEDED_TAGKEYPERRESOURCEEXCEEDED = "LimitExceeded.TagKeyPerResourceExceeded" + + // 没有足够的标签配额。 + LIMITEXCEEDED_TAGNOTENOUGHQUOTA = "LimitExceeded.TagNotEnoughQuota" + + // 标签配额已满,无法创建资源。 + LIMITEXCEEDED_TAGQUOTA = "LimitExceeded.TagQuota" + + // 标签配额已达到上限。 + LIMITEXCEEDED_TAGQUOTAEXCEEDED = "LimitExceeded.TagQuotaExceeded" + + // 标签键的数目已达到上限。 + LIMITEXCEEDED_TAGTAGSEXCEEDED = "LimitExceeded.TagTagsExceeded" + + // 流量包配额超过限制。 + LIMITEXCEEDED_TRAFFICPACKAGEQUOTA = "LimitExceeded.TrafficPackageQuota" + + // 有效的对等个数超过配额上限。 + LIMITEXCEEDED_VPCPEERAVALIMITEXCEEDED = "LimitExceeded.VpcPeerAvaLimitExceeded" + + // 可创建的对等连接个数超过总上限。 + LIMITEXCEEDED_VPCPEERTOTALLIMITEXCEEDED = "LimitExceeded.VpcPeerTotalLimitExceeded" + // 缺少参数错误。 MISSINGPARAMETER = "MissingParameter" + // 指定公网IP处于隔离状态。 + OPERATIONDENIED_ADDRESSINARREARS = "OperationDenied.AddressInArrears" + + // 互斥的任务正在执行。 + OPERATIONDENIED_MUTEXTASKRUNNING = "OperationDenied.MutexTaskRunning" + // 资源被占用。 RESOURCEINUSE = "ResourceInUse" @@ -370,6 +592,9 @@ const ( // 网段资源不足。 RESOURCEINSUFFICIENT_CIDRBLOCK = "ResourceInsufficient.CidrBlock" + // 子网IP资源不足, 无法分配IP。 + RESOURCEINSUFFICIENT_SUBNET = "ResourceInsufficient.Subnet" + // 资源不存在。 RESOURCENOTFOUND = "ResourceNotFound" @@ -385,15 +610,24 @@ const ( // 未授权操作。 UNAUTHORIZEDOPERATION = "UnauthorizedOperation" + // 无权限申请AnycastEip资源。 + UNAUTHORIZEDOPERATION_ANYCASTEIP = "UnauthorizedOperation.AnycastEip" + // 绑定关系不存在。 UNAUTHORIZEDOPERATION_ATTACHMENTNOTFOUND = "UnauthorizedOperation.AttachmentNotFound" + // 未授权的用户。 + UNAUTHORIZEDOPERATION_INVALIDACCOUNT = "UnauthorizedOperation.InvalidAccount" + // 账号未实名。 UNAUTHORIZEDOPERATION_NOREALNAMEAUTHENTICATION = "UnauthorizedOperation.NoRealNameAuthentication" // 主IP不支持指定操作。 UNAUTHORIZEDOPERATION_PRIMARYIP = "UnauthorizedOperation.PrimaryIp" + // 对等连接本端VPC与对端VPC存在CIDR冲突,或一端与已建立的对等连接某一端冲突。 + UNAUTHORIZEDOPERATION_VPCPEERCIDRCONFLICT = "UnauthorizedOperation.VpcPeerCidrConflict" + // 未知参数错误。 UNKNOWNPARAMETER = "UnknownParameter" @@ -403,6 +637,9 @@ const ( // 操作不支持。 UNSUPPORTEDOPERATION = "UnsupportedOperation" + // 不支持的账户。 + UNSUPPORTEDOPERATION_ACCOUNTNOTSUPPORTED = "UnsupportedOperation.AccountNotSupported" + // 接口不存在。 UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound" @@ -427,6 +664,9 @@ const ( // APPId不存在。 UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound" + // CCN关联的其他vpc已经存在nat的路由 + UNSUPPORTEDOPERATION_ASSOCIATEDVPCOFCCNHADNATROUTE = "UnsupportedOperation.AssociatedVpcOfCcnHadNatRoute" + // 绑定关系已存在。 UNSUPPORTEDOPERATION_ATTACHMENTALREADYEXISTS = "UnsupportedOperation.AttachmentAlreadyExists" @@ -448,12 +688,21 @@ const ( // 实例已关联CCN。 UNSUPPORTEDOPERATION_CCNATTACHED = "UnsupportedOperation.CcnAttached" + // 云联网实例不支持跨账号关联。 + UNSUPPORTEDOPERATION_CCNCROSSACCOUNT = "UnsupportedOperation.CcnCrossAccount" + // 当前云联网有流日志,不支持删除。 UNSUPPORTEDOPERATION_CCNHASFLOWLOG = "UnsupportedOperation.CcnHasFlowLog" + // CCN实例所属账号未通过联通审批。 + UNSUPPORTEDOPERATION_CCNINSTANCEACCOUNTNOTAPPROVEDBYUNICOM = "UnsupportedOperation.CcnInstanceAccountNotApprovedByUnicom" + // 实例未关联CCN。 UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached" + // 跨账号场景下不支持自驾云账号实例 关联普通账号云联网。 + UNSUPPORTEDOPERATION_CCNORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.CcnOrdinaryAccountRefuseAttach" + // 指定的路由表不存在。 UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist" @@ -463,21 +712,45 @@ const ( // 实例已经和VPC绑定。 UNSUPPORTEDOPERATION_CLASSICINSTANCEIDALREADYEXISTS = "UnsupportedOperation.ClassicInstanceIdAlreadyExists" + // 负载均衡的安全组规则已达到上限。 + UNSUPPORTEDOPERATION_CLBPOLICYEXCEEDLIMIT = "UnsupportedOperation.ClbPolicyExceedLimit" + // 公网Clb不支持该规则。 UNSUPPORTEDOPERATION_CLBPOLICYLIMIT = "UnsupportedOperation.ClbPolicyLimit" // 与该VPC下的TKE容器的网段重叠。 UNSUPPORTEDOPERATION_CONFLICTWITHDOCKERROUTE = "UnsupportedOperation.ConflictWithDockerRoute" + // 当前账号非联通账号。 + UNSUPPORTEDOPERATION_CURRENTACCOUNTISNOTUNICOMACCOUNT = "UnsupportedOperation.CurrentAccountIsNotUnicomAccount" + + // 当前查询地域非跨境。 + UNSUPPORTEDOPERATION_CURRENTQUERYREGIONISNOTCROSSBORDER = "UnsupportedOperation.CurrentQueryRegionIsNotCrossBorder" + + // 该专线网关存在关联的NAT规则,不允许删除,请先删调所有的NAT规则。 + UNSUPPORTEDOPERATION_DCGATEWAYNATRULEEXISTS = "UnsupportedOperation.DCGatewayNatRuleExists" + // 指定的VPC未发现专线网关。 UNSUPPORTEDOPERATION_DCGATEWAYSNOTFOUNDINVPC = "UnsupportedOperation.DcGatewaysNotFoundInVpc" + // 禁止删除默认路由表。 + UNSUPPORTEDOPERATION_DELDEFAULTROUTE = "UnsupportedOperation.DelDefaultRoute" + + // 禁止删除已关联子网的路由表。 + UNSUPPORTEDOPERATION_DELROUTEWITHSUBNET = "UnsupportedOperation.DelRouteWithSubnet" + + // VPN通道状态为更新中/销毁中/创建中,不支持此操作。 + UNSUPPORTEDOPERATION_DELETEVPNCONNINVALIDSTATE = "UnsupportedOperation.DeleteVpnConnInvalidState" + // 专线网关正在更新BGP Community属性。 UNSUPPORTEDOPERATION_DIRECTCONNECTGATEWAYISUPDATINGCOMMUNITY = "UnsupportedOperation.DirectConnectGatewayIsUpdatingCommunity" // 指定的路由策略已发布至云联网,请先撤销。 UNSUPPORTEDOPERATION_DISABLEDNOTIFYCCN = "UnsupportedOperation.DisabledNotifyCcn" + // 创建DPDK NAT流日志时,采集类型只支持全部。 + UNSUPPORTEDOPERATION_DPDKNATFLOWLOGONLYSUPPORTALLTRAFFICTYPE = "UnsupportedOperation.DpdkNatFlowLogOnlySupportAllTrafficType" + // 安全组规则重复。 UNSUPPORTEDOPERATION_DUPLICATEPOLICY = "UnsupportedOperation.DuplicatePolicy" @@ -490,15 +763,36 @@ const ( // 和用户自定义的路由形成ECMP。 UNSUPPORTEDOPERATION_ECMPWITHUSERROUTE = "UnsupportedOperation.EcmpWithUserRoute" + // 当前地域不支持启用组播。 + UNSUPPORTEDOPERATION_ENABLEMULTICAST = "UnsupportedOperation.EnableMulticast" + // 终端节点服务本身不能是终端节点。 UNSUPPORTEDOPERATION_ENDPOINTSERVICE = "UnsupportedOperation.EndPointService" + // 指定ResourceId对应的流日志已经创建 + UNSUPPORTEDOPERATION_FLOWLOGINSTANCEEXISTED = "UnsupportedOperation.FlowLogInstanceExisted" + + // 不支持创建流日志:当前弹性网卡绑定的是KO机型。 + UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTKOINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportKoInstanceEni" + + // 不支持创建流日志:当前弹性网卡未绑定实例。 + UNSUPPORTEDOPERATION_FLOWLOGSNOTSUPPORTNULLINSTANCEENI = "UnsupportedOperation.FlowLogsNotSupportNullInstanceEni" + // 该种类型地址不支持此操作。 UNSUPPORTEDOPERATION_INCORRECTADDRESSRESOURCETYPE = "UnsupportedOperation.IncorrectAddressResourceType" // 用户配置的实例和路由表不匹配。 UNSUPPORTEDOPERATION_INSTANCEANDRTBNOTMATCH = "UnsupportedOperation.InstanceAndRtbNotMatch" + // 当前云联网`%(value)s`的CdcId与传入实例的CdcId不一致,不支持关联。 + UNSUPPORTEDOPERATION_INSTANCECDCIDNOTMATCHCCNCDCID = "UnsupportedOperation.InstanceCdcIdNotMatchCcnCdcId" + + // 指定实例资源不匹配。 + UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch" + + // 跨账号场景下不支持普通账号实例关联自驾云账号云联网。 + UNSUPPORTEDOPERATION_INSTANCEORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.InstanceOrdinaryAccountRefuseAttach" + // 该地址绑定的实例状态不支持此操作。 UNSUPPORTEDOPERATION_INSTANCESTATENOTSUPPORTED = "UnsupportedOperation.InstanceStateNotSupported" @@ -526,6 +820,9 @@ const ( // 资源状态不合法。 UNSUPPORTEDOPERATION_INVALIDSTATE = "UnsupportedOperation.InvalidState" + // 当前状态不支持发布至云联网,请重试。 + UNSUPPORTEDOPERATION_INVALIDSTATUSNOTIFYCCN = "UnsupportedOperation.InvalidStatusNotifyCcn" + // 关联当前云联网的实例的账号存在不是金融云账号。 UNSUPPORTEDOPERATION_ISNOTFINANCEACCOUNT = "UnsupportedOperation.IsNotFinanceAccount" @@ -535,9 +832,33 @@ const ( // 指定的CDC已存在本地网关。 UNSUPPORTEDOPERATION_LOCALGATEWAYALREADYEXISTS = "UnsupportedOperation.LocalGatewayAlreadyExists" + // 资源被锁定。 + UNSUPPORTEDOPERATION_LOCKEDRESOURCES = "UnsupportedOperation.LockedResources" + + // 账户不支持修改公网IP的该属性。 + UNSUPPORTEDOPERATION_MODIFYADDRESSATTRIBUTE = "UnsupportedOperation.ModifyAddressAttribute" + + // VPC实例内部有账号纬度的IPv6白名单,不支持关联多云联网。 + UNSUPPORTEDOPERATION_MULTIPLEVPCNOTSUPPORTATTACHACCOUNTHASIPV6 = "UnsupportedOperation.MultipleVpcNotSupportAttachAccountHasIpv6" + // 资源互斥操作任务正在执行。 UNSUPPORTEDOPERATION_MUTEXOPERATIONTASKRUNNING = "UnsupportedOperation.MutexOperationTaskRunning" + // NAT网关的公网IP不存在。 + UNSUPPORTEDOPERATION_NATGATEWAYEIPNOTEXISTS = "UnsupportedOperation.NatGatewayEipNotExists" + + // NAT网关存在未解绑的IP。 + UNSUPPORTEDOPERATION_NATGATEWAYHADEIPUNASSOCIATE = "UnsupportedOperation.NatGatewayHadEipUnassociate" + + // SNAT/DNAT转换规则所指定的内网IP已绑定了其他的规则,无法重复绑定。 + UNSUPPORTEDOPERATION_NATGATEWAYRULEPIPEXISTS = "UnsupportedOperation.NatGatewayRulePipExists" + + // SNAT转换规则的内网IP需为虚拟机上网卡所用的IP。 + UNSUPPORTEDOPERATION_NATGATEWAYSNATPIPNEEDVM = "UnsupportedOperation.NatGatewaySnatPipNeedVm" + + // NAT网关的SNAT转换规则不存在。 + UNSUPPORTEDOPERATION_NATGATEWAYSNATRULENOTEXISTS = "UnsupportedOperation.NatGatewaySnatRuleNotExists" + // NAT网关类型不支持SNAT规则。 UNSUPPORTEDOPERATION_NATGATEWAYTYPENOTSUPPORTSNAT = "UnsupportedOperation.NatGatewayTypeNotSupportSNAT" @@ -547,15 +868,45 @@ const ( // 指定的子网不支持创建本地网关类型的路由。 UNSUPPORTEDOPERATION_NORMALSUBNETNOTSUPPORTLOCALGATEWAY = "UnsupportedOperation.NormalSubnetNotSupportLocalGateway" + // 当前实例已被封禁,无法进行此操作。 + UNSUPPORTEDOPERATION_NOTLOCKEDINSTANCEOPERATION = "UnsupportedOperation.NotLockedInstanceOperation" + + // 目的端的服务在IP申请中使用的实例ID和这里传入的不匹配。 + UNSUPPORTEDOPERATION_NOTMATCHTARGETSERVICE = "UnsupportedOperation.NotMatchTargetService" + // 当前云联网实例未处于申请中状态,无法进行操作。 UNSUPPORTEDOPERATION_NOTPENDINGCCNINSTANCE = "UnsupportedOperation.NotPendingCcnInstance" // 当前云联网为非后付费类型,无法进行此操作。 UNSUPPORTEDOPERATION_NOTPOSTPAIDCCNOPERATION = "UnsupportedOperation.NotPostpaidCcnOperation" + // 当前云联网不支持同时关联EDGE实例和跨境实例 + UNSUPPORTEDOPERATION_NOTSUPPORTATTACHEDGEANDCROSSBORDERINSTANCE = "UnsupportedOperation.NotSupportAttachEdgeAndCrossBorderInstance" + + // 不支持删除默认路由表。 + UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultRouteTable" + + // 公有云到黑石的对等连接不支持删除。 + UNSUPPORTEDOPERATION_NOTSUPPORTDELETEVPCBMPEER = "UnsupportedOperation.NotSupportDeleteVpcBmPeer" + + // 该地址类型不支持释放操作。 + UNSUPPORTEDOPERATION_NOTSUPPORTEDADDRESSIPSCHARGETYPE = "UnsupportedOperation.NotSupportedAddressIpsChargeType" + + // 此地域没有上线出口二资源,请到北京/广州/南京购买。 + UNSUPPORTEDOPERATION_NOTSUPPORTEDPURCHASECENTEREGRESSRESOURCE = "UnsupportedOperation.NotSupportedPurchaseCenterEgressResource" + + // 当前云联网不支持更新路由发布。 + UNSUPPORTEDOPERATION_NOTSUPPORTEDUPDATECCNROUTEPUBLISH = "UnsupportedOperation.NotSupportedUpdateCcnRoutePublish" + // 指定的路由策略不支持发布或撤销至云联网。 UNSUPPORTEDOPERATION_NOTIFYCCN = "UnsupportedOperation.NotifyCcn" + // 此产品计费方式已下线,请尝试其他计费方式。 + UNSUPPORTEDOPERATION_OFFLINECHARGETYPE = "UnsupportedOperation.OfflineChargeType" + + // 仅支持专业版Ckafka。 + UNSUPPORTEDOPERATION_ONLYSUPPORTPROFESSIONKAFKA = "UnsupportedOperation.OnlySupportProfessionKafka" + // 预付费云联网只支持地域间限速。 UNSUPPORTEDOPERATION_PREPAIDCCNONLYSUPPORTINTERREGIONLIMIT = "UnsupportedOperation.PrepaidCcnOnlySupportInterRegionLimit" @@ -574,15 +925,81 @@ const ( // 绑定NAT网关的弹性IP不是按流量计费的。 UNSUPPORTEDOPERATION_PUBLICIPADDRESSNOTBILLEDBYTRAFFIC = "UnsupportedOperation.PublicIpAddressNotBilledByTraffic" + // 当前账号不能在该地域使用产品。 + UNSUPPORTEDOPERATION_PURCHASELIMIT = "UnsupportedOperation.PurchaseLimit" + + // 记录已存在。 + UNSUPPORTEDOPERATION_RECORDEXISTS = "UnsupportedOperation.RecordExists" + + // 记录不存在。 + UNSUPPORTEDOPERATION_RECORDNOTEXISTS = "UnsupportedOperation.RecordNotExists" + + // 资源处于不可用状态,禁止操作。 + UNSUPPORTEDOPERATION_RESOURCEISINVALIDSTATE = "UnsupportedOperation.ResourceIsInvalidState" + // 输入的资源ID与IP绑定的资源不匹配,请检查。 UNSUPPORTEDOPERATION_RESOURCEMISMATCH = "UnsupportedOperation.ResourceMismatch" + // 未找到相关角色,请确认角色是否授权。 + UNSUPPORTEDOPERATION_ROLENOTFOUND = "UnsupportedOperation.RoleNotFound" + + // 路由表绑定了子网。 + UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule" + + // SSL客户端状态不可用,不支持下载 + UNSUPPORTEDOPERATION_SSLCLIENTCERTDISABLEUNSUPPORTEDDOWNLOADSSLCLIENTCERT = "UnsupportedOperation.SSLClientCertDisableUnsupportedDownloadSSLClientCert" + + // 实例已关联快照策略。 + UNSUPPORTEDOPERATION_SNAPSHOTATTACHED = "UnsupportedOperation.SnapshotAttached" + + // 快照备份策略不支持修改。 + UNSUPPORTEDOPERATION_SNAPSHOTBACKUPTYPEMODIFY = "UnsupportedOperation.SnapshotBackupTypeModify" + + // 快照文件生成失败。 + UNSUPPORTEDOPERATION_SNAPSHOTFILEFAILED = "UnsupportedOperation.SnapshotFileFailed" + + // 快照文件已过期或删除。 + UNSUPPORTEDOPERATION_SNAPSHOTFILENOEXIST = "UnsupportedOperation.SnapshotFileNoExist" + + // 快照文件正在生成中,请稍后查看。 + UNSUPPORTEDOPERATION_SNAPSHOTFILEPROCESSING = "UnsupportedOperation.SnapshotFileProcessing" + + // 一次仅支持关联一个地域的实例。 + UNSUPPORTEDOPERATION_SNAPSHOTINSTANCEREGIONDIFF = "UnsupportedOperation.SnapshotInstanceRegionDiff" + + // 实例未关联快照策略。 + UNSUPPORTEDOPERATION_SNAPSHOTNOTATTACHED = "UnsupportedOperation.SnapshotNotAttached" + + // SNAT子网 不支持分配IP。 + UNSUPPORTEDOPERATION_SNATSUBNET = "UnsupportedOperation.SnatSubnet" + // 指定的终端节点服务所创建的终端节点不支持绑定安全组。 UNSUPPORTEDOPERATION_SPECIALENDPOINTSERVICE = "UnsupportedOperation.SpecialEndPointService" + // SslVpnClientId 不存在。 + UNSUPPORTEDOPERATION_SSLVPNCLIENTIDNOTFOUND = "UnsupportedOperation.SslVpnClientIdNotFound" + + // 中继网卡不支持该操作。 + UNSUPPORTEDOPERATION_SUBENINOTSUPPORTTRUNKING = "UnsupportedOperation.SubEniNotSupportTrunking" + + // 子网不存在。 + UNSUPPORTEDOPERATION_SUBNETNOTEXISTS = "UnsupportedOperation.SubnetNotExists" + // 系统路由,禁止操作。 UNSUPPORTEDOPERATION_SYSTEMROUTE = "UnsupportedOperation.SystemRoute" + // 标签正在分配中。 + UNSUPPORTEDOPERATION_TAGALLOCATE = "UnsupportedOperation.TagAllocate" + + // 标签正在释放中。 + UNSUPPORTEDOPERATION_TAGFREE = "UnsupportedOperation.TagFree" + + // 标签没有权限。 + UNSUPPORTEDOPERATION_TAGNOTPERMIT = "UnsupportedOperation.TagNotPermit" + + // 不支持使用系统预留的标签键。 + UNSUPPORTEDOPERATION_TAGSYSTEMRESERVEDTAGKEY = "UnsupportedOperation.TagSystemReservedTagKey" + // 账号ID不存在。 UNSUPPORTEDOPERATION_UINNOTFOUND = "UnsupportedOperation.UinNotFound" @@ -601,9 +1018,15 @@ const ( // 账户还有未支付订单,请先完成付款。 UNSUPPORTEDOPERATION_UNPAIDORDERALREADYEXISTS = "UnsupportedOperation.UnpaidOrderAlreadyExists" + // 不支持绑定LocalZone弹性公网IP。 + UNSUPPORTEDOPERATION_UNSUPPORTEDBINDLOCALZONEEIP = "UnsupportedOperation.UnsupportedBindLocalZoneEIP" + // 指定机型不支持弹性网卡。 UNSUPPORTEDOPERATION_UNSUPPORTEDINSTANCEFAMILY = "UnsupportedOperation.UnsupportedInstanceFamily" + // 暂无法在此国家/地区提供该服务。 + UNSUPPORTEDOPERATION_UNSUPPORTEDREGION = "UnsupportedOperation.UnsupportedRegion" + // 当前用户付费类型不支持创建所选付费类型的云联网。 UNSUPPORTEDOPERATION_USERANDCCNCHARGETYPENOTMATCH = "UnsupportedOperation.UserAndCcnChargeTypeNotMatch" @@ -613,6 +1036,24 @@ const ( // 资源不属于同一个VPC。 UNSUPPORTEDOPERATION_VPCMISMATCH = "UnsupportedOperation.VpcMismatch" + // 对等连接已存在。 + UNSUPPORTEDOPERATION_VPCPEERALREADYEXIST = "UnsupportedOperation.VpcPeerAlreadyExist" + + // VPC网段存在CIDR冲突。 + UNSUPPORTEDOPERATION_VPCPEERCIDRCONFLICT = "UnsupportedOperation.VpcPeerCidrConflict" + + // 对等连接状态错误。 + UNSUPPORTEDOPERATION_VPCPEERINVALIDSTATECHANGE = "UnsupportedOperation.VpcPeerInvalidStateChange" + + // 该账不能发起操作。 + UNSUPPORTEDOPERATION_VPCPEERPURVIEWERROR = "UnsupportedOperation.VpcPeerPurviewError" + + // 当前通道为非可用状态,不支持该操作。 + UNSUPPORTEDOPERATION_VPNCONNINVALIDSTATE = "UnsupportedOperation.VpnConnInvalidState" + + // VPC类型VPN网关必须携带VpcId。 + UNSUPPORTEDOPERATION_VPNGWVPCIDMUSTHAVE = "UnsupportedOperation.VpnGwVpcIdMustHave" + // 指定资源在不同的可用区。 UNSUPPORTEDOPERATION_ZONEMISMATCH = "UnsupportedOperation.ZoneMismatch" diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/models.go similarity index 54% rename from cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go rename to cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/models.go index fcd615419599..4c2c44b825f8 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312/models.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,10 +19,19 @@ package v20170312 import ( "encoding/json" - tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + tcerr "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/errors" + tchttp "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/http" ) +// Predefined struct for user +type AcceptAttachCcnInstancesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 接受关联实例列表。 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` +} + type AcceptAttachCcnInstancesRequest struct { *tchttp.BaseRequest @@ -53,13 +62,15 @@ func (r *AcceptAttachCcnInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AcceptAttachCcnInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AcceptAttachCcnInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AcceptAttachCcnInstancesResponseParams `json:"Response"` } func (r *AcceptAttachCcnInstancesResponse) ToJsonString() string { @@ -73,8 +84,82 @@ func (r *AcceptAttachCcnInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AccountAttribute struct { +// Predefined struct for user +type AcceptVpcPeeringConnectionRequestParams struct { + // 对等连接唯一ID。 + PeeringConnectionId *string `json:"PeeringConnectionId,omitempty" name:"PeeringConnectionId"` +} + +type AcceptVpcPeeringConnectionRequest struct { + *tchttp.BaseRequest + + // 对等连接唯一ID。 + PeeringConnectionId *string `json:"PeeringConnectionId,omitempty" name:"PeeringConnectionId"` +} + +func (r *AcceptVpcPeeringConnectionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AcceptVpcPeeringConnectionRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "PeeringConnectionId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AcceptVpcPeeringConnectionRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type AcceptVpcPeeringConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type AcceptVpcPeeringConnectionResponse struct { + *tchttp.BaseResponse + Response *AcceptVpcPeeringConnectionResponseParams `json:"Response"` +} + +func (r *AcceptVpcPeeringConnectionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AcceptVpcPeeringConnectionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} +type AccessPolicy struct { + // 目的CIDR + TargetCidr *string `json:"TargetCidr,omitempty" name:"TargetCidr"` + + // 策略ID + VpnGatewayIdSslAccessPolicyId *string `json:"VpnGatewayIdSslAccessPolicyId,omitempty" name:"VpnGatewayIdSslAccessPolicyId"` + + // 是否对所有用户都生效。1 生效 0不生效 + ForAllClient *uint64 `json:"ForAllClient,omitempty" name:"ForAllClient"` + + // 用户组ID + UserGroupIds []*string `json:"UserGroupIds,omitempty" name:"UserGroupIds"` + + // 更新时间 + UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` + + // Remark + // 注意:此字段可能返回 null,表示取不到有效值。 + Remark *string `json:"Remark,omitempty" name:"Remark"` +} + +type AccountAttribute struct { // 属性名 AttributeName *string `json:"AttributeName,omitempty" name:"AttributeName"` @@ -82,6 +167,24 @@ type AccountAttribute struct { AttributeValues []*string `json:"AttributeValues,omitempty" name:"AttributeValues"` } +// Predefined struct for user +type AddBandwidthPackageResourcesRequestParams struct { + // 资源唯一ID,当前支持EIP资源和LB资源,形如'eip-xxxx', 'lb-xxxx' + ResourceIds []*string `json:"ResourceIds,omitempty" name:"ResourceIds"` + + // 带宽包唯一标识ID,形如'bwp-xxxx' + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + + // 带宽包类型,当前支持'BGP'类型,表示内部资源是BGP IP。 + NetworkType *string `json:"NetworkType,omitempty" name:"NetworkType"` + + // 资源类型,包括'Address', 'LoadBalance' + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 带宽包协议类型。当前支持'ipv4'和'ipv6'协议类型。 + Protocol *string `json:"Protocol,omitempty" name:"Protocol"` +} + type AddBandwidthPackageResourcesRequest struct { *tchttp.BaseRequest @@ -124,13 +227,15 @@ func (r *AddBandwidthPackageResourcesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AddBandwidthPackageResourcesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AddBandwidthPackageResourcesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AddBandwidthPackageResourcesResponseParams `json:"Response"` } func (r *AddBandwidthPackageResourcesResponse) ToJsonString() string { @@ -144,6 +249,18 @@ func (r *AddBandwidthPackageResourcesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AddIp6RulesRequestParams struct { + // IPV6转换实例唯一ID,形如ip6-xxxxxxxx + Ip6TranslatorId *string `json:"Ip6TranslatorId,omitempty" name:"Ip6TranslatorId"` + + // IPV6转换规则信息 + Ip6RuleInfos []*Ip6RuleInfo `json:"Ip6RuleInfos,omitempty" name:"Ip6RuleInfos"` + + // IPV6转换规则名称 + Ip6RuleName *string `json:"Ip6RuleName,omitempty" name:"Ip6RuleName"` +} + type AddIp6RulesRequest struct { *tchttp.BaseRequest @@ -178,16 +295,18 @@ func (r *AddIp6RulesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AddIp6RulesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AddIp6RulesResponseParams struct { + // IPV6转换规则唯一ID数组,形如rule6-xxxxxxxx + Ip6RuleSet []*string `json:"Ip6RuleSet,omitempty" name:"Ip6RuleSet"` - // IPV6转换规则唯一ID数组,形如rule6-xxxxxxxx - Ip6RuleSet []*string `json:"Ip6RuleSet,omitempty" name:"Ip6RuleSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AddIp6RulesResponse struct { + *tchttp.BaseResponse + Response *AddIp6RulesResponseParams `json:"Response"` } func (r *AddIp6RulesResponse) ToJsonString() string { @@ -201,6 +320,15 @@ func (r *AddIp6RulesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AddTemplateMemberRequestParams struct { + // 参数模板实例ID,支持IP地址、协议端口、IP地址组、协议端口组四种参数模板的实例ID。 + TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` + + // 需要添加的参数模板成员信息,支持IP地址、协议端口、IP地址组、协议端口组四种类型,类型需要与TemplateId参数类型一致。 + TemplateMember []*MemberInfo `json:"TemplateMember,omitempty" name:"TemplateMember"` +} + type AddTemplateMemberRequest struct { *tchttp.BaseRequest @@ -231,13 +359,15 @@ func (r *AddTemplateMemberRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AddTemplateMemberResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AddTemplateMemberResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AddTemplateMemberResponseParams `json:"Response"` } func (r *AddTemplateMemberResponse) ToJsonString() string { @@ -252,7 +382,6 @@ func (r *AddTemplateMemberResponse) FromJsonString(s string) error { } type Address struct { - // `EIP`的`ID`,是`EIP`的唯一标识。 AddressId *string `json:"AddressId,omitempty" name:"AddressId"` @@ -286,7 +415,7 @@ type Address struct { // eip是否支持直通模式。true表示eip支持直通模式,false表示资源不支持直通模式 IsEipDirectConnection *bool `json:"IsEipDirectConnection,omitempty" name:"IsEipDirectConnection"` - // EIP 资源类型,包括CalcIP、WanIP、EIP和AnycastEIP。其中:CalcIP 表示设备 IP,WanIP 表示普通公网 IP,EIP 表示弹性公网 IP,AnycastEip 表示加速 EIP。 + // EIP 资源类型,包括CalcIP、WanIP、EIP和AnycastEIP、高防EIP。其中:`CalcIP` 表示设备 IP,`WanIP` 表示普通公网 IP,`EIP` 表示弹性公网 IP,`AnycastEip` 表示加速 EIP,`AntiDDoSEIP`表示高防EIP。 AddressType *string `json:"AddressType,omitempty" name:"AddressType"` // eip是否在解绑后自动释放。true表示eip将会在解绑后自动释放,false表示eip在解绑后不会自动释放 @@ -322,10 +451,20 @@ type Address struct { // 弹性公网IP关联的标签列表。 // 注意:此字段可能返回 null,表示取不到有效值。 TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` + + // 到期时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeadlineDate *string `json:"DeadlineDate,omitempty" name:"DeadlineDate"` + + // EIP绑定的实例类型。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 高防包ID,当EIP类型为高防EIP时,返回EIP绑定的高防包ID. + AntiDDoSPackageId *string `json:"AntiDDoSPackageId,omitempty" name:"AntiDDoSPackageId"` } type AddressChargePrepaid struct { - // 购买实例的时长,单位是月。可支持时长:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36 Period *int64 `json:"Period,omitempty" name:"Period"` @@ -334,7 +473,6 @@ type AddressChargePrepaid struct { } type AddressInfo struct { - // ip地址。 Address *string `json:"Address,omitempty" name:"Address"` @@ -344,7 +482,6 @@ type AddressInfo struct { } type AddressTemplate struct { - // IP地址模板名称。 AddressTemplateName *string `json:"AddressTemplateName,omitempty" name:"AddressTemplateName"` @@ -362,7 +499,6 @@ type AddressTemplate struct { } type AddressTemplateGroup struct { - // IP地址模板集合名称。 AddressTemplateGroupName *string `json:"AddressTemplateGroupName,omitempty" name:"AddressTemplateGroupName"` @@ -380,16 +516,20 @@ type AddressTemplateGroup struct { } type AddressTemplateItem struct { + // ipm-xxxxxxxx + AddressTemplateId *string `json:"AddressTemplateId,omitempty" name:"AddressTemplateId"` + + // IP模板名称 + AddressTemplateName *string `json:"AddressTemplateName,omitempty" name:"AddressTemplateName"` - // 起始地址。 + // 废弃字段 From *string `json:"From,omitempty" name:"From"` - // 结束地址。 + // 废弃字段 To *string `json:"To,omitempty" name:"To"` } type AddressTemplateSpecification struct { - // IP地址ID,例如:ipm-2uw6ujo6。 AddressId *string `json:"AddressId,omitempty" name:"AddressId"` @@ -397,8 +537,71 @@ type AddressTemplateSpecification struct { AddressGroupId *string `json:"AddressGroupId,omitempty" name:"AddressGroupId"` } -type AlgType struct { +// Predefined struct for user +type AdjustPublicAddressRequestParams struct { + // 标识CVM实例的唯一 ID。CVM 唯一 ID 形如:`ins-11112222`。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 标识EIP实例的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` +} + +type AdjustPublicAddressRequest struct { + *tchttp.BaseRequest + + // 标识CVM实例的唯一 ID。CVM 唯一 ID 形如:`ins-11112222`。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 标识EIP实例的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` +} + +func (r *AdjustPublicAddressRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AdjustPublicAddressRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "InstanceId") + delete(f, "AddressId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AdjustPublicAddressRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type AdjustPublicAddressResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type AdjustPublicAddressResponse struct { + *tchttp.BaseResponse + Response *AdjustPublicAddressResponseParams `json:"Response"` +} + +func (r *AdjustPublicAddressResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AdjustPublicAddressResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} +type AlgType struct { // Ftp协议Alg功能是否开启 Ftp *bool `json:"Ftp,omitempty" name:"Ftp"` @@ -406,6 +609,72 @@ type AlgType struct { Sip *bool `json:"Sip,omitempty" name:"Sip"` } +// Predefined struct for user +type AllocateAddressesRequestParams struct { + // EIP数量。默认值:1。 + AddressCount *int64 `json:"AddressCount,omitempty" name:"AddressCount"` + + // EIP线路类型。默认值:BGP。 + //
    • 已开通静态单线IP白名单的用户,可选值:
      • CMCC:中国移动
      • + //
      • CTCC:中国电信
      • + //
      • CUCC:中国联通
      注意:仅部分地域支持静态单线IP。
    + InternetServiceProvider *string `json:"InternetServiceProvider,omitempty" name:"InternetServiceProvider"` + + // EIP计费方式。 + //
    • 已开通标准账户类型白名单的用户,可选值:
      • BANDWIDTH_PACKAGE:[共享带宽包](https://cloud.tencent.com/document/product/684/15255)付费(需额外开通共享带宽包白名单)
      • + //
      • BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
      • + //
      • BANDWIDTH_PREPAID_BY_MONTH:包月按带宽预付费
      • + //
      • TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
      默认值:TRAFFIC_POSTPAID_BY_HOUR。
    • + //
    • 未开通标准账户类型白名单的用户,EIP计费方式与其绑定的实例的计费方式一致,无需传递此参数。
    + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + + // EIP出带宽上限,单位:Mbps。 + //
    • 已开通标准账户类型白名单的用户,可选值范围取决于EIP计费方式:
      • BANDWIDTH_PACKAGE:1 Mbps 至 2000 Mbps
      • + //
      • BANDWIDTH_POSTPAID_BY_HOUR:1 Mbps 至 100 Mbps
      • + //
      • BANDWIDTH_PREPAID_BY_MONTH:1 Mbps 至 200 Mbps
      • + //
      • TRAFFIC_POSTPAID_BY_HOUR:1 Mbps 至 100 Mbps
      默认值:1 Mbps。
    • + //
    • 未开通标准账户类型白名单的用户,EIP出带宽上限取决于与其绑定的实例的公网出带宽上限,无需传递此参数。
    + InternetMaxBandwidthOut *int64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 包月按带宽预付费EIP的计费参数。EIP为包月按带宽预付费时,该参数必传,其余场景不需传递 + AddressChargePrepaid *AddressChargePrepaid `json:"AddressChargePrepaid,omitempty" name:"AddressChargePrepaid"` + + // EIP类型。默认值:EIP。 + //
    • 已开通Anycast公网加速白名单的用户,可选值:
      • AnycastEIP:加速IP,可参见 [Anycast 公网加速](https://cloud.tencent.com/document/product/644)
      注意:仅部分地域支持加速IP。
    + //
    • 已开通精品IP白名单的用户,可选值:
      • HighQualityEIP:精品IP
      注意:仅部分地域支持精品IP。
    + // + //
    • 已开高防IP白名单的用户,可选值:
      • AntiDDoSEIP:高防IP
      注意:仅部分地域支持高防IP。
    + AddressType *string `json:"AddressType,omitempty" name:"AddressType"` + + // Anycast发布域。 + //
    • 已开通Anycast公网加速白名单的用户,可选值:
      • ANYCAST_ZONE_GLOBAL:全球发布域(需要额外开通Anycast全球加速白名单)
      • ANYCAST_ZONE_OVERSEAS:境外发布域
      • [已废弃] ANYCAST_ZONE_A:发布域A(已更新为全球发布域)
      • [已废弃] ANYCAST_ZONE_B:发布域B(已更新为全球发布域)
      默认值:ANYCAST_ZONE_OVERSEAS。
    + AnycastZone *string `json:"AnycastZone,omitempty" name:"AnycastZone"` + + // [已废弃] AnycastEIP不再区分是否负载均衡。原参数说明如下: + // AnycastEIP是否用于绑定负载均衡。 + //
    • 已开通Anycast公网加速白名单的用户,可选值:
      • TRUE:AnycastEIP可绑定对象为负载均衡
      • + //
      • FALSE:AnycastEIP可绑定对象为云服务器、NAT网关、高可用虚拟IP等
      默认值:FALSE。
    + ApplicableForCLB *bool `json:"ApplicableForCLB,omitempty" name:"ApplicableForCLB"` + + // 需要关联的标签列表。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // BGP带宽包唯一ID参数。设定该参数且InternetChargeType为BANDWIDTH_PACKAGE,则表示创建的EIP加入该BGP带宽包并采用带宽包计费 + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + + // EIP名称,用于申请EIP时用户自定义该EIP的个性化名称,默认值:未命名 + AddressName *string `json:"AddressName,omitempty" name:"AddressName"` + + // 网络出口,默认是:center_egress1 + Egress *string `json:"Egress,omitempty" name:"Egress"` + + // 高防包ID, 申请高防IP时,该字段必传。 + AntiDDoSPackageId *string `json:"AntiDDoSPackageId,omitempty" name:"AntiDDoSPackageId"` + + // 保证请求幂等性。从您的客户端生成一个参数值,确保不同请求间该参数值唯一。ClientToken只支持ASCII字符,且不能超过64个字符。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` +} + type AllocateAddressesRequest struct { *tchttp.BaseRequest @@ -427,7 +696,7 @@ type AllocateAddressesRequest struct { InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` // EIP出带宽上限,单位:Mbps。 - //
    • 已开通标准账户类型白名单的用户,可选值范围取决于EIP计费方式:
      • BANDWIDTH_PACKAGE:1 Mbps 至 1000 Mbps
      • + //
        • 已开通标准账户类型白名单的用户,可选值范围取决于EIP计费方式:
          • BANDWIDTH_PACKAGE:1 Mbps 至 2000 Mbps
          • //
          • BANDWIDTH_POSTPAID_BY_HOUR:1 Mbps 至 100 Mbps
          • //
          • BANDWIDTH_PREPAID_BY_MONTH:1 Mbps 至 200 Mbps
          • //
          • TRAFFIC_POSTPAID_BY_HOUR:1 Mbps 至 100 Mbps
          默认值:1 Mbps。
        • @@ -440,6 +709,8 @@ type AllocateAddressesRequest struct { // EIP类型。默认值:EIP。 //
          • 已开通Anycast公网加速白名单的用户,可选值:
            • AnycastEIP:加速IP,可参见 [Anycast 公网加速](https://cloud.tencent.com/document/product/644)
            注意:仅部分地域支持加速IP。
          //
          • 已开通精品IP白名单的用户,可选值:
            • HighQualityEIP:精品IP
            注意:仅部分地域支持精品IP。
          + //
        + //
        • 已开高防IP白名单的用户,可选值:
          • AntiDDoSEIP:高防IP
          注意:仅部分地域支持高防IP。
        AddressType *string `json:"AddressType,omitempty" name:"AddressType"` // Anycast发布域。 @@ -460,6 +731,15 @@ type AllocateAddressesRequest struct { // EIP名称,用于申请EIP时用户自定义该EIP的个性化名称,默认值:未命名 AddressName *string `json:"AddressName,omitempty" name:"AddressName"` + + // 网络出口,默认是:center_egress1 + Egress *string `json:"Egress,omitempty" name:"Egress"` + + // 高防包ID, 申请高防IP时,该字段必传。 + AntiDDoSPackageId *string `json:"AntiDDoSPackageId,omitempty" name:"AntiDDoSPackageId"` + + // 保证请求幂等性。从您的客户端生成一个参数值,确保不同请求间该参数值唯一。ClientToken只支持ASCII字符,且不能超过64个字符。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` } func (r *AllocateAddressesRequest) ToJsonString() string { @@ -485,25 +765,30 @@ func (r *AllocateAddressesRequest) FromJsonString(s string) error { delete(f, "Tags") delete(f, "BandwidthPackageId") delete(f, "AddressName") + delete(f, "Egress") + delete(f, "AntiDDoSPackageId") + delete(f, "ClientToken") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AllocateAddressesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type AllocateAddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AllocateAddressesResponseParams struct { + // 申请到的 EIP 的唯一 ID 列表。 + AddressSet []*string `json:"AddressSet,omitempty" name:"AddressSet"` - // 申请到的 EIP 的唯一 ID 列表。 - AddressSet []*string `json:"AddressSet,omitempty" name:"AddressSet"` + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AllocateAddressesResponse struct { + *tchttp.BaseResponse + Response *AllocateAddressesResponseParams `json:"Response"` } func (r *AllocateAddressesResponse) ToJsonString() string { @@ -517,6 +802,21 @@ func (r *AllocateAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AllocateIp6AddressesBandwidthRequestParams struct { + // 需要开通公网访问能力的IPV6地址 + Ip6Addresses []*string `json:"Ip6Addresses,omitempty" name:"Ip6Addresses"` + + // 带宽,单位Mbps。默认是1Mbps + InternetMaxBandwidthOut *int64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 网络计费模式。IPV6当前对标准账户类型支持"TRAFFIC_POSTPAID_BY_HOUR",对传统账户类型支持"BANDWIDTH_PACKAGE"。默认网络计费模式是"TRAFFIC_POSTPAID_BY_HOUR"。 + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + + // 带宽包id,上移账号,申请带宽包计费模式的ipv6地址需要传入. + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` +} + type AllocateIp6AddressesBandwidthRequest struct { *tchttp.BaseRequest @@ -555,19 +855,21 @@ func (r *AllocateIp6AddressesBandwidthRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AllocateIp6AddressesBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AllocateIp6AddressesBandwidthResponseParams struct { + // 弹性公网 IPV6 的唯一 ID 列表。 + AddressSet []*string `json:"AddressSet,omitempty" name:"AddressSet"` - // 弹性公网 IPV6 的唯一 ID 列表。 - AddressSet []*string `json:"AddressSet,omitempty" name:"AddressSet"` + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AllocateIp6AddressesBandwidthResponse struct { + *tchttp.BaseResponse + Response *AllocateIp6AddressesBandwidthResponseParams `json:"Response"` } func (r *AllocateIp6AddressesBandwidthResponse) ToJsonString() string { @@ -581,23 +883,35 @@ func (r *AllocateIp6AddressesBandwidthResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AssignIpv6AddressesRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type AssignIpv6AddressesRequestParams struct { // 弹性网卡实例`ID`,形如:`eni-m6dyj72l`。 NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` // 指定的`IPv6`地址列表,单次最多指定10个。与入参`Ipv6AddressCount`合并计算配额。与Ipv6AddressCount必填一个。 Ipv6Addresses []*Ipv6Address `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` - // 自动分配`IPv6`地址个数,内网IP地址个数总和不能超过配数。与入参`Ipv6Addresses`合并计算配额。与Ipv6Addresses必填一个。 + // 自动分配`IPv6`地址个数,内网IP地址个数总和不能超过配额数。与入参`Ipv6Addresses`合并计算配额。与Ipv6Addresses必填一个。 Ipv6AddressCount *uint64 `json:"Ipv6AddressCount,omitempty" name:"Ipv6AddressCount"` } -func (r *AssignIpv6AddressesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} +type AssignIpv6AddressesRequest struct { + *tchttp.BaseRequest + + // 弹性网卡实例`ID`,形如:`eni-m6dyj72l`。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的`IPv6`地址列表,单次最多指定10个。与入参`Ipv6AddressCount`合并计算配额。与Ipv6AddressCount必填一个。 + Ipv6Addresses []*Ipv6Address `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` + + // 自动分配`IPv6`地址个数,内网IP地址个数总和不能超过配额数。与入参`Ipv6Addresses`合并计算配额。与Ipv6Addresses必填一个。 + Ipv6AddressCount *uint64 `json:"Ipv6AddressCount,omitempty" name:"Ipv6AddressCount"` +} + +func (r *AssignIpv6AddressesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check @@ -615,16 +929,18 @@ func (r *AssignIpv6AddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AssignIpv6AddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AssignIpv6AddressesResponseParams struct { + // 分配给弹性网卡的`IPv6`地址列表。 + Ipv6AddressSet []*Ipv6Address `json:"Ipv6AddressSet,omitempty" name:"Ipv6AddressSet"` - // 分配给弹性网卡的`IPv6`地址列表。 - Ipv6AddressSet []*Ipv6Address `json:"Ipv6AddressSet,omitempty" name:"Ipv6AddressSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AssignIpv6AddressesResponse struct { + *tchttp.BaseResponse + Response *AssignIpv6AddressesResponseParams `json:"Response"` } func (r *AssignIpv6AddressesResponse) ToJsonString() string { @@ -638,6 +954,12 @@ func (r *AssignIpv6AddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssignIpv6CidrBlockRequestParams struct { + // `VPC`实例`ID`,形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` +} + type AssignIpv6CidrBlockRequest struct { *tchttp.BaseRequest @@ -664,16 +986,18 @@ func (r *AssignIpv6CidrBlockRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AssignIpv6CidrBlockResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AssignIpv6CidrBlockResponseParams struct { + // 分配的 `IPv6` 网段。形如:`3402:4e00:20:1000::/56`。 + Ipv6CidrBlock *string `json:"Ipv6CidrBlock,omitempty" name:"Ipv6CidrBlock"` - // 分配的 `IPv6` 网段。形如:`3402:4e00:20:1000::/56` - Ipv6CidrBlock *string `json:"Ipv6CidrBlock,omitempty" name:"Ipv6CidrBlock"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AssignIpv6CidrBlockResponse struct { + *tchttp.BaseResponse + Response *AssignIpv6CidrBlockResponseParams `json:"Response"` } func (r *AssignIpv6CidrBlockResponse) ToJsonString() string { @@ -687,6 +1011,15 @@ func (r *AssignIpv6CidrBlockResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssignIpv6SubnetCidrBlockRequestParams struct { + // 子网所在私有网络`ID`。形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 分配 `IPv6` 子网段列表。 + Ipv6SubnetCidrBlocks []*Ipv6SubnetCidrBlock `json:"Ipv6SubnetCidrBlocks,omitempty" name:"Ipv6SubnetCidrBlocks"` +} + type AssignIpv6SubnetCidrBlockRequest struct { *tchttp.BaseRequest @@ -717,16 +1050,18 @@ func (r *AssignIpv6SubnetCidrBlockRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AssignIpv6SubnetCidrBlockResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AssignIpv6SubnetCidrBlockResponseParams struct { + // 分配 `IPv6` 子网段列表。 + Ipv6SubnetCidrBlockSet []*Ipv6SubnetCidrBlock `json:"Ipv6SubnetCidrBlockSet,omitempty" name:"Ipv6SubnetCidrBlockSet"` - // 分配 `IPv6` 子网段列表。 - Ipv6SubnetCidrBlockSet []*Ipv6SubnetCidrBlock `json:"Ipv6SubnetCidrBlockSet,omitempty" name:"Ipv6SubnetCidrBlockSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AssignIpv6SubnetCidrBlockResponse struct { + *tchttp.BaseResponse + Response *AssignIpv6SubnetCidrBlockResponseParams `json:"Response"` } func (r *AssignIpv6SubnetCidrBlockResponse) ToJsonString() string { @@ -740,6 +1075,21 @@ func (r *AssignIpv6SubnetCidrBlockResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssignPrivateIpAddressesRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的内网IP信息,单次最多指定10个。与SecondaryPrivateIpAddressCount至少提供一个。 + PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` + + // 新申请的内网IP地址个数,与PrivateIpAddresses至少提供一个。内网IP地址个数总和不能超过配额数,详见弹性网卡使用限制。 + SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` +} + type AssignPrivateIpAddressesRequest struct { *tchttp.BaseRequest @@ -751,6 +1101,9 @@ type AssignPrivateIpAddressesRequest struct { // 新申请的内网IP地址个数,与PrivateIpAddresses至少提供一个。内网IP地址个数总和不能超过配额数,详见弹性网卡使用限制。 SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` } func (r *AssignPrivateIpAddressesRequest) ToJsonString() string { @@ -768,22 +1121,25 @@ func (r *AssignPrivateIpAddressesRequest) FromJsonString(s string) error { delete(f, "NetworkInterfaceId") delete(f, "PrivateIpAddresses") delete(f, "SecondaryPrivateIpAddressCount") + delete(f, "QosLevel") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AssignPrivateIpAddressesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type AssignPrivateIpAddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AssignPrivateIpAddressesResponseParams struct { + // 内网IP详细信息。 + PrivateIpAddressSet []*PrivateIpAddressSpecification `json:"PrivateIpAddressSet,omitempty" name:"PrivateIpAddressSet"` - // 内网IP详细信息。 - PrivateIpAddressSet []*PrivateIpAddressSpecification `json:"PrivateIpAddressSet,omitempty" name:"PrivateIpAddressSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AssignPrivateIpAddressesResponse struct { + *tchttp.BaseResponse + Response *AssignPrivateIpAddressesResponseParams `json:"Response"` } func (r *AssignPrivateIpAddressesResponse) ToJsonString() string { @@ -798,7 +1154,6 @@ func (r *AssignPrivateIpAddressesResponse) FromJsonString(s string) error { } type AssistantCidr struct { - // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -813,13 +1168,31 @@ type AssistantCidr struct { SubnetSet []*Subnet `json:"SubnetSet,omitempty" name:"SubnetSet"` } +// Predefined struct for user +type AssociateAddressRequestParams struct { + // 标识 EIP 的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` + + // 要绑定的实例 ID。实例 ID 形如:`ins-11112222`、`lb-11112222`。可通过登录[控制台](https://console.cloud.tencent.com/cvm)查询,也可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 要绑定的弹性网卡 ID。 弹性网卡 ID 形如:`eni-11112222`。`NetworkInterfaceId` 与 `InstanceId` 不可同时指定。弹性网卡 ID 可通过登录[控制台](https://console.cloud.tencent.com/vpc/eni)查询,也可通过[DescribeNetworkInterfaces](https://cloud.tencent.com/document/api/215/15817)接口返回值中的`networkInterfaceId`获取。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 要绑定的内网 IP。如果指定了 `NetworkInterfaceId` 则也必须指定 `PrivateIpAddress` ,表示将 EIP 绑定到指定弹性网卡的指定内网 IP 上。同时要确保指定的 `PrivateIpAddress` 是指定的 `NetworkInterfaceId` 上的一个内网 IP。指定弹性网卡的内网 IP 可通过登录[控制台](https://console.cloud.tencent.com/vpc/eni)查询,也可通过[DescribeNetworkInterfaces](https://cloud.tencent.com/document/api/215/15817)接口返回值中的`privateIpAddress`获取。 + PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` + + // 指定绑定时是否设置直通。弹性公网 IP 直通请参见 [EIP 直通](https://cloud.tencent.com/document/product/1199/41709)。取值:True、False,默认值为 False。当绑定 CVM 实例、EKS 弹性集群时,可设定此参数为 True。此参数目前处于内测中,如需使用,请提交 [工单申请](https://console.cloud.tencent.com/workorder/category?level1_id=6&level2_id=163&source=0&data_title=%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%20CLB&level3_id=1071&queue=96&scene_code=34639&step=2)。 + EipDirectConnection *bool `json:"EipDirectConnection,omitempty" name:"EipDirectConnection"` +} + type AssociateAddressRequest struct { *tchttp.BaseRequest // 标识 EIP 的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 AddressId *string `json:"AddressId,omitempty" name:"AddressId"` - // 要绑定的实例 ID。实例 ID 形如:`ins-11112222`。可通过登录[控制台](https://console.cloud.tencent.com/cvm)查询,也可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口返回值中的`InstanceId`获取。 + // 要绑定的实例 ID。实例 ID 形如:`ins-11112222`、`lb-11112222`。可通过登录[控制台](https://console.cloud.tencent.com/cvm)查询,也可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口返回值中的`InstanceId`获取。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` // 要绑定的弹性网卡 ID。 弹性网卡 ID 形如:`eni-11112222`。`NetworkInterfaceId` 与 `InstanceId` 不可同时指定。弹性网卡 ID 可通过登录[控制台](https://console.cloud.tencent.com/vpc/eni)查询,也可通过[DescribeNetworkInterfaces](https://cloud.tencent.com/document/api/215/15817)接口返回值中的`networkInterfaceId`获取。 @@ -855,16 +1228,18 @@ func (r *AssociateAddressRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type AssociateAddressResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type AssociateAddressResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type AssociateAddressResponse struct { + *tchttp.BaseResponse + Response *AssociateAddressResponseParams `json:"Response"` } func (r *AssociateAddressResponse) ToJsonString() string { @@ -878,6 +1253,15 @@ func (r *AssociateAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateDhcpIpWithAddressIpRequestParams struct { + // `DhcpIp`唯一`ID`,形如:`dhcpip-9o233uri`。必须是没有绑定`EIP`的`DhcpIp` + DhcpIpId *string `json:"DhcpIpId,omitempty" name:"DhcpIpId"` + + // 弹性公网`IP`。必须是没有绑定`DhcpIp`的`EIP` + AddressIp *string `json:"AddressIp,omitempty" name:"AddressIp"` +} + type AssociateDhcpIpWithAddressIpRequest struct { *tchttp.BaseRequest @@ -908,13 +1292,15 @@ func (r *AssociateDhcpIpWithAddressIpRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateDhcpIpWithAddressIpResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateDhcpIpWithAddressIpResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateDhcpIpWithAddressIpResponseParams `json:"Response"` } func (r *AssociateDhcpIpWithAddressIpResponse) ToJsonString() string { @@ -928,16 +1314,28 @@ func (r *AssociateDhcpIpWithAddressIpResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateDirectConnectGatewayNatGatewayRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // NAT网关ID。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 专线网关ID。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` +} + type AssociateDirectConnectGatewayNatGatewayRequest struct { *tchttp.BaseRequest - // 专线网关ID。 + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` // NAT网关ID。 NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` - // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + // 专线网关ID。 DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` } @@ -962,13 +1360,15 @@ func (r *AssociateDirectConnectGatewayNatGatewayRequest) FromJsonString(s string return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateDirectConnectGatewayNatGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateDirectConnectGatewayNatGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateDirectConnectGatewayNatGatewayResponseParams `json:"Response"` } func (r *AssociateDirectConnectGatewayNatGatewayResponse) ToJsonString() string { @@ -982,6 +1382,30 @@ func (r *AssociateDirectConnectGatewayNatGatewayResponse) FromJsonString(s strin return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNatGatewayAddressRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 需要申请的弹性IP个数,系统会按您的要求生产N个弹性IP, 其中AddressCount和PublicAddresses至少传递一个。 + AddressCount *uint64 `json:"AddressCount,omitempty" name:"AddressCount"` + + // 绑定NAT网关的弹性IP数组,其中AddressCount和PublicAddresses至少传递一个。 + PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` + + // 弹性IP可用区,自动分配弹性IP时传递。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 绑定NAT网关的弹性IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + StockPublicIpAddressesBandwidthOut *uint64 `json:"StockPublicIpAddressesBandwidthOut,omitempty" name:"StockPublicIpAddressesBandwidthOut"` + + // 需要申请公网IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + PublicIpAddressesBandwidthOut *uint64 `json:"PublicIpAddressesBandwidthOut,omitempty" name:"PublicIpAddressesBandwidthOut"` + + // 公网IP是否强制与NAT网关来自同可用区,true表示需要与NAT网关同可用区;false表示可与NAT网关不是同一个可用区。此参数只有当参数Zone存在时才能生效。 + PublicIpFromSameZone *bool `json:"PublicIpFromSameZone,omitempty" name:"PublicIpFromSameZone"` +} + type AssociateNatGatewayAddressRequest struct { *tchttp.BaseRequest @@ -996,6 +1420,15 @@ type AssociateNatGatewayAddressRequest struct { // 弹性IP可用区,自动分配弹性IP时传递。 Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 绑定NAT网关的弹性IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + StockPublicIpAddressesBandwidthOut *uint64 `json:"StockPublicIpAddressesBandwidthOut,omitempty" name:"StockPublicIpAddressesBandwidthOut"` + + // 需要申请公网IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + PublicIpAddressesBandwidthOut *uint64 `json:"PublicIpAddressesBandwidthOut,omitempty" name:"PublicIpAddressesBandwidthOut"` + + // 公网IP是否强制与NAT网关来自同可用区,true表示需要与NAT网关同可用区;false表示可与NAT网关不是同一个可用区。此参数只有当参数Zone存在时才能生效。 + PublicIpFromSameZone *bool `json:"PublicIpFromSameZone,omitempty" name:"PublicIpFromSameZone"` } func (r *AssociateNatGatewayAddressRequest) ToJsonString() string { @@ -1014,19 +1447,24 @@ func (r *AssociateNatGatewayAddressRequest) FromJsonString(s string) error { delete(f, "AddressCount") delete(f, "PublicIpAddresses") delete(f, "Zone") + delete(f, "StockPublicIpAddressesBandwidthOut") + delete(f, "PublicIpAddressesBandwidthOut") + delete(f, "PublicIpFromSameZone") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AssociateNatGatewayAddressRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNatGatewayAddressResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateNatGatewayAddressResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateNatGatewayAddressResponseParams `json:"Response"` } func (r *AssociateNatGatewayAddressResponse) ToJsonString() string { @@ -1040,13 +1478,22 @@ func (r *AssociateNatGatewayAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNetworkAclSubnetsRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 子网实例ID数组。例如:[subnet-12345678]。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` +} + type AssociateNetworkAclSubnetsRequest struct { *tchttp.BaseRequest // 网络ACL实例ID。例如:acl-12345678。 NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` - // 子网实例ID数组。例如:[subnet-12345678] + // 子网实例ID数组。例如:[subnet-12345678]。 SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` } @@ -1070,13 +1517,15 @@ func (r *AssociateNetworkAclSubnetsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNetworkAclSubnetsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateNetworkAclSubnetsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateNetworkAclSubnetsResponseParams `json:"Response"` } func (r *AssociateNetworkAclSubnetsResponse) ToJsonString() string { @@ -1090,6 +1539,15 @@ func (r *AssociateNetworkAclSubnetsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNetworkInterfaceSecurityGroupsRequestParams struct { + // 弹性网卡实例ID。形如:eni-pxir56ns。每次请求的实例的上限为100。 + NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` + + // 安全组实例ID,例如:sg-33ocnj9n,可通过DescribeSecurityGroups获取。每次请求的实例的上限为100。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type AssociateNetworkInterfaceSecurityGroupsRequest struct { *tchttp.BaseRequest @@ -1120,13 +1578,15 @@ func (r *AssociateNetworkInterfaceSecurityGroupsRequest) FromJsonString(s string return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AssociateNetworkInterfaceSecurityGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AssociateNetworkInterfaceSecurityGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AssociateNetworkInterfaceSecurityGroupsResponseParams `json:"Response"` } func (r *AssociateNetworkInterfaceSecurityGroupsResponse) ToJsonString() string { @@ -1140,6 +1600,18 @@ func (r *AssociateNetworkInterfaceSecurityGroupsResponse) FromJsonString(s strin return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachCcnInstancesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 关联网络实例列表 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` + + // CCN所属UIN(根账号),默认当前账号所属UIN + CcnUin *string `json:"CcnUin,omitempty" name:"CcnUin"` +} + type AttachCcnInstancesRequest struct { *tchttp.BaseRequest @@ -1174,13 +1646,15 @@ func (r *AttachCcnInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachCcnInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AttachCcnInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AttachCcnInstancesResponseParams `json:"Response"` } func (r *AttachCcnInstancesResponse) ToJsonString() string { @@ -1194,6 +1668,15 @@ func (r *AttachCcnInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachClassicLinkVpcRequestParams struct { + // VPC实例ID + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // CVM实例ID + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type AttachClassicLinkVpcRequest struct { *tchttp.BaseRequest @@ -1224,13 +1707,15 @@ func (r *AttachClassicLinkVpcRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachClassicLinkVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AttachClassicLinkVpcResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AttachClassicLinkVpcResponseParams `json:"Response"` } func (r *AttachClassicLinkVpcResponse) ToJsonString() string { @@ -1244,6 +1729,18 @@ func (r *AttachClassicLinkVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachNetworkInterfaceRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // CVM实例ID。形如:ins-r8hr2upy。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 网卡的挂载类型:0 标准型,1扩展型,默认值0。 + AttachType *uint64 `json:"AttachType,omitempty" name:"AttachType"` +} + type AttachNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -1278,13 +1775,15 @@ func (r *AttachNetworkInterfaceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachNetworkInterfaceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AttachNetworkInterfaceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AttachNetworkInterfaceResponseParams `json:"Response"` } func (r *AttachNetworkInterfaceResponse) ToJsonString() string { @@ -1298,13 +1797,86 @@ func (r *AttachNetworkInterfaceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AttachSnapshotInstancesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 关联实例信息。 + Instances []*SnapshotInstance `json:"Instances,omitempty" name:"Instances"` +} + +type AttachSnapshotInstancesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 关联实例信息。 + Instances []*SnapshotInstance `json:"Instances,omitempty" name:"Instances"` +} + +func (r *AttachSnapshotInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AttachSnapshotInstancesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyId") + delete(f, "Instances") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AttachSnapshotInstancesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type AttachSnapshotInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type AttachSnapshotInstancesResponse struct { + *tchttp.BaseResponse + Response *AttachSnapshotInstancesResponseParams `json:"Response"` +} + +func (r *AttachSnapshotInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *AttachSnapshotInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type AuditCrossBorderComplianceRequestParams struct { + // 服务商, 可选值:`UNICOM`。 + ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` + + // 表单唯一`ID`。可通过[DescribeCrossBorderCompliance](https://cloud.tencent.com/document/product/215/47838)接口查询ComplianceId信息 + ComplianceId *uint64 `json:"ComplianceId,omitempty" name:"ComplianceId"` + + // 通过:`APPROVED `,拒绝:`DENY`。 + AuditBehavior *string `json:"AuditBehavior,omitempty" name:"AuditBehavior"` +} + type AuditCrossBorderComplianceRequest struct { *tchttp.BaseRequest // 服务商, 可选值:`UNICOM`。 ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` - // 表单唯一`ID`。 + // 表单唯一`ID`。可通过[DescribeCrossBorderCompliance](https://cloud.tencent.com/document/product/215/47838)接口查询ComplianceId信息 ComplianceId *uint64 `json:"ComplianceId,omitempty" name:"ComplianceId"` // 通过:`APPROVED `,拒绝:`DENY`。 @@ -1332,13 +1904,15 @@ func (r *AuditCrossBorderComplianceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type AuditCrossBorderComplianceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type AuditCrossBorderComplianceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *AuditCrossBorderComplianceResponseParams `json:"Response"` } func (r *AuditCrossBorderComplianceResponse) ToJsonString() string { @@ -1352,12 +1926,19 @@ func (r *AuditCrossBorderComplianceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type BandwidthPackage struct { +type BackupPolicy struct { + // 备份周期时间,取值为monday, tuesday, wednesday, thursday, friday, saturday, sunday。 + BackupDay *string `json:"BackupDay,omitempty" name:"BackupDay"` + + // 备份时间点,格式:HH:mm:ss。 + BackupTime *string `json:"BackupTime,omitempty" name:"BackupTime"` +} +type BandwidthPackage struct { // 带宽包唯一标识Id BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` - // 带宽包类型,包括'BGP','SINGLEISP','ANYCAST' + // 带宽包类型,包括'BGP','SINGLEISP','ANYCAST','SINGLEISP_CMCC','SINGLEISP_CTCC','SINGLEISP_CUCC' NetworkType *string `json:"NetworkType,omitempty" name:"NetworkType"` // 带宽包计费类型,包括'TOP5_POSTPAID_BY_MONTH'和'PERCENT95_POSTPAID_BY_MONTH' @@ -1380,13 +1961,25 @@ type BandwidthPackage struct { } type BandwidthPackageBillBandwidth struct { - // 当前计费用量,单位为 Mbps - BandwidthUsage *uint64 `json:"BandwidthUsage,omitempty" name:"BandwidthUsage"` + BandwidthUsage *float64 `json:"BandwidthUsage,omitempty" name:"BandwidthUsage"` } -type CCN struct { +type BatchModifySnapshotPolicy struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + // 快照策略名称。 + SnapshotPolicyName *string `json:"SnapshotPolicyName,omitempty" name:"SnapshotPolicyName"` + + // 备份策略。 + BackupPolicies []*BackupPolicy `json:"BackupPolicies,omitempty" name:"BackupPolicies"` + + // 快照保留时间,支持1~365天。 + KeepTime *uint64 `json:"KeepTime,omitempty" name:"KeepTime"` +} + +type CCN struct { // 云联网唯一ID CcnId *string `json:"CcnId,omitempty" name:"CcnId"` @@ -1412,27 +2005,34 @@ type CCN struct { // 注意:此字段可能返回 null,表示取不到有效值。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` - // 限速类型,INTER_REGION_LIMIT为地域间限速;OUTER_REGION_LIMIT为地域出口限速。 + // 限速类型,`INTER_REGION_LIMIT` 为地域间限速;`OUTER_REGION_LIMIT` 为地域出口限速。 // 注意:此字段可能返回 null,表示取不到有效值。 BandwidthLimitType *string `json:"BandwidthLimitType,omitempty" name:"BandwidthLimitType"` // 标签键值对。 TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` - // 是否支持云联网路由优先级的功能。False:不支持,True:支持。 + // 是否支持云联网路由优先级的功能。`False`:不支持,`True`:支持。 RoutePriorityFlag *bool `json:"RoutePriorityFlag,omitempty" name:"RoutePriorityFlag"` // 实例关联的路由表个数。 // 注意:此字段可能返回 null,表示取不到有效值。 RouteTableCount *uint64 `json:"RouteTableCount,omitempty" name:"RouteTableCount"` - // 是否开启云联网多路由表特性。False:未开启,True:开启。 + // 是否开启云联网多路由表特性。`False`:未开启,`True`:开启。 // 注意:此字段可能返回 null,表示取不到有效值。 RouteTableFlag *bool `json:"RouteTableFlag,omitempty" name:"RouteTableFlag"` -} -type CcnAttachedInstance struct { + // `true`:实例已被封禁,流量不通,`false`:解封禁。 + // 注意:此字段可能返回 null,表示取不到有效值。 + IsSecurityLock *bool `json:"IsSecurityLock,omitempty" name:"IsSecurityLock"` + // 是否开启云联网路由传播策略。`False` 未开启,`True` 开启。 + // 注意:此字段可能返回 null,表示取不到有效值。 + RouteBroadcastPolicyFlag *bool `json:"RouteBroadcastPolicyFlag,omitempty" name:"RouteBroadcastPolicyFlag"` +} + +type CcnAttachedInstance struct { // 云联网实例ID。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` @@ -1490,8 +2090,56 @@ type CcnAttachedInstance struct { RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` } -type CcnBandwidthInfo struct { +type CcnBandwidth struct { + // 带宽所属的云联网ID。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 实例的创建时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 实例的过期时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + ExpiredTime *string `json:"ExpiredTime,omitempty" name:"ExpiredTime"` + + // 带宽实例的唯一ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + RegionFlowControlId *string `json:"RegionFlowControlId,omitempty" name:"RegionFlowControlId"` + + // 带宽是否自动续费的标记。 + // 注意:此字段可能返回 null,表示取不到有效值。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` + + // 描述带宽的地域和限速上限信息。在地域间限速的情况下才会返回参数,出口限速模式不返回。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CcnRegionBandwidthLimit *CcnRegionBandwidthLimitInfo `json:"CcnRegionBandwidthLimit,omitempty" name:"CcnRegionBandwidthLimit"` + + // 云市场实例ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + MarketId *string `json:"MarketId,omitempty" name:"MarketId"` + + // 实例所属用户主账号ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + UserAccountID *string `json:"UserAccountID,omitempty" name:"UserAccountID"` + + // 是否跨境,`true`表示跨境,反之不跨境。 + // 注意:此字段可能返回 null,表示取不到有效值。 + IsCrossBorder *bool `json:"IsCrossBorder,omitempty" name:"IsCrossBorder"` + // `true`表示封禁,地域间流量不通,`false`解禁,地域间流量正常 + // 注意:此字段可能返回 null,表示取不到有效值。 + IsSecurityLock *bool `json:"IsSecurityLock,omitempty" name:"IsSecurityLock"` + + // `POSTPAID`表示后付费,`PREPAID`表示预付费。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 实例更新时间 + // 注意:此字段可能返回 null,表示取不到有效值。 + UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` +} + +type CcnBandwidthInfo struct { // 带宽所属的云联网ID。 // 注意:此字段可能返回 null,表示取不到有效值。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` @@ -1515,10 +2163,28 @@ type CcnBandwidthInfo struct { // 描述带宽的地域和限速上限信息。在地域间限速的情况下才会返回参数,出口限速模式不返回。 // 注意:此字段可能返回 null,表示取不到有效值。 CcnRegionBandwidthLimit *CcnRegionBandwidthLimit `json:"CcnRegionBandwidthLimit,omitempty" name:"CcnRegionBandwidthLimit"` + + // 云市场实例ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + MarketId *string `json:"MarketId,omitempty" name:"MarketId"` + + // 资源绑定的标签列表 + // 注意:此字段可能返回 null,表示取不到有效值。 + TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` } -type CcnInstance struct { +type CcnFlowLock struct { + // 带宽所属的云联网ID。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 实例所属用户主账号ID。 + UserAccountID *string `json:"UserAccountID,omitempty" name:"UserAccountID"` + + // 带宽实例的唯一ID。作为`UnlockCcnBandwidths`接口和`LockCcnBandwidths`接口的入参时,该字段必传。 + RegionFlowControlId *string `json:"RegionFlowControlId,omitempty" name:"RegionFlowControlId"` +} +type CcnInstance struct { // 关联实例ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -1540,8 +2206,10 @@ type CcnInstance struct { RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` } -type CcnRegionBandwidthLimit struct { +type CcnInstanceInfo struct { +} +type CcnRegionBandwidthLimit struct { // 地域,例如:ap-guangzhou Region *string `json:"Region,omitempty" name:"Region"` @@ -1559,8 +2227,21 @@ type CcnRegionBandwidthLimit struct { DstIsBm *bool `json:"DstIsBm,omitempty" name:"DstIsBm"` } -type CcnRoute struct { +type CcnRegionBandwidthLimitInfo struct { + // 源地域,例如:ap-shanghai + // 注意:此字段可能返回 null,表示取不到有效值。 + SourceRegion *string `json:"SourceRegion,omitempty" name:"SourceRegion"` + + // 目的地域, 例如:ap-shanghai + // 注意:此字段可能返回 null,表示取不到有效值。 + DestinationRegion *string `json:"DestinationRegion,omitempty" name:"DestinationRegion"` + + // 出带宽上限,单位:Mbps。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BandwidthLimit *uint64 `json:"BandwidthLimit,omitempty" name:"BandwidthLimit"` +} +type CcnRoute struct { // 路由策略ID RouteId *string `json:"RouteId,omitempty" name:"RouteId"` @@ -1601,16 +2282,28 @@ type CcnRoute struct { InstanceExtraName *string `json:"InstanceExtraName,omitempty" name:"InstanceExtraName"` } +// Predefined struct for user +type CheckAssistantCidrRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 待添加的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + NewCidrBlocks []*string `json:"NewCidrBlocks,omitempty" name:"NewCidrBlocks"` + + // 待删除的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + OldCidrBlocks []*string `json:"OldCidrBlocks,omitempty" name:"OldCidrBlocks"` +} + type CheckAssistantCidrRequest struct { *tchttp.BaseRequest // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 待添加的负载CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + // 待添加的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 NewCidrBlocks []*string `json:"NewCidrBlocks,omitempty" name:"NewCidrBlocks"` - // 待删除的负载CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + // 待删除的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。入参NewCidrBlocks和OldCidrBlocks至少需要其一。 OldCidrBlocks []*string `json:"OldCidrBlocks,omitempty" name:"OldCidrBlocks"` } @@ -1635,16 +2328,18 @@ func (r *CheckAssistantCidrRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CheckAssistantCidrResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CheckAssistantCidrResponseParams struct { + // 冲突资源信息数组。 + ConflictSourceSet []*ConflictSource `json:"ConflictSourceSet,omitempty" name:"ConflictSourceSet"` - // 冲突资源信息数组。 - ConflictSourceSet []*ConflictSource `json:"ConflictSourceSet,omitempty" name:"ConflictSourceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CheckAssistantCidrResponse struct { + *tchttp.BaseResponse + Response *CheckAssistantCidrResponseParams `json:"Response"` } func (r *CheckAssistantCidrResponse) ToJsonString() string { @@ -1658,6 +2353,12 @@ func (r *CheckAssistantCidrResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CheckDefaultSubnetRequestParams struct { + // 子网所在的可用区ID,不同子网选择不同可用区可以做跨可用区灾备。 + Zone *string `json:"Zone,omitempty" name:"Zone"` +} + type CheckDefaultSubnetRequest struct { *tchttp.BaseRequest @@ -1684,16 +2385,18 @@ func (r *CheckDefaultSubnetRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CheckDefaultSubnetResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CheckDefaultSubnetResponseParams struct { + // 检查结果。true为可以创建默认子网,false为不可以创建默认子网。 + Result *bool `json:"Result,omitempty" name:"Result"` - // 检查结果。true为可以创建默认子网,false为不可以创建默认子网。 - Result *bool `json:"Result,omitempty" name:"Result"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CheckDefaultSubnetResponse struct { + *tchttp.BaseResponse + Response *CheckDefaultSubnetResponseParams `json:"Response"` } func (r *CheckDefaultSubnetResponse) ToJsonString() string { @@ -1707,18 +2410,31 @@ func (r *CheckDefaultSubnetResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CheckNetDetectStateRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type CheckNetDetectStateRequestParams struct { // 探测目的IPv4地址数组,最多两个。 DetectDestinationIp []*string `json:"DetectDestinationIp,omitempty" name:"DetectDestinationIp"` + // 网络探测实例ID。形如:netd-12345678。该参数与(VpcId,SubnetId,NetDetectName),至少要有一个。当NetDetectId存在时,使用NetDetectId。 + NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` + + // `VPC`实例`ID`。形如:`vpc-12345678`。该参数与(SubnetId,NetDetectName)配合使用,与NetDetectId至少要有一个。当NetDetectId存在时,使用NetDetectId。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID。形如:subnet-12345678。该参数与(VpcId,NetDetectName)配合使用,与NetDetectId至少要有一个。当NetDetectId存在时,使用NetDetectId。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 网络探测名称,最大长度不能超过60个字节。该参数与(VpcId,SubnetId)配合使用,与NetDetectId至少要有一个。当NetDetectId存在时,使用NetDetectId。 + NetDetectName *string `json:"NetDetectName,omitempty" name:"NetDetectName"` + // 下一跳类型,目前我们支持的类型有: // VPN:VPN网关; // DIRECTCONNECT:专线网关; // PEERCONNECTION:对等连接; // NAT:NAT网关; // NORMAL_CVM:普通云服务器; + // CCN:云联网网关; + // NONEXTHOP:无下一跳; NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` // 下一跳目的网关,取值与“下一跳类型”相关: @@ -1727,7 +2443,16 @@ type CheckNetDetectStateRequest struct { // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` +} + +type CheckNetDetectStateRequest struct { + *tchttp.BaseRequest + + // 探测目的IPv4地址数组,最多两个。 + DetectDestinationIp []*string `json:"DetectDestinationIp,omitempty" name:"DetectDestinationIp"` // 网络探测实例ID。形如:netd-12345678。该参数与(VpcId,SubnetId,NetDetectName),至少要有一个。当NetDetectId存在时,使用NetDetectId。 NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` @@ -1740,6 +2465,26 @@ type CheckNetDetectStateRequest struct { // 网络探测名称,最大长度不能超过60个字节。该参数与(VpcId,SubnetId)配合使用,与NetDetectId至少要有一个。当NetDetectId存在时,使用NetDetectId。 NetDetectName *string `json:"NetDetectName,omitempty" name:"NetDetectName"` + + // 下一跳类型,目前我们支持的类型有: + // VPN:VPN网关; + // DIRECTCONNECT:专线网关; + // PEERCONNECTION:对等连接; + // NAT:NAT网关; + // NORMAL_CVM:普通云服务器; + // CCN:云联网网关; + // NONEXTHOP:无下一跳; + NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` + + // 下一跳目的网关,取值与“下一跳类型”相关: + // 下一跳类型为VPN,取值VPN网关ID,形如:vpngw-12345678; + // 下一跳类型为DIRECTCONNECT,取值专线网关ID,形如:dcg-12345678; + // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; + // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; + // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; + NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` } func (r *CheckNetDetectStateRequest) ToJsonString() string { @@ -1755,28 +2500,30 @@ func (r *CheckNetDetectStateRequest) FromJsonString(s string) error { return err } delete(f, "DetectDestinationIp") - delete(f, "NextHopType") - delete(f, "NextHopDestination") delete(f, "NetDetectId") delete(f, "VpcId") delete(f, "SubnetId") delete(f, "NetDetectName") + delete(f, "NextHopType") + delete(f, "NextHopDestination") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CheckNetDetectStateRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CheckNetDetectStateResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CheckNetDetectStateResponseParams struct { + // 网络探测验证结果对象数组。 + NetDetectIpStateSet []*NetDetectIpState `json:"NetDetectIpStateSet,omitempty" name:"NetDetectIpStateSet"` - // 网络探测验证结果对象数组。 - NetDetectIpStateSet []*NetDetectIpState `json:"NetDetectIpStateSet,omitempty" name:"NetDetectIpStateSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CheckNetDetectStateResponse struct { + *tchttp.BaseResponse + Response *CheckNetDetectStateResponseParams `json:"Response"` } func (r *CheckNetDetectStateResponse) ToJsonString() string { @@ -1791,7 +2538,6 @@ func (r *CheckNetDetectStateResponse) FromJsonString(s string) error { } type CidrForCcn struct { - // local cidr值。 // 注意:此字段可能返回 null,表示取不到有效值。 Cidr *string `json:"Cidr,omitempty" name:"Cidr"` @@ -1802,7 +2548,6 @@ type CidrForCcn struct { } type ClassicLinkInstance struct { - // VPC实例ID VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -1810,10 +2555,28 @@ type ClassicLinkInstance struct { InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` } +// Predefined struct for user +type CloneSecurityGroupRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组名称,可任意命名,但不得超过60个字符。未提供参数时,克隆后的安全组名称和SecurityGroupId对应的安全组名称相同。 + GroupName *string `json:"GroupName,omitempty" name:"GroupName"` + + // 安全组备注,最多100个字符。未提供参数时,克隆后的安全组备注和SecurityGroupId对应的安全组备注相同。 + GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` + + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` + + // 源Region,跨地域克隆安全组时,需要传入源安全组所属地域信息,例如:克隆广州的安全组到上海,则这里需要传入广州安全的地域信息:ap-guangzhou。 + RemoteRegion *string `json:"RemoteRegion,omitempty" name:"RemoteRegion"` +} + type CloneSecurityGroupRequest struct { *tchttp.BaseRequest - // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` // 安全组名称,可任意命名,但不得超过60个字符。未提供参数时,克隆后的安全组名称和SecurityGroupId对应的安全组名称相同。 @@ -1822,7 +2585,7 @@ type CloneSecurityGroupRequest struct { // 安全组备注,最多100个字符。未提供参数时,克隆后的安全组备注和SecurityGroupId对应的安全组备注相同。 GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` - // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` // 源Region,跨地域克隆安全组时,需要传入源安全组所属地域信息,例如:克隆广州的安全组到上海,则这里需要传入广州安全的地域信息:ap-guangzhou。 @@ -1852,17 +2615,19 @@ func (r *CloneSecurityGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CloneSecurityGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CloneSecurityGroupResponseParams struct { + // 安全组对象。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` - // 安全组对象。 - // 注意:此字段可能返回 null,表示取不到有效值。 - SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CloneSecurityGroupResponse struct { + *tchttp.BaseResponse + Response *CloneSecurityGroupResponseParams `json:"Response"` } func (r *CloneSecurityGroupResponse) ToJsonString() string { @@ -1877,7 +2642,6 @@ func (r *CloneSecurityGroupResponse) FromJsonString(s string) error { } type ConflictItem struct { - // 冲突资源的ID ConfilctId *string `json:"ConfilctId,omitempty" name:"ConfilctId"` @@ -1886,7 +2650,6 @@ type ConflictItem struct { } type ConflictSource struct { - // 冲突资源ID ConflictSourceId *string `json:"ConflictSourceId,omitempty" name:"ConflictSourceId"` @@ -1897,13 +2660,22 @@ type ConflictSource struct { ConflictItemSet []*ConflictItem `json:"ConflictItemSet,omitempty" name:"ConflictItemSet"` } +// Predefined struct for user +type CreateAddressTemplateGroupRequestParams struct { + // IP地址模板集合名称。 + AddressTemplateGroupName *string `json:"AddressTemplateGroupName,omitempty" name:"AddressTemplateGroupName"` + + // IP地址模板实例ID,例如:ipm-mdunqeb6。 + AddressTemplateIds []*string `json:"AddressTemplateIds,omitempty" name:"AddressTemplateIds"` +} + type CreateAddressTemplateGroupRequest struct { *tchttp.BaseRequest - // IP地址模版集合名称。 + // IP地址模板集合名称。 AddressTemplateGroupName *string `json:"AddressTemplateGroupName,omitempty" name:"AddressTemplateGroupName"` - // IP地址模版实例ID,例如:ipm-mdunqeb6。 + // IP地址模板实例ID,例如:ipm-mdunqeb6。 AddressTemplateIds []*string `json:"AddressTemplateIds,omitempty" name:"AddressTemplateIds"` } @@ -1927,16 +2699,18 @@ func (r *CreateAddressTemplateGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateAddressTemplateGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAddressTemplateGroupResponseParams struct { + // IP地址模板集合对象。 + AddressTemplateGroup *AddressTemplateGroup `json:"AddressTemplateGroup,omitempty" name:"AddressTemplateGroup"` - // IP地址模板集合对象。 - AddressTemplateGroup *AddressTemplateGroup `json:"AddressTemplateGroup,omitempty" name:"AddressTemplateGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAddressTemplateGroupResponse struct { + *tchttp.BaseResponse + Response *CreateAddressTemplateGroupResponseParams `json:"Response"` } func (r *CreateAddressTemplateGroupResponse) ToJsonString() string { @@ -1950,10 +2724,22 @@ func (r *CreateAddressTemplateGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateAddressTemplateRequestParams struct { + // IP地址模板名称。 + AddressTemplateName *string `json:"AddressTemplateName,omitempty" name:"AddressTemplateName"` + + // 地址信息,支持 IP、CIDR、IP 范围。Addresses与AddressesExtra必填其一。 + Addresses []*string `json:"Addresses,omitempty" name:"Addresses"` + + // 地址信息,支持携带备注,支持 IP、CIDR、IP 范围。Addresses与AddressesExtra必填其一。 + AddressesExtra []*AddressInfo `json:"AddressesExtra,omitempty" name:"AddressesExtra"` +} + type CreateAddressTemplateRequest struct { *tchttp.BaseRequest - // IP地址模版名称 + // IP地址模板名称。 AddressTemplateName *string `json:"AddressTemplateName,omitempty" name:"AddressTemplateName"` // 地址信息,支持 IP、CIDR、IP 范围。Addresses与AddressesExtra必填其一。 @@ -1984,16 +2770,18 @@ func (r *CreateAddressTemplateRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateAddressTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAddressTemplateResponseParams struct { + // IP地址模板对象。 + AddressTemplate *AddressTemplate `json:"AddressTemplate,omitempty" name:"AddressTemplate"` - // IP地址模板对象。 - AddressTemplate *AddressTemplate `json:"AddressTemplate,omitempty" name:"AddressTemplate"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAddressTemplateResponse struct { + *tchttp.BaseResponse + Response *CreateAddressTemplateResponseParams `json:"Response"` } func (r *CreateAddressTemplateResponse) ToJsonString() string { @@ -2007,6 +2795,42 @@ func (r *CreateAddressTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateAndAttachNetworkInterfaceRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 弹性网卡名称,最大长度不能超过60个字节。 + NetworkInterfaceName *string `json:"NetworkInterfaceName,omitempty" name:"NetworkInterfaceName"` + + // 弹性网卡所在的子网实例ID,例如:subnet-0ap8nwca。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 云服务器实例ID。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 指定的内网IP信息,单次最多指定10个。 + PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` + + // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配额数。 + SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + + // 指定绑定的安全组,例如:['sg-1dd51d']。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 弹性网卡描述,可任意命名,但不得超过60个字符。 + NetworkInterfaceDescription *string `json:"NetworkInterfaceDescription,omitempty" name:"NetworkInterfaceDescription"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 绑定类型:0 标准型 1 扩展型。 + AttachType *uint64 `json:"AttachType,omitempty" name:"AttachType"` +} + type CreateAndAttachNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -2025,16 +2849,19 @@ type CreateAndAttachNetworkInterfaceRequest struct { // 指定的内网IP信息,单次最多指定10个。 PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` - // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配数。 + // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配额数。 SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + // 指定绑定的安全组,例如:['sg-1dd51d']。 SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` // 弹性网卡描述,可任意命名,但不得超过60个字符。 NetworkInterfaceDescription *string `json:"NetworkInterfaceDescription,omitempty" name:"NetworkInterfaceDescription"` - // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` // 绑定类型:0 标准型 1 扩展型。 @@ -2059,6 +2886,7 @@ func (r *CreateAndAttachNetworkInterfaceRequest) FromJsonString(s string) error delete(f, "InstanceId") delete(f, "PrivateIpAddresses") delete(f, "SecondaryPrivateIpAddressCount") + delete(f, "QosLevel") delete(f, "SecurityGroupIds") delete(f, "NetworkInterfaceDescription") delete(f, "Tags") @@ -2069,16 +2897,18 @@ func (r *CreateAndAttachNetworkInterfaceRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type CreateAndAttachNetworkInterfaceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAndAttachNetworkInterfaceResponseParams struct { + // 弹性网卡实例。 + NetworkInterface *NetworkInterface `json:"NetworkInterface,omitempty" name:"NetworkInterface"` - // 弹性网卡实例。 - NetworkInterface *NetworkInterface `json:"NetworkInterface,omitempty" name:"NetworkInterface"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAndAttachNetworkInterfaceResponse struct { + *tchttp.BaseResponse + Response *CreateAndAttachNetworkInterfaceResponseParams `json:"Response"` } func (r *CreateAndAttachNetworkInterfaceResponse) ToJsonString() string { @@ -2092,6 +2922,15 @@ func (r *CreateAndAttachNetworkInterfaceResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateAssistantCidrRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"] + CidrBlocks []*string `json:"CidrBlocks,omitempty" name:"CidrBlocks"` +} + type CreateAssistantCidrRequest struct { *tchttp.BaseRequest @@ -2122,17 +2961,19 @@ func (r *CreateAssistantCidrRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateAssistantCidrResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateAssistantCidrResponseParams struct { + // 辅助CIDR数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` - // 辅助CIDR数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateAssistantCidrResponse struct { + *tchttp.BaseResponse + Response *CreateAssistantCidrResponseParams `json:"Response"` } func (r *CreateAssistantCidrResponse) ToJsonString() string { @@ -2146,9 +2987,8 @@ func (r *CreateAssistantCidrResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateBandwidthPackageRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type CreateBandwidthPackageRequestParams struct { // 带宽包类型, 默认值: BGP, 可选值: //
      • BGP: 普通BGP共享带宽包
      • //
      • HIGH_QUALITY_BGP: 精品BGP共享带宽包
      • @@ -2174,6 +3014,42 @@ type CreateBandwidthPackageRequest struct { // 带宽包协议类型。当前支持'ipv4'和'ipv6'协议带宽包,默认值是'ipv4'。 Protocol *string `json:"Protocol,omitempty" name:"Protocol"` + + // 预付费包月带宽包的购买时长,单位: 月,取值范围: 1~60。 + TimeSpan *uint64 `json:"TimeSpan,omitempty" name:"TimeSpan"` +} + +type CreateBandwidthPackageRequest struct { + *tchttp.BaseRequest + + // 带宽包类型, 默认值: BGP, 可选值: + //
      • BGP: 普通BGP共享带宽包
      • + //
      • HIGH_QUALITY_BGP: 精品BGP共享带宽包
      • + NetworkType *string `json:"NetworkType,omitempty" name:"NetworkType"` + + // 带宽包计费类型, 默认为: TOP5_POSTPAID_BY_MONTH, 可选值: + //
      • TOP5_POSTPAID_BY_MONTH: 按月后付费TOP5计费
      • + //
      • PERCENT95_POSTPAID_BY_MONTH: 按月后付费月95计费
      • + //
      • FIXED_PREPAID_BY_MONTH: 包月预付费计费
      • + ChargeType *string `json:"ChargeType,omitempty" name:"ChargeType"` + + // 带宽包名称。 + BandwidthPackageName *string `json:"BandwidthPackageName,omitempty" name:"BandwidthPackageName"` + + // 带宽包数量(传统账户类型只能填1), 标准账户类型取值范围为1~20。 + BandwidthPackageCount *uint64 `json:"BandwidthPackageCount,omitempty" name:"BandwidthPackageCount"` + + // 带宽包限速大小。单位:Mbps,-1表示不限速。该功能当前内测中,暂不对外开放。 + InternetMaxBandwidth *int64 `json:"InternetMaxBandwidth,omitempty" name:"InternetMaxBandwidth"` + + // 需要关联的标签列表。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 带宽包协议类型。当前支持'ipv4'和'ipv6'协议带宽包,默认值是'ipv4'。 + Protocol *string `json:"Protocol,omitempty" name:"Protocol"` + + // 预付费包月带宽包的购买时长,单位: 月,取值范围: 1~60。 + TimeSpan *uint64 `json:"TimeSpan,omitempty" name:"TimeSpan"` } func (r *CreateBandwidthPackageRequest) ToJsonString() string { @@ -2195,25 +3071,28 @@ func (r *CreateBandwidthPackageRequest) FromJsonString(s string) error { delete(f, "InternetMaxBandwidth") delete(f, "Tags") delete(f, "Protocol") + delete(f, "TimeSpan") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateBandwidthPackageRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateBandwidthPackageResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateBandwidthPackageResponseParams struct { + // 带宽包唯一ID。 + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` - // 带宽包唯一ID。 - BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + // 带宽包唯一ID列表(申请数量大于1时有效)。 + BandwidthPackageIds []*string `json:"BandwidthPackageIds,omitempty" name:"BandwidthPackageIds"` - // 带宽包唯一ID列表(申请数量大于1时有效)。 - BandwidthPackageIds []*string `json:"BandwidthPackageIds,omitempty" name:"BandwidthPackageIds"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateBandwidthPackageResponse struct { + *tchttp.BaseResponse + Response *CreateBandwidthPackageResponseParams `json:"Response"` } func (r *CreateBandwidthPackageResponse) ToJsonString() string { @@ -2227,6 +3106,27 @@ func (r *CreateBandwidthPackageResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateCcnRequestParams struct { + // CCN名称,最大长度不能超过60个字节。 + CcnName *string `json:"CcnName,omitempty" name:"CcnName"` + + // CCN描述信息,最大长度不能超过100个字节。 + CcnDescription *string `json:"CcnDescription,omitempty" name:"CcnDescription"` + + // CCN服务质量,`PT`:白金,`AU`:金,`AG`:银,默认为`AU`。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + + // 计费模式,`PREPAID`:表示预付费,即包年包月,`POSTPAID`:表示后付费,即按量计费。默认:`POSTPAID`。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 限速类型,`OUTER_REGION_LIMIT`表示地域出口限速,`INTER_REGION_LIMIT`为地域间限速,默认为`OUTER_REGION_LIMIT`。预付费模式仅支持地域间限速,后付费模式支持地域间限速和地域出口限速。 + BandwidthLimitType *string `json:"BandwidthLimitType,omitempty" name:"BandwidthLimitType"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + type CreateCcnRequest struct { *tchttp.BaseRequest @@ -2236,13 +3136,13 @@ type CreateCcnRequest struct { // CCN描述信息,最大长度不能超过100个字节。 CcnDescription *string `json:"CcnDescription,omitempty" name:"CcnDescription"` - // CCN服务质量,'PT':白金,'AU':金,'AG':银,默认为‘AU’。 + // CCN服务质量,`PT`:白金,`AU`:金,`AG`:银,默认为`AU`。 QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` - // 计费模式,PREPAID:表示预付费,即包年包月,POSTPAID:表示后付费,即按量计费。默认:POSTPAID。 + // 计费模式,`PREPAID`:表示预付费,即包年包月,`POSTPAID`:表示后付费,即按量计费。默认:`POSTPAID`。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` - // 限速类型,OUTER_REGION_LIMIT表示地域出口限速,INTER_REGION_LIMIT为地域间限速,默认为OUTER_REGION_LIMIT。预付费模式仅支持地域间限速,后付费模式支持地域间限速和地域出口限速。 + // 限速类型,`OUTER_REGION_LIMIT`表示地域出口限速,`INTER_REGION_LIMIT`为地域间限速,默认为`OUTER_REGION_LIMIT`。预付费模式仅支持地域间限速,后付费模式支持地域间限速和地域出口限速。 BandwidthLimitType *string `json:"BandwidthLimitType,omitempty" name:"BandwidthLimitType"` // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] @@ -2273,16 +3173,18 @@ func (r *CreateCcnRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateCcnResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateCcnResponseParams struct { + // 云联网(CCN)对象。 + Ccn *CCN `json:"Ccn,omitempty" name:"Ccn"` - // 云联网(CCN)对象。 - Ccn *CCN `json:"Ccn,omitempty" name:"Ccn"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateCcnResponse struct { + *tchttp.BaseResponse + Response *CreateCcnResponseParams `json:"Response"` } func (r *CreateCcnResponse) ToJsonString() string { @@ -2296,6 +3198,18 @@ func (r *CreateCcnResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateCustomerGatewayRequestParams struct { + // 对端网关名称,可任意命名,但不得超过60个字符。 + CustomerGatewayName *string `json:"CustomerGatewayName,omitempty" name:"CustomerGatewayName"` + + // 对端网关公网IP。 + IpAddress *string `json:"IpAddress,omitempty" name:"IpAddress"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + type CreateCustomerGatewayRequest struct { *tchttp.BaseRequest @@ -2330,16 +3244,18 @@ func (r *CreateCustomerGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateCustomerGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateCustomerGatewayResponseParams struct { + // 对端网关对象 + CustomerGateway *CustomerGateway `json:"CustomerGateway,omitempty" name:"CustomerGateway"` - // 对端网关对象 - CustomerGateway *CustomerGateway `json:"CustomerGateway,omitempty" name:"CustomerGateway"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateCustomerGatewayResponse struct { + *tchttp.BaseResponse + Response *CreateCustomerGatewayResponseParams `json:"Response"` } func (r *CreateCustomerGatewayResponse) ToJsonString() string { @@ -2353,6 +3269,12 @@ func (r *CreateCustomerGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDefaultSecurityGroupRequestParams struct { + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` +} + type CreateDefaultSecurityGroupRequest struct { *tchttp.BaseRequest @@ -2379,16 +3301,18 @@ func (r *CreateDefaultSecurityGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateDefaultSecurityGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateDefaultSecurityGroupResponseParams struct { + // 安全组对象。 + SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` - // 安全组对象。 - SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateDefaultSecurityGroupResponse struct { + *tchttp.BaseResponse + Response *CreateDefaultSecurityGroupResponseParams `json:"Response"` } func (r *CreateDefaultSecurityGroupResponse) ToJsonString() string { @@ -2402,6 +3326,15 @@ func (r *CreateDefaultSecurityGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDefaultVpcRequestParams struct { + // 子网所在的可用区,该参数可通过[DescribeZones](https://cloud.tencent.com/document/product/213/15707)接口获取,例如ap-guangzhou-1,不指定时将随机选择可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 是否强制返回默认VPC。 + Force *bool `json:"Force,omitempty" name:"Force"` +} + type CreateDefaultVpcRequest struct { *tchttp.BaseRequest @@ -2432,16 +3365,18 @@ func (r *CreateDefaultVpcRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateDefaultVpcResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateDefaultVpcResponseParams struct { + // 默认VPC和子网ID。 + Vpc *DefaultVpcSubnet `json:"Vpc,omitempty" name:"Vpc"` - // 默认VPC和子网ID - Vpc *DefaultVpcSubnet `json:"Vpc,omitempty" name:"Vpc"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateDefaultVpcResponse struct { + *tchttp.BaseResponse + Response *CreateDefaultVpcResponseParams `json:"Response"` } func (r *CreateDefaultVpcResponse) ToJsonString() string { @@ -2455,6 +3390,21 @@ func (r *CreateDefaultVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDhcpIpRequestParams struct { + // 私有网络`ID`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网`ID`。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // `DhcpIp`名称。 + DhcpIpName *string `json:"DhcpIpName,omitempty" name:"DhcpIpName"` + + // 新申请的内网IP地址个数。总数不能超过64个,为了兼容性,当前参数必填。 + SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` +} + type CreateDhcpIpRequest struct { *tchttp.BaseRequest @@ -2467,7 +3417,7 @@ type CreateDhcpIpRequest struct { // `DhcpIp`名称。 DhcpIpName *string `json:"DhcpIpName,omitempty" name:"DhcpIpName"` - // 新申请的内网IP地址个数。总数不能超过64个。 + // 新申请的内网IP地址个数。总数不能超过64个,为了兼容性,当前参数必填。 SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` } @@ -2493,16 +3443,18 @@ func (r *CreateDhcpIpRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateDhcpIpResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateDhcpIpResponseParams struct { + // 新创建的`DhcpIp`信息。 + DhcpIpSet []*DhcpIp `json:"DhcpIpSet,omitempty" name:"DhcpIpSet"` - // 新创建的`DhcpIp`信息 - DhcpIpSet []*DhcpIp `json:"DhcpIpSet,omitempty" name:"DhcpIpSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateDhcpIpResponse struct { + *tchttp.BaseResponse + Response *CreateDhcpIpResponseParams `json:"Response"` } func (r *CreateDhcpIpResponse) ToJsonString() string { @@ -2516,6 +3468,15 @@ func (r *CreateDhcpIpResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDirectConnectGatewayCcnRoutesRequestParams struct { + // 专线网关ID,形如:dcg-prpqlmg1 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 需要连通的IDC网段列表 + Routes []*DirectConnectGatewayCcnRoute `json:"Routes,omitempty" name:"Routes"` +} + type CreateDirectConnectGatewayCcnRoutesRequest struct { *tchttp.BaseRequest @@ -2546,13 +3507,15 @@ func (r *CreateDirectConnectGatewayCcnRoutesRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDirectConnectGatewayCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CreateDirectConnectGatewayCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CreateDirectConnectGatewayCcnRoutesResponseParams `json:"Response"` } func (r *CreateDirectConnectGatewayCcnRoutesResponse) ToJsonString() string { @@ -2566,6 +3529,35 @@ func (r *CreateDirectConnectGatewayCcnRoutesResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateDirectConnectGatewayRequestParams struct { + // 专线网关名称 + DirectConnectGatewayName *string `json:"DirectConnectGatewayName,omitempty" name:"DirectConnectGatewayName"` + + // 关联网络类型,可选值: + //
      • VPC - 私有网络
      • + //
      • CCN - 云联网
      • + NetworkType *string `json:"NetworkType,omitempty" name:"NetworkType"` + + //
      • NetworkType 为 VPC 时,这里传值为私有网络实例ID
      • + //
      • NetworkType 为 CCN 时,这里传值为云联网实例ID
      • + NetworkInstanceId *string `json:"NetworkInstanceId,omitempty" name:"NetworkInstanceId"` + + // 网关类型,可选值: + //
      • NORMAL - (默认)标准型,注:云联网只支持标准型
      • + //
      • NAT - NAT型
      • NAT类型支持网络地址转换配置,类型确定后不能修改;一个私有网络可以创建一个NAT类型的专线网关和一个非NAT类型的专线网关 + GatewayType *string `json:"GatewayType,omitempty" name:"GatewayType"` + + // 云联网路由发布模式,可选值:`standard`(标准模式)、`exquisite`(精细模式)。只有云联网类型专线网关才支持`ModeType`。 + ModeType *string `json:"ModeType,omitempty" name:"ModeType"` + + // 专线网关可用区 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 专线网关高可用区容灾组ID + HaZoneGroupId *string `json:"HaZoneGroupId,omitempty" name:"HaZoneGroupId"` +} + type CreateDirectConnectGatewayRequest struct { *tchttp.BaseRequest @@ -2621,16 +3613,18 @@ func (r *CreateDirectConnectGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateDirectConnectGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateDirectConnectGatewayResponseParams struct { + // 专线网关对象。 + DirectConnectGateway *DirectConnectGateway `json:"DirectConnectGateway,omitempty" name:"DirectConnectGateway"` - // 专线网关对象。 - DirectConnectGateway *DirectConnectGateway `json:"DirectConnectGateway,omitempty" name:"DirectConnectGateway"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateDirectConnectGatewayResponse struct { + *tchttp.BaseResponse + Response *CreateDirectConnectGatewayResponseParams `json:"Response"` } func (r *CreateDirectConnectGatewayResponse) ToJsonString() string { @@ -2644,32 +3638,77 @@ func (r *CreateDirectConnectGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateFlowLogRequestParams struct { + // 流日志实例名字。 + FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` + + // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE|CCN|NAT|DCG。 + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源唯一ID。 + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 流日志采集类型,ACCEPT|REJECT|ALL。 + TrafficType *string `json:"TrafficType,omitempty" name:"TrafficType"` + + // 私用网络ID或者统一ID,建议使用统一ID,当ResourceType为CCN时不填,其他类型必填。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 流日志实例描述。 + FlowLogDescription *string `json:"FlowLogDescription,omitempty" name:"FlowLogDescription"` + + // 流日志存储ID。 + CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 消费端类型:cls、ckafka。默认值cls。 + StorageType *string `json:"StorageType,omitempty" name:"StorageType"` + + // 流日志消费端信息,当消费端类型为ckafka时,必填。 + FlowLogStorage *FlowLogStorage `json:"FlowLogStorage,omitempty" name:"FlowLogStorage"` + + // 流日志存储ID对应的地域,不传递默认为本地域。 + CloudLogRegion *string `json:"CloudLogRegion,omitempty" name:"CloudLogRegion"` +} + type CreateFlowLogRequest struct { *tchttp.BaseRequest - // 流日志实例名字 + // 流日志实例名字。 FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` - // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE|CCN + // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE|CCN|NAT|DCG。 ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` - // 资源唯一ID + // 资源唯一ID。 ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` - // 流日志采集类型,ACCEPT|REJECT|ALL + // 流日志采集类型,ACCEPT|REJECT|ALL。 TrafficType *string `json:"TrafficType,omitempty" name:"TrafficType"` - // 流日志存储ID - CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` - // 私用网络ID或者统一ID,建议使用统一ID,当ResourceType为CCN时不填,其他类型必填。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 流日志实例描述 + // 流日志实例描述。 FlowLogDescription *string `json:"FlowLogDescription,omitempty" name:"FlowLogDescription"` - // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + // 流日志存储ID。 + CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 消费端类型:cls、ckafka。默认值cls。 + StorageType *string `json:"StorageType,omitempty" name:"StorageType"` + + // 流日志消费端信息,当消费端类型为ckafka时,必填。 + FlowLogStorage *FlowLogStorage `json:"FlowLogStorage,omitempty" name:"FlowLogStorage"` + + // 流日志存储ID对应的地域,不传递默认为本地域。 + CloudLogRegion *string `json:"CloudLogRegion,omitempty" name:"CloudLogRegion"` } func (r *CreateFlowLogRequest) ToJsonString() string { @@ -2688,26 +3727,31 @@ func (r *CreateFlowLogRequest) FromJsonString(s string) error { delete(f, "ResourceType") delete(f, "ResourceId") delete(f, "TrafficType") - delete(f, "CloudLogId") delete(f, "VpcId") delete(f, "FlowLogDescription") + delete(f, "CloudLogId") delete(f, "Tags") + delete(f, "StorageType") + delete(f, "FlowLogStorage") + delete(f, "CloudLogRegion") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateFlowLogRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateFlowLogResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateFlowLogResponseParams struct { + // 创建的流日志信息。 + FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` - // 创建的流日志信息 - FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateFlowLogResponse struct { + *tchttp.BaseResponse + Response *CreateFlowLogResponseParams `json:"Response"` } func (r *CreateFlowLogResponse) ToJsonString() string { @@ -2721,6 +3765,24 @@ func (r *CreateFlowLogResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateHaVipRequestParams struct { + // `HAVIP`所在私有网络`ID`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // `HAVIP`所在子网`ID`。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // `HAVIP`名称。 + HaVipName *string `json:"HaVipName,omitempty" name:"HaVipName"` + + // 指定虚拟IP地址,必须在`VPC`网段内且未被占用。不指定则自动分配。 + Vip *string `json:"Vip,omitempty" name:"Vip"` + + // `HAVIP`所在弹性网卡`ID`。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` +} + type CreateHaVipRequest struct { *tchttp.BaseRequest @@ -2735,6 +3797,9 @@ type CreateHaVipRequest struct { // 指定虚拟IP地址,必须在`VPC`网段内且未被占用。不指定则自动分配。 Vip *string `json:"Vip,omitempty" name:"Vip"` + + // `HAVIP`所在弹性网卡`ID`。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` } func (r *CreateHaVipRequest) ToJsonString() string { @@ -2753,22 +3818,25 @@ func (r *CreateHaVipRequest) FromJsonString(s string) error { delete(f, "SubnetId") delete(f, "HaVipName") delete(f, "Vip") + delete(f, "NetworkInterfaceId") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateHaVipRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateHaVipResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateHaVipResponseParams struct { + // `HAVIP`对象。 + HaVip *HaVip `json:"HaVip,omitempty" name:"HaVip"` - // `HAVIP`对象。 - HaVip *HaVip `json:"HaVip,omitempty" name:"HaVip"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateHaVipResponse struct { + *tchttp.BaseResponse + Response *CreateHaVipResponseParams `json:"Response"` } func (r *CreateHaVipResponse) ToJsonString() string { @@ -2782,6 +3850,18 @@ func (r *CreateHaVipResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateIp6TranslatorsRequestParams struct { + // 转换实例名称 + Ip6TranslatorName *string `json:"Ip6TranslatorName,omitempty" name:"Ip6TranslatorName"` + + // 创建转换实例数量,默认是1个 + Ip6TranslatorCount *int64 `json:"Ip6TranslatorCount,omitempty" name:"Ip6TranslatorCount"` + + // 转换实例运营商属性,可取"CMCC","CTCC","CUCC","BGP" + Ip6InternetServiceProvider *string `json:"Ip6InternetServiceProvider,omitempty" name:"Ip6InternetServiceProvider"` +} + type CreateIp6TranslatorsRequest struct { *tchttp.BaseRequest @@ -2816,16 +3896,18 @@ func (r *CreateIp6TranslatorsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateIp6TranslatorsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateIp6TranslatorsResponseParams struct { + // 转换实例的唯一ID数组,形如"ip6-xxxxxxxx" + Ip6TranslatorSet []*string `json:"Ip6TranslatorSet,omitempty" name:"Ip6TranslatorSet"` - // 转换实例的唯一ID数组,形如"ip6-xxxxxxxx" - Ip6TranslatorSet []*string `json:"Ip6TranslatorSet,omitempty" name:"Ip6TranslatorSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateIp6TranslatorsResponse struct { + *tchttp.BaseResponse + Response *CreateIp6TranslatorsResponseParams `json:"Response"` } func (r *CreateIp6TranslatorsResponse) ToJsonString() string { @@ -2839,16 +3921,28 @@ func (r *CreateIp6TranslatorsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateLocalGatewayRequestParams struct { + // 本地网关名称。 + LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` + + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` +} + type CreateLocalGatewayRequest struct { *tchttp.BaseRequest - // 本地网关名称 + // 本地网关名称。 LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` - // VPC实例ID + // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // CDC实例ID + // CDC实例ID。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` } @@ -2873,16 +3967,18 @@ func (r *CreateLocalGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateLocalGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateLocalGatewayResponseParams struct { + // 本地网关信息。 + LocalGateway *LocalGateway `json:"LocalGateway,omitempty" name:"LocalGateway"` - // 本地网关信息 - LocalGateway *LocalGateway `json:"LocalGateway,omitempty" name:"LocalGateway"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateLocalGatewayResponse struct { + *tchttp.BaseResponse + Response *CreateLocalGatewayResponseParams `json:"Response"` } func (r *CreateLocalGatewayResponse) ToJsonString() string { @@ -2896,9 +3992,8 @@ func (r *CreateLocalGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateNatGatewayDestinationIpPortTranslationNatRuleRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type CreateNatGatewayDestinationIpPortTranslationNatRuleRequestParams struct { // NAT网关的ID,形如:`nat-df45454`。 NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` @@ -2906,9 +4001,19 @@ type CreateNatGatewayDestinationIpPortTranslationNatRuleRequest struct { DestinationIpPortTranslationNatRules []*DestinationIpPortTranslationNatRule `json:"DestinationIpPortTranslationNatRules,omitempty" name:"DestinationIpPortTranslationNatRules"` } -func (r *CreateNatGatewayDestinationIpPortTranslationNatRuleRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) +type CreateNatGatewayDestinationIpPortTranslationNatRuleRequest struct { + *tchttp.BaseRequest + + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的端口转换规则。 + DestinationIpPortTranslationNatRules []*DestinationIpPortTranslationNatRule `json:"DestinationIpPortTranslationNatRules,omitempty" name:"DestinationIpPortTranslationNatRules"` +} + +func (r *CreateNatGatewayDestinationIpPortTranslationNatRuleRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) } // FromJsonString It is highly **NOT** recommended to use this function @@ -2926,13 +4031,15 @@ func (r *CreateNatGatewayDestinationIpPortTranslationNatRuleRequest) FromJsonStr return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNatGatewayDestinationIpPortTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CreateNatGatewayDestinationIpPortTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CreateNatGatewayDestinationIpPortTranslationNatRuleResponseParams `json:"Response"` } func (r *CreateNatGatewayDestinationIpPortTranslationNatRuleResponse) ToJsonString() string { @@ -2946,6 +4053,45 @@ func (r *CreateNatGatewayDestinationIpPortTranslationNatRuleResponse) FromJsonSt return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNatGatewayRequestParams struct { + // NAT网关名称 + NatGatewayName *string `json:"NatGatewayName,omitempty" name:"NatGatewayName"` + + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // NAT网关最大外网出带宽(单位:Mbps),支持的参数值:`20, 50, 100, 200, 500, 1000, 2000, 5000`,默认: `100Mbps`。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // NAT网关并发连接上限,支持参数值:`1000000、3000000、10000000`,默认值为`100000`。 + MaxConcurrentConnection *uint64 `json:"MaxConcurrentConnection,omitempty" name:"MaxConcurrentConnection"` + + // 需要申请的弹性IP个数,系统会按您的要求生产N个弹性IP,其中AddressCount和PublicAddresses至少传递一个。 + AddressCount *uint64 `json:"AddressCount,omitempty" name:"AddressCount"` + + // 绑定NAT网关的弹性IP数组,其中AddressCount和PublicAddresses至少传递一个。 + PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` + + // 可用区,形如:`ap-guangzhou-1`。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // NAT网关所属子网 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 绑定NAT网关的弹性IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + StockPublicIpAddressesBandwidthOut *uint64 `json:"StockPublicIpAddressesBandwidthOut,omitempty" name:"StockPublicIpAddressesBandwidthOut"` + + // 需要申请公网IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + PublicIpAddressesBandwidthOut *uint64 `json:"PublicIpAddressesBandwidthOut,omitempty" name:"PublicIpAddressesBandwidthOut"` + + // 公网IP是否强制与NAT网关来自同可用区,true表示需要与NAT网关同可用区;false表示可与NAT网关不是同一个可用区。此参数只有当参数Zone存在时才能生效。 + PublicIpFromSameZone *bool `json:"PublicIpFromSameZone,omitempty" name:"PublicIpFromSameZone"` +} + type CreateNatGatewayRequest struct { *tchttp.BaseRequest @@ -2975,6 +4121,15 @@ type CreateNatGatewayRequest struct { // NAT网关所属子网 SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 绑定NAT网关的弹性IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + StockPublicIpAddressesBandwidthOut *uint64 `json:"StockPublicIpAddressesBandwidthOut,omitempty" name:"StockPublicIpAddressesBandwidthOut"` + + // 需要申请公网IP带宽大小(单位Mbps),默认为当前用户类型所能使用的最大值。 + PublicIpAddressesBandwidthOut *uint64 `json:"PublicIpAddressesBandwidthOut,omitempty" name:"PublicIpAddressesBandwidthOut"` + + // 公网IP是否强制与NAT网关来自同可用区,true表示需要与NAT网关同可用区;false表示可与NAT网关不是同一个可用区。此参数只有当参数Zone存在时才能生效。 + PublicIpFromSameZone *bool `json:"PublicIpFromSameZone,omitempty" name:"PublicIpFromSameZone"` } func (r *CreateNatGatewayRequest) ToJsonString() string { @@ -2998,25 +4153,30 @@ func (r *CreateNatGatewayRequest) FromJsonString(s string) error { delete(f, "Zone") delete(f, "Tags") delete(f, "SubnetId") + delete(f, "StockPublicIpAddressesBandwidthOut") + delete(f, "PublicIpAddressesBandwidthOut") + delete(f, "PublicIpFromSameZone") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateNatGatewayRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateNatGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateNatGatewayResponseParams struct { + // NAT网关对象数组。 + NatGatewaySet []*NatGateway `json:"NatGatewaySet,omitempty" name:"NatGatewaySet"` - // NAT网关对象数组。 - NatGatewaySet []*NatGateway `json:"NatGatewaySet,omitempty" name:"NatGatewaySet"` + // 符合条件的 NAT网关对象数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的 NAT网关对象数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateNatGatewayResponse struct { + *tchttp.BaseResponse + Response *CreateNatGatewayResponseParams `json:"Response"` } func (r *CreateNatGatewayResponse) ToJsonString() string { @@ -3030,6 +4190,15 @@ func (r *CreateNatGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNatGatewaySourceIpTranslationNatRuleRequestParams struct { + // NAT网关的ID,形如:"nat-df45454" + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的SNAT转换规则 + SourceIpTranslationNatRules []*SourceIpTranslationNatRule `json:"SourceIpTranslationNatRules,omitempty" name:"SourceIpTranslationNatRules"` +} + type CreateNatGatewaySourceIpTranslationNatRuleRequest struct { *tchttp.BaseRequest @@ -3060,13 +4229,15 @@ func (r *CreateNatGatewaySourceIpTranslationNatRuleRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNatGatewaySourceIpTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CreateNatGatewaySourceIpTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CreateNatGatewaySourceIpTranslationNatRuleResponseParams `json:"Response"` } func (r *CreateNatGatewaySourceIpTranslationNatRuleResponse) ToJsonString() string { @@ -3080,10 +4251,48 @@ func (r *CreateNatGatewaySourceIpTranslationNatRuleResponse) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNetDetectRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-12345678`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID。形如:subnet-12345678。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 网络探测名称,最大长度不能超过60个字节。 + NetDetectName *string `json:"NetDetectName,omitempty" name:"NetDetectName"` + + // 探测目的IPv4地址数组。最多两个。 + DetectDestinationIp []*string `json:"DetectDestinationIp,omitempty" name:"DetectDestinationIp"` + + // 下一跳类型,目前我们支持的类型有: + // VPN:VPN网关; + // DIRECTCONNECT:专线网关; + // PEERCONNECTION:对等连接; + // NAT:NAT网关; + // NORMAL_CVM:普通云服务器; + // CCN:云联网网关; + // NONEXTHOP:无下一跳; + NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` + + // 下一跳目的网关,取值与“下一跳类型”相关: + // 下一跳类型为VPN,取值VPN网关ID,形如:vpngw-12345678; + // 下一跳类型为DIRECTCONNECT,取值专线网关ID,形如:dcg-12345678; + // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; + // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; + // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; + NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` + + // 网络探测描述。 + NetDetectDescription *string `json:"NetDetectDescription,omitempty" name:"NetDetectDescription"` +} + type CreateNetDetectRequest struct { *tchttp.BaseRequest - // `VPC`实例`ID`。形如:`vpc-12345678` + // `VPC`实例`ID`。形如:`vpc-12345678`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` // 子网实例ID。形如:subnet-12345678。 @@ -3102,6 +4311,7 @@ type CreateNetDetectRequest struct { // NAT:NAT网关; // NORMAL_CVM:普通云服务器; // CCN:云联网网关; + // NONEXTHOP:无下一跳; NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` // 下一跳目的网关,取值与“下一跳类型”相关: @@ -3111,6 +4321,7 @@ type CreateNetDetectRequest struct { // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` // 网络探测描述。 @@ -3142,16 +4353,18 @@ func (r *CreateNetDetectRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateNetDetectResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateNetDetectResponseParams struct { + // 网络探测(NetDetect)对象。 + NetDetect *NetDetect `json:"NetDetect,omitempty" name:"NetDetect"` - // 网络探测(NetDetect)对象。 - NetDetect *NetDetect `json:"NetDetect,omitempty" name:"NetDetect"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateNetDetectResponse struct { + *tchttp.BaseResponse + Response *CreateNetDetectResponseParams `json:"Response"` } func (r *CreateNetDetectResponse) ToJsonString() string { @@ -3165,14 +4378,96 @@ func (r *CreateNetDetectResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNetworkAclQuintupleEntriesRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +type CreateNetworkAclQuintupleEntriesRequest struct { + *tchttp.BaseRequest + + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +func (r *CreateNetworkAclQuintupleEntriesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateNetworkAclQuintupleEntriesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "NetworkAclId") + delete(f, "NetworkAclQuintupleSet") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateNetworkAclQuintupleEntriesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateNetworkAclQuintupleEntriesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateNetworkAclQuintupleEntriesResponse struct { + *tchttp.BaseResponse + Response *CreateNetworkAclQuintupleEntriesResponseParams `json:"Response"` +} + +func (r *CreateNetworkAclQuintupleEntriesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateNetworkAclQuintupleEntriesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateNetworkAclRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 网络ACL名称,最大长度不能超过60个字节。 + NetworkAclName *string `json:"NetworkAclName,omitempty" name:"NetworkAclName"` + + // 网络ACL类型,三元组(TRIPLE)或五元组(QUINTUPLE)。默认值三元组(TRIPLE)。 + NetworkAclType *string `json:"NetworkAclType,omitempty" name:"NetworkAclType"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + type CreateNetworkAclRequest struct { *tchttp.BaseRequest - // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` // 网络ACL名称,最大长度不能超过60个字节。 NetworkAclName *string `json:"NetworkAclName,omitempty" name:"NetworkAclName"` + + // 网络ACL类型,三元组(TRIPLE)或五元组(QUINTUPLE)。默认值三元组(TRIPLE)。 + NetworkAclType *string `json:"NetworkAclType,omitempty" name:"NetworkAclType"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` } func (r *CreateNetworkAclRequest) ToJsonString() string { @@ -3189,22 +4484,26 @@ func (r *CreateNetworkAclRequest) FromJsonString(s string) error { } delete(f, "VpcId") delete(f, "NetworkAclName") + delete(f, "NetworkAclType") + delete(f, "Tags") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateNetworkAclRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateNetworkAclResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateNetworkAclResponseParams struct { + // 网络ACL实例。 + NetworkAcl *NetworkAcl `json:"NetworkAcl,omitempty" name:"NetworkAcl"` - // 网络ACL实例。 - NetworkAcl *NetworkAcl `json:"NetworkAcl,omitempty" name:"NetworkAcl"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateNetworkAclResponse struct { + *tchttp.BaseResponse + Response *CreateNetworkAclResponseParams `json:"Response"` } func (r *CreateNetworkAclResponse) ToJsonString() string { @@ -3218,6 +4517,39 @@ func (r *CreateNetworkAclResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateNetworkInterfaceRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 弹性网卡名称,最大长度不能超过60个字节。 + NetworkInterfaceName *string `json:"NetworkInterfaceName,omitempty" name:"NetworkInterfaceName"` + + // 弹性网卡所在的子网实例ID,例如:subnet-0ap8nwca。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 弹性网卡描述,可任意命名,但不得超过60个字符。 + NetworkInterfaceDescription *string `json:"NetworkInterfaceDescription,omitempty" name:"NetworkInterfaceDescription"` + + // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配额数。 + SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + + // 指定绑定的安全组,例如:['sg-1dd51d']。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 指定的内网IP信息,单次最多指定10个。 + PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 网卡trunking模式设置,Enable-开启,Disable--关闭,默认关闭。 + TrunkingFlag *string `json:"TrunkingFlag,omitempty" name:"TrunkingFlag"` +} + type CreateNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -3233,9 +4565,12 @@ type CreateNetworkInterfaceRequest struct { // 弹性网卡描述,可任意命名,但不得超过60个字符。 NetworkInterfaceDescription *string `json:"NetworkInterfaceDescription,omitempty" name:"NetworkInterfaceDescription"` - // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配数。 + // 新申请的内网IP地址个数,内网IP地址个数总和不能超过配额数。 SecondaryPrivateIpAddressCount *uint64 `json:"SecondaryPrivateIpAddressCount,omitempty" name:"SecondaryPrivateIpAddressCount"` + // IP服务质量等级,和SecondaryPrivateIpAddressCount配合使用,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + // 指定绑定的安全组,例如:['sg-1dd51d']。 SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` @@ -3244,6 +4579,9 @@ type CreateNetworkInterfaceRequest struct { // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 网卡trunking模式设置,Enable-开启,Disable--关闭,默认关闭。 + TrunkingFlag *string `json:"TrunkingFlag,omitempty" name:"TrunkingFlag"` } func (r *CreateNetworkInterfaceRequest) ToJsonString() string { @@ -3263,25 +4601,29 @@ func (r *CreateNetworkInterfaceRequest) FromJsonString(s string) error { delete(f, "SubnetId") delete(f, "NetworkInterfaceDescription") delete(f, "SecondaryPrivateIpAddressCount") + delete(f, "QosLevel") delete(f, "SecurityGroupIds") delete(f, "PrivateIpAddresses") delete(f, "Tags") + delete(f, "TrunkingFlag") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateNetworkInterfaceRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateNetworkInterfaceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateNetworkInterfaceResponseParams struct { + // 弹性网卡实例。 + NetworkInterface *NetworkInterface `json:"NetworkInterface,omitempty" name:"NetworkInterface"` - // 弹性网卡实例。 - NetworkInterface *NetworkInterface `json:"NetworkInterface,omitempty" name:"NetworkInterface"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateNetworkInterfaceResponse struct { + *tchttp.BaseResponse + Response *CreateNetworkInterfaceResponseParams `json:"Response"` } func (r *CreateNetworkInterfaceResponse) ToJsonString() string { @@ -3295,6 +4637,18 @@ func (r *CreateNetworkInterfaceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateRouteTableRequestParams struct { + // 待操作的VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 路由表名称,最大长度不能超过60个字节。 + RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + type CreateRouteTableRequest struct { *tchttp.BaseRequest @@ -3329,16 +4683,18 @@ func (r *CreateRouteTableRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateRouteTableResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateRouteTableResponseParams struct { + // 路由表对象。 + RouteTable *RouteTable `json:"RouteTable,omitempty" name:"RouteTable"` - // 路由表对象。 - RouteTable *RouteTable `json:"RouteTable,omitempty" name:"RouteTable"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateRouteTableResponse struct { + *tchttp.BaseResponse + Response *CreateRouteTableResponseParams `json:"Response"` } func (r *CreateRouteTableResponse) ToJsonString() string { @@ -3352,6 +4708,15 @@ func (r *CreateRouteTableResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateRoutesRequestParams struct { + // 路由表实例ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略对象。 + Routes []*Route `json:"Routes,omitempty" name:"Routes"` +} + type CreateRoutesRequest struct { *tchttp.BaseRequest @@ -3382,19 +4747,21 @@ func (r *CreateRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateRoutesResponseParams struct { + // 新增的实例个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 新增的实例个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 路由表对象。 + RouteTableSet []*RouteTable `json:"RouteTableSet,omitempty" name:"RouteTableSet"` - // 路由表对象。 - RouteTableSet []*RouteTable `json:"RouteTableSet,omitempty" name:"RouteTableSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateRoutesResponse struct { + *tchttp.BaseResponse + Response *CreateRoutesResponseParams `json:"Response"` } func (r *CreateRoutesResponse) ToJsonString() string { @@ -3408,6 +4775,15 @@ func (r *CreateRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateSecurityGroupPoliciesRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` +} + type CreateSecurityGroupPoliciesRequest struct { *tchttp.BaseRequest @@ -3438,13 +4814,15 @@ func (r *CreateSecurityGroupPoliciesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateSecurityGroupPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CreateSecurityGroupPoliciesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CreateSecurityGroupPoliciesResponseParams `json:"Response"` } func (r *CreateSecurityGroupPoliciesResponse) ToJsonString() string { @@ -3458,9 +4836,8 @@ func (r *CreateSecurityGroupPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateSecurityGroupRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type CreateSecurityGroupRequestParams struct { // 安全组名称,可任意命名,但不得超过60个字符。 GroupName *string `json:"GroupName,omitempty" name:"GroupName"` @@ -3470,18 +4847,34 @@ type CreateSecurityGroupRequest struct { // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` - // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` } -func (r *CreateSecurityGroupRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} +type CreateSecurityGroupRequest struct { + *tchttp.BaseRequest -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *CreateSecurityGroupRequest) FromJsonString(s string) error { + // 安全组名称,可任意命名,但不得超过60个字符。 + GroupName *string `json:"GroupName,omitempty" name:"GroupName"` + + // 安全组备注,最多100个字符。 + GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` + + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + +func (r *CreateSecurityGroupRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateSecurityGroupRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err @@ -3496,16 +4889,18 @@ func (r *CreateSecurityGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateSecurityGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateSecurityGroupResponseParams struct { + // 安全组对象。 + SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` - // 安全组对象。 - SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateSecurityGroupResponse struct { + *tchttp.BaseResponse + Response *CreateSecurityGroupResponseParams `json:"Response"` } func (r *CreateSecurityGroupResponse) ToJsonString() string { @@ -3519,6 +4914,21 @@ func (r *CreateSecurityGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateSecurityGroupWithPoliciesRequestParams struct { + // 安全组名称,可任意命名,但不得超过60个字符。 + GroupName *string `json:"GroupName,omitempty" name:"GroupName"` + + // 安全组备注,最多100个字符。 + GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` + + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` + + // 安全组规则集合。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` +} + type CreateSecurityGroupWithPoliciesRequest struct { *tchttp.BaseRequest @@ -3528,7 +4938,7 @@ type CreateSecurityGroupWithPoliciesRequest struct { // 安全组备注,最多100个字符。 GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` - // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 + // 项目ID,默认0。可在qcloud控制台项目管理页面查询到。 ProjectId *string `json:"ProjectId,omitempty" name:"ProjectId"` // 安全组规则集合。 @@ -3557,16 +4967,18 @@ func (r *CreateSecurityGroupWithPoliciesRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type CreateSecurityGroupWithPoliciesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateSecurityGroupWithPoliciesResponseParams struct { + // 安全组对象。 + SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` - // 安全组对象。 - SecurityGroup *SecurityGroup `json:"SecurityGroup,omitempty" name:"SecurityGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateSecurityGroupWithPoliciesResponse struct { + *tchttp.BaseResponse + Response *CreateSecurityGroupWithPoliciesResponseParams `json:"Response"` } func (r *CreateSecurityGroupWithPoliciesResponse) ToJsonString() string { @@ -3580,10 +4992,19 @@ func (r *CreateSecurityGroupWithPoliciesResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateServiceTemplateGroupRequestParams struct { + // 协议端口模板集合名称。 + ServiceTemplateGroupName *string `json:"ServiceTemplateGroupName,omitempty" name:"ServiceTemplateGroupName"` + + // 协议端口模板实例ID,例如:ppm-4dw6agho。 + ServiceTemplateIds []*string `json:"ServiceTemplateIds,omitempty" name:"ServiceTemplateIds"` +} + type CreateServiceTemplateGroupRequest struct { *tchttp.BaseRequest - // 协议端口模板集合名称 + // 协议端口模板集合名称。 ServiceTemplateGroupName *string `json:"ServiceTemplateGroupName,omitempty" name:"ServiceTemplateGroupName"` // 协议端口模板实例ID,例如:ppm-4dw6agho。 @@ -3610,16 +5031,18 @@ func (r *CreateServiceTemplateGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateServiceTemplateGroupResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateServiceTemplateGroupResponseParams struct { + // 协议端口模板集合对象。 + ServiceTemplateGroup *ServiceTemplateGroup `json:"ServiceTemplateGroup,omitempty" name:"ServiceTemplateGroup"` - // 协议端口模板集合对象。 - ServiceTemplateGroup *ServiceTemplateGroup `json:"ServiceTemplateGroup,omitempty" name:"ServiceTemplateGroup"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateServiceTemplateGroupResponse struct { + *tchttp.BaseResponse + Response *CreateServiceTemplateGroupResponseParams `json:"Response"` } func (r *CreateServiceTemplateGroupResponse) ToJsonString() string { @@ -3633,10 +5056,22 @@ func (r *CreateServiceTemplateGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateServiceTemplateRequestParams struct { + // 协议端口模板名称。 + ServiceTemplateName *string `json:"ServiceTemplateName,omitempty" name:"ServiceTemplateName"` + + // 支持单个端口、多个端口、连续端口及所有端口,协议支持:TCP、UDP、ICMP、GRE 协议。Services与ServicesExtra必填其一。 + Services []*string `json:"Services,omitempty" name:"Services"` + + // 支持添加备注,单个端口、多个端口、连续端口及所有端口,协议支持:TCP、UDP、ICMP、GRE 协议。Services与ServicesExtra必填其一。 + ServicesExtra []*ServicesInfo `json:"ServicesExtra,omitempty" name:"ServicesExtra"` +} + type CreateServiceTemplateRequest struct { *tchttp.BaseRequest - // 协议端口模板名称 + // 协议端口模板名称。 ServiceTemplateName *string `json:"ServiceTemplateName,omitempty" name:"ServiceTemplateName"` // 支持单个端口、多个端口、连续端口及所有端口,协议支持:TCP、UDP、ICMP、GRE 协议。Services与ServicesExtra必填其一。 @@ -3667,16 +5102,18 @@ func (r *CreateServiceTemplateRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateServiceTemplateResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateServiceTemplateResponseParams struct { + // 协议端口模板对象。 + ServiceTemplate *ServiceTemplate `json:"ServiceTemplate,omitempty" name:"ServiceTemplate"` - // 协议端口模板对象。 - ServiceTemplate *ServiceTemplate `json:"ServiceTemplate,omitempty" name:"ServiceTemplate"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateServiceTemplateResponse struct { + *tchttp.BaseResponse + Response *CreateServiceTemplateResponseParams `json:"Response"` } func (r *CreateServiceTemplateResponse) ToJsonString() string { @@ -3690,6 +5127,84 @@ func (r *CreateServiceTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateSnapshotPoliciesRequestParams struct { + // 快照策略详情。 + SnapshotPolicies []*SnapshotPolicy `json:"SnapshotPolicies,omitempty" name:"SnapshotPolicies"` +} + +type CreateSnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略详情。 + SnapshotPolicies []*SnapshotPolicy `json:"SnapshotPolicies,omitempty" name:"SnapshotPolicies"` +} + +func (r *CreateSnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateSnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicies") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateSnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateSnapshotPoliciesResponseParams struct { + // 快照策略。 + SnapshotPolicies []*SnapshotPolicy `json:"SnapshotPolicies,omitempty" name:"SnapshotPolicies"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateSnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *CreateSnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *CreateSnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateSnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateSubnetRequestParams struct { + // 待操作的VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网名称,最大长度不能超过60个字节。 + SubnetName *string `json:"SubnetName,omitempty" name:"SubnetName"` + + // 子网网段,子网网段必须在VPC网段内,相同VPC内子网网段不能重叠。 + CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` + + // 子网所在的可用区ID,不同子网选择不同可用区可以做跨可用区灾备。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` +} + type CreateSubnetRequest struct { *tchttp.BaseRequest @@ -3736,16 +5251,18 @@ func (r *CreateSubnetRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateSubnetResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateSubnetResponseParams struct { + // 子网对象。 + Subnet *Subnet `json:"Subnet,omitempty" name:"Subnet"` - // 子网对象。 - Subnet *Subnet `json:"Subnet,omitempty" name:"Subnet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateSubnetResponse struct { + *tchttp.BaseResponse + Response *CreateSubnetResponseParams `json:"Response"` } func (r *CreateSubnetResponse) ToJsonString() string { @@ -3759,16 +5276,31 @@ func (r *CreateSubnetResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateSubnetsRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网对象列表。 + Subnets []*SubnetInput `json:"Subnets,omitempty" name:"Subnets"` + + // 指定绑定的标签列表,注意这里的标签集合为列表中所有子网对象所共享,不能为每个子网对象单独指定标签,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 需要增加到的CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` +} + type CreateSubnetsRequest struct { *tchttp.BaseRequest - // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` // 子网对象列表。 Subnets []*SubnetInput `json:"Subnets,omitempty" name:"Subnets"` - // 指定绑定的标签列表,注意这里的标签集合为列表中所有子网对象所共享,不能为每个子网对象单独指定标签,例如:[{"Key": "city", "Value": "shanghai"}] + // 指定绑定的标签列表,注意这里的标签集合为列表中所有子网对象所共享,不能为每个子网对象单独指定标签,例如:[{"Key": "city", "Value": "shanghai"}]。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` // 需要增加到的CDC实例ID。 @@ -3797,16 +5329,18 @@ func (r *CreateSubnetsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateSubnetsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateSubnetsResponseParams struct { + // 新创建的子网列表。 + SubnetSet []*Subnet `json:"SubnetSet,omitempty" name:"SubnetSet"` - // 新创建的子网列表。 - SubnetSet []*Subnet `json:"SubnetSet,omitempty" name:"SubnetSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateSubnetsResponse struct { + *tchttp.BaseResponse + Response *CreateSubnetsResponseParams `json:"Response"` } func (r *CreateSubnetsResponse) ToJsonString() string { @@ -3820,6 +5354,119 @@ func (r *CreateSubnetsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateTrafficPackagesRequestParams struct { + // 流量包规格。可选值: + //
      • 10: 10GB流量,有效期一个月
      • + //
      • 50: 50GB流量,有效期一个月
      • + //
      • 512: 512GB流量,有效期一个月
      • + //
      • 1024: 1TB流量,有效期一个月
      • + //
      • 5120: 5TB流量,有效期一个月
      • + //
      • 51200: 50TB流量,有效期一个月
      • + //
      • 60: 60GB流量,有效期半年
      • + //
      • 300: 300GB流量,有效期半年
      • + //
      • 600: 600GB流量,有效期半年
      • + //
      • 3072: 3TB流量,有效期半年
      • + //
      • 6144: 6TB流量,有效期半年
      • + //
      • 30720: 30TB流量,有效期半年
      • + //
      • 61440: 60TB流量,有效期半年
      • + //
      • 307200: 300TB流量,有效期半年
      • + TrafficAmount *uint64 `json:"TrafficAmount,omitempty" name:"TrafficAmount"` + + // 流量包数量,可选范围 1~20。 + TrafficPackageCount *uint64 `json:"TrafficPackageCount,omitempty" name:"TrafficPackageCount"` +} + +type CreateTrafficPackagesRequest struct { + *tchttp.BaseRequest + + // 流量包规格。可选值: + //
      • 10: 10GB流量,有效期一个月
      • + //
      • 50: 50GB流量,有效期一个月
      • + //
      • 512: 512GB流量,有效期一个月
      • + //
      • 1024: 1TB流量,有效期一个月
      • + //
      • 5120: 5TB流量,有效期一个月
      • + //
      • 51200: 50TB流量,有效期一个月
      • + //
      • 60: 60GB流量,有效期半年
      • + //
      • 300: 300GB流量,有效期半年
      • + //
      • 600: 600GB流量,有效期半年
      • + //
      • 3072: 3TB流量,有效期半年
      • + //
      • 6144: 6TB流量,有效期半年
      • + //
      • 30720: 30TB流量,有效期半年
      • + //
      • 61440: 60TB流量,有效期半年
      • + //
      • 307200: 300TB流量,有效期半年
      • + TrafficAmount *uint64 `json:"TrafficAmount,omitempty" name:"TrafficAmount"` + + // 流量包数量,可选范围 1~20。 + TrafficPackageCount *uint64 `json:"TrafficPackageCount,omitempty" name:"TrafficPackageCount"` +} + +func (r *CreateTrafficPackagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateTrafficPackagesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "TrafficAmount") + delete(f, "TrafficPackageCount") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateTrafficPackagesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateTrafficPackagesResponseParams struct { + // 创建的流量包ID列表。 + TrafficPackageSet []*string `json:"TrafficPackageSet,omitempty" name:"TrafficPackageSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateTrafficPackagesResponse struct { + *tchttp.BaseResponse + Response *CreateTrafficPackagesResponseParams `json:"Response"` +} + +func (r *CreateTrafficPackagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateTrafficPackagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateVpcEndPointRequestParams struct { + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 终端节点名称。 + EndPointName *string `json:"EndPointName,omitempty" name:"EndPointName"` + + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` + + // 终端节点VIP,可以指定IP申请。 + EndPointVip *string `json:"EndPointVip,omitempty" name:"EndPointVip"` + + // 安全组ID。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` +} + type CreateVpcEndPointRequest struct { *tchttp.BaseRequest @@ -3866,16 +5513,18 @@ func (r *CreateVpcEndPointRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateVpcEndPointResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpcEndPointResponseParams struct { + // 终端节点对象详细信息。 + EndPoint *EndPoint `json:"EndPoint,omitempty" name:"EndPoint"` - // 终端节点对象详细信息。 - EndPoint *EndPoint `json:"EndPoint,omitempty" name:"EndPoint"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpcEndPointResponse struct { + *tchttp.BaseResponse + Response *CreateVpcEndPointResponseParams `json:"Response"` } func (r *CreateVpcEndPointResponse) ToJsonString() string { @@ -3889,6 +5538,27 @@ func (r *CreateVpcEndPointResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpcEndPointServiceRequestParams struct { + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 终端节点服务名称。 + EndPointServiceName *string `json:"EndPointServiceName,omitempty" name:"EndPointServiceName"` + + // 是否自动接受。 + AutoAcceptFlag *bool `json:"AutoAcceptFlag,omitempty" name:"AutoAcceptFlag"` + + // 后端服务ID,比如lb-xxx。 + ServiceInstanceId *string `json:"ServiceInstanceId,omitempty" name:"ServiceInstanceId"` + + // ~~是否是PassService类型。该字段已废弃,请不要使用该字段。~~ + IsPassService *bool `json:"IsPassService,omitempty" name:"IsPassService"` + + // 挂载的PAAS服务类型,CLB,CDB,CRS,不填默认挂载为CLB。 + ServiceType *string `json:"ServiceType,omitempty" name:"ServiceType"` +} + type CreateVpcEndPointServiceRequest struct { *tchttp.BaseRequest @@ -3904,8 +5574,11 @@ type CreateVpcEndPointServiceRequest struct { // 后端服务ID,比如lb-xxx。 ServiceInstanceId *string `json:"ServiceInstanceId,omitempty" name:"ServiceInstanceId"` - // 是否是PassService类型。 + // ~~是否是PassService类型。该字段已废弃,请不要使用该字段。~~ IsPassService *bool `json:"IsPassService,omitempty" name:"IsPassService"` + + // 挂载的PAAS服务类型,CLB,CDB,CRS,不填默认挂载为CLB。 + ServiceType *string `json:"ServiceType,omitempty" name:"ServiceType"` } func (r *CreateVpcEndPointServiceRequest) ToJsonString() string { @@ -3925,22 +5598,25 @@ func (r *CreateVpcEndPointServiceRequest) FromJsonString(s string) error { delete(f, "AutoAcceptFlag") delete(f, "ServiceInstanceId") delete(f, "IsPassService") + delete(f, "ServiceType") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateVpcEndPointServiceRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type CreateVpcEndPointServiceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpcEndPointServiceResponseParams struct { + // 终端节点服务对象详细信息。 + EndPointService *EndPointService `json:"EndPointService,omitempty" name:"EndPointService"` - // 终端节点服务对象详细信息。 - EndPointService *EndPointService `json:"EndPointService,omitempty" name:"EndPointService"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpcEndPointServiceResponse struct { + *tchttp.BaseResponse + Response *CreateVpcEndPointServiceResponseParams `json:"Response"` } func (r *CreateVpcEndPointServiceResponse) ToJsonString() string { @@ -3954,6 +5630,18 @@ func (r *CreateVpcEndPointServiceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpcEndPointServiceWhiteListRequestParams struct { + // UIN。 + UserUin *string `json:"UserUin,omitempty" name:"UserUin"` + + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` + + // 白名单描述。 + Description *string `json:"Description,omitempty" name:"Description"` +} + type CreateVpcEndPointServiceWhiteListRequest struct { *tchttp.BaseRequest @@ -3988,13 +5676,15 @@ func (r *CreateVpcEndPointServiceWhiteListRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpcEndPointServiceWhiteListResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type CreateVpcEndPointServiceWhiteListResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *CreateVpcEndPointServiceWhiteListResponseParams `json:"Response"` } func (r *CreateVpcEndPointServiceWhiteListResponse) ToJsonString() string { @@ -4008,14 +5698,84 @@ func (r *CreateVpcEndPointServiceWhiteListResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type CreateVpcRequest struct { - *tchttp.BaseRequest +// Predefined struct for user +type CreateVpcPeeringConnectionRequestParams struct { +} - // vpc名称,最大长度不能超过60个字节。 - VpcName *string `json:"VpcName,omitempty" name:"VpcName"` +type CreateVpcPeeringConnectionRequest struct { + *tchttp.BaseRequest +} - // vpc的cidr,仅能在10.0.0.0/16,172.16.0.0/16,192.168.0.0/16这三个内网网段内。 - CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` +func (r *CreateVpcPeeringConnectionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpcPeeringConnectionRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateVpcPeeringConnectionRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateVpcPeeringConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateVpcPeeringConnectionResponse struct { + *tchttp.BaseResponse + Response *CreateVpcPeeringConnectionResponseParams `json:"Response"` +} + +func (r *CreateVpcPeeringConnectionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpcPeeringConnectionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateVpcRequestParams struct { + // vpc名称,最大长度不能超过60个字节。 + VpcName *string `json:"VpcName,omitempty" name:"VpcName"` + + // vpc的cidr,仅能在10.0.0.0/12,172.16.0.0/12,192.168.0.0/16这三个内网网段内。 + CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` + + // 是否开启组播。true: 开启, false: 不开启。 + EnableMulticast *string `json:"EnableMulticast,omitempty" name:"EnableMulticast"` + + // DNS地址,最多支持4个。 + DnsServers []*string `json:"DnsServers,omitempty" name:"DnsServers"` + + // DHCP使用的域名。 + DomainName *string `json:"DomainName,omitempty" name:"DomainName"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` +} + +type CreateVpcRequest struct { + *tchttp.BaseRequest + + // vpc名称,最大长度不能超过60个字节。 + VpcName *string `json:"VpcName,omitempty" name:"VpcName"` + + // vpc的cidr,仅能在10.0.0.0/12,172.16.0.0/12,192.168.0.0/16这三个内网网段内。 + CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` // 是否开启组播。true: 开启, false: 不开启。 EnableMulticast *string `json:"EnableMulticast,omitempty" name:"EnableMulticast"` @@ -4054,16 +5814,18 @@ func (r *CreateVpcRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateVpcResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpcResponseParams struct { + // Vpc对象。 + Vpc *Vpc `json:"Vpc,omitempty" name:"Vpc"` - // Vpc对象。 - Vpc *Vpc `json:"Vpc,omitempty" name:"Vpc"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpcResponse struct { + *tchttp.BaseResponse + Response *CreateVpcResponseParams `json:"Response"` } func (r *CreateVpcResponse) ToJsonString() string { @@ -4077,13 +5839,68 @@ func (r *CreateVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpnConnectionRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 对端网关ID。例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/product/215/17516)接口查询对端网关。 + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` + + // 通道名称,可任意命名,但不得超过60个字符。 + VpnConnectionName *string `json:"VpnConnectionName,omitempty" name:"VpnConnectionName"` + + // 预共享密钥。 + PreShareKey *string `json:"PreShareKey,omitempty" name:"PreShareKey"` + + // VPC实例ID。可通过[DescribeVpcs](https://cloud.tencent.com/document/product/215/15778)接口返回值中的VpcId获取。 + // CCN VPN 形的通道 可以不传VPCID + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // SPD策略组,例如:{"10.0.0.5/24":["172.123.10.5/16"]},10.0.0.5/24是vpc内网段172.123.10.5/16是IDC网段。用户指定VPC内哪些网段可以和您IDC中哪些网段通信。 + SecurityPolicyDatabases []*SecurityPolicyDatabase `json:"SecurityPolicyDatabases,omitempty" name:"SecurityPolicyDatabases"` + + // IKE配置(Internet Key Exchange,因特网密钥交换),IKE具有一套自我保护机制,用户配置网络安全协议 + IKEOptionsSpecification *IKEOptionsSpecification `json:"IKEOptionsSpecification,omitempty" name:"IKEOptionsSpecification"` + + // IPSec配置,腾讯云提供IPSec安全会话设置 + IPSECOptionsSpecification *IPSECOptionsSpecification `json:"IPSECOptionsSpecification,omitempty" name:"IPSECOptionsSpecification"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // 是否支持隧道内健康检查,默认为False。 + EnableHealthCheck *bool `json:"EnableHealthCheck,omitempty" name:"EnableHealthCheck"` + + // 健康检查本端地址,默认值为随机在169.254.128.0/17分配一个IP。 + HealthCheckLocalIp *string `json:"HealthCheckLocalIp,omitempty" name:"HealthCheckLocalIp"` + + // 健康检查对端地址,默认值为随机在169.254.128.0/17分配一个IP。 + HealthCheckRemoteIp *string `json:"HealthCheckRemoteIp,omitempty" name:"HealthCheckRemoteIp"` + + // 通道类型, 例如:["STATIC", "StaticRoute", "Policy"] + RouteType *string `json:"RouteType,omitempty" name:"RouteType"` + + // 协商类型,默认为active(主动协商)。可选值:active(主动协商),passive(被动协商),flowTrigger(流量协商) + NegotiationType *string `json:"NegotiationType,omitempty" name:"NegotiationType"` + + // DPD探测开关。默认为0,表示关闭DPD探测。可选值:0(关闭),1(开启) + DpdEnable *int64 `json:"DpdEnable,omitempty" name:"DpdEnable"` + + // DPD超时时间。即探测确认对端不存在需要的时间。dpdEnable为1(开启)时有效。默认30,单位为秒 + DpdTimeout *string `json:"DpdTimeout,omitempty" name:"DpdTimeout"` + + // DPD超时后的动作。默认为clear。dpdEnable为1(开启)时有效。可取值为clear(断开)和restart(重试) + DpdAction *string `json:"DpdAction,omitempty" name:"DpdAction"` +} + type CreateVpnConnectionRequest struct { *tchttp.BaseRequest // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 对端网关ID,例如:cgw-2wqq41m9,可通过DescribeCustomerGateways接口查询对端网关。 + // 对端网关ID。例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/product/215/17516)接口查询对端网关。 CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` // 通道名称,可任意命名,但不得超过60个字符。 @@ -4108,13 +5925,13 @@ type CreateVpnConnectionRequest struct { // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] Tags []*Tag `json:"Tags,omitempty" name:"Tags"` - // 是否支持隧道内健康检查 + // 是否支持隧道内健康检查,默认为False。 EnableHealthCheck *bool `json:"EnableHealthCheck,omitempty" name:"EnableHealthCheck"` - // 健康检查本端地址 + // 健康检查本端地址,默认值为随机在169.254.128.0/17分配一个IP。 HealthCheckLocalIp *string `json:"HealthCheckLocalIp,omitempty" name:"HealthCheckLocalIp"` - // 健康检查对端地址 + // 健康检查对端地址,默认值为随机在169.254.128.0/17分配一个IP。 HealthCheckRemoteIp *string `json:"HealthCheckRemoteIp,omitempty" name:"HealthCheckRemoteIp"` // 通道类型, 例如:["STATIC", "StaticRoute", "Policy"] @@ -4168,16 +5985,18 @@ func (r *CreateVpnConnectionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateVpnConnectionResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpnConnectionResponseParams struct { + // 通道实例对象。 + VpnConnection *VpnConnection `json:"VpnConnection,omitempty" name:"VpnConnection"` - // 通道实例对象。 - VpnConnection *VpnConnection `json:"VpnConnection,omitempty" name:"VpnConnection"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpnConnectionResponse struct { + *tchttp.BaseResponse + Response *CreateVpnConnectionResponseParams `json:"Response"` } func (r *CreateVpnConnectionResponse) ToJsonString() string { @@ -4191,6 +6010,39 @@ func (r *CreateVpnConnectionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpnGatewayRequestParams struct { + // VPC实例ID。可通过[DescribeVpcs](https://cloud.tencent.com/document/product/215/15778)接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // VPN网关名称,最大长度不能超过60个字节。 + VpnGatewayName *string `json:"VpnGatewayName,omitempty" name:"VpnGatewayName"` + + // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100, 200, 500, 1000, 3000;单位:Mbps。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // VPN网关计费模式,PREPAID:表示预付费,即包年包月,POSTPAID_BY_HOUR:表示后付费,即按量计费。默认:POSTPAID_BY_HOUR,如果指定预付费模式,参数InstanceChargePrepaid必填。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 可用区,如:ap-guangzhou-2。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // VPN网关类型,默认为IPSEC。值“IPSEC”为VPC型IPSEC VPN网关,值“SSL”为VPC型SSL VPN网关,值“CCN”为云联网型IPSEC VPN网关,值“SSL_CCN”为云联网型SSL VPN网关。 + Type *string `json:"Type,omitempty" name:"Type"` + + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags"` + + // CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` + + // SSL VPN连接数设置,可选规格:5, 10, 20, 50, 100, 200, 500, 1000;单位:个。仅 SSL / SSL_CCN 类型需要选这个参数。 + MaxConnection *uint64 `json:"MaxConnection,omitempty" name:"MaxConnection"` +} + type CreateVpnGatewayRequest struct { *tchttp.BaseRequest @@ -4200,7 +6052,7 @@ type CreateVpnGatewayRequest struct { // VPN网关名称,最大长度不能超过60个字节。 VpnGatewayName *string `json:"VpnGatewayName,omitempty" name:"VpnGatewayName"` - // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100;单位:Mbps + // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100, 200, 500, 1000, 3000;单位:Mbps。 InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` // VPN网关计费模式,PREPAID:表示预付费,即包年包月,POSTPAID_BY_HOUR:表示后付费,即按量计费。默认:POSTPAID_BY_HOUR,如果指定预付费模式,参数InstanceChargePrepaid必填。 @@ -4212,16 +6064,16 @@ type CreateVpnGatewayRequest struct { // 可用区,如:ap-guangzhou-2。 Zone *string `json:"Zone,omitempty" name:"Zone"` - // VPN网关类型。值“CCN”云联网类型VPN网关,值SSL为SSL-VPN + // VPN网关类型,默认为IPSEC。值“IPSEC”为VPC型IPSEC VPN网关,值“SSL”为VPC型SSL VPN网关,值“CCN”为云联网型IPSEC VPN网关,值“SSL_CCN”为云联网型SSL VPN网关。 Type *string `json:"Type,omitempty" name:"Type"` - // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + // 指定绑定的标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 Tags []*Tag `json:"Tags,omitempty" name:"Tags"` - // CDC实例ID + // CDC实例ID。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` - // SSL-VPN 最大CLIENT 连接数。可选 [5, 10, 20, 50, 100]。仅SSL-VPN 需要选这个参数。 + // SSL VPN连接数设置,可选规格:5, 10, 20, 50, 100, 200, 500, 1000;单位:个。仅 SSL / SSL_CCN 类型需要选这个参数。 MaxConnection *uint64 `json:"MaxConnection,omitempty" name:"MaxConnection"` } @@ -4253,16 +6105,18 @@ func (r *CreateVpnGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateVpnGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpnGatewayResponseParams struct { + // VPN网关对象 + VpnGateway *VpnGateway `json:"VpnGateway,omitempty" name:"VpnGateway"` - // VPN网关对象 - VpnGateway *VpnGateway `json:"VpnGateway,omitempty" name:"VpnGateway"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpnGatewayResponse struct { + *tchttp.BaseResponse + Response *CreateVpnGatewayResponseParams `json:"Response"` } func (r *CreateVpnGatewayResponse) ToJsonString() string { @@ -4276,6 +6130,15 @@ func (r *CreateVpnGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type CreateVpnGatewayRoutesRequestParams struct { + // VPN网关的ID + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // VPN网关目的路由列表 + Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` +} + type CreateVpnGatewayRoutesRequest struct { *tchttp.BaseRequest @@ -4306,16 +6169,18 @@ func (r *CreateVpnGatewayRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CreateVpnGatewayRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type CreateVpnGatewayRoutesResponseParams struct { + // VPN网关目的路由 + Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` - // VPN网关目的路由 - Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type CreateVpnGatewayRoutesResponse struct { + *tchttp.BaseResponse + Response *CreateVpnGatewayRoutesResponseParams `json:"Response"` } func (r *CreateVpnGatewayRoutesResponse) ToJsonString() string { @@ -4329,94 +6194,316 @@ func (r *CreateVpnGatewayRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type CrossBorderCompliance struct { - - // 服务商,可选值:`UNICOM`。 - ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` +// Predefined struct for user +type CreateVpnGatewaySslClientRequestParams struct { + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` - // 合规化审批单`ID`。 - ComplianceId *uint64 `json:"ComplianceId,omitempty" name:"ComplianceId"` + // SSL-VPN-CLIENT实例Name。不可和SslVpnClientNames同时使用。 + SslVpnClientName *string `json:"SslVpnClientName,omitempty" name:"SslVpnClientName"` - // 公司全称。 - Company *string `json:"Company,omitempty" name:"Company"` + // SSL-VPN-CLIENT实例Name数字。批量创建时使用。不可和SslVpnClientName同时使用。 + SslVpnClientNames []*string `json:"SslVpnClientNames,omitempty" name:"SslVpnClientNames"` +} - // 统一社会信用代码。 - UniformSocialCreditCode *string `json:"UniformSocialCreditCode,omitempty" name:"UniformSocialCreditCode"` +type CreateVpnGatewaySslClientRequest struct { + *tchttp.BaseRequest - // 法定代表人。 - LegalPerson *string `json:"LegalPerson,omitempty" name:"LegalPerson"` + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` - // 发证机关。 - IssuingAuthority *string `json:"IssuingAuthority,omitempty" name:"IssuingAuthority"` + // SSL-VPN-CLIENT实例Name。不可和SslVpnClientNames同时使用。 + SslVpnClientName *string `json:"SslVpnClientName,omitempty" name:"SslVpnClientName"` - // 营业执照。 - BusinessLicense *string `json:"BusinessLicense,omitempty" name:"BusinessLicense"` + // SSL-VPN-CLIENT实例Name数字。批量创建时使用。不可和SslVpnClientName同时使用。 + SslVpnClientNames []*string `json:"SslVpnClientNames,omitempty" name:"SslVpnClientNames"` +} - // 营业执照住所。 - BusinessAddress *string `json:"BusinessAddress,omitempty" name:"BusinessAddress"` +func (r *CreateVpnGatewaySslClientRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 邮编。 - PostCode *uint64 `json:"PostCode,omitempty" name:"PostCode"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpnGatewaySslClientRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnServerId") + delete(f, "SslVpnClientName") + delete(f, "SslVpnClientNames") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateVpnGatewaySslClientRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} - // 经办人。 - Manager *string `json:"Manager,omitempty" name:"Manager"` +// Predefined struct for user +type CreateVpnGatewaySslClientResponseParams struct { + // 异步任务ID。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` - // 经办人身份证号。 - ManagerId *string `json:"ManagerId,omitempty" name:"ManagerId"` + // SSL-VPN client 唯一ID + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` - // 经办人身份证。 - ManagerIdCard *string `json:"ManagerIdCard,omitempty" name:"ManagerIdCard"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 经办人身份证地址。 - ManagerAddress *string `json:"ManagerAddress,omitempty" name:"ManagerAddress"` +type CreateVpnGatewaySslClientResponse struct { + *tchttp.BaseResponse + Response *CreateVpnGatewaySslClientResponseParams `json:"Response"` +} - // 经办人联系电话。 - ManagerTelephone *string `json:"ManagerTelephone,omitempty" name:"ManagerTelephone"` +func (r *CreateVpnGatewaySslClientResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 电子邮箱。 - Email *string `json:"Email,omitempty" name:"Email"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpnGatewaySslClientResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} - // 服务受理单。 - ServiceHandlingForm *string `json:"ServiceHandlingForm,omitempty" name:"ServiceHandlingForm"` +// Predefined struct for user +type CreateVpnGatewaySslServerRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 授权函。 - AuthorizationLetter *string `json:"AuthorizationLetter,omitempty" name:"AuthorizationLetter"` + // SSL-VPN-SERVER 实例名称,长度不超过60个字节。 + SslVpnServerName *string `json:"SslVpnServerName,omitempty" name:"SslVpnServerName"` - // 信息安全承诺书。 - SafetyCommitment *string `json:"SafetyCommitment,omitempty" name:"SafetyCommitment"` + // 云端地址(CIDR)列表。 + LocalAddress []*string `json:"LocalAddress,omitempty" name:"LocalAddress"` - // 服务开始时间。 - ServiceStartDate *string `json:"ServiceStartDate,omitempty" name:"ServiceStartDate"` + // 客户端地址网段。 + RemoteAddress *string `json:"RemoteAddress,omitempty" name:"RemoteAddress"` - // 服务截止时间。 - ServiceEndDate *string `json:"ServiceEndDate,omitempty" name:"ServiceEndDate"` + // SSL VPN服务端监听协议。当前仅支持 UDP,默认UDP。 + SslVpnProtocol *string `json:"SslVpnProtocol,omitempty" name:"SslVpnProtocol"` - // 状态。待审批:`PENDING`,已通过:`APPROVED`,已拒绝:`DENY`。 - State *string `json:"State,omitempty" name:"State"` + // SSL VPN服务端监听协议端口,默认1194。 + SslVpnPort *int64 `json:"SslVpnPort,omitempty" name:"SslVpnPort"` - // 审批单创建时间。 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` -} + // 认证算法。可选 'SHA1', 'MD5', 'NONE',默认NONE。 + IntegrityAlgorithm *string `json:"IntegrityAlgorithm,omitempty" name:"IntegrityAlgorithm"` -type CustomerGateway struct { + // 加密算法。可选 'AES-128-CBC','AES-192-CBC', 'AES-256-CBC', 'NONE',默认NONE。 + EncryptAlgorithm *string `json:"EncryptAlgorithm,omitempty" name:"EncryptAlgorithm"` - // 用户网关唯一ID - CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` + // 是否支持压缩。当前仅支持不支持压缩,默认False。 + Compress *bool `json:"Compress,omitempty" name:"Compress"` - // 网关名称 - CustomerGatewayName *string `json:"CustomerGatewayName,omitempty" name:"CustomerGatewayName"` + // 是否开启SSO认证。默认为False + SsoEnabled *bool `json:"SsoEnabled,omitempty" name:"SsoEnabled"` - // 公网地址 - IpAddress *string `json:"IpAddress,omitempty" name:"IpAddress"` + // 是否开启策略访问控制。默认为False + AccessPolicyEnabled *bool `json:"AccessPolicyEnabled,omitempty" name:"AccessPolicyEnabled"` - // 创建时间 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + // SAML-DATA,开启SSO时传。 + SamlData *string `json:"SamlData,omitempty" name:"SamlData"` } -type CustomerGatewayVendor struct { - - // 平台。 - Platform *string `json:"Platform,omitempty" name:"Platform"` +type CreateVpnGatewaySslServerRequest struct { + *tchttp.BaseRequest + + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // SSL-VPN-SERVER 实例名称,长度不超过60个字节。 + SslVpnServerName *string `json:"SslVpnServerName,omitempty" name:"SslVpnServerName"` + + // 云端地址(CIDR)列表。 + LocalAddress []*string `json:"LocalAddress,omitempty" name:"LocalAddress"` + + // 客户端地址网段。 + RemoteAddress *string `json:"RemoteAddress,omitempty" name:"RemoteAddress"` + + // SSL VPN服务端监听协议。当前仅支持 UDP,默认UDP。 + SslVpnProtocol *string `json:"SslVpnProtocol,omitempty" name:"SslVpnProtocol"` + + // SSL VPN服务端监听协议端口,默认1194。 + SslVpnPort *int64 `json:"SslVpnPort,omitempty" name:"SslVpnPort"` + + // 认证算法。可选 'SHA1', 'MD5', 'NONE',默认NONE。 + IntegrityAlgorithm *string `json:"IntegrityAlgorithm,omitempty" name:"IntegrityAlgorithm"` + + // 加密算法。可选 'AES-128-CBC','AES-192-CBC', 'AES-256-CBC', 'NONE',默认NONE。 + EncryptAlgorithm *string `json:"EncryptAlgorithm,omitempty" name:"EncryptAlgorithm"` + + // 是否支持压缩。当前仅支持不支持压缩,默认False。 + Compress *bool `json:"Compress,omitempty" name:"Compress"` + + // 是否开启SSO认证。默认为False + SsoEnabled *bool `json:"SsoEnabled,omitempty" name:"SsoEnabled"` + + // 是否开启策略访问控制。默认为False + AccessPolicyEnabled *bool `json:"AccessPolicyEnabled,omitempty" name:"AccessPolicyEnabled"` + + // SAML-DATA,开启SSO时传。 + SamlData *string `json:"SamlData,omitempty" name:"SamlData"` +} + +func (r *CreateVpnGatewaySslServerRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpnGatewaySslServerRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "VpnGatewayId") + delete(f, "SslVpnServerName") + delete(f, "LocalAddress") + delete(f, "RemoteAddress") + delete(f, "SslVpnProtocol") + delete(f, "SslVpnPort") + delete(f, "IntegrityAlgorithm") + delete(f, "EncryptAlgorithm") + delete(f, "Compress") + delete(f, "SsoEnabled") + delete(f, "AccessPolicyEnabled") + delete(f, "SamlData") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateVpnGatewaySslServerRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type CreateVpnGatewaySslServerResponseParams struct { + // 创建SSL-VPN server 异步任务ID。 + TaskId *int64 `json:"TaskId,omitempty" name:"TaskId"` + + // SSL-VPN-SERVER 唯一ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type CreateVpnGatewaySslServerResponse struct { + *tchttp.BaseResponse + Response *CreateVpnGatewaySslServerResponseParams `json:"Response"` +} + +func (r *CreateVpnGatewaySslServerResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *CreateVpnGatewaySslServerResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CrossBorderCompliance struct { + // 服务商,可选值:`UNICOM`。 + ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` + + // 合规化审批单`ID`。 + ComplianceId *uint64 `json:"ComplianceId,omitempty" name:"ComplianceId"` + + // 公司全称。 + Company *string `json:"Company,omitempty" name:"Company"` + + // 统一社会信用代码。 + UniformSocialCreditCode *string `json:"UniformSocialCreditCode,omitempty" name:"UniformSocialCreditCode"` + + // 法定代表人。 + LegalPerson *string `json:"LegalPerson,omitempty" name:"LegalPerson"` + + // 发证机关。 + IssuingAuthority *string `json:"IssuingAuthority,omitempty" name:"IssuingAuthority"` + + // 营业执照。 + BusinessLicense *string `json:"BusinessLicense,omitempty" name:"BusinessLicense"` + + // 营业执照住所。 + BusinessAddress *string `json:"BusinessAddress,omitempty" name:"BusinessAddress"` + + // 邮编。 + PostCode *uint64 `json:"PostCode,omitempty" name:"PostCode"` + + // 经办人。 + Manager *string `json:"Manager,omitempty" name:"Manager"` + + // 经办人身份证号。 + ManagerId *string `json:"ManagerId,omitempty" name:"ManagerId"` + + // 经办人身份证。 + ManagerIdCard *string `json:"ManagerIdCard,omitempty" name:"ManagerIdCard"` + + // 经办人身份证地址。 + ManagerAddress *string `json:"ManagerAddress,omitempty" name:"ManagerAddress"` + + // 经办人联系电话。 + ManagerTelephone *string `json:"ManagerTelephone,omitempty" name:"ManagerTelephone"` + + // 电子邮箱。 + Email *string `json:"Email,omitempty" name:"Email"` + + // 服务受理单。 + ServiceHandlingForm *string `json:"ServiceHandlingForm,omitempty" name:"ServiceHandlingForm"` + + // 授权函。 + AuthorizationLetter *string `json:"AuthorizationLetter,omitempty" name:"AuthorizationLetter"` + + // 信息安全承诺书。 + SafetyCommitment *string `json:"SafetyCommitment,omitempty" name:"SafetyCommitment"` + + // 服务开始时间。 + ServiceStartDate *string `json:"ServiceStartDate,omitempty" name:"ServiceStartDate"` + + // 服务截止时间。 + ServiceEndDate *string `json:"ServiceEndDate,omitempty" name:"ServiceEndDate"` + + // 状态。待审批:`PENDING`,已通过:`APPROVED`,已拒绝:`DENY`。 + State *string `json:"State,omitempty" name:"State"` + + // 审批单创建时间。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` +} + +type CrossBorderFlowMonitorData struct { + // 入带宽,单位:`bps`。 + InBandwidth []*int64 `json:"InBandwidth,omitempty" name:"InBandwidth"` + + // 出带宽,单位:`bps`。 + OutBandwidth []*int64 `json:"OutBandwidth,omitempty" name:"OutBandwidth"` + + // 入包,单位:`pps`。 + InPkg []*int64 `json:"InPkg,omitempty" name:"InPkg"` + + // 出包,单位:`pps`。 + OutPkg []*int64 `json:"OutPkg,omitempty" name:"OutPkg"` +} + +type CustomerGateway struct { + // 用户网关唯一ID + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` + + // 网关名称 + CustomerGatewayName *string `json:"CustomerGatewayName,omitempty" name:"CustomerGatewayName"` + + // 公网地址 + IpAddress *string `json:"IpAddress,omitempty" name:"IpAddress"` + + // 创建时间 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` +} + +type CustomerGatewayVendor struct { + // 平台。 + Platform *string `json:"Platform,omitempty" name:"Platform"` // 软件版本。 SoftwareVersion *string `json:"SoftwareVersion,omitempty" name:"SoftwareVersion"` @@ -4426,7 +6513,6 @@ type CustomerGatewayVendor struct { } type CvmInstance struct { - // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -4465,12 +6551,26 @@ type CvmInstance struct { } type DefaultVpcSubnet struct { - - // 默认VpcId + // 默认VpcId。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 默认SubnetId + // 默认SubnetId。 SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 默认Vpc名字。 + VpcName *string `json:"VpcName,omitempty" name:"VpcName"` + + // 默认Subnet名字。 + SubnetName *string `json:"SubnetName,omitempty" name:"SubnetName"` + + // 默认子网网段。 + CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` +} + +// Predefined struct for user +type DeleteAddressTemplateGroupRequestParams struct { + // IP地址模板集合实例ID,例如:ipmg-90cex8mq。 + AddressTemplateGroupId *string `json:"AddressTemplateGroupId,omitempty" name:"AddressTemplateGroupId"` } type DeleteAddressTemplateGroupRequest struct { @@ -4499,13 +6599,15 @@ func (r *DeleteAddressTemplateGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAddressTemplateGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteAddressTemplateGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteAddressTemplateGroupResponseParams `json:"Response"` } func (r *DeleteAddressTemplateGroupResponse) ToJsonString() string { @@ -4519,6 +6621,12 @@ func (r *DeleteAddressTemplateGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAddressTemplateRequestParams struct { + // IP地址模板实例ID,例如:ipm-09o5m8kc。 + AddressTemplateId *string `json:"AddressTemplateId,omitempty" name:"AddressTemplateId"` +} + type DeleteAddressTemplateRequest struct { *tchttp.BaseRequest @@ -4545,13 +6653,15 @@ func (r *DeleteAddressTemplateRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAddressTemplateResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteAddressTemplateResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteAddressTemplateResponseParams `json:"Response"` } func (r *DeleteAddressTemplateResponse) ToJsonString() string { @@ -4565,13 +6675,22 @@ func (r *DeleteAddressTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAssistantCidrRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。 + CidrBlocks []*string `json:"CidrBlocks,omitempty" name:"CidrBlocks"` +} + type DeleteAssistantCidrRequest struct { *tchttp.BaseRequest - // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"] + // CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"]。 CidrBlocks []*string `json:"CidrBlocks,omitempty" name:"CidrBlocks"` } @@ -4595,13 +6714,15 @@ func (r *DeleteAssistantCidrRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteAssistantCidrResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteAssistantCidrResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteAssistantCidrResponseParams `json:"Response"` } func (r *DeleteAssistantCidrResponse) ToJsonString() string { @@ -4615,6 +6736,12 @@ func (r *DeleteAssistantCidrResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteBandwidthPackageRequestParams struct { + // 待删除带宽包唯一ID + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` +} + type DeleteBandwidthPackageRequest struct { *tchttp.BaseRequest @@ -4641,13 +6768,15 @@ func (r *DeleteBandwidthPackageRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteBandwidthPackageResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteBandwidthPackageResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteBandwidthPackageResponseParams `json:"Response"` } func (r *DeleteBandwidthPackageResponse) ToJsonString() string { @@ -4661,6 +6790,12 @@ func (r *DeleteBandwidthPackageResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteCcnRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` +} + type DeleteCcnRequest struct { *tchttp.BaseRequest @@ -4687,13 +6822,15 @@ func (r *DeleteCcnRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteCcnResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteCcnResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteCcnResponseParams `json:"Response"` } func (r *DeleteCcnResponse) ToJsonString() string { @@ -4707,10 +6844,16 @@ func (r *DeleteCcnResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteCustomerGatewayRequestParams struct { + // 对端网关ID,例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/api/215/17516)接口查询对端网关。 + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` +} + type DeleteCustomerGatewayRequest struct { *tchttp.BaseRequest - // 对端网关ID,例如:cgw-2wqq41m9,可通过DescribeCustomerGateways接口查询对端网关。 + // 对端网关ID,例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/api/215/17516)接口查询对端网关。 CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` } @@ -4733,13 +6876,15 @@ func (r *DeleteCustomerGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteCustomerGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteCustomerGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteCustomerGatewayResponseParams `json:"Response"` } func (r *DeleteCustomerGatewayResponse) ToJsonString() string { @@ -4753,6 +6898,12 @@ func (r *DeleteCustomerGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDhcpIpRequestParams struct { + // `DhcpIp`的`ID`,是`DhcpIp`的唯一标识。 + DhcpIpId *string `json:"DhcpIpId,omitempty" name:"DhcpIpId"` +} + type DeleteDhcpIpRequest struct { *tchttp.BaseRequest @@ -4779,13 +6930,15 @@ func (r *DeleteDhcpIpRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDhcpIpResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteDhcpIpResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteDhcpIpResponseParams `json:"Response"` } func (r *DeleteDhcpIpResponse) ToJsonString() string { @@ -4799,6 +6952,15 @@ func (r *DeleteDhcpIpResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDirectConnectGatewayCcnRoutesRequestParams struct { + // 专线网关ID,形如:dcg-prpqlmg1 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 路由ID。形如:ccnr-f49l6u0z。 + RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` +} + type DeleteDirectConnectGatewayCcnRoutesRequest struct { *tchttp.BaseRequest @@ -4829,13 +6991,15 @@ func (r *DeleteDirectConnectGatewayCcnRoutesRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDirectConnectGatewayCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteDirectConnectGatewayCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteDirectConnectGatewayCcnRoutesResponseParams `json:"Response"` } func (r *DeleteDirectConnectGatewayCcnRoutesResponse) ToJsonString() string { @@ -4849,6 +7013,12 @@ func (r *DeleteDirectConnectGatewayCcnRoutesResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDirectConnectGatewayRequestParams struct { + // 专线网关唯一`ID`,形如:`dcg-9o233uri`。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` +} + type DeleteDirectConnectGatewayRequest struct { *tchttp.BaseRequest @@ -4875,13 +7045,15 @@ func (r *DeleteDirectConnectGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteDirectConnectGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteDirectConnectGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteDirectConnectGatewayResponseParams `json:"Response"` } func (r *DeleteDirectConnectGatewayResponse) ToJsonString() string { @@ -4895,10 +7067,19 @@ func (r *DeleteDirectConnectGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteFlowLogRequestParams struct { + // 流日志唯一ID。 + FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` + + // 私用网络ID或者统一ID,建议使用统一ID,删除云联网流日志时,可不填,其他流日志类型必填。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` +} + type DeleteFlowLogRequest struct { *tchttp.BaseRequest - // 流日志唯一ID + // 流日志唯一ID。 FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` // 私用网络ID或者统一ID,建议使用统一ID,删除云联网流日志时,可不填,其他流日志类型必填。 @@ -4925,13 +7106,15 @@ func (r *DeleteFlowLogRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteFlowLogResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteFlowLogResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteFlowLogResponseParams `json:"Response"` } func (r *DeleteFlowLogResponse) ToJsonString() string { @@ -4945,6 +7128,12 @@ func (r *DeleteFlowLogResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteHaVipRequestParams struct { + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。 + HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` +} + type DeleteHaVipRequest struct { *tchttp.BaseRequest @@ -4971,13 +7160,15 @@ func (r *DeleteHaVipRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteHaVipResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteHaVipResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteHaVipResponseParams `json:"Response"` } func (r *DeleteHaVipResponse) ToJsonString() string { @@ -4991,6 +7182,12 @@ func (r *DeleteHaVipResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteIp6TranslatorsRequestParams struct { + // 待释放的IPV6转换实例的唯一ID,形如‘ip6-xxxxxxxx’ + Ip6TranslatorIds []*string `json:"Ip6TranslatorIds,omitempty" name:"Ip6TranslatorIds"` +} + type DeleteIp6TranslatorsRequest struct { *tchttp.BaseRequest @@ -5017,13 +7214,15 @@ func (r *DeleteIp6TranslatorsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteIp6TranslatorsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteIp6TranslatorsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteIp6TranslatorsResponseParams `json:"Response"` } func (r *DeleteIp6TranslatorsResponse) ToJsonString() string { @@ -5037,16 +7236,28 @@ func (r *DeleteIp6TranslatorsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLocalGatewayRequestParams struct { + // 本地网关实例ID。 + LocalGatewayId *string `json:"LocalGatewayId,omitempty" name:"LocalGatewayId"` + + // CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` + + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` +} + type DeleteLocalGatewayRequest struct { *tchttp.BaseRequest - // 本地网关实例ID + // 本地网关实例ID。 LocalGatewayId *string `json:"LocalGatewayId,omitempty" name:"LocalGatewayId"` - // CDC实例ID + // CDC实例ID。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` - // VPC实例ID + // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` } @@ -5071,13 +7282,15 @@ func (r *DeleteLocalGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteLocalGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteLocalGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteLocalGatewayResponseParams `json:"Response"` } func (r *DeleteLocalGatewayResponse) ToJsonString() string { @@ -5091,6 +7304,15 @@ func (r *DeleteLocalGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewayDestinationIpPortTranslationNatRuleRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的端口转换规则。 + DestinationIpPortTranslationNatRules []*DestinationIpPortTranslationNatRule `json:"DestinationIpPortTranslationNatRules,omitempty" name:"DestinationIpPortTranslationNatRules"` +} + type DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest struct { *tchttp.BaseRequest @@ -5121,13 +7343,15 @@ func (r *DeleteNatGatewayDestinationIpPortTranslationNatRuleRequest) FromJsonStr return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewayDestinationIpPortTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNatGatewayDestinationIpPortTranslationNatRuleResponseParams `json:"Response"` } func (r *DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse) ToJsonString() string { @@ -5141,6 +7365,12 @@ func (r *DeleteNatGatewayDestinationIpPortTranslationNatRuleResponse) FromJsonSt return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewayRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` +} + type DeleteNatGatewayRequest struct { *tchttp.BaseRequest @@ -5167,13 +7397,15 @@ func (r *DeleteNatGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNatGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNatGatewayResponseParams `json:"Response"` } func (r *DeleteNatGatewayResponse) ToJsonString() string { @@ -5187,6 +7419,15 @@ func (r *DeleteNatGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewaySourceIpTranslationNatRuleRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的SNAT ID列表,形如:`snat-df43254`。 + NatGatewaySnatIds []*string `json:"NatGatewaySnatIds,omitempty" name:"NatGatewaySnatIds"` +} + type DeleteNatGatewaySourceIpTranslationNatRuleRequest struct { *tchttp.BaseRequest @@ -5217,13 +7458,15 @@ func (r *DeleteNatGatewaySourceIpTranslationNatRuleRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNatGatewaySourceIpTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNatGatewaySourceIpTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNatGatewaySourceIpTranslationNatRuleResponseParams `json:"Response"` } func (r *DeleteNatGatewaySourceIpTranslationNatRuleResponse) ToJsonString() string { @@ -5237,10 +7480,16 @@ func (r *DeleteNatGatewaySourceIpTranslationNatRuleResponse) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetDetectRequestParams struct { + // 网络探测实例`ID`。形如:`netd-12345678`。 + NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` +} + type DeleteNetDetectRequest struct { *tchttp.BaseRequest - // 网络探测实例`ID`。形如:`netd-12345678` + // 网络探测实例`ID`。形如:`netd-12345678`。 NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` } @@ -5263,13 +7512,15 @@ func (r *DeleteNetDetectRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetDetectResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNetDetectResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNetDetectResponseParams `json:"Response"` } func (r *DeleteNetDetectResponse) ToJsonString() string { @@ -5283,6 +7534,73 @@ func (r *DeleteNetDetectResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetworkAclQuintupleEntriesRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +type DeleteNetworkAclQuintupleEntriesRequest struct { + *tchttp.BaseRequest + + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +func (r *DeleteNetworkAclQuintupleEntriesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteNetworkAclQuintupleEntriesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "NetworkAclId") + delete(f, "NetworkAclQuintupleSet") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteNetworkAclQuintupleEntriesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteNetworkAclQuintupleEntriesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteNetworkAclQuintupleEntriesResponse struct { + *tchttp.BaseResponse + Response *DeleteNetworkAclQuintupleEntriesResponseParams `json:"Response"` +} + +func (r *DeleteNetworkAclQuintupleEntriesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteNetworkAclQuintupleEntriesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteNetworkAclRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` +} + type DeleteNetworkAclRequest struct { *tchttp.BaseRequest @@ -5309,13 +7627,15 @@ func (r *DeleteNetworkAclRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetworkAclResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNetworkAclResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNetworkAclResponseParams `json:"Response"` } func (r *DeleteNetworkAclResponse) ToJsonString() string { @@ -5329,6 +7649,12 @@ func (r *DeleteNetworkAclResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetworkInterfaceRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` +} + type DeleteNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -5355,13 +7681,15 @@ func (r *DeleteNetworkInterfaceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteNetworkInterfaceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteNetworkInterfaceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteNetworkInterfaceResponseParams `json:"Response"` } func (r *DeleteNetworkInterfaceResponse) ToJsonString() string { @@ -5375,6 +7703,12 @@ func (r *DeleteNetworkInterfaceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteRouteTableRequestParams struct { + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` +} + type DeleteRouteTableRequest struct { *tchttp.BaseRequest @@ -5401,13 +7735,15 @@ func (r *DeleteRouteTableRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteRouteTableResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteRouteTableResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteRouteTableResponseParams `json:"Response"` } func (r *DeleteRouteTableResponse) ToJsonString() string { @@ -5421,6 +7757,15 @@ func (r *DeleteRouteTableResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteRoutesRequestParams struct { + // 路由表实例ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略对象,删除路由策略时,仅需使用Route的RouteId字段。 + Routes []*Route `json:"Routes,omitempty" name:"Routes"` +} + type DeleteRoutesRequest struct { *tchttp.BaseRequest @@ -5451,16 +7796,18 @@ func (r *DeleteRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DeleteRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DeleteRoutesResponseParams struct { + // 已删除的路由策略详情。 + RouteSet []*Route `json:"RouteSet,omitempty" name:"RouteSet"` - // 已删除的路由策略详情。 - RouteSet []*Route `json:"RouteSet,omitempty" name:"RouteSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DeleteRoutesResponse struct { + *tchttp.BaseResponse + Response *DeleteRoutesResponseParams `json:"Response"` } func (r *DeleteRoutesResponse) ToJsonString() string { @@ -5474,6 +7821,15 @@ func (r *DeleteRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSecurityGroupPoliciesRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合。一个请求中只能删除单个方向的一条或多条规则。支持指定索引(PolicyIndex) 匹配删除和安全组规则匹配删除两种方式,一个请求中只能使用一种匹配方式。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` +} + type DeleteSecurityGroupPoliciesRequest struct { *tchttp.BaseRequest @@ -5504,13 +7860,15 @@ func (r *DeleteSecurityGroupPoliciesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSecurityGroupPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteSecurityGroupPoliciesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteSecurityGroupPoliciesResponseParams `json:"Response"` } func (r *DeleteSecurityGroupPoliciesResponse) ToJsonString() string { @@ -5524,6 +7882,12 @@ func (r *DeleteSecurityGroupPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSecurityGroupRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` +} + type DeleteSecurityGroupRequest struct { *tchttp.BaseRequest @@ -5550,13 +7914,15 @@ func (r *DeleteSecurityGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSecurityGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteSecurityGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteSecurityGroupResponseParams `json:"Response"` } func (r *DeleteSecurityGroupResponse) ToJsonString() string { @@ -5570,6 +7936,12 @@ func (r *DeleteSecurityGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteServiceTemplateGroupRequestParams struct { + // 协议端口模板集合实例ID,例如:ppmg-n17uxvve。 + ServiceTemplateGroupId *string `json:"ServiceTemplateGroupId,omitempty" name:"ServiceTemplateGroupId"` +} + type DeleteServiceTemplateGroupRequest struct { *tchttp.BaseRequest @@ -5596,13 +7968,15 @@ func (r *DeleteServiceTemplateGroupRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteServiceTemplateGroupResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteServiceTemplateGroupResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteServiceTemplateGroupResponseParams `json:"Response"` } func (r *DeleteServiceTemplateGroupResponse) ToJsonString() string { @@ -5616,6 +7990,12 @@ func (r *DeleteServiceTemplateGroupResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteServiceTemplateRequestParams struct { + // 协议端口模板实例ID,例如:ppm-e6dy460g。 + ServiceTemplateId *string `json:"ServiceTemplateId,omitempty" name:"ServiceTemplateId"` +} + type DeleteServiceTemplateRequest struct { *tchttp.BaseRequest @@ -5642,13 +8022,15 @@ func (r *DeleteServiceTemplateRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteServiceTemplateResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteServiceTemplateResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteServiceTemplateResponseParams `json:"Response"` } func (r *DeleteServiceTemplateResponse) ToJsonString() string { @@ -5662,6 +8044,66 @@ func (r *DeleteServiceTemplateResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSnapshotPoliciesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +type DeleteSnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +func (r *DeleteSnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteSnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteSnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteSnapshotPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteSnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *DeleteSnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *DeleteSnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteSnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteSubnetRequestParams struct { + // 子网实例ID。可通过DescribeSubnets接口返回值中的SubnetId获取。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` +} + type DeleteSubnetRequest struct { *tchttp.BaseRequest @@ -5688,13 +8130,15 @@ func (r *DeleteSubnetRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteSubnetResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteSubnetResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteSubnetResponseParams `json:"Response"` } func (r *DeleteSubnetResponse) ToJsonString() string { @@ -5708,6 +8152,15 @@ func (r *DeleteSubnetResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteTemplateMemberRequestParams struct { + // 参数模板实例ID,支持IP地址、协议端口、IP地址组、协议端口组四种参数模板的实例ID。 + TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` + + // 需要添加的参数模板成员信息,支持IP地址、协议端口、IP地址组、协议端口组四种类型,类型需要与TemplateId参数类型一致。 + TemplateMember []*MemberInfo `json:"TemplateMember,omitempty" name:"TemplateMember"` +} + type DeleteTemplateMemberRequest struct { *tchttp.BaseRequest @@ -5738,13 +8191,15 @@ func (r *DeleteTemplateMemberRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteTemplateMemberResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteTemplateMemberResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteTemplateMemberResponseParams `json:"Response"` } func (r *DeleteTemplateMemberResponse) ToJsonString() string { @@ -5758,6 +8213,66 @@ func (r *DeleteTemplateMemberResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteTrafficPackagesRequestParams struct { + // 待删除的流量包唯一ID数组 + TrafficPackageIds []*string `json:"TrafficPackageIds,omitempty" name:"TrafficPackageIds"` +} + +type DeleteTrafficPackagesRequest struct { + *tchttp.BaseRequest + + // 待删除的流量包唯一ID数组 + TrafficPackageIds []*string `json:"TrafficPackageIds,omitempty" name:"TrafficPackageIds"` +} + +func (r *DeleteTrafficPackagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteTrafficPackagesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "TrafficPackageIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteTrafficPackagesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteTrafficPackagesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteTrafficPackagesResponse struct { + *tchttp.BaseResponse + Response *DeleteTrafficPackagesResponseParams `json:"Response"` +} + +func (r *DeleteTrafficPackagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteTrafficPackagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpcEndPointRequestParams struct { + // 终端节点ID。 + EndPointId *string `json:"EndPointId,omitempty" name:"EndPointId"` +} + type DeleteVpcEndPointRequest struct { *tchttp.BaseRequest @@ -5784,13 +8299,15 @@ func (r *DeleteVpcEndPointRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcEndPointResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpcEndPointResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpcEndPointResponseParams `json:"Response"` } func (r *DeleteVpcEndPointResponse) ToJsonString() string { @@ -5804,6 +8321,12 @@ func (r *DeleteVpcEndPointResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcEndPointServiceRequestParams struct { + // 终端节点ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` +} + type DeleteVpcEndPointServiceRequest struct { *tchttp.BaseRequest @@ -5830,13 +8353,15 @@ func (r *DeleteVpcEndPointServiceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcEndPointServiceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpcEndPointServiceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpcEndPointServiceResponseParams `json:"Response"` } func (r *DeleteVpcEndPointServiceResponse) ToJsonString() string { @@ -5850,6 +8375,15 @@ func (r *DeleteVpcEndPointServiceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcEndPointServiceWhiteListRequestParams struct { + // 用户UIN数组。 + UserUin []*string `json:"UserUin,omitempty" name:"UserUin"` + + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` +} + type DeleteVpcEndPointServiceWhiteListRequest struct { *tchttp.BaseRequest @@ -5880,13 +8414,15 @@ func (r *DeleteVpcEndPointServiceWhiteListRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcEndPointServiceWhiteListResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpcEndPointServiceWhiteListResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpcEndPointServiceWhiteListResponseParams `json:"Response"` } func (r *DeleteVpcEndPointServiceWhiteListResponse) ToJsonString() string { @@ -5900,7 +8436,67 @@ func (r *DeleteVpcEndPointServiceWhiteListResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } -type DeleteVpcRequest struct { +// Predefined struct for user +type DeleteVpcPeeringConnectionRequestParams struct { + // 对等连接唯一ID。 + PeeringConnectionId *string `json:"PeeringConnectionId,omitempty" name:"PeeringConnectionId"` +} + +type DeleteVpcPeeringConnectionRequest struct { + *tchttp.BaseRequest + + // 对等连接唯一ID。 + PeeringConnectionId *string `json:"PeeringConnectionId,omitempty" name:"PeeringConnectionId"` +} + +func (r *DeleteVpcPeeringConnectionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpcPeeringConnectionRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "PeeringConnectionId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteVpcPeeringConnectionRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpcPeeringConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteVpcPeeringConnectionResponse struct { + *tchttp.BaseResponse + Response *DeleteVpcPeeringConnectionResponseParams `json:"Response"` +} + +func (r *DeleteVpcPeeringConnectionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpcPeeringConnectionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpcRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` +} + +type DeleteVpcRequest struct { *tchttp.BaseRequest // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 @@ -5926,13 +8522,15 @@ func (r *DeleteVpcRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpcResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpcResponseParams `json:"Response"` } func (r *DeleteVpcResponse) ToJsonString() string { @@ -5946,6 +8544,15 @@ func (r *DeleteVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnConnectionRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // VPN通道实例ID。形如:vpnx-f49l6u0z。 + VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` +} + type DeleteVpnConnectionRequest struct { *tchttp.BaseRequest @@ -5976,13 +8583,15 @@ func (r *DeleteVpnConnectionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpnConnectionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpnConnectionResponseParams `json:"Response"` } func (r *DeleteVpnConnectionResponse) ToJsonString() string { @@ -5996,6 +8605,12 @@ func (r *DeleteVpnConnectionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnGatewayRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` +} + type DeleteVpnGatewayRequest struct { *tchttp.BaseRequest @@ -6022,13 +8637,15 @@ func (r *DeleteVpnGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpnGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpnGatewayResponseParams `json:"Response"` } func (r *DeleteVpnGatewayResponse) ToJsonString() string { @@ -6042,13 +8659,22 @@ func (r *DeleteVpnGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnGatewayRoutesRequestParams struct { + // VPN网关实例ID + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 路由ID信息列表,可以通过[DescribeVpnGatewayRoutes](https://cloud.tencent.com/document/api/215/57676)接口查询。 + RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` +} + type DeleteVpnGatewayRoutesRequest struct { *tchttp.BaseRequest // VPN网关实例ID VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 路由ID信息列表 + // 路由ID信息列表,可以通过[DescribeVpnGatewayRoutes](https://cloud.tencent.com/document/api/215/57676)接口查询。 RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` } @@ -6072,13 +8698,15 @@ func (r *DeleteVpnGatewayRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnGatewayRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DeleteVpnGatewayRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DeleteVpnGatewayRoutesResponseParams `json:"Response"` } func (r *DeleteVpnGatewayRoutesResponse) ToJsonString() string { @@ -6092,6 +8720,131 @@ func (r *DeleteVpnGatewayRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DeleteVpnGatewaySslClientRequestParams struct { + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量删除时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +type DeleteVpnGatewaySslClientRequest struct { + *tchttp.BaseRequest + + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量删除时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +func (r *DeleteVpnGatewaySslClientRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpnGatewaySslClientRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnClientId") + delete(f, "SslVpnClientIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteVpnGatewaySslClientRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpnGatewaySslClientResponseParams struct { + // 异步任务ID。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteVpnGatewaySslClientResponse struct { + *tchttp.BaseResponse + Response *DeleteVpnGatewaySslClientResponseParams `json:"Response"` +} + +func (r *DeleteVpnGatewaySslClientResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpnGatewaySslClientResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpnGatewaySslServerRequestParams struct { + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` +} + +type DeleteVpnGatewaySslServerRequest struct { + *tchttp.BaseRequest + + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` +} + +func (r *DeleteVpnGatewaySslServerRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpnGatewaySslServerRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnServerId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteVpnGatewaySslServerRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DeleteVpnGatewaySslServerResponseParams struct { + // 异步任务ID。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DeleteVpnGatewaySslServerResponse struct { + *tchttp.BaseResponse + Response *DeleteVpnGatewaySslServerResponseParams `json:"Response"` +} + +func (r *DeleteVpnGatewaySslServerResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DeleteVpnGatewaySslServerResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeAccountAttributesRequestParams struct { +} + type DescribeAccountAttributesRequest struct { *tchttp.BaseRequest } @@ -6108,22 +8861,25 @@ func (r *DescribeAccountAttributesRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeAccountAttributesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeAccountAttributesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAccountAttributesResponseParams struct { + // 用户账号属性对象。 + AccountAttributeSet []*AccountAttribute `json:"AccountAttributeSet,omitempty" name:"AccountAttributeSet"` - // 用户账号属性对象 - AccountAttributeSet []*AccountAttribute `json:"AccountAttributeSet,omitempty" name:"AccountAttributeSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAccountAttributesResponse struct { + *tchttp.BaseResponse + Response *DescribeAccountAttributesResponseParams `json:"Response"` } func (r *DescribeAccountAttributesResponse) ToJsonString() string { @@ -6137,6 +8893,10 @@ func (r *DescribeAccountAttributesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAddressQuotaRequestParams struct { +} + type DescribeAddressQuotaRequest struct { *tchttp.BaseRequest } @@ -6153,22 +8913,25 @@ func (r *DescribeAddressQuotaRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeAddressQuotaRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeAddressQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAddressQuotaResponseParams struct { + // 账户 EIP 配额信息。 + QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` - // 账户 EIP 配额信息。 - QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAddressQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeAddressQuotaResponseParams `json:"Response"` } func (r *DescribeAddressQuotaResponse) ToJsonString() string { @@ -6182,6 +8945,20 @@ func (r *DescribeAddressQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAddressTemplateGroupsRequestParams struct { + // 过滤条件。 + //
      • address-template-group-name - String - (过滤条件)IP地址模板集合名称。
      • + //
      • address-template-group-id - String - (过滤条件)IP地址模板实集合例ID,例如:ipmg-mdunqeb6。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeAddressTemplateGroupsRequest struct { *tchttp.BaseRequest @@ -6218,19 +8995,21 @@ func (r *DescribeAddressTemplateGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAddressTemplateGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAddressTemplateGroupsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // IP地址模板。 + AddressTemplateGroupSet []*AddressTemplateGroup `json:"AddressTemplateGroupSet,omitempty" name:"AddressTemplateGroupSet"` - // IP地址模板。 - AddressTemplateGroupSet []*AddressTemplateGroup `json:"AddressTemplateGroupSet,omitempty" name:"AddressTemplateGroupSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAddressTemplateGroupsResponse struct { + *tchttp.BaseResponse + Response *DescribeAddressTemplateGroupsResponseParams `json:"Response"` } func (r *DescribeAddressTemplateGroupsResponse) ToJsonString() string { @@ -6244,6 +9023,21 @@ func (r *DescribeAddressTemplateGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAddressTemplatesRequestParams struct { + // 过滤条件。 + //
      • address-template-name - IP地址模板名称。
      • + //
      • address-template-id - IP地址模板实例ID,例如:ipm-mdunqeb6。
      • + //
      • address-ip - IP地址。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeAddressTemplatesRequest struct { *tchttp.BaseRequest @@ -6281,19 +9075,21 @@ func (r *DescribeAddressTemplatesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAddressTemplatesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAddressTemplatesResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // IP地址模板。 + AddressTemplateSet []*AddressTemplate `json:"AddressTemplateSet,omitempty" name:"AddressTemplateSet"` - // IP地址模版。 - AddressTemplateSet []*AddressTemplate `json:"AddressTemplateSet,omitempty" name:"AddressTemplateSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAddressTemplatesResponse struct { + *tchttp.BaseResponse + Response *DescribeAddressTemplatesResponseParams `json:"Response"` } func (r *DescribeAddressTemplatesResponse) ToJsonString() string { @@ -6307,6 +9103,35 @@ func (r *DescribeAddressTemplatesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAddressesRequestParams struct { + // 标识 EIP 的唯一 ID 列表。EIP 唯一 ID 形如:`eip-11112222`。参数不支持同时指定`AddressIds`和`Filters.address-id`。 + AddressIds []*string `json:"AddressIds,omitempty" name:"AddressIds"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为100。详细的过滤条件如下: + //
      • address-id - String - 是否必填:否 - (过滤条件)按照 EIP 的唯一 ID 过滤。EIP 唯一 ID 形如:eip-11112222。
      • + //
      • address-name - String - 是否必填:否 - (过滤条件)按照 EIP 名称过滤。不支持模糊过滤。
      • + //
      • address-ip - String - 是否必填:否 - (过滤条件)按照 EIP 的 IP 地址过滤。
      • + //
      • address-status - String - 是否必填:否 - (过滤条件)按照 EIP 的状态过滤。状态包含:'CREATING','BINDING','BIND','UNBINDING','UNBIND','OFFLINING','BIND_ENI'。
      • + //
      • instance-id - String - 是否必填:否 - (过滤条件)按照 EIP 绑定的实例 ID 过滤。实例 ID 形如:ins-11112222。
      • + //
      • private-ip-address - String - 是否必填:否 - (过滤条件)按照 EIP 绑定的内网 IP 过滤。
      • + //
      • network-interface-id - String - 是否必填:否 - (过滤条件)按照 EIP 绑定的弹性网卡 ID 过滤。弹性网卡 ID 形如:eni-11112222。
      • + //
      • is-arrears - String - 是否必填:否 - (过滤条件)按照 EIP 是否欠费进行过滤。(TRUE:EIP 处于欠费状态|FALSE:EIP 费用状态正常)
      • + //
      • address-type - String - 是否必填:否 - (过滤条件)按照 IP类型 进行过滤。可选值:'WanIP', 'EIP','AnycastEIP','HighQualityEIP'。默认值是'EIP'。
      • + //
      • address-isp - String - 是否必填:否 - (过滤条件)按照 运营商类型 进行过滤。可选值:'BGP','CMCC','CUCC', 'CTCC'
      • + //
      • dedicated-cluster-id - String - 是否必填:否 - (过滤条件)按照 CDC 的唯一 ID 过滤。CDC 唯一 ID 形如:cluster-11112222。
      • + //
      • tag-key - String - 是否必填:否 - (过滤条件)按照标签键进行过滤。
      • + //
      • tag-value - String - 是否必填:否 - (过滤条件)按照标签值进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。tag-key使用具体的标签键进行替换。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API 中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API 中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeAddressesRequest struct { *tchttp.BaseRequest @@ -6330,10 +9155,10 @@ type DescribeAddressesRequest struct { //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。tag-key使用具体的标签键进行替换。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API 中的相关小节。 Offset *int64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API 中的相关小节。 Limit *int64 `json:"Limit,omitempty" name:"Limit"` } @@ -6359,19 +9184,21 @@ func (r *DescribeAddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAddressesResponseParams struct { + // 符合条件的 EIP 数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的 EIP 数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // EIP 详细信息列表。 + AddressSet []*Address `json:"AddressSet,omitempty" name:"AddressSet"` - // EIP 详细信息列表。 - AddressSet []*Address `json:"AddressSet,omitempty" name:"AddressSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAddressesResponse struct { + *tchttp.BaseResponse + Response *DescribeAddressesResponseParams `json:"Response"` } func (r *DescribeAddressesResponse) ToJsonString() string { @@ -6385,6 +9212,22 @@ func (r *DescribeAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeAssistantCidrRequestParams struct { + // `VPC`实例`ID`数组。形如:[`vpc-6v2ht8q5`] + VpcIds []*string `json:"VpcIds,omitempty" name:"VpcIds"` + + // 过滤条件,参数不支持同时指定VpcIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeAssistantCidrRequest struct { *tchttp.BaseRequest @@ -6424,20 +9267,22 @@ func (r *DescribeAssistantCidrRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeAssistantCidrResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeAssistantCidrResponseParams struct { + // 符合条件的辅助CIDR数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` - // 符合条件的辅助CIDR数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeAssistantCidrResponse struct { + *tchttp.BaseResponse + Response *DescribeAssistantCidrResponseParams `json:"Response"` } func (r *DescribeAssistantCidrResponse) ToJsonString() string { @@ -6451,6 +9296,12 @@ func (r *DescribeAssistantCidrResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeBandwidthPackageBillUsageRequestParams struct { + // 后付费共享带宽包的唯一ID + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` +} + type DescribeBandwidthPackageBillUsageRequest struct { *tchttp.BaseRequest @@ -6477,16 +9328,18 @@ func (r *DescribeBandwidthPackageBillUsageRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } -type DescribeBandwidthPackageBillUsageResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeBandwidthPackageBillUsageResponseParams struct { + // 当前计费用量 + BandwidthPackageBillBandwidthSet []*BandwidthPackageBillBandwidth `json:"BandwidthPackageBillBandwidthSet,omitempty" name:"BandwidthPackageBillBandwidthSet"` - // 当前计费用量 - BandwidthPackageBillBandwidthSet []*BandwidthPackageBillBandwidth `json:"BandwidthPackageBillBandwidthSet,omitempty" name:"BandwidthPackageBillBandwidthSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeBandwidthPackageBillUsageResponse struct { + *tchttp.BaseResponse + Response *DescribeBandwidthPackageBillUsageResponseParams `json:"Response"` } func (r *DescribeBandwidthPackageBillUsageResponse) ToJsonString() string { @@ -6500,6 +9353,10 @@ func (r *DescribeBandwidthPackageBillUsageResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeBandwidthPackageQuotaRequestParams struct { +} + type DescribeBandwidthPackageQuotaRequest struct { *tchttp.BaseRequest } @@ -6516,22 +9373,25 @@ func (r *DescribeBandwidthPackageQuotaRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeBandwidthPackageQuotaRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeBandwidthPackageQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeBandwidthPackageQuotaResponseParams struct { + // 带宽包配额详细信息 + QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` - // 带宽包配额详细信息 - QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeBandwidthPackageQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeBandwidthPackageQuotaResponseParams `json:"Response"` } func (r *DescribeBandwidthPackageQuotaResponse) ToJsonString() string { @@ -6545,6 +9405,23 @@ func (r *DescribeBandwidthPackageQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeBandwidthPackageResourcesRequestParams struct { + // 标识 共享带宽包 的唯一 ID 列表。共享带宽包 唯一 ID 形如:`bwp-11112222`。 + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AddressIds`和`Filters`。详细的过滤条件如下: + //
      • resource-id - String - 是否必填:否 - (过滤条件)按照 共享带宽包内资源 的唯一 ID 过滤。共享带宽包内资源 唯一 ID 形如:eip-11112222。
      • + //
      • resource-type - String - 是否必填:否 - (过滤条件)按照 共享带宽包内资源 类型过滤,目前仅支持 弹性IP 和 负载均衡 两种类型,可选值为 Address 和 LoadBalance。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeBandwidthPackageResourcesRequest struct { *tchttp.BaseRequest @@ -6585,19 +9462,21 @@ func (r *DescribeBandwidthPackageResourcesRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } -type DescribeBandwidthPackageResourcesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeBandwidthPackageResourcesResponseParams struct { + // 符合条件的 共享带宽包内资源 数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的 共享带宽包内资源 数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 共享带宽包内资源 详细信息列表。 + ResourceSet []*Resource `json:"ResourceSet,omitempty" name:"ResourceSet"` - // 共享带宽包内资源 详细信息列表。 - ResourceSet []*Resource `json:"ResourceSet,omitempty" name:"ResourceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeBandwidthPackageResourcesResponse struct { + *tchttp.BaseResponse + Response *DescribeBandwidthPackageResourcesResponseParams `json:"Response"` } func (r *DescribeBandwidthPackageResourcesResponse) ToJsonString() string { @@ -6611,6 +9490,31 @@ func (r *DescribeBandwidthPackageResourcesResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeBandwidthPackagesRequestParams struct { + // 带宽包唯一ID列表 + BandwidthPackageIds []*string `json:"BandwidthPackageIds,omitempty" name:"BandwidthPackageIds"` + + // 每次请求的`Filters`的上限为10。参数不支持同时指定`BandwidthPackageIds`和`Filters`。详细的过滤条件如下: + //
      • bandwidth-package_id - String - 是否必填:否 - (过滤条件)按照带宽包的唯一标识ID过滤。
      • + //
      • bandwidth-package-name - String - 是否必填:否 - (过滤条件)按照 带宽包名称过滤。不支持模糊过滤。
      • + //
      • network-type - String - 是否必填:否 - (过滤条件)按照带宽包的类型过滤。类型包括'HIGH_QUALITY_BGP','BGP','SINGLEISP'和'ANYCAST'。
      • + //
      • charge-type - String - 是否必填:否 - (过滤条件)按照带宽包的计费类型过滤。计费类型包括'TOP5_POSTPAID_BY_MONTH'和'PERCENT95_POSTPAID_BY_MONTH'。
      • + //
      • resource.resource-type - String - 是否必填:否 - (过滤条件)按照带宽包资源类型过滤。资源类型包括'Address'和'LoadBalance'
      • + //
      • resource.resource-id - String - 是否必填:否 - (过滤条件)按照带宽包资源Id过滤。资源Id形如'eip-xxxx','lb-xxxx'
      • + //
      • resource.address-ip - String - 是否必填:否 - (过滤条件)按照带宽包资源Ip过滤。
      • + //
      • tag-key - String - 是否必填:否 - (过滤条件)按照标签键进行过滤。
      • + //
      • tag-value - String - 是否必填:否 - (过滤条件)按照标签值进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。tag-key使用具体的标签键进行替换。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 查询带宽包偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小结。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 查询带宽包返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小结。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeBandwidthPackagesRequest struct { *tchttp.BaseRequest @@ -6630,10 +9534,10 @@ type DescribeBandwidthPackagesRequest struct { //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。tag-key使用具体的标签键进行替换。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 查询带宽包偏移量 + // 查询带宽包偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小结。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 查询带宽包数量限制 + // 查询带宽包返回数量,默认为20,最大值为100。关于Limit的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小结。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } @@ -6659,19 +9563,21 @@ func (r *DescribeBandwidthPackagesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeBandwidthPackagesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeBandwidthPackagesResponseParams struct { + // 符合条件的带宽包数量 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的带宽包数量 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 描述带宽包详细信息 + BandwidthPackageSet []*BandwidthPackage `json:"BandwidthPackageSet,omitempty" name:"BandwidthPackageSet"` - // 描述带宽包详细信息 - BandwidthPackageSet []*BandwidthPackage `json:"BandwidthPackageSet,omitempty" name:"BandwidthPackageSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeBandwidthPackagesResponse struct { + *tchttp.BaseResponse + Response *DescribeBandwidthPackagesResponseParams `json:"Response"` } func (r *DescribeBandwidthPackagesResponse) ToJsonString() string { @@ -6685,6 +9591,31 @@ func (r *DescribeBandwidthPackagesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCcnAttachedInstancesRequestParams struct { + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 过滤条件: + //
      • ccn-id - String -(过滤条件)CCN实例ID。
      • + //
      • instance-type - String -(过滤条件)关联实例类型。
      • + //
      • instance-region - String -(过滤条件)关联实例所属地域。
      • + //
      • instance-id - String -(过滤条件)关联实例ID。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 云联网实例ID + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 排序字段。支持:`CcnId` `InstanceType` `InstanceId` `InstanceName` `InstanceRegion` `AttachedTime` `State`。默认值:`AttachedTime` + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + type DescribeCcnAttachedInstancesRequest struct { *tchttp.BaseRequest @@ -6698,16 +9629,16 @@ type DescribeCcnAttachedInstancesRequest struct { //
      • ccn-id - String -(过滤条件)CCN实例ID。
      • //
      • instance-type - String -(过滤条件)关联实例类型。
      • //
      • instance-region - String -(过滤条件)关联实例所属地域。
      • - //
      • instance-id - String -(过滤条件)关联实例实例ID。
      • + //
      • instance-id - String -(过滤条件)关联实例ID。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 云联网实例ID CcnId *string `json:"CcnId,omitempty" name:"CcnId"` - // 排序字段。支持:`CcnId` `InstanceType` `InstanceId` `InstanceName` `InstanceRegion` `AttachedTime` `State`。 + // 排序字段。支持:`CcnId` `InstanceType` `InstanceId` `InstanceName` `InstanceRegion` `AttachedTime` `State`。默认值:`AttachedTime` OrderField *string `json:"OrderField,omitempty" name:"OrderField"` - // 排序方法。顺序:`ASC`,倒序:`DESC`。 + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` } @@ -6735,19 +9666,21 @@ func (r *DescribeCcnAttachedInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeCcnAttachedInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCcnAttachedInstancesResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 关联实例列表。 + InstanceSet []*CcnAttachedInstance `json:"InstanceSet,omitempty" name:"InstanceSet"` - // 关联实例列表。 - InstanceSet []*CcnAttachedInstance `json:"InstanceSet,omitempty" name:"InstanceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCcnAttachedInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeCcnAttachedInstancesResponseParams `json:"Response"` } func (r *DescribeCcnAttachedInstancesResponse) ToJsonString() string { @@ -6761,10 +9694,16 @@ func (r *DescribeCcnAttachedInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCcnRegionBandwidthLimitsRequestParams struct { + // CCN实例ID,形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` +} + type DescribeCcnRegionBandwidthLimitsRequest struct { *tchttp.BaseRequest - // CCN实例ID。形如:ccn-f49l6u0z。 + // CCN实例ID,形如:ccn-f49l6u0z。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` } @@ -6787,16 +9726,18 @@ func (r *DescribeCcnRegionBandwidthLimitsRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeCcnRegionBandwidthLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCcnRegionBandwidthLimitsResponseParams struct { + // 云联网(CCN)各地域出带宽上限 + CcnRegionBandwidthLimitSet []*CcnRegionBandwidthLimit `json:"CcnRegionBandwidthLimitSet,omitempty" name:"CcnRegionBandwidthLimitSet"` - // 云联网(CCN)各地域出带宽上限 - CcnRegionBandwidthLimitSet []*CcnRegionBandwidthLimit `json:"CcnRegionBandwidthLimitSet,omitempty" name:"CcnRegionBandwidthLimitSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCcnRegionBandwidthLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeCcnRegionBandwidthLimitsResponseParams `json:"Response"` } func (r *DescribeCcnRegionBandwidthLimitsResponse) ToJsonString() string { @@ -6810,13 +9751,37 @@ func (r *DescribeCcnRegionBandwidthLimitsResponse) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCcnRoutesRequestParams struct { + // CCN实例ID,形如:`ccn-gree226l`。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // CCN路由策略唯一ID,形如:`ccnr-f49l6u0z`。 + RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` + + // 过滤条件,参数不支持同时指定RouteIds和Filters。 + //
      • route-id - String -(过滤条件)路由策略ID。
      • + //
      • cidr-block - String -(过滤条件)目的端。
      • + //
      • instance-type - String -(过滤条件)下一跳类型。
      • + //
      • instance-region - String -(过滤条件)下一跳所属地域。
      • + //
      • instance-id - String -(过滤条件)下一跳实例ID。
      • + //
      • route-table-id - String -(过滤条件)路由表ID列表,形如ccntr-1234edfr,可以根据路由表ID 过滤。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeCcnRoutesRequest struct { *tchttp.BaseRequest - // CCN实例ID,形如:ccn-gree226l。 + // CCN实例ID,形如:`ccn-gree226l`。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` - // CCN路由策略唯一ID。形如:ccnr-f49l6u0z。 + // CCN路由策略唯一ID,形如:`ccnr-f49l6u0z`。 RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` // 过滤条件,参数不支持同时指定RouteIds和Filters。 @@ -6858,19 +9823,21 @@ func (r *DescribeCcnRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeCcnRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCcnRoutesResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // CCN路由策略对象。 + RouteSet []*CcnRoute `json:"RouteSet,omitempty" name:"RouteSet"` - // CCN路由策略对象。 - RouteSet []*CcnRoute `json:"RouteSet,omitempty" name:"RouteSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCcnRoutesResponse struct { + *tchttp.BaseResponse + Response *DescribeCcnRoutesResponseParams `json:"Response"` } func (r *DescribeCcnRoutesResponse) ToJsonString() string { @@ -6884,6 +9851,33 @@ func (r *DescribeCcnRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCcnsRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。每次请求的实例的上限为100。参数不支持同时指定CcnIds和Filters。 + CcnIds []*string `json:"CcnIds,omitempty" name:"CcnIds"` + + // 过滤条件,参数不支持同时指定CcnIds和Filters。 + //
      • ccn-id - String - (过滤条件)CCN唯一ID,形如:`ccn-f49l6u0z`。
      • + //
      • ccn-name - String - (过滤条件)CCN名称。
      • + //
      • ccn-description - String - (过滤条件)CCN描述。
      • + //
      • state - String - (过滤条件)实例状态, 'ISOLATED': 隔离中(欠费停服),'AVAILABLE':运行中。
      • + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例:查询绑定了标签的CCN列表。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 排序字段。支持:`CcnId` `CcnName` `CreateTime` `State` `QosLevel`。默认值: `CreateTime` + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + type DescribeCcnsRequest struct { *tchttp.BaseRequest @@ -6891,7 +9885,7 @@ type DescribeCcnsRequest struct { CcnIds []*string `json:"CcnIds,omitempty" name:"CcnIds"` // 过滤条件,参数不支持同时指定CcnIds和Filters。 - //
      • ccn-id - String - (过滤条件)CCN唯一ID,形如:vpc-f49l6u0z。
      • + //
      • ccn-id - String - (过滤条件)CCN唯一ID,形如:`ccn-f49l6u0z`。
      • //
      • ccn-name - String - (过滤条件)CCN名称。
      • //
      • ccn-description - String - (过滤条件)CCN描述。
      • //
      • state - String - (过滤条件)实例状态, 'ISOLATED': 隔离中(欠费停服),'AVAILABLE':运行中。
      • @@ -6905,10 +9899,10 @@ type DescribeCcnsRequest struct { // 返回数量 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 排序字段。支持:`CcnId` `CcnName` `CreateTime` `State` `QosLevel` + // 排序字段。支持:`CcnId` `CcnName` `CreateTime` `State` `QosLevel`。默认值: `CreateTime` OrderField *string `json:"OrderField,omitempty" name:"OrderField"` - // 排序方法。顺序:`ASC`,倒序:`DESC`。 + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` } @@ -6936,19 +9930,21 @@ func (r *DescribeCcnsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeCcnsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCcnsResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // CCN对象。 + CcnSet []*CCN `json:"CcnSet,omitempty" name:"CcnSet"` - // CCN对象。 - CcnSet []*CCN `json:"CcnSet,omitempty" name:"CcnSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCcnsResponse struct { + *tchttp.BaseResponse + Response *DescribeCcnsResponseParams `json:"Response"` } func (r *DescribeCcnsResponse) ToJsonString() string { @@ -6962,6 +9958,20 @@ func (r *DescribeCcnsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeClassicLinkInstancesRequestParams struct { + // 过滤条件。 + //
      • vpc-id - String - (过滤条件)VPC实例ID。
      • + //
      • vm-ip - String - (过滤条件)基础网络云服务器IP。
      • + Filters []*FilterObject `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认值0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeClassicLinkInstancesRequest struct { *tchttp.BaseRequest @@ -6970,10 +9980,10 @@ type DescribeClassicLinkInstancesRequest struct { //
      • vm-ip - String - (过滤条件)基础网络云服务器IP。
      • Filters []*FilterObject `json:"Filters,omitempty" name:"Filters"` - // 偏移量 + // 偏移量,默认值0。 Offset *string `json:"Offset,omitempty" name:"Offset"` - // 返回数量 + // 返回数量,默认为20,最大值为100。 Limit *string `json:"Limit,omitempty" name:"Limit"` } @@ -6998,19 +10008,21 @@ func (r *DescribeClassicLinkInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeClassicLinkInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeClassicLinkInstancesResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 私有网络和基础网络互通设备。 + ClassicLinkInstanceSet []*ClassicLinkInstance `json:"ClassicLinkInstanceSet,omitempty" name:"ClassicLinkInstanceSet"` - // 私有网络和基础网络互通设备。 - ClassicLinkInstanceSet []*ClassicLinkInstance `json:"ClassicLinkInstanceSet,omitempty" name:"ClassicLinkInstanceSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeClassicLinkInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeClassicLinkInstancesResponseParams `json:"Response"` } func (r *DescribeClassicLinkInstancesResponse) ToJsonString() string { @@ -7024,9 +10036,84 @@ func (r *DescribeClassicLinkInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeCrossBorderComplianceRequest struct { +// Predefined struct for user +type DescribeCrossBorderCcnRegionBandwidthLimitsRequestParams struct { + // 过滤条件,目前`value`值个数只支持一个,可支持的字段有: + //
      • `source-region` 源地域,值形如:`["ap-guangzhou"]`
      • `destination-region` 目的地域,值形如:`["ap-shanghai"]`
      • `ccn-ids` 云联网ID数组,值形如:`["ccn-12345678"]`
      • `user-account-id` 用户账号ID,值形如`["12345678"]`
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数据量可选值0到100之间的整数,默认20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeCrossBorderCcnRegionBandwidthLimitsRequest struct { *tchttp.BaseRequest + // 过滤条件,目前`value`值个数只支持一个,可支持的字段有: + //
      • `source-region` 源地域,值形如:`["ap-guangzhou"]`
      • `destination-region` 目的地域,值形如:`["ap-shanghai"]`
      • `ccn-ids` 云联网ID数组,值形如:`["ccn-12345678"]`
      • `user-account-id` 用户账号ID,值形如`["12345678"]`
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数据量可选值0到100之间的整数,默认20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeCrossBorderCcnRegionBandwidthLimitsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCrossBorderCcnRegionBandwidthLimitsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCrossBorderCcnRegionBandwidthLimitsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCrossBorderCcnRegionBandwidthLimitsResponseParams struct { + // 符合条件的对象总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 云联网地域间限速带宽实例的信息。 + CcnBandwidthSet []*CcnBandwidth `json:"CcnBandwidthSet,omitempty" name:"CcnBandwidthSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeCrossBorderCcnRegionBandwidthLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeCrossBorderCcnRegionBandwidthLimitsResponseParams `json:"Response"` +} + +func (r *DescribeCrossBorderCcnRegionBandwidthLimitsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCrossBorderCcnRegionBandwidthLimitsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCrossBorderComplianceRequestParams struct { // (精确匹配)服务商,可选值:`UNICOM`。 ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` @@ -7082,55 +10169,115 @@ type DescribeCrossBorderComplianceRequest struct { Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } -func (r *DescribeCrossBorderComplianceRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} +type DescribeCrossBorderComplianceRequest struct { + *tchttp.BaseRequest -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DescribeCrossBorderComplianceRequest) FromJsonString(s string) error { - f := make(map[string]interface{}) - if err := json.Unmarshal([]byte(s), &f); err != nil { - return err - } - delete(f, "ServiceProvider") - delete(f, "ComplianceId") - delete(f, "Company") - delete(f, "UniformSocialCreditCode") - delete(f, "LegalPerson") - delete(f, "IssuingAuthority") - delete(f, "BusinessAddress") - delete(f, "PostCode") - delete(f, "Manager") - delete(f, "ManagerId") - delete(f, "ManagerAddress") - delete(f, "ManagerTelephone") - delete(f, "Email") - delete(f, "ServiceStartDate") - delete(f, "ServiceEndDate") - delete(f, "State") - delete(f, "Offset") - delete(f, "Limit") - if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCrossBorderComplianceRequest has unknown keys!", "") - } - return json.Unmarshal([]byte(s), &r) + // (精确匹配)服务商,可选值:`UNICOM`。 + ServiceProvider *string `json:"ServiceProvider,omitempty" name:"ServiceProvider"` + + // (精确匹配)合规化审批单`ID`。 + ComplianceId *uint64 `json:"ComplianceId,omitempty" name:"ComplianceId"` + + // (模糊查询)公司名称。 + Company *string `json:"Company,omitempty" name:"Company"` + + // (精确匹配)统一社会信用代码。 + UniformSocialCreditCode *string `json:"UniformSocialCreditCode,omitempty" name:"UniformSocialCreditCode"` + + // (模糊查询)法定代表人。 + LegalPerson *string `json:"LegalPerson,omitempty" name:"LegalPerson"` + + // (模糊查询)发证机关。 + IssuingAuthority *string `json:"IssuingAuthority,omitempty" name:"IssuingAuthority"` + + // (模糊查询)营业执照住所。 + BusinessAddress *string `json:"BusinessAddress,omitempty" name:"BusinessAddress"` + + // (精确匹配)邮编。 + PostCode *uint64 `json:"PostCode,omitempty" name:"PostCode"` + + // (模糊查询)经办人。 + Manager *string `json:"Manager,omitempty" name:"Manager"` + + // (精确查询)经办人身份证号。 + ManagerId *string `json:"ManagerId,omitempty" name:"ManagerId"` + + // (模糊查询)经办人身份证地址。 + ManagerAddress *string `json:"ManagerAddress,omitempty" name:"ManagerAddress"` + + // (精确匹配)经办人联系电话。 + ManagerTelephone *string `json:"ManagerTelephone,omitempty" name:"ManagerTelephone"` + + // (精确匹配)电子邮箱。 + Email *string `json:"Email,omitempty" name:"Email"` + + // (精确匹配)服务开始日期,如:`2020-07-28`。 + ServiceStartDate *string `json:"ServiceStartDate,omitempty" name:"ServiceStartDate"` + + // (精确匹配)服务结束日期,如:`2021-07-28`。 + ServiceEndDate *string `json:"ServiceEndDate,omitempty" name:"ServiceEndDate"` + + // (精确匹配)状态。待审批:`PENDING`,通过:`APPROVED `,拒绝:`DENY`。 + State *string `json:"State,omitempty" name:"State"` + + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } -type DescribeCrossBorderComplianceResponse struct { - *tchttp.BaseResponse - Response *struct { +func (r *DescribeCrossBorderComplianceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCrossBorderComplianceRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "ServiceProvider") + delete(f, "ComplianceId") + delete(f, "Company") + delete(f, "UniformSocialCreditCode") + delete(f, "LegalPerson") + delete(f, "IssuingAuthority") + delete(f, "BusinessAddress") + delete(f, "PostCode") + delete(f, "Manager") + delete(f, "ManagerId") + delete(f, "ManagerAddress") + delete(f, "ManagerTelephone") + delete(f, "Email") + delete(f, "ServiceStartDate") + delete(f, "ServiceEndDate") + delete(f, "State") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCrossBorderComplianceRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} - // 合规化审批单列表。 - CrossBorderComplianceSet []*CrossBorderCompliance `json:"CrossBorderComplianceSet,omitempty" name:"CrossBorderComplianceSet"` +// Predefined struct for user +type DescribeCrossBorderComplianceResponseParams struct { + // 合规化审批单列表。 + CrossBorderComplianceSet []*CrossBorderCompliance `json:"CrossBorderComplianceSet,omitempty" name:"CrossBorderComplianceSet"` + + // 合规化审批单总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 合规化审批单总数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCrossBorderComplianceResponse struct { + *tchttp.BaseResponse + Response *DescribeCrossBorderComplianceResponseParams `json:"Response"` } func (r *DescribeCrossBorderComplianceResponse) ToJsonString() string { @@ -7144,6 +10291,110 @@ func (r *DescribeCrossBorderComplianceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCrossBorderFlowMonitorRequestParams struct { + // 源地域。 + SourceRegion *string `json:"SourceRegion,omitempty" name:"SourceRegion"` + + // 目的地域。 + DestinationRegion *string `json:"DestinationRegion,omitempty" name:"DestinationRegion"` + + // 云联网ID。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 云联网所属账号。 + CcnUin *string `json:"CcnUin,omitempty" name:"CcnUin"` + + // 时间粒度。单位为:秒,如60为60s的时间粒度 + Period *int64 `json:"Period,omitempty" name:"Period"` + + // 开始时间。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 结束时间。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + +type DescribeCrossBorderFlowMonitorRequest struct { + *tchttp.BaseRequest + + // 源地域。 + SourceRegion *string `json:"SourceRegion,omitempty" name:"SourceRegion"` + + // 目的地域。 + DestinationRegion *string `json:"DestinationRegion,omitempty" name:"DestinationRegion"` + + // 云联网ID。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 云联网所属账号。 + CcnUin *string `json:"CcnUin,omitempty" name:"CcnUin"` + + // 时间粒度。单位为:秒,如60为60s的时间粒度 + Period *int64 `json:"Period,omitempty" name:"Period"` + + // 开始时间。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 结束时间。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + +func (r *DescribeCrossBorderFlowMonitorRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCrossBorderFlowMonitorRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SourceRegion") + delete(f, "DestinationRegion") + delete(f, "CcnId") + delete(f, "CcnUin") + delete(f, "Period") + delete(f, "StartTime") + delete(f, "EndTime") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCrossBorderFlowMonitorRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCrossBorderFlowMonitorResponseParams struct { + // 云联网跨境带宽监控数据 + // 注意:此字段可能返回 null,表示取不到有效值。 + CrossBorderFlowMonitorData []*CrossBorderFlowMonitorData `json:"CrossBorderFlowMonitorData,omitempty" name:"CrossBorderFlowMonitorData"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeCrossBorderFlowMonitorResponse struct { + *tchttp.BaseResponse + Response *DescribeCrossBorderFlowMonitorResponseParams `json:"Response"` +} + +func (r *DescribeCrossBorderFlowMonitorResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeCrossBorderFlowMonitorResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeCustomerGatewayVendorsRequestParams struct { +} + type DescribeCustomerGatewayVendorsRequest struct { *tchttp.BaseRequest } @@ -7160,22 +10411,25 @@ func (r *DescribeCustomerGatewayVendorsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeCustomerGatewayVendorsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeCustomerGatewayVendorsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCustomerGatewayVendorsResponseParams struct { + // 对端网关厂商信息对象。 + CustomerGatewayVendorSet []*CustomerGatewayVendor `json:"CustomerGatewayVendorSet,omitempty" name:"CustomerGatewayVendorSet"` - // 对端网关厂商信息对象。 - CustomerGatewayVendorSet []*CustomerGatewayVendor `json:"CustomerGatewayVendorSet,omitempty" name:"CustomerGatewayVendorSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCustomerGatewayVendorsResponse struct { + *tchttp.BaseResponse + Response *DescribeCustomerGatewayVendorsResponseParams `json:"Response"` } func (r *DescribeCustomerGatewayVendorsResponse) ToJsonString() string { @@ -7189,6 +10443,24 @@ func (r *DescribeCustomerGatewayVendorsResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeCustomerGatewaysRequestParams struct { + // 对端网关ID,例如:cgw-2wqq41m9。每次请求的实例的上限为100。参数不支持同时指定CustomerGatewayIds和Filters。 + CustomerGatewayIds []*string `json:"CustomerGatewayIds,omitempty" name:"CustomerGatewayIds"` + + // 过滤条件,详见下表:实例过滤条件表。每次请求的Filters的上限为10,Filter.Values的上限为5。参数不支持同时指定CustomerGatewayIds和Filters。 + //
      • customer-gateway-id - String - (过滤条件)用户网关唯一ID形如:`cgw-mgp33pll`。
      • + //
      • customer-gateway-name - String - (过滤条件)用户网关名称形如:`test-cgw`。
      • + //
      • ip-address - String - (过滤条件)公网地址形如:`58.211.1.12`。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeCustomerGatewaysRequest struct { *tchttp.BaseRequest @@ -7201,7 +10473,7 @@ type DescribeCustomerGatewaysRequest struct { //
      • ip-address - String - (过滤条件)公网地址形如:`58.211.1.12`。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API 简介中的相关小节。 + // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` // 返回数量,默认为20,最大值为100。 @@ -7230,19 +10502,21 @@ func (r *DescribeCustomerGatewaysRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeCustomerGatewaysResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeCustomerGatewaysResponseParams struct { + // 对端网关对象列表。 + CustomerGatewaySet []*CustomerGateway `json:"CustomerGatewaySet,omitempty" name:"CustomerGatewaySet"` - // 对端网关对象列表 - CustomerGatewaySet []*CustomerGateway `json:"CustomerGatewaySet,omitempty" name:"CustomerGatewaySet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeCustomerGatewaysResponse struct { + *tchttp.BaseResponse + Response *DescribeCustomerGatewaysResponseParams `json:"Response"` } func (r *DescribeCustomerGatewaysResponse) ToJsonString() string { @@ -7256,6 +10530,26 @@ func (r *DescribeCustomerGatewaysResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeDhcpIpsRequestParams struct { + // DhcpIp实例ID。形如:dhcpip-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定DhcpIpIds和Filters。 + DhcpIpIds []*string `json:"DhcpIpIds,omitempty" name:"DhcpIpIds"` + + // 过滤条件,参数不支持同时指定DhcpIpIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • subnet-id - String - (过滤条件)所属子网实例ID,形如:subnet-f49l6u0z。
      • + //
      • dhcpip-id - String - (过滤条件)DhcpIp实例ID,形如:dhcpip-pxir56ns。
      • + //
      • dhcpip-name - String - (过滤条件)DhcpIp实例名称。
      • + //
      • address-ip - String - (过滤条件)DhcpIp实例的IP,根据IP精确查找。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeDhcpIpsRequest struct { *tchttp.BaseRequest @@ -7299,19 +10593,21 @@ func (r *DescribeDhcpIpsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeDhcpIpsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeDhcpIpsResponseParams struct { + // 实例详细信息列表。 + DhcpIpSet []*DhcpIp `json:"DhcpIpSet,omitempty" name:"DhcpIpSet"` - // 实例详细信息列表。 - DhcpIpSet []*DhcpIp `json:"DhcpIpSet,omitempty" name:"DhcpIpSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeDhcpIpsResponse struct { + *tchttp.BaseResponse + Response *DescribeDhcpIpsResponseParams `json:"Response"` } func (r *DescribeDhcpIpsResponse) ToJsonString() string { @@ -7325,6 +10621,23 @@ func (r *DescribeDhcpIpsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeDirectConnectGatewayCcnRoutesRequestParams struct { + // 专线网关ID,形如:`dcg-prpqlmg1`。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 云联网路由学习类型,可选值: + //
      • `BGP` - 自动学习。
      • + //
      • `STATIC` - 静态,即用户配置,默认值。
      • + CcnRouteType *string `json:"CcnRouteType,omitempty" name:"CcnRouteType"` + + // 偏移量。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeDirectConnectGatewayCcnRoutesRequest struct { *tchttp.BaseRequest @@ -7365,19 +10678,21 @@ func (r *DescribeDirectConnectGatewayCcnRoutesRequest) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } -type DescribeDirectConnectGatewayCcnRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeDirectConnectGatewayCcnRoutesResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 云联网路由(IDC网段)列表。 + RouteSet []*DirectConnectGatewayCcnRoute `json:"RouteSet,omitempty" name:"RouteSet"` - // 云联网路由(IDC网段)列表。 - RouteSet []*DirectConnectGatewayCcnRoute `json:"RouteSet,omitempty" name:"RouteSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeDirectConnectGatewayCcnRoutesResponse struct { + *tchttp.BaseResponse + Response *DescribeDirectConnectGatewayCcnRoutesResponseParams `json:"Response"` } func (r *DescribeDirectConnectGatewayCcnRoutesResponse) ToJsonString() string { @@ -7391,6 +10706,28 @@ func (r *DescribeDirectConnectGatewayCcnRoutesResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeDirectConnectGatewaysRequestParams struct { + // 专线网关唯一`ID`,形如:`dcg-9o233uri`。 + DirectConnectGatewayIds []*string `json:"DirectConnectGatewayIds,omitempty" name:"DirectConnectGatewayIds"` + + // 过滤条件,参数不支持同时指定`DirectConnectGatewayIds`和`Filters`。 + //
      • direct-connect-gateway-id - String - 专线网关唯一`ID`,形如:`dcg-9o233uri`。
      • + //
      • direct-connect-gateway-name - String - 专线网关名称,默认模糊查询。
      • + //
      • direct-connect-gateway-ip - String - 专线网关`IP`。
      • + //
      • gateway-type - String - 网关类型,可选值:`NORMAL`(普通型)、`NAT`(NAT型)。
      • + //
      • network-type- String - 网络类型,可选值:`VPC`(私有网络类型)、`CCN`(云联网类型)。
      • + //
      • ccn-id - String - 专线网关所在云联网`ID`。
      • + //
      • vpc-id - String - 专线网关所在私有网络`ID`。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeDirectConnectGatewaysRequest struct { *tchttp.BaseRequest @@ -7436,19 +10773,21 @@ func (r *DescribeDirectConnectGatewaysRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeDirectConnectGatewaysResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeDirectConnectGatewaysResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 专线网关对象数组。 + DirectConnectGatewaySet []*DirectConnectGateway `json:"DirectConnectGatewaySet,omitempty" name:"DirectConnectGatewaySet"` - // 专线网关对象数组。 - DirectConnectGatewaySet []*DirectConnectGateway `json:"DirectConnectGatewaySet,omitempty" name:"DirectConnectGatewaySet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeDirectConnectGatewaysResponse struct { + *tchttp.BaseResponse + Response *DescribeDirectConnectGatewaysResponseParams `json:"Response"` } func (r *DescribeDirectConnectGatewaysResponse) ToJsonString() string { @@ -7462,13 +10801,22 @@ func (r *DescribeDirectConnectGatewaysResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeFlowLogRequestParams struct { + // 私用网络ID或者统一ID,建议使用统一ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 流日志唯一ID。 + FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` +} + type DescribeFlowLogRequest struct { *tchttp.BaseRequest - // 私用网络ID或者统一ID,建议使用统一ID + // 私用网络ID或者统一ID,建议使用统一ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 流日志唯一ID + // 流日志唯一ID。 FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` } @@ -7492,16 +10840,18 @@ func (r *DescribeFlowLogRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeFlowLogResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeFlowLogResponseParams struct { + // 流日志信息。 + FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` - // 流日志信息 - FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeFlowLogResponse struct { + *tchttp.BaseResponse + Response *DescribeFlowLogResponseParams `json:"Response"` } func (r *DescribeFlowLogResponse) ToJsonString() string { @@ -7515,49 +10865,99 @@ func (r *DescribeFlowLogResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeFlowLogsRequestParams struct { + // 私用网络ID或者统一ID,建议使用统一ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 流日志唯一ID。 + FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` + + // 流日志实例名字。 + FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` + + // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE。 + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源唯一ID。 + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 流日志采集类型,ACCEPT|REJECT|ALL。 + TrafficType *string `json:"TrafficType,omitempty" name:"TrafficType"` + + // 流日志存储ID。 + CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` + + // 流日志存储ID状态。 + CloudLogState *string `json:"CloudLogState,omitempty" name:"CloudLogState"` + + // 按某个字段排序,支持字段:flowLogName,createTime,默认按createTime。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 升序(asc)还是降序(desc),默认:desc。 + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 每页行数,默认为10。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 过滤条件,参数不支持同时指定FlowLogId和Filters。 + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。
      • + Filters *Filter `json:"Filters,omitempty" name:"Filters"` + + // 流日志存储ID对应的地域信息。 + CloudLogRegion *string `json:"CloudLogRegion,omitempty" name:"CloudLogRegion"` +} + type DescribeFlowLogsRequest struct { *tchttp.BaseRequest - // 私用网络ID或者统一ID,建议使用统一ID + // 私用网络ID或者统一ID,建议使用统一ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 流日志唯一ID + // 流日志唯一ID。 FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` - // 流日志实例名字 + // 流日志实例名字。 FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` - // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE + // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE。 ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` - // 资源唯一ID + // 资源唯一ID。 ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` - // 流日志采集类型,ACCEPT|REJECT|ALL + // 流日志采集类型,ACCEPT|REJECT|ALL。 TrafficType *string `json:"TrafficType,omitempty" name:"TrafficType"` - // 流日志存储ID + // 流日志存储ID。 CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` - // 流日志存储ID状态 + // 流日志存储ID状态。 CloudLogState *string `json:"CloudLogState,omitempty" name:"CloudLogState"` - // 按某个字段排序,支持字段:flowLogName,createTime,默认按createTime + // 按某个字段排序,支持字段:flowLogName,createTime,默认按createTime。 OrderField *string `json:"OrderField,omitempty" name:"OrderField"` - // 升序(asc)还是降序(desc),默认:desc + // 升序(asc)还是降序(desc),默认:desc。 OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` // 偏移量,默认为0。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 每页行数,默认为10 + // 每页行数,默认为10。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 过滤条件,参数不支持同时指定FlowLogIds和Filters。 + // 过滤条件,参数不支持同时指定FlowLogId和Filters。 //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。
      • Filters *Filter `json:"Filters,omitempty" name:"Filters"` + + // 流日志存储ID对应的地域信息。 + CloudLogRegion *string `json:"CloudLogRegion,omitempty" name:"CloudLogRegion"` } func (r *DescribeFlowLogsRequest) ToJsonString() string { @@ -7585,25 +10985,28 @@ func (r *DescribeFlowLogsRequest) FromJsonString(s string) error { delete(f, "Offset") delete(f, "Limit") delete(f, "Filters") + delete(f, "CloudLogRegion") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeFlowLogsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeFlowLogsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeFlowLogsResponseParams struct { + // 流日志实例集合。 + FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` - // 流日志实例集合 - FlowLog []*FlowLog `json:"FlowLog,omitempty" name:"FlowLog"` + // 流日志总数目。 + TotalNum *uint64 `json:"TotalNum,omitempty" name:"TotalNum"` - // 流日志总数目 - TotalNum *uint64 `json:"TotalNum,omitempty" name:"TotalNum"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeFlowLogsResponse struct { + *tchttp.BaseResponse + Response *DescribeFlowLogsResponseParams `json:"Response"` } func (r *DescribeFlowLogsResponse) ToJsonString() string { @@ -7617,6 +11020,36 @@ func (r *DescribeFlowLogsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeGatewayFlowMonitorDetailRequestParams struct { + // 时间点。表示要查询这分钟内的明细。如:`2019-02-28 18:15:20`,将查询 `18:15` 这一分钟内的明细。 + TimePoint *string `json:"TimePoint,omitempty" name:"TimePoint"` + + // VPN网关实例ID,形如:`vpn-ltjahce6`。 + VpnId *string `json:"VpnId,omitempty" name:"VpnId"` + + // 专线网关实例ID,形如:`dcg-ltjahce6`。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 对等连接实例ID,形如:`pcx-ltjahce6`。 + PeeringConnectionId *string `json:"PeeringConnectionId,omitempty" name:"PeeringConnectionId"` + + // NAT网关实例ID,形如:`nat-ltjahce6`。 + NatId *string `json:"NatId,omitempty" name:"NatId"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 排序字段。支持 `InPkg` `OutPkg` `InTraffic` `OutTraffic`。默认值`OutTraffic`。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方法。顺序:`ASC`,倒序:`DESC`。默认值`DESC`。 + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + type DescribeGatewayFlowMonitorDetailRequest struct { *tchttp.BaseRequest @@ -7635,16 +11068,16 @@ type DescribeGatewayFlowMonitorDetailRequest struct { // NAT网关实例ID,形如:`nat-ltjahce6`。 NatId *string `json:"NatId,omitempty" name:"NatId"` - // 偏移量。 + // 偏移量,默认为0。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量。 + // 返回数量,默认为20,最大值为100。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 排序字段。支持 `InPkg` `OutPkg` `InTraffic` `OutTraffic`。 + // 排序字段。支持 `InPkg` `OutPkg` `InTraffic` `OutTraffic`。默认值`OutTraffic`。 OrderField *string `json:"OrderField,omitempty" name:"OrderField"` - // 排序方法。顺序:`ASC`,倒序:`DESC`。 + // 排序方法。顺序:`ASC`,倒序:`DESC`。默认值`DESC`。 OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` } @@ -7675,19 +11108,21 @@ func (r *DescribeGatewayFlowMonitorDetailRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeGatewayFlowMonitorDetailResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeGatewayFlowMonitorDetailResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 网关流量监控明细。 + GatewayFlowMonitorDetailSet []*GatewayFlowMonitorDetail `json:"GatewayFlowMonitorDetailSet,omitempty" name:"GatewayFlowMonitorDetailSet"` - // 网关流量监控明细。 - GatewayFlowMonitorDetailSet []*GatewayFlowMonitorDetail `json:"GatewayFlowMonitorDetailSet,omitempty" name:"GatewayFlowMonitorDetailSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeGatewayFlowMonitorDetailResponse struct { + *tchttp.BaseResponse + Response *DescribeGatewayFlowMonitorDetailResponseParams `json:"Response"` } func (r *DescribeGatewayFlowMonitorDetailResponse) ToJsonString() string { @@ -7701,6 +11136,24 @@ func (r *DescribeGatewayFlowMonitorDetailResponse) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeGatewayFlowQosRequestParams struct { + // 网关实例ID,目前我们支持的网关实例类型有, + // 专线网关实例ID,形如,`dcg-ltjahce6`; + // Nat网关实例ID,形如,`nat-ltjahce6`; + // VPN网关实例ID,形如,`vpn-ltjahce6`。 + GatewayId *string `json:"GatewayId,omitempty" name:"GatewayId"` + + // 限流的云服务器内网IP。 + IpAddresses []*string `json:"IpAddresses,omitempty" name:"IpAddresses"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeGatewayFlowQosRequest struct { *tchttp.BaseRequest @@ -7742,19 +11195,21 @@ func (r *DescribeGatewayFlowQosRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeGatewayFlowQosResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeGatewayFlowQosResponseParams struct { + // 实例详细信息列表。 + GatewayQosSet []*GatewayQos `json:"GatewayQosSet,omitempty" name:"GatewayQosSet"` - // 实例详细信息列表。 - GatewayQosSet []*GatewayQos `json:"GatewayQosSet,omitempty" name:"GatewayQosSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeGatewayFlowQosResponse struct { + *tchttp.BaseResponse + Response *DescribeGatewayFlowQosResponseParams `json:"Response"` } func (r *DescribeGatewayFlowQosResponse) ToJsonString() string { @@ -7768,6 +11223,27 @@ func (r *DescribeGatewayFlowQosResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeHaVipsRequestParams struct { + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。 + HaVipIds []*string `json:"HaVipIds,omitempty" name:"HaVipIds"` + + // 过滤条件,参数不支持同时指定`HaVipIds`和`Filters`。 + //
      • havip-id - String - `HAVIP`唯一`ID`,形如:`havip-9o233uri`。
      • + //
      • havip-name - String - `HAVIP`名称。
      • + //
      • vpc-id - String - `HAVIP`所在私有网络`ID`。
      • + //
      • subnet-id - String - `HAVIP`所在子网`ID`。
      • + //
      • vip - String - `HAVIP`的地址`VIP`。
      • + //
      • address-ip - String - `HAVIP`绑定的弹性公网`IP`。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeHaVipsRequest struct { *tchttp.BaseRequest @@ -7783,10 +11259,10 @@ type DescribeHaVipsRequest struct { //
      • address-ip - String - `HAVIP`绑定的弹性公网`IP`。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 偏移量 + // 偏移量,默认为0。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量 + // 返回数量,默认为20,最大值为100。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } @@ -7812,19 +11288,21 @@ func (r *DescribeHaVipsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeHaVipsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeHaVipsResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // `HAVIP`对象数组。 + HaVipSet []*HaVip `json:"HaVipSet,omitempty" name:"HaVipSet"` - // `HAVIP`对象数组。 - HaVipSet []*HaVip `json:"HaVipSet,omitempty" name:"HaVipSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeHaVipsResponse struct { + *tchttp.BaseResponse + Response *DescribeHaVipsResponseParams `json:"Response"` } func (r *DescribeHaVipsResponse) ToJsonString() string { @@ -7838,6 +11316,23 @@ func (r *DescribeHaVipsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeIp6AddressesRequestParams struct { + // 标识 IPV6 的唯一 ID 列表。IPV6 唯一 ID 形如:`eip-11112222`。参数不支持同时指定`Ip6AddressIds`和`Filters`。 + Ip6AddressIds []*string `json:"Ip6AddressIds,omitempty" name:"Ip6AddressIds"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`AddressIds`和`Filters`。详细的过滤条件如下: + //
      • address-ip - String - 是否必填:否 - (过滤条件)按照 EIP 的 IP 地址过滤。
      • + //
      • network-interface-id - String - 是否必填:否 - (过滤条件)按照弹性网卡的唯一ID过滤。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeIp6AddressesRequest struct { *tchttp.BaseRequest @@ -7878,19 +11373,21 @@ func (r *DescribeIp6AddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeIp6AddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeIp6AddressesResponseParams struct { + // 符合条件的 IPV6 数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的 IPV6 数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // IPV6 详细信息列表。 + AddressSet []*Address `json:"AddressSet,omitempty" name:"AddressSet"` - // IPV6 详细信息列表。 - AddressSet []*Address `json:"AddressSet,omitempty" name:"AddressSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeIp6AddressesResponse struct { + *tchttp.BaseResponse + Response *DescribeIp6AddressesResponseParams `json:"Response"` } func (r *DescribeIp6AddressesResponse) ToJsonString() string { @@ -7904,6 +11401,12 @@ func (r *DescribeIp6AddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeIp6TranslatorQuotaRequestParams struct { + // 待查询IPV6转换实例的唯一ID列表,形如ip6-xxxxxxxx + Ip6TranslatorIds []*string `json:"Ip6TranslatorIds,omitempty" name:"Ip6TranslatorIds"` +} + type DescribeIp6TranslatorQuotaRequest struct { *tchttp.BaseRequest @@ -7930,17 +11433,19 @@ func (r *DescribeIp6TranslatorQuotaRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeIp6TranslatorQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeIp6TranslatorQuotaResponseParams struct { + // 账户在指定地域的IPV6转换实例及规则配额信息 + // QUOTAID属性是TOTAL_TRANSLATOR_QUOTA,表示账户在指定地域的IPV6转换实例配额信息;QUOTAID属性是IPV6转换实例唯一ID(形如ip6-xxxxxxxx),表示账户在该转换实例允许创建的转换规则配额 + QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` - // 账户在指定地域的IPV6转换实例及规则配额信息 - // QUOTAID属性是TOTAL_TRANSLATOR_QUOTA,表示账户在指定地域的IPV6转换实例配额信息;QUOTAID属性是IPV6转换实例唯一ID(形如ip6-xxxxxxxx),表示账户在该转换实例允许创建的转换规则配额 - QuotaSet []*Quota `json:"QuotaSet,omitempty" name:"QuotaSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeIp6TranslatorQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeIp6TranslatorQuotaResponseParams `json:"Response"` } func (r *DescribeIp6TranslatorQuotaResponse) ToJsonString() string { @@ -7954,6 +11459,25 @@ func (r *DescribeIp6TranslatorQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeIp6TranslatorsRequestParams struct { + // IPV6转换实例唯一ID数组,形如ip6-xxxxxxxx + Ip6TranslatorIds []*string `json:"Ip6TranslatorIds,omitempty" name:"Ip6TranslatorIds"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`Ip6TranslatorIds`和`Filters`。详细的过滤条件如下: + //
      • ip6-translator-id - String - 是否必填:否 - (过滤条件)按照IPV6转换实例的唯一ID过滤,形如ip6-xxxxxxx。
      • + //
      • ip6-translator-vip6 - String - 是否必填:否 - (过滤条件)按照IPV6地址过滤。不支持模糊过滤。
      • + //
      • ip6-translator-name - String - 是否必填:否 - (过滤条件)按照IPV6转换实例名称过滤。不支持模糊过滤。
      • + //
      • ip6-translator-status - String - 是否必填:否 - (过滤条件)按照IPV6转换实例的状态过滤。状态取值范围为"CREATING","RUNNING","DELETING","MODIFYING" + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeIp6TranslatorsRequest struct { *tchttp.BaseRequest @@ -7996,19 +11520,21 @@ func (r *DescribeIp6TranslatorsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeIp6TranslatorsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeIp6TranslatorsResponseParams struct { + // 符合过滤条件的IPV6转换实例数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合过滤条件的IPV6转换实例数量。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 符合过滤条件的IPV6转换实例详细信息 + Ip6TranslatorSet []*Ip6Translator `json:"Ip6TranslatorSet,omitempty" name:"Ip6TranslatorSet"` - // 符合过滤条件的IPV6转换实例详细信息 - Ip6TranslatorSet []*Ip6Translator `json:"Ip6TranslatorSet,omitempty" name:"Ip6TranslatorSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeIp6TranslatorsResponse struct { + *tchttp.BaseResponse + Response *DescribeIp6TranslatorsResponseParams `json:"Response"` } func (r *DescribeIp6TranslatorsResponse) ToJsonString() string { @@ -8022,6 +11548,12 @@ func (r *DescribeIp6TranslatorsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeIpGeolocationDatabaseUrlRequestParams struct { + // IP地理位置库协议类型,目前仅支持"ipv4"。 + Type *string `json:"Type,omitempty" name:"Type"` +} + type DescribeIpGeolocationDatabaseUrlRequest struct { *tchttp.BaseRequest @@ -8048,19 +11580,21 @@ func (r *DescribeIpGeolocationDatabaseUrlRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeIpGeolocationDatabaseUrlResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeIpGeolocationDatabaseUrlResponseParams struct { + // IP地理位置库下载链接地址。 + DownLoadUrl *string `json:"DownLoadUrl,omitempty" name:"DownLoadUrl"` - // IP地理位置库下载链接地址。 - DownLoadUrl *string `json:"DownLoadUrl,omitempty" name:"DownLoadUrl"` + // 链接到期时间。按照`ISO8601`标准表示,并且使用`UTC`时间。 + ExpiredAt *string `json:"ExpiredAt,omitempty" name:"ExpiredAt"` - // 链接到期时间。按照`ISO8601`标准表示,并且使用`UTC`时间。 - ExpiredAt *string `json:"ExpiredAt,omitempty" name:"ExpiredAt"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeIpGeolocationDatabaseUrlResponse struct { + *tchttp.BaseResponse + Response *DescribeIpGeolocationDatabaseUrlResponseParams `json:"Response"` } func (r *DescribeIpGeolocationDatabaseUrlResponse) ToJsonString() string { @@ -8074,6 +11608,15 @@ func (r *DescribeIpGeolocationDatabaseUrlResponse) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeIpGeolocationInfosRequestParams struct { + // 需查询的IP地址列表,目前仅支持IPv4地址。查询的IP地址数量上限为100个。 + AddressIps []*string `json:"AddressIps,omitempty" name:"AddressIps"` + + // 需查询的IP地址的字段信息。 + Fields *IpField `json:"Fields,omitempty" name:"Fields"` +} + type DescribeIpGeolocationInfosRequest struct { *tchttp.BaseRequest @@ -8104,19 +11647,21 @@ func (r *DescribeIpGeolocationInfosRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeIpGeolocationInfosResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeIpGeolocationInfosResponseParams struct { + // IP地址信息列表。 + AddressInfo []*IpGeolocationInfo `json:"AddressInfo,omitempty" name:"AddressInfo"` - // IP地址信息列表。 - AddressInfo []*IpGeolocationInfo `json:"AddressInfo,omitempty" name:"AddressInfo"` + // IP地址信息个数。 + Total *int64 `json:"Total,omitempty" name:"Total"` - // IP地址信息个数。 - Total *int64 `json:"Total,omitempty" name:"Total"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeIpGeolocationInfosResponse struct { + *tchttp.BaseResponse + Response *DescribeIpGeolocationInfosResponseParams `json:"Response"` } func (r *DescribeIpGeolocationInfosResponse) ToJsonString() string { @@ -8130,6 +11675,19 @@ func (r *DescribeIpGeolocationInfosResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeLocalGatewayRequestParams struct { + // 查询条件: + // vpc-id:按照VPCID过滤,local-gateway-name:按照本地网关名称过滤,名称支持模糊搜索,local-gateway-id:按照本地网关实例ID过滤,cdc-id:按照cdc实例ID过滤查询。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/11646)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeLocalGatewayRequest struct { *tchttp.BaseRequest @@ -8165,19 +11723,21 @@ func (r *DescribeLocalGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeLocalGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeLocalGatewayResponseParams struct { + // 本地网关信息集合。 + LocalGatewaySet []*LocalGateway `json:"LocalGatewaySet,omitempty" name:"LocalGatewaySet"` - // 本地网关信息集合 - LocalGatewaySet []*LocalGateway `json:"LocalGatewaySet,omitempty" name:"LocalGatewaySet"` + // 本地网关总数。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 本地网关总数 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeLocalGatewayResponse struct { + *tchttp.BaseResponse + Response *DescribeLocalGatewayResponseParams `json:"Response"` } func (r *DescribeLocalGatewayResponse) ToJsonString() string { @@ -8191,6 +11751,29 @@ func (r *DescribeLocalGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNatGatewayDestinationIpPortTranslationNatRulesRequestParams struct { + // NAT网关ID。 + NatGatewayIds []*string `json:"NatGatewayIds,omitempty" name:"NatGatewayIds"` + + // 过滤条件: + // 参数不支持同时指定NatGatewayIds和Filters。每次请求的Filters的上限为10,Filter.Values的上限为5 + //
      • nat-gateway-id,NAT网关的ID,如`nat-0yi4hekt`
      • + //
      • vpc-id,私有网络VPC的ID,如`vpc-0yi4hekt`
      • + //
      • public-ip-address, 弹性IP,如`139.199.232.238`。
      • + //
      • public-port, 公网端口。
      • + //
      • private-ip-address, 内网IP,如`10.0.0.1`。
      • + //
      • private-port, 内网端口。
      • + //
      • description,规则描述。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest struct { *tchttp.BaseRequest @@ -8198,7 +11781,7 @@ type DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest struct { NatGatewayIds []*string `json:"NatGatewayIds,omitempty" name:"NatGatewayIds"` // 过滤条件: - // 参数不支持同时指定NatGatewayIds和Filters。 + // 参数不支持同时指定NatGatewayIds和Filters。每次请求的Filters的上限为10,Filter.Values的上限为5 //
      • nat-gateway-id,NAT网关的ID,如`nat-0yi4hekt`
      • //
      • vpc-id,私有网络VPC的ID,如`vpc-0yi4hekt`
      • //
      • public-ip-address, 弹性IP,如`139.199.232.238`。
      • @@ -8237,19 +11820,21 @@ func (r *DescribeNatGatewayDestinationIpPortTranslationNatRulesRequest) FromJson return json.Unmarshal([]byte(s), &r) } -type DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNatGatewayDestinationIpPortTranslationNatRulesResponseParams struct { + // NAT网关端口转发规则对象数组。 + NatGatewayDestinationIpPortTranslationNatRuleSet []*NatGatewayDestinationIpPortTranslationNatRule `json:"NatGatewayDestinationIpPortTranslationNatRuleSet,omitempty" name:"NatGatewayDestinationIpPortTranslationNatRuleSet"` - // NAT网关端口转发规则对象数组。 - NatGatewayDestinationIpPortTranslationNatRuleSet []*NatGatewayDestinationIpPortTranslationNatRule `json:"NatGatewayDestinationIpPortTranslationNatRuleSet,omitempty" name:"NatGatewayDestinationIpPortTranslationNatRuleSet"` + // 符合条件的NAT网关端口转发规则对象数目。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的NAT网关端口转发规则对象数目。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse struct { + *tchttp.BaseResponse + Response *DescribeNatGatewayDestinationIpPortTranslationNatRulesResponseParams `json:"Response"` } func (r *DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse) ToJsonString() string { @@ -8263,9 +11848,8 @@ func (r *DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse) FromJso return json.Unmarshal([]byte(s), &r) } -type DescribeNatGatewayDirectConnectGatewayRouteRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type DescribeNatGatewayDirectConnectGatewayRouteRequestParams struct { // nat的唯一标识 NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` @@ -8279,8 +11863,24 @@ type DescribeNatGatewayDirectConnectGatewayRouteRequest struct { Offset *int64 `json:"Offset,omitempty" name:"Offset"` } -func (r *DescribeNatGatewayDirectConnectGatewayRouteRequest) ToJsonString() string { - b, _ := json.Marshal(r) +type DescribeNatGatewayDirectConnectGatewayRouteRequest struct { + *tchttp.BaseRequest + + // nat的唯一标识 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // vpc的唯一标识 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 0到200之间 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 大于0 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` +} + +func (r *DescribeNatGatewayDirectConnectGatewayRouteRequest) ToJsonString() string { + b, _ := json.Marshal(r) return string(b) } @@ -8301,19 +11901,21 @@ func (r *DescribeNatGatewayDirectConnectGatewayRouteRequest) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } -type DescribeNatGatewayDirectConnectGatewayRouteResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNatGatewayDirectConnectGatewayRouteResponseParams struct { + // 路由数据 + NatDirectConnectGatewayRouteSet []*NatDirectConnectGatewayRoute `json:"NatDirectConnectGatewayRouteSet,omitempty" name:"NatDirectConnectGatewayRouteSet"` - // 路由数据 - NatDirectConnectGatewayRouteSet []*NatDirectConnectGatewayRoute `json:"NatDirectConnectGatewayRouteSet,omitempty" name:"NatDirectConnectGatewayRouteSet"` + // 路由总数 + Total *int64 `json:"Total,omitempty" name:"Total"` - // 路由总数 - Total *int64 `json:"Total,omitempty" name:"Total"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNatGatewayDirectConnectGatewayRouteResponse struct { + *tchttp.BaseResponse + Response *DescribeNatGatewayDirectConnectGatewayRouteResponseParams `json:"Response"` } func (r *DescribeNatGatewayDirectConnectGatewayRouteResponse) ToJsonString() string { @@ -8327,6 +11929,24 @@ func (r *DescribeNatGatewayDirectConnectGatewayRouteResponse) FromJsonString(s s return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNatGatewaySourceIpTranslationNatRulesRequestParams struct { + // NAT网关统一 ID,形如:`nat-123xx454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 过滤条件: + //
      • resource-id,Subnet的ID或者Cvm ID,如`subnet-0yi4hekt`
      • + //
      • public-ip-address,弹性IP,如`139.199.232.238`
      • + //
      • description,规则描述。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNatGatewaySourceIpTranslationNatRulesRequest struct { *tchttp.BaseRequest @@ -8368,20 +11988,22 @@ func (r *DescribeNatGatewaySourceIpTranslationNatRulesRequest) FromJsonString(s return json.Unmarshal([]byte(s), &r) } -type DescribeNatGatewaySourceIpTranslationNatRulesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNatGatewaySourceIpTranslationNatRulesResponseParams struct { + // NAT网关SNAT规则对象数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SourceIpTranslationNatRuleSet []*SourceIpTranslationNatRule `json:"SourceIpTranslationNatRuleSet,omitempty" name:"SourceIpTranslationNatRuleSet"` - // NAT网关SNAT规则对象数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - SourceIpTranslationNatRuleSet []*SourceIpTranslationNatRule `json:"SourceIpTranslationNatRuleSet,omitempty" name:"SourceIpTranslationNatRuleSet"` + // 符合条件的NAT网关端口转发规则对象数目。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的NAT网关端口转发规则对象数目。 - TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNatGatewaySourceIpTranslationNatRulesResponse struct { + *tchttp.BaseResponse + Response *DescribeNatGatewaySourceIpTranslationNatRulesResponseParams `json:"Response"` } func (r *DescribeNatGatewaySourceIpTranslationNatRulesResponse) ToJsonString() string { @@ -8395,13 +12017,32 @@ func (r *DescribeNatGatewaySourceIpTranslationNatRulesResponse) FromJsonString(s return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNatGatewaysRequestParams struct { + // NAT网关统一 ID,形如:`nat-123xx454`。每次请求的实例上限为100。参数不支持同时指定NatGatewayIds和Filters。 + NatGatewayIds []*string `json:"NatGatewayIds,omitempty" name:"NatGatewayIds"` + + // 过滤条件,参数不支持同时指定NatGatewayIds和Filters。每次请求的Filters的上限为10,Filter.Values的上限为5。 + //
      • nat-gateway-id - String - (过滤条件)协议端口模板实例ID,形如:`nat-123xx454`。
      • + //
      • vpc-id - String - (过滤条件)私有网络 唯一ID,形如:`vpc-123xx454`。
      • + //
      • nat-gateway-name - String - (过滤条件)协议端口模板实例ID,形如:`test_nat`。
      • + //
      • tag-key - String - (过滤条件)标签键,形如:`test-key`。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNatGatewaysRequest struct { *tchttp.BaseRequest - // NAT网关统一 ID,形如:`nat-123xx454`。 + // NAT网关统一 ID,形如:`nat-123xx454`。每次请求的实例上限为100。参数不支持同时指定NatGatewayIds和Filters。 NatGatewayIds []*string `json:"NatGatewayIds,omitempty" name:"NatGatewayIds"` - // 过滤条件,参数不支持同时指定NatGatewayIds和Filters。 + // 过滤条件,参数不支持同时指定NatGatewayIds和Filters。每次请求的Filters的上限为10,Filter.Values的上限为5。 //
      • nat-gateway-id - String - (过滤条件)协议端口模板实例ID,形如:`nat-123xx454`。
      • //
      • vpc-id - String - (过滤条件)私有网络 唯一ID,形如:`vpc-123xx454`。
      • //
      • nat-gateway-name - String - (过滤条件)协议端口模板实例ID,形如:`test_nat`。
      • @@ -8437,19 +12078,21 @@ func (r *DescribeNatGatewaysRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNatGatewaysResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNatGatewaysResponseParams struct { + // NAT网关对象数组。 + NatGatewaySet []*NatGateway `json:"NatGatewaySet,omitempty" name:"NatGatewaySet"` - // NAT网关对象数组。 - NatGatewaySet []*NatGateway `json:"NatGatewaySet,omitempty" name:"NatGatewaySet"` + // 符合条件的NAT网关对象个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的NAT网关对象个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNatGatewaysResponse struct { + *tchttp.BaseResponse + Response *DescribeNatGatewaysResponseParams `json:"Response"` } func (r *DescribeNatGatewaysResponse) ToJsonString() string { @@ -8463,14 +12106,30 @@ func (r *DescribeNatGatewaysResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNetDetectStatesRequestParams struct { + // 网络探测实例`ID`数组。形如:[`netd-12345678`]。 + NetDetectIds []*string `json:"NetDetectIds,omitempty" name:"NetDetectIds"` + + // 过滤条件,参数不支持同时指定NetDetectIds和Filters。 + //
      • net-detect-id - String - (过滤条件)网络探测实例ID,形如:netd-12345678。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNetDetectStatesRequest struct { *tchttp.BaseRequest - // 网络探测实例`ID`数组。形如:[`netd-12345678`] + // 网络探测实例`ID`数组。形如:[`netd-12345678`]。 NetDetectIds []*string `json:"NetDetectIds,omitempty" name:"NetDetectIds"` // 过滤条件,参数不支持同时指定NetDetectIds和Filters。 - //
      • net-detect-id - String - (过滤条件)网络探测实例ID,形如:netd-12345678
      • + //
      • net-detect-id - String - (过滤条件)网络探测实例ID,形如:netd-12345678。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。 @@ -8502,21 +12161,23 @@ func (r *DescribeNetDetectStatesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetDetectStatesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNetDetectStatesResponseParams struct { + // 符合条件的网络探测验证结果对象数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + NetDetectStateSet []*NetDetectState `json:"NetDetectStateSet,omitempty" name:"NetDetectStateSet"` - // 符合条件的网络探测验证结果对象数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - NetDetectStateSet []*NetDetectState `json:"NetDetectStateSet,omitempty" name:"NetDetectStateSet"` + // 符合条件的网络探测验证结果对象数量。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的网络探测验证结果对象数量。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNetDetectStatesResponse struct { + *tchttp.BaseResponse + Response *DescribeNetDetectStatesResponseParams `json:"Response"` } func (r *DescribeNetDetectStatesResponse) ToJsonString() string { @@ -8530,10 +12191,29 @@ func (r *DescribeNetDetectStatesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNetDetectsRequestParams struct { + // 网络探测实例`ID`数组。形如:[`netd-12345678`]。 + NetDetectIds []*string `json:"NetDetectIds,omitempty" name:"NetDetectIds"` + + // 过滤条件,参数不支持同时指定NetDetectIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-12345678
      • + //
      • net-detect-id - String - (过滤条件)网络探测实例ID,形如:netd-12345678
      • + //
      • subnet-id - String - (过滤条件)子网实例ID,形如:subnet-12345678
      • + //
      • net-detect-name - String - (过滤条件)网络探测名称
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNetDetectsRequest struct { *tchttp.BaseRequest - // 网络探测实例`ID`数组。形如:[`netd-12345678`] + // 网络探测实例`ID`数组。形如:[`netd-12345678`]。 NetDetectIds []*string `json:"NetDetectIds,omitempty" name:"NetDetectIds"` // 过滤条件,参数不支持同时指定NetDetectIds和Filters。 @@ -8572,21 +12252,23 @@ func (r *DescribeNetDetectsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetDetectsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNetDetectsResponseParams struct { + // 符合条件的网络探测对象数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + NetDetectSet []*NetDetect `json:"NetDetectSet,omitempty" name:"NetDetectSet"` - // 符合条件的网络探测对象数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - NetDetectSet []*NetDetect `json:"NetDetectSet,omitempty" name:"NetDetectSet"` + // 符合条件的网络探测对象数量。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的网络探测对象数量。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNetDetectsResponse struct { + *tchttp.BaseResponse + Response *DescribeNetDetectsResponseParams `json:"Response"` } func (r *DescribeNetDetectsResponse) ToJsonString() string { @@ -8600,6 +12282,171 @@ func (r *DescribeNetDetectsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNetworkAccountTypeRequestParams struct { +} + +type DescribeNetworkAccountTypeRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeNetworkAccountTypeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeNetworkAccountTypeRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeNetworkAccountTypeRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeNetworkAccountTypeResponseParams struct { + // 用户账号的网络类型,STANDARD为标准用户,LEGACY为传统用户 + NetworkAccountType *string `json:"NetworkAccountType,omitempty" name:"NetworkAccountType"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeNetworkAccountTypeResponse struct { + *tchttp.BaseResponse + Response *DescribeNetworkAccountTypeResponseParams `json:"Response"` +} + +func (r *DescribeNetworkAccountTypeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeNetworkAccountTypeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeNetworkAclQuintupleEntriesRequestParams struct { + // 网络ACL实例ID。形如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最小值为1,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 过滤条件,参数不支持同时指定`HaVipIds`和`Filters`。 + //
      • protocol - String - 协议,形如:`TCP`。
      • + //
      • description - String - 描述。
      • + //
      • destination-cidr - String - 目的CIDR, 形如:'192.168.0.0/24'。
      • + //
      • source-cidr- String - 源CIDR, 形如:'192.168.0.0/24'。
      • + //
      • action - String - 动作,形如ACCEPT或DROP。
      • + //
      • network-acl-quintuple-entry-id - String - 五元组唯一ID,形如:'acli45-ahnu4rv5'。
      • + //
      • network-acl-direction - String - 方向,形如:'INGRESS'或'EGRESS'。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + +type DescribeNetworkAclQuintupleEntriesRequest struct { + *tchttp.BaseRequest + + // 网络ACL实例ID。形如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最小值为1,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 过滤条件,参数不支持同时指定`HaVipIds`和`Filters`。 + //
      • protocol - String - 协议,形如:`TCP`。
      • + //
      • description - String - 描述。
      • + //
      • destination-cidr - String - 目的CIDR, 形如:'192.168.0.0/24'。
      • + //
      • source-cidr- String - 源CIDR, 形如:'192.168.0.0/24'。
      • + //
      • action - String - 动作,形如ACCEPT或DROP。
      • + //
      • network-acl-quintuple-entry-id - String - 五元组唯一ID,形如:'acli45-ahnu4rv5'。
      • + //
      • network-acl-direction - String - 方向,形如:'INGRESS'或'EGRESS'。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + +func (r *DescribeNetworkAclQuintupleEntriesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeNetworkAclQuintupleEntriesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "NetworkAclId") + delete(f, "Offset") + delete(f, "Limit") + delete(f, "Filters") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeNetworkAclQuintupleEntriesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeNetworkAclQuintupleEntriesResponseParams struct { + // 网络ACL条目列表(NetworkAclTuple5Entry) + NetworkAclQuintupleSet []*NetworkAclQuintupleEntry `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` + + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeNetworkAclQuintupleEntriesResponse struct { + *tchttp.BaseResponse + Response *DescribeNetworkAclQuintupleEntriesResponseParams `json:"Response"` +} + +func (r *DescribeNetworkAclQuintupleEntriesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeNetworkAclQuintupleEntriesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeNetworkAclsRequestParams struct { + // 过滤条件,参数不支持同时指定NetworkAclIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-12345678。
      • + //
      • network-acl-id - String - (过滤条件)网络ACL实例ID,形如:acl-12345678。
      • + //
      • network-acl-name - String - (过滤条件)网络ACL实例名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 网络ACL实例ID数组。形如:[acl-12345678]。每次请求的实例的上限为100。参数不支持同时指定NetworkAclIds和Filters。 + NetworkAclIds []*string `json:"NetworkAclIds,omitempty" name:"NetworkAclIds"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最小值为1,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeNetworkAclsRequest struct { *tchttp.BaseRequest @@ -8641,19 +12488,21 @@ func (r *DescribeNetworkAclsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetworkAclsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNetworkAclsResponseParams struct { + // 实例详细信息列表。 + NetworkAclSet []*NetworkAcl `json:"NetworkAclSet,omitempty" name:"NetworkAclSet"` - // 实例详细信息列表。 - NetworkAclSet []*NetworkAcl `json:"NetworkAclSet,omitempty" name:"NetworkAclSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNetworkAclsResponse struct { + *tchttp.BaseResponse + Response *DescribeNetworkAclsResponseParams `json:"Response"` } func (r *DescribeNetworkAclsResponse) ToJsonString() string { @@ -8667,10 +12516,16 @@ func (r *DescribeNetworkAclsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeNetworkInterfaceLimitRequestParams struct { + // 要查询的CVM实例ID或弹性网卡ID。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type DescribeNetworkInterfaceLimitRequest struct { *tchttp.BaseRequest - // 要查询的CVM实例ID或弹性网卡ID + // 要查询的CVM实例ID或弹性网卡ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` } @@ -8693,27 +12548,37 @@ func (r *DescribeNetworkInterfaceLimitRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetworkInterfaceLimitResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNetworkInterfaceLimitResponseParams struct { + // 标准型弹性网卡配额。 + EniQuantity *int64 `json:"EniQuantity,omitempty" name:"EniQuantity"` + + // 每个标准型弹性网卡可以分配的IP配额。 + EniPrivateIpAddressQuantity *int64 `json:"EniPrivateIpAddressQuantity,omitempty" name:"EniPrivateIpAddressQuantity"` + + // 扩展型网卡配额。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ExtendEniQuantity *int64 `json:"ExtendEniQuantity,omitempty" name:"ExtendEniQuantity"` - // 标准型弹性网卡配额 - EniQuantity *int64 `json:"EniQuantity,omitempty" name:"EniQuantity"` + // 每个扩展型弹性网卡可以分配的IP配额。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ExtendEniPrivateIpAddressQuantity *int64 `json:"ExtendEniPrivateIpAddressQuantity,omitempty" name:"ExtendEniPrivateIpAddressQuantity"` - // 每个标准型弹性网卡可以分配的IP配额 - EniPrivateIpAddressQuantity *int64 `json:"EniPrivateIpAddressQuantity,omitempty" name:"EniPrivateIpAddressQuantity"` + // 中继网卡配额。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SubEniQuantity *int64 `json:"SubEniQuantity,omitempty" name:"SubEniQuantity"` - // 扩展型网卡配额 - // 注意:此字段可能返回 null,表示取不到有效值。 - ExtendEniQuantity *int64 `json:"ExtendEniQuantity,omitempty" name:"ExtendEniQuantity"` + // 每个中继网卡可以分配的IP配额。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SubEniPrivateIpAddressQuantity *int64 `json:"SubEniPrivateIpAddressQuantity,omitempty" name:"SubEniPrivateIpAddressQuantity"` - // 每个扩展型弹性网卡可以分配的IP配额 - // 注意:此字段可能返回 null,表示取不到有效值。 - ExtendEniPrivateIpAddressQuantity *int64 `json:"ExtendEniPrivateIpAddressQuantity,omitempty" name:"ExtendEniPrivateIpAddressQuantity"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNetworkInterfaceLimitResponse struct { + *tchttp.BaseResponse + Response *DescribeNetworkInterfaceLimitResponseParams `json:"Response"` } func (r *DescribeNetworkInterfaceLimitResponse) ToJsonString() string { @@ -8727,9 +12592,8 @@ func (r *DescribeNetworkInterfaceLimitResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetworkInterfacesRequest struct { - *tchttp.BaseRequest - +// Predefined struct for user +type DescribeNetworkInterfacesRequestParams struct { // 弹性网卡实例ID查询。形如:eni-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定NetworkInterfaceIds和Filters。 NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` @@ -8744,8 +12608,12 @@ type DescribeNetworkInterfacesRequest struct { //
      • address-ip - String - (过滤条件)内网IPv4地址,单IP后缀模糊匹配,多IP精确匹配。可以与`ip-exact-match`配合做单IP的精确匹配查询。
      • //
      • ip-exact-match - Boolean - (过滤条件)内网IPv4精确匹配查询,存在多值情况,只取第一个。
      • //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。使用请参考示例2
      • - //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例3。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • //
      • is-primary - Boolean - 是否必填:否 - (过滤条件)按照是否主网卡进行过滤。值为true时,仅过滤主网卡;值为false时,仅过滤辅助网卡;此过滤参数未提供时,同时过滤主网卡和辅助网卡。
      • + //
      • eni-type - String -是否必填:否- (过滤条件)按照网卡类型进行过滤。“0”-辅助网卡,“1”-主网卡,“2”:中继网卡。
      • + //
      • eni-qos - String -是否必填:否- (过滤条件)按照网卡服务质量进行过滤。“AG”-服务质量为云铜,“AU”-服务质量为云银。
      • + //
      • address-ipv6 - String - 是否必填:否 -(过滤条件)内网IPv6地址过滤,支持多ipv6地址查询,如果和address-ip一起使用取交集。
      • + //
      • public-address-ip - String - (过滤条件)公网IPv4地址,精确匹配。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。 @@ -8755,10 +12623,42 @@ type DescribeNetworkInterfacesRequest struct { Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } -func (r *DescribeNetworkInterfacesRequest) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} +type DescribeNetworkInterfacesRequest struct { + *tchttp.BaseRequest + + // 弹性网卡实例ID查询。形如:eni-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定NetworkInterfaceIds和Filters。 + NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` + + // 过滤条件,参数不支持同时指定NetworkInterfaceIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • subnet-id - String - (过滤条件)所属子网实例ID,形如:subnet-f49l6u0z。
      • + //
      • network-interface-id - String - (过滤条件)弹性网卡实例ID,形如:eni-5k56k7k7。
      • + //
      • attachment.instance-id - String - (过滤条件)绑定的云服务器实例ID,形如:ins-3nqpdn3i。
      • + //
      • groups.security-group-id - String - (过滤条件)绑定的安全组实例ID,例如:sg-f9ekbxeq。
      • + //
      • network-interface-name - String - (过滤条件)网卡实例名称。
      • + //
      • network-interface-description - String - (过滤条件)网卡实例描述。
      • + //
      • address-ip - String - (过滤条件)内网IPv4地址,单IP后缀模糊匹配,多IP精确匹配。可以与`ip-exact-match`配合做单IP的精确匹配查询。
      • + //
      • ip-exact-match - Boolean - (过滤条件)内网IPv4精确匹配查询,存在多值情况,只取第一个。
      • + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。使用请参考示例2
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • + //
      • is-primary - Boolean - 是否必填:否 - (过滤条件)按照是否主网卡进行过滤。值为true时,仅过滤主网卡;值为false时,仅过滤辅助网卡;此过滤参数未提供时,同时过滤主网卡和辅助网卡。
      • + //
      • eni-type - String -是否必填:否- (过滤条件)按照网卡类型进行过滤。“0”-辅助网卡,“1”-主网卡,“2”:中继网卡。
      • + //
      • eni-qos - String -是否必填:否- (过滤条件)按照网卡服务质量进行过滤。“AG”-服务质量为云铜,“AU”-服务质量为云银。
      • + //
      • address-ipv6 - String - 是否必填:否 -(过滤条件)内网IPv6地址过滤,支持多ipv6地址查询,如果和address-ip一起使用取交集。
      • + //
      • public-address-ip - String - (过滤条件)公网IPv4地址,精确匹配。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeNetworkInterfacesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check @@ -8777,19 +12677,21 @@ func (r *DescribeNetworkInterfacesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeNetworkInterfacesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeNetworkInterfacesResponseParams struct { + // 实例详细信息列表。 + NetworkInterfaceSet []*NetworkInterface `json:"NetworkInterfaceSet,omitempty" name:"NetworkInterfaceSet"` - // 实例详细信息列表。 - NetworkInterfaceSet []*NetworkInterface `json:"NetworkInterfaceSet,omitempty" name:"NetworkInterfaceSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeNetworkInterfacesResponse struct { + *tchttp.BaseResponse + Response *DescribeNetworkInterfacesResponseParams `json:"Response"` } func (r *DescribeNetworkInterfacesResponse) ToJsonString() string { @@ -8803,10 +12705,16 @@ func (r *DescribeNetworkInterfacesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeProductQuotaRequestParams struct { + // 查询的网络产品名称,可查询的产品有:vpc、ccn、vpn、dc、dfw、clb、eip。 + Product *string `json:"Product,omitempty" name:"Product"` +} + type DescribeProductQuotaRequest struct { *tchttp.BaseRequest - // 查询的网络产品名称,如vpc、ccn等 + // 查询的网络产品名称,可查询的产品有:vpc、ccn、vpn、dc、dfw、clb、eip。 Product *string `json:"Product,omitempty" name:"Product"` } @@ -8829,19 +12737,21 @@ func (r *DescribeProductQuotaRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeProductQuotaResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeProductQuotaResponseParams struct { + // ProductQuota对象数组。 + ProductQuotaSet []*ProductQuota `json:"ProductQuotaSet,omitempty" name:"ProductQuotaSet"` - // ProductQuota对象数组 - ProductQuotaSet []*ProductQuota `json:"ProductQuotaSet,omitempty" name:"ProductQuotaSet"` + // 符合条件的产品类型个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的产品类型个数 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeProductQuotaResponse struct { + *tchttp.BaseResponse + Response *DescribeProductQuotaResponseParams `json:"Response"` } func (r *DescribeProductQuotaResponse) ToJsonString() string { @@ -8855,13 +12765,22 @@ func (r *DescribeProductQuotaResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeRouteConflictsRequestParams struct { + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 要检查的与之冲突的目的端列表。 + DestinationCidrBlocks []*string `json:"DestinationCidrBlocks,omitempty" name:"DestinationCidrBlocks"` +} + type DescribeRouteConflictsRequest struct { *tchttp.BaseRequest // 路由表实例ID,例如:rtb-azd4dt1c。 RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` - // 要检查的与之冲突的目的端列表 + // 要检查的与之冲突的目的端列表。 DestinationCidrBlocks []*string `json:"DestinationCidrBlocks,omitempty" name:"DestinationCidrBlocks"` } @@ -8885,16 +12804,18 @@ func (r *DescribeRouteConflictsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeRouteConflictsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeRouteConflictsResponseParams struct { + // 路由策略冲突列表。 + RouteConflictSet []*RouteConflict `json:"RouteConflictSet,omitempty" name:"RouteConflictSet"` - // 路由策略冲突列表 - RouteConflictSet []*RouteConflict `json:"RouteConflictSet,omitempty" name:"RouteConflictSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeRouteConflictsResponse struct { + *tchttp.BaseResponse + Response *DescribeRouteConflictsResponseParams `json:"Response"` } func (r *DescribeRouteConflictsResponse) ToJsonString() string { @@ -8908,6 +12829,41 @@ func (r *DescribeRouteConflictsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeRouteTablesRequestParams struct { + // 过滤条件,参数不支持同时指定RouteTableIds和Filters。 + //
      • route-table-id - String - (过滤条件)路由表实例ID。
      • + //
      • route-table-name - String - (过滤条件)路由表名称。
      • + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • association.main - String - (过滤条件)是否主路由表。
      • + //
      • tag-key - String -是否必填:否 - (过滤条件)按照标签键进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • + //
      • next-hop-type - String - 是否必填:否 - (过滤条件)按下一跳类型进行过滤。使用next-hop-type进行过滤时,必须同时携带route-table-id与vpc-id。 + // 目前我们支持的类型有: + // LOCAL: 本地路由 + // CVM:公网网关类型的云服务器; + // VPN:VPN网关; + // DIRECTCONNECT:专线网关; + // PEERCONNECTION:对等连接; + // HAVIP:高可用虚拟IP; + // NAT:NAT网关; + // NORMAL_CVM:普通云服务器; + // EIP:云服务器的公网IP; + // CCN:云联网; + // LOCAL_GATEWAY:本地网关。 + //
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableIds []*string `json:"RouteTableIds,omitempty" name:"RouteTableIds"` + + // 偏移量。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeRouteTablesRequest struct { *tchttp.BaseRequest @@ -8916,8 +12872,22 @@ type DescribeRouteTablesRequest struct { //
      • route-table-name - String - (过滤条件)路由表名称。
      • //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • //
      • association.main - String - (过滤条件)是否主路由表。
      • - //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • + //
      • tag-key - String -是否必填:否 - (过滤条件)按照标签键进行过滤。
      • //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • + //
      • next-hop-type - String - 是否必填:否 - (过滤条件)按下一跳类型进行过滤。使用next-hop-type进行过滤时,必须同时携带route-table-id与vpc-id。 + // 目前我们支持的类型有: + // LOCAL: 本地路由 + // CVM:公网网关类型的云服务器; + // VPN:VPN网关; + // DIRECTCONNECT:专线网关; + // PEERCONNECTION:对等连接; + // HAVIP:高可用虚拟IP; + // NAT:NAT网关; + // NORMAL_CVM:普通云服务器; + // EIP:云服务器的公网IP; + // CCN:云联网; + // LOCAL_GATEWAY:本地网关。 + //
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 路由表实例ID,例如:rtb-azd4dt1c。 @@ -8952,19 +12922,21 @@ func (r *DescribeRouteTablesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeRouteTablesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeRouteTablesResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 路由表对象。 + RouteTableSet []*RouteTable `json:"RouteTableSet,omitempty" name:"RouteTableSet"` - // 路由表对象。 - RouteTableSet []*RouteTable `json:"RouteTableSet,omitempty" name:"RouteTableSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeRouteTablesResponse struct { + *tchttp.BaseResponse + Response *DescribeRouteTablesResponseParams `json:"Response"` } func (r *DescribeRouteTablesResponse) ToJsonString() string { @@ -8978,6 +12950,12 @@ func (r *DescribeRouteTablesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeSecurityGroupAssociationStatisticsRequestParams struct { + // 安全实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type DescribeSecurityGroupAssociationStatisticsRequest struct { *tchttp.BaseRequest @@ -9004,16 +12982,18 @@ func (r *DescribeSecurityGroupAssociationStatisticsRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } -type DescribeSecurityGroupAssociationStatisticsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeSecurityGroupAssociationStatisticsResponseParams struct { + // 安全组关联实例统计。 + SecurityGroupAssociationStatisticsSet []*SecurityGroupAssociationStatistics `json:"SecurityGroupAssociationStatisticsSet,omitempty" name:"SecurityGroupAssociationStatisticsSet"` - // 安全组关联实例统计。 - SecurityGroupAssociationStatisticsSet []*SecurityGroupAssociationStatistics `json:"SecurityGroupAssociationStatisticsSet,omitempty" name:"SecurityGroupAssociationStatisticsSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSecurityGroupAssociationStatisticsResponse struct { + *tchttp.BaseResponse + Response *DescribeSecurityGroupAssociationStatisticsResponseParams `json:"Response"` } func (r *DescribeSecurityGroupAssociationStatisticsResponse) ToJsonString() string { @@ -9027,6 +13007,10 @@ func (r *DescribeSecurityGroupAssociationStatisticsResponse) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeSecurityGroupLimitsRequestParams struct { +} + type DescribeSecurityGroupLimitsRequest struct { *tchttp.BaseRequest } @@ -9043,22 +13027,25 @@ func (r *DescribeSecurityGroupLimitsRequest) FromJsonString(s string) error { if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSecurityGroupLimitsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeSecurityGroupLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeSecurityGroupLimitsResponseParams struct { + // 用户安全组配额限制。 + SecurityGroupLimitSet *SecurityGroupLimitSet `json:"SecurityGroupLimitSet,omitempty" name:"SecurityGroupLimitSet"` - // 用户安全组配额限制。 - SecurityGroupLimitSet *SecurityGroupLimitSet `json:"SecurityGroupLimitSet,omitempty" name:"SecurityGroupLimitSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSecurityGroupLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeSecurityGroupLimitsResponseParams `json:"Response"` } func (r *DescribeSecurityGroupLimitsResponse) ToJsonString() string { @@ -9072,14 +13059,32 @@ func (r *DescribeSecurityGroupLimitsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeSecurityGroupPoliciesRequestParams struct { + // 安全组实例ID,例如:sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 过滤条件。 + //
      • security-group-id - String - 规则中的安全组ID。
      • + //
      • ip - String - IP,支持IPV4和IPV6模糊匹配。
      • + //
      • address-module - String - IP地址模板或IP地址组模板ID。
      • + //
      • service-module - String - 协议端口模板或协议端口组模板ID。
      • + //
      • protocol-type - String - 安全组策略支持的协议,可选值:`TCP`, `UDP`, `ICMP`, `ICMPV6`, `GRE`, `ALL`。
      • + //
      • port - String - 是否必填:否 -协议端口,支持模糊匹配,值为`ALL`时,查询所有的端口。
      • + //
      • poly - String - 协议策略,可选值:`ALL`,所有策略;`ACCEPT`,允许;`DROP`,拒绝。
      • + //
      • direction - String - 协议规则,可选值:`ALL`,所有策略;`INBOUND`,入站规则;`OUTBOUND`,出站规则。
      • + //
      • description - String - 协议描述,该过滤条件支持模糊匹配。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeSecurityGroupPoliciesRequest struct { *tchttp.BaseRequest // 安全组实例ID,例如:sg-33ocnj9n,可通过DescribeSecurityGroups获取。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` - // 过滤条件,不支持同时指定SecurityGroupId和Filters参数。 - //
      • security-group-id - String - 安全组ID。
      • + // 过滤条件。 + //
      • security-group-id - String - 规则中的安全组ID。
      • //
      • ip - String - IP,支持IPV4和IPV6模糊匹配。
      • //
      • address-module - String - IP地址模板或IP地址组模板ID。
      • //
      • service-module - String - 协议端口模板或协议端口组模板ID。
      • @@ -9111,16 +13116,18 @@ func (r *DescribeSecurityGroupPoliciesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeSecurityGroupPoliciesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeSecurityGroupPoliciesResponseParams struct { + // 安全组规则集合。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` - // 安全组规则集合。 - SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSecurityGroupPoliciesResponse struct { + *tchttp.BaseResponse + Response *DescribeSecurityGroupPoliciesResponseParams `json:"Response"` } func (r *DescribeSecurityGroupPoliciesResponse) ToJsonString() string { @@ -9134,10 +13141,16 @@ func (r *DescribeSecurityGroupPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeSecurityGroupReferencesRequestParams struct { + // 安全组实例ID数组。格式如:['sg-12345678']。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type DescribeSecurityGroupReferencesRequest struct { *tchttp.BaseRequest - // 安全组实例ID数组。格式如:['sg-12345678'] + // 安全组实例ID数组。格式如:['sg-12345678']。 SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` } @@ -9160,16 +13173,18 @@ func (r *DescribeSecurityGroupReferencesRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } -type DescribeSecurityGroupReferencesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeSecurityGroupReferencesResponseParams struct { + // 安全组被引用信息。 + ReferredSecurityGroupSet []*ReferredSecurityGroup `json:"ReferredSecurityGroupSet,omitempty" name:"ReferredSecurityGroupSet"` - // 安全组被引用信息。 - ReferredSecurityGroupSet []*ReferredSecurityGroup `json:"ReferredSecurityGroupSet,omitempty" name:"ReferredSecurityGroupSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSecurityGroupReferencesResponse struct { + *tchttp.BaseResponse + Response *DescribeSecurityGroupReferencesResponseParams `json:"Response"` } func (r *DescribeSecurityGroupReferencesResponse) ToJsonString() string { @@ -9183,10 +13198,36 @@ func (r *DescribeSecurityGroupReferencesResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeSecurityGroupsRequestParams struct { + // 安全组实例ID,例如:sg-33ocnj9n。每次请求的实例的上限为100。参数不支持同时指定SecurityGroupIds和Filters。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 过滤条件,参数不支持同时指定SecurityGroupIds和Filters。 + //
      • security-group-id - String - (过滤条件)安全组ID。
      • + //
      • project-id - Integer - (过滤条件)项目ID。
      • + //
      • security-group-name - String - (过滤条件)安全组名称。
      • + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。使用请参考示例2。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例3。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` + + // 排序字段。支持:`CreatedTime` `UpdateTime`。注意:该字段没有默认值。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + type DescribeSecurityGroupsRequest struct { *tchttp.BaseRequest - // 安全组实例ID,例如:sg-33ocnj9n,可通过DescribeSecurityGroups获取。每次请求的实例的上限为100。参数不支持同时指定SecurityGroupIds和Filters。 + // 安全组实例ID,例如:sg-33ocnj9n。每次请求的实例的上限为100。参数不支持同时指定SecurityGroupIds和Filters。 SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` // 过滤条件,参数不支持同时指定SecurityGroupIds和Filters。 @@ -9202,6 +13243,12 @@ type DescribeSecurityGroupsRequest struct { // 返回数量,默认为20,最大值为100。 Limit *string `json:"Limit,omitempty" name:"Limit"` + + // 排序字段。支持:`CreatedTime` `UpdateTime`。注意:该字段没有默认值。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方法。升序:`ASC`,倒序:`DESC`。默认值:`ASC` + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` } func (r *DescribeSecurityGroupsRequest) ToJsonString() string { @@ -9220,26 +13267,30 @@ func (r *DescribeSecurityGroupsRequest) FromJsonString(s string) error { delete(f, "Filters") delete(f, "Offset") delete(f, "Limit") + delete(f, "OrderField") + delete(f, "OrderDirection") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSecurityGroupsRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeSecurityGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeSecurityGroupsResponseParams struct { + // 安全组对象。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SecurityGroupSet []*SecurityGroup `json:"SecurityGroupSet,omitempty" name:"SecurityGroupSet"` - // 安全组对象。 - // 注意:此字段可能返回 null,表示取不到有效值。 - SecurityGroupSet []*SecurityGroup `json:"SecurityGroupSet,omitempty" name:"SecurityGroupSet"` + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSecurityGroupsResponse struct { + *tchttp.BaseResponse + Response *DescribeSecurityGroupsResponseParams `json:"Response"` } func (r *DescribeSecurityGroupsResponse) ToJsonString() string { @@ -9253,6 +13304,20 @@ func (r *DescribeSecurityGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeServiceTemplateGroupsRequestParams struct { + // 过滤条件。 + //
      • service-template-group-name - String - (过滤条件)协议端口模板集合名称。
      • + //
      • service-template-group-id - String - (过滤条件)协议端口模板集合实例ID,例如:ppmg-e6dy460g。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeServiceTemplateGroupsRequest struct { *tchttp.BaseRequest @@ -9289,19 +13354,21 @@ func (r *DescribeServiceTemplateGroupsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeServiceTemplateGroupsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeServiceTemplateGroupsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 协议端口模板集合。 + ServiceTemplateGroupSet []*ServiceTemplateGroup `json:"ServiceTemplateGroupSet,omitempty" name:"ServiceTemplateGroupSet"` - // 协议端口模板集合。 - ServiceTemplateGroupSet []*ServiceTemplateGroup `json:"ServiceTemplateGroupSet,omitempty" name:"ServiceTemplateGroupSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeServiceTemplateGroupsResponse struct { + *tchttp.BaseResponse + Response *DescribeServiceTemplateGroupsResponseParams `json:"Response"` } func (r *DescribeServiceTemplateGroupsResponse) ToJsonString() string { @@ -9315,6 +13382,21 @@ func (r *DescribeServiceTemplateGroupsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeServiceTemplatesRequestParams struct { + // 过滤条件。 + //
      • service-template-name - 协议端口模板名称。
      • + //
      • service-template-id - 协议端口模板实例ID,例如:ppm-e6dy460g。
      • + //
      • service-port- 协议端口。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeServiceTemplatesRequest struct { *tchttp.BaseRequest @@ -9352,19 +13434,21 @@ func (r *DescribeServiceTemplatesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeServiceTemplatesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeServiceTemplatesResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 协议端口模板对象。 + ServiceTemplateSet []*ServiceTemplate `json:"ServiceTemplateSet,omitempty" name:"ServiceTemplateSet"` - // 协议端口模板对象。 - ServiceTemplateSet []*ServiceTemplate `json:"ServiceTemplateSet,omitempty" name:"ServiceTemplateSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeServiceTemplatesResponse struct { + *tchttp.BaseResponse + Response *DescribeServiceTemplatesResponseParams `json:"Response"` } func (r *DescribeServiceTemplatesResponse) ToJsonString() string { @@ -9378,68 +13462,622 @@ func (r *DescribeServiceTemplatesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeSubnetsRequest struct { - *tchttp.BaseRequest +// Predefined struct for user +type DescribeSgSnapshotFileContentRequestParams struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` - // 子网实例ID查询。形如:subnet-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定SubnetIds和Filters。 - SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` - // 过滤条件,参数不支持同时指定SubnetIds和Filters。 - //
      • subnet-id - String - (过滤条件)Subnet实例名称。
      • - //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • - //
      • cidr-block - String - (过滤条件)子网网段,形如: 192.168.1.0 。
      • - //
      • is-default - Boolean - (过滤条件)是否是默认子网。
      • - //
      • is-remote-vpc-snat - Boolean - (过滤条件)是否为VPC SNAT地址池子网。
      • - //
      • subnet-name - String - (过滤条件)子网名称。
      • - //
      • zone - String - (过滤条件)可用区。
      • - //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • - //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • - //
      • cdc-id - String - 是否必填:否 - (过滤条件)按照cdc信息进行过滤。过滤出来制定cdc下的子网。
      • - //
      • is-cdc-subnet - String - 是否必填:否 - (过滤条件)按照是否是cdc子网进行过滤。取值:“0”-非cdc子网,“1”--cdc子网
      • - Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + // 安全组Id。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` +} - // 偏移量,默认为0。 - Offset *string `json:"Offset,omitempty" name:"Offset"` +type DescribeSgSnapshotFileContentRequest struct { + *tchttp.BaseRequest - // 返回数量,默认为20,最大值为100。 - Limit *string `json:"Limit,omitempty" name:"Limit"` + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` + + // 安全组Id。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` } -func (r *DescribeSubnetsRequest) ToJsonString() string { +func (r *DescribeSgSnapshotFileContentRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeSubnetsRequest) FromJsonString(s string) error { +func (r *DescribeSgSnapshotFileContentRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } - delete(f, "SubnetIds") - delete(f, "Filters") - delete(f, "Offset") - delete(f, "Limit") + delete(f, "SnapshotPolicyId") + delete(f, "SnapshotFileId") + delete(f, "SecurityGroupId") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSubnetsRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSgSnapshotFileContentRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeSubnetsResponse struct { +// Predefined struct for user +type DescribeSgSnapshotFileContentResponseParams struct { + // 实例Id,即安全组Id。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` + + // 备份时间。 + BackupTime *string `json:"BackupTime,omitempty" name:"BackupTime"` + + // 操作者。 + Operator *string `json:"Operator,omitempty" name:"Operator"` + + // 原始数据。 + OriginalData []*SecurityGroupPolicy `json:"OriginalData,omitempty" name:"OriginalData"` + + // 备份数据。 + BackupData []*SecurityGroupPolicy `json:"BackupData,omitempty" name:"BackupData"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSgSnapshotFileContentResponse struct { + *tchttp.BaseResponse + Response *DescribeSgSnapshotFileContentResponseParams `json:"Response"` +} + +func (r *DescribeSgSnapshotFileContentResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSgSnapshotFileContentResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotAttachedInstancesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 过滤条件。 + // 支持的过滤条件如下: + //
      • instance-id:实例ID。
      • + //
      • instance-region:实例所在地域。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为200。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeSnapshotAttachedInstancesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 过滤条件。 + // 支持的过滤条件如下: + //
      • instance-id:实例ID。
      • + //
      • instance-region:实例所在地域。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为200。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeSnapshotAttachedInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotAttachedInstancesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyId") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSnapshotAttachedInstancesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotAttachedInstancesResponseParams struct { + // 实例列表 + InstanceSet []*SnapshotInstance `json:"InstanceSet,omitempty" name:"InstanceSet"` + + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSnapshotAttachedInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeSnapshotAttachedInstancesResponseParams `json:"Response"` +} + +func (r *DescribeSnapshotAttachedInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotAttachedInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotFilesRequestParams struct { + // 业务类型,目前支持安全组:securitygroup。 + BusinessType *string `json:"BusinessType,omitempty" name:"BusinessType"` + + // 业务实例Id,和BusinessType对应。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 开始日期,格式%Y-%m-%d %H:%M:%S。 + StartDate *string `json:"StartDate,omitempty" name:"StartDate"` + + // 结束日期,格式%Y-%m-%d %H:%M:%S。 + EndDate *string `json:"EndDate,omitempty" name:"EndDate"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeSnapshotFilesRequest struct { + *tchttp.BaseRequest + + // 业务类型,目前支持安全组:securitygroup。 + BusinessType *string `json:"BusinessType,omitempty" name:"BusinessType"` + + // 业务实例Id,和BusinessType对应。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 开始日期,格式%Y-%m-%d %H:%M:%S。 + StartDate *string `json:"StartDate,omitempty" name:"StartDate"` + + // 结束日期,格式%Y-%m-%d %H:%M:%S。 + EndDate *string `json:"EndDate,omitempty" name:"EndDate"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeSnapshotFilesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotFilesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "BusinessType") + delete(f, "InstanceId") + delete(f, "StartDate") + delete(f, "EndDate") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSnapshotFilesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotFilesResponseParams struct { + // 快照文件集合。 + SnapshotFileSet []*SnapshotFileInfo `json:"SnapshotFileSet,omitempty" name:"SnapshotFileSet"` + + // 符合条件的对象数。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSnapshotFilesResponse struct { + *tchttp.BaseResponse + Response *DescribeSnapshotFilesResponseParams `json:"Response"` +} + +func (r *DescribeSnapshotFilesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotFilesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotPoliciesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` + + // 过滤条件,参数不支持同时指定SnapshotPolicyIds和Filters。 + //
      • snapshot-policy-id - String -(过滤条件)快照策略ID。
      • + //
      • snapshot-policy-name - String -(过滤条件)快照策略名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为200。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeSnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` + + // 过滤条件,参数不支持同时指定SnapshotPolicyIds和Filters。 + //
      • snapshot-policy-id - String -(过滤条件)快照策略ID。
      • + //
      • snapshot-policy-name - String -(过滤条件)快照策略名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大为200。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeSnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyIds") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSnapshotPoliciesResponseParams struct { + // 快照策略。 + SnapshotPolicySet []*SnapshotPolicy `json:"SnapshotPolicySet,omitempty" name:"SnapshotPolicySet"` + + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *DescribeSnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *DescribeSnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSpecificTrafficPackageUsedDetailsRequestParams struct { + // 共享流量包唯一ID + TrafficPackageId *string `json:"TrafficPackageId,omitempty" name:"TrafficPackageId"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。详细的过滤条件如下:
      • resource-id - String - 是否必填:否 - (过滤条件)按照抵扣流量资源的唯一 ID 过滤。
      • resource-type - String - 是否必填:否 - (过滤条件)按照资源类型过滤,资源类型包括 CVM 和 EIP
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 排序条件。该参数仅支持根据抵扣量排序,传值为 deduction + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序类型,仅支持0和1,0-降序,1-升序。不传默认为0 + OrderType *int64 `json:"OrderType,omitempty" name:"OrderType"` + + // 开始时间。不传默认为当前时间往前推30天 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 结束时间。不传默认为当前时间 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 分页参数 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 分页参数 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeSpecificTrafficPackageUsedDetailsRequest struct { + *tchttp.BaseRequest + + // 共享流量包唯一ID + TrafficPackageId *string `json:"TrafficPackageId,omitempty" name:"TrafficPackageId"` + + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。详细的过滤条件如下:
      • resource-id - String - 是否必填:否 - (过滤条件)按照抵扣流量资源的唯一 ID 过滤。
      • resource-type - String - 是否必填:否 - (过滤条件)按照资源类型过滤,资源类型包括 CVM 和 EIP
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 排序条件。该参数仅支持根据抵扣量排序,传值为 deduction + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序类型,仅支持0和1,0-降序,1-升序。不传默认为0 + OrderType *int64 `json:"OrderType,omitempty" name:"OrderType"` + + // 开始时间。不传默认为当前时间往前推30天 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 结束时间。不传默认为当前时间 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 分页参数 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 分页参数 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeSpecificTrafficPackageUsedDetailsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSpecificTrafficPackageUsedDetailsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "TrafficPackageId") + delete(f, "Filters") + delete(f, "OrderField") + delete(f, "OrderType") + delete(f, "StartTime") + delete(f, "EndTime") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSpecificTrafficPackageUsedDetailsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSpecificTrafficPackageUsedDetailsResponseParams struct { + // 符合查询条件的共享流量包用量明细的总数 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 共享流量包用量明细列表 + UsedDetailSet []*UsedDetail `json:"UsedDetailSet,omitempty" name:"UsedDetailSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSpecificTrafficPackageUsedDetailsResponse struct { + *tchttp.BaseResponse + Response *DescribeSpecificTrafficPackageUsedDetailsResponseParams `json:"Response"` +} + +func (r *DescribeSpecificTrafficPackageUsedDetailsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSpecificTrafficPackageUsedDetailsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSubnetResourceDashboardRequestParams struct { + // Subnet实例ID,例如:subnet-f1xjkw1b。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` +} + +type DescribeSubnetResourceDashboardRequest struct { + *tchttp.BaseRequest + + // Subnet实例ID,例如:subnet-f1xjkw1b。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` +} + +func (r *DescribeSubnetResourceDashboardRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSubnetResourceDashboardRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SubnetIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSubnetResourceDashboardRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSubnetResourceDashboardResponseParams struct { + // 资源统计结果。 + ResourceStatisticsSet []*ResourceStatistics `json:"ResourceStatisticsSet,omitempty" name:"ResourceStatisticsSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeSubnetResourceDashboardResponse struct { *tchttp.BaseResponse - Response *struct { + Response *DescribeSubnetResourceDashboardResponseParams `json:"Response"` +} + +func (r *DescribeSubnetResourceDashboardResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSubnetResourceDashboardResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSubnetsRequestParams struct { + // 子网实例ID查询。形如:subnet-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定SubnetIds和Filters。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` + + // 过滤条件,参数不支持同时指定SubnetIds和Filters。 + //
      • subnet-id - String - (过滤条件)Subnet实例名称。
      • + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • cidr-block - String - (过滤条件)子网网段,形如: 192.168.1.0 。
      • + //
      • is-default - Boolean - (过滤条件)是否是默认子网。
      • + //
      • is-remote-vpc-snat - Boolean - (过滤条件)是否为VPC SNAT地址池子网。
      • + //
      • subnet-name - String - (过滤条件)子网名称。
      • + //
      • zone - String - (过滤条件)可用区。
      • + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • + //
      • cdc-id - String - 是否必填:否 - (过滤条件)按照cdc信息进行过滤。过滤出来制定cdc下的子网。
      • + //
      • is-cdc-subnet - String - 是否必填:否 - (过滤条件)按照是否是cdc子网进行过滤。取值:“0”-非cdc子网,“1”--cdc子网
      • + //
      • ipv6-cidr-block - String - (过滤条件)IPv6子网网段,形如: 2402:4e00:1717:8700::/64 。
      • + //
      • isp-type - String - (过滤条件)运营商类型,形如: BGP 。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeSubnetsRequest struct { + *tchttp.BaseRequest + + // 子网实例ID查询。形如:subnet-pxir56ns。每次请求的实例的上限为100。参数不支持同时指定SubnetIds和Filters。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` + + // 过滤条件,参数不支持同时指定SubnetIds和Filters。 + //
      • subnet-id - String - (过滤条件)Subnet实例名称。
      • + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • cidr-block - String - (过滤条件)子网网段,形如: 192.168.1.0 。
      • + //
      • is-default - Boolean - (过滤条件)是否是默认子网。
      • + //
      • is-remote-vpc-snat - Boolean - (过滤条件)是否为VPC SNAT地址池子网。
      • + //
      • subnet-name - String - (过滤条件)子网名称。
      • + //
      • zone - String - (过滤条件)可用区。
      • + //
      • tag-key - String -是否必填:否- (过滤条件)按照标签键进行过滤。
      • + //
      • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
      • + //
      • cdc-id - String - 是否必填:否 - (过滤条件)按照cdc信息进行过滤。过滤出来制定cdc下的子网。
      • + //
      • is-cdc-subnet - String - 是否必填:否 - (过滤条件)按照是否是cdc子网进行过滤。取值:“0”-非cdc子网,“1”--cdc子网
      • + //
      • ipv6-cidr-block - String - (过滤条件)IPv6子网网段,形如: 2402:4e00:1717:8700::/64 。
      • + //
      • isp-type - String - (过滤条件)运营商类型,形如: BGP 。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeSubnetsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeSubnetsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SubnetIds") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeSubnetsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeSubnetsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 子网对象。 + SubnetSet []*Subnet `json:"SubnetSet,omitempty" name:"SubnetSet"` - // 子网对象。 - SubnetSet []*Subnet `json:"SubnetSet,omitempty" name:"SubnetSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeSubnetsResponse struct { + *tchttp.BaseResponse + Response *DescribeSubnetsResponseParams `json:"Response"` } func (r *DescribeSubnetsResponse) ToJsonString() string { @@ -9453,6 +14091,15 @@ func (r *DescribeSubnetsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeTaskResultRequestParams struct { + // 异步任务ID。TaskId和DealName必填一个参数 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 计费订单号。TaskId和DealName必填一个参数 + DealName *string `json:"DealName,omitempty" name:"DealName"` +} + type DescribeTaskResultRequest struct { *tchttp.BaseRequest @@ -9483,77 +14130,361 @@ func (r *DescribeTaskResultRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeTaskResultResponseParams struct { + // 任务ID + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 执行结果,包括"SUCCESS", "FAILED", "RUNNING" + Result *string `json:"Result,omitempty" name:"Result"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DescribeTaskResultResponse struct { *tchttp.BaseResponse - Response *struct { + Response *DescribeTaskResultResponseParams `json:"Response"` +} + +func (r *DescribeTaskResultResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 任务ID - TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTaskResultResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} - // 执行结果,包括"SUCCESS", "FAILED", "RUNNING" - Result *string `json:"Result,omitempty" name:"Result"` +// Predefined struct for user +type DescribeTemplateLimitsRequestParams struct { +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeTemplateLimitsRequest struct { + *tchttp.BaseRequest } -func (r *DescribeTaskResultResponse) ToJsonString() string { +func (r *DescribeTemplateLimitsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTemplateLimitsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeTemplateLimitsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTemplateLimitsResponseParams struct { + // 参数模板配额对象。 + TemplateLimit *TemplateLimit `json:"TemplateLimit,omitempty" name:"TemplateLimit"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeTemplateLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeTemplateLimitsResponseParams `json:"Response"` +} + +func (r *DescribeTemplateLimitsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTemplateLimitsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTenantCcnsRequestParams struct { + // 过滤条件,目前`value`值个数只支持一个,允许可支持的字段有: + //
      • `ccn-ids` 云联网ID数组,值形如:`["ccn-12345678"]`
      • + //
      • `user-account-id` 用户账号ID,值形如:`["12345678"]`
      • `is-security-lock` 是否锁定,值形如:`["true"]`
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数据量,可选值0到100之间的整数,默认20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeTenantCcnsRequest struct { + *tchttp.BaseRequest + + // 过滤条件,目前`value`值个数只支持一个,允许可支持的字段有: + //
      • `ccn-ids` 云联网ID数组,值形如:`["ccn-12345678"]`
      • + //
      • `user-account-id` 用户账号ID,值形如:`["12345678"]`
      • `is-security-lock` 是否锁定,值形如:`["true"]`
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数据量,可选值0到100之间的整数,默认20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeTenantCcnsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTenantCcnsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeTenantCcnsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTenantCcnsResponseParams struct { + // 云联网(CCN)对象。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CcnSet []*CcnInstanceInfo `json:"CcnSet,omitempty" name:"CcnSet"` + + // 符合条件的对象总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeTenantCcnsResponse struct { + *tchttp.BaseResponse + Response *DescribeTenantCcnsResponseParams `json:"Response"` +} + +func (r *DescribeTenantCcnsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTenantCcnsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTrafficPackagesRequestParams struct { + // 共享流量包ID,支持批量 + TrafficPackageIds []*string `json:"TrafficPackageIds,omitempty" name:"TrafficPackageIds"` + + // 每次请求的`Filters`的上限为10。参数不支持同时指定`TrafficPackageIds`和`Filters`。详细的过滤条件如下: + //
      • traffic-package_id - String - 是否必填:否 - (过滤条件)按照共享流量包的唯一标识ID过滤。
      • + //
      • traffic-package-name - String - 是否必填:否 - (过滤条件)按照共享流量包名称过滤。不支持模糊过滤。
      • + //
      • status - String - 是否必填:否 - (过滤条件)按照共享流量包状态过滤。可选状态:[AVAILABLE|EXPIRED|EXHAUSTED]
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 分页参数 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 分页参数 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeTrafficPackagesRequest struct { + *tchttp.BaseRequest + + // 共享流量包ID,支持批量 + TrafficPackageIds []*string `json:"TrafficPackageIds,omitempty" name:"TrafficPackageIds"` + + // 每次请求的`Filters`的上限为10。参数不支持同时指定`TrafficPackageIds`和`Filters`。详细的过滤条件如下: + //
      • traffic-package_id - String - 是否必填:否 - (过滤条件)按照共享流量包的唯一标识ID过滤。
      • + //
      • traffic-package-name - String - 是否必填:否 - (过滤条件)按照共享流量包名称过滤。不支持模糊过滤。
      • + //
      • status - String - 是否必填:否 - (过滤条件)按照共享流量包状态过滤。可选状态:[AVAILABLE|EXPIRED|EXHAUSTED]
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 分页参数 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 分页参数 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeTrafficPackagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeTrafficPackagesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "TrafficPackageIds") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeTrafficPackagesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeTrafficPackagesResponseParams struct { + // 按照条件查询出来的流量包数量 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 流量包信息 + TrafficPackageSet []*TrafficPackage `json:"TrafficPackageSet,omitempty" name:"TrafficPackageSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeTrafficPackagesResponse struct { + *tchttp.BaseResponse + Response *DescribeTrafficPackagesResponseParams `json:"Response"` +} + +func (r *DescribeTrafficPackagesResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeTaskResultResponse) FromJsonString(s string) error { +func (r *DescribeTrafficPackagesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeTemplateLimitsRequest struct { +// Predefined struct for user +type DescribeUsedIpAddressRequestParams struct { + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 查询是否占用的ip列表,ip需要在vpc或子网内。最多允许一次查询100个IP。 + IpAddresses []*string `json:"IpAddresses,omitempty" name:"IpAddresses"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +type DescribeUsedIpAddressRequest struct { *tchttp.BaseRequest + + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 查询是否占用的ip列表,ip需要在vpc或子网内。最多允许一次查询100个IP。 + IpAddresses []*string `json:"IpAddresses,omitempty" name:"IpAddresses"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } -func (r *DescribeTemplateLimitsRequest) ToJsonString() string { +func (r *DescribeUsedIpAddressRequest) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeTemplateLimitsRequest) FromJsonString(s string) error { +func (r *DescribeUsedIpAddressRequest) FromJsonString(s string) error { f := make(map[string]interface{}) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + delete(f, "VpcId") + delete(f, "SubnetId") + delete(f, "IpAddresses") + delete(f, "Offset") + delete(f, "Limit") if len(f) > 0 { - return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeTemplateLimitsRequest has unknown keys!", "") + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeUsedIpAddressRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeTemplateLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeUsedIpAddressResponseParams struct { + // 占用ip地址的资源信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + IpAddressStates []*IpAddressStates `json:"IpAddressStates,omitempty" name:"IpAddressStates"` + + // 返回占用资源的个数 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 参数模板配额对象。 - TemplateLimit *TemplateLimit `json:"TemplateLimit,omitempty" name:"TemplateLimit"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeUsedIpAddressResponse struct { + *tchttp.BaseResponse + Response *DescribeUsedIpAddressResponseParams `json:"Response"` } -func (r *DescribeTemplateLimitsResponse) ToJsonString() string { +func (r *DescribeUsedIpAddressResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *DescribeTemplateLimitsResponse) FromJsonString(s string) error { +func (r *DescribeUsedIpAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcEndPointRequestParams struct { + // 过滤条件。 + //
      • end-point-service-id- String - (过滤条件)终端节点服务ID。
      • + //
      • end-point-name - String - (过滤条件)终端节点实例名称。
      • + //
      • end-point-id- String - (过滤条件)终端节点实例ID。
      • + //
      • vpc-id- String - (过滤条件)VPC实例ID。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 终端节点ID列表。 + EndPointId []*string `json:"EndPointId,omitempty" name:"EndPointId"` +} + type DescribeVpcEndPointRequest struct { *tchttp.BaseRequest @@ -9596,19 +14527,21 @@ func (r *DescribeVpcEndPointRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcEndPointResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcEndPointResponseParams struct { + // 终端节点对象。 + EndPointSet []*EndPoint `json:"EndPointSet,omitempty" name:"EndPointSet"` - // 终端节点对象。 - EndPointSet []*EndPoint `json:"EndPointSet,omitempty" name:"EndPointSet"` + // 符合查询条件的终端节点个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合查询条件的终端节点个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcEndPointResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcEndPointResponseParams `json:"Response"` } func (r *DescribeVpcEndPointResponse) ToJsonString() string { @@ -9622,13 +14555,36 @@ func (r *DescribeVpcEndPointResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcEndPointServiceRequestParams struct { + // 过滤条件。不支持同时传入参数 EndPointServiceIds and Filters。 + //
      • service-id - String - (过滤条件)终端节点服务唯一ID。
      • + //
      • service-name - String - (过滤条件)终端节点实例名称。
      • + //
      • service-instance-id - String - (过滤条件)后端服务的唯一ID,比如lb-xxx。
      • + //
      • service-type - String - (过滤条件)后端PAAS服务类型,CLB,CDB,CRS,不填默认查询类型为CLB。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 终端节点服务ID。不支持同时传入参数 EndPointServiceIds and Filters。 + EndPointServiceIds []*string `json:"EndPointServiceIds,omitempty" name:"EndPointServiceIds"` + + //
      • 不支持同时传入参数 Filters 。
      • 列出授权给当前账号的的终端节点服务信息。可以配合EndPointServiceIds参数进行过滤,那些终端节点服务授权了该账户。
      • + IsListAuthorizedEndPointService *bool `json:"IsListAuthorizedEndPointService,omitempty" name:"IsListAuthorizedEndPointService"` +} + type DescribeVpcEndPointServiceRequest struct { *tchttp.BaseRequest - // 过滤条件。 - //
      • service-id- String - (过滤条件)终端节点服务唯一ID。
      • + // 过滤条件。不支持同时传入参数 EndPointServiceIds and Filters。 + //
      • service-id - String - (过滤条件)终端节点服务唯一ID。
      • //
      • service-name - String - (过滤条件)终端节点实例名称。
      • //
      • service-instance-id - String - (过滤条件)后端服务的唯一ID,比如lb-xxx。
      • + //
      • service-type - String - (过滤条件)后端PAAS服务类型,CLB,CDB,CRS,不填默认查询类型为CLB。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。 @@ -9637,8 +14593,11 @@ type DescribeVpcEndPointServiceRequest struct { // 单页返回数量,默认为20,最大值为100。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 终端节点服务ID。 + // 终端节点服务ID。不支持同时传入参数 EndPointServiceIds and Filters。 EndPointServiceIds []*string `json:"EndPointServiceIds,omitempty" name:"EndPointServiceIds"` + + //
      • 不支持同时传入参数 Filters 。
      • 列出授权给当前账号的的终端节点服务信息。可以配合EndPointServiceIds参数进行过滤,那些终端节点服务授权了该账户。
      • + IsListAuthorizedEndPointService *bool `json:"IsListAuthorizedEndPointService,omitempty" name:"IsListAuthorizedEndPointService"` } func (r *DescribeVpcEndPointServiceRequest) ToJsonString() string { @@ -9657,25 +14616,28 @@ func (r *DescribeVpcEndPointServiceRequest) FromJsonString(s string) error { delete(f, "Offset") delete(f, "Limit") delete(f, "EndPointServiceIds") + delete(f, "IsListAuthorizedEndPointService") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpcEndPointServiceRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeVpcEndPointServiceResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcEndPointServiceResponseParams struct { + // 终端节点服务对象数组。 + EndPointServiceSet []*EndPointService `json:"EndPointServiceSet,omitempty" name:"EndPointServiceSet"` - // 终端节点服务对象数组。 - EndPointServiceSet []*EndPointService `json:"EndPointServiceSet,omitempty" name:"EndPointServiceSet"` + // 符合查询条件的个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合查询条件的个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcEndPointServiceResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcEndPointServiceResponseParams `json:"Response"` } func (r *DescribeVpcEndPointServiceResponse) ToJsonString() string { @@ -9689,6 +14651,20 @@ func (r *DescribeVpcEndPointServiceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcEndPointServiceWhiteListRequestParams struct { + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 单页返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 过滤条件。 + //
      • user-uin String - (过滤条件)用户UIN。
      • + //
      • end-point-service-id String - (过滤条件)终端节点服务ID。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` +} + type DescribeVpcEndPointServiceWhiteListRequest struct { *tchttp.BaseRequest @@ -9725,19 +14701,21 @@ func (r *DescribeVpcEndPointServiceWhiteListRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } -type DescribeVpcEndPointServiceWhiteListResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcEndPointServiceWhiteListResponseParams struct { + // 白名单对象数组。 + VpcEndpointServiceUserSet []*VpcEndPointServiceUser `json:"VpcEndpointServiceUserSet,omitempty" name:"VpcEndpointServiceUserSet"` - // 白名单对象数组。 - VpcEndpointServiceUserSet []*VpcEndPointServiceUser `json:"VpcEndpointServiceUserSet,omitempty" name:"VpcEndpointServiceUserSet"` + // 符合条件的白名单个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的白名单个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcEndPointServiceWhiteListResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcEndPointServiceWhiteListResponseParams `json:"Response"` } func (r *DescribeVpcEndPointServiceWhiteListResponse) ToJsonString() string { @@ -9751,6 +14729,21 @@ func (r *DescribeVpcEndPointServiceWhiteListResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcInstancesRequestParams struct { + // 过滤条件,参数不支持同时指定RouteTableIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • instance-id - String - (过滤条件)云主机实例ID。
      • + //
      • instance-name - String - (过滤条件)云主机名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpcInstancesRequest struct { *tchttp.BaseRequest @@ -9760,10 +14753,10 @@ type DescribeVpcInstancesRequest struct { //
      • instance-name - String - (过滤条件)云主机名称。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 偏移量。 + // 偏移量,默认为0。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 请求对象个数。 + // 返回数量,默认为20,最大值为100。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } @@ -9788,19 +14781,21 @@ func (r *DescribeVpcInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcInstancesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcInstancesResponseParams struct { + // 云主机实例列表。 + InstanceSet []*CvmInstance `json:"InstanceSet,omitempty" name:"InstanceSet"` - // 云主机实例列表。 - InstanceSet []*CvmInstance `json:"InstanceSet,omitempty" name:"InstanceSet"` + // 满足条件的云主机实例个数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 满足条件的云主机实例个数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcInstancesResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcInstancesResponseParams `json:"Response"` } func (r *DescribeVpcInstancesResponse) ToJsonString() string { @@ -9814,6 +14809,24 @@ func (r *DescribeVpcInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcIpv6AddressesRequestParams struct { + // `VPC`实例`ID`,形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // `IP`地址列表,批量查询单次请求最多支持`10`个。 + Ipv6Addresses []*string `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // VPC下的子网ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` +} + type DescribeVpcIpv6AddressesRequest struct { *tchttp.BaseRequest @@ -9823,11 +14836,14 @@ type DescribeVpcIpv6AddressesRequest struct { // `IP`地址列表,批量查询单次请求最多支持`10`个。 Ipv6Addresses []*string `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` - // 偏移量。 + // 偏移量,默认为0。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量。 + // 返回数量,默认为20,最大值为100。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // VPC下的子网ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` } func (r *DescribeVpcIpv6AddressesRequest) ToJsonString() string { @@ -9846,25 +14862,28 @@ func (r *DescribeVpcIpv6AddressesRequest) FromJsonString(s string) error { delete(f, "Ipv6Addresses") delete(f, "Offset") delete(f, "Limit") + delete(f, "SubnetId") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpcIpv6AddressesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type DescribeVpcIpv6AddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcIpv6AddressesResponseParams struct { + // `IPv6`地址列表。 + Ipv6AddressSet []*VpcIpv6Address `json:"Ipv6AddressSet,omitempty" name:"Ipv6AddressSet"` - // `IPv6`地址列表。 - Ipv6AddressSet []*VpcIpv6Address `json:"Ipv6AddressSet,omitempty" name:"Ipv6AddressSet"` + // `IPv6`地址总数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // `IPv6`地址总数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcIpv6AddressesResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcIpv6AddressesResponseParams `json:"Response"` } func (r *DescribeVpcIpv6AddressesResponse) ToJsonString() string { @@ -9878,6 +14897,12 @@ func (r *DescribeVpcIpv6AddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcLimitsRequestParams struct { + // 配额名称。每次最大查询100个配额类型。 + LimitTypes []*string `json:"LimitTypes,omitempty" name:"LimitTypes"` +} + type DescribeVpcLimitsRequest struct { *tchttp.BaseRequest @@ -9904,16 +14929,18 @@ func (r *DescribeVpcLimitsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcLimitsResponseParams struct { + // 私有网络配额 + VpcLimitSet []*VpcLimit `json:"VpcLimitSet,omitempty" name:"VpcLimitSet"` - // 私有网络配额 - VpcLimitSet []*VpcLimit `json:"VpcLimitSet,omitempty" name:"VpcLimitSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcLimitsResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcLimitsResponseParams `json:"Response"` } func (r *DescribeVpcLimitsResponse) ToJsonString() string { @@ -9927,6 +14954,110 @@ func (r *DescribeVpcLimitsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcPeeringConnectionsRequestParams struct { + // 对等连接唯一ID数组。 + PeeringConnectionIds []*string `json:"PeeringConnectionIds,omitempty" name:"PeeringConnectionIds"` + + // 过滤条件,参数不支持同时指定PeeringConnectionIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • state String - (过滤条件)对等连接状态,可选值有:PENDING,投放中;ACTIVE,使用中;EXPIRED,已过期;REJECTED,拒绝。
      • + //
      • peering-connection-name - String - (过滤条件)对等连接名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 排序字段,可选值有:CreatedTime,PeeringConnectionName。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方式:DESC,降序;ASC,升序。 + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + +type DescribeVpcPeeringConnectionsRequest struct { + *tchttp.BaseRequest + + // 对等连接唯一ID数组。 + PeeringConnectionIds []*string `json:"PeeringConnectionIds,omitempty" name:"PeeringConnectionIds"` + + // 过滤条件,参数不支持同时指定PeeringConnectionIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • state String - (过滤条件)对等连接状态,可选值有:PENDING,投放中;ACTIVE,使用中;EXPIRED,已过期;REJECTED,拒绝。
      • + //
      • peering-connection-name - String - (过滤条件)对等连接名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` + + // 排序字段,可选值有:CreatedTime,PeeringConnectionName。 + OrderField *string `json:"OrderField,omitempty" name:"OrderField"` + + // 排序方式:DESC,降序;ASC,升序。 + OrderDirection *string `json:"OrderDirection,omitempty" name:"OrderDirection"` +} + +func (r *DescribeVpcPeeringConnectionsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpcPeeringConnectionsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "PeeringConnectionIds") + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + delete(f, "OrderField") + delete(f, "OrderDirection") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpcPeeringConnectionsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpcPeeringConnectionsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeVpcPeeringConnectionsResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcPeeringConnectionsResponseParams `json:"Response"` +} + +func (r *DescribeVpcPeeringConnectionsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpcPeeringConnectionsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpcPrivateIpAddressesRequestParams struct { + // `VPC`实例`ID`,形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 内网`IP`地址列表,批量查询单次请求最多支持`10`个。 + PrivateIpAddresses []*string `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` +} + type DescribeVpcPrivateIpAddressesRequest struct { *tchttp.BaseRequest @@ -9957,16 +15088,18 @@ func (r *DescribeVpcPrivateIpAddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcPrivateIpAddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcPrivateIpAddressesResponseParams struct { + // 内网`IP`地址信息列表。 + VpcPrivateIpAddressSet []*VpcPrivateIpAddress `json:"VpcPrivateIpAddressSet,omitempty" name:"VpcPrivateIpAddressSet"` - // 内网`IP`地址信息列表。 - VpcPrivateIpAddressSet []*VpcPrivateIpAddress `json:"VpcPrivateIpAddressSet,omitempty" name:"VpcPrivateIpAddressSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcPrivateIpAddressesResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcPrivateIpAddressesResponseParams `json:"Response"` } func (r *DescribeVpcPrivateIpAddressesResponse) ToJsonString() string { @@ -9980,6 +15113,12 @@ func (r *DescribeVpcPrivateIpAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcResourceDashboardRequestParams struct { + // Vpc实例ID,例如:vpc-f1xjkw1b。 + VpcIds []*string `json:"VpcIds,omitempty" name:"VpcIds"` +} + type DescribeVpcResourceDashboardRequest struct { *tchttp.BaseRequest @@ -10006,16 +15145,18 @@ func (r *DescribeVpcResourceDashboardRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcResourceDashboardResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcResourceDashboardResponseParams struct { + // 资源对象列表。 + ResourceDashboardSet []*ResourceDashboard `json:"ResourceDashboardSet,omitempty" name:"ResourceDashboardSet"` - // 资源对象列表。 - ResourceDashboardSet []*ResourceDashboard `json:"ResourceDashboardSet,omitempty" name:"ResourceDashboardSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcResourceDashboardResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcResourceDashboardResponseParams `json:"Response"` } func (r *DescribeVpcResourceDashboardResponse) ToJsonString() string { @@ -10029,6 +15170,12 @@ func (r *DescribeVpcResourceDashboardResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcTaskResultRequestParams struct { + // 异步任务请求返回的RequestId。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` +} + type DescribeVpcTaskResultRequest struct { *tchttp.BaseRequest @@ -10055,19 +15202,25 @@ func (r *DescribeVpcTaskResultRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcTaskResultResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcTaskResultResponseParams struct { + // 异步任务执行结果。结果:SUCCESS、FAILED、RUNNING。3者其中之一。其中SUCCESS表示任务执行成功,FAILED表示任务执行失败,RUNNING表示任务执行中。 + Status *string `json:"Status,omitempty" name:"Status"` + + // 异步任务执行输出。 + Output *string `json:"Output,omitempty" name:"Output"` - // 异步任务执行结果。结果:SUCCESS、FAILED、RUNNING。3者其中之一。其中SUCCESS表示任务执行成功,FAILED表示任务执行失败,RUNNING表示任务执行中。 - Status *string `json:"Status,omitempty" name:"Status"` + // 异步任务详细结果。只用于特殊场景,如批量删除弹性网卡时查询成功的网卡列表和失败的列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Result []*VpcTaskResultDetailInfo `json:"Result,omitempty" name:"Result"` - // 异步任务执行输出。 - Output *string `json:"Output,omitempty" name:"Output"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcTaskResultResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcTaskResultResponseParams `json:"Response"` } func (r *DescribeVpcTaskResultResponse) ToJsonString() string { @@ -10081,6 +15234,31 @@ func (r *DescribeVpcTaskResultResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpcsRequestParams struct { + // VPC实例ID。形如:vpc-f49l6u0z。每次请求的实例的上限为100。参数不支持同时指定VpcIds和Filters。 + VpcIds []*string `json:"VpcIds,omitempty" name:"VpcIds"` + + // 过滤条件,不支持同时指定VpcIds和Filters参数。 + // 支持的过滤条件如下: + //
      • vpc-name:VPC实例名称,支持模糊查询。
      • + //
      • is-default :是否默认VPC。
      • + //
      • vpc-id :VPC实例ID,例如:vpc-f49l6u0z。
      • + //
      • cidr-block:VPC的CIDR。
      • + //
      • tag-key :按照标签键进行过滤,非必填参数。
      • + //
      • tag:tag-key:按照标签键值对进行过滤,非必填参数。 其中 tag-key 请使用具体的标签键进行替换,可参考示例2。
      • + // **说明:**若同一个过滤条件(Filter)存在多个Values,则同一Filter下Values间的关系为逻辑或(OR)关系;若存在多个过滤条件(Filter),Filter之间的关系为逻辑与(AND)关系。 + //
      • ipv6-cidr-block - String - (过滤条件)IPv6子网网段,形如: 2402:4e00:1717:8700::/64 。
      • + //
      • isp-type - String - (过滤条件)运营商类型,形如: BGP 取值范围:'BGP'-默认, 'CMCC'-中国移动, 'CTCC'-中国电信, 'CUCC'-中国联调。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。 + Offset *string `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *string `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpcsRequest struct { *tchttp.BaseRequest @@ -10089,13 +15267,15 @@ type DescribeVpcsRequest struct { // 过滤条件,不支持同时指定VpcIds和Filters参数。 // 支持的过滤条件如下: - //
      • vpc-name:VPC实例名称。
      • + //
      • vpc-name:VPC实例名称,支持模糊查询。
      • //
      • is-default :是否默认VPC。
      • //
      • vpc-id :VPC实例ID,例如:vpc-f49l6u0z。
      • //
      • cidr-block:VPC的CIDR。
      • //
      • tag-key :按照标签键进行过滤,非必填参数。
      • //
      • tag:tag-key:按照标签键值对进行过滤,非必填参数。 其中 tag-key 请使用具体的标签键进行替换,可参考示例2。
      • // **说明:**若同一个过滤条件(Filter)存在多个Values,则同一Filter下Values间的关系为逻辑或(OR)关系;若存在多个过滤条件(Filter),Filter之间的关系为逻辑与(AND)关系。 + //
      • ipv6-cidr-block - String - (过滤条件)IPv6子网网段,形如: 2402:4e00:1717:8700::/64 。
      • + //
      • isp-type - String - (过滤条件)运营商类型,形如: BGP 取值范围:'BGP'-默认, 'CMCC'-中国移动, 'CTCC'-中国电信, 'CUCC'-中国联调。
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` // 偏移量,默认为0。 @@ -10127,19 +15307,21 @@ func (r *DescribeVpcsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpcsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpcsResponseParams struct { + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // VPC对象。 + VpcSet []*Vpc `json:"VpcSet,omitempty" name:"VpcSet"` - // VPC对象。 - VpcSet []*Vpc `json:"VpcSet,omitempty" name:"VpcSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpcsResponse struct { + *tchttp.BaseResponse + Response *DescribeVpcsResponseParams `json:"Response"` } func (r *DescribeVpcsResponse) ToJsonString() string { @@ -10153,6 +15335,26 @@ func (r *DescribeVpcsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpnConnectionsRequestParams struct { + // VPN通道实例ID。形如:vpnx-f49l6u0z。每次请求的实例的上限为100。参数不支持同时指定VpnConnectionIds和Filters。 + VpnConnectionIds []*string `json:"VpnConnectionIds,omitempty" name:"VpnConnectionIds"` + + // 过滤条件。每次请求的Filters的上限为10,Filter.Values的上限为5。参数不支持同时指定VpnConnectionIds和Filters。 + //
      • vpc-id - String - VPC实例ID,形如:`vpc-0a36uwkr`。
      • + //
      • vpn-gateway-id - String - VPN网关实例ID,形如:`vpngw-p4lmqawn`。
      • + //
      • customer-gateway-id - String - 对端网关实例ID,形如:`cgw-l4rblw63`。
      • + //
      • vpn-connection-name - String - 通道名称,形如:`test-vpn`。
      • + //
      • vpn-connection-id - String - 通道实例ID,形如:`vpnx-5p7vkch8"`。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认为0。关于Offset的更进一步介绍请参考 API 简介中的相关小节。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpnConnectionsRequest struct { *tchttp.BaseRequest @@ -10196,19 +15398,21 @@ func (r *DescribeVpnConnectionsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpnConnectionsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpnConnectionsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // VPN通道实例。 + VpnConnectionSet []*VpnConnection `json:"VpnConnectionSet,omitempty" name:"VpnConnectionSet"` - // VPN通道实例。 - VpnConnectionSet []*VpnConnection `json:"VpnConnectionSet,omitempty" name:"VpnConnectionSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpnConnectionsResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnConnectionsResponseParams `json:"Response"` } func (r *DescribeVpnConnectionsResponse) ToJsonString() string { @@ -10222,16 +15426,28 @@ func (r *DescribeVpnConnectionsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpnGatewayCcnRoutesRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 偏移量。默认值:0 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量。默认值:20 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpnGatewayCcnRoutesRequest struct { *tchttp.BaseRequest - // VPN网关实例ID + // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 偏移量 + // 偏移量。默认值:0 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量 + // 返回数量。默认值:20 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` } @@ -10256,19 +15472,21 @@ func (r *DescribeVpnGatewayCcnRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpnGatewayCcnRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpnGatewayCcnRoutesResponseParams struct { + // 云联网路由(IDC网段)列表。 + RouteSet []*VpngwCcnRoutes `json:"RouteSet,omitempty" name:"RouteSet"` - // 云联网路由(IDC网段)列表。 - RouteSet []*VpngwCcnRoutes `json:"RouteSet,omitempty" name:"RouteSet"` + // 符合条件的对象数。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpnGatewayCcnRoutesResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnGatewayCcnRoutesResponseParams `json:"Response"` } func (r *DescribeVpnGatewayCcnRoutesResponse) ToJsonString() string { @@ -10282,19 +15500,34 @@ func (r *DescribeVpnGatewayCcnRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpnGatewayRoutesRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 过滤条件, 条件包括(DestinationCidr, InstanceId,InstanceType)。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量, 默认0。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 单页个数, 默认20, 最大值100。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpnGatewayRoutesRequest struct { *tchttp.BaseRequest - // VPN网关的ID + // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 过滤条件, 条件包括(DestinationCidr, InstanceId,InstanceType) + // 过滤条件, 条件包括(DestinationCidr, InstanceId,InstanceType)。 Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 偏移量, 默认0 + // 偏移量, 默认0。 Offset *int64 `json:"Offset,omitempty" name:"Offset"` - // 单页个数, 默认20, 最大值100 + // 单页个数, 默认20, 最大值100。 Limit *int64 `json:"Limit,omitempty" name:"Limit"` } @@ -10320,16 +15553,22 @@ func (r *DescribeVpnGatewayRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpnGatewayRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpnGatewayRoutesResponseParams struct { + // VPN网关目的路由。 + Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` + + // 路由条数。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // VPN网关目的路由 - Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpnGatewayRoutesResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnGatewayRoutesResponseParams `json:"Response"` } func (r *DescribeVpnGatewayRoutesResponse) ToJsonString() string { @@ -10343,6 +15582,226 @@ func (r *DescribeVpnGatewayRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DescribeVpnGatewaySslClientsRequestParams struct { + // 过滤条件,参数不支持同时指定SslVpnClientIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID形如:vpc-f49l6u0z。
      • + //
      • vpn-gateway-id - String - (过滤条件)VPN实例ID形如:vpngw-5aluhh9t。
      • + //
      • ssl-vpn-server-id - String - (过滤条件)SSL-VPN-SERVER实例ID形如:vpns-1j2w6xpx。
      • + //
      • ssl-vpn-client-id - String - (过滤条件)SSL-VPN-CLIENT实例ID形如:vpnc-3rlxp4nd。
      • + //
      • ssl-vpn-client-name - String - (过滤条件)SSL-VPN-CLIENT实例名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认值0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数,默认值20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // SSL-VPN-CLIENT实例ID。形如: + // vpns-1jww3xpx。每次请求的实例的上限为100。参数不支持同时指定SslVpnClientIds和Filters。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` + + // VPN门户网站使用。默认是False。 + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` +} + +type DescribeVpnGatewaySslClientsRequest struct { + *tchttp.BaseRequest + + // 过滤条件,参数不支持同时指定SslVpnClientIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID形如:vpc-f49l6u0z。
      • + //
      • vpn-gateway-id - String - (过滤条件)VPN实例ID形如:vpngw-5aluhh9t。
      • + //
      • ssl-vpn-server-id - String - (过滤条件)SSL-VPN-SERVER实例ID形如:vpns-1j2w6xpx。
      • + //
      • ssl-vpn-client-id - String - (过滤条件)SSL-VPN-CLIENT实例ID形如:vpnc-3rlxp4nd。
      • + //
      • ssl-vpn-client-name - String - (过滤条件)SSL-VPN-CLIENT实例名称。
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 偏移量,默认值0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数,默认值20。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // SSL-VPN-CLIENT实例ID。形如: + // vpns-1jww3xpx。每次请求的实例的上限为100。参数不支持同时指定SslVpnClientIds和Filters。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` + + // VPN门户网站使用。默认是False。 + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` +} + +func (r *DescribeVpnGatewaySslClientsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpnGatewaySslClientsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Filters") + delete(f, "Offset") + delete(f, "Limit") + delete(f, "SslVpnClientIds") + delete(f, "IsVpnPortal") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpnGatewaySslClientsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpnGatewaySslClientsResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // SSL-VPN-CLIENT 实例列表。 + SslVpnClientSet []*SslVpnClient `json:"SslVpnClientSet,omitempty" name:"SslVpnClientSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeVpnGatewaySslClientsResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnGatewaySslClientsResponseParams `json:"Response"` +} + +func (r *DescribeVpnGatewaySslClientsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpnGatewaySslClientsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpnGatewaySslServersRequestParams struct { + // 偏移量。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // SSL-VPN-SERVER实例ID。形如:vpngwSslServer-12345678。每次请求的实例的上限为100。参数不支持同时指定SslVpnServerIds和Filters。 + SslVpnServerIds []*string `json:"SslVpnServerIds,omitempty" name:"SslVpnServerIds"` + + // 过滤条件,参数不支持同时指定SslVpnServerIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • vpn-gateway-id - String - (过滤条件)VPN实例ID,形如:vpngw-5aluhh9t。
      • + //
      • vpn-gateway-name - String - (过滤条件)VPN实例名称。
      • + //
      • ssl-vpn-server-name - String - (过滤条件)SSL-VPN-SERVER实例名称。
      • + //
      • ssl-vpn-server-id - String - (过滤条件)SSL-VPN-SERVER实例ID,形如:vpns-xxx。
      • + Filters []*FilterObject `json:"Filters,omitempty" name:"Filters"` + + // vpn门户使用。 默认Flase + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` +} + +type DescribeVpnGatewaySslServersRequest struct { + *tchttp.BaseRequest + + // 偏移量。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // SSL-VPN-SERVER实例ID。形如:vpngwSslServer-12345678。每次请求的实例的上限为100。参数不支持同时指定SslVpnServerIds和Filters。 + SslVpnServerIds []*string `json:"SslVpnServerIds,omitempty" name:"SslVpnServerIds"` + + // 过滤条件,参数不支持同时指定SslVpnServerIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID,形如:vpc-f49l6u0z。
      • + //
      • vpn-gateway-id - String - (过滤条件)VPN实例ID,形如:vpngw-5aluhh9t。
      • + //
      • vpn-gateway-name - String - (过滤条件)VPN实例名称。
      • + //
      • ssl-vpn-server-name - String - (过滤条件)SSL-VPN-SERVER实例名称。
      • + //
      • ssl-vpn-server-id - String - (过滤条件)SSL-VPN-SERVER实例ID,形如:vpns-xxx。
      • + Filters []*FilterObject `json:"Filters,omitempty" name:"Filters"` + + // vpn门户使用。 默认Flase + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` +} + +func (r *DescribeVpnGatewaySslServersRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpnGatewaySslServersRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Offset") + delete(f, "Limit") + delete(f, "SslVpnServerIds") + delete(f, "Filters") + delete(f, "IsVpnPortal") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DescribeVpnGatewaySslServersRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpnGatewaySslServersResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // SSL-VPN-SERVER 实例详细信息列表。 + SslVpnSeverSet []*SslVpnSever `json:"SslVpnSeverSet,omitempty" name:"SslVpnSeverSet"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeVpnGatewaySslServersResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnGatewaySslServersResponseParams `json:"Response"` +} + +func (r *DescribeVpnGatewaySslServersResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DescribeVpnGatewaySslServersResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DescribeVpnGatewaysRequestParams struct { + // VPN网关实例ID。形如:vpngw-f49l6u0z。每次请求的实例的上限为100。参数不支持同时指定VpnGatewayIds和Filters。 + VpnGatewayIds []*string `json:"VpnGatewayIds,omitempty" name:"VpnGatewayIds"` + + // 过滤条件,参数不支持同时指定VpnGatewayIds和Filters。 + //
      • vpc-id - String - (过滤条件)VPC实例ID形如:vpc-f49l6u0z。
      • + //
      • vpn-gateway-id - String - (过滤条件)VPN实例ID形如:vpngw-5aluhh9t。
      • + //
      • vpn-gateway-name - String - (过滤条件)VPN实例名称。
      • + //
      • type - String - (过滤条件)VPN网关类型:'IPSEC', 'SSL'。
      • + //
      • public-ip-address- String - (过滤条件)公网IP。
      • + //
      • renew-flag - String - (过滤条件)网关续费类型,手动续费:'NOTIFY_AND_MANUAL_RENEW'、自动续费:'NOTIFY_AND_AUTO_RENEW'。
      • + //
      • zone - String - (过滤条件)VPN所在可用区,形如:ap-guangzhou-2。
      • + Filters []*FilterObject `json:"Filters,omitempty" name:"Filters"` + + // 偏移量 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 请求对象个数 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + type DescribeVpnGatewaysRequest struct { *tchttp.BaseRequest @@ -10388,19 +15847,21 @@ func (r *DescribeVpnGatewaysRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DescribeVpnGatewaysResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DescribeVpnGatewaysResponseParams struct { + // 符合条件的实例数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的实例数量。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // VPN网关实例详细信息列表。 + VpnGatewaySet []*VpnGateway `json:"VpnGatewaySet,omitempty" name:"VpnGatewaySet"` - // VPN网关实例详细信息列表。 - VpnGatewaySet []*VpnGateway `json:"VpnGatewaySet,omitempty" name:"VpnGatewaySet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DescribeVpnGatewaysResponse struct { + *tchttp.BaseResponse + Response *DescribeVpnGatewaysResponseParams `json:"Response"` } func (r *DescribeVpnGatewaysResponse) ToJsonString() string { @@ -10415,7 +15876,6 @@ func (r *DescribeVpnGatewaysResponse) FromJsonString(s string) error { } type DestinationIpPortTranslationNatRule struct { - // 网络协议,可选值:`TCP`、`UDP`。 IpProtocol *string `json:"IpProtocol,omitempty" name:"IpProtocol"` @@ -10435,6 +15895,15 @@ type DestinationIpPortTranslationNatRule struct { Description *string `json:"Description,omitempty" name:"Description"` } +// Predefined struct for user +type DetachCcnInstancesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 要解关联网络实例列表 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` +} + type DetachCcnInstancesRequest struct { *tchttp.BaseRequest @@ -10465,13 +15934,15 @@ func (r *DetachCcnInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachCcnInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DetachCcnInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DetachCcnInstancesResponseParams `json:"Response"` } func (r *DetachCcnInstancesResponse) ToJsonString() string { @@ -10485,6 +15956,15 @@ func (r *DetachCcnInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachClassicLinkVpcRequestParams struct { + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // CVM实例ID查询。形如:ins-r8hr2upy。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds"` +} + type DetachClassicLinkVpcRequest struct { *tchttp.BaseRequest @@ -10515,13 +15995,15 @@ func (r *DetachClassicLinkVpcRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachClassicLinkVpcResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DetachClassicLinkVpcResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DetachClassicLinkVpcResponseParams `json:"Response"` } func (r *DetachClassicLinkVpcResponse) ToJsonString() string { @@ -10535,6 +16017,15 @@ func (r *DetachClassicLinkVpcResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachNetworkInterfaceRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // CVM实例ID。形如:ins-r8hr2upy。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type DetachNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -10565,13 +16056,15 @@ func (r *DetachNetworkInterfaceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DetachNetworkInterfaceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DetachNetworkInterfaceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DetachNetworkInterfaceResponseParams `json:"Response"` } func (r *DetachNetworkInterfaceResponse) ToJsonString() string { @@ -10585,8 +16078,68 @@ func (r *DetachNetworkInterfaceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DhcpIp struct { +// Predefined struct for user +type DetachSnapshotInstancesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 实例信息。 + Instances []*SnapshotInstance `json:"Instances,omitempty" name:"Instances"` +} + +type DetachSnapshotInstancesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 实例信息。 + Instances []*SnapshotInstance `json:"Instances,omitempty" name:"Instances"` +} + +func (r *DetachSnapshotInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DetachSnapshotInstancesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyId") + delete(f, "Instances") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DetachSnapshotInstancesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DetachSnapshotInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DetachSnapshotInstancesResponse struct { + *tchttp.BaseResponse + Response *DetachSnapshotInstancesResponseParams `json:"Response"` +} + +func (r *DetachSnapshotInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DetachSnapshotInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} +type DhcpIp struct { // `DhcpIp`的`ID`,是`DhcpIp`的唯一标识。 DhcpIpId *string `json:"DhcpIpId,omitempty" name:"DhcpIpId"` @@ -10621,7 +16174,6 @@ type DhcpIp struct { } type DirectConnectGateway struct { - // 专线网关`ID`。 DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` @@ -10716,7 +16268,6 @@ type DirectConnectGateway struct { } type DirectConnectGatewayCcnRoute struct { - // 路由ID。 RouteId *string `json:"RouteId,omitempty" name:"RouteId"` @@ -10734,7 +16285,6 @@ type DirectConnectGatewayCcnRoute struct { } type DirectConnectSubnet struct { - // 专线网关ID DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` @@ -10742,6 +16292,15 @@ type DirectConnectSubnet struct { CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` } +// Predefined struct for user +type DisableCcnRoutesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // CCN路由策略唯一ID。形如:ccnr-f49l6u0z。 + RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` +} + type DisableCcnRoutesRequest struct { *tchttp.BaseRequest @@ -10772,13 +16331,15 @@ func (r *DisableCcnRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisableCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisableCcnRoutesResponseParams `json:"Response"` } func (r *DisableCcnRoutesResponse) ToJsonString() string { @@ -10792,6 +16353,69 @@ func (r *DisableCcnRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableFlowLogsRequestParams struct { + // 流日志Id。 + FlowLogIds []*string `json:"FlowLogIds,omitempty" name:"FlowLogIds"` +} + +type DisableFlowLogsRequest struct { + *tchttp.BaseRequest + + // 流日志Id。 + FlowLogIds []*string `json:"FlowLogIds,omitempty" name:"FlowLogIds"` +} + +func (r *DisableFlowLogsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableFlowLogsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "FlowLogIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DisableFlowLogsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisableFlowLogsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DisableFlowLogsResponse struct { + *tchttp.BaseResponse + Response *DisableFlowLogsResponseParams `json:"Response"` +} + +func (r *DisableFlowLogsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableFlowLogsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisableGatewayFlowMonitorRequestParams struct { + // 网关实例ID,目前我们支持的网关实例类型有, + // 专线网关实例ID,形如,`dcg-ltjahce6`; + // Nat网关实例ID,形如,`nat-ltjahce6`; + // VPN网关实例ID,形如,`vpn-ltjahce6`。 + GatewayId *string `json:"GatewayId,omitempty" name:"GatewayId"` +} + type DisableGatewayFlowMonitorRequest struct { *tchttp.BaseRequest @@ -10821,13 +16445,15 @@ func (r *DisableGatewayFlowMonitorRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableGatewayFlowMonitorResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisableGatewayFlowMonitorResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisableGatewayFlowMonitorResponseParams `json:"Response"` } func (r *DisableGatewayFlowMonitorResponse) ToJsonString() string { @@ -10841,6 +16467,18 @@ func (r *DisableGatewayFlowMonitorResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableRoutesRequestParams struct { + // 路由表唯一ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略ID。不能和RouteItemIds同时使用,但至少输入一个。该参数取值可通过查询路由列表([DescribeRouteTables](https://cloud.tencent.com/document/product/215/15763))获取。 + RouteIds []*uint64 `json:"RouteIds,omitempty" name:"RouteIds"` + + // 路由策略唯一ID。不能和RouteIds同时使用,但至少输入一个。该参数取值可通过查询路由列表([DescribeRouteTables](https://cloud.tencent.com/document/product/215/15763))获取。 + RouteItemIds []*string `json:"RouteItemIds,omitempty" name:"RouteItemIds"` +} + type DisableRoutesRequest struct { *tchttp.BaseRequest @@ -10875,13 +16513,15 @@ func (r *DisableRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisableRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisableRoutesResponseParams `json:"Response"` } func (r *DisableRoutesResponse) ToJsonString() string { @@ -10895,6 +16535,133 @@ func (r *DisableRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisableSnapshotPoliciesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +type DisableSnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +func (r *DisableSnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableSnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DisableSnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisableSnapshotPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DisableSnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *DisableSnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *DisableSnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableSnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisableVpnGatewaySslClientCertRequestParams struct { + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量禁用时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +type DisableVpnGatewaySslClientCertRequest struct { + *tchttp.BaseRequest + + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量禁用时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +func (r *DisableVpnGatewaySslClientCertRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableVpnGatewaySslClientCertRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnClientId") + delete(f, "SslVpnClientIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DisableVpnGatewaySslClientCertRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisableVpnGatewaySslClientCertResponseParams struct { + // 异步任务实例ID。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DisableVpnGatewaySslClientCertResponse struct { + *tchttp.BaseResponse + Response *DisableVpnGatewaySslClientCertResponseParams `json:"Response"` +} + +func (r *DisableVpnGatewaySslClientCertResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisableVpnGatewaySslClientCertResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisassociateAddressRequestParams struct { + // 标识 EIP 的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` + + // 表示解绑 EIP 之后是否分配普通公网 IP。取值范围:
      • TRUE:表示解绑 EIP 之后分配普通公网 IP。
      • FALSE:表示解绑 EIP 之后不分配普通公网 IP。
        默认取值:FALSE。

        只有满足以下条件时才能指定该参数:
      • 只有在解绑主网卡的主内网 IP 上的 EIP 时才能指定该参数。
      • 解绑 EIP 后重新分配普通公网 IP 操作一个账号每天最多操作 10 次;详情可通过 [DescribeAddressQuota](https://cloud.tencent.com/document/api/213/1378) 接口获取。 + ReallocateNormalPublicIp *bool `json:"ReallocateNormalPublicIp,omitempty" name:"ReallocateNormalPublicIp"` +} + type DisassociateAddressRequest struct { *tchttp.BaseRequest @@ -10925,16 +16692,18 @@ func (r *DisassociateAddressRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type DisassociateAddressResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DisassociateAddressResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DisassociateAddressResponse struct { + *tchttp.BaseResponse + Response *DisassociateAddressResponseParams `json:"Response"` } func (r *DisassociateAddressResponse) ToJsonString() string { @@ -10948,6 +16717,12 @@ func (r *DisassociateAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateDhcpIpWithAddressIpRequestParams struct { + // `DhcpIp`唯一`ID`,形如:`dhcpip-9o233uri`。必须是已绑定`EIP`的`DhcpIp`。 + DhcpIpId *string `json:"DhcpIpId,omitempty" name:"DhcpIpId"` +} + type DisassociateDhcpIpWithAddressIpRequest struct { *tchttp.BaseRequest @@ -10974,13 +16749,15 @@ func (r *DisassociateDhcpIpWithAddressIpRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateDhcpIpWithAddressIpResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateDhcpIpWithAddressIpResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateDhcpIpWithAddressIpResponseParams `json:"Response"` } func (r *DisassociateDhcpIpWithAddressIpResponse) ToJsonString() string { @@ -10994,6 +16771,18 @@ func (r *DisassociateDhcpIpWithAddressIpResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateDirectConnectGatewayNatGatewayRequestParams struct { + // 专线网关ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // NAT网关ID。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // VPC实例ID。可通过DescribeVpcs接口返回值中的VpcId获取。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` +} + type DisassociateDirectConnectGatewayNatGatewayRequest struct { *tchttp.BaseRequest @@ -11028,13 +16817,15 @@ func (r *DisassociateDirectConnectGatewayNatGatewayRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateDirectConnectGatewayNatGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateDirectConnectGatewayNatGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateDirectConnectGatewayNatGatewayResponseParams `json:"Response"` } func (r *DisassociateDirectConnectGatewayNatGatewayResponse) ToJsonString() string { @@ -11042,10 +16833,19 @@ func (r *DisassociateDirectConnectGatewayNatGatewayResponse) ToJsonString() stri return string(b) } -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *DisassociateDirectConnectGatewayNatGatewayResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DisassociateDirectConnectGatewayNatGatewayResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DisassociateNatGatewayAddressRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 待解绑NAT网关的弹性IP数组。 + PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` } type DisassociateNatGatewayAddressRequest struct { @@ -11078,13 +16878,15 @@ func (r *DisassociateNatGatewayAddressRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateNatGatewayAddressResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateNatGatewayAddressResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateNatGatewayAddressResponseParams `json:"Response"` } func (r *DisassociateNatGatewayAddressResponse) ToJsonString() string { @@ -11098,13 +16900,22 @@ func (r *DisassociateNatGatewayAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateNetworkAclSubnetsRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 子网实例ID数组。例如:[subnet-12345678]。 + SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` +} + type DisassociateNetworkAclSubnetsRequest struct { *tchttp.BaseRequest // 网络ACL实例ID。例如:acl-12345678。 NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` - // 子网实例ID数组。例如:[subnet-12345678] + // 子网实例ID数组。例如:[subnet-12345678]。 SubnetIds []*string `json:"SubnetIds,omitempty" name:"SubnetIds"` } @@ -11128,13 +16939,15 @@ func (r *DisassociateNetworkAclSubnetsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateNetworkAclSubnetsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateNetworkAclSubnetsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateNetworkAclSubnetsResponseParams `json:"Response"` } func (r *DisassociateNetworkAclSubnetsResponse) ToJsonString() string { @@ -11148,6 +16961,15 @@ func (r *DisassociateNetworkAclSubnetsResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateNetworkInterfaceSecurityGroupsRequestParams struct { + // 弹性网卡实例ID。形如:eni-pxir56ns。每次请求的实例的上限为100。 + NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` + + // 安全组实例ID,例如:sg-33ocnj9n,可通过DescribeSecurityGroups获取。每次请求的实例的上限为100。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type DisassociateNetworkInterfaceSecurityGroupsRequest struct { *tchttp.BaseRequest @@ -11178,13 +17000,15 @@ func (r *DisassociateNetworkInterfaceSecurityGroupsRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateNetworkInterfaceSecurityGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateNetworkInterfaceSecurityGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateNetworkInterfaceSecurityGroupsResponseParams `json:"Response"` } func (r *DisassociateNetworkInterfaceSecurityGroupsResponse) ToJsonString() string { @@ -11198,6 +17022,15 @@ func (r *DisassociateNetworkInterfaceSecurityGroupsResponse) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateVpcEndPointSecurityGroupsRequestParams struct { + // 安全组ID数组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 终端节点ID。 + EndPointId *string `json:"EndPointId,omitempty" name:"EndPointId"` +} + type DisassociateVpcEndPointSecurityGroupsRequest struct { *tchttp.BaseRequest @@ -11228,13 +17061,15 @@ func (r *DisassociateVpcEndPointSecurityGroupsRequest) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DisassociateVpcEndPointSecurityGroupsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type DisassociateVpcEndPointSecurityGroupsResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *DisassociateVpcEndPointSecurityGroupsResponseParams `json:"Response"` } func (r *DisassociateVpcEndPointSecurityGroupsResponse) ToJsonString() string { @@ -11248,6 +17083,21 @@ func (r *DisassociateVpcEndPointSecurityGroupsResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DownloadCustomerGatewayConfigurationRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // VPN通道实例ID。形如:vpnx-f49l6u0z。 + VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` + + // 对端网关厂商信息对象,可通过[DescribeCustomerGatewayVendors](https://cloud.tencent.com/document/api/215/17513)获取。 + CustomerGatewayVendor *CustomerGatewayVendor `json:"CustomerGatewayVendor,omitempty" name:"CustomerGatewayVendor"` + + // 通道接入设备物理接口名称。 + InterfaceName *string `json:"InterfaceName,omitempty" name:"InterfaceName"` +} + type DownloadCustomerGatewayConfigurationRequest struct { *tchttp.BaseRequest @@ -11257,7 +17107,7 @@ type DownloadCustomerGatewayConfigurationRequest struct { // VPN通道实例ID。形如:vpnx-f49l6u0z。 VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` - // 对端网关厂商信息对象,可通过DescribeCustomerGatewayVendors获取。 + // 对端网关厂商信息对象,可通过[DescribeCustomerGatewayVendors](https://cloud.tencent.com/document/api/215/17513)获取。 CustomerGatewayVendor *CustomerGatewayVendor `json:"CustomerGatewayVendor,omitempty" name:"CustomerGatewayVendor"` // 通道接入设备物理接口名称。 @@ -11286,16 +17136,18 @@ func (r *DownloadCustomerGatewayConfigurationRequest) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } -type DownloadCustomerGatewayConfigurationResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type DownloadCustomerGatewayConfigurationResponseParams struct { + // XML格式配置信息。 + CustomerGatewayConfiguration *string `json:"CustomerGatewayConfiguration,omitempty" name:"CustomerGatewayConfiguration"` - // XML格式配置信息。 - CustomerGatewayConfiguration *string `json:"CustomerGatewayConfiguration,omitempty" name:"CustomerGatewayConfiguration"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type DownloadCustomerGatewayConfigurationResponse struct { + *tchttp.BaseResponse + Response *DownloadCustomerGatewayConfigurationResponseParams `json:"Response"` } func (r *DownloadCustomerGatewayConfigurationResponse) ToJsonString() string { @@ -11309,6 +17161,99 @@ func (r *DownloadCustomerGatewayConfigurationResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type DownloadVpnGatewaySslClientCertRequestParams struct { + // SSL-VPN-CLIENT 实例ID。不可以和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SAML Token(SAML令牌)。 + SamlToken *string `json:"SamlToken,omitempty" name:"SamlToken"` + + // VPN门户网站使用。默认False + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` + + // SSL-VPN-CLIENT 实例ID列表。批量下载时使用。不可以和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +type DownloadVpnGatewaySslClientCertRequest struct { + *tchttp.BaseRequest + + // SSL-VPN-CLIENT 实例ID。不可以和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SAML Token(SAML令牌)。 + SamlToken *string `json:"SamlToken,omitempty" name:"SamlToken"` + + // VPN门户网站使用。默认False + IsVpnPortal *bool `json:"IsVpnPortal,omitempty" name:"IsVpnPortal"` + + // SSL-VPN-CLIENT 实例ID列表。批量下载时使用。不可以和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +func (r *DownloadVpnGatewaySslClientCertRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DownloadVpnGatewaySslClientCertRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnClientId") + delete(f, "SamlToken") + delete(f, "IsVpnPortal") + delete(f, "SslVpnClientIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DownloadVpnGatewaySslClientCertRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type DownloadVpnGatewaySslClientCertResponseParams struct { + // SSL-VPN 客户端配置。 + SslClientConfigsSet *string `json:"SslClientConfigsSet,omitempty" name:"SslClientConfigsSet"` + + // SSL-VPN 客户端配置。 + SslClientConfig []*SslClientConfig `json:"SslClientConfig,omitempty" name:"SslClientConfig"` + + // 是否鉴权成功 只有传入SamlToken 才生效,1为成功,0为失败。 + Authenticated *uint64 `json:"Authenticated,omitempty" name:"Authenticated"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DownloadVpnGatewaySslClientCertResponse struct { + *tchttp.BaseResponse + Response *DownloadVpnGatewaySslClientCertResponseParams `json:"Response"` +} + +func (r *DownloadVpnGatewaySslClientCertResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *DownloadVpnGatewaySslClientCertResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableCcnRoutesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // CCN路由策略唯一ID。形如:ccnr-f49l6u0z。 + RouteIds []*string `json:"RouteIds,omitempty" name:"RouteIds"` +} + type EnableCcnRoutesRequest struct { *tchttp.BaseRequest @@ -11339,13 +17284,15 @@ func (r *EnableCcnRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type EnableCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *EnableCcnRoutesResponseParams `json:"Response"` } func (r *EnableCcnRoutesResponse) ToJsonString() string { @@ -11359,6 +17306,69 @@ func (r *EnableCcnRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableFlowLogsRequestParams struct { + // 流日志Id。 + FlowLogIds []*string `json:"FlowLogIds,omitempty" name:"FlowLogIds"` +} + +type EnableFlowLogsRequest struct { + *tchttp.BaseRequest + + // 流日志Id。 + FlowLogIds []*string `json:"FlowLogIds,omitempty" name:"FlowLogIds"` +} + +func (r *EnableFlowLogsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableFlowLogsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "FlowLogIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "EnableFlowLogsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableFlowLogsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type EnableFlowLogsResponse struct { + *tchttp.BaseResponse + Response *EnableFlowLogsResponseParams `json:"Response"` +} + +func (r *EnableFlowLogsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableFlowLogsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableGatewayFlowMonitorRequestParams struct { + // 网关实例ID,目前我们支持的网关实例有, + // 专线网关实例ID,形如,`dcg-ltjahce6`; + // Nat网关实例ID,形如,`nat-ltjahce6`; + // VPN网关实例ID,形如,`vpn-ltjahce6`。 + GatewayId *string `json:"GatewayId,omitempty" name:"GatewayId"` +} + type EnableGatewayFlowMonitorRequest struct { *tchttp.BaseRequest @@ -11388,13 +17398,15 @@ func (r *EnableGatewayFlowMonitorRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableGatewayFlowMonitorResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type EnableGatewayFlowMonitorResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *EnableGatewayFlowMonitorResponseParams `json:"Response"` } func (r *EnableGatewayFlowMonitorResponse) ToJsonString() string { @@ -11408,6 +17420,18 @@ func (r *EnableGatewayFlowMonitorResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableRoutesRequestParams struct { + // 路由表唯一ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略ID。不能和RouteItemIds同时使用,但至少输入一个。该参数取值可通过查询路由列表([DescribeRouteTables](https://cloud.tencent.com/document/product/215/15763))获取。 + RouteIds []*uint64 `json:"RouteIds,omitempty" name:"RouteIds"` + + // 路由策略唯一ID。不能和RouteIds同时使用,但至少输入一个。该参数取值可通过查询路由列表([DescribeRouteTables](https://cloud.tencent.com/document/product/215/15763))获取。 + RouteItemIds []*string `json:"RouteItemIds,omitempty" name:"RouteItemIds"` +} + type EnableRoutesRequest struct { *tchttp.BaseRequest @@ -11442,13 +17466,15 @@ func (r *EnableRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type EnableRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *EnableRoutesResponseParams `json:"Response"` } func (r *EnableRoutesResponse) ToJsonString() string { @@ -11462,6 +17488,73 @@ func (r *EnableRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableSnapshotPoliciesRequestParams struct { + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +type EnableSnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyIds []*string `json:"SnapshotPolicyIds,omitempty" name:"SnapshotPolicyIds"` +} + +func (r *EnableSnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableSnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "EnableSnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableSnapshotPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type EnableSnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *EnableSnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *EnableSnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableSnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableVpcEndPointConnectRequestParams struct { + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` + + // 终端节点ID。 + EndPointId []*string `json:"EndPointId,omitempty" name:"EndPointId"` + + // 是否接受终端节点连接请求。 + //
      • true:自动接受。
      • false:不自动接受。
      • + AcceptFlag *bool `json:"AcceptFlag,omitempty" name:"AcceptFlag"` +} + type EnableVpcEndPointConnectRequest struct { *tchttp.BaseRequest @@ -11472,6 +17565,7 @@ type EnableVpcEndPointConnectRequest struct { EndPointId []*string `json:"EndPointId,omitempty" name:"EndPointId"` // 是否接受终端节点连接请求。 + //
      • true:自动接受。
      • false:不自动接受。
      • AcceptFlag *bool `json:"AcceptFlag,omitempty" name:"AcceptFlag"` } @@ -11496,13 +17590,15 @@ func (r *EnableVpcEndPointConnectRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type EnableVpcEndPointConnectResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type EnableVpcEndPointConnectResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *EnableVpcEndPointConnectResponseParams `json:"Response"` } func (r *EnableVpcEndPointConnectResponse) ToJsonString() string { @@ -11516,8 +17612,71 @@ func (r *EnableVpcEndPointConnectResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type EndPoint struct { +// Predefined struct for user +type EnableVpnGatewaySslClientCertRequestParams struct { + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量启用时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +type EnableVpnGatewaySslClientCertRequest struct { + *tchttp.BaseRequest + + // SSL-VPN-CLIENT 实例ID。不可和SslVpnClientIds同时使用。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // SSL-VPN-CLIENT 实例ID列表。批量启用时使用。不可和SslVpnClientId同时使用。 + SslVpnClientIds []*string `json:"SslVpnClientIds,omitempty" name:"SslVpnClientIds"` +} + +func (r *EnableVpnGatewaySslClientCertRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableVpnGatewaySslClientCertRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SslVpnClientId") + delete(f, "SslVpnClientIds") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "EnableVpnGatewaySslClientCertRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type EnableVpnGatewaySslClientCertResponseParams struct { + // 异步任务实例ID。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type EnableVpnGatewaySslClientCertResponse struct { + *tchttp.BaseResponse + Response *EnableVpnGatewaySslClientCertResponseParams `json:"Response"` +} + +func (r *EnableVpnGatewaySslClientCertResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *EnableVpnGatewaySslClientCertResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type EndPoint struct { // 终端节点ID。 EndPointId *string `json:"EndPointId,omitempty" name:"EndPointId"` @@ -11560,7 +17719,6 @@ type EndPoint struct { } type EndPointService struct { - // 终端节点服务ID EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` @@ -11592,19 +17750,20 @@ type EndPointService struct { // 创建时间。 CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 挂载的PAAS服务类型,CLB,CDB,CRS + ServiceType *string `json:"ServiceType,omitempty" name:"ServiceType"` } type Filter struct { - // 属性名称, 若存在多个Filter时,Filter间的关系为逻辑与(AND)关系。 Name *string `json:"Name,omitempty" name:"Name"` - // 属性值, 若同一个Filter存在多个Values,同一Filter下Values间的关系为逻辑或(OR)关系。 + // 属性值, 若同一个Filter存在多个Values,同一Filter下Values间的关系为逻辑或(OR)关系。当值类型为布尔类型时,可直接取值为字符串"TRUE"或 "FALSE"。 Values []*string `json:"Values,omitempty" name:"Values"` } type FilterObject struct { - // 属性名称, 若存在多个Filter时,Filter间的关系为逻辑与(AND)关系。 Name *string `json:"Name,omitempty" name:"Name"` @@ -11613,43 +17772,65 @@ type FilterObject struct { } type FlowLog struct { - - // 私用网络ID或者统一ID,建议使用统一ID + // 私用网络ID或者统一ID,建议使用统一ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 流日志唯一ID + // 流日志唯一ID。 FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` - // 流日志实例名字 + // 流日志实例名字。 FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` - // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE|CCN + // 流日志所属资源类型,VPC|SUBNET|NETWORKINTERFACE|CCN|NAT|DCG。 ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` - // 资源唯一ID + // 资源唯一ID。 ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` - // 流日志采集类型,ACCEPT|REJECT|ALL + // 流日志采集类型,ACCEPT|REJECT|ALL。 TrafficType *string `json:"TrafficType,omitempty" name:"TrafficType"` - // 流日志存储ID + // 流日志存储ID。 CloudLogId *string `json:"CloudLogId,omitempty" name:"CloudLogId"` - // 流日志存储ID状态 + // 流日志存储ID状态。 CloudLogState *string `json:"CloudLogState,omitempty" name:"CloudLogState"` - // 流日志描述信息 + // 流日志描述信息。 FlowLogDescription *string `json:"FlowLogDescription,omitempty" name:"FlowLogDescription"` - // 流日志创建时间 + // 流日志创建时间。 CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` - // 标签列表,例如:[{"Key": "city", "Value": "shanghai"}] + // 标签列表,例如:[{"Key": "city", "Value": "shanghai"}]。 TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` + + // 是否启用,true-启用,false-停用。 + Enable *bool `json:"Enable,omitempty" name:"Enable"` + + // 消费端类型:cls、ckafka。 + // 注意:此字段可能返回 null,表示取不到有效值。 + StorageType *string `json:"StorageType,omitempty" name:"StorageType"` + + // 消费端信息,当消费端类型为ckafka时返回。 + // 注意:此字段可能返回 null,表示取不到有效值。 + FlowLogStorage *FlowLogStorage `json:"FlowLogStorage,omitempty" name:"FlowLogStorage"` + + // 流日志存储ID对应的地域信息。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CloudLogRegion *string `json:"CloudLogRegion,omitempty" name:"CloudLogRegion"` } -type GatewayFlowMonitorDetail struct { +type FlowLogStorage struct { + // 存储实例Id,当流日志存储类型为ckafka时,必填。 + StorageId *string `json:"StorageId,omitempty" name:"StorageId"` + + // 主题Id,当流日志存储类型为ckafka时,必填。 + // 注意:此字段可能返回 null,表示取不到有效值。 + StorageTopic *string `json:"StorageTopic,omitempty" name:"StorageTopic"` +} +type GatewayFlowMonitorDetail struct { // 来源`IP`。 PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` @@ -11667,7 +17848,6 @@ type GatewayFlowMonitorDetail struct { } type GatewayQos struct { - // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -11681,6 +17861,89 @@ type GatewayQos struct { CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` } +// Predefined struct for user +type GenerateVpnConnectionDefaultHealthCheckIpRequestParams struct { + // VPN网关id, 例如:vpngw-1w9tue3d + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` +} + +type GenerateVpnConnectionDefaultHealthCheckIpRequest struct { + *tchttp.BaseRequest + + // VPN网关id, 例如:vpngw-1w9tue3d + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` +} + +func (r *GenerateVpnConnectionDefaultHealthCheckIpRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *GenerateVpnConnectionDefaultHealthCheckIpRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "VpnGatewayId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "GenerateVpnConnectionDefaultHealthCheckIpRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type GenerateVpnConnectionDefaultHealthCheckIpResponseParams struct { + // VPN通道健康检查本端ip + HealthCheckLocalIp *string `json:"HealthCheckLocalIp,omitempty" name:"HealthCheckLocalIp"` + + // VPN通道健康检查对端ip + HealthCheckRemoteIp *string `json:"HealthCheckRemoteIp,omitempty" name:"HealthCheckRemoteIp"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type GenerateVpnConnectionDefaultHealthCheckIpResponse struct { + *tchttp.BaseResponse + Response *GenerateVpnConnectionDefaultHealthCheckIpResponseParams `json:"Response"` +} + +func (r *GenerateVpnConnectionDefaultHealthCheckIpResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *GenerateVpnConnectionDefaultHealthCheckIpResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type GetCcnRegionBandwidthLimitsRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 过滤条件。 + //
      • sregion - String - (过滤条件)源地域,形如:ap-guangzhou。
      • + //
      • dregion - String - (过滤条件)目的地域,形如:ap-shanghai-bm
      • + Filters []*Filter `json:"Filters,omitempty" name:"Filters"` + + // 排序条件,目前支持带宽(`BandwidthLimit`)和过期时间(`ExpireTime`),默认按 `ExpireTime` 排序。 + SortedBy *string `json:"SortedBy,omitempty" name:"SortedBy"` + + // 偏移量。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 排序方式,'ASC':升序,'DESC':降序。默认按'ASC'排序。 + OrderBy *string `json:"OrderBy,omitempty" name:"OrderBy"` +} + type GetCcnRegionBandwidthLimitsRequest struct { *tchttp.BaseRequest @@ -11692,16 +17955,16 @@ type GetCcnRegionBandwidthLimitsRequest struct { //
      • dregion - String - (过滤条件)目的地域,形如:ap-shanghai-bm
      • Filters []*Filter `json:"Filters,omitempty" name:"Filters"` - // 排序条件,目前支持带宽(BandwidthLimit)和过期时间(ExpireTime) + // 排序条件,目前支持带宽(`BandwidthLimit`)和过期时间(`ExpireTime`),默认按 `ExpireTime` 排序。 SortedBy *string `json:"SortedBy,omitempty" name:"SortedBy"` - // 偏移量 + // 偏移量。 Offset *uint64 `json:"Offset,omitempty" name:"Offset"` - // 返回数量 + // 返回数量。 Limit *uint64 `json:"Limit,omitempty" name:"Limit"` - // 排序方式,'ASC':升序,'DESC':降序。 + // 排序方式,'ASC':升序,'DESC':降序。默认按'ASC'排序。 OrderBy *string `json:"OrderBy,omitempty" name:"OrderBy"` } @@ -11729,21 +17992,23 @@ func (r *GetCcnRegionBandwidthLimitsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type GetCcnRegionBandwidthLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type GetCcnRegionBandwidthLimitsResponseParams struct { + // 云联网(CCN)各地域出带宽详情。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CcnBandwidthSet []*CcnBandwidthInfo `json:"CcnBandwidthSet,omitempty" name:"CcnBandwidthSet"` - // 云联网(CCN)各地域出带宽带宽详情。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CcnBandwidthSet []*CcnBandwidthInfo `json:"CcnBandwidthSet,omitempty" name:"CcnBandwidthSet"` + // 符合条件的对象数。 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` - // 符合条件的对象数。 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type GetCcnRegionBandwidthLimitsResponse struct { + *tchttp.BaseResponse + Response *GetCcnRegionBandwidthLimitsResponseParams `json:"Response"` } func (r *GetCcnRegionBandwidthLimitsResponse) ToJsonString() string { @@ -11758,7 +18023,6 @@ func (r *GetCcnRegionBandwidthLimitsResponse) FromJsonString(s string) error { } type HaVip struct { - // `HAVIP`的`ID`,是`HAVIP`的唯一标识。 HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` @@ -11795,13 +18059,22 @@ type HaVip struct { Business *string `json:"Business,omitempty" name:"Business"` } +// Predefined struct for user +type HaVipAssociateAddressIpRequestParams struct { + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。必须是没有绑定`EIP`的`HAVIP`。 + HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` + + // 弹性公网`IP`。必须是没有绑定`HAVIP`的`EIP`。 + AddressIp *string `json:"AddressIp,omitempty" name:"AddressIp"` +} + type HaVipAssociateAddressIpRequest struct { *tchttp.BaseRequest - // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。必须是没有绑定`EIP`的`HAVIP` + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。必须是没有绑定`EIP`的`HAVIP`。 HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` - // 弹性公网`IP`。必须是没有绑定`HAVIP`的`EIP` + // 弹性公网`IP`。必须是没有绑定`HAVIP`的`EIP`。 AddressIp *string `json:"AddressIp,omitempty" name:"AddressIp"` } @@ -11825,13 +18098,15 @@ func (r *HaVipAssociateAddressIpRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type HaVipAssociateAddressIpResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type HaVipAssociateAddressIpResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *HaVipAssociateAddressIpResponseParams `json:"Response"` } func (r *HaVipAssociateAddressIpResponse) ToJsonString() string { @@ -11845,6 +18120,12 @@ func (r *HaVipAssociateAddressIpResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type HaVipDisassociateAddressIpRequestParams struct { + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。必须是已绑定`EIP`的`HAVIP`。 + HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` +} + type HaVipDisassociateAddressIpRequest struct { *tchttp.BaseRequest @@ -11871,13 +18152,15 @@ func (r *HaVipDisassociateAddressIpRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type HaVipDisassociateAddressIpResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type HaVipDisassociateAddressIpResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *HaVipDisassociateAddressIpResponseParams `json:"Response"` } func (r *HaVipDisassociateAddressIpResponse) ToJsonString() string { @@ -11892,7 +18175,6 @@ func (r *HaVipDisassociateAddressIpResponse) FromJsonString(s string) error { } type IKEOptionsSpecification struct { - // 加密算法,可选值:'3DES-CBC', 'AES-CBC-128', 'AES-CBS-192', 'AES-CBC-256', 'DES-CBC','SM4', 默认为3DES-CBC PropoEncryAlgorithm *string `json:"PropoEncryAlgorithm,omitempty" name:"PropoEncryAlgorithm"` @@ -11931,7 +18213,6 @@ type IKEOptionsSpecification struct { } type IPSECOptionsSpecification struct { - // 加密算法,可选值:'3DES-CBC', 'AES-CBC-128', 'AES-CBC-192', 'AES-CBC-256', 'DES-CBC', 'SM4', 'NULL', 默认为AES-CBC-128 EncryptAlgorithm *string `json:"EncryptAlgorithm,omitempty" name:"EncryptAlgorithm"` @@ -11948,6 +18229,10 @@ type IPSECOptionsSpecification struct { IPSECSaLifetimeTraffic *uint64 `json:"IPSECSaLifetimeTraffic,omitempty" name:"IPSECSaLifetimeTraffic"` } +// Predefined struct for user +type InquirePriceCreateDirectConnectGatewayRequestParams struct { +} + type InquirePriceCreateDirectConnectGatewayRequest struct { *tchttp.BaseRequest } @@ -11964,27 +18249,30 @@ func (r *InquirePriceCreateDirectConnectGatewayRequest) FromJsonString(s string) if err := json.Unmarshal([]byte(s), &f); err != nil { return err } + if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "InquirePriceCreateDirectConnectGatewayRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type InquirePriceCreateDirectConnectGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquirePriceCreateDirectConnectGatewayResponseParams struct { + // 专线网关标准接入费用 + // 注意:此字段可能返回 null,表示取不到有效值。 + TotalCost *int64 `json:"TotalCost,omitempty" name:"TotalCost"` - // 专线网关标准接入费用 - // 注意:此字段可能返回 null,表示取不到有效值。 - TotalCost *int64 `json:"TotalCost,omitempty" name:"TotalCost"` + // 专线网关真实接入费用 + // 注意:此字段可能返回 null,表示取不到有效值。 + RealTotalCost *int64 `json:"RealTotalCost,omitempty" name:"RealTotalCost"` - // 专线网关真实接入费用 - // 注意:此字段可能返回 null,表示取不到有效值。 - RealTotalCost *int64 `json:"RealTotalCost,omitempty" name:"RealTotalCost"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquirePriceCreateDirectConnectGatewayResponse struct { + *tchttp.BaseResponse + Response *InquirePriceCreateDirectConnectGatewayResponseParams `json:"Response"` } func (r *InquirePriceCreateDirectConnectGatewayResponse) ToJsonString() string { @@ -11998,6 +18286,24 @@ func (r *InquirePriceCreateDirectConnectGatewayResponse) FromJsonString(s string return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceCreateVpnGatewayRequestParams struct { + // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100;单位:Mbps。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // VPN网关计费模式,PREPAID:表示预付费,即包年包月,POSTPAID_BY_HOUR:表示后付费,即按量计费。默认:POSTPAID_BY_HOUR,如果指定预付费模式,参数InstanceChargePrepaid必填。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // SSL VPN连接数设置,可选规格:5, 10, 20, 50, 100;单位:个。 + MaxConnection *uint64 `json:"MaxConnection,omitempty" name:"MaxConnection"` + + // 查询的VPN类型,支持IPSEC和SSL两种类型,为SSL类型时,MaxConnection参数必传。 + Type *string `json:"Type,omitempty" name:"Type"` +} + type InquiryPriceCreateVpnGatewayRequest struct { *tchttp.BaseRequest @@ -12009,6 +18315,12 @@ type InquiryPriceCreateVpnGatewayRequest struct { // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // SSL VPN连接数设置,可选规格:5, 10, 20, 50, 100;单位:个。 + MaxConnection *uint64 `json:"MaxConnection,omitempty" name:"MaxConnection"` + + // 查询的VPN类型,支持IPSEC和SSL两种类型,为SSL类型时,MaxConnection参数必传。 + Type *string `json:"Type,omitempty" name:"Type"` } func (r *InquiryPriceCreateVpnGatewayRequest) ToJsonString() string { @@ -12026,22 +18338,26 @@ func (r *InquiryPriceCreateVpnGatewayRequest) FromJsonString(s string) error { delete(f, "InternetMaxBandwidthOut") delete(f, "InstanceChargeType") delete(f, "InstanceChargePrepaid") + delete(f, "MaxConnection") + delete(f, "Type") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "InquiryPriceCreateVpnGatewayRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } -type InquiryPriceCreateVpnGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceCreateVpnGatewayResponseParams struct { + // 商品价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 商品价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceCreateVpnGatewayResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceCreateVpnGatewayResponseParams `json:"Response"` } func (r *InquiryPriceCreateVpnGatewayResponse) ToJsonString() string { @@ -12055,6 +18371,15 @@ func (r *InquiryPriceCreateVpnGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceRenewVpnGatewayRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` +} + type InquiryPriceRenewVpnGatewayRequest struct { *tchttp.BaseRequest @@ -12085,16 +18410,18 @@ func (r *InquiryPriceRenewVpnGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type InquiryPriceRenewVpnGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceRenewVpnGatewayResponseParams struct { + // 商品价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 商品价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceRenewVpnGatewayResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceRenewVpnGatewayResponseParams `json:"Response"` } func (r *InquiryPriceRenewVpnGatewayResponse) ToJsonString() string { @@ -12108,6 +18435,15 @@ func (r *InquiryPriceRenewVpnGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type InquiryPriceResetVpnGatewayInternetMaxBandwidthRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100;单位:Mbps。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` +} + type InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest struct { *tchttp.BaseRequest @@ -12138,16 +18474,18 @@ func (r *InquiryPriceResetVpnGatewayInternetMaxBandwidthRequest) FromJsonString( return json.Unmarshal([]byte(s), &r) } -type InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type InquiryPriceResetVpnGatewayInternetMaxBandwidthResponseParams struct { + // 商品价格。 + Price *Price `json:"Price,omitempty" name:"Price"` - // 商品价格。 - Price *Price `json:"Price,omitempty" name:"Price"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse struct { + *tchttp.BaseResponse + Response *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponseParams `json:"Response"` } func (r *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse) ToJsonString() string { @@ -12162,16 +18500,14 @@ func (r *InquiryPriceResetVpnGatewayInternetMaxBandwidthResponse) FromJsonString } type InstanceChargePrepaid struct { - // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 24, 36。 Period *uint64 `json:"Period,omitempty" name:"Period"` - // 自动续费标识。取值范围: NOTIFY_AND_AUTO_RENEW:通知过期且自动续费, NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费。默认:NOTIFY_AND_MANUAL_RENEW + // 自动续费标识。取值范围: NOTIFY_AND_AUTO_RENEW:通知过期且自动续费, NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费。默认:NOTIFY_AND_AUTO_RENEW RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` } type InstanceStatistic struct { - // 实例的类型 InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` @@ -12180,7 +18516,6 @@ type InstanceStatistic struct { } type Ip6Rule struct { - // IPV6转换规则唯一ID,形如rule6-xxxxxxxx Ip6RuleId *string `json:"Ip6RuleId,omitempty" name:"Ip6RuleId"` @@ -12210,7 +18545,6 @@ type Ip6Rule struct { } type Ip6RuleInfo struct { - // IPV6端口号,可在0~65535范围取值 Vport6 *int64 `json:"Vport6,omitempty" name:"Vport6"` @@ -12225,7 +18559,6 @@ type Ip6RuleInfo struct { } type Ip6Translator struct { - // IPV6转换实例唯一ID,形如ip6-xxxxxxxx Ip6TranslatorId *string `json:"Ip6TranslatorId,omitempty" name:"Ip6TranslatorId"` @@ -12251,8 +18584,24 @@ type Ip6Translator struct { IP6RuleSet []*Ip6Rule `json:"IP6RuleSet,omitempty" name:"IP6RuleSet"` } -type IpField struct { +type IpAddressStates struct { + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + // 子网实例ID。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // IP地址。 + IpAddress *string `json:"IpAddress,omitempty" name:"IpAddress"` + + // 资源类型 + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源ID + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` +} + +type IpField struct { // 国家字段信息 Country *bool `json:"Country,omitempty" name:"Country"` @@ -12279,7 +18628,6 @@ type IpField struct { } type IpGeolocationInfo struct { - // 国家信息 // 注意:此字段可能返回 null,表示取不到有效值。 Country *string `json:"Country,omitempty" name:"Country"` @@ -12318,7 +18666,6 @@ type IpGeolocationInfo struct { } type Ipv6Address struct { - // `IPv6`地址,形如:`3402:4e00:20:100:0:8cd9:2a67:71f3` Address *string `json:"Address,omitempty" name:"Address"` @@ -12343,7 +18690,6 @@ type Ipv6Address struct { } type Ipv6SubnetCidrBlock struct { - // 子网实例`ID`。形如:`subnet-pxir56ns`。 SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` @@ -12352,7 +18698,6 @@ type Ipv6SubnetCidrBlock struct { } type ItemPrice struct { - // 按量计费后付费单价,单位:元。 UnitPrice *float64 `json:"UnitPrice,omitempty" name:"UnitPrice"` @@ -12367,28 +18712,129 @@ type ItemPrice struct { } type LocalGateway struct { - // CDC实例ID CdcId *string `json:"CdcId,omitempty" name:"CdcId"` - // VPC实例ID - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + // VPC实例ID + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 本地网关实例ID + UniqLocalGwId *string `json:"UniqLocalGwId,omitempty" name:"UniqLocalGwId"` + + // 本地网关名称 + LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` + + // 本地网关IP地址 + LocalGwIp *string `json:"LocalGwIp,omitempty" name:"LocalGwIp"` + + // 本地网关创建时间 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` +} + +// Predefined struct for user +type LockCcnBandwidthsRequestParams struct { + // 带宽实例的唯一ID数组。 + Instances []*CcnFlowLock `json:"Instances,omitempty" name:"Instances"` +} + +type LockCcnBandwidthsRequest struct { + *tchttp.BaseRequest + + // 带宽实例的唯一ID数组。 + Instances []*CcnFlowLock `json:"Instances,omitempty" name:"Instances"` +} + +func (r *LockCcnBandwidthsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *LockCcnBandwidthsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Instances") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "LockCcnBandwidthsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type LockCcnBandwidthsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type LockCcnBandwidthsResponse struct { + *tchttp.BaseResponse + Response *LockCcnBandwidthsResponseParams `json:"Response"` +} + +func (r *LockCcnBandwidthsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *LockCcnBandwidthsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type LockCcnsRequestParams struct { +} + +type LockCcnsRequest struct { + *tchttp.BaseRequest +} + +func (r *LockCcnsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *LockCcnsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "LockCcnsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} - // 本地网关实例ID - UniqLocalGwId *string `json:"UniqLocalGwId,omitempty" name:"UniqLocalGwId"` +// Predefined struct for user +type LockCcnsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 本地网关名称 - LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` +type LockCcnsResponse struct { + *tchttp.BaseResponse + Response *LockCcnsResponseParams `json:"Response"` +} - // 本地网关IP地址 - LocalGwIp *string `json:"LocalGwIp,omitempty" name:"LocalGwIp"` +func (r *LockCcnsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 本地网关创建时间 - CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *LockCcnsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) } type MemberInfo struct { - // 模板对象成员 Member *string `json:"Member,omitempty" name:"Member"` @@ -12396,6 +18842,21 @@ type MemberInfo struct { Description *string `json:"Description,omitempty" name:"Description"` } +// Predefined struct for user +type MigrateNetworkInterfaceRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 弹性网卡当前绑定的CVM实例ID。形如:ins-r8hr2upy。 + SourceInstanceId *string `json:"SourceInstanceId,omitempty" name:"SourceInstanceId"` + + // 待迁移的目的CVM实例ID。 + DestinationInstanceId *string `json:"DestinationInstanceId,omitempty" name:"DestinationInstanceId"` + + // 网卡绑定类型:0 标准型 1 扩展型。 + AttachType *uint64 `json:"AttachType,omitempty" name:"AttachType"` +} + type MigrateNetworkInterfaceRequest struct { *tchttp.BaseRequest @@ -12434,13 +18895,15 @@ func (r *MigrateNetworkInterfaceRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type MigrateNetworkInterfaceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type MigrateNetworkInterfaceResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *MigrateNetworkInterfaceResponseParams `json:"Response"` } func (r *MigrateNetworkInterfaceResponse) ToJsonString() string { @@ -12454,6 +18917,18 @@ func (r *MigrateNetworkInterfaceResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type MigratePrivateIpAddressRequestParams struct { + // 当内网IP绑定的弹性网卡实例ID,例如:eni-m6dyj72l。 + SourceNetworkInterfaceId *string `json:"SourceNetworkInterfaceId,omitempty" name:"SourceNetworkInterfaceId"` + + // 待迁移的目的弹性网卡实例ID。 + DestinationNetworkInterfaceId *string `json:"DestinationNetworkInterfaceId,omitempty" name:"DestinationNetworkInterfaceId"` + + // 迁移的内网IP地址,例如:10.0.0.6。 + PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` +} + type MigratePrivateIpAddressRequest struct { *tchttp.BaseRequest @@ -12488,13 +18963,15 @@ func (r *MigratePrivateIpAddressRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type MigratePrivateIpAddressResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type MigratePrivateIpAddressResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *MigratePrivateIpAddressResponseParams `json:"Response"` } func (r *MigratePrivateIpAddressResponse) ToJsonString() string { @@ -12508,6 +18985,18 @@ func (r *MigratePrivateIpAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressAttributeRequestParams struct { + // 标识 EIP 的唯一 ID。EIP 唯一 ID 形如:`eip-11112222`。 + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` + + // 修改后的 EIP 名称。长度上限为20个字符。 + AddressName *string `json:"AddressName,omitempty" name:"AddressName"` + + // 设定EIP是否直通,"TRUE"表示直通,"FALSE"表示非直通。注意该参数仅对EIP直通功能可见的用户可以设定。 + EipDirectConnection *string `json:"EipDirectConnection,omitempty" name:"EipDirectConnection"` +} + type ModifyAddressAttributeRequest struct { *tchttp.BaseRequest @@ -12542,13 +19031,15 @@ func (r *ModifyAddressAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyAddressAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyAddressAttributeResponseParams `json:"Response"` } func (r *ModifyAddressAttributeResponse) ToJsonString() string { @@ -12562,6 +19053,21 @@ func (r *ModifyAddressAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressInternetChargeTypeRequestParams struct { + // 弹性公网IP的唯一ID,形如eip-xxx + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` + + // 弹性公网IP调整目标计费模式,只支持"BANDWIDTH_PREPAID_BY_MONTH"和"TRAFFIC_POSTPAID_BY_HOUR" + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + + // 弹性公网IP调整目标带宽值 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 包月带宽网络计费模式参数。弹性公网IP的调整目标计费模式是"BANDWIDTH_PREPAID_BY_MONTH"时,必传该参数。 + AddressChargePrepaid *AddressChargePrepaid `json:"AddressChargePrepaid,omitempty" name:"AddressChargePrepaid"` +} + type ModifyAddressInternetChargeTypeRequest struct { *tchttp.BaseRequest @@ -12600,13 +19106,15 @@ func (r *ModifyAddressInternetChargeTypeRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressInternetChargeTypeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyAddressInternetChargeTypeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyAddressInternetChargeTypeResponseParams `json:"Response"` } func (r *ModifyAddressInternetChargeTypeResponse) ToJsonString() string { @@ -12620,6 +19128,21 @@ func (r *ModifyAddressInternetChargeTypeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressTemplateAttributeRequestParams struct { + // IP地址模板实例ID,例如:ipm-mdunqeb6。 + AddressTemplateId *string `json:"AddressTemplateId,omitempty" name:"AddressTemplateId"` + + // IP地址模板名称。 + AddressTemplateName *string `json:"AddressTemplateName,omitempty" name:"AddressTemplateName"` + + // 地址信息,支持 IP、CIDR、IP 范围。 + Addresses []*string `json:"Addresses,omitempty" name:"Addresses"` + + // 支持添加备注的地址信息,支持 IP、CIDR、IP 范围。 + AddressesExtra []*AddressInfo `json:"AddressesExtra,omitempty" name:"AddressesExtra"` +} + type ModifyAddressTemplateAttributeRequest struct { *tchttp.BaseRequest @@ -12658,13 +19181,15 @@ func (r *ModifyAddressTemplateAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressTemplateAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyAddressTemplateAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyAddressTemplateAttributeResponseParams `json:"Response"` } func (r *ModifyAddressTemplateAttributeResponse) ToJsonString() string { @@ -12678,6 +19203,18 @@ func (r *ModifyAddressTemplateAttributeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressTemplateGroupAttributeRequestParams struct { + // IP地址模板集合实例ID,例如:ipmg-2uw6ujo6。 + AddressTemplateGroupId *string `json:"AddressTemplateGroupId,omitempty" name:"AddressTemplateGroupId"` + + // IP地址模板集合名称。 + AddressTemplateGroupName *string `json:"AddressTemplateGroupName,omitempty" name:"AddressTemplateGroupName"` + + // IP地址模板实例ID, 例如:ipm-mdunqeb6。 + AddressTemplateIds []*string `json:"AddressTemplateIds,omitempty" name:"AddressTemplateIds"` +} + type ModifyAddressTemplateGroupAttributeRequest struct { *tchttp.BaseRequest @@ -12712,13 +19249,15 @@ func (r *ModifyAddressTemplateGroupAttributeRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressTemplateGroupAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyAddressTemplateGroupAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyAddressTemplateGroupAttributeResponseParams `json:"Response"` } func (r *ModifyAddressTemplateGroupAttributeResponse) ToJsonString() string { @@ -12732,6 +19271,21 @@ func (r *ModifyAddressTemplateGroupAttributeResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAddressesBandwidthRequestParams struct { + // EIP唯一标识ID列表,形如'eip-xxxx' + AddressIds []*string `json:"AddressIds,omitempty" name:"AddressIds"` + + // 调整带宽目标值 + InternetMaxBandwidthOut *int64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 包月带宽起始时间(已废弃,输入无效) + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 包月带宽结束时间(已废弃,输入无效) + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + type ModifyAddressesBandwidthRequest struct { *tchttp.BaseRequest @@ -12770,16 +19324,18 @@ func (r *ModifyAddressesBandwidthRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ModifyAddressesBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyAddressesBandwidthResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyAddressesBandwidthResponse struct { + *tchttp.BaseResponse + Response *ModifyAddressesBandwidthResponseParams `json:"Response"` } func (r *ModifyAddressesBandwidthResponse) ToJsonString() string { @@ -12793,10 +19349,22 @@ func (r *ModifyAddressesBandwidthResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyAssistantCidrRequestParams struct { + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 待添加的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"],入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + NewCidrBlocks []*string `json:"NewCidrBlocks,omitempty" name:"NewCidrBlocks"` + + // 待删除的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"],入参NewCidrBlocks和OldCidrBlocks至少需要其一。 + OldCidrBlocks []*string `json:"OldCidrBlocks,omitempty" name:"OldCidrBlocks"` +} + type ModifyAssistantCidrRequest struct { *tchttp.BaseRequest - // `VPC`实例`ID`。形如:`vpc-6v2ht8q5` + // `VPC`实例`ID`。形如:`vpc-6v2ht8q5`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` // 待添加的辅助CIDR。CIDR数组,格式如["10.0.0.0/16", "172.16.0.0/16"],入参NewCidrBlocks和OldCidrBlocks至少需要其一。 @@ -12827,17 +19395,19 @@ func (r *ModifyAssistantCidrRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ModifyAssistantCidrResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyAssistantCidrResponseParams struct { + // 辅助CIDR数组。 + // 注意:此字段可能返回 null,表示取不到有效值。 + AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` - // 辅助CIDR数组。 - // 注意:此字段可能返回 null,表示取不到有效值。 - AssistantCidrSet []*AssistantCidr `json:"AssistantCidrSet,omitempty" name:"AssistantCidrSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyAssistantCidrResponse struct { + *tchttp.BaseResponse + Response *ModifyAssistantCidrResponseParams `json:"Response"` } func (r *ModifyAssistantCidrResponse) ToJsonString() string { @@ -12851,6 +19421,19 @@ func (r *ModifyAssistantCidrResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyBandwidthPackageAttributeRequestParams struct { + // 带宽包唯一标识ID + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + + // 带宽包名称 + BandwidthPackageName *string `json:"BandwidthPackageName,omitempty" name:"BandwidthPackageName"` + + // 带宽包计费模式,示例 : + // 'TOP5_POSTPAID_BY_MONTH'(后付费-TOP5计费) + ChargeType *string `json:"ChargeType,omitempty" name:"ChargeType"` +} + type ModifyBandwidthPackageAttributeRequest struct { *tchttp.BaseRequest @@ -12860,11 +19443,9 @@ type ModifyBandwidthPackageAttributeRequest struct { // 带宽包名称 BandwidthPackageName *string `json:"BandwidthPackageName,omitempty" name:"BandwidthPackageName"` - // 带宽包计费模式 + // 带宽包计费模式,示例 : + // 'TOP5_POSTPAID_BY_MONTH'(后付费-TOP5计费) ChargeType *string `json:"ChargeType,omitempty" name:"ChargeType"` - - // 退款时迁移为后付费带宽包。默认值:否 - MigrateOnRefund *bool `json:"MigrateOnRefund,omitempty" name:"MigrateOnRefund"` } func (r *ModifyBandwidthPackageAttributeRequest) ToJsonString() string { @@ -12882,20 +19463,21 @@ func (r *ModifyBandwidthPackageAttributeRequest) FromJsonString(s string) error delete(f, "BandwidthPackageId") delete(f, "BandwidthPackageName") delete(f, "ChargeType") - delete(f, "MigrateOnRefund") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyBandwidthPackageAttributeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyBandwidthPackageAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyBandwidthPackageAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyBandwidthPackageAttributeResponseParams `json:"Response"` } func (r *ModifyBandwidthPackageAttributeResponse) ToJsonString() string { @@ -12909,6 +19491,15 @@ func (r *ModifyBandwidthPackageAttributeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnAttachedInstancesAttributeRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 关联网络实例列表 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` +} + type ModifyCcnAttachedInstancesAttributeRequest struct { *tchttp.BaseRequest @@ -12939,13 +19530,15 @@ func (r *ModifyCcnAttachedInstancesAttributeRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnAttachedInstancesAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyCcnAttachedInstancesAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyCcnAttachedInstancesAttributeResponseParams `json:"Response"` } func (r *ModifyCcnAttachedInstancesAttributeResponse) ToJsonString() string { @@ -12959,6 +19552,18 @@ func (r *ModifyCcnAttachedInstancesAttributeResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnAttributeRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // CCN名称,最大长度不能超过60个字节,限制:CcnName和CcnDescription必须至少选择一个参数输入,否则报错。 + CcnName *string `json:"CcnName,omitempty" name:"CcnName"` + + // CCN描述信息,最大长度不能超过100个字节,限制:CcnName和CcnDescription必须至少选择一个参数输入,否则报错。 + CcnDescription *string `json:"CcnDescription,omitempty" name:"CcnDescription"` +} + type ModifyCcnAttributeRequest struct { *tchttp.BaseRequest @@ -12993,13 +19598,15 @@ func (r *ModifyCcnAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyCcnAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyCcnAttributeResponseParams `json:"Response"` } func (r *ModifyCcnAttributeResponse) ToJsonString() string { @@ -13013,13 +19620,22 @@ func (r *ModifyCcnAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnRegionBandwidthLimitsTypeRequestParams struct { + // 云联网实例ID。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 云联网限速类型,INTER_REGION_LIMIT:地域间限速,OUTER_REGION_LIMIT:地域出口限速。默认值:OUTER_REGION_LIMIT。 + BandwidthLimitType *string `json:"BandwidthLimitType,omitempty" name:"BandwidthLimitType"` +} + type ModifyCcnRegionBandwidthLimitsTypeRequest struct { *tchttp.BaseRequest // 云联网实例ID。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` - // 云联网限速类型,INTER_REGION_LIMIT:地域间限速,OUTER_REGION_LIMIT:地域出口限速。 + // 云联网限速类型,INTER_REGION_LIMIT:地域间限速,OUTER_REGION_LIMIT:地域出口限速。默认值:OUTER_REGION_LIMIT。 BandwidthLimitType *string `json:"BandwidthLimitType,omitempty" name:"BandwidthLimitType"` } @@ -13043,13 +19659,15 @@ func (r *ModifyCcnRegionBandwidthLimitsTypeRequest) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCcnRegionBandwidthLimitsTypeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyCcnRegionBandwidthLimitsTypeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyCcnRegionBandwidthLimitsTypeResponseParams `json:"Response"` } func (r *ModifyCcnRegionBandwidthLimitsTypeResponse) ToJsonString() string { @@ -13063,10 +19681,19 @@ func (r *ModifyCcnRegionBandwidthLimitsTypeResponse) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCustomerGatewayAttributeRequestParams struct { + // 对端网关ID,例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/api/215/17516)接口查询对端网关。 + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` + + // 对端网关名称,可任意命名,但不得超过60个字符。 + CustomerGatewayName *string `json:"CustomerGatewayName,omitempty" name:"CustomerGatewayName"` +} + type ModifyCustomerGatewayAttributeRequest struct { *tchttp.BaseRequest - // 对端网关ID,例如:cgw-2wqq41m9,可通过DescribeCustomerGateways接口查询对端网关。 + // 对端网关ID,例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/api/215/17516)接口查询对端网关。 CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` // 对端网关名称,可任意命名,但不得超过60个字符。 @@ -13093,13 +19720,15 @@ func (r *ModifyCustomerGatewayAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyCustomerGatewayAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyCustomerGatewayAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyCustomerGatewayAttributeResponseParams `json:"Response"` } func (r *ModifyCustomerGatewayAttributeResponse) ToJsonString() string { @@ -13113,6 +19742,15 @@ func (r *ModifyCustomerGatewayAttributeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyDhcpIpAttributeRequestParams struct { + // `DhcpIp`唯一`ID`,形如:`dhcpip-9o233uri`。 + DhcpIpId *string `json:"DhcpIpId,omitempty" name:"DhcpIpId"` + + // `DhcpIp`名称,可任意命名,但不得超过60个字符。 + DhcpIpName *string `json:"DhcpIpName,omitempty" name:"DhcpIpName"` +} + type ModifyDhcpIpAttributeRequest struct { *tchttp.BaseRequest @@ -13143,13 +19781,15 @@ func (r *ModifyDhcpIpAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyDhcpIpAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyDhcpIpAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyDhcpIpAttributeResponseParams `json:"Response"` } func (r *ModifyDhcpIpAttributeResponse) ToJsonString() string { @@ -13163,6 +19803,21 @@ func (r *ModifyDhcpIpAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyDirectConnectGatewayAttributeRequestParams struct { + // 专线网关唯一`ID`,形如:`dcg-9o233uri`。 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 专线网关名称,可任意命名,但不得超过60个字符。 + DirectConnectGatewayName *string `json:"DirectConnectGatewayName,omitempty" name:"DirectConnectGatewayName"` + + // 云联网路由学习类型,可选值:`BGP`(自动学习)、`STATIC`(静态,即用户配置)。只有云联网类型专线网关且开启了BGP功能才支持修改`CcnRouteType`。 + CcnRouteType *string `json:"CcnRouteType,omitempty" name:"CcnRouteType"` + + // 云联网路由发布模式,可选值:`standard`(标准模式)、`exquisite`(精细模式)。只有云联网类型专线网关才支持修改`ModeType`。 + ModeType *string `json:"ModeType,omitempty" name:"ModeType"` +} + type ModifyDirectConnectGatewayAttributeRequest struct { *tchttp.BaseRequest @@ -13201,13 +19856,15 @@ func (r *ModifyDirectConnectGatewayAttributeRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyDirectConnectGatewayAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyDirectConnectGatewayAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyDirectConnectGatewayAttributeResponseParams `json:"Response"` } func (r *ModifyDirectConnectGatewayAttributeResponse) ToJsonString() string { @@ -13221,19 +19878,34 @@ func (r *ModifyDirectConnectGatewayAttributeResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyFlowLogAttributeRequestParams struct { + // 流日志唯一ID。 + FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` + + // 私用网络ID或者统一ID,建议使用统一ID,修改云联网流日志属性时可不填,其他流日志类型必填。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 流日志实例名字。 + FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` + + // 流日志实例描述。 + FlowLogDescription *string `json:"FlowLogDescription,omitempty" name:"FlowLogDescription"` +} + type ModifyFlowLogAttributeRequest struct { *tchttp.BaseRequest - // 流日志唯一ID + // 流日志唯一ID。 FlowLogId *string `json:"FlowLogId,omitempty" name:"FlowLogId"` // 私用网络ID或者统一ID,建议使用统一ID,修改云联网流日志属性时可不填,其他流日志类型必填。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // 流日志实例名字 + // 流日志实例名字。 FlowLogName *string `json:"FlowLogName,omitempty" name:"FlowLogName"` - // 流日志实例描述 + // 流日志实例描述。 FlowLogDescription *string `json:"FlowLogDescription,omitempty" name:"FlowLogDescription"` } @@ -13259,13 +19931,15 @@ func (r *ModifyFlowLogAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyFlowLogAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyFlowLogAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyFlowLogAttributeResponseParams `json:"Response"` } func (r *ModifyFlowLogAttributeResponse) ToJsonString() string { @@ -13273,10 +19947,25 @@ func (r *ModifyFlowLogAttributeResponse) ToJsonString() string { return string(b) } -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyFlowLogAttributeResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyFlowLogAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyGatewayFlowQosRequestParams struct { + // 网关实例ID,目前我们支持的网关实例类型有, + // 专线网关实例ID,形如,`dcg-ltjahce6`; + // Nat网关实例ID,形如,`nat-ltjahce6`; + // VPN网关实例ID,形如,`vpn-ltjahce6`。 + GatewayId *string `json:"GatewayId,omitempty" name:"GatewayId"` + + // 流控带宽值。取值大于0,表示限流到指定的Mbps;取值等于0,表示完全限流;取值为-1,不限流。 + Bandwidth *int64 `json:"Bandwidth,omitempty" name:"Bandwidth"` + + // 限流的云服务器内网IP。 + IpAddresses []*string `json:"IpAddresses,omitempty" name:"IpAddresses"` } type ModifyGatewayFlowQosRequest struct { @@ -13316,13 +20005,15 @@ func (r *ModifyGatewayFlowQosRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyGatewayFlowQosResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyGatewayFlowQosResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyGatewayFlowQosResponseParams `json:"Response"` } func (r *ModifyGatewayFlowQosResponse) ToJsonString() string { @@ -13336,6 +20027,15 @@ func (r *ModifyGatewayFlowQosResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyHaVipAttributeRequestParams struct { + // `HAVIP`唯一`ID`,形如:`havip-9o233uri`。 + HaVipId *string `json:"HaVipId,omitempty" name:"HaVipId"` + + // `HAVIP`名称,可任意命名,但不得超过60个字符。 + HaVipName *string `json:"HaVipName,omitempty" name:"HaVipName"` +} + type ModifyHaVipAttributeRequest struct { *tchttp.BaseRequest @@ -13366,13 +20066,15 @@ func (r *ModifyHaVipAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyHaVipAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyHaVipAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyHaVipAttributeResponseParams `json:"Response"` } func (r *ModifyHaVipAttributeResponse) ToJsonString() string { @@ -13386,6 +20088,18 @@ func (r *ModifyHaVipAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIp6AddressesBandwidthRequestParams struct { + // 修改的目标带宽,单位Mbps + InternetMaxBandwidthOut *int64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // IPV6地址。Ip6Addresses和Ip6AddressId必须且只能传一个 + Ip6Addresses []*string `json:"Ip6Addresses,omitempty" name:"Ip6Addresses"` + + // IPV6地址对应的唯一ID,形如eip-xxxxxxxx。Ip6Addresses和Ip6AddressId必须且只能传一个 + Ip6AddressIds []*string `json:"Ip6AddressIds,omitempty" name:"Ip6AddressIds"` +} + type ModifyIp6AddressesBandwidthRequest struct { *tchttp.BaseRequest @@ -13420,16 +20134,18 @@ func (r *ModifyIp6AddressesBandwidthRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ModifyIp6AddressesBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyIp6AddressesBandwidthResponseParams struct { + // 任务ID + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 任务ID - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyIp6AddressesBandwidthResponse struct { + *tchttp.BaseResponse + Response *ModifyIp6AddressesBandwidthResponseParams `json:"Response"` } func (r *ModifyIp6AddressesBandwidthResponse) ToJsonString() string { @@ -13443,6 +20159,24 @@ func (r *ModifyIp6AddressesBandwidthResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIp6RuleRequestParams struct { + // IPV6转换实例唯一ID,形如ip6-xxxxxxxx + Ip6TranslatorId *string `json:"Ip6TranslatorId,omitempty" name:"Ip6TranslatorId"` + + // IPV6转换规则唯一ID,形如rule6-xxxxxxxx + Ip6RuleId *string `json:"Ip6RuleId,omitempty" name:"Ip6RuleId"` + + // IPV6转换规则修改后的名称 + Ip6RuleName *string `json:"Ip6RuleName,omitempty" name:"Ip6RuleName"` + + // IPV6转换规则修改后的IPV4地址 + Vip *string `json:"Vip,omitempty" name:"Vip"` + + // IPV6转换规则修改后的IPV4端口号 + Vport *int64 `json:"Vport,omitempty" name:"Vport"` +} + type ModifyIp6RuleRequest struct { *tchttp.BaseRequest @@ -13485,13 +20219,15 @@ func (r *ModifyIp6RuleRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIp6RuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyIp6RuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyIp6RuleResponseParams `json:"Response"` } func (r *ModifyIp6RuleResponse) ToJsonString() string { @@ -13505,6 +20241,15 @@ func (r *ModifyIp6RuleResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIp6TranslatorRequestParams struct { + // IPV6转换实例唯一ID,形如ip6-xxxxxxxxx + Ip6TranslatorId *string `json:"Ip6TranslatorId,omitempty" name:"Ip6TranslatorId"` + + // IPV6转换实例修改名称 + Ip6TranslatorName *string `json:"Ip6TranslatorName,omitempty" name:"Ip6TranslatorName"` +} + type ModifyIp6TranslatorRequest struct { *tchttp.BaseRequest @@ -13535,13 +20280,15 @@ func (r *ModifyIp6TranslatorRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIp6TranslatorResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyIp6TranslatorResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyIp6TranslatorResponseParams `json:"Response"` } func (r *ModifyIp6TranslatorResponse) ToJsonString() string { @@ -13555,13 +20302,22 @@ func (r *ModifyIp6TranslatorResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIpv6AddressesAttributeRequestParams struct { + // 弹性网卡实例`ID`,形如:`eni-m6dyj72l`。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的内网IPv6地址信息。 + Ipv6Addresses []*Ipv6Address `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` +} + type ModifyIpv6AddressesAttributeRequest struct { *tchttp.BaseRequest // 弹性网卡实例`ID`,形如:`eni-m6dyj72l`。 NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` - // 指定的内网IPv6`地址信息。 + // 指定的内网IPv6地址信息。 Ipv6Addresses []*Ipv6Address `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` } @@ -13585,13 +20341,15 @@ func (r *ModifyIpv6AddressesAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyIpv6AddressesAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyIpv6AddressesAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyIpv6AddressesAttributeResponseParams `json:"Response"` } func (r *ModifyIpv6AddressesAttributeResponse) ToJsonString() string { @@ -13605,19 +20363,34 @@ func (r *ModifyIpv6AddressesAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLocalGatewayRequestParams struct { + // 本地网关名称。 + LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` + + // CDC实例ID。 + CdcId *string `json:"CdcId,omitempty" name:"CdcId"` + + // 本地网关实例ID。 + LocalGatewayId *string `json:"LocalGatewayId,omitempty" name:"LocalGatewayId"` + + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` +} + type ModifyLocalGatewayRequest struct { *tchttp.BaseRequest - // 本地网关名称 + // 本地网关名称。 LocalGatewayName *string `json:"LocalGatewayName,omitempty" name:"LocalGatewayName"` - // CDC实例ID + // CDC实例ID。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` - // 本地网关实例ID + // 本地网关实例ID。 LocalGatewayId *string `json:"LocalGatewayId,omitempty" name:"LocalGatewayId"` - // VPC实例ID + // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` } @@ -13643,13 +20416,15 @@ func (r *ModifyLocalGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyLocalGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyLocalGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyLocalGatewayResponseParams `json:"Response"` } func (r *ModifyLocalGatewayResponse) ToJsonString() string { @@ -13663,6 +20438,24 @@ func (r *ModifyLocalGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewayAttributeRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的名称,形如:`test_nat`。 + NatGatewayName *string `json:"NatGatewayName,omitempty" name:"NatGatewayName"` + + // NAT网关最大外网出带宽(单位:Mbps)。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 是否修改NAT网关绑定的安全组。 + ModifySecurityGroup *bool `json:"ModifySecurityGroup,omitempty" name:"ModifySecurityGroup"` + + // NAT网关绑定的安全组列表,最终状态,空列表表示删除所有安全组,形如: `['sg-1n232323', 'sg-o4242424']` + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type ModifyNatGatewayAttributeRequest struct { *tchttp.BaseRequest @@ -13705,13 +20498,15 @@ func (r *ModifyNatGatewayAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewayAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNatGatewayAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNatGatewayAttributeResponseParams `json:"Response"` } func (r *ModifyNatGatewayAttributeResponse) ToJsonString() string { @@ -13725,6 +20520,18 @@ func (r *ModifyNatGatewayAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewayDestinationIpPortTranslationNatRuleRequestParams struct { + // NAT网关的ID,形如:`nat-df45454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 源NAT网关的端口转换规则。 + SourceNatRule *DestinationIpPortTranslationNatRule `json:"SourceNatRule,omitempty" name:"SourceNatRule"` + + // 目的NAT网关的端口转换规则。 + DestinationNatRule *DestinationIpPortTranslationNatRule `json:"DestinationNatRule,omitempty" name:"DestinationNatRule"` +} + type ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest struct { *tchttp.BaseRequest @@ -13759,13 +20566,15 @@ func (r *ModifyNatGatewayDestinationIpPortTranslationNatRuleRequest) FromJsonStr return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewayDestinationIpPortTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNatGatewayDestinationIpPortTranslationNatRuleResponseParams `json:"Response"` } func (r *ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse) ToJsonString() string { @@ -13779,6 +20588,15 @@ func (r *ModifyNatGatewayDestinationIpPortTranslationNatRuleResponse) FromJsonSt return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewaySourceIpTranslationNatRuleRequestParams struct { + // NAT网关的ID,形如:`nat-df453454`。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关的SNAT转换规则。 + SourceIpTranslationNatRule *SourceIpTranslationNatRule `json:"SourceIpTranslationNatRule,omitempty" name:"SourceIpTranslationNatRule"` +} + type ModifyNatGatewaySourceIpTranslationNatRuleRequest struct { *tchttp.BaseRequest @@ -13809,13 +20627,15 @@ func (r *ModifyNatGatewaySourceIpTranslationNatRuleRequest) FromJsonString(s str return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNatGatewaySourceIpTranslationNatRuleResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNatGatewaySourceIpTranslationNatRuleResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNatGatewaySourceIpTranslationNatRuleResponseParams `json:"Response"` } func (r *ModifyNatGatewaySourceIpTranslationNatRuleResponse) ToJsonString() string { @@ -13829,6 +20649,41 @@ func (r *ModifyNatGatewaySourceIpTranslationNatRuleResponse) FromJsonString(s st return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetDetectRequestParams struct { + // 网络探测实例`ID`。形如:`netd-12345678` + NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` + + // 网络探测名称,最大长度不能超过60个字节。 + NetDetectName *string `json:"NetDetectName,omitempty" name:"NetDetectName"` + + // 探测目的IPv4地址数组,最多两个。 + DetectDestinationIp []*string `json:"DetectDestinationIp,omitempty" name:"DetectDestinationIp"` + + // 下一跳类型,目前我们支持的类型有: + // VPN:VPN网关; + // DIRECTCONNECT:专线网关; + // PEERCONNECTION:对等连接; + // NAT:NAT网关; + // NORMAL_CVM:普通云服务器; + // CCN:云联网网关; + // NONEXTHOP:无下一跳; + NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` + + // 下一跳目的网关,取值与“下一跳类型”相关: + // 下一跳类型为VPN,取值VPN网关ID,形如:vpngw-12345678; + // 下一跳类型为DIRECTCONNECT,取值专线网关ID,形如:dcg-12345678; + // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; + // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; + // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; + NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` + + // 网络探测描述。 + NetDetectDescription *string `json:"NetDetectDescription,omitempty" name:"NetDetectDescription"` +} + type ModifyNetDetectRequest struct { *tchttp.BaseRequest @@ -13847,6 +20702,8 @@ type ModifyNetDetectRequest struct { // PEERCONNECTION:对等连接; // NAT:NAT网关; // NORMAL_CVM:普通云服务器; + // CCN:云联网网关; + // NONEXTHOP:无下一跳; NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` // 下一跳目的网关,取值与“下一跳类型”相关: @@ -13855,6 +20712,8 @@ type ModifyNetDetectRequest struct { // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` // 网络探测描述。 @@ -13885,13 +20744,15 @@ func (r *ModifyNetDetectRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetDetectResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNetDetectResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNetDetectResponseParams `json:"Response"` } func (r *ModifyNetDetectResponse) ToJsonString() string { @@ -13905,6 +20766,15 @@ func (r *ModifyNetDetectResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkAclAttributeRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络ACL名称,最大长度不能超过60个字节。 + NetworkAclName *string `json:"NetworkAclName,omitempty" name:"NetworkAclName"` +} + type ModifyNetworkAclAttributeRequest struct { *tchttp.BaseRequest @@ -13935,13 +20805,15 @@ func (r *ModifyNetworkAclAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkAclAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNetworkAclAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNetworkAclAttributeResponseParams `json:"Response"` } func (r *ModifyNetworkAclAttributeResponse) ToJsonString() string { @@ -13955,14 +20827,29 @@ func (r *ModifyNetworkAclAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkAclEntriesRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络ACL规则集。NetworkAclEntrySet和NetworkAclQuintupleSet只能输入一个。 + NetworkAclEntrySet *NetworkAclEntrySet `json:"NetworkAclEntrySet,omitempty" name:"NetworkAclEntrySet"` + + // 网络ACL五元组规则集。NetworkAclEntrySet和NetworkAclQuintupleSet只能输入一个。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + type ModifyNetworkAclEntriesRequest struct { *tchttp.BaseRequest // 网络ACL实例ID。例如:acl-12345678。 NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` - // 网络ACL规则集。 + // 网络ACL规则集。NetworkAclEntrySet和NetworkAclQuintupleSet只能输入一个。 NetworkAclEntrySet *NetworkAclEntrySet `json:"NetworkAclEntrySet,omitempty" name:"NetworkAclEntrySet"` + + // 网络ACL五元组规则集。NetworkAclEntrySet和NetworkAclQuintupleSet只能输入一个。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` } func (r *ModifyNetworkAclEntriesRequest) ToJsonString() string { @@ -13979,19 +20866,22 @@ func (r *ModifyNetworkAclEntriesRequest) FromJsonString(s string) error { } delete(f, "NetworkAclId") delete(f, "NetworkAclEntrySet") + delete(f, "NetworkAclQuintupleSet") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNetworkAclEntriesRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkAclEntriesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNetworkAclEntriesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNetworkAclEntriesResponseParams `json:"Response"` } func (r *ModifyNetworkAclEntriesResponse) ToJsonString() string { @@ -13999,10 +20889,89 @@ func (r *ModifyNetworkAclEntriesResponse) ToJsonString() string { return string(b) } -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *ModifyNetworkAclEntriesResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyNetworkAclEntriesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyNetworkAclQuintupleEntriesRequestParams struct { + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +type ModifyNetworkAclQuintupleEntriesRequest struct { + *tchttp.BaseRequest + + // 网络ACL实例ID。例如:acl-12345678。 + NetworkAclId *string `json:"NetworkAclId,omitempty" name:"NetworkAclId"` + + // 网络五元组ACL规则集。 + NetworkAclQuintupleSet *NetworkAclQuintupleEntries `json:"NetworkAclQuintupleSet,omitempty" name:"NetworkAclQuintupleSet"` +} + +func (r *ModifyNetworkAclQuintupleEntriesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyNetworkAclQuintupleEntriesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "NetworkAclId") + delete(f, "NetworkAclQuintupleSet") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNetworkAclQuintupleEntriesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyNetworkAclQuintupleEntriesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyNetworkAclQuintupleEntriesResponse struct { + *tchttp.BaseResponse + Response *ModifyNetworkAclQuintupleEntriesResponseParams `json:"Response"` +} + +func (r *ModifyNetworkAclQuintupleEntriesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyNetworkAclQuintupleEntriesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyNetworkInterfaceAttributeRequestParams struct { + // 弹性网卡实例ID,例如:eni-pxir56ns。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 弹性网卡名称,最大长度不能超过60个字节。 + NetworkInterfaceName *string `json:"NetworkInterfaceName,omitempty" name:"NetworkInterfaceName"` + + // 弹性网卡描述,可任意命名,但不得超过60个字符。 + NetworkInterfaceDescription *string `json:"NetworkInterfaceDescription,omitempty" name:"NetworkInterfaceDescription"` + + // 指定绑定的安全组,例如:['sg-1dd51d']。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 网卡trunking模式设置,Enable-开启,Disable--关闭,默认关闭。 + TrunkingFlag *string `json:"TrunkingFlag,omitempty" name:"TrunkingFlag"` } type ModifyNetworkInterfaceAttributeRequest struct { @@ -14019,6 +20988,9 @@ type ModifyNetworkInterfaceAttributeRequest struct { // 指定绑定的安全组,例如:['sg-1dd51d']。 SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` + + // 网卡trunking模式设置,Enable-开启,Disable--关闭,默认关闭。 + TrunkingFlag *string `json:"TrunkingFlag,omitempty" name:"TrunkingFlag"` } func (r *ModifyNetworkInterfaceAttributeRequest) ToJsonString() string { @@ -14037,19 +21009,22 @@ func (r *ModifyNetworkInterfaceAttributeRequest) FromJsonString(s string) error delete(f, "NetworkInterfaceName") delete(f, "NetworkInterfaceDescription") delete(f, "SecurityGroupIds") + delete(f, "TrunkingFlag") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNetworkInterfaceAttributeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkInterfaceAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNetworkInterfaceAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNetworkInterfaceAttributeResponseParams `json:"Response"` } func (r *ModifyNetworkInterfaceAttributeResponse) ToJsonString() string { @@ -14063,14 +21038,29 @@ func (r *ModifyNetworkInterfaceAttributeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkInterfaceQosRequestParams struct { + // 弹性网卡ID,支持批量修改。 + NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` + + // 服务质量,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + + // DirectSend端口范围最大值。 + DirectSendMaxPort *uint64 `json:"DirectSendMaxPort,omitempty" name:"DirectSendMaxPort"` +} + type ModifyNetworkInterfaceQosRequest struct { *tchttp.BaseRequest // 弹性网卡ID,支持批量修改。 NetworkInterfaceIds []*string `json:"NetworkInterfaceIds,omitempty" name:"NetworkInterfaceIds"` - // 服务质量,可选值:AU、AG、PT,分别代表金、银、白金三个等级。 + // 服务质量,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` + + // DirectSend端口范围最大值。 + DirectSendMaxPort *uint64 `json:"DirectSendMaxPort,omitempty" name:"DirectSendMaxPort"` } func (r *ModifyNetworkInterfaceQosRequest) ToJsonString() string { @@ -14087,19 +21077,22 @@ func (r *ModifyNetworkInterfaceQosRequest) FromJsonString(s string) error { } delete(f, "NetworkInterfaceIds") delete(f, "QosLevel") + delete(f, "DirectSendMaxPort") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyNetworkInterfaceQosRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyNetworkInterfaceQosResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyNetworkInterfaceQosResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyNetworkInterfaceQosResponseParams `json:"Response"` } func (r *ModifyNetworkInterfaceQosResponse) ToJsonString() string { @@ -14113,6 +21106,15 @@ func (r *ModifyNetworkInterfaceQosResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyPrivateIpAddressesAttributeRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的内网IP信息。 + PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` +} + type ModifyPrivateIpAddressesAttributeRequest struct { *tchttp.BaseRequest @@ -14143,13 +21145,15 @@ func (r *ModifyPrivateIpAddressesAttributeRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyPrivateIpAddressesAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyPrivateIpAddressesAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyPrivateIpAddressesAttributeResponseParams `json:"Response"` } func (r *ModifyPrivateIpAddressesAttributeResponse) ToJsonString() string { @@ -14163,6 +21167,15 @@ func (r *ModifyPrivateIpAddressesAttributeResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyRouteTableAttributeRequestParams struct { + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由表名称。 + RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` +} + type ModifyRouteTableAttributeRequest struct { *tchttp.BaseRequest @@ -14193,13 +21206,15 @@ func (r *ModifyRouteTableAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyRouteTableAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyRouteTableAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyRouteTableAttributeResponseParams `json:"Response"` } func (r *ModifyRouteTableAttributeResponse) ToJsonString() string { @@ -14213,6 +21228,18 @@ func (r *ModifyRouteTableAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySecurityGroupAttributeRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组名称,可任意命名,但不得超过60个字符。 + GroupName *string `json:"GroupName,omitempty" name:"GroupName"` + + // 安全组备注,最多100个字符。 + GroupDescription *string `json:"GroupDescription,omitempty" name:"GroupDescription"` +} + type ModifySecurityGroupAttributeRequest struct { *tchttp.BaseRequest @@ -14247,13 +21274,15 @@ func (r *ModifySecurityGroupAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySecurityGroupAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifySecurityGroupAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifySecurityGroupAttributeResponseParams `json:"Response"` } func (r *ModifySecurityGroupAttributeResponse) ToJsonString() string { @@ -14267,6 +21296,18 @@ func (r *ModifySecurityGroupAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySecurityGroupPoliciesRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合。 SecurityGroupPolicySet对象必须同时指定新的出(Egress)入(Ingress)站规则。 SecurityGroupPolicy对象不支持自定义索引(PolicyIndex)。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` + + // 排序安全组标识,默认值为False。当SortPolicys为False时,不改变安全组规则排序;当SortPolicys为True时,系统将严格按照SecurityGroupPolicySet参数传入的安全组规则及顺序进行重置,考虑到人为输入参数可能存在遗漏风险,建议通过控制台对安全组规则进行排序。 + SortPolicys *bool `json:"SortPolicys,omitempty" name:"SortPolicys"` +} + type ModifySecurityGroupPoliciesRequest struct { *tchttp.BaseRequest @@ -14301,13 +21342,15 @@ func (r *ModifySecurityGroupPoliciesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySecurityGroupPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifySecurityGroupPoliciesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifySecurityGroupPoliciesResponseParams `json:"Response"` } func (r *ModifySecurityGroupPoliciesResponse) ToJsonString() string { @@ -14321,6 +21364,21 @@ func (r *ModifySecurityGroupPoliciesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyServiceTemplateAttributeRequestParams struct { + // 协议端口模板实例ID,例如:ppm-529nwwj8。 + ServiceTemplateId *string `json:"ServiceTemplateId,omitempty" name:"ServiceTemplateId"` + + // 协议端口模板名称。 + ServiceTemplateName *string `json:"ServiceTemplateName,omitempty" name:"ServiceTemplateName"` + + // 支持单个端口、多个端口、连续端口及所有端口,协议支持:TCP、UDP、ICMP、GRE 协议。 + Services []*string `json:"Services,omitempty" name:"Services"` + + // 支持添加备注的协议端口信息,支持单个端口、多个端口、连续端口及所有端口,协议支持:TCP、UDP、ICMP、GRE 协议。 + ServicesExtra []*ServicesInfo `json:"ServicesExtra,omitempty" name:"ServicesExtra"` +} + type ModifyServiceTemplateAttributeRequest struct { *tchttp.BaseRequest @@ -14359,13 +21417,15 @@ func (r *ModifyServiceTemplateAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyServiceTemplateAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyServiceTemplateAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyServiceTemplateAttributeResponseParams `json:"Response"` } func (r *ModifyServiceTemplateAttributeResponse) ToJsonString() string { @@ -14379,6 +21439,18 @@ func (r *ModifyServiceTemplateAttributeResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyServiceTemplateGroupAttributeRequestParams struct { + // 协议端口模板集合实例ID,例如:ppmg-ei8hfd9a。 + ServiceTemplateGroupId *string `json:"ServiceTemplateGroupId,omitempty" name:"ServiceTemplateGroupId"` + + // 协议端口模板集合名称。 + ServiceTemplateGroupName *string `json:"ServiceTemplateGroupName,omitempty" name:"ServiceTemplateGroupName"` + + // 协议端口模板实例ID,例如:ppm-4dw6agho。 + ServiceTemplateIds []*string `json:"ServiceTemplateIds,omitempty" name:"ServiceTemplateIds"` +} + type ModifyServiceTemplateGroupAttributeRequest struct { *tchttp.BaseRequest @@ -14413,13 +21485,15 @@ func (r *ModifyServiceTemplateGroupAttributeRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyServiceTemplateGroupAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyServiceTemplateGroupAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyServiceTemplateGroupAttributeResponseParams `json:"Response"` } func (r *ModifyServiceTemplateGroupAttributeResponse) ToJsonString() string { @@ -14433,6 +21507,72 @@ func (r *ModifyServiceTemplateGroupAttributeResponse) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySnapshotPoliciesRequestParams struct { + // 快照策略修改信息。 + SnapshotPoliciesInfo []*BatchModifySnapshotPolicy `json:"SnapshotPoliciesInfo,omitempty" name:"SnapshotPoliciesInfo"` +} + +type ModifySnapshotPoliciesRequest struct { + *tchttp.BaseRequest + + // 快照策略修改信息。 + SnapshotPoliciesInfo []*BatchModifySnapshotPolicy `json:"SnapshotPoliciesInfo,omitempty" name:"SnapshotPoliciesInfo"` +} + +func (r *ModifySnapshotPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifySnapshotPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPoliciesInfo") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifySnapshotPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifySnapshotPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifySnapshotPoliciesResponse struct { + *tchttp.BaseResponse + Response *ModifySnapshotPoliciesResponseParams `json:"Response"` +} + +func (r *ModifySnapshotPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifySnapshotPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifySubnetAttributeRequestParams struct { + // 子网实例ID。形如:subnet-pxir56ns。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 子网名称,最大长度不能超过60个字节。 + SubnetName *string `json:"SubnetName,omitempty" name:"SubnetName"` + + // 子网是否开启广播。 + EnableBroadcast *string `json:"EnableBroadcast,omitempty" name:"EnableBroadcast"` +} + type ModifySubnetAttributeRequest struct { *tchttp.BaseRequest @@ -14467,13 +21607,15 @@ func (r *ModifySubnetAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifySubnetAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifySubnetAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifySubnetAttributeResponseParams `json:"Response"` } func (r *ModifySubnetAttributeResponse) ToJsonString() string { @@ -14487,6 +21629,18 @@ func (r *ModifySubnetAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyTemplateMemberRequestParams struct { + // 参数模板实例ID,支持IP地址、协议端口、IP地址组、协议端口组四种参数模板的实例ID。 + TemplateId *string `json:"TemplateId,omitempty" name:"TemplateId"` + + // 需要修改的参数模板成员信息,支持IP地址、协议端口、IP地址组、协议端口组四种类型,类型需要与TemplateId参数类型一致,修改顺序与TemplateMember参数顺序一一对应,入参长度需要与TemplateMember参数保持一致。 + OriginalTemplateMember []*MemberInfo `json:"OriginalTemplateMember,omitempty" name:"OriginalTemplateMember"` + + // 新的参数模板成员信息,支持IP地址、协议端口、IP地址组、协议端口组四种类型,类型需要与TemplateId参数类型一致,修改顺序与OriginalTemplateMember参数顺序一一对应,入参长度需要与OriginalTemplateMember参数保持一致。 + TemplateMember []*MemberInfo `json:"TemplateMember,omitempty" name:"TemplateMember"` +} + type ModifyTemplateMemberRequest struct { *tchttp.BaseRequest @@ -14521,13 +21675,15 @@ func (r *ModifyTemplateMemberRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyTemplateMemberResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyTemplateMemberResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyTemplateMemberResponseParams `json:"Response"` } func (r *ModifyTemplateMemberResponse) ToJsonString() string { @@ -14541,6 +21697,27 @@ func (r *ModifyTemplateMemberResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcAttributeRequestParams struct { + // VPC实例ID。形如:vpc-f49l6u0z。每次请求的实例的上限为100。参数不支持同时指定VpcIds和Filters。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 私有网络名称,可任意命名,但不得超过60个字符。 + VpcName *string `json:"VpcName,omitempty" name:"VpcName"` + + // 是否开启组播。true: 开启, false: 关闭。 + EnableMulticast *string `json:"EnableMulticast,omitempty" name:"EnableMulticast"` + + // DNS地址,最多支持4个,第1个默认为主,其余为备。 + DnsServers []*string `json:"DnsServers,omitempty" name:"DnsServers"` + + // 域名。 + DomainName *string `json:"DomainName,omitempty" name:"DomainName"` + + // 发布cdc 子网到云联网的开关。true: 发布, false: 不发布。 + EnableCdcPublish *bool `json:"EnableCdcPublish,omitempty" name:"EnableCdcPublish"` +} + type ModifyVpcAttributeRequest struct { *tchttp.BaseRequest @@ -14553,11 +21730,14 @@ type ModifyVpcAttributeRequest struct { // 是否开启组播。true: 开启, false: 关闭。 EnableMulticast *string `json:"EnableMulticast,omitempty" name:"EnableMulticast"` - // DNS地址,最多支持4个,第1个默认为主,其余为备 + // DNS地址,最多支持4个,第1个默认为主,其余为备。 DnsServers []*string `json:"DnsServers,omitempty" name:"DnsServers"` - // 域名 + // 域名。 DomainName *string `json:"DomainName,omitempty" name:"DomainName"` + + // 发布cdc 子网到云联网的开关。true: 发布, false: 不发布。 + EnableCdcPublish *bool `json:"EnableCdcPublish,omitempty" name:"EnableCdcPublish"` } func (r *ModifyVpcAttributeRequest) ToJsonString() string { @@ -14577,19 +21757,22 @@ func (r *ModifyVpcAttributeRequest) FromJsonString(s string) error { delete(f, "EnableMulticast") delete(f, "DnsServers") delete(f, "DomainName") + delete(f, "EnableCdcPublish") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyVpcAttributeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpcAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpcAttributeResponseParams `json:"Response"` } func (r *ModifyVpcAttributeResponse) ToJsonString() string { @@ -14603,6 +21786,18 @@ func (r *ModifyVpcAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcEndPointAttributeRequestParams struct { + // 终端节点ID。 + EndPointId *string `json:"EndPointId,omitempty" name:"EndPointId"` + + // 终端节点名称。 + EndPointName *string `json:"EndPointName,omitempty" name:"EndPointName"` + + // 安全组ID列表。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds"` +} + type ModifyVpcEndPointAttributeRequest struct { *tchttp.BaseRequest @@ -14637,13 +21832,15 @@ func (r *ModifyVpcEndPointAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcEndPointAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpcEndPointAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpcEndPointAttributeResponseParams `json:"Response"` } func (r *ModifyVpcEndPointAttributeResponse) ToJsonString() string { @@ -14657,6 +21854,24 @@ func (r *ModifyVpcEndPointAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcEndPointServiceAttributeRequestParams struct { + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` + + // VPCID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 终端节点服务名称。 + EndPointServiceName *string `json:"EndPointServiceName,omitempty" name:"EndPointServiceName"` + + // 是否自动接受终端节点的连接请求。
      • true:自动接受
      • false:不自动接受
      + AutoAcceptFlag *bool `json:"AutoAcceptFlag,omitempty" name:"AutoAcceptFlag"` + + // 后端服务的ID,比如lb-xxx。 + ServiceInstanceId *string `json:"ServiceInstanceId,omitempty" name:"ServiceInstanceId"` +} + type ModifyVpcEndPointServiceAttributeRequest struct { *tchttp.BaseRequest @@ -14699,13 +21914,15 @@ func (r *ModifyVpcEndPointServiceAttributeRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcEndPointServiceAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpcEndPointServiceAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpcEndPointServiceAttributeResponseParams `json:"Response"` } func (r *ModifyVpcEndPointServiceAttributeResponse) ToJsonString() string { @@ -14719,6 +21936,18 @@ func (r *ModifyVpcEndPointServiceAttributeResponse) FromJsonString(s string) err return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpcEndPointServiceWhiteListRequestParams struct { + // 用户UIN。 + UserUin *string `json:"UserUin,omitempty" name:"UserUin"` + + // 终端节点服务ID。 + EndPointServiceId *string `json:"EndPointServiceId,omitempty" name:"EndPointServiceId"` + + // 白名单描述信息。 + Description *string `json:"Description,omitempty" name:"Description"` +} + type ModifyVpcEndPointServiceWhiteListRequest struct { *tchttp.BaseRequest @@ -14753,26 +21982,122 @@ func (r *ModifyVpcEndPointServiceWhiteListRequest) FromJsonString(s string) erro return json.Unmarshal([]byte(s), &r) } -type ModifyVpcEndPointServiceWhiteListResponse struct { +// Predefined struct for user +type ModifyVpcEndPointServiceWhiteListResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyVpcEndPointServiceWhiteListResponse struct { + *tchttp.BaseResponse + Response *ModifyVpcEndPointServiceWhiteListResponseParams `json:"Response"` +} + +func (r *ModifyVpcEndPointServiceWhiteListResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyVpcEndPointServiceWhiteListResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyVpcPeeringConnectionRequestParams struct { +} + +type ModifyVpcPeeringConnectionRequest struct { + *tchttp.BaseRequest +} + +func (r *ModifyVpcPeeringConnectionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ModifyVpcPeeringConnectionRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyVpcPeeringConnectionRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ModifyVpcPeeringConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ModifyVpcPeeringConnectionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpcPeeringConnectionResponseParams `json:"Response"` } -func (r *ModifyVpcEndPointServiceWhiteListResponse) ToJsonString() string { +func (r *ModifyVpcPeeringConnectionResponse) ToJsonString() string { b, _ := json.Marshal(r) return string(b) } // FromJsonString It is highly **NOT** recommended to use this function // because it has no param check, nor strict type check -func (r *ModifyVpcEndPointServiceWhiteListResponse) FromJsonString(s string) error { +func (r *ModifyVpcPeeringConnectionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnConnectionAttributeRequestParams struct { + // VPN通道实例ID。形如:vpnx-f49l6u0z。 + VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` + + // VPN通道名称,可任意命名,但不得超过60个字符。 + VpnConnectionName *string `json:"VpnConnectionName,omitempty" name:"VpnConnectionName"` + + // 预共享密钥。 + PreShareKey *string `json:"PreShareKey,omitempty" name:"PreShareKey"` + + // SPD策略组,例如:{"10.0.0.5/24":["172.123.10.5/16"]},10.0.0.5/24是vpc内网段,172.123.10.5/16是IDC网段。用户指定VPC内哪些网段可以和您IDC中哪些网段通信。 + SecurityPolicyDatabases []*SecurityPolicyDatabase `json:"SecurityPolicyDatabases,omitempty" name:"SecurityPolicyDatabases"` + + // IKE配置(Internet Key Exchange,因特网密钥交换),IKE具有一套自我保护机制,用户配置网络安全协议。 + IKEOptionsSpecification *IKEOptionsSpecification `json:"IKEOptionsSpecification,omitempty" name:"IKEOptionsSpecification"` + + // IPSec配置,腾讯云提供IPSec安全会话设置。 + IPSECOptionsSpecification *IPSECOptionsSpecification `json:"IPSECOptionsSpecification,omitempty" name:"IPSECOptionsSpecification"` + + // 是否启用通道健康检查,默认为False。 + EnableHealthCheck *bool `json:"EnableHealthCheck,omitempty" name:"EnableHealthCheck"` + + // 本端通道探测IP。 + HealthCheckLocalIp *string `json:"HealthCheckLocalIp,omitempty" name:"HealthCheckLocalIp"` + + // 对端通道探测IP。 + HealthCheckRemoteIp *string `json:"HealthCheckRemoteIp,omitempty" name:"HealthCheckRemoteIp"` + + // 协商类型,默认为active(主动协商)。可选值:active(主动协商),passive(被动协商),flowTrigger(流量协商) + NegotiationType *string `json:"NegotiationType,omitempty" name:"NegotiationType"` + + // DPD探测开关。默认为0,表示关闭DPD探测。可选值:0(关闭),1(开启) + DpdEnable *int64 `json:"DpdEnable,omitempty" name:"DpdEnable"` + + // DPD超时时间。即探测确认对端不存在需要的时间。dpdEnable为1(开启)时有效。默认30,单位为秒 + DpdTimeout *string `json:"DpdTimeout,omitempty" name:"DpdTimeout"` + + // DPD超时后的动作。默认为clear。dpdEnable为1(开启)时有效。可取值为clear(断开)和restart(重试) + DpdAction *string `json:"DpdAction,omitempty" name:"DpdAction"` + + // 对端网关ID,4.0及以上网关下的通道支持更新。 + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` +} + type ModifyVpnConnectionAttributeRequest struct { *tchttp.BaseRequest @@ -14785,7 +22110,7 @@ type ModifyVpnConnectionAttributeRequest struct { // 预共享密钥。 PreShareKey *string `json:"PreShareKey,omitempty" name:"PreShareKey"` - // SPD策略组,例如:{"10.0.0.5/24":["172.123.10.5/16"]},10.0.0.5/24是vpc内网段172.123.10.5/16是IDC网段。用户指定VPC内哪些网段可以和您IDC中哪些网段通信。 + // SPD策略组,例如:{"10.0.0.5/24":["172.123.10.5/16"]},10.0.0.5/24是vpc内网段,172.123.10.5/16是IDC网段。用户指定VPC内哪些网段可以和您IDC中哪些网段通信。 SecurityPolicyDatabases []*SecurityPolicyDatabase `json:"SecurityPolicyDatabases,omitempty" name:"SecurityPolicyDatabases"` // IKE配置(Internet Key Exchange,因特网密钥交换),IKE具有一套自我保护机制,用户配置网络安全协议。 @@ -14794,13 +22119,13 @@ type ModifyVpnConnectionAttributeRequest struct { // IPSec配置,腾讯云提供IPSec安全会话设置。 IPSECOptionsSpecification *IPSECOptionsSpecification `json:"IPSECOptionsSpecification,omitempty" name:"IPSECOptionsSpecification"` - // 是否启用通道健康检查 + // 是否启用通道健康检查,默认为False。 EnableHealthCheck *bool `json:"EnableHealthCheck,omitempty" name:"EnableHealthCheck"` - // 本端通道探测ip + // 本端通道探测IP。 HealthCheckLocalIp *string `json:"HealthCheckLocalIp,omitempty" name:"HealthCheckLocalIp"` - // 对端通道探测ip + // 对端通道探测IP。 HealthCheckRemoteIp *string `json:"HealthCheckRemoteIp,omitempty" name:"HealthCheckRemoteIp"` // 协商类型,默认为active(主动协商)。可选值:active(主动协商),passive(被动协商),flowTrigger(流量协商) @@ -14814,6 +22139,9 @@ type ModifyVpnConnectionAttributeRequest struct { // DPD超时后的动作。默认为clear。dpdEnable为1(开启)时有效。可取值为clear(断开)和restart(重试) DpdAction *string `json:"DpdAction,omitempty" name:"DpdAction"` + + // 对端网关ID,4.0及以上网关下的通道支持更新。 + CustomerGatewayId *string `json:"CustomerGatewayId,omitempty" name:"CustomerGatewayId"` } func (r *ModifyVpnConnectionAttributeRequest) ToJsonString() string { @@ -14841,19 +22169,22 @@ func (r *ModifyVpnConnectionAttributeRequest) FromJsonString(s string) error { delete(f, "DpdEnable") delete(f, "DpdTimeout") delete(f, "DpdAction") + delete(f, "CustomerGatewayId") if len(f) > 0 { return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ModifyVpnConnectionAttributeRequest has unknown keys!", "") } return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnConnectionAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpnConnectionAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpnConnectionAttributeResponseParams `json:"Response"` } func (r *ModifyVpnConnectionAttributeResponse) ToJsonString() string { @@ -14867,6 +22198,18 @@ func (r *ModifyVpnConnectionAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnGatewayAttributeRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // VPN网关名称,最大长度不能超过60个字节。 + VpnGatewayName *string `json:"VpnGatewayName,omitempty" name:"VpnGatewayName"` + + // VPN网关计费模式,目前只支持预付费(即包年包月)到后付费(即按量计费)的转换。即参数只支持:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` +} + type ModifyVpnGatewayAttributeRequest struct { *tchttp.BaseRequest @@ -14901,13 +22244,15 @@ func (r *ModifyVpnGatewayAttributeRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnGatewayAttributeResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpnGatewayAttributeResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpnGatewayAttributeResponseParams `json:"Response"` } func (r *ModifyVpnGatewayAttributeResponse) ToJsonString() string { @@ -14921,13 +22266,22 @@ func (r *ModifyVpnGatewayAttributeResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnGatewayCcnRoutesRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 云联网路由(IDC网段)列表。 + Routes []*VpngwCcnRoutes `json:"Routes,omitempty" name:"Routes"` +} + type ModifyVpnGatewayCcnRoutesRequest struct { *tchttp.BaseRequest - // VPN网关实例ID + // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 云联网路由(IDC网段)列表 + // 云联网路由(IDC网段)列表。 Routes []*VpngwCcnRoutes `json:"Routes,omitempty" name:"Routes"` } @@ -14951,13 +22305,15 @@ func (r *ModifyVpnGatewayCcnRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnGatewayCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ModifyVpnGatewayCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ModifyVpnGatewayCcnRoutesResponseParams `json:"Response"` } func (r *ModifyVpnGatewayCcnRoutesResponse) ToJsonString() string { @@ -14971,13 +22327,22 @@ func (r *ModifyVpnGatewayCcnRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ModifyVpnGatewayRoutesRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 路由修改参数。 + Routes []*VpnGatewayRouteModify `json:"Routes,omitempty" name:"Routes"` +} + type ModifyVpnGatewayRoutesRequest struct { *tchttp.BaseRequest - // Vpn网关id + // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 路由修改参数 + // 路由修改参数。 Routes []*VpnGatewayRouteModify `json:"Routes,omitempty" name:"Routes"` } @@ -15001,17 +22366,19 @@ func (r *ModifyVpnGatewayRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ModifyVpnGatewayRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ModifyVpnGatewayRoutesResponseParams struct { + // VPN路由信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` - // VPN路由信息 - // 注意:此字段可能返回 null,表示取不到有效值。 - Routes []*VpnGatewayRoute `json:"Routes,omitempty" name:"Routes"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ModifyVpnGatewayRoutesResponse struct { + *tchttp.BaseResponse + Response *ModifyVpnGatewayRoutesResponseParams `json:"Response"` } func (r *ModifyVpnGatewayRoutesResponse) ToJsonString() string { @@ -15026,7 +22393,6 @@ func (r *ModifyVpnGatewayRoutesResponse) FromJsonString(s string) error { } type NatDirectConnectGatewayRoute struct { - // 子网的 `IPv4` `CIDR` DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` @@ -15045,7 +22411,6 @@ type NatDirectConnectGatewayRoute struct { } type NatGateway struct { - // NAT网关的ID。 NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` @@ -15107,10 +22472,17 @@ type NatGateway struct { // 独享型NAT所在的网关集群的带宽(单位:Mbps),当IsExclusive为false时无此字段。 // 注意:此字段可能返回 null,表示取不到有效值。 ExclusiveGatewayBandwidth *uint64 `json:"ExclusiveGatewayBandwidth,omitempty" name:"ExclusiveGatewayBandwidth"` + + // NAT网关是否被封禁。“NORMAL”:未被封禁,“RESTRICTED”:已被封禁。 + // 注意:此字段可能返回 null,表示取不到有效值。 + RestrictState *string `json:"RestrictState,omitempty" name:"RestrictState"` + + // NAT网关大版本号,传统型=1,标准型=2 + // 注意:此字段可能返回 null,表示取不到有效值。 + NatProductVersion *uint64 `json:"NatProductVersion,omitempty" name:"NatProductVersion"` } type NatGatewayAddress struct { - // 弹性公网IP(EIP)的唯一 ID,形如:`eip-11112222`。 AddressId *string `json:"AddressId,omitempty" name:"AddressId"` @@ -15122,7 +22494,6 @@ type NatGatewayAddress struct { } type NatGatewayDestinationIpPortTranslationNatRule struct { - // 网络协议,可选值:`TCP`、`UDP`。 IpProtocol *string `json:"IpProtocol,omitempty" name:"IpProtocol"` @@ -15155,7 +22526,6 @@ type NatGatewayDestinationIpPortTranslationNatRule struct { } type NetDetect struct { - // `VPC`实例`ID`。形如:`vpc-12345678` VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -15187,6 +22557,7 @@ type NetDetect struct { // NAT:NAT网关; // NORMAL_CVM:普通云服务器; // CCN:云联网网关; + // NONEXTHOP:无下一跳; NextHopType *string `json:"NextHopType,omitempty" name:"NextHopType"` // 下一跳目的网关,取值与“下一跳类型”相关: @@ -15195,7 +22566,8 @@ type NetDetect struct { // 下一跳类型为PEERCONNECTION,取值对等连接ID,形如:pcx-12345678; // 下一跳类型为NAT,取值Nat网关,形如:nat-12345678; // 下一跳类型为NORMAL_CVM,取值云服务器IPv4地址,形如:10.0.0.12; - // 下一跳类型为CCN,取值云联网网关,形如:ccn-12345678; + // 下一跳类型为CCN,取值云联网ID,形如:ccn-12345678; + // 下一跳类型为NONEXTHOP,指定网络探测为无下一跳的网络探测; NextHopDestination *string `json:"NextHopDestination,omitempty" name:"NextHopDestination"` // 下一跳网关名称。 @@ -15212,7 +22584,6 @@ type NetDetect struct { } type NetDetectIpState struct { - // 探测目的IPv4地址。 DetectDestinationIp *string `json:"DetectDestinationIp,omitempty" name:"DetectDestinationIp"` @@ -15232,7 +22603,6 @@ type NetDetectIpState struct { } type NetDetectState struct { - // 网络探测实例ID。形如:netd-12345678。 NetDetectId *string `json:"NetDetectId,omitempty" name:"NetDetectId"` @@ -15241,7 +22611,6 @@ type NetDetectState struct { } type NetworkAcl struct { - // `VPC`实例`ID`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -15262,10 +22631,15 @@ type NetworkAcl struct { // 网络ACL出站规则。 EgressEntries []*NetworkAclEntry `json:"EgressEntries,omitempty" name:"EgressEntries"` + + // 网络ACL类型。三元组:'TRIPLE' 五元组:'QUINTUPLE' + NetworkAclType *string `json:"NetworkAclType,omitempty" name:"NetworkAclType"` + + // 标签键值对 + TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` } type NetworkAclEntry struct { - // 修改时间。 ModifyTime *string `json:"ModifyTime,omitempty" name:"ModifyTime"` @@ -15289,7 +22663,6 @@ type NetworkAclEntry struct { } type NetworkAclEntrySet struct { - // 入站规则。 Ingress []*NetworkAclEntry `json:"Ingress,omitempty" name:"Ingress"` @@ -15297,8 +22670,50 @@ type NetworkAclEntrySet struct { Egress []*NetworkAclEntry `json:"Egress,omitempty" name:"Egress"` } -type NetworkInterface struct { +type NetworkAclQuintupleEntries struct { + // 网络ACL五元组入站规则。 + Ingress []*NetworkAclQuintupleEntry `json:"Ingress,omitempty" name:"Ingress"` + + // 网络ACL五元组出站规则 + Egress []*NetworkAclQuintupleEntry `json:"Egress,omitempty" name:"Egress"` +} + +type NetworkAclQuintupleEntry struct { + // 协议, 取值: TCP,UDP, ICMP, ALL。 + Protocol *string `json:"Protocol,omitempty" name:"Protocol"` + + // 描述。 + Description *string `json:"Description,omitempty" name:"Description"` + + // 源端口(all, 单个port, range)。当Protocol为ALL或ICMP时,不能指定Port。 + SourcePort *string `json:"SourcePort,omitempty" name:"SourcePort"` + + // 源CIDR。 + SourceCidr *string `json:"SourceCidr,omitempty" name:"SourceCidr"` + + // 目的端口(all, 单个port, range)。当Protocol为ALL或ICMP时,不能指定Port。 + DestinationPort *string `json:"DestinationPort,omitempty" name:"DestinationPort"` + + // 目的CIDR。 + DestinationCidr *string `json:"DestinationCidr,omitempty" name:"DestinationCidr"` + + // 动作,ACCEPT 或 DROP。 + Action *string `json:"Action,omitempty" name:"Action"` + + // 网络ACL条目唯一ID。 + NetworkAclQuintupleEntryId *string `json:"NetworkAclQuintupleEntryId,omitempty" name:"NetworkAclQuintupleEntryId"` + + // 优先级,从1开始。 + Priority *int64 `json:"Priority,omitempty" name:"Priority"` + + // 创建时间,用于DescribeNetworkAclQuintupleEntries的出参。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 方向,INGRESS或EGRESS,用于DescribeNetworkAclQuintupleEntries的出参。 + NetworkAclDirection *string `json:"NetworkAclDirection,omitempty" name:"NetworkAclDirection"` +} +type NetworkInterface struct { // 弹性网卡实例ID,例如:eni-f1xjkw1b。 NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` @@ -15364,10 +22779,21 @@ type NetworkInterface struct { // 弹性网卡类型:0:标准型/1:扩展型。默认值为0。 // 注意:此字段可能返回 null,表示取不到有效值。 AttachType *uint64 `json:"AttachType,omitempty" name:"AttachType"` + + // 用于保留网卡主IP的资源ID用于保留网卡主IP的资源ID。用于删除网卡时作为入参数。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 服务质量级别: + //
    • `DEFAULT`:默认
    • + //
    • `PT`:云金
    • + //
    • `AU`:云银
    • + //
    • `AG`:云铜
    • + // 注意:此字段可能返回 null,表示取不到有效值。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` } type NetworkInterfaceAttachment struct { - // 云主机实例ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` @@ -15381,6 +22807,15 @@ type NetworkInterfaceAttachment struct { AttachTime *string `json:"AttachTime,omitempty" name:"AttachTime"` } +// Predefined struct for user +type NotifyRoutesRequestParams struct { + // 路由表唯一ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略唯一ID。 + RouteItemIds []*string `json:"RouteItemIds,omitempty" name:"RouteItemIds"` +} + type NotifyRoutesRequest struct { *tchttp.BaseRequest @@ -15411,13 +22846,15 @@ func (r *NotifyRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type NotifyRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type NotifyRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *NotifyRoutesResponseParams `json:"Response"` } func (r *NotifyRoutesResponse) ToJsonString() string { @@ -15432,16 +22869,14 @@ func (r *NotifyRoutesResponse) FromJsonString(s string) error { } type Price struct { - // 实例价格。 InstancePrice *ItemPrice `json:"InstancePrice,omitempty" name:"InstancePrice"` - // 网络价格。 + // 带宽价格。 BandwidthPrice *ItemPrice `json:"BandwidthPrice,omitempty" name:"BandwidthPrice"` } type PrivateIpAddressSpecification struct { - // 内网IP地址。 PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` @@ -15466,10 +22901,12 @@ type PrivateIpAddressSpecification struct { // DELETING:删除中 // AVAILABLE:可用的 State *string `json:"State,omitempty" name:"State"` + + // IP服务质量等级,可选值:PT、AU、AG、DEFAULT,分别代表云金、云银、云铜、默认四个等级。 + QosLevel *string `json:"QosLevel,omitempty" name:"QosLevel"` } type ProductQuota struct { - // 产品配额ID QuotaId *string `json:"QuotaId,omitempty" name:"QuotaId"` @@ -15487,7 +22924,6 @@ type ProductQuota struct { } type Quota struct { - // 配额名称,取值范围:
    • `TOTAL_EIP_QUOTA`:用户当前地域下EIP的配额数;
    • `DAILY_EIP_APPLY`:用户当前地域下今日申购次数;
    • `DAILY_PUBLIC_IP_ASSIGN`:用户当前地域下,重新分配公网 IP次数。 QuotaId *string `json:"QuotaId,omitempty" name:"QuotaId"` @@ -15499,7 +22935,6 @@ type Quota struct { } type ReferredSecurityGroup struct { - // 安全组实例ID。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` @@ -15507,6 +22942,18 @@ type ReferredSecurityGroup struct { ReferredSecurityGroupIds []*string `json:"ReferredSecurityGroupIds,omitempty" name:"ReferredSecurityGroupIds"` } +// Predefined struct for user +type RefreshDirectConnectGatewayRouteToNatGatewayRequestParams struct { + // vpc的ID + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // NAT网关ID + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 是否是预刷新;True:是, False:否 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + type RefreshDirectConnectGatewayRouteToNatGatewayRequest struct { *tchttp.BaseRequest @@ -15541,16 +22988,18 @@ func (r *RefreshDirectConnectGatewayRouteToNatGatewayRequest) FromJsonString(s s return json.Unmarshal([]byte(s), &r) } -type RefreshDirectConnectGatewayRouteToNatGatewayResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type RefreshDirectConnectGatewayRouteToNatGatewayResponseParams struct { + // IDC子网信息 + DirectConnectSubnetSet []*DirectConnectSubnet `json:"DirectConnectSubnetSet,omitempty" name:"DirectConnectSubnetSet"` - // IDC子网信息 - DirectConnectSubnetSet []*DirectConnectSubnet `json:"DirectConnectSubnetSet,omitempty" name:"DirectConnectSubnetSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type RefreshDirectConnectGatewayRouteToNatGatewayResponse struct { + *tchttp.BaseResponse + Response *RefreshDirectConnectGatewayRouteToNatGatewayResponseParams `json:"Response"` } func (r *RefreshDirectConnectGatewayRouteToNatGatewayResponse) ToJsonString() string { @@ -15564,6 +23013,15 @@ func (r *RefreshDirectConnectGatewayRouteToNatGatewayResponse) FromJsonString(s return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RejectAttachCcnInstancesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 拒绝关联实例列表。 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` +} + type RejectAttachCcnInstancesRequest struct { *tchttp.BaseRequest @@ -15594,13 +23052,15 @@ func (r *RejectAttachCcnInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RejectAttachCcnInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RejectAttachCcnInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RejectAttachCcnInstancesResponseParams `json:"Response"` } func (r *RejectAttachCcnInstancesResponse) ToJsonString() string { @@ -15614,6 +23074,61 @@ func (r *RejectAttachCcnInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RejectVpcPeeringConnectionRequestParams struct { +} + +type RejectVpcPeeringConnectionRequest struct { + *tchttp.BaseRequest +} + +func (r *RejectVpcPeeringConnectionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RejectVpcPeeringConnectionRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "RejectVpcPeeringConnectionRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type RejectVpcPeeringConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type RejectVpcPeeringConnectionResponse struct { + *tchttp.BaseResponse + Response *RejectVpcPeeringConnectionResponseParams `json:"Response"` +} + +func (r *RejectVpcPeeringConnectionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *RejectVpcPeeringConnectionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ReleaseAddressesRequestParams struct { + // 标识 EIP 的唯一 ID 列表。EIP 唯一 ID 形如:`eip-11112222`。 + AddressIds []*string `json:"AddressIds,omitempty" name:"AddressIds"` +} + type ReleaseAddressesRequest struct { *tchttp.BaseRequest @@ -15640,16 +23155,18 @@ func (r *ReleaseAddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ReleaseAddressesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ReleaseAddressesResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ReleaseAddressesResponse struct { + *tchttp.BaseResponse + Response *ReleaseAddressesResponseParams `json:"Response"` } func (r *ReleaseAddressesResponse) ToJsonString() string { @@ -15663,6 +23180,15 @@ func (r *ReleaseAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReleaseIp6AddressesBandwidthRequestParams struct { + // IPV6地址。Ip6Addresses和Ip6AddressIds必须且只能传一个 + Ip6Addresses []*string `json:"Ip6Addresses,omitempty" name:"Ip6Addresses"` + + // IPV6地址对应的唯一ID,形如eip-xxxxxxxx。Ip6Addresses和Ip6AddressIds必须且只能传一个。 + Ip6AddressIds []*string `json:"Ip6AddressIds,omitempty" name:"Ip6AddressIds"` +} + type ReleaseIp6AddressesBandwidthRequest struct { *tchttp.BaseRequest @@ -15693,16 +23219,18 @@ func (r *ReleaseIp6AddressesBandwidthRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ReleaseIp6AddressesBandwidthResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ReleaseIp6AddressesBandwidthResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *string `json:"TaskId,omitempty" name:"TaskId"` - // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 - TaskId *string `json:"TaskId,omitempty" name:"TaskId"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ReleaseIp6AddressesBandwidthResponse struct { + *tchttp.BaseResponse + Response *ReleaseIp6AddressesBandwidthResponseParams `json:"Response"` } func (r *ReleaseIp6AddressesBandwidthResponse) ToJsonString() string { @@ -15716,6 +23244,18 @@ func (r *ReleaseIp6AddressesBandwidthResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RemoveBandwidthPackageResourcesRequestParams struct { + // 带宽包唯一标识ID,形如'bwp-xxxx' + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` + + // 资源类型,包括‘Address’, ‘LoadBalance’ + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源ID,可支持资源形如'eip-xxxx', 'lb-xxxx' + ResourceIds []*string `json:"ResourceIds,omitempty" name:"ResourceIds"` +} + type RemoveBandwidthPackageResourcesRequest struct { *tchttp.BaseRequest @@ -15750,13 +23290,15 @@ func (r *RemoveBandwidthPackageResourcesRequest) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RemoveBandwidthPackageResourcesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RemoveBandwidthPackageResourcesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RemoveBandwidthPackageResourcesResponseParams `json:"Response"` } func (r *RemoveBandwidthPackageResourcesResponse) ToJsonString() string { @@ -15770,6 +23312,15 @@ func (r *RemoveBandwidthPackageResourcesResponse) FromJsonString(s string) error return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RemoveIp6RulesRequestParams struct { + // IPV6转换规则所属的转换实例唯一ID,形如ip6-xxxxxxxx + Ip6TranslatorId *string `json:"Ip6TranslatorId,omitempty" name:"Ip6TranslatorId"` + + // 待删除IPV6转换规则,形如rule6-xxxxxxxx + Ip6RuleIds []*string `json:"Ip6RuleIds,omitempty" name:"Ip6RuleIds"` +} + type RemoveIp6RulesRequest struct { *tchttp.BaseRequest @@ -15800,13 +23351,15 @@ func (r *RemoveIp6RulesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RemoveIp6RulesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RemoveIp6RulesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RemoveIp6RulesResponseParams `json:"Response"` } func (r *RemoveIp6RulesResponse) ToJsonString() string { @@ -15820,6 +23373,15 @@ func (r *RemoveIp6RulesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewAddressesRequestParams struct { + // EIP唯一标识ID列表,形如'eip-xxxx' + AddressIds []*string `json:"AddressIds,omitempty" name:"AddressIds"` + + // 续费参数 + AddressChargePrepaid *AddressChargePrepaid `json:"AddressChargePrepaid,omitempty" name:"AddressChargePrepaid"` +} + type RenewAddressesRequest struct { *tchttp.BaseRequest @@ -15850,13 +23412,15 @@ func (r *RenewAddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewAddressesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RenewAddressesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RenewAddressesResponseParams `json:"Response"` } func (r *RenewAddressesResponse) ToJsonString() string { @@ -15870,6 +23434,15 @@ func (r *RenewAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewVpnGatewayRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 预付费计费模式。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` +} + type RenewVpnGatewayRequest struct { *tchttp.BaseRequest @@ -15900,13 +23473,15 @@ func (r *RenewVpnGatewayRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type RenewVpnGatewayResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type RenewVpnGatewayResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *RenewVpnGatewayResponseParams `json:"Response"` } func (r *RenewVpnGatewayResponse) ToJsonString() string { @@ -15920,6 +23495,15 @@ func (r *RenewVpnGatewayResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceDirectConnectGatewayCcnRoutesRequestParams struct { + // 专线网关ID,形如:dcg-prpqlmg1 + DirectConnectGatewayId *string `json:"DirectConnectGatewayId,omitempty" name:"DirectConnectGatewayId"` + + // 需要连通的IDC网段列表 + Routes []*DirectConnectGatewayCcnRoute `json:"Routes,omitempty" name:"Routes"` +} + type ReplaceDirectConnectGatewayCcnRoutesRequest struct { *tchttp.BaseRequest @@ -15950,13 +23534,15 @@ func (r *ReplaceDirectConnectGatewayCcnRoutesRequest) FromJsonString(s string) e return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceDirectConnectGatewayCcnRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ReplaceDirectConnectGatewayCcnRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ReplaceDirectConnectGatewayCcnRoutesResponseParams `json:"Response"` } func (r *ReplaceDirectConnectGatewayCcnRoutesResponse) ToJsonString() string { @@ -15970,6 +23556,15 @@ func (r *ReplaceDirectConnectGatewayCcnRoutesResponse) FromJsonString(s string) return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceRouteTableAssociationRequestParams struct { + // 子网实例ID,例如:subnet-3x5lf5q0。可通过DescribeSubnets接口查询。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` +} + type ReplaceRouteTableAssociationRequest struct { *tchttp.BaseRequest @@ -16000,13 +23595,15 @@ func (r *ReplaceRouteTableAssociationRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceRouteTableAssociationResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ReplaceRouteTableAssociationResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ReplaceRouteTableAssociationResponseParams `json:"Response"` } func (r *ReplaceRouteTableAssociationResponse) ToJsonString() string { @@ -16020,6 +23617,15 @@ func (r *ReplaceRouteTableAssociationResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceRoutesRequestParams struct { + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略对象。需要指定路由策略ID(RouteId)。 + Routes []*Route `json:"Routes,omitempty" name:"Routes"` +} + type ReplaceRoutesRequest struct { *tchttp.BaseRequest @@ -16050,19 +23656,21 @@ func (r *ReplaceRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type ReplaceRoutesResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type ReplaceRoutesResponseParams struct { + // 原路由策略信息。 + OldRouteSet []*Route `json:"OldRouteSet,omitempty" name:"OldRouteSet"` - // 原路由策略信息。 - OldRouteSet []*Route `json:"OldRouteSet,omitempty" name:"OldRouteSet"` + // 修改后的路由策略信息。 + NewRouteSet []*Route `json:"NewRouteSet,omitempty" name:"NewRouteSet"` - // 修改后的路由策略信息。 - NewRouteSet []*Route `json:"NewRouteSet,omitempty" name:"NewRouteSet"` + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` +type ReplaceRoutesResponse struct { + *tchttp.BaseResponse + Response *ReplaceRoutesResponseParams `json:"Response"` } func (r *ReplaceRoutesResponse) ToJsonString() string { @@ -16076,6 +23684,86 @@ func (r *ReplaceRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceSecurityGroupPoliciesRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合对象。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` + + // 旧的安全组规则集合对象,可选,日志记录用。 + OriginalSecurityGroupPolicySet *SecurityGroupPolicySet `json:"OriginalSecurityGroupPolicySet,omitempty" name:"OriginalSecurityGroupPolicySet"` +} + +type ReplaceSecurityGroupPoliciesRequest struct { + *tchttp.BaseRequest + + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合对象。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` + + // 旧的安全组规则集合对象,可选,日志记录用。 + OriginalSecurityGroupPolicySet *SecurityGroupPolicySet `json:"OriginalSecurityGroupPolicySet,omitempty" name:"OriginalSecurityGroupPolicySet"` +} + +func (r *ReplaceSecurityGroupPoliciesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ReplaceSecurityGroupPoliciesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SecurityGroupId") + delete(f, "SecurityGroupPolicySet") + delete(f, "OriginalSecurityGroupPolicySet") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ReplaceSecurityGroupPoliciesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ReplaceSecurityGroupPoliciesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type ReplaceSecurityGroupPoliciesResponse struct { + *tchttp.BaseResponse + Response *ReplaceSecurityGroupPoliciesResponseParams `json:"Response"` +} + +func (r *ReplaceSecurityGroupPoliciesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ReplaceSecurityGroupPoliciesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ReplaceSecurityGroupPolicyRequestParams struct { + // 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。 + SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` + + // 安全组规则集合对象。 + SecurityGroupPolicySet *SecurityGroupPolicySet `json:"SecurityGroupPolicySet,omitempty" name:"SecurityGroupPolicySet"` + + // 旧的安全组规则集合对象,可选,日志记录用。 + OriginalSecurityGroupPolicySet *SecurityGroupPolicySet `json:"OriginalSecurityGroupPolicySet,omitempty" name:"OriginalSecurityGroupPolicySet"` +} + type ReplaceSecurityGroupPolicyRequest struct { *tchttp.BaseRequest @@ -16110,13 +23798,15 @@ func (r *ReplaceSecurityGroupPolicyRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ReplaceSecurityGroupPolicyResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ReplaceSecurityGroupPolicyResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ReplaceSecurityGroupPolicyResponseParams `json:"Response"` } func (r *ReplaceSecurityGroupPolicyResponse) ToJsonString() string { @@ -16130,6 +23820,18 @@ func (r *ReplaceSecurityGroupPolicyResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetAttachCcnInstancesRequestParams struct { + // CCN实例ID。形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // CCN所属UIN(根账号)。 + CcnUin *string `json:"CcnUin,omitempty" name:"CcnUin"` + + // 重新申请关联网络实例列表。 + Instances []*CcnInstance `json:"Instances,omitempty" name:"Instances"` +} + type ResetAttachCcnInstancesRequest struct { *tchttp.BaseRequest @@ -16164,13 +23866,15 @@ func (r *ResetAttachCcnInstancesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetAttachCcnInstancesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetAttachCcnInstancesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetAttachCcnInstancesResponseParams `json:"Response"` } func (r *ResetAttachCcnInstancesResponse) ToJsonString() string { @@ -16184,6 +23888,15 @@ func (r *ResetAttachCcnInstancesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetNatGatewayConnectionRequestParams struct { + // NAT网关ID。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // NAT网关并发连接上限,形如:1000000、3000000、10000000。 + MaxConcurrentConnection *uint64 `json:"MaxConcurrentConnection,omitempty" name:"MaxConcurrentConnection"` +} + type ResetNatGatewayConnectionRequest struct { *tchttp.BaseRequest @@ -16214,13 +23927,15 @@ func (r *ResetNatGatewayConnectionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetNatGatewayConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetNatGatewayConnectionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetNatGatewayConnectionResponseParams `json:"Response"` } func (r *ResetNatGatewayConnectionResponse) ToJsonString() string { @@ -16234,6 +23949,18 @@ func (r *ResetNatGatewayConnectionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetRoutesRequestParams struct { + // 路由表实例ID,例如:rtb-azd4dt1c。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由表名称,最大长度不能超过60个字节。 + RouteTableName *string `json:"RouteTableName,omitempty" name:"RouteTableName"` + + // 路由策略。 + Routes []*Route `json:"Routes,omitempty" name:"Routes"` +} + type ResetRoutesRequest struct { *tchttp.BaseRequest @@ -16268,13 +23995,15 @@ func (r *ResetRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetRoutesResponseParams `json:"Response"` } func (r *ResetRoutesResponse) ToJsonString() string { @@ -16288,6 +24017,15 @@ func (r *ResetRoutesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetVpnConnectionRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // VPN通道实例ID。形如:vpnx-f49l6u0z。 + VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` +} + type ResetVpnConnectionRequest struct { *tchttp.BaseRequest @@ -16318,13 +24056,15 @@ func (r *ResetVpnConnectionRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetVpnConnectionResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetVpnConnectionResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetVpnConnectionResponseParams `json:"Response"` } func (r *ResetVpnConnectionResponse) ToJsonString() string { @@ -16338,13 +24078,22 @@ func (r *ResetVpnConnectionResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetVpnGatewayInternetMaxBandwidthRequestParams struct { + // VPN网关实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // 新规格公网带宽设置。可选带宽规格:5, 10, 20, 50, 100, 200, 500, 1000;单位:Mbps。VPN网关带宽目前仅支持部分带宽范围内升降配,如【5,100】Mbps和【200,1000】Mbps,在各自带宽范围内可提升配额,跨范围提升配额和降配暂不支持。 + InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` +} + type ResetVpnGatewayInternetMaxBandwidthRequest struct { *tchttp.BaseRequest // VPN网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` - // 公网带宽设置。可选带宽规格:5, 10, 20, 50, 100;单位:Mbps。 + // 新规格公网带宽设置。可选带宽规格:5, 10, 20, 50, 100, 200, 500, 1000;单位:Mbps。VPN网关带宽目前仅支持部分带宽范围内升降配,如【5,100】Mbps和【200,1000】Mbps,在各自带宽范围内可提升配额,跨范围提升配额和降配暂不支持。 InternetMaxBandwidthOut *uint64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` } @@ -16368,13 +24117,15 @@ func (r *ResetVpnGatewayInternetMaxBandwidthRequest) FromJsonString(s string) er return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type ResetVpnGatewayInternetMaxBandwidthResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type ResetVpnGatewayInternetMaxBandwidthResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *ResetVpnGatewayInternetMaxBandwidthResponseParams `json:"Response"` } func (r *ResetVpnGatewayInternetMaxBandwidthResponse) ToJsonString() string { @@ -16389,7 +24140,6 @@ func (r *ResetVpnGatewayInternetMaxBandwidthResponse) FromJsonString(s string) e } type Resource struct { - // 带宽包资源类型,包括'Address'和'LoadBalance' ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` @@ -16401,7 +24151,6 @@ type Resource struct { } type ResourceDashboard struct { - // Vpc实例ID,例如:vpc-bq4bzxpj。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -16489,48 +24238,194 @@ type ResourceDashboard struct { // SEAL。 SEAL *uint64 `json:"SEAL,omitempty" name:"SEAL"` - // 文件存储 CFS。 - CFS *uint64 `json:"CFS,omitempty" name:"CFS"` + // 文件存储 CFS。 + CFS *uint64 `json:"CFS,omitempty" name:"CFS"` + + // Oracle。 + Oracle *uint64 `json:"Oracle,omitempty" name:"Oracle"` + + // ElasticSearch服务。 + ElasticSearch *uint64 `json:"ElasticSearch,omitempty" name:"ElasticSearch"` + + // 区块链服务。 + TBaaS *uint64 `json:"TBaaS,omitempty" name:"TBaaS"` + + // Itop。 + Itop *uint64 `json:"Itop,omitempty" name:"Itop"` + + // 云数据库审计。 + DBAudit *uint64 `json:"DBAudit,omitempty" name:"DBAudit"` + + // 企业级云数据库 CynosDB for Postgres。 + CynosDBPostgres *uint64 `json:"CynosDBPostgres,omitempty" name:"CynosDBPostgres"` + + // 数据库 TencentDB for Redis。 + Redis *uint64 `json:"Redis,omitempty" name:"Redis"` + + // 数据库 TencentDB for MongoDB。 + MongoDB *uint64 `json:"MongoDB,omitempty" name:"MongoDB"` + + // 分布式数据库 TencentDB for TDSQL。 + DCDB *uint64 `json:"DCDB,omitempty" name:"DCDB"` + + // 企业级云数据库 CynosDB for MySQL。 + CynosDBMySQL *uint64 `json:"CynosDBMySQL,omitempty" name:"CynosDBMySQL"` + + // 子网。 + Subnet *uint64 `json:"Subnet,omitempty" name:"Subnet"` + + // 路由表。 + RouteTable *uint64 `json:"RouteTable,omitempty" name:"RouteTable"` +} + +type ResourceStatistics struct { + // Vpc实例ID,例如:vpc-f1xjkw1b。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 子网实例ID,例如:subnet-bthucmmy。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 当前已使用的IP总数。 + Ip *uint64 `json:"Ip,omitempty" name:"Ip"` + + // 资源统计信息。 + ResourceStatisticsItemSet []*ResourceStatisticsItem `json:"ResourceStatisticsItemSet,omitempty" name:"ResourceStatisticsItemSet"` +} + +type ResourceStatisticsItem struct { + // 资源类型。比如,CVM,ENI等。 + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源名称。 + ResourceName *string `json:"ResourceName,omitempty" name:"ResourceName"` + + // 资源个数。 + ResourceCount *uint64 `json:"ResourceCount,omitempty" name:"ResourceCount"` +} + +// Predefined struct for user +type ResumeSnapshotInstanceRequestParams struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` + + // 实例Id。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + +type ResumeSnapshotInstanceRequest struct { + *tchttp.BaseRequest + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` + + // 实例Id。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + +func (r *ResumeSnapshotInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ResumeSnapshotInstanceRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "SnapshotPolicyId") + delete(f, "SnapshotFileId") + delete(f, "InstanceId") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ResumeSnapshotInstanceRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type ResumeSnapshotInstanceResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // Oracle。 - Oracle *uint64 `json:"Oracle,omitempty" name:"Oracle"` +type ResumeSnapshotInstanceResponse struct { + *tchttp.BaseResponse + Response *ResumeSnapshotInstanceResponseParams `json:"Response"` +} - // ElasticSearch服务。 - ElasticSearch *uint64 `json:"ElasticSearch,omitempty" name:"ElasticSearch"` +func (r *ResumeSnapshotInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 区块链服务。 - TBaaS *uint64 `json:"TBaaS,omitempty" name:"TBaaS"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ResumeSnapshotInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} - // Itop。 - Itop *uint64 `json:"Itop,omitempty" name:"Itop"` +// Predefined struct for user +type ReturnNormalAddressesRequestParams struct { + // EIP 的 IP 地址,示例:101.35.139.183 + AddressIps []*string `json:"AddressIps,omitempty" name:"AddressIps"` +} - // 云数据库审计。 - DBAudit *uint64 `json:"DBAudit,omitempty" name:"DBAudit"` +type ReturnNormalAddressesRequest struct { + *tchttp.BaseRequest - // 企业级云数据库 CynosDB for Postgres。 - CynosDBPostgres *uint64 `json:"CynosDBPostgres,omitempty" name:"CynosDBPostgres"` + // EIP 的 IP 地址,示例:101.35.139.183 + AddressIps []*string `json:"AddressIps,omitempty" name:"AddressIps"` +} - // 数据库 TencentDB for Redis。 - Redis *uint64 `json:"Redis,omitempty" name:"Redis"` +func (r *ReturnNormalAddressesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 数据库 TencentDB for MongoDB。 - MongoDB *uint64 `json:"MongoDB,omitempty" name:"MongoDB"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ReturnNormalAddressesRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "AddressIps") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ReturnNormalAddressesRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} - // 分布式数据库 TencentDB for TDSQL。 - DCDB *uint64 `json:"DCDB,omitempty" name:"DCDB"` +// Predefined struct for user +type ReturnNormalAddressesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} - // 企业级云数据库 CynosDB for MySQL。 - CynosDBMySQL *uint64 `json:"CynosDBMySQL,omitempty" name:"CynosDBMySQL"` +type ReturnNormalAddressesResponse struct { + *tchttp.BaseResponse + Response *ReturnNormalAddressesResponseParams `json:"Response"` +} - // 子网。 - Subnet *uint64 `json:"Subnet,omitempty" name:"Subnet"` +func (r *ReturnNormalAddressesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} - // 路由表。 - RouteTable *uint64 `json:"RouteTable,omitempty" name:"RouteTable"` +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *ReturnNormalAddressesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) } type Route struct { - // 目的网段,取值不能在私有网络网段内,例如:112.20.51.0/24。 DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` @@ -16547,7 +24442,7 @@ type Route struct { GatewayType *string `json:"GatewayType,omitempty" name:"GatewayType"` // 下一跳地址,这里只需要指定不同下一跳类型的网关ID,系统会自动匹配到下一跳地址。 - // 特别注意:当 GatewayType 为 EIP 时,GatewayId 固定值 '0' + // 特殊说明:GatewayType为NORMAL_CVM时,GatewayId填写实例的内网IP。 GatewayId *string `json:"GatewayId,omitempty" name:"GatewayId"` // 路由策略ID。IPv4路由策略ID是有意义的值,IPv6路由策略是无意义的值0。后续建议完全使用字符串唯一ID `RouteItemId`操作路由策略。 @@ -16585,7 +24480,6 @@ type Route struct { } type RouteConflict struct { - // 路由表实例ID,例如:rtb-azd4dt1c。 RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` @@ -16597,7 +24491,6 @@ type RouteConflict struct { } type RouteTable struct { - // VPC实例ID。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -16628,7 +24521,6 @@ type RouteTable struct { } type RouteTableAssociation struct { - // 子网实例ID。 SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` @@ -16637,7 +24529,6 @@ type RouteTableAssociation struct { } type SecurityGroup struct { - // 安全组实例ID,例如:sg-ohuuioma。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` @@ -16665,7 +24556,6 @@ type SecurityGroup struct { } type SecurityGroupAssociationStatistics struct { - // 安全组实例ID。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` @@ -16692,7 +24582,6 @@ type SecurityGroupAssociationStatistics struct { } type SecurityGroupLimitSet struct { - // 每个项目每个地域可创建安全组数 SecurityGroupLimit *uint64 `json:"SecurityGroupLimit,omitempty" name:"SecurityGroupLimit"` @@ -16707,10 +24596,18 @@ type SecurityGroupLimitSet struct { // 实例关联安全组数 InstanceSecurityGroupLimit *uint64 `json:"InstanceSecurityGroupLimit,omitempty" name:"InstanceSecurityGroupLimit"` + + // 安全组展开后的规则数限制 + SecurityGroupExtendedPolicyLimit *uint64 `json:"SecurityGroupExtendedPolicyLimit,omitempty" name:"SecurityGroupExtendedPolicyLimit"` + + // 被引用的安全组关联CVM、ENI的实例配额 + SecurityGroupReferedCvmAndEniLimit *uint64 `json:"SecurityGroupReferedCvmAndEniLimit,omitempty" name:"SecurityGroupReferedCvmAndEniLimit"` + + // 被引用的安全组关联数据库、LB等服务实例配额 + SecurityGroupReferedSvcLimit *uint64 `json:"SecurityGroupReferedSvcLimit,omitempty" name:"SecurityGroupReferedSvcLimit"` } type SecurityGroupPolicy struct { - // 安全组规则索引号,值会随着安全组规则的变更动态变化。使用PolicyIndex时,请先调用`DescribeSecurityGroupPolicies`获取到规则的PolicyIndex,并且结合返回值中的Version一起使用处理规则。 PolicyIndex *int64 `json:"PolicyIndex,omitempty" name:"PolicyIndex"` @@ -16718,12 +24615,13 @@ type SecurityGroupPolicy struct { Protocol *string `json:"Protocol,omitempty" name:"Protocol"` // 端口(all, 离散port, range)。 + // 说明:如果Protocol设置为ALL,则Port也需要设置为all。 Port *string `json:"Port,omitempty" name:"Port"` // 协议端口ID或者协议端口组ID。ServiceTemplate和Protocol+Port互斥。 ServiceTemplate *ServiceTemplateSpecification `json:"ServiceTemplate,omitempty" name:"ServiceTemplate"` - // 网段或IP(互斥)。 + // 网段或IP(互斥),特殊说明:0.0.0.0/n 都会映射为0.0.0.0/0。 CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` // 网段或IPv6(互斥)。 @@ -16732,7 +24630,7 @@ type SecurityGroupPolicy struct { // 安全组实例ID,例如:sg-ohuuioma。 SecurityGroupId *string `json:"SecurityGroupId,omitempty" name:"SecurityGroupId"` - // IP地址ID或者ID地址组ID。 + // IP地址ID或者IP地址组ID。 AddressTemplate *AddressTemplateSpecification `json:"AddressTemplate,omitempty" name:"AddressTemplate"` // ACCEPT 或 DROP。 @@ -16746,19 +24644,20 @@ type SecurityGroupPolicy struct { } type SecurityGroupPolicySet struct { - // 安全组规则当前版本。用户每次更新安全规则版本会自动加1,防止更新的路由规则已过期,不填不考虑冲突。 + // 注意:此字段可能返回 null,表示取不到有效值。 Version *string `json:"Version,omitempty" name:"Version"` // 出站规则。 + // 注意:此字段可能返回 null,表示取不到有效值。 Egress []*SecurityGroupPolicy `json:"Egress,omitempty" name:"Egress"` // 入站规则。 + // 注意:此字段可能返回 null,表示取不到有效值。 Ingress []*SecurityGroupPolicy `json:"Ingress,omitempty" name:"Ingress"` } type SecurityPolicyDatabase struct { - // 本端网段 LocalCidrBlock *string `json:"LocalCidrBlock,omitempty" name:"LocalCidrBlock"` @@ -16767,7 +24666,6 @@ type SecurityPolicyDatabase struct { } type ServiceTemplate struct { - // 协议端口实例ID,例如:ppm-f5n1f8da。 ServiceTemplateId *string `json:"ServiceTemplateId,omitempty" name:"ServiceTemplateId"` @@ -16785,7 +24683,6 @@ type ServiceTemplate struct { } type ServiceTemplateGroup struct { - // 协议端口模板集合实例ID,例如:ppmg-2klmrefu。 ServiceTemplateGroupId *string `json:"ServiceTemplateGroupId,omitempty" name:"ServiceTemplateGroupId"` @@ -16803,7 +24700,6 @@ type ServiceTemplateGroup struct { } type ServiceTemplateSpecification struct { - // 协议端口ID,例如:ppm-f5n1f8da。 ServiceId *string `json:"ServiceId,omitempty" name:"ServiceId"` @@ -16812,7 +24708,6 @@ type ServiceTemplateSpecification struct { } type ServicesInfo struct { - // 协议端口。 Service *string `json:"Service,omitempty" name:"Service"` @@ -16821,10 +24716,22 @@ type ServicesInfo struct { Description *string `json:"Description,omitempty" name:"Description"` } +// Predefined struct for user +type SetCcnRegionBandwidthLimitsRequestParams struct { + // CCN实例ID,形如:ccn-f49l6u0z。 + CcnId *string `json:"CcnId,omitempty" name:"CcnId"` + + // 云联网(CCN)各地域出带宽上限。 + CcnRegionBandwidthLimits []*CcnRegionBandwidthLimit `json:"CcnRegionBandwidthLimits,omitempty" name:"CcnRegionBandwidthLimits"` + + // 是否恢复云联网地域出口/地域间带宽限速为默认值(1Gbps)。false表示不恢复;true表示恢复。恢复默认值后,限速实例将不在控制台展示。该参数默认为 false,不恢复。 + SetDefaultLimitFlag *bool `json:"SetDefaultLimitFlag,omitempty" name:"SetDefaultLimitFlag"` +} + type SetCcnRegionBandwidthLimitsRequest struct { *tchttp.BaseRequest - // CCN实例ID。形如:ccn-f49l6u0z。 + // CCN实例ID,形如:ccn-f49l6u0z。 CcnId *string `json:"CcnId,omitempty" name:"CcnId"` // 云联网(CCN)各地域出带宽上限。 @@ -16855,62 +24762,325 @@ func (r *SetCcnRegionBandwidthLimitsRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type SetCcnRegionBandwidthLimitsResponse struct { - *tchttp.BaseResponse - Response *struct { +// Predefined struct for user +type SetCcnRegionBandwidthLimitsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type SetCcnRegionBandwidthLimitsResponse struct { + *tchttp.BaseResponse + Response *SetCcnRegionBandwidthLimitsResponseParams `json:"Response"` +} + +func (r *SetCcnRegionBandwidthLimitsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *SetCcnRegionBandwidthLimitsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type SetVpnGatewaysRenewFlagRequestParams struct { + // VPNGW字符型ID列表。可通过[DescribeVpnGateways](https://cloud.tencent.com/document/api/215/17514)接口返回值VpnGatewaySet中的VpnGatewayId获取。 + VpnGatewayIds []*string `json:"VpnGatewayIds,omitempty" name:"VpnGatewayIds"` + + // 自动续费标记 [0, 1, 2] + // 0表示默认状态(初始状态), 1表示自动续费,2表示明确不自动续费。 + AutoRenewFlag *int64 `json:"AutoRenewFlag,omitempty" name:"AutoRenewFlag"` + + // VPNGW类型['IPSEC', 'SSL'], 默认为IPSEC。 + Type *string `json:"Type,omitempty" name:"Type"` +} + +type SetVpnGatewaysRenewFlagRequest struct { + *tchttp.BaseRequest + + // VPNGW字符型ID列表。可通过[DescribeVpnGateways](https://cloud.tencent.com/document/api/215/17514)接口返回值VpnGatewaySet中的VpnGatewayId获取。 + VpnGatewayIds []*string `json:"VpnGatewayIds,omitempty" name:"VpnGatewayIds"` + + // 自动续费标记 [0, 1, 2] + // 0表示默认状态(初始状态), 1表示自动续费,2表示明确不自动续费。 + AutoRenewFlag *int64 `json:"AutoRenewFlag,omitempty" name:"AutoRenewFlag"` + + // VPNGW类型['IPSEC', 'SSL'], 默认为IPSEC。 + Type *string `json:"Type,omitempty" name:"Type"` +} + +func (r *SetVpnGatewaysRenewFlagRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *SetVpnGatewaysRenewFlagRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "VpnGatewayIds") + delete(f, "AutoRenewFlag") + delete(f, "Type") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "SetVpnGatewaysRenewFlagRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type SetVpnGatewaysRenewFlagResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type SetVpnGatewaysRenewFlagResponse struct { + *tchttp.BaseResponse + Response *SetVpnGatewaysRenewFlagResponseParams `json:"Response"` +} + +func (r *SetVpnGatewaysRenewFlagResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *SetVpnGatewaysRenewFlagResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type SnapshotFileInfo struct { + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 实例Id。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 快照文件Id。 + SnapshotFileId *string `json:"SnapshotFileId,omitempty" name:"SnapshotFileId"` + + // 备份时间。 + BackupTime *string `json:"BackupTime,omitempty" name:"BackupTime"` + + // 操作者Uin。 + Operator *string `json:"Operator,omitempty" name:"Operator"` +} + +type SnapshotInstance struct { + // 实例Id。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 实例类型,目前支持安全组:securitygroup。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例所在地域。 + InstanceRegion *string `json:"InstanceRegion,omitempty" name:"InstanceRegion"` + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 实例名称。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` +} + +type SnapshotPolicy struct { + // 快照策略名称。 + SnapshotPolicyName *string `json:"SnapshotPolicyName,omitempty" name:"SnapshotPolicyName"` + + // 备份策略类型,operate-操作备份,time-定时备份。 + BackupType *string `json:"BackupType,omitempty" name:"BackupType"` + + // 保留时间,支持1~365天。 + KeepTime *uint64 `json:"KeepTime,omitempty" name:"KeepTime"` + + // 是否创建新的cos桶,默认为False。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreateNewCos *bool `json:"CreateNewCos,omitempty" name:"CreateNewCos"` + + // cos桶所在地域。 + CosRegion *string `json:"CosRegion,omitempty" name:"CosRegion"` + + // cos桶。 + CosBucket *string `json:"CosBucket,omitempty" name:"CosBucket"` + + // 快照策略Id。 + SnapshotPolicyId *string `json:"SnapshotPolicyId,omitempty" name:"SnapshotPolicyId"` + + // 时间备份策略。 + // 注意:此字段可能返回 null,表示取不到有效值。 + BackupPolicies []*BackupPolicy `json:"BackupPolicies,omitempty" name:"BackupPolicies"` + + // 启用状态,True-启用,False-停用,默认为True。 + Enable *bool `json:"Enable,omitempty" name:"Enable"` + + // 创建时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` +} + +type SourceIpTranslationNatRule struct { + // 资源ID,如果ResourceType为USERDEFINED,可以为空 + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 资源类型,目前包含SUBNET、NETWORKINTERFACE、USERDEFINED + // 注意:此字段可能返回 null,表示取不到有效值。 + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 源IP/网段 + PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` + + // 弹性IP地址池 + PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` + + // 描述 + Description *string `json:"Description,omitempty" name:"Description"` + + // Snat规则ID + NatGatewaySnatId *string `json:"NatGatewaySnatId,omitempty" name:"NatGatewaySnatId"` + + // NAT网关的ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + + // 私有网络VPC的ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // NAT网关SNAT规则创建时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` +} + +type SslClientConfig struct { + // 客户端配置 + SslVpnClientConfiguration *string `json:"SslVpnClientConfiguration,omitempty" name:"SslVpnClientConfiguration"` + + // 更证书 + SslVpnRootCert *string `json:"SslVpnRootCert,omitempty" name:"SslVpnRootCert"` + + // 客户端密钥 + SslVpnKey *string `json:"SslVpnKey,omitempty" name:"SslVpnKey"` + + // 客户端证书 + SslVpnCert *string `json:"SslVpnCert,omitempty" name:"SslVpnCert"` + + // SSL-VPN-CLIENT 实例ID。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` +} + +type SslVpnClient struct { + // VPC实例ID。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` + + // 证书状态。 + // 0:创建中 + // 1:正常 + // 2:已停用 + // 3.已过期 + // 4.创建出错 + CertStatus *uint64 `json:"CertStatus,omitempty" name:"CertStatus"` + + // SSL-VPN-CLIENT 实例ID。 + SslVpnClientId *string `json:"SslVpnClientId,omitempty" name:"SslVpnClientId"` + + // 证书开始时间。 + CertBeginTime *string `json:"CertBeginTime,omitempty" name:"CertBeginTime"` + + // 证书到期时间。 + CertEndTime *string `json:"CertEndTime,omitempty" name:"CertEndTime"` + + // CLIENT NAME。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 创建CLIENT 状态。 + // 0 创建中 + // 1 创建出错 + // 2 更新中 + // 3 更新出错 + // 4 销毁中 + // 5 销毁出粗 + // 6 已连通 + // 7 未知 + State *string `json:"State,omitempty" name:"State"` +} + +type SslVpnSever struct { + // VPC实例ID. + // 注意:此字段可能返回 null,表示取不到有效值。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // SSL-VPN-SERVER 实例ID。 + SslVpnServerId *string `json:"SslVpnServerId,omitempty" name:"SslVpnServerId"` + + // VPN 实例ID。 + VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` + + // SSL-VPN-SERVER name。 + SslVpnServerName *string `json:"SslVpnServerName,omitempty" name:"SslVpnServerName"` - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` -} + // 本端地址段。 + LocalAddress []*string `json:"LocalAddress,omitempty" name:"LocalAddress"` -func (r *SetCcnRegionBandwidthLimitsResponse) ToJsonString() string { - b, _ := json.Marshal(r) - return string(b) -} + // 客户端地址段。 + RemoteAddress *string `json:"RemoteAddress,omitempty" name:"RemoteAddress"` -// FromJsonString It is highly **NOT** recommended to use this function -// because it has no param check, nor strict type check -func (r *SetCcnRegionBandwidthLimitsResponse) FromJsonString(s string) error { - return json.Unmarshal([]byte(s), &r) -} + // 客户端最大连接数。 + MaxConnection *uint64 `json:"MaxConnection,omitempty" name:"MaxConnection"` -type SourceIpTranslationNatRule struct { + // SSL-VPN 网关公网IP。 + WanIp *string `json:"WanIp,omitempty" name:"WanIp"` - // 资源ID - ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + // SSL VPN服务端监听协议 + SslVpnProtocol *string `json:"SslVpnProtocol,omitempty" name:"SslVpnProtocol"` - // 资源类型,目前包含SUBNET、NETWORKINTERFACE - // 注意:此字段可能返回 null,表示取不到有效值。 - ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + // SSL VPN服务端监听协议端口 + SslVpnPort *uint64 `json:"SslVpnPort,omitempty" name:"SslVpnPort"` - // 源IP/网段 - PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` + // 加密算法。 + EncryptAlgorithm *string `json:"EncryptAlgorithm,omitempty" name:"EncryptAlgorithm"` - // 弹性IP地址池 - PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses"` + // 认证算法。 + IntegrityAlgorithm *string `json:"IntegrityAlgorithm,omitempty" name:"IntegrityAlgorithm"` - // 描述 - Description *string `json:"Description,omitempty" name:"Description"` + // 是否支持压缩。 + Compress *uint64 `json:"Compress,omitempty" name:"Compress"` - // Snat规则ID - NatGatewaySnatId *string `json:"NatGatewaySnatId,omitempty" name:"NatGatewaySnatId"` + // 创建时间。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` - // NAT网关的ID。 - // 注意:此字段可能返回 null,表示取不到有效值。 - NatGatewayId *string `json:"NatGatewayId,omitempty" name:"NatGatewayId"` + // SSL-VPN-SERVER 创建状态。 + // 0 创建中 + // 1 创建出错 + // 2 更新中 + // 3 更新出错 + // 4 销毁中 + // 5 销毁出粗 + // 6 已连通 + // 7 未知 + State *uint64 `json:"State,omitempty" name:"State"` - // 私有网络VPC的ID。 - // 注意:此字段可能返回 null,表示取不到有效值。 - VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + // 是否开启SSO认证。1:开启 0: 不开启 + SsoEnabled *uint64 `json:"SsoEnabled,omitempty" name:"SsoEnabled"` - // NAT网关SNAT规则创建时间。 - // 注意:此字段可能返回 null,表示取不到有效值。 - CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + // EIAM应用ID + EiamApplicationId *string `json:"EiamApplicationId,omitempty" name:"EiamApplicationId"` + + // 是否开启策略控制。0:不开启 1: 开启 + AccessPolicyEnabled *uint64 `json:"AccessPolicyEnabled,omitempty" name:"AccessPolicyEnabled"` + + // 策略信息 + AccessPolicy []*AccessPolicy `json:"AccessPolicy,omitempty" name:"AccessPolicy"` } type Subnet struct { - // `VPC`实例`ID`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` @@ -16966,7 +25136,6 @@ type Subnet struct { } type SubnetInput struct { - // 子网的`CIDR`。 CidrBlock *string `json:"CidrBlock,omitempty" name:"CidrBlock"` @@ -16981,7 +25150,6 @@ type SubnetInput struct { } type Tag struct { - // 标签键 // 注意:此字段可能返回 null,表示取不到有效值。 Key *string `json:"Key,omitempty" name:"Key"` @@ -16992,7 +25160,6 @@ type Tag struct { } type TemplateLimit struct { - // 参数模板IP地址成员配额。 AddressTemplateMemberLimit *uint64 `json:"AddressTemplateMemberLimit,omitempty" name:"AddressTemplateMemberLimit"` @@ -17006,6 +25173,59 @@ type TemplateLimit struct { ServiceTemplateGroupMemberLimit *uint64 `json:"ServiceTemplateGroupMemberLimit,omitempty" name:"ServiceTemplateGroupMemberLimit"` } +type TrafficFlow struct { + // 实际流量,单位为 字节 + Value *uint64 `json:"Value,omitempty" name:"Value"` + + // 格式化后的流量,单位见参数 FormatUnit + // 注意:此字段可能返回 null,表示取不到有效值。 + FormatValue *float64 `json:"FormatValue,omitempty" name:"FormatValue"` + + // 格式化后流量的单位 + // 注意:此字段可能返回 null,表示取不到有效值。 + FormatUnit *string `json:"FormatUnit,omitempty" name:"FormatUnit"` +} + +type TrafficPackage struct { + // 流量包唯一ID + TrafficPackageId *string `json:"TrafficPackageId,omitempty" name:"TrafficPackageId"` + + // 流量包名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + TrafficPackageName *string `json:"TrafficPackageName,omitempty" name:"TrafficPackageName"` + + // 流量包总量,单位GB + TotalAmount *float64 `json:"TotalAmount,omitempty" name:"TotalAmount"` + + // 流量包剩余量,单位GB + RemainingAmount *float64 `json:"RemainingAmount,omitempty" name:"RemainingAmount"` + + // 流量包状态,可能的值有: AVAILABLE-可用状态, EXPIRED-已过期, EXHAUSTED-已用完, REFUNDED-已退还, DELETED-已删除 + Status *string `json:"Status,omitempty" name:"Status"` + + // 流量包创建时间 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 流量包截止时间 + Deadline *string `json:"Deadline,omitempty" name:"Deadline"` + + // 已使用的流量,单位GB + UsedAmount *float64 `json:"UsedAmount,omitempty" name:"UsedAmount"` + + // 流量包标签 + // 注意:此字段可能返回 null,表示取不到有效值。 + TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` + + // 区分闲时流量包与全时流量包 + DeductType *string `json:"DeductType,omitempty" name:"DeductType"` +} + +// Predefined struct for user +type TransformAddressRequestParams struct { + // 待操作有普通公网 IP 的实例 ID。实例 ID 形如:`ins-11112222`。可通过登录[控制台](https://console.cloud.tencent.com/cvm)查询,也可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/9389) 接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type TransformAddressRequest struct { *tchttp.BaseRequest @@ -17032,13 +25252,21 @@ func (r *TransformAddressRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type TransformAddressResponseParams struct { + // 异步任务TaskId。可以使用[DescribeTaskResult](https://cloud.tencent.com/document/api/215/36271)接口查询任务状态。 + TaskId *uint64 `json:"TaskId,omitempty" name:"TaskId"` + + // 转为弹性公网IP后的唯一ID + AddressId *string `json:"AddressId,omitempty" name:"AddressId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type TransformAddressResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *TransformAddressResponseParams `json:"Response"` } func (r *TransformAddressResponse) ToJsonString() string { @@ -17052,6 +25280,15 @@ func (r *TransformAddressResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6AddressesRequestParams struct { + // 弹性网卡实例`ID`,形如:`eni-m6dyj72l`。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的`IPv6`地址列表,单次最多指定10个。 + Ipv6Addresses []*Ipv6Address `json:"Ipv6Addresses,omitempty" name:"Ipv6Addresses"` +} + type UnassignIpv6AddressesRequest struct { *tchttp.BaseRequest @@ -17082,13 +25319,15 @@ func (r *UnassignIpv6AddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6AddressesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UnassignIpv6AddressesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UnassignIpv6AddressesResponseParams `json:"Response"` } func (r *UnassignIpv6AddressesResponse) ToJsonString() string { @@ -17102,13 +25341,22 @@ func (r *UnassignIpv6AddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6CidrBlockRequestParams struct { + // `VPC`实例`ID`,形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // `IPv6`网段。形如:`3402:4e00:20:1000::/56`。 + Ipv6CidrBlock *string `json:"Ipv6CidrBlock,omitempty" name:"Ipv6CidrBlock"` +} + type UnassignIpv6CidrBlockRequest struct { *tchttp.BaseRequest // `VPC`实例`ID`,形如:`vpc-f49l6u0z`。 VpcId *string `json:"VpcId,omitempty" name:"VpcId"` - // `IPv6`网段。形如:`3402:4e00:20:1000::/56` + // `IPv6`网段。形如:`3402:4e00:20:1000::/56`。 Ipv6CidrBlock *string `json:"Ipv6CidrBlock,omitempty" name:"Ipv6CidrBlock"` } @@ -17132,13 +25380,15 @@ func (r *UnassignIpv6CidrBlockRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6CidrBlockResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UnassignIpv6CidrBlockResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UnassignIpv6CidrBlockResponseParams `json:"Response"` } func (r *UnassignIpv6CidrBlockResponse) ToJsonString() string { @@ -17152,6 +25402,15 @@ func (r *UnassignIpv6CidrBlockResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6SubnetCidrBlockRequestParams struct { + // 子网所在私有网络`ID`。形如:`vpc-f49l6u0z`。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // `IPv6` 子网段列表。 + Ipv6SubnetCidrBlocks []*Ipv6SubnetCidrBlock `json:"Ipv6SubnetCidrBlocks,omitempty" name:"Ipv6SubnetCidrBlocks"` +} + type UnassignIpv6SubnetCidrBlockRequest struct { *tchttp.BaseRequest @@ -17182,13 +25441,15 @@ func (r *UnassignIpv6SubnetCidrBlockRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignIpv6SubnetCidrBlockResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UnassignIpv6SubnetCidrBlockResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UnassignIpv6SubnetCidrBlockResponseParams `json:"Response"` } func (r *UnassignIpv6SubnetCidrBlockResponse) ToJsonString() string { @@ -17202,6 +25463,18 @@ func (r *UnassignIpv6SubnetCidrBlockResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignPrivateIpAddressesRequestParams struct { + // 弹性网卡实例ID,例如:eni-m6dyj72l。 + NetworkInterfaceId *string `json:"NetworkInterfaceId,omitempty" name:"NetworkInterfaceId"` + + // 指定的内网IP信息,单次最多指定10个。 + PrivateIpAddresses []*PrivateIpAddressSpecification `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses"` + + // 网卡绑定的子机实例ID,该参数仅用于指定网卡退还IP并解绑子机的场景,如果不涉及解绑子机,请勿填写。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + type UnassignPrivateIpAddressesRequest struct { *tchttp.BaseRequest @@ -17236,13 +25509,15 @@ func (r *UnassignPrivateIpAddressesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type UnassignPrivateIpAddressesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type UnassignPrivateIpAddressesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *UnassignPrivateIpAddressesResponseParams `json:"Response"` } func (r *UnassignPrivateIpAddressesResponse) ToJsonString() string { @@ -17256,8 +25531,143 @@ func (r *UnassignPrivateIpAddressesResponse) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } -type Vpc struct { +// Predefined struct for user +type UnlockCcnBandwidthsRequestParams struct { + // 带宽实例对象数组。 + Instances []*CcnFlowLock `json:"Instances,omitempty" name:"Instances"` +} + +type UnlockCcnBandwidthsRequest struct { + *tchttp.BaseRequest + + // 带宽实例对象数组。 + Instances []*CcnFlowLock `json:"Instances,omitempty" name:"Instances"` +} + +func (r *UnlockCcnBandwidthsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *UnlockCcnBandwidthsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + delete(f, "Instances") + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UnlockCcnBandwidthsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type UnlockCcnBandwidthsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type UnlockCcnBandwidthsResponse struct { + *tchttp.BaseResponse + Response *UnlockCcnBandwidthsResponseParams `json:"Response"` +} + +func (r *UnlockCcnBandwidthsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *UnlockCcnBandwidthsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type UnlockCcnsRequestParams struct { +} + +type UnlockCcnsRequest struct { + *tchttp.BaseRequest +} + +func (r *UnlockCcnsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *UnlockCcnsRequest) FromJsonString(s string) error { + f := make(map[string]interface{}) + if err := json.Unmarshal([]byte(s), &f); err != nil { + return err + } + + if len(f) > 0 { + return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "UnlockCcnsRequest has unknown keys!", "") + } + return json.Unmarshal([]byte(s), &r) +} + +// Predefined struct for user +type UnlockCcnsResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type UnlockCcnsResponse struct { + *tchttp.BaseResponse + Response *UnlockCcnsResponseParams `json:"Response"` +} + +func (r *UnlockCcnsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +// FromJsonString It is highly **NOT** recommended to use this function +// because it has no param check, nor strict type check +func (r *UnlockCcnsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type UsedDetail struct { + // 流量包唯一ID + TrafficPackageId *string `json:"TrafficPackageId,omitempty" name:"TrafficPackageId"` + // 流量包名称 + // 注意:此字段可能返回 null,表示取不到有效值。 + TrafficPackageName *string `json:"TrafficPackageName,omitempty" name:"TrafficPackageName"` + + // 流量包总量 + TotalAmount *TrafficFlow `json:"TotalAmount,omitempty" name:"TotalAmount"` + + // 本次抵扣 + Deduction *TrafficFlow `json:"Deduction,omitempty" name:"Deduction"` + + // 本次抵扣后剩余量 + RemainingAmount *TrafficFlow `json:"RemainingAmount,omitempty" name:"RemainingAmount"` + + // 抵扣时间 + Time *string `json:"Time,omitempty" name:"Time"` + + // 资源类型。可能的值: CVM, LB, NAT, HAVIP, EIP + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 资源ID + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 资源名称 + ResourceName *string `json:"ResourceName,omitempty" name:"ResourceName"` + + // 流量包到期时间 + Deadline *string `json:"Deadline,omitempty" name:"Deadline"` +} + +type Vpc struct { // `VPC`名称。 VpcName *string `json:"VpcName,omitempty" name:"VpcName"` @@ -17300,7 +25710,6 @@ type Vpc struct { } type VpcEndPointServiceUser struct { - // AppId。 Owner *uint64 `json:"Owner,omitempty" name:"Owner"` @@ -17318,7 +25727,6 @@ type VpcEndPointServiceUser struct { } type VpcIpv6Address struct { - // `VPC`内`IPv6`地址。 Ipv6Address *string `json:"Ipv6Address,omitempty" name:"Ipv6Address"` @@ -17333,7 +25741,6 @@ type VpcIpv6Address struct { } type VpcLimit struct { - // 私有网络配额描述 LimitType *string `json:"LimitType,omitempty" name:"LimitType"` @@ -17342,7 +25749,6 @@ type VpcLimit struct { } type VpcPrivateIpAddress struct { - // `VPC`内网`IP`。 PrivateIpAddress *string `json:"PrivateIpAddress,omitempty" name:"PrivateIpAddress"` @@ -17356,8 +25762,17 @@ type VpcPrivateIpAddress struct { CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` } -type VpnConnection struct { +type VpcTaskResultDetailInfo struct { + // 资源ID。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ResourceId *string `json:"ResourceId,omitempty" name:"ResourceId"` + + // 状态。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Status *string `json:"Status,omitempty" name:"Status"` +} +type VpnConnection struct { // 通道实例ID。 VpnConnectionId *string `json:"VpnConnectionId,omitempty" name:"VpnConnectionId"` @@ -17414,10 +25829,28 @@ type VpnConnection struct { // 通道健康检查状态,AVAILABLE:正常,UNAVAILABLE:不正常。 未配置健康检查不返回该对象 HealthCheckStatus *string `json:"HealthCheckStatus,omitempty" name:"HealthCheckStatus"` + + // DPD探测开关。默认为0,表示关闭DPD探测。可选值:0(关闭),1(开启) + // 注意:此字段可能返回 null,表示取不到有效值。 + DpdEnable *int64 `json:"DpdEnable,omitempty" name:"DpdEnable"` + + // DPD超时时间。即探测确认对端不存在需要的时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DpdTimeout *string `json:"DpdTimeout,omitempty" name:"DpdTimeout"` + + // DPD超时后的动作。默认为clear。dpdEnable为1(开启)时有效。可取值为clear(断开)和restart(重试) + // 注意:此字段可能返回 null,表示取不到有效值。 + DpdAction *string `json:"DpdAction,omitempty" name:"DpdAction"` + + // 标签键值对数组 + TagSet []*Tag `json:"TagSet,omitempty" name:"TagSet"` + + // 协商类型 + // 注意:此字段可能返回 null,表示取不到有效值。 + NegotiationType *string `json:"NegotiationType,omitempty" name:"NegotiationType"` } type VpnGateway struct { - // 网关实例ID。 VpnGatewayId *string `json:"VpnGatewayId,omitempty" name:"VpnGatewayId"` @@ -17427,10 +25860,10 @@ type VpnGateway struct { // 网关实例名称。 VpnGatewayName *string `json:"VpnGatewayName,omitempty" name:"VpnGatewayName"` - // 网关实例类型:'IPSEC', 'SSL','CCN'。 + // 网关实例类型:'IPSEC', 'SSL','CCN','SSL_CCN'。 Type *string `json:"Type,omitempty" name:"Type"` - // 网关实例状态, 'PENDING':生产中,'DELETING':删除中,'AVAILABLE':运行中。 + // 网关实例状态, 'PENDING':生产中,'PENDING_ERROR':生产失败,'DELETING':删除中,'DELETING_ERROR':删除失败,'AVAILABLE':运行中。 State *string `json:"State,omitempty" name:"State"` // 网关公网IP。 @@ -17439,7 +25872,7 @@ type VpnGateway struct { // 网关续费类型:'NOTIFY_AND_MANUAL_RENEW':手动续费,'NOTIFY_AND_AUTO_RENEW':自动续费,'NOT_NOTIFY_AND_NOT_RENEW':到期不续费。 RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` - // 网关付费类型:POSTPAID_BY_HOUR:按小时后付费,PREPAID:包年包月预付费, + // 网关付费类型:POSTPAID_BY_HOUR:按量计费,PREPAID:包年包月预付费。 InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` // 网关出带宽。 @@ -17457,22 +25890,22 @@ type VpnGateway struct { // 计费模式变更,PREPAID_TO_POSTPAID:包年包月预付费到期转按小时后付费。 NewPurchasePlan *string `json:"NewPurchasePlan,omitempty" name:"NewPurchasePlan"` - // 网关计费装,PROTECTIVELY_ISOLATED:被安全隔离的实例,NORMAL:正常。 + // 网关计费状态,PROTECTIVELY_ISOLATED:被安全隔离的实例,NORMAL:正常。 RestrictState *string `json:"RestrictState,omitempty" name:"RestrictState"` - // 可用区,如:ap-guangzhou-2 + // 可用区,如:ap-guangzhou-2。 Zone *string `json:"Zone,omitempty" name:"Zone"` - // 网关带宽配额信息 + // 网关带宽配额信息。 VpnGatewayQuotaSet []*VpnGatewayQuota `json:"VpnGatewayQuotaSet,omitempty" name:"VpnGatewayQuotaSet"` - // 网关实例版本信息 + // 网关实例版本信息。 Version *string `json:"Version,omitempty" name:"Version"` - // Type值为CCN时,该值表示云联网实例ID + // Type值为CCN时,该值表示云联网实例ID。 NetworkInstanceId *string `json:"NetworkInstanceId,omitempty" name:"NetworkInstanceId"` - // CDC 实例ID + // CDC 实例ID。 CdcId *string `json:"CdcId,omitempty" name:"CdcId"` // SSL-VPN 客户端连接数。 @@ -17480,7 +25913,6 @@ type VpnGateway struct { } type VpnGatewayQuota struct { - // 带宽配额 Bandwidth *uint64 `json:"Bandwidth,omitempty" name:"Bandwidth"` @@ -17492,53 +25924,62 @@ type VpnGatewayQuota struct { } type VpnGatewayRoute struct { - - // 目的端IDC网段 + // 目的端IDC网段。 DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` - // 下一跳类型(关联实例类型)可选值:"VPNCONN"(VPN通道), "CCN"(CCN实例) + // 下一跳类型(关联实例类型)可选值:"VPNCONN"(VPN通道), "CCN"(CCN实例)。 InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` - // 下一跳实例ID + // 下一跳实例ID。 InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` - // 优先级, 可选值: 0, 100 + // 优先级,可选值:0,100。 Priority *int64 `json:"Priority,omitempty" name:"Priority"` - // 启用状态, 可选值: "ENABLE"(启用), "DISABLE"(禁用) + // 启用状态,可选值:"ENABLE"(启用),"DISABLE" (禁用)。 Status *string `json:"Status,omitempty" name:"Status"` - // 路由条目ID + // 路由条目ID。 RouteId *string `json:"RouteId,omitempty" name:"RouteId"` - // 路由类型, 可选值: "VPC"(VPC路由), "CCN"(云联网传播路由), "Static"(静态路由), "BGP"(BGP路由) + // 路由类型,可选值:"VPC"(VPC路由),"CCN"(云联网传播路由),"Static"(静态路由),"BGP"(BGP路由)。 Type *string `json:"Type,omitempty" name:"Type"` - // 创建时间 + // 创建时间。 CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` - // 更新时间 + // 更新时间。 UpdateTime *string `json:"UpdateTime,omitempty" name:"UpdateTime"` } type VpnGatewayRouteModify struct { - - // Vpn网关路由ID + // VPN网关路由ID。 RouteId *string `json:"RouteId,omitempty" name:"RouteId"` - // Vpn网关状态, ENABEL 启用, DISABLE禁用 + // VPN网关状态, ENABLE 启用, DISABLE禁用。 Status *string `json:"Status,omitempty" name:"Status"` } type VpngwCcnRoutes struct { - - // 路由信息ID + // 路由信息ID。 RouteId *string `json:"RouteId,omitempty" name:"RouteId"` - // 路由信息是否启用 + // 路由信息是否启用。 // ENABLE:启用该路由 // DISABLE:不启用该路由 Status *string `json:"Status,omitempty" name:"Status"` + + // 路由CIDR。 + DestinationCidrBlock *string `json:"DestinationCidrBlock,omitempty" name:"DestinationCidrBlock"` +} + +// Predefined struct for user +type WithdrawNotifyRoutesRequestParams struct { + // 路由表唯一ID。 + RouteTableId *string `json:"RouteTableId,omitempty" name:"RouteTableId"` + + // 路由策略唯一ID。 + RouteItemIds []*string `json:"RouteItemIds,omitempty" name:"RouteItemIds"` } type WithdrawNotifyRoutesRequest struct { @@ -17571,13 +26012,15 @@ func (r *WithdrawNotifyRoutesRequest) FromJsonString(s string) error { return json.Unmarshal([]byte(s), &r) } +// Predefined struct for user +type WithdrawNotifyRoutesResponseParams struct { + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + type WithdrawNotifyRoutesResponse struct { *tchttp.BaseResponse - Response *struct { - - // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` - } `json:"Response"` + Response *WithdrawNotifyRoutesResponseParams `json:"Response"` } func (r *WithdrawNotifyRoutesResponse) ToJsonString() string { diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_auto_scaling_group.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_auto_scaling_group.go index 595a50c03cbe..185e388dee80 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_auto_scaling_group.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_auto_scaling_group.go @@ -22,6 +22,8 @@ import ( "strings" apiv1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" @@ -46,7 +48,7 @@ func (ref TcRef) ToProviderID() string { } // TcRefFromProviderID creates InstanceConfig object from provider id which -// must be in format: tencentcloud:///100003/ins-3ven36lk +// must be in format: qcloud:///100003/ins-3ven36lk func TcRefFromProviderID(id string) (TcRef, error) { validIDRegex := regexp.MustCompile(`^qcloud\:\/\/\/[-0-9a-z]*\/[-0-9a-z]*$`) if validIDRegex.FindStringSubmatch(id) == nil { @@ -245,6 +247,7 @@ func (asg *tcAsg) TemplateNodeInfo() (*schedulerframework.NodeInfo, error) { if err != nil { return nil, err } + klog.V(4).Infof("Generate tencentcloud template: labels=%v taints=%v allocatable=%v", node.Labels, node.Spec.Taints, node.Status.Allocatable) nodeInfo := schedulerframework.NewNodeInfo() nodeInfo.SetNode(node) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cache.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cache.go index 02fe4694a8bb..9597a81257a5 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cache.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cache.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import ( "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419" ) // TencentcloudCache is used for caching cluster resources state. @@ -52,7 +52,7 @@ type TencentcloudCache struct { // Cache content. asgs map[TcRef]Asg - instanceRefToAsgRef map[TcRef]TcRef + instanceRefToAsgRef map[TcRef]*TcRef instancesFromUnknownAsgs map[TcRef]struct{} asgTargetSizeCache map[TcRef]int64 instanceTypeCache map[TcRef]string @@ -68,7 +68,7 @@ func NewTencentcloudCache(service CloudService) *TencentcloudCache { registry := &TencentcloudCache{ cloudService: service, asgs: make(map[TcRef]Asg), - instanceRefToAsgRef: make(map[TcRef]TcRef), + instanceRefToAsgRef: make(map[TcRef]*TcRef), instancesFromUnknownAsgs: make(map[TcRef]struct{}), asgTargetSizeCache: make(map[TcRef]int64), instanceTypeCache: make(map[TcRef]string), @@ -133,6 +133,11 @@ func (tc *TencentcloudCache) FindForInstance(instanceRef TcRef) (Asg, error) { return nil, err } + if asgRef == nil { + tc.instancesFromUnknownAsgs[instanceRef] = struct{}{} + return nil, nil + } + tc.instanceRefToAsgRef[instanceRef] = asgRef asg, found := tc.getAsgNoLock(asgRef) if !found { @@ -232,14 +237,14 @@ func (tc *TencentcloudCache) InvalidateAllAsgTargetSizes() { func (tc *TencentcloudCache) removeInstancesForAsgs(asgRef TcRef) { for instanceRef, instanceAsgRef := range tc.instanceRefToAsgRef { - if asgRef == instanceAsgRef { + if asgRef.ID == instanceAsgRef.ID { delete(tc.instanceRefToAsgRef, instanceRef) } } } -func (tc *TencentcloudCache) getAsgNoLock(asgRef TcRef) (asg Asg, found bool) { - asg, found = tc.asgs[asgRef] +func (tc *TencentcloudCache) getAsgNoLock(asgRef *TcRef) (asg Asg, found bool) { + asg, found = tc.asgs[*asgRef] return } @@ -266,7 +271,7 @@ func (tc *TencentcloudCache) regenerateInstanceCacheForAsgNoLock(asgRef TcRef) e if err != nil { return err } - tc.instanceRefToAsgRef[instanceRef] = asgRef + tc.instanceRefToAsgRef[instanceRef] = &asgRef } return nil } @@ -276,7 +281,7 @@ func (tc *TencentcloudCache) RegenerateInstancesCache() error { tc.cacheMutex.Lock() defer tc.cacheMutex.Unlock() - tc.instanceRefToAsgRef = make(map[TcRef]TcRef) + tc.instanceRefToAsgRef = make(map[TcRef]*TcRef) tc.instancesFromUnknownAsgs = make(map[TcRef]struct{}) for _, asgRef := range tc.getAsgRefs() { err := tc.regenerateInstanceCacheForAsgNoLock(asgRef) @@ -319,7 +324,12 @@ func (tc *TencentcloudCache) RegenerateAutoScalingGroupCache() error { return err } - klog.V(5).Infof("input %d asgIDs(%v), return %d asg", len(asgIDs), asgIDs, len(tcAsgs)) + if len(asgIDs) != len(tcAsgs) { + klog.Warningf("%d scaling groups are configured, but only %d are valid", len(asgIDs), len(tcAsgs)) + if len(tcAsgs) == 0 { + klog.Exit("no valid autoscaling group") + } + } asgMap := make(map[string]as.AutoScalingGroup) ascMap := make(map[string]as.LaunchConfiguration) diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go index 6454ca931295..a33c140fb315 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_cloud_provider.go @@ -185,7 +185,7 @@ func BuildTencentcloud(opts config.AutoscalingOptions, do cloudprovider.NodeGrou defer config.Close() } - manager, err := CreateTencentcloudManager(config, do, opts.Regional) + manager, err := CreateTencentcloudManager(do, opts.Regional) if err != nil { klog.Fatalf("Failed to create Tencentcloud Manager: %v", err) } diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_manager.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_manager.go index 533c25336b25..4e5f3ca01cd3 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_manager.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_manager.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,11 +17,12 @@ limitations under the License. package tencentcloud import ( - "encoding/json" + "errors" "fmt" - "io" "math/rand" "os" + "regexp" + "strings" "sync" "time" @@ -32,53 +33,17 @@ import ( "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - cvm "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" - tke "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - vpc "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/client" + as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" - "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" ) const ( - retryCountStop = 5 - intervalTimeStop = 5 * time.Second - tokenExpiredTime = 7200 - - serviceName = "cluster-autoscaler" refreshInterval = 1 * time.Minute scaleToZeroSupported = true ) -// network extended resources -const ( - TKERouteENIIP = "tke.cloud.tencent.com/eni-ip" - TKEDirectENI = "tke.cloud.tencent.com/direct-eni" -) - -// vcuda resources -const ( - VCudaCore = "tencent.com/vcuda-core" - VCudaMemory = "tencent.com/vcuda-memory" -) - -// GPUMemoryMap is a coefficient to get gpu extended resources -var ( - GPUMemoryMap = map[string]int64{ - "GN10X": 32, - "GN10S": 16, - "GN10": 16, - "GN8": 24, - "GN7": 16, - "GN6": 8, - "GN6S": 8, - "GN2": 24, - "GN7vw": 16, - "GC1": 11, - } -) - // TencentcloudManager is handles tencentcloud communication and data caching. type TencentcloudManager interface { // Refresh triggers refresh of cached resources. @@ -118,14 +83,7 @@ type tencentcloudManagerImpl struct { // CloudConfig represent tencentcloud configuration type CloudConfig struct { - Region string `json:"region"` - RegionName string `json:"regionName"` - Zone string `json:"zone"` - DryRun bool `json:dryRun` - SecretID string - SecretKey string - ClusterID string - IsTest bool + Region string `json:"region"` } // LabelAutoScalingGroupID represents the label of AutoScalingGroup @@ -133,50 +91,11 @@ const LabelAutoScalingGroupID = "cloud.tencent.com/auto-scaling-group-id" var cloudConfig CloudConfig -func readCloudConfig(configReader io.Reader) error { - if configReader == nil { - return fmt.Errorf("tencentcloud cloud config is not exists") - } - - if err := json.NewDecoder(configReader).Decode(&cloudConfig); err != nil { - return err - } - - testEnv := os.Getenv("TEST_ENV") - if testEnv == "true" { - cloudConfig.IsTest = true - } - - dryRun := os.Getenv("DRY_RUN") - if dryRun == "true" { - cloudConfig.DryRun = true - } - - secretID := os.Getenv("SECRET_ID") - secretKey := os.Getenv("SECRET_KEY") - region := os.Getenv("REGION") - regionName := os.Getenv("REGION_NAME") - clusterID := os.Getenv("CLUSTER_ID") - if secretID == "" { - return fmt.Errorf("please specify the environment variable: SECRET_ID") - } - if secretKey == "" { - return fmt.Errorf("please specify the environment variable: SECRET_KEY") - } - if region == "" { - return fmt.Errorf("please specify the environment variable: REGION") - } - if regionName == "" { - return fmt.Errorf("please specify the environment variable: REGION_NAME") - } - if clusterID == "" { - return fmt.Errorf("please specify the environment variable: CLUSTER_ID") +func readCloudConfig() error { + cloudConfig.Region = os.Getenv("REGION") + if cloudConfig.Region == "" { + return errors.New("invalid REGION") } - cloudConfig.SecretID = secretID - cloudConfig.SecretKey = secretKey - cloudConfig.Region = region - cloudConfig.RegionName = regionName - cloudConfig.ClusterID = clusterID klog.V(4).Infof("tencentcloud config %+v", cloudConfig) @@ -184,36 +103,21 @@ func readCloudConfig(configReader io.Reader) error { } // CreateTencentcloudManager constructs tencentcloudManager object. -func CreateTencentcloudManager(configReader io.Reader, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, regional bool) (TencentcloudManager, error) { - err := readCloudConfig(configReader) +func CreateTencentcloudManager(discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, regional bool) (TencentcloudManager, error) { + err := readCloudConfig() if err != nil { return nil, err } - credential := common.NewCredential(cloudConfig.SecretID, cloudConfig.SecretKey) - cvmClient, err := cvm.NewClient(credential, cloudConfig.RegionName, newCVMClientProfile()) - if err != nil { - return nil, err - } - vpcClient, err := vpc.NewClient(credential, cloudConfig.RegionName, newVPCClientProfile()) - if err != nil { - return nil, err - } - asClient, err := as.NewClient(credential, cloudConfig.RegionName, newASClientProfile()) - if err != nil { - return nil, err - } - tkeClient, err := tke.NewClient(credential, cloudConfig.RegionName, newTKEClientProfile()) - if err != nil { - return nil, err - } + credential := common.NewCredential( + os.Getenv("SECRET_ID"), + os.Getenv("SECRET_KEY"), + ) + cvmClient := client.NewClient(credential, cloudConfig.Region, newCVMClientProfile()) + vpcClient := client.NewClient(credential, cloudConfig.Region, newVPCClientProfile()) + asClient := client.NewClient(credential, cloudConfig.Region, newASClientProfile()) - var service CloudService - if cloudConfig.DryRun { - service = NewCloudMockService(cvmClient, vpcClient, asClient, tkeClient) - } else { - service = NewCloudService(cvmClient, vpcClient, asClient, tkeClient) - } + service := NewCloudService(cvmClient, vpcClient, asClient) manager := &tencentcloudManagerImpl{ cache: NewTencentcloudCache(service), @@ -392,9 +296,8 @@ func (m *tencentcloudManagerImpl) DeleteInstances(instances []TcRef) error { } m.cache.InvalidateAsgTargetSize(commonAsg.TencentcloudRef()) - m.cache.cloudService.DeleteInstances(commonAsg, toDeleteInstances) - return nil + return m.cache.cloudService.DeleteInstances(commonAsg, toDeleteInstances) } // GetAsgNodes returns Asg nodes. @@ -431,15 +334,8 @@ type InstanceTemplate struct { Cpu int64 Mem int64 Gpu int64 - // gpu虚拟化资源 - VCudaCore int64 - VCudaMem int64 - // vpc-cni的集群eni-ip资源 - TKERouteENIIP int64 - TKEDirectENI int64 - Label map[string]string - Taints []*tke.Taint + Tags []*as.Tag } // NetworkExtendedResources represents network extended resources @@ -460,46 +356,13 @@ func (m *tencentcloudManagerImpl) GetAsgInstanceTemplate(asgRef TcRef) (*Instanc return instanceTemplate, nil } - getNetworkExtendedResources := func(instanceType string) (*NetworkExtendedResources, error) { - if resources, exist := networkExtendedResourcesMap[instanceType]; exist { - return resources, nil - } - - pli, err := m.cloudService.DescribeVpcCniPodLimits(instanceType) - if err != nil { - return nil, err - } - resources := &NetworkExtendedResources{} - if pli != nil { - if pli.PodLimits == nil || - pli.PodLimits.TKERouteENINonStaticIP == nil || - pli.PodLimits.TKEDirectENI == nil { - return nil, fmt.Errorf("get wrong eni limits(nil)") - } - resources.TKEDirectENI = *pli.PodLimits.TKEDirectENI - resources.TKERouteENIIP = *pli.PodLimits.TKERouteENINonStaticIP - } - - klog.Infof("%v", resources) - networkExtendedResourcesMap[instanceType] = resources - - return resources, nil - } instanceInfo, err := m.cloudService.GetInstanceInfoByType(m.cache.GetInstanceType(asgRef)) if err != nil { - return nil, err - } - npInfo, err := m.cloudService.GetNodePoolInfo(cloudConfig.ClusterID, asgRef.ID) - if err != nil { - return nil, err + klog.Warningf("Failed to query instance type `%s` for %s: %v", m.cache.GetInstanceType(asgRef), asgRef.ID, err) + return nil, cloudprovider.ErrNotImplemented } labels := make(map[string]string) - for _, label := range npInfo.Labels { - if label.Name != nil && label.Value != nil { - labels[*label.Name] = *label.Value - } - } labels[LabelAutoScalingGroupID] = asgRef.ID asg, err := m.cloudService.GetAutoScalingGroup(asgRef) @@ -507,7 +370,7 @@ func (m *tencentcloudManagerImpl) GetAsgInstanceTemplate(asgRef TcRef) (*Instanc return nil, err } if len(asg.SubnetIdSet) < 1 || asg.SubnetIdSet[0] == nil { - return nil, fmt.Errorf("Failed to get asg zone") + return nil, fmt.Errorf("failed to get asg zone") } zone, err := m.cloudService.GetZoneBySubnetID(*asg.SubnetIdSet[0]) if err != nil { @@ -518,31 +381,14 @@ func (m *tencentcloudManagerImpl) GetAsgInstanceTemplate(asgRef TcRef) (*Instanc return nil, err } - // eni - networkExtendedResources, err := getNetworkExtendedResources(instanceInfo.InstanceType) - if err != nil { - return nil, err - } - - gpuMult, ok := GPUMemoryMap[instanceInfo.InstanceFamily] - if !ok { - gpuMult = 24 - } - vcudaMem := instanceInfo.GPU * gpuMult * 4 - instanceTemplate = &InstanceTemplate{ - InstanceType: instanceInfo.InstanceType, - Region: cloudConfig.Region, - Zone: *zoneInfo.ZoneId, - Cpu: instanceInfo.CPU, - Mem: instanceInfo.Memory, - Gpu: instanceInfo.GPU, - VCudaCore: instanceInfo.GPU * 100, - VCudaMem: vcudaMem, - TKEDirectENI: networkExtendedResources.TKEDirectENI, - TKERouteENIIP: networkExtendedResources.TKERouteENIIP, - Label: labels, - Taints: npInfo.Taints, + InstanceType: instanceInfo.InstanceType, + Region: cloudConfig.Region, + Zone: *zoneInfo.ZoneId, + Cpu: instanceInfo.CPU, + Mem: instanceInfo.Memory, + Gpu: instanceInfo.GPU, + Tags: asg.Tags, } m.cache.SetAsgInstanceTemplate(asgRef, instanceTemplate) @@ -572,29 +418,23 @@ func (m *tencentcloudManagerImpl) GetAsgTemplateNode(asg Asg) (*apiv1.Node, erro node.Status.Capacity[apiv1.ResourcePods] = *resource.NewQuantity(110, resource.DecimalSI) node.Status.Capacity[apiv1.ResourceCPU] = *resource.NewQuantity(template.Cpu, resource.DecimalSI) node.Status.Capacity[apiv1.ResourceMemory] = *resource.NewQuantity(template.Mem*1024*1024*1024, resource.DecimalSI) - if template.TKERouteENIIP > 0 { - node.Status.Capacity[TKERouteENIIP] = *resource.NewQuantity(template.TKERouteENIIP, resource.DecimalSI) - } - if template.TKEDirectENI > 0 { - node.Status.Capacity[TKEDirectENI] = *resource.NewQuantity(template.TKEDirectENI, resource.DecimalSI) - } - if template.Gpu > 0 { - node.Status.Capacity[gpu.ResourceNvidiaGPU] = *resource.NewQuantity(template.Gpu, resource.DecimalSI) - node.Status.Capacity[VCudaCore] = *resource.NewQuantity(template.VCudaCore, resource.DecimalSI) - node.Status.Capacity[VCudaMemory] = *resource.NewQuantity(template.VCudaMem, resource.DecimalSI) - klog.Infof("Capacity resource set gpu %s(%d)", gpu.ResourceNvidiaGPU, template.Gpu) + resourcesFromTags := extractAllocatableResourcesFromAsg(template.Tags) + klog.V(5).Infof("Extracted resources from ASG tags %v", resourcesFromTags) + for resourceName, val := range resourcesFromTags { + node.Status.Capacity[apiv1.ResourceName(resourceName)] = *val } // TODO: use proper allocatable!! node.Status.Allocatable = node.Status.Capacity - node.Labels = cloudprovider.JoinStringMaps(node.Labels, template.Label) - // GenericLabels node.Labels = cloudprovider.JoinStringMaps(node.Labels, buildGenericLabels(template, nodeName)) - node.Spec.Taints = extractTaintsFromAsg(template.Taints) + // NodeLabels + node.Labels = cloudprovider.JoinStringMaps(node.Labels, extractLabelsFromAsg(template.Tags)) + + node.Spec.Taints = extractTaintsFromAsg(template.Tags) node.Status.Conditions = cloudprovider.BuildReadyConditions() @@ -608,23 +448,101 @@ func buildGenericLabels(template *InstanceTemplate, nodeName string) map[string] result[apiv1.LabelOSStable] = cloudprovider.DefaultOS result[apiv1.LabelInstanceType] = template.InstanceType + result[apiv1.LabelInstanceTypeStable] = template.InstanceType result[apiv1.LabelZoneRegion] = template.Region + result[apiv1.LabelZoneRegionStable] = template.Region result[apiv1.LabelZoneFailureDomain] = template.Zone + result[apiv1.LabelZoneFailureDomainStable] = template.Zone result[apiv1.LabelHostname] = nodeName return result } -func extractTaintsFromAsg(npTaints []*tke.Taint) []apiv1.Taint { +func extractLabelsFromAsg(tags []*as.Tag) map[string]string { + result := make(map[string]string) + + for _, tag := range tags { + k := *tag.Key + v := *tag.Value + splits := strings.Split(k, "k8s.io/cluster-autoscaler/node-template/label/") + // Extract TKE labels from ASG + if len(splits) <= 1 { + splits = strings.Split(k, "tencentcloud:") + } + if len(splits) > 1 { + label := splits[1] + if label != "" { + result[label] = v + } + } + } + + return result +} + +func extractAllocatableResourcesFromAsg(tags []*as.Tag) map[string]*resource.Quantity { + result := make(map[string]*resource.Quantity) + + for _, tag := range tags { + k := *tag.Key + v := *tag.Value + splits := strings.Split(k, "k8s.io/cluster-autoscaler/node-template/resources/") + if len(splits) > 1 { + label := splits[1] + if label != "" { + quantity, err := resource.ParseQuantity(v) + if err != nil { + continue + } + result[label] = &quantity + } + } + } + + return result +} + +func extractAllocatableResourcesFromTags(tags map[string]string) map[string]*resource.Quantity { + result := make(map[string]*resource.Quantity) + + for k, v := range tags { + splits := strings.Split(k, "k8s.io/cluster-autoscaler/node-template/resources/") + if len(splits) > 1 { + label := splits[1] + if label != "" { + quantity, err := resource.ParseQuantity(v) + if err != nil { + klog.Warningf("Failed to parse resource quanitity '%s' for resource '%s'", v, label) + continue + } + result[label] = &quantity + } + } + } + + return result +} + +func extractTaintsFromAsg(tags []*as.Tag) []apiv1.Taint { taints := make([]apiv1.Taint, 0) - for _, npTaint := range npTaints { - if npTaint != nil && npTaint.Key != nil && npTaint.Value != nil && npTaint.Effect != nil { - taints = append(taints, apiv1.Taint{ - Key: *npTaint.Key, - Value: *npTaint.Value, - Effect: apiv1.TaintEffect(*npTaint.Effect), - }) + for _, tag := range tags { + k := *tag.Key + v := *tag.Value + // The tag value must be in the format :NoSchedule + r, _ := regexp.Compile("(.*):(?:NoSchedule|NoExecute|PreferNoSchedule)") + if r.MatchString(v) { + splits := strings.Split(k, "k8s.io/cluster-autoscaler/node-template/taint/") + if len(splits) > 1 { + values := strings.SplitN(v, ":", 2) + if len(values) > 1 { + taints = append(taints, apiv1.Taint{ + Key: splits[1], + Value: values[0], + Effect: apiv1.TaintEffect(values[1]), + }) + } + } } } return taints diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_mock_service.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_mock_service.go deleted file mode 100644 index 8528f779965c..000000000000 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_mock_service.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package tencentcloud - -import ( - as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" - cvm "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" - tke "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - vpc "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" - "k8s.io/klog/v2" -) - -// MockCloudService mock cloud service -type MockCloudService struct { - CloudService -} - -// NewCloudMockService creates an instance of caching MockCloudService -func NewCloudMockService(cvmClient *cvm.Client, vpcClient *vpc.Client, asClient *as.Client, tkeClient *tke.Client) CloudService { - return &MockCloudService{ - CloudService: NewCloudService(cvmClient, vpcClient, asClient, tkeClient), - } -} - -// DeleteInstances remove instances of specified ASG. -func (mcs *MockCloudService) DeleteInstances(asg Asg, instances []string) error { - klog.Infof("Delete Instances %v from %s", instances, asg.TencentcloudRef().String()) - return nil -} - -// ResizeAsg set the target size of ASG. -func (mcs *MockCloudService) ResizeAsg(ref TcRef, size uint64) error { - klog.Infof("Resize %s to %d", ref.String(), size) - return nil -} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_profiles.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_profiles.go index a0d3368c6ce2..d030cd64c0b4 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_profiles.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_profiles.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,53 +16,29 @@ limitations under the License. package tencentcloud -import "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" +import "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common/profile" // Tencent Cloud Service Http Endpoint const ( ASHttpEndpoint = "as.tencentcloudapi.com" VPCHttpEndpoint = "vpc.tencentcloudapi.com" CVMHttpEndpoint = "cvm.tencentcloudapi.com" - TKEHttpEndpoint = "tke.tencentcloudapi.com" - - TestASHttpEndpoint = "as.test.tencentcloudapi.com" - TestVPCHttpEndpoint = "vpc.test.tencentcloudapi.com" - TestCVMHttpEndpoint = "cvm.test.tencentcloudapi.com" - TestTKEHttpEndpoint = "tke.test.tencentcloudapi.com" ) func newASClientProfile() *profile.ClientProfile { cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = ASHttpEndpoint - if cloudConfig.IsTest { - cpf.HttpProfile.Endpoint = TestASHttpEndpoint - } return cpf } func newVPCClientProfile() *profile.ClientProfile { cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = VPCHttpEndpoint - if cloudConfig.IsTest { - cpf.HttpProfile.Endpoint = TestVPCHttpEndpoint - } return cpf } func newCVMClientProfile() *profile.ClientProfile { cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = CVMHttpEndpoint - if cloudConfig.IsTest { - cpf.HttpProfile.Endpoint = TestCVMHttpEndpoint - } - return cpf -} - -func newTKEClientProfile() *profile.ClientProfile { - cpf := profile.NewClientProfile() - cpf.HttpProfile.Endpoint = TKEHttpEndpoint - if cloudConfig.IsTest { - cpf.HttpProfile.Endpoint = TestTKEHttpEndpoint - } return cpf } diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_service.go b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_service.go index 312cbc4defe4..be4ebf1fb9a6 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_service.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud_service.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,23 +17,20 @@ limitations under the License. package tencentcloud import ( + "context" "fmt" - "time" + gerrors "github.com/pkg/errors" "k8s.io/klog/v2" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/metrics" - as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - cvm "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" - tke "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - vpc "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/client" + as "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/as/v20180419" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/common" + cvm "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/cvm/v20170312" + vpc "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/tencentcloud/tencentcloud-sdk-go/vpc/v20170312" ) -const deleteInstanceModeTerminate = "terminate" - // CloudService is used for communicating with Tencentcloud API. type CloudService interface { // FetchAsgInstances returns instances of the specified ASG. @@ -41,25 +38,21 @@ type CloudService interface { // DeleteInstances remove instances of specified ASG. DeleteInstances(Asg, []string) error // GetAsgRefByInstanceRef returns asgRef according to instanceRef - GetAsgRefByInstanceRef(TcRef) (TcRef, error) + GetAsgRefByInstanceRef(TcRef) (*TcRef, error) // GetAutoScalingGroups queries and returns a set of ASG. GetAutoScalingGroups([]string) ([]as.AutoScalingGroup, error) // GetAutoscalingConfigs queries and returns a set of ASG launchconfiguration. GetAutoscalingConfigs([]string) ([]as.LaunchConfiguration, error) // GetAutoScalingGroups queries and returns a set of ASG. - GetAutoScalingGroup(TcRef) (as.AutoScalingGroup, error) + GetAutoScalingGroup(TcRef) (*as.AutoScalingGroup, error) // ResizeAsg set the target size of ASG. ResizeAsg(TcRef, uint64) error // GetAutoScalingInstances returns instances of specific ASG. GetAutoScalingInstances(TcRef) ([]*as.Instance, error) // GetTencentcloudInstanceRef returns a Tencentcloud ref. - GetTencentcloudInstanceRef(*as.Instance) (TcRef, error) - // DescribeVpcCniPodLimits list network limits - DescribeVpcCniPodLimits(string) (*tke.PodLimitsInstance, error) + GetTencentcloudInstanceRef(*as.Instance) (*TcRef, error) // GetInstanceInfoByType queries the number of CPU, memory, and GPU resources of the model configured for generating template GetInstanceInfoByType(string) (*InstanceInfo, error) - // GetNodePoolInfo returns nodepool information from TKE. - GetNodePoolInfo(string, string) (*NodePoolInfo, error) // GetZoneBySubnetID return zone by subnetID. GetZoneBySubnetID(string) (string, error) // GetZoneInfo invokes cvm.DescribeZones to query zone information. @@ -68,28 +61,13 @@ type CloudService interface { // CloudServiceImpl provides several utility methods over the auto-scaling cloudService provided by Tencentcloud SDK type CloudServiceImpl struct { - asClient *as.Client - cvmClient *cvm.Client - tkeClient *tke.Client - vpcClient *vpc.Client + asClient, cvmClient, vpcClient client.Client } const ( maxRecordsReturnedByAPI = 100 ) -// CVM stop mode -const ( - StoppedModeStopCharging = "STOP_CHARGING" - StoppedModeKeepCharging = "KEEP_CHARGING" -) - -// AS scaling mode -const ( - ScalingModeClassic = "CLASSIC_SCALING" - ScalingModeWakeUpStopped = "WAKE_UP_STOPPED_SCALING" -) - var zoneInfos = make(map[string]*cvm.ZoneInfo) // SubnetInfo represents subnet's detail @@ -100,12 +78,11 @@ type SubnetInfo struct { } // NewCloudService creates an instance of caching CloudServiceImpl -func NewCloudService(cvmClient *cvm.Client, vpcClient *vpc.Client, asClient *as.Client, tkeClient *tke.Client) CloudService { +func NewCloudService(cvmClient, vpcClient, asClient client.Client) CloudService { return &CloudServiceImpl{ cvmClient: cvmClient, vpcClient: vpcClient, asClient: asClient, - tkeClient: tkeClient, } } @@ -130,32 +107,27 @@ func (ts *CloudServiceImpl) FetchAsgInstances(asgRef TcRef) ([]cloudprovider.Ins } // DeleteInstances remove instances of specified ASG. -// NOTICE: 一般情况下都是移除一个节点,只有在创建失败时才有批量移除,暂未分页处理 -// 如果是关机模式的伸缩组进行关机操作,其它进行移除操作 -// 目前执行移除操作走 TKE 接口,需要 cluster 属性,开源时切换为 as 接口 func (ts *CloudServiceImpl) DeleteInstances(asg Asg, instances []string) error { - // TODO 处理缩容保护 - - if asg.GetScalingType() == ScalingModeWakeUpStopped { - return ts.stopInstances(asg, instances) + if ts.asClient == nil { + return fmt.Errorf("asClient is not initialized") } - if ts.tkeClient == nil { - return fmt.Errorf("tkeClient is not initialized") - } - req := tke.NewDeleteClusterInstancesRequest() + req := as.NewRemoveInstancesRequest() + req.AutoScalingGroupId = common.StringPtr(asg.Id()) req.InstanceIds = common.StringPtrs(instances) - req.ClusterId = &cloudConfig.ClusterID - req.InstanceDeleteMode = common.StringPtr(deleteInstanceModeTerminate) - - _, err := ts.tkeClient.DeleteClusterInstances(req) + res := as.NewRemoveInstancesResponse() + err := ts.asClient.Send(context.TODO(), req, res) if err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - metrics.RegisterCloudAPIInvokedError("tke", "DeleteClusterInstances", e.Code) - } + return gerrors.Wrap(err, "[CloudAPIError]") } + if res == nil || res.Response == nil || + res.Response.ActivityId == nil || + res.Response.RequestId == nil { + return fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) + } + klog.V(4).Infof("Remove instances %v, asaID: %s, requestID: %s", instances, *res.Response.ActivityId, *res.Response.RequestId) - return err + return nil } // GetAutoscalingConfigs queries and returns a set of ASG launchconfiguration. @@ -172,15 +144,14 @@ func (ts *CloudServiceImpl) GetAutoscalingConfigs(ascs []string) ([]as.LaunchCon req := as.NewDescribeLaunchConfigurationsRequest() req.LaunchConfigurationIds = common.StringPtrs(ascs) req.Limit = common.Uint64Ptr(maxRecordsReturnedByAPI) - resp, err := ts.asClient.DescribeLaunchConfigurations(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeLaunchConfigurations", err) + resp := as.NewDescribeLaunchConfigurationsResponse() + err := ts.asClient.Send(context.TODO(), req, resp) if err != nil { - return nil, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } - if resp == nil || resp.Response == nil || - resp.Response.LaunchConfigurationSet == nil { - return nil, fmt.Errorf("DescribeLaunchConfigurations returned a invalid response") + if resp == nil || resp.Response == nil || resp.Response.LaunchConfigurationSet == nil { + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } res := make([]as.LaunchConfiguration, 0) @@ -190,10 +161,6 @@ func (ts *CloudServiceImpl) GetAutoscalingConfigs(ascs []string) ([]as.LaunchCon } } - if len(res) != len(ascs) { - return nil, fmt.Errorf("DescribeLaunchConfigurations need: %d, real: %d", len(ascs), len(res)) - } - return res, nil } @@ -213,39 +180,38 @@ func (ts *CloudServiceImpl) GetInstanceInfoByType(instanceType string) (*Instanc } // DescribeZoneInstanceConfigInfos - instanceTypeRequest := cvm.NewDescribeInstanceTypeConfigsRequest() - instanceTypeRequest.Filters = []*cvm.Filter{ + req := cvm.NewDescribeInstanceTypeConfigsRequest() + req.Filters = []*cvm.Filter{ { Name: common.StringPtr("instance-type"), Values: []*string{&instanceType}, }, } - - resp, err := ts.cvmClient.DescribeInstanceTypeConfigs(instanceTypeRequest) - metrics.RegisterCloudAPIInvoked("cvm", "DescribeInstanceTypeConfigs", err) + res := cvm.NewDescribeInstanceTypeConfigsResponse() + err := ts.cvmClient.Send(context.TODO(), req, res) if err != nil { - return nil, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } - if resp == nil || - resp.Response == nil || - resp.Response.InstanceTypeConfigSet == nil || - len(resp.Response.InstanceTypeConfigSet) < 1 || - resp.Response.InstanceTypeConfigSet[0].CPU == nil || - resp.Response.InstanceTypeConfigSet[0].Memory == nil || - resp.Response.InstanceTypeConfigSet[0].GPU == nil || - resp.Response.InstanceTypeConfigSet[0].InstanceFamily == nil || - resp.Response.InstanceTypeConfigSet[0].InstanceType == nil || - resp.Response.InstanceTypeConfigSet[0].Zone == nil { - return nil, fmt.Errorf("DescribeInstanceTypeConfigs returned a invalid response") + if res == nil || + res.Response == nil || + res.Response.InstanceTypeConfigSet == nil || + len(res.Response.InstanceTypeConfigSet) < 1 || + res.Response.InstanceTypeConfigSet[0].CPU == nil || + res.Response.InstanceTypeConfigSet[0].Memory == nil || + res.Response.InstanceTypeConfigSet[0].GPU == nil || + res.Response.InstanceTypeConfigSet[0].InstanceFamily == nil || + res.Response.InstanceTypeConfigSet[0].InstanceType == nil || + res.Response.InstanceTypeConfigSet[0].Zone == nil { + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } return &InstanceInfo{ - *resp.Response.InstanceTypeConfigSet[0].CPU, - *resp.Response.InstanceTypeConfigSet[0].Memory, - *resp.Response.InstanceTypeConfigSet[0].GPU, - *resp.Response.InstanceTypeConfigSet[0].InstanceFamily, - *resp.Response.InstanceTypeConfigSet[0].InstanceType, + *res.Response.InstanceTypeConfigSet[0].CPU, + *res.Response.InstanceTypeConfigSet[0].Memory, + *res.Response.InstanceTypeConfigSet[0].GPU, + *res.Response.InstanceTypeConfigSet[0].InstanceFamily, + *res.Response.InstanceTypeConfigSet[0].InstanceType, }, nil } @@ -263,18 +229,18 @@ func (ts *CloudServiceImpl) GetAutoScalingGroups(asgIds []string) ([]as.AutoScal req.AutoScalingGroupIds = common.StringPtrs(asgIds) req.Limit = common.Uint64Ptr(maxRecordsReturnedByAPI) - response, err := ts.asClient.DescribeAutoScalingGroups(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingGroups", err) + res := as.NewDescribeAutoScalingGroupsResponse() + err := ts.asClient.Send(context.TODO(), req, res) if err != nil { - return nil, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } - if response == nil || response.Response == nil || response.Response.AutoScalingGroupSet == nil { - return nil, fmt.Errorf("DescribeAutoScalingGroups returned a invalid response") + if res == nil || res.Response == nil || res.Response.AutoScalingGroupSet == nil { + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } asgs := make([]as.AutoScalingGroup, 0) - for _, asg := range response.Response.AutoScalingGroupSet { + for _, asg := range res.Response.AutoScalingGroupSet { if asg != nil { asgs = append(asgs, *asg) } @@ -284,25 +250,25 @@ func (ts *CloudServiceImpl) GetAutoScalingGroups(asgIds []string) ([]as.AutoScal } // GetAutoScalingGroup returns the specific ASG. -func (ts *CloudServiceImpl) GetAutoScalingGroup(asgRef TcRef) (as.AutoScalingGroup, error) { +func (ts *CloudServiceImpl) GetAutoScalingGroup(asgRef TcRef) (*as.AutoScalingGroup, error) { if ts.asClient == nil { - return as.AutoScalingGroup{}, fmt.Errorf("asClient is not initialized") + return nil, fmt.Errorf("asClient is not initialized") } req := as.NewDescribeAutoScalingGroupsRequest() req.AutoScalingGroupIds = []*string{&asgRef.ID} - resp, err := ts.asClient.DescribeAutoScalingGroups(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingGroups", err) + res := as.NewDescribeAutoScalingGroupsResponse() + err := ts.asClient.Send(context.TODO(), req, res) if err != nil { - return as.AutoScalingGroup{}, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } - if resp == nil || resp.Response == nil || resp.Response.AutoScalingGroupSet == nil || - len(resp.Response.AutoScalingGroupSet) != 1 || resp.Response.AutoScalingGroupSet[0] == nil { - return as.AutoScalingGroup{}, fmt.Errorf("DescribeAutoScalingGroups returned a invalid response") + if res == nil || res.Response == nil || res.Response.AutoScalingGroupSet == nil || + len(res.Response.AutoScalingGroupSet) != 1 || res.Response.AutoScalingGroupSet[0] == nil { + return nil, fmt.Errorf("as:DescribeAutoScalingGroups returned a invalid response: %s", res.ToJsonString()) } - return *resp.Response.AutoScalingGroupSet[0], nil + return res.Response.AutoScalingGroupSet[0], nil } // GetAutoScalingInstances returns instances of specific ASG. @@ -319,10 +285,10 @@ func (ts *CloudServiceImpl) GetAutoScalingInstances(asgRef TcRef) ([]*as.Instanc req.Filters = []*as.Filter{&filter} req.Limit = common.Int64Ptr(maxRecordsReturnedByAPI) req.Offset = common.Int64Ptr(0) - resp, err := ts.asClient.DescribeAutoScalingInstances(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingInstances", err) + resp := as.NewDescribeAutoScalingInstancesResponse() + err := ts.asClient.Send(context.TODO(), req, resp) if err != nil { - return nil, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } res := resp.Response.AutoScalingInstanceSet totalCount := uint64(0) @@ -331,13 +297,13 @@ func (ts *CloudServiceImpl) GetAutoScalingInstances(asgRef TcRef) ([]*as.Instanc } for uint64(len(res)) < totalCount { req.Offset = common.Int64Ptr(int64(len(res))) - resp, err = ts.asClient.DescribeAutoScalingInstances(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingInstances", err) + resp := as.NewDescribeAutoScalingInstancesResponse() + err := ts.asClient.Send(context.TODO(), req, resp) if err != nil { - return nil, err + return nil, gerrors.Wrap(err, "[CloudAPIError]") } if resp.Response == nil || resp.Response.AutoScalingInstanceSet == nil { - return res, fmt.Errorf("query auto-scaling instances returned incorrect results") + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } if resp.Response.TotalCount != nil { if totalCount != *resp.Response.TotalCount { @@ -352,34 +318,34 @@ func (ts *CloudServiceImpl) GetAutoScalingInstances(asgRef TcRef) ([]*as.Instanc } // GetAsgRefByInstanceRef returns asgRef according to instanceRef -func (ts *CloudServiceImpl) GetAsgRefByInstanceRef(instanceRef TcRef) (TcRef, error) { +func (ts *CloudServiceImpl) GetAsgRefByInstanceRef(instanceRef TcRef) (*TcRef, error) { if ts.asClient == nil { - return TcRef{}, fmt.Errorf("asClient is not initialized") + return nil, fmt.Errorf("asClient is not initialized") } req := as.NewDescribeAutoScalingInstancesRequest() req.InstanceIds = common.StringPtrs([]string{instanceRef.ID}) - resp, err := ts.asClient.DescribeAutoScalingInstances(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingInstances", err) + res := as.NewDescribeAutoScalingInstancesResponse() + err := ts.asClient.Send(context.TODO(), req, res) if err != nil { - return TcRef{}, err - } - - if resp == nil || resp.Response == nil || - resp.Response.AutoScalingInstanceSet == nil || - resp.Response.TotalCount == nil || - *resp.Response.TotalCount != 1 || - len(resp.Response.AutoScalingInstanceSet) != 1 { - if *resp.Response.TotalCount == 0 || len(resp.Response.AutoScalingInstanceSet) == 0 { - return TcRef{}, nil - } else if resp.Response.AutoScalingInstanceSet[0] == nil || - resp.Response.AutoScalingInstanceSet[0].AutoScalingGroupId == nil { - return TcRef{}, fmt.Errorf("DescribeAutoScalingInstances response is invalid by instance %v: %#v", instanceRef, resp) + return nil, gerrors.Wrap(err, "[CloudAPIError]") + } + + if res == nil || res.Response == nil || + res.Response.AutoScalingInstanceSet == nil || + res.Response.TotalCount == nil || + *res.Response.TotalCount != 1 || + len(res.Response.AutoScalingInstanceSet) != 1 { + if *res.Response.TotalCount == 0 || len(res.Response.AutoScalingInstanceSet) == 0 { + return nil, nil + } else if res.Response.AutoScalingInstanceSet[0] == nil || + res.Response.AutoScalingInstanceSet[0].AutoScalingGroupId == nil { + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } } - return TcRef{ - ID: *resp.Response.AutoScalingInstanceSet[0].AutoScalingGroupId, + return &TcRef{ + ID: *res.Response.AutoScalingInstanceSet[0].AutoScalingGroupId, }, nil } @@ -391,17 +357,17 @@ func (ts *CloudServiceImpl) ResizeAsg(ref TcRef, size uint64) error { req := as.NewModifyAutoScalingGroupRequest() req.AutoScalingGroupId = common.StringPtr(ref.ID) req.DesiredCapacity = common.Uint64Ptr(size) - resp, err := ts.asClient.ModifyAutoScalingGroup(req) - metrics.RegisterCloudAPIInvoked("as", "ModifyAutoScalingGroup", err) + res := as.NewModifyAutoScalingGroupResponse() + err := ts.asClient.Send(context.TODO(), req, res) if err != nil { - return err + return gerrors.Wrap(err, "[CloudAPIError]") } - if resp == nil || resp.Response == nil || - resp.Response.RequestId == nil { - return fmt.Errorf("ModifyAutoScalingGroup returned a invalid response") + if res == nil || res.Response == nil || + res.Response.RequestId == nil { + return fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } - klog.V(4).Infof("ResizeAsg size %d, requestID: %s", size, *resp.Response.RequestId) + klog.V(4).Infof("ResizeAsg size %d, requestID: %s", size, *res.Response.RequestId) return nil } @@ -417,14 +383,15 @@ func (ts *CloudServiceImpl) GetZoneBySubnetID(subnetID string) (string, error) { } req := vpc.NewDescribeSubnetsRequest() req.SubnetIds = []*string{common.StringPtr(subnetID)} - resp, err := ts.vpcClient.DescribeSubnets(req) + res := vpc.NewDescribeSubnetsResponse() + err := ts.vpcClient.Send(context.TODO(), req, res) if err != nil { - return "", err - } else if resp.Response == nil || len(resp.Response.SubnetSet) < 1 || - resp.Response.SubnetSet[0] == nil || resp.Response.SubnetSet[0].Zone == nil { - return "", fmt.Errorf("Failed to invoke DescribeSubnets from vpc, subnetId %v, err: response subenet is nil", subnetID) + return "", gerrors.Wrap(err, "[CloudAPIError]") + } else if res.Response == nil || len(res.Response.SubnetSet) < 1 || + res.Response.SubnetSet[0] == nil || res.Response.SubnetSet[0].Zone == nil { + return "", fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } - zone := *resp.Response.SubnetSet[0].Zone + zone := *res.Response.SubnetSet[0].Zone return zone, nil } @@ -432,342 +399,45 @@ func (ts *CloudServiceImpl) GetZoneBySubnetID(subnetID string) (string, error) { // zoneInfo will be cache. func (ts *CloudServiceImpl) GetZoneInfo(zone string) (*cvm.ZoneInfo, error) { if zone == "" { - return nil, fmt.Errorf("Param is invalid: zone is empty") + return nil, fmt.Errorf("param is invalid: zone is empty") } if zoneInfo, exist := zoneInfos[zone]; exist { return zoneInfo, nil } req := cvm.NewDescribeZonesRequest() - resp, err := ts.cvmClient.DescribeZones(req) - metrics.RegisterCloudAPIInvoked("cvm", "DescribeZones", err) + res := cvm.NewDescribeZonesResponse() + err := ts.cvmClient.Send(context.TODO(), req, res) if err != nil { - return nil, err - } else if resp.Response == nil || resp.Response.TotalCount == nil || *resp.Response.TotalCount < 1 { - return nil, fmt.Errorf("DescribeZones returns a invalid response") + return nil, gerrors.Wrap(err, "[CloudAPIError]") + } else if res.Response == nil || res.Response.TotalCount == nil || *res.Response.TotalCount < 1 { + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } - for _, it := range resp.Response.ZoneSet { + for _, it := range res.Response.ZoneSet { if it != nil && it.Zone != nil && *it.Zone == zone { zoneInfos[zone] = it return it, nil } } - return nil, fmt.Errorf("Failed to get zoneInfo: %s is not exist", zone) + return nil, fmt.Errorf("[InvalidResponse] %s:%s", req.GetService(), req.GetAction()) } // GetTencentcloudInstanceRef returns a Tencentcloud ref. -func (ts *CloudServiceImpl) GetTencentcloudInstanceRef(instance *as.Instance) (TcRef, error) { +func (ts *CloudServiceImpl) GetTencentcloudInstanceRef(instance *as.Instance) (*TcRef, error) { if instance == nil { - return TcRef{}, fmt.Errorf("instance is nil") + return nil, fmt.Errorf("instance is nil") } zoneID := "" if instance.Zone != nil && *instance.Zone != "" { zoneInfo, err := ts.GetZoneInfo(*instance.Zone) if err != nil { - return TcRef{}, err + return nil, err } zoneID = *zoneInfo.ZoneId } - return TcRef{ + return &TcRef{ ID: *instance.InstanceId, Zone: zoneID, }, nil } - -// NodePoolInfo represents the information nodePool or clusterAsg from dashboard -type NodePoolInfo struct { - Labels []*tke.Label - Taints []*tke.Taint -} - -// GetNodePoolInfo returns nodepool information from TKE. -func (ts *CloudServiceImpl) GetNodePoolInfo(clusterID string, asgID string) (*NodePoolInfo, error) { - if ts.tkeClient == nil { - return nil, fmt.Errorf("tkeClient is not initialized") - } - // From NodePool - npReq := tke.NewDescribeClusterNodePoolsRequest() - npReq.ClusterId = common.StringPtr(clusterID) - npResp, err := ts.tkeClient.DescribeClusterNodePools(npReq) - if e, ok := err.(*errors.TencentCloudSDKError); ok { - metrics.RegisterCloudAPIInvokedError("tke", "DescribeClusterNodePools", e.Code) - return nil, e - } - if npResp == nil || npResp.Response == nil || npResp.Response.RequestId == nil { - return nil, errors.NewTencentCloudSDKError("DASHBOARD_ERROR", "empty response", "-") - } - var targetNodePool *tke.NodePool - for _, np := range npResp.Response.NodePoolSet { - if np.AutoscalingGroupId != nil && *np.AutoscalingGroupId == asgID { - targetNodePool = np - break - } - } - if targetNodePool != nil { - return &NodePoolInfo{ - Labels: targetNodePool.Labels, - Taints: targetNodePool.Taints, - }, nil - } - - // Compatible with DEPRECATED autoScalingGroups - asgReq := tke.NewDescribeClusterAsGroupsRequest() - asgReq.AutoScalingGroupIds = []*string{common.StringPtr(asgID)} - asgReq.ClusterId = common.StringPtr(clusterID) - asgResp, err := ts.tkeClient.DescribeClusterAsGroups(asgReq) - if err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - metrics.RegisterCloudAPIInvokedError("tke", "DescribeClusterAsGroups", e.Code) - } - return nil, err - } - if asgResp == nil || asgResp.Response == nil { - return nil, errors.NewTencentCloudSDKError("DASHBOARD_ERROR", "empty response", "-") - } - asgCount := len(asgResp.Response.ClusterAsGroupSet) - if asgCount != 1 { - return nil, errors.NewTencentCloudSDKError("UNEXPECTED_ERROR", - fmt.Sprintf("%s get %d autoScalingGroup", asgID, asgCount), *asgResp.Response.RequestId) - } - asg := asgResp.Response.ClusterAsGroupSet[0] - if asg == nil { - return nil, errors.NewTencentCloudSDKError("UNEXPECTED_ERROR", "asg is nil", *asgResp.Response.RequestId) - } - - return &NodePoolInfo{ - Labels: asg.Labels, - }, nil -} - -// DescribeVpcCniPodLimits list network limits -func (ts *CloudServiceImpl) DescribeVpcCniPodLimits(instanceType string) (*tke.PodLimitsInstance, error) { - if ts.tkeClient == nil { - return nil, fmt.Errorf("tkeClient is not initialized") - } - req := tke.NewDescribeVpcCniPodLimitsRequest() - req.InstanceType = common.StringPtr(instanceType) - resp, err := ts.tkeClient.DescribeVpcCniPodLimits(req) - if err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - metrics.RegisterCloudAPIInvokedError("tke", "DescribeVpcCniPodLimits", e.Code) - } - return nil, err - } - if resp == nil || resp.Response == nil || resp.Response.RequestId == nil { - return nil, errors.NewTencentCloudSDKError("DASHBOARD_ERROR", "empty response", "-") - } - if len(resp.Response.PodLimitsInstanceSet) == 0 { - return nil, nil - } - - // PodLimitsInstanceSet 分可用区返回,会存在多组值,不过内容都一样,取第一个 - return resp.Response.PodLimitsInstanceSet[0], nil -} - -func (ts *CloudServiceImpl) stopAutoScalingInstancesWithRetry(req *as.StopAutoScalingInstancesRequest) error { - var err error - scalingActivityID := "" - for i := 0; i < retryCountStop; i++ { - if i > 0 { - time.Sleep(intervalTimeStop) - } - var resp = &as.StopAutoScalingInstancesResponse{} - resp, err = ts.asClient.StopAutoScalingInstances(req) - metrics.RegisterCloudAPIInvoked("as", "StopAutoScalingInstances", err) - if err != nil { - if asErr, ok := err.(*errors.TencentCloudSDKError); ok { - // 仍然有不支持的 - if asErr.Code == "ResourceUnavailable.StoppedInstanceWithInconsistentChargingMode" { - continue - } - } - // 如果错误不是因为机型的原因,就重试 - klog.Warningf("StopAutoScalingInstances failed %v, %d retry", err.Error(), i) - } else { - if resp.Response.ActivityId != nil { - scalingActivityID = *resp.Response.ActivityId - } - break - } - } - - if err != nil { - return err - } - - // check activity - err = ts.ensureAutoScalingActivityDone(scalingActivityID) - if err != nil { - return err - } - - return nil -} - -// removeInstances invoke as.RemoveInstances -// api document: https://cloud.tencent.com/document/api/377/20431 -func (ts *CloudServiceImpl) removeInstances(asg Asg, instances []string) error { - if ts.asClient == nil { - return fmt.Errorf("asClient is not initialized") - } - - req := as.NewRemoveInstancesRequest() - req.AutoScalingGroupId = common.StringPtr(asg.Id()) - req.InstanceIds = common.StringPtrs(instances) - - resp, err := ts.asClient.RemoveInstances(req) - metrics.RegisterCloudAPIInvoked("as", "RemoveInstances", err) - if err != nil { - return err - } - if resp == nil || resp.Response == nil || - resp.Response.ActivityId == nil || - resp.Response.RequestId == nil { - return fmt.Errorf("RemoveInstances returned a invalid response") - } - klog.V(4).Infof("Remove instances %v, asaID: %s, requestID: %s", instances, *resp.Response.ActivityId, *resp.Response.RequestId) - - return nil -} - -// stopInstances 关闭instanceList中符合关机不收费的机型的机器,如果不支持的机器,就进行关机收费操作 -// TODO 注意:该方法仅供上层调用,instanceList的长度需要上层控制,长度最大限制:100 -func (ts *CloudServiceImpl) stopInstances(asg Asg, instances []string) error { - if ts.asClient == nil { - return fmt.Errorf("asClient is not initialized") - } - req := as.NewStopAutoScalingInstancesRequest() - req.AutoScalingGroupId = common.StringPtr(asg.Id()) - req.InstanceIds = common.StringPtrs(instances) - req.StoppedMode = common.StringPtr(StoppedModeStopCharging) - - // 没有dry run,所以先试跑一次,如果超过了,就直接超过了, - keepChargingIns := make([]string, 0) - stopChargingIns := make([]string, 0) - var errOut error - scalingActivityID := "" - for i := 0; i < retryCountStop; i++ { - // 从第二次开始,等待5s钟(一般autoscaling移出节点的时间为3s) - if i > 0 { - time.Sleep(intervalTimeStop) - } - resp, err := ts.asClient.StopAutoScalingInstances(req) - metrics.RegisterCloudAPIInvoked("as", "StopAutoScalingInstances", err) - if e, ok := err.(*errors.TencentCloudSDKError); ok { - metrics.RegisterCloudAPIInvokedError("as", "StopAutoScalingInstances", e.Code) - } - if err == nil { - // 一次成功 - klog.Info("StopAutoScalingInstances succeed") - klog.V(4).Infof("res:%#v", resp.Response) - if resp.Response.ActivityId != nil { - scalingActivityID = *resp.Response.ActivityId - } - break - } else if asErr, ok := err.(*errors.TencentCloudSDKError); ok && - (asErr.Code == "ResourceUnavailable.StoppedInstanceWithInconsistentChargingMode" || - asErr.Code == "ResourceUnavailable.InstanceNotSupportStopCharging") { // TODO 这里拿code和msg返回做判断,有点危险 - stopChargingIns, keepChargingIns = getInstanceIdsFromMessage(instances, asErr.Message) - break - } else { - errOut = err - klog.Warningf("Failed to StopAutoScalingInstances res:%#v", err) - } - } - - // 如果是一次就过了,说明instance是全部可以关机不收费的,直接结束 - if errOut == nil && scalingActivityID != "" { - // check activity - err := ts.ensureAutoScalingActivityDone(scalingActivityID) - if err != nil { - return err - } - return nil - } else if errOut != nil { - // 如果一直在报其他的错误,就返回错误 - return errOut - } - // 如果有不支持关机不收费的话,就分别执行两次。 - - // 支持关机不收费的实例,进行`StopCharging`操作 - if len(stopChargingIns) != 0 { - req.InstanceIds = common.StringPtrs(stopChargingIns) - req.StoppedMode = common.StringPtr(StoppedModeStopCharging) - err := ts.stopAutoScalingInstancesWithRetry(req) - if err != nil { - errOut = err - } - } - - if len(keepChargingIns) != 0 { - // 不支持关机不收费的实例,进行`KeepCharging`操作 - req.InstanceIds = common.StringPtrs(keepChargingIns) - req.StoppedMode = common.StringPtr(StoppedModeKeepCharging) - err := ts.stopAutoScalingInstancesWithRetry(req) - if err != nil { - errOut = err - } - } - if errOut != nil { - return errOut - } - return nil -} - -func (ts *CloudServiceImpl) ensureAutoScalingActivityDone(scalingActivityID string) error { - if scalingActivityID == "" { - return fmt.Errorf("ActivityId is nil") - } - - checker := func(r interface{}, e error) bool { - if e != nil { - return false - } - resp, ok := r.(*as.DescribeAutoScalingActivitiesResponse) - if !ok || resp.Response == nil || len(resp.Response.ActivitySet) != 1 { - return false - } - if resp.Response.ActivitySet[0].StatusCode != nil { - if *resp.Response.ActivitySet[0].StatusCode == "INIT" || *resp.Response.ActivitySet[0].StatusCode == "RUNNING" { - return false - } - return true - } - return true - } - do := func() (interface{}, error) { - if ts.asClient == nil { - return nil, fmt.Errorf("asClient is not initialized") - } - req := as.NewDescribeAutoScalingActivitiesRequest() - req.ActivityIds = common.StringPtrs([]string{scalingActivityID}) - - resp, err := ts.asClient.DescribeAutoScalingActivities(req) - metrics.RegisterCloudAPIInvoked("as", "DescribeAutoScalingActivities", err) - if err != nil { - return nil, err - } - return resp, nil - } - - ret, isTimeout, err := retryDo(do, checker, 1200, 2) - if err != nil { - return fmt.Errorf("EnsureAutoScalingActivityDone scalingActivityId:%s failed:%v", scalingActivityID, err) - } - - if isTimeout { - return fmt.Errorf("EnsureAutoScalingActivityDone scalingActivityId:%s timeout", scalingActivityID) - } - resp, ok := ret.(*as.DescribeAutoScalingActivitiesResponse) - if !ok || resp.Response == nil || len(resp.Response.ActivitySet) != 1 { - return fmt.Errorf("EnsureAutoScalingActivityDone scalingActivityId:%s failed", scalingActivityID) - } - if resp.Response.ActivitySet[0].StatusCode != nil && *resp.Response.ActivitySet[0].StatusCode != "SUCCESSFUL" { - if resp.Response.ActivitySet[0].StatusMessageSimplified == nil { - resp.Response.ActivitySet[0].StatusMessageSimplified = common.StringPtr("no message") - } - return fmt.Errorf("AutoScalingActivity scalingActivityId:%s %s %s", scalingActivityID, *resp.Response.ActivitySet[0].StatusCode, *resp.Response.ActivitySet[0].StatusMessageSimplified) - } - return nil -} diff --git a/cluster-autoscaler/cloudprovider/tencentcloud/utils.go b/cluster-autoscaler/cloudprovider/tencentcloud/utils.go index 068cc13d0db2..57bffd9bd3a1 100644 --- a/cluster-autoscaler/cloudprovider/tencentcloud/utils.go +++ b/cluster-autoscaler/cloudprovider/tencentcloud/utils.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From ac91ee91d67d05d578f0e4fe4aeb4cd6ddfd417a Mon Sep 17 00:00:00 2001 From: Diego Bonfigli Date: Mon, 9 Oct 2023 12:11:54 +0200 Subject: [PATCH 089/125] Updated the owners of externalgrpc cloudprovider --- cluster-autoscaler/cloudprovider/externalgrpc/OWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/externalgrpc/OWNERS b/cluster-autoscaler/cloudprovider/externalgrpc/OWNERS index f6102e50af84..96ada64c4af3 100644 --- a/cluster-autoscaler/cloudprovider/externalgrpc/OWNERS +++ b/cluster-autoscaler/cloudprovider/externalgrpc/OWNERS @@ -1,7 +1,7 @@ approvers: -#- dbonfigli +- dbonfigli reviewers: -#- dbonfigli +- dbonfigli labels: - area/provider/externalgrpc From 60fcea24892573f8acade553c617f2d3957dbe19 Mon Sep 17 00:00:00 2001 From: Daniel Lipovetsky Date: Fri, 6 Oct 2023 16:14:27 -0700 Subject: [PATCH 090/125] clusterapi: Add 'watch' verb to scale-from-zero example If the 'get' and 'list' verbs are present, but the 'watch' verb is absent, the autoscaler reports an error. For example: cluster-autoscaler-b8949d8b9-76vcd E1006 22:11:43.056176 1 reflector.go:148] k8s.io/client-go/dynamic/dynamicinformer/informer.go:108: Failed to watch infrastructure.cluster.x-k8s.io/v1beta2, Resource=vcdmachinetemplates: unknown --- cluster-autoscaler/cloudprovider/clusterapi/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/clusterapi/README.md b/cluster-autoscaler/cloudprovider/clusterapi/README.md index d68e4b2ddaf8..ba4a62660d68 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/README.md +++ b/cluster-autoscaler/cloudprovider/clusterapi/README.md @@ -239,8 +239,8 @@ If you are using the opt-in support for scaling from zero as defined by the Cluster API infrastructure provider, you will need to add the infrastructure machine template types to your role permissions for the service account associated with the cluster autoscaler deployment. The service account will -need permission to `get` and `list` the infrastructure machine templates for -your infrastructure provider. +need permission to `get`, `list`, and `watch` the infrastructure machine +templates for your infrastructure provider. For example, when using the [Kubemark provider](https://github.com/kubernetes-sigs/cluster-api-provider-kubemark) you will need to set the following permissions: @@ -254,6 +254,7 @@ rules: verbs: - get - list + - watch ``` #### Pre-defined labels and taints on nodes scaled from zero From 1fee5573846af6655381b322b143b86adbec8147 Mon Sep 17 00:00:00 2001 From: Mathieu Bruneau Date: Wed, 27 Sep 2023 18:37:41 +0000 Subject: [PATCH 091/125] Update with make generate --- .../cloudprovider/aws/ec2_instance_types.go | 717 +++++++++++++++++- 1 file changed, 705 insertions(+), 12 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go b/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go index 5d302c0fda0c..f3b005b09d51 100644 --- a/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go +++ b/cluster-autoscaler/cloudprovider/aws/ec2_instance_types.go @@ -28,7 +28,7 @@ type InstanceType struct { } // StaticListLastUpdateTime is a string declaring the last time the static list was updated. -var StaticListLastUpdateTime = "2023-02-14" +var StaticListLastUpdateTime = "2023-09-27" // InstanceTypes is a map of ec2 resources var InstanceTypes = map[string]*InstanceType{ @@ -900,6 +900,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "c6in.metal": { + InstanceType: "c6in.metal", + VCPU: 128, + MemoryMb: 262144, + GPU: 0, + Architecture: "amd64", + }, "c6in.xlarge": { InstanceType: "c6in.xlarge", VCPU: 4, @@ -970,10 +977,178 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "arm64", }, - "cc2.8xlarge": { - InstanceType: "cc2.8xlarge", + "c7gd.12xlarge": { + InstanceType: "c7gd.12xlarge", + VCPU: 48, + MemoryMb: 98304, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.16xlarge": { + InstanceType: "c7gd.16xlarge", + VCPU: 64, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.2xlarge": { + InstanceType: "c7gd.2xlarge", + VCPU: 8, + MemoryMb: 16384, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.4xlarge": { + InstanceType: "c7gd.4xlarge", + VCPU: 16, + MemoryMb: 32768, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.8xlarge": { + InstanceType: "c7gd.8xlarge", + VCPU: 32, + MemoryMb: 65536, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.large": { + InstanceType: "c7gd.large", + VCPU: 2, + MemoryMb: 4096, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.medium": { + InstanceType: "c7gd.medium", + VCPU: 1, + MemoryMb: 2048, + GPU: 0, + Architecture: "arm64", + }, + "c7gd.xlarge": { + InstanceType: "c7gd.xlarge", + VCPU: 4, + MemoryMb: 8192, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.12xlarge": { + InstanceType: "c7gn.12xlarge", + VCPU: 48, + MemoryMb: 98304, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.16xlarge": { + InstanceType: "c7gn.16xlarge", + VCPU: 64, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.2xlarge": { + InstanceType: "c7gn.2xlarge", + VCPU: 8, + MemoryMb: 16384, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.4xlarge": { + InstanceType: "c7gn.4xlarge", + VCPU: 16, + MemoryMb: 32768, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.8xlarge": { + InstanceType: "c7gn.8xlarge", + VCPU: 32, + MemoryMb: 65536, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.large": { + InstanceType: "c7gn.large", + VCPU: 2, + MemoryMb: 4096, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.medium": { + InstanceType: "c7gn.medium", + VCPU: 1, + MemoryMb: 2048, + GPU: 0, + Architecture: "arm64", + }, + "c7gn.xlarge": { + InstanceType: "c7gn.xlarge", + VCPU: 4, + MemoryMb: 8192, + GPU: 0, + Architecture: "arm64", + }, + "c7i.12xlarge": { + InstanceType: "c7i.12xlarge", + VCPU: 48, + MemoryMb: 98304, + GPU: 0, + Architecture: "amd64", + }, + "c7i.16xlarge": { + InstanceType: "c7i.16xlarge", + VCPU: 64, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "c7i.24xlarge": { + InstanceType: "c7i.24xlarge", + VCPU: 96, + MemoryMb: 196608, + GPU: 0, + Architecture: "amd64", + }, + "c7i.2xlarge": { + InstanceType: "c7i.2xlarge", + VCPU: 8, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, + "c7i.48xlarge": { + InstanceType: "c7i.48xlarge", + VCPU: 192, + MemoryMb: 393216, + GPU: 0, + Architecture: "amd64", + }, + "c7i.4xlarge": { + InstanceType: "c7i.4xlarge", + VCPU: 16, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, + "c7i.8xlarge": { + InstanceType: "c7i.8xlarge", VCPU: 32, - MemoryMb: 61952, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "c7i.large": { + InstanceType: "c7i.large", + VCPU: 2, + MemoryMb: 4096, + GPU: 0, + Architecture: "amd64", + }, + "c7i.xlarge": { + InstanceType: "c7i.xlarge", + VCPU: 4, + MemoryMb: 8192, GPU: 0, Architecture: "amd64", }, @@ -1355,6 +1530,27 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "hpc7g.16xlarge": { + InstanceType: "hpc7g.16xlarge", + VCPU: 64, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "hpc7g.4xlarge": { + InstanceType: "hpc7g.4xlarge", + VCPU: 16, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "hpc7g.8xlarge": { + InstanceType: "hpc7g.8xlarge", + VCPU: 32, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, "i2.2xlarge": { InstanceType: "i2.2xlarge", VCPU: 8, @@ -1488,6 +1684,48 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "i4g.16xlarge": { + InstanceType: "i4g.16xlarge", + VCPU: 64, + MemoryMb: 524288, + GPU: 0, + Architecture: "arm64", + }, + "i4g.2xlarge": { + InstanceType: "i4g.2xlarge", + VCPU: 8, + MemoryMb: 65536, + GPU: 0, + Architecture: "arm64", + }, + "i4g.4xlarge": { + InstanceType: "i4g.4xlarge", + VCPU: 16, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "i4g.8xlarge": { + InstanceType: "i4g.8xlarge", + VCPU: 32, + MemoryMb: 262144, + GPU: 0, + Architecture: "arm64", + }, + "i4g.large": { + InstanceType: "i4g.large", + VCPU: 2, + MemoryMb: 16384, + GPU: 0, + Architecture: "arm64", + }, + "i4g.xlarge": { + InstanceType: "i4g.xlarge", + VCPU: 4, + MemoryMb: 32768, + GPU: 0, + Architecture: "arm64", + }, "i4i.16xlarge": { InstanceType: "i4i.16xlarge", VCPU: 64, @@ -1614,13 +1852,6 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, - "inf2.48xlarge": { - InstanceType: "inf2.48xlarge", - VCPU: 192, - MemoryMb: 786432, - GPU: 0, - Architecture: "amd64", - }, "inf2.24xlarge": { InstanceType: "inf2.24xlarge", VCPU: 96, @@ -1628,6 +1859,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "inf2.48xlarge": { + InstanceType: "inf2.48xlarge", + VCPU: 192, + MemoryMb: 786432, + GPU: 0, + Architecture: "amd64", + }, "inf2.8xlarge": { InstanceType: "inf2.8xlarge", VCPU: 32, @@ -2615,6 +2853,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "m6idn.metal": { + InstanceType: "m6idn.metal", + VCPU: 128, + MemoryMb: 524288, + GPU: 0, + Architecture: "amd64", + }, "m6idn.xlarge": { InstanceType: "m6idn.xlarge", VCPU: 4, @@ -2678,6 +2923,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "m6in.metal": { + InstanceType: "m6in.metal", + VCPU: 128, + MemoryMb: 524288, + GPU: 0, + Architecture: "amd64", + }, "m6in.xlarge": { InstanceType: "m6in.xlarge", VCPU: 4, @@ -2685,6 +2937,90 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "m7a.12xlarge": { + InstanceType: "m7a.12xlarge", + VCPU: 48, + MemoryMb: 196608, + GPU: 0, + Architecture: "amd64", + }, + "m7a.16xlarge": { + InstanceType: "m7a.16xlarge", + VCPU: 64, + MemoryMb: 262144, + GPU: 0, + Architecture: "amd64", + }, + "m7a.24xlarge": { + InstanceType: "m7a.24xlarge", + VCPU: 96, + MemoryMb: 393216, + GPU: 0, + Architecture: "amd64", + }, + "m7a.2xlarge": { + InstanceType: "m7a.2xlarge", + VCPU: 8, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, + "m7a.32xlarge": { + InstanceType: "m7a.32xlarge", + VCPU: 128, + MemoryMb: 524288, + GPU: 0, + Architecture: "amd64", + }, + "m7a.48xlarge": { + InstanceType: "m7a.48xlarge", + VCPU: 192, + MemoryMb: 786432, + GPU: 0, + Architecture: "amd64", + }, + "m7a.4xlarge": { + InstanceType: "m7a.4xlarge", + VCPU: 16, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "m7a.8xlarge": { + InstanceType: "m7a.8xlarge", + VCPU: 32, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "m7a.large": { + InstanceType: "m7a.large", + VCPU: 2, + MemoryMb: 8192, + GPU: 0, + Architecture: "amd64", + }, + "m7a.medium": { + InstanceType: "m7a.medium", + VCPU: 1, + MemoryMb: 4096, + GPU: 0, + Architecture: "amd64", + }, + "m7a.metal-48xl": { + InstanceType: "m7a.metal-48xl", + VCPU: 192, + MemoryMb: 786432, + GPU: 0, + Architecture: "amd64", + }, + "m7a.xlarge": { + InstanceType: "m7a.xlarge", + VCPU: 4, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, "m7g.12xlarge": { InstanceType: "m7g.12xlarge", VCPU: 48, @@ -2748,6 +3084,160 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "arm64", }, + "m7gd.12xlarge": { + InstanceType: "m7gd.12xlarge", + VCPU: 48, + MemoryMb: 196608, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.16xlarge": { + InstanceType: "m7gd.16xlarge", + VCPU: 64, + MemoryMb: 262144, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.2xlarge": { + InstanceType: "m7gd.2xlarge", + VCPU: 8, + MemoryMb: 32768, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.4xlarge": { + InstanceType: "m7gd.4xlarge", + VCPU: 16, + MemoryMb: 65536, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.8xlarge": { + InstanceType: "m7gd.8xlarge", + VCPU: 32, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.large": { + InstanceType: "m7gd.large", + VCPU: 2, + MemoryMb: 8192, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.medium": { + InstanceType: "m7gd.medium", + VCPU: 1, + MemoryMb: 4096, + GPU: 0, + Architecture: "arm64", + }, + "m7gd.xlarge": { + InstanceType: "m7gd.xlarge", + VCPU: 4, + MemoryMb: 16384, + GPU: 0, + Architecture: "arm64", + }, + "m7i-flex.2xlarge": { + InstanceType: "m7i-flex.2xlarge", + VCPU: 8, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, + "m7i-flex.4xlarge": { + InstanceType: "m7i-flex.4xlarge", + VCPU: 16, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "m7i-flex.8xlarge": { + InstanceType: "m7i-flex.8xlarge", + VCPU: 32, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "m7i-flex.large": { + InstanceType: "m7i-flex.large", + VCPU: 2, + MemoryMb: 8192, + GPU: 0, + Architecture: "amd64", + }, + "m7i-flex.xlarge": { + InstanceType: "m7i-flex.xlarge", + VCPU: 4, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, + "m7i.12xlarge": { + InstanceType: "m7i.12xlarge", + VCPU: 48, + MemoryMb: 196608, + GPU: 0, + Architecture: "amd64", + }, + "m7i.16xlarge": { + InstanceType: "m7i.16xlarge", + VCPU: 64, + MemoryMb: 262144, + GPU: 0, + Architecture: "amd64", + }, + "m7i.24xlarge": { + InstanceType: "m7i.24xlarge", + VCPU: 96, + MemoryMb: 393216, + GPU: 0, + Architecture: "amd64", + }, + "m7i.2xlarge": { + InstanceType: "m7i.2xlarge", + VCPU: 8, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, + "m7i.48xlarge": { + InstanceType: "m7i.48xlarge", + VCPU: 192, + MemoryMb: 786432, + GPU: 0, + Architecture: "amd64", + }, + "m7i.4xlarge": { + InstanceType: "m7i.4xlarge", + VCPU: 16, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "m7i.8xlarge": { + InstanceType: "m7i.8xlarge", + VCPU: 32, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "m7i.large": { + InstanceType: "m7i.large", + VCPU: 2, + MemoryMb: 8192, + GPU: 0, + Architecture: "amd64", + }, + "m7i.xlarge": { + InstanceType: "m7i.xlarge", + VCPU: 4, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, "mac1.metal": { InstanceType: "mac1.metal", VCPU: 12, @@ -2828,7 +3318,7 @@ var InstanceTypes = map[string]*InstanceType{ "p5.48xlarge": { InstanceType: "p5.48xlarge", VCPU: 192, - MemoryMb: 2048000, + MemoryMb: 2097152, GPU: 8, Architecture: "amd64", }, @@ -3735,6 +4225,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "r6idn.metal": { + InstanceType: "r6idn.metal", + VCPU: 128, + MemoryMb: 1048576, + GPU: 0, + Architecture: "amd64", + }, "r6idn.xlarge": { InstanceType: "r6idn.xlarge", VCPU: 4, @@ -3798,6 +4295,13 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "r6in.metal": { + InstanceType: "r6in.metal", + VCPU: 128, + MemoryMb: 1048576, + GPU: 0, + Architecture: "amd64", + }, "r6in.xlarge": { InstanceType: "r6in.xlarge", VCPU: 4, @@ -3805,6 +4309,83 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "amd64", }, + "r7a.12xlarge": { + InstanceType: "r7a.12xlarge", + VCPU: 48, + MemoryMb: 393216, + GPU: 0, + Architecture: "amd64", + }, + "r7a.16xlarge": { + InstanceType: "r7a.16xlarge", + VCPU: 64, + MemoryMb: 524288, + GPU: 0, + Architecture: "amd64", + }, + "r7a.24xlarge": { + InstanceType: "r7a.24xlarge", + VCPU: 96, + MemoryMb: 786432, + GPU: 0, + Architecture: "amd64", + }, + "r7a.2xlarge": { + InstanceType: "r7a.2xlarge", + VCPU: 8, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "r7a.32xlarge": { + InstanceType: "r7a.32xlarge", + VCPU: 128, + MemoryMb: 1048576, + GPU: 0, + Architecture: "amd64", + }, + "r7a.48xlarge": { + InstanceType: "r7a.48xlarge", + VCPU: 192, + MemoryMb: 1572864, + GPU: 0, + Architecture: "amd64", + }, + "r7a.4xlarge": { + InstanceType: "r7a.4xlarge", + VCPU: 16, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "r7a.8xlarge": { + InstanceType: "r7a.8xlarge", + VCPU: 32, + MemoryMb: 262144, + GPU: 0, + Architecture: "amd64", + }, + "r7a.large": { + InstanceType: "r7a.large", + VCPU: 2, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, + "r7a.medium": { + InstanceType: "r7a.medium", + VCPU: 1, + MemoryMb: 8192, + GPU: 0, + Architecture: "amd64", + }, + "r7a.xlarge": { + InstanceType: "r7a.xlarge", + VCPU: 4, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, "r7g.12xlarge": { InstanceType: "r7g.12xlarge", VCPU: 48, @@ -3868,6 +4449,118 @@ var InstanceTypes = map[string]*InstanceType{ GPU: 0, Architecture: "arm64", }, + "r7gd.12xlarge": { + InstanceType: "r7gd.12xlarge", + VCPU: 48, + MemoryMb: 262144, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.16xlarge": { + InstanceType: "r7gd.16xlarge", + VCPU: 64, + MemoryMb: 524288, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.2xlarge": { + InstanceType: "r7gd.2xlarge", + VCPU: 8, + MemoryMb: 65536, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.4xlarge": { + InstanceType: "r7gd.4xlarge", + VCPU: 16, + MemoryMb: 131072, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.8xlarge": { + InstanceType: "r7gd.8xlarge", + VCPU: 32, + MemoryMb: 196608, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.large": { + InstanceType: "r7gd.large", + VCPU: 2, + MemoryMb: 16384, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.medium": { + InstanceType: "r7gd.medium", + VCPU: 1, + MemoryMb: 8192, + GPU: 0, + Architecture: "arm64", + }, + "r7gd.xlarge": { + InstanceType: "r7gd.xlarge", + VCPU: 4, + MemoryMb: 32768, + GPU: 0, + Architecture: "arm64", + }, + "r7iz.12xlarge": { + InstanceType: "r7iz.12xlarge", + VCPU: 48, + MemoryMb: 393216, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.16xlarge": { + InstanceType: "r7iz.16xlarge", + VCPU: 64, + MemoryMb: 524288, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.2xlarge": { + InstanceType: "r7iz.2xlarge", + VCPU: 8, + MemoryMb: 65536, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.32xlarge": { + InstanceType: "r7iz.32xlarge", + VCPU: 128, + MemoryMb: 1048576, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.4xlarge": { + InstanceType: "r7iz.4xlarge", + VCPU: 16, + MemoryMb: 131072, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.8xlarge": { + InstanceType: "r7iz.8xlarge", + VCPU: 32, + MemoryMb: 262144, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.large": { + InstanceType: "r7iz.large", + VCPU: 2, + MemoryMb: 16384, + GPU: 0, + Architecture: "amd64", + }, + "r7iz.xlarge": { + InstanceType: "r7iz.xlarge", + VCPU: 4, + MemoryMb: 32768, + GPU: 0, + Architecture: "amd64", + }, "t1.micro": { InstanceType: "t1.micro", VCPU: 1, From 7cb08df8b2eb6f19e0d9bd9b0728f1c68279426f Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Sat, 30 Sep 2023 00:50:13 +0000 Subject: [PATCH 092/125] Add pdb filtering to remainingPdbTracker --- cluster-autoscaler/core/scaledown/pdb/basic.go | 10 ++++++++++ cluster-autoscaler/core/scaledown/pdb/pdb.go | 2 ++ 2 files changed, 12 insertions(+) diff --git a/cluster-autoscaler/core/scaledown/pdb/basic.go b/cluster-autoscaler/core/scaledown/pdb/basic.go index 4bb248939b36..dd08b644cd11 100644 --- a/cluster-autoscaler/core/scaledown/pdb/basic.go +++ b/cluster-autoscaler/core/scaledown/pdb/basic.go @@ -63,6 +63,16 @@ func (t *basicRemainingPdbTracker) GetPdbs() []*policyv1.PodDisruptionBudget { return pdbs } +func (t *basicRemainingPdbTracker) MatchingPdbs(pod *apiv1.Pod) []*policyv1.PodDisruptionBudget { + var pdbs []*policyv1.PodDisruptionBudget + for _, pdbInfo := range t.pdbInfos { + if pod.Namespace == pdbInfo.pdb.Namespace && pdbInfo.selector.Matches(labels.Set(pod.Labels)) { + pdbs = append(pdbs, pdbInfo.pdb) + } + } + return pdbs +} + func (t *basicRemainingPdbTracker) CanRemovePods(pods []*apiv1.Pod) (canRemove, inParallel bool, blockingPod *drain.BlockingPod) { inParallel = true for _, pdbInfo := range t.pdbInfos { diff --git a/cluster-autoscaler/core/scaledown/pdb/pdb.go b/cluster-autoscaler/core/scaledown/pdb/pdb.go index 77d977dcecd6..5d21dc7e646f 100644 --- a/cluster-autoscaler/core/scaledown/pdb/pdb.go +++ b/cluster-autoscaler/core/scaledown/pdb/pdb.go @@ -28,6 +28,8 @@ type RemainingPdbTracker interface { SetPdbs(pdbs []*policyv1.PodDisruptionBudget) error // GetPdbs returns the current remaining PDBs. GetPdbs() []*policyv1.PodDisruptionBudget + // MatchingPdbs returns all PDBs matching the pod. + MatchingPdbs(pod *apiv1.Pod) []*policyv1.PodDisruptionBudget // CanRemovePods checks if the set of pods can be removed. // inParallel indicates if the pods can be removed in parallel. If it is false From 125e9c10dcaaad55de968aa12ac91012592e8d02 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Sat, 30 Sep 2023 02:10:40 +0000 Subject: [PATCH 093/125] Convert replicated, system, not-safe-to-evict, and local storage pods to drainability rules --- cluster-autoscaler/simulator/cluster_test.go | 9 +- cluster-autoscaler/simulator/drain.go | 10 +- cluster-autoscaler/simulator/drain_test.go | 5 +- .../simulator/drainability/context.go | 5 + .../drainability/rules/localstorage/rule.go | 47 ++ .../rules/localstorage/rule_test.go | 458 +++++++++++++++++ .../drainability/rules/notsafetoevict/rule.go | 47 ++ .../rules/notsafetoevict/rule_test.go | 279 ++++++++++ .../drainability/rules/replicated/rule.go | 137 +++++ .../rules/replicated/rule_test.go | 421 +++++++++++++++ .../simulator/drainability/rules/rules.go | 8 + .../drainability/rules/system/rule.go | 47 ++ .../drainability/rules/system/rule_test.go | 308 +++++++++++ .../simulator/options/nodedelete.go | 2 +- cluster-autoscaler/utils/drain/drain.go | 197 +------ cluster-autoscaler/utils/drain/drain_test.go | 481 +----------------- cluster-autoscaler/utils/pod/pod.go | 6 +- 17 files changed, 1803 insertions(+), 664 deletions(-) create mode 100644 cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/replicated/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/system/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/system/rule_test.go diff --git a/cluster-autoscaler/simulator/cluster_test.go b/cluster-autoscaler/simulator/cluster_test.go index 136e0d47d2a9..c53aec5cbc01 100644 --- a/cluster-autoscaler/simulator/cluster_test.go +++ b/cluster-autoscaler/simulator/cluster_test.go @@ -152,7 +152,6 @@ func TestFindNodesToRemove(t *testing.T) { tracker := NewUsageTracker() tests := []findNodesToRemoveTestConfig{ - // just an empty node, should be removed { name: "just an empty node, should be removed", pods: []*apiv1.Pod{}, @@ -161,7 +160,6 @@ func TestFindNodesToRemove(t *testing.T) { toRemove: []NodeToBeRemoved{emptyNodeToRemove}, unremovable: []*UnremovableNode{}, }, - // just a drainable node, but nowhere for pods to go to { name: "just a drainable node, but nowhere for pods to go to", pods: []*apiv1.Pod{pod1, pod2}, @@ -170,7 +168,6 @@ func TestFindNodesToRemove(t *testing.T) { toRemove: []NodeToBeRemoved{}, unremovable: []*UnremovableNode{{Node: drainableNode, Reason: NoPlaceToMovePods}}, }, - // drainable node, and a mostly empty node that can take its pods { name: "drainable node, and a mostly empty node that can take its pods", pods: []*apiv1.Pod{pod1, pod2, pod3}, @@ -179,7 +176,6 @@ func TestFindNodesToRemove(t *testing.T) { toRemove: []NodeToBeRemoved{drainableNodeToRemove}, unremovable: []*UnremovableNode{{Node: nonDrainableNode, Reason: BlockedByPod, BlockingPod: &drain.BlockingPod{Pod: pod3, Reason: drain.NotReplicated}}}, }, - // drainable node, and a full node that cannot fit anymore pods { name: "drainable node, and a full node that cannot fit anymore pods", pods: []*apiv1.Pod{pod1, pod2, pod4}, @@ -188,7 +184,6 @@ func TestFindNodesToRemove(t *testing.T) { toRemove: []NodeToBeRemoved{}, unremovable: []*UnremovableNode{{Node: drainableNode, Reason: NoPlaceToMovePods}}, }, - // 4 nodes, 1 empty, 1 drainable { name: "4 nodes, 1 empty, 1 drainable", pods: []*apiv1.Pod{pod1, pod2, pod3, pod4}, @@ -209,8 +204,8 @@ func TestFindNodesToRemove(t *testing.T) { r := NewRemovalSimulator(registry, clusterSnapshot, predicateChecker, tracker, testDeleteOptions(), nil, false) toRemove, unremovable := r.FindNodesToRemove(test.candidates, destinations, time.Now(), nil) fmt.Printf("Test scenario: %s, found len(toRemove)=%v, expected len(test.toRemove)=%v\n", test.name, len(toRemove), len(test.toRemove)) - assert.Equal(t, toRemove, test.toRemove) - assert.Equal(t, unremovable, test.unremovable) + assert.Equal(t, test.toRemove, toRemove) + assert.Equal(t, test.unremovable, unremovable) }) } } diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 7d8e5c449655..101844ad65d3 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -50,6 +50,8 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. drainCtx := &drainability.DrainContext{ RemainingPdbTracker: remainingPdbTracker, DeleteOptions: deleteOptions, + Listers: listers, + Timestamp: timestamp, } for _, podInfo := range nodeInfo.Pods { pod := podInfo.Pod @@ -73,20 +75,16 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. } } - pods, daemonSetPods, blockingPod, err = drain.GetPodsForDeletionOnNodeDrain( + pods, daemonSetPods = drain.GetPodsForDeletionOnNodeDrain( pods, remainingPdbTracker.GetPdbs(), deleteOptions.SkipNodesWithSystemPods, deleteOptions.SkipNodesWithLocalStorage, deleteOptions.SkipNodesWithCustomControllerPods, - listers, - int32(deleteOptions.MinReplicaCount), timestamp) pods = append(pods, drainPods...) daemonSetPods = append(daemonSetPods, drainDs...) - if err != nil { - return pods, daemonSetPods, blockingPod, err - } + if canRemove, _, blockingPodInfo := remainingPdbTracker.CanRemovePods(pods); !canRemove { pod := blockingPodInfo.Pod return []*apiv1.Pod{}, []*apiv1.Pod{}, blockingPodInfo, fmt.Errorf("not enough pod disruption budget to move %s/%s", pod.Namespace, pod.Name) diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index 5e4611a9e104..1671fdfb9510 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -182,7 +182,7 @@ func TestGetPodsToMove(t *testing.T) { desc string pods []*apiv1.Pod pdbs []*policyv1.PodDisruptionBudget - rules []rules.Rule + rules rules.Rules wantPods []*apiv1.Pod wantDs []*apiv1.Pod wantBlocking *drain.BlockingPod @@ -312,9 +312,10 @@ func TestGetPodsToMove(t *testing.T) { SkipNodesWithLocalStorage: true, SkipNodesWithCustomControllerPods: true, } + rules := append(tc.rules, rules.Default()...) tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(tc.pdbs) - p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, tc.rules, nil, tracker, testTime) + p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, rules, nil, tracker, testTime) if tc.wantErr { assert.Error(t, err) } else { diff --git a/cluster-autoscaler/simulator/drainability/context.go b/cluster-autoscaler/simulator/drainability/context.go index 84a4ec4c454f..d6fd7116ca02 100644 --- a/cluster-autoscaler/simulator/drainability/context.go +++ b/cluster-autoscaler/simulator/drainability/context.go @@ -17,12 +17,17 @@ limitations under the License. package drainability import ( + "time" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" ) // DrainContext contains parameters for drainability rules. type DrainContext struct { RemainingPdbTracker pdb.RemainingPdbTracker DeleteOptions options.NodeDeleteOptions + Listers kube_util.ListerRegistry + Timestamp time.Time } diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go new file mode 100644 index 000000000000..6a58da1dd32d --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go @@ -0,0 +1,47 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package localstorage + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle local storage pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with local storage pods on node drain. +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { + return drainability.NewUndefinedStatus() + } + + if drainCtx.DeleteOptions.SkipNodesWithLocalStorage && drain.HasBlockingLocalStorage(pod) { + return drainability.NewBlockedStatus(drain.LocalStorageRequested, fmt.Errorf("pod with local storage present: %s", pod.Name)) + } + + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go new file mode 100644 index 000000000000..222eb8fd7b6e --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go @@ -0,0 +1,458 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package localstorage + +import ( + "testing" + "time" + + appsv1 "k8s.io/api/apps/v1" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + + "github.com/stretchr/testify/assert" +) + +func TestDrain(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + + emptydirPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictVolumeSingleVal = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeSingleValEmpty = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeSingleValNonMatching = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-2", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeMultiValAllMatching = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-3", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeMultiValNonMatching = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-5", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirSafeToEvictLocalVolumeMultiValEmpty = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: ",", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + + emptyDirFailedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyNever, + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + emptyDirTerminalPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + } + + emptyDirEvictedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyAlways, + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + emptyDirSafePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + zeroGracePeriod = int64(0) + emptyDirLongTerminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + + extendedGracePeriod = int64(6 * 60) // 6 minutes + emptyDirLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + ) + + for _, test := range []struct { + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + + wantReason drain.BlockingPodReason + wantError bool + }{ + { + desc: "pod with EmptyDir", + pod: emptydirPod, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation", + pod: emptyDirSafeToEvictVolumeSingleVal, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "pod with EmptyDir and empty value for SafeToEvictLocalVolumesKey annotation", + pod: emptyDirSafeToEvictLocalVolumeSingleValEmpty, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + { + desc: "pod with EmptyDir and non-matching value for SafeToEvictLocalVolumesKey annotation", + pod: emptyDirSafeToEvictLocalVolumeSingleValNonMatching, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with matching values", + pod: emptyDirSafeToEvictLocalVolumeMultiValAllMatching, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with non-matching values", + pod: emptyDirSafeToEvictLocalVolumeMultiValNonMatching, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with some matching values", + pod: emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values", + pod: emptyDirSafeToEvictLocalVolumeMultiValEmpty, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + + { + desc: "EmptyDir failed pod", + pod: emptyDirFailedPod, + }, + { + desc: "EmptyDir terminal pod", + pod: emptyDirTerminalPod, + }, + { + desc: "EmptyDir evicted pod", + pod: emptyDirEvictedPod, + }, + { + desc: "EmptyDir pod with PodSafeToEvict annotation", + pod: emptyDirSafePod, + }, + { + desc: "EmptyDir long terminating pod with 0 grace period", + pod: emptyDirLongTerminatingPod, + }, + { + desc: "EmptyDir long terminating pod with extended grace period", + pod: emptyDirLongTerminatingPodWithExtendedGracePeriod, + }, + } { + t.Run(test.desc, func(t *testing.T) { + drainCtx := &drainability.DrainContext{ + DeleteOptions: options.NodeDeleteOptions{ + SkipNodesWithLocalStorage: true, + }, + Timestamp: testTime, + } + status := New().Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go new file mode 100644 index 000000000000..224a1fbd6a3f --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go @@ -0,0 +1,47 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package notsafetoevict + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle not safe to evict pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with not safe to evict pods on node drain. +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { + return drainability.NewUndefinedStatus() + } + + if drain.HasNotSafeToEvictAnnotation(pod) { + return drainability.NewBlockedStatus(drain.NotSafeToEvictAnnotation, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name)) + } + + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go new file mode 100644 index 000000000000..42b3df58c9a4 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go @@ -0,0 +1,279 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package notsafetoevict + +import ( + "testing" + "time" + + appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + + "github.com/stretchr/testify/assert" +) + +func TestDrain(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + + rcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + job = batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "default", + SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", + }, + } + + jobPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + } + + safePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + unsafeSystemFailedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyNever, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + unsafeSystemTerminalPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + } + + unsafeSystemEvictedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyAlways, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + zeroGracePeriod = int64(0) + unsafeLongTerminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + + extendedGracePeriod = int64(6 * 60) // 6 minutes + unsafeLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + + unsafeRcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + unsafeJobPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + } + ) + + for _, test := range []struct { + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + + wantReason drain.BlockingPodReason + wantError bool + }{ + { + desc: "pod with PodSafeToEvict annotation", + pod: safePod, + }, + { + desc: "RC-managed pod with no annotation", + pod: rcPod, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "RC-managed pod with PodSafeToEvict=false annotation", + pod: unsafeRcPod, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.NotSafeToEvictAnnotation, + wantError: true, + }, + { + desc: "Job-managed pod with no annotation", + pod: jobPod, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "Job-managed pod with PodSafeToEvict=false annotation", + pod: unsafeJobPod, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.NotSafeToEvictAnnotation, + wantError: true, + }, + + { + desc: "unsafe failed pod", + pod: unsafeSystemFailedPod, + }, + { + desc: "unsafe terminal pod", + pod: unsafeSystemTerminalPod, + }, + { + desc: "unsafe evicted pod", + pod: unsafeSystemEvictedPod, + }, + { + desc: "unsafe long terminating pod with 0 grace period", + pod: unsafeLongTerminatingPod, + }, + { + desc: "unsafe long terminating pod with extended grace period", + pod: unsafeLongTerminatingPodWithExtendedGracePeriod, + }, + } { + t.Run(test.desc, func(t *testing.T) { + drainCtx := &drainability.DrainContext{ + DeleteOptions: options.NodeDeleteOptions{ + SkipNodesWithSystemPods: true, + }, + Timestamp: testTime, + } + status := New().Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go new file mode 100644 index 000000000000..2eb3f492c6ef --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go @@ -0,0 +1,137 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package replicated + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle replicated pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with replicated pods on node drain. +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { + return drainability.NewUndefinedStatus() + } + + controllerRef := drain.ControllerRef(pod) + replicated := controllerRef != nil + + if drainCtx.DeleteOptions.SkipNodesWithCustomControllerPods { + // TODO(vadasambar): remove this when we get rid of skipNodesWithCustomControllerPods + if status := legacyCheck(drainCtx, pod); status.Outcome != drainability.UndefinedOutcome { + return status + } + replicated = replicated && replicatedKind[controllerRef.Kind] + } + + if pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) || replicated { + return drainability.NewUndefinedStatus() + } + + return drainability.NewBlockedStatus(drain.NotReplicated, fmt.Errorf("%s/%s is not replicated", pod.Namespace, pod.Name)) +} + +// replicatedKind returns true if this kind has replicates pods. +var replicatedKind = map[string]bool{ + "ReplicationController": true, + "Job": true, + "ReplicaSet": true, + "StatefulSet": true, +} + +func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drainCtx.Listers == nil { + return drainability.NewUndefinedStatus() + } + + // For now, owner controller must be in the same namespace as the pod + // so OwnerReference doesn't have its own Namespace field. + controllerNamespace := pod.Namespace + + controllerRef := drain.ControllerRef(pod) + if controllerRef == nil { + return drainability.NewUndefinedStatus() + } + refKind := controllerRef.Kind + + if refKind == "ReplicationController" { + rc, err := drainCtx.Listers.ReplicationControllerLister().ReplicationControllers(controllerNamespace).Get(controllerRef.Name) + // Assume RC is either gone/missing or has too few replicas configured. + if err != nil || rc == nil { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) + } + + // TODO: Replace the minReplica check with PDB. + if rc.Spec.Replicas != nil && int(*rc.Spec.Replicas) < drainCtx.DeleteOptions.MinReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, drainCtx.DeleteOptions.MinReplicaCount)) + } + } else if pod_util.IsDaemonSetPod(pod) { + if refKind == "DaemonSet" { + // We don't have a listener for the other DaemonSet kind. + // TODO: Use a generic client for checking the reference. + return drainability.NewUndefinedStatus() + } + + _, err := drainCtx.Listers.DaemonSetLister().DaemonSets(controllerNamespace).Get(controllerRef.Name) + if err != nil { + if apierrors.IsNotFound(err) { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("daemonset for %s/%s is not present, err: %v", pod.Namespace, pod.Name, err)) + } + return drainability.NewBlockedStatus(drain.UnexpectedError, fmt.Errorf("error when trying to get daemonset for %s/%s , err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "Job" { + job, err := drainCtx.Listers.JobLister().Jobs(controllerNamespace).Get(controllerRef.Name) + + if err != nil || job == nil { + // Assume the only reason for an error is because the Job is gone/missing. + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("job for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "ReplicaSet" { + rs, err := drainCtx.Listers.ReplicaSetLister().ReplicaSets(controllerNamespace).Get(controllerRef.Name) + + if err == nil && rs != nil { + // Assume the only reason for an error is because the RS is gone/missing. + if rs.Spec.Replicas != nil && int(*rs.Spec.Replicas) < drainCtx.DeleteOptions.MinReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rs.Spec.Replicas, drainCtx.DeleteOptions.MinReplicaCount)) + } + } else { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "StatefulSet" { + ss, err := drainCtx.Listers.StatefulSetLister().StatefulSets(controllerNamespace).Get(controllerRef.Name) + + if err != nil && ss == nil { + // Assume the only reason for an error is because the SS is gone/missing. + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("statefulset for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) + } + } + + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go new file mode 100644 index 000000000000..905c63780b59 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go @@ -0,0 +1,421 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package replicated + +import ( + "fmt" + "testing" + "time" + + appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" + . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + v1appslister "k8s.io/client-go/listers/apps/v1" + v1lister "k8s.io/client-go/listers/core/v1" + + "github.com/stretchr/testify/assert" +) + +func TestDrain(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + + rcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + ds = appsv1.DaemonSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ds", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/daemonsets/ds", + }, + } + + dsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(ds.Name, "DaemonSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + cdsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(ds.Name, "CustomDaemonSet", "crd/v1", ""), + Annotations: map[string]string{ + "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + job = batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "default", + SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", + }, + } + + jobPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + } + + statefulset = appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ss", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/statefulsets/ss", + }, + } + + ssPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), + }, + } + + rs = appsv1.ReplicaSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rs", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicasets/rs", + }, + Spec: appsv1.ReplicaSetSpec{ + Replicas: &replicas, + }, + } + + rsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + rsPodDeleted = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + customControllerPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + // Using names like FooController is discouraged + // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#naming-conventions + // vadasambar: I am using it here just because `FooController`` + // is easier to understand than say `FooSet` + OwnerReferences: GenerateOwnerReferences("Foo", "FooController", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + nakedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + nakedFailedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyNever, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + nakedTerminalPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + } + + nakedEvictedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyAlways, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + nakedSafePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + zeroGracePeriod = int64(0) + nakedLongTerminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + + extendedGracePeriod = int64(6 * 60) // 6 minutes + nakedLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + ) + + type testCase struct { + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + + // TODO(vadasambar): remove this when we get rid of scaleDownNodesWithCustomControllerPods + skipNodesWithCustomControllerPods bool + + wantReason drain.BlockingPodReason + wantError bool + } + + sharedTests := []testCase{ + { + desc: "RC-managed pod", + pod: rcPod, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "DS-managed pod", + pod: dsPod, + }, + { + desc: "DS-managed pod by a custom Daemonset", + pod: cdsPod, + }, + { + desc: "Job-managed pod", + pod: jobPod, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "SS-managed pod", + pod: ssPod, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "RS-managed pod", + pod: rsPod, + rss: []*appsv1.ReplicaSet{&rs}, + }, + { + desc: "RS-managed pod that is being deleted", + pod: rsPodDeleted, + rss: []*appsv1.ReplicaSet{&rs}, + }, + { + desc: "naked pod", + pod: nakedPod, + wantReason: drain.NotReplicated, + wantError: true, + }, + { + desc: "naked failed pod", + pod: nakedFailedPod, + }, + { + desc: "naked terminal pod", + pod: nakedTerminalPod, + }, + { + desc: "naked evicted pod", + pod: nakedEvictedPod, + }, + { + desc: "naked pod with PodSafeToEvict annotation", + pod: nakedSafePod, + }, + { + desc: "naked long terminating pod with 0 grace period", + pod: nakedLongTerminatingPod, + }, + { + desc: "naked long terminating pod with extended grace period", + pod: nakedLongTerminatingPodWithExtendedGracePeriod, + }, + } + + var tests []testCase + + // Note: do not modify the underlying reference values for sharedTests. + for _, test := range sharedTests { + for _, skipNodesWithCustomControllerPods := range []bool{true, false} { + // Copy test to prevent side effects. + test := test + test.skipNodesWithCustomControllerPods = skipNodesWithCustomControllerPods + test.desc = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.desc, skipNodesWithCustomControllerPods) + tests = append(tests, test) + } + } + + customControllerTests := []testCase{ + { + desc: "Custom-controller-managed blocking pod", + pod: customControllerPod, + skipNodesWithCustomControllerPods: true, + wantReason: drain.NotReplicated, + wantError: true, + }, + { + desc: "Custom-controller-managed non-blocking pod", + pod: customControllerPod, + }, + } + tests = append(tests, customControllerTests...) + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + var err error + var rcLister v1lister.ReplicationControllerLister + if len(test.rcs) > 0 { + rcLister, err = kube_util.NewTestReplicationControllerLister(test.rcs) + assert.NoError(t, err) + } + var rsLister v1appslister.ReplicaSetLister + if len(test.rss) > 0 { + rsLister, err = kube_util.NewTestReplicaSetLister(test.rss) + assert.NoError(t, err) + } + dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) + assert.NoError(t, err) + jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) + assert.NoError(t, err) + ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) + assert.NoError(t, err) + + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) + + drainCtx := &drainability.DrainContext{ + DeleteOptions: options.NodeDeleteOptions{ + SkipNodesWithCustomControllerPods: test.skipNodesWithCustomControllerPods, + }, + Listers: registry, + Timestamp: testTime, + } + status := New().Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 1733a2b8dac5..1dd1d5e4e24c 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -20,7 +20,11 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/localstorage" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/mirror" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/notsafetoevict" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicated" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" ) // Rule determines whether a given pod can be drained or not. @@ -36,6 +40,10 @@ type Rule interface { func Default() Rules { return []Rule{ mirror.New(), + replicated.New(), + system.New(), + notsafetoevict.New(), + localstorage.New(), } } diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule.go b/cluster-autoscaler/simulator/drainability/rules/system/rule.go new file mode 100644 index 000000000000..14eef8585510 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule.go @@ -0,0 +1,47 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package system + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle system pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with system pods on node drain. +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { + return drainability.NewUndefinedStatus() + } + + if drainCtx.DeleteOptions.SkipNodesWithSystemPods && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { + return drainability.NewBlockedStatus(drain.UnmovableKubeSystemPod, fmt.Errorf("non-daemonset, non-mirrored, non-pdb-assigned kube-system pod present: %s", pod.Name)) + } + + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go new file mode 100644 index 000000000000..5be7f835b301 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go @@ -0,0 +1,308 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package system + +import ( + "testing" + "time" + + appsv1 "k8s.io/api/apps/v1" + apiv1 "k8s.io/api/core/v1" + policyv1 "k8s.io/api/policy/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + + "github.com/stretchr/testify/assert" +) + +func TestDrain(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + + rcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + kubeSystemRc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "kube-system", + SelfLink: "api/v1/namespaces/kube-system/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + + kubeSystemRcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + OwnerReferences: GenerateOwnerReferences(kubeSystemRc.Name, "ReplicationController", "core/v1", ""), + Labels: map[string]string{ + "k8s-app": "bar", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + emptyPDB = &policyv1.PodDisruptionBudget{} + + kubeSystemPDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kube-system", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "bar", + }, + }, + }, + } + + kubeSystemFakePDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kube-system", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "foo", + }, + }, + }, + } + + defaultNamespacePDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "PDB-managed pod", + }, + }, + }, + } + + kubeSystemFailedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyNever, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + kubeSystemTerminalPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + } + + kubeSystemEvictedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyAlways, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + + kubeSystemSafePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + + zeroGracePeriod = int64(0) + kubeSystemLongTerminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + + extendedGracePeriod = int64(6 * 60) // 6 minutes + kubeSystemLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + ) + + for _, test := range []struct { + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + pdbs []*policyv1.PodDisruptionBudget + + wantReason drain.BlockingPodReason + wantError bool + }{ + { + desc: "kube-system pod with PodSafeToEvict annotation", + pod: kubeSystemSafePod, + }, + { + desc: "empty PDB with RC-managed pod", + pod: rcPod, + rcs: []*apiv1.ReplicationController{&rc}, + pdbs: []*policyv1.PodDisruptionBudget{emptyPDB}, + }, + { + desc: "kube-system PDB with matching kube-system pod", + pod: kubeSystemRcPod, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, + }, + { + desc: "kube-system PDB with non-matching kube-system pod", + pod: kubeSystemRcPod, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemFakePDB}, + wantReason: drain.UnmovableKubeSystemPod, + wantError: true, + }, + { + desc: "kube-system PDB with default namespace pod", + pod: rcPod, + rcs: []*apiv1.ReplicationController{&rc}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, + }, + { + desc: "default namespace PDB with matching labels kube-system pod", + pod: kubeSystemRcPod, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, + wantReason: drain.UnmovableKubeSystemPod, + wantError: true, + }, + { + desc: "kube-system failed pod", + pod: kubeSystemFailedPod, + }, + { + desc: "kube-system terminal pod", + pod: kubeSystemTerminalPod, + }, + { + desc: "kube-system evicted pod", + pod: kubeSystemEvictedPod, + }, + { + desc: "kube-system pod with PodSafeToEvict annotation", + pod: kubeSystemSafePod, + }, + { + desc: "kube-system long terminating pod with 0 grace period", + pod: kubeSystemLongTerminatingPod, + }, + { + desc: "kube-system long terminating pod with extended grace period", + pod: kubeSystemLongTerminatingPodWithExtendedGracePeriod, + }, + } { + t.Run(test.desc, func(t *testing.T) { + tracker := pdb.NewBasicRemainingPdbTracker() + tracker.SetPdbs(test.pdbs) + + drainCtx := &drainability.DrainContext{ + RemainingPdbTracker: tracker, + DeleteOptions: options.NodeDeleteOptions{ + SkipNodesWithSystemPods: true, + }, + Timestamp: testTime, + } + status := New().Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) + } +} diff --git a/cluster-autoscaler/simulator/options/nodedelete.go b/cluster-autoscaler/simulator/options/nodedelete.go index 947095d6eb78..6b6e17a1b7e9 100644 --- a/cluster-autoscaler/simulator/options/nodedelete.go +++ b/cluster-autoscaler/simulator/options/nodedelete.go @@ -42,7 +42,7 @@ func NewNodeDeleteOptions(opts config.AutoscalingOptions) NodeDeleteOptions { return NodeDeleteOptions{ SkipNodesWithSystemPods: opts.SkipNodesWithSystemPods, SkipNodesWithLocalStorage: opts.SkipNodesWithLocalStorage, - MinReplicaCount: opts.MinReplicaCount, SkipNodesWithCustomControllerPods: opts.SkipNodesWithCustomControllerPods, + MinReplicaCount: opts.MinReplicaCount, } } diff --git a/cluster-autoscaler/utils/drain/drain.go b/cluster-autoscaler/utils/drain/drain.go index 46b9537af06b..45a28a384185 100644 --- a/cluster-autoscaler/utils/drain/drain.go +++ b/cluster-autoscaler/utils/drain/drain.go @@ -17,16 +17,12 @@ limitations under the License. package drain import ( - "fmt" "strings" "time" apiv1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) @@ -74,179 +70,35 @@ const ( UnexpectedError ) -// GetPodsForDeletionOnNodeDrain returns pods that should be deleted on node drain as well as some extra information -// about possibly problematic pods (unreplicated and DaemonSets). +// GetPodsForDeletionOnNodeDrain returns pods that should be deleted on node +// drain as well as some extra information about possibly problematic pods +// (unreplicated and DaemonSets). +// +// This function assumes that default drainability rules have already been run +// to verify pod drainability. func GetPodsForDeletionOnNodeDrain( podList []*apiv1.Pod, pdbs []*policyv1.PodDisruptionBudget, skipNodesWithSystemPods bool, skipNodesWithLocalStorage bool, skipNodesWithCustomControllerPods bool, - listers kube_util.ListerRegistry, - minReplica int32, - currentTime time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *BlockingPod, err error) { + currentTime time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod) { pods = []*apiv1.Pod{} daemonSetPods = []*apiv1.Pod{} - // filter kube-system PDBs to avoid doing it for every kube-system pod - kubeSystemPDBs := make([]*policyv1.PodDisruptionBudget, 0) - for _, pdb := range pdbs { - if pdb.Namespace == "kube-system" { - kubeSystemPDBs = append(kubeSystemPDBs, pdb) - } - } for _, pod := range podList { - // Possibly skip a pod under deletion but only if it was being deleted for long enough - // to avoid a situation when we delete the empty node immediately after the pod was marked for - // deletion without respecting any graceful termination. if IsPodLongTerminating(pod, currentTime) { - // pod is being deleted for long enough - no need to care about it. continue } - isDaemonSetPod := false - replicated := false - safeToEvict := hasSafeToEvictAnnotation(pod) - terminal := isPodTerminal(pod) - - if skipNodesWithCustomControllerPods { - // TODO(vadasambar): remove this when we get rid of skipNodesWithCustomControllerPods - replicated, isDaemonSetPod, blockingPod, err = legacyCheckForReplicatedPods(listers, pod, minReplica) - if err != nil { - return []*apiv1.Pod{}, []*apiv1.Pod{}, blockingPod, err - } - } else { - replicated = ControllerRef(pod) != nil - isDaemonSetPod = pod_util.IsDaemonSetPod(pod) - } - - if isDaemonSetPod { + if pod_util.IsDaemonSetPod(pod) { daemonSetPods = append(daemonSetPods, pod) - continue - } - - if !safeToEvict && !terminal { - if hasNotSafeToEvictAnnotation(pod) { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: NotSafeToEvictAnnotation}, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name) - } - if !replicated { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: NotReplicated}, fmt.Errorf("%s/%s is not replicated", pod.Namespace, pod.Name) - } - if pod.Namespace == "kube-system" && skipNodesWithSystemPods { - hasPDB, err := checkKubeSystemPDBs(pod, kubeSystemPDBs) - if err != nil { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: UnexpectedError}, fmt.Errorf("error matching pods to pdbs: %v", err) - } - if !hasPDB { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: UnmovableKubeSystemPod}, fmt.Errorf("non-daemonset, non-mirrored, non-pdb-assigned kube-system pod present: %s", pod.Name) - } - } - if HasBlockingLocalStorage(pod) && skipNodesWithLocalStorage { - return []*apiv1.Pod{}, []*apiv1.Pod{}, &BlockingPod{Pod: pod, Reason: LocalStorageRequested}, fmt.Errorf("pod with local storage present: %s", pod.Name) - } - } - pods = append(pods, pod) - } - return pods, daemonSetPods, nil, nil -} - -func legacyCheckForReplicatedPods(listers kube_util.ListerRegistry, pod *apiv1.Pod, minReplica int32) (replicated bool, isDaemonSetPod bool, blockingPod *BlockingPod, err error) { - replicated = false - refKind := "" - checkReferences := listers != nil - isDaemonSetPod = false - - controllerRef := ControllerRef(pod) - if controllerRef != nil { - refKind = controllerRef.Kind - } - - // For now, owner controller must be in the same namespace as the pod - // so OwnerReference doesn't have its own Namespace field - controllerNamespace := pod.Namespace - if refKind == "ReplicationController" { - if checkReferences { - rc, err := listers.ReplicationControllerLister().ReplicationControllers(controllerNamespace).Get(controllerRef.Name) - // Assume a reason for an error is because the RC is either - // gone/missing or that the rc has too few replicas configured. - // TODO: replace the minReplica check with pod disruption budget. - if err == nil && rc != nil { - if rc.Spec.Replicas != nil && *rc.Spec.Replicas < minReplica { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: MinReplicasReached}, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", - pod.Namespace, pod.Name, rc.Spec.Replicas, minReplica) - } - replicated = true - } else { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: ControllerNotFound}, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err) - } } else { - replicated = true - } - } else if pod_util.IsDaemonSetPod(pod) { - isDaemonSetPod = true - // don't have listener for other DaemonSet kind - // TODO: we should use a generic client for checking the reference. - if checkReferences && refKind == "DaemonSet" { - _, err := listers.DaemonSetLister().DaemonSets(controllerNamespace).Get(controllerRef.Name) - if apierrors.IsNotFound(err) { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: ControllerNotFound}, fmt.Errorf("daemonset for %s/%s is not present, err: %v", pod.Namespace, pod.Name, err) - } else if err != nil { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: UnexpectedError}, fmt.Errorf("error when trying to get daemonset for %s/%s , err: %v", pod.Namespace, pod.Name, err) - } - } - } else if refKind == "Job" { - if checkReferences { - job, err := listers.JobLister().Jobs(controllerNamespace).Get(controllerRef.Name) - - // Assume the only reason for an error is because the Job is - // gone/missing, not for any other cause. TODO(mml): something more - // sophisticated than this - if err == nil && job != nil { - replicated = true - } else { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: ControllerNotFound}, fmt.Errorf("job for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err) - } - } else { - replicated = true - } - } else if refKind == "ReplicaSet" { - if checkReferences { - rs, err := listers.ReplicaSetLister().ReplicaSets(controllerNamespace).Get(controllerRef.Name) - - // Assume the only reason for an error is because the RS is - // gone/missing, not for any other cause. TODO(mml): something more - // sophisticated than this - if err == nil && rs != nil { - if rs.Spec.Replicas != nil && *rs.Spec.Replicas < minReplica { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: MinReplicasReached}, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", - pod.Namespace, pod.Name, rs.Spec.Replicas, minReplica) - } - replicated = true - } else { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: ControllerNotFound}, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err) - } - } else { - replicated = true - } - } else if refKind == "StatefulSet" { - if checkReferences { - ss, err := listers.StatefulSetLister().StatefulSets(controllerNamespace).Get(controllerRef.Name) - - // Assume the only reason for an error is because the StatefulSet is - // gone/missing, not for any other cause. TODO(mml): something more - // sophisticated than this - if err == nil && ss != nil { - replicated = true - } else { - return replicated, isDaemonSetPod, &BlockingPod{Pod: pod, Reason: ControllerNotFound}, fmt.Errorf("statefulset for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err) - } - } else { - replicated = true + pods = append(pods, pod) } } - - return replicated, isDaemonSetPod, &BlockingPod{}, nil + return pods, daemonSetPods } // ControllerRef returns the OwnerReference to pod's controller. @@ -254,8 +106,8 @@ func ControllerRef(pod *apiv1.Pod) *metav1.OwnerReference { return metav1.GetControllerOf(pod) } -// isPodTerminal checks whether the pod is in a terminal state. -func isPodTerminal(pod *apiv1.Pod) bool { +// IsPodTerminal checks whether the pod is in a terminal state. +func IsPodTerminal(pod *apiv1.Pod) bool { // pod will never be restarted if pod.Spec.RestartPolicy == apiv1.RestartPolicyNever && (pod.Status.Phase == apiv1.PodSucceeded || pod.Status.Phase == apiv1.PodFailed) { return true @@ -296,29 +148,14 @@ func isLocalVolume(volume *apiv1.Volume) bool { return volume.HostPath != nil || (volume.EmptyDir != nil && volume.EmptyDir.Medium != apiv1.StorageMediumMemory) } -// This only checks if a matching PDB exist and therefore if it makes sense to attempt drain simulation, -// as we check for allowed-disruptions later anyway (for all pods with PDB, not just in kube-system) -func checkKubeSystemPDBs(pod *apiv1.Pod, pdbs []*policyv1.PodDisruptionBudget) (bool, error) { - for _, pdb := range pdbs { - selector, err := metav1.LabelSelectorAsSelector(pdb.Spec.Selector) - if err != nil { - return false, err - } - if selector.Matches(labels.Set(pod.Labels)) { - return true, nil - } - } - - return false, nil -} - -// This checks if pod has PodSafeToEvictKey annotation -func hasSafeToEvictAnnotation(pod *apiv1.Pod) bool { +// HasSafeToEvictAnnotation checks if pod has PodSafeToEvictKey annotation. +func HasSafeToEvictAnnotation(pod *apiv1.Pod) bool { return pod.GetAnnotations()[PodSafeToEvictKey] == "true" } -// This checks if pod has PodSafeToEvictKey annotation set to false -func hasNotSafeToEvictAnnotation(pod *apiv1.Pod) bool { +// HasNotSafeToEvictAnnotation checks if pod has PodSafeToEvictKey annotation +// set to false. +func HasNotSafeToEvictAnnotation(pod *apiv1.Pod) bool { return pod.GetAnnotations()[PodSafeToEvictKey] == "false" } diff --git a/cluster-autoscaler/utils/drain/drain_test.go b/cluster-autoscaler/utils/drain/drain_test.go index 52ce4949a54e..0a20b781a9ac 100644 --- a/cluster-autoscaler/utils/drain/drain_test.go +++ b/cluster-autoscaler/utils/drain/drain_test.go @@ -26,10 +26,7 @@ import ( apiv1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" - v1appslister "k8s.io/client-go/listers/apps/v1" - v1lister "k8s.io/client-go/listers/core/v1" "github.com/stretchr/testify/assert" ) @@ -41,10 +38,8 @@ type testOpts struct { pdbs []*policyv1.PodDisruptionBudget rcs []*apiv1.ReplicationController replicaSets []*appsv1.ReplicaSet - expectFatal bool expectPods []*apiv1.Pod expectDaemonSetPods []*apiv1.Pod - expectBlockingPod *BlockingPod // TODO(vadasambar): remove this when we get rid of scaleDownNodesWithCustomControllerPods skipNodesWithCustomControllerPods bool } @@ -214,93 +209,6 @@ func TestDrain(t *testing.T) { }, } - nakedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - emptydirPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictVolumeSingleVal := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "scratch", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictLocalVolumeSingleValEmpty := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictLocalVolumeSingleValNonMatching := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "scratch-2", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - emptyDirSafeToEvictLocalVolumeMultiValAllMatching := &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -329,90 +237,6 @@ func TestDrain(t *testing.T) { }, } - emptyDirSafeToEvictLocalVolumeMultiValNonMatching := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-5", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "scratch-1,scratch-2", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictLocalVolumeMultiValEmpty := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: ",", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - terminalPod := &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -503,44 +327,6 @@ func TestDrain(t *testing.T) { }, } - unsafeRcPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - PodSafeToEvictKey: "false", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - unsafeJobPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), - Annotations: map[string]string{ - PodSafeToEvictKey: "false", - }, - }, - } - - unsafeNakedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - Annotations: map[string]string{ - PodSafeToEvictKey: "false", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - kubeSystemSafePod := &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -588,39 +374,12 @@ func TestDrain(t *testing.T) { }, } - kubeSystemFakePDB := &policyv1.PodDisruptionBudget{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "kube-system", - }, - Spec: policyv1.PodDisruptionBudgetSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - "k8s-app": "foo", - }, - }, - }, - } - - defaultNamespacePDB := &policyv1.PodDisruptionBudget{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - }, - Spec: policyv1.PodDisruptionBudgetSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - "k8s-app": "PDB-managed pod", - }, - }, - }, - } - sharedTests := []testOpts{ { description: "RC-managed pod", pods: []*apiv1.Pod{rcPod}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{rcPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -628,7 +387,6 @@ func TestDrain(t *testing.T) { description: "DS-managed pod", pods: []*apiv1.Pod{dsPod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{}, expectDaemonSetPods: []*apiv1.Pod{dsPod}, }, @@ -636,7 +394,6 @@ func TestDrain(t *testing.T) { description: "DS-managed pod by a custom Daemonset", pods: []*apiv1.Pod{cdsPod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{}, expectDaemonSetPods: []*apiv1.Pod{cdsPod}, }, @@ -645,7 +402,6 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{jobPod}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{jobPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -654,7 +410,6 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{ssPod}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{ssPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -663,7 +418,6 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{rsPod}, pdbs: []*policyv1.PodDisruptionBudget{}, replicaSets: []*appsv1.ReplicaSet{&rs}, - expectFatal: false, expectPods: []*apiv1.Pod{rsPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -672,57 +426,7 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{rsPodDeleted}, pdbs: []*policyv1.PodDisruptionBudget{}, replicaSets: []*appsv1.ReplicaSet{&rs}, - expectFatal: false, - expectPods: []*apiv1.Pod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "naked pod", - pods: []*apiv1.Pod{nakedPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: nakedPod, Reason: NotReplicated}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir", - pods: []*apiv1.Pod{emptydirPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptydirPod, Reason: LocalStorageRequested}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation", - pods: []*apiv1.Pod{emptyDirSafeToEvictVolumeSingleVal}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, - expectPods: []*apiv1.Pod{emptyDirSafeToEvictVolumeSingleVal}, - expectBlockingPod: &BlockingPod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and empty value for SafeToEvictLocalVolumesKey annotation", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeSingleValEmpty}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptyDirSafeToEvictLocalVolumeSingleValEmpty, Reason: LocalStorageRequested}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and non-matching value for SafeToEvictLocalVolumesKey annotation", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeSingleValNonMatching}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptyDirSafeToEvictLocalVolumeSingleValNonMatching, Reason: LocalStorageRequested}, expectDaemonSetPods: []*apiv1.Pod{}, }, { @@ -730,46 +434,13 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, - expectBlockingPod: &BlockingPod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with non-matching values", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValNonMatching}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptyDirSafeToEvictLocalVolumeMultiValNonMatching, Reason: LocalStorageRequested}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with some matching values", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals, Reason: LocalStorageRequested}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValEmpty}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: emptyDirSafeToEvictLocalVolumeMultiValEmpty, Reason: LocalStorageRequested}, expectDaemonSetPods: []*apiv1.Pod{}, }, { description: "failed pod", pods: []*apiv1.Pod{failedPod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{failedPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -778,7 +449,6 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{longTerminatingPod}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -787,7 +457,6 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, pdbs: []*policyv1.PodDisruptionBudget{}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -795,7 +464,6 @@ func TestDrain(t *testing.T) { description: "evicted pod", pods: []*apiv1.Pod{evictedPod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{evictedPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -803,7 +471,6 @@ func TestDrain(t *testing.T) { description: "pod in terminal state", pods: []*apiv1.Pod{terminalPod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{terminalPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -811,7 +478,6 @@ func TestDrain(t *testing.T) { description: "pod with PodSafeToEvict annotation", pods: []*apiv1.Pod{safePod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{safePod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -819,7 +485,6 @@ func TestDrain(t *testing.T) { description: "kube-system pod with PodSafeToEvict annotation", pods: []*apiv1.Pod{kubeSystemSafePod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{kubeSystemSafePod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -827,45 +492,14 @@ func TestDrain(t *testing.T) { description: "pod with EmptyDir and PodSafeToEvict annotation", pods: []*apiv1.Pod{emptydirSafePod}, pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, expectPods: []*apiv1.Pod{emptydirSafePod}, expectDaemonSetPods: []*apiv1.Pod{}, }, - { - description: "RC-managed pod with PodSafeToEvict=false annotation", - pods: []*apiv1.Pod{unsafeRcPod}, - rcs: []*apiv1.ReplicationController{&rc}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: unsafeRcPod, Reason: NotSafeToEvictAnnotation}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "Job-managed pod with PodSafeToEvict=false annotation", - pods: []*apiv1.Pod{unsafeJobPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: unsafeJobPod, Reason: NotSafeToEvictAnnotation}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "naked pod with PodSafeToEvict=false annotation", - pods: []*apiv1.Pod{unsafeNakedPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: unsafeNakedPod, Reason: NotSafeToEvictAnnotation}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, { description: "empty PDB with RC-managed pod", pods: []*apiv1.Pod{rcPod}, pdbs: []*policyv1.PodDisruptionBudget{emptyPDB}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{rcPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, @@ -874,129 +508,50 @@ func TestDrain(t *testing.T) { pods: []*apiv1.Pod{kubeSystemRcPod}, pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, rcs: []*apiv1.ReplicationController{&kubeSystemRc}, - expectFatal: false, expectPods: []*apiv1.Pod{kubeSystemRcPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, - { - description: "kube-system PDB with non-matching kube-system pod", - pods: []*apiv1.Pod{kubeSystemRcPod}, - pdbs: []*policyv1.PodDisruptionBudget{kubeSystemFakePDB}, - rcs: []*apiv1.ReplicationController{&kubeSystemRc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: kubeSystemRcPod, Reason: UnmovableKubeSystemPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, { description: "kube-system PDB with default namespace pod", pods: []*apiv1.Pod{rcPod}, pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, rcs: []*apiv1.ReplicationController{&rc}, - expectFatal: false, expectPods: []*apiv1.Pod{rcPod}, expectDaemonSetPods: []*apiv1.Pod{}, }, - { - description: "default namespace PDB with matching labels kube-system pod", - pods: []*apiv1.Pod{kubeSystemRcPod}, - pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, - rcs: []*apiv1.ReplicationController{&kubeSystemRc}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: kubeSystemRcPod, Reason: UnmovableKubeSystemPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, } allTests := []testOpts{} // Note: be careful about modifying the underlying reference values for sharedTest // since they are shared (changing it once will change it for all shallow copies of sharedTest) for _, sharedTest := range sharedTests { - // make sure you shallow copy the test like this - // before you modify it - // (so that modifying one test doesn't affect another) - enabledTest := sharedTest - disabledTest := sharedTest - - // to execute the same shared tests for when the skipNodesWithCustomControllerPods flag is true - // and when the flag is false - enabledTest.skipNodesWithCustomControllerPods = true - enabledTest.description = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%v", - enabledTest.description, enabledTest.skipNodesWithCustomControllerPods) - allTests = append(allTests, enabledTest) - - disabledTest.skipNodesWithCustomControllerPods = false - disabledTest.description = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%v", - disabledTest.description, disabledTest.skipNodesWithCustomControllerPods) - allTests = append(allTests, disabledTest) + for _, skipNodesWithCustomControllerPods := range []bool{true, false} { + // Copy test to prevent side effects. + test := sharedTest + test.skipNodesWithCustomControllerPods = skipNodesWithCustomControllerPods + test.description = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.description, skipNodesWithCustomControllerPods) + allTests = append(allTests, test) + } } allTests = append(allTests, testOpts{ - description: "Custom-controller-managed blocking pod", - pods: []*apiv1.Pod{customControllerPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: true, - expectPods: []*apiv1.Pod{}, - expectBlockingPod: &BlockingPod{Pod: customControllerPod, Reason: NotReplicated}, - expectDaemonSetPods: []*apiv1.Pod{}, - skipNodesWithCustomControllerPods: true, - }) - - allTests = append(allTests, testOpts{ - description: "Custom-controller-managed non-blocking pod", - pods: []*apiv1.Pod{customControllerPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectFatal: false, - expectPods: []*apiv1.Pod{customControllerPod}, - expectBlockingPod: &BlockingPod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - skipNodesWithCustomControllerPods: false, + description: "Custom-controller-managed non-blocking pod", + pods: []*apiv1.Pod{customControllerPod}, + pdbs: []*policyv1.PodDisruptionBudget{}, + expectPods: []*apiv1.Pod{customControllerPod}, + expectDaemonSetPods: []*apiv1.Pod{}, }) for _, test := range allTests { - var err error - var rcLister v1lister.ReplicationControllerLister - if len(test.rcs) > 0 { - rcLister, err = kube_util.NewTestReplicationControllerLister(test.rcs) - assert.NoError(t, err) - } - var rsLister v1appslister.ReplicaSetLister - if len(test.replicaSets) > 0 { - rsLister, err = kube_util.NewTestReplicaSetLister(test.replicaSets) - assert.NoError(t, err) - } - - dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) - assert.NoError(t, err) - jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) - assert.NoError(t, err) - ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) - assert.NoError(t, err) + t.Run(test.description, func(t *testing.T) { + pods, daemonSetPods := GetPodsForDeletionOnNodeDrain(test.pods, test.pdbs, true, true, test.skipNodesWithCustomControllerPods, testTime) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) - - pods, daemonSetPods, blockingPod, err := GetPodsForDeletionOnNodeDrain(test.pods, test.pdbs, true, true, test.skipNodesWithCustomControllerPods, registry, 0, testTime) - - if test.expectFatal { - assert.Equal(t, test.expectBlockingPod, blockingPod) - if err == nil { - t.Fatalf("%s: unexpected non-error", test.description) + if len(pods) != len(test.expectPods) { + t.Fatal("wrong pod list content") } - } - if !test.expectFatal { - assert.Nil(t, blockingPod) - if err != nil { - t.Fatalf("%s: error occurred: %v", test.description, err) - } - } - - if len(pods) != len(test.expectPods) { - t.Fatalf("Wrong pod list content: %v", test.description) - } - - assert.ElementsMatch(t, test.expectDaemonSetPods, daemonSetPods) + assert.ElementsMatch(t, test.expectDaemonSetPods, daemonSetPods) + }) } } diff --git a/cluster-autoscaler/utils/pod/pod.go b/cluster-autoscaler/utils/pod/pod.go index 89dd04b5f9d1..b85b14ac32a2 100644 --- a/cluster-autoscaler/utils/pod/pod.go +++ b/cluster-autoscaler/utils/pod/pod.go @@ -35,11 +35,7 @@ func IsDaemonSetPod(pod *apiv1.Pod) bool { return true } - if val, ok := pod.Annotations[DaemonSetPodAnnotationKey]; ok && val == "true" { - return true - } - - return false + return pod.Annotations[DaemonSetPodAnnotationKey] == "true" } // IsMirrorPod checks whether the pod is a mirror pod. From d6ee96db194898004c4fb7ba56474aa76d7fb58d Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Sat, 30 Sep 2023 07:20:22 +0000 Subject: [PATCH 094/125] Convert scale-down pdb check to drainability rule --- cluster-autoscaler/simulator/drain.go | 26 +-- .../simulator/drainability/rules/pdb/rule.go | 43 +++++ .../drainability/rules/pdb/rule_test.go | 155 ++++++++++++++++++ .../simulator/drainability/rules/rules.go | 2 + 4 files changed, 209 insertions(+), 17 deletions(-) create mode 100644 cluster-autoscaler/simulator/drainability/rules/pdb/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 101844ad65d3..daf8407cac7d 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -17,7 +17,6 @@ limitations under the License. package simulator import ( - "fmt" "time" apiv1 "k8s.io/api/core/v1" @@ -31,14 +30,14 @@ import ( schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" ) -// GetPodsToMove returns a list of pods that should be moved elsewhere -// and a list of DaemonSet pods that should be evicted if the node -// is drained. Raises error if there is an unreplicated pod. -// Based on kubectl drain code. If listers is nil it makes an assumption that RC, DS, Jobs and RS were deleted -// along with their pods (no abandoned pods with dangling created-by annotation). -// If listers is not nil it checks whether RC, DS, Jobs and RS that created these pods -// still exist. -// TODO(x13n): Rewrite GetPodsForDeletionOnNodeDrain into a set of DrainabilityRules. +// GetPodsToMove returns a list of pods that should be moved elsewhere and a +// list of DaemonSet pods that should be evicted if the node is drained. +// Raises error if there is an unreplicated pod. +// Based on kubectl drain code. If listers is nil it makes an assumption that +// RC, DS, Jobs and RS were deleted along with their pods (no abandoned pods +// with dangling created-by annotation). +// If listers is not nil it checks whether RC, DS, Jobs and RS that created +// these pods still exist. func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, listers kube_util.ListerRegistry, remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { var drainPods, drainDs []*apiv1.Pod if drainabilityRules == nil { @@ -82,13 +81,6 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. deleteOptions.SkipNodesWithLocalStorage, deleteOptions.SkipNodesWithCustomControllerPods, timestamp) - pods = append(pods, drainPods...) - daemonSetPods = append(daemonSetPods, drainDs...) - if canRemove, _, blockingPodInfo := remainingPdbTracker.CanRemovePods(pods); !canRemove { - pod := blockingPodInfo.Pod - return []*apiv1.Pod{}, []*apiv1.Pod{}, blockingPodInfo, fmt.Errorf("not enough pod disruption budget to move %s/%s", pod.Namespace, pod.Name) - } - - return pods, daemonSetPods, nil, nil + return append(pods, drainPods...), append(daemonSetPods, drainDs...), nil, nil } diff --git a/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go b/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go new file mode 100644 index 000000000000..a0d315fc7c0f --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go @@ -0,0 +1,43 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pdb + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +// Rule is a drainability rule on how to handle pods with pdbs. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides how to handle pods with pdbs on node drain. +func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + for _, pdb := range drainCtx.RemainingPdbTracker.MatchingPdbs(pod) { + if pdb.Status.DisruptionsAllowed < 1 { + return drainability.NewBlockedStatus(drain.NotEnoughPdb, fmt.Errorf("not enough pod disruption budget to move %s/%s", pod.Namespace, pod.Name)) + } + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go new file mode 100644 index 000000000000..741cf1fd2f3f --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go @@ -0,0 +1,155 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pdb + +import ( + "testing" + + apiv1 "k8s.io/api/core/v1" + policyv1 "k8s.io/api/policy/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +func TestRule(t *testing.T) { + one := intstr.FromInt(1) + + testCases := []struct { + desc string + pod *apiv1.Pod + pdbs []*policyv1.PodDisruptionBudget + wantOutcome drainability.OutcomeType + wantReason drain.BlockingPodReason + }{ + { + desc: "no pdbs", + pod: &apiv1.Pod{}, + }, + { + desc: "no matching pdbs", + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "happy", + Namespace: "good", + Labels: map[string]string{ + "label": "true", + }, + }, + }, + pdbs: []*policyv1.PodDisruptionBudget{ + { + ObjectMeta: metav1.ObjectMeta{ + Namespace: "bad", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "label": "true", + }, + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Namespace: "good", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "label": "false", + }, + }, + }, + }, + }, + }, + { + desc: "pdb prevents scale-down", + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sad", + Namespace: "good", + Labels: map[string]string{ + "label": "true", + }, + }, + }, + pdbs: []*policyv1.PodDisruptionBudget{ + { + ObjectMeta: metav1.ObjectMeta{ + Namespace: "bad", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "label": "true", + }, + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Namespace: "good", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "label": "true", + }, + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Namespace: "good", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "label": "false", + }, + }, + }, + }, + }, + wantOutcome: drainability.BlockDrain, + wantReason: drain.NotEnoughPdb, + }, + } + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + tracker := pdb.NewBasicRemainingPdbTracker() + tracker.SetPdbs(tc.pdbs) + drainCtx := &drainability.DrainContext{ + RemainingPdbTracker: tracker, + } + + got := New().Drainable(drainCtx, tc.pod) + if got.Outcome != tc.wantOutcome || got.BlockingReason != tc.wantReason { + t.Errorf("Rule.Drainable(%s) = (outcome: %v, reason: %v), want (outcome: %v, reason: %v)", tc.pod.Name, got.Outcome, got.BlockingReason, tc.wantOutcome, tc.wantReason) + } + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 1dd1d5e4e24c..4452dbbc4ec5 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -23,6 +23,7 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/localstorage" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/mirror" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/notsafetoevict" + pdbrule "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicated" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" ) @@ -44,6 +45,7 @@ func Default() Rules { system.New(), notsafetoevict.New(), localstorage.New(), + pdbrule.New(), } } From 324a33ede8ba67c961a67c43553aeac78ad00919 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Mon, 2 Oct 2023 18:37:09 +0000 Subject: [PATCH 095/125] Pass DeleteOptions once during default rule creation --- .../core/static_autoscaler_test.go | 2 +- cluster-autoscaler/main.go | 2 +- cluster-autoscaler/simulator/drain.go | 3 +- cluster-autoscaler/simulator/drain_test.go | 2 +- .../simulator/drainability/context.go | 2 -- .../drainability/rules/localstorage/rule.go | 19 ++++++------- .../rules/localstorage/rule_test.go | 22 ++++++++------- .../drainability/rules/notsafetoevict/rule.go | 7 +---- .../rules/notsafetoevict/rule_test.go | 4 --- .../drainability/rules/replicated/rule.go | 28 +++++++++++-------- .../rules/replicated/rule_test.go | 6 +--- .../simulator/drainability/rules/rules.go | 9 +++--- .../drainability/rules/system/rule.go | 17 +++++------ .../drainability/rules/system/rule_test.go | 26 +++++++++-------- 14 files changed, 71 insertions(+), 78 deletions(-) diff --git a/cluster-autoscaler/core/static_autoscaler_test.go b/cluster-autoscaler/core/static_autoscaler_test.go index 1a6fc141ec46..75b0db264d50 100644 --- a/cluster-autoscaler/core/static_autoscaler_test.go +++ b/cluster-autoscaler/core/static_autoscaler_test.go @@ -153,7 +153,7 @@ func (m *onNodeGroupDeleteMock) Delete(id string) error { func setUpScaleDownActuator(ctx *context.AutoscalingContext, autoscalingOptions config.AutoscalingOptions) { deleteOptions := options.NewNodeDeleteOptions(autoscalingOptions) - ctx.ScaleDownActuator = actuation.NewActuator(ctx, nil, deletiontracker.NewNodeDeletionTracker(0*time.Second), deleteOptions, rules.Default(), NewTestProcessors(ctx).NodeGroupConfigProcessor) + ctx.ScaleDownActuator = actuation.NewActuator(ctx, nil, deletiontracker.NewNodeDeletionTracker(0*time.Second), deleteOptions, rules.Default(deleteOptions), NewTestProcessors(ctx).NodeGroupConfigProcessor) } func TestStaticAutoscalerRunOnce(t *testing.T) { diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 6855ca1c6c49..5f879522670a 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -481,7 +481,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter if autoscalingOptions.ParallelDrain { sdCandidatesSorting := previouscandidates.NewPreviousCandidates() scaleDownCandidatesComparers = []scaledowncandidates.CandidatesComparer{ - emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions, rules.Default()), + emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions, rules.Default(deleteOptions)), sdCandidatesSorting, } opts.Processors.ScaleDownCandidatesNotifier.Register(sdCandidatesSorting) diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index daf8407cac7d..5df8585e1f3b 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -41,14 +41,13 @@ import ( func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, listers kube_util.ListerRegistry, remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { var drainPods, drainDs []*apiv1.Pod if drainabilityRules == nil { - drainabilityRules = rules.Default() + drainabilityRules = rules.Default(deleteOptions) } if remainingPdbTracker == nil { remainingPdbTracker = pdb.NewBasicRemainingPdbTracker() } drainCtx := &drainability.DrainContext{ RemainingPdbTracker: remainingPdbTracker, - DeleteOptions: deleteOptions, Listers: listers, Timestamp: timestamp, } diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index 1671fdfb9510..1a7326be9a52 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -312,7 +312,7 @@ func TestGetPodsToMove(t *testing.T) { SkipNodesWithLocalStorage: true, SkipNodesWithCustomControllerPods: true, } - rules := append(tc.rules, rules.Default()...) + rules := append(tc.rules, rules.Default(deleteOptions)...) tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(tc.pdbs) p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, rules, nil, tracker, testTime) diff --git a/cluster-autoscaler/simulator/drainability/context.go b/cluster-autoscaler/simulator/drainability/context.go index d6fd7116ca02..ffaa44b4b29c 100644 --- a/cluster-autoscaler/simulator/drainability/context.go +++ b/cluster-autoscaler/simulator/drainability/context.go @@ -20,14 +20,12 @@ import ( "time" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" ) // DrainContext contains parameters for drainability rules. type DrainContext struct { RemainingPdbTracker pdb.RemainingPdbTracker - DeleteOptions options.NodeDeleteOptions Listers kube_util.ListerRegistry Timestamp time.Time } diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go index 6a58da1dd32d..dd01c52ea764 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go @@ -26,22 +26,21 @@ import ( ) // Rule is a drainability rule on how to handle local storage pods. -type Rule struct{} +type Rule struct { + enabled bool +} // New creates a new Rule. -func New() *Rule { - return &Rule{} +func New(enabled bool) *Rule { + return &Rule{ + enabled: enabled, + } } // Drainable decides what to do with local storage pods on node drain. -func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { - return drainability.NewUndefinedStatus() - } - - if drainCtx.DeleteOptions.SkipNodesWithLocalStorage && drain.HasBlockingLocalStorage(pod) { +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if r.enabled && !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && drain.HasBlockingLocalStorage(pod) { return drainability.NewBlockedStatus(drain.LocalStorageRequested, fmt.Errorf("pod with local storage present: %s", pod.Name)) } - return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go index 222eb8fd7b6e..fb98c35e8564 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go @@ -24,7 +24,6 @@ import ( apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" @@ -357,10 +356,11 @@ func TestDrain(t *testing.T) { ) for _, test := range []struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + disabledRule bool wantReason drain.BlockingPodReason wantError bool @@ -417,7 +417,12 @@ func TestDrain(t *testing.T) { wantReason: drain.LocalStorageRequested, wantError: true, }, - + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values and rule disabled", + pod: emptyDirSafeToEvictLocalVolumeMultiValEmpty, + rcs: []*apiv1.ReplicationController{&rc}, + disabledRule: true, + }, { desc: "EmptyDir failed pod", pod: emptyDirFailedPod, @@ -445,12 +450,9 @@ func TestDrain(t *testing.T) { } { t.Run(test.desc, func(t *testing.T) { drainCtx := &drainability.DrainContext{ - DeleteOptions: options.NodeDeleteOptions{ - SkipNodesWithLocalStorage: true, - }, Timestamp: testTime, } - status := New().Drainable(drainCtx, test.pod) + status := New(!test.disabledRule).Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go index 224a1fbd6a3f..e0d6da61cd71 100644 --- a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go @@ -35,13 +35,8 @@ func New() *Rule { // Drainable decides what to do with not safe to evict pods on node drain. func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { - return drainability.NewUndefinedStatus() - } - - if drain.HasNotSafeToEvictAnnotation(pod) { + if !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && drain.HasNotSafeToEvictAnnotation(pod) { return drainability.NewBlockedStatus(drain.NotSafeToEvictAnnotation, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name)) } - return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go index 42b3df58c9a4..92e9ad1ac4aa 100644 --- a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go @@ -25,7 +25,6 @@ import ( apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" @@ -266,9 +265,6 @@ func TestDrain(t *testing.T) { } { t.Run(test.desc, func(t *testing.T) { drainCtx := &drainability.DrainContext{ - DeleteOptions: options.NodeDeleteOptions{ - SkipNodesWithSystemPods: true, - }, Timestamp: testTime, } status := New().Drainable(drainCtx, test.pod) diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go index 2eb3f492c6ef..86b921cec59b 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go @@ -27,15 +27,21 @@ import ( ) // Rule is a drainability rule on how to handle replicated pods. -type Rule struct{} +type Rule struct { + skipNodesWithCustomControllerPods bool + minReplicaCount int +} // New creates a new Rule. -func New() *Rule { - return &Rule{} +func New(skipNodesWithCustomControllerPods bool, minReplicaCount int) *Rule { + return &Rule{ + skipNodesWithCustomControllerPods: skipNodesWithCustomControllerPods, + minReplicaCount: minReplicaCount, + } } // Drainable decides what to do with replicated pods on node drain. -func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { return drainability.NewUndefinedStatus() } @@ -43,9 +49,9 @@ func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drain controllerRef := drain.ControllerRef(pod) replicated := controllerRef != nil - if drainCtx.DeleteOptions.SkipNodesWithCustomControllerPods { + if r.skipNodesWithCustomControllerPods { // TODO(vadasambar): remove this when we get rid of skipNodesWithCustomControllerPods - if status := legacyCheck(drainCtx, pod); status.Outcome != drainability.UndefinedOutcome { + if status := legacyCheck(drainCtx, pod, r.minReplicaCount); status.Outcome != drainability.UndefinedOutcome { return status } replicated = replicated && replicatedKind[controllerRef.Kind] @@ -66,7 +72,7 @@ var replicatedKind = map[string]bool{ "StatefulSet": true, } -func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { +func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod, minReplicaCount int) drainability.Status { if drainCtx.Listers == nil { return drainability.NewUndefinedStatus() } @@ -89,8 +95,8 @@ func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainabili } // TODO: Replace the minReplica check with PDB. - if rc.Spec.Replicas != nil && int(*rc.Spec.Replicas) < drainCtx.DeleteOptions.MinReplicaCount { - return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, drainCtx.DeleteOptions.MinReplicaCount)) + if rc.Spec.Replicas != nil && int(*rc.Spec.Replicas) < minReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, minReplicaCount)) } } else if pod_util.IsDaemonSetPod(pod) { if refKind == "DaemonSet" { @@ -118,8 +124,8 @@ func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainabili if err == nil && rs != nil { // Assume the only reason for an error is because the RS is gone/missing. - if rs.Spec.Replicas != nil && int(*rs.Spec.Replicas) < drainCtx.DeleteOptions.MinReplicaCount { - return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rs.Spec.Replicas, drainCtx.DeleteOptions.MinReplicaCount)) + if rs.Spec.Replicas != nil && int(*rs.Spec.Replicas) < minReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rs.Spec.Replicas, minReplicaCount)) } } else { return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go index 905c63780b59..175791234b54 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go @@ -26,7 +26,6 @@ import ( apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" @@ -407,13 +406,10 @@ func TestDrain(t *testing.T) { registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) drainCtx := &drainability.DrainContext{ - DeleteOptions: options.NodeDeleteOptions{ - SkipNodesWithCustomControllerPods: test.skipNodesWithCustomControllerPods, - }, Listers: registry, Timestamp: testTime, } - status := New().Drainable(drainCtx, test.pod) + status := New(test.skipNodesWithCustomControllerPods, 0).Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 4452dbbc4ec5..c155b13688b6 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -26,6 +26,7 @@ import ( pdbrule "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicated" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" + "k8s.io/autoscaler/cluster-autoscaler/simulator/options" ) // Rule determines whether a given pod can be drained or not. @@ -38,13 +39,13 @@ type Rule interface { } // Default returns the default list of Rules. -func Default() Rules { +func Default(deleteOptions options.NodeDeleteOptions) Rules { return []Rule{ mirror.New(), - replicated.New(), - system.New(), + replicated.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount), + system.New(deleteOptions.SkipNodesWithSystemPods), notsafetoevict.New(), - localstorage.New(), + localstorage.New(deleteOptions.SkipNodesWithLocalStorage), pdbrule.New(), } } diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule.go b/cluster-autoscaler/simulator/drainability/rules/system/rule.go index 14eef8585510..419ba3e28795 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule.go @@ -26,22 +26,19 @@ import ( ) // Rule is a drainability rule on how to handle system pods. -type Rule struct{} +type Rule struct { + enabled bool +} // New creates a new Rule. -func New() *Rule { - return &Rule{} +func New(enabled bool) *Rule { + return &Rule{enabled: enabled} } // Drainable decides what to do with system pods on node drain. -func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) || pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) { - return drainability.NewUndefinedStatus() - } - - if drainCtx.DeleteOptions.SkipNodesWithSystemPods && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if r.enabled && !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { return drainability.NewBlockedStatus(drain.UnmovableKubeSystemPod, fmt.Errorf("non-daemonset, non-mirrored, non-pdb-assigned kube-system pod present: %s", pod.Name)) } - return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go index 5be7f835b301..3c85d8c06663 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go @@ -26,7 +26,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" - "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" @@ -217,11 +216,12 @@ func TestDrain(t *testing.T) { ) for _, test := range []struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - pdbs []*policyv1.PodDisruptionBudget + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + pdbs []*policyv1.PodDisruptionBudget + disableRule bool wantReason drain.BlockingPodReason wantError bool @@ -264,6 +264,13 @@ func TestDrain(t *testing.T) { wantReason: drain.UnmovableKubeSystemPod, wantError: true, }, + { + desc: "default namespace PDB with matching labels kube-system pod and rule disabled", + pod: kubeSystemRcPod, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, + disableRule: true, + }, { desc: "kube-system failed pod", pod: kubeSystemFailedPod, @@ -295,12 +302,9 @@ func TestDrain(t *testing.T) { drainCtx := &drainability.DrainContext{ RemainingPdbTracker: tracker, - DeleteOptions: options.NodeDeleteOptions{ - SkipNodesWithSystemPods: true, - }, - Timestamp: testTime, + Timestamp: testTime, } - status := New().Drainable(drainCtx, test.pod) + status := New(!test.disableRule).Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) From 2fa6c2677b882b7dd97cc316fb48d2a4360bfa90 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Wed, 4 Oct 2023 01:06:39 +0000 Subject: [PATCH 096/125] Split out custom controller and common checks into separate drainability rules --- .../rules/customcontroller/rule.go | 112 ++++ .../rules/customcontroller/rule_test.go | 218 +++++++ .../drainability/rules/daemonset/rule.go | 39 ++ .../drainability/rules/daemonset/rule_test.go | 60 ++ .../drainability/rules/localstorage/rule.go | 3 +- .../rules/localstorage/rule_test.go | 575 +++++++----------- .../rules/longterminating/rule.go | 39 ++ .../rules/longterminating/rule_test.go | 94 +++ .../drainability/rules/mirror/rule_test.go | 16 +- .../drainability/rules/notsafetoevict/rule.go | 3 +- .../rules/notsafetoevict/rule_test.go | 255 ++------ .../drainability/rules/pdb/rule_test.go | 21 +- .../drainability/rules/replicated/rule.go | 86 +-- .../rules/replicated/rule_test.go | 350 +++-------- .../simulator/drainability/rules/rules.go | 17 +- .../drainability/rules/safetoevict/rule.go | 39 ++ .../rules/safetoevict/rule_test.go | 62 ++ .../drainability/rules/system/rule.go | 3 +- .../drainability/rules/system/rule_test.go | 148 +---- .../drainability/rules/terminal/rule.go | 39 ++ .../drainability/rules/terminal/rule_test.go | 79 +++ .../simulator/drainability/status.go | 23 +- 22 files changed, 1215 insertions(+), 1066 deletions(-) create mode 100644 cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/terminal/rule.go create mode 100644 cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go new file mode 100644 index 000000000000..55caed24c15c --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go @@ -0,0 +1,112 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package customcontroller + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle replicated pods. +type Rule struct { + enabled bool + minReplicaCount int +} + +// New creates a new Rule. +func New(enabled bool, minReplicaCount int) *Rule { + return &Rule{ + enabled: enabled, + minReplicaCount: minReplicaCount, + } +} + +// Drainable decides what to do with replicated pods on node drain. +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if !r.enabled || drainCtx.Listers == nil { + return drainability.NewUndefinedStatus() + } + + // For now, owner controller must be in the same namespace as the pod + // so OwnerReference doesn't have its own Namespace field. + controllerNamespace := pod.Namespace + + controllerRef := drain.ControllerRef(pod) + if controllerRef == nil { + return drainability.NewUndefinedStatus() + } + refKind := controllerRef.Kind + + if refKind == "ReplicationController" { + rc, err := drainCtx.Listers.ReplicationControllerLister().ReplicationControllers(controllerNamespace).Get(controllerRef.Name) + // Assume RC is either gone/missing or has too few replicas configured. + if err != nil || rc == nil { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) + } + + // TODO: Replace the minReplica check with PDB. + if rc.Spec.Replicas != nil && int(*rc.Spec.Replicas) < r.minReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, r.minReplicaCount)) + } + } else if pod_util.IsDaemonSetPod(pod) { + if refKind == "DaemonSet" { + // We don't have a listener for the other DaemonSet kind. + // TODO: Use a generic client for checking the reference. + return drainability.NewUndefinedStatus() + } + + _, err := drainCtx.Listers.DaemonSetLister().DaemonSets(controllerNamespace).Get(controllerRef.Name) + if err != nil { + if apierrors.IsNotFound(err) { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("daemonset for %s/%s is not present, err: %v", pod.Namespace, pod.Name, err)) + } + return drainability.NewBlockedStatus(drain.UnexpectedError, fmt.Errorf("error when trying to get daemonset for %s/%s , err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "Job" { + job, err := drainCtx.Listers.JobLister().Jobs(controllerNamespace).Get(controllerRef.Name) + + if err != nil || job == nil { + // Assume the only reason for an error is because the Job is gone/missing. + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("job for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "ReplicaSet" { + rs, err := drainCtx.Listers.ReplicaSetLister().ReplicaSets(controllerNamespace).Get(controllerRef.Name) + + if err == nil && rs != nil { + // Assume the only reason for an error is because the RS is gone/missing. + if rs.Spec.Replicas != nil && int(*rs.Spec.Replicas) < r.minReplicaCount { + return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rs.Spec.Replicas, r.minReplicaCount)) + } + } else { + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) + } + } else if refKind == "StatefulSet" { + ss, err := drainCtx.Listers.StatefulSetLister().StatefulSets(controllerNamespace).Get(controllerRef.Name) + + if err != nil && ss == nil { + // Assume the only reason for an error is because the SS is gone/missing. + return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("statefulset for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) + } + } + + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go new file mode 100644 index 000000000000..2c6909694f01 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go @@ -0,0 +1,218 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package customcontroller + +import ( + "fmt" + "testing" + "time" + + appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" + v1appslister "k8s.io/client-go/listers/apps/v1" + v1lister "k8s.io/client-go/listers/core/v1" + + "github.com/stretchr/testify/assert" +) + +func TestDrainable(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + ds = appsv1.DaemonSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ds", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/daemonsets/ds", + }, + } + job = batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "default", + SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", + }, + } + statefulset = appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ss", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/statefulsets/ss", + }, + } + rs = appsv1.ReplicaSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rs", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicasets/rs", + }, + Spec: appsv1.ReplicaSetSpec{ + Replicas: &replicas, + }, + } + ) + + for desc, test := range map[string]struct { + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + enabled bool + + wantReason drain.BlockingPodReason + wantError bool + }{ + "RC-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + }, + "DS-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(ds.Name, "DaemonSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + }, + "DS-managed pod by a custom Daemonset": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(ds.Name, "CustomDaemonSet", "crd/v1", ""), + Annotations: map[string]string{ + "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + }, + "Job-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + }, + "SS-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + }, + "RS-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rss: []*appsv1.ReplicaSet{&rs}, + }, + "RS-managed pod that is being deleted": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rss: []*appsv1.ReplicaSet{&rs}, + }, + } { + for _, enabled := range []bool{true, false} { + desc = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.desc, enabled) + + t.Run(desc, func(t *testing.T) { + var err error + var rcLister v1lister.ReplicationControllerLister + if len(test.rcs) > 0 { + rcLister, err = kube_util.NewTestReplicationControllerLister(test.rcs) + assert.NoError(t, err) + } + var rsLister v1appslister.ReplicaSetLister + if len(test.rss) > 0 { + rsLister, err = kube_util.NewTestReplicaSetLister(test.rss) + assert.NoError(t, err) + } + dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) + assert.NoError(t, err) + jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) + assert.NoError(t, err) + ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) + assert.NoError(t, err) + + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) + + drainCtx := &drainability.DrainContext{ + Listers: registry, + Timestamp: testTime, + } + status := New(enabled, 0).Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) + } + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go new file mode 100644 index 000000000000..05f93d288a1d --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package daemonset + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" +) + +// Rule is a drainability rule on how to handle daemon set pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with daemon set pods on node drain. +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if pod_util.IsDaemonSetPod(pod) { + return drainability.NewUndefinedStatus(drainability.Interrupt) + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go new file mode 100644 index 000000000000..d444d7079999 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go @@ -0,0 +1,60 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package daemonset + +import ( + "testing" + + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" +) + +func TestDrainable(t *testing.T) { + for desc, tc := range map[string]struct { + pod *apiv1.Pod + want drainability.Status + }{ + "regular pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "ns", + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "daemonset pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "ns", + OwnerReferences: test.GenerateOwnerReferences("ds", "DaemonSet", "apps/v1", ""), + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + } { + t.Run(desc, func(t *testing.T) { + got := New().Drainable(nil, tc.pod) + if tc.want != got { + t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + } + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go index dd01c52ea764..68533fad5e1b 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go @@ -22,7 +22,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) // Rule is a drainability rule on how to handle local storage pods. @@ -39,7 +38,7 @@ func New(enabled bool) *Rule { // Drainable decides what to do with local storage pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if r.enabled && !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && drain.HasBlockingLocalStorage(pod) { + if r.enabled && drain.HasBlockingLocalStorage(pod) { return drainability.NewBlockedStatus(drain.LocalStorageRequested, fmt.Errorf("pod with local storage present: %s", pod.Name)) } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go index fb98c35e8564..cb96b568678f 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go @@ -25,12 +25,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" "github.com/stretchr/testify/assert" ) -func TestDrain(t *testing.T) { +func TestDrainable(t *testing.T) { var ( testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) replicas = int32(5) @@ -45,410 +45,267 @@ func TestDrain(t *testing.T) { Replicas: &replicas, }, } + ) - emptydirPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } + for desc, test := range map[string]struct { + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + disabledRule bool - emptyDirSafeToEvictVolumeSingleVal = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "scratch", + wantReason drain.BlockingPodReason + wantError bool + }{ + "pod with EmptyDir": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - } - - emptyDirSafeToEvictLocalVolumeSingleValEmpty = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch", }, }, - }, - } - - emptyDirSafeToEvictLocalVolumeSingleValNonMatching = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "scratch-2", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - } - - emptyDirSafeToEvictLocalVolumeMultiValAllMatching = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-3", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyDirSafeToEvictLocalVolumeMultiValNonMatching = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-5", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + rcs: []*apiv1.ReplicationController{&rc}, + }, + "pod with EmptyDir and empty value for SafeToEvictLocalVolumesKey annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "", }, }, - }, - } - - emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - } - - emptyDirSafeToEvictLocalVolumeMultiValEmpty = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: ",", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + "pod with EmptyDir and non-matching value for SafeToEvictLocalVolumesKey annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-2", }, }, - }, - } - - emptyDirFailedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyNever, - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - emptyDirTerminalPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.LocalStorageRequested, + wantError: true, + }, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with matching values": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-3", }, }, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodSucceeded, - }, - } - - emptyDirEvictedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyAlways, - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - emptyDirSafePod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - zeroGracePeriod = int64(0) - emptyDirLongTerminatingPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &zeroGracePeriod, - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + rcs: []*apiv1.ReplicationController{&rc}, + }, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with non-matching values": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-5", }, }, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - extendedGracePeriod = int64(6 * 60) // 6 minutes - emptyDirLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &extendedGracePeriod, - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, }, }, }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - ) - - for _, test := range []struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - disabledRule bool - - wantReason drain.BlockingPodReason - wantError bool - }{ - { - desc: "pod with EmptyDir", - pod: emptydirPod, - rcs: []*apiv1.ReplicationController{&rc}, - wantReason: drain.LocalStorageRequested, - wantError: true, - }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation", - pod: emptyDirSafeToEvictVolumeSingleVal, - rcs: []*apiv1.ReplicationController{&rc}, - }, - { - desc: "pod with EmptyDir and empty value for SafeToEvictLocalVolumesKey annotation", - pod: emptyDirSafeToEvictLocalVolumeSingleValEmpty, - rcs: []*apiv1.ReplicationController{&rc}, - wantReason: drain.LocalStorageRequested, - wantError: true, - }, - { - desc: "pod with EmptyDir and non-matching value for SafeToEvictLocalVolumesKey annotation", - pod: emptyDirSafeToEvictLocalVolumeSingleValNonMatching, - rcs: []*apiv1.ReplicationController{&rc}, - wantReason: drain.LocalStorageRequested, - wantError: true, - }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with matching values", - pod: emptyDirSafeToEvictLocalVolumeMultiValAllMatching, - rcs: []*apiv1.ReplicationController{&rc}, - }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with non-matching values", - pod: emptyDirSafeToEvictLocalVolumeMultiValNonMatching, rcs: []*apiv1.ReplicationController{&rc}, wantReason: drain.LocalStorageRequested, wantError: true, }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with some matching values", - pod: emptyDirSafeToEvictLocalVolumeMultiValSomeMatchingVals, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with some matching values": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + }, rcs: []*apiv1.ReplicationController{&rc}, wantReason: drain.LocalStorageRequested, wantError: true, }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values", - pod: emptyDirSafeToEvictLocalVolumeMultiValEmpty, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: ",", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + }, rcs: []*apiv1.ReplicationController{&rc}, wantReason: drain.LocalStorageRequested, wantError: true, }, - { - desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values and rule disabled", - pod: emptyDirSafeToEvictLocalVolumeMultiValEmpty, + "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values and rule disabled": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: ",", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + }, rcs: []*apiv1.ReplicationController{&rc}, disabledRule: true, }, - { - desc: "EmptyDir failed pod", - pod: emptyDirFailedPod, - }, - { - desc: "EmptyDir terminal pod", - pod: emptyDirTerminalPod, - }, - { - desc: "EmptyDir evicted pod", - pod: emptyDirEvictedPod, - }, - { - desc: "EmptyDir pod with PodSafeToEvict annotation", - pod: emptyDirSafePod, - }, - { - desc: "EmptyDir long terminating pod with 0 grace period", - pod: emptyDirLongTerminatingPod, - }, - { - desc: "EmptyDir long terminating pod with extended grace period", - pod: emptyDirLongTerminatingPodWithExtendedGracePeriod, - }, } { - t.Run(test.desc, func(t *testing.T) { + t.Run(desc, func(t *testing.T) { drainCtx := &drainability.DrainContext{ Timestamp: testTime, } diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go new file mode 100644 index 000000000000..5edc6b70f603 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package longterminating + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +// Rule is a drainability rule on how to handle long terminating pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with long terminating pods on node drain. +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { + return drainability.NewUndefinedStatus(drainability.Interrupt) + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go new file mode 100644 index 000000000000..934453429d1e --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go @@ -0,0 +1,94 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package longterminating + +import ( + "testing" + "time" + + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +func TestDrainable(t *testing.T) { + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + zeroGracePeriod = int64(0) + extendedGracePeriod = int64(6 * 60) // 6 minutes + ) + + for desc, tc := range map[string]struct { + pod *apiv1.Pod + want drainability.Status + }{ + "regular pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "ns", + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "long terminating pod with 0 grace period": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + "long terminating pod with extended grace period": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + } { + t.Run(desc, func(t *testing.T) { + drainCtx := &drainability.DrainContext{ + Timestamp: testTime, + } + got := New().Drainable(drainCtx, tc.pod) + if tc.want != got { + t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + } + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go index e05613daaedd..d95cf704c9f5 100644 --- a/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go @@ -25,14 +25,12 @@ import ( "k8s.io/kubernetes/pkg/kubelet/types" ) -func TestRule(t *testing.T) { - testCases := []struct { - desc string +func TestDrainable(t *testing.T) { + for desc, tc := range map[string]struct { pod *apiv1.Pod want drainability.Status }{ - { - desc: "non mirror pod", + "regular pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "regularPod", @@ -41,8 +39,7 @@ func TestRule(t *testing.T) { }, want: drainability.NewUndefinedStatus(), }, - { - desc: "mirror pod", + "mirror pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "manifestPod", @@ -54,9 +51,8 @@ func TestRule(t *testing.T) { }, want: drainability.NewSkipStatus(), }, - } - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { + } { + t.Run(desc, func(t *testing.T) { got := New().Drainable(nil, tc.pod) if tc.want != got { t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go index e0d6da61cd71..4a8147a9ac34 100644 --- a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go @@ -22,7 +22,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) // Rule is a drainability rule on how to handle not safe to evict pods. @@ -35,7 +34,7 @@ func New() *Rule { // Drainable decides what to do with not safe to evict pods on node drain. func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && drain.HasNotSafeToEvictAnnotation(pod) { + if drain.HasNotSafeToEvictAnnotation(pod) { return drainability.NewBlockedStatus(drain.NotSafeToEvictAnnotation, fmt.Errorf("pod annotated as not safe to evict present: %s", pod.Name)) } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go index 92e9ad1ac4aa..8d96437eb74b 100644 --- a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule_test.go @@ -26,12 +26,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" "github.com/stretchr/testify/assert" ) -func TestDrain(t *testing.T) { +func TestDrainable(t *testing.T) { var ( testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) replicas = int32(5) @@ -46,18 +46,6 @@ func TestDrain(t *testing.T) { Replicas: &replicas, }, } - - rcPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - job = batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ Name: "job", @@ -65,205 +53,88 @@ func TestDrain(t *testing.T) { SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", }, } + ) - jobPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), - }, - } - - safePod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - unsafeSystemFailedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyNever, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } + for desc, test := range map[string]struct { + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet - unsafeSystemTerminalPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + wantReason drain.BlockingPodReason + wantError bool + }{ + "pod with PodSafeToEvict annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodSucceeded, - }, - } - - unsafeSystemEvictedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + Spec: apiv1.PodSpec{ + NodeName: "node", }, }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyAlways, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - zeroGracePeriod = int64(0) - unsafeLongTerminatingPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + }, + "RC-managed pod with no annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &zeroGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - extendedGracePeriod = int64(6 * 60) // 6 minutes - unsafeLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + Spec: apiv1.PodSpec{ + NodeName: "node", }, }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &extendedGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - unsafeRcPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + rcs: []*apiv1.ReplicationController{&rc}, + }, + "RC-managed pod with PodSafeToEvict=false annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - unsafeJobPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "false", + Spec: apiv1.PodSpec{ + NodeName: "node", }, }, - } - ) - - for _, test := range []struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - - wantReason drain.BlockingPodReason - wantError bool - }{ - { - desc: "pod with PodSafeToEvict annotation", - pod: safePod, - }, - { - desc: "RC-managed pod with no annotation", - pod: rcPod, - rcs: []*apiv1.ReplicationController{&rc}, - }, - { - desc: "RC-managed pod with PodSafeToEvict=false annotation", - pod: unsafeRcPod, rcs: []*apiv1.ReplicationController{&rc}, wantReason: drain.NotSafeToEvictAnnotation, wantError: true, }, - { - desc: "Job-managed pod with no annotation", - pod: jobPod, - rcs: []*apiv1.ReplicationController{&rc}, + "job-managed pod with no annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, }, - { - desc: "Job-managed pod with PodSafeToEvict=false annotation", - pod: unsafeJobPod, + "job-managed pod with PodSafeToEvict=false annotation": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "false", + }, + }, + }, rcs: []*apiv1.ReplicationController{&rc}, wantReason: drain.NotSafeToEvictAnnotation, wantError: true, }, - - { - desc: "unsafe failed pod", - pod: unsafeSystemFailedPod, - }, - { - desc: "unsafe terminal pod", - pod: unsafeSystemTerminalPod, - }, - { - desc: "unsafe evicted pod", - pod: unsafeSystemEvictedPod, - }, - { - desc: "unsafe long terminating pod with 0 grace period", - pod: unsafeLongTerminatingPod, - }, - { - desc: "unsafe long terminating pod with extended grace period", - pod: unsafeLongTerminatingPodWithExtendedGracePeriod, - }, } { - t.Run(test.desc, func(t *testing.T) { + t.Run(desc, func(t *testing.T) { drainCtx := &drainability.DrainContext{ Timestamp: testTime, } diff --git a/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go index 741cf1fd2f3f..73faf1100a07 100644 --- a/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go @@ -28,22 +28,19 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/drain" ) -func TestRule(t *testing.T) { +func TestDrainable(t *testing.T) { one := intstr.FromInt(1) - testCases := []struct { - desc string + for desc, tc := range map[string]struct { pod *apiv1.Pod pdbs []*policyv1.PodDisruptionBudget wantOutcome drainability.OutcomeType wantReason drain.BlockingPodReason }{ - { - desc: "no pdbs", - pod: &apiv1.Pod{}, + "no pdbs": { + pod: &apiv1.Pod{}, }, - { - desc: "no matching pdbs", + "no matching pdbs": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "happy", @@ -82,8 +79,7 @@ func TestRule(t *testing.T) { }, }, }, - { - desc: "pdb prevents scale-down", + "pdb prevents scale-down": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "sad", @@ -137,9 +133,8 @@ func TestRule(t *testing.T) { wantOutcome: drainability.BlockDrain, wantReason: drain.NotEnoughPdb, }, - } - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { + } { + t.Run(desc, func(t *testing.T) { tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(tc.pdbs) drainCtx := &drainability.DrainContext{ diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go index 86b921cec59b..cca20d11422d 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go @@ -20,10 +20,8 @@ import ( "fmt" apiv1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) // Rule is a drainability rule on how to handle replicated pods. @@ -42,26 +40,18 @@ func New(skipNodesWithCustomControllerPods bool, minReplicaCount int) *Rule { // Drainable decides what to do with replicated pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { - return drainability.NewUndefinedStatus() - } - controllerRef := drain.ControllerRef(pod) replicated := controllerRef != nil if r.skipNodesWithCustomControllerPods { // TODO(vadasambar): remove this when we get rid of skipNodesWithCustomControllerPods - if status := legacyCheck(drainCtx, pod, r.minReplicaCount); status.Outcome != drainability.UndefinedOutcome { - return status - } replicated = replicated && replicatedKind[controllerRef.Kind] } - if pod_util.IsDaemonSetPod(pod) || drain.HasSafeToEvictAnnotation(pod) || drain.IsPodTerminal(pod) || replicated { - return drainability.NewUndefinedStatus() + if !replicated { + return drainability.NewBlockedStatus(drain.NotReplicated, fmt.Errorf("%s/%s is not replicated", pod.Namespace, pod.Name)) } - - return drainability.NewBlockedStatus(drain.NotReplicated, fmt.Errorf("%s/%s is not replicated", pod.Namespace, pod.Name)) + return drainability.NewUndefinedStatus() } // replicatedKind returns true if this kind has replicates pods. @@ -71,73 +61,3 @@ var replicatedKind = map[string]bool{ "ReplicaSet": true, "StatefulSet": true, } - -func legacyCheck(drainCtx *drainability.DrainContext, pod *apiv1.Pod, minReplicaCount int) drainability.Status { - if drainCtx.Listers == nil { - return drainability.NewUndefinedStatus() - } - - // For now, owner controller must be in the same namespace as the pod - // so OwnerReference doesn't have its own Namespace field. - controllerNamespace := pod.Namespace - - controllerRef := drain.ControllerRef(pod) - if controllerRef == nil { - return drainability.NewUndefinedStatus() - } - refKind := controllerRef.Kind - - if refKind == "ReplicationController" { - rc, err := drainCtx.Listers.ReplicationControllerLister().ReplicationControllers(controllerNamespace).Get(controllerRef.Name) - // Assume RC is either gone/missing or has too few replicas configured. - if err != nil || rc == nil { - return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) - } - - // TODO: Replace the minReplica check with PDB. - if rc.Spec.Replicas != nil && int(*rc.Spec.Replicas) < minReplicaCount { - return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, minReplicaCount)) - } - } else if pod_util.IsDaemonSetPod(pod) { - if refKind == "DaemonSet" { - // We don't have a listener for the other DaemonSet kind. - // TODO: Use a generic client for checking the reference. - return drainability.NewUndefinedStatus() - } - - _, err := drainCtx.Listers.DaemonSetLister().DaemonSets(controllerNamespace).Get(controllerRef.Name) - if err != nil { - if apierrors.IsNotFound(err) { - return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("daemonset for %s/%s is not present, err: %v", pod.Namespace, pod.Name, err)) - } - return drainability.NewBlockedStatus(drain.UnexpectedError, fmt.Errorf("error when trying to get daemonset for %s/%s , err: %v", pod.Namespace, pod.Name, err)) - } - } else if refKind == "Job" { - job, err := drainCtx.Listers.JobLister().Jobs(controllerNamespace).Get(controllerRef.Name) - - if err != nil || job == nil { - // Assume the only reason for an error is because the Job is gone/missing. - return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("job for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) - } - } else if refKind == "ReplicaSet" { - rs, err := drainCtx.Listers.ReplicaSetLister().ReplicaSets(controllerNamespace).Get(controllerRef.Name) - - if err == nil && rs != nil { - // Assume the only reason for an error is because the RS is gone/missing. - if rs.Spec.Replicas != nil && int(*rs.Spec.Replicas) < minReplicaCount { - return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rs.Spec.Replicas, minReplicaCount)) - } - } else { - return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("replication controller for %s/%s is not available, err: %v", pod.Namespace, pod.Name, err)) - } - } else if refKind == "StatefulSet" { - ss, err := drainCtx.Listers.StatefulSetLister().StatefulSets(controllerNamespace).Get(controllerRef.Name) - - if err != nil && ss == nil { - // Assume the only reason for an error is because the SS is gone/missing. - return drainability.NewBlockedStatus(drain.ControllerNotFound, fmt.Errorf("statefulset for %s/%s is not available: err: %v", pod.Namespace, pod.Name, err)) - } - } - - return drainability.NewUndefinedStatus() -} diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go index 175791234b54..cee50dec100d 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go @@ -28,14 +28,14 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" - . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" v1appslister "k8s.io/client-go/listers/apps/v1" v1lister "k8s.io/client-go/listers/core/v1" "github.com/stretchr/testify/assert" ) -func TestDrain(t *testing.T) { +func TestDrainable(t *testing.T) { var ( testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) replicas = int32(5) @@ -50,18 +50,6 @@ func TestDrain(t *testing.T) { Replicas: &replicas, }, } - - rcPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - ds = appsv1.DaemonSet{ ObjectMeta: metav1.ObjectMeta{ Name: "ds", @@ -69,32 +57,6 @@ func TestDrain(t *testing.T) { SelfLink: "/apiv1s/apps/v1/namespaces/default/daemonsets/ds", }, } - - dsPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(ds.Name, "DaemonSet", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - cdsPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(ds.Name, "CustomDaemonSet", "crd/v1", ""), - Annotations: map[string]string{ - "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - job = batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ Name: "job", @@ -102,15 +64,6 @@ func TestDrain(t *testing.T) { SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", }, } - - jobPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), - }, - } - statefulset = appsv1.StatefulSet{ ObjectMeta: metav1.ObjectMeta{ Name: "ss", @@ -118,15 +71,6 @@ func TestDrain(t *testing.T) { SelfLink: "/apiv1s/apps/v1/namespaces/default/statefulsets/ss", }, } - - ssPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), - }, - } - rs = appsv1.ReplicaSet{ ObjectMeta: metav1.ObjectMeta{ Name: "rs", @@ -137,30 +81,6 @@ func TestDrain(t *testing.T) { Replicas: &replicas, }, } - - rsPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - rsPodDeleted = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - customControllerPod = &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -169,118 +89,18 @@ func TestDrain(t *testing.T) { // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#naming-conventions // vadasambar: I am using it here just because `FooController`` // is easier to understand than say `FooSet` - OwnerReferences: GenerateOwnerReferences("Foo", "FooController", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - nakedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - nakedFailedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyNever, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - nakedTerminalPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodSucceeded, - }, - } - - nakedEvictedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyAlways, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - nakedSafePod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "true", - }, + OwnerReferences: test.GenerateOwnerReferences("Foo", "FooController", "apps/v1", ""), }, Spec: apiv1.PodSpec{ NodeName: "node", }, } - - zeroGracePeriod = int64(0) - nakedLongTerminatingPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &zeroGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - extendedGracePeriod = int64(6 * 60) // 6 minutes - nakedLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &extendedGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } ) type testCase struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet // TODO(vadasambar): remove this when we get rid of scaleDownNodesWithCustomControllerPods skipNodesWithCustomControllerPods bool @@ -289,102 +109,104 @@ func TestDrain(t *testing.T) { wantError bool } - sharedTests := []testCase{ - { - desc: "RC-managed pod", - pod: rcPod, - rcs: []*apiv1.ReplicationController{&rc}, - }, - { - desc: "DS-managed pod", - pod: dsPod, - }, - { - desc: "DS-managed pod by a custom Daemonset", - pod: cdsPod, + sharedTests := map[string]testCase{ + "RC-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, }, - { - desc: "Job-managed pod", - pod: jobPod, - rcs: []*apiv1.ReplicationController{&rc}, + "Job-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, }, - { - desc: "SS-managed pod", - pod: ssPod, - rcs: []*apiv1.ReplicationController{&rc}, + "SS-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, }, - { - desc: "RS-managed pod", - pod: rsPod, - rss: []*appsv1.ReplicaSet{&rs}, + "RS-managed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rss: []*appsv1.ReplicaSet{&rs}, }, - { - desc: "RS-managed pod that is being deleted", - pod: rsPodDeleted, - rss: []*appsv1.ReplicaSet{&rs}, + "RS-managed pod that is being deleted": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rss: []*appsv1.ReplicaSet{&rs}, }, - { - desc: "naked pod", - pod: nakedPod, + "naked pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, wantReason: drain.NotReplicated, wantError: true, }, - { - desc: "naked failed pod", - pod: nakedFailedPod, - }, - { - desc: "naked terminal pod", - pod: nakedTerminalPod, - }, - { - desc: "naked evicted pod", - pod: nakedEvictedPod, - }, - { - desc: "naked pod with PodSafeToEvict annotation", - pod: nakedSafePod, - }, - { - desc: "naked long terminating pod with 0 grace period", - pod: nakedLongTerminatingPod, - }, - { - desc: "naked long terminating pod with extended grace period", - pod: nakedLongTerminatingPodWithExtendedGracePeriod, - }, } - var tests []testCase - - // Note: do not modify the underlying reference values for sharedTests. - for _, test := range sharedTests { + tests := make(map[string]testCase) + for desc, test := range sharedTests { for _, skipNodesWithCustomControllerPods := range []bool{true, false} { // Copy test to prevent side effects. test := test test.skipNodesWithCustomControllerPods = skipNodesWithCustomControllerPods - test.desc = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.desc, skipNodesWithCustomControllerPods) - tests = append(tests, test) + desc := fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", desc, skipNodesWithCustomControllerPods) + tests[desc] = test } } - - customControllerTests := []testCase{ - { - desc: "Custom-controller-managed blocking pod", - pod: customControllerPod, - skipNodesWithCustomControllerPods: true, - wantReason: drain.NotReplicated, - wantError: true, - }, - { - desc: "Custom-controller-managed non-blocking pod", - pod: customControllerPod, - }, + tests["custom-controller-managed non-blocking pod"] = testCase{ + pod: customControllerPod, + } + tests["custom-controller-managed blocking pod"] = testCase{ + pod: customControllerPod, + skipNodesWithCustomControllerPods: true, + wantReason: drain.NotReplicated, + wantError: true, } - tests = append(tests, customControllerTests...) - for _, test := range tests { - t.Run(test.desc, func(t *testing.T) { + for desc, test := range tests { + t.Run(desc, func(t *testing.T) { var err error var rcLister v1lister.ReplicationControllerLister if len(test.rcs) > 0 { diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index c155b13688b6..73c7d2b73cdb 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -20,12 +20,17 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/customcontroller" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/daemonset" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/localstorage" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/longterminating" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/mirror" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/notsafetoevict" pdbrule "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicated" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/safetoevict" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/terminal" "k8s.io/autoscaler/cluster-autoscaler/simulator/options" ) @@ -42,6 +47,15 @@ type Rule interface { func Default(deleteOptions options.NodeDeleteOptions) Rules { return []Rule{ mirror.New(), + longterminating.New(), + customcontroller.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount), + + // Interrupting checks + daemonset.New(), + safetoevict.New(), + terminal.New(), + + // Blocking checks replicated.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount), system.New(deleteOptions.SkipNodesWithSystemPods), notsafetoevict.New(), @@ -64,7 +78,8 @@ func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) d } for _, r := range rs { - if d := r.Drainable(drainCtx, pod); d.Outcome != drainability.UndefinedOutcome { + d := r.Drainable(drainCtx, pod) + if d.Interrupted || d.Outcome != drainability.UndefinedOutcome { return d } } diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go new file mode 100644 index 000000000000..e9fd565d6d97 --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package safetoevict + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +// Rule is a drainability rule on how to handle safe to evict pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with safe to evict pods on node drain. +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.HasSafeToEvictAnnotation(pod) { + return drainability.NewUndefinedStatus(drainability.Interrupt) + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go new file mode 100644 index 000000000000..d0560f2fea0d --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go @@ -0,0 +1,62 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package safetoevict + +import ( + "testing" + + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +func TestDrainable(t *testing.T) { + for desc, tc := range map[string]struct { + pod *apiv1.Pod + want drainability.Status + }{ + "regular pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "ns", + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "safe to evict pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + } { + t.Run(desc, func(t *testing.T) { + got := New().Drainable(nil, tc.pod) + if tc.want != got { + t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + } + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule.go b/cluster-autoscaler/simulator/drainability/rules/system/rule.go index 419ba3e28795..d8bfdf3443cc 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule.go @@ -22,7 +22,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) // Rule is a drainability rule on how to handle system pods. @@ -37,7 +36,7 @@ func New(enabled bool) *Rule { // Drainable decides what to do with system pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if r.enabled && !drain.IsPodLongTerminating(pod, drainCtx.Timestamp) && !pod_util.IsDaemonSetPod(pod) && !drain.HasSafeToEvictAnnotation(pod) && !drain.IsPodTerminal(pod) && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { + if r.enabled && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { return drainability.NewBlockedStatus(drain.UnmovableKubeSystemPod, fmt.Errorf("non-daemonset, non-mirrored, non-pdb-assigned kube-system pod present: %s", pod.Name)) } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go index 3c85d8c06663..2e6b7464cbc7 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go @@ -27,12 +27,12 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" - . "k8s.io/autoscaler/cluster-autoscaler/utils/test" + "k8s.io/autoscaler/cluster-autoscaler/utils/test" "github.com/stretchr/testify/assert" ) -func TestDrain(t *testing.T) { +func TestDrainable(t *testing.T) { var ( testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) replicas = int32(5) @@ -52,7 +52,7 @@ func TestDrain(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), }, Spec: apiv1.PodSpec{ NodeName: "node", @@ -74,7 +74,7 @@ func TestDrain(t *testing.T) { ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "kube-system", - OwnerReferences: GenerateOwnerReferences(kubeSystemRc.Name, "ReplicationController", "core/v1", ""), + OwnerReferences: test.GenerateOwnerReferences(kubeSystemRc.Name, "ReplicationController", "core/v1", ""), Labels: map[string]string{ "k8s-app": "bar", }, @@ -124,99 +124,9 @@ func TestDrain(t *testing.T) { }, }, } - - kubeSystemFailedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyNever, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - kubeSystemTerminalPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodSucceeded, - }, - } - - kubeSystemEvictedPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyAlways, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - kubeSystemSafePod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - drain.PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - zeroGracePeriod = int64(0) - kubeSystemLongTerminatingPod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &zeroGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - extendedGracePeriod = int64(6 * 60) // 6 minutes - kubeSystemLongTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * time.Duration(extendedGracePeriod) * time.Second)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &extendedGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } ) - for _, test := range []struct { - desc string + for desc, test := range map[string]struct { pod *apiv1.Pod rcs []*apiv1.ReplicationController rss []*appsv1.ReplicaSet @@ -226,77 +136,43 @@ func TestDrain(t *testing.T) { wantReason drain.BlockingPodReason wantError bool }{ - { - desc: "kube-system pod with PodSafeToEvict annotation", - pod: kubeSystemSafePod, - }, - { - desc: "empty PDB with RC-managed pod", + "empty PDB with RC-managed pod": { pod: rcPod, rcs: []*apiv1.ReplicationController{&rc}, pdbs: []*policyv1.PodDisruptionBudget{emptyPDB}, }, - { - desc: "kube-system PDB with matching kube-system pod", + "kube-system PDB with matching kube-system pod": { pod: kubeSystemRcPod, rcs: []*apiv1.ReplicationController{&kubeSystemRc}, pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, }, - { - desc: "kube-system PDB with non-matching kube-system pod", + "kube-system PDB with non-matching kube-system pod": { pod: kubeSystemRcPod, rcs: []*apiv1.ReplicationController{&kubeSystemRc}, pdbs: []*policyv1.PodDisruptionBudget{kubeSystemFakePDB}, wantReason: drain.UnmovableKubeSystemPod, wantError: true, }, - { - desc: "kube-system PDB with default namespace pod", + "kube-system PDB with default namespace pod": { pod: rcPod, rcs: []*apiv1.ReplicationController{&rc}, pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, }, - { - desc: "default namespace PDB with matching labels kube-system pod", + "default namespace PDB with matching labels kube-system pod": { pod: kubeSystemRcPod, rcs: []*apiv1.ReplicationController{&kubeSystemRc}, pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, wantReason: drain.UnmovableKubeSystemPod, wantError: true, }, - { - desc: "default namespace PDB with matching labels kube-system pod and rule disabled", + "default namespace PDB with matching labels kube-system pod and rule disabled": { pod: kubeSystemRcPod, rcs: []*apiv1.ReplicationController{&kubeSystemRc}, pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, disableRule: true, }, - { - desc: "kube-system failed pod", - pod: kubeSystemFailedPod, - }, - { - desc: "kube-system terminal pod", - pod: kubeSystemTerminalPod, - }, - { - desc: "kube-system evicted pod", - pod: kubeSystemEvictedPod, - }, - { - desc: "kube-system pod with PodSafeToEvict annotation", - pod: kubeSystemSafePod, - }, - { - desc: "kube-system long terminating pod with 0 grace period", - pod: kubeSystemLongTerminatingPod, - }, - { - desc: "kube-system long terminating pod with extended grace period", - pod: kubeSystemLongTerminatingPodWithExtendedGracePeriod, - }, } { - t.Run(test.desc, func(t *testing.T) { + t.Run(desc, func(t *testing.T) { tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(test.pdbs) diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go new file mode 100644 index 000000000000..164c61f4677c --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package terminal + +import ( + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +// Rule is a drainability rule on how to handle terminal pods. +type Rule struct{} + +// New creates a new Rule. +func New() *Rule { + return &Rule{} +} + +// Drainable decides what to do with terminal pods on node drain. +func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { + if drain.IsPodTerminal(pod) { + return drainability.NewUndefinedStatus(drainability.Interrupt) + } + return drainability.NewUndefinedStatus() +} diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go new file mode 100644 index 000000000000..9d8cfdc566ee --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go @@ -0,0 +1,79 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package terminal + +import ( + "testing" + + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" +) + +func TestDrainable(t *testing.T) { + for desc, tc := range map[string]struct { + pod *apiv1.Pod + want drainability.Status + }{ + "regular pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod", + Namespace: "ns", + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "terminal pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyOnFailure, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + "failed pod": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyNever, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + }, + want: drainability.NewUndefinedStatus(drainability.Interrupt), + }, + } { + t.Run(desc, func(t *testing.T) { + got := New().Drainable(nil, tc.pod) + if tc.want != got { + t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + } + }) + } +} diff --git a/cluster-autoscaler/simulator/drainability/status.go b/cluster-autoscaler/simulator/drainability/status.go index d73f346bead2..281d03c9c5b4 100644 --- a/cluster-autoscaler/simulator/drainability/status.go +++ b/cluster-autoscaler/simulator/drainability/status.go @@ -48,6 +48,23 @@ type Status struct { BlockingReason drain.BlockingPodReason // Error contains an optional error message. Error error + // Interrupted means that the Rule returning the status exited early and that + // additional Rules should not be run. + Interrupted bool +} + +// Option is used to modify a Status. +type Option func(*Status) + +// Interrupt implies no additional Rules should be run. +func Interrupt(s *Status) { + s.Interrupted = true +} + +func applyOptions(s *Status, opts []Option) { + for _, opt := range opts { + opt(s) + } } // NewDrainableStatus returns a new Status indicating that a pod can be drained. @@ -74,6 +91,8 @@ func NewSkipStatus() Status { } // NewUndefinedStatus returns a new Status that doesn't contain a decision. -func NewUndefinedStatus() Status { - return Status{} +func NewUndefinedStatus(opts ...Option) Status { + s := Status{} + applyOptions(&s, opts) + return s } From 96e67eef318a380bc985cd5ba8d9f09d5b48dc37 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Fri, 6 Oct 2023 23:53:30 +0000 Subject: [PATCH 097/125] Filter out disabled drainability rules during creation --- .../rules/customcontroller/rule.go | 6 +- .../rules/customcontroller/rule_test.go | 64 +++++++++---------- .../drainability/rules/localstorage/rule.go | 12 ++-- .../rules/localstorage/rule_test.go | 40 ++---------- .../simulator/drainability/rules/rules.go | 33 ++++++---- .../drainability/rules/system/rule.go | 10 ++- .../drainability/rules/system/rule_test.go | 17 ++--- 7 files changed, 69 insertions(+), 113 deletions(-) diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go index 55caed24c15c..4661f12dc588 100644 --- a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go @@ -28,21 +28,19 @@ import ( // Rule is a drainability rule on how to handle replicated pods. type Rule struct { - enabled bool minReplicaCount int } // New creates a new Rule. -func New(enabled bool, minReplicaCount int) *Rule { +func New(minReplicaCount int) *Rule { return &Rule{ - enabled: enabled, minReplicaCount: minReplicaCount, } } // Drainable decides what to do with replicated pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if !r.enabled || drainCtx.Listers == nil { + if drainCtx.Listers == nil { return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go index 2c6909694f01..59d001878dfb 100644 --- a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go @@ -17,7 +17,6 @@ limitations under the License. package customcontroller import ( - "fmt" "testing" "time" @@ -84,11 +83,10 @@ func TestDrainable(t *testing.T) { ) for desc, test := range map[string]struct { - desc string - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - enabled bool + desc string + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet wantReason drain.BlockingPodReason wantError bool @@ -181,38 +179,34 @@ func TestDrainable(t *testing.T) { rss: []*appsv1.ReplicaSet{&rs}, }, } { - for _, enabled := range []bool{true, false} { - desc = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.desc, enabled) - - t.Run(desc, func(t *testing.T) { - var err error - var rcLister v1lister.ReplicationControllerLister - if len(test.rcs) > 0 { - rcLister, err = kube_util.NewTestReplicationControllerLister(test.rcs) - assert.NoError(t, err) - } - var rsLister v1appslister.ReplicaSetLister - if len(test.rss) > 0 { - rsLister, err = kube_util.NewTestReplicaSetLister(test.rss) - assert.NoError(t, err) - } - dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) - assert.NoError(t, err) - jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) + t.Run(desc, func(t *testing.T) { + var err error + var rcLister v1lister.ReplicationControllerLister + if len(test.rcs) > 0 { + rcLister, err = kube_util.NewTestReplicationControllerLister(test.rcs) assert.NoError(t, err) - ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) + } + var rsLister v1appslister.ReplicaSetLister + if len(test.rss) > 0 { + rsLister, err = kube_util.NewTestReplicaSetLister(test.rss) assert.NoError(t, err) + } + dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) + assert.NoError(t, err) + jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) + assert.NoError(t, err) + ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) + assert.NoError(t, err) - registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) + registry := kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) - drainCtx := &drainability.DrainContext{ - Listers: registry, - Timestamp: testTime, - } - status := New(enabled, 0).Drainable(drainCtx, test.pod) - assert.Equal(t, test.wantReason, status.BlockingReason) - assert.Equal(t, test.wantError, status.Error != nil) - }) - } + drainCtx := &drainability.DrainContext{ + Listers: registry, + Timestamp: testTime, + } + status := New(0).Drainable(drainCtx, test.pod) + assert.Equal(t, test.wantReason, status.BlockingReason) + assert.Equal(t, test.wantError, status.Error != nil) + }) } } diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go index 68533fad5e1b..0884781f7708 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go @@ -25,20 +25,16 @@ import ( ) // Rule is a drainability rule on how to handle local storage pods. -type Rule struct { - enabled bool -} +type Rule struct{} // New creates a new Rule. -func New(enabled bool) *Rule { - return &Rule{ - enabled: enabled, - } +func New() *Rule { + return &Rule{} } // Drainable decides what to do with local storage pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if r.enabled && drain.HasBlockingLocalStorage(pod) { + if drain.HasBlockingLocalStorage(pod) { return drainability.NewBlockedStatus(drain.LocalStorageRequested, fmt.Errorf("pod with local storage present: %s", pod.Name)) } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go index cb96b568678f..25713c7f5bc8 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule_test.go @@ -48,10 +48,9 @@ func TestDrainable(t *testing.T) { ) for desc, test := range map[string]struct { - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - disabledRule bool + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet wantReason drain.BlockingPodReason wantError bool @@ -273,43 +272,12 @@ func TestDrainable(t *testing.T) { wantReason: drain.LocalStorageRequested, wantError: true, }, - "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation empty values and rule disabled": { - pod: &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: test.GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - drain.SafeToEvictLocalVolumesKey: ",", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - }, - rcs: []*apiv1.ReplicationController{&rc}, - disabledRule: true, - }, } { t.Run(desc, func(t *testing.T) { drainCtx := &drainability.DrainContext{ Timestamp: testTime, } - status := New(!test.disabledRule).Drainable(drainCtx, test.pod) + status := New().Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 73c7d2b73cdb..6bd2f970a42f 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -45,23 +45,32 @@ type Rule interface { // Default returns the default list of Rules. func Default(deleteOptions options.NodeDeleteOptions) Rules { - return []Rule{ - mirror.New(), - longterminating.New(), - customcontroller.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount), + var rules Rules + for _, r := range []struct { + rule Rule + skip bool + }{ + {rule: mirror.New()}, + {rule: longterminating.New()}, + {rule: customcontroller.New(deleteOptions.MinReplicaCount), skip: !deleteOptions.SkipNodesWithCustomControllerPods}, // Interrupting checks - daemonset.New(), - safetoevict.New(), - terminal.New(), + {rule: daemonset.New()}, + {rule: safetoevict.New()}, + {rule: terminal.New()}, // Blocking checks - replicated.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount), - system.New(deleteOptions.SkipNodesWithSystemPods), - notsafetoevict.New(), - localstorage.New(deleteOptions.SkipNodesWithLocalStorage), - pdbrule.New(), + {rule: replicated.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount)}, + {rule: system.New(), skip: !deleteOptions.SkipNodesWithSystemPods}, + {rule: notsafetoevict.New()}, + {rule: localstorage.New(), skip: !deleteOptions.SkipNodesWithLocalStorage}, + {rule: pdbrule.New()}, + } { + if !r.skip { + rules = append(rules, r.rule) + } } + return rules } // Rules defines operations on a collections of rules. diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule.go b/cluster-autoscaler/simulator/drainability/rules/system/rule.go index d8bfdf3443cc..a0e9160189a5 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule.go @@ -25,18 +25,16 @@ import ( ) // Rule is a drainability rule on how to handle system pods. -type Rule struct { - enabled bool -} +type Rule struct{} // New creates a new Rule. -func New(enabled bool) *Rule { - return &Rule{enabled: enabled} +func New() *Rule { + return &Rule{} } // Drainable decides what to do with system pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { - if r.enabled && pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { + if pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { return drainability.NewBlockedStatus(drain.UnmovableKubeSystemPod, fmt.Errorf("non-daemonset, non-mirrored, non-pdb-assigned kube-system pod present: %s", pod.Name)) } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go index 2e6b7464cbc7..bc25337750c8 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule_test.go @@ -127,11 +127,10 @@ func TestDrainable(t *testing.T) { ) for desc, test := range map[string]struct { - pod *apiv1.Pod - rcs []*apiv1.ReplicationController - rss []*appsv1.ReplicaSet - pdbs []*policyv1.PodDisruptionBudget - disableRule bool + pod *apiv1.Pod + rcs []*apiv1.ReplicationController + rss []*appsv1.ReplicaSet + pdbs []*policyv1.PodDisruptionBudget wantReason drain.BlockingPodReason wantError bool @@ -165,12 +164,6 @@ func TestDrainable(t *testing.T) { wantReason: drain.UnmovableKubeSystemPod, wantError: true, }, - "default namespace PDB with matching labels kube-system pod and rule disabled": { - pod: kubeSystemRcPod, - rcs: []*apiv1.ReplicationController{&kubeSystemRc}, - pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, - disableRule: true, - }, } { t.Run(desc, func(t *testing.T) { tracker := pdb.NewBasicRemainingPdbTracker() @@ -180,7 +173,7 @@ func TestDrainable(t *testing.T) { RemainingPdbTracker: tracker, Timestamp: testTime, } - status := New(!test.disableRule).Drainable(drainCtx, test.pod) + status := New().Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) From 084264c152c9fcf4cf06bc3204c51ff76253d914 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Fri, 6 Oct 2023 23:55:46 +0000 Subject: [PATCH 098/125] Refactor GetPodsForDeletion logic and tests into simulator --- cluster-autoscaler/simulator/cluster.go | 9 +- cluster-autoscaler/simulator/cluster_test.go | 28 +- cluster-autoscaler/simulator/drain.go | 29 +- cluster-autoscaler/simulator/drain_test.go | 710 +++++++++++++++--- .../drainability/rules/daemonset/rule.go | 2 +- .../drainability/rules/daemonset/rule_test.go | 2 +- .../rules/longterminating/rule.go | 2 +- .../rules/longterminating/rule_test.go | 4 +- .../simulator/drainability/rules/rules.go | 2 +- .../drainability/rules/safetoevict/rule.go | 2 +- .../rules/safetoevict/rule_test.go | 2 +- .../drainability/rules/terminal/rule.go | 2 +- .../drainability/rules/terminal/rule_test.go | 4 +- .../simulator/drainability/status.go | 23 +- cluster-autoscaler/utils/drain/drain.go | 33 - cluster-autoscaler/utils/drain/drain_test.go | 531 ------------- 16 files changed, 620 insertions(+), 765 deletions(-) diff --git a/cluster-autoscaler/simulator/cluster.go b/cluster-autoscaler/simulator/cluster.go index 1c3e5bf10a3a..6bd27ad44c69 100644 --- a/cluster-autoscaler/simulator/cluster.go +++ b/cluster-autoscaler/simulator/cluster.go @@ -123,9 +123,6 @@ func (r *RemovalSimulator) FindNodesToRemove( timestamp time.Time, remainingPdbTracker pdb.RemainingPdbTracker, ) (nodesToRemove []NodeToBeRemoved, unremovableNodes []*UnremovableNode) { - result := make([]NodeToBeRemoved, 0) - unremovable := make([]*UnremovableNode, 0) - destinationMap := make(map[string]bool, len(destinations)) for _, destination := range destinations { destinationMap[destination] = true @@ -134,12 +131,12 @@ func (r *RemovalSimulator) FindNodesToRemove( for _, nodeName := range candidates { rn, urn := r.SimulateNodeRemoval(nodeName, destinationMap, timestamp, remainingPdbTracker) if rn != nil { - result = append(result, *rn) + nodesToRemove = append(nodesToRemove, *rn) } else if urn != nil { - unremovable = append(unremovable, urn) + unremovableNodes = append(unremovableNodes, urn) } } - return result, unremovable + return nodesToRemove, unremovableNodes } // SimulateNodeRemoval simulates removing a node from the cluster to check diff --git a/cluster-autoscaler/simulator/cluster_test.go b/cluster-autoscaler/simulator/cluster_test.go index c53aec5cbc01..e08c605c7cf9 100644 --- a/cluster-autoscaler/simulator/cluster_test.go +++ b/cluster-autoscaler/simulator/cluster_test.go @@ -136,14 +136,11 @@ func TestFindNodesToRemove(t *testing.T) { fullNodeInfo.AddPod(pod4) emptyNodeToRemove := NodeToBeRemoved{ - Node: emptyNode, - PodsToReschedule: []*apiv1.Pod{}, - DaemonSetPods: []*apiv1.Pod{}, + Node: emptyNode, } drainableNodeToRemove := NodeToBeRemoved{ Node: drainableNode, PodsToReschedule: []*apiv1.Pod{pod1, pod2}, - DaemonSetPods: []*apiv1.Pod{}, } clusterSnapshot := clustersnapshot.NewBasicClusterSnapshot() @@ -153,19 +150,16 @@ func TestFindNodesToRemove(t *testing.T) { tests := []findNodesToRemoveTestConfig{ { - name: "just an empty node, should be removed", - pods: []*apiv1.Pod{}, - candidates: []string{emptyNode.Name}, - allNodes: []*apiv1.Node{emptyNode}, - toRemove: []NodeToBeRemoved{emptyNodeToRemove}, - unremovable: []*UnremovableNode{}, + name: "just an empty node, should be removed", + candidates: []string{emptyNode.Name}, + allNodes: []*apiv1.Node{emptyNode}, + toRemove: []NodeToBeRemoved{emptyNodeToRemove}, }, { name: "just a drainable node, but nowhere for pods to go to", pods: []*apiv1.Pod{pod1, pod2}, candidates: []string{drainableNode.Name}, allNodes: []*apiv1.Node{drainableNode}, - toRemove: []NodeToBeRemoved{}, unremovable: []*UnremovableNode{{Node: drainableNode, Reason: NoPlaceToMovePods}}, }, { @@ -181,16 +175,14 @@ func TestFindNodesToRemove(t *testing.T) { pods: []*apiv1.Pod{pod1, pod2, pod4}, candidates: []string{drainableNode.Name}, allNodes: []*apiv1.Node{drainableNode, fullNode}, - toRemove: []NodeToBeRemoved{}, unremovable: []*UnremovableNode{{Node: drainableNode, Reason: NoPlaceToMovePods}}, }, { - name: "4 nodes, 1 empty, 1 drainable", - pods: []*apiv1.Pod{pod1, pod2, pod3, pod4}, - candidates: []string{emptyNode.Name, drainableNode.Name}, - allNodes: []*apiv1.Node{emptyNode, drainableNode, fullNode, nonDrainableNode}, - toRemove: []NodeToBeRemoved{emptyNodeToRemove, drainableNodeToRemove}, - unremovable: []*UnremovableNode{}, + name: "4 nodes, 1 empty, 1 drainable", + pods: []*apiv1.Pod{pod1, pod2, pod3, pod4}, + candidates: []string{emptyNode.Name, drainableNode.Name}, + allNodes: []*apiv1.Node{emptyNode, drainableNode, fullNode, nonDrainableNode}, + toRemove: []NodeToBeRemoved{emptyNodeToRemove, drainableNodeToRemove}, }, } diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 5df8585e1f3b..8a7ae28b9e33 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -39,7 +39,6 @@ import ( // If listers is not nil it checks whether RC, DS, Jobs and RS that created // these pods still exist. func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options.NodeDeleteOptions, drainabilityRules rules.Rules, listers kube_util.ListerRegistry, remainingPdbTracker pdb.RemainingPdbTracker, timestamp time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod, blockingPod *drain.BlockingPod, err error) { - var drainPods, drainDs []*apiv1.Pod if drainabilityRules == nil { drainabilityRules = rules.Default(deleteOptions) } @@ -55,31 +54,21 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. pod := podInfo.Pod status := drainabilityRules.Drainable(drainCtx, pod) switch status.Outcome { - case drainability.UndefinedOutcome: - pods = append(pods, podInfo.Pod) - case drainability.DrainOk: + case drainability.UndefinedOutcome, drainability.DrainOk: + if drain.IsPodLongTerminating(pod, timestamp) { + continue + } if pod_util.IsDaemonSetPod(pod) { - drainDs = append(drainDs, pod) + daemonSetPods = append(daemonSetPods, pod) } else { - drainPods = append(drainPods, pod) + pods = append(pods, pod) } case drainability.BlockDrain: - blockingPod = &drain.BlockingPod{ + return nil, nil, &drain.BlockingPod{ Pod: pod, Reason: status.BlockingReason, - } - err = status.Error - return + }, status.Error } } - - pods, daemonSetPods = drain.GetPodsForDeletionOnNodeDrain( - pods, - remainingPdbTracker.GetPdbs(), - deleteOptions.SkipNodesWithSystemPods, - deleteOptions.SkipNodesWithLocalStorage, - deleteOptions.SkipNodesWithCustomControllerPods, - timestamp) - - return append(pods, drainPods...), append(daemonSetPods, drainDs...), nil, nil + return pods, daemonSetPods, nil, nil } diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index 1a7326be9a52..ca0d6a05548f 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -21,6 +21,8 @@ import ( "testing" "time" + appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" apiv1 "k8s.io/api/core/v1" policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -30,6 +32,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules" "k8s.io/autoscaler/cluster-autoscaler/simulator/options" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" + kube_util "k8s.io/autoscaler/cluster-autoscaler/utils/kubernetes" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" "k8s.io/kubernetes/pkg/kubelet/types" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" @@ -38,150 +42,466 @@ import ( ) func TestGetPodsToMove(t *testing.T) { - testTime := time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) - unreplicatedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "unreplicatedPod", - Namespace: "ns", - }, - } - rsPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rsPod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - }, - } - manifestPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "manifestPod", - Namespace: "kube-system", - Annotations: map[string]string{ - types.ConfigMirrorAnnotationKey: "something", + var ( + testTime = time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) + replicas = int32(5) + + unreplicatedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "unreplicatedPod", + Namespace: "ns", }, - }, - } - dsPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dsPod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("ds", "DaemonSet", "extensions/v1beta1", ""), - }, - } - systemPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "systemPod", - Namespace: "kube-system", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - }, - } - localStoragePod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "localStoragePod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - }, - Spec: apiv1.PodSpec{ - Volumes: []apiv1.Volume{ - { - Name: "empty-vol", - VolumeSource: apiv1.VolumeSource{ - EmptyDir: &apiv1.EmptyDirVolumeSource{}, - }, + } + manifestPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "manifestPod", + Namespace: "kube-system", + Annotations: map[string]string{ + types.ConfigMirrorAnnotationKey: "something", }, }, - }, - } - nonLocalStoragePod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "nonLocalStoragePod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - }, - Spec: apiv1.PodSpec{ - Volumes: []apiv1.Volume{ - { - Name: "my-repo", - VolumeSource: apiv1.VolumeSource{ - GitRepo: &apiv1.GitRepoVolumeSource{ - Repository: "my-repo", + } + systemPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "systemPod", + Namespace: "kube-system", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), + }, + } + localStoragePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "localStoragePod", + Namespace: "ns", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), + }, + Spec: apiv1.PodSpec{ + Volumes: []apiv1.Volume{ + { + Name: "empty-vol", + VolumeSource: apiv1.VolumeSource{ + EmptyDir: &apiv1.EmptyDirVolumeSource{}, }, }, }, }, - }, - } - pdbPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pdbPod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - Labels: map[string]string{ - "critical": "true", + } + nonLocalStoragePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "nonLocalStoragePod", + Namespace: "ns", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), }, - }, - Spec: apiv1.PodSpec{}, - } - one := intstr.FromInt(1) - restrictivePdb := &policyv1.PodDisruptionBudget{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foobar", - Namespace: "ns", - }, - Spec: policyv1.PodDisruptionBudgetSpec{ - MinAvailable: &one, - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - "critical": "true", + Spec: apiv1.PodSpec{ + Volumes: []apiv1.Volume{ + { + Name: "my-repo", + VolumeSource: apiv1.VolumeSource{ + GitRepo: &apiv1.GitRepoVolumeSource{ + Repository: "my-repo", + }, + }, + }, }, }, - }, - Status: policyv1.PodDisruptionBudgetStatus{ - DisruptionsAllowed: 0, - }, - } - permissivePdb := &policyv1.PodDisruptionBudget{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foobar", - Namespace: "ns", - }, - Spec: policyv1.PodDisruptionBudgetSpec{ - MinAvailable: &one, - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ + } + pdbPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pdbPod", + Namespace: "ns", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), + Labels: map[string]string{ "critical": "true", }, }, - }, - Status: policyv1.PodDisruptionBudgetStatus{ - DisruptionsAllowed: 1, - }, - } - terminatedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "terminatedPod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - DeletionTimestamp: &metav1.Time{ - Time: testTime.Add(-1*drain.PodLongTerminatingExtraThreshold - time.Minute), // more than PodLongTerminatingExtraThreshold + Spec: apiv1.PodSpec{}, + } + one = intstr.FromInt(1) + restrictivePdb = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foobar", + Namespace: "ns", }, - }, - } - terminatingPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "terminatingPod", - Namespace: "ns", - OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), - DeletionTimestamp: &metav1.Time{ - Time: testTime.Add(-1*drain.PodLongTerminatingExtraThreshold + time.Minute), // still terminating, below the default TerminatingGracePeriode + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "critical": "true", + }, + }, }, - }, - } + Status: policyv1.PodDisruptionBudgetStatus{ + DisruptionsAllowed: 0, + }, + } + permissivePdb = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foobar", + Namespace: "ns", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "critical": "true", + }, + }, + }, + Status: policyv1.PodDisruptionBudgetStatus{ + DisruptionsAllowed: 1, + }, + } + terminatedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "terminatedPod", + Namespace: "ns", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), + DeletionTimestamp: &metav1.Time{ + Time: testTime.Add(-1*drain.PodLongTerminatingExtraThreshold - time.Minute), // more than PodLongTerminatingExtraThreshold + }, + }, + } + terminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "terminatingPod", + Namespace: "ns", + OwnerReferences: GenerateOwnerReferences("rs", "ReplicaSet", "extensions/v1beta1", ""), + DeletionTimestamp: &metav1.Time{ + Time: testTime.Add(-1*drain.PodLongTerminatingExtraThreshold + time.Minute), // still terminating, below the default TerminatingGracePeriod + }, + }, + } + + rc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + rcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + kubeSystemRc = apiv1.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rc", + Namespace: "kube-system", + SelfLink: "api/v1/namespaces/kube-system/replicationcontrollers/rc", + }, + Spec: apiv1.ReplicationControllerSpec{ + Replicas: &replicas, + }, + } + kubeSystemRcPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + OwnerReferences: GenerateOwnerReferences(kubeSystemRc.Name, "ReplicationController", "core/v1", ""), + Labels: map[string]string{ + "k8s-app": "bar", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + ds = appsv1.DaemonSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ds", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/daemonsets/ds", + }, + } + dsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(ds.Name, "DaemonSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + cdsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(ds.Name, "CustomDaemonSet", "crd/v1", ""), + Annotations: map[string]string{ + "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + job = batchv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: "job", + Namespace: "default", + SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", + }, + } + jobPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), + }, + } + statefulset = appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ss", + Namespace: "default", + SelfLink: "/apiv1s/apps/v1/namespaces/default/statefulsets/ss", + }, + } + ssPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), + }, + } + rs = appsv1.ReplicaSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rs", + Namespace: "default", + SelfLink: "api/v1/namespaces/default/replicasets/rs", + }, + Spec: appsv1.ReplicaSetSpec{ + Replicas: &replicas, + }, + } + rsPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + rsPodDeleted = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + emptyDirSafeToEvictLocalVolumeMultiValAllMatching = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + Annotations: map[string]string{ + drain.SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-3", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch-1", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-2", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + { + Name: "scratch-3", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + terminalPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + } + zeroGracePeriod = int64(0) + longTerminatingPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * drain.PodLongTerminatingExtraThreshold)}, + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + extendedGracePeriod = int64(6 * 60) // 6 minutes + longTerminatingPodWithExtendedGracePeriod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Duration(extendedGracePeriod/2) * time.Second)}, + OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + } + failedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyNever, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + evictedPod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + RestartPolicy: apiv1.RestartPolicyAlways, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + }, + } + safePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + kubeSystemSafePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "kube-system", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + } + emptydirSafePod = &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + Annotations: map[string]string{ + drain.PodSafeToEvictKey: "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + Volumes: []apiv1.Volume{ + { + Name: "scratch", + VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, + }, + }, + }, + } + emptyPDB = &policyv1.PodDisruptionBudget{} + kubeSystemPDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kube-system", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "bar", + }, + }, + }, + Status: policyv1.PodDisruptionBudgetStatus{ + DisruptionsAllowed: 1, + }, + } + kubeSystemFakePDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kube-system", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "foo", + }, + }, + }, + Status: policyv1.PodDisruptionBudgetStatus{ + DisruptionsAllowed: 1, + }, + } + defaultNamespacePDB = &policyv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + }, + Spec: policyv1.PodDisruptionBudgetSpec{ + MinAvailable: &one, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "k8s-app": "PDB-managed pod", + }, + }, + }, + Status: policyv1.PodDisruptionBudgetStatus{ + DisruptionsAllowed: 1, + }, + } + ) testCases := []struct { desc string pods []*apiv1.Pod pdbs []*policyv1.PodDisruptionBudget + rcs []*apiv1.ReplicationController + replicaSets []*appsv1.ReplicaSet rules rules.Rules wantPods []*apiv1.Pod wantDs []*apiv1.Pod @@ -304,9 +624,149 @@ func TestGetPodsToMove(t *testing.T) { rules: []rules.Rule{cantDecide{}}, wantPods: []*apiv1.Pod{rsPod}, }, + + { + desc: "RC-managed pod", + pods: []*apiv1.Pod{rcPod}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{rcPod}, + }, + { + desc: "DS-managed pod", + pods: []*apiv1.Pod{dsPod}, + wantDs: []*apiv1.Pod{dsPod}, + }, + { + desc: "DS-managed pod by a custom Daemonset", + pods: []*apiv1.Pod{cdsPod}, + wantDs: []*apiv1.Pod{cdsPod}, + }, + { + desc: "Job-managed pod", + pods: []*apiv1.Pod{jobPod}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{jobPod}, + }, + { + desc: "SS-managed pod", + pods: []*apiv1.Pod{ssPod}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{ssPod}, + }, + { + desc: "RS-managed pod", + pods: []*apiv1.Pod{rsPod}, + replicaSets: []*appsv1.ReplicaSet{&rs}, + wantPods: []*apiv1.Pod{rsPod}, + }, + { + desc: "RS-managed pod that is being deleted", + pods: []*apiv1.Pod{rsPodDeleted}, + replicaSets: []*appsv1.ReplicaSet{&rs}, + }, + { + desc: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with matching values", + pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, + }, + { + desc: "failed pod", + pods: []*apiv1.Pod{failedPod}, + wantPods: []*apiv1.Pod{failedPod}, + }, + { + desc: "long terminating pod with 0 grace period", + pods: []*apiv1.Pod{longTerminatingPod}, + rcs: []*apiv1.ReplicationController{&rc}, + }, + { + desc: "long terminating pod with extended grace period", + pods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, + }, + { + desc: "evicted pod", + pods: []*apiv1.Pod{evictedPod}, + wantPods: []*apiv1.Pod{evictedPod}, + }, + { + desc: "pod in terminal state", + pods: []*apiv1.Pod{terminalPod}, + wantPods: []*apiv1.Pod{terminalPod}, + }, + { + desc: "pod with PodSafeToEvict annotation", + pods: []*apiv1.Pod{safePod}, + wantPods: []*apiv1.Pod{safePod}, + }, + { + desc: "kube-system pod with PodSafeToEvict annotation", + pods: []*apiv1.Pod{kubeSystemSafePod}, + wantPods: []*apiv1.Pod{kubeSystemSafePod}, + }, + { + desc: "pod with EmptyDir and PodSafeToEvict annotation", + pods: []*apiv1.Pod{emptydirSafePod}, + wantPods: []*apiv1.Pod{emptydirSafePod}, + }, + { + desc: "empty PDB with RC-managed pod", + pods: []*apiv1.Pod{rcPod}, + pdbs: []*policyv1.PodDisruptionBudget{emptyPDB}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{rcPod}, + }, + { + desc: "kube-system PDB with matching kube-system pod", + pods: []*apiv1.Pod{kubeSystemRcPod}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + wantPods: []*apiv1.Pod{kubeSystemRcPod}, + }, + { + desc: "kube-system PDB with non-matching kube-system pod", + pods: []*apiv1.Pod{kubeSystemRcPod}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemFakePDB}, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + wantErr: true, + wantBlocking: &drain.BlockingPod{Pod: kubeSystemRcPod, Reason: drain.UnmovableKubeSystemPod}, + }, + { + desc: "kube-system PDB with default namespace pod", + pods: []*apiv1.Pod{rcPod}, + pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, + rcs: []*apiv1.ReplicationController{&rc}, + wantPods: []*apiv1.Pod{rcPod}, + }, + { + desc: "default namespace PDB with matching labels kube-system pod", + pods: []*apiv1.Pod{kubeSystemRcPod}, + pdbs: []*policyv1.PodDisruptionBudget{defaultNamespacePDB}, + rcs: []*apiv1.ReplicationController{&kubeSystemRc}, + wantErr: true, + wantBlocking: &drain.BlockingPod{Pod: kubeSystemRcPod, Reason: drain.UnmovableKubeSystemPod}, + }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { + var registry kubernetes.ListerRegistry + if tc.rcs != nil || tc.replicaSets != nil { + rcLister, err := kube_util.NewTestReplicationControllerLister(tc.rcs) + assert.NoError(t, err) + rsLister, err := kube_util.NewTestReplicaSetLister(tc.replicaSets) + assert.NoError(t, err) + dsLister, err := kube_util.NewTestDaemonSetLister([]*appsv1.DaemonSet{&ds}) + assert.NoError(t, err) + jobLister, err := kube_util.NewTestJobLister([]*batchv1.Job{&job}) + assert.NoError(t, err) + ssLister, err := kube_util.NewTestStatefulSetLister([]*appsv1.StatefulSet{&statefulset}) + assert.NoError(t, err) + + registry = kube_util.NewListerRegistry(nil, nil, nil, nil, dsLister, rcLister, jobLister, rsLister, ssLister) + } + deleteOptions := options.NodeDeleteOptions{ SkipNodesWithSystemPods: true, SkipNodesWithLocalStorage: true, @@ -315,7 +775,7 @@ func TestGetPodsToMove(t *testing.T) { rules := append(tc.rules, rules.Default(deleteOptions)...) tracker := pdb.NewBasicRemainingPdbTracker() tracker.SetPdbs(tc.pdbs) - p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, rules, nil, tracker, testTime) + p, d, b, err := GetPodsToMove(schedulerframework.NewNodeInfo(tc.pods...), deleteOptions, rules, registry, tracker, testTime) if tc.wantErr { assert.Error(t, err) } else { diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go index 05f93d288a1d..894065a3de22 100644 --- a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go @@ -33,7 +33,7 @@ func New() *Rule { // Drainable decides what to do with daemon set pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if pod_util.IsDaemonSetPod(pod) { - return drainability.NewUndefinedStatus(drainability.Interrupt) + return drainability.NewDrainableStatus() } return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go index d444d7079999..1bd05e7d35e4 100644 --- a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go @@ -47,7 +47,7 @@ func TestDrainable(t *testing.T) { OwnerReferences: test.GenerateOwnerReferences("ds", "DaemonSet", "apps/v1", ""), }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, } { t.Run(desc, func(t *testing.T) { diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go index 5edc6b70f603..8b7c6aa64ca3 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go @@ -33,7 +33,7 @@ func New() *Rule { // Drainable decides what to do with long terminating pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { - return drainability.NewUndefinedStatus(drainability.Interrupt) + return drainability.NewDrainableStatus() } return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go index 934453429d1e..e9660aa34f6e 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go @@ -61,7 +61,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodUnknown, }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, "long terminating pod with extended grace period": { pod: &apiv1.Pod{ @@ -78,7 +78,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodUnknown, }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, } { t.Run(desc, func(t *testing.T) { diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 6bd2f970a42f..b02fb9aba0f0 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -88,7 +88,7 @@ func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) d for _, r := range rs { d := r.Drainable(drainCtx, pod) - if d.Interrupted || d.Outcome != drainability.UndefinedOutcome { + if d.Outcome != drainability.UndefinedOutcome { return d } } diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go index e9fd565d6d97..396e982c0213 100644 --- a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go @@ -33,7 +33,7 @@ func New() *Rule { // Drainable decides what to do with safe to evict pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.HasSafeToEvictAnnotation(pod) { - return drainability.NewUndefinedStatus(drainability.Interrupt) + return drainability.NewDrainableStatus() } return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go index d0560f2fea0d..3052183ffc79 100644 --- a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go @@ -49,7 +49,7 @@ func TestDrainable(t *testing.T) { }, }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, } { t.Run(desc, func(t *testing.T) { diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go index 164c61f4677c..addae1733762 100644 --- a/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go @@ -33,7 +33,7 @@ func New() *Rule { // Drainable decides what to do with terminal pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodTerminal(pod) { - return drainability.NewUndefinedStatus(drainability.Interrupt) + return drainability.NewDrainableStatus() } return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go index 9d8cfdc566ee..f63d9b660b79 100644 --- a/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go @@ -51,7 +51,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodSucceeded, }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, "failed pod": { pod: &apiv1.Pod{ @@ -66,7 +66,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodFailed, }, }, - want: drainability.NewUndefinedStatus(drainability.Interrupt), + want: drainability.NewDrainableStatus(), }, } { t.Run(desc, func(t *testing.T) { diff --git a/cluster-autoscaler/simulator/drainability/status.go b/cluster-autoscaler/simulator/drainability/status.go index 281d03c9c5b4..d73f346bead2 100644 --- a/cluster-autoscaler/simulator/drainability/status.go +++ b/cluster-autoscaler/simulator/drainability/status.go @@ -48,23 +48,6 @@ type Status struct { BlockingReason drain.BlockingPodReason // Error contains an optional error message. Error error - // Interrupted means that the Rule returning the status exited early and that - // additional Rules should not be run. - Interrupted bool -} - -// Option is used to modify a Status. -type Option func(*Status) - -// Interrupt implies no additional Rules should be run. -func Interrupt(s *Status) { - s.Interrupted = true -} - -func applyOptions(s *Status, opts []Option) { - for _, opt := range opts { - opt(s) - } } // NewDrainableStatus returns a new Status indicating that a pod can be drained. @@ -91,8 +74,6 @@ func NewSkipStatus() Status { } // NewUndefinedStatus returns a new Status that doesn't contain a decision. -func NewUndefinedStatus(opts ...Option) Status { - s := Status{} - applyOptions(&s, opts) - return s +func NewUndefinedStatus() Status { + return Status{} } diff --git a/cluster-autoscaler/utils/drain/drain.go b/cluster-autoscaler/utils/drain/drain.go index 45a28a384185..81eef9ad858a 100644 --- a/cluster-autoscaler/utils/drain/drain.go +++ b/cluster-autoscaler/utils/drain/drain.go @@ -21,9 +21,7 @@ import ( "time" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - pod_util "k8s.io/autoscaler/cluster-autoscaler/utils/pod" ) const ( @@ -70,37 +68,6 @@ const ( UnexpectedError ) -// GetPodsForDeletionOnNodeDrain returns pods that should be deleted on node -// drain as well as some extra information about possibly problematic pods -// (unreplicated and DaemonSets). -// -// This function assumes that default drainability rules have already been run -// to verify pod drainability. -func GetPodsForDeletionOnNodeDrain( - podList []*apiv1.Pod, - pdbs []*policyv1.PodDisruptionBudget, - skipNodesWithSystemPods bool, - skipNodesWithLocalStorage bool, - skipNodesWithCustomControllerPods bool, - currentTime time.Time) (pods []*apiv1.Pod, daemonSetPods []*apiv1.Pod) { - - pods = []*apiv1.Pod{} - daemonSetPods = []*apiv1.Pod{} - - for _, pod := range podList { - if IsPodLongTerminating(pod, currentTime) { - continue - } - - if pod_util.IsDaemonSetPod(pod) { - daemonSetPods = append(daemonSetPods, pod) - } else { - pods = append(pods, pod) - } - } - return pods, daemonSetPods -} - // ControllerRef returns the OwnerReference to pod's controller. func ControllerRef(pod *apiv1.Pod) *metav1.OwnerReference { return metav1.GetControllerOf(pod) diff --git a/cluster-autoscaler/utils/drain/drain_test.go b/cluster-autoscaler/utils/drain/drain_test.go index 0a20b781a9ac..95176fdf55d0 100644 --- a/cluster-autoscaler/utils/drain/drain_test.go +++ b/cluster-autoscaler/utils/drain/drain_test.go @@ -17,544 +17,13 @@ limitations under the License. package drain import ( - "fmt" "testing" "time" - appsv1 "k8s.io/api/apps/v1" - batchv1 "k8s.io/api/batch/v1" apiv1 "k8s.io/api/core/v1" - policyv1 "k8s.io/api/policy/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - . "k8s.io/autoscaler/cluster-autoscaler/utils/test" - - "github.com/stretchr/testify/assert" ) -// testOpts represents parameters required for a single unit test -type testOpts struct { - description string - pods []*apiv1.Pod - pdbs []*policyv1.PodDisruptionBudget - rcs []*apiv1.ReplicationController - replicaSets []*appsv1.ReplicaSet - expectPods []*apiv1.Pod - expectDaemonSetPods []*apiv1.Pod - // TODO(vadasambar): remove this when we get rid of scaleDownNodesWithCustomControllerPods - skipNodesWithCustomControllerPods bool -} - -func TestDrain(t *testing.T) { - testTime := time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) - replicas := int32(5) - - rc := apiv1.ReplicationController{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rc", - Namespace: "default", - SelfLink: "api/v1/namespaces/default/replicationcontrollers/rc", - }, - Spec: apiv1.ReplicationControllerSpec{ - Replicas: &replicas, - }, - } - - rcPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - kubeSystemRc := apiv1.ReplicationController{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rc", - Namespace: "kube-system", - SelfLink: "api/v1/namespaces/kube-system/replicationcontrollers/rc", - }, - Spec: apiv1.ReplicationControllerSpec{ - Replicas: &replicas, - }, - } - - kubeSystemRcPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - OwnerReferences: GenerateOwnerReferences(kubeSystemRc.Name, "ReplicationController", "core/v1", ""), - Labels: map[string]string{ - "k8s-app": "bar", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - ds := appsv1.DaemonSet{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ds", - Namespace: "default", - SelfLink: "/apiv1s/apps/v1/namespaces/default/daemonsets/ds", - }, - } - - dsPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(ds.Name, "DaemonSet", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - cdsPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(ds.Name, "CustomDaemonSet", "crd/v1", ""), - Annotations: map[string]string{ - "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - job := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{ - Name: "job", - Namespace: "default", - SelfLink: "/apiv1s/batch/v1/namespaces/default/jobs/job", - }, - } - - jobPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(job.Name, "Job", "batch/v1", ""), - }, - } - - statefulset := appsv1.StatefulSet{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ss", - Namespace: "default", - SelfLink: "/apiv1s/apps/v1/namespaces/default/statefulsets/ss", - }, - } - - ssPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(statefulset.Name, "StatefulSet", "apps/v1", ""), - }, - } - - rs := appsv1.ReplicaSet{ - ObjectMeta: metav1.ObjectMeta{ - Name: "rs", - Namespace: "default", - SelfLink: "api/v1/namespaces/default/replicasets/rs", - }, - Spec: appsv1.ReplicaSetSpec{ - Replicas: &replicas, - }, - } - - rsPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - rsPodDeleted := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rs.Name, "ReplicaSet", "apps/v1", ""), - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Hour)}, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - customControllerPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - // Using names like FooController is discouraged - // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#naming-conventions - // vadasambar: I am using it here just because `FooController`` - // is easier to understand than say `FooSet` - OwnerReferences: GenerateOwnerReferences("Foo", "FooController", "apps/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - emptyDirSafeToEvictLocalVolumeMultiValAllMatching := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - Annotations: map[string]string{ - SafeToEvictLocalVolumesKey: "scratch-1,scratch-2,scratch-3", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch-1", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-2", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - { - Name: "scratch-3", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - terminalPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodSucceeded, - }, - } - - zeroGracePeriod := int64(0) - longTerminatingPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-2 * PodLongTerminatingExtraThreshold)}, - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &zeroGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - extendedGracePeriod := int64(6 * 60) // 6 minutes - longTerminatingPodWithExtendedGracePeriod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - DeletionTimestamp: &metav1.Time{Time: testTime.Add(-time.Duration(extendedGracePeriod/2) * time.Second)}, - OwnerReferences: GenerateOwnerReferences(rc.Name, "ReplicationController", "core/v1", ""), - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyOnFailure, - TerminationGracePeriodSeconds: &extendedGracePeriod, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodUnknown, - }, - } - - failedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyNever, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - evictedPod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - RestartPolicy: apiv1.RestartPolicyAlways, - }, - Status: apiv1.PodStatus{ - Phase: apiv1.PodFailed, - }, - } - - safePod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - Annotations: map[string]string{ - PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - kubeSystemSafePod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "kube-system", - Annotations: map[string]string{ - PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - }, - } - - emptydirSafePod := &apiv1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Namespace: "default", - Annotations: map[string]string{ - PodSafeToEvictKey: "true", - }, - }, - Spec: apiv1.PodSpec{ - NodeName: "node", - Volumes: []apiv1.Volume{ - { - Name: "scratch", - VolumeSource: apiv1.VolumeSource{EmptyDir: &apiv1.EmptyDirVolumeSource{Medium: ""}}, - }, - }, - }, - } - - emptyPDB := &policyv1.PodDisruptionBudget{} - - kubeSystemPDB := &policyv1.PodDisruptionBudget{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "kube-system", - }, - Spec: policyv1.PodDisruptionBudgetSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - "k8s-app": "bar", - }, - }, - }, - } - - sharedTests := []testOpts{ - { - description: "RC-managed pod", - pods: []*apiv1.Pod{rcPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{rcPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "DS-managed pod", - pods: []*apiv1.Pod{dsPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{}, - expectDaemonSetPods: []*apiv1.Pod{dsPod}, - }, - { - description: "DS-managed pod by a custom Daemonset", - pods: []*apiv1.Pod{cdsPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{}, - expectDaemonSetPods: []*apiv1.Pod{cdsPod}, - }, - { - description: "Job-managed pod", - pods: []*apiv1.Pod{jobPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{jobPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "SS-managed pod", - pods: []*apiv1.Pod{ssPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{ssPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "RS-managed pod", - pods: []*apiv1.Pod{rsPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - replicaSets: []*appsv1.ReplicaSet{&rs}, - expectPods: []*apiv1.Pod{rsPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "RS-managed pod that is being deleted", - pods: []*apiv1.Pod{rsPodDeleted}, - pdbs: []*policyv1.PodDisruptionBudget{}, - replicaSets: []*appsv1.ReplicaSet{&rs}, - expectPods: []*apiv1.Pod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and SafeToEvictLocalVolumesKey annotation with matching values", - pods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{emptyDirSafeToEvictLocalVolumeMultiValAllMatching}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "failed pod", - pods: []*apiv1.Pod{failedPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{failedPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "long terminating pod with 0 grace period", - pods: []*apiv1.Pod{longTerminatingPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "long terminating pod with extended grace period", - pods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{longTerminatingPodWithExtendedGracePeriod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "evicted pod", - pods: []*apiv1.Pod{evictedPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{evictedPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod in terminal state", - pods: []*apiv1.Pod{terminalPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{terminalPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with PodSafeToEvict annotation", - pods: []*apiv1.Pod{safePod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{safePod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "kube-system pod with PodSafeToEvict annotation", - pods: []*apiv1.Pod{kubeSystemSafePod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{kubeSystemSafePod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "pod with EmptyDir and PodSafeToEvict annotation", - pods: []*apiv1.Pod{emptydirSafePod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{emptydirSafePod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "empty PDB with RC-managed pod", - pods: []*apiv1.Pod{rcPod}, - pdbs: []*policyv1.PodDisruptionBudget{emptyPDB}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{rcPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "kube-system PDB with matching kube-system pod", - pods: []*apiv1.Pod{kubeSystemRcPod}, - pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, - rcs: []*apiv1.ReplicationController{&kubeSystemRc}, - expectPods: []*apiv1.Pod{kubeSystemRcPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - { - description: "kube-system PDB with default namespace pod", - pods: []*apiv1.Pod{rcPod}, - pdbs: []*policyv1.PodDisruptionBudget{kubeSystemPDB}, - rcs: []*apiv1.ReplicationController{&rc}, - expectPods: []*apiv1.Pod{rcPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }, - } - - allTests := []testOpts{} - // Note: be careful about modifying the underlying reference values for sharedTest - // since they are shared (changing it once will change it for all shallow copies of sharedTest) - for _, sharedTest := range sharedTests { - for _, skipNodesWithCustomControllerPods := range []bool{true, false} { - // Copy test to prevent side effects. - test := sharedTest - test.skipNodesWithCustomControllerPods = skipNodesWithCustomControllerPods - test.description = fmt.Sprintf("%s with skipNodesWithCustomControllerPods:%t", test.description, skipNodesWithCustomControllerPods) - allTests = append(allTests, test) - } - } - - allTests = append(allTests, testOpts{ - description: "Custom-controller-managed non-blocking pod", - pods: []*apiv1.Pod{customControllerPod}, - pdbs: []*policyv1.PodDisruptionBudget{}, - expectPods: []*apiv1.Pod{customControllerPod}, - expectDaemonSetPods: []*apiv1.Pod{}, - }) - - for _, test := range allTests { - t.Run(test.description, func(t *testing.T) { - pods, daemonSetPods := GetPodsForDeletionOnNodeDrain(test.pods, test.pdbs, true, true, test.skipNodesWithCustomControllerPods, testTime) - - if len(pods) != len(test.expectPods) { - t.Fatal("wrong pod list content") - } - - assert.ElementsMatch(t, test.expectDaemonSetPods, daemonSetPods) - }) - } -} - func TestIsPodLongTerminating(t *testing.T) { testTime := time.Date(2020, time.December, 18, 17, 0, 0, 0, time.UTC) twoMinGracePeriod := int64(2 * 60) From 9a7459c88fcd8ba6ea3e7069a3af722076720401 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Mon, 9 Oct 2023 16:48:55 +0000 Subject: [PATCH 099/125] Fix custom controller drainability rule and add test coverage --- .../rules/longterminating/rule.go | 2 +- .../rules/longterminating/rule_test.go | 4 +- .../rule.go | 4 +- .../rule_test.go | 85 ++++++++++++++++++- .../drainability/rules/replicated/rule.go | 4 +- .../rules/replicated/rule_test.go | 2 +- .../simulator/drainability/rules/rules.go | 6 +- 7 files changed, 94 insertions(+), 13 deletions(-) rename cluster-autoscaler/simulator/drainability/rules/{customcontroller => replicacount}/rule.go (98%) rename cluster-autoscaler/simulator/drainability/rules/{customcontroller => replicacount}/rule_test.go (70%) diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go index 8b7c6aa64ca3..e5c50cf659b6 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go @@ -33,7 +33,7 @@ func New() *Rule { // Drainable decides what to do with long terminating pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { - return drainability.NewDrainableStatus() + return drainability.NewSkipStatus() } return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go index e9660aa34f6e..be0d87a9da80 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go @@ -61,7 +61,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodUnknown, }, }, - want: drainability.NewDrainableStatus(), + want: drainability.NewSkipStatus(), }, "long terminating pod with extended grace period": { pod: &apiv1.Pod{ @@ -78,7 +78,7 @@ func TestDrainable(t *testing.T) { Phase: apiv1.PodUnknown, }, }, - want: drainability.NewDrainableStatus(), + want: drainability.NewSkipStatus(), }, } { t.Run(desc, func(t *testing.T) { diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go similarity index 98% rename from cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go rename to cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go index 4661f12dc588..0612e11ea654 100644 --- a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package customcontroller +package replicacount import ( "fmt" @@ -66,7 +66,7 @@ func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) dr return drainability.NewBlockedStatus(drain.MinReplicasReached, fmt.Errorf("replication controller for %s/%s has too few replicas spec: %d min: %d", pod.Namespace, pod.Name, rc.Spec.Replicas, r.minReplicaCount)) } } else if pod_util.IsDaemonSetPod(pod) { - if refKind == "DaemonSet" { + if refKind != "DaemonSet" { // We don't have a listener for the other DaemonSet kind. // TODO: Use a generic client for checking the reference. return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule_test.go similarity index 70% rename from cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go rename to cluster-autoscaler/simulator/drainability/rules/replicacount/rule_test.go index 59d001878dfb..342a69738bb5 100644 --- a/cluster-autoscaler/simulator/drainability/rules/customcontroller/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package customcontroller +package replicacount import ( "testing" @@ -104,6 +104,21 @@ func TestDrainable(t *testing.T) { }, rcs: []*apiv1.ReplicationController{&rc}, }, + "RC-managed pod with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "ReplicationController", "core/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.ControllerNotFound, + wantError: true, + }, "DS-managed pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -116,6 +131,20 @@ func TestDrainable(t *testing.T) { }, }, }, + "DS-managed pod with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "DaemonSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + wantReason: drain.ControllerNotFound, + wantError: true, + }, "DS-managed pod by a custom Daemonset": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -131,6 +160,21 @@ func TestDrainable(t *testing.T) { }, }, }, + "DS-managed pod by a custom Daemonset with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "CustomDaemonSet", "crd/v1", ""), + Annotations: map[string]string{ + "cluster-autoscaler.kubernetes.io/daemonset-pod": "true", + }, + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + }, "Job-managed pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -141,6 +185,18 @@ func TestDrainable(t *testing.T) { }, rcs: []*apiv1.ReplicationController{&rc}, }, + "Job-managed pod with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "Job", "batch/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.ControllerNotFound, + wantError: true, + }, "SS-managed pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -151,6 +207,18 @@ func TestDrainable(t *testing.T) { }, rcs: []*apiv1.ReplicationController{&rc}, }, + "SS-managed pod with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "StatefulSet", "apps/v1", ""), + }, + }, + rcs: []*apiv1.ReplicationController{&rc}, + wantReason: drain.ControllerNotFound, + wantError: true, + }, "RS-managed pod": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -178,6 +246,21 @@ func TestDrainable(t *testing.T) { }, rss: []*appsv1.ReplicaSet{&rs}, }, + "RS-managed pod with missing reference": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + OwnerReferences: test.GenerateOwnerReferences("missing", "ReplicaSet", "apps/v1", ""), + }, + Spec: apiv1.PodSpec{ + NodeName: "node", + }, + }, + rss: []*appsv1.ReplicaSet{&rs}, + wantReason: drain.ControllerNotFound, + wantError: true, + }, } { t.Run(desc, func(t *testing.T) { var err error diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go index cca20d11422d..8b652e18d3c1 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go @@ -27,14 +27,12 @@ import ( // Rule is a drainability rule on how to handle replicated pods. type Rule struct { skipNodesWithCustomControllerPods bool - minReplicaCount int } // New creates a new Rule. -func New(skipNodesWithCustomControllerPods bool, minReplicaCount int) *Rule { +func New(skipNodesWithCustomControllerPods bool) *Rule { return &Rule{ skipNodesWithCustomControllerPods: skipNodesWithCustomControllerPods, - minReplicaCount: minReplicaCount, } } diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go index cee50dec100d..ce2943eb42c7 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule_test.go @@ -231,7 +231,7 @@ func TestDrainable(t *testing.T) { Listers: registry, Timestamp: testTime, } - status := New(test.skipNodesWithCustomControllerPods, 0).Drainable(drainCtx, test.pod) + status := New(test.skipNodesWithCustomControllerPods).Drainable(drainCtx, test.pod) assert.Equal(t, test.wantReason, status.BlockingReason) assert.Equal(t, test.wantError, status.Error != nil) }) diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index b02fb9aba0f0..facd618304b7 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -20,13 +20,13 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" - "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/customcontroller" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/daemonset" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/localstorage" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/longterminating" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/mirror" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/notsafetoevict" pdbrule "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/pdb" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicacount" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/replicated" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/safetoevict" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" @@ -52,7 +52,7 @@ func Default(deleteOptions options.NodeDeleteOptions) Rules { }{ {rule: mirror.New()}, {rule: longterminating.New()}, - {rule: customcontroller.New(deleteOptions.MinReplicaCount), skip: !deleteOptions.SkipNodesWithCustomControllerPods}, + {rule: replicacount.New(deleteOptions.MinReplicaCount), skip: !deleteOptions.SkipNodesWithCustomControllerPods}, // Interrupting checks {rule: daemonset.New()}, @@ -60,7 +60,7 @@ func Default(deleteOptions options.NodeDeleteOptions) Rules { {rule: terminal.New()}, // Blocking checks - {rule: replicated.New(deleteOptions.SkipNodesWithCustomControllerPods, deleteOptions.MinReplicaCount)}, + {rule: replicated.New(deleteOptions.SkipNodesWithCustomControllerPods)}, {rule: system.New(), skip: !deleteOptions.SkipNodesWithSystemPods}, {rule: notsafetoevict.New()}, {rule: localstorage.New(), skip: !deleteOptions.SkipNodesWithLocalStorage}, From 33e300f4356f6b8251d42a77273e2d2cbe342179 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Mon, 9 Oct 2023 20:17:55 +0000 Subject: [PATCH 100/125] Add unit test for long-terminating pod past grace period --- cluster-autoscaler/simulator/drain.go | 3 -- .../rules/longterminating/rule_test.go | 34 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/cluster-autoscaler/simulator/drain.go b/cluster-autoscaler/simulator/drain.go index 8a7ae28b9e33..1c97ca09827c 100644 --- a/cluster-autoscaler/simulator/drain.go +++ b/cluster-autoscaler/simulator/drain.go @@ -55,9 +55,6 @@ func GetPodsToMove(nodeInfo *schedulerframework.NodeInfo, deleteOptions options. status := drainabilityRules.Drainable(drainCtx, pod) switch status.Outcome { case drainability.UndefinedOutcome, drainability.DrainOk: - if drain.IsPodLongTerminating(pod, timestamp) { - continue - } if pod_util.IsDaemonSetPod(pod) { daemonSetPods = append(daemonSetPods, pod) } else { diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go index be0d87a9da80..713812bce85f 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go @@ -47,6 +47,23 @@ func TestDrainable(t *testing.T) { want: drainability.NewUndefinedStatus(), }, "long terminating pod with 0 grace period": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(drain.PodLongTerminatingExtraThreshold / 2)}, + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &zeroGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "expired long terminating pod with 0 grace period": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -64,6 +81,23 @@ func TestDrainable(t *testing.T) { want: drainability.NewSkipStatus(), }, "long terminating pod with extended grace period": { + pod: &apiv1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "default", + DeletionTimestamp: &metav1.Time{Time: testTime.Add(time.Duration(extendedGracePeriod) / 2 * time.Second)}, + }, + Spec: apiv1.PodSpec{ + RestartPolicy: apiv1.RestartPolicyOnFailure, + TerminationGracePeriodSeconds: &extendedGracePeriod, + }, + Status: apiv1.PodStatus{ + Phase: apiv1.PodUnknown, + }, + }, + want: drainability.NewUndefinedStatus(), + }, + "expired long terminating pod with extended grace period": { pod: &apiv1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", From 833e4cbf43d54505021facb49ccd4d4c6e738ac7 Mon Sep 17 00:00:00 2001 From: Hakan Bostan Date: Tue, 3 Oct 2023 12:24:38 +0000 Subject: [PATCH 101/125] Add HasNodeGroupStartedScaleUp to cluster state registry. - HasNodeGroupStartedScaleUp checks wheter a scale up request exists without checking any upcoming nodes. --- .../clusterstate/clusterstate.go | 11 +++++ .../clusterstate/clusterstate_test.go | 43 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/cluster-autoscaler/clusterstate/clusterstate.go b/cluster-autoscaler/clusterstate/clusterstate.go index a190084c8177..bf87069215ab 100644 --- a/cluster-autoscaler/clusterstate/clusterstate.go +++ b/cluster-autoscaler/clusterstate/clusterstate.go @@ -501,6 +501,17 @@ func (csr *ClusterStateRegistry) IsNodeGroupScalingUp(nodeGroupName string) bool return found } +// HasNodeGroupStartedScaleUp returns true if the node group has started scale up regardless +// of whether there are any upcoming nodes. This is useful in the case when the node group's +// size reverts back to its previous size before the next UpdatesCall and we want to know +// if a scale up for node group has started. +func (csr *ClusterStateRegistry) HasNodeGroupStartedScaleUp(nodeGroupName string) bool { + csr.Lock() + defer csr.Unlock() + _, found := csr.scaleUpRequests[nodeGroupName] + return found +} + // AcceptableRange contains information about acceptable size of a node group. type AcceptableRange struct { // MinNodes is the minimum number of nodes in the group. diff --git a/cluster-autoscaler/clusterstate/clusterstate_test.go b/cluster-autoscaler/clusterstate/clusterstate_test.go index b22a2fd5b7e0..6a74f69617fd 100644 --- a/cluster-autoscaler/clusterstate/clusterstate_test.go +++ b/cluster-autoscaler/clusterstate/clusterstate_test.go @@ -122,6 +122,7 @@ func TestEmptyOK(t *testing.T) { assert.Empty(t, clusterstate.GetScaleUpFailures()) assert.True(t, clusterstate.IsNodeGroupHealthy("ng1")) assert.False(t, clusterstate.IsNodeGroupScalingUp("ng1")) + assert.False(t, clusterstate.HasNodeGroupStartedScaleUp("ng1")) provider.AddNodeGroup("ng1", 0, 10, 3) clusterstate.RegisterOrUpdateScaleUp(provider.GetNodeGroup("ng1"), 3, now.Add(-3*time.Second)) @@ -133,6 +134,48 @@ func TestEmptyOK(t *testing.T) { assert.True(t, clusterstate.IsClusterHealthy()) assert.True(t, clusterstate.IsNodeGroupHealthy("ng1")) assert.True(t, clusterstate.IsNodeGroupScalingUp("ng1")) + assert.True(t, clusterstate.HasNodeGroupStartedScaleUp("ng1")) +} + +func TestHasNodeGroupStartedScaleUp(t *testing.T) { + tests := map[string]struct { + initialSize int + delta int + }{ + "Target size reverts back to zero": { + initialSize: 0, + delta: 3, + }, + } + for tn, tc := range tests { + t.Run(tn, func(t *testing.T) { + now := time.Now() + provider := testprovider.NewTestCloudProvider(nil, nil) + provider.AddNodeGroup("ng1", 0, 5, tc.initialSize) + fakeClient := &fake.Clientset{} + fakeLogRecorder, _ := utils.NewStatusMapRecorder(fakeClient, "kube-system", kube_record.NewFakeRecorder(5), false, "my-cool-configmap") + clusterstate := NewClusterStateRegistry(provider, ClusterStateRegistryConfig{ + MaxTotalUnreadyPercentage: 10, + OkTotalUnreadyCount: 1, + }, fakeLogRecorder, newBackoff(), nodegroupconfig.NewDefaultNodeGroupConfigProcessor(config.NodeGroupAutoscalingOptions{MaxNodeProvisionTime: time.Minute})) + err := clusterstate.UpdateNodes([]*apiv1.Node{}, nil, now.Add(-5*time.Second)) + assert.NoError(t, err) + assert.False(t, clusterstate.IsNodeGroupScalingUp("ng1")) + assert.False(t, clusterstate.HasNodeGroupStartedScaleUp("ng1")) + + provider.AddNodeGroup("ng1", 0, 5, tc.initialSize+tc.delta) + clusterstate.RegisterOrUpdateScaleUp(provider.GetNodeGroup("ng1"), tc.delta, now.Add(-3*time.Second)) + err = clusterstate.UpdateNodes([]*apiv1.Node{}, nil, now) + assert.NoError(t, err) + assert.True(t, clusterstate.IsNodeGroupScalingUp("ng1")) + assert.True(t, clusterstate.HasNodeGroupStartedScaleUp("ng1")) + + provider.AddNodeGroup("ng1", 0, 5, tc.initialSize) + clusterstate.Recalculate() + assert.False(t, clusterstate.IsNodeGroupScalingUp("ng1")) + assert.True(t, clusterstate.HasNodeGroupStartedScaleUp("ng1")) + }) + } } func TestOKOneUnreadyNode(t *testing.T) { From f115964924916ef6ffd06594331e0e5c7ebd6af1 Mon Sep 17 00:00:00 2001 From: Rich Gowman Date: Mon, 16 Oct 2023 12:59:56 +0000 Subject: [PATCH 102/125] Add kwiesmueller to OWNERS jbartosik et al are transitioning off of workload autoscalers (incl vpa and addon-resizer). kwiesmueller is on the new team and has agreed to take on reviewer/approver responsibilities. --- addon-resizer/OWNERS | 2 ++ vertical-pod-autoscaler/OWNERS | 2 ++ 2 files changed, 4 insertions(+) diff --git a/addon-resizer/OWNERS b/addon-resizer/OWNERS index eac0e8aa4634..69418fadfaaa 100644 --- a/addon-resizer/OWNERS +++ b/addon-resizer/OWNERS @@ -1,6 +1,8 @@ approvers: +- kwiesmueller - jbartosik reviewers: +- kwiesmueller - jbartosik emeritus_approvers: - bskiba # 2022-09-30 diff --git a/vertical-pod-autoscaler/OWNERS b/vertical-pod-autoscaler/OWNERS index 5e0d01703867..2f18f1658f50 100644 --- a/vertical-pod-autoscaler/OWNERS +++ b/vertical-pod-autoscaler/OWNERS @@ -1,8 +1,10 @@ approvers: +- kwiesmueller - kgolab - jbartosik - krzysied reviewers: +- kwiesmueller - kgolab - jbartosik - krzysied From 79c1ff4061a20882a3eef061b85cfc59e066de5c Mon Sep 17 00:00:00 2001 From: Daniel Gutowski Date: Mon, 16 Oct 2023 02:12:20 -0700 Subject: [PATCH 103/125] Add information about provisioning-class-name annotation. --- .../proposals/provisioning-request.md | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/cluster-autoscaler/proposals/provisioning-request.md b/cluster-autoscaler/proposals/provisioning-request.md index 90750c2a2bb0..0540cd7d8dc0 100644 --- a/cluster-autoscaler/proposals/provisioning-request.md +++ b/cluster-autoscaler/proposals/provisioning-request.md @@ -5,10 +5,10 @@ author: kisieland ## Background Currently CA does not provide any way to express that a group of pods would like -to have a capacity available. +to have a capacity available. This is caused by the fact that each CA loop picks a group of unschedulable pods and works on provisioning capacity for them, meaning that the grouping is random -(as it depends on the kube-scheduler and CA loop interactions). +(as it depends on the kube-scheduler and CA loop interactions). This is especially problematic in couple of cases: - Users would like to have all-or-nothing semantics for their workloads. @@ -25,11 +25,11 @@ This is especially problematic in couple of cases: ### High level Provisioning Request (abbr. ProvReq) is a new namespaced Custom Resource that -aims to allow users to ask CA for capacity for groups of pods. +aims to allow users to ask CA for capacity for groups of pods. It allows users to express the fact that group of pods is connected and should -be threated as one entity. +be threated as one entity. This AEP proposes an API that can have multiple provisioning classes and can be -extended by cloud provider specific ones. +extended by cloud provider specific ones. This object is meant as one-shot request to CA, so that if CA fails to provision the capacity it is up to users to retry (such retry functionality can be added later on). @@ -105,8 +105,8 @@ type ProvisioningRequestSpec struct { } type PodSet struct { - // PodTemplateRef is a reference to a PodTemplate object that is representing pods - // that will consume this reservation (must be within the same namespace). + // PodTemplateRef is a reference to a PodTemplate object that is representing pods + // that will consume this reservation (must be within the same namespace). // Users need to make sure that the fields relevant to scheduler (e.g. node selector tolerations) // are consistent between this template and actual pods consuming the Provisioning Request. // @@ -178,19 +178,21 @@ value of `--scale-down-unneeded-time` flag. ### Adding pods that consume given ProvisioningRequest To avoid generating double scale-ups and exclude pods that are meant to consume -given capacity CA should be able to differentiate those from all other pods. -To do so users need to specify the following pod annotation (it is not required -in ProvReq’s template, though it can be specified): +given capacity CA should be able to differentiate those from all other pods. +To achieve this users need to specify the following pod annotations (those are +not required in ProvReq’s template, though can be specified): ```yaml annotations: + "cluster-autoscaler.kubernetes.io/provisioning-class-name": "provreq-class-name" "cluster-autoscaler.kubernetes.io/consume-provisioning-request": "provreq-name" ``` -If it is provided for the pods that consume the ProvReq with `check-capacity.kubernetes.io` class, -the CA will not provision the capacity, even if it was needed (as some other pods might have been +If those are provided for the pods that consume the ProvReq with `check-capacity.kubernetes.io` class, +the CA will not provision the capacity, even if it was needed (as some other pods might have been scheduled on it) and will result in visibility events passed to the ProvReq and pods. -If it is not passed the CA will behave normally and just provision the capacity if it needed. +If those are not passed the CA will behave normally and just provision the capacity if it needed. +Both annotation are required and CA will not work correctly if only one of them is passed. Note: CA will match all pods with this annotation to a corresponding ProvReq and ignore them when executing a scale-up loop (so that is up to users to make sure @@ -312,9 +314,9 @@ Possible CRD definition: ```go // ProvisioningClass is a way to express provisioning classes available in the cluster. type ProvisioningClass struct { - // Name denotes the name of the object, which is to be used in the ProvisioningClass + // Name denotes the name of the object, which is to be used in the ProvisioningClass // field in Provisioning Request CRD. - // + // // +kubebuilder:validation:Required Name string `json:"name"` From e56c2d825518140022101f448d682086fc4c8d1f Mon Sep 17 00:00:00 2001 From: mikutas <23391543+mikutas@users.noreply.github.com> Date: Wed, 18 Oct 2023 08:43:04 +0900 Subject: [PATCH 104/125] Remove redundant if branch --- .../pkg/utils/limitrange/limit_range_calculator.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go b/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go index 27d5954e66b8..e54804a383a9 100644 --- a/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go +++ b/vertical-pod-autoscaler/pkg/utils/limitrange/limit_range_calculator.go @@ -60,9 +60,7 @@ func NewLimitsRangeCalculator(f informers.SharedInformerFactory) (*limitsChecker go informer.Run(stopCh) ok := cache.WaitForCacheSync(stopCh, informer.HasSynced) if !ok { - if !f.Core().V1().LimitRanges().Informer().HasSynced() { - return nil, fmt.Errorf("informer did not sync") - } + return nil, fmt.Errorf("informer did not sync") } return &limitsChecker{limitRangeLister}, nil } From 87013c26a81fb2145ab38ab25a0d32cb6960525d Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Fri, 13 Oct 2023 19:10:16 +0000 Subject: [PATCH 105/125] Add mechanism to override drainability status --- .../drainability/rules/daemonset/rule_test.go | 5 +- .../rules/longterminating/rule_test.go | 5 +- .../drainability/rules/mirror/rule_test.go | 5 +- .../drainability/rules/pdb/rule_test.go | 7 +- .../simulator/drainability/rules/rules.go | 19 ++- .../drainability/rules/rules_test.go | 128 ++++++++++++++++++ .../rules/safetoevict/rule_test.go | 5 +- .../drainability/rules/terminal/rule_test.go | 5 +- .../simulator/drainability/status.go | 6 + 9 files changed, 169 insertions(+), 16 deletions(-) create mode 100644 cluster-autoscaler/simulator/drainability/rules/rules_test.go diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go index 1bd05e7d35e4..d7d620160b91 100644 --- a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule_test.go @@ -19,6 +19,7 @@ package daemonset import ( "testing" + "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" @@ -52,8 +53,8 @@ func TestDrainable(t *testing.T) { } { t.Run(desc, func(t *testing.T) { got := New().Drainable(nil, tc.pod) - if tc.want != got { - t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Rule.Drainable(%v): got status diff (-want +got):\n%s", tc.pod.Name, diff) } }) } diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go index 713812bce85f..bf0d32853d12 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule_test.go @@ -20,6 +20,7 @@ import ( "testing" "time" + "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" @@ -120,8 +121,8 @@ func TestDrainable(t *testing.T) { Timestamp: testTime, } got := New().Drainable(drainCtx, tc.pod) - if tc.want != got { - t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Rule.Drainable(%v): got status diff (-want +got):\n%s", tc.pod.Name, diff) } }) } diff --git a/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go index d95cf704c9f5..81d13302f615 100644 --- a/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/mirror/rule_test.go @@ -19,6 +19,7 @@ package mirror import ( "testing" + "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" @@ -54,8 +55,8 @@ func TestDrainable(t *testing.T) { } { t.Run(desc, func(t *testing.T) { got := New().Drainable(nil, tc.pod) - if tc.want != got { - t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Rule.Drainable(%v): got status diff (-want +got):\n%s", tc.pod.Name, diff) } }) } diff --git a/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go index 73faf1100a07..a727c361f174 100644 --- a/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/pdb/rule_test.go @@ -26,6 +26,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/core/scaledown/pdb" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" "k8s.io/autoscaler/cluster-autoscaler/utils/drain" + + "github.com/stretchr/testify/assert" ) func TestDrainable(t *testing.T) { @@ -142,9 +144,8 @@ func TestDrainable(t *testing.T) { } got := New().Drainable(drainCtx, tc.pod) - if got.Outcome != tc.wantOutcome || got.BlockingReason != tc.wantReason { - t.Errorf("Rule.Drainable(%s) = (outcome: %v, reason: %v), want (outcome: %v, reason: %v)", tc.pod.Name, got.Outcome, got.BlockingReason, tc.wantOutcome, tc.wantReason) - } + assert.Equal(t, tc.wantReason, got.BlockingReason) + assert.Equal(t, tc.wantOutcome, got.Outcome) }) } } diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index facd618304b7..22b0b773c3f1 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -86,10 +86,23 @@ func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) d drainCtx.RemainingPdbTracker = pdb.NewBasicRemainingPdbTracker() } + var candidates []drainability.Status + for _, r := range rs { - d := r.Drainable(drainCtx, pod) - if d.Outcome != drainability.UndefinedOutcome { - return d + status := r.Drainable(drainCtx, pod) + if len(status.Overrides) > 0 { + candidates = append(candidates, status) + continue + } + for _, candidate := range candidates { + for _, override := range candidate.Overrides { + if status.Outcome == override { + return candidate + } + } + } + if status.Outcome != drainability.UndefinedOutcome { + return status } } return drainability.NewUndefinedStatus() diff --git a/cluster-autoscaler/simulator/drainability/rules/rules_test.go b/cluster-autoscaler/simulator/drainability/rules/rules_test.go new file mode 100644 index 000000000000..5654c87bcb4f --- /dev/null +++ b/cluster-autoscaler/simulator/drainability/rules/rules_test.go @@ -0,0 +1,128 @@ +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rules + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + apiv1 "k8s.io/api/core/v1" + "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" + "k8s.io/autoscaler/cluster-autoscaler/utils/drain" +) + +func TestDrainable(t *testing.T) { + for desc, tc := range map[string]struct { + rules Rules + want drainability.Status + }{ + "no rules": { + want: drainability.NewUndefinedStatus(), + }, + "first non-undefined rule returned": { + rules: Rules{ + fakeRule{drainability.NewUndefinedStatus()}, + fakeRule{drainability.NewDrainableStatus()}, + fakeRule{drainability.NewSkipStatus()}, + }, + want: drainability.NewDrainableStatus(), + }, + "override match": { + rules: Rules{ + fakeRule{drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }}, + fakeRule{drainability.NewBlockedStatus(drain.NotEnoughPdb, nil)}, + }, + want: drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }, + }, + "override no match": { + rules: Rules{ + fakeRule{drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.SkipDrain}, + }}, + fakeRule{drainability.NewBlockedStatus(drain.NotEnoughPdb, nil)}, + }, + want: drainability.NewBlockedStatus(drain.NotEnoughPdb, nil), + }, + "override unreachable": { + rules: Rules{ + fakeRule{drainability.NewSkipStatus()}, + fakeRule{drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }}, + fakeRule{drainability.NewBlockedStatus(drain.NotEnoughPdb, nil)}, + }, + want: drainability.NewSkipStatus(), + }, + "multiple overrides all run": { + rules: Rules{ + fakeRule{drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.SkipDrain}, + }}, + fakeRule{drainability.Status{ + Outcome: drainability.SkipDrain, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }}, + fakeRule{drainability.NewBlockedStatus(drain.NotEnoughPdb, nil)}, + }, + want: drainability.Status{ + Outcome: drainability.SkipDrain, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }, + }, + "multiple overrides respects order": { + rules: Rules{ + fakeRule{drainability.Status{ + Outcome: drainability.SkipDrain, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }}, + fakeRule{drainability.Status{ + Outcome: drainability.DrainOk, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }}, + fakeRule{drainability.NewBlockedStatus(drain.NotEnoughPdb, nil)}, + }, + want: drainability.Status{ + Outcome: drainability.SkipDrain, + Overrides: []drainability.OutcomeType{drainability.BlockDrain}, + }, + }, + } { + t.Run(desc, func(t *testing.T) { + got := tc.rules.Drainable(nil, nil) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Drainable(): got status diff (-want +got):\n%s", diff) + } + }) + } +} + +type fakeRule struct { + status drainability.Status +} + +func (r fakeRule) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { + return r.status +} diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go index 3052183ffc79..e407077f00b3 100644 --- a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule_test.go @@ -19,6 +19,7 @@ package safetoevict import ( "testing" + "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" @@ -54,8 +55,8 @@ func TestDrainable(t *testing.T) { } { t.Run(desc, func(t *testing.T) { got := New().Drainable(nil, tc.pod) - if tc.want != got { - t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Rule.Drainable(%v): got status diff (-want +got):\n%s", tc.pod.Name, diff) } }) } diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go index f63d9b660b79..7986a38c9f20 100644 --- a/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule_test.go @@ -19,6 +19,7 @@ package terminal import ( "testing" + "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability" @@ -71,8 +72,8 @@ func TestDrainable(t *testing.T) { } { t.Run(desc, func(t *testing.T) { got := New().Drainable(nil, tc.pod) - if tc.want != got { - t.Errorf("Rule.Drainable(%v) = %v, want %v", tc.pod.Name, got, tc.want) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("Rule.Drainable(%v): got status diff (-want +got):\n%s", tc.pod.Name, diff) } }) } diff --git a/cluster-autoscaler/simulator/drainability/status.go b/cluster-autoscaler/simulator/drainability/status.go index d73f346bead2..402342ec3071 100644 --- a/cluster-autoscaler/simulator/drainability/status.go +++ b/cluster-autoscaler/simulator/drainability/status.go @@ -43,6 +43,12 @@ type Status struct { // Outcome indicates what can happen when it comes to draining a // specific pod. Outcome OutcomeType + // Overrides specifies Outcomes that should be trumped by this Status. + // If Overrides is empty, this Status is returned immediately. + // If Overrides is non-empty, we continue running the remaining Rules. If a + // Rule is encountered that matches one of the Outcomes specified by this + // field, this Status will will be returned instead. + Overrides []OutcomeType // Reason contains the reason why a pod is blocking node drain. It is // set only when Outcome is BlockDrain. BlockingReason drain.BlockingPodReason From a0d56b3faa965336d697f25e5e0dad34527dc4db Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Mon, 16 Oct 2023 15:51:35 +0000 Subject: [PATCH 106/125] Log drainability override --- cluster-autoscaler/simulator/drain_test.go | 12 ++++++++++++ .../drainability/rules/daemonset/rule.go | 5 +++++ .../drainability/rules/localstorage/rule.go | 5 +++++ .../drainability/rules/longterminating/rule.go | 5 +++++ .../simulator/drainability/rules/mirror/rule.go | 5 +++++ .../drainability/rules/notsafetoevict/rule.go | 5 +++++ .../simulator/drainability/rules/pdb/rule.go | 5 +++++ .../drainability/rules/replicacount/rule.go | 5 +++++ .../drainability/rules/replicated/rule.go | 5 +++++ .../simulator/drainability/rules/rules.go | 17 +++++++++++++---- .../simulator/drainability/rules/rules_test.go | 6 +++++- .../drainability/rules/safetoevict/rule.go | 5 +++++ .../simulator/drainability/rules/system/rule.go | 5 +++++ .../drainability/rules/terminal/rule.go | 5 +++++ 14 files changed, 85 insertions(+), 5 deletions(-) diff --git a/cluster-autoscaler/simulator/drain_test.go b/cluster-autoscaler/simulator/drain_test.go index ca0d6a05548f..ef3912127833 100644 --- a/cluster-autoscaler/simulator/drain_test.go +++ b/cluster-autoscaler/simulator/drain_test.go @@ -790,18 +790,30 @@ func TestGetPodsToMove(t *testing.T) { type alwaysDrain struct{} +func (a alwaysDrain) Name() string { + return "AlwaysDrain" +} + func (a alwaysDrain) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewDrainableStatus() } type neverDrain struct{} +func (n neverDrain) Name() string { + return "NeverDrain" +} + func (n neverDrain) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewBlockedStatus(drain.UnexpectedError, fmt.Errorf("nope")) } type cantDecide struct{} +func (c cantDecide) Name() string { + return "CantDecide" +} + func (c cantDecide) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return drainability.NewUndefinedStatus() } diff --git a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go index 894065a3de22..a56795974178 100644 --- a/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/daemonset/rule.go @@ -30,6 +30,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "DaemonSet" +} + // Drainable decides what to do with daemon set pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if pod_util.IsDaemonSetPod(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go index 0884781f7708..076c977d3218 100644 --- a/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/localstorage/rule.go @@ -32,6 +32,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "LocalStorage" +} + // Drainable decides what to do with local storage pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.HasBlockingLocalStorage(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go index e5c50cf659b6..1efa3bfdc713 100644 --- a/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/longterminating/rule.go @@ -30,6 +30,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "LongTerminating" +} + // Drainable decides what to do with long terminating pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodLongTerminating(pod, drainCtx.Timestamp) { diff --git a/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go b/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go index 549fd6c9fbfa..057991f697bf 100644 --- a/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/mirror/rule.go @@ -30,6 +30,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "Mirror" +} + // Drainable decides what to do with mirror pods on node drain. func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if pod_util.IsMirrorPod(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go index 4a8147a9ac34..6373f74ae5c6 100644 --- a/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/notsafetoevict/rule.go @@ -32,6 +32,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "NotSafeToEvict" +} + // Drainable decides what to do with not safe to evict pods on node drain. func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.HasNotSafeToEvictAnnotation(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go b/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go index a0d315fc7c0f..9c9e89cf84c0 100644 --- a/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/pdb/rule.go @@ -32,6 +32,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "PDB" +} + // Drainable decides how to handle pods with pdbs on node drain. func (Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { for _, pdb := range drainCtx.RemainingPdbTracker.MatchingPdbs(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go index 0612e11ea654..458ee234f777 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicacount/rule.go @@ -38,6 +38,11 @@ func New(minReplicaCount int) *Rule { } } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "ReplicaCount" +} + // Drainable decides what to do with replicated pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drainCtx.Listers == nil { diff --git a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go index 8b652e18d3c1..5a760d6bf295 100644 --- a/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/replicated/rule.go @@ -36,6 +36,11 @@ func New(skipNodesWithCustomControllerPods bool) *Rule { } } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "Replicated" +} + // Drainable decides what to do with replicated pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { controllerRef := drain.ControllerRef(pod) diff --git a/cluster-autoscaler/simulator/drainability/rules/rules.go b/cluster-autoscaler/simulator/drainability/rules/rules.go index 22b0b773c3f1..6dfb6e4ab7ac 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules.go @@ -32,10 +32,13 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/system" "k8s.io/autoscaler/cluster-autoscaler/simulator/drainability/rules/terminal" "k8s.io/autoscaler/cluster-autoscaler/simulator/options" + "k8s.io/klog/v2" ) // Rule determines whether a given pod can be drained or not. type Rule interface { + // The name of the rule. + Name() string // Drainable determines whether a given pod is drainable according to // the specific Rule. // @@ -86,18 +89,19 @@ func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) d drainCtx.RemainingPdbTracker = pdb.NewBasicRemainingPdbTracker() } - var candidates []drainability.Status + var candidates []overrideCandidate for _, r := range rs { status := r.Drainable(drainCtx, pod) if len(status.Overrides) > 0 { - candidates = append(candidates, status) + candidates = append(candidates, overrideCandidate{r.Name(), status}) continue } for _, candidate := range candidates { - for _, override := range candidate.Overrides { + for _, override := range candidate.status.Overrides { if status.Outcome == override { - return candidate + klog.V(5).Info("Overriding pod %s/%s drainability rule %s with rule %s, outcome %v", pod.GetNamespace(), pod.GetName(), r.Name(), candidate.name, candidate.status.Outcome) + return candidate.status } } } @@ -107,3 +111,8 @@ func (rs Rules) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) d } return drainability.NewUndefinedStatus() } + +type overrideCandidate struct { + name string + status drainability.Status +} diff --git a/cluster-autoscaler/simulator/drainability/rules/rules_test.go b/cluster-autoscaler/simulator/drainability/rules/rules_test.go index 5654c87bcb4f..1c1ab7b23df6 100644 --- a/cluster-autoscaler/simulator/drainability/rules/rules_test.go +++ b/cluster-autoscaler/simulator/drainability/rules/rules_test.go @@ -111,7 +111,7 @@ func TestDrainable(t *testing.T) { }, } { t.Run(desc, func(t *testing.T) { - got := tc.rules.Drainable(nil, nil) + got := tc.rules.Drainable(nil, &apiv1.Pod{}) if diff := cmp.Diff(tc.want, got); diff != "" { t.Errorf("Drainable(): got status diff (-want +got):\n%s", diff) } @@ -123,6 +123,10 @@ type fakeRule struct { status drainability.Status } +func (r fakeRule) Name() string { + return "FakeRule" +} + func (r fakeRule) Drainable(*drainability.DrainContext, *apiv1.Pod) drainability.Status { return r.status } diff --git a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go index 396e982c0213..42ea2ec7fd04 100644 --- a/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/safetoevict/rule.go @@ -30,6 +30,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "SafeToEvict" +} + // Drainable decides what to do with safe to evict pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.HasSafeToEvictAnnotation(pod) { diff --git a/cluster-autoscaler/simulator/drainability/rules/system/rule.go b/cluster-autoscaler/simulator/drainability/rules/system/rule.go index a0e9160189a5..0db0ea8b3a3d 100644 --- a/cluster-autoscaler/simulator/drainability/rules/system/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/system/rule.go @@ -32,6 +32,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "System" +} + // Drainable decides what to do with system pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if pod.Namespace == "kube-system" && len(drainCtx.RemainingPdbTracker.MatchingPdbs(pod)) == 0 { diff --git a/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go index addae1733762..83edfcfcce19 100644 --- a/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go +++ b/cluster-autoscaler/simulator/drainability/rules/terminal/rule.go @@ -30,6 +30,11 @@ func New() *Rule { return &Rule{} } +// Name returns the name of the rule. +func (r *Rule) Name() string { + return "Terminal" +} + // Drainable decides what to do with terminal pods on node drain. func (r *Rule) Drainable(drainCtx *drainability.DrainContext, pod *apiv1.Pod) drainability.Status { if drain.IsPodTerminal(pod) { From 3b7037366123d7b022733f5aeed8c5210407b82f Mon Sep 17 00:00:00 2001 From: Jonathan Raymond Date: Wed, 18 Oct 2023 17:05:47 -0600 Subject: [PATCH 107/125] fix(cluster-autoscaler-chart): if secretKeyRefNameOverride is true, don't create secret Signed-off-by: Jonathan Raymond --- charts/cluster-autoscaler/Chart.yaml | 2 +- charts/cluster-autoscaler/templates/secret.yaml | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/charts/cluster-autoscaler/Chart.yaml b/charts/cluster-autoscaler/Chart.yaml index 394a0be6d268..588058162586 100644 --- a/charts/cluster-autoscaler/Chart.yaml +++ b/charts/cluster-autoscaler/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 1.27.2 +appVersion: 1.27.3 description: Scales Kubernetes worker nodes within autoscaling groups. engine: gotpl home: https://github.com/kubernetes/autoscaler diff --git a/charts/cluster-autoscaler/templates/secret.yaml b/charts/cluster-autoscaler/templates/secret.yaml index 9c58d0feb1a6..5096a2249b27 100644 --- a/charts/cluster-autoscaler/templates/secret.yaml +++ b/charts/cluster-autoscaler/templates/secret.yaml @@ -1,11 +1,16 @@ -{{- if or (eq .Values.cloudProvider "azure") (and (eq .Values.cloudProvider "aws") (not (has "" (list .Values.awsAccessKeyID .Values.awsSecretAccessKey)))) }} +{{- if not .Values.secretKeyRefNameOverride }} +{{- $isAzure := eq .Values.cloudProvider "azure" }} +{{- $isAws := eq .Values.cloudProvider "aws" }} +{{- $awsCredentialsProvided := and .Values.awsAccessKeyID .Values.awsSecretAccessKey }} + +{{- if or $isAzure (and $isAws $awsCredentialsProvided) }} apiVersion: v1 kind: Secret metadata: name: {{ template "cluster-autoscaler.fullname" . }} namespace: {{ .Release.Namespace }} data: -{{- if eq .Values.cloudProvider "azure" }} +{{- if $isAzure }} ClientID: "{{ .Values.azureClientID | b64enc }}" ClientSecret: "{{ .Values.azureClientSecret | b64enc }}" ResourceGroup: "{{ .Values.azureResourceGroup | b64enc }}" @@ -14,8 +19,9 @@ data: VMType: "{{ .Values.azureVMType | b64enc }}" ClusterName: "{{ .Values.azureClusterName | b64enc }}" NodeResourceGroup: "{{ .Values.azureNodeResourceGroup | b64enc }}" -{{- else if eq .Values.cloudProvider "aws" }} +{{- else if $isAws }} AwsAccessKeyId: "{{ .Values.awsAccessKeyID | b64enc }}" AwsSecretAccessKey: "{{ .Values.awsSecretAccessKey | b64enc }}" {{- end }} {{- end }} +{{- end }} From 7e0b682b33b066836ac2651fa8bf42815f4cb101 Mon Sep 17 00:00:00 2001 From: Jonathan Raymond Date: Wed, 18 Oct 2023 17:10:18 -0600 Subject: [PATCH 108/125] fix: correct version bump Signed-off-by: Jonathan Raymond --- charts/cluster-autoscaler/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/cluster-autoscaler/Chart.yaml b/charts/cluster-autoscaler/Chart.yaml index 588058162586..c5219cf940d0 100644 --- a/charts/cluster-autoscaler/Chart.yaml +++ b/charts/cluster-autoscaler/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 1.27.3 +appVersion: 1.27.2 description: Scales Kubernetes worker nodes within autoscaling groups. engine: gotpl home: https://github.com/kubernetes/autoscaler @@ -11,4 +11,4 @@ name: cluster-autoscaler sources: - https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler type: application -version: 9.29.3 +version: 9.29.4 From ab4c5cb8c76d14b8504b18dfc6cf56e963159679 Mon Sep 17 00:00:00 2001 From: Artem Minyaylov Date: Thu, 19 Oct 2023 15:55:34 +0000 Subject: [PATCH 109/125] Initialize default drainability rules --- cluster-autoscaler/core/autoscaler.go | 3 +++ cluster-autoscaler/main.go | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/core/autoscaler.go b/cluster-autoscaler/core/autoscaler.go index 29d4b841b8ba..f0baf8cc51f7 100644 --- a/cluster-autoscaler/core/autoscaler.go +++ b/cluster-autoscaler/core/autoscaler.go @@ -144,6 +144,9 @@ func initializeDefaultOptions(opts *AutoscalerOptions) error { opts.Backoff = backoff.NewIdBasedExponentialBackoff(opts.InitialNodeGroupBackoffDuration, opts.MaxNodeGroupBackoffDuration, opts.NodeGroupBackoffResetTimeout) } + if opts.DrainabilityRules == nil { + opts.DrainabilityRules = rules.Default(opts.DeleteOptions) + } return nil } diff --git a/cluster-autoscaler/main.go b/cluster-autoscaler/main.go index 5f879522670a..5276b97c5658 100644 --- a/cluster-autoscaler/main.go +++ b/cluster-autoscaler/main.go @@ -462,6 +462,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter return nil, err } deleteOptions := options.NewNodeDeleteOptions(autoscalingOptions) + drainabilityRules := rules.Default(deleteOptions) opts := core.AutoscalerOptions{ AutoscalingOptions: autoscalingOptions, @@ -472,6 +473,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter DebuggingSnapshotter: debuggingSnapshotter, PredicateChecker: predicateChecker, DeleteOptions: deleteOptions, + DrainabilityRules: drainabilityRules, } opts.Processors = ca_processors.DefaultProcessors(autoscalingOptions) @@ -481,7 +483,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter if autoscalingOptions.ParallelDrain { sdCandidatesSorting := previouscandidates.NewPreviousCandidates() scaleDownCandidatesComparers = []scaledowncandidates.CandidatesComparer{ - emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions, rules.Default(deleteOptions)), + emptycandidates.NewEmptySortingProcessor(emptycandidates.NewNodeInfoGetter(opts.ClusterSnapshot), deleteOptions, drainabilityRules), sdCandidatesSorting, } opts.Processors.ScaleDownCandidatesNotifier.Register(sdCandidatesSorting) From e1408eddda4a87a6bd8f0e1f379081409492536e Mon Sep 17 00:00:00 2001 From: Johnnie Ho Date: Wed, 11 Oct 2023 00:09:51 +0700 Subject: [PATCH 110/125] feat: each node pool can now have different init configs --- .../cloudprovider/hetzner/README.md | 32 ++++++++ .../hetzner/hetzner_cloud_provider.go | 12 ++- .../cloudprovider/hetzner/hetzner_manager.go | 75 ++++++++++++++++--- .../hetzner/hetzner_node_group.go | 49 ++++++++++-- 4 files changed, 149 insertions(+), 19 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/hetzner/README.md b/cluster-autoscaler/cloudprovider/hetzner/README.md index 066d87b7cddb..b4af539f2ccb 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/README.md +++ b/cluster-autoscaler/cloudprovider/hetzner/README.md @@ -10,6 +10,38 @@ The cluster autoscaler for Hetzner Cloud scales worker nodes. `HCLOUD_IMAGE` Defaults to `ubuntu-20.04`, @see https://docs.hetzner.cloud/#images. You can also use an image ID here (e.g. `15512617`), or a label selector associated with a custom snapshot (e.g. `customized_ubuntu=true`). The most recent snapshot will be used in the latter case. +`HCLOUD_CLUSTER_CONFIG` This is the new format replacing + * `HCLOUD_CLOUD_INIT` + * `HCLOUD_IMAGE` + + Base64 encoded JSON according to the following structure + +```json +{ + "imagesForArch": { // These should be the same format as HCLOUD_IMAGE + "arm64": "", + "amd64": "" + }, + "nodeConfigs": { + "pool1": { // This equals the pool name. Required for each pool that you have + "cloudInit": "", // HCLOUD_CLOUD_INIT make sure it isn't base64 encoded twice ;] + "labels": { + "node.kubernetes.io/role": "autoscaler-node" + }, + "taints": + [ + { + "key": "node.kubernetes.io/role", + "value": "autoscaler-node", + "effect": "NoExecute", + } + ] + } + } +} +``` + + `HCLOUD_NETWORK` Default empty , The name of the network that is used in the cluster , @see https://docs.hetzner.cloud/#networks `HCLOUD_FIREWALL` Default empty , The name of the firewall that is used in the cluster , @see https://docs.hetzner.cloud/#firewalls diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go index 0deab54b679a..ad9e35d2e85e 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_cloud_provider.go @@ -191,9 +191,12 @@ func BuildHetzner(_ config.AutoscalingOptions, do cloudprovider.NodeGroupDiscove klog.Fatalf("Failed to create Hetzner cloud provider: %v", err) } + if manager.clusterConfig.IsUsingNewFormat && len(manager.clusterConfig.NodeConfigs) == 0 { + klog.Fatalf("No cluster config present provider: %v", err) + } + validNodePoolName := regexp.MustCompile(`^[a-z0-9A-Z]+[a-z0-9A-Z\-\.\_]*[a-z0-9A-Z]+$|^[a-z0-9A-Z]{1}$`) clusterUpdateLock := sync.Mutex{} - for _, nodegroupSpec := range do.NodeGroupSpecs { spec, err := createNodePoolSpec(nodegroupSpec) if err != nil { @@ -206,6 +209,13 @@ func BuildHetzner(_ config.AutoscalingOptions, do cloudprovider.NodeGroupDiscove klog.Fatalf("Failed to get servers for for node pool %s error: %v", nodegroupSpec, err) } + if manager.clusterConfig.IsUsingNewFormat { + _, ok := manager.clusterConfig.NodeConfigs[spec.name] + if !ok { + klog.Fatalf("No node config present for node group id `%s` error: %v", spec.name, err) + } + } + manager.nodeGroups[spec.name] = &hetznerNodeGroup{ manager: manager, id: spec.name, diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go index 2d2afd44a5c1..89c1f12b6196 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_manager.go @@ -19,6 +19,7 @@ package hetzner import ( "context" "encoding/base64" + "encoding/json" "errors" "fmt" "net/http" @@ -45,8 +46,7 @@ type hetznerManager struct { client *hcloud.Client nodeGroups map[string]*hetznerNodeGroup apiCallContext context.Context - cloudInit string - image string + clusterConfig *ClusterConfig sshKey *hcloud.SSHKey network *hcloud.Network firewall *hcloud.Firewall @@ -57,6 +57,33 @@ type hetznerManager struct { cachedServers *serversCache } +// ClusterConfig holds the configuration for all the nodepools +type ClusterConfig struct { + ImagesForArch ImageList + NodeConfigs map[string]*NodeConfig + IsUsingNewFormat bool + LegacyConfig LegacyConfig +} + +// ImageList holds the image id/names for the different architectures +type ImageList struct { + Arm64 string + Amd64 string +} + +// NodeConfig holds the configuration for a single nodepool +type NodeConfig struct { + CloudInit string + Taints []apiv1.Taint + Labels map[string]string +} + +// LegacyConfig holds the configuration in the legacy format +type LegacyConfig struct { + CloudInit string + ImageName string +} + func newManager() (*hetznerManager, error) { token := os.Getenv("HCLOUD_TOKEN") if token == "" { @@ -71,19 +98,44 @@ func newManager() (*hetznerManager, error) { ) ctx := context.Background() + var err error + clusterConfigBase64 := os.Getenv("HCLOUD_CLUSTER_CONFIG") cloudInitBase64 := os.Getenv("HCLOUD_CLOUD_INIT") - if cloudInitBase64 == "" { - return nil, errors.New("`HCLOUD_CLOUD_INIT` is not specified") + + if clusterConfigBase64 == "" && cloudInitBase64 == "" { + return nil, errors.New("`HCLOUD_CLUSTER_CONFIG` or `HCLOUD_CLOUD_INIT` is not specified") } - cloudInit, err := base64.StdEncoding.DecodeString(cloudInitBase64) - if err != nil { - return nil, fmt.Errorf("failed to parse cloud init error: %s", err) + var clusterConfig *ClusterConfig = &ClusterConfig{} + + if clusterConfigBase64 != "" { + clusterConfig.IsUsingNewFormat = true } - imageName := os.Getenv("HCLOUD_IMAGE") - if imageName == "" { - imageName = "ubuntu-20.04" + if clusterConfig.IsUsingNewFormat { + clusterConfigEnv, err := base64.StdEncoding.DecodeString(clusterConfigBase64) + if err != nil { + return nil, fmt.Errorf("failed to parse cluster config error: %s", err) + } + err = json.Unmarshal(clusterConfigEnv, &clusterConfig) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal cluster config JSON: %s", err) + } + } + + if !clusterConfig.IsUsingNewFormat { + cloudInit, err := base64.StdEncoding.DecodeString(cloudInitBase64) + if err != nil { + return nil, fmt.Errorf("failed to parse cloud init error: %s", err) + } + + imageName := os.Getenv("HCLOUD_IMAGE") + if imageName == "" { + imageName = "ubuntu-20.04" + } + + clusterConfig.LegacyConfig.CloudInit = string(cloudInit) + clusterConfig.LegacyConfig.ImageName = imageName } publicIPv4 := true @@ -141,8 +193,6 @@ func newManager() (*hetznerManager, error) { m := &hetznerManager{ client: client, nodeGroups: make(map[string]*hetznerNodeGroup), - cloudInit: string(cloudInit), - image: imageName, sshKey: sshKey, network: network, firewall: firewall, @@ -150,6 +200,7 @@ func newManager() (*hetznerManager, error) { apiCallContext: ctx, publicIPv4: publicIPv4, publicIPv6: publicIPv6, + clusterConfig: clusterConfig, cachedServerType: newServerTypeCache(ctx, client), cachedServers: newServersCache(ctx, client), } diff --git a/cluster-autoscaler/cloudprovider/hetzner/hetzner_node_group.go b/cluster-autoscaler/cloudprovider/hetzner/hetzner_node_group.go index af79f94c8987..c819cfb4886f 100644 --- a/cluster-autoscaler/cloudprovider/hetzner/hetzner_node_group.go +++ b/cluster-autoscaler/cloudprovider/hetzner/hetzner_node_group.go @@ -19,6 +19,7 @@ package hetzner import ( "context" "fmt" + "maps" "math/rand" "strings" "sync" @@ -241,6 +242,16 @@ func (n *hetznerNodeGroup) TemplateNodeInfo() (*schedulerframework.NodeInfo, err } node.Labels = cloudprovider.JoinStringMaps(node.Labels, nodeGroupLabels) + if n.manager.clusterConfig.IsUsingNewFormat && n.id != drainingNodePoolId { + for _, taint := range n.manager.clusterConfig.NodeConfigs[n.id].Taints { + node.Spec.Taints = append(node.Spec.Taints, apiv1.Taint{ + Key: taint.Key, + Value: taint.Value, + Effect: taint.Effect, + }) + } + } + nodeInfo := schedulerframework.NewNodeInfo(cloudprovider.BuildKubeProxy(n.id)) nodeInfo.SetNode(&node) @@ -325,14 +336,23 @@ func buildNodeGroupLabels(n *hetznerNodeGroup) (map[string]string, error) { if err != nil { return nil, err } + klog.V(4).Infof("Build node group label for %s", n.id) - return map[string]string{ + labels := map[string]string{ apiv1.LabelInstanceType: n.instanceType, apiv1.LabelTopologyRegion: n.region, apiv1.LabelArchStable: archLabel, "csi.hetzner.cloud/location": n.region, nodeGroupLabel: n.id, - }, nil + } + + if n.manager.clusterConfig.IsUsingNewFormat && n.id != drainingNodePoolId { + maps.Copy(labels, n.manager.clusterConfig.NodeConfigs[n.id].Labels) + } + + klog.V(4).Infof("%s nodegroup labels: %s", n.id, labels) + + return labels, nil } func getMachineTypeResourceList(m *hetznerManager, instanceType string) (apiv1.ResourceList, error) { @@ -392,10 +412,16 @@ func createServer(n *hetznerNodeGroup) error { return err } + cloudInit := n.manager.clusterConfig.LegacyConfig.CloudInit + + if n.manager.clusterConfig.IsUsingNewFormat { + cloudInit = n.manager.clusterConfig.NodeConfigs[n.id].CloudInit + } + StartAfterCreate := true opts := hcloud.ServerCreateOpts{ Name: newNodeName(n), - UserData: n.manager.cloudInit, + UserData: cloudInit, Location: &hcloud.Location{Name: n.region}, ServerType: serverType, Image: image, @@ -443,7 +469,18 @@ func createServer(n *hetznerNodeGroup) error { // server. func findImage(n *hetznerNodeGroup, serverType *hcloud.ServerType) (*hcloud.Image, error) { // Select correct image based on server type architecture - image, _, err := n.manager.client.Image.GetForArchitecture(context.TODO(), n.manager.image, serverType.Architecture) + imageName := n.manager.clusterConfig.LegacyConfig.ImageName + if n.manager.clusterConfig.IsUsingNewFormat { + if serverType.Architecture == hcloud.ArchitectureARM { + imageName = n.manager.clusterConfig.ImagesForArch.Arm64 + } + + if serverType.Architecture == hcloud.ArchitectureX86 { + imageName = n.manager.clusterConfig.ImagesForArch.Amd64 + } + } + + image, _, err := n.manager.client.Image.GetForArchitecture(context.TODO(), imageName, serverType.Architecture) if err != nil { // Keep looking for label if image was not found by id or name if !strings.HasPrefix(err.Error(), "image not found") { @@ -462,12 +499,12 @@ func findImage(n *hetznerNodeGroup, serverType *hcloud.ServerType) (*hcloud.Imag Sort: []string{"created:desc"}, Architecture: []hcloud.Architecture{serverType.Architecture}, ListOpts: hcloud.ListOpts{ - LabelSelector: n.manager.image, + LabelSelector: imageName, }, }) if err != nil || len(images) == 0 { - return nil, fmt.Errorf("unable to find image %s with architecture %s: %v", n.manager.image, serverType.Architecture, err) + return nil, fmt.Errorf("unable to find image %s with architecture %s: %v", imageName, serverType.Architecture, err) } return images[0], nil From 54d3a4c71465a3c83f962851b92a6ffaa7667e22 Mon Sep 17 00:00:00 2001 From: aleskandro Date: Sat, 26 Aug 2023 19:33:05 +0200 Subject: [PATCH 111/125] ClusterAPI: Allow overriding the kubernetes.io/arch label set by the scale from zero method via environment variable The architecture label in the build generic labels method of the cluster API (CAPI) provider is now populated using the GetDefaultScaleFromZeroArchitecture().Name() method. The method allows CAPI users deploying the cluster-autoscaler to define the default architecture to be used by the cluster-autoscaler for scale up from zero via the env var CAPI_SCALE_ZERO_DEFAULT_ARCH. Amd64 is kept as a fallback for historical reasons. The introduced changes will not take into account the case of nodes heterogeneous in architecture. The labels generation to infer properties like the cpu architecture from the node groups' features should be considered as a CAPI provider specific implementation. --- .../cloudprovider/clusterapi/README.md | 11 +++ .../clusterapi/clusterapi_nodegroup.go | 2 +- .../clusterapi/clusterapi_utils.go | 66 ++++++++++++++++ .../clusterapi/clusterapi_utils_test.go | 76 +++++++++++++++++++ 4 files changed, 154 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/cloudprovider/clusterapi/README.md b/cluster-autoscaler/cloudprovider/clusterapi/README.md index ba4a62660d68..2f4e247f4579 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/README.md +++ b/cluster-autoscaler/cloudprovider/clusterapi/README.md @@ -20,6 +20,7 @@ cluster. * [Scale from zero support](#scale-from-zero-support) * [RBAC changes for scaling from zero](#rbac-changes-for-scaling-from-zero) * [Pre-defined labels and taints on nodes scaled from zero](#pre-defined-labels-and-taints-on-nodes-scaled-from-zero) + * [CPU Architecture awareness for single-arch clusters](#cpu-architecture-awareness-for-single-arch-clusters) * [Specifying a Custom Resource Group](#specifying-a-custom-resource-group) * [Specifying a Custom Resource Version](#specifying-a-custom-resource-version) * [Sample manifest](#sample-manifest) @@ -276,6 +277,16 @@ metadata: capacity.cluster-autoscaler.kubernetes.io/taints: "key1=value1:NoSchedule,key2=value2:NoExecute" ``` +#### CPU Architecture awareness for single-arch clusters + +Users of single-arch non-amd64 clusters who are using scale from zero +support should also set the `CAPI_SCALE_ZERO_DEFAULT_ARCH` environment variable +to set the architecture of the nodes they want to default the node group templates to. +The autoscaler will default to `amd64` if it is not set, and the node +group templates may not match the nodes' architecture, specifically when +the workload triggering the scale-up uses a node affinity predicate checking +for the node's architecture. + ## Specifying a Custom Resource Group By default all Kubernetes resources consumed by the Cluster API provider will diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go index 37a4f9ced14b..d28dc0a14f28 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_nodegroup.go @@ -369,7 +369,7 @@ func buildGenericLabels(nodeName string) map[string]string { // TODO revisit this function and add an explanation about what these // labels are used for, or remove them if not necessary m := make(map[string]string) - m[corev1.LabelArchStable] = cloudprovider.DefaultArch + m[corev1.LabelArchStable] = GetDefaultScaleFromZeroArchitecture().Name() m[corev1.LabelOSStable] = cloudprovider.DefaultOS diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go index 27292d49e8ea..cdb0e884ecd5 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils.go @@ -18,8 +18,11 @@ package clusterapi import ( "fmt" + "k8s.io/klog/v2" + "os" "strconv" "strings" + "sync" "github.com/pkg/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -36,6 +39,20 @@ const ( maxPodsKey = "capacity.cluster-autoscaler.kubernetes.io/maxPods" taintsKey = "capacity.cluster-autoscaler.kubernetes.io/taints" labelsKey = "capacity.cluster-autoscaler.kubernetes.io/labels" + // UnknownArch is used if the Architecture is Unknown + UnknownArch SystemArchitecture = "" + // Amd64 is used if the Architecture is x86_64 + Amd64 SystemArchitecture = "amd64" + // Arm64 is used if the Architecture is ARM64 + Arm64 SystemArchitecture = "arm64" + // Ppc64le is used if the Architecture is ppc64le + Ppc64le SystemArchitecture = "ppc64le" + // S390x is used if the Architecture is s390x + S390x SystemArchitecture = "s390x" + // DefaultArch should be used as a fallback if not passed by the environment via the --scale-up-from-zero-default-arch + DefaultArch = Amd64 + // scaleUpFromZeroDefaultEnvVar is the name of the env var for the default architecture + scaleUpFromZeroDefaultArchEnvVar = "CAPI_SCALE_ZERO_DEFAULT_ARCH" ) var ( @@ -79,10 +96,25 @@ var ( nodeGroupMinSizeAnnotationKey = getNodeGroupMinSizeAnnotationKey() nodeGroupMaxSizeAnnotationKey = getNodeGroupMaxSizeAnnotationKey() zeroQuantity = resource.MustParse("0") + + systemArchitecture *SystemArchitecture + once sync.Once ) type normalizedProviderID string +// SystemArchitecture represents a CPU architecture (e.g., amd64, arm64, ppc64le, s390x). +// It is used to determine the default architecture to use when building the nodes templates for scaling up from zero +// by some cloud providers. This code is the same as the GCE implementation at +// https://github.com/kubernetes/autoscaler/blob/3852f352d96b8763292a9122163c1152dfedec55/cluster-autoscaler/cloudprovider/gce/templates.go#L611-L657 +// which is kept to allow for a smooth transition to this package, once the GCE team is ready to use it. +type SystemArchitecture string + +// Name returns the string value for SystemArchitecture +func (s SystemArchitecture) Name() string { + return string(s) +} + // minSize returns the minimum value encoded in the annotations keyed // by nodeGroupMinSizeAnnotationKey. Returns errMissingMinAnnotation // if the annotation doesn't exist or errInvalidMinAnnotation if the @@ -279,3 +311,37 @@ func getClusterNameLabel() string { key := fmt.Sprintf("%s/cluster-name", getCAPIGroup()) return key } + +// SystemArchitectureFromString parses a string to SystemArchitecture. Returns UnknownArch if the string doesn't represent a +// valid architecture. +func SystemArchitectureFromString(arch string) SystemArchitecture { + switch arch { + case string(Arm64): + return Arm64 + case string(Amd64): + return Amd64 + case string(Ppc64le): + return Ppc64le + case string(S390x): + return S390x + default: + return UnknownArch + } +} + +// GetDefaultScaleFromZeroArchitecture returns the SystemArchitecture from the environment variable +// CAPI_SCALE_ZERO_DEFAULT_ARCH or DefaultArch if the variable is set to an invalid value. +func GetDefaultScaleFromZeroArchitecture() SystemArchitecture { + once.Do(func() { + archStr := os.Getenv(scaleUpFromZeroDefaultArchEnvVar) + arch := SystemArchitectureFromString(archStr) + klog.V(5).Infof("the default scale from zero architecture value is set to %s (%s)", scaleUpFromZeroDefaultArchEnvVar, archStr, arch.Name()) + if arch == UnknownArch { + arch = DefaultArch + klog.Errorf("Unrecognized architecture '%s', falling back to %s", + scaleUpFromZeroDefaultArchEnvVar, DefaultArch.Name()) + } + systemArchitecture = &arch + }) + return *systemArchitecture +} diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils_test.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils_test.go index c4d01c56e365..c6bafd50a969 100644 --- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils_test.go +++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_utils_test.go @@ -18,8 +18,10 @@ package clusterapi import ( "fmt" + "github.com/google/go-cmp/cmp" "reflect" "strings" + "sync" "testing" "k8s.io/apimachinery/pkg/api/resource" @@ -853,3 +855,77 @@ func Test_getKeyHelpers(t *testing.T) { }) } } + +func TestSystemArchitectureFromString(t *testing.T) { + tcs := []struct { + name string + archName string + wantArch SystemArchitecture + }{ + { + name: "valid architecture is converted", + archName: "amd64", + wantArch: Amd64, + }, + { + name: "invalid architecture results in UnknownArchitecture", + archName: "some-arch", + wantArch: UnknownArch, + }, + } + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + gotArch := SystemArchitectureFromString(tc.archName) + if diff := cmp.Diff(tc.wantArch, gotArch); diff != "" { + t.Errorf("ToSystemArchitecture diff (-want +got):\n%s", diff) + } + }) + } +} + +func TestGetSystemArchitectureFromEnvOrDefault(t *testing.T) { + amd64 := Amd64.Name() + arm64 := Arm64.Name() + wrongValue := "wrong" + + tcs := []struct { + name string + envValue *string + want SystemArchitecture + }{ + { + name: fmt.Sprintf("%s is set to arm64", scaleUpFromZeroDefaultArchEnvVar), + envValue: &arm64, + want: Arm64, + }, + { + name: fmt.Sprintf("%s is set to amd64", scaleUpFromZeroDefaultArchEnvVar), + envValue: &amd64, + want: Amd64, + }, + { + name: fmt.Sprintf("%s is not set", scaleUpFromZeroDefaultArchEnvVar), + envValue: nil, + want: DefaultArch, + }, + { + name: fmt.Sprintf("%s is set to a wrong value", scaleUpFromZeroDefaultArchEnvVar), + envValue: &wrongValue, + want: DefaultArch, + }, + } + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + // Reset the systemArchitecture variable to nil before each test due to the lazy initialization of the variable. + systemArchitecture = nil + // Reset the once variable to its initial state before each test. + once = sync.Once{} + if tc.envValue != nil { + t.Setenv(scaleUpFromZeroDefaultArchEnvVar, *tc.envValue) + } + if got := GetDefaultScaleFromZeroArchitecture(); got != tc.want { + t.Errorf("GetDefaultScaleFromZeroArchitecture() = %v, want %v", got, tc.want) + } + }) + } +} From 83723e1d7ab5e4847abf56c805dce2e022b4735a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Tu=C5=BCnik?= Date: Fri, 20 Oct 2023 12:15:17 +0200 Subject: [PATCH 112/125] Update image builder to use Go 1.21.3 Some of Cluster Autoscaler code is now using features only available in Go 1.21. --- builder/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/Dockerfile b/builder/Dockerfile index 5c24664b3e62..27892662d62d 100644 --- a/builder/Dockerfile +++ b/builder/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.20.4 +FROM golang:1.21.3 LABEL maintainer="Marcin Wielgus " ENV GOPATH /gopath/ From d532844bac79f7694bad0f1cc57ff75cac2b0931 Mon Sep 17 00:00:00 2001 From: lisenet Date: Fri, 20 Oct 2023 14:45:43 +0100 Subject: [PATCH 113/125] Add node-delete-delay-after-taint to FAQ --- cluster-autoscaler/FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster-autoscaler/FAQ.md b/cluster-autoscaler/FAQ.md index adbd745a3578..5eed7388c77b 100644 --- a/cluster-autoscaler/FAQ.md +++ b/cluster-autoscaler/FAQ.md @@ -788,7 +788,7 @@ The following startup parameters are supported for cluster autoscaler: | `feature-gates` | A set of key=value pairs that describe feature gates for alpha/experimental features. | "" | `cordon-node-before-terminating` | Should CA cordon nodes before terminating during downscale process | false | `record-duplicated-events` | Enable the autoscaler to print duplicated events within a 5 minute window. | false -| `debugging-snapshot-enabled` | Whether the debugging snapshot of cluster autoscaler feature is enabled. | false +| `node-delete-delay-after-taint` | How long to wait before deleting a node after tainting it. | 5 seconds # Troubleshooting: From fe6eae504126e211a143972a10bd4fe9ea24fa79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wr=C3=B3tniak?= Date: Tue, 17 Oct 2023 14:36:14 +0000 Subject: [PATCH 114/125] Reports node taints. --- cluster-autoscaler/core/static_autoscaler.go | 8 + cluster-autoscaler/metrics/metrics.go | 15 ++ cluster-autoscaler/utils/taints/taints.go | 138 +++++++++++++----- .../utils/taints/taints_test.go | 110 +++++++++++++- 4 files changed, 226 insertions(+), 45 deletions(-) diff --git a/cluster-autoscaler/core/static_autoscaler.go b/cluster-autoscaler/core/static_autoscaler.go index 68b870786d02..ac3103973931 100644 --- a/cluster-autoscaler/core/static_autoscaler.go +++ b/cluster-autoscaler/core/static_autoscaler.go @@ -955,6 +955,7 @@ func (a *StaticAutoscaler) obtainNodeLists(cp cloudprovider.CloudProvider) ([]*a klog.Errorf("Failed to list ready nodes: %v", err) return nil, nil, caerrors.ToAutoscalerError(caerrors.ApiCallError, err) } + a.reportTaintsCount(allNodes) // Handle GPU case - allocatable GPU may be equal to 0 up to 15 minutes after // node registers as ready. See https://github.com/kubernetes/kubernetes/issues/54959 @@ -978,6 +979,13 @@ func (a *StaticAutoscaler) updateClusterState(allNodes []*apiv1.Node, nodeInfosF return nil } +func (a *StaticAutoscaler) reportTaintsCount(nodes []*apiv1.Node) { + foundTaints := taints.CountNodeTaints(nodes, a.taintConfig) + for taintType, count := range foundTaints { + metrics.ObserveNodeTaintsCount(taintType, float64(count)) + } +} + func allPodsAreNew(pods []*apiv1.Pod, currentTime time.Time) bool { if core_utils.GetOldestCreateTime(pods).Add(unschedulablePodTimeBuffer).After(currentTime) { return true diff --git a/cluster-autoscaler/metrics/metrics.go b/cluster-autoscaler/metrics/metrics.go index 8f4e0d869ddd..44939c46e17d 100644 --- a/cluster-autoscaler/metrics/metrics.go +++ b/cluster-autoscaler/metrics/metrics.go @@ -373,6 +373,15 @@ var ( Help: "Number of node groups deleted by Node Autoprovisioning.", }, ) + + nodeTaintsCount = k8smetrics.NewGaugeVec( + &k8smetrics.GaugeOpts{ + Namespace: caNamespace, + Name: "node_taints_count", + Help: "Number of taints per type used in the cluster.", + }, + []string{"type"}, + ) ) // RegisterAll registers all metrics. @@ -407,6 +416,7 @@ func RegisterAll(emitPerNodeGroupMetrics bool) { legacyregistry.MustRegister(nodeGroupCreationCount) legacyregistry.MustRegister(nodeGroupDeletionCount) legacyregistry.MustRegister(pendingNodeDeletions) + legacyregistry.MustRegister(nodeTaintsCount) if emitPerNodeGroupMetrics { legacyregistry.MustRegister(nodesGroupMinNodes) @@ -615,3 +625,8 @@ func RegisterSkippedScaleUpMemory() { func ObservePendingNodeDeletions(value int) { pendingNodeDeletions.Set(float64(value)) } + +// ObserveNodeTaintsCount records the node taints count of given type. +func ObserveNodeTaintsCount(taintType string, count float64) { + nodeTaintsCount.WithLabelValues(taintType).Set(count) +} diff --git a/cluster-autoscaler/utils/taints/taints.go b/cluster-autoscaler/utils/taints/taints.go index c3a09db60e12..6910f8d75ae4 100644 --- a/cluster-autoscaler/utils/taints/taints.go +++ b/cluster-autoscaler/utils/taints/taints.go @@ -19,6 +19,7 @@ package taints import ( "context" "fmt" + "maps" "strconv" "strings" "time" @@ -54,6 +55,36 @@ const ( // AWS: Indicates that a node has volumes stuck in attaching state and hence it is not fit for scheduling more pods awsNodeWithImpairedVolumesTaint = "NodeWithImpairedVolumes" + + // statusNodeTaintReportedType is the value used when reporting node taint count defined as status taint in given taintConfig. + statusNodeTaintReportedType = "status-taint" + + // startupNodeTaintReportedType is the value used when reporting node taint count defined as startup taint in given taintConfig. + startupNodeTaintReportedType = "startup-taint" + + // unlistedNodeTaintReportedType is the value used when reporting node taint count in case taint key is other than defined in explicitlyReportedNodeTaints and taintConfig. + unlistedNodeTaintReportedType = "other" +) + +var ( + // NodeConditionTaints lists taint keys used as node conditions + NodeConditionTaints = TaintKeySet{ + apiv1.TaintNodeNotReady: true, + apiv1.TaintNodeUnreachable: true, + apiv1.TaintNodeUnschedulable: true, + apiv1.TaintNodeMemoryPressure: true, + apiv1.TaintNodeDiskPressure: true, + apiv1.TaintNodeNetworkUnavailable: true, + apiv1.TaintNodePIDPressure: true, + cloudproviderapi.TaintExternalCloudProvider: true, + cloudproviderapi.TaintNodeShutdown: true, + gkeNodeTerminationHandlerTaint: true, + awsNodeWithImpairedVolumesTaint: true, + } + + // Mutable only in unit tests + maxRetryDeadline time.Duration = 5 * time.Second + conflictRetryInterval time.Duration = 750 * time.Millisecond ) // TaintKeySet is a set of taint key @@ -61,10 +92,11 @@ type TaintKeySet map[string]bool // TaintConfig is a config of taints that require special handling type TaintConfig struct { - StartupTaints TaintKeySet - StatusTaints TaintKeySet - StartupTaintPrefixes []string - StatusTaintPrefixes []string + startupTaints TaintKeySet + statusTaints TaintKeySet + startupTaintPrefixes []string + statusTaintPrefixes []string + explicitlyReportedTaints TaintKeySet } // NewTaintConfig returns the taint config extracted from options @@ -81,34 +113,41 @@ func NewTaintConfig(opts config.AutoscalingOptions) TaintConfig { statusTaints[taintKey] = true } + explicitlyReportedTaints := TaintKeySet{ + ToBeDeletedTaint: true, + DeletionCandidateTaint: true, + } + maps.Copy(explicitlyReportedTaints, NodeConditionTaints) + return TaintConfig{ - StartupTaints: startupTaints, - StatusTaints: statusTaints, - StartupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, - StatusTaintPrefixes: []string{StatusTaintPrefix}, + startupTaints: startupTaints, + statusTaints: statusTaints, + startupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, + statusTaintPrefixes: []string{StatusTaintPrefix}, + explicitlyReportedTaints: explicitlyReportedTaints, } } -var ( - // NodeConditionTaints lists taint keys used as node conditions - NodeConditionTaints = TaintKeySet{ - apiv1.TaintNodeNotReady: true, - apiv1.TaintNodeUnreachable: true, - apiv1.TaintNodeUnschedulable: true, - apiv1.TaintNodeMemoryPressure: true, - apiv1.TaintNodeDiskPressure: true, - apiv1.TaintNodeNetworkUnavailable: true, - apiv1.TaintNodePIDPressure: true, - cloudproviderapi.TaintExternalCloudProvider: true, - cloudproviderapi.TaintNodeShutdown: true, - gkeNodeTerminationHandlerTaint: true, - awsNodeWithImpairedVolumesTaint: true, +// IsStartupTaint checks whether given taint is a startup taint. +func (tc TaintConfig) IsStartupTaint(taint string) bool { + if _, ok := tc.startupTaints[taint]; ok { + return true } + return matchesAnyPrefix(tc.startupTaintPrefixes, taint) +} - // Mutable only in unit tests - maxRetryDeadline time.Duration = 5 * time.Second - conflictRetryInterval time.Duration = 750 * time.Millisecond -) +// IsStatusTaint checks whether given taint is a status taint. +func (tc TaintConfig) IsStatusTaint(taint string) bool { + if _, ok := tc.statusTaints[taint]; ok { + return true + } + return matchesAnyPrefix(tc.statusTaintPrefixes, taint) +} + +func (tc TaintConfig) isExplicitlyReportedTaint(taint string) bool { + _, ok := tc.explicitlyReportedTaints[taint] + return ok +} // getKeyShortName converts taint key to short name for logging func getKeyShortName(key string) string { @@ -361,18 +400,8 @@ func SanitizeTaints(taints []apiv1.Taint, taintConfig TaintConfig) []apiv1.Taint continue } - if _, exists := taintConfig.StartupTaints[taint.Key]; exists { - klog.V(4).Infof("Removing startup taint %s, when creating template from node", taint.Key) - continue - } - shouldRemoveBasedOnPrefix := matchesAnyPrefix(taintConfig.StartupTaintPrefixes, taint.Key) || matchesAnyPrefix(taintConfig.StatusTaintPrefixes, taint.Key) - if shouldRemoveBasedOnPrefix { - klog.V(4).Infof("Removing taint %s based on prefix, when creation template from node", taint.Key) - continue - } - - if _, exists := taintConfig.StatusTaints[taint.Key]; exists { - klog.V(4).Infof("Removing status taint %s, when creating template from node", taint.Key) + if taintConfig.IsStartupTaint(taint.Key) || taintConfig.IsStatusTaint(taint.Key) { + klog.V(4).Infof("Removing taint %s, when creating template from node", taint.Key) continue } @@ -394,8 +423,7 @@ func FilterOutNodesWithStartupTaints(taintConfig TaintConfig, allNodes, readyNod } ready := true for _, t := range node.Spec.Taints { - _, hasStartupTaint := taintConfig.StartupTaints[t.Key] - if hasStartupTaint || matchesAnyPrefix(taintConfig.StartupTaintPrefixes, t.Key) { + if taintConfig.IsStartupTaint(t.Key) { ready = false nodesWithStartupTaints[node.Name] = kubernetes.GetUnreadyNodeCopy(node, kubernetes.StartupNodes) klog.V(3).Infof("Overriding status of node %v, which seems to have startup taint %q", node.Name, t.Key) @@ -416,3 +444,33 @@ func FilterOutNodesWithStartupTaints(taintConfig TaintConfig, allNodes, readyNod } return newAllNodes, newReadyNodes } + +// CountNodeTaints counts used node taints. +func CountNodeTaints(nodes []*apiv1.Node, taintConfig TaintConfig) map[string]int { + foundTaintsCount := make(map[string]int) + for _, node := range nodes { + for _, taint := range node.Spec.Taints { + key := getTaintTypeToReport(taint.Key, taintConfig) + foundTaintsCount[key] += 1 + } + } + return foundTaintsCount +} + +func getTaintTypeToReport(key string, taintConfig TaintConfig) string { + // Track deprecated taints. + if strings.HasPrefix(key, IgnoreTaintPrefix) { + return IgnoreTaintPrefix + } + + if taintConfig.isExplicitlyReportedTaint(key) { + return key + } + if taintConfig.IsStartupTaint(key) { + return startupNodeTaintReportedType + } + if taintConfig.IsStatusTaint(key) { + return statusNodeTaintReportedType + } + return unlistedNodeTaintReportedType +} diff --git a/cluster-autoscaler/utils/taints/taints_test.go b/cluster-autoscaler/utils/taints/taints_test.go index fff009c81792..27a32e610d1d 100644 --- a/cluster-autoscaler/utils/taints/taints_test.go +++ b/cluster-autoscaler/utils/taints/taints_test.go @@ -24,6 +24,7 @@ import ( "testing" "time" + "k8s.io/autoscaler/cluster-autoscaler/config" . "k8s.io/autoscaler/cluster-autoscaler/utils/test" apiv1 "k8s.io/api/core/v1" @@ -472,8 +473,8 @@ func TestFilterOutNodesWithStartupTaints(t *testing.T) { nodes = append(nodes, tc.node) } taintConfig := TaintConfig{ - StartupTaints: tc.startupTaints, - StartupTaintPrefixes: tc.startupTaintsPrefixes, + startupTaints: tc.startupTaints, + startupTaintPrefixes: tc.startupTaintsPrefixes, } allNodes, readyNodes := FilterOutNodesWithStartupTaints(taintConfig, nodes, nodes) assert.Equal(t, tc.allNodes, len(allNodes)) @@ -562,9 +563,9 @@ func TestSanitizeTaints(t *testing.T) { }, } taintConfig := TaintConfig{ - StartupTaints: map[string]bool{"ignore-me": true}, - StatusTaints: map[string]bool{"status-me": true}, - StartupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, + startupTaints: map[string]bool{"ignore-me": true}, + statusTaints: map[string]bool{"status-me": true}, + startupTaintPrefixes: []string{IgnoreTaintPrefix, StartupTaintPrefix}, } newTaints := SanitizeTaints(node.Spec.Taints, taintConfig) @@ -572,3 +573,102 @@ func TestSanitizeTaints(t *testing.T) { assert.Equal(t, newTaints[0].Key, StatusTaintPrefix+"some-taint") assert.Equal(t, newTaints[1].Key, "test-taint") } + +func TestCountNodeTaints(t *testing.T) { + node := &apiv1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "node-count-node-taints", + CreationTimestamp: metav1.NewTime(time.Now()), + }, + Spec: apiv1.NodeSpec{ + Taints: []apiv1.Taint{ + { + Key: IgnoreTaintPrefix + "another-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: StatusTaintPrefix + "some-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: StartupTaintPrefix + "some-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "test-taint", + Value: "test2", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: ToBeDeletedTaint, + Value: "1", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "ignore-me", + Value: "1", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "status-me", + Value: "1", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "node.kubernetes.io/memory-pressure", + Value: "1", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "ignore-taint.cluster-autoscaler.kubernetes.io/to-be-ignored", + Value: "myValue2", + Effect: apiv1.TaintEffectNoSchedule, + }, + }, + }, + Status: apiv1.NodeStatus{ + Conditions: []apiv1.NodeCondition{}, + }, + } + node2 := &apiv1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "node-count-node-taints", + CreationTimestamp: metav1.NewTime(time.Now()), + }, + Spec: apiv1.NodeSpec{ + Taints: []apiv1.Taint{ + { + Key: StatusTaintPrefix + "some-taint", + Value: "myValue", + Effect: apiv1.TaintEffectNoSchedule, + }, + { + Key: "node.kubernetes.io/unschedulable", + Value: "1", + Effect: apiv1.TaintEffectNoSchedule, + }, + }, + }, + Status: apiv1.NodeStatus{ + Conditions: []apiv1.NodeCondition{}, + }, + } + taintConfig := NewTaintConfig(config.AutoscalingOptions{ + StatusTaints: []string{"status-me"}, + StartupTaints: []string{"ignore-me"}, + }) + want := map[string]int{ + "ignore-taint.cluster-autoscaler.kubernetes.io/": 2, + "ToBeDeletedByClusterAutoscaler": 1, + "node.kubernetes.io/memory-pressure": 1, + "node.kubernetes.io/unschedulable": 1, + "other": 1, + "startup-taint": 2, + "status-taint": 3, + } + got := CountNodeTaints([]*apiv1.Node{node, node2}, taintConfig) + assert.Equal(t, want, got) +} From ddaa9f0121c707866cbaf1f325df6148beea8ab7 Mon Sep 17 00:00:00 2001 From: lisenet Date: Fri, 20 Oct 2023 14:51:44 +0100 Subject: [PATCH 115/125] Add debugging-snapshot-enabled back --- cluster-autoscaler/FAQ.md | 1 + 1 file changed, 1 insertion(+) diff --git a/cluster-autoscaler/FAQ.md b/cluster-autoscaler/FAQ.md index 5eed7388c77b..76d39fc34637 100644 --- a/cluster-autoscaler/FAQ.md +++ b/cluster-autoscaler/FAQ.md @@ -788,6 +788,7 @@ The following startup parameters are supported for cluster autoscaler: | `feature-gates` | A set of key=value pairs that describe feature gates for alpha/experimental features. | "" | `cordon-node-before-terminating` | Should CA cordon nodes before terminating during downscale process | false | `record-duplicated-events` | Enable the autoscaler to print duplicated events within a 5 minute window. | false +| `debugging-snapshot-enabled` | Whether the debugging snapshot of cluster autoscaler feature is enabled. | false | `node-delete-delay-after-taint` | How long to wait before deleting a node after tainting it. | 5 seconds # Troubleshooting: From d88664a4d818a35f689f310263e509574f22db6c Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Mon, 4 Sep 2023 22:15:14 +0530 Subject: [PATCH 116/125] Rename comments, logs, structs, and vars from packet to equinix metal --- .../cloudprovider/builder/builder_all.go | 2 +- .../cloudprovider/builder/builder_packet.go | 2 +- .../packet/packet_cloud_provider.go | 78 +++++++-------- .../cloudprovider/packet/packet_manager.go | 16 +-- .../packet/packet_manager_rest.go | 98 +++++++++---------- .../packet/packet_manager_rest_test.go | 22 ++--- .../cloudprovider/packet/packet_node_group.go | 58 +++++------ .../packet/packet_node_group_test.go | 50 +++++----- .../packet/packet_price_model.go | 8 +- .../packet/packet_price_model_test.go | 4 +- 10 files changed, 169 insertions(+), 169 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index a179c0f92e94..12d745c63a98 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -122,7 +122,7 @@ func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGro case cloudprovider.HetznerProviderName: return hetzner.BuildHetzner(opts, do, rl) case cloudprovider.PacketProviderName: - return packet.BuildPacket(opts, do, rl) + return packet.BuildEquinixMetal(opts, do, rl) case cloudprovider.ClusterAPIProviderName: return clusterapi.BuildClusterAPI(opts, do, rl) case cloudprovider.IonoscloudProviderName: diff --git a/cluster-autoscaler/cloudprovider/builder/builder_packet.go b/cluster-autoscaler/cloudprovider/builder/builder_packet.go index 403eba21d804..bdd126d40893 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_packet.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_packet.go @@ -36,7 +36,7 @@ const DefaultCloudProvider = packet.ProviderName func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { switch opts.CloudProviderName { case packet.ProviderName: - return packet.BuildPacket(opts, do, rl) + return packet.BuildEquinixMetal(opts, do, rl) } return nil diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index 79aa71aef186..bafa2fc65744 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -34,8 +34,8 @@ import ( ) const ( - // ProviderName is the cloud provider name for Packet - ProviderName = "packet" + // ProviderName is the cloud provider name for Equinix Metal + ProviderName = "equinix-metal" // GPULabel is the label added to nodes with GPU resource. GPULabel = "cloud.google.com/gke-accelerator" // DefaultControllerNodeLabelKey is the label added to Master/Controller to identify as @@ -51,45 +51,45 @@ var ( } ) -// packetCloudProvider implements CloudProvider interface from cluster-autoscaler/cloudprovider module. -type packetCloudProvider struct { - packetManager packetManager - resourceLimiter *cloudprovider.ResourceLimiter - nodeGroups []packetNodeGroup +// equinixMetalCloudProvider implements CloudProvider interface from cluster-autoscaler/cloudprovider module. +type equinixMetalCloudProvider struct { + equinixMetalManager equinixMetalManager + resourceLimiter *cloudprovider.ResourceLimiter + nodeGroups []equinixMetalNodeGroup } -func buildPacketCloudProvider(packetManager packetManager, resourceLimiter *cloudprovider.ResourceLimiter) (cloudprovider.CloudProvider, error) { - pcp := &packetCloudProvider{ - packetManager: packetManager, - resourceLimiter: resourceLimiter, - nodeGroups: []packetNodeGroup{}, +func buildEquinixMetalCloudProvider(metalManager equinixMetalManager, resourceLimiter *cloudprovider.ResourceLimiter) (cloudprovider.CloudProvider, error) { + pcp := &equinixMetalCloudProvider{ + equinixMetalManager: metalManager, + resourceLimiter: resourceLimiter, + nodeGroups: []equinixMetalNodeGroup{}, } return pcp, nil } // Name returns the name of the cloud provider. -func (pcp *packetCloudProvider) Name() string { +func (pcp *equinixMetalCloudProvider) Name() string { return ProviderName } // GPULabel returns the label added to nodes with GPU resource. -func (pcp *packetCloudProvider) GPULabel() string { +func (pcp *equinixMetalCloudProvider) GPULabel() string { return GPULabel } // GetAvailableGPUTypes return all available GPU types cloud provider supports -func (pcp *packetCloudProvider) GetAvailableGPUTypes() map[string]struct{} { +func (pcp *equinixMetalCloudProvider) GetAvailableGPUTypes() map[string]struct{} { return availableGPUTypes } // GetNodeGpuConfig returns the label, type and resource name for the GPU added to node. If node doesn't have // any GPUs, it returns nil. -func (pcp *packetCloudProvider) GetNodeGpuConfig(node *apiv1.Node) *cloudprovider.GpuConfig { +func (pcp *equinixMetalCloudProvider) GetNodeGpuConfig(node *apiv1.Node) *cloudprovider.GpuConfig { return gpu.GetNodeGPUFromCloudProvider(pcp, node) } // NodeGroups returns all node groups managed by this cloud provider. -func (pcp *packetCloudProvider) NodeGroups() []cloudprovider.NodeGroup { +func (pcp *equinixMetalCloudProvider) NodeGroups() []cloudprovider.NodeGroup { groups := make([]cloudprovider.NodeGroup, len(pcp.nodeGroups)) for i := range pcp.nodeGroups { groups[i] = &pcp.nodeGroups[i] @@ -98,14 +98,14 @@ func (pcp *packetCloudProvider) NodeGroups() []cloudprovider.NodeGroup { } // AddNodeGroup appends a node group to the list of node groups managed by this cloud provider. -func (pcp *packetCloudProvider) AddNodeGroup(group packetNodeGroup) { +func (pcp *equinixMetalCloudProvider) AddNodeGroup(group equinixMetalNodeGroup) { pcp.nodeGroups = append(pcp.nodeGroups, group) } // NodeGroupForNode returns the node group that a given node belongs to. // // Since only a single node group is currently supported, the first node group is always returned. -func (pcp *packetCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovider.NodeGroup, error) { +func (pcp *equinixMetalCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovider.NodeGroup, error) { controllerNodeLabel := os.Getenv(ControllerNodeIdentifierEnv) if controllerNodeLabel == "" { klog.V(3).Infof("env %s not set, using default: %s", ControllerNodeIdentifierEnv, DefaultControllerNodeLabelKey) @@ -115,7 +115,7 @@ func (pcp *packetCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovide if _, found := node.ObjectMeta.Labels[controllerNodeLabel]; found { return nil, nil } - nodeGroupId, err := pcp.packetManager.NodeGroupForNode(node.ObjectMeta.Labels, node.Spec.ProviderID) + nodeGroupId, err := pcp.equinixMetalManager.NodeGroupForNode(node.ObjectMeta.Labels, node.Spec.ProviderID) if err != nil { return nil, err } @@ -128,35 +128,35 @@ func (pcp *packetCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovide } // HasInstance returns whether a given node has a corresponding instance in this cloud provider -func (pcp *packetCloudProvider) HasInstance(node *apiv1.Node) (bool, error) { +func (pcp *equinixMetalCloudProvider) HasInstance(node *apiv1.Node) (bool, error) { return true, cloudprovider.ErrNotImplemented } // Pricing returns pricing model for this cloud provider or error if not available. -func (pcp *packetCloudProvider) Pricing() (cloudprovider.PricingModel, errors.AutoscalerError) { - return &PacketPriceModel{}, nil +func (pcp *equinixMetalCloudProvider) Pricing() (cloudprovider.PricingModel, errors.AutoscalerError) { + return &EquinixMetalPriceModel{}, nil } // GetAvailableMachineTypes is not implemented. -func (pcp *packetCloudProvider) GetAvailableMachineTypes() ([]string, error) { +func (pcp *equinixMetalCloudProvider) GetAvailableMachineTypes() ([]string, error) { return []string{}, nil } // NewNodeGroup is not implemented. -func (pcp *packetCloudProvider) NewNodeGroup(machineType string, labels map[string]string, systemLabels map[string]string, +func (pcp *equinixMetalCloudProvider) NewNodeGroup(machineType string, labels map[string]string, systemLabels map[string]string, taints []apiv1.Taint, extraResources map[string]resource.Quantity) (cloudprovider.NodeGroup, error) { return nil, cloudprovider.ErrNotImplemented } // GetResourceLimiter returns resource constraints for the cloud provider -func (pcp *packetCloudProvider) GetResourceLimiter() (*cloudprovider.ResourceLimiter, error) { +func (pcp *equinixMetalCloudProvider) GetResourceLimiter() (*cloudprovider.ResourceLimiter, error) { return pcp.resourceLimiter, nil } // Refresh is called before every autoscaler main loop. // // Currently only prints debug information. -func (pcp *packetCloudProvider) Refresh() error { +func (pcp *equinixMetalCloudProvider) Refresh() error { for _, nodegroup := range pcp.nodeGroups { klog.V(3).Info(nodegroup.Debug()) } @@ -164,15 +164,15 @@ func (pcp *packetCloudProvider) Refresh() error { } // Cleanup currently does nothing. -func (pcp *packetCloudProvider) Cleanup() error { +func (pcp *equinixMetalCloudProvider) Cleanup() error { return nil } -// BuildPacket is called by the autoscaler to build a packet cloud provider. +// BuildEquinixMetal is called by the autoscaler to build an Equinix Metal cloud provider. // -// The packetManager is created here, and the node groups are created +// The equinixMetalManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildPacket(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildEquinixMetal(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { @@ -184,14 +184,14 @@ func BuildPacket(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDisco defer config.Close() } - manager, err := createPacketManager(config, do, opts) + manager, err := createEquinixMetalManager(config, do, opts) if err != nil { - klog.Fatalf("Failed to create packet manager: %v", err) + klog.Fatalf("Failed to create equinix metal manager: %v", err) } - provider, err := buildPacketCloudProvider(manager, rl) + provider, err := buildEquinixMetalCloudProvider(manager, rl) if err != nil { - klog.Fatalf("Failed to create packet cloud provider: %v", err) + klog.Fatalf("Failed to create equinix metal cloud provider: %v", err) } if len(do.NodeGroupSpecs) == 0 { @@ -212,8 +212,8 @@ func BuildPacket(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDisco klog.Fatalf("Invalid nodepool name: %s\nMust be a valid kubernetes label value", spec.Name) } - ng := packetNodeGroup{ - packetManager: manager, + ng := equinixMetalNodeGroup{ + equinixMetalManager: manager, id: spec.Name, clusterUpdateMutex: &clusterUpdateLock, minSize: spec.MinSize, @@ -222,11 +222,11 @@ func BuildPacket(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDisco waitTimeStep: waitForStatusTimeStep, deleteBatchingDelay: deleteNodesBatchingDelay, } - *ng.targetSize, err = ng.packetManager.nodeGroupSize(ng.id) + *ng.targetSize, err = ng.equinixMetalManager.nodeGroupSize(ng.id) if err != nil { klog.Fatalf("Could not set current nodes in node group: %v", err) } - provider.(*packetCloudProvider).AddNodeGroup(ng) + provider.(*equinixMetalCloudProvider).AddNodeGroup(ng) } return provider diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager.go b/cluster-autoscaler/cloudprovider/packet/packet_manager.go index f5b8793b3eb9..e20ee3dfafa0 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager.go @@ -38,8 +38,8 @@ type NodeRef struct { IPs []string } -// packetManager is an interface for the basic interactions with the cluster. -type packetManager interface { +// equinixMetalManager is an interface for the basic interactions with the cluster. +type equinixMetalManager interface { nodeGroupSize(nodegroup string) (int, error) createNodes(nodegroup string, nodes int) error getNodes(nodegroup string) ([]string, error) @@ -49,20 +49,20 @@ type packetManager interface { NodeGroupForNode(labels map[string]string, nodeId string) (string, error) } -// createPacketManager creates the desired implementation of packetManager. -// Currently reads the environment variable PACKET_MANAGER to find which to create, +// createEquinixMetalManager creates the desired implementation of equinixMetalManager. +// Currently reads the environment variable EQUINIX_METAL_MANAGER to find which to create, // and falls back to a default if the variable is not found. -func createPacketManager(configReader io.Reader, discoverOpts cloudprovider.NodeGroupDiscoveryOptions, opts config.AutoscalingOptions) (packetManager, error) { +func createEquinixMetalManager(configReader io.Reader, discoverOpts cloudprovider.NodeGroupDiscoveryOptions, opts config.AutoscalingOptions) (equinixMetalManager, error) { // For now get manager from env var, can consider adding flag later - manager, ok := os.LookupEnv("PACKET_MANAGER") + manager, ok := os.LookupEnv("EQUINIX_METAL_MANAGER") if !ok { manager = defaultManager } switch manager { case "rest": - return createPacketManagerRest(configReader, discoverOpts, opts) + return createEquinixMetalManagerRest(configReader, discoverOpts, opts) } - return nil, fmt.Errorf("packet manager does not exist: %s", manager) + return nil, fmt.Errorf("equinix metal manager does not exist: %s", manager) } diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index 138410a2685f..c18674852ca0 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -146,7 +146,7 @@ var InstanceTypes = map[string]*instanceType{ }, } -type packetManagerNodePool struct { +type equinixMetalManagerNodePool struct { baseURL string clusterName string projectID string @@ -160,9 +160,9 @@ type packetManagerNodePool struct { hostnamePattern string } -type packetManagerRest struct { - authToken string - packetManagerNodePools map[string]*packetManagerNodePool +type equinixMetalManagerRest struct { + authToken string + equinixMetalManagerNodePools map[string]*equinixMetalManagerNodePool } // ConfigNodepool options only include the project-id for now @@ -185,7 +185,7 @@ type ConfigFile struct { Nodegroupdef map[string]*ConfigNodepool `gcfg:"nodegroupdef"` } -// Device represents a Packet device +// Device represents an Equinix Metal device type Device struct { ID string `json:"id"` ShortID string `json:"short_id"` @@ -195,7 +195,7 @@ type Device struct { Tags []string `json:"tags"` } -// Devices represents a list of Packet devices +// Devices represents a list of an Equinix Metal devices type Devices struct { Devices []Device `json:"devices"` } @@ -206,7 +206,7 @@ type IPAddressCreateRequest struct { Public bool `json:"public"` } -// DeviceCreateRequest represents a request to create a new Packet device. Used by createNodes +// DeviceCreateRequest represents a request to create a new Equinix Metal device. Used by createNodes type DeviceCreateRequest struct { Hostname string `json:"hostname"` Plan string `json:"plan"` @@ -271,9 +271,9 @@ func Contains(a []string, x string) bool { return false } -// createPacketManagerRest sets up the client and returns -// an packetManagerRest. -func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider.NodeGroupDiscoveryOptions, opts config.AutoscalingOptions) (*packetManagerRest, error) { +// createEquinixMetalManagerRest sets up the client and returns +// an equinixMetalManagerRest. +func createEquinixMetalManagerRest(configReader io.Reader, discoverOpts cloudprovider.NodeGroupDiscoveryOptions, opts config.AutoscalingOptions) (*equinixMetalManagerRest, error) { // Initialize ConfigFile instance cfg := ConfigFile{ DefaultNodegroupdef: ConfigNodepool{}, @@ -287,8 +287,8 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. } } - var manager packetManagerRest - manager.packetManagerNodePools = make(map[string]*packetManagerNodePool) + var manager equinixMetalManagerRest + manager.equinixMetalManagerNodePools = make(map[string]*equinixMetalManagerNodePool) if _, ok := cfg.Nodegroupdef["default"]; !ok { cfg.Nodegroupdef["default"] = &cfg.DefaultNodegroupdef @@ -298,12 +298,12 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. klog.Fatalf("No \"default\" or [Global] nodepool definition was found") } - packetAuthToken := os.Getenv("PACKET_AUTH_TOKEN") - if len(packetAuthToken) == 0 { + metalAuthToken := os.Getenv("PACKET_AUTH_TOKEN") + if len(metalAuthToken) == 0 { klog.Fatalf("PACKET_AUTH_TOKEN is required and missing") } - manager.authToken = packetAuthToken + manager.authToken = metalAuthToken for nodepool := range cfg.Nodegroupdef { if opts.ClusterName == "" && cfg.Nodegroupdef[nodepool].ClusterName == "" { @@ -312,8 +312,8 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. cfg.Nodegroupdef[nodepool].ClusterName = opts.ClusterName } - manager.packetManagerNodePools[nodepool] = &packetManagerNodePool{ - baseURL: "https://api.equinix.com/metal/v1", + manager.equinixMetalManagerNodePools[nodepool] = &equinixMetalManagerNodePool{ + baseURL: "https://api.equinix.com", clusterName: cfg.Nodegroupdef[nodepool].ClusterName, projectID: cfg.Nodegroupdef["default"].ProjectID, apiServerEndpoint: cfg.Nodegroupdef["default"].APIServerEndpoint, @@ -330,7 +330,7 @@ func createPacketManagerRest(configReader io.Reader, discoverOpts cloudprovider. return &manager, nil } -func (mgr *packetManagerRest) request(ctx context.Context, method, url string, jsonData []byte) ([]byte, error) { +func (mgr *equinixMetalManagerRest) request(ctx context.Context, method, url string, jsonData []byte) ([]byte, error) { req, err := http.NewRequestWithContext(ctx, method, url, bytes.NewBuffer(jsonData)) if err != nil { return nil, fmt.Errorf("failed to create request: %w", err) @@ -381,7 +381,7 @@ func (mgr *packetManagerRest) request(ctx context.Context, method, url string, j return nil, errorResponse } -func (mgr *packetManagerRest) listPacketDevices(ctx context.Context) (*Devices, error) { +func (mgr *equinixMetalManagerRest) listMetalDevices(ctx context.Context) (*Devices, error) { url := mgr.getNodePoolDefinition("default").baseURL + "/" + path.Join("projects", mgr.getNodePoolDefinition("default").projectID, "devices") klog.Infof("url: %v", url) @@ -398,7 +398,7 @@ func (mgr *packetManagerRest) listPacketDevices(ctx context.Context) (*Devices, return &devices, nil } -func (mgr *packetManagerRest) getPacketDevice(ctx context.Context, id string) (*Device, error) { +func (mgr *equinixMetalManagerRest) getEquinixMetalDevice(ctx context.Context, id string) (*Device, error) { url := mgr.getNodePoolDefinition("default").baseURL + "/" + path.Join("devices", id) result, err := mgr.request(ctx, "GET", url, []byte(``)) @@ -414,14 +414,14 @@ func (mgr *packetManagerRest) getPacketDevice(ctx context.Context, id string) (* return &device, nil } -func (mgr *packetManagerRest) NodeGroupForNode(labels map[string]string, nodeId string) (string, error) { +func (mgr *equinixMetalManagerRest) NodeGroupForNode(labels map[string]string, nodeId string) (string, error) { if nodegroup, ok := labels["pool"]; ok { return nodegroup, nil } trimmedNodeId := strings.TrimPrefix(nodeId, prefix) - device, err := mgr.getPacketDevice(context.TODO(), trimmedNodeId) + device, err := mgr.getEquinixMetalDevice(context.TODO(), trimmedNodeId) if err != nil { return "", fmt.Errorf("could not find group for node: %s %s", nodeId, err) } @@ -434,8 +434,8 @@ func (mgr *packetManagerRest) NodeGroupForNode(labels map[string]string, nodeId } // nodeGroupSize gets the current size of the nodegroup as reported by packet tags. -func (mgr *packetManagerRest) nodeGroupSize(nodegroup string) (int, error) { - devices, err := mgr.listPacketDevices(context.TODO()) +func (mgr *equinixMetalManagerRest) nodeGroupSize(nodegroup string) (int, error) { + devices, err := mgr.listMetalDevices(context.TODO()) if err != nil { return 0, fmt.Errorf("failed to list devices: %w", err) } @@ -462,7 +462,7 @@ func randString8() string { return string(b) } -func (mgr *packetManagerRest) createNode(ctx context.Context, cloudinit, nodegroup string) error { +func (mgr *equinixMetalManagerRest) createNode(ctx context.Context, cloudinit, nodegroup string) error { udvars := CloudInitTemplateData{ BootstrapTokenID: os.Getenv("BOOTSTRAP_TOKEN_ID"), BootstrapTokenSecret: os.Getenv("BOOTSTRAP_TOKEN_SECRET"), @@ -489,13 +489,13 @@ func (mgr *packetManagerRest) createNode(ctx context.Context, cloudinit, nodegro return fmt.Errorf("failed to create device %q in node group %q: %w", hn, nodegroup, err) } - klog.Infof("Created new node on Packet.") + klog.Infof("Created new node on Equinix Metal.") return nil } // createNodes provisions new nodes on packet and bootstraps them in the cluster. -func (mgr *packetManagerRest) createNodes(nodegroup string, nodes int) error { +func (mgr *equinixMetalManagerRest) createNodes(nodegroup string, nodes int) error { klog.Infof("Updating node count to %d for nodegroup %s", nodes, nodegroup) cloudinit, err := base64.StdEncoding.DecodeString(mgr.getNodePoolDefinition(nodegroup).cloudinit) @@ -513,7 +513,7 @@ func (mgr *packetManagerRest) createNodes(nodegroup string, nodes int) error { return utilerrors.NewAggregate(errList) } -func (mgr *packetManagerRest) createDevice(ctx context.Context, hostname, userData, nodegroup string) error { +func (mgr *equinixMetalManagerRest) createDevice(ctx context.Context, hostname, userData, nodegroup string) error { reservation := "" if mgr.getNodePoolDefinition(nodegroup).reservation == "require" || mgr.getNodePoolDefinition(nodegroup).reservation == "prefer" { reservation = "next-available" @@ -551,7 +551,7 @@ func isNoAvailableReservationsError(err error) bool { return strings.Contains(err.Error(), " no available hardware reservations ") } -func (mgr *packetManagerRest) createDeviceRequest(ctx context.Context, cr *DeviceCreateRequest, nodegroup string) error { +func (mgr *equinixMetalManagerRest) createDeviceRequest(ctx context.Context, cr *DeviceCreateRequest, nodegroup string) error { url := mgr.getNodePoolDefinition("default").baseURL + "/" + path.Join("projects", cr.ProjectID, "devices") jsonValue, err := json.Marshal(cr) @@ -571,9 +571,9 @@ func (mgr *packetManagerRest) createDeviceRequest(ctx context.Context, cr *Devic // getNodes should return ProviderIDs for all nodes in the node group, // used to find any nodes which are unregistered in kubernetes. -func (mgr *packetManagerRest) getNodes(nodegroup string) ([]string, error) { +func (mgr *equinixMetalManagerRest) getNodes(nodegroup string) ([]string, error) { // Get node ProviderIDs by getting device IDs from Packet - devices, err := mgr.listPacketDevices(context.TODO()) + devices, err := mgr.listMetalDevices(context.TODO()) if err != nil { return nil, fmt.Errorf("failed to list devices: %w", err) } @@ -591,8 +591,8 @@ func (mgr *packetManagerRest) getNodes(nodegroup string) ([]string, error) { // getNodeNames should return Names for all nodes in the node group, // used to find any nodes which are unregistered in kubernetes. -func (mgr *packetManagerRest) getNodeNames(nodegroup string) ([]string, error) { - devices, err := mgr.listPacketDevices(context.TODO()) +func (mgr *equinixMetalManagerRest) getNodeNames(nodegroup string) ([]string, error) { + devices, err := mgr.listMetalDevices(context.TODO()) if err != nil { return nil, fmt.Errorf("failed to list devices: %w", err) } @@ -608,7 +608,7 @@ func (mgr *packetManagerRest) getNodeNames(nodegroup string) ([]string, error) { return nodes, nil } -func (mgr *packetManagerRest) deleteDevice(ctx context.Context, nodegroup, id string) error { +func (mgr *equinixMetalManagerRest) deleteDevice(ctx context.Context, nodegroup, id string) error { url := mgr.getNodePoolDefinition("default").baseURL + "/" + path.Join("devices", id) result, err := mgr.request(context.TODO(), "DELETE", url, []byte("")) @@ -622,14 +622,14 @@ func (mgr *packetManagerRest) deleteDevice(ctx context.Context, nodegroup, id st } // deleteNodes deletes nodes by passing a comma separated list of names or IPs -func (mgr *packetManagerRest) deleteNodes(nodegroup string, nodes []NodeRef, updatedNodeCount int) error { +func (mgr *equinixMetalManagerRest) deleteNodes(nodegroup string, nodes []NodeRef, updatedNodeCount int) error { klog.Infof("Deleting nodes %v", nodes) ctx := context.TODO() errList := make([]error, 0, len(nodes)) - devices, err := mgr.listPacketDevices(ctx) + devices, err := mgr.listMetalDevices(ctx) if err != nil { return fmt.Errorf("failed to list devices: %w", err) } @@ -655,7 +655,7 @@ func (mgr *packetManagerRest) deleteNodes(nodegroup string, nodes []NodeRef, upd switch { case d.Hostname == n.Name: - klog.V(1).Infof("Matching Packet Device %s - %s", d.Hostname, d.ID) + klog.V(1).Infof("Matching Equinix Metal Device %s - %s", d.Hostname, d.ID) errList = append(errList, mgr.deleteDevice(ctx, nodegroup, d.ID)) case fakeNode && trimmedName == d.ID: klog.V(1).Infof("Fake Node %s", d.ID) @@ -668,7 +668,7 @@ func (mgr *packetManagerRest) deleteNodes(nodegroup string, nodes []NodeRef, upd return utilerrors.NewAggregate(errList) } -// BuildGenericLabels builds basic labels for Packet nodes +// BuildGenericLabels builds basic labels for equinix metal nodes func BuildGenericLabels(nodegroup string, instanceType string) map[string]string { result := make(map[string]string) @@ -681,9 +681,9 @@ func BuildGenericLabels(nodegroup string, instanceType string) map[string]string return result } -// templateNodeInfo returns a NodeInfo with a node template based on the packet plan +// templateNodeInfo returns a NodeInfo with a node template based on the equinix metal plan // that is used to create nodes in a given node group. -func (mgr *packetManagerRest) templateNodeInfo(nodegroup string) (*schedulerframework.NodeInfo, error) { +func (mgr *equinixMetalManagerRest) templateNodeInfo(nodegroup string) (*schedulerframework.NodeInfo, error) { node := apiv1.Node{} nodeName := fmt.Sprintf("%s-asg-%d", nodegroup, rand.Int63()) node.ObjectMeta = metav1.ObjectMeta{ @@ -695,14 +695,14 @@ func (mgr *packetManagerRest) templateNodeInfo(nodegroup string) (*schedulerfram Capacity: apiv1.ResourceList{}, } - packetPlan := InstanceTypes[mgr.getNodePoolDefinition(nodegroup).plan] - if packetPlan == nil { - return nil, fmt.Errorf("packet plan %q not supported", mgr.getNodePoolDefinition(nodegroup).plan) + equinixMetalPlan := InstanceTypes[mgr.getNodePoolDefinition(nodegroup).plan] + if equinixMetalPlan == nil { + return nil, fmt.Errorf("equinix metal plan %q not supported", mgr.getNodePoolDefinition(nodegroup).plan) } node.Status.Capacity[apiv1.ResourcePods] = *resource.NewQuantity(110, resource.DecimalSI) - node.Status.Capacity[apiv1.ResourceCPU] = *resource.NewQuantity(packetPlan.CPU, resource.DecimalSI) - node.Status.Capacity[gpu.ResourceNvidiaGPU] = *resource.NewQuantity(packetPlan.GPU, resource.DecimalSI) - node.Status.Capacity[apiv1.ResourceMemory] = *resource.NewQuantity(packetPlan.MemoryMb*1024*1024, resource.DecimalSI) + node.Status.Capacity[apiv1.ResourceCPU] = *resource.NewQuantity(equinixMetalPlan.CPU, resource.DecimalSI) + node.Status.Capacity[gpu.ResourceNvidiaGPU] = *resource.NewQuantity(equinixMetalPlan.GPU, resource.DecimalSI) + node.Status.Capacity[apiv1.ResourceMemory] = *resource.NewQuantity(equinixMetalPlan.MemoryMb*1024*1024, resource.DecimalSI) node.Status.Allocatable = node.Status.Capacity node.Status.Conditions = cloudprovider.BuildReadyConditions() @@ -715,10 +715,10 @@ func (mgr *packetManagerRest) templateNodeInfo(nodegroup string) (*schedulerfram return nodeInfo, nil } -func (mgr *packetManagerRest) getNodePoolDefinition(nodegroup string) *packetManagerNodePool { - NodePoolDefinition, ok := mgr.packetManagerNodePools[nodegroup] +func (mgr *equinixMetalManagerRest) getNodePoolDefinition(nodegroup string) *equinixMetalManagerNodePool { + NodePoolDefinition, ok := mgr.equinixMetalManagerNodePools[nodegroup] if !ok { - NodePoolDefinition, ok = mgr.packetManagerNodePools["default"] + NodePoolDefinition, ok = mgr.equinixMetalManagerNodePools["default"] if !ok { klog.Fatalf("No default cloud-config was found") } diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go index 4ca55eeb4367..fe47c22792fe 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go @@ -28,23 +28,23 @@ import ( ) // API call responses contain only the minimum information required by the cluster-autoscaler -const listPacketDevicesResponse = ` +const listMetalDevicesResponse = ` {"devices":[{"id":"cace3b27-dff8-4930-943d-b2a63a775f03","short_id":"cace3b27","hostname":"k8s-cluster2-pool3-gndxdmmw","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool3"]},{"id":"efc985f6-ba6a-4bc3-8ef4-9643b0e950a9","short_id":"efc985f6","hostname":"k8s-cluster2-master","description":null,"state":"active","tags":["k8s-cluster-cluster2"]}]} ` -const listPacketDevicesResponseAfterIncreasePool3 = ` +const listMetalDevicesResponseAfterIncreasePool3 = ` {"devices":[{"id":"8fa90049-e715-4794-ba31-81c1c78cee84","short_id":"8fa90049","hostname":"k8s-cluster2-pool3-xpnrwgdf","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool3"]},{"id":"cace3b27-dff8-4930-943d-b2a63a775f03","short_id":"cace3b27","hostname":"k8s-cluster2-pool3-gndxdmmw","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool3"]},{"id":"efc985f6-ba6a-4bc3-8ef4-9643b0e950a9","short_id":"efc985f6","hostname":"k8s-cluster2-master","description":null,"state":"active","tags":["k8s-cluster-cluster2"]}]} ` -const listPacketDevicesResponseAfterIncreasePool2 = ` +const listMetalDevicesResponseAfterIncreasePool2 = ` {"devices":[{"id":"0f5609af-1c27-451b-8edd-a1283f2c9440","short_id":"0f5609af","hostname":"k8s-cluster2-pool2-jssxcyzz","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool2"]},{"id":"8fa90049-e715-4794-ba31-81c1c78cee84","short_id":"8fa90049","hostname":"k8s-cluster2-pool3-xpnrwgdf","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool3"]},{"id":"cace3b27-dff8-4930-943d-b2a63a775f03","short_id":"cace3b27","hostname":"k8s-cluster2-pool3-gndxdmmw","description":null,"state":"active","tags":["k8s-cluster-cluster2","k8s-nodepool-pool3"]},{"id":"efc985f6-ba6a-4bc3-8ef4-9643b0e950a9","short_id":"efc985f6","hostname":"k8s-cluster2-master","description":null,"state":"active","tags":["k8s-cluster-cluster2"]}]} ` const cloudinitDefault = "IyEvYmluL2Jhc2gKZXhwb3J0IERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZQphcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbgpjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgYXB0LWtleSBhZGQgLQpjdXJsIC1zIGh0dHBzOi8vcGFja2FnZXMuY2xvdWQuZ29vZ2xlLmNvbS9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgYXB0LWtleSBhZGQgLQpjYXQgPDxFT0YgPi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2t1YmVybmV0ZXMubGlzdApkZWIgaHR0cHM6Ly9hcHQua3ViZXJuZXRlcy5pby8ga3ViZXJuZXRlcy14ZW5pYWwgbWFpbgpFT0YKYWRkLWFwdC1yZXBvc2l0b3J5ICAgImRlYiBbYXJjaD1hbWQ2NF0gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAgICQobHNiX3JlbGVhc2UgLWNzKSAgIHN0YWJsZSIKYXB0LWdldCB1cGRhdGUKYXB0LWdldCB1cGdyYWRlIC15CmFwdC1nZXQgaW5zdGFsbCAteSBrdWJlbGV0PTEuMTcuNC0wMCBrdWJlYWRtPTEuMTcuNC0wMCBrdWJlY3RsPTEuMTcuNC0wMAphcHQtbWFyayBob2xkIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsCmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBhcHQta2V5IGFkZCAtCmFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIFthcmNoPWFtZDY0XSBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1IGJpb25pYyBzdGFibGUiCmFwdCB1cGRhdGUKYXB0IGluc3RhbGwgLXkgZG9ja2VyLWNlPTE4LjA2LjJ+Y2V+My0wfnVidW50dQpjYXQgPiAvZXRjL2RvY2tlci9kYWVtb24uanNvbiA8PEVPRgp7CiAgImV4ZWMtb3B0cyI6IFsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sCiAgImxvZy1kcml2ZXIiOiAianNvbi1maWxlIiwKICAibG9nLW9wdHMiOiB7CiAgICAibWF4LXNpemUiOiAiMTAwbSIKICB9LAogICJzdG9yYWdlLWRyaXZlciI6ICJvdmVybGF5MiIKfQpFT0YKbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb2NrZXIuc2VydmljZS5kCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCnN5c3RlbWN0bCByZXN0YXJ0IGRvY2tlcgpzd2Fwb2ZmIC1hCm12IC9ldGMvZnN0YWIgL2V0Yy9mc3RhYi5vbGQgJiYgZ3JlcCAtdiBzd2FwIC9ldGMvZnN0YWIub2xkID4gL2V0Yy9mc3RhYgpjYXQgPDxFT0YgfCB0ZWUgL2V0Yy9kZWZhdWx0L2t1YmVsZXQKS1VCRUxFVF9FWFRSQV9BUkdTPS0tY2xvdWQtcHJvdmlkZXI9ZXh0ZXJuYWwgLS1ub2RlLWxhYmVscz1wb29sPXt7Lk5vZGVHcm91cH19CkVPRgprdWJlYWRtIGpvaW4gLS1kaXNjb3ZlcnktdG9rZW4tdW5zYWZlLXNraXAtY2EtdmVyaWZpY2F0aW9uIC0tdG9rZW4ge3suQm9vdHN0cmFwVG9rZW5JRH19Lnt7LkJvb3RzdHJhcFRva2VuU2VjcmV0fX0ge3suQVBJU2VydmVyRW5kcG9pbnR9fQo=" -func newTestPacketManagerRest(t *testing.T, url string) *packetManagerRest { - manager := &packetManagerRest{ - packetManagerNodePools: map[string]*packetManagerNodePool{ +func newTestPacketManagerRest(t *testing.T, url string) *equinixMetalManagerRest { + manager := &equinixMetalManagerRest{ + equinixMetalManagerNodePools: map[string]*equinixMetalManagerNodePool{ "default": { baseURL: url, clusterName: "cluster2", @@ -75,8 +75,8 @@ func newTestPacketManagerRest(t *testing.T, url string) *packetManagerRest { } return manager } -func TestListPacketDevices(t *testing.T) { - var m *packetManagerRest +func TestListMetalDevices(t *testing.T) { + var m *equinixMetalManagerRest server := NewHttpServerMock(MockFieldContentType, MockFieldResponse) defer server.Close() if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { @@ -86,11 +86,11 @@ func TestListPacketDevices(t *testing.T) { // Set up a mock Packet API m = newTestPacketManagerRest(t, server.URL) t.Logf("server URL: %v", server.URL) - t.Logf("default packetManagerNodePool baseURL: %v", m.packetManagerNodePools["default"].baseURL) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponse).Times(2) + t.Logf("default equinixMetalManagerNodePool baseURL: %v", m.equinixMetalManagerNodePools["default"].baseURL) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponse).Times(2) } - _, err := m.listPacketDevices(context.TODO()) + _, err := m.listMetalDevices(context.TODO()) assert.NoError(t, err) c, err := m.nodeGroupSize("pool3") diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group.go index 863e7d86afa9..f4f7b32f23ad 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group.go @@ -28,14 +28,14 @@ import ( schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" ) -// packetNodeGroup implements NodeGroup interface from cluster-autoscaler/cloudprovider. +// equinixMetalNodeGroup implements NodeGroup interface from cluster-autoscaler/cloudprovider. // // Represents a homogeneous collection of nodes within a cluster, // which can be dynamically resized between a minimum and maximum // number of nodes. -type packetNodeGroup struct { - packetManager packetManager - id string +type equinixMetalNodeGroup struct { + equinixMetalManager equinixMetalManager + id string clusterUpdateMutex *sync.Mutex @@ -70,7 +70,7 @@ const ( // // Takes precautions so that the cluster is not modified while in an UPDATE_IN_PROGRESS state. // Blocks until the cluster has reached UPDATE_COMPLETE. -func (ng *packetNodeGroup) IncreaseSize(delta int) error { +func (ng *equinixMetalNodeGroup) IncreaseSize(delta int) error { ng.clusterUpdateMutex.Lock() defer ng.clusterUpdateMutex.Unlock() @@ -78,7 +78,7 @@ func (ng *packetNodeGroup) IncreaseSize(delta int) error { return fmt.Errorf("size increase must be positive") } - size, err := ng.packetManager.nodeGroupSize(ng.id) + size, err := ng.equinixMetalManager.nodeGroupSize(ng.id) if err != nil { return fmt.Errorf("could not check current nodegroup size: %v", err) } @@ -89,7 +89,7 @@ func (ng *packetNodeGroup) IncreaseSize(delta int) error { klog.V(0).Infof("Increasing size by %d, %d->%d", delta, *ng.targetSize, *ng.targetSize+delta) *ng.targetSize += delta - err = ng.packetManager.createNodes(ng.id, delta) + err = ng.equinixMetalManager.createNodes(ng.id, delta) if err != nil { return fmt.Errorf("could not increase cluster size: %v", err) } @@ -99,12 +99,12 @@ func (ng *packetNodeGroup) IncreaseSize(delta int) error { // deleteNodes deletes a set of nodes chosen by the autoscaler. // -// The process of deletion depends on the implementation of packetManager, +// The process of deletion depends on the implementation of equinixMetalManager, // but this function handles what should be common between all implementations: // - simultaneous but separate calls from the autoscaler are batched together // - does not allow scaling while the cluster is already in an UPDATE_IN_PROGRESS state // - after scaling down, blocks until the cluster has reached UPDATE_COMPLETE -func (ng *packetNodeGroup) DeleteNodes(nodes []*apiv1.Node) error { +func (ng *equinixMetalNodeGroup) DeleteNodes(nodes []*apiv1.Node) error { klog.V(1).Infof("Locking nodesToDeleteMutex") // Batch simultaneous deletes on individual nodes @@ -117,7 +117,7 @@ func (ng *packetNodeGroup) DeleteNodes(nodes []*apiv1.Node) error { var cachedSize int var err error if time.Since(ng.deleteNodesCachedSizeAt) > time.Second*10 { - cachedSize, err = ng.packetManager.nodeGroupSize(ng.id) + cachedSize, err = ng.equinixMetalManager.nodeGroupSize(ng.id) if err != nil { ng.nodesToDeleteMutex.Unlock() klog.V(1).Infof("UnLocking nodesToDeleteMutex") @@ -204,13 +204,13 @@ func (ng *packetNodeGroup) DeleteNodes(nodes []*apiv1.Node) error { }) } - err = ng.packetManager.deleteNodes(ng.id, nodeRefs, cachedSize-len(nodes)) + err = ng.equinixMetalManager.deleteNodes(ng.id, nodeRefs, cachedSize-len(nodes)) if err != nil { return fmt.Errorf("manager error deleting nodes: %v", err) } // Check the new node group size and store that as the new target - newSize, err := ng.packetManager.nodeGroupSize(ng.id) + newSize, err := ng.equinixMetalManager.nodeGroupSize(ng.id) if err != nil { // Set to the expected size as a fallback *ng.targetSize = cachedSize - len(nodes) @@ -221,29 +221,29 @@ func (ng *packetNodeGroup) DeleteNodes(nodes []*apiv1.Node) error { return nil } -// DecreaseTargetSize decreases the cluster node_count in packet. -func (ng *packetNodeGroup) DecreaseTargetSize(delta int) error { +// DecreaseTargetSize decreases the cluster node_count in Equinix Metal. +func (ng *equinixMetalNodeGroup) DecreaseTargetSize(delta int) error { if delta >= 0 { return fmt.Errorf("size decrease must be negative") } klog.V(0).Infof("Decreasing target size by %d, %d->%d", delta, *ng.targetSize, *ng.targetSize+delta) *ng.targetSize += delta - return fmt.Errorf("could not decrease target size") /*ng.packetManager.updateNodeCount(ng.id, *ng.targetSize)*/ + return fmt.Errorf("could not decrease target size") /*ng.equinixMetalManager.updateNodeCount(ng.id, *ng.targetSize)*/ } // Id returns the node group ID -func (ng *packetNodeGroup) Id() string { +func (ng *equinixMetalNodeGroup) Id() string { return ng.id } // Debug returns a string formatted with the node group's min, max and target sizes. -func (ng *packetNodeGroup) Debug() string { +func (ng *equinixMetalNodeGroup) Debug() string { return fmt.Sprintf("%s min=%d max=%d target=%d", ng.id, ng.minSize, ng.maxSize, *ng.targetSize) } // Nodes returns a list of nodes that belong to this node group. -func (ng *packetNodeGroup) Nodes() ([]cloudprovider.Instance, error) { - nodes, err := ng.packetManager.getNodes(ng.id) +func (ng *equinixMetalNodeGroup) Nodes() ([]cloudprovider.Instance, error) { + nodes, err := ng.equinixMetalManager.getNodes(ng.id) if err != nil { return nil, fmt.Errorf("could not get nodes: %v", err) } @@ -255,48 +255,48 @@ func (ng *packetNodeGroup) Nodes() ([]cloudprovider.Instance, error) { } // TemplateNodeInfo returns a node template for this node group. -func (ng *packetNodeGroup) TemplateNodeInfo() (*schedulerframework.NodeInfo, error) { - return ng.packetManager.templateNodeInfo(ng.id) +func (ng *equinixMetalNodeGroup) TemplateNodeInfo() (*schedulerframework.NodeInfo, error) { + return ng.equinixMetalManager.templateNodeInfo(ng.id) } // Exist returns if this node group exists. // Currently always returns true. -func (ng *packetNodeGroup) Exist() bool { +func (ng *equinixMetalNodeGroup) Exist() bool { return true } // Create creates the node group on the cloud provider side. -func (ng *packetNodeGroup) Create() (cloudprovider.NodeGroup, error) { +func (ng *equinixMetalNodeGroup) Create() (cloudprovider.NodeGroup, error) { return nil, cloudprovider.ErrAlreadyExist } // Delete deletes the node group on the cloud provider side. -func (ng *packetNodeGroup) Delete() error { +func (ng *equinixMetalNodeGroup) Delete() error { return cloudprovider.ErrNotImplemented } // Autoprovisioned returns if the nodegroup is autoprovisioned. -func (ng *packetNodeGroup) Autoprovisioned() bool { +func (ng *equinixMetalNodeGroup) Autoprovisioned() bool { return false } // MaxSize returns the maximum allowed size of the node group. -func (ng *packetNodeGroup) MaxSize() int { +func (ng *equinixMetalNodeGroup) MaxSize() int { return ng.maxSize } // MinSize returns the minimum allowed size of the node group. -func (ng *packetNodeGroup) MinSize() int { +func (ng *equinixMetalNodeGroup) MinSize() int { return ng.minSize } // TargetSize returns the target size of the node group. -func (ng *packetNodeGroup) TargetSize() (int, error) { +func (ng *equinixMetalNodeGroup) TargetSize() (int, error) { return *ng.targetSize, nil } // GetOptions returns NodeGroupAutoscalingOptions that should be used for this particular // NodeGroup. Returning a nil will result in using default options. -func (ng *packetNodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*config.NodeGroupAutoscalingOptions, error) { +func (ng *equinixMetalNodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*config.NodeGroupAutoscalingOptions, error) { return nil, cloudprovider.ErrNotImplemented } diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go index e2aee3d12c74..50c5f5041277 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go @@ -29,36 +29,36 @@ import ( "github.com/stretchr/testify/mock" ) -const createPacketDeviceResponsePool2 = `` -const deletePacketDeviceResponsePool2 = `` +const createMetalDeviceResponsePool2 = `` +const deleteMetalDeviceResponsePool2 = `` -const createPacketDeviceResponsePool3 = `` -const deletePacketDeviceResponsePool3 = `` +const createMetalDeviceResponsePool3 = `` +const deleteMetalDeviceResponsePool3 = `` func TestIncreaseDecreaseSize(t *testing.T) { - var m *packetManagerRest + var m *equinixMetalManagerRest server := NewHttpServerMock(MockFieldContentType, MockFieldResponse) defer server.Close() assert.Equal(t, true, true) if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestPacketManagerRest(t, "https://api.packet.net") + m = newTestPacketManagerRest(t, "https://api.equinix.com") } else { // Set up a mock Packet API m = newTestPacketManagerRest(t, server.URL) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponse).Times(3) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", createPacketDeviceResponsePool3).Times(1) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponseAfterIncreasePool3).Times(2) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", createPacketDeviceResponsePool2).Times(1) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponseAfterIncreasePool2).Times(3) - server.On("handle", "/devices/0f5609af-1c27-451b-8edd-a1283f2c9440").Return("application/json", deletePacketDeviceResponsePool2).Times(1) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponseAfterIncreasePool3).Times(3) - server.On("handle", "/devices/8fa90049-e715-4794-ba31-81c1c78cee84").Return("application/json", deletePacketDeviceResponsePool3).Times(1) - server.On("handle", "/projects/"+m.packetManagerNodePools["default"].projectID+"/devices").Return("application/json", listPacketDevicesResponse).Times(3) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponse).Times(3) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", createMetalDeviceResponsePool3).Times(1) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponseAfterIncreasePool3).Times(2) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", createMetalDeviceResponsePool2).Times(1) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponseAfterIncreasePool2).Times(3) + server.On("handle", "/devices/0f5609af-1c27-451b-8edd-a1283f2c9440").Return("application/json", deleteMetalDeviceResponsePool2).Times(1) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponseAfterIncreasePool3).Times(3) + server.On("handle", "/devices/8fa90049-e715-4794-ba31-81c1c78cee84").Return("application/json", deleteMetalDeviceResponsePool3).Times(1) + server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponse).Times(3) } clusterUpdateLock := sync.Mutex{} - ngPool2 := &packetNodeGroup{ - packetManager: m, + ngPool2 := &equinixMetalNodeGroup{ + equinixMetalManager: m, id: "pool2", clusterUpdateMutex: &clusterUpdateLock, minSize: 0, @@ -68,8 +68,8 @@ func TestIncreaseDecreaseSize(t *testing.T) { deleteBatchingDelay: 2 * time.Second, } - ngPool3 := &packetNodeGroup{ - packetManager: m, + ngPool3 := &equinixMetalNodeGroup{ + equinixMetalManager: m, id: "pool3", clusterUpdateMutex: &clusterUpdateLock, minSize: 0, @@ -79,11 +79,11 @@ func TestIncreaseDecreaseSize(t *testing.T) { deleteBatchingDelay: 2 * time.Second, } - n1Pool2, err := ngPool2.packetManager.getNodeNames(ngPool2.id) + n1Pool2, err := ngPool2.equinixMetalManager.getNodeNames(ngPool2.id) assert.NoError(t, err) assert.Equal(t, int(0), len(n1Pool2)) - n1Pool3, err := ngPool3.packetManager.getNodeNames(ngPool3.id) + n1Pool3, err := ngPool3.equinixMetalManager.getNodeNames(ngPool3.id) assert.NoError(t, err) assert.Equal(t, int(1), len(n1Pool3)) @@ -111,7 +111,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { time.Sleep(420 * time.Second) } - n2Pool3, err := ngPool3.packetManager.getNodeNames(ngPool3.id) + n2Pool3, err := ngPool3.equinixMetalManager.getNodeNames(ngPool3.id) assert.NoError(t, err) // Assert that the nodepool3 size is now 2 assert.Equal(t, int(2), len(n2Pool3)) @@ -125,7 +125,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { time.Sleep(420 * time.Second) } - n2Pool2, err := ngPool2.packetManager.getNodeNames(ngPool2.id) + n2Pool2, err := ngPool2.equinixMetalManager.getNodeNames(ngPool2.id) assert.NoError(t, err) // Assert that the nodepool2 size is now 1 assert.Equal(t, int(1), len(n2Pool2)) @@ -156,12 +156,12 @@ func TestIncreaseDecreaseSize(t *testing.T) { } // Make sure that there were no errors and the nodepool2 size is once again 0 - n3Pool2, err := ngPool2.packetManager.getNodeNames(ngPool2.id) + n3Pool2, err := ngPool2.equinixMetalManager.getNodeNames(ngPool2.id) assert.NoError(t, err) assert.Equal(t, int(0), len(n3Pool2)) // Make sure that there were no errors and the nodepool3 size is once again 1 - n3Pool3, err := ngPool3.packetManager.getNodeNames(ngPool3.id) + n3Pool3, err := ngPool3.equinixMetalManager.getNodeNames(ngPool3.id) assert.NoError(t, err) assert.Equal(t, int(1), len(n3Pool3)) mock.AssertExpectationsForObjects(t, server) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go index a1617eff768d..9cbb05b4c7d5 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go @@ -24,8 +24,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/units" ) -// PacketPriceModel implements PriceModel interface for Packet. -type PacketPriceModel struct { +// EquinixMetalPriceModel implements PriceModel interface for Equinix Metal. +type EquinixMetalPriceModel struct { } const ( @@ -52,7 +52,7 @@ var instancePrices = map[string]float64{ // NodePrice returns a price of running the given node for a given period of time. // All prices are in USD. -func (model *PacketPriceModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { +func (model *EquinixMetalPriceModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 if node.Labels != nil { if machineType, found := node.Labels[apiv1.LabelInstanceType]; found { @@ -72,7 +72,7 @@ func getHours(startTime time.Time, endTime time.Time) float64 { // PodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. -func (model *PacketPriceModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { +func (model *EquinixMetalPriceModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 for _, container := range pod.Spec.Containers { price += getBasePrice(container.Resources.Requests, startTime, endTime) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go index f35c1a7e1568..9dbd1aa31e8a 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go @@ -34,7 +34,7 @@ func TestGetNodePrice(t *testing.T) { labelsPool2 := BuildGenericLabels("pool2", "c3.medium.x86") plan2 := InstanceTypes["c3.medium.x86"] - model := &PacketPriceModel{} + model := &EquinixMetalPriceModel{} now := time.Now() node1 := BuildTestNode("node1", plan1.CPU*1000, plan1.MemoryMb*1024*1024) @@ -55,7 +55,7 @@ func TestGetPodPrice(t *testing.T) { pod1 := BuildTestPod("pod1", 100, 500*units.MiB) pod2 := BuildTestPod("pod2", 2*100, 2*500*units.MiB) - model := &PacketPriceModel{} + model := &EquinixMetalPriceModel{} now := time.Now() price1, err := model.PodPrice(pod1, now, now.Add(time.Hour)) From 4c75ceda4c8bdc954fb6eac9ad67fb59e92d054c Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Mon, 18 Sep 2023 21:59:51 +0530 Subject: [PATCH 117/125] Rename types --- cluster-autoscaler/cloudprovider/builder/builder_all.go | 2 +- .../cloudprovider/builder/builder_packet.go | 2 +- .../cloudprovider/packet/packet_cloud_provider.go | 6 +++--- .../cloudprovider/packet/packet_price_model.go | 8 ++++---- .../cloudprovider/packet/packet_price_model_test.go | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index 12d745c63a98..30e775c41465 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -122,7 +122,7 @@ func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGro case cloudprovider.HetznerProviderName: return hetzner.BuildHetzner(opts, do, rl) case cloudprovider.PacketProviderName: - return packet.BuildEquinixMetal(opts, do, rl) + return packet.BuildCloudProvider(opts, do, rl) case cloudprovider.ClusterAPIProviderName: return clusterapi.BuildClusterAPI(opts, do, rl) case cloudprovider.IonoscloudProviderName: diff --git a/cluster-autoscaler/cloudprovider/builder/builder_packet.go b/cluster-autoscaler/cloudprovider/builder/builder_packet.go index bdd126d40893..9d63d4cf2cec 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_packet.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_packet.go @@ -36,7 +36,7 @@ const DefaultCloudProvider = packet.ProviderName func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { switch opts.CloudProviderName { case packet.ProviderName: - return packet.BuildEquinixMetal(opts, do, rl) + return packet.BuildCloudProvider(opts, do, rl) } return nil diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index bafa2fc65744..d7f8940130df 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -134,7 +134,7 @@ func (pcp *equinixMetalCloudProvider) HasInstance(node *apiv1.Node) (bool, error // Pricing returns pricing model for this cloud provider or error if not available. func (pcp *equinixMetalCloudProvider) Pricing() (cloudprovider.PricingModel, errors.AutoscalerError) { - return &EquinixMetalPriceModel{}, nil + return &PriceModel{}, nil } // GetAvailableMachineTypes is not implemented. @@ -168,11 +168,11 @@ func (pcp *equinixMetalCloudProvider) Cleanup() error { return nil } -// BuildEquinixMetal is called by the autoscaler to build an Equinix Metal cloud provider. +// BuildCloudProvider is called by the autoscaler to build an Equinix Metal cloud provider. // // The equinixMetalManager is created here, and the node groups are created // based on the specs provided via the command line parameters. -func BuildEquinixMetal(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { +func BuildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { var config io.ReadCloser if opts.CloudConfig != "" { diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go index 9cbb05b4c7d5..7b75846e570b 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go @@ -24,8 +24,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/units" ) -// EquinixMetalPriceModel implements PriceModel interface for Equinix Metal. -type EquinixMetalPriceModel struct { +// PriceModel implements PriceModel interface for Equinix Metal. +type PriceModel struct { } const ( @@ -52,7 +52,7 @@ var instancePrices = map[string]float64{ // NodePrice returns a price of running the given node for a given period of time. // All prices are in USD. -func (model *EquinixMetalPriceModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { +func (model *PriceModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 if node.Labels != nil { if machineType, found := node.Labels[apiv1.LabelInstanceType]; found { @@ -72,7 +72,7 @@ func getHours(startTime time.Time, endTime time.Time) float64 { // PodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. -func (model *EquinixMetalPriceModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { +func (model *PriceModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 for _, container := range pod.Spec.Containers { price += getBasePrice(container.Resources.Requests, startTime, endTime) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go index 9dbd1aa31e8a..9b020f5ae483 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go @@ -34,7 +34,7 @@ func TestGetNodePrice(t *testing.T) { labelsPool2 := BuildGenericLabels("pool2", "c3.medium.x86") plan2 := InstanceTypes["c3.medium.x86"] - model := &EquinixMetalPriceModel{} + model := &PriceModel{} now := time.Now() node1 := BuildTestNode("node1", plan1.CPU*1000, plan1.MemoryMb*1024*1024) @@ -55,7 +55,7 @@ func TestGetPodPrice(t *testing.T) { pod1 := BuildTestPod("pod1", 100, 500*units.MiB) pod2 := BuildTestPod("pod2", 2*100, 2*500*units.MiB) - model := &EquinixMetalPriceModel{} + model := &PriceModel{} now := time.Now() price1, err := model.PodPrice(pod1, now, now.Add(time.Hour)) From 1ec0667b2aabc03e219bd6459e49a63465faf339 Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Thu, 21 Sep 2023 20:26:33 +0530 Subject: [PATCH 118/125] fix: provider name to be used in builder to provide backward compatibility Signed-off-by: Ayush Rangwala --- cluster-autoscaler/cloudprovider/builder/builder_all.go | 3 ++- .../cloudprovider/builder/builder_packet.go | 5 ++++- cluster-autoscaler/cloudprovider/cloud_provider.go | 2 ++ .../cloudprovider/packet/packet_cloud_provider.go | 7 ++++--- .../cloudprovider/packet/packet_manager_rest.go | 2 +- .../cloudprovider/packet/packet_node_group_test.go | 2 +- .../cloudprovider/packet/packet_price_model.go | 8 ++++---- .../cloudprovider/packet/packet_price_model_test.go | 4 ++-- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index 30e775c41465..dfcd001ba55f 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -121,7 +121,8 @@ func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGro return ovhcloud.BuildOVHcloud(opts, do, rl) case cloudprovider.HetznerProviderName: return hetzner.BuildHetzner(opts, do, rl) - case cloudprovider.PacketProviderName: + case cloudprovider.PacketProviderName, + cloudprovider.EquinixMetalProviderName: return packet.BuildCloudProvider(opts, do, rl) case cloudprovider.ClusterAPIProviderName: return clusterapi.BuildClusterAPI(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_packet.go b/cluster-autoscaler/cloudprovider/builder/builder_packet.go index 9d63d4cf2cec..3b15a997e033 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_packet.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_packet.go @@ -28,15 +28,18 @@ import ( // AvailableCloudProviders supported by the cloud provider builder. var AvailableCloudProviders = []string{ packet.ProviderName, + packet.EquinixMetalProviderName, } // DefaultCloudProvider for Packet-only build is Packet. -const DefaultCloudProvider = packet.ProviderName +const DefaultCloudProvider = packet.EquinixMetalProviderName func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { switch opts.CloudProviderName { case packet.ProviderName: return packet.BuildCloudProvider(opts, do, rl) + case packet.EquinixMetalProviderName: + return packet.BuildCloudProvider(opts, do, rl) } return nil diff --git a/cluster-autoscaler/cloudprovider/cloud_provider.go b/cluster-autoscaler/cloudprovider/cloud_provider.go index 94f0273ec365..5423dcf60d2f 100644 --- a/cluster-autoscaler/cloudprovider/cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/cloud_provider.go @@ -78,6 +78,8 @@ const ( VultrProviderName = "vultr" // PacketProviderName gets the provider name of packet PacketProviderName = "packet" + // EquinixMetalProviderName gets the provider name of packet + EquinixMetalProviderName = "equinixmetal" // TencentcloudProviderName gets the provider name of tencentcloud TencentcloudProviderName = "tencentcloud" // ExternalGrpcProviderName gets the provider name of the external grpc provider diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index d7f8940130df..7e5a666a0a5c 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -35,7 +35,8 @@ import ( const ( // ProviderName is the cloud provider name for Equinix Metal - ProviderName = "equinix-metal" + ProviderName = "packet" + EquinixMetalProviderName = "packet" // GPULabel is the label added to nodes with GPU resource. GPULabel = "cloud.google.com/gke-accelerator" // DefaultControllerNodeLabelKey is the label added to Master/Controller to identify as @@ -69,7 +70,7 @@ func buildEquinixMetalCloudProvider(metalManager equinixMetalManager, resourceLi // Name returns the name of the cloud provider. func (pcp *equinixMetalCloudProvider) Name() string { - return ProviderName + return EquinixMetalProviderName } // GPULabel returns the label added to nodes with GPU resource. @@ -134,7 +135,7 @@ func (pcp *equinixMetalCloudProvider) HasInstance(node *apiv1.Node) (bool, error // Pricing returns pricing model for this cloud provider or error if not available. func (pcp *equinixMetalCloudProvider) Pricing() (cloudprovider.PricingModel, errors.AutoscalerError) { - return &PriceModel{}, nil + return &Price{}, nil } // GetAvailableMachineTypes is not implemented. diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index c18674852ca0..9500c309064c 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -313,7 +313,7 @@ func createEquinixMetalManagerRest(configReader io.Reader, discoverOpts cloudpro } manager.equinixMetalManagerNodePools[nodepool] = &equinixMetalManagerNodePool{ - baseURL: "https://api.equinix.com", + baseURL: "https://api.equinix.com/metal/v1", clusterName: cfg.Nodegroupdef[nodepool].ClusterName, projectID: cfg.Nodegroupdef["default"].ProjectID, apiServerEndpoint: cfg.Nodegroupdef["default"].APIServerEndpoint, diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go index 50c5f5041277..a3a1ea07abbd 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go @@ -42,7 +42,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { assert.Equal(t, true, true) if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestPacketManagerRest(t, "https://api.equinix.com") + m = newTestPacketManagerRest(t, "https://api.equinix.com/metal/v1") } else { // Set up a mock Packet API m = newTestPacketManagerRest(t, server.URL) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go index 7b75846e570b..e01b45257958 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model.go @@ -24,8 +24,8 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/utils/units" ) -// PriceModel implements PriceModel interface for Equinix Metal. -type PriceModel struct { +// Price implements Price interface for Equinix Metal. +type Price struct { } const ( @@ -52,7 +52,7 @@ var instancePrices = map[string]float64{ // NodePrice returns a price of running the given node for a given period of time. // All prices are in USD. -func (model *PriceModel) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { +func (model *Price) NodePrice(node *apiv1.Node, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 if node.Labels != nil { if machineType, found := node.Labels[apiv1.LabelInstanceType]; found { @@ -72,7 +72,7 @@ func getHours(startTime time.Time, endTime time.Time) float64 { // PodPrice returns a theoretical minimum price of running a pod for a given // period of time on a perfectly matching machine. -func (model *PriceModel) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { +func (model *Price) PodPrice(pod *apiv1.Pod, startTime time.Time, endTime time.Time) (float64, error) { price := 0.0 for _, container := range pod.Spec.Containers { price += getBasePrice(container.Resources.Requests, startTime, endTime) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go index 9b020f5ae483..e604db1095b2 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_price_model_test.go @@ -34,7 +34,7 @@ func TestGetNodePrice(t *testing.T) { labelsPool2 := BuildGenericLabels("pool2", "c3.medium.x86") plan2 := InstanceTypes["c3.medium.x86"] - model := &PriceModel{} + model := &Price{} now := time.Now() node1 := BuildTestNode("node1", plan1.CPU*1000, plan1.MemoryMb*1024*1024) @@ -55,7 +55,7 @@ func TestGetPodPrice(t *testing.T) { pod1 := BuildTestPod("pod1", 100, 500*units.MiB) pod2 := BuildTestPod("pod2", 2*100, 2*500*units.MiB) - model := &PriceModel{} + model := &Price{} now := time.Now() price1, err := model.PodPrice(pod1, now, now.Add(time.Hour)) From e4a474740fe4e5b97f9e2637f5791c3a605d3fb9 Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Mon, 4 Sep 2023 22:15:14 +0530 Subject: [PATCH 119/125] Rename comments, logs, structs, and vars from packet to equinix metal --- cluster-autoscaler/cloudprovider/builder/builder_packet.go | 5 ++--- .../cloudprovider/packet/packet_cloud_provider.go | 5 ++--- .../cloudprovider/packet/packet_manager_rest_test.go | 6 +++--- .../cloudprovider/packet/packet_node_group_test.go | 4 ++-- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_packet.go b/cluster-autoscaler/cloudprovider/builder/builder_packet.go index 3b15a997e033..bd7bb3c2e542 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_packet.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_packet.go @@ -36,9 +36,8 @@ const DefaultCloudProvider = packet.EquinixMetalProviderName func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { switch opts.CloudProviderName { - case packet.ProviderName: - return packet.BuildCloudProvider(opts, do, rl) - case packet.EquinixMetalProviderName: + case packet.ProviderName, + packet.EquinixMetalProviderName: return packet.BuildCloudProvider(opts, do, rl) } diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index 7e5a666a0a5c..8cdb4abd9b8c 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -35,8 +35,7 @@ import ( const ( // ProviderName is the cloud provider name for Equinix Metal - ProviderName = "packet" - EquinixMetalProviderName = "packet" + ProviderName = "equinix-metal" // GPULabel is the label added to nodes with GPU resource. GPULabel = "cloud.google.com/gke-accelerator" // DefaultControllerNodeLabelKey is the label added to Master/Controller to identify as @@ -70,7 +69,7 @@ func buildEquinixMetalCloudProvider(metalManager equinixMetalManager, resourceLi // Name returns the name of the cloud provider. func (pcp *equinixMetalCloudProvider) Name() string { - return EquinixMetalProviderName + return ProviderName } // GPULabel returns the label added to nodes with GPU resource. diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go index fe47c22792fe..a0c3ae1c52a1 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go @@ -42,7 +42,7 @@ const listMetalDevicesResponseAfterIncreasePool2 = ` const cloudinitDefault = "IyEvYmluL2Jhc2gKZXhwb3J0IERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZQphcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbgpjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgYXB0LWtleSBhZGQgLQpjdXJsIC1zIGh0dHBzOi8vcGFja2FnZXMuY2xvdWQuZ29vZ2xlLmNvbS9hcHQvZG9jL2FwdC1rZXkuZ3BnIHwgYXB0LWtleSBhZGQgLQpjYXQgPDxFT0YgPi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2t1YmVybmV0ZXMubGlzdApkZWIgaHR0cHM6Ly9hcHQua3ViZXJuZXRlcy5pby8ga3ViZXJuZXRlcy14ZW5pYWwgbWFpbgpFT0YKYWRkLWFwdC1yZXBvc2l0b3J5ICAgImRlYiBbYXJjaD1hbWQ2NF0gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAgICQobHNiX3JlbGVhc2UgLWNzKSAgIHN0YWJsZSIKYXB0LWdldCB1cGRhdGUKYXB0LWdldCB1cGdyYWRlIC15CmFwdC1nZXQgaW5zdGFsbCAteSBrdWJlbGV0PTEuMTcuNC0wMCBrdWJlYWRtPTEuMTcuNC0wMCBrdWJlY3RsPTEuMTcuNC0wMAphcHQtbWFyayBob2xkIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsCmN1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBhcHQta2V5IGFkZCAtCmFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIFthcmNoPWFtZDY0XSBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1IGJpb25pYyBzdGFibGUiCmFwdCB1cGRhdGUKYXB0IGluc3RhbGwgLXkgZG9ja2VyLWNlPTE4LjA2LjJ+Y2V+My0wfnVidW50dQpjYXQgPiAvZXRjL2RvY2tlci9kYWVtb24uanNvbiA8PEVPRgp7CiAgImV4ZWMtb3B0cyI6IFsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sCiAgImxvZy1kcml2ZXIiOiAianNvbi1maWxlIiwKICAibG9nLW9wdHMiOiB7CiAgICAibWF4LXNpemUiOiAiMTAwbSIKICB9LAogICJzdG9yYWdlLWRyaXZlciI6ICJvdmVybGF5MiIKfQpFT0YKbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb2NrZXIuc2VydmljZS5kCnN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCnN5c3RlbWN0bCByZXN0YXJ0IGRvY2tlcgpzd2Fwb2ZmIC1hCm12IC9ldGMvZnN0YWIgL2V0Yy9mc3RhYi5vbGQgJiYgZ3JlcCAtdiBzd2FwIC9ldGMvZnN0YWIub2xkID4gL2V0Yy9mc3RhYgpjYXQgPDxFT0YgfCB0ZWUgL2V0Yy9kZWZhdWx0L2t1YmVsZXQKS1VCRUxFVF9FWFRSQV9BUkdTPS0tY2xvdWQtcHJvdmlkZXI9ZXh0ZXJuYWwgLS1ub2RlLWxhYmVscz1wb29sPXt7Lk5vZGVHcm91cH19CkVPRgprdWJlYWRtIGpvaW4gLS1kaXNjb3ZlcnktdG9rZW4tdW5zYWZlLXNraXAtY2EtdmVyaWZpY2F0aW9uIC0tdG9rZW4ge3suQm9vdHN0cmFwVG9rZW5JRH19Lnt7LkJvb3RzdHJhcFRva2VuU2VjcmV0fX0ge3suQVBJU2VydmVyRW5kcG9pbnR9fQo=" -func newTestPacketManagerRest(t *testing.T, url string) *equinixMetalManagerRest { +func newTestMetalManagerRest(t *testing.T, url string) *equinixMetalManagerRest { manager := &equinixMetalManagerRest{ equinixMetalManagerNodePools: map[string]*equinixMetalManagerNodePool{ "default": { @@ -81,10 +81,10 @@ func TestListMetalDevices(t *testing.T) { defer server.Close() if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestPacketManagerRest(t, "https://api.equinix.com/metal/v1/") + m = newTestMetalManagerRest(t, "https://api.equinix.com/metal/v1/") } else { // Set up a mock Packet API - m = newTestPacketManagerRest(t, server.URL) + m = newTestMetalManagerRest(t, server.URL) t.Logf("server URL: %v", server.URL) t.Logf("default equinixMetalManagerNodePool baseURL: %v", m.equinixMetalManagerNodePools["default"].baseURL) server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponse).Times(2) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go index a3a1ea07abbd..b32ba9d6f772 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go @@ -42,10 +42,10 @@ func TestIncreaseDecreaseSize(t *testing.T) { assert.Equal(t, true, true) if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestPacketManagerRest(t, "https://api.equinix.com/metal/v1") + m = newTestMetalManagerRest(t, "https://api.equinix.com") } else { // Set up a mock Packet API - m = newTestPacketManagerRest(t, server.URL) + m = newTestMetalManagerRest(t, server.URL) server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponse).Times(3) server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", createMetalDeviceResponsePool3).Times(1) server.On("handle", "/projects/"+m.equinixMetalManagerNodePools["default"].projectID+"/devices").Return("application/json", listMetalDevicesResponseAfterIncreasePool3).Times(2) From b00ec6172cee63da3ddf5282f509fae8cd7e6613 Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Mon, 4 Sep 2023 22:47:11 +0530 Subject: [PATCH 120/125] Created a new env var for metal to replace/support packet env vars as usual --- .../cluster-autoscaler-deployment.yaml | 2 +- .../packet/packet_cloud_provider.go | 18 +++++++++++++----- .../packet/packet_manager_rest.go | 13 ++++++++++--- .../packet/packet_manager_rest_test.go | 2 +- .../packet/packet_node_group_test.go | 8 ++++---- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml index 94d066690fc3..3b0254097720 100644 --- a/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml +++ b/cluster-autoscaler/cloudprovider/packet/examples/cluster-autoscaler-deployment.yaml @@ -175,7 +175,7 @@ spec: secretKeyRef: name: bootstrap-token-cluster-autoscaler-packet key: token-secret - - name: PACKET_AUTH_TOKEN + - name: METAL_AUTH_TOKEN valueFrom: secretKeyRef: name: cluster-autoscaler-packet diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index 8cdb4abd9b8c..4ac984952719 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -42,7 +42,10 @@ const ( // master/controller node. DefaultControllerNodeLabelKey = "node-role.kubernetes.io/master" // ControllerNodeIdentifierEnv is the string for the environment variable. - ControllerNodeIdentifierEnv = "PACKET_CONTROLLER_NODE_IDENTIFIER_LABEL" + // Deprecated: This env var is deprecated in the favour packet's acquisition to equinix. + // Please use 'ControllerNodeIdentifierMetalEnv' + ControllerNodeIdentifierEnv = "PACKET_CONTROLLER_NODE_IDENTIFIER_LABEL" + ControllerNodeIdentifierMetalEnv = "METAL_CONTROLLER_NODE_IDENTIFIER_LABEL" ) var ( @@ -106,10 +109,15 @@ func (pcp *equinixMetalCloudProvider) AddNodeGroup(group equinixMetalNodeGroup) // // Since only a single node group is currently supported, the first node group is always returned. func (pcp *equinixMetalCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovider.NodeGroup, error) { - controllerNodeLabel := os.Getenv(ControllerNodeIdentifierEnv) - if controllerNodeLabel == "" { - klog.V(3).Infof("env %s not set, using default: %s", ControllerNodeIdentifierEnv, DefaultControllerNodeLabelKey) - controllerNodeLabel = DefaultControllerNodeLabelKey + controllerNodeLabel := DefaultControllerNodeLabelKey + value, present := os.LookupEnv(ControllerNodeIdentifierMetalEnv) + if present { + controllerNodeLabel = value + } else { + controllerNodeLabel = os.Getenv(ControllerNodeIdentifierEnv) + if controllerNodeLabel == "" { + klog.V(3).Infof("env %s not set, using default: %s", ControllerNodeIdentifierEnv, DefaultControllerNodeLabelKey) + } } if _, found := node.ObjectMeta.Labels[controllerNodeLabel]; found { diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index 9500c309064c..1bc1fd490c3b 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -49,6 +49,7 @@ const ( userAgent = "kubernetes/cluster-autoscaler/" + version.ClusterAutoscalerVersion expectedAPIContentTypePrefix = "application/json" prefix = "equinixmetal://" + metalAuthTokenEnv = "METAL_AUTH_TOKEN" ) type instanceType struct { @@ -298,9 +299,15 @@ func createEquinixMetalManagerRest(configReader io.Reader, discoverOpts cloudpro klog.Fatalf("No \"default\" or [Global] nodepool definition was found") } - metalAuthToken := os.Getenv("PACKET_AUTH_TOKEN") - if len(metalAuthToken) == 0 { - klog.Fatalf("PACKET_AUTH_TOKEN is required and missing") + var metalAuthToken string + value, present := os.LookupEnv(metalAuthTokenEnv) + if present { + metalAuthToken = value + } else { + metalAuthToken = os.Getenv("PACKET_AUTH_TOKEN") + if len(metalAuthToken) == 0 { + klog.Fatalf("%s or PACKET_AUTH_TOKEN is required and missing", metalAuthTokenEnv) + } } manager.authToken = metalAuthToken diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go index a0c3ae1c52a1..a402f44c265d 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest_test.go @@ -79,7 +79,7 @@ func TestListMetalDevices(t *testing.T) { var m *equinixMetalManagerRest server := NewHttpServerMock(MockFieldContentType, MockFieldResponse) defer server.Close() - if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { + if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { // If auth token set in env, hit the actual Packet API m = newTestMetalManagerRest(t, "https://api.equinix.com/metal/v1/") } else { diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go index b32ba9d6f772..9f8e514047a8 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go @@ -40,7 +40,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { server := NewHttpServerMock(MockFieldContentType, MockFieldResponse) defer server.Close() assert.Equal(t, true, true) - if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { + if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { // If auth token set in env, hit the actual Packet API m = newTestMetalManagerRest(t, "https://api.equinix.com") } else { @@ -106,7 +106,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { err = ngPool3.IncreaseSize(1) assert.NoError(t, err) - if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { + if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { // If testing with actual API give it some time until the nodes bootstrap time.Sleep(420 * time.Second) } @@ -120,7 +120,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { err = ngPool2.IncreaseSize(1) assert.NoError(t, err) - if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { + if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { // If testing with actual API give it some time until the nodes bootstrap time.Sleep(420 * time.Second) } @@ -151,7 +151,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { assert.NoError(t, err) // Wait a few seconds if talking to the actual Packet API - if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 { + if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { time.Sleep(10 * time.Second) } From 0d84ab69347a91cf9ccfd2a39b36533bcad019a7 Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Thu, 12 Oct 2023 21:50:11 +0530 Subject: [PATCH 121/125] Support backward compatibility for PACKET_MANAGER env var Signed-off-by: Ayush Rangwala --- cluster-autoscaler/cloudprovider/packet/packet_manager.go | 4 +++- .../cloudprovider/packet/packet_manager_rest.go | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager.go b/cluster-autoscaler/cloudprovider/packet/packet_manager.go index e20ee3dfafa0..04751c71fedc 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager.go @@ -56,7 +56,9 @@ func createEquinixMetalManager(configReader io.Reader, discoverOpts cloudprovide // For now get manager from env var, can consider adding flag later manager, ok := os.LookupEnv("EQUINIX_METAL_MANAGER") if !ok { - manager = defaultManager + if manager, ok = os.LookupEnv("PACKET_MANAGER"); !ok { + manager = defaultManager + } } switch manager { diff --git a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go index 1bc1fd490c3b..ac099c001e63 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_manager_rest.go @@ -23,7 +23,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "math/rand" "net/http" "os" @@ -360,7 +359,7 @@ func (mgr *equinixMetalManagerRest) request(ctx context.Context, method, url str } }() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("failed to read response body: %w", err) } From 1e4cb18fb2d1028b79b740ac657116fe63533279 Mon Sep 17 00:00:00 2001 From: Ayush Rangwala Date: Mon, 23 Oct 2023 17:35:07 +0530 Subject: [PATCH 122/125] fix: refactor cloud provider names Signed-off-by: Ayush Rangwala --- .../cloudprovider/builder/builder_all.go | 3 +-- .../cloudprovider/builder/builder_packet.go | 7 +++---- .../cloudprovider/packet/packet_cloud_provider.go | 12 +++++++----- .../cloudprovider/packet/packet_node_group_test.go | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_all.go b/cluster-autoscaler/cloudprovider/builder/builder_all.go index dfcd001ba55f..1398b5ad95b9 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_all.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_all.go @@ -121,8 +121,7 @@ func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGro return ovhcloud.BuildOVHcloud(opts, do, rl) case cloudprovider.HetznerProviderName: return hetzner.BuildHetzner(opts, do, rl) - case cloudprovider.PacketProviderName, - cloudprovider.EquinixMetalProviderName: + case cloudprovider.PacketProviderName, cloudprovider.EquinixMetalProviderName: return packet.BuildCloudProvider(opts, do, rl) case cloudprovider.ClusterAPIProviderName: return clusterapi.BuildClusterAPI(opts, do, rl) diff --git a/cluster-autoscaler/cloudprovider/builder/builder_packet.go b/cluster-autoscaler/cloudprovider/builder/builder_packet.go index bd7bb3c2e542..e41d743dd570 100644 --- a/cluster-autoscaler/cloudprovider/builder/builder_packet.go +++ b/cluster-autoscaler/cloudprovider/builder/builder_packet.go @@ -28,16 +28,15 @@ import ( // AvailableCloudProviders supported by the cloud provider builder. var AvailableCloudProviders = []string{ packet.ProviderName, - packet.EquinixMetalProviderName, + cloudprovider.EquinixMetalProviderName, } // DefaultCloudProvider for Packet-only build is Packet. -const DefaultCloudProvider = packet.EquinixMetalProviderName +const DefaultCloudProvider = cloudprovider.EquinixMetalProviderName func buildCloudProvider(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscoveryOptions, rl *cloudprovider.ResourceLimiter) cloudprovider.CloudProvider { switch opts.CloudProviderName { - case packet.ProviderName, - packet.EquinixMetalProviderName: + case packet.ProviderName, cloudprovider.EquinixMetalProviderName: return packet.BuildCloudProvider(opts, do, rl) } diff --git a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go index 4ac984952719..fbb5a96d0c30 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_cloud_provider.go @@ -25,17 +25,18 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + klog "k8s.io/klog/v2" + "k8s.io/autoscaler/cluster-autoscaler/cloudprovider" "k8s.io/autoscaler/cluster-autoscaler/config" "k8s.io/autoscaler/cluster-autoscaler/config/dynamic" "k8s.io/autoscaler/cluster-autoscaler/utils/errors" "k8s.io/autoscaler/cluster-autoscaler/utils/gpu" - klog "k8s.io/klog/v2" ) const ( - // ProviderName is the cloud provider name for Equinix Metal - ProviderName = "equinix-metal" + // ProviderName is the cloud provider name for Packet cloud provider, now named as equinixmetal + ProviderName = "packet" // GPULabel is the label added to nodes with GPU resource. GPULabel = "cloud.google.com/gke-accelerator" // DefaultControllerNodeLabelKey is the label added to Master/Controller to identify as @@ -44,7 +45,8 @@ const ( // ControllerNodeIdentifierEnv is the string for the environment variable. // Deprecated: This env var is deprecated in the favour packet's acquisition to equinix. // Please use 'ControllerNodeIdentifierMetalEnv' - ControllerNodeIdentifierEnv = "PACKET_CONTROLLER_NODE_IDENTIFIER_LABEL" + ControllerNodeIdentifierEnv = "PACKET_CONTROLLER_NODE_IDENTIFIER_LABEL" + // ControllerNodeIdentifierMetalEnv is the string for the environment variable of controller node id labels for equinix metal. ControllerNodeIdentifierMetalEnv = "METAL_CONTROLLER_NODE_IDENTIFIER_LABEL" ) @@ -72,7 +74,7 @@ func buildEquinixMetalCloudProvider(metalManager equinixMetalManager, resourceLi // Name returns the name of the cloud provider. func (pcp *equinixMetalCloudProvider) Name() string { - return ProviderName + return cloudprovider.EquinixMetalProviderName } // GPULabel returns the label added to nodes with GPU resource. diff --git a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go index 9f8e514047a8..56819727ee03 100644 --- a/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go +++ b/cluster-autoscaler/cloudprovider/packet/packet_node_group_test.go @@ -42,7 +42,7 @@ func TestIncreaseDecreaseSize(t *testing.T) { assert.Equal(t, true, true) if len(os.Getenv("PACKET_AUTH_TOKEN")) > 0 || len(os.Getenv(metalAuthTokenEnv)) > 0 { // If auth token set in env, hit the actual Packet API - m = newTestMetalManagerRest(t, "https://api.equinix.com") + m = newTestMetalManagerRest(t, "https://api.equinix.com/metal/v1") } else { // Set up a mock Packet API m = newTestMetalManagerRest(t, server.URL) From 6fd2cb5f09312365bc20553910d91ef02a5c1416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wr=C3=B3tniak?= Date: Fri, 20 Oct 2023 12:55:22 +0000 Subject: [PATCH 123/125] Documents startup/status/ignore node taints. --- cluster-autoscaler/FAQ.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cluster-autoscaler/FAQ.md b/cluster-autoscaler/FAQ.md index adbd745a3578..e4f976d68219 100644 --- a/cluster-autoscaler/FAQ.md +++ b/cluster-autoscaler/FAQ.md @@ -25,6 +25,7 @@ this document: * [Is Cluster Autoscaler compatible with CPU-usage-based node autoscalers?](#is-cluster-autoscaler-compatible-with-cpu-usage-based-node-autoscalers) * [How does Cluster Autoscaler work with Pod Priority and Preemption?](#how-does-cluster-autoscaler-work-with-pod-priority-and-preemption) * [How does Cluster Autoscaler remove nodes?](#how-does-cluster-autoscaler-remove-nodes) + * [How does Cluster Autoscaler treat nodes with status/startup/ignore taints?](#how-does-cluster-autoscaler-treat-nodes-with-taints) * [How to?](#how-to) * [I'm running cluster with nodes in multiple zones for HA purposes. Is that supported by Cluster Autoscaler?](#im-running-cluster-with-nodes-in-multiple-zones-for-ha-purposes-is-that-supported-by-cluster-autoscaler) * [How can I monitor Cluster Autoscaler?](#how-can-i-monitor-cluster-autoscaler) @@ -249,7 +250,37 @@ Cluster Autoscaler terminates the underlying instance in a cloud-provider-depend It does _not_ delete the [Node object](https://kubernetes.io/docs/concepts/architecture/nodes/#api-object) from Kubernetes. Cleaning up Node objects corresponding to terminated instances is the responsibility of the [cloud node controller](https://kubernetes.io/docs/concepts/architecture/cloud-controller/#node-controller), which can run as part of [kube-controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/) or [cloud-controller-manager](https://kubernetes.io/docs/concepts/architecture/cloud-controller/). +### How does Cluster Autoscaler treat nodes with status/startup/ignore taints? +### Startup taints +Startup taints are meant to be used when there is an operation that has to complete before any pods can run on the node, e.g. drivers installation. + +Cluster Autoscaler treats nodes tainted with `startup taints` as unready, but taken into account during scale up logic, assuming they will become ready shortly. + +**However, if the substantial number of nodes are tainted with `startup taints` (and therefore unready) for an extended period of time the Cluster Autoscaler +might stop working as it might assume the cluster is broken and should not be scaled (creating new nodes doesn't help as they don't become ready).** + +Startup taints are defined as: +- all taints with the prefix `startup-taint.cluster-autoscaler.kubernetes.io/`, +- all taints defined using `--startup-taint` flag. + +### Status taints +Status taints are meant to be used when a given node should not be used to run pods for the time being. + +Cluster Autoscaler internally treats nodes tainted with `status taints` as ready, but filtered out during scale up logic. + +This means that even though the node is ready, no pods should run there as long as the node is tainted and if necessary a scale-up should occur. + +Status taints are defined as: +- all taints with the prefix `status-taint.cluster-autoscaler.kubernetes.io/`, +- all taints defined using `--status-taint` flag. + +### Ignore taints +Ignore taints are now deprecated and treated as startup taints. + +Ignore taints are defined as: +- all taints with the prefix `ignore-taint.cluster-autoscaler.kubernetes.io/`, +- all taints defined using `--ignore-taint` flag. **************** # How to? From 69883a4bd235ae078e4ee45546cc52e4d668bd63 Mon Sep 17 00:00:00 2001 From: Dixita Narang Date: Tue, 24 Oct 2023 00:33:46 +0000 Subject: [PATCH 124/125] Adding price info for c3d (Price for preemptible instances is calculated as: (Spot price / On-demand price) * instance prices) --- .../cloudprovider/gce/gce_price_info.go | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/cluster-autoscaler/cloudprovider/gce/gce_price_info.go b/cluster-autoscaler/cloudprovider/gce/gce_price_info.go index 11a147b99a23..5763c7cb02cc 100644 --- a/cluster-autoscaler/cloudprovider/gce/gce_price_info.go +++ b/cluster-autoscaler/cloudprovider/gce/gce_price_info.go @@ -74,6 +74,7 @@ var ( "c2": 0.03398, "c2d": 0.029563, "c3": 0.03398, + "c3d": 0.02956, "e2": 0.021811, "m1": 0.0348, "n1": 0.031611, @@ -87,6 +88,7 @@ var ( "c2": 0.00455, "c2d": 0.003959, "c3": 0.00456, + "c3d": 0.003956, "e2": 0.002923, "m1": 0.0051, "n1": 0.004237, @@ -100,6 +102,7 @@ var ( "c2": 0.00822 / 0.03398, "c2d": 0.007154 / 0.029563, "c3": 0.003086 / 0.03398, + "c3d": 0.011825 / 0.02956, "e2": 0.006543 / 0.021811, "m1": 0.00733 / 0.0348, "n1": 0.006655 / 0.031611, @@ -192,6 +195,30 @@ var ( "c3-highcpu-44": 1.8964, "c3-highcpu-88": 3.7928, "c3-highcpu-176": 7.5856, + "c3d-standard-4": 0.1816, + "c3d-standard-8": 0.3632, + "c3d-standard-16": 0.7264, + "c3d-standard-30": 1.362, + "c3d-standard-60": 2.724, + "c3d-standard-90": 4.086, + "c3d-standard-180": 8.172, + "c3d-standard-360": 16.344, + "c3d-highmem-4": 0.24496, + "c3d-highmem-8": 0.48992, + "c3d-highmem-16": 0.97984, + "c3d-highmem-30": 1.8372, + "c3d-highmem-60": 3.6744, + "c3d-highmem-90": 5.5116, + "c3d-highmem-180": 11.0232, + "c3d-highmem-360": 22.0464, + "c3d-highcpu-4": 0.14992, + "c3d-highcpu-8": 0.29984, + "c3d-highcpu-16": 0.59968, + "c3d-highcpu-30": 1.1244, + "c3d-highcpu-60": 2.2488, + "c3d-highcpu-90": 3.3732, + "c3d-highcpu-180": 6.7464, + "c3d-highcpu-360": 13.4928, "e2-highcpu-2": 0.04947, "e2-highcpu-4": 0.09894, "e2-highcpu-8": 0.19788, From 85e97c22ce84f19c3c1dc97249c4adf778abb286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20=C5=BByli=C5=84ski?= Date: Tue, 24 Oct 2023 10:14:15 +0200 Subject: [PATCH 125/125] Bump CA golang to 1.21.3 --- .github/workflows/ci.yaml | 2 +- .../brightbox/brightbox_node_group.go | 7 ------- .../core/scaledown/actuation/actuator.go | 7 ------- .../core/scaledown/budgets/budgets.go | 7 ------- cluster-autoscaler/go.mod | 2 +- cluster-autoscaler/go.sum | 19 +++++++++++++++++++ 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index aff975642a72..421fa30a1e52 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -17,7 +17,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: '>=1.20.0' + go-version: '1.21.3' - uses: actions/checkout@v2 with: diff --git a/cluster-autoscaler/cloudprovider/brightbox/brightbox_node_group.go b/cluster-autoscaler/cloudprovider/brightbox/brightbox_node_group.go index 75d03de79caf..e790fbe928a6 100644 --- a/cluster-autoscaler/cloudprovider/brightbox/brightbox_node_group.go +++ b/cluster-autoscaler/cloudprovider/brightbox/brightbox_node_group.go @@ -334,13 +334,6 @@ func (ng *brightboxNodeGroup) findServerType() (*brightbox.ServerType, error) { return nil, fmt.Errorf("ServerType with handle '%s' doesn't exist", handle) } -func max(x, y int64) int64 { - if x > y { - return x - } - return y -} - func applyFudgeFactor(capacity *schedulerframework.Resource) *schedulerframework.Resource { allocatable := capacity.Clone() allocatable.Memory = max(0, capacity.Memory-max(capacity.Memory*memoryReservePercent/100, minimumMemoryReserve)) diff --git a/cluster-autoscaler/core/scaledown/actuation/actuator.go b/cluster-autoscaler/core/scaledown/actuation/actuator.go index d2f4315ea0e4..8fa30d8ed232 100644 --- a/cluster-autoscaler/core/scaledown/actuation/actuator.go +++ b/cluster-autoscaler/core/scaledown/actuation/actuator.go @@ -369,13 +369,6 @@ func (a *Actuator) createSnapshot(nodes []*apiv1.Node) (clustersnapshot.ClusterS return snapshot, nil } -func min(x, y int) int { - if x <= y { - return x - } - return y -} - func joinPodNames(pods []*apiv1.Pod) string { var names []string for _, pod := range pods { diff --git a/cluster-autoscaler/core/scaledown/budgets/budgets.go b/cluster-autoscaler/core/scaledown/budgets/budgets.go index 95202850e35c..4f2e8f2343b8 100644 --- a/cluster-autoscaler/core/scaledown/budgets/budgets.go +++ b/cluster-autoscaler/core/scaledown/budgets/budgets.go @@ -210,10 +210,3 @@ func (bp *ScaleDownBudgetProcessor) categorize(groups []*NodeGroupView) (individ } return individual, atomic } - -func min(x, y int) int { - if x <= y { - return x - } - return y -} diff --git a/cluster-autoscaler/go.mod b/cluster-autoscaler/go.mod index fe346fb0a88d..cd79d14012f8 100644 --- a/cluster-autoscaler/go.mod +++ b/cluster-autoscaler/go.mod @@ -1,6 +1,6 @@ module k8s.io/autoscaler/cluster-autoscaler -go 1.20 +go 1.21 require ( cloud.google.com/go/compute/metadata v0.2.3 diff --git a/cluster-autoscaler/go.sum b/cluster-autoscaler/go.sum index 2081c8502e1c..2998afa64723 100644 --- a/cluster-autoscaler/go.sum +++ b/cluster-autoscaler/go.sum @@ -40,6 +40,7 @@ cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2Aawl cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -116,6 +117,7 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= @@ -208,6 +210,7 @@ github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/ github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -220,6 +223,7 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -241,6 +245,7 @@ github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= +github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -331,6 +336,7 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cadvisor v0.47.3 h1:5XKTHBduWlBjmgw07uwEiC+Xa/FRd0MZI37oqlTagO0= github.com/google/cadvisor v0.47.3/go.mod h1:iJdTjcjyKHjLCf7OSTzwP5GxdfrkPusw2x5bwGvuLUw= github.com/google/cel-go v0.17.6 h1:QDvHTIJunIsbgN8yVukx0HGnsqVLSY6xGqo+17IjIyM= @@ -395,6 +401,7 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -419,6 +426,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -443,6 +451,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -555,6 +564,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 h1:if3/24+h9Sq6eDx8UUz1SO9cT9tizyIsATfB7b4D3tc= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -575,6 +585,7 @@ github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0 github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -610,6 +621,7 @@ github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtse github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= +github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -631,16 +643,21 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= go.etcd.io/etcd/client/v2 v2.305.9 h1:YZ2OLi0OvR0H75AcgSUajjd5uqKDKocQUqROTG11jIo= +go.etcd.io/etcd/client/v2 v2.305.9/go.mod h1:0NBdNx9wbxtEQLwAQtrDHwx58m02vXpDcgSYI2seohQ= go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= go.etcd.io/etcd/pkg/v3 v3.5.9 h1:6R2jg/aWd/zB9+9JxmijDKStGJAPFsX3e6BeJkMi6eQ= +go.etcd.io/etcd/pkg/v3 v3.5.9/go.mod h1:BZl0SAShQFk0IpLWR78T/+pyt8AruMHhTNNX73hkNVY= go.etcd.io/etcd/raft/v3 v3.5.9 h1:ZZ1GIHoUlHsn0QVqiRysAm3/81Xx7+i2d7nSdWxlOiI= +go.etcd.io/etcd/raft/v3 v3.5.9/go.mod h1:WnFkqzFdZua4LVlVXQEGhmooLeyS7mqzS4Pf4BCVqXg= go.etcd.io/etcd/server/v3 v3.5.9 h1:vomEmmxeztLtS5OEH7d0hBAg4cjVIu9wXuNzUZx2ZA0= +go.etcd.io/etcd/server/v3 v3.5.9/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqiAIt65g= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -657,6 +674,7 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 h1:lE9EJyw3/JhrjWH/hEy9FptnalDQgj7vpbgC2KCCCxE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0/go.mod h1:pcQ3MM3SWvrA71U4GDqv9UFDJ3HQsW7y5ZO3tDTlUdI= go.opentelemetry.io/contrib/propagators/b3 v1.10.0 h1:6AD2VV8edRdEYNaD8cNckpzgdMLU2kbV9OYyxt2kvCg= +go.opentelemetry.io/contrib/propagators/b3 v1.10.0/go.mod h1:oxvamQ/mTDFQVugml/uFS59+aEUnFLhmd1wsG+n5MOE= go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 h1:/fXHZHGvro6MVqV34fJzDhi7sHGpX3Ej/Qjmfn003ho= @@ -680,6 +698,7 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=